@jjlmoya/utils-textiles 1.20.0 → 1.22.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 (209) hide show
  1. package/package.json +1 -1
  2. package/src/category/i18n/de.ts +76 -76
  3. package/src/category/i18n/en.ts +76 -76
  4. package/src/category/i18n/es.ts +76 -76
  5. package/src/category/i18n/fr.ts +76 -76
  6. package/src/category/i18n/id.ts +76 -76
  7. package/src/category/i18n/it.ts +76 -76
  8. package/src/category/i18n/ja.ts +76 -76
  9. package/src/category/i18n/ko.ts +76 -76
  10. package/src/category/i18n/nl.ts +76 -76
  11. package/src/category/i18n/pl.ts +76 -76
  12. package/src/category/i18n/pt.ts +76 -76
  13. package/src/category/i18n/ru.ts +76 -76
  14. package/src/category/i18n/sv.ts +76 -76
  15. package/src/category/i18n/zh.ts +76 -76
  16. package/src/category/index.ts +2 -0
  17. package/src/category/seo.astro +1 -1
  18. package/src/components/PreviewNavSidebar.astro +1 -1
  19. package/src/components/PreviewToolbar.astro +1 -1
  20. package/src/data.ts +1 -1
  21. package/src/entries.ts +4 -1
  22. package/src/env.d.ts +1 -1
  23. package/src/index.ts +1 -1
  24. package/src/layouts/PreviewLayout.astro +113 -113
  25. package/src/pages/index.astro +1 -1
  26. package/src/tests/faq_count.test.ts +19 -19
  27. package/src/tests/i18n_coverage.test.ts +4 -2
  28. package/src/tests/locale_spelling.test.ts +44 -0
  29. package/src/tests/mocks/astro_mock.js +1 -1
  30. package/src/tests/no_en_dash.test.ts +70 -70
  31. package/src/tests/no_h1_in_components.test.ts +1 -1
  32. package/src/tests/seo_length.test.ts +22 -22
  33. package/src/tests/seo_translation_completeness.test.ts +69 -0
  34. package/src/tests/spanish_leakage.test.ts +175 -153
  35. package/src/tests/tool_validation.test.ts +17 -17
  36. package/src/tool/burnTest/i18n/es.ts +211 -211
  37. package/src/tool/burnTest/i18n/fr.ts +211 -211
  38. package/src/tool/burnTest/i18n/ja.ts +211 -211
  39. package/src/tool/burnTest/i18n/ko.ts +211 -211
  40. package/src/tool/burnTest/i18n/pl.ts +211 -211
  41. package/src/tool/burnTest/i18n/ru.ts +211 -211
  42. package/src/tool/burnTest/i18n/sv.ts +211 -211
  43. package/src/tool/burnTest/i18n/zh.ts +211 -211
  44. package/src/tool/burnTest/seo.astro +15 -15
  45. package/src/tool/clothingSizeConverter/i18n/de.ts +348 -348
  46. package/src/tool/clothingSizeConverter/i18n/en.ts +348 -348
  47. package/src/tool/clothingSizeConverter/i18n/fr.ts +348 -348
  48. package/src/tool/clothingSizeConverter/i18n/ja.ts +348 -348
  49. package/src/tool/clothingSizeConverter/i18n/ko.ts +348 -348
  50. package/src/tool/clothingSizeConverter/i18n/nl.ts +348 -348
  51. package/src/tool/clothingSizeConverter/i18n/pl.ts +348 -348
  52. package/src/tool/clothingSizeConverter/i18n/ru.ts +348 -348
  53. package/src/tool/clothingSizeConverter/i18n/sv.ts +348 -348
  54. package/src/tool/clothingSizeConverter/i18n/tr.ts +348 -348
  55. package/src/tool/clothingSizeConverter/i18n/zh.ts +348 -348
  56. package/src/tool/clothingSizeConverter/seo.astro +15 -15
  57. package/src/tool/embroideryStitchPricingEstimator/bibliography.astro +6 -0
  58. package/src/tool/embroideryStitchPricingEstimator/bibliography.ts +12 -0
  59. package/src/tool/embroideryStitchPricingEstimator/component.astro +111 -0
  60. package/src/tool/embroideryStitchPricingEstimator/controller.ts +111 -0
  61. package/src/tool/embroideryStitchPricingEstimator/dom-views.ts +94 -0
  62. package/src/tool/embroideryStitchPricingEstimator/embroidery-stitch-count-pricing-estimator.css +438 -0
  63. package/src/tool/embroideryStitchPricingEstimator/entry.ts +29 -0
  64. package/src/tool/embroideryStitchPricingEstimator/evaluator.ts +22 -0
  65. package/src/tool/embroideryStitchPricingEstimator/i18n/de.ts +38 -0
  66. package/src/tool/embroideryStitchPricingEstimator/i18n/en.ts +194 -0
  67. package/src/tool/embroideryStitchPricingEstimator/i18n/es.ts +38 -0
  68. package/src/tool/embroideryStitchPricingEstimator/i18n/fr.ts +38 -0
  69. package/src/tool/embroideryStitchPricingEstimator/i18n/id.ts +38 -0
  70. package/src/tool/embroideryStitchPricingEstimator/i18n/it.ts +38 -0
  71. package/src/tool/embroideryStitchPricingEstimator/i18n/ja.ts +38 -0
  72. package/src/tool/embroideryStitchPricingEstimator/i18n/ko.ts +38 -0
  73. package/src/tool/embroideryStitchPricingEstimator/i18n/nl.ts +38 -0
  74. package/src/tool/embroideryStitchPricingEstimator/i18n/pl.ts +38 -0
  75. package/src/tool/embroideryStitchPricingEstimator/i18n/pt.ts +38 -0
  76. package/src/tool/embroideryStitchPricingEstimator/i18n/ru.ts +38 -0
  77. package/src/tool/embroideryStitchPricingEstimator/i18n/sv.ts +38 -0
  78. package/src/tool/embroideryStitchPricingEstimator/i18n/tr.ts +38 -0
  79. package/src/tool/embroideryStitchPricingEstimator/i18n/zh.ts +38 -0
  80. package/src/tool/embroideryStitchPricingEstimator/index.ts +11 -0
  81. package/src/tool/embroideryStitchPricingEstimator/logic.test.ts +40 -0
  82. package/src/tool/embroideryStitchPricingEstimator/logic.ts +86 -0
  83. package/src/tool/embroideryStitchPricingEstimator/seo.astro +15 -0
  84. package/src/tool/embroideryStitchPricingEstimator/storage.ts +20 -0
  85. package/src/tool/embroideryStitchPricingEstimator/ui.ts +53 -0
  86. package/src/tool/fabricProjectCalculator/i18n/de.ts +236 -236
  87. package/src/tool/fabricProjectCalculator/i18n/ja.ts +236 -236
  88. package/src/tool/fabricProjectCalculator/i18n/ko.ts +236 -236
  89. package/src/tool/fabricProjectCalculator/i18n/nl.ts +236 -236
  90. package/src/tool/fabricProjectCalculator/i18n/pl.ts +236 -236
  91. package/src/tool/fabricProjectCalculator/i18n/ru.ts +236 -236
  92. package/src/tool/fabricProjectCalculator/i18n/sv.ts +236 -236
  93. package/src/tool/fabricProjectCalculator/i18n/tr.ts +236 -236
  94. package/src/tool/fabricProjectCalculator/i18n/zh.ts +236 -236
  95. package/src/tool/fabricProjectCalculator/seo.astro +15 -15
  96. package/src/tool/fabricTruth/i18n/de.ts +268 -268
  97. package/src/tool/fabricTruth/i18n/en.ts +268 -268
  98. package/src/tool/fabricTruth/i18n/es.ts +302 -302
  99. package/src/tool/fabricTruth/i18n/fr.ts +268 -268
  100. package/src/tool/fabricTruth/i18n/id.ts +268 -268
  101. package/src/tool/fabricTruth/i18n/it.ts +268 -268
  102. package/src/tool/fabricTruth/i18n/ja.ts +268 -268
  103. package/src/tool/fabricTruth/i18n/ko.ts +268 -268
  104. package/src/tool/fabricTruth/i18n/nl.ts +268 -268
  105. package/src/tool/fabricTruth/i18n/pl.ts +268 -268
  106. package/src/tool/fabricTruth/i18n/pt.ts +268 -268
  107. package/src/tool/fabricTruth/i18n/ru.ts +268 -268
  108. package/src/tool/fabricTruth/i18n/sv.ts +268 -268
  109. package/src/tool/fabricTruth/i18n/tr.ts +268 -268
  110. package/src/tool/fabricTruth/i18n/zh.ts +272 -272
  111. package/src/tool/fabricTruth/seo.astro +15 -15
  112. package/src/tool/fiberPrep/i18n/de.ts +215 -215
  113. package/src/tool/fiberPrep/i18n/fr.ts +215 -215
  114. package/src/tool/fiberPrep/i18n/ja.ts +215 -215
  115. package/src/tool/fiberPrep/i18n/ko.ts +215 -215
  116. package/src/tool/fiberPrep/i18n/nl.ts +215 -215
  117. package/src/tool/fiberPrep/i18n/pl.ts +215 -215
  118. package/src/tool/fiberPrep/i18n/ru.ts +215 -215
  119. package/src/tool/fiberPrep/i18n/sv.ts +215 -215
  120. package/src/tool/fiberPrep/i18n/tr.ts +215 -215
  121. package/src/tool/fiberPrep/i18n/zh.ts +215 -215
  122. package/src/tool/fiberPrep/seo.astro +15 -15
  123. package/src/tool/knittingGauge/i18n/de.ts +224 -224
  124. package/src/tool/knittingGauge/i18n/ja.ts +224 -224
  125. package/src/tool/knittingGauge/i18n/ko.ts +224 -224
  126. package/src/tool/knittingGauge/i18n/pl.ts +224 -224
  127. package/src/tool/knittingGauge/i18n/ru.ts +224 -224
  128. package/src/tool/knittingGauge/i18n/tr.ts +224 -224
  129. package/src/tool/knittingGauge/i18n/zh.ts +224 -224
  130. package/src/tool/knittingGauge/seo.astro +15 -15
  131. package/src/tool/laundryGuide/i18n/de.ts +271 -271
  132. package/src/tool/laundryGuide/i18n/en.ts +271 -271
  133. package/src/tool/laundryGuide/i18n/es.ts +271 -271
  134. package/src/tool/laundryGuide/i18n/fr.ts +255 -255
  135. package/src/tool/laundryGuide/i18n/id.ts +271 -271
  136. package/src/tool/laundryGuide/i18n/it.ts +271 -271
  137. package/src/tool/laundryGuide/i18n/ja.ts +271 -271
  138. package/src/tool/laundryGuide/i18n/ko.ts +271 -271
  139. package/src/tool/laundryGuide/i18n/nl.ts +271 -271
  140. package/src/tool/laundryGuide/i18n/pl.ts +271 -271
  141. package/src/tool/laundryGuide/i18n/pt.ts +271 -271
  142. package/src/tool/laundryGuide/i18n/ru.ts +271 -271
  143. package/src/tool/laundryGuide/i18n/sv.ts +271 -271
  144. package/src/tool/laundryGuide/i18n/tr.ts +271 -271
  145. package/src/tool/laundryGuide/i18n/zh.ts +271 -271
  146. package/src/tool/laundryGuide/seo.astro +15 -15
  147. package/src/tool/needleConverter/i18n/de.ts +202 -202
  148. package/src/tool/needleConverter/i18n/es.ts +207 -207
  149. package/src/tool/needleConverter/i18n/fr.ts +207 -207
  150. package/src/tool/needleConverter/i18n/ja.ts +202 -202
  151. package/src/tool/needleConverter/i18n/ko.ts +202 -202
  152. package/src/tool/needleConverter/i18n/nl.ts +202 -202
  153. package/src/tool/needleConverter/i18n/pl.ts +202 -202
  154. package/src/tool/needleConverter/i18n/ru.ts +202 -202
  155. package/src/tool/needleConverter/i18n/sv.ts +202 -202
  156. package/src/tool/needleConverter/i18n/tr.ts +202 -202
  157. package/src/tool/needleConverter/i18n/zh.ts +202 -202
  158. package/src/tool/needleConverter/seo.astro +15 -15
  159. package/src/tool/sewingPatternScaler/component.astro +236 -236
  160. package/src/tool/sewingPatternScaler/i18n/fr.ts +170 -170
  161. package/src/tool/sewingPatternScaler/i18n/ja.ts +114 -114
  162. package/src/tool/sewingPatternScaler/i18n/ko.ts +114 -114
  163. package/src/tool/sewingPatternScaler/i18n/nl.ts +114 -114
  164. package/src/tool/sewingPatternScaler/i18n/pl.ts +114 -114
  165. package/src/tool/sewingPatternScaler/i18n/ru.ts +114 -114
  166. package/src/tool/sewingPatternScaler/i18n/sv.ts +114 -114
  167. package/src/tool/sewingPatternScaler/i18n/tr.ts +114 -114
  168. package/src/tool/sewingPatternScaler/i18n/zh.ts +114 -114
  169. package/src/tool/sewingPatternScaler/seo.astro +15 -15
  170. package/src/tool/shoeSizeConverter/i18n/fr.ts +183 -183
  171. package/src/tool/shoeSizeConverter/i18n/ja.ts +179 -179
  172. package/src/tool/shoeSizeConverter/i18n/ko.ts +179 -179
  173. package/src/tool/shoeSizeConverter/i18n/nl.ts +179 -179
  174. package/src/tool/shoeSizeConverter/i18n/pl.ts +179 -179
  175. package/src/tool/shoeSizeConverter/i18n/ru.ts +179 -179
  176. package/src/tool/shoeSizeConverter/i18n/sv.ts +179 -179
  177. package/src/tool/shoeSizeConverter/i18n/tr.ts +179 -179
  178. package/src/tool/shoeSizeConverter/i18n/zh.ts +179 -179
  179. package/src/tool/shoeSizeConverter/seo.astro +15 -15
  180. package/src/tool/stainChemistry/bibliography.ts +16 -16
  181. package/src/tool/stainChemistry/i18n/de.ts +286 -286
  182. package/src/tool/stainChemistry/i18n/en.ts +289 -289
  183. package/src/tool/stainChemistry/i18n/es.ts +286 -286
  184. package/src/tool/stainChemistry/i18n/fr.ts +296 -296
  185. package/src/tool/stainChemistry/i18n/id.ts +286 -286
  186. package/src/tool/stainChemistry/i18n/it.ts +286 -286
  187. package/src/tool/stainChemistry/i18n/ja.ts +286 -286
  188. package/src/tool/stainChemistry/i18n/ko.ts +283 -283
  189. package/src/tool/stainChemistry/i18n/nl.ts +286 -286
  190. package/src/tool/stainChemistry/i18n/pl.ts +286 -286
  191. package/src/tool/stainChemistry/i18n/pt.ts +286 -286
  192. package/src/tool/stainChemistry/i18n/ru.ts +286 -286
  193. package/src/tool/stainChemistry/i18n/sv.ts +286 -286
  194. package/src/tool/stainChemistry/i18n/tr.ts +286 -286
  195. package/src/tool/stainChemistry/i18n/zh.ts +281 -281
  196. package/src/tool/stainChemistry/seo.astro +15 -15
  197. package/src/tool/yarnCalculator/i18n/de.ts +296 -296
  198. package/src/tool/yarnCalculator/i18n/es.ts +296 -296
  199. package/src/tool/yarnCalculator/i18n/fr.ts +296 -296
  200. package/src/tool/yarnCalculator/i18n/ja.ts +296 -296
  201. package/src/tool/yarnCalculator/i18n/ko.ts +296 -296
  202. package/src/tool/yarnCalculator/i18n/nl.ts +296 -296
  203. package/src/tool/yarnCalculator/i18n/pl.ts +296 -296
  204. package/src/tool/yarnCalculator/i18n/ru.ts +296 -296
  205. package/src/tool/yarnCalculator/i18n/sv.ts +296 -296
  206. package/src/tool/yarnCalculator/i18n/tr.ts +296 -296
  207. package/src/tool/yarnCalculator/i18n/zh.ts +295 -295
  208. package/src/tool/yarnCalculator/seo.astro +15 -15
  209. package/src/tools.ts +2 -2
