@jjlmoya/utils-diy 1.3.0 → 1.5.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 (193) 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/index.ts +1 -1
  16. package/src/tests/category_validation.test.ts +18 -0
  17. package/src/tests/faq_count.test.ts +1 -1
  18. package/src/tests/i18n_coverage.test.ts +36 -0
  19. package/src/tests/locale_completeness.test.ts +2 -2
  20. package/src/tests/seo_length.test.ts +3 -0
  21. package/src/tests/slug_language_code_format.test.ts +23 -0
  22. package/src/tests/slug_uniqueness.test.ts +81 -0
  23. package/src/tool/balusterCalculator/i18n/de.ts +264 -0
  24. package/src/tool/balusterCalculator/i18n/id.ts +264 -0
  25. package/src/tool/balusterCalculator/i18n/it.ts +264 -0
  26. package/src/tool/balusterCalculator/i18n/ja.ts +264 -0
  27. package/src/tool/balusterCalculator/i18n/ko.ts +264 -0
  28. package/src/tool/balusterCalculator/i18n/nl.ts +264 -0
  29. package/src/tool/balusterCalculator/i18n/pl.ts +264 -0
  30. package/src/tool/balusterCalculator/i18n/pt.ts +264 -0
  31. package/src/tool/balusterCalculator/i18n/ru.ts +264 -0
  32. package/src/tool/balusterCalculator/i18n/sv.ts +264 -0
  33. package/src/tool/balusterCalculator/i18n/tr.ts +264 -0
  34. package/src/tool/balusterCalculator/i18n/zh.ts +264 -0
  35. package/src/tool/balusterCalculator/index.ts +15 -7
  36. package/src/tool/clayCalculator/i18n/de.ts +183 -0
  37. package/src/tool/clayCalculator/i18n/id.ts +183 -0
  38. package/src/tool/clayCalculator/i18n/it.ts +183 -0
  39. package/src/tool/clayCalculator/i18n/ja.ts +182 -0
  40. package/src/tool/clayCalculator/i18n/ko.ts +183 -0
  41. package/src/tool/clayCalculator/i18n/nl.ts +183 -0
  42. package/src/tool/clayCalculator/i18n/pl.ts +183 -0
  43. package/src/tool/clayCalculator/i18n/pt.ts +183 -0
  44. package/src/tool/clayCalculator/i18n/ru.ts +183 -0
  45. package/src/tool/clayCalculator/i18n/sv.ts +183 -0
  46. package/src/tool/clayCalculator/i18n/tr.ts +183 -0
  47. package/src/tool/clayCalculator/i18n/zh.ts +183 -0
  48. package/src/tool/clayCalculator/index.ts +15 -7
  49. package/src/tool/concreteCalculator/i18n/de.ts +201 -0
  50. package/src/tool/concreteCalculator/i18n/id.ts +201 -0
  51. package/src/tool/concreteCalculator/i18n/it.ts +201 -0
  52. package/src/tool/concreteCalculator/i18n/ja.ts +201 -0
  53. package/src/tool/concreteCalculator/i18n/ko.ts +201 -0
  54. package/src/tool/concreteCalculator/i18n/nl.ts +201 -0
  55. package/src/tool/concreteCalculator/i18n/pl.ts +201 -0
  56. package/src/tool/concreteCalculator/i18n/pt.ts +201 -0
  57. package/src/tool/concreteCalculator/i18n/ru.ts +201 -0
  58. package/src/tool/concreteCalculator/i18n/sv.ts +201 -0
  59. package/src/tool/concreteCalculator/i18n/tr.ts +201 -0
  60. package/src/tool/concreteCalculator/i18n/zh.ts +201 -0
  61. package/src/tool/concreteCalculator/index.ts +17 -5
  62. package/src/tool/cutOptimizer/i18n/de.ts +178 -0
  63. package/src/tool/cutOptimizer/i18n/id.ts +178 -0
  64. package/src/tool/cutOptimizer/i18n/it.ts +178 -0
  65. package/src/tool/cutOptimizer/i18n/ja.ts +178 -0
  66. package/src/tool/cutOptimizer/i18n/ko.ts +178 -0
  67. package/src/tool/cutOptimizer/i18n/nl.ts +178 -0
  68. package/src/tool/cutOptimizer/i18n/pl.ts +178 -0
  69. package/src/tool/cutOptimizer/i18n/pt.ts +178 -0
  70. package/src/tool/cutOptimizer/i18n/ru.ts +178 -0
  71. package/src/tool/cutOptimizer/i18n/sv.ts +178 -0
  72. package/src/tool/cutOptimizer/i18n/tr.ts +178 -0
  73. package/src/tool/cutOptimizer/i18n/zh.ts +178 -0
  74. package/src/tool/cutOptimizer/index.ts +17 -5
  75. package/src/tool/drillCalculator/i18n/de.ts +137 -0
  76. package/src/tool/drillCalculator/i18n/id.ts +137 -0
  77. package/src/tool/drillCalculator/i18n/it.ts +137 -0
  78. package/src/tool/drillCalculator/i18n/ja.ts +137 -0
  79. package/src/tool/drillCalculator/i18n/ko.ts +137 -0
  80. package/src/tool/drillCalculator/i18n/nl.ts +137 -0
  81. package/src/tool/drillCalculator/i18n/pl.ts +137 -0
  82. package/src/tool/drillCalculator/i18n/pt.ts +137 -0
  83. package/src/tool/drillCalculator/i18n/ru.ts +137 -0
  84. package/src/tool/drillCalculator/i18n/sv.ts +137 -0
  85. package/src/tool/drillCalculator/i18n/tr.ts +137 -0
  86. package/src/tool/drillCalculator/i18n/zh.ts +137 -0
  87. package/src/tool/drillCalculator/index.ts +17 -5
  88. package/src/tool/drillSharpener/i18n/de.ts +120 -0
  89. package/src/tool/drillSharpener/i18n/id.ts +120 -0
  90. package/src/tool/drillSharpener/i18n/it.ts +120 -0
  91. package/src/tool/drillSharpener/i18n/ja.ts +120 -0
  92. package/src/tool/drillSharpener/i18n/ko.ts +120 -0
  93. package/src/tool/drillSharpener/i18n/nl.ts +120 -0
  94. package/src/tool/drillSharpener/i18n/pl.ts +120 -0
  95. package/src/tool/drillSharpener/i18n/pt.ts +120 -0
  96. package/src/tool/drillSharpener/i18n/ru.ts +120 -0
  97. package/src/tool/drillSharpener/i18n/sv.ts +120 -0
  98. package/src/tool/drillSharpener/i18n/tr.ts +120 -0
  99. package/src/tool/drillSharpener/i18n/zh.ts +120 -0
  100. package/src/tool/drillSharpener/index.ts +17 -5
  101. package/src/tool/epoxyCalculator/i18n/de.ts +118 -0
  102. package/src/tool/epoxyCalculator/i18n/id.ts +118 -0
  103. package/src/tool/epoxyCalculator/i18n/it.ts +118 -0
  104. package/src/tool/epoxyCalculator/i18n/ja.ts +118 -0
  105. package/src/tool/epoxyCalculator/i18n/ko.ts +118 -0
  106. package/src/tool/epoxyCalculator/i18n/nl.ts +118 -0
  107. package/src/tool/epoxyCalculator/i18n/pl.ts +118 -0
  108. package/src/tool/epoxyCalculator/i18n/pt.ts +118 -0
  109. package/src/tool/epoxyCalculator/i18n/ru.ts +118 -0
  110. package/src/tool/epoxyCalculator/i18n/sv.ts +118 -0
  111. package/src/tool/epoxyCalculator/i18n/tr.ts +118 -0
  112. package/src/tool/epoxyCalculator/i18n/zh.ts +118 -0
  113. package/src/tool/epoxyCalculator/index.ts +15 -7
  114. package/src/tool/furnitureFit/i18n/de.ts +113 -0
  115. package/src/tool/furnitureFit/i18n/id.ts +113 -0
  116. package/src/tool/furnitureFit/i18n/it.ts +113 -0
  117. package/src/tool/furnitureFit/i18n/ja.ts +113 -0
  118. package/src/tool/furnitureFit/i18n/ko.ts +113 -0
  119. package/src/tool/furnitureFit/i18n/nl.ts +113 -0
  120. package/src/tool/furnitureFit/i18n/pl.ts +113 -0
  121. package/src/tool/furnitureFit/i18n/pt.ts +113 -0
  122. package/src/tool/furnitureFit/i18n/ru.ts +113 -0
  123. package/src/tool/furnitureFit/i18n/sv.ts +113 -0
  124. package/src/tool/furnitureFit/i18n/tr.ts +113 -0
  125. package/src/tool/furnitureFit/i18n/zh.ts +113 -0
  126. package/src/tool/furnitureFit/index.ts +17 -5
  127. package/src/tool/mortarCalculator/i18n/de.ts +129 -0
  128. package/src/tool/mortarCalculator/i18n/id.ts +129 -0
  129. package/src/tool/mortarCalculator/i18n/it.ts +129 -0
  130. package/src/tool/mortarCalculator/i18n/ja.ts +129 -0
  131. package/src/tool/mortarCalculator/i18n/ko.ts +129 -0
  132. package/src/tool/mortarCalculator/i18n/nl.ts +129 -0
  133. package/src/tool/mortarCalculator/i18n/pl.ts +129 -0
  134. package/src/tool/mortarCalculator/i18n/pt.ts +129 -0
  135. package/src/tool/mortarCalculator/i18n/ru.ts +129 -0
  136. package/src/tool/mortarCalculator/i18n/sv.ts +129 -0
  137. package/src/tool/mortarCalculator/i18n/tr.ts +129 -0
  138. package/src/tool/mortarCalculator/i18n/zh.ts +129 -0
  139. package/src/tool/mortarCalculator/index.ts +17 -5
  140. package/src/tool/passepartoutCalculator/i18n/de.ts +108 -0
  141. package/src/tool/passepartoutCalculator/i18n/id.ts +108 -0
  142. package/src/tool/passepartoutCalculator/i18n/it.ts +108 -0
  143. package/src/tool/passepartoutCalculator/i18n/ja.ts +108 -0
  144. package/src/tool/passepartoutCalculator/i18n/ko.ts +108 -0
  145. package/src/tool/passepartoutCalculator/i18n/nl.ts +108 -0
  146. package/src/tool/passepartoutCalculator/i18n/pl.ts +108 -0
  147. package/src/tool/passepartoutCalculator/i18n/pt.ts +108 -0
  148. package/src/tool/passepartoutCalculator/i18n/ru.ts +108 -0
  149. package/src/tool/passepartoutCalculator/i18n/sv.ts +108 -0
  150. package/src/tool/passepartoutCalculator/i18n/tr.ts +108 -0
  151. package/src/tool/passepartoutCalculator/i18n/zh.ts +108 -0
  152. package/src/tool/passepartoutCalculator/index.ts +17 -5
  153. package/src/tool/stairCalculator/i18n/de.ts +144 -0
  154. package/src/tool/stairCalculator/i18n/id.ts +144 -0
  155. package/src/tool/stairCalculator/i18n/it.ts +144 -0
  156. package/src/tool/stairCalculator/i18n/ja.ts +144 -0
  157. package/src/tool/stairCalculator/i18n/ko.ts +144 -0
  158. package/src/tool/stairCalculator/i18n/nl.ts +144 -0
  159. package/src/tool/stairCalculator/i18n/pl.ts +144 -0
  160. package/src/tool/stairCalculator/i18n/pt.ts +144 -0
  161. package/src/tool/stairCalculator/i18n/ru.ts +144 -0
  162. package/src/tool/stairCalculator/i18n/sv.ts +144 -0
  163. package/src/tool/stairCalculator/i18n/tr.ts +144 -0
  164. package/src/tool/stairCalculator/i18n/zh.ts +144 -0
  165. package/src/tool/stairCalculator/index.ts +17 -5
  166. package/src/tool/thermalExpansionCalculator/i18n/de.ts +132 -0
  167. package/src/tool/thermalExpansionCalculator/i18n/id.ts +130 -0
  168. package/src/tool/thermalExpansionCalculator/i18n/it.ts +130 -0
  169. package/src/tool/thermalExpansionCalculator/i18n/ja.ts +130 -0
  170. package/src/tool/thermalExpansionCalculator/i18n/ko.ts +130 -0
  171. package/src/tool/thermalExpansionCalculator/i18n/nl.ts +130 -0
  172. package/src/tool/thermalExpansionCalculator/i18n/pl.ts +130 -0
  173. package/src/tool/thermalExpansionCalculator/i18n/pt.ts +130 -0
  174. package/src/tool/thermalExpansionCalculator/i18n/ru.ts +130 -0
  175. package/src/tool/thermalExpansionCalculator/i18n/sv.ts +130 -0
  176. package/src/tool/thermalExpansionCalculator/i18n/tr.ts +130 -0
  177. package/src/tool/thermalExpansionCalculator/i18n/zh.ts +130 -0
  178. package/src/tool/thermalExpansionCalculator/index.ts +17 -5
  179. package/src/tool/voltageDropCalculator/i18n/de.ts +112 -0
  180. package/src/tool/voltageDropCalculator/i18n/id.ts +110 -0
  181. package/src/tool/voltageDropCalculator/i18n/it.ts +110 -0
  182. package/src/tool/voltageDropCalculator/i18n/ja.ts +110 -0
  183. package/src/tool/voltageDropCalculator/i18n/ko.ts +110 -0
  184. package/src/tool/voltageDropCalculator/i18n/nl.ts +110 -0
  185. package/src/tool/voltageDropCalculator/i18n/pl.ts +110 -0
  186. package/src/tool/voltageDropCalculator/i18n/pt.ts +110 -0
  187. package/src/tool/voltageDropCalculator/i18n/ru.ts +110 -0
  188. package/src/tool/voltageDropCalculator/i18n/sv.ts +110 -0
  189. package/src/tool/voltageDropCalculator/i18n/tr.ts +110 -0
  190. package/src/tool/voltageDropCalculator/i18n/zh.ts +110 -0
  191. package/src/tool/voltageDropCalculator/index.ts +17 -5
  192. package/src/tools.ts +2 -0
  193. package/src/types.ts +1 -1
