@jjlmoya/utils-diy 1.2.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (189) hide show
  1. package/package.json +2 -1
  2. package/src/category/i18n/de.ts +12 -0
  3. package/src/category/i18n/id.ts +12 -0
  4. package/src/category/i18n/it.ts +12 -0
  5. package/src/category/i18n/ja.ts +12 -0
  6. package/src/category/i18n/ko.ts +12 -0
  7. package/src/category/i18n/nl.ts +12 -0
  8. package/src/category/i18n/pl.ts +12 -0
  9. package/src/category/i18n/pt.ts +12 -0
  10. package/src/category/i18n/ru.ts +12 -0
  11. package/src/category/i18n/sv.ts +12 -0
  12. package/src/category/i18n/tr.ts +12 -0
  13. package/src/category/i18n/zh.ts +12 -0
  14. package/src/category/index.ts +13 -1
  15. package/src/tests/faq_count.test.ts +1 -1
  16. package/src/tests/i18n_coverage.test.ts +36 -0
  17. package/src/tests/locale_completeness.test.ts +2 -2
  18. package/src/tests/seo_length.test.ts +3 -0
  19. package/src/tests/slug_uniqueness.test.ts +58 -0
  20. package/src/tool/balusterCalculator/i18n/de.ts +264 -0
  21. package/src/tool/balusterCalculator/i18n/id.ts +264 -0
  22. package/src/tool/balusterCalculator/i18n/it.ts +264 -0
  23. package/src/tool/balusterCalculator/i18n/ja.ts +264 -0
  24. package/src/tool/balusterCalculator/i18n/ko.ts +264 -0
  25. package/src/tool/balusterCalculator/i18n/nl.ts +264 -0
  26. package/src/tool/balusterCalculator/i18n/pl.ts +264 -0
  27. package/src/tool/balusterCalculator/i18n/pt.ts +264 -0
  28. package/src/tool/balusterCalculator/i18n/ru.ts +264 -0
  29. package/src/tool/balusterCalculator/i18n/sv.ts +264 -0
  30. package/src/tool/balusterCalculator/i18n/tr.ts +264 -0
  31. package/src/tool/balusterCalculator/i18n/zh.ts +264 -0
  32. package/src/tool/balusterCalculator/index.ts +15 -7
  33. package/src/tool/clayCalculator/i18n/de.ts +183 -0
  34. package/src/tool/clayCalculator/i18n/id.ts +183 -0
  35. package/src/tool/clayCalculator/i18n/it.ts +183 -0
  36. package/src/tool/clayCalculator/i18n/ja.ts +182 -0
  37. package/src/tool/clayCalculator/i18n/ko.ts +183 -0
  38. package/src/tool/clayCalculator/i18n/nl.ts +183 -0
  39. package/src/tool/clayCalculator/i18n/pl.ts +183 -0
  40. package/src/tool/clayCalculator/i18n/pt.ts +183 -0
  41. package/src/tool/clayCalculator/i18n/ru.ts +183 -0
  42. package/src/tool/clayCalculator/i18n/sv.ts +183 -0
  43. package/src/tool/clayCalculator/i18n/tr.ts +183 -0
  44. package/src/tool/clayCalculator/i18n/zh.ts +183 -0
  45. package/src/tool/clayCalculator/index.ts +15 -7
  46. package/src/tool/concreteCalculator/i18n/de.ts +201 -0
  47. package/src/tool/concreteCalculator/i18n/id.ts +201 -0
  48. package/src/tool/concreteCalculator/i18n/it.ts +201 -0
  49. package/src/tool/concreteCalculator/i18n/ja.ts +201 -0
  50. package/src/tool/concreteCalculator/i18n/ko.ts +201 -0
  51. package/src/tool/concreteCalculator/i18n/nl.ts +201 -0
  52. package/src/tool/concreteCalculator/i18n/pl.ts +201 -0
  53. package/src/tool/concreteCalculator/i18n/pt.ts +201 -0
  54. package/src/tool/concreteCalculator/i18n/ru.ts +201 -0
  55. package/src/tool/concreteCalculator/i18n/sv.ts +201 -0
  56. package/src/tool/concreteCalculator/i18n/tr.ts +201 -0
  57. package/src/tool/concreteCalculator/i18n/zh.ts +201 -0
  58. package/src/tool/concreteCalculator/index.ts +17 -5
  59. package/src/tool/cutOptimizer/i18n/de.ts +178 -0
  60. package/src/tool/cutOptimizer/i18n/id.ts +178 -0
  61. package/src/tool/cutOptimizer/i18n/it.ts +178 -0
  62. package/src/tool/cutOptimizer/i18n/ja.ts +178 -0
  63. package/src/tool/cutOptimizer/i18n/ko.ts +178 -0
  64. package/src/tool/cutOptimizer/i18n/nl.ts +178 -0
  65. package/src/tool/cutOptimizer/i18n/pl.ts +178 -0
  66. package/src/tool/cutOptimizer/i18n/pt.ts +178 -0
  67. package/src/tool/cutOptimizer/i18n/ru.ts +178 -0
  68. package/src/tool/cutOptimizer/i18n/sv.ts +178 -0
  69. package/src/tool/cutOptimizer/i18n/tr.ts +178 -0
  70. package/src/tool/cutOptimizer/i18n/zh.ts +178 -0
  71. package/src/tool/cutOptimizer/index.ts +17 -5
  72. package/src/tool/drillCalculator/i18n/de.ts +137 -0
  73. package/src/tool/drillCalculator/i18n/id.ts +137 -0
  74. package/src/tool/drillCalculator/i18n/it.ts +137 -0
  75. package/src/tool/drillCalculator/i18n/ja.ts +137 -0
  76. package/src/tool/drillCalculator/i18n/ko.ts +137 -0
  77. package/src/tool/drillCalculator/i18n/nl.ts +137 -0
  78. package/src/tool/drillCalculator/i18n/pl.ts +137 -0
  79. package/src/tool/drillCalculator/i18n/pt.ts +137 -0
  80. package/src/tool/drillCalculator/i18n/ru.ts +137 -0
  81. package/src/tool/drillCalculator/i18n/sv.ts +137 -0
  82. package/src/tool/drillCalculator/i18n/tr.ts +137 -0
  83. package/src/tool/drillCalculator/i18n/zh.ts +137 -0
  84. package/src/tool/drillCalculator/index.ts +17 -5
  85. package/src/tool/drillSharpener/i18n/de.ts +120 -0
  86. package/src/tool/drillSharpener/i18n/id.ts +120 -0
  87. package/src/tool/drillSharpener/i18n/it.ts +120 -0
  88. package/src/tool/drillSharpener/i18n/ja.ts +120 -0
  89. package/src/tool/drillSharpener/i18n/ko.ts +120 -0
  90. package/src/tool/drillSharpener/i18n/nl.ts +120 -0
  91. package/src/tool/drillSharpener/i18n/pl.ts +120 -0
  92. package/src/tool/drillSharpener/i18n/pt.ts +120 -0
  93. package/src/tool/drillSharpener/i18n/ru.ts +120 -0
  94. package/src/tool/drillSharpener/i18n/sv.ts +120 -0
  95. package/src/tool/drillSharpener/i18n/tr.ts +120 -0
  96. package/src/tool/drillSharpener/i18n/zh.ts +120 -0
  97. package/src/tool/drillSharpener/index.ts +17 -5
  98. package/src/tool/epoxyCalculator/i18n/de.ts +118 -0
  99. package/src/tool/epoxyCalculator/i18n/id.ts +118 -0
  100. package/src/tool/epoxyCalculator/i18n/it.ts +118 -0
  101. package/src/tool/epoxyCalculator/i18n/ja.ts +118 -0
  102. package/src/tool/epoxyCalculator/i18n/ko.ts +118 -0
  103. package/src/tool/epoxyCalculator/i18n/nl.ts +118 -0
  104. package/src/tool/epoxyCalculator/i18n/pl.ts +118 -0
  105. package/src/tool/epoxyCalculator/i18n/pt.ts +118 -0
  106. package/src/tool/epoxyCalculator/i18n/ru.ts +118 -0
  107. package/src/tool/epoxyCalculator/i18n/sv.ts +118 -0
  108. package/src/tool/epoxyCalculator/i18n/tr.ts +118 -0
  109. package/src/tool/epoxyCalculator/i18n/zh.ts +118 -0
  110. package/src/tool/epoxyCalculator/index.ts +15 -7
  111. package/src/tool/furnitureFit/i18n/de.ts +113 -0
  112. package/src/tool/furnitureFit/i18n/id.ts +113 -0
  113. package/src/tool/furnitureFit/i18n/it.ts +113 -0
  114. package/src/tool/furnitureFit/i18n/ja.ts +113 -0
  115. package/src/tool/furnitureFit/i18n/ko.ts +113 -0
  116. package/src/tool/furnitureFit/i18n/nl.ts +113 -0
  117. package/src/tool/furnitureFit/i18n/pl.ts +113 -0
  118. package/src/tool/furnitureFit/i18n/pt.ts +113 -0
  119. package/src/tool/furnitureFit/i18n/ru.ts +113 -0
  120. package/src/tool/furnitureFit/i18n/sv.ts +113 -0
  121. package/src/tool/furnitureFit/i18n/tr.ts +113 -0
  122. package/src/tool/furnitureFit/i18n/zh.ts +113 -0
  123. package/src/tool/furnitureFit/index.ts +17 -5
  124. package/src/tool/mortarCalculator/i18n/de.ts +129 -0
  125. package/src/tool/mortarCalculator/i18n/id.ts +129 -0
  126. package/src/tool/mortarCalculator/i18n/it.ts +129 -0
  127. package/src/tool/mortarCalculator/i18n/ja.ts +129 -0
  128. package/src/tool/mortarCalculator/i18n/ko.ts +129 -0
  129. package/src/tool/mortarCalculator/i18n/nl.ts +129 -0
  130. package/src/tool/mortarCalculator/i18n/pl.ts +129 -0
  131. package/src/tool/mortarCalculator/i18n/pt.ts +129 -0
  132. package/src/tool/mortarCalculator/i18n/ru.ts +129 -0
  133. package/src/tool/mortarCalculator/i18n/sv.ts +129 -0
  134. package/src/tool/mortarCalculator/i18n/tr.ts +129 -0
  135. package/src/tool/mortarCalculator/i18n/zh.ts +129 -0
  136. package/src/tool/mortarCalculator/index.ts +17 -5
  137. package/src/tool/passepartoutCalculator/i18n/de.ts +108 -0
  138. package/src/tool/passepartoutCalculator/i18n/id.ts +108 -0
  139. package/src/tool/passepartoutCalculator/i18n/it.ts +108 -0
  140. package/src/tool/passepartoutCalculator/i18n/ja.ts +108 -0
  141. package/src/tool/passepartoutCalculator/i18n/ko.ts +108 -0
  142. package/src/tool/passepartoutCalculator/i18n/nl.ts +108 -0
  143. package/src/tool/passepartoutCalculator/i18n/pl.ts +108 -0
  144. package/src/tool/passepartoutCalculator/i18n/pt.ts +108 -0
  145. package/src/tool/passepartoutCalculator/i18n/ru.ts +108 -0
  146. package/src/tool/passepartoutCalculator/i18n/sv.ts +108 -0
  147. package/src/tool/passepartoutCalculator/i18n/tr.ts +108 -0
  148. package/src/tool/passepartoutCalculator/i18n/zh.ts +108 -0
  149. package/src/tool/passepartoutCalculator/index.ts +17 -5
  150. package/src/tool/stairCalculator/i18n/de.ts +144 -0
  151. package/src/tool/stairCalculator/i18n/id.ts +144 -0
  152. package/src/tool/stairCalculator/i18n/it.ts +144 -0
  153. package/src/tool/stairCalculator/i18n/ja.ts +144 -0
  154. package/src/tool/stairCalculator/i18n/ko.ts +144 -0
  155. package/src/tool/stairCalculator/i18n/nl.ts +144 -0
  156. package/src/tool/stairCalculator/i18n/pl.ts +144 -0
  157. package/src/tool/stairCalculator/i18n/pt.ts +144 -0
  158. package/src/tool/stairCalculator/i18n/ru.ts +144 -0
  159. package/src/tool/stairCalculator/i18n/sv.ts +144 -0
  160. package/src/tool/stairCalculator/i18n/tr.ts +144 -0
  161. package/src/tool/stairCalculator/i18n/zh.ts +144 -0
  162. package/src/tool/stairCalculator/index.ts +17 -5
  163. package/src/tool/thermalExpansionCalculator/i18n/de.ts +132 -0
  164. package/src/tool/thermalExpansionCalculator/i18n/id.ts +130 -0
  165. package/src/tool/thermalExpansionCalculator/i18n/it.ts +130 -0
  166. package/src/tool/thermalExpansionCalculator/i18n/ja.ts +130 -0
  167. package/src/tool/thermalExpansionCalculator/i18n/ko.ts +130 -0
  168. package/src/tool/thermalExpansionCalculator/i18n/nl.ts +130 -0
  169. package/src/tool/thermalExpansionCalculator/i18n/pl.ts +130 -0
  170. package/src/tool/thermalExpansionCalculator/i18n/pt.ts +130 -0
  171. package/src/tool/thermalExpansionCalculator/i18n/ru.ts +130 -0
  172. package/src/tool/thermalExpansionCalculator/i18n/sv.ts +130 -0
  173. package/src/tool/thermalExpansionCalculator/i18n/tr.ts +130 -0
  174. package/src/tool/thermalExpansionCalculator/i18n/zh.ts +130 -0
  175. package/src/tool/thermalExpansionCalculator/index.ts +17 -5
  176. package/src/tool/voltageDropCalculator/i18n/de.ts +112 -0
  177. package/src/tool/voltageDropCalculator/i18n/id.ts +110 -0
  178. package/src/tool/voltageDropCalculator/i18n/it.ts +110 -0
  179. package/src/tool/voltageDropCalculator/i18n/ja.ts +110 -0
  180. package/src/tool/voltageDropCalculator/i18n/ko.ts +110 -0
  181. package/src/tool/voltageDropCalculator/i18n/nl.ts +110 -0
  182. package/src/tool/voltageDropCalculator/i18n/pl.ts +110 -0
  183. package/src/tool/voltageDropCalculator/i18n/pt.ts +110 -0
  184. package/src/tool/voltageDropCalculator/i18n/ru.ts +110 -0
  185. package/src/tool/voltageDropCalculator/i18n/sv.ts +110 -0
  186. package/src/tool/voltageDropCalculator/i18n/tr.ts +110 -0
  187. package/src/tool/voltageDropCalculator/i18n/zh.ts +110 -0
  188. package/src/tool/voltageDropCalculator/index.ts +17 -5
  189. package/src/types.ts +1 -1
