@jjlmoya/utils-nautical 1.18.0 → 1.20.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 (64) hide show
  1. package/package.json +2 -2
  2. package/src/category/index.ts +2 -1
  3. package/src/entries.ts +5 -1
  4. package/src/index.ts +9 -7
  5. package/src/tests/diacritics_density.test.ts +1 -1
  6. package/src/tests/inverted_punctuation.test.ts +1 -1
  7. package/src/tests/locale_completeness.test.ts +2 -2
  8. package/src/tests/script_density.test.ts +1 -1
  9. package/src/tests/seo_parity.test.ts +60 -0
  10. package/src/tests/title_quality.test.ts +1 -1
  11. package/src/tests/tool_validation.test.ts +2 -2
  12. package/src/tests/translation_copy.test.ts +124 -0
  13. package/src/tool/anchorScope/anchorScope.css +507 -0
  14. package/src/tool/anchorScope/bibliography.astro +6 -0
  15. package/src/tool/anchorScope/bibliography.ts +14 -0
  16. package/src/tool/anchorScope/component.astro +219 -0
  17. package/src/tool/anchorScope/constants.ts +51 -0
  18. package/src/tool/anchorScope/controller.ts +251 -0
  19. package/src/tool/anchorScope/dom-views.ts +106 -0
  20. package/src/tool/anchorScope/entry.ts +31 -0
  21. package/src/tool/anchorScope/evaluator.ts +61 -0
  22. package/src/tool/anchorScope/i18n/de.ts +228 -0
  23. package/src/tool/anchorScope/i18n/en.ts +223 -0
  24. package/src/tool/anchorScope/i18n/es.ts +223 -0
  25. package/src/tool/anchorScope/i18n/fr.ts +221 -0
  26. package/src/tool/anchorScope/i18n/id.ts +221 -0
  27. package/src/tool/anchorScope/i18n/it.ts +221 -0
  28. package/src/tool/anchorScope/i18n/ja.ts +221 -0
  29. package/src/tool/anchorScope/i18n/ko.ts +221 -0
  30. package/src/tool/anchorScope/i18n/nl.ts +221 -0
  31. package/src/tool/anchorScope/i18n/pl.ts +221 -0
  32. package/src/tool/anchorScope/i18n/pt.ts +221 -0
  33. package/src/tool/anchorScope/i18n/ru.ts +221 -0
  34. package/src/tool/anchorScope/i18n/sv.ts +221 -0
  35. package/src/tool/anchorScope/i18n/tr.ts +221 -0
  36. package/src/tool/anchorScope/i18n/zh.ts +221 -0
  37. package/src/tool/anchorScope/index.ts +10 -0
  38. package/src/tool/anchorScope/logic.test.ts +100 -0
  39. package/src/tool/anchorScope/logic.ts +84 -0
  40. package/src/tool/anchorScope/presets.ts +12 -0
  41. package/src/tool/anchorScope/seo.astro +14 -0
  42. package/src/tool/anchorScope/storage.ts +25 -0
  43. package/src/tool/anchorScope/types.ts +33 -0
  44. package/src/tool/anchorScope/ui.ts +63 -0
  45. package/src/tool/endurance/index.ts +2 -1
  46. package/src/tool/speedConverter/i18n/ru.ts +57 -0
  47. package/src/tool/speedConverter/i18n/tr.ts +20 -0
  48. package/src/tool/tideCalculator/i18n/es.ts +1 -1
  49. package/src/tool/tideCalculator/i18n/fr.ts +8 -0
  50. package/src/tool/underKeel/i18n/de.ts +4 -0
  51. package/src/tool/underKeel/i18n/es.ts +1 -1
  52. package/src/tool/underKeel/i18n/id.ts +4 -0
  53. package/src/tool/underKeel/i18n/it.ts +16 -0
  54. package/src/tool/underKeel/i18n/ja.ts +8 -0
  55. package/src/tool/underKeel/i18n/ko.ts +8 -0
  56. package/src/tool/underKeel/i18n/nl.ts +16 -0
  57. package/src/tool/underKeel/i18n/pl.ts +16 -0
  58. package/src/tool/underKeel/i18n/pt.ts +16 -0
  59. package/src/tool/underKeel/i18n/ru.ts +16 -0
  60. package/src/tool/underKeel/i18n/sv.ts +16 -0
  61. package/src/tool/underKeel/i18n/tr.ts +8 -0
  62. package/src/tool/underKeel/i18n/zh.ts +8 -0
  63. package/src/tools.ts +3 -0
  64. package/src/types.ts +3 -1
