@jjlmoya/utils-textiles 1.3.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 (179) 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/index.ts +12 -12
  17. package/src/tests/i18n_coverage.test.ts +36 -0
  18. package/src/tests/schemas_fulfillment.test.ts +23 -0
  19. package/src/tests/slug_uniqueness.test.ts +81 -0
  20. package/src/tests/title_quality.test.ts +55 -0
  21. package/src/tool/burnTest/i18n/de.ts +225 -0
  22. package/src/tool/burnTest/i18n/id.ts +225 -0
  23. package/src/tool/burnTest/i18n/it.ts +225 -0
  24. package/src/tool/burnTest/i18n/ja.ts +225 -0
  25. package/src/tool/burnTest/i18n/ko.ts +225 -0
  26. package/src/tool/burnTest/i18n/nl.ts +225 -0
  27. package/src/tool/burnTest/i18n/pl.ts +225 -0
  28. package/src/tool/burnTest/i18n/pt.ts +225 -0
  29. package/src/tool/burnTest/i18n/ru.ts +225 -0
  30. package/src/tool/burnTest/i18n/sv.ts +225 -0
  31. package/src/tool/burnTest/i18n/tr.ts +225 -0
  32. package/src/tool/burnTest/i18n/zh.ts +225 -0
  33. package/src/tool/burnTest/index.ts +15 -7
  34. package/src/tool/clothingSizeConverter/i18n/de.ts +356 -0
  35. package/src/tool/clothingSizeConverter/i18n/id.ts +356 -0
  36. package/src/tool/clothingSizeConverter/i18n/it.ts +356 -0
  37. package/src/tool/clothingSizeConverter/i18n/ja.ts +356 -0
  38. package/src/tool/clothingSizeConverter/i18n/ko.ts +356 -0
  39. package/src/tool/clothingSizeConverter/i18n/nl.ts +356 -0
  40. package/src/tool/clothingSizeConverter/i18n/pl.ts +356 -0
  41. package/src/tool/clothingSizeConverter/i18n/pt.ts +356 -0
  42. package/src/tool/clothingSizeConverter/i18n/ru.ts +356 -0
  43. package/src/tool/clothingSizeConverter/i18n/sv.ts +356 -0
  44. package/src/tool/clothingSizeConverter/i18n/tr.ts +356 -0
  45. package/src/tool/clothingSizeConverter/i18n/zh.ts +356 -0
  46. package/src/tool/clothingSizeConverter/index.ts +15 -7
  47. package/src/tool/fabricProjectCalculator/i18n/de.ts +250 -0
  48. package/src/tool/fabricProjectCalculator/i18n/id.ts +250 -0
  49. package/src/tool/fabricProjectCalculator/i18n/it.ts +250 -0
  50. package/src/tool/fabricProjectCalculator/i18n/ja.ts +250 -0
  51. package/src/tool/fabricProjectCalculator/i18n/ko.ts +250 -0
  52. package/src/tool/fabricProjectCalculator/i18n/nl.ts +250 -0
  53. package/src/tool/fabricProjectCalculator/i18n/pl.ts +250 -0
  54. package/src/tool/fabricProjectCalculator/i18n/pt.ts +250 -0
  55. package/src/tool/fabricProjectCalculator/i18n/ru.ts +250 -0
  56. package/src/tool/fabricProjectCalculator/i18n/sv.ts +250 -0
  57. package/src/tool/fabricProjectCalculator/i18n/tr.ts +250 -0
  58. package/src/tool/fabricProjectCalculator/i18n/zh.ts +250 -0
  59. package/src/tool/fabricProjectCalculator/index.ts +15 -7
  60. package/src/tool/fabricTruth/i18n/de.ts +282 -0
  61. package/src/tool/fabricTruth/i18n/en.ts +1 -1
  62. package/src/tool/fabricTruth/i18n/fr.ts +1 -1
  63. package/src/tool/fabricTruth/i18n/id.ts +282 -0
  64. package/src/tool/fabricTruth/i18n/it.ts +282 -0
  65. package/src/tool/fabricTruth/i18n/ja.ts +282 -0
  66. package/src/tool/fabricTruth/i18n/ko.ts +282 -0
  67. package/src/tool/fabricTruth/i18n/nl.ts +282 -0
  68. package/src/tool/fabricTruth/i18n/pl.ts +282 -0
  69. package/src/tool/fabricTruth/i18n/pt.ts +282 -0
  70. package/src/tool/fabricTruth/i18n/ru.ts +282 -0
  71. package/src/tool/fabricTruth/i18n/sv.ts +282 -0
  72. package/src/tool/fabricTruth/i18n/tr.ts +282 -0
  73. package/src/tool/fabricTruth/i18n/zh.ts +286 -0
  74. package/src/tool/fabricTruth/index.ts +15 -7
  75. package/src/tool/fiberPrep/i18n/de.ts +225 -0
  76. package/src/tool/fiberPrep/i18n/id.ts +225 -0
  77. package/src/tool/fiberPrep/i18n/it.ts +225 -0
  78. package/src/tool/fiberPrep/i18n/ja.ts +225 -0
  79. package/src/tool/fiberPrep/i18n/ko.ts +225 -0
  80. package/src/tool/fiberPrep/i18n/nl.ts +225 -0
  81. package/src/tool/fiberPrep/i18n/pl.ts +225 -0
  82. package/src/tool/fiberPrep/i18n/pt.ts +225 -0
  83. package/src/tool/fiberPrep/i18n/ru.ts +225 -0
  84. package/src/tool/fiberPrep/i18n/sv.ts +225 -0
  85. package/src/tool/fiberPrep/i18n/tr.ts +225 -0
  86. package/src/tool/fiberPrep/i18n/zh.ts +225 -0
  87. package/src/tool/fiberPrep/index.ts +15 -7
  88. package/src/tool/knittingGauge/i18n/de.ts +234 -0
  89. package/src/tool/knittingGauge/i18n/id.ts +234 -0
  90. package/src/tool/knittingGauge/i18n/it.ts +234 -0
  91. package/src/tool/knittingGauge/i18n/ja.ts +234 -0
  92. package/src/tool/knittingGauge/i18n/ko.ts +234 -0
  93. package/src/tool/knittingGauge/i18n/nl.ts +234 -0
  94. package/src/tool/knittingGauge/i18n/pl.ts +234 -0
  95. package/src/tool/knittingGauge/i18n/pt.ts +234 -0
  96. package/src/tool/knittingGauge/i18n/ru.ts +234 -0
  97. package/src/tool/knittingGauge/i18n/sv.ts +234 -0
  98. package/src/tool/knittingGauge/i18n/tr.ts +234 -0
  99. package/src/tool/knittingGauge/i18n/zh.ts +234 -0
  100. package/src/tool/knittingGauge/index.ts +15 -7
  101. package/src/tool/laundryGuide/i18n/de.ts +275 -0
  102. package/src/tool/laundryGuide/i18n/id.ts +275 -0
  103. package/src/tool/laundryGuide/i18n/it.ts +275 -0
  104. package/src/tool/laundryGuide/i18n/ja.ts +275 -0
  105. package/src/tool/laundryGuide/i18n/ko.ts +275 -0
  106. package/src/tool/laundryGuide/i18n/nl.ts +275 -0
  107. package/src/tool/laundryGuide/i18n/pl.ts +275 -0
  108. package/src/tool/laundryGuide/i18n/pt.ts +275 -0
  109. package/src/tool/laundryGuide/i18n/ru.ts +275 -0
  110. package/src/tool/laundryGuide/i18n/sv.ts +275 -0
  111. package/src/tool/laundryGuide/i18n/tr.ts +275 -0
  112. package/src/tool/laundryGuide/i18n/zh.ts +275 -0
  113. package/src/tool/laundryGuide/index.ts +15 -7
  114. package/src/tool/needleConverter/i18n/de.ts +212 -0
  115. package/src/tool/needleConverter/i18n/id.ts +212 -0
  116. package/src/tool/needleConverter/i18n/it.ts +212 -0
  117. package/src/tool/needleConverter/i18n/ja.ts +212 -0
  118. package/src/tool/needleConverter/i18n/ko.ts +212 -0
  119. package/src/tool/needleConverter/i18n/nl.ts +212 -0
  120. package/src/tool/needleConverter/i18n/pl.ts +212 -0
  121. package/src/tool/needleConverter/i18n/pt.ts +212 -0
  122. package/src/tool/needleConverter/i18n/ru.ts +212 -0
  123. package/src/tool/needleConverter/i18n/sv.ts +212 -0
  124. package/src/tool/needleConverter/i18n/tr.ts +212 -0
  125. package/src/tool/needleConverter/i18n/zh.ts +212 -0
  126. package/src/tool/needleConverter/index.ts +15 -7
  127. package/src/tool/sewingPatternScaler/i18n/de.ts +227 -0
  128. package/src/tool/sewingPatternScaler/i18n/id.ts +227 -0
  129. package/src/tool/sewingPatternScaler/i18n/it.ts +227 -0
  130. package/src/tool/sewingPatternScaler/i18n/ja.ts +227 -0
  131. package/src/tool/sewingPatternScaler/i18n/ko.ts +227 -0
  132. package/src/tool/sewingPatternScaler/i18n/nl.ts +227 -0
  133. package/src/tool/sewingPatternScaler/i18n/pl.ts +227 -0
  134. package/src/tool/sewingPatternScaler/i18n/pt.ts +227 -0
  135. package/src/tool/sewingPatternScaler/i18n/ru.ts +227 -0
  136. package/src/tool/sewingPatternScaler/i18n/sv.ts +227 -0
  137. package/src/tool/sewingPatternScaler/i18n/tr.ts +227 -0
  138. package/src/tool/sewingPatternScaler/i18n/zh.ts +227 -0
  139. package/src/tool/sewingPatternScaler/index.ts +15 -7
  140. package/src/tool/shoeSizeConverter/i18n/de.ts +184 -0
  141. package/src/tool/shoeSizeConverter/i18n/id.ts +184 -0
  142. package/src/tool/shoeSizeConverter/i18n/it.ts +184 -0
  143. package/src/tool/shoeSizeConverter/i18n/ja.ts +184 -0
  144. package/src/tool/shoeSizeConverter/i18n/ko.ts +184 -0
  145. package/src/tool/shoeSizeConverter/i18n/nl.ts +184 -0
  146. package/src/tool/shoeSizeConverter/i18n/pl.ts +184 -0
  147. package/src/tool/shoeSizeConverter/i18n/pt.ts +184 -0
  148. package/src/tool/shoeSizeConverter/i18n/ru.ts +184 -0
  149. package/src/tool/shoeSizeConverter/i18n/sv.ts +184 -0
  150. package/src/tool/shoeSizeConverter/i18n/tr.ts +184 -0
  151. package/src/tool/shoeSizeConverter/i18n/zh.ts +184 -0
  152. package/src/tool/shoeSizeConverter/index.ts +15 -7
  153. package/src/tool/stainChemistry/i18n/de.ts +300 -0
  154. package/src/tool/stainChemistry/i18n/id.ts +300 -0
  155. package/src/tool/stainChemistry/i18n/it.ts +300 -0
  156. package/src/tool/stainChemistry/i18n/ja.ts +300 -0
  157. package/src/tool/stainChemistry/i18n/ko.ts +297 -0
  158. package/src/tool/stainChemistry/i18n/nl.ts +300 -0
  159. package/src/tool/stainChemistry/i18n/pl.ts +300 -0
  160. package/src/tool/stainChemistry/i18n/pt.ts +300 -0
  161. package/src/tool/stainChemistry/i18n/ru.ts +300 -0
  162. package/src/tool/stainChemistry/i18n/sv.ts +300 -0
  163. package/src/tool/stainChemistry/i18n/tr.ts +300 -0
  164. package/src/tool/stainChemistry/i18n/zh.ts +295 -0
  165. package/src/tool/stainChemistry/index.ts +15 -7
  166. package/src/tool/yarnCalculator/i18n/de.ts +310 -0
  167. package/src/tool/yarnCalculator/i18n/id.ts +310 -0
  168. package/src/tool/yarnCalculator/i18n/it.ts +310 -0
  169. package/src/tool/yarnCalculator/i18n/ja.ts +310 -0
  170. package/src/tool/yarnCalculator/i18n/ko.ts +310 -0
  171. package/src/tool/yarnCalculator/i18n/nl.ts +310 -0
  172. package/src/tool/yarnCalculator/i18n/pl.ts +310 -0
  173. package/src/tool/yarnCalculator/i18n/pt.ts +310 -0
  174. package/src/tool/yarnCalculator/i18n/ru.ts +310 -0
  175. package/src/tool/yarnCalculator/i18n/sv.ts +310 -0
  176. package/src/tool/yarnCalculator/i18n/tr.ts +310 -0
  177. package/src/tool/yarnCalculator/i18n/zh.ts +309 -0
  178. package/src/tool/yarnCalculator/index.ts +15 -7
  179. 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 { BurnTestUI } from '../ui';
