@jjlmoya/utils-nautical 1.22.0 → 1.24.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 (59) hide show
  1. package/package.json +2 -2
  2. package/src/category/i18n/en.ts +1 -1
  3. package/src/category/index.ts +2 -1
  4. package/src/data.ts +1 -0
  5. package/src/entries.ts +4 -1
  6. package/src/index.ts +1 -0
  7. package/src/layouts/PreviewLayout.astro +118 -118
  8. package/src/tests/bibliography_wellformed_export.test.ts +46 -0
  9. package/src/tests/category_seo_quality.test.ts +74 -0
  10. package/src/tests/faq_count.test.ts +30 -30
  11. package/src/tests/i18n_coverage.test.ts +6 -1
  12. package/src/tests/locale_completeness.test.ts +2 -2
  13. package/src/tests/no_h1_in_components.test.ts +1 -1
  14. package/src/tests/seo_length.test.ts +29 -29
  15. package/src/tests/seo_parity.test.ts +2 -2
  16. package/src/tests/seo_wellformed_export.test.ts +65 -0
  17. package/src/tests/spanish_leakage.test.ts +175 -175
  18. package/src/tests/tool_validation.test.ts +54 -51
  19. package/src/tool/endurance/i18n/fr.ts +205 -205
  20. package/src/tool/endurance/seo.astro +15 -15
  21. package/src/tool/hullSpeed/bibliography.astro +14 -0
  22. package/src/tool/hullSpeed/bibliography.ts +12 -0
  23. package/src/tool/hullSpeed/component.astro +116 -0
  24. package/src/tool/hullSpeed/controller.ts +204 -0
  25. package/src/tool/hullSpeed/dom-views.ts +141 -0
  26. package/src/tool/hullSpeed/entry.ts +32 -0
  27. package/src/tool/hullSpeed/evaluator.ts +20 -0
  28. package/src/tool/hullSpeed/hull-draw.ts +185 -0
  29. package/src/tool/hullSpeed/i18n/de.ts +199 -0
  30. package/src/tool/hullSpeed/i18n/en.ts +199 -0
  31. package/src/tool/hullSpeed/i18n/es.ts +199 -0
  32. package/src/tool/hullSpeed/i18n/fr.ts +199 -0
  33. package/src/tool/hullSpeed/i18n/id.ts +199 -0
  34. package/src/tool/hullSpeed/i18n/it.ts +199 -0
  35. package/src/tool/hullSpeed/i18n/ja.ts +199 -0
  36. package/src/tool/hullSpeed/i18n/ko.ts +199 -0
  37. package/src/tool/hullSpeed/i18n/nl.ts +199 -0
  38. package/src/tool/hullSpeed/i18n/pl.ts +199 -0
  39. package/src/tool/hullSpeed/i18n/pt.ts +199 -0
  40. package/src/tool/hullSpeed/i18n/ru.ts +199 -0
  41. package/src/tool/hullSpeed/i18n/sv.ts +199 -0
  42. package/src/tool/hullSpeed/i18n/tr.ts +199 -0
  43. package/src/tool/hullSpeed/i18n/zh.ts +199 -0
  44. package/src/tool/hullSpeed/index.ts +11 -0
  45. package/src/tool/hullSpeed/logic.test.ts +105 -0
  46. package/src/tool/hullSpeed/logic.ts +116 -0
  47. package/src/tool/hullSpeed/presets.ts +17 -0
  48. package/src/tool/hullSpeed/sailboat-hull-speed-calculator.css +504 -0
  49. package/src/tool/hullSpeed/seo.astro +15 -0
  50. package/src/tool/hullSpeed/storage.test.ts +23 -0
  51. package/src/tool/hullSpeed/storage.ts +65 -0
  52. package/src/tool/hullSpeed/ui.ts +43 -0
  53. package/src/tool/nauticalConverter/seo.astro +15 -15
  54. package/src/tool/sailArea/seo.astro +15 -15
  55. package/src/tool/speedConverter/i18n/fr.ts +259 -259
  56. package/src/tool/speedConverter/seo.astro +15 -15
  57. package/src/tool/tideCalculator/seo.astro +15 -15
  58. package/src/tool/underKeel/seo.astro +15 -15
  59. package/src/tools.ts +3 -0
