@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.
Files changed (179) hide show
  1. package/package.json +2 -1
  2. package/src/category/i18n/de.ts +158 -0
  3. package/src/category/i18n/id.ts +158 -0
  4. package/src/category/i18n/it.ts +158 -0
  5. package/src/category/i18n/ja.ts +158 -0
  6. package/src/category/i18n/ko.ts +158 -0
  7. package/src/category/i18n/nl.ts +158 -0
  8. package/src/category/i18n/pl.ts +158 -0
  9. package/src/category/i18n/pt.ts +158 -0
  10. package/src/category/i18n/ru.ts +158 -0
  11. package/src/category/i18n/sv.ts +158 -0
  12. package/src/category/i18n/tr.ts +158 -0
  13. package/src/category/i18n/zh.ts +158 -0
  14. package/src/category/index.ts +13 -1
  15. package/src/tests/category_validation.test.ts +73 -0
  16. package/src/tests/faq_count.test.ts +1 -1
  17. package/src/tests/i18n_coverage.test.ts +36 -0
  18. package/src/tests/locale_completeness.test.ts +3 -0
  19. package/src/tests/slug_language_code_format.test.ts +23 -0
  20. package/src/tests/slug_uniqueness.test.ts +81 -0
  21. package/src/tests/title_quality.test.ts +1 -1
  22. package/src/tool/compoundInterest/i18n/de.ts +208 -0
  23. package/src/tool/compoundInterest/i18n/id.ts +208 -0
  24. package/src/tool/compoundInterest/i18n/it.ts +208 -0
  25. package/src/tool/compoundInterest/i18n/ja.ts +207 -0
  26. package/src/tool/compoundInterest/i18n/ko.ts +207 -0
  27. package/src/tool/compoundInterest/i18n/nl.ts +208 -0
  28. package/src/tool/compoundInterest/i18n/pl.ts +208 -0
  29. package/src/tool/compoundInterest/i18n/pt.ts +208 -0
  30. package/src/tool/compoundInterest/i18n/ru.ts +208 -0
  31. package/src/tool/compoundInterest/i18n/sv.ts +208 -0
  32. package/src/tool/compoundInterest/i18n/tr.ts +208 -0
  33. package/src/tool/compoundInterest/i18n/zh.ts +202 -0
  34. package/src/tool/compoundInterest/index.ts +15 -7
  35. package/src/tool/courtFeeCalculator/i18n/de.ts +152 -0
  36. package/src/tool/courtFeeCalculator/i18n/fr.ts +1 -1
  37. package/src/tool/courtFeeCalculator/i18n/id.ts +152 -0
  38. package/src/tool/courtFeeCalculator/i18n/it.ts +152 -0
  39. package/src/tool/courtFeeCalculator/i18n/ja.ts +152 -0
  40. package/src/tool/courtFeeCalculator/i18n/ko.ts +152 -0
  41. package/src/tool/courtFeeCalculator/i18n/nl.ts +152 -0
  42. package/src/tool/courtFeeCalculator/i18n/pl.ts +152 -0
  43. package/src/tool/courtFeeCalculator/i18n/pt.ts +152 -0
  44. package/src/tool/courtFeeCalculator/i18n/ru.ts +152 -0
  45. package/src/tool/courtFeeCalculator/i18n/sv.ts +152 -0
  46. package/src/tool/courtFeeCalculator/i18n/tr.ts +152 -0
  47. package/src/tool/courtFeeCalculator/i18n/zh.ts +152 -0
  48. package/src/tool/courtFeeCalculator/index.ts +16 -8
  49. package/src/tool/debtSnowball/i18n/de.ts +160 -0
  50. package/src/tool/debtSnowball/i18n/id.ts +160 -0
  51. package/src/tool/debtSnowball/i18n/it.ts +160 -0
  52. package/src/tool/debtSnowball/i18n/ja.ts +157 -0
  53. package/src/tool/debtSnowball/i18n/ko.ts +160 -0
  54. package/src/tool/debtSnowball/i18n/nl.ts +160 -0
  55. package/src/tool/debtSnowball/i18n/pl.ts +160 -0
  56. package/src/tool/debtSnowball/i18n/pt.ts +160 -0
  57. package/src/tool/debtSnowball/i18n/ru.ts +160 -0
  58. package/src/tool/debtSnowball/i18n/sv.ts +160 -0
  59. package/src/tool/debtSnowball/i18n/tr.ts +160 -0
  60. package/src/tool/debtSnowball/i18n/zh.ts +160 -0
  61. package/src/tool/debtSnowball/index.ts +17 -9
  62. package/src/tool/fireCalculator/i18n/de.ts +261 -0
  63. package/src/tool/fireCalculator/i18n/id.ts +261 -0
  64. package/src/tool/fireCalculator/i18n/it.ts +261 -0
  65. package/src/tool/fireCalculator/i18n/ja.ts +261 -0
  66. package/src/tool/fireCalculator/i18n/ko.ts +261 -0
  67. package/src/tool/fireCalculator/i18n/nl.ts +261 -0
  68. package/src/tool/fireCalculator/i18n/pl.ts +261 -0
  69. package/src/tool/fireCalculator/i18n/pt.ts +261 -0
  70. package/src/tool/fireCalculator/i18n/ru.ts +261 -0
  71. package/src/tool/fireCalculator/i18n/sv.ts +261 -0
  72. package/src/tool/fireCalculator/i18n/tr.ts +261 -0
  73. package/src/tool/fireCalculator/i18n/zh.ts +261 -0
  74. package/src/tool/fireCalculator/index.ts +15 -7
  75. package/src/tool/ibanBicSwiftConverter/i18n/de.ts +128 -0
  76. package/src/tool/ibanBicSwiftConverter/i18n/id.ts +128 -0
  77. package/src/tool/ibanBicSwiftConverter/i18n/it.ts +128 -0
  78. package/src/tool/ibanBicSwiftConverter/i18n/ja.ts +128 -0
  79. package/src/tool/ibanBicSwiftConverter/i18n/ko.ts +128 -0
  80. package/src/tool/ibanBicSwiftConverter/i18n/nl.ts +128 -0
  81. package/src/tool/ibanBicSwiftConverter/i18n/pl.ts +128 -0
  82. package/src/tool/ibanBicSwiftConverter/i18n/pt.ts +128 -0
  83. package/src/tool/ibanBicSwiftConverter/i18n/ru.ts +128 -0
  84. package/src/tool/ibanBicSwiftConverter/i18n/sv.ts +128 -0
  85. package/src/tool/ibanBicSwiftConverter/i18n/tr.ts +128 -0
  86. package/src/tool/ibanBicSwiftConverter/i18n/zh.ts +128 -0
  87. package/src/tool/ibanBicSwiftConverter/index.ts +15 -7
  88. package/src/tool/inflation/i18n/de.ts +297 -0
  89. package/src/tool/inflation/i18n/id.ts +297 -0
  90. package/src/tool/inflation/i18n/it.ts +297 -0
  91. package/src/tool/inflation/i18n/ja.ts +297 -0
  92. package/src/tool/inflation/i18n/ko.ts +297 -0
  93. package/src/tool/inflation/i18n/nl.ts +297 -0
  94. package/src/tool/inflation/i18n/pl.ts +297 -0
  95. package/src/tool/inflation/i18n/pt.ts +297 -0
  96. package/src/tool/inflation/i18n/ru.ts +297 -0
  97. package/src/tool/inflation/i18n/sv.ts +297 -0
  98. package/src/tool/inflation/i18n/tr.ts +297 -0
  99. package/src/tool/inflation/i18n/zh.ts +297 -0
  100. package/src/tool/inflation/index.ts +17 -9
  101. package/src/tool/lateInterest/i18n/de.ts +224 -0
  102. package/src/tool/lateInterest/i18n/id.ts +224 -0
  103. package/src/tool/lateInterest/i18n/it.ts +224 -0
  104. package/src/tool/lateInterest/i18n/ja.ts +224 -0
  105. package/src/tool/lateInterest/i18n/ko.ts +224 -0
  106. package/src/tool/lateInterest/i18n/nl.ts +224 -0
  107. package/src/tool/lateInterest/i18n/pl.ts +224 -0
  108. package/src/tool/lateInterest/i18n/pt.ts +224 -0
  109. package/src/tool/lateInterest/i18n/ru.ts +224 -0
  110. package/src/tool/lateInterest/i18n/sv.ts +224 -0
  111. package/src/tool/lateInterest/i18n/tr.ts +224 -0
  112. package/src/tool/lateInterest/i18n/zh.ts +224 -0
  113. package/src/tool/lateInterest/index.ts +17 -9
  114. package/src/tool/legalInterestRate/i18n/de.ts +143 -0
  115. package/src/tool/legalInterestRate/i18n/id.ts +143 -0
  116. package/src/tool/legalInterestRate/i18n/it.ts +143 -0
  117. package/src/tool/legalInterestRate/i18n/ja.ts +143 -0
  118. package/src/tool/legalInterestRate/i18n/ko.ts +143 -0
  119. package/src/tool/legalInterestRate/i18n/nl.ts +143 -0
  120. package/src/tool/legalInterestRate/i18n/pl.ts +143 -0
  121. package/src/tool/legalInterestRate/i18n/pt.ts +143 -0
  122. package/src/tool/legalInterestRate/i18n/ru.ts +143 -0
  123. package/src/tool/legalInterestRate/i18n/sv.ts +143 -0
  124. package/src/tool/legalInterestRate/i18n/tr.ts +143 -0
  125. package/src/tool/legalInterestRate/i18n/zh.ts +143 -0
  126. package/src/tool/legalInterestRate/index.ts +17 -9
  127. package/src/tool/lotteryOptimizer/i18n/de.ts +177 -0
  128. package/src/tool/lotteryOptimizer/i18n/id.ts +177 -0
  129. package/src/tool/lotteryOptimizer/i18n/it.ts +177 -0
  130. package/src/tool/lotteryOptimizer/i18n/ja.ts +177 -0
  131. package/src/tool/lotteryOptimizer/i18n/ko.ts +177 -0
  132. package/src/tool/lotteryOptimizer/i18n/nl.ts +177 -0
  133. package/src/tool/lotteryOptimizer/i18n/pl.ts +177 -0
  134. package/src/tool/lotteryOptimizer/i18n/pt.ts +177 -0
  135. package/src/tool/lotteryOptimizer/i18n/ru.ts +177 -0
  136. package/src/tool/lotteryOptimizer/i18n/sv.ts +177 -0
  137. package/src/tool/lotteryOptimizer/i18n/tr.ts +177 -0
  138. package/src/tool/lotteryOptimizer/i18n/zh.ts +177 -0
  139. package/src/tool/lotteryOptimizer/index.ts +17 -9
  140. package/src/tool/mortgage/i18n/de.ts +223 -0
  141. package/src/tool/mortgage/i18n/id.ts +219 -0
  142. package/src/tool/mortgage/i18n/it.ts +223 -0
  143. package/src/tool/mortgage/i18n/ja.ts +219 -0
  144. package/src/tool/mortgage/i18n/ko.ts +219 -0
  145. package/src/tool/mortgage/i18n/nl.ts +219 -0
  146. package/src/tool/mortgage/i18n/pl.ts +219 -0
  147. package/src/tool/mortgage/i18n/pt.ts +219 -0
  148. package/src/tool/mortgage/i18n/ru.ts +219 -0
  149. package/src/tool/mortgage/i18n/sv.ts +219 -0
  150. package/src/tool/mortgage/i18n/tr.ts +219 -0
  151. package/src/tool/mortgage/i18n/zh.ts +219 -0
  152. package/src/tool/mortgage/index.ts +15 -7
  153. package/src/tool/percentageCalculator/i18n/de.ts +229 -0
  154. package/src/tool/percentageCalculator/i18n/id.ts +229 -0
  155. package/src/tool/percentageCalculator/i18n/it.ts +229 -0
  156. package/src/tool/percentageCalculator/i18n/ja.ts +229 -0
  157. package/src/tool/percentageCalculator/i18n/ko.ts +229 -0
  158. package/src/tool/percentageCalculator/i18n/nl.ts +229 -0
  159. package/src/tool/percentageCalculator/i18n/pl.ts +229 -0
  160. package/src/tool/percentageCalculator/i18n/pt.ts +229 -0
  161. package/src/tool/percentageCalculator/i18n/ru.ts +229 -0
  162. package/src/tool/percentageCalculator/i18n/sv.ts +229 -0
  163. package/src/tool/percentageCalculator/i18n/tr.ts +229 -0
  164. package/src/tool/percentageCalculator/i18n/zh.ts +229 -0
  165. package/src/tool/percentageCalculator/index.ts +15 -7
  166. package/src/tool/rentIncreaseCalculator/i18n/de.ts +136 -0
  167. package/src/tool/rentIncreaseCalculator/i18n/id.ts +136 -0
  168. package/src/tool/rentIncreaseCalculator/i18n/it.ts +136 -0
  169. package/src/tool/rentIncreaseCalculator/i18n/ja.ts +136 -0
  170. package/src/tool/rentIncreaseCalculator/i18n/ko.ts +136 -0
  171. package/src/tool/rentIncreaseCalculator/i18n/nl.ts +136 -0
  172. package/src/tool/rentIncreaseCalculator/i18n/pl.ts +136 -0
  173. package/src/tool/rentIncreaseCalculator/i18n/pt.ts +136 -0
  174. package/src/tool/rentIncreaseCalculator/i18n/ru.ts +136 -0
  175. package/src/tool/rentIncreaseCalculator/i18n/sv.ts +136 -0
  176. package/src/tool/rentIncreaseCalculator/i18n/tr.ts +136 -0
  177. package/src/tool/rentIncreaseCalculator/i18n/zh.ts +136 -0
  178. package/src/tool/rentIncreaseCalculator/index.ts +17 -9
  179. package/src/types.ts +1 -1
