@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 = 'yagmur-suyu-hesaplayici';
6
- const title = 'Yağmur Suyu Hasadı Hesaplayıcı';
7
- const description = 'Çatınızdan ne kadar yağmur suyu toplayabileceğinizi hesaplayın ve depolama tankınızı boyutlandırın.';
8
-
9
- const faqData = [
10
- {
11
- question: 'Çatımdan gerçekte ne kadar su toplayabilirim?',
12
- answer: 'Genel kural, her metrekare çatı ve her milimetre yağmur için yaklaşık 1 litre su toplayabileceğinizdir. Ancak, "akış katsayısı" ile ayarlanan buharlaşma ve filtrasyon kaynaklı kayıplar vardır.',
13
- },
14
- {
15
- question: 'Akış katsayısı nedir?',
16
- answer: 'Çatı malzemesine bağlı olarak ne kadar suyun kaybolduğunu gösteren bir yüzdedir. Metal veya kiremit bir çatı çok verimlidir (0,85-0,95), çakıl veya toprak bir çatı ise çok daha az verimlidir (0,1-0,3).',
17
- },
18
- {
19
- question: 'Depolama tankını nasıl boyutlandırırım?',
20
- answer: 'Bir ayda beklenen maksimum yağmur hacmini hesaplamalı ve bunu tahmini aylık tüketiminizle karşılaştırmalısınız. Çok küçük bir tank fırtınalarda taşar, çok büyük olanı ise gereksiz yere pahalı olur.',
21
- },
22
- {
23
- question: 'Toplanan yağmur suyunu içmek güvenli midir?',
24
- answer: 'Doğrudan değil. Su, toz, kuş pisliği ve havadaki partikülleri taşır. İnsan tüketimi için tortu filtrelerinden, aktif karbondan geçmeli ve UV ışığı veya klor kullanılarak dezenfekte edilmelidir.',
25
- },
26
- ];
27
-
28
- const howToData = [
29
- {
30
- name: 'Yatay yüzeyi ölçün',
31
- text: 'Çatı tabanınızın uzunluğunu ve genişliğini ölçün (eğimli yüzeyi değil, yere gölge düşüren alanı).',
32
- },
33
- {
34
- name: 'Yerel yağış miktarını kontrol edin',
35
- text: 'Bölgenizdeki yıllık veya aylık ortalama yağış miktarını milimetre (mm) cinsinden öğrenmek için ulusal meteoroloji servisini kontrol edin.',
36
- },
37
- {
38
- name: 'Malzeme verimliliğini uygulayın',
39
- text: 'Emme veya ısı yoluyla kaybolacak suyu düşmek için hesaplayıcımızda çatı malzemenizi seçin.',
40
- },
41
- {
42
- name: 'Gerekli hacmi hesaplayın',
43
- text: 'Kurak dönemler için toplam hasadın en az %20-30\'unu depolayabilecek bir tank seçmek için yıllık litre sonucunu kullanın.',
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: 'tr',
79
- };
80
-
81
- export const content: RainHarvesterLocaleContent = {
82
- slug,
83
- title,
84
- description,
85
- ui: {
86
- headInputs: 'Çatı Ayarları',
87
- headResults: 'Hasat Potansiyeli',
88
- labelArea: 'Çatı Alanı',
89
- labelRainfall: 'Yıllık Yağış',
90
- labelMaterial: 'Çatı Malzemesi',
91
- unitM2: 'm²',
92
- unitMm: 'mm',
93
- unitLiters: 'Litre',
94
- helpRainfall: 'Bilmiyor musunuz? Google\'da "ortalama yıllık yağış [şehriniz]" diye aratın.',
95
- efficiencyTitle: 'Verimlilik Faktörü',
96
- efficiencyNote: 'Filtreler ve buharlaşma için %10\'luk bir kayıp uygulanır.',
97
- resultTitle: 'Yıllık Hasat Potansiyeli',
98
- equivalenciesTitle: 'Pratik Karşılıklar',
99
- labelFlushes: 'Sifon Çekme',
100
- labelShowers: 'Duş (10 dk)',
101
- labelGarden: 'Bahçe Sulama',
102
- gardenArea: '(50m²)',
103
- materialMetal: 'Metal / Sırlı Kiremit',
104
- materialClay: 'Alaturka Kiremit / Kil',
105
- materialConcrete: 'Beton / Asfalt',
106
- materialGravel: 'Çakıl / Yeşil Çatı',
107
- },
108
- seo: [
109
- {
110
- type: 'title',
111
- text: 'Yağmur Suyu Hasadı: Özerklik ve Sürdürülebilirlik',
112
- level: 2,
113
- },
114
- {
115
- type: 'paragraph',
116
- html: 'Çoğu ev sahibi kendi çatılarının potansiyelinin farkında değildir. Standart bir çatı her yıl binlerce litre bedava su yakalayabilir. Bu araç, bu potansiyeli sayısallaştırarak ne kadar su "hasat" edebileceğinizi tam olarak hesaplamanıza ve depolama için ideal tank boyutunu belirlemenize olanak tanır.',
117
- },
118
- {
119
- type: 'title',
120
- text: 'Hesaplama Mantığı',
121
- level: 3,
122
- },
123
- {
124
- type: 'paragraph',
125
- html: 'Yağmur suyu toplama için temel formül basit ama güçlüdür:',
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;">Hacim = Alan × Yağış × Akış Katsayısı × Filtre Verimliliği</code>',
130
- },
131
- {
132
- type: 'list',
133
- items: [
134
- '<strong>Alan:</strong> Çatı ayak iziniz (izdüşüm uzunluk × genişlik).',
135
- '<strong>Yağış:</strong> Milimetre cinsinden düşen yağmur.',
136
- '<strong>Katsayı:</strong> Çatınızın ne kadar su kaybettiği (örneğin emilim).',
137
- '<strong>Verimlilik:</strong> Tank öncesi filtrelerdeki kayıplar (~%10).',
138
- ],
139
- },
140
- {
141
- type: 'title',
142
- text: 'Neden Yağmur Suyu Toplamalıyız?',
143
- level: 3,
144
- },
145
- {
146
- type: 'list',
147
- items: [
148
- '<strong>Tasarruf:</strong> Su faturanızı önemli ölçüde azaltın.',
149
- '<strong>Bahçecilik:</strong> Bitkiler klor veya kireç içermeyen suyu sever.',
150
- '<strong>Dayanıklılık:</strong> Kesintiler durumunda acil durum rezervi bulundurun.',
151
- ],
152
- },
153
- {
154
- type: 'title',
155
- text: 'Tank Boyutlandırma',
156
- level: 2,
157
- },
158
- {
159
- type: 'paragraph',
160
- html: 'En yaygın hata, sadece bütçeye göre tank almaktır. Çok küçükse, taşma nedeniyle binlerce litreyi boşa harcarsınız. Çok büyükse, gereksiz yere para harcarsınız. Genel kural, bölgenizdeki ortalama yağışın <strong>3 aylık</strong> miktarını depolayacak kapasiteye sahip olmaktır; bu da kurak mevsimleri atlatmanızı sağlar.',
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 = 'yagmur-suyu-hesaplayici';
6
+ const title = 'Yağmur Suyu Hasadı Hesaplayıcı';
7
+ const description = 'Çatınızdan ne kadar yağmur suyu toplayabileceğinizi hesaplayın ve depolama tankınızı boyutlandırın.';
8
+
9
+ const faqData = [
10
+ {
11
+ question: 'Çatımdan gerçekte ne kadar su toplayabilirim?',
12
+ answer: 'Genel kural, her metrekare çatı ve her milimetre yağmur için yaklaşık 1 litre su toplayabileceğinizdir. Ancak, "akış katsayısı" ile ayarlanan buharlaşma ve filtrasyon kaynaklı kayıplar vardır.',
13
+ },
14
+ {
15
+ question: 'Akış katsayısı nedir?',
16
+ answer: 'Çatı malzemesine bağlı olarak ne kadar suyun kaybolduğunu gösteren bir yüzdedir. Metal veya kiremit bir çatı çok verimlidir (0,85-0,95), çakıl veya toprak bir çatı ise çok daha az verimlidir (0,1-0,3).',
17
+ },
18
+ {
19
+ question: 'Depolama tankını nasıl boyutlandırırım?',
20
+ answer: 'Bir ayda beklenen maksimum yağmur hacmini hesaplamalı ve bunu tahmini aylık tüketiminizle karşılaştırmalısınız. Çok küçük bir tank fırtınalarda taşar, çok büyük olanı ise gereksiz yere pahalı olur.',
21
+ },
22
+ {
23
+ question: 'Toplanan yağmur suyunu içmek güvenli midir?',
24
+ answer: 'Doğrudan değil. Su, toz, kuş pisliği ve havadaki partikülleri taşır. İnsan tüketimi için tortu filtrelerinden, aktif karbondan geçmeli ve UV ışığı veya klor kullanılarak dezenfekte edilmelidir.',
25
+ },
26
+ ];
27
+
28
+ const howToData = [
29
+ {
30
+ name: 'Yatay yüzeyi ölçün',
31
+ text: 'Çatı tabanınızın uzunluğunu ve genişliğini ölçün (eğimli yüzeyi değil, yere gölge düşüren alanı).',
32
+ },
33
+ {
34
+ name: 'Yerel yağış miktarını kontrol edin',
35
+ text: 'Bölgenizdeki yıllık veya aylık ortalama yağış miktarını milimetre (mm) cinsinden öğrenmek için ulusal meteoroloji servisini kontrol edin.',
36
+ },
37
+ {
38
+ name: 'Malzeme verimliliğini uygulayın',
39
+ text: 'Emme veya ısı yoluyla kaybolacak suyu düşmek için hesaplayıcımızda çatı malzemenizi seçin.',
40
+ },
41
+ {
42
+ name: 'Gerekli hacmi hesaplayın',
43
+ text: 'Kurak dönemler için toplam hasadın en az %20-30\'unu depolayabilecek bir tank seçmek için yıllık litre sonucunu kullanın.',
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: 'tr',
79
+ };
80
+
81
+ export const content: RainHarvesterLocaleContent = {
82
+ slug,
83
+ title,
84
+ description,
85
+ ui: {
86
+ headInputs: 'Çatı Ayarları',
87
+ headResults: 'Hasat Potansiyeli',
88
+ labelArea: 'Çatı Alanı',
89
+ labelRainfall: 'Yıllık Yağış',
90
+ labelMaterial: 'Çatı Malzemesi',
91
+ unitM2: 'm²',
92
+ unitMm: 'mm',
93
+ unitLiters: 'Litre',
94
+ helpRainfall: 'Bilmiyor musunuz? Google\'da "ortalama yıllık yağış [şehriniz]" diye aratın.',
95
+ efficiencyTitle: 'Verimlilik Faktörü',
96
+ efficiencyNote: 'Filtreler ve buharlaşma için %10\'luk bir kayıp uygulanır.',
97
+ resultTitle: 'Yıllık Hasat Potansiyeli',
98
+ equivalenciesTitle: 'Pratik Karşılıklar',
99
+ labelFlushes: 'Sifon Çekme',
100
+ labelShowers: 'Duş (10 dk)',
101
+ labelGarden: 'Bahçe Sulama',
102
+ gardenArea: '(50m²)',
103
+ materialMetal: 'Metal / Sırlı Kiremit',
104
+ materialClay: 'Alaturka Kiremit / Kil',
105
+ materialConcrete: 'Beton / Asfalt',
106
+ materialGravel: 'Çakıl / Yeşil Çatı',
107
+ },
108
+ seo: [
109
+ {
110
+ type: 'title',
111
+ text: 'Yağmur Suyu Hasadı: Özerklik ve Sürdürülebilirlik',
112
+ level: 2,
113
+ },
114
+ {
115
+ type: 'paragraph',
116
+ html: 'Çoğu ev sahibi kendi çatılarının potansiyelinin farkında değildir. Standart bir çatı her yıl binlerce litre bedava su yakalayabilir. Bu araç, bu potansiyeli sayısallaştırarak ne kadar su "hasat" edebileceğinizi tam olarak hesaplamanıza ve depolama için ideal tank boyutunu belirlemenize olanak tanır.',
117
+ },
118
+ {
119
+ type: 'title',
120
+ text: 'Hesaplama Mantığı',
121
+ level: 3,
122
+ },
123
+ {
124
+ type: 'paragraph',
125
+ html: 'Yağmur suyu toplama için temel formül basit ama güçlüdür:',
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;">Hacim = Alan × Yağış × Akış Katsayısı × Filtre Verimliliği</code>',
130
+ },
131
+ {
132
+ type: 'list',
133
+ items: [
134
+ '<strong>Alan:</strong> Çatı ayak iziniz (izdüşüm uzunluk × genişlik).',
135
+ '<strong>Yağış:</strong> Milimetre cinsinden düşen yağmur.',
136
+ '<strong>Katsayı:</strong> Çatınızın ne kadar su kaybettiği (örneğin emilim).',
137
+ '<strong>Verimlilik:</strong> Tank öncesi filtrelerdeki kayıplar (~%10).',
138
+ ],
139
+ },
140
+ {
141
+ type: 'title',
142
+ text: 'Neden Yağmur Suyu Toplamalıyız?',
143
+ level: 3,
144
+ },
145
+ {
146
+ type: 'list',
147
+ items: [
148
+ '<strong>Tasarruf:</strong> Su faturanızı önemli ölçüde azaltın.',
149
+ '<strong>Bahçecilik:</strong> Bitkiler klor veya kireç içermeyen suyu sever.',
150
+ '<strong>Dayanıklılık:</strong> Kesintiler durumunda acil durum rezervi bulundurun.',
151
+ ],
152
+ },
153
+ {
154
+ type: 'title',
155
+ text: 'Tank Boyutlandırma',
156
+ level: 2,
157
+ },
158
+ {
159
+ type: 'paragraph',
160
+ html: 'En yaygın hata, sadece bütçeye göre tank almaktır. Çok küçükse, taşma nedeniyle binlerce litreyi boşa harcarsınız. Çok büyükse, gereksiz yere para harcarsınız. Genel kural, bölgenizdeki ortalama yağışın <strong>3 aylık</strong> miktarını depolayacak kapasiteye sahip olmaktır; bu da kurak mevsimleri atlatmanızı sağlar.',
161
+ },
162
+ ],
163
+ faq: faqData,
164
+ howTo: howToData,
165
+ bibliography,
166
+ schemas: [faqSchema, howToSchema, appSchema],
167
+ };