@jjlmoya/utils-home 1.34.0 → 1.36.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 (54) hide show
  1. package/package.json +1 -1
  2. package/src/entries.ts +7 -1
  3. package/src/index.ts +2 -0
  4. package/src/tests/locale_completeness.test.ts +2 -2
  5. package/src/tests/tool_validation.test.ts +2 -2
  6. package/src/tool/humidityCalculator/bibliography.astro +14 -0
  7. package/src/tool/humidityCalculator/bibliography.ts +14 -0
  8. package/src/tool/humidityCalculator/component.astro +296 -0
  9. package/src/tool/humidityCalculator/entry.ts +29 -0
  10. package/src/tool/humidityCalculator/humidity-calculator.css +469 -0
  11. package/src/tool/humidityCalculator/i18n/de.ts +217 -0
  12. package/src/tool/humidityCalculator/i18n/en.ts +217 -0
  13. package/src/tool/humidityCalculator/i18n/es.ts +217 -0
  14. package/src/tool/humidityCalculator/i18n/fr.ts +217 -0
  15. package/src/tool/humidityCalculator/i18n/id.ts +217 -0
  16. package/src/tool/humidityCalculator/i18n/it.ts +217 -0
  17. package/src/tool/humidityCalculator/i18n/ja.ts +217 -0
  18. package/src/tool/humidityCalculator/i18n/ko.ts +217 -0
  19. package/src/tool/humidityCalculator/i18n/nl.ts +217 -0
  20. package/src/tool/humidityCalculator/i18n/pl.ts +217 -0
  21. package/src/tool/humidityCalculator/i18n/pt.ts +217 -0
  22. package/src/tool/humidityCalculator/i18n/ru.ts +217 -0
  23. package/src/tool/humidityCalculator/i18n/sv.ts +217 -0
  24. package/src/tool/humidityCalculator/i18n/tr.ts +217 -0
  25. package/src/tool/humidityCalculator/i18n/zh.ts +217 -0
  26. package/src/tool/humidityCalculator/index.ts +9 -0
  27. package/src/tool/humidityCalculator/logic.ts +60 -0
  28. package/src/tool/humidityCalculator/seo.astro +15 -0
  29. package/src/tool/humidityCalculator/ui.ts +29 -0
  30. package/src/tool/waterSoftener/bibliography.astro +14 -0
  31. package/src/tool/waterSoftener/bibliography.ts +14 -0
  32. package/src/tool/waterSoftener/component.astro +321 -0
  33. package/src/tool/waterSoftener/entry.ts +29 -0
  34. package/src/tool/waterSoftener/i18n/de.ts +222 -0
  35. package/src/tool/waterSoftener/i18n/en.ts +222 -0
  36. package/src/tool/waterSoftener/i18n/es.ts +222 -0
  37. package/src/tool/waterSoftener/i18n/fr.ts +222 -0
  38. package/src/tool/waterSoftener/i18n/id.ts +222 -0
  39. package/src/tool/waterSoftener/i18n/it.ts +222 -0
  40. package/src/tool/waterSoftener/i18n/ja.ts +222 -0
  41. package/src/tool/waterSoftener/i18n/ko.ts +222 -0
  42. package/src/tool/waterSoftener/i18n/nl.ts +222 -0
  43. package/src/tool/waterSoftener/i18n/pl.ts +222 -0
  44. package/src/tool/waterSoftener/i18n/pt.ts +222 -0
  45. package/src/tool/waterSoftener/i18n/ru.ts +222 -0
  46. package/src/tool/waterSoftener/i18n/sv.ts +222 -0
  47. package/src/tool/waterSoftener/i18n/tr.ts +222 -0
  48. package/src/tool/waterSoftener/i18n/zh.ts +222 -0
  49. package/src/tool/waterSoftener/index.ts +9 -0
  50. package/src/tool/waterSoftener/logic.ts +103 -0
  51. package/src/tool/waterSoftener/seo.astro +15 -0
  52. package/src/tool/waterSoftener/ui.ts +34 -0
  53. package/src/tool/waterSoftener/water-softener.css +449 -0
  54. package/src/tools.ts +4 -0