@@ -0,0 +1,120 @@
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { DrillSharpenerUI } from '../ui';
4
+
5
+ const slug = 'usta-matkap-bileme';
6
+ const title = 'Usta Matkap Bileme: Hassas Mastar';
7
+ const description = 'HSS matkap uçlarını bilemek için etkileşimli kılavuz. 118° ve 135° açılarını kontrol etmek için ekranda dijital mastar. RPM hesaplar ve kesme hatalarını teşhis eder.';
8
+
9
+ const faqData = [
10
+ {
11
+ question: 'Matkabı doğrudan ekranın üzerine koyabilir miyim?',
12
+ answer: 'Evet, araç, matkap şaftını dijital mastarın merkez hattına dayamanız ve kesici ağızların simetrisini doğrudan doğrulamanız için tasarlanmıştır.',
13
+ },
14
+ {
15
+ question: 'Boşluk açısının (serbest açı) doğru olduğunu nasıl anlarım?',
16
+ answer: 'Matkabı döndürdüğünüzde, kesici ağzın arka kısmı belirgin şekilde daha alçakta görünmelidir. Ucun tamamında metalin eşit şekilde parladığını görüyorsanız, boşluk açısı (destalonar) eksiktir.',
17
+ },
18
+ {
19
+ question: 'Bileme işleminden sonra hangi devri kullanmalıyım?',
20
+ answer: 'Çapa bağlıdır; entegre hesaplayıcımız, ilk adımda seçtiğiniz malzemeye göre size tam veriyi verecektir.',
21
+ },
22
+ {
23
+ question: 'HSS ile Karbür arasındaki fark nedir?',
24
+ answer: 'HSS (Yüksek Hız Çeliği) daha ekonomik ve darbelere dayanıklıdır. Karbür daha yüksek hızlara dayanır ancak daha kırılgandır. Manuel bileme için HSS standarttır.',
25
+ },
26
+ {
27
+ question: 'Bilemek için özel bir ekipmana ihtiyacım var mı?',
28
+ answer: 'Orta kumlu (120-150) dönen bir zımpara taşı yeterlidir. Önemli olan, tutarlı sonuçlar elde etmek için taşın dengeli ve düz tutulmasıdır.',
29
+ },
30
+ ];
31
+
32
+ const howToData = [
33
+ { name: 'Malzeme Seçin', text: 'Hedef açıyı ve kesme hızını belirlemek için deleceğiniz metali veya malzemeyi seçin.' },
34
+ { name: 'Simetriyi Doğrulayın', text: 'Matkabı ekrana dayayın ve her iki kesici ağzın da mavi çizgilerle eşleştiğinden emin olun.' },
35
+ { name: 'Topuk Kısmını Kontrol Edin', text: 'Kesici ağzın arka kısmının iş parçasına sürtünmediğini görsel olarak kontrol edin (boşluk açısı).' },
36
+ { name: 'RPM Hesaplayın', text: 'Çapı girin ve matkabınızı seçilen malzeme için önerilen hıza ayarlayın.' },
37
+ ];
38
+
39
+ const faqSchema: WithContext<FAQPage> = {
40
+ '@context': 'https://schema.org',
41
+ '@type': 'FAQPage',
42
+ mainEntity: faqData.map((item) => ({
43
+ '@type': 'Question',
44
+ name: item.question,
45
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
46
+ })),
47
+ };
48
+
49
+ const howToSchema: WithContext<HowToThing> = {
50
+ '@context': 'https://schema.org',
51
+ '@type': 'HowTo',
52
+ name: title,
53
+ description,
54
+ step: howToData.map((step, i) => ({
55
+ '@type': 'HowToStep',
56
+ position: i + 1,
57
+ name: step.name,
58
+ text: step.text,
59
+ })),
60
+ };
61
+
62
+ const appSchema: WithContext<SoftwareApplication> = {
63
+ '@context': 'https://schema.org',
64
+ '@type': 'SoftwareApplication',
65
+ name: title,
66
+ description,
67
+ applicationCategory: 'UtilityApplication',
68
+ operatingSystem: 'All',
69
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
70
+ inLanguage: 'tr',
71
+ };
72
+
73
+ export const content: ToolLocaleContent<DrillSharpenerUI> = {
74
+ slug,
75
+ title,
76
+ description,
77
+ faqTitle: 'Sıkça Sorulan Sorular',
78
+ faq: faqData,
79
+ bibliographyTitle: 'Teknik Referanslar',
80
+ bibliography: [
81
+ { name: 'Atölye El Kitabı - Matkap Bileme (PDF)', url: 'https://tr.wikipedia.org/wiki/Matkap_ucu#Bileme' },
82
+ { name: 'Metal Teknolojisi - Matkap Açıları', url: 'https://www.google.com/search?q=matkap+bileme+acilari' },
83
+ ],
84
+ howTo: howToData,
85
+ schemas: [faqSchema, howToSchema, appSchema],
86
+ seo: [
87
+ { type: 'title', text: 'Usta Matkap Bileme: Profesyonel Teknik', level: 2 },
88
+ { type: 'paragraph', html: 'Matkap ucu bileme, her atölyedeki en değerli becerilerden biridir. Doğru bilenmiş bir matkap, delik kalitesini artırır, elektrikli aletlerinizin ömrünü korur ve operatör güvenliğini sağlar.' },
89
+ { type: 'title', text: 'Bilemenin Temelleri: Uç Açısı', level: 3 },
90
+ { type: 'paragraph', html: 'Uç açısı, matkabın malzemeye nasıl saldırdığını tanımlar. Standart açılar yumuşak çelikler için 118°, paslanmaz için 135° ve sert çelikler için 140°\'dir. Her malzeme, dayanıklılıktan ödün vermeden penetrasyonu maksimize etmek için farklı bir açı gerektirir.' },
91
+ { type: 'title', text: 'En Çok Unutulan: Boşluk Açısı', level: 3 },
92
+ { type: 'paragraph', html: 'En yaygın hata, boşluk açısını veya serbest açıyı görmezden gelmektir. Kesici ağzın arka yüzü düzse, matkap sadece sürtecek ve aşırı ısı üretecektir. Çözüm, ağzın arka kısmını hafifçe aşağıya doğru taşlamaktır.' },
93
+ ],
94
+ ui: {
95
+ labelMaterial: 'İş malzemesi',
96
+ matSteel: 'Çelik',
97
+ matInox: 'Paslanmaz',
98
+ matHard: 'Sertler',
99
+ matBrass: 'Pirinç',
100
+ matPlastic: 'Plastik',
101
+ matWood: 'Ahşap',
102
+ labelDiameter: 'Matkap çapı (mm)',
103
+ unitMm: 'mm',
104
+ btnMinus: '-',
105
+ btnPlus: '+',
106
+ labelVelocity: 'Hız',
107
+ unitRpm: 'RPM',
108
+ labelCooling: 'Kesim',
109
+ btnDiagnosis: 'İyi kesmiyor mu? Teşhis',
110
+ diagTitle: 'Arıza Teşhisi',
111
+ diagClose: 'Kapat',
112
+ diagIssue1: '1. Duman çıkarıyor ve delip geçmiyor',
113
+ diagIssue1Desc: 'Boşluk Açısı eksik. Kesici ağzın arkasındaki metal parçaya sürtüyor. Ağzın en yüksek nokta olması için arka kısmı aşağıya doğru taşlayın.',
114
+ diagIssue2: '2. Eksantrik veya daha büyük delik',
115
+ diagIssue2Desc: 'Uç merkezlenmemiş. Kesici ağızların uzunlukları farklı. Ucun mastarın tam merkezine değdiğinden emin olun.',
116
+ diagIssue3: '3. Kesici ağızlar yanmış (Mavi)',
117
+ diagIssue3Desc: 'Aşırı hız. Bu çap ve malzeme için aletin RPM hesaplamasını kontrol edin.',
118
+ gaugeInstruction: 'ŞAFTI DİKEY ÇİZGİYE DAYAYIN',
119
+ },
120
+ };
@@ -0,0 +1,120 @@
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { DrillSharpenerUI } from '../ui';
4
+
5
+ const slug = 'drill-sharpening-master';
6
+ const title = '钻头修磨大师:精密数字规';
7
+ const description = 'HSS 高速钢钻头修磨交互指南。屏幕数字规可校验 118° 和 135° 角度。计算 RPM 并诊断切削错误。';
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: 'HSS 和硬质合金(钨钢)有什么区别?',
24
+ answer: 'HSS(高速钢)更经济且耐冲击。硬质合金能承受更高速度但更脆。对于手工修磨,HSS 是标准选择。',
25
+ },
26
+ {
27
+ question: '修磨需要特殊设备吗?',
28
+ answer: '一台目数在中等(120-150 目)的旋转砂轮机就足够了。重要的是保持砂轮平衡且平整,以获得一致的效果。',
29
+ },
30
+ ];
31
+
32
+ const howToData = [
33
+ { name: '选择材料', text: '选择您要钻孔的金属或材料,以确定目标角度和切削速度。' },
34
+ { name: '校验对称性', text: '将钻头靠在屏幕上,确保两个切削刃都与蓝色线条重合。' },
35
+ { name: '检查后角', text: '目测检查切削刃后部是否会摩擦工件(检查后角/铲背)。' },
36
+ { name: '计算 RPM', text: '输入直径并将钻床调整至所选材料的推荐转速。' },
37
+ ];
38
+
39
+ const faqSchema: WithContext<FAQPage> = {
40
+ '@context': 'https://schema.org',
41
+ '@type': 'FAQPage',
42
+ mainEntity: faqData.map((item) => ({
43
+ '@type': 'Question',
44
+ name: item.question,
45
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
46
+ })),
47
+ };
48
+
49
+ const howToSchema: WithContext<HowToThing> = {
50
+ '@context': 'https://schema.org',
51
+ '@type': 'HowTo',
52
+ name: title,
53
+ description,
54
+ step: howToData.map((step, i) => ({
55
+ '@type': 'HowToStep',
56
+ position: i + 1,
57
+ name: step.name,
58
+ text: step.text,
59
+ })),
60
+ };
61
+
62
+ const appSchema: WithContext<SoftwareApplication> = {
63
+ '@context': 'https://schema.org',
64
+ '@type': 'SoftwareApplication',
65
+ name: title,
66
+ description,
67
+ applicationCategory: 'UtilityApplication',
68
+ operatingSystem: 'All',
69
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
70
+ inLanguage: 'zh',
71
+ };
72
+
73
+ export const content: ToolLocaleContent<DrillSharpenerUI> = {
74
+ slug,
75
+ title,
76
+ description,
77
+ faqTitle: '常见问题',
78
+ faq: faqData,
79
+ bibliographyTitle: '技术参考',
80
+ bibliography: [
81
+ { name: '车间手册 - 钻头修磨 (PDF)', url: 'https://zh.wikipedia.org/wiki/钻头#修磨' },
82
+ { name: '金属工艺学 - 钻头角度', url: 'https://www.google.com/search?q=钻头+修磨+角度' },
83
+ ],
84
+ howTo: howToData,
85
+ schemas: [faqSchema, howToSchema, appSchema],
86
+ seo: [
87
+ { type: 'title', text: '钻头修磨大师:专业技巧', level: 2 },
88
+ { type: 'paragraph', html: '钻头修磨是任何车间中最有价值的技能之一。正确修磨的钻头可以提高孔的质量,保护电动工具的使用寿命,并确保操作人员的安全。' },
89
+ { type: 'title', text: '修磨的核心:顶角', level: 3 },
90
+ { type: 'paragraph', html: '顶角决定了钻头如何切入材料。标准角度为:软钢 118°,不锈钢 135°,硬钢 140°。每种材料需要不同的角度来最大化穿透力而不牺牲强度。' },
91
+ { type: 'title', text: '最易遗忘的点:后角', level: 3 },
92
+ { type: 'paragraph', html: '最常见的错误是忽略了后角或铲背。如果切削刃的背面是平的,钻头只会产生摩擦并产生极高的热量。解决方法是轻轻磨掉主切削刃背面的金属。' },
93
+ ],
94
+ ui: {
95
+ labelMaterial: '加工材料',
96
+ matSteel: '普通钢',
97
+ matInox: '不锈钢',
98
+ matHard: '硬钢',
99
+ matBrass: '黄铜',
100
+ matPlastic: '塑料',
101
+ matWood: '木材',
102
+ labelDiameter: '钻头直径 (mm)',
103
+ unitMm: 'mm',
104
+ btnMinus: '-',
105
+ btnPlus: '+',
106
+ labelVelocity: '速度',
107
+ unitRpm: 'RPM',
108
+ labelCooling: '切削',
109
+ btnDiagnosis: '切削不顺?诊断',
110
+ diagTitle: '故障诊断',
111
+ diagClose: '关闭',
112
+ diagIssue1: '1. 冒烟且无法钻透',
113
+ diagIssue1Desc: '缺少后角。主切削刃背面的金属摩擦工件。修磨背面,使切削刃成为最高点。',
114
+ diagIssue2: '2. 偏心或孔径变大',
115
+ diagIssue2Desc: '钻尖未居中。两侧切削刃长度不同。确保钻尖触及数字规的精确中心。',
116
+ diagIssue3: '3. 刃口烧坏(发蓝)',
117
+ diagIssue3Desc: '转速过高。请检查计算出的针对该直径和材料的 RPM。',
118
+ gaugeInstruction: '将钻轴靠在垂直线上',
119
+ },
120
+ };
@@ -11,14 +11,26 @@ export {
11
11
  DrillSharpenerBibliography,
12
12
  };
