@jjlmoya/utils-home 1.25.0 → 1.26.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/wallPaintingCalculator/bibliography.astro +14 -0
- package/src/tool/wallPaintingCalculator/bibliography.ts +14 -0
- package/src/tool/wallPaintingCalculator/component.astro +340 -0
- package/src/tool/wallPaintingCalculator/entry.ts +29 -0
- package/src/tool/wallPaintingCalculator/i18n/de.ts +226 -0
- package/src/tool/wallPaintingCalculator/i18n/en.ts +226 -0
- package/src/tool/wallPaintingCalculator/i18n/es.ts +226 -0
- package/src/tool/wallPaintingCalculator/i18n/fr.ts +226 -0
- package/src/tool/wallPaintingCalculator/i18n/id.ts +226 -0
- package/src/tool/wallPaintingCalculator/i18n/it.ts +226 -0
- package/src/tool/wallPaintingCalculator/i18n/ja.ts +226 -0
- package/src/tool/wallPaintingCalculator/i18n/ko.ts +226 -0
- package/src/tool/wallPaintingCalculator/i18n/nl.ts +226 -0
- package/src/tool/wallPaintingCalculator/i18n/pl.ts +226 -0
- package/src/tool/wallPaintingCalculator/i18n/pt.ts +226 -0
- package/src/tool/wallPaintingCalculator/i18n/ru.ts +226 -0
- package/src/tool/wallPaintingCalculator/i18n/sv.ts +226 -0
- package/src/tool/wallPaintingCalculator/i18n/tr.ts +226 -0
- package/src/tool/wallPaintingCalculator/i18n/zh.ts +226 -0
- package/src/tool/wallPaintingCalculator/index.ts +9 -0
- package/src/tool/wallPaintingCalculator/logic.ts +27 -0
- package/src/tool/wallPaintingCalculator/seo.astro +15 -0
- package/src/tool/wallPaintingCalculator/ui.ts +42 -0
- package/src/tool/wallPaintingCalculator/wall-painting-calculator.css +326 -0
- package/src/tools.ts +2 -0
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { WallPaintingCalculatorUI } from '../ui';
|
|
4
|
+
import { bibliography } from '../bibliography';
|
|
5
|
+
|
|
6
|
+
const slug = 'duvar-boya-hesaplayici';
|
|
7
|
+
const title = 'Duvar Boyası ve Seyreltme Hesaplayıcısı';
|
|
8
|
+
const description =
|
|
9
|
+
'Duvarlarınız için tam olarak kaç litre veya galon boyaya ihtiyacınız olduğunu hesaplayın. Katlar, yüzey türü, seyreltme için ayar yapın ve satın almadan önce gerçek maliyeti öğrenin.';
|
|
10
|
+
|
|
11
|
+
const faqData = [
|
|
12
|
+
{
|
|
13
|
+
question: 'Tam boya miktarını nasıl hesaplarım?',
|
|
14
|
+
answer:
|
|
15
|
+
'Duvar yüzey alanını kat sayısı ile çarpın ve ardından litreye veya galona göre metrekare veya feetkare başına boya verimine bölün. Önce kapı ve pencereleri toplam alandan çıkarın.',
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
question: 'Standart bir oda ne kadar boya ister?',
|
|
19
|
+
answer:
|
|
20
|
+
'Tavan yüksekliği 2,5 metre olan 12 metrekarelik bir odanın duvar yüzeyi yaklaşık 30 metrekaredir. İki kat ve litreye başına 12 metrekare verim ile yaklaşık 5 litre boyaya ihtiyacınız olur.',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
question: 'Boyayı uygulamadan önce seyreltmeli miyim?',
|
|
24
|
+
answer:
|
|
25
|
+
'Su bazlı plastik boyalar genellikle kullanıma hazırdır veya ilk kat için yüzde 5 ila 10 su gerektirir. Emaye veya yağlı boyalar genellikle kutuda belirtilen özel bir çözücü gerektirir.',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
question: 'Gerçekten kaç kat gerekli?',
|
|
29
|
+
answer:
|
|
30
|
+
'Yeni veya yüksek derecede emici yüzeyler astar artı iki son kat boya ister. Benzer renkte zaten boyalı bir duvarı boyamak genellikle sadece bir veya iki kat ister.',
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
question: 'Kapı ve pencere alanını çıkarıyor muyum?',
|
|
34
|
+
answer:
|
|
35
|
+
'Evet. Her açıklığı ölçün ve duvar toplam alanından çıkarın. Hızlı bir kural olarak kapılar yaklaşık 2 metrekare ve pencereler yaklaşık 1,5 metrekaredir.',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
question: 'Yüzey türü verimi değiştirir mi?',
|
|
39
|
+
answer:
|
|
40
|
+
'Evet. Pürüzsüz hazırlanmış duvarlar litreye başına 14 metrekareye kadar verim sağlayabilir. Pürüzlü beton, dokulu sıva veya emici tuğla verimi litreye başına 6 veya 8 metrekareye düşürebilir.',
|
|
41
|
+
},
|
|
42
|
+
];
|
|
43
|
+
|
|
44
|
+
const howToData = [
|
|
45
|
+
{
|
|
46
|
+
name: 'Duvarlarınızı ölçün',
|
|
47
|
+
text: 'Her duvarın genişliğini ve yüksekliğini ölçün. Her duvarın alanını bulmak için çarpın ve ardından tüm duvarları toplayın.',
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
name: 'Açıklıkları çıkarın',
|
|
51
|
+
text: 'Kapı ve pencereleri ölçün ve toplamdan alanlarını çıkararak boyanacak gerçek yüzeyi bulun.',
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
name: 'Boya türünüzü seçin',
|
|
55
|
+
text: 'Hesaplayıcıda boya türünü seçin. Plastik mat, plastik saten ve emaye farklı verimlere ve seyrelme önerilerine sahiptir.',
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
name: 'Katları ve fiyatı ayarlayın',
|
|
59
|
+
text: 'Uygulamayı planladığınız kat sayısını ve litre veya galon başına fiyatı belirtin. Hesaplayıcı tam miktarı ve toplam maliyeti döndürecektir.',
|
|
60
|
+
},
|
|
61
|
+
];
|
|
62
|
+
|
|
63
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
64
|
+
'@context': 'https://schema.org',
|
|
65
|
+
'@type': 'FAQPage',
|
|
66
|
+
mainEntity: faqData.map((item) => ({
|
|
67
|
+
'@type': 'Question',
|
|
68
|
+
name: item.question,
|
|
69
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
70
|
+
})),
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
const howToSchema: WithContext<HowTo> = {
|
|
74
|
+
'@context': 'https://schema.org',
|
|
75
|
+
'@type': 'HowTo',
|
|
76
|
+
name: title,
|
|
77
|
+
description,
|
|
78
|
+
step: howToData.map((step) => ({
|
|
79
|
+
'@type': 'HowToStep',
|
|
80
|
+
name: step.name,
|
|
81
|
+
text: step.text,
|
|
82
|
+
})),
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
86
|
+
'@context': 'https://schema.org',
|
|
87
|
+
'@type': 'SoftwareApplication',
|
|
88
|
+
name: title,
|
|
89
|
+
description,
|
|
90
|
+
applicationCategory: 'UtilityApplication',
|
|
91
|
+
operatingSystem: 'All',
|
|
92
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
93
|
+
inLanguage: 'tr',
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
export const content: ToolLocaleContent<WallPaintingCalculatorUI> = {
|
|
97
|
+
slug,
|
|
98
|
+
title,
|
|
99
|
+
description,
|
|
100
|
+
faq: faqData,
|
|
101
|
+
bibliography,
|
|
102
|
+
howTo: howToData,
|
|
103
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
104
|
+
seo: [
|
|
105
|
+
{
|
|
106
|
+
type: 'title',
|
|
107
|
+
text: 'Boya Hesaplayıcı: Tam Olarak İhtiyacınız Olan Kadar Satın Alın',
|
|
108
|
+
level: 2,
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
type: 'paragraph',
|
|
112
|
+
html: 'Önceden hesaplamadan bir odayı boyamak genellikle <strong>yarım dolu tenekelerle</strong> veya acil mağaza ziyaretleriyle sonuçlanır. Neden basit: boya verimi yüzey gözenekliliği, renk değişimi ve kat sayısı ile değişir. Pürüzsüz, önceden boyalı bir duvar litreye başına 14 metrekareye kadar verim sağlayabilir, ancak dokulu sıva duvarı aynı miktarı emebilir ve sadece 6 metrekare kaplayabilir.',
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
type: 'stats',
|
|
116
|
+
items: [
|
|
117
|
+
{ value: 'Yüksek', label: 'Standart Kaplama', icon: 'mdi:format-paint' },
|
|
118
|
+
{ value: '2 kat', label: 'Önerilen', icon: 'mdi:layers' },
|
|
119
|
+
{ value: '5-10%', label: 'Tipik Seyreltme', icon: 'mdi:cup-water' },
|
|
120
|
+
],
|
|
121
|
+
columns: 3,
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
type: 'title',
|
|
125
|
+
text: 'Boya Verimi Nasıl Gerçekten Çalışır',
|
|
126
|
+
level: 3,
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
type: 'paragraph',
|
|
130
|
+
html: 'Üreticiler kutuda teorik verim belirtir. Bu sayı, ideal koşullarda profesyonel bir rulo ile uygulanan mükemmel düz, emici olmayan, beyaz bir yüzeyi varsayar. Gerçek dünyada <strong>gözenekli duvarlar, koyu renkler ve kendi kendine uygulama</strong> bu verimi yüzde 20 ila 40 azaltır. Hesaplayıcımız eksik kalmamanız için gerçekçi profiller seçmenize olanak tanır.',
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
type: 'comparative',
|
|
134
|
+
items: [
|
|
135
|
+
{
|
|
136
|
+
title: 'Plastik Mat Boya',
|
|
137
|
+
description: 'İç mekanlar için en yaygın seçim. Yüksek kapatıcılık, kolay rötuşlanabilir ve çoğu kalitede yıkanabilir.',
|
|
138
|
+
icon: 'mdi:palette',
|
|
139
|
+
points: ['Standart iç mekan kapatıcılığı', 'Seyreltme: yüzde 5 ila 10 su', 'En iyi: salonlar ve yatak odaları için'],
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
title: 'Plastik Saten Boya',
|
|
143
|
+
description: 'Hafif parlak bitiş ile nem ve lekelere karşı daha büyük direnç. Dikişsiz rötuşlanması daha zor.',
|
|
144
|
+
icon: 'mdi:brightness-6',
|
|
145
|
+
points: ['Biraz daha yüksek kapatıcılık', 'Seyreltme: yüzde 5 su', 'En iyi: mutfaklar ve banyolar için'],
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
title: 'Emaye Boya',
|
|
149
|
+
description: 'Marangozluk, radyatörler ve yoğun trafikli alanlar için sert ve dayanıklı bitiş. Çözücü veya özel inceltici gerektirir.',
|
|
150
|
+
icon: 'mdi:spray',
|
|
151
|
+
points: ['Sert ve dayanıklı bitiş', 'Seyreltme: yüzde 10 ila 15 çözücü', 'En iyi: kapılar, çerçeveler ve mobilya için'],
|
|
152
|
+
},
|
|
153
|
+
],
|
|
154
|
+
columns: 3,
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
type: 'diagnostic',
|
|
158
|
+
variant: 'info',
|
|
159
|
+
title: 'Pratik Yüzey Ölçümü',
|
|
160
|
+
icon: 'mdi:ruler-square',
|
|
161
|
+
badge: 'İpucu',
|
|
162
|
+
html: '<p style="margin:0">Her duvarın genişliğini yüksekliğiyle çarpın. Hızlı bir toplam için tüm genişlikleri ekleyin ve oda yüksekliğiyle çarpın. Ardından her standart kapı için yaklaşık 2 metrekare ve her pencere için 1,5 metrekare çıkarın.</p>',
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
type: 'title',
|
|
166
|
+
text: 'Seyreltme ve Uygulama Kuralları',
|
|
167
|
+
level: 3,
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
type: 'paragraph',
|
|
171
|
+
html: 'Yeni veya onarılmış yüzeylerde ilk katlar boyanın nüfuz etmesi ve yapışması için her zaman hafif seyreltme gerektirir. Son katlar seyreltilmemiş veya üreticinin belirttiği minimum miktarda uygulanmalıdır. <strong>Aşırı seyreltme pigmenti kırar</strong> ve ekstra kat gerektiren saydam lekeler bırakır.',
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
type: 'summary',
|
|
175
|
+
title: 'Neden Satın Almadan Önce Hesaplamalısınız',
|
|
176
|
+
items: [
|
|
177
|
+
'Tenede kuruyan ve atık haline gelen fazla boyadan kaçının.',
|
|
178
|
+
'Farklı zamanlarda satın alınan partiler arasında renk uyuşmazlığını önleyin.',
|
|
179
|
+
'Doğru bütçeleme: astar ve araçlar dahil gerçek maliyeti bilin.',
|
|
180
|
+
'Ek malzeme için kesintiye uğratmadan işi tek seferde planlayın.',
|
|
181
|
+
],
|
|
182
|
+
},
|
|
183
|
+
],
|
|
184
|
+
ui: {
|
|
185
|
+
sectionTitle: 'Yüzey ve Boya',
|
|
186
|
+
labelMetric: 'Metrik',
|
|
187
|
+
labelImperial: 'İmparatorluk',
|
|
188
|
+
labelArea: 'Boyanacak toplam alan',
|
|
189
|
+
labelAreaFt: 'Boyanacak toplam alan',
|
|
190
|
+
unitArea: 'm2',
|
|
191
|
+
unitAreaFt: 'ft2',
|
|
192
|
+
labelYield: 'Boya verimi',
|
|
193
|
+
labelYieldFt: 'Boya verimi',
|
|
194
|
+
unitYield: 'm2/L',
|
|
195
|
+
unitYieldFt: 'ft2/gal',
|
|
196
|
+
labelType: 'Boya türü seçin',
|
|
197
|
+
btnPlasticMatTitle: 'Plastik Mat',
|
|
198
|
+
btnPlasticMatSub: 'Mat · Su yüzde 5',
|
|
199
|
+
btnPlasticSatinTitle: 'Plastik Saten',
|
|
200
|
+
btnPlasticSatinSub: 'Saten · Su yüzde 5',
|
|
201
|
+
btnEnamelTitle: 'Emaye',
|
|
202
|
+
btnEnamelSub: 'Emaye · Çözücü yüzde 10',
|
|
203
|
+
labelCoats: 'Kat sayısı',
|
|
204
|
+
unitCoats: 'kat',
|
|
205
|
+
labelPrice: 'Litre başına fiyat',
|
|
206
|
+
labelPriceFt: 'Galon başına fiyat',
|
|
207
|
+
unitPrice: '/L',
|
|
208
|
+
unitPriceGal: '/gal',
|
|
209
|
+
labelDilution: 'Seyreltme yüzdesi',
|
|
210
|
+
unitDilution: '%',
|
|
211
|
+
resultBadge: 'Boya hesaplaması',
|
|
212
|
+
labelPaint: 'Boya litresi',
|
|
213
|
+
labelPaintGal: 'Boya galonu',
|
|
214
|
+
labelCost: 'Toplam maliyet',
|
|
215
|
+
labelWater: 'Seyreltme sıvısı',
|
|
216
|
+
labelWaterGal: 'Seyreltme sıvısı',
|
|
217
|
+
labelTotalVolume: 'Toplam karışım',
|
|
218
|
+
labelTotalVolumeGal: 'Toplam karışım',
|
|
219
|
+
labelCurrency: 'Para Birimi',
|
|
220
|
+
btnCurrUSD: '$',
|
|
221
|
+
btnCurrEUR: '€',
|
|
222
|
+
btnCurrGBP: '£',
|
|
223
|
+
btnCurrJPY: '¥',
|
|
224
|
+
currencySign: '₺',
|
|
225
|
+
},
|
|
226
|
+
};
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { WallPaintingCalculatorUI } from '../ui';
|
|
4
|
+
import { bibliography } from '../bibliography';
|
|
5
|
+
|
|
6
|
+
const slug = 'wall-painting-calculator';
|
|
7
|
+
const title = '墙面油漆与稀释优化计算器';
|
|
8
|
+
const description =
|
|
9
|
+
'精确计算墙面所需的升数或加仑数油漆。根据涂层、表面类型和稀释率进行调整,在购买前获取真实成本。';
|
|
10
|
+
|
|
11
|
+
const faqData = [
|
|
12
|
+
{
|
|
13
|
+
question: '如何计算所需油漆的精确用量?',
|
|
14
|
+
answer:
|
|
15
|
+
'将墙面面积乘以涂层数,然后除以油漆的覆盖率(每升或每加仑的平方米或平方英尺)。请先从总面积中减去门窗面积。',
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
question: '标准房间需要多少油漆?',
|
|
19
|
+
answer:
|
|
20
|
+
'一个12平方米、天花板高2.5米的房间,墙面面积约为30平方米。两遍涂刷,每升覆盖12平方米,大约需要5升油漆。',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
question: '涂刷前需要稀释油漆吗?',
|
|
24
|
+
answer:
|
|
25
|
+
'水性乳胶漆通常可以直接使用,或者第一遍需要加5%到10%的水。搪瓷漆或油性漆通常需要罐上标注的特定溶剂。',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
question: '到底需要刷几遍?',
|
|
29
|
+
answer:
|
|
30
|
+
'新的或吸水性强的表面需要底漆加两遍面漆。在已涂漆的墙面上刷相近颜色,通常只需要一到两遍。',
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
question: '需要扣除门窗面积吗?',
|
|
34
|
+
answer:
|
|
35
|
+
'是的。测量每个开口并从墙面总面积中扣除。快速估算规则:每扇门约2平方米,每扇窗约1.5平方米。',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
question: '表面类型会影响覆盖率吗?',
|
|
39
|
+
answer:
|
|
40
|
+
'是的。光滑处理过的墙面每升可覆盖高达14平方米。粗糙的混凝土、纹理灰泥或吸水性砖块可能将覆盖率降低到每升6到8平方米。',
|
|
41
|
+
},
|
|
42
|
+
];
|
|
43
|
+
|
|
44
|
+
const howToData = [
|
|
45
|
+
{
|
|
46
|
+
name: '测量墙面',
|
|
47
|
+
text: '测量每面墙的宽度和高度。相乘得到每面墙的面积,然后全部相加。',
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
name: '扣除开口',
|
|
51
|
+
text: '测量门窗并从总面积中扣除它们的面积,得到实际需要涂刷的表面积。',
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
name: '选择油漆类型',
|
|
55
|
+
text: '在计算器中选择油漆类型。哑光乳胶漆、半光乳胶漆和搪瓷漆具有不同的覆盖率和稀释建议。',
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
name: '设定遍数和价格',
|
|
59
|
+
text: '输入计划涂刷的遍数和每升或每加仑的价格。计算器将返回精确的用量和总成本。',
|
|
60
|
+
},
|
|
61
|
+
];
|
|
62
|
+
|
|
63
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
64
|
+
'@context': 'https://schema.org',
|
|
65
|
+
'@type': 'FAQPage',
|
|
66
|
+
mainEntity: faqData.map((item) => ({
|
|
67
|
+
'@type': 'Question',
|
|
68
|
+
name: item.question,
|
|
69
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
70
|
+
})),
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
const howToSchema: WithContext<HowTo> = {
|
|
74
|
+
'@context': 'https://schema.org',
|
|
75
|
+
'@type': 'HowTo',
|
|
76
|
+
name: title,
|
|
77
|
+
description,
|
|
78
|
+
step: howToData.map((step) => ({
|
|
79
|
+
'@type': 'HowToStep',
|
|
80
|
+
name: step.name,
|
|
81
|
+
text: step.text,
|
|
82
|
+
})),
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
86
|
+
'@context': 'https://schema.org',
|
|
87
|
+
'@type': 'SoftwareApplication',
|
|
88
|
+
name: title,
|
|
89
|
+
description,
|
|
90
|
+
applicationCategory: 'UtilityApplication',
|
|
91
|
+
operatingSystem: 'All',
|
|
92
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
93
|
+
inLanguage: 'zh',
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
export const content: ToolLocaleContent<WallPaintingCalculatorUI> = {
|
|
97
|
+
slug,
|
|
98
|
+
title,
|
|
99
|
+
description,
|
|
100
|
+
faq: faqData,
|
|
101
|
+
bibliography,
|
|
102
|
+
howTo: howToData,
|
|
103
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
104
|
+
seo: [
|
|
105
|
+
{
|
|
106
|
+
type: 'title',
|
|
107
|
+
text: '油漆计算器:只买你需要的量',
|
|
108
|
+
level: 2,
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
type: 'paragraph',
|
|
112
|
+
html: '不计算就刷漆通常会导致<strong>半罐剩余的油漆</strong>或紧急去商店补货。原因很简单:油漆的覆盖率随表面孔隙率、颜色变化和涂刷遍数而变化。光滑且已涂过漆的墙面每升可覆盖高达14平方米,而粗糙的纹理墙可能会吸收同样多的油漆却只覆盖6平方米。',
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
type: 'stats',
|
|
116
|
+
items: [
|
|
117
|
+
{ value: '高', label: '标准覆盖率', icon: 'mdi:format-paint' },
|
|
118
|
+
{ value: '2遍', label: '推荐', icon: 'mdi:layers' },
|
|
119
|
+
{ value: '5-10%', label: '典型稀释率', icon: 'mdi:cup-water' },
|
|
120
|
+
],
|
|
121
|
+
columns: 3,
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
type: 'title',
|
|
125
|
+
text: '油漆覆盖率的真实工作原理',
|
|
126
|
+
level: 3,
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
type: 'paragraph',
|
|
130
|
+
html: '制造商在罐上标注的是理论覆盖率。这个数字假设在理想条件下,由专业人士使用滚筒在完全光滑、不吸水、白色的表面上施工。在现实世界中,<strong>多孔墙面、深色和DIY施工</strong>会将这个覆盖率降低20%到40%。我们的计算器让你选择符合实际的参数,避免用料不足。',
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
type: 'comparative',
|
|
134
|
+
items: [
|
|
135
|
+
{
|
|
136
|
+
title: '哑光乳胶漆',
|
|
137
|
+
description: '最常见的室内选择。遮盖力高,容易修补,大多数品质可擦洗。',
|
|
138
|
+
icon: 'mdi:palette',
|
|
139
|
+
points: ['标准室内覆盖率', '稀释:加5%到10%的水', '最适合:客厅和卧室'],
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
title: '半光乳胶漆',
|
|
143
|
+
description: '轻微光泽的饰面,对湿气和污渍的抵抗力更强。无痕修补相对困难。',
|
|
144
|
+
icon: 'mdi:brightness-6',
|
|
145
|
+
points: ['略高的覆盖率', '稀释:加5%的水', '最适合:厨房和浴室'],
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
title: '搪瓷漆',
|
|
149
|
+
description: '坚硬耐用的饰面,适用于木制品、暖气片和高流量区域。需要溶剂或专用稀释剂。',
|
|
150
|
+
icon: 'mdi:spray',
|
|
151
|
+
points: ['坚硬耐用的饰面', '稀释:加10%到15%的溶剂', '最适合:门、窗框和家具'],
|
|
152
|
+
},
|
|
153
|
+
],
|
|
154
|
+
columns: 3,
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
type: 'diagnostic',
|
|
158
|
+
variant: 'info',
|
|
159
|
+
title: '实用的表面积测量',
|
|
160
|
+
icon: 'mdi:ruler-square',
|
|
161
|
+
badge: '提示',
|
|
162
|
+
html: '<p style="margin:0">将每面墙的宽度乘以高度。快速估算时,将所有宽度相加再乘以房间高度。然后每扇标准门扣除约2平方米,每扇窗扣除约1.5平方米。</p>',
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
type: 'title',
|
|
166
|
+
text: '稀释和施工规则',
|
|
167
|
+
level: 3,
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
type: 'paragraph',
|
|
171
|
+
html: '新表面或修补过的表面第一遍漆总是需要轻微稀释,以便油漆渗透和附着。面漆应不稀释或使用制造商指示的最低稀释量施工。<strong>过度稀释会破坏颜料</strong>,留下需要额外一遍的透明斑块。',
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
type: 'summary',
|
|
175
|
+
title: '为什么购买前要计算',
|
|
176
|
+
items: [
|
|
177
|
+
'避免油漆在罐中干涸变成废弃物。',
|
|
178
|
+
'防止不同时期购买的批次之间出现色差。',
|
|
179
|
+
'精确预算:了解包含底漆和工具的实际成本。',
|
|
180
|
+
'一次性规划好工作,不因补充材料而中断。',
|
|
181
|
+
],
|
|
182
|
+
},
|
|
183
|
+
],
|
|
184
|
+
ui: {
|
|
185
|
+
sectionTitle: '表面与油漆',
|
|
186
|
+
labelMetric: '公制',
|
|
187
|
+
labelImperial: '英制',
|
|
188
|
+
labelArea: '待涂刷总面积',
|
|
189
|
+
labelAreaFt: '待涂刷总面积',
|
|
190
|
+
unitArea: 'm2',
|
|
191
|
+
unitAreaFt: 'ft2',
|
|
192
|
+
labelYield: '油漆覆盖率',
|
|
193
|
+
labelYieldFt: '油漆覆盖率',
|
|
194
|
+
unitYield: 'm2/L',
|
|
195
|
+
unitYieldFt: 'ft2/gal',
|
|
196
|
+
labelType: '选择油漆类型',
|
|
197
|
+
btnPlasticMatTitle: '哑光乳胶漆',
|
|
198
|
+
btnPlasticMatSub: '哑光 · 加水5%',
|
|
199
|
+
btnPlasticSatinTitle: '半光乳胶漆',
|
|
200
|
+
btnPlasticSatinSub: '半光 · 加水5%',
|
|
201
|
+
btnEnamelTitle: '搪瓷漆',
|
|
202
|
+
btnEnamelSub: '搪瓷 · 加溶剂10%',
|
|
203
|
+
labelCoats: '涂刷遍数',
|
|
204
|
+
unitCoats: '遍',
|
|
205
|
+
labelPrice: '每升价格',
|
|
206
|
+
labelPriceFt: '每加仑价格',
|
|
207
|
+
unitPrice: '/升',
|
|
208
|
+
unitPriceGal: '/gal',
|
|
209
|
+
labelDilution: '稀释百分比',
|
|
210
|
+
unitDilution: '%',
|
|
211
|
+
resultBadge: '油漆计算',
|
|
212
|
+
labelPaint: '油漆升数',
|
|
213
|
+
labelPaintGal: '油漆加仑数',
|
|
214
|
+
labelCost: '总成本',
|
|
215
|
+
labelWater: '稀释液',
|
|
216
|
+
labelWaterGal: '稀释液',
|
|
217
|
+
labelTotalVolume: '总混合量',
|
|
218
|
+
labelTotalVolumeGal: '总混合量',
|
|
219
|
+
labelCurrency: '货币',
|
|
220
|
+
btnCurrUSD: '$',
|
|
221
|
+
btnCurrEUR: '€',
|
|
222
|
+
btnCurrGBP: '£',
|
|
223
|
+
btnCurrJPY: '¥',
|
|
224
|
+
currencySign: '¥',
|
|
225
|
+
},
|
|
226
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ToolDefinition } from '../../types';
|
|
2
|
+
import { wallPaintingCalculator } from './entry';
|
|
3
|
+
export * from './entry';
|
|
4
|
+
export const WALL_PAINTING_CALCULATOR_TOOL: ToolDefinition = {
|
|
5
|
+
entry: wallPaintingCalculator,
|
|
6
|
+
Component: () => import('./component.astro'),
|
|
7
|
+
SEOComponent: () => import('./seo.astro'),
|
|
8
|
+
BibliographyComponent: () => import('./bibliography.astro'),
|
|
9
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export interface WallPaintingInput {
|
|
2
|
+
area: number;
|
|
3
|
+
yieldM2PerLitre: number;
|
|
4
|
+
coats: number;
|
|
5
|
+
pricePerLitre: number;
|
|
6
|
+
dilutionPercent: number;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export interface WallPaintingResult {
|
|
10
|
+
paintLitres: number;
|
|
11
|
+
waterLitres: number;
|
|
12
|
+
totalCost: number;
|
|
13
|
+
totalVolume: number;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export function calculateWallPainting(input: WallPaintingInput): WallPaintingResult {
|
|
17
|
+
const { area, yieldM2PerLitre, coats, pricePerLitre, dilutionPercent } = input;
|
|
18
|
+
const paintLitres = yieldM2PerLitre > 0 ? (area * coats) / yieldM2PerLitre : 0;
|
|
19
|
+
const waterLitres = paintLitres * (dilutionPercent / 100);
|
|
20
|
+
const totalVolume = paintLitres + waterLitres;
|
|
21
|
+
const totalCost = paintLitres * pricePerLitre;
|
|
22
|
+
return { paintLitres, waterLitres, totalCost, totalVolume };
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export function fmt2(n: number): string {
|
|
26
|
+
return n.toFixed(2);
|
|
27
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
import { SEORenderer } from '@jjlmoya/utils-shared';
|
|
3
|
+
import { wallPaintingCalculator } 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 wallPaintingCalculator.i18n[locale]?.();
|
|
12
|
+
if (!content) return null;
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
{content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export interface WallPaintingCalculatorUI extends Record<string, string> {
|
|
2
|
+
sectionTitle: string;
|
|
3
|
+
labelMetric: string;
|
|
4
|
+
labelImperial: string;
|
|
5
|
+
labelArea: string;
|
|
6
|
+
labelAreaFt: string;
|
|
7
|
+
unitArea: string;
|
|
8
|
+
unitAreaFt: string;
|
|
9
|
+
labelYield: string;
|
|
10
|
+
labelYieldFt: string;
|
|
11
|
+
unitYield: string;
|
|
12
|
+
unitYieldFt: string;
|
|
13
|
+
labelType: string;
|
|
14
|
+
btnPlasticMatTitle: string;
|
|
15
|
+
btnPlasticMatSub: string;
|
|
16
|
+
btnPlasticSatinTitle: string;
|
|
17
|
+
btnPlasticSatinSub: string;
|
|
18
|
+
btnEnamelTitle: string;
|
|
19
|
+
btnEnamelSub: string;
|
|
20
|
+
labelCoats: string;
|
|
21
|
+
unitCoats: string;
|
|
22
|
+
labelPrice: string;
|
|
23
|
+
labelPriceFt: string;
|
|
24
|
+
unitPrice: string;
|
|
25
|
+
unitPriceGal: string;
|
|
26
|
+
labelDilution: string;
|
|
27
|
+
unitDilution: string;
|
|
28
|
+
resultBadge: string;
|
|
29
|
+
labelPaint: string;
|
|
30
|
+
labelPaintGal: string;
|
|
31
|
+
labelCost: string;
|
|
32
|
+
labelWater: string;
|
|
33
|
+
labelWaterGal: string;
|
|
34
|
+
labelTotalVolume: string;
|
|
35
|
+
labelTotalVolumeGal: string;
|
|
36
|
+
labelCurrency: string;
|
|
37
|
+
btnCurrUSD: string;
|
|
38
|
+
btnCurrEUR: string;
|
|
39
|
+
btnCurrGBP: string;
|
|
40
|
+
btnCurrJPY: string;
|
|
41
|
+
currencySign: string;
|
|
42
|
+
}
|