@@ -0,0 +1,221 @@
1
+ import { bibliography } from '../bibliography';
2
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
3
+ import type { AnchorScopeLocaleContent } from '../entry';
4
+ import type { AnchorScopeUI } from '../ui';
5
+
6
+ const slug = 'kalkulyator-dliny-yakornoy-cepi';
7
+ const title = 'Калькулятор Якорной Цепи и Радиуса Циркуляции';
8
+ const description =
9
+ 'Рассчитайте оптимальную длину якорной цепи, коэффициент травления и безопасный радиус циркуляции для надежной стоянки на якоре.';
10
+
11
+ const ui: AnchorScopeUI = {
12
+ parametersTitle: 'Параметры',
13
+ waterDepthLabel: 'Глубина по Карте',
14
+ bowHeightLabel: 'Высота Носа над Водой',
15
+ tideRangeLabel: 'Высота Прилива',
16
+ boatLengthLabel: 'Длина Судна (LOA)',
17
+ rodeTypeLabel: 'Якорная Линия',
18
+ windConditionLabel: 'Сила Ветра и Прогноз',
19
+ seabedTypeLabel: 'Тип Грунта',
20
+ presetProtected: 'Тихая Бухта',
21
+ presetOpen: 'Открытый Берег',
22
+ presetStorm: 'Штормовое Предупреждение',
23
+ seabedTag: 'Коэффициент Держания Грунта',
24
+ catenaryTag: 'Демпфер Цепной Линии',
25
+ unitM: 'м',
26
+ unitFt: 'фт',
27
+ unitMeters: 'Метрическая (м)',
28
+ unitFeet: 'Имперская (фт)',
29
+ allChainOption: 'Только Цепь (Тяжелая Катенария)',
30
+ ropeChainOption: 'Комбинированный Канат и Цепь',
31
+ allRopeOption: 'Только Синтетический Канат',
32
+ calmWindOption: 'Штиль / Слабый Ветер (< 15 уз)',
33
+ moderateWindOption: 'Умеренный Ветер (15 - 25 уз)',
34
+ strongWindOption: 'Сильный Ветер / Шторм (25 - 35 уз)',
35
+ stormWindOption: 'Жестокий Шторм (> 35 уз)',
36
+ sandOption: 'Песок (Оптимальное Держание)',
37
+ mudOption: 'Ил / Мягкая Грязь (Хорошее Держание)',
38
+ clayOption: 'Плотная Глина (Отличное)',
39
+ gravelOption: 'Гравий / Галька (Среднее)',
40
+ rockOption: 'Скалы (Риск Зацепа)',
41
+ weedOption: 'Водоросли / Трава (Слабое)',
42
+ resultsTitle: 'Анализ Стоянки и Размеры',
43
+ scopeRatioLabel: 'Коэффициент Травления (Scope)',
44
+ totalDepthLabel: 'Общая Вертикальная Высота',
45
+ recommendedRodeLabel: 'Рекомендуемая Длина Цепи',
46
+ horizontalDistanceLabel: 'Горизонтальная Дистанция',
47
+ swingRadiusLabel: 'Расчетный Радиус Циркуляции',
48
+ minSafeRodeLabel: 'Минимум в Штиль',
49
+ heavyWeatherRodeLabel: 'Длина для Шторма',
50
+ statusOptimalTitle: 'Безопасная и Прочная Стоянка',
51
+ statusOptimalDesc: 'Рассчитанная длина гарантирует демпфирующую кривую и горизонтальную тягу за веретено якоря.',
52
+ statusCautionTitle: 'Приемлемо: Следите за Ветром',
53
+ statusCautionDesc: 'Соотношение подходит для умеренного ветра. Стравите больше цепи при усилении волнения.',
54
+ statusDangerTitle: 'Недостаточно Цепи: Риск Дрейфа',
55
+ statusDangerDesc: 'Критическое соотношение. Якорь получит вертикальную тягу вверх и может ползти по дну.',
56
+ adviceSand: 'Песок обеспечивает надежное зарывание лап. Дайте задний ход для затягивания якоря.',
57
+ adviceMud: 'Мягкий ил требует широких лап и большей длины цепи для выхода на твердый пласт.',
58
+ adviceClay: 'Глина держит отлично, но требует острого носка якоря для проникновения.',
59
+ adviceGravel: 'Рассыпчатый гравий смещается под нагрузкой. Увеличьте цепь минимум на 25 процентов.',
60
+ adviceRock: 'Высокий риск заклинивания. Всегда используйте буйреп с буйком для подъема.',
61
+ adviceWeed: 'Густые водоросли мешают лапам войти в грунт. Тщательно проверьте держание мотором.',
62
+ catenaryAllChain: 'Вес цепи создает провис, амортизирующий удары волн и удерживающий тягу вдоль дна.',
63
+ catenaryRopeChain: 'Комбинированная линия требует соотношения не менее 7 к 1 для компенсации веса.',
64
+ catenaryAllRope: 'Легкий канат требует 8 к 1 или 10 к 1, чтобы не поднимать веретено якоря.',
65
+ resetButton: 'Сбросить Значения',
66
+ visualProfileTitle: 'Профиль Провеса Цепи',
67
+ waterlineLabel: 'Ватерлиния',
68
+ seabedLabel: 'Морское Дно',
69
+ anchorLabel: 'Якорь',
70
+ catenaryCurveLabel: 'Кривая Цепи',
71
+ swingCircleLabel: 'Круг Циркуляции',
72
+ };
73
+
74
+ const faq: AnchorScopeLocaleContent['faq'] = [
75
+ {
76
+ question: 'Что такое коэффициент травления scope при якорной стоянке?',
77
+ answer: 'Это соотношение между общей длиной вытравленной цепи или каната и вертикальной высотой от морского дна до носового клюза.',
78
+ },
79
+ {
80
+ question: 'Зачем прибавлять высоту носа и прилив к глубине по карте?',
81
+ answer: 'Эхолот показывает только глубину под килем. Высота носового роульса и ночной прилив существенно увеличивают вертикальную дистанцию.',
82
+ },
83
+ {
84
+ question: 'В чем разница соотношения для цепи и каната?',
85
+ answer: 'Тяжелая стальная цепь дает провес и допускает 4:1 или 5:1. Легкий канат натягивается в струну и требует от 7:1 до 10:1.',
86
+ },
87
+ {
88
+ question: 'Как рассчитывается радиус циркуляции судна на якоре?',
89
+ answer: 'По теореме Пифагора определяется горизонтальная длина, к которой прибавляют общую длину судна и запас в 3-5 метров.',
90
+ },
91
+ {
92
+ question: 'Как тип морского дна влияет на надежность стоянки?',
93
+ answer: 'Песок и глина обеспечивают наивысшую держащую силу. Ил и водоросли требуют увеличения цепи и проверки мотором.',
94
+ },
95
+ {
96
+ question: 'Для чего нужен демпферный канат snubber на якорной цепи?',
97
+ answer: 'Он снимает ударную нагрузку с брашпиля и электрической лебедки, устраняя металлический скрежет в каюте.',
98
+ },
99
+ ];
100
+
101
+ const howTo: AnchorScopeLocaleContent['howTo'] = [
102
+ {
103
+ name: 'Измерить глубину и высоту носа',
104
+ text: 'Определите глубину по карте или эхолоту и прибавьте высоту носового ролика над водой.',
105
+ },
106
+ {
107
+ name: 'Учесть высоту прилива',
108
+ text: 'Проверьте приливные таблицы для учета максимального подъема воды за время стоянки.',
109
+ },
110
+ {
111
+ name: 'Выбрать тип оснастки и силу ветра',
112
+ text: 'Укажите используется ли только цепь или канат и настройте коэффициент безопасности по ветру.',
113
+ },
114
+ {
115
+ name: 'Стравить цепь и закрепить якорь мотором',
116
+ text: 'Стравите нужную длину и дайте реверс мотором для плотного зарывания якоря в дно.',
117
+ },
118
+ ];
119
+
120
+ const seo: AnchorScopeLocaleContent['seo'] = [
121
+ {
122
+ type: 'title',
123
+ text: 'Расчет Длины Якорной Цепи и Безопасной Стоянки',
124
+ level: 2,
125
+ },
126
+ {
127
+ type: 'paragraph',
128
+ html: 'Грамотная постановка на якорь гарантирует безопасность экипажа и яхты. Недостаточная длина стравленной цепи является главной причиной ползания якоря и столкновений в бухтах. Точный расчет <strong>коэффициента травления</strong> обеспечивает надежную фиксацию.',
129
+ },
130
+ {
131
+ type: 'title',
132
+ text: 'Компоненты Полной Вертикальной Высоты',
133
+ level: 3,
134
+ },
135
+ {
136
+ type: 'list',
137
+ items: [
138
+ '<strong>Глубина в Точке Стоянки:</strong> Показание эхолота плюс осадка судна.',
139
+ '<strong>Высота Носового Клюза:</strong> Расстояние от поверхности воды до направляющего ролика.',
140
+ '<strong>Максимальный Прилив:</strong> Ожидаемый подъем уровня моря в полную воду.',
141
+ ],
142
+ },
143
+ {
144
+ type: 'title',
145
+ text: 'Таблица Рекомендуемых Пропорций Травления',
146
+ level: 3,
147
+ },
148
+ {
149
+ type: 'table',
150
+ headers: ['Тип Оснастки', 'Тихая Погода (<15 уз)', 'Умеренный Ветер (15-25 уз)', 'Шторм (>30 уз)'],
151
+ rows: [
152
+ ['<strong>Только Цепь</strong>', 'Пропорция 4:1', 'Пропорция 5:1', 'Пропорция 7:1'],
153
+ ['<strong>Канат с Цепным Отрезком</strong>', 'Пропорция 5:1', 'Пропорция 7:1', 'Пропорция 8:1 до 10:1'],
154
+ ['<strong>Только Синтетический Канат</strong>', 'Пропорция 7:1', 'Пропорция 8:1', 'Пропорция 10:1 до 12:1'],
155
+ ],
156
+ },
157
+ {
158
+ type: 'tip',
159
+ title: 'Защита Якорной Лебедки',
160
+ html: 'Никогда не оставляйте натяжение цепи на звездочке лебедки. Всегда закрепляйте эластичный snubber на носовую утку.',
161
+ },
162
+ {
163
+ type: 'paragraph',
164
+ html: 'Учитывайте прогноз и фактическое состояние моря перед выходом.',
165
+ },
166
+ {
167
+ type: 'paragraph',
168
+ html: 'Проверяйте запас глубины и оставляйте безопасный резерв.',
169
+ },
170
+ {
171
+ type: 'paragraph',
172
+ html: 'Записывайте исходные данные, чтобы повторить расчет в следующий раз.',
173
+ },
174
+ {
175
+ type: 'paragraph',
176
+ html: 'Сравнивайте несколько сценариев при изменении ветра и течения.',
177
+ },
178
+ {
179
+ type: 'paragraph',
180
+ html: 'Расчет помогает планировать переход, но не заменяет наблюдение на борту.',
181
+ },
182
+ ];
183
+
184
+ const schemas: AnchorScopeLocaleContent['schemas'] = [
185
+ {
186
+ '@context': 'https://schema.org',
187
+ '@type': 'SoftwareApplication',
188
+ name: title,
189
+ description,
190
+ applicationCategory: 'UtilityApplication',
191
+ operatingSystem: 'Web',
192
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
193
+ } as WithContext<SoftwareApplication>,
194
+ {
195
+ '@context': 'https://schema.org',
196
+ '@type': 'FAQPage',
197
+ mainEntity: faq.map((item) => ({
198
+ '@type': 'Question',
199
+ name: item.question,
200
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
201
+ })),
202
+ } as WithContext<FAQPage>,
203
+ {
204
+ '@context': 'https://schema.org',
205
+ '@type': 'HowTo',
206
+ name: `Инструкция: ${title}`,
207
+ step: howTo.map((s) => ({ '@type': 'HowToStep', name: s.name, text: s.text })),
208
+ } as WithContext<HowTo>,
209
+ ];
210
+
211
+ export const content: AnchorScopeLocaleContent = {
212
+ slug,
213
+ title,
214
+ description,
215
+ ui,
216
+ seo,
217
+ faq,
218
+ bibliography,
219
+ howTo,
220
+ schemas,
221
+ };
@@ -0,0 +1,221 @@
1
+ import { bibliography } from '../bibliography';
2
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
3
+ import type { AnchorScopeLocaleContent } from '../entry';
4
+ import type { AnchorScopeUI } from '../ui';
5
+
6
+ const slug = 'kalkylator-ankarlangd-kattingskalkulator';
7
+ const title = 'Ankarkattingskalkylator och Svajradie';
8
+ const description =
9
+ 'Berakna optimal langd pa ankarkatting och ankarlina, scope-forhallande och svajradie for saker ankring baserat pa djup och bottenforhallanden.';
10
+
11
+ const ui: AnchorScopeUI = {
12
+ parametersTitle: 'Parametrar',
13
+ waterDepthLabel: 'Sjokortsdjup',
14
+ bowHeightLabel: 'Fribord vid Staven',
15
+ tideRangeLabel: 'Tidvattenshojd',
16
+ boatLengthLabel: 'Batlangd (LOA)',
17
+ rodeTypeLabel: 'Ankarlina / Katting',
18
+ windConditionLabel: 'Vindstyrka och Prognos',
19
+ seabedTypeLabel: 'Bottekaraktar',
20
+ presetProtected: 'Skyddad Vik',
21
+ presetOpen: 'Oppen Kust',
22
+ presetStorm: 'Kultje / Kuling',
23
+ seabedTag: 'Bottenfasthetsfaktor',
24
+ catenaryTag: 'Kattingkurva Dampning',
25
+ unitM: 'm',
26
+ unitFt: 'ft',
27
+ unitMeters: 'Metrisk (m)',
28
+ unitFeet: 'Imperial (ft)',
29
+ allChainOption: 'Enbart Katting (Tung Kurva)',
30
+ ropeChainOption: 'Kombinerad Lina och Katting',
31
+ allRopeOption: 'Enbart Textillina',
32
+ calmWindOption: 'Lugnt / Latt Bris (< 15 kn)',
33
+ moderateWindOption: 'Frisk Bris (15 - 25 kn)',
34
+ strongWindOption: 'Hard Vind / Kuling (25 - 35 kn)',
35
+ stormWindOption: 'Stormvindar (> 35 kn)',
36
+ sandOption: 'Sand (Optimalt Faste)',
37
+ mudOption: 'Lera / Dy (Gott Faste)',
38
+ clayOption: 'Fast Lera (Mycket Bra)',
39
+ gravelOption: 'Grus / Smasten (Mattligt)',
40
+ rockOption: 'Klippbotten (Risk att Fastna)',
41
+ weedOption: 'Sjogras / Tang (Daligt Faste)',
42
+ resultsTitle: 'Ankringsanalys och Matt',
43
+ scopeRatioLabel: 'Effektivt Scope-Forhallande',
44
+ totalDepthLabel: 'Total Vertikal Hojd',
45
+ recommendedRodeLabel: 'Rekommenderad Kattinglangd',
46
+ horizontalDistanceLabel: 'Horisontellt Avstand',
47
+ swingRadiusLabel: 'Uppskattad Svajradie',
48
+ minSafeRodeLabel: 'Minimum vid Lugnt Vader',
49
+ heavyWeatherRodeLabel: 'Langd for Hardt Vader',
50
+ statusOptimalTitle: 'Saker och Stabil Ankring',
51
+ statusOptimalDesc: 'Beraknad langd ger god fjadring och horisontellt drag i ankarlagget.',
52
+ statusCautionTitle: 'Godtagbart: Bevaka Vindokning',
53
+ statusCautionDesc: 'Forhallandet ar bra for mattlig vind. Slack mer katting om sjon bygger upp.',
54
+ statusDangerTitle: 'For Kort Katting: Risk for Draggning',
55
+ statusDangerDesc: 'Kritiskt forhallande. Ankaret riskerar att lyftas ur botten och dragga.',
56
+ adviceSand: 'Sand ger utmarkt grepp. Backa fast ankaret med motorkraft for att satta flyna.',
57
+ adviceMud: 'Mjuk dy kraver stor ankararea och mer katting for att na fastare lager.',
58
+ adviceClay: 'Fast lera haller extremt bra men kraver vassa ankarspetsar for att tranga ner.',
59
+ adviceGravel: 'Rullande grus ger efter for ryck. Oka kattinglangden med minst 25 procent.',
60
+ adviceRock: 'Hog risk att ankaret kilar fast. Anvand alltid bojlinje for att kunna lassa.',
61
+ adviceWeed: 'Tat tang hindrar ankaret fran att grava ner sig. Kontrollera fastet noga med motorn.',
62
+ catenaryAllChain: 'Kattingens tyngd bildar en kurva som dampar ryck fran vagor och haller draget plant.',
63
+ catenaryRopeChain: 'Kombinerad lina kraver minst 7 till 1 for att kompensera for lagre vikt.',
64
+ catenaryAllRope: 'Latt lina kraver 8 till 1 eller mer for att inte lyfta ankarlagget.',
65
+ resetButton: 'Aterstall Varden',
66
+ visualProfileTitle: 'Kattingkurva Profil',
67
+ waterlineLabel: 'Vattenlinje',
68
+ seabedLabel: 'Havsbotten',
69
+ anchorLabel: 'Ankare',
70
+ catenaryCurveLabel: 'Kattingkurva',
71
+ swingCircleLabel: 'Svajradie',
72
+ };
73
+
74
+ const faq: AnchorScopeLocaleContent['faq'] = [
75
+ {
76
+ question: 'Vad innebar scope-forhallandet vid ankring?',
77
+ answer: 'Scope ar forhallandet mellan den utlagda kattinglangden och det totala vertikala avstandet fran botten till bogrullen.',
78
+ },
79
+ {
80
+ question: 'Varfor maste fribord och tidvatten raknas med?',
81
+ answer: 'Ekolodet visar endast djupet under kolen. Fribordet och ett stigande tidvatten okar det vertikala avstandet avsevart.',
82
+ },
83
+ {
84
+ question: 'Vad ar skillnaden i forhallande mellan katting och lina?',
85
+ answer: 'Tung kätting bildar en hängkurva (4:1 till 5:1). Lätt lina sträcks rak och kräver 7:1 till 10:1.',
86
+ },
87
+ {
88
+ question: 'Hur beraknas batens svajradie pa ankarplatsen?',
89
+ answer: 'Med Pythagoras sats raknas det horisontella avstandet ut, plus batens totallangd och en sakerhetsmarginal pa 3 till 5 meter.',
90
+ },
91
+ {
92
+ question: 'Hur paverkar bottenmaterialet ankringens sakerhet?',
93
+ answer: 'Sand och lera ger bast hallfasthet. Grus och tang kraver extra kattinglangd eller en annan ankarvik.',
94
+ },
95
+ {
96
+ question: 'Vad ar fordelen med en ryckdampare (snubber) pa kattingen?',
97
+ answer: 'Den avlastar ankarpelet fran stotar orsakade av vagor och minskar metalliskt buller ombord.',
98
+ },
99
+ ];
100
+
101
+ const howTo: AnchorScopeLocaleContent['howTo'] = [
102
+ {
103
+ name: 'Mata sjokortsdjup och boghojd',
104
+ text: 'Kontrollera djupet pa platsen och lagg till bogrullens hojd over vattenytan.',
105
+ },
106
+ {
107
+ name: 'Lagg till tidvattenshojd',
108
+ text: 'Se tidvattentabellen for hogsta forvantade vattenstand under vistelsen.',
109
+ },
110
+ {
111
+ name: 'Valj utrustning och vindstyrka',
112
+ text: 'Valj katting eller lina och anpassa sakerhetsfaktorn efter vindprognosen.',
113
+ },
114
+ {
115
+ name: 'Lagga ut katting och satta ankaret',
116
+ text: 'Slack ut beraknad langd och backa forsiktigt med motorn for att grava ner ankaret.',
117
+ },
118
+ ];
119
+
120
+ const seo: AnchorScopeLocaleContent['seo'] = [
121
+ {
122
+ type: 'title',
123
+ text: 'Berakning av Ankarkatting och Saker Svajradie',
124
+ level: 2,
125
+ },
126
+ {
127
+ type: 'paragraph',
128
+ html: 'En korrekt utlagd ankarlina ar avgorande for batens och besattningens sakerhet. For kort katting ar den vanligaste orsaken till draggande ankare. Genom ratt <strong>scope-forhallande</strong> ligger baten tryggt aven i hard vind.',
129
+ },
130
+ {
131
+ type: 'title',
132
+ text: 'Bestamning av den Totala Vertikala Hojden',
133
+ level: 3,
134
+ },
135
+ {
136
+ type: 'list',
137
+ items: [
138
+ '<strong>Djup pa Ankarplatsen:</strong> Ekolodets djup plus batens djupgaende.',
139
+ '<strong>Fribord vid Staven:</strong> Avstandet fran vattenytan upp till bogrullen.',
140
+ '<strong>Tidvattenshojd:</strong> Maximal vattenstigning vid hogvatten.',
141
+ ],
142
+ },
143
+ {
144
+ type: 'title',
145
+ text: 'Tabell over Rekommenderade Forhallanden',
146
+ level: 3,
147
+ },
148
+ {
149
+ type: 'table',
150
+ headers: ['Utrustningstyp', 'Lugnt Vader (<15 kn)', 'Frisk Bris (15-25 kn)', 'Hard Vind (>30 kn)'],
151
+ rows: [
152
+ ['<strong>Enbart Katting</strong>', 'Forhallande 4:1', 'Forhallande 5:1', 'Forhallande 7:1'],
153
+ ['<strong>Kombinerad Katting-Lina</strong>', 'Forhallande 5:1', 'Forhallande 7:1', 'Forhallande 8:1 till 10:1'],
154
+ ['<strong>Enbart Textillina</strong>', 'Forhallande 7:1', 'Forhallande 8:1', 'Forhallande 10:1 till 12:1'],
155
+ ],
156
+ },
157
+ {
158
+ type: 'tip',
159
+ title: 'Skydda Ankarpelet',
160
+ html: 'Lat aldrig ankardraget belasta ankarpelets kabbelaris direkt. Anvand alltid en avlastande snubberlina fast i en knap.',
161
+ },
162
+ {
163
+ type: 'paragraph',
164
+ html: 'Kontrollera prognosen och det verkliga sjöläget före avfärd.',
165
+ },
166
+ {
167
+ type: 'paragraph',
168
+ html: 'Kontrollera djupmarginalen och lämna en säkerhetsreserv.',
169
+ },
170
+ {
171
+ type: 'paragraph',
172
+ html: 'Skriv ner värdena så att beräkningen kan upprepas senare.',
173
+ },
174
+ {
175
+ type: 'paragraph',
176
+ html: 'Jämför flera scenarier när vind eller ström förändras.',
177
+ },
178
+ {
179
+ type: 'paragraph',
180
+ html: 'Beräkningen hjälper planeringen men ersätter inte uppsikt ombord.',
181
+ },
182
+ ];
183
+
184
+ const schemas: AnchorScopeLocaleContent['schemas'] = [
185
+ {
186
+ '@context': 'https://schema.org',
187
+ '@type': 'SoftwareApplication',
188
+ name: title,
189
+ description,
190
+ applicationCategory: 'UtilityApplication',
191
+ operatingSystem: 'Web',
192
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
193
+ } as WithContext<SoftwareApplication>,
194
+ {
195
+ '@context': 'https://schema.org',
196
+ '@type': 'FAQPage',
197
+ mainEntity: faq.map((item) => ({
198
+ '@type': 'Question',
199
+ name: item.question,
200
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
201
+ })),
202
+ } as WithContext<FAQPage>,
203
+ {
204
+ '@context': 'https://schema.org',
205
+ '@type': 'HowTo',
206
+ name: `Instruktion: ${title}`,
207
+ step: howTo.map((s) => ({ '@type': 'HowToStep', name: s.name, text: s.text })),
208
+ } as WithContext<HowTo>,
209
+ ];
210
+
211
+ export const content: AnchorScopeLocaleContent = {
212
+ slug,
213
+ title,
214
+ description,
215
+ ui,
216
+ seo,
217
+ faq,
218
+ bibliography,
219
+ howTo,
220
+ schemas,
221
+ };
@@ -0,0 +1,221 @@
1
+ import { bibliography } from '../bibliography';
2
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
3
+ import type { AnchorScopeLocaleContent } from '../entry';
4
+ import type { AnchorScopeUI } from '../ui';
5
+
6
+ const slug = 'demir-zincir-uzunlugu-hesaplayici';
7
+ const title = 'Demirleme Zincir Uzunluğu ve Salınım Yarıçapı';
8
+ const description =
9
+ 'Su derinliği, baş bodoslama yüksekliği ve dip yapısına göre güvenli demirleme için gereken ideal kaloma oranını ve salınım yarıçapını hesaplayın.';
10
+
11
+ const ui: AnchorScopeUI = {
12
+ parametersTitle: 'Parametreler',
13
+ waterDepthLabel: 'Harita Derinliği',
14
+ bowHeightLabel: 'Baş Bodoslama Yüksekliği',
15
+ tideRangeLabel: 'Gelgit Farkı',
16
+ boatLengthLabel: 'Tekne Boyu (LOA)',
17
+ rodeTypeLabel: 'Demirleme Donanımı',
18
+ windConditionLabel: 'Rüzgar ve Hava Durumu',
19
+ seabedTypeLabel: 'Dip Yapısı',
20
+ presetProtected: 'Korumalı Koy',
21
+ presetOpen: 'Açık Deniz',
22
+ presetStorm: 'Fırtına Uyarısı',
23
+ seabedTag: 'Dip Tutunma Katsayısı',
24
+ catenaryTag: 'Zincir Eğimi Sönümü',
25
+ unitM: 'm',
26
+ unitFt: 'ft',
27
+ unitMeters: 'Metrik (m)',
28
+ unitFeet: 'İngiliz (ft)',
29
+ allChainOption: 'Tamamı Zincir (Ağır Katener)',
30
+ ropeChainOption: 'Halat ve Zincir Karışımı',
31
+ allRopeOption: 'Tamamı Halat',
32
+ calmWindOption: 'Sakin / Hafif Rüzgar (< 15 knot)',
33
+ moderateWindOption: 'Mutedil Rüzgar (15 - 25 knot)',
34
+ strongWindOption: 'Kuvvetli Rüzgar (25 - 35 knot)',
35
+ stormWindOption: 'Sert Fırtına (> 35 knot)',
36
+ sandOption: 'Kum (Mükemmel Tutunma)',
37
+ mudOption: 'Çamur / Balçık (İyi Tutunma)',
38
+ clayOption: 'Sert Kil (Çok İyi)',
39
+ gravelOption: 'Çakıl / Taşlık (Orta)',
40
+ rockOption: 'Kayalık (Takılma Riski)',
41
+ weedOption: 'Erişte / Yosun (Zayıf)',
42
+ resultsTitle: 'Demirleme Analizi ve Ölçüler',
43
+ scopeRatioLabel: 'Efektif Kaloma Oranı (Scope)',
44
+ totalDepthLabel: 'Toplam Dikey Yükseklik',
45
+ recommendedRodeLabel: 'Kaloma Edilecek Zincir',
46
+ horizontalDistanceLabel: 'Yatay Mesafe',
47
+ swingRadiusLabel: 'Tahmini Salınım Yarıçapı',
48
+ minSafeRodeLabel: 'Sakin Havada Minimum',
49
+ heavyWeatherRodeLabel: 'Fırtınada Zincir Boyu',
50
+ statusOptimalTitle: 'Güvenli ve Sağlam Demirleme',
51
+ statusOptimalDesc: 'Hesaplanan uzunluk darbe emici zincir eğimi ve yatay çekme açısı sağlar.',
52
+ statusCautionTitle: 'Kabul Edilebilir: Rüzgarı İzleyin',
53
+ statusCautionDesc: 'Mutedil hava için uygundur. Rüzgar veya dalga artarsa daha fazla kaloma verin.',
54
+ statusDangerTitle: 'Yetersiz Kaloma: Tarama Riski',
55
+ statusDangerDesc: 'Kritik oran. Çapanın memesi yukarı çekilerek zeminden kurtulabilir.',
56
+ adviceSand: 'Kum zeminde çapanın tırnakları mükemmel gömülür. Tornistan ile demiri oturtun.',
57
+ adviceMud: 'Yumuşak çamur geniş tırnak ve sert tabakaya ulaşmak için daha uzun zincir gerektirir.',
58
+ adviceClay: 'Sert kil mükemmel tutar ancak çapanın saplanması için sivri uçlu olması gerekir.',
59
+ adviceGravel: 'Gevşek çakıl dalga darbesinde kayar. Zincir boyunu en az yüzde 25 artırın.',
60
+ adviceRock: 'Demirin takılma riski yüksektir. Kurtarmak için her zaman amele halatı ve şamandıra kullanın.',
61
+ adviceWeed: 'Yoğun erişte çapanın saplanmasını önler. Tornistanla tutunmayı dikkatle test edin.',
62
+ catenaryAllChain: 'Zincirin ağırlığı dalga darbelerini sönümleyen bir eğim oluşturur ve çekmeyi düz tutar.',
63
+ catenaryRopeChain: 'Karışım halat ağırlık eksikliğini telafi etmek için en az 7 ye 1 oran gerektirir.',
64
+ catenaryAllRope: 'Hafif halat çapanın memesini yukarı kaldırmamak için 8 e 1 veya daha fazla kaloma ister.',
65
+ resetButton: 'Sıfırla',
66
+ visualProfileTitle: 'Zincir Eğim Profili',
67
+ waterlineLabel: 'Su Hattı',
68
+ seabedLabel: 'Deniz Dibi',
69
+ anchorLabel: 'Çapa / Demir',
70
+ catenaryCurveLabel: 'Zincir Yayı',
71
+ swingCircleLabel: 'Salınım Çemberi',
72
+ };
73
+
74
+ const faq: AnchorScopeLocaleContent['faq'] = [
75
+ {
76
+ question: 'Demirlemede kaloma oranı scope ne anlama gelir?',
77
+ answer: 'Kaloma oranı, denize serilen toplam zincir boyunun deniz dibinden baş makarasına kadar olan toplam dikey mesafeye oranıdır.',
78
+ },
79
+ {
80
+ question: 'Neden baş yüksekliği ve gelgit derinliğe eklenmelidir?',
81
+ answer: 'İskandil sadece omurga altındaki suyu ölçer. Baş yüksekliği ve gece yükselen gelgit dikey mesafeyi büyük oranda artırır.',
82
+ },
83
+ {
84
+ question: 'Zincir ile halat arasındaki kaloma oranı farkı nedir?',
85
+ answer: 'Ağır zincir katener yayı yaparak 4:1 veya 5:1 kaloma ile tutar. Hafif halat gergin çektiği için 7:1 ila 10:1 gerektirir.',
86
+ },
87
+ {
88
+ question: 'Salınım yarıçapı nasıl hesaplanır?',
89
+ answer: 'Pisagor teoremiyle yatay zincir mesafesi bulunur, üzerine tekne boyu ve 3-5 metrelik güvenlik payı eklenir.',
90
+ },
91
+ {
92
+ question: 'Deniz dibi yapısı tutunmayı nasıl etkiler?',
93
+ answer: 'Kum ve kil en güçlü tutunmayı sağlar. Erişte ve kayalık zeminlerde daha fazla zincir ve özenli denetim gerekir.',
94
+ },
95
+ {
96
+ question: 'Zincir boşluğu snubber halatının görevi nedir?',
97
+ answer: 'Irgatı dalga sarsıntılarından korur ve zincirin tekneye ilettiği gürültüyü keser.',
98
+ },
99
+ ];
100
+
101
+ const howTo: AnchorScopeLocaleContent['howTo'] = [
102
+ {
103
+ name: 'Derinliği ve baş bodoslama yüksekliğini ölçmek',
104
+ text: 'Demir yerindeki derinliği saptayın ve baş makarasının su üstündeki yüksekliğini ekleyin.',
105
+ },
106
+ {
107
+ name: 'Gelgit farkını dahil etmek',
108
+ text: 'Konaklama süresince beklenen maksimum gelgit yükselişini hesaplamaya katın.',
109
+ },
110
+ {
111
+ name: 'Donanım ve rüzgar şiddetini seçmek',
112
+ text: 'Zincir veya halat donanımınızı ve beklenen rüzgara göre katsayıyı belirleyin.',
113
+ },
114
+ {
115
+ name: 'Kaloma vermek ve demiri gömmek',
116
+ text: 'Hesaplanan miktarda zincir kaloma edin ve tornistanla demiri zemine iyice oturtun.',
117
+ },
118
+ ];
119
+
120
+ const seo: AnchorScopeLocaleContent['seo'] = [
121
+ {
122
+ type: 'title',
123
+ text: 'Güvenli Demirleme İçin Zincir Uzunluğu ve Salınım Hesabı',
124
+ level: 2,
125
+ },
126
+ {
127
+ type: 'paragraph',
128
+ html: 'Denizde güvenliğin ilk kuralı doğru demir atmaktır. Yetersiz kaloma oranı, çapanın taramasına ve gece çatışmalarına yol açar. Doğru <strong>kaloma oranı</strong> ile fırtınalı gecelerde dahi tekneniz emniyette kalır.',
129
+ },
130
+ {
131
+ type: 'title',
132
+ text: 'Toplam Dikey Mesafenin Hesaplanması',
133
+ level: 3,
134
+ },
135
+ {
136
+ type: 'list',
137
+ items: [
138
+ '<strong>İskandil Derinliği:</strong> Dip derinliği artı teknenin su çekimi.',
139
+ '<strong>Baş Bodoslama Yüksekliği:</strong> Su hattı ile baş makarası arasındaki yükseklik.',
140
+ '<strong>Gelgit Yükselişi:</strong> Yüksek suda oluşacak su seviyesi artışı.',
141
+ ],
142
+ },
143
+ {
144
+ type: 'title',
145
+ text: 'Önerilen Kaloma Oranları Tablosu',
146
+ level: 3,
147
+ },
148
+ {
149
+ type: 'table',
150
+ headers: ['Donanım Türü', 'Sakin Hava (<15 knot)', 'Mutedil Rüzgar (15-25 knot)', 'Sert Fırtına (>30 knot)'],
151
+ rows: [
152
+ ['<strong>Tamamı Zincir</strong>', '4:1 Oranı', '5:1 Oranı', '7:1 Oranı'],
153
+ ['<strong>Halat-Zincir Karışımı</strong>', '5:1 Oranı', '7:1 Oranı', '8:1 ila 10:1'],
154
+ ['<strong>Tamamı Halat</strong>', '7:1 Oranı', '8:1 Oranı', '10:1 ila 12:1'],
155
+ ],
156
+ },
157
+ {
158
+ type: 'tip',
159
+ title: 'Demir Irgatının Korunması',
160
+ html: 'Yükünü hiçbir zaman doğrudan ırgatın kavaletası üzerine bırakmayın. Daima koçboynuzuna bağlı esnek bir snubber halatı kullanın.',
161
+ },
162
+ {
163
+ type: 'paragraph',
164
+ html: 'Seferden önce tahmin ile gerçek deniz durumunu birlikte değerlendirin.',
165
+ },
166
+ {
167
+ type: 'paragraph',
168
+ html: 'Derinlik payını kontrol edin ve güvenli bir rezerv bırakın.',
169
+ },
170
+ {
171
+ type: 'paragraph',
172
+ html: 'Sonuçları daha sonra karşılaştırmak için giriş değerlerini kaydedin.',
173
+ },
174
+ {
175
+ type: 'paragraph',
176
+ html: 'Rüzgar veya akıntı değiştiğinde birkaç senaryoyu karşılaştırın.',
177
+ },
178
+ {
179
+ type: 'paragraph',
180
+ html: 'Bu hesap planlamaya yardımcı olur, ancak teknedeki gözlemin yerini tutmaz.',
181
+ },
182
+ ];
183
+
184
+ const schemas: AnchorScopeLocaleContent['schemas'] = [
185
+ {
186
+ '@context': 'https://schema.org',
187
+ '@type': 'SoftwareApplication',
188
+ name: title,
189
+ description,
190
+ applicationCategory: 'UtilityApplication',
191
+ operatingSystem: 'Web',
192
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
193
+ } as WithContext<SoftwareApplication>,
194
+ {
195
+ '@context': 'https://schema.org',
196
+ '@type': 'FAQPage',
197
+ mainEntity: faq.map((item) => ({
198
+ '@type': 'Question',
199
+ name: item.question,
200
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
201
+ })),
202
+ } as WithContext<FAQPage>,
203
+ {
204
+ '@context': 'https://schema.org',
205
+ '@type': 'HowTo',
206
+ name: `Kılavuz: ${title}`,
207
+ step: howTo.map((s) => ({ '@type': 'HowToStep', name: s.name, text: s.text })),
208
+ } as WithContext<HowTo>,
209
+ ];
210
+
211
+ export const content: AnchorScopeLocaleContent = {
212
+ slug,
213
+ title,
214
+ description,
215
+ ui,
216
+ seo,
217
+ faq,
218
+ bibliography,
219
+ howTo,
220
+ schemas,
221
+ };