@jjlmoya/utils-textiles 1.4.0 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (178) hide show
  1. package/package.json +59 -58
  2. package/src/category/i18n/de.ts +76 -0
  3. package/src/category/i18n/fr.ts +33 -30
  4. package/src/category/i18n/id.ts +76 -0
  5. package/src/category/i18n/it.ts +76 -0
  6. package/src/category/i18n/ja.ts +76 -0
  7. package/src/category/i18n/ko.ts +76 -0
  8. package/src/category/i18n/nl.ts +76 -0
  9. package/src/category/i18n/pl.ts +76 -0
  10. package/src/category/i18n/pt.ts +76 -0
  11. package/src/category/i18n/ru.ts +76 -0
  12. package/src/category/i18n/sv.ts +76 -0
  13. package/src/category/i18n/tr.ts +76 -0
  14. package/src/category/i18n/zh.ts +76 -0
  15. package/src/category/index.ts +39 -7
  16. package/src/tests/i18n_coverage.test.ts +36 -0
  17. package/src/tests/schemas_fulfillment.test.ts +23 -0
  18. package/src/tests/slug_uniqueness.test.ts +81 -0
  19. package/src/tests/title_quality.test.ts +55 -0
  20. package/src/tool/burnTest/i18n/de.ts +225 -0
  21. package/src/tool/burnTest/i18n/id.ts +225 -0
  22. package/src/tool/burnTest/i18n/it.ts +225 -0
  23. package/src/tool/burnTest/i18n/ja.ts +225 -0
  24. package/src/tool/burnTest/i18n/ko.ts +225 -0
  25. package/src/tool/burnTest/i18n/nl.ts +225 -0
  26. package/src/tool/burnTest/i18n/pl.ts +225 -0
  27. package/src/tool/burnTest/i18n/pt.ts +225 -0
  28. package/src/tool/burnTest/i18n/ru.ts +225 -0
  29. package/src/tool/burnTest/i18n/sv.ts +225 -0
  30. package/src/tool/burnTest/i18n/tr.ts +225 -0
  31. package/src/tool/burnTest/i18n/zh.ts +225 -0
  32. package/src/tool/burnTest/index.ts +15 -7
  33. package/src/tool/clothingSizeConverter/i18n/de.ts +356 -0
  34. package/src/tool/clothingSizeConverter/i18n/id.ts +356 -0
  35. package/src/tool/clothingSizeConverter/i18n/it.ts +356 -0
  36. package/src/tool/clothingSizeConverter/i18n/ja.ts +356 -0
  37. package/src/tool/clothingSizeConverter/i18n/ko.ts +356 -0
  38. package/src/tool/clothingSizeConverter/i18n/nl.ts +356 -0
  39. package/src/tool/clothingSizeConverter/i18n/pl.ts +356 -0
  40. package/src/tool/clothingSizeConverter/i18n/pt.ts +356 -0
  41. package/src/tool/clothingSizeConverter/i18n/ru.ts +356 -0
  42. package/src/tool/clothingSizeConverter/i18n/sv.ts +356 -0
  43. package/src/tool/clothingSizeConverter/i18n/tr.ts +356 -0
  44. package/src/tool/clothingSizeConverter/i18n/zh.ts +356 -0
  45. package/src/tool/clothingSizeConverter/index.ts +15 -7
  46. package/src/tool/fabricProjectCalculator/i18n/de.ts +250 -0
  47. package/src/tool/fabricProjectCalculator/i18n/id.ts +250 -0
  48. package/src/tool/fabricProjectCalculator/i18n/it.ts +250 -0
  49. package/src/tool/fabricProjectCalculator/i18n/ja.ts +250 -0
  50. package/src/tool/fabricProjectCalculator/i18n/ko.ts +250 -0
  51. package/src/tool/fabricProjectCalculator/i18n/nl.ts +250 -0
  52. package/src/tool/fabricProjectCalculator/i18n/pl.ts +250 -0
  53. package/src/tool/fabricProjectCalculator/i18n/pt.ts +250 -0
  54. package/src/tool/fabricProjectCalculator/i18n/ru.ts +250 -0
  55. package/src/tool/fabricProjectCalculator/i18n/sv.ts +250 -0
  56. package/src/tool/fabricProjectCalculator/i18n/tr.ts +250 -0
  57. package/src/tool/fabricProjectCalculator/i18n/zh.ts +250 -0
  58. package/src/tool/fabricProjectCalculator/index.ts +15 -7
  59. package/src/tool/fabricTruth/i18n/de.ts +282 -0
  60. package/src/tool/fabricTruth/i18n/en.ts +1 -1
  61. package/src/tool/fabricTruth/i18n/fr.ts +1 -1
  62. package/src/tool/fabricTruth/i18n/id.ts +282 -0
  63. package/src/tool/fabricTruth/i18n/it.ts +282 -0
  64. package/src/tool/fabricTruth/i18n/ja.ts +282 -0
  65. package/src/tool/fabricTruth/i18n/ko.ts +282 -0
  66. package/src/tool/fabricTruth/i18n/nl.ts +282 -0
  67. package/src/tool/fabricTruth/i18n/pl.ts +282 -0
  68. package/src/tool/fabricTruth/i18n/pt.ts +282 -0
  69. package/src/tool/fabricTruth/i18n/ru.ts +282 -0
  70. package/src/tool/fabricTruth/i18n/sv.ts +282 -0
  71. package/src/tool/fabricTruth/i18n/tr.ts +282 -0
  72. package/src/tool/fabricTruth/i18n/zh.ts +286 -0
  73. package/src/tool/fabricTruth/index.ts +15 -7
  74. package/src/tool/fiberPrep/i18n/de.ts +225 -0
  75. package/src/tool/fiberPrep/i18n/id.ts +225 -0
  76. package/src/tool/fiberPrep/i18n/it.ts +225 -0
  77. package/src/tool/fiberPrep/i18n/ja.ts +225 -0
  78. package/src/tool/fiberPrep/i18n/ko.ts +225 -0
  79. package/src/tool/fiberPrep/i18n/nl.ts +225 -0
  80. package/src/tool/fiberPrep/i18n/pl.ts +225 -0
  81. package/src/tool/fiberPrep/i18n/pt.ts +225 -0
  82. package/src/tool/fiberPrep/i18n/ru.ts +225 -0
  83. package/src/tool/fiberPrep/i18n/sv.ts +225 -0
  84. package/src/tool/fiberPrep/i18n/tr.ts +225 -0
  85. package/src/tool/fiberPrep/i18n/zh.ts +225 -0
  86. package/src/tool/fiberPrep/index.ts +15 -7
  87. package/src/tool/knittingGauge/i18n/de.ts +234 -0
  88. package/src/tool/knittingGauge/i18n/id.ts +234 -0
  89. package/src/tool/knittingGauge/i18n/it.ts +234 -0
  90. package/src/tool/knittingGauge/i18n/ja.ts +234 -0
  91. package/src/tool/knittingGauge/i18n/ko.ts +234 -0
  92. package/src/tool/knittingGauge/i18n/nl.ts +234 -0
  93. package/src/tool/knittingGauge/i18n/pl.ts +234 -0
  94. package/src/tool/knittingGauge/i18n/pt.ts +234 -0
  95. package/src/tool/knittingGauge/i18n/ru.ts +234 -0
  96. package/src/tool/knittingGauge/i18n/sv.ts +234 -0
  97. package/src/tool/knittingGauge/i18n/tr.ts +234 -0
  98. package/src/tool/knittingGauge/i18n/zh.ts +234 -0
  99. package/src/tool/knittingGauge/index.ts +15 -7
  100. package/src/tool/laundryGuide/i18n/de.ts +275 -0
  101. package/src/tool/laundryGuide/i18n/id.ts +275 -0
  102. package/src/tool/laundryGuide/i18n/it.ts +275 -0
  103. package/src/tool/laundryGuide/i18n/ja.ts +275 -0
  104. package/src/tool/laundryGuide/i18n/ko.ts +275 -0
  105. package/src/tool/laundryGuide/i18n/nl.ts +275 -0
  106. package/src/tool/laundryGuide/i18n/pl.ts +275 -0
  107. package/src/tool/laundryGuide/i18n/pt.ts +275 -0
  108. package/src/tool/laundryGuide/i18n/ru.ts +275 -0
  109. package/src/tool/laundryGuide/i18n/sv.ts +275 -0
  110. package/src/tool/laundryGuide/i18n/tr.ts +275 -0
  111. package/src/tool/laundryGuide/i18n/zh.ts +275 -0
  112. package/src/tool/laundryGuide/index.ts +15 -7
  113. package/src/tool/needleConverter/i18n/de.ts +212 -0
  114. package/src/tool/needleConverter/i18n/id.ts +212 -0
  115. package/src/tool/needleConverter/i18n/it.ts +212 -0
  116. package/src/tool/needleConverter/i18n/ja.ts +212 -0
  117. package/src/tool/needleConverter/i18n/ko.ts +212 -0
  118. package/src/tool/needleConverter/i18n/nl.ts +212 -0
  119. package/src/tool/needleConverter/i18n/pl.ts +212 -0
  120. package/src/tool/needleConverter/i18n/pt.ts +212 -0
  121. package/src/tool/needleConverter/i18n/ru.ts +212 -0
  122. package/src/tool/needleConverter/i18n/sv.ts +212 -0
  123. package/src/tool/needleConverter/i18n/tr.ts +212 -0
  124. package/src/tool/needleConverter/i18n/zh.ts +212 -0
  125. package/src/tool/needleConverter/index.ts +15 -7
  126. package/src/tool/sewingPatternScaler/i18n/de.ts +227 -0
  127. package/src/tool/sewingPatternScaler/i18n/id.ts +227 -0
  128. package/src/tool/sewingPatternScaler/i18n/it.ts +227 -0
  129. package/src/tool/sewingPatternScaler/i18n/ja.ts +227 -0
  130. package/src/tool/sewingPatternScaler/i18n/ko.ts +227 -0
  131. package/src/tool/sewingPatternScaler/i18n/nl.ts +227 -0
  132. package/src/tool/sewingPatternScaler/i18n/pl.ts +227 -0
  133. package/src/tool/sewingPatternScaler/i18n/pt.ts +227 -0
  134. package/src/tool/sewingPatternScaler/i18n/ru.ts +227 -0
  135. package/src/tool/sewingPatternScaler/i18n/sv.ts +227 -0
  136. package/src/tool/sewingPatternScaler/i18n/tr.ts +227 -0
  137. package/src/tool/sewingPatternScaler/i18n/zh.ts +227 -0
  138. package/src/tool/sewingPatternScaler/index.ts +15 -7
  139. package/src/tool/shoeSizeConverter/i18n/de.ts +184 -0
  140. package/src/tool/shoeSizeConverter/i18n/id.ts +184 -0
  141. package/src/tool/shoeSizeConverter/i18n/it.ts +184 -0
  142. package/src/tool/shoeSizeConverter/i18n/ja.ts +184 -0
  143. package/src/tool/shoeSizeConverter/i18n/ko.ts +184 -0
  144. package/src/tool/shoeSizeConverter/i18n/nl.ts +184 -0
  145. package/src/tool/shoeSizeConverter/i18n/pl.ts +184 -0
  146. package/src/tool/shoeSizeConverter/i18n/pt.ts +184 -0
  147. package/src/tool/shoeSizeConverter/i18n/ru.ts +184 -0
  148. package/src/tool/shoeSizeConverter/i18n/sv.ts +184 -0
  149. package/src/tool/shoeSizeConverter/i18n/tr.ts +184 -0
  150. package/src/tool/shoeSizeConverter/i18n/zh.ts +184 -0
  151. package/src/tool/shoeSizeConverter/index.ts +15 -7
  152. package/src/tool/stainChemistry/i18n/de.ts +300 -0
  153. package/src/tool/stainChemistry/i18n/id.ts +300 -0
  154. package/src/tool/stainChemistry/i18n/it.ts +300 -0
  155. package/src/tool/stainChemistry/i18n/ja.ts +300 -0
  156. package/src/tool/stainChemistry/i18n/ko.ts +297 -0
  157. package/src/tool/stainChemistry/i18n/nl.ts +300 -0
  158. package/src/tool/stainChemistry/i18n/pl.ts +300 -0
  159. package/src/tool/stainChemistry/i18n/pt.ts +300 -0
  160. package/src/tool/stainChemistry/i18n/ru.ts +300 -0
  161. package/src/tool/stainChemistry/i18n/sv.ts +300 -0
  162. package/src/tool/stainChemistry/i18n/tr.ts +300 -0
  163. package/src/tool/stainChemistry/i18n/zh.ts +295 -0
  164. package/src/tool/stainChemistry/index.ts +15 -7
  165. package/src/tool/yarnCalculator/i18n/de.ts +310 -0
  166. package/src/tool/yarnCalculator/i18n/id.ts +310 -0
  167. package/src/tool/yarnCalculator/i18n/it.ts +310 -0
  168. package/src/tool/yarnCalculator/i18n/ja.ts +310 -0
  169. package/src/tool/yarnCalculator/i18n/ko.ts +310 -0
  170. package/src/tool/yarnCalculator/i18n/nl.ts +310 -0
  171. package/src/tool/yarnCalculator/i18n/pl.ts +310 -0
  172. package/src/tool/yarnCalculator/i18n/pt.ts +310 -0
  173. package/src/tool/yarnCalculator/i18n/ru.ts +310 -0
  174. package/src/tool/yarnCalculator/i18n/sv.ts +310 -0
  175. package/src/tool/yarnCalculator/i18n/tr.ts +310 -0
  176. package/src/tool/yarnCalculator/i18n/zh.ts +309 -0
  177. package/src/tool/yarnCalculator/index.ts +15 -7
  178. package/src/types.ts +1 -1
