@jjlmoya/utils-astronomy 1.4.0 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/package.json +59 -58
  2. package/src/category/i18n/de.ts +57 -0
  3. package/src/category/i18n/id.ts +57 -0
  4. package/src/category/i18n/it.ts +57 -0
  5. package/src/category/i18n/ja.ts +57 -0
  6. package/src/category/i18n/ko.ts +57 -0
  7. package/src/category/i18n/nl.ts +57 -0
  8. package/src/category/i18n/pl.ts +57 -0
  9. package/src/category/i18n/pt.ts +57 -0
  10. package/src/category/i18n/ru.ts +57 -0
  11. package/src/category/i18n/sv.ts +57 -0
  12. package/src/category/i18n/tr.ts +57 -0
  13. package/src/category/i18n/zh.ts +57 -0
  14. package/src/category/index.ts +13 -1
  15. package/src/tests/faq_count.test.ts +9 -14
  16. package/src/tests/i18n_coverage.test.ts +36 -0
  17. package/src/tests/locale_completeness.test.ts +42 -0
  18. package/src/tests/no_h1_in_components.test.ts +48 -0
  19. package/src/tests/schemas_fulfillment.test.ts +23 -0
  20. package/src/tests/seo_length.test.ts +3 -38
  21. package/src/tests/title_quality.test.ts +55 -0
  22. package/src/tests/tool_validation.test.ts +5 -5
  23. package/src/tool/bortleVisualizer/component.astro +11 -4
  24. package/src/tool/bortleVisualizer/i18n/de.ts +167 -0
  25. package/src/tool/bortleVisualizer/i18n/en.ts +14 -0
  26. package/src/tool/bortleVisualizer/i18n/es.ts +14 -0
  27. package/src/tool/bortleVisualizer/i18n/fr.ts +13 -0
  28. package/src/tool/bortleVisualizer/i18n/id.ts +167 -0
  29. package/src/tool/bortleVisualizer/i18n/it.ts +167 -0
  30. package/src/tool/bortleVisualizer/i18n/ja.ts +167 -0
  31. package/src/tool/bortleVisualizer/i18n/ko.ts +167 -0
  32. package/src/tool/bortleVisualizer/i18n/nl.ts +167 -0
  33. package/src/tool/bortleVisualizer/i18n/pl.ts +167 -0
  34. package/src/tool/bortleVisualizer/i18n/pt.ts +167 -0
  35. package/src/tool/bortleVisualizer/i18n/ru.ts +167 -0
  36. package/src/tool/bortleVisualizer/i18n/sv.ts +167 -0
  37. package/src/tool/bortleVisualizer/i18n/tr.ts +167 -0
  38. package/src/tool/bortleVisualizer/i18n/zh.ts +167 -0
  39. package/src/tool/bortleVisualizer/index.ts +32 -8
  40. package/src/tool/deepSpaceScope/component.astro +26 -18
  41. package/src/tool/deepSpaceScope/i18n/de.ts +178 -0
  42. package/src/tool/deepSpaceScope/i18n/en.ts +21 -0
  43. package/src/tool/deepSpaceScope/i18n/es.ts +21 -0
  44. package/src/tool/deepSpaceScope/i18n/fr.ts +21 -0
  45. package/src/tool/deepSpaceScope/i18n/id.ts +178 -0
  46. package/src/tool/deepSpaceScope/i18n/it.ts +178 -0
  47. package/src/tool/deepSpaceScope/i18n/ja.ts +178 -0
  48. package/src/tool/deepSpaceScope/i18n/ko.ts +178 -0
  49. package/src/tool/deepSpaceScope/i18n/nl.ts +178 -0
  50. package/src/tool/deepSpaceScope/i18n/pl.ts +178 -0
  51. package/src/tool/deepSpaceScope/i18n/pt.ts +178 -0
  52. package/src/tool/deepSpaceScope/i18n/ru.ts +178 -0
  53. package/src/tool/deepSpaceScope/i18n/sv.ts +178 -0
  54. package/src/tool/deepSpaceScope/i18n/tr.ts +178 -0
  55. package/src/tool/deepSpaceScope/i18n/zh.ts +178 -0
  56. package/src/tool/deepSpaceScope/index.ts +32 -8
  57. package/src/tool/deepSpaceScope/logic.ts +1 -17
  58. package/src/tool/starExposureCalculator/component.astro +8 -2
  59. package/src/tool/starExposureCalculator/i18n/de.ts +163 -0
  60. package/src/tool/starExposureCalculator/i18n/id.ts +163 -0
  61. package/src/tool/starExposureCalculator/i18n/it.ts +163 -0
  62. package/src/tool/starExposureCalculator/i18n/ja.ts +163 -0
  63. package/src/tool/starExposureCalculator/i18n/ko.ts +163 -0
  64. package/src/tool/starExposureCalculator/i18n/nl.ts +163 -0
  65. package/src/tool/starExposureCalculator/i18n/pl.ts +163 -0
  66. package/src/tool/starExposureCalculator/i18n/pt.ts +163 -0
  67. package/src/tool/starExposureCalculator/i18n/ru.ts +163 -0
  68. package/src/tool/starExposureCalculator/i18n/sv.ts +163 -0
  69. package/src/tool/starExposureCalculator/i18n/tr.ts +163 -0
  70. package/src/tool/starExposureCalculator/i18n/zh.ts +163 -0
  71. package/src/tool/starExposureCalculator/index.ts +15 -7
  72. package/src/tool/telescopeResolution/component.astro +26 -26
  73. package/src/tool/telescopeResolution/i18n/de.ts +176 -0
  74. package/src/tool/telescopeResolution/i18n/en.ts +10 -2
  75. package/src/tool/telescopeResolution/i18n/es.ts +8 -0
  76. package/src/tool/telescopeResolution/i18n/fr.ts +9 -1
  77. package/src/tool/telescopeResolution/i18n/id.ts +176 -0
  78. package/src/tool/telescopeResolution/i18n/it.ts +176 -0
  79. package/src/tool/telescopeResolution/i18n/ja.ts +176 -0
  80. package/src/tool/telescopeResolution/i18n/ko.ts +176 -0
  81. package/src/tool/telescopeResolution/i18n/nl.ts +176 -0
  82. package/src/tool/telescopeResolution/i18n/pl.ts +176 -0
  83. package/src/tool/telescopeResolution/i18n/pt.ts +176 -0
  84. package/src/tool/telescopeResolution/i18n/ru.ts +176 -0
  85. package/src/tool/telescopeResolution/i18n/sv.ts +176 -0
  86. package/src/tool/telescopeResolution/i18n/tr.ts +176 -0
  87. package/src/tool/telescopeResolution/i18n/zh.ts +176 -0
  88. package/src/tool/telescopeResolution/index.ts +17 -8
  89. package/src/types.ts +6 -4
