@jjlmoya/utils-nautical 1.6.0 → 1.8.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 +72 -71
  2. package/src/tests/i18n_coverage.test.ts +36 -0
  3. package/src/tests/locale_completeness.test.ts +42 -0
  4. package/src/tests/no_h1_in_components.test.ts +48 -0
  5. package/src/tests/schemas_fulfillment.test.ts +23 -0
  6. package/src/tests/slug_language_code_format.test.ts +23 -0
  7. package/src/tests/slug_uniqueness.test.ts +81 -0
  8. package/src/tests/title_quality.test.ts +55 -0
  9. package/src/tool/endurance/i18n/de.ts +249 -0
  10. package/src/tool/endurance/i18n/id.ts +249 -0
  11. package/src/tool/endurance/i18n/it.ts +249 -0
  12. package/src/tool/endurance/i18n/ja.ts +249 -0
  13. package/src/tool/endurance/i18n/ko.ts +249 -0
  14. package/src/tool/endurance/i18n/nl.ts +249 -0
  15. package/src/tool/endurance/i18n/pl.ts +249 -0
  16. package/src/tool/endurance/i18n/pt.ts +249 -0
  17. package/src/tool/endurance/i18n/ru.ts +249 -0
  18. package/src/tool/endurance/i18n/sv.ts +249 -0
  19. package/src/tool/endurance/i18n/tr.ts +249 -0
  20. package/src/tool/endurance/i18n/zh.ts +249 -0
  21. package/src/tool/endurance/index.ts +12 -0
  22. package/src/tool/nauticalConverter/i18n/de.ts +239 -0
  23. package/src/tool/nauticalConverter/i18n/id.ts +239 -0
  24. package/src/tool/nauticalConverter/i18n/it.ts +239 -0
  25. package/src/tool/nauticalConverter/i18n/ja.ts +239 -0
  26. package/src/tool/nauticalConverter/i18n/ko.ts +239 -0
  27. package/src/tool/nauticalConverter/i18n/nl.ts +239 -0
  28. package/src/tool/nauticalConverter/i18n/pl.ts +239 -0
  29. package/src/tool/nauticalConverter/i18n/pt.ts +239 -0
  30. package/src/tool/nauticalConverter/i18n/ru.ts +239 -0
  31. package/src/tool/nauticalConverter/i18n/sv.ts +239 -0
  32. package/src/tool/nauticalConverter/i18n/tr.ts +239 -0
  33. package/src/tool/nauticalConverter/i18n/zh.ts +239 -0
  34. package/src/tool/nauticalConverter/index.ts +12 -0
  35. package/src/tool/sailArea/component.astro +1 -1
  36. package/src/tool/sailArea/i18n/de.ts +275 -0
  37. package/src/tool/sailArea/i18n/id.ts +275 -0
  38. package/src/tool/sailArea/i18n/it.ts +275 -0
  39. package/src/tool/sailArea/i18n/ja.ts +275 -0
  40. package/src/tool/sailArea/i18n/ko.ts +275 -0
  41. package/src/tool/sailArea/i18n/nl.ts +275 -0
  42. package/src/tool/sailArea/i18n/pl.ts +275 -0
  43. package/src/tool/sailArea/i18n/pt.ts +275 -0
  44. package/src/tool/sailArea/i18n/ru.ts +275 -0
  45. package/src/tool/sailArea/i18n/sv.ts +275 -0
  46. package/src/tool/sailArea/i18n/tr.ts +275 -0
  47. package/src/tool/sailArea/i18n/zh.ts +275 -0
  48. package/src/tool/sailArea/index.ts +12 -0
  49. package/src/tool/speedConverter/i18n/de.ts +271 -0
  50. package/src/tool/speedConverter/i18n/id.ts +271 -0
  51. package/src/tool/speedConverter/i18n/it.ts +271 -0
  52. package/src/tool/speedConverter/i18n/ja.ts +271 -0
  53. package/src/tool/speedConverter/i18n/ko.ts +271 -0
  54. package/src/tool/speedConverter/i18n/nl.ts +271 -0
  55. package/src/tool/speedConverter/i18n/pl.ts +271 -0
  56. package/src/tool/speedConverter/i18n/pt.ts +271 -0
  57. package/src/tool/speedConverter/i18n/ru.ts +194 -0
  58. package/src/tool/speedConverter/i18n/sv.ts +271 -0
  59. package/src/tool/speedConverter/i18n/tr.ts +225 -0
  60. package/src/tool/speedConverter/i18n/zh.ts +271 -0
  61. package/src/tool/speedConverter/index.ts +12 -0
  62. package/src/tool/tideCalculator/i18n/de.ts +203 -0
  63. package/src/tool/tideCalculator/i18n/id.ts +203 -0
  64. package/src/tool/tideCalculator/i18n/it.ts +203 -0
  65. package/src/tool/tideCalculator/i18n/ja.ts +203 -0
  66. package/src/tool/tideCalculator/i18n/ko.ts +203 -0
  67. package/src/tool/tideCalculator/i18n/nl.ts +203 -0
  68. package/src/tool/tideCalculator/i18n/pl.ts +203 -0
  69. package/src/tool/tideCalculator/i18n/pt.ts +203 -0
  70. package/src/tool/tideCalculator/i18n/ru.ts +203 -0
  71. package/src/tool/tideCalculator/i18n/sv.ts +203 -0
  72. package/src/tool/tideCalculator/i18n/tr.ts +203 -0
  73. package/src/tool/tideCalculator/i18n/zh.ts +203 -0
  74. package/src/tool/tideCalculator/index.ts +12 -0
  75. package/src/tool/underKeel/i18n/de.ts +189 -0
  76. package/src/tool/underKeel/i18n/en.ts +2 -2
  77. package/src/tool/underKeel/i18n/fr.ts +2 -2
  78. package/src/tool/underKeel/i18n/id.ts +189 -0
  79. package/src/tool/underKeel/i18n/it.ts +176 -0
  80. package/src/tool/underKeel/i18n/ja.ts +185 -0
  81. package/src/tool/underKeel/i18n/ko.ts +185 -0
  82. package/src/tool/underKeel/i18n/nl.ts +176 -0
  83. package/src/tool/underKeel/i18n/pl.ts +176 -0
  84. package/src/tool/underKeel/i18n/pt.ts +176 -0
  85. package/src/tool/underKeel/i18n/ru.ts +176 -0
  86. package/src/tool/underKeel/i18n/sv.ts +176 -0
  87. package/src/tool/underKeel/i18n/tr.ts +185 -0
  88. package/src/tool/underKeel/i18n/zh.ts +185 -0
  89. package/src/tool/underKeel/index.ts +12 -0
