@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
@@ -1,5 +1,6 @@
1
1
  import type { GpsCoordinatesConverterLocaleContent } from '../index';
2
2
  import type { WithContext, SoftwareApplication, FAQPage, HowTo } from 'schema-dts';
3
+ import { bibliography } from '../bibliography';
3
4
 
4
5
  const slug = 'gps-coordinates-converter';
5
6
  const title = 'ArduPilot 및 INAV 웨이포인트용 GPS 좌표 변환기';
@@ -82,25 +83,26 @@ export const content: GpsCoordinatesConverterLocaleContent = {
82
83
  slug,
83
84
  title,
84
85
  description,
85
- faqTitle: '자주 묻는 질문',
86
- bibliographyTitle: '참고 문헌',
87
86
  ui: {
88
- faqTitle: '자주 묻는 질문',
89
- bibliographyTitle: '참고 문헌',
90
- latitude: '위도',
91
- longitude: '경도',
92
- decimalDegrees: '십진 도수 (DD)',
93
- degreesMinutesSeconds: '도, 분, 초 (DMS)',
94
- gpsHardware: 'GPS 하드웨어 형식 (Raw)',
87
+ decimalDD: '십진수 (DD)',
88
+ degreesGMS: '도분초 (DMS)',
89
+ useLocation: '내 위치 사용',
90
+ lat: '위도',
91
+ lng: '경도',
92
+ latGMS: '위도 (DMS)',
93
+ lngGMS: '경도 (DMS)',
94
+ gmsTraditional: 'DMS 전통 방식',
95
+ nauticalDM: '도 및 소수점 분 (해상)',
96
+ googleMapsFormat: 'Google 지도 형식',
97
+ mapVisualization: '지도 시각화',
98
+ mapHint: '지도를 클릭하여 좌표를 직접 캡처하세요.',
95
99
  copy: '복사',
96
- copied: '복사되었습니다!',
97
- invalidCoordinate: '잘못된 좌표',
98
- pasteHardwareMapFormat: '원본 데이터 붙여넣기 (예: 404306300, -739981800)',
99
- validation: {
100
- latRange: '위도는 -90에서 90 사이여야 합니다.',
101
- lonRange: '경도는 -180에서 180 사이여야 합니다.',
102
- invalidFormat: '형식을 인식할 수 없습니다. 입력을 확인해 주세요.',
103
- },
100
+ copied: '복사됨!',
101
+ recentHistory: '최근 기록',
102
+ clear: '지우기',
103
+ noHistory: '최근 변환 기록이 없습니다.',
104
+ load: '불러오기',
105
+ delete: '삭제',
104
106
  },
105
107
  seo: [
106
108
  {
@@ -196,10 +198,7 @@ export const content: GpsCoordinatesConverterLocaleContent = {
196
198
  },
197
199
  ],
198
200
  faq: faqItems,
199
- bibliography: [
200
- { name: 'ArduPilot GPS 연동 기초', url: 'https://ardupilot.org/copter/docs/common-positioning-landing-page.html' },
201
- { name: '십진 도 대 DMS (위키백과)', url: 'https://en.wikipedia.org/wiki/Decimal_degrees' },
202
- ],
201
+ bibliography,
203
202
  howTo: [
204
203
  {
205
204
  name: '형식 확인',
@@ -1,5 +1,6 @@
1
1
  import type { GpsCoordinatesConverterLocaleContent } from '../index';
2
2
  import type { WithContext, SoftwareApplication, FAQPage, HowTo } from 'schema-dts';
3
+ import { bibliography } from '../bibliography';
3
4
 
4
5
  const slug = 'gps-coordinaten-converter';
5
6
  const title = 'GPS Coordinaten Converter voor ArduPilot en INAV Waypoints';
@@ -7,20 +8,20 @@ const description = 'Converteer GPS-coördinaten tussen Decimale Graden (DD), Gr
7
8
 
8
9
  const faqItems = [
9
10
  {
10
- question: 'What is the difference between DD and DMS?',
11
- answer: `DD (Decimal Degrees) uses a single number with decimals (e.g., 51.50). DMS (Degrees, Minutes, Seconds) divides the degree into sexagesimal fractions (e.g., 51° 30' 0").`,
11
+ question: 'Wat is het verschil tussen DD en DMS?',
12
+ answer: `DD (Decimale Graden) gebruikt één getal met decimalen (bijv. 51.50). DMS (Graden, Minuten, Seconden) verdeelt de graad in sexagesimale fracties (bijv. 51° 30' 0").`,
12
13
  },
13
14
  {
14
- question: 'Why are negative coordinates used?',
15
- answer: 'In the Decimal system (DD), latitudes south of the Equator and longitudes west of Greenwich are indicated with a negative sign to facilitate mathematical calculations.',
15
+ question: 'Waarom worden negatieve coördinaten gebruikt?',
16
+ answer: 'In het decimale systeem (DD) worden breedtegraden ten zuiden van de evenaar en lengtegraden ten westen van Greenwich aangegeven met een minteken om wiskundige berekeningen te vergemakkelijken.',
16
17
  },
17
18
  {
18
- question: 'How much precision do I lose when converting?',
19
- answer: 'Our tool uses double-precision floating point. With 6 decimals in DD, the precision is about 11 centimeters, which is more than enough for drones and civil navigation.',
19
+ question: 'Hoeveel precisie verlies ik bij het converteren?',
20
+ answer: 'Onze tool gebruikt dubbele precisie drijvende komma. Met 6 decimalen in DD is de precisie ongeveer 11 centimeter, wat meer dan genoeg is voor drones en civiele navigatie.',
20
21
  },
21
22
  {
22
- question: 'Does this tool work offline?',
23
- answer: 'Yes, once the page is loaded, all conversion logic is local (client-side). Only the map requires a connection to download new tiles.',
23
+ question: 'Werkt deze tool offline?',
24
+ answer: 'Ja, zodra de pagina is geladen, is alle conversielogica lokaal (client-side). Alleen de kaart heeft een verbinding nodig om nieuwe tegels te downloaden.',
24
25
  },
25
26
  ];
26
27
 
@@ -43,26 +44,26 @@ const schemas: GpsCoordinatesConverterLocaleContent['schemas'] = [
43
44
  {
44
45
  '@type': 'HowToStep',
45
46
  position: 1,
46
- name: 'Input Coordinates',
47
- text: 'Enter your coordinates in either Decimal Degrees (DD) or Degrees, Minutes, Seconds (DMS) format.',
47
+ name: 'Voer coördinaten in',
48
+ text: 'Voer uw coördinaten in in het formaat Decimale Graden (DD) of Graden, Minuten, Seconden (DMS).',
48
49
  },
49
50
  {
50
51
  '@type': 'HowToStep',
51
52
  position: 2,
52
- name: 'Review Conversion',
53
- text: 'The tool instantly displays the converted coordinates in all supported formats.',
53
+ name: 'Controleer conversie',
54
+ text: 'De tool toont direct de geconverteerde coördinaten in alle ondersteunde formaten.',
54
55
  },
55
56
  {
56
57
  '@type': 'HowToStep',
57
58
  position: 3,
58
- name: 'Verify on Map',
59
- text: 'Check the map visualization to ensure the coordinates point to the correct location.',
59
+ name: 'Verifieer op kaart',
60
+ text: 'Controleer de kaartvisualisatie om er zeker van te zijn dat de coördinaten naar de juiste locatie wijzen.',
60
61
  },
61
62
  {
62
63
  '@type': 'HowToStep',
63
64
  position: 4,
64
- name: 'Copy Result',
65
- text: 'Copy the converted coordinates to your clipboard for use in navigation systems or mission planning.',
65
+ name: 'Kopieer resultaat',
66
+ text: 'Kopieer de geconverteerde coördinaten naar uw klembord voor gebruik in navigatiesystemen of missieplanning.',
66
67
  },
67
68
  ],
68
69
  } as WithContext<HowTo>,
@@ -82,25 +83,24 @@ export const content: GpsCoordinatesConverterLocaleContent = {
82
83
  slug,
83
84
  title,
84
85
  description,
85
- faqTitle: 'Veelgestelde Vragen',
86
- bibliographyTitle: 'Referentiehandleidingen',
87
86
  ui: {
88
- faqTitle: 'Veelgestelde Vragen',
89
- bibliographyTitle: 'Referentiehandleidingen',
90
- latitude: 'Breedtegraad',
91
- longitude: 'Lengtegraad',
92
- decimalDegrees: 'Decimale Graden (DD)',
93
- degreesMinutesSeconds: 'Graden, Minuten, Seconden (DMS)',
94
- gpsHardware: 'GPS-hardwareformaat (Raw)',
87
+ decimalDD: 'Decimaal (DD)',
88
+ degreesGMS: 'Graden (DMS)',
89
+ useLocation: 'Gebruik mijn locatie',
90
+ lat: 'Breedtegraad',
91
+ lng: 'Lengtegraad',
92
+ latGMS: 'Breedtegraad (DMS)',
93
+ lngGMS: 'Lengtegraad (DMS)',
94
+ gmsTraditional: 'Traditionele DMS',
95
+ nauticalDM: 'Graden & Dec. Min. (Nautisch)',
96
+ googleMapsFormat: 'Google Maps Formaat',
95
97
  copy: 'Kopiëren',
96
98
  copied: 'Gekopieerd!',
97
- invalidCoordinate: 'Ongeldige coördinaat',
98
- pasteHardwareMapFormat: 'Plak hardwareformaat (bijv. 404306300, -739981800)',
99
- validation: {
100
- latRange: 'Breedtegraad moet tussen -90 en 90 liggen.',
101
- lonRange: 'Lengtegraad moet tussen -180 en 180 liggen.',
102
- invalidFormat: 'Formaat niet herkend. Controleer uw invoer.',
103
- },
99
+ recentHistory: 'Recente Geschiedenis',
100
+ clear: 'Wissen',
101
+ noHistory: 'Geen recente conversies.',
102
+ load: 'Laden',
103
+ delete: 'Verwijderen',
104
104
  },
105
105
  seo: [
106
106
  {
@@ -196,10 +196,7 @@ export const content: GpsCoordinatesConverterLocaleContent = {
196
196
  },
197
197
  ],
198
198
  faq: faqItems,
199
- bibliography: [
200
- { name: 'Ardupilot Documentatie en Integratie Informatie.', url: 'https://ardupilot.org/copter/docs/common-positioning-landing-page.html' },
201
- { name: 'Naslag over Decimalen en Graden (Wikipedia).', url: 'https://en.wikipedia.org/wiki/Decimal_degrees' },
202
- ],
199
+ bibliography,
203
200
  howTo: [
204
201
  {
205
202
  name: 'Onderken Formaat',
@@ -1,5 +1,6 @@
1
1
  import type { GpsCoordinatesConverterLocaleContent } from '../index';
2
2
  import type { WithContext, SoftwareApplication, FAQPage, HowTo } from 'schema-dts';
3
+ import { bibliography } from '../bibliography';
3
4
 
4
5
  const slug = 'konwerter-wspolrzednych-gps';
5
6
  const title = 'Konwerter Wspolrzednych GPS Nawigacji po Punktach Trasy';
@@ -82,25 +83,26 @@ export const content: GpsCoordinatesConverterLocaleContent = {
82
83
  slug,
83
84
  title,
84
85
  description,
85
- faqTitle: 'Często Zadawane Pytania',
86
- bibliographyTitle: 'Materiały Źródłowe',
87
86
  ui: {
88
- faqTitle: 'Często Zadawane Pytania',
89
- bibliographyTitle: 'Materiały Źródłowe',
90
- latitude: 'Szerokość Geograficzna',
91
- longitude: 'Długość Geograficzna',
92
- decimalDegrees: 'Stopnie Dziesiętne (DD)',
93
- degreesMinutesSeconds: 'Stopnie, Minuty, Sekundy (DMS)',
94
- gpsHardware: 'Sprzętowy Format GPS (Surowy)',
87
+ decimalDD: 'Dziesiętne (DD)',
88
+ degreesGMS: 'Stopnie (DMS)',
89
+ useLocation: 'Użyj mojej lokalizacji',
90
+ lat: 'Szerokość',
91
+ lng: 'Długość',
92
+ latGMS: 'Szerokość (DMS)',
93
+ lngGMS: 'Długość (DMS)',
94
+ gmsTraditional: 'Tradycyjne DMS',
95
+ nauticalDM: 'Stopnie & dzies. min. (Nautyczne)',
96
+ googleMapsFormat: 'Format Google Maps',
97
+ mapVisualization: 'Wizualizacja na Mapie',
98
+ mapHint: 'Kliknij na mapę, aby bezpośrednio pobrać współrzędne.',
95
99
  copy: 'Kopiuj',
96
100
  copied: 'Skopiowano!',
97
- invalidCoordinate: 'Nieprawidłowa Współrzędna',
98
- pasteHardwareMapFormat: 'Wklej surowe dane sprzętowe (np. 404306300, -739981800)',
99
- validation: {
100
- latRange: 'Szerokość geograficzna musi mieścić się w przedziale od -90 do 90.',
101
- lonRange: 'Długość geograficzna musi mieścić się w przedziale od -180 do 180.',
102
- invalidFormat: 'Format nierozpoznany. Sprawdź, czy wprowadzono poprawne dane.',
103
- },
101
+ recentHistory: 'Ostatnia Historia',
102
+ clear: 'Wyczyść',
103
+ noHistory: 'Brak ostatnich konwersji.',
104
+ load: 'Wczytaj',
105
+ delete: 'Usuń',
104
106
  },
105
107
  seo: [
106
108
  {
@@ -196,10 +198,7 @@ export const content: GpsCoordinatesConverterLocaleContent = {
196
198
  },
197
199
  ],
198
200
  faq: faqItems,
199
- bibliography: [
200
- { name: 'Ardupilot – Oficjalny przewodnik Dokumentujący o Integracjach Lotu Autonomousnych .', url: 'https://ardupilot.org/copter/docs/common-positioning-landing-page.html' },
201
- { name: 'Encyklopedyczne objaśnienie notatek wymiaru Współrzędnej u Wikipedia o formie DD', url: 'https://en.wikipedia.org/wiki/Decimal_degrees' },
202
- ],
201
+ bibliography,
203
202
  howTo: [
204
203
  {
205
204
  name: 'Rzetelnie zweryfikuj posiadany Format jako Źródło',
@@ -1,5 +1,6 @@
1
1
  import type { GpsCoordinatesConverterLocaleContent } from '../index';
2
2
  import type { WithContext, SoftwareApplication, FAQPage, HowTo } from 'schema-dts';
3
+ import { bibliography } from '../bibliography';
3
4
 
4
5
  const slug = 'conversor-de-coordenadas-gps';
5
6
  const title = 'Conversor de Coordenadas GPS para Navegacao em Waypoints';
@@ -82,25 +83,26 @@ export const content: GpsCoordinatesConverterLocaleContent = {
82
83
  slug,
83
84
  title,
84
85
  description,
85
- faqTitle: 'Perguntas Frequentes',
86
- bibliographyTitle: 'Referências Bibliográficas',
87
86
  ui: {
88
- faqTitle: 'Perguntas Frequentes',
89
- bibliographyTitle: 'Referências Bibliográficas',
90
- latitude: 'Latitude',
91
- longitude: 'Longitude',
92
- decimalDegrees: 'Graus Decimais (DD)',
93
- degreesMinutesSeconds: 'Graus, Minutos, Segundos (DMS)',
94
- gpsHardware: 'Formato de Hardware GPS (Bruto)',
87
+ decimalDD: 'Decimal (DD)',
88
+ degreesGMS: 'Graus (DMS)',
89
+ useLocation: 'Usar minha localização',
90
+ lat: 'Latitude',
91
+ lng: 'Longitude',
92
+ latGMS: 'Latitude (DMS)',
93
+ lngGMS: 'Longitude (DMS)',
94
+ gmsTraditional: 'DMS Tradicional',
95
+ nauticalDM: 'Graus & Min. Dec. (Náutico)',
96
+ googleMapsFormat: 'Formato Google Maps',
97
+ mapVisualization: 'Visualização no Mapa',
98
+ mapHint: 'Clique no mapa para capturar as coordenadas diretamente.',
95
99
  copy: 'Copiar',
96
100
  copied: 'Copiado!',
97
- invalidCoordinate: 'Coordenada Inválida',
98
- pasteHardwareMapFormat: 'Cole dados brutos (ex: 404306300, -739981800)',
99
- validation: {
100
- latRange: 'A latitude deve estar entre -90 e 90.',
101
- lonRange: 'A longitude deve estar entre -180 e 180.',
102
- invalidFormat: 'Formato não reconhecido. Por favor, verifique a sua entrada.',
103
- },
101
+ recentHistory: 'Histórico Recente',
102
+ clear: 'Limpar',
103
+ noHistory: 'Nenhuma conversão recente.',
104
+ load: 'Carregar',
105
+ delete: 'Excluir',
104
106
  },
105
107
  seo: [
106
108
  {
@@ -196,10 +198,7 @@ export const content: GpsCoordinatesConverterLocaleContent = {
196
198
  },
197
199
  ],
198
200
  faq: faqItems,
199
- bibliography: [
200
- { name: 'O Portal Do Mundo Autómato Ardupilot nas referências a Manuseamento E Informações .', url: 'https://ardupilot.org/copter/docs/common-positioning-landing-page.html' },
201
- { name: 'Documento Completo De Natureza Histórica E Cientifica Na wikipedia ( DD / Conversões E Graus Base Terra )', url: 'https://en.wikipedia.org/wiki/Decimal_degrees' },
202
- ],
201
+ bibliography,
203
202
  howTo: [
204
203
  {
205
204
  name: 'Observe Os seus dados e descubra a classe da Linguagem .',
@@ -1,5 +1,6 @@
1
1
  import type { GpsCoordinatesConverterLocaleContent } from '../index';
2
2
  import type { WithContext, SoftwareApplication, FAQPage, HowTo } from 'schema-dts';
3
+ import { bibliography } from '../bibliography';
3
4
 
4
5
  const slug = 'konverter-gps-koordinat';
5
6
  const title = 'Конвертер GPS координат для путевых точек Ardupilot и INAV';
@@ -82,25 +83,26 @@ export const content: GpsCoordinatesConverterLocaleContent = {
82
83
  slug,
83
84
  title,
84
85
  description,
85
- faqTitle: 'Часто задаваемые вопросы',
86
- bibliographyTitle: 'Библиографические ссылки',
87
86
  ui: {
88
- faqTitle: 'Часто задаваемые вопросы',
89
- bibliographyTitle: 'Библиографические ссылки',
90
- latitude: 'Широта',
91
- longitude: 'Долгота',
92
- decimalDegrees: 'Десятичные градусы (DD)',
93
- degreesMinutesSeconds: 'Градусы, Минуты, Секунды (DMS)',
94
- gpsHardware: 'Аппаратный формат GPS (Raw)',
87
+ decimalDD: 'Десятичный (DD)',
88
+ degreesGMS: 'Градусы (DMS)',
89
+ useLocation: 'Использовать мое местоположение',
90
+ lat: 'Широта',
91
+ lng: 'Долгота',
92
+ latGMS: 'Широта (DMS)',
93
+ lngGMS: 'Долгота (DMS)',
94
+ gmsTraditional: 'Традиционный DMS',
95
+ nauticalDM: 'Градусы и дес. минуты (Морской)',
96
+ googleMapsFormat: 'Формат Google Maps',
97
+ mapVisualization: 'Визуализация на карте',
98
+ mapHint: 'Нажмите на карту, чтобы получить координаты напрямую.',
95
99
  copy: 'Копировать',
96
100
  copied: 'Скопировано!',
97
- invalidCoordinate: 'Неверные координаты',
98
- pasteHardwareMapFormat: 'Вставьте исходные данные (например, 404306300, -739981800)',
99
- validation: {
100
- latRange: 'Широта должна быть в пределах от -90 до 90.',
101
- lonRange: 'Долгота должна быть в пределах от -180 до 180.',
102
- invalidFormat: 'Формат не распознан. Пожалуйста, проверьте ввод.',
103
- },
101
+ recentHistory: 'Недавняя история',
102
+ clear: 'Очистить',
103
+ noHistory: 'Нет недавних преобразований.',
104
+ load: 'Загрузить',
105
+ delete: 'Удалить',
104
106
  },
105
107
  seo: [
106
108
  {
@@ -196,10 +198,7 @@ export const content: GpsCoordinatesConverterLocaleContent = {
196
198
  },
197
199
  ],
198
200
  faq: faqItems,
199
- bibliography: [
200
- { name: 'Интеграция GPS в ArduPilot', url: 'https://ardupilot.org/copter/docs/common-positioning-landing-page.html' },
201
- { name: 'Десятичные градусы (Википедия)', url: 'https://en.wikipedia.org/wiki/Decimal_degrees' },
202
- ],
201
+ bibliography,
203
202
  howTo: [
204
203
  {
205
204
  name: 'Определите текущий формат',
@@ -1,5 +1,6 @@
1
1
  import type { GpsCoordinatesConverterLocaleContent } from '../index';
2
2
  import type { WithContext, SoftwareApplication, FAQPage, HowTo } from 'schema-dts';
3
+ import { bibliography } from '../bibliography';
3
4
 
4
5
  const slug = 'gps-koordinat-omvandlare';
5
6
  const title = 'GPS Koordinat Omvandlare for ArduPilot och INAV Waypoints';
@@ -82,25 +83,26 @@ export const content: GpsCoordinatesConverterLocaleContent = {
82
83
  slug,
83
84
  title,
84
85
  description,
85
- faqTitle: 'Vanliga Frågor',
86
- bibliographyTitle: 'Referenser',
87
86
  ui: {
88
- faqTitle: 'Vanliga Frågor',
89
- bibliographyTitle: 'Referenser',
90
- latitude: 'Latitud',
91
- longitude: 'Longitud',
92
- decimalDegrees: 'Decimalgrader (DD)',
93
- degreesMinutesSeconds: 'Grader, Minuter, Sekunder (DMS)',
94
- gpsHardware: 'GPS-hårdvaruformat (Raw)',
87
+ decimalDD: 'Decimal (DD)',
88
+ degreesGMS: 'Grader (DMS)',
89
+ useLocation: 'Använd min plats',
90
+ lat: 'Latitud',
91
+ lng: 'Longitud',
92
+ latGMS: 'Latitud (DMS)',
93
+ lngGMS: 'Longitud (DMS)',
94
+ gmsTraditional: 'Traditionell DMS',
95
+ nauticalDM: 'Grader & Min. (Nautisk)',
96
+ googleMapsFormat: 'Google Maps Format',
97
+ mapVisualization: 'Kartvisualisering',
98
+ mapHint: 'Klicka på kartan för att hämta koordinater direkt.',
95
99
  copy: 'Kopiera',
96
100
  copied: 'Kopierad!',
97
- invalidCoordinate: 'Ogiltig koordinat',
98
- pasteHardwareMapFormat: 'Klistra in raw hårdvarudata (t.ex. 404306300, -739981800)',
99
- validation: {
100
- latRange: 'Latitud måste vara mellan -90 och 90.',
101
- lonRange: 'Longitud måste vara mellan -180 och 180.',
102
- invalidFormat: 'Formatet känns inte igen. Kontrollera din inmatning.',
103
- },
101
+ recentHistory: 'Senaste historik',
102
+ clear: 'Rensa',
103
+ noHistory: 'Inga senaste konverteringar.',
104
+ load: 'Ladda',
105
+ delete: 'Ta bort',
104
106
  },
105
107
  seo: [
106
108
  {
@@ -196,10 +198,7 @@ export const content: GpsCoordinatesConverterLocaleContent = {
196
198
  },
197
199
  ],
198
200
  faq: faqItems,
199
- bibliography: [
200
- { name: 'ArduPilot Officiell GPS handbok.', url: 'https://ardupilot.org/copter/docs/common-positioning-landing-page.html' },
201
- { name: 'Förstå decimala värden. DD wikipedia.', url: 'https://en.wikipedia.org/wiki/Decimal_degrees' },
202
- ],
201
+ bibliography,
203
202
  howTo: [
204
203
  {
205
204
  name: 'Börja Med Att Bestämma Indata Formatet.',
@@ -1,5 +1,6 @@
1
1
  import type { GpsCoordinatesConverterLocaleContent } from '../index';
2
2
  import type { WithContext, SoftwareApplication, FAQPage, HowTo } from 'schema-dts';
3
+ import { bibliography } from '../bibliography';
3
4
 
4
5
  const slug = 'gps-koordinat-donusturucu';
5
6
  const title = 'ArduPilot ve INAV Icin GPS Koordinat Donusturucu';
@@ -82,25 +83,26 @@ export const content: GpsCoordinatesConverterLocaleContent = {
82
83
  slug,
83
84
  title,
84
85
  description,
85
- faqTitle: 'Sıkça Sorulan Sorular',
86
- bibliographyTitle: 'Referans Kılavuzları',
87
86
  ui: {
88
- faqTitle: 'Sıkça Sorulan Sorular',
89
- bibliographyTitle: 'Referans Kılavuzları',
90
- latitude: 'Enlem',
91
- longitude: 'Boylam',
92
- decimalDegrees: 'Ondalık Derece (DD)',
93
- degreesMinutesSeconds: 'Derece, Dakika, Saniye (DMS)',
94
- gpsHardware: 'GPS Donanım Formatı (Raw)',
87
+ decimalDD: 'Ondalık (DD)',
88
+ degreesGMS: 'Derece (DMS)',
89
+ useLocation: 'Konumumu Kullan',
90
+ lat: 'Enlem',
91
+ lng: 'Boylam',
92
+ latGMS: 'Enlem (DMS)',
93
+ lngGMS: 'Boylam (DMS)',
94
+ gmsTraditional: 'Geleneksel DMS',
95
+ nauticalDM: 'Derece & Ond. Dak. (Denizcilik)',
96
+ googleMapsFormat: 'Google Haritalar Formatı',
97
+ mapVisualization: 'Harita Görselleştirme',
98
+ mapHint: 'Koordinatları doğrudan yakalamak için haritaya tıklayın.',
95
99
  copy: 'Kopyala',
96
100
  copied: 'Kopyalandı!',
97
- invalidCoordinate: 'Geçersiz Koordinat',
98
- pasteHardwareMapFormat: 'Ham (raw) donanım verisini yapıştırın (örn. 404306300, -739981800)',
99
- validation: {
100
- latRange: 'Enlem -90 ile 90 arasında olmalıdır.',
101
- lonRange: 'Boylam -180 ile 180 arasında olmalıdır.',
102
- invalidFormat: 'Format tanınamadı. Lütfen girişinizi kontrol edin.',
103
- },
101
+ recentHistory: 'Son Geçmiş',
102
+ clear: 'Temizle',
103
+ noHistory: 'Yakın zamanda dönüşüm yok.',
104
+ load: 'Yükle',
105
+ delete: 'Sil',
104
106
  },
105
107
  seo: [
106
108
  {
@@ -196,10 +198,7 @@ export const content: GpsCoordinatesConverterLocaleContent = {
196
198
  },
197
199
  ],
198
200
  faq: faqItems,
199
- bibliography: [
200
- { name: 'ArduPilot GPS Entagrasyon Belgesi', url: 'https://ardupilot.org/copter/docs/common-positioning-landing-page.html' },
201
- { name: 'Ondalık Yüzdeler (Decimal Degrees) ve Dönüşüm (Wikipedia)', url: 'https://en.wikipedia.org/wiki/Decimal_degrees' },
202
- ],
201
+ bibliography,
203
202
  howTo: [
204
203
  {
205
204
  name: 'Formatı Tanımlayın',
@@ -1,5 +1,6 @@
1
1
  import type { GpsCoordinatesConverterLocaleContent } from '../index';
2
2
  import type { WithContext, SoftwareApplication, FAQPage, HowTo } from 'schema-dts';
3
+ import { bibliography } from '../bibliography';
3
4
 
4
5
  const slug = 'gps-coordinates-converter';
5
6
  const title = 'Ardupilot及INAV航点模式用GPS坐标转换器';
@@ -82,25 +83,26 @@ export const content: GpsCoordinatesConverterLocaleContent = {
82
83
  slug,
83
84
  title,
84
85
  description,
85
- faqTitle: '常见问题解答',
86
- bibliographyTitle: '参考文献与指南',
87
86
  ui: {
88
- faqTitle: '常见问题解答',
89
- bibliographyTitle: '参考文献与指南',
90
- latitude: '纬度',
91
- longitude: '经度',
92
- decimalDegrees: '十进制度 (DD / Decimal Degrees)',
93
- degreesMinutesSeconds: '度-分-秒 (DMS / Degrees Minutes Seconds)',
94
- gpsHardware: 'GPS固件硬件格式 (Raw Integer)',
87
+ decimalDD: '十进制 (DD)',
88
+ degreesGMS: '度分秒 (DMS)',
89
+ useLocation: '使用我的位置',
90
+ lat: '纬度',
91
+ lng: '经度',
92
+ latGMS: '纬度 (DMS)',
93
+ lngGMS: '经度 (DMS)',
94
+ gmsTraditional: '传统度分秒',
95
+ nauticalDM: '度 & 分 (航海)',
96
+ googleMapsFormat: 'Google 地图格式',
97
+ mapVisualization: '地图可视化',
98
+ mapHint: '点击地图直接捕捉坐标。',
95
99
  copy: '复制',
96
- copied: '已复制!',
97
- invalidCoordinate: '无效坐标 (Invalid Coordinate)',
98
- pasteHardwareMapFormat: '粘贴原始硬编码数据 (例如: 404306300, -739981800)',
99
- validation: {
100
- latRange: '纬度值必须介于 -90 到 90 之间。',
101
- lonRange: '经度值必须介于 -180 到 180 之间。',
102
- invalidFormat: '输入格式无法识别。请仔细检查您的输入。',
103
- },
100
+ copied: '已复制!',
101
+ recentHistory: '最近历史',
102
+ clear: '清除',
103
+ noHistory: '没有最近的转换。',
104
+ load: '加载',
105
+ delete: '删除',
104
106
  },
105
107
  seo: [
106
108
  {
@@ -196,10 +198,7 @@ export const content: GpsCoordinatesConverterLocaleContent = {
196
198
  },
197
199
  ],
198
200
  faq: faqItems,
199
- bibliography: [
200
- { name: '官方权威基石:ArduPilot 全体系与定位模组的基础构筑知识库及导入准则。', url: 'https://ardupilot.org/copter/docs/common-positioning-landing-page.html' },
201
- { name: '知识宝库扩充: 十进制算法 与 经纬制图(维基百科源学术资料)。', url: 'https://en.wikipedia.org/wiki/Decimal_degrees' },
202
- ],
201
+ bibliography,
203
202
  howTo: [
204
203
  {
205
204
  name: '甄别与判定手上信息的归路归属',
@@ -1,5 +1,5 @@
1
1
  ---
2
- import { SEOArticle, SEOTitle, SEOList, SEOTable } from '@jjlmoya/utils-shared';
2
+ import { SEORenderer } from '@jjlmoya/utils-shared';
3
3
  import { gpsCoordinatesConverter } from './index';
4
4
  import type { KnownLocale } from '../../types';
5
5
 
@@ -12,28 +12,4 @@ const content = await gpsCoordinatesConverter.i18n[locale]?.();
12
12
  if (!content) return null;
13
13
  ---
14
14
 
15
- <SEOArticle>
16
- {content.seo.map((section: any) => {
17
- if (section.type === 'title') {
18
- return <SEOTitle title={section.text} level={section.level || 2} />;
19
- }
20
- if (section.type === 'paragraph') {
21
- return <p set:html={section.html} />;
22
- }
23
- if (section.type === 'list') {
24
- return <SEOList items={section.items} />;
25
- }
26
- if (section.type === 'table') {
27
- return (
28
- <SEOTable headers={section.headers}>
29
- {section.rows.map((row: string[]) => (
30
- <tr>
31
- {row.map((cell: string) => <td set:html={cell} />)}
32
- </tr>
33
- ))}
34
- </SEOTable>
35
- );
36
- }
37
- return null;
38
- })}
39
- </SEOArticle>
15
+ {content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
package/src/tools.ts CHANGED
@@ -2,17 +2,20 @@ export { ALL_ENTRIES } from './entries';
2
2
  import { DRONE_FLIGHT_TIME_TOOL } from './tool/drone-flight-time/index';
3
3
  import { ANTENNA_LENGTH_CALCULATOR_TOOL } from './tool/antenna-length-calculator/index';
4
4
  import { GPS_COORDINATES_CONVERTER_TOOL } from './tool/gps-coordinates-converter/index';
5
+ import { DRONE_POWER_ANALYZER_TOOL } from './tool/drone-power-analyzer/index';
5
6
  import type { ToolDefinition } from './types';
6
7
 
7
8
  export const ALL_TOOLS: ToolDefinition[] = [
8
9
  DRONE_FLIGHT_TIME_TOOL,
9
10
  ANTENNA_LENGTH_CALCULATOR_TOOL,
10
11
  GPS_COORDINATES_CONVERTER_TOOL,
12
+ DRONE_POWER_ANALYZER_TOOL,
11
13
  ];
12
14
 
13
15
  export {
14
16
  DRONE_FLIGHT_TIME_TOOL,
15
17
  ANTENNA_LENGTH_CALCULATOR_TOOL,
16
18
  GPS_COORDINATES_CONVERTER_TOOL,
19
+ DRONE_POWER_ANALYZER_TOOL,
17
20
  };
18
21
 
package/src/types.ts CHANGED
@@ -5,7 +5,7 @@ export type { SEOSection };
5
5
 
6
6
  export type KnownLocale =
7
7
  | 'ar' | 'da' | 'de' | 'en' | 'es' | 'fi'
8
- | 'fr' | 'it' | 'ja' | 'ko' | 'nb' | 'nl'
8
+ | 'fr' | 'id' | 'it' | 'ja' | 'ko' | 'nb' | 'nl'
9
9
  | 'pl' | 'pt' | 'ru' | 'sv' | 'tr' | 'zh';
10
10
 
11
11
  export interface FAQItem {
@@ -29,9 +29,7 @@ export interface ToolLocaleContent<TUI extends Record<string, string> = Record<s
29
29
  description: string;
30
30
  ui: TUI;
31
31
  seo: SEOSection[];
32
- faqTitle?: string;
33
32
  faq: FAQItem[];
34
- bibliographyTitle?: string;
35
33
  bibliography: BibliographyEntry[];
36
34
  howTo: HowToStep[];
37
35
  schemas: WithContext<Thing>[];