@@ -0,0 +1,176 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { TelescopeResolutionUI, TelescopeResolutionLocaleContent } from '../index';
3
+
4
+ const slug = 'telescope-resolution-calculator';
5
+ const title = 'Kalkylator för teleskopupplösning (Dawes gräns)';
6
+ const description = 'Beräkna ditt teleskops upplösningsförmåga med Dawes gräns och Rayleigh-kriteriet. Upptäck maximal användbar förstoring och inverkan av atmosfärisk seeing.';
7
+
8
+ const ui: TelescopeResolutionUI = {
9
+ toolTitle: 'Teleskopupplösning',
10
+ apertureLabel: 'Teleskopöppning',
11
+ unitLabel: 'Enhet',
12
+ mmUnit: 'Millimeter (mm)',
13
+ inUnit: 'Tum (in)',
14
+ presetsLabel: 'Vanliga modeller',
15
+ presetsPlaceholder: '-- Välj förinställning --',
16
+ seeingLabel: 'Himmelskvalitet (Seeing)',
17
+ dawesLabel: 'Användbar upplösning (Dawes)',
18
+ arcsecUnit: 'bågsekunder',
19
+ rayleighLabel: 'Rayleigh-gräns',
20
+ maxMagLabel: 'Max. användbar förstoring',
21
+ seeingAlertPrefix: 'Atmosfäriskt begränsad: Dagens seeing',
22
+ seeingAlertSuffix: 'hindrar dig från att se ditt teleskops fulla potential',
23
+ simLabel: 'Simulering: Dubbelstjärnor',
24
+ simExplanation: 'Dawes separerar punktstjärnor; Rayleigh definierar planetdetaljer.',
25
+ presets: [
26
+ { value: '70', label: '70mm (Nybörjarrefraktor)' },
27
+ { value: '114', label: '114mm (4.5") Newton-reflektor' },
28
+ { value: '150', label: '150mm (6") Dobsonian' },
29
+ { value: '200', label: '200mm (8") Dobsonian' },
30
+ { value: '254', label: '254mm (10") Dobsonian' },
31
+ { value: '304', label: '304mm (12") Professionell' },
32
+ ],
33
+ };
34
+
35
+ const faq: TelescopeResolutionLocaleContent['faq'] = [
36
+ {
37
+ question: 'Vad är Dawes gräns?',
38
+ answer: 'Dawes gräns är ett empiriskt kriterium för ett teleskops vinkelupplösning, beräknat som 116/D (där D är diametern i mm). Det representerar den minsta separationen i bågsekunder mellan två stjärnor av liknande magnitud som en erfaren observatör kan urskilja som två separata punkter. Det föreslogs av den brittiske astronomen William Dawes på 1800-talet.',
39
+ },
40
+ {
41
+ question: 'Vad är skillnaden mellan Dawes och Rayleigh?',
42
+ answer: 'Dawes gräns (116/D) är empirisk och baserad på mänsklig syn för dubbelstjärnor. Rayleigh-kriteriet (138/D) är fysikaliskt, baserat på ljusets vågnatur. Rayleigh är strängare och lämpar sig bättre för detaljer på planetära ytor (Jupiters band, månkrater). Dawes är mer användbart för att separera dubbelstjärnor.',
43
+ },
44
+ {
45
+ question: 'Vad är seeing och hur påverkar det mig?',
46
+ answer: 'Seeing är måttet på atmosfärisk turbulens som förvränger ljuset som passerar genom luften. Under en genomsnittlig natt begränsar seeingen upplösningen till 1-2 bågsekunder, vilket innebär att teleskop större än ~115mm inte kan överskrida denna atmosfäriska gräns. Utmärkt seeing (0.5") är sällsynt och förekommer på höga höjder med liten termisk aktivitet.',
47
+ },
48
+ {
49
+ question: 'Vad är den maximala användbara förstoringen för ett teleskop?',
50
+ answer: 'Guldregeln är 2x öppningen i mm (eller 50x per tum). Ett 150mm teleskop har ett användbart maximum på 300x. Om man överskrider denna gräns blir bilden större men utan mer detaljer, bara mörkare och suddigare. Seeing begränsar ofta detta värde till 100-150x under genomsnittliga nätter.',
51
+ },
52
+ ];
53
+
54
+ const howTo: TelescopeResolutionLocaleContent['howTo'] = [
55
+ { name: '1. Ange öppningen', text: 'Skriv in diametern på ditt teleskops huvudspegel eller lins. Du kan välja en förinställning från vanliga modeller.' },
56
+ { name: '2. Justera seeing', text: 'Flytta seeing-reglaget för att simulera den atmosfäriska turbulensen under din observationsnatt.' },
57
+ { name: '3. Tolka resultaten', text: 'Observera Dawes- och Rayleigh-gränserna i bågsekunder. Ju lägre värde, desto högre upplösning.' },
58
+ { name: '4. Kontrollera om seeingen begränsar dig', text: 'Om seeing-varningen visas betyder det att atmosfären begränsar ditt teleskops prestanda den natten.' },
59
+ ];
60
+
61
+ const bibliography: TelescopeResolutionLocaleContent['bibliography'] = [
62
+ { name: 'Sky & Telescope - Telescope Resolution Explained', url: 'https://skyandtelescope.org/stargazing-and-observing/celestial-objects-to-watch/telescope-calculator/' },
63
+ { name: 'British Astronomical Association - Seeing-skalan', url: 'https://www.britastro.org/' },
64
+ { name: 'Astronomisk seeing (Wikipedia)', url: 'https://sv.wikipedia.org/wiki/Seeing' },
65
+ ];
66
+
67
+ const seo: TelescopeResolutionLocaleContent['seo'] = [
68
+ {
69
+ type: 'summary',
70
+ title: 'Viktiga punkter om teleskopisk upplösning',
71
+ items: [
72
+ 'Dawes gräns (116/D mm) avgör den minsta separationen mellan upplösningsbara dubbelstjärnor.',
73
+ 'Rayleigh-kriteriet (138/D mm) definierar den minsta synliga detaljen på planetära ytor.',
74
+ 'Atmosfärisk seeing (typiskt 1-2") överskrider vanligtvis den teoretiska gränsen för teleskop större än 115mm.',
75
+ 'Maximal användbar förstoring är 2x öppningen i mm; att överskrida detta mörkar bara ner bilden.',
76
+ ],
77
+ },
78
+ { type: 'title', text: 'Astronomisk upplösning: Guide till Dawes gräns och Rayleigh', level: 2 },
79
+ {
80
+ type: 'paragraph',
81
+ html: 'Ett teleskops styrka mäts inte i hur mycket det kan förstora en bild, utan i hur mycket detaljer det kan upplösa. Denna förmåga, känd som <strong>upplösningsförmåga</strong>, beror nästan uteslutande på diametern hos dess öppning. Ju större spegel eller huvudlins, desto mindre detaljer kan den separera.',
82
+ },
83
+ {
84
+ type: 'paragraph',
85
+ html: 'Det finns två huvudkriterier för att kvantifiera denna upplösning. <strong>Dawes gräns</strong> (116/D bågsek) är empirisk, definierad av astronomen William Dawes baserat på dubbelstjärneobservationer. <strong>Rayleigh-kriteriet</strong> (138/D bågsek) är teoretiskt, härlett från ljusdiffraktionens vågfysik. Båda är överens om att öppningen är den avgörande faktorn.',
86
+ },
87
+ { type: 'title', text: 'Seeing: Den atmosfäriska barriären', level: 2 },
88
+ {
89
+ type: 'paragraph',
90
+ html: 'Du kan ha världens största teleskop, men om atmosfären är instabil kommer du inte att se fina detaljer. <strong>Seeing</strong> är måttet på atmosfärisk turbulens. Under en genomsnittlig natt begränsar atmosfären upplösningen till cirka 1-1,5 bågsekunder. För teleskop större än 115mm är seeingen flaskhalsen, inte optiken.',
91
+ },
92
+ {
93
+ type: 'table',
94
+ headers: ['Öppning', 'Dawes (")', 'Rayleigh (")', 'Max. Först.', 'Krävd Seeing'],
95
+ rows: [
96
+ ['70mm', '1.66"', '1.97"', '140x', '< 1.7"'],
97
+ ['100mm', '1.16"', '1.38"', '200x', '< 1.2"'],
98
+ ['150mm', '0.77"', '0.92"', '300x', '< 0.8"'],
99
+ ['200mm', '0.58"', '0.69"', '400x', '< 0.6"'],
100
+ ['300mm', '0.39"', '0.46"', '600x', '< 0.4"'],
101
+ ['400mm', '0.29"', '0.35"', '800x', '< 0.3"'],
102
+ ],
103
+ },
104
+ {
105
+ type: 'tip',
106
+ title: 'Termisk acklimatisering: Hemligheten bakom detaljrikedom',
107
+ html: 'Upplösningens största fiende är inte extern seeing, utan <strong>lokal seeing</strong> inuti teleskoptuben. Den varma luften som finns kvar inuti när man flyttar teleskopet utifrån och in skapar konvektionsströmmar som förstör detaljrikedomen. Låt ditt teleskop acklimatisera sig till utomhustemperaturen i minst 30-60 minuter innan du observerar med hög förstoring.',
108
+ },
109
+ { type: 'title', text: 'Kollimering: Inställningen som låser upp potentialen', level: 2 },
110
+ {
111
+ type: 'paragraph',
112
+ html: 'Ett dåligt kollimerat teleskop (med felinställda speglar) kommer aldrig att prestera vid Dawes gräns, oavsett öppning. <strong>Kollimering</strong> är processen att perfekt rikta in sekundär- och primärspeglarna mot fokuseraren. För spegelteleskop (Newton, Dobson) är kollimering en viktig och regelbunden uppgift. Gör ett "stjärntest" för att kontrollera.',
113
+ },
114
+ { type: 'title', text: 'Praktiska tips för att maximera upplösningen', level: 2 },
115
+ {
116
+ type: 'paragraph',
117
+ html: 'Vänta alltid tills instrumentet nått termisk jämvikt. Undvik att observera över tak eller asfalt. Välj nätter efter kallfronter för stabilare luft. Använd den högsta förstoringen som fortfarande ger en stadig bild. Kom ihåg <strong>mörkeradaptation</strong>: ge ögonen 20 minuter för att maximera känsligheten för planetdetaljer.',
118
+ },
119
+ {
120
+ type: 'stats',
121
+ columns: 2,
122
+ items: [
123
+ { label: 'Dawes 150mm', value: '0.77"', icon: 'mdi:flare' },
124
+ { label: 'Dawes 300mm', value: '0.39"', icon: 'mdi:flare' },
125
+ { label: 'Bra Seeing', value: '0.5 - 1.0"', icon: 'mdi:weather-windy' },
126
+ { label: 'Måttlig Seeing', value: '1.0 - 2.0"', icon: 'mdi:weather-cloudy' },
127
+ ],
128
+ },
129
+ ];
130
+
131
+ const faqSchema: WithContext<FAQPage> = {
132
+ '@context': 'https://schema.org',
133
+ '@type': 'FAQPage',
134
+ mainEntity: faq.map((item) => ({
135
+ '@type': 'Question',
136
+ name: item.question,
137
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
138
+ })),
139
+ };
140
+
141
+ const howToSchema: WithContext<HowTo> = {
142
+ '@context': 'https://schema.org',
143
+ '@type': 'HowTo',
144
+ name: title,
145
+ description,
146
+ step: howTo.map((step) => ({
147
+ '@type': 'HowToStep',
148
+ name: step.name,
149
+ text: step.text,
150
+ })),
151
+ };
152
+
153
+ const appSchema: WithContext<SoftwareApplication> = {
154
+ '@context': 'https://schema.org',
155
+ '@type': 'SoftwareApplication',
156
+ name: title,
157
+ description,
158
+ applicationCategory: 'UtilitiesApplication',
159
+ operatingSystem: 'Web',
160
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
161
+ inLanguage: 'sv',
162
+ };
163
+
164
+ export const content: TelescopeResolutionLocaleContent = {
165
+ slug,
166
+ title,
167
+ description,
168
+ ui,
169
+ seo,
170
+ faq,
171
+ faqTitle: 'Vanliga frågor',
172
+ bibliography,
173
+ bibliographyTitle: 'Referenser',
174
+ howTo,
175
+ schemas: [faqSchema as any, howToSchema as any, appSchema],
176
+ };
@@ -0,0 +1,176 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { TelescopeResolutionUI, TelescopeResolutionLocaleContent } from '../index';
3
+
4
+ const slug = 'telescope-resolution-calculator';
5
+ const title = 'Teleskop Çözünürlük Hesaplayıcı (Dawes Limiti)';
6
+ const description = 'Dawes Limiti ve Rayleigh Kriteri ile teleskobunuzun çözünürlük gücünü hesaplayın. Maksimum kullanışlı büyütmeyi ve atmosferik seeing etkisini keşfedin.';
7
+
8
+ const ui: TelescopeResolutionUI = {
9
+ toolTitle: 'Teleskop Çözünürlüğü',
10
+ apertureLabel: 'Teleskop Açıklığı (Apertür)',
11
+ unitLabel: 'Birim',
12
+ mmUnit: 'Milimetre (mm)',
13
+ inUnit: 'İnç (in)',
14
+ presetsLabel: 'Yaygın Modeller',
15
+ presetsPlaceholder: '-- Model Seçin --',
16
+ seeingLabel: 'Gökyüzü Kalitesi (Seeing)',
17
+ dawesLabel: 'Kullanışlı Çözünürlük (Dawes)',
18
+ arcsecUnit: 'arksaniye',
19
+ rayleighLabel: 'Rayleigh Limiti',
20
+ maxMagLabel: 'Maks. Kullanışlı Büyütme',
21
+ seeingAlertPrefix: 'Atmosfer sınırlı: Bugünkü seeing',
22
+ seeingAlertSuffix: 'teleskobunuzun tam potansiyelini görmenizi engelleyecektir',
23
+ simLabel: 'Simülasyon: Çift Yıldızlar',
24
+ simExplanation: 'Dawes nokta yıldızları ayırır; Rayleigh gezegen detaylarını tanımlar.',
25
+ presets: [
26
+ { value: '70', label: '70mm (Başlangıç Mercekli)' },
27
+ { value: '114', label: '114mm (4.5") Newtonyen' },
28
+ { value: '150', label: '150mm (6") Dobsonian' },
29
+ { value: '200', label: '200mm (8") Dobsonian' },
30
+ { value: '254', label: '254mm (10") Dobsonian' },
31
+ { value: '304', label: '304mm (12") Profesyonel' },
32
+ ],
33
+ };
34
+
35
+ const faq: TelescopeResolutionLocaleContent['faq'] = [
36
+ {
37
+ question: 'Dawes Limiti nedir?',
38
+ answer: 'Dawes Limiti, bir teleskobun açısal çözünürlüğü için deneysel bir kriterdir ve 116/D (D, mm cinsinden çaptır) olarak hesaplanır. Deneyimli bir gözlemcinin iki ayrı nokta olarak ayırt edebileceği benzer parlaklıktaki iki yıldız arasındaki arksaniye cinsinden minimum mesafeyi temsil eder. 19. yüzyılda İngiliz astronom William Dawes tarafından önerilmiştir.',
39
+ },
40
+ {
41
+ question: 'Dawes ve Rayleigh arasındaki fark nedir?',
42
+ answer: 'Dawes Limiti (116/D) deneyseldir ve çift yıldızlar için insan görüşüne dayanır. Rayleigh Kriteri (138/D) ise ışığın dalga doğasına dayanan fiziksel bir kriterdir. Rayleigh daha katıdır ve gezegen yüzeylerindeki ayrıntılar (Jüpiter\'in kuşakları, ay kraterleri) için daha iyi sonuç verir. Dawes, çift yıldızları ayırmak için daha kullanışlıdır.',
43
+ },
44
+ {
45
+ question: 'Seeing nedir ve beni nasıl etkiler?',
46
+ answer: 'Seeing, havadan geçen ışığı bozan atmosferik türbülansın ölçüsüdür. Ortalama bir gecede, seeing çözünürlüğü 1-2 arksaniye ile sınırlar; bu da ~115 mm\'den büyük teleskopların bu atmosferik sınırı aşamayacağı anlamına gelir. Mükemmel seeing (0.5") nadirdir ve genellikle termal aktivitenin az olduğu yüksek rakımlı yerlerde görülür.',
47
+ },
48
+ {
49
+ question: 'Bir teleskobun maksimum kullanışlı büyütmesi nedir?',
50
+ answer: 'Altın kural, mm cinsinden açıklığın 2 katıdır (veya inç başına 50 kat). 150 mm\'lik bir teleskobun kullanışlı maksimum büyütmesi 300 kattır. Bu sınırı aşmak görüntüyü büyütür ancak daha fazla ayrıntı sunmaz; sadece görüntüyü daha karanlık ve bulanık hale getirir. Sıradan gecelerde seeing bu değeri sık sık 100-150 kat ile sınırlar.',
51
+ },
52
+ ];
53
+
54
+ const howTo: TelescopeResolutionLocaleContent['howTo'] = [
55
+ { name: '1. Açıklığı girin', text: 'Teleskobunuzun ana aynasının veya merceğinin çapını yazın. Yaygın modellerden birini de seçebilirsiniz.' },
56
+ { name: '2. Seeing ayarını yapın', text: 'Gözlem gecenizdeki atmosferik türbülansı simüle etmek için seeing kaydırıcısını hareket ettirin.' },
57
+ { name: '3. Sonuçları yorumlayın', text: 'Arksaniye cinsinden Dawes ve Rayleigh limitlerini gözlemleyin. Değer ne kadar düşükse, çözünürlük o kadar yüksektir.' },
58
+ { name: '4. Seeing sınırını kontrol edin', text: 'Seeing uyarısı görünürse, atmosfer o gece teleskobunuzun performansını sınırlıyor demektir.' },
59
+ ];
60
+
61
+ const bibliography: TelescopeResolutionLocaleContent['bibliography'] = [
62
+ { name: 'Sky & Telescope - Teleskop Çözünürlüğü Açıklaması', url: 'https://skyandtelescope.org/stargazing-and-observing/celestial-objects-to-watch/telescope-calculator/' },
63
+ { name: 'British Astronomical Association - Seeing Ölçeği', url: 'https://www.britastro.org/' },
64
+ { name: 'Astronomik Seeing (Vikipedi)', url: 'https://tr.wikipedia.org/wiki/Astronomik_g%C3%B6r%C3%BCnt%C3%BC' },
65
+ ];
66
+
67
+ const seo: TelescopeResolutionLocaleContent['seo'] = [
68
+ {
69
+ type: 'summary',
70
+ title: 'Teleskopik Çözünürlüğün Önemli Noktaları',
71
+ items: [
72
+ 'Dawes Limiti (116/D mm), ayrıştırılabilir çift yıldızlar arasındaki minimum mesafeyi belirler.',
73
+ 'Rayleigh Kriteri (138/D mm), gezegen yüzeylerindeki görülebilir en küçük ayrıntıyı tanımlar.',
74
+ 'Atmosferik seeing (tipik 1-2"), genellikle 115 mm\'den büyük teleskopların teorik sınırını aşar.',
75
+ 'Maksimum kullanışlı büyütme, mm cinsinden açıklığın 2 katıdır; bunu aşmak görüntüyü sadece karartır.',
76
+ ],
77
+ },
78
+ { type: 'title', text: 'Astronomik Çözünürlük: Dawes Limiti ve Rayleigh Rehberi', level: 2 },
79
+ {
80
+ type: 'paragraph',
81
+ html: 'Bir teleskobun gücü bir görüntüyü ne kadar büyütebildiğiyle değil, ne kadar ayrıntıyı çözebildiğiyle ölçülür. <strong>Çözünürlük gücü</strong> olarak bilinen bu yetenek, neredeyse tamamen açıklığının çapına bağlıdır. Ayna veya ana mercek ne kadar büyükse, ayırabildiği ayrıntılar o kadar küçük olur.',
82
+ },
83
+ {
84
+ type: 'paragraph',
85
+ html: 'Bu çözünürlüğü nicelleştirmek için iki ana kriter vardır. <strong>Dawes Limiti</strong> (116/D arksaniye) deneyseldir ve astronom William Dawes tarafından çift yıldız gözlemlerine dayanarak tanımlanmıştır. <strong>Rayleigh Kriteri</strong> (138/D arksaniye) ise ışık kırınımının dalga fiziğinden türetilen teorik bir kriterdir. Her ikisi de açıklığın belirleyici faktör olduğu konusunda hemfikirdir.',
86
+ },
87
+ { type: 'title', text: 'Seeing: Atmosferik Bariyer', level: 2 },
88
+ {
89
+ type: 'paragraph',
90
+ html: 'Dünyanın en büyük teleskobuna sahip olabilirsiniz, ancak atmosfer kararsızsa ince ayrıntıları göremezsiniz. <strong>Seeing</strong>, atmosferik türbülansın ölçüsüdür. Ortalama bir gecede atmosfer, çözünürlüğü yaklaşık 1-1,5 arksaniye ile sınırlar. 115 mm\'den büyük teleskoplar için darboğaz optik değil, seeing\'dir.',
91
+ },
92
+ {
93
+ type: 'table',
94
+ headers: ['Açıklık', 'Dawes (")', 'Rayleigh (")', 'Maks. Büy.', 'Gereken Seeing'],
95
+ rows: [
96
+ ['70mm', '1.66"', '1.97"', '140x', '< 1.7"'],
97
+ ['100mm', '1.16"', '1.38"', '200x', '< 1.2"'],
98
+ ['150mm', '0.77"', '0.92"', '300x', '< 0.8"'],
99
+ ['200mm', '0.58"', '0.69"', '400x', '< 0.6"'],
100
+ ['300mm', '0.39"', '0.46"', '600x', '< 0.4"'],
101
+ ['400mm', '0.29"', '0.35"', '800x', '< 0.3"'],
102
+ ],
103
+ },
104
+ {
105
+ type: 'tip',
106
+ title: 'Termal Alıştırma: Detayların Sırrı',
107
+ html: 'Çözünürlüğün en büyük düşmanı dış seeing değil, teleskop tüpünün içindeki <strong>yerel seeing</strong>\'dir. Teleskobu dışarı çıkardığınızda içinde kalan sıcak hava, detayı yok eden konveksiyon akımları oluşturur. Yüksek büyütmede gözlem yapmadan önce teleskobunuzun dış sıcaklığa alışması için en az 30-60 dakika bekleyin.',
108
+ },
109
+ { type: 'title', text: 'Kolimasyon: Potansiyeli Açığa Çıkaran Hizalama', level: 2 },
110
+ {
111
+ type: 'paragraph',
112
+ html: 'Kötü kolime edilmiş bir teleskop (aynaları hizzalanmamış), açıklığı ne olursa olsun asla Dawes limitinde performans göstermez. <strong>Kolimasyon</strong>, ikincil ve birincil aynaların odaklayıcı ile mükemmel şekilde hizalanması sürecidir. Yansıtıcı teleskoplar (Newtonyen, Dobsonian) için kolimasyon temel bir periyodik görevdir. Kontrol etmek için parlak bir yıldız üzerinde "yıldız testi" yapın.',
113
+ },
114
+ { type: 'title', text: 'Çözünürlüğü Maksimuma Çıkarmak İçin Pratik İpuçları', level: 2 },
115
+ {
116
+ type: 'paragraph',
117
+ html: 'Her zaman cihazın termal dengeye ulaşmasını bekleyin. Isı yayan çatılar veya asfalt üzerinden gözlem yapmaktan kaçının. Daha stabil hava için soğuk cephe geçişlerinden sonraki geceleri seçin. Görüntünün sabit kaldığı en yüksek büyütmeyi kullanın. <strong>Karanlığa alışmayı</strong> unutmayın: gezegenlerdeki renk ayrıntılarına duyarlılığı artırmak için gözlerinize 20 dakika tam karanlık süre tanıyın.',
118
+ },
119
+ {
120
+ type: 'stats',
121
+ columns: 2,
122
+ items: [
123
+ { label: 'Dawes 150mm', value: '0.77"', icon: 'mdi:flare' },
124
+ { label: 'Dawes 300mm', value: '0.39"', icon: 'mdi:flare' },
125
+ { label: 'İyi Seeing', value: '0.5 - 1.0"', icon: 'mdi:weather-windy' },
126
+ { label: 'Orta Seeing', value: '1.0 - 2.0"', icon: 'mdi:weather-cloudy' },
127
+ ],
128
+ },
129
+ ];
130
+
131
+ const faqSchema: WithContext<FAQPage> = {
132
+ '@context': 'https://schema.org',
133
+ '@type': 'FAQPage',
134
+ mainEntity: faq.map((item) => ({
135
+ '@type': 'Question',
136
+ name: item.question,
137
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
138
+ })),
139
+ };
140
+
141
+ const howToSchema: WithContext<HowTo> = {
142
+ '@context': 'https://schema.org',
143
+ '@type': 'HowTo',
144
+ name: title,
145
+ description,
146
+ step: howTo.map((step) => ({
147
+ '@type': 'HowToStep',
148
+ name: step.name,
149
+ text: step.text,
150
+ })),
151
+ };
152
+
153
+ const appSchema: WithContext<SoftwareApplication> = {
154
+ '@context': 'https://schema.org',
155
+ '@type': 'SoftwareApplication',
156
+ name: title,
157
+ description,
158
+ applicationCategory: 'UtilitiesApplication',
159
+ operatingSystem: 'Web',
160
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
161
+ inLanguage: 'tr',
162
+ };
163
+
164
+ export const content: TelescopeResolutionLocaleContent = {
165
+ slug,
166
+ title,
167
+ description,
168
+ ui,
169
+ seo,
170
+ faq,
171
+ faqTitle: 'Sıkça Sorulan Sorular',
172
+ bibliography,
173
+ bibliographyTitle: 'Bibliyografik Referanslar',
174
+ howTo,
175
+ schemas: [faqSchema as any, howToSchema as any, appSchema],
176
+ };
@@ -0,0 +1,176 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { TelescopeResolutionUI, TelescopeResolutionLocaleContent } from '../index';
3
+
4
+ const slug = 'telescope-resolution-calculator';
5
+ const title = '望远镜分辨率计算器 (道氏极限)';
6
+ const description = '使用道氏极限 (Dawes Limit) 和瑞利判据计算望远镜的解析能力。探索最大有效放大倍数以及大气视宁度对观测的影响。';
7
+
8
+ const ui: TelescopeResolutionUI = {
9
+ toolTitle: '望远镜分辨率',
10
+ apertureLabel: '望远镜口径',
11
+ unitLabel: '单位',
12
+ mmUnit: '毫米 (mm)',
13
+ inUnit: '英寸 (in)',
14
+ presetsLabel: '常见型号',
15
+ presetsPlaceholder: '-- 选择预设 --',
16
+ seeingLabel: '天空质量 (视宁度)',
17
+ dawesLabel: '有用分辨率 (道氏)',
18
+ arcsecUnit: '角秒',
19
+ rayleighLabel: '瑞利极限',
20
+ maxMagLabel: '最大有效放大倍数',
21
+ seeingAlertPrefix: '大气限制:今天的视宁度',
22
+ seeingAlertSuffix: '将妨碍您发挥望远镜的全部潜力',
23
+ simLabel: '模拟:双星',
24
+ simExplanation: '道氏极限用于区分点状恒星;瑞利判据用于定义行星表面细节。',
25
+ presets: [
26
+ { value: '70', label: '70mm (初学者折射镜)' },
27
+ { value: '114', label: '114mm (4.5") 牛顿反射镜' },
28
+ { value: '150', label: '150mm (6") 杜布森镜' },
29
+ { value: '200', label: '200mm (8") 杜布森镜' },
30
+ { value: '254', label: '254mm (10") 杜布森镜' },
31
+ { value: '304', label: '304mm (12") 专业级' },
32
+ ],
33
+ };
34
+
35
+ const faq: TelescopeResolutionLocaleContent['faq'] = [
36
+ {
37
+ question: '什么是道氏极限 (Dawes Limit)?',
38
+ answer: '道氏极限是衡量望远镜角分辨率的经验性标准,计算公式为 116/D(D 为以毫米为单位的直径)。它表示经验丰富的观测者能够区分出亮度相近的两颗恒星为两个独立点时的最小角距离(以角秒为单位)。它由英国天文学家威廉·道斯在 19 世纪提出。',
39
+ },
40
+ {
41
+ question: '道氏极限和瑞利判据有什么区别?',
42
+ answer: '道氏极限 (116/D) 是经验性的,基于人类视觉对双星的观察。瑞利判据 (138/D) 是基于光的波动性质的物理标准。瑞利判据更为严格,更适用于描述行星表面细节(木星条纹、月坑)。道氏极限则在区分双星时更有参考价值。',
43
+ },
44
+ {
45
+ question: '什么是视宁度 (Seeing),它如何影响我?',
46
+ answer: '视宁度是大气湍流干扰穿过空气的光线的量度。在普通夜晚,视宁度将分辨率限制在 1-2 角秒。这意味着口径大于约 115mm 的望远镜通常无法超越这一大气限制。极佳的视宁度 (0.5") 非常罕见,通常出现在高海拔且热活动较少的地点。',
47
+ },
48
+ {
49
+ question: '望远镜的最大有用放大倍数是多少?',
50
+ answer: '黄金法则是口径 (mm) 的 2 倍(或每英寸 50 倍)。一台 150mm 的望远镜有 300 倍的最大有用倍数。超过这个限制会使图像变大,但不会增加更多细节,只会让图像变得更暗且更模糊。在大多数夜晚,视宁度常将其限制在 100-150 倍。',
51
+ },
52
+ ];
53
+
54
+ const howTo: TelescopeResolutionLocaleContent['howTo'] = [
55
+ { name: '1. 输入口径', text: '输入你望远镜主镜或透镜的直径。你也可以从预设列表中选择常见型号。' },
56
+ { name: '2. 调整视宁度', text: '移动视宁度滑块,以模拟观测当晚的大气湍流情况。' },
57
+ { name: '3. 解析结果', text: '观察以角秒为单位的道氏极限和瑞利极限。数值越低,分辨率越高。' },
58
+ { name: '4. 检查大气限制', text: '如果出现视宁度警报,说明当晚的大气情况正限制着你望远镜的性能。' },
59
+ ];
60
+
61
+ const bibliography: TelescopeResolutionLocaleContent['bibliography'] = [
62
+ { name: 'Sky & Telescope - 望远镜分辨率详解', url: 'https://skyandtelescope.org/stargazing-and-observing/celestial-objects-to-watch/telescope-calculator/' },
63
+ { name: '英国天文协会 - 视宁度等级', url: 'https://www.britastro.org/' },
64
+ { name: '天文视宁度 (维基百科)', url: 'https://zh.wikipedia.org/wiki/%E5%A4%A9%E6%96%87%E8%A7%86%E5%AE%81%E5%BA%A6' },
65
+ ];
66
+
67
+ const seo: TelescopeResolutionLocaleContent['seo'] = [
68
+ {
69
+ type: 'summary',
70
+ title: '望远镜分辨率的核心要点',
71
+ items: [
72
+ '道氏极限 (116/D mm) 决定了可分辨双星之间的最小间距。',
73
+ '瑞利判据 (138/D mm) 定义了行星表面可见的最小细节。',
74
+ '大气视宁度 (典型值为 1-2") 通常超过口径 115mm 以上望远镜的理论极限。',
75
+ '最大有用放大倍数为口径 (mm) 的 2 倍;超过此值只会让图像变暗。',
76
+ ],
77
+ },
78
+ { type: 'title', text: '天文分辨率:道氏极限与瑞利判据指南', level: 2 },
79
+ {
80
+ type: 'paragraph',
81
+ html: '望远镜的性能并不取决于它能将图像放大多少倍,而取决于它能分辨出多少细节。这种能力被称为 <strong>分辨力</strong>,几乎完全取决于其口径的大小。主镜或透镜越大,它能区分的细节就越微小。',
82
+ },
83
+ {
84
+ type: 'paragraph',
85
+ html: '衡量这种分辨率有两个主要标准。<strong>道氏极限</strong> (116/D 角秒) 是经验性的,由天文学家威廉·道斯根据双星观测定义。<strong>瑞利判据</strong> (138/D 角秒) 是理论性的,源自光的衍射物理学。两者都认为口径是决定性因素。',
86
+ },
87
+ { type: 'title', text: '视宁度:大气的屏障', level: 2 },
88
+ {
89
+ type: 'paragraph',
90
+ html: '即便你拥有世界上口径最大的望远镜,如果大气不稳定,你也将无法看清细微之处。<strong>视宁度</strong>是衡量大气湍流的指标。在普通夜晚,大气将分辨率限制在约 1-1.5 角秒。对于大于 115mm 的望远镜,性能瓶颈往往在于大气,而非光学素质。',
91
+ },
92
+ {
93
+ type: 'table',
94
+ headers: ['口径', '道氏 (")', '瑞利 (")', '最大倍率', '所需视宁度'],
95
+ rows: [
96
+ ['70mm', '1.66"', '1.97"', '140x', '< 1.7"'],
97
+ ['100mm', '1.16"', '1.38"', '200x', '< 1.2"'],
98
+ ['150mm', '0.77"', '0.92"', '300x', '< 0.8"'],
99
+ ['200mm', '0.58"', '0.69"', '400x', '< 0.6"'],
100
+ ['300mm', '0.39"', '0.46"', '600x', '< 0.4"'],
101
+ ['400mm', '0.29"', '0.35"', '800x', '< 0.3"'],
102
+ ],
103
+ },
104
+ {
105
+ type: 'tip',
106
+ title: '热平衡:获得细节的秘诀',
107
+ html: '分辨率最大的敌人不只是外部视宁度,还有望远镜筒内的 <strong>局部视宁度</strong>。当把望远镜从室内移至室外时,筒内残留的热空气会产生对流,从而破坏细节。在高倍观测前,请务必让望远镜与环境温度预热(热平衡)至少 30-60 分钟。',
108
+ },
109
+ { type: 'title', text: '校准:解锁潜力的对准过程', level: 2 },
110
+ {
111
+ type: 'paragraph',
112
+ html: '一台校准不良(镜片未对齐)的望远镜,无论其口径多大,都永远无法达到道氏极限。<strong>校准 (Collimation)</strong> 是指将主镜和副镜与调焦座完美对齐的过程。对于反射镜(牛顿式、杜布森镜),校准是一项必要的定期任务。通过对亮星进行“星点测试”来练习这一技能。',
113
+ },
114
+ { type: 'title', text: '最大化分辨率的实用提示', level: 2 },
115
+ {
116
+ type: 'paragraph',
117
+ html: '始终等待仪器达到热平衡。避免在散发热量的屋顶或柏油路面上方进行观测。选择冷锋过境后的夜晚,大层通常更为稳定。使用图像依然稳固的最高放大倍率。记住 <strong>暗适应</strong> 的重要性:给你的眼睛 20 分钟完全适应黑暗,以最大限度地感知行星表面的色彩细节。',
118
+ },
119
+ {
120
+ type: 'stats',
121
+ columns: 2,
122
+ items: [
123
+ { label: '道氏 150mm', value: '0.77"', icon: 'mdi:flare' },
124
+ { label: '道氏 300mm', value: '0.39"', icon: 'mdi:flare' },
125
+ { label: '视宁度佳', value: '0.5 - 1.0"', icon: 'mdi:weather-windy' },
126
+ { label: '视宁度普通', value: '1.0 - 2.0"', icon: 'mdi:weather-cloudy' },
127
+ ],
128
+ },
129
+ ];
130
+
131
+ const faqSchema: WithContext<FAQPage> = {
132
+ '@context': 'https://schema.org',
133
+ '@type': 'FAQPage',
134
+ mainEntity: faq.map((item) => ({
135
+ '@type': 'Question',
136
+ name: item.question,
137
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
138
+ })),
139
+ };
140
+
141
+ const howToSchema: WithContext<HowTo> = {
142
+ '@context': 'https://schema.org',
143
+ '@type': 'HowTo',
144
+ name: title,
145
+ description,
146
+ step: howTo.map((step) => ({
147
+ '@type': 'HowToStep',
148
+ name: step.name,
149
+ text: step.text,
150
+ })),
151
+ };
152
+
153
+ const appSchema: WithContext<SoftwareApplication> = {
154
+ '@context': 'https://schema.org',
155
+ '@type': 'SoftwareApplication',
156
+ name: title,
157
+ description,
158
+ applicationCategory: 'UtilitiesApplication',
159
+ operatingSystem: 'Web',
160
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
161
+ inLanguage: 'zh',
162
+ };
163
+
164
+ export const content: TelescopeResolutionLocaleContent = {
165
+ slug,
166
+ title,
167
+ description,
168
+ ui,
169
+ seo,
170
+ faq,
171
+ faqTitle: '常见问题',
172
+ bibliography,
173
+ bibliographyTitle: '参考文献',
174
+ howTo,
175
+ schemas: [faqSchema as any, howToSchema as any, appSchema],
176
+ };
@@ -4,7 +4,7 @@ import TelescopeResolutionSEO from './seo.astro';
4
4
  import TelescopeResolutionBibliography from './bibliography.astro';
