@jjlmoya/utils-nature 1.22.0 → 1.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/package.json +2 -2
  2. package/src/category/i18n/es.ts +1 -1
  3. package/src/category/i18n/fr.ts +110 -110
  4. package/src/category/i18n/it.ts +1 -1
  5. package/src/category/i18n/pl.ts +1 -1
  6. package/src/category/i18n/pt.ts +1 -1
  7. package/src/category/i18n/ru.ts +110 -110
  8. package/src/category/seo.astro +1 -1
  9. package/src/components/PreviewNavSidebar.astro +1 -1
  10. package/src/components/PreviewToolbar.astro +1 -1
  11. package/src/data.ts +1 -1
  12. package/src/env.d.ts +1 -1
  13. package/src/layouts/PreviewLayout.astro +117 -117
  14. package/src/pages/[locale]/[slug].astro +164 -164
  15. package/src/pages/index.astro +1 -1
  16. package/src/tests/bibliography_wellformed_export.test.ts +46 -0
  17. package/src/tests/category_seo_quality.test.ts +74 -0
  18. package/src/tests/faq_count.test.ts +19 -19
  19. package/src/tests/mocks/astro_mock.js +1 -1
  20. package/src/tests/no_en_dash.test.ts +71 -71
  21. package/src/tests/no_h1_in_components.test.ts +1 -1
  22. package/src/tests/seo_length.test.ts +23 -23
  23. package/src/tests/seo_parity.test.ts +2 -2
  24. package/src/tests/seo_wellformed_export.test.ts +65 -0
  25. package/src/tests/spanish_leakage.test.ts +175 -175
  26. package/src/tool/compostBinVolumeRatioCalculator/bibliography.astro +2 -14
  27. package/src/tool/compostBinVolumeRatioCalculator/seo.astro +6 -14
  28. package/src/tool/cricketThermometer/i18n/de.ts +169 -169
  29. package/src/tool/cricketThermometer/i18n/en.ts +169 -169
  30. package/src/tool/cricketThermometer/i18n/es.ts +169 -169
  31. package/src/tool/cricketThermometer/i18n/fr.ts +169 -169
  32. package/src/tool/cricketThermometer/i18n/id.ts +169 -169
  33. package/src/tool/cricketThermometer/i18n/it.ts +169 -169
  34. package/src/tool/cricketThermometer/i18n/ja.ts +169 -169
  35. package/src/tool/cricketThermometer/i18n/ko.ts +169 -169
  36. package/src/tool/cricketThermometer/i18n/nl.ts +169 -169
  37. package/src/tool/cricketThermometer/i18n/pl.ts +169 -169
  38. package/src/tool/cricketThermometer/i18n/pt.ts +169 -169
  39. package/src/tool/cricketThermometer/i18n/ru.ts +169 -169
  40. package/src/tool/cricketThermometer/i18n/sv.ts +169 -169
  41. package/src/tool/cricketThermometer/i18n/tr.ts +169 -169
  42. package/src/tool/cricketThermometer/i18n/zh.ts +169 -169
  43. package/src/tool/cricketThermometer/seo.astro +15 -15
  44. package/src/tool/digitalCarbon/i18n/de.ts +229 -229
  45. package/src/tool/digitalCarbon/i18n/fr.ts +229 -229
  46. package/src/tool/digitalCarbon/i18n/ru.ts +229 -229
  47. package/src/tool/digitalCarbon/seo.astro +15 -15
  48. package/src/tool/rainHarvester/i18n/de.ts +167 -167
  49. package/src/tool/rainHarvester/i18n/en.ts +167 -167
  50. package/src/tool/rainHarvester/i18n/es.ts +167 -167
  51. package/src/tool/rainHarvester/i18n/fr.ts +167 -167
  52. package/src/tool/rainHarvester/i18n/id.ts +167 -167
  53. package/src/tool/rainHarvester/i18n/it.ts +167 -167
  54. package/src/tool/rainHarvester/i18n/ja.ts +167 -167
  55. package/src/tool/rainHarvester/i18n/ko.ts +167 -167
  56. package/src/tool/rainHarvester/i18n/nl.ts +167 -167
  57. package/src/tool/rainHarvester/i18n/pl.ts +167 -167
  58. package/src/tool/rainHarvester/i18n/pt.ts +167 -167
  59. package/src/tool/rainHarvester/i18n/ru.ts +167 -167
  60. package/src/tool/rainHarvester/i18n/sv.ts +167 -167
  61. package/src/tool/rainHarvester/i18n/tr.ts +167 -167
  62. package/src/tool/rainHarvester/i18n/zh.ts +167 -167
  63. package/src/tool/rainHarvester/seo.astro +15 -15
  64. package/src/tool/seedCalculator/i18n/fr.ts +197 -197
  65. package/src/tool/seedCalculator/i18n/pl.ts +197 -197
  66. package/src/tool/seedCalculator/i18n/ru.ts +197 -197
  67. package/src/tool/seedCalculator/seo.astro +15 -15
  68. package/src/types.ts +1 -1
