@jjlmoya/utils-finance 1.3.0 → 1.6.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 (168) hide show
  1. package/package.json +2 -1
  2. package/src/tests/faq_count.test.ts +1 -1
  3. package/src/tests/i18n_coverage.test.ts +36 -0
  4. package/src/tests/locale_completeness.test.ts +3 -0
  5. package/src/tests/slug_uniqueness.test.ts +81 -0
  6. package/src/tests/title_quality.test.ts +1 -1
  7. package/src/tool/compoundInterest/i18n/de.ts +208 -0
  8. package/src/tool/compoundInterest/i18n/id.ts +208 -0
  9. package/src/tool/compoundInterest/i18n/it.ts +208 -0
  10. package/src/tool/compoundInterest/i18n/ja.ts +207 -0
  11. package/src/tool/compoundInterest/i18n/ko.ts +207 -0
  12. package/src/tool/compoundInterest/i18n/nl.ts +208 -0
  13. package/src/tool/compoundInterest/i18n/pl.ts +208 -0
  14. package/src/tool/compoundInterest/i18n/pt.ts +208 -0
  15. package/src/tool/compoundInterest/i18n/ru.ts +208 -0
  16. package/src/tool/compoundInterest/i18n/sv.ts +208 -0
  17. package/src/tool/compoundInterest/i18n/tr.ts +208 -0
  18. package/src/tool/compoundInterest/i18n/zh.ts +202 -0
  19. package/src/tool/compoundInterest/index.ts +15 -7
  20. package/src/tool/courtFeeCalculator/i18n/de.ts +152 -0
  21. package/src/tool/courtFeeCalculator/i18n/fr.ts +1 -1
  22. package/src/tool/courtFeeCalculator/i18n/id.ts +152 -0
  23. package/src/tool/courtFeeCalculator/i18n/it.ts +152 -0
  24. package/src/tool/courtFeeCalculator/i18n/ja.ts +152 -0
  25. package/src/tool/courtFeeCalculator/i18n/ko.ts +152 -0
  26. package/src/tool/courtFeeCalculator/i18n/nl.ts +152 -0
  27. package/src/tool/courtFeeCalculator/i18n/pl.ts +152 -0
  28. package/src/tool/courtFeeCalculator/i18n/pt.ts +152 -0
  29. package/src/tool/courtFeeCalculator/i18n/ru.ts +152 -0
  30. package/src/tool/courtFeeCalculator/i18n/sv.ts +152 -0
  31. package/src/tool/courtFeeCalculator/i18n/tr.ts +152 -0
  32. package/src/tool/courtFeeCalculator/i18n/zh.ts +152 -0
  33. package/src/tool/courtFeeCalculator/index.ts +16 -8
  34. package/src/tool/debtSnowball/i18n/de.ts +160 -0
  35. package/src/tool/debtSnowball/i18n/id.ts +160 -0
  36. package/src/tool/debtSnowball/i18n/it.ts +160 -0
  37. package/src/tool/debtSnowball/i18n/ja.ts +157 -0
  38. package/src/tool/debtSnowball/i18n/ko.ts +160 -0
  39. package/src/tool/debtSnowball/i18n/nl.ts +160 -0
  40. package/src/tool/debtSnowball/i18n/pl.ts +160 -0
  41. package/src/tool/debtSnowball/i18n/pt.ts +160 -0
  42. package/src/tool/debtSnowball/i18n/ru.ts +160 -0
  43. package/src/tool/debtSnowball/i18n/sv.ts +160 -0
  44. package/src/tool/debtSnowball/i18n/tr.ts +160 -0
  45. package/src/tool/debtSnowball/i18n/zh.ts +160 -0
  46. package/src/tool/debtSnowball/index.ts +17 -9
  47. package/src/tool/fireCalculator/component.astro +12 -3
  48. package/src/tool/fireCalculator/i18n/de.ts +261 -0
  49. package/src/tool/fireCalculator/i18n/en.ts +5 -5
  50. package/src/tool/fireCalculator/i18n/es.ts +2 -2
  51. package/src/tool/fireCalculator/i18n/fr.ts +5 -5
  52. package/src/tool/fireCalculator/i18n/id.ts +261 -0
  53. package/src/tool/fireCalculator/i18n/it.ts +261 -0
  54. package/src/tool/fireCalculator/i18n/ja.ts +261 -0
  55. package/src/tool/fireCalculator/i18n/ko.ts +261 -0
  56. package/src/tool/fireCalculator/i18n/nl.ts +261 -0
  57. package/src/tool/fireCalculator/i18n/pl.ts +261 -0
  58. package/src/tool/fireCalculator/i18n/pt.ts +261 -0
  59. package/src/tool/fireCalculator/i18n/ru.ts +261 -0
  60. package/src/tool/fireCalculator/i18n/sv.ts +261 -0
  61. package/src/tool/fireCalculator/i18n/tr.ts +261 -0
  62. package/src/tool/fireCalculator/i18n/zh.ts +261 -0
  63. package/src/tool/fireCalculator/index.ts +15 -7
  64. package/src/tool/ibanBicSwiftConverter/i18n/de.ts +128 -0
  65. package/src/tool/ibanBicSwiftConverter/i18n/id.ts +128 -0
  66. package/src/tool/ibanBicSwiftConverter/i18n/it.ts +128 -0
  67. package/src/tool/ibanBicSwiftConverter/i18n/ja.ts +128 -0
  68. package/src/tool/ibanBicSwiftConverter/i18n/ko.ts +128 -0
  69. package/src/tool/ibanBicSwiftConverter/i18n/nl.ts +128 -0
  70. package/src/tool/ibanBicSwiftConverter/i18n/pl.ts +128 -0
  71. package/src/tool/ibanBicSwiftConverter/i18n/pt.ts +128 -0
  72. package/src/tool/ibanBicSwiftConverter/i18n/ru.ts +128 -0
  73. package/src/tool/ibanBicSwiftConverter/i18n/sv.ts +128 -0
  74. package/src/tool/ibanBicSwiftConverter/i18n/tr.ts +128 -0
  75. package/src/tool/ibanBicSwiftConverter/i18n/zh.ts +128 -0
  76. package/src/tool/ibanBicSwiftConverter/index.ts +15 -7
  77. package/src/tool/inflation/i18n/de.ts +297 -0
  78. package/src/tool/inflation/i18n/id.ts +297 -0
  79. package/src/tool/inflation/i18n/it.ts +297 -0
  80. package/src/tool/inflation/i18n/ja.ts +297 -0
  81. package/src/tool/inflation/i18n/ko.ts +297 -0
  82. package/src/tool/inflation/i18n/nl.ts +297 -0
  83. package/src/tool/inflation/i18n/pl.ts +297 -0
  84. package/src/tool/inflation/i18n/pt.ts +297 -0
  85. package/src/tool/inflation/i18n/ru.ts +297 -0
  86. package/src/tool/inflation/i18n/sv.ts +297 -0
  87. package/src/tool/inflation/i18n/tr.ts +297 -0
  88. package/src/tool/inflation/i18n/zh.ts +297 -0
  89. package/src/tool/inflation/index.ts +17 -9
  90. package/src/tool/lateInterest/i18n/de.ts +224 -0
  91. package/src/tool/lateInterest/i18n/id.ts +224 -0
  92. package/src/tool/lateInterest/i18n/it.ts +224 -0
  93. package/src/tool/lateInterest/i18n/ja.ts +224 -0
  94. package/src/tool/lateInterest/i18n/ko.ts +224 -0
  95. package/src/tool/lateInterest/i18n/nl.ts +224 -0
  96. package/src/tool/lateInterest/i18n/pl.ts +224 -0
  97. package/src/tool/lateInterest/i18n/pt.ts +224 -0
  98. package/src/tool/lateInterest/i18n/ru.ts +224 -0
  99. package/src/tool/lateInterest/i18n/sv.ts +224 -0
  100. package/src/tool/lateInterest/i18n/tr.ts +224 -0
  101. package/src/tool/lateInterest/i18n/zh.ts +224 -0
  102. package/src/tool/lateInterest/index.ts +17 -9
  103. package/src/tool/legalInterestRate/i18n/de.ts +143 -0
  104. package/src/tool/legalInterestRate/i18n/id.ts +143 -0
  105. package/src/tool/legalInterestRate/i18n/it.ts +143 -0
  106. package/src/tool/legalInterestRate/i18n/ja.ts +143 -0
  107. package/src/tool/legalInterestRate/i18n/ko.ts +143 -0
  108. package/src/tool/legalInterestRate/i18n/nl.ts +143 -0
  109. package/src/tool/legalInterestRate/i18n/pl.ts +143 -0
  110. package/src/tool/legalInterestRate/i18n/pt.ts +143 -0
  111. package/src/tool/legalInterestRate/i18n/ru.ts +143 -0
  112. package/src/tool/legalInterestRate/i18n/sv.ts +143 -0
  113. package/src/tool/legalInterestRate/i18n/tr.ts +143 -0
  114. package/src/tool/legalInterestRate/i18n/zh.ts +143 -0
  115. package/src/tool/legalInterestRate/index.ts +17 -9
  116. package/src/tool/lotteryOptimizer/i18n/de.ts +177 -0
  117. package/src/tool/lotteryOptimizer/i18n/id.ts +177 -0
  118. package/src/tool/lotteryOptimizer/i18n/it.ts +177 -0
  119. package/src/tool/lotteryOptimizer/i18n/ja.ts +177 -0
  120. package/src/tool/lotteryOptimizer/i18n/ko.ts +177 -0
  121. package/src/tool/lotteryOptimizer/i18n/nl.ts +177 -0
  122. package/src/tool/lotteryOptimizer/i18n/pl.ts +177 -0
  123. package/src/tool/lotteryOptimizer/i18n/pt.ts +177 -0
  124. package/src/tool/lotteryOptimizer/i18n/ru.ts +177 -0
  125. package/src/tool/lotteryOptimizer/i18n/sv.ts +177 -0
  126. package/src/tool/lotteryOptimizer/i18n/tr.ts +177 -0
  127. package/src/tool/lotteryOptimizer/i18n/zh.ts +177 -0
  128. package/src/tool/lotteryOptimizer/index.ts +17 -9
  129. package/src/tool/mortgage/i18n/de.ts +223 -0
  130. package/src/tool/mortgage/i18n/id.ts +219 -0
  131. package/src/tool/mortgage/i18n/it.ts +223 -0
  132. package/src/tool/mortgage/i18n/ja.ts +219 -0
  133. package/src/tool/mortgage/i18n/ko.ts +219 -0
  134. package/src/tool/mortgage/i18n/nl.ts +219 -0
  135. package/src/tool/mortgage/i18n/pl.ts +219 -0
  136. package/src/tool/mortgage/i18n/pt.ts +219 -0
  137. package/src/tool/mortgage/i18n/ru.ts +219 -0
  138. package/src/tool/mortgage/i18n/sv.ts +219 -0
  139. package/src/tool/mortgage/i18n/tr.ts +219 -0
  140. package/src/tool/mortgage/i18n/zh.ts +219 -0
  141. package/src/tool/mortgage/index.ts +15 -7
  142. package/src/tool/percentageCalculator/i18n/de.ts +229 -0
  143. package/src/tool/percentageCalculator/i18n/id.ts +229 -0
  144. package/src/tool/percentageCalculator/i18n/it.ts +229 -0
  145. package/src/tool/percentageCalculator/i18n/ja.ts +229 -0
  146. package/src/tool/percentageCalculator/i18n/ko.ts +229 -0
  147. package/src/tool/percentageCalculator/i18n/nl.ts +229 -0
  148. package/src/tool/percentageCalculator/i18n/pl.ts +229 -0
  149. package/src/tool/percentageCalculator/i18n/pt.ts +229 -0
  150. package/src/tool/percentageCalculator/i18n/ru.ts +229 -0
  151. package/src/tool/percentageCalculator/i18n/sv.ts +229 -0
  152. package/src/tool/percentageCalculator/i18n/tr.ts +229 -0
  153. package/src/tool/percentageCalculator/i18n/zh.ts +229 -0
  154. package/src/tool/percentageCalculator/index.ts +15 -7
  155. package/src/tool/rentIncreaseCalculator/i18n/de.ts +136 -0
  156. package/src/tool/rentIncreaseCalculator/i18n/id.ts +136 -0
  157. package/src/tool/rentIncreaseCalculator/i18n/it.ts +136 -0
  158. package/src/tool/rentIncreaseCalculator/i18n/ja.ts +136 -0
  159. package/src/tool/rentIncreaseCalculator/i18n/ko.ts +136 -0
  160. package/src/tool/rentIncreaseCalculator/i18n/nl.ts +136 -0
  161. package/src/tool/rentIncreaseCalculator/i18n/pl.ts +136 -0
  162. package/src/tool/rentIncreaseCalculator/i18n/pt.ts +136 -0
  163. package/src/tool/rentIncreaseCalculator/i18n/ru.ts +136 -0
  164. package/src/tool/rentIncreaseCalculator/i18n/sv.ts +136 -0
  165. package/src/tool/rentIncreaseCalculator/i18n/tr.ts +136 -0
  166. package/src/tool/rentIncreaseCalculator/i18n/zh.ts +136 -0
  167. package/src/tool/rentIncreaseCalculator/index.ts +17 -9
  168. package/src/types.ts +1 -1