5
5
 
6
6
  export interface TelescopeResolutionUI {
7
- [key: string]: string;
7
+ [key: string]: string | Array<{ value: string; label: string }>;
8
8
  toolTitle: string;
9
9
  apertureLabel: string;
10
10
  unitLabel: string;
@@ -21,14 +21,11 @@ export interface TelescopeResolutionUI {
21
21
  seeingAlertSuffix: string;
22
22
  simLabel: string;
23
23
  simExplanation: string;
24
+ presets: Array<{ value: string; label: string }>;
24
25
  }
25
26
 
26
27
  export type TelescopeResolutionLocaleContent = ToolLocaleContent<TelescopeResolutionUI>;
27
28
 
28
- import { content as es } from './i18n/es';
29
- import { content as en } from './i18n/en';
30
- import { content as fr } from './i18n/fr';
31
-
32
29
  export const telescopeResolution: AstronomyToolEntry<TelescopeResolutionUI> = {
33
30
  id: 'telescope-resolution',
34
31
  icons: {
@@ -36,9 +33,21 @@ export const telescopeResolution: AstronomyToolEntry<TelescopeResolutionUI> = {
36
33
  fg: 'mdi:flare',
37
34
  },
38
35
  i18n: {
39
- es: async () => es,
40
- en: async () => en,
41
- fr: async () => fr,
36
+ de: () => import('./i18n/de').then((m) => m.content),
37
+ en: () => import('./i18n/en').then((m) => m.content),
38
+ es: () => import('./i18n/es').then((m) => m.content),
39
+ fr: () => import('./i18n/fr').then((m) => m.content),
40
+ id: () => import('./i18n/id').then((m) => m.content),
41
+ it: () => import('./i18n/it').then((m) => m.content),
42
+ ja: () => import('./i18n/ja').then((m) => m.content),
43
+ ko: () => import('./i18n/ko').then((m) => m.content),
44
+ nl: () => import('./i18n/nl').then((m) => m.content),
45
+ pl: () => import('./i18n/pl').then((m) => m.content),
46
+ pt: () => import('./i18n/pt').then((m) => m.content),
47
+ ru: () => import('./i18n/ru').then((m) => m.content),
48
+ sv: () => import('./i18n/sv').then((m) => m.content),
49
+ tr: () => import('./i18n/tr').then((m) => m.content),
50
+ zh: () => import('./i18n/zh').then((m) => m.content),
42
51
  },
43
52
  };
44
53
 
package/src/types.ts CHANGED
@@ -1,5 +1,4 @@
1
1
  import type { SEOSection } from '@jjlmoya/utils-shared';
2
- import type { WithContext, Thing } from 'schema-dts';
3
2
 
4
3
  export type { SEOSection };
5
4
 
@@ -23,7 +22,8 @@ export interface HowToStep {
23
22
  text: string;
24
23
  }
25
24
 
26
- export interface ToolLocaleContent<TUI extends Record<string, string> = Record<string, string>> {
25
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
26
+ export interface ToolLocaleContent<TUI extends Record<string, any> = Record<string, any>> {
27
27
  slug: string;
28
28
  title: string;
29
29
  description: string;
@@ -34,7 +34,8 @@ export interface ToolLocaleContent<TUI extends Record<string, string> = Record<s
34
34
  bibliography: BibliographyEntry[];
35
35
  bibliographyTitle: string;
36
36
  howTo: HowToStep[];
37
- schemas: WithContext<Thing>[];
37
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
38
+ schemas: any[];
38
39
  }
39
40
 
40
41
  export interface CategoryLocaleContent {
@@ -48,7 +49,8 @@ export type LocaleLoader<T> = () => Promise<T>;
48
49
 
49
50
  export type LocaleMap<T> = Partial<Record<KnownLocale, LocaleLoader<T>>>;
50
51
 
51
- export interface AstronomyToolEntry<TUI extends Record<string, string> = Record<string, string>> {
52
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
53
+ export interface AstronomyToolEntry<TUI extends Record<string, any> = Record<string, any>> {
52
54
  id: string;
53
55
  icons: {
54
56
  bg: string;