@jjlmoya/utils-nature 1.23.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 (64) 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/category_seo_quality.test.ts +74 -0
  17. package/src/tests/faq_count.test.ts +19 -19
  18. package/src/tests/mocks/astro_mock.js +1 -1
  19. package/src/tests/no_en_dash.test.ts +71 -71
  20. package/src/tests/no_h1_in_components.test.ts +1 -1
  21. package/src/tests/seo_length.test.ts +23 -23
  22. package/src/tests/seo_parity.test.ts +2 -2
  23. package/src/tests/spanish_leakage.test.ts +175 -175
  24. package/src/tool/cricketThermometer/i18n/de.ts +169 -169
  25. package/src/tool/cricketThermometer/i18n/en.ts +169 -169
  26. package/src/tool/cricketThermometer/i18n/es.ts +169 -169
  27. package/src/tool/cricketThermometer/i18n/fr.ts +169 -169
  28. package/src/tool/cricketThermometer/i18n/id.ts +169 -169
  29. package/src/tool/cricketThermometer/i18n/it.ts +169 -169
  30. package/src/tool/cricketThermometer/i18n/ja.ts +169 -169
  31. package/src/tool/cricketThermometer/i18n/ko.ts +169 -169
  32. package/src/tool/cricketThermometer/i18n/nl.ts +169 -169
  33. package/src/tool/cricketThermometer/i18n/pl.ts +169 -169
  34. package/src/tool/cricketThermometer/i18n/pt.ts +169 -169
  35. package/src/tool/cricketThermometer/i18n/ru.ts +169 -169
  36. package/src/tool/cricketThermometer/i18n/sv.ts +169 -169
  37. package/src/tool/cricketThermometer/i18n/tr.ts +169 -169
  38. package/src/tool/cricketThermometer/i18n/zh.ts +169 -169
  39. package/src/tool/cricketThermometer/seo.astro +15 -15
  40. package/src/tool/digitalCarbon/i18n/de.ts +229 -229
  41. package/src/tool/digitalCarbon/i18n/fr.ts +229 -229
  42. package/src/tool/digitalCarbon/i18n/ru.ts +229 -229
  43. package/src/tool/digitalCarbon/seo.astro +15 -15
  44. package/src/tool/rainHarvester/i18n/de.ts +167 -167
  45. package/src/tool/rainHarvester/i18n/en.ts +167 -167
  46. package/src/tool/rainHarvester/i18n/es.ts +167 -167
  47. package/src/tool/rainHarvester/i18n/fr.ts +167 -167
  48. package/src/tool/rainHarvester/i18n/id.ts +167 -167
  49. package/src/tool/rainHarvester/i18n/it.ts +167 -167
  50. package/src/tool/rainHarvester/i18n/ja.ts +167 -167
  51. package/src/tool/rainHarvester/i18n/ko.ts +167 -167
  52. package/src/tool/rainHarvester/i18n/nl.ts +167 -167
  53. package/src/tool/rainHarvester/i18n/pl.ts +167 -167
  54. package/src/tool/rainHarvester/i18n/pt.ts +167 -167
  55. package/src/tool/rainHarvester/i18n/ru.ts +167 -167
  56. package/src/tool/rainHarvester/i18n/sv.ts +167 -167
  57. package/src/tool/rainHarvester/i18n/tr.ts +167 -167
  58. package/src/tool/rainHarvester/i18n/zh.ts +167 -167
  59. package/src/tool/rainHarvester/seo.astro +15 -15
  60. package/src/tool/seedCalculator/i18n/fr.ts +197 -197
  61. package/src/tool/seedCalculator/i18n/pl.ts +197 -197
  62. package/src/tool/seedCalculator/i18n/ru.ts +197 -197
  63. package/src/tool/seedCalculator/seo.astro +15 -15
  64. 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 = 'kalkulyator-dozhdevoy-vody';