@@ -0,0 +1,113 @@
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { FurnitureFitUI } from '../ui';
4
+
5
+ const slug = 'mobilya-alan-hesaplama';
6
+ const title = 'Taşınma ve Mobilya İçin Alan Hesaplayıcı';
7
+ const description = 'Kanepenizin, dolabınızın veya masanızın asansöre veya kapıdan sığıp sığmadığını kontrol edin. Eğimleri hesaplamak için 3D Pisagor teoremini kullanın.';
8
+
9
+ const faqData = [
10
+ {
11
+ question: 'Bir kanepe kapıdan daha küçük olmasına rağmen neden sığmayabilir?',
12
+ answer: 'Dönüş açısı nedeniyle. Koridor darsa, kanepe yan veya eğik olarak girmelidir. Sınırlayıcı faktör sadece kapı genişliği değil, aynı zamanda odadaki mevcut dönüş yarıçapıdır.',
13
+ },
14
+ {
15
+ question: 'Bir mobilyanın diyagonali nedir ve neden önemlidir?',
16
+ answer: 'İki zıt köşe arasındaki en uzak mesafedir. Uzun bir mobilyanın yerde monte edildikten sonra tavanı alçak bir odada dikilip dikilemeyeceğini bilmek için hayati önem taşır.',
17
+ },
18
+ {
19
+ question: 'Bir asansör doğru şekilde nasıl ölçülür?',
20
+ answer: 'Sadece zemini ölçmeyin. Açık kapı genişliğini, net derinliği ve toplam yüksekliği ölçün. Kapı tabanından arka üst köşeye kadar olan diyagonal en önemli veridir.',
21
+ },
22
+ {
23
+ question: 'Önce hangi parçalar sökülmelidir?',
24
+ answer: 'Kanepe ayakları, dolap kulpları ve buzdolabı kapakları, bir mobilyanın sığıp sığmaması arasında fark yaratan o kritik 5 ila 10 cm\'yi kazandırabilir.',
25
+ },
26
+ ];
27
+
28
+ const howToData = [
29
+ { name: 'Mobilyayı ölçün (Boy, En, Yükseklik)', text: 'Kolçaklar veya kulplar gibi çıkıntılar dahil olmak üzere objenin maksimum boyutlarını alın.' },
30
+ { name: 'Kritik geçişleri ölçün', text: 'Kapı net boşluğunu (kasadan kasaya), asansörün içini ve koridorların genişliğini ölçün.' },
31
+ { name: 'Verileri simülatöre girin', text: 'Mobilya hacminin geçiş alanıyla uyumlu olup olmadığını görmek için boyutları araca yazın.' },
32
+ { name: 'Eğimleri hesaplayın', text: 'Mobilya çok yüksekse, merdiven sahanlığında veya asansör içinde döndürüp döndüremeyeceğinizi doğrulamak için hesaplanan diyagonali kullanın.' },
33
+ ];
34
+
35
+ const faqSchema: WithContext<FAQPage> = {
36
+ '@context': 'https://schema.org',
37
+ '@type': 'FAQPage',
38
+ mainEntity: faqData.map((item) => ({
39
+ '@type': 'Question',
40
+ name: item.question,
41
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
42
+ })),
43
+ };
44
+
45
+ const howToSchema: WithContext<HowToThing> = {
46
+ '@context': 'https://schema.org',
47
+ '@type': 'HowTo',
48
+ name: title,
49
+ description,
50
+ step: howToData.map((step, i) => ({
51
+ '@type': 'HowToStep',
52
+ position: i + 1,
53
+ name: step.name,
54
+ text: step.text,
55
+ })),
56
+ };
57
+
58
+ const appSchema: WithContext<SoftwareApplication> = {
59
+ '@context': 'https://schema.org',
60
+ '@type': 'SoftwareApplication',
61
+ name: title,
62
+ description,
63
+ applicationCategory: 'UtilityApplication',
64
+ operatingSystem: 'All',
65
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
66
+ inLanguage: 'tr',
67
+ };
68
+
69
+ export const content: ToolLocaleContent<FurnitureFitUI> = {
70
+ slug,
71
+ title,
72
+ description,
73
+ faqTitle: 'Sıkça Sorulan Sorular',
74
+ faq: faqData,
75
+ bibliographyTitle: 'Teknik Referanslar',
76
+ bibliography: [
77
+ { name: 'Geometric Fit in Confined Spaces (MDPI Buildings)', url: 'https://www.mdpi.com/2075-5309/15/2/157' },
78
+ { name: 'Moving Sofa Problem: Wolfram MathWorld', url: 'https://mathworld.wolfram.com/MovingSofaProblem.html' },
79
+ ],
80
+ howTo: howToData,
81
+ schemas: [faqSchema, howToSchema, appSchema],
82
+ seo: [
83
+ { type: 'title', text: 'Taşınma Bilimi ve Pisagor Teoremi', level: 2 },
84
+ { type: 'paragraph', html: 'Taşınma sadece bir fiziksel güç testi değildir; karmaşık bir geometrik bulmacadır. Bir odanın veya asansörün görünen alanı, özellikle üçüncü boyutu görmezden geldiğimizde insan gözünü aldatır. Matematik sizi iade ve başarısız nakliyat masraflarından kurtarabilir.' },
85
+ { type: 'title', text: '3D Diyagonal İpucu', level: 3 },
86
+ { type: 'card', icon: 'mdi:math-log', title: 'Altın Kural', html: '<p>Asla sadece mobilyayı ölçmeyin. Daima <strong>kritik erişim noktalarını</strong> ölçün: kapı kasası genişliği, sahanlıktaki tavanın en alçak noktası ve kapılar kapalıyken asansörün gerçek derinliği. <code>d = √(w² + h² + z²)</code> formülü, eğik sığıp sığmadığını gösterir.</p>' },
87
+ { type: 'title', text: 'Koridordaki Kanepe Problemi', level: 3 },
88
+ { type: 'card', icon: 'mdi:sofa', title: 'Manevra Payı', html: '<p>Mobilya 80 cm ve boşluk 80 cm ise geçeceğini varsaymak yaygın bir hatadır. Öyle değildir. Taşıyıcıların elleri, kumaşın esnekliği ve duvarlardaki kusurlar en az <strong>2 ila 5 cm</strong> pay gerektirir. Bu pay olmadan mobilya çizilir veya baskı nedeniyle sıkışıp kalır.</p>' },
89
+ { type: 'title', text: 'Taşınmayı Mahveden 3 Hata', level: 3 },
90
+ { type: 'paragraph', html: 'Doğru ölçümlerle bile bu görünmez faktörler felaketlere yol açar: <strong>Tavan Lambası</strong> — diyagonal dönüş sırasında unutulur; <strong>Mobilya Dönüş Yarıçapı</strong> — sert mobilyalar bükülmez; <strong>Paketleme</strong> — balonlu naylon her iki tarafa da 1-3 cm ekleyebilir.' },
91
+ ],
92
+ ui: {
93
+ conTitle: 'Alan Boyutları',
94
+ conHint: 'Örn: Standart asansör, kapı kasası veya kamyonet.',
95
+ objTitle: 'Mobilya Boyutları',
96
+ labelWidth: 'Genişlik (cm)',
97
+ labelHeight: 'Yükseklik (cm)',
98
+ labelDepth: 'Derinlik (cm)',
99
+ labelLength: 'Boy (cm)',
100
+ labelMargin: 'Hata Payı (cm)',
101
+ vizLabel: 'Basitleştirilmiş Mekansal Görünüm',
102
+ verdictDefault: 'Sığar mı?',
103
+ verdictHint: 'Mekansal uyumluluğu kontrol etmek için ölçüleri girin.',
104
+ verdictYes: 'EVET, SIĞIYOR!',
105
+ verdictNo: 'SIĞMIYOR',
106
+ fitDirect: 'Mobilya doğrudan mükemmel şekilde sığıyor.',
107
+ fitDiagonal3d: 'Diyagonal olarak eğik sığıyor (3D Pisagor).',
108
+ fitDiagonalPlane: 'Yan düzlemlerden birinde eğik sığıyor.',
109
+ fitNope: 'Mobilya diyagonal olarak girmek için bile çok büyük.',
110
+ diagLabel: 'Maksimum Diyagonal (3D Pisagor):',
111
+ objLabel: 'Mobilya',
112
+ },
113
+ };
@@ -0,0 +1,113 @@
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { FurnitureFitUI } from '../ui';
4
+
5
+ const slug = 'furniture-fit-calculator';
6
+ const title = '搬家与家具空间计算器';
7
+ const description = '检查您的沙发、衣柜或桌子是否能放入电梯或通过房门。使用 3D 勾股定理计算倾斜尺寸,避免搬家灾难。';
8
+
9
+ const faqData = [
10
+ {
11
+ question: '为什么沙发明明比门小却还是进不去?',
12
+ answer: '这是因为旋转角度。如果走廊狭窄,沙发必须侧放或倾斜才能进入。限制因素不仅仅是门的宽度,还包括房间内可用的转弯半径。',
13
+ },
14
+ {
15
+ question: '什么是家具的对角线,为什么它很重要?',
16
+ answer: '它是两个对角顶点之间最长的距离。这对于了解一件高大的家具在地面组装后,是否能在低天花板的房间里立起来至关重要。',
17
+ },
18
+ {
19
+ question: '如何正确测量电梯?',
20
+ answer: '不要只量地面。要测量开门宽度、有效深度和总高度。从门底边到后上方顶角的对角线是最关键的数据。',
21
+ },
22
+ {
23
+ question: '哪些部件应该首先拆卸?',
24
+ answer: '沙发脚、衣柜把手和冰箱门通常能腾出 5 到 10 厘米的关键空间,这往往决定了家具是能进去还是只能留在门外。',
25
+ },
26
+ ];
27
+
28
+ const howToData = [
29
+ { name: '测量家具(长、宽、高)', text: '测量物体的最大尺寸,包括扶手或把手等任何突出部分。' },
30
+ { name: '测量关键通道', text: '测量门的净宽度(门框到门框)、电梯内部以及走廊的宽度。' },
31
+ { name: '输入数据到模拟器', text: '在工具中输入尺寸,查看家具的体积是否与通道空间匹配。' },
32
+ { name: '计算倾斜角度', text: '如果家具非常高,请使用计算出的对角线来确认您是否能在楼梯平台或电梯内旋转它。' },
33
+ ];
34
+
35
+ const faqSchema: WithContext<FAQPage> = {
36
+ '@context': 'https://schema.org',
37
+ '@type': 'FAQPage',
38
+ mainEntity: faqData.map((item) => ({
39
+ '@type': 'Question',
40
+ name: item.question,
41
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
42
+ })),
43
+ };
44
+
45
+ const howToSchema: WithContext<HowToThing> = {
46
+ '@context': 'https://schema.org',
47
+ '@type': 'HowTo',
48
+ name: title,
49
+ description,
50
+ step: howToData.map((step, i) => ({
51
+ '@type': 'HowToStep',
52
+ position: i + 1,
53
+ name: step.name,
54
+ text: step.text,
55
+ })),
56
+ };
57
+
58
+ const appSchema: WithContext<SoftwareApplication> = {
59
+ '@context': 'https://schema.org',
60
+ '@type': 'SoftwareApplication',
61
+ name: title,
62
+ description,
63
+ applicationCategory: 'UtilityApplication',
64
+ operatingSystem: 'All',
65
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
66
+ inLanguage: 'zh',
67
+ };
68
+
69
+ export const content: ToolLocaleContent<FurnitureFitUI> = {
70
+ slug,
71
+ title,
72
+ description,
73
+ faqTitle: '常见问题',
74
+ faq: faqData,
75
+ bibliographyTitle: '技术参考',
76
+ bibliography: [
77
+ { name: 'Geometric Fit in Confined Spaces (MDPI Buildings)', url: 'https://www.mdpi.com/2075-5309/15/2/157' },
78
+ { name: 'Moving Sofa Problem: Wolfram MathWorld', url: 'https://mathworld.wolfram.com/MovingSofaProblem.html' },
79
+ ],
80
+ howTo: howToData,
81
+ schemas: [faqSchema, howToSchema, appSchema],
82
+ seo: [
83
+ { type: 'title', text: '搬家的科学与勾股定理', level: 2 },
84
+ { type: 'paragraph', html: '搬家不仅仅是体力活;它是一个复杂的几何拼图。房间或电梯的视觉空间常会欺骗人类的眼睛,尤其是当我们忽略第三个维度时。数学可以帮您省去因退货和运输失败而造成的数百欧元损失。' },
85
+ { type: 'title', text: '3D 对角线小技巧', level: 3 },
86
+ { type: 'card', icon: 'mdi:math-log', title: '黄金法则', html: '<p>永远不要只量家具。一定要测量<strong>关键准入点</strong>:门框宽度(如果房门打不开 180 度,请减去房门自身的厚度)、楼梯平台的最低天花板高度以及关上门后电梯的实际深度。公式 <code>d = √(w² + h² + z²)</code> 会告诉你倾斜后是否能进去。</p>' },
87
+ { type: 'title', text: '走廊沙发问题', level: 3 },
88
+ { type: 'card', icon: 'mdi:sofa', title: '操作余量', html: '<p>一个常见的错误是假设如果家具宽 80 厘米,门洞宽 80 厘米,就能通过。并非如此。工人的手、织物的弹性以及墙面的不平整都需要至少 <strong>2 到 5 厘米</strong> 的余量。如果没有这个余量,家具会被刮花或被挤住。</p>' },
89
+ { type: 'title', text: '毁掉搬家的 3 个错误', level: 3 },
90
+ { type: 'paragraph', html: '即使尺寸正确,这些看不见的因素也常会导致灾难:<strong>吸顶灯</strong> —— 在对角线旋转期间常被遗忘;<strong>家具的转弯半径</strong> —— 硬家具不会弯曲;<strong>包装</strong> —— 气泡膜和保护纸板会在每边增加 1 到 3 厘米。' },
91
+ ],
92
+ ui: {
93
+ conTitle: '空间尺寸',
94
+ conHint: '例如:标准电梯、门框或货车。',
95
+ objTitle: '家具尺寸',
96
+ labelWidth: '宽度 (cm)',
97
+ labelHeight: '高度 (cm)',
98
+ labelDepth: '深度 (cm)',
99
+ labelLength: '长度 (cm)',
100
+ labelMargin: '误差余量 (cm)',
101
+ vizLabel: '简化空间视图',
102
+ verdictDefault: '能进去吗?',
103
+ verdictHint: '输入尺寸以检查空间兼容性。',
104
+ verdictYes: '是的,能进去!',
105
+ verdictNo: '进不去',
106
+ fitDirect: '家具可以直接完美进入。',
107
+ fitDiagonal3d: '可以倾斜对角线进入 (3D 勾股定理)。',
108
+ fitDiagonalPlane: '可以在其中一个侧平面倾斜进入。',
109
+ fitNope: '家具太大,即使倾斜也无法进入。',
110
+ diagLabel: '最大对角线 (3D 勾股定理):',
111
+ objLabel: '家具',
112
+ },
113
+ };
@@ -10,14 +10,26 @@ export {
10
10
  FurnitureFitBibliography,
11
11
  };
