@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,167 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { BortleVisualizerUI, BortleVisualizerLocaleContent } from '../index';
3
+
4
+ const slug = 'dark-sky-simulator';
5
+ const title = 'Simulator för mörk himmel (Bortle skalan)';
6
+ const description = 'Visualisera interaktivt Bortle-skalans 9 nivåer och upptäck hur ljusföroreningar suddar ut den stjärnklara natthimlen.';
7
+
8
+ const ui: BortleVisualizerUI = {
9
+ toolTitle: 'Simulator för mörk himmel',
10
+ sliderLabel: 'Dra för att justera nivå av ljusförorening',
11
+ classLabel: 'Bortle-klass',
12
+ nelmLabel: 'NELM',
13
+ sqmLabel: 'SQM',
14
+ classPrefix: 'KLASS',
15
+ bortleData: {
16
+ 1: { title: 'Utmärkt mörk himmel', description: 'Astronomens paradis. Vintergatan kastar skuggor. Zodiakalljus synligt och färgstarkt. M33 synlig för blotta ögat.', nelm: 8.0, sqm: '21.99 - 22.0', starsVisible: true, milkyWayVisible: true, cloudsLit: false, skyBrightness: 0.0 },
17
+ 2: { title: 'Verkligt mörk', description: 'Riktigt mörka platser. Vintergatan är mycket strukturerad. Moln syns bara som svarta hål på himlen.', nelm: 7.5, sqm: '21.89 - 21.99', starsVisible: true, milkyWayVisible: true, cloudsLit: false, skyBrightness: 0.1 },
18
+ 3: { title: 'Landsbygdshimmel', description: 'Komplex Vintergata. Vissa ljusföroreningar vid horisonten. Moln belysta nära horisonten men mörka ovanför.', nelm: 7.0, sqm: '21.69 - 21.89', starsVisible: true, milkyWayVisible: true, cloudsLit: true, skyBrightness: 0.2 },
19
+ 4: { title: 'Landsbygd/Förort', description: 'Vintergatan förlorar detaljer men är synlig. Ljusdomer vid horisonten. Moln belysta underifrån.', nelm: 6.5, sqm: '20.49 - 21.69', starsVisible: true, milkyWayVisible: true, cloudsLit: true, skyBrightness: 0.35 },
20
+ 5: { title: 'Förortshimmel', description: 'Vintergatan mycket svag eller osynlig nära horisonten. Zodiakalljus sällan synligt. Himlen ser gråaktig ut.', nelm: 6.0, sqm: '19.50 - 20.49', starsVisible: true, milkyWayVisible: true, cloudsLit: true, skyBrightness: 0.5 },
21
+ 6: { title: 'Ljus förort', description: 'Vintergatan osynlig. Himlen är ljusgrå. Molnen är mycket ljusa. M31 knappt synlig.', nelm: 5.5, sqm: '18.94 - 19.50', starsVisible: true, milkyWayVisible: false, cloudsLit: true, skyBrightness: 0.65 },
22
+ 7: { title: 'Förort/Stad', description: 'Himlen gråvit. Starka ljuskällor i alla riktningar. Endast de ljusaste stjärnorna synliga.', nelm: 5.0, sqm: '18.38 - 18.94', starsVisible: true, milkyWayVisible: false, cloudsLit: true, skyBrightness: 0.8 },
23
+ 8: { title: 'Stadshimmel', description: 'Himlen är gråvit eller orange. Man kan läsa tidningsrubriker. Endast de viktigaste stjärnbilderna synliga.', nelm: 4.5, sqm: '< 18.38', starsVisible: true, milkyWayVisible: false, cloudsLit: true, skyBrightness: 0.9 },
24
+ 9: { title: 'Stadskärna', description: 'Himlen lika ljus som under skymningen. Månen synlig men inga stjärnbilder. Endast planeter och månen synliga.', nelm: 4.0, sqm: '< 18.00', starsVisible: false, milkyWayVisible: false, cloudsLit: true, skyBrightness: 1.0 },
25
+ },
26
+ };
27
+
28
+ const faq: BortleVisualizerLocaleContent['faq'] = [
29
+ {
30
+ question: 'Vad är Bortle-skalan?',
31
+ answer: 'Det är en 9-gradig numerisk skala som mäter natthimlens ljusstyrka på en given plats. Den skapades av amatörastronomen John E. Bortle 2001 och publicerades i Sky & Telescope. Nivå 1 representerar den mörkaste möjliga himlen (avlägsna öknar) och nivå 9 den mest ljusförorenade (stadskärnor).',
32
+ },
33
+ {
34
+ question: 'Vilken är den lägsta Bortle-nivån för att se Vintergatan?',
35
+ answer: 'Vintergatan börjar bli tydligt synlig från Bortle 4 (landsbygd/förort). Vid nivå 1 och 2 är den spektakulär, med detaljerad struktur som till och med kan kasta svaga skuggor. Från Bortle 6 och framåt är den praktiskt taget osynlig för blotta ögat.',
36
+ },
37
+ {
38
+ question: 'Vad betyder NELM och SQM?',
39
+ answer: 'NELM (Naked Eye Limiting Magnitude) är magnituden för den svagaste stjärnan som är synlig för blotta ögat under dessa förhållanden. SQM (Sky Quality Meter) mäter himlens ljusstyrka i magnituder per kvadratbågsekund, vilket är den objektiva vetenskapliga standarden.',
40
+ },
41
+ {
42
+ question: 'Hur kan jag hitta mörkare himlar nära mig?',
43
+ answer: 'Använd ljusföroreningskartor som lightpollutionmap.info för att hitta Bortle 3 eller mörkare zoner inom några timmars bilresa. Nationalparker, högfjällsområden och utsedda mörkerreservat erbjuder de bästa förhållandena.',
44
+ },
45
+ ];
46
+
47
+ const howTo: BortleVisualizerLocaleContent['howTo'] = [
48
+ { name: '1. Justera Bortle-nivån', text: 'Dra i reglaget för att simulera hur ljusföroreningen ökar från nivå 1 (öken) till nivå 9 (stadskärna).' },
49
+ { name: '2. Observera de visuella effekterna', text: 'Notera hur svaga stjärnor försvinner, Vintergatan bleknar och himlen antar en orange eller grå ton för varje nivå.' },
50
+ { name: '3. Identifiera din nuvarande nivå', text: 'Jämför vad du ser från din vanliga observationsplats med simuleringarna för att identifiera din lokala Bortle-nivå.' },
51
+ ];
52
+
53
+ const bibliography: BortleVisualizerLocaleContent['bibliography'] = [
54
+ { name: 'Originalartikel av Bortle (Sky & Telescope, 2001)', url: 'https://skyandtelescope.org/astronomy-resources/light-pollution-and-astronomy-the-bortle-dark-sky-scale/' },
55
+ { name: 'Ljusföroreningskarta - Världskarta', url: 'https://www.lightpollutionmap.info/' },
56
+ { name: 'International Dark-Sky Association', url: 'https://www.darksky.org/' },
57
+ { name: 'Globe at Night - Medborgarforskning', url: 'https://www.globeatnight.org/' },
58
+ ];
59
+
60
+ const seo: BortleVisualizerLocaleContent['seo'] = [
61
+ {
62
+ type: 'summary',
63
+ title: 'Viktiga punkter om Bortle skalan',
64
+ items: [
65
+ 'Bortle 1-2: Referens för mörk himmel, Vintergatan kastar skuggor, NELM > 7.5.',
66
+ 'Bortle 3-4: Optimal landsbygdshimmel, Vintergatan synlig i detalj men horisonten förorenad.',
67
+ 'Bortle 5-6: Förort, svag eller osynlig Vintergata, bra för planeter och månen.',
68
+ 'Bortle 7-9: Stadshimmel, endast ljusa objekt synliga för blotta ögat.',
69
+ ],
70
+ },
71
+ { type: 'title', text: 'Bortle-skalan: Att mäta himlens mörker', level: 2 },
72
+ {
73
+ type: 'paragraph',
74
+ html: '<strong>Bortle-skalan</strong> är det internationella standardsystemet som används av amatörastronomer världen över för att kvantifiera natthimlens kvalitet. Den skapades av John E. Bortle, en veteranobservatör av kometer och deep-sky-objekt från New York, och publicerades 2001 i tidskriften Sky & Telescope med målet att tillhandahålla en objektiv och reproducerbar skala för att kommunicera observationsförhållanden.',
75
+ },
76
+ {
77
+ type: 'paragraph',
78
+ html: 'Skalan sträcker sig från <strong>nivå 1</strong> (den mörkaste möjliga himlen, som bara finns i avlägsna öknar och högfjäll långt från all civilisation) till <strong>nivå 9</strong> (inre delar av storstäder, där himlen lyser med en permanent orange eller vitaktig glöd och endast månen och de ljusaste planeterna är synliga). Varje nivå har specifika beskrivningar som möjliggör identifiering utan instrument.',
79
+ },
80
+ { type: 'title', text: 'Ljusföroreningar: En tyst global kris', level: 2 },
81
+ {
82
+ type: 'paragraph',
83
+ html: 'Ökningen av ljusföroreningar är ett av de minst diskuterade men mest utbredda miljöproblemen. Enligt färska studier lever mer än <strong>80 % av världens befolkning</strong> under ljusförorenade himlar, och i Europa och Nordamerika överstiger andelen 99 %. Konsekvenserna sträcker sig utanför astronomin: artificiellt ljus på natten stör dygnsrytmen hos människor och djur, desorienterar flyttfåglar, påverkar havssköldpaddors fortplantning och hämmar melatoninproduktionen hos däggdjur.',
84
+ },
85
+ {
86
+ type: 'table',
87
+ headers: ['Bortle-klass', 'NELM', 'SQM (mag/arcsec²)', 'Vintergatan', 'Nyckelegenskap'],
88
+ rows: [
89
+ ['1 - Utmärkt', '8.0', '21.99 - 22.0', 'Kastar skuggor', 'M33 synlig för blotta ögat'],
90
+ ['2 - Typiskt mörk', '7.5', '21.89 - 21.99', 'Mycket strukturerad', 'Moln = svarta hål'],
91
+ ['3 - Landsbygd', '7.0', '21.69 - 21.89', 'Komplex', 'Visst glöd vid horisonten'],
92
+ ['4 - Landsbygd/Förort', '6.5', '20.49 - 21.69', 'Synlig', 'Ljusdomer vid horisonten'],
93
+ ['5 - Förort', '6.0', '19.50 - 20.49', 'Svag', 'Gråaktig himmel'],
94
+ ['6 - Ljus förort', '5.5', '18.94 - 19.50', 'Osynlig', 'M31 knappt synlig'],
95
+ ['7 - Förort/Stad', '5.0', '18.38 - 18.94', 'Frånvarande', 'Ljusgrå himmel'],
96
+ ['8 - Stad', '4.5', '< 18.38', 'Frånvarande', 'Endast huvudstjärnbilder'],
97
+ ['9 - Stadskärna', '4.0', '< 18.00', 'Frånvarande', 'Endast måne och planeter'],
98
+ ],
99
+ },
100
+ {
101
+ type: 'tip',
102
+ title: 'Objektiv mätning: Sky Quality Meter',
103
+ html: 'För precisa och reproducerbara mätningar använder astronomer <strong>Sky Quality Meter (SQM)</strong>, en enhet som mäter himlens luminans i magnituder per kvadratbågsekund (mag/arcsec²). Ett SQM på 22,0 motsvarar en utmärkt Bortle 1-himmel, medan ett värde på 18,0 indikerar en Bortle 8-9-himmel. Du kan kontrollera realtidsmätningar på Globe at Night-nätverket.',
104
+ },
105
+ { type: 'title', text: 'Hitta mörka himmelsreservat nära dig', level: 2 },
106
+ {
107
+ type: 'paragraph',
108
+ html: 'Trots utbredda ljusföroreningar finns det fortfarande mörka himmelsreservat. Nationalparker, utsedda mörkerreservat och avlägsna höglandsområden erbjuder Bortle 2-4-förhållanden som är tillgängliga inom några timmar från de flesta storstäder. IDA (International Dark-Sky Association) upprätthåller ett globalt register över certifierade mörka platser, från små parker till hela öreservat. Att planera en nattlig resa till en mörkare plats kommer att förändra din astronomiska upplevelse mer än någon utrustningsuppgradering.',
109
+ },
110
+ {
111
+ type: 'diagnostic',
112
+ variant: 'success',
113
+ title: 'Planeringsverktyg',
114
+ icon: 'mdi:map-marker-star',
115
+ badge: 'Proffstips',
116
+ html: 'Före varje observationsrunda, kontrollera ljusföroreningskartan på lightpollutionmap.info för att identifiera Bortle 3 eller mörkare zoner inom en 1-2 timmars radie. Kombinera detta med astronomiska väderprognoser från Clear Outside eller Meteoblue Astro för att välja den perfekta natten.',
117
+ },
118
+ ];
119
+
120
+ const faqSchema: WithContext<FAQPage> = {
121
+ '@context': 'https://schema.org',
122
+ '@type': 'FAQPage',
123
+ mainEntity: faq.map((item) => ({
124
+ '@type': 'Question',
125
+ name: item.question,
126
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
127
+ })),
128
+ };
129
+
130
+ const howToSchema: WithContext<HowTo> = {
131
+ '@context': 'https://schema.org',
132
+ '@type': 'HowTo',
133
+ name: title,
134
+ description,
135
+ step: howTo.map((step) => ({
136
+ '@type': 'HowToStep',
137
+ name: step.name,
138
+ text: step.text,
139
+ })),
140
+ };
141
+
142
+ const appSchema: WithContext<SoftwareApplication> = {
143
+ '@context': 'https://schema.org',
144
+ '@type': 'SoftwareApplication',
145
+ name: title,
146
+ description,
147
+ applicationCategory: 'UtilitiesApplication',
148
+ operatingSystem: 'Web',
149
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
150
+ inLanguage: 'sv',
151
+ };
152
+
153
+
154
+ export const content: BortleVisualizerLocaleContent = {
155
+ slug,
156
+ title,
157
+ description,
158
+ ui,
159
+ seo,
160
+ faq,
161
+ faqTitle: 'Vanliga frågor',
162
+ bibliography,
163
+ bibliographyTitle: 'Bibliografiska referenser',
164
+ howTo,
165
+ bortleData: ui.bortleData,
166
+ schemas: [faqSchema as any, howToSchema as any, appSchema],
167
+ };
@@ -0,0 +1,167 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { BortleVisualizerUI, BortleVisualizerLocaleContent } from '../index';
3
+
4
+ const slug = 'dark-sky-simulator';
5
+ const title = 'Karanlık Gökyüzü Simülatörü (Bortle Ölçeği)';
6
+ const description = 'Bortle Ölçeği\'nin 9 seviyesini etkileşimli olarak görselleştirin ve ışık kirliliğinin yıldızlı gece gökyüzünü nasıl sildiğini keşfedin.';
7
+
8
+ const ui: BortleVisualizerUI = {
9
+ toolTitle: 'Karanlık Gökyüzü Simülatörü',
10
+ sliderLabel: 'Işık kirliliği seviyesini ayarlamak için kaydırın',
11
+ classLabel: 'Bortle Sınıfı',
12
+ nelmLabel: 'NELM',
13
+ sqmLabel: 'SQM',
14
+ classPrefix: 'SINIF',
15
+ bortleData: {
16
+ 1: { title: 'Mükemmel Karanlık Gökyüzü', description: 'Gökbilimcilerin cenneti. Samanyolu gölge düşürür. Zodyak ışığı görünür ve renklidir. M33 çıplak gözle görülebilir.', nelm: 8.0, sqm: '21.99 - 22.0', starsVisible: true, milkyWayVisible: true, cloudsLit: false, skyBrightness: 0.0 },
17
+ 2: { title: 'Gerçekten Karanlık', description: 'Gerçekten karanlık alanlar. Samanyolu oldukça yapısaldır. Bulutlar gökyüzünde sadece siyah delikler olarak görünür.', nelm: 7.5, sqm: '21.89 - 21.99', starsVisible: true, milkyWayVisible: true, cloudsLit: false, skyBrightness: 0.1 },
18
+ 3: { title: 'Kırsal Gökyüzü', description: 'Karmaşık Samanyolu. Ufukta biraz ışık kirliliği. Bulutlar ufka yakın aydınlık ancak tepede karanlıktır.', nelm: 7.0, sqm: '21.69 - 21.89', starsVisible: true, milkyWayVisible: true, cloudsLit: true, skyBrightness: 0.2 },
19
+ 4: { title: 'Kırsal/Banliyö', description: 'Samanyolu detay kaybeder ancak görünürdür. Ufukta ışık kubbeleri. Bulutlar aşağıdan aydınlanmıştır.', nelm: 6.5, sqm: '20.49 - 21.69', starsVisible: true, milkyWayVisible: true, cloudsLit: true, skyBrightness: 0.35 },
20
+ 5: { title: 'Banliyö Gökyüzü', description: 'Samanyolu ufka yakın çok sönük veya görünmezdir. Zodyak ışığı nadiren görünür. Gökyüzü grimsi görünür.', nelm: 6.0, sqm: '19.50 - 20.49', starsVisible: true, milkyWayVisible: true, cloudsLit: true, skyBrightness: 0.5 },
21
+ 6: { title: 'Parlak Banliyö', description: 'Samanyolu görünmez. Gökyüzü parlak gridir. Bulutlar çok parlaktır. M31 zar zor görünür.', nelm: 5.5, sqm: '18.94 - 19.50', starsVisible: true, milkyWayVisible: false, cloudsLit: true, skyBrightness: 0.65 },
22
+ 7: { title: 'Banliyö/Şehir', description: 'Gökyüzü grimsi beyazdır. Her yönde güçlü ışık kaynakları. Sadece en parlak yıldızlar görünür.', nelm: 5.0, sqm: '18.38 - 18.94', starsVisible: true, milkyWayVisible: false, cloudsLit: true, skyBrightness: 0.8 },
23
+ 8: { title: 'Şehir Gökyüzü', description: 'Gökyüzü grimsi beyaz veya turuncudur. Gazete manşetleri okunabilir. Sadece ana takımyıldızlar görünür.', nelm: 4.5, sqm: '< 18.38', starsVisible: true, milkyWayVisible: false, cloudsLit: true, skyBrightness: 0.9 },
24
+ 9: { title: 'Şehir Merkezi', description: 'Gökyüzü alacakaranlık kadar parlaktır. Ay görünür ancak takımyıldızlar görünmez. Sadece gezegenler ve Ay görünür.', nelm: 4.0, sqm: '< 18.00', starsVisible: false, milkyWayVisible: false, cloudsLit: true, skyBrightness: 1.0 },
25
+ },
26
+ };
27
+
28
+ const faq: BortleVisualizerLocaleContent['faq'] = [
29
+ {
30
+ question: 'Bortle Ölçeği Nedir?',
31
+ answer: 'Bir konumdaki gece gökyüzünün parlaklığını ölçen 9 puanlık sayısal bir ölçektir. 2001 yılında amatör gökbilimci John E. Bortle tarafından oluşturulmuş ve Sky & Telescope\'da yayınlanmıştır. Seviye 1, mümkün olan en karanlık gökyüzünü (uzak çöller), Seviye 9 ise en çok ışık kirliliği olan gökyüzünü (şehir merkezleri) temsil eder.',
32
+ },
33
+ {
34
+ question: 'Samanyolu\'nu görmek için gereken minimum Bortle seviyesi nedir?',
35
+ answer: 'Samanyolu, Bortle 4\'ten (kırsal/banliyö bölgesi) itibaren net bir şekilde görünmeye başlar. Seviye 1 ve 2\'de muhteşemdir, sönük gölgeler bile düşürebilecek kadar ayrıntılı bir yapıya sahiptir. Bortle 6\'dan itibaren çıplak gözle pratik olarak görünmez hale gelir.',
36
+ },
37
+ {
38
+ question: 'NELM ve SQM ne anlama gelir?',
39
+ answer: 'NELM (Çıplak Gözle Sınır Parlaklık), o koşullar altında çıplak gözle görülebilen en sönük yıldızın parlaklığıdır. SQM (Gökyüzü Kalite Metresi), gökyüzü parlaklığını her yay saniyesi kare başına kadir cinsinden ölçer ve objektif bilimsel standarttır.',
40
+ },
41
+ {
42
+ question: 'Yakınımdaki karanlık gökyüzü alanlarını nasıl bulabilirim?',
43
+ answer: 'Birkaç saatlik sürüş mesafesindeki Bortle 3 veya daha karanlık bölgeleri bulmak için lightpollutionmap.info gibi ışık kirliliği haritalarını kullanın. Milli parklar, yüksek dağlık alanlar ve belirlenmiş karanlık gökyüzü parkları en iyi koşulları sunar.',
44
+ },
45
+ ];
46
+
47
+ const howTo: BortleVisualizerLocaleContent['howTo'] = [
48
+ { name: '1. Bortle seviyesini ayarlayın', text: 'Işık kirliliğinin seviye 1\'den (çöl) seviye 9\'a (şehir merkezi) nasıl arttığını simüle etmek için kaydırıcıyı sürükleyin.' },
49
+ { name: '2. Görsel efektleri gözlemleyin', text: 'Her seviyede sönük yıldızların nasıl kaybolduğuna, Samanyolu\'nun nasıl solduğuna ve gökyüzünün nasıl turuncu veya gri bir ton aldığına dikkat edin.' },
50
+ { name: '3. Mevcut seviyenizi belirleyin', text: 'Yerel Bortle seviyenizi belirlemek için her zamanki gözlem noktanızdan gördüklerinizi simülasyonlarla karşılaştırın.' },
51
+ ];
52
+
53
+ const bibliography: BortleVisualizerLocaleContent['bibliography'] = [
54
+ { name: 'Orijinal Bortle Makalesi (Sky & Telescope, 2001)', url: 'https://skyandtelescope.org/astronomy-resources/light-pollution-and-astronomy-the-bortle-dark-sky-scale/' },
55
+ { name: 'Işık Kirliliği Haritası - Dünya Haritası', url: 'https://www.lightpollutionmap.info/' },
56
+ { name: 'Uluslararası Karanlık Gökyüzü Birliği (IDA)', url: 'https://www.darksky.org/' },
57
+ { name: 'Geceleyin Dünya (Globe at Night) - Vatandaş Bilimi', url: 'https://www.globeatnight.org/' },
58
+ ];
59
+
60
+ const seo: BortleVisualizerLocaleContent['seo'] = [
61
+ {
62
+ type: 'summary',
63
+ title: 'Bortle Ölçeği Önemli Noktalar',
64
+ items: [
65
+ 'Bortle 1-2: Referans karanlık gökyüzü, Samanyolu gölge düşürür, NELM > 7.5.',
66
+ 'Bortle 3-4: En uygun kırsal gökyüzü, Samanyolu ayrıntılı görünür ancak ufuk kirlidir.',
67
+ 'Bortle 5-6: Banliyö, sönük veya görünmez Samanyolu, gezegenler ve ay için iyi.',
68
+ 'Bortle 7-9: Şehir gökyüzü, çıplak gözle sadece parlak nesneler görünür.',
69
+ ],
70
+ },
71
+ { type: 'title', text: 'Bortle Ölçeği: Gökyüzü Karanlığını Ölçmek', level: 2 },
72
+ {
73
+ type: 'paragraph',
74
+ html: '<strong>Bortle Ölçeği</strong>, amatör gökbilimciler tarafından gece gökyüzünün kalitesini miktarlandırmak için dünya çapında kullanılan uluslararası standart sistemdir. New Yorklu deneyimli bir kuyruklu yıldız ve derin uzay nesnesi gözlemcisi olan John E. Bortle tarafından oluşturulmuş ve gözlem koşullarını iletmek için objektif ve yeniden üretilebilir bir ölçek sağlamak amacıyla 2001 yılında Sky & Telescope dergisinde yayınlanmıştır.',
75
+ },
76
+ {
77
+ type: 'paragraph',
78
+ html: 'Ölçek, <strong>seviye 1</strong>\'den (sadece uzak çöllerde ve medeniyetten uzak yüksek dağlarda bulunan mümkün olan en karanlık gökyüzü) <strong>seviye 9</strong>\'a (gökyüzünün kalıcı bir turuncu veya beyazımsı parlaklıkla parladığı ve sadece Ay ile en parlak gezegenlerin görülebildiği büyük şehirlerin iç kısımları) kadar uzanır. Her seviye, enstrümantasyon olmadan tanımlamaya izin veren spesifik tanımlayıcılara sahiptir.',
79
+ },
80
+ { type: 'title', text: 'Işık Kirliliği: Sessiz Bir Küresel Kriz', level: 2 },
81
+ {
82
+ type: 'paragraph',
83
+ html: 'Işık kirliliğinin artması, en az tartışılan ancak en yaygın çevresel sorunlardan biridir. Son çalışmalara göre, <strong>dünya nüfusunun %80\'inden fazlası</strong> ışık kirliliği olan gökyüzü altında yaşıyor ve Avrupa ile Kuzey Amerika\'da bu oran %99\'u aşıyor. Sonuçlar gökbilimin ötesine geçiyor: Geceleyin yapay ışık, insanların ve hayvanların sirkadiyen ritimlerini bozar, göçmen kuşların yönünü şaşırtır, deniz kaplumbağalarının üremesini etkiler ve memelilerde melatonin üretimini baskılar.',
84
+ },
85
+ {
86
+ type: 'table',
87
+ headers: ['Bortle Sınıfı', 'NELM', 'SQM (mag/arcsec²)', 'Samanyolu', 'Temel Özellik'],
88
+ rows: [
89
+ ['1 - Mükemmel', '8.0', '21.99 - 22.0', 'Gölge düşürür', 'M33 çıplak gözle görünür'],
90
+ ['2 - Tipik Karanlık', '7.5', '21.89 - 21.99', 'Çok yapılı', 'Bulutlar = siyah delikler'],
91
+ ['3 - Kırsal', '7.0', '21.69 - 21.89', 'Karmaşık', 'Biraz ufuk parlaması'],
92
+ ['4 - Kırsal/Banliyö', '6.5', '20.49 - 21.69', 'Görünür', 'Ufukta ışık kubbeleri'],
93
+ ['5 - Banliyö', '6.0', '19.50 - 20.49', 'Sönük', 'Grimsi gökyüzü'],
94
+ ['6 - Parlak Banliyö', '5.5', '18.94 - 19.50', 'Görünmez', 'M31 zar zor görünür'],
95
+ ['7 - Banliyö/Şehir', '5.0', '18.38 - 18.94', 'Yok', 'Açık gri gökyüzü'],
96
+ ['8 - Şehir', '4.5', '< 18.38', 'Yok', 'Sadece ana takımyıldızlar'],
97
+ ['9 - Şehir Merkezi', '4.0', '< 18.00', 'Yok', 'Sadece Ay ve gezegenler'],
98
+ ],
99
+ },
100
+ {
101
+ type: 'tip',
102
+ title: 'Objektif Ölçüm: Gökyüzü Kalite Metresi (SQM)',
103
+ html: 'Hassas ve yeniden üretilebilir ölçümler için gökbilimciler, gökyüzü parlaklığını her yay saniyesi kare başına kadir (mag/arcsec²) cinsinden ölçen bir cihaz olan <strong>Gökyüzü Kalite Metresi (SQM)</strong> kullanırlar. 22.0\'lık bir SQM, mükemmel bir Bortle 1 gökyüzüne karşılık gelirken, 18.0\'lık bir değer Bortle 8-9 gökyüzünü gösterir. Globe at Night ağındaki gerçek zamanlı ölçümleri kontrol edebilirsiniz.',
104
+ },
105
+ { type: 'title', text: 'Yakınınızdaki Karanlık Gökyüzü Sığınaklarını Bulma', level: 2 },
106
+ {
107
+ type: 'paragraph',
108
+ html: 'Yaygın ışık kirliliğine rağmen, karanlık gökyüzü sığınakları hala mevcuttur. Milli parklar, belirlenmiş karanlık gökyüzü rezervleri ve uzak yayla bölgeleri, çoğu büyük şehirden birkaç saat içinde ulaşılabilen Bortle 2-4 koşulları sunar. IDA (Uluslararası Karanlık Gökyüzü Birliği), küçük parklardan tüm ada rezervlerine kadar sertifikalı karanlık gökyüzü mekanlarının küresel bir kaydını tutar. Daha karanlık bir yere gece gezisi planlamak, astronomik deneyiminizi her türlü ekipman yükseltmesinden daha fazla değiştirecektir.',
109
+ },
110
+ {
111
+ type: 'diagnostic',
112
+ variant: 'success',
113
+ title: 'Planlama Aracı',
114
+ icon: 'mdi:map-marker-star',
115
+ badge: 'Pro İpucu',
116
+ html: 'Herhangi bir gözlem gezisinden önce, 1-2 saatlik yarıçap içindeki Bortle 3 veya daha karanlık bölgeleri belirlemek için lightpollutionmap.info adresindeki ışık kirliliği haritasını kontrol edin. Mükemmel geceyi seçmek için bunu Clear Outside veya Meteoblue Astro\'dan gelen astronomik hava tahminleriyle birleştirin.',
117
+ },
118
+ ];
119
+
120
+ const faqSchema: WithContext<FAQPage> = {
121
+ '@context': 'https://context.org',
122
+ '@type': 'FAQPage',
123
+ mainEntity: faq.map((item) => ({
124
+ '@type': 'Question',
125
+ name: item.question,
126
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
127
+ })),
128
+ };
129
+
130
+ const howToSchema: WithContext<HowTo> = {
131
+ '@context': 'https://schema.org',
132
+ '@type': 'HowTo',
133
+ name: title,
134
+ description,
135
+ step: howTo.map((step) => ({
136
+ '@type': 'HowToStep',
137
+ name: step.name,
138
+ text: step.text,
139
+ })),
140
+ };
141
+
142
+ const appSchema: WithContext<SoftwareApplication> = {
143
+ '@context': 'https://schema.org',
144
+ '@type': 'SoftwareApplication',
145
+ name: title,
146
+ description,
147
+ applicationCategory: 'UtilitiesApplication',
148
+ operatingSystem: 'Web',
149
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
150
+ inLanguage: 'tr',
151
+ };
152
+
153
+
154
+ export const content: BortleVisualizerLocaleContent = {
155
+ slug,
156
+ title,
157
+ description,
158
+ ui,
159
+ seo,
160
+ faq,
161
+ faqTitle: 'Sıkça Sorulan Sorular',
162
+ bibliography,
163
+ bibliographyTitle: 'Bibliyografik Referanslar',
164
+ howTo,
165
+ bortleData: ui.bortleData,
166
+ schemas: [faqSchema as any, howToSchema as any, appSchema],
167
+ };
@@ -0,0 +1,167 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { BortleVisualizerUI, BortleVisualizerLocaleContent } from '../index';
3
+
4
+ const slug = 'dark-sky-simulator';
5
+ const title = '夜空亮度模拟器(波特尔分级)';
6
+ const description = '互动式体验波特尔分级(Bortle Scale)的 9 个等级,探索光污染是如何让璀璨星空逐渐消失的。';
7
+
8
+ const ui: BortleVisualizerUI = {
9
+ toolTitle: '夜空亮度模拟器',
10
+ sliderLabel: '拖动滑块调整光污染程度',
11
+ classLabel: '波特尔等级',
12
+ nelmLabel: 'NELM',
13
+ sqmLabel: 'SQM',
14
+ classPrefix: '等级',
15
+ bortleData: {
16
+ 1: { title: '极佳的暗夜天空', description: '天文学家的天堂。银河能投下影子。黄道光明显且色彩丰富。肉眼清晰可见 M33。', nelm: 8.0, sqm: '21.99 - 22.0', starsVisible: true, milkyWayVisible: true, cloudsLit: false, skyBrightness: 0.0 },
17
+ 2: { title: '真正的黑暗天空', description: '极其黑暗。银河结构非常丰富。云层在天空中看起来像黑色孔洞。', nelm: 7.5, sqm: '21.89 - 21.99', starsVisible: true, milkyWayVisible: true, cloudsLit: false, skyBrightness: 0.1 },
18
+ 3: { title: '乡村天空', description: '复杂的银河结构。地平线处有少量光污染。地平线附近的云被照亮,但头顶的云是黑色的。', nelm: 7.0, sqm: '21.69 - 21.89', starsVisible: true, milkyWayVisible: true, cloudsLit: true, skyBrightness: 0.2 },
19
+ 4: { title: '乡村/郊区过渡带', description: '银河细节减少但依然可见。地平线上有光穹。云层从下方被照亮。', nelm: 6.5, sqm: '20.49 - 21.69', starsVisible: true, milkyWayVisible: true, cloudsLit: true, skyBrightness: 0.35 },
20
+ 5: { title: '郊区天空', description: '银河在地平线附近非常微弱或看不见。极少能看到黄道光。天空呈现灰色。', nelm: 6.0, sqm: '19.50 - 20.49', starsVisible: true, milkyWayVisible: true, cloudsLit: true, skyBrightness: 0.5 },
21
+ 6: { title: '明亮的郊区', description: '银河看不见。天空呈明亮的灰色。云层非常明亮。勉强可见 M31。', nelm: 5.5, sqm: '18.94 - 19.50', starsVisible: true, milkyWayVisible: false, cloudsLit: true, skyBrightness: 0.65 },
22
+ 7: { title: '郊区/城市过渡带', description: '天空呈灰白色。各个方向都有强光源。只能看到最亮的恒星。', nelm: 5.0, sqm: '18.38 - 18.94', starsVisible: true, milkyWayVisible: false, cloudsLit: true, skyBrightness: 0.8 },
23
+ 8: { title: '城市天空', description: '天空呈灰白色或橙色。可以阅读报纸标题。只能看到主要的星座。', nelm: 4.5, sqm: '< 18.38', starsVisible: true, milkyWayVisible: false, cloudsLit: true, skyBrightness: 0.9 },
24
+ 9: { title: '市中心', description: '天空像黄昏一样明亮。月亮可见但星座不可见。只能看到行星和月亮。', nelm: 4.0, sqm: '< 18.00', starsVisible: false, milkyWayVisible: false, cloudsLit: true, skyBrightness: 1.0 },
25
+ },
26
+ };
27
+
28
+ const faq: BortleVisualizerLocaleContent['faq'] = [
29
+ {
30
+ question: '什么是波特尔分级(Bortle Scale)?',
31
+ answer: '这是一个衡量特定地点夜空亮度的 9 级数字标度。它由业余天文学家约翰·波特尔(John E. Bortle)于 2001 年创建并发表在《天空与望远镜》(Sky & Telescope)杂志上。1 级代表最黑暗的天空(远郊沙漠),9 级代表光污染最严重的地区(市中心)。',
32
+ },
33
+ {
34
+ question: '至少在波特尔几级能看到银河?',
35
+ answer: '银河通常从波特尔 4 级(乡村/郊区过渡带)开始清晰可见。在 1 级和 2 级,银河非常壮丽,细节丰富,甚至能投下微弱的影子。从 6 级开始,肉眼几乎无法看到银河。',
36
+ },
37
+ {
38
+ question: 'NELM 和 SQM 是什么意思?',
39
+ answer: 'NELM(肉眼极限星等)是指在该条件下肉眼可见的最暗恒星的星等。SQM(夜空质量仪)以每平方角秒星等为单位测量天空亮度,是目前客观的科学标准。',
40
+ },
41
+ {
42
+ question: '如何寻找身边的暗夜地点?',
43
+ answer: '使用光污染地图网站(如 lightpollutionmap.info)寻找车程数小时内的波特尔 3 级或更暗的区域。国家公园、高山地区和指定的暗夜公园通常拥有最佳条件。',
44
+ },
45
+ ];
46
+
47
+ const howTo: BortleVisualizerLocaleContent['howTo'] = [
48
+ { name: '1. 调整波特尔分级', text: '拖动滑块模拟光污染如何从 1 级(沙漠)增加到 9 级(市中心)。' },
49
+ { name: '2. 观察视觉效果', text: '注意随着等级提升,暗星如何消失,银河如何变得模糊,以及天空如何呈现出橙色或灰色调。' },
50
+ { name: '3. 确定你所在的等级', text: '将你在平时观测点观察到的情况与模拟效果进行对比,从而确定当地的波特尔等级。' },
51
+ ];
52
+
53
+ const bibliography: BortleVisualizerLocaleContent['bibliography'] = [
54
+ { name: '波特尔原创文章 (Sky & Telescope, 2001)', url: 'https://skyandtelescope.org/astronomy-resources/light-pollution-and-astronomy-the-bortle-dark-sky-scale/' },
55
+ { name: '世界光污染地图', url: 'https://www.lightpollutionmap.info/' },
56
+ { name: '国际暗夜协会 (IDA)', url: 'https://www.darksky.org/' },
57
+ { name: '暗夜之球 (Globe at Night) - 公民科学项目', url: 'https://www.globeatnight.org/' },
58
+ ];
59
+
60
+ const seo: BortleVisualizerLocaleContent['seo'] = [
61
+ {
62
+ type: 'summary',
63
+ title: '波特尔分级核心要点',
64
+ items: [
65
+ '波特尔 1-2 级:参考级暗夜,银河可投射影子,NELM > 7.5。',
66
+ '波特尔 3-4 级:理想的乡村天空,银河细节清晰,但地平线有光污染。',
67
+ '波特尔 5-6 级:郊区天空,银河微弱或不可见,适合观测行星和月亮。',
68
+ '波特尔 7-9 级:城市天空,肉眼仅能看到明亮的天体。',
69
+ ],
70
+ },
71
+ { type: 'title', text: '波特尔分级:衡量天空黑暗的标准', level: 2 },
72
+ {
73
+ type: 'paragraph',
74
+ html: '<strong>波特尔分级</strong>(Bortle Scale)是全球业余天文学家通用的国际标准系统,用于量化夜空的质量。它由来自纽约的资深彗星和深空天体观测者约翰·波特尔(John E. Bortle)创建,并于 2001 年发表在《天空与望远镜》杂志上,旨在为交流观测条件提供一个客观且可重复的尺度。',
75
+ },
76
+ {
77
+ type: 'paragraph',
78
+ html: '该等级涵盖了从 <strong>1 级</strong>(最黑暗的天空,仅存在于远离文明的沙漠和高山中)到 <strong>9 级</strong>(大城市中心,天空呈现永久性的橙色或白色亮度,仅能看到月亮和最亮的行星)。每个等级都有具体的描述性指标,无需仪器即可进行识别。',
79
+ },
80
+ { type: 'title', text: '光污染:一场无声的全球性危机', level: 2 },
81
+ {
82
+ type: 'paragraph',
83
+ html: '光污染的增长是讨论最少但最普遍的环境问题之一。根据最近的研究,<strong>全球 80% 以上的人口</strong>生活在受光污染的天空下,在欧洲和北美,这一比例更是超过了 99%。其后果远不止于天文学:夜间的夜间人工光破坏了人类和动物的昼夜节律,使候鸟迷失方向,影响海龟繁殖,并抑制哺乳动物体内的褪黑素生成。',
84
+ },
85
+ {
86
+ type: 'table',
87
+ headers: ['波特尔等级', 'NELM', 'SQM (mag/arcsec²)', '银河', '关键特征'],
88
+ rows: [
89
+ ['1 - 极佳', '8.0', '21.99 - 22.0', '可投射影子', '肉眼可见 M33'],
90
+ ['2 - 理想黑暗', '7.5', '21.89 - 21.99', '结构极丰富', '云呈黑色孔洞状'],
91
+ ['3 - 乡村', '7.0', '21.69 - 21.89', '结构复杂', '地平线有微光'],
92
+ ['4 - 乡村/郊区', '6.5', '20.49 - 21.69', '可见', '地平线有光穹'],
93
+ ['5 - 郊区', '6.0', '19.50 - 20.49', '微弱', '天空呈灰色'],
94
+ ['6 - 明亮郊区', '5.5', '18.94 - 19.50', '看不见', '勉强可见 M31'],
95
+ ['7 - 郊区/城市', '5.0', '18.38 - 18.94', '缺失', '天空呈浅灰色'],
96
+ ['8 - 城市', '4.5', '< 18.38', '缺失', '仅能见主星座'],
97
+ ['9 - 市中心', '4.0', '< 18.00', '缺失', '仅能见月亮/行星'],
98
+ ],
99
+ },
100
+ {
101
+ type: 'tip',
102
+ title: '客观测量:夜空质量仪 (SQM)',
103
+ html: '为了获得精确且可重复的测量结果,天文学家使用 <strong>夜空质量仪 (SQM)</strong>。这是一种测量天亮度的设备,单位为每平方角秒星等 (mag/arcsec²)。22.0 的 SQM 值对应 1 级极佳夜空,而 18.0 的值则表示 8-9 级城市天空。您可以在 Globe at Night 网络上查看实时测量数据。',
104
+ },
105
+ { type: 'title', text: '寻找身边的暗夜避风港', level: 2 },
106
+ {
107
+ type: 'paragraph',
108
+ html: '尽管光污染无处不在,但暗夜避风港依然存在。国家公园、指定的暗夜保护区和偏远山区通常提供 2-4 级的观测条件,距离大多数大城市仅需数小时车程。IDA(国际暗夜协会)维护着一份全球认证暗夜地点的名录。计划一次前往黑暗地点的夜间旅行对观测体验的提升,远比升级任何昂贵的器材都更为显著。',
109
+ },
110
+ {
111
+ type: 'diagnostic',
112
+ variant: 'success',
113
+ title: '规划工具',
114
+ icon: 'mdi:map-marker-star',
115
+ badge: '专家建议',
116
+ html: '在进行任何观测活动之前,请先查看 lightpollutionmap.info 上的光污染地图,找出 1-2 小时路程内的 3 级或更暗区域。结合 Clear Outside 或 Meteoblue Astro 的天文天气预报,选择一个完美的观星之夜。',
117
+ },
118
+ ];
119
+
120
+ const faqSchema: WithContext<FAQPage> = {
121
+ '@context': 'https://schema.org',
122
+ '@type': 'FAQPage',
123
+ mainEntity: faq.map((item) => ({
124
+ '@type': 'Question',
125
+ name: item.question,
126
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
127
+ })),
128
+ };
129
+
130
+ const howToSchema: WithContext<HowTo> = {
131
+ '@context': 'https://schema.org',
132
+ '@type': 'HowTo',
133
+ name: title,
134
+ description,
135
+ step: howTo.map((step) => ({
136
+ '@type': 'HowToStep',
137
+ name: step.name,
138
+ text: step.text,
139
+ })),
140
+ };
141
+
142
+ const appSchema: WithContext<SoftwareApplication> = {
143
+ '@context': 'https://schema.org',
144
+ '@type': 'SoftwareApplication',
145
+ name: title,
146
+ description,
147
+ applicationCategory: 'UtilitiesApplication',
148
+ operatingSystem: 'Web',
149
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
150
+ inLanguage: 'zh',
151
+ };
152
+
153
+
154
+ export const content: BortleVisualizerLocaleContent = {
155
+ slug,
156
+ title,
157
+ description,
158
+ ui,
159
+ seo,
160
+ faq,
161
+ faqTitle: '常见问题',
162
+ bibliography,
163
+ bibliographyTitle: '参考文献',
164
+ howTo,
165
+ bortleData: ui.bortleData,
166
+ schemas: [faqSchema as any, howToSchema as any, appSchema],
167
+ };
@@ -4,19 +4,31 @@ import BortleVisualizerSEO from './seo.astro';
4
4
  import BortleVisualizerBibliography from './bibliography.astro';
