@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,183 @@
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { ClayCalculatorUI } from '../ui';
4
+
5
+ const slug = 'clay-shrinkage-calculator';
6
+ const title = '粘土缩水率计算器:陶瓷精确尺寸设计';
7
+ const description =
8
+ '计算粘土在干燥和烧成过程中的缩水率。设计具有精确最终尺寸的陶瓷作品。';
9
+
10
+ const faqData = [
11
+ {
12
+ question: '粘土为什么要缩水?',
13
+ answer:
14
+ '粘土缩水主要是因为水分流失。首先是干燥缩水(颗粒间水分蒸发),然后是烧成缩水(去除化学结合水及颗粒烧结)。',
15
+ },
16
+ {
17
+ question: '正常的缩水率是多少?',
18
+ answer:
19
+ '这取决于陶瓷泥料。陶土通常在5-10%之间缩水,而炻器(Gres)和瓷器(Porcelain)由于玻化程度更高,缩水率可达12-15%。',
20
+ },
21
+ {
22
+ question: '如何测量我所用粘土的缩水率?',
23
+ answer:
24
+ '制作一个精确10厘米的测试片。晾干后测量(干燥缩水)。在最终温度下烧制后再次测量(总缩水)。差值即为精确百分比。',
25
+ },
26
+ {
27
+ question: '如果作品在干燥时开裂怎么办?',
28
+ answer:
29
+ '这通常表明干燥过快或不均匀。薄的部分比厚的部分失水更快,从而产生应力。请用塑料薄膜覆盖作品以减缓干燥过程。',
30
+ },
31
+ ];
32
+
33
+ const howToData = [
34
+ {
35
+ name: '测量湿坯尺寸',
36
+ text: '在拉坯或捏塑完成后,趁作品还含有全部水分时,记录其精确尺寸。',
37
+ },
38
+ {
39
+ name: '输入缩水系数',
40
+ text: '在粘土包装上查看制造商提供的总缩水率(干燥+烧成)百分比。',
41
+ },
42
+ {
43
+ name: '获取预期的最终尺寸',
44
+ text: '使用计算器了解作品出窑后的尺寸,并据此规划嵌套件或盖子的尺寸。',
45
+ },
46
+ {
47
+ name: '逆向计算目标尺寸',
48
+ text: '如果您需要作品最终精确达到 X 厘米,请使用逆向计算来确定在陶轮上应制作的尺寸。',
49
+ },
50
+ ];
51
+
52
+ const faqSchema: WithContext<FAQPage> = {
53
+ '@context': 'https://schema.org',
54
+ '@type': 'FAQPage',
55
+ mainEntity: faqData.map((item) => ({
56
+ '@type': 'Question',
57
+ name: item.question,
58
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
59
+ })),
60
+ };
61
+
62
+ const howToSchema: WithContext<HowToThing> = {
63
+ '@context': 'https://schema.org',
64
+ '@type': 'HowTo',
65
+ name: title,
66
+ description,
67
+ step: howToData.map((step, i) => ({
68
+ '@type': 'HowToStep',
69
+ position: i + 1,
70
+ name: step.name,
71
+ text: step.text,
72
+ })),
73
+ };
74
+
75
+ const appSchema: WithContext<SoftwareApplication> = {
76
+ '@context': 'https://schema.org',
77
+ '@type': 'SoftwareApplication',
78
+ name: title,
79
+ description,
80
+ applicationCategory: 'UtilityApplication',
81
+ operatingSystem: 'All',
82
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
83
+ inLanguage: 'zh',
84
+ };
85
+
86
+ export const content: ToolLocaleContent<ClayCalculatorUI> = {
87
+ slug,
88
+ title,
89
+ description,
90
+ faqTitle: '常见问题',
91
+ faq: faqData,
92
+ bibliographyTitle: '参考资料',
93
+ bibliography: [
94
+ {
95
+ name: 'The Potter\'s Dictionary - Clay Shrinkage',
96
+ url: 'https://digitalfire.com/glossary/firing+shrinkage',
97
+ },
98
+ {
99
+ name: 'Ceramic Arts Network - Understanding Shrinkage',
100
+ url: 'https://ceramicartsnetwork.org/daily/article/How-to-Determine-Clay-Shrinkage-and-Make-a-Shrink-Rule',
101
+ },
102
+ ],
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: '粘土是一种在整个陶瓷制作过程中都会改变尺寸的活材料。从您塑造湿坯的那一刻起,直到作品出窑,它可能会失去原始尺寸的8%到15%。计算这一缩水率对于制作具有精确所需尺寸的作品至关重要。',
114
+ },
115
+ {
116
+ type: 'grid',
117
+ columns: [
118
+ {
119
+ type: 'card',
120
+ title: '缩水阶段',
121
+ html: '<p><strong>1. 干燥(湿 → 干):</strong> 随着水分流失,粘土颗粒相互靠近。这是最大的缩水阶段(4-8%)。如果干燥过快,厚壁作品可能会开裂。</p><p><strong>2. 烧成(干 → 素烧):</strong> 在900-1000°C之间,粘土发生不可逆的化学变化。额外的缩水率为2-4%。作品变得多孔但坚固。</p><p><strong>3. 玻化(高温):</strong> 在1200-1300°C时,粘土发生玻化。最终缩水率为1-3%。炻器和瓷器达到最大密度。</p>',
122
+ },
123
+ {
124
+ type: 'card',
125
+ title: '影响变量',
126
+ html: '<ul><li><strong>粘土类型:</strong> 红泥的缩水率(8-10%)通常低于瓷泥(12-15%)。</li><li><strong>壁厚:</strong> 薄壁比厚壁缩水更均匀。</li><li><strong>烧成温度:</strong> 温度越高,缩水和玻化程度越高。</li><li><strong>熟料含量:</strong> 添加熟料(已烧制并研磨的粘土)可以减少缩水。</li></ul>',
127
+ },
128
+ ],
129
+ },
130
+ {
131
+ type: 'title',
132
+ text: '实际应用',
133
+ level: 2,
134
+ },
135
+ {
136
+ type: 'title',
137
+ text: '模具设计',
138
+ level: 3,
139
+ },
140
+ {
141
+ type: 'paragraph',
142
+ html: '如果您需要一个最终直径为8厘米的杯子,而您的粘土缩水率为12%,那么您必须制作<strong>9.1厘米</strong>的模具。这种逆向计算在批量生产中至关重要。',
143
+ },
144
+ {
145
+ type: 'title',
146
+ text: '盖子与组装',
147
+ level: 3,
148
+ },
149
+ {
150
+ type: 'paragraph',
151
+ html: '当您制作需要嵌套的部件(茶壶+盖子,罐子+盖子)时,两者必须使用相同的粘土制作并一起烧制,以确保它们缩水一致。1%的差异就可能破坏配合度。',
152
+ },
153
+ {
154
+ type: 'title',
155
+ text: '大型雕塑',
156
+ level: 3,
157
+ },
158
+ {
159
+ type: 'paragraph',
160
+ html: '在大型作品中,厚薄部分之间的差异缩水会导致裂缝。经验丰富的陶艺家会通过在已知缩水较多的区域保留较厚的壁厚来进行补偿。',
161
+ },
162
+ ],
163
+ ui: {
164
+ labelInitialSize: '初始尺寸 (mm)',
165
+ labelShrinkage: '缩水率百分比 (%)',
166
+ labelLow: '低(陶土/Terracota)',
167
+ labelMedium: '中(炻器/Gres)',
168
+ labelHigh: '高(瓷器/Porcelain)',
169
+ presetTerracota: '陶土 (8%)',
170
+ presetGres: '炻器 (12%)',
171
+ presetPorcelana: '瓷器 (15%)',
172
+ labelResult: '结果',
173
+ labelFinalSize: '最终尺寸:',
174
+ labelLoss: '总缩水量:',
175
+ tipText:
176
+ '要计算获得特定最终尺寸所需的初始尺寸,请将目标尺寸除以 (1 - 缩水率/100)。',
177
+ labelInitialBadge: '初始:',
178
+ labelFinalBadge: 'mm 最终',
179
+ labelLossBadge: '缩小:',
180
+ labelInitialArea: '初始区域',
181
+ labelFinalArea: '最终区域',
182
+ },
183
+ };
@@ -6,10 +6,6 @@ import type { ClayCalculatorUI } from './ui';
6
6
 
