@jjlmoya/utils-chrono 1.2.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 (277) hide show
  1. package/package.json +65 -0
  2. package/scripts/postinstall.mjs +27 -0
  3. package/src/category/ChronoCategorySEO.astro +8 -0
  4. package/src/category/i18n/de.ts +23 -0
  5. package/src/category/i18n/en.ts +23 -0
  6. package/src/category/i18n/es.ts +23 -0
  7. package/src/category/i18n/fr.ts +23 -0
  8. package/src/category/i18n/id.ts +23 -0
  9. package/src/category/i18n/it.ts +23 -0
  10. package/src/category/i18n/ja.ts +23 -0
  11. package/src/category/i18n/ko.ts +23 -0
  12. package/src/category/i18n/nl.ts +23 -0
  13. package/src/category/i18n/pl.ts +23 -0
  14. package/src/category/i18n/pt.ts +23 -0
  15. package/src/category/i18n/ru.ts +23 -0
  16. package/src/category/i18n/sv.ts +23 -0
  17. package/src/category/i18n/tr.ts +23 -0
  18. package/src/category/i18n/zh.ts +23 -0
  19. package/src/category/index.ts +42 -0
  20. package/src/components/PreviewNavSidebar.astro +116 -0
  21. package/src/components/PreviewToolbar.astro +143 -0
  22. package/src/data.ts +11 -0
  23. package/src/entries.ts +32 -0
  24. package/src/env.d.ts +5 -0
  25. package/src/index.ts +28 -0
  26. package/src/layouts/PreviewLayout.astro +117 -0
  27. package/src/pages/[locale]/[slug].astro +161 -0
  28. package/src/pages/[locale].astro +251 -0
  29. package/src/pages/index.astro +4 -0
  30. package/src/tests/faq_count.test.ts +19 -0
  31. package/src/tests/i18n_coverage.test.ts +36 -0
  32. package/src/tests/locale_completeness.test.ts +29 -0
  33. package/src/tests/mocks/astro_mock.js +2 -0
  34. package/src/tests/no_h1_in_components.test.ts +48 -0
  35. package/src/tests/schemas_fulfillment.test.ts +23 -0
  36. package/src/tests/seo_length.test.ts +22 -0
  37. package/src/tests/shared-test-helpers.ts +56 -0
  38. package/src/tests/slug_language_code_format.test.ts +23 -0
  39. package/src/tests/slug_uniqueness.test.ts +81 -0
  40. package/src/tests/title_quality.test.ts +55 -0
  41. package/src/tests/tool_exports.test.ts +34 -0
  42. package/src/tests/tool_validation.test.ts +18 -0
  43. package/src/tool/beat-rate-converter/beat-rate-converter.css +301 -0
  44. package/src/tool/beat-rate-converter/bibliography.astro +16 -0
  45. package/src/tool/beat-rate-converter/bibliography.ts +12 -0
  46. package/src/tool/beat-rate-converter/client.ts +46 -0
  47. package/src/tool/beat-rate-converter/component.astro +15 -0
  48. package/src/tool/beat-rate-converter/components/ConverterPanel.astro +87 -0
  49. package/src/tool/beat-rate-converter/entry.ts +42 -0
  50. package/src/tool/beat-rate-converter/i18n/de.ts +138 -0
  51. package/src/tool/beat-rate-converter/i18n/en.ts +138 -0
  52. package/src/tool/beat-rate-converter/i18n/es.ts +138 -0
  53. package/src/tool/beat-rate-converter/i18n/fr.ts +138 -0
  54. package/src/tool/beat-rate-converter/i18n/id.ts +138 -0
  55. package/src/tool/beat-rate-converter/i18n/it.ts +138 -0
  56. package/src/tool/beat-rate-converter/i18n/ja.ts +138 -0
  57. package/src/tool/beat-rate-converter/i18n/ko.ts +138 -0
  58. package/src/tool/beat-rate-converter/i18n/nl.ts +138 -0
  59. package/src/tool/beat-rate-converter/i18n/pl.ts +138 -0
  60. package/src/tool/beat-rate-converter/i18n/pt.ts +138 -0
  61. package/src/tool/beat-rate-converter/i18n/ru.ts +138 -0
  62. package/src/tool/beat-rate-converter/i18n/sv.ts +138 -0
  63. package/src/tool/beat-rate-converter/i18n/tr.ts +138 -0
  64. package/src/tool/beat-rate-converter/i18n/zh.ts +138 -0
  65. package/src/tool/beat-rate-converter/index.ts +11 -0
  66. package/src/tool/beat-rate-converter/seo.astro +16 -0
  67. package/src/tool/crown-reference-guide/bibliography.astro +16 -0
  68. package/src/tool/crown-reference-guide/bibliography.ts +20 -0
  69. package/src/tool/crown-reference-guide/client.ts +193 -0
  70. package/src/tool/crown-reference-guide/component.astro +69 -0
  71. package/src/tool/crown-reference-guide/components/CrownView.astro +40 -0
  72. package/src/tool/crown-reference-guide/components/MovementSelector.astro +26 -0
  73. package/src/tool/crown-reference-guide/components/PositionPanel.astro +59 -0
  74. package/src/tool/crown-reference-guide/crown-reference-guide.css +383 -0
  75. package/src/tool/crown-reference-guide/entry.ts +60 -0
  76. package/src/tool/crown-reference-guide/i18n/de.ts +207 -0
  77. package/src/tool/crown-reference-guide/i18n/en.ts +207 -0
  78. package/src/tool/crown-reference-guide/i18n/es.ts +207 -0
  79. package/src/tool/crown-reference-guide/i18n/fr.ts +207 -0
  80. package/src/tool/crown-reference-guide/i18n/id.ts +207 -0
  81. package/src/tool/crown-reference-guide/i18n/it.ts +207 -0
  82. package/src/tool/crown-reference-guide/i18n/ja.ts +207 -0
  83. package/src/tool/crown-reference-guide/i18n/ko.ts +207 -0
  84. package/src/tool/crown-reference-guide/i18n/nl.ts +207 -0
  85. package/src/tool/crown-reference-guide/i18n/pl.ts +207 -0
  86. package/src/tool/crown-reference-guide/i18n/pt.ts +207 -0
  87. package/src/tool/crown-reference-guide/i18n/ru.ts +207 -0
  88. package/src/tool/crown-reference-guide/i18n/sv.ts +207 -0
  89. package/src/tool/crown-reference-guide/i18n/tr.ts +207 -0
  90. package/src/tool/crown-reference-guide/i18n/zh.ts +207 -0
  91. package/src/tool/crown-reference-guide/index.ts +11 -0
  92. package/src/tool/crown-reference-guide/seo.astro +16 -0
  93. package/src/tool/crown-reference-guide/utils.ts +0 -0
  94. package/src/tool/demagnetizing-timer/bibliography.astro +16 -0
  95. package/src/tool/demagnetizing-timer/bibliography.ts +12 -0
  96. package/src/tool/demagnetizing-timer/client.ts +221 -0
  97. package/src/tool/demagnetizing-timer/component.astro +15 -0
  98. package/src/tool/demagnetizing-timer/components/TimerPanel.astro +92 -0
  99. package/src/tool/demagnetizing-timer/demagnetizing-timer.css +389 -0
  100. package/src/tool/demagnetizing-timer/entry.ts +50 -0
  101. package/src/tool/demagnetizing-timer/helpers/field.ts +134 -0
  102. package/src/tool/demagnetizing-timer/i18n/de.ts +143 -0
  103. package/src/tool/demagnetizing-timer/i18n/en.ts +143 -0
  104. package/src/tool/demagnetizing-timer/i18n/es.ts +143 -0
  105. package/src/tool/demagnetizing-timer/i18n/fr.ts +143 -0
  106. package/src/tool/demagnetizing-timer/i18n/id.ts +143 -0
  107. package/src/tool/demagnetizing-timer/i18n/it.ts +143 -0
  108. package/src/tool/demagnetizing-timer/i18n/ja.ts +143 -0
  109. package/src/tool/demagnetizing-timer/i18n/ko.ts +143 -0
  110. package/src/tool/demagnetizing-timer/i18n/nl.ts +143 -0
  111. package/src/tool/demagnetizing-timer/i18n/pl.ts +143 -0
  112. package/src/tool/demagnetizing-timer/i18n/pt.ts +143 -0
  113. package/src/tool/demagnetizing-timer/i18n/ru.ts +143 -0
  114. package/src/tool/demagnetizing-timer/i18n/sv.ts +143 -0
  115. package/src/tool/demagnetizing-timer/i18n/tr.ts +143 -0
  116. package/src/tool/demagnetizing-timer/i18n/zh.ts +143 -0
  117. package/src/tool/demagnetizing-timer/index.ts +11 -0
  118. package/src/tool/demagnetizing-timer/seo.astro +16 -0
  119. package/src/tool/demagnetizing-timer/utils.ts +0 -0
  120. package/src/tool/power-reserve-estimator/bibliography.astro +16 -0
  121. package/src/tool/power-reserve-estimator/bibliography.ts +16 -0
  122. package/src/tool/power-reserve-estimator/client.ts +139 -0
  123. package/src/tool/power-reserve-estimator/component.astro +15 -0
  124. package/src/tool/power-reserve-estimator/components/EstimatorPanel.astro +150 -0
  125. package/src/tool/power-reserve-estimator/entry.ts +51 -0
  126. package/src/tool/power-reserve-estimator/i18n/de.ts +158 -0
  127. package/src/tool/power-reserve-estimator/i18n/en.ts +158 -0
  128. package/src/tool/power-reserve-estimator/i18n/es.ts +158 -0
  129. package/src/tool/power-reserve-estimator/i18n/fr.ts +158 -0
  130. package/src/tool/power-reserve-estimator/i18n/id.ts +158 -0
  131. package/src/tool/power-reserve-estimator/i18n/it.ts +158 -0
  132. package/src/tool/power-reserve-estimator/i18n/ja.ts +158 -0
  133. package/src/tool/power-reserve-estimator/i18n/ko.ts +158 -0
  134. package/src/tool/power-reserve-estimator/i18n/nl.ts +158 -0
  135. package/src/tool/power-reserve-estimator/i18n/pl.ts +158 -0
  136. package/src/tool/power-reserve-estimator/i18n/pt.ts +158 -0
  137. package/src/tool/power-reserve-estimator/i18n/ru.ts +158 -0
  138. package/src/tool/power-reserve-estimator/i18n/sv.ts +158 -0
  139. package/src/tool/power-reserve-estimator/i18n/tr.ts +158 -0
  140. package/src/tool/power-reserve-estimator/i18n/zh.ts +158 -0
  141. package/src/tool/power-reserve-estimator/index.ts +11 -0
  142. package/src/tool/power-reserve-estimator/power-reserve-estimator.css +402 -0
  143. package/src/tool/power-reserve-estimator/seo.astro +16 -0
  144. package/src/tool/strap-taper-calculator/bibliography.astro +16 -0
  145. package/src/tool/strap-taper-calculator/bibliography.ts +12 -0
  146. package/src/tool/strap-taper-calculator/client.ts +129 -0
  147. package/src/tool/strap-taper-calculator/component.astro +15 -0
  148. package/src/tool/strap-taper-calculator/components/CalculatorPanel.astro +114 -0
  149. package/src/tool/strap-taper-calculator/entry.ts +56 -0
  150. package/src/tool/strap-taper-calculator/i18n/de.ts +152 -0
  151. package/src/tool/strap-taper-calculator/i18n/en.ts +152 -0
  152. package/src/tool/strap-taper-calculator/i18n/es.ts +152 -0
  153. package/src/tool/strap-taper-calculator/i18n/fr.ts +152 -0
  154. package/src/tool/strap-taper-calculator/i18n/id.ts +152 -0
  155. package/src/tool/strap-taper-calculator/i18n/it.ts +152 -0
  156. package/src/tool/strap-taper-calculator/i18n/ja.ts +152 -0
  157. package/src/tool/strap-taper-calculator/i18n/ko.ts +152 -0
  158. package/src/tool/strap-taper-calculator/i18n/nl.ts +152 -0
  159. package/src/tool/strap-taper-calculator/i18n/pl.ts +152 -0
  160. package/src/tool/strap-taper-calculator/i18n/pt.ts +152 -0
  161. package/src/tool/strap-taper-calculator/i18n/ru.ts +152 -0
  162. package/src/tool/strap-taper-calculator/i18n/sv.ts +152 -0
  163. package/src/tool/strap-taper-calculator/i18n/tr.ts +152 -0
  164. package/src/tool/strap-taper-calculator/i18n/zh.ts +152 -0
  165. package/src/tool/strap-taper-calculator/index.ts +11 -0
  166. package/src/tool/strap-taper-calculator/seo.astro +16 -0
  167. package/src/tool/strap-taper-calculator/strap-taper-calculator.css +320 -0
  168. package/src/tool/watch-accuracy-tracker/bibliography.astro +16 -0
  169. package/src/tool/watch-accuracy-tracker/bibliography.ts +12 -0
  170. package/src/tool/watch-accuracy-tracker/chart.ts +126 -0
  171. package/src/tool/watch-accuracy-tracker/client.ts +287 -0
  172. package/src/tool/watch-accuracy-tracker/component.astro +35 -0
  173. package/src/tool/watch-accuracy-tracker/components/AccuracyTracker.astro +96 -0
  174. package/src/tool/watch-accuracy-tracker/components/DriftPredictor.astro +126 -0
  175. package/src/tool/watch-accuracy-tracker/components/LogHistory.astro +66 -0
  176. package/src/tool/watch-accuracy-tracker/entry.ts +94 -0
  177. package/src/tool/watch-accuracy-tracker/i18n/de.ts +167 -0
  178. package/src/tool/watch-accuracy-tracker/i18n/en.ts +167 -0
  179. package/src/tool/watch-accuracy-tracker/i18n/es.ts +167 -0
  180. package/src/tool/watch-accuracy-tracker/i18n/fr.ts +167 -0
  181. package/src/tool/watch-accuracy-tracker/i18n/id.ts +167 -0
  182. package/src/tool/watch-accuracy-tracker/i18n/it.ts +167 -0
  183. package/src/tool/watch-accuracy-tracker/i18n/ja.ts +167 -0
  184. package/src/tool/watch-accuracy-tracker/i18n/ko.ts +167 -0
  185. package/src/tool/watch-accuracy-tracker/i18n/nl.ts +167 -0
  186. package/src/tool/watch-accuracy-tracker/i18n/pl.ts +167 -0
  187. package/src/tool/watch-accuracy-tracker/i18n/pt.ts +167 -0
  188. package/src/tool/watch-accuracy-tracker/i18n/ru.ts +167 -0
  189. package/src/tool/watch-accuracy-tracker/i18n/sv.ts +167 -0
  190. package/src/tool/watch-accuracy-tracker/i18n/tr.ts +167 -0
  191. package/src/tool/watch-accuracy-tracker/i18n/zh.ts +167 -0
  192. package/src/tool/watch-accuracy-tracker/index.ts +9 -0
  193. package/src/tool/watch-accuracy-tracker/logger.ts +105 -0
  194. package/src/tool/watch-accuracy-tracker/seo.astro +16 -0
  195. package/src/tool/watch-accuracy-tracker/utils.ts +99 -0
  196. package/src/tool/watch-accuracy-tracker/watch-accuracy-tracker.css +564 -0
  197. package/src/tool/watch-savings-planner/bibliography.astro +16 -0
  198. package/src/tool/watch-savings-planner/bibliography.ts +8 -0
  199. package/src/tool/watch-savings-planner/client.ts +271 -0
  200. package/src/tool/watch-savings-planner/component.astro +33 -0
  201. package/src/tool/watch-savings-planner/components/AddGoalForm.astro +49 -0
  202. package/src/tool/watch-savings-planner/components/GoalCard.astro +58 -0
  203. package/src/tool/watch-savings-planner/entry.ts +62 -0
  204. package/src/tool/watch-savings-planner/i18n/de.ts +153 -0
  205. package/src/tool/watch-savings-planner/i18n/en.ts +155 -0
  206. package/src/tool/watch-savings-planner/i18n/es.ts +153 -0
  207. package/src/tool/watch-savings-planner/i18n/fr.ts +153 -0
  208. package/src/tool/watch-savings-planner/i18n/id.ts +153 -0
  209. package/src/tool/watch-savings-planner/i18n/it.ts +153 -0
  210. package/src/tool/watch-savings-planner/i18n/ja.ts +153 -0
  211. package/src/tool/watch-savings-planner/i18n/ko.ts +153 -0
  212. package/src/tool/watch-savings-planner/i18n/nl.ts +153 -0
  213. package/src/tool/watch-savings-planner/i18n/pl.ts +153 -0
  214. package/src/tool/watch-savings-planner/i18n/pt.ts +153 -0
  215. package/src/tool/watch-savings-planner/i18n/ru.ts +153 -0
  216. package/src/tool/watch-savings-planner/i18n/sv.ts +153 -0
  217. package/src/tool/watch-savings-planner/i18n/tr.ts +153 -0
  218. package/src/tool/watch-savings-planner/i18n/zh.ts +153 -0
  219. package/src/tool/watch-savings-planner/index.ts +11 -0
  220. package/src/tool/watch-savings-planner/seo.astro +16 -0
  221. package/src/tool/watch-savings-planner/utils.ts +0 -0
  222. package/src/tool/watch-savings-planner/watch-savings-planner.css +460 -0
  223. package/src/tool/water-resistance-converter/bibliography.astro +16 -0
  224. package/src/tool/water-resistance-converter/bibliography.ts +16 -0
  225. package/src/tool/water-resistance-converter/client.ts +56 -0
  226. package/src/tool/water-resistance-converter/component.astro +15 -0
  227. package/src/tool/water-resistance-converter/components/ConverterPanel.astro +113 -0
  228. package/src/tool/water-resistance-converter/entry.ts +52 -0
  229. package/src/tool/water-resistance-converter/i18n/de.ts +148 -0
  230. package/src/tool/water-resistance-converter/i18n/en.ts +148 -0
  231. package/src/tool/water-resistance-converter/i18n/es.ts +148 -0
  232. package/src/tool/water-resistance-converter/i18n/fr.ts +148 -0
  233. package/src/tool/water-resistance-converter/i18n/id.ts +148 -0
  234. package/src/tool/water-resistance-converter/i18n/it.ts +148 -0
  235. package/src/tool/water-resistance-converter/i18n/ja.ts +148 -0
  236. package/src/tool/water-resistance-converter/i18n/ko.ts +148 -0
  237. package/src/tool/water-resistance-converter/i18n/nl.ts +148 -0
  238. package/src/tool/water-resistance-converter/i18n/pl.ts +148 -0
  239. package/src/tool/water-resistance-converter/i18n/pt.ts +148 -0
  240. package/src/tool/water-resistance-converter/i18n/ru.ts +148 -0
  241. package/src/tool/water-resistance-converter/i18n/sv.ts +148 -0
  242. package/src/tool/water-resistance-converter/i18n/tr.ts +148 -0
  243. package/src/tool/water-resistance-converter/i18n/zh.ts +148 -0
  244. package/src/tool/water-resistance-converter/index.ts +11 -0
  245. package/src/tool/water-resistance-converter/seo.astro +16 -0
  246. package/src/tool/water-resistance-converter/water-resistance-converter.css +254 -0
  247. package/src/tool/wrist-presence-calculator/bibliography.astro +16 -0
  248. package/src/tool/wrist-presence-calculator/bibliography.ts +12 -0
  249. package/src/tool/wrist-presence-calculator/client.ts +180 -0
  250. package/src/tool/wrist-presence-calculator/component.astro +23 -0
  251. package/src/tool/wrist-presence-calculator/components/CalculatorInputs.astro +97 -0
  252. package/src/tool/wrist-presence-calculator/components/FitResult.astro +68 -0
  253. package/src/tool/wrist-presence-calculator/components/Visualizer.astro +16 -0
  254. package/src/tool/wrist-presence-calculator/entry.ts +59 -0
  255. package/src/tool/wrist-presence-calculator/helpers/canvas.ts +189 -0
  256. package/src/tool/wrist-presence-calculator/helpers/results.ts +78 -0
  257. package/src/tool/wrist-presence-calculator/i18n/de.ts +139 -0
  258. package/src/tool/wrist-presence-calculator/i18n/en.ts +155 -0
  259. package/src/tool/wrist-presence-calculator/i18n/es.ts +139 -0
  260. package/src/tool/wrist-presence-calculator/i18n/fr.ts +139 -0
  261. package/src/tool/wrist-presence-calculator/i18n/id.ts +139 -0
  262. package/src/tool/wrist-presence-calculator/i18n/it.ts +139 -0
  263. package/src/tool/wrist-presence-calculator/i18n/ja.ts +139 -0
  264. package/src/tool/wrist-presence-calculator/i18n/ko.ts +139 -0
  265. package/src/tool/wrist-presence-calculator/i18n/nl.ts +139 -0
  266. package/src/tool/wrist-presence-calculator/i18n/pl.ts +139 -0
  267. package/src/tool/wrist-presence-calculator/i18n/pt.ts +139 -0
  268. package/src/tool/wrist-presence-calculator/i18n/ru.ts +139 -0
  269. package/src/tool/wrist-presence-calculator/i18n/sv.ts +139 -0
  270. package/src/tool/wrist-presence-calculator/i18n/tr.ts +139 -0
  271. package/src/tool/wrist-presence-calculator/i18n/zh.ts +155 -0
  272. package/src/tool/wrist-presence-calculator/index.ts +11 -0
  273. package/src/tool/wrist-presence-calculator/seo.astro +16 -0
  274. package/src/tool/wrist-presence-calculator/utils.ts +30 -0
  275. package/src/tool/wrist-presence-calculator/wrist-presence-calculator.css +372 -0
  276. package/src/tools.ts +26 -0
  277. package/src/types.ts +70 -0