@@ -0,0 +1,261 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { FIRECalculatorUI } from '../ui';
4
+
5
+ const slug = 'four-percent-rule-fire-calculator';
6
+ const title = 'FIRE 计算器:实现财务自由的 4% 法则';
7
+ const description = '使用 4% 法则计算实现财务独立所需积累的“魔法数字”。规划您的提前退休生活,并可视化通往经济自由的道路。';
8
+
9
+ const faqData = [
10
+ {
11
+ question: '什么是 4% 法则?',
12
+ answer: '4% 法则是基于“三一研究”(Trinity Study)的一种提款策略。它指出,如果您在退休的第一年提取资产的 4%,并在随后的几年中根据通货膨胀进行调整,您可以在 30 年内不耗尽资金。',
13
+ },
14
+ {
15
+ question: '什么是 FIRE?',
16
+ answer: 'FIRE 代表 Financial Independence, Retire Early(财务独立,提前退休)。这是一个旨在通过积极储蓄和聪明投资的结合来实现经济自由的运动。',
17
+ },
18
+ {
19
+ question: '我的魔法数字是多少?',
20
+ answer: '您的魔法数字是您需要积累的总资产,以便在不工作的情况下仅靠投资收益生活。它的计算方法是将您的年度支出除以安全提款率(通常为 4%)。',
21
+ },
22
+ {
23
+ question: 'Lean、Barista 和 Fat FIRE 有什么区别?',
24
+ answer: 'Lean FIRE 是以最低支出生活(当前支出的 70%),Barista FIRE 是在投资收益覆盖一半支出的同时兼职工作(支出的 50%),而 Fat FIRE 则拥有优渥的生活方式(支出的 150%)。',
25
+ },
26
+ {
27
+ question: '4% 法则现实吗?',
28
+ answer: '从历史数据来看,在 50/50 的股票/债券投资组合中,4% 法则在 30 年内的成功概率为 95%。但是,它未考虑序列收益风险,且主要基于美国市场数据。',
29
+ },
30
+ ];
31
+
32
+ const howToData = [
33
+ {
34
+ name: '计算您的每月支出',
35
+ text: '分析您每个月的实际花费,包括住房、食物、服务和娱乐。',
36
+ },
37
+ {
38
+ name: '选择您的安全提款率',
39
+ text: '4% 法则是标准,但您可以根据风险承受能力在 2.5%(较保守)到 6%(较激进)之间进行调整。',
40
+ },
41
+ {
42
+ name: '输入您当前的资产',
43
+ text: '加总您的投资、储蓄以及能产生被动收入的情况。',
44
+ },
45
+ {
46
+ name: '可视化进度',
47
+ text: '观察增长图表和自由里程碑(Lean, Barista, Fat FIRE),了解您何时能达成目标。',
48
+ },
49
+ ];
50
+
51
+ const bibliographyData = [
52
+ {
53
+ name: 'The Trinity Study: Portfolio Survivability',
54
+ url: 'https://en.wikipedia.org/wiki/Trinity_study',
55
+ },
56
+ {
57
+ name: 'Early Retirement Forum - 4% Rule Discussion',
58
+ url: 'https://www.bogleheads.org/forum/',
59
+ },
60
+ {
61
+ name: 'Shiller CAPE Index - Market Valuations',
62
+ url: 'https://www.multpl.com/shiller-pe',
63
+ },
64
+ {
65
+ name: 'Bogleheads - 投资指南',
66
+ url: 'https://bogleheads.es/',
67
+ },
68
+ ];
69
+
70
+ const faqSchema: WithContext<FAQPage> = {
71
+ '@context': 'https://schema.org',
72
+ '@type': 'FAQPage',
73
+ mainEntity: faqData.map((item) => ({
74
+ '@type': 'Question',
75
+ name: item.question,
76
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
77
+ })),
78
+ };
79
+
80
+ const howToSchema: WithContext<HowTo> = {
81
+ '@context': 'https://schema.org',
82
+ '@type': 'HowTo',
83
+ name: title,
84
+ description,
85
+ step: howToData.map((step, i) => ({
86
+ '@type': 'HowToStep',
87
+ position: i + 1,
88
+ name: step.name,
89
+ text: step.text,
90
+ })),
91
+ };
92
+
93
+ const appSchema: WithContext<SoftwareApplication> = {
94
+ '@context': 'https://schema.org',
95
+ '@type': 'SoftwareApplication',
96
+ name: title,
97
+ description,
98
+ applicationCategory: 'FinanceApplication',
99
+ operatingSystem: 'All',
100
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'CNY' },
101
+ inLanguage: 'zh',
102
+ };
103
+
104
+ export const content: ToolLocaleContent<FIRECalculatorUI> = {
105
+ slug,
106
+ title,
107
+ description,
108
+ faqTitle: '关于 FIRE 的常见问题',
109
+ faq: faqData,
110
+ bibliographyTitle: '来源与参考',
111
+ bibliography: bibliographyData,
112
+ howTo: howToData,
113
+ schemas: [faqSchema, howToSchema, appSchema],
114
+ seo: [
115
+ {
116
+ type: 'title',
117
+ text: '4% 法则:提前退休的圣杯',
118
+ level: 2,
119
+ },
120
+ {
121
+ type: 'paragraph',
122
+ html: '探索如何计算实现永续投资收益生活所需的资产规模。<strong>4% 法则</strong>源于 1998 年由三位财务教授进行的“三一研究”。他们分析了自 1926 年以来的历史数据,以确定每年可以提取多大比例的资金而不会在 30 年内耗尽投资组合。',
123
+ },
124
+ {
125
+ type: 'stats',
126
+ columns: 4,
127
+ items: [
128
+ { value: '95%', label: '历史成功率' },
129
+ { value: '50/50', label: '股债比例' },
130
+ { value: '30年', label: '规划周期' },
131
+ { value: '4%', label: '安全取款' },
132
+ ],
133
+ },
134
+ {
135
+ type: 'title',
136
+ text: '什么是 FIRE 运动?',
137
+ level: 3,
138
+ },
139
+ {
140
+ type: 'list',
141
+ items: [
142
+ 'FIRE 是 Financial Independence, Retire Early(财务独立,提前退休)的首字母缩写。',
143
+ '追求在金钱不再是限制因素的情况下,选择如何支配时间的自由。',
144
+ '基于储蓄的最优化和聪明投资。',
145
+ '目标是让您的资产产生足够的现金流来覆盖支出。',
146
+ ],
147
+ },
148
+ {
149
+ type: 'title',
150
+ text: '财务自由的类型',
151
+ level: 3,
152
+ },
153
+ {
154
+ type: 'comparative',
155
+ columns: 3,
156
+ items: [
157
+ {
158
+ title: 'Lean FIRE',
159
+ description: '极简生活方式。仅覆盖基本的生存开支。',
160
+ points: ['极端储蓄', '极低支出', '节俭的自由'],
161
+ },
162
+ {
163
+ title: 'Barista FIRE',
164
+ description: '一种混合型状态,投资收益覆盖一半支出,另一半通过兼职工作赚取。',
165
+ points: ['为兴趣工作', '社保覆盖', '较低压力'],
166
+ },
167
+ {
168
+ title: 'Fat FIRE',
169
+ description: '拥有充裕预算的退休生活,允许奢侈享受和旅行。',
170
+ points: ['高净值资产', '零限制', '家族传承'],
171
+ },
172
+ ],
173
+ },
174
+ {
175
+ type: 'title',
176
+ text: '如何使用我们的 FIRE 计算器?',
177
+ level: 3,
178
+ },
179
+ {
180
+ type: 'list',
181
+ items: [
182
+ '<strong>支出追踪:</strong>分析您过去 12 个月的实际开支。',
183
+ '<strong>定义 SWR:</strong>根据您的风险承受能力选择安全提款率。',
184
+ '<strong>当前资产:</strong>输入您当前的投资价值。',
185
+ '<strong>储蓄能力:</strong>预测距离目标还需要多长时间。',
186
+ '<strong>可视化分析:</strong>分析您的财富增长图表。',
187
+ ],
188
+ },
189
+ {
190
+ type: 'title',
191
+ text: '4% 法则分析',
192
+ level: 3,
193
+ },
194
+ {
195
+ type: 'comparative',
196
+ columns: 2,
197
+ items: [
198
+ {
199
+ title: '优点',
200
+ description: '为什么 4% 法则有效',
201
+ points: [
202
+ '数学简单,便于快速规划。',
203
+ '基于近一个世纪的历史数据。',
204
+ '可适应任何支出水平。',
205
+ ],
206
+ },
207
+ {
208
+ title: '局限性',
209
+ description: '4% 法则未涵盖的内容',
210
+ points: [
211
+ '未考虑序列收益风险(退休初期的市场暴跌)。',
212
+ '主要基于美国市场。',
213
+ '忽略了当地税制的巨大变动。',
214
+ ],
215
+ },
216
+ ],
217
+ },
218
+ {
219
+ type: 'title',
220
+ text: '关键因素:通货膨胀',
221
+ level: 3,
222
+ },
223
+ {
224
+ type: 'paragraph',
225
+ html: '请记住,今天的 1,000 元在未来购买力将大不如前。使用实际收益率(剔除通胀后)对于保持预测的购买力至关重要。4% 法则假设您每年根据通胀调整提款金额。',
226
+ },
227
+ ],
228
+ ui: {
229
+ labelTitle: 'FIRE 计算器:4% 法则',
230
+ labelDescription: '使用 4% 法则计算实现财务独立所需积累的魔法数字,并可视化通往自由的里程碑。',
231
+ labelMonthlyExpenses: '每月支出',
232
+ labelSWR: '提取率 (SWR)',
233
+ labelCurrentWorth: '当前资产',
234
+ labelMonthlySavings: '每月储蓄能力',
235
+ labelAnnualReturn: '预估收益率 (税后)',
236
+ labelFreedomMilestones: '自由里程碑',
237
+ labelLeanFIRE: 'Lean FIRE (70% 存活率)',
238
+ labelBaristaFIRE: 'Barista FIRE (50% 收入)',
239
+ labelFatFIRE: 'Fat FIRE (150% 豪华)',
240
+ labelMagicNumber: '您的自由魔法数字',
241
+ labelMagicNumberDesc: '靠投资收益生活所需的资本',
242
+ labelTimeRemaining: '距离财务自由的时间',
243
+ labelTimeRemainingFormat: '还差 {years} 年 {months} 个月',
244
+ labelAlreadyFI: '您已实现财务自由!',
245
+ labelUnachievable: '以目前的储蓄无法达成目标',
246
+ labelHiddenCostsChecklist: '隐藏支出清单',
247
+ labelHealth: '医疗保险 (+2000元)',
248
+ labelTaxes: '税收 (+1500元)',
249
+ labelHome: '房屋维护 (+1000元)',
250
+ labelTravel: '旅行与休闲 (+3000元)',
251
+ labelEmergency: '应急基金 (+1000元)',
252
+ labelSubscriptions: '订阅服务 (+500元)',
253
+ labelAdded: '已添加:',
254
+ labelSavePlan: '保存计划',
255
+ labelSWRTooltip: '安全提取率 (Safe Withdrawal Rate):每年可以提取的资产百分比,且不会耗尽资金。',
256
+ labelReturnTooltip: '年化市场回报率(已扣除通胀)。历史标准为 7%。',
257
+ currencySymbol: '¥',
258
+ currencyCode: 'CNY',
259
+ currencyLocale: 'zh-CN',
260
+ },
261
+ };
@@ -6,10 +6,6 @@ import type { FIRECalculatorUI } from './ui';
6
6
 
