@jjlmoya/utils-chrono 1.3.0 → 1.5.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 (196) hide show
  1. package/package.json +1 -1
  2. package/src/category/i18n/de.ts +11 -9
  3. package/src/category/i18n/en.ts +11 -9
  4. package/src/category/i18n/fr.ts +11 -9
  5. package/src/category/i18n/id.ts +11 -9
  6. package/src/category/i18n/it.ts +11 -9
  7. package/src/category/i18n/ja.ts +11 -9
  8. package/src/category/i18n/ko.ts +11 -9
  9. package/src/category/i18n/nl.ts +11 -9
  10. package/src/category/i18n/pl.ts +11 -9
  11. package/src/category/i18n/pt.ts +11 -9
  12. package/src/category/i18n/ru.ts +11 -9
  13. package/src/category/i18n/sv.ts +11 -9
  14. package/src/category/i18n/tr.ts +11 -9
  15. package/src/category/i18n/zh.ts +11 -9
  16. package/src/category/index.ts +8 -0
  17. package/src/entries.ts +13 -1
  18. package/src/index.ts +4 -0
  19. package/src/tests/locale_completeness.test.ts +1 -1
  20. package/src/tests/no_en_dash.test.ts +41 -0
  21. package/src/tests/no_h1_in_components.test.ts +1 -1
  22. package/src/tests/tool_validation.test.ts +1 -1
  23. package/src/tool/beat-rate-converter/bibliography.ts +1 -1
  24. package/src/tool/beat-rate-converter/components/ConverterPanel.astro +57 -20
  25. package/src/tool/beat-rate-converter/i18n/en.ts +5 -5
  26. package/src/tool/crown-reference-guide/bibliography.ts +3 -3
  27. package/src/tool/crown-reference-guide/i18n/de.ts +37 -29
  28. package/src/tool/crown-reference-guide/i18n/en.ts +38 -30
  29. package/src/tool/crown-reference-guide/i18n/es.ts +36 -28
  30. package/src/tool/crown-reference-guide/i18n/fr.ts +38 -30
  31. package/src/tool/crown-reference-guide/i18n/id.ts +38 -30
  32. package/src/tool/crown-reference-guide/i18n/it.ts +38 -30
  33. package/src/tool/crown-reference-guide/i18n/ja.ts +38 -30
  34. package/src/tool/crown-reference-guide/i18n/ko.ts +38 -30
  35. package/src/tool/crown-reference-guide/i18n/nl.ts +38 -30
  36. package/src/tool/crown-reference-guide/i18n/pl.ts +38 -30
  37. package/src/tool/crown-reference-guide/i18n/pt.ts +38 -30
  38. package/src/tool/crown-reference-guide/i18n/ru.ts +41 -33
  39. package/src/tool/crown-reference-guide/i18n/sv.ts +38 -30
  40. package/src/tool/crown-reference-guide/i18n/tr.ts +38 -30
  41. package/src/tool/crown-reference-guide/i18n/zh.ts +37 -29
  42. package/src/tool/demagnetizing-timer/components/TimerPanel.astro +45 -17
  43. package/src/tool/demagnetizing-timer/i18n/de.ts +3 -3
  44. package/src/tool/demagnetizing-timer/i18n/en.ts +2 -2
  45. package/src/tool/demagnetizing-timer/i18n/es.ts +2 -2
  46. package/src/tool/demagnetizing-timer/i18n/fr.ts +1 -1
  47. package/src/tool/demagnetizing-timer/i18n/id.ts +2 -2
  48. package/src/tool/demagnetizing-timer/i18n/it.ts +2 -2
  49. package/src/tool/demagnetizing-timer/i18n/ja.ts +1 -1
  50. package/src/tool/demagnetizing-timer/i18n/ko.ts +1 -1
  51. package/src/tool/demagnetizing-timer/i18n/nl.ts +2 -2
  52. package/src/tool/demagnetizing-timer/i18n/pl.ts +3 -3
  53. package/src/tool/demagnetizing-timer/i18n/pt.ts +2 -2
  54. package/src/tool/demagnetizing-timer/i18n/ru.ts +10 -10
  55. package/src/tool/demagnetizing-timer/i18n/sv.ts +2 -2
  56. package/src/tool/demagnetizing-timer/i18n/tr.ts +2 -2
  57. package/src/tool/demagnetizing-timer/i18n/zh.ts +1 -1
  58. package/src/tool/lume-color-simulator/bibliography.astro +16 -0
  59. package/src/tool/lume-color-simulator/bibliography.ts +16 -0
  60. package/src/tool/lume-color-simulator/client.ts +186 -0
  61. package/src/tool/lume-color-simulator/component.astro +17 -0
  62. package/src/tool/lume-color-simulator/components/LumePanel.astro +98 -0
  63. package/src/tool/lume-color-simulator/entry.ts +57 -0
  64. package/src/tool/lume-color-simulator/i18n/de.ts +174 -0
  65. package/src/tool/lume-color-simulator/i18n/en.ts +174 -0
  66. package/src/tool/lume-color-simulator/i18n/es.ts +174 -0
  67. package/src/tool/lume-color-simulator/i18n/fr.ts +174 -0
  68. package/src/tool/lume-color-simulator/i18n/id.ts +174 -0
  69. package/src/tool/lume-color-simulator/i18n/it.ts +175 -0
  70. package/src/tool/lume-color-simulator/i18n/ja.ts +174 -0
  71. package/src/tool/lume-color-simulator/i18n/ko.ts +174 -0
  72. package/src/tool/lume-color-simulator/i18n/nl.ts +175 -0
  73. package/src/tool/lume-color-simulator/i18n/pl.ts +174 -0
  74. package/src/tool/lume-color-simulator/i18n/pt.ts +174 -0
  75. package/src/tool/lume-color-simulator/i18n/ru.ts +174 -0
  76. package/src/tool/lume-color-simulator/i18n/sv.ts +174 -0
  77. package/src/tool/lume-color-simulator/i18n/tr.ts +174 -0
  78. package/src/tool/lume-color-simulator/i18n/zh.ts +174 -0
  79. package/src/tool/lume-color-simulator/index.ts +11 -0
  80. package/src/tool/lume-color-simulator/lume-color-simulator.css +208 -0
  81. package/src/tool/lume-color-simulator/seo.astro +16 -0
  82. package/src/tool/moon-phase-visualizer/bibliography.astro +16 -0
  83. package/src/tool/moon-phase-visualizer/bibliography.ts +16 -0
  84. package/src/tool/moon-phase-visualizer/client.ts +243 -0
  85. package/src/tool/moon-phase-visualizer/component.astro +17 -0
  86. package/src/tool/moon-phase-visualizer/components/MoonPanel.astro +63 -0
  87. package/src/tool/moon-phase-visualizer/entry.ts +51 -0
  88. package/src/tool/moon-phase-visualizer/i18n/de.ts +175 -0
  89. package/src/tool/moon-phase-visualizer/i18n/en.ts +175 -0
  90. package/src/tool/moon-phase-visualizer/i18n/es.ts +175 -0
  91. package/src/tool/moon-phase-visualizer/i18n/fr.ts +175 -0
  92. package/src/tool/moon-phase-visualizer/i18n/id.ts +175 -0
  93. package/src/tool/moon-phase-visualizer/i18n/it.ts +176 -0
  94. package/src/tool/moon-phase-visualizer/i18n/ja.ts +175 -0
  95. package/src/tool/moon-phase-visualizer/i18n/ko.ts +175 -0
  96. package/src/tool/moon-phase-visualizer/i18n/nl.ts +176 -0
  97. package/src/tool/moon-phase-visualizer/i18n/pl.ts +175 -0
  98. package/src/tool/moon-phase-visualizer/i18n/pt.ts +175 -0
  99. package/src/tool/moon-phase-visualizer/i18n/ru.ts +175 -0
  100. package/src/tool/moon-phase-visualizer/i18n/sv.ts +175 -0
  101. package/src/tool/moon-phase-visualizer/i18n/tr.ts +175 -0
  102. package/src/tool/moon-phase-visualizer/i18n/zh.ts +175 -0
  103. package/src/tool/moon-phase-visualizer/index.ts +11 -0
  104. package/src/tool/moon-phase-visualizer/moon-phase-visualizer.css +216 -0
  105. package/src/tool/moon-phase-visualizer/seo.astro +16 -0
  106. package/src/tool/power-reserve-estimator/bibliography.ts +2 -2
  107. package/src/tool/power-reserve-estimator/components/EstimatorPanel.astro +146 -39
  108. package/src/tool/power-reserve-estimator/i18n/de.ts +2 -2
  109. package/src/tool/power-reserve-estimator/i18n/en.ts +3 -3
  110. package/src/tool/power-reserve-estimator/i18n/es.ts +2 -2
  111. package/src/tool/power-reserve-estimator/i18n/fr.ts +2 -2
  112. package/src/tool/power-reserve-estimator/i18n/id.ts +2 -2
  113. package/src/tool/power-reserve-estimator/i18n/it.ts +2 -2
  114. package/src/tool/power-reserve-estimator/i18n/nl.ts +2 -2
  115. package/src/tool/power-reserve-estimator/i18n/pt.ts +2 -2
  116. package/src/tool/strap-taper-calculator/i18n/en.ts +2 -2
  117. package/src/tool/strap-taper-calculator/i18n/ru.ts +4 -4
  118. package/src/tool/tachymeter-calculator/bibliography.astro +16 -0
  119. package/src/tool/tachymeter-calculator/bibliography.ts +16 -0
  120. package/src/tool/tachymeter-calculator/client.ts +180 -0
  121. package/src/tool/tachymeter-calculator/component.astro +15 -0
  122. package/src/tool/tachymeter-calculator/components/CalculatorPanel.astro +121 -0
  123. package/src/tool/tachymeter-calculator/entry.ts +43 -0
  124. package/src/tool/tachymeter-calculator/i18n/de.ts +172 -0
  125. package/src/tool/tachymeter-calculator/i18n/en.ts +172 -0
  126. package/src/tool/tachymeter-calculator/i18n/es.ts +172 -0
  127. package/src/tool/tachymeter-calculator/i18n/fr.ts +172 -0
  128. package/src/tool/tachymeter-calculator/i18n/id.ts +172 -0
  129. package/src/tool/tachymeter-calculator/i18n/it.ts +172 -0
  130. package/src/tool/tachymeter-calculator/i18n/ja.ts +172 -0
  131. package/src/tool/tachymeter-calculator/i18n/ko.ts +172 -0
  132. package/src/tool/tachymeter-calculator/i18n/nl.ts +172 -0
  133. package/src/tool/tachymeter-calculator/i18n/pl.ts +172 -0
  134. package/src/tool/tachymeter-calculator/i18n/pt.ts +172 -0
  135. package/src/tool/tachymeter-calculator/i18n/ru.ts +172 -0
  136. package/src/tool/tachymeter-calculator/i18n/sv.ts +172 -0
  137. package/src/tool/tachymeter-calculator/i18n/tr.ts +172 -0
  138. package/src/tool/tachymeter-calculator/i18n/zh.ts +172 -0
  139. package/src/tool/tachymeter-calculator/index.ts +11 -0
  140. package/src/tool/tachymeter-calculator/seo.astro +16 -0
  141. package/src/tool/tachymeter-calculator/tachymeter-calculator.css +492 -0
  142. package/src/tool/tachymeter-calculator/utils.ts +10 -0
  143. package/src/tool/watch-accuracy-tracker/i18n/pl.ts +1 -1
  144. package/src/tool/watch-accuracy-tracker/i18n/ru.ts +6 -6
  145. package/src/tool/watch-savings-planner/i18n/en.ts +5 -5
  146. package/src/tool/watch-size-comparator/bibliography.astro +16 -0
  147. package/src/tool/watch-size-comparator/bibliography.ts +16 -0
  148. package/src/tool/watch-size-comparator/client.ts +287 -0
  149. package/src/tool/watch-size-comparator/component.astro +17 -0
  150. package/src/tool/watch-size-comparator/components/WatchForm.astro +121 -0
  151. package/src/tool/watch-size-comparator/drawing/index.ts +79 -0
  152. package/src/tool/watch-size-comparator/drawing/measures.ts +57 -0
  153. package/src/tool/watch-size-comparator/drawing/utils.ts +37 -0
  154. package/src/tool/watch-size-comparator/drawing/watch.ts +78 -0
  155. package/src/tool/watch-size-comparator/entry.ts +62 -0
  156. package/src/tool/watch-size-comparator/i18n/de.ts +189 -0
  157. package/src/tool/watch-size-comparator/i18n/en.ts +189 -0
  158. package/src/tool/watch-size-comparator/i18n/es.ts +189 -0
  159. package/src/tool/watch-size-comparator/i18n/fr.ts +189 -0
  160. package/src/tool/watch-size-comparator/i18n/id.ts +189 -0
  161. package/src/tool/watch-size-comparator/i18n/it.ts +190 -0
  162. package/src/tool/watch-size-comparator/i18n/ja.ts +189 -0
  163. package/src/tool/watch-size-comparator/i18n/ko.ts +189 -0
  164. package/src/tool/watch-size-comparator/i18n/nl.ts +190 -0
  165. package/src/tool/watch-size-comparator/i18n/pl.ts +189 -0
  166. package/src/tool/watch-size-comparator/i18n/pt.ts +189 -0
  167. package/src/tool/watch-size-comparator/i18n/ru.ts +189 -0
  168. package/src/tool/watch-size-comparator/i18n/sv.ts +189 -0
  169. package/src/tool/watch-size-comparator/i18n/tr.ts +189 -0
  170. package/src/tool/watch-size-comparator/i18n/zh.ts +189 -0
  171. package/src/tool/watch-size-comparator/index.ts +11 -0
  172. package/src/tool/watch-size-comparator/seo.astro +16 -0
  173. package/src/tool/watch-size-comparator/watch-size-comparator.css +373 -0
  174. package/src/tool/water-resistance-converter/bibliography.ts +2 -2
  175. package/src/tool/water-resistance-converter/i18n/de.ts +5 -5
  176. package/src/tool/water-resistance-converter/i18n/en.ts +6 -6
  177. package/src/tool/water-resistance-converter/i18n/es.ts +6 -6
  178. package/src/tool/water-resistance-converter/i18n/fr.ts +6 -6
  179. package/src/tool/water-resistance-converter/i18n/id.ts +6 -6
  180. package/src/tool/water-resistance-converter/i18n/it.ts +6 -6
  181. package/src/tool/water-resistance-converter/i18n/ja.ts +6 -6
  182. package/src/tool/water-resistance-converter/i18n/ko.ts +6 -6
  183. package/src/tool/water-resistance-converter/i18n/nl.ts +6 -6
  184. package/src/tool/water-resistance-converter/i18n/pl.ts +6 -6
  185. package/src/tool/water-resistance-converter/i18n/pt.ts +6 -6
  186. package/src/tool/water-resistance-converter/i18n/ru.ts +8 -8
  187. package/src/tool/water-resistance-converter/i18n/sv.ts +6 -6
  188. package/src/tool/water-resistance-converter/i18n/tr.ts +6 -6
  189. package/src/tool/water-resistance-converter/i18n/zh.ts +3 -3
  190. package/src/tool/wrist-presence-calculator/i18n/de.ts +1 -1
  191. package/src/tool/wrist-presence-calculator/i18n/fr.ts +1 -1
  192. package/src/tool/wrist-presence-calculator/i18n/pl.ts +1 -1
  193. package/src/tool/wrist-presence-calculator/i18n/pt.ts +1 -1
  194. package/src/tool/wrist-presence-calculator/i18n/ru.ts +21 -21
  195. package/src/tool/wrist-presence-calculator/i18n/sv.ts +1 -1
  196. package/src/tools.ts +8 -0