@@ -0,0 +1,219 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { MortgageUI } from '../ui';
4
+
5
+ const slug = 'konut-kredisi-hesaplama';
6
+ const title = 'Konut Kredisi Simülatörü ve Fransız Amortisman Tablosu';
7
+ const description =
8
+ 'Aylık kredi taksitinizi hesaplayın, ne kadar faiz ödeyeceğinizi öğrenin ve tüm ödeme planınızı anında görüntüleyin.';
9
+
10
+ const faqData = [
11
+ {
12
+ question: 'Fransız amortisman sistemi nedir?',
13
+ answer:
14
+ 'En yaygın kullanılan sistemdir. Aylık taksit her zaman aynıdır, ancak başlangıçta ödemenizin neredeyse tamamı faize, çok azı ise ana paraya gider. Sonunda ise durum tam tersidir. Bu nedenle erken ödeme yapmak ilk yıllarda daha karlıdır.',
15
+ },
16
+ {
17
+ question: '2026’da sabit mi yoksa değişken faiz mi tercih edilmeli?',
18
+ answer:
19
+ 'Sabit faiz: Şimdi biraz daha fazla ödersiniz ama 30 yıl boyunca huzurla uyursunuz. Değişken faiz: Bugün daha ucuz olabilir, ancak faizler yükselirse taksitleriniz fırlayabilir. Bu, risk toleransınıza bağlıdır.',
20
+ },
21
+ {
22
+ question: '10.000 TL erken ödeme yaparsam ne kadar tasarruf ederim?',
23
+ answer:
24
+ 'Zamana göre değişir. 200.000 TL’lik %3 faizli bir kredinin 1. yılında ödeme yaparsanız 15.000 TL’den fazla faiz tasarrufu sağlayabilirsiniz. 20. yılda yaparsanız tasarruf 2.000 TL’yi zor bulur. Zamanlama kritiktir.',
25
+ },
26
+ {
27
+ question: 'Maaşımın yüzde kaçını krediye ayırmalıyım?',
28
+ answer:
29
+ 'Genel tavsiye, aylık net gelirinizin %30-35’ini (diğer borçlar dahil) geçmemesidir. Bu eşiğin aşılması, beklenmedik durumlarda temerrüt riskini önemli ölçüde artırır.',
30
+ },
31
+ ];
32
+
33
+ const howToData = [
34
+ {
35
+ name: 'Kredi tutarını girin',
36
+ text: 'Bankadan talep etmeniz gereken toplam tutarı yazın (peşinatınızı düştükten sonra).',
37
+ },
38
+ {
39
+ name: 'Faiz oranını ayarlayın',
40
+ text: 'Bankanın sunduğu yıllık faiz oranını girin. Sabit veya değişken faiz arasında karşılaştırma yapabilirsiniz.',
41
+ },
42
+ {
43
+ name: 'Vade süresini seçin',
44
+ text: 'Krediyi kaç yılda geri ödemek istediğinizi belirleyin. Yıl arttıkça taksit düşer ama toplamda daha fazla faiz ödersiniz.',
45
+ },
46
+ {
47
+ name: 'Amortisman tablosunu inceleyin',
48
+ text: 'Borcunuzun ay ay nasıl değiştiğini ve taksitinizin ne kadarının faiz, ne kadarının ana para ödemesine gittiğini kontrol edin.',
49
+ },
50
+ ];
51
+
52
+ const faqSchema: WithContext<FAQPage> = {
53
+ '@context': 'https://schema.org',
54
+ '@type': 'FAQPage',
55
+ mainEntity: faqData.map((item) => ({
56
+ '@type': 'Question',
57
+ name: item.question,
58
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
59
+ })),
60
+ };
61
+
62
+ const howToSchema: WithContext<HowTo> = {
63
+ '@context': 'https://schema.org',
64
+ '@type': 'HowTo',
65
+ name: title,
66
+ description,
67
+ step: howToData.map((step, i) => ({
68
+ '@type': 'HowToStep',
69
+ position: i + 1,
70
+ name: step.name,
71
+ text: step.text,
72
+ })),
73
+ };
74
+
75
+ const appSchema: WithContext<SoftwareApplication> = {
76
+ '@context': 'https://schema.org',
77
+ '@type': 'SoftwareApplication',
78
+ name: title,
79
+ description,
80
+ applicationCategory: 'FinanceApplication',
81
+ operatingSystem: 'All',
82
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'TRY' },
83
+ inLanguage: 'tr',
84
+ };
85
+
86
+ export const content: ToolLocaleContent<MortgageUI> = {
87
+ slug,
88
+ title,
89
+ description,
90
+ faqTitle: 'Sıkça Sorulan Sorular',
91
+ faq: faqData,
92
+ bibliographyTitle: 'Kaynaklar ve Referanslar',
93
+ bibliography: [
94
+ {
95
+ name: 'Türkiye Cumhuriyet Merkez Bankası: Krediler hakkında bilgi',
96
+ url: 'https://www.tcmb.gov.tr/',
97
+ },
98
+ {
99
+ name: 'Bankacılık Düzenleme ve Denetleme Kurumu (BDDK)',
100
+ url: 'https://www.bddk.org.tr/',
101
+ },
102
+ ],
103
+ howTo: howToData,
104
+ schemas: [faqSchema, howToSchema, appSchema],
105
+ seo: [
106
+ {
107
+ type: 'title',
108
+ text: 'Konut Kredisi Kapsamlı Rehberi: Fransız Sistemi ve Ödeme Planı',
109
+ level: 2,
110
+ },
111
+ {
112
+ type: 'paragraph',
113
+ html: 'Konut kredisi muhtemelen hayatınızda alacağınız en büyük borçtur. Fransız amortisman sisteminin nasıl çalıştığını anlamak, size on binlerce lira tasarruf ettirebilecek akıllı kararlar vermeniz için çok önemlidir.',
114
+ },
115
+ {
116
+ type: 'title',
117
+ text: 'Fransız Sisteminin „Tuzağı”: Taksit Kompozisyonunu Anlamak',
118
+ level: 3,
119
+ },
120
+ {
121
+ type: 'paragraph',
122
+ html: 'Türkiye’deki çoğu kredi <strong>Fransız Amortisman Sistemi</strong> (eşit taksitli) kullanır. Ana özelliği, aylık taksitin her zaman aynı olmasıdır (sabit faiz durumunda), ancak içindeki ana para ve faiz oranları zamanla köklü bir şekilde değişir.',
123
+ },
124
+ {
125
+ type: 'tip',
126
+ title: 'Taksitleriniz Nasıl Evrilir?',
127
+ html: '<p><strong>Başlangıçta (1-10. Yıllar):</strong> Taksitin neredeyse tamamını FAİZ olarak ödersiniz ve çok az ana para eksilir. Örneğin %1 faizli bir kredide ilk ödemenizin büyük çoğunluğu faiz olabilir.</p><p><strong>Ortada (11-20. Yıllar):</strong> Oran kademeli olarak dengelenir.</p><p><strong>Sonda (21-30. Yıllar):</strong> Neredeyse tamamı ANA PARA ödemesine gider ve çok az faiz kalır.</p>',
128
+ },
129
+ {
130
+ type: 'paragraph',
131
+ html: 'Bu nedenle, <strong>kredi erken ödemesi</strong> yapacaksanız, bunu kredinin ilk yıllarında yapmak çok daha karlıdır. 1. yılda yapacağınız bir erken ödeme, 20. yılda yapacağınızdan çok daha fazla faiz yükünden kurtarır.',
132
+ },
133
+ {
134
+ type: 'title',
135
+ text: 'Krediye Ne Kadar Para Ayırmalıyım?',
136
+ level: 3,
137
+ },
138
+ {
139
+ type: 'paragraph',
140
+ html: 'Genel tavsiye, kredi taksitlerinizin <strong>aylık net gelirinizin %30-35’ini geçmemesidir</strong>. Bu eşiğin aşılması, iş kaybı, hastalık gibi durumlarda ödeme zorluğu riskini ciddi şekilde artırır.',
141
+ },
142
+ {
143
+ type: 'title',
144
+ text: '2026 Bağlamı: Sabit vs Değişken Faiz',
145
+ level: 3,
146
+ },
147
+ {
148
+ type: 'paragraph',
149
+ html: 'Dalgalı faiz ortamında, <strong>Sabit Faiz</strong> veya <strong>Değişken Faiz</strong> arasında seçim yapmak, yıllık binlerce lira fark yaratabilecek stratejik bir karardır.',
150
+ },
151
+ {
152
+ type: 'comparative',
153
+ columns: 2,
154
+ items: [
155
+ {
156
+ title: 'Sabit Faiz',
157
+ description: 'Şimdi biraz daha fazla ödersiniz ama taksitinizin asla artmayacağını bilerek huzurla uyursunuz.',
158
+ points: [
159
+ '30 yıl boyunca öngörülebilir taksit',
160
+ 'Faiz artışlarına karşı tam koruma',
161
+ 'Belirsiz ekonomide iç huzuru',
162
+ 'Dar bütçeler için ideal',
163
+ ],
164
+ },
165
+ {
166
+ title: 'Değişken Faiz',
167
+ description: 'Bugün daha ucuz olabilir ancak ekonominizi piyasa dalgalanmalarına açık hale getirir.',
168
+ highlight: true,
169
+ points: [
170
+ 'Daha düşük başlangıç taksiti',
171
+ 'Faiz artış riski',
172
+ 'Bütçe üzerinde ciddi olası etki',
173
+ 'Sadece yüksek risk toleransı olanlar için',
174
+ ],
175
+ },
176
+ ],
177
+ },
178
+ {
179
+ type: 'tip',
180
+ title: 'Sabit vs Değişken Kararı Profilinize Bağlıdır',
181
+ html: '<p><strong>Sabit Faizi Seçin:</strong> Bütçeniz darsa, kesinlik arıyorsanız ve sürprizlerden hoşlanmıyorsanız.</p><p><strong>Değişken Faizi Seçin:</strong> Finansal tamponunuz varsa, faizlerin düşeceğine inanıyorsanız veya krediniz küçükse.',
182
+ },
183
+ ],
184
+ ui: {
185
+ labelTitle: 'Kredi Hesaplayıcı',
186
+ labelLoanAmount: 'Kredi Tutarı',
187
+ labelInterestRate: 'Faiz Oranı (%)',
188
+ labelYears: 'Vade (Yıl)',
189
+ labelMonthlyExtra: 'Aylık Ek Ödeme',
190
+ labelMonthlyPayment: 'Aylık Taksit',
191
+ labelMonthCount: 'ay',
192
+ labelSavingsCard: 'Potansiyel Tasarrufunuz',
193
+ labelSavingsInterest: 'Faiz Tasarrufu',
194
+ labelSavingsTime: 'Zaman Kazancı',
195
+ labelTimelineComparison: 'Zaman Karşılaştırması',
196
+ labelTimelineOriginal: 'Orijinal Vade',
197
+ labelTimelineOptimized: 'Erken Ödeme ile Vade',
198
+ labelCostBreakdown: 'Toplam Maliyet Dağılımı',
199
+ labelBorrowed: 'Ana Para',
200
+ labelTotalBorrowed: 'Toplam Kredi',
201
+ labelTotalInterest: 'Toplam Faiz',
202
+ labelAmortizationTable: 'Ödeme Planı',
203
+ labelTableHeader: 'Tüm tabloyu gör',
204
+ labelViewAll: 'Hepsini gör',
205
+ labelPaid: 'Kredi Ödendi',
206
+ labelTableMonth: 'Ay',
207
+ labelTableInterest: 'Faiz',
208
+ labelTablePrincipal: 'Ana Para',
209
+ labelTableExtra: 'Ekstra',
210
+ labelTableBalance: 'Kalan Borç',
211
+ labelMoreMonths: 'ay daha',
212
+ labelMonth: 'Ay',
213
+ currencySymbol: '₺',
214
+ currencyCode: 'TRY',
215
+ currencyLocale: 'tr-TR',
216
+ monthPlural: 'ay',
217
+ yearPlural: 'yıl',
218
+ },
219
+ };
@@ -0,0 +1,219 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { MortgageUI } from '../ui';
4
+
5
+ const slug = 'mortgage-calculator';
6
+ const title = '房贷计算器与等额本息还款表';
7
+ const description =
8
+ '计算您的每月房贷还款额,了解您将支付多少利息,并立即可视化查看完整的还款计划。';
9
+
10
+ const faqData = [
11
+ {
12
+ question: '什么是等额本息还款法?',
13
+ answer:
14
+ '这是最常用的还款系统。每月还款金额固定,但初期还款额中绝大部分是利息,本金还款极少。到后期,情况则相反。因此,在还款初期进行提前还贷最为划算。',
15
+ },
16
+ {
17
+ question: '2026 年应该选固定利率还是浮动利率?',
18
+ answer:
19
+ '固定利率:现在支付的可能稍多,但 30 年内都能安稳入睡。浮动利率(如 LPR):今天可能更便宜,但如果利率上升,您的月供可能会飙升,从而给经济带来压力。这取决于您的风险厌恶程度。',
20
+ },
21
+ {
22
+ question: '如果我提前还款 10 万元,能省多少钱?',
23
+ answer:
24
+ '这取决于还款时机。如果在 3% 利率、200 万元贷款的第一年提前还款,您可以节省超过 15 万元的利息。如果是第 20 年还款,节省的利息可能不到 2 万元。时机至关重要。',
25
+ },
26
+ {
27
+ question: '我应该将薪水的百分之多少用于支付房贷?',
28
+ answer:
29
+ '一般建议不要超过每月净收入的 30-35%(包括其他债务)。超过这一阈值会显著增加在遇到突发情况时发生违约的风险。',
30
+ },
31
+ ];
32
+
33
+ const howToData = [
34
+ {
35
+ name: '输入贷款金额',
36
+ text: '输入您需要向银行申请的总金额(减去您已支付的首付款)。',
37
+ },
38
+ {
39
+ name: '调整利率',
40
+ text: '输入银行提供的年利率。您可以对比固定利率和浮动利率的不同情况。',
41
+ },
42
+ {
43
+ name: '选择还款期限',
44
+ text: '确定您希望用多少年偿还贷款。期限越长,月供越低,但支付的总利息会更多。',
45
+ },
46
+ {
47
+ name: '分析还款计划表',
48
+ text: '逐月查看您的债务演变情况,以及月供中利息与本金的分配比例。',
49
+ },
50
+ ];
51
+
52
+ const faqSchema: WithContext<FAQPage> = {
53
+ '@context': 'https://schema.org',
54
+ '@type': 'FAQPage',
55
+ mainEntity: faqData.map((item) => ({
56
+ '@type': 'Question',
57
+ name: item.question,
58
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
59
+ })),
60
+ };
61
+
62
+ const howToSchema: WithContext<HowTo> = {
63
+ '@context': 'https://schema.org',
64
+ '@type': 'HowTo',
65
+ name: title,
66
+ description,
67
+ step: howToData.map((step, i) => ({
68
+ '@type': 'HowToStep',
69
+ position: i + 1,
70
+ name: step.name,
71
+ text: step.text,
72
+ })),
73
+ };
74
+
75
+ const appSchema: WithContext<SoftwareApplication> = {
76
+ '@context': 'https://schema.org',
77
+ '@type': 'SoftwareApplication',
78
+ name: title,
79
+ description,
80
+ applicationCategory: 'FinanceApplication',
81
+ operatingSystem: 'All',
82
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'CNY' },
83
+ inLanguage: 'zh',
84
+ };
85
+
86
+ export const content: ToolLocaleContent<MortgageUI> = {
87
+ slug,
88
+ title,
89
+ description,
90
+ faqTitle: '常见问题',
91
+ faq: faqData,
92
+ bibliographyTitle: '来源与参考',
93
+ bibliography: [
94
+ {
95
+ name: '中国人民银行:个人住房贷款政策',
96
+ url: 'http://www.pbc.gov.cn/',
97
+ },
98
+ {
99
+ name: '房贷利率查询与建议',
100
+ url: 'https://zh.wikipedia.org/wiki/抵押贷款',
101
+ },
102
+ ],
103
+ howTo: howToData,
104
+ schemas: [faqSchema, howToSchema, appSchema],
105
+ seo: [
106
+ {
107
+ type: 'title',
108
+ text: '房贷完全指南:等额本息系统与提前还贷',
109
+ level: 2,
110
+ },
111
+ {
112
+ type: 'paragraph',
113
+ html: '房贷可能是您一生中承担的最大一笔债务。了解等额本息还款系统的工作原理对于做出明智的决定至关重要,这些决定可以为您节省数万元甚至更多的利息。',
114
+ },
115
+ {
116
+ type: 'title',
117
+ text: '等额本息系统的“陷阱”:了解月供的构成',
118
+ level: 3,
119
+ },
120
+ {
121
+ type: 'paragraph',
122
+ html: '大多数房贷使用的是<strong>等额本息还款法</strong>。其主要特点是每月还款额固定(在利率不变的情况下),但其构成本金和利息的比例随时间发生戏剧性的变化。',
123
+ },
124
+ {
125
+ type: 'tip',
126
+ title: '月供的演变',
127
+ html: '<p><strong>初期(第 1-10 年):</strong> 您支付的大部分是利息,归还的本金非常少。在利率为 3% 的 250 万元贷款中,您的第一笔还款可能包含 80% 的利息。</p><p><strong>中期(第 11-25 年):</strong> 比例逐渐趋于平衡。</p><p><strong>后期(第 26-30 年):</strong> 您支付的几乎全是本金,利息非常少。</p>',
128
+ },
129
+ {
130
+ type: 'paragraph',
131
+ html: '因此,如果您打算<strong>提前还房贷</strong>,在贷款初期进行还款要划算得多。在第 1 年提前还款 10 万元节省的未来利息,远多于在第 20 年进行同样的提前还款。',
132
+ },
133
+ {
134
+ type: 'title',
135
+ text: '我应该把多少钱投入到房贷中?',
136
+ level: 3,
137
+ },
138
+ {
139
+ type: 'paragraph',
140
+ html: '专家建议房贷月供<strong>不应超过每月净收入的 30-35%</strong>。如果您超过这个阈值,在遇到意外情况(失业、疾病等)时,违约风险会显著增加。',
141
+ },
142
+ {
143
+ type: 'title',
144
+ text: '2026 年背景:固定利率 vs 浮动利率',
145
+ level: 3,
146
+ },
147
+ {
148
+ type: 'paragraph',
149
+ html: '在利率波动的背景下,选择<strong>固定利率</strong>还是<strong>浮动利率</strong>是一项重要的战略决策,每年可能会导致数千元的支出差异。',
150
+ },
151
+ {
152
+ type: 'comparative',
153
+ columns: 2,
154
+ items: [
155
+ {
156
+ title: '固定利率',
157
+ description: '虽然现在支付稍多,但因为月供永远不会增加,您可以安稳入睡。',
158
+ points: [
159
+ '整个还款期内月供可预测',
160
+ '防范利率上升风险',
161
+ '在经济不确定时获得心理安宁',
162
+ '非常适合预算紧凑的家庭',
163
+ ],
164
+ },
165
+ {
166
+ title: '浮动利率',
167
+ description: '今天可能更便宜,但会让您的经济暴露在波动风险之下。',
168
+ highlight: true,
169
+ points: [
170
+ '初始月供较低',
171
+ '面临 LPR 上调风险',
172
+ '对家庭预算可能有严重影响',
173
+ '仅适合能承受较高风险的用户',
174
+ ],
175
+ },
176
+ ],
177
+ },
178
+ {
179
+ type: 'tip',
180
+ title: '选择固定还是浮动取决于您的个人情况',
181
+ html: '<p><strong>选择固定利率,如果:</strong> 您的预算紧凑,追求确定性,且无法接受每月出现的意外支出。</p><p><strong>选择浮动利率,如果:</strong> 您有财务缓冲,认为利率会下降,或者贷款金额较小、期限较短。</p>',
182
+ },
183
+ ],
184
+ ui: {
185
+ labelTitle: '房贷计算器',
186
+ labelLoanAmount: '贷款金额',
187
+ labelInterestRate: '利率 (%)',
188
+ labelYears: '期限 (年)',
189
+ labelMonthlyExtra: '每月额外还款',
190
+ labelMonthlyPayment: '每月月供',
191
+ labelMonthCount: '个月',
192
+ labelSavingsCard: '您的潜在节省额',
193
+ labelSavingsInterest: '利息节省',
194
+ labelSavingsTime: '时间缩短',
195
+ labelTimelineComparison: '还款跨度对比',
196
+ labelTimelineOriginal: '原定还款期',
197
+ labelTimelineOptimized: '提前还款后期期限',
198
+ labelCostBreakdown: '总成本明细',
199
+ labelBorrowed: '贷款额',
200
+ labelTotalBorrowed: '借款总本金',
201
+ labelTotalInterest: '累计总利息',
202
+ labelAmortizationTable: '还款表',
203
+ labelTableHeader: '查看完整计划表',
204
+ labelViewAll: '查看全部',
205
+ labelPaid: '房贷已结清',
206
+ labelTableMonth: '月份',
207
+ labelTableInterest: '利息',
208
+ labelTablePrincipal: '本金',
209
+ labelTableExtra: '额外',
210
+ labelTableBalance: '余额',
211
+ labelMoreMonths: '更多月份',
212
+ labelMonth: '月',
213
+ currencySymbol: '¥',
214
+ currencyCode: 'CNY',
215
+ currencyLocale: 'zh-CN',
216
+ monthPlural: '个月',
217
+ yearPlural: '年',
218
+ },
219
+ };
@@ -7,10 +7,6 @@ import type { MortgageUI } from './ui';
7
7
 
