@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,177 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { LotteryOptimizerUI } from '../ui';
4
+
5
+ const slug = 'piyango-optimize-edici-olasilik-hesaplayici';
6
+ const title = 'Piyango Optimize Edici ve Olasılık Hesaplayıcı';
7
+ const description = 'İspanya Noel Piyangosu, Euromillions ve Bonoloto’daki olasılıklarınızı analiz edin. İdeal bilet sayısını ve bahsinizin beklenen değerini hesaplayın.';
8
+
9
+ const faqData = [
10
+ {
11
+ question: 'Piyangoda matematiksel beklenti nedir?',
12
+ answer: 'Bahis yapılan her bir euro başına kazanmayı beklediğiniz ortalama değerdir. Hemen hemen tüm piyangolarda matematiksel beklenti negatiftir (genellikle oynanan her 1€ için 0,50€ kaybedersiniz), bu da uzun vadede her zaman kasanın kazandığı anlamına gelir.',
13
+ },
14
+ {
15
+ question: 'Birçok farklı numara oynamak mı yoksa aynı numaranın birçok biletini almak mı daha iyidir?',
16
+ answer: '"Bir şeyler" kazanmak istiyorsanız, numaraları çeşitlendirmek küçük ödüller alma olasılığınızı artırır. Büyük ikramiyeyi hedefliyorsanız, tek bir numara oynamak ikramiye için aynı olasılığı verir ancak tutarsa ödül daha büyük olur.',
17
+ },
18
+ {
19
+ question: 'İspanya Noel Piyangosu (El Gordo) oynamak gerçekten mantıklı mı?',
20
+ answer: 'Tamamen matematiksel bir bakış açısıyla, hayır. Toplanan paranın sadece %70’i dağıtılır. Ancak, büyük ikramiye olasılığı (100.000’de 1), Euromillions’tan (140 milyonda 1) çok daha yüksektir.',
21
+ },
22
+ {
23
+ question: 'İstatistiklerle şansımı artırabilir miyim?',
24
+ answer: 'Hayır. Piyango çekilişleri bağımsız rastgele süreçlerdir. Bir numaranın dün çıkmış olması, bugün çıkma olasılığını hiçbir şekilde etkilemez.',
25
+ },
26
+ {
27
+ question: 'Karşılaştırma tablosundaki "zorluk" ne anlama geliyor?',
28
+ answer: 'Birinci ödülü kazanmanın ne kadar zor olduğunun göreceli bir ölçüsüdür. Erişilebilir (200 binden az), Zor (20 milyondan az), Ekstrem (20 milyondan fazla).',
29
+ },
30
+ ];
31
+
32
+ const howToData = [
33
+ {
34
+ name: 'Çekiliş türünü seçin',
35
+ text: 'Belirli kurallarını analiz etmek için Noel Piyangosu, Primitiva, Euromillions veya Bonoloto arasından seçim yapın.',
36
+ },
37
+ {
38
+ name: 'Yatırımınızı belirleyin',
39
+ text: 'Bu çekiliş için kaç bilet veya bahis almayı planladığınızı belirtin.',
40
+ },
41
+ {
42
+ name: 'Kritik olasılıkları analiz edin',
43
+ text: 'Birinci ödülü kazanma şansınızı küçük ödüller veya amorti ile karşılaştırın.',
44
+ },
45
+ {
46
+ name: 'Risk/getiri değerlendirmesi yapın',
47
+ text: 'Yatırılan her euro başına istatistiksel olarak ne kadar para "hediye ettiğinizi" anlamak için matematiksel beklentiyi gözden geçirin.',
48
+ },
49
+ ];
50
+
51
+ const bibliographyData = [
52
+ {
53
+ name: 'Loterías y Apuestas del Estado (SELAE) - Şeffaflık Portalı',
54
+ url: 'https://www.selae.es/',
55
+ },
56
+ {
57
+ name: 'Noel Piyangosu Matematiği - RSME',
58
+ url: 'https://rsme.es/',
59
+ },
60
+ {
61
+ name: 'Kelly Kriteri ve Risk Yönetimi',
62
+ url: 'https://www.investopedia.com/',
63
+ },
64
+ ];
65
+
66
+ const seoData = [
67
+ {
68
+ type: 'title',
69
+ text: 'Umudun Matematiği',
70
+ level: 2,
71
+ },
72
+ {
73
+ type: 'paragraph',
74
+ html: 'Piyango oynamak, birçoğu için birkaç euro karşılığında bir illüzyon satın almaktır. Ancak çekilişlerin arkasında matematiğin en büyüleyici dallarından biri olan uç olasılıkların istatistiği yatar.',
75
+ },
76
+ ];
77
+
78
+ const gameTranslations = {
79
+ gordo: {
80
+ name: 'Noel Piyangosu (El Gordo)',
81
+ description: 'Dünyanın en büyük ödül dağıtımı. Bir şeyler kazanma olasılığı yüksek.',
82
+ },
83
+ nino: {
84
+ name: 'Çocuk Piyangosu (El Niño)',
85
+ description: 'Noel’e göre amorti olasılığını üç katına çıkarır.',
86
+ },
87
+ euromillones: {
88
+ name: 'Euromillions',
89
+ description: 'Astronomik ödüller, neredeyse imkansız olasılıklar.',
90
+ },
91
+ primitiva: {
92
+ name: 'La Primitiva',
93
+ description: 'İspanya’nın en eski piyangosu. Zor ama daha ucuz.',
94
+ },
95
+ bonoloto: {
96
+ name: 'Bonoloto',
97
+ description: 'En ekonomik olanı. Küçük bütçeyle günlük oynamak için ideal.',
98
+ },
99
+ };
100
+
101
+ const faqSchema: WithContext<FAQPage> = {
102
+ '@context': 'https://schema.org',
103
+ '@type': 'FAQPage',
104
+ mainEntity: faqData.map((item) => ({
105
+ '@type': 'Question',
106
+ name: item.question,
107
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
108
+ })),
109
+ };
110
+
111
+ const howToSchema: WithContext<HowTo> = {
112
+ '@context': 'https://schema.org',
113
+ '@type': 'HowTo',
114
+ name: title,
115
+ description,
116
+ step: howToData.map((step, i) => ({
117
+ '@type': 'HowToStep',
118
+ position: i + 1,
119
+ name: step.name,
120
+ text: step.text,
121
+ })),
122
+ };
123
+
124
+ const appSchema: WithContext<SoftwareApplication> = {
125
+ '@context': 'https://schema.org',
126
+ '@type': 'SoftwareApplication',
127
+ name: title,
128
+ description,
129
+ applicationCategory: 'FinanceApplication',
130
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
131
+ };
132
+
133
+ export const content: ToolLocaleContent<LotteryOptimizerUI> = {
134
+ slug,
135
+ title,
136
+ description,
137
+ faqTitle: 'Sıkça Sorulan Sorular',
138
+ bibliographyTitle: 'Kaynaklar ve Referanslar',
139
+ ui: {
140
+ gameTranslations,
141
+ labelTitle: 'Piyango Optimize Edici',
142
+ labelDescription: 'Çekilişleri karşılaştırın, matematiksel beklentinizi hesaplayın ve mantıklı oynayın.',
143
+ labelSelectGame: 'Bir piyango seçin',
144
+ labelConfigurePlay: 'Oyununuzu Yapılandırın',
145
+ labelAdjustQuantity: 'Gerçek olasılığınızı görmek için katılım sayısını ayarlayın.',
146
+ labelTotalInvestment: 'Toplam Yatırım',
147
+ labelTickets: 'Bilet / Bahis Miktarı',
148
+ labelUnits: 'adet',
149
+ labelExposureAnalysis: 'Risk Analizi',
150
+ labelSelectLottery: 'Risk analizini görmek için bir piyango seçin.',
151
+ labelOptimalCutoff: 'Önerilen Kesme Noktası',
152
+ labelProbabilitySuccess: 'Başarı Olasılığı',
153
+ labelExpectedValue: 'Beklenen Değer (EV)',
154
+ labelReturnTheoretical: 'Yapılan her oyun başına teorik getiri.',
155
+ labelSocialReturnIndex: 'Sosyal Karlılık Endeksi',
156
+ labelLow: 'Düşük',
157
+ labelMedium: 'Orta',
158
+ labelHigh: 'Yüksek',
159
+ labelComparison: 'Ödül Karşılaştırması',
160
+ labelLottery: 'Piyango',
161
+ labelCost: 'Maliyet',
162
+ labelTypicalPrize: 'Tipik Ödül',
163
+ labelDifficulty: 'Zorluk',
164
+ labelAccessible: 'Erişilebilir',
165
+ labelDifficult: 'Zor',
166
+ labelExtreme: 'Ekstrem',
167
+ labelNote: 'Not: Noel ve El Niño ödülleri "décimo" (20€) başınadır. Euromillions vb. tipik ikramiyelerdir.',
168
+ currencySymbol: '€',
169
+ currencyCode: 'EUR',
170
+ currencyLocale: 'tr-TR',
171
+ },
172
+ faq: faqData,
173
+ howTo: howToData,
174
+ bibliography: bibliographyData,
175
+ seo: seoData,
176
+ schemas: [faqSchema, howToSchema, appSchema],
177
+ };
@@ -0,0 +1,177 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { LotteryOptimizerUI } from '../ui';
4
+
5
+ const slug = 'spain-lottery-optimizer';
6
+ const title = '彩票优化器及概率计算器';
7
+ const description = '分析您在西班牙圣诞彩票、欧洲百万彩 (Euromillions) 和 Bonoloto 中的中奖概率。计算最佳购买张数及投注的预期价值。';
8
+
9
+ const faqData = [
10
+ {
11
+ question: '什么是彩票中的数学期望?',
12
+ answer: '它是您每投入一欧元预期能赢回的平均金额。在几乎所有彩票中,数学期望都是负数(通常每投入 1 欧元会亏损 0.50 欧元),这意味着从长远来看,庄家总是赢家。',
13
+ },
14
+ {
15
+ question: '是买很多不同的号码好,还是买很多张同一个号码好?',
16
+ answer: '如果您是为了中“点儿什么”,分散号码会增加您获得小奖的概率。如果您是为了头奖,买一个号码和多个号码对头奖的概率是一样的,但如果中了,奖金会更高。',
17
+ },
18
+ {
19
+ question: '玩西班牙圣诞彩票 (El Gordo) 真的划算吗?',
20
+ answer: '从纯数学的角度来看,不划算。只有 70% 的资金被用于派奖。但是,它的头奖中奖概率(1/100,000)比欧洲百万彩(1/1.4 亿)要高得多。',
21
+ },
22
+ {
23
+ question: '我可以通过统计数据来提高中奖机会吗?',
24
+ answer: '不。彩票开奖是独立的随机过程。昨天开出的号码绝对不会影响今天开出的号码。每个号码在每次开奖中的概率都是完全一样的。',
25
+ },
26
+ {
27
+ question: '对比表中的“难度”是什么意思?',
28
+ answer: '它是衡量赢得头奖难易程度的相对指标。容易(小于 20 万分之一)、困难(小于 2000 万分之一)、极难(大于 2000 万分之一)。',
29
+ },
30
+ ];
31
+
32
+ const howToData = [
33
+ {
34
+ name: '选择开奖类型',
35
+ text: '在圣诞彩票、Primitiva、欧洲百万彩或 Bonoloto 中选择,以分析其特定规则。',
36
+ },
37
+ {
38
+ name: '定义您的投入',
39
+ text: '输入您计划购买的彩票张数或投注次数。',
40
+ },
41
+ {
42
+ name: '分析关键概率',
43
+ text: '查看赢得头奖与小奖或返还本金的真实概率对比。',
44
+ },
45
+ {
46
+ name: '评估风险/收益',
47
+ text: '查看数学期望,以了解统计学上您每投入一欧元相当于“捐献”了多少钱。',
48
+ },
49
+ ];
50
+
51
+ const bibliographyData = [
52
+ {
53
+ name: '西班牙国家彩票与赌博管理机构 (SELAE) - 透明度门户',
54
+ url: 'https://www.selae.es/',
55
+ },
56
+ {
57
+ name: '圣诞彩票数学 - 西班牙皇家数学学会 (RSME)',
58
+ url: 'https://rsme.es/',
59
+ },
60
+ {
61
+ name: '凯利公式与风险管理 - Investopedia',
62
+ url: 'https://www.investopedia.com/',
63
+ },
64
+ ];
65
+
66
+ const seoData = [
67
+ {
68
+ type: 'title',
69
+ text: '希望的数学',
70
+ level: 2,
71
+ },
72
+ {
73
+ type: 'paragraph',
74
+ html: '对许多人来说,买彩票是用几欧元购买一个幻想。然而,在彩球旋转的背后,蕴含着数学中最引人入胜的领域之一:极端概率统计学。',
75
+ },
76
+ ];
77
+
78
+ const gameTranslations = {
79
+ gordo: {
80
+ name: '圣诞彩票 (El Gordo)',
81
+ description: '全球最大的派彩。中奖概率较高。',
82
+ },
83
+ nino: {
84
+ name: '儿童彩票 (El Niño)',
85
+ description: '返还本金的机会是圣诞彩票的三倍。',
86
+ },
87
+ euromillones: {
88
+ name: '欧洲百万彩 (Euromillions)',
89
+ description: '奖金极高,但概率几乎不可能。',
90
+ },
91
+ primitiva: {
92
+ name: 'La Primitiva',
93
+ description: '西班牙最古老的彩票。较难但价格更便宜。',
94
+ },
95
+ bonoloto: {
96
+ name: 'Bonoloto',
97
+ description: '最经济的彩票。适合预算较少、希望每天参与的玩家。',
98
+ },
99
+ };
100
+
101
+ const faqSchema: WithContext<FAQPage> = {
102
+ '@context': 'https://schema.org',
103
+ '@type': 'FAQPage',
104
+ mainEntity: faqData.map((item) => ({
105
+ '@type': 'Question',
106
+ name: item.question,
107
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
108
+ })),
109
+ };
110
+
111
+ const howToSchema: WithContext<HowTo> = {
112
+ '@context': 'https://schema.org',
113
+ '@type': 'HowTo',
114
+ name: title,
115
+ description,
116
+ step: howToData.map((step, i) => ({
117
+ '@type': 'HowToStep',
118
+ position: i + 1,
119
+ name: step.name,
120
+ text: step.text,
121
+ })),
122
+ };
123
+
124
+ const appSchema: WithContext<SoftwareApplication> = {
125
+ '@context': 'https://schema.org',
126
+ '@type': 'SoftwareApplication',
127
+ name: title,
128
+ description,
129
+ applicationCategory: 'FinanceApplication',
130
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
131
+ };
132
+
133
+ export const content: ToolLocaleContent<LotteryOptimizerUI> = {
134
+ slug,
135
+ title,
136
+ description,
137
+ faqTitle: '常见问题',
138
+ bibliographyTitle: '来源与参考资料',
139
+ ui: {
140
+ gameTranslations,
141
+ labelTitle: '彩票优化器',
142
+ labelDescription: '对比不同彩票,计算您的数学期望,明智地进行投注。',
143
+ labelSelectGame: '选择彩票',
144
+ labelConfigurePlay: '配置您的投注',
145
+ labelAdjustQuantity: '调整购买张数以查看您的真实概率。',
146
+ labelTotalInvestment: '总投资',
147
+ labelTickets: '购买张数 / 投注次数',
148
+ labelUnits: '张/次',
149
+ labelExposureAnalysis: '风险敞口分析',
150
+ labelSelectLottery: '选择彩票以查看风险分析。',
151
+ labelOptimalCutoff: '建议的截断点',
152
+ labelProbabilitySuccess: '成功概率',
153
+ labelExpectedValue: '预期价值 (EV)',
154
+ labelReturnTheoretical: '单次投注的理论回报。',
155
+ labelSocialReturnIndex: '社会回报指数',
156
+ labelLow: '低',
157
+ labelMedium: '中',
158
+ labelHigh: '高',
159
+ labelComparison: '奖金对比',
160
+ labelLottery: '彩票',
161
+ labelCost: '价格',
162
+ labelTypicalPrize: '典型奖金',
163
+ labelDifficulty: '难度',
164
+ labelAccessible: '容易',
165
+ labelDifficult: '困难',
166
+ labelExtreme: '极难',
167
+ labelNote: '注:圣诞彩票和儿童彩票的奖金是按票根 (20€) 计算的。欧洲百万彩等是典型的头奖金额。',
168
+ currencySymbol: '€',
169
+ currencyCode: 'EUR',
170
+ currencyLocale: 'zh-CN',
171
+ },
172
+ faq: faqData,
173
+ howTo: howToData,
174
+ bibliography: bibliographyData,
175
+ seo: seoData,
176
+ schemas: [faqSchema, howToSchema, appSchema],
177
+ };
@@ -6,20 +6,28 @@ import type { LotteryOptimizerUI } from './ui';
6
6
 
