@jjlmoya/utils-drones 1.14.0 → 1.16.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 (93) hide show
  1. package/package.json +1 -1
  2. package/src/category/index.ts +2 -1
  3. package/src/entries.ts +4 -1
  4. package/src/index.ts +1 -0
  5. package/src/pages/[locale]/[slug].astro +30 -14
  6. package/src/tests/locale_completeness.test.ts +4 -22
  7. package/src/tests/shared-test-helpers.ts +56 -0
  8. package/src/tests/tool_exports.test.ts +34 -0
  9. package/src/tests/tool_validation.test.ts +2 -2
  10. package/src/tool/antenna-length-calculator/bibliography.astro +3 -11
  11. package/src/tool/antenna-length-calculator/bibliography.ts +6 -0
  12. package/src/tool/antenna-length-calculator/i18n/de.ts +2 -8
  13. package/src/tool/antenna-length-calculator/i18n/en.ts +2 -8
  14. package/src/tool/antenna-length-calculator/i18n/es.ts +2 -8
  15. package/src/tool/antenna-length-calculator/i18n/fr.ts +2 -8
  16. package/src/tool/antenna-length-calculator/i18n/id.ts +2 -8
  17. package/src/tool/antenna-length-calculator/i18n/it.ts +2 -8
  18. package/src/tool/antenna-length-calculator/i18n/ja.ts +2 -8
  19. package/src/tool/antenna-length-calculator/i18n/ko.ts +2 -8
  20. package/src/tool/antenna-length-calculator/i18n/nl.ts +2 -8
  21. package/src/tool/antenna-length-calculator/i18n/pl.ts +2 -8
  22. package/src/tool/antenna-length-calculator/i18n/pt.ts +2 -8
  23. package/src/tool/antenna-length-calculator/i18n/ru.ts +2 -8
  24. package/src/tool/antenna-length-calculator/i18n/sv.ts +2 -8
  25. package/src/tool/antenna-length-calculator/i18n/tr.ts +2 -8
  26. package/src/tool/antenna-length-calculator/i18n/zh.ts +2 -8
  27. package/src/tool/antenna-length-calculator/seo.astro +2 -26
  28. package/src/tool/drone-flight-time/bibliography.astro +3 -11
  29. package/src/tool/drone-flight-time/bibliography.ts +7 -0
  30. package/src/tool/drone-flight-time/i18n/de.ts +2 -9
  31. package/src/tool/drone-flight-time/i18n/en.ts +2 -9
  32. package/src/tool/drone-flight-time/i18n/es.ts +2 -9
  33. package/src/tool/drone-flight-time/i18n/fr.ts +2 -9
  34. package/src/tool/drone-flight-time/i18n/id.ts +2 -9
  35. package/src/tool/drone-flight-time/i18n/it.ts +2 -9
  36. package/src/tool/drone-flight-time/i18n/ja.ts +2 -9
  37. package/src/tool/drone-flight-time/i18n/ko.ts +2 -9
  38. package/src/tool/drone-flight-time/i18n/nl.ts +2 -9
  39. package/src/tool/drone-flight-time/i18n/pl.ts +2 -9
  40. package/src/tool/drone-flight-time/i18n/pt.ts +2 -9
  41. package/src/tool/drone-flight-time/i18n/ru.ts +2 -9
  42. package/src/tool/drone-flight-time/i18n/sv.ts +2 -9
  43. package/src/tool/drone-flight-time/i18n/tr.ts +2 -9
  44. package/src/tool/drone-flight-time/i18n/zh.ts +2 -9
  45. package/src/tool/drone-flight-time/seo.astro +2 -18
  46. package/src/tool/drone-power-analyzer/bibliography.astro +6 -0
  47. package/src/tool/drone-power-analyzer/bibliography.ts +7 -0
  48. package/src/tool/drone-power-analyzer/component.astro +210 -0
  49. package/src/tool/drone-power-analyzer/components/FlightProfile.astro +37 -0
  50. package/src/tool/drone-power-analyzer/components/MotorConfig.astro +46 -0
  51. package/src/tool/drone-power-analyzer/components/PowerGauge.astro +48 -0
  52. package/src/tool/drone-power-analyzer/components/WeightConfig.astro +49 -0
  53. package/src/tool/drone-power-analyzer/drone-power-analyzer.css +535 -0
  54. package/src/tool/drone-power-analyzer/entry.ts +29 -0
  55. package/src/tool/drone-power-analyzer/i18n/de.ts +203 -0
  56. package/src/tool/drone-power-analyzer/i18n/en.ts +203 -0
  57. package/src/tool/drone-power-analyzer/i18n/es.ts +203 -0
  58. package/src/tool/drone-power-analyzer/i18n/fr.ts +203 -0
  59. package/src/tool/drone-power-analyzer/i18n/id.ts +203 -0
  60. package/src/tool/drone-power-analyzer/i18n/it.ts +203 -0
  61. package/src/tool/drone-power-analyzer/i18n/ja.ts +203 -0
  62. package/src/tool/drone-power-analyzer/i18n/ko.ts +203 -0
  63. package/src/tool/drone-power-analyzer/i18n/nl.ts +203 -0
  64. package/src/tool/drone-power-analyzer/i18n/pl.ts +203 -0
  65. package/src/tool/drone-power-analyzer/i18n/pt.ts +203 -0
  66. package/src/tool/drone-power-analyzer/i18n/ru.ts +203 -0
  67. package/src/tool/drone-power-analyzer/i18n/sv.ts +203 -0
  68. package/src/tool/drone-power-analyzer/i18n/tr.ts +203 -0
  69. package/src/tool/drone-power-analyzer/i18n/zh.ts +203 -0
  70. package/src/tool/drone-power-analyzer/index.ts +8 -0
  71. package/src/tool/drone-power-analyzer/seo.astro +15 -0
  72. package/src/tool/gps-coordinates-converter/bibliography.astro +3 -11
  73. package/src/tool/gps-coordinates-converter/bibliography.ts +12 -0
  74. package/src/tool/gps-coordinates-converter/components/GpsMap.astro +3 -2
  75. package/src/tool/gps-coordinates-converter/gps-coordinates-converter.css +196 -188
  76. package/src/tool/gps-coordinates-converter/i18n/de.ts +35 -36
  77. package/src/tool/gps-coordinates-converter/i18n/en.ts +4 -14
  78. package/src/tool/gps-coordinates-converter/i18n/es.ts +4 -14
  79. package/src/tool/gps-coordinates-converter/i18n/fr.ts +4 -14
  80. package/src/tool/gps-coordinates-converter/i18n/id.ts +36 -37
  81. package/src/tool/gps-coordinates-converter/i18n/it.ts +35 -36
  82. package/src/tool/gps-coordinates-converter/i18n/ja.ts +19 -20
  83. package/src/tool/gps-coordinates-converter/i18n/ko.ts +20 -21
  84. package/src/tool/gps-coordinates-converter/i18n/nl.ts +33 -36
  85. package/src/tool/gps-coordinates-converter/i18n/pl.ts +19 -20
  86. package/src/tool/gps-coordinates-converter/i18n/pt.ts +19 -20
  87. package/src/tool/gps-coordinates-converter/i18n/ru.ts +19 -20
  88. package/src/tool/gps-coordinates-converter/i18n/sv.ts +19 -20
  89. package/src/tool/gps-coordinates-converter/i18n/tr.ts +19 -20
  90. package/src/tool/gps-coordinates-converter/i18n/zh.ts +20 -21
  91. package/src/tool/gps-coordinates-converter/seo.astro +2 -26
  92. package/src/tools.ts +3 -0
  93. package/src/types.ts +1 -3