@@ -0,0 +1,310 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { YarnCalculatorUI } from '../ui';
4
+
5
+ const slug = 'yarn-calculator';
6
+ const title = '뜨개실 계산기: 실 몇 미터, 몇 볼이 필요할까요?';
7
+ const description =
8
+ '도안과 사이즈에 따라 대바늘 및 코바늘 프로젝트에 필요한 뜨개실(울, 실) 양을 미터 단위로 정확하게 계산해 드립니다.';
9
+
10
+ const faqData = [
11
+ {
12
+ question: '코바늘(크로셰)이 대바늘(니팅)보다 실을 더 많이 쓰는 이유는 무엇인가요?',
13
+ answer:
14
+ '코바늘은 매듭과 겹쳐진 루프를 만드는 방식으로 작업하므로, 제곱센티미터당 편물이 더 조밀하고 두껍게 형성됩니다. 평균적으로 코바늘 프로젝트는 동일한 프로젝트를 대바늘(메리야스 뜨기)로 뜰 때보다 실 소비량이 약 25%에서 35% 정도 더 많습니다.',
15
+ },
16
+ {
17
+ question: '서로 다른 염색 로트(Dye Lot)의 실을 사면 어떻게 되나요?',
18
+ answer:
19
+ '매장에서는 색상이 같아 보이더라도, 염색 과정에서의 미세한 화학적 차이로 인해 완성된 편물에서 눈에 띄는 "줄(색 변화)"이 생길 수 있습니다. 로트 번호가 동일한지 확인하고 필요한 실을 한꺼번에 구매하는 것을 강력히 권장합니다.',
20
+ },
21
+ {
22
+ question: '장력(게이지)이 최종 소비량에 어떤 영향을 미치나요?',
23
+ answer:
24
+ '느슨하게 뜰수록 한 코에 들어가는 실의 길이(미터)가 늘어납니다. 본인의 게이지가 도안에 적힌 것보다 큰 경우(예: 15코 기준인데 13코가 나오는 경우), 실 소비량은 상당히 늘어납니다. 사전에 게이지를 확인하는 것이 매우 중요합니다.',
25
+ },
26
+ {
27
+ question: '실의 무게만 알고 있을 때 미터수는 어떻게 계산하나요?',
28
+ answer:
29
+ '길이(미터) 데이터 없이는 계산하기 어렵습니다. 대부분의 실 라벨에는 길이가 표시되어 있습니다. 표시가 없다면 Ravelry와 같은 데이터베이스에서 실 이름으로 검색하여 50g 또는 100g당 정확한 길이를 찾아보세요.',
30
+ },
31
+ ];
32
+
33
+ const howToData = [
34
+ {
35
+ name: '프로젝트 선택',
36
+ text: '스웨터, 목도리, 모자, 양말, 담요 중에서 선택하여 특정 소비 기준 데이터를 불러옵니다.',
37
+ },
38
+ {
39
+ name: '사이즈 및 실 두께 정의',
40
+ text: '최종 치수(S, M, L, XL)와 사용할 실의 두께(Fingering, DK, Worsted, Bulky)를 입력합니다.',
41
+ },
42
+ {
43
+ name: '보정값 활성화',
44
+ text: '도안에 꽈배기(케이블)나 복잡한 무늬가 있다면 텍스처 스위치를 켜서 필요한 양을 추가합니다.',
45
+ },
46
+ {
47
+ name: '구매 리스트 확인',
48
+ text: '선택한 실 한 볼당 미터수를 입력하면 장바구니에 담아야 할 정확한 개수가 표시됩니다.',
49
+ },
50
+ ];
51
+
52
+ const faqSchema: WithContext<FAQPage> = {
53
+ '@context': 'https://schema.org',
54
+ '@type': 'FAQPage',
55
+ mainEntity: faqData.map((item) => ({
56
+ '@type': 'Question',
57
+ name: item.question,
58
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
59
+ })),
60
+ };
61
+
62
+ const howToSchema: WithContext<HowTo> = {
63
+ '@context': 'https://schema.org',
64
+ '@type': 'HowTo',
65
+ name: title,
66
+ description,
67
+ step: howToData.map((step) => ({
68
+ '@type': 'HowToStep',
69
+ name: step.name,
70
+ text: step.text,
71
+ })),
72
+ };
73
+
74
+ const appSchema: WithContext<SoftwareApplication> = {
75
+ '@context': 'https://schema.org',
76
+ '@type': 'SoftwareApplication',
77
+ name: title,
78
+ description,
79
+ applicationCategory: 'UtilityApplication',
80
+ operatingSystem: 'All',
81
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
82
+ inLanguage: 'ko',
83
+ };
84
+
85
+ export const content: ToolLocaleContent<YarnCalculatorUI> = {
86
+ slug,
87
+ title,
88
+ description,
89
+ faqTitle: '자주 묻는 질문',
90
+ faq: faqData,
91
+ bibliographyTitle: '참고 문헌',
92
+ bibliography: [
93
+ {
94
+ name: 'Craft Yarn Council: Standard Yarn Weights & Yardages',
95
+ url: 'https://www.craftyarncouncil.com/standards/yarn-weight-system',
96
+ },
97
+ {
98
+ name: 'Interweave Essentials: Yarn Substitution and Estimation',
99
+ url: 'https://www.interweave.com/article/knitting/yarn-substitution-angelina-take-two/',
100
+ },
101
+ {
102
+ name: 'The Woolery: Fibers and Calculation of Yarn Usage',
103
+ url: 'https://woolery.com/blogs/the-woolery-blog/yarn-weight-charts-helpful-guide/',
104
+ },
105
+ ],
106
+ howTo: howToData,
107
+ schemas: [faqSchema, howToSchema, appSchema],
108
+ seo: [
109
+ {
110
+ type: 'title',
111
+ text: '뜨개실 소비 가이드: 내 프로젝트에 필요한 미터수와 볼 수 계산법',
112
+ level: 2,
113
+ },
114
+ {
115
+ type: 'paragraph',
116
+ html: '뜨개질 로지스틱스를 마스터하고 대바늘·코바늘용 정밀 기술 계산기로 실 부족을 방지하세요. 뜨개질하는 사람들에게 가장 큰 공포 중 하나는 <strong>"얀 치킨(Yarn Chicken)"</strong>입니다. 프로젝트의 막바지에 마지막 코를 막기 전에 실이 모자랄 것 같아 조마조마한 순간을 말하죠. 이 계산기는 산업 표준인 길이와 무게 데이터를 기반으로 예측치를 제공하기 위해 개발되었습니다.',
117
+ },
118
+ {
119
+ type: 'stats',
120
+ items: [
121
+ { value: '+10%', label: '여유 마진', icon: 'mdi:security' },
122
+ { value: '미터법', label: '미터 단위 계산', icon: 'mdi:ruler' },
123
+ { value: '오프라인', label: '로컬 DB', icon: 'mdi:wifi-off' },
124
+ ],
125
+ columns: 3,
126
+ },
127
+ {
128
+ type: 'title',
129
+ text: '뜨개실 볼의 "무게"가 오해를 부르는 이유',
130
+ level: 3,
131
+ },
132
+ {
133
+ type: 'paragraph',
134
+ html: '많은 초보자들이 실을 무게(예: "100g짜리 6볼")로만 사려고 하는 실수를 합니다. 하지만 무게는 질량의 단위이지 길이의 단위가 아닙니다. 똑같은 100g이라도 실의 종류에 따라 길이는 천차만별입니다. 예를 들어, 아주 두꺼운 <strong>Bulky</strong> 타입은 80미터 정도일 수 있는 반면, <strong>Fingering / Lace</strong> 타입은 같은 무게에서 450미터가 넘을 수도 있습니다.',
135
+ },
136
+ {
137
+ type: 'paragraph',
138
+ html: '따라서 저희 계산기는 항상 <strong>"총 미터수"</strong>를 우선시합니다. 본인의 사이즈와 프로젝트에 필요한 전체 길이가 얼마인지 알게 되면, 사용하려는 실 라벨에 적힌 길이로 나누어 구매해야 할 정확한 볼 개수를 도출해낼 수 있습니다.',
139
+ },
140
+ {
141
+ type: 'title',
142
+ text: '실 두께별 표준 미터수 차트',
143
+ level: 3,
144
+ },
145
+ {
146
+ type: 'paragraph',
147
+ html: '라벨이 손에 없을 경우, 예측을 위해 이 수치들(섬유 100g당 기준)을 참고용으로 사용하세요:',
148
+ },
149
+ {
150
+ type: 'table',
151
+ headers: ['실 두께 (Weight)', '대략 미터수 / 100g', '권장 용도', '권장 바늘'],
152
+ rows: [
153
+ ['<strong>Lace / 0</strong>', '600 - 900m', '레이스 숄, 비침 무늬', '1.5 - 2.5mm'],
154
+ ['<strong>Fingering / 1</strong>', '360 - 450m', '양말, 아기 옷', '2.25 - 3.25mm'],
155
+ ['<strong>Sport / 2</strong>', '270 - 320m', '가벼운 자켓', '3.25 - 3.75mm'],
156
+ ['<strong>DK / 3</strong>', '200 - 250m', '스웨터, 모자', '3.75 - 4.5mm'],
157
+ ['<strong>Worsted / 4</strong>', '180 - 220m', '담요, 코트', '4.5 - 5.5mm'],
158
+ ['<strong>Bulky / 5</strong>', '100 - 140m', '두꺼운 목도리, 무릎 담요', '6.0 - 8.0mm'],
159
+ ],
160
+ },
161
+ {
162
+ type: 'tip',
163
+ title: '장력(Gauge)의 요소',
164
+ html: '<p>느슨하게 뜰수록 편물이 커지고 촘촘하게 뜰 때보다 실을 더 많이 소비한다는 점을 기억하세요. 저희 계산기는 안전 마진을 적용하고 있지만, 본인의 장력이 유독 느슨하다면 결과값에 5-10% 정도를 더 추가하여 실 부족을 방지하는 것을 고려해 보세요.</p>',
165
+ },
166
+ {
167
+ type: 'title',
168
+ text: '실 소비량을 늘리는 변수들',
169
+ level: 3,
170
+ },
171
+ {
172
+ type: 'paragraph',
173
+ html: '모든 뜨개 방법이 같은 양의 섬유를 소비하는 것은 아닙니다. 디자인을 선택할 때 다음 가산 요인들을 고려하세요:',
174
+ },
175
+ {
176
+ type: 'comparative',
177
+ items: [
178
+ {
179
+ title: '메리야스 뜨기 / 저지',
180
+ description: '모든 의류에서 베이스가 되는 소비량이자 최고의 실 효율을 나타냅니다.',
181
+ icon: 'mdi:minus-circle-outline',
182
+ points: ['초보자에게 이상적', '편물의 자연스러운 드레이프'],
183
+ },
184
+ {
185
+ title: '꽈배기 / 텍스처',
186
+ description: '섬유를 교차시키면 편물의 가로폭이 줄어들며, 소비량은 약 25% 증가합니다.',
187
+ icon: 'mdi:texture-box',
188
+ points: ['더 많은 미터수 필요', '더 조밀하고 무거운 편물'],
189
+ pointIcon: 'mdi:alert-circle-outline',
190
+ },
191
+ {
192
+ title: '코바늘 (Crochet)',
193
+ description: '코바늘 매듭은 대바늘 뜨기보다 실을 약 30% 더 많이 사용합니다.',
194
+ icon: 'mdi:hook',
195
+ points: ['빠른 실 소모', '입체적인 질감'],
196
+ pointIcon: 'mdi:alert-circle-outline',
197
+ },
198
+ {
199
+ title: '고무뜨기 (Ribbing)',
200
+ description: '겉뜨기/안뜨기 구조로 인해 제곱센티미터당 실이 더 많이 들어갑니다.',
201
+ icon: 'mdi:unfold-more-horizontal',
202
+ points: ['중간 정도의 소비 (+15%)', '높은 신축 회복성'],
203
+ },
204
+ ],
205
+ columns: 2,
206
+ },
207
+ {
208
+ type: 'title',
209
+ text: '준비성 철저한 니터를 위한 용어 사전',
210
+ level: 3,
211
+ },
212
+ {
213
+ type: 'glossary',
214
+ items: [
215
+ {
216
+ term: '염색 로트 (Dye Lot)',
217
+ definition:
218
+ '실을 염색한 솥을 식별하는 번호. 로트가 다르면 실 뭉치 상태에서는 몰라도 완성작에서 미세한 색상 차이가 확연히 보일 수 있습니다.',
219
+ },
220
+ {
221
+ term: '스태시 (Stash)',
222
+ definition:
223
+ '니터가 자택에 보유하고 있는 실 컬렉션. 라벨 없는 자투리 실 무게를 파악하는 것은 소품 프로젝트 계산에 꼭 필요합니다.',
224
+ },
225
+ {
226
+ term: 'Put-up',
227
+ definition:
228
+ '실이 말려 있는 형태(타래, 볼, 콘 등). 사용 전에 실 감기 도구로 감아야 하는지 여부에 영향을 줍니다.',
229
+ },
230
+ {
231
+ term: '얀 치킨 (Yarn Chicken)',
232
+ definition:
233
+ '부족해 보이는 양의 실로 편물의 한 구획을 완성하려고 도전하는 일.',
234
+ },
235
+ ],
236
+ },
237
+ {
238
+ type: 'title',
239
+ text: '이 계산기 결과 활용법',
240
+ level: 3,
241
+ },
242
+ {
243
+ type: 'paragraph',
244
+ html: '도구에서 미터수와 볼 수가 산출되면 다음의 수동 확인 단계를 거치는 것을 권장합니다:',
245
+ },
246
+ {
247
+ type: 'list',
248
+ items: [
249
+ '<strong>실제 실의 길이 확인:</strong> 모든 100g 볼이 200m인 것은 아닙니다. 라벨에서 이 데이터를 확인하여 최종 계산을 조정하세요.',
250
+ '<strong>장식용 길이 추가:</strong> 목도리에 술을 달거나 모자에 방울을 달 예정이라면 총합에 50~80미터를 추가하세요.',
251
+ '<strong>게이지 뜨기:</strong> 10x10 cm 샘플을 뜹니다. 정밀 저울로 무게를 재보세요. 만약 20g이고 담요 사이즈가 100x100(100개분)이라면 정확히 2kg의 실이 필요합니다.',
252
+ '<strong>항상 같은 로트로 구매:</strong> 계산 결과가 7볼이라면, 로트 차이로 인한 색차이를 막고 잇기용 실을 고려하여 8볼을 구매하는 여유를 두세요.',
253
+ ],
254
+ },
255
+ {
256
+ type: 'summary',
257
+ title: '실 구매를 위한 전략적 조언',
258
+ items: [
259
+ '필요한 길이를 확보하기 위해 그램수보다 미터수를 우선시하세요.',
260
+ '코바늘은 대바늘보다 실 소비가 훨씬 많으므로 타입 선택을 적절히 조정하세요.',
261
+ '조밀한 무늬(꽈배기)는 실 예산을 25% 정도 더 잡아야 합니다.',
262
+ '추가 구매가 필요할 때를 대비해 로트 번호가 적힌 라벨을 하나씩 보관해두세요.',
263
+ '반드시 떠야 하는 게이지용 편물을 고려해 10%의 여유 마진을 사용하세요.',
264
+ ],
265
+ },
266
+ ],
267
+ ui: {
268
+ sectionProject: '1. 프로젝트 종류',
269
+ sectionSize: '2. 치수 / 사이즈',
270
+ sectionWeight: '3. 실 두께',
271
+ sectionPattern: '4. 도안 특징',
272
+ sectionBall: '5. 뜨개실 데이터',
273
+ labelCables: '꽈배기나 조밀한 무늬가 있나요?',
274
+ labelGrams: '그램 / 볼',
275
+ labelMeters: '미터 / 볼',
276
+ weightFine: '가는 실',
277
+ weightMedium: '중간 실',
278
+ weightThick: '굵은 실',
279
+ weightXXL: '초극세사',
280
+ projectSweater: '스웨터',
281
+ projectScarf: '목도리',
282
+ projectHat: '모자',
283
+ projectSocks: '양말',
284
+ projectBlanket: '담요',
285
+ projectCardigan: '가디건',
286
+ statPrefix: '예상 총 소비량',
287
+ statSuffix: 'M',
288
+ statNote: '10% 여유분을 포함하여 계산된 최종 미터수입니다.',
289
+ ballsFormatSingular: '{n}볼 구매',
290
+ ballsFormatPlural: '{n}볼 구매',
291
+ ballsDetailFormat: '개당 {w}g / {m}m',
292
+ alertTitle: '전략적 안전수칙:',
293
+ alertText:
294
+ '이 계산은 실 부족이 발생하지 않도록 이미 배려되어 있습니다. 구매 시 염색 로트(dye lot) 번호가 동일한지 확인하세요.',
295
+ schemeSleeveLabel: '소매',
296
+ schemeSleeveEach: '각',
297
+ schemeBodyLabel: '몸판',
298
+ schemeTotalHat: '모자 합계',
299
+ schemeTotalFlat: '편물 합계',
300
+ schemeTotalSocks: '한 켤레 합계',
301
+ sizeLabels: {
302
+ sweater: ['S', 'M', 'L', 'XL'],
303
+ cardigan: ['S', 'M', 'L', 'XL'],
304
+ hat: ['어린이', 'S', 'M', 'L'],
305
+ scarf: ['미니', 'M', '대형', '맥시'],
306
+ socks: ['어린이', '성인 S', '성인 M', '성인 L'],
307
+ blanket: ['베이비', '쇼파용', '싱글', '퀸'],
308
+ },
309
+ },
310
+ };
@@ -0,0 +1,310 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { YarnCalculatorUI } from '../ui';
4
+
5
+ const slug = 'wolcalculator-breien-haken';
6
+ const title = 'Wolcalculator: Hoeveel meter en bollen heb ik nodig?';
7
+ const description =
8
+ 'Bereken met metrische precisie de hoeveelheid wol of garen die nodig is voor je brei- en haakprojecten op basis van het patroon en de maat.';
9
+
10
+ const faqData = [
11
+ {
12
+ question: 'Waarom verbruikt haken meer wol dan breien?',
13
+ answer:
14
+ 'Haken is gebaseerd op het maken van knopen en overlappende lussen, wat zorgt voor een dichter en dikker weefsel per vierkante centimeter. Gemiddeld verbruikt een haakproject tussen 25% en 35% meer garen dan hetzelfde project gebreid met twee pennen (tricotsteek).',
15
+ },
16
+ {
17
+ question: 'Wat gebeurt er als ik wol van verschillende verfbaden (Dye Lot) koop?',
18
+ answer:
19
+ 'Zelfs als de kleur identiek lijkt in de winkel, kunnen minimale chemische variaties tijdens het verven zichtbare "banen" in het kledingstuk creëren. Het wordt ten zeerste aanbevolen om alle wol in één keer te kopen en te controleren of de batchcode hetzelfde is.',
20
+ },
21
+ {
22
+ question: 'Hoe beïnvloedt de stekenverhouding (gauge) het uiteindelijke verbruik?',
23
+ answer:
24
+ 'Als je los breit, verbruikt elke steek meer meters garen. Als je stekenproef groter is dan wat het patroon aangeeft (bijv. 13 steken in plaats van 15), zal je wolverbruik aanzienlijk toenemen. Het maken van een stekenproef vooraf is essentieel.',
25
+ },
26
+ {
27
+ question: 'Hoe bereken ik het aantal meters als ik alleen het gewicht van de bol heb?',
28
+ answer:
29
+ 'Zonder de gegevens over de looplengte is het moeilijk. De meeste bollen geven het aantal meters op hun label aan. Als dat niet het geval is, zoek dan op de naam van de wol in databases zoals Ravelry om de exacte lengte per 50g of 100g te vinden.',
30
+ },
31
+ ];
32
+
33
+ const howToData = [
34
+ {
35
+ name: 'Selecteer het project',
36
+ text: 'Kies tussen een trui, sjaal, muts, sokken of deken om de specifieke verbruiksgegevens te laden.',
37
+ },
38
+ {
39
+ name: 'Definieer de maat en dikte',
40
+ text: 'Geef de uiteindelijke afmetingen aan (S, M, L, XL) och de dikte van het garen dat je gaat gebruiken (Fingering, DK, Worsted, Bulky).',
41
+ },
42
+ {
43
+ name: 'Activeer vermenigvuldigers',
44
+ text: 'Als je patroon kabels of complexe texturen heeft, activeer dan de textuurschakelaar om het noodzakelijke extra verbruik toe te voegen.',
45
+ },
46
+ {
47
+ name: 'Ontvang de boodschappenlijst',
48
+ text: 'Voer het aantal meters per bol van je gekozen wol in om precies te zien hoeveel eenheden je in je winkelmandje moet doen.',
49
+ },
50
+ ];
51
+
52
+ const faqSchema: WithContext<FAQPage> = {
53
+ '@context': 'https://schema.org',
54
+ '@type': 'FAQPage',
55
+ mainEntity: faqData.map((item) => ({
56
+ '@type': 'Question',
57
+ name: item.question,
58
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
59
+ })),
60
+ };
61
+
62
+ const howToSchema: WithContext<HowTo> = {
63
+ '@context': 'https://schema.org',
64
+ '@type': 'HowTo',
65
+ name: title,
66
+ description,
67
+ step: howToData.map((step) => ({
68
+ '@type': 'HowToStep',
69
+ name: step.name,
70
+ text: step.text,
71
+ })),
72
+ };
73
+
74
+ const appSchema: WithContext<SoftwareApplication> = {
75
+ '@context': 'https://schema.org',
76
+ '@type': 'SoftwareApplication',
77
+ name: title,
78
+ description,
79
+ applicationCategory: 'UtilityApplication',
80
+ operatingSystem: 'All',
81
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
82
+ inLanguage: 'nl',
83
+ };
84
+
85
+ export const content: ToolLocaleContent<YarnCalculatorUI> = {
86
+ slug,
87
+ title,
88
+ description,
89
+ faqTitle: 'Veelgestelde Vragen',
90
+ faq: faqData,
91
+ bibliographyTitle: 'Bibliografie',
92
+ bibliography: [
93
+ {
94
+ name: 'Craft Yarn Council: Standard Yarn Weights & Yardages',
95
+ url: 'https://www.craftyarncouncil.com/standards/yarn-weight-system',
96
+ },
97
+ {
98
+ name: 'Interweave Essentials: Yarn Substitution and Estimation',
99
+ url: 'https://www.interweave.com/article/knitting/yarn-substitution-angelina-take-two/',
100
+ },
101
+ {
102
+ name: 'The Woolery: Fibers and Calculation of Yarn Usage',
103
+ url: 'https://woolery.com/blogs/the-woolery-blog/yarn-weight-charts-helpful-guide/',
104
+ },
105
+ ],
106
+ howTo: howToData,
107
+ schemas: [faqSchema, howToSchema, appSchema],
108
+ seo: [
109
+ {
110
+ type: 'title',
111
+ text: 'Gids voor Wolverbruik: Hoe meters en bollen te berekenen voor je projecten',
112
+ level: 2,
113
+ },
114
+ {
115
+ type: 'paragraph',
116
+ html: 'Beheers de logistiek van het breien en voorkom dat je garen tekortkomt met onze technische precisiecalculator voor breien en haken. Een van de grootste angsten van iedereen die breit of haakt is de <strong>"Yarn Chicken"</strong>: dat kritieke moment aan het einde van een project waar het lijkt alsof de draad opraakt voordat de laatste steken zijn afgekant. Deze calculator is ontwikkeld om je schattingen te geven op basis van industriestandaarden voor looplengte en gewicht.',
117
+ },
118
+ {
119
+ type: 'stats',
120
+ items: [
121
+ { value: '+10%', label: 'Veiligheidsmarge', icon: 'mdi:security' },
122
+ { value: 'Metrisch', label: 'Berekening in Meters', icon: 'mdi:ruler' },
123
+ { value: 'Offline', label: 'Lokale Database', icon: 'mdi:wifi-off' },
124
+ ],
125
+ columns: 3,
126
+ },
127
+ {
128
+ type: 'title',
129
+ text: 'Waarom het gewicht van bollen misleidend is',
130
+ level: 3,
131
+ },
132
+ {
133
+ type: 'paragraph',
134
+ html: 'Veel beginners maken de fout om wol uitsluitend op basis van gewicht te kopen (bijv. "6 bollen van 100g"). Gewicht is echter een eenheid van massa, niet van lengte. Twee wolsoorten die beide 100g wegen, kunnen radicaal verschillende lengtes hebben: een <strong>Bulky</strong> garen kan slechts 80 meter zijn, terwijl een <strong>Fingering / Lace</strong> garen meer dan 450 meter kan bevatten bij hetzelfde gewicht.',
135
+ },
136
+ {
137
+ type: 'paragraph',
138
+ html: 'Daarom geeft onze calculator altijd prioriteit aan de <strong>totale meters</strong>. Zodra je de benodigde lengte voor je maat en project weet, kun je deze delen door de looplengte die op het label van je specifieke bol staat om het exacte aantal bollen te verkrijgen.',
139
+ },
140
+ {
141
+ type: 'title',
142
+ text: 'Tabel met Standaard Looplengths per Dikte',
143
+ level: 3,
144
+ },
145
+ {
146
+ type: 'paragraph',
147
+ html: 'Als je het label niet bij de hand hebt, kun je deze referentie-looplengtes (per 100g garen) gebruiken voor je schattingen:',
148
+ },
149
+ {
150
+ type: 'table',
151
+ headers: ['Dikte (Weight)', 'Meters ca. / 100g', 'Aanbevolen Gebruik', 'Geadviseerde Naalden'],
152
+ rows: [
153
+ ['<strong>Lace / 0</strong>', '600 - 900m', 'Kantwerk, ajour sjaals', '1.5 - 2.5mm'],
154
+ ['<strong>Fingering / 1</strong>', '360 - 450m', 'Sokken, babykleiding', '2.25 - 3.25mm'],
155
+ ['<strong>Sport / 2</strong>', '270 - 320m', 'Lichte vestjes', '3.25 - 3.75mm'],
156
+ ['<strong>DK / 3</strong>', '200 - 250m', 'Truien, mutsen', '3.75 - 4.5mm'],
157
+ ['<strong>Worsted / 4</strong>', '180 - 220m', 'Dekens, jassen', '4.5 - 5.5mm'],
158
+ ['<strong>Bulky / 5</strong>', '100 - 140m', 'XXL sjaals, dekens', '6.0 - 8.0mm'],
159
+ ],
160
+ },
161
+ {
162
+ type: 'tip',
163
+ title: 'De Factor van de Spanning (Gauge)',
164
+ html: '<p>Vergeet niet dat als je heel los breit, je steken groter zullen zijn en meer draad zullen verbruiken dan wanneer je strak breit. Onze calculator past een veiligheidsmarge toe, maar als je weet dat je spanning extreem los is, overweeg dan om 5-10% extra toe te voegen aan de resultaten om verrassingen te voorkomen.</p>',
165
+ },
166
+ {
167
+ type: 'title',
168
+ text: 'Variabelen die het garenverbruik verhogen',
169
+ level: 3,
170
+ },
171
+ {
172
+ type: 'paragraph',
173
+ html: 'Niet alle steken verbruiken dezelfde hoeveelheid draad. Houd bij het kiezen van je ontwerp rekening met deze vermenigvuldigingsfactoren:',
174
+ },
175
+ {
176
+ type: 'comparative',
177
+ items: [
178
+ {
179
+ title: 'Tricotsteek / Jersey',
180
+ description: 'Vertegenwoordigt het basisverbruik en de maximale garenefficiëntie voor elk kledingstuk.',
181
+ icon: 'mdi:minus-circle-outline',
182
+ points: ['Ideaal voor beginners', 'Natuurlijke valling van de stof'],
183
+ },
184
+ {
185
+ title: 'Kabels / Textuur',
186
+ description: 'Het kruisen van draden "verkort" het werkstuk, waardoor het verbruik met ongeveer 25% toeneemt.',
187
+ icon: 'mdi:texture-box',
188
+ points: ['Vereist meer meters', 'Dichter en zwaarder weefsel'],
189
+ pointIcon: 'mdi:alert-circle-outline',
190
+ },
191
+ {
192
+ title: 'Haken (Crochet)',
193
+ description: 'Haaksteken gebruiken ongeveer 30% meer draad dan breien.',
194
+ icon: 'mdi:hook',
195
+ points: ['Garen raakt sneller op', 'Driedimensionale textuur'],
196
+ pointIcon: 'mdi:alert-circle-outline',
197
+ },
198
+ {
199
+ title: 'Boordsteek (Ribbing)',
200
+ description: 'De recht/averecht structuur verzamelt meer wol per vierkante cm.',
201
+ icon: 'mdi:unfold-more-horizontal',
202
+ points: ['Middelmatig verbruik (+15%)', 'Hoge elasticiteit'],
203
+ },
204
+ ],
205
+ columns: 2,
206
+ },
207
+ {
208
+ type: 'title',
209
+ text: 'Woordenlijst voor de Vooruitziende Breier',
210
+ level: 3,
211
+ },
212
+ {
213
+ type: 'glossary',
214
+ items: [
215
+ {
216
+ term: 'Dye Lot (Verfbad)',
217
+ definition:
218
+ 'Nummer dat de verfkuip identificeert waarin de wol geverfd is. Verschillende batches kunnen kleurverschillen hebben die onzichtbaar zijn op de bol maar zeer zichtbaar in het voltooide werkstuk.',
219
+ },
220
+ {
221
+ term: 'Stash (Voorraad)',
222
+ definition:
223
+ 'De persoonlijke garencollectie van een breier. Het identificeren van het gewicht van restjes garen zonder label is essentieel voor kleine projecten.',
224
+ },
225
+ {
226
+ term: 'Put-up',
227
+ definition:
228
+ 'De manier waarop het garen wordt gepresenteerd (streng, bol of conus), wat bepaalt of het eerst moet worden opgewonden.',
229
+ },
230
+ {
231
+ term: 'Yarn Chicken',
232
+ definition:
233
+ 'Het risico dat je neemt door te proberen een sectie af te ronden met een hoeveelheid draad die onvoldoende lijkt.',
234
+ },
235
+ ],
236
+ },
237
+ {
238
+ type: 'title',
239
+ text: 'Hoe de resultaten van deze calculator te gebruiken',
240
+ level: 3,
241
+ },
242
+ {
243
+ type: 'paragraph',
244
+ html: 'Zodra de tool het aantal meters en bollen teruggeeft, raden we aan om de volgende stappen voor handmatige verificatie uit te voeren:',
245
+ },
246
+ {
247
+ type: 'list',
248
+ items: [
249
+ '<strong>Controleer de looplengte van je werkelijke bol:</strong> Niet elke bol van 100g heeft 200m. Controleer dit op het label om de uiteindelijke berekening aan te passen.',
250
+ '<strong>Tel meters op voor details:</strong> Als je franjes aan een sjaal of pompons aan een muts toevoegt, tel dan 50-80 meter extra op bij het totaal.',
251
+ '<strong>Stekenproef:</strong> Brei een vierkant van 10x10 cm. Weeg het op een precisieweegschaal. Als het 20g weegt en je deken 100x100 is (100 vierkantjes), dan heb je precies 2kg wol nodig.',
252
+ '<strong>Koop altijd van hetzelfde verfbad:</strong> Als de berekening 7 bollen zegt, koop er dan 8 om marge te hebben voor de naden of in het geval van verschillende batches.',
253
+ ],
254
+ },
255
+ {
256
+ type: 'summary',
257
+ title: 'Strategisch Advies voor de Inkoop van Wol',
258
+ items: [
259
+ 'Geef prioriteit aan meters boven grammen om de nodige lengte te garanderen.',
260
+ 'Haken verbruikt aanzienlijk meer wol dan breien; pas de projectkiezer aan.',
261
+ 'Dichte texturen (kabels) vereisen een verhoging van 25% in het garenbudget.',
262
+ 'Bewaar altijd een label van elk verfbad als je garen moet bijbestellen.',
263
+ 'Gebruik de marge van 10% om de verplichte stekenproef te maken.',
264
+ ],
265
+ },
266
+ ],
267
+ ui: {
268
+ sectionProject: '1. TYPE PROJECT',
269
+ sectionSize: '2. AFMETINGEN / MAAT',
270
+ sectionWeight: '3. GARNDIKTE',
271
+ sectionPattern: '4. PATROONKENMERKEN',
272
+ sectionBall: '5. GEGEVENS VAN DE BOL',
273
+ labelCables: 'Kabels of dichte texturen?',
274
+ labelGrams: 'GRAM / BOL',
275
+ labelMeters: 'METER / BOL',
276
+ weightFine: 'Fijn',
277
+ weightMedium: 'Gemiddeld',
278
+ weightThick: 'Dik',
279
+ weightXXL: 'XXL',
280
+ projectSweater: 'TRUI',
281
+ projectScarf: 'SJAAL',
282
+ projectHat: 'MUTS',
283
+ projectSocks: 'SOKKEN',
284
+ projectBlanket: 'DEKEN',
285
+ projectCardigan: 'VEST',
286
+ statPrefix: 'TOTAAL GESCHAT VERBRUIK',
287
+ statSuffix: 'M',
288
+ statNote: 'Uiteindelijk aantal meters berekend met een reservevoorraad van 10%.',
289
+ ballsFormatSingular: 'Koop {n} bol',
290
+ ballsFormatPlural: 'Koop {n} bollen',
291
+ ballsDetailFormat: 'Bollen van {w}g / {m}m elk.',
292
+ alertTitle: 'Strategische zekerheid:',
293
+ alertText:
294
+ 'Deze berekening garandeert al dat je niet zonder draad komt te zitten. Vergeet niet om het badnummer (dye lot) te controleren bij aankoop.',
295
+ schemeSleeveLabel: 'Mouwen',
296
+ schemeSleeveEach: 'per stuk',
297
+ schemeBodyLabel: 'Lijf',
298
+ schemeTotalHat: 'Totaal Muts',
299
+ schemeTotalFlat: 'Totaal Stuk',
300
+ schemeTotalSocks: 'Totaal Paar',
301
+ sizeLabels: {
302
+ sweater: ['S', 'M', 'L', 'XL'],
303
+ cardigan: ['S', 'M', 'L', 'XL'],
304
+ hat: ['Kind', 'S', 'M', 'L'],
305
+ scarf: ['Mini', 'M', 'Groot', 'Maxi'],
306
+ socks: ['Kind', 'Volw. S', 'Volw. M', 'Volw. L'],
307
+ blanket: ['Baby', 'Bank', 'Bed 90', 'Bed 150'],
308
+ },
309
+ },
310
+ };