7
7
  export type LotteryOptimizerLocaleContent = ToolLocaleContent<LotteryOptimizerUI>;
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 lotteryOptimizer: FinanceToolEntry<LotteryOptimizerUI> = {
14
10
  id: 'optimizador-loterias',
15
11
  icons: {
16
- bg: 'mdi:dice-multiple',
17
- fg: 'mdi:star',
12
+ bg: 'mdi:chart-scatter-plot',
13
+ fg: 'mdi:ticket-percent-outline',
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,223 @@
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 = 'hypothekenrechner';
6
+ const title = 'Hypothekenrechner und Tilgungsplan (Annuitätendarlehen)';
7
+ const description =
8
+ 'Berechnen Sie Ihre monatliche Hypothekenrate, finden Sie heraus, wie viel Zinsen Sie zahlen werden, und visualisieren Sie sofort Ihren vollständigen Tilgungsplan.';
9
+
10
+ const faqData = [
11
+ {
12
+ question: 'Was ist ein Annuitätendarlehen?',
13
+ answer:
14
+ 'Dies ist das am häufigsten verwendete System für Hypotheken. Die monatliche Rate bleibt immer gleich, aber zu Beginn zahlen Sie fast nur Zinsen und sehr wenig Tilgung (Kapital). Am Ende ist es umgekehrt. Deshalb ist eine vorzeitige Tilgung in den ersten Jahren rentabler.',
15
+ },
16
+ {
17
+ question: 'Fester oder variabler Zinssatz im Jahr 2026?',
18
+ answer:
19
+ 'Fester Zinssatz: Sie zahlen jetzt mehr, schlafen aber 30 Jahre lang ruhig. Variabler Zinssatz: Kann heute billiger sein, aber wenn der Marktzins steigt, könnte Ihre Rate in die Höhe schießen. Es hängt von Ihrer Risikobereitschaft ab.',
20
+ },
21
+ {
22
+ question: 'Wie viel spare ich, wenn ich 10.000 € vorzeitig tilge?',
23
+ answer:
24
+ 'Das hängt vom Zeitpunkt ab. Wenn Sie im ersten Jahr einer Hypothek von 200.000 € bei 3 % tilgen, können Sie über 15.000 € an Zinsen sparen. Wenn Sie dies im 20. Jahr tun, sparen Sie kaum 2.000 €. Das Timing ist entscheidend.',
25
+ },
26
+ {
27
+ question: 'Welchen Prozentsatz meines Gehalts sollte ich für die Hypothek aufwenden?',
28
+ answer:
29
+ 'Die allgemeine Empfehlung ist, 30-35 % Ihres monatlichen Nettoeinkommens (einschließlich anderer Schulden) nicht zu überschreiten. Das Überschreiten dieser Schwelle erhöht das Risiko von Zahlungsausfällen bei unvorhergesehenen Ereignissen erheblich.',
30
+ },
31
+ ];
32
+
33
+ const howToData = [
34
+ {
35
+ name: 'Darlehensbetrag eingeben',
36
+ text: 'Geben Sie den Gesamtbetrag ein, den Sie von der Bank benötigen (abzüglich Ihres Eigenkapitals).',
37
+ },
38
+ {
39
+ name: 'Zinssatz anpassen',
40
+ text: 'Geben Sie den von der Bank angebotenen Sollzinssatz ein. Sie können zwischen festen und variablen Zinssätzen vergleichen.',
41
+ },
42
+ {
43
+ name: 'Laufzeit wählen',
44
+ text: 'Legen Sie fest, in wie vielen Jahren Sie das Darlehen zurückzahlen möchten. Mehr Jahre bedeuten eine niedrigere Rate, aber höhere Gesamtzinsen.',
45
+ },
46
+ {
47
+ name: 'Tilgungsplan analysieren',
48
+ text: 'Überprüfen Sie Monat für Monat, wie sich Ihre Schulden entwickeln und welcher Teil Ihrer Rate für Zinsen vs. Tilgung aufgewendet wird.',
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: 'EUR' },
83
+ inLanguage: 'de',
84
+ };
85
+
86
+ export const content: ToolLocaleContent<MortgageUI> = {
87
+ slug,
88
+ title,
89
+ description,
90
+ faqTitle: 'Häufig gestellte Fragen',
91
+ faq: faqData,
92
+ bibliographyTitle: 'Quellen und Referenzen',
93
+ bibliography: [
94
+ {
95
+ name: 'Deutsche Bundesbank: Baufinanzierung',
96
+ url: 'https://www.bundesbank.de/de/aufgaben/unser-geld/baufinanzierung',
97
+ },
98
+ {
99
+ name: 'Verbraucherzentrale: Baufinanzierung planen',
100
+ url: 'https://www.verbraucherzentrale.de/wissen/geld-versicherungen/bau-und-immobilienfinanzierung',
101
+ },
102
+ {
103
+ name: 'Stiftung Warentest: Immobilienkredit',
104
+ url: 'https://www.test.de/Immobilienfinanzierung-rechner-4412214-0/',
105
+ },
106
+ ],
107
+ howTo: howToData,
108
+ schemas: [faqSchema, howToSchema, appSchema],
109
+ seo: [
110
+ {
111
+ type: 'title',
112
+ text: 'Vollständiger Leitfaden für Hypotheken: Annuität und Tilgung',
113
+ level: 2,
114
+ },
115
+ {
116
+ type: 'paragraph',
117
+ html: 'Die Hypothek ist wahrscheinlich die größte Schuld, die Sie in Ihrem Leben eingehen werden. Das Verständnis der Funktionsweise des Annuitätendarlehens ist entscheidend, um kluge Entscheidungen zu treffen, die Ihnen Zehntausende von Euro sparen können.',
118
+ },
119
+ {
120
+ type: 'title',
121
+ text: 'Die „Falle“ des Annuitätendarlehens: Die Zusammensetzung Ihrer Rate verstehen',
122
+ level: 3,
123
+ },
124
+ {
125
+ type: 'paragraph',
126
+ html: 'Die meisten Hypotheken verwenden das <strong>Annuitätendarlehen</strong>. Sein Hauptmerkmal ist, dass die monatliche Rate (bei festem Zins) immer gleich bleibt, sich aber die Zusammensetzung im Laufe der Zeit radikal ändert.',
127
+ },
128
+ {
129
+ type: 'tip',
130
+ title: 'Wie sich Ihre Rate entwickelt',
131
+ html: '<p><strong>Am Anfang (Jahre 1-10):</strong> Sie zahlen fast nur ZINSEN und tilgen sehr wenig vom geliehenen Geld. Bei einer Hypothek von 250.000 € zu 3 % könnte Ihre erste Zahlung zu 80 % aus Zinsen bestehen.</p><p><strong>In der Mitte (Jahre 11-25):</strong> Das Verhältnis gleicht sich allmählich aus.</p><p><strong>Am Ende (Jahre 26-30):</strong> Sie zahlen fast nur TILGUNG und sehr wenig Zinsen.</p>',
132
+ },
133
+ {
134
+ type: 'paragraph',
135
+ html: 'Wenn Sie also eine <strong>Hypothekentilgung</strong> (vorzeitige Rückzahlung) vornehmen möchten, ist dies in den ersten Jahren des Darlehens weitaus rentabler. Eine Tilgung von 10.000 € im ersten Jahr kann Ihnen über 15.000 € an Zinsen sparen. Dieselbe Vorauszahlung im 20. Jahr spart Ihnen kaum 2.000 €.',
136
+ },
137
+ {
138
+ type: 'title',
139
+ text: 'Wie viel Geld sollte ich für die Hypothek aufwenden?',
140
+ level: 3,
141
+ },
142
+ {
143
+ type: 'paragraph',
144
+ html: 'Finanzexperten empfehlen, dass Ihre Hypothek <strong>30-35 % Ihres monatlichen Nettoeinkommens nicht überschreiten sollte</strong>. Wenn Sie diese Schwelle überschreiten, erhöhen Sie das Risiko von Zahlungsausfällen bei unvorhergesehenen Ereignissen (Arbeitsplatzverlust, Krankheit usw.) erheblich.',
145
+ },
146
+ {
147
+ type: 'title',
148
+ text: 'Kontext 2026: Fester vs. variabler Zinssatz',
149
+ level: 3,
150
+ },
151
+ {
152
+ type: 'paragraph',
153
+ html: 'Die Wahl zwischen einem <strong>festen Zinssatz</strong> oder einem <strong>variablen Zinssatz</strong> ist eine strategische Entscheidung, die jährlich Tausende von Euro kosten kann.',
154
+ },
155
+ {
156
+ type: 'comparative',
157
+ columns: 2,
158
+ items: [
159
+ {
160
+ title: 'Fester Zinssatz',
161
+ description: 'Sie zahlen jetzt etwas mehr, schlafen aber ruhig, da Ihre Rate niemals steigen wird.',
162
+ points: [
163
+ 'Vorhersehbare Rate für 30 Jahre',
164
+ 'Schutz vor Zinserhöhungen',
165
+ 'Seelenfrieden in unsicherer Wirtschaft',
166
+ 'Ideal für knappe Budgets',
167
+ ],
168
+ },
169
+ {
170
+ title: 'Variabler Zinssatz',
171
+ description: 'Kann heute billiger sein, setzt Ihre Wirtschaft aber Volatilität aus.',
172
+ highlight: true,
173
+ points: [
174
+ 'Niedrigere Anfangsrate',
175
+ 'Risiko von Zinserhöhungen',
176
+ 'Potenziell schwerwiegende Auswirkungen auf das Budget',
177
+ 'Nur für Risikofreudige',
178
+ ],
179
+ },
180
+ ],
181
+ },
182
+ {
183
+ type: 'tip',
184
+ title: 'Die Entscheidung Fest vs. Variabel hängt von Ihrem Profil ab',
185
+ html: '<p><strong>Wählen Sie einen festen Zinssatz, wenn:</strong> Ihr Budget knapp ist, Sie Sicherheit suchen und keine unangenehmen monatlichen Überraschungen vertragen.</p><p><strong>Wählen Sie einen variablen Zinssatz, wenn:</strong> Sie über ein finanzielles Polster verfügen, glauben, dass die Zinsen sinken werden, oder Ihre Hypothek klein/kurzfristig ist.</p>',
186
+ },
187
+ ],
188
+ ui: {
189
+ labelTitle: 'Hypothekenrechner',
190
+ labelLoanAmount: 'Darlehensbetrag',
191
+ labelInterestRate: 'Zinssatz (Sollzins)',
192
+ labelYears: 'Laufzeit (Jahre)',
193
+ labelMonthlyExtra: 'Monatliche Sondertilgung',
194
+ labelMonthlyPayment: 'Monatliche Rate',
195
+ labelMonthCount: 'Monate',
196
+ labelSavingsCard: 'Ihr Sparpotenzial',
197
+ labelSavingsInterest: 'Zinsen',
198
+ labelSavingsTime: 'Zeit',
199
+ labelTimelineComparison: 'Zeitvergleich',
200
+ labelTimelineOriginal: 'Ursprüngliche Dauer',
201
+ labelTimelineOptimized: 'Dauer mit Sondertilgung',
202
+ labelCostBreakdown: 'Aufschlüsselung Gesamtkosten',
203
+ labelBorrowed: 'Gliehen',
204
+ labelTotalBorrowed: 'Gesamtdarlehen',
205
+ labelTotalInterest: 'Gesamtzinsen',
206
+ labelAmortizationTable: 'Tilgungsplan',
207
+ labelTableHeader: 'Vollständige Tabelle ansehen',
208
+ labelViewAll: 'Alle ansehen',
209
+ labelPaid: 'Hypothek abbezahlt',
210
+ labelTableMonth: 'Monat',
211
+ labelTableInterest: 'Zinsen',
212
+ labelTablePrincipal: 'Tilgung',
213
+ labelTableExtra: 'Sonder',
214
+ labelTableBalance: 'Restschuld',
215
+ labelMoreMonths: 'weitere Monate',
216
+ labelMonth: 'Monat',
217
+ currencySymbol: '€',
218
+ currencyCode: 'EUR',
219
+ currencyLocale: 'de-DE',
220
+ monthPlural: 'Monate',
221
+ yearPlural: 'Jahre',
222
+ },
223
+ };