12
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
13
  export const furnitureFit: DiyToolEntry<FurnitureFitUI> = {
18
14
  id: 'furniture-fit-calculator',
19
15
  icons: { bg: 'mdi:sofa', fg: 'mdi:ruler-square' },
20
- i18n: { es, en, fr },
16
+ i18n: {
17
+ de: () => import('./i18n/de').then((m) => m.content),
18
+ en: () => import('./i18n/en').then((m) => m.content),
19
+ es: () => import('./i18n/es').then((m) => m.content),
20
+ fr: () => import('./i18n/fr').then((m) => m.content),
21
+ id: () => import('./i18n/id').then((m) => m.content),
22
+ it: () => import('./i18n/it').then((m) => m.content),
23
+ ja: () => import('./i18n/ja').then((m) => m.content),
24
+ ko: () => import('./i18n/ko').then((m) => m.content),
25
+ nl: () => import('./i18n/nl').then((m) => m.content),
26
+ pl: () => import('./i18n/pl').then((m) => m.content),
27
+ pt: () => import('./i18n/pt').then((m) => m.content),
28
+ ru: () => import('./i18n/ru').then((m) => m.content),
29
+ sv: () => import('./i18n/sv').then((m) => m.content),
30
+ tr: () => import('./i18n/tr').then((m) => m.content),
31
+ zh: () => import('./i18n/zh').then((m) => m.content),
32
+ },
21
33
  };
