@jjlmoya/utils-diy 1.11.0 → 1.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/category/index.ts +2 -1
- package/src/entries.ts +3 -1
- package/src/index.ts +2 -0
- package/src/pages/[locale]/[slug].astro +28 -12
- package/src/tests/locale_completeness.test.ts +7 -9
- package/src/tests/shared-test-helpers.ts +56 -0
- package/src/tests/tool_exports.test.ts +34 -0
- package/src/tests/tool_validation.test.ts +2 -2
- package/src/tool/balusterCalculator/bibliography.astro +2 -10
- package/src/tool/balusterCalculator/bibliography.ts +16 -0
- package/src/tool/balusterCalculator/i18n/de.ts +2 -15
- package/src/tool/balusterCalculator/i18n/en.ts +2 -15
- package/src/tool/balusterCalculator/i18n/es.ts +2 -15
- package/src/tool/balusterCalculator/i18n/fr.ts +2 -15
- package/src/tool/balusterCalculator/i18n/id.ts +2 -15
- package/src/tool/balusterCalculator/i18n/it.ts +2 -15
- package/src/tool/balusterCalculator/i18n/ja.ts +2 -15
- package/src/tool/balusterCalculator/i18n/ko.ts +2 -15
- package/src/tool/balusterCalculator/i18n/nl.ts +2 -15
- package/src/tool/balusterCalculator/i18n/pl.ts +2 -15
- package/src/tool/balusterCalculator/i18n/pt.ts +2 -15
- package/src/tool/balusterCalculator/i18n/ru.ts +2 -15
- package/src/tool/balusterCalculator/i18n/sv.ts +2 -15
- package/src/tool/balusterCalculator/i18n/tr.ts +2 -15
- package/src/tool/balusterCalculator/i18n/zh.ts +2 -15
- package/src/tool/balusterCalculator/seo.astro +1 -1
- package/src/tool/clayCalculator/bibliography.astro +2 -10
- package/src/tool/clayCalculator/bibliography.ts +12 -0
- package/src/tool/clayCalculator/i18n/de.ts +2 -11
- package/src/tool/clayCalculator/i18n/en.ts +2 -11
- package/src/tool/clayCalculator/i18n/es.ts +2 -11
- package/src/tool/clayCalculator/i18n/fr.ts +2 -11
- package/src/tool/clayCalculator/i18n/id.ts +2 -11
- package/src/tool/clayCalculator/i18n/it.ts +2 -11
- package/src/tool/clayCalculator/i18n/ja.ts +2 -11
- package/src/tool/clayCalculator/i18n/ko.ts +2 -11
- package/src/tool/clayCalculator/i18n/nl.ts +2 -11
- package/src/tool/clayCalculator/i18n/pl.ts +2 -11
- package/src/tool/clayCalculator/i18n/pt.ts +2 -11
- package/src/tool/clayCalculator/i18n/ru.ts +2 -11
- package/src/tool/clayCalculator/i18n/sv.ts +2 -11
- package/src/tool/clayCalculator/i18n/tr.ts +2 -11
- package/src/tool/clayCalculator/i18n/zh.ts +2 -11
- package/src/tool/clayCalculator/seo.astro +1 -1
- package/src/tool/concreteCalculator/bibliography.astro +2 -9
- package/src/tool/concreteCalculator/bibliography.ts +7 -0
- package/src/tool/concreteCalculator/i18n/de.ts +2 -15
- package/src/tool/concreteCalculator/i18n/en.ts +2 -15
- package/src/tool/concreteCalculator/i18n/es.ts +2 -15
- package/src/tool/concreteCalculator/i18n/fr.ts +2 -15
- package/src/tool/concreteCalculator/i18n/id.ts +2 -15
- package/src/tool/concreteCalculator/i18n/it.ts +2 -15
- package/src/tool/concreteCalculator/i18n/ja.ts +2 -15
- package/src/tool/concreteCalculator/i18n/ko.ts +2 -15
- package/src/tool/concreteCalculator/i18n/nl.ts +2 -15
- package/src/tool/concreteCalculator/i18n/pl.ts +2 -15
- package/src/tool/concreteCalculator/i18n/pt.ts +2 -15
- package/src/tool/concreteCalculator/i18n/ru.ts +2 -15
- package/src/tool/concreteCalculator/i18n/sv.ts +2 -15
- package/src/tool/concreteCalculator/i18n/tr.ts +2 -15
- package/src/tool/concreteCalculator/i18n/zh.ts +2 -15
- package/src/tool/concreteCalculator/seo.astro +2 -1
- package/src/tool/cutOptimizer/bibliography.astro +2 -9
- package/src/tool/cutOptimizer/bibliography.ts +12 -0
- package/src/tool/cutOptimizer/i18n/de.ts +2 -11
- package/src/tool/cutOptimizer/i18n/en.ts +2 -11
- package/src/tool/cutOptimizer/i18n/es.ts +2 -11
- package/src/tool/cutOptimizer/i18n/fr.ts +2 -11
- package/src/tool/cutOptimizer/i18n/id.ts +2 -11
- package/src/tool/cutOptimizer/i18n/it.ts +2 -11
- package/src/tool/cutOptimizer/i18n/ja.ts +2 -11
- package/src/tool/cutOptimizer/i18n/ko.ts +2 -11
- package/src/tool/cutOptimizer/i18n/nl.ts +2 -11
- package/src/tool/cutOptimizer/i18n/pl.ts +2 -11
- package/src/tool/cutOptimizer/i18n/pt.ts +2 -11
- package/src/tool/cutOptimizer/i18n/ru.ts +2 -11
- package/src/tool/cutOptimizer/i18n/sv.ts +2 -11
- package/src/tool/cutOptimizer/i18n/tr.ts +2 -11
- package/src/tool/cutOptimizer/i18n/zh.ts +2 -11
- package/src/tool/cutOptimizer/seo.astro +2 -1
- package/src/tool/drillCalculator/bibliography.astro +2 -9
- package/src/tool/drillCalculator/bibliography.ts +12 -0
- package/src/tool/drillCalculator/i18n/de.ts +2 -5
- package/src/tool/drillCalculator/i18n/en.ts +2 -5
- package/src/tool/drillCalculator/i18n/es.ts +2 -5
- package/src/tool/drillCalculator/i18n/fr.ts +2 -5
- package/src/tool/drillCalculator/i18n/id.ts +2 -5
- package/src/tool/drillCalculator/i18n/it.ts +2 -5
- package/src/tool/drillCalculator/i18n/ja.ts +2 -5
- package/src/tool/drillCalculator/i18n/ko.ts +2 -5
- package/src/tool/drillCalculator/i18n/nl.ts +2 -5
- package/src/tool/drillCalculator/i18n/pl.ts +2 -5
- package/src/tool/drillCalculator/i18n/pt.ts +2 -5
- package/src/tool/drillCalculator/i18n/ru.ts +2 -5
- package/src/tool/drillCalculator/i18n/sv.ts +2 -5
- package/src/tool/drillCalculator/i18n/tr.ts +2 -5
- package/src/tool/drillCalculator/i18n/zh.ts +2 -5
- package/src/tool/drillCalculator/seo.astro +2 -1
- package/src/tool/drillSharpener/bibliography.astro +2 -9
- package/src/tool/drillSharpener/bibliography.ts +16 -0
- package/src/tool/drillSharpener/i18n/de.ts +2 -5
- package/src/tool/drillSharpener/i18n/en.ts +2 -6
- package/src/tool/drillSharpener/i18n/es.ts +2 -6
- package/src/tool/drillSharpener/i18n/fr.ts +2 -6
- package/src/tool/drillSharpener/i18n/id.ts +2 -5
- package/src/tool/drillSharpener/i18n/it.ts +2 -5
- package/src/tool/drillSharpener/i18n/ja.ts +2 -5
- package/src/tool/drillSharpener/i18n/ko.ts +2 -5
- package/src/tool/drillSharpener/i18n/nl.ts +2 -5
- package/src/tool/drillSharpener/i18n/pl.ts +2 -5
- package/src/tool/drillSharpener/i18n/pt.ts +2 -5
- package/src/tool/drillSharpener/i18n/ru.ts +2 -5
- package/src/tool/drillSharpener/i18n/sv.ts +2 -5
- package/src/tool/drillSharpener/i18n/tr.ts +2 -5
- package/src/tool/drillSharpener/i18n/zh.ts +2 -5
- package/src/tool/drillSharpener/seo.astro +2 -1
- package/src/tool/epoxyCalculator/bibliography.astro +2 -10
- package/src/tool/epoxyCalculator/bibliography.ts +20 -0
- package/src/tool/epoxyCalculator/i18n/de.ts +2 -5
- package/src/tool/epoxyCalculator/i18n/en.ts +2 -19
- package/src/tool/epoxyCalculator/i18n/es.ts +2 -19
- package/src/tool/epoxyCalculator/i18n/fr.ts +2 -19
- package/src/tool/epoxyCalculator/i18n/id.ts +2 -5
- package/src/tool/epoxyCalculator/i18n/it.ts +2 -5
- package/src/tool/epoxyCalculator/i18n/ja.ts +2 -5
- package/src/tool/epoxyCalculator/i18n/ko.ts +2 -5
- package/src/tool/epoxyCalculator/i18n/nl.ts +2 -5
- package/src/tool/epoxyCalculator/i18n/pl.ts +2 -5
- package/src/tool/epoxyCalculator/i18n/pt.ts +2 -5
- package/src/tool/epoxyCalculator/i18n/ru.ts +2 -5
- package/src/tool/epoxyCalculator/i18n/sv.ts +2 -5
- package/src/tool/epoxyCalculator/i18n/tr.ts +2 -5
- package/src/tool/epoxyCalculator/i18n/zh.ts +2 -5
- package/src/tool/epoxyCalculator/seo.astro +1 -1
- package/src/tool/furnitureFit/bibliography.astro +2 -9
- package/src/tool/furnitureFit/bibliography.ts +12 -0
- package/src/tool/furnitureFit/i18n/de.ts +2 -5
- package/src/tool/furnitureFit/i18n/en.ts +2 -5
- package/src/tool/furnitureFit/i18n/es.ts +2 -5
- package/src/tool/furnitureFit/i18n/fr.ts +2 -5
- package/src/tool/furnitureFit/i18n/id.ts +2 -5
- package/src/tool/furnitureFit/i18n/it.ts +2 -5
- package/src/tool/furnitureFit/i18n/ja.ts +2 -5
- package/src/tool/furnitureFit/i18n/ko.ts +2 -5
- package/src/tool/furnitureFit/i18n/nl.ts +2 -5
- package/src/tool/furnitureFit/i18n/pl.ts +2 -5
- package/src/tool/furnitureFit/i18n/pt.ts +2 -5
- package/src/tool/furnitureFit/i18n/ru.ts +2 -5
- package/src/tool/furnitureFit/i18n/sv.ts +2 -5
- package/src/tool/furnitureFit/i18n/tr.ts +2 -5
- package/src/tool/furnitureFit/i18n/zh.ts +2 -5
- package/src/tool/furnitureFit/seo.astro +2 -1
- package/src/tool/mortarCalculator/bibliography.astro +2 -9
- package/src/tool/mortarCalculator/bibliography.ts +20 -0
- package/src/tool/mortarCalculator/i18n/de.ts +2 -5
- package/src/tool/mortarCalculator/i18n/en.ts +2 -19
- package/src/tool/mortarCalculator/i18n/es.ts +2 -19
- package/src/tool/mortarCalculator/i18n/fr.ts +2 -19
- package/src/tool/mortarCalculator/i18n/id.ts +2 -5
- package/src/tool/mortarCalculator/i18n/it.ts +2 -5
- package/src/tool/mortarCalculator/i18n/ja.ts +2 -5
- package/src/tool/mortarCalculator/i18n/ko.ts +2 -5
- package/src/tool/mortarCalculator/i18n/nl.ts +2 -5
- package/src/tool/mortarCalculator/i18n/pl.ts +2 -5
- package/src/tool/mortarCalculator/i18n/pt.ts +2 -5
- package/src/tool/mortarCalculator/i18n/ru.ts +2 -5
- package/src/tool/mortarCalculator/i18n/sv.ts +2 -5
- package/src/tool/mortarCalculator/i18n/tr.ts +2 -5
- package/src/tool/mortarCalculator/i18n/zh.ts +2 -5
- package/src/tool/mortarCalculator/seo.astro +2 -1
- package/src/tool/passepartoutCalculator/bibliography.astro +2 -9
- package/src/tool/passepartoutCalculator/bibliography.ts +16 -0
- package/src/tool/passepartoutCalculator/i18n/de.ts +2 -6
- package/src/tool/passepartoutCalculator/i18n/en.ts +2 -15
- package/src/tool/passepartoutCalculator/i18n/es.ts +2 -15
- package/src/tool/passepartoutCalculator/i18n/fr.ts +2 -15
- package/src/tool/passepartoutCalculator/i18n/id.ts +2 -6
- package/src/tool/passepartoutCalculator/i18n/it.ts +2 -6
- package/src/tool/passepartoutCalculator/i18n/ja.ts +2 -6
- package/src/tool/passepartoutCalculator/i18n/ko.ts +2 -6
- package/src/tool/passepartoutCalculator/i18n/nl.ts +2 -6
- package/src/tool/passepartoutCalculator/i18n/pl.ts +2 -6
- package/src/tool/passepartoutCalculator/i18n/pt.ts +2 -6
- package/src/tool/passepartoutCalculator/i18n/ru.ts +2 -6
- package/src/tool/passepartoutCalculator/i18n/sv.ts +2 -6
- package/src/tool/passepartoutCalculator/i18n/tr.ts +2 -6
- package/src/tool/passepartoutCalculator/i18n/zh.ts +2 -6
- package/src/tool/passepartoutCalculator/seo.astro +2 -1
- package/src/tool/stairCalculator/bibliography.astro +2 -9
- package/src/tool/stairCalculator/bibliography.ts +16 -0
- package/src/tool/stairCalculator/i18n/de.ts +2 -5
- package/src/tool/stairCalculator/i18n/en.ts +2 -6
- package/src/tool/stairCalculator/i18n/es.ts +2 -6
- package/src/tool/stairCalculator/i18n/fr.ts +2 -6
- package/src/tool/stairCalculator/i18n/id.ts +2 -5
- package/src/tool/stairCalculator/i18n/it.ts +2 -5
- package/src/tool/stairCalculator/i18n/ja.ts +2 -5
- package/src/tool/stairCalculator/i18n/ko.ts +2 -5
- package/src/tool/stairCalculator/i18n/nl.ts +2 -5
- package/src/tool/stairCalculator/i18n/pl.ts +2 -5
- package/src/tool/stairCalculator/i18n/pt.ts +2 -5
- package/src/tool/stairCalculator/i18n/ru.ts +2 -5
- package/src/tool/stairCalculator/i18n/sv.ts +2 -5
- package/src/tool/stairCalculator/i18n/tr.ts +2 -5
- package/src/tool/stairCalculator/i18n/zh.ts +2 -5
- package/src/tool/stairCalculator/seo.astro +2 -1
- package/src/tool/thermalExpansionCalculator/bibliography.astro +2 -9
- package/src/tool/thermalExpansionCalculator/bibliography.ts +16 -0
- package/src/tool/thermalExpansionCalculator/i18n/de.ts +2 -6
- package/src/tool/thermalExpansionCalculator/i18n/en.ts +2 -6
- package/src/tool/thermalExpansionCalculator/i18n/es.ts +2 -6
- package/src/tool/thermalExpansionCalculator/i18n/fr.ts +2 -6
- package/src/tool/thermalExpansionCalculator/i18n/id.ts +2 -6
- package/src/tool/thermalExpansionCalculator/i18n/it.ts +2 -6
- package/src/tool/thermalExpansionCalculator/i18n/ja.ts +2 -6
- package/src/tool/thermalExpansionCalculator/i18n/ko.ts +2 -6
- package/src/tool/thermalExpansionCalculator/i18n/nl.ts +2 -6
- package/src/tool/thermalExpansionCalculator/i18n/pl.ts +2 -6
- package/src/tool/thermalExpansionCalculator/i18n/pt.ts +2 -6
- package/src/tool/thermalExpansionCalculator/i18n/ru.ts +2 -6
- package/src/tool/thermalExpansionCalculator/i18n/sv.ts +2 -6
- package/src/tool/thermalExpansionCalculator/i18n/tr.ts +2 -6
- package/src/tool/thermalExpansionCalculator/i18n/zh.ts +2 -6
- package/src/tool/thermalExpansionCalculator/seo.astro +2 -1
- package/src/tool/voltageDropCalculator/bibliography.astro +2 -9
- package/src/tool/voltageDropCalculator/bibliography.ts +16 -0
- package/src/tool/voltageDropCalculator/i18n/de.ts +2 -5
- package/src/tool/voltageDropCalculator/i18n/en.ts +2 -6
- package/src/tool/voltageDropCalculator/i18n/es.ts +2 -6
- package/src/tool/voltageDropCalculator/i18n/fr.ts +2 -6
- package/src/tool/voltageDropCalculator/i18n/id.ts +2 -5
- package/src/tool/voltageDropCalculator/i18n/it.ts +2 -5
- package/src/tool/voltageDropCalculator/i18n/ja.ts +2 -5
- package/src/tool/voltageDropCalculator/i18n/ko.ts +2 -5
- package/src/tool/voltageDropCalculator/i18n/nl.ts +2 -5
- package/src/tool/voltageDropCalculator/i18n/pl.ts +2 -5
- package/src/tool/voltageDropCalculator/i18n/pt.ts +2 -5
- package/src/tool/voltageDropCalculator/i18n/ru.ts +2 -5
- package/src/tool/voltageDropCalculator/i18n/sv.ts +2 -5
- package/src/tool/voltageDropCalculator/i18n/tr.ts +2 -5
- package/src/tool/voltageDropCalculator/i18n/zh.ts +2 -5
- package/src/tool/voltageDropCalculator/seo.astro +2 -1
- package/src/tool/workshopFractionConverter/bibliography.astro +6 -0
- package/src/tool/workshopFractionConverter/bibliography.ts +12 -0
- package/src/tool/workshopFractionConverter/client.ts +183 -0
- package/src/tool/workshopFractionConverter/component.astro +226 -0
- package/src/tool/workshopFractionConverter/converter.ts +110 -0
- package/src/tool/workshopFractionConverter/engine.ts +223 -0
- package/src/tool/workshopFractionConverter/entry.ts +24 -0
- package/src/tool/workshopFractionConverter/i18n/de.ts +147 -0
- package/src/tool/workshopFractionConverter/i18n/en.ts +147 -0
- package/src/tool/workshopFractionConverter/i18n/es.ts +147 -0
- package/src/tool/workshopFractionConverter/i18n/fr.ts +147 -0
- package/src/tool/workshopFractionConverter/i18n/id.ts +147 -0
- package/src/tool/workshopFractionConverter/i18n/it.ts +147 -0
- package/src/tool/workshopFractionConverter/i18n/ja.ts +147 -0
- package/src/tool/workshopFractionConverter/i18n/ko.ts +147 -0
- package/src/tool/workshopFractionConverter/i18n/nl.ts +147 -0
- package/src/tool/workshopFractionConverter/i18n/pl.ts +147 -0
- package/src/tool/workshopFractionConverter/i18n/pt.ts +147 -0
- package/src/tool/workshopFractionConverter/i18n/ru.ts +147 -0
- package/src/tool/workshopFractionConverter/i18n/sv.ts +147 -0
- package/src/tool/workshopFractionConverter/i18n/tr.ts +147 -0
- package/src/tool/workshopFractionConverter/i18n/zh.ts +147 -0
- package/src/tool/workshopFractionConverter/index.ts +11 -0
- package/src/tool/workshopFractionConverter/seo.astro +15 -0
- package/src/tool/workshopFractionConverter/types-client.ts +89 -0
- package/src/tool/workshopFractionConverter/ui-updater.ts +94 -0
- package/src/tool/workshopFractionConverter/ui.ts +38 -0
- package/src/tool/workshopFractionConverter/workshop-fraction-converter.css +563 -0
- package/src/tools.ts +2 -1
- package/src/types.ts +1 -1
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
export interface FractionInput {
|
|
2
|
+
whole: number;
|
|
3
|
+
numerator: number;
|
|
4
|
+
denominator: number;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export interface ConversionResult {
|
|
8
|
+
fraction: FractionInput;
|
|
9
|
+
inches: number;
|
|
10
|
+
millimeters: number;
|
|
11
|
+
closestFastener: FastenerMatch | null;
|
|
12
|
+
closestSocket: SocketMatch | null;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface FastenerMatch {
|
|
16
|
+
name: string;
|
|
17
|
+
size_mm: number;
|
|
18
|
+
size_inch: string;
|
|
19
|
+
difference_mm: number;
|
|
20
|
+
difference_pct: number;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export interface SocketMatch {
|
|
24
|
+
name: string;
|
|
25
|
+
size_mm: number;
|
|
26
|
+
size_inch: string;
|
|
27
|
+
difference_mm: number;
|
|
28
|
+
difference_pct: number;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export interface ReverseSearchResult {
|
|
32
|
+
input_mm: number;
|
|
33
|
+
closest_fraction: FractionInput;
|
|
34
|
+
inches: number;
|
|
35
|
+
closestFastener: FastenerMatch | null;
|
|
36
|
+
closestSocket: SocketMatch | null;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const STANDARD_FASTENERS = [
|
|
40
|
+
{ name: '#0', inch: '1/80', mm: 0.318 },
|
|
41
|
+
{ name: '#1', inch: '1/73', mm: 0.346 },
|
|
42
|
+
{ name: '#2', inch: '3/32', mm: 2.362 },
|
|
43
|
+
{ name: '#3', inch: '7/64', mm: 2.778 },
|
|
44
|
+
{ name: '#4', inch: '7/64', mm: 2.819 },
|
|
45
|
+
{ name: '#5', inch: '1/8', mm: 3.175 },
|
|
46
|
+
{ name: '#6', inch: '9/64', mm: 3.556 },
|
|
47
|
+
{ name: '#8', inch: '5/32', mm: 4.191 },
|
|
48
|
+
{ name: '#10', inch: '3/16', mm: 4.826 },
|
|
49
|
+
{ name: '#12', inch: '7/32', mm: 5.461 },
|
|
50
|
+
{ name: '1/4"', inch: '1/4', mm: 6.35 },
|
|
51
|
+
{ name: '5/16"', inch: '5/16', mm: 7.938 },
|
|
52
|
+
{ name: '3/8"', inch: '3/8', mm: 9.525 },
|
|
53
|
+
{ name: '7/16"', inch: '7/16', mm: 11.113 },
|
|
54
|
+
{ name: '1/2"', inch: '1/2', mm: 12.7 },
|
|
55
|
+
{ name: '9/16"', inch: '9/16', mm: 14.288 },
|
|
56
|
+
{ name: '5/8"', inch: '5/8', mm: 15.875 },
|
|
57
|
+
{ name: '3/4"', inch: '3/4', mm: 19.05 },
|
|
58
|
+
{ name: '7/8"', inch: '7/8', mm: 22.225 },
|
|
59
|
+
{ name: '1"', inch: '1', mm: 25.4 },
|
|
60
|
+
];
|
|
61
|
+
|
|
62
|
+
const STANDARD_SOCKETS = [
|
|
63
|
+
{ name: '4mm', mm: 4.0, inch: '5/32' },
|
|
64
|
+
{ name: '4.5mm', mm: 4.5, inch: '3/16' },
|
|
65
|
+
{ name: '5mm', mm: 5.0, inch: '13/64' },
|
|
66
|
+
{ name: '5.5mm', mm: 5.5, inch: '7/32' },
|
|
67
|
+
{ name: '6mm', mm: 6.0, inch: '15/64' },
|
|
68
|
+
{ name: '7mm', mm: 7.0, inch: '9/32' },
|
|
69
|
+
{ name: '8mm', mm: 8.0, inch: '5/16' },
|
|
70
|
+
{ name: '9mm', mm: 9.0, inch: '23/64' },
|
|
71
|
+
{ name: '10mm', mm: 10.0, inch: '3/8' },
|
|
72
|
+
{ name: '11mm', mm: 11.0, inch: '7/16' },
|
|
73
|
+
{ name: '12mm', mm: 12.0, inch: '15/32' },
|
|
74
|
+
{ name: '13mm', mm: 13.0, inch: '1/2' },
|
|
75
|
+
{ name: '14mm', mm: 14.0, inch: '9/16' },
|
|
76
|
+
{ name: '15mm', mm: 15.0, inch: '19/32' },
|
|
77
|
+
{ name: '16mm', mm: 16.0, inch: '5/8' },
|
|
78
|
+
{ name: '17mm', mm: 17.0, inch: '11/16' },
|
|
79
|
+
{ name: '18mm', mm: 18.0, inch: '23/32' },
|
|
80
|
+
{ name: '19mm', mm: 19.0, inch: '3/4' },
|
|
81
|
+
{ name: '20mm', mm: 20.0, inch: '13/16' },
|
|
82
|
+
{ name: '1/4" socket', mm: 6.35, inch: '1/4' },
|
|
83
|
+
{ name: '5/16" socket', mm: 7.938, inch: '5/16' },
|
|
84
|
+
{ name: '3/8" socket', mm: 9.525, inch: '3/8' },
|
|
85
|
+
{ name: '7/16" socket', mm: 11.113, inch: '7/16' },
|
|
86
|
+
{ name: '1/2" socket', mm: 12.7, inch: '1/2' },
|
|
87
|
+
{ name: '9/16" socket', mm: 14.288, inch: '9/16' },
|
|
88
|
+
{ name: '5/8" socket', mm: 15.875, inch: '5/8' },
|
|
89
|
+
{ name: '11/16" socket', mm: 17.463, inch: '11/16' },
|
|
90
|
+
{ name: '3/4" socket', mm: 19.05, inch: '3/4' },
|
|
91
|
+
];
|
|
92
|
+
|
|
93
|
+
export function fractionToInches(input: FractionInput): number {
|
|
94
|
+
if (input.denominator === 0) return 0;
|
|
95
|
+
return input.whole + input.numerator / input.denominator;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
export function inchesToMillimeters(inches: number): number {
|
|
99
|
+
return inches * 25.4;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export function convertFraction(input: FractionInput): ConversionResult {
|
|
103
|
+
const inches = fractionToInches(input);
|
|
104
|
+
const mm = inchesToMillimeters(inches);
|
|
105
|
+
const closestFastener = findClosestFastener(mm);
|
|
106
|
+
const closestSocket = findClosestSocket(mm);
|
|
107
|
+
|
|
108
|
+
return {
|
|
109
|
+
fraction: input,
|
|
110
|
+
inches,
|
|
111
|
+
millimeters: mm,
|
|
112
|
+
closestFastener,
|
|
113
|
+
closestSocket,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
export function reverseSearch(millimeters: number): ReverseSearchResult {
|
|
118
|
+
const inches = millimeters / 25.4;
|
|
119
|
+
const fraction = mmToFraction(millimeters);
|
|
120
|
+
const closestFastener = findClosestFastener(millimeters);
|
|
121
|
+
const closestSocket = findClosestSocket(millimeters);
|
|
122
|
+
|
|
123
|
+
return {
|
|
124
|
+
input_mm: millimeters,
|
|
125
|
+
closest_fraction: fraction,
|
|
126
|
+
inches,
|
|
127
|
+
closestFastener,
|
|
128
|
+
closestSocket,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
export function findClosestFastener(mm: number): FastenerMatch | null {
|
|
133
|
+
if (STANDARD_FASTENERS.length === 0) return null;
|
|
134
|
+
|
|
135
|
+
let closest = STANDARD_FASTENERS[0];
|
|
136
|
+
let minDiff = Math.abs(closest.mm - mm);
|
|
137
|
+
|
|
138
|
+
for (const fastener of STANDARD_FASTENERS) {
|
|
139
|
+
const diff = Math.abs(fastener.mm - mm);
|
|
140
|
+
if (diff < minDiff) {
|
|
141
|
+
minDiff = diff;
|
|
142
|
+
closest = fastener;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
const pct = (minDiff / mm) * 100;
|
|
147
|
+
return {
|
|
148
|
+
name: closest.name,
|
|
149
|
+
size_mm: closest.mm,
|
|
150
|
+
size_inch: closest.inch,
|
|
151
|
+
difference_mm: closest.mm - mm,
|
|
152
|
+
difference_pct: pct,
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
export function findClosestSocket(mm: number): SocketMatch | null {
|
|
157
|
+
if (STANDARD_SOCKETS.length === 0) return null;
|
|
158
|
+
|
|
159
|
+
let closest = STANDARD_SOCKETS[0];
|
|
160
|
+
let minDiff = Math.abs(closest.mm - mm);
|
|
161
|
+
|
|
162
|
+
for (const socket of STANDARD_SOCKETS) {
|
|
163
|
+
const diff = Math.abs(socket.mm - mm);
|
|
164
|
+
if (diff < minDiff) {
|
|
165
|
+
minDiff = diff;
|
|
166
|
+
closest = socket;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
const pct = (minDiff / mm) * 100;
|
|
171
|
+
return {
|
|
172
|
+
name: closest.name,
|
|
173
|
+
size_mm: closest.mm,
|
|
174
|
+
size_inch: closest.inch,
|
|
175
|
+
difference_mm: closest.mm - mm,
|
|
176
|
+
difference_pct: pct,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
export function mmToFraction(mm: number): FractionInput {
|
|
181
|
+
const inches = mm / 25.4;
|
|
182
|
+
const whole = Math.floor(inches);
|
|
183
|
+
const fractional = inches - whole;
|
|
184
|
+
|
|
185
|
+
const denominators = [2, 4, 8, 16, 32, 64];
|
|
186
|
+
let bestNum = 0;
|
|
187
|
+
let bestDenom = 1;
|
|
188
|
+
let bestError = Math.abs(fractional);
|
|
189
|
+
|
|
190
|
+
for (const denom of denominators) {
|
|
191
|
+
const num = Math.round(fractional * denom);
|
|
192
|
+
const error = Math.abs(fractional - num / denom);
|
|
193
|
+
if (error < bestError) {
|
|
194
|
+
bestError = error;
|
|
195
|
+
bestNum = num;
|
|
196
|
+
bestDenom = denom;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
if (bestNum === bestDenom) {
|
|
201
|
+
return { whole: whole + 1, numerator: 0, denominator: 1 };
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
return {
|
|
205
|
+
whole,
|
|
206
|
+
numerator: bestNum,
|
|
207
|
+
denominator: bestDenom,
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
export function formatFraction(input: FractionInput): string {
|
|
212
|
+
if (input.denominator === 0 || (input.numerator === 0 && input.denominator === 1)) {
|
|
213
|
+
return `${input.whole}"`;
|
|
214
|
+
}
|
|
215
|
+
if (input.whole === 0) {
|
|
216
|
+
return `${input.numerator}/${input.denominator}"`;
|
|
217
|
+
}
|
|
218
|
+
return `${input.whole} ${input.numerator}/${input.denominator}"`;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
export function formatMillimeters(mm: number, precision: number = 2): string {
|
|
222
|
+
return `${mm.toFixed(precision)} mm`;
|
|
223
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { DiyToolEntry } from '../../types';
|
|
2
|
+
import type { WorkshopFractionConverterUI } from './ui';
|
|
3
|
+
|
|
4
|
+
export const workshopFractionConverter: DiyToolEntry<WorkshopFractionConverterUI> = {
|
|
5
|
+
id: 'workshop-fraction-converter',
|
|
6
|
+
icons: { bg: 'mdi:tools', fg: 'mdi:ruler' },
|
|
7
|
+
i18n: {
|
|
8
|
+
de: () => import('./i18n/de').then((m) => m.content),
|
|
9
|
+
en: () => import('./i18n/en').then((m) => m.content),
|
|
10
|
+
es: () => import('./i18n/es').then((m) => m.content),
|
|
11
|
+
fr: () => import('./i18n/fr').then((m) => m.content),
|
|
12
|
+
id: () => import('./i18n/id').then((m) => m.content),
|
|
13
|
+
it: () => import('./i18n/it').then((m) => m.content),
|
|
14
|
+
ja: () => import('./i18n/ja').then((m) => m.content),
|
|
15
|
+
ko: () => import('./i18n/ko').then((m) => m.content),
|
|
16
|
+
nl: () => import('./i18n/nl').then((m) => m.content),
|
|
17
|
+
pl: () => import('./i18n/pl').then((m) => m.content),
|
|
18
|
+
pt: () => import('./i18n/pt').then((m) => m.content),
|
|
19
|
+
ru: () => import('./i18n/ru').then((m) => m.content),
|
|
20
|
+
sv: () => import('./i18n/sv').then((m) => m.content),
|
|
21
|
+
tr: () => import('./i18n/tr').then((m) => m.content),
|
|
22
|
+
zh: () => import('./i18n/zh').then((m) => m.content),
|
|
23
|
+
},
|
|
24
|
+
};
|
|
@@ -0,0 +1,147 @@
|
|
|
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 = 'werkstatt-bruch-metrisch-umrechner';
|
|
7
|
+
const title = 'Werkstatt Umrechner: Brüche in Millimeter';
|
|
8
|
+
const description = 'Rechnen Sie Zoll-Brüche sofort in Millimeter um. Finden Sie die passenden Standard-Schrauben, Bolzen und Steckschlüssel für Ihre Werkstatt. Optimiert für schmutzige Hände und Arbeitshandschuhe.';
|
|
9
|
+
|
|
10
|
+
const faqData = [
|
|
11
|
+
{
|
|
12
|
+
question: 'Warum muss ich Brüche in Millimeter umrechnen?',
|
|
13
|
+
answer: 'Die meisten modernen Werkzeuge und Befestigungselemente verwenden das metrische System, aber viele Oldtimer-Werkzeuge und Spezifikationen nutzen noch Zoll-Brüche. Dieser Umrechner schließt diese Lücke und hilft Ihnen, das metrische Äquivalent oder die nächste Standardgröße zu finden.',
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
question: 'Was ist der Unterschied zwischen 1/2 Zoll und 12,7 mm?',
|
|
17
|
+
answer: '1/2 Zoll entspricht exakt 12,7 Millimetern (0,5 × 25,4 = 12,7). Metrische und imperiale Werkzeuge sind bei Standardgrößen oft austauschbar, da die Hersteller gängige Größen in beiden Systemen angleichen.',
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
question: 'Warum zeigt das Tool die "nächste Standardgröße" an?',
|
|
21
|
+
answer: 'Weil exakte Umrechnungen oft zwischen den gängigen Standardgrößen liegen. Das Tool findet den im Handel erhältlichen Bolzen oder Steckschlüssel, der Ihrem Maß am nächsten kommt, damit Sie das verwenden können, was in Ihrer Werkstatt verfügbar ist.',
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
question: 'Was ist der Unterschied zwischen Holz- und Metallpräzision?',
|
|
25
|
+
answer: 'Bei Holzarbeiten sind Abweichungen von 0,5 mm oft vernachlässigbar. In der Metallbearbeitung und im Maschinenbau zählt jedes 0,1 mm. Der Präzisionsmodus gibt Hinweise auf akzeptable Toleranzbereiche für Ihr Material.',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
question: 'Kann ich dieses Tool offline verwenden?',
|
|
29
|
+
answer: 'Ja. Alle Berechnungen finden in Ihrem Browser statt. Nach dem ersten Laden funktioniert das Tool komplett offline – perfekt für den Einsatz in der Werkstatt ohne WLAN.',
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
question: 'Warum enthält das Tool einen Verlauf?',
|
|
33
|
+
answer: 'Bei der Demontage oder Projekten mit vielen Teilen ermöglicht der Verlauf das Nachschlagen von Maßen, ohne sie erneut eingeben zu müssen, und hilft beim Erstellen einer Teileliste während der Arbeit.',
|
|
34
|
+
},
|
|
35
|
+
];
|
|
36
|
+
|
|
37
|
+
const howToData = [
|
|
38
|
+
{
|
|
39
|
+
name: 'Messart wählen',
|
|
40
|
+
text: 'Wählen Sie "Vorwärts", um einen Bruch in Millimeter umzurechnen, oder "Rückwärts", um den passenden Bruch für ein mit dem Messschieber genommenes Maß zu finden.',
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: 'Maß eingeben',
|
|
44
|
+
text: 'Nutzen Sie die dreispaltige Eingabe (Ganzzahl, Zähler, Nenner) oder tippen Sie auf eine Schnellauswahl. Mit den Schritt-Tasten können Sie Werte ohne Tippen anpassen.',
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: 'Ergebnisse prüfen',
|
|
48
|
+
text: 'Das Ergebnis zeigt die exakte Umrechnung sowie die nächsten Standardgrößen für Bolzen und Steckschlüssel. Eine visuelle Skala hilft bei der Einschätzung der Proportionen.',
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
name: 'Im Verlauf speichern',
|
|
52
|
+
text: 'Klicken Sie auf "Im Verlauf speichern", um Maße für später zu merken. Der Verlauf bleibt in Ihrem Browser gespeichert, auch wenn Sie ihn schließen.',
|
|
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: 'de',
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
export const content: ToolLocaleContent<WorkshopFractionConverterUI> = {
|
|
91
|
+
slug,
|
|
92
|
+
title,
|
|
93
|
+
description,
|
|
94
|
+
faqTitle: 'Häufig gestellte Fragen',
|
|
95
|
+
faq: faqData,
|
|
96
|
+
bibliography,
|
|
97
|
+
howTo: howToData,
|
|
98
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
99
|
+
seo: [
|
|
100
|
+
{ type: 'title', text: 'Warum Präzision bei der Bruchumrechnung in der Werkstatt entscheidend ist', level: 2 },
|
|
101
|
+
{ type: 'paragraph', html: 'In einer professionellen Werkstatt oder beim anspruchsvollen Heimwerken führt ein "ungefähr" oft zu überdrehten Bolzen, wackeligen Verbindungen oder fehlerhaften Konstruktionen. Dieses Tool schließt die Lücke zwischen traditionellen Zoll-Maßen und der Präzision des metrischen Systems und stellt sicher, dass Ihre Projekte Profi-Standards entsprechen.' },
|
|
102
|
+
{ type: 'title', text: 'Die Standard-Umrechnung: 1/2" vs. 12,7 mm', level: 3 },
|
|
103
|
+
{ type: 'card', icon: 'mdi:ruler-square', title: 'Sind metrische und imperiale Maße austauschbar?', html: '<p>Viele nehmen das an. Obwohl 1/2" exakt 12,7 mm entspricht, ist der nächste metrische Steckschlüssel 13 mm groß. Die Verwendung des falschen Werkzeugs kann Schraubenköpfe runddrehen. Unser Umrechner findet die <strong>nächste Standard-Werkzeuggröße</strong>, damit Sie Ihre Hardware niemals beschädigen.</p>' },
|
|
104
|
+
{ type: 'title', text: 'Toleranzen im Holzbau vs. Metallbau', level: 3 },
|
|
105
|
+
{ type: 'paragraph', html: 'Die Anforderungen an die Toleranz variieren je nach Handwerk stark. Im <strong>Holzbau</strong> ist eine Toleranz von 1/64" (0,4 mm) meist akzeptabel. Im <strong>Metallbau und Maschinenbau</strong> zählt jedes 0,1 mm oder sogar 0,01 mm. Unser Tool bietet einen Präzisionsmodus, der Ihnen hilft, die sicherste Standardgröße für Ihr spezifisches Material zu wählen.' },
|
|
106
|
+
{ type: 'title', text: '3 Tipps für präzise Messungen', level: 3 },
|
|
107
|
+
{ type: 'paragraph', html: '<strong>1. Messschieber verwenden:</strong> Nutzen Sie für die Rückwärtssuche immer einen digitalen Messschieber für genaueste Millimeter-Werte. <strong>2. Verschleiß prüfen:</strong> Alte Steckschlüssel und Bolzen können abgenutzte Kanten haben, was die "nächste Übereinstimmung" noch wichtiger macht. <strong>3. Gewindesteigung beachten:</strong> Denken Sie daran: Auch wenn die Kopfgröße passt, ist die Gewindesteigung (metrisch vs. Zoll) immer unterschiedlich.' },
|
|
108
|
+
],
|
|
109
|
+
ui: {
|
|
110
|
+
labelFraction: 'Messart',
|
|
111
|
+
labelWhole: 'Ganze Zahl',
|
|
112
|
+
labelNumerator: 'Zähler',
|
|
113
|
+
labelDenominator: 'Nenner',
|
|
114
|
+
labelInches: 'Zoll',
|
|
115
|
+
labelMillimeters: 'Millimeter',
|
|
116
|
+
resultTitle: 'Umrechnungsergebnis',
|
|
117
|
+
resultFraction: 'Bruch',
|
|
118
|
+
resultInches: 'Zoll',
|
|
119
|
+
resultMillimeters: 'Millimeter',
|
|
120
|
+
matchTitle: 'Nächste Standardgröße',
|
|
121
|
+
matchClosestFastener: 'Standard-Bolzen oder Schraube',
|
|
122
|
+
matchClosestSocket: 'Standard-Steckschlüssel',
|
|
123
|
+
matchDifference: 'Abweichung zum Messwert',
|
|
124
|
+
matchRecommendation: 'Diese Größe verwenden, falls vorhanden',
|
|
125
|
+
reverseSearchTitle: 'Rückwärtssuche',
|
|
126
|
+
reverseSearchLabel: 'Gemessenes Maß (mm)',
|
|
127
|
+
reverseSearchButton: 'Bruch finden',
|
|
128
|
+
reverseSearchHint: 'Mit Messschieber messen, Wert eingeben',
|
|
129
|
+
unitMm: 'mm',
|
|
130
|
+
unitInch: 'Zoll',
|
|
131
|
+
modeForward: 'Bruch → Metrisch',
|
|
132
|
+
modeReverse: 'Metrisch → Bruch',
|
|
133
|
+
precisionLabel: 'Präzisionsmodus',
|
|
134
|
+
precisionCarpentry: 'Holzbau',
|
|
135
|
+
precisionMetal: 'Metallbau',
|
|
136
|
+
buttonConvert: 'Umrechnen',
|
|
137
|
+
buttonClear: 'Löschen',
|
|
138
|
+
buttonCopyResult: 'Ergebnis kopieren',
|
|
139
|
+
buttonSaveToHistory: 'Speichern',
|
|
140
|
+
historyTitle: 'Verlauf',
|
|
141
|
+
historyEmpty: 'Noch keine Messungen',
|
|
142
|
+
historyRemove: 'Entfernen',
|
|
143
|
+
helpText: 'Wählen Sie ein Maß oder geben Sie einen Bruch ein.',
|
|
144
|
+
toolOverline: 'Werkstatt-Tools',
|
|
145
|
+
labelVisualReference: 'Visuelle Referenz (1 Zoll = 96px)',
|
|
146
|
+
},
|
|
147
|
+
};
|
|
@@ -0,0 +1,147 @@
|
|
|
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 = 'Workshop Fraction to Metric Converter';
|
|
8
|
+
const description = 'Convert fractional inch measurements to millimeters instantly. Find the closest standard fasteners, bolts, and sockets for your workshop. Designed for dirty hands and gloved fingers.';
|
|
9
|
+
|
|
10
|
+
const faqData = [
|
|
11
|
+
{
|
|
12
|
+
question: 'Why do I need to convert fractions to millimeters?',
|
|
13
|
+
answer: 'Most modern tools and fasteners use metric measurements, but many vintage tools and specs use fractional inches. This converter bridges that gap, helping you find the right metric equivalent or the closest standard fastener size.',
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
question: 'What is the difference between 1/2 inch and 12.7 mm?',
|
|
17
|
+
answer: '1/2 inch equals exactly 12.7 millimeters (0.5 × 25.4 = 12.7). Metric tools and imperial tools are often interchangeable at standard sizes because manufacturers align common fastener sizes across both systems.',
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
question: 'Why does the tool show "closest fastener"?',
|
|
21
|
+
answer: 'Because exact conversions often land between standard fastener sizes. The tool finds the commercial bolt or socket closest to your measurement, so you can use what is available in your workshop.',
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
question: 'What is the difference between carpentry and metal precision?',
|
|
25
|
+
answer: 'In carpentry, 0.5 mm differences are negligible. In metalwork and machining, 0.1 mm matters. The precision mode hints at acceptable tolerance ranges for your material.',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
question: 'Can I measure with this tool offline?',
|
|
29
|
+
answer: 'Yes. All calculations happen in your browser. The tool works completely offline after the first load, perfect for use in the workshop without WiFi.',
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
question: 'Why does the tool include history?',
|
|
33
|
+
answer: 'When working on a disassembly or a project with multiple parts, history lets you reference measurements without re-entering them, and lets you build a parts list as you work.',
|
|
34
|
+
},
|
|
35
|
+
];
|
|
36
|
+
|
|
37
|
+
const howToData = [
|
|
38
|
+
{
|
|
39
|
+
name: 'Select your measurement type',
|
|
40
|
+
text: 'Choose "Forward" to convert a fraction to millimeters, or "Reverse" to find a fraction for a measurement you took with calipers.',
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: 'Enter the measurement',
|
|
44
|
+
text: 'Use the three-column input (whole, numerator, denominator) or tap a quick preset button. Stepper buttons let you adjust without typing.',
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: 'Review the results',
|
|
48
|
+
text: 'The result shows the exact conversion plus the closest standard fastener and socket sizes. Visual scale gives you a sense of proportion.',
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
name: 'Save to history',
|
|
52
|
+
text: 'Click "Save to History" to keep measurements for later reference. History persists in your browser, even after closing.',
|
|
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: 'en',
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
export const content: ToolLocaleContent<WorkshopFractionConverterUI> = {
|
|
91
|
+
slug,
|
|
92
|
+
title,
|
|
93
|
+
description,
|
|
94
|
+
faqTitle: 'Frequently Asked Questions',
|
|
95
|
+
faq: faqData,
|
|
96
|
+
bibliography,
|
|
97
|
+
howTo: howToData,
|
|
98
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
99
|
+
seo: [
|
|
100
|
+
{ type: 'title', text: 'Why Precision Fractional Conversion Matters in the Workshop', level: 2 },
|
|
101
|
+
{ type: 'paragraph', html: 'In a professional or high-stakes DIY workshop, being "close enough" often results in stripped bolts, wobbly joints, or failed assemblies. This tool is designed to bridge the gap between legacy imperial measurements and the precision of the metric system, ensuring your workshop projects maintain professional-grade standards.' },
|
|
102
|
+
{ type: 'title', text: 'The Standard Conversion: 1/2" vs. 12.7mm', level: 3 },
|
|
103
|
+
{ type: 'card', icon: 'mdi:ruler-square', title: 'Imperial vs. Metric Compatibility', html: '<p>Many DIYers assume imperial and metric fasteners are perfectly interchangeable. While 1/2" is exactly 12.7mm, the closest standard metric socket is 13mm. Using the wrong tool can round off bolt heads. Our converter identifies the <strong>closest standard tool match</strong> so you never damage your hardware.</p>' },
|
|
104
|
+
{ type: 'title', text: 'Woodworking vs. Metalworking Tolerance', level: 3 },
|
|
105
|
+
{ type: 'paragraph', html: 'Tolerance requirements vary wildly by trade. In <strong>woodworking</strong>, a tolerance of 1/64" (0.4mm) is usually acceptable. In <strong>metalworking and machining</strong>, 0.1mm or even 0.01mm matters. Our tool includes a precision mode to help you decide which standard fastener is the safest bet for your specific material.' },
|
|
106
|
+
{ type: 'title', text: '3 Essential Tips for Accurate Measurements', level: 3 },
|
|
107
|
+
{ type: 'paragraph', html: '<strong>1. Use Calipers:</strong> For reverse searching, always use digital calipers for the most accurate millimetre input. <strong>2. Check for Wear:</strong> Old sockets and bolts may have worn edges, making the "closest match" even more critical. <strong>3. Verify Pitch:</strong> Remember that even if the head size matches, the thread pitch (metric vs. imperial) will always be different.' },
|
|
108
|
+
],
|
|
109
|
+
ui: {
|
|
110
|
+
labelFraction: 'Measurement Type',
|
|
111
|
+
labelWhole: 'Whole',
|
|
112
|
+
labelNumerator: 'Numerator',
|
|
113
|
+
labelDenominator: 'Denominator',
|
|
114
|
+
labelInches: 'Inches',
|
|
115
|
+
labelMillimeters: 'Millimeters',
|
|
116
|
+
resultTitle: 'Conversion Result',
|
|
117
|
+
resultFraction: 'Fraction',
|
|
118
|
+
resultInches: 'Inches',
|
|
119
|
+
resultMillimeters: 'Millimeters',
|
|
120
|
+
matchTitle: 'Closest Fastener Match',
|
|
121
|
+
matchClosestFastener: 'Standard bolt or fastener size',
|
|
122
|
+
matchClosestSocket: 'Standard socket size',
|
|
123
|
+
matchDifference: 'Difference from your measurement',
|
|
124
|
+
matchRecommendation: 'Use this size if available',
|
|
125
|
+
reverseSearchTitle: 'Reverse Search',
|
|
126
|
+
reverseSearchLabel: 'Measured Size (mm)',
|
|
127
|
+
reverseSearchButton: 'Find Fraction',
|
|
128
|
+
reverseSearchHint: 'Measure with calipers, enter the value',
|
|
129
|
+
unitMm: 'mm',
|
|
130
|
+
unitInch: 'in',
|
|
131
|
+
modeForward: 'Fraction → Metric',
|
|
132
|
+
modeReverse: 'Metric → Fraction',
|
|
133
|
+
precisionLabel: 'Precision Mode',
|
|
134
|
+
precisionCarpentry: 'Carpentry',
|
|
135
|
+
precisionMetal: 'Metalworking',
|
|
136
|
+
buttonConvert: 'Convert',
|
|
137
|
+
buttonClear: 'Clear',
|
|
138
|
+
buttonCopyResult: 'Copy Result',
|
|
139
|
+
buttonSaveToHistory: 'Save to History',
|
|
140
|
+
historyTitle: 'History',
|
|
141
|
+
historyEmpty: 'No measurements yet',
|
|
142
|
+
historyRemove: 'Remove',
|
|
143
|
+
helpText: 'Select a measurement or enter a fraction to get started.',
|
|
144
|
+
toolOverline: 'Workshop Converter',
|
|
145
|
+
labelVisualReference: 'Visual Reference (1 inch = 96px)',
|
|
146
|
+
},
|
|
147
|
+
};
|