@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,225 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { FiberPrepUI } from '../ui';
4
+
5
+ const slug = 'fiberberedning-fargning';
6
+ const title = 'Beredning av fibrer för färgning';
7
+ const description =
8
+ 'WOF-kalkylator, betningsprotokoll och temperaturramper för att förbereda ull, silke och bomull före naturlig färgning.';
9
+
10
+ const faqData = [
11
+ {
12
+ question: 'Vad är WOF (Weight of Fiber)?',
13
+ answer:
14
+ 'WOF är standardsystemet för att beräkna mängden pigment eller betningsmedel som behövs. Det baseras på fiberns torrvikt. Till exempel innebär 100 % WOF lökskal för 100 g ull att du behöver 100 g lökskal.',
15
+ },
16
+ {
17
+ question: 'Varför är betning nödvändig?',
18
+ answer:
19
+ 'Betningsmedlet (som alun) fungerar som en kemisk bro mellan textilfibern och det naturliga pigmentet. Utan det skulle de flesta färgämnen inte fixeras och försvinna vid första tvätten (dålig ljus- och gni-äkthet).',
20
+ },
21
+ {
22
+ question: 'Vad är skillnaden mellan att bereda animaliska och vegetabiliska fibrer?',
23
+ answer:
24
+ 'Animaliska fibrer (proteinfibrer som ull) tar upp alun enbart på ett mycket bra sätt. Vegetabiliska fibrer (cellulosafibrer som bomull eller linne) kräver ett föregående steg med tanniner för att "lura" fibern att ta upp det metalliska betningsmedlet.',
25
+ },
26
+ {
27
+ question: 'Vad är temperaturramp vid färgning?',
28
+ answer:
29
+ 'Det är den gradvisa ökningen av temperaturen (ca 1-2 °C per minut) i färgbadet. Det är avgörande för att undvika termisk chock, särskilt för ull som kan filta sig om temperaturförändringarna är för tvära.',
30
+ },
31
+ ];
32
+
33
+ const howToData = [
34
+ {
35
+ name: 'Rengöring och avkockning',
36
+ text: 'Tvätta fibern med neutralt tvättmedel för att avlägsna oljor, vaxer eller industriell stärkelse som hindrar betningsmedlet från att tränga in jämnt.',
37
+ },
38
+ {
39
+ name: 'Väga den torra fibern',
40
+ text: 'Ta fram den exakta vikten på det torra materialet. Detta värde är basen för alla WOF-beräkningar (Weight of Fiber).',
41
+ },
42
+ {
43
+ name: 'Beräkning och betningsbad',
44
+ text: 'Lös upp betningsmedlet (t.ex. kaliumalun med 15 % WOF) i varmt vatten och sänk ner fibern, håll temperaturen konstant enligt protokollet.',
45
+ },
46
+ {
47
+ name: 'Mognad och sköljning',
48
+ text: 'Låt den betade fibern vila (helst 24 timmar) så att metallen fixeras djupt innan du går vidare till det slutgiltiga färgbadet.',
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: 'sv',
83
+ };
84
+
85
+ export const content: ToolLocaleContent<FiberPrepUI> = {
86
+ slug,
87
+ title,
88
+ description,
89
+ faqTitle: 'Vanliga frågor',
90
+ faq: faqData,
91
+ bibliographyTitle: 'Bibliografi',
92
+ bibliography: [
93
+ {
94
+ name: 'La Escuela Artesana - Taller de Tintes Naturales sobre Lana',
95
+ url: 'https://laescuelaartesana.com/taller-de-tintes-naturales-sobre-lana/',
96
+ },
97
+ {
98
+ name: 'Tatiana Sarasa (@tatianasarasa) - Textilkonstnär och naturliga färgämnen',
99
+ url: 'https://www.instagram.com/tatianasarasa/',
100
+ },
101
+ ],
102
+ howTo: howToData,
103
+ schemas: [faqSchema, howToSchema, appSchema],
104
+ seo: [
105
+ {
106
+ type: 'title',
107
+ text: 'Vetenskapen bakom betning',
108
+ level: 2,
109
+ },
110
+ {
111
+ type: 'paragraph',
112
+ html: 'Att förbereda en fiber för färgning handlar om mer än att bara tvätta den. Det är en kemiteknisk process på molekylär nivå som kallas betning. Ordet kommer från latinets <i>mordere</i> (bita), och dess funktion är att fungera som en kemisk bro mellan fibern och pigmentet. Utan denna bro skulle de flesta naturliga färgämnen helt enkelt sköljas bort vid första sköljningen.',
113
+ },
114
+ {
115
+ type: 'card',
116
+ title: 'Nyckelkoncept',
117
+ icon: 'mdi:molecule',
118
+ html: 'Betningsmedlet har lediga valenser som samtidigt hakar fast i fiberns polymerer och i färgämnet.',
119
+ },
120
+ {
121
+ type: 'title',
122
+ text: 'Differentiering av fibrer',
123
+ level: 2,
124
+ },
125
+ {
126
+ type: 'card',
127
+ title: 'Proteinfibrer: Ull och silke',
128
+ icon: 'mdi:sheep',
129
+ html: 'Dessa fibrer består av aminosyrakedjor med mycket hög naturlig affinitet för metaller. Värmen öppnar fiberns fjäll så att alunsalterna kan tränga in djupt. Användning av <strong>vinsten</strong> är avgörande för att bibehålla det sura pH-värdet som bevarar deras mjukhet.',
130
+ },
131
+ {
132
+ type: 'card',
133
+ title: 'Cellulosafibrer: Bomull och linne',
134
+ icon: 'mdi:leaf',
135
+ html: 'Cellulosa har inga lättillgängliga bindningsställen. Därför använder vi <strong>tvåstegsprotokollet</strong>: först tanniner som fäster vid cellulosan, sedan alun som fäster vid dessa tanniner. Utan denna förbehandling kommer färgen att bli blek och föga färgbeständig.',
136
+ },
137
+ {
138
+ type: 'title',
139
+ text: 'Kontroll av badet: WOF, temperatur och pH',
140
+ level: 2,
141
+ },
142
+ {
143
+ type: 'paragraph',
144
+ html: 'För att få professionella och repeterbara resultat är konceptet <strong>WOF (Weight of Fabric)</strong> lag. Allt mäts som en procentandel av fiberns torrvikt. Ett överskott av betningsmedel kan mätta fibern och lämna den sträv eller med metallavlagringar som förändrar den slutliga färgen.',
145
+ },
146
+ {
147
+ type: 'tip',
148
+ title: 'Temperaturramp',
149
+ html: 'Värme fungerar som en katalysator och påskyndar den kemiska reaktionen. Men en plötslig temperaturförändring för ull kan göra att fjällen hakar i varandra permanent, vilket resulterar i ett filtad och krympt tyg.',
150
+ },
151
+ {
152
+ type: 'tip',
153
+ title: 'pH faktorn',
154
+ html: 'Många naturliga färgämnen är levande pH-indikatorer. pH påverkar salternas löslighet och fiberns bevarande. Silke kan förlora sin glans om badet är för alkaliskt. Att justera pH med citronsyra eller kalciumkarbonat är grundläggande.',
155
+ },
156
+ {
157
+ type: 'title',
158
+ text: 'Ämnen och säkerhet',
159
+ level: 2,
160
+ },
161
+ {
162
+ type: 'card',
163
+ title: 'Kaliumalun',
164
+ icon: 'mdi:bottle-tonic-skull',
165
+ html: 'Universellt betningsmedel, färglöst och högeffektivt. Referensen för proteinfibrer.',
166
+ },
167
+ {
168
+ type: 'card',
169
+ title: 'Vinsten (Cremor Tartari)',
170
+ icon: 'mdi:spoon-sugar',
171
+ html: 'Assistent som förbättrar fixering och mjukhet i animaliska fibrer. Behåller det sura pH-värdet.',
172
+ },
173
+ {
174
+ type: 'tip',
175
+ title: 'Säkerhetsprotokoll',
176
+ html: 'Använd kastruller som uteslutande används för färgning, aldrig för mat.<br>Använd handskar och mask när du hanterar betningsmedel i pulverform.<br>Säkerställ konstant ventilation för att undvika ansamling av ångor.',
177
+ },
178
+ ],
179
+ ui: {
180
+ profileTitle: 'Val av profil',
181
+ profileDesc: 'Det kemiska protokollet delas in efter fiberns molekylära ursprung',
182
+ proteinTitle: 'Proteinfibrer',
183
+ proteinOrigin: 'Animaliskt ursprung',
184
+ proteinDesc: 'Ull, silke, alpaka, mohair eller kashmir. Kräver kontrollerade temperaturer och surt pH.',
185
+ cellulosicTitle: 'Cellulosafibrer',
186
+ cellulosicOrigin: 'Vegetabiliskt ursprung',
187
+ cellulosicDesc: 'Bomull, linne, hampa eller jute. Kräver förbetning med tanniner för att fixera pigmentet.',
188
+ wofTitle: 'WOF-kalkylator',
189
+ weightLabel: 'Vikt på det torra plagget (g)',
190
+ weightUnit: 'g',
191
+ wofEmptyMsg: 'Välj en profil för att aktivera beräkningar',
192
+ alumLabel: 'Alun',
193
+ cremLabel: 'Vinsten',
194
+ ironLabel: 'Järn (Varning)',
195
+ rampTitle: 'Temperaturramp',
196
+ rampEmptyTitle: 'Väntar på val',
197
+ rampEmptyDesc: 'Välj en fiber för att se temperaturcykeln',
198
+ phTitle: 'pH-stabilisator',
199
+ phDesc: 'Kritisk faktor för färgmättnad',
200
+ phVolumeLabel: 'Badets volym (L)',
201
+ phSliderLabel: 'Nuvarande pH',
202
+ phAcidLabel: 'Surt (1)',
203
+ phAlkalineLabel: 'Allkaliskt (14)',
204
+ phEmptyMsg: 'Välj en profil för att aktivera stabilisatorn',
205
+ phStrings: {
206
+ optimal: 'Optimalt pH',
207
+ raisePrefix: 'Tillsätt kalciumkarbonat eller soda ash. Ca.',
208
+ raiseSuffix: 'g för att höja till',
209
+ lowerPrefix: 'Tillsätt citronsyra eller ättika. Ca.',
210
+ lowerSuffix: 'ml för att sänka till',
211
+ },
212
+ proteinFibers: [
213
+ { id: 'wool', name: 'Ull / Merino', icon: 'mdi:sheep' },
214
+ { id: 'silk', name: 'Silke', icon: 'mdi:ticket-percent' },
215
+ { id: 'cashmere', name: 'Kashmir', icon: 'mdi:crown' },
216
+ { id: 'mohair', name: 'Mohair', icon: 'mdi:shimmer' },
217
+ { id: 'angora', name: 'Angora', icon: 'mdi:rabbit' },
218
+ { id: 'alpaca', name: 'Alpaka', icon: 'mdi:image-filter-hdr' },
219
+ ],
220
+ cellulosicFibers: [
221
+ { id: 'cotton', name: 'Bomull', icon: 'mdi:tshirt-crew' },
222
+ { id: 'linen', name: 'Linne', icon: 'mdi:leaf' },
223
+ ],
224
+ },
225
+ };
@@ -0,0 +1,225 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { FiberPrepUI } from '../ui';
4
+
5
+ const slug = 'elyaflarin-boyamaya-hazirlanmasi';
6
+ const title = 'Elyafların Boyamaya Hazırlanması';
7
+ const description =
8
+ 'Doğal boyama öncesinde yün, ipek ve pamuğu hazırlamak için WOF hesaplayıcı, mordanlama protokolleri ve termal rampalar.';
9
+
10
+ const faqData = [
11
+ {
12
+ question: 'WOF (Weight of Fiber) nedir?',
13
+ answer:
14
+ 'WOF, gerekli pigment veya mordan miktarını hesaplamak için kullanılan standart sistemdir. Elyafın kuru ağırlığına dayanır. Örneğin, 100g yün için soğan kabuğunda %100 WOF, 100g soğan kabuğuna ihtiyacınız olduğu anlamına gelir.',
15
+ },
16
+ {
17
+ question: 'Mordanlama neden gereklidir?',
18
+ answer:
19
+ 'Mordan (şap gibi), tekstil elyafı ile doğal pigment arasında kimyasal bir köprü görevi görür. Bu köprü olmadan, çoğu boya sabitlenmez ve ilk yıkamada akar (düşük ışık ve sürtünme haslığı).',
20
+ },
21
+ {
22
+ question: 'Hayvansal ve bitkisel elyafları hazırlamak arasındaki fark nedir?',
23
+ answer:
24
+ 'Hayvansal elyaflar (yün gibi protein lifleri) tek başına şapı çok iyi kabul eder. Bitkisel elyaflar (pamuk veya keten gibi selülozik lifler), elyafı metalik mordanı kabul etmesi için "kandırmak" amacıyla önceden bir tanen adımı gerektirir.',
25
+ },
26
+ {
27
+ question: 'Boyamadaki termal rampa nedir?',
28
+ answer:
29
+ 'Boyama banyosunun sıcaklığının kademeli olarak (dakikada yaklaşık 1-2°C) artırılmasıdır. Özellikle yün için hayati önem taşır; sıcaklık değişimleri ani olursa yün keçeleşebilir veya "çekebilir".',
30
+ },
31
+ ];
32
+
33
+ const howToData = [
34
+ {
35
+ name: 'Temizleme ve Pişirme (Degumming)',
36
+ text: 'Mordanın homojen bir şekilde nüfuz etmesini engelleyen yağları, mumları veya endüstriyel kolaları gidermek için elyafı nötr deterjanla yıkayın.',
37
+ },
38
+ {
39
+ name: 'Kuru Elyafı Tartma',
40
+ text: 'Kuru malzemenin tam ağırlığını ölçün. Bu değer, tüm WOF (Weight of Fiber) hesaplamalarının temelidir.',
41
+ },
42
+ {
43
+ name: 'Hesaplama ve Mordan Banyosu',
44
+ text: 'Mordanı (örneğin %15 WOF potasyum şapı) sıcak suda eritin ve elyafı daldırın, sıcaklığı protokole göre sabit tutun.',
45
+ },
46
+ {
47
+ name: 'Olgunlaştırma ve Durulama',
48
+ text: 'Metalin derinlemesine sabitlenmesi için mordanlanmış elyafı (tercihen 24 saat) dinlendirin ve ardından asıl boyama banyosuna geçin.',
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: 'tr',
83
+ };
84
+
85
+ export const content: ToolLocaleContent<FiberPrepUI> = {
86
+ slug,
87
+ title,
88
+ description,
89
+ faqTitle: 'Sıkça Sorulan Sorular',
90
+ faq: faqData,
91
+ bibliographyTitle: 'Kaynakça',
92
+ bibliography: [
93
+ {
94
+ name: 'La Escuela Artesana - Taller de Tintes Naturales sobre Lana',
95
+ url: 'https://laescuelaartesana.com/taller-de-tintes-naturales-sobre-lana/',
96
+ },
97
+ {
98
+ name: 'Tatiana Sarasa (@tatianasarasa) - Tekstil Sanatçısı ve Doğal Boyalar',
99
+ url: 'https://www.instagram.com/tatianasarasa/',
100
+ },
101
+ ],
102
+ howTo: howToData,
103
+ schemas: [faqSchema, howToSchema, appSchema],
104
+ seo: [
105
+ {
106
+ type: 'title',
107
+ text: 'Mordanlamanın Arkasındaki Bilim',
108
+ level: 2,
109
+ },
110
+ {
111
+ type: 'paragraph',
112
+ html: 'Bir elyafı boyamaya hazırlamak sadece onu yıkamak değildir. Bu, "mordanlama" adı verilen moleküler düzeyde bir kimya mühendisliği sürecidir. Kelime Latince <i>mordere</i> (ısırmak) kökünden gelir ve işlevi elyaf ile pigment arasında kimyasal bir köprü görevi görmektir. Bu köprü olmadan, çoğu doğal boya ilk durulamada akar gider.',
113
+ },
114
+ {
115
+ type: 'card',
116
+ title: 'Ana Kavram',
117
+ icon: 'mdi:molecule',
118
+ html: 'Mordan, elyafın polimerlerine ve boyar maddeye aynı anda tutunan boş valanslara (bağ kurma kapasitesine) sahiptir.',
119
+ },
120
+ {
121
+ type: 'title',
122
+ text: 'Elyaf Ayırımı',
123
+ level: 2,
124
+ },
125
+ {
126
+ type: 'card',
127
+ title: 'Protein Lifleri: Yün ve İpek',
128
+ icon: 'mdi:sheep',
129
+ html: 'Bu lifler, metallere karşı doğal ilgisi çok yüksek olan amino asit zincirlerinden oluşur. Isı, lifin pullarını açarak şap tuzlarının derinlere nüfuz etmesini sağlar. Yumuşaklığı koruyan asidik pH\'ı sürdürmek için <strong>Krem Tartar</strong> kullanımı hayati önem taşır.',
130
+ },
131
+ {
132
+ type: 'card',
133
+ title: 'Selülozik Lifler: Pamuk ve Keten',
134
+ icon: 'mdi:leaf',
135
+ html: 'Selülozda kolayca erişilebilir bağ noktaları yoktur. Bu nedenle <strong>iki aşamalı protokol</strong> kullanırız: önce selüloza tutunan tanenler, ardından bu tanenlere tutunan şap. Bu ön işlem olmadan renk soluk ve dayanıksız olacaktır.',
136
+ },
137
+ {
138
+ type: 'title',
139
+ text: 'Banyo Kontrolü: WOF, Sıcaklık ve pH',
140
+ level: 2,
141
+ },
142
+ {
143
+ type: 'paragraph',
144
+ html: 'Profesyonel ve tekrarlanabilir sonuçlar elde etmek için <strong>WOF (Weight of Fabric)</strong> kavramı yasadır. Her şey elyafın kuru ağırlığının yüzdesi olarak ölçülür. Aşırı mordan elyafı doyurabilir ve sertleşmesine veya nihai rengi değiştiren metalik birikintilere neden olabilir.',
145
+ },
146
+ {
147
+ type: 'tip',
148
+ title: 'Termal Rampa',
149
+ html: 'Isı, kimyasal reaksiyonu hızlandıran bir katalizör görevi görür. Bununla birlikte, yünde ani bir sıcaklık değişimi, pulların birbirine kalıcı olarak kilitlenmesine neden olarak keçeleşmiş ve çekmiş bir doku ile sonuçlanabilir.',
150
+ },
151
+ {
152
+ type: 'tip',
153
+ title: 'pH Faktörü',
154
+ html: 'Pek çok doğal boya, canlı pH göstergeleridir. pH, tuzların çözünürlüğünü ve elyafın korunmasını etkiler. İpek, banyo çok alkali olursa parlaklığını kaybedebilir. pH\'ı sitrik asit veya kalsiyum karbonat ile ayarlamak temeldir.',
155
+ },
156
+ {
157
+ type: 'title',
158
+ text: 'Maddeler ve Güvenlik',
159
+ level: 2,
160
+ },
161
+ {
162
+ type: 'card',
163
+ title: 'Potasyum Şapı',
164
+ icon: 'mdi:bottle-tonic-skull',
165
+ html: 'Evrensel mordan, renksiz ve son derece etkilidir. Protein lifleri için referans maddedir.',
166
+ },
167
+ {
168
+ type: 'card',
169
+ title: 'Krem Tartar',
170
+ icon: 'mdi:spoon-sugar',
171
+ html: 'Hayvansal liflerde sabitlemeyi ve yumuşaklığı artıran yardımcı madde. pH\'ı asidik tutar.',
172
+ },
173
+ {
174
+ type: 'tip',
175
+ title: 'Güvenlik Protokolü',
176
+ html: 'Tencereleri özel olarak boyama için kullanın, asla yemek için kullanmayın.<br>Toz mordanlarla çalışırken eldiven ve maske kullanın.<br>Buhar birikmesini önlemek için sürekli havalandırma sağlayın.',
177
+ },
178
+ ],
179
+ ui: {
180
+ profileTitle: 'Profil Seçimi',
181
+ profileDesc: 'Kimyasal protokol, elyafın moleküler kökenine göre ayrılır',
182
+ proteinTitle: 'Protein Lifleri',
183
+ proteinOrigin: 'Hayvansal Köken',
184
+ proteinDesc: 'Yün, ipek, alpaka, tiftik veya kaşmir. Kontrollü sıcaklık ve asidik pH gerektirir.',
185
+ cellulosicTitle: 'Selülozik Lifler',
186
+ cellulosicOrigin: 'Bitkisel Köken',
187
+ cellulosicDesc: 'Pamuk, keten, kenevir veya jüt. Pigmenti sabitlemek için tanenlerle ön mordanlama gerektirir.',
188
+ wofTitle: 'WOF Hesaplayıcı',
189
+ weightLabel: 'Kuru Giysi Ağırlığı (g)',
190
+ weightUnit: 'gr',
191
+ wofEmptyMsg: 'Hesaplamaları etkinleştirmek için bir profil seçin',
192
+ alumLabel: 'Şap',
193
+ cremLabel: 'Krem Tartar',
194
+ ironLabel: 'Demir (Dikkat)',
195
+ rampTitle: 'Termal Rampa',
196
+ rampEmptyTitle: 'Seçim Bekleniyor',
197
+ rampEmptyDesc: 'Termal döngüyü görmek için bir elyaf seçin',
198
+ phTitle: 'pH Stabilizatörü',
199
+ phDesc: 'Renk doygunluğu için kritik faktör',
200
+ phVolumeLabel: 'Banyo Hacmi (L)',
201
+ phSliderLabel: 'Mevcut pH',
202
+ phAcidLabel: 'Asidik (1)',
203
+ phAlkalineLabel: 'Alkali (14)',
204
+ phEmptyMsg: 'Stabilizatörü etkinleştirmek için bir profil seçin',
205
+ phStrings: {
206
+ optimal: 'pH optimal',
207
+ raisePrefix: 'Kalsiyum Karbonat veya Soda Külü ekleyin. Yaklaşık',
208
+ raiseSuffix: 'g, şuna yükseltmek için:',
209
+ lowerPrefix: 'Sitrik Asit veya Sirke ekleyin. Yaklaşık',
210
+ lowerSuffix: 'ml, şuna düşürmek için:',
211
+ },
212
+ proteinFibers: [
213
+ { id: 'wool', name: 'Yün / Merino', icon: 'mdi:sheep' },
214
+ { id: 'silk', name: 'İpek', icon: 'mdi:ticket-percent' },
215
+ { id: 'cashmere', name: 'Kaşmir', icon: 'mdi:crown' },
216
+ { id: 'mohair', name: 'Tiftik (Mohair)', icon: 'mdi:shimmer' },
217
+ { id: 'angora', name: 'Angora', icon: 'mdi:rabbit' },
218
+ { id: 'alpaca', name: 'Alpaka', icon: 'mdi:image-filter-hdr' },
219
+ ],
220
+ cellulosicFibers: [
221
+ { id: 'cotton', name: 'Pamuk', icon: 'mdi:tshirt-crew' },
222
+ { id: 'linen', name: 'Keten', icon: 'mdi:leaf' },
223
+ ],
224
+ },
225
+ };
@@ -0,0 +1,225 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { FiberPrepUI } from '../ui';
4
+
5
+ const slug = 'fiber-preparation-natural-dyeing';
6
+ const title = '染前纤维预处理';
7
+ const description =
8
+ '天然染色前的 WOF 计算器、媒染方案和升温程序,适用于羊毛、丝绸和棉纤维的预准备。';
9
+
10
+ const faqData = [
11
+ {
12
+ question: '什么是 WOF (Weight of Fiber)?',
13
+ answer:
14
+ 'WOF 是计算所需染料或媒染剂量的标准系统。它基于纤维的干重。例如,对于 100 克羊毛,使用 100% WOF 的洋葱皮意味着您需要 100 克洋葱皮。',
15
+ },
16
+ {
17
+ question: '为什么必须进行媒染?',
18
+ answer:
19
+ '媒染剂(如明矾)在纺织纤维和天然色素之间起着化学桥梁的作用。没有这种桥梁,大多数染料将无法固着,并在第一次洗涤时消失(日晒牢度和摩擦牢度较差)。',
20
+ },
21
+ {
22
+ question: '处理动物纤维和植物纤维有什么区别?',
23
+ answer:
24
+ '动物纤维(羊毛等蛋白质纤维)单独使用明矾的效果非常好。植物纤维(棉或麻等纤维素纤维)则需要先经过单宁处理,以“诱导”纤维接受金属媒染剂。',
25
+ },
26
+ {
27
+ question: '染色中的“升温程序(Thermal Ramp)”是什么?',
28
+ answer:
29
+ '它是指染浴温度的逐渐升高(约每分钟 1-2°C)。这对避免热冲击至关重要,特别是对于羊毛,如果温度变化过快,会发生缩绒(毡化),导致纤维板结。',
30
+ },
31
+ ];
32
+
33
+ const howToData = [
34
+ {
35
+ name: '精炼与清洗',
36
+ text: '使用中性洗涤剂清洗纤维,去除阻碍媒染剂均匀渗透的油脂、蜡质或工业浆料。',
37
+ },
38
+ {
39
+ name: '称量干纤维重量',
40
+ text: '获取干燥材料的准确重量。该值是所有 WOF (Weight of Fiber) 计算的基础。',
41
+ },
42
+ {
43
+ name: '计算与媒染浴',
44
+ text: '将媒染剂(如 15% WOF 的明矾)溶解在热水中并浸入纤维,按照方案保持恒温。',
45
+ },
46
+ {
47
+ name: '熟成与漂洗',
48
+ text: '让媒染后的纤维静置(最好是 24 小时),使金属离子在进入最终染浴前深度固着。',
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: 'zh',
83
+ };
84
+
85
+ export const content: ToolLocaleContent<FiberPrepUI> = {
86
+ slug,
87
+ title,
88
+ description,
89
+ faqTitle: '常见问题',
90
+ faq: faqData,
91
+ bibliographyTitle: '参考文献',
92
+ bibliography: [
93
+ {
94
+ name: 'La Escuela Artesana - Taller de Tintes Naturales sobre Lana',
95
+ url: 'https://laescuelaartesana.com/taller-de-tintes-naturales-sobre-lana/',
96
+ },
97
+ {
98
+ name: 'Tatiana Sarasa (@tatianasarasa) - 纺织艺术家与天然染色',
99
+ url: 'https://www.instagram.com/tatianasarasa/',
100
+ },
101
+ ],
102
+ howTo: howToData,
103
+ schemas: [faqSchema, howToSchema, appSchema],
104
+ seo: [
105
+ {
106
+ type: 'title',
107
+ text: '媒染背后的科学',
108
+ level: 2,
109
+ },
110
+ {
111
+ type: 'paragraph',
112
+ html: '为染色准备纤维不仅仅是清洗。这是一个分子水平上的化学工程过程,称为媒染。这个词源于拉丁语 <i>mordere</i>(咬),其功能是充当纤维和色素之间的化学桥梁。没有这座桥梁,大多数天然染料只会在第一次漂洗时就被冲掉。',
113
+ },
114
+ {
115
+ type: 'card',
116
+ title: '核心概念',
117
+ icon: 'mdi:molecule',
118
+ html: '媒染剂具有可用的价态,可以同时抓紧纤维聚合物和染料分子。',
119
+ },
120
+ {
121
+ type: 'title',
122
+ text: '纤维差异化',
123
+ level: 2,
124
+ },
125
+ {
126
+ type: 'card',
127
+ title: '蛋白质纤维:羊毛与丝绸',
128
+ icon: 'mdi:sheep',
129
+ html: '这些纤维由氨基酸链组成,对金属具有极高的天然亲和力。热量使纤维鳞片张开,允许明矾盐深度渗透。使用<strong>酒石粉(Cream of Tartar)</strong>至关重要,它可以维持酸性 pH 值,从而保持纤维的柔软度。',
130
+ },
131
+ {
132
+ type: 'card',
133
+ title: '纤维素纤维:棉与麻',
134
+ icon: 'mdi:leaf',
135
+ html: '纤维素没有容易结合的位点。这就是为什么我们使用<strong>两步法方案</strong>:首先是附着在纤维素上的单宁,然后是附着在单宁上的明矾。如果没有这种预处理,颜色会显得苍白且不耐洗。',
136
+ },
137
+ {
138
+ type: 'title',
139
+ text: '染浴控制:WOF、温度与 pH',
140
+ level: 2,
141
+ },
142
+ {
143
+ type: 'paragraph',
144
+ html: '为了获得专业且可重复的结果,<strong>WOF (Weight of Fabric)</strong> 概念是准则。一切都按纤维干重的百分比来衡量。过量的媒染剂会使纤维饱和,使其变得粗糙或留下金属沉积物,从而改变最终颜色。',
145
+ },
146
+ {
147
+ type: 'tip',
148
+ title: '升温程序',
149
+ html: '热量起着催化剂的作用,加速化学反应。然而,羊毛温度的突然变化会导致鳞片永久性地相互勾连,导致织物毡化和缩水。',
150
+ },
151
+ {
152
+ type: 'tip',
153
+ title: 'pH 因素',
154
+ html: '许多天然染料都是活的 pH 指示剂。pH 值影响盐类的溶解度和纤维的保存。如果染浴过于碱性,丝绸可能会失去光泽。使用柠檬酸或碳酸钙调节 pH 值是基础性的工作。',
155
+ },
156
+ {
157
+ type: 'title',
158
+ text: '物质与安全',
159
+ level: 2,
160
+ },
161
+ {
162
+ type: 'card',
163
+ title: '明矾(钾明矾)',
164
+ icon: 'mdi:bottle-tonic-skull',
165
+ html: '通用媒染剂,无色且高效。蛋白质纤维的参考媒染剂。',
166
+ },
167
+ {
168
+ type: 'card',
169
+ title: '酒石粉 (Cream of Tartar)',
170
+ icon: 'mdi:spoon-sugar',
171
+ html: '助剂,可提高动物纤维的固着力和柔软度。保持酸性 pH 值。',
172
+ },
173
+ {
174
+ type: 'tip',
175
+ title: '安全守则',
176
+ html: '染色锅具需专用,严禁用于烹饪食物。<br>处理粉末状媒染剂时请佩戴手套和口罩。<br>确保持续通风以避免蒸汽积聚。',
177
+ },
178
+ ],
179
+ ui: {
180
+ profileTitle: '选择类型',
181
+ profileDesc: '化学方案根据纤维的分子来源进行划分',
182
+ proteinTitle: '蛋白质纤维',
183
+ proteinOrigin: '动物来源',
184
+ proteinDesc: '羊毛、丝绸、羊驼毛、马海毛或羊绒。需要控制温度和酸性 pH 环境。',
185
+ cellulosicTitle: '纤维素纤维',
186
+ cellulosicOrigin: '植物来源',
187
+ cellulosicDesc: '棉、麻、大麻或黄麻。需要使用单宁进行预媒染以固着色素。',
188
+ wofTitle: 'WOF 计算器',
189
+ weightLabel: '干衣重量 (g)',
190
+ weightUnit: 'g',
191
+ wofEmptyMsg: '选择一个类型以启用计算',
192
+ alumLabel: '明矾',
193
+ cremLabel: '酒石粉',
194
+ ironLabel: '铁剂(慎用)',
195
+ rampTitle: '升温程序',
196
+ rampEmptyTitle: '等待选择',
197
+ rampEmptyDesc: '选择一种纤维以查看热循环',
198
+ phTitle: 'pH 稳定剂',
199
+ phDesc: '颜色饱和度的关键因素',
200
+ phVolumeLabel: '染浴体积 (L)',
201
+ phSliderLabel: '当前 pH',
202
+ phAcidLabel: '酸性 (1)',
203
+ phAlkalineLabel: '碱性 (14)',
204
+ phEmptyMsg: '选择一个类型以启用稳定剂',
205
+ phStrings: {
206
+ optimal: '最佳 pH',
207
+ raisePrefix: '添加碳酸钙或纯碱。约',
208
+ raiseSuffix: 'g 以升高至',
209
+ lowerPrefix: '添加柠檬酸或醋。约',
210
+ lowerSuffix: 'ml 以降低至',
211
+ },
212
+ proteinFibers: [
213
+ { id: 'wool', name: '羊毛 / 美利奴', icon: 'mdi:sheep' },
214
+ { id: 'silk', name: '丝绸', icon: 'mdi:ticket-percent' },
215
+ { id: 'cashmere', name: '羊绒', icon: 'mdi:crown' },
216
+ { id: 'mohair', name: '马海毛', icon: 'mdi:shimmer' },
217
+ { id: 'angora', name: '安哥拉免毛', icon: 'mdi:rabbit' },
218
+ { id: 'alpaca', name: '羊驼毛', icon: 'mdi:image-filter-hdr' },
219
+ ],
220
+ cellulosicFibers: [
221
+ { id: 'cotton', name: '棉', icon: 'mdi:tshirt-crew' },
222
+ { id: 'linen', name: '亚麻', icon: 'mdi:leaf' },
223
+ ],
224
+ },
225
+ };