4
+
5
+ const slug = 'tekstil-yakma-testi';
6
+ const title = 'Tekstil Yakma Testi';
7
+ const description =
8
+ 'Yanma davranışını analiz ederek herhangi bir kumaşın gerçek bileşimini belirleyin. Pamuk, yün, ipek ve sentetiği bilimsel titizlikle ayırt edin.';
9
+
10
+ const faqData = [
11
+ {
12
+ question: 'Evde yakma testi yapmak güvenli midir?',
13
+ answer:
14
+ 'Evet, aşırı önlemler aldığınız sürece güvenlidir: metal cımbız kullanın, ateşe dayanıklı bir yüzeyde (seramik veya metal) çalışın, yakınınızda su bulundurun ve testi havalandırılan bir yerde yapın. Sadece 1x1 cm\'lik küçük bir numuneye veya birkaç ipliğe ihtiyacınız var.',
15
+ },
16
+ {
17
+ question: 'Pamuk yanarken nasıl kokar?',
18
+ answer:
19
+ 'Pamuk saf selülozdur. Yanarken tam olarak yanmış kağıt veya kuru yaprak gibi kokar. Ortaya çıkan kül gri, çok ince ve dokunulduğunda dağılan yapıdadır.',
20
+ },
21
+ {
22
+ question: 'Elyafın ucundaki sert siyah boncuk ne anlama gelir?',
23
+ answer:
24
+ 'Bu, polyester veya naylon gibi sentetik bir elyafın (plastik) tartışılmaz işaretidir. Erirken, polimer doğal elyafların külünün aksine ufalanmayan plastik bir boncuk haline gelir.',
25
+ },
26
+ {
27
+ question: 'Yün yanarken neden kötü kokar?',
28
+ answer:
29
+ 'Yün ve ipek, kükürt içeren hayvansal proteinlerdir. Ateşle temas ettiklerinde keskin bir yanmış saç veya tüy kokusu yayarlar. Bu, onları bitkisel liflerden ayırt etmenin en kolay yoludur.',
30
+ },
31
+ ];
32
+
33
+ const howToData = [
34
+ {
35
+ name: 'Temsili bir numune alın',
36
+ text: 'Kumaştan küçük bir kare kesin veya daha iyisi, hem çözgüden (dikey) hem de atkıdan (yatay) birkaç iplik çekin.',
37
+ },
38
+ {
39
+ name: 'Aleve yaklaşmayı gözlemleyin',
40
+ text: 'Elyafı ateşe değdirmeden yavaşça yaklaştırın. Büzülüp büzülmediğini, eriyip erimediğini veya hemen alev alıp almadığını gözlemleyin.',
41
+ },
42
+ {
43
+ name: 'Alev türünü ve dumanı analiz edin',
44
+ text: 'Alevin sabit mi yoksa kendiliğinden mi söndüğüne ve dumanın beyaz, siyah mı yoksa hiç mi olmadığına dikkat edin.',
45
+ },
46
+ {
47
+ name: 'Kalıntı ve kokuyu değerlendirin',
48
+ text: 'Soğuduktan sonra ortaya çıkan küle veya boncuğa dokunun ve elyaf ailesini doğrulamak için kokuyu (kağıt, saç veya kimyasal) hissedin.',
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
+ const flame = {
86
+ cellulosic: 'HIZLI ve PARLAK yanar (sarı alev). Erimez. Uzaklaştırıldığında yanmaya devam eder.',
87
+ protein: 'YAVAŞ yanar, cızırdar ve alevden uzağa doğru BÜZÜLÜR. Uzaklaştırıldığında kendiliğinden söner.',
88
+ synthetic: 'ERİR ve hızla kasılır, erimiş plastik gibi damlar. Kurumlu alev.',
89
+ };
90
+
91
+ const odor = {
92
+ paper: 'Yanmış kağıt, odun, kuru yaprak.',
93
+ hair: 'Yanmış saç, yanmış boynuz, tüy.',
94
+ chemical_sweet: 'AROMATİK kimyasal (tatlı, meyvemsi).',
95
+ chemical_fishy: 'EKŞİ kimyasal (balık, kızarmış et).',
96
+ vegetable: 'Pişmiş sebze (kereviz).',
97
+ };
98
+
99
+ const residue = {
100
+ ash_soft: 'İnce GRİ/SİYAH kül, yumuşak ve uçucu (dokunulduğunda dağılır).',
101
+ ash_shape: 'GRİ kül elyaf şeklini korur (gevrek).',
102
+ bead_crushable: 'İçi boş/kırılgan siyah kütle (parmaklarla kolayca ezilir).',
103
+ bead_hard: 'SERT ve camsı boncuk. Parmaklarla kırmak imkansızdır.',
104
+ bead_irregular: 'SERT ve düzensiz siyah kütle.',
105
+ };
106
+
107
+ const smoke = {
108
+ white_gray: 'Beyaz / Açık gri.',
109
+ gray: 'Orta gri.',
110
+ black: 'Yoğun koyu SİYAH duman.',
111
+ };
112
+
113
+ export const content: ToolLocaleContent<BurnTestUI> = {
114
+ slug,
115
+ title,
116
+ description,
117
+ faqTitle: 'Sıkça Sorulan Sorular',
118
+ faq: faqData,
119
+ bibliographyTitle: 'Kaynakça',
120
+ bibliography: [
121
+ {
122
+ name: 'AATCC TM20: Fiber Analysis - Qualitative',
123
+ url: 'https://members.aatcc.org/store/tm20/485/',
124
+ },
125
+ {
126
+ name: 'Textile Fibers: Identification and Testing - NIST',
127
+ url: 'https://nvlpubs.nist.gov/nistpubs/Legacy/circ/nbscircular41e3.pdf',
128
+ },
129
+ {
130
+ name: 'Burn Test Chart for Fiber Identification - Fabric Mart',
131
+ url: 'https://fabricmartfabrics.com/pages/burn-test-chart',
132
+ },
133
+ ],
134
+ howTo: howToData,
135
+ schemas: [faqSchema, howToSchema, appSchema],
136
+ seo: [
137
+ {
138
+ type: 'title',
139
+ text: 'Filamentin Adli Bilimi',
140
+ level: 2,
141
+ },
142
+ {
143
+ type: 'paragraph',
144
+ html: 'Yakma testi, elektron mikroskobuna başvurmadan doğal polimerleri sentetiklerden ayırmak için en hızlı ve en kesin analitik yöntemdir. Bir elyafı ısıya maruz bırakarak, moleküler davranışı kökenini ortaya çıkarır: bitkisel selülozdan hayvansal proteinlere veya petrol türevlerine kadar.',
145
+ },
146
+ {
147
+ type: 'card',
148
+ title: 'Selülozik Lifler',
149
+ icon: 'mdi:leaf',
150
+ html: '<strong>Pamuk</strong> ve <strong>Keten</strong> erimeden hızlı bir şekilde yanar. Kağıt yanığı gibi kokarlar çünkü odun veya bitkiden gelirler, üflendiğinde dağılan uçucu gri bir kül bırakırlar.',
151
+ },
152
+ {
153
+ type: 'card',
154
+ title: 'Protein Lifler',
155
+ icon: 'mdi:sheep',
156
+ html: '<strong>Yün</strong> ve <strong>İpek</strong> alevden uzaklaşır. Karakteristik yanmış saç kokuları kükürt ve keratin varlığını gösterir. Kalıntı, dokunulduğunda ufalanan siyah bir boncuktur.',
157
+ },
158
+ {
159
+ type: 'card',
160
+ title: 'Sentetik Lifler',
161
+ icon: 'mdi:bottle-soda-classic',
162
+ html: '<strong>Polyester</strong> ve <strong>Naylon</strong> esasen plastiktir. Erirler ve kırılması imkansız camsı bir boncuk halinde sertleşen sıcak bir damla oluştururlar, keskin bir kimyasal koku yayarlar.',
163
+ },
164
+ {
165
+ type: 'title',
166
+ text: 'Kimyasal Kanıt Matrisi',
167
+ level: 2,
168
+ },
169
+ {
170
+ type: 'paragraph',
171
+ html: 'Doğru bir analiz, en az üç kanıtın çapraz kontrolünü gerektirir. Koku, karışımları tanımlamak için en güvenilir göstergedir: Eğer bir "keten" kumaş hafif bir plastik aroması veriyor ve sert kalıntılar bırakıyorsa, bu beyan edilmemiş bir polyester karışımına işaret eder.',
172
+ },
173
+ {
174
+ type: 'tip',
175
+ title: 'Laboratuvar Güvenlik Protokolü',
176
+ html: '<strong>Kritik havalandırma:</strong> Sentetik lifler yanarken toksik gazlar salar. Bu testi asla kapalı alanlarda yapmayın.<br><strong>Anında söndürme:</strong> Her zaman yanınızda su dolu bir kap bulundurun. Bazı sentetik lifler eriyip cilde yapışabilir.',
177
+ },
178
+ ],
179
+ ui: {
180
+ investigationLabel: 'İNCELEME',
181
+ stepPrefix: 'ADIM',
182
+ stepCompleted: 'ANALİZ TAMAMLANDI',
183
+ resetLabel: 'YENİDEN BAŞLAT',
184
+ positiveId: 'POZİTİF TANIMLAMA',
185
+ flameLabel: 'Alev Davranışı',
186
+ odorLabel: 'Koku İzi',
187
+ residueLabel: 'Kalıntı',
188
+ identifiedAs: 'Numune pozitif olarak şu şekilde tanımlandı:',
189
+ safetyTitle: 'Güvenlik Protokolü',
190
+ safetyText:
191
+ 'Bu testi havalandırılan bir yerde, ateşe dayanıklı bir yüzeyde yapın. Metal cımbız kullanın ve yanınızda su bulundurun.',
192
+ questions: {
193
+ flame: 'Alevdeki davranışı?',
194
+ odor: 'Karakteristik kokusu?',
195
+ residue: 'Nihai kalıntısı?',
196
+ smoke: 'Duman türü?',
197
+ },
198
+ fiberData: {
199
+ cotton: { name: 'Pamuk', icon: 'mdi:tshirt-crew', color: '#60A5FA', description: 'Doğal bitkisel lif, yumuşak ve nefes alabilir. Temel parçaların kralı.' },
200
+ linen: { name: 'Keten', icon: 'mdi:leaf', color: '#A7F3D0', description: 'Çok güçlü bitkisel lif, serin ve karakteristik kırışıklığa sahip.' },
201
+ wool: { name: 'Yün / Merinos', icon: 'mdi:sheep', color: '#FCD34D', description: 'Hayvansal protein lifi, mükemmel ısı yalıtkanı ve esnektir.' },
202
+ silk: { name: 'İpek', icon: 'mdi:ticket-percent', color: '#F472B6', description: 'Hayvansal sürekli filament lifi. Doğal parlaklık ve kuru dokunuş.' },
203
+ cashmere: { name: 'Kaşmir', icon: 'mdi:crown', color: '#F59E0B', description: 'Kaşmir keçisinden elde edilen lüks lif. Son derece yumuşak, hafif ve sıcaktır.' },
204
+ mohair: { name: 'Tiftik (Mohair)', icon: 'mdi:shimmer', color: '#14B8A6', description: 'Ankara keçisinin "elmas lifi". Doğal parlaklık, çok dayanıklı.' },
205
+ angora: { name: 'Angora', icon: 'mdi:rabbit', color: '#F9FAFB', description: 'Ankara tavşanı tüyü. Kabarık "halo" etkisi ve aşırı hafifliği ile bilinir.' },
206
+ alpaca: { name: 'Alpaka', icon: 'mdi:image-filter-hdr', color: '#9F7AEA', description: 'And Dağları\'nın hazinesi. İçi boş, termal, hipoalerjenik ve ipeksi lif.' },
207
+ polyester: { name: 'Polyester', icon: 'mdi:oil', color: '#94A3B8', description: 'Petrol bazlı sentetik lif. Dayanıklı, kırışmaz, nefes almaz.' },
208
+ nylon: { name: 'Naylon (Poliamid)', icon: 'mdi:parachute', color: '#2DD4BF', description: 'Çekme ve aşınmaya karşı çok dirençli sentetik.' },
209
+ acrylic: { name: 'Akrilik', icon: 'mdi:resize', color: '#450A0A', description: 'Sentetik yün taklidi. Yumuşak, sıcak, tüylenme (pilling) eğilimlidir.' },
210
+ },
211
+ burnTestData: [
212
+ { fiberId: 'cotton', flame: flame.cellulosic, odor: odor.paper, smoke: smoke.white_gray, residue: residue.ash_soft },
213
+ { fiberId: 'linen', flame: flame.cellulosic, odor: odor.paper, smoke: smoke.white_gray, residue: residue.ash_shape },
214
+ { fiberId: 'wool', flame: flame.protein, odor: odor.hair, smoke: smoke.gray, residue: residue.bead_crushable },
215
+ { fiberId: 'silk', flame: flame.protein, odor: odor.hair, smoke: smoke.gray, residue: residue.bead_crushable },
216
+ { fiberId: 'cashmere', flame: flame.protein, odor: odor.hair, smoke: smoke.gray, residue: residue.bead_crushable },
217
+ { fiberId: 'mohair', flame: flame.protein, odor: odor.hair, smoke: smoke.gray, residue: residue.bead_crushable },
218
+ { fiberId: 'angora', flame: flame.protein, odor: odor.hair, smoke: smoke.gray, residue: residue.bead_crushable },
219
+ { fiberId: 'alpaca', flame: flame.protein, odor: odor.hair, smoke: smoke.gray, residue: residue.bead_crushable },
220
+ { fiberId: 'polyester', flame: flame.synthetic, odor: odor.chemical_sweet, smoke: smoke.black, residue: residue.bead_hard },
221
+ { fiberId: 'nylon', flame: flame.synthetic, odor: odor.vegetable, smoke: smoke.white_gray, residue: residue.bead_hard },
222
+ { fiberId: 'acrylic', flame: flame.synthetic, odor: odor.chemical_fishy, smoke: smoke.black, residue: residue.bead_irregular },
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 { BurnTestUI } from '../ui';
4
+
5
+ const slug = 'textile-burn-test';
6
+ const title = '纺织品燃烧试验';
7
+ const description =
8
+ '通过分析燃烧行为来识别任何织物的真实成分。科学区分棉、羊毛、丝绸和合成纤维。';
9
+
10
+ const faqData = [
11
+ {
12
+ question: '在家进行燃烧试验安全吗?',
13
+ answer:
14
+ '是的,只要你采取极端预防措施:使用金属镊子,在耐火表面(陶瓷或金属)上操作,在附近准备好水,并在通风良好的地方进行测试。你只需要一个 1x1 厘米的小样品或几根线。',
15
+ },
16
+ {
17
+ question: '棉花燃烧时是什么味道?',
18
+ answer:
19
+ '棉花是纯纤维素。燃烧时,它的气味与燃烧的纸张或干叶子完全相同。产生的灰烬是灰色的,非常细,触之即碎。',
20
+ },
21
+ {
22
+ question: '纤维末端的黑色硬珠表示什么?',
23
+ answer:
24
+ '这是聚酯或尼龙等合成纤维(塑料)的明确迹象。熔化时,聚合物会聚集成塑料珠,不会像天然纤维的灰烬那样破碎。',
25
+ },
26
+ {
27
+ question: '为什么羊毛燃烧时很难闻?',
28
+ answer:
29
+ '羊毛和丝绸是含有硫的动物蛋白质。接触火源时,它们会散发出刺鼻的烧焦头发或羽毛的气味。这是将它们与植物纤维区分开的最简单方法。',
30
+ },
31
+ ];
32
+
33
+ const howToData = [
34
+ {
35
+ name: '提取代表性样品',
36
+ text: '从织物上剪下一个小正方形,或者更好的是,从经纱(垂直)和纬纱(水平)中抽出几根线。',
37
+ },
38
+ {
39
+ name: '观察接近火焰时的反应',
40
+ text: '将纤维缓慢靠近火源而不接触。观察它是否收缩、熔化或立即着火。',
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: 'zh',
83
+ };
84
+
85
+ const flame = {
86
+ cellulosic: '燃烧迅速且明亮(黄色火焰)。不熔化。离开火源后继续燃烧。',
87
+ protein: '燃烧缓慢,发出噼啪声,并收缩远离火焰。离开火源后自行熄灭。',
88
+ synthetic: '熔化并迅速收缩,像熔化的塑料一样滴落。火焰带烟尘。',
89
+ };
90
+
91
+ const odor = {
92
+ paper: '烧焦的纸、木头、干叶。',
93
+ hair: '烧焦的头发、烧焦的角质、羽毛。',
94
+ chemical_sweet: '芳香族化学味(甜味、果味)。',
95
+ chemical_fishy: '酸性化学味(鱼味、烤肉味)。',
96
+ vegetable: '煮熟的蔬菜(芹菜)。',
97
+ };
98
+
99
+ const residue = {
100
+ ash_soft: '细腻的灰色/黑色灰烬,柔软且易挥发(触之即碎)。',
101
+ ash_shape: '灰色灰烬保持纤维形状(易碎)。',
102
+ bead_crushable: '中空/脆弱的黑色物质(用手指容易压碎)。',
103
+ bead_hard: '坚硬如玻璃般的珠子。用手指无法破碎。',
104
+ bead_irregular: '坚硬且不规则的黑色物质。',
105
+ };
106
+
107
+ const smoke = {
108
+ white_gray: '白色 / 浅灰色。',
109
+ gray: '中灰色。',
110
+ black: '浓密的深黑色。',
111
+ };
112
+
113
+ export const content: ToolLocaleContent<BurnTestUI> = {
114
+ slug,
115
+ title,
116
+ description,
117
+ faqTitle: '常见问题',
118
+ faq: faqData,
119
+ bibliographyTitle: '参考文献',
120
+ bibliography: [
121
+ {
122
+ name: 'AATCC TM20: Fiber Analysis - Qualitative',
123
+ url: 'https://members.aatcc.org/store/tm20/485/',
124
+ },
125
+ {
126
+ name: 'Textile Fibers: Identification and Testing - NIST',
127
+ url: 'https://nvlpubs.nist.gov/nistpubs/Legacy/circ/nbscircular41e3.pdf',
128
+ },
129
+ {
130
+ name: 'Burn Test Chart for Fiber Identification - Fabric Mart',
131
+ url: 'https://fabricmartfabrics.com/pages/burn-test-chart',
132
+ },
133
+ ],
134
+ howTo: howToData,
135
+ schemas: [faqSchema, howToSchema, appSchema],
136
+ seo: [
137
+ {
138
+ type: 'title',
139
+ text: '长丝的法医科学',
140
+ level: 2,
141
+ },
142
+ {
143
+ type: 'paragraph',
144
+ html: '燃烧试验是无需电子显微镜即可区分天然聚合物与合成聚合物的最快速、最精确的分析方法。通过将纤维暴露在热源下,其分子行为揭示了其起源:从植物纤维素到动物蛋白质或石油衍生物。',
145
+ },
146
+ {
147
+ type: 'card',
148
+ title: '纤维素纤维',
149
+ icon: 'mdi:leaf',
150
+ html: '<strong>棉</strong>和<strong>亚麻</strong>燃烧迅速且不熔化。由于源自木材或植物,它们闻起来像烧焦的纸,留下挥发性的灰色灰烬,一吹即散。',
151
+ },
152
+ {
153
+ type: 'card',
154
+ title: '蛋白质纤维',
155
+ icon: 'mdi:sheep',
156
+ html: '<strong>羊毛</strong>和<strong>丝绸</strong>会远离火焰。其特有的烧焦头发味表明存在硫和角蛋白。残留物是触之即碎的黑色珠子。',
157
+ },
158
+ {
159
+ type: 'card',
160
+ title: '合成纤维',
161
+ icon: 'mdi:bottle-soda-classic',
162
+ html: '<strong>聚酯纤维</strong>和<strong>尼龙</strong>本质上是塑料。它们熔化形成热滴,凝固成无法破碎的玻璃状珠子,散发出刺鼻的化学味。',
163
+ },
164
+ {
165
+ type: 'title',
166
+ text: '化学证据矩阵',
167
+ level: 2,
168
+ },
169
+ {
170
+ type: 'paragraph',
171
+ html: '精确的分析需要交叉验证至少三个证据。气味是识别混纺最可靠的指标:如果一种“亚麻”织物散发出轻微的塑料香味并留下坚硬的残留物,这表明其含有未声明的聚酯成分。',
172
+ },
173
+ {
174
+ type: 'tip',
175
+ title: '实验室安全协议',
176
+ html: '<strong>关键通风:</strong>合成纤维在燃烧时会释放有毒气体。切勿在密闭空间进行此测试。<br><strong>立即灭火:</strong>务必在身边准备一容器水。某些合成纤维可能会熔化并粘在皮肤上。',
177
+ },
178
+ ],
179
+ ui: {
180
+ investigationLabel: '调查',
181
+ stepPrefix: '步骤',
182
+ stepCompleted: '分析完成',
183
+ resetLabel: '重新开始',
184
+ positiveId: '阳性识别',
185
+ flameLabel: '火焰行为',
186
+ odorLabel: '气味痕迹',
187
+ residueLabel: '残留物',
188
+ identifiedAs: '样品确认为',
189
+ safetyTitle: '安全协议',
190
+ safetyText:
191
+ '请在通风良好的地方、耐火表面上进行此测试。使用金属镊子并准备好水。',
192
+ questions: {
193
+ flame: '在火焰中的反应?',
194
+ odor: '特有气味?',
195
+ residue: '最终残留物?',
196
+ smoke: '烟雾类型?',
197
+ },
198
+ fiberData: {
199
+ cotton: { name: '棉', icon: 'mdi:tshirt-crew', color: '#60A5FA', description: '天然植物纤维,柔软透气。基础面料之王。' },
200
+ linen: { name: '亚麻', icon: 'mdi:leaf', color: '#A7F3D0', description: '非常坚固的植物纤维,凉爽且具有特有的褶皱。' },
201
+ wool: { name: '羊毛 / 羊绒', icon: 'mdi:sheep', color: '#FCD34D', description: '动物蛋白质纤维,优异的绝热体,具有弹性。' },
202
+ silk: { name: '丝绸 (真丝)', icon: 'mdi:ticket-percent', color: '#F472B6', description: '动物长丝纤维。天然光泽,手感干爽。' },
203
+ cashmere: { name: '山羊绒', icon: 'mdi:crown', color: '#F59E0B', description: '昂贵的克什米尔山羊纤维。极其柔软、轻盈、保暖。' },
204
+ mohair: { name: '马海毛', icon: 'mdi:shimmer', color: '#14B8A6', description: '安哥拉山羊的“钻石纤维”。天然光泽,非常耐磨。' },
205
+ angora: { name: '安哥拉兔毛', icon: 'mdi:rabbit', color: '#F9FAFB', description: '安哥拉兔的毛。以其蓬松的“光环”效果和极致轻盈著称。' },
206
+ alpaca: { name: '阿尔パカ (羊驼毛)', icon: 'mdi:image-filter-hdr', color: '#9F7AEA', description: '安第斯山的珍宝。中空纤维,保暖、防过敏、丝滑。' },
207
+ polyester: { name: '聚酯纤维 (涤纶)', icon: 'mdi:oil', color: '#94A3B8', description: '石油基合成纤维。耐用、抗皱、不透气。' },
208
+ nylon: { name: '尼龙 (锦纶)', icon: 'mdi:parachute', color: '#2DD4BF', description: '抗拉和耐磨性极强的合成纤维。' },
209
+ acrylic: { name: '腈纶', icon: 'mdi:resize', color: '#450A0A', description: '人造羊毛合成纤维。柔软保暖,容易起球。' },
210
+ },
211
+ burnTestData: [
212
+ { fiberId: 'cotton', flame: flame.cellulosic, odor: odor.paper, smoke: smoke.white_gray, residue: residue.ash_soft },
213
+ { fiberId: 'linen', flame: flame.cellulosic, odor: odor.paper, smoke: smoke.white_gray, residue: residue.ash_shape },
214
+ { fiberId: 'wool', flame: flame.protein, odor: odor.hair, smoke: smoke.gray, residue: residue.bead_crushable },
215
+ { fiberId: 'silk', flame: flame.protein, odor: odor.hair, smoke: smoke.gray, residue: residue.bead_crushable },
216
+ { fiberId: 'cashmere', flame: flame.protein, odor: odor.hair, smoke: smoke.gray, residue: residue.bead_crushable },
217
+ { fiberId: 'mohair', flame: flame.protein, odor: odor.hair, smoke: smoke.gray, residue: residue.bead_crushable },
218
+ { fiberId: 'angora', flame: flame.protein, odor: odor.hair, smoke: smoke.gray, residue: residue.bead_crushable },
219
+ { fiberId: 'alpaca', flame: flame.protein, odor: odor.hair, smoke: smoke.gray, residue: residue.bead_crushable },
220
+ { fiberId: 'polyester', flame: flame.synthetic, odor: odor.chemical_sweet, smoke: smoke.black, residue: residue.bead_hard },
221
+ { fiberId: 'nylon', flame: flame.synthetic, odor: odor.vegetable, smoke: smoke.white_gray, residue: residue.bead_hard },
222
+ { fiberId: 'acrylic', flame: flame.synthetic, odor: odor.chemical_fishy, smoke: smoke.black, residue: residue.bead_irregular },
223
+ ],
224
+ },
225
+ };
@@ -7,10 +7,6 @@ import type { BurnTestUI } from './ui';
7
7
 
8
8
  export type BurnTestLocaleContent = ToolLocaleContent<BurnTestUI>;
9
9
 
10
- import { content as es } from './i18n/es';
11
- import { content as en } from './i18n/en';
12
- import { content as fr } from './i18n/fr';
13
-
14
10
  export const burnTest: TextilesToolEntry<BurnTestUI> = {
15
11
  id: 'burn-test',
16
12
  icons: {
@@ -18,9 +14,21 @@ export const burnTest: TextilesToolEntry<BurnTestUI> = {
18
14
  fg: 'mdi:test-tube',
19
15
  },
20
16
  i18n: {
21
- es: async () => es,
22
- en: async () => en,
23
- fr: async () => fr,
17
+ es: () => import('./i18n/es').then((m) => m.content),
18
+ en: () => import('./i18n/en').then((m) => m.content),
19
+ fr: () => import('./i18n/fr').then((m) => m.content),
20
+ de: () => import('./i18n/de').then((m) => m.content),
21
+ id: () => import('./i18n/id').then((m) => m.content),
22
+ it: () => import('./i18n/it').then((m) => m.content),
23
+ ja: () => import('./i18n/ja').then((m) => m.content),
24
+ ko: () => import('./i18n/ko').then((m) => m.content),
25
+ nl: () => import('./i18n/nl').then((m) => m.content),
26
+ pl: () => import('./i18n/pl').then((m) => m.content),
27
+ pt: () => import('./i18n/pt').then((m) => m.content),
28
+ ru: () => import('./i18n/ru').then((m) => m.content),
29
+ sv: () => import('./i18n/sv').then((m) => m.content),
30
+ tr: () => import('./i18n/tr').then((m) => m.content),
31
+ zh: () => import('./i18n/zh').then((m) => m.content),
24
32
  },
25
33
  };
26
34