7
7
  export type ClayCalculatorLocaleContent = ToolLocaleContent<ClayCalculatorUI>;
8
8
 
9
- import { content as es } from './i18n/es';
10
- import { content as en } from './i18n/en';
11
- import { content as fr } from './i18n/fr';
12
-
13
9
  export const clayCalculator: DiyToolEntry<ClayCalculatorUI> = {
14
10
  id: 'clay-calculator',
15
11
  icons: {
@@ -17,9 +13,21 @@ export const clayCalculator: DiyToolEntry<ClayCalculatorUI> = {
17
13
  fg: 'mdi:resize',
18
14
  },
19
15
  i18n: {
20
- es: async () => es,
21
- en: async () => en,
22
- fr: async () => fr,
16
+ de: () => import('./i18n/de').then((m) => m.content),
17
+ en: () => import('./i18n/en').then((m) => m.content),
18
+ es: () => import('./i18n/es').then((m) => m.content),
19
+ fr: () => import('./i18n/fr').then((m) => m.content),
20
+ id: () => import('./i18n/id').then((m) => m.content),
21
+ it: () => import('./i18n/it').then((m) => m.content),
22
+ ja: () => import('./i18n/ja').then((m) => m.content),
23
+ ko: () => import('./i18n/ko').then((m) => m.content),
24
+ nl: () => import('./i18n/nl').then((m) => m.content),
25
+ pl: () => import('./i18n/pl').then((m) => m.content),
26
+ pt: () => import('./i18n/pt').then((m) => m.content),
27
+ ru: () => import('./i18n/ru').then((m) => m.content),
28
+ sv: () => import('./i18n/sv').then((m) => m.content),
29
+ tr: () => import('./i18n/tr').then((m) => m.content),
30
+ zh: () => import('./i18n/zh').then((m) => m.content),
23
31
  },
24
32
  };
25
33
 
@@ -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 = 'beton-moertel-rechner';
6
+ const title = 'Beton und Mörtelrechner: Exakte Mengen an Zement, Sand und Wasser';
7
+ const description =
8
+ 'Berechnen Sie, wie viele Säcke Zement, Schaufeln Sand und Liter Wasser Sie pro m³ benötigen. Für Fundamente, Bodenplatten, Mauern und Estriche.';
9
+
10
+ const faqData = [
11
+ {
12
+ question: 'Wie viele 25-kg-Säcke Zement passen in einen Kubikmeter?',
13
+ answer:
14
+ 'Für einen Standardbeton (Festigkeitsklasse C20/25) werden ca. 14 Säcke à 25 kg (350 kg) benötigt, um einen Kubikmeter verdichteten Beton herzustellen.',
15
+ },
16
+ {
17
+ question: 'Was ist stärker, Beton oder Mörtel?',
18
+ answer:
19
+ 'Beton (mit Kies) ist strukturell stärker, um große Lasten zu tragen. Mörtel (nur Sand) ist ideal zum Verbinden von Steinen oder zum Verputzen von Oberflächen.',
20
+ },
21
+ {
22
+ question: 'Wie viele Schaufeln sind ein Kubikmeter?',
23
+ answer:
24
+ 'Das hängt von der Größe der Schaufel ab, aber im Allgemeinen rechnet man mit 180-200 Schaufeln Sand pro m³. Unser Rechner übersetzt m³ in empfohlene Schaufeln.',
25
+ },
26
+ {
27
+ question: 'Kann ich die Mischung von Hand ohne Betonmischer herstellen?',
28
+ answer:
29
+ 'Ja, auch wenn es viel mehr körperliche Anstrengung erfordert. Ideal ist es, dies auf einer sauberen und wasserdichten Fläche (Metallplatte oder Trog) zu tun, um kein Wasser zu verlieren.',
30
+ },
31
+ {
32
+ question: 'Warum reißt Beton beim Trocknen?',
33
+ answer:
34
+ 'Meist liegt es an fehlender Feuchtigkeit während des Abbindens (schnelle Verdunstung von Wasser) oder zu viel Wasser in der Mischung. Es wird empfohlen, den Beton an den folgenden Tagen zu wässern.',
35
+ },
36
+ ];
37
+
38
+ const howToData = [
39
+ {
40
+ name: 'Mischungstyp wählen',
41
+ text: 'Wählen Sie aus, ob Sie Beton für Fundamente oder Mörtel für Mauern herstellen wollen.',
42
+ },
43
+ {
44
+ name: 'Volumen in m³ angeben',
45
+ text: 'Geben Sie das Gesamtvolumen ein. Multiplizieren Sie Länge x Breite x Dicke.',
46
+ },
47
+ {
48
+ name: 'Mengen abrufen',
49
+ text: 'Sehen Sie nach, wie viele Säcke, Schaufeln und Liter Sie kaufen müssen.',
50
+ },
51
+ {
52
+ name: 'Proportionen anwenden',
53
+ text: 'Folgen Sie der visuellen Anleitung für Zement, Sand und Kies für eine perfekte Mischung.',
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: 'de',
89
+ };
90
+
91
+ export const content: ToolLocaleContent<ConcreteCalculatorUI> = {
92
+ slug,
93
+ title,
94
+ description,
95
+ faqTitle: 'Häufig gestellte Fragen',
96
+ faq: faqData,
97
+ bibliographyTitle: 'Technische Referenzen',
98
+ bibliography: [
99
+ {
100
+ name: 'DIN EN 206-1: Beton – Festlegung, Eigenschaften, Herstellung und Konformität',
101
+ url: 'https://www.beuth.de/',
102
+ },
103
+ {
104
+ name: 'Concrete Mix Proportioning Standards (ASTM)',
105
+ url: 'https://store.astm.org/astm-bos-04.02.html',
106
+ },
107
+ {
108
+ name: 'Zement-Merkblätter Betontechnik',
109
+ url: 'https://www.beton.org/',
110
+ },
111
+ ],
112
+ howTo: howToData,
113
+ schemas: [faqSchema, howToSchema, appSchema],
114
+ seo: [
115
+ {
116
+ type: 'title',
117
+ text: 'Anleitung zur Dosierung von Beton und Mörtel',
118
+ level: 2,
119
+ },
120
+ {
121
+ type: 'paragraph',
122
+ html: 'Wenn Sie vor einer Renovierung oder einem Bau stehen, ist eine der häufigsten Fragen: <strong>Wie viele Säcke Zement benötige ich für einen Kubikmeter Beton?</strong>. Es geht nicht nur darum, Zutaten zu mischen; die endgültige Festigkeit der Struktur hängt direkt von der Genauigkeit der Proportionen von Zement, Sand, Kies und Wasser ab. Unser Rechner übersetzt industrielle Maße in praktische Baustelleneinheiten: 25-kg-Säcke, Schaufeln und Liter.',
123
+ },
124
+ {
125
+ type: 'card',
126
+ icon: 'mdi:water-alert',
127
+ title: 'Zu viel Wasser schwächt den Beton',
128
+ html: '<p>Ein sehr häufiger Fehler ist die Zugabe von zu viel Wasser, damit der Beton besser fließt. Überschüssiges Wasser bildet beim Verdunsten während des Abbindens Poren, was die Endfestigkeit drastisch reduziert. Die ideale Konsistenz sollte wie eine <strong>dicke Paste sein, nicht flüssig</strong>. Verwenden Sie so wenig Wasser wie möglich.</p>',
129
+ },
130
+ {
131
+ type: 'title',
132
+ text: 'Standardproportionen je nach Verwendung',
133
+ level: 3,
134
+ },
135
+ {
136
+ type: 'paragraph',
137
+ html: 'Die <strong>Betondosierung</strong> variiert je nach Verwendung. Für <strong>Beton C20/25</strong> (Fundamente und Bodenplatten) ist das Verhältnis 1 Teil Zement, 2,5 Teile Sand und 3 Teile Kies. Für <strong>Mauermörtel</strong> (Wände) ist es 1 Teil Zement und 4 Teile Sand. Für <strong>Estrichmörtel</strong> (Bodenbeläge) ist es 1 Teil Zement und 3 Teile Sand. Beton mit Kies hält mehr Last aus; Mörtel nur mit Sand ist ideal zum Verbinden und Verputzen.',
138
+ },
139
+ {
140
+ type: 'title',
141
+ text: 'So berechnen Sie die benötigten m³',
142
+ level: 3,
143
+ },
144
+ {
145
+ type: 'card',
146
+ icon: 'mdi:calculator-variant',
147
+ title: 'Berechnungsbeispiel für eine Bodenplatte',
148
+ html: '<p>Für eine Gartenplatte von 4m Länge, 3m Breite und 15cm Dicke: <strong>4 × 3 × 0,15 = 1,80 m³</strong>. Unser Rechner führt diese Operation automatisch aus, wenn Sie die Maße im Abschnitt "Nach Maßen" eingeben.</p><p>Denken Sie immer daran, <strong>10 % zusätzlich zu kaufen</strong>, um Verluste durch Verschütten oder Bodenunebenheiten auszugleichen.</p>',
149
+ },
150
+ {
151
+ type: 'title',
152
+ text: 'Mischreihenfolge und Dosierung nach Säcken',
153
+ level: 3,
154
+ },
155
+ {
156
+ type: 'paragraph',
157
+ html: 'Auf Baustellen spricht man oft von einer <strong>"300er Mischung"</strong>: 300 kg Zement pro Kubikmeter fertigem Beton. Für ein korrektes Mischen im Betonmischer: zuerst das Wasser, dann Kies und Sand (um Klumpen zu lösen) und zuletzt der Zement, der schrittweise hinzugefügt wird.',
158
+ },
159
+ {
160
+ type: 'card',
161
+ icon: 'mdi:package-variant-closed',
162
+ title: 'Die 10 Prozent Regel, um Fehlmengen zu vermeiden',
163
+ html: '<p>Kaufen Sie immer <strong>10 % mehr Material</strong> als berechnet, um Verluste durch Verschütten, Unregelmäßigkeiten im Gelände oder Schwankungen im tatsächlichen Volumen der feuchten Zuschlagstoffe auszugleichen. Es ist viel billiger, als eine zweite Bestellung aufgeben zu müssen, während der Bau stillsteht.</p>',
164
+ },
165
+ ],
166
+ ui: {
167
+ mixH200Label: 'Standardbeton',
168
+ mixH200Hint: 'Ideal für Fundamente und Bodenplatten',
169
+ mixM40Label: 'Mauermörtel',
170
+ mixM40Hint: 'Für Mauern und Trennwände',
171
+ mixM80Label: 'Starker Estrich',
172
+ mixM80Hint: 'Für Böden und starken Putz',
173
+ modeDimsLabel: 'Nach Maßen',
174
+ modeDirectLabel: 'Direkte m³',
175
+ labelLength: 'Länge',
176
+ labelWidth: 'Breite',
177
+ labelThickness: 'Dicke',
178
+ labelVolume: 'Gesamtvolumen (m³)',
179
+ binderCementLabel: 'Zement',
180
+ binderLimeLabel: 'Kalk',
181
+ summaryLabel: 'Gesamtfüllmenge:',
182
+ resUnitSacks: 'Säcke (25kg)',
183
+ resUnitShovels: 'Schaufeln',
184
+ resUnitLitres: 'Liter',
185
+ resLabelCement: 'Portlandzement',
186
+ resLabelLime: 'Hydraulischer Kalk',
187
+ resLabelSand: 'Sand / Zuschläge',
188
+ resLabelWater: 'Trinkwasser',
189
+ proportionsTitle: 'Proportionen der gewählten Mischung',
190
+ propLabelSand: 'Sand',
191
+ propLabelGravel: 'Kies',
192
+ adviceH200: 'Ideal für Pfeiler, Bodenplatten und tragende Strukturen.',
193
+ adviceM40: 'Perfekt zum Errichten von Ziegel- oder Blockwänden.',
194
+ adviceM80: 'Verwenden Sie dies für sehr widerstandsfähige Estriche.',
195
+ adviceLimeH200: 'Kalkbeton ist flexibler, braucht aber länger zum Abbinden.',
196
+ priceTotalLabel: 'Geschätztes Budget',
197
+ priceSackLabel: 'Sack',
198
+ priceSandLabel: 'Sand (m³)',
199
+ priceDisclaimer: 'Unverbindliche Marktpreise. Passen Sie diese gemäß Ihrem lokalen Anbieter an.',
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 = 'kalkulator-beton-mortar';
6
+ const title = 'Kalkulator Beton dan Mortar: Jumlah Tepat Semen, Pasir, dan Air';
7
+ const description =
8
+ 'Hitung berapa sak semen, sekop pasir, dan liter air yang Anda butuhkan per m³. Untuk fondasi, lantai, dinding, dan screed. Panduan dosis teknis.';
9
+
10
+ const faqData = [
11
+ {
12
+ question: 'Berapa sak semen 25kg dalam satu meter kubik?',
13
+ answer:
14
+ 'Untuk beton standar (kekuatan K-200), dibutuhkan sekitar 14 sak semen ukuran 25kg (350kg) untuk membuat satu meter kubik campuran yang dipadatkan.',
15
+ },
16
+ {
17
+ question: 'Mana yang lebih kuat, beton atau mortar?',
18
+ answer:
19
+ 'Beton (dengan kerikil) lebih kuat secara struktural untuk menahan beban besar. Mortar (hanya pasir) ideal untuk menyatukan bagian-bagian atau memplester permukaan.',
20
+ },
21
+ {
22
+ question: 'Berapa sekop dalam satu meter kubik?',
23
+ answer:
24
+ 'Tergantung pada ukuran sekopnya, tetapi secara umum dihitung 180-200 sekop pasir per m³. Kalkulator kami menerjemahkan m³ menjadi saran jumlah sekop.',
25
+ },
26
+ {
27
+ question: 'Dapatkah saya membuat campuran secara manual tanpa molen?',
28
+ answer:
29
+ 'Ya, meskipun membutuhkan usaha fisik yang jauh lebih besar. Idealnya dilakukan di atas permukaan yang bersih dan kedap air (pelat logam atau bak) agar tidak kehilangan air.',
30
+ },
31
+ {
32
+ question: 'Mengapa beton retak saat kering?',
33
+ answer:
34
+ 'Seringkali karena kurangnya kelembapan selama proses pengerasan (kehilangan air yang cepat) atau terlalu banyak air dalam campuran. Disarankan untuk menyiram beton pada hari-hari berikutnya.',
35
+ },
36
+ ];
37
+
38
+ const howToData = [
39
+ {
40
+ name: 'Pilih Jenis Campuran',
41
+ text: 'Pilih apakah Anda akan membuat beton untuk fondasi atau mortar untuk dinding.',
42
+ },
43
+ {
44
+ name: 'Tentukan Volume dalam m³',
45
+ text: 'Masukkan total volume. Kalikan panjang x lebar x tebal.',
46
+ },
47
+ {
48
+ name: 'Lihat Jumlah yang Dibutuhkan',
49
+ text: 'Lihat berapa sak, sekop, dan liter yang perlu Anda beli.',
50
+ },
51
+ {
52
+ name: 'Terapkan Proposi',
53
+ text: 'Ikuti panduan visual semen, pasir, dan kerikil untuk campuran yang sempurna.',
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: 'id',
89
+ };
90
+
91
+ export const content: ToolLocaleContent<ConcreteCalculatorUI> = {
92
+ slug,
93
+ title,
94
+ description,
95
+ faqTitle: 'Pertanyaan Umum',
96
+ faq: faqData,
97
+ bibliographyTitle: 'Referensi Teknis',
98
+ bibliography: [
99
+ {
100
+ name: 'SNI 2847:2019 - Persyaratan Beton Struktural untuk Bangunan Gedung (Indonesia)',
101
+ url: 'https://www.bsn.go.id/',
102
+ },
103
+ {
104
+ name: 'Concrete Mix Proportioning Standards (ASTM)',
105
+ url: 'https://store.astm.org/astm-bos-04.02.html',
106
+ },
107
+ {
108
+ name: 'Panduan Dosis Mortar Semen',
109
+ url: 'https://id.wikipedia.org/wiki/Mortar',
110
+ },
111
+ ],
112
+ howTo: howToData,
113
+ schemas: [faqSchema, howToSchema, appSchema],
114
+ seo: [
115
+ {
116
+ type: 'title',
117
+ text: 'Panduan Takaran untuk Beton dan Mortar',
118
+ level: 2,
119
+ },
120
+ {
121
+ type: 'paragraph',
122
+ html: 'Saat menghadapi renovasi atau konstruksi, salah satu pertanyaan yang paling sering muncul adalah <strong>berapa sak semen yang saya butuhkan untuk satu meter kubik beton?</strong>. Ini bukan sekadar mencampur bahan; kekuatan akhir struktur sangat bergantung pada ketepatan proporsi semen, pasir, kerikil, dan air. Kalkulator kami menerjemahkan ukuran industri ke dalam unit praktis lapangan: sak 25kg, sekop, dan liter.',
123
+ },
124
+ {
125
+ type: 'card',
126
+ icon: 'mdi:water-alert',
127
+ title: 'Kelebihan Air Melemahkan Beton',
128
+ html: '<p>Kesalahan yang sangat umum adalah menambahkan terlalu banyak air agar beton lebih mudah mengalir. Kelebihan air menciptakan pori-pori saat menguap selama proses pengerasan, yang secara drastis mengurangi kekuatan akhir. Konsistensi yang ideal harus seperti <strong>pasta kental, bukan cair</strong>. Gunakan air sesedikit mungkin.</p>',
129
+ },
130
+ {
131
+ type: 'title',
132
+ text: 'Proporsi Standar Menurut Penggunaan',
133
+ level: 3,
134
+ },
135
+ {
136
+ type: 'paragraph',
137
+ html: '<strong>Takaran beton</strong> bervariasi sesuai dengan penggunaannya. Untuk <strong>Beton K-200</strong> (fondasi dan lantai kerja) proporsinya adalah 1 bagian semen, 2.5 bagian pasir, dan 3 bagian kerikil. Untuk <strong>Mortar M-40</strong> (dinding dan sekat) adalah 1 bagian semen dan 4 bagian pasir. Untuk <strong>Mortar M-80</strong> (screed lantai) adalah 1 bagian semen dan 3 bagian pasir. Beton dengan kerikil menahan lebih banyak beban; mortar hanya pasir ideal untuk menyatukan dan memplester.',
138
+ },
139
+ {
140
+ type: 'title',
141
+ text: 'Cara Menghitung m³ yang Anda Butuhkan',
142
+ level: 3,
143
+ },
144
+ {
145
+ type: 'card',
146
+ icon: 'mdi:calculator-variant',
147
+ title: 'Contoh Perhitungan untuk Lantai Kerja',
148
+ html: '<p>Untuk lantai taman dengan panjang 4m, lebar 3m, dan tebal 15cm: <strong>4 × 3 × 0.15 = 1.80 m³</strong>. Kalkulator kami melakukan operasi ini secara otomatis jika Anda memasukkan dimensi di bagian "Berdasarkan Ukuran".</p><p>Ingatlah untuk selalu <strong>membeli tambahan 10%</strong> untuk mengompensasi kehilangan akibat tumpahan atau variasi pada permukaan tanah.</p>',
149
+ },
150
+ {
151
+ type: 'title',
152
+ text: 'Urutan Pencampuran dan Takaran Per Sak',
153
+ level: 3,
154
+ },
155
+ {
156
+ type: 'paragraph',
157
+ html: 'Di lapangan sering disebut <strong>"campuran 300 kilo"</strong>: 300kg semen untuk setiap meter kubik beton jadi. Untuk pencampuran yang benar dalam molen: pertama air, kemudian kerikil dan pasir (untuk mengurai gumpalan), dan terakhir semen yang ditambahkan secara bertahap.',
158
+ },
159
+ {
160
+ type: 'card',
161
+ icon: 'mdi:package-variant-closed',
162
+ title: 'Aturan 10% untuk Menghindari Kekurangan Bahan',
163
+ html: '<p>Selalu beli <strong>10% bahan lebih banyak</strong> dari yang dihitung untuk mengompensasi kehilangan akibat tumpahan, ketidakteraturan medan, atau variasi volume riil agregat yang lembap. Ini jauh lebih murah daripada harus melakukan pemesanan kedua saat pekerjaan sedang berhenti.</p>',
164
+ },
165
+ ],
166
+ ui: {
167
+ mixH200Label: 'Beton Standar',
168
+ mixH200Hint: 'Ideal untuk fondasi dan lantai kerja',
169
+ mixM40Label: 'Mortar Pasangan Bata',
170
+ mixM40Hint: 'Untuk dinding dan sekat',
171
+ mixM80Label: 'Screed Kuat',
172
+ mixM80Hint: 'Untuk lantai dan plesteran kuat',
173
+ modeDimsLabel: 'Berdasarkan Ukuran',
174
+ modeDirectLabel: 'm³ Langsung',
175
+ labelLength: 'Panjang',
176
+ labelWidth: 'Lebar',
177
+ labelThickness: 'Tebal',
178
+ labelVolume: 'Volume Total (m³)',
179
+ binderCementLabel: 'Semen',
180
+ binderLimeLabel: 'Kapur',
181
+ summaryLabel: 'Total yang akan diisi:',
182
+ resUnitSacks: 'Sak (25kg)',
183
+ resUnitShovels: 'Sekop',
184
+ resUnitLitres: 'Liter',
185
+ resLabelCement: 'Semen Portland',
186
+ resLabelLime: 'Kapur Hidrolik',
187
+ resLabelSand: 'Pasir / Agregat',
188
+ resLabelWater: 'Air Bersih',
189
+ proportionsTitle: 'Proporsi Campuran yang Dipilih',
190
+ propLabelSand: 'Pasir',
191
+ propLabelGravel: 'Kerikil',
192
+ adviceH200: 'Ideal untuk pilar, lantai kerja, dan struktur penahan beban.',
193
+ adviceM40: 'Sempurna untuk memasang dinding bata atau batako.',
194
+ adviceM80: 'Gunakan ini untuk screed lantai yang sangat tahan lama.',
195
+ adviceLimeH200: 'Beton kapur lebih fleksibel tetapi membutuhkan waktu lebih lama untuk mengeras.',
196
+ priceTotalLabel: 'Estimasi Anggaran',
197
+ priceSackLabel: 'Sak',
198
+ priceSandLabel: 'Pasir (m³)',
199
+ priceDisclaimer: 'Harga pasar sebagai referensi. Sesuaikan dengan pemasok lokal Anda.',
200
+ },
201
+ };