@@ -0,0 +1,175 @@
1
+ import type { ToolLocaleContent } from '../../../types';
2
+ import type { MoonPhaseVisualizerUI } from '../entry';
3
+ import { bibliography } from '../bibliography';
4
+
5
+ export const content: ToolLocaleContent<MoonPhaseVisualizerUI> = {
6
+ slug: 'ay-evresi-gorsellestirici',
7
+ title: 'Ay Evresi Gorsellestirici: Ay Takvimi ve Saat Komplikasyon Araci',
8
+ description: 'Anlık ay evresini, aydınlanma yüzdesini, ay yaşını ve yaklaşan dolunay ile yeni ay tarihlerini görselleştirin. Saatinizin ay evresi komplikasyonunu ayarlamak için mükemmel bir araç.',
9
+ ui: {
10
+ title: 'Ay Evresi Görselleştirici',
11
+ selectDate: 'Tarih Seçin',
12
+ today: 'Bugün',
13
+ moonPhase: 'Ay Evresi',
14
+ illumination: 'Aydınlanma',
15
+ moonAge: 'Ay Yaşı',
16
+ daysUntilFull: 'Dolunaya Kalan Gün',
17
+ daysUntilNew: 'Yeni Aya Kalan Gün',
18
+ newMoon: 'Yeni Ay',
19
+ waxingCrescent: 'Hilal (Büyüyen)',
20
+ firstQuarter: 'İlk Dördün',
21
+ waxingGibbous: 'Şişkin Ay (Büyüyen)',
22
+ fullMoon: 'Dolunay',
23
+ waningGibbous: 'Şişkin Ay (Küçülen)',
24
+ lastQuarter: 'Son Dördün',
25
+ waningCrescent: 'Hilal (Küçülen)',
26
+ nextFullMoon: 'Sonraki Dolunay',
27
+ nextNewMoon: 'Sonraki Yeni Ay',
28
+ tipTitle: 'İpucu',
29
+ tipContent: 'Bir ay evresi saatini ayarlamak için önce bu aracı kullanarak bugünün ay evresini bulun, ardından kurma kolunu ay diski eşleşene kadar ilerletin. Çoğu mekanik ay evresi, 2 yılda bir günlük sapma ile çalışır.',
30
+ days: 'Döngü İlerlemesi',
31
+ day: 'gün',
32
+ },
33
+ seo: [
34
+ { type: 'title', text: 'Ay Evresi Gorsellestirici: Ay Takvimi ve Saat Ayar Kilavuzu', level: 2 },
35
+ { type: 'paragraph', html: 'Ay Evresi Görselleştirici, ayın gerçekçi bir görüntüsüyle <strong>anlık ay evresini</strong> gösterir. <strong>Aydınlanma yüzdesi, ay yaşı, sonraki dolunaya ve yeni aya kalan günleri</strong> görüntüleyin. Saat tutkunları için ay evresi komplikasyonunu doğru şekilde ayarlamak amacıyla tasarlanmıştır-aynı zamanda geçmiş veya gelecek herhangi bir tarih için genel bir ay takvimi olarak da çalışır.' },
36
+ { type: 'title', text: 'Ay Evresi Sözlüğü', level: 3 },
37
+ {
38
+ type: 'glossary', items: [
39
+ { term: 'Yeni Ay', definition: 'Ay, Dünya ile Güneş arasındadır. Aydınlık yüzü bizden uzağa bakar. %0 aydınlanma. Ay döngüsünün başlangıcı.' },
40
+ { term: 'Hilal (Büyüyen)', definition: '%1-49 aydınlanma. Sağ tarafta (Kuzey Yarımküre) ince bir hilal belirir. Ay ilk dördüne doğru ilerlemektedir.' },
41
+ { term: 'İlk Dördün', definition: '%50 aydınlanma. Görünür yüzeyin yarısı aydınlıktır. Ay döngüsünün dörtte birini tamamlamıştır.' },
42
+ { term: 'Şişkin Ay (Büyüyen)', definition: '%51-99 aydınlanma. Yarısından fazlası aydınlıktır. Ay dolunaya doğru ilerlemektedir.' },
43
+ { term: 'Dolunay', definition: '%100 aydınlanma. Görünür yüzeyin tamamı aydınlıktır. Ay döngüsünün zirvesi.' },
44
+ { term: 'Şişkin Ay (Küçülen)', definition: '%99-51 aydınlanma. Aydınlık alan sağ taraftan küçülmeye başlar.' },
45
+ { term: 'Son Dördün', definition: '%50 aydınlanma. Sol yarısı aydındır. Döngünün dörtte üçü tamamlanmıştır.' },
46
+ { term: 'Hilal (Küçülen)', definition: '%49-1 aydınlanma. Döngü yeni aya sıfırlanmadan önce solda ince bir hilal.' },
47
+ ]
48
+ },
49
+ { type: 'title', text: 'Ay Evreli Saat Nasıl Ayarlanır?', level: 3 },
50
+ {
51
+ type: 'list', items: [
52
+ 'Bugünün tam ay evresini öğrenmek için bu aracı kullanın. Evre adını ve görsel görünümünü not edin.',
53
+ 'Saatinizde kurma kolunu ay evresi ayar pozisyonuna (genellikle 2. veya 3. konum) çekin.',
54
+ 'Ay diski araçtakiyle aynı evreyi gösterene kadar kurma kolunu ilerletin. Dolunay göstergesi genellikle diskin üst-orta kısmındadır.',
55
+ 'Ay evresini akşam 9 ile sabah 3 arasında ayarlamaktan kaçının; bu saatlerde tarih değiştirme mekanizması devrededir ve hasar görebilir.',
56
+ 'Çoğu mekanik ay evreli saat, iki ay döngüsünü (59 gün) yaklaşık olarak hesaplayan 59 dişli bir çark kullanır. Bu, yaklaşık 2 yılda bir günlük sapma anlamına gelir.',
57
+ 'Yüksek hassasiyet için bazı saatler (Patek Philippe, A. Lange & Söhne) 100+ yılda bir günlük sapmayla çalışan çarklar kullanır.',
58
+ ]
59
+ },
60
+ { type: 'diagnostic', variant: 'warning', title: 'Tarih Değişimi Sırasında Asla Ayarlamayın', icon: 'mdi:alert', html: 'Ay evresini (veya tarihi) yaklaşık <strong>akşam 9 ile sabah 3 arasında</strong> ayarlamayın. Bu aralıkta saatin tarih değiştirme mekanizması fiziksel olarak tarih çarkına bağlıdır. Kurma kolunu zorlamak dişlilere zarar verebilir. Bu saatlerde ayarlama yapmanız gerekiyorsa, önce akrebi sabah 3\'ü geçecek şekilde ilerletin, ardından ay evresini ayarlayın.' },
61
+ { type: 'title', text: 'Mekanik vs Yüksek Hassasiyetli Ay Evresi', level: 3 },
62
+ {
63
+ type: 'table', headers: ['Tür', 'Dişli Çark', 'Sapma Birikimi', 'Bir Günlük Sapma Sonrası', 'Örnek Saatler'], rows: [
64
+ ['Standart / Giriş', '59 diş', '~2 yılda 1 gün', '~2.5 yıl', 'Seiko, Orient, Hamilton, Tissot'],
65
+ ['Orta Seviye', '135 diş', '~10 yılda 1 gün', '~10 yıl', 'Omega, Tudor, IWC, Breitling'],
66
+ ['Yüksek Hassasiyet', 'Çark sistemi', '~100+ yılda 1 gün', '100+ yıl', 'Patek Philippe, A. Lange & Söhne'],
67
+ ]
68
+ },
69
+ { type: 'tip', title: 'Ay Diski Nasıl Okunur?', html: 'Çoğu ay evreli saatte ay diski üzerinde birbirinin <strong>tam karşısında iki ay</strong> bulunur. Her dolunay, üst-orta açıklıkla hizalanır. Bir tam döngüden (29.5 gün) sonra ikinci ay onun yerini alır. 59 dişli çark bu yüzden işe yarar: 59 günde tam bir tur atar-yani tam olarak iki ay döngüsü.' },
70
+ {
71
+ type: 'summary', title: 'Hızlı Başvuru', items: [
72
+ 'Ay (sinodik) döngüsü tam olarak 29.53058867 gündür. Araç maksimum doğruluk için bu değeri kullanır.',
73
+ 'Sekiz evre sonsuz bir döngü halinde tekrarlanır: yeni ay → hilal (büyüyen) → ilk dördün → şişkin ay (büyüyen) → dolunay → şişkin ay (küçülen) → son dördün → hilal (küçülen).',
74
+ 'Ay evreli saat ayarı: bugünün evresini burada bulun, ardından saatinizdeki diskte eşleştirin.',
75
+ 'Kurma kolunu asla akşam 9 ile sabah 3 arasında zorlamayın. Önce saati sabah 3\'ü geçecek şekilde ilerletin.',
76
+ 'Standart 59 dişli ay evreleri yaklaşık 2.5 yılda bir gün sapar. Düzeltme için diskin bir tık ilerletilmesi gerekir.',
77
+ ]
78
+ },
79
+ ],
80
+ faq: [
81
+ {
82
+ question: 'Saatimde ay evresi nasıl ayarlanır?',
83
+ answer: 'Bu aracı kullanarak bugünün ay evresini bulun. Kurma kolunu (genellikle 2. konum) ay diski eşleşene kadar ilerletin. Akşam 9 ile sabah 3 arasında ayarlama yapmaktan kaçının.',
84
+ },
85
+ {
86
+ question: 'Mekanik ay evreli saatler ne kadar hassastır?',
87
+ answer: 'Çoğu, yaklaşık 2 yılda bir günlük sapmayla çalışan 59 dişli bir çark kullanır. Patek Philippe ve A. Lange & Söhne gibi üst düzey saatler 100+ yılda bir günlük hassasiyete ulaşır.',
88
+ },
89
+ {
90
+ question: 'Sinodik ve sidereal ay arasındaki fark nedir?',
91
+ answer: 'Sidereal ay (27.3 gün), ayın yıldızlara göre yörüngesidir. Sinodik ay (29.53 gün) ise aynı evreler arasındaki süredir ve ay evreli saatlerin takip ettiği döngüdür.',
92
+ },
93
+ ],
94
+ bibliography,
95
+ howTo: [
96
+ {
97
+ name: 'Bir tarih seçin',
98
+ text: 'Tarih seçiciyi kullanarak geçmiş veya gelecek herhangi bir tarihi seçin ve ay evresini görün.',
99
+ },
100
+ {
101
+ name: 'Evre verilerini okuyun',
102
+ text: 'Kartlar evre adı, aydınlanma yüzdesi, ay yaşı ve döngü ilerlemesini gösterir.',
103
+ },
104
+ {
105
+ name: 'Yaklaşan olayları bulun',
106
+ text: 'Sonraki dolunay ve yeni ay tarihleri otomatik olarak görüntülenir.',
107
+ },
108
+ {
109
+ name: 'Saatini ayarla',
110
+ text: 'Görüntülenen evreyi kullanarak ay evreli saatinizi doğru şekilde ayarlayın.',
111
+ },
112
+ ],
113
+ schemas: [
114
+ {
115
+ '@context': 'https://schema.org',
116
+ '@type': 'FAQPage',
117
+ 'mainEntity': [
118
+ {
119
+ '@type': 'Question',
120
+ 'name': 'Saatimde ay evresi nasıl ayarlanır?',
121
+ 'acceptedAnswer': {
122
+ '@type': 'Answer',
123
+ 'text': 'Bugünün ay evresini bu araçla bulun. Ay diski eşleşene kadar kurma kolunu ilerletin. Akşam 9 ile sabah 3 arasında ayarlama yapmaktan kaçının.',
124
+ },
125
+ },
126
+ {
127
+ '@type': 'Question',
128
+ 'name': 'Mekanik ay evreli saatler ne kadar hassastır?',
129
+ 'acceptedAnswer': {
130
+ '@type': 'Answer',
131
+ 'text': 'Çoğu, yaklaşık 2 yılda bir günlük sapma gösteren 59 dişli çark kullanır. Üst düzey saatler 100+ yılda bir günlük hassasiyete ulaşır.',
132
+ },
133
+ },
134
+ {
135
+ '@type': 'Question',
136
+ 'name': 'Sinodik ve sidereal ay arasındaki fark nedir?',
137
+ 'acceptedAnswer': {
138
+ '@type': 'Answer',
139
+ 'text': 'Sidereal ay (27.3 gün) ayın yıldızlara göre yörüngesidir. Sinodik ay (29.53 gün) aynı evreler arasındaki süredir ve ay evreli saatlerin takip ettiği döngüdür.',
140
+ },
141
+ },
142
+ ],
143
+ },
144
+ {
145
+ '@context': 'https://schema.org',
146
+ '@type': 'SoftwareApplication',
147
+ 'name': 'Ay Evresi Görselleştirici',
148
+ 'operatingSystem': 'Tümü',
149
+ 'applicationCategory': 'UtilitiesApplication',
150
+ 'browserRequirements': 'HTML5 gerekli. JavaScript gerekli.',
151
+ },
152
+ {
153
+ '@context': 'https://schema.org',
154
+ '@type': 'HowTo',
155
+ 'name': 'Ay evreleri nasıl görselleştirilir',
156
+ 'step': [
157
+ {
158
+ '@type': 'HowToStep',
159
+ 'name': 'Bir tarih seçin',
160
+ 'text': 'Tarih seçiciyi kullanarak herhangi bir tarihi seçin ve ay evresini görün.',
161
+ },
162
+ {
163
+ '@type': 'HowToStep',
164
+ 'name': 'Evre verilerini okuyun',
165
+ 'text': 'Kartlar evre adı, aydınlanma, ay yaşı ve döngü ilerlemesini gösterir.',
166
+ },
167
+ {
168
+ '@type': 'HowToStep',
169
+ 'name': 'Saatini ayarla',
170
+ 'text': 'Görüntülenen evreyi kullanarak ay evreli saatinizi ayarlayın.',
171
+ },
172
+ ],
173
+ },
174
+ ],
175
+ };
@@ -0,0 +1,175 @@
1
+ import type { ToolLocaleContent } from '../../../types';
2
+ import type { MoonPhaseVisualizerUI } from '../entry';
3
+ import { bibliography } from '../bibliography';
4
+
5
+ export const content: ToolLocaleContent<MoonPhaseVisualizerUI> = {
6
+ slug: 'moon-phase-visualizer',
7
+ title: '月相可视化工具 — nar 日历与手表月相调校工具',
8
+ description: '实时查看当前月相、照亮率、月龄以及下次满月和新月。调校手表月相功能的理想工具。',
9
+ ui: {
10
+ title: '月相可视化工具',
11
+ selectDate: '选择日期',
12
+ today: '今天',
13
+ moonPhase: '月相',
14
+ illumination: '照亮率',
15
+ moonAge: '月龄',
16
+ daysUntilFull: '距离满月',
17
+ daysUntilNew: '距离新月',
18
+ newMoon: '新月',
19
+ waxingCrescent: '蛾眉月',
20
+ firstQuarter: '上弦月',
21
+ waxingGibbous: '盈凸月',
22
+ fullMoon: '满月',
23
+ waningGibbous: '亏凸月',
24
+ lastQuarter: '下弦月',
25
+ waningCrescent: '残月',
26
+ nextFullMoon: '下次满月',
27
+ nextNewMoon: '下次新月',
28
+ tipTitle: '提示',
29
+ tipContent: '调校月相表时,先用此工具查找今天的月相,然后转动表冠直到月相盘与之匹配。大部分机械月相表的误差约为每 2 年偏差一天。',
30
+ days: '周期进度',
31
+ day: '天',
32
+ },
33
+ seo: [
34
+ { type: 'title', text: '月相可视化工具 — 月相查询与手表调校指南', level: 2 },
35
+ { type: 'paragraph', html: '月相可视化工具以逼真的月球渲染效果展示 <strong>当前月相</strong>。查看 <strong>照亮率百分比、月龄、距离下次满月的天数以及下次新月</strong>。专为需要精确调校月相功能的手表爱好者设计——同时也适用于查询过去或未来任何日期的通用月历。' },
36
+ { type: 'title', text: '月相术语表', level: 3 },
37
+ {
38
+ type: 'glossary', items: [
39
+ { term: '新月', definition: '月球运行到地球与太阳之间,被照亮的半球背对我们。照亮率 0%。月相周期的起点。' },
40
+ { term: '蛾眉月', definition: '照亮率 1-49%。右侧出现一道细弯月(北半球)。月球正向上弦月阶段移动。' },
41
+ { term: '上弦月', definition: '照亮率 50%。可见面的一半被照亮。月球完成其周期的四分之一。' },
42
+ { term: '盈凸月', definition: '照亮率 51-99%。超过一半被照亮。月球正向着满月阶段变化。' },
43
+ { term: '满月', definition: '照亮率 100%。整个可见面被照亮。月相周期的高峰。' },
44
+ { term: '亏凸月', definition: '照亮率 99-51%。被照亮的部分从右侧开始缩小。' },
45
+ { term: '下弦月', definition: '照亮率 50%。左半部分被照亮。周期完成四分之三。' },
46
+ { term: '残月', definition: '照亮率 49-1%。左侧一道细弯月,之后周期重新从新月开始。' },
47
+ ]
48
+ },
49
+ { type: 'title', text: '如何调校月相表', level: 3 },
50
+ {
51
+ type: 'list', items: [
52
+ '使用本工具查找今天的精确月相,记下月相名称和视觉外观。',
53
+ '将手表表冠拉出至月相调校档位(通常为第 2 或第 3 档)。',
54
+ '转动表冠直到月相盘显示与工具相同的月相。满月指示器通常位于月相盘的正上方中央。',
55
+ '避免在晚上 9 点到凌晨 3 点之间调校月相,此时日期切换机构正在运作,强行操作可能造成损坏。',
56
+ '大多数机械月相表使用 59 齿齿轮,近似两个太阴月周期(59 天),因此每 2 年会累积约 1 天的误差。',
57
+ '高精度手表(百达翡丽、朗格)使用更精密的齿轮系,误差仅为每 100 年以上偏差一天。',
58
+ ]
59
+ },
60
+ { type: 'diagnostic', variant: 'warning', title: '切勿在日期切换期间调校', icon: 'mdi:alert', html: '请勿在 <strong>晚上 9 点到凌晨 3 点</strong> 之间调校月相(或日期)。在此期间,手表的日期切换机构与日期轮处于物理啮合状态。强行转动表冠可能导致齿轮损坏。如必须在此期间调校,先将指针拨过凌晨 3 点,再调校月相。' },
61
+ { type: 'title', text: '普通月相与高精度月相对比', level: 3 },
62
+ {
63
+ type: 'table', headers: ['类型', '齿轮', '误差累积', '偏差一天需要', '代表表款'], rows: [
64
+ ['标准/入门', '59 齿', '约每 2 年偏差 1 天', '约 2.5 年', '精工、东方、汉米尔顿、天梭'],
65
+ ['中档', '135 齿', '约每 10 年偏差 1 天', '约 10 年', '欧米茄、帝舵、万国、百年灵'],
66
+ ['高精度', '齿轮系', '约每 100+ 年偏差 1 天', '100+ 年', '百达翡丽、朗格'],
67
+ ]
68
+ },
69
+ { type: 'tip', title: '看懂月相盘', html: '大多数月相表的月相盘上有 <strong>两个月亮</strong> 相对排列。每个满月对准中央顶部的窗口。经过一个完整周期(29.5 天)后,第二个月亮接替位置。这就是 59 齿齿轮的运作原理:它每 59 天转完一整圈——正好是两个太阴月周期。' },
70
+ {
71
+ type: 'summary', title: '快速参考', items: [
72
+ '太阴(朔望)周期精确为 29.53058867 天。本工具使用该数值以获得最高精度。',
73
+ '八个月相周而复始:新月 → 蛾眉月 → 上弦月 → 盈凸月 → 满月 → 亏凸月 → 下弦月 → 残月。',
74
+ '调校月相表:在此查找今天月相,然后在手表的月相盘上匹配。',
75
+ '切勿在晚上 9 点到凌晨 3 点之间强行转动表冠。先将时间拨过凌晨 3 点。',
76
+ '标准 59 齿月相每约 2.5 年偏差一天。修正需要将月相盘向前推进一格。',
77
+ ]
78
+ },
79
+ ],
80
+ faq: [
81
+ {
82
+ question: '如何调校手表的月相功能?',
83
+ answer: '使用本工具查找今天的月相。转动表冠(通常为第 2 档)直到月相盘显示匹配的月相。避免在晚上 9 点到凌晨 3 点之间调校,此时日期机构处于啮合状态。',
84
+ },
85
+ {
86
+ question: '机械月相表的精度如何?',
87
+ answer: '大多数使用 59 齿齿轮,精度约为每 2 年偏差一天。百达翡丽和朗格等高端腕表可达到每 100 年以上偏差一天。',
88
+ },
89
+ {
90
+ question: '朔望月和恒星月有什么区别?',
91
+ answer: '恒星月(27.3 天)是月球相对于恒星的公转周期。朔望月(29.53 天)是两次相同月相之间的时间间隔,月相表追踪的正是这个周期。',
92
+ },
93
+ ],
94
+ bibliography,
95
+ howTo: [
96
+ {
97
+ name: '选择日期',
98
+ text: '使用日期选择器选择过去或未来的任意日期,查看对应月相。',
99
+ },
100
+ {
101
+ name: '查看月相数据',
102
+ text: '信息卡片显示月相名称、照亮率百分比、月龄和周期进度。',
103
+ },
104
+ {
105
+ name: '查看月相事件',
106
+ text: '下次满月和新月的日期会自动显示。',
107
+ },
108
+ {
109
+ name: '调校手表',
110
+ text: '使用显示的月相数据精确调校手表的月相功能。',
111
+ },
112
+ ],
113
+ schemas: [
114
+ {
115
+ '@context': 'https://schema.org',
116
+ '@type': 'FAQPage',
117
+ 'mainEntity': [
118
+ {
119
+ '@type': 'Question',
120
+ 'name': '如何调校手表的月相功能?',
121
+ 'acceptedAnswer': {
122
+ '@type': 'Answer',
123
+ 'text': '使用本工具查找今天的月相。转动表冠直到月相盘显示匹配的月相。避免在晚上 9 点到凌晨 3 点之间调校。',
124
+ },
125
+ },
126
+ {
127
+ '@type': 'Question',
128
+ 'name': '机械月相表的精度如何?',
129
+ 'acceptedAnswer': {
130
+ '@type': 'Answer',
131
+ 'text': '大多数使用 59 齿齿轮,精度约为每 2 年偏差一天。高端腕表可达到每 100 年以上偏差一天。',
132
+ },
133
+ },
134
+ {
135
+ '@type': 'Question',
136
+ 'name': '朔望月和恒星月有什么区别?',
137
+ 'acceptedAnswer': {
138
+ '@type': 'Answer',
139
+ 'text': '恒星月(27.3 天)是月球相对于恒星的公转周期。朔望月(29.53 天)是两次相同月相之间的时间间隔,月相表追踪的正是这个周期。',
140
+ },
141
+ },
142
+ ],
143
+ },
144
+ {
145
+ '@context': 'https://schema.org',
146
+ '@type': 'SoftwareApplication',
147
+ 'name': 'Moon Phase Visualizer',
148
+ 'operatingSystem': 'All',
149
+ 'applicationCategory': 'UtilitiesApplication',
150
+ 'browserRequirements': 'Requires HTML5. Requires JavaScript.',
151
+ },
152
+ {
153
+ '@context': 'https://schema.org',
154
+ '@type': 'HowTo',
155
+ 'name': 'How to visualize moon phases',
156
+ 'step': [
157
+ {
158
+ '@type': 'HowToStep',
159
+ 'name': 'Select a date',
160
+ 'text': 'Use the date picker to choose any date and see the moon phase.',
161
+ },
162
+ {
163
+ '@type': 'HowToStep',
164
+ 'name': 'Read the phase data',
165
+ 'text': 'The cards show phase name, illumination, moon age, and cycle progress.',
166
+ },
167
+ {
168
+ '@type': 'HowToStep',
169
+ 'name': 'Set your watch',
170
+ 'text': 'Use the displayed phase to set your moon phase watch complication.',
171
+ },
172
+ ],
173
+ },
174
+ ],
175
+ };
@@ -0,0 +1,11 @@
1
+ import type { ToolDefinition } from '../../types';
2
+ import { moonPhaseVisualizer } from './entry';
3
+
4
+ export * from './entry';
5
+
6
+ export const MOON_PHASE_VISUALIZER_TOOL: ToolDefinition = {
7
+ entry: moonPhaseVisualizer,
8
+ Component: () => import('./component.astro'),
9
+ SEOComponent: () => import('./seo.astro'),
10
+ BibliographyComponent: () => import('./bibliography.astro'),
11
+ };
@@ -0,0 +1,216 @@
1
+ .tool-main-card {
2
+ background: var(--bg-surface);
3
+ border: 1px solid var(--border-color);
4
+ border-radius: 1.25rem;
5
+ max-width: 480px;
6
+ margin: 0 auto;
7
+ padding: 1.75rem;
8
+ display: flex;
9
+ flex-direction: column;
10
+ gap: 1.5rem;
11
+ box-shadow: var(--shadow-base);
12
+ }
13
+
14
+ .moon-panel {
15
+ display: flex;
16
+ flex-direction: column;
17
+ gap: 1.25rem;
18
+ }
19
+
20
+ .panel-section {
21
+ display: flex;
22
+ flex-direction: column;
23
+ gap: 0.5rem;
24
+ }
25
+
26
+ .section-label {
27
+ font-size: 0.75rem;
28
+ font-weight: 600;
29
+ color: var(--text-base);
30
+ opacity: 0.7;
31
+ text-transform: uppercase;
32
+ letter-spacing: 0.06em;
33
+ }
34
+
35
+ /* Date controls */
36
+ .date-row {
37
+ display: flex;
38
+ gap: 0.5rem;
39
+ align-items: center;
40
+ }
41
+
42
+ .date-row input[type="date"] {
43
+ flex: 1;
44
+ padding: 0.65rem 0.75rem;
45
+ background: var(--bg-page);
46
+ border: 1px solid var(--border-base);
47
+ border-radius: 0.75rem;
48
+ color: var(--text-base);
49
+ font-size: 0.875rem;
50
+ transition: border-color 0.2s;
51
+ color-scheme: dark;
52
+ box-sizing: border-box;
53
+ }
54
+
55
+ .date-row input[type="date"]:focus {
56
+ outline: none;
57
+ border-color: var(--accent);
58
+ }
59
+
60
+ .btn-today {
61
+ padding: 0.6rem 1rem;
62
+ background: var(--bg-page);
63
+ border: 1px solid var(--border-base);
64
+ border-radius: 0.75rem;
65
+ color: var(--text-base);
66
+ font-size: 0.8125rem;
67
+ font-weight: 600;
68
+ cursor: pointer;
69
+ transition: all 0.2s;
70
+ white-space: nowrap;
71
+ }
72
+
73
+ .btn-today:hover {
74
+ border-color: var(--accent);
75
+ background: color-mix(in srgb, var(--accent) 8%, var(--bg-page));
76
+ }
77
+
78
+ /* Moon canvas */
79
+ .moon-canvas-wrapper {
80
+ display: flex;
81
+ justify-content: center;
82
+ align-items: center;
83
+ position: relative;
84
+ }
85
+
86
+ .moon-canvas-wrapper canvas {
87
+ max-width: 100%;
88
+ border-radius: 1rem;
89
+ }
90
+
91
+ /* Phase info cards */
92
+ .phase-info {
93
+ display: grid;
94
+ grid-template-columns: 1fr 1fr;
95
+ gap: 0.5rem;
96
+ }
97
+
98
+ .phase-info-card {
99
+ padding: 0.65rem 0.75rem;
100
+ background: var(--bg-page);
101
+ border: 1px solid var(--border-base);
102
+ border-radius: 0.75rem;
103
+ display: flex;
104
+ flex-direction: column;
105
+ gap: 0.15rem;
106
+ }
107
+
108
+ .phase-info-card.wide {
109
+ grid-column: span 2;
110
+ }
111
+
112
+ .phase-info-label {
113
+ font-size: 0.6rem;
114
+ font-weight: 600;
115
+ color: var(--text-base);
116
+ opacity: 0.5;
117
+ text-transform: uppercase;
118
+ letter-spacing: 0.04em;
119
+ }
120
+
121
+ .phase-info-value {
122
+ font-size: 0.875rem;
123
+ font-weight: 700;
124
+ color: var(--text-base);
125
+ }
126
+
127
+ .phase-info-value.accent {
128
+ color: var(--accent);
129
+ }
130
+
131
+ /* Upcoming events */
132
+ .upcoming-section {
133
+ display: flex;
134
+ flex-direction: column;
135
+ gap: 0.375rem;
136
+ }
137
+
138
+ .upcoming-row {
139
+ display: flex;
140
+ justify-content: space-between;
141
+ align-items: center;
142
+ padding: 0.5rem 0.75rem;
143
+ background: var(--bg-page);
144
+ border: 1px solid var(--border-base);
145
+ border-radius: 0.6rem;
146
+ font-size: 0.8125rem;
147
+ }
148
+
149
+ .upcoming-label {
150
+ font-weight: 600;
151
+ color: var(--text-base);
152
+ }
153
+
154
+ .upcoming-date {
155
+ color: var(--text-base);
156
+ opacity: 0.6;
157
+ font-size: 0.75rem;
158
+ font-variant-numeric: tabular-nums;
159
+ }
160
+
161
+ /* Phase phase-badge */
162
+ .phase-badge {
163
+ display: inline-flex;
164
+ align-items: center;
165
+ gap: 0.35rem;
166
+ padding: 0.25rem 0.6rem;
167
+ background: color-mix(in srgb, var(--accent) 12%, var(--bg-page));
168
+ border: 1px solid color-mix(in srgb, var(--accent) 25%, var(--border-base));
169
+ border-radius: 1rem;
170
+ font-size: 0.75rem;
171
+ font-weight: 700;
172
+ color: var(--accent);
173
+ }
174
+
175
+ .tip-row {
176
+ display: flex;
177
+ gap: 0.5rem;
178
+ padding: 0.75rem 1rem;
179
+ background: var(--bg-page);
180
+ border-radius: 0.75rem;
181
+ border: 1px solid var(--border-base);
182
+ }
183
+
184
+ .tip-icon {
185
+ flex-shrink: 0;
186
+ margin-top: 0.1rem;
187
+ color: var(--accent);
188
+ }
189
+
190
+ .tip-text {
191
+ font-size: 0.8rem;
192
+ color: var(--text-base);
193
+ opacity: 0.85;
194
+ line-height: 1.5;
195
+ }
196
+
197
+ @media (max-width: 520px) {
198
+ .tool-main-card {
199
+ padding: 1rem;
200
+ }
201
+ .phase-info {
202
+ grid-template-columns: 1fr;
203
+ }
204
+ .phase-info-card.wide {
205
+ grid-column: span 1;
206
+ }
207
+ .date-row {
208
+ flex-direction: column;
209
+ }
210
+ .date-row input[type="date"] {
211
+ width: 100%;
212
+ }
213
+ .btn-today {
214
+ width: 100%;
215
+ }
216
+ }
@@ -0,0 +1,16 @@
1
+ ---
2
+ import { SEORenderer } from '@jjlmoya/utils-shared';
3
+ import { moonPhaseVisualizer } from './index';
4
+ import type { KnownLocale } from '../../types';
5
+
6
+ interface Props {
7
+ locale?: KnownLocale;
8
+ }
9
+
10
+ const { locale = 'en' } = Astro.props;
11
+ const loader = moonPhaseVisualizer.i18n[locale] || moonPhaseVisualizer.i18n.en;
12
+ const content = await loader?.();
13
+ if (!content) return null;
14
+ ---
15
+
16
+ {content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
@@ -2,11 +2,11 @@ import type { BibliographyEntry } from '../../types';
2
2
 
3
3
  export const bibliography: BibliographyEntry[] = [
4
4
  {
5
- name: 'How a Watch Power Reserve WorksCrown & Caliber',
5
+ name: 'How a Watch Power Reserve Works-Crown & Caliber',
6
6
  url: 'https://www.crownandcaliber.com/posts/how-a-watch-works-101/',
7
7
  },
8
8
  {
9
- name: 'What Is a Power Reserve? — Bob\'s Watches',
9
+ name: 'What Is a Power Reserve?-Bob\'s Watches',
10
10
  url: 'https://www.bobswatches.com/rolex-blog/resources/watch-winders-worth.html',
11
11
  },
12
12
  {