7
7
  export type FIRECalculatorLocaleContent = ToolLocaleContent<FIRECalculatorUI>;
8
8
 
9
- import { content as es } from './i18n/es';
10
- import { content as en } from './i18n/en';
11
- import { content as fr } from './i18n/fr';
12
-
13
9
  export const fireCalculator: FinanceToolEntry<FIRECalculatorUI> = {
14
10
  id: 'calculadora-regla-4-por-ciento-fire',
15
11
  icons: {
@@ -17,9 +13,21 @@ export const fireCalculator: FinanceToolEntry<FIRECalculatorUI> = {
17
13
  fg: 'mdi:trending-up',
18
14
  },
19
15
  i18n: {
20
- es: async () => es,
21
- en: async () => en,
22
- fr: async () => fr,
16
+ de: () => import('./i18n/de').then((m) => m.content),
17
+ en: () => import('./i18n/en').then((m) => m.content),
18
+ es: () => import('./i18n/es').then((m) => m.content),
19
+ fr: () => import('./i18n/fr').then((m) => m.content),
20
+ id: () => import('./i18n/id').then((m) => m.content),
21
+ it: () => import('./i18n/it').then((m) => m.content),
22
+ ja: () => import('./i18n/ja').then((m) => m.content),
23
+ ko: () => import('./i18n/ko').then((m) => m.content),
24
+ nl: () => import('./i18n/nl').then((m) => m.content),
25
+ pl: () => import('./i18n/pl').then((m) => m.content),
26
+ pt: () => import('./i18n/pt').then((m) => m.content),
27
+ ru: () => import('./i18n/ru').then((m) => m.content),
28
+ sv: () => import('./i18n/sv').then((m) => m.content),
29
+ tr: () => import('./i18n/tr').then((m) => m.content),
30
+ zh: () => import('./i18n/zh').then((m) => m.content),
23
31
  },
24
32
  };
25
33
 
@@ -0,0 +1,128 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { IBANBICSwiftUI } from '../ui';
4
+
5
+ const slug = 'iban-bic-swift-konverter';
6
+ const title = 'IBAN zu BIC SWIFT Konverter und Banksuche';
7
+ const description = 'Erhalten Sie sofort den BIC/SWIFT-Code für jede spanische IBAN. Bankkonten-Validierer mit offiziellem Algorithmus für Überweisungen.';
8
+
9
+ const faqData = [
10
+ {
11
+ question: 'Was ist der BIC- oder SWIFT-Code?',
12
+ answer: 'Es ist die internationale Kennung Ihrer Bank. Er ist notwendig, damit das Geld weiß, an welches Institut es gesendet werden soll, wenn es die SEPA-Zone (Europa) verlässt.',
13
+ },
14
+ {
15
+ question: 'Wie finde ich den BIC meiner Bank heraus?',
16
+ answer: 'Sie können ihn in Ihrem Online-Banking einsehen oder unseren Konverter nutzen. Für spanische Banken extrahieren wir durch Eingabe der IBAN den Institutscode und geben Ihnen den entsprechenden BIC an.',
17
+ },
18
+ {
19
+ question: 'Ist es sicher, meine IBAN hier einzugeben?',
20
+ answer: 'Absolut. Unser Tool validiert den Code lokal in Ihrem Browser. Wir speichern oder senden Ihre Bankdaten an keinen externen Server.',
21
+ },
22
+ {
23
+ question: 'Warum hat die IBAN in Spanien 24 Zeichen?',
24
+ answer: 'Das ist eine Standardnorm. Die ersten 4 Zeichen identifizieren das Land und die Kontrolle, die anderen 20 sind die alte Kontonummer.',
25
+ },
26
+ ];
27
+
28
+ const howToData = [
29
+ {
30
+ name: 'IBAN suchen',
31
+ text: 'Sie finden sie auf Ihrer Bankkarte, in Ihrem Sparbuch oder in Ihrem Online-Banking-Profil.',
32
+ },
33
+ {
34
+ name: 'In den Validierer eingeben',
35
+ text: 'Schreiben oder kopieren Sie den vollständigen Code hinein. Unser System formatiert ihn zur besseren Lesbarkeit automatisch.',
36
+ },
37
+ {
38
+ name: 'Konvertierung starten',
39
+ text: 'Das System validiert die Korrektheit der Prüfziffern mithilfe des Modulo-97-Algorithmus.',
40
+ },
41
+ {
42
+ name: 'Ergebnis kopieren',
43
+ text: 'Sie erhalten den BIC/SWIFT-Code und den Namen des Bankinstituts zum Kopieren bereitzustellen.',
44
+ },
45
+ ];
46
+
47
+ const bibliographyData = [
48
+ {
49
+ name: 'ISO 13616: Internationaler IBAN-Standard',
50
+ url: 'https://www.iso.org/',
51
+ },
52
+ {
53
+ name: 'SWIFT: Globales BIC-Register',
54
+ url: 'https://www.theswiftcodes.com/',
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<IBANBICSwiftUI> = {
91
+ slug,
92
+ title,
93
+ description,
94
+ faqTitle: 'Häufig gestellte Fragen',
95
+ faq: faqData,
96
+ bibliographyTitle: 'Quellen und Referenzen',
97
+ bibliography: bibliographyData,
98
+ howTo: howToData,
99
+ schemas: [faqSchema, howToSchema, appSchema],
100
+ seo: [
101
+ {
102
+ type: 'title',
103
+ text: 'IBAN zu BIC/SWIFT Konverter: Alles Wissenswerte über Ihre Bankcodes',
104
+ level: 2,
105
+ },
106
+ {
107
+ type: 'paragraph',
108
+ html: 'In der Welt der internationalen Finanzen dominieren zwei Akronyme jede Überweisung: <strong>IBAN</strong> und <strong>BIC</strong> (auch als SWIFT bekannt).',
109
+ },
110
+ ],
111
+ ui: {
112
+ labelTitle: 'IBAN zu BIC / SWIFT Konverter',
113
+ labelDescription: 'Berechnen Sie sofort den BIC-Code jedes spanischen Bankkontos.',
114
+ labelInputIBAN: 'IBAN eingeben',
115
+ labelInputPlaceholder: 'ES00 0000 0000 0000 0000 0000',
116
+ labelButtonConvert: 'BIC-Code abrufen',
117
+ labelBIC: 'BIC / SWIFT Code',
118
+ labelCountry: 'Land / Format',
119
+ labelBank: 'Bankinstitut',
120
+ labelError: 'Die eingegebene IBAN scheint ungültig zu sein. Überprüfen Sie die Ziffern.',
121
+ labelCopyButton: 'Kopieren',
122
+ labelCopied: 'Kopiert',
123
+ labelBankNotIdentified: 'Institut nicht identifiziert',
124
+ labelBankOutsideSpain: 'Bank außerhalb Spaniens (Eingeschränkte Daten)',
125
+ labelInvalidIBAN: 'IBAN ungültig',
126
+ labelFormattingOK: 'Format OK',
127
+ },
128
+ };
@@ -0,0 +1,128 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { IBANBICSwiftUI } from '../ui';
4
+
5
+ const slug = 'konverter-iban-ke-bic-swift';
6
+ const title = 'Konverter IBAN ke BIC SWIFT dan Pencarian Bank';
7
+ const description = 'Dapatkan kode BIC/SWIFT dari IBAN Spanyol mana pun secara instan. Validator akun bank dengan algoritma resmi untuk transfer.';
8
+
9
+ const faqData = [
10
+ {
11
+ question: 'Apa itu kode BIC atau SWIFT?',
12
+ answer: 'Ini adalah pengenal internasional bank Anda. Kode ini diperlukan agar uang mengetahui ke lembaga mana ia harus dituju saat dikirim ke luar zona SEPA (Eropa).',
13
+ },
14
+ {
15
+ question: 'Bagaimana cara mengetahui BIC bank saya?',
16
+ answer: 'Anda dapat melihatnya di perbankan online Anda atau menggunakan konverter kami. Untuk bank-bank Spanyol, cukup masukkan IBAN, dan kami akan mengekstrak kode lembaga serta memberikan BIC yang sesuai.',
17
+ },
18
+ {
19
+ question: 'Apakah aman memasukkan IBAN saya di sini?',
20
+ answer: 'Sangat aman. Alat kami memvalidasi kode secara lokal di browser Anda. Kami tidak menyimpan atau mengirim data perbankan Anda ke server eksternal mana pun.',
21
+ },
22
+ {
23
+ question: 'Mengapa IBAN di Spanyol memiliki 24 karakter?',
24
+ answer: 'Ini adalah norma standar. 4 Karakter pertama mengidentifikasi negara dan kontrol, dan 20 lainnya adalah nomor rekening lama.',
25
+ },
26
+ ];
27
+
28
+ const howToData = [
29
+ {
30
+ name: 'Cari IBAN Anda',
31
+ text: 'Anda akan menemukannya di kartu bank, buku tabungan, atau profil perbankan online Anda.',
32
+ },
33
+ {
34
+ name: 'Masukkan ke dalam validator',
35
+ text: 'Tulis atau tempel kode lengkapnya. Sistem kami akan memformatnya secara otomatis untuk memudahkan pembacaan.',
36
+ },
37
+ {
38
+ name: 'Tekan tombol konversi',
39
+ text: 'Sistem akan memvalidasi bahwa digit kontrol sudah benar menggunakan algoritma Modulo 97.',
40
+ },
41
+ {
42
+ name: 'Salin hasilnya',
43
+ text: 'Anda akan mendapatkan kode BIC/SWIFT dan nama lembaga perbankan yang siap untuk disalin dan digunakan.',
44
+ },
45
+ ];
46
+
47
+ const bibliographyData = [
48
+ {
49
+ name: 'ISO 13616: Standar Internasional IBAN',
50
+ url: 'https://www.iso.org/',
51
+ },
52
+ {
53
+ name: 'SWIFT: Registri BIC Global',
54
+ url: 'https://www.theswiftcodes.com/',
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<IBANBICSwiftUI> = {
91
+ slug,
92
+ title,
93
+ description,
94
+ faqTitle: 'Pertanyaan Umum',
95
+ faq: faqData,
96
+ bibliographyTitle: 'Sumber dan Referensi',
97
+ bibliography: bibliographyData,
98
+ howTo: howToData,
99
+ schemas: [faqSchema, howToSchema, appSchema],
100
+ seo: [
101
+ {
102
+ type: 'title',
103
+ text: 'Konverter IBAN ke BIC/SWIFT: Segala Hal yang Perlu Anda Ketahui tentang Kode Bank Anda',
104
+ level: 2,
105
+ },
106
+ {
107
+ type: 'paragraph',
108
+ html: 'Dalam dunia keuangan internasional yang kompleks, dua akronim mendominasi setiap operasi transfer: <strong>IBAN</strong> dan <strong>BIC</strong> (juga dikenal sebagai SWIFT).',
109
+ },
110
+ ],
111
+ ui: {
112
+ labelTitle: 'Konverter IBAN ke BIC / SWIFT',
113
+ labelDescription: 'Hitung kode BIC dari akun bank Spanyol mana pun secara instan.',
114
+ labelInputIBAN: 'Masukkan IBAN Anda',
115
+ labelInputPlaceholder: 'ES00 0000 0000 0000 0000 0000',
116
+ labelButtonConvert: 'Dapatkan Kode BIC',
117
+ labelBIC: 'Kode BIC / SWIFT',
118
+ labelCountry: 'Negara / Format',
119
+ labelBank: 'Lembaga Perbankan',
120
+ labelError: 'IBAN yang dimasukkan tampaknya tidak valid. Periksa kembali digitnya.',
121
+ labelCopyButton: 'Salin',
122
+ labelCopied: 'Tersalin',
123
+ labelBankNotIdentified: 'Lembaga tidak teridentifikasi',
124
+ labelBankOutsideSpain: 'Bank di luar Spanyol (Data terbatas)',
125
+ labelInvalidIBAN: 'IBAN Tidak Valid',
126
+ labelFormattingOK: 'Format OK',
127
+ },
128
+ };
@@ -0,0 +1,128 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { IBANBICSwiftUI } from '../ui';
4
+
5
+ const slug = 'convertitore-iban-bic-swift';
6
+ const title = 'Convertitore da IBAN a BIC SWIFT e Ricerca Banche';
7
+ const description = 'Ottieni istantaneamente il codice BIC/SWIFT di qualsiasi IBAN spagnolo. Validatore di conti bancari con algoritmo ufficiale per trasferimenti.';
8
+
9
+ const faqData = [
10
+ {
11
+ question: 'Cos’è il codice BIC o SWIFT?',
12
+ answer: 'È l’identificatore internazionale della tua banca. È necessario affinché il denaro sappia verso quale entità deve dirigersi quando viaggia fuori dalla zona SEPA (Europa).',
13
+ },
14
+ {
15
+ question: 'Come faccio a sapere qual è il BIC della mia banca?',
16
+ answer: 'Puoi consultarlo nel tuo online banking o usare il nostro convertitore. Per le banche spagnole, inserendo l’IBAN, estraiamo il codice dell’entità e ti forniamo il BIC corrispondente.',
17
+ },
18
+ {
19
+ question: 'È sicuro inserire il mio IBAN qui?',
20
+ answer: 'Assolutamente sì. Il nostro strumento convalida il codice localmente nel tuo browser. Non salviamo né inviamo i tuoi dati bancari a nessun server esterno.',
21
+ },
22
+ {
23
+ question: 'Perché l’IBAN ha 24 caratteri in Spagna?',
24
+ answer: 'È una norma standard. I primi 4 identificano il paese e il controllo, e gli altri 20 sono il vecchio numero di conto.',
25
+ },
26
+ ];
27
+
28
+ const howToData = [
29
+ {
30
+ name: 'Cerca il tuo IBAN',
31
+ text: 'Lo troverai sulla tua carta, sul libretto di risparmio o nel profilo del tuo online banking.',
32
+ },
33
+ {
34
+ name: 'Inseriscilo nel validatore',
35
+ text: 'Scrivi o incolla il codice completo. Il nostro sistema lo formatterà automaticamente per facilitare la lettura.',
36
+ },
37
+ {
38
+ name: 'Premi il pulsante di conversione',
39
+ text: 'Il sistema convaliderà che le cifre di controllo siano corrette mediante l’algoritmo Modulo 97.',
40
+ },
41
+ {
42
+ name: 'Copia il risultato',
43
+ text: 'Otterrai il codice BIC/SWIFT e il nome dell’entità bancaria pronti da copiare e usare.',
44
+ },
45
+ ];
46
+
47
+ const bibliographyData = [
48
+ {
49
+ name: 'ISO 13616: Standard Internazionale dell’IBAN',
50
+ url: 'https://www.iso.org/',
51
+ },
52
+ {
53
+ name: 'SWIFT: Registro Globale dei BIC',
54
+ url: 'https://www.theswiftcodes.com/',
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<IBANBICSwiftUI> = {
91
+ slug,
92
+ title,
93
+ description,
94
+ faqTitle: 'Domande Frequenti',
95
+ faq: faqData,
96
+ bibliographyTitle: 'Fonti e Riferimenti',
97
+ bibliography: bibliographyData,
98
+ howTo: howToData,
99
+ schemas: [faqSchema, howToSchema, appSchema],
100
+ seo: [
101
+ {
102
+ type: 'title',
103
+ text: 'Convertitore da IBAN a BIC/SWIFT: Tutto quello che devi sapere sui tuoi codici bancari',
104
+ level: 2,
105
+ },
106
+ {
107
+ type: 'paragraph',
108
+ html: 'Nel complesso mondo della finanza internazionale, due acronimi dominano ogni operazione di trasferimento: <strong>IBAN</strong> e <strong>BIC</strong> (noto anche come SWIFT).',
109
+ },
110
+ ],
111
+ ui: {
112
+ labelTitle: 'Convertitore IBAN a BIC / SWIFT',
113
+ labelDescription: 'Calcola istantaneamente il codice BIC di qualsiasi conto bancario spagnolo.',
114
+ labelInputIBAN: 'Inserisci il tuo IBAN',
115
+ labelInputPlaceholder: 'ES00 0000 0000 0000 0000 0000',
116
+ labelButtonConvert: 'Ottieni Codice BIC',
117
+ labelBIC: 'Codice BIC / SWIFT',
118
+ labelCountry: 'Paese / Formato',
119
+ labelBank: 'Entità Bancaria',
120
+ labelError: 'L’IBAN inserito non sembra essere valido. Controlla le cifre.',
121
+ labelCopyButton: 'Copia',
122
+ labelCopied: 'Copiato',
123
+ labelBankNotIdentified: 'Entità non identificata',
124
+ labelBankOutsideSpain: 'Banca fuori dalla Spagna (Dati limitati)',
125
+ labelInvalidIBAN: 'IBAN Non Valido',
126
+ labelFormattingOK: 'Formato OK',
127
+ },
128
+ };