@jjlmoya/utils-finance 1.4.0 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -1
- package/src/category/i18n/de.ts +158 -0
- package/src/category/i18n/id.ts +158 -0
- package/src/category/i18n/it.ts +158 -0
- package/src/category/i18n/ja.ts +158 -0
- package/src/category/i18n/ko.ts +158 -0
- package/src/category/i18n/nl.ts +158 -0
- package/src/category/i18n/pl.ts +158 -0
- package/src/category/i18n/pt.ts +158 -0
- package/src/category/i18n/ru.ts +158 -0
- package/src/category/i18n/sv.ts +158 -0
- package/src/category/i18n/tr.ts +158 -0
- package/src/category/i18n/zh.ts +158 -0
- package/src/category/index.ts +13 -1
- package/src/tests/category_validation.test.ts +73 -0
- package/src/tests/faq_count.test.ts +1 -1
- package/src/tests/i18n_coverage.test.ts +36 -0
- package/src/tests/locale_completeness.test.ts +3 -0
- package/src/tests/slug_language_code_format.test.ts +23 -0
- package/src/tests/slug_uniqueness.test.ts +81 -0
- package/src/tests/title_quality.test.ts +1 -1
- package/src/tool/compoundInterest/i18n/de.ts +208 -0
- package/src/tool/compoundInterest/i18n/id.ts +208 -0
- package/src/tool/compoundInterest/i18n/it.ts +208 -0
- package/src/tool/compoundInterest/i18n/ja.ts +207 -0
- package/src/tool/compoundInterest/i18n/ko.ts +207 -0
- package/src/tool/compoundInterest/i18n/nl.ts +208 -0
- package/src/tool/compoundInterest/i18n/pl.ts +208 -0
- package/src/tool/compoundInterest/i18n/pt.ts +208 -0
- package/src/tool/compoundInterest/i18n/ru.ts +208 -0
- package/src/tool/compoundInterest/i18n/sv.ts +208 -0
- package/src/tool/compoundInterest/i18n/tr.ts +208 -0
- package/src/tool/compoundInterest/i18n/zh.ts +202 -0
- package/src/tool/compoundInterest/index.ts +15 -7
- package/src/tool/courtFeeCalculator/i18n/de.ts +152 -0
- package/src/tool/courtFeeCalculator/i18n/fr.ts +1 -1
- package/src/tool/courtFeeCalculator/i18n/id.ts +152 -0
- package/src/tool/courtFeeCalculator/i18n/it.ts +152 -0
- package/src/tool/courtFeeCalculator/i18n/ja.ts +152 -0
- package/src/tool/courtFeeCalculator/i18n/ko.ts +152 -0
- package/src/tool/courtFeeCalculator/i18n/nl.ts +152 -0
- package/src/tool/courtFeeCalculator/i18n/pl.ts +152 -0
- package/src/tool/courtFeeCalculator/i18n/pt.ts +152 -0
- package/src/tool/courtFeeCalculator/i18n/ru.ts +152 -0
- package/src/tool/courtFeeCalculator/i18n/sv.ts +152 -0
- package/src/tool/courtFeeCalculator/i18n/tr.ts +152 -0
- package/src/tool/courtFeeCalculator/i18n/zh.ts +152 -0
- package/src/tool/courtFeeCalculator/index.ts +16 -8
- package/src/tool/debtSnowball/i18n/de.ts +160 -0
- package/src/tool/debtSnowball/i18n/id.ts +160 -0
- package/src/tool/debtSnowball/i18n/it.ts +160 -0
- package/src/tool/debtSnowball/i18n/ja.ts +157 -0
- package/src/tool/debtSnowball/i18n/ko.ts +160 -0
- package/src/tool/debtSnowball/i18n/nl.ts +160 -0
- package/src/tool/debtSnowball/i18n/pl.ts +160 -0
- package/src/tool/debtSnowball/i18n/pt.ts +160 -0
- package/src/tool/debtSnowball/i18n/ru.ts +160 -0
- package/src/tool/debtSnowball/i18n/sv.ts +160 -0
- package/src/tool/debtSnowball/i18n/tr.ts +160 -0
- package/src/tool/debtSnowball/i18n/zh.ts +160 -0
- package/src/tool/debtSnowball/index.ts +17 -9
- package/src/tool/fireCalculator/i18n/de.ts +261 -0
- package/src/tool/fireCalculator/i18n/id.ts +261 -0
- package/src/tool/fireCalculator/i18n/it.ts +261 -0
- package/src/tool/fireCalculator/i18n/ja.ts +261 -0
- package/src/tool/fireCalculator/i18n/ko.ts +261 -0
- package/src/tool/fireCalculator/i18n/nl.ts +261 -0
- package/src/tool/fireCalculator/i18n/pl.ts +261 -0
- package/src/tool/fireCalculator/i18n/pt.ts +261 -0
- package/src/tool/fireCalculator/i18n/ru.ts +261 -0
- package/src/tool/fireCalculator/i18n/sv.ts +261 -0
- package/src/tool/fireCalculator/i18n/tr.ts +261 -0
- package/src/tool/fireCalculator/i18n/zh.ts +261 -0
- package/src/tool/fireCalculator/index.ts +15 -7
- package/src/tool/ibanBicSwiftConverter/i18n/de.ts +128 -0
- package/src/tool/ibanBicSwiftConverter/i18n/id.ts +128 -0
- package/src/tool/ibanBicSwiftConverter/i18n/it.ts +128 -0
- package/src/tool/ibanBicSwiftConverter/i18n/ja.ts +128 -0
- package/src/tool/ibanBicSwiftConverter/i18n/ko.ts +128 -0
- package/src/tool/ibanBicSwiftConverter/i18n/nl.ts +128 -0
- package/src/tool/ibanBicSwiftConverter/i18n/pl.ts +128 -0
- package/src/tool/ibanBicSwiftConverter/i18n/pt.ts +128 -0
- package/src/tool/ibanBicSwiftConverter/i18n/ru.ts +128 -0
- package/src/tool/ibanBicSwiftConverter/i18n/sv.ts +128 -0
- package/src/tool/ibanBicSwiftConverter/i18n/tr.ts +128 -0
- package/src/tool/ibanBicSwiftConverter/i18n/zh.ts +128 -0
- package/src/tool/ibanBicSwiftConverter/index.ts +15 -7
- package/src/tool/inflation/i18n/de.ts +297 -0
- package/src/tool/inflation/i18n/id.ts +297 -0
- package/src/tool/inflation/i18n/it.ts +297 -0
- package/src/tool/inflation/i18n/ja.ts +297 -0
- package/src/tool/inflation/i18n/ko.ts +297 -0
- package/src/tool/inflation/i18n/nl.ts +297 -0
- package/src/tool/inflation/i18n/pl.ts +297 -0
- package/src/tool/inflation/i18n/pt.ts +297 -0
- package/src/tool/inflation/i18n/ru.ts +297 -0
- package/src/tool/inflation/i18n/sv.ts +297 -0
- package/src/tool/inflation/i18n/tr.ts +297 -0
- package/src/tool/inflation/i18n/zh.ts +297 -0
- package/src/tool/inflation/index.ts +17 -9
- package/src/tool/lateInterest/i18n/de.ts +224 -0
- package/src/tool/lateInterest/i18n/id.ts +224 -0
- package/src/tool/lateInterest/i18n/it.ts +224 -0
- package/src/tool/lateInterest/i18n/ja.ts +224 -0
- package/src/tool/lateInterest/i18n/ko.ts +224 -0
- package/src/tool/lateInterest/i18n/nl.ts +224 -0
- package/src/tool/lateInterest/i18n/pl.ts +224 -0
- package/src/tool/lateInterest/i18n/pt.ts +224 -0
- package/src/tool/lateInterest/i18n/ru.ts +224 -0
- package/src/tool/lateInterest/i18n/sv.ts +224 -0
- package/src/tool/lateInterest/i18n/tr.ts +224 -0
- package/src/tool/lateInterest/i18n/zh.ts +224 -0
- package/src/tool/lateInterest/index.ts +17 -9
- package/src/tool/legalInterestRate/i18n/de.ts +143 -0
- package/src/tool/legalInterestRate/i18n/id.ts +143 -0
- package/src/tool/legalInterestRate/i18n/it.ts +143 -0
- package/src/tool/legalInterestRate/i18n/ja.ts +143 -0
- package/src/tool/legalInterestRate/i18n/ko.ts +143 -0
- package/src/tool/legalInterestRate/i18n/nl.ts +143 -0
- package/src/tool/legalInterestRate/i18n/pl.ts +143 -0
- package/src/tool/legalInterestRate/i18n/pt.ts +143 -0
- package/src/tool/legalInterestRate/i18n/ru.ts +143 -0
- package/src/tool/legalInterestRate/i18n/sv.ts +143 -0
- package/src/tool/legalInterestRate/i18n/tr.ts +143 -0
- package/src/tool/legalInterestRate/i18n/zh.ts +143 -0
- package/src/tool/legalInterestRate/index.ts +17 -9
- package/src/tool/lotteryOptimizer/i18n/de.ts +177 -0
- package/src/tool/lotteryOptimizer/i18n/id.ts +177 -0
- package/src/tool/lotteryOptimizer/i18n/it.ts +177 -0
- package/src/tool/lotteryOptimizer/i18n/ja.ts +177 -0
- package/src/tool/lotteryOptimizer/i18n/ko.ts +177 -0
- package/src/tool/lotteryOptimizer/i18n/nl.ts +177 -0
- package/src/tool/lotteryOptimizer/i18n/pl.ts +177 -0
- package/src/tool/lotteryOptimizer/i18n/pt.ts +177 -0
- package/src/tool/lotteryOptimizer/i18n/ru.ts +177 -0
- package/src/tool/lotteryOptimizer/i18n/sv.ts +177 -0
- package/src/tool/lotteryOptimizer/i18n/tr.ts +177 -0
- package/src/tool/lotteryOptimizer/i18n/zh.ts +177 -0
- package/src/tool/lotteryOptimizer/index.ts +17 -9
- package/src/tool/mortgage/i18n/de.ts +223 -0
- package/src/tool/mortgage/i18n/id.ts +219 -0
- package/src/tool/mortgage/i18n/it.ts +223 -0
- package/src/tool/mortgage/i18n/ja.ts +219 -0
- package/src/tool/mortgage/i18n/ko.ts +219 -0
- package/src/tool/mortgage/i18n/nl.ts +219 -0
- package/src/tool/mortgage/i18n/pl.ts +219 -0
- package/src/tool/mortgage/i18n/pt.ts +219 -0
- package/src/tool/mortgage/i18n/ru.ts +219 -0
- package/src/tool/mortgage/i18n/sv.ts +219 -0
- package/src/tool/mortgage/i18n/tr.ts +219 -0
- package/src/tool/mortgage/i18n/zh.ts +219 -0
- package/src/tool/mortgage/index.ts +15 -7
- package/src/tool/percentageCalculator/i18n/de.ts +229 -0
- package/src/tool/percentageCalculator/i18n/id.ts +229 -0
- package/src/tool/percentageCalculator/i18n/it.ts +229 -0
- package/src/tool/percentageCalculator/i18n/ja.ts +229 -0
- package/src/tool/percentageCalculator/i18n/ko.ts +229 -0
- package/src/tool/percentageCalculator/i18n/nl.ts +229 -0
- package/src/tool/percentageCalculator/i18n/pl.ts +229 -0
- package/src/tool/percentageCalculator/i18n/pt.ts +229 -0
- package/src/tool/percentageCalculator/i18n/ru.ts +229 -0
- package/src/tool/percentageCalculator/i18n/sv.ts +229 -0
- package/src/tool/percentageCalculator/i18n/tr.ts +229 -0
- package/src/tool/percentageCalculator/i18n/zh.ts +229 -0
- package/src/tool/percentageCalculator/index.ts +15 -7
- package/src/tool/rentIncreaseCalculator/i18n/de.ts +136 -0
- package/src/tool/rentIncreaseCalculator/i18n/id.ts +136 -0
- package/src/tool/rentIncreaseCalculator/i18n/it.ts +136 -0
- package/src/tool/rentIncreaseCalculator/i18n/ja.ts +136 -0
- package/src/tool/rentIncreaseCalculator/i18n/ko.ts +136 -0
- package/src/tool/rentIncreaseCalculator/i18n/nl.ts +136 -0
- package/src/tool/rentIncreaseCalculator/i18n/pl.ts +136 -0
- package/src/tool/rentIncreaseCalculator/i18n/pt.ts +136 -0
- package/src/tool/rentIncreaseCalculator/i18n/ru.ts +136 -0
- package/src/tool/rentIncreaseCalculator/i18n/sv.ts +136 -0
- package/src/tool/rentIncreaseCalculator/i18n/tr.ts +136 -0
- package/src/tool/rentIncreaseCalculator/i18n/zh.ts +136 -0
- package/src/tool/rentIncreaseCalculator/index.ts +17 -9
- package/src/types.ts +1 -1
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { DebtSnowballUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const slug = 'snobollsmetoden-skuld-kalkylator';
|
|
6
|
+
const title = 'Kalkylator Snöbollsmetoden: Plan för Skuldbetalning 2026';
|
|
7
|
+
const description = 'Beräkna ditt datum för ekonomisk frihet med Dave Ramseys snöbollsmetod. Organisera dina skulder och visualisera din månatliga betalningsplan.';
|
|
8
|
+
|
|
9
|
+
const faqData = [
|
|
10
|
+
{
|
|
11
|
+
question: 'Vad är snöbollsmetoden?',
|
|
12
|
+
answer: 'Det är en strategi för skuldbetalning som går ut på att betala av skulder i ordning efter minsta till största saldo, oavsett ränta. Den fokuserar på den psykologiska vinsten i att snabbt eliminera små konton.',
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
question: 'Varför inte sortera efter ränta (Lavinmetoden)?',
|
|
16
|
+
answer: 'Matematiskt sparar det mer pengar att betala av den högsta räntan först. Men många ger upp för att de inte ser omedelbara resultat. Snöbollen prioriterar motivation.',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
question: 'Bör jag ha sparkapital innan jag startar planen?',
|
|
20
|
+
answer: 'Det rekommenderas att ha en "Initial nödfond" (ca 1 000 €) innan man attackerar skulderna. Detta förhindrar att man behöver använda kreditkortet igen vid oförutsedda händelser.',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
question: 'Vilka skulder ska jag inkludera i kalkylatorn?',
|
|
24
|
+
answer: 'Alla konsumtionsskulder: kreditkort, privatlån, billån, förfallna räkningar. Bolånet brukar lämnas till en senare fas på grund av sin stora volym.',
|
|
25
|
+
},
|
|
26
|
+
];
|
|
27
|
+
|
|
28
|
+
const howToData = [
|
|
29
|
+
{
|
|
30
|
+
name: 'Lista dina skulder',
|
|
31
|
+
text: 'Skriv ner alla dina skulder med aktuellt kvarvarande saldo och den månatliga minimibetalningen.',
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
name: 'Definiera din extrabudget',
|
|
35
|
+
text: 'Beräkna hur mycket extra pengar du kan avsätta varje månad utöver minimibetalningarna.',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: 'Sortera och prioritera',
|
|
39
|
+
text: 'Kalkylatorn sorterar automatiskt från minsta till största saldo. Betala minimum på alla utom den minsta.',
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
name: 'Utför kaskaden',
|
|
43
|
+
text: 'När du har betalat av den minsta skulden, ta alla pengar du använde till den och lägg till på nästa skuld i listan.',
|
|
44
|
+
},
|
|
45
|
+
];
|
|
46
|
+
|
|
47
|
+
const bibliographyData = [
|
|
48
|
+
{
|
|
49
|
+
name: 'Investopedia — Debt Snowball vs. Debt Avalanche',
|
|
50
|
+
url: 'https://www.investopedia.com/',
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
name: 'Harvard Business Review — Research on Debt Payoff Strategies',
|
|
54
|
+
url: 'https://hbr.org/',
|
|
55
|
+
},
|
|
56
|
+
];
|
|
57
|
+
|
|
58
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
59
|
+
'@context': 'https://schema.org',
|
|
60
|
+
'@type': 'FAQPage',
|
|
61
|
+
mainEntity: faqData.map((item) => ({
|
|
62
|
+
'@type': 'Question',
|
|
63
|
+
name: item.question,
|
|
64
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
65
|
+
})),
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
const howToSchema: WithContext<HowTo> = {
|
|
69
|
+
'@context': 'https://schema.org',
|
|
70
|
+
'@type': 'HowTo',
|
|
71
|
+
name: title,
|
|
72
|
+
description,
|
|
73
|
+
step: howToData.map((step, i) => ({
|
|
74
|
+
'@type': 'HowToStep',
|
|
75
|
+
position: i + 1,
|
|
76
|
+
name: step.name,
|
|
77
|
+
text: step.text,
|
|
78
|
+
})),
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
82
|
+
'@context': 'https://schema.org',
|
|
83
|
+
'@type': 'SoftwareApplication',
|
|
84
|
+
name: title,
|
|
85
|
+
description,
|
|
86
|
+
applicationCategory: 'FinanceApplication',
|
|
87
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
export const content: ToolLocaleContent<DebtSnowballUI> = {
|
|
91
|
+
slug,
|
|
92
|
+
title,
|
|
93
|
+
description,
|
|
94
|
+
faqTitle: 'Vanliga frågor',
|
|
95
|
+
faq: faqData,
|
|
96
|
+
bibliographyTitle: 'Referenser och källor',
|
|
97
|
+
bibliography: bibliographyData,
|
|
98
|
+
howTo: howToData,
|
|
99
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
100
|
+
seo: [
|
|
101
|
+
{
|
|
102
|
+
type: 'title',
|
|
103
|
+
text: 'Kalkylator Skulder Snöbollsmetoden: Guide 2026',
|
|
104
|
+
level: 2,
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
type: 'paragraph',
|
|
108
|
+
html: 'Att leva med skulder är tungt. <strong>Snöbollsmetoden</strong> har visat sig vara en av de mest effektiva strategierna för att återfå ekonomisk frihet.',
|
|
109
|
+
},
|
|
110
|
+
],
|
|
111
|
+
ui: {
|
|
112
|
+
labelTitle: 'Total frihet',
|
|
113
|
+
labelDescription: 'Börja din väg mot ekonomisk frihet med den psykologiskt mest effektiva metoden.',
|
|
114
|
+
labelExtraBudget: 'MÅNATLIG EXTRABUDGET',
|
|
115
|
+
labelExtraBudgetHelp: 'Extra pengar utöver minimibetalningarna.',
|
|
116
|
+
labelSnowballMethod: 'SNÖBOLL',
|
|
117
|
+
labelAvalancheMethod: 'LAVIN',
|
|
118
|
+
labelAddNewDebt: 'LÄGG TILL NY SKULD',
|
|
119
|
+
labelDebtName: 'Namn',
|
|
120
|
+
labelDebtNamePlaceholder: 'T.ex: Visa',
|
|
121
|
+
labelDebtBalance: 'HUR MYCKET DU ÄR SKYLDIG',
|
|
122
|
+
labelDebtBalancePlaceholder: '0',
|
|
123
|
+
labelMinPayment: 'MINIMIBETALNING',
|
|
124
|
+
labelInterestRate: 'RÄNTESATS',
|
|
125
|
+
labelInterestHelp: 'ÅRLIG',
|
|
126
|
+
labelAddButton: 'LÄGG TILL I PLANEN',
|
|
127
|
+
labelClearData: 'Rensa inställningar',
|
|
128
|
+
labelClearDataConfirm: 'Tömma planen?',
|
|
129
|
+
labelDeleteDebt: 'Ta bort',
|
|
130
|
+
labelDebtInventory: 'Skuldinventering',
|
|
131
|
+
labelFreedomDate: 'DATUM FÖR EKONOMISK FRIHET',
|
|
132
|
+
labelActiveMethod: 'METOD',
|
|
133
|
+
labelMonthsRemaining: 'ÅTERSTÅENDE MÅNADER',
|
|
134
|
+
labelTotalInterest: 'TOTAL RÄNTA',
|
|
135
|
+
labelTotalPaid: 'SLUTLIG TOTALBETALNING',
|
|
136
|
+
labelInterestSaved: 'SPARAD RÄNTA',
|
|
137
|
+
labelYourStrategy: 'Din strategi steg för steg',
|
|
138
|
+
labelStrategyHelp: 'Varje steg visar din totala betalning.',
|
|
139
|
+
labelPriority: 'HÖGSTA PRIORITET',
|
|
140
|
+
labelStep: 'STEG',
|
|
141
|
+
labelAfterPaying: 'EFTER ATT HA BETALAT FÖREGÅENDE',
|
|
142
|
+
labelMonthlyPayment: 'Månatlig betalning',
|
|
143
|
+
labelDetailedAmortization: 'Detaljerad Amortering',
|
|
144
|
+
labelExportCSV: 'Exportera .CSV',
|
|
145
|
+
labelDate: 'Datum',
|
|
146
|
+
labelStartingBalance: 'Ingående balans',
|
|
147
|
+
labelInterest: 'Ränta',
|
|
148
|
+
labelAmortization: 'Amorterat',
|
|
149
|
+
labelTotalMonth: 'Total månad',
|
|
150
|
+
labelRemaining: 'Återstående',
|
|
151
|
+
labelFree: 'FRI',
|
|
152
|
+
labelDebtInfinite: 'OÄNDLIG SKULD',
|
|
153
|
+
labelInvalidInput: 'Ange totalsaldo och minimibetalning',
|
|
154
|
+
labelEmptyStateTitle: 'Starta din plan',
|
|
155
|
+
labelEmptyStateDescription: 'Dina skulder är inte för evigt. Lägg till dina skulder.',
|
|
156
|
+
currencySymbol: '€',
|
|
157
|
+
currencyCode: 'EUR',
|
|
158
|
+
currencyLocale: 'sv-SE',
|
|
159
|
+
},
|
|
160
|
+
};
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { DebtSnowballUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const slug = 'borc-kartopu-metodu-hesaplayici';
|
|
6
|
+
const title = 'Borç Kartopu Hesaplayıcı: Borç Ödeme Planı 2026';
|
|
7
|
+
const description = 'Dave Ramsey’in kartopu metodu ile finansal özgürlük tarihinizi hesaplayın. Borçlarınızı düzenleyin ve aylık ödeme planınızı görselleştirin.';
|
|
8
|
+
|
|
9
|
+
const faqData = [
|
|
10
|
+
{
|
|
11
|
+
question: 'Borç kartopu metodu nedir?',
|
|
12
|
+
answer: 'Faiz oranına bakılmaksızın borçların en küçük bakiyeden en büyüğe doğru ödenmesini içeren bir stratejidir. Küçük hesapları hızla kapatmanın getirdiği psikolojik başarıya odaklanır.',
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
question: 'Neden faiz oranına (Çığ Metodu) göre sıralanmıyor?',
|
|
16
|
+
answer: 'Matematiksel olarak en yüksek faizi önce ödemek daha fazla para kazandırır. Ancak birçok kişi hemen sonuç görmediği için pes eder. Kartopu motivasyona öncelik verir.',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
question: 'Plana başlamadan önce birikimim olmalı mı?',
|
|
20
|
+
answer: 'Borçlara saldırmadan önce küçük bir "Acil Durum Fonu" (yaklaşık 1.000€) oluşturulması önerilir. Bu, beklenmedik durumlarda tekrar kredi kartına sarılmanızı önler.',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
question: 'Hesaplayıcıya hangi borçları dahil etmeliyim?',
|
|
24
|
+
answer: 'Tüm tüketici borçları: kredi kartları, kişisel krediler, araç kredileri, gecikmiş faturalar. Konut kredisi genellikle hacmi nedeniyle sonraki aşamaya bırakılır.',
|
|
25
|
+
},
|
|
26
|
+
];
|
|
27
|
+
|
|
28
|
+
const howToData = [
|
|
29
|
+
{
|
|
30
|
+
name: 'Borçlarınızı listeleyin',
|
|
31
|
+
text: 'Tüm borçlarınızı, kalan bakiyeleri ve aylık minimum ödeme tutarlarını belirterek not edin.',
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
name: 'Ek bütçenizi belirleyin',
|
|
35
|
+
text: 'Minimum ödemelerin üzerine her ay ne kadar ek para ayırabileceğinizi hesaplayın.',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: 'Sıralayın ve önceliklendirin',
|
|
39
|
+
text: 'Hesaplayıcı otomatik olarak en küçük bakiyeden en büyüğe doğru sıralayacaktır. En küçüğü hariç hepsinde minimumu ödeyin.',
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
name: 'Basamağı uygulayın',
|
|
43
|
+
text: 'En küçük borcu kapattığınızda, ona ayırdığınız tüm parayı alın ve listedeki bir sonraki borcun ödemesine ekleyin.',
|
|
44
|
+
},
|
|
45
|
+
];
|
|
46
|
+
|
|
47
|
+
const bibliographyData = [
|
|
48
|
+
{
|
|
49
|
+
name: 'Investopedia — Debt Snowball vs. Debt Avalanche',
|
|
50
|
+
url: 'https://www.investopedia.com/',
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
name: 'Harvard Business Review — Research on Debt Payoff Strategies',
|
|
54
|
+
url: 'https://hbr.org/',
|
|
55
|
+
},
|
|
56
|
+
];
|
|
57
|
+
|
|
58
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
59
|
+
'@context': 'https://schema.org',
|
|
60
|
+
'@type': 'FAQPage',
|
|
61
|
+
mainEntity: faqData.map((item) => ({
|
|
62
|
+
'@type': 'Question',
|
|
63
|
+
name: item.question,
|
|
64
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
65
|
+
})),
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
const howToSchema: WithContext<HowTo> = {
|
|
69
|
+
'@context': 'https://schema.org',
|
|
70
|
+
'@type': 'HowTo',
|
|
71
|
+
name: title,
|
|
72
|
+
description,
|
|
73
|
+
step: howToData.map((step, i) => ({
|
|
74
|
+
'@type': 'HowToStep',
|
|
75
|
+
position: i + 1,
|
|
76
|
+
name: step.name,
|
|
77
|
+
text: step.text,
|
|
78
|
+
})),
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
82
|
+
'@context': 'https://schema.org',
|
|
83
|
+
'@type': 'SoftwareApplication',
|
|
84
|
+
name: title,
|
|
85
|
+
description,
|
|
86
|
+
applicationCategory: 'FinanceApplication',
|
|
87
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
export const content: ToolLocaleContent<DebtSnowballUI> = {
|
|
91
|
+
slug,
|
|
92
|
+
title,
|
|
93
|
+
description,
|
|
94
|
+
faqTitle: 'Sıkça Sorulan Sorular',
|
|
95
|
+
faq: faqData,
|
|
96
|
+
bibliographyTitle: 'Kaynaklar ve Referanslar',
|
|
97
|
+
bibliography: bibliographyData,
|
|
98
|
+
howTo: howToData,
|
|
99
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
100
|
+
seo: [
|
|
101
|
+
{
|
|
102
|
+
type: 'title',
|
|
103
|
+
text: 'Borç Kartopu Metodu Hesaplayıcı: Kılavuz 2026',
|
|
104
|
+
level: 2,
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
type: 'paragraph',
|
|
108
|
+
html: 'Borçla yaşamak zordur. <strong>Kartopu metodu</strong>, finansal özgürlüğü geri kazanmak için en etkili stratejilerden biri olduğunu kanıtlamıştır.',
|
|
109
|
+
},
|
|
110
|
+
],
|
|
111
|
+
ui: {
|
|
112
|
+
labelTitle: 'Tam özgürlük',
|
|
113
|
+
labelDescription: 'Finansal özgürlüğe giden yolunuza psikolojik olarak en etkili yöntemle başlayın.',
|
|
114
|
+
labelExtraBudget: 'AYLIK EK BÜTÇE',
|
|
115
|
+
labelExtraBudgetHelp: 'Minimum ödemelerin üzerindeki ek para.',
|
|
116
|
+
labelSnowballMethod: 'KARTOPU',
|
|
117
|
+
labelAvalancheMethod: 'ÇIĞ',
|
|
118
|
+
labelAddNewDebt: 'YENİ BORÇ EKLE',
|
|
119
|
+
labelDebtName: 'İsim',
|
|
120
|
+
labelDebtNamePlaceholder: 'Örn: Visa',
|
|
121
|
+
labelDebtBalance: 'BORCUNUZ NE KADAR',
|
|
122
|
+
labelDebtBalancePlaceholder: '0',
|
|
123
|
+
labelMinPayment: 'MİNİMUM ÖDEME',
|
|
124
|
+
labelInterestRate: 'FAİZ ORANI',
|
|
125
|
+
labelInterestHelp: 'YILLIK',
|
|
126
|
+
labelAddButton: 'PLANA EKLE',
|
|
127
|
+
labelClearData: 'Ayarları temizle',
|
|
128
|
+
labelClearDataConfirm: 'Plan boşaltılsın mı?',
|
|
129
|
+
labelDeleteDebt: 'Sil',
|
|
130
|
+
labelDebtInventory: 'Borç Envanteri',
|
|
131
|
+
labelFreedomDate: 'FİNANSAL ÖZGÜRLÜK TARİHİ',
|
|
132
|
+
labelActiveMethod: 'METOT',
|
|
133
|
+
labelMonthsRemaining: 'KALAN AY SAYISI',
|
|
134
|
+
labelTotalInterest: 'TOPLAM FAİZ',
|
|
135
|
+
labelTotalPaid: 'TOPLAM FİNAL ÖDEMESİ',
|
|
136
|
+
labelInterestSaved: 'FAİZ TASARRUFU',
|
|
137
|
+
labelYourStrategy: 'Adım Adım Stratejiniz',
|
|
138
|
+
labelStrategyHelp: 'Her adım toplam ödemenizi gösterir.',
|
|
139
|
+
labelPriority: 'EN YÜKSEK ÖNCELİK',
|
|
140
|
+
labelStep: 'ADIM',
|
|
141
|
+
labelAfterPaying: 'ÖNCEKİNİ KAPATTIKTAN SONRA',
|
|
142
|
+
labelMonthlyPayment: 'Aylık ödeme',
|
|
143
|
+
labelDetailedAmortization: 'Detaylı Amortisman',
|
|
144
|
+
labelExportCSV: '.CSV Olarak Dışa Aktar',
|
|
145
|
+
labelDate: 'Tarih',
|
|
146
|
+
labelStartingBalance: 'Başlangıç Bakiyesi',
|
|
147
|
+
labelInterest: 'Faiz',
|
|
148
|
+
labelAmortization: 'Amortisman',
|
|
149
|
+
labelTotalMonth: 'Aylık Toplam',
|
|
150
|
+
labelRemaining: 'Kalan',
|
|
151
|
+
labelFree: 'ÖZGÜR',
|
|
152
|
+
labelDebtInfinite: 'SONSUZ BORÇ',
|
|
153
|
+
labelInvalidInput: 'Toplam bakiye ve minimum ödemeyi belirtin',
|
|
154
|
+
labelEmptyStateTitle: 'Planınıza başlayın',
|
|
155
|
+
labelEmptyStateDescription: 'Borçlarınız sonsuza kadar sürmeyecek. Borçlarınızı ekleyin.',
|
|
156
|
+
currencySymbol: '€',
|
|
157
|
+
currencyCode: 'EUR',
|
|
158
|
+
currencyLocale: 'tr-TR',
|
|
159
|
+
},
|
|
160
|
+
};
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { DebtSnowballUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const slug = 'debt-snowball-calculator';
|
|
6
|
+
const title = '债务雪球法计算器:2026 年还款计划';
|
|
7
|
+
const description = '使用 Dave Ramsey 的雪球法计算您的财务自由日期。整理您的债务并查看详细的每月还款计划。';
|
|
8
|
+
|
|
9
|
+
const faqData = [
|
|
10
|
+
{
|
|
11
|
+
question: '什么是债务雪球法?',
|
|
12
|
+
answer: '这是一种债务偿还策略,要求按照债务余额从小到大的顺序偿还债务,而不考虑利率。它的核心在于通过快速消除小额账户来获得心理上的成就感和动力。',
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
question: '为什么不按照利率排序(雪崩法)?',
|
|
16
|
+
answer: '从数学上讲,先偿还高利率债务可以节省更多利息。然而,许多人因为看不到即时结果而中途放弃。雪球法优先考虑动机:看到债务迅速消失能给您应对大额债务的能量。',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
question: '在开始计划之前我需要有储蓄吗?',
|
|
20
|
+
answer: '建议在攻击债务之前先建立一个“初始紧急基金”(约 1,000 欧元)。这可以防止在遇到突发情况时不得不再次使用信用卡而破坏您的进度。',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
question: '我应该在计算器中包含哪些债务?',
|
|
24
|
+
answer: '所有的消费债务:信用卡、个人贷款、汽车贷款、逾期账单。房贷通常因为金额巨大而被留到后期。',
|
|
25
|
+
},
|
|
26
|
+
];
|
|
27
|
+
|
|
28
|
+
const howToData = [
|
|
29
|
+
{
|
|
30
|
+
name: '列出您的债务',
|
|
31
|
+
text: '写下您所有的债务,注明当前的剩余余额和您每月支付的最低还款额。',
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
name: '确定额外预算',
|
|
35
|
+
text: '计算您每个月在最低还款额之外还能投入多少额外资金用于还债。',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: '排序并确定优先级',
|
|
39
|
+
text: '计算器将自动按余额从小到大排序。对除最小债务外的所有债务支付最低额,将所有额外资金投入最小的债务。',
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
name: '执行级联还款',
|
|
43
|
+
text: '当清完最小的一笔债务后,将原来用于该债务的所有资金(最低还款额 + 额外资金)全部转入下一笔债务。',
|
|
44
|
+
},
|
|
45
|
+
];
|
|
46
|
+
|
|
47
|
+
const bibliographyData = [
|
|
48
|
+
{
|
|
49
|
+
name: 'Investopedia — Debt Snowball vs. Debt Avalanche',
|
|
50
|
+
url: 'https://www.investopedia.com/',
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
name: 'Harvard Business Review — Research on Debt Payoff Strategies',
|
|
54
|
+
url: 'https://hbr.org/',
|
|
55
|
+
},
|
|
56
|
+
];
|
|
57
|
+
|
|
58
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
59
|
+
'@context': 'https://schema.org',
|
|
60
|
+
'@type': 'FAQPage',
|
|
61
|
+
mainEntity: faqData.map((item) => ({
|
|
62
|
+
'@type': 'Question',
|
|
63
|
+
name: item.question,
|
|
64
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
65
|
+
})),
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
const howToSchema: WithContext<HowTo> = {
|
|
69
|
+
'@context': 'https://schema.org',
|
|
70
|
+
'@type': 'HowTo',
|
|
71
|
+
name: title,
|
|
72
|
+
description,
|
|
73
|
+
step: howToData.map((step, i) => ({
|
|
74
|
+
'@type': 'HowToStep',
|
|
75
|
+
position: i + 1,
|
|
76
|
+
name: step.name,
|
|
77
|
+
text: step.text,
|
|
78
|
+
})),
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
82
|
+
'@context': 'https://schema.org',
|
|
83
|
+
'@type': 'SoftwareApplication',
|
|
84
|
+
name: title,
|
|
85
|
+
description,
|
|
86
|
+
applicationCategory: 'FinanceApplication',
|
|
87
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
export const content: ToolLocaleContent<DebtSnowballUI> = {
|
|
91
|
+
slug,
|
|
92
|
+
title,
|
|
93
|
+
description,
|
|
94
|
+
faqTitle: '常见问题',
|
|
95
|
+
faq: faqData,
|
|
96
|
+
bibliographyTitle: '来源与参考资料',
|
|
97
|
+
bibliography: bibliographyData,
|
|
98
|
+
howTo: howToData,
|
|
99
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
100
|
+
seo: [
|
|
101
|
+
{
|
|
102
|
+
type: 'title',
|
|
103
|
+
text: '债务雪球法计算器:2026 年完整指南',
|
|
104
|
+
level: 2,
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
type: 'paragraph',
|
|
108
|
+
html: '带着债务生活就像背着重负跑马拉松。<strong>债务雪球法</strong>已被证明是重获财务自由最有效的策略之一。',
|
|
109
|
+
},
|
|
110
|
+
],
|
|
111
|
+
ui: {
|
|
112
|
+
labelTitle: '彻底自由',
|
|
113
|
+
labelDescription: '用心理上最有效的方法开始您的财务自由之路。',
|
|
114
|
+
labelExtraBudget: '每月额外预算',
|
|
115
|
+
labelExtraBudgetHelp: '在最低还款额之外的资金。',
|
|
116
|
+
labelSnowballMethod: '雪球法',
|
|
117
|
+
labelAvalancheMethod: '雪崩法',
|
|
118
|
+
labelAddNewDebt: '添加新债务',
|
|
119
|
+
labelDebtName: '名称',
|
|
120
|
+
labelDebtNamePlaceholder: '例如:Visa 卡',
|
|
121
|
+
labelDebtBalance: '欠款金额',
|
|
122
|
+
labelDebtBalancePlaceholder: '0',
|
|
123
|
+
labelMinPayment: '最低还款额',
|
|
124
|
+
labelInterestRate: '年利率',
|
|
125
|
+
labelInterestHelp: '年化',
|
|
126
|
+
labelAddButton: '添加到计划',
|
|
127
|
+
labelClearData: '清除设置',
|
|
128
|
+
labelClearDataConfirm: '清空计划?',
|
|
129
|
+
labelDeleteDebt: '删除',
|
|
130
|
+
labelDebtInventory: '债务清单',
|
|
131
|
+
labelFreedomDate: '财务自由日期',
|
|
132
|
+
labelActiveMethod: '方法',
|
|
133
|
+
labelMonthsRemaining: '剩余月数',
|
|
134
|
+
labelTotalInterest: '总利息',
|
|
135
|
+
labelTotalPaid: '最终总还款',
|
|
136
|
+
labelInterestSaved: '节省的利息',
|
|
137
|
+
labelYourStrategy: '您的分步策略',
|
|
138
|
+
labelStrategyHelp: '每一步都显示您的总还款额。',
|
|
139
|
+
labelPriority: '最高优先级',
|
|
140
|
+
labelStep: '步骤',
|
|
141
|
+
labelAfterPaying: '在结清上一笔后',
|
|
142
|
+
labelMonthlyPayment: '每月还款',
|
|
143
|
+
labelDetailedAmortization: '详细摊销计划',
|
|
144
|
+
labelExportCSV: '导出 .CSV',
|
|
145
|
+
labelDate: '日期',
|
|
146
|
+
labelStartingBalance: '起始余额',
|
|
147
|
+
labelInterest: '利息',
|
|
148
|
+
labelAmortization: '已偿还本金',
|
|
149
|
+
labelTotalMonth: '月计',
|
|
150
|
+
labelRemaining: '剩余',
|
|
151
|
+
labelFree: '自由',
|
|
152
|
+
labelDebtInfinite: '债务无限',
|
|
153
|
+
labelInvalidInput: '请输入总余额和最低还款额',
|
|
154
|
+
labelEmptyStateTitle: '开始您的计划',
|
|
155
|
+
labelEmptyStateDescription: '债务不是永久的。添加您的债务以查看自由之路。',
|
|
156
|
+
currencySymbol: '€',
|
|
157
|
+
currencyCode: 'EUR',
|
|
158
|
+
currencyLocale: 'zh-CN',
|
|
159
|
+
},
|
|
160
|
+
};
|
|
@@ -8,20 +8,28 @@ import { DebtSnowballLogic, type Debt, type SimulationResult, type ProjectionMon
|
|
|
8
8
|
export type DebtSnowballLocaleContent = ToolLocaleContent<DebtSnowballUI>;
|
|
9
9
|
export type { Debt, SimulationResult, ProjectionMonth };
|
|
10
10
|
|
|
11
|
-
import { content as es } from './i18n/es';
|
|
12
|
-
import { content as en } from './i18n/en';
|
|
13
|
-
import { content as fr } from './i18n/fr';
|
|
14
|
-
|
|
15
11
|
export const debtSnowball: FinanceToolEntry<DebtSnowballUI> = {
|
|
16
12
|
id: 'bola-nieve-deuda',
|
|
17
13
|
icons: {
|
|
18
|
-
bg: 'mdi:
|
|
19
|
-
fg: 'mdi:trending-
|
|
14
|
+
bg: 'mdi:snowflake',
|
|
15
|
+
fg: 'mdi:trending-down',
|
|
20
16
|
},
|
|
21
17
|
i18n: {
|
|
22
|
-
|
|
23
|
-
en:
|
|
24
|
-
|
|
18
|
+
de: () => import('./i18n/de').then((m) => m.content),
|
|
19
|
+
en: () => import('./i18n/en').then((m) => m.content),
|
|
20
|
+
es: () => import('./i18n/es').then((m) => m.content),
|
|
21
|
+
fr: () => import('./i18n/fr').then((m) => m.content),
|
|
22
|
+
id: () => import('./i18n/id').then((m) => m.content),
|
|
23
|
+
it: () => import('./i18n/it').then((m) => m.content),
|
|
24
|
+
ja: () => import('./i18n/ja').then((m) => m.content),
|
|
25
|
+
ko: () => import('./i18n/ko').then((m) => m.content),
|
|
26
|
+
nl: () => import('./i18n/nl').then((m) => m.content),
|
|
27
|
+
pl: () => import('./i18n/pl').then((m) => m.content),
|
|
28
|
+
pt: () => import('./i18n/pt').then((m) => m.content),
|
|
29
|
+
ru: () => import('./i18n/ru').then((m) => m.content),
|
|
30
|
+
sv: () => import('./i18n/sv').then((m) => m.content),
|
|
31
|
+
tr: () => import('./i18n/tr').then((m) => m.content),
|
|
32
|
+
zh: () => import('./i18n/zh').then((m) => m.content),
|
|
25
33
|
},
|
|
26
34
|
};
|
|
27
35
|
|