6
- const title = 'Калькулятор сбора дождевой воды';
7
- const description = 'Рассчитайте, сколько дождевой воды вы можете собрать со своей крыши, и подберите размер накопительного бака.';
8
-
9
- const faqData = [
10
- {
11
- question: 'Сколько воды я на самом деле могу собрать со своей крыши?',
12
- answer: 'Общее правило гласит, что на каждый квадратный метр крыши и каждый миллиметр дождя можно собрать примерно 1 литр воды. Однако существуют потери на испарение и фильтрацию, корректируемые "коэффициентом стока".',
13
- },
14
- {
15
- question: 'Что такое коэффициент стока?',
16
- answer: 'Это процент, указывающий, сколько воды теряется в зависимости от материала крыши. Металлическая или черепичная крыша очень эффективна (0,85-0,95), в то время как гравийная или земляная крыша гораздо менее эффективна (0,1-0,3).',
17
- },
18
- {
19
- question: 'Как подобрать размер накопительного бака?',
20
- answer: 'Вам следует рассчитать максимальный ожидаемый объем дождя в месяц и сопоставить его с вашим расчетным ежемесячным потреблением. Слишком маленький бак будет переполняться во время ливней, а слишком большой будет неоправданно дорогим.',
21
- },
22
- {
23
- question: 'Безопасно ли пить собранную дождевую воду?',
24
- answer: 'Не напрямую. Вода переносит пыль, птичий помет и частицы из воздуха. Для употребления человеком она должна пройти через осадочные фильтры, активированный уголь и дезинфекцию с помощью УФ-излучения или хлора.',
25
- },
26
- ];
27
-
28
- const howToData = [
29
- {
30
- name: 'Измерьте горизонтальную поверхность',
31
- text: 'Измерьте длину и ширину основания вашей крыши (не наклонную поверхность, а площадь, которая проецирует тень на землю).',
32
- },
33
- {
34
- name: 'Проверьте локальный уровень осадков',
35
- text: 'Найдите в национальной метеорологической службе среднегодовое или ежемесячное количество осадков в вашем районе в миллиметрах (мм).',
36
- },
37
- {
38
- name: 'Примените эффективность материала',
39
- text: 'Выберите материал вашей крыши в нашем калькуляторе, чтобы вычесть воду, которая будет потеряна из-за впитывания или нагрева.',
40
- },
41
- {
42
- name: 'Рассчитайте необходимый объем',
43
- text: 'Используйте результат годового сбора в литрах, чтобы выбрать бак, который может хранить не менее 20-30% от общего урожая для засушливых периодов.',
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: 'ru',
79
- };
80
-
81
- export const content: RainHarvesterLocaleContent = {
82
- slug,
83
- title,
84
- description,
85
- ui: {
86
- headInputs: 'Настройки крыши',
87
- headResults: 'Потенциал сбора',
88
- labelArea: 'Площадь крыши',
89
- labelRainfall: 'Годовое количество осадков',
90
- labelMaterial: 'Материал крыши',
91
- unitM2: 'м²',
92
- unitMm: 'мм',
93
- unitLiters: 'Литры',
94
- helpRainfall: 'Не знаете? Поищите в Google "среднегодовое количество осадков в [вашем городе]".',
95
- efficiencyTitle: 'Коэффициент эффективности',
96
- efficiencyNote: 'Применяется потеря 10% на фильтры и испарение.',
97
- resultTitle: 'Годовой потенциал сбора',
98
- equivalenciesTitle: 'Практические эквиваленты',
99
- labelFlushes: 'Смывы унитаза',
100
- labelShowers: 'Принятия душа (10 мин)',
101
- labelGarden: 'Полив сада',
102
- gardenArea: '(50м²)',
103
- materialMetal: 'Металл / Глазурованная черепица',
104
- materialClay: 'Керамическая черепица / Глина',
105
- materialConcrete: 'Бетон / Асфальт',
106
- materialGravel: 'Гравий / Зеленая крыша',
107
- },
108
- seo: [
109
- {
110
- type: 'title',
111
- text: 'Сбор дождевой воды: Автономия и устойчивое развитие',
112
- level: 2,
113
- },
114
- {
115
- type: 'paragraph',
116
- html: 'Большинство домовладельцев не подозревают о потенциале собственных крыш. Стандартная крыша может собирать тысячи литров бесплатной воды каждый год. Этот инструмент количественно определяет этот потенциал, позволяя вам точно рассчитать, сколько воды вы можете "собрать", и определить идеальный размер бака для хранения.',
117
- },
118
- {
119
- type: 'title',
120
- text: 'Логика расчета',
121
- level: 3,
122
- },
123
- {
124
- type: 'paragraph',
125
- html: 'Базовая формула для сбора дождевой воды проста, но эффективна:',
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;">Объем = Площадь × Осадки × Коэффициент стока × Эффективность фильтра</code>',
130
- },
131
- {
132
- type: 'list',
133
- items: [
134
- '<strong>Площадь:</strong> Основание вашей крыши (проекция длина × ширина).',
135
- '<strong>Осадки:</strong> Выпадающий дождь в миллиметрах.',
136
- '<strong>Коэффициент:</strong> Сколько воды теряет ваша крыша (например, впитывание).',
137
- '<strong>Эффективность:</strong> Потери в фильтрах перед баком (~10%).',
138
- ],
139
- },
140
- {
141
- type: 'title',
142
- text: 'Зачем собирать дождевую воду?',
143
- level: 3,
144
- },
145
- {
146
- type: 'list',
147
- items: [
148
- '<strong>Экономия:</strong> Значительно сократите свои счета за воду.',
149
- '<strong>Садоводство:</strong> Растения любят воду без хлора и извести.',
150
- '<strong>Устойчивость:</strong> Имейте аварийный запас на случай отключений.',
151
- ],
152
- },
153
- {
154
- type: 'title',
155
- text: 'Размер бака',
156
- level: 2,
157
- },
158
- {
159
- type: 'paragraph',
160
- html: 'Самая распространенная ошибка - покупка бака, исходя только из бюджета. Если он слишком мал, вы будете терять тысячи литров из-за перелива. Если он слишком велик, вы потратите деньги зря. Общее правило - иметь емкость для хранения среднего количества осадков за <strong>3 месяца</strong> в вашем районе, что позволит вам пережить засушливые сезоны.',
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 = 'kalkulyator-dozhdevoy-vody';
6
+ const title = 'Калькулятор сбора дождевой воды';
7
+ const description = 'Рассчитайте, сколько дождевой воды вы можете собрать со своей крыши, и подберите размер накопительного бака.';
8
+
9
+ const faqData = [
10
+ {
11
+ question: 'Сколько воды я на самом деле могу собрать со своей крыши?',
12
+ answer: 'Общее правило гласит, что на каждый квадратный метр крыши и каждый миллиметр дождя можно собрать примерно 1 литр воды. Однако существуют потери на испарение и фильтрацию, корректируемые "коэффициентом стока".',
13
+ },
14
+ {
15
+ question: 'Что такое коэффициент стока?',
16
+ answer: 'Это процент, указывающий, сколько воды теряется в зависимости от материала крыши. Металлическая или черепичная крыша очень эффективна (0,85-0,95), в то время как гравийная или земляная крыша гораздо менее эффективна (0,1-0,3).',
17
+ },
18
+ {
19
+ question: 'Как подобрать размер накопительного бака?',
20
+ answer: 'Вам следует рассчитать максимальный ожидаемый объем дождя в месяц и сопоставить его с вашим расчетным ежемесячным потреблением. Слишком маленький бак будет переполняться во время ливней, а слишком большой будет неоправданно дорогим.',
21
+ },
22
+ {
23
+ question: 'Безопасно ли пить собранную дождевую воду?',
24
+ answer: 'Не напрямую. Вода переносит пыль, птичий помет и частицы из воздуха. Для употребления человеком она должна пройти через осадочные фильтры, активированный уголь и дезинфекцию с помощью УФ-излучения или хлора.',
25
+ },
26
+ ];
27
+
28
+ const howToData = [
29
+ {
30
+ name: 'Измерьте горизонтальную поверхность',
31
+ text: 'Измерьте длину и ширину основания вашей крыши (не наклонную поверхность, а площадь, которая проецирует тень на землю).',
32
+ },
33
+ {
34
+ name: 'Проверьте локальный уровень осадков',
35
+ text: 'Найдите в национальной метеорологической службе среднегодовое или ежемесячное количество осадков в вашем районе в миллиметрах (мм).',
36
+ },
37
+ {
38
+ name: 'Примените эффективность материала',
39
+ text: 'Выберите материал вашей крыши в нашем калькуляторе, чтобы вычесть воду, которая будет потеряна из-за впитывания или нагрева.',
40
+ },
41
+ {
42
+ name: 'Рассчитайте необходимый объем',
43
+ text: 'Используйте результат годового сбора в литрах, чтобы выбрать бак, который может хранить не менее 20-30% от общего урожая для засушливых периодов.',
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: 'ru',
79
+ };
80
+
81
+ export const content: RainHarvesterLocaleContent = {
82
+ slug,
83
+ title,
84
+ description,
85
+ ui: {
86
+ headInputs: 'Настройки крыши',
87
+ headResults: 'Потенциал сбора',
88
+ labelArea: 'Площадь крыши',
89
+ labelRainfall: 'Годовое количество осадков',
90
+ labelMaterial: 'Материал крыши',
91
+ unitM2: 'м²',
92
+ unitMm: 'мм',
93
+ unitLiters: 'Литры',
94
+ helpRainfall: 'Не знаете? Поищите в Google "среднегодовое количество осадков в [вашем городе]".',
95
+ efficiencyTitle: 'Коэффициент эффективности',
96
+ efficiencyNote: 'Применяется потеря 10% на фильтры и испарение.',
97
+ resultTitle: 'Годовой потенциал сбора',
98
+ equivalenciesTitle: 'Практические эквиваленты',
99
+ labelFlushes: 'Смывы унитаза',
100
+ labelShowers: 'Принятия душа (10 мин)',
101
+ labelGarden: 'Полив сада',
102
+ gardenArea: '(50м²)',
103
+ materialMetal: 'Металл / Глазурованная черепица',
104
+ materialClay: 'Керамическая черепица / Глина',
105
+ materialConcrete: 'Бетон / Асфальт',
106
+ materialGravel: 'Гравий / Зеленая крыша',
107
+ },
108
+ seo: [
109
+ {
110
+ type: 'title',
111
+ text: 'Сбор дождевой воды: Автономия и устойчивое развитие',
112
+ level: 2,
113
+ },
114
+ {
115
+ type: 'paragraph',
116
+ html: 'Большинство домовладельцев не подозревают о потенциале собственных крыш. Стандартная крыша может собирать тысячи литров бесплатной воды каждый год. Этот инструмент количественно определяет этот потенциал, позволяя вам точно рассчитать, сколько воды вы можете "собрать", и определить идеальный размер бака для хранения.',
117
+ },
118
+ {
119
+ type: 'title',
120
+ text: 'Логика расчета',
121
+ level: 3,
122
+ },
123
+ {
124
+ type: 'paragraph',
125
+ html: 'Базовая формула для сбора дождевой воды проста, но эффективна:',
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;">Объем = Площадь × Осадки × Коэффициент стока × Эффективность фильтра</code>',
130
+ },
131
+ {
132
+ type: 'list',
133
+ items: [
134
+ '<strong>Площадь:</strong> Основание вашей крыши (проекция длина × ширина).',
135
+ '<strong>Осадки:</strong> Выпадающий дождь в миллиметрах.',
136
+ '<strong>Коэффициент:</strong> Сколько воды теряет ваша крыша (например, впитывание).',
137
+ '<strong>Эффективность:</strong> Потери в фильтрах перед баком (~10%).',
138
+ ],
139
+ },
140
+ {
141
+ type: 'title',
142
+ text: 'Зачем собирать дождевую воду?',
143
+ level: 3,
144
+ },
145
+ {
146
+ type: 'list',
147
+ items: [
148
+ '<strong>Экономия:</strong> Значительно сократите свои счета за воду.',
149
+ '<strong>Садоводство:</strong> Растения любят воду без хлора и извести.',
150
+ '<strong>Устойчивость:</strong> Имейте аварийный запас на случай отключений.',
151
+ ],
152
+ },
153
+ {
154
+ type: 'title',
155
+ text: 'Размер бака',
156
+ level: 2,
157
+ },
158
+ {
159
+ type: 'paragraph',
160
+ html: 'Самая распространенная ошибка - покупка бака, исходя только из бюджета. Если он слишком мал, вы будете терять тысячи литров из-за перелива. Если он слишком велик, вы потратите деньги зря. Общее правило - иметь емкость для хранения среднего количества осадков за <strong>3 месяца</strong> в вашем районе, что позволит вам пережить засушливые сезоны.',
161
+ },
162
+ ],
163
+ faq: faqData,
164
+ howTo: howToData,
165
+ bibliography,
166
+ schemas: [faqSchema, howToSchema, appSchema],
167
+ };