@jjlmoya/utils-diy 1.10.0 → 1.12.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 (286) hide show
  1. package/package.json +1 -1
  2. package/src/category/index.ts +2 -1
  3. package/src/entries.ts +3 -1
  4. package/src/index.ts +2 -0
  5. package/src/pages/[locale]/[slug].astro +28 -12
  6. package/src/tests/locale_completeness.test.ts +7 -9
  7. package/src/tests/shared-test-helpers.ts +56 -0
  8. package/src/tests/tool_exports.test.ts +34 -0
  9. package/src/tests/tool_validation.test.ts +2 -2
  10. package/src/tool/balusterCalculator/baluster-calculator.css +9 -9
  11. package/src/tool/balusterCalculator/bibliography.astro +2 -10
  12. package/src/tool/balusterCalculator/bibliography.ts +16 -0
  13. package/src/tool/balusterCalculator/i18n/de.ts +2 -15
  14. package/src/tool/balusterCalculator/i18n/en.ts +2 -15
  15. package/src/tool/balusterCalculator/i18n/es.ts +2 -15
  16. package/src/tool/balusterCalculator/i18n/fr.ts +2 -15
  17. package/src/tool/balusterCalculator/i18n/id.ts +2 -15
  18. package/src/tool/balusterCalculator/i18n/it.ts +2 -15
  19. package/src/tool/balusterCalculator/i18n/ja.ts +2 -15
  20. package/src/tool/balusterCalculator/i18n/ko.ts +2 -15
  21. package/src/tool/balusterCalculator/i18n/nl.ts +2 -15
  22. package/src/tool/balusterCalculator/i18n/pl.ts +2 -15
  23. package/src/tool/balusterCalculator/i18n/pt.ts +2 -15
  24. package/src/tool/balusterCalculator/i18n/ru.ts +2 -15
  25. package/src/tool/balusterCalculator/i18n/sv.ts +2 -15
  26. package/src/tool/balusterCalculator/i18n/tr.ts +2 -15
  27. package/src/tool/balusterCalculator/i18n/zh.ts +2 -15
  28. package/src/tool/balusterCalculator/seo.astro +1 -1
  29. package/src/tool/clayCalculator/bibliography.astro +2 -10
  30. package/src/tool/clayCalculator/bibliography.ts +12 -0
  31. package/src/tool/clayCalculator/clay-shrinkage-calculator.css +30 -30
  32. package/src/tool/clayCalculator/i18n/de.ts +2 -11
  33. package/src/tool/clayCalculator/i18n/en.ts +2 -11
  34. package/src/tool/clayCalculator/i18n/es.ts +2 -11
  35. package/src/tool/clayCalculator/i18n/fr.ts +2 -11
  36. package/src/tool/clayCalculator/i18n/id.ts +2 -11
  37. package/src/tool/clayCalculator/i18n/it.ts +2 -11
  38. package/src/tool/clayCalculator/i18n/ja.ts +2 -11
  39. package/src/tool/clayCalculator/i18n/ko.ts +2 -11
  40. package/src/tool/clayCalculator/i18n/nl.ts +2 -11
  41. package/src/tool/clayCalculator/i18n/pl.ts +2 -11
  42. package/src/tool/clayCalculator/i18n/pt.ts +2 -11
  43. package/src/tool/clayCalculator/i18n/ru.ts +2 -11
  44. package/src/tool/clayCalculator/i18n/sv.ts +2 -11
  45. package/src/tool/clayCalculator/i18n/tr.ts +2 -11
  46. package/src/tool/clayCalculator/i18n/zh.ts +2 -11
  47. package/src/tool/clayCalculator/seo.astro +1 -1
  48. package/src/tool/concreteCalculator/bibliography.astro +2 -9
  49. package/src/tool/concreteCalculator/bibliography.ts +7 -0
  50. package/src/tool/concreteCalculator/concrete-mortar-calculator.css +18 -18
  51. package/src/tool/concreteCalculator/i18n/de.ts +2 -15
  52. package/src/tool/concreteCalculator/i18n/en.ts +2 -15
  53. package/src/tool/concreteCalculator/i18n/es.ts +2 -15
  54. package/src/tool/concreteCalculator/i18n/fr.ts +2 -15
  55. package/src/tool/concreteCalculator/i18n/id.ts +2 -15
  56. package/src/tool/concreteCalculator/i18n/it.ts +2 -15
  57. package/src/tool/concreteCalculator/i18n/ja.ts +2 -15
  58. package/src/tool/concreteCalculator/i18n/ko.ts +2 -15
  59. package/src/tool/concreteCalculator/i18n/nl.ts +2 -15
  60. package/src/tool/concreteCalculator/i18n/pl.ts +2 -15
  61. package/src/tool/concreteCalculator/i18n/pt.ts +2 -15
  62. package/src/tool/concreteCalculator/i18n/ru.ts +2 -15
  63. package/src/tool/concreteCalculator/i18n/sv.ts +2 -15
  64. package/src/tool/concreteCalculator/i18n/tr.ts +2 -15
  65. package/src/tool/concreteCalculator/i18n/zh.ts +2 -15
  66. package/src/tool/concreteCalculator/seo.astro +2 -1
  67. package/src/tool/cutOptimizer/bibliography.astro +2 -9
  68. package/src/tool/cutOptimizer/bibliography.ts +12 -0
  69. package/src/tool/cutOptimizer/cut-optimizer.css +25 -25
  70. package/src/tool/cutOptimizer/i18n/de.ts +2 -11
  71. package/src/tool/cutOptimizer/i18n/en.ts +2 -11
  72. package/src/tool/cutOptimizer/i18n/es.ts +2 -11
  73. package/src/tool/cutOptimizer/i18n/fr.ts +2 -11
  74. package/src/tool/cutOptimizer/i18n/id.ts +2 -11
  75. package/src/tool/cutOptimizer/i18n/it.ts +2 -11
  76. package/src/tool/cutOptimizer/i18n/ja.ts +2 -11
  77. package/src/tool/cutOptimizer/i18n/ko.ts +2 -11
  78. package/src/tool/cutOptimizer/i18n/nl.ts +2 -11
  79. package/src/tool/cutOptimizer/i18n/pl.ts +2 -11
  80. package/src/tool/cutOptimizer/i18n/pt.ts +2 -11
  81. package/src/tool/cutOptimizer/i18n/ru.ts +2 -11
  82. package/src/tool/cutOptimizer/i18n/sv.ts +2 -11
  83. package/src/tool/cutOptimizer/i18n/tr.ts +2 -11
  84. package/src/tool/cutOptimizer/i18n/zh.ts +2 -11
  85. package/src/tool/cutOptimizer/seo.astro +2 -1
  86. package/src/tool/drillCalculator/bibliography.astro +2 -9
  87. package/src/tool/drillCalculator/bibliography.ts +12 -0
  88. package/src/tool/drillCalculator/drill-rpm-calculator.css +57 -57
  89. package/src/tool/drillCalculator/i18n/de.ts +2 -5
  90. package/src/tool/drillCalculator/i18n/en.ts +2 -5
  91. package/src/tool/drillCalculator/i18n/es.ts +2 -5
  92. package/src/tool/drillCalculator/i18n/fr.ts +2 -5
  93. package/src/tool/drillCalculator/i18n/id.ts +2 -5
  94. package/src/tool/drillCalculator/i18n/it.ts +2 -5
  95. package/src/tool/drillCalculator/i18n/ja.ts +2 -5
  96. package/src/tool/drillCalculator/i18n/ko.ts +2 -5
  97. package/src/tool/drillCalculator/i18n/nl.ts +2 -5
  98. package/src/tool/drillCalculator/i18n/pl.ts +2 -5
  99. package/src/tool/drillCalculator/i18n/pt.ts +2 -5
  100. package/src/tool/drillCalculator/i18n/ru.ts +2 -5
  101. package/src/tool/drillCalculator/i18n/sv.ts +2 -5
  102. package/src/tool/drillCalculator/i18n/tr.ts +2 -5
  103. package/src/tool/drillCalculator/i18n/zh.ts +2 -5
  104. package/src/tool/drillCalculator/seo.astro +2 -1
  105. package/src/tool/drillSharpener/bibliography.astro +2 -9
  106. package/src/tool/drillSharpener/bibliography.ts +16 -0
  107. package/src/tool/drillSharpener/drill-sharpening-master.css +1 -1
  108. package/src/tool/drillSharpener/i18n/de.ts +2 -5
  109. package/src/tool/drillSharpener/i18n/en.ts +2 -6
  110. package/src/tool/drillSharpener/i18n/es.ts +2 -6
  111. package/src/tool/drillSharpener/i18n/fr.ts +2 -6
  112. package/src/tool/drillSharpener/i18n/id.ts +2 -5
  113. package/src/tool/drillSharpener/i18n/it.ts +2 -5
  114. package/src/tool/drillSharpener/i18n/ja.ts +2 -5
  115. package/src/tool/drillSharpener/i18n/ko.ts +2 -5
  116. package/src/tool/drillSharpener/i18n/nl.ts +2 -5
  117. package/src/tool/drillSharpener/i18n/pl.ts +2 -5
  118. package/src/tool/drillSharpener/i18n/pt.ts +2 -5
  119. package/src/tool/drillSharpener/i18n/ru.ts +2 -5
  120. package/src/tool/drillSharpener/i18n/sv.ts +2 -5
  121. package/src/tool/drillSharpener/i18n/tr.ts +2 -5
  122. package/src/tool/drillSharpener/i18n/zh.ts +2 -5
  123. package/src/tool/drillSharpener/seo.astro +2 -1
  124. package/src/tool/epoxyCalculator/bibliography.astro +2 -10
  125. package/src/tool/epoxyCalculator/bibliography.ts +20 -0
  126. package/src/tool/epoxyCalculator/epoxy-resin-calculator.css +13 -13
  127. package/src/tool/epoxyCalculator/i18n/de.ts +2 -5
  128. package/src/tool/epoxyCalculator/i18n/en.ts +2 -19
  129. package/src/tool/epoxyCalculator/i18n/es.ts +2 -19
  130. package/src/tool/epoxyCalculator/i18n/fr.ts +2 -19
  131. package/src/tool/epoxyCalculator/i18n/id.ts +2 -5
  132. package/src/tool/epoxyCalculator/i18n/it.ts +2 -5
  133. package/src/tool/epoxyCalculator/i18n/ja.ts +2 -5
  134. package/src/tool/epoxyCalculator/i18n/ko.ts +2 -5
  135. package/src/tool/epoxyCalculator/i18n/nl.ts +2 -5
  136. package/src/tool/epoxyCalculator/i18n/pl.ts +2 -5
  137. package/src/tool/epoxyCalculator/i18n/pt.ts +2 -5
  138. package/src/tool/epoxyCalculator/i18n/ru.ts +2 -5
  139. package/src/tool/epoxyCalculator/i18n/sv.ts +2 -5
  140. package/src/tool/epoxyCalculator/i18n/tr.ts +2 -5
  141. package/src/tool/epoxyCalculator/i18n/zh.ts +2 -5
  142. package/src/tool/epoxyCalculator/seo.astro +1 -1
  143. package/src/tool/furnitureFit/bibliography.astro +2 -9
  144. package/src/tool/furnitureFit/bibliography.ts +12 -0
  145. package/src/tool/furnitureFit/furniture-fit-calculator.css +7 -7
  146. package/src/tool/furnitureFit/i18n/de.ts +2 -5
  147. package/src/tool/furnitureFit/i18n/en.ts +2 -5
  148. package/src/tool/furnitureFit/i18n/es.ts +2 -5
  149. package/src/tool/furnitureFit/i18n/fr.ts +2 -5
  150. package/src/tool/furnitureFit/i18n/id.ts +2 -5
  151. package/src/tool/furnitureFit/i18n/it.ts +2 -5
  152. package/src/tool/furnitureFit/i18n/ja.ts +2 -5
  153. package/src/tool/furnitureFit/i18n/ko.ts +2 -5
  154. package/src/tool/furnitureFit/i18n/nl.ts +2 -5
  155. package/src/tool/furnitureFit/i18n/pl.ts +2 -5
  156. package/src/tool/furnitureFit/i18n/pt.ts +2 -5
  157. package/src/tool/furnitureFit/i18n/ru.ts +2 -5
  158. package/src/tool/furnitureFit/i18n/sv.ts +2 -5
  159. package/src/tool/furnitureFit/i18n/tr.ts +2 -5
  160. package/src/tool/furnitureFit/i18n/zh.ts +2 -5
  161. package/src/tool/furnitureFit/seo.astro +2 -1
  162. package/src/tool/mortarCalculator/bibliography.astro +2 -9
  163. package/src/tool/mortarCalculator/bibliography.ts +20 -0
  164. package/src/tool/mortarCalculator/i18n/de.ts +2 -5
  165. package/src/tool/mortarCalculator/i18n/en.ts +2 -19
  166. package/src/tool/mortarCalculator/i18n/es.ts +2 -19
  167. package/src/tool/mortarCalculator/i18n/fr.ts +2 -19
  168. package/src/tool/mortarCalculator/i18n/id.ts +2 -5
  169. package/src/tool/mortarCalculator/i18n/it.ts +2 -5
  170. package/src/tool/mortarCalculator/i18n/ja.ts +2 -5
  171. package/src/tool/mortarCalculator/i18n/ko.ts +2 -5
  172. package/src/tool/mortarCalculator/i18n/nl.ts +2 -5
  173. package/src/tool/mortarCalculator/i18n/pl.ts +2 -5
  174. package/src/tool/mortarCalculator/i18n/pt.ts +2 -5
  175. package/src/tool/mortarCalculator/i18n/ru.ts +2 -5
  176. package/src/tool/mortarCalculator/i18n/sv.ts +2 -5
  177. package/src/tool/mortarCalculator/i18n/tr.ts +2 -5
  178. package/src/tool/mortarCalculator/i18n/zh.ts +2 -5
  179. package/src/tool/mortarCalculator/lime-mortar-calculator.css +30 -30
  180. package/src/tool/mortarCalculator/seo.astro +2 -1
  181. package/src/tool/passepartoutCalculator/bibliography.astro +2 -9
  182. package/src/tool/passepartoutCalculator/bibliography.ts +16 -0
  183. package/src/tool/passepartoutCalculator/i18n/de.ts +2 -6
  184. package/src/tool/passepartoutCalculator/i18n/en.ts +2 -15
  185. package/src/tool/passepartoutCalculator/i18n/es.ts +2 -15
  186. package/src/tool/passepartoutCalculator/i18n/fr.ts +2 -15
  187. package/src/tool/passepartoutCalculator/i18n/id.ts +2 -6
  188. package/src/tool/passepartoutCalculator/i18n/it.ts +2 -6
  189. package/src/tool/passepartoutCalculator/i18n/ja.ts +2 -6
  190. package/src/tool/passepartoutCalculator/i18n/ko.ts +2 -6
  191. package/src/tool/passepartoutCalculator/i18n/nl.ts +2 -6
  192. package/src/tool/passepartoutCalculator/i18n/pl.ts +2 -6
  193. package/src/tool/passepartoutCalculator/i18n/pt.ts +2 -6
  194. package/src/tool/passepartoutCalculator/i18n/ru.ts +2 -6
  195. package/src/tool/passepartoutCalculator/i18n/sv.ts +2 -6
  196. package/src/tool/passepartoutCalculator/i18n/tr.ts +2 -6
  197. package/src/tool/passepartoutCalculator/i18n/zh.ts +2 -6
  198. package/src/tool/passepartoutCalculator/passepartout-calculator.css +26 -26
  199. package/src/tool/passepartoutCalculator/seo.astro +2 -1
  200. package/src/tool/stairCalculator/bibliography.astro +2 -9
  201. package/src/tool/stairCalculator/bibliography.ts +16 -0
  202. package/src/tool/stairCalculator/i18n/de.ts +2 -5
  203. package/src/tool/stairCalculator/i18n/en.ts +2 -6
  204. package/src/tool/stairCalculator/i18n/es.ts +2 -6
  205. package/src/tool/stairCalculator/i18n/fr.ts +2 -6
  206. package/src/tool/stairCalculator/i18n/id.ts +2 -5
  207. package/src/tool/stairCalculator/i18n/it.ts +2 -5
  208. package/src/tool/stairCalculator/i18n/ja.ts +2 -5
  209. package/src/tool/stairCalculator/i18n/ko.ts +2 -5
  210. package/src/tool/stairCalculator/i18n/nl.ts +2 -5
  211. package/src/tool/stairCalculator/i18n/pl.ts +2 -5
  212. package/src/tool/stairCalculator/i18n/pt.ts +2 -5
  213. package/src/tool/stairCalculator/i18n/ru.ts +2 -5
  214. package/src/tool/stairCalculator/i18n/sv.ts +2 -5
  215. package/src/tool/stairCalculator/i18n/tr.ts +2 -5
  216. package/src/tool/stairCalculator/i18n/zh.ts +2 -5
  217. package/src/tool/stairCalculator/seo.astro +2 -1
  218. package/src/tool/stairCalculator/stair-calculator.css +10 -10
  219. package/src/tool/thermalExpansionCalculator/bibliography.astro +2 -9
  220. package/src/tool/thermalExpansionCalculator/bibliography.ts +16 -0
  221. package/src/tool/thermalExpansionCalculator/i18n/de.ts +2 -6
  222. package/src/tool/thermalExpansionCalculator/i18n/en.ts +2 -6
  223. package/src/tool/thermalExpansionCalculator/i18n/es.ts +2 -6
  224. package/src/tool/thermalExpansionCalculator/i18n/fr.ts +2 -6
  225. package/src/tool/thermalExpansionCalculator/i18n/id.ts +2 -6
  226. package/src/tool/thermalExpansionCalculator/i18n/it.ts +2 -6
  227. package/src/tool/thermalExpansionCalculator/i18n/ja.ts +2 -6
  228. package/src/tool/thermalExpansionCalculator/i18n/ko.ts +2 -6
  229. package/src/tool/thermalExpansionCalculator/i18n/nl.ts +2 -6
  230. package/src/tool/thermalExpansionCalculator/i18n/pl.ts +2 -6
  231. package/src/tool/thermalExpansionCalculator/i18n/pt.ts +2 -6
  232. package/src/tool/thermalExpansionCalculator/i18n/ru.ts +2 -6
  233. package/src/tool/thermalExpansionCalculator/i18n/sv.ts +2 -6
  234. package/src/tool/thermalExpansionCalculator/i18n/tr.ts +2 -6
  235. package/src/tool/thermalExpansionCalculator/i18n/zh.ts +2 -6
  236. package/src/tool/thermalExpansionCalculator/seo.astro +2 -1
  237. package/src/tool/thermalExpansionCalculator/thermal-expansion-calculator.css +19 -19
  238. package/src/tool/voltageDropCalculator/bibliography.astro +2 -9
  239. package/src/tool/voltageDropCalculator/bibliography.ts +16 -0
  240. package/src/tool/voltageDropCalculator/i18n/de.ts +2 -5
  241. package/src/tool/voltageDropCalculator/i18n/en.ts +2 -6
  242. package/src/tool/voltageDropCalculator/i18n/es.ts +2 -6
  243. package/src/tool/voltageDropCalculator/i18n/fr.ts +2 -6
  244. package/src/tool/voltageDropCalculator/i18n/id.ts +2 -5
  245. package/src/tool/voltageDropCalculator/i18n/it.ts +2 -5
  246. package/src/tool/voltageDropCalculator/i18n/ja.ts +2 -5
  247. package/src/tool/voltageDropCalculator/i18n/ko.ts +2 -5
  248. package/src/tool/voltageDropCalculator/i18n/nl.ts +2 -5
  249. package/src/tool/voltageDropCalculator/i18n/pl.ts +2 -5
  250. package/src/tool/voltageDropCalculator/i18n/pt.ts +2 -5
  251. package/src/tool/voltageDropCalculator/i18n/ru.ts +2 -5
  252. package/src/tool/voltageDropCalculator/i18n/sv.ts +2 -5
  253. package/src/tool/voltageDropCalculator/i18n/tr.ts +2 -5
  254. package/src/tool/voltageDropCalculator/i18n/zh.ts +2 -5
  255. package/src/tool/voltageDropCalculator/seo.astro +2 -1
  256. package/src/tool/voltageDropCalculator/voltage-drop-calculator.css +24 -24
  257. package/src/tool/workshopFractionConverter/bibliography.astro +6 -0
  258. package/src/tool/workshopFractionConverter/bibliography.ts +12 -0
  259. package/src/tool/workshopFractionConverter/client.ts +183 -0
  260. package/src/tool/workshopFractionConverter/component.astro +226 -0
  261. package/src/tool/workshopFractionConverter/converter.ts +110 -0
  262. package/src/tool/workshopFractionConverter/engine.ts +223 -0
  263. package/src/tool/workshopFractionConverter/entry.ts +24 -0
  264. package/src/tool/workshopFractionConverter/i18n/de.ts +141 -0
  265. package/src/tool/workshopFractionConverter/i18n/en.ts +141 -0
  266. package/src/tool/workshopFractionConverter/i18n/es.ts +141 -0
  267. package/src/tool/workshopFractionConverter/i18n/fr.ts +141 -0
  268. package/src/tool/workshopFractionConverter/i18n/id.ts +141 -0
  269. package/src/tool/workshopFractionConverter/i18n/it.ts +141 -0
  270. package/src/tool/workshopFractionConverter/i18n/ja.ts +141 -0
  271. package/src/tool/workshopFractionConverter/i18n/ko.ts +141 -0
  272. package/src/tool/workshopFractionConverter/i18n/nl.ts +141 -0
  273. package/src/tool/workshopFractionConverter/i18n/pl.ts +141 -0
  274. package/src/tool/workshopFractionConverter/i18n/pt.ts +141 -0
  275. package/src/tool/workshopFractionConverter/i18n/ru.ts +141 -0
  276. package/src/tool/workshopFractionConverter/i18n/sv.ts +141 -0
  277. package/src/tool/workshopFractionConverter/i18n/tr.ts +141 -0
  278. package/src/tool/workshopFractionConverter/i18n/zh.ts +141 -0
  279. package/src/tool/workshopFractionConverter/index.ts +11 -0
  280. package/src/tool/workshopFractionConverter/seo.astro +15 -0
  281. package/src/tool/workshopFractionConverter/types-client.ts +89 -0
  282. package/src/tool/workshopFractionConverter/ui-updater.ts +94 -0
  283. package/src/tool/workshopFractionConverter/ui.ts +38 -0
  284. package/src/tool/workshopFractionConverter/workshop-fraction-converter.css +563 -0
  285. package/src/tools.ts +2 -1
  286. package/src/types.ts +1 -1