@@ -0,0 +1,189 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { UnderKeelUI, UnderKeelLocaleContent } from '../index';
3
+
4
+ const slug = 'ukc-rechner';
5
+ const title = 'Kalkulator für die Kielfreiheit UKC';
6
+ const description =
7
+ 'Berechnen Sie das sichere Zeitfenster zum Überqueren von Untiefen, Kanälen oder tiefgangsbeschränkten Stellen. Geben Sie den Tiefgang Ihres Bootes, die Kartentiefe und Gezeitendaten ein, um das genaue sichere Durchfahrtsintervall zu erhalten.';
8
+
9
+ const ui: UnderKeelUI = {
10
+ parametersLabel: 'Parameter',
11
+ boatDraftLabel: 'Tiefgang des Bootes',
12
+ chartDepthLabel: 'Kartentiefe',
13
+ safetyMarginLabel: 'Sicherheitsmarge',
14
+ highTideLabel: 'Hochwasser',
15
+ lowTideLabel: 'Niedrigwasser',
16
+ metersLabel: 'Meter',
17
+ passWindowLabel: 'Durchfahrtsfenster',
18
+ neededLabel: 'Benötigte Tiefe',
19
+ tideRequiredLabel: 'Mindestens benötigte Gezeitenhöhe',
20
+ statusNeverLabel: 'Keine Kielfreiheit in diesem Zyklus',
21
+ statusAlwaysLabel: 'Kielfreiheit während des gesamten Zyklus',
22
+ statusFromLabel: 'Durchfahrt ab:',
23
+ statusUntilLabel: 'Durchfahrt bis:',
24
+ bottomLabel: 'GRUND',
25
+ faqTitle: 'Häufig gestellte Fragen',
26
+ bibliographyTitle: 'Bibliografie',
27
+ };
28
+
29
+ const faq: UnderKeelLocaleContent['faq'] = [
30
+ {
31
+ question: 'Was genau ist eine Kielfreiheitsberechnung (UKC)?',
32
+ answer: 'Es ist die Berechnung des Zeitpunkts, an dem an einer kritischen Stelle (z. B. einer Sandbank oder einem engen Kanal) genügend Tiefe vorhanden ist, um eine sichere Durchfahrt eines Schiffes entsprechend seinem Tiefgang zu ermöglichen.',
33
+ },
34
+ {
35
+ question: 'Welche Sicherheitsmarge wird empfohlen?',
36
+ answer: 'Für Sportboote wird in der Regel eine Mindestsicherheitsmarge zwischen 0,5 und 1 Meter über dem Tiefgang des Bootes empfohlen. Diese Marge kompensiert mögliche Fehler bei Gezeitenberechnungen, Luftdruckschwankungen oder unerwarteten Seegang.',
37
+ },
38
+ {
39
+ question: 'Wie beeinflusst Seegang die Kielfreiheit?',
40
+ answer: 'Seegang erzeugt vertikale Schwingungen im Rumpf. Am tiefsten Punkt der Welle ist das Boot dem Boden näher als in Ruhe. Beim Durchfahren von Gebieten mit Seegang muss die Sicherheitsmarge erheblich erhöht werden.',
41
+ },
42
+ {
43
+ question: 'Was ist die in der Karte angegebene Tiefe (Kartentiefe)?',
44
+ answer: 'Es ist die minimale Tiefe an einem Punkt, wenn die Gezeitenhöhe bei Kartennull liegt. Sie wird zur aktuellen Gezeitenhöhe addiert, um die gesamte verfügbare Tiefe zu erhalten.',
45
+ },
46
+ {
47
+ question: 'Was bedeutet eine unterstrichene Tiefenangabe in der Seekarte?',
48
+ answer: 'Es bedeutet, dass diese Stelle bei Kartennull trockenfällt. Sie benötigen eine entsprechende Gezeitenhöhe, um darüber hinwegfahren zu können.',
49
+ },
50
+ {
51
+ question: 'Was ist der Squat-Effekt und wie verändert er die Durchfahrt?',
52
+ answer: 'Es ist ein hydrodynamisches Phänomen, bei dem ein Schiff, das durch flache Kanäle fährt, dazu neigt, tiefer relativ zu seiner Wasserlinie einzusinken. Je schneller man fährt, desto mehr nimmt der dynamische Tiefgang zu und desto weniger Wasser hat man unter dem Kiel.',
53
+ },
54
+ ];
55
+
56
+ const howTo: UnderKeelLocaleContent['howTo'] = [
57
+ {
58
+ name: 'Tiefgang und Sicherheitsmarge festlegen',
59
+ text: 'Messen Sie den Tiefgang Ihres Bootes am tiefsten Punkt und addieren Sie eine vorsorgliche Sicherheitsmarge (z. B. 0,5 m).',
60
+ },
61
+ {
62
+ name: 'Kartentiefe nachschlagen',
63
+ text: 'Suchen Sie die Tiefenangabe für die kritische Stelle, die Sie befahren möchten. Beachten Sie, ob es sich um ein sandiges oder felsiges Gebiet handelt.',
64
+ },
65
+ {
66
+ name: 'Gezeitendaten eingeben',
67
+ text: 'Verwenden Sie die Zeiten und Höhen von Hoch- und Niedrigwasser aus dem nächsten offiziellen Gezeitenkalender.',
68
+ },
69
+ {
70
+ name: 'Durchfahrtsfenster prüfen',
71
+ text: 'Das Tool zeigt das genaue Zeitintervall an, in dem Sie über genügend Tiefe für eine sichere Navigation verfügen.',
72
+ },
73
+ ];
74
+
75
+ const bibliography: UnderKeelLocaleContent['bibliography'] = [
76
+ {
77
+ name: 'Ministerio de Transportes - Recreational Boating',
78
+ url: 'https://www.mitma.gob.es/marina-mercante/nautica-de-recreo/',
79
+ },
80
+ {
81
+ name: 'Portos de Galicia - Tide Tables',
82
+ url: 'https://portosdegalicia.gal/es/taboa-de-mareas',
83
+ },
84
+ ];
85
+
86
+ const seo: UnderKeelLocaleContent['seo'] = [
87
+ {
88
+ type: 'title',
89
+ text: 'Kielfreiheit: Sicher über Untiefen navigieren',
90
+ level: 2,
91
+ },
92
+ {
93
+ type: 'paragraph',
94
+ html: 'Die Planung einer Durchfahrt endet nicht mit dem Zeichnen eines Kurses in der Karte. Für den Küstennavigator ist eine der kritischsten Berechnungen die <strong>Kielfreiheit (Under-Keel Clearance)</strong>: zu wissen, zu welcher Zeit genügend Tiefe vorhanden ist, um eine kritische Stelle ohne Grundberührung zu passieren.',
95
+ },
96
+ {
97
+ type: 'title',
98
+ text: 'Was ist die Kartentiefe und wie hängt sie mit der Gezeit zusammen?',
99
+ level: 3,
100
+ },
101
+ {
102
+ type: 'paragraph',
103
+ html: 'In Seekarten beziehen sich Tiefenangaben (Soundings) auf <strong>Kartennull (Chart Datum)</strong>. Dieses Niveau ist per Konvention der niedrigste Stand, den die Gezeiten unter normalen Bedingungen erreichen. Die tatsächliche Tiefe, die Ihr Boot zu einem bestimmten Zeitpunkt vorfindet, ist die Summe aus dieser Tiefenangabe plus der Gezeitenhöhe zu diesem Zeitpunkt.',
104
+ },
105
+ {
106
+ type: 'title',
107
+ text: 'Die Elemente der Berechnung: Tiefgang und Marge',
108
+ level: 3,
109
+ },
110
+ {
111
+ type: 'paragraph',
112
+ html: 'Um den Kielfreiheitsrechner professionell zu nutzen, müssen Sie zwei technische Details über Ihr Boot kennen und eine persönliche Entscheidung treffen:',
113
+ },
114
+ {
115
+ type: 'list',
116
+ items: [
117
+ '<strong>Maximaler Tiefgang:</strong> Die Tiefe, die der tiefste Punkt des Bootes (der Kiel) bei voller Beladung erreicht.',
118
+ '<strong>Kartentiefe:</strong> Die Zahl in der Seekarte für den Punkt, den Sie überqueren möchten. Wenn unterstrichen, fällt die Stelle bei Kartennull trocken.',
119
+ '<strong>Sicherheitsmarge:</strong> Zusätzliche Freigabe von mindestens 0,5 bis 1 Meter über dem Tiefgang.',
120
+ ],
121
+ },
122
+ {
123
+ type: 'title',
124
+ text: 'Wie funktioniert das Durchfahrtsfenster?',
125
+ level: 3,
126
+ },
127
+ {
128
+ type: 'paragraph',
129
+ html: 'Der Rechner ermittelt den genauen Zeitpunkt, an dem der Wasserstand über Ihren Tiefgang plus der gewählten Sicherheitsmarge steigt. Ab dieser Minute öffnet sich das <strong>Durchfahrtsfenster</strong>. Wenn die Gezeit abläuft (Ebbe), zeigt das Tool an, bis zu welcher Zeit die Durchfahrt erlaubt ist, bevor der Wasserstand unter Ihr Sicherheitslimit sinkt.',
130
+ },
131
+ {
132
+ type: 'title',
133
+ text: 'Faktoren, die die tatsächliche Durchfahrt beeinflussen',
134
+ level: 3,
135
+ },
136
+ {
137
+ type: 'table',
138
+ headers: ['Faktor', 'Effekt', 'Empfehlung'],
139
+ rows: [
140
+ ['<strong>Seegang</strong>', 'Verringert das Wasser unter dem Rumpf', 'Sicherheitsmarge deutlich erhöhen'],
141
+ ['<strong>Squat-Effekt</strong>', 'Erhöht den Tiefgang durch Sogwirkung', 'Geschwindigkeit an kritischen Stellen reduzieren'],
142
+ ['<strong>Sandiger Grund</strong>', 'Tiefe variabel durch Stürme', 'Echolot aktiv halten und Extra-Marge einplanen'],
143
+ ],
144
+ },
145
+ {
146
+ type: 'tip',
147
+ title: 'Navigationstipp',
148
+ html: 'Wenn Ihr Durchfahrtsfenster sehr schmal ist oder sich das Wetter verschlechtert, ist es meist die klügste Entscheidung, draußen im tiefen Wasser zu warten, bis die Gezeit die erforderliche Höhe erreicht hat.',
149
+ },
150
+ ];
151
+
152
+ const schemas: UnderKeelLocaleContent['schemas'] = [
153
+ {
154
+ '@context': 'https://schema.org',
155
+ '@type': 'SoftwareApplication',
156
+ name: title,
157
+ description,
158
+ applicationCategory: 'UtilityApplication',
159
+ operatingSystem: 'Web',
160
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
161
+ } as WithContext<SoftwareApplication>,
162
+ {
163
+ '@context': 'https://schema.org',
164
+ '@type': 'FAQPage',
165
+ mainEntity: faq.map((item) => ({
166
+ '@type': 'Question',
167
+ name: item.question,
168
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
169
+ })),
170
+ } as WithContext<FAQPage>,
171
+ {
172
+ '@context': 'https://schema.org',
173
+ '@type': 'HowTo',
174
+ name: `Benutzung: ${title}`,
175
+ step: howTo.map((s) => ({ '@type': 'HowToStep', name: s.name, text: s.text })),
176
+ } as WithContext<HowTo>,
177
+ ];
178
+
179
+ export const content: UnderKeelLocaleContent = {
180
+ slug,
181
+ title,
182
+ description,
183
+ ui,
184
+ seo,
185
+ faq,
186
+ bibliography,
187
+ howTo,
188
+ schemas,
189
+ };
@@ -2,7 +2,7 @@ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dt
2
2
  import type { UnderKeelUI, UnderKeelLocaleContent } from '../index';