@@ -0,0 +1,199 @@
1
+ import { bibliography } from '../bibliography';
2
+ import type { HullSpeedLocaleContent, HullSpeedUI } from '../index';
3
+ import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
4
+
5
+ const slug = 'skrovhastighet-kalkylator';
6
+ const title = 'Kalkylator för skrovhastighet';
7
+ const description =
8
+ 'Ta fram den teoretiska skrovhastigheten från vattenlinjelängden, jämför en logg och se när ett deplacements skrov klättrar i sin egen bogvåg.';
9
+
10
+ const ui: HullSpeedUI = {
11
+ metric: 'Metrisk',
12
+ imperial: 'Imperial',
13
+ unitGroup: 'Enheter',
14
+ sceneLabel: 'Vattenlinje och bogvåg',
15
+ hullSpeedLabel: 'Skrovhastighet',
16
+ knotsUnit: 'kn',
17
+ kmhUnit: 'km/h',
18
+ mphUnit: 'mph',
19
+ ratioLabel: 'S/L',
20
+ froudeLabel: 'Fr',
21
+ lwlLabelMetric: 'Vattenlinjelängd',
22
+ lwlLabelImperial: 'Vattenlinjelängd',
23
+ lwlUnitM: 'm',
24
+ lwlUnitFt: 'ft',
25
+ observedLabel: 'Logghastighet',
26
+ observedHint: 'Lämna 0 för att rita den teoretiska vågen. Skriv en logg för att se om du fortfarande sitter i gropen.',
27
+ stretchHint: 'Dra skrovet för att tänja vattenlinjen',
28
+ hullKindLabel: 'Skrovform',
29
+ displacement: 'Deplacement',
30
+ semi: 'Halvdeplacement',
31
+ planing: 'Planande',
32
+ boatsLabel: 'Exempelvattenlinjer',
33
+ dinghy: 'Jolle',
34
+ daysailer: 'Daysailer',
35
+ cruiser: 'Kryssare',
36
+ bluewater: 'Havs',
37
+ workboat: 'Arbetsbåt',
38
+ bandBelow: 'Fortfarande en kort våg',
39
+ bandNear: 'Nära vågbarriären',
40
+ bandAt: 'På bogvågen',
41
+ bandAbove: 'Försöker klättra vågen',
42
+ bandPlane: 'I planing, förbi skrovhastigheten',
43
+ planingNote:
44
+ 'Ett planande skrov kan lämna den här vågen bakom sig. Skrovhastighet är en referens, inte en vägg.',
45
+ displacementNote:
46
+ 'Ett deplacements skrov betalar dyrt när det hinner ikapp sitt eget kölvatten. Se det som ett praktiskt tak, inte ett GPS mål.',
47
+ semiNote:
48
+ 'Halvdeplacement kan gå lite förbi det klassiska talet med tillräcklig effekt, till priset av ett skarpt motståndshopp.',
49
+ waveLegend: 'Bogvåg',
50
+ waterLegend: 'Vattenlinje',
51
+ markLegend: 'Skrovhastighet',
52
+ faqTitle: 'Frågor om skrovhastighet',
53
+ bibliographyTitle: 'Källor',
54
+ };
55
+
56
+ const faq: HullSpeedLocaleContent['faq'] = [
57
+ {
58
+ question: 'Vad är skrovhastighet på en segelbåt?',
59
+ answer:
60
+ 'Det är farten där ett deplacements skrov går med en bogvåg ungefär lika lång som den egna vattenlinjen. I nautiska enheter skattas den som 1.34 gånger roten av vattenlinjelängden i fot. Det är en kritisk fart, inte ett hårt fysiskt stopp.',
61
+ },
62
+ {
63
+ question: 'Hur räknar man ut skrovhastighet?',
64
+ answer:
65
+ 'Räkna om vattenlinjen till fot, ta roten och multiplicera med 1.34 för att få knop. En vattenlinje på 10 m är ungefär 32.8 ft, alltså nära 7.7 kn. Samma punkt motsvarar ett Froude tal nära 0.40.',
66
+ },
67
+ {
68
+ question: 'Gäller skrovhastighet även planande båtar?',
69
+ answer:
70
+ 'Formeln beskriver fortfarande vågen skrovet skulle göra i deplacementsläge. Planande båtar och många halvdeplacement är byggda för att klättra över den vågen. Använd talet som referens och läs noten om skrovform.',
71
+ },
72
+ {
73
+ question: 'Ska jag använda vattenlinjelängd eller längd över allt?',
74
+ answer:
75
+ 'Använd längden i vattenlinjen (LWL), den nedsänkta längd som faktiskt gör vågen. Längd över allt, bogspröt och överhäng sätter inte våglängden. Mät LWL i vattnet, inte LOA från broschyren.',
76
+ },
77
+ ];
78
+
79
+ const howTo: HullSpeedLocaleContent['howTo'] = [
80
+ {
81
+ name: 'Tänj vattenlinjen',
82
+ text: 'Dra skrovet, flytta vattenlinjerälsen eller välj från jolle till arbetsbåt. Skrovhastighet är 1.34 gånger roten av den längden i fot.',
83
+ },
84
+ {
85
+ name: 'Välj skrovform',
86
+ text: 'Deplacement, halvdeplacement eller planande ändrar kölen och om båten kan klättra ur sin egen våg.',
87
+ },
88
+ {
89
+ name: 'Läs gropen',
90
+ text: 'Vid skrovhastighet sitter bog och aktervåg en vattenlinje isär och båten sitter i dalen. Det är barriären.',
91
+ },
92
+ {
93
+ name: 'Jämför en logg',
94
+ text: 'Ange fart genom vattnet. En kortare våg betyder att du fortfarande skjuter billigt. En längre våg betyder att du klättrar i gropen.',
95
+ },
96
+ ];
97
+
98
+ const seo: HullSpeedLocaleContent['seo'] = [
99
+ {
100
+ type: 'title',
101
+ text: 'Vad skrovhastigheten egentligen säger',
102
+ level: 2,
103
+ },
104
+ {
105
+ type: 'paragraph',
106
+ html: 'Ett deplacements skrov skjuter en våg från bog och en från akter. När de kammarna ligger ungefär en vattenlinje isär färdas båten med sitt eget kölvatten. Extra effekt hopar då mest vatten i stället för att köpa fart. Det tillståndet kallar seglare skrovhastighet.',
107
+ },
108
+ {
109
+ type: 'paragraph',
110
+ html: 'Kalkylatorn använder det vanliga amatörtalet 1.34 knop per rot av vattenlinjefot. Smala, långa skrov kan ligga lite högre, pråmar lägre. Se resultatet som ett streck att lära av och jämför en riktig logg.',
111
+ },
112
+ {
113
+ type: 'title',
114
+ text: 'Uträknade vattenlinjeexempel',
115
+ level: 2,
116
+ },
117
+ {
118
+ type: 'table',
119
+ headers: ['Vattenlinje', 'Skrovhastighet', 'Typisk båt'],
120
+ rows: [
121
+ ['4.2 m / 13.8 ft', '5.0 kn', 'Jolle'],
122
+ ['6.5 m / 21.3 ft', '6.2 kn', 'Daysailer'],
123
+ ['10 m / 32.8 ft', '7.7 kn', 'Familjekryssare'],
124
+ ['13.5 m / 44.3 ft', '8.9 kn', 'Havsyacht'],
125
+ ['18 m / 59.1 ft', '10.3 kn', 'Liten arbetsbåt'],
126
+ ],
127
+ },
128
+ {
129
+ type: 'title',
130
+ text: 'Så läser du bogvågen',
131
+ level: 2,
132
+ },
133
+ {
134
+ type: 'list',
135
+ items: [
136
+ 'Under märket är vågen kort och båten fortfarande billig att driva.',
137
+ 'Nära märket blir bogvågen brantare och bränsle eller segel köper mindre fart.',
138
+ 'På märket matchar våglängden LWL. Ett deplacements skrov står vid den klassiska barriären.',
139
+ 'Ovanför klättrar ett deplacements skrov i sitt kölvatten. Ett planande kan redan vara uppe.',
140
+ ],
141
+ },
142
+ {
143
+ type: 'tip',
144
+ title: 'Mät LWL, inte LOA',
145
+ html: 'Broschyrlängden räknar in överhäng. Vågen bryr sig om den nedsänkta vattenlinjen. Har du bara LOA blir den beräknade skrovhastigheten för optimistisk.',
146
+ },
147
+ {
148
+ type: 'title',
149
+ text: 'Froude talet i en mening',
150
+ level: 2,
151
+ },
152
+ {
153
+ type: 'paragraph',
154
+ html: 'Skrovhastighet är en bekväm förpackning av ett Froude tal nära 0.40: fart delat med roten av gravitation gånger längd. Därför är längre vattenlinjer snabbare även när skrovformen är densamma. Att tänja LWL höjer deplacementsgränsen rent; fler hästkrafter gör det inte.',
155
+ },
156
+ ];
157
+
158
+ const schemas: HullSpeedLocaleContent['schemas'] = [
159
+ {
160
+ '@context': 'https://schema.org',
161
+ '@type': 'SoftwareApplication',
162
+ name: title,
163
+ description,
164
+ applicationCategory: 'UtilityApplication',
165
+ operatingSystem: 'Web',
166
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
167
+ } as WithContext<SoftwareApplication>,
168
+ {
169
+ '@context': 'https://schema.org',
170
+ '@type': 'FAQPage',
171
+ mainEntity: faq.map((item) => ({
172
+ '@type': 'Question',
173
+ name: item.question,
174
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
175
+ })),
176
+ } as WithContext<FAQPage>,
177
+ {
178
+ '@context': 'https://schema.org',
179
+ '@type': 'HowTo',
180
+ name: `Så använder du ${title}`,
181
+ step: howTo.map((step) => ({
182
+ '@type': 'HowToStep',
183
+ name: step.name,
184
+ text: step.text,
185
+ })),
186
+ } as WithContext<HowTo>,
187
+ ];
188
+
189
+ export const content: HullSpeedLocaleContent = {
190
+ slug,
191
+ title,
192
+ description,
193
+ ui,
194
+ seo,
195
+ faq,
196
+ bibliography,
197
+ howTo,
198
+ schemas,
199
+ };
@@ -0,0 +1,199 @@
1
+ import { bibliography } from '../bibliography';
2
+ import type { HullSpeedLocaleContent, HullSpeedUI } from '../index';
3
+ import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
4
+
5
+ const slug = 'tekne-govde-hizi-hesaplayici';
6
+ const title = 'Tekne gövde hızı hesaplayıcı';
7
+ const description =
8
+ 'Su hattı boyundan kuramsal gövde hızını bul, bir log ile karşılaştır ve yer değiştiren bir gövdenin kendi baş dalgasına ne zaman tırmandığını gör.';
9
+
10
+ const ui: HullSpeedUI = {
11
+ metric: 'Metrik',
12
+ imperial: 'İngiliz',
13
+ unitGroup: 'Birimler',
14
+ sceneLabel: 'Su hattı ve baş dalgası',
15
+ hullSpeedLabel: 'Gövde hızı',
16
+ knotsUnit: 'kn',
17
+ kmhUnit: 'km/h',
18
+ mphUnit: 'mph',
19
+ ratioLabel: 'S/L',
20
+ froudeLabel: 'Fr',
21
+ lwlLabelMetric: 'Su hattı boyu',
22
+ lwlLabelImperial: 'Su hattı boyu',
23
+ lwlUnitM: 'm',
24
+ lwlUnitFt: 'ft',
25
+ observedLabel: 'Log hızı',
26
+ observedHint: 'Kuramsal dalgayı çizmek için 0 bırak. Hâlâ çukurda oturup oturmadığını görmek için bir log yaz.',
27
+ stretchHint: 'Su hattını uzatmak için gövdeyi sürükle',
28
+ hullKindLabel: 'Gövde biçimi',
29
+ displacement: 'Yer değiştiren',
30
+ semi: 'Yarı yer değiştiren',
31
+ planing: 'Kayıcı',
32
+ boatsLabel: 'Örnek su hatları',
33
+ dinghy: 'Dinghy',
34
+ daysailer: 'Daysailer',
35
+ cruiser: 'Gezi',
36
+ bluewater: 'Açık deniz',
37
+ workboat: 'İş teknesi',
38
+ bandBelow: 'Hâlâ kısa bir dalga',
39
+ bandNear: 'Dalga engeline yaklaşıyor',
40
+ bandAt: 'Baş dalgasının üstünde',
41
+ bandAbove: 'Dalgaya tırmanmaya çalışıyor',
42
+ bandPlane: 'Kayışta, gövde hızının ötesinde',
43
+ planingNote:
44
+ 'Kayıcı bir gövde bu dalgayı geride bırakabilir. Gövde hızı bir referanstır, duvar değildir.',
45
+ displacementNote:
46
+ 'Yer değiştiren bir gövde kendi izine yetişince pahalıya öder. Bunu pratik tavan say, GPS hedefi değil.',
47
+ semiNote:
48
+ 'Yarı yer değiştirenler yeterli güçle klasik oranın biraz üstüne çıkabilir, direncin sert artışı pahasına.',
49
+ waveLegend: 'Baş dalgası',
50
+ waterLegend: 'Su hattı',
51
+ markLegend: 'Gövde hızı',
52
+ faqTitle: 'Gövde hızı soruları',
53
+ bibliographyTitle: 'Kaynaklar',
54
+ };
55
+
56
+ const faq: HullSpeedLocaleContent['faq'] = [
57
+ {
58
+ question: 'Bir yelkenlide gövde hızı nedir?',
59
+ answer:
60
+ 'Yer değiştiren bir gövdenin, kendi su hattı kadar uzun bir baş dalgasıyla gittiği hızdır. Deniz birimlerinde su hattı boyunun karekökünün 1.34 katı olarak kestirilir. Kritik bir hızdır, sert bir fizik durdurucusu değildir.',
61
+ },
62
+ {
63
+ question: 'Gövde hızı nasıl hesaplanır?',
64
+ answer:
65
+ 'Su hattını fite çevir, karekökünü al ve düğüm için 1.34 ile çarp. 10 m su hattı yaklaşık 32.8 ft eder, yani 7.7 kn civarı. Aynı nokta 0.40 civarı bir Froude sayısına denk gelir.',
66
+ },
67
+ {
68
+ question: 'Gövde hızı kayıcı tekneler için geçerli midir?',
69
+ answer:
70
+ 'Formül, gövdenin yer değiştirme kipinde yapacağı dalgayı hâlâ anlatır. Kayıcılar ve birçok yarı yer değiştiren bu dalganın üstüne tırmanmak için tasarlanır. Sayıyı referans al, sonra gövde biçimi notunu oku.',
71
+ },
72
+ {
73
+ question: 'Su hattı boyunu mu toplam boyu mu kullanmalıyım?',
74
+ answer:
75
+ 'Dalgayı gerçekten yapan batık uzunluk olan su hattı boyunu (LWL) kullan. Toplam boy, civadra ve çıkıntılar dalga boyunu koymaz. LWL yi suda ölç, broşürdeki LOA yi değil.',
76
+ },
77
+ ];
78
+
79
+ const howTo: HullSpeedLocaleContent['howTo'] = [
80
+ {
81
+ name: 'Su hattını uzat',
82
+ text: 'Gövdeyi sürükle, su hattı rayını kaydır ya da dinghy den iş teknesine kadar seç. Gövde hızı o boyun fit cinsinden karekökünün 1.34 katıdır.',
83
+ },
84
+ {
85
+ name: 'Gövde biçimini seç',
86
+ text: 'Yer değiştiren, yarı yer değiştiren veya kayıcı omurgayı ve teknenin kendi dalgasından çıkıp çıkamayacağını değiştirir.',
87
+ },
88
+ {
89
+ name: 'Çukuru oku',
90
+ text: 'Gövde hızında baş ve kıç dalgası bir su hattı aralıkta durur ve tekne çukurda oturur. Engel budur.',
91
+ },
92
+ {
93
+ name: 'Bir log karşılaştır',
94
+ text: 'Sudaki hızı gir. Daha kısa dalga hâlâ ucuza ittiğin anlamına gelir. Daha uzun dalga çukura tırmandığın anlamına gelir.',
95
+ },
96
+ ];
97
+
98
+ const seo: HullSpeedLocaleContent['seo'] = [
99
+ {
100
+ type: 'title',
101
+ text: 'Gövde hızının aslında söylediği şey',
102
+ level: 2,
103
+ },
104
+ {
105
+ type: 'paragraph',
106
+ html: 'Yer değiştiren bir gövde baştan bir dalga, kıçtan bir dalga iter. Bu tepeler yaklaşık bir su hattı aralıkta durunca tekne kendi iziyle gider. Fazladan güç o zaman hız almak yerine su yığar. Denizcilerin gövde hızı dediği durum budur.',
107
+ },
108
+ {
109
+ type: 'paragraph',
110
+ html: 'Hesaplayıcı, su hattı fitinin karekökü başına 1.34 düğümlük yaygın amatör oranı kullanır. İnce uzun gövdeler biraz daha yüksek, mavnalar daha düşük oturabilir. Sonucu bir öğretim işareti say, sonra gerçek bir log ile karşılaştır.',
111
+ },
112
+ {
113
+ type: 'title',
114
+ text: 'Hesaplanmış su hattı örnekleri',
115
+ level: 2,
116
+ },
117
+ {
118
+ type: 'table',
119
+ headers: ['Su hattı', 'Gövde hızı', 'Tipik tekne'],
120
+ rows: [
121
+ ['4.2 m / 13.8 ft', '5.0 kn', 'Dinghy'],
122
+ ['6.5 m / 21.3 ft', '6.2 kn', 'Daysailer'],
123
+ ['10 m / 32.8 ft', '7.7 kn', 'Aile gezisi'],
124
+ ['13.5 m / 44.3 ft', '8.9 kn', 'Açık deniz yatı'],
125
+ ['18 m / 59.1 ft', '10.3 kn', 'Küçük iş teknesi'],
126
+ ],
127
+ },
128
+ {
129
+ type: 'title',
130
+ text: 'Baş dalgası nasıl okunur',
131
+ level: 2,
132
+ },
133
+ {
134
+ type: 'list',
135
+ items: [
136
+ 'İşaretin altında dalga kısadır ve tekne hâlâ ucuza sürülür.',
137
+ 'İşarete yakın baş dalgası dikleşir, yakıt veya yelken daha az hız alır.',
138
+ 'İşaretin üstünde dalga boyu LWL ile eşleşir. Yer değiştiren gövde klasik engeldedir.',
139
+ 'Üstünde yer değiştiren gövde izine tırmanır. Kayıcı zaten kalkmış olabilir.',
140
+ ],
141
+ },
142
+ {
143
+ type: 'tip',
144
+ title: 'LWL ölç, LOA değil',
145
+ html: 'Broşür boyu çıkıntıları sayar. Dalga batık su hattına bakar. Elinde yalnız LOA varsa hesaplanan gövde hızı iyimser kalır.',
146
+ },
147
+ {
148
+ type: 'title',
149
+ text: 'Bir cümlede Froude sayısı',
150
+ level: 2,
151
+ },
152
+ {
153
+ type: 'paragraph',
154
+ html: 'Gövde hızı, 0.40 civarı bir Froude sayısının rahat paketidir: hızın yerçekimi çarpı boyun kareköküne bölümü. Bu yüzden gövde biçimi aynı kalsa bile daha uzun su hatları daha hızlıdır. LWL yi uzatmak yer değiştirme sınırını temiz yükseltir; beygir eklemek yükseltmez.',
155
+ },
156
+ ];
157
+
158
+ const schemas: HullSpeedLocaleContent['schemas'] = [
159
+ {
160
+ '@context': 'https://schema.org',
161
+ '@type': 'SoftwareApplication',
162
+ name: title,
163
+ description,
164
+ applicationCategory: 'UtilityApplication',
165
+ operatingSystem: 'Web',
166
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
167
+ } as WithContext<SoftwareApplication>,
168
+ {
169
+ '@context': 'https://schema.org',
170
+ '@type': 'FAQPage',
171
+ mainEntity: faq.map((item) => ({
172
+ '@type': 'Question',
173
+ name: item.question,
174
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
175
+ })),
176
+ } as WithContext<FAQPage>,
177
+ {
178
+ '@context': 'https://schema.org',
179
+ '@type': 'HowTo',
180
+ name: `${title} nasıl kullanılır`,
181
+ step: howTo.map((step) => ({
182
+ '@type': 'HowToStep',
183
+ name: step.name,
184
+ text: step.text,
185
+ })),
186
+ } as WithContext<HowTo>,
187
+ ];
188
+
189
+ export const content: HullSpeedLocaleContent = {
190
+ slug,
191
+ title,
192
+ description,
193
+ ui,
194
+ seo,
195
+ faq,
196
+ bibliography,
197
+ howTo,
198
+ schemas,
199
+ };
@@ -0,0 +1,199 @@
1
+ import { bibliography } from '../bibliography';
2
+ import type { HullSpeedLocaleContent, HullSpeedUI } from '../index';
3
+ import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
4
+
5
+ const slug = 'sailboat-hull-speed-calculator';
6
+ const title = '帆船船体速度计算器';
7
+ const description =
8
+ '由水线长度求出理论船体速度,对照实测航程仪读数,并看排水型船体何时爬上自己的艏波。';
9
+
10
+ const ui: HullSpeedUI = {
11
+ metric: '公制',
12
+ imperial: '英制',
13
+ unitGroup: '单位',
14
+ sceneLabel: '水线与艏波',
15
+ hullSpeedLabel: '船体速度',
16
+ knotsUnit: 'kn',
17
+ kmhUnit: 'km/h',
18
+ mphUnit: 'mph',
19
+ ratioLabel: 'S/L',
20
+ froudeLabel: 'Fr',
21
+ lwlLabelMetric: '水线长度',
22
+ lwlLabelImperial: '水线长度',
23
+ lwlUnitM: 'm',
24
+ lwlUnitFt: 'ft',
25
+ observedLabel: '航程仪速度',
26
+ observedHint: '留 0 以绘制理论波。输入航程仪读数,看你是否仍坐在波谷里。',
27
+ stretchHint: '拖动船体以拉长水线',
28
+ hullKindLabel: '船体形状',
29
+ displacement: '排水型',
30
+ semi: '半排水型',
31
+ planing: '滑行型',
32
+ boatsLabel: '水线示例',
33
+ dinghy: '小艇',
34
+ daysailer: '日航帆船',
35
+ cruiser: '巡航船',
36
+ bluewater: '远海',
37
+ workboat: '工作船',
38
+ bandBelow: '仍是短波',
39
+ bandNear: '接近波浪屏障',
40
+ bandAt: '骑在艏波上',
41
+ bandAbove: '正试图爬上波浪',
42
+ bandPlane: '已滑行,超过船体速度',
43
+ planingNote:
44
+ '滑行型船体可以把这道波甩在后面。船体速度是参照,不是墙。',
45
+ displacementNote:
46
+ '排水型追上自己的伴流时会付出陡峭代价。把它当成实用上限,不是 GPS 目标。',
47
+ semiNote:
48
+ '半排水型在功率足够时可以略微超过经典比值,但阻力会急剧上升。',
49
+ waveLegend: '艏波',
50
+ waterLegend: '水线',
51
+ markLegend: '船体速度',
52
+ faqTitle: '船体速度问题',
53
+ bibliographyTitle: '参考文献',
54
+ };
55
+
56
+ const faq: HullSpeedLocaleContent['faq'] = [
57
+ {
58
+ question: '帆船的船体速度是什么?',
59
+ answer:
60
+ '排水型船体带着大约与自身水线等长的艏波前进时的速度。航海单位里通常用 1.34 乘以英尺水线长度的平方根来估计。这是临界速度,不是硬性的物理停点。',
61
+ },
62
+ {
63
+ question: '如何计算船体速度?',
64
+ answer:
65
+ '把水线换成英尺,开平方,再乘 1.34 得到节。10 m 水线约 32.8 ft,所以大约 7.7 kn。同一点对应弗劳德数约 0.40。',
66
+ },
67
+ {
68
+ question: '滑行艇也适用船体速度吗?',
69
+ answer:
70
+ '公式仍描述船体若停留在排水模式会造出的波。滑行型和许多半排水型就是为了爬过那道波而设计的。把数字当参照,再读船体形状说明。',
71
+ },
72
+ {
73
+ question: '该用水线长还是总长?',
74
+ answer:
75
+ '用水线长 (LWL),也就是真正造波的浸水长度。总长、艏斜桅和悬伸并不决定波长。在水里量 LWL,不要用量册上的 LOA。',
76
+ },
77
+ ];
78
+
79
+ const howTo: HullSpeedLocaleContent['howTo'] = [
80
+ {
81
+ name: '拉长水线',
82
+ text: '拖动船体、移动水线滑轨,或从小艇选到工作船。船体速度是该长度(英尺)平方根的 1.34 倍。',
83
+ },
84
+ {
85
+ name: '选择船体形状',
86
+ text: '排水型、半排水型或滑行型会改变龙骨,以及船能否爬出自己的波。',
87
+ },
88
+ {
89
+ name: '读波谷',
90
+ text: '在船体速度时,艏波和艉波相隔一条水线,船坐在谷里。那就是屏障。',
91
+ },
92
+ {
93
+ name: '对照航程仪',
94
+ text: '输入对水速度。较短的波表示你仍推得便宜。较长的波表示你正在爬谷。',
95
+ },
96
+ ];
97
+
98
+ const seo: HullSpeedLocaleContent['seo'] = [
99
+ {
100
+ type: 'title',
101
+ text: '船体速度真正在说什么',
102
+ level: 2,
103
+ },
104
+ {
105
+ type: 'paragraph',
106
+ html: '排水型船体从船首推一道波,从船尾再推一道。当这两道峰大约相隔一条水线时,船就带着自己的伴流走。多余功率这时主要把水堆起来,而不是买速度。水手把这种状态叫做船体速度。',
107
+ },
108
+ {
109
+ type: 'paragraph',
110
+ html: '本计算器使用常见的业余比值:每英尺水线平方根 1.34 节。细长船体可以略高,驳船更低。把结果当教学记号,再拿真实航程仪对照。',
111
+ },
112
+ {
113
+ type: 'title',
114
+ text: '算过的水线例子',
115
+ level: 2,
116
+ },
117
+ {
118
+ type: 'table',
119
+ headers: ['水线', '船体速度', '典型船只'],
120
+ rows: [
121
+ ['4.2 m / 13.8 ft', '5.0 kn', '小艇'],
122
+ ['6.5 m / 21.3 ft', '6.2 kn', '日航帆船'],
123
+ ['10 m / 32.8 ft', '7.7 kn', '家庭巡航船'],
124
+ ['13.5 m / 44.3 ft', '8.9 kn', '远海游艇'],
125
+ ['18 m / 59.1 ft', '10.3 kn', '小型工作船'],
126
+ ],
127
+ },
128
+ {
129
+ type: 'title',
130
+ text: '如何读艏波',
131
+ level: 2,
132
+ },
133
+ {
134
+ type: 'list',
135
+ items: [
136
+ '标记以下时波短,船仍便宜推动。',
137
+ '靠近标记时艏波变陡,燃油或帆买到的速度变少。',
138
+ '正好在标记上时波长等于 LWL。排水型处于经典屏障。',
139
+ '再往上,排水型爬自己的伴流。滑行型可能已经抬起来。',
140
+ ],
141
+ },
142
+ {
143
+ type: 'tip',
144
+ title: '量 LWL,不要量 LOA',
145
+ html: '宣传册长度包含悬伸。波浪在乎浸入的水线。若只有 LOA,算出的船体速度会偏乐观。',
146
+ },
147
+ {
148
+ type: 'title',
149
+ text: '一句话里的弗劳德数',
150
+ level: 2,
151
+ },
152
+ {
153
+ type: 'paragraph',
154
+ html: '船体速度是把弗劳德数约 0.40 包成好用的形式:速度除以重力乘长度的平方根。所以即使船体形状不变,更长的水线也更快。抬高排水极限的干净办法是拉长 LWL,不是加马力。',
155
+ },
156
+ ];
157
+
158
+ const schemas: HullSpeedLocaleContent['schemas'] = [
159
+ {
160
+ '@context': 'https://schema.org',
161
+ '@type': 'SoftwareApplication',
162
+ name: title,
163
+ description,
164
+ applicationCategory: 'UtilityApplication',
165
+ operatingSystem: 'Web',
166
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
167
+ } as WithContext<SoftwareApplication>,
168
+ {
169
+ '@context': 'https://schema.org',
170
+ '@type': 'FAQPage',
171
+ mainEntity: faq.map((item) => ({
172
+ '@type': 'Question',
173
+ name: item.question,
174
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
175
+ })),
176
+ } as WithContext<FAQPage>,
177
+ {
178
+ '@context': 'https://schema.org',
179
+ '@type': 'HowTo',
180
+ name: `如何使用${title}`,
181
+ step: howTo.map((step) => ({
182
+ '@type': 'HowToStep',
183
+ name: step.name,
184
+ text: step.text,
185
+ })),
186
+ } as WithContext<HowTo>,
187
+ ];
188
+
189
+ export const content: HullSpeedLocaleContent = {
190
+ slug,
191
+ title,
192
+ description,
193
+ ui,
194
+ seo,
195
+ faq,
196
+ bibliography,
197
+ howTo,
198
+ schemas,
199
+ };
@@ -0,0 +1,11 @@
1
+ import type { ToolDefinition } from '../../types';
2
+ import { hullSpeed } from './entry';
3
+
4
+ export * from './entry';
5
+
6
+ export const HULL_SPEED_TOOL: ToolDefinition = {
7
+ entry: hullSpeed,
8
+ Component: () => import('./component.astro'),
9
+ SEOComponent: () => import('./seo.astro'),
10
+ BibliographyComponent: () => import('./bibliography.astro'),
11
+ };