@@ -1,167 +1,167 @@
1
- import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
- import { bibliography } from '../bibliography';
3
- import type { RainHarvesterLocaleContent } from '../index';
4
-
5
- const slug = 'calculadora-agua-lluvia';
6
- const title = 'Calculadora de Agua de Lluvia';
7
- const description = 'Calcula cuánta agua puedes recolectar de tu tejado y dimensiona tu tanque de almacenamiento.';
8
-
9
- const faqData = [
10
- {
11
- question: '¿Cuánta agua puedo recoger realmente de mi tejado?',
12
- answer: 'La regla general es que por cada metro cuadrado de techo y cada milímetro de lluvia, puedes recoger aproximadamente 1 litro de agua. Sin embargo, hay pérdidas por evaporación y filtración que se ajustan con el "coeficiente de escorrentía".',
13
- },
14
- {
15
- question: '¿Qué es el coeficiente de escorrentía?',
16
- answer: 'Es un porcentaje que indica cuánto agua se pierde según el material del techo. Un tejado de chapa o azulejo es muy eficiente (0.85-0.95), mientras que uno de grava o tierra es mucho menos eficiente (0.1-0.3).',
17
- },
18
- {
19
- question: '¿Cómo dimensionar el tanque de almacenamiento?',
20
- answer: 'Debes calcular el volumen de lluvia máxima esperada en un mes y cruzarlo con tu consumo mensual estimado. Un tanque demasiado pequeño desbordará en tormentas, y uno demasiado grande será innecesariamente caro.',
21
- },
22
- {
23
- question: '¿Es seguro beber agua de lluvia recolectada?',
24
- answer: 'No directamente. El agua arrastra polvo, excrementos de pájaros y partículas del aire. Para consumo humano, debe pasar por filtros de sedimentos, carbón activado y desinfección mediante luz UV o cloro.',
25
- },
26
- ];
27
-
28
- const howToData = [
29
- {
30
- name: 'Medir la superficie horizontal',
31
- text: 'Mide el largo y ancho de la base de tu tejado (no la superficie inclinada, sino el área que proyecta sombras sobre el suelo).',
32
- },
33
- {
34
- name: 'Consultar la pluviosidad local',
35
- text: 'Busca en el servicio meteorológico nacional la precipitación media anual o mensual de tu zona en milímetros (mm).',
36
- },
37
- {
38
- name: 'Aplicar eficiencia de materiales',
39
- text: 'Selecciona el material de tu techo en nuestra calculadora para descontar el agua que se perderá por absorción o calor.',
40
- },
41
- {
42
- name: 'Calcular el volumen necesario',
43
- text: 'Usa el resultado de litros anuales para elegir un depósito que pueda almacenar al menos el 20-30% de la cosecha total para épocas de sequía.',
44
- },
45
- ];
46
-
47
- const faqSchema: WithContext<FAQPage> = {
48
- '@context': 'https://schema.org',
49
- '@type': 'FAQPage',
50
- mainEntity: faqData.map((item) => ({
51
- '@type': 'Question',
52
- name: item.question,
53
- acceptedAnswer: { '@type': 'Answer', text: item.answer },
54
- })),
55
- };
56
-
57
- const howToSchema: WithContext<HowTo> = {
58
- '@context': 'https://schema.org',
59
- '@type': 'HowTo',
60
- name: title,
61
- description,
62
- step: howToData.map((step, i) => ({
63
- '@type': 'HowToStep',
64
- position: i + 1,
65
- name: step.name,
66
- text: step.text,
67
- })),
68
- };
69
-
70
- const appSchema: WithContext<SoftwareApplication> = {
71
- '@context': 'https://schema.org',
72
- '@type': 'SoftwareApplication',
73
- name: title,
74
- description,
75
- applicationCategory: 'UtilityApplication',
76
- operatingSystem: 'All',
77
- offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
78
- inLanguage: 'es',
79
- };
80
-
81
- export const content: RainHarvesterLocaleContent = {
82
- slug,
83
- title,
84
- description,
85
- ui: {
86
- headInputs: 'Configuración del Techo',
87
- headResults: 'Potencial de Cosecha',
88
- labelArea: 'Área del Techo',
89
- labelRainfall: 'Precipitación Anual',
90
- labelMaterial: 'Material del Techo',
91
- unitM2: 'm²',
92
- unitMm: 'mm',
93
- unitLiters: 'Litros',
94
- helpRainfall: '¿No lo sabes? Busca "precipitación media anual [tu ciudad]" en Google.',
95
- efficiencyTitle: 'Factor de Eficiencia',
96
- efficiencyNote: 'Se aplica una pérdida del 10% por filtros y evaporación.',
97
- resultTitle: 'Potencial de Cosecha Anual',
98
- equivalenciesTitle: 'Equivalencias Prácticas',
99
- labelFlushes: 'Descargas de WC',
100
- labelShowers: 'Duchas (10 min)',
101
- labelGarden: 'Riegos de Jardín',
102
- gardenArea: '(50m²)',
103
- materialMetal: 'Metal / Teja Esmaltada',
104
- materialClay: 'Teja Arábica / Arcilla',
105
- materialConcrete: 'Hormigón / Asfalto',
106
- materialGravel: 'Grava / Techo Verde',
107
- },
108
- seo: [
109
- {
110
- type: 'title',
111
- text: 'Cosecha de Agua de Lluvia: Autonomía y Sostenibilidad',
112
- level: 2,
113
- },
114
- {
115
- type: 'paragraph',
116
- html: 'La mayoría de los propietarios desconocen el potencial de sus propios tejados. Un techo estándar puede capturar miles de litros de agua gratuita cada año. Esta herramienta cuantifica ese potencial, permitiéndote calcular exactamente cuánta agua puedes "cosechar" y determinar el tamaño ideal del tanque para almacenarla.',
117
- },
118
- {
119
- type: 'title',
120
- text: 'Lógica del Cálculo',
121
- level: 3,
122
- },
123
- {
124
- type: 'paragraph',
125
- html: 'La fórmula base para la recolección de agua de lluvia es simple pero poderosa:',
126
- },
127
- {
128
- type: 'paragraph',
129
- html: '<code style="display:block;padding:1rem;background:var(-bg-alt);border-radius:0.5rem;margin:1rem 0;font-family:monospace;">Volumen = Área × Precipitación × Coeficiente de Escorrentía × Eficiencia del Filtro</code>',
130
- },
131
- {
132
- type: 'list',
133
- items: [
134
- '<strong>Área:</strong> La huella de tu techo (largo × ancho proyectado).',
135
- '<strong>Precipitación:</strong> La lluvia caída en milímetros.',
136
- '<strong>Coeficiente:</strong> Qué tanta agua pierde tu techo (ej. absorción).',
137
- '<strong>Eficiencia:</strong> Pérdidas en los filtros previos al tanque (~10%).',
138
- ],
139
- },
140
- {
141
- type: 'title',
142
- text: '¿Por qué recolectar lluvia?',
143
- level: 3,
144
- },
145
- {
146
- type: 'list',
147
- items: [
148
- '<strong>Ahorro:</strong> Reduce tu factura de agua significativamente.',
149
- '<strong>Jardinería:</strong> A las plantas les encanta el agua sin cloro ni cal.',
150
- '<strong>Resiliencia:</strong> Mantén una reserva de emergencia en caso de cortes.',
151
- ],
152
- },
153
- {
154
- type: 'title',
155
- text: 'Dimensionamiento del Tanque',
156
- level: 2,
157
- },
158
- {
159
- type: 'paragraph',
160
- html: 'El error más común es comprar un tanque basándose solo en el presupuesto. Si es muy pequeño, desperdiciarás miles de litros por desbordamiento. Si es muy grande, gastarás dinero innecesariamente. Una regla general es tener capacidad para almacenar el agua de <strong>3 meses</strong> de lluvia promedio en tu zona, permitiéndote superar las estaciones secas.',
161
- },
162
- ],
163
- faq: faqData,
164
- bibliography,
165
- howTo: howToData,
166
- schemas: [faqSchema, howToSchema, appSchema],
167
- };
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import { bibliography } from '../bibliography';
3
+ import type { RainHarvesterLocaleContent } from '../index';
4
+
5
+ const slug = 'calculadora-agua-lluvia';
6
+ const title = 'Calculadora de Agua de Lluvia';
7
+ const description = 'Calcula cuánta agua puedes recolectar de tu tejado y dimensiona tu tanque de almacenamiento.';
8
+
9
+ const faqData = [
10
+ {
11
+ question: '¿Cuánta agua puedo recoger realmente de mi tejado?',
12
+ answer: 'La regla general es que por cada metro cuadrado de techo y cada milímetro de lluvia, puedes recoger aproximadamente 1 litro de agua. Sin embargo, hay pérdidas por evaporación y filtración que se ajustan con el "coeficiente de escorrentía".',
13
+ },
14
+ {
15
+ question: '¿Qué es el coeficiente de escorrentía?',
16
+ answer: 'Es un porcentaje que indica cuánto agua se pierde según el material del techo. Un tejado de chapa o azulejo es muy eficiente (0.85-0.95), mientras que uno de grava o tierra es mucho menos eficiente (0.1-0.3).',
17
+ },
18
+ {
19
+ question: '¿Cómo dimensionar el tanque de almacenamiento?',
20
+ answer: 'Debes calcular el volumen de lluvia máxima esperada en un mes y cruzarlo con tu consumo mensual estimado. Un tanque demasiado pequeño desbordará en tormentas, y uno demasiado grande será innecesariamente caro.',
21
+ },
22
+ {
23
+ question: '¿Es seguro beber agua de lluvia recolectada?',
24
+ answer: 'No directamente. El agua arrastra polvo, excrementos de pájaros y partículas del aire. Para consumo humano, debe pasar por filtros de sedimentos, carbón activado y desinfección mediante luz UV o cloro.',
25
+ },
26
+ ];
27
+
28
+ const howToData = [
29
+ {
30
+ name: 'Medir la superficie horizontal',
31
+ text: 'Mide el largo y ancho de la base de tu tejado (no la superficie inclinada, sino el área que proyecta sombras sobre el suelo).',
32
+ },
33
+ {
34
+ name: 'Consultar la pluviosidad local',
35
+ text: 'Busca en el servicio meteorológico nacional la precipitación media anual o mensual de tu zona en milímetros (mm).',
36
+ },
37
+ {
38
+ name: 'Aplicar eficiencia de materiales',
39
+ text: 'Selecciona el material de tu techo en nuestra calculadora para descontar el agua que se perderá por absorción o calor.',
40
+ },
41
+ {
42
+ name: 'Calcular el volumen necesario',
43
+ text: 'Usa el resultado de litros anuales para elegir un depósito que pueda almacenar al menos el 20-30% de la cosecha total para épocas de sequía.',
44
+ },
45
+ ];
46
+
47
+ const faqSchema: WithContext<FAQPage> = {
48
+ '@context': 'https://schema.org',
49
+ '@type': 'FAQPage',
50
+ mainEntity: faqData.map((item) => ({
51
+ '@type': 'Question',
52
+ name: item.question,
53
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
54
+ })),
55
+ };
56
+
57
+ const howToSchema: WithContext<HowTo> = {
58
+ '@context': 'https://schema.org',
59
+ '@type': 'HowTo',
60
+ name: title,
61
+ description,
62
+ step: howToData.map((step, i) => ({
63
+ '@type': 'HowToStep',
64
+ position: i + 1,
65
+ name: step.name,
66
+ text: step.text,
67
+ })),
68
+ };
69
+
70
+ const appSchema: WithContext<SoftwareApplication> = {
71
+ '@context': 'https://schema.org',
72
+ '@type': 'SoftwareApplication',
73
+ name: title,
74
+ description,
75
+ applicationCategory: 'UtilityApplication',
76
+ operatingSystem: 'All',
77
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
78
+ inLanguage: 'es',
79
+ };
80
+
81
+ export const content: RainHarvesterLocaleContent = {
82
+ slug,
83
+ title,
84
+ description,
85
+ ui: {
86
+ headInputs: 'Configuración del Techo',
87
+ headResults: 'Potencial de Cosecha',
88
+ labelArea: 'Área del Techo',
89
+ labelRainfall: 'Precipitación Anual',
90
+ labelMaterial: 'Material del Techo',
91
+ unitM2: 'm²',
92
+ unitMm: 'mm',
93
+ unitLiters: 'Litros',
94
+ helpRainfall: '¿No lo sabes? Busca "precipitación media anual [tu ciudad]" en Google.',
95
+ efficiencyTitle: 'Factor de Eficiencia',
96
+ efficiencyNote: 'Se aplica una pérdida del 10% por filtros y evaporación.',
97
+ resultTitle: 'Potencial de Cosecha Anual',
98
+ equivalenciesTitle: 'Equivalencias Prácticas',
99
+ labelFlushes: 'Descargas de WC',
100
+ labelShowers: 'Duchas (10 min)',
101
+ labelGarden: 'Riegos de Jardín',
102
+ gardenArea: '(50m²)',
103
+ materialMetal: 'Metal / Teja Esmaltada',
104
+ materialClay: 'Teja Arábica / Arcilla',
105
+ materialConcrete: 'Hormigón / Asfalto',
106
+ materialGravel: 'Grava / Techo Verde',
107
+ },
108
+ seo: [
109
+ {
110
+ type: 'title',
111
+ text: 'Cosecha de Agua de Lluvia: Autonomía y Sostenibilidad',
112
+ level: 2,
113
+ },
114
+ {
115
+ type: 'paragraph',
116
+ html: 'La mayoría de los propietarios desconocen el potencial de sus propios tejados. Un techo estándar puede capturar miles de litros de agua gratuita cada año. Esta herramienta cuantifica ese potencial, permitiéndote calcular exactamente cuánta agua puedes "cosechar" y determinar el tamaño ideal del tanque para almacenarla.',
117
+ },
118
+ {
119
+ type: 'title',
120
+ text: 'Lógica del Cálculo',
121
+ level: 3,
122
+ },
123
+ {
124
+ type: 'paragraph',
125
+ html: 'La fórmula base para la recolección de agua de lluvia es simple pero poderosa:',
126
+ },
127
+ {
128
+ type: 'paragraph',
129
+ html: '<code style="display:block;padding:1rem;background:var(-bg-alt);border-radius:0.5rem;margin:1rem 0;font-family:monospace;">Volumen = Área × Precipitación × Coeficiente de Escorrentía × Eficiencia del Filtro</code>',
130
+ },
131
+ {
132
+ type: 'list',
133
+ items: [
134
+ '<strong>Área:</strong> La huella de tu techo (largo × ancho proyectado).',
135
+ '<strong>Precipitación:</strong> La lluvia caída en milímetros.',
136
+ '<strong>Coeficiente:</strong> Qué tanta agua pierde tu techo (ej. absorción).',
137
+ '<strong>Eficiencia:</strong> Pérdidas en los filtros previos al tanque (~10%).',
138
+ ],
139
+ },
140
+ {
141
+ type: 'title',
142
+ text: '¿Por qué recolectar lluvia?',
143
+ level: 3,
144
+ },
145
+ {
146
+ type: 'list',
147
+ items: [
148
+ '<strong>Ahorro:</strong> Reduce tu factura de agua significativamente.',
149
+ '<strong>Jardinería:</strong> A las plantas les encanta el agua sin cloro ni cal.',
150
+ '<strong>Resiliencia:</strong> Mantén una reserva de emergencia en caso de cortes.',
151
+ ],
152
+ },
153
+ {
154
+ type: 'title',
155
+ text: 'Dimensionamiento del Tanque',
156
+ level: 2,
157
+ },
158
+ {
159
+ type: 'paragraph',
160
+ html: 'El error más común es comprar un tanque basándose solo en el presupuesto. Si es muy pequeño, desperdiciarás miles de litros por desbordamiento. Si es muy grande, gastarás dinero innecesariamente. Una regla general es tener capacidad para almacenar el agua de <strong>3 meses</strong> de lluvia promedio en tu zona, permitiéndote superar las estaciones secas.',
161
+ },
162
+ ],
163
+ faq: faqData,
164
+ bibliography,
165
+ howTo: howToData,
166
+ schemas: [faqSchema, howToSchema, appSchema],
167
+ };