3
3
 
4
4
  const slug = 'under-keel-clearance-calculator';
5
- const title = 'Under-Keel Clearance Calculator';
5
+ const title = 'Under Keel Clearance Calculator';
6
6
  const description =
7
7
  'Calculate the safe time window to cross bars, channels or draft-restricted points. Enter your boat draft, chart depth and tidal data to get the exact safe passage interval.';
8
8
 
@@ -86,7 +86,7 @@ const bibliography: UnderKeelLocaleContent['bibliography'] = [
86
86
  const seo: UnderKeelLocaleContent['seo'] = [
87
87
  {
88
88
  type: 'title',
89
- text: 'Under-Keel Clearance: Navigating Safely Over Shoals',
89
+ text: 'Under Keel Clearance: Navigating Safely Over Shoals',
90
90
  level: 2,
91
91
  },
92
92
  {
@@ -2,7 +2,7 @@ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dt
2
2
  import type { UnderKeelUI, UnderKeelLocaleContent } from '../index';
3
3
 
4
4
  const slug = 'calculateur-passage-haut-fond';
5
- const title = 'Calculateur de Passage sur Haut-Fond';
5
+ const title = 'Calculateur de Passage sur Haut Fond';
6
6
  const description =
7
7
  "Calculez la feneˆtre de temps sure pour franchir des barres, chenaux ou points a tirant d'eau restreint. Entrez le tirant d'eau de votre bateau, la sonde de la carte et les donnees de maree pour obtenir l'intervalle de passage sur.";
8
8
 
@@ -86,7 +86,7 @@ const bibliography: UnderKeelLocaleContent['bibliography'] = [
86
86
  const seo: UnderKeelLocaleContent['seo'] = [
87
87
  {
88
88
  type: 'title',
89
- text: 'Passage sur Haut-Fond : Naviguer en Securite au-dessus des Obstacles',
89
+ text: 'Passage sur Haut Fond : Naviguer en Securite au-dessus des Obstacles',
90
90
  level: 2,
91
91
  },
92
92
  {
@@ -0,0 +1,189 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { UnderKeelUI, UnderKeelLocaleContent } from '../index';
3
+
4
+ const slug = 'kalkulator-ruang-bebas-kapal';
5
+ const title = 'Kalkulator Ruang Bebas di Bawah Lunas UKC';
6
+ const description =
7
+ 'Hitung jendela waktu aman untuk melintasi gosong pasir, kanal, atau titik dengan draf terbatas. Masukkan draf kapal, kedalaman peta, dan data pasang surut Anda.';
8
+
9
+ const ui: UnderKeelUI = {
10
+ parametersLabel: 'Parameter',
11
+ boatDraftLabel: 'Draf Kapal',
12
+ chartDepthLabel: 'Kedalaman Peta',
13
+ safetyMarginLabel: 'Margin Keamanan',
14
+ highTideLabel: 'Pasang Tinggi',
15
+ lowTideLabel: 'Surut Rendah',
16
+ metersLabel: 'meter',
17
+ passWindowLabel: 'Jendela Lintasan',
18
+ neededLabel: 'Kedalaman yang dibutuhkan',
19
+ tideRequiredLabel: 'Minimum pasang yang dibutuhkan',
20
+ statusNeverLabel: 'Tidak ada ruang bebas dalam siklus ini',
21
+ statusAlwaysLabel: 'Aman sepanjang siklus',
22
+ statusFromLabel: 'Lintasan dari:',
23
+ statusUntilLabel: 'Lintasan hingga:',
24
+ bottomLabel: 'DASAR LAUT',
25
+ faqTitle: 'Pertanyaan yang Sering Diajukan',
26
+ bibliographyTitle: 'Bibliografi',
27
+ };
28
+
29
+ const faq: UnderKeelLocaleContent['faq'] = [
30
+ {
31
+ question: 'Apa sebenarnya kalkulasi ruang bebas di bawah lunas (under-keel clearance)?',
32
+ answer: 'Ini adalah perhitungan saat kedalaman air mencukupi di titik kritis (seperti gosong pasir atau kanal sempit) untuk memungkinkan transit kapal dengan aman sesuai dengan draf (sarat air) kapal tersebut.',
33
+ },
34
+ {
35
+ question: 'Berapa margin keamanan yang direkomendasikan?',
36
+ answer: 'Untuk kapal rekreasi, margin keamanan minimum antara 0,5 dan 1 meter di atas draf kapal biasanya direkomendasikan. Margin ini mengompensasi kemungkinan kesalahan dalam perhitungan pasang surut, variasi tekanan atmosfer, atau alun (swell) yang tidak terduga.',
37
+ },
38
+ {
39
+ question: 'Bagaimana alun (swell) memengaruhi ruang bebas di bawah lunas?',
40
+ answer: 'Alun menghasilkan osilasi vertikal pada lambung kapal. Pada titik terendah gelombang, kapal lebih dekat ke dasar laut daripada saat diam. Saat melintasi area dengan alun, margin keamanan harus ditingkatkan secara substansial.',
41
+ },
42
+ {
43
+ question: 'Apa itu sounding peta (chart sounding)?',
44
+ answer: 'Ini adalah kedalaman minimum di suatu titik ketika pasang berada pada Chart Datum. Nilai ini ditambahkan ke ketinggian pasang pada saat itu untuk memberikan total kedalaman yang tersedia.',
45
+ },
46
+ {
47
+ question: 'Apa arti nilai sounding yang digarisbawahi di peta?',
48
+ answer: 'Artinya titik tersebut terekspos (mengering) ketika pasang berada pada Chart Datum. Anda akan memerlukan ketinggian pasang yang lebih besar untuk dapat melewatinya.',
49
+ },
50
+ {
51
+ question: 'Apa itu efek Squat dan bagaimana pengaruhnya terhadap lintasan?',
52
+ answer: 'Ini adalah fenomena hidrodinamika di mana kapal yang menavigasi kanal dangkal cenderung tenggelam lebih rendah relatif terhadap garis airnya. Semakin cepat Anda melaju, semakin draf dinamis meningkat dan semakin sedikit air di bawah lunas.',
53
+ },
54
+ ];
55
+
56
+ const howTo: UnderKeelLocaleContent['howTo'] = [
57
+ {
58
+ name: 'Tentukan draf dan margin keamanan',
59
+ text: 'Ukur draf kapal Anda pada titik maksimumnya dan tambahkan margin keamanan yang bijaksana (misalnya 0,5 m).',
60
+ },
61
+ {
62
+ name: 'Cari nilai sounding peta',
63
+ text: 'Temukan nilai Datum sounding untuk titik kritis yang akan Anda navigasikan. Perhatikan apakah itu area berpasir atau berbatu.',
64
+ },
65
+ {
66
+ name: 'Masukkan data pasang surut',
67
+ text: 'Gunakan waktu dan ketinggian pasang tinggi dan surut rendah dari almanak pasang surut resmi terdekat.',
68
+ },
69
+ {
70
+ name: 'Periksa jendela lintasan Anda',
71
+ text: 'Alat ini akan menunjukkan interval waktu yang tepat di mana Anda akan memiliki kedalaman yang cukup untuk menavigasi dengan aman.',
72
+ },
73
+ ];
74
+
75
+ const bibliography: UnderKeelLocaleContent['bibliography'] = [
76
+ {
77
+ name: 'Ministerio de Transportes - Recreational Boating',
78
+ url: 'https://www.mitma.gob.es/marina-mercante/nautica-de-recreo/',
79
+ },
80
+ {
81
+ name: 'Portos de Galicia - Tide Tables',
82
+ url: 'https://portosdegalicia.gal/es/taboa-de-mareas',
83
+ },
84
+ ];
85
+
86
+ const seo: UnderKeelLocaleContent['seo'] = [
87
+ {
88
+ type: 'title',
89
+ text: 'Ruang Bebas di Bawah Lunas: Navigasi Aman di Atas Kedangkalan',
90
+ level: 2,
91
+ },
92
+ {
93
+ type: 'paragraph',
94
+ html: 'Merencanakan lintasan tidak berakhir dengan menggambar rute di peta. Bagi navigator pesisir, salah satu perhitungan paling kritis adalah <strong>ruang bebas di bawah lunas (under-keel clearance)</strong>: mengetahui jam berapa akan ada cukup kedalaman untuk melintasi titik kritis tanpa kandas.',
95
+ },
96
+ {
97
+ type: 'title',
98
+ text: 'Apa itu sounding peta dan bagaimana hubungannya dengan pasang surut?',
99
+ level: 3,
100
+ },
101
+ {
102
+ type: 'paragraph',
103
+ html: 'Pada peta navigasi, kedalaman (sounding) merujuk pada <strong>Chart Datum</strong>. Level ini, berdasarkan konvensi, adalah level terendah yang dicapai pasang surut dalam kondisi normal. Kedalaman aktual yang akan ditemukan kapal Anda pada saat tertentu adalah jumlah dari sounding tersebut ditambah ketinggian pasang pada saat itu.',
104
+ },
105
+ {
106
+ type: 'title',
107
+ text: 'Elemen kalkulasi: Draf dan Margin',
108
+ level: 3,
109
+ },
110
+ {
111
+ type: 'paragraph',
112
+ html: 'Untuk menggunakan kalkulator ruang bebas di bawah lunas secara profesional, Anda perlu mengetahui dua detail teknis tentang kapal Anda dan satu keputusan pribadi:',
113
+ },
114
+ {
115
+ type: 'list',
116
+ items: [
117
+ { term: 'Draf beban maksimum', definition: 'Kedalaman yang dicapai oleh titik terendah kapal (lunas) saat terisi penuh.' },
118
+ { term: 'Sounding peta', definition: 'Angka pada peta navigasi untuk titik yang ingin Anda lintasi. Jika digarisbawahi, titik tersebut mengering pada Chart Datum.' },
119
+ { term: 'Margin keamanan', definition: 'Ruang bebas tambahan (setidaknya 0,5 hingga 1 meter) di atas draf sebagai cadangan keamanan.' },
120
+ ],
121
+ },
122
+ {
123
+ type: 'title',
124
+ text: 'Bagaimana jendela lintasan bekerja?',
125
+ level: 3,
126
+ },
127
+ {
128
+ type: 'paragraph',
129
+ html: 'Kalkulator menentukan saat tepat ketika level air akan naik di atas draf Anda ditambah margin keamanan yang dipilih. Sejak menit itu, <strong>jendela lintasan</strong> terbuka. Jika air surut, alat ini akan menunjukkan sampai jam berapa lintas diizinkan sebelum level air turun di bawah batas keamanan Anda.',
130
+ },
131
+ {
132
+ type: 'title',
133
+ text: 'Faktor yang memengaruhi lintasan aktual',
134
+ level: 3,
135
+ },
136
+ {
137
+ type: 'table',
138
+ headers: ['Faktor', 'Efek', 'Rekomendasi'],
139
+ rows: [
140
+ ['<strong>Alun (Swell)</strong>', 'Mengurangi air di bawah lambung', 'Tingkatkan margin keamanan secara signifikan'],
141
+ ['<strong>Efek Squat</strong>', 'Meningkatkan draf melalui hisapan', 'Kurangi kecepatan di area kritis'],
142
+ ['<strong>Dasar berpasir</strong>', 'Kedalaman variabel karena badai', 'Aktifkan perum gema (sounder) dan margin ekstra'],
143
+ ],
144
+ },
145
+ {
146
+ type: 'tip',
147
+ title: 'Tips Navigasi',
148
+ html: 'Jika jendela lintasan Anda sangat sempit atau cuaca memburuk, keputusan paling bijaksana biasanya adalah menunggu di perairan dalam sampai pasang naik ke ketinggian yang dibutuhkan.',
149
+ },
150
+ ];
151
+
152
+ const schemas: UnderKeelLocaleContent['schemas'] = [
153
+ {
154
+ '@context': 'https://schema.org',
155
+ '@type': 'SoftwareApplication',
156
+ name: title,
157
+ description,
158
+ applicationCategory: 'UtilityApplication',
159
+ operatingSystem: 'Web',
160
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
161
+ } as WithContext<SoftwareApplication>,
162
+ {
163
+ '@context': 'https://schema.org',
164
+ '@type': 'FAQPage',
165
+ mainEntity: faq.map((item) => ({
166
+ '@type': 'Question',
167
+ name: item.question,
168
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
169
+ })),
170
+ } as WithContext<FAQPage>,
171
+ {
172
+ '@context': 'https://schema.org',
173
+ '@type': 'HowTo',
174
+ name: `Cara menggunakan: ${title}`,
175
+ step: howTo.map((s) => ({ '@type': 'HowToStep', name: s.name, text: s.text })),
176
+ } as WithContext<HowTo>,
177
+ ];
178
+
179
+ export const content: UnderKeelLocaleContent = {
180
+ slug,
181
+ title,
182
+ description,
183
+ ui,
184
+ seo,
185
+ faq,
186
+ bibliography,
187
+ howTo,
188
+ schemas,
189
+ };
@@ -0,0 +1,176 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { UnderKeelUI, UnderKeelLocaleContent } from '../index';
3
+
4
+ const slug = 'ukc-calcolatore';
5
+ const title = 'Calcolatore del Franchezza Sotto la Chiglia UKC';
6
+ const description =
7
+ 'Calcola la finestra temporale sicura per attraversare secche, canali o punti con pescaggio limitato. Inserisci il pescaggio della barca, la profondità della carta e i dati di marea.';
8
+
9
+ const ui: UnderKeelUI = {
10
+ parametersLabel: 'Parametri',
11
+ boatDraftLabel: 'Pescaggio della Barca',
12
+ chartDepthLabel: 'Profondità della Carta',
13
+ safetyMarginLabel: 'Margine di Sicurezza',
14
+ highTideLabel: 'Alta Marea',
15
+ lowTideLabel: 'Bassa Marea',
16
+ metersLabel: 'metri',
17
+ passWindowLabel: 'Finestra di Transito',
18
+ neededLabel: 'Profondità necessaria',
19
+ tideRequiredLabel: 'Marea minima richiesta',
20
+ statusNeverLabel: 'Nessuna franchezza in questo ciclo',
21
+ statusAlwaysLabel: 'Transito possibile in tutto il ciclo',
22
+ statusFromLabel: 'Transito dalle:',
23
+ statusUntilLabel: 'Transito fino alle:',
24
+ bottomLabel: 'FONDALE',
25
+ faqTitle: 'Domande Frequenti',
26
+ bibliographyTitle: 'Bibliografia',
27
+ };
28
+
29
+ const faq: UnderKeelLocaleContent['faq'] = [
30
+ {
31
+ question: 'Cos\'è esattamente il calcolo della franchezza sotto la chiglia?',
32
+ answer: 'È il calcolo del momento in cui c\'è una profondità sufficiente in un punto critico (come una secca o un canale stretto) per consentire il transito sicuro di una nave in base al suo pescaggio.',
33
+ },
34
+ {
35
+ question: 'Quanto margine di sicurezza è raccomandato?',
36
+ answer: 'Per le imbarcazioni da diporto, di solito si raccomanda un margine di sicurezza minimo compreso tra 0,5 e 1 metro sopra il pescaggio della barca. Questo margine compensa possibili errori nei calcoli di marea o variazioni della pressione atmosferica.',
37
+ },
38
+ {
39
+ question: 'In che modo il moto ondoso influisce sulla franchezza?',
40
+ answer: 'Il moto ondoso genera oscillazioni verticali nello scafo. Nel punto più basso dell\'onda, la barca è più vicina al fondo rispetto a quando è a riposo. Quando si attraversano aree con moto ondoso, il margine deve essere aumentato.',
41
+ },
42
+ {
43
+ question: 'Cosa si intende per profondità della carta?',
44
+ answer: 'È la profondità minima in un punto quando la marea è al Chart Datum. Viene sommata all\'altezza della marea in quel momento per dare la profondità totale disponibile.',
45
+ },
46
+ {
47
+ question: 'Cosa significa un valore sottolineato sulla carta nautica?',
48
+ answer: 'Significa che quel punto emerge quando la marea è al Chart Datum. Avrai bisogno di un\'altezza di marea maggiore per poterlo attraversare.',
49
+ },
50
+ {
51
+ question: 'Cos\'è l\'effetto Squat?',
52
+ answer: 'È un fenomeno idrodinamico per cui una nave che naviga in canali poco profondi tende ad abbassarsi rispetto alla sua linea di galleggiamento. Più velocemente procedi, meno acqua hai sotto la chiglia.',
53
+ },
54
+ ];
55
+
56
+ const howTo: UnderKeelLocaleContent['howTo'] = [
57
+ {
58
+ name: 'Definisci pescaggio e margine',
59
+ text: 'Misura il pescaggio della tua barca nel suo punto massimo e aggiungi un margine di sicurezza prudente (es. 0,5 m).',
60
+ },
61
+ {
62
+ name: 'Cerca la profondità sulla carta',
63
+ text: 'Trova il valore del fondale per il punto critico dove navigherai. Nota se si tratta di un\'area sabbiosa o rocciosa.',
64
+ },
65
+ {
66
+ name: 'Inserisci i dati di marea',
67
+ text: 'Usa gli orari e le altezze dell\'alta e bassa marea dall\'almanacco ufficiale più vicino.',
68
+ },
69
+ {
70
+ name: 'Verifica la tua finestra di transito',
71
+ text: 'Lo strumento mostrerà l\'intervallo di tempo esatto in cui avrai profondità sufficiente per navigare in sicurezza.',
72
+ },
73
+ ];
74
+
75
+ const bibliography: UnderKeelLocaleContent['bibliography'] = [
76
+ {
77
+ name: 'Ministerio de Transportes - Recreational Boating',
78
+ url: 'https://www.mitma.gob.es/marina-mercante/nautica-de-recreo/',
79
+ },
80
+ {
81
+ name: 'Portos de Galicia - Tide Tables',
82
+ url: 'https://portosdegalicia.gal/es/taboa-de-mareas',
83
+ },
84
+ ];
85
+
86
+ const seo: UnderKeelLocaleContent['seo'] = [
87
+ {
88
+ type: 'title',
89
+ text: 'Franchezza Sotto la Chiglia: Navigare in Sicurezza sulle Secche',
90
+ level: 2,
91
+ },
92
+ {
93
+ type: 'paragraph',
94
+ html: 'La pianificazione di una rotta non finisce con il tracciamento di un corso sulla carta. Per il navigatore costiero, uno dei calcoli più critici è la <strong>franchezza sotto la chiglia</strong>: sapere a che ora ci sarà abbastanza profondità per attraversare un punto critico senza incagliarsi.',
95
+ },
96
+ {
97
+ type: 'title',
98
+ text: 'Profondità della carta e marea',
99
+ level: 3,
100
+ },
101
+ {
102
+ type: 'paragraph',
103
+ html: 'Sulle carte nautiche, le profondità sono riferite al <strong>Chart Datum</strong>. La profondità reale che la tua barca troverà in ogni momento è la somma di quel valore più l\'altezza della marea in quell\'istante.',
104
+ },
105
+ {
106
+ type: 'title',
107
+ text: 'Gli elementi del calcolo: Pescaggio e Margine',
108
+ level: 3,
109
+ },
110
+ {
111
+ type: 'list',
112
+ items: [
113
+ { term: 'Pescaggio massimo a carico', definition: 'La profondità raggiunta dal punto più basso della barca (la chiglia) a pieno carico.' },
114
+ { term: 'Profondità della carta', definition: 'Il numero sulla carta nautica per il punto che desideri attraversare.' },
115
+ { term: 'Margine di sicurezza', definition: 'Spazio libero aggiuntivo di almeno 0,5 - 1 metro sopra il pescaggio.' },
116
+ ],
117
+ },
118
+ {
119
+ type: 'title',
120
+ text: 'Fattori che influenzano la franchezza',
121
+ level: 3,
122
+ },
123
+ {
124
+ type: 'table',
125
+ headers: ['Fattore', 'Effetto', 'Raccomandazione'],
126
+ rows: [
127
+ ['<strong>Onda</strong>', 'Riduce l\'acqua sotto lo scafo', 'Aumenta significativamente il margine di sicurezza'],
128
+ ['<strong>Effetto Squat</strong>', 'Aumenta il pescaggio per suzione', 'Riduci la velocità nelle aree critiche'],
129
+ ['<strong>Fondale sabbioso</strong>', 'Profondità variabile con le tempeste', 'Mantieni attivo l\'ecoscandaglio'],
130
+ ],
131
+ },
132
+ {
133
+ type: 'tip',
134
+ title: 'Consiglio di Navigazione',
135
+ html: 'Se la tua finestra di transito è molto stretta o il tempo peggiora, la decisione più saggia è aspettare finché la marea non sale.',
136
+ },
137
+ ];
138
+
139
+ const schemas: UnderKeelLocaleContent['schemas'] = [
140
+ {
141
+ '@context': 'https://schema.org',
142
+ '@type': 'SoftwareApplication',
143
+ name: title,
144
+ description,
145
+ applicationCategory: 'UtilityApplication',
146
+ operatingSystem: 'Web',
147
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
148
+ } as WithContext<SoftwareApplication>,
149
+ {
150
+ '@context': 'https://schema.org',
151
+ '@type': 'FAQPage',
152
+ mainEntity: faq.map((item) => ({
153
+ '@type': 'Question',
154
+ name: item.question,
155
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
156
+ })),
157
+ } as WithContext<FAQPage>,
158
+ {
159
+ '@context': 'https://schema.org',
160
+ '@type': 'HowTo',
161
+ name: `Come usare: ${title}`,
162
+ step: howTo.map((s) => ({ '@type': 'HowToStep', name: s.name, text: s.text })),
163
+ } as WithContext<HowTo>,
164
+ ];
165
+
166
+ export const content: UnderKeelLocaleContent = {
167
+ slug,
168
+ title,
169
+ description,
170
+ ui,
171
+ seo,
172
+ faq,
173
+ bibliography,
174
+ howTo,
175
+ schemas,
176
+ };