From 7fd755602e32b15fad9d5815e678e54e45032b75 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Thu, 4 Jun 2026 17:39:51 +0200 Subject: [PATCH 01/74] Task/extend personal finance tools (20260603) (#6982) Add URLs --- libs/common/src/lib/interfaces/product.ts | 1 + libs/common/src/lib/personal-finance-tools.ts | 321 ++++++++++++------ 2 files changed, 216 insertions(+), 106 deletions(-) diff --git a/libs/common/src/lib/interfaces/product.ts b/libs/common/src/lib/interfaces/product.ts index 5ef023ff8..6cd88fbe8 100644 --- a/libs/common/src/lib/interfaces/product.ts +++ b/libs/common/src/lib/interfaces/product.ts @@ -13,5 +13,6 @@ export interface Product { pricingPerYear?: string; regions?: string[]; slogan?: string; + url?: string; useAnonymously?: boolean; } diff --git a/libs/common/src/lib/personal-finance-tools.ts b/libs/common/src/lib/personal-finance-tools.ts index 063b4254c..e7d964872 100644 --- a/libs/common/src/lib/personal-finance-tools.ts +++ b/libs/common/src/lib/personal-finance-tools.ts @@ -7,7 +7,8 @@ export const personalFinanceTools: Product[] = [ key: 'allinvestview', languages: ['English'], name: 'AllInvestView', - slogan: 'All your Investments in One View' + slogan: 'All your Investments in One View', + url: 'https://www.allinvestview.com' }, { founded: 2019, @@ -16,14 +17,16 @@ export const personalFinanceTools: Product[] = [ key: 'allvue-systems', name: 'Allvue Systems', origin: 'United States', - slogan: 'Investment Software Suite' + slogan: 'Investment Software Suite', + url: 'https://www.allvuesystems.com' }, { founded: 2016, key: 'alphatrackr', languages: ['English'], name: 'AlphaTrackr', - slogan: 'Investment Portfolio Tracking Tool' + slogan: 'Investment Portfolio Tracking Tool', + url: 'https://www.alphatrackr.com' }, { founded: 2017, @@ -31,7 +34,8 @@ export const personalFinanceTools: Product[] = [ key: 'altoo', name: 'Altoo Wealth Platform', origin: 'Switzerland', - slogan: 'Simplicity for Complex Wealth' + slogan: 'Simplicity for Complex Wealth', + url: 'https://altoo.io' }, { founded: 2018, @@ -40,7 +44,8 @@ export const personalFinanceTools: Product[] = [ key: 'altruist', name: 'Altruist', origin: 'United States', - slogan: 'The wealth platform built for independent advisors' + slogan: 'The wealth platform built for independent advisors', + url: 'https://altruist.com' }, { founded: 2023, @@ -50,7 +55,8 @@ export const personalFinanceTools: Product[] = [ name: 'Amsflow Portfolio', origin: 'Singapore', pricingPerYear: '$228', - slogan: 'Portfolio Visualizer' + slogan: 'Portfolio Visualizer', + url: 'https://amsflow.com' }, { founded: 2018, @@ -61,7 +67,8 @@ export const personalFinanceTools: Product[] = [ name: 'Anlage.App', origin: 'Austria', pricingPerYear: '$120', - slogan: 'Analyze and track your portfolio.' + slogan: 'Analyze and track your portfolio.', + url: 'https://anlage.app' }, { founded: 2022, @@ -70,14 +77,16 @@ export const personalFinanceTools: Product[] = [ languages: ['English'], name: 'Asseta', origin: 'United States', - slogan: 'The Intelligent Family Office Suite' + slogan: 'The Intelligent Family Office Suite', + url: 'https://www.asseta.ai' }, { founded: 2016, key: 'atominvest', name: 'Atominvest', origin: 'United Kingdom', - slogan: 'Portfolio Management' + slogan: 'Portfolio Management', + url: 'https://www.atominvest.co' }, { founded: 2020, @@ -87,7 +96,8 @@ export const personalFinanceTools: Product[] = [ name: 'Balance Pro', origin: 'United States', pricingPerYear: '$47.99', - slogan: 'The Smarter Way to Track Your Finances' + slogan: 'The Smarter Way to Track Your Finances', + url: 'https://www.balancepro.app' }, { hasFreePlan: false, @@ -96,7 +106,8 @@ export const personalFinanceTools: Product[] = [ name: 'Banktivity', origin: 'United States', pricingPerYear: '$59.99', - slogan: 'Proactive money management app for macOS & iOS' + slogan: 'Proactive money management app for macOS & iOS', + url: 'https://www.banktivity.com' }, { founded: 2022, @@ -104,7 +115,8 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'basil-finance', name: 'Basil Finance', - slogan: 'The ultimate solution for tracking and managing your investments' + slogan: 'The ultimate solution for tracking and managing your investments', + url: 'https://basil.fi' }, { founded: 2020, @@ -114,7 +126,8 @@ export const personalFinanceTools: Product[] = [ name: 'Beanvest', origin: 'France', pricingPerYear: '$100', - slogan: 'Stock Portfolio Tracker for Smart Investors' + slogan: 'Stock Portfolio Tracker for Smart Investors', + url: 'https://beanvest.com' }, { founded: 2024, @@ -123,7 +136,8 @@ export const personalFinanceTools: Product[] = [ languages: ['Deutsch', 'English', 'Français', 'Italiano'], name: 'BlueBudget', origin: 'Switzerland', - slogan: 'Schweizer Budget App für einfache & smarte Budgetplanung' + slogan: 'Schweizer Budget App für einfache & smarte Budgetplanung', + url: 'https://www.bluebudget.ch' }, { founded: 2015, @@ -134,13 +148,15 @@ export const personalFinanceTools: Product[] = [ note: 'Originally named as NewRetirement', origin: 'United States', pricingPerYear: '$144', - slogan: 'Take control with retirement planning tools that begin with you' + slogan: 'Take control with retirement planning tools that begin with you', + url: 'https://www.boldin.com' }, { key: 'budgetpulse', name: 'BudgetPulse', origin: 'United States', - slogan: 'Giving life to your finance!' + slogan: 'Giving life to your finance!', + url: 'https://www.budgetpulse.com' }, { founded: 2007, @@ -151,7 +167,8 @@ export const personalFinanceTools: Product[] = [ origin: 'United States', pricingPerYear: '$48', regions: ['Global'], - slogan: 'Take control of your financial future' + slogan: 'Take control of your financial future', + url: 'https://www.buxfer.com' }, { hasFreePlan: true, @@ -160,7 +177,8 @@ export const personalFinanceTools: Product[] = [ name: 'Capitally', origin: 'Poland', pricingPerYear: '€80', - slogan: 'Optimize your investments performance' + slogan: 'Optimize your investments performance', + url: 'https://www.mycapitally.com' }, { founded: 2022, @@ -185,7 +203,8 @@ export const personalFinanceTools: Product[] = [ key: 'cobalt', name: 'Cobalt', origin: 'United States', - slogan: 'Next-Level Portfolio Monitoring' + slogan: 'Next-Level Portfolio Monitoring', + url: 'https://www.cobalt.pe' }, { founded: 2017, @@ -195,7 +214,8 @@ export const personalFinanceTools: Product[] = [ name: 'CoinStats', origin: 'Armenia', pricingPerYear: '$168', - slogan: 'Manage All Your Wallets & Exchanges From One Place' + slogan: 'Manage All Your Wallets & Exchanges From One Place', + url: 'https://coinstats.app' }, { founded: 2013, @@ -206,14 +226,16 @@ export const personalFinanceTools: Product[] = [ name: 'CoinTracking', origin: 'Germany', pricingPerYear: '$120', - slogan: 'The leading Crypto Portfolio Tracker & Tax Calculator' + slogan: 'The leading Crypto Portfolio Tracker & Tax Calculator', + url: 'https://cointracking.info' }, { founded: 2019, key: 'compound-planning', name: 'Compound Planning', origin: 'United States', - slogan: 'Modern Wealth & Investment Management' + slogan: 'Modern Wealth & Investment Management', + url: 'https://compoundplanning.com' }, { founded: 2019, @@ -223,7 +245,8 @@ export const personalFinanceTools: Product[] = [ name: 'Copilot Money', origin: 'United States', pricingPerYear: '$95', - slogan: 'Do money better with Copilot' + slogan: 'Do money better with Copilot', + url: 'https://www.copilot.money' }, { founded: 2014, @@ -232,7 +255,8 @@ export const personalFinanceTools: Product[] = [ name: 'CountAbout', origin: 'United States', pricingPerYear: '$9.99', - slogan: 'Customizable and Secure Personal Finance App' + slogan: 'Customizable and Secure Personal Finance App', + url: 'https://countabout.com' }, { founded: 2023, @@ -240,14 +264,16 @@ export const personalFinanceTools: Product[] = [ key: 'danti', name: 'Danti', origin: 'United Kingdom', - slogan: 'Digitising Generational Wealth' + slogan: 'Digitising Generational Wealth', + url: 'https://danti.io' }, { founded: 2020, key: 'de.fi', languages: ['English'], name: 'De.Fi', - slogan: 'DeFi Portfolio Tracker' + slogan: 'DeFi Portfolio Tracker', + url: 'https://de.fi' }, { founded: 2016, @@ -258,7 +284,8 @@ export const personalFinanceTools: Product[] = [ name: 'DeFi Portfolio Tracker by Zerion', origin: 'United States', pricingPerYear: '$99', - slogan: 'DeFi Portfolio Tracker for All Chains' + slogan: 'DeFi Portfolio Tracker for All Chains', + url: 'https://zerion.io/defi-portfolio-tracker' }, { founded: 2022, @@ -269,7 +296,8 @@ export const personalFinanceTools: Product[] = [ name: 'DEGIRO Portfolio Tracker by Capitalyse', origin: 'Netherlands', pricingPerYear: '€24', - slogan: 'Democratizing Data Analytics' + slogan: 'Democratizing Data Analytics', + url: 'https://capitalyse.app/app/degiro' }, { founded: 2017, @@ -280,7 +308,8 @@ export const personalFinanceTools: Product[] = [ note: 'Acquired by eToro', origin: 'Belgium', pricingPerYear: '$150', - slogan: 'The app to track all your investments. Make smart moves only.' + slogan: 'The app to track all your investments. Make smart moves only.', + url: 'https://delta.app' }, { hasFreePlan: true, @@ -289,7 +318,8 @@ export const personalFinanceTools: Product[] = [ languages: ['English'], name: 'Digrin', pricingPerYear: '$49.90', - slogan: 'Dividend Portfolio Tracker' + slogan: 'Dividend Portfolio Tracker', + url: 'https://www.digrin.com' }, { founded: 2019, @@ -300,7 +330,8 @@ export const personalFinanceTools: Product[] = [ name: 'DivvyDiary', origin: 'Germany', pricingPerYear: '€65', - slogan: 'Your personal Dividend Calendar' + slogan: 'Your personal Dividend Calendar', + url: 'https://divvydiary.com' }, { founded: 2009, @@ -309,7 +340,8 @@ export const personalFinanceTools: Product[] = [ name: 'Empower', note: 'Originally named as Personal Capital', origin: 'United States', - slogan: 'Get answers to your money questions' + slogan: 'Get answers to your money questions', + url: 'https://www.empower.com' }, { alias: '8figures', @@ -317,7 +349,8 @@ export const personalFinanceTools: Product[] = [ key: 'eightfigures', name: '8FIGURES', origin: 'United States', - slogan: 'Portfolio Tracker Designed by Professional Investors' + slogan: 'Portfolio Tracker Designed by Professional Investors', + url: 'https://8figures.com' }, { founded: 2010, @@ -325,7 +358,8 @@ export const personalFinanceTools: Product[] = [ key: 'etops', name: 'etops', origin: 'Switzerland', - slogan: 'Your financial superpower' + slogan: 'Your financial superpower', + url: 'https://www.etops.com' }, { founded: 2020, @@ -335,7 +369,8 @@ export const personalFinanceTools: Product[] = [ name: 'Exirio', origin: 'United States', pricingPerYear: '$100', - slogan: 'All your wealth, in one place.' + slogan: 'All your wealth, in one place.', + url: 'https://www.exirio.com' }, { founded: 2018, @@ -345,7 +380,8 @@ export const personalFinanceTools: Product[] = [ name: 'Fey', origin: 'Canada', pricingPerYear: '$300', - slogan: 'Make better investments.' + slogan: 'Make better investments.', + url: 'https://fey.com' }, { founded: 2023, @@ -356,7 +392,8 @@ export const personalFinanceTools: Product[] = [ name: 'Fina', origin: 'United States', pricingPerYear: '$115', - slogan: 'Flexible Financial Management' + slogan: 'Flexible Financial Management', + url: 'https://www.fina.money' }, { founded: 2023, @@ -366,7 +403,8 @@ export const personalFinanceTools: Product[] = [ name: 'Finanzfluss Copilot', origin: 'Germany', pricingPerYear: '€69.99', - slogan: 'Portfolio Tracker für dein Vermögen' + slogan: 'Portfolio Tracker für dein Vermögen', + url: 'https://www.finanzfluss.de/copilot' }, { founded: 2020, @@ -374,7 +412,8 @@ export const personalFinanceTools: Product[] = [ languages: ['Deutsch', 'English', 'Français'], name: 'Finary', origin: 'United States', - slogan: 'Real-Time Portfolio Tracker & Stock Tracker' + slogan: 'Real-Time Portfolio Tracker & Stock Tracker', + url: 'https://finary.com' }, { founded: 2021, @@ -385,14 +424,16 @@ export const personalFinanceTools: Product[] = [ name: 'FINATEKA', origin: 'United States', slogan: - 'The most convenient mobile application for personal finance accounting' + 'The most convenient mobile application for personal finance accounting', + url: 'https://finateka.com' }, { founded: 2022, key: 'fincake', name: 'Fincake', origin: 'British Virgin Islands', - slogan: 'Easy-to-use Portfolio Tracker' + slogan: 'Easy-to-use Portfolio Tracker', + url: 'https://fincake.io' }, { founded: 2021, @@ -400,7 +441,8 @@ export const personalFinanceTools: Product[] = [ key: 'finvest', name: 'Finvest', origin: 'United States', - slogan: 'Grow your wealth in a stress-free way' + slogan: 'Grow your wealth in a stress-free way', + url: 'https://www.getfinvest.com' }, { founded: 2023, @@ -409,7 +451,8 @@ export const personalFinanceTools: Product[] = [ name: 'FinWise', origin: 'South Africa', pricingPerYear: '€69.99', - slogan: 'Personal finances, simplified' + slogan: 'Personal finances, simplified', + url: 'https://finwiseapp.io' }, { founded: 2021, @@ -420,7 +463,8 @@ export const personalFinanceTools: Product[] = [ name: 'FIREkit', origin: 'Ukraine', pricingPerYear: '$40', - slogan: 'A simple solution to track your wealth online' + slogan: 'A simple solution to track your wealth online', + url: 'https://firekit.space' }, { hasFreePlan: true, @@ -430,7 +474,8 @@ export const personalFinanceTools: Product[] = [ name: 'folishare', origin: 'Austria', pricingPerYear: '$65', - slogan: 'Take control over your investments' + slogan: 'Take control over your investments', + url: 'https://www.folishare.com' }, { hasFreePlan: true, @@ -448,7 +493,8 @@ export const personalFinanceTools: Product[] = [ origin: 'Argentina', pricingPerYear: '$60', regions: ['Global'], - slogan: 'Take control of your finances from WhatsApp' + slogan: 'Take control of your finances from WhatsApp', + url: 'https://gasti.pro' }, { founded: 2020, @@ -459,7 +505,8 @@ export const personalFinanceTools: Product[] = [ name: 'getquin', origin: 'Germany', pricingPerYear: '€48', - slogan: 'Portfolio Tracker, Analysis & Community' + slogan: 'Portfolio Tracker, Analysis & Community', + url: 'https://www.getquin.com' }, { hasFreePlan: true, @@ -479,6 +526,7 @@ export const personalFinanceTools: Product[] = [ name: 'Holistic', origin: 'Germany', slogan: 'Die All-in-One Lösung für dein Vermögen.', + url: 'https://holistic.capital', useAnonymously: true }, { @@ -487,7 +535,8 @@ export const personalFinanceTools: Product[] = [ key: 'honeydue', name: 'Honeydue', origin: 'United States', - slogan: 'Finance App for Couples' + slogan: 'Finance App for Couples', + url: 'https://www.honeydue.com' }, { founded: 2022, @@ -515,7 +564,8 @@ export const personalFinanceTools: Product[] = [ key: 'investify', name: 'Investify', origin: 'Pakistan', - slogan: 'Advanced portfolio tracking and stock market information' + slogan: 'Advanced portfolio tracking and stock market information', + url: 'https://www.investify.pk' }, { founded: 2021, @@ -527,6 +577,7 @@ export const personalFinanceTools: Product[] = [ origin: 'Switzerland', pricingPerYear: '$156', slogan: 'Track all your assets, investments and portfolios in one place', + url: 'https://invmon.com', useAnonymously: true }, { @@ -537,7 +588,8 @@ export const personalFinanceTools: Product[] = [ name: 'justETF', origin: 'Germany', pricingPerYear: '€119', - slogan: 'ETF portfolios made simple' + slogan: 'ETF portfolios made simple', + url: 'https://www.justetf.com' }, { founded: 2018, @@ -546,7 +598,8 @@ export const personalFinanceTools: Product[] = [ key: 'koinly', name: 'Koinly', origin: 'Singapore', - slogan: 'Track all your crypto wallets in one place' + slogan: 'Track all your crypto wallets in one place', + url: 'https://koinly.io' }, { founded: 2016, @@ -556,7 +609,8 @@ export const personalFinanceTools: Product[] = [ name: 'Koyfin', origin: 'United States', pricingPerYear: '$468', - slogan: 'Comprehensive financial data analysis' + slogan: 'Comprehensive financial data analysis', + url: 'https://www.koyfin.com' }, { founded: 2019, @@ -566,7 +620,8 @@ export const personalFinanceTools: Product[] = [ name: 'Kubera®', origin: 'United States', pricingPerYear: '$249', - slogan: 'The Time Machine for your Net Worth' + slogan: 'The Time Machine for your Net Worth', + url: 'https://www.kubera.com' }, { founded: 2021, @@ -575,7 +630,8 @@ export const personalFinanceTools: Product[] = [ languages: ['Deutsch', 'English'], name: 'Leafs', origin: 'Switzerland', - slogan: 'Sustainability insights for wealth managers' + slogan: 'Sustainability insights for wealth managers', + url: 'https://leafs.ch' }, { founded: 2018, @@ -585,7 +641,8 @@ export const personalFinanceTools: Product[] = [ name: 'Magnifi', origin: 'United States', pricingPerYear: '$132', - slogan: 'AI Investing Assistant' + slogan: 'AI Investing Assistant', + url: 'https://magnifi.com' }, { founded: 2022, @@ -597,14 +654,16 @@ export const personalFinanceTools: Product[] = [ origin: 'Germany', pricingPerYear: '€168', regions: ['Global'], - slogan: 'Track your investments' + slogan: 'Track your investments', + url: 'https://markets.sh' }, { founded: 2010, key: 'masttro', name: 'Masttro', origin: 'United States', - slogan: 'Your platform for wealth in full view' + slogan: 'Your platform for wealth in full view', + url: 'https://masttro.com' }, { founded: 2021, @@ -619,7 +678,8 @@ export const personalFinanceTools: Product[] = [ origin: 'United States', pricingPerYear: '$145', regions: ['United States'], - slogan: 'Your financial future, in your control' + slogan: 'Your financial future, in your control', + url: 'https://github.com/maybe-finance/maybe' }, { hasFreePlan: false, @@ -630,7 +690,8 @@ export const personalFinanceTools: Product[] = [ origin: 'United States', pricingPerYear: '$204', regions: ['Canada', 'United States'], - slogan: 'The smartest way to track your crypto' + slogan: 'The smartest way to track your crypto', + url: 'https://www.merlincrypto.com' }, { founded: 1991, @@ -649,7 +710,8 @@ export const personalFinanceTools: Product[] = [ name: 'Monarch Money', origin: 'United States', pricingPerYear: '$99.99', - slogan: 'The modern way to manage your money' + slogan: 'The modern way to manage your money', + url: 'https://www.monarch.com' }, { founded: 1999, @@ -659,7 +721,8 @@ export const personalFinanceTools: Product[] = [ name: 'Moneydance', origin: 'Scotland', pricingPerYear: '$100', - slogan: 'Personal Finance Manager for Mac, Windows, and Linux' + slogan: 'Personal Finance Manager for Mac, Windows, and Linux', + url: 'https://moneydance.com' }, { hasFreePlan: true, @@ -668,7 +731,8 @@ export const personalFinanceTools: Product[] = [ name: 'Money Peak', note: 'Originally named as goSPATZ', origin: 'Germany', - slogan: 'Dein smarter Finance Assistant' + slogan: 'Dein smarter Finance Assistant', + url: 'https://moneypeak.ai' }, { founded: 2007, @@ -677,14 +741,16 @@ export const personalFinanceTools: Product[] = [ note: 'License is a perpetual license', origin: 'United States', pricingPerYear: '$59.99', - slogan: 'Have total control of your financial life' + slogan: 'Have total control of your financial life', + url: 'https://www.moneyspire.com' }, { key: 'moneywiz', name: 'MoneyWiz', origin: 'United States', pricingPerYear: '$29.99', - slogan: 'Get money management superpowers' + slogan: 'Get money management superpowers', + url: 'https://www.wiz.money' }, { hasFreePlan: false, @@ -692,7 +758,8 @@ export const personalFinanceTools: Product[] = [ key: 'monse', name: 'Monse', pricingPerYear: '$60', - slogan: 'Gain financial control and keep your data private.' + slogan: 'Gain financial control and keep your data private.', + url: 'https://monse.app' }, { founded: 2025, @@ -703,7 +770,8 @@ export const personalFinanceTools: Product[] = [ name: 'Monsy', origin: 'Indonesia', pricingPerYear: '$20', - slogan: 'Smart, simple, stress-free money tracking.' + slogan: 'Smart, simple, stress-free money tracking.', + url: 'https://www.monsy.app' }, { hasFreePlan: true, @@ -713,7 +781,8 @@ export const personalFinanceTools: Product[] = [ name: 'Morningstar® Portfolio Manager', origin: 'United States', slogan: - 'Track your equity, fund, investment trust, ETF and pension investments in one place.' + 'Track your equity, fund, investment trust, ETF and pension investments in one place.', + url: 'https://www.morningstar.com/mm' }, { founded: 2020, @@ -723,7 +792,8 @@ export const personalFinanceTools: Product[] = [ name: 'Crypto Portfolio Tracker by Nansen', origin: 'Singapore', pricingPerYear: '$1188', - slogan: 'Your Complete Crypto Portfolio, Reimagined' + slogan: 'Your Complete Crypto Portfolio, Reimagined', + url: 'https://www.nansen.ai/crypto-portfolio-tracker' }, { founded: 2017, @@ -733,7 +803,8 @@ export const personalFinanceTools: Product[] = [ name: 'Navexa', origin: 'Australia', pricingPerYear: '$90', - slogan: 'The Intelligent Portfolio Tracker' + slogan: 'The Intelligent Portfolio Tracker', + url: 'https://www.navexa.com' }, { founded: 2020, @@ -745,21 +816,24 @@ export const personalFinanceTools: Product[] = [ origin: 'Germany', pricingPerYear: '€99.99', regions: ['Austria', 'Germany', 'Switzerland'], - slogan: 'Dein Vermögen immer im Blick' + slogan: 'Dein Vermögen immer im Blick', + url: 'https://www.parqet.com' }, { hasSelfHostingAbility: false, key: 'peek', name: 'Peek', origin: 'Singapore', - slogan: 'Feel in control of your money without spreadsheets or shame' + slogan: 'Feel in control of your money without spreadsheets or shame', + url: 'https://peek.money' }, { key: 'pennies', name: 'Pennies', origin: 'United States', pricingPerYear: '$39.99', - slogan: 'Your money. Made simple.' + slogan: 'Your money. Made simple.', + url: 'https://www.getpennies.com' }, { founded: 2022, @@ -769,7 +843,8 @@ export const personalFinanceTools: Product[] = [ name: 'PinkLion', origin: 'Germany', pricingPerYear: '€50', - slogan: 'Invest smarter, not harder' + slogan: 'Invest smarter, not harder', + url: 'https://pinklion.xyz' }, { founded: 2023, @@ -780,7 +855,8 @@ export const personalFinanceTools: Product[] = [ name: 'Plainzer', origin: 'Poland', pricingPerYear: '$74', - slogan: 'Free dividend tracker for your portfolio' + slogan: 'Free dividend tracker for your portfolio', + url: 'https://plainzer.com' }, { founded: 2023, @@ -788,7 +864,8 @@ export const personalFinanceTools: Product[] = [ key: 'plannix', name: 'Plannix', origin: 'Italy', - slogan: 'Your Personal Finance Hub' + slogan: 'Your Personal Finance Hub', + url: 'https://www.plannix.co' }, { founded: 2015, @@ -798,7 +875,8 @@ export const personalFinanceTools: Product[] = [ name: 'PocketGuard', origin: 'United States', pricingPerYear: '$74.99', - slogan: 'Budgeting App & Finance Planner' + slogan: 'Budgeting App & Finance Planner', + url: 'https://pocketguard.com' }, { founded: 2008, @@ -810,7 +888,8 @@ export const personalFinanceTools: Product[] = [ origin: 'New Zealand', pricingPerYear: '$120', regions: ['Global'], - slogan: 'Know where your money is going' + slogan: 'Know where your money is going', + url: 'https://www.pocketsmith.com' }, { hasFreePlan: false, @@ -820,7 +899,8 @@ export const personalFinanceTools: Product[] = [ name: 'Portfolio Dividend Tracker', origin: 'Netherlands', pricingPerYear: '€60', - slogan: 'Manage all your portfolios' + slogan: 'Manage all your portfolios', + url: 'https://portfoliodividendtracker.com' }, { hasFreePlan: true, @@ -829,7 +909,8 @@ export const personalFinanceTools: Product[] = [ languages: ['English'], name: 'Portfolio Visualizer', pricingPerYear: '$360', - slogan: 'Tools for Better Investors' + slogan: 'Tools for Better Investors', + url: 'https://www.portfoliovisualizer.com' }, { hasFreePlan: true, @@ -849,7 +930,8 @@ export const personalFinanceTools: Product[] = [ name: 'Portseido', origin: 'Thailand', pricingPerYear: '$96', - slogan: 'Portfolio Performance and Dividend Tracker' + slogan: 'Portfolio Performance and Dividend Tracker', + url: 'https://www.portseido.com' }, { founded: 2021, @@ -859,7 +941,8 @@ export const personalFinanceTools: Product[] = [ name: 'ProjectionLab', origin: 'United States', pricingPerYear: '$108', - slogan: 'Build Financial Plans You Love.' + slogan: 'Build Financial Plans You Love.', + url: 'https://projectionlab.com' }, { founded: 2022, @@ -869,7 +952,8 @@ export const personalFinanceTools: Product[] = [ name: 'Pro Stock Tracker', origin: 'United Kingdom', pricingPerYear: '$60', - slogan: 'The stock portfolio tracker built for long-term investors' + slogan: 'The stock portfolio tracker built for long-term investors', + url: 'https://prostocktracker.com' }, { founded: 2015, @@ -877,7 +961,8 @@ export const personalFinanceTools: Product[] = [ key: 'rocket-money', name: 'Rocket Money', origin: 'United States', - slogan: 'Track your net worth' + slogan: 'Track your net worth', + url: 'https://www.rocketmoney.com' }, { founded: 2019, @@ -897,14 +982,16 @@ export const personalFinanceTools: Product[] = [ name: 'Seeking Alpha', origin: 'United States', pricingPerYear: '$239', - slogan: 'Stock Market Analysis & Tools for Investors' + slogan: 'Stock Market Analysis & Tools for Investors', + url: 'https://seekingalpha.com' }, { founded: 2022, key: 'segmio', name: 'Segmio', origin: 'Romania', - slogan: 'Wealth Management and Net Worth Tracking' + slogan: 'Wealth Management and Net Worth Tracking', + url: 'https://www.segmio.com' }, { founded: 2007, @@ -915,7 +1002,8 @@ export const personalFinanceTools: Product[] = [ origin: 'New Zealand', pricingPerYear: '$135', regions: ['Global'], - slogan: 'Stock Portfolio Tracker' + slogan: 'Stock Portfolio Tracker', + url: 'https://www.sharesight.com' }, { hasFreePlan: true, @@ -932,7 +1020,8 @@ export const personalFinanceTools: Product[] = [ name: 'Simple Portfolio', origin: 'Czech Republic', pricingPerYear: '€80', - slogan: 'Stock Portfolio Tracker' + slogan: 'Stock Portfolio Tracker', + url: 'https://simpleportfolio.app' }, { founded: 2014, @@ -942,7 +1031,8 @@ export const personalFinanceTools: Product[] = [ name: 'Stock Portfolio Tracker & Visualizer by Simply Wall St', origin: 'Australia', pricingPerYear: '$120', - slogan: 'Smart portfolio tracker for informed investors' + slogan: 'Smart portfolio tracker for informed investors', + url: 'https://simplywall.st' }, { founded: 2021, @@ -952,7 +1042,8 @@ export const personalFinanceTools: Product[] = [ name: 'Snowball Analytics', origin: 'France', pricingPerYear: '$80', - slogan: 'Simple and powerful portfolio tracker' + slogan: 'Simple and powerful portfolio tracker', + url: 'https://snowball-analytics.com' }, { key: 'splashmoney', @@ -966,13 +1057,15 @@ export const personalFinanceTools: Product[] = [ key: 'stock-events', name: 'Stock Events', origin: 'Germany', - slogan: 'Track all your Investments' + slogan: 'Track all your Investments', + url: 'https://stockevents.app' }, { key: 'stockle', name: 'Stockle', origin: 'Finland', - slogan: 'Supercharge your investments tracking experience' + slogan: 'Supercharge your investments tracking experience', + url: 'https://stockle.app' }, { founded: 2008, @@ -991,7 +1084,8 @@ export const personalFinanceTools: Product[] = [ name: 'Stock Rover', origin: 'United States', pricingPerYear: '$79.99', - slogan: 'Investment Research and Portfolio Management' + slogan: 'Investment Research and Portfolio Management', + url: 'https://www.stockrover.com' }, { hasFreePlan: true, @@ -1001,7 +1095,8 @@ export const personalFinanceTools: Product[] = [ name: 'Stonksfolio', origin: 'Bulgaria', pricingPerYear: '€49.90', - slogan: 'Visualize all of your portfolios' + slogan: 'Visualize all of your portfolios', + url: 'https://stonksfolio.com' }, { hasFreePlan: true, @@ -1010,7 +1105,8 @@ export const personalFinanceTools: Product[] = [ name: 'Sumio', origin: 'Czech Republic', pricingPerYear: '$20', - slogan: 'Sum up and build your wealth.' + slogan: 'Sum up and build your wealth.', + url: 'https://www.sumio.app' }, { founded: 2016, @@ -1020,7 +1116,8 @@ export const personalFinanceTools: Product[] = [ origin: 'United States', pricingPerYear: '$79', slogan: - 'Your financial life in a spreadsheet, automatically updated each day' + 'Your financial life in a spreadsheet, automatically updated each day', + url: 'https://tiller.com' }, { founded: 2011, @@ -1030,7 +1127,8 @@ export const personalFinanceTools: Product[] = [ name: 'Tradervue', origin: 'United States', pricingPerYear: '$360', - slogan: 'The Trading Journal to Improve Your Trading Performance' + slogan: 'The Trading Journal to Improve Your Trading Performance', + url: 'https://www.tradervue.com' }, { founded: 2020, @@ -1052,7 +1150,8 @@ export const personalFinanceTools: Product[] = [ name: 'Turbobulls', origin: 'Romania', pricingPerYear: '€39.99', - slogan: 'Your complete financial dashboard. Actually private.' + slogan: 'Your complete financial dashboard. Actually private.', + url: 'https://www.turbobulls.com' }, { hasFreePlan: true, @@ -1063,6 +1162,7 @@ export const personalFinanceTools: Product[] = [ origin: 'Switzerland', pricingPerYear: '$300', slogan: 'Your Portfolio. Revealed.', + url: 'https://www.utluna.com', useAnonymously: true }, { @@ -1072,7 +1172,8 @@ export const personalFinanceTools: Product[] = [ name: 'Vyzer', origin: 'United States', pricingPerYear: '$348', - slogan: 'Virtual Family Office for Smart Wealth Management' + slogan: 'Virtual Family Office for Smart Wealth Management', + url: 'https://vyzer.co' }, { founded: 2020, @@ -1082,7 +1183,8 @@ export const personalFinanceTools: Product[] = [ name: 'Walletguide', origin: 'Germany', pricingPerYear: '€90', - slogan: 'Personal finance reimagined with AI' + slogan: 'Personal finance reimagined with AI', + url: 'https://walletguide.com' }, { hasSelfHostingAbility: false, @@ -1102,7 +1204,8 @@ export const personalFinanceTools: Product[] = [ languages: ['English'], name: 'Wealthbrain', origin: 'United Arab Emirates', - slogan: 'Portfolio Management System' + slogan: 'Portfolio Management System', + url: 'https://wealthbrain.com' }, { founded: 2024, @@ -1113,7 +1216,8 @@ export const personalFinanceTools: Product[] = [ languages: ['English'], name: 'Wealthfolio', origin: 'Canada', - slogan: 'Desktop Investment Tracker' + slogan: 'Desktop Investment Tracker', + url: 'https://wealthfolio.app' }, { founded: 2015, @@ -1124,7 +1228,8 @@ export const personalFinanceTools: Product[] = [ name: 'Wealthica', origin: 'Canada', pricingPerYear: '$50', - slogan: 'See all your investments in one place' + slogan: 'See all your investments in one place', + url: 'https://wealthica.com' }, { founded: 2018, @@ -1132,7 +1237,8 @@ export const personalFinanceTools: Product[] = [ key: 'wealthposition', name: 'WealthPosition', pricingPerYear: '$60', - slogan: 'Personal Finance & Budgeting App' + slogan: 'Personal Finance & Budgeting App', + url: 'https://www.wealthposition.com' }, { founded: 2018, @@ -1141,7 +1247,8 @@ export const personalFinanceTools: Product[] = [ languages: ['English'], name: 'Wealthy Tracker', origin: 'India', - slogan: 'One app to manage all your investments' + slogan: 'One app to manage all your investments', + url: 'https://www.wealthy.in/tracker' }, { key: 'whal', @@ -1170,7 +1277,8 @@ export const personalFinanceTools: Product[] = [ name: 'YNAB (You Need a Budget)', origin: 'United States', pricingPerYear: '$109', - slogan: 'Change Your Relationship With Money' + slogan: 'Change Your Relationship With Money', + url: 'https://www.ynab.com' }, { founded: 2019, @@ -1180,6 +1288,7 @@ export const personalFinanceTools: Product[] = [ name: 'Ziggma', origin: 'United States', pricingPerYear: '$84', - slogan: 'Your solution for investing success' + slogan: 'Your solution for investing success', + url: 'https://ziggma.com' } ]; From cc7fa8232ac45ae66aa25022f5118763ee671e47 Mon Sep 17 00:00:00 2001 From: Kenrick Tandrian <60643640+KenTandrian@users.noreply.github.com> Date: Thu, 4 Jun 2026 22:40:48 +0700 Subject: [PATCH 02/74] Task/resolve warnings in angular-sass plugin (#6973) * feat(client): migrate table import to @use * feat(client): migrate bootstrap import to @use * feat(client): implement color channel * feat(client): migrate svgmap import to @use --- apps/client/src/styles.scss | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/apps/client/src/styles.scss b/apps/client/src/styles.scss index 4321622a1..045de2eb6 100644 --- a/apps/client/src/styles.scss +++ b/apps/client/src/styles.scss @@ -1,10 +1,11 @@ @use '@angular/material' as mat; +@use 'sass:color'; -@import './styles/bootstrap'; -@import './styles/table'; -@import './styles/variables'; +@use './styles/bootstrap'; +@use './styles/table' as table; +@use './styles/variables' as variables; -@import 'svgmap/style.min'; +@use 'svgmap/style.min'; :root { --dark-background: rgb(25, 25, 25); @@ -12,8 +13,10 @@ --light-background: rgb(255, 255, 255); --dark-primary-text: - #{red($dark-primary-text)}, #{green($dark-primary-text)}, - #{blue($dark-primary-text)}, #{alpha($dark-primary-text)}; + #{color.channel(variables.$dark-primary-text, 'red')}, + #{color.channel(variables.$dark-primary-text, 'green')}, + #{color.channel(variables.$dark-primary-text, 'blue')}, + #{color.channel(variables.$dark-primary-text, 'alpha')}; --dark-secondary-text: 0, 0, 0, 0.54; --dark-accent-text: 0, 0, 0, 0.87; --dark-warn-text: 0, 0, 0, 0.87; @@ -21,8 +24,10 @@ --dark-dividers: 0, 0, 0, 0.12; --dark-focused: 0, 0, 0, 0.12; --light-primary-text: - #{red($light-primary-text)}, #{green($light-primary-text)}, - #{blue($light-primary-text)}, #{alpha($light-primary-text)}; + #{color.channel(variables.$light-primary-text, 'red')}, + #{color.channel(variables.$light-primary-text, 'green')}, + #{color.channel(variables.$light-primary-text, 'blue')}, + #{color.channel(variables.$light-primary-text, 'alpha')}; --light-secondary-text: 255, 255, 255, 0.7; --light-accent-text: 255, 255, 255, 1; --light-warn-text: 255, 255, 255, 1; @@ -240,7 +245,7 @@ body { } .gf-table { - @include gf-table(true); + @include table.gf-table(true); } .mat-mdc-dialog-container { @@ -353,7 +358,7 @@ ngx-skeleton-loader { } .gf-table { - @include gf-table; + @include table.gf-table; } .gf-text-wrap-balance { From 3adf88044486df623d9dd1bc3ea6e5f4a1285ff7 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 5 Jun 2026 17:24:52 +0200 Subject: [PATCH 03/74] Task/extend personal finance tools (#6985) * Gustav * MyFinanceTools * Networthy * Rallies * trefolio --- libs/common/src/lib/personal-finance-tools.ts | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/libs/common/src/lib/personal-finance-tools.ts b/libs/common/src/lib/personal-finance-tools.ts index e7d964872..23697e63b 100644 --- a/libs/common/src/lib/personal-finance-tools.ts +++ b/libs/common/src/lib/personal-finance-tools.ts @@ -518,6 +518,18 @@ export const personalFinanceTools: Product[] = [ origin: 'Germany', slogan: 'Volle Kontrolle über deine Investitionen' }, + { + founded: 2024, + hasFreePlan: true, + hasSelfHostingAbility: false, + key: 'gustav', + languages: ['Français'], + name: 'Gustav', + origin: 'France', + pricingPerYear: '€59.99', + slogan: 'Prenez enfin le contrôle de votre argent', + url: 'https://get-gustav.com' + }, { hasFreePlan: true, hasSelfHostingAbility: false, @@ -784,6 +796,16 @@ export const personalFinanceTools: Product[] = [ 'Track your equity, fund, investment trust, ETF and pension investments in one place.', url: 'https://www.morningstar.com/mm' }, + { + hasFreePlan: true, + hasSelfHostingAbility: false, + key: 'myfinancetools', + languages: ['Deutsch', 'English', 'Español', 'Français', 'Português'], + name: 'MyFinanceTools', + pricingPerYear: '$36', + slogan: 'Your Personal Finance Command Center', + url: 'https://myfinancetools.io' + }, { founded: 2020, hasFreePlan: true, @@ -806,6 +828,15 @@ export const personalFinanceTools: Product[] = [ slogan: 'The Intelligent Portfolio Tracker', url: 'https://www.navexa.com' }, + { + hasFreePlan: true, + hasSelfHostingAbility: false, + key: 'networthy', + name: 'Networthy', + pricingPerYear: '€49.99', + slogan: 'Your Personal Financial Analyst, powered by AI.', + url: 'https://networthy.pro' + }, { founded: 2020, hasSelfHostingAbility: false, @@ -955,6 +986,17 @@ export const personalFinanceTools: Product[] = [ slogan: 'The stock portfolio tracker built for long-term investors', url: 'https://prostocktracker.com' }, + { + hasFreePlan: true, + hasSelfHostingAbility: false, + key: 'rallies', + languages: ['English'], + name: 'Rallies', + pricingPerYear: '$99.99', + slogan: + 'Your entire financial life in one app, monitored continuously by agents', + url: 'https://rallies.ai' + }, { founded: 2015, hasSelfHostingAbility: false, @@ -1130,6 +1172,25 @@ export const personalFinanceTools: Product[] = [ slogan: 'The Trading Journal to Improve Your Trading Performance', url: 'https://www.tradervue.com' }, + { + hasFreePlan: true, + hasSelfHostingAbility: false, + key: 'trefolio', + languages: [ + 'Deutsch', + 'English', + 'Español', + 'Français', + 'Italiano', + 'Nederlands', + 'Polski', + 'Português' + ], + name: 'trefolio', + pricingPerYear: '€60', + slogan: 'The Extra Leaf for Your Portfolio', + url: 'https://trefolio.com' + }, { founded: 2020, hasSelfHostingAbility: false, From 7b0ebf1587941f35bf279840a2006fbc7b4e1f27 Mon Sep 17 00:00:00 2001 From: Ankit Singh Date: Fri, 5 Jun 2026 20:55:41 +0530 Subject: [PATCH 04/74] Feature/auto-refresh user table in admin control panel every 30s (#6954) * Auto-refresh user table * Update changelog --------- Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> --- CHANGELOG.md | 6 +++++ .../admin-users/admin-users.component.ts | 22 ++++++++++++++++--- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 451390256..472d0678b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + +### Added + +- Added an automatic refresh every 30 seconds to the users table in the admin control panel + ## 3.7.0 - 2026-06-02 ### Added diff --git a/apps/client/src/app/components/admin-users/admin-users.component.ts b/apps/client/src/app/components/admin-users/admin-users.component.ts index 93899c9ee..f477776a5 100644 --- a/apps/client/src/app/components/admin-users/admin-users.component.ts +++ b/apps/client/src/app/components/admin-users/admin-users.component.ts @@ -59,8 +59,10 @@ import { personOutline, trashOutline } from 'ionicons/icons'; +import ms from 'ms'; import { DeviceDetectorService } from 'ngx-device-detector'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; +import { interval } from 'rxjs'; import { switchMap, tap } from 'rxjs/operators'; @Component({ @@ -184,6 +186,15 @@ export class GfAdminUsersComponent implements OnInit { public ngOnInit() { this.fetchUsers(); + + interval(ms('30 seconds')) + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe(() => { + this.fetchUsers({ + pageIndex: this.paginator().pageIndex, + showLoading: false + }); + }); } protected formatDistanceToNow(aDateString: string) { @@ -267,8 +278,13 @@ export class GfAdminUsersComponent implements OnInit { ); } - private fetchUsers({ pageIndex }: { pageIndex: number } = { pageIndex: 0 }) { - this.isLoading = true; + private fetchUsers({ + pageIndex = 0, + showLoading = true + }: { pageIndex?: number; showLoading?: boolean } = {}) { + if (showLoading) { + this.isLoading = true; + } if (pageIndex === 0 && this.paginator()) { this.paginator().pageIndex = 0; @@ -281,7 +297,7 @@ export class GfAdminUsersComponent implements OnInit { }) .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe(({ count, users }) => { - this.dataSource = new MatTableDataSource(users); + this.dataSource.data = users; this.totalItems = count; this.isLoading = false; From 9c18b04d4342488966ac0a828b356659a7ec9fe0 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 6 Jun 2026 08:50:32 +0200 Subject: [PATCH 05/74] Bugfix/truncate long titles in asset profile dialog (#6990) * Truncate long titles * Update changelog --- CHANGELOG.md | 4 ++++ .../asset-profile-dialog.component.scss | 4 ++++ .../asset-profile-dialog/asset-profile-dialog.html | 12 ++++++------ 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 472d0678b..2e315dfc9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added an automatic refresh every 30 seconds to the users table in the admin control panel +### Fixed + +- Fixed a layout issue in the asset profile dialog of the admin control by truncating long titles + ## 3.7.0 - 2026-06-02 ### Added diff --git a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.scss b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.scss index 73c0c0d74..db23cf0a7 100644 --- a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.scss +++ b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.scss @@ -14,4 +14,8 @@ top: 0; } } + + .mat-mdc-dialog-title { + padding-right: 0.5rem !important; + } } diff --git a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html index b2a7e0a05..61ca6a6da 100644 --- a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html +++ b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1,10 +1,10 @@
-
-

- {{ assetProfile?.name ?? data.symbol }} -

+

+ {{ + assetProfile?.name ?? data.symbol + }} -

+
Date: Sat, 6 Jun 2026 09:25:28 +0200 Subject: [PATCH 06/74] Task/migrate backend logger to instance pattern (#6966) * Refactor backend logging to use instance-based Logger * Update changelog --- CHANGELOG.md | 4 ++ apps/api/src/app/admin/admin.controller.ts | 4 +- apps/api/src/app/auth/auth.module.ts | 4 +- apps/api/src/app/auth/google.strategy.ts | 4 +- apps/api/src/app/auth/oidc.strategy.ts | 9 +-- apps/api/src/app/auth/web-auth.service.ts | 6 +- .../benchmarks/benchmarks.service.ts | 7 ++- .../ghostfolio/ghostfolio.service.ts | 12 ++-- apps/api/src/app/health/health.controller.ts | 4 +- apps/api/src/app/import/import.controller.ts | 4 +- .../calculator/portfolio-calculator.ts | 7 ++- .../calculator/roai/portfolio-calculator.ts | 6 +- .../src/app/portfolio/portfolio.service.ts | 7 ++- .../app/redis-cache/redis-cache.service.ts | 6 +- .../subscription/subscription.controller.ts | 14 ++--- .../app/subscription/subscription.service.ts | 9 +-- apps/api/src/app/symbol/symbol.service.ts | 4 +- .../events/asset-profile-changed.listener.ts | 12 ++-- .../src/events/portfolio-changed.listener.ts | 7 +-- .../performance-logging.service.ts | 4 +- apps/api/src/main.ts | 18 +++--- .../middlewares/html-template.middleware.ts | 8 +-- .../services/benchmark/benchmark.service.ts | 6 +- .../coingecko/coingecko.service.ts | 8 ++- .../trackinsight/trackinsight.service.ts | 7 ++- .../yahoo-finance/yahoo-finance.service.ts | 6 +- .../data-provider/data-provider.service.ts | 31 ++++++----- .../eod-historical-data.service.ts | 21 ++++--- .../financial-modeling-prep.service.ts | 13 +++-- .../ghostfolio/ghostfolio.service.ts | 12 ++-- .../google-sheets/google-sheets.service.ts | 4 +- .../data-provider/manual/manual.service.ts | 9 +-- .../rapid-api/rapid-api.service.ts | 6 +- .../yahoo-finance/yahoo-finance.service.ts | 23 +++----- .../exchange-rate-data.service.ts | 19 +++---- apps/api/src/services/fetch/fetch.service.ts | 24 +++----- apps/api/src/services/i18n/i18n.service.ts | 8 ++- .../api/src/services/prisma/prisma.service.ts | 4 +- .../data-gathering.processor.ts | 42 ++++++-------- .../data-gathering/data-gathering.service.ts | 15 ++--- .../portfolio-snapshot.processor.ts | 17 +++--- .../statistics-gathering.processor.ts | 55 +++++++------------ .../twitter-bot/twitter-bot.service.ts | 9 +-- 43 files changed, 249 insertions(+), 250 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2e315dfc9..35ca028a3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added an automatic refresh every 30 seconds to the users table in the admin control panel +### Changed + +- Refactored the backend logging to use the instance-based `Logger` + ### Fixed - Fixed a layout issue in the asset profile dialog of the admin control by truncating long titles diff --git a/apps/api/src/app/admin/admin.controller.ts b/apps/api/src/app/admin/admin.controller.ts index 69b619625..97642feb5 100644 --- a/apps/api/src/app/admin/admin.controller.ts +++ b/apps/api/src/app/admin/admin.controller.ts @@ -58,6 +58,8 @@ import { AdminService } from './admin.service'; @Controller('admin') export class AdminController { + private readonly logger = new Logger(AdminController.name); + public constructor( private readonly adminService: AdminService, private readonly apiService: ApiService, @@ -260,7 +262,7 @@ export class AdminController { `Could not parse the market price for ${symbol} (${dataSource})` ); } catch (error) { - Logger.error(error, 'AdminController'); + this.logger.error(error); throw new HttpException(error.message, StatusCodes.BAD_REQUEST); } diff --git a/apps/api/src/app/auth/auth.module.ts b/apps/api/src/app/auth/auth.module.ts index f55093bbf..1d6990307 100644 --- a/apps/api/src/app/auth/auth.module.ts +++ b/apps/api/src/app/auth/auth.module.ts @@ -50,6 +50,8 @@ import { OidcStrategy } from './oidc.strategy'; configurationService: ConfigurationService, fetchService: FetchService ) => { + const logger = new Logger('OidcStrategy'); + const isOidcEnabled = configurationService.get( 'ENABLE_FEATURE_AUTH_OIDC' ); @@ -101,7 +103,7 @@ import { OidcStrategy } from './oidc.strategy'; tokenURL = manualTokenUrl || config.token_endpoint; userInfoURL = manualUserInfoUrl || config.userinfo_endpoint; } catch (error) { - Logger.error(error, 'OidcStrategy'); + logger.error(error); throw new Error('Failed to fetch OIDC configuration from issuer'); } } diff --git a/apps/api/src/app/auth/google.strategy.ts b/apps/api/src/app/auth/google.strategy.ts index 3e4b4ca0d..53720c383 100644 --- a/apps/api/src/app/auth/google.strategy.ts +++ b/apps/api/src/app/auth/google.strategy.ts @@ -10,6 +10,8 @@ import { AuthService } from './auth.service'; @Injectable() export class GoogleStrategy extends PassportStrategy(Strategy, 'google') { + private readonly logger = new Logger(GoogleStrategy.name); + public constructor( private readonly authService: AuthService, configurationService: ConfigurationService @@ -40,7 +42,7 @@ export class GoogleStrategy extends PassportStrategy(Strategy, 'google') { done(null, { jwt }); } catch (error) { - Logger.error(error, 'GoogleStrategy'); + this.logger.error(error); done(error, false); } } diff --git a/apps/api/src/app/auth/oidc.strategy.ts b/apps/api/src/app/auth/oidc.strategy.ts index 96b284121..661f2a821 100644 --- a/apps/api/src/app/auth/oidc.strategy.ts +++ b/apps/api/src/app/auth/oidc.strategy.ts @@ -15,6 +15,8 @@ import { OidcStateStore } from './oidc-state.store'; @Injectable() export class OidcStrategy extends PassportStrategy(Strategy, 'oidc') { + private readonly logger = new Logger(OidcStrategy.name); + private static readonly stateStore = new OidcStateStore(); public constructor( @@ -52,9 +54,8 @@ export class OidcStrategy extends PassportStrategy(Strategy, 'oidc') { }); if (!thirdPartyId) { - Logger.error( - `Missing subject identifier in OIDC response from ${issuer}`, - 'OidcStrategy' + this.logger.error( + `Missing subject identifier in OIDC response from ${issuer}` ); throw new Error('Missing subject identifier in OIDC response'); @@ -62,7 +63,7 @@ export class OidcStrategy extends PassportStrategy(Strategy, 'oidc') { return { jwt }; } catch (error) { - Logger.error(error, 'OidcStrategy'); + this.logger.error(error); throw error; } } diff --git a/apps/api/src/app/auth/web-auth.service.ts b/apps/api/src/app/auth/web-auth.service.ts index 6cffcd244..5764eeece 100644 --- a/apps/api/src/app/auth/web-auth.service.ts +++ b/apps/api/src/app/auth/web-auth.service.ts @@ -33,6 +33,8 @@ import ms from 'ms'; @Injectable() export class WebAuthService { + private readonly logger = new Logger(WebAuthService.name); + public constructor( private readonly configurationService: ConfigurationService, private readonly deviceService: AuthDeviceService, @@ -103,7 +105,7 @@ export class WebAuthService { verification = await verifyRegistrationResponse(opts); } catch (error) { - Logger.error(error, 'WebAuthService'); + this.logger.error(error); throw new InternalServerErrorException(error.message); } @@ -210,7 +212,7 @@ export class WebAuthService { verification = await verifyAuthenticationResponse(opts); } catch (error) { - Logger.error(error, 'WebAuthService'); + this.logger.error(error); throw new InternalServerErrorException({ error: error.message }); } diff --git a/apps/api/src/app/endpoints/benchmarks/benchmarks.service.ts b/apps/api/src/app/endpoints/benchmarks/benchmarks.service.ts index 03ff32c21..0b95880d4 100644 --- a/apps/api/src/app/endpoints/benchmarks/benchmarks.service.ts +++ b/apps/api/src/app/endpoints/benchmarks/benchmarks.service.ts @@ -17,6 +17,8 @@ import { isNumber } from 'lodash'; @Injectable() export class BenchmarksService { + private readonly logger = new Logger(BenchmarksService.name); + public constructor( private readonly benchmarkService: BenchmarkService, private readonly exchangeRateDataService: ExchangeRateDataService, @@ -96,12 +98,11 @@ export class BenchmarksService { })?.marketPrice; if (!marketPriceAtStartDate) { - Logger.error( + this.logger.error( `No historical market data has been found for ${symbol} (${dataSource}) at ${format( startDate, DATE_FORMAT - )}`, - 'BenchmarkService' + )}` ); return { marketData }; diff --git a/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.service.ts b/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.service.ts index 3f91dbecc..b84ca881f 100644 --- a/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.service.ts +++ b/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.service.ts @@ -34,6 +34,8 @@ import { Big } from 'big.js'; @Injectable() export class GhostfolioService { + private readonly logger = new Logger(GhostfolioService.name); + public constructor( private readonly configurationService: ConfigurationService, private readonly dataProviderService: DataProviderService, @@ -99,7 +101,7 @@ export class GhostfolioService { return result; } catch (error) { - Logger.error(error, 'GhostfolioService'); + this.logger.error(error); throw error; } @@ -141,7 +143,7 @@ export class GhostfolioService { return result; } catch (error) { - Logger.error(error, 'GhostfolioService'); + this.logger.error(error); throw error; } @@ -183,7 +185,7 @@ export class GhostfolioService { return result; } catch (error) { - Logger.error(error, 'GhostfolioService'); + this.logger.error(error); throw error; } @@ -271,7 +273,7 @@ export class GhostfolioService { return results; } catch (error) { - Logger.error(error, 'GhostfolioService'); + this.logger.error(error); throw error; } @@ -348,7 +350,7 @@ export class GhostfolioService { return results; } catch (error) { - Logger.error(error, 'GhostfolioService'); + this.logger.error(error); throw error; } diff --git a/apps/api/src/app/health/health.controller.ts b/apps/api/src/app/health/health.controller.ts index 35f3fa348..4f88a03f0 100644 --- a/apps/api/src/app/health/health.controller.ts +++ b/apps/api/src/app/health/health.controller.ts @@ -24,6 +24,8 @@ import { HealthService } from './health.service'; @Controller('health') export class HealthController { + private readonly logger = new Logger(HealthController.name); + public constructor( private readonly aiService: AiService, private readonly healthService: HealthService @@ -61,7 +63,7 @@ export class HealthController { .json({ status: getReasonPhrase(StatusCodes.OK) }); } } catch (error) { - Logger.error(error, 'HealthController'); + this.logger.error(error); } return response diff --git a/apps/api/src/app/import/import.controller.ts b/apps/api/src/app/import/import.controller.ts index 521be56f7..c3e79a29f 100644 --- a/apps/api/src/app/import/import.controller.ts +++ b/apps/api/src/app/import/import.controller.ts @@ -31,6 +31,8 @@ import { ImportService } from './import.service'; @Controller('import') export class ImportController { + private readonly logger = new Logger(ImportController.name); + public constructor( private readonly configurationService: ConfigurationService, private readonly importService: ImportService, @@ -81,7 +83,7 @@ export class ImportController { return { activities }; } catch (error) { - Logger.error(error, ImportController); + this.logger.error(error); throw new HttpException( { diff --git a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts index d57b85d8c..ab3f76703 100644 --- a/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts +++ b/apps/api/src/app/portfolio/calculator/portfolio-calculator.ts @@ -62,6 +62,8 @@ import { isNumber, sortBy, sum, uniqBy } from 'lodash'; export abstract class PortfolioCalculator { protected static readonly ENABLE_LOGGING = false; + protected readonly logger = new Logger(PortfolioCalculator.name); + protected accountBalanceItems: HistoricalDataItem[]; protected activities: PortfolioOrder[]; @@ -1119,12 +1121,11 @@ export abstract class PortfolioCalculator { if (cachedPortfolioSnapshot) { this.snapshot = cachedPortfolioSnapshot; - Logger.debug( + this.logger.debug( `Fetched portfolio snapshot from cache in ${( (performance.now() - startTimeTotal) / 1000 - ).toFixed(3)} seconds`, - 'PortfolioCalculator' + ).toFixed(3)} seconds` ); if (isCachedPortfolioSnapshotExpired) { diff --git a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator.ts b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator.ts index 2841e9975..d5efc4bf2 100644 --- a/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator.ts +++ b/apps/api/src/app/portfolio/calculator/roai/portfolio-calculator.ts @@ -11,7 +11,6 @@ import { PortfolioSnapshot, TimelinePosition } from '@ghostfolio/common/models'; import { DateRange } from '@ghostfolio/common/types'; import { PerformanceCalculationType } from '@ghostfolio/common/types/performance-calculation-type.type'; -import { Logger } from '@nestjs/common'; import { Big } from 'big.js'; import { addMilliseconds, @@ -96,9 +95,8 @@ export class RoaiPortfolioCalculator extends PortfolioCalculator { currentPosition.timeWeightedInvestmentWithCurrencyEffect ); } else if (!currentPosition.quantity.eq(0)) { - Logger.warn( - `Missing historical market data for ${currentPosition.symbol} (${currentPosition.dataSource})`, - 'PortfolioCalculator' + this.logger.warn( + `Missing historical market data for ${currentPosition.symbol} (${currentPosition.dataSource})` ); hasErrors = true; diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts index 37d76bcfa..4feb0f77a 100644 --- a/apps/api/src/app/portfolio/portfolio.service.ts +++ b/apps/api/src/app/portfolio/portfolio.service.ts @@ -108,6 +108,8 @@ const europeMarkets = require('../../assets/countries/europe-markets.json'); @Injectable() export class PortfolioService { + private readonly logger = new Logger(PortfolioService.name); + public constructor( private readonly accountBalanceService: AccountBalanceService, private readonly accountService: AccountService, @@ -619,9 +621,8 @@ export class PortfolioService { symbolProfileMap[getAssetProfileIdentifier({ dataSource, symbol })]; if (!assetProfile) { - Logger.warn( - `Asset profile not found for ${symbol} (${dataSource})`, - 'PortfolioService' + this.logger.warn( + `Asset profile not found for ${symbol} (${dataSource})` ); continue; diff --git a/apps/api/src/app/redis-cache/redis-cache.service.ts b/apps/api/src/app/redis-cache/redis-cache.service.ts index 619d23fc5..b87740f8c 100644 --- a/apps/api/src/app/redis-cache/redis-cache.service.ts +++ b/apps/api/src/app/redis-cache/redis-cache.service.ts @@ -10,6 +10,8 @@ import { createHash, randomUUID } from 'node:crypto'; @Injectable() export class RedisCacheService { + private readonly logger = new Logger(RedisCacheService.name); + private client: Keyv; public constructor( @@ -27,7 +29,7 @@ export class RedisCacheService { }; this.client.on('error', (error) => { - Logger.error(error, 'RedisCacheService'); + this.logger.error(error); }); } @@ -101,7 +103,7 @@ export class RedisCacheService { return true; } catch (error) { - Logger.error(error?.message, 'RedisCacheService'); + this.logger.error(error?.message); return false; } finally { diff --git a/apps/api/src/app/subscription/subscription.controller.ts b/apps/api/src/app/subscription/subscription.controller.ts index 3e6316ec6..074a9db0e 100644 --- a/apps/api/src/app/subscription/subscription.controller.ts +++ b/apps/api/src/app/subscription/subscription.controller.ts @@ -33,6 +33,8 @@ import { SubscriptionService } from './subscription.service'; @Controller('subscription') export class SubscriptionController { + private readonly logger = new Logger(SubscriptionController.name); + public constructor( private readonly configurationService: ConfigurationService, private readonly propertyService: PropertyService, @@ -80,9 +82,8 @@ export class SubscriptionController { value: JSON.stringify(coupons) }); - Logger.log( - `Subscription for user '${this.request.user.id}' has been created with a coupon for ${coupon.duration}`, - 'SubscriptionController' + this.logger.log( + `Subscription for user '${this.request.user.id}' has been created with a coupon for ${coupon.duration}` ); return { @@ -101,9 +102,8 @@ export class SubscriptionController { ); if (userId) { - Logger.log( - `Subscription for user '${userId}' has been created via Stripe`, - 'SubscriptionController' + this.logger.log( + `Subscription for user '${userId}' has been created via Stripe` ); } @@ -126,7 +126,7 @@ export class SubscriptionController { user: this.request.user }); } catch (error) { - Logger.error(error, 'SubscriptionController'); + this.logger.error(error); throw new HttpException( getReasonPhrase(StatusCodes.BAD_REQUEST), diff --git a/apps/api/src/app/subscription/subscription.service.ts b/apps/api/src/app/subscription/subscription.service.ts index 557d81976..a811d2243 100644 --- a/apps/api/src/app/subscription/subscription.service.ts +++ b/apps/api/src/app/subscription/subscription.service.ts @@ -24,6 +24,8 @@ import Stripe from 'stripe'; @Injectable() export class SubscriptionService { + private readonly logger = new Logger(SubscriptionService.name); + private stripe: Stripe; public constructor( @@ -166,9 +168,8 @@ export class SubscriptionService { error instanceof Prisma.PrismaClientKnownRequestError && error.code === 'P2002' ) { - Logger.log( - `Stripe Checkout Session '${session.id}' has already been redeemed`, - 'SubscriptionService' + this.logger.log( + `Stripe Checkout Session '${session.id}' has already been redeemed` ); } else { throw error; @@ -177,7 +178,7 @@ export class SubscriptionService { return session.client_reference_id; } catch (error) { - Logger.error(error, 'SubscriptionService'); + this.logger.error(error); } } diff --git a/apps/api/src/app/symbol/symbol.service.ts b/apps/api/src/app/symbol/symbol.service.ts index 15498e80d..fdbc7f84c 100644 --- a/apps/api/src/app/symbol/symbol.service.ts +++ b/apps/api/src/app/symbol/symbol.service.ts @@ -15,6 +15,8 @@ import { format, subDays } from 'date-fns'; @Injectable() export class SymbolService { + private readonly logger = new Logger(SymbolService.name); + public constructor( private readonly dataProviderService: DataProviderService, private readonly marketDataService: MarketDataService @@ -119,7 +121,7 @@ export class SymbolService { results.items = items; return results; } catch (error) { - Logger.error(error, 'SymbolService'); + this.logger.error(error); throw error; } diff --git a/apps/api/src/events/asset-profile-changed.listener.ts b/apps/api/src/events/asset-profile-changed.listener.ts index cc70edad6..e2aea382e 100644 --- a/apps/api/src/events/asset-profile-changed.listener.ts +++ b/apps/api/src/events/asset-profile-changed.listener.ts @@ -15,6 +15,8 @@ import { AssetProfileChangedEvent } from './asset-profile-changed.event'; @Injectable() export class AssetProfileChangedListener { + private readonly logger = new Logger(AssetProfileChangedListener.name); + private static readonly DEBOUNCE_DELAY = ms('5 seconds'); private debounceTimers = new Map(); @@ -67,10 +69,7 @@ export class AssetProfileChangedListener { dataSource: DataSource; symbol: string; }) { - Logger.log( - `Asset profile of ${symbol} (${dataSource}) has changed`, - 'AssetProfileChangedListener' - ); + this.logger.log(`Asset profile of ${symbol} (${dataSource}) has changed`); if ( this.configurationService.get( @@ -84,10 +83,7 @@ export class AssetProfileChangedListener { const existingCurrencies = this.exchangeRateDataService.getCurrencies(); if (!existingCurrencies.includes(currency)) { - Logger.log( - `New currency ${currency} has been detected`, - 'AssetProfileChangedListener' - ); + this.logger.log(`New currency ${currency} has been detected`); await this.exchangeRateDataService.initialize(); } diff --git a/apps/api/src/events/portfolio-changed.listener.ts b/apps/api/src/events/portfolio-changed.listener.ts index f8e2a9229..12441517b 100644 --- a/apps/api/src/events/portfolio-changed.listener.ts +++ b/apps/api/src/events/portfolio-changed.listener.ts @@ -8,6 +8,8 @@ import { PortfolioChangedEvent } from './portfolio-changed.event'; @Injectable() export class PortfolioChangedListener { + private readonly logger = new Logger(PortfolioChangedListener.name); + private static readonly DEBOUNCE_DELAY = ms('5 seconds'); private debounceTimers = new Map(); @@ -35,10 +37,7 @@ export class PortfolioChangedListener { } private async processPortfolioChanged({ userId }: { userId: string }) { - Logger.log( - `Portfolio of user '${userId}' has changed`, - 'PortfolioChangedListener' - ); + this.logger.log(`Portfolio of user '${userId}' has changed`); await this.redisCacheService.removePortfolioSnapshotsByUserId({ userId }); } diff --git a/apps/api/src/interceptors/performance-logging/performance-logging.service.ts b/apps/api/src/interceptors/performance-logging/performance-logging.service.ts index 1b1faf8e0..a07783cd9 100644 --- a/apps/api/src/interceptors/performance-logging/performance-logging.service.ts +++ b/apps/api/src/interceptors/performance-logging/performance-logging.service.ts @@ -2,6 +2,8 @@ import { Injectable, Logger } from '@nestjs/common'; @Injectable() export class PerformanceLoggingService { + private readonly logger = new Logger(PerformanceLoggingService.name); + public logPerformance({ className, methodName, @@ -13,7 +15,7 @@ export class PerformanceLoggingService { }) { const endTime = performance.now(); - Logger.debug( + this.logger.debug( `Completed execution of ${methodName}() in ${((endTime - startTime) / 1000).toFixed(3)} seconds`, className ); diff --git a/apps/api/src/main.ts b/apps/api/src/main.ts index 94e389f6a..63185a48b 100644 --- a/apps/api/src/main.ts +++ b/apps/api/src/main.ts @@ -23,6 +23,8 @@ import { EnvHttpProxyAgent, setGlobalDispatcher } from 'undici'; import { AppModule } from './app/app.module'; import { environment } from './environments/environment'; +const logger = new Logger('Bootstrap'); + async function bootstrap() { // Respect HTTP_PROXY / HTTPS_PROXY / NO_PROXY for outbound HTTP requests setGlobalDispatcher(new EnvHttpProxyAgent()); @@ -114,20 +116,20 @@ async function bootstrap() { address = `${host}:${addressObject.port}`; } - Logger.log(`Listening at http://${address}`); - Logger.log(''); + logger.log(`Listening at http://${address}`); + logger.log(''); }); } function logLogo() { - Logger.log(' ________ __ ____ ___'); - Logger.log(' / ____/ /_ ____ _____/ /_/ __/___ / (_)___'); - Logger.log(' / / __/ __ \\/ __ \\/ ___/ __/ /_/ __ \\/ / / __ \\'); - Logger.log('/ /_/ / / / / /_/ (__ ) /_/ __/ /_/ / / / /_/ /'); - Logger.log( + logger.log(' ________ __ ____ ___'); + logger.log(' / ____/ /_ ____ _____/ /_/ __/___ / (_)___'); + logger.log(' / / __/ __ \\/ __ \\/ ___/ __/ /_/ __ \\/ / / __ \\'); + logger.log('/ /_/ / / / / /_/ (__ ) /_/ __/ /_/ / / / /_/ /'); + logger.log( `\\____/_/ /_/\\____/____/\\__/_/ \\____/_/_/\\____/ ${environment.version}` ); - Logger.log(''); + logger.log(''); } bootstrap(); diff --git a/apps/api/src/middlewares/html-template.middleware.ts b/apps/api/src/middlewares/html-template.middleware.ts index 2b8820e81..c256ada56 100644 --- a/apps/api/src/middlewares/html-template.middleware.ts +++ b/apps/api/src/middlewares/html-template.middleware.ts @@ -92,6 +92,8 @@ const locales = { @Injectable() export class HtmlTemplateMiddleware implements NestMiddleware { + private readonly logger = new Logger(HtmlTemplateMiddleware.name); + private indexHtmlMap: { [languageCode: string]: string } = {}; public constructor(private readonly i18nService: I18nService) { @@ -107,11 +109,7 @@ export class HtmlTemplateMiddleware implements NestMiddleware { {} ); } catch (error) { - Logger.error( - 'Failed to initialize index HTML map', - error, - 'HTMLTemplateMiddleware' - ); + this.logger.error('Failed to initialize index HTML map', error); } } diff --git a/apps/api/src/services/benchmark/benchmark.service.ts b/apps/api/src/services/benchmark/benchmark.service.ts index 4b1d9a65f..022a0e928 100644 --- a/apps/api/src/services/benchmark/benchmark.service.ts +++ b/apps/api/src/services/benchmark/benchmark.service.ts @@ -28,6 +28,8 @@ import { BenchmarkValue } from './interfaces/benchmark-value.interface'; @Injectable() export class BenchmarkService { + private readonly logger = new Logger(BenchmarkService.name); + private readonly CACHE_KEY_BENCHMARKS = 'BENCHMARKS'; public constructor( @@ -87,7 +89,7 @@ export class BenchmarkService { const { benchmarks, expiration }: BenchmarkValue = JSON.parse(cachedBenchmarkValue); - Logger.debug('Fetched benchmarks from cache', 'BenchmarkService'); + this.logger.debug('Fetched benchmarks from cache'); if (isAfter(new Date(), new Date(expiration))) { this.calculateAndCacheBenchmarks({ @@ -227,7 +229,7 @@ export class BenchmarkService { private async calculateAndCacheBenchmarks({ enableSharing = false }): Promise { - Logger.debug('Calculate benchmarks', 'BenchmarkService'); + this.logger.debug('Calculate benchmarks'); const benchmarkAssetProfiles = await this.getBenchmarkAssetProfiles({ enableSharing diff --git a/apps/api/src/services/data-provider/coingecko/coingecko.service.ts b/apps/api/src/services/data-provider/coingecko/coingecko.service.ts index b01ba177b..5d6ed79aa 100644 --- a/apps/api/src/services/data-provider/coingecko/coingecko.service.ts +++ b/apps/api/src/services/data-provider/coingecko/coingecko.service.ts @@ -29,6 +29,8 @@ import { format, fromUnixTime, getUnixTime } from 'date-fns'; @Injectable() export class CoinGeckoService implements DataProviderInterface, OnModuleInit { + private readonly logger = new Logger(CoinGeckoService.name); + private apiUrl: string; private headers: HeadersInit = {}; @@ -88,7 +90,7 @@ export class CoinGeckoService implements DataProviderInterface, OnModuleInit { ).toFixed(3)} seconds`; } - Logger.error(message, 'CoinGeckoService'); + this.logger.error(message); } return response; @@ -214,7 +216,7 @@ export class CoinGeckoService implements DataProviderInterface, OnModuleInit { ).toFixed(3)} seconds`; } - Logger.error(message, 'CoinGeckoService'); + this.logger.error(message); } return response; @@ -262,7 +264,7 @@ export class CoinGeckoService implements DataProviderInterface, OnModuleInit { ).toFixed(3)} seconds`; } - Logger.error(message, 'CoinGeckoService'); + this.logger.error(message); } return { items }; diff --git a/apps/api/src/services/data-provider/data-enhancer/trackinsight/trackinsight.service.ts b/apps/api/src/services/data-provider/data-enhancer/trackinsight/trackinsight.service.ts index eeccf725e..a74aaeb46 100644 --- a/apps/api/src/services/data-provider/data-enhancer/trackinsight/trackinsight.service.ts +++ b/apps/api/src/services/data-provider/data-enhancer/trackinsight/trackinsight.service.ts @@ -11,6 +11,8 @@ import { countries } from 'countries-list'; @Injectable() export class TrackinsightDataEnhancerService implements DataEnhancerInterface { + private readonly logger = new Logger(TrackinsightDataEnhancerService.name); + private static baseUrl = 'https://www.trackinsight.com/data-api'; private static countriesMapping = { 'Russian Federation': 'Russia', @@ -209,9 +211,8 @@ export class TrackinsightDataEnhancerService implements DataEnhancerInterface { return undefined; }) .catch(({ message }) => { - Logger.error( - `Failed to search Trackinsight symbol for ${symbol} (${message})`, - 'TrackinsightDataEnhancerService' + this.logger.error( + `Failed to search Trackinsight symbol for ${symbol} (${message})` ); return undefined; diff --git a/apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts b/apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts index 30ad81c09..034916a5f 100644 --- a/apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts +++ b/apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts @@ -23,6 +23,8 @@ import type { Price } from 'yahoo-finance2/esm/src/modules/quoteSummary-iface'; @Injectable() export class YahooFinanceDataEnhancerService implements DataEnhancerInterface { + private readonly logger = new Logger(YahooFinanceDataEnhancerService.name); + private readonly yahooFinance = new YahooFinance({ suppressNotices: ['yahooSurvey'] }); @@ -123,7 +125,7 @@ export class YahooFinanceDataEnhancerService implements DataEnhancerInterface { response.url = url; } } catch (error) { - Logger.error(error, 'YahooFinanceDataEnhancerService'); + this.logger.error(error); } return response; @@ -266,7 +268,7 @@ export class YahooFinanceDataEnhancerService implements DataEnhancerInterface { `No data found, ${aSymbol} (${this.getName()}) may be delisted` ); } else { - Logger.error(error, 'YahooFinanceService'); + this.logger.error(error); } } diff --git a/apps/api/src/services/data-provider/data-provider.service.ts b/apps/api/src/services/data-provider/data-provider.service.ts index 5f0a6928a..1ea2d6436 100644 --- a/apps/api/src/services/data-provider/data-provider.service.ts +++ b/apps/api/src/services/data-provider/data-provider.service.ts @@ -41,6 +41,8 @@ import { AssetProfileInvalidError } from './errors/asset-profile-invalid.error'; @Injectable() export class DataProviderService implements OnModuleInit { + private readonly logger = new Logger(DataProviderService.name); + private dataProviderMapping: { [dataProviderName: string]: string }; public constructor( @@ -129,7 +131,7 @@ export class DataProviderService implements OnModuleInit { ); } } catch (error) { - Logger.error(error, 'DataProviderService'); + this.logger.error(error); throw error; } @@ -391,7 +393,7 @@ export class DataProviderService implements OnModuleInit { return r; }, {}); } catch (error) { - Logger.error(error, 'DataProviderService'); + this.logger.error(error); } finally { return response; } @@ -503,7 +505,7 @@ export class DataProviderService implements OnModuleInit { result[symbol] = data; } } catch (error) { - Logger.error(error, 'DataProviderService'); + this.logger.error(error); throw error; } @@ -567,13 +569,12 @@ export class DataProviderService implements OnModuleInit { const numberOfItemsInCache = Object.keys(response)?.length; if (numberOfItemsInCache) { - Logger.debug( + this.logger.debug( `Fetched ${numberOfItemsInCache} quote${ numberOfItemsInCache > 1 ? 's' : '' } from cache in ${((performance.now() - startTimeTotal) / 1000).toFixed( 3 - )} seconds`, - 'DataProviderService' + )} seconds` ); } @@ -684,14 +685,13 @@ export class DataProviderService implements OnModuleInit { } } - Logger.debug( + this.logger.debug( `Fetched ${symbolsChunk.length} quote${ symbolsChunk.length > 1 ? 's' : '' } from ${dataSource} in ${( (performance.now() - startTimeDataSource) / 1000 - ).toFixed(3)} seconds`, - 'DataProviderService' + ).toFixed(3)} seconds` ); try { @@ -722,15 +722,18 @@ export class DataProviderService implements OnModuleInit { await Promise.all(promises); - Logger.debug('--------------------------------------------------------'); - Logger.debug( + this.logger.debug( + '--------------------------------------------------------' + ); + this.logger.debug( `Fetched ${items.length} quote${items.length > 1 ? 's' : ''} in ${( (performance.now() - startTimeTotal) / 1000 - ).toFixed(3)} seconds`, - 'DataProviderService' + ).toFixed(3)} seconds` + ); + this.logger.debug( + '========================================================' ); - Logger.debug('========================================================'); return response; } diff --git a/apps/api/src/services/data-provider/eod-historical-data/eod-historical-data.service.ts b/apps/api/src/services/data-provider/eod-historical-data/eod-historical-data.service.ts index 3fa38842b..06173c25b 100644 --- a/apps/api/src/services/data-provider/eod-historical-data/eod-historical-data.service.ts +++ b/apps/api/src/services/data-provider/eod-historical-data/eod-historical-data.service.ts @@ -37,6 +37,8 @@ import { isNumber } from 'lodash'; export class EodHistoricalDataService implements DataProviderInterface, OnModuleInit { + private readonly logger = new Logger(EodHistoricalDataService.name); + private apiKey: string; private readonly URL = 'https://eodhistoricaldata.com/api'; @@ -127,12 +129,11 @@ export class EodHistoricalDataService return response; } catch (error) { - Logger.error( + this.logger.error( `Could not get dividends for ${symbol} (${this.getName()}) from ${format( from, DATE_FORMAT - )} to ${format(to, DATE_FORMAT)}: [${error.name}] ${error.message}`, - 'EodHistoricalDataService' + )} to ${format(to, DATE_FORMAT)}: [${error.name}] ${error.message}` ); return {}; @@ -172,9 +173,8 @@ export class EodHistoricalDataService marketPrice: adjusted_close }; } else { - Logger.error( - `Could not get historical market data for ${symbol} (${this.getName()}) at ${date}`, - 'EodHistoricalDataService' + this.logger.error( + `Could not get historical market data for ${symbol} (${this.getName()}) at ${date}` ); } @@ -292,9 +292,8 @@ export class EodHistoricalDataService dataSource: this.getName() }; } else { - Logger.error( - `Could not get quote for ${this.convertFromEodSymbol(code)} (${this.getName()})`, - 'EodHistoricalDataService' + this.logger.error( + `Could not get quote for ${this.convertFromEodSymbol(code)} (${this.getName()})` ); } } @@ -311,7 +310,7 @@ export class EodHistoricalDataService ).toFixed(3)} seconds`; } - Logger.error(message, 'EodHistoricalDataService'); + this.logger.error(message); } return {}; @@ -465,7 +464,7 @@ export class EodHistoricalDataService ).toFixed(3)} seconds`; } - Logger.error(message, 'EodHistoricalDataService'); + this.logger.error(message); } return searchResult; diff --git a/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts b/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts index fa36a0d17..80eeadeb0 100644 --- a/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts +++ b/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts @@ -49,6 +49,8 @@ import { uniqBy } from 'lodash'; export class FinancialModelingPrepService implements DataProviderInterface, OnModuleInit { + private readonly logger = new Logger(FinancialModelingPrepService.name); + private static countriesMapping = { 'Korea (the Republic of)': 'South Korea', 'Russian Federation': 'Russia', @@ -265,7 +267,7 @@ export class FinancialModelingPrepService ).toFixed(3)} seconds`; } - Logger.error(message, 'FinancialModelingPrepService'); + this.logger.error(message); } return response; @@ -325,12 +327,11 @@ export class FinancialModelingPrepService return response; } catch (error) { - Logger.error( + this.logger.error( `Could not get dividends for ${symbol} (${this.getName()}) from ${format( from, DATE_FORMAT - )} to ${format(to, DATE_FORMAT)}: [${error.name}] ${error.message}`, - 'FinancialModelingPrepService' + )} to ${format(to, DATE_FORMAT)}: [${error.name}] ${error.message}` ); return {}; @@ -518,7 +519,7 @@ export class FinancialModelingPrepService ).toFixed(3)} seconds`; } - Logger.error(message, 'FinancialModelingPrepService'); + this.logger.error(message); } return response; @@ -638,7 +639,7 @@ export class FinancialModelingPrepService ).toFixed(3)} seconds`; } - Logger.error(message, 'FinancialModelingPrepService'); + this.logger.error(message); } return { items }; diff --git a/apps/api/src/services/data-provider/ghostfolio/ghostfolio.service.ts b/apps/api/src/services/data-provider/ghostfolio/ghostfolio.service.ts index 2f2601d5d..2b91855a6 100644 --- a/apps/api/src/services/data-provider/ghostfolio/ghostfolio.service.ts +++ b/apps/api/src/services/data-provider/ghostfolio/ghostfolio.service.ts @@ -33,6 +33,8 @@ import { StatusCodes } from 'http-status-codes'; @Injectable() export class GhostfolioService implements DataProviderInterface { + private readonly logger = new Logger(GhostfolioService.name); + private readonly URL = environment.production ? 'https://ghostfol.io/api' : `${this.configurationService.get('ROOT_URL')}/api`; @@ -89,7 +91,7 @@ export class GhostfolioService implements DataProviderInterface { 'RequestError: The API key is invalid. Please update it in the Settings section of the Admin Control panel.'; } - Logger.error(message, 'GhostfolioService'); + this.logger.error(message); } return assetProfile; @@ -154,7 +156,7 @@ export class GhostfolioService implements DataProviderInterface { 'RequestError: The API key is invalid. Please update it in the Settings section of the Admin Control panel.'; } - Logger.error(message, 'GhostfolioService'); + this.logger.error(message); } return dividends; @@ -211,7 +213,7 @@ export class GhostfolioService implements DataProviderInterface { 'RequestError: The API key is invalid. Please update it in the Settings section of the Admin Control panel.'; } - Logger.error(error.message, 'GhostfolioService'); + this.logger.error(error.message); throw new Error( `Could not get historical market data for ${symbol} (${this.getName()}) from ${format( @@ -283,7 +285,7 @@ export class GhostfolioService implements DataProviderInterface { 'RequestError: The API key is invalid. Please update it in the Settings section of the Admin Control panel.'; } - Logger.error(message, 'GhostfolioService'); + this.logger.error(message); } return quotes; @@ -338,7 +340,7 @@ export class GhostfolioService implements DataProviderInterface { 'RequestError: The API key is invalid. Please update it in the Settings section of the Admin Control panel.'; } - Logger.error(message, 'GhostfolioService'); + this.logger.error(message); } return searchResult; diff --git a/apps/api/src/services/data-provider/google-sheets/google-sheets.service.ts b/apps/api/src/services/data-provider/google-sheets/google-sheets.service.ts index ba1e5bbe5..13f671bd4 100644 --- a/apps/api/src/services/data-provider/google-sheets/google-sheets.service.ts +++ b/apps/api/src/services/data-provider/google-sheets/google-sheets.service.ts @@ -24,6 +24,8 @@ import { GoogleSpreadsheet } from 'google-spreadsheet'; @Injectable() export class GoogleSheetsService implements DataProviderInterface { + private readonly logger = new Logger(GoogleSheetsService.name); + public constructor( private readonly configurationService: ConfigurationService, private readonly prismaService: PrismaService, @@ -144,7 +146,7 @@ export class GoogleSheetsService implements DataProviderInterface { return response; } catch (error) { - Logger.error(error, 'GoogleSheetsService'); + this.logger.error(error); } return {}; diff --git a/apps/api/src/services/data-provider/manual/manual.service.ts b/apps/api/src/services/data-provider/manual/manual.service.ts index 11e0aae6a..87e116dda 100644 --- a/apps/api/src/services/data-provider/manual/manual.service.ts +++ b/apps/api/src/services/data-provider/manual/manual.service.ts @@ -31,6 +31,8 @@ import { addDays, format, isBefore } from 'date-fns'; @Injectable() export class ManualService implements DataProviderInterface { + private readonly logger = new Logger(ManualService.name); + public constructor( private readonly configurationService: ConfigurationService, private readonly fetchService: FetchService, @@ -181,9 +183,8 @@ export class ManualService implements DataProviderInterface { }); return { marketPrice, symbol }; } catch (error) { - Logger.error( - `Could not get quote for ${symbol} (${this.getName()}): [${error.name}] ${error.message}`, - 'ManualService' + this.logger.error( + `Could not get quote for ${symbol} (${this.getName()}): [${error.name}] ${error.message}` ); return { symbol, marketPrice: undefined }; } @@ -216,7 +217,7 @@ export class ManualService implements DataProviderInterface { return response; } catch (error) { - Logger.error(error, 'ManualService'); + this.logger.error(error); } return {}; diff --git a/apps/api/src/services/data-provider/rapid-api/rapid-api.service.ts b/apps/api/src/services/data-provider/rapid-api/rapid-api.service.ts index 22896cccc..9941ae9eb 100644 --- a/apps/api/src/services/data-provider/rapid-api/rapid-api.service.ts +++ b/apps/api/src/services/data-provider/rapid-api/rapid-api.service.ts @@ -26,6 +26,8 @@ import { format } from 'date-fns'; @Injectable() export class RapidApiService implements DataProviderInterface { + private readonly logger = new Logger(RapidApiService.name); + public constructor( private readonly configurationService: ConfigurationService, private readonly fetchService: FetchService @@ -122,7 +124,7 @@ export class RapidApiService implements DataProviderInterface { }; } } catch (error) { - Logger.error(error, 'RapidApiService'); + this.logger.error(error); } return {}; @@ -167,7 +169,7 @@ export class RapidApiService implements DataProviderInterface { ).toFixed(3)} seconds`; } - Logger.error(message, 'RapidApiService'); + this.logger.error(message); return undefined; } diff --git a/apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts b/apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts index de8807098..93949ebc0 100644 --- a/apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts +++ b/apps/api/src/services/data-provider/yahoo-finance/yahoo-finance.service.ts @@ -41,6 +41,8 @@ import { SearchQuoteNonYahoo } from 'yahoo-finance2/esm/src/modules/search'; @Injectable() export class YahooFinanceService implements DataProviderInterface { + private readonly logger = new Logger(YahooFinanceService.name); + private readonly yahooFinance = new YahooFinance({ suppressNotices: ['yahooSurvey'] }); @@ -105,12 +107,11 @@ export class YahooFinanceService implements DataProviderInterface { return response; } catch (error) { - Logger.error( + this.logger.error( `Could not get dividends for ${symbol} (${this.getName()}) from ${format( from, DATE_FORMAT - )} to ${format(to, DATE_FORMAT)}: [${error.name}] ${error.message}`, - 'YahooFinanceService' + )} to ${format(to, DATE_FORMAT)}: [${error.name}] ${error.message}` ); return {}; @@ -198,12 +199,9 @@ export class YahooFinanceService implements DataProviderInterface { try { quotes = await this.yahooFinance.quote(yahooFinanceSymbols); } catch (error) { - Logger.error(error, 'YahooFinanceService'); + this.logger.error(error); - Logger.warn( - 'Fallback to yahooFinance.quoteSummary()', - 'YahooFinanceService' - ); + this.logger.warn('Fallback to yahooFinance.quoteSummary()'); quotes = await this.getQuotesWithQuoteSummary(yahooFinanceSymbols); } @@ -229,7 +227,7 @@ export class YahooFinanceService implements DataProviderInterface { return response; } catch (error) { - Logger.error(error, 'YahooFinanceService'); + this.logger.error(error); return {}; } @@ -334,7 +332,7 @@ export class YahooFinanceService implements DataProviderInterface { }); } } catch (error) { - Logger.error(error, 'YahooFinanceService'); + this.logger.error(error); } return { items }; @@ -365,10 +363,7 @@ export class YahooFinanceService implements DataProviderInterface { .filter( (result): result is PromiseFulfilledResult => { if (result.status === 'rejected') { - Logger.error( - `Could not get quote summary: ${result.reason}`, - 'YahooFinanceService' - ); + this.logger.error(`Could not get quote summary: ${result.reason}`); return false; } diff --git a/apps/api/src/services/exchange-rate-data/exchange-rate-data.service.ts b/apps/api/src/services/exchange-rate-data/exchange-rate-data.service.ts index 024bdf4e1..708bfa591 100644 --- a/apps/api/src/services/exchange-rate-data/exchange-rate-data.service.ts +++ b/apps/api/src/services/exchange-rate-data/exchange-rate-data.service.ts @@ -30,6 +30,8 @@ import { ExchangeRatesByCurrency } from './interfaces/exchange-rate-data.interfa @Injectable() export class ExchangeRateDataService { + private readonly logger = new Logger(ExchangeRateDataService.name); + private currencies: string[] = []; private currencyPairs: DataGatheringItem[] = []; private derivedCurrencyFactors: { [currencyPair: string]: number } = {}; @@ -110,9 +112,8 @@ export class ExchangeRateDataService { previousExchangeRate; if (currency === DEFAULT_CURRENCY && isBefore(date, new Date())) { - Logger.error( - `No exchange rate has been found for ${currency}${targetCurrency} at ${dateString}`, - 'ExchangeRateDataService' + this.logger.error( + `No exchange rate has been found for ${currency}${targetCurrency} at ${dateString}` ); } } else { @@ -253,9 +254,8 @@ export class ExchangeRateDataService { } // Fallback with error, if currencies are not available - Logger.error( - `No exchange rate has been found for ${aFromCurrency}${aToCurrency}`, - 'ExchangeRateDataService' + this.logger.error( + `No exchange rate has been found for ${aFromCurrency}${aToCurrency}` ); return aValue; @@ -341,12 +341,11 @@ export class ExchangeRateDataService { return factor * aValue; } - Logger.error( + this.logger.error( `No exchange rate has been found for ${aFromCurrency}${aToCurrency} at ${format( aDate, DATE_FORMAT - )}`, - 'ExchangeRateDataService' + )}` ); return undefined; @@ -483,7 +482,7 @@ export class ExchangeRateDataService { errorMessage = `${errorMessage} and ${DEFAULT_CURRENCY}${currencyTo}`; } - Logger.error(`${errorMessage}.`, 'ExchangeRateDataService'); + this.logger.error(`${errorMessage}.`); } } } diff --git a/apps/api/src/services/fetch/fetch.service.ts b/apps/api/src/services/fetch/fetch.service.ts index f32e56a1c..31034f81c 100644 --- a/apps/api/src/services/fetch/fetch.service.ts +++ b/apps/api/src/services/fetch/fetch.service.ts @@ -15,6 +15,8 @@ import { WebFetchRoute } from './interfaces/web-fetch-route.interface'; @Injectable() export class FetchService implements OnModuleInit { + private readonly logger = new Logger(FetchService.name); + private static readonly REDACTED_QUERY_PARAM_NAMES = ['apikey', 'api_token']; private static readonly WEB_FETCH_TIMEOUT = ms('30 seconds'); @@ -39,7 +41,7 @@ export class FetchService implements OnModuleInit { const url = input instanceof Request ? input.url : input.toString(); const urlRedacted = this.redactUrl(url); - Logger.debug(`${method} ${urlRedacted}`, 'FetchService'); + this.logger.debug(`${method} ${urlRedacted}`); if (method === 'GET') { const webFetchRoute = this.getMatchingWebFetchRoute(url); @@ -60,15 +62,11 @@ export class FetchService implements OnModuleInit { return await globalThis.fetch(input, init); } catch (error) { if (error instanceof Error) { - Logger.error( - `${method} ${urlRedacted} failed: [${error.name}] ${error.message}`, - 'FetchService' + this.logger.error( + `${method} ${urlRedacted} failed: [${error.name}] ${error.message}` ); } else { - Logger.error( - `${method} ${urlRedacted} failed: ${String(error)}`, - 'FetchService' - ); + this.logger.error(`${method} ${urlRedacted} failed: ${String(error)}`); } throw error; @@ -145,10 +143,7 @@ export class FetchService implements OnModuleInit { } } - Logger.debug( - `Routed ${this.redactUrl(url)} via web fetch tool`, - 'FetchService' - ); + this.logger.debug(`Routed ${this.redactUrl(url)} via web fetch tool`); return new Response(body, { headers: webFetchRoute.responseContentType @@ -159,11 +154,10 @@ export class FetchService implements OnModuleInit { return undefined; } catch (error) { - Logger.error( + this.logger.error( `Web fetch tool failed for ${this.redactUrl(url)}: ${ error instanceof Error ? error.message : String(error) - }`, - 'FetchService' + }` ); return undefined; diff --git a/apps/api/src/services/i18n/i18n.service.ts b/apps/api/src/services/i18n/i18n.service.ts index 1cdb811a9..65c51b2f0 100644 --- a/apps/api/src/services/i18n/i18n.service.ts +++ b/apps/api/src/services/i18n/i18n.service.ts @@ -7,6 +7,8 @@ import { join } from 'node:path'; @Injectable() export class I18nService implements OnModuleInit { + private readonly logger = new Logger(I18nService.name); + private localesPath = join(__dirname, 'assets', 'locales'); private translations: { [locale: string]: cheerio.CheerioAPI } = {}; @@ -26,7 +28,7 @@ export class I18nService implements OnModuleInit { const $ = this.translations[languageCode]; if (!$) { - Logger.warn(`Translation not found for locale '${languageCode}'`); + this.logger.warn(`Translation not found for locale '${languageCode}'`); } let translatedText = $( @@ -36,7 +38,7 @@ export class I18nService implements OnModuleInit { ).text(); if (!translatedText) { - Logger.warn( + this.logger.warn( `Translation not found for id '${id}' in locale '${languageCode}'` ); } @@ -60,7 +62,7 @@ export class I18nService implements OnModuleInit { this.parseXml(xmlData); } } catch (error) { - Logger.error(error, 'I18nService'); + this.logger.error(error); } } diff --git a/apps/api/src/services/prisma/prisma.service.ts b/apps/api/src/services/prisma/prisma.service.ts index cdbc1cdfd..ebbd3afd4 100644 --- a/apps/api/src/services/prisma/prisma.service.ts +++ b/apps/api/src/services/prisma/prisma.service.ts @@ -14,6 +14,8 @@ export class PrismaService extends PrismaClient implements OnModuleInit, OnModuleDestroy { + private readonly logger = new Logger(PrismaService.name); + public constructor(configService: ConfigService) { const adapter = new PrismaPg({ connectionString: configService.get('DATABASE_URL') @@ -43,7 +45,7 @@ export class PrismaService try { await this.$connect(); } catch (error) { - Logger.error(error, 'PrismaService'); + this.logger.error(error); } } diff --git a/apps/api/src/services/queues/data-gathering/data-gathering.processor.ts b/apps/api/src/services/queues/data-gathering/data-gathering.processor.ts index 1a4038652..ee5cb838a 100644 --- a/apps/api/src/services/queues/data-gathering/data-gathering.processor.ts +++ b/apps/api/src/services/queues/data-gathering/data-gathering.processor.ts @@ -32,6 +32,8 @@ import { DataGatheringService } from './data-gathering.service'; @Injectable() @Processor(DATA_GATHERING_QUEUE) export class DataGatheringProcessor { + private readonly logger = new Logger(DataGatheringProcessor.name); + public constructor( private readonly dataGatheringService: DataGatheringService, private readonly dataProviderService: DataProviderService, @@ -51,16 +53,14 @@ export class DataGatheringProcessor { const { dataSource, symbol } = job.data; try { - Logger.log( - `Asset profile data gathering has been started for ${symbol} (${dataSource})`, - `DataGatheringProcessor (${GATHER_ASSET_PROFILE_PROCESS_JOB_NAME})` + this.logger.log( + `Asset profile data gathering has been started for ${symbol} (${dataSource})` ); await this.dataGatheringService.gatherAssetProfiles([job.data]); - Logger.log( - `Asset profile data gathering has been completed for ${symbol} (${dataSource})`, - `DataGatheringProcessor (${GATHER_ASSET_PROFILE_PROCESS_JOB_NAME})` + this.logger.log( + `Asset profile data gathering has been completed for ${symbol} (${dataSource})` ); } catch (error) { if (error instanceof AssetProfileDelistedError) { @@ -74,18 +74,14 @@ export class DataGatheringProcessor { } ); - Logger.log( - `Asset profile data gathering has been discarded for ${symbol} (${dataSource})`, - `DataGatheringProcessor (${GATHER_ASSET_PROFILE_PROCESS_JOB_NAME})` + this.logger.log( + `Asset profile data gathering has been discarded for ${symbol} (${dataSource})` ); return job.discard(); } - Logger.error( - error, - `DataGatheringProcessor (${GATHER_ASSET_PROFILE_PROCESS_JOB_NAME})` - ); + this.logger.error(error); throw error; } @@ -105,12 +101,11 @@ export class DataGatheringProcessor { try { let currentDate = parseISO(date as unknown as string); - Logger.log( + this.logger.log( `Historical market data gathering has been started for ${symbol} (${dataSource}) at ${format( currentDate, DATE_FORMAT - )}${force ? ' (forced update)' : ''}`, - `DataGatheringProcessor (${GATHER_HISTORICAL_MARKET_DATA_PROCESS_JOB_NAME})` + )}${force ? ' (forced update)' : ''}` ); const historicalData = await this.dataProviderService.getHistoricalRaw({ @@ -167,12 +162,11 @@ export class DataGatheringProcessor { await this.marketDataService.updateMany({ data }); } - Logger.log( + this.logger.log( `Historical market data gathering has been completed for ${symbol} (${dataSource}) at ${format( currentDate, DATE_FORMAT - )}`, - `DataGatheringProcessor (${GATHER_HISTORICAL_MARKET_DATA_PROCESS_JOB_NAME})` + )}` ); } catch (error) { if (error instanceof AssetProfileDelistedError) { @@ -186,18 +180,14 @@ export class DataGatheringProcessor { } ); - Logger.log( - `Historical market data gathering has been discarded for ${symbol} (${dataSource})`, - `DataGatheringProcessor (${GATHER_HISTORICAL_MARKET_DATA_PROCESS_JOB_NAME})` + this.logger.log( + `Historical market data gathering has been discarded for ${symbol} (${dataSource})` ); return job.discard(); } - Logger.error( - error, - `DataGatheringProcessor (${GATHER_HISTORICAL_MARKET_DATA_PROCESS_JOB_NAME})` - ); + this.logger.error(error); throw error; } diff --git a/apps/api/src/services/queues/data-gathering/data-gathering.service.ts b/apps/api/src/services/queues/data-gathering/data-gathering.service.ts index cec63c3eb..51f609d22 100644 --- a/apps/api/src/services/queues/data-gathering/data-gathering.service.ts +++ b/apps/api/src/services/queues/data-gathering/data-gathering.service.ts @@ -34,6 +34,8 @@ import ms, { StringValue } from 'ms'; @Injectable() export class DataGatheringService { + private readonly logger = new Logger(DataGatheringService.name); + public constructor( @Inject('DataEnhancers') private readonly dataEnhancers: DataEnhancerInterface[], @@ -145,7 +147,7 @@ export class DataGatheringService { }); } } catch (error) { - Logger.error(error, 'DataGatheringService'); + this.logger.error(error); } finally { return undefined; } @@ -187,12 +189,11 @@ export class DataGatheringService { symbol: symbolMapping?.[dataEnhancer.getName()] ?? symbol }); } catch (error) { - Logger.error( + this.logger.error( `Failed to enhance data for ${symbol} (${ assetProfile.dataSource }) by ${dataEnhancer.getName()}`, - error, - 'DataGatheringService' + error ); } } @@ -256,11 +257,7 @@ export class DataGatheringService { } }); } catch (error) { - Logger.error( - `${symbol}: ${error?.meta?.cause}`, - error, - 'DataGatheringService' - ); + this.logger.error(`${symbol}: ${error?.meta?.cause}`, error); if (assetProfileIdentifiers.length === 1) { throw error; diff --git a/apps/api/src/services/queues/portfolio-snapshot/portfolio-snapshot.processor.ts b/apps/api/src/services/queues/portfolio-snapshot/portfolio-snapshot.processor.ts index f3aa6e77e..cf94a9d2b 100644 --- a/apps/api/src/services/queues/portfolio-snapshot/portfolio-snapshot.processor.ts +++ b/apps/api/src/services/queues/portfolio-snapshot/portfolio-snapshot.processor.ts @@ -21,6 +21,8 @@ import { PortfolioSnapshotQueueJob } from './interfaces/portfolio-snapshot-queue @Injectable() @Processor(PORTFOLIO_SNAPSHOT_COMPUTATION_QUEUE) export class PortfolioSnapshotProcessor { + private readonly logger = new Logger(PortfolioSnapshotProcessor.name); + public constructor( private readonly accountBalanceService: AccountBalanceService, private readonly activitiesService: ActivitiesService, @@ -41,9 +43,8 @@ export class PortfolioSnapshotProcessor { try { const startTime = performance.now(); - Logger.log( - `Portfolio snapshot calculation of user '${job.data.userId}' has been started`, - `PortfolioSnapshotProcessor (${PORTFOLIO_SNAPSHOT_PROCESS_JOB_NAME})` + this.logger.log( + `Portfolio snapshot calculation of user '${job.data.userId}' has been started` ); const { activities } = @@ -72,12 +73,11 @@ export class PortfolioSnapshotProcessor { const snapshot = await portfolioCalculator.computeSnapshot(); - Logger.log( + this.logger.log( `Portfolio snapshot calculation of user '${job.data.userId}' has been completed in ${( (performance.now() - startTime) / 1000 - ).toFixed(3)} seconds`, - `PortfolioSnapshotProcessor (${PORTFOLIO_SNAPSHOT_PROCESS_JOB_NAME})` + ).toFixed(3)} seconds` ); const expiration = addMilliseconds( @@ -101,10 +101,7 @@ export class PortfolioSnapshotProcessor { return snapshot; } catch (error) { - Logger.error( - error, - `PortfolioSnapshotProcessor (${PORTFOLIO_SNAPSHOT_PROCESS_JOB_NAME})` - ); + this.logger.error(error); throw new Error(error); } diff --git a/apps/api/src/services/queues/statistics-gathering/statistics-gathering.processor.ts b/apps/api/src/services/queues/statistics-gathering/statistics-gathering.processor.ts index a523ef4f2..7eefc101f 100644 --- a/apps/api/src/services/queues/statistics-gathering/statistics-gathering.processor.ts +++ b/apps/api/src/services/queues/statistics-gathering/statistics-gathering.processor.ts @@ -27,6 +27,8 @@ import { format, subDays } from 'date-fns'; @Injectable() @Processor(STATISTICS_GATHERING_QUEUE) export class StatisticsGatheringProcessor { + private readonly logger = new Logger(StatisticsGatheringProcessor.name); + public constructor( private readonly configurationService: ConfigurationService, private readonly fetchService: FetchService, @@ -35,10 +37,7 @@ export class StatisticsGatheringProcessor { @Process(GATHER_STATISTICS_DOCKER_HUB_PULLS_PROCESS_JOB_NAME) public async gatherDockerHubPullsStatistics() { - Logger.log( - 'Docker Hub pulls statistics gathering has been started', - 'StatisticsGatheringProcessor' - ); + this.logger.log('Docker Hub pulls statistics gathering has been started'); const dockerHubPulls = await this.countDockerHubPulls(); @@ -47,17 +46,13 @@ export class StatisticsGatheringProcessor { value: String(dockerHubPulls) }); - Logger.log( - 'Docker Hub pulls statistics gathering has been completed', - 'StatisticsGatheringProcessor' - ); + this.logger.log('Docker Hub pulls statistics gathering has been completed'); } @Process(GATHER_STATISTICS_GITHUB_CONTRIBUTORS_PROCESS_JOB_NAME) public async gatherGitHubContributorsStatistics() { - Logger.log( - 'GitHub contributors statistics gathering has been started', - 'StatisticsGatheringProcessor' + this.logger.log( + 'GitHub contributors statistics gathering has been started' ); const gitHubContributors = await this.countGitHubContributors(); @@ -67,18 +62,14 @@ export class StatisticsGatheringProcessor { value: String(gitHubContributors) }); - Logger.log( - 'GitHub contributors statistics gathering has been completed', - 'StatisticsGatheringProcessor' + this.logger.log( + 'GitHub contributors statistics gathering has been completed' ); } @Process(GATHER_STATISTICS_GITHUB_STARGAZERS_PROCESS_JOB_NAME) public async gatherGitHubStargazersStatistics() { - Logger.log( - 'GitHub stargazers statistics gathering has been started', - 'StatisticsGatheringProcessor' - ); + this.logger.log('GitHub stargazers statistics gathering has been started'); const gitHubStargazers = await this.countGitHubStargazers(); @@ -87,9 +78,8 @@ export class StatisticsGatheringProcessor { value: String(gitHubStargazers) }); - Logger.log( - 'GitHub stargazers statistics gathering has been completed', - 'StatisticsGatheringProcessor' + this.logger.log( + 'GitHub stargazers statistics gathering has been completed' ); } @@ -100,18 +90,14 @@ export class StatisticsGatheringProcessor { ); if (!monitorId) { - Logger.log( - `Uptime statistics gathering has been skipped as no ${PROPERTY_BETTER_UPTIME_MONITOR_ID} is configured`, - 'StatisticsGatheringProcessor' + this.logger.log( + `Uptime statistics gathering has been skipped as no ${PROPERTY_BETTER_UPTIME_MONITOR_ID} is configured` ); return; } - Logger.log( - 'Uptime statistics gathering has been started', - 'StatisticsGatheringProcessor' - ); + this.logger.log('Uptime statistics gathering has been started'); const uptime = await this.getUptime(monitorId); @@ -120,10 +106,7 @@ export class StatisticsGatheringProcessor { value: String(uptime) }); - Logger.log( - 'Uptime statistics gathering has been completed', - 'StatisticsGatheringProcessor' - ); + this.logger.log('Uptime statistics gathering has been completed'); } private async countDockerHubPulls(): Promise { @@ -139,7 +122,7 @@ export class StatisticsGatheringProcessor { return pull_count; } catch (error) { - Logger.error(error, 'StatisticsGatheringProcessor - DockerHub'); + this.logger.error(error); throw error; } @@ -169,7 +152,7 @@ export class StatisticsGatheringProcessor { value }); } catch (error) { - Logger.error(error, 'StatisticsGatheringProcessor - GitHub'); + this.logger.error(error); throw error; } @@ -188,7 +171,7 @@ export class StatisticsGatheringProcessor { return stargazers_count; } catch (error) { - Logger.error(error, 'StatisticsGatheringProcessor - GitHub'); + this.logger.error(error); throw error; } @@ -217,7 +200,7 @@ export class StatisticsGatheringProcessor { return data.attributes.availability / 100; } catch (error) { - Logger.error(error, 'StatisticsGatheringProcessor - Better Stack'); + this.logger.error(error); throw error; } diff --git a/apps/api/src/services/twitter-bot/twitter-bot.service.ts b/apps/api/src/services/twitter-bot/twitter-bot.service.ts index b424f7198..ffd0c5452 100644 --- a/apps/api/src/services/twitter-bot/twitter-bot.service.ts +++ b/apps/api/src/services/twitter-bot/twitter-bot.service.ts @@ -16,6 +16,8 @@ import { TwitterApi, TwitterApiReadWrite } from 'twitter-api-v2'; @Injectable() export class TwitterBotService implements OnModuleInit { + private readonly logger = new Logger(TwitterBotService.name); + private twitterClient: TwitterApiReadWrite; public constructor( @@ -71,13 +73,12 @@ export class TwitterBotService implements OnModuleInit { const { data: createdTweet } = await this.twitterClient.v2.tweet(status); - Logger.log( - `Fear & Greed Index has been posted: https://x.com/ghostfolio_/status/${createdTweet.id}`, - 'TwitterBotService' + this.logger.log( + `Fear & Greed Index has been posted: https://x.com/ghostfolio_/status/${createdTweet.id}` ); } } catch (error) { - Logger.error(error, 'TwitterBotService'); + this.logger.error(error); } } From c6a2741cb16dc46e00af7637755bb2476b0bee19 Mon Sep 17 00:00:00 2001 From: Punith R Date: Sat, 6 Jun 2026 13:05:55 +0530 Subject: [PATCH 07/74] Task/improve language localization for uk (#6978) * Update translations * Update changelog --- CHANGELOG.md | 1 + apps/client/src/locales/messages.uk.xlf | 94 ++++++++++++------------- 2 files changed, 48 insertions(+), 47 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 35ca028a3..6310292f9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Refactored the backend logging to use the instance-based `Logger` +- Improved the language localization for Ukrainian (`uk`) ### Fixed diff --git a/apps/client/src/locales/messages.uk.xlf b/apps/client/src/locales/messages.uk.xlf index edc28f604..94dc7e52a 100644 --- a/apps/client/src/locales/messages.uk.xlf +++ b/apps/client/src/locales/messages.uk.xlf @@ -292,7 +292,7 @@ please - please + будь ласка apps/client/src/app/pages/pricing/pricing-page.html 333 @@ -360,7 +360,7 @@ with - with + з apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html 87 @@ -1388,7 +1388,7 @@ By - By + До apps/client/src/app/pages/portfolio/fire/fire-page.html 139 @@ -1892,7 +1892,7 @@ Indonesia - Indonesia + Індонезія libs/ui/src/lib/i18n.ts 90 @@ -2108,7 +2108,7 @@ Code - Code + Код apps/client/src/app/components/admin-overview/admin-overview.html 159 @@ -2636,7 +2636,7 @@ Argentina - Argentina + Аргентина libs/ui/src/lib/i18n.ts 78 @@ -3204,7 +3204,7 @@ for - for + для apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html 128 @@ -3560,7 +3560,7 @@ Duration - Duration + Тривалість apps/client/src/app/components/admin-overview/admin-overview.html 172 @@ -4897,7 +4897,7 @@ here - here + тут apps/client/src/app/pages/pricing/pricing-page.html 347 @@ -5113,7 +5113,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 @@ -6392,7 +6392,7 @@ Loan - Loan + Позика libs/ui/src/lib/i18n.ts 58 @@ -6944,7 +6944,7 @@ Role - Role + Роль apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html 39 @@ -7080,7 +7080,7 @@ Authentication - Authentication + Автентифікація apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html 60 @@ -7476,7 +7476,7 @@ Lazy - Lazy + Лінивий apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts 235 @@ -7484,7 +7484,7 @@ Instant - Instant + Миттєвий apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts 239 @@ -7500,7 +7500,7 @@ Mode - Mode + Режим apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 519 @@ -7508,7 +7508,7 @@ Selector - Selector + Селектор apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 535 @@ -7532,7 +7532,7 @@ real-time - real-time + реальний час apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts 239 @@ -7548,7 +7548,7 @@ Create - Create + Створити libs/ui/src/lib/tags-selector/tags-selector.component.html 50 @@ -7556,7 +7556,7 @@ Change - Change + Змінити libs/ui/src/lib/holdings-table/holdings-table.component.html 138 @@ -7568,7 +7568,7 @@ Performance - Performance + Дохідність apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.html 6 @@ -7624,7 +7624,7 @@ Armenia - Armenia + Вірменія libs/ui/src/lib/i18n.ts 77 @@ -7640,7 +7640,7 @@ Singapore - Singapore + Сінгапур libs/ui/src/lib/i18n.ts 97 @@ -7672,7 +7672,7 @@ Continue - Continue + Продовжити apps/client/src/app/pages/register/user-account-registration-dialog/user-account-registration-dialog.html 57 @@ -7732,7 +7732,7 @@ terms-of-service - terms-of-service + umovy-nadannia-posluh kebab-case libs/common/src/lib/routes/routes.ts @@ -7781,7 +7781,7 @@ Apply - Apply + Застосувати apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 154 @@ -7837,7 +7837,7 @@ someone - someone + когось apps/client/src/app/pages/public/public-page.component.ts 62 @@ -7853,7 +7853,7 @@ Watchlist - Watchlist + Список спостереження apps/client/src/app/components/home-watchlist/home-watchlist.html 4 @@ -7897,7 +7897,7 @@ changelog - changelog + zhurnal-zmin kebab-case libs/common/src/lib/routes/routes.ts @@ -8030,7 +8030,7 @@ personal-finance-tools - personal-finance-tools + instrumenty-osobystykh-finansiv kebab-case libs/common/src/lib/routes/routes.ts @@ -8047,7 +8047,7 @@ markets - markets + rynky kebab-case libs/common/src/lib/routes/routes.ts @@ -8108,7 +8108,7 @@ Available - Available + Доступно apps/client/src/app/components/data-provider-status/data-provider-status.component.html 3 @@ -8116,7 +8116,7 @@ Unavailable - Unavailable + Недоступно apps/client/src/app/components/data-provider-status/data-provider-status.component.html 5 @@ -8132,7 +8132,7 @@ new - new + новий apps/client/src/app/components/admin-settings/admin-settings.component.html 79 @@ -8140,7 +8140,7 @@ Investment - Investment + Інвестиція apps/client/src/app/pages/i18n/i18n-page.html 15 @@ -8164,7 +8164,7 @@ Equity - Equity + Акції apps/client/src/app/pages/i18n/i18n-page.html 41 @@ -8252,7 +8252,7 @@ Investment - Investment + Інвестиція apps/client/src/app/pages/i18n/i18n-page.html 95 @@ -8276,7 +8276,7 @@ start - start + pochatok kebab-case libs/common/src/lib/routes/routes.ts @@ -8297,7 +8297,7 @@ Generate - Generate + Згенерувати apps/client/src/app/components/user-account-access/user-account-access.html 45 @@ -8313,7 +8313,7 @@ Stocks - Stocks + Акції apps/client/src/app/components/markets/markets.component.ts 51 @@ -8325,7 +8325,7 @@ Cryptocurrencies - Cryptocurrencies + Криптовалюти apps/client/src/app/components/markets/markets.component.ts 52 @@ -8361,7 +8361,7 @@ Collectible - Collectible + Колекційний предмет libs/ui/src/lib/i18n.ts 55 @@ -8421,7 +8421,7 @@ Fees - Fees + Комісії apps/client/src/app/pages/i18n/i18n-page.html 161 @@ -8429,7 +8429,7 @@ Liquidity - Liquidity + Ліквідність apps/client/src/app/pages/i18n/i18n-page.html 70 @@ -8565,7 +8565,7 @@ Asia-Pacific - Asia-Pacific + Азіатсько-Тихоокеанський регіон apps/client/src/app/pages/i18n/i18n-page.html 165 @@ -8629,7 +8629,7 @@ Europe - Europe + Європа apps/client/src/app/pages/i18n/i18n-page.html 195 @@ -8661,7 +8661,7 @@ Japan - Japan + Японія apps/client/src/app/pages/i18n/i18n-page.html 209 From be874f62e3ad6626606cb9d86ad9bf40843ee4e7 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 6 Jun 2026 12:17:50 +0200 Subject: [PATCH 08/74] Task/centralize asset profile override logic (#6991) * Centralize asset profile logic * Update changelog --- CHANGELOG.md | 2 + apps/api/src/app/admin/admin.service.ts | 110 +++++++----------- .../data-gathering/data-gathering.service.ts | 29 +++-- .../symbol-profile/symbol-profile.service.ts | 60 +++------- libs/common/src/lib/helper.ts | 45 ++++++- 5 files changed, 124 insertions(+), 122 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6310292f9..5f713f736 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,11 +13,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- Centralized the asset profile override logic for manual adjustments - Refactored the backend logging to use the instance-based `Logger` - Improved the language localization for Ukrainian (`uk`) ### Fixed +- Fixed an issue where the asset profile override (asset class and asset sub class) was not applied to the data enhancers when gathering asset profiles - Fixed a layout issue in the asset profile dialog of the admin control by truncating long titles ## 3.7.0 - 2026-06-02 diff --git a/apps/api/src/app/admin/admin.service.ts b/apps/api/src/app/admin/admin.service.ts index 0bf5c3925..948616d6c 100644 --- a/apps/api/src/app/admin/admin.service.ts +++ b/apps/api/src/app/admin/admin.service.ts @@ -14,6 +14,7 @@ import { PROPERTY_IS_USER_SIGNUP_ENABLED } from '@ghostfolio/common/config'; import { + applyAssetProfileOverrides, getAssetProfileIdentifier, getCurrencyFromSymbol, isCurrency @@ -29,7 +30,6 @@ import { EnhancedSymbolProfile, Filter } from '@ghostfolio/common/interfaces'; -import { Sector } from '@ghostfolio/common/interfaces/sector.interface'; import { MarketDataPreset } from '@ghostfolio/common/types'; import { @@ -349,87 +349,61 @@ export class AdminService { } let marketData: AdminMarketDataItem[] = await Promise.all( - assetProfiles.map( - async ({ + assetProfiles.map(async (assetProfile) => { + const { _count, activities, - assetClass, - assetSubClass, comment, - countries, currency, dataSource, id, isActive, isUsedByUsersWithSubscription, - name, - sectors, - symbol, - SymbolProfileOverrides - }) => { - let countriesCount = countries ? Object.keys(countries).length : 0; + symbol + } = assetProfile; - const lastMarketPrice = lastMarketPriceMap.get( - getAssetProfileIdentifier({ dataSource, symbol }) + const { assetClass, assetSubClass, countries, name, sectors } = + applyAssetProfileOverrides( + assetProfile, + assetProfile.SymbolProfileOverrides ); - const marketDataItemCount = - marketDataItems.find((marketDataItem) => { - return ( - marketDataItem.dataSource === dataSource && - marketDataItem.symbol === symbol - ); - })?._count ?? 0; - - let sectorsCount = sectors ? Object.keys(sectors).length : 0; - - if (SymbolProfileOverrides) { - assetClass = SymbolProfileOverrides.assetClass ?? assetClass; - assetSubClass = - SymbolProfileOverrides.assetSubClass ?? assetSubClass; - - if ( - (SymbolProfileOverrides.countries as unknown as Prisma.JsonArray) - ?.length > 0 - ) { - countriesCount = ( - SymbolProfileOverrides.countries as unknown as Prisma.JsonArray - ).length; - } + const countriesCount = countries ? Object.keys(countries).length : 0; - name = SymbolProfileOverrides.name ?? name; + const lastMarketPrice = lastMarketPriceMap.get( + getAssetProfileIdentifier({ dataSource, symbol }) + ); - if ( - (SymbolProfileOverrides.sectors as unknown as Sector[])?.length > - 0 - ) { - sectorsCount = ( - SymbolProfileOverrides.sectors as unknown as Prisma.JsonArray - ).length; - } - } + const marketDataItemCount = + marketDataItems.find((marketDataItem) => { + return ( + marketDataItem.dataSource === dataSource && + marketDataItem.symbol === symbol + ); + })?._count ?? 0; - return { - assetClass, - assetSubClass, - comment, - countriesCount, - currency, - dataSource, - id, - isActive, - lastMarketPrice, - marketDataItemCount, - name, - sectorsCount, - symbol, - activitiesCount: _count.activities, - date: activities?.[0]?.date, - isUsedByUsersWithSubscription: await isUsedByUsersWithSubscription, - watchedByCount: _count.watchedBy - }; - } - ) + const sectorsCount = sectors ? Object.keys(sectors).length : 0; + + return { + assetClass, + assetSubClass, + comment, + countriesCount, + currency, + dataSource, + id, + isActive, + lastMarketPrice, + marketDataItemCount, + name, + sectorsCount, + symbol, + activitiesCount: _count.activities, + date: activities?.[0]?.date, + isUsedByUsersWithSubscription: await isUsedByUsersWithSubscription, + watchedByCount: _count.watchedBy + }; + }) ); if (presetId) { diff --git a/apps/api/src/services/queues/data-gathering/data-gathering.service.ts b/apps/api/src/services/queues/data-gathering/data-gathering.service.ts index 51f609d22..b5b701fe4 100644 --- a/apps/api/src/services/queues/data-gathering/data-gathering.service.ts +++ b/apps/api/src/services/queues/data-gathering/data-gathering.service.ts @@ -178,14 +178,27 @@ export class DataGatheringService { ); for (const [symbol, assetProfile] of Object.entries(assetProfiles)) { - const symbolMapping = symbolProfiles.find((symbolProfile) => { - return symbolProfile.symbol === symbol; - })?.symbolMapping; + const symbolProfile = symbolProfiles.find( + ({ symbol: symbolProfileSymbol }) => { + return symbolProfileSymbol === symbol; + } + ); + + const symbolMapping = symbolProfile?.symbolMapping; + + let enhancedAssetProfile = symbolProfile + ? { + ...assetProfile, + assetClass: symbolProfile.assetClass ?? assetProfile.assetClass, + assetSubClass: + symbolProfile.assetSubClass ?? assetProfile.assetSubClass + } + : assetProfile; for (const dataEnhancer of this.dataEnhancers) { try { - assetProfiles[symbol] = await dataEnhancer.enhance({ - response: assetProfile, + enhancedAssetProfile = await dataEnhancer.enhance({ + response: enhancedAssetProfile, symbol: symbolMapping?.[dataEnhancer.getName()] ?? symbol }); } catch (error) { @@ -198,9 +211,9 @@ export class DataGatheringService { } } + const { assetClass, assetSubClass } = assetProfile; + const { - assetClass, - assetSubClass, countries, currency, cusip, @@ -213,7 +226,7 @@ export class DataGatheringService { name, sectors, url - } = assetProfile; + } = enhancedAssetProfile; try { await this.prismaService.symbolProfile.upsert({ diff --git a/apps/api/src/services/symbol-profile/symbol-profile.service.ts b/apps/api/src/services/symbol-profile/symbol-profile.service.ts index 4c2c42589..413b7db03 100644 --- a/apps/api/src/services/symbol-profile/symbol-profile.service.ts +++ b/apps/api/src/services/symbol-profile/symbol-profile.service.ts @@ -1,5 +1,6 @@ import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service'; import { UNKNOWN_KEY } from '@ghostfolio/common/config'; +import { applyAssetProfileOverrides } from '@ghostfolio/common/helper'; import { AssetProfileIdentifier, EnhancedSymbolProfile, @@ -192,21 +193,28 @@ export class SymbolProfileService { })[] ): EnhancedSymbolProfile[] { return symbolProfiles.map((symbolProfile) => { + const symbolProfileWithOverrides = applyAssetProfileOverrides( + symbolProfile, + symbolProfile.SymbolProfileOverrides + ); + const item = { - ...symbolProfile, + ...symbolProfileWithOverrides, activitiesCount: 0, countries: this.getCountries( - symbolProfile?.countries as unknown as Prisma.JsonArray + symbolProfileWithOverrides?.countries as unknown as Prisma.JsonArray ), dateOfFirstActivity: undefined as Date, holdings: this.getHoldings( - symbolProfile?.holdings as unknown as Prisma.JsonArray + symbolProfileWithOverrides?.holdings as unknown as Prisma.JsonArray + ), + scraperConfiguration: this.getScraperConfiguration( + symbolProfileWithOverrides ), - scraperConfiguration: this.getScraperConfiguration(symbolProfile), sectors: this.getSectors( - symbolProfile?.sectors as unknown as Prisma.JsonArray + symbolProfileWithOverrides?.sectors as unknown as Prisma.JsonArray ), - symbolMapping: this.getSymbolMapping(symbolProfile), + symbolMapping: this.getSymbolMapping(symbolProfileWithOverrides), watchedByCount: 0 }; @@ -217,45 +225,7 @@ export class SymbolProfileService { item.dateOfFirstActivity = symbolProfile.activities?.[0]?.date; delete item.activities; - if (item.SymbolProfileOverrides) { - item.assetClass = - item.SymbolProfileOverrides.assetClass ?? item.assetClass; - item.assetSubClass = - item.SymbolProfileOverrides.assetSubClass ?? item.assetSubClass; - - if ( - (item.SymbolProfileOverrides.countries as unknown as Prisma.JsonArray) - ?.length > 0 - ) { - item.countries = this.getCountries( - item.SymbolProfileOverrides.countries as unknown as Prisma.JsonArray - ); - } - - if ( - (item.SymbolProfileOverrides.holdings as unknown as Holding[]) - ?.length > 0 - ) { - item.holdings = this.getHoldings( - item.SymbolProfileOverrides.holdings as unknown as Prisma.JsonArray - ); - } - - item.name = item.SymbolProfileOverrides.name ?? item.name; - - if ( - (item.SymbolProfileOverrides.sectors as unknown as Sector[])?.length > - 0 - ) { - item.sectors = this.getSectors( - item.SymbolProfileOverrides.sectors as unknown as Prisma.JsonArray - ); - } - - item.url = item.SymbolProfileOverrides.url ?? item.url; - - delete item.SymbolProfileOverrides; - } + delete item.SymbolProfileOverrides; return item; }); diff --git a/libs/common/src/lib/helper.ts b/libs/common/src/lib/helper.ts index c5f6cbbb9..02bd26b90 100644 --- a/libs/common/src/lib/helper.ts +++ b/libs/common/src/lib/helper.ts @@ -1,5 +1,12 @@ import { NumberParser } from '@internationalized/number'; -import { Type as ActivityType, DataSource, MarketData } from '@prisma/client'; +import { + Type as ActivityType, + DataSource, + MarketData, + Prisma, + SymbolProfile, + SymbolProfileOverrides +} from '@prisma/client'; import { Big } from 'big.js'; import { isISO4217CurrencyCode } from 'class-validator'; import { @@ -47,6 +54,42 @@ export const DATE_FORMAT = 'yyyy-MM-dd'; export const DATE_FORMAT_MONTHLY = 'MMMM yyyy'; export const DATE_FORMAT_YEARLY = 'yyyy'; +export function applyAssetProfileOverrides>( + assetProfile: T, + assetProfileOverrides: SymbolProfileOverrides | null +): T { + if (!assetProfileOverrides) { + return assetProfile; + } + + const assetProfileWithOverrides = { ...assetProfile } as T; + + assetProfileWithOverrides.assetClass = + assetProfileOverrides.assetClass ?? assetProfile.assetClass; + + assetProfileWithOverrides.assetSubClass = + assetProfileOverrides.assetSubClass ?? assetProfile.assetSubClass; + + if ((assetProfileOverrides.countries as Prisma.JsonArray)?.length > 0) { + assetProfileWithOverrides.countries = assetProfileOverrides.countries; + } + + if ((assetProfileOverrides.holdings as Prisma.JsonArray)?.length > 0) { + assetProfileWithOverrides.holdings = assetProfileOverrides.holdings; + } + + assetProfileWithOverrides.name = + assetProfileOverrides.name ?? assetProfile.name; + + if ((assetProfileOverrides.sectors as Prisma.JsonArray)?.length > 0) { + assetProfileWithOverrides.sectors = assetProfileOverrides.sectors; + } + + assetProfileWithOverrides.url = assetProfileOverrides.url ?? assetProfile.url; + + return assetProfileWithOverrides; +} + export function calculateBenchmarkTrend({ days, historicalData From 37a70f23ce3e2df26beebc5266467c4fd17fc9e8 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 6 Jun 2026 12:39:58 +0200 Subject: [PATCH 09/74] Task/improve styling in user detail dialog of admin control (#6992) * Improve styling * Update changelog --- CHANGELOG.md | 3 ++- .../asset-profile-dialog/asset-profile-dialog.html | 4 ++-- .../user-detail-dialog/user-detail-dialog.component.scss | 4 ++++ .../app/components/user-detail-dialog/user-detail-dialog.html | 4 ++-- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5f713f736..b9b9f118d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,13 +14,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Centralized the asset profile override logic for manual adjustments +- Improved the styling in the user detail dialog of the admin control panel’s users section - Refactored the backend logging to use the instance-based `Logger` - Improved the language localization for Ukrainian (`uk`) ### Fixed - Fixed an issue where the asset profile override (asset class and asset sub class) was not applied to the data enhancers when gathering asset profiles -- Fixed a layout issue in the asset profile dialog of the admin control by truncating long titles +- Fixed a layout issue in the asset profile dialog of the admin control panel by truncating long titles ## 3.7.0 - 2026-06-02 diff --git a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html index 61ca6a6da..ddcf96b3b 100644 --- a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html +++ b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -1,5 +1,5 @@
-

+
{{ assetProfile?.name ?? data.symbol }} @@ -87,7 +87,7 @@ Delete -

+
+
diff --git a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts index 8c42e37ea..e745decd0 100644 --- a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts +++ b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts @@ -157,6 +157,7 @@ export class GfHoldingDetailDialogComponent implements OnInit { public SymbolProfile: EnhancedSymbolProfile; public tags: Tag[]; public tagsAvailable: Tag[]; + public translate = translate; public user: User; public value: number; @@ -442,7 +443,7 @@ export class GfHoldingDetailDialogComponent implements OnInit { if (SymbolProfile?.sectors?.length > 0) { for (const sector of SymbolProfile.sectors) { this.sectors[sector.name] = { - name: sector.name, + name: translate(sector.name), value: sector.weight }; } diff --git a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html index 4b04a0986..478a8e5a3 100644 --- a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html +++ b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -262,7 +262,7 @@ i18n size="medium" [locale]="data.locale" - [value]="SymbolProfile.sectors[0].name" + [value]="translate(SymbolProfile.sectors[0].name)" >Sector
diff --git a/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts b/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts index f48b551bb..792f32bf5 100644 --- a/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts +++ b/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts @@ -442,7 +442,7 @@ export class GfAllocationsPageComponent implements OnInit { : position.valueInPercentage); } else { this.sectors[name] = { - name, + name: translate(name), value: weight * (isNumber(position.valueInBaseCurrency) diff --git a/apps/client/src/app/pages/public/public-page.component.ts b/apps/client/src/app/pages/public/public-page.component.ts index f52639db6..52a7864ac 100644 --- a/apps/client/src/app/pages/public/public-page.component.ts +++ b/apps/client/src/app/pages/public/public-page.component.ts @@ -9,6 +9,7 @@ import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { Market } from '@ghostfolio/common/types'; import { GfActivitiesTableComponent } from '@ghostfolio/ui/activities-table/activities-table.component'; import { GfHoldingsTableComponent } from '@ghostfolio/ui/holdings-table/holdings-table.component'; +import { translate } from '@ghostfolio/ui/i18n'; import { GfPortfolioProportionChartComponent } from '@ghostfolio/ui/portfolio-proportion-chart/portfolio-proportion-chart.component'; import { DataService } from '@ghostfolio/ui/services'; import { GfValueComponent } from '@ghostfolio/ui/value'; @@ -232,7 +233,7 @@ export class GfPublicPageComponent implements OnInit { weight * (position.valueInBaseCurrency ?? 0); } else { this.sectors[name] = { - name, + name: translate(name), value: weight * (this.publicPortfolioDetails.holdings[symbol] diff --git a/libs/common/src/lib/config.ts b/libs/common/src/lib/config.ts index 28d902d71..5f2dd9a1c 100644 --- a/libs/common/src/lib/config.ts +++ b/libs/common/src/lib/config.ts @@ -282,6 +282,21 @@ export const REPLACE_NAME_PARTS = [ 'Xtrackers (IE) Plc -' ]; +export const SECTORS = [ + 'Basic Materials', + 'Communication Services', + 'Consumer Cyclical', + 'Consumer Defensive', + 'Energy', + 'Financial Services', + 'Healthcare', + 'Industrials', + 'Other', + 'Real Estate', + 'Technology', + 'Utilities' +] as const; + export const STORYBOOK_PATH = '/development/storybook'; export const SUPPORTED_LANGUAGE_CODES = [ diff --git a/libs/common/src/lib/types/index.ts b/libs/common/src/lib/types/index.ts index 781e50c55..b6e513a51 100644 --- a/libs/common/src/lib/types/index.ts +++ b/libs/common/src/lib/types/index.ts @@ -17,6 +17,7 @@ import type { MarketState } from './market-state.type'; import type { Market } from './market.type'; import type { OrderWithAccount } from './order-with-account.type'; import type { RequestWithUser } from './request-with-user.type'; +import type { SectorName } from './sector-name.type'; import type { SubscriptionOfferKey } from './subscription-offer-key.type'; import type { UserWithSettings } from './user-with-settings.type'; import type { ViewMode } from './view-mode.type'; @@ -41,6 +42,7 @@ export type { MarketState, OrderWithAccount, RequestWithUser, + SectorName, SubscriptionOfferKey, UserWithSettings, ViewMode diff --git a/libs/common/src/lib/types/sector-name.type.ts b/libs/common/src/lib/types/sector-name.type.ts new file mode 100644 index 000000000..0d9ea9cee --- /dev/null +++ b/libs/common/src/lib/types/sector-name.type.ts @@ -0,0 +1,3 @@ +import type { SECTORS } from '../config'; + +export type SectorName = (typeof SECTORS)[number]; diff --git a/libs/ui/src/lib/i18n.ts b/libs/ui/src/lib/i18n.ts index c7d8b7c8b..f6f1e8ff9 100644 --- a/libs/ui/src/lib/i18n.ts +++ b/libs/ui/src/lib/i18n.ts @@ -1,3 +1,5 @@ +import type { SectorName } from '@ghostfolio/common/types'; + import '@angular/localize/init'; const locales = { @@ -107,8 +109,22 @@ const locales = { EXTREME_GREED: $localize`Extreme Greed`, FEAR: $localize`Fear`, GREED: $localize`Greed`, - NEUTRAL: $localize`Neutral` -}; + NEUTRAL: $localize`Neutral`, + + // Sectors + 'Basic Materials': $localize`Basic Materials`, + 'Communication Services': $localize`Communication Services`, + 'Consumer Cyclical': $localize`Consumer Cyclical`, + 'Consumer Defensive': $localize`Consumer Defensive`, + Energy: $localize`Energy`, + 'Financial Services': $localize`Financial Services`, + Healthcare: $localize`Healthcare`, + Industrials: $localize`Industrials`, + Other: $localize`Other`, + 'Real Estate': $localize`Real Estate`, + Technology: $localize`Technology`, + Utilities: $localize`Utilities` +} satisfies Record & Record; export function translate(aKey: string): string { return locales[aKey] ?? aKey; From 363684526f9cfddd3e5e097fcde5591134ff309b Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 6 Jun 2026 20:17:52 +0200 Subject: [PATCH 13/74] Task/localize country names (#6995) * Localize country names * Update changelog --- CHANGELOG.md | 1 + .../asset-profile-dialog.component.ts | 6 ++-- .../asset-profile-dialog.html | 7 ++++- .../holding-detail-dialog.component.ts | 12 ++++++-- .../holding-detail-dialog.html | 7 ++++- .../allocations/allocations-page.component.ts | 11 ++++--- .../app/pages/public/public-page.component.ts | 8 ++--- libs/common/src/lib/helper.ts | 14 +++++++++ libs/ui/src/lib/i18n.ts | 29 ------------------- .../portfolio-proportion-chart.component.ts | 6 ++-- .../world-map-chart.component.ts | 16 ++++++++-- 11 files changed, 68 insertions(+), 49 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8e13d948b..5f17f1288 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Harmonized the sector names across the data providers +- Localized the country names - Localized the sector names - Centralized the asset profile override logic for manual adjustments - Improved the styling in the user detail dialog of the admin control panel’s users section diff --git a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts index fc08c3680..ce997cf27 100644 --- a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts +++ b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts @@ -8,6 +8,7 @@ import { UpdateAssetProfileDto } from '@ghostfolio/common/dtos'; import { canDeleteAssetProfile, DATE_FORMAT, + getCountryName, getCurrencyFromSymbol, isCurrency } from '@ghostfolio/common/helper'; @@ -224,6 +225,7 @@ export class GfAssetProfileDialogComponent implements OnInit { value: 'max' } ]; + protected readonly getCountryName = getCountryName; protected historicalDataItems: LineChartItem[]; protected isBenchmark = false; protected isDataGatheringEnabled: boolean; @@ -369,9 +371,9 @@ export class GfAssetProfileDialogComponent implements OnInit { this.assetProfile?.countries && this.assetProfile.countries.length > 0 ) { - for (const { code, name, weight } of this.assetProfile.countries) { + for (const { code, weight } of this.assetProfile.countries) { this.countries[code] = { - name, + name: getCountryName({ code, locale: this.data.locale }), value: weight }; } diff --git a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html index 474fff3ca..d9a5354e5 100644 --- a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html +++ b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -269,7 +269,12 @@ i18n size="medium" [locale]="data.locale" - [value]="assetProfile?.countries[0].name" + [value]=" + getCountryName({ + code: assetProfile?.countries[0].code, + locale: data.locale + }) + " >Country
diff --git a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts index e745decd0..68bb1215a 100644 --- a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts +++ b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts @@ -6,7 +6,11 @@ import { NUMERICAL_PRECISION_THRESHOLD_6_FIGURES } from '@ghostfolio/common/config'; import { CreateOrderDto } from '@ghostfolio/common/dtos'; -import { DATE_FORMAT, downloadAsFile } from '@ghostfolio/common/helper'; +import { + DATE_FORMAT, + downloadAsFile, + getCountryName +} from '@ghostfolio/common/helper'; import { Activity, DataProviderInfo, @@ -121,6 +125,7 @@ export class GfHoldingDetailDialogComponent implements OnInit { public dividendInBaseCurrencyPrecision = 2; public dividendYieldPercentWithCurrencyEffect: number; public feeInBaseCurrency: number; + public getCountryName = getCountryName; public hasPermissionToCreateOwnTag: boolean; public hasPermissionToReadMarketDataOfOwnAssetProfile: boolean; public historicalDataItems: LineChartItem[]; @@ -434,7 +439,10 @@ export class GfHoldingDetailDialogComponent implements OnInit { if (SymbolProfile?.countries?.length > 0) { for (const country of SymbolProfile.countries) { this.countries[country.code] = { - name: country.name, + name: getCountryName({ + code: country.code, + locale: this.data.locale + }), value: country.weight }; } diff --git a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html index 478a8e5a3..609eec3c0 100644 --- a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html +++ b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -272,7 +272,12 @@ i18n size="medium" [locale]="data.locale" - [value]="SymbolProfile.countries[0].name" + [value]=" + getCountryName({ + code: SymbolProfile.countries[0].code, + locale: data.locale + }) + " >Country
diff --git a/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts b/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts index 792f32bf5..d0eb3788b 100644 --- a/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts +++ b/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts @@ -3,7 +3,7 @@ import { AccountDetailDialogParams } from '@ghostfolio/client/components/account import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; import { MAX_TOP_HOLDINGS, UNKNOWN_KEY } from '@ghostfolio/common/config'; -import { prettifySymbol } from '@ghostfolio/common/helper'; +import { getCountryName, prettifySymbol } from '@ghostfolio/common/helper'; import { AssetProfileIdentifier, HoldingWithParents, @@ -353,7 +353,7 @@ export class GfAllocationsPageComponent implements OnInit { if (position.assetProfile.countries.length > 0) { for (const country of position.assetProfile.countries) { - const { code, continent, name, weight } = country; + const { code, continent, weight } = country; if (this.continents[continent]?.value) { this.continents[continent].value += @@ -363,7 +363,7 @@ export class GfAllocationsPageComponent implements OnInit { : position.valueInPercentage); } else { this.continents[continent] = { - name: continent, + name: translate(continent), value: weight * (isNumber(position.valueInBaseCurrency) @@ -380,7 +380,10 @@ export class GfAllocationsPageComponent implements OnInit { : position.valueInPercentage); } else { this.countries[code] = { - name, + name: getCountryName({ + code, + locale: this.user?.settings?.locale + }), value: weight * (isNumber(position.valueInBaseCurrency) diff --git a/apps/client/src/app/pages/public/public-page.component.ts b/apps/client/src/app/pages/public/public-page.component.ts index 52a7864ac..43d961c1d 100644 --- a/apps/client/src/app/pages/public/public-page.component.ts +++ b/apps/client/src/app/pages/public/public-page.component.ts @@ -1,5 +1,5 @@ import { UNKNOWN_KEY } from '@ghostfolio/common/config'; -import { prettifySymbol } from '@ghostfolio/common/helper'; +import { getCountryName, prettifySymbol } from '@ghostfolio/common/helper'; import { InfoItem, PortfolioPosition, @@ -186,14 +186,14 @@ export class GfPublicPageComponent implements OnInit { if (position.assetProfile.countries.length > 0) { for (const country of position.assetProfile.countries) { - const { code, continent, name, weight } = country; + const { code, continent, weight } = country; if (this.continents[continent]?.value) { this.continents[continent].value += weight * (position.valueInBaseCurrency ?? 0); } else { this.continents[continent] = { - name: continent, + name: translate(continent), value: weight * (this.publicPortfolioDetails.holdings[symbol] @@ -206,7 +206,7 @@ export class GfPublicPageComponent implements OnInit { weight * (position.valueInBaseCurrency ?? 0); } else { this.countries[code] = { - name, + name: getCountryName({ code }), value: weight * (this.publicPortfolioDetails.holdings[symbol] diff --git a/libs/common/src/lib/helper.ts b/libs/common/src/lib/helper.ts index 02bd26b90..db320c7cb 100644 --- a/libs/common/src/lib/helper.ts +++ b/libs/common/src/lib/helper.ts @@ -258,6 +258,20 @@ export function getCurrencyFromSymbol(aSymbol = '') { return aSymbol.replace(DEFAULT_CURRENCY, ''); } +export function getCountryName({ + code, + locale = getLocale() +}: { + code: string; + locale?: string; +}) { + try { + return new Intl.DisplayNames([locale], { type: 'region' }).of(code) ?? code; + } catch { + return code; + } +} + export function getDateFnsLocale(aLanguageCode?: string) { if (aLanguageCode === 'ca') { return ca; diff --git a/libs/ui/src/lib/i18n.ts b/libs/ui/src/lib/i18n.ts index f6f1e8ff9..2c037c7d1 100644 --- a/libs/ui/src/lib/i18n.ts +++ b/libs/ui/src/lib/i18n.ts @@ -75,35 +75,6 @@ const locales = { Oceania: $localize`Oceania`, 'South America': $localize`South America`, - // Countries - Armenia: $localize`Armenia`, - Argentina: $localize`Argentina`, - Australia: $localize`Australia`, - Austria: $localize`Austria`, - Belgium: $localize`Belgium`, - 'British Virgin Islands': $localize`British Virgin Islands`, - Bulgaria: $localize`Bulgaria`, - Canada: $localize`Canada`, - 'Czech Republic': $localize`Czech Republic`, - Finland: $localize`Finland`, - France: $localize`France`, - Germany: $localize`Germany`, - India: $localize`India`, - Indonesia: $localize`Indonesia`, - Italy: $localize`Italy`, - Japan: $localize`Japan`, - Netherlands: $localize`Netherlands`, - 'New Zealand': $localize`New Zealand`, - Poland: $localize`Poland`, - Romania: $localize`Romania`, - Singapore: $localize`Singapore`, - 'South Africa': $localize`South Africa`, - Switzerland: $localize`Switzerland`, - Thailand: $localize`Thailand`, - Ukraine: $localize`Ukraine`, - 'United Kingdom': $localize`United Kingdom`, - 'United States': $localize`United States`, - // Fear and Greed Index EXTREME_FEAR: $localize`Extreme Fear`, EXTREME_GREED: $localize`Extreme Greed`, diff --git a/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts b/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts index 4021bf97f..7c17b587c 100644 --- a/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts +++ b/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts @@ -37,8 +37,6 @@ import Color from 'color'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; import OpenColor from 'open-color'; -import { translate } from '../i18n'; - const { blue, cyan, @@ -390,7 +388,7 @@ export class GfPortfolioProportionChartComponent return value > 0 ? isUUID(symbol) - ? (translate(this.data[symbol]?.name) ?? symbol) + ? (this.data[symbol]?.name ?? symbol) : symbol : ''; }, @@ -453,7 +451,7 @@ export class GfPortfolioProportionChartComponent symbol = $localize`No data available`; } - const name = translate(this.data[symbol]?.name); + const name = this.data[symbol]?.name; let sum = 0; diff --git a/libs/ui/src/lib/world-map-chart/world-map-chart.component.ts b/libs/ui/src/lib/world-map-chart/world-map-chart.component.ts index f86d4d010..0d5eb7387 100644 --- a/libs/ui/src/lib/world-map-chart/world-map-chart.component.ts +++ b/libs/ui/src/lib/world-map-chart/world-map-chart.component.ts @@ -1,4 +1,8 @@ -import { getLocale, getNumberFormatGroup } from '@ghostfolio/common/helper'; +import { + getCountryName, + getLocale, + getNumberFormatGroup +} from '@ghostfolio/common/helper'; import { ChangeDetectionStrategy, @@ -25,7 +29,7 @@ export class GfWorldMapChartComponent implements OnChanges, OnDestroy { @Input() locale = getLocale(); public isLoading = true; - public svgMapElement; + public svgMapElement: any; public constructor(private changeDetectorRef: ChangeDetectorRef) {} @@ -88,6 +92,14 @@ export class GfWorldMapChartComponent implements OnChanges, OnDestroy { targetElementID: 'svgMap' }); + this.svgMapElement.options.countryNames = Object.keys( + this.svgMapElement.countries + ).reduce<{ [code: string]: string }>((names, code) => { + names[code] = getCountryName({ code, locale: this.locale }); + + return names; + }, {}); + setTimeout(() => { this.isLoading = false; From b3f20e175c822dd410c3ec035aaf7b5e54f93862 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 6 Jun 2026 20:20:35 +0200 Subject: [PATCH 14/74] Task/update locales (#6902) Update locales --- apps/client/src/locales/messages.ca.xlf | 770 ++++++++++-------------- apps/client/src/locales/messages.de.xlf | 770 ++++++++++-------------- apps/client/src/locales/messages.es.xlf | 770 ++++++++++-------------- apps/client/src/locales/messages.fr.xlf | 770 ++++++++++-------------- apps/client/src/locales/messages.it.xlf | 770 ++++++++++-------------- apps/client/src/locales/messages.ko.xlf | 770 ++++++++++-------------- apps/client/src/locales/messages.nl.xlf | 770 ++++++++++-------------- apps/client/src/locales/messages.pl.xlf | 770 ++++++++++-------------- apps/client/src/locales/messages.pt.xlf | 770 ++++++++++-------------- apps/client/src/locales/messages.tr.xlf | 770 ++++++++++-------------- apps/client/src/locales/messages.uk.xlf | 770 ++++++++++-------------- apps/client/src/locales/messages.xlf | 734 ++++++++++------------ apps/client/src/locales/messages.zh.xlf | 770 ++++++++++-------------- 13 files changed, 4189 insertions(+), 5785 deletions(-) diff --git a/apps/client/src/locales/messages.ca.xlf b/apps/client/src/locales/messages.ca.xlf index 10fa62f11..9a181613d 100644 --- a/apps/client/src/locales/messages.ca.xlf +++ b/apps/client/src/locales/messages.ca.xlf @@ -10,7 +10,7 @@ apps/client/src/app/components/header/header.component.html - 356 + 361 apps/client/src/app/pages/features/features-page.html @@ -34,11 +34,11 @@ Iniciar sessió apps/client/src/app/components/header/header.component.html - 421 + 426 apps/client/src/app/components/header/header.component.ts - 296 + 305 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -403,7 +403,7 @@ Balanç de Caixa apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 142 + 145 @@ -427,7 +427,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 310 + 315 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -467,11 +467,11 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 12 + 23 libs/ui/src/lib/holdings-table/holdings-table.component.html - 23 + 28 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -499,7 +499,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 317 + 322 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -563,7 +563,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 93 + 98 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -643,7 +643,7 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 176 + 187 @@ -695,7 +695,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 449 + 454 @@ -719,7 +719,7 @@ libs/ui/src/lib/i18n.ts - 14 + 16 @@ -871,7 +871,7 @@ Punts de referència apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 125 + 130 @@ -879,7 +879,7 @@ Divises apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 130 + 135 apps/client/src/app/pages/public/public-page.html @@ -891,7 +891,7 @@ ETFs sense País apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 135 + 140 @@ -899,7 +899,7 @@ ETFs sense Sector apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 140 + 145 @@ -907,7 +907,7 @@ Filtra per... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 368 + 374 @@ -927,7 +927,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 45 + 50 @@ -991,7 +991,7 @@ Realment vol eliminar el perfil d’aquest actiu? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 37 + 28 @@ -999,7 +999,7 @@ Realment vol eliminar aquests perfils? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 68 + 59 @@ -1007,7 +1007,7 @@ Oooh! No s’han pogut eliminar els perfils apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 56 + 47 @@ -1018,12 +1018,20 @@ 284 + + Healthcare + Healthcare + + libs/ui/src/lib/i18n.ts + 92 + + The current market price is El preu de mercat actual és apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 743 + 749 @@ -1067,7 +1075,7 @@ País apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 273 + 278 apps/client/src/app/components/admin-users/admin-users.html @@ -1075,7 +1083,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 276 + 281 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -1087,15 +1095,15 @@ Sectors apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 279 + 284 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 398 + 403 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 282 + 287 apps/client/src/app/pages/public/public-page.html @@ -1107,15 +1115,15 @@ Països apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 289 + 294 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 409 + 414 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 294 + 299 @@ -1123,7 +1131,15 @@ Mapatge de Símbols apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 387 + 392 + + + + Technology + Technology + + libs/ui/src/lib/i18n.ts + 96 @@ -1139,7 +1155,7 @@ Configuració del Proveïdor de Dades apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 472 + 477 @@ -1147,7 +1163,7 @@ Prova apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 569 + 574 @@ -1155,11 +1171,11 @@ Url apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 420 + 425 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 551 + 556 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -1175,7 +1191,7 @@ Asset profile has been saved apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 618 + 624 @@ -1183,7 +1199,7 @@ Notes apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 433 + 438 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1210,6 +1226,14 @@ 16 + + Industrials + Industrials + + libs/ui/src/lib/i18n.ts + 93 + + Add Manually Afegir manualment @@ -1238,6 +1262,14 @@ 119 + + Consumer Cyclical + Consumer Cyclical + + libs/ui/src/lib/i18n.ts + 88 + + Do you really want to delete this coupon? Està segur qeu vol eliminar aquest cupó? @@ -1315,7 +1347,7 @@ Recollida de Dades apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 592 + 597 apps/client/src/app/components/admin-overview/admin-overview.html @@ -1395,7 +1427,7 @@ Està segur que vol eliminar aquesta plataforma? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 111 + 115 @@ -1427,7 +1459,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 209 + 212 @@ -1475,7 +1507,7 @@ Està segur que vol eliminar aquesta etiqueta? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 108 + 117 @@ -1499,7 +1531,7 @@ Està segur que vol eliminar aquest usuari? apps/client/src/app/components/admin-users/admin-users.component.ts - 215 + 236 @@ -1515,7 +1547,7 @@ apps/client/src/app/components/header/header.component.html - 231 + 235 @@ -1567,11 +1599,11 @@ Could not validate form apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 594 + 600 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 597 + 603 @@ -1595,15 +1627,15 @@ Portfolio apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 140 + 143 apps/client/src/app/components/header/header.component.html - 44 + 45 apps/client/src/app/components/header/header.component.html - 257 + 261 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -1619,11 +1651,11 @@ Punt de Referència apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 379 + 384 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 152 + 155 @@ -1639,7 +1671,7 @@ Millora la teva Subscripció apps/client/src/app/components/header/header.component.html - 193 + 197 apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html @@ -1667,7 +1699,7 @@ Renova la teva Subscripció apps/client/src/app/components/header/header.component.html - 191 + 195 apps/client/src/app/components/user-account-membership/user-account-membership.html @@ -1683,7 +1715,7 @@ Sobre Ghostfolio apps/client/src/app/components/header/header.component.html - 322 + 327 apps/client/src/app/pages/about/overview/about-overview-page.html @@ -1695,11 +1727,11 @@ Oooh! El testimoni de seguretat és incorrecte. apps/client/src/app/components/header/header.component.ts - 311 + 320 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 152 + 164 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts @@ -1739,7 +1771,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 69 + 74 @@ -1762,14 +1794,6 @@ 92 - - Indonesia - Indonèsia - - libs/ui/src/lib/i18n.ts - 90 - - Activity Activitat @@ -1783,7 +1807,7 @@ Informar d’un Problema amb les Dades apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 452 + 457 @@ -1831,7 +1855,7 @@ Por apps/client/src/app/components/home-market/home-market.component.ts - 41 + 46 apps/client/src/app/components/markets/markets.component.ts @@ -1839,7 +1863,7 @@ libs/ui/src/lib/i18n.ts - 108 + 81 @@ -1847,7 +1871,7 @@ Cobdícia apps/client/src/app/components/home-market/home-market.component.ts - 42 + 47 apps/client/src/app/components/markets/markets.component.ts @@ -1855,7 +1879,7 @@ libs/ui/src/lib/i18n.ts - 109 + 82 @@ -1955,7 +1979,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 201 + 204 @@ -2074,6 +2098,14 @@ 46 + + Energy + Energy + + libs/ui/src/lib/i18n.ts + 90 + + Stay signed in Manteniu la sessió iniciada @@ -2095,7 +2127,7 @@ Les dades del mercat s’han retardat apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts - 94 + 92 @@ -2371,7 +2403,7 @@ YTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 209 + 212 libs/ui/src/lib/assistant/assistant.component.ts @@ -2383,7 +2415,7 @@ 1 any apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 213 + 216 libs/ui/src/lib/assistant/assistant.component.ts @@ -2395,7 +2427,7 @@ 5 anys apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 217 + 220 libs/ui/src/lib/assistant/assistant.component.ts @@ -2415,7 +2447,7 @@ Màx apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 221 + 224 libs/ui/src/lib/assistant/assistant.component.ts @@ -2427,15 +2459,7 @@ Vaja! No s’ha pogut concedir l’accés. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 144 - - - - Argentina - Argentina - - libs/ui/src/lib/i18n.ts - 78 + 151 @@ -2502,6 +2526,14 @@ 174 + + Consumer Defensive + Consumer Defensive + + libs/ui/src/lib/i18n.ts + 89 + + Coupon code has been redeemed El codi del cupó s’ha bescanviat @@ -2595,7 +2627,7 @@ Include in apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 377 + 382 @@ -2606,6 +2638,14 @@ 328 + + Utilities + Utilities + + libs/ui/src/lib/i18n.ts + 97 + + Presenter View Vista del presentador @@ -2651,7 +2691,7 @@ Localització apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 510 + 515 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -2779,7 +2819,7 @@ Aquesta funció no està disponible actualment. apps/client/src/app/core/http-response.interceptor.ts - 55 + 52 @@ -2787,15 +2827,15 @@ Si us plau, torna-ho a provar més tard. apps/client/src/app/core/http-response.interceptor.ts - 57 + 54 apps/client/src/app/core/http-response.interceptor.ts - 88 + 85 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 191 + 192 @@ -2803,7 +2843,7 @@ Aquesta acció no està permesa. apps/client/src/app/core/http-response.interceptor.ts - 67 + 64 @@ -2811,11 +2851,11 @@ Vaja! Alguna cosa va fallar. apps/client/src/app/core/http-response.interceptor.ts - 86 + 83 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 189 + 190 @@ -2827,11 +2867,11 @@ apps/client/src/app/core/http-response.interceptor.ts - 89 + 86 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 192 + 193 @@ -2839,7 +2879,7 @@ Ups! Sembla que esteu fent massa sol·licituds. Si us plau, aneu una mica més lent. apps/client/src/app/core/http-response.interceptor.ts - 106 + 103 @@ -2851,11 +2891,11 @@ apps/client/src/app/components/header/header.component.html - 124 + 125 apps/client/src/app/components/header/header.component.html - 370 + 375 apps/client/src/app/pages/about/overview/about-overview-page.routes.ts @@ -2959,15 +2999,15 @@ apps/client/src/app/components/header/header.component.html - 58 + 59 apps/client/src/app/components/header/header.component.html - 267 + 271 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 378 + 383 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2991,7 +3031,7 @@ Vaja, la transferència del saldo en efectiu ha fallat. apps/client/src/app/pages/accounts/accounts-page.component.ts - 341 + 337 @@ -3047,11 +3087,11 @@ Control d’administració apps/client/src/app/components/header/header.component.html - 74 + 75 apps/client/src/app/components/header/header.component.html - 287 + 291 libs/common/src/lib/routes/routes.ts @@ -3071,7 +3111,7 @@ Dades de mercat apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 400 + 405 libs/common/src/lib/routes/routes.ts @@ -3123,7 +3163,7 @@ apps/client/src/app/components/header/header.component.html - 247 + 251 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -3263,11 +3303,11 @@ Could not parse scraper configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 545 + 551 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 548 + 554 @@ -3468,7 +3508,7 @@ Comença apps/client/src/app/components/header/header.component.html - 432 + 437 apps/client/src/app/pages/features/features-page.html @@ -3540,7 +3580,7 @@ Mercats apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 381 + 386 apps/client/src/app/components/footer/footer.component.html @@ -3548,7 +3588,7 @@ apps/client/src/app/components/header/header.component.html - 403 + 408 apps/client/src/app/components/home-market/home-market.html @@ -3719,6 +3759,14 @@ 149 + + Basic Materials + Basic Materials + + libs/ui/src/lib/i18n.ts + 86 + + Use Ghostfolio anonymously and own your financial data. Utilitza Ghostfolio de manera anònima i sigues propietari de les teves dades financeres. @@ -4072,7 +4120,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 342 + 347 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -4176,7 +4224,7 @@ Activitats d’importació apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 93 + 94 libs/ui/src/lib/activities-table/activities-table.component.html @@ -4192,7 +4240,7 @@ Importar dividends apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 132 + 133 libs/ui/src/lib/activities-table/activities-table.component.html @@ -4208,7 +4256,7 @@ S’estan important dades... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 171 + 172 @@ -4216,7 +4264,7 @@ La importació s’ha completat apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 181 + 182 @@ -4232,7 +4280,7 @@ S’estan validant les dades... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 291 + 293 @@ -4416,7 +4464,7 @@ libs/ui/src/lib/i18n.ts - 16 + 18 @@ -4548,11 +4596,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 78 libs/ui/src/lib/i18n.ts - 37 + 39 @@ -4568,11 +4616,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 80 + 82 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 96 + 98 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -4592,7 +4640,7 @@ Mensualment apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 92 @@ -4600,7 +4648,7 @@ Anualment apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 93 @@ -4608,7 +4656,7 @@ Close Holding apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 442 + 447 @@ -4656,7 +4704,7 @@ A baix apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 352 + 354 @@ -4664,7 +4712,7 @@ Evolució de la cartera apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 405 + 409 @@ -4672,7 +4720,7 @@ Cronologia de la inversió apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 434 + 438 @@ -4680,7 +4728,7 @@ Ratxa actual apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 455 + 459 @@ -4688,7 +4736,7 @@ Ratxa més llarga apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 464 + 468 @@ -4696,7 +4744,7 @@ Cronologia de dividends apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 493 + 497 @@ -4724,15 +4772,15 @@ apps/client/src/app/components/header/header.component.html - 105 + 106 apps/client/src/app/components/header/header.component.html - 309 + 314 apps/client/src/app/components/header/header.component.html - 384 + 389 apps/client/src/app/pages/pricing/pricing-page.routes.ts @@ -4904,11 +4952,11 @@ Could not save asset profile apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 628 + 634 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 631 + 637 @@ -5055,10 +5103,6 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts 58 - - libs/ui/src/lib/i18n.ts - 99 - Global @@ -5069,7 +5113,7 @@ libs/ui/src/lib/i18n.ts - 17 + 19 @@ -5313,11 +5357,11 @@ apps/client/src/app/components/header/header.component.html - 88 + 89 apps/client/src/app/components/header/header.component.html - 297 + 301 apps/client/src/app/pages/resources/overview/resources-overview.component.html @@ -5365,7 +5409,7 @@ El meu Ghostfolio apps/client/src/app/components/header/header.component.html - 276 + 280 apps/client/src/app/pages/user-account/user-account-page.routes.ts @@ -5489,7 +5533,7 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 201 + 204 libs/ui/src/lib/assistant/assistant.component.ts @@ -5509,7 +5553,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 205 + 208 libs/ui/src/lib/assistant/assistant.component.ts @@ -5529,7 +5573,7 @@ any apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 213 + 216 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -5549,7 +5593,7 @@ anys apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 217 + 220 libs/ui/src/lib/assistant/assistant.component.ts @@ -5597,7 +5641,7 @@ Tendència de 50 dies libs/ui/src/lib/benchmark/benchmark.component.html - 32 + 43 @@ -5605,7 +5649,7 @@ Tendència de 200 dies libs/ui/src/lib/benchmark/benchmark.component.html - 61 + 72 @@ -5621,7 +5665,7 @@ Darrer tot el temps libs/ui/src/lib/benchmark/benchmark.component.html - 90 + 101 @@ -5629,7 +5673,7 @@ Canvi des del màxim històric libs/ui/src/lib/benchmark/benchmark.component.html - 117 + 128 @@ -5645,7 +5689,7 @@ de l’ATH libs/ui/src/lib/benchmark/benchmark.component.html - 119 + 130 @@ -5653,7 +5697,7 @@ Loan libs/ui/src/lib/i18n.ts - 58 + 60 @@ -5729,7 +5773,7 @@ libs/ui/src/lib/i18n.ts - 39 + 41 @@ -5749,7 +5793,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 117 + 122 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5765,7 +5809,7 @@ Mostra-ho tot libs/ui/src/lib/holdings-table/holdings-table.component.html - 212 + 217 @@ -5781,7 +5825,7 @@ libs/ui/src/lib/i18n.ts - 4 + 6 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html @@ -5793,7 +5837,7 @@ Àsia-Pacífic libs/ui/src/lib/i18n.ts - 5 + 7 @@ -5809,7 +5853,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 327 + 332 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -5821,11 +5865,11 @@ libs/ui/src/lib/i18n.ts - 6 + 8 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html - 64 + 65 @@ -5841,7 +5885,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 343 + 348 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -5853,7 +5897,7 @@ libs/ui/src/lib/i18n.ts - 7 + 9 @@ -5861,7 +5905,7 @@ Comprar i vendre libs/ui/src/lib/i18n.ts - 8 + 10 @@ -5869,7 +5913,7 @@ Bàsic libs/ui/src/lib/i18n.ts - 10 + 12 @@ -5877,7 +5921,7 @@ Canvia fàcilment a Ghostfolio Premium o Ghostfolio Open Source libs/ui/src/lib/i18n.ts - 12 + 14 @@ -5885,7 +5929,7 @@ Canvia fàcilment a Ghostfolio Premium libs/ui/src/lib/i18n.ts - 13 + 15 @@ -5901,7 +5945,7 @@ libs/ui/src/lib/i18n.ts - 15 + 17 @@ -5909,7 +5953,7 @@ Subvenció libs/ui/src/lib/i18n.ts - 18 + 20 @@ -5917,7 +5961,7 @@ Risc Alt libs/ui/src/lib/i18n.ts - 19 + 21 @@ -5925,15 +5969,7 @@ Aquesta activitat ja existeix. libs/ui/src/lib/i18n.ts - 20 - - - - Japan - Japó - - libs/ui/src/lib/i18n.ts - 92 + 22 @@ -5941,7 +5977,7 @@ Risc Baix libs/ui/src/lib/i18n.ts - 21 + 23 @@ -5949,7 +5985,7 @@ Mes libs/ui/src/lib/i18n.ts - 22 + 24 @@ -5957,7 +5993,7 @@ Mesos libs/ui/src/lib/i18n.ts - 23 + 25 @@ -5965,11 +6001,15 @@ Altres libs/ui/src/lib/i18n.ts - 24 + 26 + + + libs/ui/src/lib/i18n.ts + 94 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 451 + 449 @@ -5977,7 +6017,7 @@ Predefinit libs/ui/src/lib/i18n.ts - 26 + 28 @@ -5985,7 +6025,7 @@ No Activities apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 145 + 150 @@ -5993,7 +6033,7 @@ Provisió de jubilació libs/ui/src/lib/i18n.ts - 27 + 29 @@ -6009,7 +6049,7 @@ Satèl·lit libs/ui/src/lib/i18n.ts - 28 + 30 @@ -6033,11 +6073,11 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 314 + 319 libs/ui/src/lib/i18n.ts - 29 + 31 @@ -6045,11 +6085,11 @@ Etiqueta libs/ui/src/lib/i18n.ts - 30 + 32 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html - 53 + 54 @@ -6057,7 +6097,7 @@ Any libs/ui/src/lib/i18n.ts - 31 + 33 @@ -6077,7 +6117,7 @@ Anys libs/ui/src/lib/i18n.ts - 32 + 34 @@ -6097,7 +6137,7 @@ libs/ui/src/lib/i18n.ts - 36 + 38 @@ -6113,7 +6153,7 @@ libs/ui/src/lib/i18n.ts - 38 + 40 @@ -6121,7 +6161,7 @@ Valuós libs/ui/src/lib/i18n.ts - 42 + 44 @@ -6129,7 +6169,7 @@ Passiu libs/ui/src/lib/i18n.ts - 40 + 42 @@ -6141,7 +6181,7 @@ libs/ui/src/lib/i18n.ts - 41 + 43 @@ -6153,7 +6193,7 @@ libs/ui/src/lib/i18n.ts - 54 + 56 @@ -6161,7 +6201,7 @@ Mercaderia libs/ui/src/lib/i18n.ts - 46 + 48 @@ -6173,7 +6213,7 @@ libs/ui/src/lib/i18n.ts - 47 + 49 @@ -6181,7 +6221,7 @@ Ingressos Fixos libs/ui/src/lib/i18n.ts - 48 + 50 @@ -6189,7 +6229,7 @@ Liquiditat libs/ui/src/lib/i18n.ts - 49 + 51 @@ -6197,7 +6237,11 @@ Immobiliari libs/ui/src/lib/i18n.ts - 50 + 52 + + + libs/ui/src/lib/i18n.ts + 95 @@ -6213,7 +6257,7 @@ Bona libs/ui/src/lib/i18n.ts - 53 + 55 @@ -6221,7 +6265,7 @@ Criptomoneda libs/ui/src/lib/i18n.ts - 56 + 58 @@ -6229,7 +6273,7 @@ ETF libs/ui/src/lib/i18n.ts - 57 + 59 @@ -6237,7 +6281,7 @@ Fons d’inversió libs/ui/src/lib/i18n.ts - 59 + 61 @@ -6245,7 +6289,7 @@ Metall preciós libs/ui/src/lib/i18n.ts - 60 + 62 @@ -6253,7 +6297,7 @@ Capital privat libs/ui/src/lib/i18n.ts - 61 + 63 @@ -6261,7 +6305,7 @@ Acció libs/ui/src/lib/i18n.ts - 62 + 64 @@ -6269,7 +6313,7 @@ Àfrica libs/ui/src/lib/i18n.ts - 69 + 71 @@ -6277,7 +6321,15 @@ Àsia libs/ui/src/lib/i18n.ts - 70 + 72 + + + + Communication Services + Communication Services + + libs/ui/src/lib/i18n.ts + 87 @@ -6285,7 +6337,7 @@ Europa libs/ui/src/lib/i18n.ts - 71 + 73 @@ -6293,7 +6345,7 @@ Amèrica del Nord libs/ui/src/lib/i18n.ts - 72 + 74 @@ -6309,7 +6361,7 @@ Oceania libs/ui/src/lib/i18n.ts - 73 + 75 @@ -6317,7 +6369,7 @@ Amèrica del Sud libs/ui/src/lib/i18n.ts - 74 + 76 @@ -6325,7 +6377,7 @@ Por extrema libs/ui/src/lib/i18n.ts - 106 + 79 @@ -6333,7 +6385,7 @@ Avarícia extrema libs/ui/src/lib/i18n.ts - 107 + 80 @@ -6341,7 +6393,7 @@ Neutral libs/ui/src/lib/i18n.ts - 110 + 83 @@ -6377,15 +6429,15 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 209 + 220 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 453 + 451 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 467 + 465 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -6572,38 +6624,6 @@ 100 - - Australia - Australia - - libs/ui/src/lib/i18n.ts - 79 - - - - Austria - Austria - - libs/ui/src/lib/i18n.ts - 80 - - - - Belgium - Belgium - - libs/ui/src/lib/i18n.ts - 81 - - - - Bulgaria - Bulgaria - - libs/ui/src/lib/i18n.ts - 83 - - View Holding View Holding @@ -6612,124 +6632,12 @@ 474 - - Canada - Canada - - libs/ui/src/lib/i18n.ts - 84 - - - - Czech Republic - Czech Republic - - libs/ui/src/lib/i18n.ts - 85 - - - - Finland - Finland - - libs/ui/src/lib/i18n.ts - 86 - - - - France - France - - libs/ui/src/lib/i18n.ts - 87 - - - - Germany - Germany - - libs/ui/src/lib/i18n.ts - 88 - - - - India - India - - libs/ui/src/lib/i18n.ts - 89 - - - - Italy - Italy - - libs/ui/src/lib/i18n.ts - 91 - - - - Netherlands - Netherlands - - libs/ui/src/lib/i18n.ts - 93 - - - - New Zealand - New Zealand - - libs/ui/src/lib/i18n.ts - 94 - - - - Poland - Poland - - libs/ui/src/lib/i18n.ts - 95 - - - - Romania - Romania - - libs/ui/src/lib/i18n.ts - 96 - - - - South Africa - South Africa - - libs/ui/src/lib/i18n.ts - 98 - - - - Thailand - Thailand - - libs/ui/src/lib/i18n.ts - 100 - - - - United States - United States - - libs/ui/src/lib/i18n.ts - 103 - - Error Error apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 734 + 740 @@ -6753,7 +6661,7 @@ 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 - 181 + 194 @@ -6781,7 +6689,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 597 + 602 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6825,7 +6733,7 @@ libs/ui/src/lib/i18n.ts - 9 + 11 @@ -6833,7 +6741,7 @@ Close apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 599 + 604 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6873,7 +6781,7 @@ libs/ui/src/lib/i18n.ts - 11 + 13 @@ -6889,7 +6797,7 @@ Yes libs/ui/src/lib/i18n.ts - 33 + 35 @@ -7040,6 +6948,14 @@ 174 + + Financial Services + Financial Services + + libs/ui/src/lib/i18n.ts + 91 + + 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 @@ -7157,15 +7073,7 @@ Get access to 80’000+ tickers from over 50 exchanges libs/ui/src/lib/i18n.ts - 25 - - - - Ukraine - Ukraine - - libs/ui/src/lib/i18n.ts - 101 + 27 @@ -7371,7 +7279,7 @@ Save apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 608 + 613 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7419,11 +7327,11 @@ Me apps/client/src/app/components/header/header.component.html - 213 + 217 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 250 + 254 @@ -7463,7 +7371,7 @@ AI prompt has been copied to the clipboard apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 211 @@ -7479,7 +7387,7 @@ Lazy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 235 + 239 @@ -7487,7 +7395,7 @@ Instant apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 239 + 243 @@ -7495,7 +7403,7 @@ Default Market Price apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 482 + 487 @@ -7503,7 +7411,7 @@ Mode apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 519 + 524 @@ -7511,7 +7419,7 @@ Selector apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 535 + 540 @@ -7519,7 +7427,7 @@ HTTP Request Headers apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 495 + 500 @@ -7527,7 +7435,7 @@ end of day apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 235 + 239 @@ -7535,7 +7443,7 @@ real-time apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 239 + 243 @@ -7543,7 +7451,7 @@ Open Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 212 @@ -7559,7 +7467,7 @@ Change libs/ui/src/lib/holdings-table/holdings-table.component.html - 138 + 143 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7575,11 +7483,11 @@ apps/client/src/app/components/home-overview/home-overview.component.ts - 52 + 53 libs/ui/src/lib/holdings-table/holdings-table.component.html - 161 + 166 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7622,30 +7530,6 @@ 94 - - Armenia - Armenia - - libs/ui/src/lib/i18n.ts - 77 - - - - British Virgin Islands - British Virgin Islands - - libs/ui/src/lib/i18n.ts - 82 - - - - Singapore - Singapore - - libs/ui/src/lib/i18n.ts - 97 - - Terms and Conditions Terms and Conditions @@ -7691,11 +7575,11 @@ Security token apps/client/src/app/components/admin-users/admin-users.component.ts - 235 + 256 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 167 + 179 @@ -7703,7 +7587,7 @@ Do you really want to generate a new security token for this user? apps/client/src/app/components/admin-users/admin-users.component.ts - 240 + 261 @@ -7714,14 +7598,6 @@ 239 - - United Kingdom - United Kingdom - - libs/ui/src/lib/i18n.ts - 102 - - Terms of Service Terms of Service @@ -7768,7 +7644,7 @@ () is already in use. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 675 + 681 @@ -7776,7 +7652,7 @@ An error occurred while updating to (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 683 + 689 @@ -7840,7 +7716,7 @@ someone apps/client/src/app/pages/public/public-page.component.ts - 62 + 63 @@ -7872,7 +7748,7 @@ Do you really want to delete this item? libs/ui/src/lib/benchmark/benchmark.component.ts - 137 + 141 @@ -7880,7 +7756,7 @@ Log out apps/client/src/app/components/header/header.component.html - 325 + 330 @@ -8127,7 +8003,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 205 + 208 @@ -8292,7 +8168,7 @@ Do you really want to generate a new security token? apps/client/src/app/components/user-account-access/user-account-access.component.ts - 172 + 184 @@ -8348,7 +8224,7 @@ Manage Asset Profile apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 467 + 472 @@ -8356,7 +8232,7 @@ Alternative Investment libs/ui/src/lib/i18n.ts - 45 + 47 @@ -8364,7 +8240,7 @@ Collectible libs/ui/src/lib/i18n.ts - 55 + 57 @@ -8372,7 +8248,7 @@ Average Unit Price apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 113 + 117 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf index bfff88889..504dc107a 100644 --- a/apps/client/src/locales/messages.de.xlf +++ b/apps/client/src/locales/messages.de.xlf @@ -110,7 +110,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 310 + 315 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -150,11 +150,11 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 12 + 23 libs/ui/src/lib/holdings-table/holdings-table.component.html - 23 + 28 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -214,7 +214,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 93 + 98 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -294,7 +294,7 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 176 + 187 @@ -334,7 +334,7 @@ libs/ui/src/lib/i18n.ts - 14 + 16 @@ -402,7 +402,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 449 + 454 @@ -498,7 +498,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 45 + 50 @@ -646,7 +646,7 @@ Möchtest du diesen Benutzer wirklich löschen? apps/client/src/app/components/admin-users/admin-users.component.ts - 215 + 236 @@ -662,7 +662,7 @@ apps/client/src/app/components/header/header.component.html - 231 + 235 @@ -706,7 +706,7 @@ Über Ghostfolio apps/client/src/app/components/header/header.component.html - 322 + 327 apps/client/src/app/pages/about/overview/about-overview-page.html @@ -718,7 +718,7 @@ Registrieren apps/client/src/app/components/header/header.component.html - 432 + 437 apps/client/src/app/pages/features/features-page.html @@ -750,11 +750,11 @@ Einloggen apps/client/src/app/components/header/header.component.html - 421 + 426 apps/client/src/app/components/header/header.component.ts - 296 + 305 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -774,11 +774,11 @@ Ups! Falsches Sicherheits-Token. apps/client/src/app/components/header/header.component.ts - 311 + 320 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 152 + 164 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts @@ -885,6 +885,14 @@ 46 + + Energy + Energy + + libs/ui/src/lib/i18n.ts + 90 + + Stay signed in Eingeloggt bleiben @@ -978,15 +986,15 @@ Sektoren apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 279 + 284 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 398 + 403 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 282 + 287 apps/client/src/app/pages/public/public-page.html @@ -998,15 +1006,15 @@ Länder apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 289 + 294 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 409 + 414 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 294 + 299 @@ -1030,7 +1038,7 @@ Datenfehler melden apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 452 + 457 @@ -1042,7 +1050,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 117 + 122 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -1058,7 +1066,7 @@ Alle anzeigen libs/ui/src/lib/holdings-table/holdings-table.component.html - 212 + 217 @@ -1078,7 +1086,7 @@ YTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 209 + 212 libs/ui/src/lib/assistant/assistant.component.ts @@ -1090,7 +1098,7 @@ 1J apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 213 + 216 libs/ui/src/lib/assistant/assistant.component.ts @@ -1102,7 +1110,7 @@ 5J apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 217 + 220 libs/ui/src/lib/assistant/assistant.component.ts @@ -1122,7 +1130,7 @@ Max apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 221 + 224 libs/ui/src/lib/assistant/assistant.component.ts @@ -1138,11 +1146,11 @@ apps/client/src/app/core/http-response.interceptor.ts - 89 + 86 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 192 + 193 @@ -1154,11 +1162,11 @@ apps/client/src/app/components/header/header.component.html - 124 + 125 apps/client/src/app/components/header/header.component.html - 370 + 375 apps/client/src/app/pages/about/overview/about-overview-page.routes.ts @@ -1190,7 +1198,7 @@ Mein Ghostfolio apps/client/src/app/components/header/header.component.html - 276 + 280 apps/client/src/app/pages/user-account/user-account-page.routes.ts @@ -1213,6 +1221,14 @@ 174 + + Consumer Defensive + Consumer Defensive + + libs/ui/src/lib/i18n.ts + 89 + + Coupon code has been redeemed Gutscheincode wurde eingelöst @@ -1273,6 +1289,14 @@ 67 + + Utilities + Utilities + + libs/ui/src/lib/i18n.ts + 97 + + Presenter View Präsentationsansicht @@ -1294,7 +1318,7 @@ Lokalität apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 510 + 515 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -1382,15 +1406,15 @@ apps/client/src/app/components/header/header.component.html - 58 + 59 apps/client/src/app/components/header/header.component.html - 267 + 271 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 378 + 383 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -1434,7 +1458,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 317 + 322 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -1502,11 +1526,11 @@ Administration apps/client/src/app/components/header/header.component.html - 74 + 75 apps/client/src/app/components/header/header.component.html - 287 + 291 libs/common/src/lib/routes/routes.ts @@ -1670,7 +1694,7 @@ apps/client/src/app/components/header/header.component.html - 356 + 361 apps/client/src/app/pages/features/features-page.html @@ -1698,7 +1722,7 @@ apps/client/src/app/components/header/header.component.html - 247 + 251 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1726,7 +1750,7 @@ Märkte apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 381 + 386 apps/client/src/app/components/footer/footer.component.html @@ -1734,7 +1758,7 @@ apps/client/src/app/components/header/header.component.html - 403 + 408 apps/client/src/app/components/home-market/home-market.html @@ -1870,7 +1894,7 @@ Zeitstrahl der Investitionen apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 434 + 438 @@ -1886,7 +1910,7 @@ Verlierer apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 352 + 354 @@ -1946,7 +1970,7 @@ Aktuelle Woche apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 201 + 204 @@ -1970,7 +1994,7 @@ libs/ui/src/lib/i18n.ts - 41 + 43 @@ -1993,6 +2017,14 @@ 119 + + Consumer Cyclical + Consumer Cyclical + + libs/ui/src/lib/i18n.ts + 88 + + Quantity Anzahl @@ -2010,7 +2042,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 69 + 74 @@ -2030,7 +2062,7 @@ Kommentar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 433 + 438 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -2074,7 +2106,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 342 + 347 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2098,7 +2130,7 @@ Daten importieren... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 171 + 172 @@ -2106,7 +2138,7 @@ Der Import wurde abgeschlossen apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 181 + 182 @@ -2126,15 +2158,15 @@ apps/client/src/app/components/header/header.component.html - 105 + 106 apps/client/src/app/components/header/header.component.html - 309 + 314 apps/client/src/app/components/header/header.component.html - 384 + 389 apps/client/src/app/pages/pricing/pricing-page.routes.ts @@ -2154,15 +2186,15 @@ Portfolio apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 140 + 143 apps/client/src/app/components/header/header.component.html - 44 + 45 apps/client/src/app/components/header/header.component.html - 257 + 261 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -2238,11 +2270,11 @@ apps/client/src/app/components/header/header.component.html - 88 + 89 apps/client/src/app/components/header/header.component.html - 297 + 301 apps/client/src/app/pages/resources/overview/resources-overview.component.html @@ -2290,7 +2322,7 @@ Aktivitäten importieren apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 93 + 94 libs/ui/src/lib/activities-table/activities-table.component.html @@ -2354,7 +2386,7 @@ Änderung vom Allzeithoch libs/ui/src/lib/benchmark/benchmark.component.html - 117 + 128 @@ -2370,7 +2402,7 @@ vom AZH libs/ui/src/lib/benchmark/benchmark.component.html - 119 + 130 @@ -2402,7 +2434,7 @@ Diese Funktion ist derzeit nicht verfügbar. apps/client/src/app/core/http-response.interceptor.ts - 55 + 52 @@ -2410,15 +2442,15 @@ Bitte versuche es später noch einmal. apps/client/src/app/core/http-response.interceptor.ts - 57 + 54 apps/client/src/app/core/http-response.interceptor.ts - 88 + 85 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 191 + 192 @@ -2426,11 +2458,11 @@ Ups! Es ist etwas schief gelaufen. apps/client/src/app/core/http-response.interceptor.ts - 86 + 83 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 189 + 190 @@ -2466,7 +2498,7 @@ Land apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 273 + 278 apps/client/src/app/components/admin-users/admin-users.html @@ -2474,7 +2506,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 276 + 281 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2490,7 +2522,7 @@ libs/ui/src/lib/i18n.ts - 16 + 18 @@ -2550,7 +2582,7 @@ Monatlich apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 92 @@ -2586,7 +2618,7 @@ libs/ui/src/lib/i18n.ts - 39 + 41 @@ -2618,7 +2650,7 @@ Angst apps/client/src/app/components/home-market/home-market.component.ts - 41 + 46 apps/client/src/app/components/markets/markets.component.ts @@ -2626,7 +2658,7 @@ libs/ui/src/lib/i18n.ts - 108 + 81 @@ -2634,7 +2666,7 @@ Gier apps/client/src/app/components/home-market/home-market.component.ts - 42 + 47 apps/client/src/app/components/markets/markets.component.ts @@ -2642,7 +2674,7 @@ libs/ui/src/lib/i18n.ts - 109 + 82 @@ -2650,7 +2682,7 @@ Filtern nach... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 368 + 374 @@ -2686,11 +2718,11 @@ Das Formular konnte nicht validiert werden apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 594 + 600 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 597 + 603 @@ -2706,11 +2738,11 @@ Benchmark apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 379 + 384 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 152 + 155 @@ -2778,7 +2810,7 @@ Portfolio Wertentwicklung apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 405 + 409 @@ -2810,7 +2842,7 @@ libs/ui/src/lib/i18n.ts - 4 + 6 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html @@ -2830,7 +2862,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 327 + 332 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2842,11 +2874,11 @@ libs/ui/src/lib/i18n.ts - 6 + 8 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html - 64 + 65 @@ -2870,11 +2902,11 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 314 + 319 libs/ui/src/lib/i18n.ts - 29 + 31 @@ -2882,11 +2914,11 @@ Tag libs/ui/src/lib/i18n.ts - 30 + 32 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html - 53 + 54 @@ -2898,7 +2930,7 @@ libs/ui/src/lib/i18n.ts - 54 + 56 @@ -2906,7 +2938,7 @@ Rohstoff libs/ui/src/lib/i18n.ts - 46 + 48 @@ -2918,7 +2950,7 @@ libs/ui/src/lib/i18n.ts - 47 + 49 @@ -2926,7 +2958,7 @@ Feste Einkünfte libs/ui/src/lib/i18n.ts - 48 + 50 @@ -2934,7 +2966,11 @@ Immobilien libs/ui/src/lib/i18n.ts - 50 + 52 + + + libs/ui/src/lib/i18n.ts + 95 @@ -2950,7 +2986,7 @@ Anleihe libs/ui/src/lib/i18n.ts - 53 + 55 @@ -2958,7 +2994,7 @@ Kryptowährung libs/ui/src/lib/i18n.ts - 56 + 58 @@ -2966,7 +3002,7 @@ ETF libs/ui/src/lib/i18n.ts - 57 + 59 @@ -2974,7 +3010,7 @@ Investmentfonds libs/ui/src/lib/i18n.ts - 59 + 61 @@ -2982,7 +3018,7 @@ Edelmetall libs/ui/src/lib/i18n.ts - 60 + 62 @@ -2990,7 +3026,7 @@ Privates Beteiligungskapital libs/ui/src/lib/i18n.ts - 61 + 63 @@ -2998,7 +3034,7 @@ Aktie libs/ui/src/lib/i18n.ts - 62 + 64 @@ -3014,7 +3050,7 @@ libs/ui/src/lib/i18n.ts - 15 + 17 @@ -3022,11 +3058,15 @@ Andere libs/ui/src/lib/i18n.ts - 24 + 26 + + + libs/ui/src/lib/i18n.ts + 94 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 451 + 449 @@ -3042,15 +3082,15 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 209 + 220 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 453 + 451 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 467 + 465 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -3062,7 +3102,7 @@ Nordamerika libs/ui/src/lib/i18n.ts - 72 + 74 @@ -3070,7 +3110,7 @@ Afrika libs/ui/src/lib/i18n.ts - 69 + 71 @@ -3078,7 +3118,15 @@ Asien libs/ui/src/lib/i18n.ts - 70 + 72 + + + + Communication Services + Communication Services + + libs/ui/src/lib/i18n.ts + 87 @@ -3086,7 +3134,7 @@ Europa libs/ui/src/lib/i18n.ts - 71 + 73 @@ -3102,7 +3150,7 @@ Ozeanien libs/ui/src/lib/i18n.ts - 73 + 75 @@ -3110,7 +3158,7 @@ Südamerika libs/ui/src/lib/i18n.ts - 74 + 76 @@ -3154,7 +3202,7 @@ Symbol Zuordnung apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 387 + 392 @@ -3162,7 +3210,7 @@ Zeitstrahl der Dividenden apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 493 + 497 @@ -3198,11 +3246,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 78 libs/ui/src/lib/i18n.ts - 37 + 39 @@ -3218,7 +3266,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 343 + 348 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -3230,7 +3278,7 @@ libs/ui/src/lib/i18n.ts - 7 + 9 @@ -3246,7 +3294,7 @@ Daten validieren... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 291 + 293 @@ -3270,7 +3318,7 @@ Marktdaten apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 400 + 405 libs/common/src/lib/routes/routes.ts @@ -3326,7 +3374,7 @@ Jährlich apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 93 @@ -3334,7 +3382,7 @@ Dividenden importieren apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 132 + 133 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3362,7 +3410,7 @@ Kern libs/ui/src/lib/i18n.ts - 10 + 12 @@ -3370,7 +3418,7 @@ Zuwendung libs/ui/src/lib/i18n.ts - 18 + 20 @@ -3378,7 +3426,7 @@ Höheres Risiko libs/ui/src/lib/i18n.ts - 19 + 21 @@ -3386,7 +3434,7 @@ Geringeres Risiko libs/ui/src/lib/i18n.ts - 21 + 23 @@ -3394,7 +3442,7 @@ Keine Aktivitäten apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 145 + 150 @@ -3402,7 +3450,7 @@ Altersvorsorge libs/ui/src/lib/i18n.ts - 27 + 29 @@ -3418,7 +3466,7 @@ Satellit libs/ui/src/lib/i18n.ts - 28 + 30 @@ -3542,7 +3590,7 @@ Mitgliedschaft abschliessen apps/client/src/app/components/header/header.component.html - 193 + 197 apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html @@ -3670,11 +3718,11 @@ Das Anlageprofil konnte nicht gespeichert werden apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 628 + 634 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 631 + 637 @@ -3742,7 +3790,7 @@ Einfacher Wechsel zu Ghostfolio Premium libs/ui/src/lib/i18n.ts - 13 + 15 @@ -3766,7 +3814,7 @@ Einfacher Wechsel zu Ghostfolio Premium oder Ghostfolio Open Source libs/ui/src/lib/i18n.ts - 12 + 14 @@ -3774,7 +3822,7 @@ Darlehen libs/ui/src/lib/i18n.ts - 58 + 60 @@ -3826,7 +3874,7 @@ Mitgliedschaft erneuern apps/client/src/app/components/header/header.component.html - 191 + 195 apps/client/src/app/components/user-account-membership/user-account-membership.html @@ -3906,7 +3954,7 @@ Aktuelles Jahr apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 209 + 212 @@ -3922,11 +3970,11 @@ Url apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 420 + 425 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 551 + 556 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -3942,7 +3990,7 @@ Das Anlageprofil wurde gespeichert apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 618 + 624 @@ -3950,7 +3998,7 @@ Möchtest du diese Plattform wirklich löschen? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 111 + 115 @@ -4022,7 +4070,7 @@ Diese Aktivität existiert bereits. libs/ui/src/lib/i18n.ts - 20 + 22 @@ -4086,7 +4134,7 @@ Aktueller Streak apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 455 + 459 @@ -4094,7 +4142,7 @@ Längster Streak apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 464 + 468 @@ -4102,7 +4150,7 @@ Monate libs/ui/src/lib/i18n.ts - 23 + 25 @@ -4110,7 +4158,7 @@ Jahre libs/ui/src/lib/i18n.ts - 32 + 34 @@ -4118,7 +4166,7 @@ Monat libs/ui/src/lib/i18n.ts - 22 + 24 @@ -4126,7 +4174,7 @@ Jahr libs/ui/src/lib/i18n.ts - 31 + 33 @@ -4286,7 +4334,15 @@ Verbindlichkeit libs/ui/src/lib/i18n.ts - 40 + 42 + + + + Technology + Technology + + libs/ui/src/lib/i18n.ts + 96 @@ -4302,7 +4358,7 @@ Scraper Konfiguration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 472 + 477 @@ -4530,7 +4586,7 @@ libs/ui/src/lib/i18n.ts - 36 + 38 @@ -4538,7 +4594,7 @@ Wertsache libs/ui/src/lib/i18n.ts - 42 + 44 @@ -4546,7 +4602,7 @@ ETFs ohne Länder apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 135 + 140 @@ -4554,7 +4610,7 @@ ETFs ohne Sektoren apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 140 + 145 @@ -4570,7 +4626,7 @@ Filtervorlage libs/ui/src/lib/i18n.ts - 26 + 28 @@ -4586,15 +4642,7 @@ Asien-Pazifik libs/ui/src/lib/i18n.ts - 5 - - - - Japan - Japan - - libs/ui/src/lib/i18n.ts - 92 + 7 @@ -4790,7 +4838,7 @@ Währungen apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 130 + 135 apps/client/src/app/pages/public/public-page.html @@ -4842,11 +4890,11 @@ Die Scraper Konfiguration konnte nicht geparsed werden apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 545 + 551 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 548 + 554 @@ -4937,6 +4985,14 @@ 149 + + Basic Materials + Basic Materials + + libs/ui/src/lib/i18n.ts + 86 + + Use Ghostfolio anonymously and own your financial data. Nutze Ghostfolio ganz anonym und behalte deine Finanzdaten. @@ -5402,10 +5458,6 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts 58 - - libs/ui/src/lib/i18n.ts - 99 - Global @@ -5416,7 +5468,7 @@ libs/ui/src/lib/i18n.ts - 17 + 19 @@ -5516,7 +5568,7 @@ libs/ui/src/lib/i18n.ts - 38 + 40 @@ -5540,7 +5592,7 @@ Möchtest du diesen Tag wirklich löschen? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 108 + 117 @@ -5648,7 +5700,7 @@ Möchtest du dieses Anlageprofil wirklich löschen? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 37 + 28 @@ -5659,6 +5711,14 @@ 16 + + Industrials + Industrials + + libs/ui/src/lib/i18n.ts + 93 + + Add Manually Manuell hinzufügen @@ -5688,7 +5748,7 @@ Letztes Allzeithoch libs/ui/src/lib/benchmark/benchmark.component.html - 90 + 101 @@ -5732,7 +5792,7 @@ Ups, der Cash-Bestand Transfer ist fehlgeschlagen. apps/client/src/app/pages/accounts/accounts-page.component.ts - 341 + 337 @@ -5740,7 +5800,7 @@ Extreme Angst libs/ui/src/lib/i18n.ts - 106 + 79 @@ -5748,7 +5808,7 @@ Extreme Gier libs/ui/src/lib/i18n.ts - 107 + 80 @@ -5756,7 +5816,7 @@ Neutral libs/ui/src/lib/i18n.ts - 110 + 83 @@ -5767,6 +5827,14 @@ 284 + + Healthcare + Healthcare + + libs/ui/src/lib/i18n.ts + 92 + + Do you really want to delete this system message? Möchtest du diese Systemmeldung wirklich löschen? @@ -5780,7 +5848,7 @@ 50 Tage Trend libs/ui/src/lib/benchmark/benchmark.component.html - 32 + 43 @@ -5788,7 +5856,7 @@ 200 Tage Trend libs/ui/src/lib/benchmark/benchmark.component.html - 61 + 72 @@ -5796,7 +5864,7 @@ Cash-Bestände apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 142 + 145 @@ -5832,7 +5900,7 @@ Der aktuelle Marktpreis ist apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 743 + 749 @@ -5840,7 +5908,7 @@ Test apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 569 + 574 @@ -5880,15 +5948,7 @@ Ups! Der Zugang konnte nicht gewährt werden. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 144 - - - - Argentina - Argentinien - - libs/ui/src/lib/i18n.ts - 78 + 151 @@ -5912,7 +5972,7 @@ Die Marktdaten sind verzögert für apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts - 94 + 92 @@ -5928,11 +5988,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 80 + 82 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 96 + 98 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5952,7 +6012,7 @@ Position abschliessen apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 442 + 447 @@ -6000,7 +6060,7 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 201 + 204 libs/ui/src/lib/assistant/assistant.component.ts @@ -6020,7 +6080,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 205 + 208 libs/ui/src/lib/assistant/assistant.component.ts @@ -6068,7 +6128,7 @@ Jahr apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 213 + 216 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6088,7 +6148,7 @@ Jahre apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 217 + 220 libs/ui/src/lib/assistant/assistant.component.ts @@ -6108,7 +6168,7 @@ Finanzmarktdaten synchronisieren apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 592 + 597 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6173,7 +6233,7 @@ Ups! Es sieht so aus, als würdest du zu viele Anfragen senden. Bitte geh es ein bisschen langsamer an. apps/client/src/app/core/http-response.interceptor.ts - 106 + 103 @@ -6200,14 +6260,6 @@ 62 - - Indonesia - Indonesien - - libs/ui/src/lib/i18n.ts - 90 - - Activity Aktivität @@ -6245,7 +6297,7 @@ Diese Aktion ist nicht zulässig. apps/client/src/app/core/http-response.interceptor.ts - 67 + 64 @@ -6253,7 +6305,7 @@ Liquidität libs/ui/src/lib/i18n.ts - 49 + 51 @@ -6269,7 +6321,7 @@ Kauf und Verkauf libs/ui/src/lib/i18n.ts - 8 + 10 @@ -6349,7 +6401,7 @@ Berücksichtigen in apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 377 + 382 @@ -6373,7 +6425,7 @@ Benchmarks apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 125 + 130 @@ -6389,7 +6441,7 @@ Möchtest du diese Profile wirklich löschen? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 68 + 59 @@ -6397,7 +6449,7 @@ Ups! Die Profile konnten nicht gelöscht werden. apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 56 + 47 @@ -6596,38 +6648,6 @@ 100 - - Australia - Australien - - libs/ui/src/lib/i18n.ts - 79 - - - - Austria - Österreich - - libs/ui/src/lib/i18n.ts - 80 - - - - Belgium - Belgien - - libs/ui/src/lib/i18n.ts - 81 - - - - Bulgaria - Bulgarien - - libs/ui/src/lib/i18n.ts - 83 - - View Holding Position ansehen @@ -6636,124 +6656,12 @@ 474 - - Canada - Kanada - - libs/ui/src/lib/i18n.ts - 84 - - - - Czech Republic - Tschechien - - libs/ui/src/lib/i18n.ts - 85 - - - - Finland - Finnland - - libs/ui/src/lib/i18n.ts - 86 - - - - France - Frankreich - - libs/ui/src/lib/i18n.ts - 87 - - - - Germany - Deutschland - - libs/ui/src/lib/i18n.ts - 88 - - - - India - Indien - - libs/ui/src/lib/i18n.ts - 89 - - - - Italy - Italien - - libs/ui/src/lib/i18n.ts - 91 - - - - Netherlands - Niederlande - - libs/ui/src/lib/i18n.ts - 93 - - - - New Zealand - Neuseeland - - libs/ui/src/lib/i18n.ts - 94 - - - - Poland - Polen - - libs/ui/src/lib/i18n.ts - 95 - - - - Romania - Rumänien - - libs/ui/src/lib/i18n.ts - 96 - - - - South Africa - Südafrika - - libs/ui/src/lib/i18n.ts - 98 - - - - Thailand - Thailand - - libs/ui/src/lib/i18n.ts - 100 - - - - United States - USA - - libs/ui/src/lib/i18n.ts - 103 - - Error Fehler apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 734 + 740 @@ -6777,7 +6685,7 @@ Ups! Der Zugang konnte nicht bearbeitet werden. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 181 + 194 @@ -6805,7 +6713,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 597 + 602 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6849,7 +6757,7 @@ libs/ui/src/lib/i18n.ts - 9 + 11 @@ -6857,7 +6765,7 @@ Schliessen apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 599 + 604 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6897,7 +6805,7 @@ libs/ui/src/lib/i18n.ts - 11 + 13 @@ -6913,7 +6821,7 @@ Ja libs/ui/src/lib/i18n.ts - 33 + 35 @@ -7064,6 +6972,14 @@ 174 + + Financial Services + Financial Services + + libs/ui/src/lib/i18n.ts + 91 + + to use our referral link and get a Ghostfolio Premium membership for one year um unseren Empfehlungslink zu verwenden und eine Ghostfolio Premium-Mitgliedschaft für ein Jahr zu erhalten @@ -7181,15 +7097,7 @@ Erhalte Zugang zu 80’000+ Tickern von über 50 Handelsplätzen libs/ui/src/lib/i18n.ts - 25 - - - - Ukraine - Ukraine - - libs/ui/src/lib/i18n.ts - 101 + 27 @@ -7395,7 +7303,7 @@ Speichern apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 608 + 613 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7443,11 +7351,11 @@ Ich apps/client/src/app/components/header/header.component.html - 213 + 217 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 250 + 254 @@ -7487,7 +7395,7 @@ KI-Anweisung wurde in die Zwischenablage kopiert apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 211 @@ -7503,7 +7411,7 @@ Verzögert apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 235 + 239 @@ -7511,7 +7419,7 @@ Sofort apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 239 + 243 @@ -7519,7 +7427,7 @@ Standardmarktpreis apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 482 + 487 @@ -7527,7 +7435,7 @@ Modus apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 519 + 524 @@ -7535,7 +7443,7 @@ Selektor apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 535 + 540 @@ -7543,7 +7451,7 @@ HTTP Request-Headers apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 495 + 500 @@ -7551,7 +7459,7 @@ Tagesende apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 235 + 239 @@ -7559,7 +7467,7 @@ in Echtzeit apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 239 + 243 @@ -7567,7 +7475,7 @@ Öffne Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 212 @@ -7583,7 +7491,7 @@ Änderung libs/ui/src/lib/holdings-table/holdings-table.component.html - 138 + 143 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7599,11 +7507,11 @@ apps/client/src/app/components/home-overview/home-overview.component.ts - 52 + 53 libs/ui/src/lib/holdings-table/holdings-table.component.html - 161 + 166 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7646,30 +7554,6 @@ 94 - - Armenia - Armenien - - libs/ui/src/lib/i18n.ts - 77 - - - - British Virgin Islands - Britische Jungferninseln - - libs/ui/src/lib/i18n.ts - 82 - - - - Singapore - Singapur - - libs/ui/src/lib/i18n.ts - 97 - - Terms and Conditions Nutzungsbedingungen @@ -7715,11 +7599,11 @@ Sicherheits-Token apps/client/src/app/components/admin-users/admin-users.component.ts - 235 + 256 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 167 + 179 @@ -7727,7 +7611,7 @@ Möchtest du für diesen Benutzer wirklich ein neues Sicherheits-Token generieren? apps/client/src/app/components/admin-users/admin-users.component.ts - 240 + 261 @@ -7738,14 +7622,6 @@ 239 - - United Kingdom - Vereinigtes Königreich - - libs/ui/src/lib/i18n.ts - 102 - - Terms of Service Allgemeine Geschäftsbedingungen @@ -7792,7 +7668,7 @@ () wird bereits verwendet. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 675 + 681 @@ -7800,7 +7676,7 @@ Bei der Änderung zu () ist ein Fehler aufgetreten. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 683 + 689 @@ -7840,7 +7716,7 @@ jemand apps/client/src/app/pages/public/public-page.component.ts - 62 + 63 @@ -7872,7 +7748,7 @@ Möchtest du diesen Eintrag wirklich löschen? libs/ui/src/lib/benchmark/benchmark.component.ts - 137 + 141 @@ -7880,7 +7756,7 @@ Ausloggen apps/client/src/app/components/header/header.component.html - 325 + 330 @@ -8127,7 +8003,7 @@ Aktueller Monat apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 205 + 208 @@ -8292,7 +8168,7 @@ Möchtest du wirklich ein neues Sicherheits-Token generieren? apps/client/src/app/components/user-account-access/user-account-access.component.ts - 172 + 184 @@ -8348,7 +8224,7 @@ Anlageprofil verwalten apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 467 + 472 @@ -8356,7 +8232,7 @@ Alternative Investition libs/ui/src/lib/i18n.ts - 45 + 47 @@ -8364,7 +8240,7 @@ Sammlerobjekt libs/ui/src/lib/i18n.ts - 55 + 57 @@ -8372,7 +8248,7 @@ Ø Preis pro Einheit apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 113 + 117 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf index c99924de8..e475b9c2c 100644 --- a/apps/client/src/locales/messages.es.xlf +++ b/apps/client/src/locales/messages.es.xlf @@ -111,7 +111,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 310 + 315 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -151,11 +151,11 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 12 + 23 libs/ui/src/lib/holdings-table/holdings-table.component.html - 23 + 28 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -215,7 +215,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 93 + 98 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -295,7 +295,7 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 176 + 187 @@ -335,7 +335,7 @@ libs/ui/src/lib/i18n.ts - 14 + 16 @@ -403,7 +403,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 449 + 454 @@ -499,7 +499,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 45 + 50 @@ -631,7 +631,7 @@ ¿Seguro que quieres eliminar este usuario? apps/client/src/app/components/admin-users/admin-users.component.ts - 215 + 236 @@ -647,7 +647,7 @@ apps/client/src/app/components/header/header.component.html - 231 + 235 @@ -691,7 +691,7 @@ Sobre Ghostfolio apps/client/src/app/components/header/header.component.html - 322 + 327 apps/client/src/app/pages/about/overview/about-overview-page.html @@ -703,7 +703,7 @@ Empezar apps/client/src/app/components/header/header.component.html - 432 + 437 apps/client/src/app/pages/features/features-page.html @@ -735,11 +735,11 @@ Iniciar sesión apps/client/src/app/components/header/header.component.html - 421 + 426 apps/client/src/app/components/header/header.component.ts - 296 + 305 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -759,11 +759,11 @@ ¡Vaya! Token de seguridad incorrecto. apps/client/src/app/components/header/header.component.ts - 311 + 320 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 152 + 164 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts @@ -870,6 +870,14 @@ 46 + + Energy + Energy + + libs/ui/src/lib/i18n.ts + 90 + + Stay signed in Seguir conectado @@ -963,15 +971,15 @@ Sectores apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 279 + 284 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 398 + 403 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 282 + 287 apps/client/src/app/pages/public/public-page.html @@ -983,15 +991,15 @@ Países apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 289 + 294 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 409 + 414 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 294 + 299 @@ -1015,7 +1023,7 @@ Reportar anomalía en los datos apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 452 + 457 @@ -1027,7 +1035,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 117 + 122 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -1043,7 +1051,7 @@ Mostrar todos libs/ui/src/lib/holdings-table/holdings-table.component.html - 212 + 217 @@ -1063,7 +1071,7 @@ YTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 209 + 212 libs/ui/src/lib/assistant/assistant.component.ts @@ -1075,7 +1083,7 @@ 1 año apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 213 + 216 libs/ui/src/lib/assistant/assistant.component.ts @@ -1087,7 +1095,7 @@ 5 años apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 217 + 220 libs/ui/src/lib/assistant/assistant.component.ts @@ -1107,7 +1115,7 @@ Máximo apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 221 + 224 libs/ui/src/lib/assistant/assistant.component.ts @@ -1123,11 +1131,11 @@ apps/client/src/app/core/http-response.interceptor.ts - 89 + 86 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 192 + 193 @@ -1139,11 +1147,11 @@ apps/client/src/app/components/header/header.component.html - 124 + 125 apps/client/src/app/components/header/header.component.html - 370 + 375 apps/client/src/app/pages/about/overview/about-overview-page.routes.ts @@ -1175,7 +1183,7 @@ Mi Ghostfolio apps/client/src/app/components/header/header.component.html - 276 + 280 apps/client/src/app/pages/user-account/user-account-page.routes.ts @@ -1198,6 +1206,14 @@ 174 + + Consumer Defensive + Consumer Defensive + + libs/ui/src/lib/i18n.ts + 89 + + Coupon code has been redeemed El código del cupón ha sido canjeado @@ -1258,6 +1274,14 @@ 67 + + Utilities + Utilities + + libs/ui/src/lib/i18n.ts + 97 + + Presenter View Vista del presentador @@ -1279,7 +1303,7 @@ Configuración regional apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 510 + 515 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -1367,15 +1391,15 @@ apps/client/src/app/components/header/header.component.html - 58 + 59 apps/client/src/app/components/header/header.component.html - 267 + 271 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 378 + 383 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -1419,7 +1443,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 317 + 322 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -1487,11 +1511,11 @@ Control de administrador apps/client/src/app/components/header/header.component.html - 74 + 75 apps/client/src/app/components/header/header.component.html - 287 + 291 libs/common/src/lib/routes/routes.ts @@ -1655,7 +1679,7 @@ apps/client/src/app/components/header/header.component.html - 356 + 361 apps/client/src/app/pages/features/features-page.html @@ -1683,7 +1707,7 @@ apps/client/src/app/components/header/header.component.html - 247 + 251 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1711,7 +1735,7 @@ Mercados apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 381 + 386 apps/client/src/app/components/footer/footer.component.html @@ -1719,7 +1743,7 @@ apps/client/src/app/components/header/header.component.html - 403 + 408 apps/client/src/app/components/home-market/home-market.html @@ -1855,7 +1879,7 @@ Cronología de la inversión apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 434 + 438 @@ -1871,7 +1895,7 @@ Peores apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 352 + 354 @@ -1931,7 +1955,7 @@ Semana actual apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 201 + 204 @@ -1955,7 +1979,7 @@ libs/ui/src/lib/i18n.ts - 41 + 43 @@ -1978,6 +2002,14 @@ 119 + + Consumer Cyclical + Consumer Cyclical + + libs/ui/src/lib/i18n.ts + 88 + + Quantity Cantidad @@ -1995,7 +2027,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 69 + 74 @@ -2015,7 +2047,7 @@ Nota apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 433 + 438 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -2059,7 +2091,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 342 + 347 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2083,7 +2115,7 @@ Importando datos... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 171 + 172 @@ -2091,7 +2123,7 @@ La importación se ha completado apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 181 + 182 @@ -2111,15 +2143,15 @@ apps/client/src/app/components/header/header.component.html - 105 + 106 apps/client/src/app/components/header/header.component.html - 309 + 314 apps/client/src/app/components/header/header.component.html - 384 + 389 apps/client/src/app/pages/pricing/pricing-page.routes.ts @@ -2139,15 +2171,15 @@ Cartera apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 140 + 143 apps/client/src/app/components/header/header.component.html - 44 + 45 apps/client/src/app/components/header/header.component.html - 257 + 261 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -2223,11 +2255,11 @@ apps/client/src/app/components/header/header.component.html - 88 + 89 apps/client/src/app/components/header/header.component.html - 297 + 301 apps/client/src/app/pages/resources/overview/resources-overview.component.html @@ -2275,7 +2307,7 @@ Importar operaciones apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 93 + 94 libs/ui/src/lib/activities-table/activities-table.component.html @@ -2339,7 +2371,7 @@ Variación respecto al máximo histórico (ATH) libs/ui/src/lib/benchmark/benchmark.component.html - 117 + 128 @@ -2355,7 +2387,7 @@ desde el máximo histórico (ATH) libs/ui/src/lib/benchmark/benchmark.component.html - 119 + 130 @@ -2387,7 +2419,7 @@ Esta funcionalidad no está disponible actualmente. apps/client/src/app/core/http-response.interceptor.ts - 55 + 52 @@ -2395,11 +2427,11 @@ ¡Vaya! Algo no funcionó bien. apps/client/src/app/core/http-response.interceptor.ts - 86 + 83 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 189 + 190 @@ -2407,15 +2439,15 @@ Por favor, prueba más tarde. apps/client/src/app/core/http-response.interceptor.ts - 57 + 54 apps/client/src/app/core/http-response.interceptor.ts - 88 + 85 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 191 + 192 @@ -2427,7 +2459,7 @@ libs/ui/src/lib/i18n.ts - 16 + 18 @@ -2499,7 +2531,7 @@ País apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 273 + 278 apps/client/src/app/components/admin-users/admin-users.html @@ -2507,7 +2539,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 276 + 281 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2555,7 +2587,7 @@ libs/ui/src/lib/i18n.ts - 39 + 41 @@ -2579,7 +2611,7 @@ Mensual apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 92 @@ -2603,7 +2635,7 @@ Miedo apps/client/src/app/components/home-market/home-market.component.ts - 41 + 46 apps/client/src/app/components/markets/markets.component.ts @@ -2611,7 +2643,7 @@ libs/ui/src/lib/i18n.ts - 108 + 81 @@ -2619,7 +2651,7 @@ Codicia apps/client/src/app/components/home-market/home-market.component.ts - 42 + 47 apps/client/src/app/components/markets/markets.component.ts @@ -2627,7 +2659,7 @@ libs/ui/src/lib/i18n.ts - 109 + 82 @@ -2635,7 +2667,7 @@ Filtrar por... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 368 + 374 @@ -2671,11 +2703,11 @@ Índice de referencia apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 379 + 384 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 152 + 155 @@ -2683,11 +2715,11 @@ No se pudo validar el formulario apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 594 + 600 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 597 + 603 @@ -2763,7 +2795,7 @@ Evolución de la cartera apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 405 + 409 @@ -2795,7 +2827,7 @@ libs/ui/src/lib/i18n.ts - 4 + 6 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html @@ -2815,7 +2847,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 327 + 332 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2827,11 +2859,11 @@ libs/ui/src/lib/i18n.ts - 6 + 8 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html - 64 + 65 @@ -2855,11 +2887,11 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 314 + 319 libs/ui/src/lib/i18n.ts - 29 + 31 @@ -2867,11 +2899,11 @@ Etiqueta libs/ui/src/lib/i18n.ts - 30 + 32 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html - 53 + 54 @@ -2883,7 +2915,7 @@ libs/ui/src/lib/i18n.ts - 54 + 56 @@ -2891,7 +2923,7 @@ Materia prima libs/ui/src/lib/i18n.ts - 46 + 48 @@ -2903,7 +2935,7 @@ libs/ui/src/lib/i18n.ts - 47 + 49 @@ -2911,7 +2943,7 @@ Renta fija libs/ui/src/lib/i18n.ts - 48 + 50 @@ -2919,7 +2951,11 @@ Propiedad inmobiliaria libs/ui/src/lib/i18n.ts - 50 + 52 + + + libs/ui/src/lib/i18n.ts + 95 @@ -2935,7 +2971,7 @@ Bono libs/ui/src/lib/i18n.ts - 53 + 55 @@ -2943,7 +2979,7 @@ Criptomoneda libs/ui/src/lib/i18n.ts - 56 + 58 @@ -2951,7 +2987,7 @@ ETF libs/ui/src/lib/i18n.ts - 57 + 59 @@ -2959,7 +2995,7 @@ Fondo de inversión libs/ui/src/lib/i18n.ts - 59 + 61 @@ -2967,7 +3003,7 @@ Metal precioso libs/ui/src/lib/i18n.ts - 60 + 62 @@ -2975,7 +3011,7 @@ Capital riesgo libs/ui/src/lib/i18n.ts - 61 + 63 @@ -2983,7 +3019,7 @@ Acción libs/ui/src/lib/i18n.ts - 62 + 64 @@ -2999,7 +3035,7 @@ libs/ui/src/lib/i18n.ts - 15 + 17 @@ -3007,11 +3043,15 @@ Otros libs/ui/src/lib/i18n.ts - 24 + 26 + + + libs/ui/src/lib/i18n.ts + 94 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 451 + 449 @@ -3027,15 +3067,15 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 209 + 220 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 453 + 451 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 467 + 465 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -3047,7 +3087,7 @@ América del Norte libs/ui/src/lib/i18n.ts - 72 + 74 @@ -3055,7 +3095,7 @@ África libs/ui/src/lib/i18n.ts - 69 + 71 @@ -3063,7 +3103,15 @@ Asia libs/ui/src/lib/i18n.ts - 70 + 72 + + + + Communication Services + Communication Services + + libs/ui/src/lib/i18n.ts + 87 @@ -3071,7 +3119,7 @@ Europa libs/ui/src/lib/i18n.ts - 71 + 73 @@ -3087,7 +3135,7 @@ Oceanía libs/ui/src/lib/i18n.ts - 73 + 75 @@ -3095,7 +3143,7 @@ América del Sur libs/ui/src/lib/i18n.ts - 74 + 76 @@ -3139,7 +3187,7 @@ Mapeo de símbolos apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 387 + 392 @@ -3175,11 +3223,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 78 libs/ui/src/lib/i18n.ts - 37 + 39 @@ -3187,7 +3235,7 @@ Calendario de dividendos apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 493 + 497 @@ -3203,7 +3251,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 343 + 348 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -3215,7 +3263,7 @@ libs/ui/src/lib/i18n.ts - 7 + 9 @@ -3231,7 +3279,7 @@ Validando datos... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 291 + 293 @@ -3255,7 +3303,7 @@ Datos del mercado apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 400 + 405 libs/common/src/lib/routes/routes.ts @@ -3311,7 +3359,7 @@ Anual apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 93 @@ -3319,7 +3367,7 @@ Importar dividendos apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 132 + 133 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3347,7 +3395,7 @@ Núcleo libs/ui/src/lib/i18n.ts - 10 + 12 @@ -3355,7 +3403,7 @@ Conceder libs/ui/src/lib/i18n.ts - 18 + 20 @@ -3363,7 +3411,7 @@ Mayor riesgo libs/ui/src/lib/i18n.ts - 19 + 21 @@ -3371,7 +3419,7 @@ Menor riesgo libs/ui/src/lib/i18n.ts - 21 + 23 @@ -3379,7 +3427,7 @@ Sin operaciones apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 145 + 150 @@ -3387,7 +3435,7 @@ Provisión de jubilación libs/ui/src/lib/i18n.ts - 27 + 29 @@ -3403,7 +3451,7 @@ Satélite libs/ui/src/lib/i18n.ts - 28 + 30 @@ -3527,7 +3575,7 @@ Mejorar plan apps/client/src/app/components/header/header.component.html - 193 + 197 apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html @@ -3655,11 +3703,11 @@ No se pudo guardar el perfil del activo apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 628 + 634 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 631 + 637 @@ -3727,7 +3775,7 @@ Cambia a Ghostfolio Premium fácilmente libs/ui/src/lib/i18n.ts - 13 + 15 @@ -3751,7 +3799,7 @@ Cambia a Ghostfolio Premium o Ghostfolio Open Source fácilmente libs/ui/src/lib/i18n.ts - 12 + 14 @@ -3759,7 +3807,7 @@ Préstamo libs/ui/src/lib/i18n.ts - 58 + 60 @@ -3803,7 +3851,7 @@ Renovar Plan apps/client/src/app/components/header/header.component.html - 191 + 195 apps/client/src/app/components/user-account-membership/user-account-membership.html @@ -3883,7 +3931,7 @@ Año actual apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 209 + 212 @@ -3899,11 +3947,11 @@ Url apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 420 + 425 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 551 + 556 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -3919,7 +3967,7 @@ Perfil del activo guardado apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 618 + 624 @@ -3927,7 +3975,7 @@ ¿Seguro que quieres eliminar esta plataforma? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 111 + 115 @@ -3999,7 +4047,7 @@ Esta operación ya existe. libs/ui/src/lib/i18n.ts - 20 + 22 @@ -4063,7 +4111,7 @@ Racha actual apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 455 + 459 @@ -4071,7 +4119,7 @@ Racha más larga apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 464 + 468 @@ -4079,7 +4127,7 @@ Meses libs/ui/src/lib/i18n.ts - 23 + 25 @@ -4087,7 +4135,7 @@ Años libs/ui/src/lib/i18n.ts - 32 + 34 @@ -4095,7 +4143,7 @@ Mes libs/ui/src/lib/i18n.ts - 22 + 24 @@ -4103,7 +4151,7 @@ Año libs/ui/src/lib/i18n.ts - 31 + 33 @@ -4263,7 +4311,15 @@ Pasivo libs/ui/src/lib/i18n.ts - 40 + 42 + + + + Technology + Technology + + libs/ui/src/lib/i18n.ts + 96 @@ -4279,7 +4335,7 @@ Configuración del scraper apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 472 + 477 @@ -4507,7 +4563,7 @@ libs/ui/src/lib/i18n.ts - 36 + 38 @@ -4515,7 +4571,7 @@ Activo de valor libs/ui/src/lib/i18n.ts - 42 + 44 @@ -4523,7 +4579,7 @@ ETFs sin países apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 135 + 140 @@ -4531,7 +4587,7 @@ ETFs sin sectores apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 140 + 145 @@ -4547,7 +4603,7 @@ Preestablecido libs/ui/src/lib/i18n.ts - 26 + 28 @@ -4563,15 +4619,7 @@ Asia-Pacífico libs/ui/src/lib/i18n.ts - 5 - - - - Japan - Japón - - libs/ui/src/lib/i18n.ts - 92 + 7 @@ -4767,7 +4815,7 @@ Divisas apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 130 + 135 apps/client/src/app/pages/public/public-page.html @@ -4819,11 +4867,11 @@ No se pudo analizar la configuración del scraper apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 545 + 551 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 548 + 554 @@ -4914,6 +4962,14 @@ 149 + + Basic Materials + Basic Materials + + libs/ui/src/lib/i18n.ts + 86 + + Use Ghostfolio anonymously and own your financial data. Usa Ghostfolio de forma anónima y sé dueño de tus datos financieros. @@ -5379,10 +5435,6 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts 58 - - libs/ui/src/lib/i18n.ts - 99 - Global @@ -5393,7 +5445,7 @@ libs/ui/src/lib/i18n.ts - 17 + 19 @@ -5493,7 +5545,7 @@ libs/ui/src/lib/i18n.ts - 38 + 40 @@ -5517,7 +5569,7 @@ ¿Seguro que quieres eliminar esta etiqueta? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 108 + 117 @@ -5625,7 +5677,7 @@ ¿Seguro que quieres eliminar este perfil de activo? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 37 + 28 @@ -5636,6 +5688,14 @@ 16 + + Industrials + Industrials + + libs/ui/src/lib/i18n.ts + 93 + + Add Manually Añadir manualmente @@ -5665,7 +5725,7 @@ Último máximo histórico libs/ui/src/lib/benchmark/benchmark.component.html - 90 + 101 @@ -5709,7 +5769,7 @@ ¡Vaya! La transferencia del saldo de efectivo ha fallado. apps/client/src/app/pages/accounts/accounts-page.component.ts - 341 + 337 @@ -5717,7 +5777,7 @@ Miedo extremo libs/ui/src/lib/i18n.ts - 106 + 79 @@ -5725,7 +5785,7 @@ Codicia extrema libs/ui/src/lib/i18n.ts - 107 + 80 @@ -5733,7 +5793,7 @@ Neutral libs/ui/src/lib/i18n.ts - 110 + 83 @@ -5744,6 +5804,14 @@ 284 + + Healthcare + Healthcare + + libs/ui/src/lib/i18n.ts + 92 + + Do you really want to delete this system message? ¿Seguro que quieres eliminar este mensaje del sistema? @@ -5757,7 +5825,7 @@ Tendencia de 50 días libs/ui/src/lib/benchmark/benchmark.component.html - 32 + 43 @@ -5765,7 +5833,7 @@ Tendencia de 200 días libs/ui/src/lib/benchmark/benchmark.component.html - 61 + 72 @@ -5773,7 +5841,7 @@ Saldos de efectivo apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 142 + 145 @@ -5809,7 +5877,7 @@ El precio actual de mercado es apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 743 + 749 @@ -5817,7 +5885,7 @@ Prueba apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 569 + 574 @@ -5857,15 +5925,7 @@ ¡Vaya! No se pudo otorgar acceso. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 144 - - - - Argentina - Argentina - - libs/ui/src/lib/i18n.ts - 78 + 151 @@ -5889,7 +5949,7 @@ Los datos del mercado tienen un retraso de apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts - 94 + 92 @@ -5905,11 +5965,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 80 + 82 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 96 + 98 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5929,7 +5989,7 @@ Cerrar posición apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 442 + 447 @@ -5977,7 +6037,7 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 201 + 204 libs/ui/src/lib/assistant/assistant.component.ts @@ -5997,7 +6057,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 205 + 208 libs/ui/src/lib/assistant/assistant.component.ts @@ -6045,7 +6105,7 @@ año apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 213 + 216 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6065,7 +6125,7 @@ años apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 217 + 220 libs/ui/src/lib/assistant/assistant.component.ts @@ -6085,7 +6145,7 @@ Recopilación de datos apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 592 + 597 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6150,7 +6210,7 @@ ¡Vaya! Parece que estás haciendo demasiadas solicitudes. Por favor, reduce la velocidad un poco. apps/client/src/app/core/http-response.interceptor.ts - 106 + 103 @@ -6177,14 +6237,6 @@ 62 - - Indonesia - Indonesia - - libs/ui/src/lib/i18n.ts - 90 - - Activity Operación @@ -6222,7 +6274,7 @@ Esta acción no está permitida. apps/client/src/app/core/http-response.interceptor.ts - 67 + 64 @@ -6230,7 +6282,7 @@ Liquidez libs/ui/src/lib/i18n.ts - 49 + 51 @@ -6246,7 +6298,7 @@ Comprar y vender libs/ui/src/lib/i18n.ts - 8 + 10 @@ -6326,7 +6378,7 @@ Incluir en apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 377 + 382 @@ -6350,7 +6402,7 @@ Índices de referencia apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 125 + 130 @@ -6366,7 +6418,7 @@ ¿Seguro que quieres eliminar estos perfiles? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 68 + 59 @@ -6374,7 +6426,7 @@ ¡Vaya! No se pudieron eliminar los perfiles. apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 56 + 47 @@ -6573,38 +6625,6 @@ 100 - - Australia - Australia - - libs/ui/src/lib/i18n.ts - 79 - - - - Austria - Austria - - libs/ui/src/lib/i18n.ts - 80 - - - - Belgium - Bélgica - - libs/ui/src/lib/i18n.ts - 81 - - - - Bulgaria - Bulgaria - - libs/ui/src/lib/i18n.ts - 83 - - View Holding Ver posición @@ -6613,124 +6633,12 @@ 474 - - Canada - Canadá - - libs/ui/src/lib/i18n.ts - 84 - - - - Czech Republic - República Checa - - libs/ui/src/lib/i18n.ts - 85 - - - - Finland - Finlandia - - libs/ui/src/lib/i18n.ts - 86 - - - - France - Francia - - libs/ui/src/lib/i18n.ts - 87 - - - - Germany - Alemania - - libs/ui/src/lib/i18n.ts - 88 - - - - India - India - - libs/ui/src/lib/i18n.ts - 89 - - - - Italy - Italia - - libs/ui/src/lib/i18n.ts - 91 - - - - Netherlands - Países Bajos - - libs/ui/src/lib/i18n.ts - 93 - - - - New Zealand - Nueva Zelanda - - libs/ui/src/lib/i18n.ts - 94 - - - - Poland - Polonia - - libs/ui/src/lib/i18n.ts - 95 - - - - Romania - Rumanía - - libs/ui/src/lib/i18n.ts - 96 - - - - South Africa - Sudáfrica - - libs/ui/src/lib/i18n.ts - 98 - - - - Thailand - Tailandia - - libs/ui/src/lib/i18n.ts - 100 - - - - United States - Estados Unidos - - libs/ui/src/lib/i18n.ts - 103 - - Error Error apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 734 + 740 @@ -6754,7 +6662,7 @@ ¡Vaya! No se pudo actualizar el acceso. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 181 + 194 @@ -6782,7 +6690,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 597 + 602 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6826,7 +6734,7 @@ libs/ui/src/lib/i18n.ts - 9 + 11 @@ -6834,7 +6742,7 @@ Cerrar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 599 + 604 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6874,7 +6782,7 @@ libs/ui/src/lib/i18n.ts - 11 + 13 @@ -6890,7 +6798,7 @@ libs/ui/src/lib/i18n.ts - 33 + 35 @@ -7041,6 +6949,14 @@ 174 + + Financial Services + Financial Services + + libs/ui/src/lib/i18n.ts + 91 + + to use our referral link and get a Ghostfolio Premium membership for one year para utilizar nuestro enlace de recomendación y obtener una membresía de Ghostfolio Premium por un año @@ -7158,15 +7074,7 @@ Accede a más de 80.000 tickers de más de 50 bolsas libs/ui/src/lib/i18n.ts - 25 - - - - Ukraine - Ucrania - - libs/ui/src/lib/i18n.ts - 101 + 27 @@ -7372,7 +7280,7 @@ Guardar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 608 + 613 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7420,11 +7328,11 @@ Me apps/client/src/app/components/header/header.component.html - 213 + 217 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 250 + 254 @@ -7464,7 +7372,7 @@ El prompt para la IA ha sido copiado al portapapeles apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 211 @@ -7480,7 +7388,7 @@ Bajo demanda apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 235 + 239 @@ -7488,7 +7396,7 @@ Instantáneo apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 239 + 243 @@ -7496,7 +7404,7 @@ Precio de mercado por defecto apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 482 + 487 @@ -7504,7 +7412,7 @@ Modo apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 519 + 524 @@ -7512,7 +7420,7 @@ Selector apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 535 + 540 @@ -7520,7 +7428,7 @@ Encabezados de solicitud HTTP apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 495 + 500 @@ -7528,7 +7436,7 @@ final del día apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 235 + 239 @@ -7536,7 +7444,7 @@ en tiempo real apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 239 + 243 @@ -7544,7 +7452,7 @@ Abrir Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 212 @@ -7560,7 +7468,7 @@ Cambio libs/ui/src/lib/holdings-table/holdings-table.component.html - 138 + 143 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7576,11 +7484,11 @@ apps/client/src/app/components/home-overview/home-overview.component.ts - 52 + 53 libs/ui/src/lib/holdings-table/holdings-table.component.html - 161 + 166 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7623,30 +7531,6 @@ 94 - - Armenia - Armenia - - libs/ui/src/lib/i18n.ts - 77 - - - - British Virgin Islands - Islas Vírgenes Británicas - - libs/ui/src/lib/i18n.ts - 82 - - - - Singapore - Singapur - - libs/ui/src/lib/i18n.ts - 97 - - Terms and Conditions Términos y Condiciones @@ -7692,11 +7576,11 @@ Token de seguridad apps/client/src/app/components/admin-users/admin-users.component.ts - 235 + 256 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 167 + 179 @@ -7704,7 +7588,7 @@ ¿Seguro que quieres generar un nuevo token de seguridad para este usuario? apps/client/src/app/components/admin-users/admin-users.component.ts - 240 + 261 @@ -7715,14 +7599,6 @@ 239 - - United Kingdom - Reino Unido - - libs/ui/src/lib/i18n.ts - 102 - - Terms of Service Términos de servicio @@ -7769,7 +7645,7 @@ () ya está en uso. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 675 + 681 @@ -7777,7 +7653,7 @@ Ocurrió un error al actualizar a (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 683 + 689 @@ -7841,7 +7717,7 @@ alguien apps/client/src/app/pages/public/public-page.component.ts - 62 + 63 @@ -7873,7 +7749,7 @@ ¿Seguro que quieres eliminar este elemento? libs/ui/src/lib/benchmark/benchmark.component.ts - 137 + 141 @@ -7881,7 +7757,7 @@ Cerrar sesión apps/client/src/app/components/header/header.component.html - 325 + 330 @@ -8128,7 +8004,7 @@ Mes actual apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 205 + 208 @@ -8293,7 +8169,7 @@ ¿Seguro que quieres generar un nuevo token de seguridad? apps/client/src/app/components/user-account-access/user-account-access.component.ts - 172 + 184 @@ -8349,7 +8225,7 @@ Gestionar perfil de activo apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 467 + 472 @@ -8357,7 +8233,7 @@ Inversión alternativa libs/ui/src/lib/i18n.ts - 45 + 47 @@ -8365,7 +8241,7 @@ Coleccionable libs/ui/src/lib/i18n.ts - 55 + 57 @@ -8373,7 +8249,7 @@ Precio medio por unidad apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 113 + 117 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html diff --git a/apps/client/src/locales/messages.fr.xlf b/apps/client/src/locales/messages.fr.xlf index 11d7d0577..2cbba3820 100644 --- a/apps/client/src/locales/messages.fr.xlf +++ b/apps/client/src/locales/messages.fr.xlf @@ -118,7 +118,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 310 + 315 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -158,11 +158,11 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 12 + 23 libs/ui/src/lib/holdings-table/holdings-table.component.html - 23 + 28 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -190,7 +190,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 317 + 322 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -270,7 +270,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 93 + 98 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -350,7 +350,7 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 176 + 187 @@ -382,7 +382,7 @@ libs/ui/src/lib/i18n.ts - 14 + 16 @@ -458,7 +458,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 449 + 454 @@ -542,7 +542,7 @@ Filtrer par... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 368 + 374 @@ -562,7 +562,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 45 + 50 @@ -638,7 +638,7 @@ Pays apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 273 + 278 apps/client/src/app/components/admin-users/admin-users.html @@ -646,7 +646,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 276 + 281 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -658,15 +658,15 @@ Secteurs apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 279 + 284 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 398 + 403 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 282 + 287 apps/client/src/app/pages/public/public-page.html @@ -678,15 +678,15 @@ Pays apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 289 + 294 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 409 + 414 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 294 + 299 @@ -694,7 +694,7 @@ Équivalence de Symboles apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 387 + 392 @@ -702,7 +702,7 @@ Note apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 433 + 438 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -842,7 +842,7 @@ Voulez-vous vraiment supprimer cet·te utilisateur·rice ? apps/client/src/app/components/admin-users/admin-users.component.ts - 215 + 236 @@ -858,7 +858,7 @@ apps/client/src/app/components/header/header.component.html - 231 + 235 @@ -894,11 +894,11 @@ Could not validate form apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 594 + 600 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 597 + 603 @@ -914,15 +914,15 @@ Portefeuille apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 140 + 143 apps/client/src/app/components/header/header.component.html - 44 + 45 apps/client/src/app/components/header/header.component.html - 257 + 261 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -938,11 +938,11 @@ Référence apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 379 + 384 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 152 + 155 @@ -958,7 +958,7 @@ À propos de Ghostfolio apps/client/src/app/components/header/header.component.html - 322 + 327 apps/client/src/app/pages/about/overview/about-overview-page.html @@ -970,11 +970,11 @@ Se connecter apps/client/src/app/components/header/header.component.html - 421 + 426 apps/client/src/app/components/header/header.component.ts - 296 + 305 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -994,11 +994,11 @@ Oups! Jeton de Sécurité Incorrect. apps/client/src/app/components/header/header.component.ts - 311 + 320 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 152 + 164 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts @@ -1018,7 +1018,7 @@ Peur apps/client/src/app/components/home-market/home-market.component.ts - 41 + 46 apps/client/src/app/components/markets/markets.component.ts @@ -1026,7 +1026,7 @@ libs/ui/src/lib/i18n.ts - 108 + 81 @@ -1034,7 +1034,7 @@ Avidité apps/client/src/app/components/home-market/home-market.component.ts - 42 + 47 apps/client/src/app/components/markets/markets.component.ts @@ -1042,7 +1042,7 @@ libs/ui/src/lib/i18n.ts - 109 + 82 @@ -1161,6 +1161,14 @@ 46 + + Energy + Energy + + libs/ui/src/lib/i18n.ts + 90 + + Stay signed in Rester connecté @@ -1290,7 +1298,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 69 + 74 @@ -1298,7 +1306,7 @@ Signaler une Erreur de Données apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 452 + 457 @@ -1318,7 +1326,7 @@ CDA apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 209 + 212 libs/ui/src/lib/assistant/assistant.component.ts @@ -1330,7 +1338,7 @@ 1A apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 213 + 216 libs/ui/src/lib/assistant/assistant.component.ts @@ -1342,7 +1350,7 @@ 5A apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 217 + 220 libs/ui/src/lib/assistant/assistant.component.ts @@ -1362,7 +1370,7 @@ Max apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 221 + 224 libs/ui/src/lib/assistant/assistant.component.ts @@ -1374,7 +1382,7 @@ Cette fonctionnalité est momentanément indisponible. apps/client/src/app/core/http-response.interceptor.ts - 55 + 52 @@ -1382,15 +1390,15 @@ Veuillez réessayer plus tard. apps/client/src/app/core/http-response.interceptor.ts - 57 + 54 apps/client/src/app/core/http-response.interceptor.ts - 88 + 85 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 191 + 192 @@ -1398,11 +1406,11 @@ Oups! Quelque chose s’est mal passé. apps/client/src/app/core/http-response.interceptor.ts - 86 + 83 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 189 + 190 @@ -1414,11 +1422,11 @@ apps/client/src/app/core/http-response.interceptor.ts - 89 + 86 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 192 + 193 @@ -1430,11 +1438,11 @@ apps/client/src/app/components/header/header.component.html - 124 + 125 apps/client/src/app/components/header/header.component.html - 370 + 375 apps/client/src/app/pages/about/overview/about-overview-page.routes.ts @@ -1466,7 +1474,7 @@ Mon Ghostfolio apps/client/src/app/components/header/header.component.html - 276 + 280 apps/client/src/app/pages/user-account/user-account-page.routes.ts @@ -1501,6 +1509,14 @@ 174 + + Consumer Defensive + Consumer Defensive + + libs/ui/src/lib/i18n.ts + 89 + + Coupon code has been redeemed Le code promotionnel a été appliqué @@ -1561,6 +1577,14 @@ 67 + + Utilities + Utilities + + libs/ui/src/lib/i18n.ts + 97 + + Presenter View Vue de Présentation @@ -1590,7 +1614,7 @@ Paramètres régionaux apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 510 + 515 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -1710,15 +1734,15 @@ apps/client/src/app/components/header/header.component.html - 58 + 59 apps/client/src/app/components/header/header.component.html - 267 + 271 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 378 + 383 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -1766,7 +1790,7 @@ Données du marché apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 400 + 405 libs/common/src/lib/routes/routes.ts @@ -1778,11 +1802,11 @@ Contrôle Admin apps/client/src/app/components/header/header.component.html - 74 + 75 apps/client/src/app/components/header/header.component.html - 287 + 291 libs/common/src/lib/routes/routes.ts @@ -1958,7 +1982,7 @@ apps/client/src/app/components/header/header.component.html - 356 + 361 apps/client/src/app/pages/features/features-page.html @@ -2014,7 +2038,7 @@ Marchés apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 381 + 386 apps/client/src/app/components/footer/footer.component.html @@ -2022,7 +2046,7 @@ apps/client/src/app/components/header/header.component.html - 403 + 408 apps/client/src/app/components/home-market/home-market.html @@ -2090,7 +2114,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 342 + 347 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2122,7 +2146,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 201 + 204 @@ -2146,7 +2170,7 @@ libs/ui/src/lib/i18n.ts - 41 + 43 @@ -2169,6 +2193,14 @@ 119 + + Consumer Cyclical + Consumer Cyclical + + libs/ui/src/lib/i18n.ts + 88 + + Unit Price Prix Unitaire @@ -2186,7 +2218,7 @@ Import des données... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 171 + 172 @@ -2194,7 +2226,7 @@ L’import est terminé apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 181 + 182 @@ -2210,7 +2242,7 @@ Validation des données... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 291 + 293 @@ -2350,7 +2382,7 @@ libs/ui/src/lib/i18n.ts - 16 + 18 @@ -2442,11 +2474,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 78 libs/ui/src/lib/i18n.ts - 37 + 39 @@ -2470,7 +2502,7 @@ Mensuel apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 92 @@ -2486,7 +2518,7 @@ Bas apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 352 + 354 @@ -2494,7 +2526,7 @@ Évolution du Portefeuille apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 405 + 409 @@ -2502,7 +2534,7 @@ Historique des Investissements apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 434 + 438 @@ -2510,7 +2542,7 @@ Historique des Dividendes apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 493 + 497 @@ -2538,15 +2570,15 @@ apps/client/src/app/components/header/header.component.html - 105 + 106 apps/client/src/app/components/header/header.component.html - 309 + 314 apps/client/src/app/components/header/header.component.html - 384 + 389 apps/client/src/app/pages/pricing/pricing-page.routes.ts @@ -2598,7 +2630,7 @@ Démarrer apps/client/src/app/components/header/header.component.html - 432 + 437 apps/client/src/app/pages/features/features-page.html @@ -2686,11 +2718,11 @@ apps/client/src/app/components/header/header.component.html - 88 + 89 apps/client/src/app/components/header/header.component.html - 297 + 301 apps/client/src/app/pages/resources/overview/resources-overview.component.html @@ -2742,7 +2774,7 @@ apps/client/src/app/components/header/header.component.html - 247 + 251 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2778,7 +2810,7 @@ Importer Activités apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 93 + 94 libs/ui/src/lib/activities-table/activities-table.component.html @@ -2842,7 +2874,7 @@ Différence avec le Record Historique libs/ui/src/lib/benchmark/benchmark.component.html - 117 + 128 @@ -2858,7 +2890,7 @@ par rapport au record historique libs/ui/src/lib/benchmark/benchmark.component.html - 119 + 130 @@ -2894,7 +2926,7 @@ libs/ui/src/lib/i18n.ts - 39 + 41 @@ -2914,7 +2946,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 117 + 122 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -2930,7 +2962,7 @@ Montrer tout libs/ui/src/lib/holdings-table/holdings-table.component.html - 212 + 217 @@ -2946,7 +2978,7 @@ libs/ui/src/lib/i18n.ts - 4 + 6 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html @@ -2966,7 +2998,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 327 + 332 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2978,11 +3010,11 @@ libs/ui/src/lib/i18n.ts - 6 + 8 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html - 64 + 65 @@ -2998,7 +3030,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 343 + 348 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -3010,7 +3042,7 @@ libs/ui/src/lib/i18n.ts - 7 + 9 @@ -3026,7 +3058,7 @@ libs/ui/src/lib/i18n.ts - 15 + 17 @@ -3034,11 +3066,15 @@ Autre libs/ui/src/lib/i18n.ts - 24 + 26 + + + libs/ui/src/lib/i18n.ts + 94 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 451 + 449 @@ -3062,11 +3098,11 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 314 + 319 libs/ui/src/lib/i18n.ts - 29 + 31 @@ -3074,11 +3110,11 @@ Étiquette libs/ui/src/lib/i18n.ts - 30 + 32 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html - 53 + 54 @@ -3090,7 +3126,7 @@ libs/ui/src/lib/i18n.ts - 54 + 56 @@ -3098,7 +3134,7 @@ Marchandise libs/ui/src/lib/i18n.ts - 46 + 48 @@ -3110,7 +3146,7 @@ libs/ui/src/lib/i18n.ts - 47 + 49 @@ -3118,7 +3154,7 @@ Revenu Fixe libs/ui/src/lib/i18n.ts - 48 + 50 @@ -3126,7 +3162,11 @@ Immobilier libs/ui/src/lib/i18n.ts - 50 + 52 + + + libs/ui/src/lib/i18n.ts + 95 @@ -3142,7 +3182,7 @@ Obligation libs/ui/src/lib/i18n.ts - 53 + 55 @@ -3150,7 +3190,7 @@ Cryptomonnaie libs/ui/src/lib/i18n.ts - 56 + 58 @@ -3158,7 +3198,7 @@ ETF libs/ui/src/lib/i18n.ts - 57 + 59 @@ -3166,7 +3206,7 @@ SICAV libs/ui/src/lib/i18n.ts - 59 + 61 @@ -3174,7 +3214,7 @@ Métal Précieux libs/ui/src/lib/i18n.ts - 60 + 62 @@ -3182,7 +3222,7 @@ Capital Propre libs/ui/src/lib/i18n.ts - 61 + 63 @@ -3190,7 +3230,7 @@ Action libs/ui/src/lib/i18n.ts - 62 + 64 @@ -3198,7 +3238,7 @@ Afrique libs/ui/src/lib/i18n.ts - 69 + 71 @@ -3206,7 +3246,15 @@ Asie libs/ui/src/lib/i18n.ts - 70 + 72 + + + + Communication Services + Communication Services + + libs/ui/src/lib/i18n.ts + 87 @@ -3214,7 +3262,7 @@ Europe libs/ui/src/lib/i18n.ts - 71 + 73 @@ -3222,7 +3270,7 @@ Amérique du Nord libs/ui/src/lib/i18n.ts - 72 + 74 @@ -3238,7 +3286,7 @@ Océanie libs/ui/src/lib/i18n.ts - 73 + 75 @@ -3246,7 +3294,7 @@ Amérique du Sud libs/ui/src/lib/i18n.ts - 74 + 76 @@ -3270,15 +3318,15 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 209 + 220 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 453 + 451 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 467 + 465 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -3310,7 +3358,7 @@ Annuel apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 93 @@ -3318,7 +3366,7 @@ Importer Dividendes apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 132 + 133 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3346,7 +3394,7 @@ Core libs/ui/src/lib/i18n.ts - 10 + 12 @@ -3354,7 +3402,7 @@ Donner libs/ui/src/lib/i18n.ts - 18 + 20 @@ -3362,7 +3410,7 @@ Risque élevé libs/ui/src/lib/i18n.ts - 19 + 21 @@ -3370,7 +3418,7 @@ Risque faible libs/ui/src/lib/i18n.ts - 21 + 23 @@ -3378,7 +3426,7 @@ No Activities apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 145 + 150 @@ -3386,7 +3434,7 @@ Réserve pour retraite libs/ui/src/lib/i18n.ts - 27 + 29 @@ -3402,7 +3450,7 @@ Satellite libs/ui/src/lib/i18n.ts - 28 + 30 @@ -3526,7 +3574,7 @@ Mettre à niveau l’Abonnement apps/client/src/app/components/header/header.component.html - 193 + 197 apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html @@ -3654,11 +3702,11 @@ Could not save asset profile apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 628 + 634 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 631 + 637 @@ -3726,7 +3774,7 @@ Passez à Ghostfolio Premium facilement libs/ui/src/lib/i18n.ts - 13 + 15 @@ -3750,7 +3798,7 @@ Passez à Ghostfolio Premium ou Ghostfolio Open Source facilement libs/ui/src/lib/i18n.ts - 12 + 14 @@ -3758,7 +3806,7 @@ Loan libs/ui/src/lib/i18n.ts - 58 + 60 @@ -3802,7 +3850,7 @@ Renouveler l’Abonnement apps/client/src/app/components/header/header.component.html - 191 + 195 apps/client/src/app/components/user-account-membership/user-account-membership.html @@ -3882,7 +3930,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 209 + 212 @@ -3898,11 +3946,11 @@ Lien apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 420 + 425 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 551 + 556 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -3918,7 +3966,7 @@ Asset profile has been saved apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 618 + 624 @@ -3926,7 +3974,7 @@ Voulez-vous vraiment supprimer cette plateforme ? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 111 + 115 @@ -3998,7 +4046,7 @@ Cette activité existe déjà. libs/ui/src/lib/i18n.ts - 20 + 22 @@ -4062,7 +4110,7 @@ Série en cours apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 455 + 459 @@ -4070,7 +4118,7 @@ Série la plus longue apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 464 + 468 @@ -4078,7 +4126,7 @@ Mois libs/ui/src/lib/i18n.ts - 23 + 25 @@ -4086,7 +4134,7 @@ Années libs/ui/src/lib/i18n.ts - 32 + 34 @@ -4094,7 +4142,7 @@ Mois libs/ui/src/lib/i18n.ts - 22 + 24 @@ -4102,7 +4150,7 @@ Année libs/ui/src/lib/i18n.ts - 31 + 33 @@ -4262,7 +4310,15 @@ Dette libs/ui/src/lib/i18n.ts - 40 + 42 + + + + Technology + Technology + + libs/ui/src/lib/i18n.ts + 96 @@ -4278,7 +4334,7 @@ Configuration du Scraper apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 472 + 477 @@ -4506,7 +4562,7 @@ libs/ui/src/lib/i18n.ts - 36 + 38 @@ -4514,7 +4570,7 @@ Actifs libs/ui/src/lib/i18n.ts - 42 + 44 @@ -4522,7 +4578,7 @@ ETF sans Pays apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 135 + 140 @@ -4530,7 +4586,7 @@ ETF sans Secteurs apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 140 + 145 @@ -4546,7 +4602,7 @@ Configuration par défaut libs/ui/src/lib/i18n.ts - 26 + 28 @@ -4562,15 +4618,7 @@ Asie-Pacifique libs/ui/src/lib/i18n.ts - 5 - - - - Japan - Japon - - libs/ui/src/lib/i18n.ts - 92 + 7 @@ -4766,7 +4814,7 @@ Devises apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 130 + 135 apps/client/src/app/pages/public/public-page.html @@ -4818,11 +4866,11 @@ Could not parse scraper configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 545 + 551 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 548 + 554 @@ -4913,6 +4961,14 @@ 149 + + Basic Materials + Basic Materials + + libs/ui/src/lib/i18n.ts + 86 + + Use Ghostfolio anonymously and own your financial data. Utilisez Ghostfolio de manière anonyme et soyez propriétaire de vos données financières. @@ -5378,10 +5434,6 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts 58 - - libs/ui/src/lib/i18n.ts - 99 - Global @@ -5392,7 +5444,7 @@ libs/ui/src/lib/i18n.ts - 17 + 19 @@ -5492,7 +5544,7 @@ libs/ui/src/lib/i18n.ts - 38 + 40 @@ -5516,7 +5568,7 @@ Confirmez la suppression de ce tag ? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 108 + 117 @@ -5624,7 +5676,7 @@ Confirmez la suppressoion de ce profil d’actif? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 37 + 28 @@ -5635,6 +5687,14 @@ 16 + + Industrials + Industrials + + libs/ui/src/lib/i18n.ts + 93 + + Add Manually Ajouter manuellement @@ -5664,7 +5724,7 @@ Dernier All Time High libs/ui/src/lib/benchmark/benchmark.component.html - 90 + 101 @@ -5708,7 +5768,7 @@ Oops, échec du transfert de la cash balance. apps/client/src/app/pages/accounts/accounts-page.component.ts - 341 + 337 @@ -5716,7 +5776,7 @@ Extreme Peur libs/ui/src/lib/i18n.ts - 106 + 79 @@ -5724,7 +5784,7 @@ Extreme Cupidité libs/ui/src/lib/i18n.ts - 107 + 80 @@ -5732,7 +5792,7 @@ Neutre libs/ui/src/lib/i18n.ts - 110 + 83 @@ -5743,6 +5803,14 @@ 284 + + Healthcare + Healthcare + + libs/ui/src/lib/i18n.ts + 92 + + Do you really want to delete this system message? Confirmer la suppresion de ce message système? @@ -5756,7 +5824,7 @@ Tendance 50 jours libs/ui/src/lib/benchmark/benchmark.component.html - 32 + 43 @@ -5764,7 +5832,7 @@ Tendance 200 jours libs/ui/src/lib/benchmark/benchmark.component.html - 61 + 72 @@ -5772,7 +5840,7 @@ Cash Balances apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 142 + 145 @@ -5808,7 +5876,7 @@ Le prix actuel du marché est apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 743 + 749 @@ -5816,7 +5884,7 @@ Test apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 569 + 574 @@ -5856,15 +5924,7 @@ Oops! Impossible d’accorder l’accès. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 144 - - - - Argentina - Argentina - - libs/ui/src/lib/i18n.ts - 78 + 151 @@ -5888,7 +5948,7 @@ Les données du marché sont retardées de apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts - 94 + 92 @@ -5904,11 +5964,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 80 + 82 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 96 + 98 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5928,7 +5988,7 @@ Close Holding apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 442 + 447 @@ -5976,7 +6036,7 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 201 + 204 libs/ui/src/lib/assistant/assistant.component.ts @@ -5996,7 +6056,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 205 + 208 libs/ui/src/lib/assistant/assistant.component.ts @@ -6044,7 +6104,7 @@ année apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 213 + 216 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6064,7 +6124,7 @@ années apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 217 + 220 libs/ui/src/lib/assistant/assistant.component.ts @@ -6084,7 +6144,7 @@ Collecter les données apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 592 + 597 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6149,7 +6209,7 @@ Oops! Il semble que vous fassiez trop de requêtes. Veuillez ralentir un peu. apps/client/src/app/core/http-response.interceptor.ts - 106 + 103 @@ -6176,14 +6236,6 @@ 62 - - Indonesia - Indonesia - - libs/ui/src/lib/i18n.ts - 90 - - Activity Activitées @@ -6221,7 +6273,7 @@ Cette action n’est pas autorisée. apps/client/src/app/core/http-response.interceptor.ts - 67 + 64 @@ -6229,7 +6281,7 @@ Liquiditées libs/ui/src/lib/i18n.ts - 49 + 51 @@ -6245,7 +6297,7 @@ Achat et Vente libs/ui/src/lib/i18n.ts - 8 + 10 @@ -6325,7 +6377,7 @@ Include in apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 377 + 382 @@ -6349,7 +6401,7 @@ Benchmarks apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 125 + 130 @@ -6365,7 +6417,7 @@ Confirmer la suppression de ces Profils? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 68 + 59 @@ -6373,7 +6425,7 @@ Oops! Echec de la suppression de Profils. apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 56 + 47 @@ -6572,38 +6624,6 @@ 100 - - Australia - Australie - - libs/ui/src/lib/i18n.ts - 79 - - - - Austria - Autriche - - libs/ui/src/lib/i18n.ts - 80 - - - - Belgium - Belgique - - libs/ui/src/lib/i18n.ts - 81 - - - - Bulgaria - Bulgarie - - libs/ui/src/lib/i18n.ts - 83 - - View Holding View Holding @@ -6612,124 +6632,12 @@ 474 - - Canada - Canada - - libs/ui/src/lib/i18n.ts - 84 - - - - Czech Republic - République Tchèque - - libs/ui/src/lib/i18n.ts - 85 - - - - Finland - Finlande - - libs/ui/src/lib/i18n.ts - 86 - - - - France - France - - libs/ui/src/lib/i18n.ts - 87 - - - - Germany - Allemagne - - libs/ui/src/lib/i18n.ts - 88 - - - - India - Inde - - libs/ui/src/lib/i18n.ts - 89 - - - - Italy - Italie - - libs/ui/src/lib/i18n.ts - 91 - - - - Netherlands - Pays-Bas - - libs/ui/src/lib/i18n.ts - 93 - - - - New Zealand - Nouvelle-Zélande - - libs/ui/src/lib/i18n.ts - 94 - - - - Poland - Pologne - - libs/ui/src/lib/i18n.ts - 95 - - - - Romania - Roumanie - - libs/ui/src/lib/i18n.ts - 96 - - - - South Africa - Afrique du Sud - - libs/ui/src/lib/i18n.ts - 98 - - - - Thailand - Thaïlande - - libs/ui/src/lib/i18n.ts - 100 - - - - United States - Etats-Unis - - libs/ui/src/lib/i18n.ts - 103 - - Error Erreur apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 734 + 740 @@ -6753,7 +6661,7 @@ 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 - 181 + 194 @@ -6781,7 +6689,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 597 + 602 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6825,7 +6733,7 @@ libs/ui/src/lib/i18n.ts - 9 + 11 @@ -6833,7 +6741,7 @@ Fermer apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 599 + 604 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6873,7 +6781,7 @@ libs/ui/src/lib/i18n.ts - 11 + 13 @@ -6889,7 +6797,7 @@ Oui libs/ui/src/lib/i18n.ts - 33 + 35 @@ -7040,6 +6948,14 @@ 174 + + Financial Services + Financial Services + + libs/ui/src/lib/i18n.ts + 91 + + 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 @@ -7157,15 +7073,7 @@ Accédez à plus de 80 000 symboles financiers issus de plus de 50 marchés boursiers. libs/ui/src/lib/i18n.ts - 25 - - - - Ukraine - Ukraine - - libs/ui/src/lib/i18n.ts - 101 + 27 @@ -7371,7 +7279,7 @@ Sauvegarder apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 608 + 613 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7419,11 +7327,11 @@ Moi apps/client/src/app/components/header/header.component.html - 213 + 217 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 250 + 254 @@ -7463,7 +7371,7 @@ Le prompt IA a été copié dans le presse-papiers apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 211 @@ -7479,7 +7387,7 @@ Paresseux apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 235 + 239 @@ -7487,7 +7395,7 @@ Instantané apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 239 + 243 @@ -7495,7 +7403,7 @@ Prix du marché par défaut apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 482 + 487 @@ -7503,7 +7411,7 @@ Mode apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 519 + 524 @@ -7511,7 +7419,7 @@ Selecteur apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 535 + 540 @@ -7519,7 +7427,7 @@ En-têtes de requête HTTP apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 495 + 500 @@ -7527,7 +7435,7 @@ fin de journée apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 235 + 239 @@ -7535,7 +7443,7 @@ temps réel apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 239 + 243 @@ -7543,7 +7451,7 @@ Ouvrir Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 212 @@ -7559,7 +7467,7 @@ Variation libs/ui/src/lib/holdings-table/holdings-table.component.html - 138 + 143 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7575,11 +7483,11 @@ apps/client/src/app/components/home-overview/home-overview.component.ts - 52 + 53 libs/ui/src/lib/holdings-table/holdings-table.component.html - 161 + 166 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7622,30 +7530,6 @@ 94 - - Armenia - Arménie - - libs/ui/src/lib/i18n.ts - 77 - - - - British Virgin Islands - Îles Vierges britanniques - - libs/ui/src/lib/i18n.ts - 82 - - - - Singapore - Singapour - - libs/ui/src/lib/i18n.ts - 97 - - Terms and Conditions Conditions générales @@ -7691,11 +7575,11 @@ Jeton de sécurité apps/client/src/app/components/admin-users/admin-users.component.ts - 235 + 256 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 167 + 179 @@ -7703,7 +7587,7 @@ Voulez-vous vraiment générer un nouveau jeton de sécurité pour cet utilisateur ? apps/client/src/app/components/admin-users/admin-users.component.ts - 240 + 261 @@ -7714,14 +7598,6 @@ 239 - - United Kingdom - Royaume-Uni - - libs/ui/src/lib/i18n.ts - 102 - - Terms of Service Conditions d’utilisation @@ -7768,7 +7644,7 @@ () est déjà utilisé. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 675 + 681 @@ -7776,7 +7652,7 @@ Une erreur s’est produite lors de la mise à jour vers (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 683 + 689 @@ -7840,7 +7716,7 @@ quelqu’un apps/client/src/app/pages/public/public-page.component.ts - 62 + 63 @@ -7872,7 +7748,7 @@ Voulez-vous vraiment supprimer cet élément? libs/ui/src/lib/benchmark/benchmark.component.ts - 137 + 141 @@ -7880,7 +7756,7 @@ Se déconnecter apps/client/src/app/components/header/header.component.html - 325 + 330 @@ -8127,7 +8003,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 205 + 208 @@ -8292,7 +8168,7 @@ Voulez-vous vraiment générer un nouveau jeton de sécurité? apps/client/src/app/components/user-account-access/user-account-access.component.ts - 172 + 184 @@ -8348,7 +8224,7 @@ Gérer le profil d’actif apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 467 + 472 @@ -8356,7 +8232,7 @@ Investissement alternatif libs/ui/src/lib/i18n.ts - 45 + 47 @@ -8364,7 +8240,7 @@ Objet de collection libs/ui/src/lib/i18n.ts - 55 + 57 @@ -8372,7 +8248,7 @@ Average Unit Price apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 113 + 117 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html diff --git a/apps/client/src/locales/messages.it.xlf b/apps/client/src/locales/messages.it.xlf index 7496bb8f9..82844588f 100644 --- a/apps/client/src/locales/messages.it.xlf +++ b/apps/client/src/locales/messages.it.xlf @@ -111,7 +111,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 310 + 315 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -151,11 +151,11 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 12 + 23 libs/ui/src/lib/holdings-table/holdings-table.component.html - 23 + 28 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -215,7 +215,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 93 + 98 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -295,7 +295,7 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 176 + 187 @@ -335,7 +335,7 @@ libs/ui/src/lib/i18n.ts - 14 + 16 @@ -403,7 +403,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 449 + 454 @@ -499,7 +499,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 45 + 50 @@ -631,7 +631,7 @@ Vuoi davvero eliminare questo utente? apps/client/src/app/components/admin-users/admin-users.component.ts - 215 + 236 @@ -647,7 +647,7 @@ apps/client/src/app/components/header/header.component.html - 231 + 235 @@ -691,7 +691,7 @@ Informazioni su Ghostfolio apps/client/src/app/components/header/header.component.html - 322 + 327 apps/client/src/app/pages/about/overview/about-overview-page.html @@ -703,7 +703,7 @@ Inizia apps/client/src/app/components/header/header.component.html - 432 + 437 apps/client/src/app/pages/features/features-page.html @@ -735,11 +735,11 @@ Accedi apps/client/src/app/components/header/header.component.html - 421 + 426 apps/client/src/app/components/header/header.component.ts - 296 + 305 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -759,11 +759,11 @@ Ops! Token di sicurezza errato. apps/client/src/app/components/header/header.component.ts - 311 + 320 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 152 + 164 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts @@ -870,6 +870,14 @@ 46 + + Energy + Energy + + libs/ui/src/lib/i18n.ts + 90 + + Stay signed in Rimani connesso @@ -963,15 +971,15 @@ Settori apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 279 + 284 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 398 + 403 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 282 + 287 apps/client/src/app/pages/public/public-page.html @@ -983,15 +991,15 @@ Paesi apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 289 + 294 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 409 + 414 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 294 + 299 @@ -1015,7 +1023,7 @@ Segnala un’anomalia dei dati apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 452 + 457 @@ -1027,7 +1035,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 117 + 122 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -1043,7 +1051,7 @@ Mostra tutti libs/ui/src/lib/holdings-table/holdings-table.component.html - 212 + 217 @@ -1063,7 +1071,7 @@ anno corrente apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 209 + 212 libs/ui/src/lib/assistant/assistant.component.ts @@ -1075,7 +1083,7 @@ 1 anno apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 213 + 216 libs/ui/src/lib/assistant/assistant.component.ts @@ -1087,7 +1095,7 @@ 5 anni apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 217 + 220 libs/ui/src/lib/assistant/assistant.component.ts @@ -1107,7 +1115,7 @@ Massimo apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 221 + 224 libs/ui/src/lib/assistant/assistant.component.ts @@ -1123,11 +1131,11 @@ apps/client/src/app/core/http-response.interceptor.ts - 89 + 86 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 192 + 193 @@ -1139,11 +1147,11 @@ apps/client/src/app/components/header/header.component.html - 124 + 125 apps/client/src/app/components/header/header.component.html - 370 + 375 apps/client/src/app/pages/about/overview/about-overview-page.routes.ts @@ -1175,7 +1183,7 @@ Il mio Ghostfolio apps/client/src/app/components/header/header.component.html - 276 + 280 apps/client/src/app/pages/user-account/user-account-page.routes.ts @@ -1198,6 +1206,14 @@ 174 + + Consumer Defensive + Consumer Defensive + + libs/ui/src/lib/i18n.ts + 89 + + Coupon code has been redeemed Il codice del buono è stato riscattato @@ -1258,6 +1274,14 @@ 67 + + Utilities + Utilities + + libs/ui/src/lib/i18n.ts + 97 + + Presenter View Vista presentatore @@ -1279,7 +1303,7 @@ Locale apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 510 + 515 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -1367,15 +1391,15 @@ apps/client/src/app/components/header/header.component.html - 58 + 59 apps/client/src/app/components/header/header.component.html - 267 + 271 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 378 + 383 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -1419,7 +1443,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 317 + 322 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -1487,11 +1511,11 @@ Controllo amministrativo apps/client/src/app/components/header/header.component.html - 74 + 75 apps/client/src/app/components/header/header.component.html - 287 + 291 libs/common/src/lib/routes/routes.ts @@ -1655,7 +1679,7 @@ apps/client/src/app/components/header/header.component.html - 356 + 361 apps/client/src/app/pages/features/features-page.html @@ -1683,7 +1707,7 @@ apps/client/src/app/components/header/header.component.html - 247 + 251 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1711,7 +1735,7 @@ Mercati apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 381 + 386 apps/client/src/app/components/footer/footer.component.html @@ -1719,7 +1743,7 @@ apps/client/src/app/components/header/header.component.html - 403 + 408 apps/client/src/app/components/home-market/home-market.html @@ -1855,7 +1879,7 @@ Cronologia degli investimenti apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 434 + 438 @@ -1871,7 +1895,7 @@ In basso apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 352 + 354 @@ -1931,7 +1955,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 201 + 204 @@ -1955,7 +1979,7 @@ libs/ui/src/lib/i18n.ts - 41 + 43 @@ -1978,6 +2002,14 @@ 119 + + Consumer Cyclical + Consumer Cyclical + + libs/ui/src/lib/i18n.ts + 88 + + Quantity Quantità @@ -1995,7 +2027,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 69 + 74 @@ -2015,7 +2047,7 @@ Nota apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 433 + 438 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -2059,7 +2091,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 342 + 347 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2083,7 +2115,7 @@ Importazione dei dati... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 171 + 172 @@ -2091,7 +2123,7 @@ L’importazione è stata completata apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 181 + 182 @@ -2111,15 +2143,15 @@ apps/client/src/app/components/header/header.component.html - 105 + 106 apps/client/src/app/components/header/header.component.html - 309 + 314 apps/client/src/app/components/header/header.component.html - 384 + 389 apps/client/src/app/pages/pricing/pricing-page.routes.ts @@ -2139,15 +2171,15 @@ Portafoglio apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 140 + 143 apps/client/src/app/components/header/header.component.html - 44 + 45 apps/client/src/app/components/header/header.component.html - 257 + 261 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -2223,11 +2255,11 @@ apps/client/src/app/components/header/header.component.html - 88 + 89 apps/client/src/app/components/header/header.component.html - 297 + 301 apps/client/src/app/pages/resources/overview/resources-overview.component.html @@ -2275,7 +2307,7 @@ Importa le attività apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 93 + 94 libs/ui/src/lib/activities-table/activities-table.component.html @@ -2339,7 +2371,7 @@ Variazione rispetto al massimo storico (ATH) libs/ui/src/lib/benchmark/benchmark.component.html - 117 + 128 @@ -2355,7 +2387,7 @@ dal massimo storico (ATH) libs/ui/src/lib/benchmark/benchmark.component.html - 119 + 130 @@ -2387,7 +2419,7 @@ Questa funzionalità non è attualmente disponibile. apps/client/src/app/core/http-response.interceptor.ts - 55 + 52 @@ -2395,11 +2427,11 @@ Ops! Qualcosa è andato storto. apps/client/src/app/core/http-response.interceptor.ts - 86 + 83 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 189 + 190 @@ -2407,15 +2439,15 @@ Riprova più tardi. apps/client/src/app/core/http-response.interceptor.ts - 57 + 54 apps/client/src/app/core/http-response.interceptor.ts - 88 + 85 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 191 + 192 @@ -2427,7 +2459,7 @@ libs/ui/src/lib/i18n.ts - 16 + 18 @@ -2499,7 +2531,7 @@ Paese apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 273 + 278 apps/client/src/app/components/admin-users/admin-users.html @@ -2507,7 +2539,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 276 + 281 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2555,7 +2587,7 @@ libs/ui/src/lib/i18n.ts - 39 + 41 @@ -2579,7 +2611,7 @@ Mensile apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 92 @@ -2603,7 +2635,7 @@ Paura apps/client/src/app/components/home-market/home-market.component.ts - 41 + 46 apps/client/src/app/components/markets/markets.component.ts @@ -2611,7 +2643,7 @@ libs/ui/src/lib/i18n.ts - 108 + 81 @@ -2619,7 +2651,7 @@ Avidità apps/client/src/app/components/home-market/home-market.component.ts - 42 + 47 apps/client/src/app/components/markets/markets.component.ts @@ -2627,7 +2659,7 @@ libs/ui/src/lib/i18n.ts - 109 + 82 @@ -2635,7 +2667,7 @@ Filtra per... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 368 + 374 @@ -2671,11 +2703,11 @@ Benchmark apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 379 + 384 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 152 + 155 @@ -2683,11 +2715,11 @@ Could not validate form apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 594 + 600 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 597 + 603 @@ -2763,7 +2795,7 @@ Evoluzione del portafoglio apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 405 + 409 @@ -2795,7 +2827,7 @@ libs/ui/src/lib/i18n.ts - 4 + 6 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html @@ -2815,7 +2847,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 327 + 332 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2827,11 +2859,11 @@ libs/ui/src/lib/i18n.ts - 6 + 8 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html - 64 + 65 @@ -2855,11 +2887,11 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 314 + 319 libs/ui/src/lib/i18n.ts - 29 + 31 @@ -2867,11 +2899,11 @@ Etichetta libs/ui/src/lib/i18n.ts - 30 + 32 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html - 53 + 54 @@ -2883,7 +2915,7 @@ libs/ui/src/lib/i18n.ts - 54 + 56 @@ -2891,7 +2923,7 @@ Materia prima libs/ui/src/lib/i18n.ts - 46 + 48 @@ -2903,7 +2935,7 @@ libs/ui/src/lib/i18n.ts - 47 + 49 @@ -2911,7 +2943,7 @@ Reddito fisso libs/ui/src/lib/i18n.ts - 48 + 50 @@ -2919,7 +2951,11 @@ Immobiliare libs/ui/src/lib/i18n.ts - 50 + 52 + + + libs/ui/src/lib/i18n.ts + 95 @@ -2935,7 +2971,7 @@ Obbligazioni libs/ui/src/lib/i18n.ts - 53 + 55 @@ -2943,7 +2979,7 @@ Criptovaluta libs/ui/src/lib/i18n.ts - 56 + 58 @@ -2951,7 +2987,7 @@ ETF libs/ui/src/lib/i18n.ts - 57 + 59 @@ -2959,7 +2995,7 @@ Fondo comune di investimento libs/ui/src/lib/i18n.ts - 59 + 61 @@ -2967,7 +3003,7 @@ Metalli preziosi libs/ui/src/lib/i18n.ts - 60 + 62 @@ -2975,7 +3011,7 @@ Azione ordinaria privata libs/ui/src/lib/i18n.ts - 61 + 63 @@ -2983,7 +3019,7 @@ Azione libs/ui/src/lib/i18n.ts - 62 + 64 @@ -2999,7 +3035,7 @@ libs/ui/src/lib/i18n.ts - 15 + 17 @@ -3007,11 +3043,15 @@ Altro libs/ui/src/lib/i18n.ts - 24 + 26 + + + libs/ui/src/lib/i18n.ts + 94 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 451 + 449 @@ -3027,15 +3067,15 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 209 + 220 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 453 + 451 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 467 + 465 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -3047,7 +3087,7 @@ Nord America libs/ui/src/lib/i18n.ts - 72 + 74 @@ -3055,7 +3095,7 @@ Africa libs/ui/src/lib/i18n.ts - 69 + 71 @@ -3063,7 +3103,15 @@ Asia libs/ui/src/lib/i18n.ts - 70 + 72 + + + + Communication Services + Communication Services + + libs/ui/src/lib/i18n.ts + 87 @@ -3071,7 +3119,7 @@ Europa libs/ui/src/lib/i18n.ts - 71 + 73 @@ -3087,7 +3135,7 @@ Oceania libs/ui/src/lib/i18n.ts - 73 + 75 @@ -3095,7 +3143,7 @@ Sud America libs/ui/src/lib/i18n.ts - 74 + 76 @@ -3139,7 +3187,7 @@ Mappatura dei simboli apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 387 + 392 @@ -3175,11 +3223,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 78 libs/ui/src/lib/i18n.ts - 37 + 39 @@ -3187,7 +3235,7 @@ Cronologia dei dividendi apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 493 + 497 @@ -3203,7 +3251,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 343 + 348 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -3215,7 +3263,7 @@ libs/ui/src/lib/i18n.ts - 7 + 9 @@ -3231,7 +3279,7 @@ Convalida dei dati... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 291 + 293 @@ -3255,7 +3303,7 @@ Dati del mercato apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 400 + 405 libs/common/src/lib/routes/routes.ts @@ -3311,7 +3359,7 @@ Annuale apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 93 @@ -3319,7 +3367,7 @@ Importa i dividendi apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 132 + 133 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3347,7 +3395,7 @@ Nucleo libs/ui/src/lib/i18n.ts - 10 + 12 @@ -3355,7 +3403,7 @@ Sovvenzione libs/ui/src/lib/i18n.ts - 18 + 20 @@ -3363,7 +3411,7 @@ Rischio più elevato libs/ui/src/lib/i18n.ts - 19 + 21 @@ -3371,7 +3419,7 @@ Rischio inferiore libs/ui/src/lib/i18n.ts - 21 + 23 @@ -3379,7 +3427,7 @@ No Activities apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 145 + 150 @@ -3387,7 +3435,7 @@ Fondo pensione libs/ui/src/lib/i18n.ts - 27 + 29 @@ -3403,7 +3451,7 @@ Satellite libs/ui/src/lib/i18n.ts - 28 + 30 @@ -3527,7 +3575,7 @@ Aggiorna il piano apps/client/src/app/components/header/header.component.html - 193 + 197 apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html @@ -3655,11 +3703,11 @@ Could not save asset profile apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 628 + 634 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 631 + 637 @@ -3727,7 +3775,7 @@ Passa facilmente a Ghostfolio Premium libs/ui/src/lib/i18n.ts - 13 + 15 @@ -3751,7 +3799,7 @@ Passa facilmente a Ghostfolio Premium o Ghostfolio Open Source libs/ui/src/lib/i18n.ts - 12 + 14 @@ -3759,7 +3807,7 @@ Loan libs/ui/src/lib/i18n.ts - 58 + 60 @@ -3803,7 +3851,7 @@ Rinnova il piano apps/client/src/app/components/header/header.component.html - 191 + 195 apps/client/src/app/components/user-account-membership/user-account-membership.html @@ -3883,7 +3931,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 209 + 212 @@ -3899,11 +3947,11 @@ Url apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 420 + 425 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 551 + 556 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -3919,7 +3967,7 @@ Asset profile has been saved apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 618 + 624 @@ -3927,7 +3975,7 @@ Vuoi davvero eliminare questa piattaforma? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 111 + 115 @@ -3999,7 +4047,7 @@ Questa attività esiste già. libs/ui/src/lib/i18n.ts - 20 + 22 @@ -4063,7 +4111,7 @@ Serie attuale apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 455 + 459 @@ -4071,7 +4119,7 @@ Serie più lunga apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 464 + 468 @@ -4079,7 +4127,7 @@ Mesi libs/ui/src/lib/i18n.ts - 23 + 25 @@ -4087,7 +4135,7 @@ Anni libs/ui/src/lib/i18n.ts - 32 + 34 @@ -4095,7 +4143,7 @@ Mese libs/ui/src/lib/i18n.ts - 22 + 24 @@ -4103,7 +4151,7 @@ Anno libs/ui/src/lib/i18n.ts - 31 + 33 @@ -4263,7 +4311,15 @@ Passività libs/ui/src/lib/i18n.ts - 40 + 42 + + + + Technology + Technology + + libs/ui/src/lib/i18n.ts + 96 @@ -4279,7 +4335,7 @@ Configurazione dello scraper apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 472 + 477 @@ -4507,7 +4563,7 @@ libs/ui/src/lib/i18n.ts - 36 + 38 @@ -4515,7 +4571,7 @@ Prezioso libs/ui/src/lib/i18n.ts - 42 + 44 @@ -4523,7 +4579,7 @@ ETF senza paesi apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 135 + 140 @@ -4531,7 +4587,7 @@ ETF senza settori apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 140 + 145 @@ -4547,7 +4603,7 @@ Preimpostato libs/ui/src/lib/i18n.ts - 26 + 28 @@ -4563,15 +4619,7 @@ Asia e Pacifico libs/ui/src/lib/i18n.ts - 5 - - - - Japan - Giappone - - libs/ui/src/lib/i18n.ts - 92 + 7 @@ -4767,7 +4815,7 @@ Valute apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 130 + 135 apps/client/src/app/pages/public/public-page.html @@ -4819,11 +4867,11 @@ Could not parse scraper configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 545 + 551 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 548 + 554 @@ -4914,6 +4962,14 @@ 149 + + Basic Materials + Basic Materials + + libs/ui/src/lib/i18n.ts + 86 + + Use Ghostfolio anonymously and own your financial data. Usa Ghostfolio in modo anonimo e possiedi i tuoi dati finanziari. @@ -5379,10 +5435,6 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts 58 - - libs/ui/src/lib/i18n.ts - 99 - Global @@ -5393,7 +5445,7 @@ libs/ui/src/lib/i18n.ts - 17 + 19 @@ -5493,7 +5545,7 @@ libs/ui/src/lib/i18n.ts - 38 + 40 @@ -5517,7 +5569,7 @@ Sei sicuro di voler eliminare questo tag? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 108 + 117 @@ -5625,7 +5677,7 @@ Vuoi veramente eliminare il profilo di questo asset? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 37 + 28 @@ -5636,6 +5688,14 @@ 16 + + Industrials + Industrials + + libs/ui/src/lib/i18n.ts + 93 + + Add Manually Aggiungi manualmente @@ -5665,7 +5725,7 @@ Ultimo massimo storico libs/ui/src/lib/benchmark/benchmark.component.html - 90 + 101 @@ -5709,7 +5769,7 @@ Ops, il trasferimento del saldo di cassa è fallito. apps/client/src/app/pages/accounts/accounts-page.component.ts - 341 + 337 @@ -5717,7 +5777,7 @@ Paura estrema libs/ui/src/lib/i18n.ts - 106 + 79 @@ -5725,7 +5785,7 @@ Avidità estrema libs/ui/src/lib/i18n.ts - 107 + 80 @@ -5733,7 +5793,7 @@ Neutrale libs/ui/src/lib/i18n.ts - 110 + 83 @@ -5744,6 +5804,14 @@ 284 + + Healthcare + Healthcare + + libs/ui/src/lib/i18n.ts + 92 + + Do you really want to delete this system message? Confermi di voler cancellare questo messaggio di sistema? @@ -5757,7 +5825,7 @@ Trend a 50 giorni libs/ui/src/lib/benchmark/benchmark.component.html - 32 + 43 @@ -5765,7 +5833,7 @@ Trend a 200 giorni libs/ui/src/lib/benchmark/benchmark.component.html - 61 + 72 @@ -5773,7 +5841,7 @@ Saldi di cassa apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 142 + 145 @@ -5809,7 +5877,7 @@ L’attuale prezzo di mercato è apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 743 + 749 @@ -5817,7 +5885,7 @@ Prova apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 569 + 574 @@ -5857,15 +5925,7 @@ Ops! Impossibile abilitare l’accesso. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 144 - - - - Argentina - Argentina - - libs/ui/src/lib/i18n.ts - 78 + 151 @@ -5889,7 +5949,7 @@ I dati di mercato sono ritardati di apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts - 94 + 92 @@ -5905,11 +5965,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 80 + 82 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 96 + 98 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5929,7 +5989,7 @@ Close Holding apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 442 + 447 @@ -5977,7 +6037,7 @@ Settimana corrente apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 201 + 204 libs/ui/src/lib/assistant/assistant.component.ts @@ -5997,7 +6057,7 @@ Mese corrente apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 205 + 208 libs/ui/src/lib/assistant/assistant.component.ts @@ -6045,7 +6105,7 @@ anno apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 213 + 216 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6065,7 +6125,7 @@ anni apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 217 + 220 libs/ui/src/lib/assistant/assistant.component.ts @@ -6085,7 +6145,7 @@ Raccolta Dati apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 592 + 597 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6150,7 +6210,7 @@ Ops! Sembra tu stia facendo troppe richieste. Rallenta un po’ per favore. apps/client/src/app/core/http-response.interceptor.ts - 106 + 103 @@ -6177,14 +6237,6 @@ 62 - - Indonesia - Indonesia - - libs/ui/src/lib/i18n.ts - 90 - - Activity Attività @@ -6222,7 +6274,7 @@ Questa azione non è permessa. apps/client/src/app/core/http-response.interceptor.ts - 67 + 64 @@ -6230,7 +6282,7 @@ Liquidità libs/ui/src/lib/i18n.ts - 49 + 51 @@ -6246,7 +6298,7 @@ Compra e vendi libs/ui/src/lib/i18n.ts - 8 + 10 @@ -6326,7 +6378,7 @@ Include in apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 377 + 382 @@ -6350,7 +6402,7 @@ Benchmarks apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 125 + 130 @@ -6366,7 +6418,7 @@ Confermi di voler eliminare questi profili? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 68 + 59 @@ -6374,7 +6426,7 @@ Ops! Impossibile eliminare i profili. apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 56 + 47 @@ -6573,38 +6625,6 @@ 100 - - Australia - Australia - - libs/ui/src/lib/i18n.ts - 79 - - - - Austria - Austria - - libs/ui/src/lib/i18n.ts - 80 - - - - Belgium - Belgio - - libs/ui/src/lib/i18n.ts - 81 - - - - Bulgaria - Bulgaria - - libs/ui/src/lib/i18n.ts - 83 - - View Holding View Holding @@ -6613,124 +6633,12 @@ 474 - - Canada - Canada - - libs/ui/src/lib/i18n.ts - 84 - - - - Czech Republic - Repubblica Ceca - - libs/ui/src/lib/i18n.ts - 85 - - - - Finland - Finlandia - - libs/ui/src/lib/i18n.ts - 86 - - - - France - Francia - - libs/ui/src/lib/i18n.ts - 87 - - - - Germany - Germania - - libs/ui/src/lib/i18n.ts - 88 - - - - India - India - - libs/ui/src/lib/i18n.ts - 89 - - - - Italy - Italia - - libs/ui/src/lib/i18n.ts - 91 - - - - Netherlands - Olanda - - libs/ui/src/lib/i18n.ts - 93 - - - - New Zealand - Nuova Zelanda - - libs/ui/src/lib/i18n.ts - 94 - - - - Poland - Polonia - - libs/ui/src/lib/i18n.ts - 95 - - - - Romania - Romania - - libs/ui/src/lib/i18n.ts - 96 - - - - South Africa - Sud Africa - - libs/ui/src/lib/i18n.ts - 98 - - - - Thailand - Tailandia - - libs/ui/src/lib/i18n.ts - 100 - - - - United States - Stati Uniti - - libs/ui/src/lib/i18n.ts - 103 - - Error Errore apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 734 + 740 @@ -6754,7 +6662,7 @@ 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 - 181 + 194 @@ -6782,7 +6690,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 597 + 602 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6826,7 +6734,7 @@ libs/ui/src/lib/i18n.ts - 9 + 11 @@ -6834,7 +6742,7 @@ Chiudi apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 599 + 604 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6874,7 +6782,7 @@ libs/ui/src/lib/i18n.ts - 11 + 13 @@ -6890,7 +6798,7 @@ Si libs/ui/src/lib/i18n.ts - 33 + 35 @@ -7041,6 +6949,14 @@ 174 + + Financial Services + Financial Services + + libs/ui/src/lib/i18n.ts + 91 + + 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 @@ -7158,15 +7074,7 @@ Ottieni accesso a oltre 80’000+ titoli da oltre 50 borse libs/ui/src/lib/i18n.ts - 25 - - - - Ukraine - Ucraina - - libs/ui/src/lib/i18n.ts - 101 + 27 @@ -7372,7 +7280,7 @@ Salva apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 608 + 613 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7420,11 +7328,11 @@ Me apps/client/src/app/components/header/header.component.html - 213 + 217 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 250 + 254 @@ -7464,7 +7372,7 @@ L’AI prompt è stato copiato negli appunti apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 211 @@ -7480,7 +7388,7 @@ Pigro apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 235 + 239 @@ -7488,7 +7396,7 @@ Istantaneo apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 239 + 243 @@ -7496,7 +7404,7 @@ Prezzo di mercato predefinito apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 482 + 487 @@ -7504,7 +7412,7 @@ Modalità apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 519 + 524 @@ -7512,7 +7420,7 @@ Selettore apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 535 + 540 @@ -7520,7 +7428,7 @@ Intestazioni della richiesta HTTP apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 495 + 500 @@ -7528,7 +7436,7 @@ fine giornata apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 235 + 239 @@ -7536,7 +7444,7 @@ in tempo reale apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 239 + 243 @@ -7544,7 +7452,7 @@ Apri Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 212 @@ -7560,7 +7468,7 @@ Cambia libs/ui/src/lib/holdings-table/holdings-table.component.html - 138 + 143 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7576,11 +7484,11 @@ apps/client/src/app/components/home-overview/home-overview.component.ts - 52 + 53 libs/ui/src/lib/holdings-table/holdings-table.component.html - 161 + 166 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7623,30 +7531,6 @@ 94 - - Armenia - Armenia - - libs/ui/src/lib/i18n.ts - 77 - - - - British Virgin Islands - Isole Vergini Britanniche - - libs/ui/src/lib/i18n.ts - 82 - - - - Singapore - Singapore - - libs/ui/src/lib/i18n.ts - 97 - - Terms and Conditions Termini e condizioni @@ -7692,11 +7576,11 @@ Token di sicurezza apps/client/src/app/components/admin-users/admin-users.component.ts - 235 + 256 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 167 + 179 @@ -7704,7 +7588,7 @@ Vuoi davvero generare un nuovo token di sicurezza per questo utente? apps/client/src/app/components/admin-users/admin-users.component.ts - 240 + 261 @@ -7715,14 +7599,6 @@ 239 - - United Kingdom - United Kingdom - - libs/ui/src/lib/i18n.ts - 102 - - Terms of Service Termini e condizioni @@ -7769,7 +7645,7 @@ () e gia in uso. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 675 + 681 @@ -7777,7 +7653,7 @@ Si è verificato un errore durante l’aggiornamento di (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 683 + 689 @@ -7841,7 +7717,7 @@ qualcuno apps/client/src/app/pages/public/public-page.component.ts - 62 + 63 @@ -7873,7 +7749,7 @@ Vuoi davvero eliminare questo elemento? libs/ui/src/lib/benchmark/benchmark.component.ts - 137 + 141 @@ -7881,7 +7757,7 @@ Esci apps/client/src/app/components/header/header.component.html - 325 + 330 @@ -8128,7 +8004,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 205 + 208 @@ -8293,7 +8169,7 @@ Vuoi davvero generare un nuovo token di sicurezza? apps/client/src/app/components/user-account-access/user-account-access.component.ts - 172 + 184 @@ -8349,7 +8225,7 @@ Gestisci profilo risorsa apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 467 + 472 @@ -8357,7 +8233,7 @@ Investimenti alternativi libs/ui/src/lib/i18n.ts - 45 + 47 @@ -8365,7 +8241,7 @@ Da collezione libs/ui/src/lib/i18n.ts - 55 + 57 @@ -8373,7 +8249,7 @@ Average Unit Price apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 113 + 117 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html diff --git a/apps/client/src/locales/messages.ko.xlf b/apps/client/src/locales/messages.ko.xlf index c0e3501a5..07a6daa1d 100644 --- a/apps/client/src/locales/messages.ko.xlf +++ b/apps/client/src/locales/messages.ko.xlf @@ -340,7 +340,7 @@ 현금 잔액 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 142 + 145 @@ -364,7 +364,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 310 + 315 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -404,11 +404,11 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 12 + 23 libs/ui/src/lib/holdings-table/holdings-table.component.html - 23 + 28 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -436,7 +436,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 317 + 322 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -500,7 +500,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 93 + 98 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -580,7 +580,7 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 176 + 187 @@ -608,7 +608,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 449 + 454 @@ -632,7 +632,7 @@ libs/ui/src/lib/i18n.ts - 14 + 16 @@ -768,7 +768,7 @@ 통화 apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 130 + 135 apps/client/src/app/pages/public/public-page.html @@ -780,7 +780,7 @@ 국가 정보 없는 ETF apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 135 + 140 @@ -788,7 +788,7 @@ 섹터 정보 없는 ETF apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 140 + 145 @@ -796,7 +796,7 @@ 이 자산 프로필을 정말 삭제하시겠습니까? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 37 + 28 @@ -804,7 +804,7 @@ 다음 기준으로 필터... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 368 + 374 @@ -824,7 +824,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 45 + 50 @@ -899,6 +899,14 @@ 284 + + Healthcare + Healthcare + + libs/ui/src/lib/i18n.ts + 92 + + Refresh 새로고침 @@ -948,7 +956,7 @@ 국가 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 273 + 278 apps/client/src/app/components/admin-users/admin-users.html @@ -956,7 +964,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 276 + 281 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -968,15 +976,15 @@ 섹터 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 279 + 284 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 398 + 403 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 282 + 287 apps/client/src/app/pages/public/public-page.html @@ -988,15 +996,15 @@ 국가 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 289 + 294 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 409 + 414 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 294 + 299 @@ -1004,7 +1012,15 @@ 심볼 매핑 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 387 + 392 + + + + Technology + Technology + + libs/ui/src/lib/i18n.ts + 96 @@ -1020,7 +1036,7 @@ 스크래퍼 설정 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 472 + 477 @@ -1028,7 +1044,7 @@ 메모 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 433 + 438 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1055,6 +1071,14 @@ 16 + + Industrials + Industrials + + libs/ui/src/lib/i18n.ts + 93 + + Add Manually 수동 추가 @@ -1083,6 +1107,14 @@ 119 + + Consumer Cyclical + Consumer Cyclical + + libs/ui/src/lib/i18n.ts + 88 + + Do you really want to delete this coupon? 이 쿠폰을 정말 삭제하시겠습니까? @@ -1220,11 +1252,11 @@ 링크 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 420 + 425 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 551 + 556 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -1240,7 +1272,7 @@ Asset profile has been saved apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 618 + 624 @@ -1248,7 +1280,7 @@ 정말로 이 플랫폼을 삭제하시겠습니까? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 111 + 115 @@ -1280,7 +1312,7 @@ 올해 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 209 + 212 @@ -1328,7 +1360,7 @@ 이 태그를 정말로 삭제하시겠습니까? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 108 + 117 @@ -1352,7 +1384,7 @@ 이 사용자를 정말로 삭제하시겠습니까? apps/client/src/app/components/admin-users/admin-users.component.ts - 215 + 236 @@ -1368,7 +1400,7 @@ apps/client/src/app/components/header/header.component.html - 231 + 235 @@ -1420,11 +1452,11 @@ Could not validate form apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 594 + 600 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 597 + 603 @@ -1448,15 +1480,15 @@ 포트폴리오 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 140 + 143 apps/client/src/app/components/header/header.component.html - 44 + 45 apps/client/src/app/components/header/header.component.html - 257 + 261 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -1472,11 +1504,11 @@ 기준 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 379 + 384 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 152 + 155 @@ -1492,7 +1524,7 @@ 고스트폴리오 소개 apps/client/src/app/components/header/header.component.html - 322 + 327 apps/client/src/app/pages/about/overview/about-overview-page.html @@ -1504,11 +1536,11 @@ 로그인 apps/client/src/app/components/header/header.component.html - 421 + 426 apps/client/src/app/components/header/header.component.ts - 296 + 305 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -1528,11 +1560,11 @@ 이런! 잘못된 보안 토큰. apps/client/src/app/components/header/header.component.ts - 311 + 320 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 152 + 164 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts @@ -1552,7 +1584,7 @@ 두려움 apps/client/src/app/components/home-market/home-market.component.ts - 41 + 46 apps/client/src/app/components/markets/markets.component.ts @@ -1560,7 +1592,7 @@ libs/ui/src/lib/i18n.ts - 108 + 81 @@ -1568,7 +1600,7 @@ 탐욕 apps/client/src/app/components/home-market/home-market.component.ts - 42 + 47 apps/client/src/app/components/markets/markets.component.ts @@ -1576,7 +1608,7 @@ libs/ui/src/lib/i18n.ts - 109 + 82 @@ -1676,7 +1708,7 @@ 이번주 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 201 + 204 @@ -1795,6 +1827,14 @@ 46 + + Energy + Energy + + libs/ui/src/lib/i18n.ts + 90 + + Stay signed in 로그인 상태 유지 @@ -1956,7 +1996,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 69 + 74 @@ -1964,7 +2004,7 @@ 데이터 결함 보고 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 452 + 457 @@ -2112,7 +2152,7 @@ 업그레이드 계획 apps/client/src/app/components/header/header.component.html - 193 + 197 apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html @@ -2152,7 +2192,7 @@ 연초 대비 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 209 + 212 libs/ui/src/lib/assistant/assistant.component.ts @@ -2164,7 +2204,7 @@ 1년 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 213 + 216 libs/ui/src/lib/assistant/assistant.component.ts @@ -2176,7 +2216,7 @@ 5년 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 217 + 220 libs/ui/src/lib/assistant/assistant.component.ts @@ -2196,7 +2236,7 @@ 맥스 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 221 + 224 libs/ui/src/lib/assistant/assistant.component.ts @@ -2243,6 +2283,14 @@ 174 + + Consumer Defensive + Consumer Defensive + + libs/ui/src/lib/i18n.ts + 89 + + Coupon code has been redeemed 쿠폰 코드가 사용되었습니다. @@ -2315,6 +2363,14 @@ 279 + + Utilities + Utilities + + libs/ui/src/lib/i18n.ts + 97 + + Presenter View 발표자 보기 @@ -2352,7 +2408,7 @@ 장소 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 510 + 515 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -2480,7 +2536,7 @@ 이 기능은 현재 사용할 수 없습니다. apps/client/src/app/core/http-response.interceptor.ts - 55 + 52 @@ -2488,15 +2544,15 @@ 나중에 다시 시도해 주세요. apps/client/src/app/core/http-response.interceptor.ts - 57 + 54 apps/client/src/app/core/http-response.interceptor.ts - 88 + 85 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 191 + 192 @@ -2504,11 +2560,11 @@ 이런! 문제가 발생했습니다. apps/client/src/app/core/http-response.interceptor.ts - 86 + 83 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 189 + 190 @@ -2520,11 +2576,11 @@ apps/client/src/app/core/http-response.interceptor.ts - 89 + 86 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 192 + 193 @@ -2536,11 +2592,11 @@ apps/client/src/app/components/header/header.component.html - 124 + 125 apps/client/src/app/components/header/header.component.html - 370 + 375 apps/client/src/app/pages/about/overview/about-overview-page.routes.ts @@ -2644,15 +2700,15 @@ apps/client/src/app/components/header/header.component.html - 58 + 59 apps/client/src/app/components/header/header.component.html - 267 + 271 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 378 + 383 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2676,7 +2732,7 @@ 죄송합니다. 현금 잔액 이체가 실패했습니다. apps/client/src/app/pages/accounts/accounts-page.component.ts - 341 + 337 @@ -2732,11 +2788,11 @@ 관리자 제어 apps/client/src/app/components/header/header.component.html - 74 + 75 apps/client/src/app/components/header/header.component.html - 287 + 291 libs/common/src/lib/routes/routes.ts @@ -2748,7 +2804,7 @@ 시장 데이터 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 400 + 405 libs/common/src/lib/routes/routes.ts @@ -2800,7 +2856,7 @@ apps/client/src/app/components/header/header.component.html - 247 + 251 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2940,11 +2996,11 @@ Could not parse scraper configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 545 + 551 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 548 + 554 @@ -3000,7 +3056,7 @@ apps/client/src/app/components/header/header.component.html - 356 + 361 apps/client/src/app/pages/features/features-page.html @@ -3120,7 +3176,7 @@ 시작하기 apps/client/src/app/components/header/header.component.html - 432 + 437 apps/client/src/app/pages/features/features-page.html @@ -3192,7 +3248,7 @@ 시장 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 381 + 386 apps/client/src/app/components/footer/footer.component.html @@ -3200,7 +3256,7 @@ apps/client/src/app/components/header/header.component.html - 403 + 408 apps/client/src/app/components/home-market/home-market.html @@ -3363,6 +3419,14 @@ 149 + + Basic Materials + Basic Materials + + libs/ui/src/lib/i18n.ts + 86 + + Use Ghostfolio anonymously and own your financial data. 익명으로 Ghostfolio를 사용하고 금융 데이터를 소유하세요. @@ -3708,7 +3772,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 342 + 347 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -3820,7 +3884,7 @@ 활동 가져오기 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 93 + 94 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3836,7 +3900,7 @@ 배당금 가져오기 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 132 + 133 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3852,7 +3916,7 @@ 데이터 가져오는 중... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 171 + 172 @@ -3860,7 +3924,7 @@ 가져오기가 완료되었습니다. apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 181 + 182 @@ -3876,7 +3940,7 @@ 데이터 유효성을 검사하는 중... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 291 + 293 @@ -4060,7 +4124,7 @@ libs/ui/src/lib/i18n.ts - 16 + 18 @@ -4176,11 +4240,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 78 libs/ui/src/lib/i18n.ts - 37 + 39 @@ -4204,7 +4268,7 @@ 월간 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 92 @@ -4212,7 +4276,7 @@ 매년 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 93 @@ -4228,7 +4292,7 @@ 하위 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 352 + 354 @@ -4236,7 +4300,7 @@ 포트폴리오 진화 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 405 + 409 @@ -4244,7 +4308,7 @@ 투자 일정 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 434 + 438 @@ -4252,7 +4316,7 @@ 현재 연속 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 455 + 459 @@ -4260,7 +4324,7 @@ 최장 연속 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 464 + 468 @@ -4268,7 +4332,7 @@ 배당 일정 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 493 + 497 @@ -4296,15 +4360,15 @@ apps/client/src/app/components/header/header.component.html - 105 + 106 apps/client/src/app/components/header/header.component.html - 309 + 314 apps/client/src/app/components/header/header.component.html - 384 + 389 apps/client/src/app/pages/pricing/pricing-page.routes.ts @@ -4468,7 +4532,7 @@ 플랜 갱신 apps/client/src/app/components/header/header.component.html - 191 + 195 apps/client/src/app/components/user-account-membership/user-account-membership.html @@ -4492,11 +4556,11 @@ Could not save asset profile apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 628 + 634 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 631 + 637 @@ -4867,10 +4931,6 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts 58 - - libs/ui/src/lib/i18n.ts - 99 - Global @@ -4881,7 +4941,7 @@ libs/ui/src/lib/i18n.ts - 17 + 19 @@ -4893,11 +4953,11 @@ apps/client/src/app/components/header/header.component.html - 88 + 89 apps/client/src/app/components/header/header.component.html - 297 + 301 apps/client/src/app/pages/resources/overview/resources-overview.component.html @@ -4945,7 +5005,7 @@ 나의 고스트폴리오 apps/client/src/app/components/header/header.component.html - 276 + 280 apps/client/src/app/pages/user-account/user-account-page.routes.ts @@ -5057,7 +5117,7 @@ 50일 추세 libs/ui/src/lib/benchmark/benchmark.component.html - 32 + 43 @@ -5065,7 +5125,7 @@ 200일 추세 libs/ui/src/lib/benchmark/benchmark.component.html - 61 + 72 @@ -5081,7 +5141,7 @@ 마지막 역대 최고치 libs/ui/src/lib/benchmark/benchmark.component.html - 90 + 101 @@ -5089,7 +5149,7 @@ 역대 최고치에서 변화 libs/ui/src/lib/benchmark/benchmark.component.html - 117 + 128 @@ -5105,7 +5165,7 @@ ATH에서 libs/ui/src/lib/benchmark/benchmark.component.html - 119 + 130 @@ -5113,7 +5173,7 @@ Loan libs/ui/src/lib/i18n.ts - 58 + 60 @@ -5173,7 +5233,7 @@ libs/ui/src/lib/i18n.ts - 39 + 41 @@ -5193,7 +5253,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 117 + 122 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5209,7 +5269,7 @@ 모두 표시 libs/ui/src/lib/holdings-table/holdings-table.component.html - 212 + 217 @@ -5225,7 +5285,7 @@ libs/ui/src/lib/i18n.ts - 4 + 6 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html @@ -5237,7 +5297,7 @@ 아시아·태평양 libs/ui/src/lib/i18n.ts - 5 + 7 @@ -5253,7 +5313,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 327 + 332 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -5265,11 +5325,11 @@ libs/ui/src/lib/i18n.ts - 6 + 8 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html - 64 + 65 @@ -5285,7 +5345,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 343 + 348 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -5297,7 +5357,7 @@ libs/ui/src/lib/i18n.ts - 7 + 9 @@ -5305,7 +5365,7 @@ 핵심 libs/ui/src/lib/i18n.ts - 10 + 12 @@ -5313,7 +5373,7 @@ Ghostfolio 프리미엄 또는 Ghostfolio Open Source로 쉽게 전환하세요 libs/ui/src/lib/i18n.ts - 12 + 14 @@ -5321,7 +5381,7 @@ Ghostfolio 프리미엄으로 쉽게 전환하세요 libs/ui/src/lib/i18n.ts - 13 + 15 @@ -5337,7 +5397,7 @@ libs/ui/src/lib/i18n.ts - 15 + 17 @@ -5345,7 +5405,7 @@ 승인하다 libs/ui/src/lib/i18n.ts - 18 + 20 @@ -5353,7 +5413,7 @@ 더 높은 위험 libs/ui/src/lib/i18n.ts - 19 + 21 @@ -5361,15 +5421,7 @@ 이 활동은 이미 존재합니다. libs/ui/src/lib/i18n.ts - 20 - - - - Japan - 일본 - - libs/ui/src/lib/i18n.ts - 92 + 22 @@ -5377,7 +5429,7 @@ 위험 감소 libs/ui/src/lib/i18n.ts - 21 + 23 @@ -5385,7 +5437,7 @@ libs/ui/src/lib/i18n.ts - 22 + 24 @@ -5393,7 +5445,7 @@ 개월 libs/ui/src/lib/i18n.ts - 23 + 25 @@ -5401,11 +5453,15 @@ 다른 libs/ui/src/lib/i18n.ts - 24 + 26 + + + libs/ui/src/lib/i18n.ts + 94 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 451 + 449 @@ -5413,7 +5469,7 @@ 프리셋 libs/ui/src/lib/i18n.ts - 26 + 28 @@ -5421,7 +5477,7 @@ No Activities apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 145 + 150 @@ -5429,7 +5485,7 @@ 퇴직금 libs/ui/src/lib/i18n.ts - 27 + 29 @@ -5445,7 +5501,7 @@ 위성 libs/ui/src/lib/i18n.ts - 28 + 30 @@ -5469,11 +5525,11 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 314 + 319 libs/ui/src/lib/i18n.ts - 29 + 31 @@ -5481,11 +5537,11 @@ 꼬리표 libs/ui/src/lib/i18n.ts - 30 + 32 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html - 53 + 54 @@ -5493,7 +5549,7 @@ 년도 libs/ui/src/lib/i18n.ts - 31 + 33 @@ -5513,7 +5569,7 @@ 연령 libs/ui/src/lib/i18n.ts - 32 + 34 @@ -5533,7 +5589,7 @@ libs/ui/src/lib/i18n.ts - 36 + 38 @@ -5549,7 +5605,7 @@ libs/ui/src/lib/i18n.ts - 38 + 40 @@ -5557,7 +5613,7 @@ 귀중한 libs/ui/src/lib/i18n.ts - 42 + 44 @@ -5565,7 +5621,7 @@ 책임 libs/ui/src/lib/i18n.ts - 40 + 42 @@ -5577,7 +5633,7 @@ libs/ui/src/lib/i18n.ts - 41 + 43 @@ -5589,7 +5645,7 @@ libs/ui/src/lib/i18n.ts - 54 + 56 @@ -5597,7 +5653,7 @@ 상품 libs/ui/src/lib/i18n.ts - 46 + 48 @@ -5609,7 +5665,7 @@ libs/ui/src/lib/i18n.ts - 47 + 49 @@ -5617,7 +5673,7 @@ 채권 libs/ui/src/lib/i18n.ts - 48 + 50 @@ -5625,7 +5681,11 @@ 부동산 libs/ui/src/lib/i18n.ts - 50 + 52 + + + libs/ui/src/lib/i18n.ts + 95 @@ -5641,7 +5701,7 @@ 노예 libs/ui/src/lib/i18n.ts - 53 + 55 @@ -5649,7 +5709,7 @@ 암호화폐 libs/ui/src/lib/i18n.ts - 56 + 58 @@ -5657,7 +5717,7 @@ ETF libs/ui/src/lib/i18n.ts - 57 + 59 @@ -5665,7 +5725,7 @@ 뮤추얼 펀드 libs/ui/src/lib/i18n.ts - 59 + 61 @@ -5673,7 +5733,7 @@ 귀금속 libs/ui/src/lib/i18n.ts - 60 + 62 @@ -5681,7 +5741,7 @@ 사모펀드 libs/ui/src/lib/i18n.ts - 61 + 63 @@ -5689,7 +5749,7 @@ 재고 libs/ui/src/lib/i18n.ts - 62 + 64 @@ -5697,7 +5757,7 @@ 아프리카 libs/ui/src/lib/i18n.ts - 69 + 71 @@ -5705,7 +5765,15 @@ 아시아 libs/ui/src/lib/i18n.ts - 70 + 72 + + + + Communication Services + Communication Services + + libs/ui/src/lib/i18n.ts + 87 @@ -5713,7 +5781,7 @@ 유럽 libs/ui/src/lib/i18n.ts - 71 + 73 @@ -5721,7 +5789,7 @@ 북미 libs/ui/src/lib/i18n.ts - 72 + 74 @@ -5737,7 +5805,7 @@ 오세아니아 libs/ui/src/lib/i18n.ts - 73 + 75 @@ -5745,7 +5813,7 @@ 남아메리카 libs/ui/src/lib/i18n.ts - 74 + 76 @@ -5753,7 +5821,7 @@ 극심한 공포 libs/ui/src/lib/i18n.ts - 106 + 79 @@ -5761,7 +5829,7 @@ 극도의 탐욕 libs/ui/src/lib/i18n.ts - 107 + 80 @@ -5769,7 +5837,7 @@ 중립적 libs/ui/src/lib/i18n.ts - 110 + 83 @@ -5805,15 +5873,15 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 209 + 220 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 453 + 451 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 467 + 465 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5841,7 +5909,7 @@ 현재 시장가격은 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 743 + 749 @@ -5849,7 +5917,7 @@ 시험 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 569 + 574 @@ -5857,15 +5925,7 @@ 이런! 액세스 권한을 부여할 수 없습니다. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 144 - - - - Argentina - 아르헨티나 - - libs/ui/src/lib/i18n.ts - 78 + 151 @@ -5913,7 +5973,7 @@ 시장 데이터가 지연됩니다. apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts - 94 + 92 @@ -5929,7 +5989,7 @@ 닫기 보유 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 442 + 447 @@ -5953,11 +6013,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 80 + 82 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 96 + 98 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -6017,7 +6077,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 205 + 208 libs/ui/src/lib/assistant/assistant.component.ts @@ -6029,7 +6089,7 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 201 + 204 libs/ui/src/lib/assistant/assistant.component.ts @@ -6069,7 +6129,7 @@ 년도 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 213 + 216 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6089,7 +6149,7 @@ 연령 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 217 + 220 libs/ui/src/lib/assistant/assistant.component.ts @@ -6134,7 +6194,7 @@ 데이터 수집 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 592 + 597 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6174,7 +6234,7 @@ 이런! 요청을 너무 많이 하시는 것 같습니다. 조금 천천히 해주세요. apps/client/src/app/core/http-response.interceptor.ts - 106 + 103 @@ -6201,14 +6261,6 @@ 61 - - Indonesia - 인도네시아 공화국 - - libs/ui/src/lib/i18n.ts - 90 - - Activity 활동 @@ -6238,7 +6290,7 @@ 이 작업은 허용되지 않습니다. apps/client/src/app/core/http-response.interceptor.ts - 67 + 64 @@ -6254,7 +6306,7 @@ 유동성 libs/ui/src/lib/i18n.ts - 49 + 51 @@ -6262,7 +6314,7 @@ 구매 및 판매 libs/ui/src/lib/i18n.ts - 8 + 10 @@ -6350,7 +6402,7 @@ 포함 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 377 + 382 @@ -6374,7 +6426,7 @@ 이 프로필을 정말로 삭제하시겠습니까? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 68 + 59 @@ -6390,7 +6442,7 @@ 이런! 프로필을 삭제할 수 없습니다. apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 56 + 47 @@ -6398,7 +6450,7 @@ 벤치마크 apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 125 + 130 @@ -6493,46 +6545,6 @@ 86 - - Thailand - 태국 - - libs/ui/src/lib/i18n.ts - 100 - - - - India - 인도 - - libs/ui/src/lib/i18n.ts - 89 - - - - Austria - 오스트리아 - - libs/ui/src/lib/i18n.ts - 80 - - - - Poland - 폴란드 - - libs/ui/src/lib/i18n.ts - 95 - - - - Italy - 이탈리아 - - libs/ui/src/lib/i18n.ts - 91 - - User Experience 사용자 경험 @@ -6581,30 +6593,6 @@ 474 - - Canada - 캐나다 - - libs/ui/src/lib/i18n.ts - 84 - - - - New Zealand - 뉴질랜드 - - libs/ui/src/lib/i18n.ts - 94 - - - - Netherlands - 네덜란드 - - libs/ui/src/lib/i18n.ts - 93 - - Alternative 대안 @@ -6641,30 +6629,6 @@ 96 - - Romania - 루마니아 - - libs/ui/src/lib/i18n.ts - 96 - - - - Germany - 독일 - - libs/ui/src/lib/i18n.ts - 88 - - - - United States - 미국 - - libs/ui/src/lib/i18n.ts - 103 - - Budgeting 예산 편성 @@ -6673,14 +6637,6 @@ 85 - - Belgium - 벨기에 - - libs/ui/src/lib/i18n.ts - 81 - - Open Source 오픈 소스 @@ -6693,38 +6649,6 @@ 91 - - Czech Republic - 체코 - - libs/ui/src/lib/i18n.ts - 85 - - - - Australia - 호주 - - libs/ui/src/lib/i18n.ts - 79 - - - - South Africa - 남아프리카 - - libs/ui/src/lib/i18n.ts - 98 - - - - Bulgaria - 불가리아 - - libs/ui/src/lib/i18n.ts - 83 - - Privacy 은둔 @@ -6733,28 +6657,12 @@ 94 - - Finland - 핀란드 - - libs/ui/src/lib/i18n.ts - 86 - - - - France - 프랑스 - - libs/ui/src/lib/i18n.ts - 87 - - Error 오류 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 734 + 740 @@ -6766,7 +6674,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 597 + 602 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6810,7 +6718,7 @@ libs/ui/src/lib/i18n.ts - 9 + 11 @@ -6826,7 +6734,7 @@ libs/ui/src/lib/i18n.ts - 33 + 35 @@ -6850,7 +6758,7 @@ 닫다 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 599 + 604 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6890,7 +6798,7 @@ libs/ui/src/lib/i18n.ts - 11 + 13 @@ -6906,7 +6814,7 @@ 이런! 액세스를 업데이트할 수 없습니다. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 181 + 194 @@ -7057,6 +6965,14 @@ 174 + + Financial Services + Financial Services + + libs/ui/src/lib/i18n.ts + 91 + + to use our referral link and get a Ghostfolio Premium membership for one year 추천 링크를 사용하고 1년 동안 Ghostfolio 프리미엄 멤버십을 얻으려면 @@ -7161,14 +7077,6 @@ 40 - - Ukraine - 우크라이나 - - libs/ui/src/lib/i18n.ts - 101 - - Set API key API 키 설정 @@ -7182,7 +7090,7 @@ 50개 이상의 거래소에서 80,000개 이상의 티커에 접근하세요 libs/ui/src/lib/i18n.ts - 25 + 27 @@ -7396,7 +7304,7 @@ 구하다 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 608 + 613 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7460,11 +7368,11 @@ apps/client/src/app/components/header/header.component.html - 213 + 217 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 250 + 254 @@ -7488,7 +7396,7 @@ AI 프롬프트가 클립보드에 복사되었습니다. apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 211 @@ -7504,7 +7412,7 @@ 방법 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 519 + 524 @@ -7512,7 +7420,7 @@ 기본 시장 가격 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 482 + 487 @@ -7520,7 +7428,7 @@ 선택자 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 535 + 540 @@ -7528,7 +7436,7 @@ 즉각적인 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 239 + 243 @@ -7536,7 +7444,7 @@ 게으른 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 235 + 239 @@ -7544,7 +7452,7 @@ HTTP 요청 헤더 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 495 + 500 @@ -7552,7 +7460,7 @@ 실시간 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 239 + 243 @@ -7560,7 +7468,7 @@ 하루의 끝 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 235 + 239 @@ -7568,7 +7476,7 @@ 오픈 Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 212 @@ -7584,7 +7492,7 @@ 변화 libs/ui/src/lib/holdings-table/holdings-table.component.html - 138 + 143 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7600,11 +7508,11 @@ apps/client/src/app/components/home-overview/home-overview.component.ts - 52 + 53 libs/ui/src/lib/holdings-table/holdings-table.component.html - 161 + 166 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7631,14 +7539,6 @@ 67 - - Singapore - 싱가포르 - - libs/ui/src/lib/i18n.ts - 97 - - Total amount Total amount @@ -7647,22 +7547,6 @@ 94 - - Armenia - 아르메니아 - - libs/ui/src/lib/i18n.ts - 77 - - - - British Virgin Islands - 영국령 버진아일랜드 - - libs/ui/src/lib/i18n.ts - 82 - - Copy portfolio data to clipboard for AI prompt AI 프롬프트를 위해 포트폴리오 데이터를 클립보드에 복사 @@ -7716,7 +7600,7 @@ 정말로 이 사용자에 대한 새 보안 토큰을 생성하시겠습니까? apps/client/src/app/components/admin-users/admin-users.component.ts - 240 + 261 @@ -7724,11 +7608,11 @@ 보안 토큰 apps/client/src/app/components/admin-users/admin-users.component.ts - 235 + 256 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 167 + 179 @@ -7739,14 +7623,6 @@ 239 - - United Kingdom - 영국 - - libs/ui/src/lib/i18n.ts - 102 - - Terms of Service 이용약관 @@ -7793,7 +7669,7 @@ ()은(는) 이미 사용 중입니다. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 675 + 681 @@ -7801,7 +7677,7 @@ ()로 업데이트하는 동안 오류가 발생했습니다. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 683 + 689 @@ -7841,7 +7717,7 @@ 누구 apps/client/src/app/pages/public/public-page.component.ts - 62 + 63 @@ -7873,7 +7749,7 @@ 이 항목을 정말로 삭제하시겠습니까? libs/ui/src/lib/benchmark/benchmark.component.ts - 137 + 141 @@ -7881,7 +7757,7 @@ 로그아웃 apps/client/src/app/components/header/header.component.html - 325 + 330 @@ -8128,7 +8004,7 @@ 이번 달 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 205 + 208 @@ -8309,7 +8185,7 @@ 정말로 새로운 보안 토큰을 생성하시겠습니까? apps/client/src/app/components/user-account-access/user-account-access.component.ts - 172 + 184 @@ -8349,7 +8225,7 @@ 자산 프로필 관리 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 467 + 472 @@ -8357,7 +8233,7 @@ 대체투자 libs/ui/src/lib/i18n.ts - 45 + 47 @@ -8365,7 +8241,7 @@ 소장용 libs/ui/src/lib/i18n.ts - 55 + 57 @@ -8373,7 +8249,7 @@ 평균단가 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 113 + 117 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html diff --git a/apps/client/src/locales/messages.nl.xlf b/apps/client/src/locales/messages.nl.xlf index b33aee404..eab63de12 100644 --- a/apps/client/src/locales/messages.nl.xlf +++ b/apps/client/src/locales/messages.nl.xlf @@ -110,7 +110,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 310 + 315 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -150,11 +150,11 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 12 + 23 libs/ui/src/lib/holdings-table/holdings-table.component.html - 23 + 28 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -214,7 +214,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 93 + 98 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -294,7 +294,7 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 176 + 187 @@ -334,7 +334,7 @@ libs/ui/src/lib/i18n.ts - 14 + 16 @@ -402,7 +402,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 449 + 454 @@ -498,7 +498,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 45 + 50 @@ -630,7 +630,7 @@ Wilt je deze gebruiker echt verwijderen? apps/client/src/app/components/admin-users/admin-users.component.ts - 215 + 236 @@ -646,7 +646,7 @@ apps/client/src/app/components/header/header.component.html - 231 + 235 @@ -690,7 +690,7 @@ Over Ghostfolio apps/client/src/app/components/header/header.component.html - 322 + 327 apps/client/src/app/pages/about/overview/about-overview-page.html @@ -702,7 +702,7 @@ Aan de slag apps/client/src/app/components/header/header.component.html - 432 + 437 apps/client/src/app/pages/features/features-page.html @@ -734,11 +734,11 @@ Aanmelden apps/client/src/app/components/header/header.component.html - 421 + 426 apps/client/src/app/components/header/header.component.ts - 296 + 305 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -758,11 +758,11 @@ Oeps! Onjuiste beveiligingstoken. apps/client/src/app/components/header/header.component.ts - 311 + 320 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 152 + 164 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts @@ -869,6 +869,14 @@ 46 + + Energy + Energy + + libs/ui/src/lib/i18n.ts + 90 + + Stay signed in Aangemeld blijven @@ -962,15 +970,15 @@ Sectoren apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 279 + 284 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 398 + 403 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 282 + 287 apps/client/src/app/pages/public/public-page.html @@ -982,15 +990,15 @@ Landen apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 289 + 294 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 409 + 414 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 294 + 299 @@ -1014,7 +1022,7 @@ Gegevensstoring melden apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 452 + 457 @@ -1026,7 +1034,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 117 + 122 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -1042,7 +1050,7 @@ Toon alle libs/ui/src/lib/holdings-table/holdings-table.component.html - 212 + 217 @@ -1062,7 +1070,7 @@ YTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 209 + 212 libs/ui/src/lib/assistant/assistant.component.ts @@ -1074,7 +1082,7 @@ 1J apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 213 + 216 libs/ui/src/lib/assistant/assistant.component.ts @@ -1086,7 +1094,7 @@ 5J apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 217 + 220 libs/ui/src/lib/assistant/assistant.component.ts @@ -1106,7 +1114,7 @@ Max apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 221 + 224 libs/ui/src/lib/assistant/assistant.component.ts @@ -1122,11 +1130,11 @@ apps/client/src/app/core/http-response.interceptor.ts - 89 + 86 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 192 + 193 @@ -1138,11 +1146,11 @@ apps/client/src/app/components/header/header.component.html - 124 + 125 apps/client/src/app/components/header/header.component.html - 370 + 375 apps/client/src/app/pages/about/overview/about-overview-page.routes.ts @@ -1174,7 +1182,7 @@ Mijn Ghostfolio apps/client/src/app/components/header/header.component.html - 276 + 280 apps/client/src/app/pages/user-account/user-account-page.routes.ts @@ -1197,6 +1205,14 @@ 174 + + Consumer Defensive + Consumer Defensive + + libs/ui/src/lib/i18n.ts + 89 + + Coupon code has been redeemed Je couponcode is ingewisseld @@ -1257,6 +1273,14 @@ 67 + + Utilities + Utilities + + libs/ui/src/lib/i18n.ts + 97 + + Presenter View Presentatie weergave @@ -1278,7 +1302,7 @@ Locatie apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 510 + 515 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -1366,15 +1390,15 @@ apps/client/src/app/components/header/header.component.html - 58 + 59 apps/client/src/app/components/header/header.component.html - 267 + 271 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 378 + 383 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -1418,7 +1442,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 317 + 322 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -1486,11 +1510,11 @@ Beheer apps/client/src/app/components/header/header.component.html - 74 + 75 apps/client/src/app/components/header/header.component.html - 287 + 291 libs/common/src/lib/routes/routes.ts @@ -1654,7 +1678,7 @@ apps/client/src/app/components/header/header.component.html - 356 + 361 apps/client/src/app/pages/features/features-page.html @@ -1682,7 +1706,7 @@ apps/client/src/app/components/header/header.component.html - 247 + 251 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1710,7 +1734,7 @@ Markten apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 381 + 386 apps/client/src/app/components/footer/footer.component.html @@ -1718,7 +1742,7 @@ apps/client/src/app/components/header/header.component.html - 403 + 408 apps/client/src/app/components/home-market/home-market.html @@ -1854,7 +1878,7 @@ Tijdlijn investeringen apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 434 + 438 @@ -1870,7 +1894,7 @@ Verliezers apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 352 + 354 @@ -1930,7 +1954,7 @@ Huidige week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 201 + 204 @@ -1954,7 +1978,7 @@ libs/ui/src/lib/i18n.ts - 41 + 43 @@ -1977,6 +2001,14 @@ 119 + + Consumer Cyclical + Consumer Cyclical + + libs/ui/src/lib/i18n.ts + 88 + + Quantity Hoeveelheid @@ -1994,7 +2026,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 69 + 74 @@ -2014,7 +2046,7 @@ Opmerking apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 433 + 438 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -2058,7 +2090,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 342 + 347 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2082,7 +2114,7 @@ Gegevens importeren... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 171 + 172 @@ -2090,7 +2122,7 @@ Importeren is voltooid apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 181 + 182 @@ -2110,15 +2142,15 @@ apps/client/src/app/components/header/header.component.html - 105 + 106 apps/client/src/app/components/header/header.component.html - 309 + 314 apps/client/src/app/components/header/header.component.html - 384 + 389 apps/client/src/app/pages/pricing/pricing-page.routes.ts @@ -2138,15 +2170,15 @@ Portefeuille apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 140 + 143 apps/client/src/app/components/header/header.component.html - 44 + 45 apps/client/src/app/components/header/header.component.html - 257 + 261 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -2222,11 +2254,11 @@ apps/client/src/app/components/header/header.component.html - 88 + 89 apps/client/src/app/components/header/header.component.html - 297 + 301 apps/client/src/app/pages/resources/overview/resources-overview.component.html @@ -2274,7 +2306,7 @@ Activiteiten importeren apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 93 + 94 libs/ui/src/lib/activities-table/activities-table.component.html @@ -2338,7 +2370,7 @@ Verandering van Recordhoogte libs/ui/src/lib/benchmark/benchmark.component.html - 117 + 128 @@ -2354,7 +2386,7 @@ van ATH libs/ui/src/lib/benchmark/benchmark.component.html - 119 + 130 @@ -2386,7 +2418,7 @@ Deze functie is momenteel niet beschikbaar. apps/client/src/app/core/http-response.interceptor.ts - 55 + 52 @@ -2394,11 +2426,11 @@ Oeps! Er ging iets mis. apps/client/src/app/core/http-response.interceptor.ts - 86 + 83 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 189 + 190 @@ -2406,15 +2438,15 @@ Probeer het later nog eens. apps/client/src/app/core/http-response.interceptor.ts - 57 + 54 apps/client/src/app/core/http-response.interceptor.ts - 88 + 85 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 191 + 192 @@ -2426,7 +2458,7 @@ libs/ui/src/lib/i18n.ts - 16 + 18 @@ -2498,7 +2530,7 @@ Land apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 273 + 278 apps/client/src/app/components/admin-users/admin-users.html @@ -2506,7 +2538,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 276 + 281 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2554,7 +2586,7 @@ libs/ui/src/lib/i18n.ts - 39 + 41 @@ -2578,7 +2610,7 @@ Maandelijks apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 92 @@ -2602,7 +2634,7 @@ Angst apps/client/src/app/components/home-market/home-market.component.ts - 41 + 46 apps/client/src/app/components/markets/markets.component.ts @@ -2610,7 +2642,7 @@ libs/ui/src/lib/i18n.ts - 108 + 81 @@ -2618,7 +2650,7 @@ Hebzucht apps/client/src/app/components/home-market/home-market.component.ts - 42 + 47 apps/client/src/app/components/markets/markets.component.ts @@ -2626,7 +2658,7 @@ libs/ui/src/lib/i18n.ts - 109 + 82 @@ -2634,7 +2666,7 @@ Filter op... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 368 + 374 @@ -2670,11 +2702,11 @@ Benchmark apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 379 + 384 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 152 + 155 @@ -2682,11 +2714,11 @@ Het formulier kon niet worden gevalideerd. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 594 + 600 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 597 + 603 @@ -2762,7 +2794,7 @@ Waardeontwikkeling van portefeuille apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 405 + 409 @@ -2794,7 +2826,7 @@ libs/ui/src/lib/i18n.ts - 4 + 6 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html @@ -2814,7 +2846,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 327 + 332 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2826,11 +2858,11 @@ libs/ui/src/lib/i18n.ts - 6 + 8 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html - 64 + 65 @@ -2854,11 +2886,11 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 314 + 319 libs/ui/src/lib/i18n.ts - 29 + 31 @@ -2866,11 +2898,11 @@ Label libs/ui/src/lib/i18n.ts - 30 + 32 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html - 53 + 54 @@ -2882,7 +2914,7 @@ libs/ui/src/lib/i18n.ts - 54 + 56 @@ -2890,7 +2922,7 @@ Grondstof libs/ui/src/lib/i18n.ts - 46 + 48 @@ -2902,7 +2934,7 @@ libs/ui/src/lib/i18n.ts - 47 + 49 @@ -2910,7 +2942,7 @@ Vast inkomen libs/ui/src/lib/i18n.ts - 48 + 50 @@ -2918,7 +2950,11 @@ Vastgoed libs/ui/src/lib/i18n.ts - 50 + 52 + + + libs/ui/src/lib/i18n.ts + 95 @@ -2934,7 +2970,7 @@ Obligatie libs/ui/src/lib/i18n.ts - 53 + 55 @@ -2942,7 +2978,7 @@ Cryptovaluta libs/ui/src/lib/i18n.ts - 56 + 58 @@ -2950,7 +2986,7 @@ ETF libs/ui/src/lib/i18n.ts - 57 + 59 @@ -2958,7 +2994,7 @@ Beleggingsfonds libs/ui/src/lib/i18n.ts - 59 + 61 @@ -2966,7 +3002,7 @@ Edelmetaal libs/ui/src/lib/i18n.ts - 60 + 62 @@ -2974,7 +3010,7 @@ Private equity libs/ui/src/lib/i18n.ts - 61 + 63 @@ -2982,7 +3018,7 @@ Aandeel libs/ui/src/lib/i18n.ts - 62 + 64 @@ -2998,7 +3034,7 @@ libs/ui/src/lib/i18n.ts - 15 + 17 @@ -3006,11 +3042,15 @@ Anders libs/ui/src/lib/i18n.ts - 24 + 26 + + + libs/ui/src/lib/i18n.ts + 94 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 451 + 449 @@ -3026,15 +3066,15 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 209 + 220 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 453 + 451 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 467 + 465 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -3046,7 +3086,7 @@ Noord-Amerika libs/ui/src/lib/i18n.ts - 72 + 74 @@ -3054,7 +3094,7 @@ Afrika libs/ui/src/lib/i18n.ts - 69 + 71 @@ -3062,7 +3102,15 @@ Azië libs/ui/src/lib/i18n.ts - 70 + 72 + + + + Communication Services + Communication Services + + libs/ui/src/lib/i18n.ts + 87 @@ -3070,7 +3118,7 @@ Europa libs/ui/src/lib/i18n.ts - 71 + 73 @@ -3086,7 +3134,7 @@ Oceanië libs/ui/src/lib/i18n.ts - 73 + 75 @@ -3094,7 +3142,7 @@ Zuid-Amerika libs/ui/src/lib/i18n.ts - 74 + 76 @@ -3138,7 +3186,7 @@ Symbool toewijzen apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 387 + 392 @@ -3174,11 +3222,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 78 libs/ui/src/lib/i18n.ts - 37 + 39 @@ -3186,7 +3234,7 @@ Tijdlijn dividend apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 493 + 497 @@ -3202,7 +3250,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 343 + 348 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -3214,7 +3262,7 @@ libs/ui/src/lib/i18n.ts - 7 + 9 @@ -3230,7 +3278,7 @@ Gegevens valideren... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 291 + 293 @@ -3254,7 +3302,7 @@ Marktgegevens apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 400 + 405 libs/common/src/lib/routes/routes.ts @@ -3310,7 +3358,7 @@ Jaarlijks apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 93 @@ -3318,7 +3366,7 @@ Importeer dividenden apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 132 + 133 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3346,7 +3394,7 @@ Kern libs/ui/src/lib/i18n.ts - 10 + 12 @@ -3354,7 +3402,7 @@ Toelage libs/ui/src/lib/i18n.ts - 18 + 20 @@ -3362,7 +3410,7 @@ Hoger risico libs/ui/src/lib/i18n.ts - 19 + 21 @@ -3370,7 +3418,7 @@ Lager risico libs/ui/src/lib/i18n.ts - 21 + 23 @@ -3378,7 +3426,7 @@ Geen activiteiten apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 145 + 150 @@ -3386,7 +3434,7 @@ Pensioen libs/ui/src/lib/i18n.ts - 27 + 29 @@ -3402,7 +3450,7 @@ Satelliet libs/ui/src/lib/i18n.ts - 28 + 30 @@ -3526,7 +3574,7 @@ Abonnement uitbreiden apps/client/src/app/components/header/header.component.html - 193 + 197 apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html @@ -3654,11 +3702,11 @@ Kon het assetprofiel niet opslaan apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 628 + 634 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 631 + 637 @@ -3726,7 +3774,7 @@ Eenvoudig overstappen naar Ghostfolio Premium libs/ui/src/lib/i18n.ts - 13 + 15 @@ -3750,7 +3798,7 @@ Eenvoudig overstappen naar Ghostfolio Premium of Ghostfolio Open Source libs/ui/src/lib/i18n.ts - 12 + 14 @@ -3758,7 +3806,7 @@ Loan libs/ui/src/lib/i18n.ts - 58 + 60 @@ -3802,7 +3850,7 @@ Abonnement Vernieuwen apps/client/src/app/components/header/header.component.html - 191 + 195 apps/client/src/app/components/user-account-membership/user-account-membership.html @@ -3882,7 +3930,7 @@ Huidig jaar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 209 + 212 @@ -3898,11 +3946,11 @@ Url apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 420 + 425 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 551 + 556 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -3918,7 +3966,7 @@ Het activaprofiel is opgeslagen. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 618 + 624 @@ -3926,7 +3974,7 @@ Wil je dit platform echt verwijderen? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 111 + 115 @@ -3998,7 +4046,7 @@ Deze activiteit bestaat al. libs/ui/src/lib/i18n.ts - 20 + 22 @@ -4062,7 +4110,7 @@ Huidige reeks apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 455 + 459 @@ -4070,7 +4118,7 @@ Langste reeks apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 464 + 468 @@ -4078,7 +4126,7 @@ Maanden libs/ui/src/lib/i18n.ts - 23 + 25 @@ -4086,7 +4134,7 @@ Jaren libs/ui/src/lib/i18n.ts - 32 + 34 @@ -4094,7 +4142,7 @@ Maand libs/ui/src/lib/i18n.ts - 22 + 24 @@ -4102,7 +4150,7 @@ Jaar libs/ui/src/lib/i18n.ts - 31 + 33 @@ -4262,7 +4310,15 @@ Verplichtingen libs/ui/src/lib/i18n.ts - 40 + 42 + + + + Technology + Technology + + libs/ui/src/lib/i18n.ts + 96 @@ -4278,7 +4334,7 @@ Scraper instellingen apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 472 + 477 @@ -4506,7 +4562,7 @@ libs/ui/src/lib/i18n.ts - 36 + 38 @@ -4514,7 +4570,7 @@ Waardevol libs/ui/src/lib/i18n.ts - 42 + 44 @@ -4522,7 +4578,7 @@ ETF’s zonder Landen apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 135 + 140 @@ -4530,7 +4586,7 @@ ETF’s zonder Sectoren apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 140 + 145 @@ -4546,7 +4602,7 @@ Voorinstelling libs/ui/src/lib/i18n.ts - 26 + 28 @@ -4562,15 +4618,7 @@ Azië en de Stille Oceaan libs/ui/src/lib/i18n.ts - 5 - - - - Japan - Japan - - libs/ui/src/lib/i18n.ts - 92 + 7 @@ -4766,7 +4814,7 @@ Valuta apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 130 + 135 apps/client/src/app/pages/public/public-page.html @@ -4818,11 +4866,11 @@ De scraperconfiguratie kon niet worden geparseerd apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 545 + 551 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 548 + 554 @@ -4913,6 +4961,14 @@ 149 + + Basic Materials + Basic Materials + + libs/ui/src/lib/i18n.ts + 86 + + Use Ghostfolio anonymously and own your financial data. Gebruik Ghostfolio anoniem en bezit je financiële gegevens. @@ -5378,10 +5434,6 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts 58 - - libs/ui/src/lib/i18n.ts - 99 - Global @@ -5392,7 +5444,7 @@ libs/ui/src/lib/i18n.ts - 17 + 19 @@ -5492,7 +5544,7 @@ libs/ui/src/lib/i18n.ts - 38 + 40 @@ -5516,7 +5568,7 @@ Weet u zetker dat u dit label wilt verwijderen? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 108 + 117 @@ -5624,7 +5676,7 @@ Weet u zeker dat u dit bezittingen profiel wilt verwijderen? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 37 + 28 @@ -5635,6 +5687,14 @@ 16 + + Industrials + Industrials + + libs/ui/src/lib/i18n.ts + 93 + + Add Manually Voeg Handmatig Toe @@ -5664,7 +5724,7 @@ Laatste Recordhoogte libs/ui/src/lib/benchmark/benchmark.component.html - 90 + 101 @@ -5708,7 +5768,7 @@ Oeps, geldoverdracht is mislukt. apps/client/src/app/pages/accounts/accounts-page.component.ts - 341 + 337 @@ -5716,7 +5776,7 @@ Extreme Angst libs/ui/src/lib/i18n.ts - 106 + 79 @@ -5724,7 +5784,7 @@ Extreme Hebzucht libs/ui/src/lib/i18n.ts - 107 + 80 @@ -5732,7 +5792,7 @@ Neutraal libs/ui/src/lib/i18n.ts - 110 + 83 @@ -5743,6 +5803,14 @@ 284 + + Healthcare + Healthcare + + libs/ui/src/lib/i18n.ts + 92 + + Do you really want to delete this system message? Wilt u dit systeembericht echt verwijderen? @@ -5756,7 +5824,7 @@ 50-Daagse Trend libs/ui/src/lib/benchmark/benchmark.component.html - 32 + 43 @@ -5764,7 +5832,7 @@ 200-Daagse Trend libs/ui/src/lib/benchmark/benchmark.component.html - 61 + 72 @@ -5772,7 +5840,7 @@ Contant Saldo apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 142 + 145 @@ -5808,7 +5876,7 @@ De huidige markt waarde is apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 743 + 749 @@ -5816,7 +5884,7 @@ Test apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 569 + 574 @@ -5856,15 +5924,7 @@ Oeps! Kan geen toegang verlenen. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 144 - - - - Argentina - Argentinië - - libs/ui/src/lib/i18n.ts - 78 + 151 @@ -5888,7 +5948,7 @@ Markt data is vertraagd voor apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts - 94 + 92 @@ -5904,11 +5964,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 80 + 82 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 96 + 98 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5928,7 +5988,7 @@ Sluit Holding apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 442 + 447 @@ -5976,7 +6036,7 @@ Week tot nu toe apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 201 + 204 libs/ui/src/lib/assistant/assistant.component.ts @@ -5996,7 +6056,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 205 + 208 libs/ui/src/lib/assistant/assistant.component.ts @@ -6044,7 +6104,7 @@ jaar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 213 + 216 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6064,7 +6124,7 @@ jaren apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 217 + 220 libs/ui/src/lib/assistant/assistant.component.ts @@ -6084,7 +6144,7 @@ Data Verzamelen apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 592 + 597 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6149,7 +6209,7 @@ Oeps! Het lijkt er op dat u te veel verzoeken indient. Doe het iets rustiger aan alstublieft. apps/client/src/app/core/http-response.interceptor.ts - 106 + 103 @@ -6176,14 +6236,6 @@ 62 - - Indonesia - Indonesië - - libs/ui/src/lib/i18n.ts - 90 - - Activity Activiteit @@ -6221,7 +6273,7 @@ Deze actie is niet toegestaan. apps/client/src/app/core/http-response.interceptor.ts - 67 + 64 @@ -6229,7 +6281,7 @@ Liquiditeit libs/ui/src/lib/i18n.ts - 49 + 51 @@ -6245,7 +6297,7 @@ Aan- en Verkoop libs/ui/src/lib/i18n.ts - 8 + 10 @@ -6325,7 +6377,7 @@ Opnemen in apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 377 + 382 @@ -6349,7 +6401,7 @@ Benchmarks apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 125 + 130 @@ -6365,7 +6417,7 @@ Wilt u deze profielen echt verwijderen? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 68 + 59 @@ -6373,7 +6425,7 @@ Oeps! Verwijderen van de profielen is mislukt. apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 56 + 47 @@ -6572,38 +6624,6 @@ 100 - - Australia - Australië - - libs/ui/src/lib/i18n.ts - 79 - - - - Austria - Oostenrijk - - libs/ui/src/lib/i18n.ts - 80 - - - - Belgium - België - - libs/ui/src/lib/i18n.ts - 81 - - - - Bulgaria - Bulgarije - - libs/ui/src/lib/i18n.ts - 83 - - View Holding Bekijk Holding @@ -6612,124 +6632,12 @@ 474 - - Canada - Canada - - libs/ui/src/lib/i18n.ts - 84 - - - - Czech Republic - Tsjechische Republiek - - libs/ui/src/lib/i18n.ts - 85 - - - - Finland - Finland - - libs/ui/src/lib/i18n.ts - 86 - - - - France - Frankrijk - - libs/ui/src/lib/i18n.ts - 87 - - - - Germany - Duitsland - - libs/ui/src/lib/i18n.ts - 88 - - - - India - India - - libs/ui/src/lib/i18n.ts - 89 - - - - Italy - Italië - - libs/ui/src/lib/i18n.ts - 91 - - - - Netherlands - Nederland - - libs/ui/src/lib/i18n.ts - 93 - - - - New Zealand - Nieuw-Zeeland - - libs/ui/src/lib/i18n.ts - 94 - - - - Poland - Polen - - libs/ui/src/lib/i18n.ts - 95 - - - - Romania - Roemenië - - libs/ui/src/lib/i18n.ts - 96 - - - - South Africa - Zuid-Afrika - - libs/ui/src/lib/i18n.ts - 98 - - - - Thailand - Thailand - - libs/ui/src/lib/i18n.ts - 100 - - - - United States - Verenigde Station - - libs/ui/src/lib/i18n.ts - 103 - - Error Fout apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 734 + 740 @@ -6753,7 +6661,7 @@ Oops! Kan de toegang niet updaten. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 181 + 194 @@ -6781,7 +6689,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 597 + 602 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6825,7 +6733,7 @@ libs/ui/src/lib/i18n.ts - 9 + 11 @@ -6833,7 +6741,7 @@ Sluiten apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 599 + 604 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6873,7 +6781,7 @@ libs/ui/src/lib/i18n.ts - 11 + 13 @@ -6889,7 +6797,7 @@ Ja libs/ui/src/lib/i18n.ts - 33 + 35 @@ -7040,6 +6948,14 @@ 174 + + Financial Services + Financial Services + + libs/ui/src/lib/i18n.ts + 91 + + 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 @@ -7157,15 +7073,7 @@ Krijg toegang tot meer dan 80.000 tickers van meer dan 50 beurzen libs/ui/src/lib/i18n.ts - 25 - - - - Ukraine - Oekraïne - - libs/ui/src/lib/i18n.ts - 101 + 27 @@ -7371,7 +7279,7 @@ Opslaan apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 608 + 613 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7419,11 +7327,11 @@ Ik apps/client/src/app/components/header/header.component.html - 213 + 217 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 250 + 254 @@ -7463,7 +7371,7 @@ AI-prompt is naar het klembord gekopieerd apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 211 @@ -7479,7 +7387,7 @@ Lui apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 235 + 239 @@ -7487,7 +7395,7 @@ Direct apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 239 + 243 @@ -7495,7 +7403,7 @@ Standaard Marktprijs apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 482 + 487 @@ -7503,7 +7411,7 @@ Modus apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 519 + 524 @@ -7511,7 +7419,7 @@ Kiezer apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 535 + 540 @@ -7519,7 +7427,7 @@ HTTP Verzoek Headers apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 495 + 500 @@ -7527,7 +7435,7 @@ eind van de dag apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 235 + 239 @@ -7535,7 +7443,7 @@ real-time apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 239 + 243 @@ -7543,7 +7451,7 @@ Open Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 212 @@ -7559,7 +7467,7 @@ Aanpassen libs/ui/src/lib/holdings-table/holdings-table.component.html - 138 + 143 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7575,11 +7483,11 @@ apps/client/src/app/components/home-overview/home-overview.component.ts - 52 + 53 libs/ui/src/lib/holdings-table/holdings-table.component.html - 161 + 166 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7622,30 +7530,6 @@ 94 - - Armenia - Armenië - - libs/ui/src/lib/i18n.ts - 77 - - - - British Virgin Islands - Britse Maagdeneilanden - - libs/ui/src/lib/i18n.ts - 82 - - - - Singapore - Singapore - - libs/ui/src/lib/i18n.ts - 97 - - Terms and Conditions Algemene Voorwaarden @@ -7691,11 +7575,11 @@ Beveiligingstoken apps/client/src/app/components/admin-users/admin-users.component.ts - 235 + 256 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 167 + 179 @@ -7703,7 +7587,7 @@ Wilt u echt een nieuw beveiligingstoken voor deze gebruiker aanmaken? apps/client/src/app/components/admin-users/admin-users.component.ts - 240 + 261 @@ -7714,14 +7598,6 @@ 239 - - United Kingdom - Verenigd Koninkrijk - - libs/ui/src/lib/i18n.ts - 102 - - Terms of Service Servicevoorwaarden @@ -7768,7 +7644,7 @@ () is al in gebruik. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 675 + 681 @@ -7776,7 +7652,7 @@ Er is een fout opgetreden tijdens het updaten naar (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 683 + 689 @@ -7840,7 +7716,7 @@ iemand apps/client/src/app/pages/public/public-page.component.ts - 62 + 63 @@ -7872,7 +7748,7 @@ Wilt u dit item echt verwijderen? libs/ui/src/lib/benchmark/benchmark.component.ts - 137 + 141 @@ -7880,7 +7756,7 @@ Uitloggen apps/client/src/app/components/header/header.component.html - 325 + 330 @@ -8127,7 +8003,7 @@ Huidige maand apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 205 + 208 @@ -8292,7 +8168,7 @@ Wilt u echt een nieuwe securitytoken genereren? apps/client/src/app/components/user-account-access/user-account-access.component.ts - 172 + 184 @@ -8348,7 +8224,7 @@ Beheer activaprofiel apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 467 + 472 @@ -8356,7 +8232,7 @@ Alternatieve belegging libs/ui/src/lib/i18n.ts - 45 + 47 @@ -8364,7 +8240,7 @@ Verzamelobject libs/ui/src/lib/i18n.ts - 55 + 57 @@ -8372,7 +8248,7 @@ Gemiddelde eenheidsprijs apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 113 + 117 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html diff --git a/apps/client/src/locales/messages.pl.xlf b/apps/client/src/locales/messages.pl.xlf index b48149e75..7dde9b9e0 100644 --- a/apps/client/src/locales/messages.pl.xlf +++ b/apps/client/src/locales/messages.pl.xlf @@ -355,7 +355,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 310 + 315 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -395,11 +395,11 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 12 + 23 libs/ui/src/lib/holdings-table/holdings-table.component.html - 23 + 28 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -427,7 +427,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 317 + 322 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -491,7 +491,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 93 + 98 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -571,7 +571,7 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 176 + 187 @@ -599,7 +599,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 449 + 454 @@ -623,7 +623,7 @@ libs/ui/src/lib/i18n.ts - 14 + 16 @@ -759,7 +759,7 @@ Waluty apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 130 + 135 apps/client/src/app/pages/public/public-page.html @@ -771,7 +771,7 @@ ETF-y bez Krajów apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 135 + 140 @@ -779,7 +779,7 @@ ETF-y bez Sektorów apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 140 + 145 @@ -787,7 +787,7 @@ Czy na pewno chcesz usunąć ten profil aktywów? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 37 + 28 @@ -795,7 +795,7 @@ Filtruj według... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 368 + 374 @@ -815,7 +815,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 45 + 50 @@ -874,6 +874,14 @@ 284 + + Healthcare + Healthcare + + libs/ui/src/lib/i18n.ts + 92 + + Refresh Odśwież @@ -915,7 +923,7 @@ Kraj apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 273 + 278 apps/client/src/app/components/admin-users/admin-users.html @@ -923,7 +931,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 276 + 281 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -935,15 +943,15 @@ Sektory apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 279 + 284 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 398 + 403 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 282 + 287 apps/client/src/app/pages/public/public-page.html @@ -955,15 +963,15 @@ Kraje apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 289 + 294 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 409 + 414 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 294 + 299 @@ -971,7 +979,15 @@ Mapowanie Symboli apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 387 + 392 + + + + Technology + Technology + + libs/ui/src/lib/i18n.ts + 96 @@ -987,7 +1003,7 @@ Konfiguracja Scrapera apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 472 + 477 @@ -995,7 +1011,7 @@ Notatka apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 433 + 438 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1022,6 +1038,14 @@ 16 + + Industrials + Industrials + + libs/ui/src/lib/i18n.ts + 93 + + Add Manually Dodaj Ręcznie @@ -1050,6 +1074,14 @@ 119 + + Consumer Cyclical + Consumer Cyclical + + libs/ui/src/lib/i18n.ts + 88 + + Do you really want to delete this coupon? Czy naprawdę chcesz usunąć ten kupon? @@ -1187,11 +1219,11 @@ Url apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 420 + 425 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 551 + 556 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -1207,7 +1239,7 @@ Profil zasobu został zapisany apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 618 + 624 @@ -1215,7 +1247,7 @@ Czy naprawdę chcesz usunąć tę platformę? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 111 + 115 @@ -1247,7 +1279,7 @@ Obecny rok apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 209 + 212 @@ -1295,7 +1327,7 @@ Czy naprawdę chcesz usunąć ten tag? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 108 + 117 @@ -1319,7 +1351,7 @@ Czy na pewno chcesz usunąć tego użytkownika? apps/client/src/app/components/admin-users/admin-users.component.ts - 215 + 236 @@ -1335,7 +1367,7 @@ apps/client/src/app/components/header/header.component.html - 231 + 235 @@ -1387,11 +1419,11 @@ Could not validate form apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 594 + 600 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 597 + 603 @@ -1415,15 +1447,15 @@ Portfel apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 140 + 143 apps/client/src/app/components/header/header.component.html - 44 + 45 apps/client/src/app/components/header/header.component.html - 257 + 261 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -1439,11 +1471,11 @@ Poziom Odniesienia (Benchmark) apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 379 + 384 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 152 + 155 @@ -1459,7 +1491,7 @@ O Ghostfolio apps/client/src/app/components/header/header.component.html - 322 + 327 apps/client/src/app/pages/about/overview/about-overview-page.html @@ -1471,11 +1503,11 @@ Zaloguj się apps/client/src/app/components/header/header.component.html - 421 + 426 apps/client/src/app/components/header/header.component.ts - 296 + 305 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -1495,11 +1527,11 @@ Ups! Nieprawidłowy token bezpieczeństwa. apps/client/src/app/components/header/header.component.ts - 311 + 320 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 152 + 164 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts @@ -1519,7 +1551,7 @@ Zagrożenie apps/client/src/app/components/home-market/home-market.component.ts - 41 + 46 apps/client/src/app/components/markets/markets.component.ts @@ -1527,7 +1559,7 @@ libs/ui/src/lib/i18n.ts - 108 + 81 @@ -1535,7 +1567,7 @@ Zachłanność apps/client/src/app/components/home-market/home-market.component.ts - 42 + 47 apps/client/src/app/components/markets/markets.component.ts @@ -1543,7 +1575,7 @@ libs/ui/src/lib/i18n.ts - 109 + 82 @@ -1643,7 +1675,7 @@ Obecny tydzień apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 201 + 204 @@ -1762,6 +1794,14 @@ 46 + + Energy + Energy + + libs/ui/src/lib/i18n.ts + 90 + + Stay signed in Pozostań zalogowany @@ -1923,7 +1963,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 69 + 74 @@ -1931,7 +1971,7 @@ Zgłoś Błąd Danych apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 452 + 457 @@ -2079,7 +2119,7 @@ Ulepsz Plan apps/client/src/app/components/header/header.component.html - 193 + 197 apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html @@ -2119,7 +2159,7 @@ Liczony od początku roku (year-to-date) apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 209 + 212 libs/ui/src/lib/assistant/assistant.component.ts @@ -2131,7 +2171,7 @@ 1 rok apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 213 + 216 libs/ui/src/lib/assistant/assistant.component.ts @@ -2143,7 +2183,7 @@ 5 lat apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 217 + 220 libs/ui/src/lib/assistant/assistant.component.ts @@ -2163,7 +2203,7 @@ Maksimum apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 221 + 224 libs/ui/src/lib/assistant/assistant.component.ts @@ -2210,6 +2250,14 @@ 174 + + Consumer Defensive + Consumer Defensive + + libs/ui/src/lib/i18n.ts + 89 + + Coupon code has been redeemed Kupon został zrealizowany @@ -2282,6 +2330,14 @@ 279 + + Utilities + Utilities + + libs/ui/src/lib/i18n.ts + 97 + + Presenter View Widok Prezentera @@ -2319,7 +2375,7 @@ Ustawienia Regionalne apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 510 + 515 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -2447,7 +2503,7 @@ Ta funkcja jest obecnie niedostępna. apps/client/src/app/core/http-response.interceptor.ts - 55 + 52 @@ -2455,15 +2511,15 @@ Spróbuj ponownie później. apps/client/src/app/core/http-response.interceptor.ts - 57 + 54 apps/client/src/app/core/http-response.interceptor.ts - 88 + 85 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 191 + 192 @@ -2471,11 +2527,11 @@ Ups! Coś poszło nie tak. apps/client/src/app/core/http-response.interceptor.ts - 86 + 83 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 189 + 190 @@ -2487,11 +2543,11 @@ apps/client/src/app/core/http-response.interceptor.ts - 89 + 86 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 192 + 193 @@ -2503,11 +2559,11 @@ apps/client/src/app/components/header/header.component.html - 124 + 125 apps/client/src/app/components/header/header.component.html - 370 + 375 apps/client/src/app/pages/about/overview/about-overview-page.routes.ts @@ -2611,15 +2667,15 @@ apps/client/src/app/components/header/header.component.html - 58 + 59 apps/client/src/app/components/header/header.component.html - 267 + 271 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 378 + 383 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2643,7 +2699,7 @@ Ups, transfer salda nie powiódł się. apps/client/src/app/pages/accounts/accounts-page.component.ts - 341 + 337 @@ -2699,11 +2755,11 @@ Panel Administratora apps/client/src/app/components/header/header.component.html - 74 + 75 apps/client/src/app/components/header/header.component.html - 287 + 291 libs/common/src/lib/routes/routes.ts @@ -2715,7 +2771,7 @@ Dane Rynkowe apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 400 + 405 libs/common/src/lib/routes/routes.ts @@ -2767,7 +2823,7 @@ apps/client/src/app/components/header/header.component.html - 247 + 251 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2907,11 +2963,11 @@ Nie udało się przetworzyć konfiguracji scrapera apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 545 + 551 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 548 + 554 @@ -2967,7 +3023,7 @@ apps/client/src/app/components/header/header.component.html - 356 + 361 apps/client/src/app/pages/features/features-page.html @@ -3087,7 +3143,7 @@ Rozpocznij apps/client/src/app/components/header/header.component.html - 432 + 437 apps/client/src/app/pages/features/features-page.html @@ -3159,7 +3215,7 @@ Rynki apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 381 + 386 apps/client/src/app/components/footer/footer.component.html @@ -3167,7 +3223,7 @@ apps/client/src/app/components/header/header.component.html - 403 + 408 apps/client/src/app/components/home-market/home-market.html @@ -3330,6 +3386,14 @@ 149 + + Basic Materials + Basic Materials + + libs/ui/src/lib/i18n.ts + 86 + + Use Ghostfolio anonymously and own your financial data. Korzystaj z Ghostfolio anonimowo i zachowaj pełną kontrolę nad swoimi danymi finansowymi. @@ -3675,7 +3739,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 342 + 347 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -3787,7 +3851,7 @@ Importuj Aktywności apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 93 + 94 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3803,7 +3867,7 @@ Impotruj Dywidendy apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 132 + 133 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3819,7 +3883,7 @@ Importowanie danych... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 171 + 172 @@ -3827,7 +3891,7 @@ Importowanie zakończone apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 181 + 182 @@ -3843,7 +3907,7 @@ Weryfikacja danych... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 291 + 293 @@ -4027,7 +4091,7 @@ libs/ui/src/lib/i18n.ts - 16 + 18 @@ -4143,11 +4207,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 78 libs/ui/src/lib/i18n.ts - 37 + 39 @@ -4171,7 +4235,7 @@ Miesięcznie apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 92 @@ -4179,7 +4243,7 @@ Rocznie apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 93 @@ -4195,7 +4259,7 @@ Największy spadek apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 352 + 354 @@ -4203,7 +4267,7 @@ Rozwój portfela apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 405 + 409 @@ -4211,7 +4275,7 @@ Oś czasu inwestycji apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 434 + 438 @@ -4219,7 +4283,7 @@ Obecna passa apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 455 + 459 @@ -4227,7 +4291,7 @@ Najdłuższa passa apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 464 + 468 @@ -4235,7 +4299,7 @@ Oś czasu dywidend apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 493 + 497 @@ -4263,15 +4327,15 @@ apps/client/src/app/components/header/header.component.html - 105 + 106 apps/client/src/app/components/header/header.component.html - 309 + 314 apps/client/src/app/components/header/header.component.html - 384 + 389 apps/client/src/app/pages/pricing/pricing-page.routes.ts @@ -4435,7 +4499,7 @@ Odnów Plan apps/client/src/app/components/header/header.component.html - 191 + 195 apps/client/src/app/components/user-account-membership/user-account-membership.html @@ -4459,11 +4523,11 @@ Could not save asset profile apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 628 + 634 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 631 + 637 @@ -4822,10 +4886,6 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts 58 - - libs/ui/src/lib/i18n.ts - 99 - Global @@ -4836,7 +4896,7 @@ libs/ui/src/lib/i18n.ts - 17 + 19 @@ -4848,11 +4908,11 @@ apps/client/src/app/components/header/header.component.html - 88 + 89 apps/client/src/app/components/header/header.component.html - 297 + 301 apps/client/src/app/pages/resources/overview/resources-overview.component.html @@ -4900,7 +4960,7 @@ Moje Ghostfolio apps/client/src/app/components/header/header.component.html - 276 + 280 apps/client/src/app/pages/user-account/user-account-page.routes.ts @@ -5012,7 +5072,7 @@ Ostatni Najwyższy Punkt w Historii libs/ui/src/lib/benchmark/benchmark.component.html - 90 + 101 @@ -5020,7 +5080,7 @@ Zmiana od Najwyższego Punktu w Historii libs/ui/src/lib/benchmark/benchmark.component.html - 117 + 128 @@ -5036,7 +5096,7 @@ od ATH libs/ui/src/lib/benchmark/benchmark.component.html - 119 + 130 @@ -5044,7 +5104,7 @@ Loan libs/ui/src/lib/i18n.ts - 58 + 60 @@ -5104,7 +5164,7 @@ libs/ui/src/lib/i18n.ts - 39 + 41 @@ -5124,7 +5184,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 117 + 122 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5140,7 +5200,7 @@ Pokaż wszystko libs/ui/src/lib/holdings-table/holdings-table.component.html - 212 + 217 @@ -5156,7 +5216,7 @@ libs/ui/src/lib/i18n.ts - 4 + 6 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html @@ -5168,7 +5228,7 @@ Azja-Pacyfik libs/ui/src/lib/i18n.ts - 5 + 7 @@ -5184,7 +5244,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 327 + 332 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -5196,11 +5256,11 @@ libs/ui/src/lib/i18n.ts - 6 + 8 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html - 64 + 65 @@ -5216,7 +5276,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 343 + 348 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -5228,7 +5288,7 @@ libs/ui/src/lib/i18n.ts - 7 + 9 @@ -5236,7 +5296,7 @@ Główny libs/ui/src/lib/i18n.ts - 10 + 12 @@ -5244,7 +5304,7 @@ Przełącz się z łatwością na Ghostfolio Premium lub Ghostfolio Open Source libs/ui/src/lib/i18n.ts - 12 + 14 @@ -5252,7 +5312,7 @@ Przełącz się z łatwością na Ghostfolio Premium libs/ui/src/lib/i18n.ts - 13 + 15 @@ -5268,7 +5328,7 @@ libs/ui/src/lib/i18n.ts - 15 + 17 @@ -5276,7 +5336,7 @@ Dotacja libs/ui/src/lib/i18n.ts - 18 + 20 @@ -5284,7 +5344,7 @@ Wyższe Ryzyko libs/ui/src/lib/i18n.ts - 19 + 21 @@ -5292,15 +5352,7 @@ Ta działalność już istnieje. libs/ui/src/lib/i18n.ts - 20 - - - - Japan - Japonia - - libs/ui/src/lib/i18n.ts - 92 + 22 @@ -5308,7 +5360,7 @@ Niższe Ryzyko libs/ui/src/lib/i18n.ts - 21 + 23 @@ -5316,7 +5368,7 @@ Miesiąc libs/ui/src/lib/i18n.ts - 22 + 24 @@ -5324,7 +5376,7 @@ Miesiące libs/ui/src/lib/i18n.ts - 23 + 25 @@ -5332,11 +5384,15 @@ Inne libs/ui/src/lib/i18n.ts - 24 + 26 + + + libs/ui/src/lib/i18n.ts + 94 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 451 + 449 @@ -5344,7 +5400,7 @@ Wstępnie ustawione libs/ui/src/lib/i18n.ts - 26 + 28 @@ -5352,7 +5408,7 @@ Brak transakcji apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 145 + 150 @@ -5360,7 +5416,7 @@ Świadczenia Emerytalne libs/ui/src/lib/i18n.ts - 27 + 29 @@ -5376,7 +5432,7 @@ Satelita libs/ui/src/lib/i18n.ts - 28 + 30 @@ -5400,11 +5456,11 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 314 + 319 libs/ui/src/lib/i18n.ts - 29 + 31 @@ -5412,11 +5468,11 @@ Tag libs/ui/src/lib/i18n.ts - 30 + 32 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html - 53 + 54 @@ -5424,7 +5480,7 @@ Rok libs/ui/src/lib/i18n.ts - 31 + 33 @@ -5444,7 +5500,7 @@ Lata libs/ui/src/lib/i18n.ts - 32 + 34 @@ -5464,7 +5520,7 @@ libs/ui/src/lib/i18n.ts - 36 + 38 @@ -5480,7 +5536,7 @@ libs/ui/src/lib/i18n.ts - 38 + 40 @@ -5488,7 +5544,7 @@ Kosztowności libs/ui/src/lib/i18n.ts - 42 + 44 @@ -5496,7 +5552,7 @@ Zobowiązanie libs/ui/src/lib/i18n.ts - 40 + 42 @@ -5508,7 +5564,7 @@ libs/ui/src/lib/i18n.ts - 41 + 43 @@ -5520,7 +5576,7 @@ libs/ui/src/lib/i18n.ts - 54 + 56 @@ -5528,7 +5584,7 @@ Towar libs/ui/src/lib/i18n.ts - 46 + 48 @@ -5540,7 +5596,7 @@ libs/ui/src/lib/i18n.ts - 47 + 49 @@ -5548,7 +5604,7 @@ Stały Dochód libs/ui/src/lib/i18n.ts - 48 + 50 @@ -5556,7 +5612,11 @@ Nieruchomość libs/ui/src/lib/i18n.ts - 50 + 52 + + + libs/ui/src/lib/i18n.ts + 95 @@ -5572,7 +5632,7 @@ Obligacja libs/ui/src/lib/i18n.ts - 53 + 55 @@ -5580,7 +5640,7 @@ Kryptowaluta libs/ui/src/lib/i18n.ts - 56 + 58 @@ -5588,7 +5648,7 @@ ETF libs/ui/src/lib/i18n.ts - 57 + 59 @@ -5596,7 +5656,7 @@ Fundusz Wzajemny libs/ui/src/lib/i18n.ts - 59 + 61 @@ -5604,7 +5664,7 @@ Metal Szlachetny libs/ui/src/lib/i18n.ts - 60 + 62 @@ -5612,7 +5672,7 @@ Prywatny Kapitał libs/ui/src/lib/i18n.ts - 61 + 63 @@ -5620,7 +5680,7 @@ Akcje libs/ui/src/lib/i18n.ts - 62 + 64 @@ -5628,7 +5688,7 @@ Afryka libs/ui/src/lib/i18n.ts - 69 + 71 @@ -5636,7 +5696,15 @@ Azja libs/ui/src/lib/i18n.ts - 70 + 72 + + + + Communication Services + Communication Services + + libs/ui/src/lib/i18n.ts + 87 @@ -5644,7 +5712,7 @@ Europa libs/ui/src/lib/i18n.ts - 71 + 73 @@ -5652,7 +5720,7 @@ Ameryka Północna libs/ui/src/lib/i18n.ts - 72 + 74 @@ -5668,7 +5736,7 @@ Oceania libs/ui/src/lib/i18n.ts - 73 + 75 @@ -5676,7 +5744,7 @@ Ameryka Południowa libs/ui/src/lib/i18n.ts - 74 + 76 @@ -5684,7 +5752,7 @@ Skrajny Strach libs/ui/src/lib/i18n.ts - 106 + 79 @@ -5692,7 +5760,7 @@ Skrajna Zachłanność libs/ui/src/lib/i18n.ts - 107 + 80 @@ -5700,7 +5768,7 @@ Neutralny libs/ui/src/lib/i18n.ts - 110 + 83 @@ -5736,15 +5804,15 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 209 + 220 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 453 + 451 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 467 + 465 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5756,7 +5824,7 @@ 50-Dniowy Trend libs/ui/src/lib/benchmark/benchmark.component.html - 32 + 43 @@ -5764,7 +5832,7 @@ 200-Dniowy Trend libs/ui/src/lib/benchmark/benchmark.component.html - 61 + 72 @@ -5772,7 +5840,7 @@ Salda Gotówkowe apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 142 + 145 @@ -5808,7 +5876,7 @@ Obecna cena rynkowa wynosi apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 743 + 749 @@ -5816,7 +5884,7 @@ Test apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 569 + 574 @@ -5856,15 +5924,7 @@ Ups! Nie udało się przyznać dostępu. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 144 - - - - Argentina - Argentyna - - libs/ui/src/lib/i18n.ts - 78 + 151 @@ -5888,7 +5948,7 @@ Dane rynkowe są opóźnione o apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts - 94 + 92 @@ -5904,11 +5964,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 80 + 82 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 96 + 98 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5928,7 +5988,7 @@ Zamknij pozycję apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 442 + 447 @@ -5976,7 +6036,7 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 201 + 204 libs/ui/src/lib/assistant/assistant.component.ts @@ -5996,7 +6056,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 205 + 208 libs/ui/src/lib/assistant/assistant.component.ts @@ -6044,7 +6104,7 @@ rok apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 213 + 216 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6064,7 +6124,7 @@ lata apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 217 + 220 libs/ui/src/lib/assistant/assistant.component.ts @@ -6084,7 +6144,7 @@ Gromadzenie Danych apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 592 + 597 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6149,7 +6209,7 @@ Ups! Wygląda na to, że wykonujesz zbyt wiele zapytań. Proszę, zwolnij trochę. apps/client/src/app/core/http-response.interceptor.ts - 106 + 103 @@ -6176,14 +6236,6 @@ 62 - - Indonesia - Indonezja - - libs/ui/src/lib/i18n.ts - 90 - - Activity Aktywność @@ -6221,7 +6273,7 @@ To działanie jest niedozwolone. apps/client/src/app/core/http-response.interceptor.ts - 67 + 64 @@ -6229,7 +6281,7 @@ Płynność środków finansowych libs/ui/src/lib/i18n.ts - 49 + 51 @@ -6245,7 +6297,7 @@ Kupno i Sprzedaż libs/ui/src/lib/i18n.ts - 8 + 10 @@ -6325,7 +6377,7 @@ Uwzględnij w apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 377 + 382 @@ -6349,7 +6401,7 @@ Punkty Odniesienia apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 125 + 130 @@ -6365,7 +6417,7 @@ Czy na pewno chcesz usunąć te profile? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 68 + 59 @@ -6373,7 +6425,7 @@ Ups! Nie udało się usunąć profili. apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 56 + 47 @@ -6572,38 +6624,6 @@ 100 - - Australia - Australia - - libs/ui/src/lib/i18n.ts - 79 - - - - Austria - Austria - - libs/ui/src/lib/i18n.ts - 80 - - - - Belgium - Belgia - - libs/ui/src/lib/i18n.ts - 81 - - - - Bulgaria - Bułgaria - - libs/ui/src/lib/i18n.ts - 83 - - View Holding Podgląd inwestycji @@ -6612,124 +6632,12 @@ 474 - - Canada - Kanada - - libs/ui/src/lib/i18n.ts - 84 - - - - Czech Republic - Czechy - - libs/ui/src/lib/i18n.ts - 85 - - - - Finland - Finlandia - - libs/ui/src/lib/i18n.ts - 86 - - - - France - Francja - - libs/ui/src/lib/i18n.ts - 87 - - - - Germany - Niemcy - - libs/ui/src/lib/i18n.ts - 88 - - - - India - Indie - - libs/ui/src/lib/i18n.ts - 89 - - - - Italy - Włochy - - libs/ui/src/lib/i18n.ts - 91 - - - - Netherlands - Holandia - - libs/ui/src/lib/i18n.ts - 93 - - - - New Zealand - Nowa Zelandia - - libs/ui/src/lib/i18n.ts - 94 - - - - Poland - Polska - - libs/ui/src/lib/i18n.ts - 95 - - - - Romania - Rumunia - - libs/ui/src/lib/i18n.ts - 96 - - - - South Africa - Południowa Afryka - - libs/ui/src/lib/i18n.ts - 98 - - - - Thailand - Tajlandia - - libs/ui/src/lib/i18n.ts - 100 - - - - United States - Stany Zjednoczone - - libs/ui/src/lib/i18n.ts - 103 - - Error Błąd apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 734 + 740 @@ -6753,7 +6661,7 @@ Ups! Nie udało się zaktualizować dostępu. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 181 + 194 @@ -6781,7 +6689,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 597 + 602 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6825,7 +6733,7 @@ libs/ui/src/lib/i18n.ts - 9 + 11 @@ -6833,7 +6741,7 @@ Zamknij apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 599 + 604 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6873,7 +6781,7 @@ libs/ui/src/lib/i18n.ts - 11 + 13 @@ -6889,7 +6797,7 @@ Tak libs/ui/src/lib/i18n.ts - 33 + 35 @@ -7040,6 +6948,14 @@ 174 + + Financial Services + Financial Services + + libs/ui/src/lib/i18n.ts + 91 + + to use our referral link and get a Ghostfolio Premium membership for one year aby skorzystać z naszego linku polecającego i otrzymać roczną subskrypcję Ghostfolio Premium @@ -7157,15 +7073,7 @@ Uzyskaj dostęp do ponad 80 000 pasków notowań giełdowych z ponad 50 giełd libs/ui/src/lib/i18n.ts - 25 - - - - Ukraine - Ukraina - - libs/ui/src/lib/i18n.ts - 101 + 27 @@ -7371,7 +7279,7 @@ Zapisz apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 608 + 613 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7419,11 +7327,11 @@ Ja apps/client/src/app/components/header/header.component.html - 213 + 217 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 250 + 254 @@ -7463,7 +7371,7 @@ Prompt AI został skopiowany do schowka apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 211 @@ -7479,7 +7387,7 @@ Leniwy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 235 + 239 @@ -7487,7 +7395,7 @@ Natychmiastowy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 239 + 243 @@ -7495,7 +7403,7 @@ Domyślna cena rynkowa apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 482 + 487 @@ -7503,7 +7411,7 @@ Tryb apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 519 + 524 @@ -7511,7 +7419,7 @@ Selektor apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 535 + 540 @@ -7519,7 +7427,7 @@ Nagłówki żądań HTTP apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 495 + 500 @@ -7527,7 +7435,7 @@ koniec dnia apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 235 + 239 @@ -7535,7 +7443,7 @@ w czasie rzeczywistym apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 239 + 243 @@ -7543,7 +7451,7 @@ Otwórz Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 212 @@ -7559,7 +7467,7 @@ Zmiana libs/ui/src/lib/holdings-table/holdings-table.component.html - 138 + 143 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7575,11 +7483,11 @@ apps/client/src/app/components/home-overview/home-overview.component.ts - 52 + 53 libs/ui/src/lib/holdings-table/holdings-table.component.html - 161 + 166 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7622,30 +7530,6 @@ 94 - - Armenia - Armenia - - libs/ui/src/lib/i18n.ts - 77 - - - - British Virgin Islands - Brytyjskie Wyspy Dziewicze - - libs/ui/src/lib/i18n.ts - 82 - - - - Singapore - Singapur - - libs/ui/src/lib/i18n.ts - 97 - - Terms and Conditions Zasady i Warunki użytkownia @@ -7691,11 +7575,11 @@ Token bezpieczeństwa apps/client/src/app/components/admin-users/admin-users.component.ts - 235 + 256 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 167 + 179 @@ -7703,7 +7587,7 @@ Czy napewno chcesz wygenerować nowy token bezpieczeństwa dla tego użytkownika? apps/client/src/app/components/admin-users/admin-users.component.ts - 240 + 261 @@ -7714,14 +7598,6 @@ 239 - - United Kingdom - Wielka Brytania - - libs/ui/src/lib/i18n.ts - 102 - - Terms of Service Warunki świadczenia usług @@ -7768,7 +7644,7 @@ () jest już w użyciu. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 675 + 681 @@ -7776,7 +7652,7 @@ Wystąpił błąd podczas aktualizacji do (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 683 + 689 @@ -7840,7 +7716,7 @@ ktoś apps/client/src/app/pages/public/public-page.component.ts - 62 + 63 @@ -7872,7 +7748,7 @@ Czy na pewno chcesz usunąć ten element? libs/ui/src/lib/benchmark/benchmark.component.ts - 137 + 141 @@ -7880,7 +7756,7 @@ Wyloguj się apps/client/src/app/components/header/header.component.html - 325 + 330 @@ -8127,7 +8003,7 @@ Bieżący miesiąc apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 205 + 208 @@ -8292,7 +8168,7 @@ Czy na pewno chcesz wygenerować nowy token bezpieczeństwa? apps/client/src/app/components/user-account-access/user-account-access.component.ts - 172 + 184 @@ -8348,7 +8224,7 @@ Zarządzaj profilem aktywów apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 467 + 472 @@ -8356,7 +8232,7 @@ Inwestycja alternatywna libs/ui/src/lib/i18n.ts - 45 + 47 @@ -8364,7 +8240,7 @@ Kolekcjonerskie libs/ui/src/lib/i18n.ts - 55 + 57 @@ -8372,7 +8248,7 @@ Średnia cena jednostkowa apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 113 + 117 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html diff --git a/apps/client/src/locales/messages.pt.xlf b/apps/client/src/locales/messages.pt.xlf index 2588a73ab..65494b458 100644 --- a/apps/client/src/locales/messages.pt.xlf +++ b/apps/client/src/locales/messages.pt.xlf @@ -118,7 +118,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 310 + 315 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -158,11 +158,11 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 12 + 23 libs/ui/src/lib/holdings-table/holdings-table.component.html - 23 + 28 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -190,7 +190,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 317 + 322 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -270,7 +270,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 93 + 98 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -350,7 +350,7 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 176 + 187 @@ -382,7 +382,7 @@ libs/ui/src/lib/i18n.ts - 14 + 16 @@ -458,7 +458,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 449 + 454 @@ -542,7 +542,7 @@ Filtrar por... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 368 + 374 @@ -562,7 +562,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 45 + 50 @@ -710,7 +710,7 @@ Deseja realmente excluir este utilizador? apps/client/src/app/components/admin-users/admin-users.component.ts - 215 + 236 @@ -726,7 +726,7 @@ apps/client/src/app/components/header/header.component.html - 231 + 235 @@ -762,11 +762,11 @@ Could not validate form apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 594 + 600 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 597 + 603 @@ -782,15 +782,15 @@ Portefólio apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 140 + 143 apps/client/src/app/components/header/header.component.html - 44 + 45 apps/client/src/app/components/header/header.component.html - 257 + 261 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -806,11 +806,11 @@ Referência apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 379 + 384 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 152 + 155 @@ -826,7 +826,7 @@ Sobre o Ghostfolio apps/client/src/app/components/header/header.component.html - 322 + 327 apps/client/src/app/pages/about/overview/about-overview-page.html @@ -838,11 +838,11 @@ Iniciar sessão apps/client/src/app/components/header/header.component.html - 421 + 426 apps/client/src/app/components/header/header.component.ts - 296 + 305 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -862,11 +862,11 @@ Oops! Token de Segurança Incorreto. apps/client/src/app/components/header/header.component.ts - 311 + 320 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 152 + 164 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts @@ -886,7 +886,7 @@ Medo apps/client/src/app/components/home-market/home-market.component.ts - 41 + 46 apps/client/src/app/components/markets/markets.component.ts @@ -894,7 +894,7 @@ libs/ui/src/lib/i18n.ts - 108 + 81 @@ -902,7 +902,7 @@ Ganância apps/client/src/app/components/home-market/home-market.component.ts - 42 + 47 apps/client/src/app/components/markets/markets.component.ts @@ -910,7 +910,7 @@ libs/ui/src/lib/i18n.ts - 109 + 82 @@ -1045,6 +1045,14 @@ 46 + + Energy + Energy + + libs/ui/src/lib/i18n.ts + 90 + + Stay signed in Manter sessão iniciada @@ -1174,7 +1182,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 69 + 74 @@ -1194,7 +1202,7 @@ País apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 273 + 278 apps/client/src/app/components/admin-users/admin-users.html @@ -1202,7 +1210,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 276 + 281 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -1214,15 +1222,15 @@ Setores apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 279 + 284 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 398 + 403 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 282 + 287 apps/client/src/app/pages/public/public-page.html @@ -1234,15 +1242,15 @@ Países apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 289 + 294 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 409 + 414 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 294 + 299 @@ -1266,7 +1274,7 @@ Dados do Relatório com Problema apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 452 + 457 @@ -1278,7 +1286,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 117 + 122 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -1294,7 +1302,7 @@ Mostrar tudo libs/ui/src/lib/holdings-table/holdings-table.component.html - 212 + 217 @@ -1314,7 +1322,7 @@ AATD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 209 + 212 libs/ui/src/lib/assistant/assistant.component.ts @@ -1326,7 +1334,7 @@ 1A apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 213 + 216 libs/ui/src/lib/assistant/assistant.component.ts @@ -1338,7 +1346,7 @@ 5A apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 217 + 220 libs/ui/src/lib/assistant/assistant.component.ts @@ -1358,7 +1366,7 @@ Máx apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 221 + 224 libs/ui/src/lib/assistant/assistant.component.ts @@ -1370,7 +1378,7 @@ Esta funcionalidade está atualmente indisponível. apps/client/src/app/core/http-response.interceptor.ts - 55 + 52 @@ -1378,15 +1386,15 @@ Por favor tente novamente mais tarde. apps/client/src/app/core/http-response.interceptor.ts - 57 + 54 apps/client/src/app/core/http-response.interceptor.ts - 88 + 85 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 191 + 192 @@ -1394,11 +1402,11 @@ Oops! Ocorreu um erro. apps/client/src/app/core/http-response.interceptor.ts - 86 + 83 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 189 + 190 @@ -1410,11 +1418,11 @@ apps/client/src/app/core/http-response.interceptor.ts - 89 + 86 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 192 + 193 @@ -1426,11 +1434,11 @@ apps/client/src/app/components/header/header.component.html - 124 + 125 apps/client/src/app/components/header/header.component.html - 370 + 375 apps/client/src/app/pages/about/overview/about-overview-page.routes.ts @@ -1462,7 +1470,7 @@ O meu Ghostfolio apps/client/src/app/components/header/header.component.html - 276 + 280 apps/client/src/app/pages/user-account/user-account-page.routes.ts @@ -1497,6 +1505,14 @@ 174 + + Consumer Defensive + Consumer Defensive + + libs/ui/src/lib/i18n.ts + 89 + + Coupon code has been redeemed Código de cupão foi resgatado @@ -1557,6 +1573,14 @@ 67 + + Utilities + Utilities + + libs/ui/src/lib/i18n.ts + 97 + + Presenter View Vista do Apresentador @@ -1598,7 +1622,7 @@ Localidade apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 510 + 515 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -1718,15 +1742,15 @@ apps/client/src/app/components/header/header.component.html - 58 + 59 apps/client/src/app/components/header/header.component.html - 267 + 271 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 378 + 383 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -1774,11 +1798,11 @@ Controlo Administrativo apps/client/src/app/components/header/header.component.html - 74 + 75 apps/client/src/app/components/header/header.component.html - 287 + 291 libs/common/src/lib/routes/routes.ts @@ -1942,7 +1966,7 @@ apps/client/src/app/components/header/header.component.html - 356 + 361 apps/client/src/app/pages/features/features-page.html @@ -1970,7 +1994,7 @@ apps/client/src/app/components/header/header.component.html - 247 + 251 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -1998,7 +2022,7 @@ Mercados apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 381 + 386 apps/client/src/app/components/footer/footer.component.html @@ -2006,7 +2030,7 @@ apps/client/src/app/components/header/header.component.html - 403 + 408 apps/client/src/app/components/home-market/home-market.html @@ -2074,7 +2098,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 342 + 347 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2106,7 +2130,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 201 + 204 @@ -2130,7 +2154,7 @@ libs/ui/src/lib/i18n.ts - 41 + 43 @@ -2153,6 +2177,14 @@ 119 + + Consumer Cyclical + Consumer Cyclical + + libs/ui/src/lib/i18n.ts + 88 + + Unit Price Preço por Unidade @@ -2170,7 +2202,7 @@ Nota apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 433 + 438 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -2186,7 +2218,7 @@ A importar dados... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 171 + 172 @@ -2194,7 +2226,7 @@ A importação foi concluída apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 181 + 182 @@ -2326,7 +2358,7 @@ libs/ui/src/lib/i18n.ts - 16 + 18 @@ -2390,7 +2422,7 @@ Mensalmente apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 92 @@ -2406,7 +2438,7 @@ Fundo apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 352 + 354 @@ -2414,7 +2446,7 @@ Evolução do Portefólio apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 405 + 409 @@ -2422,7 +2454,7 @@ Cronograma de Investimento apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 434 + 438 @@ -2478,15 +2510,15 @@ apps/client/src/app/components/header/header.component.html - 105 + 106 apps/client/src/app/components/header/header.component.html - 309 + 314 apps/client/src/app/components/header/header.component.html - 384 + 389 apps/client/src/app/pages/pricing/pricing-page.routes.ts @@ -2538,7 +2570,7 @@ Começar apps/client/src/app/components/header/header.component.html - 432 + 437 apps/client/src/app/pages/features/features-page.html @@ -2626,11 +2658,11 @@ apps/client/src/app/components/header/header.component.html - 88 + 89 apps/client/src/app/components/header/header.component.html - 297 + 301 apps/client/src/app/pages/resources/overview/resources-overview.component.html @@ -2678,7 +2710,7 @@ Importar Atividades apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 93 + 94 libs/ui/src/lib/activities-table/activities-table.component.html @@ -2742,7 +2774,7 @@ Diferença desde o Máximo Histórico libs/ui/src/lib/benchmark/benchmark.component.html - 117 + 128 @@ -2758,7 +2790,7 @@ a partir do ATH (All Time High) libs/ui/src/lib/benchmark/benchmark.component.html - 119 + 130 @@ -2794,7 +2826,7 @@ libs/ui/src/lib/i18n.ts - 39 + 41 @@ -2818,7 +2850,7 @@ libs/ui/src/lib/i18n.ts - 4 + 6 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html @@ -2838,7 +2870,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 327 + 332 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2850,11 +2882,11 @@ libs/ui/src/lib/i18n.ts - 6 + 8 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html - 64 + 65 @@ -2870,7 +2902,7 @@ libs/ui/src/lib/i18n.ts - 15 + 17 @@ -2878,11 +2910,15 @@ Outro libs/ui/src/lib/i18n.ts - 24 + 26 + + + libs/ui/src/lib/i18n.ts + 94 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 451 + 449 @@ -2906,11 +2942,11 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 314 + 319 libs/ui/src/lib/i18n.ts - 29 + 31 @@ -2918,11 +2954,11 @@ Marcador libs/ui/src/lib/i18n.ts - 30 + 32 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html - 53 + 54 @@ -2934,7 +2970,7 @@ libs/ui/src/lib/i18n.ts - 54 + 56 @@ -2942,7 +2978,7 @@ Matéria-prima libs/ui/src/lib/i18n.ts - 46 + 48 @@ -2954,7 +2990,7 @@ libs/ui/src/lib/i18n.ts - 47 + 49 @@ -2962,7 +2998,7 @@ Rendimento Fixo libs/ui/src/lib/i18n.ts - 48 + 50 @@ -2970,7 +3006,11 @@ Imobiliário libs/ui/src/lib/i18n.ts - 50 + 52 + + + libs/ui/src/lib/i18n.ts + 95 @@ -2986,7 +3026,7 @@ Obrigação libs/ui/src/lib/i18n.ts - 53 + 55 @@ -2994,7 +3034,7 @@ Criptomoedas libs/ui/src/lib/i18n.ts - 56 + 58 @@ -3002,7 +3042,7 @@ ETF libs/ui/src/lib/i18n.ts - 57 + 59 @@ -3010,7 +3050,7 @@ Fundo de Investimento libs/ui/src/lib/i18n.ts - 59 + 61 @@ -3018,7 +3058,7 @@ Metal Precioso libs/ui/src/lib/i18n.ts - 60 + 62 @@ -3026,7 +3066,7 @@ Private Equity libs/ui/src/lib/i18n.ts - 61 + 63 @@ -3034,7 +3074,7 @@ Ação libs/ui/src/lib/i18n.ts - 62 + 64 @@ -3042,7 +3082,7 @@ África libs/ui/src/lib/i18n.ts - 69 + 71 @@ -3050,7 +3090,15 @@ Ásia libs/ui/src/lib/i18n.ts - 70 + 72 + + + + Communication Services + Communication Services + + libs/ui/src/lib/i18n.ts + 87 @@ -3058,7 +3106,7 @@ Europa libs/ui/src/lib/i18n.ts - 71 + 73 @@ -3066,7 +3114,7 @@ América do Norte libs/ui/src/lib/i18n.ts - 72 + 74 @@ -3082,7 +3130,7 @@ Oceânia libs/ui/src/lib/i18n.ts - 73 + 75 @@ -3090,7 +3138,7 @@ América do Sul libs/ui/src/lib/i18n.ts - 74 + 76 @@ -3114,15 +3162,15 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 209 + 220 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 453 + 451 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 467 + 465 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -3150,7 +3198,7 @@ Mapeamento de Símbolo apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 387 + 392 @@ -3166,7 +3214,7 @@ Dados de Mercado apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 400 + 405 libs/common/src/lib/routes/routes.ts @@ -3190,7 +3238,7 @@ A validar dados... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 291 + 293 @@ -3242,11 +3290,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 78 libs/ui/src/lib/i18n.ts - 37 + 39 @@ -3254,7 +3302,7 @@ Cronograma de Dividendos apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 493 + 497 @@ -3270,7 +3318,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 343 + 348 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -3282,7 +3330,7 @@ libs/ui/src/lib/i18n.ts - 7 + 9 @@ -3310,7 +3358,7 @@ Anualmente apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 93 @@ -3318,7 +3366,7 @@ Importar Dividendos apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 132 + 133 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3346,7 +3394,7 @@ Núcleo libs/ui/src/lib/i18n.ts - 10 + 12 @@ -3354,7 +3402,7 @@ Conceder libs/ui/src/lib/i18n.ts - 18 + 20 @@ -3362,7 +3410,7 @@ Risco mais Elevado libs/ui/src/lib/i18n.ts - 19 + 21 @@ -3370,7 +3418,7 @@ Risco menos Elevado libs/ui/src/lib/i18n.ts - 21 + 23 @@ -3378,7 +3426,7 @@ No Activities apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 145 + 150 @@ -3386,7 +3434,7 @@ Provisão de Reforma libs/ui/src/lib/i18n.ts - 27 + 29 @@ -3402,7 +3450,7 @@ Satélite libs/ui/src/lib/i18n.ts - 28 + 30 @@ -3526,7 +3574,7 @@ Atualizar Plano apps/client/src/app/components/header/header.component.html - 193 + 197 apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html @@ -3654,11 +3702,11 @@ Could not save asset profile apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 628 + 634 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 631 + 637 @@ -3726,7 +3774,7 @@ Mude para o Ghostfolio Premium facilmente libs/ui/src/lib/i18n.ts - 13 + 15 @@ -3750,7 +3798,7 @@ Mude para o Ghostfolio Premium ou Ghostfolio Open Source facilmente libs/ui/src/lib/i18n.ts - 12 + 14 @@ -3758,7 +3806,7 @@ Loan libs/ui/src/lib/i18n.ts - 58 + 60 @@ -3802,7 +3850,7 @@ Renovar Plano apps/client/src/app/components/header/header.component.html - 191 + 195 apps/client/src/app/components/user-account-membership/user-account-membership.html @@ -3882,7 +3930,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 209 + 212 @@ -3898,11 +3946,11 @@ Url apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 420 + 425 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 551 + 556 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -3918,7 +3966,7 @@ Asset profile has been saved apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 618 + 624 @@ -3926,7 +3974,7 @@ Deseja mesmo eliminar esta plataforma? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 111 + 115 @@ -3998,7 +4046,7 @@ Essa atividade já existe. libs/ui/src/lib/i18n.ts - 20 + 22 @@ -4062,7 +4110,7 @@ Série Atual apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 455 + 459 @@ -4070,7 +4118,7 @@ Série mais Longa apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 464 + 468 @@ -4078,7 +4126,7 @@ Meses libs/ui/src/lib/i18n.ts - 23 + 25 @@ -4086,7 +4134,7 @@ Anos libs/ui/src/lib/i18n.ts - 32 + 34 @@ -4094,7 +4142,7 @@ Mês libs/ui/src/lib/i18n.ts - 22 + 24 @@ -4102,7 +4150,7 @@ Ano libs/ui/src/lib/i18n.ts - 31 + 33 @@ -4262,7 +4310,15 @@ Responsabilidade libs/ui/src/lib/i18n.ts - 40 + 42 + + + + Technology + Technology + + libs/ui/src/lib/i18n.ts + 96 @@ -4278,7 +4334,7 @@ Configuração do raspador apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 472 + 477 @@ -4506,7 +4562,7 @@ libs/ui/src/lib/i18n.ts - 36 + 38 @@ -4514,7 +4570,7 @@ De valor libs/ui/src/lib/i18n.ts - 42 + 44 @@ -4522,7 +4578,7 @@ ETFs sem países apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 135 + 140 @@ -4530,7 +4586,7 @@ ETFs sem setores apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 140 + 145 @@ -4546,7 +4602,7 @@ Predefinição libs/ui/src/lib/i18n.ts - 26 + 28 @@ -4562,15 +4618,7 @@ Ásia-Pacífico libs/ui/src/lib/i18n.ts - 5 - - - - Japan - Japão - - libs/ui/src/lib/i18n.ts - 92 + 7 @@ -4766,7 +4814,7 @@ Moedas apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 130 + 135 apps/client/src/app/pages/public/public-page.html @@ -4818,11 +4866,11 @@ Could not parse scraper configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 545 + 551 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 548 + 554 @@ -4913,6 +4961,14 @@ 149 + + Basic Materials + Basic Materials + + libs/ui/src/lib/i18n.ts + 86 + + Use Ghostfolio anonymously and own your financial data. Use o Ghostfolio anonimamente e possua seus dados financeiros. @@ -5378,10 +5434,6 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts 58 - - libs/ui/src/lib/i18n.ts - 99 - Global @@ -5392,7 +5444,7 @@ libs/ui/src/lib/i18n.ts - 17 + 19 @@ -5492,7 +5544,7 @@ libs/ui/src/lib/i18n.ts - 38 + 40 @@ -5516,7 +5568,7 @@ Você realmente deseja excluir esta tag? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 108 + 117 @@ -5624,7 +5676,7 @@ Você realmente deseja excluir este perfil de ativo? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 37 + 28 @@ -5635,6 +5687,14 @@ 16 + + Industrials + Industrials + + libs/ui/src/lib/i18n.ts + 93 + + Add Manually Adicionar manualmente @@ -5664,7 +5724,7 @@ Última alta de todos os tempos libs/ui/src/lib/benchmark/benchmark.component.html - 90 + 101 @@ -5708,7 +5768,7 @@ Ops, a transferência do saldo em dinheiro falhou. apps/client/src/app/pages/accounts/accounts-page.component.ts - 341 + 337 @@ -5716,7 +5776,7 @@ Medo Extremo libs/ui/src/lib/i18n.ts - 106 + 79 @@ -5724,7 +5784,7 @@ Ganância Extrema libs/ui/src/lib/i18n.ts - 107 + 80 @@ -5732,7 +5792,7 @@ Neutro libs/ui/src/lib/i18n.ts - 110 + 83 @@ -5743,6 +5803,14 @@ 284 + + Healthcare + Healthcare + + libs/ui/src/lib/i18n.ts + 92 + + Do you really want to delete this system message? Você realmente deseja excluir esta mensagem do sistema? @@ -5756,7 +5824,7 @@ Tendência de 50 dias libs/ui/src/lib/benchmark/benchmark.component.html - 32 + 43 @@ -5764,7 +5832,7 @@ Tendência de 200 dias libs/ui/src/lib/benchmark/benchmark.component.html - 61 + 72 @@ -5772,7 +5840,7 @@ Saldos de caixa apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 142 + 145 @@ -5808,7 +5876,7 @@ O preço de mercado atual é apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 743 + 749 @@ -5816,7 +5884,7 @@ Teste apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 569 + 574 @@ -5856,15 +5924,7 @@ Ops! Não foi possível conceder acesso. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 144 - - - - Argentina - Argentina - - libs/ui/src/lib/i18n.ts - 78 + 151 @@ -5888,7 +5948,7 @@ Dados de mercado estão atrasados para apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts - 94 + 92 @@ -5904,11 +5964,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 80 + 82 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 96 + 98 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5928,7 +5988,7 @@ Close Holding apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 442 + 447 @@ -5976,7 +6036,7 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 201 + 204 libs/ui/src/lib/assistant/assistant.component.ts @@ -5996,7 +6056,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 205 + 208 libs/ui/src/lib/assistant/assistant.component.ts @@ -6044,7 +6104,7 @@ ano apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 213 + 216 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6064,7 +6124,7 @@ anos apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 217 + 220 libs/ui/src/lib/assistant/assistant.component.ts @@ -6084,7 +6144,7 @@ Coleta de dados apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 592 + 597 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6149,7 +6209,7 @@ Ops! Parece que você está fazendo muitas solicitações. Por favor, diminua um pouco a velocidade. apps/client/src/app/core/http-response.interceptor.ts - 106 + 103 @@ -6176,14 +6236,6 @@ 62 - - Indonesia - Indonésia - - libs/ui/src/lib/i18n.ts - 90 - - Activity Atividade @@ -6221,7 +6273,7 @@ Esta ação não é permitida. apps/client/src/app/core/http-response.interceptor.ts - 67 + 64 @@ -6229,7 +6281,7 @@ Liquidez libs/ui/src/lib/i18n.ts - 49 + 51 @@ -6245,7 +6297,7 @@ Compre e venda libs/ui/src/lib/i18n.ts - 8 + 10 @@ -6325,7 +6377,7 @@ Include in apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 377 + 382 @@ -6349,7 +6401,7 @@ Referências apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 125 + 130 @@ -6365,7 +6417,7 @@ Você realmente deseja excluir esses perfis? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 68 + 59 @@ -6373,7 +6425,7 @@ Ops! Não foi possível excluir perfis. apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 56 + 47 @@ -6572,38 +6624,6 @@ 100 - - Australia - Austrália - - libs/ui/src/lib/i18n.ts - 79 - - - - Austria - Áustria - - libs/ui/src/lib/i18n.ts - 80 - - - - Belgium - Bélgica - - libs/ui/src/lib/i18n.ts - 81 - - - - Bulgaria - Bulgária - - libs/ui/src/lib/i18n.ts - 83 - - View Holding View Holding @@ -6612,124 +6632,12 @@ 474 - - Canada - Canadá - - libs/ui/src/lib/i18n.ts - 84 - - - - Czech Republic - República Tcheca - - libs/ui/src/lib/i18n.ts - 85 - - - - Finland - Finlândia - - libs/ui/src/lib/i18n.ts - 86 - - - - France - França - - libs/ui/src/lib/i18n.ts - 87 - - - - Germany - Alemanha - - libs/ui/src/lib/i18n.ts - 88 - - - - India - Índia - - libs/ui/src/lib/i18n.ts - 89 - - - - Italy - Itália - - libs/ui/src/lib/i18n.ts - 91 - - - - Netherlands - Holanda - - libs/ui/src/lib/i18n.ts - 93 - - - - New Zealand - Nova Zelândia - - libs/ui/src/lib/i18n.ts - 94 - - - - Poland - Polônia - - libs/ui/src/lib/i18n.ts - 95 - - - - Romania - Romênia - - libs/ui/src/lib/i18n.ts - 96 - - - - South Africa - África do Sul - - libs/ui/src/lib/i18n.ts - 98 - - - - Thailand - Tailândia - - libs/ui/src/lib/i18n.ts - 100 - - - - United States - Estados Unidos - - libs/ui/src/lib/i18n.ts - 103 - - Error Erro apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 734 + 740 @@ -6753,7 +6661,7 @@ 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 - 181 + 194 @@ -6781,7 +6689,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 597 + 602 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6825,7 +6733,7 @@ libs/ui/src/lib/i18n.ts - 9 + 11 @@ -6833,7 +6741,7 @@ Fechar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 599 + 604 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6873,7 +6781,7 @@ libs/ui/src/lib/i18n.ts - 11 + 13 @@ -6889,7 +6797,7 @@ Sim libs/ui/src/lib/i18n.ts - 33 + 35 @@ -7040,6 +6948,14 @@ 174 + + Financial Services + Financial Services + + libs/ui/src/lib/i18n.ts + 91 + + 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 @@ -7157,15 +7073,7 @@ Tenha acesso a mais de 80’000 tickers de mais de 50 bolsas libs/ui/src/lib/i18n.ts - 25 - - - - Ukraine - Ucrânia - - libs/ui/src/lib/i18n.ts - 101 + 27 @@ -7371,7 +7279,7 @@ Guardar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 608 + 613 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7419,11 +7327,11 @@ Me apps/client/src/app/components/header/header.component.html - 213 + 217 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 250 + 254 @@ -7463,7 +7371,7 @@ AI prompt has been copied to the clipboard apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 211 @@ -7479,7 +7387,7 @@ Lazy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 235 + 239 @@ -7487,7 +7395,7 @@ Instant apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 239 + 243 @@ -7495,7 +7403,7 @@ Preço de mercado padrão apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 482 + 487 @@ -7503,7 +7411,7 @@ Mode apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 519 + 524 @@ -7511,7 +7419,7 @@ Selector apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 535 + 540 @@ -7519,7 +7427,7 @@ HTTP Request Headers apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 495 + 500 @@ -7527,7 +7435,7 @@ end of day apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 235 + 239 @@ -7535,7 +7443,7 @@ real-time apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 239 + 243 @@ -7543,7 +7451,7 @@ Open Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 212 @@ -7559,7 +7467,7 @@ Mudar libs/ui/src/lib/holdings-table/holdings-table.component.html - 138 + 143 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7575,11 +7483,11 @@ apps/client/src/app/components/home-overview/home-overview.component.ts - 52 + 53 libs/ui/src/lib/holdings-table/holdings-table.component.html - 161 + 166 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7622,30 +7530,6 @@ 94 - - Armenia - Armenia - - libs/ui/src/lib/i18n.ts - 77 - - - - British Virgin Islands - British Virgin Islands - - libs/ui/src/lib/i18n.ts - 82 - - - - Singapore - Singapore - - libs/ui/src/lib/i18n.ts - 97 - - Terms and Conditions Termos e Condições @@ -7691,11 +7575,11 @@ Security token apps/client/src/app/components/admin-users/admin-users.component.ts - 235 + 256 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 167 + 179 @@ -7703,7 +7587,7 @@ Do you really want to generate a new security token for this user? apps/client/src/app/components/admin-users/admin-users.component.ts - 240 + 261 @@ -7714,14 +7598,6 @@ 239 - - United Kingdom - United Kingdom - - libs/ui/src/lib/i18n.ts - 102 - - Terms of Service Termos de Serviço @@ -7768,7 +7644,7 @@ () is already in use. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 675 + 681 @@ -7776,7 +7652,7 @@ An error occurred while updating to (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 683 + 689 @@ -7840,7 +7716,7 @@ someone apps/client/src/app/pages/public/public-page.component.ts - 62 + 63 @@ -7872,7 +7748,7 @@ Do you really want to delete this item? libs/ui/src/lib/benchmark/benchmark.component.ts - 137 + 141 @@ -7880,7 +7756,7 @@ Log out apps/client/src/app/components/header/header.component.html - 325 + 330 @@ -8127,7 +8003,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 205 + 208 @@ -8292,7 +8168,7 @@ Do you really want to generate a new security token? apps/client/src/app/components/user-account-access/user-account-access.component.ts - 172 + 184 @@ -8348,7 +8224,7 @@ Gerenciar perfil de ativos apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 467 + 472 @@ -8356,7 +8232,7 @@ Investimento Alternativo libs/ui/src/lib/i18n.ts - 45 + 47 @@ -8364,7 +8240,7 @@ Colecionável libs/ui/src/lib/i18n.ts - 55 + 57 @@ -8372,7 +8248,7 @@ Preço médio unitário apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 113 + 117 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html diff --git a/apps/client/src/locales/messages.tr.xlf b/apps/client/src/locales/messages.tr.xlf index faae6b7e3..5935a0e0e 100644 --- a/apps/client/src/locales/messages.tr.xlf +++ b/apps/client/src/locales/messages.tr.xlf @@ -315,7 +315,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 310 + 315 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -355,11 +355,11 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 12 + 23 libs/ui/src/lib/holdings-table/holdings-table.component.html - 23 + 28 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -387,7 +387,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 317 + 322 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -451,7 +451,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 93 + 98 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -531,7 +531,7 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 176 + 187 @@ -563,7 +563,7 @@ libs/ui/src/lib/i18n.ts - 14 + 16 @@ -639,7 +639,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 449 + 454 @@ -723,7 +723,7 @@ Para Birimleri apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 130 + 135 apps/client/src/app/pages/public/public-page.html @@ -735,7 +735,7 @@ Ülkesi Olmayan ETF’ler apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 135 + 140 @@ -743,7 +743,7 @@ Sektörü Olmayan ETF’ler apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 140 + 145 @@ -751,7 +751,7 @@ Filtrele... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 368 + 374 @@ -771,7 +771,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 45 + 50 @@ -847,7 +847,7 @@ Ülke apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 273 + 278 apps/client/src/app/components/admin-users/admin-users.html @@ -855,7 +855,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 276 + 281 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -867,15 +867,15 @@ Sektörler apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 279 + 284 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 398 + 403 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 282 + 287 apps/client/src/app/pages/public/public-page.html @@ -887,15 +887,15 @@ Ülkeler apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 289 + 294 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 409 + 414 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 294 + 299 @@ -903,7 +903,15 @@ Sembol Eşleştirme apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 387 + 392 + + + + Technology + Technology + + libs/ui/src/lib/i18n.ts + 96 @@ -919,7 +927,7 @@ Veri Toplayıcı Yapılandırması apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 472 + 477 @@ -927,7 +935,7 @@ Not apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 433 + 438 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -966,6 +974,14 @@ 119 + + Consumer Cyclical + Consumer Cyclical + + libs/ui/src/lib/i18n.ts + 88 + + Do you really want to delete this coupon? Bu kuponu gerçekten silmek istiyor musunuz? @@ -1103,11 +1119,11 @@ Url apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 420 + 425 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 551 + 556 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -1123,7 +1139,7 @@ Asset profile has been saved apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 618 + 624 @@ -1131,7 +1147,7 @@ Bu platformu silmeyi gerçekten istiyor musunuz? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 111 + 115 @@ -1163,7 +1179,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 209 + 212 @@ -1187,7 +1203,7 @@ Bu kullanıcıyı silmeyi gerçekten istiyor musunuz? apps/client/src/app/components/admin-users/admin-users.component.ts - 215 + 236 @@ -1203,7 +1219,7 @@ apps/client/src/app/components/header/header.component.html - 231 + 235 @@ -1255,11 +1271,11 @@ Could not validate form apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 594 + 600 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 597 + 603 @@ -1283,15 +1299,15 @@ Portföy apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 140 + 143 apps/client/src/app/components/header/header.component.html - 44 + 45 apps/client/src/app/components/header/header.component.html - 257 + 261 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -1307,11 +1323,11 @@ Karşılaştırma Ölçütü apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 379 + 384 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 152 + 155 @@ -1327,7 +1343,7 @@ Ghostfolio Hakkında apps/client/src/app/components/header/header.component.html - 322 + 327 apps/client/src/app/pages/about/overview/about-overview-page.html @@ -1339,11 +1355,11 @@ Giriş apps/client/src/app/components/header/header.component.html - 421 + 426 apps/client/src/app/components/header/header.component.ts - 296 + 305 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -1363,11 +1379,11 @@ Hay Allah! Güvenlik anahtarı yanlış. apps/client/src/app/components/header/header.component.ts - 311 + 320 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 152 + 164 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts @@ -1387,7 +1403,7 @@ Korku apps/client/src/app/components/home-market/home-market.component.ts - 41 + 46 apps/client/src/app/components/markets/markets.component.ts @@ -1395,7 +1411,7 @@ libs/ui/src/lib/i18n.ts - 108 + 81 @@ -1403,7 +1419,7 @@ Açgözlülük apps/client/src/app/components/home-market/home-market.component.ts - 42 + 47 apps/client/src/app/components/markets/markets.component.ts @@ -1411,7 +1427,7 @@ libs/ui/src/lib/i18n.ts - 109 + 82 @@ -1511,7 +1527,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 201 + 204 @@ -1630,6 +1646,14 @@ 46 + + Energy + Energy + + libs/ui/src/lib/i18n.ts + 90 + + Stay signed in Oturumu açık tut @@ -1779,7 +1803,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 69 + 74 @@ -1799,7 +1823,7 @@ Rapor Veri Sorunu apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 452 + 457 @@ -1947,7 +1971,7 @@ Üyeliğinizi Yükseltin apps/client/src/app/components/header/header.component.html - 193 + 197 apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html @@ -1987,7 +2011,7 @@ YTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 209 + 212 libs/ui/src/lib/assistant/assistant.component.ts @@ -1999,7 +2023,7 @@ 1Y apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 213 + 216 libs/ui/src/lib/assistant/assistant.component.ts @@ -2011,7 +2035,7 @@ 5Y apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 217 + 220 libs/ui/src/lib/assistant/assistant.component.ts @@ -2031,7 +2055,7 @@ Maks. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 221 + 224 libs/ui/src/lib/assistant/assistant.component.ts @@ -2043,7 +2067,7 @@ Bu özellik şu an için mevcut değil. apps/client/src/app/core/http-response.interceptor.ts - 55 + 52 @@ -2051,15 +2075,15 @@ Daha sonra tekrar deneyiniz. apps/client/src/app/core/http-response.interceptor.ts - 57 + 54 apps/client/src/app/core/http-response.interceptor.ts - 88 + 85 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 191 + 192 @@ -2067,11 +2091,11 @@ Hay Allah! Bir şeyler yanlış gitti. apps/client/src/app/core/http-response.interceptor.ts - 86 + 83 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 189 + 190 @@ -2083,11 +2107,11 @@ apps/client/src/app/core/http-response.interceptor.ts - 89 + 86 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 192 + 193 @@ -2099,11 +2123,11 @@ apps/client/src/app/components/header/header.component.html - 124 + 125 apps/client/src/app/components/header/header.component.html - 370 + 375 apps/client/src/app/pages/about/overview/about-overview-page.routes.ts @@ -2207,15 +2231,15 @@ apps/client/src/app/components/header/header.component.html - 58 + 59 apps/client/src/app/components/header/header.component.html - 267 + 271 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 378 + 383 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2263,11 +2287,11 @@ Yönetici Denetimleri apps/client/src/app/components/header/header.component.html - 74 + 75 apps/client/src/app/components/header/header.component.html - 287 + 291 libs/common/src/lib/routes/routes.ts @@ -2279,7 +2303,7 @@ Piyasa Verileri apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 400 + 405 libs/common/src/lib/routes/routes.ts @@ -2331,7 +2355,7 @@ apps/client/src/app/components/header/header.component.html - 247 + 251 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2471,11 +2495,11 @@ Could not parse scraper configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 545 + 551 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 548 + 554 @@ -2531,7 +2555,7 @@ apps/client/src/app/components/header/header.component.html - 356 + 361 apps/client/src/app/pages/features/features-page.html @@ -2663,7 +2687,7 @@ Başla apps/client/src/app/components/header/header.component.html - 432 + 437 apps/client/src/app/pages/features/features-page.html @@ -2735,7 +2759,7 @@ Piyasalar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 381 + 386 apps/client/src/app/components/footer/footer.component.html @@ -2743,7 +2767,7 @@ apps/client/src/app/components/header/header.component.html - 403 + 408 apps/client/src/app/components/home-market/home-market.html @@ -2882,6 +2906,14 @@ 149 + + Basic Materials + Basic Materials + + libs/ui/src/lib/i18n.ts + 86 + + Use Ghostfolio anonymously and own your financial data. Ghostfolio’yu anonim olarak kullanın ve finansal verilerinize sahip çıkın. @@ -3175,7 +3207,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 342 + 347 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -3263,7 +3295,7 @@ İşlemleri İçe Aktar apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 93 + 94 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3279,7 +3311,7 @@ Temettüleri İçe Aktar apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 132 + 133 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3295,7 +3327,7 @@ Veri içe aktarılıyor... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 171 + 172 @@ -3303,7 +3335,7 @@ İçe aktarma tamamlandı apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 181 + 182 @@ -3319,7 +3351,7 @@ Veri doğrulanıyor... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 291 + 293 @@ -3511,7 +3543,7 @@ libs/ui/src/lib/i18n.ts - 16 + 18 @@ -3627,11 +3659,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 78 libs/ui/src/lib/i18n.ts - 37 + 39 @@ -3655,7 +3687,7 @@ Aylık apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 92 @@ -3663,7 +3695,7 @@ Yıllık apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 93 @@ -3679,7 +3711,7 @@ Alt apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 352 + 354 @@ -3687,7 +3719,7 @@ Portföyün Gelişimi apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 405 + 409 @@ -3695,7 +3727,7 @@ Yatırım Zaman Çizelgesi apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 434 + 438 @@ -3703,7 +3735,7 @@ Güncel Seri apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 455 + 459 @@ -3711,7 +3743,7 @@ En Uzun Seri apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 464 + 468 @@ -3719,7 +3751,7 @@ Temettü Zaman Çizelgesi apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 493 + 497 @@ -3747,15 +3779,15 @@ apps/client/src/app/components/header/header.component.html - 105 + 106 apps/client/src/app/components/header/header.component.html - 309 + 314 apps/client/src/app/components/header/header.component.html - 384 + 389 apps/client/src/app/pages/pricing/pricing-page.routes.ts @@ -3919,7 +3951,7 @@ Aboneliği Yenile apps/client/src/app/components/header/header.component.html - 191 + 195 apps/client/src/app/components/user-account-membership/user-account-membership.html @@ -3943,11 +3975,11 @@ Could not save asset profile apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 628 + 634 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 631 + 637 @@ -4306,10 +4338,6 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts 58 - - libs/ui/src/lib/i18n.ts - 99 - Global @@ -4320,7 +4348,7 @@ libs/ui/src/lib/i18n.ts - 17 + 19 @@ -4332,11 +4360,11 @@ apps/client/src/app/components/header/header.component.html - 88 + 89 apps/client/src/app/components/header/header.component.html - 297 + 301 apps/client/src/app/pages/resources/overview/resources-overview.component.html @@ -4368,7 +4396,7 @@ Benim Ghostfolio’m apps/client/src/app/components/header/header.component.html - 276 + 280 apps/client/src/app/pages/user-account/user-account-page.routes.ts @@ -4403,6 +4431,14 @@ 174 + + Consumer Defensive + Consumer Defensive + + libs/ui/src/lib/i18n.ts + 89 + + Coupon code has been redeemed Kupon kodu kullanıldı @@ -4475,6 +4511,14 @@ 67 + + Utilities + Utilities + + libs/ui/src/lib/i18n.ts + 97 + + Presenter View Sunum Görünümü @@ -4512,7 +4556,7 @@ Yerel Ayarlar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 510 + 515 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -4716,7 +4760,7 @@ Tüm Zamanların En Yüksek Seviyesinden (ATH) Değişim libs/ui/src/lib/benchmark/benchmark.component.html - 117 + 128 @@ -4732,7 +4776,7 @@ Tüm Zamanların En Yüksek Seviyesinden libs/ui/src/lib/benchmark/benchmark.component.html - 119 + 130 @@ -4740,7 +4784,7 @@ Loan libs/ui/src/lib/i18n.ts - 58 + 60 @@ -4800,7 +4844,7 @@ libs/ui/src/lib/i18n.ts - 39 + 41 @@ -4820,7 +4864,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 117 + 122 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -4836,7 +4880,7 @@ Tümünü göster libs/ui/src/lib/holdings-table/holdings-table.component.html - 212 + 217 @@ -4852,7 +4896,7 @@ libs/ui/src/lib/i18n.ts - 4 + 6 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html @@ -4864,7 +4908,7 @@ Asya Pasifik libs/ui/src/lib/i18n.ts - 5 + 7 @@ -4880,7 +4924,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 327 + 332 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -4892,11 +4936,11 @@ libs/ui/src/lib/i18n.ts - 6 + 8 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html - 64 + 65 @@ -4912,7 +4956,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 343 + 348 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -4924,7 +4968,7 @@ libs/ui/src/lib/i18n.ts - 7 + 9 @@ -4932,7 +4976,7 @@ Temel libs/ui/src/lib/i18n.ts - 10 + 12 @@ -4940,7 +4984,7 @@ Ghostfolio Premium veya Ghostfolio Open Source’a kolayca geçin libs/ui/src/lib/i18n.ts - 12 + 14 @@ -4948,7 +4992,7 @@ Ghostfolio Premium’a kolayca geçin libs/ui/src/lib/i18n.ts - 13 + 15 @@ -4964,7 +5008,7 @@ libs/ui/src/lib/i18n.ts - 15 + 17 @@ -4972,7 +5016,7 @@ Hibe libs/ui/src/lib/i18n.ts - 18 + 20 @@ -4980,7 +5024,7 @@ Daha Yüksek Risk libs/ui/src/lib/i18n.ts - 19 + 21 @@ -4988,15 +5032,7 @@ Bu işlem zaten mevcut. libs/ui/src/lib/i18n.ts - 20 - - - - Japan - Japonya - - libs/ui/src/lib/i18n.ts - 92 + 22 @@ -5004,7 +5040,7 @@ Daha Düşük Risk libs/ui/src/lib/i18n.ts - 21 + 23 @@ -5012,7 +5048,7 @@ Ay libs/ui/src/lib/i18n.ts - 22 + 24 @@ -5020,7 +5056,7 @@ Ay libs/ui/src/lib/i18n.ts - 23 + 25 @@ -5028,11 +5064,15 @@ Diğer libs/ui/src/lib/i18n.ts - 24 + 26 + + + libs/ui/src/lib/i18n.ts + 94 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 451 + 449 @@ -5040,7 +5080,7 @@ Önceden Ayarlanmış libs/ui/src/lib/i18n.ts - 26 + 28 @@ -5048,7 +5088,7 @@ No Activities apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 145 + 150 @@ -5056,7 +5096,7 @@ Yaşlılık Provizyonu libs/ui/src/lib/i18n.ts - 27 + 29 @@ -5072,7 +5112,7 @@ Uydu libs/ui/src/lib/i18n.ts - 28 + 30 @@ -5096,11 +5136,11 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 314 + 319 libs/ui/src/lib/i18n.ts - 29 + 31 @@ -5108,11 +5148,11 @@ Etiket libs/ui/src/lib/i18n.ts - 30 + 32 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html - 53 + 54 @@ -5120,7 +5160,7 @@ Yıl libs/ui/src/lib/i18n.ts - 31 + 33 @@ -5140,7 +5180,7 @@ Yıl libs/ui/src/lib/i18n.ts - 32 + 34 @@ -5160,7 +5200,7 @@ libs/ui/src/lib/i18n.ts - 36 + 38 @@ -5168,7 +5208,7 @@ Kıymet libs/ui/src/lib/i18n.ts - 42 + 44 @@ -5176,7 +5216,7 @@ Yükümlülük libs/ui/src/lib/i18n.ts - 40 + 42 @@ -5188,7 +5228,7 @@ libs/ui/src/lib/i18n.ts - 41 + 43 @@ -5200,7 +5240,7 @@ libs/ui/src/lib/i18n.ts - 54 + 56 @@ -5208,7 +5248,7 @@ Emtia libs/ui/src/lib/i18n.ts - 46 + 48 @@ -5220,7 +5260,7 @@ libs/ui/src/lib/i18n.ts - 47 + 49 @@ -5228,7 +5268,7 @@ Sabit Gelir libs/ui/src/lib/i18n.ts - 48 + 50 @@ -5236,7 +5276,11 @@ Gayrimenkul libs/ui/src/lib/i18n.ts - 50 + 52 + + + libs/ui/src/lib/i18n.ts + 95 @@ -5252,7 +5296,7 @@ Bono libs/ui/src/lib/i18n.ts - 53 + 55 @@ -5260,7 +5304,7 @@ Kriptopara libs/ui/src/lib/i18n.ts - 56 + 58 @@ -5268,7 +5312,7 @@ Borsada İşlem Gören Fonlar (ETF) libs/ui/src/lib/i18n.ts - 57 + 59 @@ -5276,7 +5320,7 @@ Borsada İşlem Görmeyen Fonlar (Mutual Fund) libs/ui/src/lib/i18n.ts - 59 + 61 @@ -5284,7 +5328,7 @@ Kıymetli Metaller libs/ui/src/lib/i18n.ts - 60 + 62 @@ -5292,7 +5336,7 @@ Özel Menkul Kıymetler libs/ui/src/lib/i18n.ts - 61 + 63 @@ -5300,7 +5344,7 @@ Hisse Senetleri libs/ui/src/lib/i18n.ts - 62 + 64 @@ -5308,7 +5352,7 @@ Afrika libs/ui/src/lib/i18n.ts - 69 + 71 @@ -5316,7 +5360,15 @@ Asya libs/ui/src/lib/i18n.ts - 70 + 72 + + + + Communication Services + Communication Services + + libs/ui/src/lib/i18n.ts + 87 @@ -5324,7 +5376,7 @@ Avrupa libs/ui/src/lib/i18n.ts - 71 + 73 @@ -5332,7 +5384,7 @@ Kuzey Amerika libs/ui/src/lib/i18n.ts - 72 + 74 @@ -5348,7 +5400,7 @@ Okyanusya libs/ui/src/lib/i18n.ts - 73 + 75 @@ -5356,7 +5408,7 @@ Güney Amerika libs/ui/src/lib/i18n.ts - 74 + 76 @@ -5380,15 +5432,15 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 209 + 220 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 453 + 451 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 467 + 465 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5500,7 +5552,7 @@ libs/ui/src/lib/i18n.ts - 38 + 40 @@ -5516,7 +5568,7 @@ Bu etiketi silmeyi gerçekten istiyor musunuz? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 108 + 117 @@ -5624,7 +5676,7 @@ Bu varlık profilini silmeyi gerçekten istiyor musunuz? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 37 + 28 @@ -5635,6 +5687,14 @@ 16 + + Industrials + Industrials + + libs/ui/src/lib/i18n.ts + 93 + + Add Manually Elle Giriş @@ -5664,7 +5724,7 @@ Son, ATH libs/ui/src/lib/benchmark/benchmark.component.html - 90 + 101 @@ -5708,7 +5768,7 @@ Hay Allah, Nakit bakiyesi tranferi başarısız oldu. apps/client/src/app/pages/accounts/accounts-page.component.ts - 341 + 337 @@ -5716,7 +5776,7 @@ Aşırı Korku libs/ui/src/lib/i18n.ts - 106 + 79 @@ -5724,7 +5784,7 @@ Aşırı Açgözlülük libs/ui/src/lib/i18n.ts - 107 + 80 @@ -5732,7 +5792,7 @@ Nötr libs/ui/src/lib/i18n.ts - 110 + 83 @@ -5743,6 +5803,14 @@ 284 + + Healthcare + Healthcare + + libs/ui/src/lib/i18n.ts + 92 + + Do you really want to delete this system message? Bu sistem mesajını silmeyi gerçekten istiyor musunuz? @@ -5756,7 +5824,7 @@ 50 Günlük Trend libs/ui/src/lib/benchmark/benchmark.component.html - 32 + 43 @@ -5764,7 +5832,7 @@ 200 Günlük Trend libs/ui/src/lib/benchmark/benchmark.component.html - 61 + 72 @@ -5772,7 +5840,7 @@ Nakit Bakiyeleri apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 142 + 145 @@ -5808,7 +5876,7 @@ Şu anki piyasa fiyatı apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 743 + 749 @@ -5816,7 +5884,7 @@ Test apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 569 + 574 @@ -5856,15 +5924,7 @@ Hay Allah! Erişim izni verilemedi. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 144 - - - - Argentina - Argentina - - libs/ui/src/lib/i18n.ts - 78 + 151 @@ -5888,7 +5948,7 @@ Piyasa verileri gecikmeli apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts - 94 + 92 @@ -5904,11 +5964,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 80 + 82 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 96 + 98 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5928,7 +5988,7 @@ Close Holding apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 442 + 447 @@ -5976,7 +6036,7 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 201 + 204 libs/ui/src/lib/assistant/assistant.component.ts @@ -5996,7 +6056,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 205 + 208 libs/ui/src/lib/assistant/assistant.component.ts @@ -6044,7 +6104,7 @@ Yıl apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 213 + 216 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6064,7 +6124,7 @@ Yıllar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 217 + 220 libs/ui/src/lib/assistant/assistant.component.ts @@ -6084,7 +6144,7 @@ Veri Toplama apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 592 + 597 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6149,7 +6209,7 @@ Oops! Görünüşe göre çok fazla istekte bulunuyorsunuz. Lütfen biraz yavaşlayın. apps/client/src/app/core/http-response.interceptor.ts - 106 + 103 @@ -6176,14 +6236,6 @@ 62 - - Indonesia - Indonesia - - libs/ui/src/lib/i18n.ts - 90 - - Activity Etkinlik @@ -6221,7 +6273,7 @@ Bu işlem izin verilmiyor. apps/client/src/app/core/http-response.interceptor.ts - 67 + 64 @@ -6229,7 +6281,7 @@ Likidite libs/ui/src/lib/i18n.ts - 49 + 51 @@ -6245,7 +6297,7 @@ Satın ve satın libs/ui/src/lib/i18n.ts - 8 + 10 @@ -6325,7 +6377,7 @@ Include in apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 377 + 382 @@ -6349,7 +6401,7 @@ Kıyaslamalar apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 125 + 130 @@ -6365,7 +6417,7 @@ Bu profilleri silmek istediğinize emin misiniz? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 68 + 59 @@ -6373,7 +6425,7 @@ Oops! Profilleri silmek mümkün olmadı. apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 56 + 47 @@ -6572,38 +6624,6 @@ 100 - - Australia - Avustralya - - libs/ui/src/lib/i18n.ts - 79 - - - - Austria - Avusturya - - libs/ui/src/lib/i18n.ts - 80 - - - - Belgium - Belçika - - libs/ui/src/lib/i18n.ts - 81 - - - - Bulgaria - Bulgaristan - - libs/ui/src/lib/i18n.ts - 83 - - View Holding View Holding @@ -6612,124 +6632,12 @@ 474 - - Canada - Kanada - - libs/ui/src/lib/i18n.ts - 84 - - - - Czech Republic - Çek Cumhuriyeti - - libs/ui/src/lib/i18n.ts - 85 - - - - Finland - Finlandiya - - libs/ui/src/lib/i18n.ts - 86 - - - - France - Fransa - - libs/ui/src/lib/i18n.ts - 87 - - - - Germany - Almanya - - libs/ui/src/lib/i18n.ts - 88 - - - - India - Hindistan - - libs/ui/src/lib/i18n.ts - 89 - - - - Italy - İtalya - - libs/ui/src/lib/i18n.ts - 91 - - - - Netherlands - Hollanda - - libs/ui/src/lib/i18n.ts - 93 - - - - New Zealand - Yeni Zelanda - - libs/ui/src/lib/i18n.ts - 94 - - - - Poland - Polonya - - libs/ui/src/lib/i18n.ts - 95 - - - - Romania - Romanya - - libs/ui/src/lib/i18n.ts - 96 - - - - South Africa - Güney Afrika - - libs/ui/src/lib/i18n.ts - 98 - - - - Thailand - Tayland - - libs/ui/src/lib/i18n.ts - 100 - - - - United States - Amerika Birleşik Devletleri - - libs/ui/src/lib/i18n.ts - 103 - - Error Hata apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 734 + 740 @@ -6753,7 +6661,7 @@ 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 - 181 + 194 @@ -6781,7 +6689,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 597 + 602 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6825,7 +6733,7 @@ libs/ui/src/lib/i18n.ts - 9 + 11 @@ -6833,7 +6741,7 @@ Kapat apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 599 + 604 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6873,7 +6781,7 @@ libs/ui/src/lib/i18n.ts - 11 + 13 @@ -6889,7 +6797,7 @@ Evet libs/ui/src/lib/i18n.ts - 33 + 35 @@ -7040,6 +6948,14 @@ 174 + + Financial Services + Financial Services + + libs/ui/src/lib/i18n.ts + 91 + + 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 @@ -7157,15 +7073,7 @@ 80’000+ sembolden 50’den fazla borsada erişim alın libs/ui/src/lib/i18n.ts - 25 - - - - Ukraine - Ukraine - - libs/ui/src/lib/i18n.ts - 101 + 27 @@ -7371,7 +7279,7 @@ Kaydet apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 608 + 613 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7419,11 +7327,11 @@ Ben apps/client/src/app/components/header/header.component.html - 213 + 217 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 250 + 254 @@ -7463,7 +7371,7 @@ Yapay zeka istemi panoya kopyalandı apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 211 @@ -7479,7 +7387,7 @@ Tembel apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 235 + 239 @@ -7487,7 +7395,7 @@ Anında apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 239 + 243 @@ -7495,7 +7403,7 @@ Varsayılan Piyasa Fiyatı apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 482 + 487 @@ -7503,7 +7411,7 @@ Mod apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 519 + 524 @@ -7511,7 +7419,7 @@ Seçici apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 535 + 540 @@ -7519,7 +7427,7 @@ HTTP İstek Başlıkları apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 495 + 500 @@ -7527,7 +7435,7 @@ gün sonu apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 235 + 239 @@ -7535,7 +7443,7 @@ gerçek zamanlı apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 239 + 243 @@ -7543,7 +7451,7 @@ Duck.ai’yi aç apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 212 @@ -7559,7 +7467,7 @@ Değişim libs/ui/src/lib/holdings-table/holdings-table.component.html - 138 + 143 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7575,11 +7483,11 @@ apps/client/src/app/components/home-overview/home-overview.component.ts - 52 + 53 libs/ui/src/lib/holdings-table/holdings-table.component.html - 161 + 166 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7622,30 +7530,6 @@ 94 - - Armenia - Ermenistan - - libs/ui/src/lib/i18n.ts - 77 - - - - British Virgin Islands - Britanya Virjin Adaları - - libs/ui/src/lib/i18n.ts - 82 - - - - Singapore - Singapur - - libs/ui/src/lib/i18n.ts - 97 - - Terms and Conditions Hükümler ve Koşullar @@ -7691,11 +7575,11 @@ Güvenlik belirteci apps/client/src/app/components/admin-users/admin-users.component.ts - 235 + 256 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 167 + 179 @@ -7703,7 +7587,7 @@ Bu kullanıcı için yeni bir güvenlik belirteci oluşturmak istediğinize emin misiniz? apps/client/src/app/components/admin-users/admin-users.component.ts - 240 + 261 @@ -7714,14 +7598,6 @@ 239 - - United Kingdom - Birleşik Krallık - - libs/ui/src/lib/i18n.ts - 102 - - Terms of Service Hükümler ve Koşullar @@ -7768,7 +7644,7 @@ () is already in use. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 675 + 681 @@ -7776,7 +7652,7 @@ Güncelleştirilirken bir hata oluştu (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 683 + 689 @@ -7840,7 +7716,7 @@ birisi apps/client/src/app/pages/public/public-page.component.ts - 62 + 63 @@ -7872,7 +7748,7 @@ Bu öğeyi silmek istediğinize emin misiniz? libs/ui/src/lib/benchmark/benchmark.component.ts - 137 + 141 @@ -7880,7 +7756,7 @@ Oturumu kapat apps/client/src/app/components/header/header.component.html - 325 + 330 @@ -8127,7 +8003,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 205 + 208 @@ -8292,7 +8168,7 @@ Do you really want to generate a new security token? apps/client/src/app/components/user-account-access/user-account-access.component.ts - 172 + 184 @@ -8348,7 +8224,7 @@ Manage Asset Profile apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 467 + 472 @@ -8356,7 +8232,7 @@ Alternative Investment libs/ui/src/lib/i18n.ts - 45 + 47 @@ -8364,7 +8240,7 @@ Collectible libs/ui/src/lib/i18n.ts - 55 + 57 @@ -8372,7 +8248,7 @@ Average Unit Price apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 113 + 117 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html diff --git a/apps/client/src/locales/messages.uk.xlf b/apps/client/src/locales/messages.uk.xlf index 94dc7e52a..551a3e9dc 100644 --- a/apps/client/src/locales/messages.uk.xlf +++ b/apps/client/src/locales/messages.uk.xlf @@ -10,7 +10,7 @@ apps/client/src/app/components/header/header.component.html - 356 + 361 apps/client/src/app/pages/features/features-page.html @@ -34,11 +34,11 @@ Увійти apps/client/src/app/components/header/header.component.html - 421 + 426 apps/client/src/app/components/header/header.component.ts - 296 + 305 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -419,7 +419,7 @@ Баланс готівки apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 142 + 145 @@ -443,7 +443,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 310 + 315 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -483,11 +483,11 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 12 + 23 libs/ui/src/lib/holdings-table/holdings-table.component.html - 23 + 28 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -515,7 +515,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 317 + 322 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -579,7 +579,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 93 + 98 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -659,7 +659,7 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 176 + 187 @@ -711,7 +711,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 449 + 454 @@ -743,7 +743,7 @@ libs/ui/src/lib/i18n.ts - 14 + 16 @@ -843,7 +843,7 @@ Порівняльні показники apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 125 + 130 @@ -851,7 +851,7 @@ Валюти apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 130 + 135 apps/client/src/app/pages/public/public-page.html @@ -863,7 +863,7 @@ ETF без країн apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 135 + 140 @@ -871,7 +871,7 @@ ETF без секторів apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 140 + 145 @@ -879,7 +879,7 @@ Фільтрувати за... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 368 + 374 @@ -915,7 +915,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 45 + 50 @@ -979,7 +979,7 @@ Ви дійсно хочете видалити цей профіль активу? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 37 + 28 @@ -987,7 +987,7 @@ Упс! Не вдалося видалити профілі. apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 56 + 47 @@ -995,7 +995,7 @@ Ви дійсно хочете видалити ці профілі? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 68 + 59 @@ -1003,7 +1003,7 @@ Помилка apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 734 + 740 @@ -1011,7 +1011,7 @@ Поточна ринкова ціна apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 743 + 749 @@ -1039,7 +1039,7 @@ Країна apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 273 + 278 apps/client/src/app/components/admin-users/admin-users.html @@ -1047,7 +1047,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 276 + 281 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -1059,15 +1059,15 @@ Сектори apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 279 + 284 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 398 + 403 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 282 + 287 apps/client/src/app/pages/public/public-page.html @@ -1079,15 +1079,15 @@ Країни apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 289 + 294 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 409 + 414 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 294 + 299 @@ -1095,7 +1095,15 @@ Зіставлення символів apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 387 + 392 + + + + Technology + Technology + + libs/ui/src/lib/i18n.ts + 96 @@ -1111,7 +1119,7 @@ Конфігурація скребка apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 472 + 477 @@ -1119,7 +1127,7 @@ Тест apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 569 + 574 @@ -1127,11 +1135,11 @@ URL apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 420 + 425 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 551 + 556 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -1147,7 +1155,7 @@ Asset profile has been saved apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 618 + 624 @@ -1155,7 +1163,7 @@ Примітка apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 433 + 438 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1182,6 +1190,14 @@ 16 + + Industrials + Industrials + + libs/ui/src/lib/i18n.ts + 93 + + Add Manually Додати вручну @@ -1218,6 +1234,14 @@ 119 + + Consumer Cyclical + Consumer Cyclical + + libs/ui/src/lib/i18n.ts + 88 + + Oops! Invalid currency. Упс! Невірна валюта. @@ -1295,7 +1319,7 @@ Збір даних apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 592 + 597 apps/client/src/app/components/admin-overview/admin-overview.html @@ -1375,7 +1399,7 @@ Ви дійсно хочете видалити цю платформу? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 111 + 115 @@ -1407,7 +1431,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 209 + 212 @@ -1575,7 +1599,7 @@ apps/client/src/app/components/header/header.component.html - 231 + 235 @@ -1591,7 +1615,7 @@ Ви дійсно хочете видалити цей тег? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 108 + 117 @@ -1615,7 +1639,7 @@ Ви дійсно хочете видалити цього користувача? apps/client/src/app/components/admin-users/admin-users.component.ts - 215 + 236 @@ -1671,11 +1695,11 @@ Could not validate form apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 594 + 600 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 597 + 603 @@ -1699,15 +1723,15 @@ Портфель apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 140 + 143 apps/client/src/app/components/header/header.component.html - 44 + 45 apps/client/src/app/components/header/header.component.html - 257 + 261 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -1723,11 +1747,11 @@ Порівняльний показник apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 379 + 384 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 152 + 155 @@ -1743,7 +1767,7 @@ Оновити план apps/client/src/app/components/header/header.component.html - 193 + 197 apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html @@ -1771,7 +1795,7 @@ Поновити план apps/client/src/app/components/header/header.component.html - 191 + 195 apps/client/src/app/components/user-account-membership/user-account-membership.html @@ -1787,7 +1811,7 @@ Про Ghostfolio apps/client/src/app/components/header/header.component.html - 322 + 327 apps/client/src/app/pages/about/overview/about-overview-page.html @@ -1799,11 +1823,11 @@ Упс! Неправильний Секретний Токен. apps/client/src/app/components/header/header.component.ts - 311 + 320 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 152 + 164 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts @@ -1867,7 +1891,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 69 + 74 @@ -1890,14 +1914,6 @@ 92 - - Indonesia - Індонезія - - libs/ui/src/lib/i18n.ts - 90 - - Activity Активність @@ -1911,7 +1927,7 @@ Повідомити про збій даних apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 452 + 457 @@ -1959,7 +1975,7 @@ Страх apps/client/src/app/components/home-market/home-market.component.ts - 41 + 46 apps/client/src/app/components/markets/markets.component.ts @@ -1967,7 +1983,7 @@ libs/ui/src/lib/i18n.ts - 108 + 81 @@ -1975,7 +1991,7 @@ Жадібність apps/client/src/app/components/home-market/home-market.component.ts - 42 + 47 apps/client/src/app/components/markets/markets.component.ts @@ -1983,7 +1999,7 @@ libs/ui/src/lib/i18n.ts - 109 + 82 @@ -2083,7 +2099,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 201 + 204 @@ -2158,6 +2174,14 @@ 46 + + Energy + Energy + + libs/ui/src/lib/i18n.ts + 90 + + Stay signed in Залишатися в системі @@ -2179,7 +2203,7 @@ Ринкові дані затримуються для apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts - 94 + 92 @@ -2295,7 +2319,7 @@ Зберегти apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 608 + 613 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -2407,7 +2431,7 @@ 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 - 181 + 194 @@ -2575,7 +2599,7 @@ З початку року apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 209 + 212 libs/ui/src/lib/assistant/assistant.component.ts @@ -2587,7 +2611,7 @@ 1 рік apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 213 + 216 libs/ui/src/lib/assistant/assistant.component.ts @@ -2599,7 +2623,7 @@ 5 років apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 217 + 220 libs/ui/src/lib/assistant/assistant.component.ts @@ -2619,7 +2643,7 @@ Максимум apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 221 + 224 libs/ui/src/lib/assistant/assistant.component.ts @@ -2631,15 +2655,7 @@ Упс! Не вдалося надати доступ. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 144 - - - - Argentina - Аргентина - - libs/ui/src/lib/i18n.ts - 78 + 151 @@ -2687,11 +2703,11 @@ Я apps/client/src/app/components/header/header.component.html - 213 + 217 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 250 + 254 @@ -2735,11 +2751,11 @@ apps/client/src/app/core/http-response.interceptor.ts - 89 + 86 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 192 + 193 @@ -2774,6 +2790,14 @@ 174 + + Consumer Defensive + Consumer Defensive + + libs/ui/src/lib/i18n.ts + 89 + + Coupon code has been redeemed Код купона був обміняний @@ -2875,7 +2899,7 @@ Include in apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 377 + 382 @@ -2886,6 +2910,14 @@ 328 + + Utilities + Utilities + + libs/ui/src/lib/i18n.ts + 97 + + Presenter View Режим доповідача @@ -2931,7 +2963,7 @@ Локалізація apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 510 + 515 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -3059,7 +3091,7 @@ Ця функція наразі недоступна. apps/client/src/app/core/http-response.interceptor.ts - 55 + 52 @@ -3067,15 +3099,15 @@ Спробуйте ще раз пізніше. apps/client/src/app/core/http-response.interceptor.ts - 57 + 54 apps/client/src/app/core/http-response.interceptor.ts - 88 + 85 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 191 + 192 @@ -3083,7 +3115,7 @@ Ця дія заборонена. apps/client/src/app/core/http-response.interceptor.ts - 67 + 64 @@ -3091,11 +3123,11 @@ Упс! Щось пішло не так. apps/client/src/app/core/http-response.interceptor.ts - 86 + 83 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 189 + 190 @@ -3103,7 +3135,7 @@ Упс! Здається, ви робите занадто багато запитів. Будь ласка, пригальмуй трохи. apps/client/src/app/core/http-response.interceptor.ts - 106 + 103 @@ -3115,11 +3147,11 @@ apps/client/src/app/components/header/header.component.html - 124 + 125 apps/client/src/app/components/header/header.component.html - 370 + 375 apps/client/src/app/pages/about/overview/about-overview-page.routes.ts @@ -3223,15 +3255,15 @@ apps/client/src/app/components/header/header.component.html - 58 + 59 apps/client/src/app/components/header/header.component.html - 267 + 271 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 378 + 383 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -3255,7 +3287,7 @@ Упс, перенесення балансу готівки не вдалося. apps/client/src/app/pages/accounts/accounts-page.component.ts - 341 + 337 @@ -3311,11 +3343,11 @@ Управління адміністратором apps/client/src/app/components/header/header.component.html - 74 + 75 apps/client/src/app/components/header/header.component.html - 287 + 291 libs/common/src/lib/routes/routes.ts @@ -3335,7 +3367,7 @@ Ринкові дані apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 400 + 405 libs/common/src/lib/routes/routes.ts @@ -3387,7 +3419,7 @@ apps/client/src/app/components/header/header.component.html - 247 + 251 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -3535,11 +3567,11 @@ Could not parse scraper configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 545 + 551 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 548 + 554 @@ -3740,7 +3772,7 @@ Почати apps/client/src/app/components/header/header.component.html - 432 + 437 apps/client/src/app/pages/features/features-page.html @@ -3812,7 +3844,7 @@ Ринки apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 381 + 386 apps/client/src/app/components/footer/footer.component.html @@ -3820,7 +3852,7 @@ apps/client/src/app/components/header/header.component.html - 403 + 408 apps/client/src/app/components/home-market/home-market.html @@ -3991,6 +4023,14 @@ 149 + + Basic Materials + Basic Materials + + libs/ui/src/lib/i18n.ts + 86 + + Use Ghostfolio anonymously and own your financial data. Використовуйте Ghostfolio анонімно та володійте своїми фінансовими даними. @@ -4344,7 +4384,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 342 + 347 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -4476,7 +4516,7 @@ Імпортувати активності apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 93 + 94 libs/ui/src/lib/activities-table/activities-table.component.html @@ -4492,7 +4532,7 @@ Імпорт дивідендів apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 132 + 133 libs/ui/src/lib/activities-table/activities-table.component.html @@ -4508,7 +4548,7 @@ Імпортуються дані... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 171 + 172 @@ -4516,7 +4556,7 @@ Імпорт завершено apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 181 + 182 @@ -4532,7 +4572,7 @@ Перевірка даних... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 291 + 293 @@ -4732,7 +4772,7 @@ libs/ui/src/lib/i18n.ts - 16 + 18 @@ -4864,11 +4904,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 78 libs/ui/src/lib/i18n.ts - 37 + 39 @@ -4884,11 +4924,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 80 + 82 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 96 + 98 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -4908,7 +4948,7 @@ Щомісячно apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 92 @@ -4916,7 +4956,7 @@ Щорічно apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 93 @@ -4924,7 +4964,7 @@ Close Holding apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 442 + 447 @@ -4972,7 +5012,7 @@ Низ apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 352 + 354 @@ -4980,7 +5020,7 @@ Еволюція портфеля apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 405 + 409 @@ -4988,7 +5028,7 @@ Інвестиційний графік apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 434 + 438 @@ -4996,7 +5036,7 @@ Поточна серія apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 455 + 459 @@ -5004,7 +5044,7 @@ Найдовша серія apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 464 + 468 @@ -5012,7 +5052,7 @@ Графік дивідендів apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 493 + 497 @@ -5080,15 +5120,15 @@ apps/client/src/app/components/header/header.component.html - 105 + 106 apps/client/src/app/components/header/header.component.html - 309 + 314 apps/client/src/app/components/header/header.component.html - 384 + 389 apps/client/src/app/pages/pricing/pricing-page.routes.ts @@ -5260,11 +5300,11 @@ Could not save asset profile apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 628 + 634 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 631 + 637 @@ -5497,10 +5537,6 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts 58 - - libs/ui/src/lib/i18n.ts - 99 - Global @@ -5511,7 +5547,7 @@ libs/ui/src/lib/i18n.ts - 17 + 19 @@ -5898,6 +5934,14 @@ 174 + + Financial Services + Financial Services + + libs/ui/src/lib/i18n.ts + 91 + + 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 @@ -6055,11 +6099,11 @@ apps/client/src/app/components/header/header.component.html - 88 + 89 apps/client/src/app/components/header/header.component.html - 297 + 301 apps/client/src/app/pages/resources/overview/resources-overview.component.html @@ -6107,7 +6151,7 @@ Мій Ghostfolio apps/client/src/app/components/header/header.component.html - 276 + 280 apps/client/src/app/pages/user-account/user-account-page.routes.ts @@ -6231,7 +6275,7 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 201 + 204 libs/ui/src/lib/assistant/assistant.component.ts @@ -6251,7 +6295,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 205 + 208 libs/ui/src/lib/assistant/assistant.component.ts @@ -6271,7 +6315,7 @@ рік apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 213 + 216 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6291,7 +6335,7 @@ роки apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 217 + 220 libs/ui/src/lib/assistant/assistant.component.ts @@ -6339,7 +6383,7 @@ Тренд на 50 днів libs/ui/src/lib/benchmark/benchmark.component.html - 32 + 43 @@ -6347,7 +6391,7 @@ Тренд на 200 днів libs/ui/src/lib/benchmark/benchmark.component.html - 61 + 72 @@ -6363,7 +6407,7 @@ Останній рекордний максимум libs/ui/src/lib/benchmark/benchmark.component.html - 90 + 101 @@ -6371,7 +6415,7 @@ Зміна від Історичного Максимуму libs/ui/src/lib/benchmark/benchmark.component.html - 117 + 128 @@ -6387,7 +6431,7 @@ від ІМ libs/ui/src/lib/benchmark/benchmark.component.html - 119 + 130 @@ -6395,7 +6439,7 @@ Позика libs/ui/src/lib/i18n.ts - 58 + 60 @@ -6471,7 +6515,7 @@ libs/ui/src/lib/i18n.ts - 39 + 41 @@ -6498,6 +6542,14 @@ 284 + + Healthcare + Healthcare + + libs/ui/src/lib/i18n.ts + 92 + + Allocation Розподіл @@ -6507,7 +6559,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 117 + 122 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -6523,7 +6575,7 @@ Показати все libs/ui/src/lib/holdings-table/holdings-table.component.html - 212 + 217 @@ -6539,7 +6591,7 @@ libs/ui/src/lib/i18n.ts - 4 + 6 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html @@ -6551,7 +6603,7 @@ Азія-Тихоокеанський регіон libs/ui/src/lib/i18n.ts - 5 + 7 @@ -6567,7 +6619,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 327 + 332 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -6579,11 +6631,11 @@ libs/ui/src/lib/i18n.ts - 6 + 8 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html - 64 + 65 @@ -6599,7 +6651,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 343 + 348 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -6611,7 +6663,7 @@ libs/ui/src/lib/i18n.ts - 7 + 9 @@ -6619,7 +6671,7 @@ Купівля та продаж libs/ui/src/lib/i18n.ts - 8 + 10 @@ -6631,7 +6683,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 597 + 602 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6675,7 +6727,7 @@ libs/ui/src/lib/i18n.ts - 9 + 11 @@ -6683,7 +6735,7 @@ Ядро libs/ui/src/lib/i18n.ts - 10 + 12 @@ -6691,7 +6743,7 @@ Закрити apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 599 + 604 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6731,7 +6783,7 @@ libs/ui/src/lib/i18n.ts - 11 + 13 @@ -6739,7 +6791,7 @@ Переключитися на Ghostfolio Premium або Ghostfolio з відкритим вихідним кодом легко libs/ui/src/lib/i18n.ts - 12 + 14 @@ -6747,7 +6799,7 @@ Переключитися на Ghostfolio Premium легко libs/ui/src/lib/i18n.ts - 13 + 15 @@ -6763,7 +6815,7 @@ libs/ui/src/lib/i18n.ts - 15 + 17 @@ -6771,7 +6823,7 @@ Грант libs/ui/src/lib/i18n.ts - 18 + 20 @@ -6779,7 +6831,7 @@ Вищий ризик libs/ui/src/lib/i18n.ts - 19 + 21 @@ -6787,7 +6839,7 @@ Така активність вже існує. libs/ui/src/lib/i18n.ts - 20 + 22 @@ -6795,7 +6847,7 @@ Нижчий ризик libs/ui/src/lib/i18n.ts - 21 + 23 @@ -6803,7 +6855,7 @@ Місяць libs/ui/src/lib/i18n.ts - 22 + 24 @@ -6811,7 +6863,7 @@ Місяців libs/ui/src/lib/i18n.ts - 23 + 25 @@ -6819,11 +6871,15 @@ Інші libs/ui/src/lib/i18n.ts - 24 + 26 + + + libs/ui/src/lib/i18n.ts + 94 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 451 + 449 @@ -6831,7 +6887,7 @@ Отримайте доступ до 80 000+ тікерів з понад 50 бірж libs/ui/src/lib/i18n.ts - 25 + 27 @@ -6839,7 +6895,7 @@ Пресет libs/ui/src/lib/i18n.ts - 26 + 28 @@ -6847,7 +6903,7 @@ No Activities apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 145 + 150 @@ -6855,7 +6911,7 @@ Пенсійне накопичення libs/ui/src/lib/i18n.ts - 27 + 29 @@ -6871,7 +6927,7 @@ Супутник libs/ui/src/lib/i18n.ts - 28 + 30 @@ -6895,11 +6951,11 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 314 + 319 libs/ui/src/lib/i18n.ts - 29 + 31 @@ -6907,11 +6963,11 @@ Тег libs/ui/src/lib/i18n.ts - 30 + 32 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html - 53 + 54 @@ -6919,7 +6975,7 @@ Рік libs/ui/src/lib/i18n.ts - 31 + 33 @@ -6939,7 +6995,7 @@ Роки libs/ui/src/lib/i18n.ts - 32 + 34 @@ -6955,7 +7011,7 @@ Так libs/ui/src/lib/i18n.ts - 33 + 35 @@ -6975,7 +7031,7 @@ libs/ui/src/lib/i18n.ts - 36 + 38 @@ -6991,7 +7047,7 @@ libs/ui/src/lib/i18n.ts - 38 + 40 @@ -6999,7 +7055,7 @@ Цінний libs/ui/src/lib/i18n.ts - 42 + 44 @@ -7007,7 +7063,7 @@ Зобов’язання libs/ui/src/lib/i18n.ts - 40 + 42 @@ -7019,7 +7075,7 @@ libs/ui/src/lib/i18n.ts - 41 + 43 @@ -7031,7 +7087,7 @@ libs/ui/src/lib/i18n.ts - 54 + 56 @@ -7039,7 +7095,7 @@ Товар libs/ui/src/lib/i18n.ts - 46 + 48 @@ -7051,7 +7107,7 @@ libs/ui/src/lib/i18n.ts - 47 + 49 @@ -7059,7 +7115,7 @@ Фіксований дохід libs/ui/src/lib/i18n.ts - 48 + 50 @@ -7067,7 +7123,7 @@ Ліквідність libs/ui/src/lib/i18n.ts - 49 + 51 @@ -7075,7 +7131,11 @@ Нерухомість libs/ui/src/lib/i18n.ts - 50 + 52 + + + libs/ui/src/lib/i18n.ts + 95 @@ -7091,7 +7151,7 @@ Облігація libs/ui/src/lib/i18n.ts - 53 + 55 @@ -7099,7 +7159,7 @@ Криптовалюта libs/ui/src/lib/i18n.ts - 56 + 58 @@ -7107,7 +7167,7 @@ ETF libs/ui/src/lib/i18n.ts - 57 + 59 @@ -7115,7 +7175,7 @@ Взаємний фонд libs/ui/src/lib/i18n.ts - 59 + 61 @@ -7123,7 +7183,7 @@ Дорогоцінний метал libs/ui/src/lib/i18n.ts - 60 + 62 @@ -7131,7 +7191,7 @@ Приватний капітал libs/ui/src/lib/i18n.ts - 61 + 63 @@ -7139,7 +7199,7 @@ Акція libs/ui/src/lib/i18n.ts - 62 + 64 @@ -7147,7 +7207,7 @@ Африка libs/ui/src/lib/i18n.ts - 69 + 71 @@ -7155,7 +7215,15 @@ Азія libs/ui/src/lib/i18n.ts - 70 + 72 + + + + Communication Services + Communication Services + + libs/ui/src/lib/i18n.ts + 87 @@ -7163,7 +7231,7 @@ Європа libs/ui/src/lib/i18n.ts - 71 + 73 @@ -7171,7 +7239,7 @@ Північна Америка libs/ui/src/lib/i18n.ts - 72 + 74 @@ -7187,7 +7255,7 @@ Океанія libs/ui/src/lib/i18n.ts - 73 + 75 @@ -7195,39 +7263,7 @@ Південна Америка libs/ui/src/lib/i18n.ts - 74 - - - - Australia - Австралія - - libs/ui/src/lib/i18n.ts - 79 - - - - Austria - Австрія - - libs/ui/src/lib/i18n.ts - 80 - - - - Belgium - Бельгія - - libs/ui/src/lib/i18n.ts - 81 - - - - Bulgaria - Болгарія - - libs/ui/src/lib/i18n.ts - 83 + 76 @@ -7238,140 +7274,12 @@ 474 - - Canada - Канада - - libs/ui/src/lib/i18n.ts - 84 - - - - Czech Republic - Чеська Республіка - - libs/ui/src/lib/i18n.ts - 85 - - - - Finland - Фінляндія - - libs/ui/src/lib/i18n.ts - 86 - - - - France - Франція - - libs/ui/src/lib/i18n.ts - 87 - - - - Germany - Німеччина - - libs/ui/src/lib/i18n.ts - 88 - - - - India - Індія - - libs/ui/src/lib/i18n.ts - 89 - - - - Italy - Італія - - libs/ui/src/lib/i18n.ts - 91 - - - - Japan - Японія - - libs/ui/src/lib/i18n.ts - 92 - - - - Netherlands - Нідерланди - - libs/ui/src/lib/i18n.ts - 93 - - - - New Zealand - Нова Зеландія - - libs/ui/src/lib/i18n.ts - 94 - - - - Poland - Польща - - libs/ui/src/lib/i18n.ts - 95 - - - - Romania - Румунія - - libs/ui/src/lib/i18n.ts - 96 - - - - South Africa - Південна Африка - - libs/ui/src/lib/i18n.ts - 98 - - - - Thailand - Таїланд - - libs/ui/src/lib/i18n.ts - 100 - - - - Ukraine - Україна - - libs/ui/src/lib/i18n.ts - 101 - - - - United States - Сполучені Штати - - libs/ui/src/lib/i18n.ts - 103 - - Extreme Fear Екстремальний страх libs/ui/src/lib/i18n.ts - 106 + 79 @@ -7379,7 +7287,7 @@ Екстремальна жадібність libs/ui/src/lib/i18n.ts - 107 + 80 @@ -7387,7 +7295,7 @@ Нейтрально libs/ui/src/lib/i18n.ts - 110 + 83 @@ -7427,15 +7335,15 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 209 + 220 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 453 + 451 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 467 + 465 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -7471,7 +7379,7 @@ Запит AI скопійовано в буфер обміну apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 211 @@ -7479,7 +7387,7 @@ Лінивий apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 235 + 239 @@ -7487,7 +7395,7 @@ Миттєвий apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 239 + 243 @@ -7495,7 +7403,7 @@ Default Market Price apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 482 + 487 @@ -7503,7 +7411,7 @@ Режим apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 519 + 524 @@ -7511,7 +7419,7 @@ Селектор apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 535 + 540 @@ -7519,7 +7427,7 @@ HTTP Request Headers apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 495 + 500 @@ -7527,7 +7435,7 @@ end of day apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 235 + 239 @@ -7535,7 +7443,7 @@ реальний час apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 239 + 243 @@ -7543,7 +7451,7 @@ Open Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 212 @@ -7559,7 +7467,7 @@ Змінити libs/ui/src/lib/holdings-table/holdings-table.component.html - 138 + 143 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7575,11 +7483,11 @@ apps/client/src/app/components/home-overview/home-overview.component.ts - 52 + 53 libs/ui/src/lib/holdings-table/holdings-table.component.html - 161 + 166 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7622,30 +7530,6 @@ 94 - - Armenia - Вірменія - - libs/ui/src/lib/i18n.ts - 77 - - - - British Virgin Islands - British Virgin Islands - - libs/ui/src/lib/i18n.ts - 82 - - - - Singapore - Сінгапур - - libs/ui/src/lib/i18n.ts - 97 - - Terms and Conditions Terms and Conditions @@ -7691,11 +7575,11 @@ Security token apps/client/src/app/components/admin-users/admin-users.component.ts - 235 + 256 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 167 + 179 @@ -7703,7 +7587,7 @@ Do you really want to generate a new security token for this user? apps/client/src/app/components/admin-users/admin-users.component.ts - 240 + 261 @@ -7714,14 +7598,6 @@ 239 - - United Kingdom - United Kingdom - - libs/ui/src/lib/i18n.ts - 102 - - Terms of Service Terms of Service @@ -7768,7 +7644,7 @@ () is already in use. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 675 + 681 @@ -7776,7 +7652,7 @@ An error occurred while updating to (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 683 + 689 @@ -7840,7 +7716,7 @@ когось apps/client/src/app/pages/public/public-page.component.ts - 62 + 63 @@ -7872,7 +7748,7 @@ Do you really want to delete this item? libs/ui/src/lib/benchmark/benchmark.component.ts - 137 + 141 @@ -7880,7 +7756,7 @@ Log out apps/client/src/app/components/header/header.component.html - 325 + 330 @@ -8127,7 +8003,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 205 + 208 @@ -8292,7 +8168,7 @@ Do you really want to generate a new security token? apps/client/src/app/components/user-account-access/user-account-access.component.ts - 172 + 184 @@ -8348,7 +8224,7 @@ Manage Asset Profile apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 467 + 472 @@ -8356,7 +8232,7 @@ Alternative Investment libs/ui/src/lib/i18n.ts - 45 + 47 @@ -8364,7 +8240,7 @@ Колекційний предмет libs/ui/src/lib/i18n.ts - 55 + 57 @@ -8372,7 +8248,7 @@ Average Unit Price apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 113 + 117 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html diff --git a/apps/client/src/locales/messages.xlf b/apps/client/src/locales/messages.xlf index 4c38d4f7d..c929a6765 100644 --- a/apps/client/src/locales/messages.xlf +++ b/apps/client/src/locales/messages.xlf @@ -316,7 +316,7 @@ Cash Balances apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 142 + 145 @@ -338,7 +338,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 310 + 315 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -378,11 +378,11 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 12 + 23 libs/ui/src/lib/holdings-table/holdings-table.component.html - 23 + 28 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -408,7 +408,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 317 + 322 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -471,7 +471,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 93 + 98 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -549,7 +549,7 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 176 + 187 @@ -574,7 +574,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 449 + 454 @@ -597,7 +597,7 @@ libs/ui/src/lib/i18n.ts - 14 + 16 @@ -719,7 +719,7 @@ Currencies apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 130 + 135 apps/client/src/app/pages/public/public-page.html @@ -730,28 +730,28 @@ ETFs without Countries apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 135 + 140 ETFs without Sectors apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 140 + 145 Do you really want to delete this asset profile? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 37 + 28 Filter by... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 368 + 374 @@ -770,7 +770,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 45 + 50 @@ -837,6 +837,13 @@ 284 + + Healthcare + + libs/ui/src/lib/i18n.ts + 92 + + Refresh @@ -881,7 +888,7 @@ Country apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 273 + 278 apps/client/src/app/components/admin-users/admin-users.html @@ -889,7 +896,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 276 + 281 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -900,15 +907,15 @@ Sectors apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 279 + 284 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 398 + 403 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 282 + 287 apps/client/src/app/pages/public/public-page.html @@ -919,22 +926,29 @@ Countries apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 289 + 294 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 409 + 414 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 294 + 299 Symbol Mapping apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 387 + 392 + + + + Technology + + libs/ui/src/lib/i18n.ts + 96 @@ -948,14 +962,14 @@ Scraper Configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 472 + 477 Note apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 433 + 438 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -980,6 +994,13 @@ 16 + + Industrials + + libs/ui/src/lib/i18n.ts + 93 + + Add Manually @@ -1006,6 +1027,13 @@ 119 + + Consumer Cyclical + + libs/ui/src/lib/i18n.ts + 88 + + Do you really want to delete this coupon? @@ -1126,11 +1154,11 @@ Url apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 420 + 425 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 551 + 556 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -1145,14 +1173,14 @@ Asset profile has been saved apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 618 + 624 Do you really want to delete this platform? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 111 + 115 @@ -1180,7 +1208,7 @@ Current year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 209 + 212 @@ -1223,7 +1251,7 @@ Do you really want to delete this tag? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 108 + 117 @@ -1244,7 +1272,7 @@ Do you really want to delete this user? apps/client/src/app/components/admin-users/admin-users.component.ts - 215 + 236 @@ -1259,7 +1287,7 @@ apps/client/src/app/components/header/header.component.html - 231 + 235 @@ -1305,11 +1333,11 @@ Could not validate form apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 594 + 600 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 597 + 603 @@ -1330,15 +1358,15 @@ Portfolio apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 140 + 143 apps/client/src/app/components/header/header.component.html - 44 + 45 apps/client/src/app/components/header/header.component.html - 257 + 261 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -1353,11 +1381,11 @@ Benchmark apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 379 + 384 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 152 + 155 @@ -1371,7 +1399,7 @@ About Ghostfolio apps/client/src/app/components/header/header.component.html - 322 + 327 apps/client/src/app/pages/about/overview/about-overview-page.html @@ -1382,11 +1410,11 @@ Sign in apps/client/src/app/components/header/header.component.html - 421 + 426 apps/client/src/app/components/header/header.component.ts - 296 + 305 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -1405,11 +1433,11 @@ Oops! Incorrect Security Token. apps/client/src/app/components/header/header.component.ts - 311 + 320 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 152 + 164 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts @@ -1427,7 +1455,7 @@ Fear apps/client/src/app/components/home-market/home-market.component.ts - 41 + 46 apps/client/src/app/components/markets/markets.component.ts @@ -1435,14 +1463,14 @@ libs/ui/src/lib/i18n.ts - 108 + 81 Greed apps/client/src/app/components/home-market/home-market.component.ts - 42 + 47 apps/client/src/app/components/markets/markets.component.ts @@ -1450,7 +1478,7 @@ libs/ui/src/lib/i18n.ts - 109 + 82 @@ -1538,7 +1566,7 @@ Current week apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 201 + 204 @@ -1650,6 +1678,13 @@ 46 + + Energy + + libs/ui/src/lib/i18n.ts + 90 + + Stay signed in @@ -1794,14 +1829,14 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 69 + 74 Report Data Glitch apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 452 + 457 @@ -1938,7 +1973,7 @@ Upgrade Plan apps/client/src/app/components/header/header.component.html - 193 + 197 apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html @@ -1976,7 +2011,7 @@ YTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 209 + 212 libs/ui/src/lib/assistant/assistant.component.ts @@ -1987,7 +2022,7 @@ 1Y apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 213 + 216 libs/ui/src/lib/assistant/assistant.component.ts @@ -1998,7 +2033,7 @@ 5Y apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 217 + 220 libs/ui/src/lib/assistant/assistant.component.ts @@ -2016,7 +2051,7 @@ Max apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 221 + 224 libs/ui/src/lib/assistant/assistant.component.ts @@ -2058,6 +2093,13 @@ 174 + + Consumer Defensive + + libs/ui/src/lib/i18n.ts + 89 + + Coupon code has been redeemed @@ -2123,6 +2165,13 @@ 279 + + Utilities + + libs/ui/src/lib/i18n.ts + 97 + + Presenter View @@ -2155,7 +2204,7 @@ Locale apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 510 + 515 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -2269,33 +2318,33 @@ This feature is currently unavailable. apps/client/src/app/core/http-response.interceptor.ts - 55 + 52 Please try again later. apps/client/src/app/core/http-response.interceptor.ts - 57 + 54 apps/client/src/app/core/http-response.interceptor.ts - 88 + 85 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 191 + 192 Oops! Something went wrong. apps/client/src/app/core/http-response.interceptor.ts - 86 + 83 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 189 + 190 @@ -2306,11 +2355,11 @@ apps/client/src/app/core/http-response.interceptor.ts - 89 + 86 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 192 + 193 @@ -2321,11 +2370,11 @@ apps/client/src/app/components/header/header.component.html - 124 + 125 apps/client/src/app/components/header/header.component.html - 370 + 375 apps/client/src/app/pages/about/overview/about-overview-page.routes.ts @@ -2421,15 +2470,15 @@ apps/client/src/app/components/header/header.component.html - 58 + 59 apps/client/src/app/components/header/header.component.html - 267 + 271 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 378 + 383 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2452,7 +2501,7 @@ Oops, cash balance transfer has failed. apps/client/src/app/pages/accounts/accounts-page.component.ts - 341 + 337 @@ -2501,11 +2550,11 @@ Admin Control apps/client/src/app/components/header/header.component.html - 74 + 75 apps/client/src/app/components/header/header.component.html - 287 + 291 libs/common/src/lib/routes/routes.ts @@ -2516,7 +2565,7 @@ Market Data apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 400 + 405 libs/common/src/lib/routes/routes.ts @@ -2565,7 +2614,7 @@ apps/client/src/app/components/header/header.component.html - 247 + 251 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2703,11 +2752,11 @@ Could not parse scraper configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 545 + 551 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 548 + 554 @@ -2758,7 +2807,7 @@ apps/client/src/app/components/header/header.component.html - 356 + 361 apps/client/src/app/pages/features/features-page.html @@ -2864,7 +2913,7 @@ Get Started apps/client/src/app/components/header/header.component.html - 432 + 437 apps/client/src/app/pages/features/features-page.html @@ -2933,7 +2982,7 @@ Markets apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 381 + 386 apps/client/src/app/components/footer/footer.component.html @@ -2941,7 +2990,7 @@ apps/client/src/app/components/header/header.component.html - 403 + 408 apps/client/src/app/components/home-market/home-market.html @@ -3089,6 +3138,13 @@ 149 + + Basic Materials + + libs/ui/src/lib/i18n.ts + 86 + + Use Ghostfolio anonymously and own your financial data. @@ -3402,7 +3458,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 342 + 347 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -3503,7 +3559,7 @@ Import Activities apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 93 + 94 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3518,7 +3574,7 @@ Import Dividends apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 132 + 133 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3533,14 +3589,14 @@ Importing data... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 171 + 172 Import has been completed apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 181 + 182 @@ -3554,7 +3610,7 @@ Validating data... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 291 + 293 @@ -3718,7 +3774,7 @@ libs/ui/src/lib/i18n.ts - 16 + 18 @@ -3824,11 +3880,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 78 libs/ui/src/lib/i18n.ts - 37 + 39 @@ -3849,14 +3905,14 @@ Monthly apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 92 Yearly apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 93 @@ -3870,42 +3926,42 @@ Bottom apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 352 + 354 Portfolio Evolution apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 405 + 409 Investment Timeline apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 434 + 438 Current Streak apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 455 + 459 Longest Streak apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 464 + 468 Dividend Timeline apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 493 + 497 @@ -3930,15 +3986,15 @@ apps/client/src/app/components/header/header.component.html - 105 + 106 apps/client/src/app/components/header/header.component.html - 309 + 314 apps/client/src/app/components/header/header.component.html - 384 + 389 apps/client/src/app/pages/pricing/pricing-page.routes.ts @@ -4086,7 +4142,7 @@ Renew Plan apps/client/src/app/components/header/header.component.html - 191 + 195 apps/client/src/app/components/user-account-membership/user-account-membership.html @@ -4108,11 +4164,11 @@ Could not save asset profile apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 628 + 634 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 631 + 637 @@ -4447,10 +4503,6 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts 58 - - libs/ui/src/lib/i18n.ts - 99 - Global @@ -4460,7 +4512,7 @@ libs/ui/src/lib/i18n.ts - 17 + 19 @@ -4471,11 +4523,11 @@ apps/client/src/app/components/header/header.component.html - 88 + 89 apps/client/src/app/components/header/header.component.html - 297 + 301 apps/client/src/app/pages/resources/overview/resources-overview.component.html @@ -4519,7 +4571,7 @@ My Ghostfolio apps/client/src/app/components/header/header.component.html - 276 + 280 apps/client/src/app/pages/user-account/user-account-page.routes.ts @@ -4619,14 +4671,14 @@ 50-Day Trend libs/ui/src/lib/benchmark/benchmark.component.html - 32 + 43 200-Day Trend libs/ui/src/lib/benchmark/benchmark.component.html - 61 + 72 @@ -4640,14 +4692,14 @@ Last All Time High libs/ui/src/lib/benchmark/benchmark.component.html - 90 + 101 Change from All Time High libs/ui/src/lib/benchmark/benchmark.component.html - 117 + 128 @@ -4661,14 +4713,14 @@ from ATH libs/ui/src/lib/benchmark/benchmark.component.html - 119 + 130 Loan libs/ui/src/lib/i18n.ts - 58 + 60 @@ -4722,7 +4774,7 @@ libs/ui/src/lib/i18n.ts - 39 + 41 @@ -4740,7 +4792,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 117 + 122 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -4755,7 +4807,7 @@ Show all libs/ui/src/lib/holdings-table/holdings-table.component.html - 212 + 217 @@ -4770,7 +4822,7 @@ libs/ui/src/lib/i18n.ts - 4 + 6 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html @@ -4781,7 +4833,7 @@ Asia-Pacific libs/ui/src/lib/i18n.ts - 5 + 7 @@ -4796,7 +4848,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 327 + 332 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -4808,11 +4860,11 @@ libs/ui/src/lib/i18n.ts - 6 + 8 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html - 64 + 65 @@ -4827,7 +4879,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 343 + 348 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -4839,28 +4891,28 @@ libs/ui/src/lib/i18n.ts - 7 + 9 Core libs/ui/src/lib/i18n.ts - 10 + 12 Switch to Ghostfolio Premium or Ghostfolio Open Source easily libs/ui/src/lib/i18n.ts - 12 + 14 Switch to Ghostfolio Premium easily libs/ui/src/lib/i18n.ts - 13 + 15 @@ -4875,95 +4927,92 @@ libs/ui/src/lib/i18n.ts - 15 + 17 Grant libs/ui/src/lib/i18n.ts - 18 + 20 Higher Risk libs/ui/src/lib/i18n.ts - 19 + 21 This activity already exists. libs/ui/src/lib/i18n.ts - 20 - - - - Japan - - libs/ui/src/lib/i18n.ts - 92 + 22 Lower Risk libs/ui/src/lib/i18n.ts - 21 + 23 Month libs/ui/src/lib/i18n.ts - 22 + 24 Months libs/ui/src/lib/i18n.ts - 23 + 25 Other libs/ui/src/lib/i18n.ts - 24 + 26 + + + libs/ui/src/lib/i18n.ts + 94 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 451 + 449 Preset libs/ui/src/lib/i18n.ts - 26 + 28 No Activities apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 145 + 150 Retirement Provision libs/ui/src/lib/i18n.ts - 27 + 29 Satellite libs/ui/src/lib/i18n.ts - 28 + 30 @@ -4986,29 +5035,29 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 314 + 319 libs/ui/src/lib/i18n.ts - 29 + 31 Tag libs/ui/src/lib/i18n.ts - 30 + 32 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html - 53 + 54 Year libs/ui/src/lib/i18n.ts - 31 + 33 @@ -5026,7 +5075,7 @@ Years libs/ui/src/lib/i18n.ts - 32 + 34 @@ -5044,7 +5093,7 @@ libs/ui/src/lib/i18n.ts - 36 + 38 @@ -5059,21 +5108,21 @@ libs/ui/src/lib/i18n.ts - 38 + 40 Valuable libs/ui/src/lib/i18n.ts - 42 + 44 Liability libs/ui/src/lib/i18n.ts - 40 + 42 @@ -5084,7 +5133,7 @@ libs/ui/src/lib/i18n.ts - 41 + 43 @@ -5095,14 +5144,14 @@ libs/ui/src/lib/i18n.ts - 54 + 56 Commodity libs/ui/src/lib/i18n.ts - 46 + 48 @@ -5113,21 +5162,25 @@ libs/ui/src/lib/i18n.ts - 47 + 49 Fixed Income libs/ui/src/lib/i18n.ts - 48 + 50 Real Estate libs/ui/src/lib/i18n.ts - 50 + 52 + + + libs/ui/src/lib/i18n.ts + 95 @@ -5141,77 +5194,84 @@ Bond libs/ui/src/lib/i18n.ts - 53 + 55 Cryptocurrency libs/ui/src/lib/i18n.ts - 56 + 58 ETF libs/ui/src/lib/i18n.ts - 57 + 59 Mutual Fund libs/ui/src/lib/i18n.ts - 59 + 61 Precious Metal libs/ui/src/lib/i18n.ts - 60 + 62 Private Equity libs/ui/src/lib/i18n.ts - 61 + 63 Stock libs/ui/src/lib/i18n.ts - 62 + 64 Africa libs/ui/src/lib/i18n.ts - 69 + 71 Asia libs/ui/src/lib/i18n.ts - 70 + 72 + + + + Communication Services + + libs/ui/src/lib/i18n.ts + 87 Europe libs/ui/src/lib/i18n.ts - 71 + 73 North America libs/ui/src/lib/i18n.ts - 72 + 74 @@ -5225,35 +5285,35 @@ Oceania libs/ui/src/lib/i18n.ts - 73 + 75 South America libs/ui/src/lib/i18n.ts - 74 + 76 Extreme Fear libs/ui/src/lib/i18n.ts - 106 + 79 Extreme Greed libs/ui/src/lib/i18n.ts - 107 + 80 Neutral libs/ui/src/lib/i18n.ts - 110 + 83 @@ -5286,15 +5346,15 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 209 + 220 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 453 + 451 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 467 + 465 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5319,28 +5379,21 @@ The current market price is apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 743 + 749 Test apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 569 + 574 Oops! Could not grant access. apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 144 - - - - Argentina - - libs/ui/src/lib/i18n.ts - 78 + 151 @@ -5383,7 +5436,7 @@ Market data is delayed for apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts - 94 + 92 @@ -5397,7 +5450,7 @@ Close Holding apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 442 + 447 @@ -5419,11 +5472,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 80 + 82 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 96 + 98 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5476,7 +5529,7 @@ MTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 205 + 208 libs/ui/src/lib/assistant/assistant.component.ts @@ -5487,7 +5540,7 @@ WTD apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 201 + 204 libs/ui/src/lib/assistant/assistant.component.ts @@ -5523,7 +5576,7 @@ year apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 213 + 216 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -5542,7 +5595,7 @@ years apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 217 + 220 libs/ui/src/lib/assistant/assistant.component.ts @@ -5583,7 +5636,7 @@ Data Gathering apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 592 + 597 apps/client/src/app/components/admin-overview/admin-overview.html @@ -5619,7 +5672,7 @@ Oops! It looks like you’re making too many requests. Please slow down a bit. apps/client/src/app/core/http-response.interceptor.ts - 106 + 103 @@ -5643,13 +5696,6 @@ 61 - - Indonesia - - libs/ui/src/lib/i18n.ts - 90 - - Activity @@ -5675,7 +5721,7 @@ This action is not allowed. apps/client/src/app/core/http-response.interceptor.ts - 67 + 64 @@ -5689,14 +5735,14 @@ Liquidity libs/ui/src/lib/i18n.ts - 49 + 51 Buy and sell libs/ui/src/lib/i18n.ts - 8 + 10 @@ -5773,7 +5819,7 @@ Include in apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 377 + 382 @@ -5794,7 +5840,7 @@ Do you really want to delete these profiles? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 68 + 59 @@ -5808,14 +5854,14 @@ Oops! Could not delete profiles. apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 56 + 47 Benchmarks apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 125 + 130 @@ -5905,41 +5951,6 @@ 86 - - Thailand - - libs/ui/src/lib/i18n.ts - 100 - - - - India - - libs/ui/src/lib/i18n.ts - 89 - - - - Austria - - libs/ui/src/lib/i18n.ts - 80 - - - - Poland - - libs/ui/src/lib/i18n.ts - 95 - - - - Italy - - libs/ui/src/lib/i18n.ts - 91 - - User Experience @@ -5982,27 +5993,6 @@ 474 - - Canada - - libs/ui/src/lib/i18n.ts - 84 - - - - New Zealand - - libs/ui/src/lib/i18n.ts - 94 - - - - Netherlands - - libs/ui/src/lib/i18n.ts - 93 - - Alternative @@ -6035,27 +6025,6 @@ 96 - - Romania - - libs/ui/src/lib/i18n.ts - 96 - - - - Germany - - libs/ui/src/lib/i18n.ts - 88 - - - - United States - - libs/ui/src/lib/i18n.ts - 103 - - Budgeting @@ -6063,13 +6032,6 @@ 85 - - Belgium - - libs/ui/src/lib/i18n.ts - 81 - - Open Source @@ -6081,34 +6043,6 @@ 91 - - Czech Republic - - libs/ui/src/lib/i18n.ts - 85 - - - - Australia - - libs/ui/src/lib/i18n.ts - 79 - - - - South Africa - - libs/ui/src/lib/i18n.ts - 98 - - - - Bulgaria - - libs/ui/src/lib/i18n.ts - 83 - - Privacy @@ -6116,25 +6050,11 @@ 94 - - Finland - - libs/ui/src/lib/i18n.ts - 86 - - - - France - - libs/ui/src/lib/i18n.ts - 87 - - Error apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 734 + 740 @@ -6145,7 +6065,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 597 + 602 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6189,7 +6109,7 @@ libs/ui/src/lib/i18n.ts - 9 + 11 @@ -6203,7 +6123,7 @@ Yes libs/ui/src/lib/i18n.ts - 33 + 35 @@ -6224,7 +6144,7 @@ Close apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 599 + 604 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6264,7 +6184,7 @@ libs/ui/src/lib/i18n.ts - 11 + 13 @@ -6278,7 +6198,7 @@ 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 - 181 + 194 @@ -6412,6 +6332,13 @@ 174 + + Financial Services + + libs/ui/src/lib/i18n.ts + 91 + + to use our referral link and get a Ghostfolio Premium membership for one year @@ -6506,13 +6433,6 @@ 40 - - Ukraine - - libs/ui/src/lib/i18n.ts - 101 - - Set API key @@ -6524,7 +6444,7 @@ Get access to 80’000+ tickers from over 50 exchanges libs/ui/src/lib/i18n.ts - 25 + 27 @@ -6715,7 +6635,7 @@ Save apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 608 + 613 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6776,11 +6696,11 @@ Me apps/client/src/app/components/header/header.component.html - 213 + 217 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 250 + 254 @@ -6801,7 +6721,7 @@ AI prompt has been copied to the clipboard apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 211 @@ -6815,63 +6735,63 @@ Mode apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 519 + 524 Default Market Price apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 482 + 487 Selector apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 535 + 540 Instant apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 239 + 243 Lazy apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 235 + 239 HTTP Request Headers apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 495 + 500 real-time apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 239 + 243 end of day apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 235 + 239 Open Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 212 @@ -6885,7 +6805,7 @@ Change libs/ui/src/lib/holdings-table/holdings-table.component.html - 138 + 143 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -6900,11 +6820,11 @@ apps/client/src/app/components/home-overview/home-overview.component.ts - 52 + 53 libs/ui/src/lib/holdings-table/holdings-table.component.html - 161 + 166 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -6929,13 +6849,6 @@ 67 - - Singapore - - libs/ui/src/lib/i18n.ts - 97 - - Total amount @@ -6943,20 +6856,6 @@ 94 - - Armenia - - libs/ui/src/lib/i18n.ts - 77 - - - - British Virgin Islands - - libs/ui/src/lib/i18n.ts - 82 - - Copy portfolio data to clipboard for AI prompt @@ -7003,18 +6902,18 @@ Do you really want to generate a new security token for this user? apps/client/src/app/components/admin-users/admin-users.component.ts - 240 + 261 Security token apps/client/src/app/components/admin-users/admin-users.component.ts - 235 + 256 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 167 + 179 @@ -7024,13 +6923,6 @@ 239 - - United Kingdom - - libs/ui/src/lib/i18n.ts - 102 - - Terms of Service @@ -7072,14 +6964,14 @@ () is already in use. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 675 + 681 An error occurred while updating to (). apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 683 + 689 @@ -7114,7 +7006,7 @@ someone apps/client/src/app/pages/public/public-page.component.ts - 62 + 63 @@ -7143,14 +7035,14 @@ Do you really want to delete this item? libs/ui/src/lib/benchmark/benchmark.component.ts - 137 + 141 Log out apps/client/src/app/components/header/header.component.html - 325 + 330 @@ -7371,7 +7263,7 @@ Current month apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 205 + 208 @@ -7530,7 +7422,7 @@ Do you really want to generate a new security token? apps/client/src/app/components/user-account-access/user-account-access.component.ts - 172 + 184 @@ -7566,28 +7458,28 @@ Manage Asset Profile apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 467 + 472 Alternative Investment libs/ui/src/lib/i18n.ts - 45 + 47 Collectible libs/ui/src/lib/i18n.ts - 55 + 57 Average Unit Price apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 113 + 117 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html diff --git a/apps/client/src/locales/messages.zh.xlf b/apps/client/src/locales/messages.zh.xlf index 991b5f8b3..ba44dae95 100644 --- a/apps/client/src/locales/messages.zh.xlf +++ b/apps/client/src/locales/messages.zh.xlf @@ -340,7 +340,7 @@ 现金余额 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html - 142 + 145 @@ -364,7 +364,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 310 + 315 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -404,11 +404,11 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 12 + 23 libs/ui/src/lib/holdings-table/holdings-table.component.html - 23 + 28 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -436,7 +436,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 317 + 322 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -500,7 +500,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 93 + 98 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -580,7 +580,7 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 176 + 187 @@ -608,7 +608,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 449 + 454 @@ -632,7 +632,7 @@ libs/ui/src/lib/i18n.ts - 14 + 16 @@ -768,7 +768,7 @@ 货币 apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 130 + 135 apps/client/src/app/pages/public/public-page.html @@ -780,7 +780,7 @@ 没有国家的 ETF apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 135 + 140 @@ -788,7 +788,7 @@ 无行业类别的 ETF apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 140 + 145 @@ -796,7 +796,7 @@ 您确实要删除此资产配置文件吗? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 37 + 28 @@ -804,7 +804,7 @@ 过滤... apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 368 + 374 @@ -824,7 +824,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 45 + 50 @@ -883,6 +883,14 @@ 284 + + Healthcare + Healthcare + + libs/ui/src/lib/i18n.ts + 92 + + Refresh 刷新 @@ -924,7 +932,7 @@ 国家 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 273 + 278 apps/client/src/app/components/admin-users/admin-users.html @@ -932,7 +940,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 276 + 281 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -944,15 +952,15 @@ 行业 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 279 + 284 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 398 + 403 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 282 + 287 apps/client/src/app/pages/public/public-page.html @@ -964,15 +972,15 @@ 国家 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 289 + 294 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 409 + 414 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 294 + 299 @@ -980,7 +988,15 @@ 代码映射 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 387 + 392 + + + + Technology + Technology + + libs/ui/src/lib/i18n.ts + 96 @@ -996,7 +1012,7 @@ 刮削配置 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 472 + 477 @@ -1004,7 +1020,7 @@ 笔记 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 433 + 438 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1031,6 +1047,14 @@ 16 + + Industrials + Industrials + + libs/ui/src/lib/i18n.ts + 93 + + Add Manually 手动添加 @@ -1059,6 +1083,14 @@ 119 + + Consumer Cyclical + Consumer Cyclical + + libs/ui/src/lib/i18n.ts + 88 + + Do you really want to delete this coupon? 您确实要删除此优惠券吗? @@ -1196,11 +1228,11 @@ 网址 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 420 + 425 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 551 + 556 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -1216,7 +1248,7 @@ 资产概况已保存 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 618 + 624 @@ -1224,7 +1256,7 @@ 您真的要删除这个平台吗? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 111 + 115 @@ -1256,7 +1288,7 @@ 当前年份 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 209 + 212 @@ -1304,7 +1336,7 @@ 您真的要删除此标签吗? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 108 + 117 @@ -1328,7 +1360,7 @@ 您真的要删除该用户吗? apps/client/src/app/components/admin-users/admin-users.component.ts - 215 + 236 @@ -1344,7 +1376,7 @@ apps/client/src/app/components/header/header.component.html - 231 + 235 @@ -1396,11 +1428,11 @@ 无法验证表单 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 594 + 600 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 597 + 603 @@ -1424,15 +1456,15 @@ 投资组合 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 140 + 143 apps/client/src/app/components/header/header.component.html - 44 + 45 apps/client/src/app/components/header/header.component.html - 257 + 261 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -1448,11 +1480,11 @@ 基准 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 379 + 384 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 152 + 155 @@ -1468,7 +1500,7 @@ 关于 Ghostfolio apps/client/src/app/components/header/header.component.html - 322 + 327 apps/client/src/app/pages/about/overview/about-overview-page.html @@ -1480,11 +1512,11 @@ 登入 apps/client/src/app/components/header/header.component.html - 421 + 426 apps/client/src/app/components/header/header.component.ts - 296 + 305 apps/client/src/app/components/login-with-access-token-dialog/login-with-access-token-dialog.html @@ -1504,11 +1536,11 @@ 哎呀!安全令牌不正确。 apps/client/src/app/components/header/header.component.ts - 311 + 320 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 152 + 164 apps/client/src/app/components/user-account-settings/user-account-settings.component.ts @@ -1528,7 +1560,7 @@ 恐惧 apps/client/src/app/components/home-market/home-market.component.ts - 41 + 46 apps/client/src/app/components/markets/markets.component.ts @@ -1536,7 +1568,7 @@ libs/ui/src/lib/i18n.ts - 108 + 81 @@ -1544,7 +1576,7 @@ 贪婪 apps/client/src/app/components/home-market/home-market.component.ts - 42 + 47 apps/client/src/app/components/markets/markets.component.ts @@ -1552,7 +1584,7 @@ libs/ui/src/lib/i18n.ts - 109 + 82 @@ -1652,7 +1684,7 @@ 当前周 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 201 + 204 @@ -1771,6 +1803,14 @@ 46 + + Energy + Energy + + libs/ui/src/lib/i18n.ts + 90 + + Stay signed in 保持登录 @@ -1932,7 +1972,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 69 + 74 @@ -1940,7 +1980,7 @@ 报告数据故障 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 452 + 457 @@ -2088,7 +2128,7 @@ 升级计划 apps/client/src/app/components/header/header.component.html - 193 + 197 apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html @@ -2128,7 +2168,7 @@ 年初至今 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 209 + 212 libs/ui/src/lib/assistant/assistant.component.ts @@ -2140,7 +2180,7 @@ 1年 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 213 + 216 libs/ui/src/lib/assistant/assistant.component.ts @@ -2152,7 +2192,7 @@ 5年 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 217 + 220 libs/ui/src/lib/assistant/assistant.component.ts @@ -2172,7 +2212,7 @@ 最大限度 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 221 + 224 libs/ui/src/lib/assistant/assistant.component.ts @@ -2219,6 +2259,14 @@ 174 + + Consumer Defensive + Consumer Defensive + + libs/ui/src/lib/i18n.ts + 89 + + Coupon code has been redeemed 优惠券代码已被兑换 @@ -2291,6 +2339,14 @@ 279 + + Utilities + Utilities + + libs/ui/src/lib/i18n.ts + 97 + + Presenter View 演示者视图 @@ -2328,7 +2384,7 @@ 语言环境 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 510 + 515 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -2456,7 +2512,7 @@ 此功能目前无法使用。 apps/client/src/app/core/http-response.interceptor.ts - 55 + 52 @@ -2464,15 +2520,15 @@ 请稍后再试。 apps/client/src/app/core/http-response.interceptor.ts - 57 + 54 apps/client/src/app/core/http-response.interceptor.ts - 88 + 85 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 191 + 192 @@ -2480,11 +2536,11 @@ 哎呀!出了些问题。 apps/client/src/app/core/http-response.interceptor.ts - 86 + 83 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 189 + 190 @@ -2496,11 +2552,11 @@ apps/client/src/app/core/http-response.interceptor.ts - 89 + 86 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 192 + 193 @@ -2512,11 +2568,11 @@ apps/client/src/app/components/header/header.component.html - 124 + 125 apps/client/src/app/components/header/header.component.html - 370 + 375 apps/client/src/app/pages/about/overview/about-overview-page.routes.ts @@ -2620,15 +2676,15 @@ apps/client/src/app/components/header/header.component.html - 58 + 59 apps/client/src/app/components/header/header.component.html - 267 + 271 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 378 + 383 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2652,7 +2708,7 @@ 糟糕,现金余额转账失败。 apps/client/src/app/pages/accounts/accounts-page.component.ts - 341 + 337 @@ -2708,11 +2764,11 @@ 管理 apps/client/src/app/components/header/header.component.html - 74 + 75 apps/client/src/app/components/header/header.component.html - 287 + 291 libs/common/src/lib/routes/routes.ts @@ -2724,7 +2780,7 @@ 市场数据 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 400 + 405 libs/common/src/lib/routes/routes.ts @@ -2776,7 +2832,7 @@ apps/client/src/app/components/header/header.component.html - 247 + 251 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2916,11 +2972,11 @@ 无法解析抓取器配置 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 545 + 551 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 548 + 554 @@ -2976,7 +3032,7 @@ apps/client/src/app/components/header/header.component.html - 356 + 361 apps/client/src/app/pages/features/features-page.html @@ -3096,7 +3152,7 @@ 立即开始 apps/client/src/app/components/header/header.component.html - 432 + 437 apps/client/src/app/pages/features/features-page.html @@ -3168,7 +3224,7 @@ 市场 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 381 + 386 apps/client/src/app/components/footer/footer.component.html @@ -3176,7 +3232,7 @@ apps/client/src/app/components/header/header.component.html - 403 + 408 apps/client/src/app/components/home-market/home-market.html @@ -3339,6 +3395,14 @@ 149 + + Basic Materials + Basic Materials + + libs/ui/src/lib/i18n.ts + 86 + + Use Ghostfolio anonymously and own your financial data. 匿名使用 Ghostfolio 并拥有您的财务数据。 @@ -3692,7 +3756,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 342 + 347 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -3804,7 +3868,7 @@ 导入活动记录 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 93 + 94 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3820,7 +3884,7 @@ 导入股息 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 132 + 133 libs/ui/src/lib/activities-table/activities-table.component.html @@ -3836,7 +3900,7 @@ 正在导入数据... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 171 + 172 @@ -3844,7 +3908,7 @@ 导入已完成 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 181 + 182 @@ -3860,7 +3924,7 @@ 验证数据... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts - 291 + 293 @@ -4044,7 +4108,7 @@ libs/ui/src/lib/i18n.ts - 16 + 18 @@ -4160,11 +4224,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 75 + 78 libs/ui/src/lib/i18n.ts - 37 + 39 @@ -4188,7 +4252,7 @@ 每月 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 90 + 92 @@ -4196,7 +4260,7 @@ 每年 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 91 + 93 @@ -4212,7 +4276,7 @@ 底部 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 352 + 354 @@ -4220,7 +4284,7 @@ 投资组合演变 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 405 + 409 @@ -4228,7 +4292,7 @@ 投资时间表 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 434 + 438 @@ -4236,7 +4300,7 @@ 当前连胜 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 455 + 459 @@ -4244,7 +4308,7 @@ 最长连续纪录 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 464 + 468 @@ -4252,7 +4316,7 @@ 股息时间表 apps/client/src/app/pages/portfolio/analysis/analysis-page.html - 493 + 497 @@ -4280,15 +4344,15 @@ apps/client/src/app/components/header/header.component.html - 105 + 106 apps/client/src/app/components/header/header.component.html - 309 + 314 apps/client/src/app/components/header/header.component.html - 384 + 389 apps/client/src/app/pages/pricing/pricing-page.routes.ts @@ -4452,7 +4516,7 @@ 更新计划 apps/client/src/app/components/header/header.component.html - 191 + 195 apps/client/src/app/components/user-account-membership/user-account-membership.html @@ -4476,11 +4540,11 @@ 无法保存资产概况 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 628 + 634 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 631 + 637 @@ -4851,10 +4915,6 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts 58 - - libs/ui/src/lib/i18n.ts - 99 - Global @@ -4865,7 +4925,7 @@ libs/ui/src/lib/i18n.ts - 17 + 19 @@ -4877,11 +4937,11 @@ apps/client/src/app/components/header/header.component.html - 88 + 89 apps/client/src/app/components/header/header.component.html - 297 + 301 apps/client/src/app/pages/resources/overview/resources-overview.component.html @@ -4929,7 +4989,7 @@ 我的 Ghostfolio apps/client/src/app/components/header/header.component.html - 276 + 280 apps/client/src/app/pages/user-account/user-account-page.routes.ts @@ -5041,7 +5101,7 @@ 50 天趋势 libs/ui/src/lib/benchmark/benchmark.component.html - 32 + 43 @@ -5049,7 +5109,7 @@ 200天趋势 libs/ui/src/lib/benchmark/benchmark.component.html - 61 + 72 @@ -5065,7 +5125,7 @@ 上次历史最高纪录 libs/ui/src/lib/benchmark/benchmark.component.html - 90 + 101 @@ -5073,7 +5133,7 @@ 较历史最高纪录涨跌 libs/ui/src/lib/benchmark/benchmark.component.html - 117 + 128 @@ -5089,7 +5149,7 @@ 从 ATH libs/ui/src/lib/benchmark/benchmark.component.html - 119 + 130 @@ -5097,7 +5157,7 @@ Loan libs/ui/src/lib/i18n.ts - 58 + 60 @@ -5157,7 +5217,7 @@ libs/ui/src/lib/i18n.ts - 39 + 41 @@ -5177,7 +5237,7 @@ libs/ui/src/lib/holdings-table/holdings-table.component.html - 117 + 122 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5193,7 +5253,7 @@ 显示所有 libs/ui/src/lib/holdings-table/holdings-table.component.html - 212 + 217 @@ -5209,7 +5269,7 @@ libs/ui/src/lib/i18n.ts - 4 + 6 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html @@ -5221,7 +5281,7 @@ 亚太 libs/ui/src/lib/i18n.ts - 5 + 7 @@ -5237,7 +5297,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 327 + 332 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -5249,11 +5309,11 @@ libs/ui/src/lib/i18n.ts - 6 + 8 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html - 64 + 65 @@ -5269,7 +5329,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 343 + 348 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -5281,7 +5341,7 @@ libs/ui/src/lib/i18n.ts - 7 + 9 @@ -5289,7 +5349,7 @@ 核心 libs/ui/src/lib/i18n.ts - 10 + 12 @@ -5297,7 +5357,7 @@ 轻松切换到 Ghostfolio Premium 或 Ghostfolio Open Source libs/ui/src/lib/i18n.ts - 12 + 14 @@ -5305,7 +5365,7 @@ 轻松切换到 Ghostfolio Premium libs/ui/src/lib/i18n.ts - 13 + 15 @@ -5321,7 +5381,7 @@ libs/ui/src/lib/i18n.ts - 15 + 17 @@ -5329,7 +5389,7 @@ 授予 libs/ui/src/lib/i18n.ts - 18 + 20 @@ -5337,7 +5397,7 @@ 风险较高 libs/ui/src/lib/i18n.ts - 19 + 21 @@ -5345,15 +5405,7 @@ 这项活动已经存在。 libs/ui/src/lib/i18n.ts - 20 - - - - Japan - 日本 - - libs/ui/src/lib/i18n.ts - 92 + 22 @@ -5361,7 +5413,7 @@ 降低风险 libs/ui/src/lib/i18n.ts - 21 + 23 @@ -5369,7 +5421,7 @@ libs/ui/src/lib/i18n.ts - 22 + 24 @@ -5377,7 +5429,7 @@ 几个月 libs/ui/src/lib/i18n.ts - 23 + 25 @@ -5385,11 +5437,15 @@ 其他 libs/ui/src/lib/i18n.ts - 24 + 26 + + + libs/ui/src/lib/i18n.ts + 94 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 451 + 449 @@ -5397,7 +5453,7 @@ 预设 libs/ui/src/lib/i18n.ts - 26 + 28 @@ -5405,7 +5461,7 @@ No Activities apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 145 + 150 @@ -5413,7 +5469,7 @@ 退休金 libs/ui/src/lib/i18n.ts - 27 + 29 @@ -5421,7 +5477,7 @@ 卫星 libs/ui/src/lib/i18n.ts - 28 + 30 @@ -5445,11 +5501,11 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 314 + 319 libs/ui/src/lib/i18n.ts - 29 + 31 @@ -5457,11 +5513,11 @@ 标签 libs/ui/src/lib/i18n.ts - 30 + 32 libs/ui/src/lib/portfolio-filter-form/portfolio-filter-form.component.html - 53 + 54 @@ -5469,7 +5525,7 @@ libs/ui/src/lib/i18n.ts - 31 + 33 @@ -5489,7 +5545,7 @@ libs/ui/src/lib/i18n.ts - 32 + 34 @@ -5509,7 +5565,7 @@ libs/ui/src/lib/i18n.ts - 36 + 38 @@ -5525,7 +5581,7 @@ libs/ui/src/lib/i18n.ts - 38 + 40 @@ -5533,7 +5589,7 @@ 贵重物品 libs/ui/src/lib/i18n.ts - 42 + 44 @@ -5541,7 +5597,7 @@ 负债 libs/ui/src/lib/i18n.ts - 40 + 42 @@ -5553,7 +5609,7 @@ libs/ui/src/lib/i18n.ts - 41 + 43 @@ -5565,7 +5621,7 @@ libs/ui/src/lib/i18n.ts - 54 + 56 @@ -5573,7 +5629,7 @@ 商品 libs/ui/src/lib/i18n.ts - 46 + 48 @@ -5585,7 +5641,7 @@ libs/ui/src/lib/i18n.ts - 47 + 49 @@ -5593,7 +5649,7 @@ 固定收益 libs/ui/src/lib/i18n.ts - 48 + 50 @@ -5601,7 +5657,11 @@ 房地产 libs/ui/src/lib/i18n.ts - 50 + 52 + + + libs/ui/src/lib/i18n.ts + 95 @@ -5617,7 +5677,7 @@ 债券 libs/ui/src/lib/i18n.ts - 53 + 55 @@ -5625,7 +5685,7 @@ 加密货币 libs/ui/src/lib/i18n.ts - 56 + 58 @@ -5633,7 +5693,7 @@ 交易所交易基金 libs/ui/src/lib/i18n.ts - 57 + 59 @@ -5641,7 +5701,7 @@ 共同基金 libs/ui/src/lib/i18n.ts - 59 + 61 @@ -5649,7 +5709,7 @@ 贵金属 libs/ui/src/lib/i18n.ts - 60 + 62 @@ -5657,7 +5717,7 @@ 私募股权 libs/ui/src/lib/i18n.ts - 61 + 63 @@ -5665,7 +5725,7 @@ 股票 libs/ui/src/lib/i18n.ts - 62 + 64 @@ -5673,7 +5733,7 @@ 非洲 libs/ui/src/lib/i18n.ts - 69 + 71 @@ -5681,7 +5741,15 @@ 亚洲 libs/ui/src/lib/i18n.ts - 70 + 72 + + + + Communication Services + Communication Services + + libs/ui/src/lib/i18n.ts + 87 @@ -5689,7 +5757,7 @@ 欧洲 libs/ui/src/lib/i18n.ts - 71 + 73 @@ -5697,7 +5765,7 @@ 北美 libs/ui/src/lib/i18n.ts - 72 + 74 @@ -5713,7 +5781,7 @@ 大洋洲 libs/ui/src/lib/i18n.ts - 73 + 75 @@ -5721,7 +5789,7 @@ 南美洲 libs/ui/src/lib/i18n.ts - 74 + 76 @@ -5729,7 +5797,7 @@ 极度恐惧 libs/ui/src/lib/i18n.ts - 106 + 79 @@ -5737,7 +5805,7 @@ 极度贪婪 libs/ui/src/lib/i18n.ts - 107 + 80 @@ -5745,7 +5813,7 @@ 中性的 libs/ui/src/lib/i18n.ts - 110 + 83 @@ -5781,15 +5849,15 @@ libs/ui/src/lib/benchmark/benchmark.component.html - 209 + 220 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 453 + 451 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 467 + 465 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5817,7 +5885,7 @@ 当前市场价格为 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 743 + 749 @@ -5825,7 +5893,7 @@ 测试 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 569 + 574 @@ -5833,15 +5901,7 @@ 哎呀!无法授予访问权限。 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 144 - - - - Argentina - 阿根廷 - - libs/ui/src/lib/i18n.ts - 78 + 151 @@ -5889,7 +5949,7 @@ 市场数据延迟 apps/client/src/app/components/portfolio-performance/portfolio-performance.component.ts - 94 + 92 @@ -5905,7 +5965,7 @@ 关闭持仓 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 442 + 447 @@ -5929,11 +5989,11 @@ apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 80 + 82 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 96 + 98 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -5993,7 +6053,7 @@ 本月至今 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 205 + 208 libs/ui/src/lib/assistant/assistant.component.ts @@ -6005,7 +6065,7 @@ 本周至今 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 201 + 204 libs/ui/src/lib/assistant/assistant.component.ts @@ -6045,7 +6105,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 213 + 216 apps/client/src/app/pages/resources/personal-finance-tools/product-page.html @@ -6065,7 +6125,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 217 + 220 libs/ui/src/lib/assistant/assistant.component.ts @@ -6110,7 +6170,7 @@ 数据收集 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 592 + 597 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6150,7 +6210,7 @@ 哎呀!看来您提出了太多要求。请慢一点。 apps/client/src/app/core/http-response.interceptor.ts - 106 + 103 @@ -6177,14 +6237,6 @@ 61 - - Indonesia - 印度尼西亚 - - libs/ui/src/lib/i18n.ts - 90 - - Activity 活动 @@ -6222,7 +6274,7 @@ 不允许执行此操作。 apps/client/src/app/core/http-response.interceptor.ts - 67 + 64 @@ -6230,7 +6282,7 @@ 流动性 libs/ui/src/lib/i18n.ts - 49 + 51 @@ -6246,7 +6298,7 @@ 买入和卖出 libs/ui/src/lib/i18n.ts - 8 + 10 @@ -6326,7 +6378,7 @@ 包含在 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 377 + 382 @@ -6350,7 +6402,7 @@ 基准 apps/client/src/app/components/admin-market-data/admin-market-data.component.ts - 125 + 130 @@ -6366,7 +6418,7 @@ 您确定要删除这些配置文件吗? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 68 + 59 @@ -6374,7 +6426,7 @@ 哎呀!无法删除配置文件。 apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 56 + 47 @@ -6573,38 +6625,6 @@ 100 - - Australia - 澳大利亚 - - libs/ui/src/lib/i18n.ts - 79 - - - - Austria - 奥地利 - - libs/ui/src/lib/i18n.ts - 80 - - - - Belgium - 比利时 - - libs/ui/src/lib/i18n.ts - 81 - - - - Bulgaria - 保加利亚 - - libs/ui/src/lib/i18n.ts - 83 - - View Holding 查看持仓 @@ -6613,124 +6633,12 @@ 474 - - Canada - 加拿大 - - libs/ui/src/lib/i18n.ts - 84 - - - - Czech Republic - 捷克共和国 - - libs/ui/src/lib/i18n.ts - 85 - - - - Finland - 芬兰 - - libs/ui/src/lib/i18n.ts - 86 - - - - France - 法国 - - libs/ui/src/lib/i18n.ts - 87 - - - - Germany - 德国 - - libs/ui/src/lib/i18n.ts - 88 - - - - India - 印度 - - libs/ui/src/lib/i18n.ts - 89 - - - - Italy - 意大利 - - libs/ui/src/lib/i18n.ts - 91 - - - - Netherlands - 荷兰 - - libs/ui/src/lib/i18n.ts - 93 - - - - New Zealand - 新西兰 - - libs/ui/src/lib/i18n.ts - 94 - - - - Poland - 波兰 - - libs/ui/src/lib/i18n.ts - 95 - - - - Romania - 罗马尼亚 - - libs/ui/src/lib/i18n.ts - 96 - - - - South Africa - 南非 - - libs/ui/src/lib/i18n.ts - 98 - - - - Thailand - 泰国 - - libs/ui/src/lib/i18n.ts - 100 - - - - United States - 美国 - - libs/ui/src/lib/i18n.ts - 103 - - Error 错误 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 734 + 740 @@ -6754,7 +6662,7 @@ 哎呀!无法更新访问权限。 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.component.ts - 181 + 194 @@ -6782,7 +6690,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 597 + 602 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6826,7 +6734,7 @@ libs/ui/src/lib/i18n.ts - 9 + 11 @@ -6834,7 +6742,7 @@ 关闭 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 599 + 604 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6874,7 +6782,7 @@ libs/ui/src/lib/i18n.ts - 11 + 13 @@ -6890,7 +6798,7 @@ libs/ui/src/lib/i18n.ts - 33 + 35 @@ -7041,6 +6949,14 @@ 174 + + Financial Services + Financial Services + + libs/ui/src/lib/i18n.ts + 91 + + to use our referral link and get a Ghostfolio Premium membership for one year 使用我们的推荐链接并获得一年的Ghostfolio Premium会员资格 @@ -7158,15 +7074,7 @@ 获取来自 50 多个交易所的 80,000+ 股票代码访问权限 libs/ui/src/lib/i18n.ts - 25 - - - - Ukraine - 乌克兰 - - libs/ui/src/lib/i18n.ts - 101 + 27 @@ -7372,7 +7280,7 @@ 保存 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 608 + 613 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7420,11 +7328,11 @@ apps/client/src/app/components/header/header.component.html - 213 + 217 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 250 + 254 @@ -7464,7 +7372,7 @@ AI 提示已复制到剪贴板 apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 199 + 211 @@ -7480,7 +7388,7 @@ 延迟 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 235 + 239 @@ -7488,7 +7396,7 @@ 即时 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 239 + 243 @@ -7496,7 +7404,7 @@ 默认市场价格 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 482 + 487 @@ -7504,7 +7412,7 @@ 模式 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 519 + 524 @@ -7512,7 +7420,7 @@ 选择器 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 535 + 540 @@ -7520,7 +7428,7 @@ HTTP 请求标头 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 495 + 500 @@ -7528,7 +7436,7 @@ 收盘 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 235 + 239 @@ -7536,7 +7444,7 @@ 实时 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 239 + 243 @@ -7544,7 +7452,7 @@ 打开 Duck.ai apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts - 200 + 212 @@ -7560,7 +7468,7 @@ 涨跌 libs/ui/src/lib/holdings-table/holdings-table.component.html - 138 + 143 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7576,11 +7484,11 @@ apps/client/src/app/components/home-overview/home-overview.component.ts - 52 + 53 libs/ui/src/lib/holdings-table/holdings-table.component.html - 161 + 166 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -7623,30 +7531,6 @@ 94 - - Armenia - 亚美尼亚 - - libs/ui/src/lib/i18n.ts - 77 - - - - British Virgin Islands - 英属维尔京群岛 - - libs/ui/src/lib/i18n.ts - 82 - - - - Singapore - 新加坡 - - libs/ui/src/lib/i18n.ts - 97 - - Terms and Conditions 条款和条件 @@ -7692,11 +7576,11 @@ 安全令牌 apps/client/src/app/components/admin-users/admin-users.component.ts - 235 + 256 apps/client/src/app/components/user-account-access/user-account-access.component.ts - 167 + 179 @@ -7704,7 +7588,7 @@ 您确定要为此用户生成新的安全令牌吗? apps/client/src/app/components/admin-users/admin-users.component.ts - 240 + 261 @@ -7715,14 +7599,6 @@ 239 - - United Kingdom - 英国 - - libs/ui/src/lib/i18n.ts - 102 - - Terms of Service 服务条款 @@ -7769,7 +7645,7 @@ () 已在使用中。 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 675 + 681 @@ -7777,7 +7653,7 @@ 在更新到 () 时发生错误。 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 683 + 689 @@ -7841,7 +7717,7 @@ 某人 apps/client/src/app/pages/public/public-page.component.ts - 62 + 63 @@ -7873,7 +7749,7 @@ 您确定要删除此项目吗? libs/ui/src/lib/benchmark/benchmark.component.ts - 137 + 141 @@ -7881,7 +7757,7 @@ 登出 apps/client/src/app/components/header/header.component.html - 325 + 330 @@ -8128,7 +8004,7 @@ 当前月份 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts - 205 + 208 @@ -8293,7 +8169,7 @@ 您真的想要生成一个新的安全令牌吗? apps/client/src/app/components/user-account-access/user-account-access.component.ts - 172 + 184 @@ -8349,7 +8225,7 @@ 管理资产概况 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 467 + 472 @@ -8357,7 +8233,7 @@ 另类投资 libs/ui/src/lib/i18n.ts - 45 + 47 @@ -8365,7 +8241,7 @@ 收藏品 libs/ui/src/lib/i18n.ts - 55 + 57 @@ -8373,7 +8249,7 @@ 平均单位价格 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 113 + 117 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html From 5177a1ee785ef9842b23fd31563f420723a856aa Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 7 Jun 2026 09:12:03 +0200 Subject: [PATCH 15/74] Task/localize country names (part 2) (#6997) * Localize country names --- .../product-page.component.ts | 17 +- libs/common/src/lib/helper.ts | 2 +- libs/common/src/lib/personal-finance-tools.ts | 228 +++++++++--------- 3 files changed, 127 insertions(+), 120 deletions(-) diff --git a/apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts b/apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts index 14f9554d5..0dd14485f 100644 --- a/apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts +++ b/apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts @@ -1,3 +1,4 @@ +import { getCountryName } from '@ghostfolio/common/helper'; import { Product } from '@ghostfolio/common/interfaces'; import { personalFinanceTools } from '@ghostfolio/common/personal-finance-tools'; import { publicRoutes } from '@ghostfolio/common/routes/routes'; @@ -32,6 +33,7 @@ export class GfProductPageComponent implements OnInit { ) {} public ngOnInit() { + const locale = document.documentElement.lang; const { subscriptionOffer } = this.dataService.fetchInfo(); this.price = subscriptionOffer?.price; @@ -55,18 +57,23 @@ export class GfProductPageComponent implements OnInit { 'Türkçe' ], name: 'Ghostfolio', - origin: $localize`Switzerland`, + origin: getCountryName({ locale, code: 'CH' }), regions: [$localize`Global`], slogan: 'Open Source Wealth Management', useAnonymously: true }; - this.product2 = personalFinanceTools.find(({ key }) => { - return key === this.route.snapshot.data['key']; - }); + this.product2 = { + ...personalFinanceTools.find(({ key }) => { + return key === this.route.snapshot.data['key']; + }) + }; if (this.product2.origin) { - this.product2.origin = translate(this.product2.origin); + this.product2.origin = getCountryName({ + locale, + code: this.product2.origin + }); } if (this.product2.regions) { diff --git a/libs/common/src/lib/helper.ts b/libs/common/src/lib/helper.ts index db320c7cb..ce7fca518 100644 --- a/libs/common/src/lib/helper.ts +++ b/libs/common/src/lib/helper.ts @@ -264,7 +264,7 @@ export function getCountryName({ }: { code: string; locale?: string; -}) { +}): string { try { return new Intl.DisplayNames([locale], { type: 'region' }).of(code) ?? code; } catch { diff --git a/libs/common/src/lib/personal-finance-tools.ts b/libs/common/src/lib/personal-finance-tools.ts index 23697e63b..86cb1ca48 100644 --- a/libs/common/src/lib/personal-finance-tools.ts +++ b/libs/common/src/lib/personal-finance-tools.ts @@ -16,7 +16,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'allvue-systems', name: 'Allvue Systems', - origin: 'United States', + origin: 'US', slogan: 'Investment Software Suite', url: 'https://www.allvuesystems.com' }, @@ -33,7 +33,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'altoo', name: 'Altoo Wealth Platform', - origin: 'Switzerland', + origin: 'CH', slogan: 'Simplicity for Complex Wealth', url: 'https://altoo.io' }, @@ -43,7 +43,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'altruist', name: 'Altruist', - origin: 'United States', + origin: 'US', slogan: 'The wealth platform built for independent advisors', url: 'https://altruist.com' }, @@ -53,7 +53,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'amsflow', name: 'Amsflow Portfolio', - origin: 'Singapore', + origin: 'SG', pricingPerYear: '$228', slogan: 'Portfolio Visualizer', url: 'https://amsflow.com' @@ -65,7 +65,7 @@ export const personalFinanceTools: Product[] = [ key: 'anlage.app', languages: ['English'], name: 'Anlage.App', - origin: 'Austria', + origin: 'AT', pricingPerYear: '$120', slogan: 'Analyze and track your portfolio.', url: 'https://anlage.app' @@ -76,7 +76,7 @@ export const personalFinanceTools: Product[] = [ key: 'asseta', languages: ['English'], name: 'Asseta', - origin: 'United States', + origin: 'US', slogan: 'The Intelligent Family Office Suite', url: 'https://www.asseta.ai' }, @@ -84,7 +84,7 @@ export const personalFinanceTools: Product[] = [ founded: 2016, key: 'atominvest', name: 'Atominvest', - origin: 'United Kingdom', + origin: 'GB', slogan: 'Portfolio Management', url: 'https://www.atominvest.co' }, @@ -94,7 +94,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'balance-pro', name: 'Balance Pro', - origin: 'United States', + origin: 'US', pricingPerYear: '$47.99', slogan: 'The Smarter Way to Track Your Finances', url: 'https://www.balancepro.app' @@ -104,7 +104,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: true, key: 'banktivity', name: 'Banktivity', - origin: 'United States', + origin: 'US', pricingPerYear: '$59.99', slogan: 'Proactive money management app for macOS & iOS', url: 'https://www.banktivity.com' @@ -124,7 +124,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'beanvest', name: 'Beanvest', - origin: 'France', + origin: 'FR', pricingPerYear: '$100', slogan: 'Stock Portfolio Tracker for Smart Investors', url: 'https://beanvest.com' @@ -135,7 +135,7 @@ export const personalFinanceTools: Product[] = [ key: 'bluebudget', languages: ['Deutsch', 'English', 'Français', 'Italiano'], name: 'BlueBudget', - origin: 'Switzerland', + origin: 'CH', slogan: 'Schweizer Budget App für einfache & smarte Budgetplanung', url: 'https://www.bluebudget.ch' }, @@ -146,7 +146,7 @@ export const personalFinanceTools: Product[] = [ key: 'boldin', name: 'Boldin', note: 'Originally named as NewRetirement', - origin: 'United States', + origin: 'US', pricingPerYear: '$144', slogan: 'Take control with retirement planning tools that begin with you', url: 'https://www.boldin.com' @@ -154,7 +154,7 @@ export const personalFinanceTools: Product[] = [ { key: 'budgetpulse', name: 'BudgetPulse', - origin: 'United States', + origin: 'US', slogan: 'Giving life to your finance!', url: 'https://www.budgetpulse.com' }, @@ -164,7 +164,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'buxfer', name: 'Buxfer', - origin: 'United States', + origin: 'US', pricingPerYear: '$48', regions: ['Global'], slogan: 'Take control of your financial future', @@ -175,7 +175,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'capitally', name: 'Capitally', - origin: 'Poland', + origin: 'PL', pricingPerYear: '€80', slogan: 'Optimize your investments performance', url: 'https://www.mycapitally.com' @@ -185,7 +185,7 @@ export const personalFinanceTools: Product[] = [ isArchived: true, key: 'capmon', name: 'CapMon.org', - origin: 'Germany', + origin: 'DE', note: 'CapMon.org was discontinued in 2023', slogan: 'Next Generation Assets Tracking' }, @@ -202,7 +202,7 @@ export const personalFinanceTools: Product[] = [ founded: 2011, key: 'cobalt', name: 'Cobalt', - origin: 'United States', + origin: 'US', slogan: 'Next-Level Portfolio Monitoring', url: 'https://www.cobalt.pe' }, @@ -212,7 +212,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'coinstats', name: 'CoinStats', - origin: 'Armenia', + origin: 'AM', pricingPerYear: '$168', slogan: 'Manage All Your Wallets & Exchanges From One Place', url: 'https://coinstats.app' @@ -224,7 +224,7 @@ export const personalFinanceTools: Product[] = [ key: 'cointracking', languages: ['Deutsch', 'English'], name: 'CoinTracking', - origin: 'Germany', + origin: 'DE', pricingPerYear: '$120', slogan: 'The leading Crypto Portfolio Tracker & Tax Calculator', url: 'https://cointracking.info' @@ -233,7 +233,7 @@ export const personalFinanceTools: Product[] = [ founded: 2019, key: 'compound-planning', name: 'Compound Planning', - origin: 'United States', + origin: 'US', slogan: 'Modern Wealth & Investment Management', url: 'https://compoundplanning.com' }, @@ -243,7 +243,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'copilot-money', name: 'Copilot Money', - origin: 'United States', + origin: 'US', pricingPerYear: '$95', slogan: 'Do money better with Copilot', url: 'https://www.copilot.money' @@ -253,7 +253,7 @@ export const personalFinanceTools: Product[] = [ hasFreePlan: false, key: 'countabout', name: 'CountAbout', - origin: 'United States', + origin: 'US', pricingPerYear: '$9.99', slogan: 'Customizable and Secure Personal Finance App', url: 'https://countabout.com' @@ -263,7 +263,7 @@ export const personalFinanceTools: Product[] = [ hasFreePlan: false, key: 'danti', name: 'Danti', - origin: 'United Kingdom', + origin: 'GB', slogan: 'Digitising Generational Wealth', url: 'https://danti.io' }, @@ -282,7 +282,7 @@ export const personalFinanceTools: Product[] = [ key: 'defi-portfolio-tracker-by-zerion', languages: ['English'], name: 'DeFi Portfolio Tracker by Zerion', - origin: 'United States', + origin: 'US', pricingPerYear: '$99', slogan: 'DeFi Portfolio Tracker for All Chains', url: 'https://zerion.io/defi-portfolio-tracker' @@ -294,7 +294,7 @@ export const personalFinanceTools: Product[] = [ key: 'degiro-portfolio-tracker-by-capitalyse', languages: ['English'], name: 'DEGIRO Portfolio Tracker by Capitalyse', - origin: 'Netherlands', + origin: 'NL', pricingPerYear: '€24', slogan: 'Democratizing Data Analytics', url: 'https://capitalyse.app/app/degiro' @@ -306,7 +306,7 @@ export const personalFinanceTools: Product[] = [ key: 'delta', name: 'Delta Investment Tracker', note: 'Acquired by eToro', - origin: 'Belgium', + origin: 'BE', pricingPerYear: '$150', slogan: 'The app to track all your investments. Make smart moves only.', url: 'https://delta.app' @@ -328,7 +328,7 @@ export const personalFinanceTools: Product[] = [ key: 'divvydiary', languages: ['Deutsch', 'English'], name: 'DivvyDiary', - origin: 'Germany', + origin: 'DE', pricingPerYear: '€65', slogan: 'Your personal Dividend Calendar', url: 'https://divvydiary.com' @@ -339,7 +339,7 @@ export const personalFinanceTools: Product[] = [ key: 'empower', name: 'Empower', note: 'Originally named as Personal Capital', - origin: 'United States', + origin: 'US', slogan: 'Get answers to your money questions', url: 'https://www.empower.com' }, @@ -348,7 +348,7 @@ export const personalFinanceTools: Product[] = [ founded: 2022, key: 'eightfigures', name: '8FIGURES', - origin: 'United States', + origin: 'US', slogan: 'Portfolio Tracker Designed by Professional Investors', url: 'https://8figures.com' }, @@ -357,7 +357,7 @@ export const personalFinanceTools: Product[] = [ hasFreePlan: false, key: 'etops', name: 'etops', - origin: 'Switzerland', + origin: 'CH', slogan: 'Your financial superpower', url: 'https://www.etops.com' }, @@ -367,7 +367,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'exirio', name: 'Exirio', - origin: 'United States', + origin: 'US', pricingPerYear: '$100', slogan: 'All your wealth, in one place.', url: 'https://www.exirio.com' @@ -378,7 +378,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'fey', name: 'Fey', - origin: 'Canada', + origin: 'CA', pricingPerYear: '$300', slogan: 'Make better investments.', url: 'https://fey.com' @@ -390,7 +390,7 @@ export const personalFinanceTools: Product[] = [ key: 'fina', languages: ['English'], name: 'Fina', - origin: 'United States', + origin: 'US', pricingPerYear: '$115', slogan: 'Flexible Financial Management', url: 'https://www.fina.money' @@ -401,7 +401,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'finanzfluss-copilot', name: 'Finanzfluss Copilot', - origin: 'Germany', + origin: 'DE', pricingPerYear: '€69.99', slogan: 'Portfolio Tracker für dein Vermögen', url: 'https://www.finanzfluss.de/copilot' @@ -411,7 +411,7 @@ export const personalFinanceTools: Product[] = [ key: 'finary', languages: ['Deutsch', 'English', 'Français'], name: 'Finary', - origin: 'United States', + origin: 'US', slogan: 'Real-Time Portfolio Tracker & Stock Tracker', url: 'https://finary.com' }, @@ -422,7 +422,7 @@ export const personalFinanceTools: Product[] = [ key: 'finateka', languages: ['English'], name: 'FINATEKA', - origin: 'United States', + origin: 'US', slogan: 'The most convenient mobile application for personal finance accounting', url: 'https://finateka.com' @@ -431,7 +431,7 @@ export const personalFinanceTools: Product[] = [ founded: 2022, key: 'fincake', name: 'Fincake', - origin: 'British Virgin Islands', + origin: 'VG', slogan: 'Easy-to-use Portfolio Tracker', url: 'https://fincake.io' }, @@ -440,7 +440,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'finvest', name: 'Finvest', - origin: 'United States', + origin: 'US', slogan: 'Grow your wealth in a stress-free way', url: 'https://www.getfinvest.com' }, @@ -449,7 +449,7 @@ export const personalFinanceTools: Product[] = [ hasFreePlan: true, key: 'finwise', name: 'FinWise', - origin: 'South Africa', + origin: 'ZA', pricingPerYear: '€69.99', slogan: 'Personal finances, simplified', url: 'https://finwiseapp.io' @@ -461,7 +461,7 @@ export const personalFinanceTools: Product[] = [ key: 'firekit', languages: ['English', 'українська мова'], name: 'FIREkit', - origin: 'Ukraine', + origin: 'UA', pricingPerYear: '$40', slogan: 'A simple solution to track your wealth online', url: 'https://firekit.space' @@ -472,7 +472,7 @@ export const personalFinanceTools: Product[] = [ key: 'folishare', languages: ['Deutsch', 'English'], name: 'folishare', - origin: 'Austria', + origin: 'AT', pricingPerYear: '$65', slogan: 'Take control over your investments', url: 'https://www.folishare.com' @@ -490,7 +490,7 @@ export const personalFinanceTools: Product[] = [ 'Português' ], name: 'Gasti', - origin: 'Argentina', + origin: 'AR', pricingPerYear: '$60', regions: ['Global'], slogan: 'Take control of your finances from WhatsApp', @@ -503,7 +503,7 @@ export const personalFinanceTools: Product[] = [ key: 'getquin', languages: ['Deutsch', 'English'], name: 'getquin', - origin: 'Germany', + origin: 'DE', pricingPerYear: '€48', slogan: 'Portfolio Tracker, Analysis & Community', url: 'https://www.getquin.com' @@ -515,7 +515,7 @@ export const personalFinanceTools: Product[] = [ key: 'gospatz', name: 'goSPATZ', note: 'Renamed to Money Peak', - origin: 'Germany', + origin: 'DE', slogan: 'Volle Kontrolle über deine Investitionen' }, { @@ -525,7 +525,7 @@ export const personalFinanceTools: Product[] = [ key: 'gustav', languages: ['Français'], name: 'Gustav', - origin: 'France', + origin: 'FR', pricingPerYear: '€59.99', slogan: 'Prenez enfin le contrôle de votre argent', url: 'https://get-gustav.com' @@ -536,7 +536,7 @@ export const personalFinanceTools: Product[] = [ key: 'holistic-capital', languages: ['Deutsch'], name: 'Holistic', - origin: 'Germany', + origin: 'DE', slogan: 'Die All-in-One Lösung für dein Vermögen.', url: 'https://holistic.capital', useAnonymously: true @@ -546,7 +546,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'honeydue', name: 'Honeydue', - origin: 'United States', + origin: 'US', slogan: 'Finance App for Couples', url: 'https://www.honeydue.com' }, @@ -556,7 +556,7 @@ export const personalFinanceTools: Product[] = [ languages: ['English'], name: 'Income Reign', note: 'Income Reign was discontinued in 2025', - origin: 'United States', + origin: 'US', pricingPerYear: '$120' }, { @@ -566,7 +566,7 @@ export const personalFinanceTools: Product[] = [ key: 'intuit-mint', name: 'Intuit Mint', note: 'Intuit Mint was discontinued in 2023', - origin: 'United States', + origin: 'US', pricingPerYear: '$60', slogan: 'Managing money, made simple' }, @@ -575,7 +575,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'investify', name: 'Investify', - origin: 'Pakistan', + origin: 'PK', slogan: 'Advanced portfolio tracking and stock market information', url: 'https://www.investify.pk' }, @@ -586,7 +586,7 @@ export const personalFinanceTools: Product[] = [ key: 'invmon', name: 'InvMon', note: 'Originally named as A2PB', - origin: 'Switzerland', + origin: 'CH', pricingPerYear: '$156', slogan: 'Track all your assets, investments and portfolios in one place', url: 'https://invmon.com', @@ -598,7 +598,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'justetf', name: 'justETF', - origin: 'Germany', + origin: 'DE', pricingPerYear: '€119', slogan: 'ETF portfolios made simple', url: 'https://www.justetf.com' @@ -609,7 +609,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'koinly', name: 'Koinly', - origin: 'Singapore', + origin: 'SG', slogan: 'Track all your crypto wallets in one place', url: 'https://koinly.io' }, @@ -619,7 +619,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'koyfin', name: 'Koyfin', - origin: 'United States', + origin: 'US', pricingPerYear: '$468', slogan: 'Comprehensive financial data analysis', url: 'https://www.koyfin.com' @@ -630,7 +630,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'kubera', name: 'Kubera®', - origin: 'United States', + origin: 'US', pricingPerYear: '$249', slogan: 'The Time Machine for your Net Worth', url: 'https://www.kubera.com' @@ -641,7 +641,7 @@ export const personalFinanceTools: Product[] = [ key: 'leafs', languages: ['Deutsch', 'English'], name: 'Leafs', - origin: 'Switzerland', + origin: 'CH', slogan: 'Sustainability insights for wealth managers', url: 'https://leafs.ch' }, @@ -651,7 +651,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'magnifi', name: 'Magnifi', - origin: 'United States', + origin: 'US', pricingPerYear: '$132', slogan: 'AI Investing Assistant', url: 'https://magnifi.com' @@ -663,7 +663,7 @@ export const personalFinanceTools: Product[] = [ key: 'markets.sh', languages: ['English'], name: 'markets.sh', - origin: 'Germany', + origin: 'DE', pricingPerYear: '€168', regions: ['Global'], slogan: 'Track your investments', @@ -673,7 +673,7 @@ export const personalFinanceTools: Product[] = [ founded: 2010, key: 'masttro', name: 'Masttro', - origin: 'United States', + origin: 'US', slogan: 'Your platform for wealth in full view', url: 'https://masttro.com' }, @@ -687,7 +687,7 @@ export const personalFinanceTools: Product[] = [ languages: ['English'], name: 'Maybe Finance', note: 'Maybe Finance was discontinued in 2023, relaunched in 2024, and discontinued again in 2025', - origin: 'United States', + origin: 'US', pricingPerYear: '$145', regions: ['United States'], slogan: 'Your financial future, in your control', @@ -699,7 +699,7 @@ export const personalFinanceTools: Product[] = [ key: 'merlincrypto', languages: ['English'], name: 'Merlin', - origin: 'United States', + origin: 'US', pricingPerYear: '$204', regions: ['Canada', 'United States'], slogan: 'The smartest way to track your crypto', @@ -712,7 +712,7 @@ export const personalFinanceTools: Product[] = [ key: 'microsoft-money', name: 'Microsoft Money', note: 'Microsoft Money was discontinued in 2010', - origin: 'United States' + origin: 'US' }, { founded: 2019, @@ -720,7 +720,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'monarch-money', name: 'Monarch Money', - origin: 'United States', + origin: 'US', pricingPerYear: '$99.99', slogan: 'The modern way to manage your money', url: 'https://www.monarch.com' @@ -731,7 +731,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: true, key: 'moneydance', name: 'Moneydance', - origin: 'Scotland', + origin: 'GB', pricingPerYear: '$100', slogan: 'Personal Finance Manager for Mac, Windows, and Linux', url: 'https://moneydance.com' @@ -742,7 +742,7 @@ export const personalFinanceTools: Product[] = [ key: 'moneypeak', name: 'Money Peak', note: 'Originally named as goSPATZ', - origin: 'Germany', + origin: 'DE', slogan: 'Dein smarter Finance Assistant', url: 'https://moneypeak.ai' }, @@ -751,7 +751,7 @@ export const personalFinanceTools: Product[] = [ key: 'moneyspire', name: 'Moneyspire', note: 'License is a perpetual license', - origin: 'United States', + origin: 'US', pricingPerYear: '$59.99', slogan: 'Have total control of your financial life', url: 'https://www.moneyspire.com' @@ -759,7 +759,7 @@ export const personalFinanceTools: Product[] = [ { key: 'moneywiz', name: 'MoneyWiz', - origin: 'United States', + origin: 'US', pricingPerYear: '$29.99', slogan: 'Get money management superpowers', url: 'https://www.wiz.money' @@ -780,7 +780,7 @@ export const personalFinanceTools: Product[] = [ key: 'monsy', languages: ['English'], name: 'Monsy', - origin: 'Indonesia', + origin: 'ID', pricingPerYear: '$20', slogan: 'Smart, simple, stress-free money tracking.', url: 'https://www.monsy.app' @@ -791,7 +791,7 @@ export const personalFinanceTools: Product[] = [ key: 'morningstar-portfolio-manager', languages: ['English'], name: 'Morningstar® Portfolio Manager', - origin: 'United States', + origin: 'US', slogan: 'Track your equity, fund, investment trust, ETF and pension investments in one place.', url: 'https://www.morningstar.com/mm' @@ -812,7 +812,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'nansen', name: 'Crypto Portfolio Tracker by Nansen', - origin: 'Singapore', + origin: 'SG', pricingPerYear: '$1188', slogan: 'Your Complete Crypto Portfolio, Reimagined', url: 'https://www.nansen.ai/crypto-portfolio-tracker' @@ -823,7 +823,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'navexa', name: 'Navexa', - origin: 'Australia', + origin: 'AU', pricingPerYear: '$90', slogan: 'The Intelligent Portfolio Tracker', url: 'https://www.navexa.com' @@ -844,7 +844,7 @@ export const personalFinanceTools: Product[] = [ key: 'parqet', name: 'Parqet', note: 'Originally named as Tresor One', - origin: 'Germany', + origin: 'DE', pricingPerYear: '€99.99', regions: ['Austria', 'Germany', 'Switzerland'], slogan: 'Dein Vermögen immer im Blick', @@ -854,14 +854,14 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'peek', name: 'Peek', - origin: 'Singapore', + origin: 'SG', slogan: 'Feel in control of your money without spreadsheets or shame', url: 'https://peek.money' }, { key: 'pennies', name: 'Pennies', - origin: 'United States', + origin: 'US', pricingPerYear: '$39.99', slogan: 'Your money. Made simple.', url: 'https://www.getpennies.com' @@ -872,7 +872,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'pinklion', name: 'PinkLion', - origin: 'Germany', + origin: 'DE', pricingPerYear: '€50', slogan: 'Invest smarter, not harder', url: 'https://pinklion.xyz' @@ -884,7 +884,7 @@ export const personalFinanceTools: Product[] = [ key: 'plainzer', languages: ['English'], name: 'Plainzer', - origin: 'Poland', + origin: 'PL', pricingPerYear: '$74', slogan: 'Free dividend tracker for your portfolio', url: 'https://plainzer.com' @@ -894,7 +894,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'plannix', name: 'Plannix', - origin: 'Italy', + origin: 'IT', slogan: 'Your Personal Finance Hub', url: 'https://www.plannix.co' }, @@ -904,7 +904,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'pocketguard', name: 'PocketGuard', - origin: 'United States', + origin: 'US', pricingPerYear: '$74.99', slogan: 'Budgeting App & Finance Planner', url: 'https://pocketguard.com' @@ -916,7 +916,7 @@ export const personalFinanceTools: Product[] = [ key: 'pocketsmith', languages: ['English'], name: 'PocketSmith', - origin: 'New Zealand', + origin: 'NZ', pricingPerYear: '$120', regions: ['Global'], slogan: 'Know where your money is going', @@ -928,7 +928,7 @@ export const personalFinanceTools: Product[] = [ key: 'portfolio-dividend-tracker', languages: ['English', 'Nederlands'], name: 'Portfolio Dividend Tracker', - origin: 'Netherlands', + origin: 'NL', pricingPerYear: '€60', slogan: 'Manage all your portfolios', url: 'https://portfoliodividendtracker.com' @@ -959,7 +959,7 @@ export const personalFinanceTools: Product[] = [ key: 'portseido', languages: ['Deutsch', 'English', 'Français', 'Nederlands'], name: 'Portseido', - origin: 'Thailand', + origin: 'TH', pricingPerYear: '$96', slogan: 'Portfolio Performance and Dividend Tracker', url: 'https://www.portseido.com' @@ -970,7 +970,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: true, key: 'projectionlab', name: 'ProjectionLab', - origin: 'United States', + origin: 'US', pricingPerYear: '$108', slogan: 'Build Financial Plans You Love.', url: 'https://projectionlab.com' @@ -981,7 +981,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'prostocktracker', name: 'Pro Stock Tracker', - origin: 'United Kingdom', + origin: 'GB', pricingPerYear: '$60', slogan: 'The stock portfolio tracker built for long-term investors', url: 'https://prostocktracker.com' @@ -1002,7 +1002,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'rocket-money', name: 'Rocket Money', - origin: 'United States', + origin: 'US', slogan: 'Track your net worth', url: 'https://www.rocketmoney.com' }, @@ -1013,7 +1013,7 @@ export const personalFinanceTools: Product[] = [ key: 'sarmaaya.pk', name: 'Sarmaaya.pk Portfolio Tracking', note: 'Sarmaaya.pk Portfolio Tracking was discontinued in 2024', - origin: 'Pakistan', + origin: 'PK', slogan: 'Unified platform for financial research and portfolio tracking' }, { @@ -1022,7 +1022,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'seeking-alpha', name: 'Seeking Alpha', - origin: 'United States', + origin: 'US', pricingPerYear: '$239', slogan: 'Stock Market Analysis & Tools for Investors', url: 'https://seekingalpha.com' @@ -1031,7 +1031,7 @@ export const personalFinanceTools: Product[] = [ founded: 2022, key: 'segmio', name: 'Segmio', - origin: 'Romania', + origin: 'RO', slogan: 'Wealth Management and Net Worth Tracking', url: 'https://www.segmio.com' }, @@ -1041,7 +1041,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'sharesight', name: 'Sharesight', - origin: 'New Zealand', + origin: 'NZ', pricingPerYear: '$135', regions: ['Global'], slogan: 'Stock Portfolio Tracker', @@ -1060,7 +1060,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'simple-portfolio', name: 'Simple Portfolio', - origin: 'Czech Republic', + origin: 'CZ', pricingPerYear: '€80', slogan: 'Stock Portfolio Tracker', url: 'https://simpleportfolio.app' @@ -1071,7 +1071,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'simply-wallstreet', name: 'Stock Portfolio Tracker & Visualizer by Simply Wall St', - origin: 'Australia', + origin: 'AU', pricingPerYear: '$120', slogan: 'Smart portfolio tracker for informed investors', url: 'https://simplywall.st' @@ -1082,7 +1082,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'snowball-analytics', name: 'Snowball Analytics', - origin: 'France', + origin: 'FR', pricingPerYear: '$80', slogan: 'Simple and powerful portfolio tracker', url: 'https://snowball-analytics.com' @@ -1090,7 +1090,7 @@ export const personalFinanceTools: Product[] = [ { key: 'splashmoney', name: 'SplashMoney', - origin: 'United States', + origin: 'US', slogan: 'Manage your money anytime, anywhere.' }, { @@ -1098,14 +1098,14 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'stock-events', name: 'Stock Events', - origin: 'Germany', + origin: 'DE', slogan: 'Track all your Investments', url: 'https://stockevents.app' }, { key: 'stockle', name: 'Stockle', - origin: 'Finland', + origin: 'FI', slogan: 'Supercharge your investments tracking experience', url: 'https://stockle.app' }, @@ -1114,7 +1114,7 @@ export const personalFinanceTools: Product[] = [ isArchived: true, key: 'stockmarketeye', name: 'StockMarketEye', - origin: 'France', + origin: 'FR', note: 'StockMarketEye was discontinued in 2023', slogan: 'A Powerful Portfolio & Investment Tracking App' }, @@ -1124,7 +1124,7 @@ export const personalFinanceTools: Product[] = [ key: 'stock-rover', languages: ['English'], name: 'Stock Rover', - origin: 'United States', + origin: 'US', pricingPerYear: '$79.99', slogan: 'Investment Research and Portfolio Management', url: 'https://www.stockrover.com' @@ -1135,7 +1135,7 @@ export const personalFinanceTools: Product[] = [ key: 'stonksfolio', languages: ['English'], name: 'Stonksfolio', - origin: 'Bulgaria', + origin: 'BG', pricingPerYear: '€49.90', slogan: 'Visualize all of your portfolios', url: 'https://stonksfolio.com' @@ -1145,7 +1145,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'sumio', name: 'Sumio', - origin: 'Czech Republic', + origin: 'CZ', pricingPerYear: '$20', slogan: 'Sum up and build your wealth.', url: 'https://www.sumio.app' @@ -1155,7 +1155,7 @@ export const personalFinanceTools: Product[] = [ hasFreePlan: false, key: 'tiller', name: 'Tiller', - origin: 'United States', + origin: 'US', pricingPerYear: '$79', slogan: 'Your financial life in a spreadsheet, automatically updated each day', @@ -1167,7 +1167,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'tradervue', name: 'Tradervue', - origin: 'United States', + origin: 'US', pricingPerYear: '$360', slogan: 'The Trading Journal to Improve Your Trading Performance', url: 'https://www.tradervue.com' @@ -1199,7 +1199,7 @@ export const personalFinanceTools: Product[] = [ key: 'tresor-one', name: 'Tresor One', note: 'Renamed to Parqet', - origin: 'Germany', + origin: 'DE', regions: ['Austria', 'Germany', 'Switzerland'], slogan: 'Dein Vermögen immer im Blick' }, @@ -1209,7 +1209,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'turbobulls', name: 'Turbobulls', - origin: 'Romania', + origin: 'RO', pricingPerYear: '€39.99', slogan: 'Your complete financial dashboard. Actually private.', url: 'https://www.turbobulls.com' @@ -1220,7 +1220,7 @@ export const personalFinanceTools: Product[] = [ key: 'utluna', languages: ['Deutsch', 'English', 'Français'], name: 'Utluna', - origin: 'Switzerland', + origin: 'CH', pricingPerYear: '$300', slogan: 'Your Portfolio. Revealed.', url: 'https://www.utluna.com', @@ -1231,7 +1231,7 @@ export const personalFinanceTools: Product[] = [ hasFreePlan: true, key: 'vyzer', name: 'Vyzer', - origin: 'United States', + origin: 'US', pricingPerYear: '$348', slogan: 'Virtual Family Office for Smart Wealth Management', url: 'https://vyzer.co' @@ -1242,7 +1242,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'walletguide', name: 'Walletguide', - origin: 'Germany', + origin: 'DE', pricingPerYear: '€90', slogan: 'Personal finance reimagined with AI', url: 'https://walletguide.com' @@ -1254,7 +1254,7 @@ export const personalFinanceTools: Product[] = [ languages: ['English'], name: 'wallmine', note: 'wallmine was discontinued in 2024', - origin: 'Czech Republic', + origin: 'CZ', pricingPerYear: '$600', slogan: 'Make Smarter Investments' }, @@ -1264,7 +1264,7 @@ export const personalFinanceTools: Product[] = [ key: 'wealthbrain', languages: ['English'], name: 'Wealthbrain', - origin: 'United Arab Emirates', + origin: 'AE', slogan: 'Portfolio Management System', url: 'https://wealthbrain.com' }, @@ -1276,7 +1276,7 @@ export const personalFinanceTools: Product[] = [ key: 'wealthfolio', languages: ['English'], name: 'Wealthfolio', - origin: 'Canada', + origin: 'CA', slogan: 'Desktop Investment Tracker', url: 'https://wealthfolio.app' }, @@ -1287,7 +1287,7 @@ export const personalFinanceTools: Product[] = [ key: 'wealthica', languages: ['English', 'Français'], name: 'Wealthica', - origin: 'Canada', + origin: 'CA', pricingPerYear: '$50', slogan: 'See all your investments in one place', url: 'https://wealthica.com' @@ -1307,14 +1307,14 @@ export const personalFinanceTools: Product[] = [ key: 'wealthy-tracker', languages: ['English'], name: 'Wealthy Tracker', - origin: 'India', + origin: 'IN', slogan: 'One app to manage all your investments', url: 'https://www.wealthy.in/tracker' }, { key: 'whal', name: 'Whal', - origin: 'United States', + origin: 'US', slogan: 'Manage your investments in one place' }, { @@ -1326,7 +1326,7 @@ export const personalFinanceTools: Product[] = [ languages: ['Deutsch', 'English', 'Español', 'Français', 'Italiano'], name: 'yeekatee', note: 'yeekatee was discontinued in 2024', - origin: 'Switzerland', + origin: 'CH', regions: ['Global'], slogan: 'Connect. Share. Invest.' }, @@ -1336,7 +1336,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'ynab', name: 'YNAB (You Need a Budget)', - origin: 'United States', + origin: 'US', pricingPerYear: '$109', slogan: 'Change Your Relationship With Money', url: 'https://www.ynab.com' @@ -1347,7 +1347,7 @@ export const personalFinanceTools: Product[] = [ hasSelfHostingAbility: false, key: 'ziggma', name: 'Ziggma', - origin: 'United States', + origin: 'US', pricingPerYear: '$84', slogan: 'Your solution for investing success', url: 'https://ziggma.com' From 03ad9bc1a0987e37c2efe3d5abf312d36bc762cf Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 7 Jun 2026 09:12:41 +0200 Subject: [PATCH 16/74] Task/improve language localization for DE (20260606) (#6996) * Update translations * Update changelog --- CHANGELOG.md | 1 + apps/client/src/locales/messages.de.xlf | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5f17f1288..878641e5f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Prevented the deletion of asset profiles that are currently in use - Ensured market data is correctly removed when an asset profile with no remaining activities is deleted - Refactored the backend logging to use the instance-based `Logger` +- Improved the language localization for German (`de`) - Improved the language localization for Ukrainian (`uk`) ### Fixed diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf index 504dc107a..fd0ca79d6 100644 --- a/apps/client/src/locales/messages.de.xlf +++ b/apps/client/src/locales/messages.de.xlf @@ -887,7 +887,7 @@ Energy - Energy + Energie libs/ui/src/lib/i18n.ts 90 @@ -1223,7 +1223,7 @@ Consumer Defensive - Consumer Defensive + Defensive Konsumgüter libs/ui/src/lib/i18n.ts 89 @@ -1291,7 +1291,7 @@ Utilities - Utilities + Versorgungsbetriebe libs/ui/src/lib/i18n.ts 97 @@ -2019,7 +2019,7 @@ Consumer Cyclical - Consumer Cyclical + Zyklische Konsumgüter libs/ui/src/lib/i18n.ts 88 @@ -3123,7 +3123,7 @@ Communication Services - Communication Services + Kommunikationsdienste libs/ui/src/lib/i18n.ts 87 @@ -4339,7 +4339,7 @@ Technology - Technology + Technologie libs/ui/src/lib/i18n.ts 96 @@ -4987,7 +4987,7 @@ Basic Materials - Basic Materials + Grundstoffe libs/ui/src/lib/i18n.ts 86 @@ -5713,7 +5713,7 @@ Industrials - Industrials + Industrie libs/ui/src/lib/i18n.ts 93 @@ -5829,7 +5829,7 @@ Healthcare - Healthcare + Gesundheitswesen libs/ui/src/lib/i18n.ts 92 @@ -6974,7 +6974,7 @@ Financial Services - Financial Services + Finanzdienstleistungen libs/ui/src/lib/i18n.ts 91 From 2faa4c7c89950f33c4755598713f2fe64eea33f0 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 7 Jun 2026 10:21:14 +0200 Subject: [PATCH 17/74] Bugfix/prevent FAB from overlapping paginators on mobile (#7000) * Prevent FAB from overlapping paginators on mobile * Update changelog --- CHANGELOG.md | 1 + .../portfolio/activities/activities-page.html | 2 +- libs/ui/src/lib/fab/fab.component.scss | 32 +++++++++++++++---- 3 files changed, 27 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 878641e5f..c903fb38e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed +- Prevented the floating action button from overlapping the paginator on mobile - Fixed an issue where the asset profile override (asset class and asset sub class) was not applied to the data enhancers when gathering asset profiles - Fixed a layout issue in the asset profile dialog of the admin control panel by truncating long titles diff --git a/apps/client/src/app/pages/portfolio/activities/activities-page.html b/apps/client/src/app/pages/portfolio/activities/activities-page.html index f06947988..23e0cef02 100644 --- a/apps/client/src/app/pages/portfolio/activities/activities-page.html +++ b/apps/client/src/app/pages/portfolio/activities/activities-page.html @@ -1,5 +1,5 @@
-
+

Activities

Date: Sun, 7 Jun 2026 10:23:47 +0200 Subject: [PATCH 18/74] Release 3.8.0 (#7001) --- 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 c903fb38e..ef50d292f 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 +## 3.8.0 - 2026-06-07 ### Added diff --git a/package-lock.json b/package-lock.json index e7b5a2bca..26f8ee255 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ghostfolio", - "version": "3.7.0", + "version": "3.8.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ghostfolio", - "version": "3.7.0", + "version": "3.8.0", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { diff --git a/package.json b/package.json index 4fa3e522a..04f125aa7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "3.7.0", + "version": "3.8.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", From 449eaa1baa678c3be98f137cc5196986c0480fb1 Mon Sep 17 00:00:00 2001 From: David Requeno <108202767+DavidReque@users.noreply.github.com> Date: Mon, 8 Jun 2026 10:10:47 -0600 Subject: [PATCH 19/74] Task/prefill form with current cash balance value in account details dialog (#6998) * Prefill form with current cash balance value * Update changelog --- CHANGELOG.md | 6 ++++++ .../account-detail-dialog.html | 1 + .../account-balances/account-balances.component.ts | 13 +++++++++++++ 3 files changed, 20 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ef50d292f..07002a2d1 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 + +- Prefilled the form in the account balance management with the current cash balance + ## 3.8.0 - 2026-06-07 ### Added diff --git a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html index cd397e35e..4b652db96 100644 --- a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html +++ b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html @@ -148,6 +148,7 @@ [accountBalances]="accountBalances" [accountCurrency]="currency" [accountId]="data.accountId" + [currentBalance]="balance" [locale]="user?.settings?.locale" [showActions]=" !data.hasImpersonationId && diff --git a/libs/ui/src/lib/account-balances/account-balances.component.ts b/libs/ui/src/lib/account-balances/account-balances.component.ts index 7b26263b0..503f84071 100644 --- a/libs/ui/src/lib/account-balances/account-balances.component.ts +++ b/libs/ui/src/lib/account-balances/account-balances.component.ts @@ -13,6 +13,7 @@ import { OnChanges, OnInit, Output, + effect, inject, input, viewChild @@ -70,6 +71,7 @@ export class GfAccountBalancesComponent implements OnChanges, OnInit { input.required(); public readonly accountCurrency = input.required(); public readonly accountId = input.required(); + public readonly currentBalance = input(); public readonly displayedColumns: string[] = ['date', 'value', 'actions']; public readonly locale = input(getLocale()); public readonly showActions = input(true); @@ -89,6 +91,17 @@ export class GfAccountBalancesComponent implements OnChanges, OnInit { public constructor() { addIcons({ calendarClearOutline, ellipsisHorizontal, trashOutline }); + + effect(() => { + const currentBalance = this.currentBalance(); + + if ( + this.accountBalanceForm.controls.balance.pristine && + typeof currentBalance === 'number' + ) { + this.accountBalanceForm.controls.balance.setValue(currentBalance); + } + }); } public ngOnInit() { From 566c1a0b8e0ad4a5133b207c22fab78e2a7ebd90 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Tue, 9 Jun 2026 15:14:12 +0200 Subject: [PATCH 20/74] Task/disable selection of future dates in account balance management (#7003) * Disable selection of future dates * Update changelog --- CHANGELOG.md | 1 + .../lib/account-balances/account-balances.component.html | 7 ++++++- .../src/lib/account-balances/account-balances.component.ts | 1 + 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 07002a2d1..c0d5dba4a 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 - Prefilled the form in the account balance management with the current cash balance +- Disabled the selection of future dates in the account balance management ## 3.8.0 - 2026-06-07 diff --git a/libs/ui/src/lib/account-balances/account-balances.component.html b/libs/ui/src/lib/account-balances/account-balances.component.html index 29037a985..ee1450435 100644 --- a/libs/ui/src/lib/account-balances/account-balances.component.html +++ b/libs/ui/src/lib/account-balances/account-balances.component.html @@ -16,7 +16,12 @@ - + (); + public maxDate = new Date(); private dateAdapter = inject>(DateAdapter); private notificationService = inject(NotificationService); From 034877a7756dc914bb43f0edf2a5608449f17366 Mon Sep 17 00:00:00 2001 From: battdir Date: Thu, 11 Jun 2026 02:54:22 +0900 Subject: [PATCH 21/74] Task/improve language localization for KO (#7009) * Update translations * Update changelog --- CHANGELOG.md | 1 + apps/client/src/locales/messages.ko.xlf | 250 ++++++++++++------------ 2 files changed, 126 insertions(+), 125 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c0d5dba4a..240ca983f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Prefilled the form in the account balance management with the current cash balance - Disabled the selection of future dates in the account balance management +- Improved the language localization for Korean (`ko`) ## 3.8.0 - 2026-06-07 diff --git a/apps/client/src/locales/messages.ko.xlf b/apps/client/src/locales/messages.ko.xlf index 07a6daa1d..e9f4139dc 100644 --- a/apps/client/src/locales/messages.ko.xlf +++ b/apps/client/src/locales/messages.ko.xlf @@ -585,7 +585,7 @@ Do you really want to delete this account? - 이 계정을 정말 삭제하시겠습니까? + 이 계좌를 정말 삭제하시겠습니까? libs/ui/src/lib/accounts-table/accounts-table.component.ts 146 @@ -721,7 +721,7 @@ Find an account... - Find an account... + 계좌 검색... libs/ui/src/lib/assistant/assistant.component.ts 471 @@ -809,7 +809,7 @@ First Activity - 첫 활동 + 첫 거래 apps/client/src/app/components/admin-market-data/admin-market-data.html 147 @@ -829,7 +829,7 @@ Activities Count - 활동 수 + 거래 건수 apps/client/src/app/components/admin-market-data/admin-market-data.html 156 @@ -901,7 +901,7 @@ Healthcare - Healthcare + 헬스케어 libs/ui/src/lib/i18n.ts 92 @@ -1017,7 +1017,7 @@ Technology - Technology + 기술 libs/ui/src/lib/i18n.ts 96 @@ -1073,7 +1073,7 @@ Industrials - Industrials + 산업재 libs/ui/src/lib/i18n.ts 93 @@ -1109,7 +1109,7 @@ Consumer Cyclical - Consumer Cyclical + 임의소비재 libs/ui/src/lib/i18n.ts 88 @@ -1269,7 +1269,7 @@ Asset profile has been saved - Asset profile has been saved + 자산 정보가 저장되었습니다. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts 624 @@ -1285,7 +1285,7 @@ Explore - Explore + 둘러보기 apps/client/src/app/pages/resources/overview/resources-overview.component.html 11 @@ -1449,7 +1449,7 @@ Could not validate form - Could not validate form + 양식 유효성 검사에 실패했습니다. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts 600 @@ -1573,7 +1573,7 @@ Manage Activities - 활동 관리 + 거래 내역 관리 apps/client/src/app/components/home-holdings/home-holdings.html 64 @@ -1649,7 +1649,7 @@ Setup your accounts - 계정 설정 + 계좌 설정 apps/client/src/app/components/home-overview/home-overview.html 16 @@ -1665,7 +1665,7 @@ Capture your activities - 활동을 캡처하세요 + 거래를 기록하세요 apps/client/src/app/components/home-overview/home-overview.html 25 @@ -1673,7 +1673,7 @@ Record your investment activities to keep your portfolio up to date. - 투자 활동을 기록하여 포트폴리오를 최신 상태로 유지하세요. + 투자 거래 내역을 기록하여 포트폴리오를 최신 상태로 유지하세요. apps/client/src/app/components/home-overview/home-overview.html 27 @@ -1697,7 +1697,7 @@ Setup accounts - 계정 설정 + 계좌 설정 apps/client/src/app/components/home-overview/home-overview.html 49 @@ -1713,7 +1713,7 @@ Add activity - 활동 추가 + 거래 추가 apps/client/src/app/components/home-overview/home-overview.html 57 @@ -1733,7 +1733,7 @@ Code - Code + 코드 apps/client/src/app/components/admin-overview/admin-overview.html 159 @@ -1829,7 +1829,7 @@ Energy - Energy + 에너지 libs/ui/src/lib/i18n.ts 90 @@ -2225,7 +2225,7 @@ Performance with currency effect - Performance with currency effect + 환율 효과 반영 성과 apps/client/src/app/pages/portfolio/analysis/analysis-page.html 134 @@ -2285,7 +2285,7 @@ Consumer Defensive - Consumer Defensive + 필수소비재 libs/ui/src/lib/i18n.ts 89 @@ -2365,7 +2365,7 @@ Utilities - Utilities + 유틸리티 libs/ui/src/lib/i18n.ts 97 @@ -2689,7 +2689,7 @@ Accounts - 계정 + 계좌 apps/client/src/app/components/admin-platform/admin-platform.component.html 52 @@ -2737,7 +2737,7 @@ Update account - 계정 업데이트 + 계좌 수정 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html 8 @@ -2745,7 +2745,7 @@ Add account - 계정 추가 + 계좌 추가 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html 10 @@ -2753,7 +2753,7 @@ Account ID - 계정 ID + 계좌 ID apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html 96 @@ -2993,7 +2993,7 @@ Could not parse scraper configuration - Could not parse scraper configuration + 스크래퍼 설정을 파싱할 수 없습니다. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts 551 @@ -3021,7 +3021,7 @@ Duration - Duration + 기간 apps/client/src/app/components/admin-overview/admin-overview.html 172 @@ -3109,7 +3109,7 @@ Multi-Accounts - 다중 계정 + 다중 계좌 apps/client/src/app/pages/features/features-page.html 127 @@ -3421,7 +3421,7 @@ Basic Materials - Basic Materials + 기초소재 libs/ui/src/lib/i18n.ts 86 @@ -3741,7 +3741,7 @@ Activities - 활동 + 거래 내역 apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html 84 @@ -3793,7 +3793,7 @@ Do you really want to delete these activities? - 정말로 이 활동을 삭제하시겠습니까? + 정말로 이 거래들을 삭제하시겠습니까? libs/ui/src/lib/activities-table/activities-table.component.ts 304 @@ -3801,7 +3801,7 @@ Update activity - 활동 업데이트 + 거래 수정 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 10 @@ -3821,7 +3821,7 @@ One-time fee, annual account fees - 일회성 수수료, 연간 계정 수수료 + 일회성 수수료, 연간 계좌 수수료 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 33 @@ -3881,7 +3881,7 @@ Import Activities - 활동 가져오기 + 거래 내역 가져오기 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts 94 @@ -4005,7 +4005,7 @@ Select Activities - 활동 선택 + 거래 선택 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html 115 @@ -4025,7 +4025,7 @@ Allocations - 할당 + 자산 배분 apps/client/src/app/pages/portfolio/allocations/allocations-page.html 4 @@ -4065,7 +4065,7 @@ By Asset Class - 자산 클래스별 + 자산군별 apps/client/src/app/pages/portfolio/allocations/allocations-page.html 83 @@ -4141,7 +4141,7 @@ Latest activities - 최신 활동 + 최신 거래 내역 apps/client/src/app/pages/public/public-page.html 210 @@ -4173,7 +4173,7 @@ By Account - 계정별 + 계좌별 apps/client/src/app/pages/portfolio/allocations/allocations-page.html 282 @@ -4429,7 +4429,7 @@ Unlimited Accounts - 무제한 계정 + 무제한 계좌 apps/client/src/app/pages/pricing/pricing-page.html 39 @@ -4553,7 +4553,7 @@ Could not save asset profile - Could not save asset profile + 자산 정보를 저장할 수 없습니다. apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts 634 @@ -5038,7 +5038,7 @@ Do you really want to delete this account balance? - 정말로 이 계정 잔액을 삭제하시겠습니까? + 정말로 이 계좌 잔액을 삭제하시겠습니까? libs/ui/src/lib/account-balances/account-balances.component.ts 113 @@ -5046,7 +5046,7 @@ Export Activities - 수출 활동 + 거래 내역 내보내기 libs/ui/src/lib/activities-table/activities-table.component.html 64 @@ -5094,7 +5094,7 @@ Do you really want to delete this activity? - 정말로 이 활동을 삭제하시겠습니까? + 정말로 이 거래를 삭제하시겠습니까? libs/ui/src/lib/activities-table/activities-table.component.ts 314 @@ -5146,7 +5146,7 @@ Change from All Time High - 역대 최고치에서 변화 + 역대 최고점 대비 변동 libs/ui/src/lib/benchmark/benchmark.component.html 128 @@ -5170,7 +5170,7 @@ Loan - Loan + 대출 libs/ui/src/lib/i18n.ts 60 @@ -5246,7 +5246,7 @@ Allocation - 배당 + 자산 배분 libs/ui/src/lib/accounts-table/accounts-table.component.html 248 @@ -5274,7 +5274,7 @@ Account - 계정 + 계좌 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 86 @@ -5302,7 +5302,7 @@ Asset Class - 자산 클래스 + 자산군 apps/client/src/app/components/admin-market-data/admin-market-data.html 114 @@ -5334,7 +5334,7 @@ Asset Sub Class - 자산 하위 클래스 + 하위 자산군 apps/client/src/app/components/admin-market-data/admin-market-data.html 123 @@ -5474,7 +5474,7 @@ No Activities - No Activities + 거래 내역 없음 apps/client/src/app/components/admin-market-data/admin-market-data.component.ts 150 @@ -5490,7 +5490,7 @@ Everything in Basic, plus - Everything in Basic, plus + Basic의 모든 기능에 더해 apps/client/src/app/pages/pricing/pricing-page.html 199 @@ -5594,7 +5594,7 @@ Fee - 요금 + 수수료 apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 255 @@ -5770,7 +5770,7 @@ Communication Services - Communication Services + 커뮤니케이션 서비스 libs/ui/src/lib/i18n.ts 87 @@ -5986,7 +5986,7 @@ Close Holding - 닫기 보유 + 보유 포지션 종료 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html 447 @@ -6203,7 +6203,7 @@ Find a holding... - Find a holding... + 보유 종목 검색... libs/ui/src/lib/assistant/assistant.component.ts 472 @@ -6263,7 +6263,7 @@ Activity - 활동 + 거래 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html 227 @@ -6319,7 +6319,7 @@ {VAR_PLURAL, plural, =1 {activity} other {activities}} - {VAR_PLURAL, 복수형, =1 {활동} 기타 {활동}} + {VAR_PLURAL, plural, =1 {거래} other {거래}} apps/client/src/app/components/portfolio-summary/portfolio-summary.component.html 14 @@ -6327,7 +6327,7 @@ Delete Activities - 활동 삭제 + 거래 삭제 libs/ui/src/lib/activities-table/activities-table.component.html 92 @@ -6359,7 +6359,7 @@ Jump to a page... - Jump to a page... + 페이지 이동... libs/ui/src/lib/assistant/assistant.component.ts 473 @@ -6375,7 +6375,7 @@ Approximation based on the top holdings of each ETF - 각 ETF의 상위 보유량을 기준으로 한 근사치 + 각 ETF의 상위 보유 종목을 기준으로 한 근사치 apps/client/src/app/pages/portfolio/allocations/allocations-page.html 334 @@ -6383,7 +6383,7 @@ By ETF Holding - ETF 홀딩으로 + ETF 보유 종목별 apps/client/src/app/pages/portfolio/allocations/allocations-page.html 327 @@ -6587,7 +6587,7 @@ View Holding - 보유보기 + 보유 종목 보기 libs/ui/src/lib/activities-table/activities-table.component.html 474 @@ -6875,7 +6875,7 @@ Performance with currency effect Performance - 환율 효과가 있는 실적 실적 + 환율 효과 반영 수익률 수익률 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html 83 @@ -6891,7 +6891,7 @@ Change with currency effect Change - 통화 효과로 변경 변경 + 환율 효과 반영 변동 변동 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html 63 @@ -6915,7 +6915,7 @@ has been copied to the clipboard - has been copied to the clipboard + 가 클립보드에 복사되었습니다. apps/client/src/app/components/admin-overview/admin-overview.component.ts 378 @@ -6967,7 +6967,7 @@ Financial Services - Financial Services + 금융 서비스 libs/ui/src/lib/i18n.ts 91 @@ -7385,7 +7385,7 @@ Change with currency effect - Change with currency effect + 환율 효과 반영 변동 apps/client/src/app/pages/portfolio/analysis/analysis-page.html 115 @@ -7489,7 +7489,7 @@ Change - 변화 + 변동 libs/ui/src/lib/holdings-table/holdings-table.component.html 143 @@ -7501,7 +7501,7 @@ Performance - 성능 + 성과 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.html 6 @@ -7541,7 +7541,7 @@ Total amount - Total amount + 총액 apps/client/src/app/pages/portfolio/analysis/analysis-page.html 94 @@ -7706,7 +7706,7 @@ Performance Calculation - 성능 계산 + 성과 계산 apps/client/src/app/components/user-account-settings/user-account-settings.html 31 @@ -7811,7 +7811,7 @@ No emergency fund has been set up - 비상금은 마련되지 않았습니다 + 비상금이 설정되지 않았습니다. apps/client/src/app/pages/i18n/i18n-page.html 147 @@ -7819,7 +7819,7 @@ An emergency fund has been set up - 비상금이 마련됐어요 + 비상금이 설정되어 있습니다. apps/client/src/app/pages/i18n/i18n-page.html 150 @@ -7827,7 +7827,7 @@ Fee Ratio - Fee Ratio + 수수료 비율 apps/client/src/app/pages/i18n/i18n-page.html 152 @@ -7835,7 +7835,7 @@ The fees do exceed ${thresholdMax}% of your total investment volume (${feeRatio}%) - The fees do exceed ${thresholdMax}% of your total investment volume (${feeRatio}%) + 수수료가 총 투자 금액의 ${thresholdMax}%를 초과합니다 (${feeRatio}%) apps/client/src/app/pages/i18n/i18n-page.html 154 @@ -7843,7 +7843,7 @@ The fees do not exceed ${thresholdMax}% of your total investment volume (${feeRatio}%) - The fees do not exceed ${thresholdMax}% of your total investment volume (${feeRatio}%) + 수수료가 총 투자 금액의 ${thresholdMax}%를 초과하지 않습니다 (${feeRatio}%) apps/client/src/app/pages/i18n/i18n-page.html 158 @@ -7883,7 +7883,7 @@ Single Account - 단일 계정 + 단일 계좌 apps/client/src/app/pages/i18n/i18n-page.html 28 @@ -7891,7 +7891,7 @@ Your net worth is managed by a single account - 귀하의 순자산은 단일 계정으로 관리됩니다 + 귀하의 순자산은 단일 계좌로 관리됩니다 apps/client/src/app/pages/i18n/i18n-page.html 30 @@ -7899,7 +7899,7 @@ Your net worth is managed by ${accountsLength} accounts - 귀하의 순자산은 ${accountsLength} 계정에서 관리됩니다. + 귀하의 순자산은 ${accountsLength}개의 계좌에서 관리됩니다. apps/client/src/app/pages/i18n/i18n-page.html 36 @@ -8025,7 +8025,7 @@ Over ${thresholdMax}% of your current investment is at ${maxAccountName} (${maxInvestmentRatio}%) - 현재 투자의 ${thresholdMax}% 이상이 ${maxAccountName} (${maxInvestmentRatio}%)에 있습니다. + 현재 투자 자산의 ${thresholdMax}% 이상이 ${maxAccountName} 계좌 (${maxInvestmentRatio}%)에 집중되어 있습니다. apps/client/src/app/pages/i18n/i18n-page.html 17 @@ -8033,7 +8033,7 @@ The major part of your current investment is at ${maxAccountName} (${maxInvestmentRatio}%) and does not exceed ${thresholdMax}% - 현재 투자의 주요 부분은 ${maxAccountName} (${maxInvestmentRatio}%)이며 ${thresholdMax}%를 초과하지 않습니다. + 현재 투자 자산의 주요 부분이 ${maxAccountName} 계좌 (${maxInvestmentRatio}%)에 있으며, 설정된 기준(${thresholdMax}%)을 초과하지 않습니다. apps/client/src/app/pages/i18n/i18n-page.html 24 @@ -8049,7 +8049,7 @@ The equity contribution of your current investment (${equityValueRatio}%) exceeds ${thresholdMax}% - 현재 투자의 지분 기여도(${equityValueRatio}%)가 ${thresholdMax}%를 초과합니다. + 현재 투자 자산 중 주식 비중(${equityValueRatio}%)이 ${thresholdMax}%를 초과합니다. apps/client/src/app/pages/i18n/i18n-page.html 43 @@ -8057,7 +8057,7 @@ The equity contribution of your current investment (${equityValueRatio}%) is below ${thresholdMin}% - 현재 투자의 지분 기여도(${equityValueRatio}%)가 ${thresholdMin}% 미만입니다. + 현재 투자 자산 중 주식 비중(${equityValueRatio}%)이 ${thresholdMin}% 미만입니다. apps/client/src/app/pages/i18n/i18n-page.html 47 @@ -8065,7 +8065,7 @@ The equity contribution of your current investment (${equityValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% - 현재 투자의 지분 기여도(${equityValueRatio}%)가 ${thresholdMin}% 및 ${thresholdMax}% 범위 내에 있습니다. + 현재 투자 자산 중 주식 비중(${equityValueRatio}%)이 ${thresholdMin}% ~ ${thresholdMax}% 범위 내에 있습니다. apps/client/src/app/pages/i18n/i18n-page.html 51 @@ -8081,7 +8081,7 @@ The fixed income contribution of your current investment (${fixedIncomeValueRatio}%) exceeds ${thresholdMax}% - 현재 투자의 고정 수입 기여도(${fixedIncomeValueRatio}%)가 ${thresholdMax}%를 초과합니다. + 현재 투자 자산 중 채권 비중(${fixedIncomeValueRatio}%)이 ${thresholdMax}%를 초과합니다. apps/client/src/app/pages/i18n/i18n-page.html 57 @@ -8089,7 +8089,7 @@ The fixed income contribution of your current investment (${fixedIncomeValueRatio}%) is below ${thresholdMin}% - 현재 투자의 고정 수입 기여도(${fixedIncomeValueRatio}%)가 ${thresholdMin}% 미만입니다. + 현재 투자 자산 중 채권 비중(${fixedIncomeValueRatio}%)이 ${thresholdMin}% 미만입니다. apps/client/src/app/pages/i18n/i18n-page.html 61 @@ -8097,7 +8097,7 @@ The fixed income contribution of your current investment (${fixedIncomeValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% - 현재 투자의 고정 수입 기여도(${fixedIncomeValueRatio}%)가 ${thresholdMin}% ~ ${thresholdMax}% 범위 내에 있습니다. + 현재 투자 자산 중 채권 비중(${fixedIncomeValueRatio}%)이 ${thresholdMin}% ~ ${thresholdMax}% 범위 내에 있습니다. apps/client/src/app/pages/i18n/i18n-page.html 66 @@ -8113,7 +8113,7 @@ The major part of your current investment is not in your base currency (${baseCurrencyValueRatio}% in ${baseCurrency}) - 현재 투자의 주요 부분이 기본 통화(${baseCurrency}의 ${baseCurrencyValueRatio}%)로 되어 있지 않습니다. + 현재 투자 자산의 상당 부분이 기준 통화가 아닙니다 (${baseCurrency} 비중: ${baseCurrencyValueRatio}%). apps/client/src/app/pages/i18n/i18n-page.html 88 @@ -8121,7 +8121,7 @@ The major part of your current investment is in your base currency (${baseCurrencyValueRatio}% in ${baseCurrency}) - 현재 투자의 주요 부분은 기본 통화(${baseCurrency}의 ${baseCurrencyValueRatio}%)입니다. + 현재 투자 자산의 주요 부분이 기준 통화로 되어 있습니다 (${baseCurrency} 비중: ${baseCurrencyValueRatio}%). apps/client/src/app/pages/i18n/i18n-page.html 92 @@ -8137,7 +8137,7 @@ Over ${thresholdMax}% of your current investment is in ${currency} (${maxValueRatio}%) - 현재 투자의 ${thresholdMax}% 이상이 ${currency}(${maxValueRatio}%)에 있습니다. + 현재 투자 자산의 ${thresholdMax}% 이상이 ${currency} 통화 (${maxValueRatio}%)에 집중되어 있습니다. apps/client/src/app/pages/i18n/i18n-page.html 97 @@ -8145,7 +8145,7 @@ The major part of your current investment is in ${currency} (${maxValueRatio}%) and does not exceed ${thresholdMax}% - 현재 투자의 주요 부분은 ${currency} (${maxValueRatio}%)이며 ${thresholdMax}%를 초과하지 않습니다. + 현재 투자 자산의 상당 부분이 ${currency} 통화 (${maxValueRatio}%)로 되어 있으며, 설정된 기준(${thresholdMax}%)을 초과하지 않습니다. apps/client/src/app/pages/i18n/i18n-page.html 101 @@ -8214,7 +8214,7 @@ - + apps/client/src/app/components/admin-users/admin-users.html 35 @@ -8266,7 +8266,7 @@ Account Cluster Risks - 계정 클러스터 위험 + 계좌 집중 위험 apps/client/src/app/pages/i18n/i18n-page.html 14 @@ -8274,7 +8274,7 @@ Asset Class Cluster Risks - 자산 클래스 클러스터 위험 + 자산군 집중 위험 apps/client/src/app/pages/i18n/i18n-page.html 39 @@ -8282,7 +8282,7 @@ Currency Cluster Risks - 통화 클러스터 위험 + 통화 집중 위험 apps/client/src/app/pages/i18n/i18n-page.html 83 @@ -8290,7 +8290,7 @@ Economic Market Cluster Risks - 경제 시장 클러스터 위험 + 경제 시장 집중 위험 apps/client/src/app/pages/i18n/i18n-page.html 106 @@ -8298,7 +8298,7 @@ Emergency Fund - 비상자금 + 비상금 apps/client/src/app/pages/i18n/i18n-page.html 144 @@ -8330,7 +8330,7 @@ Your buying power is below ${thresholdMin} ${baseCurrency} - 귀하의 구매력은 ${thresholdMin} ${baseCurrency} 미만입니다. + 매수 가능 금액이 ${thresholdMin} ${baseCurrency} 미만입니다. apps/client/src/app/pages/i18n/i18n-page.html 73 @@ -8338,7 +8338,7 @@ Your buying power is 0 ${baseCurrency} - 귀하의 구매력은 0입니다 ${baseCurrency} + 매수 가능 금액이 0 ${baseCurrency}입니다. apps/client/src/app/pages/i18n/i18n-page.html 77 @@ -8354,7 +8354,7 @@ Regional Market Cluster Risks - 지역 시장 클러스터 위험 + 지역 시장 집중 위험 apps/client/src/app/pages/i18n/i18n-page.html 163 @@ -8370,7 +8370,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) exceeds ${thresholdMax}% - 현재 투자의 선진국 시장 기여도(${개발된MarketsValueRatio}%)가 ${thresholdMax}%를 초과합니다. + 현재 투자 자산 중 선진국 시장 비중(${developedMarketsValueRatio}%)이 ${thresholdMax}%를 초과합니다. apps/client/src/app/pages/i18n/i18n-page.html 112 @@ -8378,7 +8378,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) is below ${thresholdMin}% - 현재 투자의 선진국 시장 기여도(${개발된MarketsValueRatio}%)가 ${thresholdMin}% 미만입니다. + 현재 투자 자산 중 선진국 시장 비중(${developedMarketsValueRatio}%)이 ${thresholdMin}% 미만입니다. apps/client/src/app/pages/i18n/i18n-page.html 117 @@ -8386,7 +8386,7 @@ The developed markets contribution of your current investment (${developedMarketsValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% - 현재 투자의 선진국 시장 기여도(${개발된MarketsValueRatio}%)는 ${thresholdMin}% 및 ${thresholdMax}% 범위 내에 있습니다. + 현재 투자 자산 중 선진국 시장 비중(${developedMarketsValueRatio}%)이 ${thresholdMin}% ~ ${thresholdMax}% 범위 내에 있습니다. apps/client/src/app/pages/i18n/i18n-page.html 122 @@ -8402,7 +8402,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) exceeds ${thresholdMax}% - 현재 투자의 신흥 시장 기여도(${emergingMarketsValueRatio}%)가 ${thresholdMax}%를 초과합니다. + 현재 투자 자산 중 신흥국 시장 비중(${emergingMarketsValueRatio}%)이 ${thresholdMax}%를 초과합니다. apps/client/src/app/pages/i18n/i18n-page.html 130 @@ -8410,7 +8410,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) is below ${thresholdMin}% - 현재 투자의 신흥 시장 기여도(${emergingMarketsValueRatio}%)가 ${thresholdMin}% 미만입니다. + 현재 투자 자산 중 신흥국 시장 비중(${emergingMarketsValueRatio}%)이 ${thresholdMin}% 미만입니다. apps/client/src/app/pages/i18n/i18n-page.html 135 @@ -8418,7 +8418,7 @@ The emerging markets contribution of your current investment (${emergingMarketsValueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% - 현재 투자의 신흥 시장 기여도(${emergingMarketsValueRatio}%)가 ${thresholdMin}% 및 ${thresholdMax}% 범위 내에 있습니다. + 현재 투자 자산 중 신흥국 시장 비중(${emergingMarketsValueRatio}%)이 ${thresholdMin}% ~ ${thresholdMax}% 범위 내에 있습니다. apps/client/src/app/pages/i18n/i18n-page.html 140 @@ -8426,7 +8426,7 @@ No accounts have been set up - 설정된 계정이 없습니다. + 설정된 계좌가 없습니다. apps/client/src/app/pages/i18n/i18n-page.html 21 @@ -8434,7 +8434,7 @@ Your net worth is managed by 0 accounts - 귀하의 순자산은 0개의 계정에서 관리됩니다. + 귀하의 순자산은 0개의 계좌에서 관리됩니다. apps/client/src/app/pages/i18n/i18n-page.html 33 @@ -8450,7 +8450,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% - 현재 투자의 아시아 태평양 시장 기여도(${valueRatio}%)가 ${thresholdMax}%를 초과합니다. + 현재 투자 자산 중 아시아 태평양 시장 비중(${valueRatio}%)이 ${thresholdMax}%를 초과합니다. apps/client/src/app/pages/i18n/i18n-page.html 167 @@ -8458,7 +8458,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% - 현재 투자의 아시아 태평양 시장 기여도(${valueRatio}%)가 ${thresholdMin}% 미만입니다. + 현재 투자 자산 중 아시아 태평양 시장 비중(${valueRatio}%)이 ${thresholdMin}% 미만입니다. apps/client/src/app/pages/i18n/i18n-page.html 171 @@ -8466,7 +8466,7 @@ The Asia-Pacific market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% - 현재 투자의 아시아 태평양 시장 기여도(${valueRatio}%)가 ${thresholdMin}% 및 ${thresholdMax}% 범위 내에 있습니다. + 현재 투자 자산 중 아시아 태평양 시장 비중(${valueRatio}%)이 ${thresholdMin}% ~ ${thresholdMax}% 범위 내에 있습니다. apps/client/src/app/pages/i18n/i18n-page.html 175 @@ -8482,7 +8482,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% - 현재 투자의 신흥 시장 기여도(${valueRatio}%)가 ${thresholdMax}%를 초과합니다. + 현재 투자 자산 중 신흥국 시장 비중(${valueRatio}%)이 ${thresholdMax}%를 초과합니다. apps/client/src/app/pages/i18n/i18n-page.html 183 @@ -8490,7 +8490,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% - 현재 투자의 신흥 시장 기여도(${valueRatio}%)가 ${thresholdMin}% 미만입니다. + 현재 투자 자산 중 신흥국 시장 비중(${valueRatio}%)이 ${thresholdMin}% 미만입니다. apps/client/src/app/pages/i18n/i18n-page.html 187 @@ -8498,7 +8498,7 @@ The Emerging Markets contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% - 현재 투자의 신흥 시장 기여도(${valueRatio}%)가 ${thresholdMin}% 및 ${thresholdMax}% 범위 내에 있습니다. + 현재 투자 자산 중 신흥국 시장 비중(${valueRatio}%)이 ${thresholdMin}% ~ ${thresholdMax}% 범위 내에 있습니다. apps/client/src/app/pages/i18n/i18n-page.html 191 @@ -8514,7 +8514,7 @@ The Europe market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% - 현재 투자의 유럽 시장 기여도(${valueRatio}%)가 ${thresholdMax}%를 초과합니다. + 현재 투자 자산 중 유럽 시장 비중(${valueRatio}%)이 ${thresholdMax}%를 초과합니다. apps/client/src/app/pages/i18n/i18n-page.html 197 @@ -8522,7 +8522,7 @@ The Europe market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% - 현재 투자의 유럽 시장 기여도(${valueRatio}%)가 ${thresholdMin}% 미만입니다. + 현재 투자 자산 중 유럽 시장 비중(${valueRatio}%)이 ${thresholdMin}% 미만입니다. apps/client/src/app/pages/i18n/i18n-page.html 201 @@ -8530,7 +8530,7 @@ The Europe market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% - 현재 투자의 유럽 시장 기여도(${valueRatio}%)는 ${thresholdMin}% 및 ${thresholdMax}% 범위 내에 있습니다. + 현재 투자 자산 중 유럽 시장 비중(${valueRatio}%)이 ${thresholdMin}% ~ ${thresholdMax}% 범위 내에 있습니다. apps/client/src/app/pages/i18n/i18n-page.html 205 @@ -8546,7 +8546,7 @@ The Japan market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% - 현재 투자의 일본 시장 기여도(${valueRatio}%)가 ${thresholdMax}%를 초과합니다. + 현재 투자 자산 중 일본 시장 비중(${valueRatio}%)이 ${thresholdMax}%를 초과합니다. apps/client/src/app/pages/i18n/i18n-page.html 211 @@ -8554,7 +8554,7 @@ The Japan market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% - 현재 투자의 일본 시장 기여도(${valueRatio}%)가 ${thresholdMin}% 미만입니다. + 현재 투자 자산 중 일본 시장 비중(${valueRatio}%)이 ${thresholdMin}% 미만입니다. apps/client/src/app/pages/i18n/i18n-page.html 215 @@ -8562,7 +8562,7 @@ The Japan market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% - 현재 투자의 일본 시장 기여도(${valueRatio}%)는 ${thresholdMin}% 및 ${thresholdMax}% 범위 내에 있습니다. + 현재 투자 자산 중 일본 시장 비중(${valueRatio}%)이 ${thresholdMin}% ~ ${thresholdMax}% 범위 내에 있습니다. apps/client/src/app/pages/i18n/i18n-page.html 219 @@ -8578,7 +8578,7 @@ The North America market contribution of your current investment (${valueRatio}%) exceeds ${thresholdMax}% - 현재 투자의 북미 시장 기여도(${valueRatio}%)가 ${thresholdMax}%를 초과합니다. + 현재 투자 자산 중 북미 시장 비중(${valueRatio}%)이 ${thresholdMax}%를 초과합니다. apps/client/src/app/pages/i18n/i18n-page.html 225 @@ -8586,7 +8586,7 @@ The North America market contribution of your current investment (${valueRatio}%) is below ${thresholdMin}% - 현재 투자의 북미 시장 기여도(${valueRatio}%)가 ${thresholdMin}% 미만입니다. + 현재 투자 자산 중 북미 시장 비중(${valueRatio}%)이 ${thresholdMin}% 미만입니다. apps/client/src/app/pages/i18n/i18n-page.html 229 @@ -8594,7 +8594,7 @@ The North America market contribution of your current investment (${valueRatio}%) is within the range of ${thresholdMin}% and ${thresholdMax}% - 현재 투자의 북미 시장 기여도(${valueRatio}%)가 ${thresholdMin}% 및 ${thresholdMax}% 범위 내에 있습니다. + 현재 투자 자산 중 북미 시장 비중(${valueRatio}%)이 ${thresholdMin}% ~ ${thresholdMax}% 범위 내에 있습니다. apps/client/src/app/pages/i18n/i18n-page.html 233 From 124940bf53c19c25cdbffef92d0cc82c8387ffc7 Mon Sep 17 00:00:00 2001 From: Ankit Singh Date: Thu, 11 Jun 2026 20:56:38 +0530 Subject: [PATCH 22/74] Task/migrate various components from NgStyle to style bindings (#7008) * Migrate various components from NgStyle to style bindings * Update changelog --- CHANGELOG.md | 1 + .../benchmark-comparator.component.html | 2 +- .../benchmark-comparator.component.ts | 2 -- .../investment-chart/investment-chart.component.html | 2 +- .../investment-chart/investment-chart.component.ts | 3 +-- .../app/pages/portfolio/fire/fire-page.component.ts | 3 +-- .../src/app/pages/portfolio/fire/fire-page.html | 11 ++++++----- .../fire-calculator/fire-calculator.component.html | 2 +- libs/ui/src/lib/line-chart/line-chart.component.html | 5 +---- libs/ui/src/lib/line-chart/line-chart.component.ts | 3 +-- .../portfolio-proportion-chart.component.html | 5 +---- .../portfolio-proportion-chart.component.ts | 3 +-- .../premium-indicator.component.html | 2 +- .../premium-indicator/premium-indicator.component.ts | 3 +-- .../lib/treemap-chart/treemap-chart.component.html | 5 +---- .../src/lib/treemap-chart/treemap-chart.component.ts | 3 +-- 16 files changed, 20 insertions(+), 35 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 240ca983f..d344a14c4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Prefilled the form in the account balance management with the current cash balance - Disabled the selection of future dates in the account balance management +- Migrated various components from `NgStyle` to style bindings - Improved the language localization for Korean (`ko`) ## 3.8.0 - 2026-06-07 diff --git a/apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.html b/apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.html index 4d74c2559..328cccba1 100644 --- a/apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.html +++ b/apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.html @@ -53,6 +53,6 @@
diff --git a/apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts b/apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts index d2dc9e1bb..8d13fb91d 100644 --- a/apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts +++ b/apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts @@ -17,7 +17,6 @@ import { ColorScheme } from '@ghostfolio/common/types'; import { registerChartConfiguration } from '@ghostfolio/ui/chart'; import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; -import { CommonModule } from '@angular/common'; import { ChangeDetectionStrategy, Component, @@ -53,7 +52,6 @@ import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; @Component({ changeDetection: ChangeDetectionStrategy.OnPush, imports: [ - CommonModule, FormsModule, GfPremiumIndicatorComponent, IonIcon, diff --git a/apps/client/src/app/components/investment-chart/investment-chart.component.html b/apps/client/src/app/components/investment-chart/investment-chart.component.html index 6f7b083e5..864050ea8 100644 --- a/apps/client/src/app/components/investment-chart/investment-chart.component.html +++ b/apps/client/src/app/components/investment-chart/investment-chart.component.html @@ -10,5 +10,5 @@ diff --git a/apps/client/src/app/components/investment-chart/investment-chart.component.ts b/apps/client/src/app/components/investment-chart/investment-chart.component.ts index 691133009..e55aebdda 100644 --- a/apps/client/src/app/components/investment-chart/investment-chart.component.ts +++ b/apps/client/src/app/components/investment-chart/investment-chart.component.ts @@ -16,7 +16,6 @@ import { InvestmentItem } from '@ghostfolio/common/interfaces/investment-item.in import { ColorScheme, GroupBy } from '@ghostfolio/common/types'; import { registerChartConfiguration } from '@ghostfolio/ui/chart'; -import { CommonModule } from '@angular/common'; import { ChangeDetectionStrategy, Component, @@ -49,7 +48,7 @@ import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; @Component({ changeDetection: ChangeDetectionStrategy.OnPush, - imports: [CommonModule, NgxSkeletonLoaderModule], + imports: [NgxSkeletonLoaderModule], selector: 'gf-investment-chart', styleUrls: ['./investment-chart.component.scss'], templateUrl: './investment-chart.component.html' diff --git a/apps/client/src/app/pages/portfolio/fire/fire-page.component.ts b/apps/client/src/app/pages/portfolio/fire/fire-page.component.ts index dc0a1d776..04165ab11 100644 --- a/apps/client/src/app/pages/portfolio/fire/fire-page.component.ts +++ b/apps/client/src/app/pages/portfolio/fire/fire-page.component.ts @@ -12,7 +12,7 @@ import { GfPremiumIndicatorComponent } from '@ghostfolio/ui/premium-indicator'; import { DataService } from '@ghostfolio/ui/services'; import { GfValueComponent } from '@ghostfolio/ui/value'; -import { CommonModule, NgStyle } from '@angular/common'; +import { CommonModule } from '@angular/common'; import { ChangeDetectorRef, Component, @@ -35,7 +35,6 @@ import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; GfFireCalculatorComponent, GfPremiumIndicatorComponent, GfValueComponent, - NgStyle, NgxSkeletonLoaderModule, ReactiveFormsModule ], diff --git a/apps/client/src/app/pages/portfolio/fire/fire-page.html b/apps/client/src/app/pages/portfolio/fire/fire-page.html index 76ad6cbf6..2730b35cd 100644 --- a/apps/client/src/app/pages/portfolio/fire/fire-page.html +++ b/apps/client/src/app/pages/portfolio/fire/fire-page.html @@ -19,14 +19,15 @@ !hasImpersonationId && hasPermissionToUpdateUserSettings " [locale]="user?.settings?.locale" - [ngStyle]="{ - opacity: user?.subscription?.type === 'Basic' ? '0.67' : 'initial', - 'pointer-events': - user?.subscription?.type === 'Basic' ? 'none' : 'initial' - }" [projectedTotalAmount]="user?.settings?.projectedTotalAmount" [retirementDate]="user?.settings?.retirementDate" [savingsRate]="user?.settings?.savingsRate" + [style.opacity]=" + user?.subscription?.type === 'Basic' ? '0.67' : 'initial' + " + [style.pointer-events]=" + user?.subscription?.type === 'Basic' ? 'none' : 'initial' + " (annualInterestRateChanged)="onAnnualInterestRateChange($event)" (calculationCompleted)="onCalculationComplete($event)" (projectedTotalAmountChanged)="onProjectedTotalAmountChange($event)" diff --git a/libs/ui/src/lib/fire-calculator/fire-calculator.component.html b/libs/ui/src/lib/fire-calculator/fire-calculator.component.html index 4f9ac456c..125c69a12 100644 --- a/libs/ui/src/lib/fire-calculator/fire-calculator.component.html +++ b/libs/ui/src/lib/fire-calculator/fire-calculator.component.html @@ -81,7 +81,7 @@
diff --git a/libs/ui/src/lib/line-chart/line-chart.component.html b/libs/ui/src/lib/line-chart/line-chart.component.html index e9a5bbbe0..7f115967f 100644 --- a/libs/ui/src/lib/line-chart/line-chart.component.html +++ b/libs/ui/src/lib/line-chart/line-chart.component.html @@ -7,7 +7,4 @@ }" /> } - + diff --git a/libs/ui/src/lib/line-chart/line-chart.component.ts b/libs/ui/src/lib/line-chart/line-chart.component.ts index dd972bc5a..92ee8e4ec 100644 --- a/libs/ui/src/lib/line-chart/line-chart.component.ts +++ b/libs/ui/src/lib/line-chart/line-chart.component.ts @@ -12,7 +12,6 @@ import { import { LineChartItem } from '@ghostfolio/common/interfaces'; import { ColorScheme } from '@ghostfolio/common/types'; -import { CommonModule } from '@angular/common'; import { AfterViewInit, ChangeDetectionStrategy, @@ -43,7 +42,7 @@ import { registerChartConfiguration } from '../chart'; @Component({ changeDetection: ChangeDetectionStrategy.OnPush, - imports: [CommonModule, NgxSkeletonLoaderModule], + imports: [NgxSkeletonLoaderModule], selector: 'gf-line-chart', styleUrls: ['./line-chart.component.scss'], templateUrl: './line-chart.component.html' diff --git a/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.html b/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.html index c7de5ef4d..75e545d30 100644 --- a/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.html +++ b/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.html @@ -7,7 +7,4 @@ }" /> } - + diff --git a/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts b/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts index 7c17b587c..e2c41e956 100644 --- a/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts +++ b/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts @@ -7,7 +7,6 @@ import { } from '@ghostfolio/common/interfaces'; import { ColorScheme } from '@ghostfolio/common/types'; -import { CommonModule } from '@angular/common'; import { AfterViewInit, ChangeDetectionStrategy, @@ -54,7 +53,7 @@ const { @Component({ changeDetection: ChangeDetectionStrategy.OnPush, - imports: [CommonModule, NgxSkeletonLoaderModule], + imports: [NgxSkeletonLoaderModule], selector: 'gf-portfolio-proportion-chart', styleUrls: ['./portfolio-proportion-chart.component.scss'], templateUrl: './portfolio-proportion-chart.component.html' diff --git a/libs/ui/src/lib/premium-indicator/premium-indicator.component.html b/libs/ui/src/lib/premium-indicator/premium-indicator.component.html index 3141414e7..71baae6cb 100644 --- a/libs/ui/src/lib/premium-indicator/premium-indicator.component.html +++ b/libs/ui/src/lib/premium-indicator/premium-indicator.component.html @@ -1,7 +1,7 @@ diff --git a/libs/ui/src/lib/premium-indicator/premium-indicator.component.ts b/libs/ui/src/lib/premium-indicator/premium-indicator.component.ts index b3ccfd88f..0c3cd6ad7 100644 --- a/libs/ui/src/lib/premium-indicator/premium-indicator.component.ts +++ b/libs/ui/src/lib/premium-indicator/premium-indicator.component.ts @@ -1,6 +1,5 @@ import { publicRoutes } from '@ghostfolio/common/routes/routes'; -import { CommonModule } from '@angular/common'; import { CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, @@ -14,7 +13,7 @@ import { diamondOutline } from 'ionicons/icons'; @Component({ changeDetection: ChangeDetectionStrategy.OnPush, - imports: [CommonModule, IonIcon, RouterModule], + imports: [IonIcon, RouterModule], schemas: [CUSTOM_ELEMENTS_SCHEMA], selector: 'gf-premium-indicator', styleUrls: ['./premium-indicator.component.scss'], diff --git a/libs/ui/src/lib/treemap-chart/treemap-chart.component.html b/libs/ui/src/lib/treemap-chart/treemap-chart.component.html index c7de5ef4d..75e545d30 100644 --- a/libs/ui/src/lib/treemap-chart/treemap-chart.component.html +++ b/libs/ui/src/lib/treemap-chart/treemap-chart.component.html @@ -7,7 +7,4 @@ }" /> } - + diff --git a/libs/ui/src/lib/treemap-chart/treemap-chart.component.ts b/libs/ui/src/lib/treemap-chart/treemap-chart.component.ts index 910914230..36ea0023a 100644 --- a/libs/ui/src/lib/treemap-chart/treemap-chart.component.ts +++ b/libs/ui/src/lib/treemap-chart/treemap-chart.component.ts @@ -10,7 +10,6 @@ import { } from '@ghostfolio/common/interfaces'; import { ColorScheme, DateRange } from '@ghostfolio/common/types'; -import { CommonModule } from '@angular/common'; import { AfterViewInit, ChangeDetectionStrategy, @@ -45,7 +44,7 @@ const { gray, green, red } = OpenColor; @Component({ changeDetection: ChangeDetectionStrategy.OnPush, - imports: [CommonModule, NgxSkeletonLoaderModule], + imports: [NgxSkeletonLoaderModule], selector: 'gf-treemap-chart', styleUrls: ['./treemap-chart.component.scss'], templateUrl: './treemap-chart.component.html' From 3fb77bbc5150355d5c81d3aa31cd5ffb30ad1527 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Thu, 11 Jun 2026 22:44:57 +0200 Subject: [PATCH 23/74] Feature/support dedicated OpenRouter model for web_fetch tool in FetchService (#7005) * Add support for dedicated OpenRouter model for web_fetch * Update changelog --- CHANGELOG.md | 4 ++++ apps/api/src/services/fetch/fetch.service.ts | 21 +++++++++++++------- libs/common/src/lib/config.ts | 1 + 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d344a14c4..c0c0835c1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +### Added + +- Added support for a dedicated _OpenRouter_ model for the `web_fetch` tool in the `FetchService` + ### Changed - Prefilled the form in the account balance management with the current cash balance diff --git a/apps/api/src/services/fetch/fetch.service.ts b/apps/api/src/services/fetch/fetch.service.ts index 31034f81c..2425e476e 100644 --- a/apps/api/src/services/fetch/fetch.service.ts +++ b/apps/api/src/services/fetch/fetch.service.ts @@ -3,6 +3,7 @@ import { PropertyService } from '@ghostfolio/api/services/property/property.serv import { PROPERTY_API_KEY_OPENROUTER, PROPERTY_OPENROUTER_MODEL, + PROPERTY_OPENROUTER_MODEL_WEB_FETCH, PROPERTY_WEB_FETCH_ROUTES } from '@ghostfolio/common/config'; @@ -80,12 +81,18 @@ export class FetchService implements OnModuleInit { url: string; webFetchRoute: WebFetchRoute; }) { - const [openRouterApiKey, openRouterModel] = await Promise.all([ - this.propertyService.getByKey(PROPERTY_API_KEY_OPENROUTER), - this.propertyService.getByKey(PROPERTY_OPENROUTER_MODEL) - ]); - - if (!openRouterApiKey || !openRouterModel) { + const [openRouterApiKey, openRouterModel, openRouterModelWebFetch] = + await Promise.all([ + this.propertyService.getByKey(PROPERTY_API_KEY_OPENROUTER), + this.propertyService.getByKey(PROPERTY_OPENROUTER_MODEL), + this.propertyService.getByKey( + PROPERTY_OPENROUTER_MODEL_WEB_FETCH + ) + ]); + + const model = openRouterModelWebFetch || openRouterModel; + + if (!model || !openRouterApiKey) { return undefined; } @@ -93,7 +100,7 @@ export class FetchService implements OnModuleInit { const openRouterService = createOpenRouter({ apiKey: openRouterApiKey }); const { sources, text } = await generateText({ - model: openRouterService.chat(openRouterModel), + model: openRouterService.chat(model), prompt: [ 'You have access to a web_fetch tool. You MUST call it to retrieve the URL below, do not answer from prior knowledge.', 'Return the fetched response body exactly as received: raw body only, no commentary, no Markdown, and no code fences.', diff --git a/libs/common/src/lib/config.ts b/libs/common/src/lib/config.ts index 5f2dd9a1c..7e7cd2ba5 100644 --- a/libs/common/src/lib/config.ts +++ b/libs/common/src/lib/config.ts @@ -252,6 +252,7 @@ export const PROPERTY_IS_DATA_GATHERING_ENABLED = 'IS_DATA_GATHERING_ENABLED'; export const PROPERTY_IS_READ_ONLY_MODE = 'IS_READ_ONLY_MODE'; export const PROPERTY_IS_USER_SIGNUP_ENABLED = 'IS_USER_SIGNUP_ENABLED'; export const PROPERTY_OPENROUTER_MODEL = 'OPENROUTER_MODEL'; +export const PROPERTY_OPENROUTER_MODEL_WEB_FETCH = 'OPENROUTER_MODEL_WEB_FETCH'; export const PROPERTY_SLACK_COMMUNITY_USERS = 'SLACK_COMMUNITY_USERS'; export const PROPERTY_STRIPE_CONFIG = 'STRIPE_CONFIG'; export const PROPERTY_SYSTEM_MESSAGE = 'SYSTEM_MESSAGE'; From 9ea2405fec102625371becdeea243d71c152f84b Mon Sep 17 00:00:00 2001 From: Sjohn21 Date: Fri, 12 Jun 2026 20:09:43 +0200 Subject: [PATCH 24/74] Feature/extend public API with endpoint to update asset profile data (#6981) * Extend public API with endpoint to update asset profile data * Update changelog --------- Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> --- CHANGELOG.md | 1 + README.md | 52 +++++++++++ apps/api/src/app/admin/admin.service.ts | 16 ++-- apps/api/src/app/app.module.ts | 2 + .../asset-profiles.controller.ts | 51 +++++++++++ .../asset-profiles/asset-profiles.module.ts | 13 +++ .../asset-profiles/asset-profiles.service.ts | 90 +++++++++++++++++++ .../symbol-profile/symbol-profile.service.ts | 27 +++++- libs/common/src/lib/dtos/index.ts | 2 + .../lib/dtos/update-asset-profile-data.dto.ts | 16 ++++ .../src/lib/dtos/update-asset-profile.dto.ts | 4 + 11 files changed, 262 insertions(+), 12 deletions(-) create mode 100644 apps/api/src/app/endpoints/asset-profiles/asset-profiles.controller.ts create mode 100644 apps/api/src/app/endpoints/asset-profiles/asset-profiles.module.ts create mode 100644 apps/api/src/app/endpoints/asset-profiles/asset-profiles.service.ts create mode 100644 libs/common/src/lib/dtos/update-asset-profile-data.dto.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index c0c0835c1..d5ffbd4f3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added +- Extended the _Public API_ with the endpoint to update the asset profile data (`PATCH api/v1/asset-profiles/:dataSource/:symbol`) (experimental) - Added support for a dedicated _OpenRouter_ model for the `web_fetch` tool in the `FetchService` ### Changed diff --git a/README.md b/README.md index 8557d4330..270b65126 100644 --- a/README.md +++ b/README.md @@ -302,6 +302,58 @@ Grant access of type _Public_ in the _Access_ tab of _My Ghostfolio_. } ``` +### Update Asset Profile Data (experimental) + +#### Prerequisites + +[Bearer Token](#authorization-bearer-token) for authorization with admin role + +#### Request + +`PATCH http://localhost:3333/api/v1/asset-profiles//` + +#### Body + +``` +{ + "countries": [ + { + "code": "US", + "weight": 1 + } + ], + "sectors": [ + { + "name": "Technology", + "weight": 1 + } + ] +} +``` + +| Field | Type | Description | +| ----------- | ------------------ | ---------------------------------------------------------------------- | +| `countries` | `array` (optional) | Countries with `code` (`ISO 3166-1 alpha-2`) and `weight` (`0` to `1`) | +| `holdings` | `array` (optional) | Holdings with `name` and `weight` (`0` to `1`) | +| `sectors` | `array` (optional) | Sectors with `name` and `weight` (`0` to `1`) | + +#### Response + +##### Success + +`200 OK` + +##### Error + +`404 Not Found` + +``` +{ + "error": "Not Found", + "message": "Could not find the asset profile for MSFT (YAHOO)" +} +``` + ## Community Projects Discover a variety of community projects for Ghostfolio: https://github.com/topics/ghostfolio diff --git a/apps/api/src/app/admin/admin.service.ts b/apps/api/src/app/admin/admin.service.ts index 948616d6c..7e7202306 100644 --- a/apps/api/src/app/admin/admin.service.ts +++ b/apps/api/src/app/admin/admin.service.ts @@ -593,6 +593,7 @@ export class AdminService { assetClass: assetClass as AssetClass, assetSubClass: assetSubClass as AssetSubClass, countries: countries as Prisma.JsonArray, + holdings: holdings as Prisma.JsonArray, name: name as string, sectors: sectors as Prisma.JsonArray, url: url as string @@ -602,21 +603,14 @@ export class AdminService { comment, currency, dataSource, - holdings, isActive, scraperConfiguration, symbol, symbolMapping, - ...(dataSource === 'MANUAL' - ? { assetClass, assetSubClass, countries, name, sectors, url } - : { - SymbolProfileOverrides: { - upsert: { - create: symbolProfileOverrides, - update: symbolProfileOverrides - } - } - }) + ...this.symbolProfileService.getAssetProfileUpdateInput( + { dataSource, symbol }, + symbolProfileOverrides + ) }; await this.symbolProfileService.updateSymbolProfile( diff --git a/apps/api/src/app/app.module.ts b/apps/api/src/app/app.module.ts index 4857c7e14..0a27faa64 100644 --- a/apps/api/src/app/app.module.ts +++ b/apps/api/src/app/app.module.ts @@ -38,6 +38,7 @@ import { AuthModule } from './auth/auth.module'; import { CacheModule } from './cache/cache.module'; import { AiModule } from './endpoints/ai/ai.module'; import { ApiKeysModule } from './endpoints/api-keys/api-keys.module'; +import { AssetProfilesModule } from './endpoints/asset-profiles/asset-profiles.module'; import { AssetsModule } from './endpoints/assets/assets.module'; import { BenchmarksModule } from './endpoints/benchmarks/benchmarks.module'; import { GhostfolioModule } from './endpoints/data-providers/ghostfolio/ghostfolio.module'; @@ -69,6 +70,7 @@ import { UserModule } from './user/user.module'; ActivitiesModule, AiModule, ApiKeysModule, + AssetProfilesModule, AssetModule, AssetsModule, AuthDeviceModule, diff --git a/apps/api/src/app/endpoints/asset-profiles/asset-profiles.controller.ts b/apps/api/src/app/endpoints/asset-profiles/asset-profiles.controller.ts new file mode 100644 index 000000000..38227c555 --- /dev/null +++ b/apps/api/src/app/endpoints/asset-profiles/asset-profiles.controller.ts @@ -0,0 +1,51 @@ +import { HasPermission } from '@ghostfolio/api/decorators/has-permission.decorator'; +import { HasPermissionGuard } from '@ghostfolio/api/guards/has-permission.guard'; +import { UpdateAssetProfileDataDto } from '@ghostfolio/common/dtos'; +import { EnhancedSymbolProfile } from '@ghostfolio/common/interfaces'; +import { permissions } from '@ghostfolio/common/permissions'; +import { RequestWithUser } from '@ghostfolio/common/types'; + +import { + Body, + Controller, + HttpException, + Inject, + Param, + Patch, + UseGuards +} from '@nestjs/common'; +import { REQUEST } from '@nestjs/core'; +import { AuthGuard } from '@nestjs/passport'; +import { DataSource } from '@prisma/client'; +import { StatusCodes, getReasonPhrase } from 'http-status-codes'; + +import { AssetProfilesService } from './asset-profiles.service'; + +@Controller('asset-profiles') +export class AssetProfilesController { + public constructor( + private readonly assetProfilesService: AssetProfilesService, + @Inject(REQUEST) private readonly request: RequestWithUser + ) {} + + @HasPermission(permissions.accessAdminControl) + @Patch(':dataSource/:symbol') + @UseGuards(AuthGuard('jwt'), HasPermissionGuard) + public async updateAssetProfileData( + @Body() assetProfileData: UpdateAssetProfileDataDto, + @Param('dataSource') dataSource: DataSource, + @Param('symbol') symbol: string + ): Promise { + if (!this.request.user.settings.settings.isExperimentalFeatures) { + throw new HttpException( + getReasonPhrase(StatusCodes.NOT_FOUND), + StatusCodes.NOT_FOUND + ); + } + + return this.assetProfilesService.updateAssetProfileData( + { dataSource, symbol }, + assetProfileData + ); + } +} diff --git a/apps/api/src/app/endpoints/asset-profiles/asset-profiles.module.ts b/apps/api/src/app/endpoints/asset-profiles/asset-profiles.module.ts new file mode 100644 index 000000000..32b9ab393 --- /dev/null +++ b/apps/api/src/app/endpoints/asset-profiles/asset-profiles.module.ts @@ -0,0 +1,13 @@ +import { SymbolProfileModule } from '@ghostfolio/api/services/symbol-profile/symbol-profile.module'; + +import { Module } from '@nestjs/common'; + +import { AssetProfilesController } from './asset-profiles.controller'; +import { AssetProfilesService } from './asset-profiles.service'; + +@Module({ + controllers: [AssetProfilesController], + imports: [SymbolProfileModule], + providers: [AssetProfilesService] +}) +export class AssetProfilesModule {} diff --git a/apps/api/src/app/endpoints/asset-profiles/asset-profiles.service.ts b/apps/api/src/app/endpoints/asset-profiles/asset-profiles.service.ts new file mode 100644 index 000000000..ef24372af --- /dev/null +++ b/apps/api/src/app/endpoints/asset-profiles/asset-profiles.service.ts @@ -0,0 +1,90 @@ +import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service'; +import { UpdateAssetProfileDataDto } from '@ghostfolio/common/dtos'; +import { + AssetProfileIdentifier, + EnhancedSymbolProfile +} from '@ghostfolio/common/interfaces'; + +import { Injectable, NotFoundException } from '@nestjs/common'; +import { Prisma } from '@prisma/client'; + +@Injectable() +export class AssetProfilesService { + public constructor( + private readonly symbolProfileService: SymbolProfileService + ) {} + + public async updateAssetProfileData( + { dataSource, symbol }: AssetProfileIdentifier, + assetProfileData: UpdateAssetProfileDataDto + ): Promise { + const notFoundMessage = `Could not find the asset profile for ${symbol} (${dataSource})`; + + const data = this.getAssetProfileDataUpdate(assetProfileData); + + if (Object.keys(data).length > 0) { + try { + await this.symbolProfileService.updateSymbolProfile( + { + dataSource, + symbol + }, + this.symbolProfileService.getAssetProfileUpdateInput( + { dataSource, symbol }, + data + ) + ); + } catch (error) { + if ( + error instanceof Prisma.PrismaClientKnownRequestError && + error.code === 'P2025' + ) { + throw new NotFoundException(notFoundMessage); + } + + throw error; + } + } + + const [assetProfile] = await this.symbolProfileService.getSymbolProfiles([ + { + dataSource, + symbol + } + ]); + + if (!assetProfile) { + throw new NotFoundException(notFoundMessage); + } + + return assetProfile; + } + + private getAssetProfileDataUpdate({ + countries, + holdings, + sectors + }: UpdateAssetProfileDataDto): Pick< + Prisma.SymbolProfileUpdateInput, + 'countries' | 'holdings' | 'sectors' + > { + const data: Pick< + Prisma.SymbolProfileUpdateInput, + 'countries' | 'holdings' | 'sectors' + > = {}; + + if (countries !== undefined) { + data.countries = countries as Prisma.JsonArray; + } + + if (holdings !== undefined) { + data.holdings = holdings as Prisma.JsonArray; + } + + if (sectors !== undefined) { + data.sectors = sectors as Prisma.JsonArray; + } + + return data; + } +} diff --git a/apps/api/src/services/symbol-profile/symbol-profile.service.ts b/apps/api/src/services/symbol-profile/symbol-profile.service.ts index 413b7db03..2d5116274 100644 --- a/apps/api/src/services/symbol-profile/symbol-profile.service.ts +++ b/apps/api/src/services/symbol-profile/symbol-profile.service.ts @@ -11,7 +11,12 @@ import { Country } from '@ghostfolio/common/interfaces/country.interface'; import { Sector } from '@ghostfolio/common/interfaces/sector.interface'; import { Injectable } from '@nestjs/common'; -import { Prisma, SymbolProfile, SymbolProfileOverrides } from '@prisma/client'; +import { + DataSource, + Prisma, + SymbolProfile, + SymbolProfileOverrides +} from '@prisma/client'; import { continents, countries } from 'countries-list'; @Injectable() @@ -71,6 +76,26 @@ export class SymbolProfileService { }); } + public getAssetProfileUpdateInput( + { dataSource }: AssetProfileIdentifier, + data: Prisma.SymbolProfileUpdateInput + ): Prisma.SymbolProfileUpdateInput { + if (dataSource === DataSource.MANUAL) { + return data; + } + + return { + SymbolProfileOverrides: { + upsert: { + create: + data as Prisma.SymbolProfileOverridesCreateWithoutSymbolProfileInput, + update: + data as Prisma.SymbolProfileOverridesUpdateWithoutSymbolProfileInput + } + } + }; + } + public async getSymbolProfiles( aAssetProfileIdentifiers: AssetProfileIdentifier[] ): Promise { diff --git a/libs/common/src/lib/dtos/index.ts b/libs/common/src/lib/dtos/index.ts index 3631d6eae..cf0ce6f57 100644 --- a/libs/common/src/lib/dtos/index.ts +++ b/libs/common/src/lib/dtos/index.ts @@ -13,6 +13,7 @@ import { DeleteOwnUserDto } from './delete-own-user.dto'; import { TransferBalanceDto } from './transfer-balance.dto'; import { UpdateAccessDto } from './update-access.dto'; import { UpdateAccountDto } from './update-account.dto'; +import { UpdateAssetProfileDataDto } from './update-asset-profile-data.dto'; import { UpdateAssetProfileDto } from './update-asset-profile.dto'; import { UpdateBulkMarketDataDto } from './update-bulk-market-data.dto'; import { UpdateMarketDataDto } from './update-market-data.dto'; @@ -39,6 +40,7 @@ export { TransferBalanceDto, UpdateAccessDto, UpdateAccountDto, + UpdateAssetProfileDataDto, UpdateAssetProfileDto, UpdateBulkMarketDataDto, UpdateMarketDataDto, diff --git a/libs/common/src/lib/dtos/update-asset-profile-data.dto.ts b/libs/common/src/lib/dtos/update-asset-profile-data.dto.ts new file mode 100644 index 000000000..a2f600fcd --- /dev/null +++ b/libs/common/src/lib/dtos/update-asset-profile-data.dto.ts @@ -0,0 +1,16 @@ +import { Prisma } from '@prisma/client'; +import { IsArray, IsOptional } from 'class-validator'; + +export class UpdateAssetProfileDataDto { + @IsArray() + @IsOptional() + countries?: Prisma.InputJsonArray; + + @IsArray() + @IsOptional() + holdings?: Prisma.InputJsonArray; + + @IsArray() + @IsOptional() + sectors?: Prisma.InputJsonArray; +} diff --git a/libs/common/src/lib/dtos/update-asset-profile.dto.ts b/libs/common/src/lib/dtos/update-asset-profile.dto.ts index a4981493e..1c8af3e72 100644 --- a/libs/common/src/lib/dtos/update-asset-profile.dto.ts +++ b/libs/common/src/lib/dtos/update-asset-profile.dto.ts @@ -36,6 +36,10 @@ export class UpdateAssetProfileDto { @IsOptional() dataSource?: DataSource; + @IsArray() + @IsOptional() + holdings?: Prisma.InputJsonArray; + @IsBoolean() @IsOptional() isActive?: boolean; From 6bbc96ccf09f742d3e1ea2512b0807d072cdbfc8 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 12 Jun 2026 20:19:47 +0200 Subject: [PATCH 25/74] Task/move support for specific calendar year date ranges in assistant from experimental to general availability (#7015) * Move specific calendar year date ranges from experimental to general availability * Update changelog --- CHANGELOG.md | 1 + .../src/lib/assistant/assistant.component.ts | 22 +++++++++---------- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d5ffbd4f3..3ed1e80a3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Prefilled the form in the account balance management with the current cash balance - Disabled the selection of future dates in the account balance management +- Moved the support for specific calendar year date ranges (`2025`, `2024`, `2023`, etc.) in the assistant from experimental to general availability - Migrated various components from `NgStyle` to style bindings - Improved the language localization for Korean (`ko`) diff --git a/libs/ui/src/lib/assistant/assistant.component.ts b/libs/ui/src/lib/assistant/assistant.component.ts index 3c162a310..e52cefcbc 100644 --- a/libs/ui/src/lib/assistant/assistant.component.ts +++ b/libs/ui/src/lib/assistant/assistant.component.ts @@ -397,19 +397,17 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { }); } - if (this.user?.settings?.isExperimentalFeatures) { - this.dateRangeOptions = this.dateRangeOptions.concat( - eachYearOfInterval({ - end: new Date(), - start: this.user?.dateOfFirstActivity ?? new Date() + this.dateRangeOptions = this.dateRangeOptions.concat( + eachYearOfInterval({ + end: new Date(), + start: this.user?.dateOfFirstActivity ?? new Date() + }) + .map((date) => { + return { label: format(date, 'yyyy'), value: format(date, 'yyyy') }; }) - .map((date) => { - return { label: format(date, 'yyyy'), value: format(date, 'yyyy') }; - }) - .slice(0, -1) - .reverse() - ); - } + .slice(0, -1) + .reverse() + ); if ( this.user?.dateOfFirstActivity && From 68c11b9ee2b13e50267c2f996b1cd96d495acf73 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 12 Jun 2026 20:32:37 +0200 Subject: [PATCH 26/74] Task/extend personal finance tools (20260612) (#7016) Extend personal finance tools --- libs/common/src/lib/personal-finance-tools.ts | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/libs/common/src/lib/personal-finance-tools.ts b/libs/common/src/lib/personal-finance-tools.ts index 86cb1ca48..8698c76f7 100644 --- a/libs/common/src/lib/personal-finance-tools.ts +++ b/libs/common/src/lib/personal-finance-tools.ts @@ -372,12 +372,23 @@ export const personalFinanceTools: Product[] = [ slogan: 'All your wealth, in one place.', url: 'https://www.exirio.com' }, + { + hasFreePlan: false, + hasSelfHostingAbility: true, + key: 'expersoft', + name: 'Expersoft', + origin: 'CH', + slogan: 'Investment Management Platforms', + url: 'https://www.expersoft.com' + }, { founded: 2018, hasFreePlan: false, hasSelfHostingAbility: false, + isArchived: true, key: 'fey', name: 'Fey', + note: 'Fey was discontinued in 2025', origin: 'CA', pricingPerYear: '$300', slogan: 'Make better investments.', @@ -435,6 +446,15 @@ export const personalFinanceTools: Product[] = [ slogan: 'Easy-to-use Portfolio Tracker', url: 'https://fincake.io' }, + { + founded: 2015, + hasFreePlan: false, + key: 'fincite', + name: 'Fincite', + origin: 'DE', + slogan: 'Wealth Management Software', + url: 'https://fincite.de' + }, { founded: 2021, hasSelfHostingAbility: false, @@ -850,6 +870,23 @@ export const personalFinanceTools: Product[] = [ slogan: 'Dein Vermögen immer im Blick', url: 'https://www.parqet.com' }, + { + hasFreePlan: true, + hasSelfHostingAbility: false, + key: 'patrice', + languages: [ + 'Deutsch', + 'English', + 'Español', + 'Français', + 'Italiano', + 'Português' + ], + name: 'Patrice', + pricingPerYear: '€49', + slogan: 'Votre patrimoine, enfin clair', + url: 'https://mypatrice.com' + }, { hasSelfHostingAbility: false, key: 'peek', @@ -986,6 +1023,13 @@ export const personalFinanceTools: Product[] = [ slogan: 'The stock portfolio tracker built for long-term investors', url: 'https://prostocktracker.com' }, + { + hasSelfHostingAbility: false, + key: 'quantive', + name: 'Quantive', + slogan: 'See your financial life clearly', + url: 'https://usequantive.app' + }, { hasFreePlan: true, hasSelfHostingAbility: false, @@ -1226,6 +1270,15 @@ export const personalFinanceTools: Product[] = [ url: 'https://www.utluna.com', useAnonymously: true }, + { + hasFreePlan: true, + hasSelfHostingAbility: false, + key: 'valuedge', + name: 'ValuEdge', + pricingPerYear: '€78', + slogan: 'Track your real portfolio. Not a watchlist.', + url: 'https://valuedge.app' + }, { founded: 2020, hasFreePlan: true, From 98c984c6c9b34efdf2e0aeeeb02f9851a9b76f42 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 12 Jun 2026 20:33:01 +0200 Subject: [PATCH 27/74] Task/improve unknown bucket grouping in allocations (#7011) * Improve unknown bucket grouping * Update changelog --- CHANGELOG.md | 5 + .../app/portfolio/portfolio.service.spec.ts | 154 +++++++++++++ .../src/app/portfolio/portfolio.service.ts | 98 ++++---- .../allocations/allocations-page.component.ts | 214 ++++++++++-------- 4 files changed, 325 insertions(+), 146 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3ed1e80a3..61a3e091a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,10 +16,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Prefilled the form in the account balance management with the current cash balance - Disabled the selection of future dates in the account balance management +- Grouped commodities and cryptocurrencies into the unknown bucket of the allocations by continent, country, currency, market and sector charts on the allocations page - Moved the support for specific calendar year date ranges (`2025`, `2024`, `2023`, etc.) in the assistant from experimental to general availability - Migrated various components from `NgStyle` to style bindings - Improved the language localization for Korean (`ko`) +### Fixed + +- Grouped activities without an account into the unknown bucket of the allocations by account and platform charts on the allocations page + ## 3.8.0 - 2026-06-07 ### Added diff --git a/apps/api/src/app/portfolio/portfolio.service.spec.ts b/apps/api/src/app/portfolio/portfolio.service.spec.ts index 2d73bce3d..e0e7a8255 100644 --- a/apps/api/src/app/portfolio/portfolio.service.spec.ts +++ b/apps/api/src/app/portfolio/portfolio.service.spec.ts @@ -9,6 +9,7 @@ import { DataProviderService } from '@ghostfolio/api/services/data-provider/data import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service'; import { ImpersonationService } from '@ghostfolio/api/services/impersonation/impersonation.service'; import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service'; +import { UNKNOWN_KEY } from '@ghostfolio/common/config'; import { parseDate } from '@ghostfolio/common/helper'; import { Account, DataSource } from '@prisma/client'; @@ -108,6 +109,67 @@ describe('PortfolioService', () => { ); }); + describe('getAggregatedMarkets', () => { + const getAggregatedMarkets = (holdings: object) => { + return ( + portfolioService as unknown as { + getAggregatedMarkets: (aHoldings: object) => { + markets: Record< + string, + { valueInBaseCurrency: number; valueInPercentage: number } + >; + marketsAdvanced: Record; + }; + } + ).getAggregatedMarkets(holdings); + }; + + it('should distribute holdings with countries to their market and route holdings without countries (e.g. commodities, cryptocurrencies) to the unknown bucket', () => { + const holdings = { + 'GC=F': { + // Gold + assetProfile: { countries: [] }, + markets: { developedMarkets: 0, emergingMarkets: 0, otherMarkets: 0 }, + marketsAdvanced: { + asiaPacific: 0, + emergingMarkets: 0, + europe: 0, + japan: 0, + northAmerica: 0, + otherMarkets: 0 + }, + valueInBaseCurrency: 500 + }, + MSFT: { + assetProfile: { countries: [{ code: 'US', weight: 1 }] }, + markets: { developedMarkets: 1, emergingMarkets: 0, otherMarkets: 0 }, + marketsAdvanced: { + asiaPacific: 0, + emergingMarkets: 0, + europe: 0, + japan: 0, + northAmerica: 1, + otherMarkets: 0 + }, + valueInBaseCurrency: 1000 + } + }; + + const { markets, marketsAdvanced } = getAggregatedMarkets(holdings); + + expect(markets.developedMarkets.valueInBaseCurrency).toBe(1000); + expect(markets[UNKNOWN_KEY].valueInBaseCurrency).toBe(500); + + expect(markets.developedMarkets.valueInPercentage).toBeCloseTo( + 1000 / 1500 + ); + expect(markets[UNKNOWN_KEY].valueInPercentage).toBeCloseTo(500 / 1500); + + expect(marketsAdvanced.northAmerica.valueInBaseCurrency).toBe(1000); + expect(marketsAdvanced[UNKNOWN_KEY].valueInBaseCurrency).toBe(500); + }); + }); + describe('getCashSymbolProfiles', () => { it('should use the exchange-rate data source so the symbol-profile join in getDetails matches the calculator positions', () => { jest @@ -271,4 +333,96 @@ describe('PortfolioService', () => { expect(holdings['USD'].assetProfile.symbol).toBe('USD'); }); }); + + describe('getValueOfAccountsAndPlatforms', () => { + const getValueOfAccountsAndPlatforms = (args: object) => { + return ( + portfolioService as unknown as { + getValueOfAccountsAndPlatforms: (aArgs: object) => Promise<{ + accounts: Record; + platforms: Record; + }>; + } + ).getValueOfAccountsAndPlatforms(args); + }; + + const account = { + balance: 100, + currency: 'USD', + id: randomUUID(), + isExcluded: false, + name: 'Account 1', + platform: { name: 'Platform 1' }, + platformId: randomUUID() + }; + + beforeEach(() => { + jest + .spyOn(accountService, 'getAccounts') + .mockResolvedValue([account] as unknown as Account[]); + + jest + .spyOn(exchangeRateDataService, 'toCurrency') + .mockImplementation((aValue) => aValue); + }); + + it('should group activities without an account into the unknown bucket of accounts and platforms', async () => { + const { accounts, platforms } = await getValueOfAccountsAndPlatforms({ + activities: [ + { + account, + accountId: account.id, + quantity: 1, + SymbolProfile: { symbol: 'AAPL' }, + type: 'BUY' + }, + { + account: null, + accountId: null, + quantity: 2, + SymbolProfile: { symbol: 'BABA' }, + type: 'BUY' + } + ], + filters: [], + portfolioItemsNow: { + AAPL: { marketPriceInBaseCurrency: 10 }, + BABA: { marketPriceInBaseCurrency: 20 } + }, + userCurrency: 'USD', + userId: userDummyData.id + }); + + // 100 (balance) + 1 * 10 (activity) + expect(accounts[account.id].valueInBaseCurrency).toBe(110); + expect(platforms[account.platformId].valueInBaseCurrency).toBe(110); + + // 2 * 20 (activity without an account) + expect(accounts[UNKNOWN_KEY].valueInBaseCurrency).toBe(40); + expect(platforms[UNKNOWN_KEY].valueInBaseCurrency).toBe(40); + }); + + it('should not create an unknown bucket when every activity has an account', async () => { + const { accounts, platforms } = await getValueOfAccountsAndPlatforms({ + activities: [ + { + account, + accountId: account.id, + quantity: 1, + SymbolProfile: { symbol: 'AAPL' }, + type: 'BUY' + } + ], + filters: [], + portfolioItemsNow: { + AAPL: { marketPriceInBaseCurrency: 10 } + }, + userCurrency: 'USD', + userId: userDummyData.id + }); + + expect(accounts[UNKNOWN_KEY]).toBeUndefined(); + expect(platforms[UNKNOWN_KEY]).toBeUndefined(); + }); + }); }); diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts index 4feb0f77a..24d760888 100644 --- a/apps/api/src/app/portfolio/portfolio.service.ts +++ b/apps/api/src/app/portfolio/portfolio.service.ts @@ -1453,31 +1453,29 @@ export class PortfolioService { for (const [, position] of Object.entries(holdings)) { const value = position.valueInBaseCurrency; - if (position.assetProfile.assetClass !== AssetClass.LIQUIDITY) { - if (position.assetProfile.countries.length > 0) { - markets.developedMarkets.valueInBaseCurrency += - position.markets.developedMarkets * value; - markets.emergingMarkets.valueInBaseCurrency += - position.markets.emergingMarkets * value; - markets.otherMarkets.valueInBaseCurrency += - position.markets.otherMarkets * value; - - marketsAdvanced.asiaPacific.valueInBaseCurrency += - position.marketsAdvanced.asiaPacific * value; - marketsAdvanced.emergingMarkets.valueInBaseCurrency += - position.marketsAdvanced.emergingMarkets * value; - marketsAdvanced.europe.valueInBaseCurrency += - position.marketsAdvanced.europe * value; - marketsAdvanced.japan.valueInBaseCurrency += - position.marketsAdvanced.japan * value; - marketsAdvanced.northAmerica.valueInBaseCurrency += - position.marketsAdvanced.northAmerica * value; - marketsAdvanced.otherMarkets.valueInBaseCurrency += - position.marketsAdvanced.otherMarkets * value; - } else { - markets[UNKNOWN_KEY].valueInBaseCurrency += value; - marketsAdvanced[UNKNOWN_KEY].valueInBaseCurrency += value; - } + if (position.assetProfile.countries.length > 0) { + markets.developedMarkets.valueInBaseCurrency += + position.markets.developedMarkets * value; + markets.emergingMarkets.valueInBaseCurrency += + position.markets.emergingMarkets * value; + markets.otherMarkets.valueInBaseCurrency += + position.markets.otherMarkets * value; + + marketsAdvanced.asiaPacific.valueInBaseCurrency += + position.marketsAdvanced.asiaPacific * value; + marketsAdvanced.emergingMarkets.valueInBaseCurrency += + position.marketsAdvanced.emergingMarkets * value; + marketsAdvanced.europe.valueInBaseCurrency += + position.marketsAdvanced.europe * value; + marketsAdvanced.japan.valueInBaseCurrency += + position.marketsAdvanced.japan * value; + marketsAdvanced.northAmerica.valueInBaseCurrency += + position.marketsAdvanced.northAmerica * value; + marketsAdvanced.otherMarkets.valueInBaseCurrency += + position.marketsAdvanced.otherMarkets * value; + } else { + markets[UNKNOWN_KEY].valueInBaseCurrency += value; + marketsAdvanced[UNKNOWN_KEY].valueInBaseCurrency += value; } } @@ -2163,40 +2161,44 @@ export class PortfolioService { return withExcludedAccounts || account.isExcluded === false; }); - for (const account of currentAccounts) { + // Iterate over the accounts plus a null entry to group activities without + // an account into the unknown bucket + for (const account of [...currentAccounts, null]) { const ordersByAccount = activities.filter(({ accountId }) => { - return accountId === account.id; + return account ? accountId === account.id : !accountId; }); - accounts[account.id] = { - balance: account.balance, - currency: account.currency, - name: account.name, - valueInBaseCurrency: this.exchangeRateDataService.toCurrency( - account.balance, - account.currency, - userCurrency - ) - }; - - if (platforms[account.platformId || UNKNOWN_KEY]?.valueInBaseCurrency) { - platforms[account.platformId || UNKNOWN_KEY].valueInBaseCurrency += - this.exchangeRateDataService.toCurrency( - account.balance, - account.currency, - userCurrency - ); - } else { - platforms[account.platformId || UNKNOWN_KEY] = { + if (account) { + accounts[account.id] = { balance: account.balance, currency: account.currency, - name: account.platform?.name, + name: account.name, valueInBaseCurrency: this.exchangeRateDataService.toCurrency( account.balance, account.currency, userCurrency ) }; + + if (platforms[account.platformId || UNKNOWN_KEY]?.valueInBaseCurrency) { + platforms[account.platformId || UNKNOWN_KEY].valueInBaseCurrency += + this.exchangeRateDataService.toCurrency( + account.balance, + account.currency, + userCurrency + ); + } else { + platforms[account.platformId || UNKNOWN_KEY] = { + balance: account.balance, + currency: account.currency, + name: account.platform?.name, + valueInBaseCurrency: this.exchangeRateDataService.toCurrency( + account.balance, + account.currency, + userCurrency + ) + }; + } } for (const { diff --git a/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts b/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts index d0eb3788b..d53977ae8 100644 --- a/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts +++ b/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts @@ -201,6 +201,26 @@ export class GfAllocationsPageComponent implements OnInit { } } + private extractCurrency({ + assetClass, + assetSubClass, + currency + }: { + assetClass: PortfolioPosition['assetProfile']['assetClass']; + assetSubClass: PortfolioPosition['assetProfile']['assetSubClass']; + currency?: PortfolioPosition['assetProfile']['currency']; + }) { + if ( + assetClass === AssetClass.COMMODITY || + assetSubClass === AssetSubClass.CRYPTOCURRENCY + ) { + // Commodities and cryptocurrencies have no meaningful currency exposure + return UNKNOWN_KEY; + } + + return currency; + } + private extractEtfProvider({ assetSubClass, name @@ -339,7 +359,7 @@ export class GfAllocationsPageComponent implements OnInit { position.assetProfile.assetSubClass || (UNKNOWN_KEY as AssetSubClass), assetSubClassLabel: position.assetProfile.assetSubClassLabel || UNKNOWN_KEY, - currency: position.assetProfile.currency, + currency: this.extractCurrency(position.assetProfile), etfProvider: this.extractEtfProvider({ assetSubClass: position.assetProfile.assetSubClass, name: position.assetProfile.name @@ -348,119 +368,117 @@ export class GfAllocationsPageComponent implements OnInit { name: position.assetProfile.name }; - if (position.assetProfile.assetClass !== AssetClass.LIQUIDITY) { - // Prepare analysis data by continents, countries, holdings and sectors except for liquidity - - if (position.assetProfile.countries.length > 0) { - for (const country of position.assetProfile.countries) { - const { code, continent, weight } = country; - - if (this.continents[continent]?.value) { - this.continents[continent].value += + // Prepare analysis data by continents, countries, holdings and sectors + + if (position.assetProfile.countries.length > 0) { + for (const country of position.assetProfile.countries) { + const { code, continent, weight } = country; + + if (this.continents[continent]?.value) { + this.continents[continent].value += + weight * + (isNumber(position.valueInBaseCurrency) + ? position.valueInBaseCurrency + : position.valueInPercentage); + } else { + this.continents[continent] = { + name: translate(continent), + value: weight * (isNumber(position.valueInBaseCurrency) - ? position.valueInBaseCurrency - : position.valueInPercentage); - } else { - this.continents[continent] = { - name: translate(continent), - value: - weight * - (isNumber(position.valueInBaseCurrency) - ? this.portfolioDetails.holdings[symbol].valueInBaseCurrency - : this.portfolioDetails.holdings[symbol].valueInPercentage) - }; - } - - if (this.countries[code]?.value) { - this.countries[code].value += + ? this.portfolioDetails.holdings[symbol].valueInBaseCurrency + : this.portfolioDetails.holdings[symbol].valueInPercentage) + }; + } + + if (this.countries[code]?.value) { + this.countries[code].value += + weight * + (isNumber(position.valueInBaseCurrency) + ? position.valueInBaseCurrency + : position.valueInPercentage); + } else { + this.countries[code] = { + name: getCountryName({ + code, + locale: this.user?.settings?.locale + }), + value: weight * (isNumber(position.valueInBaseCurrency) - ? position.valueInBaseCurrency - : position.valueInPercentage); - } else { - this.countries[code] = { - name: getCountryName({ - code, - locale: this.user?.settings?.locale - }), - value: - weight * - (isNumber(position.valueInBaseCurrency) - ? this.portfolioDetails.holdings[symbol].valueInBaseCurrency - : this.portfolioDetails.holdings[symbol].valueInPercentage) - }; - } + ? this.portfolioDetails.holdings[symbol].valueInBaseCurrency + : this.portfolioDetails.holdings[symbol].valueInPercentage) + }; } - } else { - this.continents[UNKNOWN_KEY].value += isNumber( - position.valueInBaseCurrency - ) - ? this.portfolioDetails.holdings[symbol].valueInBaseCurrency - : this.portfolioDetails.holdings[symbol].valueInPercentage; - - this.countries[UNKNOWN_KEY].value += isNumber( - position.valueInBaseCurrency - ) - ? this.portfolioDetails.holdings[symbol].valueInBaseCurrency - : this.portfolioDetails.holdings[symbol].valueInPercentage; } + } else { + this.continents[UNKNOWN_KEY].value += isNumber( + position.valueInBaseCurrency + ) + ? this.portfolioDetails.holdings[symbol].valueInBaseCurrency + : this.portfolioDetails.holdings[symbol].valueInPercentage; + + this.countries[UNKNOWN_KEY].value += isNumber( + position.valueInBaseCurrency + ) + ? this.portfolioDetails.holdings[symbol].valueInBaseCurrency + : this.portfolioDetails.holdings[symbol].valueInPercentage; + } - if (position.assetProfile.holdings.length > 0) { - for (const { - allocationInPercentage, - name, - valueInBaseCurrency - } of position.assetProfile.holdings) { - const normalizedAssetName = this.normalizeAssetName(name); - - if (this.topHoldingsMap[normalizedAssetName]?.value) { - this.topHoldingsMap[normalizedAssetName].value += isNumber( - valueInBaseCurrency - ) + if (position.assetProfile.holdings.length > 0) { + for (const { + allocationInPercentage, + name, + valueInBaseCurrency + } of position.assetProfile.holdings) { + const normalizedAssetName = this.normalizeAssetName(name); + + if (this.topHoldingsMap[normalizedAssetName]?.value) { + this.topHoldingsMap[normalizedAssetName].value += isNumber( + valueInBaseCurrency + ) + ? valueInBaseCurrency + : allocationInPercentage * + this.portfolioDetails.holdings[symbol].valueInPercentage; + } else { + this.topHoldingsMap[normalizedAssetName] = { + name, + value: isNumber(valueInBaseCurrency) ? valueInBaseCurrency : allocationInPercentage * - this.portfolioDetails.holdings[symbol].valueInPercentage; - } else { - this.topHoldingsMap[normalizedAssetName] = { - name, - value: isNumber(valueInBaseCurrency) - ? valueInBaseCurrency - : allocationInPercentage * - this.portfolioDetails.holdings[symbol].valueInPercentage - }; - } + this.portfolioDetails.holdings[symbol].valueInPercentage + }; } } + } - if (position.assetProfile.sectors.length > 0) { - for (const sector of position.assetProfile.sectors) { - const { name, weight } = sector; - - if (this.sectors[name]?.value) { - this.sectors[name].value += + if (position.assetProfile.sectors.length > 0) { + for (const sector of position.assetProfile.sectors) { + const { name, weight } = sector; + + if (this.sectors[name]?.value) { + this.sectors[name].value += + weight * + (isNumber(position.valueInBaseCurrency) + ? position.valueInBaseCurrency + : position.valueInPercentage); + } else { + this.sectors[name] = { + name: translate(name), + value: weight * (isNumber(position.valueInBaseCurrency) - ? position.valueInBaseCurrency - : position.valueInPercentage); - } else { - this.sectors[name] = { - name: translate(name), - value: - weight * - (isNumber(position.valueInBaseCurrency) - ? this.portfolioDetails.holdings[symbol].valueInBaseCurrency - : this.portfolioDetails.holdings[symbol].valueInPercentage) - }; - } + ? this.portfolioDetails.holdings[symbol].valueInBaseCurrency + : this.portfolioDetails.holdings[symbol].valueInPercentage) + }; } - } else { - this.sectors[UNKNOWN_KEY].value += isNumber( - position.valueInBaseCurrency - ) - ? this.portfolioDetails.holdings[symbol].valueInBaseCurrency - : this.portfolioDetails.holdings[symbol].valueInPercentage; } + } else { + this.sectors[UNKNOWN_KEY].value += isNumber( + position.valueInBaseCurrency + ) + ? this.portfolioDetails.holdings[symbol].valueInBaseCurrency + : this.portfolioDetails.holdings[symbol].valueInPercentage; } if (this.holdings[symbol].assetSubClass === 'ETF') { From fa6ca4dc442a5359d6cc6321a77eac703bdff6bb Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 12 Jun 2026 20:36:31 +0200 Subject: [PATCH 28/74] Release 3.9.0 (#7017) --- 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 61a3e091a..dc584f345 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 +## 3.9.0 - 2026-06-12 ### Added diff --git a/package-lock.json b/package-lock.json index 26f8ee255..94f874cb2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ghostfolio", - "version": "3.8.0", + "version": "3.9.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ghostfolio", - "version": "3.8.0", + "version": "3.9.0", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { diff --git a/package.json b/package.json index 04f125aa7..a0be1c81c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "3.8.0", + "version": "3.9.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", From b3bdfab419b68c1ac10aa34ff0c7d66a22ab622f Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 13 Jun 2026 10:01:49 +0200 Subject: [PATCH 29/74] Bugfix/issue in import dividends dialog (#7020) * Change to assetProfile * Update changelog --- CHANGELOG.md | 6 ++++++ .../import-activities-dialog.html | 11 +++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dc584f345..3e3627950 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 + +### Fixed + +- Fixed an issue in the import dividends dialog + ## 3.9.0 - 2026-06-12 ### Added diff --git a/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html b/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html index 85fb73ba2..506076afd 100644 --- a/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html +++ b/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html @@ -32,15 +32,18 @@ Holding {{ - assetProfileForm.get('assetProfileIdentifier')?.value?.name + assetProfileForm.get('assetProfileIdentifier')?.value + ?.assetProfile?.name }} @for (holding of holdings; track holding) { Date: Sat, 13 Jun 2026 13:06:24 +0200 Subject: [PATCH 30/74] Bugfix/last request date in users table of admin control panel (#7021) * Fix last request date * Update changelog --- CHANGELOG.md | 1 + apps/api/src/app/admin/admin.service.ts | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3e3627950..8399e1dcf 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 ### Fixed - Fixed an issue in the import dividends dialog +- Fixed the last request date in the users table of the admin control panel ## 3.9.0 - 2026-06-12 diff --git a/apps/api/src/app/admin/admin.service.ts b/apps/api/src/app/admin/admin.service.ts index 7e7202306..be6f050c4 100644 --- a/apps/api/src/app/admin/admin.service.ts +++ b/apps/api/src/app/admin/admin.service.ts @@ -850,7 +850,7 @@ export class AdminService { activityCount: true, country: true, dataProviderGhostfolioDailyRequests: true, - updatedAt: true + lastRequestAt: true } }, createdAt: true, @@ -896,7 +896,7 @@ export class AdminService { activityCount: _count.activities || 0, country: analytics?.country, dailyApiRequests: analytics?.dataProviderGhostfolioDailyRequests || 0, - lastActivity: analytics?.updatedAt + lastActivity: analytics?.lastRequestAt }; } ); From 5743825bc63ea75b9428b4430798ec798d380c2c Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 13 Jun 2026 13:06:54 +0200 Subject: [PATCH 31/74] Task/improve dynamic numerical precision in account and holding detail dialogs on mobile (#7022) * Improve dynamic numerical precision for various values * Update changelog --- CHANGELOG.md | 5 +++++ .../account-detail-dialog.component.ts | 10 +++++----- .../holding-detail-dialog.component.ts | 17 ++++++++--------- 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8399e1dcf..021e69a07 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +### Changed + +- Improved the dynamic numerical precision for various values in the account detail dialog on mobile +- Improved the dynamic numerical precision for various values in the holding detail dialog on mobile + ### Fixed - Fixed an issue in the import dividends dialog diff --git a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts index d9b279040..7cdf3e671 100644 --- a/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts +++ b/apps/client/src/app/components/account-detail-dialog/account-detail-dialog.component.ts @@ -3,7 +3,7 @@ import { UserService } from '@ghostfolio/client/services/user/user.service'; import { DEFAULT_DATE_RANGE, DEFAULT_PAGE_SIZE, - NUMERICAL_PRECISION_THRESHOLD_6_FIGURES + NUMERICAL_PRECISION_THRESHOLD_5_FIGURES } from '@ghostfolio/common/config'; import { CreateAccountBalanceDto } from '@ghostfolio/common/dtos'; import { DATE_FORMAT, downloadAsFile } from '@ghostfolio/common/helper'; @@ -245,7 +245,7 @@ export class GfAccountDetailDialogComponent implements OnInit { this.balance = balance; if ( - this.balance >= NUMERICAL_PRECISION_THRESHOLD_6_FIGURES && + this.balance >= NUMERICAL_PRECISION_THRESHOLD_5_FIGURES && this.data.deviceType === 'mobile' ) { this.balancePrecision = 0; @@ -257,7 +257,7 @@ export class GfAccountDetailDialogComponent implements OnInit { if ( this.data.deviceType === 'mobile' && this.dividendInBaseCurrency >= - NUMERICAL_PRECISION_THRESHOLD_6_FIGURES + NUMERICAL_PRECISION_THRESHOLD_5_FIGURES ) { this.dividendInBaseCurrencyPrecision = 0; } @@ -267,7 +267,7 @@ export class GfAccountDetailDialogComponent implements OnInit { if ( this.data.deviceType === 'mobile' && - this.equity >= NUMERICAL_PRECISION_THRESHOLD_6_FIGURES + this.equity >= NUMERICAL_PRECISION_THRESHOLD_5_FIGURES ) { this.equityPrecision = 0; } @@ -280,7 +280,7 @@ export class GfAccountDetailDialogComponent implements OnInit { if ( this.data.deviceType === 'mobile' && this.interestInBaseCurrency >= - NUMERICAL_PRECISION_THRESHOLD_6_FIGURES + NUMERICAL_PRECISION_THRESHOLD_5_FIGURES ) { this.interestInBaseCurrencyPrecision = 0; } diff --git a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts index 68bb1215a..416e9106d 100644 --- a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts +++ b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts @@ -2,8 +2,7 @@ import { UserService } from '@ghostfolio/client/services/user/user.service'; import { DEFAULT_PAGE_SIZE, NUMERICAL_PRECISION_THRESHOLD_3_FIGURES, - NUMERICAL_PRECISION_THRESHOLD_5_FIGURES, - NUMERICAL_PRECISION_THRESHOLD_6_FIGURES + NUMERICAL_PRECISION_THRESHOLD_5_FIGURES } from '@ghostfolio/common/config'; import { CreateOrderDto } from '@ghostfolio/common/dtos'; import { @@ -282,7 +281,7 @@ export class GfHoldingDetailDialogComponent implements OnInit { this.averagePrice = averagePrice; if ( - this.averagePrice >= NUMERICAL_PRECISION_THRESHOLD_6_FIGURES && + this.averagePrice >= NUMERICAL_PRECISION_THRESHOLD_5_FIGURES && this.data.deviceType === 'mobile' ) { this.averagePricePrecision = 0; @@ -297,7 +296,7 @@ export class GfHoldingDetailDialogComponent implements OnInit { if ( this.data.deviceType === 'mobile' && this.dividendInBaseCurrency >= - NUMERICAL_PRECISION_THRESHOLD_6_FIGURES + NUMERICAL_PRECISION_THRESHOLD_5_FIGURES ) { this.dividendInBaseCurrencyPrecision = 0; } @@ -335,7 +334,7 @@ export class GfHoldingDetailDialogComponent implements OnInit { if ( this.data.deviceType === 'mobile' && this.investmentInBaseCurrencyWithCurrencyEffect >= - NUMERICAL_PRECISION_THRESHOLD_6_FIGURES + NUMERICAL_PRECISION_THRESHOLD_5_FIGURES ) { this.investmentInBaseCurrencyWithCurrencyEffectPrecision = 0; } @@ -345,7 +344,7 @@ export class GfHoldingDetailDialogComponent implements OnInit { if ( this.data.deviceType === 'mobile' && - this.marketPriceMax >= NUMERICAL_PRECISION_THRESHOLD_6_FIGURES + this.marketPriceMax >= NUMERICAL_PRECISION_THRESHOLD_5_FIGURES ) { this.marketPriceMaxPrecision = 0; } @@ -354,14 +353,14 @@ export class GfHoldingDetailDialogComponent implements OnInit { if ( this.data.deviceType === 'mobile' && - this.marketPriceMin >= NUMERICAL_PRECISION_THRESHOLD_6_FIGURES + this.marketPriceMin >= NUMERICAL_PRECISION_THRESHOLD_5_FIGURES ) { this.marketPriceMinPrecision = 0; } if ( this.data.deviceType === 'mobile' && - this.marketPrice >= NUMERICAL_PRECISION_THRESHOLD_6_FIGURES + this.marketPrice >= NUMERICAL_PRECISION_THRESHOLD_5_FIGURES ) { this.marketPricePrecision = 0; } @@ -370,7 +369,7 @@ export class GfHoldingDetailDialogComponent implements OnInit { if ( this.data.deviceType === 'mobile' && - this.netPerformance >= NUMERICAL_PRECISION_THRESHOLD_6_FIGURES + this.netPerformance >= NUMERICAL_PRECISION_THRESHOLD_5_FIGURES ) { this.netPerformancePrecision = 0; } From f4b3a671c75ca76eff2d0ec22db0811908e6286c Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 13 Jun 2026 17:08:59 +0200 Subject: [PATCH 32/74] Task/optimize portfolio holding endpoint by improving processing of historical market data (#7023) * Improve processing of historical market data * Update changelog --- CHANGELOG.md | 1 + .../src/services/data-provider/data-provider.service.ts | 9 +++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 021e69a07..ab6db98a9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Improved the dynamic numerical precision for various values in the account detail dialog on mobile - Improved the dynamic numerical precision for various values in the holding detail dialog on mobile +- Optimized the endpoint `GET api/v1/portfolio/holding/:dataSource/:symbol` by improving the processing of the historical market data ### Fixed diff --git a/apps/api/src/services/data-provider/data-provider.service.ts b/apps/api/src/services/data-provider/data-provider.service.ts index 1ea2d6436..5b54afb0b 100644 --- a/apps/api/src/services/data-provider/data-provider.service.ts +++ b/apps/api/src/services/data-provider/data-provider.service.ts @@ -385,10 +385,11 @@ export class DataProviderService implements OnModuleInit { response = marketDataByGranularity.reduce((r, marketData) => { const { date, marketPrice, symbol } = marketData; - r[symbol] = { - ...(r[symbol] || {}), - [format(new Date(date), DATE_FORMAT)]: { marketPrice } - }; + if (!r[symbol]) { + r[symbol] = {}; + } + + r[symbol][format(new Date(date), DATE_FORMAT)] = { marketPrice }; return r; }, {}); From a19bd1fc022790038f01a44d01cd8c2050a831de Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 13 Jun 2026 17:10:46 +0200 Subject: [PATCH 33/74] Bugfix/false positive in currency symbol detection (#7024) * Fix issue where certain symbols (e.g. ERNA.L) were incorrectly identified as currencies * Update changelog --- CHANGELOG.md | 1 + .../yahoo-finance/yahoo-finance.service.ts | 40 +++++------- .../eod-historical-data.service.ts | 19 ++---- .../financial-modeling-prep.service.ts | 16 +++-- libs/common/src/lib/helper.spec.ts | 61 ++++++++++++++++++- libs/common/src/lib/helper.ts | 14 +++++ 6 files changed, 102 insertions(+), 49 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ab6db98a9..69efdefe4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Fixed an issue in the import dividends dialog +- Fixed an issue where certain symbols were incorrectly identified as currencies in various data providers - Fixed the last request date in the users table of the admin control panel ## 3.9.0 - 2026-06-12 diff --git a/apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts b/apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts index 4fb0e96ed..85ec6c020 100644 --- a/apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts +++ b/apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts @@ -6,7 +6,7 @@ import { DEFAULT_CURRENCY, REPLACE_NAME_PARTS } from '@ghostfolio/common/config'; -import { isCurrency } from '@ghostfolio/common/helper'; +import { isCurrencySymbol } from '@ghostfolio/common/helper'; import { SectorName } from '@ghostfolio/common/types'; import { Injectable, Logger } from '@nestjs/common'; @@ -73,31 +73,21 @@ export class YahooFinanceDataEnhancerService implements DataEnhancerInterface { * DOGEUSD -> DOGE-USD */ public convertToYahooFinanceSymbol(aSymbol: string) { - if ( - aSymbol.includes(DEFAULT_CURRENCY) && - aSymbol.length > DEFAULT_CURRENCY.length + if (isCurrencySymbol(aSymbol)) { + return `${aSymbol}=X`; + } else if ( + this.cryptocurrencyService.isCryptocurrency( + aSymbol.replace(new RegExp(`-${DEFAULT_CURRENCY}$`), DEFAULT_CURRENCY) + ) ) { - if ( - isCurrency( - aSymbol.substring(0, aSymbol.length - DEFAULT_CURRENCY.length) - ) && - isCurrency(aSymbol.substring(aSymbol.length - DEFAULT_CURRENCY.length)) - ) { - return `${aSymbol}=X`; - } else if ( - this.cryptocurrencyService.isCryptocurrency( - aSymbol.replace(new RegExp(`-${DEFAULT_CURRENCY}$`), DEFAULT_CURRENCY) - ) - ) { - // Add a dash before the last three characters - // BTCUSD -> BTC-USD - // DOGEUSD -> DOGE-USD - // SOL1USD -> SOL1-USD - return aSymbol.replace( - new RegExp(`-?${DEFAULT_CURRENCY}$`), - `-${DEFAULT_CURRENCY}` - ); - } + // Add a dash before the last three characters + // BTCUSD -> BTC-USD + // DOGEUSD -> DOGE-USD + // SOL1USD -> SOL1-USD + return aSymbol.replace( + new RegExp(`-?${DEFAULT_CURRENCY}$`), + `-${DEFAULT_CURRENCY}` + ); } return aSymbol; diff --git a/apps/api/src/services/data-provider/eod-historical-data/eod-historical-data.service.ts b/apps/api/src/services/data-provider/eod-historical-data/eod-historical-data.service.ts index 06173c25b..ebb6cd743 100644 --- a/apps/api/src/services/data-provider/eod-historical-data/eod-historical-data.service.ts +++ b/apps/api/src/services/data-provider/eod-historical-data/eod-historical-data.service.ts @@ -13,7 +13,7 @@ import { DEFAULT_CURRENCY, REPLACE_NAME_PARTS } from '@ghostfolio/common/config'; -import { DATE_FORMAT, isCurrency } from '@ghostfolio/common/helper'; +import { DATE_FORMAT, isCurrencySymbol } from '@ghostfolio/common/helper'; import { DataProviderHistoricalResponse, DataProviderInfo, @@ -382,20 +382,11 @@ export class EodHistoricalDataService * Currency: USDCHF -> USDCHF.FOREX */ private convertToEodSymbol(aSymbol: string) { - if ( - aSymbol.startsWith(DEFAULT_CURRENCY) && - aSymbol.length > DEFAULT_CURRENCY.length - ) { - if ( - isCurrency( - aSymbol.substring(0, aSymbol.length - DEFAULT_CURRENCY.length) - ) - ) { - let symbol = aSymbol; - symbol = symbol.replace('GBp', 'GBX'); + if (isCurrencySymbol(aSymbol)) { + let symbol = aSymbol; + symbol = symbol.replace('GBp', 'GBX'); - return `${symbol}.FOREX`; - } + return `${symbol}.FOREX`; } return aSymbol; diff --git a/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts b/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts index 157285278..ca48bb247 100644 --- a/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts +++ b/apps/api/src/services/data-provider/financial-modeling-prep/financial-modeling-prep.service.ts @@ -16,7 +16,11 @@ import { DEFAULT_CURRENCY, REPLACE_NAME_PARTS } from '@ghostfolio/common/config'; -import { DATE_FORMAT, isCurrency, parseDate } from '@ghostfolio/common/helper'; +import { + DATE_FORMAT, + isCurrencySymbol, + parseDate +} from '@ghostfolio/common/helper'; import { DataProviderHistoricalResponse, DataProviderInfo, @@ -86,9 +90,7 @@ export class FinancialModelingPrepService }; try { - if ( - isCurrency(symbol.substring(0, symbol.length - DEFAULT_CURRENCY.length)) - ) { + if (isCurrencySymbol(symbol)) { response.assetClass = AssetClass.LIQUIDITY; response.assetSubClass = AssetSubClass.CASH; response.currency = symbol.substring( @@ -482,11 +484,7 @@ export class FinancialModelingPrepService for (const { price, symbol } of quotes) { let marketState: MarketState = 'delayed'; - if ( - isCurrency( - symbol.substring(0, symbol.length - DEFAULT_CURRENCY.length) - ) - ) { + if (isCurrencySymbol(symbol)) { marketState = 'open'; } diff --git a/libs/common/src/lib/helper.spec.ts b/libs/common/src/lib/helper.spec.ts index a339c6dab..6a6fe4773 100644 --- a/libs/common/src/lib/helper.spec.ts +++ b/libs/common/src/lib/helper.spec.ts @@ -1,6 +1,8 @@ import { extractNumberFromString, - getNumberFormatGroup + getNumberFormatGroup, + isCurrency, + isCurrencySymbol } from '@ghostfolio/common/helper'; describe('Helper', () => { @@ -116,4 +118,61 @@ describe('Helper', () => { expect(getNumberFormatGroup()).toEqual(','); }); }); + + describe('Is currency', () => { + it('ISO 4217 currency code', () => { + expect(isCurrency('USD')).toEqual(true); + }); + + it('Derived currency', () => { + expect(isCurrency('GBp')).toEqual(true); + }); + + it('Non-currency', () => { + expect(isCurrency('AAPL')).toEqual(false); + }); + + it('Empty currency', () => { + expect(isCurrency('')).toEqual(false); + }); + }); + + describe('Is currency symbol', () => { + it('Currency symbol (default currency as base)', () => { + expect(isCurrencySymbol('USDCHF')).toEqual(true); + expect(isCurrencySymbol('USDZAR')).toEqual(true); + }); + + it('Currency symbol (default currency as quote)', () => { + expect(isCurrencySymbol('EURUSD')).toEqual(true); + }); + + it('Currency symbol (derived currency)', () => { + expect(isCurrencySymbol('USDGBp')).toEqual(true); + }); + + it('Stock symbol with currency-like prefix', () => { + expect(isCurrencySymbol('ERNA.L')).toEqual(false); + }); + + it('Cryptocurrency symbol', () => { + expect(isCurrencySymbol('BTCUSD')).toEqual(false); + }); + + it('Stock symbol', () => { + expect(isCurrencySymbol('AAPL')).toEqual(false); + }); + + it('Symbol with non-currency suffix', () => { + expect(isCurrencySymbol('USD.AX')).toEqual(false); + }); + + it('Plain currency code', () => { + expect(isCurrencySymbol('USD')).toEqual(false); + }); + + it('Empty symbol', () => { + expect(isCurrencySymbol('')).toEqual(false); + }); + }); }); diff --git a/libs/common/src/lib/helper.ts b/libs/common/src/lib/helper.ts index ce7fca518..68b8c51bd 100644 --- a/libs/common/src/lib/helper.ts +++ b/libs/common/src/lib/helper.ts @@ -445,6 +445,20 @@ export function isCurrency(aCurrency: string) { return isISO4217CurrencyCode(aCurrency) || isDerivedCurrency(aCurrency); } +export function isCurrencySymbol(aSymbol: string) { + if (!aSymbol) { + return false; + } + + return ( + aSymbol.length >= 2 * DEFAULT_CURRENCY.length && + isCurrency( + aSymbol.substring(0, aSymbol.length - DEFAULT_CURRENCY.length) + ) && + isCurrency(aSymbol.substring(aSymbol.length - DEFAULT_CURRENCY.length)) + ); +} + export function isDerivedCurrency(aCurrency: string) { if (aCurrency === 'USX') { return true; From 20cb189bae505a1b9df4bb68e1377635872efa1c Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 13 Jun 2026 17:31:48 +0200 Subject: [PATCH 34/74] Task/improve account name display in activities table (#7025) * Do not wrap account name * Update changelog --- CHANGELOG.md | 1 + .../src/lib/activities-table/activities-table.component.html | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 69efdefe4..ebf538c2d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Improved the dynamic numerical precision for various values in the account detail dialog on mobile - Improved the dynamic numerical precision for various values in the holding detail dialog on mobile +- Improved the account name display in the activities table - Optimized the endpoint `GET api/v1/portfolio/holding/:dataSource/:symbol` by improving the processing of the historical market data ### Fixed diff --git a/libs/ui/src/lib/activities-table/activities-table.component.html b/libs/ui/src/lib/activities-table/activities-table.component.html index ae5cf0384..1e57e8c7e 100644 --- a/libs/ui/src/lib/activities-table/activities-table.component.html +++ b/libs/ui/src/lib/activities-table/activities-table.component.html @@ -347,7 +347,9 @@ [url]="element.account?.platform?.url" /> } - {{ element.account?.name }} + {{ + element.account?.name + }}
From 1dab25c7dc21e0f4e3068dc2328054fdfc43ab47 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 13 Jun 2026 17:34:07 +0200 Subject: [PATCH 35/74] Release 3.10.0 (#7027) --- 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 ebf538c2d..815751230 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 +## 3.10.0 - 2026-06-13 ### Changed diff --git a/package-lock.json b/package-lock.json index 94f874cb2..bcae6f86e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ghostfolio", - "version": "3.9.0", + "version": "3.10.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ghostfolio", - "version": "3.9.0", + "version": "3.10.0", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { diff --git a/package.json b/package.json index a0be1c81c..730145781 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "3.9.0", + "version": "3.10.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", From c26cc21ce0e1e25b39ed33f0db62fde60e8e5f1e Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 13 Jun 2026 23:42:33 +0200 Subject: [PATCH 36/74] Task/upgrade bull-board to version 7.2.1 (#7031) * Upgrade bull-board to version 7.2.1 * Update changelog --- CHANGELOG.md | 6 ++++++ package-lock.json | 48 +++++++++++++++++++++++------------------------ package.json | 6 +++--- 3 files changed, 33 insertions(+), 27 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 815751230..2141ce5a1 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 + +- Upgraded `bull-board` from version `7.1.5` to `7.2.1` + ## 3.10.0 - 2026-06-13 ### Changed diff --git a/package-lock.json b/package-lock.json index bcae6f86e..95843c1a6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,9 +21,9 @@ "@angular/platform-browser-dynamic": "21.2.7", "@angular/router": "21.2.7", "@angular/service-worker": "21.2.7", - "@bull-board/api": "7.1.5", - "@bull-board/express": "7.1.5", - "@bull-board/nestjs": "7.1.5", + "@bull-board/api": "7.2.1", + "@bull-board/express": "7.2.1", + "@bull-board/nestjs": "7.2.1", "@codewithdan/observable-store": "2.2.15", "@date-fns/utc": "2.1.1", "@internationalized/number": "3.6.6", @@ -3523,33 +3523,33 @@ "license": "(Apache-2.0 AND BSD-3-Clause)" }, "node_modules/@bull-board/api": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/@bull-board/api/-/api-7.1.5.tgz", - "integrity": "sha512-EW0sbTtGIysu9vipdVpPQeToPqOpPgVZTt+pn1Ut3gbSS/GLWbEgIfFtMmSQDUoSL9WH00RzjgUY5K+43nWh0A==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@bull-board/api/-/api-7.2.1.tgz", + "integrity": "sha512-ldRG4POJLHf6oDrbDA7AsbTKliBmV4eySlwdUAumiRDtfvtbRSdXGE4Md2uPDova1r/ck7ExEe1+pHEQAZElqw==", "license": "MIT", "dependencies": { "redis-info": "^3.1.0" }, "peerDependencies": { - "@bull-board/ui": "7.1.5" + "@bull-board/ui": "7.2.1" } }, "node_modules/@bull-board/express": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/@bull-board/express/-/express-7.1.5.tgz", - "integrity": "sha512-kp4SzhVjZlykryiQwcOhJjDhiLbBnZoAMoSgEstzqQ0raLw+jERRC6ryJ0MIQO+SO+Jv9EjjxrXCR8O2YSP/eg==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@bull-board/express/-/express-7.2.1.tgz", + "integrity": "sha512-tBr/xV5letzKYPRGRkilTQZmfoCoy3mCuUo4M2dDoDKOhbrF360mK5v9/rIcSgYSyI9c7BgEgrve80LhmexNxQ==", "license": "MIT", "dependencies": { - "@bull-board/api": "7.1.5", - "@bull-board/ui": "7.1.5", - "ejs": "^5.0.2", + "@bull-board/api": "7.2.1", + "@bull-board/ui": "7.2.1", + "ejs": "^6.0.1", "express": "^5.2.1" } }, "node_modules/@bull-board/express/node_modules/ejs": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-5.0.2.tgz", - "integrity": "sha512-IpbUaI/CAW86l3f+T8zN0iggSc0LmMZLcIW5eRVStLVNCoTXkE0YlncbbH50fp8Cl6zHIky0sW2uUbhBqGw0Jw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-6.0.1.tgz", + "integrity": "sha512-UaaM14yby8U3k02ihS1Bmj5Kz2d7CCQM1scxpgs4Mhkq8F1wR2gl3+Ts4h5Ne4Mnt7M9m4Dw7jsuMr3+xO4vZA==", "license": "Apache-2.0", "bin": { "ejs": "bin/cli.js" @@ -3559,12 +3559,12 @@ } }, "node_modules/@bull-board/nestjs": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/@bull-board/nestjs/-/nestjs-7.1.5.tgz", - "integrity": "sha512-1y+HkjnDaZoSCXJRsiYfBNBVx+PX3I8x3Uv+SSJuSpt2vHifMRwFbChO3XDxeWXetT1eR+yqPVq6ub5eJwNOYQ==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@bull-board/nestjs/-/nestjs-7.2.1.tgz", + "integrity": "sha512-Uq2Z3+0ORgHJSw4TDV1kBrHdksRnK8CZdda63hrStduPnvKHPBxIZUGNfBN/vL08UqizpNkjFmNyNXiHOgf0LQ==", "license": "MIT", "peerDependencies": { - "@bull-board/api": "^7.1.5", + "@bull-board/api": "^7.2.1", "@nestjs/bull-shared": "^10.0.0 || ^11.0.0", "@nestjs/common": "^9.0.0 || ^10.0.0 || ^11.0.0", "@nestjs/core": "^9.0.0 || ^10.0.0 || ^11.0.0", @@ -3573,12 +3573,12 @@ } }, "node_modules/@bull-board/ui": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/@bull-board/ui/-/ui-7.1.5.tgz", - "integrity": "sha512-2IkatKwNRx/1M9/lAZIptcxS1FPNq6icpp2M46Upwd4olVxs/ujF9Kvs+Ff9ExtIO/OgYfwx7mG2IprGZ+nQCg==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@bull-board/ui/-/ui-7.2.1.tgz", + "integrity": "sha512-O4ykrXrl2UJNHnhJrCvJxrw1ar+DlUBgyZUeZ8Ci+Ne5Wbq6rBv1gfpQH54/eu3IFbLso0S/kjc6WUGb2HPqZw==", "license": "MIT", "dependencies": { - "@bull-board/api": "7.1.5" + "@bull-board/api": "7.2.1" } }, "node_modules/@cacheable/utils": { diff --git a/package.json b/package.json index 730145781..e81e192e3 100644 --- a/package.json +++ b/package.json @@ -65,9 +65,9 @@ "@angular/platform-browser-dynamic": "21.2.7", "@angular/router": "21.2.7", "@angular/service-worker": "21.2.7", - "@bull-board/api": "7.1.5", - "@bull-board/express": "7.1.5", - "@bull-board/nestjs": "7.1.5", + "@bull-board/api": "7.2.1", + "@bull-board/express": "7.2.1", + "@bull-board/nestjs": "7.2.1", "@codewithdan/observable-store": "2.2.15", "@date-fns/utc": "2.1.1", "@internationalized/number": "3.6.6", From 073af0c8c20cfc739e0ca2d74fabbc0e814b8148 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 14 Jun 2026 09:46:56 +0200 Subject: [PATCH 37/74] Task/enable bull dashboard in tab of admin control panel (#7030) * Enable Bull Dashboard in tab * Eliminate BULL_BOARD_IS_READ_ONLY * Update changelog --- CHANGELOG.md | 5 ++ .../configuration/configuration.service.ts | 1 - .../interfaces/environment.interface.ts | 1 - .../data-gathering/data-gathering.module.ts | 3 +- .../portfolio-snapshot.module.ts | 3 +- .../statistics-gathering.module.ts | 3 +- .../admin-jobs/admin-jobs.component.ts | 23 ------- .../app/components/admin-jobs/admin-jobs.html | 9 --- .../app/pages/admin/admin-page.component.ts | 63 ++++++++++++++++--- .../lib/page-tabs/interfaces/interfaces.ts | 9 ++- .../lib/page-tabs/page-tabs.component.html | 49 ++++++++++----- .../src/lib/page-tabs/page-tabs.component.ts | 3 +- 12 files changed, 106 insertions(+), 66 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2141ce5a1..d402bf8f5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,8 +7,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +### Added + +- Added support for a click handler in the page tabs component + ### Changed +- Enabled the _Bull Dashboard_ tab in the admin control panel (experimental) - Upgraded `bull-board` from version `7.1.5` to `7.2.1` ## 3.10.0 - 2026-06-13 diff --git a/apps/api/src/services/configuration/configuration.service.ts b/apps/api/src/services/configuration/configuration.service.ts index b19508d3e..5f9d1055d 100644 --- a/apps/api/src/services/configuration/configuration.service.ts +++ b/apps/api/src/services/configuration/configuration.service.ts @@ -30,7 +30,6 @@ export class ConfigurationService { API_KEY_FINANCIAL_MODELING_PREP: str({ default: '' }), API_KEY_OPEN_FIGI: str({ default: '' }), API_KEY_RAPID_API: str({ default: '' }), - BULL_BOARD_IS_READ_ONLY: bool({ default: true }), CACHE_QUOTES_TTL: num({ default: ms('1 minute') }), CACHE_TTL: num({ default: CACHE_TTL_NO_CACHE }), DATA_SOURCE_EXCHANGE_RATES: str({ default: DataSource.YAHOO }), diff --git a/apps/api/src/services/interfaces/environment.interface.ts b/apps/api/src/services/interfaces/environment.interface.ts index eb3ac86a3..57c58898e 100644 --- a/apps/api/src/services/interfaces/environment.interface.ts +++ b/apps/api/src/services/interfaces/environment.interface.ts @@ -10,7 +10,6 @@ export interface Environment extends CleanedEnvAccessors { API_KEY_FINANCIAL_MODELING_PREP: string; API_KEY_OPEN_FIGI: string; API_KEY_RAPID_API: string; - BULL_BOARD_IS_READ_ONLY: boolean; CACHE_QUOTES_TTL: number; CACHE_TTL: number; DATA_SOURCE_EXCHANGE_RATES: string; diff --git a/apps/api/src/services/queues/data-gathering/data-gathering.module.ts b/apps/api/src/services/queues/data-gathering/data-gathering.module.ts index 5672df5e8..5ac6c40c0 100644 --- a/apps/api/src/services/queues/data-gathering/data-gathering.module.ts +++ b/apps/api/src/services/queues/data-gathering/data-gathering.module.ts @@ -23,8 +23,7 @@ import { DataGatheringProcessor } from './data-gathering.processor'; adapter: BullAdapter, name: DATA_GATHERING_QUEUE, options: { - displayName: 'Data Gathering', - readOnlyMode: process.env.BULL_BOARD_IS_READ_ONLY !== 'false' + displayName: 'Data Gathering' } }), BullModule.registerQueue({ diff --git a/apps/api/src/services/queues/portfolio-snapshot/portfolio-snapshot.module.ts b/apps/api/src/services/queues/portfolio-snapshot/portfolio-snapshot.module.ts index c90f826f6..0da529821 100644 --- a/apps/api/src/services/queues/portfolio-snapshot/portfolio-snapshot.module.ts +++ b/apps/api/src/services/queues/portfolio-snapshot/portfolio-snapshot.module.ts @@ -29,8 +29,7 @@ import { PortfolioSnapshotProcessor } from './portfolio-snapshot.processor'; adapter: BullAdapter, name: PORTFOLIO_SNAPSHOT_COMPUTATION_QUEUE, options: { - displayName: 'Portfolio Snapshot Computation', - readOnlyMode: process.env.BULL_BOARD_IS_READ_ONLY !== 'false' + displayName: 'Portfolio Snapshot Computation' } }), BullModule.registerQueue({ diff --git a/apps/api/src/services/queues/statistics-gathering/statistics-gathering.module.ts b/apps/api/src/services/queues/statistics-gathering/statistics-gathering.module.ts index d6f6d5ccd..6ef14e29c 100644 --- a/apps/api/src/services/queues/statistics-gathering/statistics-gathering.module.ts +++ b/apps/api/src/services/queues/statistics-gathering/statistics-gathering.module.ts @@ -20,8 +20,7 @@ import { StatisticsGatheringService } from './statistics-gathering.service'; adapter: BullAdapter, name: STATISTICS_GATHERING_QUEUE, options: { - displayName: 'Statistics Gathering', - readOnlyMode: process.env.BULL_BOARD_IS_READ_ONLY !== 'false' + displayName: 'Statistics Gathering' } }) ] diff --git a/apps/client/src/app/components/admin-jobs/admin-jobs.component.ts b/apps/client/src/app/components/admin-jobs/admin-jobs.component.ts index b4c228881..fd90bff2c 100644 --- a/apps/client/src/app/components/admin-jobs/admin-jobs.component.ts +++ b/apps/client/src/app/components/admin-jobs/admin-jobs.component.ts @@ -1,8 +1,5 @@ -import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; import { - BULL_BOARD_COOKIE_NAME, - BULL_BOARD_ROUTE, DATA_GATHERING_QUEUE_PRIORITY_HIGH, DATA_GATHERING_QUEUE_PRIORITY_LOW, DATA_GATHERING_QUEUE_PRIORITY_MEDIUM, @@ -10,7 +7,6 @@ import { } from '@ghostfolio/common/config'; import { getDateWithTimeFormatString } from '@ghostfolio/common/helper'; import { AdminJobs, User } from '@ghostfolio/common/interfaces'; -import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { NotificationService } from '@ghostfolio/ui/notifications'; import { AdminService } from '@ghostfolio/ui/services'; @@ -106,7 +102,6 @@ export class GfAdminJobsComponent implements OnInit { 'actions' ]; - protected hasPermissionToAccessBullBoard = false; protected isLoading = false; protected readonly statusFilterOptions = QUEUE_JOB_STATUS_LIST; @@ -116,7 +111,6 @@ export class GfAdminJobsComponent implements OnInit { private readonly changeDetectorRef = inject(ChangeDetectorRef); private readonly destroyRef = inject(DestroyRef); private readonly notificationService = inject(NotificationService); - private readonly tokenStorageService = inject(TokenStorageService); private readonly userService = inject(UserService); public constructor() { @@ -129,11 +123,6 @@ export class GfAdminJobsComponent implements OnInit { this.defaultDateTimeFormat = getDateWithTimeFormatString( this.user.settings.locale ); - - this.hasPermissionToAccessBullBoard = hasPermission( - this.user.permissions, - permissions.accessAdminControlBullBoard - ); } }); @@ -193,18 +182,6 @@ export class GfAdminJobsComponent implements OnInit { }); } - protected onOpenBullBoard() { - const token = this.tokenStorageService.getToken(); - - document.cookie = [ - `${BULL_BOARD_COOKIE_NAME}=${encodeURIComponent(token)}`, - 'path=/', - 'SameSite=Strict' - ].join('; '); - - window.open(BULL_BOARD_ROUTE, '_blank'); - } - protected onViewData(aData: AdminJobs['jobs'][0]['data']) { this.notificationService.alert({ title: JSON.stringify(aData, null, ' ') diff --git a/apps/client/src/app/components/admin-jobs/admin-jobs.html b/apps/client/src/app/components/admin-jobs/admin-jobs.html index d57704b86..e615db31b 100644 --- a/apps/client/src/app/components/admin-jobs/admin-jobs.html +++ b/apps/client/src/app/components/admin-jobs/admin-jobs.html @@ -1,15 +1,6 @@
- @if (hasPermissionToAccessBullBoard) { -
- -
- } -
diff --git a/apps/client/src/app/pages/admin/admin-page.component.ts b/apps/client/src/app/pages/admin/admin-page.component.ts index b933ff058..c5da0fb0c 100644 --- a/apps/client/src/app/pages/admin/admin-page.component.ts +++ b/apps/client/src/app/pages/admin/admin-page.component.ts @@ -1,10 +1,19 @@ +import { TokenStorageService } from '@ghostfolio/client/services/token-storage.service'; +import { UserService } from '@ghostfolio/client/services/user/user.service'; +import { + BULL_BOARD_COOKIE_NAME, + BULL_BOARD_ROUTE +} from '@ghostfolio/common/config'; +import { User } from '@ghostfolio/common/interfaces'; +import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { internalRoutes } from '@ghostfolio/common/routes/routes'; import { GfPageTabsComponent, TabConfiguration } from '@ghostfolio/ui/page-tabs'; -import { Component, OnInit } from '@angular/core'; +import { Component, inject } from '@angular/core'; +import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { addIcons } from 'ionicons'; import { flashOutline, @@ -21,10 +30,23 @@ import { styleUrls: ['./admin-page.scss'], templateUrl: './admin-page.html' }) -export class AdminPageComponent implements OnInit { +export class AdminPageComponent { public tabs: TabConfiguration[] = []; + private user: User; + + private readonly tokenStorageService = inject(TokenStorageService); + private readonly userService = inject(UserService); + public constructor() { + this.userService.stateChanged + .pipe(takeUntilDestroyed()) + .subscribe((state) => { + this.user = state?.user; + + this.initializeTabs(); + }); + addIcons({ flashOutline, peopleOutline, @@ -34,7 +56,12 @@ export class AdminPageComponent implements OnInit { }); } - public ngOnInit() { + private initializeTabs() { + const hasPermissionToAccessBullBoard = hasPermission( + this.user?.permissions, + permissions.accessAdminControlBullBoard + ); + this.tabs = [ { iconName: 'reader-outline', @@ -51,11 +78,19 @@ export class AdminPageComponent implements OnInit { label: internalRoutes.adminControl.subRoutes.marketData.title, routerLink: internalRoutes.adminControl.subRoutes.marketData.routerLink }, - { - iconName: 'flash-outline', - label: internalRoutes.adminControl.subRoutes.jobs.title, - routerLink: internalRoutes.adminControl.subRoutes.jobs.routerLink - }, + hasPermissionToAccessBullBoard + ? { + iconName: 'flash-outline', + label: $localize`Job Queue`, + onClick: () => { + this.onOpenBullBoard(); + } + } + : { + iconName: 'flash-outline', + label: internalRoutes.adminControl.subRoutes.jobs.title, + routerLink: internalRoutes.adminControl.subRoutes.jobs.routerLink + }, { iconName: 'people-outline', label: internalRoutes.adminControl.subRoutes.users.title, @@ -63,4 +98,16 @@ export class AdminPageComponent implements OnInit { } ]; } + + private onOpenBullBoard() { + const token = this.tokenStorageService.getToken(); + + document.cookie = [ + `${BULL_BOARD_COOKIE_NAME}=${encodeURIComponent(token)}`, + 'path=/', + 'SameSite=Strict' + ].join('; '); + + window.open(BULL_BOARD_ROUTE, '_blank'); + } } diff --git a/libs/ui/src/lib/page-tabs/interfaces/interfaces.ts b/libs/ui/src/lib/page-tabs/interfaces/interfaces.ts index 7b18b26ec..3d44d2870 100644 --- a/libs/ui/src/lib/page-tabs/interfaces/interfaces.ts +++ b/libs/ui/src/lib/page-tabs/interfaces/interfaces.ts @@ -1,6 +1,11 @@ -export interface TabConfiguration { +interface BaseTabConfiguration { iconName: string; label: string; - routerLink: string[]; showCondition?: boolean; } + +export type TabConfiguration = BaseTabConfiguration & + ( + | { onClick: () => void; routerLink?: never } + | { onClick?: never; routerLink: string[] } + ); diff --git a/libs/ui/src/lib/page-tabs/page-tabs.component.html b/libs/ui/src/lib/page-tabs/page-tabs.component.html index fa9af9b11..28843148a 100644 --- a/libs/ui/src/lib/page-tabs/page-tabs.component.html +++ b/libs/ui/src/lib/page-tabs/page-tabs.component.html @@ -10,21 +10,40 @@ > @for (tab of tabs(); track tab) { @if (tab.showCondition !== false) { - - -
-
+ @if (tab.onClick) { + + } @else { + + + + } } } + + + +
+
diff --git a/libs/ui/src/lib/page-tabs/page-tabs.component.ts b/libs/ui/src/lib/page-tabs/page-tabs.component.ts index 61c2caf05..a6ab9cb18 100644 --- a/libs/ui/src/lib/page-tabs/page-tabs.component.ts +++ b/libs/ui/src/lib/page-tabs/page-tabs.component.ts @@ -1,3 +1,4 @@ +import { NgTemplateOutlet } from '@angular/common'; import { ChangeDetectionStrategy, Component, @@ -13,7 +14,7 @@ import { TabConfiguration } from './interfaces/interfaces'; @Component({ changeDetection: ChangeDetectionStrategy.OnPush, - imports: [IonIcon, MatTabsModule, RouterModule], + imports: [IonIcon, MatTabsModule, NgTemplateOutlet, RouterModule], selector: 'gf-page-tabs', styleUrls: ['./page-tabs.component.scss'], templateUrl: './page-tabs.component.html' From b55394b2dc1dc28bf7d83718e218759b35cce0bc Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 14 Jun 2026 10:38:47 +0200 Subject: [PATCH 38/74] Task/improve styling of page tabs component on desktop (#7032) * Improve styling * Update changelog --- CHANGELOG.md | 1 + .../lib/page-tabs/page-tabs.component.html | 6 +-- .../lib/page-tabs/page-tabs.component.scss | 43 +++++++++++++++++-- 3 files changed, 44 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d402bf8f5..95770cad9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- Improved the styling of the page tabs component on desktop - Enabled the _Bull Dashboard_ tab in the admin control panel (experimental) - Upgraded `bull-board` from version `7.1.5` to `7.2.1` diff --git a/libs/ui/src/lib/page-tabs/page-tabs.component.html b/libs/ui/src/lib/page-tabs/page-tabs.component.html index 28843148a..051005790 100644 --- a/libs/ui/src/lib/page-tabs/page-tabs.component.html +++ b/libs/ui/src/lib/page-tabs/page-tabs.component.html @@ -12,7 +12,7 @@ @if (tab.showCondition !== false) { @if (tab.onClick) { - -
+
+ + +
+ From 5224e6a335deac1265c3a400f54eb2c92203bbac Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sun, 14 Jun 2026 19:08:00 +0200 Subject: [PATCH 43/74] Bugfix/improve loading state when customizing rule thresholds on X-ray page (#7039) * Improve loading state * Update changelog --- CHANGELOG.md | 4 ++++ apps/client/src/app/components/rules/rules.component.html | 4 +--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 632ad7330..5f1fa380c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Upgraded `bull-board` from version `7.1.5` to `7.2.1` - Upgraded `date-fns` from version `4.1.0` to `4.4.0` +### Fixed + +- Improved the loading state when customizing the rule thresholds on the _X-ray_ page + ## 3.10.0 - 2026-06-13 ### Changed diff --git a/apps/client/src/app/components/rules/rules.component.html b/apps/client/src/app/components/rules/rules.component.html index 0c3153c52..97b41e61b 100644 --- a/apps/client/src/app/components/rules/rules.component.html +++ b/apps/client/src/app/components/rules/rules.component.html @@ -3,9 +3,7 @@
@if (isLoading) { - } - - @if (rules !== null && rules !== undefined) { + } @else if (rules) { @for (rule of rules; track rule.key) { Date: Sun, 14 Jun 2026 19:11:24 +0200 Subject: [PATCH 44/74] Release 3.11.0 (#7040) --- 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 5f1fa380c..4f023da8f 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 +## 3.11.0 - 2026-06-14 ### Added diff --git a/package-lock.json b/package-lock.json index 8c4708aa6..9a1d96138 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ghostfolio", - "version": "3.10.0", + "version": "3.11.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ghostfolio", - "version": "3.10.0", + "version": "3.11.0", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { diff --git a/package.json b/package.json index a7659e007..56d673d40 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "3.10.0", + "version": "3.11.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", From 588a6401fa4cf0352bac83890933c62331bb75d6 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Mon, 15 Jun 2026 19:02:20 +0200 Subject: [PATCH 45/74] Task/improve styling of checkboxes (#7046) * Improve styling * Update changelog --- CHANGELOG.md | 6 ++++++ apps/client/src/styles/theme.scss | 5 ++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4f023da8f..d384cd430 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + +### Changed + +- Improved the styling of the checkboxes to consistently use the primary color in their states + ## 3.11.0 - 2026-06-14 ### Added diff --git a/apps/client/src/styles/theme.scss b/apps/client/src/styles/theme.scss index ef2fa397c..75ecc210d 100644 --- a/apps/client/src/styles/theme.scss +++ b/apps/client/src/styles/theme.scss @@ -312,7 +312,10 @@ $gf-typography: ( @include mat.checkbox-overrides( ( - selected-icon-color: var(--gf-theme-primary-500) + selected-focus-icon-color: var(--gf-theme-primary-500), + selected-hover-icon-color: var(--gf-theme-primary-500), + selected-icon-color: var(--gf-theme-primary-500), + selected-pressed-icon-color: var(--gf-theme-primary-500) ) ); From d4610df0fe2b9dcef28f689e2c5aa837088183b6 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Mon, 15 Jun 2026 19:41:10 +0200 Subject: [PATCH 46/74] Task/improve user id display in admin users component (#7048) * Do not wrap user id * Update changelog --- CHANGELOG.md | 1 + apps/client/src/app/components/admin-users/admin-users.html | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d384cd430..57ebb1f04 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 - Improved the styling of the checkboxes to consistently use the primary color in their states +- Improved the user id display in the users table of the admin control panel ## 3.11.0 - 2026-06-14 diff --git a/apps/client/src/app/components/admin-users/admin-users.html b/apps/client/src/app/components/admin-users/admin-users.html index 87ab9defc..0899c57d1 100644 --- a/apps/client/src/app/components/admin-users/admin-users.html +++ b/apps/client/src/app/components/admin-users/admin-users.html @@ -16,7 +16,7 @@ class="mat-mdc-cell px-1 py-2" mat-cell > -
+
Date: Mon, 15 Jun 2026 19:53:53 +0200 Subject: [PATCH 47/74] Task/improve link to GitHub discussions (#7045) * Improve links * Update translation * Update changelog --- CHANGELOG.md | 1 + .../src/app/pages/about/overview/about-overview-page.html | 2 +- apps/client/src/app/pages/faq/overview/faq-overview-page.html | 2 +- apps/client/src/app/pages/faq/saas/saas-page.html | 2 +- .../src/app/pages/faq/self-hosting/self-hosting-page.html | 2 +- apps/client/src/locales/messages.de.xlf | 2 +- 6 files changed, 6 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 57ebb1f04..4a799aa55 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Improved the styling of the checkboxes to consistently use the primary color in their states - Improved the user id display in the users table of the admin control panel +- Improved the language localization for German (`de`) ## 3.11.0 - 2026-06-14 diff --git a/apps/client/src/app/pages/about/overview/about-overview-page.html b/apps/client/src/app/pages/about/overview/about-overview-page.html index c28a63be2..ede2be190 100644 --- a/apps/client/src/app/pages/about/overview/about-overview-page.html +++ b/apps/client/src/app/pages/about/overview/about-overview-page.html @@ -94,7 +94,7 @@ or start a discussion at   GitHubGitHub.GitHub. or start a discussion at GitHub. or start a discussion at - oder beginne eine Diskussion unter + oder beginne eine Diskussion bei apps/client/src/app/pages/about/overview/about-overview-page.html 94 From 10fffd68cb749ab52aed06beeb5567f3076978bd Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Mon, 15 Jun 2026 19:55:21 +0200 Subject: [PATCH 48/74] Task/improve name display in activities table (#7043) * Do not wrap name * Update changelog --- CHANGELOG.md | 1 + .../activities-table/activities-table.component.html | 12 +++++------- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4a799aa55..c981ab664 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 - Improved the styling of the checkboxes to consistently use the primary color in their states +- Improved the name display in the activities table - Improved the user id display in the users table of the admin control panel - Improved the language localization for German (`de`) diff --git a/libs/ui/src/lib/activities-table/activities-table.component.html b/libs/ui/src/lib/activities-table/activities-table.component.html index 1e57e8c7e..0041f5a14 100644 --- a/libs/ui/src/lib/activities-table/activities-table.component.html +++ b/libs/ui/src/lib/activities-table/activities-table.component.html @@ -161,13 +161,11 @@ Name -
-
- {{ element.SymbolProfile?.name }} - @if (element.isDraft) { - Draft - } -
+
+ {{ element.SymbolProfile?.name }} + @if (element.isDraft) { + Draft + }
@if ( element.SymbolProfile?.dataSource !== 'MANUAL' && From 9d06b3befa3e8e915dcc458caee7379259d64f04 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Mon, 15 Jun 2026 19:58:13 +0200 Subject: [PATCH 49/74] Bugfix/chart error on interaction by registering annotation plugin early (#7049) * Fix chart error on interaction * Update changelog --- CHANGELOG.md | 4 ++++ .../benchmark-comparator/benchmark-comparator.component.ts | 2 -- .../investment-chart/investment-chart.component.ts | 5 +---- apps/client/src/main.ts | 3 +++ libs/ui/src/lib/chart/chart.registry.ts | 7 ++++++- 5 files changed, 14 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c981ab664..1ea25489d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Improved the user id display in the users table of the admin control panel - Improved the language localization for German (`de`) +### Fixed + +- Fixed a chart error on interaction by registering the annotation plugin early + ## 3.11.0 - 2026-06-14 ### Added diff --git a/apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts b/apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts index 8d13fb91d..c474e29ab 100644 --- a/apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts +++ b/apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts @@ -44,7 +44,6 @@ import { type TooltipOptions } from 'chart.js'; import 'chartjs-adapter-date-fns'; -import annotationPlugin from 'chartjs-plugin-annotation'; import { addIcons } from 'ionicons'; import { arrowForwardOutline } from 'ionicons/icons'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; @@ -86,7 +85,6 @@ export class GfBenchmarkComparatorComponent implements OnChanges, OnDestroy { public constructor() { Chart.register( - annotationPlugin, LinearScale, LineController, LineElement, diff --git a/apps/client/src/app/components/investment-chart/investment-chart.component.ts b/apps/client/src/app/components/investment-chart/investment-chart.component.ts index e55aebdda..dc3152f12 100644 --- a/apps/client/src/app/components/investment-chart/investment-chart.component.ts +++ b/apps/client/src/app/components/investment-chart/investment-chart.component.ts @@ -40,9 +40,7 @@ import { type TooltipOptions } from 'chart.js'; import 'chartjs-adapter-date-fns'; -import annotationPlugin, { - type AnnotationOptions -} from 'chartjs-plugin-annotation'; +import { type AnnotationOptions } from 'chartjs-plugin-annotation'; import { isAfter } from 'date-fns'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; @@ -74,7 +72,6 @@ export class GfInvestmentChartComponent implements OnChanges, OnDestroy { public constructor() { Chart.register( - annotationPlugin, BarController, BarElement, LinearScale, diff --git a/apps/client/src/main.ts b/apps/client/src/main.ts index f596de5f4..45901baec 100644 --- a/apps/client/src/main.ts +++ b/apps/client/src/main.ts @@ -1,5 +1,6 @@ import { InfoResponse } from '@ghostfolio/common/interfaces'; import { filterGlobalPermissions } from '@ghostfolio/common/permissions'; +import { registerChartConfiguration } from '@ghostfolio/ui/chart'; import { GF_ENVIRONMENT } from '@ghostfolio/ui/environment'; import { GfNotificationModule } from '@ghostfolio/ui/notifications'; @@ -58,6 +59,8 @@ import { environment } from './environments/environment'; enableProdMode(); } + registerChartConfiguration(); + await bootstrapApplication(GfAppComponent, { providers: [ authInterceptorProviders, diff --git a/libs/ui/src/lib/chart/chart.registry.ts b/libs/ui/src/lib/chart/chart.registry.ts index 465d6e716..a6a8b3e55 100644 --- a/libs/ui/src/lib/chart/chart.registry.ts +++ b/libs/ui/src/lib/chart/chart.registry.ts @@ -1,6 +1,7 @@ import { getTooltipPositionerMapTop } from '@ghostfolio/common/chart-helper'; -import { Tooltip, TooltipPositionerFunction, ChartType } from 'chart.js'; +import { Chart, Tooltip, TooltipPositionerFunction, ChartType } from 'chart.js'; +import annotationPlugin from 'chartjs-plugin-annotation'; interface VerticalHoverLinePluginOptions { color?: string; @@ -23,6 +24,10 @@ export function registerChartConfiguration() { return; } + // Register the annotation plugin early so that every chart is initialized + // with its state and does not crash on interaction + Chart.register(annotationPlugin); + Tooltip.positioners.top = function (_elements, eventPosition) { return getTooltipPositionerMapTop(this.chart, eventPosition); }; From f4d17c786ae94e36251049a3a537d9addd01b7ed Mon Sep 17 00:00:00 2001 From: Parman Mohammadalizadeh Date: Mon, 15 Jun 2026 21:44:29 +0330 Subject: [PATCH 50/74] Bugfix/open account details dialog on allocations page (#6988) * Fix open account details dialog * Update changelog --------- Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> --- CHANGELOG.md | 1 + .../allocations/allocations-page.component.ts | 6 +++--- .../interfaces/interfaces.ts | 5 +++++ .../portfolio-proportion-chart.component.ts | 18 +++++++++--------- 4 files changed, 18 insertions(+), 12 deletions(-) create mode 100644 libs/ui/src/lib/portfolio-proportion-chart/interfaces/interfaces.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 1ea25489d..cbd9369b6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Fixed a chart error on interaction by registering the annotation plugin early +- Fixed an issue on the allocations page where clicking an account in the _By Account_ chart did not open the detail dialog ## 3.11.0 - 2026-06-14 diff --git a/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts b/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts index d53977ae8..26601ad59 100644 --- a/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts +++ b/apps/client/src/app/pages/portfolio/allocations/allocations-page.component.ts @@ -185,10 +185,10 @@ export class GfAllocationsPageComponent implements OnInit { this.initialize(); } - public onAccountChartClicked({ symbol }: AssetProfileIdentifier) { - if (symbol && symbol !== UNKNOWN_KEY) { + public onAccountChartClicked({ accountId }: { accountId: string }) { + if (accountId && accountId !== UNKNOWN_KEY) { this.router.navigate([], { - queryParams: { accountId: symbol, accountDetailDialog: true } + queryParams: { accountId, accountDetailDialog: true } }); } } diff --git a/libs/ui/src/lib/portfolio-proportion-chart/interfaces/interfaces.ts b/libs/ui/src/lib/portfolio-proportion-chart/interfaces/interfaces.ts new file mode 100644 index 000000000..25d12b049 --- /dev/null +++ b/libs/ui/src/lib/portfolio-proportion-chart/interfaces/interfaces.ts @@ -0,0 +1,5 @@ +import { AssetProfileIdentifier } from '@ghostfolio/common/interfaces'; + +export type PortfolioProportionChartClickEvent = + | AssetProfileIdentifier + | { accountId: string }; diff --git a/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts b/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts index e2c41e956..bf6fd193e 100644 --- a/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts +++ b/libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts @@ -1,10 +1,7 @@ import { getTooltipOptions } from '@ghostfolio/common/chart-helper'; import { UNKNOWN_KEY } from '@ghostfolio/common/config'; import { getLocale, getSum, getTextColor } from '@ghostfolio/common/helper'; -import { - AssetProfileIdentifier, - PortfolioPosition -} from '@ghostfolio/common/interfaces'; +import { PortfolioPosition } from '@ghostfolio/common/interfaces'; import { ColorScheme } from '@ghostfolio/common/types'; import { @@ -36,6 +33,8 @@ import Color from 'color'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; import OpenColor from 'open-color'; +import { PortfolioProportionChartClickEvent } from './interfaces/interfaces'; + const { blue, cyan, @@ -80,7 +79,8 @@ export class GfPortfolioProportionChartComponent public chart: Chart<'doughnut'>; public isLoading = true; - protected readonly proportionChartClicked = output(); + protected readonly proportionChartClicked = + output(); private readonly OTHER_KEY = 'OTHER'; @@ -355,11 +355,11 @@ export class GfPortfolioProportionChartComponent const dataIndex = activeElements[0].index; const symbol = chart.data.labels?.[dataIndex] as string; - const dataSource = this.data[symbol].dataSource; + const dataSource = this.data[symbol]?.dataSource; - if (dataSource) { - this.proportionChartClicked.emit({ dataSource, symbol }); - } + this.proportionChartClicked.emit( + dataSource ? { dataSource, symbol } : { accountId: symbol } + ); } catch {} }, onHover: (event, chartElement) => { From 5bb8bf834b435662446a4dd85db06610af3991a2 Mon Sep 17 00:00:00 2001 From: Kenrick Tandrian <60643640+KenTandrian@users.noreply.github.com> Date: Wed, 17 Jun 2026 01:16:44 +0700 Subject: [PATCH 51/74] Task/improve type safety in holding detail dialog component (#7050) Improve type safety --- .../holding-detail-dialog.component.ts | 208 +++++++++--------- libs/common/src/lib/interfaces/index.ts | 6 +- .../interfaces/line-chart-item.interface.ts | 6 +- ...historical-market-data-editor.component.ts | 6 +- libs/ui/src/lib/services/data.service.ts | 25 ++- 5 files changed, 137 insertions(+), 114 deletions(-) diff --git a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts index 416e9106d..08c8a7a1e 100644 --- a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts +++ b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts @@ -16,6 +16,7 @@ import { EnhancedSymbolProfile, Filter, LineChartItem, + NullableLineChartItem, User } from '@ghostfolio/common/interfaces'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; @@ -39,11 +40,16 @@ import { ChangeDetectorRef, Component, DestroyRef, - Inject, - OnInit + OnInit, + inject } from '@angular/core'; import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; -import { FormBuilder, FormGroup, ReactiveFormsModule } from '@angular/forms'; +import { + FormBuilder, + FormControl, + FormGroup, + ReactiveFormsModule +} from '@angular/forms'; import { MatButtonModule } from '@angular/material/button'; import { MatChipsModule } from '@angular/material/chips'; import { @@ -71,6 +77,7 @@ import { swapVerticalOutline, walletOutline } from 'ionicons/icons'; +import { isNumber } from 'lodash'; import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader'; import { switchMap } from 'rxjs/operators'; @@ -106,75 +113,78 @@ import { HoldingDetailDialogParams } from './interfaces/interfaces'; templateUrl: 'holding-detail-dialog.html' }) export class GfHoldingDetailDialogComponent implements OnInit { - public activitiesCount: number; - public accounts: Account[]; - public assetClass: string; - public assetSubClass: string; - public averagePrice: number; - public averagePricePrecision = 2; - public benchmarkDataItems: LineChartItem[]; - public benchmarkLabel = $localize`Average Unit Price`; - public countries: { + protected accounts: Account[]; + protected activitiesCount: number; + protected assetClass: string; + protected assetSubClass: string; + protected averagePrice: number; + protected averagePricePrecision = 2; + protected benchmarkDataItems: NullableLineChartItem[]; + protected readonly benchmarkLabel = $localize`Average Unit Price`; + protected countries: { [code: string]: { name: string; value: number }; }; - public dataProviderInfo: DataProviderInfo; - public dataSource: MatTableDataSource; - public dateOfFirstActivity: string; - public dividendInBaseCurrency: number; - public dividendInBaseCurrencyPrecision = 2; - public dividendYieldPercentWithCurrencyEffect: number; - public feeInBaseCurrency: number; - public getCountryName = getCountryName; - public hasPermissionToCreateOwnTag: boolean; - public hasPermissionToReadMarketDataOfOwnAssetProfile: boolean; - public historicalDataItems: LineChartItem[]; - public holdingForm: FormGroup; - public investmentInBaseCurrencyWithCurrencyEffect: number; - public investmentInBaseCurrencyWithCurrencyEffectPrecision = 2; - public isUUID = isUUID; - public marketDataItems: MarketData[] = []; - public marketPrice: number; - public marketPriceMax: number; - public marketPriceMaxPrecision = 2; - public marketPriceMin: number; - public marketPriceMinPrecision = 2; - public marketPricePrecision = 2; - public netPerformance: number; - public netPerformancePrecision = 2; - public netPerformancePercent: number; - public netPerformancePercentWithCurrencyEffect: number; - public netPerformancePercentWithCurrencyEffectPrecision = 2; - public netPerformanceWithCurrencyEffect: number; - public netPerformanceWithCurrencyEffectPrecision = 2; - public pageIndex = 0; - public pageSize = DEFAULT_PAGE_SIZE; - public quantity: number; - public quantityPrecision = 2; - public reportDataGlitchMail: string; - public routerLinkAdminControlMarketData = + protected dataProviderInfo: DataProviderInfo; + protected dataSource: MatTableDataSource; + protected dateOfFirstActivity: Date; + protected dividendInBaseCurrency: number; + protected dividendInBaseCurrencyPrecision = 2; + protected dividendYieldPercentWithCurrencyEffect: number; + protected feeInBaseCurrency: number; + protected readonly getCountryName = getCountryName; + protected hasPermissionToCreateOwnTag: boolean; + protected hasPermissionToReadMarketDataOfOwnAssetProfile: boolean; + protected historicalDataItems: LineChartItem[]; + protected holdingForm: FormGroup<{ + tags: FormControl; + }>; + protected investmentInBaseCurrencyWithCurrencyEffect: number; + protected investmentInBaseCurrencyWithCurrencyEffectPrecision = 2; + protected readonly isUUID = isUUID; + protected marketDataItems: MarketData[] = []; + protected marketPrice: number; + protected marketPriceMax: number; + protected marketPriceMaxPrecision = 2; + protected marketPriceMin: number; + protected marketPriceMinPrecision = 2; + protected marketPricePrecision = 2; + protected netPerformancePercentWithCurrencyEffect: number; + protected netPerformancePercentWithCurrencyEffectPrecision = 2; + protected netPerformanceWithCurrencyEffect: number; + protected netPerformanceWithCurrencyEffectPrecision = 2; + protected pageIndex = 0; + protected readonly pageSize = DEFAULT_PAGE_SIZE; + protected quantity: number; + protected quantityPrecision = 2; + protected reportDataGlitchMail: string; + protected readonly routerLinkAdminControlMarketData = internalRoutes.adminControl.subRoutes.marketData.routerLink; - public sectors: { + protected sectors: { [name: string]: { name: string; value: number }; }; - public sortColumn = 'date'; - public sortDirection: SortDirection = 'desc'; - public SymbolProfile: EnhancedSymbolProfile; - public tags: Tag[]; - public tagsAvailable: Tag[]; - public translate = translate; - public user: User; - public value: number; - - public constructor( - private changeDetectorRef: ChangeDetectorRef, - private dataService: DataService, - private destroyRef: DestroyRef, - public dialogRef: MatDialogRef, - @Inject(MAT_DIALOG_DATA) public data: HoldingDetailDialogParams, - private formBuilder: FormBuilder, - private router: Router, - private userService: UserService - ) { + protected sortColumn = 'date'; + protected sortDirection: SortDirection = 'desc'; + protected SymbolProfile: EnhancedSymbolProfile; + protected tagsAvailable: Tag[]; + protected readonly translate = translate; + protected user: User; + protected value: number; + + protected readonly data = inject(MAT_DIALOG_DATA); + protected readonly dialogRef = inject( + MatDialogRef + ); + + private tags: Tag[]; + + private readonly changeDetectorRef = inject(ChangeDetectorRef); + private readonly dataService = inject(DataService); + private readonly destroyRef = inject(DestroyRef); + private readonly formBuilder = inject(FormBuilder); + private readonly router = inject(Router); + private readonly userService = inject(UserService); + + public constructor() { addIcons({ arrowDownCircleOutline, createOutline, @@ -190,12 +200,11 @@ export class GfHoldingDetailDialogComponent implements OnInit { const filters = this.getActivityFilters(); this.holdingForm = this.formBuilder.group({ - tags: [] as string[] + tags: new FormControl([]) }); - this.holdingForm - .get('tags') - .valueChanges.pipe(takeUntilDestroyed(this.destroyRef)) + this.holdingForm.controls.tags.valueChanges + .pipe(takeUntilDestroyed(this.destroyRef)) .subscribe((tags: Tag[]) => { const newTag = tags.find(({ id }) => { return id === undefined; @@ -268,8 +277,6 @@ export class GfHoldingDetailDialogComponent implements OnInit { marketPrice, marketPriceMax, marketPriceMin, - netPerformance, - netPerformancePercent, netPerformancePercentWithCurrencyEffect, netPerformanceWithCurrencyEffect, quantity, @@ -290,7 +297,11 @@ export class GfHoldingDetailDialogComponent implements OnInit { this.benchmarkDataItems = []; this.countries = {}; this.dataProviderInfo = dataProviderInfo; - this.dateOfFirstActivity = dateOfFirstActivity; + + if (dateOfFirstActivity) { + this.dateOfFirstActivity = dateOfFirstActivity; + } + this.dividendInBaseCurrency = dividendInBaseCurrency; if ( @@ -318,12 +329,12 @@ export class GfHoldingDetailDialogComponent implements OnInit { ({ averagePrice, date, marketPrice }) => { this.benchmarkDataItems.push({ date, - value: averagePrice + value: isNumber(averagePrice) ? averagePrice : null }); return { date, - value: marketPrice + value: marketPrice ?? 0 }; } ); @@ -365,17 +376,6 @@ export class GfHoldingDetailDialogComponent implements OnInit { this.marketPricePrecision = 0; } - this.netPerformance = netPerformance; - - if ( - this.data.deviceType === 'mobile' && - this.netPerformance >= NUMERICAL_PRECISION_THRESHOLD_5_FIGURES - ) { - this.netPerformancePrecision = 0; - } - - this.netPerformancePercent = netPerformancePercent; - this.netPerformancePercentWithCurrencyEffect = netPerformancePercentWithCurrencyEffect; @@ -456,16 +456,16 @@ export class GfHoldingDetailDialogComponent implements OnInit { } } - if (isToday(parseISO(this.dateOfFirstActivity))) { + if (isToday(this.dateOfFirstActivity)) { // Add average price this.historicalDataItems.push({ - date: this.dateOfFirstActivity, + date: this.dateOfFirstActivity.toISOString(), value: this.averagePrice }); // Add benchmark 1 this.benchmarkDataItems.push({ - date: this.dateOfFirstActivity, + date: this.dateOfFirstActivity.toISOString(), value: averagePrice }); @@ -496,7 +496,7 @@ export class GfHoldingDetailDialogComponent implements OnInit { if ( this.benchmarkDataItems[0]?.value === undefined && - isSameMonth(parseISO(this.dateOfFirstActivity), new Date()) + isSameMonth(this.dateOfFirstActivity, new Date()) ) { this.benchmarkDataItems[0].value = this.averagePrice; } @@ -526,7 +526,7 @@ export class GfHoldingDetailDialogComponent implements OnInit { this.hasPermissionToCreateOwnTag = hasPermission(this.user.permissions, permissions.createOwnTag) && - this.user?.settings?.isExperimentalFeatures; + (this.user?.settings?.isExperimentalFeatures ?? false); this.tagsAvailable = this.user?.tags?.map((tag) => { @@ -541,13 +541,13 @@ export class GfHoldingDetailDialogComponent implements OnInit { }); } - public onChangePage(page: PageEvent) { + protected onChangePage(page: PageEvent) { this.pageIndex = page.pageIndex; this.fetchActivities(); } - public onCloneActivity(aActivity: Activity) { + protected onCloneActivity(aActivity: Activity) { this.router.navigate( internalRoutes.portfolio.subRoutes.activities.routerLink, { @@ -558,22 +558,22 @@ export class GfHoldingDetailDialogComponent implements OnInit { this.dialogRef.close(); } - public onClose() { + protected onClose() { this.dialogRef.close(); } - public onCloseHolding() { + protected onCloseHolding() { const today = new Date(); const activity: CreateOrderDto = { - accountId: this.accounts.length === 1 ? this.accounts[0].id : null, - comment: null, - currency: this.SymbolProfile.currency, - dataSource: this.SymbolProfile.dataSource, + accountId: this.accounts.length === 1 ? this.accounts[0].id : undefined, + comment: undefined, + currency: this.SymbolProfile?.currency ?? '', + dataSource: this.SymbolProfile?.dataSource, date: today.toISOString(), fee: 0, quantity: this.quantity, - symbol: this.SymbolProfile.symbol, + symbol: this.SymbolProfile?.symbol ?? '', tags: this.tags.map(({ id }) => { return id; }), @@ -593,7 +593,7 @@ export class GfHoldingDetailDialogComponent implements OnInit { }); } - public onExport() { + protected onExport() { const activityIds = this.dataSource.data.map(({ id }) => { return id; }); @@ -613,13 +613,13 @@ export class GfHoldingDetailDialogComponent implements OnInit { }); } - public onMarketDataChanged(withRefresh = false) { + protected onMarketDataChanged(withRefresh = false) { if (withRefresh) { this.fetchMarketData(); } } - public onUpdateActivity(aActivity: Activity) { + protected onUpdateActivity(aActivity: Activity) { this.router.navigate( internalRoutes.portfolio.subRoutes.activities.routerLink, { diff --git a/libs/common/src/lib/interfaces/index.ts b/libs/common/src/lib/interfaces/index.ts index 536fc0feb..8b8ec875c 100644 --- a/libs/common/src/lib/interfaces/index.ts +++ b/libs/common/src/lib/interfaces/index.ts @@ -25,7 +25,10 @@ import type { HoldingWithParents } from './holding-with-parents.interface'; import type { Holding } from './holding.interface'; import type { InfoItem } from './info-item.interface'; import type { InvestmentItem } from './investment-item.interface'; -import type { LineChartItem } from './line-chart-item.interface'; +import type { + LineChartItem, + NullableLineChartItem +} from './line-chart-item.interface'; import type { LookupItem } from './lookup-item.interface'; import type { MarketData } from './market-data.interface'; import type { PortfolioChart } from './portfolio-chart.interface'; @@ -158,6 +161,7 @@ export { MarketData, MarketDataDetailsResponse, MarketDataOfMarketsResponse, + NullableLineChartItem, OAuthResponse, PlatformsResponse, PortfolioChart, diff --git a/libs/common/src/lib/interfaces/line-chart-item.interface.ts b/libs/common/src/lib/interfaces/line-chart-item.interface.ts index e010ddfe6..43208f853 100644 --- a/libs/common/src/lib/interfaces/line-chart-item.interface.ts +++ b/libs/common/src/lib/interfaces/line-chart-item.interface.ts @@ -1,4 +1,6 @@ -export interface LineChartItem { +export interface LineChartItem { date: string; - value: number; + value: T; } + +export type NullableLineChartItem = LineChartItem; diff --git a/libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts b/libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts index cde180dd9..f99c34b03 100644 --- a/libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts +++ b/libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.ts @@ -68,7 +68,7 @@ export class GfHistoricalMarketDataEditorComponent @Input() currency: string; @Input() dataSource: DataSource; - @Input() dateOfFirstActivity: string; + @Input() dateOfFirstActivity: Date; @Input() symbol: string; @Input() user: User; @@ -124,7 +124,7 @@ export class GfHistoricalMarketDataEditorComponent public ngOnChanges() { if (this.dateOfFirstActivity) { - let date = parseISO(this.dateOfFirstActivity); + let date = this.dateOfFirstActivity; const missingMarketData: { date: Date; marketPrice?: number }[] = []; @@ -174,7 +174,7 @@ export class GfHistoricalMarketDataEditorComponent const dates = Object.keys(this.marketDataByMonth).sort(); const startDateString = first(dates); const startDate = min([ - parseISO(this.dateOfFirstActivity), + this.dateOfFirstActivity, ...(startDateString ? [parseISO(startDateString)] : []) ]); const endDateString = last(dates); diff --git a/libs/ui/src/lib/services/data.service.ts b/libs/ui/src/lib/services/data.service.ts index 2ae07708d..a3d8bec98 100644 --- a/libs/ui/src/lib/services/data.service.ts +++ b/libs/ui/src/lib/services/data.service.ts @@ -445,10 +445,27 @@ export class DataService { }: { dataSource: DataSource; symbol: string; - }) { - return this.http.get( - `/api/v1/portfolio/holding/${dataSource}/${symbol}` - ); + }): Observable< + Omit & { + dateOfFirstActivity: Date | undefined; + } + > { + return this.http + .get( + `/api/v1/portfolio/holding/${dataSource}/${symbol}` + ) + .pipe( + map((response) => { + const dateOfFirstActivity = response.dateOfFirstActivity + ? parseISO(response.dateOfFirstActivity) + : undefined; + + return { + ...response, + dateOfFirstActivity + }; + }) + ); } public fetchInfo(): InfoItem { From ebc911b9d4b7c26e514de829c5f0296b7c45c3bc Mon Sep 17 00:00:00 2001 From: Jorge Date: Wed, 17 Jun 2026 17:31:06 +0200 Subject: [PATCH 52/74] Bugfix/restrict maximum height of import activities dialog (#7047) * Restrict maximum height * Update changelog --- CHANGELOG.md | 1 + .../import-activities-dialog/import-activities-dialog.scss | 2 -- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cbd9369b6..459ab1dcf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed a chart error on interaction by registering the annotation plugin early - Fixed an issue on the allocations page where clicking an account in the _By Account_ chart did not open the detail dialog +- Restricted the maximum height of the import activities dialog ## 3.11.0 - 2026-06-14 diff --git a/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.scss b/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.scss index 64f488e36..0f3b181cc 100644 --- a/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.scss +++ b/apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.scss @@ -2,8 +2,6 @@ display: block; .mat-mdc-dialog-content { - max-height: unset; - a { color: rgba(var(--palette-primary-500), 1); } From 51e9a3c807edacc0751291a5d7d0860cfb72460d Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 17 Jun 2026 17:31:57 +0200 Subject: [PATCH 53/74] Task/improve account name display in accounts table (#7044) * Do not wrap account name * Update changelog --- CHANGELOG.md | 1 + libs/ui/src/lib/accounts-table/accounts-table.component.html | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 459ab1dcf..323f05c79 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 - Improved the styling of the checkboxes to consistently use the primary color in their states +- Improved the account name display in the accounts table - Improved the name display in the activities table - Improved the user id display in the users table of the admin control panel - Improved the language localization for German (`de`) diff --git a/libs/ui/src/lib/accounts-table/accounts-table.component.html b/libs/ui/src/lib/accounts-table/accounts-table.component.html index 1ba0ecc56..daedd5d66 100644 --- a/libs/ui/src/lib/accounts-table/accounts-table.component.html +++ b/libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -49,7 +49,7 @@ Name - + @if (element.platform?.url) { Date: Wed, 17 Jun 2026 19:01:32 +0200 Subject: [PATCH 54/74] Bugfix/dark mode styling of safe withdrawal rate selector in FIRE section (#7053) * Fix styling of safe withdrawal rate selector in dark mode * Update changelog --- CHANGELOG.md | 1 + apps/client/src/app/pages/portfolio/fire/fire-page.scss | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 323f05c79..5d68aa0de 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed a chart error on interaction by registering the annotation plugin early - Fixed an issue on the allocations page where clicking an account in the _By Account_ chart did not open the detail dialog - Restricted the maximum height of the import activities dialog +- Fixed the dark mode styling of the safe withdrawal rate selector in the _FIRE_ section (experimental) ## 3.11.0 - 2026-06-14 diff --git a/apps/client/src/app/pages/portfolio/fire/fire-page.scss b/apps/client/src/app/pages/portfolio/fire/fire-page.scss index 3a0618ed6..6a5f037e2 100644 --- a/apps/client/src/app/pages/portfolio/fire/fire-page.scss +++ b/apps/client/src/app/pages/portfolio/fire/fire-page.scss @@ -29,5 +29,9 @@ @include select-arrow(variables.$light-primary-text); color: rgb(var(--light-primary-text)); + + option { + color: rgb(var(--dark-primary-text)); + } } } From 1e41aa8ba0e9eb36b79a8b8f7d64d4f9eadc9bb6 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 17 Jun 2026 19:01:59 +0200 Subject: [PATCH 55/74] Task/upgrade svgmap to version 2.21.0 (#7036) * Upgrade svgmap to version 2.21.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 5d68aa0de..0ea139fc0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Improved the name display in the activities table - Improved the user id display in the users table of the admin control panel - Improved the language localization for German (`de`) +- Upgraded `svgmap` from version `2.19.3` to `2.21.0` ### Fixed diff --git a/package-lock.json b/package-lock.json index 9a1d96138..81e002229 100644 --- a/package-lock.json +++ b/package-lock.json @@ -91,7 +91,7 @@ "reflect-metadata": "0.2.2", "rxjs": "7.8.1", "stripe": "21.0.1", - "svgmap": "2.19.3", + "svgmap": "2.21.0", "tablemark": "4.1.0", "twitter-api-v2": "1.29.0", "undici": "7.24.4", @@ -36530,9 +36530,9 @@ "license": "BSD-2-Clause" }, "node_modules/svgmap": { - "version": "2.19.3", - "resolved": "https://registry.npmjs.org/svgmap/-/svgmap-2.19.3.tgz", - "integrity": "sha512-LjKVzKgANVMRiHqFQVz57FqqX7tVm+EskubySCWb5kvizdeDBanscPA/c4tmK/48VCvYxrR1ecBbqStcD6HYfQ==", + "version": "2.21.0", + "resolved": "https://registry.npmjs.org/svgmap/-/svgmap-2.21.0.tgz", + "integrity": "sha512-KQNP4rkkYe3D4EgqSxX+QoRzl13oDaOt5Oqe/ClIJme/u/AaQXMU+SXgt7iL4rfqK+lRc+15dXp+y7+zQg5WiA==", "license": "MIT", "dependencies": { "svg-pan-zoom": "^3.6.2" diff --git a/package.json b/package.json index 56d673d40..e8ae2286c 100644 --- a/package.json +++ b/package.json @@ -135,7 +135,7 @@ "reflect-metadata": "0.2.2", "rxjs": "7.8.1", "stripe": "21.0.1", - "svgmap": "2.19.3", + "svgmap": "2.21.0", "tablemark": "4.1.0", "twitter-api-v2": "1.29.0", "undici": "7.24.4", From 116357b797248117c10b5c94acb5dd5b4ca7cc8d Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 17 Jun 2026 20:26:26 +0200 Subject: [PATCH 56/74] Task/move referral partners to database (#7060) * Move referral partners to database --- apps/api/src/app/user/user.service.ts | 14 ++++++++++++++ .../app/pages/pricing/pricing-page.component.ts | 14 -------------- .../client/src/app/pages/pricing/pricing-page.html | 10 +++++----- libs/common/src/lib/config.ts | 1 + libs/common/src/lib/interfaces/index.ts | 2 ++ .../lib/interfaces/referral-partner.interface.ts | 3 +++ libs/common/src/lib/interfaces/user.interface.ts | 2 ++ 7 files changed, 27 insertions(+), 19 deletions(-) create mode 100644 libs/common/src/lib/interfaces/referral-partner.interface.ts diff --git a/apps/api/src/app/user/user.service.ts b/apps/api/src/app/user/user.service.ts index 9d8d9da9d..6d6041c81 100644 --- a/apps/api/src/app/user/user.service.ts +++ b/apps/api/src/app/user/user.service.ts @@ -29,6 +29,7 @@ import { DEFAULT_DATE_RANGE, DEFAULT_LANGUAGE_CODE, PROPERTY_IS_READ_ONLY_MODE, + PROPERTY_REFERRAL_PARTNERS, PROPERTY_SYSTEM_MESSAGE, TAG_ID_EXCLUDE_FROM_ANALYSIS, locale as defaultLocale @@ -36,6 +37,7 @@ import { import { SubscriptionType } from '@ghostfolio/common/enums'; import { User as IUser, + ReferralPartner, SystemMessage, UserSettings } from '@ghostfolio/common/interfaces'; @@ -153,6 +155,17 @@ export class UserService { (impersonationUserSettings?.settings as UserSettings)?.baseCurrency ?? (settings.settings as UserSettings)?.baseCurrency; + let referralPartners: ReferralPartner[]; + + if ( + this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION') && + subscription.type === SubscriptionType.Basic + ) { + referralPartners = await this.propertyService.getByKey( + PROPERTY_REFERRAL_PARTNERS + ); + } + let systemMessage: SystemMessage; const systemMessageProperty = @@ -179,6 +192,7 @@ export class UserService { activitiesCount, id, permissions, + referralPartners, subscription, systemMessage, tags, diff --git a/apps/client/src/app/pages/pricing/pricing-page.component.ts b/apps/client/src/app/pages/pricing/pricing-page.component.ts index a1fe0c0b5..c0e3848bb 100644 --- a/apps/client/src/app/pages/pricing/pricing-page.component.ts +++ b/apps/client/src/app/pages/pricing/pricing-page.component.ts @@ -68,20 +68,6 @@ export class GfPricingPageComponent implements OnInit { 'PROFESSIONAL_DATA_PROVIDER_TOOLTIP_PREMIUM' ); - protected readonly referralBrokers = [ - 'Alpian', - 'DEGIRO', - 'finpension', - 'frankly', - 'Interactive Brokers', - 'Mintos', - 'Monefit SmartSaver', - 'Revolut', - 'Swissquote', - 'VIAC', - 'Zak' - ] as const; - protected readonly routerLinkFeatures = publicRoutes.features.routerLink; protected readonly routerLinkRegister = publicRoutes.register.routerLink; protected user: User; diff --git a/apps/client/src/app/pages/pricing/pricing-page.html b/apps/client/src/app/pages/pricing/pricing-page.html index b951baa98..23693457c 100644 --- a/apps/client/src/app/pages/pricing/pricing-page.html +++ b/apps/client/src/app/pages/pricing/pricing-page.html @@ -305,23 +305,23 @@
- @if (user?.subscription?.type === 'Basic') { + @if (user?.referralPartners?.length) {

If you plan to open an account at   @for ( - broker of referralBrokers; - track broker; + partner of user.referralPartners; + track partner.name; let i = $index; let last = $last ) { - {{ broker }} + {{ partner.name }} @if (last) { , } @else { - @if (i === referralBrokers.length - 2) { + @if (i === user.referralPartners.length - 2) {   or   diff --git a/libs/common/src/lib/config.ts b/libs/common/src/lib/config.ts index 7e7cd2ba5..3e7fbe6df 100644 --- a/libs/common/src/lib/config.ts +++ b/libs/common/src/lib/config.ts @@ -253,6 +253,7 @@ export const PROPERTY_IS_READ_ONLY_MODE = 'IS_READ_ONLY_MODE'; export const PROPERTY_IS_USER_SIGNUP_ENABLED = 'IS_USER_SIGNUP_ENABLED'; export const PROPERTY_OPENROUTER_MODEL = 'OPENROUTER_MODEL'; export const PROPERTY_OPENROUTER_MODEL_WEB_FETCH = 'OPENROUTER_MODEL_WEB_FETCH'; +export const PROPERTY_REFERRAL_PARTNERS = 'REFERRAL_PARTNERS'; export const PROPERTY_SLACK_COMMUNITY_USERS = 'SLACK_COMMUNITY_USERS'; export const PROPERTY_STRIPE_CONFIG = 'STRIPE_CONFIG'; export const PROPERTY_SYSTEM_MESSAGE = 'SYSTEM_MESSAGE'; diff --git a/libs/common/src/lib/interfaces/index.ts b/libs/common/src/lib/interfaces/index.ts index 8b8ec875c..6c076514c 100644 --- a/libs/common/src/lib/interfaces/index.ts +++ b/libs/common/src/lib/interfaces/index.ts @@ -38,6 +38,7 @@ import type { PortfolioPosition } from './portfolio-position.interface'; import type { PortfolioReportRule } from './portfolio-report-rule.interface'; import type { PortfolioSummary } from './portfolio-summary.interface'; import type { Product } from './product'; +import type { ReferralPartner } from './referral-partner.interface'; 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'; @@ -181,6 +182,7 @@ export { PublicKeyCredentialRequestOptionsJSON, PublicPortfolioResponse, QuotesResponse, + ReferralPartner, ResponseError, RuleSettings, ScraperConfiguration, diff --git a/libs/common/src/lib/interfaces/referral-partner.interface.ts b/libs/common/src/lib/interfaces/referral-partner.interface.ts new file mode 100644 index 000000000..435070fa5 --- /dev/null +++ b/libs/common/src/lib/interfaces/referral-partner.interface.ts @@ -0,0 +1,3 @@ +export interface ReferralPartner { + name: string; +} diff --git a/libs/common/src/lib/interfaces/user.interface.ts b/libs/common/src/lib/interfaces/user.interface.ts index e60f01915..619d4ee71 100644 --- a/libs/common/src/lib/interfaces/user.interface.ts +++ b/libs/common/src/lib/interfaces/user.interface.ts @@ -3,6 +3,7 @@ import { AccountWithPlatform } from '@ghostfolio/common/types'; import { Access, Tag } from '@prisma/client'; +import { ReferralPartner } from './referral-partner.interface'; import { SubscriptionOffer } from './subscription-offer.interface'; import { SystemMessage } from './system-message.interface'; import { UserSettings } from './user-settings.interface'; @@ -15,6 +16,7 @@ export interface User { dateOfFirstActivity: Date; id: string; permissions: string[]; + referralPartners?: ReferralPartner[]; settings: UserSettings; systemMessage?: SystemMessage; subscription: { From bab02b3d68d71c9c14464b32b860d69099908e4f Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 17 Jun 2026 20:27:00 +0200 Subject: [PATCH 57/74] Task/deprecate SymbolProfile in favor of assetProfile in get holding endpoint (#7054) * Deprecate SymbolProfile in favor of assetProfile * Update changelog --- CHANGELOG.md | 1 + apps/api/src/app/portfolio/portfolio.service.ts | 12 ++++++++++++ ...nsform-data-source-in-response.interceptor.ts | 1 + .../portfolio-holding-response.interface.ts | 16 ++++++++++++++++ 4 files changed, 30 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0ea139fc0..9abb2bc2b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Improved the account name display in the accounts table - Improved the name display in the activities table - Improved the user id display in the users table of the admin control panel +- Deprecated `SymbolProfile` in favor of `assetProfile` in the endpoint `GET api/v1/portfolio/holding/:dataSource/:symbol` - Improved the language localization for German (`de`) - Upgraded `svgmap` from version `2.19.3` to `2.21.0` diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts index 24d760888..c15353521 100644 --- a/apps/api/src/app/portfolio/portfolio.service.ts +++ b/apps/api/src/app/portfolio/portfolio.service.ts @@ -957,6 +957,18 @@ export class PortfolioService { marketPriceMin, SymbolProfile, tags, + assetProfile: { + assetClass: SymbolProfile.assetClass, + assetSubClass: SymbolProfile.assetSubClass, + countries: SymbolProfile.countries, + currency: SymbolProfile.currency, + dataSource: SymbolProfile.dataSource, + isin: SymbolProfile.isin, + name: SymbolProfile.name, + sectors: SymbolProfile.sectors, + symbol: SymbolProfile.symbol, + userId: SymbolProfile.userId + }, averagePrice: averagePrice.toNumber(), dataProviderInfo: portfolioCalculator.getDataProviderInfos()?.[0], dividendInBaseCurrency: dividendInBaseCurrency.toNumber(), diff --git a/apps/api/src/interceptors/transform-data-source-in-response/transform-data-source-in-response.interceptor.ts b/apps/api/src/interceptors/transform-data-source-in-response/transform-data-source-in-response.interceptor.ts index 57643f76c..fb8ff5dc5 100644 --- a/apps/api/src/interceptors/transform-data-source-in-response/transform-data-source-in-response.interceptor.ts +++ b/apps/api/src/interceptors/transform-data-source-in-response/transform-data-source-in-response.interceptor.ts @@ -64,6 +64,7 @@ export class TransformDataSourceInResponseInterceptor< paths: [ 'activities[*].dataSource', 'activities[*].SymbolProfile.dataSource', + 'assetProfile.dataSource', 'benchmarks[*].dataSource', 'errors[*].dataSource', 'fearAndGreedIndex.CRYPTOCURRENCIES.dataSource', diff --git a/libs/common/src/lib/interfaces/responses/portfolio-holding-response.interface.ts b/libs/common/src/lib/interfaces/responses/portfolio-holding-response.interface.ts index 76bc7dc02..3b07666c9 100644 --- a/libs/common/src/lib/interfaces/responses/portfolio-holding-response.interface.ts +++ b/libs/common/src/lib/interfaces/responses/portfolio-holding-response.interface.ts @@ -9,6 +9,19 @@ import { Tag } from '@prisma/client'; export interface PortfolioHoldingResponse { activitiesCount: number; + assetProfile: Pick< + EnhancedSymbolProfile, + | 'assetClass' + | 'assetSubClass' + | 'countries' + | 'currency' + | 'dataSource' + | 'isin' + | 'name' + | 'sectors' + | 'symbol' + | 'userId' + >; averagePrice: number; dataProviderInfo: DataProviderInfo; dateOfFirstActivity: string; @@ -31,7 +44,10 @@ export interface PortfolioHoldingResponse { netPerformanceWithCurrencyEffect: number; performances: Benchmark['performances']; quantity: number; + + /* @deprecated */ SymbolProfile: EnhancedSymbolProfile; + tags: Tag[]; value: number; } From ce286ab31495e19df62187100f1660196397363d Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 17 Jun 2026 20:37:53 +0200 Subject: [PATCH 58/74] Task/improve registration and last activity display in admin users component (#7062) * Improve display of registration and last activity * Update changelog --- CHANGELOG.md | 2 ++ apps/client/src/app/components/admin-users/admin-users.html | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9abb2bc2b..e520ba51a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Improved the styling of the checkboxes to consistently use the primary color in their states - Improved the account name display in the accounts table - Improved the name display in the activities table +- Improved the last activity display in the users table of the admin control panel +- Improved the registration display in the users table of the admin control panel - Improved the user id display in the users table of the admin control panel - Deprecated `SymbolProfile` in favor of `assetProfile` in the endpoint `GET api/v1/portfolio/holding/:dataSource/:symbol` - Improved the language localization for German (`de`) diff --git a/apps/client/src/app/components/admin-users/admin-users.html b/apps/client/src/app/components/admin-users/admin-users.html index 0899c57d1..be9bb377d 100644 --- a/apps/client/src/app/components/admin-users/admin-users.html +++ b/apps/client/src/app/components/admin-users/admin-users.html @@ -77,7 +77,7 @@ {{ formatDistanceToNow(element.createdAt) }} @@ -183,7 +183,7 @@ {{ formatDistanceToNow(element.lastActivity) }} From efbfb6bf9c5c9e793b4f1d9ae57b05a0f8f8e88a Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 17 Jun 2026 20:40:04 +0200 Subject: [PATCH 59/74] Release 3.12.0 (#7063) --- 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 e520ba51a..f6a2a9a94 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 +## 3.12.0 - 2026-06-17 ### Changed diff --git a/package-lock.json b/package-lock.json index 81e002229..7afc46fd8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ghostfolio", - "version": "3.11.0", + "version": "3.12.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ghostfolio", - "version": "3.11.0", + "version": "3.12.0", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { diff --git a/package.json b/package.json index e8ae2286c..f6f31747b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "3.11.0", + "version": "3.12.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", From fdd96bcd6bdc93e1fb4c8bea99b666de3d9b0ddb Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Thu, 18 Jun 2026 17:47:34 +0200 Subject: [PATCH 60/74] Bugfix/country name localization (#7065) * Fix country name localization * Update changelog --- CHANGELOG.md | 6 ++++++ .../asset-profile-dialog.component.ts | 2 +- .../asset-profile-dialog/asset-profile-dialog.html | 3 +-- .../holding-detail-dialog.component.ts | 5 +---- .../holding-detail-dialog.html | 3 +-- .../allocations/allocations-page.component.ts | 5 +---- .../product-page.component.ts | 8 ++------ libs/common/src/lib/helper.ts | 14 ++++++-------- .../world-map-chart/world-map-chart.component.ts | 2 +- 9 files changed, 20 insertions(+), 28 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f6a2a9a94..f964c9cae 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 + +### Fixed + +- Fixed an issue with the localization of the country names + ## 3.12.0 - 2026-06-17 ### Changed diff --git a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts index ce997cf27..829129b38 100644 --- a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts +++ b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.component.ts @@ -373,7 +373,7 @@ export class GfAssetProfileDialogComponent implements OnInit { ) { for (const { code, weight } of this.assetProfile.countries) { this.countries[code] = { - name: getCountryName({ code, locale: this.data.locale }), + name: getCountryName({ code }), value: weight }; } diff --git a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html index d9a5354e5..453b8cb6a 100644 --- a/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html +++ b/apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -271,8 +271,7 @@ [locale]="data.locale" [value]=" getCountryName({ - code: assetProfile?.countries[0].code, - locale: data.locale + code: assetProfile?.countries[0].code }) " >Country 0) { for (const country of SymbolProfile.countries) { this.countries[country.code] = { - name: getCountryName({ - code: country.code, - locale: this.data.locale - }), + name: getCountryName({ code: country.code }), value: country.weight }; } diff --git a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html index 609eec3c0..0d5691874 100644 --- a/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html +++ b/apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -274,8 +274,7 @@ [locale]="data.locale" [value]=" getCountryName({ - code: SymbolProfile.countries[0].code, - locale: data.locale + code: SymbolProfile.countries[0].code }) " >Country((names, code) => { - names[code] = getCountryName({ code, locale: this.locale }); + names[code] = getCountryName({ code }); return names; }, {}); From cb34c4bc5a9023f4e7f7e7a9d00ea7a50bf0b2f3 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 19 Jun 2026 18:30:21 +0200 Subject: [PATCH 61/74] Task/extend personal finance tools (20260619) (#7071) Extend personal finance tools --- libs/common/src/lib/personal-finance-tools.ts | 79 +++++++++++++++++++ 1 file changed, 79 insertions(+) diff --git a/libs/common/src/lib/personal-finance-tools.ts b/libs/common/src/lib/personal-finance-tools.ts index 8698c76f7..744081464 100644 --- a/libs/common/src/lib/personal-finance-tools.ts +++ b/libs/common/src/lib/personal-finance-tools.ts @@ -1,6 +1,17 @@ import { Product } from '@ghostfolio/common/interfaces'; export const personalFinanceTools: Product[] = [ + { + hasFreePlan: true, + hasSelfHostingAbility: true, + key: 'acemoney', + name: 'AceMoney', + note: 'License is a perpetual license', + origin: 'US', + pricingPerYear: '$44.95', + slogan: 'Lifetime Personal Finance Control, One Single Payment.', + url: 'https://www.mechcad.net' + }, { founded: 2023, hasSelfHostingAbility: false, @@ -361,6 +372,16 @@ export const personalFinanceTools: Product[] = [ slogan: 'Your financial superpower', url: 'https://www.etops.com' }, + { + founded: 2015, + hasFreePlan: true, + hasSelfHostingAbility: false, + key: 'everydollar', + name: 'EveryDollar', + origin: 'US', + slogan: 'Plan, track, find more margin', + url: 'https://www.ramseysolutions.com/money/everydollar' + }, { founded: 2020, hasFreePlan: true, @@ -497,6 +518,17 @@ export const personalFinanceTools: Product[] = [ slogan: 'Take control over your investments', url: 'https://www.folishare.com' }, + { + founded: 1993, + hasSelfHostingAbility: true, + key: 'fund-manager', + name: 'Fund Manager', + note: 'License is a perpetual license', + origin: 'US', + pricingPerYear: '$99', + slogan: 'Powerful portfolio management software', + url: 'https://www.fundmanagersoftware.com' + }, { hasFreePlan: true, hasSelfHostingAbility: false, @@ -528,6 +560,15 @@ export const personalFinanceTools: Product[] = [ slogan: 'Portfolio Tracker, Analysis & Community', url: 'https://www.getquin.com' }, + { + hasFreePlan: true, + hasSelfHostingAbility: false, + key: 'goodbudget', + name: 'Goodbudget', + origin: 'US', + slogan: 'Budget with a why', + url: 'https://goodbudget.com' + }, { hasFreePlan: true, hasSelfHostingAbility: false, @@ -665,6 +706,16 @@ export const personalFinanceTools: Product[] = [ slogan: 'Sustainability insights for wealth managers', url: 'https://leafs.ch' }, + { + founded: 2020, + hasFreePlan: false, + hasSelfHostingAbility: false, + key: 'lunch-money', + name: 'Lunch Money', + origin: 'CA', + slogan: 'Delightfully simple personal finance and budgeting', + url: 'https://lunchmoney.app' + }, { founded: 2018, hasFreePlan: false, @@ -725,6 +776,16 @@ export const personalFinanceTools: Product[] = [ slogan: 'The smartest way to track your crypto', url: 'https://www.merlincrypto.com' }, + { + hasFreePlan: false, + hasSelfHostingAbility: false, + key: 'mezzi', + name: 'Mezzi', + origin: 'US', + pricingPerYear: '$48', + slogan: 'Self-manage your wealth. Get fiduciary advice.', + url: 'https://www.mezzi.com' + }, { founded: 1991, hasSelfHostingAbility: true, @@ -776,6 +837,15 @@ export const personalFinanceTools: Product[] = [ slogan: 'Have total control of your financial life', url: 'https://www.moneyspire.com' }, + { + hasFreePlan: true, + hasSelfHostingAbility: true, + key: 'moneywell', + name: 'MoneyWell', + origin: 'US', + slogan: 'Personal Budgeting Software for Mac and iOS', + url: 'https://moneywell.app' + }, { key: 'moneywiz', name: 'MoneyWiz', @@ -1109,6 +1179,15 @@ export const personalFinanceTools: Product[] = [ slogan: 'Stock Portfolio Tracker', url: 'https://simpleportfolio.app' }, + { + founded: 2020, + hasFreePlan: false, + hasSelfHostingAbility: false, + key: 'simplifi', + name: 'Simplifi by Quicken', + origin: 'US', + url: 'https://www.quicken.com/products/simplifi' + }, { founded: 2014, hasFreePlan: true, From 2589a60f288fbeb4a2ed3d4d44dc58f56ce9fca3 Mon Sep 17 00:00:00 2001 From: David Requeno <108202767+DavidReque@users.noreply.github.com> Date: Fri, 19 Jun 2026 10:32:32 -0600 Subject: [PATCH 62/74] Task/include selected profile count in market data delete action (#7064) * Include selected profile count * Update changelog --- CHANGELOG.md | 4 ++++ .../admin-market-data/admin-market-data.html | 13 ++++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f964c9cae..0a2337d89 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +### Changed + +- Added the selected asset profile count to the delete menu item of the historical market data table in the admin control panel + ### Fixed - Fixed an issue with the localization of the country names diff --git a/apps/client/src/app/components/admin-market-data/admin-market-data.html b/apps/client/src/app/components/admin-market-data/admin-market-data.html index 63d425513..e86e3e631 100644 --- a/apps/client/src/app/components/admin-market-data/admin-market-data.html +++ b/apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -239,7 +239,18 @@ [disabled]="!selection.hasValue()" (click)="onDeleteAssetProfiles()" > - Delete Profiles + Delete + {{ + selection.selected.length > 1 + ? selection.selected.length + : '' + }} + {selection.selected.length, plural, + =1 {Profile} + other {Profiles} + } From 77efbc5a437b5be665b83467f5fab5b9366b36d8 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 19 Jun 2026 18:35:29 +0200 Subject: [PATCH 63/74] Task/refactor default locale (#7066) Refactor default locale --- apps/api/src/app/user/user.service.ts | 6 +++--- .../admin-market-data/admin-market-data.component.ts | 8 ++++---- .../app/components/admin-users/admin-users.component.ts | 4 ++-- .../components/home-watchlist/home-watchlist.component.ts | 4 ++-- .../create-or-update-activity-dialog.component.ts | 5 ++--- libs/common/src/lib/config.ts | 3 +-- libs/common/src/lib/helper.ts | 8 ++++---- .../fire-calculator/fire-calculator.component.stories.ts | 4 ++-- 8 files changed, 20 insertions(+), 22 deletions(-) diff --git a/apps/api/src/app/user/user.service.ts b/apps/api/src/app/user/user.service.ts index 6d6041c81..0c159bc1c 100644 --- a/apps/api/src/app/user/user.service.ts +++ b/apps/api/src/app/user/user.service.ts @@ -28,11 +28,11 @@ import { DEFAULT_CURRENCY, DEFAULT_DATE_RANGE, DEFAULT_LANGUAGE_CODE, + DEFAULT_LOCALE, PROPERTY_IS_READ_ONLY_MODE, PROPERTY_REFERRAL_PARTNERS, PROPERTY_SYSTEM_MESSAGE, - TAG_ID_EXCLUDE_FROM_ANALYSIS, - locale as defaultLocale + TAG_ID_EXCLUDE_FROM_ANALYSIS } from '@ghostfolio/common/config'; import { SubscriptionType } from '@ghostfolio/common/enums'; import { @@ -102,7 +102,7 @@ export class UserService { public async getUser({ impersonationUserId, - locale = defaultLocale, + locale = DEFAULT_LOCALE, user }: { impersonationUserId: string; diff --git a/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts b/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts index 805adf89d..a4a9b6e19 100644 --- a/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts +++ b/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts @@ -1,8 +1,8 @@ import { UserService } from '@ghostfolio/client/services/user/user.service'; import { DEFAULT_COLOR_SCHEME, - DEFAULT_PAGE_SIZE, - locale + DEFAULT_LOCALE, + DEFAULT_PAGE_SIZE } from '@ghostfolio/common/config'; import { canDeleteAssetProfile, @@ -429,7 +429,7 @@ export class GfAdminMarketDataComponent implements AfterViewInit, OnInit { colorScheme: this.user?.settings.colorScheme ?? DEFAULT_COLOR_SCHEME, deviceType: this.deviceType(), - locale: this.user?.settings?.locale ?? locale + locale: this.user?.settings?.locale ?? DEFAULT_LOCALE } satisfies AssetProfileDialogParams, height: this.deviceType() === 'mobile' ? '98vh' : '80vh', width: this.deviceType() === 'mobile' ? '100vw' : '50rem' @@ -464,7 +464,7 @@ export class GfAdminMarketDataComponent implements AfterViewInit, OnInit { autoFocus: false, data: { deviceType: this.deviceType(), - locale: this.user?.settings?.locale ?? locale + locale: this.user?.settings?.locale ?? DEFAULT_LOCALE } satisfies CreateAssetProfileDialogParams, width: this.deviceType() === 'mobile' ? '100vw' : '50rem' }); diff --git a/apps/client/src/app/components/admin-users/admin-users.component.ts b/apps/client/src/app/components/admin-users/admin-users.component.ts index f477776a5..15133b781 100644 --- a/apps/client/src/app/components/admin-users/admin-users.component.ts +++ b/apps/client/src/app/components/admin-users/admin-users.component.ts @@ -5,7 +5,7 @@ import { import { GfUserDetailDialogComponent } from '@ghostfolio/client/components/user-detail-dialog/user-detail-dialog.component'; import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; -import { DEFAULT_PAGE_SIZE, locale } from '@ghostfolio/common/config'; +import { DEFAULT_LOCALE, DEFAULT_PAGE_SIZE } from '@ghostfolio/common/config'; import { ConfirmationDialogType } from '@ghostfolio/common/enums'; import { getDateFnsLocale, @@ -317,7 +317,7 @@ export class GfAdminUsersComponent implements OnInit { currentUserId: this.user?.id, deviceType: this.deviceType(), hasPermissionForSubscription: this.hasPermissionForSubscription, - locale: this.user?.settings?.locale ?? locale, + locale: this.user?.settings?.locale ?? DEFAULT_LOCALE, userId: aUserId } satisfies UserDetailDialogParams, height: this.deviceType() === 'mobile' ? '98vh' : '60vh', diff --git a/apps/client/src/app/components/home-watchlist/home-watchlist.component.ts b/apps/client/src/app/components/home-watchlist/home-watchlist.component.ts index 22d829daa..0107f36a2 100644 --- a/apps/client/src/app/components/home-watchlist/home-watchlist.component.ts +++ b/apps/client/src/app/components/home-watchlist/home-watchlist.component.ts @@ -1,6 +1,6 @@ import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service'; import { UserService } from '@ghostfolio/client/services/user/user.service'; -import { locale as defaultLocale } from '@ghostfolio/common/config'; +import { DEFAULT_LOCALE } from '@ghostfolio/common/config'; import { AssetProfileIdentifier, Benchmark, @@ -149,7 +149,7 @@ export class GfHomeWatchlistComponent implements OnInit { autoFocus: false, data: { deviceType: this.deviceType(), - locale: this.user?.settings?.locale ?? defaultLocale + locale: this.user?.settings?.locale ?? DEFAULT_LOCALE }, width: this.deviceType() === 'mobile' ? '100vw' : '50rem' }); diff --git a/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts b/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts index decb30682..ba17dbef3 100644 --- a/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts +++ b/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts @@ -1,6 +1,5 @@ import { UserService } from '@ghostfolio/client/services/user/user.service'; -import { ASSET_CLASS_MAPPING } from '@ghostfolio/common/config'; -import { locale as defaultLocale } from '@ghostfolio/common/config'; +import { ASSET_CLASS_MAPPING, DEFAULT_LOCALE } from '@ghostfolio/common/config'; import { CreateOrderDto, UpdateOrderDto } from '@ghostfolio/common/dtos'; import { getDateFormatString } from '@ghostfolio/common/helper'; import { @@ -120,7 +119,7 @@ export class GfCreateOrUpdateActivityDialogComponent { this.hasPermissionToCreateOwnTag = this.data.user?.settings?.isExperimentalFeatures && hasPermission(this.data.user?.permissions, permissions.createOwnTag); - this.locale = this.data.user.settings.locale ?? defaultLocale; + this.locale = this.data.user.settings.locale ?? DEFAULT_LOCALE; this.mode = this.data.activity?.id ? 'update' : 'create'; this.dateAdapter.setLocale(this.locale); diff --git a/libs/common/src/lib/config.ts b/libs/common/src/lib/config.ts index 3e7fbe6df..4924aaeea 100644 --- a/libs/common/src/lib/config.ts +++ b/libs/common/src/lib/config.ts @@ -13,8 +13,6 @@ export const ghostfolioFearAndGreedIndexSymbol = `${ghostfolioScraperApiSymbolPr export const ghostfolioFearAndGreedIndexSymbolCryptocurrencies = `${ghostfolioPrefix}_FEAR_AND_GREED_INDEX_CRYPTOCURRENCIES`; export const ghostfolioFearAndGreedIndexSymbolStocks = `${ghostfolioPrefix}_FEAR_AND_GREED_INDEX_STOCKS`; -export const locale = 'en-US'; - export const primaryColorHex = '#36cfcc'; export const primaryColorRgb = { r: 54, @@ -85,6 +83,7 @@ export const DEFAULT_DATE_FORMAT_MONTH_YEAR = 'MMM yyyy'; export const DEFAULT_DATE_RANGE: DateRange = 'max'; export const DEFAULT_HOST = '0.0.0.0'; export const DEFAULT_LANGUAGE_CODE = 'en'; +export const DEFAULT_LOCALE = 'en-US'; export const DEFAULT_PAGE_SIZE = 50; export const DEFAULT_PORT = 3333; export const DEFAULT_PROCESSOR_GATHER_ASSET_PROFILE_CONCURRENCY = 1; diff --git a/libs/common/src/lib/helper.ts b/libs/common/src/lib/helper.ts index a29129f91..3ca95d9f6 100644 --- a/libs/common/src/lib/helper.ts +++ b/libs/common/src/lib/helper.ts @@ -36,12 +36,12 @@ import { get, isNil, isString } from 'lodash'; import { DEFAULT_CURRENCY, + DEFAULT_LOCALE, DERIVED_CURRENCIES, ghostfolioFearAndGreedIndexSymbol, ghostfolioFearAndGreedIndexSymbolCryptocurrencies, ghostfolioFearAndGreedIndexSymbolStocks, - ghostfolioScraperApiSymbolPrefix, - locale + ghostfolioScraperApiSymbolPrefix } from './config'; import { AdminMarketDataItem, @@ -261,7 +261,7 @@ export function getCurrencyFromSymbol(aSymbol = '') { export function getCountryName({ code }: { code: string }): string { try { return ( - new Intl.DisplayNames([document.documentElement.lang || locale], { + new Intl.DisplayNames([document.documentElement.lang || DEFAULT_LOCALE], { type: 'region' }).of(code) ?? code ); @@ -338,7 +338,7 @@ export function getEmojiFlag(aCountryCode: string) { } export function getLocale() { - return navigator.language ?? locale; + return navigator.language ?? DEFAULT_LOCALE; } export function getLowercase(object: object, path: string) { diff --git a/libs/ui/src/lib/fire-calculator/fire-calculator.component.stories.ts b/libs/ui/src/lib/fire-calculator/fire-calculator.component.stories.ts index 0872c2aac..ad80499d7 100644 --- a/libs/ui/src/lib/fire-calculator/fire-calculator.component.stories.ts +++ b/libs/ui/src/lib/fire-calculator/fire-calculator.component.stories.ts @@ -1,4 +1,4 @@ -import { locale } from '@ghostfolio/common/config'; +import { DEFAULT_LOCALE } from '@ghostfolio/common/config'; import { CommonModule } from '@angular/common'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; @@ -47,7 +47,7 @@ export const Simple: Story = { annualInterestRate: 5, currency: 'USD', fireWealth: 50000, - locale: locale, + locale: DEFAULT_LOCALE, savingsRate: 1000 } }; From 2fe863726198f0f1c6868bd320e2bc34d7a2db64 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 19 Jun 2026 18:44:29 +0200 Subject: [PATCH 64/74] Task/add selected asset profile count to deletion confirmation dialog of historical market data table in admin control panel (#7072) * Add selected asset profile count * Update changelog --- CHANGELOG.md | 1 + .../admin-market-data/admin-market-data.service.ts | 12 ++++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0a2337d89..85d661e84 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 - Added the selected asset profile count to the delete menu item of the historical market data table in the admin control panel +- Added the selected asset profile count to the deletion confirmation dialog of the historical market data table in the admin control panel ### Fixed diff --git a/apps/client/src/app/components/admin-market-data/admin-market-data.service.ts b/apps/client/src/app/components/admin-market-data/admin-market-data.service.ts index 77e2151ef..28c8c2d9f 100644 --- a/apps/client/src/app/components/admin-market-data/admin-market-data.service.ts +++ b/apps/client/src/app/components/admin-market-data/admin-market-data.service.ts @@ -32,6 +32,8 @@ export class AdminMarketDataService { public deleteAssetProfiles( aAssetProfileIdentifiers: AssetProfileIdentifier[] ) { + const assetProfileCount = aAssetProfileIdentifiers.length; + this.notificationService.confirm({ confirmFn: () => { const deleteRequests = aAssetProfileIdentifiers.map( @@ -44,7 +46,10 @@ export class AdminMarketDataService { .pipe( catchError(() => { this.notificationService.alert({ - title: $localize`Oops! Could not delete profiles.` + title: + assetProfileCount === 1 + ? $localize`Oops! Could not delete the asset profile.` + : $localize`Oops! Could not delete the asset profiles.` }); return EMPTY; @@ -56,7 +61,10 @@ export class AdminMarketDataService { .subscribe(); }, confirmType: ConfirmationDialogType.Warn, - title: $localize`Do you really want to delete these profiles?` + title: + assetProfileCount === 1 + ? $localize`Do you really want to delete this asset profile?` + : $localize`Do you really want to delete these ${assetProfileCount}:count: asset profiles?` }); } } From a8e9ae81e07bf3e55def1c3033d602b9d6b055ec Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 19 Jun 2026 19:05:11 +0200 Subject: [PATCH 65/74] Task/improve sorting to be case-insensitive in platform and tag management of admin control panel (#7061) * Improve sorting to be case-insensitive * Update changelog --- CHANGELOG.md | 2 ++ .../components/admin-platform/admin-platform.component.ts | 5 ++--- .../src/app/components/admin-tag/admin-tag.component.ts | 5 ++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 85d661e84..62c6c83f4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added the selected asset profile count to the delete menu item of the historical market data table in the admin control panel - Added the selected asset profile count to the deletion confirmation dialog of the historical market data table in the admin control panel +- Improved the sorting to be case-insensitive in the platform management of the admin control panel +- Improved the sorting to be case-insensitive in the tag management of the admin control panel ### Fixed diff --git a/apps/client/src/app/components/admin-platform/admin-platform.component.ts b/apps/client/src/app/components/admin-platform/admin-platform.component.ts index a9d135068..26e6c2b1e 100644 --- a/apps/client/src/app/components/admin-platform/admin-platform.component.ts +++ b/apps/client/src/app/components/admin-platform/admin-platform.component.ts @@ -1,7 +1,7 @@ import { UserService } from '@ghostfolio/client/services/user/user.service'; import { CreatePlatformDto, UpdatePlatformDto } from '@ghostfolio/common/dtos'; import { ConfirmationDialogType } from '@ghostfolio/common/enums'; -import { getLocale } from '@ghostfolio/common/helper'; +import { getLocale, getLowercase } from '@ghostfolio/common/helper'; import { GfEntityLogoComponent } from '@ghostfolio/ui/entity-logo'; import { NotificationService } from '@ghostfolio/ui/notifications'; import { AdminService, DataService } from '@ghostfolio/ui/services'; @@ -33,7 +33,6 @@ import { ellipsisHorizontal, trashOutline } from 'ionicons/icons'; -import { get } from 'lodash'; import { DeviceDetectorService } from 'ngx-device-detector'; import { GfCreateOrUpdatePlatformDialogComponent } from './create-or-update-platform-dialog/create-or-update-platform-dialog.component'; @@ -147,7 +146,7 @@ export class GfAdminPlatformComponent implements OnInit { this.dataSource = new MatTableDataSource(platforms); this.dataSource.sort = this.sort(); - this.dataSource.sortingDataAccessor = get; + this.dataSource.sortingDataAccessor = getLowercase; this.dataService.updateInfo(); diff --git a/apps/client/src/app/components/admin-tag/admin-tag.component.ts b/apps/client/src/app/components/admin-tag/admin-tag.component.ts index c00fe3a61..fcb901707 100644 --- a/apps/client/src/app/components/admin-tag/admin-tag.component.ts +++ b/apps/client/src/app/components/admin-tag/admin-tag.component.ts @@ -1,7 +1,7 @@ import { UserService } from '@ghostfolio/client/services/user/user.service'; import { CreateTagDto, UpdateTagDto } from '@ghostfolio/common/dtos'; import { ConfirmationDialogType } from '@ghostfolio/common/enums'; -import { getLocale } from '@ghostfolio/common/helper'; +import { getLocale, getLowercase } from '@ghostfolio/common/helper'; import { NotificationService } from '@ghostfolio/ui/notifications'; import { DataService } from '@ghostfolio/ui/services'; import { GfValueComponent } from '@ghostfolio/ui/value'; @@ -32,7 +32,6 @@ import { ellipsisHorizontal, trashOutline } from 'ionicons/icons'; -import { get } from 'lodash'; import { DeviceDetectorService } from 'ngx-device-detector'; import { GfCreateOrUpdateTagDialogComponent } from './create-or-update-tag-dialog/create-or-update-tag-dialog.component'; @@ -149,7 +148,7 @@ export class GfAdminTagComponent implements OnInit { this.dataSource = new MatTableDataSource(this.tags); this.dataSource.sort = this.sort(); - this.dataSource.sortingDataAccessor = get; + this.dataSource.sortingDataAccessor = getLowercase; this.dataService.updateInfo(); From bd7f04be01b26036a577307f7a0268806f1637a2 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 19 Jun 2026 20:19:20 +0200 Subject: [PATCH 66/74] Task/upgrade yahoo-finance2 to version 3.15.3 (#7067) * Upgrade yahoo-finance2 to version 3.15.3 * Update changelog --- CHANGELOG.md | 1 + package-lock.json | 32 ++++++++++---------------------- package.json | 2 +- 3 files changed, 12 insertions(+), 23 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 62c6c83f4..5dc267496 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added the selected asset profile count to the deletion confirmation dialog of the historical market data table in the admin control panel - Improved the sorting to be case-insensitive in the platform management of the admin control panel - Improved the sorting to be case-insensitive in the tag management of the admin control panel +- Upgraded `yahoo-finance2` from version `3.14.2` to `3.15.3` ### Fixed diff --git a/package-lock.json b/package-lock.json index 7afc46fd8..0fceee455 100644 --- a/package-lock.json +++ b/package-lock.json @@ -95,7 +95,7 @@ "tablemark": "4.1.0", "twitter-api-v2": "1.29.0", "undici": "7.24.4", - "yahoo-finance2": "3.14.2", + "yahoo-finance2": "3.15.3", "zone.js": "0.16.1" }, "devDependencies": { @@ -4556,7 +4556,6 @@ "version": "1.19.11", "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.11.tgz", "integrity": "sha512-dr8/3zEaB+p0D2n/IUrlPF1HZm586qgJNXK1a9fhg/PzdtkK7Ksd5l312tJX2yBuALqDYBlG20QEbayqPyxn+g==", - "devOptional": true, "license": "MIT", "engines": { "node": ">=18.14.1" @@ -7344,7 +7343,6 @@ "version": "1.26.0", "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.26.0.tgz", "integrity": "sha512-Y5RmPncpiDtTXDbLKswIJzTqu2hyBKxTNsgKqKclDbhIgg1wgtf1fRuvxgTnRfcnxtvvgbIEcqUOzZrJ6iSReg==", - "dev": true, "license": "MIT", "dependencies": { "@hono/node-server": "^1.19.9", @@ -18893,7 +18891,6 @@ "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "devOptional": true, "license": "MIT", "dependencies": { "path-key": "^3.1.0", @@ -22011,7 +22008,6 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", - "dev": true, "license": "MIT", "dependencies": { "eventsource-parser": "^3.0.1" @@ -22155,7 +22151,6 @@ "version": "8.3.2", "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.3.2.tgz", "integrity": "sha512-77VmFeJkO0/rvimEDuUC5H30oqUC4EyOhyGccfqoLebB0oiEYfM7nwPrsDsBL1gsTpwfzX8SFy2MT3TDyRq+bg==", - "dev": true, "license": "MIT", "dependencies": { "ip-address": "10.1.0" @@ -23811,7 +23806,6 @@ "version": "4.12.14", "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.14.tgz", "integrity": "sha512-am5zfg3yu6sqn5yjKBNqhnTX7Cv+m00ox+7jbaKkrLMRJ4rAdldd1xPd/JzbBWspqaQv6RSTrgFN95EsfhC+7w==", - "devOptional": true, "license": "MIT", "engines": { "node": ">=16.9.0" @@ -24553,7 +24547,6 @@ "version": "10.1.0", "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz", "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==", - "dev": true, "license": "MIT", "engines": { "node": ">= 12" @@ -25222,7 +25215,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "devOptional": true, "license": "ISC" }, "node_modules/isobject": { @@ -28477,7 +28469,6 @@ "version": "6.2.2", "resolved": "https://registry.npmjs.org/jose/-/jose-6.2.2.tgz", "integrity": "sha512-d7kPDd34KO/YnzaDOlikGpOurfF0ByC2sEV4cANCtdqLlTfBlw2p14O/5d/zv40gJPbIQxfES3nSx1/oYNyuZQ==", - "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/panva" @@ -28652,7 +28643,6 @@ "version": "8.0.2", "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-8.0.2.tgz", "integrity": "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==", - "dev": true, "license": "BSD-2-Clause" }, "node_modules/json-stable-stringify-without-jsonify": { @@ -32293,7 +32283,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -32531,7 +32520,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.1.tgz", "integrity": "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=16.20.0" @@ -35418,7 +35406,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "devOptional": true, "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" @@ -35431,7 +35418,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "devOptional": true, "license": "MIT", "engines": { "node": ">=8" @@ -39554,7 +39540,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "devOptional": true, "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -39879,19 +39864,23 @@ } }, "node_modules/yahoo-finance2": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/yahoo-finance2/-/yahoo-finance2-3.14.2.tgz", - "integrity": "sha512-s+F7TWQT7zAtjhfC7rFHEX16Xfq36u3wceysINP7V+esF3mAYyk9slxZU+fEdkxaTuCT0+PnikHdekMX4UPMrg==", + "version": "3.15.3", + "resolved": "https://registry.npmjs.org/yahoo-finance2/-/yahoo-finance2-3.15.3.tgz", + "integrity": "sha512-AFmVZ4ACg3QFT2a/hyJv4Scp2J45gm/6xetVgvUvXzZypqsqbgreXJad4i+qm0onj6yeCf2fPhvow7Eh0CwwzA==", "license": "MIT", "dependencies": { "@deno/shim-deno": "~0.18.0", + "@modelcontextprotocol/sdk": "npm:@modelcontextprotocol/sdk@^1.26.0", "fetch-mock-cache": "npm:fetch-mock-cache@^2.1.3", "json-schema": "^0.4.0", "tough-cookie": "npm:tough-cookie@^5.1.1", - "tough-cookie-file-store": "npm:tough-cookie-file-store@^2.0.3" + "tough-cookie-file-store": "npm:tough-cookie-file-store@^2.0.3", + "zod": "npm:zod@^3.25.0" }, "bin": { - "yahoo-finance": "esm/bin/yahoo-finance.js" + "yahoo-finance": "esm/bin/yahoo-finance.js", + "yahoo-finance-mcp": "esm/bin/yahoo-finance-mcp.js", + "yahoo-finance2": "esm/bin/yahoo-finance.js" }, "engines": { "node": ">=20.0.0" @@ -40149,7 +40138,6 @@ "version": "3.25.2", "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.2.tgz", "integrity": "sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==", - "dev": true, "license": "ISC", "peerDependencies": { "zod": "^3.25.28 || ^4" diff --git a/package.json b/package.json index f6f31747b..6ec921f21 100644 --- a/package.json +++ b/package.json @@ -139,7 +139,7 @@ "tablemark": "4.1.0", "twitter-api-v2": "1.29.0", "undici": "7.24.4", - "yahoo-finance2": "3.14.2", + "yahoo-finance2": "3.15.3", "zone.js": "0.16.1" }, "devDependencies": { From 5d60887a19241474e85e61a81a9947c9e4589df5 Mon Sep 17 00:00:00 2001 From: Sjohn21 Date: Fri, 19 Jun 2026 20:21:10 +0200 Subject: [PATCH 67/74] Feature/move admin market data endpoint to asset profiles (#7056) * Move admin market data endpoint to asset profiles * Update changelog --------- Co-authored-by: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> --- CHANGELOG.md | 1 + apps/api/src/app/admin/admin.controller.ts | 38 +- apps/api/src/app/admin/admin.module.ts | 2 - apps/api/src/app/admin/admin.service.ts | 386 +---------------- .../asset-profiles.controller.ts | 42 +- .../asset-profiles/asset-profiles.module.ts | 14 +- .../asset-profiles/asset-profiles.service.ts | 396 +++++++++++++++++- .../admin-market-data.component.ts | 18 +- libs/common/src/lib/helper.ts | 4 +- ...ace.ts => asset-profile-item.interface.ts} | 9 +- libs/common/src/lib/interfaces/index.ts | 10 +- .../asset-profiles-response.interface.ts | 6 + .../src/lib/assistant/assistant.component.ts | 11 +- libs/ui/src/lib/services/admin.service.ts | 44 +- libs/ui/src/lib/services/data.service.ts | 37 ++ 15 files changed, 517 insertions(+), 501 deletions(-) rename libs/common/src/lib/interfaces/{admin-market-data.interface.ts => asset-profile-item.interface.ts} (79%) create mode 100644 libs/common/src/lib/interfaces/responses/asset-profiles-response.interface.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 5dc267496..eb67cd23b 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 +- Moved the endpoint to get the asset profiles from `GET api/v1/admin/market-data` to `GET api/v1/asset-profiles` - Added the selected asset profile count to the delete menu item of the historical market data table in the admin control panel - Added the selected asset profile count to the deletion confirmation dialog of the historical market data table in the admin control panel - Improved the sorting to be case-insensitive in the platform management of the admin control panel diff --git a/apps/api/src/app/admin/admin.controller.ts b/apps/api/src/app/admin/admin.controller.ts index 1a2c58d1c..9eb045fba 100644 --- a/apps/api/src/app/admin/admin.controller.ts +++ b/apps/api/src/app/admin/admin.controller.ts @@ -1,7 +1,6 @@ import { HasPermission } from '@ghostfolio/api/decorators/has-permission.decorator'; import { HasPermissionGuard } from '@ghostfolio/api/guards/has-permission.guard'; import { TransformDataSourceInRequestInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-request/transform-data-source-in-request.interceptor'; -import { ApiService } from '@ghostfolio/api/services/api/api.service'; import { BenchmarkService } from '@ghostfolio/api/services/benchmark/benchmark.service'; import { ManualService } from '@ghostfolio/api/services/data-provider/manual/manual.service'; import { DemoService } from '@ghostfolio/api/services/demo/demo.service'; @@ -24,18 +23,13 @@ import { } from '@ghostfolio/common/helper'; import { AdminData, - AdminMarketData, AdminUserResponse, AdminUsersResponse, EnhancedSymbolProfile, ScraperConfiguration } from '@ghostfolio/common/interfaces'; import { permissions } from '@ghostfolio/common/permissions'; -import type { - DateRange, - MarketDataPreset, - RequestWithUser -} from '@ghostfolio/common/types'; +import type { DateRange, RequestWithUser } from '@ghostfolio/common/types'; import { Body, @@ -67,7 +61,6 @@ export class AdminController { public constructor( private readonly adminService: AdminService, - private readonly apiService: ApiService, private readonly benchmarkService: BenchmarkService, private readonly dataGatheringService: DataGatheringService, private readonly demoService: DemoService, @@ -218,35 +211,6 @@ export class AdminController { }); } - @Get('market-data') - @HasPermission(permissions.accessAdminControl) - @UseGuards(AuthGuard('jwt'), HasPermissionGuard) - public async getMarketData( - @Query('assetSubClasses') filterByAssetSubClasses?: string, - @Query('dataSource') filterByDataSource?: string, - @Query('presetId') presetId?: MarketDataPreset, - @Query('query') filterBySearchQuery?: string, - @Query('skip') skip?: number, - @Query('sortColumn') sortColumn?: string, - @Query('sortDirection') sortDirection?: Prisma.SortOrder, - @Query('take') take?: number - ): Promise { - const filters = this.apiService.buildFiltersFromQueryParams({ - filterByAssetSubClasses, - filterByDataSource, - filterBySearchQuery - }); - - return this.adminService.getMarketData({ - filters, - presetId, - sortColumn, - sortDirection, - skip: isNaN(skip) ? undefined : skip, - take: isNaN(take) ? undefined : take - }); - } - @HasPermission(permissions.accessAdminControl) @Post('market-data/:dataSource/:symbol/test') @UseGuards(AuthGuard('jwt'), HasPermissionGuard) diff --git a/apps/api/src/app/admin/admin.module.ts b/apps/api/src/app/admin/admin.module.ts index e87df9e74..0cd4d3c16 100644 --- a/apps/api/src/app/admin/admin.module.ts +++ b/apps/api/src/app/admin/admin.module.ts @@ -1,6 +1,5 @@ import { ActivitiesModule } from '@ghostfolio/api/app/activities/activities.module'; import { TransformDataSourceInRequestModule } from '@ghostfolio/api/interceptors/transform-data-source-in-request/transform-data-source-in-request.module'; -import { ApiModule } from '@ghostfolio/api/services/api/api.module'; import { BenchmarkModule } from '@ghostfolio/api/services/benchmark/benchmark.module'; import { ConfigurationModule } from '@ghostfolio/api/services/configuration/configuration.module'; import { DataProviderModule } from '@ghostfolio/api/services/data-provider/data-provider.module'; @@ -21,7 +20,6 @@ import { QueueModule } from './queue/queue.module'; @Module({ imports: [ ActivitiesModule, - ApiModule, BenchmarkModule, ConfigurationModule, DataGatheringQueueModule, diff --git a/apps/api/src/app/admin/admin.service.ts b/apps/api/src/app/admin/admin.service.ts index be6f050c4..46ab25e96 100644 --- a/apps/api/src/app/admin/admin.service.ts +++ b/apps/api/src/app/admin/admin.service.ts @@ -1,6 +1,5 @@ import { ActivitiesService } from '@ghostfolio/api/app/activities/activities.service'; import { environment } from '@ghostfolio/api/environments/environment'; -import { BenchmarkService } from '@ghostfolio/api/services/benchmark/benchmark.service'; import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service'; import { DataProviderService } from '@ghostfolio/api/services/data-provider/data-provider.service'; import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service'; @@ -13,24 +12,15 @@ import { PROPERTY_IS_READ_ONLY_MODE, PROPERTY_IS_USER_SIGNUP_ENABLED } from '@ghostfolio/common/config'; -import { - applyAssetProfileOverrides, - getAssetProfileIdentifier, - getCurrencyFromSymbol, - isCurrency -} from '@ghostfolio/common/helper'; +import { getCurrencyFromSymbol, isCurrency } from '@ghostfolio/common/helper'; import { AdminData, - AdminMarketData, AdminMarketDataDetails, - AdminMarketDataItem, AdminUserResponse, AdminUsersResponse, AssetProfileIdentifier, - EnhancedSymbolProfile, - Filter + EnhancedSymbolProfile } from '@ghostfolio/common/interfaces'; -import { MarketDataPreset } from '@ghostfolio/common/types'; import { BadRequestException, @@ -48,13 +38,11 @@ import { } from '@prisma/client'; import { differenceInDays } from 'date-fns'; import { StatusCodes, getReasonPhrase } from 'http-status-codes'; -import { groupBy } from 'lodash'; @Injectable() export class AdminService { public constructor( private readonly activitiesService: ActivitiesService, - private readonly benchmarkService: BenchmarkService, private readonly configurationService: ConfigurationService, private readonly dataProviderService: DataProviderService, private readonly exchangeRateDataService: ExchangeRateDataService, @@ -188,244 +176,6 @@ export class AdminService { }; } - public async getMarketData({ - filters, - presetId, - sortColumn, - sortDirection = 'asc', - skip, - take = Number.MAX_SAFE_INTEGER - }: { - filters?: Filter[]; - presetId?: MarketDataPreset; - skip?: number; - sortColumn?: string; - sortDirection?: Prisma.SortOrder; - take?: number; - }): Promise { - let orderBy: Prisma.Enumerable = - [{ symbol: 'asc' }]; - const where: Prisma.SymbolProfileWhereInput = {}; - - if (presetId === 'BENCHMARKS') { - const benchmarkAssetProfiles = - await this.benchmarkService.getBenchmarkAssetProfiles(); - - where.id = { - in: benchmarkAssetProfiles.map(({ id }) => { - return id; - }) - }; - } else if (presetId === 'CURRENCIES') { - return this.getMarketDataForCurrencies(); - } else if ( - presetId === 'ETF_WITHOUT_COUNTRIES' || - presetId === 'ETF_WITHOUT_SECTORS' - ) { - filters = [{ id: 'ETF', type: 'ASSET_SUB_CLASS' }]; - } else if (presetId === 'NO_ACTIVITIES') { - where.activities = { - none: {} - }; - } - - const searchQuery = filters.find(({ type }) => { - return type === 'SEARCH_QUERY'; - })?.id; - - const { - ASSET_SUB_CLASS: filtersByAssetSubClass, - DATA_SOURCE: filtersByDataSource - } = groupBy(filters, ({ type }) => { - return type; - }); - - const marketDataItems = await this.prismaService.marketData.groupBy({ - _count: true, - by: ['dataSource', 'symbol'] - }); - - if (filtersByAssetSubClass) { - where.assetSubClass = AssetSubClass[filtersByAssetSubClass[0].id]; - } - - if (filtersByDataSource) { - where.dataSource = DataSource[filtersByDataSource[0].id]; - } - - if (searchQuery) { - where.OR = [ - { id: { mode: 'insensitive', startsWith: searchQuery } }, - { isin: { mode: 'insensitive', startsWith: searchQuery } }, - { name: { mode: 'insensitive', startsWith: searchQuery } }, - { symbol: { mode: 'insensitive', startsWith: searchQuery } } - ]; - } - - if (sortColumn) { - orderBy = [{ [sortColumn]: sortDirection }]; - - if (sortColumn === 'activitiesCount') { - orderBy = [ - { - activities: { - _count: sortDirection - } - } - ]; - } - } - - const extendedPrismaClient = this.getExtendedPrismaClient(); - - const symbolProfileResult = await Promise.all([ - extendedPrismaClient.symbolProfile.findMany({ - skip, - take, - where, - orderBy: [...orderBy, { id: sortDirection }], - select: { - _count: { - select: { - activities: true, - watchedBy: true - } - }, - activities: { - orderBy: [{ date: 'asc' }], - select: { date: true }, - take: 1 - }, - assetClass: true, - assetSubClass: true, - comment: true, - countries: true, - currency: true, - dataSource: true, - id: true, - isActive: true, - isUsedByUsersWithSubscription: true, - name: true, - scraperConfiguration: true, - sectors: true, - symbol: true, - SymbolProfileOverrides: true - } - }), - this.prismaService.symbolProfile.count({ where }) - ]); - const assetProfiles = symbolProfileResult[0]; - let count = symbolProfileResult[1]; - - const lastMarketPrices = await this.prismaService.marketData.findMany({ - distinct: ['dataSource', 'symbol'], - orderBy: { date: 'desc' }, - select: { - dataSource: true, - marketPrice: true, - symbol: true - }, - where: { - dataSource: { - in: assetProfiles.map(({ dataSource }) => { - return dataSource; - }) - }, - symbol: { - in: assetProfiles.map(({ symbol }) => { - return symbol; - }) - } - } - }); - - const lastMarketPriceMap = new Map(); - - for (const { dataSource, marketPrice, symbol } of lastMarketPrices) { - lastMarketPriceMap.set( - getAssetProfileIdentifier({ dataSource, symbol }), - marketPrice - ); - } - - let marketData: AdminMarketDataItem[] = await Promise.all( - assetProfiles.map(async (assetProfile) => { - const { - _count, - activities, - comment, - currency, - dataSource, - id, - isActive, - isUsedByUsersWithSubscription, - symbol - } = assetProfile; - - const { assetClass, assetSubClass, countries, name, sectors } = - applyAssetProfileOverrides( - assetProfile, - assetProfile.SymbolProfileOverrides - ); - - const countriesCount = countries ? Object.keys(countries).length : 0; - - const lastMarketPrice = lastMarketPriceMap.get( - getAssetProfileIdentifier({ dataSource, symbol }) - ); - - const marketDataItemCount = - marketDataItems.find((marketDataItem) => { - return ( - marketDataItem.dataSource === dataSource && - marketDataItem.symbol === symbol - ); - })?._count ?? 0; - - const sectorsCount = sectors ? Object.keys(sectors).length : 0; - - return { - assetClass, - assetSubClass, - comment, - countriesCount, - currency, - dataSource, - id, - isActive, - lastMarketPrice, - marketDataItemCount, - name, - sectorsCount, - symbol, - activitiesCount: _count.activities, - date: activities?.[0]?.date, - isUsedByUsersWithSubscription: await isUsedByUsersWithSubscription, - watchedByCount: _count.watchedBy - }; - }) - ); - - if (presetId) { - if (presetId === 'ETF_WITHOUT_COUNTRIES') { - marketData = marketData.filter(({ countriesCount }) => { - return countriesCount === 0; - }); - } else if (presetId === 'ETF_WITHOUT_SECTORS') { - marketData = marketData.filter(({ sectorsCount }) => { - return sectorsCount === 0; - }); - } - - count = marketData.length; - } - - return { - count, - marketData - }; - } - public async getMarketDataBySymbol({ dataSource, symbol @@ -667,138 +417,6 @@ export class AdminService { }); } - private getExtendedPrismaClient() { - const symbolProfileExtension = Prisma.defineExtension((client) => { - return client.$extends({ - result: { - symbolProfile: { - isUsedByUsersWithSubscription: { - compute: async ({ id }) => { - const { _count } = - await this.prismaService.symbolProfile.findUnique({ - select: { - _count: { - select: { - activities: { - where: { - user: { - subscriptions: { - some: { - expiresAt: { - gt: new Date() - } - } - } - } - } - } - } - } - }, - where: { - id - } - }); - - return _count.activities > 0; - } - } - } - } - }); - }); - - return this.prismaService.$extends(symbolProfileExtension); - } - - private async getMarketDataForCurrencies(): Promise { - const currencyPairs = this.exchangeRateDataService.getCurrencyPairs(); - - const [lastMarketPrices, marketDataItems] = await Promise.all([ - this.prismaService.marketData.findMany({ - distinct: ['dataSource', 'symbol'], - orderBy: { date: 'desc' }, - select: { - dataSource: true, - marketPrice: true, - symbol: true - }, - where: { - dataSource: { - in: currencyPairs.map(({ dataSource }) => { - return dataSource; - }) - }, - symbol: { - in: currencyPairs.map(({ symbol }) => { - return symbol; - }) - } - } - }), - this.prismaService.marketData.groupBy({ - _count: true, - by: ['dataSource', 'symbol'] - }) - ]); - - const lastMarketPriceMap = new Map(); - - for (const { dataSource, marketPrice, symbol } of lastMarketPrices) { - lastMarketPriceMap.set( - getAssetProfileIdentifier({ dataSource, symbol }), - marketPrice - ); - } - - const marketDataPromise: Promise[] = currencyPairs.map( - async ({ dataSource, symbol }) => { - let activitiesCount: EnhancedSymbolProfile['activitiesCount'] = 0; - let currency: EnhancedSymbolProfile['currency'] = '-'; - let dateOfFirstActivity: EnhancedSymbolProfile['dateOfFirstActivity']; - - if (isCurrency(getCurrencyFromSymbol(symbol))) { - currency = getCurrencyFromSymbol(symbol); - ({ activitiesCount, dateOfFirstActivity } = - await this.activitiesService.getStatisticsByCurrency(currency)); - } - - const lastMarketPrice = lastMarketPriceMap.get( - getAssetProfileIdentifier({ dataSource, symbol }) - ); - - const marketDataItemCount = - marketDataItems.find((marketDataItem) => { - return ( - marketDataItem.dataSource === dataSource && - marketDataItem.symbol === symbol - ); - })?._count ?? 0; - - return { - activitiesCount, - currency, - dataSource, - lastMarketPrice, - marketDataItemCount, - symbol, - assetClass: AssetClass.LIQUIDITY, - assetSubClass: AssetSubClass.CASH, - countriesCount: 0, - date: dateOfFirstActivity, - id: undefined, - isActive: true, - name: symbol, - sectorsCount: 0, - watchedByCount: 0 - }; - } - ); - - const marketData = await Promise.all(marketDataPromise); - return { marketData, count: marketData.length }; - } - private async getUsersWithAnalytics({ skip, take, diff --git a/apps/api/src/app/endpoints/asset-profiles/asset-profiles.controller.ts b/apps/api/src/app/endpoints/asset-profiles/asset-profiles.controller.ts index 38227c555..2606d8075 100644 --- a/apps/api/src/app/endpoints/asset-profiles/asset-profiles.controller.ts +++ b/apps/api/src/app/endpoints/asset-profiles/asset-profiles.controller.ts @@ -1,22 +1,28 @@ import { HasPermission } from '@ghostfolio/api/decorators/has-permission.decorator'; import { HasPermissionGuard } from '@ghostfolio/api/guards/has-permission.guard'; +import { ApiService } from '@ghostfolio/api/services/api/api.service'; import { UpdateAssetProfileDataDto } from '@ghostfolio/common/dtos'; -import { EnhancedSymbolProfile } from '@ghostfolio/common/interfaces'; +import { + AssetProfilesResponse, + EnhancedSymbolProfile +} from '@ghostfolio/common/interfaces'; import { permissions } from '@ghostfolio/common/permissions'; -import { RequestWithUser } from '@ghostfolio/common/types'; +import { MarketDataPreset, RequestWithUser } from '@ghostfolio/common/types'; import { Body, Controller, + Get, HttpException, Inject, Param, Patch, + Query, UseGuards } from '@nestjs/common'; import { REQUEST } from '@nestjs/core'; import { AuthGuard } from '@nestjs/passport'; -import { DataSource } from '@prisma/client'; +import { DataSource, Prisma } from '@prisma/client'; import { StatusCodes, getReasonPhrase } from 'http-status-codes'; import { AssetProfilesService } from './asset-profiles.service'; @@ -24,10 +30,40 @@ import { AssetProfilesService } from './asset-profiles.service'; @Controller('asset-profiles') export class AssetProfilesController { public constructor( + private readonly apiService: ApiService, private readonly assetProfilesService: AssetProfilesService, @Inject(REQUEST) private readonly request: RequestWithUser ) {} + @Get() + @HasPermission(permissions.accessAdminControl) + @UseGuards(AuthGuard('jwt'), HasPermissionGuard) + public async getAssetProfiles( + @Query('assetSubClasses') filterByAssetSubClasses?: string, + @Query('dataSource') filterByDataSource?: string, + @Query('presetId') presetId?: MarketDataPreset, + @Query('query') filterBySearchQuery?: string, + @Query('skip') skip?: number, + @Query('sortColumn') sortColumn?: string, + @Query('sortDirection') sortDirection?: Prisma.SortOrder, + @Query('take') take?: number + ): Promise { + const filters = this.apiService.buildFiltersFromQueryParams({ + filterByAssetSubClasses, + filterByDataSource, + filterBySearchQuery + }); + + return this.assetProfilesService.getAssetProfiles({ + filters, + presetId, + sortColumn, + sortDirection, + skip: isNaN(skip) ? undefined : skip, + take: isNaN(take) ? undefined : take + }); + } + @HasPermission(permissions.accessAdminControl) @Patch(':dataSource/:symbol') @UseGuards(AuthGuard('jwt'), HasPermissionGuard) diff --git a/apps/api/src/app/endpoints/asset-profiles/asset-profiles.module.ts b/apps/api/src/app/endpoints/asset-profiles/asset-profiles.module.ts index 32b9ab393..98463ce5d 100644 --- a/apps/api/src/app/endpoints/asset-profiles/asset-profiles.module.ts +++ b/apps/api/src/app/endpoints/asset-profiles/asset-profiles.module.ts @@ -1,3 +1,8 @@ +import { ActivitiesModule } from '@ghostfolio/api/app/activities/activities.module'; +import { ApiModule } from '@ghostfolio/api/services/api/api.module'; +import { BenchmarkModule } from '@ghostfolio/api/services/benchmark/benchmark.module'; +import { ExchangeRateDataModule } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.module'; +import { PrismaModule } from '@ghostfolio/api/services/prisma/prisma.module'; import { SymbolProfileModule } from '@ghostfolio/api/services/symbol-profile/symbol-profile.module'; import { Module } from '@nestjs/common'; @@ -7,7 +12,14 @@ import { AssetProfilesService } from './asset-profiles.service'; @Module({ controllers: [AssetProfilesController], - imports: [SymbolProfileModule], + imports: [ + ActivitiesModule, + ApiModule, + BenchmarkModule, + ExchangeRateDataModule, + PrismaModule, + SymbolProfileModule + ], providers: [AssetProfilesService] }) export class AssetProfilesModule {} diff --git a/apps/api/src/app/endpoints/asset-profiles/asset-profiles.service.ts b/apps/api/src/app/endpoints/asset-profiles/asset-profiles.service.ts index ef24372af..39eaa1642 100644 --- a/apps/api/src/app/endpoints/asset-profiles/asset-profiles.service.ts +++ b/apps/api/src/app/endpoints/asset-profiles/asset-profiles.service.ts @@ -1,19 +1,279 @@ +import { ActivitiesService } from '@ghostfolio/api/app/activities/activities.service'; +import { BenchmarkService } from '@ghostfolio/api/services/benchmark/benchmark.service'; +import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service'; +import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service'; import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service'; import { UpdateAssetProfileDataDto } from '@ghostfolio/common/dtos'; import { + applyAssetProfileOverrides, + getAssetProfileIdentifier, + getCurrencyFromSymbol, + isCurrency +} from '@ghostfolio/common/helper'; +import { + AssetProfileItem, AssetProfileIdentifier, - EnhancedSymbolProfile + AssetProfilesResponse, + EnhancedSymbolProfile, + Filter } from '@ghostfolio/common/interfaces'; +import { MarketDataPreset } from '@ghostfolio/common/types'; import { Injectable, NotFoundException } from '@nestjs/common'; -import { Prisma } from '@prisma/client'; +import { AssetClass, AssetSubClass, DataSource, Prisma } from '@prisma/client'; +import { groupBy } from 'lodash'; @Injectable() export class AssetProfilesService { public constructor( + private readonly activitiesService: ActivitiesService, + private readonly benchmarkService: BenchmarkService, + private readonly exchangeRateDataService: ExchangeRateDataService, + private readonly prismaService: PrismaService, private readonly symbolProfileService: SymbolProfileService ) {} + public async getAssetProfiles({ + filters = [], + presetId, + sortColumn, + sortDirection = 'asc', + skip, + take = Number.MAX_SAFE_INTEGER + }: { + filters?: Filter[]; + presetId?: MarketDataPreset; + skip?: number; + sortColumn?: string; + sortDirection?: Prisma.SortOrder; + take?: number; + }): Promise { + let orderBy: Prisma.Enumerable = + [{ symbol: 'asc' }]; + const where: Prisma.SymbolProfileWhereInput = {}; + + if (presetId === 'BENCHMARKS') { + const benchmarkAssetProfiles = + await this.benchmarkService.getBenchmarkAssetProfiles(); + + where.id = { + in: benchmarkAssetProfiles.map(({ id }) => { + return id; + }) + }; + } else if (presetId === 'CURRENCIES') { + return this.getAssetProfilesForCurrencies(); + } else if ( + presetId === 'ETF_WITHOUT_COUNTRIES' || + presetId === 'ETF_WITHOUT_SECTORS' + ) { + filters = [{ id: 'ETF', type: 'ASSET_SUB_CLASS' }]; + } else if (presetId === 'NO_ACTIVITIES') { + where.activities = { + none: {} + }; + } + + const searchQuery = filters.find(({ type }) => { + return type === 'SEARCH_QUERY'; + })?.id; + + const { + ASSET_SUB_CLASS: filtersByAssetSubClass, + DATA_SOURCE: filtersByDataSource + } = groupBy(filters, ({ type }) => { + return type; + }); + + const marketDataItems = await this.prismaService.marketData.groupBy({ + _count: true, + by: ['dataSource', 'symbol'] + }); + + if (filtersByAssetSubClass) { + where.assetSubClass = AssetSubClass[filtersByAssetSubClass[0].id]; + } + + if (filtersByDataSource) { + where.dataSource = DataSource[filtersByDataSource[0].id]; + } + + if (searchQuery) { + where.OR = [ + { id: { mode: 'insensitive', startsWith: searchQuery } }, + { isin: { mode: 'insensitive', startsWith: searchQuery } }, + { name: { mode: 'insensitive', startsWith: searchQuery } }, + { symbol: { mode: 'insensitive', startsWith: searchQuery } } + ]; + } + + if (sortColumn) { + orderBy = [{ [sortColumn]: sortDirection }]; + + if (sortColumn === 'activitiesCount') { + orderBy = [ + { + activities: { + _count: sortDirection + } + } + ]; + } + } + + const extendedPrismaClient = this.getExtendedPrismaClient(); + + const symbolProfileResult = await Promise.all([ + extendedPrismaClient.symbolProfile.findMany({ + skip, + take, + where, + orderBy: [...orderBy, { id: sortDirection }], + select: { + _count: { + select: { + activities: true, + watchedBy: true + } + }, + activities: { + orderBy: [{ date: 'asc' }], + select: { date: true }, + take: 1 + }, + assetClass: true, + assetSubClass: true, + comment: true, + countries: true, + currency: true, + dataSource: true, + id: true, + isin: true, + isActive: true, + isUsedByUsersWithSubscription: true, + name: true, + scraperConfiguration: true, + sectors: true, + symbol: true, + SymbolProfileOverrides: true + } + }), + this.prismaService.symbolProfile.count({ where }) + ]); + const symbolProfiles = symbolProfileResult[0]; + let count = symbolProfileResult[1]; + + const lastMarketPrices = await this.prismaService.marketData.findMany({ + distinct: ['dataSource', 'symbol'], + orderBy: { date: 'desc' }, + select: { + dataSource: true, + marketPrice: true, + symbol: true + }, + where: { + dataSource: { + in: symbolProfiles.map(({ dataSource }) => { + return dataSource; + }) + }, + symbol: { + in: symbolProfiles.map(({ symbol }) => { + return symbol; + }) + } + } + }); + + const lastMarketPriceMap = new Map(); + + for (const { dataSource, marketPrice, symbol } of lastMarketPrices) { + lastMarketPriceMap.set( + getAssetProfileIdentifier({ dataSource, symbol }), + marketPrice + ); + } + + let assetProfiles: AssetProfileItem[] = await Promise.all( + symbolProfiles.map(async (assetProfile) => { + const { + _count, + activities, + comment, + currency, + dataSource, + id, + isin, + isActive, + isUsedByUsersWithSubscription, + symbol + } = assetProfile; + + const { assetClass, assetSubClass, countries, name, sectors } = + applyAssetProfileOverrides( + assetProfile, + assetProfile.SymbolProfileOverrides + ); + + const countriesCount = countries ? Object.keys(countries).length : 0; + + const lastMarketPrice = lastMarketPriceMap.get( + getAssetProfileIdentifier({ dataSource, symbol }) + ); + + const marketDataItemCount = + marketDataItems.find((marketDataItem) => { + return ( + marketDataItem.dataSource === dataSource && + marketDataItem.symbol === symbol + ); + })?._count ?? 0; + + const sectorsCount = sectors ? Object.keys(sectors).length : 0; + + return { + assetClass, + assetSubClass, + comment, + countriesCount, + currency, + dataSource, + id, + isActive, + isin, + lastMarketPrice, + marketDataItemCount, + name, + sectorsCount, + symbol, + activitiesCount: _count.activities, + date: activities?.[0]?.date, + isUsedByUsersWithSubscription: await isUsedByUsersWithSubscription, + watchedByCount: _count.watchedBy + }; + }) + ); + + if (presetId) { + if (presetId === 'ETF_WITHOUT_COUNTRIES') { + assetProfiles = assetProfiles.filter(({ countriesCount }) => { + return countriesCount === 0; + }); + } else if (presetId === 'ETF_WITHOUT_SECTORS') { + assetProfiles = assetProfiles.filter(({ sectorsCount }) => { + return sectorsCount === 0; + }); + } + + count = assetProfiles.length; + } + + return { + assetProfiles, + count + }; + } + public async updateAssetProfileData( { dataSource, symbol }: AssetProfileIdentifier, assetProfileData: UpdateAssetProfileDataDto @@ -87,4 +347,136 @@ export class AssetProfilesService { return data; } + + private async getAssetProfilesForCurrencies(): Promise { + const currencyPairs = this.exchangeRateDataService.getCurrencyPairs(); + + const [lastMarketPrices, marketDataItems] = await Promise.all([ + this.prismaService.marketData.findMany({ + distinct: ['dataSource', 'symbol'], + orderBy: { date: 'desc' }, + select: { + dataSource: true, + marketPrice: true, + symbol: true + }, + where: { + dataSource: { + in: currencyPairs.map(({ dataSource }) => { + return dataSource; + }) + }, + symbol: { + in: currencyPairs.map(({ symbol }) => { + return symbol; + }) + } + } + }), + this.prismaService.marketData.groupBy({ + _count: true, + by: ['dataSource', 'symbol'] + }) + ]); + + const lastMarketPriceMap = new Map(); + + for (const { dataSource, marketPrice, symbol } of lastMarketPrices) { + lastMarketPriceMap.set( + getAssetProfileIdentifier({ dataSource, symbol }), + marketPrice + ); + } + + const assetProfilePromises: Promise[] = currencyPairs.map( + async ({ dataSource, symbol }) => { + let activitiesCount: EnhancedSymbolProfile['activitiesCount'] = 0; + let currency: EnhancedSymbolProfile['currency'] = '-'; + let dateOfFirstActivity: EnhancedSymbolProfile['dateOfFirstActivity']; + + if (isCurrency(getCurrencyFromSymbol(symbol))) { + currency = getCurrencyFromSymbol(symbol); + ({ activitiesCount, dateOfFirstActivity } = + await this.activitiesService.getStatisticsByCurrency(currency)); + } + + const lastMarketPrice = lastMarketPriceMap.get( + getAssetProfileIdentifier({ dataSource, symbol }) + ); + + const marketDataItemCount = + marketDataItems.find((marketDataItem) => { + return ( + marketDataItem.dataSource === dataSource && + marketDataItem.symbol === symbol + ); + })?._count ?? 0; + + return { + activitiesCount, + currency, + dataSource, + lastMarketPrice, + marketDataItemCount, + symbol, + assetClass: AssetClass.LIQUIDITY, + assetSubClass: AssetSubClass.CASH, + countriesCount: 0, + date: dateOfFirstActivity, + id: undefined, + isActive: true, + name: symbol, + sectorsCount: 0, + watchedByCount: 0 + }; + } + ); + + const assetProfiles = await Promise.all(assetProfilePromises); + return { assetProfiles, count: assetProfiles.length }; + } + + private getExtendedPrismaClient() { + const symbolProfileExtension = Prisma.defineExtension((client) => { + return client.$extends({ + result: { + symbolProfile: { + isUsedByUsersWithSubscription: { + compute: async ({ id }) => { + const { _count } = + await this.prismaService.symbolProfile.findUnique({ + select: { + _count: { + select: { + activities: { + where: { + user: { + subscriptions: { + some: { + expiresAt: { + gt: new Date() + } + } + } + } + } + } + } + } + }, + where: { + id + } + }); + + return _count.activities > 0; + } + } + } + } + }); + }); + + return this.prismaService.$extends(symbolProfileExtension); + } } diff --git a/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts b/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts index a4a9b6e19..f7396eb1d 100644 --- a/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts +++ b/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts @@ -10,11 +10,11 @@ import { } from '@ghostfolio/common/helper'; import { AssetProfileIdentifier, + AssetProfileItem, Filter, InfoItem, User } from '@ghostfolio/common/interfaces'; -import { AdminMarketDataItem } from '@ghostfolio/common/interfaces/admin-market-data.interface'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; import { GfSymbolPipe } from '@ghostfolio/common/pipes'; import { GfActivitiesFilterComponent } from '@ghostfolio/ui/activities-filter'; @@ -152,7 +152,7 @@ export class GfAdminMarketDataComponent implements AfterViewInit, OnInit { } ]; protected readonly canDeleteAssetProfile = canDeleteAssetProfile; - protected dataSource = new MatTableDataSource(); + protected dataSource = new MatTableDataSource(); protected defaultDateFormat: string; protected readonly displayedColumns: string[] = []; protected readonly filters$ = new Subject(); @@ -160,7 +160,7 @@ export class GfAdminMarketDataComponent implements AfterViewInit, OnInit { protected readonly isUUID = isUUID; protected pageSize = DEFAULT_PAGE_SIZE; protected placeholder = ''; - protected readonly selection = new SelectionModel(true); + protected readonly selection = new SelectionModel(true); protected totalItems = 0; protected user: User; @@ -375,8 +375,8 @@ export class GfAdminMarketDataComponent implements AfterViewInit, OnInit { this.selection.clear(); - this.adminService - .fetchAdminMarketData({ + this.dataService + .fetchAssetProfiles({ sortColumn, sortDirection, filters: this.activeFilters, @@ -384,15 +384,15 @@ export class GfAdminMarketDataComponent implements AfterViewInit, OnInit { take: this.pageSize }) .pipe(takeUntilDestroyed(this.destroyRef)) - .subscribe(({ count, marketData }) => { + .subscribe(({ assetProfiles, count }) => { this.totalItems = count; this.dataSource = new MatTableDataSource( - marketData.map((marketDataItem) => { + assetProfiles.map((assetProfile) => { return { - ...marketDataItem, + ...assetProfile, isBenchmark: this.benchmarks.some(({ id }) => { - return id === marketDataItem.id; + return id === assetProfile.id; }) }; }) diff --git a/libs/common/src/lib/helper.ts b/libs/common/src/lib/helper.ts index 3ca95d9f6..5bd6671f2 100644 --- a/libs/common/src/lib/helper.ts +++ b/libs/common/src/lib/helper.ts @@ -44,8 +44,8 @@ import { ghostfolioScraperApiSymbolPrefix } from './config'; import { - AdminMarketDataItem, AssetProfileIdentifier, + AssetProfileItem, Benchmark } from './interfaces'; import { BenchmarkTrend, ColorScheme } from './types'; @@ -149,7 +149,7 @@ export function canDeleteAssetProfile({ symbol, watchedByCount }: Pick< - AdminMarketDataItem, + AssetProfileItem, 'activitiesCount' | 'isBenchmark' | 'symbol' | 'watchedByCount' >): boolean { return ( diff --git a/libs/common/src/lib/interfaces/admin-market-data.interface.ts b/libs/common/src/lib/interfaces/asset-profile-item.interface.ts similarity index 79% rename from libs/common/src/lib/interfaces/admin-market-data.interface.ts rename to libs/common/src/lib/interfaces/asset-profile-item.interface.ts index 953f94e26..14e8471c1 100644 --- a/libs/common/src/lib/interfaces/admin-market-data.interface.ts +++ b/libs/common/src/lib/interfaces/asset-profile-item.interface.ts @@ -1,14 +1,10 @@ import { AssetClass, AssetSubClass, DataSource } from '@prisma/client'; -export interface AdminMarketData { - count: number; - marketData: AdminMarketDataItem[]; -} - -export interface AdminMarketDataItem { +export interface AssetProfileItem { activitiesCount: number; assetClass?: AssetClass; assetSubClass?: AssetSubClass; + comment?: string; countriesCount: number; currency: string; dataSource: DataSource; @@ -16,6 +12,7 @@ export interface AdminMarketDataItem { id: string; isActive: boolean; isBenchmark?: boolean; + isin?: string; isUsedByUsersWithSubscription?: boolean; lastMarketPrice: number; marketDataItemCount: number; diff --git a/libs/common/src/lib/interfaces/index.ts b/libs/common/src/lib/interfaces/index.ts index 6c076514c..989decdba 100644 --- a/libs/common/src/lib/interfaces/index.ts +++ b/libs/common/src/lib/interfaces/index.ts @@ -4,13 +4,10 @@ import type { Activity, ActivityError } from './activities.interface'; import type { AdminData } from './admin-data.interface'; import type { AdminJobs } from './admin-jobs.interface'; import type { AdminMarketDataDetails } from './admin-market-data-details.interface'; -import type { - AdminMarketData, - AdminMarketDataItem -} from './admin-market-data.interface'; import type { AdminUser } from './admin-user.interface'; import type { AssetClassSelectorOption } from './asset-class-selector-option.interface'; import type { AssetProfileIdentifier } from './asset-profile-identifier.interface'; +import type { AssetProfileItem } from './asset-profile-item.interface'; import type { BenchmarkProperty } from './benchmark-property.interface'; import type { Benchmark } from './benchmark.interface'; import type { Coupon } from './coupon.interface'; @@ -50,6 +47,7 @@ import type { AdminUsersResponse } from './responses/admin-users-response.interf import type { AiPromptResponse } from './responses/ai-prompt-response.interface'; import type { AiServiceHealthResponse } from './responses/ai-service-health-response.interface'; import type { ApiKeyResponse } from './responses/api-key-response.interface'; +import type { AssetProfilesResponse } from './responses/asset-profiles-response.interface'; import type { AssetResponse } from './responses/asset-response.interface'; import type { BenchmarkMarketDataDetailsResponse } from './responses/benchmark-market-data-details-response.interface'; import type { BenchmarkResponse } from './responses/benchmark-response.interface'; @@ -114,9 +112,7 @@ export { ActivityResponse, AdminData, AdminJobs, - AdminMarketData, AdminMarketDataDetails, - AdminMarketDataItem, AdminUser, AdminUserResponse, AdminUsersResponse, @@ -126,6 +122,8 @@ export { AssertionCredentialJSON, AssetClassSelectorOption, AssetProfileIdentifier, + AssetProfileItem, + AssetProfilesResponse, AssetResponse, AttestationCredentialJSON, Benchmark, diff --git a/libs/common/src/lib/interfaces/responses/asset-profiles-response.interface.ts b/libs/common/src/lib/interfaces/responses/asset-profiles-response.interface.ts new file mode 100644 index 000000000..e73e4c64f --- /dev/null +++ b/libs/common/src/lib/interfaces/responses/asset-profiles-response.interface.ts @@ -0,0 +1,6 @@ +import { AssetProfileItem } from '../asset-profile-item.interface'; + +export interface AssetProfilesResponse { + assetProfiles: AssetProfileItem[]; + count: number; +} diff --git a/libs/ui/src/lib/assistant/assistant.component.ts b/libs/ui/src/lib/assistant/assistant.component.ts index e52cefcbc..3f8efa6ec 100644 --- a/libs/ui/src/lib/assistant/assistant.component.ts +++ b/libs/ui/src/lib/assistant/assistant.component.ts @@ -3,7 +3,7 @@ import { Filter, PortfolioPosition, User } from '@ghostfolio/common/interfaces'; import { InternalRoute } from '@ghostfolio/common/routes/interfaces/internal-route.interface'; import { internalRoutes } from '@ghostfolio/common/routes/routes'; import { AccountWithPlatform, DateRange } from '@ghostfolio/common/types'; -import { AdminService, DataService } from '@ghostfolio/ui/services'; +import { DataService } from '@ghostfolio/ui/services'; import { FocusKeyManager } from '@angular/cdk/a11y'; import { @@ -155,7 +155,6 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { private preselectionTimeout: ReturnType; public constructor( - private adminService: AdminService, private changeDetectorRef: ChangeDetectorRef, private dataService: DataService, private destroyRef: DestroyRef @@ -674,8 +673,8 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { private searchAssetProfiles( aSearchTerm: string ): Observable { - return this.adminService - .fetchAdminMarketData({ + return this.dataService + .fetchAssetProfiles({ filters: [ { id: aSearchTerm, @@ -688,8 +687,8 @@ export class GfAssistantComponent implements OnChanges, OnDestroy, OnInit { catchError(() => { return EMPTY; }), - map(({ marketData }) => { - return marketData.map( + map(({ assetProfiles }) => { + return assetProfiles.map( ({ assetSubClass, currency, dataSource, name, symbol }) => { return { currency, diff --git a/libs/ui/src/lib/services/admin.service.ts b/libs/ui/src/lib/services/admin.service.ts index 094001c2f..0eea768d6 100644 --- a/libs/ui/src/lib/services/admin.service.ts +++ b/libs/ui/src/lib/services/admin.service.ts @@ -11,32 +11,26 @@ import { import { AdminData, AdminJobs, - AdminMarketData, AdminUserResponse, AdminUsersResponse, AssetProfileIdentifier, DataProviderGhostfolioStatusResponse, DataProviderHistoricalResponse, - EnhancedSymbolProfile, - Filter + EnhancedSymbolProfile } from '@ghostfolio/common/interfaces'; import { DateRange } from '@ghostfolio/common/types'; import { GF_ENVIRONMENT } from '@ghostfolio/ui/environment'; import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http'; import { Injectable, inject } from '@angular/core'; -import { SortDirection } from '@angular/material/sort'; import { DataSource, MarketData, Platform } from '@prisma/client'; import { JobStatus } from 'bull'; import { isNumber } from 'lodash'; -import { DataService } from './data.service'; - @Injectable({ providedIn: 'root' }) export class AdminService { - private readonly dataService = inject(DataService); private readonly environment = inject(GF_ENVIRONMENT); private readonly http = inject(HttpClient); @@ -81,42 +75,6 @@ export class AdminService { return this.http.get('/api/v1/admin'); } - public fetchAdminMarketData({ - filters, - skip, - sortColumn, - sortDirection, - take - }: { - filters?: Filter[]; - skip?: number; - sortColumn?: string; - sortDirection?: SortDirection; - take: number; - }) { - let params = this.dataService.buildFiltersAsQueryParams({ filters }); - - if (skip) { - params = params.append('skip', skip); - } - - if (sortColumn) { - params = params.append('sortColumn', sortColumn); - } - - if (sortDirection) { - params = params.append('sortDirection', sortDirection); - } - - if (take) { - params = params.append('take', take); - } - - return this.http.get('/api/v1/admin/market-data', { - params - }); - } - public fetchGhostfolioDataProviderStatus(aApiKey: string) { const headers = new HttpHeaders({ [HEADER_KEY_SKIP_INTERCEPTOR]: 'true', diff --git a/libs/ui/src/lib/services/data.service.ts b/libs/ui/src/lib/services/data.service.ts index a3d8bec98..079ea1bf6 100644 --- a/libs/ui/src/lib/services/data.service.ts +++ b/libs/ui/src/lib/services/data.service.ts @@ -28,6 +28,7 @@ import { AiPromptResponse, ApiKeyResponse, AssetProfileIdentifier, + AssetProfilesResponse, AssetResponse, BenchmarkMarketDataDetailsResponse, BenchmarkResponse, @@ -378,6 +379,42 @@ export class DataService { ); } + public fetchAssetProfiles({ + filters, + skip, + sortColumn, + sortDirection, + take + }: { + filters?: Filter[]; + skip?: number; + sortColumn?: string; + sortDirection?: SortDirection; + take: number; + }) { + let params = this.buildFiltersAsQueryParams({ filters }); + + if (skip) { + params = params.append('skip', skip); + } + + if (sortColumn) { + params = params.append('sortColumn', sortColumn); + } + + if (sortDirection) { + params = params.append('sortDirection', sortDirection); + } + + if (take) { + params = params.append('take', take); + } + + return this.http.get('/api/v1/asset-profiles', { + params + }); + } + public fetchBenchmarkForUser({ dataSource, filters, From 29aa6c7ecdf6456015c6c31cc0304f9e0c034d82 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 20 Jun 2026 09:52:23 +0200 Subject: [PATCH 68/74] Task/add Korean language to footer (#7033) * Add Korean * Update changelog --- CHANGELOG.md | 4 ++++ .../src/app/components/footer/footer.component.html | 12 +++++------- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index eb67cd23b..d1d66e91c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +### Added + +- Added the Korean (`ko`) language to the footer + ### Changed - Moved the endpoint to get the asset profiles from `GET api/v1/admin/market-data` to `GET api/v1/asset-profiles` diff --git a/apps/client/src/app/components/footer/footer.component.html b/apps/client/src/app/components/footer/footer.component.html index 45626620e..c839db8f1 100644 --- a/apps/client/src/app/components/footer/footer.component.html +++ b/apps/client/src/app/components/footer/footer.component.html @@ -141,13 +141,11 @@

  • Italiano
  • - +
  • + Korean (한국어) +
  • Nederlands
  • From bf39fd89d23b7236b38bb62c4607bd210e5e5e07 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 20 Jun 2026 09:56:47 +0200 Subject: [PATCH 69/74] Task/extend user detail dialog of admin control with subscriptions (#7078) Extend user detail dialog with subscriptions --- apps/api/src/app/admin/admin.service.ts | 18 ++++ .../user-detail-dialog.component.ts | 41 +++++++- .../user-detail-dialog.html | 96 +++++++++++++++++++ .../lib/interfaces/admin-user.interface.ts | 1 + 4 files changed, 154 insertions(+), 2 deletions(-) diff --git a/apps/api/src/app/admin/admin.service.ts b/apps/api/src/app/admin/admin.service.ts index 46ab25e96..f08fb6a37 100644 --- a/apps/api/src/app/admin/admin.service.ts +++ b/apps/api/src/app/admin/admin.service.ts @@ -240,6 +240,24 @@ export class AdminService { throw new NotFoundException(`User with ID ${id} not found`); } + if (this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION')) { + const subscriptions = await this.prismaService.subscription.findMany({ + orderBy: { + expiresAt: 'desc' + }, + where: { + userId: id + } + }); + + user.subscriptions = subscriptions.map((subscription) => { + return { + ...subscription, + price: subscription.price ?? 0 + }; + }); + } + return user; } diff --git a/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts b/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts index 05001a6bb..7b008786d 100644 --- a/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts +++ b/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts @@ -1,5 +1,6 @@ +import { getSum } from '@ghostfolio/common/helper'; import { AdminUserResponse } from '@ghostfolio/common/interfaces'; -import { AdminService } from '@ghostfolio/ui/services'; +import { AdminService, DataService } from '@ghostfolio/ui/services'; import { GfValueComponent } from '@ghostfolio/ui/value'; import { @@ -16,7 +17,11 @@ import { MatButtonModule } from '@angular/material/button'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import { MatDialogModule } from '@angular/material/dialog'; import { MatMenuModule } from '@angular/material/menu'; +import { MatTableDataSource, MatTableModule } from '@angular/material/table'; import { IonIcon } from '@ionic/angular/standalone'; +import { Subscription } from '@prisma/client'; +import { Big } from 'big.js'; +import { differenceInDays } from 'date-fns'; import { addIcons } from 'ionicons'; import { ellipsisVertical } from 'ionicons/icons'; import { EMPTY } from 'rxjs'; @@ -35,7 +40,8 @@ import { IonIcon, MatButtonModule, MatDialogModule, - MatMenuModule + MatMenuModule, + MatTableModule ], schemas: [CUSTOM_ELEMENTS_SCHEMA], selector: 'gf-user-detail-dialog', @@ -43,18 +49,29 @@ import { templateUrl: './user-detail-dialog.html' }) export class GfUserDetailDialogComponent implements OnInit { + public baseCurrency: string; + public subscriptionsDataSource = new MatTableDataSource(); + public subscriptionsDisplayedColumns = [ + 'createdAt', + 'type', + 'price', + 'expiresAt' + ]; public user: AdminUserResponse; public constructor( private adminService: AdminService, private changeDetectorRef: ChangeDetectorRef, @Inject(MAT_DIALOG_DATA) public data: UserDetailDialogParams, + private dataService: DataService, private destroyRef: DestroyRef, public dialogRef: MatDialogRef< GfUserDetailDialogComponent, UserDetailDialogResult > ) { + this.baseCurrency = this.dataService.fetchInfo().baseCurrency; + addIcons({ ellipsisVertical }); @@ -74,6 +91,8 @@ export class GfUserDetailDialogComponent implements OnInit { .subscribe((user) => { this.user = user; + this.subscriptionsDataSource.data = this.user.subscriptions ?? []; + this.changeDetectorRef.markForCheck(); }); } @@ -85,6 +104,24 @@ export class GfUserDetailDialogComponent implements OnInit { }); } + public getSum() { + return getSum( + this.subscriptionsDataSource.data.map(({ price }) => { + return new Big(price); + }) + ).toNumber(); + } + + public getType({ createdAt, expiresAt, price }: Subscription) { + if (price) { + return $localize`Paid`; + } + + return differenceInDays(expiresAt, createdAt) <= 90 + ? $localize`Trial` + : $localize`Coupon`; + } + public onClose() { this.dialogRef.close(); } diff --git a/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html b/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html index caf1679eb..df935c780 100644 --- a/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html +++ b/apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -124,6 +124,102 @@ >
    + + @if (subscriptionsDataSource.data.length > 0) { +
    +
    +

    Subscriptions

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Created + + + + Total + + Type + + {{ getType(element) }} + + Price + + + + + + Expires + + +
    +
    +
    +
    + } }
    diff --git a/libs/common/src/lib/interfaces/admin-user.interface.ts b/libs/common/src/lib/interfaces/admin-user.interface.ts index 4cb02b16e..a7cda68a8 100644 --- a/libs/common/src/lib/interfaces/admin-user.interface.ts +++ b/libs/common/src/lib/interfaces/admin-user.interface.ts @@ -12,4 +12,5 @@ export interface AdminUser { provider: Provider; role: Role; subscription?: Subscription; + subscriptions?: Subscription[]; } From 7d35c046ac71d965f962d6f82b576e62cec3e9d1 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 20 Jun 2026 09:58:01 +0200 Subject: [PATCH 70/74] Task/simplify Contributing section in README.md (#6728) Improve Contributing section --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 270b65126..de4b4d828 100644 --- a/README.md +++ b/README.md @@ -362,7 +362,7 @@ Are you building your own project? Add the `ghostfolio` topic to your _GitHub_ r ## Contributing -Ghostfolio is **100% free** and **open source**. We encourage and support an active and healthy community that accepts contributions from the public, including you. +Ghostfolio is **100% free** and **open source**. We support an active and healthy community and welcome contributions from everyone, including you. Not sure what to work on? We have [some ideas](https://github.com/ghostfolio/ghostfolio/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22%20no%3Aassignee), even for [newcomers](https://github.com/ghostfolio/ghostfolio/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22%20no%3Aassignee). Please join the Ghostfolio [Slack](https://join.slack.com/t/ghostfolio/shared_invite/zt-vsaan64h-F_I0fEo5M0P88lP9ibCxFg) channel or post to [@ghostfolio\_](https://x.com/ghostfolio_) on _X_. We would love to hear from you. From c2a07e8185c3b75f1377d41a5f64efd4ac69d5ea Mon Sep 17 00:00:00 2001 From: Kenrick Tandrian <60643640+KenTandrian@users.noreply.github.com> Date: Sat, 20 Jun 2026 14:59:29 +0700 Subject: [PATCH 71/74] Task/improve type safety in import activities service (#7077) * Improve type safety --- .../app/services/import-activities.service.ts | 172 ++++++++++-------- 1 file changed, 92 insertions(+), 80 deletions(-) diff --git a/apps/client/src/app/services/import-activities.service.ts b/apps/client/src/app/services/import-activities.service.ts index 55b5c44d5..f5cc74106 100644 --- a/apps/client/src/app/services/import-activities.service.ts +++ b/apps/client/src/app/services/import-activities.service.ts @@ -8,12 +8,11 @@ import { parseDate as parseDateHelper } from '@ghostfolio/common/helper'; import { Activity } from '@ghostfolio/common/interfaces'; import { HttpClient } from '@angular/common/http'; -import { Injectable } from '@angular/core'; +import { inject, Injectable } from '@angular/core'; import { Account, DataSource, Type as ActivityType } from '@prisma/client'; -import { isFinite } from 'lodash'; +import { isFinite, isNumber, isString } from 'lodash'; import { parse as csvToJson } from 'papaparse'; -import { EMPTY } from 'rxjs'; -import { catchError } from 'rxjs/operators'; +import { firstValueFrom } from 'rxjs'; @Injectable({ providedIn: 'root' @@ -35,7 +34,7 @@ export class ImportActivitiesService { 'value' ]; - public constructor(private http: HttpClient) {} + private readonly http = inject(HttpClient); public async importCsv({ fileContent, @@ -49,7 +48,7 @@ export class ImportActivitiesService { activities: Activity[]; assetProfiles: CreateAssetProfileWithMarketDataDto[]; }> { - const content = csvToJson(fileContent, { + const content = csvToJson>(fileContent, { dynamicTyping: true, header: true, skipEmptyLines: true @@ -83,22 +82,22 @@ export class ImportActivitiesService { assetProfiles.push({ currency, symbol, - assetClass: null, - assetSubClass: null, - comment: null, + assetClass: undefined, + assetSubClass: undefined, + comment: undefined, countries: [], - cusip: null, + cusip: undefined, dataSource: DataSource.MANUAL, - figi: null, - figiComposite: null, - figiShareClass: null, + figi: undefined, + figiComposite: undefined, + figiShareClass: undefined, holdings: [], isActive: true, - isin: null, + isin: undefined, marketData: [], name: symbol, sectors: [], - url: null + url: undefined }); } } @@ -126,7 +125,7 @@ export class ImportActivitiesService { }): Promise<{ activities: Activity[]; }> { - return new Promise((resolve, reject) => { + return firstValueFrom( this.postImport( { accounts, @@ -136,18 +135,7 @@ export class ImportActivitiesService { }, isDryRun ) - .pipe( - catchError((error) => { - reject(error); - return EMPTY; - }) - ) - .subscribe({ - next: (data) => { - resolve(data); - } - }); - }); + ); } public importSelectedActivities({ @@ -163,11 +151,9 @@ export class ImportActivitiesService { }): Promise<{ activities: Activity[]; }> { - const importData: CreateOrderDto[] = []; - - for (const activity of activities) { - importData.push(this.convertToCreateOrderDto(activity)); - } + const importData = activities.map((activity) => + this.convertToCreateOrderDto(activity) + ); return this.importJson({ accounts, @@ -191,14 +177,14 @@ export class ImportActivitiesService { updateAccountBalance }: Activity): CreateOrderDto { return { - accountId, - comment, fee, quantity, type, unitPrice, updateAccountBalance, - currency: currency ?? SymbolProfile.currency, + accountId: accountId ?? undefined, + comment: comment ?? undefined, + currency: currency ?? SymbolProfile.currency ?? '', dataSource: SymbolProfile.dataSource, date: date.toString(), symbol: SymbolProfile.symbol, @@ -208,28 +194,32 @@ export class ImportActivitiesService { }; } - private lowercaseKeys(aObject: any) { - return Object.keys(aObject).reduce((acc, key) => { - acc[key.toLowerCase()] = aObject[key]; - return acc; - }, {}); + private lowercaseKeys( + aObject: Record + ): Record { + return Object.fromEntries( + Object.entries(aObject).map(([key, val]) => { + return [key.toLowerCase(), val]; + }) + ); } private parseAccount({ item, userAccounts }: { - item: any; + item: Record; userAccounts: Account[]; }) { item = this.lowercaseKeys(item); for (const key of ImportActivitiesService.ACCOUNT_KEYS) { - if (item[key]) { - return userAccounts.find((account) => { + const value = item[key]; + + if (isNumber(value) || isString(value)) { + return userAccounts.find(({ id, name }) => { return ( - account.id === item[key] || - account.name.toLowerCase() === item[key].toLowerCase() + id === value || name?.toLowerCase() === String(value).toLowerCase() ); })?.id; } @@ -238,12 +228,14 @@ export class ImportActivitiesService { return undefined; } - private parseComment({ item }: { item: any }) { + private parseComment({ item }: { item: Record }) { item = this.lowercaseKeys(item); for (const key of ImportActivitiesService.COMMENT_KEYS) { - if (item[key]) { - return item[key]; + const value = item[key]; + + if (isNumber(value) || isString(value)) { + return String(value); } } @@ -255,15 +247,17 @@ export class ImportActivitiesService { index, item }: { - content: any[]; + content: Record[]; index: number; - item: any; + item: Record; }) { item = this.lowercaseKeys(item); for (const key of ImportActivitiesService.CURRENCY_KEYS) { - if (item[key]) { - return item[key]; + const value = item[key]; + + if (isString(value)) { + return value; } } @@ -273,12 +267,14 @@ export class ImportActivitiesService { }; } - private parseDataSource({ item }: { item: any }) { + private parseDataSource({ item }: { item: Record }) { item = this.lowercaseKeys(item); for (const key of ImportActivitiesService.DATA_SOURCE_KEYS) { - if (item[key]) { - return DataSource[item[key].toUpperCase()]; + const value = item[key]; + + if (isString(value)) { + return DataSource[value.toUpperCase() as keyof typeof DataSource]; } } @@ -290,16 +286,22 @@ export class ImportActivitiesService { index, item }: { - content: any[]; + content: Record[]; index: number; - item: any; + item: Record; }) { item = this.lowercaseKeys(item); for (const key of ImportActivitiesService.DATE_KEYS) { - if (item[key]) { + const value = item[key]; + + if (isNumber(value) || isString(value)) { try { - return parseDateHelper(item[key].toString()).toISOString(); + const parsedDate = parseDateHelper(String(value)); + + if (parsedDate) { + return parsedDate.toISOString(); + } } catch {} } } @@ -315,15 +317,17 @@ export class ImportActivitiesService { index, item }: { - content: any[]; + content: Record[]; index: number; - item: any; + item: Record; }) { item = this.lowercaseKeys(item); for (const key of ImportActivitiesService.FEE_KEYS) { - if (isFinite(item[key])) { - return Math.abs(item[key]); + const value = item[key]; + + if (isNumber(value) && isFinite(value)) { + return Math.abs(value); } } @@ -338,15 +342,17 @@ export class ImportActivitiesService { index, item }: { - content: any[]; + content: Record[]; index: number; - item: any; + item: Record; }) { item = this.lowercaseKeys(item); for (const key of ImportActivitiesService.QUANTITY_KEYS) { - if (isFinite(item[key])) { - return Math.abs(item[key]); + const value = item[key]; + + if (isNumber(value) && isFinite(value)) { + return Math.abs(value); } } @@ -361,15 +367,17 @@ export class ImportActivitiesService { index, item }: { - content: any[]; + content: Record[]; index: number; - item: any; + item: Record; }) { item = this.lowercaseKeys(item); for (const key of ImportActivitiesService.SYMBOL_KEYS) { - if (item[key]) { - return item[key]; + const value = item[key]; + + if (isNumber(value) || isString(value)) { + return String(value); } } @@ -384,15 +392,17 @@ export class ImportActivitiesService { index, item }: { - content: any[]; + content: Record[]; index: number; - item: any; + item: Record; }): ActivityType { item = this.lowercaseKeys(item); for (const key of ImportActivitiesService.TYPE_KEYS) { - if (item[key]) { - switch (item[key].toLowerCase()) { + const value = item[key]; + + if (isString(value)) { + switch (value.toLowerCase()) { case 'buy': return 'BUY'; case 'dividend': @@ -422,15 +432,17 @@ export class ImportActivitiesService { index, item }: { - content: any[]; + content: Record[]; index: number; - item: any; + item: Record; }) { item = this.lowercaseKeys(item); for (const key of ImportActivitiesService.UNIT_PRICE_KEYS) { - if (isFinite(item[key])) { - return Math.abs(item[key]); + const value = item[key]; + + if (isNumber(value) && isFinite(value)) { + return Math.abs(value); } } From e4764238693c1f21df3d84d470fb2b190f86a2ae Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 20 Jun 2026 13:31:45 +0200 Subject: [PATCH 72/74] Task/update locales (#6999) Co-authored-by: github-actions[bot] --- apps/client/src/locales/messages.ca.xlf | 440 +++++++++++++---------- apps/client/src/locales/messages.de.xlf | 446 ++++++++++++++---------- apps/client/src/locales/messages.es.xlf | 446 ++++++++++++++---------- apps/client/src/locales/messages.fr.xlf | 446 ++++++++++++++---------- apps/client/src/locales/messages.it.xlf | 446 ++++++++++++++---------- apps/client/src/locales/messages.ko.xlf | 446 ++++++++++++++---------- apps/client/src/locales/messages.nl.xlf | 446 ++++++++++++++---------- apps/client/src/locales/messages.pl.xlf | 446 ++++++++++++++---------- apps/client/src/locales/messages.pt.xlf | 446 ++++++++++++++---------- apps/client/src/locales/messages.tr.xlf | 446 ++++++++++++++---------- apps/client/src/locales/messages.uk.xlf | 432 +++++++++++++---------- apps/client/src/locales/messages.xlf | 430 +++++++++++++---------- apps/client/src/locales/messages.zh.xlf | 446 ++++++++++++++---------- 13 files changed, 3371 insertions(+), 2391 deletions(-) diff --git a/apps/client/src/locales/messages.ca.xlf b/apps/client/src/locales/messages.ca.xlf index 9a181613d..be57f85c6 100644 --- a/apps/client/src/locales/messages.ca.xlf +++ b/apps/client/src/locales/messages.ca.xlf @@ -102,7 +102,7 @@ El risc d’assumir pèrdues en les inversions és substancial. No és recomanable invertir diners que pugui necessitar a curt termini. apps/client/src/app/components/footer/footer.component.html - 182 + 180 @@ -427,7 +427,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 315 + 314 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -499,7 +499,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 322 + 321 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -519,7 +519,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 307 + 305 @@ -543,7 +543,7 @@ libs/ui/src/lib/account-balances/account-balances.component.html - 34 + 39 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -555,11 +555,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 288 + 286 libs/ui/src/lib/activities-table/activities-table.component.html - 324 + 322 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -583,7 +583,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 267 + 278 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -607,7 +607,7 @@ Suprimir apps/client/src/app/components/admin-market-data/admin-market-data.html - 289 + 300 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -631,7 +631,7 @@ libs/ui/src/lib/account-balances/account-balances.component.html - 80 + 85 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -654,17 +654,29 @@ 146 + + Paid + Paid + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts + 117 + + Type Tipus apps/client/src/app/components/admin-jobs/admin-jobs.html - 57 + 48 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html 28 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 156 + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 15 @@ -675,7 +687,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 187 + 185 @@ -683,7 +695,7 @@ Perfil d’Actiu apps/client/src/app/components/admin-jobs/admin-jobs.html - 61 + 52 @@ -691,11 +703,11 @@ Dades Històriques de Mercat apps/client/src/app/components/admin-jobs/admin-jobs.html - 63 + 54 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 454 + 453 @@ -703,7 +715,7 @@ Origen de les Dades apps/client/src/app/components/admin-jobs/admin-jobs.html - 91 + 82 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -727,7 +739,7 @@ Prioritat apps/client/src/app/components/admin-jobs/admin-jobs.html - 105 + 96 @@ -735,7 +747,7 @@ Intents apps/client/src/app/components/admin-jobs/admin-jobs.html - 129 + 120 @@ -743,7 +755,11 @@ Creat apps/client/src/app/components/admin-jobs/admin-jobs.html - 143 + 134 + + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 140 @@ -751,7 +767,7 @@ Finalitzat apps/client/src/app/components/admin-jobs/admin-jobs.html - 152 + 143 @@ -759,7 +775,7 @@ Estat apps/client/src/app/components/admin-jobs/admin-jobs.html - 161 + 152 apps/client/src/app/components/admin-settings/admin-settings.component.html @@ -779,7 +795,7 @@ Aturar Processos apps/client/src/app/components/admin-jobs/admin-jobs.html - 202 + 193 @@ -787,7 +803,7 @@ Veure les Dades apps/client/src/app/components/admin-jobs/admin-jobs.html - 217 + 208 @@ -795,7 +811,7 @@ Veure Stacktrace apps/client/src/app/components/admin-jobs/admin-jobs.html - 225 + 216 @@ -803,7 +819,7 @@ Executar Procés apps/client/src/app/components/admin-jobs/admin-jobs.html - 229 + 220 @@ -811,7 +827,7 @@ Suprimir Procés apps/client/src/app/components/admin-jobs/admin-jobs.html - 233 + 224 @@ -827,7 +843,7 @@ Find an account... libs/ui/src/lib/assistant/assistant.component.ts - 471 + 468 @@ -843,7 +859,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 196 + 194 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -978,14 +994,6 @@ 66 - - Delete Profiles - Eliminar Perfils - - apps/client/src/app/components/admin-market-data/admin-market-data.html - 242 - - Do you really want to delete this asset profile? Realment vol eliminar el perfil d’aquest actiu? @@ -993,21 +1001,9 @@ apps/client/src/app/components/admin-market-data/admin-market-data.service.ts 28 - - - Do you really want to delete these profiles? - Realment vol eliminar aquests perfils? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 59 - - - - Oops! Could not delete profiles. - Oooh! No s’han pogut eliminar els perfils - - apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 47 + 66 @@ -1047,11 +1043,11 @@ Importar apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 155 + 158 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 190 + 193 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.html @@ -1075,7 +1071,7 @@ País apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 278 + 277 apps/client/src/app/components/admin-users/admin-users.html @@ -1083,7 +1079,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 281 + 280 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -1095,15 +1091,15 @@ Sectors apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 284 + 283 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 403 + 402 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 287 + 286 apps/client/src/app/pages/public/public-page.html @@ -1115,15 +1111,15 @@ Països apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 294 + 293 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 414 + 413 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 299 + 298 @@ -1131,7 +1127,7 @@ Mapatge de Símbols apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 392 + 391 @@ -1150,12 +1146,20 @@ 32 + + Total + Total + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 150 + + Scraper Configuration Configuració del Proveïdor de Dades apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 477 + 476 @@ -1163,7 +1167,7 @@ Prova apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 574 + 573 @@ -1171,11 +1175,11 @@ Url apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 425 + 424 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 556 + 555 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -1199,7 +1203,7 @@ Notes apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 438 + 437 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1347,7 +1351,7 @@ Recollida de Dades apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 597 + 596 apps/client/src/app/components/admin-overview/admin-overview.html @@ -1359,7 +1363,7 @@ Find a holding... libs/ui/src/lib/assistant/assistant.component.ts - 472 + 469 @@ -1395,7 +1399,7 @@ libs/ui/src/lib/account-balances/account-balances.component.html - 93 + 98 @@ -1427,7 +1431,7 @@ Està segur que vol eliminar aquesta plataforma? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 115 + 114 @@ -1443,7 +1447,7 @@ By apps/client/src/app/pages/portfolio/fire/fire-page.html - 139 + 140 @@ -1507,7 +1511,7 @@ Està segur que vol eliminar aquesta etiqueta? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 117 + 116 @@ -1627,7 +1631,7 @@ Portfolio apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 143 + 139 apps/client/src/app/components/header/header.component.html @@ -1639,7 +1643,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 95 + 98 libs/common/src/lib/routes/routes.ts @@ -1651,11 +1655,11 @@ Punt de Referència apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 384 + 383 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 155 + 151 @@ -1767,7 +1771,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 217 + 215 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -1807,7 +1811,7 @@ Informar d’un Problema amb les Dades apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 457 + 456 @@ -1999,7 +2003,7 @@ Import total apps/client/src/app/components/investment-chart/investment-chart.component.ts - 147 + 143 @@ -2015,7 +2019,7 @@ Taxa d’estalvi apps/client/src/app/components/investment-chart/investment-chart.component.ts - 205 + 201 @@ -2067,15 +2071,15 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 97 + 100 apps/client/src/app/pages/portfolio/fire/fire-page.html - 83 + 84 apps/client/src/app/pages/portfolio/fire/fire-page.html - 161 + 162 apps/client/src/app/pages/pricing/pricing-page.html @@ -2395,7 +2399,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 373 + 372 @@ -2407,7 +2411,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 385 + 384 @@ -2419,7 +2423,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 395 + 394 @@ -2431,7 +2435,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 419 + 416 @@ -2451,7 +2455,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 425 + 422 @@ -2559,11 +2563,11 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 80 + 81 apps/client/src/app/pages/portfolio/fire/fire-page.html - 158 + 159 apps/client/src/app/pages/pricing/pricing-page.html @@ -2611,7 +2615,7 @@ Jump to a page... libs/ui/src/lib/assistant/assistant.component.ts - 473 + 470 @@ -2627,7 +2631,7 @@ Include in apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 382 + 381 @@ -2670,6 +2674,14 @@ 9 + + Coupon + Coupon + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts + 122 + + Language Llengua @@ -2691,7 +2703,7 @@ Localització apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 515 + 514 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -2755,7 +2767,7 @@ this is projected to increase to apps/client/src/app/pages/portfolio/fire/fire-page.html - 147 + 148 @@ -3007,7 +3019,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 383 + 382 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -3101,6 +3113,10 @@ Job Queue Cua de treball + + apps/client/src/app/pages/admin/admin-page.component.ts + 84 + libs/common/src/lib/routes/routes.ts 46 @@ -3111,7 +3127,7 @@ Dades de mercat apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 405 + 404 libs/common/src/lib/routes/routes.ts @@ -3149,10 +3165,6 @@ Overview Visió general - - apps/client/src/app/components/admin-jobs/admin-jobs.html - 7 - apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 114 @@ -3171,7 +3183,7 @@ apps/client/src/app/pages/admin/admin-page.component.ts - 41 + 68 apps/client/src/app/pages/resources/resources-page.component.ts @@ -3580,7 +3592,7 @@ Mercats apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 386 + 385 apps/client/src/app/components/footer/footer.component.html @@ -3887,6 +3899,14 @@ 217 + + Oops! Could not delete the asset profiles. + Oops! Could not delete the asset profiles. + + apps/client/src/app/components/admin-market-data/admin-market-data.service.ts + 52 + + What our users are saying Que nostre usuaris estan dient @@ -4036,7 +4056,7 @@ and a safe withdrawal rate (SWR) of apps/client/src/app/pages/portfolio/fire/fire-page.html - 108 + 109 @@ -4060,7 +4080,7 @@ Job ID apps/client/src/app/components/admin-jobs/admin-jobs.html - 43 + 34 @@ -4120,7 +4140,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 347 + 346 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -4216,7 +4236,15 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 241 + 239 + + + + Subscriptions + Subscriptions + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 131 @@ -4316,7 +4344,7 @@ Càrrega de dividends apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 68 + 71 @@ -4324,7 +4352,7 @@ Trieu o deixeu anar un fitxer aquí apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 84 + 87 @@ -4332,7 +4360,7 @@ S’admeten els formats de fitxer següents: apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 90 + 93 @@ -4340,7 +4368,7 @@ Seleccioneu Dividends apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 113 + 116 @@ -4348,7 +4376,7 @@ Seleccioneu Activitats apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 115 + 118 @@ -4356,11 +4384,19 @@ Enrere apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 146 + 149 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 182 + 185 + + + + Price + Price + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 166 @@ -4455,6 +4491,14 @@ 150 + + Trial + Trial + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts + 121 + + Exclude from Analysis Excluir de l’anàlisi @@ -4624,7 +4668,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 89 + 92 @@ -4651,12 +4695,20 @@ 93 + + Expires + Expires + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 194 + + Close Holding Close Holding apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 447 + 446 @@ -4996,7 +5048,7 @@ Sustainable retirement income apps/client/src/app/pages/portfolio/fire/fire-page.html - 41 + 42 @@ -5096,20 +5148,12 @@ 42 - - Switzerland - Suïssa - - apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 58 - - Global Global apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 59 + 60 libs/ui/src/lib/i18n.ts @@ -5153,11 +5197,11 @@ per month apps/client/src/app/pages/portfolio/fire/fire-page.html - 94 + 95 apps/client/src/app/pages/portfolio/fire/fire-page.html - 172 + 173 @@ -5445,7 +5489,7 @@ Realment voleu eliminar el saldo d’aquest compte? libs/ui/src/lib/account-balances/account-balances.component.ts - 113 + 127 @@ -5485,7 +5529,7 @@ Esborrany libs/ui/src/lib/activities-table/activities-table.component.html - 168 + 167 @@ -5525,7 +5569,7 @@ Setmana fins avui libs/ui/src/lib/assistant/assistant.component.ts - 377 + 376 @@ -5537,7 +5581,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 377 + 376 @@ -5545,7 +5589,7 @@ Mes fins a la data libs/ui/src/lib/assistant/assistant.component.ts - 381 + 380 @@ -5557,7 +5601,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 381 + 380 @@ -5565,7 +5609,7 @@ Any fins a la data libs/ui/src/lib/assistant/assistant.component.ts - 385 + 384 @@ -5585,7 +5629,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 395 + 394 @@ -5597,7 +5641,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 419 + 416 @@ -5657,7 +5701,7 @@ , apps/client/src/app/pages/portfolio/fire/fire-page.html - 145 + 146 @@ -5692,6 +5736,14 @@ 130 + + {VAR_PLURAL, plural, =1 {Profile} other {Profiles}} + {VAR_PLURAL, plural, =1 {Profile} other {Profiles}} + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 249 + + Loan Loan @@ -5745,7 +5797,7 @@ annual interest rate apps/client/src/app/pages/portfolio/fire/fire-page.html - 185 + 186 @@ -5821,7 +5873,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 339 + 337 libs/ui/src/lib/i18n.ts @@ -5853,7 +5905,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 332 + 331 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -5885,7 +5937,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 348 + 347 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -6009,7 +6061,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 449 + 448 @@ -6057,7 +6109,7 @@ Símbol apps/client/src/app/components/admin-jobs/admin-jobs.html - 77 + 68 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -6073,7 +6125,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 319 + 318 libs/ui/src/lib/i18n.ts @@ -6149,7 +6201,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 265 + 263 libs/ui/src/lib/i18n.ts @@ -6353,7 +6405,7 @@ If you retire today, you would be able to withdraw apps/client/src/app/pages/portfolio/fire/fire-page.html - 68 + 69 @@ -6433,11 +6485,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 451 + 450 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 465 + 464 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -6457,7 +6509,7 @@ Alternativa apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 83 + 86 @@ -6465,7 +6517,7 @@ Aplicació apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 84 + 87 @@ -6473,7 +6525,7 @@ Pressupost apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 85 + 88 @@ -6533,7 +6585,15 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 86 + 89 + + + + Oops! Could not delete the asset profile. + Oops! Could not delete the asset profile. + + apps/client/src/app/components/admin-market-data/admin-market-data.service.ts + 51 @@ -6541,7 +6601,7 @@ Oficina familiar apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 87 + 90 @@ -6549,7 +6609,7 @@ Investor apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 90 + 93 @@ -6561,7 +6621,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 91 + 94 @@ -6573,7 +6633,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 93 + 96 @@ -6581,7 +6641,7 @@ Privacy apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 94 + 97 @@ -6589,7 +6649,7 @@ Software apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 96 + 99 @@ -6597,7 +6657,7 @@ Tool apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 97 + 100 @@ -6605,7 +6665,7 @@ User Experience apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 98 + 101 @@ -6613,7 +6673,7 @@ Wealth apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 99 + 102 @@ -6621,7 +6681,7 @@ Wealth Management apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 100 + 103 @@ -6632,6 +6692,14 @@ 474 + + Do you really want to delete these asset profiles? + Do you really want to delete these asset profiles? + + apps/client/src/app/components/admin-market-data/admin-market-data.service.ts + 67 + + Error Error @@ -6669,7 +6737,7 @@ , based on your total assets of apps/client/src/app/pages/portfolio/fire/fire-page.html - 96 + 97 @@ -6689,7 +6757,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 602 + 601 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6741,7 +6809,7 @@ Close apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 604 + 603 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6761,7 +6829,7 @@ apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 124 + 131 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -6769,7 +6837,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 133 + 229 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -6813,7 +6881,7 @@ Portfolio Snapshot apps/client/src/app/components/admin-jobs/admin-jobs.html - 65 + 56 @@ -6845,7 +6913,7 @@ Threshold Min apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 52 + 58 @@ -6853,7 +6921,7 @@ Threshold Max apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 87 + 93 @@ -6945,7 +7013,7 @@ , assuming a apps/client/src/app/pages/portfolio/fire/fire-page.html - 174 + 175 @@ -6976,6 +7044,14 @@ 195 + + Delete + Delete + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 244 + + cannot be self-hosted cannot be self-hosted @@ -7147,7 +7223,7 @@ Threshold range apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 9 + 15 @@ -7279,7 +7355,7 @@ Save apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 613 + 612 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7303,7 +7379,7 @@ apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 130 + 139 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -7403,7 +7479,7 @@ Default Market Price apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 487 + 486 @@ -7411,7 +7487,7 @@ Mode apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 524 + 523 @@ -7419,7 +7495,7 @@ Selector apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 540 + 539 @@ -7427,7 +7503,7 @@ HTTP Request Headers apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 500 + 499 @@ -7471,7 +7547,7 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 381 + 380 @@ -7491,11 +7567,11 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 381 + 380 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 394 + 393 @@ -8224,7 +8300,7 @@ Manage Asset Profile apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 472 + 471 @@ -8248,7 +8324,7 @@ Average Unit Price apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 117 + 123 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf index 663196761..5de30f80f 100644 --- a/apps/client/src/locales/messages.de.xlf +++ b/apps/client/src/locales/messages.de.xlf @@ -26,7 +26,7 @@ Das Ausfallrisiko beim Börsenhandel kann erheblich sein. Es ist nicht ratsam, Geld zu investieren, welches du kurzfristig benötigst. apps/client/src/app/components/footer/footer.component.html - 182 + 180 @@ -50,12 +50,16 @@ Typ apps/client/src/app/components/admin-jobs/admin-jobs.html - 57 + 48 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html 28 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 156 + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 15 @@ -66,7 +70,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 187 + 185 @@ -110,7 +114,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 315 + 314 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -194,7 +198,7 @@ libs/ui/src/lib/account-balances/account-balances.component.html - 34 + 39 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -206,11 +210,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 288 + 286 libs/ui/src/lib/activities-table/activities-table.component.html - 324 + 322 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -234,7 +238,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 267 + 278 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -258,7 +262,7 @@ Löschen apps/client/src/app/components/admin-market-data/admin-market-data.html - 289 + 300 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -282,7 +286,7 @@ libs/ui/src/lib/account-balances/account-balances.component.html - 80 + 85 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -305,12 +309,20 @@ 146 + + Paid + Paid + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts + 117 + + Delete Jobs Jobs löschen apps/client/src/app/components/admin-jobs/admin-jobs.html - 202 + 193 @@ -318,7 +330,7 @@ Datenquelle apps/client/src/app/components/admin-jobs/admin-jobs.html - 91 + 82 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -342,7 +354,7 @@ Versuche apps/client/src/app/components/admin-jobs/admin-jobs.html - 129 + 120 @@ -350,7 +362,11 @@ Erstellt apps/client/src/app/components/admin-jobs/admin-jobs.html - 143 + 134 + + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 140 @@ -358,7 +374,7 @@ Abgeschlossen apps/client/src/app/components/admin-jobs/admin-jobs.html - 152 + 143 @@ -366,7 +382,7 @@ Status apps/client/src/app/components/admin-jobs/admin-jobs.html - 161 + 152 apps/client/src/app/components/admin-settings/admin-settings.component.html @@ -398,11 +414,11 @@ Historische Marktdaten apps/client/src/app/components/admin-jobs/admin-jobs.html - 63 + 54 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 454 + 453 @@ -410,7 +426,7 @@ Daten anzeigen apps/client/src/app/components/admin-jobs/admin-jobs.html - 217 + 208 @@ -418,7 +434,7 @@ Stacktrace anzeigen apps/client/src/app/components/admin-jobs/admin-jobs.html - 225 + 216 @@ -426,7 +442,7 @@ Job löschen apps/client/src/app/components/admin-jobs/admin-jobs.html - 233 + 224 @@ -442,7 +458,7 @@ Finde ein Konto... libs/ui/src/lib/assistant/assistant.component.ts - 471 + 468 @@ -458,7 +474,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 196 + 194 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -622,7 +638,7 @@ libs/ui/src/lib/account-balances/account-balances.component.html - 93 + 98 @@ -854,15 +870,15 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 97 + 100 apps/client/src/app/pages/portfolio/fire/fire-page.html - 83 + 84 apps/client/src/app/pages/portfolio/fire/fire-page.html - 161 + 162 apps/client/src/app/pages/pricing/pricing-page.html @@ -986,15 +1002,15 @@ Sektoren apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 284 + 283 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 403 + 402 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 287 + 286 apps/client/src/app/pages/public/public-page.html @@ -1006,15 +1022,15 @@ Länder apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 294 + 293 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 414 + 413 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 299 + 298 @@ -1038,7 +1054,7 @@ Datenfehler melden apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 457 + 456 @@ -1078,7 +1094,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 373 + 372 @@ -1090,7 +1106,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 385 + 384 @@ -1102,7 +1118,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 395 + 394 @@ -1114,7 +1130,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 419 + 416 @@ -1134,7 +1150,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 425 + 422 @@ -1262,11 +1278,11 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 80 + 81 apps/client/src/app/pages/portfolio/fire/fire-page.html - 158 + 159 apps/client/src/app/pages/pricing/pricing-page.html @@ -1313,12 +1329,20 @@ 9 + + Coupon + Coupon + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts + 122 + + Locale Lokalität apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 515 + 514 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -1414,7 +1438,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 383 + 382 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -1458,7 +1482,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 322 + 321 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -1478,7 +1502,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 307 + 305 @@ -1708,10 +1732,6 @@ Overview Übersicht - - apps/client/src/app/components/admin-jobs/admin-jobs.html - 7 - apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 114 @@ -1730,7 +1750,7 @@ apps/client/src/app/pages/admin/admin-page.component.ts - 41 + 68 apps/client/src/app/pages/resources/resources-page.component.ts @@ -1750,7 +1770,7 @@ Märkte apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 386 + 385 apps/client/src/app/components/footer/footer.component.html @@ -1877,6 +1897,14 @@ 150 + + Trial + Trial + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts + 121 + + Analysis Analyse @@ -2038,7 +2066,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 217 + 215 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -2054,7 +2082,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 241 + 239 @@ -2062,7 +2090,7 @@ Kommentar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 438 + 437 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -2106,7 +2134,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 347 + 346 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2186,7 +2214,7 @@ Portfolio apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 143 + 139 apps/client/src/app/components/header/header.component.html @@ -2198,7 +2226,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 95 + 98 libs/common/src/lib/routes/routes.ts @@ -2218,7 +2246,7 @@ Nachhaltiges Einkommen im Ruhestand apps/client/src/app/pages/portfolio/fire/fire-page.html - 41 + 42 @@ -2314,7 +2342,15 @@ Geplant libs/ui/src/lib/activities-table/activities-table.component.html - 168 + 167 + + + + Subscriptions + Subscriptions + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 131 @@ -2405,6 +2441,14 @@ 130 + + {VAR_PLURAL, plural, =1 {Profile} other {Profiles}} + {VAR_PLURAL, plural, =1 {Profile} other {Profiles}} + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 249 + + Annual Interest Rate Jahreszinssatz @@ -2498,7 +2542,7 @@ Land apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 278 + 277 apps/client/src/app/components/admin-users/admin-users.html @@ -2506,7 +2550,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 281 + 280 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2590,7 +2634,7 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 185 + 186 @@ -2738,11 +2782,11 @@ Benchmark apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 384 + 383 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 155 + 151 @@ -2802,7 +2846,7 @@ Gesamtbetrag apps/client/src/app/components/investment-chart/investment-chart.component.ts - 147 + 143 @@ -2826,7 +2870,7 @@ Sparrate apps/client/src/app/components/investment-chart/investment-chart.component.ts - 205 + 201 @@ -2838,7 +2882,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 339 + 337 libs/ui/src/lib/i18n.ts @@ -2862,7 +2906,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 332 + 331 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2886,7 +2930,7 @@ Symbol apps/client/src/app/components/admin-jobs/admin-jobs.html - 77 + 68 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -2902,7 +2946,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 319 + 318 libs/ui/src/lib/i18n.ts @@ -3066,7 +3110,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 449 + 448 @@ -3086,11 +3130,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 451 + 450 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 465 + 464 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -3142,7 +3186,7 @@ Wenn du heute in den Ruhestand gehen würdest, könntest du apps/client/src/app/pages/portfolio/fire/fire-page.html - 68 + 69 @@ -3166,7 +3210,7 @@ Folgende Dateiformate werden unterstützt: apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 90 + 93 @@ -3174,11 +3218,19 @@ Zurück apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 146 + 149 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 182 + 185 + + + + Price + Price + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 166 @@ -3202,7 +3254,7 @@ Symbol Zuordnung apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 392 + 391 @@ -3266,7 +3318,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 348 + 347 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -3302,11 +3354,11 @@ Importieren apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 155 + 158 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 190 + 193 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.html @@ -3318,7 +3370,7 @@ Marktdaten apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 405 + 404 libs/common/src/lib/routes/routes.ts @@ -3366,7 +3418,7 @@ Dividenden laden apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 68 + 71 @@ -3377,6 +3429,14 @@ 93 + + Expires + Expires + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 194 + + Import Dividends Dividenden importieren @@ -3938,7 +3998,7 @@ Bis apps/client/src/app/pages/portfolio/fire/fire-page.html - 139 + 140 @@ -3970,11 +4030,11 @@ Url apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 425 + 424 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 556 + 555 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -3998,7 +4058,7 @@ Möchtest du diese Plattform wirklich löschen? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 115 + 114 @@ -4102,7 +4162,7 @@ Dividenden auswählen apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 113 + 116 @@ -4110,7 +4170,7 @@ Aktivitäten auswählen apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 115 + 118 @@ -4353,12 +4413,20 @@ 32 + + Total + Total + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 150 + + Scraper Configuration Scraper Konfiguration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 477 + 476 @@ -4730,7 +4798,7 @@ wird ein Anstieg prognostiziert auf apps/client/src/app/pages/portfolio/fire/fire-page.html - 147 + 148 @@ -4782,7 +4850,7 @@ Job ID apps/client/src/app/components/admin-jobs/admin-jobs.html - 43 + 34 @@ -5113,6 +5181,14 @@ 217 + + Oops! Could not delete the asset profiles. + Oops! Could not delete the asset profiles. + + apps/client/src/app/components/admin-market-data/admin-market-data.service.ts + 52 + + What our users are saying Was unsere Nutzer sagen @@ -5451,20 +5527,12 @@ 325 - - Switzerland - Schweiz - - apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 58 - - Global Weltweit apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 59 + 60 libs/ui/src/lib/i18n.ts @@ -5512,7 +5580,7 @@ und einer sicheren Entnahmerate (SWR) von apps/client/src/app/pages/portfolio/fire/fire-page.html - 108 + 109 @@ -5528,7 +5596,7 @@ Wähle eine Datei aus oder ziehe sie hierhin apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 84 + 87 @@ -5564,7 +5632,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 265 + 263 libs/ui/src/lib/i18n.ts @@ -5592,7 +5660,7 @@ Möchtest du diesen Tag wirklich löschen? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 117 + 116 @@ -5692,7 +5760,7 @@ Anlageprofil apps/client/src/app/components/admin-jobs/admin-jobs.html - 61 + 52 @@ -5702,6 +5770,10 @@ apps/client/src/app/components/admin-market-data/admin-market-data.service.ts 28 + + apps/client/src/app/components/admin-market-data/admin-market-data.service.ts + 66 + Search @@ -5740,7 +5812,7 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 145 + 146 @@ -5756,11 +5828,11 @@ pro Monat apps/client/src/app/pages/portfolio/fire/fire-page.html - 94 + 95 apps/client/src/app/pages/portfolio/fire/fire-page.html - 172 + 173 @@ -5884,7 +5956,7 @@ Möchtest du diesen Cash-Bestand wirklich löschen? libs/ui/src/lib/account-balances/account-balances.component.ts - 113 + 127 @@ -5908,7 +5980,7 @@ Test apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 574 + 573 @@ -5962,6 +6034,10 @@ Job Queue Job Warteschlange + + apps/client/src/app/pages/admin/admin-page.component.ts + 84 + libs/common/src/lib/routes/routes.ts 46 @@ -5996,7 +6072,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 89 + 92 @@ -6012,7 +6088,7 @@ Position abschliessen apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 447 + 446 @@ -6052,7 +6128,7 @@ Seit Wochenbeginn libs/ui/src/lib/assistant/assistant.component.ts - 377 + 376 @@ -6064,7 +6140,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 377 + 376 @@ -6072,7 +6148,7 @@ Seit Monatsbeginn libs/ui/src/lib/assistant/assistant.component.ts - 381 + 380 @@ -6084,7 +6160,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 381 + 380 @@ -6092,7 +6168,7 @@ Seit Jahresbeginn libs/ui/src/lib/assistant/assistant.component.ts - 385 + 384 @@ -6140,7 +6216,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 395 + 394 @@ -6152,7 +6228,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 419 + 416 @@ -6168,7 +6244,7 @@ Finanzmarktdaten synchronisieren apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 597 + 596 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6180,7 +6256,7 @@ Finde eine Position... libs/ui/src/lib/assistant/assistant.component.ts - 472 + 469 @@ -6281,7 +6357,7 @@ Job ausführen apps/client/src/app/components/admin-jobs/admin-jobs.html - 229 + 220 @@ -6289,7 +6365,7 @@ Priorität apps/client/src/app/components/admin-jobs/admin-jobs.html - 105 + 96 @@ -6353,7 +6429,7 @@ Springe zu einer Seite... libs/ui/src/lib/assistant/assistant.component.ts - 473 + 470 @@ -6401,7 +6477,7 @@ Berücksichtigen in apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 382 + 381 @@ -6428,30 +6504,6 @@ 130 - - Delete Profiles - Profile löschen - - apps/client/src/app/components/admin-market-data/admin-market-data.html - 242 - - - - Do you really want to delete these profiles? - Möchtest du diese Profile wirklich löschen? - - apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 59 - - - - Oops! Could not delete profiles. - Ups! Die Profile konnten nicht gelöscht werden. - - apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 47 - - Table Tabelle @@ -6481,7 +6533,7 @@ Alternative apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 83 + 86 @@ -6489,7 +6541,7 @@ App apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 84 + 87 @@ -6497,7 +6549,7 @@ Budgetierung apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 85 + 88 @@ -6557,7 +6609,15 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 86 + 89 + + + + Oops! Could not delete the asset profile. + Oops! Could not delete the asset profile. + + apps/client/src/app/components/admin-market-data/admin-market-data.service.ts + 51 @@ -6565,7 +6625,7 @@ Family Office apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 87 + 90 @@ -6573,7 +6633,7 @@ Investor apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 90 + 93 @@ -6585,7 +6645,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 91 + 94 @@ -6597,7 +6657,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 93 + 96 @@ -6605,7 +6665,7 @@ Datenschutz apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 94 + 97 @@ -6613,7 +6673,7 @@ Software apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 96 + 99 @@ -6621,7 +6681,7 @@ Tool apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 97 + 100 @@ -6629,7 +6689,7 @@ User Experience apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 98 + 101 @@ -6637,7 +6697,7 @@ Vermögen apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 99 + 102 @@ -6645,7 +6705,7 @@ Vermögensverwaltung apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 100 + 103 @@ -6656,6 +6716,14 @@ 474 + + Do you really want to delete these asset profiles? + Do you really want to delete these asset profiles? + + apps/client/src/app/components/admin-market-data/admin-market-data.service.ts + 67 + + Error Fehler @@ -6693,7 +6761,7 @@ entnehmen, bezogen auf dein Gesamtanlagevermögen von apps/client/src/app/pages/portfolio/fire/fire-page.html - 96 + 97 @@ -6713,7 +6781,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 602 + 601 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6765,7 +6833,7 @@ Schliessen apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 604 + 603 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6785,7 +6853,7 @@ apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 124 + 131 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -6793,7 +6861,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 133 + 229 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -6837,7 +6905,7 @@ Portfolio Snapshot apps/client/src/app/components/admin-jobs/admin-jobs.html - 65 + 56 @@ -6869,7 +6937,7 @@ Schwellenwert (Minimum) apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 52 + 58 @@ -6877,7 +6945,7 @@ Schwellenwert (Maximum) apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 87 + 93 @@ -6969,7 +7037,7 @@ , bei einem angenommenen Jahreszinssatz von apps/client/src/app/pages/portfolio/fire/fire-page.html - 174 + 175 @@ -7000,6 +7068,14 @@ 195 + + Delete + Delete + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 244 + + cannot be self-hosted kann nicht selbst gehostet werden @@ -7171,7 +7247,7 @@ Schwellenwertbereich apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 9 + 15 @@ -7303,7 +7379,7 @@ Speichern apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 613 + 612 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7327,7 +7403,7 @@ apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 130 + 139 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -7427,7 +7503,7 @@ Standardmarktpreis apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 487 + 486 @@ -7435,7 +7511,7 @@ Modus apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 524 + 523 @@ -7443,7 +7519,7 @@ Selektor apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 540 + 539 @@ -7451,7 +7527,7 @@ HTTP Request-Headers apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 500 + 499 @@ -7495,7 +7571,7 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 381 + 380 @@ -7515,11 +7591,11 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 381 + 380 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 394 + 393 @@ -8224,7 +8300,7 @@ Anlageprofil verwalten apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 472 + 471 @@ -8248,7 +8324,7 @@ Ø Preis pro Einheit apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 117 + 123 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html diff --git a/apps/client/src/locales/messages.es.xlf b/apps/client/src/locales/messages.es.xlf index d922405a0..97398f8b0 100644 --- a/apps/client/src/locales/messages.es.xlf +++ b/apps/client/src/locales/messages.es.xlf @@ -27,7 +27,7 @@ El riesgo de pérdida en trading puede ser sustancial. No es aconsejable invertir dinero que puedas necesitar a corto plazo. apps/client/src/app/components/footer/footer.component.html - 182 + 180 @@ -51,12 +51,16 @@ Tipo apps/client/src/app/components/admin-jobs/admin-jobs.html - 57 + 48 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html 28 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 156 + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 15 @@ -67,7 +71,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 187 + 185 @@ -111,7 +115,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 315 + 314 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -195,7 +199,7 @@ libs/ui/src/lib/account-balances/account-balances.component.html - 34 + 39 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -207,11 +211,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 288 + 286 libs/ui/src/lib/activities-table/activities-table.component.html - 324 + 322 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -235,7 +239,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 267 + 278 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -259,7 +263,7 @@ Eliminar apps/client/src/app/components/admin-market-data/admin-market-data.html - 289 + 300 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -283,7 +287,7 @@ libs/ui/src/lib/account-balances/account-balances.component.html - 80 + 85 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -306,12 +310,20 @@ 146 + + Paid + Paid + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts + 117 + + Delete Jobs Eliminar trabajos apps/client/src/app/components/admin-jobs/admin-jobs.html - 202 + 193 @@ -319,7 +331,7 @@ Fuente de datos apps/client/src/app/components/admin-jobs/admin-jobs.html - 91 + 82 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -343,7 +355,7 @@ Intentos apps/client/src/app/components/admin-jobs/admin-jobs.html - 129 + 120 @@ -351,7 +363,11 @@ Creado apps/client/src/app/components/admin-jobs/admin-jobs.html - 143 + 134 + + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 140 @@ -359,7 +375,7 @@ Finalizado apps/client/src/app/components/admin-jobs/admin-jobs.html - 152 + 143 @@ -367,7 +383,7 @@ Estado apps/client/src/app/components/admin-jobs/admin-jobs.html - 161 + 152 apps/client/src/app/components/admin-settings/admin-settings.component.html @@ -399,11 +415,11 @@ Datos históricos del mercado apps/client/src/app/components/admin-jobs/admin-jobs.html - 63 + 54 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 454 + 453 @@ -411,7 +427,7 @@ Ver datos apps/client/src/app/components/admin-jobs/admin-jobs.html - 217 + 208 @@ -419,7 +435,7 @@ Ver Stacktrace apps/client/src/app/components/admin-jobs/admin-jobs.html - 225 + 216 @@ -427,7 +443,7 @@ Eliminar trabajo apps/client/src/app/components/admin-jobs/admin-jobs.html - 233 + 224 @@ -443,7 +459,7 @@ Buscar una cuenta... libs/ui/src/lib/assistant/assistant.component.ts - 471 + 468 @@ -459,7 +475,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 196 + 194 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -607,7 +623,7 @@ libs/ui/src/lib/account-balances/account-balances.component.html - 93 + 98 @@ -839,15 +855,15 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 97 + 100 apps/client/src/app/pages/portfolio/fire/fire-page.html - 83 + 84 apps/client/src/app/pages/portfolio/fire/fire-page.html - 161 + 162 apps/client/src/app/pages/pricing/pricing-page.html @@ -971,15 +987,15 @@ Sectores apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 284 + 283 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 403 + 402 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 287 + 286 apps/client/src/app/pages/public/public-page.html @@ -991,15 +1007,15 @@ Países apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 294 + 293 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 414 + 413 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 299 + 298 @@ -1023,7 +1039,7 @@ Reportar anomalía en los datos apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 457 + 456 @@ -1063,7 +1079,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 373 + 372 @@ -1075,7 +1091,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 385 + 384 @@ -1087,7 +1103,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 395 + 394 @@ -1099,7 +1115,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 419 + 416 @@ -1119,7 +1135,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 425 + 422 @@ -1247,11 +1263,11 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 80 + 81 apps/client/src/app/pages/portfolio/fire/fire-page.html - 158 + 159 apps/client/src/app/pages/pricing/pricing-page.html @@ -1298,12 +1314,20 @@ 9 + + Coupon + Coupon + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts + 122 + + Locale Configuración regional apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 515 + 514 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -1399,7 +1423,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 383 + 382 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -1443,7 +1467,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 322 + 321 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -1463,7 +1487,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 307 + 305 @@ -1693,10 +1717,6 @@ Overview Visión general - - apps/client/src/app/components/admin-jobs/admin-jobs.html - 7 - apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 114 @@ -1715,7 +1735,7 @@ apps/client/src/app/pages/admin/admin-page.component.ts - 41 + 68 apps/client/src/app/pages/resources/resources-page.component.ts @@ -1735,7 +1755,7 @@ Mercados apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 386 + 385 apps/client/src/app/components/footer/footer.component.html @@ -1862,6 +1882,14 @@ 150 + + Trial + Trial + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts + 121 + + Analysis Análisis @@ -2023,7 +2051,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 217 + 215 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -2039,7 +2067,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 241 + 239 @@ -2047,7 +2075,7 @@ Nota apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 438 + 437 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -2091,7 +2119,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 347 + 346 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2171,7 +2199,7 @@ Cartera apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 143 + 139 apps/client/src/app/components/header/header.component.html @@ -2183,7 +2211,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 95 + 98 libs/common/src/lib/routes/routes.ts @@ -2203,7 +2231,7 @@ Ingresos sostenibles para la jubilación apps/client/src/app/pages/portfolio/fire/fire-page.html - 41 + 42 @@ -2299,7 +2327,15 @@ Borrador libs/ui/src/lib/activities-table/activities-table.component.html - 168 + 167 + + + + Subscriptions + Subscriptions + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 131 @@ -2390,6 +2426,14 @@ 130 + + {VAR_PLURAL, plural, =1 {Profile} other {Profiles}} + {VAR_PLURAL, plural, =1 {Profile} other {Profiles}} + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 249 + + Annual Interest Rate Tasa de interés anual @@ -2531,7 +2575,7 @@ País apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 278 + 277 apps/client/src/app/components/admin-users/admin-users.html @@ -2539,7 +2583,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 281 + 280 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2595,7 +2639,7 @@ tasa de interés anual apps/client/src/app/pages/portfolio/fire/fire-page.html - 185 + 186 @@ -2703,11 +2747,11 @@ Índice de referencia apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 384 + 383 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 155 + 151 @@ -2787,7 +2831,7 @@ Importe total apps/client/src/app/components/investment-chart/investment-chart.component.ts - 147 + 143 @@ -2811,7 +2855,7 @@ Tasa de ahorro apps/client/src/app/components/investment-chart/investment-chart.component.ts - 205 + 201 @@ -2823,7 +2867,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 339 + 337 libs/ui/src/lib/i18n.ts @@ -2847,7 +2891,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 332 + 331 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2871,7 +2915,7 @@ Símbolo apps/client/src/app/components/admin-jobs/admin-jobs.html - 77 + 68 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -2887,7 +2931,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 319 + 318 libs/ui/src/lib/i18n.ts @@ -3051,7 +3095,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 449 + 448 @@ -3071,11 +3115,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 451 + 450 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 465 + 464 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -3127,7 +3171,7 @@ Si te jubilas hoy, podrías retirar apps/client/src/app/pages/portfolio/fire/fire-page.html - 68 + 69 @@ -3151,7 +3195,7 @@ Los siguientes formatos de archivo son compatibles: apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 90 + 93 @@ -3159,11 +3203,19 @@ Volver apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 146 + 149 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 182 + 185 + + + + Price + Price + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 166 @@ -3187,7 +3239,7 @@ Mapeo de símbolos apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 392 + 391 @@ -3251,7 +3303,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 348 + 347 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -3287,11 +3339,11 @@ Importar apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 155 + 158 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 190 + 193 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.html @@ -3303,7 +3355,7 @@ Datos del mercado apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 405 + 404 libs/common/src/lib/routes/routes.ts @@ -3351,7 +3403,7 @@ Cargar dividendos apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 68 + 71 @@ -3362,6 +3414,14 @@ 93 + + Expires + Expires + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 194 + + Import Dividends Importar dividendos @@ -3915,7 +3975,7 @@ Por apps/client/src/app/pages/portfolio/fire/fire-page.html - 139 + 140 @@ -3947,11 +4007,11 @@ Url apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 425 + 424 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 556 + 555 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -3975,7 +4035,7 @@ ¿Seguro que quieres eliminar esta plataforma? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 115 + 114 @@ -4079,7 +4139,7 @@ Seleccionar dividendos apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 113 + 116 @@ -4087,7 +4147,7 @@ Seleccionar operaciones apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 115 + 118 @@ -4330,12 +4390,20 @@ 32 + + Total + Total + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 150 + + Scraper Configuration Configuración del scraper apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 477 + 476 @@ -4707,7 +4775,7 @@ se proyecta que esto aumente a apps/client/src/app/pages/portfolio/fire/fire-page.html - 147 + 148 @@ -4759,7 +4827,7 @@ ID del trabajo apps/client/src/app/components/admin-jobs/admin-jobs.html - 43 + 34 @@ -5090,6 +5158,14 @@ 217 + + Oops! Could not delete the asset profiles. + Oops! Could not delete the asset profiles. + + apps/client/src/app/components/admin-market-data/admin-market-data.service.ts + 52 + + What our users are saying Lo que nuestros usuarios están diciendo @@ -5428,20 +5504,12 @@ 325 - - Switzerland - Suiza - - apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 58 - - Global Global apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 59 + 60 libs/ui/src/lib/i18n.ts @@ -5489,7 +5557,7 @@ y una tasa de retiro segura (SWR) de apps/client/src/app/pages/portfolio/fire/fire-page.html - 108 + 109 @@ -5505,7 +5573,7 @@ Elige o suelta un archivo aquí apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 84 + 87 @@ -5541,7 +5609,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 265 + 263 libs/ui/src/lib/i18n.ts @@ -5569,7 +5637,7 @@ ¿Seguro que quieres eliminar esta etiqueta? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 117 + 116 @@ -5669,7 +5737,7 @@ Perfil de activo apps/client/src/app/components/admin-jobs/admin-jobs.html - 61 + 52 @@ -5679,6 +5747,10 @@ apps/client/src/app/components/admin-market-data/admin-market-data.service.ts 28 + + apps/client/src/app/components/admin-market-data/admin-market-data.service.ts + 66 + Search @@ -5717,7 +5789,7 @@ , apps/client/src/app/pages/portfolio/fire/fire-page.html - 145 + 146 @@ -5733,11 +5805,11 @@ por mes apps/client/src/app/pages/portfolio/fire/fire-page.html - 94 + 95 apps/client/src/app/pages/portfolio/fire/fire-page.html - 172 + 173 @@ -5861,7 +5933,7 @@ ¿Seguro que quieres eliminar el saldo de esta cuenta? libs/ui/src/lib/account-balances/account-balances.component.ts - 113 + 127 @@ -5885,7 +5957,7 @@ Prueba apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 574 + 573 @@ -5939,6 +6011,10 @@ Job Queue Cola de trabajos + + apps/client/src/app/pages/admin/admin-page.component.ts + 84 + libs/common/src/lib/routes/routes.ts 46 @@ -5973,7 +6049,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 89 + 92 @@ -5989,7 +6065,7 @@ Cerrar posición apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 447 + 446 @@ -6029,7 +6105,7 @@ Semana hasta la fecha libs/ui/src/lib/assistant/assistant.component.ts - 377 + 376 @@ -6041,7 +6117,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 377 + 376 @@ -6049,7 +6125,7 @@ Mes hasta la fecha libs/ui/src/lib/assistant/assistant.component.ts - 381 + 380 @@ -6061,7 +6137,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 381 + 380 @@ -6069,7 +6145,7 @@ Año hasta la fecha libs/ui/src/lib/assistant/assistant.component.ts - 385 + 384 @@ -6117,7 +6193,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 395 + 394 @@ -6129,7 +6205,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 419 + 416 @@ -6145,7 +6221,7 @@ Recopilación de datos apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 597 + 596 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6157,7 +6233,7 @@ Buscar una posición... libs/ui/src/lib/assistant/assistant.component.ts - 472 + 469 @@ -6258,7 +6334,7 @@ Ejecutar trabajo apps/client/src/app/components/admin-jobs/admin-jobs.html - 229 + 220 @@ -6266,7 +6342,7 @@ Prioridad apps/client/src/app/components/admin-jobs/admin-jobs.html - 105 + 96 @@ -6330,7 +6406,7 @@ Saltar a una página... libs/ui/src/lib/assistant/assistant.component.ts - 473 + 470 @@ -6378,7 +6454,7 @@ Incluir en apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 382 + 381 @@ -6405,30 +6481,6 @@ 130 - - Delete Profiles - Eliminar Perfiles - - apps/client/src/app/components/admin-market-data/admin-market-data.html - 242 - - - - Do you really want to delete these profiles? - ¿Seguro que quieres eliminar estos perfiles? - - apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 59 - - - - Oops! Could not delete profiles. - ¡Vaya! No se pudieron eliminar los perfiles. - - apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 47 - - Table Tabla @@ -6458,7 +6510,7 @@ Alternativa apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 83 + 86 @@ -6466,7 +6518,7 @@ Aplicación apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 84 + 87 @@ -6474,7 +6526,7 @@ Presupuestos apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 85 + 88 @@ -6534,7 +6586,15 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 86 + 89 + + + + Oops! Could not delete the asset profile. + Oops! Could not delete the asset profile. + + apps/client/src/app/components/admin-market-data/admin-market-data.service.ts + 51 @@ -6542,7 +6602,7 @@ Family Office apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 87 + 90 @@ -6550,7 +6610,7 @@ Inversor apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 90 + 93 @@ -6562,7 +6622,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 91 + 94 @@ -6574,7 +6634,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 93 + 96 @@ -6582,7 +6642,7 @@ Privacidad apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 94 + 97 @@ -6590,7 +6650,7 @@ Software apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 96 + 99 @@ -6598,7 +6658,7 @@ Herramienta apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 97 + 100 @@ -6606,7 +6666,7 @@ Experiencia del usuario apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 98 + 101 @@ -6614,7 +6674,7 @@ Patrimonio apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 99 + 102 @@ -6622,7 +6682,7 @@ Gestión de patrimonios apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 100 + 103 @@ -6633,6 +6693,14 @@ 474 + + Do you really want to delete these asset profiles? + Do you really want to delete these asset profiles? + + apps/client/src/app/components/admin-market-data/admin-market-data.service.ts + 67 + + Error Error @@ -6670,7 +6738,7 @@ , basado en tus activos totales de apps/client/src/app/pages/portfolio/fire/fire-page.html - 96 + 97 @@ -6690,7 +6758,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 602 + 601 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6742,7 +6810,7 @@ Cerrar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 604 + 603 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6762,7 +6830,7 @@ apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 124 + 131 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -6770,7 +6838,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 133 + 229 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -6814,7 +6882,7 @@ Instantánea de la cartera apps/client/src/app/components/admin-jobs/admin-jobs.html - 65 + 56 @@ -6846,7 +6914,7 @@ Umbral mínimo apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 52 + 58 @@ -6854,7 +6922,7 @@ Umbral máximo apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 87 + 93 @@ -6946,7 +7014,7 @@ , asumiendo un apps/client/src/app/pages/portfolio/fire/fire-page.html - 174 + 175 @@ -6977,6 +7045,14 @@ 195 + + Delete + Delete + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 244 + + cannot be self-hosted no se puede autoalojar @@ -7148,7 +7224,7 @@ Rango del umbral apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 9 + 15 @@ -7280,7 +7356,7 @@ Guardar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 613 + 612 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7304,7 +7380,7 @@ apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 130 + 139 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -7404,7 +7480,7 @@ Precio de mercado por defecto apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 487 + 486 @@ -7412,7 +7488,7 @@ Modo apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 524 + 523 @@ -7420,7 +7496,7 @@ Selector apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 540 + 539 @@ -7428,7 +7504,7 @@ Encabezados de solicitud HTTP apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 500 + 499 @@ -7472,7 +7548,7 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 381 + 380 @@ -7492,11 +7568,11 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 381 + 380 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 394 + 393 @@ -8225,7 +8301,7 @@ Gestionar perfil de activo apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 472 + 471 @@ -8249,7 +8325,7 @@ Precio medio por unidad apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 117 + 123 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html diff --git a/apps/client/src/locales/messages.fr.xlf b/apps/client/src/locales/messages.fr.xlf index 2cbba3820..25910eafe 100644 --- a/apps/client/src/locales/messages.fr.xlf +++ b/apps/client/src/locales/messages.fr.xlf @@ -6,7 +6,7 @@ Le risque de perte en investissant peut être important. Il est déconseillé d’investir de l’argent dont vous pourriez avoir besoin à court terme. apps/client/src/app/components/footer/footer.component.html - 182 + 180 @@ -42,12 +42,16 @@ Type apps/client/src/app/components/admin-jobs/admin-jobs.html - 57 + 48 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html 28 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 156 + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 15 @@ -58,7 +62,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 187 + 185 @@ -118,7 +122,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 315 + 314 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -190,7 +194,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 322 + 321 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -210,7 +214,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 307 + 305 @@ -250,7 +254,7 @@ libs/ui/src/lib/account-balances/account-balances.component.html - 34 + 39 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -262,11 +266,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 288 + 286 libs/ui/src/lib/activities-table/activities-table.component.html - 324 + 322 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -290,7 +294,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 267 + 278 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -314,7 +318,7 @@ Supprimer apps/client/src/app/components/admin-market-data/admin-market-data.html - 289 + 300 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -338,7 +342,7 @@ libs/ui/src/lib/account-balances/account-balances.component.html - 80 + 85 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -361,12 +365,20 @@ 146 + + Paid + Paid + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts + 117 + + Data Source Source Données apps/client/src/app/components/admin-jobs/admin-jobs.html - 91 + 82 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -390,7 +402,7 @@ Tentatives apps/client/src/app/components/admin-jobs/admin-jobs.html - 129 + 120 @@ -398,7 +410,11 @@ Créé apps/client/src/app/components/admin-jobs/admin-jobs.html - 143 + 134 + + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 140 @@ -406,7 +422,7 @@ Terminé apps/client/src/app/components/admin-jobs/admin-jobs.html - 152 + 143 @@ -414,7 +430,7 @@ Statut apps/client/src/app/components/admin-jobs/admin-jobs.html - 161 + 152 apps/client/src/app/components/admin-settings/admin-settings.component.html @@ -434,7 +450,7 @@ Supprimer Tâches apps/client/src/app/components/admin-jobs/admin-jobs.html - 202 + 193 @@ -454,11 +470,11 @@ Données historiques du marché apps/client/src/app/components/admin-jobs/admin-jobs.html - 63 + 54 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 454 + 453 @@ -466,7 +482,7 @@ Voir Données apps/client/src/app/components/admin-jobs/admin-jobs.html - 217 + 208 @@ -474,7 +490,7 @@ Voir la Stacktrace apps/client/src/app/components/admin-jobs/admin-jobs.html - 225 + 216 @@ -482,7 +498,7 @@ Supprimer Tâche apps/client/src/app/components/admin-jobs/admin-jobs.html - 233 + 224 @@ -498,7 +514,7 @@ Find an account... libs/ui/src/lib/assistant/assistant.component.ts - 471 + 468 @@ -514,7 +530,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 196 + 194 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -638,7 +654,7 @@ Pays apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 278 + 277 apps/client/src/app/components/admin-users/admin-users.html @@ -646,7 +662,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 281 + 280 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -658,15 +674,15 @@ Secteurs apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 284 + 283 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 403 + 402 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 287 + 286 apps/client/src/app/pages/public/public-page.html @@ -678,15 +694,15 @@ Pays apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 294 + 293 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 414 + 413 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 299 + 298 @@ -694,7 +710,7 @@ Équivalence de Symboles apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 392 + 391 @@ -702,7 +718,7 @@ Note apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 438 + 437 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -818,7 +834,7 @@ libs/ui/src/lib/account-balances/account-balances.component.html - 93 + 98 @@ -914,7 +930,7 @@ Portefeuille apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 143 + 139 apps/client/src/app/components/header/header.component.html @@ -926,7 +942,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 95 + 98 libs/common/src/lib/routes/routes.ts @@ -938,11 +954,11 @@ Référence apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 384 + 383 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 155 + 151 @@ -1062,7 +1078,7 @@ Montant Total apps/client/src/app/components/investment-chart/investment-chart.component.ts - 147 + 143 @@ -1078,7 +1094,7 @@ Taux d’Épargne apps/client/src/app/components/investment-chart/investment-chart.component.ts - 205 + 201 @@ -1130,15 +1146,15 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 97 + 100 apps/client/src/app/pages/portfolio/fire/fire-page.html - 83 + 84 apps/client/src/app/pages/portfolio/fire/fire-page.html - 161 + 162 apps/client/src/app/pages/pricing/pricing-page.html @@ -1294,7 +1310,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 217 + 215 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -1306,7 +1322,7 @@ Signaler une Erreur de Données apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 457 + 456 @@ -1318,7 +1334,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 373 + 372 @@ -1330,7 +1346,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 385 + 384 @@ -1342,7 +1358,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 395 + 394 @@ -1354,7 +1370,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 419 + 416 @@ -1374,7 +1390,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 425 + 422 @@ -1550,11 +1566,11 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 80 + 81 apps/client/src/app/pages/portfolio/fire/fire-page.html - 158 + 159 apps/client/src/app/pages/pricing/pricing-page.html @@ -1601,6 +1617,14 @@ 9 + + Coupon + Coupon + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts + 122 + + Language Langue @@ -1614,7 +1638,7 @@ Paramètres régionaux apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 515 + 514 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -1742,7 +1766,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 383 + 382 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -1790,7 +1814,7 @@ Données du marché apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 405 + 404 libs/common/src/lib/routes/routes.ts @@ -2038,7 +2062,7 @@ Marchés apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 386 + 385 apps/client/src/app/components/footer/footer.component.html @@ -2114,7 +2138,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 347 + 346 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2210,7 +2234,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 241 + 239 @@ -2250,7 +2274,7 @@ Les formats de fichier suivants sont supportés : apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 90 + 93 @@ -2258,11 +2282,19 @@ Retour apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 146 + 149 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 182 + 185 + + + + Price + Price + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 166 @@ -2270,11 +2302,11 @@ Importer apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 155 + 158 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 190 + 193 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.html @@ -2373,6 +2405,14 @@ 150 + + Trial + Trial + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts + 121 + + Exclude from Analysis Exclude from Analysis @@ -2486,7 +2526,7 @@ annual interest rate apps/client/src/app/pages/portfolio/fire/fire-page.html - 185 + 186 @@ -2614,7 +2654,7 @@ Sustainable retirement income apps/client/src/app/pages/portfolio/fire/fire-page.html - 41 + 42 @@ -2760,10 +2800,6 @@ Overview Aperçu - - apps/client/src/app/components/admin-jobs/admin-jobs.html - 7 - apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 114 @@ -2782,7 +2818,7 @@ apps/client/src/app/pages/admin/admin-page.component.ts - 41 + 68 apps/client/src/app/pages/resources/resources-page.component.ts @@ -2802,7 +2838,15 @@ Brouillon libs/ui/src/lib/activities-table/activities-table.component.html - 168 + 167 + + + + Subscriptions + Subscriptions + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 131 @@ -2893,6 +2937,14 @@ 130 + + {VAR_PLURAL, plural, =1 {Profile} other {Profiles}} + {VAR_PLURAL, plural, =1 {Profile} other {Profiles}} + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 249 + + Annual Interest Rate Taux d’Intérêt Annuel @@ -2974,7 +3026,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 339 + 337 libs/ui/src/lib/i18n.ts @@ -2998,7 +3050,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 332 + 331 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -3030,7 +3082,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 348 + 347 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -3074,7 +3126,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 449 + 448 @@ -3082,7 +3134,7 @@ Symbole apps/client/src/app/components/admin-jobs/admin-jobs.html - 77 + 68 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -3098,7 +3150,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 319 + 318 libs/ui/src/lib/i18n.ts @@ -3278,7 +3330,7 @@ If you retire today, you would be able to withdraw apps/client/src/app/pages/portfolio/fire/fire-page.html - 68 + 69 @@ -3322,11 +3374,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 451 + 450 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 465 + 464 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -3350,7 +3402,7 @@ Charger Dividendes apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 68 + 71 @@ -3361,6 +3413,14 @@ 93 + + Expires + Expires + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 194 + + Import Dividends Importer Dividendes @@ -3914,7 +3974,7 @@ By apps/client/src/app/pages/portfolio/fire/fire-page.html - 139 + 140 @@ -3946,11 +4006,11 @@ Lien apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 425 + 424 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 556 + 555 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -3974,7 +4034,7 @@ Voulez-vous vraiment supprimer cette plateforme ? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 115 + 114 @@ -4078,7 +4138,7 @@ Selectionner les Dividendes apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 113 + 116 @@ -4086,7 +4146,7 @@ Selectionner les Activités apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 115 + 118 @@ -4329,12 +4389,20 @@ 32 + + Total + Total + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 150 + + Scraper Configuration Configuration du Scraper apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 477 + 476 @@ -4706,7 +4774,7 @@ this is projected to increase to apps/client/src/app/pages/portfolio/fire/fire-page.html - 147 + 148 @@ -4758,7 +4826,7 @@ Job ID apps/client/src/app/components/admin-jobs/admin-jobs.html - 43 + 34 @@ -5089,6 +5157,14 @@ 217 + + Oops! Could not delete the asset profiles. + Oops! Could not delete the asset profiles. + + apps/client/src/app/components/admin-market-data/admin-market-data.service.ts + 52 + + What our users are saying Qu’en pensent nos utilisateurs @@ -5427,20 +5503,12 @@ 325 - - Switzerland - Suisse - - apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 58 - - Global Mondial apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 59 + 60 libs/ui/src/lib/i18n.ts @@ -5488,7 +5556,7 @@ and a safe withdrawal rate (SWR) of apps/client/src/app/pages/portfolio/fire/fire-page.html - 108 + 109 @@ -5504,7 +5572,7 @@ Choisissez ou déposez un fichier ici apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 84 + 87 @@ -5540,7 +5608,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 265 + 263 libs/ui/src/lib/i18n.ts @@ -5568,7 +5636,7 @@ Confirmez la suppression de ce tag ? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 117 + 116 @@ -5668,7 +5736,7 @@ Profil d’Actif apps/client/src/app/components/admin-jobs/admin-jobs.html - 61 + 52 @@ -5678,6 +5746,10 @@ apps/client/src/app/components/admin-market-data/admin-market-data.service.ts 28 + + apps/client/src/app/components/admin-market-data/admin-market-data.service.ts + 66 + Search @@ -5716,7 +5788,7 @@ , apps/client/src/app/pages/portfolio/fire/fire-page.html - 145 + 146 @@ -5732,11 +5804,11 @@ per month apps/client/src/app/pages/portfolio/fire/fire-page.html - 94 + 95 apps/client/src/app/pages/portfolio/fire/fire-page.html - 172 + 173 @@ -5860,7 +5932,7 @@ Voulez-vous vraiment supprimer ce solde de compte ? libs/ui/src/lib/account-balances/account-balances.component.ts - 113 + 127 @@ -5884,7 +5956,7 @@ Test apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 574 + 573 @@ -5938,6 +6010,10 @@ Job Queue File d’attente + + apps/client/src/app/pages/admin/admin-page.component.ts + 84 + libs/common/src/lib/routes/routes.ts 46 @@ -5972,7 +6048,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 89 + 92 @@ -5988,7 +6064,7 @@ Close Holding apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 447 + 446 @@ -6028,7 +6104,7 @@ Week to date libs/ui/src/lib/assistant/assistant.component.ts - 377 + 376 @@ -6040,7 +6116,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 377 + 376 @@ -6048,7 +6124,7 @@ Month to date libs/ui/src/lib/assistant/assistant.component.ts - 381 + 380 @@ -6060,7 +6136,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 381 + 380 @@ -6068,7 +6144,7 @@ Year to date libs/ui/src/lib/assistant/assistant.component.ts - 385 + 384 @@ -6116,7 +6192,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 395 + 394 @@ -6128,7 +6204,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 419 + 416 @@ -6144,7 +6220,7 @@ Collecter les données apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 597 + 596 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6156,7 +6232,7 @@ Find a holding... libs/ui/src/lib/assistant/assistant.component.ts - 472 + 469 @@ -6257,7 +6333,7 @@ Execute la tâche apps/client/src/app/components/admin-jobs/admin-jobs.html - 229 + 220 @@ -6265,7 +6341,7 @@ Priorité apps/client/src/app/components/admin-jobs/admin-jobs.html - 105 + 96 @@ -6329,7 +6405,7 @@ Jump to a page... libs/ui/src/lib/assistant/assistant.component.ts - 473 + 470 @@ -6377,7 +6453,7 @@ Include in apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 382 + 381 @@ -6404,30 +6480,6 @@ 130 - - Delete Profiles - Supprimer des Profils - - apps/client/src/app/components/admin-market-data/admin-market-data.html - 242 - - - - Do you really want to delete these profiles? - Confirmer la suppression de ces Profils? - - apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 59 - - - - Oops! Could not delete profiles. - Oops! Echec de la suppression de Profils. - - apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 47 - - Table Table @@ -6457,7 +6509,7 @@ Alternative apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 83 + 86 @@ -6465,7 +6517,7 @@ App apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 84 + 87 @@ -6473,7 +6525,7 @@ Budget apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 85 + 88 @@ -6533,7 +6585,15 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 86 + 89 + + + + Oops! Could not delete the asset profile. + Oops! Could not delete the asset profile. + + apps/client/src/app/components/admin-market-data/admin-market-data.service.ts + 51 @@ -6541,7 +6601,7 @@ Family Office apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 87 + 90 @@ -6549,7 +6609,7 @@ Investisseur apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 90 + 93 @@ -6561,7 +6621,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 91 + 94 @@ -6573,7 +6633,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 93 + 96 @@ -6581,7 +6641,7 @@ Confidentialité apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 94 + 97 @@ -6589,7 +6649,7 @@ Logiciels apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 96 + 99 @@ -6597,7 +6657,7 @@ Outils apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 97 + 100 @@ -6605,7 +6665,7 @@ Expérience Utilisateur apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 98 + 101 @@ -6613,7 +6673,7 @@ Patrimoine apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 99 + 102 @@ -6621,7 +6681,7 @@ Gestion de Patrimoine apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 100 + 103 @@ -6632,6 +6692,14 @@ 474 + + Do you really want to delete these asset profiles? + Do you really want to delete these asset profiles? + + apps/client/src/app/components/admin-market-data/admin-market-data.service.ts + 67 + + Error Erreur @@ -6669,7 +6737,7 @@ , based on your total assets of apps/client/src/app/pages/portfolio/fire/fire-page.html - 96 + 97 @@ -6689,7 +6757,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 602 + 601 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6741,7 +6809,7 @@ Fermer apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 604 + 603 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6761,7 +6829,7 @@ apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 124 + 131 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -6769,7 +6837,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 133 + 229 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -6813,7 +6881,7 @@ Résumé du portefeuille apps/client/src/app/components/admin-jobs/admin-jobs.html - 65 + 56 @@ -6845,7 +6913,7 @@ Seuil Min apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 52 + 58 @@ -6853,7 +6921,7 @@ Seuil Max apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 87 + 93 @@ -6945,7 +7013,7 @@ , assuming a apps/client/src/app/pages/portfolio/fire/fire-page.html - 174 + 175 @@ -6976,6 +7044,14 @@ 195 + + Delete + Delete + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 244 + + cannot be self-hosted ne peut pas être auto-hébergé @@ -7147,7 +7223,7 @@ Plage de seuil apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 9 + 15 @@ -7279,7 +7355,7 @@ Sauvegarder apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 613 + 612 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7303,7 +7379,7 @@ apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 130 + 139 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -7403,7 +7479,7 @@ Prix du marché par défaut apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 487 + 486 @@ -7411,7 +7487,7 @@ Mode apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 524 + 523 @@ -7419,7 +7495,7 @@ Selecteur apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 540 + 539 @@ -7427,7 +7503,7 @@ En-têtes de requête HTTP apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 500 + 499 @@ -7471,7 +7547,7 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 381 + 380 @@ -7491,11 +7567,11 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 381 + 380 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 394 + 393 @@ -8224,7 +8300,7 @@ Gérer le profil d’actif apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 472 + 471 @@ -8248,7 +8324,7 @@ Average Unit Price apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 117 + 123 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html diff --git a/apps/client/src/locales/messages.it.xlf b/apps/client/src/locales/messages.it.xlf index 82844588f..56cd10a65 100644 --- a/apps/client/src/locales/messages.it.xlf +++ b/apps/client/src/locales/messages.it.xlf @@ -27,7 +27,7 @@ Il rischio di perdita nel trading può essere notevole. Non è consigliabile investire denaro di cui potresti avere bisogno a breve termine. apps/client/src/app/components/footer/footer.component.html - 182 + 180 @@ -51,12 +51,16 @@ Tipo apps/client/src/app/components/admin-jobs/admin-jobs.html - 57 + 48 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html 28 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 156 + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 15 @@ -67,7 +71,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 187 + 185 @@ -111,7 +115,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 315 + 314 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -195,7 +199,7 @@ libs/ui/src/lib/account-balances/account-balances.component.html - 34 + 39 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -207,11 +211,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 288 + 286 libs/ui/src/lib/activities-table/activities-table.component.html - 324 + 322 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -235,7 +239,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 267 + 278 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -259,7 +263,7 @@ Elimina apps/client/src/app/components/admin-market-data/admin-market-data.html - 289 + 300 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -283,7 +287,7 @@ libs/ui/src/lib/account-balances/account-balances.component.html - 80 + 85 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -306,12 +310,20 @@ 146 + + Paid + Paid + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts + 117 + + Delete Jobs Elimina i lavori apps/client/src/app/components/admin-jobs/admin-jobs.html - 202 + 193 @@ -319,7 +331,7 @@ Sorgente dei dati apps/client/src/app/components/admin-jobs/admin-jobs.html - 91 + 82 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -343,7 +355,7 @@ Tentativi apps/client/src/app/components/admin-jobs/admin-jobs.html - 129 + 120 @@ -351,7 +363,11 @@ Creato apps/client/src/app/components/admin-jobs/admin-jobs.html - 143 + 134 + + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 140 @@ -359,7 +375,7 @@ Finito apps/client/src/app/components/admin-jobs/admin-jobs.html - 152 + 143 @@ -367,7 +383,7 @@ Stato apps/client/src/app/components/admin-jobs/admin-jobs.html - 161 + 152 apps/client/src/app/components/admin-settings/admin-settings.component.html @@ -399,11 +415,11 @@ Dati storici del mercato apps/client/src/app/components/admin-jobs/admin-jobs.html - 63 + 54 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 454 + 453 @@ -411,7 +427,7 @@ Visualizza i dati apps/client/src/app/components/admin-jobs/admin-jobs.html - 217 + 208 @@ -419,7 +435,7 @@ Visualizza Stacktrace apps/client/src/app/components/admin-jobs/admin-jobs.html - 225 + 216 @@ -427,7 +443,7 @@ Elimina il lavoro apps/client/src/app/components/admin-jobs/admin-jobs.html - 233 + 224 @@ -443,7 +459,7 @@ Find an account... libs/ui/src/lib/assistant/assistant.component.ts - 471 + 468 @@ -459,7 +475,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 196 + 194 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -607,7 +623,7 @@ libs/ui/src/lib/account-balances/account-balances.component.html - 93 + 98 @@ -839,15 +855,15 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 97 + 100 apps/client/src/app/pages/portfolio/fire/fire-page.html - 83 + 84 apps/client/src/app/pages/portfolio/fire/fire-page.html - 161 + 162 apps/client/src/app/pages/pricing/pricing-page.html @@ -971,15 +987,15 @@ Settori apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 284 + 283 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 403 + 402 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 287 + 286 apps/client/src/app/pages/public/public-page.html @@ -991,15 +1007,15 @@ Paesi apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 294 + 293 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 414 + 413 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 299 + 298 @@ -1023,7 +1039,7 @@ Segnala un’anomalia dei dati apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 457 + 456 @@ -1063,7 +1079,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 373 + 372 @@ -1075,7 +1091,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 385 + 384 @@ -1087,7 +1103,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 395 + 394 @@ -1099,7 +1115,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 419 + 416 @@ -1119,7 +1135,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 425 + 422 @@ -1247,11 +1263,11 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 80 + 81 apps/client/src/app/pages/portfolio/fire/fire-page.html - 158 + 159 apps/client/src/app/pages/pricing/pricing-page.html @@ -1298,12 +1314,20 @@ 9 + + Coupon + Coupon + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts + 122 + + Locale Locale apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 515 + 514 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -1399,7 +1423,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 383 + 382 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -1443,7 +1467,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 322 + 321 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -1463,7 +1487,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 307 + 305 @@ -1693,10 +1717,6 @@ Overview Panoramica - - apps/client/src/app/components/admin-jobs/admin-jobs.html - 7 - apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 114 @@ -1715,7 +1735,7 @@ apps/client/src/app/pages/admin/admin-page.component.ts - 41 + 68 apps/client/src/app/pages/resources/resources-page.component.ts @@ -1735,7 +1755,7 @@ Mercati apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 386 + 385 apps/client/src/app/components/footer/footer.component.html @@ -1862,6 +1882,14 @@ 150 + + Trial + Trial + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts + 121 + + Analysis Analisi @@ -2023,7 +2051,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 217 + 215 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -2039,7 +2067,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 241 + 239 @@ -2047,7 +2075,7 @@ Nota apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 438 + 437 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -2091,7 +2119,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 347 + 346 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2171,7 +2199,7 @@ Portafoglio apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 143 + 139 apps/client/src/app/components/header/header.component.html @@ -2183,7 +2211,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 95 + 98 libs/common/src/lib/routes/routes.ts @@ -2203,7 +2231,7 @@ Sustainable retirement income apps/client/src/app/pages/portfolio/fire/fire-page.html - 41 + 42 @@ -2299,7 +2327,15 @@ Bozza libs/ui/src/lib/activities-table/activities-table.component.html - 168 + 167 + + + + Subscriptions + Subscriptions + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 131 @@ -2390,6 +2426,14 @@ 130 + + {VAR_PLURAL, plural, =1 {Profile} other {Profiles}} + {VAR_PLURAL, plural, =1 {Profile} other {Profiles}} + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 249 + + Annual Interest Rate Tasso di interesse annuo @@ -2531,7 +2575,7 @@ Paese apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 278 + 277 apps/client/src/app/components/admin-users/admin-users.html @@ -2539,7 +2583,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 281 + 280 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2595,7 +2639,7 @@ annual interest rate apps/client/src/app/pages/portfolio/fire/fire-page.html - 185 + 186 @@ -2703,11 +2747,11 @@ Benchmark apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 384 + 383 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 155 + 151 @@ -2787,7 +2831,7 @@ Importo totale apps/client/src/app/components/investment-chart/investment-chart.component.ts - 147 + 143 @@ -2811,7 +2855,7 @@ Tasso di risparmio apps/client/src/app/components/investment-chart/investment-chart.component.ts - 205 + 201 @@ -2823,7 +2867,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 339 + 337 libs/ui/src/lib/i18n.ts @@ -2847,7 +2891,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 332 + 331 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2871,7 +2915,7 @@ Simbolo apps/client/src/app/components/admin-jobs/admin-jobs.html - 77 + 68 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -2887,7 +2931,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 319 + 318 libs/ui/src/lib/i18n.ts @@ -3051,7 +3095,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 449 + 448 @@ -3071,11 +3115,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 451 + 450 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 465 + 464 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -3127,7 +3171,7 @@ If you retire today, you would be able to withdraw apps/client/src/app/pages/portfolio/fire/fire-page.html - 68 + 69 @@ -3151,7 +3195,7 @@ Sono supportati i seguenti formati di file: apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 90 + 93 @@ -3159,11 +3203,19 @@ Indietro apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 146 + 149 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 182 + 185 + + + + Price + Price + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 166 @@ -3187,7 +3239,7 @@ Mappatura dei simboli apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 392 + 391 @@ -3251,7 +3303,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 348 + 347 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -3287,11 +3339,11 @@ Importa apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 155 + 158 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 190 + 193 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.html @@ -3303,7 +3355,7 @@ Dati del mercato apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 405 + 404 libs/common/src/lib/routes/routes.ts @@ -3351,7 +3403,7 @@ Carica i dividendi apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 68 + 71 @@ -3362,6 +3414,14 @@ 93 + + Expires + Expires + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 194 + + Import Dividends Importa i dividendi @@ -3915,7 +3975,7 @@ By apps/client/src/app/pages/portfolio/fire/fire-page.html - 139 + 140 @@ -3947,11 +4007,11 @@ Url apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 425 + 424 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 556 + 555 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -3975,7 +4035,7 @@ Vuoi davvero eliminare questa piattaforma? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 115 + 114 @@ -4079,7 +4139,7 @@ Seleziona i dividendi apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 113 + 116 @@ -4087,7 +4147,7 @@ Seleziona le attività apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 115 + 118 @@ -4330,12 +4390,20 @@ 32 + + Total + Total + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 150 + + Scraper Configuration Configurazione dello scraper apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 477 + 476 @@ -4707,7 +4775,7 @@ this is projected to increase to apps/client/src/app/pages/portfolio/fire/fire-page.html - 147 + 148 @@ -4759,7 +4827,7 @@ Job ID apps/client/src/app/components/admin-jobs/admin-jobs.html - 43 + 34 @@ -5090,6 +5158,14 @@ 217 + + Oops! Could not delete the asset profiles. + Oops! Could not delete the asset profiles. + + apps/client/src/app/components/admin-market-data/admin-market-data.service.ts + 52 + + What our users are saying Cosa dicono i nostri utenti @@ -5428,20 +5504,12 @@ 325 - - Switzerland - Svizzera - - apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 58 - - Global Globale apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 59 + 60 libs/ui/src/lib/i18n.ts @@ -5489,7 +5557,7 @@ and a safe withdrawal rate (SWR) of apps/client/src/app/pages/portfolio/fire/fire-page.html - 108 + 109 @@ -5505,7 +5573,7 @@ Seleziona o trascina qui un file apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 84 + 87 @@ -5541,7 +5609,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 265 + 263 libs/ui/src/lib/i18n.ts @@ -5569,7 +5637,7 @@ Sei sicuro di voler eliminare questo tag? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 117 + 116 @@ -5669,7 +5737,7 @@ Profilo dell’asset apps/client/src/app/components/admin-jobs/admin-jobs.html - 61 + 52 @@ -5679,6 +5747,10 @@ apps/client/src/app/components/admin-market-data/admin-market-data.service.ts 28 + + apps/client/src/app/components/admin-market-data/admin-market-data.service.ts + 66 + Search @@ -5717,7 +5789,7 @@ , apps/client/src/app/pages/portfolio/fire/fire-page.html - 145 + 146 @@ -5733,11 +5805,11 @@ per month apps/client/src/app/pages/portfolio/fire/fire-page.html - 94 + 95 apps/client/src/app/pages/portfolio/fire/fire-page.html - 172 + 173 @@ -5861,7 +5933,7 @@ Vuoi veramente elimnare il saldo di questo conto? libs/ui/src/lib/account-balances/account-balances.component.ts - 113 + 127 @@ -5885,7 +5957,7 @@ Prova apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 574 + 573 @@ -5939,6 +6011,10 @@ Job Queue Coda Lavori + + apps/client/src/app/pages/admin/admin-page.component.ts + 84 + libs/common/src/lib/routes/routes.ts 46 @@ -5973,7 +6049,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 89 + 92 @@ -5989,7 +6065,7 @@ Close Holding apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 447 + 446 @@ -6029,7 +6105,7 @@ Da inizio settimana libs/ui/src/lib/assistant/assistant.component.ts - 377 + 376 @@ -6041,7 +6117,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 377 + 376 @@ -6049,7 +6125,7 @@ Da inizio mese libs/ui/src/lib/assistant/assistant.component.ts - 381 + 380 @@ -6061,7 +6137,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 381 + 380 @@ -6069,7 +6145,7 @@ Da inizio anno libs/ui/src/lib/assistant/assistant.component.ts - 385 + 384 @@ -6117,7 +6193,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 395 + 394 @@ -6129,7 +6205,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 419 + 416 @@ -6145,7 +6221,7 @@ Raccolta Dati apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 597 + 596 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6157,7 +6233,7 @@ Find a holding... libs/ui/src/lib/assistant/assistant.component.ts - 472 + 469 @@ -6258,7 +6334,7 @@ Esegui il lavoro apps/client/src/app/components/admin-jobs/admin-jobs.html - 229 + 220 @@ -6266,7 +6342,7 @@ Priorità apps/client/src/app/components/admin-jobs/admin-jobs.html - 105 + 96 @@ -6330,7 +6406,7 @@ Jump to a page... libs/ui/src/lib/assistant/assistant.component.ts - 473 + 470 @@ -6378,7 +6454,7 @@ Include in apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 382 + 381 @@ -6405,30 +6481,6 @@ 130 - - Delete Profiles - Elimina i profili - - apps/client/src/app/components/admin-market-data/admin-market-data.html - 242 - - - - Do you really want to delete these profiles? - Confermi di voler eliminare questi profili? - - apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 59 - - - - Oops! Could not delete profiles. - Ops! Impossibile eliminare i profili. - - apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 47 - - Table Tabella @@ -6458,7 +6510,7 @@ Alternativa apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 83 + 86 @@ -6466,7 +6518,7 @@ App apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 84 + 87 @@ -6474,7 +6526,7 @@ Budgeting apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 85 + 88 @@ -6534,7 +6586,15 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 86 + 89 + + + + Oops! Could not delete the asset profile. + Oops! Could not delete the asset profile. + + apps/client/src/app/components/admin-market-data/admin-market-data.service.ts + 51 @@ -6542,7 +6602,7 @@ Ufficio familiare apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 87 + 90 @@ -6550,7 +6610,7 @@ Investitore apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 90 + 93 @@ -6562,7 +6622,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 91 + 94 @@ -6574,7 +6634,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 93 + 96 @@ -6582,7 +6642,7 @@ Privacy apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 94 + 97 @@ -6590,7 +6650,7 @@ Software apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 96 + 99 @@ -6598,7 +6658,7 @@ Strumento apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 97 + 100 @@ -6606,7 +6666,7 @@ Esperienza Utente apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 98 + 101 @@ -6614,7 +6674,7 @@ Ricchezza apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 99 + 102 @@ -6622,7 +6682,7 @@ Gestione Patrimoniale apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 100 + 103 @@ -6633,6 +6693,14 @@ 474 + + Do you really want to delete these asset profiles? + Do you really want to delete these asset profiles? + + apps/client/src/app/components/admin-market-data/admin-market-data.service.ts + 67 + + Error Errore @@ -6670,7 +6738,7 @@ , based on your total assets of apps/client/src/app/pages/portfolio/fire/fire-page.html - 96 + 97 @@ -6690,7 +6758,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 602 + 601 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6742,7 +6810,7 @@ Chiudi apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 604 + 603 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6762,7 +6830,7 @@ apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 124 + 131 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -6770,7 +6838,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 133 + 229 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -6814,7 +6882,7 @@ Stato del Portfolio apps/client/src/app/components/admin-jobs/admin-jobs.html - 65 + 56 @@ -6846,7 +6914,7 @@ Soglia Minima apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 52 + 58 @@ -6854,7 +6922,7 @@ Soglia Massima apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 87 + 93 @@ -6946,7 +7014,7 @@ , assuming a apps/client/src/app/pages/portfolio/fire/fire-page.html - 174 + 175 @@ -6977,6 +7045,14 @@ 195 + + Delete + Delete + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 244 + + cannot be self-hosted non può essere ospitato in proprio @@ -7148,7 +7224,7 @@ Range soglia apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 9 + 15 @@ -7280,7 +7356,7 @@ Salva apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 613 + 612 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7304,7 +7380,7 @@ apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 130 + 139 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -7404,7 +7480,7 @@ Prezzo di mercato predefinito apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 487 + 486 @@ -7412,7 +7488,7 @@ Modalità apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 524 + 523 @@ -7420,7 +7496,7 @@ Selettore apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 540 + 539 @@ -7428,7 +7504,7 @@ Intestazioni della richiesta HTTP apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 500 + 499 @@ -7472,7 +7548,7 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 381 + 380 @@ -7492,11 +7568,11 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 381 + 380 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 394 + 393 @@ -8225,7 +8301,7 @@ Gestisci profilo risorsa apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 472 + 471 @@ -8249,7 +8325,7 @@ Average Unit Price apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 117 + 123 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html diff --git a/apps/client/src/locales/messages.ko.xlf b/apps/client/src/locales/messages.ko.xlf index e9f4139dc..2ac85bbf5 100644 --- a/apps/client/src/locales/messages.ko.xlf +++ b/apps/client/src/locales/messages.ko.xlf @@ -216,7 +216,7 @@ 거래에는 상당한 손실 위험이 따를 수 있습니다. 단기적으로 필요할 수 있는 자금의 투자는 권장되지 않습니다. apps/client/src/app/components/footer/footer.component.html - 182 + 180 @@ -252,12 +252,16 @@ 유형 apps/client/src/app/components/admin-jobs/admin-jobs.html - 57 + 48 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html 28 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 156 + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 15 @@ -268,7 +272,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 187 + 185 @@ -364,7 +368,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 315 + 314 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -436,7 +440,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 322 + 321 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -456,7 +460,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 307 + 305 @@ -480,7 +484,7 @@ libs/ui/src/lib/account-balances/account-balances.component.html - 34 + 39 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -492,11 +496,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 288 + 286 libs/ui/src/lib/activities-table/activities-table.component.html - 324 + 322 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -520,7 +524,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 267 + 278 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -544,7 +548,7 @@ 삭제 apps/client/src/app/components/admin-market-data/admin-market-data.html - 289 + 300 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -568,7 +572,7 @@ libs/ui/src/lib/account-balances/account-balances.component.html - 80 + 85 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -591,12 +595,20 @@ 146 + + Paid + Paid + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts + 117 + + Asset Profile 자산 프로필 apps/client/src/app/components/admin-jobs/admin-jobs.html - 61 + 52 @@ -604,11 +616,11 @@ 과거 시장 데이터 apps/client/src/app/components/admin-jobs/admin-jobs.html - 63 + 54 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 454 + 453 @@ -616,7 +628,7 @@ 데이터 소스 apps/client/src/app/components/admin-jobs/admin-jobs.html - 91 + 82 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -640,7 +652,7 @@ 시도 횟수 apps/client/src/app/components/admin-jobs/admin-jobs.html - 129 + 120 @@ -648,7 +660,11 @@ 생성됨 apps/client/src/app/components/admin-jobs/admin-jobs.html - 143 + 134 + + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 140 @@ -656,7 +672,7 @@ 완료됨 apps/client/src/app/components/admin-jobs/admin-jobs.html - 152 + 143 @@ -664,7 +680,7 @@ 상태 apps/client/src/app/components/admin-jobs/admin-jobs.html - 161 + 152 apps/client/src/app/components/admin-settings/admin-settings.component.html @@ -684,7 +700,7 @@ 작업 삭제 apps/client/src/app/components/admin-jobs/admin-jobs.html - 202 + 193 @@ -692,7 +708,7 @@ 데이터 보기 apps/client/src/app/components/admin-jobs/admin-jobs.html - 217 + 208 @@ -700,7 +716,7 @@ 스택트레이스 보기 apps/client/src/app/components/admin-jobs/admin-jobs.html - 225 + 216 @@ -708,7 +724,7 @@ 작업 삭제 apps/client/src/app/components/admin-jobs/admin-jobs.html - 233 + 224 @@ -724,7 +740,7 @@ 계좌 검색... libs/ui/src/lib/assistant/assistant.component.ts - 471 + 468 @@ -740,7 +756,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 196 + 194 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -798,6 +814,10 @@ apps/client/src/app/components/admin-market-data/admin-market-data.service.ts 28 + + apps/client/src/app/components/admin-market-data/admin-market-data.service.ts + 66 + Filter by... @@ -928,11 +948,11 @@ 가져오기 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 155 + 158 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 190 + 193 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.html @@ -956,7 +976,7 @@ 국가 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 278 + 277 apps/client/src/app/components/admin-users/admin-users.html @@ -964,7 +984,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 281 + 280 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -976,15 +996,15 @@ 섹터 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 284 + 283 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 403 + 402 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 287 + 286 apps/client/src/app/pages/public/public-page.html @@ -996,15 +1016,15 @@ 국가 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 294 + 293 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 414 + 413 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 299 + 298 @@ -1012,7 +1032,7 @@ 심볼 매핑 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 392 + 391 @@ -1031,12 +1051,20 @@ 32 + + Total + Total + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 150 + + Scraper Configuration 스크래퍼 설정 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 477 + 476 @@ -1044,7 +1072,7 @@ 메모 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 438 + 437 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1220,7 +1248,7 @@ libs/ui/src/lib/account-balances/account-balances.component.html - 93 + 98 @@ -1252,11 +1280,11 @@ 링크 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 425 + 424 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 556 + 555 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -1280,7 +1308,7 @@ 정말로 이 플랫폼을 삭제하시겠습니까? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 115 + 114 @@ -1296,7 +1324,7 @@ 에 의해 apps/client/src/app/pages/portfolio/fire/fire-page.html - 139 + 140 @@ -1360,7 +1388,7 @@ 이 태그를 정말로 삭제하시겠습니까? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 117 + 116 @@ -1480,7 +1508,7 @@ 포트폴리오 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 143 + 139 apps/client/src/app/components/header/header.component.html @@ -1492,7 +1520,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 95 + 98 libs/common/src/lib/routes/routes.ts @@ -1504,11 +1532,11 @@ 기준 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 384 + 383 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 155 + 151 @@ -1728,7 +1756,7 @@ 총액 apps/client/src/app/components/investment-chart/investment-chart.component.ts - 147 + 143 @@ -1744,7 +1772,7 @@ 저축률 apps/client/src/app/components/investment-chart/investment-chart.component.ts - 205 + 201 @@ -1796,15 +1824,15 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 97 + 100 apps/client/src/app/pages/portfolio/fire/fire-page.html - 83 + 84 apps/client/src/app/pages/portfolio/fire/fire-page.html - 161 + 162 apps/client/src/app/pages/pricing/pricing-page.html @@ -1992,7 +2020,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 217 + 215 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -2004,7 +2032,7 @@ 데이터 결함 보고 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 457 + 456 @@ -2184,7 +2212,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 373 + 372 @@ -2196,7 +2224,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 385 + 384 @@ -2208,7 +2236,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 395 + 394 @@ -2220,7 +2248,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 419 + 416 @@ -2240,7 +2268,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 425 + 422 @@ -2316,11 +2344,11 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 80 + 81 apps/client/src/app/pages/portfolio/fire/fire-page.html - 158 + 159 apps/client/src/app/pages/pricing/pricing-page.html @@ -2395,6 +2423,14 @@ 9 + + Coupon + Coupon + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts + 122 + + Language 언어 @@ -2408,7 +2444,7 @@ 장소 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 515 + 514 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -2472,7 +2508,7 @@ 이는 다음과 같이 증가할 것으로 예상된다. apps/client/src/app/pages/portfolio/fire/fire-page.html - 147 + 148 @@ -2708,7 +2744,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 383 + 382 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2804,7 +2840,7 @@ 시장 데이터 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 405 + 404 libs/common/src/lib/routes/routes.ts @@ -2842,10 +2878,6 @@ Overview 개요 - - apps/client/src/app/components/admin-jobs/admin-jobs.html - 7 - apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 114 @@ -2864,7 +2896,7 @@ apps/client/src/app/pages/admin/admin-page.component.ts - 41 + 68 apps/client/src/app/pages/resources/resources-page.component.ts @@ -3248,7 +3280,7 @@ 시장 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 386 + 385 apps/client/src/app/components/footer/footer.component.html @@ -3547,6 +3579,14 @@ 217 + + Oops! Could not delete the asset profiles. + Oops! Could not delete the asset profiles. + + apps/client/src/app/components/admin-market-data/admin-market-data.service.ts + 52 + + What our users are saying 사용자의 이야기 @@ -3688,7 +3728,7 @@ 안전 인출률(SWR)은 다음과 같습니다. apps/client/src/app/pages/portfolio/fire/fire-page.html - 108 + 109 @@ -3712,7 +3752,7 @@ 작업 ID apps/client/src/app/components/admin-jobs/admin-jobs.html - 43 + 34 @@ -3772,7 +3812,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 347 + 346 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -3876,7 +3916,15 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 241 + 239 + + + + Subscriptions + Subscriptions + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 131 @@ -3976,7 +4024,7 @@ 배당금 불러오기 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 68 + 71 @@ -3984,7 +4032,7 @@ 여기에 파일을 선택하거나 드롭하세요. apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 84 + 87 @@ -3992,7 +4040,7 @@ 다음 파일 형식이 지원됩니다. apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 90 + 93 @@ -4000,7 +4048,7 @@ 배당금 선택 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 113 + 116 @@ -4008,7 +4056,7 @@ 거래 선택 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 115 + 118 @@ -4016,11 +4064,19 @@ 뒤쪽에 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 146 + 149 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 182 + 185 + + + + Price + Price + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 166 @@ -4115,6 +4171,14 @@ 150 + + Trial + Trial + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts + 121 + + Exclude from Analysis 분석에서 제외 @@ -4252,7 +4316,7 @@ 연간 이자율 apps/client/src/app/pages/portfolio/fire/fire-page.html - 185 + 186 @@ -4279,6 +4343,14 @@ 93 + + Expires + Expires + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 194 + + Top 상위 @@ -4592,7 +4664,7 @@ 지속 가능한 퇴직 소득 apps/client/src/app/pages/portfolio/fire/fire-page.html - 41 + 42 @@ -4729,11 +4801,11 @@ 매월 apps/client/src/app/pages/portfolio/fire/fire-page.html - 94 + 95 apps/client/src/app/pages/portfolio/fire/fire-page.html - 172 + 173 @@ -4924,20 +4996,12 @@ 329 - - Switzerland - 스위스 - - apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 58 - - Global 글로벌 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 59 + 60 libs/ui/src/lib/i18n.ts @@ -5041,7 +5105,7 @@ 정말로 이 계좌 잔액을 삭제하시겠습니까? libs/ui/src/lib/account-balances/account-balances.component.ts - 113 + 127 @@ -5073,7 +5137,7 @@ 초안 libs/ui/src/lib/activities-table/activities-table.component.html - 168 + 167 @@ -5133,7 +5197,7 @@ , apps/client/src/app/pages/portfolio/fire/fire-page.html - 145 + 146 @@ -5168,6 +5232,14 @@ 130 + + {VAR_PLURAL, plural, =1 {Profile} other {Profiles}} + {VAR_PLURAL, plural, =1 {Profile} other {Profiles}} + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 249 + + Loan 대출 @@ -5281,7 +5353,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 339 + 337 libs/ui/src/lib/i18n.ts @@ -5313,7 +5385,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 332 + 331 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -5345,7 +5417,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 348 + 347 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -5461,7 +5533,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 449 + 448 @@ -5509,7 +5581,7 @@ 상징 apps/client/src/app/components/admin-jobs/admin-jobs.html - 77 + 68 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -5525,7 +5597,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 319 + 318 libs/ui/src/lib/i18n.ts @@ -5601,7 +5673,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 265 + 263 libs/ui/src/lib/i18n.ts @@ -5797,7 +5869,7 @@ 오늘 퇴사하면 탈퇴 가능 apps/client/src/app/pages/portfolio/fire/fire-page.html - 68 + 69 @@ -5877,11 +5949,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 451 + 450 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 465 + 464 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5917,7 +5989,7 @@ 시험 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 574 + 573 @@ -5963,6 +6035,10 @@ Job Queue 작업 대기열 + + apps/client/src/app/pages/admin/admin-page.component.ts + 84 + libs/common/src/lib/routes/routes.ts 46 @@ -5989,7 +6065,7 @@ 보유 포지션 종료 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 447 + 446 @@ -6021,7 +6097,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 89 + 92 @@ -6053,7 +6129,7 @@ 연초 현재 libs/ui/src/lib/assistant/assistant.component.ts - 385 + 384 @@ -6061,7 +6137,7 @@ 이번주 현재까지 libs/ui/src/lib/assistant/assistant.component.ts - 377 + 376 @@ -6069,7 +6145,7 @@ 월간 누계 libs/ui/src/lib/assistant/assistant.component.ts - 381 + 380 @@ -6081,7 +6157,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 381 + 380 @@ -6093,7 +6169,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 377 + 376 @@ -6141,7 +6217,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 395 + 394 @@ -6153,7 +6229,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 419 + 416 @@ -6194,7 +6270,7 @@ 데이터 수집 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 597 + 596 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6206,7 +6282,7 @@ 보유 종목 검색... libs/ui/src/lib/assistant/assistant.component.ts - 472 + 469 @@ -6282,7 +6358,7 @@ 작업 실행 apps/client/src/app/components/admin-jobs/admin-jobs.html - 229 + 220 @@ -6298,7 +6374,7 @@ 우선 사항 apps/client/src/app/components/admin-jobs/admin-jobs.html - 105 + 96 @@ -6362,7 +6438,7 @@ 페이지 이동... libs/ui/src/lib/assistant/assistant.component.ts - 473 + 470 @@ -6402,7 +6478,7 @@ 포함 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 382 + 381 @@ -6421,30 +6497,6 @@ 179 - - Do you really want to delete these profiles? - 이 프로필을 정말로 삭제하시겠습니까? - - apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 59 - - - - Delete Profiles - 프로필 삭제 - - apps/client/src/app/components/admin-market-data/admin-market-data.html - 242 - - - - Oops! Could not delete profiles. - 이런! 프로필을 삭제할 수 없습니다. - - apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 47 - - Benchmarks 벤치마크 @@ -6482,7 +6534,7 @@ 재산 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 99 + 102 @@ -6542,7 +6594,15 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 86 + 89 + + + + Oops! Could not delete the asset profile. + Oops! Could not delete the asset profile. + + apps/client/src/app/components/admin-market-data/admin-market-data.service.ts + 51 @@ -6550,7 +6610,7 @@ 사용자 경험 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 98 + 101 @@ -6558,7 +6618,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 84 + 87 @@ -6566,7 +6626,7 @@ 도구 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 97 + 100 @@ -6574,7 +6634,7 @@ 투자자 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 90 + 93 @@ -6582,7 +6642,7 @@ 자산관리 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 100 + 103 @@ -6598,7 +6658,7 @@ 대안 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 83 + 86 @@ -6606,7 +6666,7 @@ 패밀리오피스 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 87 + 90 @@ -6618,7 +6678,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 93 + 96 @@ -6626,7 +6686,7 @@ 소프트웨어 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 96 + 99 @@ -6634,7 +6694,7 @@ 예산 편성 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 85 + 88 @@ -6646,7 +6706,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 91 + 94 @@ -6654,7 +6714,15 @@ 은둔 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 94 + 97 + + + + Do you really want to delete these asset profiles? + Do you really want to delete these asset profiles? + + apps/client/src/app/components/admin-market-data/admin-market-data.service.ts + 67 @@ -6674,7 +6742,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 602 + 601 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6742,7 +6810,7 @@ , 귀하의 총 자산을 기준으로 apps/client/src/app/pages/portfolio/fire/fire-page.html - 96 + 97 @@ -6758,7 +6826,7 @@ 닫다 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 604 + 603 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6778,7 +6846,7 @@ apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 124 + 131 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -6786,7 +6854,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 133 + 229 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -6830,7 +6898,7 @@ 임계값 최대 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 87 + 93 @@ -6854,7 +6922,7 @@ 포트폴리오 스냅샷 apps/client/src/app/components/admin-jobs/admin-jobs.html - 65 + 56 @@ -6862,7 +6930,7 @@ 임계값 최소 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 52 + 58 @@ -6962,7 +7030,7 @@ , 가정 apps/client/src/app/pages/portfolio/fire/fire-page.html - 174 + 175 @@ -6993,6 +7061,14 @@ 195 + + Delete + Delete + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 244 + + cannot be self-hosted 은(는) 자체 호스팅할 수 없습니다. @@ -7172,7 +7248,7 @@ 임계값 범위 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 9 + 15 @@ -7304,7 +7380,7 @@ 구하다 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 613 + 612 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7328,7 +7404,7 @@ apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 130 + 139 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -7412,7 +7488,7 @@ 방법 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 524 + 523 @@ -7420,7 +7496,7 @@ 기본 시장 가격 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 487 + 486 @@ -7428,7 +7504,7 @@ 선택자 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 540 + 539 @@ -7452,7 +7528,7 @@ HTTP 요청 헤더 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 500 + 499 @@ -7496,7 +7572,7 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 381 + 380 @@ -7516,11 +7592,11 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 381 + 380 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 394 + 393 @@ -8225,7 +8301,7 @@ 자산 프로필 관리 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 472 + 471 @@ -8249,7 +8325,7 @@ 평균단가 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 117 + 123 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html diff --git a/apps/client/src/locales/messages.nl.xlf b/apps/client/src/locales/messages.nl.xlf index eab63de12..b7f163afe 100644 --- a/apps/client/src/locales/messages.nl.xlf +++ b/apps/client/src/locales/messages.nl.xlf @@ -26,7 +26,7 @@ Het risico op verlies bij handelen kan aanzienlijk zijn. Het is niet aan te raden om geld te investeren dat je misschien op korte termijn nodig heeft. apps/client/src/app/components/footer/footer.component.html - 182 + 180 @@ -50,12 +50,16 @@ Type apps/client/src/app/components/admin-jobs/admin-jobs.html - 57 + 48 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html 28 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 156 + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 15 @@ -66,7 +70,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 187 + 185 @@ -110,7 +114,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 315 + 314 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -194,7 +198,7 @@ libs/ui/src/lib/account-balances/account-balances.component.html - 34 + 39 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -206,11 +210,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 288 + 286 libs/ui/src/lib/activities-table/activities-table.component.html - 324 + 322 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -234,7 +238,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 267 + 278 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -258,7 +262,7 @@ Verwijderen apps/client/src/app/components/admin-market-data/admin-market-data.html - 289 + 300 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -282,7 +286,7 @@ libs/ui/src/lib/account-balances/account-balances.component.html - 80 + 85 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -305,12 +309,20 @@ 146 + + Paid + Paid + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts + 117 + + Delete Jobs Taken verwijderen apps/client/src/app/components/admin-jobs/admin-jobs.html - 202 + 193 @@ -318,7 +330,7 @@ Gegevensbron apps/client/src/app/components/admin-jobs/admin-jobs.html - 91 + 82 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -342,7 +354,7 @@ Pogingen apps/client/src/app/components/admin-jobs/admin-jobs.html - 129 + 120 @@ -350,7 +362,11 @@ Aangemaakt apps/client/src/app/components/admin-jobs/admin-jobs.html - 143 + 134 + + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 140 @@ -358,7 +374,7 @@ Voltooid apps/client/src/app/components/admin-jobs/admin-jobs.html - 152 + 143 @@ -366,7 +382,7 @@ Status apps/client/src/app/components/admin-jobs/admin-jobs.html - 161 + 152 apps/client/src/app/components/admin-settings/admin-settings.component.html @@ -398,11 +414,11 @@ Historische marktgegevens apps/client/src/app/components/admin-jobs/admin-jobs.html - 63 + 54 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 454 + 453 @@ -410,7 +426,7 @@ Bekijk gegevens apps/client/src/app/components/admin-jobs/admin-jobs.html - 217 + 208 @@ -418,7 +434,7 @@ Bekijk Stacktrace apps/client/src/app/components/admin-jobs/admin-jobs.html - 225 + 216 @@ -426,7 +442,7 @@ Taak verwijderen apps/client/src/app/components/admin-jobs/admin-jobs.html - 233 + 224 @@ -442,7 +458,7 @@ Find an account... libs/ui/src/lib/assistant/assistant.component.ts - 471 + 468 @@ -458,7 +474,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 196 + 194 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -606,7 +622,7 @@ libs/ui/src/lib/account-balances/account-balances.component.html - 93 + 98 @@ -838,15 +854,15 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 97 + 100 apps/client/src/app/pages/portfolio/fire/fire-page.html - 83 + 84 apps/client/src/app/pages/portfolio/fire/fire-page.html - 161 + 162 apps/client/src/app/pages/pricing/pricing-page.html @@ -970,15 +986,15 @@ Sectoren apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 284 + 283 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 403 + 402 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 287 + 286 apps/client/src/app/pages/public/public-page.html @@ -990,15 +1006,15 @@ Landen apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 294 + 293 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 414 + 413 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 299 + 298 @@ -1022,7 +1038,7 @@ Gegevensstoring melden apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 457 + 456 @@ -1062,7 +1078,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 373 + 372 @@ -1074,7 +1090,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 385 + 384 @@ -1086,7 +1102,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 395 + 394 @@ -1098,7 +1114,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 419 + 416 @@ -1118,7 +1134,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 425 + 422 @@ -1246,11 +1262,11 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 80 + 81 apps/client/src/app/pages/portfolio/fire/fire-page.html - 158 + 159 apps/client/src/app/pages/pricing/pricing-page.html @@ -1297,12 +1313,20 @@ 9 + + Coupon + Coupon + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts + 122 + + Locale Locatie apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 515 + 514 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -1398,7 +1422,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 383 + 382 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -1442,7 +1466,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 322 + 321 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -1462,7 +1486,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 307 + 305 @@ -1692,10 +1716,6 @@ Overview Overzicht - - apps/client/src/app/components/admin-jobs/admin-jobs.html - 7 - apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 114 @@ -1714,7 +1734,7 @@ apps/client/src/app/pages/admin/admin-page.component.ts - 41 + 68 apps/client/src/app/pages/resources/resources-page.component.ts @@ -1734,7 +1754,7 @@ Markten apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 386 + 385 apps/client/src/app/components/footer/footer.component.html @@ -1861,6 +1881,14 @@ 150 + + Trial + Trial + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts + 121 + + Analysis Analyse @@ -2022,7 +2050,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 217 + 215 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -2038,7 +2066,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 241 + 239 @@ -2046,7 +2074,7 @@ Opmerking apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 438 + 437 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -2090,7 +2118,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 347 + 346 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2170,7 +2198,7 @@ Portefeuille apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 143 + 139 apps/client/src/app/components/header/header.component.html @@ -2182,7 +2210,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 95 + 98 libs/common/src/lib/routes/routes.ts @@ -2202,7 +2230,7 @@ Duurzaam pensioeninkomen apps/client/src/app/pages/portfolio/fire/fire-page.html - 41 + 42 @@ -2298,7 +2326,15 @@ Concept libs/ui/src/lib/activities-table/activities-table.component.html - 168 + 167 + + + + Subscriptions + Subscriptions + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 131 @@ -2389,6 +2425,14 @@ 130 + + {VAR_PLURAL, plural, =1 {Profile} other {Profiles}} + {VAR_PLURAL, plural, =1 {Profile} other {Profiles}} + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 249 + + Annual Interest Rate Jaarlijkse rente @@ -2530,7 +2574,7 @@ Land apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 278 + 277 apps/client/src/app/components/admin-users/admin-users.html @@ -2538,7 +2582,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 281 + 280 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2594,7 +2638,7 @@ jaarlijkse rente apps/client/src/app/pages/portfolio/fire/fire-page.html - 185 + 186 @@ -2702,11 +2746,11 @@ Benchmark apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 384 + 383 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 155 + 151 @@ -2786,7 +2830,7 @@ Totaalbedrag apps/client/src/app/components/investment-chart/investment-chart.component.ts - 147 + 143 @@ -2810,7 +2854,7 @@ Spaarrente apps/client/src/app/components/investment-chart/investment-chart.component.ts - 205 + 201 @@ -2822,7 +2866,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 339 + 337 libs/ui/src/lib/i18n.ts @@ -2846,7 +2890,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 332 + 331 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2870,7 +2914,7 @@ Symbool apps/client/src/app/components/admin-jobs/admin-jobs.html - 77 + 68 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -2886,7 +2930,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 319 + 318 libs/ui/src/lib/i18n.ts @@ -3050,7 +3094,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 449 + 448 @@ -3070,11 +3114,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 451 + 450 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 465 + 464 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -3126,7 +3170,7 @@ Als u vandaag met pensioen gaat, kunt u apps/client/src/app/pages/portfolio/fire/fire-page.html - 68 + 69 @@ -3150,7 +3194,7 @@ De volgende bestandsformaten worden ondersteund: apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 90 + 93 @@ -3158,11 +3202,19 @@ Terug apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 146 + 149 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 182 + 185 + + + + Price + Price + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 166 @@ -3186,7 +3238,7 @@ Symbool toewijzen apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 392 + 391 @@ -3250,7 +3302,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 348 + 347 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -3286,11 +3338,11 @@ Importeren apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 155 + 158 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 190 + 193 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.html @@ -3302,7 +3354,7 @@ Marktgegevens apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 405 + 404 libs/common/src/lib/routes/routes.ts @@ -3350,7 +3402,7 @@ Laad dividenden apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 68 + 71 @@ -3361,6 +3413,14 @@ 93 + + Expires + Expires + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 194 + + Import Dividends Importeer dividenden @@ -3914,7 +3974,7 @@ Tegen apps/client/src/app/pages/portfolio/fire/fire-page.html - 139 + 140 @@ -3946,11 +4006,11 @@ Url apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 425 + 424 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 556 + 555 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -3974,7 +4034,7 @@ Wil je dit platform echt verwijderen? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 115 + 114 @@ -4078,7 +4138,7 @@ Selecteer dividenden apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 113 + 116 @@ -4086,7 +4146,7 @@ Selecteer activiteiten apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 115 + 118 @@ -4329,12 +4389,20 @@ 32 + + Total + Total + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 150 + + Scraper Configuration Scraper instellingen apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 477 + 476 @@ -4706,7 +4774,7 @@ zal dit naar verwachting stijgen tot apps/client/src/app/pages/portfolio/fire/fire-page.html - 147 + 148 @@ -4758,7 +4826,7 @@ Opdracht ID apps/client/src/app/components/admin-jobs/admin-jobs.html - 43 + 34 @@ -5089,6 +5157,14 @@ 217 + + Oops! Could not delete the asset profiles. + Oops! Could not delete the asset profiles. + + apps/client/src/app/components/admin-market-data/admin-market-data.service.ts + 52 + + What our users are saying Wat onze gebruikers zeggen @@ -5427,20 +5503,12 @@ 325 - - Switzerland - Zwitserland - - apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 58 - - Global Wereldwijd apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 59 + 60 libs/ui/src/lib/i18n.ts @@ -5488,7 +5556,7 @@ en een veilige opnameratio (SWR) van apps/client/src/app/pages/portfolio/fire/fire-page.html - 108 + 109 @@ -5504,7 +5572,7 @@ Kies of sleep bestand hier apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 84 + 87 @@ -5540,7 +5608,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 265 + 263 libs/ui/src/lib/i18n.ts @@ -5568,7 +5636,7 @@ Weet u zetker dat u dit label wilt verwijderen? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 117 + 116 @@ -5668,7 +5736,7 @@ Bezittingen Profiel apps/client/src/app/components/admin-jobs/admin-jobs.html - 61 + 52 @@ -5678,6 +5746,10 @@ apps/client/src/app/components/admin-market-data/admin-market-data.service.ts 28 + + apps/client/src/app/components/admin-market-data/admin-market-data.service.ts + 66 + Search @@ -5716,7 +5788,7 @@ , apps/client/src/app/pages/portfolio/fire/fire-page.html - 145 + 146 @@ -5732,11 +5804,11 @@ per maand apps/client/src/app/pages/portfolio/fire/fire-page.html - 94 + 95 apps/client/src/app/pages/portfolio/fire/fire-page.html - 172 + 173 @@ -5860,7 +5932,7 @@ Wilt u dit rekeningsaldo echt verwijderen? libs/ui/src/lib/account-balances/account-balances.component.ts - 113 + 127 @@ -5884,7 +5956,7 @@ Test apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 574 + 573 @@ -5938,6 +6010,10 @@ Job Queue Opdracht Wachtrij + + apps/client/src/app/pages/admin/admin-page.component.ts + 84 + libs/common/src/lib/routes/routes.ts 46 @@ -5972,7 +6048,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 89 + 92 @@ -5988,7 +6064,7 @@ Sluit Holding apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 447 + 446 @@ -6028,7 +6104,7 @@ Week tot nu toe libs/ui/src/lib/assistant/assistant.component.ts - 377 + 376 @@ -6040,7 +6116,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 377 + 376 @@ -6048,7 +6124,7 @@ Maand tot nu toe libs/ui/src/lib/assistant/assistant.component.ts - 381 + 380 @@ -6060,7 +6136,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 381 + 380 @@ -6068,7 +6144,7 @@ Jaar tot nu toe libs/ui/src/lib/assistant/assistant.component.ts - 385 + 384 @@ -6116,7 +6192,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 395 + 394 @@ -6128,7 +6204,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 419 + 416 @@ -6144,7 +6220,7 @@ Data Verzamelen apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 597 + 596 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6156,7 +6232,7 @@ Find a holding... libs/ui/src/lib/assistant/assistant.component.ts - 472 + 469 @@ -6257,7 +6333,7 @@ Opdracht Uitvoeren apps/client/src/app/components/admin-jobs/admin-jobs.html - 229 + 220 @@ -6265,7 +6341,7 @@ Prioriteit apps/client/src/app/components/admin-jobs/admin-jobs.html - 105 + 96 @@ -6329,7 +6405,7 @@ Jump to a page... libs/ui/src/lib/assistant/assistant.component.ts - 473 + 470 @@ -6377,7 +6453,7 @@ Opnemen in apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 382 + 381 @@ -6404,30 +6480,6 @@ 130 - - Delete Profiles - Verwijder Profielen - - apps/client/src/app/components/admin-market-data/admin-market-data.html - 242 - - - - Do you really want to delete these profiles? - Wilt u deze profielen echt verwijderen? - - apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 59 - - - - Oops! Could not delete profiles. - Oeps! Verwijderen van de profielen is mislukt. - - apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 47 - - Table Tabel @@ -6457,7 +6509,7 @@ Alternatief apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 83 + 86 @@ -6465,7 +6517,7 @@ App apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 84 + 87 @@ -6473,7 +6525,7 @@ Budgetteren apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 85 + 88 @@ -6533,7 +6585,15 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 86 + 89 + + + + Oops! Could not delete the asset profile. + Oops! Could not delete the asset profile. + + apps/client/src/app/components/admin-market-data/admin-market-data.service.ts + 51 @@ -6541,7 +6601,7 @@ Familiekantoor apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 87 + 90 @@ -6549,7 +6609,7 @@ Investeerder apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 90 + 93 @@ -6561,7 +6621,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 91 + 94 @@ -6573,7 +6633,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 93 + 96 @@ -6581,7 +6641,7 @@ Privacy apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 94 + 97 @@ -6589,7 +6649,7 @@ Software apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 96 + 99 @@ -6597,7 +6657,7 @@ Hulpmiddel apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 97 + 100 @@ -6605,7 +6665,7 @@ Gebruikers Ervaring apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 98 + 101 @@ -6613,7 +6673,7 @@ Vermogen apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 99 + 102 @@ -6621,7 +6681,7 @@ Vermogensbeheer apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 100 + 103 @@ -6632,6 +6692,14 @@ 474 + + Do you really want to delete these asset profiles? + Do you really want to delete these asset profiles? + + apps/client/src/app/components/admin-market-data/admin-market-data.service.ts + 67 + + Error Fout @@ -6669,7 +6737,7 @@ opnemen, dit is gebaseerd op uw totale vermogen van apps/client/src/app/pages/portfolio/fire/fire-page.html - 96 + 97 @@ -6689,7 +6757,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 602 + 601 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6741,7 +6809,7 @@ Sluiten apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 604 + 603 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6761,7 +6829,7 @@ apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 124 + 131 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -6769,7 +6837,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 133 + 229 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -6813,7 +6881,7 @@ Portfolio Momentopname apps/client/src/app/components/admin-jobs/admin-jobs.html - 65 + 56 @@ -6845,7 +6913,7 @@ Drempelwaarde Min apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 52 + 58 @@ -6853,7 +6921,7 @@ Drempelwaarde Max apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 87 + 93 @@ -6945,7 +7013,7 @@ , uitgaande van apps/client/src/app/pages/portfolio/fire/fire-page.html - 174 + 175 @@ -6976,6 +7044,14 @@ 195 + + Delete + Delete + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 244 + + cannot be self-hosted kan niet zelf gehost worden @@ -7147,7 +7223,7 @@ Drempebereik apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 9 + 15 @@ -7279,7 +7355,7 @@ Opslaan apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 613 + 612 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7303,7 +7379,7 @@ apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 130 + 139 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -7403,7 +7479,7 @@ Standaard Marktprijs apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 487 + 486 @@ -7411,7 +7487,7 @@ Modus apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 524 + 523 @@ -7419,7 +7495,7 @@ Kiezer apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 540 + 539 @@ -7427,7 +7503,7 @@ HTTP Verzoek Headers apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 500 + 499 @@ -7471,7 +7547,7 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 381 + 380 @@ -7491,11 +7567,11 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 381 + 380 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 394 + 393 @@ -8224,7 +8300,7 @@ Beheer activaprofiel apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 472 + 471 @@ -8248,7 +8324,7 @@ Gemiddelde eenheidsprijs apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 117 + 123 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html diff --git a/apps/client/src/locales/messages.pl.xlf b/apps/client/src/locales/messages.pl.xlf index 7dde9b9e0..b9621a202 100644 --- a/apps/client/src/locales/messages.pl.xlf +++ b/apps/client/src/locales/messages.pl.xlf @@ -215,7 +215,7 @@ Ryzyko strat na rynku może być znaczne. Nie jest zalecane inwestowanie pieniędzy, które mogą być potrzebne w krótkim okresie. apps/client/src/app/components/footer/footer.component.html - 182 + 180 @@ -251,12 +251,16 @@ Typ apps/client/src/app/components/admin-jobs/admin-jobs.html - 57 + 48 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html 28 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 156 + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 15 @@ -267,7 +271,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 187 + 185 @@ -355,7 +359,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 315 + 314 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -427,7 +431,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 322 + 321 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -447,7 +451,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 307 + 305 @@ -471,7 +475,7 @@ libs/ui/src/lib/account-balances/account-balances.component.html - 34 + 39 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -483,11 +487,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 288 + 286 libs/ui/src/lib/activities-table/activities-table.component.html - 324 + 322 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -511,7 +515,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 267 + 278 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -535,7 +539,7 @@ Usuń apps/client/src/app/components/admin-market-data/admin-market-data.html - 289 + 300 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -559,7 +563,7 @@ libs/ui/src/lib/account-balances/account-balances.component.html - 80 + 85 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -582,12 +586,20 @@ 146 + + Paid + Paid + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts + 117 + + Asset Profile Profil Aktywów apps/client/src/app/components/admin-jobs/admin-jobs.html - 61 + 52 @@ -595,11 +607,11 @@ Historyczne Dane Rynkowe apps/client/src/app/components/admin-jobs/admin-jobs.html - 63 + 54 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 454 + 453 @@ -607,7 +619,7 @@ Źródło Danych apps/client/src/app/components/admin-jobs/admin-jobs.html - 91 + 82 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -631,7 +643,7 @@ Próby apps/client/src/app/components/admin-jobs/admin-jobs.html - 129 + 120 @@ -639,7 +651,11 @@ Utworzono apps/client/src/app/components/admin-jobs/admin-jobs.html - 143 + 134 + + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 140 @@ -647,7 +663,7 @@ Zakończono apps/client/src/app/components/admin-jobs/admin-jobs.html - 152 + 143 @@ -655,7 +671,7 @@ Status apps/client/src/app/components/admin-jobs/admin-jobs.html - 161 + 152 apps/client/src/app/components/admin-settings/admin-settings.component.html @@ -675,7 +691,7 @@ Usuń Zadania apps/client/src/app/components/admin-jobs/admin-jobs.html - 202 + 193 @@ -683,7 +699,7 @@ Zobacz Dane apps/client/src/app/components/admin-jobs/admin-jobs.html - 217 + 208 @@ -691,7 +707,7 @@ Wyświetl Stos Wywołań apps/client/src/app/components/admin-jobs/admin-jobs.html - 225 + 216 @@ -699,7 +715,7 @@ Usuń Zadanie apps/client/src/app/components/admin-jobs/admin-jobs.html - 233 + 224 @@ -715,7 +731,7 @@ Find an account... libs/ui/src/lib/assistant/assistant.component.ts - 471 + 468 @@ -731,7 +747,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 196 + 194 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -789,6 +805,10 @@ apps/client/src/app/components/admin-market-data/admin-market-data.service.ts 28 + + apps/client/src/app/components/admin-market-data/admin-market-data.service.ts + 66 + Filter by... @@ -895,11 +915,11 @@ Importuj apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 155 + 158 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 190 + 193 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.html @@ -923,7 +943,7 @@ Kraj apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 278 + 277 apps/client/src/app/components/admin-users/admin-users.html @@ -931,7 +951,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 281 + 280 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -943,15 +963,15 @@ Sektory apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 284 + 283 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 403 + 402 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 287 + 286 apps/client/src/app/pages/public/public-page.html @@ -963,15 +983,15 @@ Kraje apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 294 + 293 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 414 + 413 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 299 + 298 @@ -979,7 +999,7 @@ Mapowanie Symboli apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 392 + 391 @@ -998,12 +1018,20 @@ 32 + + Total + Total + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 150 + + Scraper Configuration Konfiguracja Scrapera apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 477 + 476 @@ -1011,7 +1039,7 @@ Notatka apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 438 + 437 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1187,7 +1215,7 @@ libs/ui/src/lib/account-balances/account-balances.component.html - 93 + 98 @@ -1219,11 +1247,11 @@ Url apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 425 + 424 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 556 + 555 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -1247,7 +1275,7 @@ Czy naprawdę chcesz usunąć tę platformę? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 115 + 114 @@ -1263,7 +1291,7 @@ Przez apps/client/src/app/pages/portfolio/fire/fire-page.html - 139 + 140 @@ -1327,7 +1355,7 @@ Czy naprawdę chcesz usunąć ten tag? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 117 + 116 @@ -1447,7 +1475,7 @@ Portfel apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 143 + 139 apps/client/src/app/components/header/header.component.html @@ -1459,7 +1487,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 95 + 98 libs/common/src/lib/routes/routes.ts @@ -1471,11 +1499,11 @@ Poziom Odniesienia (Benchmark) apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 384 + 383 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 155 + 151 @@ -1695,7 +1723,7 @@ Całkowita Kwota apps/client/src/app/components/investment-chart/investment-chart.component.ts - 147 + 143 @@ -1711,7 +1739,7 @@ Stopa Oszczędności apps/client/src/app/components/investment-chart/investment-chart.component.ts - 205 + 201 @@ -1763,15 +1791,15 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 97 + 100 apps/client/src/app/pages/portfolio/fire/fire-page.html - 83 + 84 apps/client/src/app/pages/portfolio/fire/fire-page.html - 161 + 162 apps/client/src/app/pages/pricing/pricing-page.html @@ -1959,7 +1987,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 217 + 215 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -1971,7 +1999,7 @@ Zgłoś Błąd Danych apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 457 + 456 @@ -2151,7 +2179,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 373 + 372 @@ -2163,7 +2191,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 385 + 384 @@ -2175,7 +2203,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 395 + 394 @@ -2187,7 +2215,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 419 + 416 @@ -2207,7 +2235,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 425 + 422 @@ -2283,11 +2311,11 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 80 + 81 apps/client/src/app/pages/portfolio/fire/fire-page.html - 158 + 159 apps/client/src/app/pages/pricing/pricing-page.html @@ -2362,6 +2390,14 @@ 9 + + Coupon + Coupon + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts + 122 + + Language Język @@ -2375,7 +2411,7 @@ Ustawienia Regionalne apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 515 + 514 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -2439,7 +2475,7 @@ prognozuje się wzrost tej kwoty do apps/client/src/app/pages/portfolio/fire/fire-page.html - 147 + 148 @@ -2675,7 +2711,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 383 + 382 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2771,7 +2807,7 @@ Dane Rynkowe apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 405 + 404 libs/common/src/lib/routes/routes.ts @@ -2809,10 +2845,6 @@ Overview Przegląd - - apps/client/src/app/components/admin-jobs/admin-jobs.html - 7 - apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 114 @@ -2831,7 +2863,7 @@ apps/client/src/app/pages/admin/admin-page.component.ts - 41 + 68 apps/client/src/app/pages/resources/resources-page.component.ts @@ -3215,7 +3247,7 @@ Rynki apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 386 + 385 apps/client/src/app/components/footer/footer.component.html @@ -3514,6 +3546,14 @@ 217 + + Oops! Could not delete the asset profiles. + Oops! Could not delete the asset profiles. + + apps/client/src/app/components/admin-market-data/admin-market-data.service.ts + 52 + + What our users are saying Co mówią nasi użytkownicy @@ -3655,7 +3695,7 @@ oraz bezpiecznej stopy wypłaty (SWR) na poziomie apps/client/src/app/pages/portfolio/fire/fire-page.html - 108 + 109 @@ -3679,7 +3719,7 @@ Job ID apps/client/src/app/components/admin-jobs/admin-jobs.html - 43 + 34 @@ -3739,7 +3779,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 347 + 346 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -3843,7 +3883,15 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 241 + 239 + + + + Subscriptions + Subscriptions + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 131 @@ -3943,7 +3991,7 @@ Załaduj dywidendy apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 68 + 71 @@ -3951,7 +3999,7 @@ Wybierz lub przeciągnij plik tutaj apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 84 + 87 @@ -3959,7 +4007,7 @@ Obsługiwane są następujące formaty plików: apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 90 + 93 @@ -3967,7 +4015,7 @@ Wybierz dywidendy apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 113 + 116 @@ -3975,7 +4023,7 @@ Wybór działań apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 115 + 118 @@ -3983,11 +4031,19 @@ Wróc apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 146 + 149 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 182 + 185 + + + + Price + Price + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 166 @@ -4082,6 +4138,14 @@ 150 + + Trial + Trial + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts + 121 + + Exclude from Analysis Wyklucz z analizy @@ -4219,7 +4283,7 @@ rocznej stopy zwrotu apps/client/src/app/pages/portfolio/fire/fire-page.html - 185 + 186 @@ -4246,6 +4310,14 @@ 93 + + Expires + Expires + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 194 + + Top Największe wzrosty @@ -4559,7 +4631,7 @@ Zrównoważony dochód na emeryturze apps/client/src/app/pages/portfolio/fire/fire-page.html - 41 + 42 @@ -4696,11 +4768,11 @@ miesięcznie apps/client/src/app/pages/portfolio/fire/fire-page.html - 94 + 95 apps/client/src/app/pages/portfolio/fire/fire-page.html - 172 + 173 @@ -4879,20 +4951,12 @@ 329 - - Switzerland - Szwajcaria - - apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 58 - - Global Globalny apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 59 + 60 libs/ui/src/lib/i18n.ts @@ -5020,7 +5084,7 @@ Przygotuj Wstępną Wersję libs/ui/src/lib/activities-table/activities-table.component.html - 168 + 167 @@ -5064,7 +5128,7 @@ , apps/client/src/app/pages/portfolio/fire/fire-page.html - 145 + 146 @@ -5099,6 +5163,14 @@ 130 + + {VAR_PLURAL, plural, =1 {Profile} other {Profiles}} + {VAR_PLURAL, plural, =1 {Profile} other {Profiles}} + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 249 + + Loan Loan @@ -5212,7 +5284,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 339 + 337 libs/ui/src/lib/i18n.ts @@ -5244,7 +5316,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 332 + 331 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -5276,7 +5348,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 348 + 347 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -5392,7 +5464,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 449 + 448 @@ -5440,7 +5512,7 @@ Symbol apps/client/src/app/components/admin-jobs/admin-jobs.html - 77 + 68 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -5456,7 +5528,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 319 + 318 libs/ui/src/lib/i18n.ts @@ -5532,7 +5604,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 265 + 263 libs/ui/src/lib/i18n.ts @@ -5728,7 +5800,7 @@ Gdybyś przeszedł na emeryturę dziś, mógłbyś wypłacać apps/client/src/app/pages/portfolio/fire/fire-page.html - 68 + 69 @@ -5808,11 +5880,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 451 + 450 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 465 + 464 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5860,7 +5932,7 @@ Czy na pewno chcesz usunąć saldo tego konta? libs/ui/src/lib/account-balances/account-balances.component.ts - 113 + 127 @@ -5884,7 +5956,7 @@ Test apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 574 + 573 @@ -5938,6 +6010,10 @@ Job Queue Kolejka Zadań + + apps/client/src/app/pages/admin/admin-page.component.ts + 84 + libs/common/src/lib/routes/routes.ts 46 @@ -5972,7 +6048,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 89 + 92 @@ -5988,7 +6064,7 @@ Zamknij pozycję apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 447 + 446 @@ -6028,7 +6104,7 @@ Dotychczasowy tydzień libs/ui/src/lib/assistant/assistant.component.ts - 377 + 376 @@ -6040,7 +6116,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 377 + 376 @@ -6048,7 +6124,7 @@ Od początku miesiąca libs/ui/src/lib/assistant/assistant.component.ts - 381 + 380 @@ -6060,7 +6136,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 381 + 380 @@ -6068,7 +6144,7 @@ Od początku roku libs/ui/src/lib/assistant/assistant.component.ts - 385 + 384 @@ -6116,7 +6192,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 395 + 394 @@ -6128,7 +6204,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 419 + 416 @@ -6144,7 +6220,7 @@ Gromadzenie Danych apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 597 + 596 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6156,7 +6232,7 @@ Find a holding... libs/ui/src/lib/assistant/assistant.component.ts - 472 + 469 @@ -6257,7 +6333,7 @@ Wykonaj Zadanie apps/client/src/app/components/admin-jobs/admin-jobs.html - 229 + 220 @@ -6265,7 +6341,7 @@ Priorytet apps/client/src/app/components/admin-jobs/admin-jobs.html - 105 + 96 @@ -6329,7 +6405,7 @@ Jump to a page... libs/ui/src/lib/assistant/assistant.component.ts - 473 + 470 @@ -6377,7 +6453,7 @@ Uwzględnij w apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 382 + 381 @@ -6404,30 +6480,6 @@ 130 - - Delete Profiles - Usuń Profile - - apps/client/src/app/components/admin-market-data/admin-market-data.html - 242 - - - - Do you really want to delete these profiles? - Czy na pewno chcesz usunąć te profile? - - apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 59 - - - - Oops! Could not delete profiles. - Ups! Nie udało się usunąć profili. - - apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 47 - - Table Tabela @@ -6457,7 +6509,7 @@ Alternatywa apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 83 + 86 @@ -6465,7 +6517,7 @@ Aplikacja apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 84 + 87 @@ -6473,7 +6525,7 @@ Budżetowanie apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 85 + 88 @@ -6533,7 +6585,15 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 86 + 89 + + + + Oops! Could not delete the asset profile. + Oops! Could not delete the asset profile. + + apps/client/src/app/components/admin-market-data/admin-market-data.service.ts + 51 @@ -6541,7 +6601,7 @@ Biuro Rodzinne apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 87 + 90 @@ -6549,7 +6609,7 @@ Inwestor apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 90 + 93 @@ -6561,7 +6621,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 91 + 94 @@ -6573,7 +6633,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 93 + 96 @@ -6581,7 +6641,7 @@ Prywatność apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 94 + 97 @@ -6589,7 +6649,7 @@ Oprogramowanie apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 96 + 99 @@ -6597,7 +6657,7 @@ Narzędzie apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 97 + 100 @@ -6605,7 +6665,7 @@ Doświadczenie Użytkownika apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 98 + 101 @@ -6613,7 +6673,7 @@ Majątek apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 99 + 102 @@ -6621,7 +6681,7 @@ Zarządzanie Majątkiem apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 100 + 103 @@ -6632,6 +6692,14 @@ 474 + + Do you really want to delete these asset profiles? + Do you really want to delete these asset profiles? + + apps/client/src/app/components/admin-market-data/admin-market-data.service.ts + 67 + + Error Błąd @@ -6669,7 +6737,7 @@ , na podstawie całkowitej wartości aktywów wynoszącej apps/client/src/app/pages/portfolio/fire/fire-page.html - 96 + 97 @@ -6689,7 +6757,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 602 + 601 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6741,7 +6809,7 @@ Zamknij apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 604 + 603 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6761,7 +6829,7 @@ apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 124 + 131 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -6769,7 +6837,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 133 + 229 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -6813,7 +6881,7 @@ Przegląd portfela apps/client/src/app/components/admin-jobs/admin-jobs.html - 65 + 56 @@ -6845,7 +6913,7 @@ Próg minimalny apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 52 + 58 @@ -6853,7 +6921,7 @@ Próg maksymalny apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 87 + 93 @@ -6945,7 +7013,7 @@ , przyjmując apps/client/src/app/pages/portfolio/fire/fire-page.html - 174 + 175 @@ -6976,6 +7044,14 @@ 195 + + Delete + Delete + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 244 + + cannot be self-hosted nie może być hostowany samodzielnie @@ -7147,7 +7223,7 @@ Zakres progów apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 9 + 15 @@ -7279,7 +7355,7 @@ Zapisz apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 613 + 612 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7303,7 +7379,7 @@ apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 130 + 139 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -7403,7 +7479,7 @@ Domyślna cena rynkowa apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 487 + 486 @@ -7411,7 +7487,7 @@ Tryb apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 524 + 523 @@ -7419,7 +7495,7 @@ Selektor apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 540 + 539 @@ -7427,7 +7503,7 @@ Nagłówki żądań HTTP apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 500 + 499 @@ -7471,7 +7547,7 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 381 + 380 @@ -7491,11 +7567,11 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 381 + 380 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 394 + 393 @@ -8224,7 +8300,7 @@ Zarządzaj profilem aktywów apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 472 + 471 @@ -8248,7 +8324,7 @@ Średnia cena jednostkowa apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 117 + 123 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html diff --git a/apps/client/src/locales/messages.pt.xlf b/apps/client/src/locales/messages.pt.xlf index 65494b458..eb4492290 100644 --- a/apps/client/src/locales/messages.pt.xlf +++ b/apps/client/src/locales/messages.pt.xlf @@ -6,7 +6,7 @@ O risco de perda em investimentos pode ser substancial. Não é aconselhável investir dinheiro que possa vir a precisar a curto prazo. apps/client/src/app/components/footer/footer.component.html - 182 + 180 @@ -42,12 +42,16 @@ Tipo apps/client/src/app/components/admin-jobs/admin-jobs.html - 57 + 48 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html 28 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 156 + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 15 @@ -58,7 +62,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 187 + 185 @@ -118,7 +122,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 315 + 314 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -190,7 +194,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 322 + 321 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -210,7 +214,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 307 + 305 @@ -250,7 +254,7 @@ libs/ui/src/lib/account-balances/account-balances.component.html - 34 + 39 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -262,11 +266,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 288 + 286 libs/ui/src/lib/activities-table/activities-table.component.html - 324 + 322 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -290,7 +294,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 267 + 278 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -314,7 +318,7 @@ Eliminar apps/client/src/app/components/admin-market-data/admin-market-data.html - 289 + 300 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -338,7 +342,7 @@ libs/ui/src/lib/account-balances/account-balances.component.html - 80 + 85 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -361,12 +365,20 @@ 146 + + Paid + Paid + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts + 117 + + Data Source Fonte de dados apps/client/src/app/components/admin-jobs/admin-jobs.html - 91 + 82 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -390,7 +402,7 @@ Tentativas apps/client/src/app/components/admin-jobs/admin-jobs.html - 129 + 120 @@ -398,7 +410,11 @@ Criado apps/client/src/app/components/admin-jobs/admin-jobs.html - 143 + 134 + + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 140 @@ -406,7 +422,7 @@ Terminado apps/client/src/app/components/admin-jobs/admin-jobs.html - 152 + 143 @@ -414,7 +430,7 @@ Estado apps/client/src/app/components/admin-jobs/admin-jobs.html - 161 + 152 apps/client/src/app/components/admin-settings/admin-settings.component.html @@ -434,7 +450,7 @@ Eliminar Tarefas apps/client/src/app/components/admin-jobs/admin-jobs.html - 202 + 193 @@ -454,11 +470,11 @@ Histórico de Dados de Mercado apps/client/src/app/components/admin-jobs/admin-jobs.html - 63 + 54 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 454 + 453 @@ -466,7 +482,7 @@ Visualizar dados apps/client/src/app/components/admin-jobs/admin-jobs.html - 217 + 208 @@ -474,7 +490,7 @@ Ver Stacktrace apps/client/src/app/components/admin-jobs/admin-jobs.html - 225 + 216 @@ -482,7 +498,7 @@ Apagar Tarefa apps/client/src/app/components/admin-jobs/admin-jobs.html - 233 + 224 @@ -498,7 +514,7 @@ Find an account... libs/ui/src/lib/assistant/assistant.component.ts - 471 + 468 @@ -514,7 +530,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 196 + 194 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -686,7 +702,7 @@ libs/ui/src/lib/account-balances/account-balances.component.html - 93 + 98 @@ -782,7 +798,7 @@ Portefólio apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 143 + 139 apps/client/src/app/components/header/header.component.html @@ -794,7 +810,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 95 + 98 libs/common/src/lib/routes/routes.ts @@ -806,11 +822,11 @@ Referência apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 384 + 383 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 155 + 151 @@ -930,7 +946,7 @@ annual interest rate apps/client/src/app/pages/portfolio/fire/fire-page.html - 185 + 186 @@ -946,7 +962,7 @@ Valor Total apps/client/src/app/components/investment-chart/investment-chart.component.ts - 147 + 143 @@ -962,7 +978,7 @@ Taxa de Poupança apps/client/src/app/components/investment-chart/investment-chart.component.ts - 205 + 201 @@ -1014,15 +1030,15 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 97 + 100 apps/client/src/app/pages/portfolio/fire/fire-page.html - 83 + 84 apps/client/src/app/pages/portfolio/fire/fire-page.html - 161 + 162 apps/client/src/app/pages/pricing/pricing-page.html @@ -1178,7 +1194,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 217 + 215 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -1202,7 +1218,7 @@ País apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 278 + 277 apps/client/src/app/components/admin-users/admin-users.html @@ -1210,7 +1226,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 281 + 280 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -1222,15 +1238,15 @@ Setores apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 284 + 283 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 403 + 402 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 287 + 286 apps/client/src/app/pages/public/public-page.html @@ -1242,15 +1258,15 @@ Países apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 294 + 293 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 414 + 413 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 299 + 298 @@ -1274,7 +1290,7 @@ Dados do Relatório com Problema apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 457 + 456 @@ -1314,7 +1330,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 373 + 372 @@ -1326,7 +1342,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 385 + 384 @@ -1338,7 +1354,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 395 + 394 @@ -1350,7 +1366,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 419 + 416 @@ -1370,7 +1386,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 425 + 422 @@ -1546,11 +1562,11 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 80 + 81 apps/client/src/app/pages/portfolio/fire/fire-page.html - 158 + 159 apps/client/src/app/pages/pricing/pricing-page.html @@ -1597,6 +1613,14 @@ 9 + + Coupon + Coupon + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts + 122 + + Language Língua @@ -1622,7 +1646,7 @@ Localidade apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 515 + 514 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -1750,7 +1774,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 383 + 382 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -1980,10 +2004,6 @@ Overview Visão geral - - apps/client/src/app/components/admin-jobs/admin-jobs.html - 7 - apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 114 @@ -2002,7 +2022,7 @@ apps/client/src/app/pages/admin/admin-page.component.ts - 41 + 68 apps/client/src/app/pages/resources/resources-page.component.ts @@ -2022,7 +2042,7 @@ Mercados apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 386 + 385 apps/client/src/app/components/footer/footer.component.html @@ -2098,7 +2118,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 347 + 346 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2194,7 +2214,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 241 + 239 @@ -2202,7 +2222,7 @@ Nota apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 438 + 437 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -2242,7 +2262,7 @@ Os seguintes formatos de ficheiro são suportados: apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 90 + 93 @@ -2250,11 +2270,19 @@ Anterior apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 146 + 149 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 182 + 185 + + + + Price + Price + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 166 @@ -2349,6 +2377,14 @@ 150 + + Trial + Trial + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts + 121 + + Exclude from Analysis Excluir da Análise @@ -2554,7 +2590,7 @@ Sustainable retirement income apps/client/src/app/pages/portfolio/fire/fire-page.html - 41 + 42 @@ -2702,7 +2738,15 @@ Rascunho libs/ui/src/lib/activities-table/activities-table.component.html - 168 + 167 + + + + Subscriptions + Subscriptions + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 131 @@ -2793,6 +2837,14 @@ 130 + + {VAR_PLURAL, plural, =1 {Profile} other {Profiles}} + {VAR_PLURAL, plural, =1 {Profile} other {Profiles}} + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 249 + + Annual Interest Rate Taxa de Juro Anual @@ -2846,7 +2898,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 339 + 337 libs/ui/src/lib/i18n.ts @@ -2870,7 +2922,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 332 + 331 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -2918,7 +2970,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 449 + 448 @@ -2926,7 +2978,7 @@ Símbolo apps/client/src/app/components/admin-jobs/admin-jobs.html - 77 + 68 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -2942,7 +2994,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 319 + 318 libs/ui/src/lib/i18n.ts @@ -3122,7 +3174,7 @@ If you retire today, you would be able to withdraw apps/client/src/app/pages/portfolio/fire/fire-page.html - 68 + 69 @@ -3166,11 +3218,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 451 + 450 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 465 + 464 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -3198,7 +3250,7 @@ Mapeamento de Símbolo apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 392 + 391 @@ -3214,7 +3266,7 @@ Dados de Mercado apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 405 + 404 libs/common/src/lib/routes/routes.ts @@ -3246,11 +3298,11 @@ Importar apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 155 + 158 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 190 + 193 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.html @@ -3318,7 +3370,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 348 + 347 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -3350,7 +3402,7 @@ Carregar Dividendos apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 68 + 71 @@ -3361,6 +3413,14 @@ 93 + + Expires + Expires + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 194 + + Import Dividends Importar Dividendos @@ -3914,7 +3974,7 @@ By apps/client/src/app/pages/portfolio/fire/fire-page.html - 139 + 140 @@ -3946,11 +4006,11 @@ Url apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 425 + 424 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 556 + 555 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -3974,7 +4034,7 @@ Deseja mesmo eliminar esta plataforma? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 115 + 114 @@ -4078,7 +4138,7 @@ Selecionar Dividendos apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 113 + 116 @@ -4086,7 +4146,7 @@ Selecionar Atividades apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 115 + 118 @@ -4329,12 +4389,20 @@ 32 + + Total + Total + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 150 + + Scraper Configuration Configuração do raspador apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 477 + 476 @@ -4706,7 +4774,7 @@ this is projected to increase to apps/client/src/app/pages/portfolio/fire/fire-page.html - 147 + 148 @@ -4758,7 +4826,7 @@ Job ID apps/client/src/app/components/admin-jobs/admin-jobs.html - 43 + 34 @@ -5089,6 +5157,14 @@ 217 + + Oops! Could not delete the asset profiles. + Oops! Could not delete the asset profiles. + + apps/client/src/app/components/admin-market-data/admin-market-data.service.ts + 52 + + What our users are saying Qual é o nosso users are saying @@ -5427,20 +5503,12 @@ 325 - - Switzerland - Suíça - - apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 58 - - Global Global apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 59 + 60 libs/ui/src/lib/i18n.ts @@ -5488,7 +5556,7 @@ and a safe withdrawal rate (SWR) of apps/client/src/app/pages/portfolio/fire/fire-page.html - 108 + 109 @@ -5504,7 +5572,7 @@ Selecione ou solte um arquivo aqui apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 84 + 87 @@ -5540,7 +5608,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 265 + 263 libs/ui/src/lib/i18n.ts @@ -5568,7 +5636,7 @@ Você realmente deseja excluir esta tag? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 117 + 116 @@ -5668,7 +5736,7 @@ Perfil de ativos apps/client/src/app/components/admin-jobs/admin-jobs.html - 61 + 52 @@ -5678,6 +5746,10 @@ apps/client/src/app/components/admin-market-data/admin-market-data.service.ts 28 + + apps/client/src/app/components/admin-market-data/admin-market-data.service.ts + 66 + Search @@ -5716,7 +5788,7 @@ , apps/client/src/app/pages/portfolio/fire/fire-page.html - 145 + 146 @@ -5732,11 +5804,11 @@ per month apps/client/src/app/pages/portfolio/fire/fire-page.html - 94 + 95 apps/client/src/app/pages/portfolio/fire/fire-page.html - 172 + 173 @@ -5860,7 +5932,7 @@ Você realmente deseja excluir o saldo desta conta? libs/ui/src/lib/account-balances/account-balances.component.ts - 113 + 127 @@ -5884,7 +5956,7 @@ Teste apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 574 + 573 @@ -5938,6 +6010,10 @@ Job Queue Fila de trabalhos + + apps/client/src/app/pages/admin/admin-page.component.ts + 84 + libs/common/src/lib/routes/routes.ts 46 @@ -5972,7 +6048,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 89 + 92 @@ -5988,7 +6064,7 @@ Close Holding apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 447 + 446 @@ -6028,7 +6104,7 @@ Semana até agora libs/ui/src/lib/assistant/assistant.component.ts - 377 + 376 @@ -6040,7 +6116,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 377 + 376 @@ -6048,7 +6124,7 @@ Do mês até a data libs/ui/src/lib/assistant/assistant.component.ts - 381 + 380 @@ -6060,7 +6136,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 381 + 380 @@ -6068,7 +6144,7 @@ No acumulado do ano libs/ui/src/lib/assistant/assistant.component.ts - 385 + 384 @@ -6116,7 +6192,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 395 + 394 @@ -6128,7 +6204,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 419 + 416 @@ -6144,7 +6220,7 @@ Coleta de dados apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 597 + 596 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6156,7 +6232,7 @@ Find a holding... libs/ui/src/lib/assistant/assistant.component.ts - 472 + 469 @@ -6257,7 +6333,7 @@ Executar trabalho apps/client/src/app/components/admin-jobs/admin-jobs.html - 229 + 220 @@ -6265,7 +6341,7 @@ Prioridade apps/client/src/app/components/admin-jobs/admin-jobs.html - 105 + 96 @@ -6329,7 +6405,7 @@ Jump to a page... libs/ui/src/lib/assistant/assistant.component.ts - 473 + 470 @@ -6377,7 +6453,7 @@ Include in apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 382 + 381 @@ -6404,30 +6480,6 @@ 130 - - Delete Profiles - Excluir perfis - - apps/client/src/app/components/admin-market-data/admin-market-data.html - 242 - - - - Do you really want to delete these profiles? - Você realmente deseja excluir esses perfis? - - apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 59 - - - - Oops! Could not delete profiles. - Ops! Não foi possível excluir perfis. - - apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 47 - - Table o índice @@ -6457,7 +6509,7 @@ Alternativo apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 83 + 86 @@ -6465,7 +6517,7 @@ Aplicativo apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 84 + 87 @@ -6473,7 +6525,7 @@ Orçamento apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 85 + 88 @@ -6533,7 +6585,15 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 86 + 89 + + + + Oops! Could not delete the asset profile. + Oops! Could not delete the asset profile. + + apps/client/src/app/components/admin-market-data/admin-market-data.service.ts + 51 @@ -6541,7 +6601,7 @@ Escritório Familiar apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 87 + 90 @@ -6549,7 +6609,7 @@ Investidor apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 90 + 93 @@ -6561,7 +6621,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 91 + 94 @@ -6573,7 +6633,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 93 + 96 @@ -6581,7 +6641,7 @@ Privacidade apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 94 + 97 @@ -6589,7 +6649,7 @@ Programas apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 96 + 99 @@ -6597,7 +6657,7 @@ Ferramenta apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 97 + 100 @@ -6605,7 +6665,7 @@ Experiência do usuário apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 98 + 101 @@ -6613,7 +6673,7 @@ Fortuna apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 99 + 102 @@ -6621,7 +6681,7 @@ Gestão de patrimônio apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 100 + 103 @@ -6632,6 +6692,14 @@ 474 + + Do you really want to delete these asset profiles? + Do you really want to delete these asset profiles? + + apps/client/src/app/components/admin-market-data/admin-market-data.service.ts + 67 + + Error Erro @@ -6669,7 +6737,7 @@ , based on your total assets of apps/client/src/app/pages/portfolio/fire/fire-page.html - 96 + 97 @@ -6689,7 +6757,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 602 + 601 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6741,7 +6809,7 @@ Fechar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 604 + 603 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6761,7 +6829,7 @@ apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 124 + 131 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -6769,7 +6837,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 133 + 229 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -6813,7 +6881,7 @@ Visão geral do portfólio apps/client/src/app/components/admin-jobs/admin-jobs.html - 65 + 56 @@ -6845,7 +6913,7 @@ Limite mínimo apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 52 + 58 @@ -6853,7 +6921,7 @@ Limite máximo apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 87 + 93 @@ -6945,7 +7013,7 @@ , assuming a apps/client/src/app/pages/portfolio/fire/fire-page.html - 174 + 175 @@ -6976,6 +7044,14 @@ 195 + + Delete + Delete + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 244 + + cannot be self-hosted não pode ser auto-hospedado @@ -7147,7 +7223,7 @@ Faixa limite apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 9 + 15 @@ -7279,7 +7355,7 @@ Guardar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 613 + 612 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7303,7 +7379,7 @@ apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 130 + 139 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -7403,7 +7479,7 @@ Preço de mercado padrão apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 487 + 486 @@ -7411,7 +7487,7 @@ Mode apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 524 + 523 @@ -7419,7 +7495,7 @@ Selector apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 540 + 539 @@ -7427,7 +7503,7 @@ HTTP Request Headers apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 500 + 499 @@ -7471,7 +7547,7 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 381 + 380 @@ -7491,11 +7567,11 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 381 + 380 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 394 + 393 @@ -8224,7 +8300,7 @@ Gerenciar perfil de ativos apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 472 + 471 @@ -8248,7 +8324,7 @@ Preço médio unitário apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 117 + 123 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html diff --git a/apps/client/src/locales/messages.tr.xlf b/apps/client/src/locales/messages.tr.xlf index 5935a0e0e..6b8c8d662 100644 --- a/apps/client/src/locales/messages.tr.xlf +++ b/apps/client/src/locales/messages.tr.xlf @@ -187,7 +187,7 @@ Alım satımda kayıp riski büyük boyutta olabilir. Kısa vadede ihtiyaç duyabileceğiniz parayla yatırım yapmak tavsiye edilmez. apps/client/src/app/components/footer/footer.component.html - 182 + 180 @@ -223,12 +223,16 @@ Tip apps/client/src/app/components/admin-jobs/admin-jobs.html - 57 + 48 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html 28 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 156 + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 15 @@ -239,7 +243,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 187 + 185 @@ -315,7 +319,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 315 + 314 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -387,7 +391,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 322 + 321 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -407,7 +411,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 307 + 305 @@ -431,7 +435,7 @@ libs/ui/src/lib/account-balances/account-balances.component.html - 34 + 39 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -443,11 +447,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 288 + 286 libs/ui/src/lib/activities-table/activities-table.component.html - 324 + 322 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -471,7 +475,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 267 + 278 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -495,7 +499,7 @@ Sil apps/client/src/app/components/admin-market-data/admin-market-data.html - 289 + 300 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -519,7 +523,7 @@ libs/ui/src/lib/account-balances/account-balances.component.html - 80 + 85 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -542,12 +546,20 @@ 146 + + Paid + Paid + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts + 117 + + Data Source Veri Kaynağı apps/client/src/app/components/admin-jobs/admin-jobs.html - 91 + 82 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -571,7 +583,7 @@ Deneme apps/client/src/app/components/admin-jobs/admin-jobs.html - 129 + 120 @@ -579,7 +591,11 @@ Oluşturuldu apps/client/src/app/components/admin-jobs/admin-jobs.html - 143 + 134 + + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 140 @@ -587,7 +603,7 @@ Tamamlandı apps/client/src/app/components/admin-jobs/admin-jobs.html - 152 + 143 @@ -595,7 +611,7 @@ Durum apps/client/src/app/components/admin-jobs/admin-jobs.html - 161 + 152 apps/client/src/app/components/admin-settings/admin-settings.component.html @@ -615,7 +631,7 @@ İşleri Sil apps/client/src/app/components/admin-jobs/admin-jobs.html - 202 + 193 @@ -635,11 +651,11 @@ Tarihsel Piyasa Verisi apps/client/src/app/components/admin-jobs/admin-jobs.html - 63 + 54 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 454 + 453 @@ -647,7 +663,7 @@ Veri Gör apps/client/src/app/components/admin-jobs/admin-jobs.html - 217 + 208 @@ -655,7 +671,7 @@ Hata İzini Görüntüle apps/client/src/app/components/admin-jobs/admin-jobs.html - 225 + 216 @@ -663,7 +679,7 @@ İşleri Sil apps/client/src/app/components/admin-jobs/admin-jobs.html - 233 + 224 @@ -679,7 +695,7 @@ Find an account... libs/ui/src/lib/assistant/assistant.component.ts - 471 + 468 @@ -695,7 +711,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 196 + 194 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -847,7 +863,7 @@ Ülke apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 278 + 277 apps/client/src/app/components/admin-users/admin-users.html @@ -855,7 +871,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 281 + 280 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -867,15 +883,15 @@ Sektörler apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 284 + 283 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 403 + 402 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 287 + 286 apps/client/src/app/pages/public/public-page.html @@ -887,15 +903,15 @@ Ülkeler apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 294 + 293 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 414 + 413 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 299 + 298 @@ -903,7 +919,7 @@ Sembol Eşleştirme apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 392 + 391 @@ -922,12 +938,20 @@ 32 + + Total + Total + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 150 + + Scraper Configuration Veri Toplayıcı Yapılandırması apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 477 + 476 @@ -935,7 +959,7 @@ Not apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 438 + 437 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1087,7 +1111,7 @@ libs/ui/src/lib/account-balances/account-balances.component.html - 93 + 98 @@ -1119,11 +1143,11 @@ Url apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 425 + 424 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 556 + 555 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -1147,7 +1171,7 @@ Bu platformu silmeyi gerçekten istiyor musunuz? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 115 + 114 @@ -1163,7 +1187,7 @@ By apps/client/src/app/pages/portfolio/fire/fire-page.html - 139 + 140 @@ -1299,7 +1323,7 @@ Portföy apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 143 + 139 apps/client/src/app/components/header/header.component.html @@ -1311,7 +1335,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 95 + 98 libs/common/src/lib/routes/routes.ts @@ -1323,11 +1347,11 @@ Karşılaştırma Ölçütü apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 384 + 383 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 155 + 151 @@ -1547,7 +1571,7 @@ Toplam Tutar apps/client/src/app/components/investment-chart/investment-chart.component.ts - 147 + 143 @@ -1563,7 +1587,7 @@ Tasarruf Oranı apps/client/src/app/components/investment-chart/investment-chart.component.ts - 205 + 201 @@ -1615,15 +1639,15 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 97 + 100 apps/client/src/app/pages/portfolio/fire/fire-page.html - 83 + 84 apps/client/src/app/pages/portfolio/fire/fire-page.html - 161 + 162 apps/client/src/app/pages/pricing/pricing-page.html @@ -1799,7 +1823,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 217 + 215 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -1823,7 +1847,7 @@ Rapor Veri Sorunu apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 457 + 456 @@ -2003,7 +2027,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 373 + 372 @@ -2015,7 +2039,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 385 + 384 @@ -2027,7 +2051,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 395 + 394 @@ -2039,7 +2063,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 419 + 416 @@ -2059,7 +2083,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 425 + 422 @@ -2239,7 +2263,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 383 + 382 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2303,7 +2327,7 @@ Piyasa Verileri apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 405 + 404 libs/common/src/lib/routes/routes.ts @@ -2341,10 +2365,6 @@ Overview Özet - - apps/client/src/app/components/admin-jobs/admin-jobs.html - 7 - apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 114 @@ -2363,7 +2383,7 @@ apps/client/src/app/pages/admin/admin-page.component.ts - 41 + 68 apps/client/src/app/pages/resources/resources-page.component.ts @@ -2759,7 +2779,7 @@ Piyasalar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 386 + 385 apps/client/src/app/components/footer/footer.component.html @@ -3034,6 +3054,14 @@ 217 + + Oops! Could not delete the asset profiles. + Oops! Could not delete the asset profiles. + + apps/client/src/app/components/admin-market-data/admin-market-data.service.ts + 52 + + What our users are saying Kullanıcılarımızın görüşleri @@ -3155,7 +3183,7 @@ Job ID apps/client/src/app/components/admin-jobs/admin-jobs.html - 43 + 34 @@ -3207,7 +3235,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 347 + 346 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -3287,7 +3315,15 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 241 + 239 + + + + Subscriptions + Subscriptions + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 131 @@ -3387,7 +3423,7 @@ Temettü Yükle apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 68 + 71 @@ -3395,7 +3431,7 @@ Aşağıdaki dosya formatları desteklenmektedir: apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 90 + 93 @@ -3403,7 +3439,7 @@ Temettü Seç apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 113 + 116 @@ -3411,7 +3447,7 @@ İşlemleri Seç apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 115 + 118 @@ -3419,11 +3455,19 @@ Geri apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 146 + 149 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 182 + 185 + + + + Price + Price + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 166 @@ -3431,11 +3475,11 @@ İçe Aktar apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 155 + 158 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 190 + 193 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.html @@ -3534,6 +3578,14 @@ 150 + + Trial + Trial + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts + 121 + + Exclude from Analysis Exclude from Analysis @@ -3671,7 +3723,7 @@ annual interest rate apps/client/src/app/pages/portfolio/fire/fire-page.html - 185 + 186 @@ -3698,6 +3750,14 @@ 93 + + Expires + Expires + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 194 + + Top Üst @@ -4011,7 +4071,7 @@ Sustainable retirement income apps/client/src/app/pages/portfolio/fire/fire-page.html - 41 + 42 @@ -4331,20 +4391,12 @@ 329 - - Switzerland - İsviçre - - apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 58 - - Global Küresel apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 59 + 60 libs/ui/src/lib/i18n.ts @@ -4484,11 +4536,11 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 80 + 81 apps/client/src/app/pages/portfolio/fire/fire-page.html - 158 + 159 apps/client/src/app/pages/pricing/pricing-page.html @@ -4543,6 +4595,14 @@ 9 + + Coupon + Coupon + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts + 122 + + Language Dil @@ -4556,7 +4616,7 @@ Yerel Ayarlar apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 515 + 514 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -4608,7 +4668,7 @@ this is projected to increase to apps/client/src/app/pages/portfolio/fire/fire-page.html - 147 + 148 @@ -4728,7 +4788,7 @@ Taslak libs/ui/src/lib/activities-table/activities-table.component.html - 168 + 167 @@ -4779,6 +4839,14 @@ 130 + + {VAR_PLURAL, plural, =1 {Profile} other {Profiles}} + {VAR_PLURAL, plural, =1 {Profile} other {Profiles}} + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 249 + + Loan Loan @@ -4892,7 +4960,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 339 + 337 libs/ui/src/lib/i18n.ts @@ -4924,7 +4992,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 332 + 331 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -4956,7 +5024,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 348 + 347 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -5072,7 +5140,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 449 + 448 @@ -5120,7 +5188,7 @@ Sembol apps/client/src/app/components/admin-jobs/admin-jobs.html - 77 + 68 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -5136,7 +5204,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 319 + 318 libs/ui/src/lib/i18n.ts @@ -5392,7 +5460,7 @@ If you retire today, you would be able to withdraw apps/client/src/app/pages/portfolio/fire/fire-page.html - 68 + 69 @@ -5436,11 +5504,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 451 + 450 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 465 + 464 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5496,7 +5564,7 @@ and a safe withdrawal rate (SWR) of apps/client/src/app/pages/portfolio/fire/fire-page.html - 108 + 109 @@ -5536,7 +5604,7 @@ Dosya seçin ya da sürükleyin apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 84 + 87 @@ -5548,7 +5616,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 265 + 263 libs/ui/src/lib/i18n.ts @@ -5568,7 +5636,7 @@ Bu etiketi silmeyi gerçekten istiyor musunuz? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 117 + 116 @@ -5668,7 +5736,7 @@ Varlık Profili apps/client/src/app/components/admin-jobs/admin-jobs.html - 61 + 52 @@ -5678,6 +5746,10 @@ apps/client/src/app/components/admin-market-data/admin-market-data.service.ts 28 + + apps/client/src/app/components/admin-market-data/admin-market-data.service.ts + 66 + Search @@ -5716,7 +5788,7 @@ , apps/client/src/app/pages/portfolio/fire/fire-page.html - 145 + 146 @@ -5732,11 +5804,11 @@ per month apps/client/src/app/pages/portfolio/fire/fire-page.html - 94 + 95 apps/client/src/app/pages/portfolio/fire/fire-page.html - 172 + 173 @@ -5860,7 +5932,7 @@ Bu nakit bakiyesini silmeyi gerçekten istiyor musunuz? libs/ui/src/lib/account-balances/account-balances.component.ts - 113 + 127 @@ -5884,7 +5956,7 @@ Test apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 574 + 573 @@ -5938,6 +6010,10 @@ Job Queue İş Kuyruğu + + apps/client/src/app/pages/admin/admin-page.component.ts + 84 + libs/common/src/lib/routes/routes.ts 46 @@ -5972,7 +6048,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 89 + 92 @@ -5988,7 +6064,7 @@ Close Holding apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 447 + 446 @@ -6028,7 +6104,7 @@ Hafta içi libs/ui/src/lib/assistant/assistant.component.ts - 377 + 376 @@ -6040,7 +6116,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 377 + 376 @@ -6048,7 +6124,7 @@ Ay içi libs/ui/src/lib/assistant/assistant.component.ts - 381 + 380 @@ -6060,7 +6136,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 381 + 380 @@ -6068,7 +6144,7 @@ Yıl içi libs/ui/src/lib/assistant/assistant.component.ts - 385 + 384 @@ -6116,7 +6192,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 395 + 394 @@ -6128,7 +6204,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 419 + 416 @@ -6144,7 +6220,7 @@ Veri Toplama apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 597 + 596 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6156,7 +6232,7 @@ Find a holding... libs/ui/src/lib/assistant/assistant.component.ts - 472 + 469 @@ -6257,7 +6333,7 @@ İşlemi Yürüt apps/client/src/app/components/admin-jobs/admin-jobs.html - 229 + 220 @@ -6265,7 +6341,7 @@ Öncelik apps/client/src/app/components/admin-jobs/admin-jobs.html - 105 + 96 @@ -6329,7 +6405,7 @@ Jump to a page... libs/ui/src/lib/assistant/assistant.component.ts - 473 + 470 @@ -6377,7 +6453,7 @@ Include in apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 382 + 381 @@ -6404,30 +6480,6 @@ 130 - - Delete Profiles - Profilleri Sil - - apps/client/src/app/components/admin-market-data/admin-market-data.html - 242 - - - - Do you really want to delete these profiles? - Bu profilleri silmek istediğinize emin misiniz? - - apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 59 - - - - Oops! Could not delete profiles. - Oops! Profilleri silmek mümkün olmadı. - - apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 47 - - Table Tablo @@ -6457,7 +6509,7 @@ Alternatif apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 83 + 86 @@ -6465,7 +6517,7 @@ App apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 84 + 87 @@ -6473,7 +6525,7 @@ Bütçeleme apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 85 + 88 @@ -6533,7 +6585,15 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 86 + 89 + + + + Oops! Could not delete the asset profile. + Oops! Could not delete the asset profile. + + apps/client/src/app/components/admin-market-data/admin-market-data.service.ts + 51 @@ -6541,7 +6601,7 @@ Aile Ofisi apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 87 + 90 @@ -6549,7 +6609,7 @@ Yatırımcı apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 90 + 93 @@ -6561,7 +6621,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 91 + 94 @@ -6573,7 +6633,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 93 + 96 @@ -6581,7 +6641,7 @@ Gizlilik apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 94 + 97 @@ -6589,7 +6649,7 @@ Yazılım apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 96 + 99 @@ -6597,7 +6657,7 @@ Araç apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 97 + 100 @@ -6605,7 +6665,7 @@ Kullanıcı Deneyimi apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 98 + 101 @@ -6613,7 +6673,7 @@ Zenginlik apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 99 + 102 @@ -6621,7 +6681,7 @@ Zenginlik Yönetimi apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 100 + 103 @@ -6632,6 +6692,14 @@ 474 + + Do you really want to delete these asset profiles? + Do you really want to delete these asset profiles? + + apps/client/src/app/components/admin-market-data/admin-market-data.service.ts + 67 + + Error Hata @@ -6669,7 +6737,7 @@ , based on your total assets of apps/client/src/app/pages/portfolio/fire/fire-page.html - 96 + 97 @@ -6689,7 +6757,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 602 + 601 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6741,7 +6809,7 @@ Kapat apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 604 + 603 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6761,7 +6829,7 @@ apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 124 + 131 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -6769,7 +6837,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 133 + 229 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -6813,7 +6881,7 @@ Portföy Anlık Görüntüsü apps/client/src/app/components/admin-jobs/admin-jobs.html - 65 + 56 @@ -6845,7 +6913,7 @@ Eşik Min apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 52 + 58 @@ -6853,7 +6921,7 @@ Eşik Max apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 87 + 93 @@ -6945,7 +7013,7 @@ , assuming a apps/client/src/app/pages/portfolio/fire/fire-page.html - 174 + 175 @@ -6976,6 +7044,14 @@ 195 + + Delete + Delete + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 244 + + cannot be self-hosted kendi sunucunuzda barındırılmaz @@ -7147,7 +7223,7 @@ Eşik aralığı apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 9 + 15 @@ -7279,7 +7355,7 @@ Kaydet apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 613 + 612 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7303,7 +7379,7 @@ apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 130 + 139 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -7403,7 +7479,7 @@ Varsayılan Piyasa Fiyatı apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 487 + 486 @@ -7411,7 +7487,7 @@ Mod apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 524 + 523 @@ -7419,7 +7495,7 @@ Seçici apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 540 + 539 @@ -7427,7 +7503,7 @@ HTTP İstek Başlıkları apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 500 + 499 @@ -7471,7 +7547,7 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 381 + 380 @@ -7491,11 +7567,11 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 381 + 380 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 394 + 393 @@ -8224,7 +8300,7 @@ Manage Asset Profile apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 472 + 471 @@ -8248,7 +8324,7 @@ Average Unit Price apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 117 + 123 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html diff --git a/apps/client/src/locales/messages.uk.xlf b/apps/client/src/locales/messages.uk.xlf index 551a3e9dc..7ea4854c1 100644 --- a/apps/client/src/locales/messages.uk.xlf +++ b/apps/client/src/locales/messages.uk.xlf @@ -102,7 +102,7 @@ Ризик втрат у торгівлі може бути суттєвим. Не рекомендується інвестувати гроші, які можуть знадобитися в короткостроковій перспективі. apps/client/src/app/components/footer/footer.component.html - 182 + 180 @@ -443,7 +443,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 315 + 314 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -515,7 +515,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 322 + 321 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -535,7 +535,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 307 + 305 @@ -559,7 +559,7 @@ libs/ui/src/lib/account-balances/account-balances.component.html - 34 + 39 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -571,11 +571,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 288 + 286 libs/ui/src/lib/activities-table/activities-table.component.html - 324 + 322 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -599,7 +599,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 267 + 278 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -623,7 +623,7 @@ Видалити apps/client/src/app/components/admin-market-data/admin-market-data.html - 289 + 300 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -647,7 +647,7 @@ libs/ui/src/lib/account-balances/account-balances.component.html - 80 + 85 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -670,17 +670,29 @@ 146 + + Paid + Paid + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts + 117 + + Type Тип apps/client/src/app/components/admin-jobs/admin-jobs.html - 57 + 48 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html 28 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 156 + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 15 @@ -691,7 +703,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 187 + 185 @@ -699,7 +711,7 @@ Профіль активу apps/client/src/app/components/admin-jobs/admin-jobs.html - 61 + 52 @@ -707,11 +719,11 @@ Історичні ринкові дані apps/client/src/app/components/admin-jobs/admin-jobs.html - 63 + 54 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 454 + 453 @@ -719,7 +731,7 @@ Знімок портфеля apps/client/src/app/components/admin-jobs/admin-jobs.html - 65 + 56 @@ -727,7 +739,7 @@ Джерело даних apps/client/src/app/components/admin-jobs/admin-jobs.html - 91 + 82 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -751,7 +763,7 @@ Пріоритет apps/client/src/app/components/admin-jobs/admin-jobs.html - 105 + 96 @@ -759,7 +771,7 @@ Спроби apps/client/src/app/components/admin-jobs/admin-jobs.html - 129 + 120 @@ -767,7 +779,11 @@ Створено apps/client/src/app/components/admin-jobs/admin-jobs.html - 143 + 134 + + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 140 @@ -775,7 +791,7 @@ Завершено apps/client/src/app/components/admin-jobs/admin-jobs.html - 152 + 143 @@ -783,7 +799,7 @@ Статус apps/client/src/app/components/admin-jobs/admin-jobs.html - 161 + 152 apps/client/src/app/components/admin-settings/admin-settings.component.html @@ -803,7 +819,7 @@ Видалити завдання apps/client/src/app/components/admin-jobs/admin-jobs.html - 202 + 193 @@ -811,7 +827,7 @@ Переглянути дані apps/client/src/app/components/admin-jobs/admin-jobs.html - 217 + 208 @@ -819,7 +835,7 @@ Переглянути трасування apps/client/src/app/components/admin-jobs/admin-jobs.html - 225 + 216 @@ -827,7 +843,7 @@ Виконати завдання apps/client/src/app/components/admin-jobs/admin-jobs.html - 229 + 220 @@ -835,7 +851,7 @@ Видалити завдання apps/client/src/app/components/admin-jobs/admin-jobs.html - 233 + 224 @@ -966,14 +982,6 @@ 66 - - Delete Profiles - Видалити профілі - - apps/client/src/app/components/admin-market-data/admin-market-data.html - 242 - - Do you really want to delete this asset profile? Ви дійсно хочете видалити цей профіль активу? @@ -981,21 +989,17 @@ apps/client/src/app/components/admin-market-data/admin-market-data.service.ts 28 - - - Oops! Could not delete profiles. - Упс! Не вдалося видалити профілі. apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 47 + 66 - - Do you really want to delete these profiles? - Ви дійсно хочете видалити ці профілі? + + Do you really want to delete these asset profiles? + Do you really want to delete these asset profiles? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 59 + 67 @@ -1039,7 +1043,7 @@ Країна apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 278 + 277 apps/client/src/app/components/admin-users/admin-users.html @@ -1047,7 +1051,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 281 + 280 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -1059,15 +1063,15 @@ Сектори apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 284 + 283 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 403 + 402 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 287 + 286 apps/client/src/app/pages/public/public-page.html @@ -1079,15 +1083,15 @@ Країни apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 294 + 293 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 414 + 413 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 299 + 298 @@ -1095,7 +1099,7 @@ Зіставлення символів apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 392 + 391 @@ -1114,12 +1118,20 @@ 32 + + Total + Total + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 150 + + Scraper Configuration Конфігурація скребка apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 477 + 476 @@ -1127,7 +1139,7 @@ Тест apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 574 + 573 @@ -1135,11 +1147,11 @@ URL apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 425 + 424 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 556 + 555 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -1163,7 +1175,7 @@ Примітка apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 438 + 437 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1319,7 +1331,7 @@ Збір даних apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 597 + 596 apps/client/src/app/components/admin-overview/admin-overview.html @@ -1331,7 +1343,7 @@ Find a holding... libs/ui/src/lib/assistant/assistant.component.ts - 472 + 469 @@ -1367,7 +1379,7 @@ libs/ui/src/lib/account-balances/account-balances.component.html - 93 + 98 @@ -1399,7 +1411,7 @@ Ви дійсно хочете видалити цю платформу? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 115 + 114 @@ -1415,7 +1427,7 @@ До apps/client/src/app/pages/portfolio/fire/fire-page.html - 139 + 140 @@ -1555,15 +1567,15 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 97 + 100 apps/client/src/app/pages/portfolio/fire/fire-page.html - 83 + 84 apps/client/src/app/pages/portfolio/fire/fire-page.html - 161 + 162 apps/client/src/app/pages/pricing/pricing-page.html @@ -1615,7 +1627,7 @@ Ви дійсно хочете видалити цей тег? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 117 + 116 @@ -1723,7 +1735,7 @@ Портфель apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 143 + 139 apps/client/src/app/components/header/header.component.html @@ -1735,7 +1747,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 95 + 98 libs/common/src/lib/routes/routes.ts @@ -1747,11 +1759,11 @@ Порівняльний показник apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 384 + 383 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 155 + 151 @@ -1887,7 +1899,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 217 + 215 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -1927,7 +1939,7 @@ Повідомити про збій даних apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 457 + 456 @@ -2119,7 +2131,7 @@ Загальна сума apps/client/src/app/components/investment-chart/investment-chart.component.ts - 147 + 143 @@ -2135,7 +2147,7 @@ Ставка заощаджень apps/client/src/app/components/investment-chart/investment-chart.component.ts - 205 + 201 @@ -2319,7 +2331,7 @@ Зберегти apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 613 + 612 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -2343,7 +2355,7 @@ apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 130 + 139 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -2375,7 +2387,7 @@ Діапазон порогу apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 9 + 15 @@ -2383,7 +2395,7 @@ Мінімальний поріг apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 52 + 58 @@ -2391,7 +2403,7 @@ Максимальний поріг apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 87 + 93 @@ -2591,7 +2603,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 373 + 372 @@ -2603,7 +2615,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 385 + 384 @@ -2615,7 +2627,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 395 + 394 @@ -2627,7 +2639,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 419 + 416 @@ -2647,7 +2659,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 425 + 422 @@ -2831,11 +2843,11 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 80 + 81 apps/client/src/app/pages/portfolio/fire/fire-page.html - 158 + 159 apps/client/src/app/pages/pricing/pricing-page.html @@ -2883,7 +2895,7 @@ Jump to a page... libs/ui/src/lib/assistant/assistant.component.ts - 473 + 470 @@ -2899,7 +2911,7 @@ Include in apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 382 + 381 @@ -2942,6 +2954,14 @@ 9 + + Coupon + Coupon + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts + 122 + + Language Мова @@ -2963,7 +2983,7 @@ Локалізація apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 515 + 514 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -3027,7 +3047,7 @@ this is projected to increase to apps/client/src/app/pages/portfolio/fire/fire-page.html - 147 + 148 @@ -3263,7 +3283,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 383 + 382 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -3357,6 +3377,10 @@ Job Queue Черга завдань + + apps/client/src/app/pages/admin/admin-page.component.ts + 84 + libs/common/src/lib/routes/routes.ts 46 @@ -3367,7 +3391,7 @@ Ринкові дані apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 405 + 404 libs/common/src/lib/routes/routes.ts @@ -3405,10 +3429,6 @@ Overview Огляд - - apps/client/src/app/components/admin-jobs/admin-jobs.html - 7 - apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 114 @@ -3427,7 +3447,7 @@ apps/client/src/app/pages/admin/admin-page.component.ts - 41 + 68 apps/client/src/app/pages/resources/resources-page.component.ts @@ -3844,7 +3864,7 @@ Ринки apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 386 + 385 apps/client/src/app/components/footer/footer.component.html @@ -4151,6 +4171,14 @@ 217 + + Oops! Could not delete the asset profiles. + Oops! Could not delete the asset profiles. + + apps/client/src/app/components/admin-market-data/admin-market-data.service.ts + 52 + + What our users are saying Що говорять користувачі @@ -4300,7 +4328,7 @@ and a safe withdrawal rate (SWR) of apps/client/src/app/pages/portfolio/fire/fire-page.html - 108 + 109 @@ -4324,7 +4352,7 @@ Job ID apps/client/src/app/components/admin-jobs/admin-jobs.html - 43 + 34 @@ -4384,7 +4412,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 347 + 346 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -4476,7 +4504,7 @@ Find an account... libs/ui/src/lib/assistant/assistant.component.ts - 471 + 468 @@ -4492,7 +4520,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 196 + 194 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -4508,7 +4536,15 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 241 + 239 + + + + Subscriptions + Subscriptions + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 131 @@ -4608,7 +4644,7 @@ Завантажити дивіденди apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 68 + 71 @@ -4616,7 +4652,7 @@ Виберіть або перетягніть файл сюди apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 84 + 87 @@ -4624,7 +4660,7 @@ Підтримуються наступні формати файлів: apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 90 + 93 @@ -4632,7 +4668,7 @@ Вибрати дивіденди apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 113 + 116 @@ -4640,7 +4676,7 @@ Виберіть активності apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 115 + 118 @@ -4648,11 +4684,19 @@ Назад apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 146 + 149 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 182 + 185 + + + + Price + Price + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 166 @@ -4660,11 +4704,11 @@ Імпорт apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 155 + 158 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 190 + 193 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.html @@ -4763,6 +4807,14 @@ 150 + + Trial + Trial + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts + 121 + + Exclude from Analysis Exclude from Analysis @@ -4932,7 +4984,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 89 + 92 @@ -4959,12 +5011,20 @@ 93 + + Expires + Expires + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 194 + + Close Holding Close Holding apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 447 + 446 @@ -5100,7 +5160,7 @@ , based on your total assets of apps/client/src/app/pages/portfolio/fire/fire-page.html - 96 + 97 @@ -5372,7 +5432,7 @@ Sustainable retirement income apps/client/src/app/pages/portfolio/fire/fire-page.html - 41 + 42 @@ -5530,20 +5590,12 @@ 42 - - Switzerland - Швейцарія - - apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 58 - - Global Глобальний apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 59 + 60 libs/ui/src/lib/i18n.ts @@ -5555,7 +5607,7 @@ Альтернатива apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 83 + 86 @@ -5563,7 +5615,7 @@ Додаток apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 84 + 87 @@ -5571,7 +5623,7 @@ Бюджетування apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 85 + 88 @@ -5631,7 +5683,15 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 86 + 89 + + + + Oops! Could not delete the asset profile. + Oops! Could not delete the asset profile. + + apps/client/src/app/components/admin-market-data/admin-market-data.service.ts + 51 @@ -5639,7 +5699,7 @@ Сімейний офіс apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 87 + 90 @@ -5647,7 +5707,7 @@ Інвестор apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 90 + 93 @@ -5659,7 +5719,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 91 + 94 @@ -5671,7 +5731,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 93 + 96 @@ -5679,7 +5739,7 @@ Конфіденційність apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 94 + 97 @@ -5687,7 +5747,7 @@ Програмне забезпечення apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 96 + 99 @@ -5695,7 +5755,7 @@ Інструмент apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 97 + 100 @@ -5703,7 +5763,7 @@ Користувацький досвід apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 98 + 101 @@ -5711,7 +5771,7 @@ Багатство apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 99 + 102 @@ -5719,7 +5779,7 @@ Управління багатством apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 100 + 103 @@ -5767,11 +5827,11 @@ per month apps/client/src/app/pages/portfolio/fire/fire-page.html - 94 + 95 apps/client/src/app/pages/portfolio/fire/fire-page.html - 172 + 173 @@ -5931,7 +5991,7 @@ , assuming a apps/client/src/app/pages/portfolio/fire/fire-page.html - 174 + 175 @@ -5962,6 +6022,14 @@ 195 + + Delete + Delete + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 244 + + cannot be self-hosted не може бути self-hosted @@ -6187,7 +6255,7 @@ Ви дійсно хочете видалити цей рахунок? libs/ui/src/lib/account-balances/account-balances.component.ts - 113 + 127 @@ -6227,7 +6295,7 @@ Чернетка libs/ui/src/lib/activities-table/activities-table.component.html - 168 + 167 @@ -6267,7 +6335,7 @@ Тиждень до дати libs/ui/src/lib/assistant/assistant.component.ts - 377 + 376 @@ -6279,7 +6347,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 377 + 376 @@ -6287,7 +6355,7 @@ Місяць до дати libs/ui/src/lib/assistant/assistant.component.ts - 381 + 380 @@ -6299,7 +6367,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 381 + 380 @@ -6307,7 +6375,7 @@ Рік до дати libs/ui/src/lib/assistant/assistant.component.ts - 385 + 384 @@ -6327,7 +6395,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 395 + 394 @@ -6339,7 +6407,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 419 + 416 @@ -6399,7 +6467,7 @@ , apps/client/src/app/pages/portfolio/fire/fire-page.html - 145 + 146 @@ -6434,6 +6502,14 @@ 130 + + {VAR_PLURAL, plural, =1 {Profile} other {Profiles}} + {VAR_PLURAL, plural, =1 {Profile} other {Profiles}} + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 249 + + Loan Позика @@ -6487,7 +6563,7 @@ annual interest rate apps/client/src/app/pages/portfolio/fire/fire-page.html - 185 + 186 @@ -6587,7 +6663,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 339 + 337 libs/ui/src/lib/i18n.ts @@ -6619,7 +6695,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 332 + 331 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -6651,7 +6727,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 348 + 347 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -6683,7 +6759,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 602 + 601 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6743,7 +6819,7 @@ Закрити apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 604 + 603 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6763,7 +6839,7 @@ apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 124 + 131 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -6771,7 +6847,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 133 + 229 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -6879,7 +6955,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 449 + 448 @@ -6935,7 +7011,7 @@ Символ apps/client/src/app/components/admin-jobs/admin-jobs.html - 77 + 68 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -6951,7 +7027,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 319 + 318 libs/ui/src/lib/i18n.ts @@ -7043,7 +7119,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 265 + 263 libs/ui/src/lib/i18n.ts @@ -7247,7 +7323,7 @@ If you retire today, you would be able to withdraw apps/client/src/app/pages/portfolio/fire/fire-page.html - 68 + 69 @@ -7339,11 +7415,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 451 + 450 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 465 + 464 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -7403,7 +7479,7 @@ Default Market Price apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 487 + 486 @@ -7411,7 +7487,7 @@ Режим apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 524 + 523 @@ -7419,7 +7495,7 @@ Селектор apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 540 + 539 @@ -7427,7 +7503,7 @@ HTTP Request Headers apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 500 + 499 @@ -7471,7 +7547,7 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 381 + 380 @@ -7491,11 +7567,11 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 381 + 380 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 394 + 393 @@ -8224,7 +8300,7 @@ Manage Asset Profile apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 472 + 471 @@ -8248,7 +8324,7 @@ Average Unit Price apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 117 + 123 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html diff --git a/apps/client/src/locales/messages.xlf b/apps/client/src/locales/messages.xlf index c929a6765..54f8a7bfc 100644 --- a/apps/client/src/locales/messages.xlf +++ b/apps/client/src/locales/messages.xlf @@ -203,7 +203,7 @@ The risk of loss in trading can be substantial. It is not advisable to invest money you may need in the short term. apps/client/src/app/components/footer/footer.component.html - 182 + 180 @@ -235,12 +235,16 @@ Type apps/client/src/app/components/admin-jobs/admin-jobs.html - 57 + 48 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html 28 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 156 + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 15 @@ -251,7 +255,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 187 + 185 @@ -338,7 +342,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 315 + 314 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -408,7 +412,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 322 + 321 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -428,7 +432,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 307 + 305 @@ -451,7 +455,7 @@ libs/ui/src/lib/account-balances/account-balances.component.html - 34 + 39 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -463,11 +467,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 288 + 286 libs/ui/src/lib/activities-table/activities-table.component.html - 324 + 322 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -490,7 +494,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 267 + 278 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -513,7 +517,7 @@ Delete apps/client/src/app/components/admin-market-data/admin-market-data.html - 289 + 300 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -537,7 +541,7 @@ libs/ui/src/lib/account-balances/account-balances.component.html - 80 + 85 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -559,29 +563,36 @@ 146 + + Paid + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts + 117 + + Asset Profile apps/client/src/app/components/admin-jobs/admin-jobs.html - 61 + 52 Historical Market Data apps/client/src/app/components/admin-jobs/admin-jobs.html - 63 + 54 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 454 + 453 Data Source apps/client/src/app/components/admin-jobs/admin-jobs.html - 91 + 82 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -604,28 +615,32 @@ Attempts apps/client/src/app/components/admin-jobs/admin-jobs.html - 129 + 120 Created apps/client/src/app/components/admin-jobs/admin-jobs.html - 143 + 134 + + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 140 Finished apps/client/src/app/components/admin-jobs/admin-jobs.html - 152 + 143 Status apps/client/src/app/components/admin-jobs/admin-jobs.html - 161 + 152 apps/client/src/app/components/admin-settings/admin-settings.component.html @@ -643,28 +658,28 @@ Delete Jobs apps/client/src/app/components/admin-jobs/admin-jobs.html - 202 + 193 View Data apps/client/src/app/components/admin-jobs/admin-jobs.html - 217 + 208 View Stacktrace apps/client/src/app/components/admin-jobs/admin-jobs.html - 225 + 216 Delete Job apps/client/src/app/components/admin-jobs/admin-jobs.html - 233 + 224 @@ -678,7 +693,7 @@ Find an account... libs/ui/src/lib/assistant/assistant.component.ts - 471 + 468 @@ -693,7 +708,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 196 + 194 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -746,6 +761,10 @@ apps/client/src/app/components/admin-market-data/admin-market-data.service.ts 28 + + apps/client/src/app/components/admin-market-data/admin-market-data.service.ts + 66 + Filter by... @@ -862,11 +881,11 @@ Import apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 155 + 158 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 190 + 193 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.html @@ -888,7 +907,7 @@ Country apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 278 + 277 apps/client/src/app/components/admin-users/admin-users.html @@ -896,7 +915,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 281 + 280 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -907,15 +926,15 @@ Sectors apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 284 + 283 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 403 + 402 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 287 + 286 apps/client/src/app/pages/public/public-page.html @@ -926,22 +945,22 @@ Countries apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 294 + 293 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 414 + 413 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 299 + 298 Symbol Mapping apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 392 + 391 @@ -958,18 +977,25 @@ 32 + + Total + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 150 + + Scraper Configuration apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 477 + 476 Note apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 438 + 437 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1126,7 +1152,7 @@ libs/ui/src/lib/account-balances/account-balances.component.html - 93 + 98 @@ -1154,11 +1180,11 @@ Url apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 425 + 424 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 556 + 555 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -1180,7 +1206,7 @@ Do you really want to delete this platform? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 115 + 114 @@ -1194,7 +1220,7 @@ By apps/client/src/app/pages/portfolio/fire/fire-page.html - 139 + 140 @@ -1251,7 +1277,7 @@ Do you really want to delete this tag? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 117 + 116 @@ -1358,7 +1384,7 @@ Portfolio apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 143 + 139 apps/client/src/app/components/header/header.component.html @@ -1370,7 +1396,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 95 + 98 libs/common/src/lib/routes/routes.ts @@ -1381,11 +1407,11 @@ Benchmark apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 384 + 383 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 155 + 151 @@ -1584,7 +1610,7 @@ Total Amount apps/client/src/app/components/investment-chart/investment-chart.component.ts - 147 + 143 @@ -1598,7 +1624,7 @@ Savings Rate apps/client/src/app/components/investment-chart/investment-chart.component.ts - 205 + 201 @@ -1648,15 +1674,15 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 97 + 100 apps/client/src/app/pages/portfolio/fire/fire-page.html - 83 + 84 apps/client/src/app/pages/portfolio/fire/fire-page.html - 161 + 162 apps/client/src/app/pages/pricing/pricing-page.html @@ -1825,7 +1851,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 217 + 215 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -1836,7 +1862,7 @@ Report Data Glitch apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 457 + 456 @@ -2004,7 +2030,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 373 + 372 @@ -2015,7 +2041,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 385 + 384 @@ -2026,7 +2052,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 395 + 394 @@ -2037,7 +2063,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 419 + 416 @@ -2055,7 +2081,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 425 + 422 @@ -2122,11 +2148,11 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 80 + 81 apps/client/src/app/pages/portfolio/fire/fire-page.html - 158 + 159 apps/client/src/app/pages/pricing/pricing-page.html @@ -2193,6 +2219,13 @@ 9 + + Coupon + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts + 122 + + Language @@ -2204,7 +2237,7 @@ Locale apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 515 + 514 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -2261,7 +2294,7 @@ this is projected to increase to apps/client/src/app/pages/portfolio/fire/fire-page.html - 147 + 148 @@ -2478,7 +2511,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 383 + 382 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2565,7 +2598,7 @@ Market Data apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 405 + 404 libs/common/src/lib/routes/routes.ts @@ -2600,10 +2633,6 @@ Overview - - apps/client/src/app/components/admin-jobs/admin-jobs.html - 7 - apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 114 @@ -2622,7 +2651,7 @@ apps/client/src/app/pages/admin/admin-page.component.ts - 41 + 68 apps/client/src/app/pages/resources/resources-page.component.ts @@ -2982,7 +3011,7 @@ Markets apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 386 + 385 apps/client/src/app/components/footer/footer.component.html @@ -3257,6 +3286,13 @@ 217 + + Oops! Could not delete the asset profiles. + + apps/client/src/app/components/admin-market-data/admin-market-data.service.ts + 52 + + What our users are saying @@ -3381,7 +3417,7 @@ and a safe withdrawal rate (SWR) of apps/client/src/app/pages/portfolio/fire/fire-page.html - 108 + 109 @@ -3402,7 +3438,7 @@ Job ID apps/client/src/app/components/admin-jobs/admin-jobs.html - 43 + 34 @@ -3458,7 +3494,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 347 + 346 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -3552,7 +3588,14 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 241 + 239 + + + + Subscriptions + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 131 @@ -3642,46 +3685,53 @@ Load Dividends apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 68 + 71 Choose or drop a file here apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 84 + 87 The following file formats are supported: apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 90 + 93 Select Dividends apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 113 + 116 Select Activities apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 115 + 118 Back apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 146 + 149 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 182 + 185 + + + + Price + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 166 @@ -3766,6 +3816,13 @@ 150 + + Trial + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts + 121 + + Exclude from Analysis @@ -3891,7 +3948,7 @@ annual interest rate apps/client/src/app/pages/portfolio/fire/fire-page.html - 185 + 186 @@ -3915,6 +3972,13 @@ 93 + + Expires + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 194 + + Top @@ -4196,7 +4260,7 @@ Sustainable retirement income apps/client/src/app/pages/portfolio/fire/fire-page.html - 41 + 42 @@ -4318,11 +4382,11 @@ per month apps/client/src/app/pages/portfolio/fire/fire-page.html - 94 + 95 apps/client/src/app/pages/portfolio/fire/fire-page.html - 172 + 173 @@ -4497,18 +4561,11 @@ 329 - - Switzerland - - apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 58 - - Global apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 59 + 60 libs/ui/src/lib/i18n.ts @@ -4603,7 +4660,7 @@ Do you really want to delete this account balance? libs/ui/src/lib/account-balances/account-balances.component.ts - 113 + 127 @@ -4632,7 +4689,7 @@ Draft libs/ui/src/lib/activities-table/activities-table.component.html - 168 + 167 @@ -4685,7 +4742,7 @@ , apps/client/src/app/pages/portfolio/fire/fire-page.html - 145 + 146 @@ -4716,6 +4773,13 @@ 130 + + {VAR_PLURAL, plural, =1 {Profile} other {Profiles}} + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 249 + + Loan @@ -4818,7 +4882,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 339 + 337 libs/ui/src/lib/i18n.ts @@ -4848,7 +4912,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 332 + 331 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -4879,7 +4943,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 348 + 347 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -4984,7 +5048,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 449 + 448 @@ -5019,7 +5083,7 @@ Symbol apps/client/src/app/components/admin-jobs/admin-jobs.html - 77 + 68 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -5035,7 +5099,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 319 + 318 libs/ui/src/lib/i18n.ts @@ -5104,7 +5168,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 265 + 263 libs/ui/src/lib/i18n.ts @@ -5278,7 +5342,7 @@ If you retire today, you would be able to withdraw apps/client/src/app/pages/portfolio/fire/fire-page.html - 68 + 69 @@ -5350,11 +5414,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 451 + 450 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 465 + 464 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5386,7 +5450,7 @@ Test apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 574 + 573 @@ -5427,6 +5491,10 @@ Job Queue + + apps/client/src/app/pages/admin/admin-page.component.ts + 84 + libs/common/src/lib/routes/routes.ts 46 @@ -5450,7 +5518,7 @@ Close Holding apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 447 + 446 @@ -5480,7 +5548,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 89 + 92 @@ -5508,21 +5576,21 @@ Year to date libs/ui/src/lib/assistant/assistant.component.ts - 385 + 384 Week to date libs/ui/src/lib/assistant/assistant.component.ts - 377 + 376 Month to date libs/ui/src/lib/assistant/assistant.component.ts - 381 + 380 @@ -5533,7 +5601,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 381 + 380 @@ -5544,7 +5612,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 377 + 376 @@ -5588,7 +5656,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 395 + 394 @@ -5599,7 +5667,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 419 + 416 @@ -5636,7 +5704,7 @@ Data Gathering apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 597 + 596 apps/client/src/app/components/admin-overview/admin-overview.html @@ -5647,7 +5715,7 @@ Find a holding... libs/ui/src/lib/assistant/assistant.component.ts - 472 + 469 @@ -5714,7 +5782,7 @@ Execute Job apps/client/src/app/components/admin-jobs/admin-jobs.html - 229 + 220 @@ -5728,7 +5796,7 @@ Priority apps/client/src/app/components/admin-jobs/admin-jobs.html - 105 + 96 @@ -5784,7 +5852,7 @@ Jump to a page... libs/ui/src/lib/assistant/assistant.component.ts - 473 + 470 @@ -5819,7 +5887,7 @@ Include in apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 382 + 381 @@ -5836,27 +5904,6 @@ 179 - - Do you really want to delete these profiles? - - apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 59 - - - - Delete Profiles - - apps/client/src/app/components/admin-market-data/admin-market-data.html - 242 - - - - Oops! Could not delete profiles. - - apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 47 - - Benchmarks @@ -5889,7 +5936,7 @@ Wealth apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 99 + 102 @@ -5948,42 +5995,49 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 86 + 89 + + + + Oops! Could not delete the asset profile. + + apps/client/src/app/components/admin-market-data/admin-market-data.service.ts + 51 User Experience apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 98 + 101 App apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 84 + 87 Tool apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 97 + 100 Investor apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 90 + 93 Wealth Management apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 100 + 103 @@ -5997,14 +6051,14 @@ Alternative apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 83 + 86 Family Office apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 87 + 90 @@ -6015,21 +6069,21 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 93 + 96 Software apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 96 + 99 Budgeting apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 85 + 88 @@ -6040,14 +6094,21 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 91 + 94 Privacy apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 94 + 97 + + + + Do you really want to delete these asset profiles? + + apps/client/src/app/components/admin-market-data/admin-market-data.service.ts + 67 @@ -6065,7 +6126,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 602 + 601 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6130,7 +6191,7 @@ , based on your total assets of apps/client/src/app/pages/portfolio/fire/fire-page.html - 96 + 97 @@ -6144,7 +6205,7 @@ Close apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 604 + 603 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6164,7 +6225,7 @@ apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 124 + 131 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -6172,7 +6233,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 133 + 229 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -6212,7 +6273,7 @@ Threshold Max apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 87 + 93 @@ -6233,14 +6294,14 @@ Portfolio Snapshot apps/client/src/app/components/admin-jobs/admin-jobs.html - 65 + 56 Threshold Min apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 52 + 58 @@ -6329,7 +6390,7 @@ , assuming a apps/client/src/app/pages/portfolio/fire/fire-page.html - 174 + 175 @@ -6357,6 +6418,13 @@ 195 + + Delete + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 244 + + cannot be self-hosted @@ -6519,7 +6587,7 @@ Threshold range apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 9 + 15 @@ -6635,7 +6703,7 @@ Save apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 613 + 612 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6659,7 +6727,7 @@ apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 130 + 139 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -6735,21 +6803,21 @@ Mode apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 524 + 523 Default Market Price apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 487 + 486 Selector apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 540 + 539 @@ -6770,7 +6838,7 @@ HTTP Request Headers apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 500 + 499 @@ -6809,7 +6877,7 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 381 + 380 @@ -6828,11 +6896,11 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 381 + 380 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 394 + 393 @@ -7458,7 +7526,7 @@ Manage Asset Profile apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 472 + 471 @@ -7479,7 +7547,7 @@ Average Unit Price apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 117 + 123 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html diff --git a/apps/client/src/locales/messages.zh.xlf b/apps/client/src/locales/messages.zh.xlf index ba44dae95..115b71897 100644 --- a/apps/client/src/locales/messages.zh.xlf +++ b/apps/client/src/locales/messages.zh.xlf @@ -216,7 +216,7 @@ 交易存在巨大亏损风险,因此不应投入您短期内可能急需的资金。 apps/client/src/app/components/footer/footer.component.html - 182 + 180 @@ -252,12 +252,16 @@ 类型 apps/client/src/app/components/admin-jobs/admin-jobs.html - 57 + 48 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html 28 + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 156 + apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.html 15 @@ -268,7 +272,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 187 + 185 @@ -364,7 +368,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 315 + 314 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -436,7 +440,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 322 + 321 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -456,7 +460,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 307 + 305 @@ -480,7 +484,7 @@ libs/ui/src/lib/account-balances/account-balances.component.html - 34 + 39 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -492,11 +496,11 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 288 + 286 libs/ui/src/lib/activities-table/activities-table.component.html - 324 + 322 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -520,7 +524,7 @@ apps/client/src/app/components/admin-market-data/admin-market-data.html - 267 + 278 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -544,7 +548,7 @@ 删除 apps/client/src/app/components/admin-market-data/admin-market-data.html - 289 + 300 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html @@ -568,7 +572,7 @@ libs/ui/src/lib/account-balances/account-balances.component.html - 80 + 85 libs/ui/src/lib/accounts-table/accounts-table.component.html @@ -591,12 +595,20 @@ 146 + + Paid + Paid + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts + 117 + + Asset Profile 资产概况 apps/client/src/app/components/admin-jobs/admin-jobs.html - 61 + 52 @@ -604,11 +616,11 @@ 历史市场数据 apps/client/src/app/components/admin-jobs/admin-jobs.html - 63 + 54 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 454 + 453 @@ -616,7 +628,7 @@ 数据源 apps/client/src/app/components/admin-jobs/admin-jobs.html - 91 + 82 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -640,7 +652,7 @@ 尝试次数 apps/client/src/app/components/admin-jobs/admin-jobs.html - 129 + 120 @@ -648,7 +660,11 @@ 创建 apps/client/src/app/components/admin-jobs/admin-jobs.html - 143 + 134 + + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 140 @@ -656,7 +672,7 @@ 完成 apps/client/src/app/components/admin-jobs/admin-jobs.html - 152 + 143 @@ -664,7 +680,7 @@ 状态 apps/client/src/app/components/admin-jobs/admin-jobs.html - 161 + 152 apps/client/src/app/components/admin-settings/admin-settings.component.html @@ -684,7 +700,7 @@ 删除任务 apps/client/src/app/components/admin-jobs/admin-jobs.html - 202 + 193 @@ -692,7 +708,7 @@ 查看数据 apps/client/src/app/components/admin-jobs/admin-jobs.html - 217 + 208 @@ -700,7 +716,7 @@ 查看堆栈跟踪 apps/client/src/app/components/admin-jobs/admin-jobs.html - 225 + 216 @@ -708,7 +724,7 @@ 删除任务 apps/client/src/app/components/admin-jobs/admin-jobs.html - 233 + 224 @@ -724,7 +740,7 @@ Find an account... libs/ui/src/lib/assistant/assistant.component.ts - 471 + 468 @@ -740,7 +756,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 196 + 194 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor-dialog/historical-market-data-editor-dialog.html @@ -798,6 +814,10 @@ apps/client/src/app/components/admin-market-data/admin-market-data.service.ts 28 + + apps/client/src/app/components/admin-market-data/admin-market-data.service.ts + 66 + Filter by... @@ -904,11 +924,11 @@ 导入 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 155 + 158 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 190 + 193 libs/ui/src/lib/historical-market-data-editor/historical-market-data-editor.component.html @@ -932,7 +952,7 @@ 国家 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 278 + 277 apps/client/src/app/components/admin-users/admin-users.html @@ -940,7 +960,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 281 + 280 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -952,15 +972,15 @@ 行业 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 284 + 283 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 403 + 402 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 287 + 286 apps/client/src/app/pages/public/public-page.html @@ -972,15 +992,15 @@ 国家 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 294 + 293 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 414 + 413 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 299 + 298 @@ -988,7 +1008,7 @@ 代码映射 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 392 + 391 @@ -1007,12 +1027,20 @@ 32 + + Total + Total + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 150 + + Scraper Configuration 刮削配置 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 477 + 476 @@ -1020,7 +1048,7 @@ 笔记 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 438 + 437 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -1196,7 +1224,7 @@ libs/ui/src/lib/account-balances/account-balances.component.html - 93 + 98 @@ -1228,11 +1256,11 @@ 网址 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 425 + 424 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 556 + 555 apps/client/src/app/components/admin-platform/admin-platform.component.html @@ -1256,7 +1284,7 @@ 您真的要删除这个平台吗? apps/client/src/app/components/admin-platform/admin-platform.component.ts - 115 + 114 @@ -1272,7 +1300,7 @@ 预计到 apps/client/src/app/pages/portfolio/fire/fire-page.html - 139 + 140 @@ -1336,7 +1364,7 @@ 您真的要删除此标签吗? apps/client/src/app/components/admin-tag/admin-tag.component.ts - 117 + 116 @@ -1456,7 +1484,7 @@ 投资组合 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 143 + 139 apps/client/src/app/components/header/header.component.html @@ -1468,7 +1496,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 95 + 98 libs/common/src/lib/routes/routes.ts @@ -1480,11 +1508,11 @@ 基准 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 384 + 383 apps/client/src/app/components/benchmark-comparator/benchmark-comparator.component.ts - 155 + 151 @@ -1704,7 +1732,7 @@ 总金额 apps/client/src/app/components/investment-chart/investment-chart.component.ts - 147 + 143 @@ -1720,7 +1748,7 @@ 储蓄率 apps/client/src/app/components/investment-chart/investment-chart.component.ts - 205 + 201 @@ -1772,15 +1800,15 @@ apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 97 + 100 apps/client/src/app/pages/portfolio/fire/fire-page.html - 83 + 84 apps/client/src/app/pages/portfolio/fire/fire-page.html - 161 + 162 apps/client/src/app/pages/pricing/pricing-page.html @@ -1968,7 +1996,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 217 + 215 libs/ui/src/lib/holdings-table/holdings-table.component.html @@ -1980,7 +2008,7 @@ 报告数据故障 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 457 + 456 @@ -2160,7 +2188,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 373 + 372 @@ -2172,7 +2200,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 385 + 384 @@ -2184,7 +2212,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 395 + 394 @@ -2196,7 +2224,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 419 + 416 @@ -2216,7 +2244,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 425 + 422 @@ -2292,11 +2320,11 @@ apps/client/src/app/pages/portfolio/fire/fire-page.html - 80 + 81 apps/client/src/app/pages/portfolio/fire/fire-page.html - 158 + 159 apps/client/src/app/pages/pricing/pricing-page.html @@ -2371,6 +2399,14 @@ 9 + + Coupon + Coupon + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts + 122 + + Language 语言 @@ -2384,7 +2420,7 @@ 语言环境 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 515 + 514 apps/client/src/app/components/user-account-settings/user-account-settings.html @@ -2448,7 +2484,7 @@ 预计将增至 apps/client/src/app/pages/portfolio/fire/fire-page.html - 147 + 148 @@ -2684,7 +2720,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 383 + 382 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -2780,7 +2816,7 @@ 市场数据 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 405 + 404 libs/common/src/lib/routes/routes.ts @@ -2818,10 +2854,6 @@ Overview 概述 - - apps/client/src/app/components/admin-jobs/admin-jobs.html - 7 - apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html 114 @@ -2840,7 +2872,7 @@ apps/client/src/app/pages/admin/admin-page.component.ts - 41 + 68 apps/client/src/app/pages/resources/resources-page.component.ts @@ -3224,7 +3256,7 @@ 市场 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 386 + 385 apps/client/src/app/components/footer/footer.component.html @@ -3531,6 +3563,14 @@ 217 + + Oops! Could not delete the asset profiles. + Oops! Could not delete the asset profiles. + + apps/client/src/app/components/admin-market-data/admin-market-data.service.ts + 52 + + What our users are saying 听听我们的用户怎么说 @@ -3672,7 +3712,7 @@ 和安全取款率 (SWR) 为 apps/client/src/app/pages/portfolio/fire/fire-page.html - 108 + 109 @@ -3696,7 +3736,7 @@ 作业 ID apps/client/src/app/components/admin-jobs/admin-jobs.html - 43 + 34 @@ -3756,7 +3796,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 347 + 346 apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html @@ -3860,7 +3900,15 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 241 + 239 + + + + Subscriptions + Subscriptions + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 131 @@ -3960,7 +4008,7 @@ 加载股息 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 68 + 71 @@ -3968,7 +4016,7 @@ 在此处选择或放置文件 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 84 + 87 @@ -3976,7 +4024,7 @@ 支持以下文件格式: apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 90 + 93 @@ -3984,7 +4032,7 @@ 选择股息 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 113 + 116 @@ -3992,7 +4040,7 @@ 选择活动 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 115 + 118 @@ -4000,11 +4048,19 @@ 后退 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 146 + 149 apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html - 182 + 185 + + + + Price + Price + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 166 @@ -4099,6 +4155,14 @@ 150 + + Trial + Trial + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts + 121 + + Exclude from Analysis 排除在分析之外 @@ -4236,7 +4300,7 @@ 年利率 apps/client/src/app/pages/portfolio/fire/fire-page.html - 185 + 186 @@ -4263,6 +4327,14 @@ 93 + + Expires + Expires + + apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html + 194 + + Top 顶部 @@ -4576,7 +4648,7 @@ 可持续的退休收入 apps/client/src/app/pages/portfolio/fire/fire-page.html - 41 + 42 @@ -4713,11 +4785,11 @@ 每月 apps/client/src/app/pages/portfolio/fire/fire-page.html - 94 + 95 apps/client/src/app/pages/portfolio/fire/fire-page.html - 172 + 173 @@ -4908,20 +4980,12 @@ 329 - - Switzerland - 瑞士 - - apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 58 - - Global 全球的 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 59 + 60 libs/ui/src/lib/i18n.ts @@ -5025,7 +5089,7 @@ 您确实要删除该帐户余额吗? libs/ui/src/lib/account-balances/account-balances.component.ts - 113 + 127 @@ -5057,7 +5121,7 @@ 草稿 libs/ui/src/lib/activities-table/activities-table.component.html - 168 + 167 @@ -5117,7 +5181,7 @@ , apps/client/src/app/pages/portfolio/fire/fire-page.html - 145 + 146 @@ -5152,6 +5216,14 @@ 130 + + {VAR_PLURAL, plural, =1 {Profile} other {Profiles}} + {VAR_PLURAL, plural, =1 {Profile} other {Profiles}} + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 249 + + Loan Loan @@ -5265,7 +5337,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 339 + 337 libs/ui/src/lib/i18n.ts @@ -5297,7 +5369,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 332 + 331 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -5329,7 +5401,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 348 + 347 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html @@ -5445,7 +5517,7 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 449 + 448 @@ -5485,7 +5557,7 @@ 代码 apps/client/src/app/components/admin-jobs/admin-jobs.html - 77 + 68 apps/client/src/app/components/admin-market-data/admin-market-data.html @@ -5501,7 +5573,7 @@ apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 319 + 318 libs/ui/src/lib/i18n.ts @@ -5577,7 +5649,7 @@ libs/ui/src/lib/activities-table/activities-table.component.html - 265 + 263 libs/ui/src/lib/i18n.ts @@ -5773,7 +5845,7 @@ 如果您今天退休,您将能够提取 apps/client/src/app/pages/portfolio/fire/fire-page.html - 68 + 69 @@ -5853,11 +5925,11 @@ libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 451 + 450 libs/ui/src/lib/portfolio-proportion-chart/portfolio-proportion-chart.component.ts - 465 + 464 libs/ui/src/lib/top-holdings/top-holdings.component.html @@ -5893,7 +5965,7 @@ 测试 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 574 + 573 @@ -5939,6 +6011,10 @@ Job Queue 任务队列 + + apps/client/src/app/pages/admin/admin-page.component.ts + 84 + libs/common/src/lib/routes/routes.ts 46 @@ -5965,7 +6041,7 @@ 关闭持仓 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 447 + 446 @@ -5997,7 +6073,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 89 + 92 @@ -6029,7 +6105,7 @@ 今年迄今为止 libs/ui/src/lib/assistant/assistant.component.ts - 385 + 384 @@ -6037,7 +6113,7 @@ 本周至今 libs/ui/src/lib/assistant/assistant.component.ts - 377 + 376 @@ -6045,7 +6121,7 @@ 本月至今 libs/ui/src/lib/assistant/assistant.component.ts - 381 + 380 @@ -6057,7 +6133,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 381 + 380 @@ -6069,7 +6145,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 377 + 376 @@ -6117,7 +6193,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 395 + 394 @@ -6129,7 +6205,7 @@ libs/ui/src/lib/assistant/assistant.component.ts - 419 + 416 @@ -6170,7 +6246,7 @@ 数据收集 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 597 + 596 apps/client/src/app/components/admin-overview/admin-overview.html @@ -6182,7 +6258,7 @@ Find a holding... libs/ui/src/lib/assistant/assistant.component.ts - 472 + 469 @@ -6258,7 +6334,7 @@ 执行作业 apps/client/src/app/components/admin-jobs/admin-jobs.html - 229 + 220 @@ -6266,7 +6342,7 @@ 优先级 apps/client/src/app/components/admin-jobs/admin-jobs.html - 105 + 96 @@ -6330,7 +6406,7 @@ Jump to a page... libs/ui/src/lib/assistant/assistant.component.ts - 473 + 470 @@ -6378,7 +6454,7 @@ 包含在 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 382 + 381 @@ -6405,30 +6481,6 @@ 130 - - Delete Profiles - 删除配置文件 - - apps/client/src/app/components/admin-market-data/admin-market-data.html - 242 - - - - Do you really want to delete these profiles? - 您确定要删除这些配置文件吗? - - apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 59 - - - - Oops! Could not delete profiles. - 哎呀!无法删除配置文件。 - - apps/client/src/app/components/admin-market-data/admin-market-data.service.ts - 47 - - Table 表格 @@ -6458,7 +6510,7 @@ 另类 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 83 + 86 @@ -6466,7 +6518,7 @@ 应用 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 84 + 87 @@ -6474,7 +6526,7 @@ 预算管理 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 85 + 88 @@ -6534,7 +6586,15 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 86 + 89 + + + + Oops! Could not delete the asset profile. + Oops! Could not delete the asset profile. + + apps/client/src/app/components/admin-market-data/admin-market-data.service.ts + 51 @@ -6542,7 +6602,7 @@ 家族办公室 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 87 + 90 @@ -6550,7 +6610,7 @@ 投资者 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 90 + 93 @@ -6562,7 +6622,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 91 + 94 @@ -6574,7 +6634,7 @@ apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 93 + 96 @@ -6582,7 +6642,7 @@ 隐私 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 94 + 97 @@ -6590,7 +6650,7 @@ 软件 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 96 + 99 @@ -6598,7 +6658,7 @@ 工具 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 97 + 100 @@ -6606,7 +6666,7 @@ 用户体验 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 98 + 101 @@ -6614,7 +6674,7 @@ 财富 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 99 + 102 @@ -6622,7 +6682,7 @@ 财富管理 apps/client/src/app/pages/resources/personal-finance-tools/product-page.component.ts - 100 + 103 @@ -6633,6 +6693,14 @@ 474 + + Do you really want to delete these asset profiles? + Do you really want to delete these asset profiles? + + apps/client/src/app/components/admin-market-data/admin-market-data.service.ts + 67 + + Error 错误 @@ -6670,7 +6738,7 @@ 基于您总资产的 apps/client/src/app/pages/portfolio/fire/fire-page.html - 96 + 97 @@ -6690,7 +6758,7 @@ apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 602 + 601 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6742,7 +6810,7 @@ 关闭 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 604 + 603 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -6762,7 +6830,7 @@ apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 124 + 131 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -6770,7 +6838,7 @@ apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html - 133 + 229 apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.html @@ -6814,7 +6882,7 @@ 投资组合快照 apps/client/src/app/components/admin-jobs/admin-jobs.html - 65 + 56 @@ -6846,7 +6914,7 @@ 最小阈值 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 52 + 58 @@ -6854,7 +6922,7 @@ 阈值上限 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 87 + 93 @@ -6946,7 +7014,7 @@ , 假设一个 apps/client/src/app/pages/portfolio/fire/fire-page.html - 174 + 175 @@ -6977,6 +7045,14 @@ 195 + + Delete + Delete + + apps/client/src/app/components/admin-market-data/admin-market-data.html + 244 + + cannot be self-hosted 无法自托管 @@ -7148,7 +7224,7 @@ 阈值范围 apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 9 + 15 @@ -7280,7 +7356,7 @@ 保存 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 613 + 612 apps/client/src/app/components/admin-market-data/create-asset-profile-dialog/create-asset-profile-dialog.html @@ -7304,7 +7380,7 @@ apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html - 130 + 139 apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html @@ -7404,7 +7480,7 @@ 默认市场价格 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 487 + 486 @@ -7412,7 +7488,7 @@ 模式 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 524 + 523 @@ -7420,7 +7496,7 @@ 选择器 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 540 + 539 @@ -7428,7 +7504,7 @@ HTTP 请求标头 apps/client/src/app/components/admin-market-data/asset-profile-dialog/asset-profile-dialog.html - 500 + 499 @@ -7472,7 +7548,7 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 381 + 380 @@ -7492,11 +7568,11 @@ libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 381 + 380 libs/ui/src/lib/treemap-chart/treemap-chart.component.ts - 394 + 393 @@ -8225,7 +8301,7 @@ 管理资产概况 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html - 472 + 471 @@ -8249,7 +8325,7 @@ 平均单位价格 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts - 117 + 123 apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html From 20eb9efaa664254208a076bfdaac04b399cf1300 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 20 Jun 2026 13:48:42 +0200 Subject: [PATCH 73/74] Task/add icon to indicate external links in page tabs component (#7081) * Add icon to indicate external links * Update changelog --- CHANGELOG.md | 1 + libs/ui/src/lib/page-tabs/page-tabs.component.html | 4 ++++ libs/ui/src/lib/page-tabs/page-tabs.component.scss | 9 +++++++++ libs/ui/src/lib/page-tabs/page-tabs.component.ts | 4 ++++ 4 files changed, 18 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d1d66e91c..361499e58 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added +- Added an icon to indicate external links in the page tabs component - Added the Korean (`ko`) language to the footer ### Changed diff --git a/libs/ui/src/lib/page-tabs/page-tabs.component.html b/libs/ui/src/lib/page-tabs/page-tabs.component.html index 051005790..2898bcc79 100644 --- a/libs/ui/src/lib/page-tabs/page-tabs.component.html +++ b/libs/ui/src/lib/page-tabs/page-tabs.component.html @@ -20,6 +20,10 @@ + } @else { Date: Sat, 20 Jun 2026 15:24:10 +0200 Subject: [PATCH 74/74] Task/improve language localization for DE (20260620) (#7082) * Update translations * Update changelog --- CHANGELOG.md | 1 + apps/client/src/locales/messages.de.xlf | 24 ++++++++++++------------ 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 361499e58..d4afa84a9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added the selected asset profile count to the deletion confirmation dialog of the historical market data table in the admin control panel - Improved the sorting to be case-insensitive in the platform management of the admin control panel - Improved the sorting to be case-insensitive in the tag management of the admin control panel +- Improved the language localization for German (`de`) - Upgraded `yahoo-finance2` from version `3.14.2` to `3.15.3` ### Fixed diff --git a/apps/client/src/locales/messages.de.xlf b/apps/client/src/locales/messages.de.xlf index 5de30f80f..3c8ed9e93 100644 --- a/apps/client/src/locales/messages.de.xlf +++ b/apps/client/src/locales/messages.de.xlf @@ -311,7 +311,7 @@ Paid - Paid + Bezahlt apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts 117 @@ -1331,7 +1331,7 @@ Coupon - Coupon + Gutschein apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts 122 @@ -1899,7 +1899,7 @@ Trial - Trial + Testphase apps/client/src/app/components/user-detail-dialog/user-detail-dialog.component.ts 121 @@ -2347,7 +2347,7 @@ Subscriptions - Subscriptions + Abonnements apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html 131 @@ -2443,7 +2443,7 @@ {VAR_PLURAL, plural, =1 {Profile} other {Profiles}} - {VAR_PLURAL, plural, =1 {Profile} other {Profiles}} + {VAR_PLURAL, plural, =1 {Profil} other {Profile}} apps/client/src/app/components/admin-market-data/admin-market-data.html 249 @@ -3227,7 +3227,7 @@ Price - Price + Preis apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html 166 @@ -3431,7 +3431,7 @@ Expires - Expires + Läuft ab apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html 194 @@ -4415,7 +4415,7 @@ Total - Total + Gesamt apps/client/src/app/components/user-detail-dialog/user-detail-dialog.html 150 @@ -5183,7 +5183,7 @@ Oops! Could not delete the asset profiles. - Oops! Could not delete the asset profiles. + Ups! Die Anlageprofile konnten nicht gelöscht werden. apps/client/src/app/components/admin-market-data/admin-market-data.service.ts 52 @@ -6614,7 +6614,7 @@ Oops! Could not delete the asset profile. - Oops! Could not delete the asset profile. + Ups! Das Anlageprofil konnte nicht gelöscht werden. apps/client/src/app/components/admin-market-data/admin-market-data.service.ts 51 @@ -6718,7 +6718,7 @@ Do you really want to delete these asset profiles? - Do you really want to delete these asset profiles? + Möchtest du diese Anlageprofile wirklich löschen? apps/client/src/app/components/admin-market-data/admin-market-data.service.ts 67 @@ -7070,7 +7070,7 @@ Delete - Delete + löschen apps/client/src/app/components/admin-market-data/admin-market-data.html 244