8
8
  export type MortgageLocaleContent = ToolLocaleContent<MortgageUI>;
9
9
 
10
- import { content as es } from './i18n/es';
11
- import { content as en } from './i18n/en';
12
- import { content as fr } from './i18n/fr';
13
-
14
10
  export const mortgage: FinanceToolEntry<MortgageUI> = {
15
11
  id: 'hipoteca',
16
12
  icons: {
@@ -18,9 +14,21 @@ export const mortgage: FinanceToolEntry<MortgageUI> = {
18
14
  fg: 'mdi:percent',
19
15
  },
20
16
  i18n: {
21
- es: async () => es,
22
- en: async () => en,
23
- fr: async () => fr,
17
+ de: () => import('./i18n/de').then((m) => m.content),
18
+ en: () => import('./i18n/en').then((m) => m.content),
19
+ es: () => import('./i18n/es').then((m) => m.content),
20
+ fr: () => import('./i18n/fr').then((m) => m.content),
21
+ id: () => import('./i18n/id').then((m) => m.content),
22
+ it: () => import('./i18n/it').then((m) => m.content),
23
+ ja: () => import('./i18n/ja').then((m) => m.content),
24
+ ko: () => import('./i18n/ko').then((m) => m.content),
25
+ nl: () => import('./i18n/nl').then((m) => m.content),
26
+ pl: () => import('./i18n/pl').then((m) => m.content),
27
+ pt: () => import('./i18n/pt').then((m) => m.content),
28
+ ru: () => import('./i18n/ru').then((m) => m.content),
29
+ sv: () => import('./i18n/sv').then((m) => m.content),
30
+ tr: () => import('./i18n/tr').then((m) => m.content),
31
+ zh: () => import('./i18n/zh').then((m) => m.content),
24
32
  },
25
33
  };
26
34