@jjlmoya/utils-diy 1.12.0 → 1.14.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 (45) hide show
  1. package/package.json +1 -1
  2. package/src/entries.ts +3 -1
  3. package/src/index.ts +2 -0
  4. package/src/tests/locale_completeness.test.ts +2 -2
  5. package/src/tests/tool_validation.test.ts +2 -2
  6. package/src/tool/pythagoreanRightAngleCalculator/bibliography.astro +6 -0
  7. package/src/tool/pythagoreanRightAngleCalculator/bibliography.ts +12 -0
  8. package/src/tool/pythagoreanRightAngleCalculator/component.astro +238 -0
  9. package/src/tool/pythagoreanRightAngleCalculator/entry.ts +24 -0
  10. package/src/tool/pythagoreanRightAngleCalculator/i18n/de.ts +127 -0
  11. package/src/tool/pythagoreanRightAngleCalculator/i18n/en.ts +129 -0
  12. package/src/tool/pythagoreanRightAngleCalculator/i18n/es.ts +127 -0
  13. package/src/tool/pythagoreanRightAngleCalculator/i18n/fr.ts +127 -0
  14. package/src/tool/pythagoreanRightAngleCalculator/i18n/id.ts +127 -0
  15. package/src/tool/pythagoreanRightAngleCalculator/i18n/it.ts +127 -0
  16. package/src/tool/pythagoreanRightAngleCalculator/i18n/ja.ts +127 -0
  17. package/src/tool/pythagoreanRightAngleCalculator/i18n/ko.ts +129 -0
  18. package/src/tool/pythagoreanRightAngleCalculator/i18n/nl.ts +127 -0
  19. package/src/tool/pythagoreanRightAngleCalculator/i18n/pl.ts +127 -0
  20. package/src/tool/pythagoreanRightAngleCalculator/i18n/pt.ts +127 -0
  21. package/src/tool/pythagoreanRightAngleCalculator/i18n/ru.ts +127 -0
  22. package/src/tool/pythagoreanRightAngleCalculator/i18n/sv.ts +127 -0
  23. package/src/tool/pythagoreanRightAngleCalculator/i18n/tr.ts +127 -0
  24. package/src/tool/pythagoreanRightAngleCalculator/i18n/zh.ts +127 -0
  25. package/src/tool/pythagoreanRightAngleCalculator/index.ts +11 -0
  26. package/src/tool/pythagoreanRightAngleCalculator/logic.ts +96 -0
  27. package/src/tool/pythagoreanRightAngleCalculator/pythagorean-right-angle-calculator.css +378 -0
  28. package/src/tool/pythagoreanRightAngleCalculator/seo.astro +15 -0
  29. package/src/tool/pythagoreanRightAngleCalculator/ui.ts +71 -0
  30. package/src/tool/workshopFractionConverter/i18n/de.ts +9 -3
  31. package/src/tool/workshopFractionConverter/i18n/en.ts +9 -3
  32. package/src/tool/workshopFractionConverter/i18n/es.ts +9 -3
  33. package/src/tool/workshopFractionConverter/i18n/fr.ts +9 -3
  34. package/src/tool/workshopFractionConverter/i18n/id.ts +10 -4
  35. package/src/tool/workshopFractionConverter/i18n/it.ts +9 -3
  36. package/src/tool/workshopFractionConverter/i18n/ja.ts +9 -3
  37. package/src/tool/workshopFractionConverter/i18n/ko.ts +9 -3
  38. package/src/tool/workshopFractionConverter/i18n/nl.ts +9 -3
  39. package/src/tool/workshopFractionConverter/i18n/pl.ts +9 -3
  40. package/src/tool/workshopFractionConverter/i18n/pt.ts +9 -3
  41. package/src/tool/workshopFractionConverter/i18n/ru.ts +9 -3
  42. package/src/tool/workshopFractionConverter/i18n/sv.ts +9 -3
  43. package/src/tool/workshopFractionConverter/i18n/tr.ts +9 -3
  44. package/src/tool/workshopFractionConverter/i18n/zh.ts +9 -3
  45. package/src/tools.ts +2 -1