13
13
 
14
- const es = async () => (await import('./i18n/es')).content;
15
- const en = async () => (await import('./i18n/en')).content;
16
- const fr = async () => (await import('./i18n/fr')).content;
17
-
18
14
  export const drillSharpener: DiyToolEntry<DrillSharpenerUI> = {
19
15
  id: 'drill-sharpener',
20
16
  icons: { bg: 'mdi:tools', fg: 'mdi:speedometer' },
21
- i18n: { es, en, fr },
17
+ i18n: {
18
+ de: () => import('./i18n/de').then((m) => m.content),
19
+ en: () => import('./i18n/en').then((m) => m.content),
20
+ es: () => import('./i18n/es').then((m) => m.content),
21
+ fr: () => import('./i18n/fr').then((m) => m.content),
22
+ id: () => import('./i18n/id').then((m) => m.content),
23
+ it: () => import('./i18n/it').then((m) => m.content),
24
+ ja: () => import('./i18n/ja').then((m) => m.content),
25
+ ko: () => import('./i18n/ko').then((m) => m.content),
26
+ nl: () => import('./i18n/nl').then((m) => m.content),
27
+ pl: () => import('./i18n/pl').then((m) => m.content),
28
+ pt: () => import('./i18n/pt').then((m) => m.content),
29
+ ru: () => import('./i18n/ru').then((m) => m.content),
30
+ sv: () => import('./i18n/sv').then((m) => m.content),
31
+ tr: () => import('./i18n/tr').then((m) => m.content),
32
+ zh: () => import('./i18n/zh').then((m) => m.content),
33
+ },
22
34
  };
