@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,239 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { NauticalConverterUI, NauticalConverterLocaleContent } from '../index';
3
+
4
+ const slug = 'birim-donusturucu';
5
+ const title = 'Denizcilik Birim Dönüştürücü';
6
+ const description =
7
+ 'Deniz mili, knot, kulaç ve atmosferik basınç birimlerini dönüştürün. Rüzgar hızı için etkileşimli Beaufort ölçeğini içerir.';
8
+
9
+ const ui: NauticalConverterUI = {
10
+ distanceCategoryLabel: 'Mesafe',
11
+ speedCategoryLabel: 'Hız',
12
+ depthCategoryLabel: 'Derinlik',
13
+ pressureCategoryLabel: 'Basınç',
14
+ nmLabel: 'Deniz Mili (nm)',
15
+ kmLabel: 'Kilometre (km)',
16
+ miLabel: 'Kara Mili (mi)',
17
+ cableLabel: 'Pusula Kablosu (Cable)',
18
+ knLabel: 'Knot (kn)',
19
+ kmhLabel: 'km/s',
20
+ msLabel: 'm/s',
21
+ mphLabel: 'mph',
22
+ brozaLabel: 'Kulaç',
23
+ mLabel: 'Metre (m)',
24
+ ftLabel: 'Ayak (ft)',
25
+ mbarLabel: 'Milibar (mbar)',
26
+ mmhgLabel: 'mmHg',
27
+ inhgLabel: 'inHg',
28
+ atmLabel: 'Atmosfer (atm)',
29
+ windSeaLabel: 'Deniz durumu',
30
+ forceLabel: 'Kuvvet',
31
+ effectLabel: 'Etki',
32
+ copyLabel: 'Değeri kopyala',
33
+ faqTitle: 'Sıkça Sorulan Sorular',
34
+ bibliographyTitle: 'Kaynakça',
35
+ };
36
+
37
+ const faq: NauticalConverterLocaleContent['faq'] = [
38
+ {
39
+ question: 'Bir deniz mili kaç kilometredir?',
40
+ answer: 'Bir deniz mili tam olarak 1,852 kilometreye veya 1852 metreye eşittir. Bu ölçüm, Dünya yüzeyindeki bir enlem dakikasına karşılık gelir.',
41
+ },
42
+ {
43
+ question: 'Knot ile saatteki kilometre arasındaki fark nedir?',
44
+ answer: 'Bir knot saatte bir deniz mili olduğu için 1,852 km/s\'ye eşittir. Knot birimini km/s\'ye çevirmek için 1,852 ile çarpmanız yeterlidir.',
45
+ },
46
+ {
47
+ question: 'Neden denizde kilometre yerine deniz mili kullanılır?',
48
+ answer: 'Çünkü bir deniz mili bir enlem dakikasına karşılık gelir; bu da harita ve pusula ile yapılan seyir hesaplamalarını büyük ölçüde basitleştirir. Enlemdeki bir dakikalık değişim, tam olarak bir deniz miline eşittir.',
49
+ },
50
+ {
51
+ question: 'Beaufort ölçeği nedir?',
52
+ answer: 'Rüzgar hızını deniz üzerindeki gözlemlenebilir etkilerle ilişkilendiren ampirik bir ölçektir. 0 (süt liman) ile 12 (kasırga) arasında değişir; kıyı ve açık deniz seyri için temeldir.',
53
+ },
54
+ {
55
+ question: 'Deniz meteorolojisinde hangi basınç birimi kullanılır?',
56
+ answer: 'Deniz meteorolojisinde temel olarak milibar (mbar) veya eşdeğeri olan hektopaskal (hPa) kullanılır. Deniz seviyesindeki normal atmosferik basınç 1013,25 mbar\'dır.',
57
+ },
58
+ {
59
+ question: 'Bir kulaç kaç ayaktır (ft)?',
60
+ answer: 'Bir kulaç tam olarak 6 ayağa, yani 1,8288 metreye eşittir. Temel olarak İngilizce konuşulan ülkelerde eski deniz haritalarındaki derinlikleri ifade etmek için kullanılır.',
61
+ },
62
+ ];
63
+
64
+ const howTo: NauticalConverterLocaleContent['howTo'] = [
65
+ {
66
+ name: 'Dönüştürme kategorisini seçin',
67
+ text: 'Dönüştürmek istediğiniz büyüklüğe göre dört sekmeden birine tıklayın: Mesafe, Hız, Derinlik veya Basınç.',
68
+ },
69
+ {
70
+ name: 'Herhangi bir alana değeri girin',
71
+ text: 'Bildiğiniz birimdeki sayıyı yazın. Diğer tüm birimler gerçek zamanlı olarak otomatik olarak güncellenecektir.',
72
+ },
73
+ {
74
+ name: 'Beaufort ölçeğine bakın (hız)',
75
+ text: 'Hız sekmesine bir hız girdiğinizde, ilgili Beaufort kuvvetini ve beklenen deniz durumunu gösteren bir kart belirecektir.',
76
+ },
77
+ {
78
+ name: 'Sonucu kopyalayın',
79
+ text: 'Değeri panoya kopyalamak için herhangi bir alanın yanındaki kopyala düğmesini kullanın.',
80
+ },
81
+ ];
82
+
83
+ const bibliography: NauticalConverterLocaleContent['bibliography'] = [
84
+ {
85
+ name: 'Instituto Hidrografico de la Marina',
86
+ url: 'https://armada.defensa.gob.es/ihm/',
87
+ },
88
+ {
89
+ name: 'NOAA - National Weather Service',
90
+ url: 'https://www.weather.gov/mfl/beaufort',
91
+ },
92
+ ];
93
+
94
+ const seo: NauticalConverterLocaleContent['seo'] = [
95
+ {
96
+ type: 'title',
97
+ text: 'Denizcilik birimlerinde hassasiyetin önemi',
98
+ level: 2,
99
+ },
100
+ {
101
+ type: 'paragraph',
102
+ html: 'Denizde seyir yapmak, yüzyıllar süren deniz araştırmalarıyla rafine edilmiş kendine has bir dil, bir ölçüm sistemi gerektirir. Denizcilik birimleri tarihsel bir tuhaflık değil, Dünya\'nın geometrisi ve denizcinin pratik ihtiyaçlarıyla uyumlu, matematiksel olarak tutarlı araçlardır.',
103
+ },
104
+ {
105
+ type: 'paragraph',
106
+ html: 'Birkaç metrelik hatanın nadiren ciddi sonuçlar doğurduğu karanın aksine, denizde yanlış bir dönüştürme, güvenli bir yerde demirlemek ile bir sığlıkta karaya oturmak arasındaki fark anlamına gelebilir. Birimlerdeki hassasiyet akademik bir mesele değildir: seyirin kendisidir.',
107
+ },
108
+ {
109
+ type: 'paragraph',
110
+ html: 'Kıyıdan uzaklaştığımızda, görsel referansların eksikliği, hesaplanan konumu üzerinde hareket edebileceğimiz tek gerçeklik haline getirir. Deniz mili, kilometre, knot ve metre arasında doğru dönüştürme yapmayı bilmek, sorumlu denizci için bir seçenek değil, zorunluluktur.',
111
+ },
112
+ {
113
+ type: 'title',
114
+ text: 'Neden kilometre yerine deniz mili kullanıyoruz?',
115
+ level: 3,
116
+ },
117
+ {
118
+ type: 'paragraph',
119
+ html: 'Cevap, Dünya\'nın kendi şeklinde yatar. Bir <strong>deniz mili</strong> Dünya yüzeyindeki tam olarak bir enlem dakikasına, yani 1852 metreye eşittir. Açısal ölçüm ile doğrusal mesafe arasındaki bu doğrudan uygunluk, seyrüseferdeki evrensel kullanımının anahtarıdır.',
120
+ },
121
+ {
122
+ type: 'paragraph',
123
+ html: 'Bu birimi kullanarak, bir deniz haritasındaki enlemdeki bir dakikalık değişim, her zaman kat edilen tam olarak bir deniz miline karşılık gelir. Bu durum; ek dönüştürme katsayılarına ihtiyaç duymadan konum, hız ve varış süresi hesaplamalarını muazzam derecede basitleştirir.',
124
+ },
125
+ {
126
+ type: 'title',
127
+ text: 'Denizde hız: Knot',
128
+ level: 3,
129
+ },
130
+ {
131
+ type: 'paragraph',
132
+ html: '<strong>Knot</strong>, saatte bir deniz miline eşit olan hız birimidir. Adı, düzenli aralıklarla düğümler (knots) atılmış bir ipe bağlı tahta parçasının suya atılması ve sabit bir sürede parmakların arasından kaç düğümün geçtiğinin sayılmasıyla hızı ölçen eski bir teknikten gelmektedir.',
133
+ },
134
+ {
135
+ type: 'paragraph',
136
+ html: 'Bugün GPS uyduları ve sofistike elektronik sistemler kullansak da, knot uluslararası havacılık ve deniz navigasyonunda standart birim olmaya devam etmektedir. Bir knot 1,852 km/s veya 0,514 m/sn\'ye eşittir.',
137
+ },
138
+ {
139
+ type: 'title',
140
+ text: 'Derinlik ve demirleme: Kulaç, Metre ve Ayak',
141
+ level: 3,
142
+ },
143
+ {
144
+ type: 'paragraph',
145
+ html: 'Denizcilik dünyasında derinlik sadece bir istatistik değildir: güvenli bir demirleme yeri ile karaya oturma arasındaki farktır. Tarihsel olarak <strong>kulaç</strong> (1,8288 metre veya tam olarak 6 ayak), İngilizce konuşulan dünyada derinlikleri ölçmek için baskın birimdi.',
146
+ },
147
+ {
148
+ type: 'paragraph',
149
+ html: 'Ancak küreselleşme ve teknoloji, çoğu modern haritada ve sonar cihazında metre kullanımını standart hale getirmiştir. Modern denizci, özellikle eski haritalara veya İngiliz ölçü birimlerine göre kalibre edilmiş aletlere bakarken kulaç, metre ve ayak birimleri arasında rahatça geçiş yapabilmelidir.',
150
+ },
151
+ {
152
+ type: 'title',
153
+ text: 'Meteoroloji ve Atmosferik Basınç',
154
+ level: 3,
155
+ },
156
+ {
157
+ type: 'paragraph',
158
+ html: 'Bir kaptan için barometre hava durumunun kahinidir. <strong>Milibar</strong> (mbar) cinsinden ölçülen atmosferik basınç, yaklaşan hava değişikliklerinin en güvenilir göstergesidir. Basınçtaki hızlı düşüş, şiddetli rüzgarların ve kötü havanın habercisidir.',
159
+ },
160
+ {
161
+ type: 'paragraph',
162
+ html: 'Basınç değişimlerini anlamak her denizci için hayati önem taşır. Deniz seviyesindeki normal atmosferik basınç 1013,25 mbar\'dır (bir atmosfer). Daha yüksek değerler istikrarlı havayı gösterirken, daha düşük değerler, özellikle hızla düşüyorsa, potansiyel olarak tehlikeli alçak basınç sistemlerinin yaklaştığına işaret eder.',
163
+ },
164
+ {
165
+ type: 'title',
166
+ text: 'Rüzgar ve Deniz Ölçekleri: Beaufort\'tan Douglas\'a',
167
+ level: 3,
168
+ },
169
+ {
170
+ type: 'paragraph',
171
+ html: 'Knot cinsinden rüzgar hızı, <strong>Beaufort ölçeği</strong> ile ilişkilendirildiğinde anlam kazanan bir sayıdır. 1805 yılında İngiliz Amiral Francis Beaufort tarafından geliştirilen bu ampirik ölçek, rüzgar hızını hem deniz yüzeyindeki hem de karadaki gözlemlenebilir etkilerle ilişkilendirir.',
172
+ },
173
+ {
174
+ type: 'list',
175
+ items: [
176
+ '<strong>Kuvvet 0-3 (0-10 kn):</strong> Sakin seyir koşulları, öğrenmek veya aile gezileri için ideal.',
177
+ '<strong>Kuvvet 4-5 (11-21 kn):</strong> Yatlar için ideal yelken rüzgarı, orta dalgalar ve beyaz köpükler.',
178
+ '<strong>Kuvvet 6-7 (22-33 kn):</strong> Sert rüzgardan fırtınamsı rüzgara. Deneyim ve camadan vurma (reefing) önerilir.',
179
+ '<strong>Kuvvet 8+ (34 kn üzeri):</strong> Fırtına. Sadece uygun teknelere sahip deneyimli denizciler için.',
180
+ ],
181
+ },
182
+ {
183
+ type: 'paragraph',
184
+ html: 'Benzer şekilde, Douglas ölçeği deniz durumunu 0\'dan (çarşaf gibi) 9\'a (olağanüstü) kadar derecelendirerek denizcinin hava raporlarına dayanarak ufkun ötesindeki koşulları tahmin etmesine olanak tanır.',
185
+ },
186
+ {
187
+ type: 'tip',
188
+ title: 'Güvenlik İpucu',
189
+ html: 'Bir seyahat planlamak için bu dönüştürücüyü kullanırken, gerçek koşulların tahminlerden farklı olabileceğini her zaman göz önünde bulundurun. Resmi hava durumu tahminlerine danışın ve denizin hızla değişme kapasitesini asla hafife almayın.',
190
+ },
191
+ {
192
+ type: 'title',
193
+ text: 'Çevrimdışı planlama ve hareket kabiliyeti',
194
+ level: 3,
195
+ },
196
+ {
197
+ type: 'paragraph',
198
+ html: 'Bu araç, tarayıcıya yüklendikten sonra internet bağlantısı olmadan çalışacak şekilde tasarlanmıştır; bu da onu bağlantının sınırlı olabileceği teknede kullanım için ideal kılar. Tüm dönüştürmeler, sunucuya veri göndermeden cihaz üzerinde yerel olarak hesaplanır.',
199
+ },
200
+ ];
201
+
202
+ const schemas: NauticalConverterLocaleContent['schemas'] = [
203
+ {
204
+ '@context': 'https://schema.org',
205
+ '@type': 'SoftwareApplication',
206
+ name: title,
207
+ description,
208
+ applicationCategory: 'UtilityApplication',
209
+ operatingSystem: 'Web',
210
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
211
+ } as WithContext<SoftwareApplication>,
212
+ {
213
+ '@context': 'https://schema.org',
214
+ '@type': 'FAQPage',
215
+ mainEntity: faq.map((item) => ({
216
+ '@type': 'Question',
217
+ name: item.question,
218
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
219
+ })),
220
+ } as WithContext<FAQPage>,
221
+ {
222
+ '@context': 'https://schema.org',
223
+ '@type': 'HowTo',
224
+ name: `Nasıl kullanılır: ${title}`,
225
+ step: howTo.map((s) => ({ '@type': 'HowToStep', name: s.name, text: s.text })),
226
+ } as WithContext<HowTo>,
227
+ ];
228
+
229
+ export const content: NauticalConverterLocaleContent = {
230
+ slug,
231
+ title,
232
+ description,
233
+ ui,
234
+ seo,
235
+ faq,
236
+ bibliography,
237
+ howTo,
238
+ schemas,
239
+ };
@@ -0,0 +1,239 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { NauticalConverterUI, NauticalConverterLocaleContent } from '../index';
3
+
4
+ const slug = 'nautical-units-converter';
5
+ const title = '航海单位换算器';
6
+ const description =
7
+ '换算海里、节、英寻和大气压力。包含针对风速的交互式蒲福风级。';
8
+
9
+ const ui: NauticalConverterUI = {
10
+ distanceCategoryLabel: '距离',
11
+ speedCategoryLabel: '速度',
12
+ depthCategoryLabel: '深度',
13
+ pressureCategoryLabel: '压力',
14
+ nmLabel: '海里 (nm)',
15
+ kmLabel: '千米 (km)',
16
+ miLabel: '英里 (mi)',
17
+ cableLabel: '链',
18
+ knLabel: '节 (kn)',
19
+ kmhLabel: 'km/h',
20
+ msLabel: 'm/s',
21
+ mphLabel: 'mph',
22
+ brozaLabel: '英寻',
23
+ mLabel: '米 (m)',
24
+ ftLabel: '英尺 (ft)',
25
+ mbarLabel: '毫巴 (mbar)',
26
+ mmhgLabel: 'mmHg',
27
+ inhgLabel: 'inHg',
28
+ atmLabel: '标准大气压 (atm)',
29
+ windSeaLabel: '海况',
30
+ forceLabel: '风力',
31
+ effectLabel: '影响',
32
+ copyLabel: '复制数值',
33
+ faqTitle: '常见问题',
34
+ bibliographyTitle: '参考文献',
35
+ };
36
+
37
+ const faq: NauticalConverterLocaleContent['faq'] = [
38
+ {
39
+ question: '一海里是多少千米?',
40
+ answer: '一海里正好等于1.852千米,即1852米。该度量对应于地球表面纬度的一分弧长。',
41
+ },
42
+ {
43
+ question: '节和千米每小时有什么区别?',
44
+ answer: '一节等于1.852 km/h,因为一节即为每小时一海里。若要将节换算为千米每小时,只需乘以1.852即可。',
45
+ },
46
+ {
47
+ question: '为什么在海上使用海里而不是千米?',
48
+ answer: '因为一海里对应于纬度的一分弧长,这极大简化了使用海图和指南针进行的航法计算。纬度变化一分正好等于移动了一海里。',
49
+ },
50
+ {
51
+ question: '什么是蒲福风级?',
52
+ answer: '这是一种根据在海面上观察到的影响来关联风速的经验性等级。范围从0(无风)到12(飓风),对于近海和远洋航行至关重要。',
53
+ },
54
+ {
55
+ question: '海洋气象中使用什么压力单位?',
56
+ answer: '海洋气象主要使用毫巴 (mbar) 或其等效单位百帕 (hPa)。海平面的正常大气压为1013.25 mbar。',
57
+ },
58
+ {
59
+ question: '一英寻是多少英尺?',
60
+ answer: '一英寻正好等于6英尺,即1.8288米。主要在英语国家使用,用于在旧版海图上表示深度。',
61
+ },
62
+ ];
63
+
64
+ const howTo: NauticalConverterLocaleContent['howTo'] = [
65
+ {
66
+ name: '选择换算类别',
67
+ text: '根据您想要换算的物理量,点击四个标签页之一:距离、速度、深度或压力。',
68
+ },
69
+ {
70
+ name: '在任意字段中输入数值',
71
+ text: '在您已知的单位字段中输入数字。所有其他单位将实时自动更新。',
72
+ },
73
+ {
74
+ name: '参考蒲福风级(速度)',
75
+ text: '当您在“速度”标签页中输入速度时,会出现一张卡片,显示相应的蒲福风级和预期的海况。',
76
+ },
77
+ {
78
+ name: '复制结果',
79
+ text: '使用任何字段旁边的复制按钮将数值复制到剪贴板。',
80
+ },
81
+ ];
82
+
83
+ const bibliography: NauticalConverterLocaleContent['bibliography'] = [
84
+ {
85
+ name: 'Instituto Hidrografico de la Marina',
86
+ url: 'https://armada.defensa.gob.es/ihm/',
87
+ },
88
+ {
89
+ name: 'NOAA - National Weather Service',
90
+ url: 'https://www.weather.gov/mfl/beaufort',
91
+ },
92
+ ];
93
+
94
+ const seo: NauticalConverterLocaleContent['seo'] = [
95
+ {
96
+ type: 'title',
97
+ text: '航海单位精确度的重要性',
98
+ level: 2,
99
+ },
100
+ {
101
+ type: 'paragraph',
102
+ html: '海上航行需要一套属于自己的语言,一套在几个世纪的航海探索中不断完善的度量体系。航海单位并不是一种历史怪癖,而是与地球几何形状和航海者实际需求相一致的数学逻辑工具。',
103
+ },
104
+ {
105
+ type: 'paragraph',
106
+ html: '与陆地不同,陆地上几米的误差很少会导致严重后果,而在海上,一次错误的换算可能意味着安全锚泊。单位的精确度不仅仅是一个学术问题:它关乎航行本身。',
107
+ },
108
+ {
109
+ type: 'paragraph',
110
+ html: '当我们远离海岸线时,缺乏视觉参考使得计算出的位置成为我们唯一可以采取行动的依据。对于负责任的航海者来说,了解如何在海里、千米、节和米之间进行准确换算不是可选项。',
111
+ },
112
+ {
113
+ type: 'title',
114
+ text: '为什么我们使用海里而不是千米?',
115
+ level: 3,
116
+ },
117
+ {
118
+ type: 'paragraph',
119
+ html: '答案在于地球本身的形状。一<strong>海里</strong>正好等于地球表面纬度的一分弧长,即1852米。角度测量与线性距离之间的这种直接对应关系是在航海中普遍使用它的关键。',
120
+ },
121
+ {
122
+ type: 'paragraph',
123
+ html: '使用这个单位,海图上纬度的一分变化总是正好对应于行驶的一海里。这极大简化了在不需要额外换算系数的情况下对位置、速度和到达时间的计算。',
124
+ },
125
+ {
126
+ type: 'title',
127
+ text: '海上速度:节',
128
+ level: 3,
129
+ },
130
+ {
131
+ type: 'paragraph',
132
+ html: '<strong>节</strong>是相当于每小时一海里的速度单位。它的名字源于古代测量速度的技术:将一块系在绳子上的木片投入水中,绳子上打有等间距的结(节),统计在固定时间内有多少个结穿过手指。',
133
+ },
134
+ {
135
+ type: 'paragraph',
136
+ html: '如今,虽然我们使用 GPS 卫星和先进的电子系统,但“节”仍然是国际航空和航海中的标准单位。一节等于 1.852 km/h 或 0.514 m/s。',
137
+ },
138
+ {
139
+ type: 'title',
140
+ text: '深度与锚泊:英寻、米与英尺',
141
+ level: 3,
142
+ },
143
+ {
144
+ type: 'paragraph',
145
+ html: '在航海世界里,深度不仅仅是一个统计数据:它是安全锚泊与搁浅之间的界限。从历史上看,<strong>英寻</strong>(1.8288 米或正好 6 英尺)是英语世界测量深度的主要单位。',
146
+ },
147
+ {
148
+ type: 'paragraph',
149
+ html: '然而,全球化和技术进步使得大多数现代海图和回声测深仪已经常态化地使用“米”。现代航海者必须能够熟练地在英寻、米和英尺之间切换,尤其是在查阅旧海图或标定为英制单位的仪器时。',
150
+ },
151
+ {
152
+ type: 'title',
153
+ text: '气象与大气压力',
154
+ level: 3,
155
+ },
156
+ {
157
+ type: 'paragraph',
158
+ html: '对于船长来说,气压计是天气的神谕。以<strong>毫巴</strong> (mbar) 为单位测量的大气压力是预测天气变化最可靠的指标。气压快速下降预示着强风和恶劣天气的到来。',
159
+ },
160
+ {
161
+ type: 'paragraph',
162
+ html: '理解压力变化对任何航海者都至关重要。海平面的正常大气压为 1013.25 mbar(一个大气压)。较高的数值表示天气稳定,而较低的数值,尤其是快速下降时,则预示着可能存在危险的低压系统正在接近。',
163
+ },
164
+ {
165
+ type: 'title',
166
+ text: '风力与海况等级:从蒲福到道格拉斯',
167
+ level: 3,
168
+ },
169
+ {
170
+ type: 'paragraph',
171
+ html: '以节为单位的风速,在与<strong>蒲福风级</strong>相关联时才有了生命力。蒲福风级由英国海军上将弗朗西斯·蒲福于 1805 年开发,这种经验等级将风速与海面及陆地上可观察到的影响联系起来。',
172
+ },
173
+ {
174
+ type: 'list',
175
+ items: [
176
+ '<strong>0-3级 (0-10 kn):</strong> 这种海况非常平静,适合初学者或家庭出游。',
177
+ '<strong>4-5级 (11-21 kn):</strong> 是帆船航行的理想风力,有中浪和白色浪花。',
178
+ '<strong>6-7级 (22-33 kn):</strong> 属于大风至劲风状态。建议有经验者航行并进行收帆。',
179
+ '<strong>8级以上 (超过 34 kn):</strong> 狂风。仅限拥有合适船只的资深航海者。',
180
+ ],
181
+ },
182
+ {
183
+ type: 'paragraph',
184
+ html: '同样,道格拉斯浪级将海况分为从 0(平滑如镜)到 9(极其壮观且危险)的等级,允许航海者根据天气预报预测地平线之外的情况。',
185
+ },
186
+ {
187
+ type: 'tip',
188
+ title: '安全提示',
189
+ html: '使用此换算器规划行程时,请始终牢记实际情况可能与预测有所不同。请咨询官方天气预报,绝不要低估大海快速变化的能力。',
190
+ },
191
+ {
192
+ type: 'title',
193
+ text: '离线规划与移动性',
194
+ level: 3,
195
+ },
196
+ {
197
+ type: 'paragraph',
198
+ html: '该工具设计为在浏览器加载后即可离线工作,非常适合在网络受限的船上使用。所有换算都在设备本地计算,无需将任何数据发送到服务器。',
199
+ },
200
+ ];
201
+
202
+ const schemas: NauticalConverterLocaleContent['schemas'] = [
203
+ {
204
+ '@context': 'https://schema.org',
205
+ '@type': 'SoftwareApplication',
206
+ name: title,
207
+ description,
208
+ applicationCategory: 'UtilityApplication',
209
+ operatingSystem: 'Web',
210
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
211
+ } as WithContext<SoftwareApplication>,
212
+ {
213
+ '@context': 'https://schema.org',
214
+ '@type': 'FAQPage',
215
+ mainEntity: faq.map((item) => ({
216
+ '@type': 'Question',
217
+ name: item.question,
218
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
219
+ })),
220
+ } as WithContext<FAQPage>,
221
+ {
222
+ '@context': 'https://schema.org',
223
+ '@type': 'HowTo',
224
+ name: `使用方法: ${title}`,
225
+ step: howTo.map((s) => ({ '@type': 'HowToStep', name: s.name, text: s.text })),
226
+ } as WithContext<HowTo>,
227
+ ];
228
+
229
+ export const content: NauticalConverterLocaleContent = {
230
+ slug,
231
+ title,
232
+ description,
233
+ ui,
234
+ seo,
235
+ faq,
236
+ bibliography,
237
+ howTo,
238
+ schemas,
239
+ };
@@ -44,6 +44,18 @@ export const nauticalConverter: NauticalToolEntry<NauticalConverterUI> = {
44
44
  es: () => import('./i18n/es').then((m) => m.content),
45
45
  en: () => import('./i18n/en').then((m) => m.content),
46
46
  fr: () => import('./i18n/fr').then((m) => m.content),
47
+ de: () => import('./i18n/de').then((m) => m.content),
48
+ id: () => import('./i18n/id').then((m) => m.content),
49
+ it: () => import('./i18n/it').then((m) => m.content),
50
+ ja: () => import('./i18n/ja').then((m) => m.content),
51
+ ko: () => import('./i18n/ko').then((m) => m.content),
52
+ nl: () => import('./i18n/nl').then((m) => m.content),
53
+ pl: () => import('./i18n/pl').then((m) => m.content),
54
+ pt: () => import('./i18n/pt').then((m) => m.content),
55
+ ru: () => import('./i18n/ru').then((m) => m.content),
56
+ sv: () => import('./i18n/sv').then((m) => m.content),
57
+ tr: () => import('./i18n/tr').then((m) => m.content),
58
+ zh: () => import('./i18n/zh').then((m) => m.content),
47
59
  },
48
60
  };
49
61
 
@@ -373,7 +373,7 @@ const { ui } = Astro.props;
373
373
  function buildPdfHtml(): string {
374
374
  const date = new Date().toLocaleDateString();
375
375
  const header = `<div style="border-bottom:3px solid #003b73;padding-bottom:20px;margin-bottom:30px;display:flex;justify-content:space-between;align-items:flex-end;">
376
- <div><h1 style="margin:0;color:#003b73;font-size:28px;text-transform:uppercase;">Informe Tecnico de Superficie Velica</h1>
376
+ <div><h2 style="margin:0;color:#003b73;font-size:28px;text-transform:uppercase;">Informe Tecnico de Superficie Velica</h2>
377
377
  <p style="margin:5px 0 0;color:#666;font-size:14px;">Generado por jjlmoya.es • ${date}</p></div>
378
378
  <div style="text-align:right;"><span style="font-size:12px;font-weight:bold;color:#003b73;">VERSION PROFESIONAL</span></div>
379
379
  </div>`;