@jjlmoya/utils-home 1.29.0 → 1.31.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 +7 -1
- package/src/index.ts +2 -0
- package/src/tests/locale_completeness.test.ts +2 -2
- package/src/tests/tool_validation.test.ts +2 -2
- package/src/tool/applianceCostCalculator/appliance-cost-calculator.css +635 -0
- package/src/tool/applianceCostCalculator/bibliography.astro +14 -0
- package/src/tool/applianceCostCalculator/bibliography.ts +14 -0
- package/src/tool/applianceCostCalculator/component.astro +322 -0
- package/src/tool/applianceCostCalculator/entry.ts +29 -0
- package/src/tool/applianceCostCalculator/i18n/de.ts +229 -0
- package/src/tool/applianceCostCalculator/i18n/en.ts +229 -0
- package/src/tool/applianceCostCalculator/i18n/es.ts +229 -0
- package/src/tool/applianceCostCalculator/i18n/fr.ts +229 -0
- package/src/tool/applianceCostCalculator/i18n/id.ts +229 -0
- package/src/tool/applianceCostCalculator/i18n/it.ts +229 -0
- package/src/tool/applianceCostCalculator/i18n/ja.ts +229 -0
- package/src/tool/applianceCostCalculator/i18n/ko.ts +229 -0
- package/src/tool/applianceCostCalculator/i18n/nl.ts +229 -0
- package/src/tool/applianceCostCalculator/i18n/pl.ts +229 -0
- package/src/tool/applianceCostCalculator/i18n/pt.ts +229 -0
- package/src/tool/applianceCostCalculator/i18n/ru.ts +229 -0
- package/src/tool/applianceCostCalculator/i18n/sv.ts +229 -0
- package/src/tool/applianceCostCalculator/i18n/tr.ts +229 -0
- package/src/tool/applianceCostCalculator/i18n/zh.ts +229 -0
- package/src/tool/applianceCostCalculator/index.ts +9 -0
- package/src/tool/applianceCostCalculator/logic.ts +122 -0
- package/src/tool/applianceCostCalculator/seo.astro +15 -0
- package/src/tool/applianceCostCalculator/ui.ts +41 -0
- package/src/tool/tileLayoutCalculator/bibliography.astro +14 -0
- package/src/tool/tileLayoutCalculator/bibliography.ts +10 -0
- package/src/tool/tileLayoutCalculator/component.astro +415 -0
- package/src/tool/tileLayoutCalculator/entry.ts +29 -0
- package/src/tool/tileLayoutCalculator/i18n/de.ts +208 -0
- package/src/tool/tileLayoutCalculator/i18n/en.ts +208 -0
- package/src/tool/tileLayoutCalculator/i18n/es.ts +208 -0
- package/src/tool/tileLayoutCalculator/i18n/fr.ts +208 -0
- package/src/tool/tileLayoutCalculator/i18n/id.ts +208 -0
- package/src/tool/tileLayoutCalculator/i18n/it.ts +208 -0
- package/src/tool/tileLayoutCalculator/i18n/ja.ts +208 -0
- package/src/tool/tileLayoutCalculator/i18n/ko.ts +208 -0
- package/src/tool/tileLayoutCalculator/i18n/nl.ts +208 -0
- package/src/tool/tileLayoutCalculator/i18n/pl.ts +208 -0
- package/src/tool/tileLayoutCalculator/i18n/pt.ts +208 -0
- package/src/tool/tileLayoutCalculator/i18n/ru.ts +208 -0
- package/src/tool/tileLayoutCalculator/i18n/sv.ts +208 -0
- package/src/tool/tileLayoutCalculator/i18n/tr.ts +208 -0
- package/src/tool/tileLayoutCalculator/i18n/zh.ts +208 -0
- package/src/tool/tileLayoutCalculator/index.ts +9 -0
- package/src/tool/tileLayoutCalculator/logic.ts +55 -0
- package/src/tool/tileLayoutCalculator/seo.astro +15 -0
- package/src/tool/tileLayoutCalculator/tile-layout-calculator.css +404 -0
- package/src/tool/tileLayoutCalculator/ui.ts +37 -0
- package/src/tools.ts +4 -0
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { TileLayoutCalculatorUI } from '../ui';
|
|
4
|
+
import { bibliography } from '../bibliography';
|
|
5
|
+
|
|
6
|
+
const slug = 'kalkulator-tata-letak-ubin';
|
|
7
|
+
const title = 'Kalkulator Tata Letak dan Sisa Ubin';
|
|
8
|
+
const description =
|
|
9
|
+
'Rencanakan lantai ruangan Anda dengan presisi milimeter. Hitung jumlah ubin yang tepat, kotak yang diperlukan, total biaya, dan visualisasikan tata letak secara real-time dengan pratinjau kisi interaktif.';
|
|
10
|
+
|
|
11
|
+
const faqData = [
|
|
12
|
+
{
|
|
13
|
+
question: 'Bagaimana cara menghitung jumlah ubin yang dibutuhkan untuk sebuah ruangan?',
|
|
14
|
+
answer:
|
|
15
|
+
'Ukur lebar dan panjang ruangan, pilih ukuran ubin, dan masukkan lebar nat. Kalkulator akan membagi dimensi ruangan dengan ukuran ubin ditambah nat untuk memberikan jumlah ubin yang tepat per baris dan kolom.',
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
question: 'Berapa persentase sisa yang harus saya tambahkan saat membeli ubin?',
|
|
19
|
+
answer:
|
|
20
|
+
'Untuk ruangan persegi panjang standar, tambahkan 10% sisa. Untuk ruangan dengan banyak sudut, pola diagonal, atau potongan yang rumit, naikkan menjadi 15%. Ini mencakup kerusakan dan kesalahan pemotongan.',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
question: 'Apakah ketebalan nat benar-benar mengubah jumlah ubin?',
|
|
24
|
+
answer:
|
|
25
|
+
'Ya. Nat yang lebih lebar mengurangi cakupan efektif setiap ubin, sehingga sedikit meningkatkan jumlah total yang dibutuhkan. Kalkulator memperhitungkan ini secara otomatis di setiap baris dan kolom.',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
question: 'Apakah saya harus membeli kotak tambahan di luar persentase sisa?',
|
|
29
|
+
answer:
|
|
30
|
+
'Adalah bijaksana untuk membeli satu kotak ekstra jika tersedia. Batch warna dapat bervariasi antar produksi, dan memiliki cadangan yang cocok memudahkan perbaikan di masa depan.',
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
question: 'Bagaimana cara memasang ubin di ruangan dengan bentuk tidak beraturan?',
|
|
34
|
+
answer:
|
|
35
|
+
'Bagi ruangan menjadi persegi panjang yang lebih kecil. Hitung setiap bagian secara terpisah dan jumlahkan totalnya. Selalu bulatkan kotak parsial ke atas untuk memastikan cakupan penuh.',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
question: 'Apa perbedaan sisa antara keramik dan ubin porselen?',
|
|
39
|
+
answer:
|
|
40
|
+
'Porselen lebih padat dan sulit dipotong, yang dapat meningkatkan sisa pemotongan 2% hingga 3% dibandingkan keramik standar. Kedua material harus mengikuti proses pengukuran yang sama.',
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
question: 'Bisakah saya mengembalikan kotak ubin yang tidak terpakai?',
|
|
44
|
+
answer:
|
|
45
|
+
'Kebanyakan pengecer menerima kotak yang belum dibuka dalam 30 hari. Selalu simpan struk dan jangan membuka kotak cadangan hingga pemasangan sepenuhnya selesai.',
|
|
46
|
+
},
|
|
47
|
+
];
|
|
48
|
+
|
|
49
|
+
const howToData = [
|
|
50
|
+
{
|
|
51
|
+
name: 'Ukur ruangan',
|
|
52
|
+
text: 'Catat lebar dan panjang area lantai dalam sistem unit yang Anda pilih.',
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
name: 'Pilih ubin dan nat',
|
|
56
|
+
text: 'Pilih dimensi ubin dan lebar nat yang diinginkan.',
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
name: 'Hitung dan visualisasikan',
|
|
60
|
+
text: 'Masukkan nilai ke kalkulator, sesuaikan margin sisa, dan tinjau pratinjau tata letak live.',
|
|
61
|
+
},
|
|
62
|
+
];
|
|
63
|
+
|
|
64
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
65
|
+
'@context': 'https://schema.org',
|
|
66
|
+
'@type': 'FAQPage',
|
|
67
|
+
mainEntity: faqData.map((item) => ({
|
|
68
|
+
'@type': 'Question',
|
|
69
|
+
name: item.question,
|
|
70
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
71
|
+
})),
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
const howToSchema: WithContext<HowTo> = {
|
|
75
|
+
'@context': 'https://schema.org',
|
|
76
|
+
'@type': 'HowTo',
|
|
77
|
+
name: title,
|
|
78
|
+
description,
|
|
79
|
+
step: howToData.map((step) => ({
|
|
80
|
+
'@type': 'HowToStep',
|
|
81
|
+
name: step.name,
|
|
82
|
+
text: step.text,
|
|
83
|
+
})),
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
87
|
+
'@context': 'https://schema.org',
|
|
88
|
+
'@type': 'SoftwareApplication',
|
|
89
|
+
name: title,
|
|
90
|
+
description,
|
|
91
|
+
applicationCategory: 'UtilityApplication',
|
|
92
|
+
operatingSystem: 'All',
|
|
93
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'IDR' },
|
|
94
|
+
inLanguage: 'id',
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
export const content: ToolLocaleContent<TileLayoutCalculatorUI> = {
|
|
98
|
+
slug,
|
|
99
|
+
title,
|
|
100
|
+
description,
|
|
101
|
+
faq: faqData,
|
|
102
|
+
bibliography,
|
|
103
|
+
howTo: howToData,
|
|
104
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
105
|
+
seo: [
|
|
106
|
+
{
|
|
107
|
+
type: 'title',
|
|
108
|
+
text: 'Panduan Lengkap untuk Perencanaan Lantai Ubin dan Pengendalian Sisa',
|
|
109
|
+
level: 2,
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
type: 'paragraph',
|
|
113
|
+
html: 'Proyek pemasangan ubin yang sukses dimulai jauh sebelum lem pertama dioleskan. Pengukuran yang akurat, perencanaan tata letak yang cerdas, dan estimasi sisa yang tepat menentukan apakah renovasi Anda tetap sesuai anggaran dan jadwal. <strong>Kalkulator tata letak ubin interaktif kami</strong> mengubah dimensi mentah menjadi rencana lantai visual yang menunjukkan dengan tepat berapa banyak ubin yang muat per baris, berapa kotak yang harus dibeli, dan ke mana uang Anda pergi.',
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
type: 'stats',
|
|
117
|
+
items: [
|
|
118
|
+
{ value: '10-15%', label: 'Sisa Standar', icon: 'mdi:alert-circle' },
|
|
119
|
+
{ value: '30+ tahun', label: 'Umur Ubin', icon: 'mdi:clock-outline' },
|
|
120
|
+
{ value: '48 jam', label: 'Pemasangan Rata-rata', icon: 'mdi:calendar-check' },
|
|
121
|
+
],
|
|
122
|
+
columns: 3,
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
type: 'comparative',
|
|
126
|
+
items: [
|
|
127
|
+
{
|
|
128
|
+
title: 'Ubin Format Besar',
|
|
129
|
+
description: 'Ubin lebih dari 60 cm menciptakan tampilan modern yang mulus, tetapi memerlukan alas yang benar-benar rata dan menghasilkan sisa potong lebih tinggi di ruangan kecil.',
|
|
130
|
+
icon: 'mdi:arrow-expand',
|
|
131
|
+
points: ['Lebih sedikit nat', 'Efek visual premium', 'Sisa lebih tinggi di ruang sempit'],
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
title: 'Mosaik Kecil',
|
|
135
|
+
description: 'Ideal untuk kamar mandi dan pola yang rumit. Menyesuaikan dengan bentuk tidak beraturan, tetapi memerlukan lebih banyak nat dan waktu pengerjaan.',
|
|
136
|
+
icon: 'mdi:apps',
|
|
137
|
+
points: ['Fleksibel di sekitar rintangan', 'Lebih banyak nat diperlukan', 'Waktu pemasangan lebih lama'],
|
|
138
|
+
},
|
|
139
|
+
],
|
|
140
|
+
columns: 2,
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
type: 'title',
|
|
144
|
+
text: 'Mengapa Visualisasi Tata Letak Penting',
|
|
145
|
+
level: 3,
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
type: 'paragraph',
|
|
149
|
+
html: 'Melihat kisi ubin sebelum pembelian mencegah kejutan yang mahal. Pratinjau live mengungkapkan apakah ukuran ubin yang Anda pilih meninggalkan strip sempit yang canggung di tepi atau menciptakan lantai yang seimbang dan simetris. Dengan menyesuaikan lebar nat dan orientasi ubin dalam kalkulator, Anda dapat mengoptimalkan tata letak untuk estetika dan efisiensi sebelum memesan.',
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
type: 'diagnostic',
|
|
153
|
+
variant: 'info',
|
|
154
|
+
title: 'Tabel Referensi Cakupan Cepat',
|
|
155
|
+
icon: 'mdi:table',
|
|
156
|
+
badge: 'Referensi',
|
|
157
|
+
html: '<ul style="margin:0;padding-left:1.2em"><li><strong>30 x 30 cm</strong> → 11 ubin per m²</li><li><strong>45 x 45 cm</strong> → 5 ubin per m²</li><li><strong>60 x 60 cm</strong> → 3 ubin per m²</li><li><strong>60 x 120 cm</strong> → 1,5 ubin per m²</li></ul>',
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
type: 'summary',
|
|
161
|
+
title: 'Tips Profesional untuk Meminimalkan Sisa',
|
|
162
|
+
items: [
|
|
163
|
+
'Pesan 10% ekstra untuk pemasangan lurus dan 15% untuk diagonal atau herringbone.',
|
|
164
|
+
'Simpan semua kotak dari batch produksi yang sama untuk memastikan konsistensi warna.',
|
|
165
|
+
'Ukur secara diagonal di ruangan untuk memeriksa kesikuhan sebelum merencanakan baris.',
|
|
166
|
+
'Gunakan format besar hanya di ruangan yang lebih lebar dari panjang ubin untuk menghindari potongan berlebihan.',
|
|
167
|
+
'Selalu bulatkan jumlah kotak ke atas; lebih murah daripada pengiriman kedua.',
|
|
168
|
+
],
|
|
169
|
+
},
|
|
170
|
+
],
|
|
171
|
+
ui: {
|
|
172
|
+
sectionTitle: 'Konfigurasi Ruangan',
|
|
173
|
+
labelRoomWidth: 'Lebar ruangan',
|
|
174
|
+
labelRoomLength: 'Panjang ruangan',
|
|
175
|
+
labelTileWidth: 'Lebar ubin',
|
|
176
|
+
labelTileLength: 'Panjang ubin',
|
|
177
|
+
labelGrout: 'Lebar nat',
|
|
178
|
+
labelWaste: 'Margin sisa',
|
|
179
|
+
labelTilesPerBox: 'Ubin per kotak',
|
|
180
|
+
labelPrice: 'Harga per kotak',
|
|
181
|
+
labelPattern: 'Pola pemasangan',
|
|
182
|
+
unitMetricRoom: 'm',
|
|
183
|
+
unitImperialRoom: 'ft',
|
|
184
|
+
unitMetricTile: 'cm',
|
|
185
|
+
unitImperialTile: 'in',
|
|
186
|
+
unitGroutMetric: 'mm',
|
|
187
|
+
unitGroutImperial: 'in',
|
|
188
|
+
unitPercent: '%',
|
|
189
|
+
unitBoxes: 'pcs',
|
|
190
|
+
unitPrice: '/kotak',
|
|
191
|
+
resultBadge: 'Pratinjau live',
|
|
192
|
+
labelArea: 'Luas lantai',
|
|
193
|
+
labelTiles: 'Total ubin',
|
|
194
|
+
labelBoxes: 'Kotak yang diperlukan',
|
|
195
|
+
labelCost: 'Total biaya',
|
|
196
|
+
labelWasteCount: 'Ubin sisa',
|
|
197
|
+
labelCuts: 'Potongan parsial',
|
|
198
|
+
currency: 'IDR',
|
|
199
|
+
btnMetric: 'Metrik',
|
|
200
|
+
btnImperial: 'Imperial',
|
|
201
|
+
btnPatternStraight: 'Lurus',
|
|
202
|
+
btnPatternBrick: 'Bata',
|
|
203
|
+
btnPatternDiagonal: 'Diagonal',
|
|
204
|
+
badgeOptimal: 'Tata letak optimal',
|
|
205
|
+
badgeWarning: 'Peringatan sisa tinggi',
|
|
206
|
+
visualTitle: 'Pratinjau tata letak',
|
|
207
|
+
},
|
|
208
|
+
};
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { TileLayoutCalculatorUI } from '../ui';
|
|
4
|
+
import { bibliography } from '../bibliography';
|
|
5
|
+
|
|
6
|
+
const slug = 'calcolatore-disposizione-piastrelle';
|
|
7
|
+
const title = 'Calcolatore di Disposizione e Scarti di Piastrelle';
|
|
8
|
+
const description =
|
|
9
|
+
'Pavimenta la tua stanza con precisione. Calcola la quantità esatta di piastrelle, le scatole necessarie, il costo totale e visualizza la disposizione in tempo reale con un\'anteprima interattiva della griglia.';
|
|
10
|
+
|
|
11
|
+
const faqData = [
|
|
12
|
+
{
|
|
13
|
+
question: 'Come calcolo quante piastrelle mi servono per una stanza?',
|
|
14
|
+
answer:
|
|
15
|
+
'Misura la larghezza e la lunghezza della stanza, scegli la dimensione della piastrella e indica la larghezza della fuga. Il calcolatore divide le dimensioni della stanza per la piastrella più la fuga per ottenere il numero esatto di pezzi per fila e colonna.',
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
question: 'Quale percentuale di scarto devo aggiungere quando acquisto piastrelle?',
|
|
19
|
+
answer:
|
|
20
|
+
'Per ambienti rettangolari standard, aggiungi uno scarto del 10%. Per stanze con molti angoli, disposizioni diagonali o tagli complessi, aumenta al 15%. Questo copre rotture e errori di taglio.',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
question: 'Lo spessore della fuga influenza davvero il numero di piastrelle?',
|
|
24
|
+
answer:
|
|
25
|
+
'Sì. Fughe più larghe riducono la copertura effettiva di ogni piastrella, aumentando leggermente il numero totale necessario. Il calcolatore tiene conto automaticamente di questo in ogni fila e colonna.',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
question: 'Dovrei acquistare scatole extra oltre alla percentuale di scarto?',
|
|
29
|
+
answer:
|
|
30
|
+
'È saggio acquistare una scatola aggiuntiva se disponibile. I lotti di tinta possono variare tra le produzioni, e avere pezzi di ricambio abbinati semplifica le riparazioni future.',
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
question: 'Come poso piastrelle in una stanza di forma irregolare?',
|
|
34
|
+
answer:
|
|
35
|
+
'Suddividi lo spazio in rettangoli più piccoli. Calcola ogni sezione separatamente e somma i totali. Arrotonda sempre per eccesso le scatole parziali per garantire una copertura completa.',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
question: 'Qual è la differenza di scarto tra ceramica e gres porcellanato?',
|
|
39
|
+
answer:
|
|
40
|
+
'Il gres porcellanato è più denso e difficile da tagliare, il che può aumentare lo scarto di taglio dal 2% al 3% rispetto alla ceramica standard. Entrambi i materiali devono seguire lo stesso processo di misurazione.',
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
question: 'Posso restituire le scatole di piastrelle non utilizzate?',
|
|
44
|
+
answer:
|
|
45
|
+
'La maggior parte dei rivenditori accetta scatole sigillate entro 30 giorni. Conserva sempre lo scontrino e non aprire le scatole in eccedenza fino al completamento dell\'installazione.',
|
|
46
|
+
},
|
|
47
|
+
];
|
|
48
|
+
|
|
49
|
+
const howToData = [
|
|
50
|
+
{
|
|
51
|
+
name: 'Misura la stanza',
|
|
52
|
+
text: 'Annota larghezza e lunghezza della superficie da pavimentare con il sistema di unità che preferisci.',
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
name: 'Seleziona piastrella e fuga',
|
|
56
|
+
text: 'Scegli le dimensioni della piastrella e la larghezza della fuga desiderata.',
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
name: 'Calcola e visualizza',
|
|
60
|
+
text: 'Inserisci i valori nel calcolatore, regola il margine di scarto e controlla l\'anteprima live della disposizione.',
|
|
61
|
+
},
|
|
62
|
+
];
|
|
63
|
+
|
|
64
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
65
|
+
'@context': 'https://schema.org',
|
|
66
|
+
'@type': 'FAQPage',
|
|
67
|
+
mainEntity: faqData.map((item) => ({
|
|
68
|
+
'@type': 'Question',
|
|
69
|
+
name: item.question,
|
|
70
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
71
|
+
})),
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
const howToSchema: WithContext<HowTo> = {
|
|
75
|
+
'@context': 'https://schema.org',
|
|
76
|
+
'@type': 'HowTo',
|
|
77
|
+
name: title,
|
|
78
|
+
description,
|
|
79
|
+
step: howToData.map((step) => ({
|
|
80
|
+
'@type': 'HowToStep',
|
|
81
|
+
name: step.name,
|
|
82
|
+
text: step.text,
|
|
83
|
+
})),
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
87
|
+
'@context': 'https://schema.org',
|
|
88
|
+
'@type': 'SoftwareApplication',
|
|
89
|
+
name: title,
|
|
90
|
+
description,
|
|
91
|
+
applicationCategory: 'UtilityApplication',
|
|
92
|
+
operatingSystem: 'All',
|
|
93
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
94
|
+
inLanguage: 'it',
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
export const content: ToolLocaleContent<TileLayoutCalculatorUI> = {
|
|
98
|
+
slug,
|
|
99
|
+
title,
|
|
100
|
+
description,
|
|
101
|
+
faq: faqData,
|
|
102
|
+
bibliography,
|
|
103
|
+
howTo: howToData,
|
|
104
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
105
|
+
seo: [
|
|
106
|
+
{
|
|
107
|
+
type: 'title',
|
|
108
|
+
text: 'Guida Completa alla Pianificazione del Pavimento in Piastrelle e al Controllo degli Scarti',
|
|
109
|
+
level: 2,
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
type: 'paragraph',
|
|
113
|
+
html: 'Un progetto di posa in opera riuscito inizia molto prima di stendere il primo strato di adesivo. La misurazione accurata, la pianificazione intelligente della disposizione e la stima precisa degli scarti determinano se la ristrutturazione rimane in budget e nei tempi. <strong>Il nostro calcolatore interattivo di disposizione piastrelle</strong> trasforma le dimensioni grezze in una pianta visiva, mostrando esattamente quante piastrelle entrano per fila, quante scatole acquistare e dove va il tuo denaro.',
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
type: 'stats',
|
|
117
|
+
items: [
|
|
118
|
+
{ value: '10-15%', label: 'Scarto Standard', icon: 'mdi:alert-circle' },
|
|
119
|
+
{ value: '30+ anni', label: 'Durata della Piastrella', icon: 'mdi:clock-outline' },
|
|
120
|
+
{ value: '48h', label: 'Posa Media', icon: 'mdi:calendar-check' },
|
|
121
|
+
],
|
|
122
|
+
columns: 3,
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
type: 'comparative',
|
|
126
|
+
items: [
|
|
127
|
+
{
|
|
128
|
+
title: 'Piastrelle Grandi Formati',
|
|
129
|
+
description: 'Le piastrelle oltre i 60 cm creano un aspetto moderno e continuo, ma richiedono supporti perfettamente piani e generano maggiori scarti di taglio in ambienti piccoli.',
|
|
130
|
+
icon: 'mdi:arrow-expand',
|
|
131
|
+
points: ['Meno fughe visibili', 'Effetto visivo premium', 'Maggior scarto in spazi stretti'],
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
title: 'Mosaici di Piccole Dimensioni',
|
|
135
|
+
description: 'Ideali per bagni e motivi intricati. Si adattano a forme irregolari, ma richiedono più fuga e tempo di manodopera.',
|
|
136
|
+
icon: 'mdi:apps',
|
|
137
|
+
points: ['Flessibili intorno agli ostacoli', 'Più fuga richiesta', 'Maggiore tempo di posa'],
|
|
138
|
+
},
|
|
139
|
+
],
|
|
140
|
+
columns: 2,
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
type: 'title',
|
|
144
|
+
text: 'Perché la Visualizzazione della Disposizione è Importante',
|
|
145
|
+
level: 3,
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
type: 'paragraph',
|
|
149
|
+
html: 'Vedere la griglia delle piastrelle prima dell\'acquisto previene sorprese costose. L\'anteprima live rivela se la dimensione scelta lascia strisce strette ai margini o crea un pavimento equilibrato e simmetrico. Modificando larghezza fuga e orientamento della piastrella nel calcolatore, puoi ottimizzare la disposizione per estetica ed efficienza prima di ordinare.',
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
type: 'diagnostic',
|
|
153
|
+
variant: 'info',
|
|
154
|
+
title: 'Tabella di Riferimento Rapida per la Copertura',
|
|
155
|
+
icon: 'mdi:table',
|
|
156
|
+
badge: 'Riferimento',
|
|
157
|
+
html: '<ul style="margin:0;padding-left:1.2em"><li><strong>30 x 30 cm</strong> → 11 piastrelle per m²</li><li><strong>45 x 45 cm</strong> → 5 piastrelle per m²</li><li><strong>60 x 60 cm</strong> → 3 piastrelle per m²</li><li><strong>60 x 120 cm</strong> → 1,5 piastrelle per m²</li></ul>',
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
type: 'summary',
|
|
161
|
+
title: 'Suggerimenti Pro per Ridurre gli Scarti',
|
|
162
|
+
items: [
|
|
163
|
+
'Ordina il 10% in più per pose dritte e il 15% per diagonali o a spina.',
|
|
164
|
+
'Conserva tutte le scatole dello stesso lotto di produzione per garantire la coerenza cromatica.',
|
|
165
|
+
'Misura in diagonale la stanza per verificare la squadra prima di pianificare le file.',
|
|
166
|
+
'Usa grandi formati solo in ambienti più larghi della lunghezza della piastrella per evitare tagli eccessivi.',
|
|
167
|
+
'Arrotonda sempre le scatole per eccesso: costa meno di una seconda consegna.',
|
|
168
|
+
],
|
|
169
|
+
},
|
|
170
|
+
],
|
|
171
|
+
ui: {
|
|
172
|
+
sectionTitle: 'Configurazione Stanza',
|
|
173
|
+
labelRoomWidth: 'Larghezza stanza',
|
|
174
|
+
labelRoomLength: 'Lunghezza stanza',
|
|
175
|
+
labelTileWidth: 'Larghezza piastrella',
|
|
176
|
+
labelTileLength: 'Lunghezza piastrella',
|
|
177
|
+
labelGrout: 'Fuga',
|
|
178
|
+
labelWaste: 'Margine di scarto',
|
|
179
|
+
labelTilesPerBox: 'Piastrelle per scatola',
|
|
180
|
+
labelPrice: 'Prezzo per scatola',
|
|
181
|
+
labelPattern: 'Schema di posa',
|
|
182
|
+
unitMetricRoom: 'm',
|
|
183
|
+
unitImperialRoom: 'ft',
|
|
184
|
+
unitMetricTile: 'cm',
|
|
185
|
+
unitImperialTile: 'in',
|
|
186
|
+
unitGroutMetric: 'mm',
|
|
187
|
+
unitGroutImperial: 'in',
|
|
188
|
+
unitPercent: '%',
|
|
189
|
+
unitBoxes: 'pz',
|
|
190
|
+
unitPrice: '/scatola',
|
|
191
|
+
resultBadge: 'Anteprima live',
|
|
192
|
+
labelArea: 'Superficie pavimento',
|
|
193
|
+
labelTiles: 'Piastrelle totali',
|
|
194
|
+
labelBoxes: 'Scatole necessarie',
|
|
195
|
+
labelCost: 'Costo totale',
|
|
196
|
+
labelWasteCount: 'Piastrelle di scarto',
|
|
197
|
+
labelCuts: 'Tagli parziali',
|
|
198
|
+
currency: 'EUR',
|
|
199
|
+
btnMetric: 'Metrico',
|
|
200
|
+
btnImperial: 'Imperiale',
|
|
201
|
+
btnPatternStraight: 'Dritto',
|
|
202
|
+
btnPatternBrick: 'Sfalsato',
|
|
203
|
+
btnPatternDiagonal: 'Diagonale',
|
|
204
|
+
badgeOptimal: 'Disposizione ottimale',
|
|
205
|
+
badgeWarning: 'Attenzione: scarti elevati',
|
|
206
|
+
visualTitle: 'Anteprima della disposizione',
|
|
207
|
+
},
|
|
208
|
+
};
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { TileLayoutCalculatorUI } from '../ui';
|
|
4
|
+
import { bibliography } from '../bibliography';
|
|
5
|
+
|
|
6
|
+
const slug = 'tile-layout-calculator';
|
|
7
|
+
const title = 'タイルレイアウトとロス計算機';
|
|
8
|
+
const description =
|
|
9
|
+
'部屋の床を精密にプランニング。タイルの正確な枚数、必要箱数、総費用を計算し、インタラクティブなグリッドプレビューでレイアウトをリアルタイムに可視化できます。';
|
|
10
|
+
|
|
11
|
+
const faqData = [
|
|
12
|
+
{
|
|
13
|
+
question: '部屋に必要なタイルの枚数はどう計算しますか?',
|
|
14
|
+
answer:
|
|
15
|
+
'部屋の幅と奥行きを測り、タイルサイズと目地幅を選んで入力してください。計算機は、部屋の寸法をタイル+目地のサイズで割り、1列・1行あたりの必要枚数を正確に算出します。',
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
question: 'タイル購入時のロス率はどの程度見込めばよいですか?',
|
|
19
|
+
answer:
|
|
20
|
+
'標準的な矩形の部屋では10%のロスを見込んでください。角が多い部屋、斜め貼り、複雑なカットが必要な場合は15%に増やすと、割れやカットミスに対応できます。',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
question: '目地幅は本当にタイル枚数に影響しますか?',
|
|
24
|
+
answer:
|
|
25
|
+
'はい。目地が広いほど、各タイルの有効な被覆面積が減るため、総枚数がわずかに増えます。計算機は各行・各列でこれを自動的に考慮しています。',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
question: 'ロス率の上に追加で箱を買うべきですか?',
|
|
29
|
+
answer:
|
|
30
|
+
'可能であれば1箱多めに購入するのが賢明です。生産ロットによって色味が異なる場合があり、同じロットの予備タイルがあれば将来の補修がスムーズに行えます。',
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
question: '変形した部屋にタイルを貼るにはどうすればよいですか?',
|
|
34
|
+
answer:
|
|
35
|
+
'部屋を小さな矩形に分割して、それぞれを個別に計算して合計してください。部分箱は常に切り上げて、完全な被覆を確保してください。',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
question: '陶器タイルと磁器タイルのロス率の違いは何ですか?',
|
|
39
|
+
answer:
|
|
40
|
+
'磁器タイルは密度が高くカットが難しいため、標準的な陶器タイルに比べてカットロスが2〜3%増えることがあります。いずれの素材も同じ測定手順に従ってください。',
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
question: '余ったタイルの箱は返品できますか?',
|
|
44
|
+
answer:
|
|
45
|
+
'ほとんどの小売店は未開封の箱を30日以内に返品を受け付けます。必ずレシートを保管し、施工が完全に終了するまで余分の箱は開封しないでください。',
|
|
46
|
+
},
|
|
47
|
+
];
|
|
48
|
+
|
|
49
|
+
const howToData = [
|
|
50
|
+
{
|
|
51
|
+
name: '部屋を測定する',
|
|
52
|
+
text: 'お好みの単位系で床の幅と奥行きを記録します。',
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
name: 'タイルと目地を選ぶ',
|
|
56
|
+
text: 'タイルの寸法と希望の目地幅を選びます。',
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
name: '計算して可視化する',
|
|
60
|
+
text: '数値を計算機に入力し、ロス率を調整して、リアルタイムのレイアウトプレビューを確認します。',
|
|
61
|
+
},
|
|
62
|
+
];
|
|
63
|
+
|
|
64
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
65
|
+
'@context': 'https://schema.org',
|
|
66
|
+
'@type': 'FAQPage',
|
|
67
|
+
mainEntity: faqData.map((item) => ({
|
|
68
|
+
'@type': 'Question',
|
|
69
|
+
name: item.question,
|
|
70
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
71
|
+
})),
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
const howToSchema: WithContext<HowTo> = {
|
|
75
|
+
'@context': 'https://schema.org',
|
|
76
|
+
'@type': 'HowTo',
|
|
77
|
+
name: title,
|
|
78
|
+
description,
|
|
79
|
+
step: howToData.map((step) => ({
|
|
80
|
+
'@type': 'HowToStep',
|
|
81
|
+
name: step.name,
|
|
82
|
+
text: step.text,
|
|
83
|
+
})),
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
87
|
+
'@context': 'https://schema.org',
|
|
88
|
+
'@type': 'SoftwareApplication',
|
|
89
|
+
name: title,
|
|
90
|
+
description,
|
|
91
|
+
applicationCategory: 'UtilityApplication',
|
|
92
|
+
operatingSystem: 'All',
|
|
93
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'JPY' },
|
|
94
|
+
inLanguage: 'ja',
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
export const content: ToolLocaleContent<TileLayoutCalculatorUI> = {
|
|
98
|
+
slug,
|
|
99
|
+
title,
|
|
100
|
+
description,
|
|
101
|
+
faq: faqData,
|
|
102
|
+
bibliography,
|
|
103
|
+
howTo: howToData,
|
|
104
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
105
|
+
seo: [
|
|
106
|
+
{
|
|
107
|
+
type: 'title',
|
|
108
|
+
text: '床タイルのプランニングとロスコントロールの完全ガイド',
|
|
109
|
+
level: 2,
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
type: 'paragraph',
|
|
113
|
+
html: 'タイル貼りの成功は、最初の接着剤を塗る前から始まっています。正確な測定、賢いレイアウト計画、そして正確なロス見積もりが、リフォームが予算と工期の範囲内に収まるかどうかを決定します。<strong>当社のインタラクティブなタイルレイアウト計算機</strong>は、生の寸法を視覚的なフロアプランに変換し、1列に何枚入るか、何箱買えばよいか、そしてお金がどこに使われるかを正確に示します。',
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
type: 'stats',
|
|
117
|
+
items: [
|
|
118
|
+
{ value: '10-15%', label: '標準ロス', icon: 'mdi:alert-circle' },
|
|
119
|
+
{ value: '30年以上', label: 'タイル寿命', icon: 'mdi:clock-outline' },
|
|
120
|
+
{ value: '48時間', label: '平均施工', icon: 'mdi:calendar-check' },
|
|
121
|
+
],
|
|
122
|
+
columns: 3,
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
type: 'comparative',
|
|
126
|
+
items: [
|
|
127
|
+
{
|
|
128
|
+
title: '大判タイル',
|
|
129
|
+
description: '60cmを超えるタイルはシームレスでモダンな見た目を作りますが、完全に平らな下地が必要で、小さな部屋ではカットロスが増えます。',
|
|
130
|
+
icon: 'mdi:arrow-expand',
|
|
131
|
+
points: ['目地が少ない', 'プレミアムな視覚効果', '狭い空間ではカットロス増大'],
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
title: '小さなモザイクタイル',
|
|
135
|
+
description: '浴室や繊細な柄に最適。不規則な形に対応しますが、目地と施工時間が増えます。',
|
|
136
|
+
icon: 'mdi:apps',
|
|
137
|
+
points: ['障害物周りで柔軟', '目地が多い', '施工時間が長い'],
|
|
138
|
+
},
|
|
139
|
+
],
|
|
140
|
+
columns: 2,
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
type: 'title',
|
|
144
|
+
text: 'レイアウトの可視化が重要な理由',
|
|
145
|
+
level: 3,
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
type: 'paragraph',
|
|
149
|
+
html: '購入前にタイルのグリッドを見ることで、高額な予想外を防げます。ライブプレビューは、選んだタイルサイズが端に不格好な細い帯を残すのか、それともバランスの取れた対称的な床を作るのかを明らかにします。計算機内で目地幅とタイルの方向を調整することで、注文前に美観と効率の両面でレイアウトを最適化できます。',
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
type: 'diagnostic',
|
|
153
|
+
variant: 'info',
|
|
154
|
+
title: 'カバレッジ早見表',
|
|
155
|
+
icon: 'mdi:table',
|
|
156
|
+
badge: '参考',
|
|
157
|
+
html: '<ul style="margin:0;padding-left:1.2em"><li><strong>30 x 30 cm</strong> → 1m²あたり11枚</li><li><strong>45 x 45 cm</strong> → 1m²あたり5枚</li><li><strong>60 x 60 cm</strong> → 1m²あたり3枚</li><li><strong>60 x 120 cm</strong> → 1m²あたり1.5枚</li></ul>',
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
type: 'summary',
|
|
161
|
+
title: 'ロスを最小化するプロのコツ',
|
|
162
|
+
items: [
|
|
163
|
+
'直線貼りは10%多め、斜め貼りやヘリンボーンは15%多めを注文しましょう。',
|
|
164
|
+
'色の統一を保つため、すべての箱は同じ生産ロットのものを保管してください。',
|
|
165
|
+
'行の計画前に、部屋の対角線を測って直角を確認してください。',
|
|
166
|
+
'大判タイルは、部屋の幅がタイルの長さより大きい場合にのみ使用し、過剰なカットを避けましょう。',
|
|
167
|
+
'箱数は常に切り上げましょう。二度目の配送より安上がりです。',
|
|
168
|
+
],
|
|
169
|
+
},
|
|
170
|
+
],
|
|
171
|
+
ui: {
|
|
172
|
+
sectionTitle: '部屋の設定',
|
|
173
|
+
labelRoomWidth: '部屋の幅',
|
|
174
|
+
labelRoomLength: '部屋の奥行き',
|
|
175
|
+
labelTileWidth: 'タイルの幅',
|
|
176
|
+
labelTileLength: 'タイルの長さ',
|
|
177
|
+
labelGrout: '目地幅',
|
|
178
|
+
labelWaste: 'ロス率',
|
|
179
|
+
labelTilesPerBox: '1箱あたりの枚数',
|
|
180
|
+
labelPrice: '1箱の価格',
|
|
181
|
+
labelPattern: '貼り方',
|
|
182
|
+
unitMetricRoom: 'm',
|
|
183
|
+
unitImperialRoom: 'ft',
|
|
184
|
+
unitMetricTile: 'cm',
|
|
185
|
+
unitImperialTile: 'in',
|
|
186
|
+
unitGroutMetric: 'mm',
|
|
187
|
+
unitGroutImperial: 'in',
|
|
188
|
+
unitPercent: '%',
|
|
189
|
+
unitBoxes: '枚',
|
|
190
|
+
unitPrice: '/箱',
|
|
191
|
+
resultBadge: 'ライブプレビュー',
|
|
192
|
+
labelArea: '床面積',
|
|
193
|
+
labelTiles: '総タイル数',
|
|
194
|
+
labelBoxes: '必要箱数',
|
|
195
|
+
labelCost: '総費用',
|
|
196
|
+
labelWasteCount: 'ロス枚数',
|
|
197
|
+
labelCuts: '部分カット',
|
|
198
|
+
currency: 'JPY',
|
|
199
|
+
btnMetric: 'メートル法',
|
|
200
|
+
btnImperial: 'ヤードポンド法',
|
|
201
|
+
btnPatternStraight: '直線',
|
|
202
|
+
btnPatternBrick: 'ずらし貼り',
|
|
203
|
+
btnPatternDiagonal: '斜め',
|
|
204
|
+
badgeOptimal: '最適レイアウト',
|
|
205
|
+
badgeWarning: 'ロス過多警告',
|
|
206
|
+
visualTitle: 'レイアウトプレビュー',
|
|
207
|
+
},
|
|
208
|
+
};
|