23
35
 
24
36
  export const DRILL_SHARPENER_TOOL: ToolDefinition = {
@@ -0,0 +1,118 @@
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { EpoxyCalculatorUI } from '../ui';
4
+
5
+ const slug = 'epoxidharz-rechner';
6
+ const title = 'Epoxidharz Rechner: Mischung und Volumen';
7
+ const description = 'Berechnen Sie die exakte Menge an Epoxidharz und Härter für Ihre Projekte. Vermeiden Sie Verschwendung bei River Tables, Schmuck und Gussformen.';
8
+
9
+ const faqData = [
10
+ {
11
+ question: 'Warum ist das exakte Mischungsverhältnis bei Harz so wichtig?',
12
+ answer: 'Im Gegensatz zu anderen Mischungen trocknet Epoxidharz nicht durch Verdunstung, sondern durch eine chemische Reaktion (Polymerisation). Wenn Harz oder Härter im Übermaß vorhanden sind, bleibt die Reaktion unvollständig, was zu klebrigen, weichen Stellen oder dauerhaften Blasen führt.',
13
+ },
14
+ {
15
+ question: 'Was ist das Verhältnis nach Gewicht vs. Volumen?',
16
+ answer: 'Viele Harze werden im Volumenverhältnis 2:1 gemischt, aber nach Gewicht oft 100:45, da der Härter meist eine andere Dichte hat. Verwenden Sie immer die vom Hersteller angegebene Skala und nutzen Sie nach Möglichkeit eine Digitalwaage für maximale Präzision.',
17
+ },
18
+ {
19
+ question: 'Wie vermeide ich Blasen beim Mischen?',
20
+ answer: 'Mischen Sie langsam mit konstanten kreisenden Bewegungen für mindestens 3 Minuten und kratzen Sie dabei die Wände des Bechers gut ab. Lassen Sie die Mischung vor dem Gießen ein paar Minuten ruhen, damit Blasen an die Oberfläche steigen können.',
21
+ },
22
+ {
23
+ question: 'Was ist die Topfzeit (Pot Life)?',
24
+ answer: 'Dies ist die Zeit, die Sie zur Verarbeitung der Mischung haben, bevor sie beginnt hart zu werden (zu gelieren). Im Sommer oder bei großen Volumina reduziert sich diese Zeit drastisch aufgrund der exothermen Reaktion (Wärmeentwicklung).',
25
+ },
26
+ ];
27
+
28
+ const howToData = [
29
+ { name: 'Formabmessungen messen', text: 'Messen Sie Länge, Breite und Tiefe (Dicke) des Bereichs, den Sie mit Harz füllen möchten.' },
30
+ { name: 'Mischungsverhältnis eingeben', text: 'Prüfen Sie auf dem Etikett Ihres Produkts, ob das Verhältnis 1:1, 2:1 oder 3:1 ist und ob es auf Gewicht oder Volumen basiert.' },
31
+ { name: 'Komponenten abwiegen', text: 'Gießen Sie zuerst Komponente A (Harz) und dann B (Härter) in einen sauberen Behälter auf einer Digitalwaage.' },
32
+ { name: 'Technisches Mischen', text: 'Rühren Sie vorsichtig um, bis die Mischung völlig transparent ist und keine "Schlieren" unterschiedlicher Dichte mehr zu sehen sind.' },
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<EpoxyCalculatorUI> = {
70
+ slug,
71
+ title,
72
+ description,
73
+ faqTitle: 'Häufig gestellte Fragen',
74
+ faq: faqData,
75
+ bibliographyTitle: 'Technische Referenzen',
76
+ bibliography: [
77
+ { name: 'TotalBoat - Support Center und technische Leitfäden', url: 'https://www.totalboat.com/pages/support' },
78
+ { name: 'ArtResin - FAQ und Gebrauchsanweisung', url: 'https://www.artresin.com/pages/artresin-faq' },
79
+ ],
80
+ howTo: howToData,
81
+ schemas: [faqSchema, howToSchema, appSchema],
82
+ seo: [
83
+ { type: 'title', text: 'Leitfaden zur Berechnung und Mischung von Epoxidharz', level: 2 },
84
+ { type: 'paragraph', html: 'Epoxidharz ist keine Farbe, die durch Verdunstung trocknet; es ist eine komplexe <strong>exotherme chemische Reaktion</strong>. Die Magie geschieht, wenn sich Epoxidmoleküle mit Polyamidmolekülen zu einem kristallinen, festen duroplastischen Polymer verketten.' },
85
+ { type: 'paragraph', html: 'Der Unterschied zwischen einem langlebigen Kunstwerk und einer klebrigen Katastrophe liegt in der <strong>exakten Stöchiometrie</strong>. Ein Fehler von nur 5 % im Mischungsverhältnis kann die Aushärtung dauerhaft verhindern. Dieses Tool eliminiert mathematische Vermutungen, sodass Sie sich auf das Erschaffen konzentrieren können.' },
86
+ { type: 'grid', columns: [
87
+ { type: 'card', icon: 'mdi:scale-balance', title: 'Volumen oder Gewicht?', html: '<p>Der häufigste Fehler von Anfängern ist die Annahme, dass 100 ml 100 g wiegen. <strong>Harz ist dichter als Härter.</strong></p><p>Wenn das Datenblatt Ihres Produkts "100:50 nach Gewicht" angibt, ist das NICHT dasselbe wie "2:1 nach Volumen". Dieser Rechner arbeitet mit dem <strong>Volumen</strong> (V = L × B × H), dem Standard für das Füllen von Formen.</p>' },
88
+ { type: 'card', icon: 'mdi:water-percent', title: 'Gängige Verhältnisse', html: '<ul><li><strong>1:1</strong> — Beschichtungen, Lacke und Schnellkleber.</li><li><strong>2:1</strong> — Standard. River Tables, Schmuck und mittlere Abgüsse.</li><li><strong>3:1</strong> — Industrieböden und hochharte strukturelle Laminate.</li></ul>' },
89
+ ]},
90
+ { type: 'title', text: 'Sicherheitsprotokoll und Best Practices', level: 2 },
91
+ { type: 'grid', columns: [
92
+ { type: 'card', icon: 'mdi:thermometer', title: 'Überlebenswichtige Temperatur', html: '<p>Arbeiten Sie immer zwischen <strong>21°C und 25°C</strong>. Kälte kann die Reaktion stoppen und das Teil trüb machen. Übermäßige Hitze beschleunigt die exotherme Reaktion gefährlich ("Flash Cure").</p>' },
93
+ { type: 'card', icon: 'mdi:cup-outline', title: 'Zwei Becher Methode', html: '<p>Vertrauen Sie nicht auf eine einzige Mischung. Kratzen Sie die Seiten und den Boden gut ab, gießen Sie die Mischung in einen <strong>zweiten sauberen Becher</strong> und mischen Sie erneut. Dies stellt sicher, dass kein unkatalysiertes Material zurückbleibt.</p>' },
94
+ ]},
95
+ ],
96
+ ui: {
97
+ shapeRect: 'Rechteckig',
98
+ shapeCylinder: 'Zylindrisch',
99
+ shapeSphere: 'Sphärisch',
100
+ labelLength: 'Länge (cm)',
101
+ labelWidth: 'Breite (cm)',
102
+ labelDiameter: 'Durchmesser (cm)',
103
+ labelDepth: 'Tiefe (cm)',
104
+ labelRatio: 'Mischungsverhältnis (Gewicht/Volumen)',
105
+ labelCustomRatio: 'Benutzerdefiniertes Verhältnis (A:B)',
106
+ labelResinA: 'Harz (A)',
107
+ labelHardenerB: 'Härter (B)',
108
+ labelWasteTitle: 'Sicherheitsmarge',
109
+ labelWasteDesc: '5% extra für Verluste hinzufügen',
110
+ labelTotalVolume: 'Gesamtvolumen',
111
+ labelPartA: 'Teil A (Harz)',
112
+ labelPartB: 'Teil B (Härter)',
113
+ labelVisualization: 'Visualisierung',
114
+ shapeRectLabel: 'Rechteckiger Block',
115
+ shapeCylinderLabel: 'Zylinder / Runde Form',
116
+ shapeSphereLabel: 'Vollständige Kugel',
117
+ },
118
+ };
@@ -0,0 +1,118 @@
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { EpoxyCalculatorUI } from '../ui';
4
+
5
+ const slug = 'kalkulator-resin-epoksi';
6
+ const title = 'Kalkulator Resin Epoksi: Campuran dan Volume Tepat';
7
+ const description = 'Hitung jumlah tepat resin epoksi dan katalis yang dibutuhkan untuk proyek Anda. Hindari pemborosan pada meja river, perhiasan, dan cetakan.';
8
+
9
+ const faqData = [
10
+ {
11
+ question: 'Mengapa proporsi yang tepat sangat penting dalam resin?',
12
+ answer: 'Berbeda dengan campuran lain, resin epoksi tidak kering melalui penguapan, melainkan melalui reaksi kimia (polimerisasi). Jika ada kelebihan resin atau katalis, reaksi tidak akan sempurna, meninggalkan bagian yang lengket, lunak, atau dengan gelembung permanen.',
13
+ },
14
+ {
15
+ question: 'Apa itu perbandingan berat vs volume?',
16
+ answer: 'Banyak resin dicampur 2:1 dalam volume tetapi 100:45 dalam berat karena katalis biasanya lebih padat. Gunakan selalu skala yang ditentukan pabrikan dan, jika mungkin, gunakan timbangan digital demi presisi maksimal.',
17
+ },
18
+ {
19
+ question: 'Bagaimana cara menghindari gelembung saat mengaduk?',
20
+ answer: 'Aduk perlahan dengan gerakan memutar konstan selama setidaknya 3 menit, bersihkan dinding wadah dengan baik. Diamkan campuran selama beberapa menit sebelum dituang agar gelembung naik ke permukaan.',
21
+ },
22
+ {
23
+ question: 'Apa itu masa pakai (Pot Life)?',
24
+ answer: 'Adalah waktu yang Anda miliki untuk mengerjakan campuran sebelum mulai mengeras (mengental). Di musim panas atau dalam volume besar, waktu ini berkurang drastis karena reaksi eksotermik (menghasilkan panas).',
25
+ },
26
+ ];
27
+
28
+ const howToData = [
29
+ { name: 'Ukur dimensi cetakan', text: 'Ukur panjang, lebar, dan kedalaman (tebal) area yang ingin Anda isi dengan resin.' },
30
+ { name: 'Masukkan rasio campuran', text: 'Periksa label produk Anda apakah campurannya 1:1, 2:1, atau 3:1 dan apakah berdasarkan berat atau volume.' },
31
+ { name: 'Timbang komponen', text: 'Tuang komponen A (resin) terlebih dahulu lalu B (katalis) ke dalam wadah bersih di atas timbangan digital.' },
32
+ { name: 'Pengadukan teknis', text: 'Aduk perlahan hingga campuran benar-benar transparan dan tidak terlihat "alur" dari kepadatan yang berbeda.' },
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<EpoxyCalculatorUI> = {
70
+ slug,
71
+ title,
72
+ description,
73
+ faqTitle: 'Pertanyaan Umum',
74
+ faq: faqData,
75
+ bibliographyTitle: 'Referensi Teknis',
76
+ bibliography: [
77
+ { name: 'TotalBoat - Pusat Dukungan dan Panduan Teknis', url: 'https://www.totalboat.com/pages/support' },
78
+ { name: 'ArtResin - FAQ dan Panduan Penggunaan', url: 'https://www.artresin.com/pages/artresin-faq' },
79
+ ],
80
+ howTo: howToData,
81
+ schemas: [faqSchema, howToSchema, appSchema],
82
+ seo: [
83
+ { type: 'title', text: 'Panduan Perhitungan dan Pengadukan Resin Epoksi', level: 2 },
84
+ { type: 'paragraph', html: 'Resin epoksi bukan cat yang kering karena penguapan; ini adalah <strong>reaksi kimia eksotermik</strong> yang kompleks. Keajaiban terjadi ketika molekul epoksida berikatan dengan molekul poliamina untuk membentuk polimer termoset padat kristalin.' },
85
+ { type: 'paragraph', html: 'Perbedaan antara karya seni yang tahan lama dan kegagalan yang lengket terletak pada <strong>stoikiometri yang tepat</strong>. Kesalahan bahkan hanya 5% dalam rasio campuran dapat menghambat pengerasan secara permanen. Alat ini menghilangkan tebakan matematis, memungkinkan Anda fokus pada kreasi.' },
86
+ { type: 'grid', columns: [
87
+ { type: 'card', icon: 'mdi:scale-balance', title: 'Volume atau Berat?', html: '<p>Kesalahan #1 pemula adalah menganggap bahwa 100ml beratnya 100g. <strong>Resin lebih padat daripada pengeras.</strong></p><p>Jika data teknis produk Anda menyebutkan "100:50 berdasarkan berat", itu TIDAK sama dengan "2:1 berdasarkan volume". Kalkulator ini bekerja dengan <strong>Volume</strong> (V = L × W × H), yang merupakan standar untuk mengisi cetakan.</p>' },
88
+ { type: 'card', icon: 'mdi:water-percent', title: 'Rasio Umum', html: '<ul><li><strong>1:1</strong> — Pelapis, vernis, dan pelekat cepat.</li><li><strong>2:1</strong> — Standar. Meja river, perhiasan, dan cetakan sedang.</li><li><strong>3:1</strong> — Lantai industri dan laminasi struktural kekerasan tinggi.</li></ul>' },
89
+ ]},
90
+ { type: 'title', text: 'Protokol Keamanan dan Praktik Terbaik', level: 2 },
91
+ { type: 'grid', columns: [
92
+ { type: 'card', icon: 'mdi:thermometer', title: 'Suhu Vital', html: '<p>Bekerjalah selalu antara <strong>21°C hingga 25°C</strong>. Suhu dingin dapat menghentikan reaksi, membuat benda menjadi keruh. Panas berlebih mempercepat reaksi eksotermik secara berbahaya ("flash cure").</p>' },
93
+ { type: 'card', icon: 'mdi:cup-outline', title: 'Teknik Dua Wadah', html: '<p>Jangan mengandalkan satu pengadukan. Bersihkan sisi dan dasar wadah dengan baik, tuang campuran ke <strong>wadah bersih kedua</strong> dan aduk kembali. Ini memastikan tidak ada bahan yang tidak terkatalis tertinggal.</p>' },
94
+ ]},
95
+ ],
96
+ ui: {
97
+ shapeRect: 'Persegi Panjang',
98
+ shapeCylinder: 'Silinder',
99
+ shapeSphere: 'Bola',
100
+ labelLength: 'Panjang (cm)',
101
+ labelWidth: 'Lebar (cm)',
102
+ labelDiameter: 'Diameter (cm)',
103
+ labelDepth: 'Kedalaman (cm)',
104
+ labelRatio: 'Rasio Campuran (Berat/Volume)',
105
+ labelCustomRatio: 'Gunakan rasio kustom (A:B)',
106
+ labelResinA: 'Resin (A)',
107
+ labelHardenerB: 'Pengeras (B)',
108
+ labelWasteTitle: 'Margin Keamanan',
109
+ labelWasteDesc: 'Tambah 5% ekstra untuk kehilangan',
110
+ labelTotalVolume: 'Volume Total',
111
+ labelPartA: 'Bagian A (Resin)',
112
+ labelPartB: 'Bagian B (Katalis)',
113
+ labelVisualization: 'Visualisasi',
114
+ shapeRectLabel: 'Blok Persegi Panjang',
115
+ shapeCylinderLabel: 'Silinder / Cetakan Bulat',
116
+ shapeSphereLabel: 'Bola Penuh',
117
+ },
118
+ };
@@ -0,0 +1,118 @@
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { EpoxyCalculatorUI } from '../ui';
4
+
5
+ const slug = 'calcolatore-resina-epossidica';
6
+ const title = 'Calcolatore di Resina Epossidica: Miscela e Volume Esatto';
7
+ const description = 'Calcola la quantità esatta di resina epossidica e catalizzatore necessaria per i tuoi progetti. Evita sprechi in tavoli river, gioielleria e stampi.';
8
+
9
+ const faqData = [
10
+ {
11
+ question: 'Perché la proporzione esatta è così importante nella resina?',
12
+ answer: 'A differenza di altre miscele, la resina epossidica non asciuga per evaporazione, ma per una reazione chimica (polimerizzazione). Se avanza resina o catalizzatore, la reazione sarà incompleta, lasciando il pezzo appiccicoso, morbido o con bolle permanenti.',
13
+ },
14
+ {
15
+ question: 'Cos\'è la proporzione in peso vs volume?',
16
+ answer: 'Molte resine si miscelano 2:1 in volume ma 100:45 in peso perché il catalizzatore è solitamente più denso. Usa sempre la scala indicata dal produttore e, se possibile, usa una bilancia digitale per la massima precisione.',
17
+ },
18
+ {
19
+ question: 'Come evito le bolle durante la miscelazione?',
20
+ answer: 'Mescola lentamente con movimenti circolari costanti per almeno 3 minuti, raschiando bene le pareti del bicchiere. Lascia riposare la miscela un paio di minuti prima di versare affinché le bolle salgano in superficie.',
21
+ },
22
+ {
23
+ question: 'Cos\'è il tempo di vita (Pot Life)?',
24
+ answer: 'È il tempo che hai per lavorare con la miscela prima che inizi a indurirsi (gelificare). In estate o in grandi volumi, questo tempo si riduce drasticamente a causa della reazione esotermica (genera calore).',
25
+ },
26
+ ];
27
+
28
+ const howToData = [
29
+ { name: 'Misurare le dimensioni dello stampo', text: 'Misura la lunghezza, la larghezza e la profondità (spessore) della zona che vuoi riempire con la resina.' },
30
+ { name: 'Inserire il rapporto di miscela', text: 'Consulta l\'etichetta del tuo prodotto per vedere se la miscela è 1:1, 2:1 o 3:1 e se si basa su peso o volume.' },
31
+ { name: 'Pesare i componenti', text: 'Versa prima il componente A (resina) e poi il B (catalizzatore) in un recipiente pulito su una bilancia digitale.' },
32
+ { name: 'Miscelazione tecnica', text: 'Mescola delicatamente finché la miscela non è totalmente trasparente e non si vedono "fili" di diversa densità.' },
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<EpoxyCalculatorUI> = {
70
+ slug,
71
+ title,
72
+ description,
73
+ faqTitle: 'Domande Frequenti',
74
+ faq: faqData,
75
+ bibliographyTitle: 'Riferimenti Tecnici',
76
+ bibliography: [
77
+ { name: 'TotalBoat - Centro di Supporto e Guide Tecniche', url: 'https://www.totalboat.com/pages/support' },
78
+ { name: 'ArtResin - Domande Frequenti e Guida d\'Uso', url: 'https://www.artresin.com/pages/artresin-faq' },
79
+ ],
80
+ howTo: howToData,
81
+ schemas: [faqSchema, howToSchema, appSchema],
82
+ seo: [
83
+ { type: 'title', text: 'Guida al Calcolo e alla Miscelazione della Resina Epossidica', level: 2 },
84
+ { type: 'paragraph', html: 'La resina epossidica non è una vernice che asciuga per evaporazione; è una complessa <strong>reazione chimica esotermica</strong>. La magia avviene quando le molecole di epossido si incatenano con quelle di poliammina per formare un polimero termoindurente solido cristallino.' },
85
+ { type: 'paragraph', html: 'La differenza tra un pezzo d\'arte duraturo e un disastro appiccicoso risiede nella <strong>stechiometria esatta</strong>. Un errore di appena il 5% nel rapporto di miscela può inibire permanentemente l\'indurimento. Questo strumento elimina le congetture matematiche, permettendoti di concentrarti sulla creazione.' },
86
+ { type: 'grid', columns: [
87
+ { type: 'card', icon: 'mdi:scale-balance', title: 'Volume o Peso?', html: '<p>L\'errore n. 1 dei principianti è assumere che 100ml pesino 100g. <strong>La resina è più densa dell\'indurente.</strong></p><p>Se la scheda tecnica del tuo prodotto dice "100:50 in peso", NON è lo stesso di "2:1 in volume". Questo calcolatore lavora con il <strong>Volume</strong> (V = L × W × H), che è lo standard per riempire gli stampi.</p>' },
88
+ { type: 'card', icon: 'mdi:water-percent', title: 'Rapporti Comuni', html: '<ul><li><strong>1:1</strong> — Rivestimenti, vernici e adesivi rapidi.</li><li><strong>2:1</strong> — Standard. Tavoli river, gioielleria e stampi medi.</li><li><strong>3:1</strong> — Pavimenti industriali e laminati strutturali ad alta durezza.</li></ul>' },
89
+ ]},
90
+ { type: 'title', text: 'Protocollo di Sicurezza e Buone Pratiche', level: 2 },
91
+ { type: 'grid', columns: [
92
+ { type: 'card', icon: 'mdi:thermometer', title: 'Temperatura Vitale', html: '<p>Lavora sempre tra <strong>21°C e 25°C</strong>. Il freddo può fermare la reazione, lasciando il pezzo torbido. Il calore eccessivo accelera pericolosamente la reazione esotermica ("flash cure").</p>' },
93
+ { type: 'card', icon: 'mdi:cup-outline', title: 'Tecnica del Doppio Bicchiere', html: '<p>Non fidarti di una sola miscelazione. Raschia bene i lati e il fondo, versa la miscela in un <strong>secondo bicchiere pulito</strong> e mescola di nuovo. Questo assicura che non rimanga materiale non catalizzato.</p>' },
94
+ ]},
95
+ ],
96
+ ui: {
97
+ shapeRect: 'Rettangolare',
98
+ shapeCylinder: 'Cilindrico',
99
+ shapeSphere: 'Sferico',
100
+ labelLength: 'Lunghezza (cm)',
101
+ labelWidth: 'Larghezza (cm)',
102
+ labelDiameter: 'Diametro (cm)',
103
+ labelDepth: 'Profondità (cm)',
104
+ labelRatio: 'Rapporto di Miscela (Peso/Volume)',
105
+ labelCustomRatio: 'Usa rapporto personalizzato (A:B)',
106
+ labelResinA: 'Resina (A)',
107
+ labelHardenerB: 'Indurente (B)',
108
+ labelWasteTitle: 'Margine di Sicurezza',
109
+ labelWasteDesc: 'Aggiungi il 5% extra per perdite',
110
+ labelTotalVolume: 'Volume Totale',
111
+ labelPartA: 'Parte A (Resina)',
112
+ labelPartB: 'Parte B (Catalizzatore)',
113
+ labelVisualization: 'Visualizzazione',
114
+ shapeRectLabel: 'Blocco Rettangolare',
115
+ shapeCylinderLabel: 'Cilindro / Stampo Rotondo',
116
+ shapeSphereLabel: 'Sfera Completa',
117
+ },
118
+ };