22
34
 
23
35
  export const FURNITURE_FIT_TOOL: ToolDefinition = {
@@ -0,0 +1,129 @@
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { MortarCalculatorUI } from '../ui';
4
+
5
+ const slug = 'moertel-rechner';
6
+ const title = 'Traditionelle Kalkmörtel Verhältnisse: Putz und Anstrich';
7
+ const description = 'Kostenloser Rechner für Kalk-Sand-Mörtel. Erhalten Sie die exakten Verhältnisse für Grundputz, Zwischenputz und Feinputz nach traditionellen Methoden (Vitruv).';
8
+
9
+ const faqData = [
10
+ {
11
+ question: 'Warum Kalk statt Zement verwenden?',
12
+ answer: 'Kalk ist ein "lebendiges" und atmungsaktives Material, das den Abtransport von Wasserdampf ermöglicht und so Kondensationsfeuchtigkeit verhindert. Zudem ist er flexibler als Zement, was die Rissbildung in alten Mauern reduziert.',
13
+ },
14
+ {
15
+ question: 'Was ist das ideale Verhältnis für einen Grundputz?',
16
+ answer: 'Nach vitruvianischer Tradition wird für sauberen Flusssand ein Verhältnis von 1:3 verwendet (ein Teil Kalk auf drei Teile Sand). Bei Grubensand wird 1:2 empfohlen, um den Zusammenhalt des Mörtels zu gewährleisten.',
17
+ },
18
+ {
19
+ question: 'Was ist Feinputz oder Glattputz?',
20
+ answer: 'Dies ist die letzte Schicht der Wand. Es wird ein viel feinerer Sand (manchmal Marmormehl) und ein höherer Kalkanteil verwendet, um ein glattes, seidiges Finish zu erzielen, das gestrichen oder naturbelassen werden kann.',
21
+ },
22
+ {
23
+ question: 'Wie lange dauert es, bis Kalkmörtel aushärtet?',
24
+ answer: 'Luftkalk härtet durch Karbonisierung (Aufnahme von CO2 aus der Luft) aus. Der erste Abbindeprozess dauert einige Tage, aber die maximale Härte wird erst Monate später erreicht, wobei die Festigkeit im Laufe der Jahre zunimmt.',
25
+ },
26
+ ];
27
+
28
+ const howToData = [
29
+ { name: 'Untergrund identifizieren', text: 'Prüfen Sie, ob Sie auf Stein, altem Ziegel oder Block arbeiten. Der Untergrund muss sauber und leicht feucht sein.' },
30
+ { name: 'Korngröße des Sandes wählen', text: 'Verwenden Sie groben Sand für die Haftschicht und feinen Sand für das kosmetische Finish. Die Reinheit des Sandes bestimmt die Qualität des Mörtels.' },
31
+ { name: 'Mischen der Komponenten', text: 'Mischen Sie Kalk und Sand trocken, bevor Sie Wasser hinzufügen. Die Konsistenz sollte plastisch, nicht flüssig sein.' },
32
+ { name: 'Auftrag und Glätten', text: 'Tragen Sie den Mörtel mit der Kelle auf und verwenden Sie ein Reibebrett, um die Oberfläche zu glätten, sobald der Mörtel anzuziehen beginnt.' },
33
+ ];
34
+
35
+ const faqSchema: WithContext<FAQPage> = {
36
+ '@context': 'https://schema.org',
37
+ '@type': 'FAQPage',
38
+ mainEntity: faqData.map((item) => ({
39
+ '@type': 'Question',
40
+ name: item.question,
41
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
42
+ })),
43
+ };
44
+
45
+ const howToSchema: WithContext<HowToThing> = {
46
+ '@context': 'https://schema.org',
47
+ '@type': 'HowTo',
48
+ name: title,
49
+ description,
50
+ step: howToData.map((step, i) => ({
51
+ '@type': 'HowToStep',
52
+ position: i + 1,
53
+ name: step.name,
54
+ text: step.text,
55
+ })),
56
+ };
57
+
58
+ const appSchema: WithContext<SoftwareApplication> = {
59
+ '@context': 'https://schema.org',
60
+ '@type': 'SoftwareApplication',
61
+ name: title,
62
+ description,
63
+ applicationCategory: 'UtilityApplication',
64
+ operatingSystem: 'All',
65
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
66
+ inLanguage: 'de',
67
+ };
68
+
69
+ export const content: ToolLocaleContent<MortarCalculatorUI> = {
70
+ slug,
71
+ title,
72
+ description,
73
+ faqTitle: 'Häufig gestellte Fragen',
74
+ faq: faqData,
75
+ bibliographyTitle: 'Technische Referenzen',
76
+ bibliography: [
77
+ { name: 'Vitruv - De Architectura, Buch VII', url: 'https://www.perseus.tufts.edu/hopper/text?doc=Perseus:text:2007.01.0072' },
78
+ { name: 'Norm EN 459 - Baukalk', url: 'https://www.une.org/encuentra-tu-norma/busca-tu-norma/norma?c=N0053796' },
79
+ ],
80
+ howTo: howToData,
81
+ schemas: [faqSchema, howToSchema, appSchema],
82
+ seo: [
83
+ { type: 'title', text: 'Abhandlung über Mörtel: Die Weisheit des Vitruv', level: 2 },
84
+ { type: 'paragraph', html: 'Marcus Vitruvius Pollio beschrieb im VII. Buch seines Werkes <em>De Architectura</em> nicht nur Techniken, sondern eine Philosophie. Er verstand, dass die Ewigkeit eines Gebäudes in seinen Verbindungen liegt. Mörtel ist nicht bloß Klebstoff; er ist das Bindegewebe. Seine Verhältnisse (1:3, 1:2, 1:1) sind das Erbe jahrhundertelanger römischer empirischer Beobachtung auf der Suche nach dem perfekten Gleichgewicht zwischen Festigkeit und Flexibilität.' },
85
+ { type: 'title', text: 'Korngröße des Zuschlags: Der Schlüssel zur Qualität', level: 3 },
86
+ { type: 'paragraph', html: 'Die Qualität eines Kalkmörtels hängt maßgeblich von der Korngröße des Zuschlags ab. Für das <strong>Trullissatio</strong> (Grundputz) wird grober Flusssand von 2-5 mm verwendet. Für das <strong>Arenato</strong> (Zwischenputz) gewaschener Mittelsand von 0,5-2 mm. Für das <strong>Marmorato</strong> (Feinputz) Marmormehl unter 0,5 mm.' },
87
+ { type: 'title', text: 'Der Reiz der mechanischen Haftung', level: 3 },
88
+ { type: 'paragraph', html: 'Die Haftung ist nicht chemisch, sondern <strong>mechanisch</strong>. Stellen Sie sich Millionen mikroskopisch kleiner Wurzeln vor. Der Mörtel muss in die Poren des Ziegels eindringen, um eine physikalische "Verzahnung" zu schaffen. Ohne Porosität gibt es keine Verankerung.' },
89
+ ],
90
+ ui: {
91
+ leftTitle: 'Vitruvianisches System',
92
+ centerTitle: 'Verfügbare Materialien',
93
+ rightTitle: 'Geschätzte Abdeckung',
94
+ btnCal: 'Kalk',
95
+ btnArena: 'Sand',
96
+ labelCalPasta: 'Sumpfkalk (1.30 kg/L)',
97
+ labelCalPolvo: 'NHL Pulver (0.65 kg/L)',
98
+ labelQuantity: 'Verfügbare Menge:',
99
+ labelNeedsAlso: 'Zusätzlich benötigt:',
100
+ labelProportion: 'Verhältnis: ',
101
+ labelCoverage: 'Abdeckung:',
102
+ labelThickness: 'Gesamtstärke:',
103
+ labelLayers: 'Schichten:',
104
+ labelWasteFactor: 'Abfallfaktor: 20%',
105
+ layersSingular: 'Lage',
106
+ layersPlural: 'Lagen',
107
+ layersSingularShort: 'Lage',
108
+ layersPluralShort: 'Lagen',
109
+ materialCal: 'Kalk',
110
+ materialArena: 'Sand',
111
+ materialMarmol: 'Marmor',
112
+ phaseDescTrullissatio: 'Rauher Grundputz. 2 Lagen à 15mm. Verhältnis 1:3 (Kalk:Flusssand).',
113
+ phaseDescArenato: 'Zwischenschicht. 2 Lagen à 8mm. Verhältnis 1:2 (Kalk:Gewaschener Sand).',
114
+ phaseDescMarmorato: 'Feinfunish. 1 Doppellage à 4mm. Verhältnis 1:1 (Kalk:Marmormehl).',
115
+ granulometryTitle: 'Korngröße des Zuschlags',
116
+ grainTitleCoarse: 'Grobsand',
117
+ grainSubtitleCoarse: 'Flusssand',
118
+ grainUsageCoarse: 'Grundputz',
119
+ grainTitleMedium: 'Mittelsand',
120
+ grainSubtitleMedium: 'Gewaschener Sand',
121
+ grainUsageMedium: 'Zwischenputz',
122
+ grainTitleFine: 'Feinpulver',
123
+ grainSubtitleFine: 'Marmormehl',
124
+ grainUsageFine: 'Feinputz',
125
+ specSize: 'Größe:',
126
+ specUse: 'Verwendung:',
127
+ specDensity: 'Dichte:',
128
+ },
129
+ };
@@ -0,0 +1,129 @@
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { MortarCalculatorUI } from '../ui';
4
+
5
+ const slug = 'kalkulator-mortir';
6
+ const title = 'Proporsi Mortir Kapur Tradicional: Plester dan Acian';
7
+ const description = 'Kalkulator gratis untuk mortir kapur dan pasir. Dapatkan proporsi tepat untuk plesteran dan acian sesuai metode tradisional (Vitruvius).';
8
+
9
+ const faqData = [
10
+ {
11
+ question: 'Mengapa menggunakan kapur daripada semen?',
12
+ answer: 'Kapur adalah bahan "hidup" dan bernapas yang memungkinkan penguapan uap air, mencegah kelembapan akibat kondensasi. Selain itu, kapur lebih fleksibel daripada semen, yang mengurangi munculnya retakan pada dinding tua.',
13
+ },
14
+ {
15
+ question: 'Berapa proporsi ideal untuk plesteran?',
16
+ answer: 'Menurut tradisi Vitruvius, untuk pasir sungai yang bersih digunakan proporsi 1:3 (satu bagian kapur untuk tiga bagian pasir). Untuk pasir tambang, direkomendasikan 1:2 untuk memastikan kohesi mortir.',
17
+ },
18
+ {
19
+ question: 'Apa itu acian halus atau plesteran akhir?',
20
+ answer: 'Ini adalah lapisan terakhir dinding. Digunakan pasir yang jauh lebih halus (terkadang bubuk marmer) dan proporsi kapur yang lebih tinggi untuk mendapatkan hasil akhir yang halus dan lembut yang dapat dicat atau dibiarkan alami.',
21
+ },
22
+ {
23
+ question: 'Berapa lama waktu yang dibutuhkan mortir kapur untuk mengeras?',
24
+ answer: 'Kapur udara mengeras melalui karbonasi (menyerap CO2 dari udara). Proses pengerasan awal memakan waktu beberapa hari, tetapi kekerasan maksimal dicapai berbulan-bulan kemudian, semakin kuat seiring berjalannya waktu.',
25
+ },
26
+ ];
27
+
28
+ const howToData = [
29
+ { name: 'Identifikasi jenis penyangga', text: 'Periksa apakah Anda akan bekerja pada batu, bata tua, atau blok. Penyangga harus bersih dan sedikit lembap.' },
30
+ { name: 'Pilih granulometri pasir', text: 'Gunakan pasir kasar untuk lapisan dasar dan pasir halus untuk hasil akhir kosmetik. Kemurnian pasir menentukan kualitas mortir.' },
31
+ { name: 'Pencampuran komponen', text: 'Campurkan kapur dan pasir dalam keadaan kering sebelum menambahkan air. Konsistensi harus plastis, tidak cair.' },
32
+ { name: 'Aplikasi dan penghalusan', text: 'Ratakan mortir dengan cetok dan gunakan roskam untuk meratakan permukaan saat mortir mulai mengeras di permukaan.' },
33
+ ];
34
+
35
+ const faqSchema: WithContext<FAQPage> = {
36
+ '@context': 'https://schema.org',
37
+ '@type': 'FAQPage',
38
+ mainEntity: faqData.map((item) => ({
39
+ '@type': 'Question',
40
+ name: item.question,
41
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
42
+ })),
43
+ };
44
+
45
+ const howToSchema: WithContext<HowToThing> = {
46
+ '@context': 'https://schema.org',
47
+ '@type': 'HowTo',
48
+ name: title,
49
+ description,
50
+ step: howToData.map((step, i) => ({
51
+ '@type': 'HowToStep',
52
+ position: i + 1,
53
+ name: step.name,
54
+ text: step.text,
55
+ })),
56
+ };
57
+
58
+ const appSchema: WithContext<SoftwareApplication> = {
59
+ '@context': 'https://schema.org',
60
+ '@type': 'SoftwareApplication',
61
+ name: title,
62
+ description,
63
+ applicationCategory: 'UtilityApplication',
64
+ operatingSystem: 'All',
65
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
66
+ inLanguage: 'id',
67
+ };
68
+
69
+ export const content: ToolLocaleContent<MortarCalculatorUI> = {
70
+ slug,
71
+ title,
72
+ description,
73
+ faqTitle: 'Pertanyaan Umum',
74
+ faq: faqData,
75
+ bibliographyTitle: 'Referensi Teknis',
76
+ bibliography: [
77
+ { name: 'Vitruvius - De Architectura, Buku VII', url: 'https://www.perseus.tufts.edu/hopper/text?doc=Perseus:text:2007.01.0072' },
78
+ { name: 'Norma EN 459 - Kapur Konstruksi', url: 'https://www.une.org/encuentra-tu-norma/busca-tu-norma/norma?c=N0053796' },
79
+ ],
80
+ howTo: howToData,
81
+ schemas: [faqSchema, howToSchema, appSchema],
82
+ seo: [
83
+ { type: 'title', text: 'Risalah Mortir: Kebijaksanaan Vitruvius', level: 2 },
84
+ { type: 'paragraph', html: 'Marco Vitruvio Polión, dalam Buku VII dari <em>De Architectura</em>-nya, tidak hanya mendeskripsikan teknik, tetapi sebuah filosofi. Ia memahami bahwa keabadian sebuah bangunan terletak pada sambungannya. Mortir bukan sekadar lem; ia adalah jaringan ikat. Proporsinya (1:3, 1:2, 1:1) adalah warisan pengamatan empiris Romawi selama berabad-abad, mencari keseimbangan sempurna antara kekuatan dan fleksibilitas.' },
85
+ { type: 'title', text: 'Granulometri Agregat: Kunci Kualitas', level: 3 },
86
+ { type: 'paragraph', html: 'Kualitas mortir kapur sangat bergantung pada granulometri agregat. Untuk <strong>Trullissatio</strong> (plester dasar), digunakan pasir sungai kasar 2-5 mm. Untuk <strong>Arenato</strong> (plester menengah), pasir sedang dicuci 0,5-2 mm. Untuk <strong>Marmorato</strong> (acian halus), bubuk marmer kurang dari 0,5 mm.' },
87
+ { type: 'title', text: 'Misteri Ikatan Mekanis', level: 3 },
88
+ { type: 'paragraph', html: 'Ikatan ini bukan kimia, melainkan <strong>mekanis</strong>. Bayangkan jutaan akar mikroskopis. Mortir harus menembus ke dalam pori-pori bata untuk menciptakan "kunci" fisik. Tanpa porositas, tidak ada jangkar.' },
89
+ ],
90
+ ui: {
91
+ leftTitle: 'Sistem Vitruvius',
92
+ centerTitle: 'Bahan Tersedia',
93
+ rightTitle: 'Estimasi Cakupan',
94
+ btnCal: 'Kapur',
95
+ btnArena: 'Pasir',
96
+ labelCalPasta: 'Pasta (1.30 kg/L)',
97
+ labelCalPolvo: 'Bubuk NHL (0.65 kg/L)',
98
+ labelQuantity: 'Jumlah tersedia:',
99
+ labelNeedsAlso: 'Anda juga butuh:',
100
+ labelProportion: 'Proporsi: ',
101
+ labelCoverage: 'Cakupan:',
102
+ labelThickness: 'Tebal total:',
103
+ labelLayers: 'Lapisan:',
104
+ labelWasteFactor: 'Faktor susut: 20%',
105
+ layersSingular: 'lapis',
106
+ layersPlural: 'lapis',
107
+ layersSingularShort: 'lapis',
108
+ layersPluralShort: 'lapis',
109
+ materialCal: 'Kapur',
110
+ materialArena: 'Pasir',
111
+ materialMarmol: 'Marmer',
112
+ phaseDescTrullissatio: 'Lapisan dasar kasar. 2 lapis 15mm. Proporsi 1:3 (Kapur:Pasir sungai).',
113
+ phaseDescArenato: 'Lapisan menengah. 2 lapis 8mm. Proporsi 1:2 (Kapur:Pasir cuci).',
114
+ phaseDescMarmorato: 'Hasil akhir halus. 1 lapis ganda 4mm. Proporsi 1:1 (Kapur:Bubuk marmer).',
115
+ granulometryTitle: 'Granulometri Agregat',
116
+ grainTitleCoarse: 'Pasir Kasar',
117
+ grainSubtitleCoarse: 'Pasir Sungai',
118
+ grainUsageCoarse: 'Plester dasar',
119
+ grainTitleMedium: 'Pasir Sedang',
120
+ grainSubtitleMedium: 'Pasir Cuci',
121
+ grainUsageMedium: 'Plester menengah',
122
+ grainTitleFine: 'Bubuk Halus',
123
+ grainSubtitleFine: 'Bubuk Marmer',
124
+ grainUsageFine: 'Acian halus',
125
+ specSize: 'Ukuran:',
126
+ specUse: 'Kegunaan:',
127
+ specDensity: 'Densitas:',
128
+ },
129
+ };
@@ -0,0 +1,129 @@
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { MortarCalculatorUI } from '../ui';
4
+
5
+ const slug = 'calcolatore-malte';
6
+ const title = 'Proporzioni Malte di Calce Tradizionali: Rinzaffo e Intonaco';
7
+ const description = 'Calcolatore gratuito per malte di calce e sabbia. Ottieni le proporzioni esatte per rinzaffo, arriccio e finitura secondo i metodi tradizionali (Vitruvio).';
8
+
9
+ const faqData = [
10
+ {
11
+ question: 'Perché usare la calce invece del cemento?',
12
+ answer: 'La calce è un materiale "vivo" e traspirante che permette l\'evacuazione del vapore acqueo, evitando umidità da condensa. Inoltre, è più flessibile del cemento, il che riduce la comparsa di crepe in muri antichi.',
13
+ },
14
+ {
15
+ question: 'Qual è la proporzione ideale per un rinzaffo?',
16
+ answer: 'Secondo la tradizione vitruviana, per sabbia di fiume pulita si usa una proporzione di 1:3 (una parte di calce per tre di sabbia). Per sabbia di cava, si raccomanda 1:2 per assicurare la coesione della malta.',
17
+ },
18
+ {
19
+ question: 'Cos\'è la finitura fine o intonachino?',
20
+ answer: 'È l\'ultimo strato del muro. Si usa una sabbia molto più fine (a volte polvere di marmo) e una proporzione maggiore di calce per ottenere una finitura liscia e setosa che può essere dipinta o lasciata naturale.',
21
+ },
22
+ {
23
+ question: 'Quanto tempo impiega la malta di calce a indurire?',
24
+ answer: 'La calce aerea indurisce per carbonatazione (assorbendo CO2 dall\'aria). Il processo iniziale di presa è di alcuni giorni, ma la durezza massima si raggiunge mesi dopo, guadagnando resistenza con il passare degli anni.',
25
+ },
26
+ ];
27
+
28
+ const howToData = [
29
+ { name: 'Identificare il tipo di supporto', text: 'Controlla se lavorerai su pietra, mattone antico o blocco. Il supporto deve essere pulito e leggermente umido.' },
30
+ { name: 'Scegliere la granulometria della sabbia', text: 'Usa sabbia grossa per lo strato di aggancio e sabbia fine per la finitura estetica. La purezza della sabbia definisce la qualità della malta.' },
31
+ { name: 'Miscelazione dei componenti', text: 'Mescola la calce e la sabbia a secco prima di aggiungere acqua. La consistenza deve essere plastica, non liquida.' },
32
+ { name: 'Applicazione e frattazzatura', text: 'Stendi la malta con la cazzuola e usa un frattazzo per uniformare la superficie quando la malta inizia a tirare.' },
33
+ ];
34
+
35
+ const faqSchema: WithContext<FAQPage> = {
36
+ '@context': 'https://schema.org',
37
+ '@type': 'FAQPage',
38
+ mainEntity: faqData.map((item) => ({
39
+ '@type': 'Question',
40
+ name: item.question,
41
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
42
+ })),
43
+ };
44
+
45
+ const howToSchema: WithContext<HowToThing> = {
46
+ '@context': 'https://schema.org',
47
+ '@type': 'HowTo',
48
+ name: title,
49
+ description,
50
+ step: howToData.map((step, i) => ({
51
+ '@type': 'HowToStep',
52
+ position: i + 1,
53
+ name: step.name,
54
+ text: step.text,
55
+ })),
56
+ };
57
+
58
+ const appSchema: WithContext<SoftwareApplication> = {
59
+ '@context': 'https://schema.org',
60
+ '@type': 'SoftwareApplication',
61
+ name: title,
62
+ description,
63
+ applicationCategory: 'UtilityApplication',
64
+ operatingSystem: 'All',
65
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
66
+ inLanguage: 'it',
67
+ };
68
+
69
+ export const content: ToolLocaleContent<MortarCalculatorUI> = {
70
+ slug,
71
+ title,
72
+ description,
73
+ faqTitle: 'Domande Frequenti',
74
+ faq: faqData,
75
+ bibliographyTitle: 'Riferimenti Tecnici',
76
+ bibliography: [
77
+ { name: 'Vitruvio - De Architectura, Libro VII', url: 'https://www.perseus.tufts.edu/hopper/text?doc=Perseus:text:2007.01.0072' },
78
+ { name: 'Norma EN 459 - Calci per l\'edilizia', url: 'https://www.une.org/encuentra-tu-norma/busca-tu-norma/norma?c=N0053796' },
79
+ ],
80
+ howTo: howToData,
81
+ schemas: [faqSchema, howToSchema, appSchema],
82
+ seo: [
83
+ { type: 'title', text: 'Trattato delle Malte: La Saggezza di Vitruvio', level: 2 },
84
+ { type: 'paragraph', html: 'Marco Vitruvio Pollione, nel Libro VII del suo <em>De Architectura</em>, non descrisse solo tecniche, ma una filosofia. Capiva che l\'eternità di un edificio risiede nelle sue unioni. La malta non è mero collante; è il tessuto connettivo. Le sue proporzioni (1:3, 1:2, 1:1) sono l\'eredità di secoli di osservazione empirica romana, cercando il perfetto equilibrio tra resistenza e flessibilità.' },
85
+ { type: 'title', text: 'Granulometria dell\'Inerte: La Chiave della Qualità', level: 3 },
86
+ { type: 'paragraph', html: 'La qualità di una malta di calce dipende in gran parte dalla granulometria dell\'inerte. Per il <strong>Trullissatio</strong> (rinzaffo), si usa sabbia grossa di fiume da 2-5 mm. Per l\'<strong>Arenato</strong> (arriccio), sabbia media lavata da 0,5-2 mm. Per il <strong>Marmorato</strong> (lastra fine), polvere di marmo minore di 0,5 mm.' },
87
+ { type: 'title', text: 'Il Mistero della Presa Meccanica', level: 3 },
88
+ { type: 'paragraph', html: 'L\'aggancio non è chimico, è <strong>meccanico</strong>. Immagina milioni di radici microscopiche. La malta deve penetrare nei pori del mattone per creare una "chiave" fisica. Senza porosità, non c\'è ancoraggio.' },
89
+ ],
90
+ ui: {
91
+ leftTitle: 'Sistema Vitruviano',
92
+ centerTitle: 'Materiali Disponibili',
93
+ rightTitle: 'Copertura Stimata',
94
+ btnCal: 'Calce',
95
+ btnArena: 'Sabbia',
96
+ labelCalPasta: 'Grassello (1.30 kg/L)',
97
+ labelCalPolvo: 'Polvere NHL (0.65 kg/L)',
98
+ labelQuantity: 'Quantità disponibile:',
99
+ labelNeedsAlso: 'Ti servirà anche:',
100
+ labelProportion: 'Proporzione: ',
101
+ labelCoverage: 'Copertura:',
102
+ labelThickness: 'Spessore totale:',
103
+ labelLayers: 'Strati:',
104
+ labelWasteFactor: 'Fattore di scarto: 20%',
105
+ layersSingular: 'mano',
106
+ layersPlural: 'mani',
107
+ layersSingularShort: 'mano',
108
+ layersPluralShort: 'mani',
109
+ materialCal: 'Calce',
110
+ materialArena: 'Sabbia',
111
+ materialMarmol: 'Marmo',
112
+ phaseDescTrullissatio: 'Strato base rugoso. 2 mani da 15mm. Proporzione 1:3 (Calce:Sabbia di fiume).',
113
+ phaseDescArenato: 'Strato intermedio. 2 mani da 8mm. Proporzione 1:2 (Calce:Sabbia lavata).',
114
+ phaseDescMarmorato: 'Finitura fine. 1 mano doppia da 4mm. Proporzione 1:1 (Calce:Polvere di marmo).',
115
+ granulometryTitle: 'Granulometria dell\'Inerte',
116
+ grainTitleCoarse: 'Sabbia Grossa',
117
+ grainSubtitleCoarse: 'Sabbia di Fiume',
118
+ grainUsageCoarse: 'Rinzaffo base',
119
+ grainTitleMedium: 'Sabbia Media',
120
+ grainSubtitleMedium: 'Sabbia Lavata',
121
+ grainUsageMedium: 'Arriccio intermedio',
122
+ grainTitleFine: 'Polvere Fine',
123
+ grainSubtitleFine: 'Polvere di Marmo',
124
+ grainUsageFine: 'Finitura fine',
125
+ specSize: 'Dimensione:',
126
+ specUse: 'Uso:',
127
+ specDensity: 'Densità:',
128
+ },
129
+ };