@@ -0,0 +1,155 @@
1
+ import type { ToolLocaleContent } from '../../../types';
2
+ import type { WatchSavingsPlannerUI } from '../entry';
3
+ import { bibliography } from '../bibliography';
4
+
5
+ export const content: ToolLocaleContent<WatchSavingsPlannerUI> = {
6
+ slug: 'watch-savings-planner',
7
+ title: 'Watch Savings Goal Planner',
8
+ description: 'Set and track savings goals for your next watch purchase. Visualize progress, calculate timelines, and stay motivated.',
9
+ ui: {
10
+ title: 'Savings Goal Settings',
11
+ addGoalTitle: 'New Savings Goal',
12
+ goalNameLabel: 'Watch',
13
+ goalNamePlaceholder: 'e.g. Rolex Submariner',
14
+ targetPriceLabel: 'Target Price',
15
+ currentSavingsLabel: 'Saved',
16
+ monthlyLabel: 'Per Month',
17
+ addButton: 'Add Goal',
18
+ cancelButton: 'Cancel',
19
+ goalsEmpty: 'No savings goals yet',
20
+ goalsEmptySub: 'Set your first watch goal and start saving!',
21
+ monthsToGoal: 'Time to goal',
22
+ yearsToGoal: 'Years to goal',
23
+ month: 'mo',
24
+ months: 'mos',
25
+ year: 'y',
26
+ totalSaved: 'Total Saved',
27
+ totalGoals: 'Goals',
28
+ achieved: 'Achieved!',
29
+ percentLabel: 'Saved',
30
+ deleteGoal: 'Delete',
31
+ editGoal: 'Edit',
32
+ saveGoal: 'Save',
33
+ currency: 'USD',
34
+ summaryTitle: 'Summary',
35
+ goalAchieved: 'Achieved!',
36
+ goalProgress: 'Progress',
37
+ congratsTitle: 'Congratulations!',
38
+ congratsDesc: 'You reached your savings goal!',
39
+ monthlyContribution: 'Monthly',
40
+ targetDate: 'Target Date',
41
+ adjustMonthly: 'Adjust monthly',
42
+ simMonth: '+1 month',
43
+ now: 'Now',
44
+ },
45
+ seo: [
46
+ { type: 'title', text: 'Watch Savings Goal Planner — Track Your Next Watch Purchase', level: 2 },
47
+ { type: 'paragraph', html: 'Saving for a watch is a journey. Whether it\'s a <strong>vintage Speedmaster</strong>, a <strong>Submariner</strong>, or a <strong>Grand Seiko</strong>, a clear savings plan turns the dream into a timeline. This tool helps you visualize your progress, adjust your monthly contributions, and see exactly when you\'ll be walking out of the boutique with your grail.' },
48
+ { type: 'title', text: 'Why a Savings Plan Matters for Watch Collectors', level: 3 },
49
+ { type: 'paragraph', html: 'Watch collecting is a patient game. Prices for sought-after models climb steadily, and impulse purchases often lead to regret. A structured savings approach keeps you disciplined, prevents financial strain, and makes the final purchase feel earned. Plus, tracking your progress day by day builds anticipation and makes the unboxing even sweeter.' },
50
+ { type: 'title', text: 'How to Set Realistic Watch Savings Goals', level: 3 },
51
+ { type: 'paragraph', html: 'Start with the total price including taxes and shipping. Then divide by how much you can comfortably set aside each month. A good rule of thumb is to dedicate no more than <strong>10–15% of disposable income</strong> to watch savings. If the timeline feels too long, consider breaking it into smaller milestones — or exploring more affordable alternatives in the same style family.' },
52
+ { type: 'title', text: 'The Psychology of Goal Tracking', level: 3 },
53
+ { type: 'paragraph', html: 'Visual progress tracking triggers dopamine release, the same neurochemical that makes collecting so rewarding. Each time you log a new contribution and watch the progress ring fill, you reinforce the habit. This is why small, regular savings often work better than sporadic large deposits — the ritual itself becomes part of the collecting experience.' },
54
+ ],
55
+ faq: [
56
+ {
57
+ question: 'How much should I save each month for a watch?',
58
+ answer: 'Aim for 10–15% of your disposable monthly income. The key is consistency — even $100 a month adds up to $1,200 a year. Adjust the amount based on your timeline: shorter goals need larger monthly contributions.',
59
+ },
60
+ {
61
+ question: 'Should I save for one watch at a time or multiple?',
62
+ answer: 'One at a time is usually more effective. Focus builds momentum. Once you hit your first goal, the confidence and discipline carry over to the next. That said, this planner supports multiple goals so you can compare timelines.',
63
+ },
64
+ {
65
+ question: 'What if the watch price goes up while I\'m saving?',
66
+ answer: 'Great question. Check the current market price every few months and update your target. If prices are rising fast, consider increasing your monthly amount or shortening the timeline to lock in the current price.',
67
+ },
68
+ ],
69
+ bibliography,
70
+ howTo: [
71
+ {
72
+ name: 'Set Your Goal',
73
+ text: 'Enter the watch name and its total price including taxes and shipping.',
74
+ },
75
+ {
76
+ name: 'Track Your Savings',
77
+ text: 'Log how much you\'ve already saved and how much you can put aside each month.',
78
+ },
79
+ {
80
+ name: 'Monitor Progress',
81
+ text: 'Watch the progress ring fill as you update your savings. Adjust monthly amounts anytime.',
82
+ },
83
+ {
84
+ name: 'Celebrate',
85
+ text: 'When the ring hits 100%, you\'ve reached your goal. Time to buy that watch!',
86
+ },
87
+ ],
88
+ schemas: [
89
+ {
90
+ '@context': 'https://schema.org',
91
+ '@type': 'FAQPage',
92
+ 'mainEntity': [
93
+ {
94
+ '@type': 'Question',
95
+ 'name': 'How much should I save each month for a watch?',
96
+ 'acceptedAnswer': {
97
+ '@type': 'Answer',
98
+ 'text': 'Aim for 10–15% of your disposable monthly income. The key is consistency — even $100 a month adds up to $1,200 a year.',
99
+ },
100
+ },
101
+ {
102
+ '@type': 'Question',
103
+ 'name': 'Should I save for one watch at a time or multiple?',
104
+ 'acceptedAnswer': {
105
+ '@type': 'Answer',
106
+ 'text': 'One at a time is usually more effective. Focus builds momentum. Once you hit your first goal, carry that discipline to the next.',
107
+ },
108
+ },
109
+ {
110
+ '@type': 'Question',
111
+ 'name': 'What if the watch price goes up while I\'m saving?',
112
+ 'acceptedAnswer': {
113
+ '@type': 'Answer',
114
+ 'text': 'Check the current market price every few months and update your target. Consider increasing your monthly amount if prices are rising fast.',
115
+ },
116
+ },
117
+ ],
118
+ },
119
+ {
120
+ '@context': 'https://schema.org',
121
+ '@type': 'SoftwareApplication',
122
+ 'name': 'Watch Savings Goal Planner',
123
+ 'operatingSystem': 'All',
124
+ 'applicationCategory': 'FinanceApplication',
125
+ 'browserRequirements': 'Requires HTML5. Requires JavaScript.',
126
+ },
127
+ {
128
+ '@context': 'https://schema.org',
129
+ '@type': 'HowTo',
130
+ 'name': 'How to save for a watch purchase',
131
+ 'step': [
132
+ {
133
+ '@type': 'HowToStep',
134
+ 'name': 'Set Your Goal',
135
+ 'text': 'Enter the watch name and its total price including taxes and shipping.',
136
+ },
137
+ {
138
+ '@type': 'HowToStep',
139
+ 'name': 'Track Your Savings',
140
+ 'text': 'Log how much you\'ve already saved and how much you can put aside each month.',
141
+ },
142
+ {
143
+ '@type': 'HowToStep',
144
+ 'name': 'Monitor Progress',
145
+ 'text': 'Watch the progress ring fill as you update your savings.',
146
+ },
147
+ {
148
+ '@type': 'HowToStep',
149
+ 'name': 'Celebrate',
150
+ 'text': 'When the ring hits 100%, you\'ve reached your goal. Time to buy that watch!',
151
+ },
152
+ ],
153
+ },
154
+ ],
155
+ };
@@ -0,0 +1,153 @@
1
+ import type { ToolLocaleContent } from '../../../types';
2
+ import type { WatchSavingsPlannerUI } from '../entry';
3
+ import { bibliography } from '../bibliography';
4
+
5
+ export const content: ToolLocaleContent<WatchSavingsPlannerUI> = {
6
+ slug: 'planificador-ahorro-reloj',
7
+ title: 'Planificador de Ahorro para Relojes',
8
+ description: 'Establece y controla metas de ahorro para tu pr\u00f3xima compra de reloj. Visualiza el progreso, calcula plazos y mantente motivado.',
9
+ ui: {
10
+ title: 'Configuraci\u00f3n de la Meta de Ahorro',
11
+ addGoalTitle: 'Nueva Meta de Ahorro',
12
+ goalNameLabel: 'Reloj',
13
+ goalNamePlaceholder: 'p.ej. Rolex Submariner',
14
+ targetPriceLabel: 'Precio Objetivo',
15
+ currentSavingsLabel: 'Ahorrado',
16
+ monthlyLabel: 'Por Mes',
17
+ addButton: 'A\u00f1adir Meta',
18
+ cancelButton: 'Cancelar',
19
+ goalsEmpty: 'A\u00fan no hay metas de ahorro',
20
+ goalsEmptySub: '\u00a1Establece tu primer objetivo de reloj y empieza a ahorrar!',
21
+ monthsToGoal: 'Tiempo hasta la meta',
22
+ yearsToGoal: 'A\u00f1os hasta la meta',
23
+ month: 'mes',
24
+ months: 'meses',
25
+ year: 'a\u00f1o',
26
+ totalSaved: 'Total Ahorrado',
27
+ totalGoals: 'Metas',
28
+ achieved: 'Logrado',
29
+ percentLabel: 'Ahorrado',
30
+ deleteGoal: 'Eliminar',
31
+ editGoal: 'Editar',
32
+ saveGoal: 'Guardar',
33
+ currency: 'EUR',
34
+ summaryTitle: 'Resumen',
35
+ goalAchieved: '\u00a1Logrado!',
36
+ goalProgress: 'Progreso',
37
+ congratsTitle: '\u00a1Felicidades!',
38
+ congratsDesc: '\u00a1Alcanzaste tu meta de ahorro!',
39
+ monthlyContribution: 'Mensual',
40
+ targetDate: 'Fecha Objetivo',
41
+ adjustMonthly: 'Ajustar mensualidad',
42
+ },
43
+ seo: [
44
+ { type: 'title', text: 'Planificador de Ahorro para Relojes \u2014 Sigue tu Pr\u00f3xima Compra', level: 2 },
45
+ { type: 'paragraph', html: 'Ahorrar para un reloj es un viaje. Ya sea un <strong>Speedmaster vintage</strong>, un <strong>Submariner</strong> o un <strong>Grand Seiko</strong>, un plan de ahorro claro convierte el sue\u00f1o en un cronograma. Esta herramienta te ayuda a visualizar tu progreso, ajustar tus contribuciones mensuales y ver exactamente cu\u00e1ndo saldr\u00e1s de la boutique con tu santo grial.' },
46
+ { type: 'title', text: 'Por qu\u00e9 un plan de ahorro importa para coleccionistas de relojes', level: 3 },
47
+ { type: 'paragraph', html: 'Coleccionar relojes es un juego de paciencia. Los precios de los modelos m\u00e1s buscados suben constantemente, y las compras impulsivas suelen traer arrepentimiento. Un enfoque de ahorro estructurado te mantiene disciplinado, evita tensiones financieras y hace que la compra final se sienta merecida. Adem\u00e1s, seguir tu progreso d\u00eda a d\u00eda genera anticipaci\u00f3n y hace que abrir la caja sea a\u00fan m\u00e1s dulce.' },
48
+ { type: 'title', text: 'C\u00f3mo establecer metas realistas de ahorro para relojes', level: 3 },
49
+ { type: 'paragraph', html: 'Empieza con el precio total, incluidos impuestos y env\u00edo. Luego div\u00eddelo entre lo que puedes apartar c\u00f3modamente cada mes. Una buena regla general es dedicar no m\u00e1s del <strong>10\u201315 % de tus ingresos disponibles</strong> al ahorro para relojes. Si el plazo parece demasiado largo, considera dividirlo en hitos m\u00e1s peque\u00f1os \u2014 o explora alternativas m\u00e1s asequibles en la misma familia de estilo.' },
50
+ { type: 'title', text: 'La psicolog\u00eda del seguimiento de metas', level: 3 },
51
+ { type: 'paragraph', html: 'El seguimiento visual del progreso desencadena liberaci\u00f3n de dopamina, el mismo neurotransmisor que hace que coleccionar sea tan gratificante. Cada vez que registras una nueva contribuci\u00f3n y ves c\u00f3mo se llena el anillo de progreso, refuerzas el h\u00e1bito. Por eso, los ahorros peque\u00f1os y regulares suelen funcionar mejor que los dep\u00f3sitos grandes y espor\u00e1dicos \u2014 el ritual mismo se convierte en parte de la experiencia de coleccionar.' },
52
+ ],
53
+ faq: [
54
+ {
55
+ question: '\u00bfCu\u00e1nto deber\u00eda ahorrar cada mes para un reloj?',
56
+ answer: 'Apunta al 10\u201315 % de tus ingresos mensuales disponibles. La clave es la constancia \u2014 incluso 100 $ al mes suman 1.200 $ al a\u00f1o. Ajusta la cantidad seg\u00fan tu plazo: metas m\u00e1s cortas necesitan contribuciones mensuales mayores.',
57
+ },
58
+ {
59
+ question: '\u00bfDeber\u00eda ahorrar para un reloj a la vez o para varios?',
60
+ answer: 'Uno a la vez suele ser m\u00e1s efectivo. La concentraci\u00f3n genera impulso. Una vez que alcanzas tu primera meta, la confianza y la disciplina se trasladan a la siguiente. Dicho esto, este planificador admite m\u00faltiples metas para que puedas comparar plazos.',
61
+ },
62
+ {
63
+ question: '\u00bfQu\u00e9 pasa si el precio del reloj sube mientras ahorro?',
64
+ answer: 'Buena pregunta. Revisa el precio de mercado actual cada pocos meses y actualiza tu objetivo. Si los precios suben r\u00e1pido, considera aumentar tu cantidad mensual o acortar el plazo para fijar el precio actual.',
65
+ },
66
+ ],
67
+ bibliography,
68
+ howTo: [
69
+ {
70
+ name: 'Establece tu meta',
71
+ text: 'Ingresa el nombre del reloj y su precio total, incluidos impuestos y env\u00edo.',
72
+ },
73
+ {
74
+ name: 'Controla tus ahorros',
75
+ text: 'Registra cu\u00e1nto has ahorrado ya y cu\u00e1nto puedes apartar cada mes.',
76
+ },
77
+ {
78
+ name: 'Monitorea el progreso',
79
+ text: 'Observa c\u00f3mo se llena el anillo de progreso mientras actualizas tus ahorros. Ajusta los montos mensuales en cualquier momento.',
80
+ },
81
+ {
82
+ name: 'Celebra',
83
+ text: '\u00a1Cuando el anillo llegue al 100 %, habr\u00e1s alcanzado tu meta. Es hora de comprar ese reloj!',
84
+ },
85
+ ],
86
+ schemas: [
87
+ {
88
+ '@context': 'https://schema.org',
89
+ '@type': 'FAQPage',
90
+ 'mainEntity': [
91
+ {
92
+ '@type': 'Question',
93
+ 'name': '\u00bfCu\u00e1nto deber\u00eda ahorrar cada mes para un reloj?',
94
+ 'acceptedAnswer': {
95
+ '@type': 'Answer',
96
+ 'text': 'Apunta al 10\u201315 % de tus ingresos mensuales disponibles. La clave es la constancia \u2014 incluso 100 $ al mes suman 1.200 $ al a\u00f1o.',
97
+ },
98
+ },
99
+ {
100
+ '@type': 'Question',
101
+ 'name': '\u00bfDeber\u00eda ahorrar para un reloj a la vez o para varios?',
102
+ 'acceptedAnswer': {
103
+ '@type': 'Answer',
104
+ 'text': 'Uno a la vez suele ser m\u00e1s efectivo. La concentraci\u00f3n genera impulso. Una vez que alcanzas tu primera meta, lleva esa disciplina a la siguiente.',
105
+ },
106
+ },
107
+ {
108
+ '@type': 'Question',
109
+ 'name': '\u00bfQu\u00e9 pasa si el precio del reloj sube mientras ahorro?',
110
+ 'acceptedAnswer': {
111
+ '@type': 'Answer',
112
+ 'text': 'Revisa el precio de mercado actual cada pocos meses y actualiza tu objetivo. Considera aumentar tu cantidad mensual si los precios suben r\u00e1pido.',
113
+ },
114
+ },
115
+ ],
116
+ },
117
+ {
118
+ '@context': 'https://schema.org',
119
+ '@type': 'SoftwareApplication',
120
+ 'name': 'Planificador de Ahorro para Relojes',
121
+ 'operatingSystem': 'Todos',
122
+ 'applicationCategory': 'FinanceApplication',
123
+ 'browserRequirements': 'Requiere HTML5. Requiere JavaScript.',
124
+ },
125
+ {
126
+ '@context': 'https://schema.org',
127
+ '@type': 'HowTo',
128
+ 'name': 'C\u00f3mo ahorrar para la compra de un reloj',
129
+ 'step': [
130
+ {
131
+ '@type': 'HowToStep',
132
+ 'name': 'Establece tu meta',
133
+ 'text': 'Ingresa el nombre del reloj y su precio total, incluidos impuestos y env\u00edo.',
134
+ },
135
+ {
136
+ '@type': 'HowToStep',
137
+ 'name': 'Controla tus ahorros',
138
+ 'text': 'Registra cu\u00e1nto has ahorrado ya y cu\u00e1nto puedes apartar cada mes.',
139
+ },
140
+ {
141
+ '@type': 'HowToStep',
142
+ 'name': 'Monitorea el progreso',
143
+ 'text': 'Observa c\u00f3mo se llena el anillo de progreso mientras actualizas tus ahorros.',
144
+ },
145
+ {
146
+ '@type': 'HowToStep',
147
+ 'name': 'Celebra',
148
+ 'text': '\u00a1Cuando el anillo llegue al 100 %, habr\u00e1s alcanzado tu meta. Es hora de comprar ese reloj!',
149
+ },
150
+ ],
151
+ },
152
+ ],
153
+ };
@@ -0,0 +1,153 @@
1
+ import type { ToolLocaleContent } from '../../../types';
2
+ import type { WatchSavingsPlannerUI } from '../entry';
3
+ import { bibliography } from '../bibliography';
4
+
5
+ export const content: ToolLocaleContent<WatchSavingsPlannerUI> = {
6
+ slug: 'planificateur-epargne-montre',
7
+ title: 'Planificateur d\u2019\u00e9pargne pour montres',
8
+ description: 'D\u00e9finissez et suivez des objectifs d\u2019\u00e9pargne pour votre prochain achat de montre. Visualisez les progr\u00e8s, calculez les d\u00e9lais et restez motiv\u00e9.',
9
+ ui: {
10
+ title: 'Param\u00e8tres de l\u2019objectif d\u2019\u00e9pargne',
11
+ addGoalTitle: 'Nouvel objectif d\u2019\u00e9pargne',
12
+ goalNameLabel: 'Montre',
13
+ goalNamePlaceholder: 'p.ex. Rolex Submariner',
14
+ targetPriceLabel: 'Prix cible',
15
+ currentSavingsLabel: '\u00c9pargn\u00e9',
16
+ monthlyLabel: 'Par mois',
17
+ addButton: 'Ajouter un objectif',
18
+ cancelButton: 'Annuler',
19
+ goalsEmpty: 'Aucun objectif d\u2019\u00e9pargne pour le moment',
20
+ goalsEmptySub: 'D\u00e9finissez votre premier objectif montre et commencez \u00e0 \u00e9pargner !',
21
+ monthsToGoal: 'Temps restant',
22
+ yearsToGoal: 'Ann\u00e9es restantes',
23
+ month: 'mois',
24
+ months: 'mois',
25
+ year: 'an',
26
+ totalSaved: 'Total \u00e9pargn\u00e9',
27
+ totalGoals: 'Objectifs',
28
+ achieved: 'Atteint',
29
+ percentLabel: '\u00c9pargn\u00e9',
30
+ deleteGoal: 'Supprimer',
31
+ editGoal: 'Modifier',
32
+ saveGoal: 'Enregistrer',
33
+ currency: 'EUR',
34
+ summaryTitle: 'R\u00e9sum\u00e9',
35
+ goalAchieved: 'Atteint !',
36
+ goalProgress: 'Progr\u00e8s',
37
+ congratsTitle: 'F\u00e9licitations !',
38
+ congratsDesc: 'Vous avez atteint votre objectif d\u2019\u00e9pargne !',
39
+ monthlyContribution: 'Mensualit\u00e9',
40
+ targetDate: 'Date cible',
41
+ adjustMonthly: 'Ajuster le montant mensuel',
42
+ },
43
+ seo: [
44
+ { type: 'title', text: 'Planificateur d\u2019\u00e9pargne pour montres \u2014 Suivez votre prochain achat', level: 2 },
45
+ { type: 'paragraph', html: '\u00c9pargner pour une montre est un voyage. Que ce soit une <strong>Speedmaster vintage</strong>, une <strong>Submariner</strong> ou une <strong>Grand Seiko</strong>, un plan d\u2019\u00e9pargne clair transforme le r\u00eave en \u00e9ch\u00e9ancier. Cet outil vous aide \u00e0 visualiser votre progression, ajuster vos contributions mensuelles et voir exactement quand vous sortirez de la boutique avec votre graal.' },
46
+ { type: 'title', text: 'Pourquoi un plan d\u2019\u00e9pargne est important pour les collectionneurs de montres', level: 3 },
47
+ { type: 'paragraph', html: 'La collection de montres est un jeu de patience. Les prix des mod\u00e8les recherch\u00e9s augmentent r\u00e9guli\u00e8rement, et les achats impulsifs m\u00e8nent souvent \u00e0 des regrets. Une approche d\u2019\u00e9pargne structur\u00e9e vous garde disciplin\u00e9, \u00e9vite les tensions financi\u00e8res et rend l\u2019achat final m\u00e9rit\u00e9. De plus, suivre vos progr\u00e8s jour apr\u00e8s jour cr\u00e9e de l\u2019anticipation et rend le d\u00e9ballage encore plus agr\u00e9able.' },
48
+ { type: 'title', text: 'Comment fixer des objectifs d\u2019\u00e9pargne r\u00e9alistes pour une montre', level: 3 },
49
+ { type: 'paragraph', html: 'Commencez par le prix total, taxes et frais de port inclus. Divisez ensuite par le montant que vous pouvez mettre de c\u00f4t\u00e9 chaque mois sans difficult\u00e9. Une bonne r\u00e8gle consiste \u00e0 ne pas consacrer plus de <strong>10\u201315 % de vos revenus disponibles</strong> \u00e0 l\u2019\u00e9pargne pour une montre. Si le d\u00e9lai vous semble trop long, envisagez de le diviser en plus petites \u00e9tapes \u2014 ou explorez des alternatives plus abordables dans la m\u00eame famille de style.' },
50
+ { type: 'title', text: 'La psychologie du suivi des objectifs', level: 3 },
51
+ { type: 'paragraph', html: 'Le suivi visuel des progr\u00e8s d\u00e9clenche la lib\u00e9ration de dopamine, le m\u00eame neurotransmetteur qui rend la collection si gratifiante. Chaque fois que vous enregistrez une nouvelle contribution et que vous voyez l\u2019anneau de progression se remplir, vous renforcez l\u2019habitude. C\u2019est pourquoi de petites \u00e9pargnes r\u00e9guli\u00e8res fonctionnent souvent mieux que des d\u00e9p\u00f4ts importants et sporadiques \u2014 le rituel lui-m\u00eame fait partie de l\u2019exp\u00e9rience de collectionneur.' },
52
+ ],
53
+ faq: [
54
+ {
55
+ question: 'Combien devrais-je \u00e9pargner chaque mois pour une montre ?',
56
+ answer: 'Visez 10\u201315 % de vos revenus mensuels disponibles. La cl\u00e9 est la r\u00e9gularit\u00e9 \u2014 m\u00eame 100 $ par mois repr\u00e9sentent 1 200 $ par an. Ajustez le montant en fonction de votre \u00e9ch\u00e9ance : des objectifs plus courts n\u00e9cessitent des contributions mensuelles plus \u00e9lev\u00e9es.',
57
+ },
58
+ {
59
+ question: 'Dois-je \u00e9pargner pour une montre \u00e0 la fois ou pour plusieurs ?',
60
+ answer: 'Une \u00e0 la fois est g\u00e9n\u00e9ralement plus efficace. La concentration cr\u00e9e de l\u2019\u00e9lan. Une fois votre premier objectif atteint, la confiance et la discipline se reportent sur le suivant. Cela dit, ce planificateur prend en charge plusieurs objectifs pour vous permettre de comparer les \u00e9ch\u00e9ances.',
61
+ },
62
+ {
63
+ question: 'Que faire si le prix de la montre augmente pendant que j\u2019\u00e9pargne ?',
64
+ answer: 'Bonne question. V\u00e9rifiez le prix du march\u00e9 actuel tous les deux ou trois mois et mettez \u00e0 jour votre objectif. Si les prix montent rapidement, envisagez d\u2019augmenter votre montant mensuel ou de raccourcir le d\u00e9lai pour verrouiller le prix actuel.',
65
+ },
66
+ ],
67
+ bibliography,
68
+ howTo: [
69
+ {
70
+ name: 'D\u00e9finissez votre objectif',
71
+ text: 'Entrez le nom de la montre et son prix total, taxes et frais de port inclus.',
72
+ },
73
+ {
74
+ name: 'Suivez votre \u00e9pargne',
75
+ text: 'Indiquez combien vous avez d\u00e9j\u00e0 \u00e9pargn\u00e9 et combien vous pouvez mettre de c\u00f4t\u00e9 chaque mois.',
76
+ },
77
+ {
78
+ name: 'Surveillez vos progr\u00e8s',
79
+ text: 'Regardez l\u2019anneau de progression se remplir \u00e0 mesure que vous mettez \u00e0 jour votre \u00e9pargne. Ajustez les montants mensuels \u00e0 tout moment.',
80
+ },
81
+ {
82
+ name: 'C\u00e9l\u00e9brez',
83
+ text: 'Quand l\u2019anneau atteint 100 %, vous avez atteint votre objectif. Il est temps d\u2019acheter cette montre !',
84
+ },
85
+ ],
86
+ schemas: [
87
+ {
88
+ '@context': 'https://schema.org',
89
+ '@type': 'FAQPage',
90
+ 'mainEntity': [
91
+ {
92
+ '@type': 'Question',
93
+ 'name': 'Combien devrais-je \u00e9pargner chaque mois pour une montre ?',
94
+ 'acceptedAnswer': {
95
+ '@type': 'Answer',
96
+ 'text': 'Visez 10\u201315 % de vos revenus mensuels disponibles. La cl\u00e9 est la r\u00e9gularit\u00e9 \u2014 m\u00eame 100 $ par mois repr\u00e9sentent 1 200 $ par an.',
97
+ },
98
+ },
99
+ {
100
+ '@type': 'Question',
101
+ 'name': 'Dois-je \u00e9pargner pour une montre \u00e0 la fois ou pour plusieurs ?',
102
+ 'acceptedAnswer': {
103
+ '@type': 'Answer',
104
+ 'text': 'Une \u00e0 la fois est g\u00e9n\u00e9ralement plus efficace. La concentration cr\u00e9e de l\u2019\u00e9lan. Une fois votre premier objectif atteint, appliquez cette discipline au suivant.',
105
+ },
106
+ },
107
+ {
108
+ '@type': 'Question',
109
+ 'name': 'Que faire si le prix de la montre augmente pendant que j\u2019\u00e9pargne ?',
110
+ 'acceptedAnswer': {
111
+ '@type': 'Answer',
112
+ 'text': 'V\u00e9rifiez le prix du march\u00e9 actuel tous les deux ou trois mois et mettez \u00e0 jour votre objectif. Envisagez d\u2019augmenter votre montant mensuel si les prix montent rapidement.',
113
+ },
114
+ },
115
+ ],
116
+ },
117
+ {
118
+ '@context': 'https://schema.org',
119
+ '@type': 'SoftwareApplication',
120
+ 'name': 'Planificateur d\u2019\u00e9pargne pour montres',
121
+ 'operatingSystem': 'Tous',
122
+ 'applicationCategory': 'FinanceApplication',
123
+ 'browserRequirements': 'N\u00e9cessite HTML5. N\u00e9cessite JavaScript.',
124
+ },
125
+ {
126
+ '@context': 'https://schema.org',
127
+ '@type': 'HowTo',
128
+ 'name': 'Comment \u00e9pargner pour l\u2019achat d\u2019une montre',
129
+ 'step': [
130
+ {
131
+ '@type': 'HowToStep',
132
+ 'name': 'D\u00e9finissez votre objectif',
133
+ 'text': 'Entrez le nom de la montre et son prix total, taxes et frais de port inclus.',
134
+ },
135
+ {
136
+ '@type': 'HowToStep',
137
+ 'name': 'Suivez votre \u00e9pargne',
138
+ 'text': 'Indiquez combien vous avez d\u00e9j\u00e0 \u00e9pargn\u00e9 et combien vous pouvez mettre de c\u00f4t\u00e9 chaque mois.',
139
+ },
140
+ {
141
+ '@type': 'HowToStep',
142
+ 'name': 'Surveillez vos progr\u00e8s',
143
+ 'text': 'Regardez l\u2019anneau de progression se remplir \u00e0 mesure que vous mettez \u00e0 jour votre \u00e9pargne.',
144
+ },
145
+ {
146
+ '@type': 'HowToStep',
147
+ 'name': 'C\u00e9l\u00e9brez',
148
+ 'text': 'Quand l\u2019anneau atteint 100 %, vous avez atteint votre objectif. Il est temps d\u2019acheter cette montre !',
149
+ },
150
+ ],
151
+ },
152
+ ],
153
+ };
@@ -0,0 +1,153 @@
1
+ import type { ToolLocaleContent } from '../../../types';
2
+ import type { WatchSavingsPlannerUI } from '../entry';
3
+ import { bibliography } from '../bibliography';
4
+
5
+ export const content: ToolLocaleContent<WatchSavingsPlannerUI> = {
6
+ slug: 'perencana-tabungan-jam',
7
+ title: 'Perencana Tabungan Pembelian Jam Tangan',
8
+ description: 'Tetapkan dan pantau target tabungan untuk pembelian jam tangan berikutnya. Visualisasikan progres, hitung tenggat waktu, dan tetap termotivasi.',
9
+ ui: {
10
+ title: 'Pengaturan Target Tabungan',
11
+ addGoalTitle: 'Target Tabungan Baru',
12
+ goalNameLabel: 'Jam Tangan',
13
+ goalNamePlaceholder: 'mis. Rolex Submariner',
14
+ targetPriceLabel: 'Harga Target',
15
+ currentSavingsLabel: 'Terkumpul',
16
+ monthlyLabel: 'Per Bulan',
17
+ addButton: 'Tambah Target',
18
+ cancelButton: 'Batal',
19
+ goalsEmpty: 'Belum ada target tabungan',
20
+ goalsEmptySub: 'Tetapkan target jam tangan pertamamu dan mulailah menabung!',
21
+ monthsToGoal: 'Waktu menuju target',
22
+ yearsToGoal: 'Tahun menuju target',
23
+ month: 'bln',
24
+ months: 'bln',
25
+ year: 'thn',
26
+ totalSaved: 'Total Terkumpul',
27
+ totalGoals: 'Target',
28
+ achieved: 'Tercapai',
29
+ percentLabel: 'Terkumpul',
30
+ deleteGoal: 'Hapus',
31
+ editGoal: 'Edit',
32
+ saveGoal: 'Simpan',
33
+ currency: 'IDR',
34
+ summaryTitle: 'Ringkasan',
35
+ goalAchieved: 'Tercapai!',
36
+ goalProgress: 'Progres',
37
+ congratsTitle: 'Selamat!',
38
+ congratsDesc: 'Kamu berhasil mencapai target tabungan!',
39
+ monthlyContribution: 'Bulanan',
40
+ targetDate: 'Tanggal Target',
41
+ adjustMonthly: 'Sesuaikan bulanan',
42
+ },
43
+ seo: [
44
+ { type: 'title', text: 'Perencana Tabungan Pembelian Jam Tangan \u2014 Pantau Pembelian Jam Berikutnya', level: 2 },
45
+ { type: 'paragraph', html: 'Menabung untuk jam tangan adalah sebuah perjalanan. Baik itu <strong>Speedmaster vintage</strong>, <strong>Submariner</strong>, atau <strong>Grand Seiko</strong>, rencana tabungan yang jelas mengubah mimpi menjadi tenggat waktu. Alat ini membantumu memvisualisasikan progres, menyesuaikan kontribusi bulanan, dan melihat kapan tepatnya kamu akan keluar dari butik dengan jam impianmu.' },
46
+ { type: 'title', text: 'Mengapa Rencana Tabungan Penting bagi Kolektor Jam Tangan', level: 3 },
47
+ { type: 'paragraph', html: 'Mengoleksi jam tangan adalah permainan kesabaran. Harga model-model yang diminati naik terus, dan pembelian impulsif sering berujung penyesalan. Pendekatan tabungan yang terstruktur membuatmu disiplin, mencegah tekanan finansial, dan membuat pembelian terakhir terasa layak. Ditambah lagi, melacak progresmu hari demi hari membangun antisipasi dan membuat momen membuka kotaknya semakin manis.' },
48
+ { type: 'title', text: 'Cara Menetapkan Target Tabungan Jam Tangan yang Realistis', level: 3 },
49
+ { type: 'paragraph', html: 'Mulailah dengan harga total termasuk pajak dan ongkos kirim. Kemudian bagi dengan jumlah yang bisa kamu sisihkan dengan nyaman setiap bulan. Aturan yang baik adalah mengalokasikan tidak lebih dari <strong>10\u201315% dari pendapatan bersih</strong> untuk tabungan jam tangan. Jika tenggat waktunya terasa terlalu lama, pertimbangkan untuk memecahnya menjadi pencapaian yang lebih kecil \u2014 atau jelajahi alternatif yang lebih terjangkau dalam keluarga gaya yang sama.' },
50
+ { type: 'title', text: 'Psikologi Pelacakan Target', level: 3 },
51
+ { type: 'paragraph', html: 'Pelacakan progres secara visual memicu pelepasan dopamin, zat kimia saraf yang sama yang membuat kegiatan mengoleksi begitu memuaskan. Setiap kali kamu mencatat kontribusi baru dan melihat cincin progres terisi, kamu memperkuat kebiasaan tersebut. Inilah sebabnya menabung kecil secara teratur sering kali lebih efektif daripada setoran besar yang sporadis \u2014 ritualnya sendiri menjadi bagian dari pengalaman mengoleksi.' },
52
+ ],
53
+ faq: [
54
+ {
55
+ question: 'Berapa banyak yang harus saya tabung setiap bulan untuk jam tangan?',
56
+ answer: 'Targetkan 10\u201315% dari pendapatan bulanan bersihmu. Kuncinya adalah konsistensi \u2014 bahkan $100 per bulan akan terkumpul $1.200 per tahun. Sesuaikan jumlahnya berdasarkan tenggat waktumu: target yang lebih pendek membutuhkan kontribusi bulanan yang lebih besar.',
57
+ },
58
+ {
59
+ question: 'Haruskah saya menabung untuk satu jam tangan sekaligus atau beberapa?',
60
+ answer: 'Satu per satu biasanya lebih efektif. Fokus membangun momentum. Setelah mencapai target pertamamu, kepercayaan diri dan disiplin akan terbawa ke target berikutnya. Namun, perencana ini mendukung beberapa target sehingga kamu bisa membandingkan tenggat waktu.',
61
+ },
62
+ {
63
+ question: 'Bagaimana jika harga jam tangan naik saat saya menabung?',
64
+ answer: 'Pertanyaan bagus. Periksa harga pasar saat ini setiap beberapa bulan dan perbarui targetmu. Jika harga naik dengan cepat, pertimbangkan untuk menambah jumlah bulanan atau memperpendek tenggat waktu untuk mengunci harga saat ini.',
65
+ },
66
+ ],
67
+ bibliography,
68
+ howTo: [
69
+ {
70
+ name: 'Tetapkan Target',
71
+ text: 'Masukkan nama jam tangan dan total harganya termasuk pajak dan ongkos kirim.',
72
+ },
73
+ {
74
+ name: 'Lacak Tabungan',
75
+ text: 'Catat berapa banyak yang sudah kamu kumpulkan dan berapa yang bisa kamu sisihkan setiap bulan.',
76
+ },
77
+ {
78
+ name: 'Pantau Progres',
79
+ text: 'Saksikan cincin progres terisi saat kamu memperbarui tabunganmu. Sesuaikan jumlah bulanan kapan saja.',
80
+ },
81
+ {
82
+ name: 'Rayakan',
83
+ text: 'Saat cincin mencapai 100%, targetmu tercapai. Saatnya membeli jam tangan itu!',
84
+ },
85
+ ],
86
+ schemas: [
87
+ {
88
+ '@context': 'https://schema.org',
89
+ '@type': 'FAQPage',
90
+ 'mainEntity': [
91
+ {
92
+ '@type': 'Question',
93
+ 'name': 'Berapa banyak yang harus saya tabung setiap bulan untuk jam tangan?',
94
+ 'acceptedAnswer': {
95
+ '@type': 'Answer',
96
+ 'text': 'Targetkan 10\u201315% dari pendapatan bulanan bersihmu. Kuncinya adalah konsistensi \u2014 bahkan $100 per bulan akan terkumpul $1.200 per tahun.',
97
+ },
98
+ },
99
+ {
100
+ '@type': 'Question',
101
+ 'name': 'Haruskah saya menabung untuk satu jam tangan sekaligus atau beberapa?',
102
+ 'acceptedAnswer': {
103
+ '@type': 'Answer',
104
+ 'text': 'Satu per satu biasanya lebih efektif. Fokus membangun momentum. Setelah mencapai target pertamamu, bawa disiplin itu ke target berikutnya.',
105
+ },
106
+ },
107
+ {
108
+ '@type': 'Question',
109
+ 'name': 'Bagaimana jika harga jam tangan naik saat saya menabung?',
110
+ 'acceptedAnswer': {
111
+ '@type': 'Answer',
112
+ 'text': 'Periksa harga pasar saat ini setiap beberapa bulan dan perbarui targetmu. Pertimbangkan untuk menambah jumlah bulanan jika harga naik dengan cepat.',
113
+ },
114
+ },
115
+ ],
116
+ },
117
+ {
118
+ '@context': 'https://schema.org',
119
+ '@type': 'SoftwareApplication',
120
+ 'name': 'Perencana Tabungan Pembelian Jam Tangan',
121
+ 'operatingSystem': 'Semua',
122
+ 'applicationCategory': 'FinanceApplication',
123
+ 'browserRequirements': 'Memerlukan HTML5. Memerlukan JavaScript.',
124
+ },
125
+ {
126
+ '@context': 'https://schema.org',
127
+ '@type': 'HowTo',
128
+ 'name': 'Cara menabung untuk pembelian jam tangan',
129
+ 'step': [
130
+ {
131
+ '@type': 'HowToStep',
132
+ 'name': 'Tetapkan Target',
133
+ 'text': 'Masukkan nama jam tangan dan total harganya termasuk pajak dan ongkos kirim.',
134
+ },
135
+ {
136
+ '@type': 'HowToStep',
137
+ 'name': 'Lacak Tabungan',
138
+ 'text': 'Catat berapa banyak yang sudah kamu kumpulkan dan berapa yang bisa kamu sisihkan setiap bulan.',
139
+ },
140
+ {
141
+ '@type': 'HowToStep',
142
+ 'name': 'Pantau Progres',
143
+ 'text': 'Saksikan cincin progres terisi saat kamu memperbarui tabunganmu.',
144
+ },
145
+ {
146
+ '@type': 'HowToStep',
147
+ 'name': 'Rayakan',
148
+ 'text': 'Saat cincin mencapai 100%, targetmu tercapai. Saatnya membeli jam tangan itu!',
149
+ },
150
+ ],
151
+ },
152
+ ],
153
+ };