@jjlmoya/utils-home 1.35.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.
- package/package.json +1 -1
- package/src/entries.ts +4 -1
- package/src/index.ts +1 -0
- package/src/tests/locale_completeness.test.ts +2 -2
- package/src/tests/tool_validation.test.ts +2 -2
- package/src/tool/humidityCalculator/bibliography.ts +2 -2
- package/src/tool/waterSoftener/bibliography.astro +14 -0
- package/src/tool/waterSoftener/bibliography.ts +14 -0
- package/src/tool/waterSoftener/component.astro +321 -0
- package/src/tool/waterSoftener/entry.ts +29 -0
- package/src/tool/waterSoftener/i18n/de.ts +222 -0
- package/src/tool/waterSoftener/i18n/en.ts +222 -0
- package/src/tool/waterSoftener/i18n/es.ts +222 -0
- package/src/tool/waterSoftener/i18n/fr.ts +222 -0
- package/src/tool/waterSoftener/i18n/id.ts +222 -0
- package/src/tool/waterSoftener/i18n/it.ts +222 -0
- package/src/tool/waterSoftener/i18n/ja.ts +222 -0
- package/src/tool/waterSoftener/i18n/ko.ts +222 -0
- package/src/tool/waterSoftener/i18n/nl.ts +222 -0
- package/src/tool/waterSoftener/i18n/pl.ts +222 -0
- package/src/tool/waterSoftener/i18n/pt.ts +222 -0
- package/src/tool/waterSoftener/i18n/ru.ts +222 -0
- package/src/tool/waterSoftener/i18n/sv.ts +222 -0
- package/src/tool/waterSoftener/i18n/tr.ts +222 -0
- package/src/tool/waterSoftener/i18n/zh.ts +222 -0
- package/src/tool/waterSoftener/index.ts +9 -0
- package/src/tool/waterSoftener/logic.ts +103 -0
- package/src/tool/waterSoftener/seo.astro +15 -0
- package/src/tool/waterSoftener/ui.ts +34 -0
- package/src/tool/waterSoftener/water-softener.css +449 -0
- package/src/tools.ts +2 -0
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { WaterSoftenerUI } from '../ui';
|
|
4
|
+
import { bibliography } from '../bibliography';
|
|
5
|
+
|
|
6
|
+
const slug = 'su-yumusatici-hesaplayici';
|
|
7
|
+
const title = 'Ev su yumuşatıcı ve tuz tüketimi optimizasyonu';
|
|
8
|
+
const description =
|
|
9
|
+
'Su sertliği seviyenizi analiz edin, optimum yumuşatıcı ayarlarını hesaplayın ve yıllık tuz tüketimini tahmin edin. Kireç etkisi tahminlerini, tuz dolum zaman çizelgelerini ve cihaz ömür tahminlerini tek bir etkileşimli araçta görün.';
|
|
10
|
+
|
|
11
|
+
const faqData = [
|
|
12
|
+
{
|
|
13
|
+
question: 'Su sertliği nedir?',
|
|
14
|
+
answer:
|
|
15
|
+
'Su sertliği, musluk suyunuzda çözünmüş kalsiyum ve magnezyum minerallerinin konsantrasyonudur. Gallon başına grain veya Fransız derecesi olarak ölçülür. Sert su borularda kireç birikimine neden olur, ısıtma verimliliğini düşürür ve cihaz ömrünü kısaltır.',
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
question: 'Su yumuşatıcı nasıl çalışır?',
|
|
19
|
+
answer:
|
|
20
|
+
'Bir su yumuşatıcı, iyon değişim reçinesi boncukları kullanarak kalsiyum ve magnezyum iyonlarını sodyum iyonlarıyla değiştirir. Reçine doygun hale geldiğinde, sistem bir tuzlu su çözeltisi ile tankı yıkayarak yenilenir; boncukları eski haline getirir ve sert mineralleri tahliye eder.',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
question: 'Bir yumuşatıcı yılda ne kadar tuz kullanır?',
|
|
24
|
+
answer:
|
|
25
|
+
'Orta sertlikte suyu olan tipik dört kişilik bir hane yılda 80 ila 120 kilogram tuz kullanır. Çok sert su veya daha büyük haneler bu miktarı 200 kilogramın üzerine çıkarabilir. Modern yüksek verimli yumuşatıcılar eski modellere göre yaklaşık yüzde 30 daha az tuz kullanır.',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
question: 'Tuz tankını ne sıklıkla doldurmalıyım?',
|
|
29
|
+
answer:
|
|
30
|
+
'Çoğu tuzlu su tankı 4 ila 8 haftada bir doldurulmalıdır. Tuz seviyesini aylık olarak kontrol edin. Tankın doluluk oranı üçte birin altına düşerse yeni bir 25 kilogramlık torba ekleyin. Tuzun tamamen bitmesine asla izin vermeyin; aksi takdirde reçine tekrar sertleşir ve etkinliğini kaybeder.',
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
question: 'Sert su gerçekten cihazlara zarar verir mi?',
|
|
34
|
+
answer:
|
|
35
|
+
'Evet. Isıtma elemanları üzerindeki kireç birikimleri onların daha çok çalışmasına neden olarak enerji faturalarını artırır ve erken arızalara yol açar. Çok sert su bulunan bir bölgedeki bir su ısıtıcısı beklenen ömrünün yüzde 45\'ine kadar kaybedebilir. Çamaşır makineleri ve bulaşık makineleri de tıkanmış valfler ve kireçlenmiş tamburlardan etkilenir.',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
question: 'Yumuşatılmış su içilebilir mi?',
|
|
39
|
+
answer:
|
|
40
|
+
'Yumuşatılmış su çoğu insan için içmekte güvenlidir. Sodyum artışı küçüktür, kabaca günde bir dilim ekmekle eşdeğerdir. Ancak katı sodyum kısıtlı diyet uygulayan kişiler içme suyu için ayrı bir yumuşatılmamış musluk tercih edebilir veya potasyum bazlı bir yumuşatıcı tuzu seçebilir.',
|
|
41
|
+
},
|
|
42
|
+
];
|
|
43
|
+
|
|
44
|
+
const howToData = [
|
|
45
|
+
{
|
|
46
|
+
name: 'Su sertliğinizi girin',
|
|
47
|
+
text: 'Su kalitesi raporunuzdan veya test şeridinden sertlik değerini yazın. Birim seçiciden gallon başına grain veya Fransız derecesi seçin.',
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
name: 'Hane büyüklüğünü ayarlayın',
|
|
51
|
+
text: 'Evinizde yaşayan kişi sayısını seçin. Daha fazla kişi, daha yüksek su tüketimi ve daha hızlı tuz tüketimi anlamına gelir.',
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
name: 'Yumuşatıcı kapasitesini seçin',
|
|
55
|
+
text: 'Yumuşatıcı reçine tankının grain kapasitesini girin. Bu genellikle kontrol valfi veya kullanım kılavuzunda yazılıdır. Yaygın değerler 24.000 veya 32.000 graindir.',
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
name: 'Sertlik kategorisini inceleyin',
|
|
59
|
+
text: 'Suyunuzun yumuşak, orta sert veya aşırı sert olup olmadığını anlamak için etkileşimli sertlik ölçeğini okuyun.',
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
name: 'Tuz tahminini kontrol edin',
|
|
63
|
+
text: 'Yılda kaç adet 25 kilogramlık torbaya ihtiyacınız olacağını ve bir sonraki dolumun ne zaman yapılacağını görmek için torba yığını simülatörüne bakın.',
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
name: 'Cihaz etkisini inceleyin',
|
|
67
|
+
text: 'Çamaşır makinenizin, su ısıtıcınızın ve kahve makinenizin temel ömrünü, mevcut işlenmemiş suyunuzla tahmini ömürleriyle karşılaştırın.',
|
|
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<WaterSoftenerUI> = {
|
|
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: 'Sert Suyun Görünmeyen Maliyeti',
|
|
116
|
+
level: 2,
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
type: 'paragraph',
|
|
120
|
+
html: 'Sert su, bir evdeki en pahalı gizli sorunlardan biridir. Musluğu her açtığınızda çözünmüş mineraller borularınızdan ve cihazlarınızdan akar. Aylar ve yıllar boyunca bu mineraller kirece kristalleşir; borularda ısıtma elemanlarını tıkayan, akış hızını düşüren ve lastik contaları yok eden sert beyaz bir tabaka. Sonuç olarak daha yüksek enerji faturaları, kısalan cihaz ömrü ve sık bakım çağrılarıdır. Su yumuşatıcı bu hasarı kaynağında ortadan kaldırır.',
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
type: 'stats',
|
|
124
|
+
items: [
|
|
125
|
+
{ value: '80kg', label: 'Yıllık Ortalama Tuz Kullanımı', icon: 'mdi:shaker-outline' },
|
|
126
|
+
{ value: '11 yıl', label: 'Çamaşır Makinesi Temel Ömrü', icon: 'mdi:washing-machine' },
|
|
127
|
+
{ value: '0,15', label: 'mm kireç/GPG/yıl', icon: 'mdi:water-check' },
|
|
128
|
+
],
|
|
129
|
+
columns: 3,
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
type: 'title',
|
|
133
|
+
text: 'Kireç Neden Bu Kadar Zararlı',
|
|
134
|
+
level: 3,
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
type: 'paragraph',
|
|
138
|
+
html: 'Kireç, sadece çaydanlığınızdaki bir leke değildir. Bir su ısıtıcı içinde ısıtma elemanı üzerinde yalıtkan bir tabaka oluşturur. Her milimetre kireç için enerji transfer verimliliği yüzde 10\'a kadar düşer. Bu, 3 milimetrelik bir kaplamanın su ısıtma faturanızı yaklaşık yüzde 30 artırabileceği anlamına gelir. Çamaşır makinelerinde kireç deterjan aktivasyonunu engeller, böylece daha kötü sonuçlar için daha fazla toz kullanırsınız. Kahve makinelerinde termostata zarar verir ve acı, dengesiz ekstraksiyon üretir.',
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
type: 'comparative',
|
|
142
|
+
items: [
|
|
143
|
+
{
|
|
144
|
+
title: 'İşlenmemiş Sert Su',
|
|
145
|
+
description: 'Mineraller tesisat sisteminin tamamında ve her bağlı cihazda serbestçe birikir.',
|
|
146
|
+
icon: 'mdi:alert',
|
|
147
|
+
points: ['Isıtıcılarda ve kazanlarda hızlı kireç birikimi', 'Artan deterjan ve sabun tüketimi', 'Cihaz ömrünün yüzde 30 ila 45 oranında kısalması', 'Kirecin yalıtım etkisi nedeniyle daha yüksek enerji faturaları'],
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
title: 'Yumuşatılmış Su',
|
|
151
|
+
description: 'Kalsiyum ve magnezyum musluklara ve cihazlara ulaşmadan giriş noktasında çıkarılır.',
|
|
152
|
+
icon: 'mdi:check-circle',
|
|
153
|
+
points: ['Isıtma elemanları üzerinde sıfır kireç birikimi', 'Normal deterjan dozları daha iyi sonuç verir', 'Cihazlar tam tasarım ömürlerine ulaşır', 'Su ısıtma için daha düşük enerji tüketimi'],
|
|
154
|
+
},
|
|
155
|
+
],
|
|
156
|
+
columns: 2,
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
type: 'diagnostic',
|
|
160
|
+
variant: 'info',
|
|
161
|
+
title: 'Hızlı Sert Su Kontrolü',
|
|
162
|
+
icon: 'mdi:clipboard-check',
|
|
163
|
+
badge: 'Eylem',
|
|
164
|
+
html: '<p style="margin:0">Şeffaf bir şişeyi musluk suyuyla doldurun ve birkaç damla sıvı sabun ekleyin. Şiddetle çalkalayın. Su bulanık kalıyor ve çok az köpük oluşturuyorsa suyunuz sert demektir. Kristal berraklığında su kalın ve sabit köpükle yumuşak suyu gösterir. Kesin bir ölçüm için toplam sertlik test şeridi kullanın veya su tedarikçinizden rapor talep edin.</p>',
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
type: 'title',
|
|
168
|
+
text: 'Tuz Tedariğinizi Doğru Boyutlandırma',
|
|
169
|
+
level: 3,
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
type: 'paragraph',
|
|
173
|
+
html: 'Tuzun bitmesi, bir yumuşatıcıyı mahvetmenin en hızlı yoludur. Tuzlu su tankı boşaldığında, reçine yatağı birkaç gün içinde tekrar sertleşir ve sistem evinizi korumayı bırakır. Yılda kaç adet 25 kilogramlık torba ihtiyacınız olduğunu tam olarak tahmin etmek için bu hesaplayıcıyı kullanın. Sonuç 10 torbadan fazlaysa, daha büyük kapasiteli bir reçine tankına veya rejenerasyon döngüsü başına daha az tuz kullanan yüksek verimli bir valfe geçmeyi düşünün.',
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
type: 'summary',
|
|
177
|
+
title: 'Evinizi Sert Suya Karşı Nasıl Korursunuz',
|
|
178
|
+
items: [
|
|
179
|
+
'Bu hesaplayıcıyı kullanarak tam su sertliği kategorinizi ve tuz ihtiyacınızı öğrenin.',
|
|
180
|
+
'Ana su hattı girişine doğru boyutta bir su yumuşatıcı kurun.',
|
|
181
|
+
'Tuzlu su tankı üçte birin altına düşmeden doldurun.',
|
|
182
|
+
'En iyi reçine performansı için yüksek saflıkta buharlaştırılmış tuz peletleri kullanın.',
|
|
183
|
+
'Valfi ve reçine yatağını her 3 ila 5 yılda bir servis ettirin.',
|
|
184
|
+
'Kireç birikimini işaret edebilecek ani artışlar için cihaz enerji faturalarını izleyin.',
|
|
185
|
+
],
|
|
186
|
+
},
|
|
187
|
+
],
|
|
188
|
+
ui: {
|
|
189
|
+
labelHardness: 'Su Sertliği',
|
|
190
|
+
unitGpg: 'GPG',
|
|
191
|
+
unitFH: 'fH',
|
|
192
|
+
labelOccupants: 'Hane Büyüklüğü',
|
|
193
|
+
unitPeople: 'kişi',
|
|
194
|
+
labelSoftenerCapacity: 'Yumuşatıcı Kapasitesi',
|
|
195
|
+
unitGrains: 'grain',
|
|
196
|
+
hardnessSoft: 'Yumuşak',
|
|
197
|
+
hardnessSlightly: 'Hafif Sert',
|
|
198
|
+
hardnessModerate: 'Orta Sert',
|
|
199
|
+
hardnessHard: 'Sert',
|
|
200
|
+
hardnessVery: 'Çok Sert',
|
|
201
|
+
hardnessExtreme: 'Aşırı Sert',
|
|
202
|
+
scaleTitle: 'Kireç Birikim Hızı',
|
|
203
|
+
scaleUnitMetric: 'mm/yıl',
|
|
204
|
+
scaleUnitImperial: 'in/yıl',
|
|
205
|
+
saltTitle: 'Yıllık Tuz Tahmini',
|
|
206
|
+
saltAnnual: 'Yıllık Tuz',
|
|
207
|
+
saltBags: 'Yıllık torba sayısı',
|
|
208
|
+
saltDaysPerBag: 'Torba başına gün',
|
|
209
|
+
saltWeeksPerBag: 'Torba başına hafta',
|
|
210
|
+
applianceTitle: 'Cihaz Ömrü',
|
|
211
|
+
applianceWasher: 'Çamaşır Makinesi',
|
|
212
|
+
applianceHeater: 'Su Isıtıcı',
|
|
213
|
+
applianceCoffee: 'Kahve Makinesi',
|
|
214
|
+
applianceBaseline: 'Yumuşatıcı ile',
|
|
215
|
+
applianceWithHardness: 'Sert su ile',
|
|
216
|
+
applianceSaved: 'yıl',
|
|
217
|
+
badgeSaved: 'Uzatma',
|
|
218
|
+
labelUnitSystem: 'Birimler',
|
|
219
|
+
btnMetric: 'Metrik',
|
|
220
|
+
btnImperial: 'İngiliz',
|
|
221
|
+
},
|
|
222
|
+
};
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { WaterSoftenerUI } from '../ui';
|
|
4
|
+
import { bibliography } from '../bibliography';
|
|
5
|
+
|
|
6
|
+
const slug = 'water-softener';
|
|
7
|
+
const title = '家用软水机与盐耗优化计算器';
|
|
8
|
+
const description =
|
|
9
|
+
'分析您的水质硬度水平,计算最佳软水机设置并估算年度盐耗量。在这个交互式工具中查看水垢影响预测、盐补充时间表和电器寿命预测。';
|
|
10
|
+
|
|
11
|
+
const faqData = [
|
|
12
|
+
{
|
|
13
|
+
question: '什么是水的硬度?',
|
|
14
|
+
answer:
|
|
15
|
+
'水的硬度是指自来水中的溶解钙和镁矿物质浓度。它以每加仑格令或法国度来测量。硬水会导致管道中形成水垢,降低加热效率并缩短电器寿命。',
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
question: '软水机是如何工作的?',
|
|
19
|
+
answer:
|
|
20
|
+
'软水机使用离子交换树脂珠将钙和镁离子替换为钠离子。当树脂饱和时,系统通过向水箱中冲洗盐水溶液来进行再生,恢复树脂珠并将硬矿物质排入下水道。',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
question: '软水机每年使用多少盐?',
|
|
24
|
+
answer:
|
|
25
|
+
'一个典型的四口之家在中等硬度水质条件下每年使用80至120公斤盐。水质非常硬或家庭人数更多时,这一数值可能超过200公斤。现代高效软水机比旧型号少用约30%的盐。',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
question: '我应该多久补充一次盐箱?',
|
|
29
|
+
answer:
|
|
30
|
+
'大多数盐水箱需要每4到8周补充一次。每月检查盐量。如果盐箱少于三分之一满,请添加一袋新的25公斤盐。切勿让盐完全耗尽,否则树脂会重新硬化并失去效力。',
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
question: '硬水真的会损坏电器吗?',
|
|
34
|
+
answer:
|
|
35
|
+
'是的。水垢沉积在加热元件上会迫使它们更努力地工作,从而增加能源费用并导致过早故障。在硬水非常严重的地区,热水器的预期寿命可能缩短多达45%。洗衣机和洗碗机也会因阀门堵塞和滚筒结垢而受损。',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
question: '软化后的水可以饮用吗?',
|
|
39
|
+
answer:
|
|
40
|
+
'软化水对大多数人来说是安全可饮用的。钠含量的增加很小,大约相当于每天一片面包。然而,严格限制低钠饮食的人可能更倾向于使用单独的未软化水龙头作为饮用水,或选择基于钾的软水盐。',
|
|
41
|
+
},
|
|
42
|
+
];
|
|
43
|
+
|
|
44
|
+
const howToData = [
|
|
45
|
+
{
|
|
46
|
+
name: '输入您的水质硬度',
|
|
47
|
+
text: '从您的水质报告或测试条中输入硬度数值。在单位选择器中选择每加仑格令或法国度。',
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
name: '设置家庭人数',
|
|
51
|
+
text: '选择您家中居住的人数。居住人数越多,用水量越大,盐消耗也越快。',
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
name: '选择软水机容量',
|
|
55
|
+
text: '输入软水机树脂罐的格令容量。这通常印在控制阀或用户手册上。常见数值为24,000或32,000格令。',
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
name: '查看硬度类别',
|
|
59
|
+
text: '阅读交互式硬度标尺,了解您的水质属于软水、中等硬水还是极硬水。',
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
name: '查看盐消耗预测',
|
|
63
|
+
text: '查看盐袋堆叠模拟器,了解您每年需要多少袋25公斤盐以及下次补充的时间。',
|
|
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<WaterSoftenerUI> = {
|
|
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: '80kg', label: '年均盐耗量', icon: 'mdi:shaker-outline' },
|
|
126
|
+
{ value: '11yr', label: '洗衣机基准寿命', icon: 'mdi:washing-machine' },
|
|
127
|
+
{ value: '0.15', label: '每GPG每年水垢毫米数', icon: 'mdi:water-check' },
|
|
128
|
+
],
|
|
129
|
+
columns: 3,
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
type: 'title',
|
|
133
|
+
text: '水垢为何具有如此大的破坏力',
|
|
134
|
+
level: 3,
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
type: 'paragraph',
|
|
138
|
+
html: '水垢不仅仅是水壶上的美观污渍。在热水器内部,它会在加热元件上形成隔热层。每增加一毫米水垢,热传递效率就会下降多达10%。这意味着三毫米的水垢涂层可能使您的热水费用增加近30%。在洗衣机中,水垢会阻碍洗涤剂活化,因此您需要使用更多洗衣粉却得到更差的效果。在咖啡机中,它会损坏温控器并产生苦涩、不均匀的萃取。',
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
type: 'comparative',
|
|
142
|
+
items: [
|
|
143
|
+
{
|
|
144
|
+
title: '未处理的硬水',
|
|
145
|
+
description: '矿物质在整个管道系统和每个连接的电器中自由沉积。',
|
|
146
|
+
icon: 'mdi:alert',
|
|
147
|
+
points: ['加热器和锅炉中快速形成水垢', '洗涤剂和肥皂用量增加', '电器寿命缩短30%至45%', '水垢的隔热效应导致能源费用更高'],
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
title: '软化后的水',
|
|
151
|
+
description: '钙和镁在进入点就被去除,不会到达水龙头和电器。',
|
|
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">用一个透明瓶子装满自来水,加入几滴液体肥皂。用力摇晃。如果水保持浑浊且产生的泡沫很少,说明您的水是硬水。清澈透明且有厚实稳定泡沫的水表示软水。要获得精确测量,请使用总硬度测试条或向您的水务供应商索取报告。</p>',
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
type: 'title',
|
|
168
|
+
text: '正确确定盐供应量',
|
|
169
|
+
level: 3,
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
type: 'paragraph',
|
|
173
|
+
html: '盐耗尽是毁坏软水机最快的方式。当盐水箱空了,树脂床会在几天内重新硬化,系统将停止保护您的家庭。使用此计算器精确预测您每年需要多少袋25公斤盐。如果结果超过10袋,请考虑升级到更大容量的树脂罐,或使用每个再生周期耗盐量更少的高效阀门。',
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
type: 'summary',
|
|
177
|
+
title: '如何保护您的家庭免受硬水侵害',
|
|
178
|
+
items: [
|
|
179
|
+
'使用此计算器查找您确切的水质硬度类别和盐需求量。',
|
|
180
|
+
'在主供水入口处安装尺寸合适的软水机。',
|
|
181
|
+
'在盐水箱降至三分之一以下之前进行补充。',
|
|
182
|
+
'使用高纯度蒸发盐颗粒以获得最佳的树脂性能。',
|
|
183
|
+
'每3至5年对阀门和树脂床进行维护。',
|
|
184
|
+
'监控电器能源费用是否突然增加,这可能预示着水垢堆积。',
|
|
185
|
+
],
|
|
186
|
+
},
|
|
187
|
+
],
|
|
188
|
+
ui: {
|
|
189
|
+
labelHardness: '水质硬度',
|
|
190
|
+
unitGpg: 'GPG',
|
|
191
|
+
unitFH: 'fH',
|
|
192
|
+
labelOccupants: '家庭人数',
|
|
193
|
+
unitPeople: '人',
|
|
194
|
+
labelSoftenerCapacity: '软水机容量',
|
|
195
|
+
unitGrains: '格令',
|
|
196
|
+
hardnessSoft: '软水',
|
|
197
|
+
hardnessSlightly: '微硬',
|
|
198
|
+
hardnessModerate: '中等硬度',
|
|
199
|
+
hardnessHard: '硬水',
|
|
200
|
+
hardnessVery: '很硬',
|
|
201
|
+
hardnessExtreme: '极硬',
|
|
202
|
+
scaleTitle: '水垢堆积速率',
|
|
203
|
+
scaleUnitMetric: '毫米/年',
|
|
204
|
+
scaleUnitImperial: '英寸/年',
|
|
205
|
+
saltTitle: '年度盐耗预测',
|
|
206
|
+
saltAnnual: '年度盐耗',
|
|
207
|
+
saltBags: '每年袋数',
|
|
208
|
+
saltDaysPerBag: '每袋天数',
|
|
209
|
+
saltWeeksPerBag: '每袋周数',
|
|
210
|
+
applianceTitle: '电器使用寿命',
|
|
211
|
+
applianceWasher: '洗衣机',
|
|
212
|
+
applianceHeater: '热水器',
|
|
213
|
+
applianceCoffee: '咖啡机',
|
|
214
|
+
applianceBaseline: '使用软水时',
|
|
215
|
+
applianceWithHardness: '使用硬水时',
|
|
216
|
+
applianceSaved: '年',
|
|
217
|
+
badgeSaved: '延长了',
|
|
218
|
+
labelUnitSystem: '单位制',
|
|
219
|
+
btnMetric: '公制',
|
|
220
|
+
btnImperial: '英制',
|
|
221
|
+
},
|
|
222
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ToolDefinition } from '../../types';
|
|
2
|
+
import { waterSoftener } from './entry';
|
|
3
|
+
export * from './entry';
|
|
4
|
+
export const WATER_SOFTENER_TOOL: ToolDefinition = {
|
|
5
|
+
entry: waterSoftener,
|
|
6
|
+
Component: () => import('./component.astro'),
|
|
7
|
+
SEOComponent: () => import('./seo.astro'),
|
|
8
|
+
BibliographyComponent: () => import('./bibliography.astro'),
|
|
9
|
+
};
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
export interface WaterSoftenerInput {
|
|
2
|
+
hardnessValue: number;
|
|
3
|
+
hardnessUnit: 'gpg' | 'fH';
|
|
4
|
+
occupants: number;
|
|
5
|
+
softenerGrains: number;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export interface HardnessCategory {
|
|
9
|
+
key: string;
|
|
10
|
+
label: string;
|
|
11
|
+
color: string;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export interface SaltResult {
|
|
15
|
+
annualSaltKg: number;
|
|
16
|
+
bagsPerYear: number;
|
|
17
|
+
daysPerBag: number;
|
|
18
|
+
weeksPerBag: number;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface ApplianceResult {
|
|
22
|
+
baseline: number;
|
|
23
|
+
withHardness: number;
|
|
24
|
+
saved: number;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export interface ScaleResult {
|
|
28
|
+
rateMmPerYear: number;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const CATEGORIES: HardnessCategory[] = [
|
|
32
|
+
{ key: 'soft', label: 'Soft', color: '#60a5fa' },
|
|
33
|
+
{ key: 'slightly', label: 'Slightly Hard', color: '#818cf8' },
|
|
34
|
+
{ key: 'moderate', label: 'Moderately Hard', color: '#c084fc' },
|
|
35
|
+
{ key: 'hard', label: 'Hard', color: '#f472b6' },
|
|
36
|
+
{ key: 'very', label: 'Very Hard', color: '#fb923c' },
|
|
37
|
+
{ key: 'extreme', label: 'Extremely Hard', color: '#9ca3af' },
|
|
38
|
+
];
|
|
39
|
+
|
|
40
|
+
export function toGpg(value: number, unit: 'gpg' | 'fH'): number {
|
|
41
|
+
return unit === 'fH' ? value * 0.584 : value;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export function getHardnessCategory(gpg: number): HardnessCategory {
|
|
45
|
+
if (gpg < 3.5) return CATEGORIES[0];
|
|
46
|
+
if (gpg < 7.0) return CATEGORIES[1];
|
|
47
|
+
if (gpg < 10.5) return CATEGORIES[2];
|
|
48
|
+
if (gpg < 14.0) return CATEGORIES[3];
|
|
49
|
+
if (gpg < 21.0) return CATEGORIES[4];
|
|
50
|
+
return CATEGORIES[5];
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export function calculateScale(gpg: number): ScaleResult {
|
|
54
|
+
return { rateMmPerYear: Math.round(gpg * 0.15 * 10) / 10 };
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export function calculateSalt(input: WaterSoftenerInput): SaltResult {
|
|
58
|
+
const gpg = toGpg(input.hardnessValue, input.hardnessUnit);
|
|
59
|
+
const dailyGallons = input.occupants * 80;
|
|
60
|
+
const dailyGrains = gpg * dailyGallons;
|
|
61
|
+
const annualGrains = dailyGrains * 365;
|
|
62
|
+
const regensPerYear = annualGrains / input.softenerGrains;
|
|
63
|
+
const saltLbPerRegen = input.softenerGrains / 3333;
|
|
64
|
+
const annualSaltLb = regensPerYear * saltLbPerRegen;
|
|
65
|
+
const annualSaltKg = Math.round(annualSaltLb * 0.4536 * 10) / 10;
|
|
66
|
+
const bagsPerYear = annualSaltKg / 25;
|
|
67
|
+
const daysPerBag = bagsPerYear > 0 ? 365 / bagsPerYear : 0;
|
|
68
|
+
return {
|
|
69
|
+
annualSaltKg,
|
|
70
|
+
bagsPerYear: Math.round(bagsPerYear * 10) / 10,
|
|
71
|
+
daysPerBag: Math.round(daysPerBag),
|
|
72
|
+
weeksPerBag: Math.round(daysPerBag / 7 * 10) / 10,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export function calculateApplianceLifespan(gpg: number): Record<string, ApplianceResult> {
|
|
77
|
+
const factor = Math.max(0, (gpg - 3.5) / 21);
|
|
78
|
+
const f = (base: number, loss: number) => {
|
|
79
|
+
const withH = Math.round(base * (1 - loss * factor) * 10) / 10;
|
|
80
|
+
return { baseline: base, withHardness: withH, saved: Math.round((base - withH) * 10) / 10 };
|
|
81
|
+
};
|
|
82
|
+
return {
|
|
83
|
+
washer: f(11, 0.35),
|
|
84
|
+
heater: f(12, 0.45),
|
|
85
|
+
coffee: f(6, 0.25),
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export function mmToInches(mm: number): number {
|
|
90
|
+
return Math.round((mm / 25.4) * 100) / 100;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export function kgToLbs(kg: number): number {
|
|
94
|
+
return Math.round(kg * 2.20462 * 10) / 10;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export function fmt1(n: number): string {
|
|
98
|
+
return n.toFixed(1);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export function fmt2(n: number): string {
|
|
102
|
+
return n.toFixed(2);
|
|
103
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
import { SEORenderer } 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
|
+
if (!content) return null;
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
{content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export interface WaterSoftenerUI extends Record<string, string> {
|
|
2
|
+
labelHardness: string;
|
|
3
|
+
unitGpg: string;
|
|
4
|
+
unitFH: string;
|
|
5
|
+
labelOccupants: string;
|
|
6
|
+
unitPeople: string;
|
|
7
|
+
labelSoftenerCapacity: string;
|
|
8
|
+
unitGrains: string;
|
|
9
|
+
hardnessSoft: string;
|
|
10
|
+
hardnessSlightly: string;
|
|
11
|
+
hardnessModerate: string;
|
|
12
|
+
hardnessHard: string;
|
|
13
|
+
hardnessVery: string;
|
|
14
|
+
hardnessExtreme: string;
|
|
15
|
+
scaleTitle: string;
|
|
16
|
+
scaleUnitMetric: string;
|
|
17
|
+
scaleUnitImperial: string;
|
|
18
|
+
saltTitle: string;
|
|
19
|
+
saltAnnual: string;
|
|
20
|
+
saltBags: string;
|
|
21
|
+
saltDaysPerBag: string;
|
|
22
|
+
saltWeeksPerBag: string;
|
|
23
|
+
applianceTitle: string;
|
|
24
|
+
applianceWasher: string;
|
|
25
|
+
applianceHeater: string;
|
|
26
|
+
applianceCoffee: string;
|
|
27
|
+
applianceBaseline: string;
|
|
28
|
+
applianceWithHardness: string;
|
|
29
|
+
applianceSaved: string;
|
|
30
|
+
badgeSaved: string;
|
|
31
|
+
labelUnitSystem: string;
|
|
32
|
+
btnMetric: string;
|
|
33
|
+
btnImperial: string;
|
|
34
|
+
}
|