@@ -1,296 +1,296 @@
1
- import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
- import type { ToolLocaleContent } from '../../../types';
3
- import { bibliography } from '../bibliography';
4
- import type { YarnCalculatorUI } from '../ui';
5
-
6
- const slug = 'kalkulyator-pryazhi-vyazanie';
7
- const title = 'Калькулятор пряжи: сколько метров и мотков мне нужно?';
8
- const description =
9
- 'Точно рассчитайте количество шерсти или пряжи, необходимое для ваших проектов по вязанию спицами или крючком, исходя из узора и размера.';
10
-
11
- const faqData = [
12
- {
13
- question: 'Почему при вязании крючком расходуется больше пряжи, чем при вязании спицами?',
14
- answer:
15
- 'Вязание крючком основано на создании узлов и перекрывающихся петель, что создает более плотное и толстое полотно на квадратный сантиметр. В среднем проект крючком потребляет на 25-35% больше пряжи, чем тот же проект, связанный спицами (лицевой гладью).',
16
- },
17
- {
18
- question: 'Что произойдет, если я куплю пряжу из разных партий красителя (Dye Lot)?',
19
- answer:
20
- 'Даже если цвет в магазине кажется идентичным, минимальные химические вариации во время окрашивания могут создать видимые "полосы" на готовом изделии. Настоятельно рекомендуется покупать всю пряжу сразу, проверяя, чтобы номер партии был одинаковым.',
21
- },
22
- {
23
- question: 'Как плотность вязания (gauge) влияет на конечный расход?',
24
- answer:
25
- 'Если вы вяжете слабо, каждая петля потребляет больше метров нити. Если ваш образец плотности больше, чем указано в описании (например, 13 петель вместо 15), расход пряжи существенно увеличится. Предварительное вязание образца плотности крайне важно.',
26
- },
27
- {
28
- question: 'Как рассчитать метры, если у меня есть только вес мотка?',
29
- answer:
30
- 'Без данных о метраже это сложно. На этикетках большинства мотков указаны метры. Если их нет, поищите название пряжи в базах данных, таких как Ravelry, чтобы найти точную длину на каждые 50 или 100 г.',
31
- },
32
- ];
33
-
34
- const howToData = [
35
- {
36
- name: 'Выберите проект',
37
- text: 'Выберите свитер, шарф, шапку, носки или плед, чтобы загрузить специфические нормы расхода.',
38
- },
39
- {
40
- name: 'Определите размер и толщину',
41
- text: 'Укажите конечные размеры (S, M, L, XL) и толщину нити, которую вы будете использовать (Fingering, DK, Worsted, Bulky).',
42
- },
43
- {
44
- name: 'Активируйте множители',
45
- text: 'Если в вашем узоре есть косы, араны или сложные текстуры, включите переключатель текстур, чтобы добавить необходимый запас.',
46
- },
47
- {
48
- name: 'Получите список покупок',
49
- text: 'Введите количество метров в мотке выбранной вами пряжи, чтобы увидеть, сколько единиц нужно положить в корзину.',
50
- },
51
- ];
52
-
53
- const faqSchema: WithContext<FAQPage> = {
54
- '@context': 'https://schema.org',
55
- '@type': 'FAQPage',
56
- mainEntity: faqData.map((item) => ({
57
- '@type': 'Question',
58
- name: item.question,
59
- acceptedAnswer: { '@type': 'Answer', text: item.answer },
60
- })),
61
- };
62
-
63
- const howToSchema: WithContext<HowTo> = {
64
- '@context': 'https://schema.org',
65
- '@type': 'HowTo',
66
- name: title,
67
- description,
68
- step: howToData.map((step) => ({
69
- '@type': 'HowToStep',
70
- name: step.name,
71
- text: step.text,
72
- })),
73
- };
74
-
75
- const appSchema: WithContext<SoftwareApplication> = {
76
- '@context': 'https://schema.org',
77
- '@type': 'SoftwareApplication',
78
- name: title,
79
- description,
80
- applicationCategory: 'UtilityApplication',
81
- operatingSystem: 'All',
82
- offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
83
- inLanguage: 'ru',
84
- };
85
-
86
- export const content: ToolLocaleContent<YarnCalculatorUI> = {
87
- slug,
88
- title,
89
- description,
90
- faq: faqData,
91
- bibliography: bibliography,
92
- howTo: howToData,
93
- schemas: [faqSchema, howToSchema, appSchema],
94
- seo: [
95
- {
96
- type: 'title',
97
- text: 'Руководство по расходу пряжи: как рассчитать метры и мотки для ваших проектов',
98
- level: 2,
99
- },
100
- {
101
- type: 'paragraph',
102
- html: 'Освойте логистику вязания и забудьте о страхе нехватки нитей с нашим высокоточным техническим калькулятором. Главный кошмар любого вязальщика - <strong>"Yarn Chicken"</strong>: тот критический момент в конце проекта, когда кажется, что нить закончится раньше, чем вы закроете последние петли. Этот калькулятор разработан для предоставления оценок на основе отраслевых стандартов метража и веса.',
103
- },
104
- {
105
- type: 'stats',
106
- items: [
107
- { value: '+10%', label: 'Запас на панику', icon: 'mdi:security' },
108
- { value: 'Метрический', label: 'Расчет в метрах', icon: 'mdi:ruler' },
109
- { value: 'Оффлайн', label: 'Локальная БД', icon: 'mdi:wifi-off' },
110
- ],
111
- columns: 3,
112
- },
113
- {
114
- type: 'title',
115
- text: 'Почему вес мотков вводит в заблуждение?',
116
- level: 3,
117
- },
118
- {
119
- type: 'paragraph',
120
- html: 'Многие новички совершают ошибку, покупая пряжу исключительно по весу (например, "6 мотков по 100 г"). Однако вес - это единица массы, а не длины. Две пряжи весом 100 г могут иметь радикально разную длину: пряжа типа <strong>Bulky</strong> может иметь длину всего 80 метров, в то время как <strong>Fingering / Lace</strong> может превышать 450 метров при том же весе.',
121
- },
122
- {
123
- type: 'paragraph',
124
- html: 'Поэтому наш калькулятор всегда ставит в приоритет <strong>общий метраж</strong>. Зная необходимую длину для вашего размера и проекта, вы можете разделить ее на метраж, указанный на этикетке конкретного мотка, чтобы получить точное количество единиц для покупки.',
125
- },
126
- {
127
- type: 'title',
128
- text: 'Таблица стандартного метража по толщине пряжи',
129
- level: 3,
130
- },
131
- {
132
- type: 'paragraph',
133
- html: 'Если у вас нет под рукой этикетки, вы можете использовать эти справочные данные (на каждые 100 г волокна) для своих расчетов:',
134
- },
135
- {
136
- type: 'table',
137
- headers: ['Толщина (Weight)', 'Метров прим. / 100г', 'Рекомендуемое использование', 'Предлагаемые спицы'],
138
- rows: [
139
- ['<strong>Lace / 0</strong>', '600 - 900м', 'Ажурные шали, кружево', '1.5 - 2.5мм'],
140
- ['<strong>Fingering / 1</strong>', '360 - 450м', 'Носки, детская одежда', '2.25 - 3.25мм'],
141
- ['<strong>Sport / 2</strong>', '270 - 320м', 'Легкие жакеты', '3.25 - 3.75мм'],
142
- ['<strong>DK / 3</strong>', '200 - 250м', 'Свитера, шапки', '3.75 - 4.5мм'],
143
- ['<strong>Worsted / 4</strong>', '180 - 220м', 'Пледы, пальто', '4.5 - 5.5мм'],
144
- ['<strong>Bulky / 5</strong>', '100 - 140м', 'Шарфы XXL, пледы', '6.0 - 8.0мм'],
145
- ],
146
- },
147
- {
148
- type: 'tip',
149
- title: 'Фактор плотности (Gauge)',
150
- html: '<p>Помните: если вы вяжете слабо, ваши петли будут крупнее и потребуют больше нити, чем при плотном вязании. Наш калькулятор применяет запас прочности, но если вы знаете, что ваша плотность экстремально низкая, рассмотрите возможность добавления еще 5-10% к результатам, чтобы избежать сюрпризов.</p>',
151
- },
152
- {
153
- type: 'title',
154
- text: 'Переменные, увеличивающие расход нити',
155
- level: 3,
156
- },
157
- {
158
- type: 'paragraph',
159
- html: 'Не все узоры потребляют одинаковое количество волокна. При выборе дизайна учитывайте эти множители:',
160
- },
161
- {
162
- type: 'comparative',
163
- items: [
164
- {
165
- title: 'Лицевая гладь / Джерси',
166
- description: 'Представляет собой базовый расход и максимальную эффективность использования нити.',
167
- icon: 'mdi:minus-circle-outline',
168
- points: ['Идеально для новичков', 'Естественная драпировка полотна'],
169
- },
170
- {
171
- title: 'Косы / Араны',
172
- description: 'Перекрещивание волокон "укорачивает" деталь, увеличивая расход примерно на 25%.',
173
- icon: 'mdi:texture-box',
174
- points: ['Требуется больше метража', 'Более плотное и тяжелое полотно'],
175
- pointIcon: 'mdi:alert-circle-outline',
176
- },
177
- {
178
- title: 'Крючок (Crochet)',
179
- description: 'Узлы при вязании крючком требуют на 30% больше нити, чем спицы.',
180
- icon: 'mdi:hook',
181
- points: ['Ускоренный расход мотков', 'Трехмерная текстура'],
182
- pointIcon: 'mdi:alert-circle-outline',
183
- },
184
- {
185
- title: 'Резинка',
186
- description: 'Чередование лицевых и изнаночных накапливает больше шерсти на кв. см.',
187
- icon: 'mdi:unfold-more-horizontal',
188
- points: ['Средний расход (+15%)', 'Высокая эластичность'],
189
- },
190
- ],
191
- columns: 2,
192
- },
193
- {
194
- type: 'title',
195
- text: 'Глоссарий предусмотрительного вязальщика',
196
- level: 3,
197
- },
198
- {
199
- type: 'glossary',
200
- items: [
201
- {
202
- term: 'Dye Lot (Партия красителя)',
203
- definition:
204
- 'Номер, идентифицирующий чан, в котором красилась пряжа. Разные партии могут иметь различия в цвете, незаметные в мотке, но очень явные в готовом изделии.',
205
- },
206
- {
207
- term: 'Stash (Запасы)',
208
- definition:
209
- 'Личная коллекция пряжи вязальщика. Знание веса остатков без этикеток жизненно важно для расчета небольших проектов.',
210
- },
211
- {
212
- term: 'Put-up',
213
- definition:
214
- 'Форма подачи пряжи (пасма, моток или конус), влияющая на необходимость перемотки перед использованием.',
215
- },
216
- {
217
- term: 'Yarn Chicken',
218
- definition:
219
- 'Попытка закончить участок вязания с количеством нити, которое кажется недостаточным.',
220
- },
221
- ],
222
- },
223
- {
224
- type: 'title',
225
- text: 'Как использовать результаты калькулятора',
226
- level: 3,
227
- },
228
- {
229
- type: 'paragraph',
230
- html: 'Как только инструмент выдаст количество метров и мотков, мы рекомендуем выполнить следующие шаги ручной проверки:',
231
- },
232
- {
233
- type: 'list',
234
- items: [
235
- '<strong>Проверьте метраж вашего реального мотка:</strong> Не каждый 100-граммовый моток имеет длину 200 м. Проверьте это на этикетке для корректировки расчета.',
236
- '<strong>Добавьте метраж на детали:</strong> Если вы планируете добавить бахрому к шарфу или помпоны к шапке, добавьте 50-80 метров к итогу.',
237
- '<strong>Образец плотности:</strong> Свяжите квадрат 10x10 см. Взвесьте его на точных весах. Если он весит 20 г, а ваш плед 100x100 (100 квадратов), вам понадобится ровно 2 кг пряжи.',
238
- '<strong>Всегда покупайте пряжу из одной партии:</strong> Если расчет показывает 7 мотков, купите 8 на случай, если придется использовать разные партии, или для швов.',
239
- ],
240
- },
241
- {
242
- type: 'summary',
243
- title: 'Стратегические советы по покупке пряжи',
244
- items: [
245
- 'Приоритет отдавайте метрам, а не граммам, чтобы гарантировать нужную длину.',
246
- 'Вязание крючком потребляет значительно больше пряжи; настройте селектор типа.',
247
- 'Плотные текстуры (косы) требуют увеличения бюджета пряжи на 25%.',
248
- 'Всегда сохраняйте одну этикетку от каждой партии на случай необходимости докупки цвета.',
249
- 'Используйте 10%-ный запас на вязание обязательного образца плотности.',
250
- ],
251
- },
252
- ],
253
- ui: {
254
- sectionProject: '1. ТИП ПРОЕКТА',
255
- sectionSize: '2. ГАБАРИТЫ / РАЗМЕР',
256
- sectionWeight: '3. ТОЛЩИНА ПРЯЖИ',
257
- sectionPattern: '4. ХАРАКТЕРИСТИКИ УЗОРА',
258
- sectionBall: '5. ДАННЫЕ МОТКА',
259
- labelCables: 'Косы или плотные текстуры?',
260
- labelGrams: 'ГРАММ / МОТОК',
261
- labelMeters: 'МЕТРОВ / МОТОК',
262
- weightFine: 'Тонкая',
263
- weightMedium: 'Средняя',
264
- weightThick: 'Толстая',
265
- weightXXL: 'XXL',
266
- projectSweater: 'СВИТЕР',
267
- projectScarf: 'ШАРФ',
268
- projectHat: 'ШАПКА',
269
- projectSocks: 'НОСКИ',
270
- projectBlanket: 'ПЛЕД',
271
- projectCardigan: 'КАРДИГАН',
272
- statPrefix: 'ОБЩИЙ РАСЧЕТНЫЙ РАСХОД',
273
- statSuffix: 'M',
274
- statNote: 'Итоговый метраж рассчитан с 10%-ным запасом прочности.',
275
- ballsFormatSingular: 'Купите {n} моток',
276
- ballsFormatPlural: 'Купите {n} мотков',
277
- ballsDetailFormat: 'Мотки по {w}г / {m}м каждый.',
278
- alertTitle: 'Стратегическая безопасность:',
279
- alertText:
280
- 'Этот расчет гарантирует, что нить не закончится. Помните о проверке номера партии (dye lot) при покупке пряжи.',
281
- schemeSleeveLabel: 'Рукава',
282
- schemeSleeveEach: 'кажд.',
283
- schemeBodyLabel: 'Туловище',
284
- schemeTotalHat: 'Итого шапка',
285
- schemeTotalFlat: 'Итого деталь',
286
- schemeTotalSocks: 'Итого пара',
287
- sizeLabels: {
288
- sweater: ['S', 'M', 'L', 'XL'],
289
- cardigan: ['S', 'M', 'L', 'XL'],
290
- hat: ['Дет.', 'S', 'M', 'L'],
291
- scarf: ['Мини', 'M', 'Бол.', 'Макси'],
292
- socks: ['Дет.', 'Взр. S', 'Взр. M', 'Взр. L'],
293
- blanket: ['Дет.', 'Диван', 'Кровать 90', 'Кровать 150'],
294
- },
295
- },
296
- };
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import { bibliography } from '../bibliography';
4
+ import type { YarnCalculatorUI } from '../ui';
5
+
6
+ const slug = 'kalkulyator-pryazhi-vyazanie';
7
+ const title = 'Калькулятор пряжи: сколько метров и мотков мне нужно?';
8
+ const description =
9
+ 'Точно рассчитайте количество шерсти или пряжи, необходимое для ваших проектов по вязанию спицами или крючком, исходя из узора и размера.';
10
+
11
+ const faqData = [
12
+ {
13
+ question: 'Почему при вязании крючком расходуется больше пряжи, чем при вязании спицами?',
14
+ answer:
15
+ 'Вязание крючком основано на создании узлов и перекрывающихся петель, что создает более плотное и толстое полотно на квадратный сантиметр. В среднем проект крючком потребляет на 25-35% больше пряжи, чем тот же проект, связанный спицами (лицевой гладью).',
16
+ },
17
+ {
18
+ question: 'Что произойдет, если я куплю пряжу из разных партий красителя (Dye Lot)?',
19
+ answer:
20
+ 'Даже если цвет в магазине кажется идентичным, минимальные химические вариации во время окрашивания могут создать видимые "полосы" на готовом изделии. Настоятельно рекомендуется покупать всю пряжу сразу, проверяя, чтобы номер партии был одинаковым.',
21
+ },
22
+ {
23
+ question: 'Как плотность вязания (gauge) влияет на конечный расход?',
24
+ answer:
25
+ 'Если вы вяжете слабо, каждая петля потребляет больше метров нити. Если ваш образец плотности больше, чем указано в описании (например, 13 петель вместо 15), расход пряжи существенно увеличится. Предварительное вязание образца плотности крайне важно.',
26
+ },
27
+ {
28
+ question: 'Как рассчитать метры, если у меня есть только вес мотка?',
29
+ answer:
30
+ 'Без данных о метраже это сложно. На этикетках большинства мотков указаны метры. Если их нет, поищите название пряжи в базах данных, таких как Ravelry, чтобы найти точную длину на каждые 50 или 100 г.',
31
+ },
32
+ ];
33
+
34
+ const howToData = [
35
+ {
36
+ name: 'Выберите проект',
37
+ text: 'Выберите свитер, шарф, шапку, носки или плед, чтобы загрузить специфические нормы расхода.',
38
+ },
39
+ {
40
+ name: 'Определите размер и толщину',
41
+ text: 'Укажите конечные размеры (S, M, L, XL) и толщину нити, которую вы будете использовать (Fingering, DK, Worsted, Bulky).',
42
+ },
43
+ {
44
+ name: 'Активируйте множители',
45
+ text: 'Если в вашем узоре есть косы, араны или сложные текстуры, включите переключатель текстур, чтобы добавить необходимый запас.',
46
+ },
47
+ {
48
+ name: 'Получите список покупок',
49
+ text: 'Введите количество метров в мотке выбранной вами пряжи, чтобы увидеть, сколько единиц нужно положить в корзину.',
50
+ },
51
+ ];
52
+
53
+ const faqSchema: WithContext<FAQPage> = {
54
+ '@context': 'https://schema.org',
55
+ '@type': 'FAQPage',
56
+ mainEntity: faqData.map((item) => ({
57
+ '@type': 'Question',
58
+ name: item.question,
59
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
60
+ })),
61
+ };
62
+
63
+ const howToSchema: WithContext<HowTo> = {
64
+ '@context': 'https://schema.org',
65
+ '@type': 'HowTo',
66
+ name: title,
67
+ description,
68
+ step: howToData.map((step) => ({
69
+ '@type': 'HowToStep',
70
+ name: step.name,
71
+ text: step.text,
72
+ })),
73
+ };
74
+
75
+ const appSchema: WithContext<SoftwareApplication> = {
76
+ '@context': 'https://schema.org',
77
+ '@type': 'SoftwareApplication',
78
+ name: title,
79
+ description,
80
+ applicationCategory: 'UtilityApplication',
81
+ operatingSystem: 'All',
82
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
83
+ inLanguage: 'ru',
84
+ };
85
+
86
+ export const content: ToolLocaleContent<YarnCalculatorUI> = {
87
+ slug,
88
+ title,
89
+ description,
90
+ faq: faqData,
91
+ bibliography: bibliography,
92
+ howTo: howToData,
93
+ schemas: [faqSchema, howToSchema, appSchema],
94
+ seo: [
95
+ {
96
+ type: 'title',
97
+ text: 'Руководство по расходу пряжи: как рассчитать метры и мотки для ваших проектов',
98
+ level: 2,
99
+ },
100
+ {
101
+ type: 'paragraph',
102
+ html: 'Освойте логистику вязания и забудьте о страхе нехватки нитей с нашим высокоточным техническим калькулятором. Главный кошмар любого вязальщика - <strong>"Yarn Chicken"</strong>: тот критический момент в конце проекта, когда кажется, что нить закончится раньше, чем вы закроете последние петли. Этот калькулятор разработан для предоставления оценок на основе отраслевых стандартов метража и веса.',
103
+ },
104
+ {
105
+ type: 'stats',
106
+ items: [
107
+ { value: '+10%', label: 'Запас на панику', icon: 'mdi:security' },
108
+ { value: 'Метрический', label: 'Расчет в метрах', icon: 'mdi:ruler' },
109
+ { value: 'Оффлайн', label: 'Локальная БД', icon: 'mdi:wifi-off' },
110
+ ],
111
+ columns: 3,
112
+ },
113
+ {
114
+ type: 'title',
115
+ text: 'Почему вес мотков вводит в заблуждение?',
116
+ level: 3,
117
+ },
118
+ {
119
+ type: 'paragraph',
120
+ html: 'Многие новички совершают ошибку, покупая пряжу исключительно по весу (например, "6 мотков по 100 г"). Однако вес - это единица массы, а не длины. Две пряжи весом 100 г могут иметь радикально разную длину: пряжа типа <strong>Bulky</strong> может иметь длину всего 80 метров, в то время как <strong>Fingering / Lace</strong> может превышать 450 метров при том же весе.',
121
+ },
122
+ {
123
+ type: 'paragraph',
124
+ html: 'Поэтому наш калькулятор всегда ставит в приоритет <strong>общий метраж</strong>. Зная необходимую длину для вашего размера и проекта, вы можете разделить ее на метраж, указанный на этикетке конкретного мотка, чтобы получить точное количество единиц для покупки.',
125
+ },
126
+ {
127
+ type: 'title',
128
+ text: 'Таблица стандартного метража по толщине пряжи',
129
+ level: 3,
130
+ },
131
+ {
132
+ type: 'paragraph',
133
+ html: 'Если у вас нет под рукой этикетки, вы можете использовать эти справочные данные (на каждые 100 г волокна) для своих расчетов:',
134
+ },
135
+ {
136
+ type: 'table',
137
+ headers: ['Толщина (Weight)', 'Метров прим. / 100г', 'Рекомендуемое использование', 'Предлагаемые спицы'],
138
+ rows: [
139
+ ['<strong>Lace / 0</strong>', '600 - 900м', 'Ажурные шали, кружево', '1.5 - 2.5мм'],
140
+ ['<strong>Fingering / 1</strong>', '360 - 450м', 'Носки, детская одежда', '2.25 - 3.25мм'],
141
+ ['<strong>Sport / 2</strong>', '270 - 320м', 'Легкие жакеты', '3.25 - 3.75мм'],
142
+ ['<strong>DK / 3</strong>', '200 - 250м', 'Свитера, шапки', '3.75 - 4.5мм'],
143
+ ['<strong>Worsted / 4</strong>', '180 - 220м', 'Пледы, пальто', '4.5 - 5.5мм'],
144
+ ['<strong>Bulky / 5</strong>', '100 - 140м', 'Шарфы XXL, пледы', '6.0 - 8.0мм'],
145
+ ],
146
+ },
147
+ {
148
+ type: 'tip',
149
+ title: 'Фактор плотности (Gauge)',
150
+ html: '<p>Помните: если вы вяжете слабо, ваши петли будут крупнее и потребуют больше нити, чем при плотном вязании. Наш калькулятор применяет запас прочности, но если вы знаете, что ваша плотность экстремально низкая, рассмотрите возможность добавления еще 5-10% к результатам, чтобы избежать сюрпризов.</p>',
151
+ },
152
+ {
153
+ type: 'title',
154
+ text: 'Переменные, увеличивающие расход нити',
155
+ level: 3,
156
+ },
157
+ {
158
+ type: 'paragraph',
159
+ html: 'Не все узоры потребляют одинаковое количество волокна. При выборе дизайна учитывайте эти множители:',
160
+ },
161
+ {
162
+ type: 'comparative',
163
+ items: [
164
+ {
165
+ title: 'Лицевая гладь / Джерси',
166
+ description: 'Представляет собой базовый расход и максимальную эффективность использования нити.',
167
+ icon: 'mdi:minus-circle-outline',
168
+ points: ['Идеально для новичков', 'Естественная драпировка полотна'],
169
+ },
170
+ {
171
+ title: 'Косы / Араны',
172
+ description: 'Перекрещивание волокон "укорачивает" деталь, увеличивая расход примерно на 25%.',
173
+ icon: 'mdi:texture-box',
174
+ points: ['Требуется больше метража', 'Более плотное и тяжелое полотно'],
175
+ pointIcon: 'mdi:alert-circle-outline',
176
+ },
177
+ {
178
+ title: 'Крючок (Crochet)',
179
+ description: 'Узлы при вязании крючком требуют на 30% больше нити, чем спицы.',
180
+ icon: 'mdi:hook',
181
+ points: ['Ускоренный расход мотков', 'Трехмерная текстура'],
182
+ pointIcon: 'mdi:alert-circle-outline',
183
+ },
184
+ {
185
+ title: 'Резинка',
186
+ description: 'Чередование лицевых и изнаночных накапливает больше шерсти на кв. см.',
187
+ icon: 'mdi:unfold-more-horizontal',
188
+ points: ['Средний расход (+15%)', 'Высокая эластичность'],
189
+ },
190
+ ],
191
+ columns: 2,
192
+ },
193
+ {
194
+ type: 'title',
195
+ text: 'Глоссарий предусмотрительного вязальщика',
196
+ level: 3,
197
+ },
198
+ {
199
+ type: 'glossary',
200
+ items: [
201
+ {
202
+ term: 'Dye Lot (Партия красителя)',
203
+ definition:
204
+ 'Номер, идентифицирующий чан, в котором красилась пряжа. Разные партии могут иметь различия в цвете, незаметные в мотке, но очень явные в готовом изделии.',
205
+ },
206
+ {
207
+ term: 'Stash (Запасы)',
208
+ definition:
209
+ 'Личная коллекция пряжи вязальщика. Знание веса остатков без этикеток жизненно важно для расчета небольших проектов.',
210
+ },
211
+ {
212
+ term: 'Put-up',
213
+ definition:
214
+ 'Форма подачи пряжи (пасма, моток или конус), влияющая на необходимость перемотки перед использованием.',
215
+ },
216
+ {
217
+ term: 'Yarn Chicken',
218
+ definition:
219
+ 'Попытка закончить участок вязания с количеством нити, которое кажется недостаточным.',
220
+ },
221
+ ],
222
+ },
223
+ {
224
+ type: 'title',
225
+ text: 'Как использовать результаты калькулятора',
226
+ level: 3,
227
+ },
228
+ {
229
+ type: 'paragraph',
230
+ html: 'Как только инструмент выдаст количество метров и мотков, мы рекомендуем выполнить следующие шаги ручной проверки:',
231
+ },
232
+ {
233
+ type: 'list',
234
+ items: [
235
+ '<strong>Проверьте метраж вашего реального мотка:</strong> Не каждый 100-граммовый моток имеет длину 200 м. Проверьте это на этикетке для корректировки расчета.',
236
+ '<strong>Добавьте метраж на детали:</strong> Если вы планируете добавить бахрому к шарфу или помпоны к шапке, добавьте 50-80 метров к итогу.',
237
+ '<strong>Образец плотности:</strong> Свяжите квадрат 10x10 см. Взвесьте его на точных весах. Если он весит 20 г, а ваш плед 100x100 (100 квадратов), вам понадобится ровно 2 кг пряжи.',
238
+ '<strong>Всегда покупайте пряжу из одной партии:</strong> Если расчет показывает 7 мотков, купите 8 на случай, если придется использовать разные партии, или для швов.',
239
+ ],
240
+ },
241
+ {
242
+ type: 'summary',
243
+ title: 'Стратегические советы по покупке пряжи',
244
+ items: [
245
+ 'Приоритет отдавайте метрам, а не граммам, чтобы гарантировать нужную длину.',
246
+ 'Вязание крючком потребляет значительно больше пряжи; настройте селектор типа.',
247
+ 'Плотные текстуры (косы) требуют увеличения бюджета пряжи на 25%.',
248
+ 'Всегда сохраняйте одну этикетку от каждой партии на случай необходимости докупки цвета.',
249
+ 'Используйте 10%-ный запас на вязание обязательного образца плотности.',
250
+ ],
251
+ },
252
+ ],
253
+ ui: {
254
+ sectionProject: '1. ТИП ПРОЕКТА',
255
+ sectionSize: '2. ГАБАРИТЫ / РАЗМЕР',
256
+ sectionWeight: '3. ТОЛЩИНА ПРЯЖИ',
257
+ sectionPattern: '4. ХАРАКТЕРИСТИКИ УЗОРА',
258
+ sectionBall: '5. ДАННЫЕ МОТКА',
259
+ labelCables: 'Косы или плотные текстуры?',
260
+ labelGrams: 'ГРАММ / МОТОК',
261
+ labelMeters: 'МЕТРОВ / МОТОК',
262
+ weightFine: 'Тонкая',
263
+ weightMedium: 'Средняя',
264
+ weightThick: 'Толстая',
265
+ weightXXL: 'XXL',
266
+ projectSweater: 'СВИТЕР',
267
+ projectScarf: 'ШАРФ',
268
+ projectHat: 'ШАПКА',
269
+ projectSocks: 'НОСКИ',
270
+ projectBlanket: 'ПЛЕД',
271
+ projectCardigan: 'КАРДИГАН',
272
+ statPrefix: 'ОБЩИЙ РАСЧЕТНЫЙ РАСХОД',
273
+ statSuffix: 'M',
274
+ statNote: 'Итоговый метраж рассчитан с 10%-ным запасом прочности.',
275
+ ballsFormatSingular: 'Купите {n} моток',
276
+ ballsFormatPlural: 'Купите {n} мотков',
277
+ ballsDetailFormat: 'Мотки по {w}г / {m}м каждый.',
278
+ alertTitle: 'Стратегическая безопасность:',
279
+ alertText:
280
+ 'Этот расчет гарантирует, что нить не закончится. Помните о проверке номера партии (dye lot) при покупке пряжи.',
281
+ schemeSleeveLabel: 'Рукава',
282
+ schemeSleeveEach: 'кажд.',
283
+ schemeBodyLabel: 'Туловище',
284
+ schemeTotalHat: 'Итого шапка',
285
+ schemeTotalFlat: 'Итого деталь',
286
+ schemeTotalSocks: 'Итого пара',
287
+ sizeLabels: {
288
+ sweater: ['S', 'M', 'L', 'XL'],
289
+ cardigan: ['S', 'M', 'L', 'XL'],
290
+ hat: ['Дет.', 'S', 'M', 'L'],
291
+ scarf: ['Мини', 'M', 'Бол.', 'Макси'],
292
+ socks: ['Дет.', 'Взр. S', 'Взр. M', 'Взр. L'],
293
+ blanket: ['Дет.', 'Диван', 'Кровать 90', 'Кровать 150'],
294
+ },
295
+ },
296
+ };