@@ -0,0 +1,378 @@
1
+ :root {
2
+ --prac-primary: #6366f1;
3
+ --prac-primary-dark: #4f46e5;
4
+ --prac-primary-light: #818cf8;
5
+ --prac-neutral: #1e293b;
6
+ --prac-neutral-light: #64748b;
7
+ --prac-success: #10b981;
8
+ --prac-warning: #f59e0b;
9
+ --prac-error: #ef4444;
10
+ --prac-border: #e2e8f0;
11
+ --prac-bg-light: #f8fafc;
12
+ --prac-bg-lighter: #f1f5f9;
13
+ --prac-bg: #fff;
14
+ }
15
+
16
+ :root.theme-dark {
17
+ --prac-primary: #818cf8;
18
+ --prac-primary-dark: #6366f1;
19
+ --prac-primary-light: #a5b4fc;
20
+ --prac-neutral: #f1f5f9;
21
+ --prac-neutral-light: #9ca3af;
22
+ --prac-success: #34d399;
23
+ --prac-warning: #fbbf24;
24
+ --prac-error: #f87171;
25
+ --prac-border: rgba(255, 255, 255, 0.1);
26
+ --prac-bg-light: rgba(255, 255, 255, 0.04);
27
+ --prac-bg-lighter: rgba(255, 255, 255, 0.02);
28
+ --prac-bg: rgba(255, 255, 255, 0.01);
29
+ }
30
+
31
+ .prac-root {
32
+ width: 100%;
33
+ color: var(--prac-neutral);
34
+ -webkit-font-smoothing: antialiased;
35
+ -moz-osx-font-smoothing: grayscale;
36
+ }
37
+
38
+ .prac-container {
39
+ display: grid;
40
+ grid-template-columns: 1fr;
41
+ gap: 0;
42
+ background: var(--prac-bg);
43
+ }
44
+
45
+ @media (min-width: 768px) {
46
+ .prac-container {
47
+ grid-template-columns: 280px 1fr;
48
+ gap: 2rem;
49
+ padding: 2rem;
50
+ }
51
+ }
52
+
53
+ .prac-inputs {
54
+ padding: 1.5rem;
55
+ border-bottom: 4px solid var(--prac-primary);
56
+ display: flex;
57
+ flex-direction: column;
58
+ gap: 1.25rem;
59
+ background: var(--prac-bg-light);
60
+ }
61
+
62
+ @media (min-width: 768px) {
63
+ .prac-inputs {
64
+ border-bottom: none;
65
+ border-right: 4px solid var(--prac-primary);
66
+ padding: 1.5rem;
67
+ background: var(--prac-bg);
68
+ }
69
+ }
70
+
71
+ .prac-unit-selector {
72
+ display: grid;
73
+ grid-template-columns: 1fr 1fr;
74
+ gap: 0.75rem;
75
+ }
76
+
77
+ .prac-unit-btn {
78
+ padding: 0.875rem 1rem;
79
+ border: 2.5px solid var(--prac-border);
80
+ border-radius: 0.5rem;
81
+ background: var(--prac-bg);
82
+ color: var(--prac-neutral);
83
+ font-weight: 700;
84
+ cursor: pointer;
85
+ transition: all 200ms ease;
86
+ font-size: 0.95rem;
87
+ letter-spacing: 0.5px;
88
+ }
89
+
90
+ .prac-unit-btn:hover {
91
+ border-color: var(--prac-primary);
92
+ background: var(--prac-bg-lighter);
93
+ transform: translateY(-2px);
94
+ box-shadow: 0 4px 12px rgba(99, 102, 241, 0.15);
95
+ }
96
+
97
+ .prac-unit-btn.active {
98
+ background: var(--prac-primary);
99
+ color: #fff;
100
+ border-color: var(--prac-primary);
101
+ box-shadow: 0 6px 20px rgba(99, 102, 241, 0.3);
102
+ }
103
+
104
+ .prac-input-group {
105
+ display: flex;
106
+ flex-direction: column;
107
+ gap: 0.5rem;
108
+ }
109
+
110
+ .prac-input-group label {
111
+ font-size: 0.8rem;
112
+ font-weight: 800;
113
+ color: var(--prac-neutral);
114
+ text-transform: uppercase;
115
+ letter-spacing: 0.8px;
116
+ }
117
+
118
+ .prac-input-group input {
119
+ padding: 0.875rem 1rem;
120
+ border: 2.5px solid var(--prac-border);
121
+ border-radius: 0.5rem;
122
+ font-size: 1.1rem;
123
+ font-weight: 700;
124
+ background: var(--prac-bg);
125
+ color: var(--prac-neutral);
126
+ transition: all 200ms ease;
127
+ }
128
+
129
+ .prac-input-group input:focus {
130
+ outline: none;
131
+ border-color: var(--prac-primary);
132
+ box-shadow: 0 0 0 4px rgba(99, 102, 241, 0.1);
133
+ background: var(--prac-bg-lighter);
134
+ }
135
+
136
+ .prac-button-group {
137
+ display: grid;
138
+ grid-template-columns: 1fr 1fr;
139
+ gap: 0.75rem;
140
+ margin-top: 0.5rem;
141
+ }
142
+
143
+ .prac-btn {
144
+ padding: 0.875rem 1rem;
145
+ border: 2.5px solid var(--prac-border);
146
+ border-radius: 0.5rem;
147
+ background: var(--prac-bg);
148
+ color: var(--prac-neutral);
149
+ font-weight: 700;
150
+ cursor: pointer;
151
+ font-size: 0.9rem;
152
+ transition: all 200ms ease;
153
+ text-transform: uppercase;
154
+ letter-spacing: 0.5px;
155
+ }
156
+
157
+ .prac-btn:hover {
158
+ border-color: var(--prac-primary);
159
+ background: var(--prac-bg-lighter);
160
+ transform: translateY(-2px);
161
+ }
162
+
163
+ .prac-btn:active {
164
+ transform: translateY(0);
165
+ }
166
+
167
+ .prac-presets {
168
+ display: grid;
169
+ grid-template-columns: 1fr 1fr;
170
+ gap: 0.75rem;
171
+ margin-top: 1.5rem;
172
+ padding-top: 1.5rem;
173
+ border-top: 2.5px solid var(--prac-border);
174
+ }
175
+
176
+ .prac-preset {
177
+ padding: 0.875rem 1rem;
178
+ border: 2.5px solid var(--prac-primary);
179
+ border-radius: 0.5rem;
180
+ background: var(--prac-bg-lighter);
181
+ color: var(--prac-neutral);
182
+ font-weight: 800;
183
+ cursor: pointer;
184
+ font-size: 0.9rem;
185
+ transition: all 200ms ease;
186
+ }
187
+
188
+ .prac-preset:hover {
189
+ background: var(--prac-primary);
190
+ color: #fff;
191
+ transform: translateY(-2px);
192
+ box-shadow: 0 6px 20px rgba(99, 102, 241, 0.3);
193
+ }
194
+
195
+ .prac-display {
196
+ padding: 1.5rem;
197
+ display: flex;
198
+ flex-direction: column;
199
+ gap: 1.25rem;
200
+ }
201
+
202
+ .prac-status {
203
+ padding: 1.25rem;
204
+ border-radius: 0.75rem;
205
+ border: 2.5px solid var(--prac-border);
206
+ background: var(--prac-bg-light);
207
+ display: grid;
208
+ grid-template-columns: 50px 1fr;
209
+ gap: 1rem;
210
+ align-items: center;
211
+ transition: all 200ms ease;
212
+ }
213
+
214
+ .prac-status-indicator {
215
+ width: 50px;
216
+ height: 50px;
217
+ border-radius: 50%;
218
+ background: #e5e7eb;
219
+ box-shadow: inset 0 0 0 2px #9ca3af;
220
+ }
221
+
222
+ .prac-status.perfect .prac-status-indicator {
223
+ background: var(--prac-success);
224
+ box-shadow: 0 0 16px rgba(16, 185, 129, 0.5);
225
+ }
226
+
227
+ .prac-status.acceptable .prac-status-indicator {
228
+ background: var(--prac-success);
229
+ box-shadow: 0 0 16px rgba(16, 185, 129, 0.5);
230
+ }
231
+
232
+ .prac-status.warning .prac-status-indicator {
233
+ background: var(--prac-warning);
234
+ box-shadow: 0 0 16px rgba(245, 158, 11, 0.5);
235
+ }
236
+
237
+ .prac-status.error .prac-status-indicator {
238
+ background: var(--prac-error);
239
+ box-shadow: 0 0 16px rgba(239, 68, 68, 0.5);
240
+ }
241
+
242
+ .prac-status-content {
243
+ display: flex;
244
+ flex-direction: column;
245
+ gap: 0.35rem;
246
+ }
247
+
248
+ .prac-status-title {
249
+ font-weight: 800;
250
+ font-size: 1.05rem;
251
+ color: var(--prac-neutral);
252
+ }
253
+
254
+ .prac-status-value {
255
+ font-size: 0.9rem;
256
+ color: var(--prac-neutral-light);
257
+ font-weight: 700;
258
+ }
259
+
260
+ .prac-results-grid {
261
+ display: grid;
262
+ grid-template-columns: 1fr 1fr;
263
+ gap: 1rem;
264
+ }
265
+
266
+ .prac-result-box {
267
+ padding: 1.25rem;
268
+ background: rgba(255, 255, 255, 0.5);
269
+ border-radius: 0.75rem;
270
+ border: 2.5px solid var(--prac-primary);
271
+ text-align: center;
272
+ transition: all 200ms ease;
273
+ }
274
+
275
+ :root.theme-dark .prac-result-box {
276
+ background: rgba(129, 140, 248, 0.1);
277
+ border-color: rgba(129, 140, 248, 0.6);
278
+ }
279
+
280
+ .prac-result-box:hover {
281
+ transform: translateY(-2px);
282
+ box-shadow: 0 8px 24px rgba(99, 102, 241, 0.15);
283
+ }
284
+
285
+ .prac-result-label {
286
+ display: block;
287
+ font-size: 0.75rem;
288
+ font-weight: 800;
289
+ color: var(--prac-neutral-light);
290
+ text-transform: uppercase;
291
+ letter-spacing: 0.8px;
292
+ margin-bottom: 0.5rem;
293
+ }
294
+
295
+ .prac-result-value {
296
+ display: block;
297
+ font-size: 2rem;
298
+ font-weight: 900;
299
+ color: var(--prac-primary);
300
+ margin-bottom: 0.35rem;
301
+ }
302
+
303
+ .prac-result-unit {
304
+ display: block;
305
+ font-size: 0.85rem;
306
+ color: var(--prac-neutral-light);
307
+ font-weight: 700;
308
+ }
309
+
310
+ .prac-svg {
311
+ width: 100%;
312
+ height: auto;
313
+ min-height: 180px;
314
+ max-height: 200px;
315
+ margin: 0.5rem 0;
316
+ }
317
+
318
+ .prac-label {
319
+ font-size: 12px;
320
+ font-weight: 800;
321
+ fill: var(--prac-primary);
322
+ text-anchor: middle;
323
+ }
324
+
325
+ .prac-label-hyp {
326
+ fill: var(--prac-primary);
327
+ font-weight: 900;
328
+ font-size: 13px;
329
+ }
330
+
331
+ .prac-message {
332
+ font-size: 0.95rem;
333
+ line-height: 1.5;
334
+ color: var(--prac-neutral);
335
+ font-weight: 700;
336
+ min-height: 1.5rem;
337
+ padding: 1rem;
338
+ background: rgba(245, 158, 11, 0.2);
339
+ border-left: 5px solid var(--prac-warning);
340
+ border-radius: 0.375rem;
341
+ }
342
+
343
+ .prac-status.error ~ .prac-message {
344
+ background: rgba(239, 68, 68, 0.2);
345
+ border-left-color: var(--prac-error);
346
+ }
347
+
348
+ .prac-status.perfect ~ .prac-message,
349
+ .prac-status.acceptable ~ .prac-message {
350
+ background: rgba(16, 185, 129, 0.2);
351
+ border-left-color: var(--prac-success);
352
+ }
353
+
354
+ .prac-status.idle ~ .prac-message {
355
+ background: transparent;
356
+ border: none;
357
+ min-height: auto;
358
+ padding: 0;
359
+ }
360
+
361
+ @media (max-width: 640px) {
362
+ .prac-inputs {
363
+ padding: 1.25rem;
364
+ }
365
+
366
+ .prac-display {
367
+ padding: 1.25rem;
368
+ }
369
+
370
+ .prac-result-value {
371
+ font-size: 1.75rem;
372
+ }
373
+
374
+ .prac-svg {
375
+ min-height: 160px;
376
+ max-height: 180px;
377
+ }
378
+ }
@@ -0,0 +1,15 @@
1
+ ---
2
+ import { SEORenderer } from '@jjlmoya/utils-shared';
3
+ import { pythagoreanRightAngleCalculator } from './index';
4
+ import type { KnownLocale } from '../../types';
5
+
6
+ interface Props {
7
+ locale?: KnownLocale;
8
+ }
9
+
10
+ const { locale = 'en' } = Astro.props;
11
+ const content = await pythagoreanRightAngleCalculator.i18n[locale]?.();
12
+ if (!content) return null;
13
+ ---
14
+
15
+ {content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
@@ -0,0 +1,71 @@
1
+ export interface PythagoreanRightAngleCalculatorUI extends Record<string, string> {
2
+ titleMain: string;
3
+ labelInputData: string;
4
+ labelUnitSelection: string;
5
+ btnUnitInches: string;
6
+ btnUnitFeet: string;
7
+ btnUnitCentimeters: string;
8
+ labelSideA: string;
9
+ labelSideB: string;
10
+ labelMeasuredDiagonal: string;
11
+ labelResults: string;
12
+ labelIdealDiagonal: string;
13
+ labelDeviation: string;
14
+ labelStatus: string;
15
+ labelVerification: string;
16
+ btnClear: string;
17
+ btnCopyResults: string;
18
+ labelPresets: string;
19
+ unitInches: string;
20
+ unitFeet: string;
21
+ unitCentimeters: string;
22
+ tooltipOptional: string;
23
+ tooltipPresets: string;
24
+ statusPerfect: string;
25
+ statusAcceptable: string;
26
+ statusWarning: string;
27
+ statusError: string;
28
+ statusReady: string;
29
+ msgIdealCalculated: string;
30
+ actionOpen: string;
31
+ actionClose: string;
32
+ descLarger: string;
33
+ descSmaller: string;
34
+ descCorrection: string;
35
+ }
36
+
37
+ export const pythagoreanRightAngleCalculatorUI: PythagoreanRightAngleCalculatorUI = {
38
+ titleMain: 'Pythagorean Right Angle Calculator',
39
+ labelInputData: 'Measurements',
40
+ labelUnitSelection: 'Unit',
41
+ btnUnitInches: 'inches',
42
+ btnUnitFeet: 'feet',
43
+ btnUnitCentimeters: 'centimeters',
44
+ labelSideA: 'Side A',
45
+ labelSideB: 'Side B',
46
+ labelMeasuredDiagonal: 'Measured diagonal (optional)',
47
+ labelResults: 'Results',
48
+ labelIdealDiagonal: 'Ideal diagonal',
49
+ labelDeviation: 'Deviation',
50
+ labelStatus: 'Status',
51
+ labelVerification: 'Square verification',
52
+ btnClear: 'Clear',
53
+ btnCopyResults: 'Copy results',
54
+ labelPresets: 'Quick presets',
55
+ unitInches: 'in',
56
+ unitFeet: 'ft',
57
+ unitCentimeters: 'cm',
58
+ tooltipOptional: 'Enter your measured diagonal to verify perfect 90 degrees',
59
+ tooltipPresets: '3-4-5 rule in different scales',
60
+ statusPerfect: 'Perfect 90 degree angle',
61
+ statusAcceptable: 'Acceptable deviation',
62
+ statusWarning: 'Minor deviation',
63
+ statusError: 'Out of square',
64
+ statusReady: 'Ready',
65
+ msgIdealCalculated: 'Diagonal ideal calculated',
66
+ actionOpen: 'Open',
67
+ actionClose: 'Close',
68
+ descLarger: 'larger',
69
+ descSmaller: 'smaller',
70
+ descCorrection: 'Correction needed'
71
+ };
@@ -94,11 +94,17 @@ export const content: ToolLocaleContent<WorkshopFractionConverterUI> = {
94
94
  faqTitle: 'Häufig gestellte Fragen',
95
95
  faq: faqData,
96
96
  bibliography,
97
+ howTo: howToData,
97
98
  schemas: [faqSchema, howToSchema, appSchema],
98
99
  seo: [
99
- { title: 'FAQ', type: 'faq', schema: faqSchema },
100
- { title: 'Bedienungsanleitung', type: 'howto', schema: howToSchema },
101
- { title: 'Anwendung', type: 'app', schema: appSchema },
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.' },
102
108
  ],
103
109
  ui: {
104
110
  labelFraction: 'Messart',
@@ -94,11 +94,17 @@ export const content: ToolLocaleContent<WorkshopFractionConverterUI> = {
94
94
  faqTitle: 'Frequently Asked Questions',
95
95
  faq: faqData,
96
96
  bibliography,
97
+ howTo: howToData,
97
98
  schemas: [faqSchema, howToSchema, appSchema],
98
99
  seo: [
99
- { title: 'FAQ', type: 'faq', schema: faqSchema },
100
- { title: 'How to use', type: 'howto', schema: howToSchema },
101
- { title: 'Application', type: 'app', schema: appSchema },
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.' },
102
108
  ],
103
109
  ui: {
104
110
  labelFraction: 'Measurement Type',
@@ -94,11 +94,17 @@ export const content: ToolLocaleContent<WorkshopFractionConverterUI> = {
94
94
  faqTitle: 'Preguntas Frecuentes',
95
95
  faq: faqData,
96
96
  bibliography,
97
+ howTo: howToData,
97
98
  schemas: [faqSchema, howToSchema, appSchema],
98
99
  seo: [
99
- { title: 'Preguntas Frecuentes', type: 'faq', schema: faqSchema },
100
- { title: 'Cómo se usa', type: 'howto', schema: howToSchema },
101
- { title: 'Aplicación', type: 'app', schema: appSchema },
100
+ { type: 'title', text: 'Por qué es Vital la Precisión en la Conversión de Fracciones en el Taller', level: 2 },
101
+ { type: 'paragraph', html: 'En un taller profesional o de bricolaje avanzado, un "más o menos" suele acabar en tornillos pasados, juntas inestables o montajes fallidos. Esta herramienta cierra la brecha entre las medidas imperiales tradicionales y la precisión del sistema métrico, asegurando que tus proyectos mantengan un estándar profesional.' },
102
+ { type: 'title', text: 'La Conversión Estándar: 1/2" frente a 12,7 mm', level: 3 },
103
+ { type: 'card', icon: 'mdi:ruler-square', title: '¿Son intercambiables el sistema métrico e imperial?', html: '<p>Muchos dan por hecho que sí. Aunque 1/2" son exactamente 12,7 mm, la llave métrica más cercana es de 13 mm. Usar la herramienta incorrecta puede redondear las cabezas de los tornillos. Nuestro conversor identifica el <strong>ajuste de herramienta estándar más cercano</strong> para que nunca dañes tus piezas.</p>' },
104
+ { type: 'title', text: 'Tolerancia en Carpintería vs. Metalmecánica', level: 3 },
105
+ { type: 'paragraph', html: 'Los requisitos de tolerancia varían enormemente según el oficio. En <strong>carpintería</strong>, una tolerancia de 1/64" (0,4 mm) suele ser aceptable. En <strong>mecanizado y metalistería</strong>, importa cada 0,1 mm o incluso 0,01 mm. Nuestra herramienta incluye un modo de precisión para ayudarte a decidir qué medida estándar es la más segura para tu material.' },
106
+ { type: 'title', text: '3 Consejos Esenciales para Mediciones Precisas', level: 3 },
107
+ { type: 'paragraph', html: '<strong>1. Usa Calibres:</strong> Para búsquedas inversas, utiliza siempre un calibre digital para obtener la entrada de milímetros más precisa. <strong>2. Revisa el Desgaste:</strong> Los vasos y tornillos viejos pueden tener bordes desgastados, lo que hace que el "ajuste más cercano" sea aún más crítico. <strong>3. Verifica el Paso de Rosca:</strong> Recuerda que aunque el tamaño de la cabeza coincida, el paso de rosca (métrico vs. imperial) siempre será diferente.' },
102
108
  ],
103
109
  ui: {
104
110
  labelFraction: 'Tipo de Medida',
@@ -94,11 +94,17 @@ export const content: ToolLocaleContent<WorkshopFractionConverterUI> = {
94
94
  faqTitle: 'Questions Fréquemment Posées',
95
95
  faq: faqData,
96
96
  bibliography,
97
+ howTo: howToData,
97
98
  schemas: [faqSchema, howToSchema, appSchema],
98
99
  seo: [
99
- { title: 'FAQ', type: 'faq', schema: faqSchema },
100
- { title: 'Utilisation', type: 'howto', schema: howToSchema },
101
- { title: 'Application', type: 'app', schema: appSchema },
100
+ { type: 'title', text: 'Pourquoi la Précision de Conversion des Fractions est Vitale en Atelier', level: 2 },
101
+ { type: 'paragraph', html: 'Dans un atelier professionnel ou de bricolage avancé, un "à peu près" finit souvent par des boulons foirés, des joints instables ou des assemblages défaillants. Cet outil comble le fossé entre les mesures impériales traditionnelles et la précision du système métrique, garantissant que vos projets conservent un standard professionnel.' },
102
+ { type: 'title', text: 'La Conversion Standard : 1/2" contre 12,7 mm', level: 3 },
103
+ { type: 'card', icon: 'mdi:ruler-square', title: 'Les systèmes métrique et impérial son tils interchangeables ?', html: '<p>Beaucoup le pensent. Bien que 1/2" fasse exactement 12,7 mm, la clé métrique la plus proche est de 13 mm. L\'utilisation d\'un outil inadapté peut arrondir les têtes de boulons. Notre convertisseur identifie la <strong>correspondance d\'outil standard la plus proche</strong> pour ne jamais endommager votre matériel.</p>' },
104
+ { type: 'title', text: 'Tolérance en Menuiserie vs. Mécanique', level: 3 },
105
+ { type: 'paragraph', html: 'Les exigences de tolérance varient énormément selon le métier. En <strong>menuiserie</strong>, une tolérance de 1/64" (0,4 mm) est généralement acceptable. En <strong>mécanique et usinage</strong>, chaque 0,1 mm voire 0,01 mm compte. Notre outil inclut un mode précision pour vous aider à décider quelle mesure standard est la plus sûre pour votre matériau.' },
106
+ { type: 'title', text: '3 Conseils Essentiels pour des Mesures Précises', level: 3 },
107
+ { type: 'paragraph', html: '<strong>1. Utilisez un Pied à Coulisse :</strong> Pour les recherches inverses, utilisez toujours un pied à coulisse numérique pour obtenir la mesure en millimètres la plus précise. <strong>2. Vérifiez l\'Usure :</strong> Les douilles et boulons anciens peuvent avoir des bords usés, rendant la "correspondance la plus proche" encore plus critique. <strong>3. Vérifiez le Pas de Vis :</strong> N\'oubliez pas que même si la taille de la tête correspond, le pas de vis (métrique vs impérial) sera toujours différent.' },
102
108
  ],
103
109
  ui: {
104
110
  labelFraction: 'Type de mesure',
@@ -91,14 +91,20 @@ export const content: ToolLocaleContent<WorkshopFractionConverterUI> = {
91
91
  slug,
92
92
  title,
93
93
  description,
94
- faqTitle: 'Pertanyaan Umum',
94
+ faqTitle: 'Pertanyaan yang Sering Diajukan',
95
95
  faq: faqData,
96
96
  bibliography,
97
+ howTo: howToData,
97
98
  schemas: [faqSchema, howToSchema, appSchema],
98
99
  seo: [
99
- { title: 'FAQ', type: 'faq', schema: faqSchema },
100
- { title: 'Cara Penggunaan', type: 'howto', schema: howToSchema },
101
- { title: 'Aplikasi', type: 'app', schema: appSchema },
100
+ { type: 'title', text: 'Mengapa Presisi Konversi Pecahan Sangat Penting di Bengkel', level: 2 },
101
+ { type: 'paragraph', html: 'Di bengkel profesional atau DIY tingkat lanjut, pengukuran yang "kira-kira" sering kali mengakibatkan baut slek, sambungan goyah, atau perakitan yang gagal. Alat ini dirancang untuk menjembatani celah antara pengukuran imperial tradisional dan presisi sistem metrik, memastikan proyek bengkel Anda mempertahankan standar kelas profesional.' },
102
+ { type: 'title', text: 'Konversi Standar: 1/2" vs. 12,7mm', level: 3 },
103
+ { type: 'card', icon: 'mdi:ruler-square', title: 'Apakah sistem metrik dan imperial dapat dipertukarkan?', html: '<p>Banyak orang menganggap demikian. Meskipun 1/2" tepatnya adalah 12,7mm, kunci sok metrik standar terdekat adalah 13mm. Menggunakan alat yang salah dapat merusak kepala baut. Konverter kami mengidentifikasi <strong>kecocokan alat standar terdekat</strong> sehingga Anda tidak akan pernah merusak perangkat keras Anda.</p>' },
104
+ { type: 'title', text: 'Toleransi Pertukangan Kayu vs. Pengerjaan Logam', level: 3 },
105
+ { type: 'paragraph', html: 'Persyaratan toleransi sangat bervariasi tergantung bidangnya. Dalam <strong>pertukangan kayu</strong>, toleransi 1/64" (0,4mm) biasanya dapat diterima. Dalam <strong>pengerjaan logam dan pemesinan</strong>, 0,1mm atau bahkan 0,01mm sangat berarti. Alat kami menyertakan mode presisi untuk membantu Anda memutuskan ukuran pengencang standar mana yang paling aman untuk material spesifik Anda.' },
106
+ { type: 'title', text: '3 Tip Penting untuk Pengukuran yang Akurat', level: 3 },
107
+ { type: 'paragraph', html: '<strong>1. Gunakan Jangka Sorong:</strong> Untuk pencarian terbalik, selalu gunakan jangka sorong (caliper) digital untuk input milimeter yang paling akurat. <strong>2. Periksa Keausan:</strong> Kunci sok dan baut lama mungkin memiliki tepi yang aus, membuat "kecocokan terdekat" menjadi lebih penting. <strong>3. Verifikasi Ulir:</strong> Ingatlah bahwa meskipun ukuran kepala cocok, jarak ulir (metrik vs. imperial) akan selalu berbeda.' },
102
108
  ],
103
109
  ui: {
104
110
  labelFraction: 'Jenis Pengukuran',
@@ -94,11 +94,17 @@ export const content: ToolLocaleContent<WorkshopFractionConverterUI> = {
94
94
  faqTitle: 'Domande Frequenti',
95
95
  faq: faqData,
96
96
  bibliography,
97
+ howTo: howToData,
97
98
  schemas: [faqSchema, howToSchema, appSchema],
98
99
  seo: [
99
- { title: 'FAQ', type: 'faq', schema: faqSchema },
100
- { title: 'Istruzioni d\'uso', type: 'howto', schema: howToSchema },
101
- { title: 'Applicazione', type: 'app', schema: appSchema },
100
+ { type: 'title', text: 'Perché la Precisione nella Conversione delle Frazioni è Vitale in Officina', level: 2 },
101
+ { type: 'paragraph', html: 'In un\'officina professionale o nel fai-da-te avanzato, un "circa" finisce spesso per sgranare bulloni, creare giunzioni instabili o assemblaggi difettosi. Questo strumento colma il divario tra le misure imperiali tradizionali e la precisione del sistema metrico, garantendo che i tuoi progetti mantengano uno standard professionale.' },
102
+ { type: 'title', text: 'La Conversione Standard: 1/2" contro 12,7 mm', level: 3 },
103
+ { type: 'card', icon: 'mdi:ruler-square', title: 'I sistemi metrico e imperiale sono intercambiabili?', html: '<p>Molti lo danno per scontato. Sebbene 1/2" sia esattamente 12,7 mm, la chiave metrica più vicina è da 13 mm. L\'uso di uno strumento errato può arrotondare le teste dei bulloni. Il nostro convertitore identifica l\'<strong>abbinamento dello strumento standard più vicino</strong> per non danneggiare mai la tua ferramenta.</p>' },
104
+ { type: 'title', text: 'Tolleranza in Falegnameria vs. Meccanica', level: 3 },
105
+ { type: 'paragraph', html: 'I requisiti di tolleranza variano enormemente a seconda del mestiere. In <strong>falegnameria</strong>, una tolleranza di 1/64" (0,4 mm) è solitamente accettabile. In <strong>meccanica e lavorazioni al tornio</strong>, conta ogni 0,1 mm o addirittura 0,01 mm. Il nostro strumento include una modalità precisione per aiutarti a decidere quale misura standard è la più sicura per il tuo materiale.' },
106
+ { type: 'title', text: '3 Consigli Essenziali per Misurazioni Precise', level: 3 },
107
+ { type: 'paragraph', html: '<strong>1. Usa il Calibro:</strong> Per le ricerche inverse, usa sempre un calibro digitale per ottenere l\'input in millimetri più accurato. <strong>2. Controlla l\'Usura:</strong> Bussole e bulloni vecchi possono avere bordi usurati, rendendo l\' "abbinamento più vicino" ancora più critico. <strong>3. Verifica il Passo:</strong> Ricorda che anche se la dimensione della testa coincide, il passo della filettatura (metrico vs imperiale) sarà sempre diverso.' },
102
108
  ],
103
109
  ui: {
104
110
  labelFraction: 'Tipo di Misura',
@@ -94,11 +94,17 @@ export const content: ToolLocaleContent<WorkshopFractionConverterUI> = {
94
94
  faqTitle: 'よくある質問',
95
95
  faq: faqData,
96
96
  bibliography,
97
+ howTo: howToData,
97
98
  schemas: [faqSchema, howToSchema, appSchema],
98
99
  seo: [
99
- { title: 'FAQ', type: 'faq', schema: faqSchema },
100
- { title: '使い方', type: 'howto', schema: howToSchema },
101
- { title: 'アプリケーション', type: 'app', schema: appSchema },
100
+ { type: 'title', text: 'ワークショップにおける分数の高精度変換が重要な理由', level: 2 },
101
+ { type: 'paragraph', html: 'プロフェッショナルな現場や高度なDIYワークショップでは、「だいたい」の測定がボルトのなめり、接合部のぐらつき、あるいは組み立ての失敗につながることがよくあります。このツールは、伝統的なインチ単位と精密なメートル法のギャップを埋め、ワークショッププロジェクトがプロフェッショナルな基準を維持できるように設計されています。' },
102
+ { type: 'title', text: '標準的な変換:1/2インチ vs 12.7mm', level: 3 },
103
+ { type: 'card', icon: 'mdi:ruler-square', title: 'メートル法とインチ法は互換性がありますか?', html: '<p>多くの人がそう思い込んでいます。1/2インチは正確に12.7mmですが、最も近い標準的なメートル法のソケットは13mmです。間違ったツールを使用すると、ボルトの頭を丸めてしまう可能性があります。当社のコンバーターは、ハードウェアを損傷しないよう、<strong>最も近い標準的な工具の一致</strong>を特定します。</p>' },
104
+ { type: 'title', text: '木工 vs 金属加工の許容誤差', level: 3 },
105
+ { type: 'paragraph', html: '許容誤差の要件は職種によって大きく異なります。<strong>木工</strong>では、1/64インチ(0.4mm)の許容誤差は通常許容されます。<strong>金属加工や機械加工</strong>では、0.1mmや0.01mmが重要になります。当社のツールには、特定の材料に対してどの標準ファスナーが最も安全かを判断するのに役立つ精度モードが含まれています。' },
106
+ { type: 'title', text: '正確な測定のための3つの重要なヒント', level: 3 },
107
+ { type: 'paragraph', html: '<strong>1. ノギスを使用する:</strong> 逆検索の場合は、最も正確なミリメートル入力のために常にデジタルノギスを使用してください。<strong>2. 摩耗を確認する:</strong> 古いソケットやボルトはエッジが摩耗している場合があり、「最も近い一致」がさらに重要になります。<strong>3. ピッチを確認する:</strong> ヘッドサイズが一致していても、ネジピッチ(メートル vs インチ)は常に異なることに注意してください。' },
102
108
  ],
103
109
  ui: {
104
110
  labelFraction: '測定タイプ',
@@ -94,11 +94,17 @@ export const content: ToolLocaleContent<WorkshopFractionConverterUI> = {
94
94
  faqTitle: '자주 묻는 질문',
95
95
  faq: faqData,
96
96
  bibliography,
97
+ howTo: howToData,
97
98
  schemas: [faqSchema, howToSchema, appSchema],
98
99
  seo: [
99
- { title: 'FAQ', type: 'faq', schema: faqSchema },
100
- { title: '사용 방법', type: 'howto', schema: howToSchema },
101
- { title: '애플리케이션', type: 'app', schema: appSchema },
100
+ { type: 'title', text: '워크숍에서 정밀한 분수 변환이 중요한 이유', level: 2 },
101
+ { type: 'paragraph', html: '전문적인 작업장이나 고급 DIY 프로젝트에서 "대략적인" 측정은 종종 볼트 마모, 불안정한 결합 또는 조립 실패로 이어집니다. 이 도구는 전통적인 인치 단위와 정밀한 미터법 사이의 간극을 메워 워크숍 프로젝트가 전문가 수준의 표준을 유지할 수 있도록 설계되었습니다.' },
102
+ { type: 'title', text: '표준 변환: 1/2" vs. 12.7mm', level: 3 },
103
+ { type: 'card', icon: 'mdi:ruler-square', title: '미터법과 인치법은 호환되나요?', html: '<p>많은 사람들이 그렇다고 가정합니다. 1/2"는 정확히 12.7mm이지만, 가장 가까운 표준 미터법 소켓은 13mm입니다. 잘못된 도구를 사용하면 볼트 머리가 뭉개질 수 있습니다. 당사의 변환기는 하드웨어를 손상시키지 않도록 <strong>가장 가까운 표준 공구 일치 항목</strong>을 식별합니다.</p>' },
104
+ { type: 'title', text: '목공 vs. 금속 가공 공차', level: 3 },
105
+ { type: 'paragraph', html: '공차 요구 사항은 직종에 따라 크게 다릅니다. <strong>목공</strong>에서는 1/64"(0.4mm)의 공차가 보통 허용됩니다. <strong>금속 가공 및 기계 가공</strong>에서는 0.1mm 또는 0.01mm가 중요합니다. 당사의 도구에는 특정 재료에 대해 어떤 표준 패스너가 가장 안전한지 결정하는 데 도움이 되는 정밀 모드가 포함되어 있습니다.' },
106
+ { type: 'title', text: '정확한 측정을 위한 3가지 필수 팁', level: 3 },
107
+ { type: 'paragraph', html: '<strong>1. 캘리퍼스 사용:</strong> 역방향 검색 시 가장 정확한 밀리미터 입력을 위해 항상 디지털 캘리퍼스를 사용하십시오. <strong>2. 마모 확인:</strong> 오래된 소켓과 볼트는 모서리가 마모되었을 수 있어 "가장 가까운 일치"가 더욱 중요해집니다. <strong>3. 나사산 피치 확인:</strong> 헤드 크기가 일치하더라도 나사산 피치(미터법 vs. 인치법)는 항상 다르다는 점을 기억하십시오.' },
102
108
  ],
103
109
  ui: {
104
110
  labelFraction: '측정 유형',