@@ -0,0 +1,203 @@
1
+ import type { DronePowerAnalyzerLocaleContent } from '../index';
2
+ import type { WithContext, SoftwareApplication, FAQPage, HowTo } from 'schema-dts';
3
+ import { bibliography } from '../bibliography';
4
+
5
+ const slug = 'drona-kraft-analysator';
6
+ const title = 'Drone Power Analyzer: Kraft och vikt förhållande kalkylator för FPV';
7
+ const description = 'Beräkna det kritiska kraft-vikt-förhållandet för ditt FPV-drönarbygge. Få omedelbara rekommendationer för flygprofiler, visuell effektmätare och optimera för cinematic, freestyle eller racing.';
8
+
9
+ const faqItems = [
10
+ {
11
+ question: 'Vad är kraft-vikt-förhållande och varför är det viktigt?',
12
+ answer: 'Kraft-vikt-förhållandet (Thrust-to-Weight ratio) är den totala dragkraften din drönare kan producera delat med dess totala startvikt (AUW). Det är det enskilt viktigaste mätvärdet som avgör hur din drönare känns att flyga – från långsam och stabil (cinematografi) till ultra-responsiv (racing).',
13
+ },
14
+ {
15
+ question: 'Vad är det ideala förhållandet ("sweet spot") för freestyle-flygning?',
16
+ answer: 'För smidig freestyle-flygning ligger det ideala förhållandet mellan 4:1 och 6:1. Ett 4:1-förhållande ger utmärkt rörlighet med god stabilitet, medan 6:1 är extremt responsivt men kräver mer finess med gasreglaget i trånga utrymmen.',
17
+ },
18
+ {
19
+ question: 'Kan jag använda detta för cinematic-byggen?',
20
+ answer: 'Ja. För mjuka, långsamma filmsekvenser bör du sikta på ett förhållande mellan 2:1 och 3:1. Detta håller drönaren stabil och förutsägbar. Allt lägre blir svårt att kontrollera; allt högre kommer att kännas för nervöst för långsamma rörelser.',
21
+ },
22
+ {
23
+ question: 'Vad händer om mitt förhållande är över 8:1?',
24
+ answer: 'Över 8:1 är din drönare i praktiken en racingmaskin – extremt reaktiv och krävande att flyga. Endast erfarna piloter bör försöka sig på dessa byggen. Utmärkt för racing-gates och hastighetskörningar, men farligt inomhus.',
25
+ },
26
+ {
27
+ question: 'Ska jag inkludera batterivikten i AUW?',
28
+ answer: 'Ja. AUW (All-Up Weight) är den totala vikten för din drönare med alla komponenter installerade: ram, motorer, ESC:er, flight controller, kamera, batteri, propellrar – allt. Använd batteri-presets för att lägga till vikt direkt.',
29
+ },
30
+ ];
31
+
32
+ const howToSteps = [
33
+ {
34
+ name: 'Välj motorkonfiguration',
35
+ text: 'Välj om ditt bygge är en Quad (4), Hexa (6) eller Octo (8) motorkonfiguration. Denna multiplikator är avgörande för den totala dragkraften.',
36
+ },
37
+ {
38
+ name: 'Ange motorkraft',
39
+ text: 'Ange den maximala dragkraften varje motor kan producera (i gram). Du hittar detta i motorspecifikationerna eller använd snabbinställningarna.',
40
+ },
41
+ {
42
+ name: 'Ställ in totalvikt',
43
+ text: 'Ange din drönares totala startvikt (AUW) – ram, motorer, batteri, kamera, allt. Använd batteri-presets för omedelbar viktjustering.',
44
+ },
45
+ {
46
+ name: 'Läs av dina resultat',
47
+ text: 'Kalkylatorn visar omedelbart ditt kraft-vikt-förhållande, lämplighet för flygprofil (Cinematic, Freestyle, Racing) och en personlig rekommendation.',
48
+ },
49
+ ];
50
+
51
+ const schemas: DronePowerAnalyzerLocaleContent['schemas'] = [
52
+ {
53
+ '@context': 'https://schema.org',
54
+ '@type': 'FAQPage',
55
+ mainEntity: faqItems.map((item) => ({
56
+ '@type': 'Question',
57
+ name: item.question,
58
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
59
+ })),
60
+ } as WithContext<FAQPage>,
61
+ {
62
+ '@context': 'https://schema.org',
63
+ '@type': 'HowTo',
64
+ name: title,
65
+ description: description,
66
+ step: howToSteps.map((step, i) => ({
67
+ '@type': 'HowToStep',
68
+ position: i + 1,
69
+ name: step.name,
70
+ text: step.text,
71
+ })),
72
+ } as WithContext<HowTo>,
73
+ {
74
+ '@context': 'https://schema.org',
75
+ '@type': 'SoftwareApplication',
76
+ name: title,
77
+ description: description,
78
+ applicationCategory: 'OtherApplication',
79
+ operatingSystem: 'Web',
80
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
81
+ } as WithContext<SoftwareApplication>,
82
+ ];
83
+
84
+ export const content: DronePowerAnalyzerLocaleContent = {
85
+ slug,
86
+ title,
87
+ description,
88
+ ui: {
89
+ motorConfiguration: 'Motorkonfiguration',
90
+ motorCount: 'Antal motorer',
91
+ thrustPerMotor: 'Kraft per motor (max)',
92
+ thrustUnit: 'g',
93
+ quad: 'Quad (4)',
94
+ hexa: 'Hexa (6)',
95
+ octo: 'Octo (8)',
96
+ motorPresets: 'Snabbinställningar motor',
97
+ presetMotor450: '2204 2300kv (4S) ~450g',
98
+ presetMotor600: '2306 2450kv (4S) ~600g',
99
+ presetMotor850: '2306 2450kv (6S) ~850g',
100
+ presetMotor1000: '2507 1850kv (6S) ~1000g',
101
+ weightConfiguration: 'Viktkonfiguration',
102
+ auwLabel: 'Total startvikt (AUW)',
103
+ weightUnit: 'g',
104
+ switchToLbs: 'Växla till lbs',
105
+ switchToGrams: 'Växla till g',
106
+ batteryPresets: 'Lägg till batterivikt',
107
+ presetTattu4s: 'Tattu 4S 1550mAh (+182g)',
108
+ presetTattu6s: 'Tattu 6S 1100mAh (+231g)',
109
+ presetGnb4s: 'GNB 4S 850mAh (+118g)',
110
+ presetGnb6s: 'GNB 6S 1100mAh (+205g)',
111
+ totalThrust: 'Total dragkraft',
112
+ twRatio: 'Kraft-vikt-förhållande',
113
+ powerMeter: 'Effektmätare',
114
+ flightProfiles: 'Bedömning av flygprofil',
115
+ cinematicLabel: 'Cinematic',
116
+ freestyleLabel: 'Freestyle',
117
+ racingLabel: 'Racing',
118
+ proRacingLabel: 'Pro Racing',
119
+ suitable: 'Lämplig',
120
+ notSuitable: 'Inte lämplig',
121
+ recommendationLabel: 'Rekommendation av flygstil',
122
+ recommendation_low: 'Med ett förhållande under 2:1 kommer din drönare att ha problem med stabiliteten. Överväg att minska vikten eller uppgradera motorerna för bättre prestanda.',
123
+ recommendation_cinematic: 'Med ett förhållande på {ratio}:1 är detta idealiskt för tung cinematic-flygning med mjuka, kontrollerade rörelser. Perfekt för långsamt, medvetet kameraarbete.',
124
+ recommendation_freestyle: 'Med ett förhållande på {ratio}:1 är detta det ideala läget för freestyle-flygning. Utmärkt rörlighet med bibehållen stabilitet för trick.',
125
+ recommendation_racing: 'Med ett förhållande på {ratio}:1 befinner vi oss i prestanda-freestyle-territorium. Gasreglering är avgörande i trånga utrymmen och vid höghastighetsmanövrer.',
126
+ recommendation_extreme: 'Med ett förhållande på {ratio}:1 är detta en racingmaskin. Extremt reaktiv – endast för erfarna piloter i öppna områden.',
127
+ compareMode: 'Jämför byggen',
128
+ scenario1: 'Bygge A',
129
+ scenario2: 'Bygge B',
130
+ addComparison: 'Lägg till jämförelse',
131
+ tooltipTWRatio: 'Kraft-vikt-förhållandet är den totala dragkraften dividerat med drönarens vikt. Ett högre förhållande innebär snabbare acceleration och mer responsiv kontroll.',
132
+ tooltipFreestyle: 'Det ideala förhållandet för freestyle-flygning är 4:1 till 6:1, vilket ger den bästa balansen mellan rörlighet och kontroll.',
133
+ badge_unstable: 'Ostabil',
134
+ badge_cinematic: 'Cinematic',
135
+ badge_sweetSpot: 'Idealisk',
136
+ badge_racing: 'Racing',
137
+ badge_extreme: 'Extrem',
138
+ batteryName_tattu4s: 'Tattu 4S',
139
+ batteryName_tattu6s: 'Tattu 6S',
140
+ batteryName_gnb4s: 'GNB 4S',
141
+ batteryName_gnb6s: 'GNB 6S',
142
+ },
143
+ seo: [
144
+ {
145
+ type: 'title',
146
+ text: 'Förstå kraft-vikt-förhållande för FPV-drönare',
147
+ level: 2,
148
+ },
149
+ {
150
+ type: 'paragraph',
151
+ html: '<strong>Kraft-vikt-förhållandet</strong> är kanske det enskilt viktigaste mätvärdet när man bygger FPV-drönare. Ändå förbises det av många piloter, vilket leder till byggen som inte beter sig som förväntat. Denna kalkylator reder ut begreppen och visar exakt hur ditt bygge kommer att kännas att flyga.',
152
+ },
153
+ {
154
+ type: 'title',
155
+ text: 'Varför kraft-vikt-förhållandet är viktigt',
156
+ level: 3,
157
+ },
158
+ {
159
+ type: 'paragraph',
160
+ html: 'Din drönares förhållande avgör tre grundläggande saker: <strong>stabilitet</strong>, <strong>responsivitet</strong> och <strong>hastighet</strong>. Ett 2:1-förhållande känns trögt och stabilt. Ett 6:1-förhållande känns nervöst och rörligt. Ett 10:1-förhållande är en racingmaskin. Genom att förstå var ditt bygge hamnar på detta spektrum kan du välja rätt flygstil och sätta realistiska förväntningar.',
161
+ },
162
+ {
163
+ type: 'title',
164
+ text: 'Flygprofiler förklarade',
165
+ level: 3,
166
+ },
167
+ {
168
+ type: 'list',
169
+ items: [
170
+ '<strong>Cinematic (2:1 – 4:1)</strong>: Tung, stabil, långsam. Idealiskt för mjuka kamerarörelser och byggen som bär tung last.',
171
+ '<strong>Freestyle (3.5:1 – 6.5:1)</strong>: Det balanserade idealläget. Responsivt nog för trick, stabilt nog för kontroll.',
172
+ '<strong>Racing (5:1 – 8:1)</strong>: Snabb och rörlig. Designad för racing-gates och aggressiva manövrer.',
173
+ '<strong>Pro Racing (7:1+)</strong>: Extrem prestanda. Endast för expertpiloter i öppna områden.',
174
+ ],
175
+ },
176
+ {
177
+ type: 'title',
178
+ text: 'Hur man beräknar kraft-vikt-förhållandet',
179
+ level: 3,
180
+ },
181
+ {
182
+ type: 'paragraph',
183
+ html: 'Formeln är enkel: <strong>förhållande = (Kraft per motor × Antal motorer) / Total startvikt</strong>. Till exempel, en Quad med 600g-motorer (2 400g total dragkraft) som väger 800g ger ett 3:1-förhållande. Detta är freestyle-territorium.',
184
+ },
185
+ {
186
+ type: 'title',
187
+ text: 'Välja rätt förhållande för ditt bygge',
188
+ level: 3,
189
+ },
190
+ {
191
+ type: 'paragraph',
192
+ html: 'Fråga dig själv: <em>Hur ska jag flyga?</em> Långsamma cinematic-bilder? Aggressiva freestyle-trick? Höghastighetsracing? Ditt svar avgör ditt ideala förhållande. De flesta FPV-piloter hamnar mellan 4:1 och 6:1 eftersom det erbjuder den bästa kompromissen mellan kontroll och spänning.',
193
+ },
194
+ {
195
+ type: 'paragraph',
196
+ html: 'Kom ihåg: ett högre förhållande betyder inte "bättre". Det betyder "mer responsivt". På en racingdrönare är det nödvändigt. På ett cinematic-bygge är det en nackdel. Välj med omsorg.',
197
+ },
198
+ ],
199
+ faq: faqItems,
200
+ bibliography,
201
+ howTo: howToSteps,
202
+ schemas,
203
+ };
@@ -0,0 +1,203 @@
1
+ import type { DronePowerAnalyzerLocaleContent } from '../index';
2
+ import type { WithContext, SoftwareApplication, FAQPage, HowTo } from 'schema-dts';
3
+ import { bibliography } from '../bibliography';
4
+
5
+ const slug = 'insansiz-guc-analizi';
6
+ const title = 'Drone Güç Analizörü: FPV için İtme ve Ağırlık Oranı Hesaplayıcı';
7
+ const description = 'FPV drone kurulumunuz için kritik itme-ağırlık oranını hesaplayın. Anında uçuş profili önerileri, görsel güç göstergesi alın ve sinematik, freestyle veya yarış için optimize edin.';
8
+
9
+ const faqItems = [
10
+ {
11
+ question: 'İtme-ağırlık oranı nedir ve neden önemlidir?',
12
+ answer: 'İtme-ağırlık oranı, dronunuzun üretebileceği toplam itme kuvvetinin toplam kalkış ağırlığına (AUW) bölünmesidir. Dronunuzun uçuş sırasında nasıl hissettireceğini belirleyen en önemli metriktir — yavaş ve stabil (sinematografi) ile ultra-tepkisel (yarış) arasında değişir.',
13
+ },
14
+ {
15
+ question: 'Freestyle uçuş için ideal oran ("sweet spot") nedir?',
16
+ answer: 'Akıcı freestyle uçuşu için ideal nokta 4:1 ile 6:1 arasındadır. 4:1 oranı iyi bir stabilite ile mükemmel çeviklik sağlarken, 6:1 oranı son derece tepkiseldir ancak dar alanlarda hassas gaz kontrolü gerektirir.',
17
+ },
18
+ {
19
+ question: 'Bunu sinematik çekim kurulumları için kullanabilir miyim?',
20
+ answer: 'Evet. Akıcı ve yavaş sinematik çekimler için 2:1 ile 3:1 arasında bir oran hedefleyin. Bu, dronun stabil ve öngörülebilir kalmasını sağlar. Daha düşük oranların kontrolü zorlaşırken, daha yüksek oranlar yavaş hareketler için fazla "hırçın" hissettirecektir.',
21
+ },
22
+ {
23
+ question: 'Oranım 8:1\'in üzerindeyse ne olur?',
24
+ answer: '8:1\'in üzerindeki oranlarda dronunuz tam bir yarış makinesidir — son derece tepkisel ve uçurması zordur. Sadece deneyimli pilotlar bu kurulumları denemelidir. Yarış kapıları ve hız denemeleri için harikadır, ancak iç mekanlarda tehlikelidir.',
25
+ },
26
+ {
27
+ question: 'Batarya ağırlığını AUW\'ye dahil etmeli miyim?',
28
+ answer: 'Evet. AUW (Toplam Kalkış Ağırlığı), tüm bileşenlerin kurulu olduğu dronun toplam ağırlığıdır: gövde, motorlar, ESC\'ler, uçuş kontrol kartı, kamera, batarya, pervaneler — her şey. Anında ağırlık eklemek için batarya hazır ayarlarını kullanın.',
29
+ },
30
+ ];
31
+
32
+ const howToSteps = [
33
+ {
34
+ name: 'Motor Konfigürasyonunu Seçin',
35
+ text: 'Kurulumunuzun Quad (4), Hexa (6) veya Octo (8) motor konfigürasyonu olup olmadığını seçin. Bu çarpan, toplam itme kuvveti için kritiktir.',
36
+ },
37
+ {
38
+ name: 'Motor İtme Kuvvetini Girin',
39
+ text: 'Her bir motorun üretebileceği maksimum itme kuvvetini (gram cinsinden) girin. Bunu motor teknik özelliklerinde bulabilir veya hızlı hazır ayarları kullanabilirsiniz.',
40
+ },
41
+ {
42
+ name: 'Toplam Ağırlığı Ayarlayın',
43
+ text: 'Dronunuzun toplam kalkış ağırlığını (AUW) girin — gövde, motorlar, batarya, kamera, her şey. Anında ağırlık ayarı için batarya hazır ayarlarını kullanın.',
44
+ },
45
+ {
46
+ name: 'Sonuçları Okuyun',
47
+ text: 'Hesaplayıcı anında itme-ağırlık oranınızı, uçuş profili uygunluğunu (Sinematik, Freestyle, Yarış) ve kurulumunuz için kişiselleştirilmiş bir öneri gösterir.',
48
+ },
49
+ ];
50
+
51
+ const schemas: DronePowerAnalyzerLocaleContent['schemas'] = [
52
+ {
53
+ '@context': 'https://schema.org',
54
+ '@type': 'FAQPage',
55
+ mainEntity: faqItems.map((item) => ({
56
+ '@type': 'Question',
57
+ name: item.question,
58
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
59
+ })),
60
+ } as WithContext<FAQPage>,
61
+ {
62
+ '@context': 'https://schema.org',
63
+ '@type': 'HowTo',
64
+ name: title,
65
+ description: description,
66
+ step: howToSteps.map((step, i) => ({
67
+ '@type': 'HowToStep',
68
+ position: i + 1,
69
+ name: step.name,
70
+ text: step.text,
71
+ })),
72
+ } as WithContext<HowTo>,
73
+ {
74
+ '@context': 'https://schema.org',
75
+ '@type': 'SoftwareApplication',
76
+ name: title,
77
+ description: description,
78
+ applicationCategory: 'OtherApplication',
79
+ operatingSystem: 'Web',
80
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
81
+ } as WithContext<SoftwareApplication>,
82
+ ];
83
+
84
+ export const content: DronePowerAnalyzerLocaleContent = {
85
+ slug,
86
+ title,
87
+ description,
88
+ ui: {
89
+ motorConfiguration: 'Motor Konfigürasyonu',
90
+ motorCount: 'Motor Sayısı',
91
+ thrustPerMotor: 'Motor Başına İtme (maks)',
92
+ thrustUnit: 'g',
93
+ quad: 'Quad (4)',
94
+ hexa: 'Hexa (6)',
95
+ octo: 'Octo (8)',
96
+ motorPresets: 'Hızlı Motor Hazır Ayarları',
97
+ presetMotor450: '2204 2300kv (4S) ~450g',
98
+ presetMotor600: '2306 2450kv (4S) ~600g',
99
+ presetMotor850: '2306 2450kv (6S) ~850g',
100
+ presetMotor1000: '2507 1850kv (6S) ~1000g',
101
+ weightConfiguration: 'Ağırlık Konfigürasyonu',
102
+ auwLabel: 'Toplam Kalkış Ağırlığı (AUW)',
103
+ weightUnit: 'g',
104
+ switchToLbs: 'lbs\'ye Geç',
105
+ switchToGrams: 'g\'ye Geç',
106
+ batteryPresets: 'Batarya Ağırlığı Ekle',
107
+ presetTattu4s: 'Tattu 4S 1550mAh (+182g)',
108
+ presetTattu6s: 'Tattu 6S 1100mAh (+231g)',
109
+ presetGnb4s: 'GNB 4S 850mAh (+118g)',
110
+ presetGnb6s: 'GNB 6S 1100mAh (+205g)',
111
+ totalThrust: 'Toplam İtme',
112
+ twRatio: 'İtme-Ağırlık Oranı',
113
+ powerMeter: 'Güç Göstergesi',
114
+ flightProfiles: 'Uçuş Profili Değerlendirmesi',
115
+ cinematicLabel: 'Sinematik',
116
+ freestyleLabel: 'Freestyle',
117
+ racingLabel: 'Yarış',
118
+ proRacingLabel: 'Pro Yarış',
119
+ suitable: 'Uygun',
120
+ notSuitable: 'Uygun Değil',
121
+ recommendationLabel: 'Uçuş Stili Önerisi',
122
+ recommendation_low: '2:1\'in altındaki bir oranla dronunuz stabilite sorunları yaşayacaktır. Daha iyi performans için ağırlığı azaltmayı veya motorları yükseltmeyi düşünün.',
123
+ recommendation_cinematic: '{ratio}:1 oranıyla bu, yumuşak ve kontrollü hareketlere sahip ağır sinematik çekimler için idealdir. Yavaş ve planlı kamera çalışmaları için mükemmeldir.',
124
+ recommendation_freestyle: '{ratio}:1 oranı, freestyle uçuş için ideal noktadır. Hareketler için stabiliteyi korurken mükemmel çeviklik sağlar.',
125
+ recommendation_racing: '{ratio}:1 oranıyla performans freestyle alanındasınız. Dar alanlarda ve yüksek hızlı manevralarda gaz kontrolü kritiktir.',
126
+ recommendation_extreme: '{ratio}:1 oranıyla bu bir yarış makinesidir. Son derece tepkiseldir — sadece açık alanlarda deneyimli pilotlar içindir.',
127
+ compareMode: 'Kurulumları Karşılaştır',
128
+ scenario1: 'Kurulum A',
129
+ scenario2: 'Kurulum B',
130
+ addComparison: 'Karşılaştırma Ekle',
131
+ tooltipTWRatio: 'İtme-ağırlık oranı, toplam itme kuvvetinin dronun ağırlığına bölünmesidir. Daha yüksek bir oran, daha hızlı ivmelenme ve daha tepkisel kontrol anlamına gelir.',
132
+ tooltipFreestyle: 'Freestyle uçuş için "ideal nokta" 4:1 ile 6:1 arasıdır; bu, çeviklik ve kontrol arasındaki en iyi dengeyi sağlar.',
133
+ badge_unstable: 'Stabil Değil',
134
+ badge_cinematic: 'Sinematik',
135
+ badge_sweetSpot: 'İdeal Nokta',
136
+ badge_racing: 'Yarış',
137
+ badge_extreme: 'Ekstrem',
138
+ batteryName_tattu4s: 'Tattu 4S',
139
+ batteryName_tattu6s: 'Tattu 6S',
140
+ batteryName_gnb4s: 'GNB 4S',
141
+ batteryName_gnb6s: 'GNB 6S',
142
+ },
143
+ seo: [
144
+ {
145
+ type: 'title',
146
+ text: 'FPV Dronlar için İtme-Ağırlık Oranını Anlamak',
147
+ level: 2,
148
+ },
149
+ {
150
+ type: 'paragraph',
151
+ html: '<strong>İtme-ağırlık oranı</strong>, FPV drone yapımında belki de en kritik metriklerden biridir. Ancak birçok pilot bunu göz ardı eder, bu da beklenen gibi davranmayan kurulumlara yol açar. Bu hesaplayıcı, hesaplamayı basitleştirir ve kurulumunuzun uçarken nasıl hissettireceğini size tam olarak gösterir.',
152
+ },
153
+ {
154
+ type: 'title',
155
+ text: 'İtme-Ağırlık Oranı Neden Önemlidir?',
156
+ level: 3,
157
+ },
158
+ {
159
+ type: 'paragraph',
160
+ html: 'Dronunuzun oranı üç temel şeyi belirler: <strong>stabilite</strong>, <strong>tepkisellik</strong> ve <strong>hız</strong>. 2:1 oranı hantal ve stabil hissettirir. 6:1 oranı hırçın ve çevik hissettirir. 10:1 oranı ise tam bir yarış makinesidir. Kurulumunuzun bu spektrumda nerede olduğunu anlamak, doğru uçuş stilini seçmenize yardımcı olur.',
161
+ },
162
+ {
163
+ type: 'title',
164
+ text: 'Uçuş Profilleri Açıklaması',
165
+ level: 3,
166
+ },
167
+ {
168
+ type: 'list',
169
+ items: [
170
+ '<strong>Sinematik (2:1 – 4:1)</strong>: Ağır, stabil, yavaş. Yumuşak kamera hareketleri ve yük taşıyan kurulumlar için idealdir.',
171
+ '<strong>Freestyle (3.5:1 – 6.5:1)</strong>: Dengeli ideal nokta. Hareketler için yeterince tepkisel, kontrol için yeterince stabildir.',
172
+ '<strong>Yarış (5:1 – 8:1)</strong>: Hızlı ve çevik. Yarış kapıları ve agresif manevralar için tasarlanmıştır.',
173
+ '<strong>Pro Yarış (7:1+)</strong>: Ekstrem performans. Sadece açık alanlarda uzman pilotlar içindir.',
174
+ ],
175
+ },
176
+ {
177
+ type: 'title',
178
+ text: 'İtme-Ağırlık Oranı Nasıl Hesaplanır?',
179
+ level: 3,
180
+ },
181
+ {
182
+ type: 'paragraph',
183
+ html: 'Formül basittir: <strong>oran = (Motor Başına İtme × Motor Sayısı) / Toplam Kalkış Ağırlığı</strong>. Örneğin, 800g ağırlığında, 600g itme gücüne sahip motorları olan bir Quad (2.400g toplam itme) 3:1 oranına sahiptir. Bu freestyle alanıdır.',
184
+ },
185
+ {
186
+ type: 'title',
187
+ text: 'Kurulumunuz İçin Doğru Oranı Seçmek',
188
+ level: 3,
189
+ },
190
+ {
191
+ type: 'paragraph',
192
+ html: 'Kendinize şunu sorun: <em>Nasıl uçacağım?</em> Yavaş sinematik çekimler mi? Agresif freestyle hareketleri mi? Yüksek hızlı yarış mı? Yanıtınız ideal oranınızı belirler. Çoğu FPV pilotu, kontrol ve heyecan arasındaki en iyi dengeyi sunduğu için 4:1 ile 6:1 arasında karar kılar.',
193
+ },
194
+ {
195
+ type: 'paragraph',
196
+ html: 'Unutmayın: daha yüksek bir oran "daha iyi" anlamına gelmez. "Daha tepkisel" anlamına gelir. Yarış dronunda bu esastır. Sinematik bir kurulumda ise bu bir dezavantajdır. Bilinçli seçim yapın.',
197
+ },
198
+ ],
199
+ faq: faqItems,
200
+ bibliography,
201
+ howTo: howToSteps,
202
+ schemas,
203
+ };
@@ -0,0 +1,203 @@
1
+ import type { DronePowerAnalyzerLocaleContent } from '../index';
2
+ import type { WithContext, SoftwareApplication, FAQPage, HowTo } from 'schema-dts';
3
+ import { bibliography } from '../bibliography';
4
+
5
+ const slug = 'drone-power-analyzer';
6
+ const title = '无人机动力分析器:FPV 推重比计算器';
7
+ const description = '计算 FPV 无人机组装的关键推重比。获取即时飞行剖面建议、可视化动力仪表,并针对电影级、花飞或竞速进行优化。';
8
+
9
+ const faqItems = [
10
+ {
11
+ question: '什么是推重比,为什么它很重要?',
12
+ answer: '推重比是指无人机能产生的总推力除以其起飞全重(AUW)。它是决定无人机飞行手感最重要的指标——从缓慢稳定(航拍)到极速响应(竞速)。',
13
+ },
14
+ {
15
+ question: '花飞(Freestyle)飞行的“黄金比例”是多少?',
16
+ answer: '对于流畅的花飞飞行,黄金比例在 4:1 到 6:1 之间。4:1 的比例在提供良好稳定性的同时具有出色的灵活性,而 6:1 则响应极快,但在狭窄空间内需要更精细的油门控制。',
17
+ },
18
+ {
19
+ question: '我可以将其用于航拍机组装吗?',
20
+ answer: '可以。对于流畅、缓慢的航拍镜头,目标比例应在 2:1 到 3:1 之间。这能保持无人机稳定且可预测。低于此比例将难以控制;高于此比例对于缓慢移动来说会显得过于“贼”。',
21
+ },
22
+ {
23
+ question: '如果我的比例超过 8:1 会怎样?',
24
+ answer: '超过 8:1 时,你的无人机实际上是一台竞速机器——响应极其灵敏,对飞行技术要求很高。只有经验丰富的飞行员才应尝试此类组装。非常适合过旗门和速度赛,但在室内飞行很危险。',
25
+ },
26
+ {
27
+ question: '起飞全重(AUW)需要包含电池重量吗?',
28
+ answer: '需要。起飞全重(AUW)是无人机安装所有组件后的总重量:机架、电机、电调、飞控、摄像头、电池、桨叶——所有东西。使用电池预设按钮可即时添加重量。',
29
+ },
30
+ ];
31
+
32
+ const howToSteps = [
33
+ {
34
+ name: '选择电机配置',
35
+ text: '选择你的组装是四旋翼(4)、六旋翼(6)还是八旋翼(8)配置。这个倍数对总推力至关重要。',
36
+ },
37
+ {
38
+ name: '输入电机推力',
39
+ text: '输入每个电机能产生的最大推力(以克为单位)。你可以在电机规格书中找到此信息,或使用快速预设。',
40
+ },
41
+ {
42
+ name: '设置总重量',
43
+ text: '输入无人机的起飞全重(AUW)——机架、电机、电池、摄像头等所有重量。使用电池预设进行即时重量调整。',
44
+ },
45
+ {
46
+ name: '查看结果',
47
+ text: '计算器将立即显示你的推重比、飞行剖面适用性(电影级、花飞、竞速)以及针对你组装的个性化建议。',
48
+ },
49
+ ];
50
+
51
+ const schemas: DronePowerAnalyzerLocaleContent['schemas'] = [
52
+ {
53
+ '@context': 'https://schema.org',
54
+ '@type': 'FAQPage',
55
+ mainEntity: faqItems.map((item) => ({
56
+ '@type': 'Question',
57
+ name: item.question,
58
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
59
+ })),
60
+ } as WithContext<FAQPage>,
61
+ {
62
+ '@context': 'https://schema.org',
63
+ '@type': 'HowTo',
64
+ name: title,
65
+ description: description,
66
+ step: howToSteps.map((step, i) => ({
67
+ '@type': 'HowToStep',
68
+ position: i + 1,
69
+ name: step.name,
70
+ text: step.text,
71
+ })),
72
+ } as WithContext<HowTo>,
73
+ {
74
+ '@context': 'https://schema.org',
75
+ '@type': 'SoftwareApplication',
76
+ name: title,
77
+ description: description,
78
+ applicationCategory: 'OtherApplication',
79
+ operatingSystem: 'Web',
80
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
81
+ } as WithContext<SoftwareApplication>,
82
+ ];
83
+
84
+ export const content: DronePowerAnalyzerLocaleContent = {
85
+ slug,
86
+ title,
87
+ description,
88
+ ui: {
89
+ motorConfiguration: '电机配置',
90
+ motorCount: '电机数量',
91
+ thrustPerMotor: '单电机推力 (最大)',
92
+ thrustUnit: 'g',
93
+ quad: '四旋翼 (4)',
94
+ hexa: '六旋翼 (6)',
95
+ octo: '八旋翼 (8)',
96
+ motorPresets: '快速电机预设',
97
+ presetMotor450: '2204 2300kv (4S) ~450g',
98
+ presetMotor600: '2306 2450kv (4S) ~600g',
99
+ presetMotor850: '2306 2450kv (6S) ~850g',
100
+ presetMotor1000: '2507 1850kv (6S) ~1000g',
101
+ weightConfiguration: '重量配置',
102
+ auwLabel: '起飞全重 (AUW)',
103
+ weightUnit: 'g',
104
+ switchToLbs: '切换至磅 (lbs)',
105
+ switchToGrams: '切换至克 (g)',
106
+ batteryPresets: '添加电池重量',
107
+ presetTattu4s: 'Tattu 4S 1550mAh (+182g)',
108
+ presetTattu6s: 'Tattu 6S 1100mAh (+231g)',
109
+ presetGnb4s: 'GNB 4S 850mAh (+118g)',
110
+ presetGnb6s: 'GNB 6S 1100mAh (+205g)',
111
+ totalThrust: '总推力',
112
+ twRatio: '推重比',
113
+ powerMeter: '动力仪表',
114
+ flightProfiles: '飞行剖面评估',
115
+ cinematicLabel: '电影级',
116
+ freestyleLabel: '花飞',
117
+ racingLabel: '竞速',
118
+ proRacingLabel: '专业竞速',
119
+ suitable: '适用',
120
+ notSuitable: '不适用',
121
+ recommendationLabel: '飞行风格建议',
122
+ recommendation_low: '推重比低于 2:1,无人机的稳定性将受到挑战。请考虑减轻重量或升级电机以获得更好的性能。',
123
+ recommendation_cinematic: '{ratio}:1 的比例非常适合动作平稳、受控的重载航拍。是缓慢、精准镜头工作的完美选择。',
124
+ recommendation_freestyle: '{ratio}:1 的比例是花飞飞行的黄金比例。在保持特技飞行所需稳定性的同时,具有极佳的灵活性。',
125
+ recommendation_racing: '{ratio}:1 的比例属于高性能花飞领域。在狭窄空间和高速机动中,油门管理至关重要。',
126
+ recommendation_extreme: '{ratio}:1 的比例是一台竞速机器。响应极其灵敏——仅供经验丰富的飞行员在开阔区域飞行。',
127
+ compareMode: '对比组装方案',
128
+ scenario1: '方案 A',
129
+ scenario2: '方案 B',
130
+ addComparison: '添加对比',
131
+ tooltipTWRatio: '推重比是总推力除以无人机重量。比例越高意味着加速度越快,操控响应越灵敏。',
132
+ tooltipFreestyle: '花飞飞行的“黄金比例”是 4:1 到 6:1,这在灵活性和操控性之间提供了最佳平衡。',
133
+ badge_unstable: '不稳定',
134
+ badge_cinematic: '电影级',
135
+ badge_sweetSpot: '黄金比例',
136
+ badge_racing: '竞速',
137
+ badge_extreme: '极限',
138
+ batteryName_tattu4s: 'Tattu 4S',
139
+ batteryName_tattu6s: 'Tattu 6S',
140
+ batteryName_gnb4s: 'GNB 4S',
141
+ batteryName_gnb6s: 'GNB 6S',
142
+ },
143
+ seo: [
144
+ {
145
+ type: 'title',
146
+ text: '了解 FPV 无人机的推重比',
147
+ level: 2,
148
+ },
149
+ {
150
+ type: 'paragraph',
151
+ html: '<strong>推重比</strong>可能是 FPV 无人机组装中最关键的指标。然而许多飞行员忽视了它,导致组装出来的机器表现不如预期。此计算器揭示了计算过程,并准确展示了你的机器在飞行时的真实手感。',
152
+ },
153
+ {
154
+ type: 'title',
155
+ text: '为什么推重比很重要',
156
+ level: 3,
157
+ },
158
+ {
159
+ type: 'paragraph',
160
+ html: '无人机的推重比决定了三个基本要素:<strong>稳定性</strong>、<strong>响应性</strong>和<strong>速度</strong>。2:1 的比例感觉迟钝且稳定。6:1 的比例感觉灵敏且富有攻击性。10:1 的比例则是纯粹的竞速机器。了解你的机器处于光谱的哪个位置,有助于你选择正确的飞行风格并设定合理的预期。',
161
+ },
162
+ {
163
+ type: 'title',
164
+ text: '飞行剖面详解',
165
+ level: 3,
166
+ },
167
+ {
168
+ type: 'list',
169
+ items: [
170
+ '<strong>电影级 (2:1 – 4:1)</strong>:重型、稳定、缓慢。非常适合平稳的相机移动和载重组装方案。',
171
+ '<strong>花飞 (3.5:1 – 6.5:1)</strong>:均衡的黄金比例。响应足以完成特技,稳定性足以进行控制。',
172
+ '<strong>竞速 (5:1 – 8:1)</strong>:快速且灵活。专为过旗门和激进机动而设计。',
173
+ '<strong>专业竞速 (7:1+)</strong>:极限性能。仅限专家级飞行员在开阔区域使用。',
174
+ ],
175
+ },
176
+ {
177
+ type: 'title',
178
+ text: '如何计算推重比',
179
+ level: 3,
180
+ },
181
+ {
182
+ type: 'paragraph',
183
+ html: '公式很简单:<strong>比例 = (单电机推力 × 电机数量) / 起飞全重</strong>。例如,一台起飞全重为 800g 的四旋翼,如果电机推力为 600g(总推力 2,400g),其比例为 3:1。这属于花飞领域。',
184
+ },
185
+ {
186
+ type: 'title',
187
+ text: '为你的机器选择合适的比例',
188
+ level: 3,
189
+ },
190
+ {
191
+ type: 'paragraph',
192
+ html: '问问自己:<em>我要怎么飞?</em> 缓慢的电影镜头?激进的花飞特技?高速竞速?你的答案决定了你的理想比例。大多数 FPV 飞行员最终选择 4:1 到 6:1 之间,因为它在操控和刺激之间提供了最佳的折中方案。',
193
+ },
194
+ {
195
+ type: 'paragraph',
196
+ html: '请记住:比例越高并不代表“越好”。它代表“响应越快”。在竞速机上,这是必需的。在航拍机上,这反而可能是个负担。请根据需求审慎选择。',
197
+ },
198
+ ],
199
+ faq: faqItems,
200
+ bibliography,
201
+ howTo: howToSteps,
202
+ schemas,
203
+ };
@@ -0,0 +1,8 @@
1
+ import { dronePowerAnalyzer } from './entry';
2
+ export * from './entry';
3
+ export const DRONE_POWER_ANALYZER_TOOL = {
4
+ entry: dronePowerAnalyzer,
5
+ Component: () => import('./component.astro'),
6
+ SEOComponent: () => import('./seo.astro'),
7
+ BibliographyComponent: () => import('./bibliography.astro'),
8
+ };
@@ -0,0 +1,15 @@
1
+ ---
2
+ import { SEORenderer } from '@jjlmoya/utils-shared';
3
+ import { dronePowerAnalyzer } from './index';
4
+ import type { KnownLocale } from '../../types';
5
+
6
+ interface Props {
7
+ locale?: KnownLocale;
8
+ }
9
+
10
+ const { locale = 'es' } = Astro.props;
11
+ const content = await dronePowerAnalyzer.i18n[locale]?.();
12
+ if (!content) return null;
13
+ ---
14
+
15
+ {content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
@@ -1,14 +1,6 @@
1
1
  ---
2
- import { Bibliography } from '@jjlmoya/utils-shared';
3
- import { gpsCoordinatesConverter } from './index';
4
- import type { KnownLocale } from '../../types';
5
-
6
- interface Props {
7
- locale?: KnownLocale;
8
- }
9
-
10
- const { locale = 'es' } = Astro.props;
11
- const content = await gpsCoordinatesConverter.i18n[locale]?.();
2
+ import { Bibliography as BibliographyComponent } from '@jjlmoya/utils-shared';
3
+ import { bibliography } from './bibliography';
12
4
  ---
13
5
 
14
- {content && <Bibliography links={content.bibliography} />}
6
+ <BibliographyComponent links={bibliography} />
@@ -0,0 +1,12 @@
1
+ import type { BibliographyEntry } from '../../types';
2
+
3
+ export const bibliography: BibliographyEntry[] = [
4
+ {
5
+ name: 'WGS 84 (World Geodetic System 1984): The global technical standard for mapping and GPS.',
6
+ url: 'https://en.wikipedia.org/wiki/World_Geodetic_System',
7
+ },
8
+ {
9
+ name: 'USGS: Using GPS and Coordinate Systems.',
10
+ url: 'https://www.usgs.gov/faqs/what-state-plane-coordinate-system-can-gps-provide-coordinates-these-values',
11
+ },
12
+ ];