@jjlmoya/utils-diy 1.1.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 +60 -0
- package/src/category/i18n/en.ts +110 -0
- package/src/category/i18n/es.ts +110 -0
- package/src/category/i18n/fr.ts +101 -0
- package/src/category/index.ts +25 -0
- package/src/category/seo.astro +15 -0
- package/src/components/PreviewNavSidebar.astro +116 -0
- package/src/components/PreviewToolbar.astro +143 -0
- package/src/data.ts +11 -0
- package/src/env.d.ts +5 -0
- package/src/index.ts +57 -0
- package/src/layouts/PreviewLayout.astro +117 -0
- package/src/pages/[locale]/[slug].astro +146 -0
- package/src/pages/[locale].astro +251 -0
- package/src/pages/index.astro +4 -0
- package/src/tests/faq_count.test.ts +19 -0
- package/src/tests/locale_completeness.test.ts +42 -0
- package/src/tests/mocks/astro_mock.js +2 -0
- package/src/tests/no_h1_in_components.test.ts +48 -0
- package/src/tests/schemas_fulfillment.test.ts +23 -0
- package/src/tests/seo_length.test.ts +22 -0
- package/src/tests/title_quality.test.ts +55 -0
- package/src/tests/tool_validation.test.ts +17 -0
- package/src/tool/balusterCalculator/bibliography.astro +14 -0
- package/src/tool/balusterCalculator/component.astro +605 -0
- package/src/tool/balusterCalculator/i18n/en.ts +264 -0
- package/src/tool/balusterCalculator/i18n/es.ts +264 -0
- package/src/tool/balusterCalculator/i18n/fr.ts +264 -0
- package/src/tool/balusterCalculator/index.ts +33 -0
- package/src/tool/balusterCalculator/seo.astro +15 -0
- package/src/tool/balusterCalculator/ui.ts +15 -0
- package/src/tool/clayCalculator/bibliography.astro +14 -0
- package/src/tool/clayCalculator/component.astro +731 -0
- package/src/tool/clayCalculator/i18n/en.ts +183 -0
- package/src/tool/clayCalculator/i18n/es.ts +183 -0
- package/src/tool/clayCalculator/i18n/fr.ts +183 -0
- package/src/tool/clayCalculator/index.ts +33 -0
- package/src/tool/clayCalculator/seo.astro +15 -0
- package/src/tool/clayCalculator/ui.ts +19 -0
- package/src/tool/concreteCalculator/bibliography.astro +13 -0
- package/src/tool/concreteCalculator/component.astro +1089 -0
- package/src/tool/concreteCalculator/i18n/en.ts +201 -0
- package/src/tool/concreteCalculator/i18n/es.ts +201 -0
- package/src/tool/concreteCalculator/i18n/fr.ts +201 -0
- package/src/tool/concreteCalculator/index.ts +28 -0
- package/src/tool/concreteCalculator/seo.astro +14 -0
- package/src/tool/concreteCalculator/ui.ts +35 -0
- package/src/tool/cutOptimizer/bibliography.astro +13 -0
- package/src/tool/cutOptimizer/component.astro +825 -0
- package/src/tool/cutOptimizer/i18n/en.ts +178 -0
- package/src/tool/cutOptimizer/i18n/es.ts +178 -0
- package/src/tool/cutOptimizer/i18n/fr.ts +178 -0
- package/src/tool/cutOptimizer/index.ts +28 -0
- package/src/tool/cutOptimizer/optimizer.ts +199 -0
- package/src/tool/cutOptimizer/seo.astro +14 -0
- package/src/tool/cutOptimizer/ui.ts +25 -0
- package/src/tool/drillCalculator/bibliography.astro +13 -0
- package/src/tool/drillCalculator/component.astro +1210 -0
- package/src/tool/drillCalculator/engine.ts +63 -0
- package/src/tool/drillCalculator/i18n/en.ts +137 -0
- package/src/tool/drillCalculator/i18n/es.ts +137 -0
- package/src/tool/drillCalculator/i18n/fr.ts +137 -0
- package/src/tool/drillCalculator/index.ts +28 -0
- package/src/tool/drillCalculator/seo.astro +14 -0
- package/src/tool/drillCalculator/ui.ts +41 -0
- package/src/tool/drillSharpener/bibliography.astro +13 -0
- package/src/tool/drillSharpener/component.astro +712 -0
- package/src/tool/drillSharpener/engine.ts +42 -0
- package/src/tool/drillSharpener/i18n/en.ts +121 -0
- package/src/tool/drillSharpener/i18n/es.ts +121 -0
- package/src/tool/drillSharpener/i18n/fr.ts +121 -0
- package/src/tool/drillSharpener/index.ts +31 -0
- package/src/tool/drillSharpener/seo.astro +14 -0
- package/src/tool/drillSharpener/ui.ts +53 -0
- package/src/tool/epoxyCalculator/bibliography.astro +14 -0
- package/src/tool/epoxyCalculator/component.astro +888 -0
- package/src/tool/epoxyCalculator/i18n/en.ts +195 -0
- package/src/tool/epoxyCalculator/i18n/es.ts +195 -0
- package/src/tool/epoxyCalculator/i18n/fr.ts +195 -0
- package/src/tool/epoxyCalculator/index.ts +33 -0
- package/src/tool/epoxyCalculator/seo.astro +15 -0
- package/src/tool/epoxyCalculator/ui.ts +22 -0
- package/src/tool/furnitureFit/bibliography.astro +13 -0
- package/src/tool/furnitureFit/component.astro +552 -0
- package/src/tool/furnitureFit/engine.ts +51 -0
- package/src/tool/furnitureFit/i18n/en.ts +152 -0
- package/src/tool/furnitureFit/i18n/es.ts +152 -0
- package/src/tool/furnitureFit/i18n/fr.ts +152 -0
- package/src/tool/furnitureFit/index.ts +28 -0
- package/src/tool/furnitureFit/seo.astro +14 -0
- package/src/tool/furnitureFit/ui.ts +21 -0
- package/src/tool/mortarCalculator/bibliography.astro +13 -0
- package/src/tool/mortarCalculator/component.astro +1139 -0
- package/src/tool/mortarCalculator/i18n/en.ts +219 -0
- package/src/tool/mortarCalculator/i18n/es.ts +205 -0
- package/src/tool/mortarCalculator/i18n/fr.ts +220 -0
- package/src/tool/mortarCalculator/index.ts +24 -0
- package/src/tool/mortarCalculator/seo.astro +14 -0
- package/src/tool/mortarCalculator/ui.ts +37 -0
- package/src/tool/passepartoutCalculator/bibliography.astro +13 -0
- package/src/tool/passepartoutCalculator/component.astro +741 -0
- package/src/tool/passepartoutCalculator/i18n/en.ts +178 -0
- package/src/tool/passepartoutCalculator/i18n/es.ts +178 -0
- package/src/tool/passepartoutCalculator/i18n/fr.ts +178 -0
- package/src/tool/passepartoutCalculator/index.ts +28 -0
- package/src/tool/passepartoutCalculator/seo.astro +14 -0
- package/src/tool/passepartoutCalculator/ui.ts +17 -0
- package/src/tool/stairCalculator/bibliography.astro +52 -0
- package/src/tool/stairCalculator/component.astro +766 -0
- package/src/tool/stairCalculator/engine.ts +128 -0
- package/src/tool/stairCalculator/i18n/en.ts +149 -0
- package/src/tool/stairCalculator/i18n/es.ts +149 -0
- package/src/tool/stairCalculator/i18n/fr.ts +149 -0
- package/src/tool/stairCalculator/index.ts +31 -0
- package/src/tool/stairCalculator/seo.astro +211 -0
- package/src/tool/stairCalculator/ui.ts +109 -0
- package/src/tool/thermalExpansionCalculator/bibliography.astro +13 -0
- package/src/tool/thermalExpansionCalculator/component.astro +771 -0
- package/src/tool/thermalExpansionCalculator/engine.ts +23 -0
- package/src/tool/thermalExpansionCalculator/i18n/en.ts +174 -0
- package/src/tool/thermalExpansionCalculator/i18n/es.ts +174 -0
- package/src/tool/thermalExpansionCalculator/i18n/fr.ts +174 -0
- package/src/tool/thermalExpansionCalculator/index.ts +28 -0
- package/src/tool/thermalExpansionCalculator/seo.astro +14 -0
- package/src/tool/thermalExpansionCalculator/ui.ts +41 -0
- package/src/tool/voltageDropCalculator/bibliography.astro +13 -0
- package/src/tool/voltageDropCalculator/component.astro +1022 -0
- package/src/tool/voltageDropCalculator/i18n/en.ts +155 -0
- package/src/tool/voltageDropCalculator/i18n/es.ts +155 -0
- package/src/tool/voltageDropCalculator/i18n/fr.ts +148 -0
- package/src/tool/voltageDropCalculator/index.ts +28 -0
- package/src/tool/voltageDropCalculator/seo.astro +14 -0
- package/src/tool/voltageDropCalculator/ui.ts +22 -0
- package/src/tools.ts +16 -0
- package/src/types.ts +72 -0
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { ConcreteCalculatorUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const slug = 'concrete-mortar-calculator';
|
|
6
|
+
const title = 'Concrete and Mortar Calculator: Bags of Cement per Cubic Metre';
|
|
7
|
+
const description =
|
|
8
|
+
'Calculate exactly how many 25kg cement bags, sand shovels and litres of water you need per m³. Mix ratios for H200 concrete, M40 masonry mortar and M80 floor screeds.';
|
|
9
|
+
|
|
10
|
+
const faqData = [
|
|
11
|
+
{
|
|
12
|
+
question: 'How many 25kg bags of cement are needed per cubic metre of concrete?',
|
|
13
|
+
answer:
|
|
14
|
+
'For standard H-200 structural concrete, you need approximately 14 bags of 25kg (350kg total) per cubic metre of compacted mix. Weaker mixes like M-40 masonry mortar require around 11 bags per m³.',
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
question: 'What is the difference between concrete and mortar?',
|
|
18
|
+
answer:
|
|
19
|
+
'Concrete contains coarse aggregate (gravel) in addition to cement and sand, making it structurally stronger for load-bearing applications like foundations. Mortar uses only fine sand and is used for laying bricks, pointing, and rendering surfaces.',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
question: 'How many shovels of sand per cubic metre?',
|
|
23
|
+
answer:
|
|
24
|
+
'For H-200 concrete, approximately 180 shovels of sand plus 240 shovels of gravel per m³ are needed. For M-40 masonry mortar, around 400 shovels of sand (no gravel). A standard shovel holds roughly 3-4 litres of material.',
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
question: 'Can I mix concrete by hand without a cement mixer?',
|
|
28
|
+
answer:
|
|
29
|
+
'Yes, but it requires significant physical effort and becomes impractical above 0.5 m³. Mix on a clean, watertight surface. Add water sparingly, as excess water dramatically weakens the final strength.',
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
question: 'Why does concrete crack as it dries?',
|
|
33
|
+
answer:
|
|
34
|
+
'Cracking is usually caused by rapid moisture loss during curing or excess water in the mix. Keep the concrete damp for several days after pouring by covering it with wet hessian or plastic sheeting.',
|
|
35
|
+
},
|
|
36
|
+
];
|
|
37
|
+
|
|
38
|
+
const howToData = [
|
|
39
|
+
{
|
|
40
|
+
name: 'Choose the Mix Type',
|
|
41
|
+
text: 'Select whether you need structural concrete for foundations or masonry mortar for walls.',
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
name: 'Enter the Volume in m³',
|
|
45
|
+
text: 'Input the total volume or use the dimension helper: multiply length × width × thickness.',
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
name: 'Read the Quantities',
|
|
49
|
+
text: 'Check how many cement bags, sand shovels and litres of water you need to purchase.',
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
name: 'Follow the Proportion Guide',
|
|
53
|
+
text: 'Use the visual proportion bar to prepare a correctly balanced mix every time.',
|
|
54
|
+
},
|
|
55
|
+
];
|
|
56
|
+
|
|
57
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
58
|
+
'@context': 'https://schema.org',
|
|
59
|
+
'@type': 'FAQPage',
|
|
60
|
+
mainEntity: faqData.map((item) => ({
|
|
61
|
+
'@type': 'Question',
|
|
62
|
+
name: item.question,
|
|
63
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
64
|
+
})),
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
const howToSchema: WithContext<HowToThing> = {
|
|
68
|
+
'@context': 'https://schema.org',
|
|
69
|
+
'@type': 'HowTo',
|
|
70
|
+
name: title,
|
|
71
|
+
description,
|
|
72
|
+
step: howToData.map((step, i) => ({
|
|
73
|
+
'@type': 'HowToStep',
|
|
74
|
+
position: i + 1,
|
|
75
|
+
name: step.name,
|
|
76
|
+
text: step.text,
|
|
77
|
+
})),
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
81
|
+
'@context': 'https://schema.org',
|
|
82
|
+
'@type': 'SoftwareApplication',
|
|
83
|
+
name: title,
|
|
84
|
+
description,
|
|
85
|
+
applicationCategory: 'UtilityApplication',
|
|
86
|
+
operatingSystem: 'All',
|
|
87
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
88
|
+
inLanguage: 'en',
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
export const content: ToolLocaleContent<ConcreteCalculatorUI> = {
|
|
92
|
+
slug,
|
|
93
|
+
title,
|
|
94
|
+
description,
|
|
95
|
+
faqTitle: 'Frequently Asked Questions',
|
|
96
|
+
faq: faqData,
|
|
97
|
+
bibliographyTitle: 'Technical References',
|
|
98
|
+
bibliography: [
|
|
99
|
+
{
|
|
100
|
+
name: 'Concrete Mix Proportioning Standards (ASTM C94)',
|
|
101
|
+
url: 'https://store.astm.org/astm-bos-04.02.html',
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
name: 'BS EN 197: Cement Composition and Conformity Criteria',
|
|
105
|
+
url: 'https://www.bsigroup.com/en-GB/standards/',
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
name: 'The Concrete Centre: Mix Design Guide',
|
|
109
|
+
url: 'https://www.concretecentre.com/',
|
|
110
|
+
},
|
|
111
|
+
],
|
|
112
|
+
howTo: howToData,
|
|
113
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
114
|
+
seo: [
|
|
115
|
+
{
|
|
116
|
+
type: 'title',
|
|
117
|
+
text: 'The Science of Concrete and Mortar Mix Ratios',
|
|
118
|
+
level: 2,
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
type: 'paragraph',
|
|
122
|
+
html: 'Whether you are laying a garden slab, building a block wall, or pouring a floor screed, getting the <strong>concrete mix ratio</strong> right is the single most important factor for structural integrity. This calculator converts professional engineering dosages — expressed in kg per cubic metre — into the practical units you actually work with on site: <strong>25kg bags, shovelfuls, and litres</strong>.',
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
type: 'card',
|
|
126
|
+
icon: 'mdi:water-alert',
|
|
127
|
+
title: 'Why Water Ratio Determines Concrete Strength',
|
|
128
|
+
html: '<p>The water-to-cement ratio (w/c ratio) is the key variable controlling concrete strength. Every extra litre of water you add beyond the minimum makes the mix more workable — but permanently weakens the cured concrete by leaving voids as it evaporates.</p><p>The correct consistency resembles a <strong>stiff, cohesive paste</strong>, not a pourable liquid. If your mix slumps off a trowel too easily, you have added too much water.</p>',
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
type: 'title',
|
|
132
|
+
text: 'Standard Mix Proportions by Application',
|
|
133
|
+
level: 3,
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
type: 'paragraph',
|
|
137
|
+
html: 'The three mixes in this calculator cover the most common DIY and trade applications. <strong>H-200 concrete</strong> (1:2.5:3 ratio) is suitable for foundations, slabs, and structural elements. <strong>M-40 masonry mortar</strong> (1:4 ratio) is ideal for laying bricks and blocks. <strong>M-80 screed mortar</strong> (1:3 ratio) gives a strong, dense finish for floor levelling and external rendering. Always choose the mix appropriate to the load the structure will bear.',
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
type: 'title',
|
|
141
|
+
text: 'Calculating Cubic Metres for Your Project',
|
|
142
|
+
level: 3,
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
type: 'card',
|
|
146
|
+
icon: 'mdi:calculator-variant',
|
|
147
|
+
title: 'Worked Example for a Garden Slab',
|
|
148
|
+
html: '<p>For a garden patio 4m long, 3m wide and 15cm deep: <strong>4 × 3 × 0.15 = 1.80 m³</strong>. Enter these dimensions directly into the calculator and it handles the rest automatically.</p><p>Always order <strong>10% more material</strong> than the calculated figure to account for spillage, uneven sub-base and the fact that wet aggregates contain less dry material by volume than you expect.</p>',
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
type: 'title',
|
|
152
|
+
text: 'Mixing Order and the Bag Dosage System',
|
|
153
|
+
level: 3,
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
type: 'paragraph',
|
|
157
|
+
html: 'In professional construction, mixes are specified as <strong>"300kg concrete"</strong>, meaning 300kg of cement per finished cubic metre. To achieve this with a mixer: add water first, then coarse aggregate (gravel and sand), and finally add cement gradually to prevent it balling on the drum walls. This sequence ensures even distribution throughout the mix.',
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
type: 'card',
|
|
161
|
+
icon: 'mdi:package-variant-closed',
|
|
162
|
+
title: 'Always Buy 10% Extra to Cover Wastage',
|
|
163
|
+
html: '<p>Material waste on a concrete job is not optional — it is unavoidable. Sub-base irregularities, form overfill, mixer residue and the compaction factor all consume material beyond the theoretical volume. A <strong>10% surplus</strong> prevents the costly and time-critical problem of running short mid-pour with no way to restart the job.</p>',
|
|
164
|
+
},
|
|
165
|
+
],
|
|
166
|
+
ui: {
|
|
167
|
+
mixH200Label: 'Standard Concrete',
|
|
168
|
+
mixH200Hint: 'For foundations and slabs',
|
|
169
|
+
mixM40Label: 'Masonry Mortar',
|
|
170
|
+
mixM40Hint: 'For walls and blockwork',
|
|
171
|
+
mixM80Label: 'Floor Screed',
|
|
172
|
+
mixM80Hint: 'For floors and renderings',
|
|
173
|
+
modeDimsLabel: 'By Dimensions',
|
|
174
|
+
modeDirectLabel: 'Direct m³',
|
|
175
|
+
labelLength: 'Length',
|
|
176
|
+
labelWidth: 'Width',
|
|
177
|
+
labelThickness: 'Depth',
|
|
178
|
+
labelVolume: 'Total Volume (m³)',
|
|
179
|
+
binderCementLabel: 'Cement',
|
|
180
|
+
binderLimeLabel: 'Lime',
|
|
181
|
+
summaryLabel: 'Total to fill:',
|
|
182
|
+
resUnitSacks: 'Bags (25kg)',
|
|
183
|
+
resUnitShovels: 'Shovels',
|
|
184
|
+
resUnitLitres: 'Litres',
|
|
185
|
+
resLabelCement: 'Portland Cement',
|
|
186
|
+
resLabelLime: 'Hydraulic Lime',
|
|
187
|
+
resLabelSand: 'Sand / Aggregate',
|
|
188
|
+
resLabelWater: 'Clean Water',
|
|
189
|
+
proportionsTitle: 'Proportions for Selected Mix',
|
|
190
|
+
propLabelSand: 'Sand',
|
|
191
|
+
propLabelGravel: 'Gravel',
|
|
192
|
+
adviceH200: 'Ideal for columns, slabs and load-bearing structures.',
|
|
193
|
+
adviceM40: 'Perfect for laying brick or block walls.',
|
|
194
|
+
adviceM80: 'Use this for highly resistant floor screeds.',
|
|
195
|
+
adviceLimeH200: 'Lime concrete is more flexible but takes longer to set.',
|
|
196
|
+
priceTotalLabel: 'Estimated Budget',
|
|
197
|
+
priceSackLabel: 'Bag',
|
|
198
|
+
priceSandLabel: 'Sand (m³)',
|
|
199
|
+
priceDisclaimer: 'Indicative market prices. Adjust to your local supplier.',
|
|
200
|
+
},
|
|
201
|
+
};
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { ConcreteCalculatorUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const slug = 'calculadora-hormigon-mortero';
|
|
6
|
+
const title = 'Calculadora de Hormigón y Mortero: Cantidades Exactas de Cemento, Arena y Agua';
|
|
7
|
+
const description =
|
|
8
|
+
'Calcula cuántos sacos de cemento, paladas de arena y litros de agua necesitas por m³. Para cimientos, soleras, muros y recrecidos. Guía de dosificación técnica.';
|
|
9
|
+
|
|
10
|
+
const faqData = [
|
|
11
|
+
{
|
|
12
|
+
question: '¿Cuántos sacos de cemento de 25kg entran en un metro cúbico?',
|
|
13
|
+
answer:
|
|
14
|
+
'Para un hormigón estándar (resistencia H-200), se necesitan aproximadamente 14 sacos de 25kg (350kg) para fabricar un metro cúbico de mezcla compactada.',
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
question: '¿Qué es más fuerte, el hormigón o el mortero?',
|
|
18
|
+
answer:
|
|
19
|
+
'El hormigón (con grava) es más fuerte estructuralmente para soportar grandes cargas. El mortero (solo arena) es ideal para unir piezas o enfoscar superficies.',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
question: '¿Cuántas paladas son un metro cúbico?',
|
|
23
|
+
answer:
|
|
24
|
+
'Depende del tamaño de la palada, pero por lo general se calculan 180-200 paladas de arena por m³. Nuestra calculadora traduce los m³ a paladas sugeridas.',
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
question: '¿Puedo hacer la mezcla a mano sin hormigonera?',
|
|
28
|
+
answer:
|
|
29
|
+
'Sí, aunque requiere mucho más esfuerzo físico. Lo ideal es hacerlo sobre una superficie limpia y estanca (plancha metálica o artesa) para no perder agua.',
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
question: '¿Por qué el hormigón se agrieta al secar?',
|
|
33
|
+
answer:
|
|
34
|
+
'Suele ser por falta de humedad durante el fraguado (pérdida rápida de agua) o exceso de agua en la mezcla. Se recomienda regar el hormigón los días posteriores.',
|
|
35
|
+
},
|
|
36
|
+
];
|
|
37
|
+
|
|
38
|
+
const howToData = [
|
|
39
|
+
{
|
|
40
|
+
name: 'Elige el Tipo de Mezcla',
|
|
41
|
+
text: 'Selecciona si vas a hacer hormigón para cimientos o mortero para muros.',
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
name: 'Indica el Volumen en m³',
|
|
45
|
+
text: 'Introduce el volumen total. Multiplica largo x ancho x espesor.',
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
name: 'Consulta las Cantidades',
|
|
49
|
+
text: 'Mira cuántos sacos, paladas y litros necesitas comprar.',
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
name: 'Aplica las Proporciones',
|
|
53
|
+
text: 'Sigue la guía visual de cemento, arena y grava para una mezcla perfecta.',
|
|
54
|
+
},
|
|
55
|
+
];
|
|
56
|
+
|
|
57
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
58
|
+
'@context': 'https://schema.org',
|
|
59
|
+
'@type': 'FAQPage',
|
|
60
|
+
mainEntity: faqData.map((item) => ({
|
|
61
|
+
'@type': 'Question',
|
|
62
|
+
name: item.question,
|
|
63
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
64
|
+
})),
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
const howToSchema: WithContext<HowToThing> = {
|
|
68
|
+
'@context': 'https://schema.org',
|
|
69
|
+
'@type': 'HowTo',
|
|
70
|
+
name: title,
|
|
71
|
+
description,
|
|
72
|
+
step: howToData.map((step, i) => ({
|
|
73
|
+
'@type': 'HowToStep',
|
|
74
|
+
position: i + 1,
|
|
75
|
+
name: step.name,
|
|
76
|
+
text: step.text,
|
|
77
|
+
})),
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
81
|
+
'@context': 'https://schema.org',
|
|
82
|
+
'@type': 'SoftwareApplication',
|
|
83
|
+
name: title,
|
|
84
|
+
description,
|
|
85
|
+
applicationCategory: 'UtilityApplication',
|
|
86
|
+
operatingSystem: 'All',
|
|
87
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
88
|
+
inLanguage: 'es',
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
export const content: ToolLocaleContent<ConcreteCalculatorUI> = {
|
|
92
|
+
slug,
|
|
93
|
+
title,
|
|
94
|
+
description,
|
|
95
|
+
faqTitle: 'Preguntas Frecuentes',
|
|
96
|
+
faq: faqData,
|
|
97
|
+
bibliographyTitle: 'Referencias Técnicas',
|
|
98
|
+
bibliography: [
|
|
99
|
+
{
|
|
100
|
+
name: 'Código Estructural (EHE-08): Normativa de Hormigón',
|
|
101
|
+
url: 'https://www.boe.es/buscar/doc.php?id=BOE-A-2021-12906',
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
name: 'Concrete Mix Proportioning Standards (ASTM)',
|
|
105
|
+
url: 'https://store.astm.org/astm-bos-04.02.html',
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
name: 'Guía de Dosificación de Morteros de Cemento',
|
|
109
|
+
url: 'https://es.wikipedia.org/wiki/Mortero_(construcci%C3%B3n)',
|
|
110
|
+
},
|
|
111
|
+
],
|
|
112
|
+
howTo: howToData,
|
|
113
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
114
|
+
seo: [
|
|
115
|
+
{
|
|
116
|
+
type: 'title',
|
|
117
|
+
text: 'Guía de Dosificación para Hormigón y Mortero',
|
|
118
|
+
level: 2,
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
type: 'paragraph',
|
|
122
|
+
html: 'Cuando te enfrentas a una reforma o construcción, una de las preguntas más recurrentes es <strong>¿cuántos sacos de cemento necesito para un metro cúbico de hormigón?</strong>. No se trata solo de mezclar ingredientes; la resistencia final de la estructura depende directamente de la precisión en las proporciones de cemento, arena, grava y agua. Nuestra calculadora traduce medidas industriales a unidades prácticas de obra: sacos de 25kg, paladas y litros.',
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
type: 'card',
|
|
126
|
+
icon: 'mdi:water-alert',
|
|
127
|
+
title: 'El Exceso de Agua Debilita el Hormigón',
|
|
128
|
+
html: '<p>Un error muy común es añadir demasiada agua para que el hormigón fluya mejor. El exceso de agua crea poros al evaporarse durante el fraguado, reduciendo drásticamente la resistencia final. La consistencia ideal debe ser como la de una <strong>pasta espesa, no líquida</strong>. Usa la mínima cantidad de agua posible.</p>',
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
type: 'title',
|
|
132
|
+
text: 'Proporciones Estándar según el Uso',
|
|
133
|
+
level: 3,
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
type: 'paragraph',
|
|
137
|
+
html: 'La <strong>dosificación del hormigón</strong> varía según el uso. Para un <strong>Hormigón H-200</strong> (cimientos y soleras) la proporción es 1 parte de cemento, 2.5 de arena y 3 de grava. Para el <strong>Mortero M-40</strong> (muros y tabiques) es 1 parte de cemento y 4 de arena. Para el <strong>Mortero M-80</strong> (recrecidos de suelo) es 1 parte de cemento y 3 de arena. El hormigón con grava soporta más carga; el mortero solo arena es ideal para unir y enfoscar.',
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
type: 'title',
|
|
141
|
+
text: 'Cómo Calcular los m³ que Necesitas',
|
|
142
|
+
level: 3,
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
type: 'card',
|
|
146
|
+
icon: 'mdi:calculator-variant',
|
|
147
|
+
title: 'Ejemplo de Cálculo para una Solera',
|
|
148
|
+
html: '<p>Para una solera de jardín de 4m de largo, 3m de ancho y 15cm de espesor: <strong>4 × 3 × 0.15 = 1.80 m³</strong>. Nuestra calculadora realiza esta operación automáticamente si introduces las dimensiones en la sección "Por Medidas".</p><p>Recuerda siempre <strong>comprar un 10% adicional</strong> para compensar pérdidas por derrame o variaciones en el terreno.</p>',
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
type: 'title',
|
|
152
|
+
text: 'Orden de Mezclado y Dosificación por Sacos',
|
|
153
|
+
level: 3,
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
type: 'paragraph',
|
|
157
|
+
html: 'En las obras se habla de <strong>"mezcla a 300 kilos"</strong>: 300kg de cemento por cada metro cúbico de hormigón terminado. Para un mezclado correcto en hormigonera: primero el agua, después grava y arena (para disgregar grumos), y por último el cemento añadido gradualmente.',
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
type: 'card',
|
|
161
|
+
icon: 'mdi:package-variant-closed',
|
|
162
|
+
title: 'La Regla del 10% para Evitar Quedarte Corto',
|
|
163
|
+
html: '<p>Compra siempre un <strong>10% más de material</strong> del calculado para compensar pérdidas por derrame, irregularidades en el terreno o variaciones en el volumen real de los áridos húmedos. Es mucho más barato que tener que hacer un segundo pedido con la obra parada.</p>',
|
|
164
|
+
},
|
|
165
|
+
],
|
|
166
|
+
ui: {
|
|
167
|
+
mixH200Label: 'Hormigón Estándar',
|
|
168
|
+
mixH200Hint: 'Ideal para cimientos y soleras',
|
|
169
|
+
mixM40Label: 'Mortero de Albañilería',
|
|
170
|
+
mixM40Hint: 'Para muros y tabiques',
|
|
171
|
+
mixM80Label: 'Recrecidos Fuertes',
|
|
172
|
+
mixM80Hint: 'Para suelos y revocos fuertes',
|
|
173
|
+
modeDimsLabel: 'Por Medidas',
|
|
174
|
+
modeDirectLabel: 'm³ Directos',
|
|
175
|
+
labelLength: 'Largo',
|
|
176
|
+
labelWidth: 'Ancho',
|
|
177
|
+
labelThickness: 'Grosor',
|
|
178
|
+
labelVolume: 'Volumen Total (m³)',
|
|
179
|
+
binderCementLabel: 'Cemento',
|
|
180
|
+
binderLimeLabel: 'Cal',
|
|
181
|
+
summaryLabel: 'Total a rellenar:',
|
|
182
|
+
resUnitSacks: 'Sacos (25kg)',
|
|
183
|
+
resUnitShovels: 'Paladas',
|
|
184
|
+
resUnitLitres: 'Litros',
|
|
185
|
+
resLabelCement: 'Cemento Portland',
|
|
186
|
+
resLabelLime: 'Cal Hidráulica',
|
|
187
|
+
resLabelSand: 'Arena / Áridos',
|
|
188
|
+
resLabelWater: 'Agua Potable',
|
|
189
|
+
proportionsTitle: 'Proporciones de la Mezcla Seleccionada',
|
|
190
|
+
propLabelSand: 'Arena',
|
|
191
|
+
propLabelGravel: 'Grava',
|
|
192
|
+
adviceH200: 'Ideal para pilares, soleras y estructuras que soportan carga.',
|
|
193
|
+
adviceM40: 'Perfecto para levantar muros de ladrillo o bloque.',
|
|
194
|
+
adviceM80: 'Usa esto para recrecidos de suelo muy resistentes.',
|
|
195
|
+
adviceLimeH200: 'El hormigón de cal es más flexible pero tarda más en fraguar.',
|
|
196
|
+
priceTotalLabel: 'Presupuesto Estimado',
|
|
197
|
+
priceSackLabel: 'Saco',
|
|
198
|
+
priceSandLabel: 'Arena (m³)',
|
|
199
|
+
priceDisclaimer: 'Precios de mercado orientativos. Ajusta según tu proveedor local.',
|
|
200
|
+
},
|
|
201
|
+
};
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { ConcreteCalculatorUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const slug = 'calculateur-beton-mortier';
|
|
6
|
+
const title = 'Calculateur Béton et Mortier: Sacs de Ciment et Dosages par m³';
|
|
7
|
+
const description =
|
|
8
|
+
'Calculez le nombre de sacs de ciment, pelletées de sable et litres d\'eau nécessaires par m³. Dosages pour béton H200, mortier M40 et chape M80. Guide de gâchage professionnel.';
|
|
9
|
+
|
|
10
|
+
const faqData = [
|
|
11
|
+
{
|
|
12
|
+
question: 'Combien de sacs de ciment de 25kg pour un mètre cube de béton?',
|
|
13
|
+
answer:
|
|
14
|
+
'Pour un béton structurel standard (résistance H-200), il faut environ 14 sacs de 25kg (350kg au total) par mètre cube de mélange compacté. Un mortier de maçonnerie M-40 nécessite environ 11 sacs par m³.',
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
question: 'Quelle est la différence entre le béton et le mortier?',
|
|
18
|
+
answer:
|
|
19
|
+
'Le béton contient des granulats grossiers (gravier) en plus du ciment et du sable, ce qui le rend plus résistant pour les structures portantes (fondations, dalles). Le mortier utilise uniquement du sable fin et sert à lier les briques, à jointoyer et à enduire les surfaces.',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
question: 'Combien de pelletées de sable pour un mètre cube?',
|
|
23
|
+
answer:
|
|
24
|
+
'Pour un béton H-200, il faut environ 180 pelletées de sable et 240 de gravier par m³. Pour un mortier M-40, environ 400 pelletées de sable (sans gravier). Une pelletée standard représente environ 3 à 4 litres de matériau.',
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
question: 'Peut-on gâcher le béton à la main sans bétonnière?',
|
|
28
|
+
answer:
|
|
29
|
+
'Oui, mais c\'est très physique et peu pratique au-delà de 0,5 m³. Gâchez sur une surface propre et étanche. Ajoutez l\'eau en faible quantité : un excès d\'eau réduit drastiquement la résistance finale du béton.',
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
question: 'Pourquoi le béton se fissure-t-il en séchant?',
|
|
33
|
+
answer:
|
|
34
|
+
'Les fissures proviennent généralement d\'une perte d\'humidité trop rapide pendant la prise ou d\'un excès d\'eau dans le mélange. Maintenez le béton humide plusieurs jours après le coulage en le couvrant de toile de jute mouillée ou d\'un film plastique.',
|
|
35
|
+
},
|
|
36
|
+
];
|
|
37
|
+
|
|
38
|
+
const howToData = [
|
|
39
|
+
{
|
|
40
|
+
name: 'Choisir le type de mélange',
|
|
41
|
+
text: 'Sélectionnez si vous faites du béton de structure pour des fondations ou du mortier de maçonnerie pour des murs.',
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
name: 'Indiquer le volume en m³',
|
|
45
|
+
text: 'Saisissez le volume total ou utilisez la calculatrice de dimensions: longueur × largeur × épaisseur.',
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
name: 'Consulter les quantités',
|
|
49
|
+
text: 'Lisez le nombre de sacs de ciment, de pelletées de sable et de litres d\'eau à acheter.',
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
name: 'Suivre le guide des proportions',
|
|
53
|
+
text: 'Utilisez la barre de proportions visuelle pour préparer un mélange correctement dosé à chaque fois.',
|
|
54
|
+
},
|
|
55
|
+
];
|
|
56
|
+
|
|
57
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
58
|
+
'@context': 'https://schema.org',
|
|
59
|
+
'@type': 'FAQPage',
|
|
60
|
+
mainEntity: faqData.map((item) => ({
|
|
61
|
+
'@type': 'Question',
|
|
62
|
+
name: item.question,
|
|
63
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
64
|
+
})),
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
const howToSchema: WithContext<HowToThing> = {
|
|
68
|
+
'@context': 'https://schema.org',
|
|
69
|
+
'@type': 'HowTo',
|
|
70
|
+
name: title,
|
|
71
|
+
description,
|
|
72
|
+
step: howToData.map((step, i) => ({
|
|
73
|
+
'@type': 'HowToStep',
|
|
74
|
+
position: i + 1,
|
|
75
|
+
name: step.name,
|
|
76
|
+
text: step.text,
|
|
77
|
+
})),
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
81
|
+
'@context': 'https://schema.org',
|
|
82
|
+
'@type': 'SoftwareApplication',
|
|
83
|
+
name: title,
|
|
84
|
+
description,
|
|
85
|
+
applicationCategory: 'UtilityApplication',
|
|
86
|
+
operatingSystem: 'All',
|
|
87
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
88
|
+
inLanguage: 'fr',
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
export const content: ToolLocaleContent<ConcreteCalculatorUI> = {
|
|
92
|
+
slug,
|
|
93
|
+
title,
|
|
94
|
+
description,
|
|
95
|
+
faqTitle: 'Questions Fréquentes',
|
|
96
|
+
faq: faqData,
|
|
97
|
+
bibliographyTitle: 'Références Techniques',
|
|
98
|
+
bibliography: [
|
|
99
|
+
{
|
|
100
|
+
name: 'NF EN 206: Béton, spécification, performance, production et conformité',
|
|
101
|
+
url: 'https://www.afnor.org/',
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
name: 'DTU 26.1: Travaux d\'enduit de mortiers',
|
|
105
|
+
url: 'https://www.cstb.fr/',
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
name: 'Centre Technique du Bâtiment: Guide de formulation du béton',
|
|
109
|
+
url: 'https://www.cstb.fr/',
|
|
110
|
+
},
|
|
111
|
+
],
|
|
112
|
+
howTo: howToData,
|
|
113
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
114
|
+
seo: [
|
|
115
|
+
{
|
|
116
|
+
type: 'title',
|
|
117
|
+
text: 'Dosage Béton et Mortier: Guide Technique de Gâchage',
|
|
118
|
+
level: 2,
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
type: 'paragraph',
|
|
122
|
+
html: 'Que vous couliez une dalle de terrasse, montiez un mur de parpaings ou réalisiez une chape de sol, le <strong>dosage du béton</strong> est le facteur déterminant pour la résistance de l\'ouvrage. Ce calculateur convertit les dosages industriels exprimés en kg par m³ en unités pratiques de chantier: <strong>sacs de 25kg, pelletées et litres</strong>.',
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
type: 'card',
|
|
126
|
+
icon: 'mdi:water-alert',
|
|
127
|
+
title: "L'excès d'eau fragilise le béton",
|
|
128
|
+
html: "<p>Le rapport eau/ciment est la variable clé qui contrôle la résistance du béton. Chaque litre d'eau ajouté au-delà du minimum strict améliore la maniabilité mais affaiblit durablement le béton en créant des pores à l'évaporation.</p><p>La consistance idéale ressemble à une <strong>pâte ferme et cohésive</strong>, non liquide. Si votre mélange glisse facilement de la truelle, vous avez trop gâché.</p>",
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
type: 'title',
|
|
132
|
+
text: 'Proportions Standard selon l\'Usage',
|
|
133
|
+
level: 3,
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
type: 'paragraph',
|
|
137
|
+
html: 'Les trois mélanges de ce calculateur couvrent les usages courants. Le <strong>béton H-200</strong> (proportion 1:2,5:3) convient aux fondations, dalles et éléments structurels. Le <strong>mortier M-40</strong> (proportion 1:4) est idéal pour la maçonnerie de briques et parpaings. La <strong>chape M-80</strong> (proportion 1:3) donne une finition dense et résistante pour les sols et les enduits extérieurs. Toujours choisir le mélange adapté à la charge que l\'ouvrage devra supporter.',
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
type: 'title',
|
|
141
|
+
text: 'Calcul du Volume en m³',
|
|
142
|
+
level: 3,
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
type: 'card',
|
|
146
|
+
icon: 'mdi:calculator-variant',
|
|
147
|
+
title: 'Exemple de Calcul pour une Dalle de Terrasse',
|
|
148
|
+
html: "<p>Pour une terrasse de 4m de long, 3m de large et 15cm d'épaisseur: <strong>4 × 3 × 0,15 = 1,80 m³</strong>. Saisissez ces dimensions directement dans la calculatrice et elle gère le reste automatiquement.</p><p>Commandez toujours <strong>10% de matériau en plus</strong> pour absorber les pertes liées aux coulures, à l'irrégularité du fond de fouille et à la compaction.</p>",
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
type: 'title',
|
|
152
|
+
text: 'Ordre de Gâchage et Dosage au Sac',
|
|
153
|
+
level: 3,
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
type: 'paragraph',
|
|
157
|
+
html: 'En construction professionnelle, on parle de <strong>"béton à 300 kg"</strong>: 300kg de ciment par mètre cube de béton fini. Pour un gâchage optimal à la bétonnière: commencer par l\'eau, ajouter ensuite les granulats (gravier et sable) pour briser les grumeaux, puis incorporer le ciment progressivement. Cet ordre garantit une répartition homogène.',
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
type: 'card',
|
|
161
|
+
icon: 'mdi:package-variant-closed',
|
|
162
|
+
title: 'Toujours Commander 10% de Matériau en Plus',
|
|
163
|
+
html: "<p>Le gaspillage sur un chantier béton n'est pas une option, c'est une constante. Les irrégularités du fond de fouille, le résidu dans la bétonnière et le facteur de compaction consomment tous du matériau au-delà du volume théorique. Un <strong>surplus de 10%</strong> évite le problème coûteux de manquer de matériau en plein coulage, sans possibilité d'arrêt.</p>",
|
|
164
|
+
},
|
|
165
|
+
],
|
|
166
|
+
ui: {
|
|
167
|
+
mixH200Label: 'Béton Structurel',
|
|
168
|
+
mixH200Hint: 'Pour fondations et dalles',
|
|
169
|
+
mixM40Label: 'Mortier de Maçonnerie',
|
|
170
|
+
mixM40Hint: 'Pour murs et cloisons',
|
|
171
|
+
mixM80Label: 'Chape de Sol',
|
|
172
|
+
mixM80Hint: 'Pour sols et enduits forts',
|
|
173
|
+
modeDimsLabel: 'Par Dimensions',
|
|
174
|
+
modeDirectLabel: 'm³ Directs',
|
|
175
|
+
labelLength: 'Longueur',
|
|
176
|
+
labelWidth: 'Largeur',
|
|
177
|
+
labelThickness: 'Épaisseur',
|
|
178
|
+
labelVolume: 'Volume Total (m³)',
|
|
179
|
+
binderCementLabel: 'Ciment',
|
|
180
|
+
binderLimeLabel: 'Chaux',
|
|
181
|
+
summaryLabel: 'Total à remplir:',
|
|
182
|
+
resUnitSacks: 'Sacs (25kg)',
|
|
183
|
+
resUnitShovels: 'Pelletées',
|
|
184
|
+
resUnitLitres: 'Litres',
|
|
185
|
+
resLabelCement: 'Ciment Portland',
|
|
186
|
+
resLabelLime: 'Chaux Hydraulique',
|
|
187
|
+
resLabelSand: 'Sable / Granulats',
|
|
188
|
+
resLabelWater: 'Eau Potable',
|
|
189
|
+
proportionsTitle: 'Proportions du Mélange Sélectionné',
|
|
190
|
+
propLabelSand: 'Sable',
|
|
191
|
+
propLabelGravel: 'Gravier',
|
|
192
|
+
adviceH200: 'Idéal pour poteaux, dalles et structures portantes.',
|
|
193
|
+
adviceM40: 'Parfait pour monter des murs de briques ou de parpaings.',
|
|
194
|
+
adviceM80: 'Utilisez ceci pour des chapes de sol très résistantes.',
|
|
195
|
+
adviceLimeH200: 'Le béton de chaux est plus flexible mais prend plus de temps à durcir.',
|
|
196
|
+
priceTotalLabel: 'Budget Estimé',
|
|
197
|
+
priceSackLabel: 'Sac',
|
|
198
|
+
priceSandLabel: 'Sable (m³)',
|
|
199
|
+
priceDisclaimer: 'Prix indicatifs du marché. Ajustez selon votre fournisseur local.',
|
|
200
|
+
},
|
|
201
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import ConcreteCalculatorComponent from './component.astro';
|
|
2
|
+
import ConcreteCalculatorSEO from './seo.astro';
|
|
3
|
+
import ConcreteCalculatorBibliography from './bibliography.astro';
|
|
4
|
+
import type { DiyToolEntry, ToolDefinition } from '../../types';
|
|
5
|
+
import type { ConcreteCalculatorUI } from './ui';
|
|
6
|
+
|
|
7
|
+
export {
|
|
8
|
+
ConcreteCalculatorComponent,
|
|
9
|
+
ConcreteCalculatorSEO,
|
|
10
|
+
ConcreteCalculatorBibliography,
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
const es = async () => (await import('./i18n/es')).content;
|
|
14
|
+
const en = async () => (await import('./i18n/en')).content;
|
|
15
|
+
const fr = async () => (await import('./i18n/fr')).content;
|
|
16
|
+
|
|
17
|
+
export const concreteCalculator: DiyToolEntry<ConcreteCalculatorUI> = {
|
|
18
|
+
id: 'concrete-calculator',
|
|
19
|
+
icons: { bg: 'mdi:bucket-outline', fg: 'mdi:shovel' },
|
|
20
|
+
i18n: { es, en, fr },
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
export const CONCRETE_CALCULATOR_TOOL: ToolDefinition = {
|
|
24
|
+
entry: concreteCalculator,
|
|
25
|
+
Component: ConcreteCalculatorComponent,
|
|
26
|
+
SEOComponent: ConcreteCalculatorSEO,
|
|
27
|
+
BibliographyComponent: ConcreteCalculatorBibliography,
|
|
28
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
import { SEORenderer } from '@jjlmoya/utils-shared';
|
|
3
|
+
import { concreteCalculator } from './index';
|
|
4
|
+
import type { KnownLocale } from '../../types';
|
|
5
|
+
|
|
6
|
+
interface Props {
|
|
7
|
+
locale?: KnownLocale;
|
|
8
|
+
}
|
|
9
|
+
const { locale = 'es' } = Astro.props;
|
|
10
|
+
const content = await concreteCalculator.i18n[locale]?.();
|
|
11
|
+
if (!content) return null;
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
<SEORenderer content={{ locale: locale as string, sections: content.seo }} />
|