5
5
 
6
6
  export interface BortleVisualizerUI {
7
- [key: string]: string;
7
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
8
+ [key: string]: any;
8
9
  toolTitle: string;
9
10
  sliderLabel: string;
10
11
  classLabel: string;
11
12
  nelmLabel: string;
12
13
  sqmLabel: string;
14
+ classPrefix: string;
15
+ bortleData: Record<number, BortleLevel>;
13
16
  }
14
17
 
15
- export type BortleVisualizerLocaleContent = ToolLocaleContent<BortleVisualizerUI>;
18
+ export interface BortleLevel {
19
+ title: string;
20
+ description: string;
21
+ nelm: number;
22
+ sqm: string;
23
+ starsVisible: boolean;
24
+ milkyWayVisible: boolean;
25
+ cloudsLit: boolean;
26
+ skyBrightness: number;
27
+ }
16
28
 
17
- import { content as es } from './i18n/es';
18
- import { content as en } from './i18n/en';
19
- import { content as fr } from './i18n/fr';
29
+ export interface BortleVisualizerLocaleContent extends ToolLocaleContent<BortleVisualizerUI> {
30
+ bortleData: Record<number, BortleLevel>;
31
+ }
20
32
 
21
33
  export const bortleVisualizer: AstronomyToolEntry<BortleVisualizerUI> = {
22
34
  id: 'bortle-visualizer',
@@ -25,9 +37,21 @@ export const bortleVisualizer: AstronomyToolEntry<BortleVisualizerUI> = {
25
37
  fg: 'mdi:telescope',
26
38
  },
27
39
  i18n: {
28
- es: async () => es,
29
- en: async () => en,
30
- fr: async () => fr,
40
+ de: () => import('./i18n/de').then((m) => m.content),
41
+ en: () => import('./i18n/en').then((m) => m.content),
42
+ es: () => import('./i18n/es').then((m) => m.content),
43
+ fr: () => import('./i18n/fr').then((m) => m.content),
44
+ id: () => import('./i18n/id').then((m) => m.content),
45
+ it: () => import('./i18n/it').then((m) => m.content),
46
+ ja: () => import('./i18n/ja').then((m) => m.content),
47
+ ko: () => import('./i18n/ko').then((m) => m.content),
48
+ nl: () => import('./i18n/nl').then((m) => m.content),
49
+ pl: () => import('./i18n/pl').then((m) => m.content),
50
+ pt: () => import('./i18n/pt').then((m) => m.content),
51
+ ru: () => import('./i18n/ru').then((m) => m.content),
52
+ sv: () => import('./i18n/sv').then((m) => m.content),
53
+ tr: () => import('./i18n/tr').then((m) => m.content),
54
+ zh: () => import('./i18n/zh').then((m) => m.content),
31
55
  },
32
56
  };
33
57