@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 = 'regnvatten-kalkylator';
6
- const title = 'Kalkylator för regnvatteninsamling';
7
- const description = 'Beräkna hur mycket regnvatten du kan samla in från ditt tak och dimensionera din lagringstank.';
8
-
9
- const faqData = [
10
- {
11
- question: 'Hur mycket vatten kan jag faktiskt samla in från mitt tak?',
12
- answer: 'Den allmänna regeln är att för varje kvadratmeter tak och varje millimeter regn kan du samla in cirka 1 liter vatten. Det finns dock förluster från avdunstning och filtrering som justeras med en "avrinningskoefficient".',
13
- },
14
- {
15
- question: 'Vad är en avrinningskoefficient?',
16
- answer: 'Det är en procentsats som anger hur mycket vatten som går förlorat beroende på takmaterialet. Ett plåt- eller tegeltak är mycket effektivt (0,85-0,95), medan ett grus- eller jordtak är mycket mindre effektivt (0,1-0,3).',
17
- },
18
- {
19
- question: 'Hur dimensionerar jag lagringstanken?',
20
- answer: 'Du bör beräkna den maximala förväntade regnvolymen under en månad och jämföra den med din uppskattade månatliga förbrukning. En tank som är för liten kommer att svämma över vid skyfall, och en som är för stor blir onödigt dyr.',
21
- },
22
- {
23
- question: 'Är det säkert att dricka insamlat regnvatten?',
24
- answer: 'Inte direkt. Vatten för med sig damm, fågelspillning och luftburna partiklar. För mänsklig konsumtion måste det passera genom sedimentfilter, aktivt kol och desinfektion med UV-ljus eller klor.',
25
- },
26
- ];
27
-
28
- const howToData = [
29
- {
30
- name: 'Mät den horisontella ytan',
31
- text: 'Mät längden och bredden på din takbas (inte den sluttande ytan, utan ytan som projicerar skuggor på marken).',
32
- },
33
- {
34
- name: 'Kontrollera lokal nederbörd',
35
- text: 'Sök hos den nationella meteorologiska tjänsten efter den genomsnittliga årliga eller månatliga nederbörden i ditt område i millimeter (mm).',
36
- },
37
- {
38
- name: 'Tillämpa materialeffektivitet',
39
- text: 'Välj ditt takmaterial i vår kalkylator för att dra av det vatten som går förlorat genom absorption eller värme.',
40
- },
41
- {
42
- name: 'Beräkna den erforderliga volymen',
43
- text: 'Använd det årliga litresultatet för att välja en tank som kan lagra minst 20-30 % av den totala skörden för torra perioder.',
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: 'sv',
79
- };
80
-
81
- export const content: RainHarvesterLocaleContent = {
82
- slug,
83
- title,
84
- description,
85
- ui: {
86
- headInputs: 'Takinställningar',
87
- headResults: 'Skördepotential',
88
- labelArea: 'Takarea',
89
- labelRainfall: 'Årlig nederbörd',
90
- labelMaterial: 'Takmaterial',
91
- unitM2: 'm²',
92
- unitMm: 'mm',
93
- unitLiters: 'Liter',
94
- helpRainfall: 'Vet du inte? Sök på "genomsnittlig årlig nederbörd [din stad]" på Google.',
95
- efficiencyTitle: 'Effektivitetsfaktor',
96
- efficiencyNote: 'En förlust på 10 % tillämpas för filter och avdunstning.',
97
- resultTitle: 'Årlig skördepotential',
98
- equivalenciesTitle: 'Praktiska motsvarigheter',
99
- labelFlushes: 'Toalettspolningar',
100
- labelShowers: 'Duschar (10 min)',
101
- labelGarden: 'Bevattning av trädgård',
102
- gardenArea: '(50m²)',
103
- materialMetal: 'Plåt / Glaserat tegel',
104
- materialClay: 'Vingtegel / Lera',
105
- materialConcrete: 'Betong / Asfalt',
106
- materialGravel: 'Grus / Grönt tak',
107
- },
108
- seo: [
109
- {
110
- type: 'title',
111
- text: 'Regnvatteninsamling: Autonomi och hållbarhet',
112
- level: 2,
113
- },
114
- {
115
- type: 'paragraph',
116
- html: 'De flesta husägare är omedvetna om potentialen i sina egna tak. Ett standardtak kan fånga in tusentals liter gratis vatten varje år. Detta verktyg kvantifierar den potentialen, så att du kan beräkna exakt hur mycket vatten du kan "skörda" och bestämma den ideala tankstorleken för lagring.',
117
- },
118
- {
119
- type: 'title',
120
- text: 'Beräkningslogik',
121
- level: 3,
122
- },
123
- {
124
- type: 'paragraph',
125
- html: 'Basformeln för regnvatteninsamling är enkel men kraftfull:',
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;">Volym = Area × Nederbörd × Avrinningskoefficient × Filtereffektivitet</code>',
130
- },
131
- {
132
- type: 'list',
133
- items: [
134
- '<strong>Area:</strong> Din takyta (projicerad längd × bredd).',
135
- '<strong>Nederbörd:</strong> Fallande regn i millimeter.',
136
- '<strong>Koefficient:</strong> Hur mycket vatten ditt tak förlorar (t.ex. absorption).',
137
- '<strong>Effektivitet:</strong> Förluster i filter före tanken (~10 %).',
138
- ],
139
- },
140
- {
141
- type: 'title',
142
- text: 'Varför samla regnvatten?',
143
- level: 3,
144
- },
145
- {
146
- type: 'list',
147
- items: [
148
- '<strong>Besparingar:</strong> Minska din vattenräkning avsevärt.',
149
- '<strong>Trädgårdsarbete:</strong> Växter älskar vatten utan klor eller kalk.',
150
- '<strong>Motståndskraft:</strong> Behåll en reserv för nödsituationer vid avbrott.',
151
- ],
152
- },
153
- {
154
- type: 'title',
155
- text: 'Dimensionering av tank',
156
- level: 2,
157
- },
158
- {
159
- type: 'paragraph',
160
- html: 'Det vanligaste misstaget är att köpa en tank enbart baserat på budget. Om den är för liten kommer du att slösa bort tusentals liter på grund av överfyllnad. Om den är för stor kommer du att spendera pengar i onödan. En allmän regel är att ha kapacitet att lagra <strong>3 månader</strong> av genomsnittlig nederbörd i ditt område, vilket gör att du kan överbrygga torrperioder.',
161
- },
162
- ],
163
- faq: faqData,
164
- howTo: howToData,
165
- bibliography,
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 = 'regnvatten-kalkylator';
6
+ const title = 'Kalkylator för regnvatteninsamling';
7
+ const description = 'Beräkna hur mycket regnvatten du kan samla in från ditt tak och dimensionera din lagringstank.';
8
+
9
+ const faqData = [
10
+ {
11
+ question: 'Hur mycket vatten kan jag faktiskt samla in från mitt tak?',
12
+ answer: 'Den allmänna regeln är att för varje kvadratmeter tak och varje millimeter regn kan du samla in cirka 1 liter vatten. Det finns dock förluster från avdunstning och filtrering som justeras med en "avrinningskoefficient".',
13
+ },
14
+ {
15
+ question: 'Vad är en avrinningskoefficient?',
16
+ answer: 'Det är en procentsats som anger hur mycket vatten som går förlorat beroende på takmaterialet. Ett plåt- eller tegeltak är mycket effektivt (0,85-0,95), medan ett grus- eller jordtak är mycket mindre effektivt (0,1-0,3).',
17
+ },
18
+ {
19
+ question: 'Hur dimensionerar jag lagringstanken?',
20
+ answer: 'Du bör beräkna den maximala förväntade regnvolymen under en månad och jämföra den med din uppskattade månatliga förbrukning. En tank som är för liten kommer att svämma över vid skyfall, och en som är för stor blir onödigt dyr.',
21
+ },
22
+ {
23
+ question: 'Är det säkert att dricka insamlat regnvatten?',
24
+ answer: 'Inte direkt. Vatten för med sig damm, fågelspillning och luftburna partiklar. För mänsklig konsumtion måste det passera genom sedimentfilter, aktivt kol och desinfektion med UV-ljus eller klor.',
25
+ },
26
+ ];
27
+
28
+ const howToData = [
29
+ {
30
+ name: 'Mät den horisontella ytan',
31
+ text: 'Mät längden och bredden på din takbas (inte den sluttande ytan, utan ytan som projicerar skuggor på marken).',
32
+ },
33
+ {
34
+ name: 'Kontrollera lokal nederbörd',
35
+ text: 'Sök hos den nationella meteorologiska tjänsten efter den genomsnittliga årliga eller månatliga nederbörden i ditt område i millimeter (mm).',
36
+ },
37
+ {
38
+ name: 'Tillämpa materialeffektivitet',
39
+ text: 'Välj ditt takmaterial i vår kalkylator för att dra av det vatten som går förlorat genom absorption eller värme.',
40
+ },
41
+ {
42
+ name: 'Beräkna den erforderliga volymen',
43
+ text: 'Använd det årliga litresultatet för att välja en tank som kan lagra minst 20-30 % av den totala skörden för torra perioder.',
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: 'sv',
79
+ };
80
+
81
+ export const content: RainHarvesterLocaleContent = {
82
+ slug,
83
+ title,
84
+ description,
85
+ ui: {
86
+ headInputs: 'Takinställningar',
87
+ headResults: 'Skördepotential',
88
+ labelArea: 'Takarea',
89
+ labelRainfall: 'Årlig nederbörd',
90
+ labelMaterial: 'Takmaterial',
91
+ unitM2: 'm²',
92
+ unitMm: 'mm',
93
+ unitLiters: 'Liter',
94
+ helpRainfall: 'Vet du inte? Sök på "genomsnittlig årlig nederbörd [din stad]" på Google.',
95
+ efficiencyTitle: 'Effektivitetsfaktor',
96
+ efficiencyNote: 'En förlust på 10 % tillämpas för filter och avdunstning.',
97
+ resultTitle: 'Årlig skördepotential',
98
+ equivalenciesTitle: 'Praktiska motsvarigheter',
99
+ labelFlushes: 'Toalettspolningar',
100
+ labelShowers: 'Duschar (10 min)',
101
+ labelGarden: 'Bevattning av trädgård',
102
+ gardenArea: '(50m²)',
103
+ materialMetal: 'Plåt / Glaserat tegel',
104
+ materialClay: 'Vingtegel / Lera',
105
+ materialConcrete: 'Betong / Asfalt',
106
+ materialGravel: 'Grus / Grönt tak',
107
+ },
108
+ seo: [
109
+ {
110
+ type: 'title',
111
+ text: 'Regnvatteninsamling: Autonomi och hållbarhet',
112
+ level: 2,
113
+ },
114
+ {
115
+ type: 'paragraph',
116
+ html: 'De flesta husägare är omedvetna om potentialen i sina egna tak. Ett standardtak kan fånga in tusentals liter gratis vatten varje år. Detta verktyg kvantifierar den potentialen, så att du kan beräkna exakt hur mycket vatten du kan "skörda" och bestämma den ideala tankstorleken för lagring.',
117
+ },
118
+ {
119
+ type: 'title',
120
+ text: 'Beräkningslogik',
121
+ level: 3,
122
+ },
123
+ {
124
+ type: 'paragraph',
125
+ html: 'Basformeln för regnvatteninsamling är enkel men kraftfull:',
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;">Volym = Area × Nederbörd × Avrinningskoefficient × Filtereffektivitet</code>',
130
+ },
131
+ {
132
+ type: 'list',
133
+ items: [
134
+ '<strong>Area:</strong> Din takyta (projicerad längd × bredd).',
135
+ '<strong>Nederbörd:</strong> Fallande regn i millimeter.',
136
+ '<strong>Koefficient:</strong> Hur mycket vatten ditt tak förlorar (t.ex. absorption).',
137
+ '<strong>Effektivitet:</strong> Förluster i filter före tanken (~10 %).',
138
+ ],
139
+ },
140
+ {
141
+ type: 'title',
142
+ text: 'Varför samla regnvatten?',
143
+ level: 3,
144
+ },
145
+ {
146
+ type: 'list',
147
+ items: [
148
+ '<strong>Besparingar:</strong> Minska din vattenräkning avsevärt.',
149
+ '<strong>Trädgårdsarbete:</strong> Växter älskar vatten utan klor eller kalk.',
150
+ '<strong>Motståndskraft:</strong> Behåll en reserv för nödsituationer vid avbrott.',
151
+ ],
152
+ },
153
+ {
154
+ type: 'title',
155
+ text: 'Dimensionering av tank',
156
+ level: 2,
157
+ },
158
+ {
159
+ type: 'paragraph',
160
+ html: 'Det vanligaste misstaget är att köpa en tank enbart baserat på budget. Om den är för liten kommer du att slösa bort tusentals liter på grund av överfyllnad. Om den är för stor kommer du att spendera pengar i onödan. En allmän regel är att ha kapacitet att lagra <strong>3 månader</strong> av genomsnittlig nederbörd i ditt område, vilket gör att du kan överbrygga torrperioder.',
161
+ },
162
+ ],
163
+ faq: faqData,
164
+ howTo: howToData,
165
+ bibliography,
166
+ schemas: [faqSchema, howToSchema, appSchema],
167
+ };