@@ -0,0 +1,217 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { HumidityCalculatorUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
5
+
6
+ const slug = 'nem-hesaplayici';
7
+ const title = 'Ev Nemliligi ve Nem Alma Cihazi Calisma Suresi Hesaplayici';
8
+ const description =
9
+ 'Nemli bir odanin saglikli bir nem seviyesine getirilmesi icin nem alma cihazinizin ne kadar su cekmesi gerektigini hesaplayin. Tahmini calisma suresi, kuf riski uyarilari ve konfor bolgesi gorsellerini tek bir etkilesimli aracta gorun.';
10
+
11
+ const faqData = [
12
+ {
13
+ question: 'Nem alma cihazi gunde kac saat calismalidir?',
14
+ answer:
15
+ 'Orta derecede nemli bir odada, standart bir ev tipi nem alma cihazi genellikle 50 oranli bagil nemi korumak icin gunde 8 ila 12 saat calismalidir. Cok nemli kosullarda veya su hasarindan sonra, temel kuruluga ulasmak icin 24 ila 48 saat surekli calisma gerekebilir.',
16
+ },
17
+ {
18
+ question: 'Hangi ic mekan nem seviyesi kufu onler?',
19
+ answer:
20
+ 'Kuf buyumesi, ic mekan bagil nemi 60in altinda tutuldugunda engellenir. Insan sagligi ve bina korunmasi icin ideal konfor bolgesi 40 ile 50 arasindadir. 70in uzerindeki seviyeler, kuf sporlarinin 24 ila 48 saat icinde filizlenmesi icin yuksek riskli bir ortam yaratir.',
21
+ },
22
+ {
23
+ question: 'Hava ne kadar su tutabilir?',
24
+ answer:
25
+ 'Havanin tutabilecegi su buhari miktari sicakliga baglidir. 20 santigrat derecede, doymus hava metrekup basina yaklasik 17 gram su icerir. 25 santigrat derecede bu, metrekup basina yaklasik 23 grama yukselir. 25 santigrat derece ve 70 nemde 30 metrekarelik bir oda, havada yaklasik 8 litre gorunmez su barindirir.',
26
+ },
27
+ {
28
+ question: 'Sicaklik nem alma cihazi verimliligini etkiler mi?',
29
+ answer:
30
+ 'Evet. Kompresorlu nem alma cihazlari 18 santigrat derecenin uzerinde en iyi sekilde calisir. 15 santigrat derecenin altinda performanslari duser cunku buharlastirici bobinler buzlanabilir. Kimyasal kurutma islemi kullandiklari icin, nem alma tuzlu cihazlar garaj veya bodrum gibi soguk mekanlar icin daha uygundur.',
31
+ },
32
+ {
33
+ question: 'Hangi boyutta nem alma cihazina ihtiyacim var?',
34
+ answer:
35
+ '50 metrekareye kadar orta derecede nemli bir oda icin, genellikle gunde 10 ila 12 litrelik bir unite yeterlidir. Cok nemli odalar veya 50 metrekareyi asan alanlar icin gunde 20 litrelik bir model secin. Sel veya siddetli nemden sonra, gunde 30 litrelik endustriyel bir unite kosullari daha hizli geri getirecektir.',
36
+ },
37
+ {
38
+ question: 'Nem alma cihazi camasir kurutabilir mi?',
39
+ answer:
40
+ 'Evet. Camasir modu olan bir nem alma cihazi, cevredeki havadan nem cekerken kapali mekanlarda kiyafetleri verimli bir sekilde kurutabilir. Kurutma makinesinden daha az enerji kullanir ve pencerelerde ve duvarlarda yogusmayi onler. Sicak havalarda acik hava kurutmasina benzer kurutma sureleri bekleyin.',
41
+ },
42
+ ];
43
+
44
+ const howToData = [
45
+ {
46
+ name: 'Oda boyutunu girin',
47
+ text: 'Odanin zemin alanini metrekare olarak yazin. Hesaplayici, toplam hava hacmini tahmin etmek icin standart 2,5 metre tavan yuksekligini varsayar.',
48
+ },
49
+ {
50
+ name: 'Sicakligi ayarlayin',
51
+ text: 'Mevcut oda sicakligini santigrat derece olarak girin. Sicak hava daha fazla nem tutar, bu nedenle sicaklik, cikarilmasi gereken su miktarini dogrudan etkiler.',
52
+ },
53
+ {
54
+ name: 'Mevcut nemi secin',
55
+ text: 'Mevcut bagil nem yuzdesini ayarlamak icin konfor carkini veya sayisal girisi kullanin. 60in uzerindeki degerler uyari tonlarinda vurgulanir.',
56
+ },
57
+ {
58
+ name: 'Hedef nemi secin',
59
+ text: 'Istediginiz bagil nemi ayarlayin. 50, konfor ve kuf onleme icin onerilir. 40, alerji hastalari icin idealdir.',
60
+ },
61
+ {
62
+ name: 'Nem alma cihazi kapasitesini girin',
63
+ text: 'Makinanizin gunde litre cinsinden cekim hizini girin. Bu genellikle on etikette veya kullanim kilavuzunda yazilidir.',
64
+ },
65
+ {
66
+ name: 'Sonuclari inceleyin',
67
+ text: 'Su cekim tanki simulasyonunu, calisma suresi tahminini ve kuf riski basligini okuyarak cihazinizi ne kadar sure calistiracaginiza karar verin.',
68
+ },
69
+ ];
70
+
71
+ const faqSchema: WithContext<FAQPage> = {
72
+ '@context': 'https://schema.org',
73
+ '@type': 'FAQPage',
74
+ mainEntity: faqData.map((item) => ({
75
+ '@type': 'Question',
76
+ name: item.question,
77
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
78
+ })),
79
+ };
80
+
81
+ const howToSchema: WithContext<HowTo> = {
82
+ '@context': 'https://schema.org',
83
+ '@type': 'HowTo',
84
+ name: title,
85
+ description,
86
+ step: howToData.map((step) => ({
87
+ '@type': 'HowToStep',
88
+ name: step.name,
89
+ text: step.text,
90
+ })),
91
+ };
92
+
93
+ const appSchema: WithContext<SoftwareApplication> = {
94
+ '@context': 'https://schema.org',
95
+ '@type': 'SoftwareApplication',
96
+ name: title,
97
+ description,
98
+ applicationCategory: 'UtilityApplication',
99
+ operatingSystem: 'All',
100
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
101
+ inLanguage: 'tr',
102
+ };
103
+
104
+ export const content: ToolLocaleContent<HumidityCalculatorUI> = {
105
+ slug,
106
+ title,
107
+ description,
108
+ faq: faqData,
109
+ bibliography,
110
+ howTo: howToData,
111
+ schemas: [faqSchema, howToSchema, appSchema],
112
+ seo: [
113
+ {
114
+ type: 'title',
115
+ text: 'Duvarlarinizdaki Gizli Su',
116
+ level: 2,
117
+ },
118
+ {
119
+ type: 'paragraph',
120
+ html: 'Cogu ev sahibi, nemli havanin sadece rahatsiz edici degil, ayni zamanda pahali ve tehlikeli oldugunu asla fark etmez. Tek bir nemli oda, birkaç litre gorunmez su buhari barindirabilir. Zamanla bu nem soguk yuzeylerde yogunlasir, kuf kolonilerini besler ve siva, boya ve keresteyi bozar. Tam olarak ne kadar suyun cikarilmasi gerektigini ve bunun ne kadar surdugunu anlamak, evinizi ve sagliginizi korumak icin atilacak ilk adimdir.',
121
+ },
122
+ {
123
+ type: 'stats',
124
+ items: [
125
+ { value: '50%', label: 'İdeal ic mekan nemi', icon: 'mdi:water-percent' },
126
+ { value: '8h', label: 'Ort. gunluk calisma suresi', icon: 'mdi:timer-outline' },
127
+ { value: '70%', label: 'Kuf riski esigi', icon: 'mdi:alert-outline' },
128
+ ],
129
+ columns: 3,
130
+ },
131
+ {
132
+ type: 'title',
133
+ text: 'Neden bagil nem onemlidir',
134
+ level: 3,
135
+ },
136
+ {
137
+ type: 'paragraph',
138
+ html: 'Bagil nem, havadaki su miktari degil, havanin o sicaklikta tutabilecegi maksimuma gore tuttugu su yuzdesidir. Sicak hava daha buyuk bir sunger gibidir. 30 santigrat derecede, hava 15 santigrat derecede oldugundan neredeyse iki kat daha fazla nem tutabilir. Iste bu yuzden, pencereleri actiktan sonra bile bir oda yapiskan hissedebilir. Nem hala oradadir, sadece daha az gorunur.',
139
+ },
140
+ {
141
+ type: 'comparative',
142
+ items: [
143
+ {
144
+ title: 'Yuksek nem',
145
+ description: '60in uzerinde bagil nem. Kuf, toz akarlari ve yogusma hasari riski.',
146
+ icon: 'mdi:alert',
147
+ points: ['Pencerelerde ve duvarlarda yogusma', 'Kotu kokular ve mikrobiyal buyume', 'Artmis solunum tahrişi', 'Nemli havanin isi iletkenligi nedeniyle daha yuksek isitma faturalari'],
148
+ },
149
+ {
150
+ title: 'Optimal nem',
151
+ description: '40 ile 50 arasinda bagil nem. Konforlu, saglikli ve enerji verimli.',
152
+ icon: 'mdi:check-circle',
153
+ points: ['Soguk yuzeylerde yogusma yok', 'Kuf sporlari hareketsiz kalir', 'Cilt ve solunum konforu', 'Mobilya ve keresteyi koruma'],
154
+ },
155
+ ],
156
+ columns: 2,
157
+ },
158
+ {
159
+ type: 'diagnostic',
160
+ variant: 'info',
161
+ title: 'Hizli nem denetimi',
162
+ icon: 'mdi:clipboard-check',
163
+ badge: 'Eylem',
164
+ html: '<p style="margin:0">Her sabah pencereleri yogusma acisindan kontrol edin. Eger damlalar duzenli olarak beliriyorsa, neminiz cok yuksek. Yogusma durana kadar gunluk 12 saat nem alma cihazi calistirin. Uniteyi en nemli odaya tasiyin, genellikle mutfak, banyo veya bodrum. Tanki her gun bosaltin ve filtreyi iki haftada bir temizleyin.</p>',
165
+ },
166
+ {
167
+ type: 'title',
168
+ text: 'Nem alma cihazinizi dogru boyutlandirma',
169
+ level: 3,
170
+ },
171
+ {
172
+ type: 'paragraph',
173
+ html: 'Yaygin bir hata, mekan icin cok kucuk bir nem alma cihazi satin almaktir. 60 metrekarelik nemli bir bodrumda gunde 10 litrelik bir makine, hedef nemi hicbir zaman yakalayamadan surekli calisacaktir. Odanizin gerektirdigi tam su cekim hacmini gormek icin bu hesaplayiciyi kullanin. Calisma suresi tahmini gunde 20 saati asiyorsa, daha buyuk kapasiteli bir uniteye veya daha iyi havalandirmaya ihtiyaciniz var.',
174
+ },
175
+ {
176
+ type: 'summary',
177
+ title: 'Evinizi nasil kuru tutarsiniz',
178
+ items: [
179
+ 'Herhangi bir oda icin gereken tam su cekim miktarini belirlemek icin bu hesaplayiciyi kullanin.',
180
+ 'Saglik ve konfor icin ic mekan bagil nemi 40 ile 50 arasinda tutun.',
181
+ 'Kuf riski basligi yeşile donene kadar nem alma cihazini calistirin.',
182
+ 'Otomatik kapanmayi onlemek icin su tanki dolmadan once bosaltin.',
183
+ 'Hava akisini ve cekim hizini maksimumda tutmak icin filtreleri duzenli olarak temizleyin.',
184
+ 'Daha hizli sonuclar icin nem almanin yaninda oda havalandirmasini iyilestirin.',
185
+ ],
186
+ },
187
+ ],
188
+ ui: {
189
+ labelRoomSize: 'Oda boyutu',
190
+ unitM2: 'm2',
191
+ labelTemperature: 'Sicaklik',
192
+ unitCelsius: '°C',
193
+ labelCurrentHumidity: 'Mevcut nem',
194
+ labelTargetHumidity: 'Hedef nem',
195
+ labelCapacity: 'Nem alma kapasitesi',
196
+ unitLitersDay: 'L/gun',
197
+ comfortDialTitle: 'Konfor bolgesi',
198
+ comfortCurrent: 'Mevcut',
199
+ comfortTarget: 'Hedef',
200
+ tankTitle: 'Havadaki su',
201
+ tankLiters: 'litre',
202
+ runtimeTitle: 'Tahmini calisma suresi',
203
+ runtimeUnitH: 's',
204
+ runtimeUnitM: 'd',
205
+ moldRiskTitle: 'Kuf riski',
206
+ moldRiskHigh: 'Yuksek risk',
207
+ moldRiskMedium: 'Orta risk',
208
+ moldRiskLow: 'Dusuk risk',
209
+ extractionLabel: 'cekilcek',
210
+ tipEnergy: 'Nem alma cihazinizi dusuk yuk saatlerinde calistirmak, elektrik maliyetlerini onemli olcude dusurebilir.',
211
+ tipMold: 'Nemi 50in altinda tutmak, kuf sporlarinin yuzeylerde filizlenmesini onler.',
212
+ unitPercent: '%',
213
+ badgeHigh: 'Yuksek',
214
+ badgeMedium: 'Orta',
215
+ badgeLow: 'Dusuk',
216
+ },
217
+ };
@@ -0,0 +1,217 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { HumidityCalculatorUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
5
+
6
+ const slug = 'humidity-calculator';
7
+ const title = '室内湿度与除湿机运行时间估算器';
8
+ const description =
9
+ '计算除湿机需要将潮湿房间降至健康湿度水平所需提取的水量。在一个交互式工具中查看预估运行时间、霉菌风险警告和舒适区可视化。';
10
+
11
+ const faqData = [
12
+ {
13
+ question: '除湿机每天应该运行多长时间?',
14
+ answer:
15
+ '在中等潮湿的房间中,标准家用除湿机通常需要每天运行8到12小时才能将相对湿度维持在50%。在非常潮湿的环境或水灾后,可能需要连续运行24到48小时才能达到基线干燥度。',
16
+ },
17
+ {
18
+ question: '什么室内湿度水平可以防止霉菌?',
19
+ answer:
20
+ '当室内相对湿度保持在60%以下时,霉菌的生长会受到抑制。对人类健康和建筑保护而言,理想的舒适区是相对湿度在40%到50%之间。超过70%的水平会在24到48小时内为霉菌孢子的萌发创造高风险环境。',
21
+ },
22
+ {
23
+ question: '空气能容纳多少水分?',
24
+ answer:
25
+ '空气能容纳的水蒸气量取决于温度。在20摄氏度时,饱和空气每立方米约含17克水。在25摄氏度时,这上升到约每立方米23克。一个25摄氏度、湿度70%的30平方米房间,空气中约含有8升看不见的水分。',
26
+ },
27
+ {
28
+ question: '温度会影响除湿机效率吗?',
29
+ answer:
30
+ '是的。压缩机型除湿机在18摄氏度以上效果最佳。在15摄氏度以下,其性能会下降,因为蒸发器盘管可能会结霜。转轮式除湿机更适合车库或地下室等寒冷空间,因为它们使用化学干燥过程而非冷凝。',
31
+ },
32
+ {
33
+ question: '我需要多大尺寸的除湿机?',
34
+ answer:
35
+ '对于50平方米以下中等潮湿的房间,每天10到12升的机型通常就足够了。对于非常潮湿的房间或50平方米以上的空间,请选择每天20升的机型。洪水或严重潮湿后,每天30升的工业机型将更快地恢复环境。',
36
+ },
37
+ {
38
+ question: '除湿机能烘干衣物吗?',
39
+ answer:
40
+ '可以。带有干衣模式的除湿机可以在从周围空气中提取湿气的同时,高效地在室内烘干衣物。它比滚筒式干衣机耗能更少,并能防止窗户和墙壁上的冷凝水。预计烘干时间与温暖天气下的户外晾晒相似。',
41
+ },
42
+ ];
43
+
44
+ const howToData = [
45
+ {
46
+ name: '输入房间面积',
47
+ text: '输入房间的地板面积(平方米)。计算器假设标准天花板高度为2.5米,以估算总空气量。',
48
+ },
49
+ {
50
+ name: '设置温度',
51
+ text: '输入当前的室内温度(摄氏度)。温暖的空气容纳更多湿气,因此温度直接影响需要去除的水量。',
52
+ },
53
+ {
54
+ name: '选择当前湿度',
55
+ text: '使用舒适拨盘或数字输入设置当前的相对湿度百分比。超过60%的数值将以警告色调突出显示。',
56
+ },
57
+ {
58
+ name: '选择目标湿度',
59
+ text: '设置您想要的相对湿度。建议将50%作为舒适和防霉的标准。过敏人群的理想湿度是40%。',
60
+ },
61
+ {
62
+ name: '输入除湿机容量',
63
+ text: '输入您机器的抽湿速率(每天升数)。这通常印在前方标签或用户手册上。',
64
+ },
65
+ {
66
+ name: '查看结果',
67
+ text: '阅读水提取水箱模拟、运行时间估算和霉菌风险横幅,以决定家电的运行时长。',
68
+ },
69
+ ];
70
+
71
+ const faqSchema: WithContext<FAQPage> = {
72
+ '@context': 'https://schema.org',
73
+ '@type': 'FAQPage',
74
+ mainEntity: faqData.map((item) => ({
75
+ '@type': 'Question',
76
+ name: item.question,
77
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
78
+ })),
79
+ };
80
+
81
+ const howToSchema: WithContext<HowTo> = {
82
+ '@context': 'https://schema.org',
83
+ '@type': 'HowTo',
84
+ name: title,
85
+ description,
86
+ step: howToData.map((step) => ({
87
+ '@type': 'HowToStep',
88
+ name: step.name,
89
+ text: step.text,
90
+ })),
91
+ };
92
+
93
+ const appSchema: WithContext<SoftwareApplication> = {
94
+ '@context': 'https://schema.org',
95
+ '@type': 'SoftwareApplication',
96
+ name: title,
97
+ description,
98
+ applicationCategory: 'UtilityApplication',
99
+ operatingSystem: 'All',
100
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
101
+ inLanguage: 'zh',
102
+ };
103
+
104
+ export const content: ToolLocaleContent<HumidityCalculatorUI> = {
105
+ slug,
106
+ title,
107
+ description,
108
+ faq: faqData,
109
+ bibliography,
110
+ howTo: howToData,
111
+ schemas: [faqSchema, howToSchema, appSchema],
112
+ seo: [
113
+ {
114
+ type: 'title',
115
+ text: '墙壁中隐藏的水分',
116
+ level: 2,
117
+ },
118
+ {
119
+ type: 'paragraph',
120
+ html: '大多数房主从未意识到,潮湿的空气不仅令人不适,而且代价高昂且危险。一个潮湿的房间可能含有数升看不见的水蒸气。随着时间的推移,这些水分会在寒冷表面凝结,滋养霉菌菌群并降解石膏、油漆和木材。准确了解需要去除多少水以及需要多长时间,是保护您的房屋和健康的第一步。',
121
+ },
122
+ {
123
+ type: 'stats',
124
+ items: [
125
+ { value: '50%', label: '理想室内湿度', icon: 'mdi:water-percent' },
126
+ { value: '8h', label: '平均每日运行时间', icon: 'mdi:timer-outline' },
127
+ { value: '70%', label: '霉菌风险阈值', icon: 'mdi:alert-outline' },
128
+ ],
129
+ columns: 3,
130
+ },
131
+ {
132
+ type: 'title',
133
+ text: '相对湿度为何重要',
134
+ level: 3,
135
+ },
136
+ {
137
+ type: 'paragraph',
138
+ html: '相对湿度不是空气中所含的水分,而是相对于该温度下空气可容纳的最大量而言的百分比。温暖的空气就像一块更大的海绵。在30摄氏度时,空气容纳的水分几乎是15摄氏度时的两倍。这就是为什么即使您打开窗户后,房间仍会感到黏腻。水分仍然在那里,只是不那么明显了。',
139
+ },
140
+ {
141
+ type: 'comparative',
142
+ items: [
143
+ {
144
+ title: '高湿度',
145
+ description: '相对湿度超过60%。存在霉菌、尘螨和冷凝损坏的风险。',
146
+ icon: 'mdi:alert',
147
+ points: ['窗户和墙壁上的冷凝水', '霉味和微生物滋生', '呼吸道刺激增加', '潮湿空气的热导率导致取暖费用升高'],
148
+ },
149
+ {
150
+ title: '最佳湿度',
151
+ description: '相对湿度在40%到50%之间。舒适、健康且节能。',
152
+ icon: 'mdi:check-circle',
153
+ points: ['寒冷表面无冷凝水', '霉菌孢子保持休眠', '皮肤和呼吸道舒适', '家具和木材保存'],
154
+ },
155
+ ],
156
+ columns: 2,
157
+ },
158
+ {
159
+ type: 'diagnostic',
160
+ variant: 'info',
161
+ title: '快速湿度自查',
162
+ icon: 'mdi:clipboard-check',
163
+ badge: '行动',
164
+ html: '<p style="margin:0">每天早晨检查窗户是否有冷凝水。如果水滴定期出现,说明您的湿度过高。每天运行除湿机12小时,直到冷凝水停止。将设备移到最潮湿的房间,通常是厨房、浴室或地下室。每天清空水箱,每两周清洁一次滤网。</p>',
165
+ },
166
+ {
167
+ type: 'title',
168
+ text: '正确选择除湿机尺寸',
169
+ level: 3,
170
+ },
171
+ {
172
+ type: 'paragraph',
173
+ html: '常见的错误是购买的除湿机对于空间来说太小。一台每天10升的机器放在60平方米潮湿的地下室里,会连续运行却永远无法达到目标湿度。使用此计算器查看您的房间所需的精确抽湿量。如果预估运行时间超过每天20小时,您需要更大容量的机型或更好的通风。',
174
+ },
175
+ {
176
+ type: 'summary',
177
+ title: '如何保持家居干燥',
178
+ items: [
179
+ '使用此计算器确定任何房间所需的精确抽水量。',
180
+ '将室内相对湿度维持在40%到50%之间,以保持健康和舒适。',
181
+ '运行除湿机直到霉菌风险横幅变为绿色。',
182
+ '在水箱满之前将其清空,以防止自动停机。',
183
+ '定期清洁滤网,以保持气流和抽湿率处于最大水平。',
184
+ '在除湿的同时改善房间通风,以获得更快的效果。',
185
+ ],
186
+ },
187
+ ],
188
+ ui: {
189
+ labelRoomSize: '房间面积',
190
+ unitM2: 'm2',
191
+ labelTemperature: '温度',
192
+ unitCelsius: '°C',
193
+ labelCurrentHumidity: '当前湿度',
194
+ labelTargetHumidity: '目标湿度',
195
+ labelCapacity: '除湿机容量',
196
+ unitLitersDay: 'L/天',
197
+ comfortDialTitle: '舒适区',
198
+ comfortCurrent: '当前',
199
+ comfortTarget: '目标',
200
+ tankTitle: '空气中的水分',
201
+ tankLiters: '升',
202
+ runtimeTitle: '预估运行时间',
203
+ runtimeUnitH: '小时',
204
+ runtimeUnitM: '分钟',
205
+ moldRiskTitle: '霉菌风险',
206
+ moldRiskHigh: '高风险',
207
+ moldRiskMedium: '中等风险',
208
+ moldRiskLow: '低风险',
209
+ extractionLabel: '需提取',
210
+ tipEnergy: '在用电非高峰时段运行除湿机可以显著降低电费。',
211
+ tipMold: '将湿度保持在50%以下可防止霉菌孢子在表面萌发。',
212
+ unitPercent: '%',
213
+ badgeHigh: '高',
214
+ badgeMedium: '中',
215
+ badgeLow: '低',
216
+ },
217
+ };
@@ -0,0 +1,9 @@
1
+ import type { ToolDefinition } from '../../types';
2
+ import { humidityCalculator } from './entry';
3
+ export * from './entry';
4
+ export const HUMIDITY_CALCULATOR_TOOL: ToolDefinition = {
5
+ entry: humidityCalculator,
6
+ Component: () => import('./component.astro'),
7
+ SEOComponent: () => import('./seo.astro'),
8
+ BibliographyComponent: () => import('./bibliography.astro'),
9
+ };
@@ -0,0 +1,60 @@
1
+ export interface HumidityInput {
2
+ roomM2: number;
3
+ tempC: number;
4
+ currentRH: number;
5
+ targetRH: number;
6
+ capacityLPerDay: number;
7
+ }
8
+
9
+ export interface HumidityResult {
10
+ litersToExtract: number;
11
+ runtimeHours: number;
12
+ runtimeMinutes: number;
13
+ moldRisk: 'high' | 'medium' | 'low';
14
+ currentAbsHumidity: number;
15
+ targetAbsHumidity: number;
16
+ }
17
+
18
+ function esTetens(t: number): number {
19
+ return 6.112 * Math.exp((17.67 * t) / (t + 243.5));
20
+ }
21
+
22
+ function absHumidity(rh: number, t: number): number {
23
+ const esPa = esTetens(t) * 100;
24
+ return (esPa * (rh / 100) * 2.16679) / (t + 273.15);
25
+ }
26
+
27
+ export function calculateHumidity(input: HumidityInput): HumidityResult {
28
+ const volume = input.roomM2 * 2.5;
29
+ const currentAbs = absHumidity(input.currentRH, input.tempC);
30
+ const targetAbs = absHumidity(input.targetRH, input.tempC);
31
+ const liters = Math.max(0, (volume * (currentAbs - targetAbs)) / 1000);
32
+ const capPerHour = input.capacityLPerDay / 24;
33
+ const totalHours = capPerHour > 0 ? liters / capPerHour : 0;
34
+ const hours = Math.floor(totalHours);
35
+ const minutes = Math.round((totalHours - hours) * 60);
36
+
37
+ let risk: 'high' | 'medium' | 'low' = 'low';
38
+ if (input.currentRH >= 70 && input.tempC >= 18) {
39
+ risk = 'high';
40
+ } else if (input.currentRH >= 60 || (input.currentRH >= 55 && input.tempC >= 20)) {
41
+ risk = 'medium';
42
+ }
43
+
44
+ return {
45
+ litersToExtract: Math.round(liters * 100) / 100,
46
+ runtimeHours: hours,
47
+ runtimeMinutes: minutes,
48
+ moldRisk: risk,
49
+ currentAbsHumidity: Math.round(currentAbs * 100) / 100,
50
+ targetAbsHumidity: Math.round(targetAbs * 100) / 100,
51
+ };
52
+ }
53
+
54
+ export function fmt1(n: number): string {
55
+ return n.toFixed(1);
56
+ }
57
+
58
+ export function fmt2(n: number): string {
59
+ return n.toFixed(2);
60
+ }
@@ -0,0 +1,15 @@
1
+ ---
2
+ import { SEORenderer } from '@jjlmoya/utils-shared';
3
+ import { humidityCalculator } from './index';
4
+ import type { KnownLocale } from '../../types';
5
+
6
+ interface Props {
7
+ locale?: KnownLocale;
8
+ }
9
+
10
+ const { locale = 'es' } = Astro.props;
11
+ const content = await humidityCalculator.i18n[locale]?.();
12
+ if (!content) return null;
13
+ ---
14
+
15
+ {content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
@@ -0,0 +1,29 @@
1
+ export interface HumidityCalculatorUI extends Record<string, string> {
2
+ labelRoomSize: string;
3
+ unitM2: string;
4
+ labelTemperature: string;
5
+ unitCelsius: string;
6
+ labelCurrentHumidity: string;
7
+ labelTargetHumidity: string;
8
+ labelCapacity: string;
9
+ unitLitersDay: string;
10
+ comfortDialTitle: string;
11
+ comfortCurrent: string;
12
+ comfortTarget: string;
13
+ tankTitle: string;
14
+ tankLiters: string;
15
+ runtimeTitle: string;
16
+ runtimeUnitH: string;
17
+ runtimeUnitM: string;
18
+ moldRiskTitle: string;
19
+ moldRiskHigh: string;
20
+ moldRiskMedium: string;
21
+ moldRiskLow: string;
22
+ extractionLabel: string;
23
+ tipEnergy: string;
24
+ tipMold: string;
25
+ unitPercent: string;
26
+ badgeHigh: string;
27
+ badgeMedium: string;
28
+ badgeLow: string;
29
+ }
@@ -0,0 +1,14 @@
1
+ ---
2
+ import { Bibliography as SharedBibliography } from '@jjlmoya/utils-shared';
3
+ import { waterSoftener } from './index';
4
+ import type { KnownLocale } from '../../types';
5
+
6
+ interface Props {
7
+ locale?: KnownLocale;
8
+ }
9
+
10
+ const { locale = 'es' } = Astro.props;
11
+ const content = await waterSoftener.i18n[locale]?.();
12
+ ---
13
+
14
+ {content && <SharedBibliography links={content.bibliography} />}
@@ -0,0 +1,14 @@
1
+ export const bibliography = [
2
+ {
3
+ name: 'WQA: Water Hardness and Softening Basics',
4
+ url: 'https://wqa.org/resources/getting-smart-with-softeners/',
5
+ },
6
+ {
7
+ name: 'U.S. EPA: Home Water Treatment Facts',
8
+ url: 'https://www.epa.gov/ground-water-and-drinking-water/home-drinking-water-filtration-fact-sheet',
9
+ },
10
+ {
11
+ name: 'Energy.gov: Water Heating and Hard Water Scaling',
12
+ url: 'https://www.energy.gov/energysaver/purchasing-and-maintaining-water-softener',
13
+ },
14
+ ];