@@ -0,0 +1,141 @@
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { WorkshopFractionConverterUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
5
+
6
+ const slug = 'konverter-drobnyh-dyujmov-v-millimetry';
7
+ const title = 'Мастерской конвертер дробей в миллиметры';
8
+ const description = 'Мгновенно переводите дробные значения дюймов в миллиметры. Подбирайте ближайшие стандартные болты, винты и головки. Создано для работы в мастерской, когда руки в масле или перчатках.';
9
+
10
+ const faqData = [
11
+ {
12
+ question: 'Зачем переводить дроби в миллиметры?',
13
+ answer: 'Большинство современных инструментов и крепежа используют метрическую систему, но многие винтажные инструменты и чертежи до сих пор опираются на дробные дюймы. Этот конвертер помогает найти точный метрический эквивалент или ближайший стандартный размер крепежа.',
14
+ },
15
+ {
16
+ question: 'В чем разница между 1/2 дюйма и 12,7 мм?',
17
+ answer: '1/2 дюйма — это ровно 12,7 миллиметра (0,5 × 25,4 = 12,7). Метрические и дюймовые инструменты часто взаимозаменяемы для стандартных размеров, так как производители стараются унифицировать размеры крепежа в обеих системах.',
18
+ },
19
+ {
20
+ question: 'Почему инструмент показывает «ближайший крепеж»?',
21
+ answer: 'Потому что точные результаты преобразования часто оказываются между стандартными размерами крепежа. Инструмент находит болт или головку, которые максимально близки к вашему замеру, чтобы вы могли использовать то, что есть под рукой.',
22
+ },
23
+ {
24
+ question: 'В чем разница между столярной и слесарной точностью?',
25
+ answer: 'В столярном деле погрешность в 0,5 мм часто несущественна. В металлообработке и токарном деле важны каждые 0,1 мм. Режим точности подсказывает допустимые диапазоны допусков для вашего материала.',
26
+ },
27
+ {
28
+ question: 'Можно ли использовать этот инструмент без интернета?',
29
+ answer: 'Да. Все вычисления происходят прямо в вашем браузере. После первой загрузки инструмент работает полностью офлайн, что идеально подходит для мастерской, где нет Wi-Fi.',
30
+ },
31
+ {
32
+ question: 'Зачем в инструменте нужна история?',
33
+ answer: 'При разборке механизмов или работе над проектом из множества деталей история позволяет быстро сверяться с прошлыми замерами без их повторного ввода, помогая составлять список необходимых запчастей прямо в процессе работы.',
34
+ },
35
+ ];
36
+
37
+ const howToData = [
38
+ {
39
+ name: 'Выберите тип измерения',
40
+ text: 'Выберите «Прямой», чтобы перевести дробь в миллиметры, или «Обратный», чтобы найти ближайшую дробь для размера, снятого штангенциркулем.',
41
+ },
42
+ {
43
+ name: 'Введите значение',
44
+ text: 'Используйте три колонки (целое, числитель, знаменатель) или нажимайте кнопки быстрых пресетов. Кнопки «плюс/минус» позволяют подгонять значения без набора на клавиатуре.',
45
+ },
46
+ {
47
+ name: 'Проверьте результаты',
48
+ text: 'Вы увидите точный перевод, а также ближайшие стандартные размеры болтов и головок. Визуальная шкала поможет оценить пропорции.',
49
+ },
50
+ {
51
+ name: 'Сохраните в историю',
52
+ text: 'Нажмите «Сохранить в историю», чтобы зафиксировать замеры. История хранится в вашем браузере даже после закрытия вкладки.',
53
+ },
54
+ ];
55
+
56
+ const faqSchema: WithContext<FAQPage> = {
57
+ '@context': 'https://schema.org',
58
+ '@type': 'FAQPage',
59
+ mainEntity: faqData.map((item) => ({
60
+ '@type': 'Question',
61
+ name: item.question,
62
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
63
+ })),
64
+ };
65
+
66
+ const howToSchema: WithContext<HowToThing> = {
67
+ '@context': 'https://schema.org',
68
+ '@type': 'HowTo',
69
+ name: title,
70
+ description,
71
+ step: howToData.map((step, i) => ({
72
+ '@type': 'HowToStep',
73
+ position: i + 1,
74
+ name: step.name,
75
+ text: step.text,
76
+ })),
77
+ };
78
+
79
+ const appSchema: WithContext<SoftwareApplication> = {
80
+ '@context': 'https://schema.org',
81
+ '@type': 'SoftwareApplication',
82
+ name: title,
83
+ description,
84
+ applicationCategory: 'UtilityApplication',
85
+ operatingSystem: 'All',
86
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
87
+ inLanguage: 'ru',
88
+ };
89
+
90
+ export const content: ToolLocaleContent<WorkshopFractionConverterUI> = {
91
+ slug,
92
+ title,
93
+ description,
94
+ faqTitle: 'Часто задаваемые вопросы',
95
+ faq: faqData,
96
+ bibliography,
97
+ schemas: [faqSchema, howToSchema, appSchema],
98
+ seo: [
99
+ { title: 'FAQ', type: 'faq', schema: faqSchema },
100
+ { title: 'Инструкция', type: 'howto', schema: howToSchema },
101
+ { title: 'Приложение', type: 'app', schema: appSchema },
102
+ ],
103
+ ui: {
104
+ labelFraction: 'Тип измерения',
105
+ labelWhole: 'Целое',
106
+ labelNumerator: 'Числитель',
107
+ labelDenominator: 'Знаменатель',
108
+ labelInches: 'Дюймы',
109
+ labelMillimeters: 'Миллиметры',
110
+ resultTitle: 'Результат перевода',
111
+ resultFraction: 'Дробь',
112
+ resultInches: 'Дюймы',
113
+ resultMillimeters: 'Миллиметры',
114
+ matchTitle: 'Ближайший стандартный крепеж',
115
+ matchClosestFastener: 'Стандартный размер болта или винта',
116
+ matchClosestSocket: 'Стандартный размер головки или ключа',
117
+ matchDifference: 'Разница с вашим замером',
118
+ matchRecommendation: 'Используйте этот размер, если он доступен',
119
+ reverseSearchTitle: 'Обратный поиск',
120
+ reverseSearchLabel: 'Замеренный размер (мм)',
121
+ reverseSearchButton: 'Найти дробь',
122
+ reverseSearchHint: 'Замерьте штангенциркулем и введите значение',
123
+ unitMm: 'мм',
124
+ unitInch: 'дюйм',
125
+ modeForward: 'Дробь → Метрика',
126
+ modeReverse: 'Метрика → Дробь',
127
+ precisionLabel: 'Режим точности',
128
+ precisionCarpentry: 'Столярный',
129
+ precisionMetal: 'Слесарный',
130
+ buttonConvert: 'Перевести',
131
+ buttonClear: 'Очистить',
132
+ buttonCopyResult: 'Копировать результат',
133
+ buttonSaveToHistory: 'В историю',
134
+ historyTitle: 'История',
135
+ historyEmpty: 'Замеров пока нет',
136
+ historyRemove: 'Удалить',
137
+ helpText: 'Выберите размер или введите дробь для начала работы.',
138
+ toolOverline: 'Инструменты мастерской',
139
+ labelVisualReference: 'Визуальная справка (1 дюйм = 96 пикселей)',
140
+ },
141
+ };
@@ -0,0 +1,141 @@
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { WorkshopFractionConverterUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
5
+
6
+ const slug = 'verkstadsomvandlare-tum-brak-till-millimeter';
7
+ const title = 'Verkstadsomvandlare: Bråk till Millimeter';
8
+ const description = 'Omvandla tum-bråk till millimeter direkt. Hitta närmaste standardbultar, skruvar och hylsor för din verkstad. Designad för smutsiga händer och arbetshandskar.';
9
+
10
+ const faqData = [
11
+ {
12
+ question: 'Varför behöver jag omvandla bråk till millimeter?',
13
+ answer: 'De flesta moderna verktyg och fästelement använder det metriska systemet, men många äldre verktyg och specifikationer använder fortfarande tum-bråk. Denna omvandlare överbryggar det gapet och hjälper dig att hitta den exakta metriska motsvarigheten eller närmaste standardstorlek.',
14
+ },
15
+ {
16
+ question: 'Vad är skillnaden mellan 1/2 tum och 12,7 mm?',
17
+ answer: '1/2 tum är exakt 12,7 millimeter (0,5 × 25,4 = 12,7). Metriska och imperiala verktyg är ofta utbytbara vid standardstorlekar eftersom tillverkare anpassar vanliga fäststorlekar i båda systemen.',
18
+ },
19
+ {
20
+ question: 'Varför visar verktyget "närmaste matchning"?',
21
+ answer: 'Eftersom exakta omvandlingar ofta hamnar mellan standardstorlekar på fästelement. Verktyget hittar den bult eller hylsa som ligger närmast ditt mått, så att du kan använda det som finns tillgängligt i verkstaden.',
22
+ },
23
+ {
24
+ question: 'Vad är skillnaden mellan snickeri- och metallprecision?',
25
+ answer: 'Inom snickeri är skillnader på 0,5 mm ofta försumbara. Inom metallarbete och maskinteknik räknas varje 0,1 mm. Precisionsläget ger ledtrådar om acceptabla toleransintervall för ditt material.',
26
+ },
27
+ {
28
+ question: 'Kan jag använda detta verktyg offline?',
29
+ answer: 'Ja. Alla beräkningar sker i din webbläsare. Verktyget fungerar helt offline efter första laddningen, perfekt för användning i verkstaden utan WiFi.',
30
+ },
31
+ {
32
+ question: 'Varför innehåller verktyget en historik?',
33
+ answer: 'Vid demontering eller projekt med många delar låter historiken dig kontrollera mått utan att skriva in dem igen, och hjälper dig att bygga en stycklista medan du arbetar.',
34
+ },
35
+ ];
36
+
37
+ const howToData = [
38
+ {
39
+ name: 'Välj mättyp',
40
+ text: 'Välj "Framåt" för att omvandla ett bråk till millimeter, eller "Bakåt" för att hitta bråket för ett mått du tagit med skjutmått.',
41
+ },
42
+ {
43
+ name: 'Ange måttet',
44
+ text: 'Använd trespaltsinmatningen (helatal, täljare, nämnare) eller tryck på en snabbvals-knapp. Med stegknapparna kan du justera utan att skriva.',
45
+ },
46
+ {
47
+ name: 'Granska resultaten',
48
+ text: 'Resultatet visar den exakta omvandlingen plus närmaste standardstorlek för bult och hylsa. En visuell skala ger en känsla för proportioner.',
49
+ },
50
+ {
51
+ name: 'Spara i historiken',
52
+ text: 'Klicka på "Spara i historik" för att behålla mått för senare bruk. Historiken sparas i din webbläsare, även efter att du stängt ner den.',
53
+ },
54
+ ];
55
+
56
+ const faqSchema: WithContext<FAQPage> = {
57
+ '@context': 'https://schema.org',
58
+ '@type': 'FAQPage',
59
+ mainEntity: faqData.map((item) => ({
60
+ '@type': 'Question',
61
+ name: item.question,
62
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
63
+ })),
64
+ };
65
+
66
+ const howToSchema: WithContext<HowToThing> = {
67
+ '@context': 'https://schema.org',
68
+ '@type': 'HowTo',
69
+ name: title,
70
+ description,
71
+ step: howToData.map((step, i) => ({
72
+ '@type': 'HowToStep',
73
+ position: i + 1,
74
+ name: step.name,
75
+ text: step.text,
76
+ })),
77
+ };
78
+
79
+ const appSchema: WithContext<SoftwareApplication> = {
80
+ '@context': 'https://schema.org',
81
+ '@type': 'SoftwareApplication',
82
+ name: title,
83
+ description,
84
+ applicationCategory: 'UtilityApplication',
85
+ operatingSystem: 'All',
86
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
87
+ inLanguage: 'sv',
88
+ };
89
+
90
+ export const content: ToolLocaleContent<WorkshopFractionConverterUI> = {
91
+ slug,
92
+ title,
93
+ description,
94
+ faqTitle: 'Vanliga frågor',
95
+ faq: faqData,
96
+ bibliography,
97
+ schemas: [faqSchema, howToSchema, appSchema],
98
+ seo: [
99
+ { title: 'FAQ', type: 'faq', schema: faqSchema },
100
+ { title: 'Användning', type: 'howto', schema: howToSchema },
101
+ { title: 'Applikation', type: 'app', schema: appSchema },
102
+ ],
103
+ ui: {
104
+ labelFraction: 'Mättyp',
105
+ labelWhole: 'Heltal',
106
+ labelNumerator: 'Täljare',
107
+ labelDenominator: 'Nämnare',
108
+ labelInches: 'Tum',
109
+ labelMillimeters: 'Millimeter',
110
+ resultTitle: 'Omvandlingsresultat',
111
+ resultFraction: 'Bråk',
112
+ resultInches: 'Tum',
113
+ resultMillimeters: 'Millimeter',
114
+ matchTitle: 'Närmaste standardfäste',
115
+ matchClosestFastener: 'Standardbult eller skruvstorlek',
116
+ matchClosestSocket: 'Standardhylsa eller nyckelstorlek',
117
+ matchDifference: 'Skillnad från ditt mått',
118
+ matchRecommendation: 'Använd denna storlek om tillgänglig',
119
+ reverseSearchTitle: 'Bakåtsökning',
120
+ reverseSearchLabel: 'Uppmätt storlek (mm)',
121
+ reverseSearchButton: 'Hitta bråk',
122
+ reverseSearchHint: 'Mät med skjutmått, ange värdet',
123
+ unitMm: 'mm',
124
+ unitInch: 'tum',
125
+ modeForward: 'Bråk → Metriskt',
126
+ modeReverse: 'Metriskt → Bråk',
127
+ precisionLabel: 'Precisionsläge',
128
+ precisionCarpentry: 'Snickeri',
129
+ precisionMetal: 'Metallarbete',
130
+ buttonConvert: 'Omvandla',
131
+ buttonClear: 'Rensa',
132
+ buttonCopyResult: 'Kopiera resultat',
133
+ buttonSaveToHistory: 'Spara i historik',
134
+ historyTitle: 'Historik',
135
+ historyEmpty: 'Inga mått än',
136
+ historyRemove: 'Ta bort',
137
+ helpText: 'Välj ett mått eller ange ett bråk för att komma igång.',
138
+ toolOverline: 'Verkstadsverktyg',
139
+ labelVisualReference: 'Visuell referens (1 tum = 96px)',
140
+ },
141
+ };
@@ -0,0 +1,141 @@
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { WorkshopFractionConverterUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
5
+
6
+ const slug = 'atolye-inc-kesir-milimetre-donusturucu';
7
+ const title = 'Atölye Kesir Milimetre Dönüştürücü';
8
+ const description = 'İnç kesirli ölçüleri anında milimetreye dönüştürün. Atölyeniz için en yakın standart cıvata, somun ve lokma boyutlarını bulun. Kirli eller ve eldivenli parmaklar için tasarlandı.';
9
+
10
+ const faqData = [
11
+ {
12
+ question: 'Neden kesirleri milimetreye dönüştürmem gerekiyor?',
13
+ answer: 'Çoğu modern alet ve bağlantı elemanı metrik sistemi kullanır, ancak birçok eski alet ve teknik özellik hala inç kesirlerini kullanmaktadır. Bu dönüştürücü bu boşluğu doldurarak tam metrik karşılığını veya en yakın standart boyutu bulmanıza yardımcı olur.',
14
+ },
15
+ {
16
+ question: '1/2 inç ile 12,7 mm arasındaki fark nedir?',
17
+ answer: '1/2 inç tam olarak 12,7 milimetreye eşittir (0,5 × 25,4 = 12,7). Metrik ve emperyal aletler standart boyutlarda genellikle birbirinin yerine kullanılabilir çünkü üreticiler yaygın boyutları her iki sistemde de hizalar.',
18
+ },
19
+ {
20
+ question: 'Araç neden "en yakın bağlantı elemanını" gösteriyor?',
21
+ answer: 'Çünkü kesin dönüşümler genellikle standart bağlantı elemanı boyutlarının arasına düşer. Araç, ölçünüze en yakın ticari cıvata veya lokmayı bularak atölyenizde mevcut olanı kullanmanızı sağlar.',
22
+ },
23
+ {
24
+ question: 'Marangozluk ve metal hassasiyeti arasındaki fark nedir?',
25
+ answer: 'Marangozlukta 0,5 mm\'lik farklar genellikle önemsizdir. Metal işleme ve talaşlı imalatta ise 0,1 mm önemlidir. Hassasiyet modu, malzemeniz için kabul edilebilir tolerans aralıklarını belirtir.',
26
+ },
27
+ {
28
+ question: 'Bu aracı çevrimdışı kullanabilir miyim?',
29
+ answer: 'Evet. Tüm hesaplamalar tarayıcınızda gerçekleşir. Araç ilk yüklemeden sonra tamamen çevrimdışı çalışır; WiFi olmayan atölyelerde kullanım için idealdir.',
30
+ },
31
+ {
32
+ question: 'Araç neden geçmiş kaydı içeriyor?',
33
+ answer: 'Bir sökme işlemi veya çok parçalı bir proje üzerinde çalışırken, geçmiş, ölçüleri tekrar girmeden referans almanızı sağlar ve çalışırken bir parça listesi oluşturmanıza yardımcı olur.',
34
+ },
35
+ ];
36
+
37
+ const howToData = [
38
+ {
39
+ name: 'Ölçüm tipini seçin',
40
+ text: 'Bir kesri milimetreye dönüştürmek için "İleri"yi veya kumpasla aldığınız bir ölçünün kesrini bulmak için "Geri"yi seçin.',
41
+ },
42
+ {
43
+ name: 'Ölçüyü girin',
44
+ text: 'Üç sütunlu girişi (tam, pay, payda) kullanın veya hızlı ön ayar düğmesine dokunun. Adım düğmeleri, yazmadan ayarlama yapmanızı sağlar.',
45
+ },
46
+ {
47
+ name: 'Sonuçları inceleyin',
48
+ text: 'Sonuç, tam dönüşümün yanı sıra en yakın standart cıvata ve lokma boyutlarını gösterir. Görsel ölçek, oran hissi verir.',
49
+ },
50
+ {
51
+ name: 'Geçmişe kaydet',
52
+ text: 'Ölçüleri daha sonra başvurmak üzere saklamak için "Geçmişe Kaydet"e tıklayın. Geçmiş, kapattıktan sonra bile tarayıcınızda kalır.',
53
+ },
54
+ ];
55
+
56
+ const faqSchema: WithContext<FAQPage> = {
57
+ '@context': 'https://schema.org',
58
+ '@type': 'FAQPage',
59
+ mainEntity: faqData.map((item) => ({
60
+ '@type': 'Question',
61
+ name: item.question,
62
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
63
+ })),
64
+ };
65
+
66
+ const howToSchema: WithContext<HowToThing> = {
67
+ '@context': 'https://schema.org',
68
+ '@type': 'HowTo',
69
+ name: title,
70
+ description,
71
+ step: howToData.map((step, i) => ({
72
+ '@type': 'HowToStep',
73
+ position: i + 1,
74
+ name: step.name,
75
+ text: step.text,
76
+ })),
77
+ };
78
+
79
+ const appSchema: WithContext<SoftwareApplication> = {
80
+ '@context': 'https://schema.org',
81
+ '@type': 'SoftwareApplication',
82
+ name: title,
83
+ description,
84
+ applicationCategory: 'UtilityApplication',
85
+ operatingSystem: 'All',
86
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
87
+ inLanguage: 'tr',
88
+ };
89
+
90
+ export const content: ToolLocaleContent<WorkshopFractionConverterUI> = {
91
+ slug,
92
+ title,
93
+ description,
94
+ faqTitle: 'Sıkça Sorulan Sorular',
95
+ faq: faqData,
96
+ bibliography,
97
+ schemas: [faqSchema, howToSchema, appSchema],
98
+ seo: [
99
+ { title: 'SSS', type: 'faq', schema: faqSchema },
100
+ { title: 'Nasıl Kullanılır', type: 'howto', schema: howToSchema },
101
+ { title: 'Uygulama', type: 'app', schema: appSchema },
102
+ ],
103
+ ui: {
104
+ labelFraction: 'Ölçüm Tipi',
105
+ labelWhole: 'Tam',
106
+ labelNumerator: 'Pay',
107
+ labelDenominator: 'Payda',
108
+ labelInches: 'İnç',
109
+ labelMillimeters: 'Milimetre',
110
+ resultTitle: 'Dönüşüm Sonucu',
111
+ resultFraction: 'Kesir',
112
+ resultInches: 'İnç',
113
+ resultMillimeters: 'Milimetre',
114
+ matchTitle: 'En Yakın Standart Eşleşme',
115
+ matchClosestFastener: 'Standart cıvata veya bağlantı elemanı boyutu',
116
+ matchClosestSocket: 'Standart lokma veya anahtar boyutu',
117
+ matchDifference: 'Ölçünüzden farkı',
118
+ matchRecommendation: 'Varsa bu boyutu kullanın',
119
+ reverseSearchTitle: 'Geriye Dönük Arama',
120
+ reverseSearchLabel: 'Ölçülen Boyut (mm)',
121
+ reverseSearchButton: 'Kesri Bul',
122
+ reverseSearchHint: 'Kumpasla ölçün, değeri girin',
123
+ unitMm: 'mm',
124
+ unitInch: 'inç',
125
+ modeForward: 'Kesir → Metrik',
126
+ modeReverse: 'Metrik → Kesir',
127
+ precisionLabel: 'Hassasiyet Modu',
128
+ precisionCarpentry: 'Marangozluk',
129
+ precisionMetal: 'Metal İşleme',
130
+ buttonConvert: 'Dönüştür',
131
+ buttonClear: 'Temizle',
132
+ buttonCopyResult: 'Sonucu Kopyala',
133
+ buttonSaveToHistory: 'Geçmişe Kaydet',
134
+ historyTitle: 'Geçmiş',
135
+ historyEmpty: 'Henüz ölçüm yok',
136
+ historyRemove: 'Kaldır',
137
+ helpText: 'Başlamak için bir ölçü seçin veya bir kesir girin.',
138
+ toolOverline: 'Atölye Araçları',
139
+ labelVisualReference: 'Görsel Referans (1 inç = 96 piksel)',
140
+ },
141
+ };
@@ -0,0 +1,141 @@
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { WorkshopFractionConverterUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
5
+
6
+ const slug = 'workshop-fraction-converter';
7
+ const title = '车间分数转公制转换器';
8
+ const description = '瞬间将分数英寸转换为毫米。为您的车间寻找最接近的标准螺栓、螺钉和套筒。专为沾满油污的手和戴手套的手指设计。';
9
+
10
+ const faqData = [
11
+ {
12
+ question: '为什么我需要将分数转换为毫米?',
13
+ answer: '大多数现代工具和紧固件使用公制,但许多老式工具和规格仍在使用分数英寸。此转换器弥合了这一差距,帮助您找到精确的公制对应值或最接近的标准紧固件尺寸。',
14
+ },
15
+ {
16
+ question: '1/2 英寸和 12.7 毫米有什么区别?',
17
+ answer: '1/2 英寸正好等于 12.7 毫米 (0.5 × 25.4 = 12.7)。在标准尺寸下,由于制造商在两个系统中统一了常见的紧固件尺寸,公制和英制工具通常可以互换使用。',
18
+ },
19
+ {
20
+ question: '为什么工具显示“最接近的紧固件”?',
21
+ answer: '因为精确转换的结果通常介于标准紧固件尺寸之间。该工具会找到与您的测量值最接近的市售螺栓或套筒,以便您可以使用车间中的现有材料。',
22
+ },
23
+ {
24
+ question: '木工精度和金属精度有什么区别?',
25
+ answer: '在木工中,0.5 毫米的差异通常可以忽略不计。在金属加工和机械加工中,0.1 毫米至关重要。精度模式会提示适合您材料的容差范围。',
26
+ },
27
+ {
28
+ question: '我可以离线使用这个工具吗?',
29
+ answer: '可以。所有计算都在您的浏览器中进行。初次加载后,该工具可完全离线运行,非常适合在没有 WiFi 的车间使用。',
30
+ },
31
+ {
32
+ question: '为什么工具包含历史记录?',
33
+ answer: '在拆卸或处理包含多个零件的项目时,历史记录让您可以查阅测量值而无需重新输入,并帮助您在工作时建立零件清单。',
34
+ },
35
+ ];
36
+
37
+ const howToData = [
38
+ {
39
+ name: '选择测量类型',
40
+ text: '选择“正向”将分数转换为毫米,或选择“反向”为您用卡尺测得的数值寻找分数。',
41
+ },
42
+ {
43
+ name: '输入数值',
44
+ text: '使用三列输入(整数、分子、分母)或点击快速预设按钮。步进按钮让您无需键入即可进行调整。',
45
+ },
46
+ {
47
+ name: '查看结果',
48
+ text: '结果显示精确转换值以及最接近的标准螺栓和套筒尺寸。视觉比例尺让您对比例有直观感受。',
49
+ },
50
+ {
51
+ name: '保存到历史记录',
52
+ text: '点击“保存到历史记录”以保留测量值供以后参考。历史记录会保存在您的浏览器中,即使关闭后也是如此。',
53
+ },
54
+ ];
55
+
56
+ const faqSchema: WithContext<FAQPage> = {
57
+ '@context': 'https://schema.org',
58
+ '@type': 'FAQPage',
59
+ mainEntity: faqData.map((item) => ({
60
+ '@type': 'Question',
61
+ name: item.question,
62
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
63
+ })),
64
+ };
65
+
66
+ const howToSchema: WithContext<HowToThing> = {
67
+ '@context': 'https://schema.org',
68
+ '@type': 'HowTo',
69
+ name: title,
70
+ description,
71
+ step: howToData.map((step, i) => ({
72
+ '@type': 'HowToStep',
73
+ position: i + 1,
74
+ name: step.name,
75
+ text: step.text,
76
+ })),
77
+ };
78
+
79
+ const appSchema: WithContext<SoftwareApplication> = {
80
+ '@context': 'https://schema.org',
81
+ '@type': 'SoftwareApplication',
82
+ name: title,
83
+ description,
84
+ applicationCategory: 'UtilityApplication',
85
+ operatingSystem: 'All',
86
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
87
+ inLanguage: 'zh',
88
+ };
89
+
90
+ export const content: ToolLocaleContent<WorkshopFractionConverterUI> = {
91
+ slug,
92
+ title,
93
+ description,
94
+ faqTitle: '常见问题',
95
+ faq: faqData,
96
+ bibliography,
97
+ schemas: [faqSchema, howToSchema, appSchema],
98
+ seo: [
99
+ { title: '常见问题', type: 'faq', schema: faqSchema },
100
+ { title: '如何使用', type: 'howto', schema: howToSchema },
101
+ { title: '应用程序', type: 'app', schema: appSchema },
102
+ ],
103
+ ui: {
104
+ labelFraction: '测量类型',
105
+ labelWhole: '整数',
106
+ labelNumerator: '分子',
107
+ labelDenominator: '分母',
108
+ labelInches: '英寸',
109
+ labelMillimeters: '毫米',
110
+ resultTitle: '转换结果',
111
+ resultFraction: '分数',
112
+ resultInches: '英寸',
113
+ resultMillimeters: '毫米',
114
+ matchTitle: '最接近的标准规格',
115
+ matchClosestFastener: '标准螺栓或紧固件尺寸',
116
+ matchClosestSocket: '标准套筒或扳手尺寸',
117
+ matchDifference: '与测量值的差异',
118
+ matchRecommendation: '如果有,请使用此尺寸',
119
+ reverseSearchTitle: '反向搜索',
120
+ reverseSearchLabel: '测量尺寸 (毫米)',
121
+ reverseSearchButton: '寻找分数',
122
+ reverseSearchHint: '用卡尺测量并输入数值',
123
+ unitMm: '毫米',
124
+ unitInch: '英寸',
125
+ modeForward: '分数 → 公制',
126
+ modeReverse: '公制 → 分数',
127
+ precisionLabel: '精度模式',
128
+ precisionCarpentry: '木工',
129
+ precisionMetal: '金属加工',
130
+ buttonConvert: '转换',
131
+ buttonClear: '清除',
132
+ buttonCopyResult: '复制结果',
133
+ buttonSaveToHistory: '保存到历史记录',
134
+ historyTitle: '历史记录',
135
+ historyEmpty: '尚无测量记录',
136
+ historyRemove: '移除',
137
+ helpText: '选择测量值或输入分数以开始。',
138
+ toolOverline: '车间工具',
139
+ labelVisualReference: '视觉参考 (1 英寸 = 96 像素)',
140
+ },
141
+ };
@@ -0,0 +1,11 @@
1
+ import type { ToolDefinition } from '../../types';
2
+ import { workshopFractionConverter } from './entry';
3
+ export * from './entry';
4
+ export const WORKSHOP_FRACTION_CONVERTER_TOOL: ToolDefinition = {
5
+ entry: workshopFractionConverter,
6
+ Component: () => import('./component.astro'),
7
+ SEOComponent: () => import('./seo.astro'),
8
+ BibliographyComponent: () => import('./bibliography.astro'),
9
+ };
10
+
11
+ export type { WorkshopFractionConverterUI } from './ui';
@@ -0,0 +1,15 @@
1
+ ---
2
+ import { SEORenderer } from '@jjlmoya/utils-shared';
3
+ import { workshopFractionConverter } from './index';
4
+ import type { KnownLocale } from '../../types';
5
+
6
+ interface Props {
7
+ locale?: KnownLocale;
8
+ }
9
+
10
+ const { locale = 'es' } = Astro.props;
11
+ const content = await workshopFractionConverter.i18n[locale]?.();
12
+ if (!content) return null;
13
+ ---
14
+
15
+ {content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}