@jjlmoya/utils-developer 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 (338) hide show
  1. package/package.json +2 -1
  2. package/src/category/i18n/de.ts +34 -0
  3. package/src/category/i18n/id.ts +34 -0
  4. package/src/category/i18n/it.ts +34 -0
  5. package/src/category/i18n/ja.ts +34 -0
  6. package/src/category/i18n/ko.ts +34 -0
  7. package/src/category/i18n/nl.ts +34 -0
  8. package/src/category/i18n/pl.ts +34 -0
  9. package/src/category/i18n/pt.ts +34 -0
  10. package/src/category/i18n/ru.ts +34 -0
  11. package/src/category/i18n/sv.ts +34 -0
  12. package/src/category/i18n/tr.ts +34 -0
  13. package/src/category/i18n/zh.ts +34 -0
  14. package/src/category/index.ts +13 -1
  15. package/src/tests/faq_count.test.ts +1 -1
  16. package/src/tests/i18n_coverage.test.ts +36 -0
  17. package/src/tests/locale_completeness.test.ts +2 -2
  18. package/src/tests/slug_uniqueness.test.ts +81 -0
  19. package/src/tool/aspectRatio/i18n/de.ts +177 -0
  20. package/src/tool/aspectRatio/i18n/id.ts +177 -0
  21. package/src/tool/aspectRatio/i18n/it.ts +177 -0
  22. package/src/tool/aspectRatio/i18n/ja.ts +178 -0
  23. package/src/tool/aspectRatio/i18n/ko.ts +178 -0
  24. package/src/tool/aspectRatio/i18n/nl.ts +178 -0
  25. package/src/tool/aspectRatio/i18n/pl.ts +177 -0
  26. package/src/tool/aspectRatio/i18n/pt.ts +177 -0
  27. package/src/tool/aspectRatio/i18n/ru.ts +177 -0
  28. package/src/tool/aspectRatio/i18n/sv.ts +177 -0
  29. package/src/tool/aspectRatio/i18n/tr.ts +177 -0
  30. package/src/tool/aspectRatio/i18n/zh.ts +178 -0
  31. package/src/tool/aspectRatio/index.ts +15 -7
  32. package/src/tool/calculadoraTiempoDatos/i18n/de.ts +150 -0
  33. package/src/tool/calculadoraTiempoDatos/i18n/id.ts +150 -0
  34. package/src/tool/calculadoraTiempoDatos/i18n/it.ts +150 -0
  35. package/src/tool/calculadoraTiempoDatos/i18n/ja.ts +151 -0
  36. package/src/tool/calculadoraTiempoDatos/i18n/ko.ts +151 -0
  37. package/src/tool/calculadoraTiempoDatos/i18n/nl.ts +150 -0
  38. package/src/tool/calculadoraTiempoDatos/i18n/pl.ts +150 -0
  39. package/src/tool/calculadoraTiempoDatos/i18n/pt.ts +150 -0
  40. package/src/tool/calculadoraTiempoDatos/i18n/ru.ts +151 -0
  41. package/src/tool/calculadoraTiempoDatos/i18n/sv.ts +150 -0
  42. package/src/tool/calculadoraTiempoDatos/i18n/tr.ts +150 -0
  43. package/src/tool/calculadoraTiempoDatos/i18n/zh.ts +151 -0
  44. package/src/tool/calculadoraTiempoDatos/index.ts +15 -7
  45. package/src/tool/colorConverter/i18n/de.ts +126 -0
  46. package/src/tool/colorConverter/i18n/id.ts +126 -0
  47. package/src/tool/colorConverter/i18n/it.ts +126 -0
  48. package/src/tool/colorConverter/i18n/ja.ts +127 -0
  49. package/src/tool/colorConverter/i18n/ko.ts +127 -0
  50. package/src/tool/colorConverter/i18n/nl.ts +126 -0
  51. package/src/tool/colorConverter/i18n/pl.ts +126 -0
  52. package/src/tool/colorConverter/i18n/pt.ts +126 -0
  53. package/src/tool/colorConverter/i18n/ru.ts +126 -0
  54. package/src/tool/colorConverter/i18n/sv.ts +126 -0
  55. package/src/tool/colorConverter/i18n/tr.ts +126 -0
  56. package/src/tool/colorConverter/i18n/zh.ts +127 -0
  57. package/src/tool/colorConverter/index.ts +15 -7
  58. package/src/tool/conversorExcelCsvHtml/i18n/de.ts +129 -0
  59. package/src/tool/conversorExcelCsvHtml/i18n/id.ts +129 -0
  60. package/src/tool/conversorExcelCsvHtml/i18n/it.ts +129 -0
  61. package/src/tool/conversorExcelCsvHtml/i18n/ja.ts +130 -0
  62. package/src/tool/conversorExcelCsvHtml/i18n/ko.ts +130 -0
  63. package/src/tool/conversorExcelCsvHtml/i18n/nl.ts +129 -0
  64. package/src/tool/conversorExcelCsvHtml/i18n/pl.ts +129 -0
  65. package/src/tool/conversorExcelCsvHtml/i18n/pt.ts +129 -0
  66. package/src/tool/conversorExcelCsvHtml/i18n/ru.ts +129 -0
  67. package/src/tool/conversorExcelCsvHtml/i18n/sv.ts +129 -0
  68. package/src/tool/conversorExcelCsvHtml/i18n/tr.ts +129 -0
  69. package/src/tool/conversorExcelCsvHtml/i18n/zh.ts +130 -0
  70. package/src/tool/conversorExcelCsvHtml/index.ts +15 -7
  71. package/src/tool/cronGenerator/i18n/de.ts +192 -0
  72. package/src/tool/cronGenerator/i18n/es.ts +2 -1
  73. package/src/tool/cronGenerator/i18n/fr.ts +2 -1
  74. package/src/tool/cronGenerator/i18n/id.ts +192 -0
  75. package/src/tool/cronGenerator/i18n/it.ts +192 -0
  76. package/src/tool/cronGenerator/i18n/ja.ts +192 -0
  77. package/src/tool/cronGenerator/i18n/ko.ts +192 -0
  78. package/src/tool/cronGenerator/i18n/nl.ts +192 -0
  79. package/src/tool/cronGenerator/i18n/pl.ts +192 -0
  80. package/src/tool/cronGenerator/i18n/pt.ts +192 -0
  81. package/src/tool/cronGenerator/i18n/ru.ts +192 -0
  82. package/src/tool/cronGenerator/i18n/sv.ts +192 -0
  83. package/src/tool/cronGenerator/i18n/tr.ts +192 -0
  84. package/src/tool/cronGenerator/i18n/zh.ts +192 -0
  85. package/src/tool/cronGenerator/index.ts +15 -7
  86. package/src/tool/cssSpecificityCalculator/i18n/de.ts +168 -0
  87. package/src/tool/cssSpecificityCalculator/i18n/id.ts +168 -0
  88. package/src/tool/cssSpecificityCalculator/i18n/it.ts +168 -0
  89. package/src/tool/cssSpecificityCalculator/i18n/ja.ts +169 -0
  90. package/src/tool/cssSpecificityCalculator/i18n/ko.ts +169 -0
  91. package/src/tool/cssSpecificityCalculator/i18n/nl.ts +168 -0
  92. package/src/tool/cssSpecificityCalculator/i18n/pl.ts +168 -0
  93. package/src/tool/cssSpecificityCalculator/i18n/pt.ts +168 -0
  94. package/src/tool/cssSpecificityCalculator/i18n/ru.ts +168 -0
  95. package/src/tool/cssSpecificityCalculator/i18n/sv.ts +168 -0
  96. package/src/tool/cssSpecificityCalculator/i18n/tr.ts +168 -0
  97. package/src/tool/cssSpecificityCalculator/i18n/zh.ts +169 -0
  98. package/src/tool/cssSpecificityCalculator/index.ts +15 -7
  99. package/src/tool/cssToInlineConverter/i18n/de.ts +160 -0
  100. package/src/tool/cssToInlineConverter/i18n/id.ts +160 -0
  101. package/src/tool/cssToInlineConverter/i18n/it.ts +160 -0
  102. package/src/tool/cssToInlineConverter/i18n/ja.ts +161 -0
  103. package/src/tool/cssToInlineConverter/i18n/ko.ts +161 -0
  104. package/src/tool/cssToInlineConverter/i18n/nl.ts +160 -0
  105. package/src/tool/cssToInlineConverter/i18n/pl.ts +160 -0
  106. package/src/tool/cssToInlineConverter/i18n/pt.ts +160 -0
  107. package/src/tool/cssToInlineConverter/i18n/ru.ts +160 -0
  108. package/src/tool/cssToInlineConverter/i18n/sv.ts +160 -0
  109. package/src/tool/cssToInlineConverter/i18n/tr.ts +160 -0
  110. package/src/tool/cssToInlineConverter/i18n/zh.ts +161 -0
  111. package/src/tool/cssToInlineConverter/index.ts +15 -7
  112. package/src/tool/duplicateCssRemover/i18n/de.ts +167 -0
  113. package/src/tool/duplicateCssRemover/i18n/id.ts +167 -0
  114. package/src/tool/duplicateCssRemover/i18n/it.ts +167 -0
  115. package/src/tool/duplicateCssRemover/i18n/ja.ts +168 -0
  116. package/src/tool/duplicateCssRemover/i18n/ko.ts +168 -0
  117. package/src/tool/duplicateCssRemover/i18n/nl.ts +167 -0
  118. package/src/tool/duplicateCssRemover/i18n/pl.ts +167 -0
  119. package/src/tool/duplicateCssRemover/i18n/pt.ts +167 -0
  120. package/src/tool/duplicateCssRemover/i18n/ru.ts +167 -0
  121. package/src/tool/duplicateCssRemover/i18n/sv.ts +167 -0
  122. package/src/tool/duplicateCssRemover/i18n/tr.ts +167 -0
  123. package/src/tool/duplicateCssRemover/i18n/zh.ts +168 -0
  124. package/src/tool/duplicateCssRemover/index.ts +15 -7
  125. package/src/tool/generadorSecurityTxt/i18n/de.ts +174 -0
  126. package/src/tool/generadorSecurityTxt/i18n/id.ts +174 -0
  127. package/src/tool/generadorSecurityTxt/i18n/it.ts +174 -0
  128. package/src/tool/generadorSecurityTxt/i18n/ja.ts +174 -0
  129. package/src/tool/generadorSecurityTxt/i18n/ko.ts +174 -0
  130. package/src/tool/generadorSecurityTxt/i18n/nl.ts +174 -0
  131. package/src/tool/generadorSecurityTxt/i18n/pl.ts +174 -0
  132. package/src/tool/generadorSecurityTxt/i18n/pt.ts +174 -0
  133. package/src/tool/generadorSecurityTxt/i18n/ru.ts +174 -0
  134. package/src/tool/generadorSecurityTxt/i18n/sv.ts +174 -0
  135. package/src/tool/generadorSecurityTxt/i18n/tr.ts +174 -0
  136. package/src/tool/generadorSecurityTxt/i18n/zh.ts +174 -0
  137. package/src/tool/generadorSecurityTxt/index.ts +15 -7
  138. package/src/tool/hashGenerator/i18n/de.ts +119 -0
  139. package/src/tool/hashGenerator/i18n/id.ts +119 -0
  140. package/src/tool/hashGenerator/i18n/it.ts +118 -0
  141. package/src/tool/hashGenerator/i18n/ja.ts +119 -0
  142. package/src/tool/hashGenerator/i18n/ko.ts +119 -0
  143. package/src/tool/hashGenerator/i18n/nl.ts +119 -0
  144. package/src/tool/hashGenerator/i18n/pl.ts +118 -0
  145. package/src/tool/hashGenerator/i18n/pt.ts +118 -0
  146. package/src/tool/hashGenerator/i18n/ru.ts +119 -0
  147. package/src/tool/hashGenerator/i18n/sv.ts +119 -0
  148. package/src/tool/hashGenerator/i18n/tr.ts +118 -0
  149. package/src/tool/hashGenerator/i18n/zh.ts +119 -0
  150. package/src/tool/hashGenerator/index.ts +15 -7
  151. package/src/tool/inspectorCertificadosSsl/i18n/de.ts +214 -0
  152. package/src/tool/inspectorCertificadosSsl/i18n/id.ts +215 -0
  153. package/src/tool/inspectorCertificadosSsl/i18n/it.ts +214 -0
  154. package/src/tool/inspectorCertificadosSsl/i18n/ja.ts +215 -0
  155. package/src/tool/inspectorCertificadosSsl/i18n/ko.ts +215 -0
  156. package/src/tool/inspectorCertificadosSsl/i18n/nl.ts +215 -0
  157. package/src/tool/inspectorCertificadosSsl/i18n/pl.ts +215 -0
  158. package/src/tool/inspectorCertificadosSsl/i18n/pt.ts +214 -0
  159. package/src/tool/inspectorCertificadosSsl/i18n/ru.ts +215 -0
  160. package/src/tool/inspectorCertificadosSsl/i18n/sv.ts +215 -0
  161. package/src/tool/inspectorCertificadosSsl/i18n/tr.ts +215 -0
  162. package/src/tool/inspectorCertificadosSsl/i18n/zh.ts +215 -0
  163. package/src/tool/inspectorCertificadosSsl/index.ts +24 -0
  164. package/src/tool/jsonFormatter/i18n/de.ts +157 -0
  165. package/src/tool/jsonFormatter/i18n/es.ts +2 -1
  166. package/src/tool/jsonFormatter/i18n/fr.ts +2 -1
  167. package/src/tool/jsonFormatter/i18n/id.ts +157 -0
  168. package/src/tool/jsonFormatter/i18n/it.ts +156 -0
  169. package/src/tool/jsonFormatter/i18n/ja.ts +157 -0
  170. package/src/tool/jsonFormatter/i18n/ko.ts +157 -0
  171. package/src/tool/jsonFormatter/i18n/nl.ts +157 -0
  172. package/src/tool/jsonFormatter/i18n/pl.ts +156 -0
  173. package/src/tool/jsonFormatter/i18n/pt.ts +156 -0
  174. package/src/tool/jsonFormatter/i18n/ru.ts +157 -0
  175. package/src/tool/jsonFormatter/i18n/sv.ts +157 -0
  176. package/src/tool/jsonFormatter/i18n/tr.ts +157 -0
  177. package/src/tool/jsonFormatter/i18n/zh.ts +157 -0
  178. package/src/tool/jsonFormatter/index.ts +15 -7
  179. package/src/tool/keycode/i18n/de.ts +161 -0
  180. package/src/tool/keycode/i18n/es.ts +2 -1
  181. package/src/tool/keycode/i18n/fr.ts +2 -1
  182. package/src/tool/keycode/i18n/id.ts +161 -0
  183. package/src/tool/keycode/i18n/it.ts +161 -0
  184. package/src/tool/keycode/i18n/ja.ts +161 -0
  185. package/src/tool/keycode/i18n/ko.ts +161 -0
  186. package/src/tool/keycode/i18n/nl.ts +161 -0
  187. package/src/tool/keycode/i18n/pl.ts +161 -0
  188. package/src/tool/keycode/i18n/pt.ts +160 -0
  189. package/src/tool/keycode/i18n/ru.ts +160 -0
  190. package/src/tool/keycode/i18n/sv.ts +160 -0
  191. package/src/tool/keycode/i18n/tr.ts +160 -0
  192. package/src/tool/keycode/i18n/zh.ts +161 -0
  193. package/src/tool/keycode/index.ts +15 -7
  194. package/src/tool/llmCostCalculator/i18n/de.ts +166 -0
  195. package/src/tool/llmCostCalculator/i18n/fr.ts +2 -1
  196. package/src/tool/llmCostCalculator/i18n/id.ts +166 -0
  197. package/src/tool/llmCostCalculator/i18n/it.ts +166 -0
  198. package/src/tool/llmCostCalculator/i18n/ja.ts +166 -0
  199. package/src/tool/llmCostCalculator/i18n/ko.ts +166 -0
  200. package/src/tool/llmCostCalculator/i18n/nl.ts +166 -0
  201. package/src/tool/llmCostCalculator/i18n/pl.ts +165 -0
  202. package/src/tool/llmCostCalculator/i18n/pt.ts +165 -0
  203. package/src/tool/llmCostCalculator/i18n/ru.ts +165 -0
  204. package/src/tool/llmCostCalculator/i18n/sv.ts +165 -0
  205. package/src/tool/llmCostCalculator/i18n/tr.ts +165 -0
  206. package/src/tool/llmCostCalculator/i18n/zh.ts +166 -0
  207. package/src/tool/llmCostCalculator/index.ts +24 -0
  208. package/src/tool/mobileMockupGenerator/i18n/de.ts +121 -0
  209. package/src/tool/mobileMockupGenerator/i18n/id.ts +121 -0
  210. package/src/tool/mobileMockupGenerator/i18n/it.ts +121 -0
  211. package/src/tool/mobileMockupGenerator/i18n/ja.ts +122 -0
  212. package/src/tool/mobileMockupGenerator/i18n/ko.ts +122 -0
  213. package/src/tool/mobileMockupGenerator/i18n/nl.ts +121 -0
  214. package/src/tool/mobileMockupGenerator/i18n/pl.ts +31 -0
  215. package/src/tool/mobileMockupGenerator/i18n/pt.ts +121 -0
  216. package/src/tool/mobileMockupGenerator/i18n/ru.ts +121 -0
  217. package/src/tool/mobileMockupGenerator/i18n/sv.ts +121 -0
  218. package/src/tool/mobileMockupGenerator/i18n/tr.ts +121 -0
  219. package/src/tool/mobileMockupGenerator/i18n/zh.ts +122 -0
  220. package/src/tool/mobileMockupGenerator/index.ts +24 -0
  221. package/src/tool/musicalTypography/i18n/de.ts +179 -0
  222. package/src/tool/musicalTypography/i18n/id.ts +179 -0
  223. package/src/tool/musicalTypography/i18n/it.ts +179 -0
  224. package/src/tool/musicalTypography/i18n/ja.ts +180 -0
  225. package/src/tool/musicalTypography/i18n/ko.ts +180 -0
  226. package/src/tool/musicalTypography/i18n/nl.ts +179 -0
  227. package/src/tool/musicalTypography/i18n/pl.ts +179 -0
  228. package/src/tool/musicalTypography/i18n/pt.ts +101 -0
  229. package/src/tool/musicalTypography/i18n/ru.ts +47 -0
  230. package/src/tool/musicalTypography/i18n/sv.ts +29 -0
  231. package/src/tool/musicalTypography/i18n/tr.ts +29 -0
  232. package/src/tool/musicalTypography/i18n/zh.ts +30 -0
  233. package/src/tool/musicalTypography/index.ts +15 -7
  234. package/src/tool/placeholderGenerator/i18n/de.ts +176 -0
  235. package/src/tool/placeholderGenerator/i18n/id.ts +176 -0
  236. package/src/tool/placeholderGenerator/i18n/it.ts +176 -0
  237. package/src/tool/placeholderGenerator/i18n/ja.ts +177 -0
  238. package/src/tool/placeholderGenerator/i18n/ko.ts +177 -0
  239. package/src/tool/placeholderGenerator/i18n/nl.ts +176 -0
  240. package/src/tool/placeholderGenerator/i18n/pl.ts +176 -0
  241. package/src/tool/placeholderGenerator/i18n/pt.ts +176 -0
  242. package/src/tool/placeholderGenerator/i18n/ru.ts +176 -0
  243. package/src/tool/placeholderGenerator/i18n/sv.ts +176 -0
  244. package/src/tool/placeholderGenerator/i18n/tr.ts +176 -0
  245. package/src/tool/placeholderGenerator/i18n/zh.ts +177 -0
  246. package/src/tool/placeholderGenerator/index.ts +24 -0
  247. package/src/tool/promptLibrary/i18n/de.ts +131 -0
  248. package/src/tool/promptLibrary/i18n/id.ts +131 -0
  249. package/src/tool/promptLibrary/i18n/it.ts +131 -0
  250. package/src/tool/promptLibrary/i18n/ja.ts +132 -0
  251. package/src/tool/promptLibrary/i18n/ko.ts +132 -0
  252. package/src/tool/promptLibrary/i18n/nl.ts +131 -0
  253. package/src/tool/promptLibrary/i18n/pl.ts +28 -0
  254. package/src/tool/promptLibrary/i18n/pt.ts +101 -0
  255. package/src/tool/promptLibrary/i18n/ru.ts +101 -0
  256. package/src/tool/promptLibrary/i18n/sv.ts +93 -0
  257. package/src/tool/promptLibrary/i18n/tr.ts +93 -0
  258. package/src/tool/promptLibrary/i18n/zh.ts +94 -0
  259. package/src/tool/promptLibrary/index.ts +24 -0
  260. package/src/tool/readabilityCalculator/i18n/de.ts +133 -0
  261. package/src/tool/readabilityCalculator/i18n/id.ts +133 -0
  262. package/src/tool/readabilityCalculator/i18n/it.ts +133 -0
  263. package/src/tool/readabilityCalculator/i18n/ja.ts +134 -0
  264. package/src/tool/readabilityCalculator/i18n/ko.ts +134 -0
  265. package/src/tool/readabilityCalculator/i18n/nl.ts +133 -0
  266. package/src/tool/readabilityCalculator/i18n/pl.ts +29 -0
  267. package/src/tool/readabilityCalculator/i18n/pt.ts +91 -0
  268. package/src/tool/readabilityCalculator/i18n/ru.ts +91 -0
  269. package/src/tool/readabilityCalculator/i18n/sv.ts +43 -0
  270. package/src/tool/readabilityCalculator/i18n/tr.ts +43 -0
  271. package/src/tool/readabilityCalculator/i18n/zh.ts +44 -0
  272. package/src/tool/readabilityCalculator/index.ts +24 -0
  273. package/src/tool/svgSanitizer/i18n/de.ts +125 -0
  274. package/src/tool/svgSanitizer/i18n/id.ts +125 -0
  275. package/src/tool/svgSanitizer/i18n/it.ts +125 -0
  276. package/src/tool/svgSanitizer/i18n/ja.ts +126 -0
  277. package/src/tool/svgSanitizer/i18n/ko.ts +126 -0
  278. package/src/tool/svgSanitizer/i18n/nl.ts +125 -0
  279. package/src/tool/svgSanitizer/i18n/pl.ts +125 -0
  280. package/src/tool/svgSanitizer/i18n/pt.ts +30 -0
  281. package/src/tool/svgSanitizer/i18n/ru.ts +126 -0
  282. package/src/tool/svgSanitizer/i18n/sv.ts +126 -0
  283. package/src/tool/svgSanitizer/i18n/tr.ts +126 -0
  284. package/src/tool/svgSanitizer/i18n/zh.ts +126 -0
  285. package/src/tool/svgSanitizer/index.ts +24 -0
  286. package/src/tool/svgToCss/i18n/de.ts +174 -0
  287. package/src/tool/svgToCss/i18n/id.ts +174 -0
  288. package/src/tool/svgToCss/i18n/it.ts +174 -0
  289. package/src/tool/svgToCss/i18n/ja.ts +175 -0
  290. package/src/tool/svgToCss/i18n/ko.ts +175 -0
  291. package/src/tool/svgToCss/i18n/nl.ts +174 -0
  292. package/src/tool/svgToCss/i18n/pl.ts +174 -0
  293. package/src/tool/svgToCss/i18n/pt.ts +174 -0
  294. package/src/tool/svgToCss/i18n/ru.ts +174 -0
  295. package/src/tool/svgToCss/i18n/sv.ts +174 -0
  296. package/src/tool/svgToCss/i18n/tr.ts +174 -0
  297. package/src/tool/svgToCss/i18n/zh.ts +175 -0
  298. package/src/tool/svgToCss/index.ts +15 -7
  299. package/src/tool/urlCleaner/i18n/de.ts +116 -0
  300. package/src/tool/urlCleaner/i18n/id.ts +116 -0
  301. package/src/tool/urlCleaner/i18n/it.ts +116 -0
  302. package/src/tool/urlCleaner/i18n/ja.ts +117 -0
  303. package/src/tool/urlCleaner/i18n/ko.ts +117 -0
  304. package/src/tool/urlCleaner/i18n/nl.ts +116 -0
  305. package/src/tool/urlCleaner/i18n/pl.ts +29 -0
  306. package/src/tool/urlCleaner/i18n/pt.ts +43 -0
  307. package/src/tool/urlCleaner/i18n/ru.ts +43 -0
  308. package/src/tool/urlCleaner/i18n/sv.ts +43 -0
  309. package/src/tool/urlCleaner/i18n/tr.ts +43 -0
  310. package/src/tool/urlCleaner/i18n/zh.ts +44 -0
  311. package/src/tool/urlCleaner/index.ts +24 -0
  312. package/src/tool/urlEncoderDecoder/i18n/de.ts +163 -0
  313. package/src/tool/urlEncoderDecoder/i18n/id.ts +163 -0
  314. package/src/tool/urlEncoderDecoder/i18n/it.ts +163 -0
  315. package/src/tool/urlEncoderDecoder/i18n/ja.ts +163 -0
  316. package/src/tool/urlEncoderDecoder/i18n/ko.ts +163 -0
  317. package/src/tool/urlEncoderDecoder/i18n/nl.ts +163 -0
  318. package/src/tool/urlEncoderDecoder/i18n/pl.ts +162 -0
  319. package/src/tool/urlEncoderDecoder/i18n/pt.ts +162 -0
  320. package/src/tool/urlEncoderDecoder/i18n/ru.ts +163 -0
  321. package/src/tool/urlEncoderDecoder/i18n/sv.ts +163 -0
  322. package/src/tool/urlEncoderDecoder/i18n/tr.ts +162 -0
  323. package/src/tool/urlEncoderDecoder/i18n/zh.ts +163 -0
  324. package/src/tool/urlEncoderDecoder/index.ts +15 -7
  325. package/src/tool/utmGenerator/i18n/de.ts +118 -0
  326. package/src/tool/utmGenerator/i18n/id.ts +118 -0
  327. package/src/tool/utmGenerator/i18n/it.ts +118 -0
  328. package/src/tool/utmGenerator/i18n/ja.ts +118 -0
  329. package/src/tool/utmGenerator/i18n/ko.ts +118 -0
  330. package/src/tool/utmGenerator/i18n/nl.ts +118 -0
  331. package/src/tool/utmGenerator/i18n/pl.ts +117 -0
  332. package/src/tool/utmGenerator/i18n/pt.ts +118 -0
  333. package/src/tool/utmGenerator/i18n/ru.ts +118 -0
  334. package/src/tool/utmGenerator/i18n/sv.ts +118 -0
  335. package/src/tool/utmGenerator/i18n/tr.ts +117 -0
  336. package/src/tool/utmGenerator/i18n/zh.ts +118 -0
  337. package/src/tool/utmGenerator/index.ts +15 -7
  338. package/src/types.ts +1 -2
@@ -0,0 +1,167 @@
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { DuplicateCssRemoverUI } from '../ui';
4
+
5
+ const slug = 'yinelenen-css-temizleyici';
6
+ const title = 'Yinelenen CSS Kaldırma Aracı. Stil Sayfalarınızı Birleştirin ve Temizleyin';
7
+ const description =
8
+ 'Yinelenen CSS kodunu temizlemek ve kaldırmak için ücretsiz araç. Gereksiz seçicileri birleştirir, cascade\'i korur ve tarayıcıda anında dosya boyutunu küçültür.';
9
+
10
+ const faqData = [
11
+ {
12
+ question: 'CSS seçicileri tekrarlandığında ne olur?',
13
+ answer:
14
+ 'Aynı seçici birden fazla kez göründüğünde tarayıcı tüm kuralları uygular; ancak her özelliğin son tanımı öncekilerinin üzerine yazar. Bu durum, görsel sonuçta hiçbir iyileşme olmaksızın gereksiz yere şişirilmiş dosyalar ortaya çıkarır.',
15
+ },
16
+ {
17
+ question: 'Yinelenenleri kaldırırken herhangi bir özellik kaybolur mu?',
18
+ answer:
19
+ 'Hayır. Algoritma CSS cascade\'ini sıkı biçimde uygular: aynı seçici altında çakışan özellikler söz konusu olduğunda her zaman en son tanımlanan korunur. Her bloğa özgü özellikler tek bir birleşik seçici altında toplandır.',
20
+ },
21
+ {
22
+ question: 'Küçültülmüş CSS veya yorumlu CSS ile çalışır mı?',
23
+ answer:
24
+ 'Araç, işlem yapmadan önce CSS yorumlarını otomatik olarak kaldırır ve tek satırlık kodla sorunsuz çalışır. Gelişmiş iç içe geçme veya karmaşık at-rule içeren CSS için önce blokları ayırmanız önerilir.',
25
+ },
26
+ {
27
+ question: 'CSS\'im bir sunucuya gönderiliyor mu?',
28
+ answer:
29
+ 'Hayır. Tüm işlemler doğrudan tarayıcınızda yerel JavaScript aracılığıyla gerçekleşir. CSS\'inizin hiçbir parçası harici bir sunucuya iletilmez; kodunuzun gizliliği tamamen güvence altındadır.',
30
+ },
31
+ ];
32
+
33
+ const howToData = [
34
+ {
35
+ name: 'CSS\'inizi yapıştırın',
36
+ text: 'Tekrarlayan seçiciler içeren CSS dosyanızın içeriğini kopyalayıp sol taraftaki "Kirli / Yinelenen CSS" alanına yapıştırın.',
37
+ },
38
+ {
39
+ name: 'Temizlemeyi başlatın',
40
+ text: '"CSS\'i Temizle ve Birleştir" düğmesine tıklayın. Araç tüm seçicileri tarar, özellikleri birleştirir ve gereksiz blokları kaldırır.',
41
+ },
42
+ {
43
+ name: 'Sonuçları gözden geçirin ve kopyalayın',
44
+ text: 'Elde edilen byte tasarrufunu kontrol edin, ardından "Kodu Kopyala" düğmesiyle optimize edilmiş CSS\'i projenizde hemen kullanmak üzere kopyalayın.',
45
+ },
46
+ ];
47
+
48
+ const faqSchema: WithContext<FAQPage> = {
49
+ '@context': 'https://schema.org',
50
+ '@type': 'FAQPage',
51
+ mainEntity: faqData.map((item) => ({
52
+ '@type': 'Question',
53
+ name: item.question,
54
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
55
+ })),
56
+ };
57
+
58
+ const howToSchema: WithContext<HowToThing> = {
59
+ '@context': 'https://schema.org',
60
+ '@type': 'HowTo',
61
+ name: title,
62
+ description,
63
+ step: howToData.map((step, i) => ({
64
+ '@type': 'HowToStep',
65
+ position: i + 1,
66
+ name: step.name,
67
+ text: step.text,
68
+ })),
69
+ };
70
+
71
+ const appSchema: WithContext<SoftwareApplication> = {
72
+ '@context': 'https://schema.org',
73
+ '@type': 'SoftwareApplication',
74
+ name: title,
75
+ description,
76
+ applicationCategory: 'UtilityApplication',
77
+ operatingSystem: 'All',
78
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
79
+ inLanguage: 'tr',
80
+ };
81
+
82
+ const ui: DuplicateCssRemoverUI = {
83
+ labelInput: 'Kirli / Yinelenen CSS',
84
+ labelOutput: 'Temiz CSS',
85
+ placeholderInput: '.btn { padding: 10px; color: red; }\n.btn { margin: 5px; color: blue; }',
86
+ placeholderOutput: 'Optimize edilmiş ve birleştirilmiş CSS burada görünecek...',
87
+ btnClean: 'CSS\'i Temizle ve Birleştir',
88
+ btnCopy: 'Kodu Kopyala',
89
+ btnCopied: 'Kopyalandı!',
90
+ statBytesOriginal: 'Özgün Bayt',
91
+ statBytesClean: 'Temiz Bayt',
92
+ statSaving: 'Tasarruf',
93
+ };
94
+
95
+ export const content: ToolLocaleContent<DuplicateCssRemoverUI> = {
96
+ slug,
97
+ title,
98
+ description,
99
+ ui,
100
+ faqTitle: 'Sık Sorulan Sorular',
101
+ faq: faqData,
102
+ bibliographyTitle: 'Kaynaklar ve Belgeler',
103
+ bibliography: [
104
+ {
105
+ name: 'Web Vitals: CSS\'in Render-Blocking ve FCP\'ye Etkisi',
106
+ url: 'https://web.dev/articles/render-blocking-resources',
107
+ },
108
+ {
109
+ name: 'W3C Spesifikasyonu: CSS Cascade ve Kalıtım',
110
+ url: 'https://www.w3.org/TR/css-cascade-4/',
111
+ },
112
+ {
113
+ name: 'Clean CSS: CSS Küçültme Kütüphanesi ve Yöntemleri',
114
+ url: 'https://github.com/clean-css/clean-css',
115
+ },
116
+ ],
117
+ howTo: howToData,
118
+ schemas: [faqSchema, howToSchema, appSchema],
119
+ seo: [
120
+ {
121
+ type: 'title',
122
+ text: 'CSS Kodu Neden Yinelenir?',
123
+ level: 2,
124
+ },
125
+ {
126
+ type: 'paragraph',
127
+ html: 'Uzun vadeli web projelerini sürdürürken ya da eski kodla (<em>legacy code</em>) çalışırken birden fazla geliştiricinin çakışan CSS kuralları yazması son derece yaygındır. Mevcut tasarımı bozmaktan çekinen bir geliştirici, özgün kodu düzenlemek ya da yeniden yapılandırmak yerine belgenin sonuna yeni ve gereksiz bir kural eklemeyi tercih eder.',
128
+ },
129
+ {
130
+ type: 'paragraph',
131
+ html: 'Sonuç; onlarca seçicinin defalarca tanımlandığı, okunabilirliği zedeleyen ve web sayfanızın indirme boyutunu önemli ölçüde artıran verimsiz bir dosyadır.',
132
+ },
133
+ {
134
+ type: 'title',
135
+ text: 'Web Performansı Üzerindeki Gizli Etki (Web Vitals)',
136
+ level: 3,
137
+ },
138
+ {
139
+ type: 'paragraph',
140
+ html: 'Stil sayfası dosyaları tarayıcının doğal rendering sürecini engeller (<strong>Render-Blocking</strong> kaynak). Tarayıcı eksiksiz CSSOM\'u indirip oluşturana kadar ekran boş kalır.',
141
+ },
142
+ {
143
+ type: 'tip',
144
+ html: 'Gereksiz stilleri kaldırmak yalnızca kod düzeni meselesi değildir; <strong>First Contentful Paint (FCP)</strong> gibi kritik metriklerde anında ve ölçülebilir bir iyileşme sağlar.',
145
+ },
146
+ {
147
+ type: 'title',
148
+ text: 'Yinelenen Kuralları Nasıl Birleştiriyoruz',
149
+ level: 3,
150
+ },
151
+ {
152
+ type: 'paragraph',
153
+ html: 'Bu araç akıllı bir birleştirici gibi davranır. Geleneksel bir küçültücünün yaptığı gibi yalnızca boşlukları sıkıştırmak yerine, metni yinelemeli olarak tarayarak özdeş seçici kalıplarını bulur.',
154
+ },
155
+ {
156
+ type: 'list',
157
+ items: [
158
+ '<code>.box { color: red; }</code> kuralınız olduğunu ve yüz satır ileride bir <code>.box { padding: 10px; color: blue; }</code> bulunduğunu hayal edin. Araç her iki bloğu aynı <code>.box</code> seçicisi altında birleştirir ve padding değerini korur.',
159
+ '<strong>CSS Cascade Koruması:</strong> Doğrudan çakışmalarda algoritma, en son tanımlanan özelliği sıkı biçimde korur. Bu sayede belge temizlenirken özgün düzeniniz bozulmaz.',
160
+ ],
161
+ },
162
+ {
163
+ type: 'paragraph',
164
+ html: 'Kullanıcılarınızın telefonlarına kilobytes dolusu ölü metin göndermeyi bırakın. Kodunuzu tarayıcıdan tamamen çevrimdışı olarak milisaniyeler içinde birleştirin.',
165
+ },
166
+ ],
167
+ };
@@ -0,0 +1,168 @@
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { DuplicateCssRemoverUI } from '../ui';
4
+
5
+ const slug = 'duplicate-css-remover';
6
+ const title = '在线去除重复CSS工具。整合并清理您的样式表';
7
+ const description =
8
+ '免费工具,用于清理和删除重复的CSS代码。合并冗余选择器,遵循层叠规则,直接在浏览器中即时缩减文件大小。';
9
+
10
+ const faqData = [
11
+ {
12
+ question: 'CSS选择器重复会有什么影响?',
13
+ answer:
14
+ '当同一个选择器出现多次时,浏览器会应用所有规则,但每个属性的最后一次声明会覆盖之前的。这导致文件比实际需要的更大,而视觉效果却没有任何改善。',
15
+ },
16
+ {
17
+ question: '去除重复后会丢失属性吗?',
18
+ answer:
19
+ '不会。算法严格遵循CSS层叠规则:对于同一选择器下存在冲突的属性,始终保留最后声明的那个。每个块中独有的属性都会合并到一个统一的选择器下。',
20
+ },
21
+ {
22
+ question: '支持压缩过的CSS或含注释的CSS吗?',
23
+ answer:
24
+ '支持。工具在处理前会自动去除CSS注释,也能正确处理单行代码。对于包含高级嵌套或复杂at规则的CSS,建议先将代码块分离后再使用。',
25
+ },
26
+ {
27
+ question: '我的CSS会被上传到服务器吗?',
28
+ answer:
29
+ '不会。所有处理均通过本地JavaScript直接在您的浏览器中完成。您的CSS不会传输到任何外部服务器,代码隐私完全有保障。',
30
+ },
31
+ ];
32
+
33
+ const howToData = [
34
+ {
35
+ name: '粘贴您的CSS',
36
+ text: '复制含有重复选择器的CSS文件内容,粘贴到左侧标有"待处理CSS"的输入框中。',
37
+ },
38
+ {
39
+ name: '执行清理',
40
+ text: '点击"清理并合并CSS"按钮。工具将扫描所有选择器,合并属性,并删除冗余块。',
41
+ },
42
+ {
43
+ name: '查看统计并复制',
44
+ text: '查看节省的字节数,然后点击"复制代码"按钮,将优化后的CSS直接用于您的项目。',
45
+ },
46
+ ];
47
+
48
+ const faqSchema: WithContext<FAQPage> = {
49
+ '@context': 'https://schema.org',
50
+ '@type': 'FAQPage',
51
+ mainEntity: faqData.map((item) => ({
52
+ '@type': 'Question',
53
+ name: item.question,
54
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
55
+ })),
56
+ };
57
+
58
+ const howToSchema: WithContext<HowToThing> = {
59
+ '@context': 'https://schema.org',
60
+ '@type': 'HowTo',
61
+ name: title,
62
+ description,
63
+ step: howToData.map((step, i) => ({
64
+ '@type': 'HowToStep',
65
+ position: i + 1,
66
+ name: step.name,
67
+ text: step.text,
68
+ })),
69
+ };
70
+
71
+ const appSchema: WithContext<SoftwareApplication> = {
72
+ '@context': 'https://schema.org',
73
+ '@type': 'SoftwareApplication',
74
+ name: title,
75
+ description,
76
+ applicationCategory: 'UtilityApplication',
77
+ operatingSystem: 'All',
78
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
79
+ inLanguage: 'zh',
80
+ };
81
+
82
+ const ui: DuplicateCssRemoverUI = {
83
+ labelInput: '待处理CSS(含重复)',
84
+ labelOutput: '清理后的CSS',
85
+ placeholderInput: '.btn { padding: 10px; color: red; }\n.btn { margin: 5px; color: blue; }',
86
+ placeholderOutput: '优化并合并后的CSS将显示在此处...',
87
+ btnClean: '清理并合并CSS',
88
+ btnCopy: '复制代码',
89
+ btnCopied: '已复制!',
90
+ statBytesOriginal: '原始字节数',
91
+ statBytesClean: '清理后字节数',
92
+ statSaving: '节省',
93
+ };
94
+
95
+ export const content: ToolLocaleContent<DuplicateCssRemoverUI> = {
96
+ slug,
97
+ title,
98
+ description,
99
+ ui,
100
+ faqTitle: '常见问题',
101
+ faq: faqData,
102
+ bibliographyTitle: '参考资料与文档',
103
+ bibliography: [
104
+ {
105
+ name: 'Web Vitals:CSS对渲染阻塞和FCP的影响',
106
+ url: 'https://web.dev/articles/render-blocking-resources',
107
+ },
108
+ {
109
+ name: 'W3C规范:CSS层叠与继承',
110
+ url: 'https://www.w3.org/TR/css-cascade-4/',
111
+ },
112
+ {
113
+ name: 'Clean CSS:CSS压缩库与方法论',
114
+ url: 'https://github.com/clean-css/clean-css',
115
+ },
116
+ ],
117
+ howTo: howToData,
118
+ schemas: [faqSchema, howToSchema, appSchema],
119
+ seo: [
120
+ {
121
+ type: 'title',
122
+ text: 'CSS代码为什么会出现重复?',
123
+ level: 2,
124
+ },
125
+ {
126
+ type: 'paragraph',
127
+ html: '在长期维护的Web项目或遗留代码中,多名开发者写出相互重叠的CSS规则是极为常见的现象。为了避免破坏现有设计,开发者往往选择在文档末尾添加新的冗余规则,而不是去修改或重构原有代码。',
128
+ },
129
+ {
130
+ type: 'paragraph',
131
+ html: '结果是一个低效的文件,其中有数十个反复声明的选择器,既损害代码可读性,又大幅增加了网页的下载体积。',
132
+ },
133
+ {
134
+ type: 'title',
135
+ text: '对Web性能(Web Vitals)的隐性影响',
136
+ level: 3,
137
+ },
138
+ {
139
+ type: 'paragraph',
140
+ html: '样式表文件会阻塞浏览器的正常渲染(即<strong>渲染阻塞</strong>资源)。在浏览器下载并构建完整的CSSOM之前,页面屏幕将保持空白。',
141
+ },
142
+ {
143
+ type: 'tip',
144
+ html: '清除冗余样式不仅仅是代码整洁的问题,更是对<strong>首次内容绘制(FCP)</strong>等关键性能指标的即时、可量化的改善。',
145
+ },
146
+ {
147
+ type: 'title',
148
+ text: '我们如何合并重复规则',
149
+ level: 3,
150
+ },
151
+ {
152
+ type: 'paragraph',
153
+ html: '本工具的工作原理类似于智能汇编器。它不像传统压缩工具那样只是压缩空白字符,而是递归扫描文本,查找完全相同的选择器模式。',
154
+ },
155
+ {
156
+ type: 'list',
157
+ items: [
158
+ '假设您有规则 <code>.box { color: red; }</code>,而一百行之后又有 <code>.box { padding: 10px; color: blue; }</code>。工具会将这两个块合并到同一个 <code>.box</code> 选择器下,同时保留 padding 属性。',
159
+ '<strong>CSS层叠保护:</strong>对于直接冲突的属性,算法严格保留最后声明的那个。这确保了在清理文档后,原有布局不会出现错乱。',
160
+ ],
161
+ },
162
+ {
163
+ type: 'paragraph',
164
+ html: '不要再向用户的手机发送数千字节的无效文本了。直接在浏览器中完全离线操作,毫秒之间完成代码合并。',
165
+ },
166
+ ],
167
+ };
168
+
@@ -7,10 +7,6 @@ import type { DuplicateCssRemoverUI } from './ui';
7
7
 
8
8
  export type DuplicateCssRemoverLocaleContent = ToolLocaleContent<DuplicateCssRemoverUI>;
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 duplicateCssRemover: DeveloperToolEntry<DuplicateCssRemoverUI> = {
15
11
  id: 'duplicate-css-remover',
16
12
  icons: {
@@ -18,9 +14,21 @@ export const duplicateCssRemover: DeveloperToolEntry<DuplicateCssRemoverUI> = {
18
14
  fg: 'mdi:language-css3',
19
15
  },
20
16
  i18n: {
21
- es: async () => es,
22
- en: async () => en,
23
- fr: async () => fr,
17
+ de: async () => (await import('./i18n/de')).content,
18
+ en: async () => (await import('./i18n/en')).content,
19
+ es: async () => (await import('./i18n/es')).content,
20
+ fr: async () => (await import('./i18n/fr')).content,
21
+ id: async () => (await import('./i18n/id')).content,
22
+ it: async () => (await import('./i18n/it')).content,
23
+ ja: async () => (await import('./i18n/ja')).content,
24
+ ko: async () => (await import('./i18n/ko')).content,
25
+ nl: async () => (await import('./i18n/nl')).content,
26
+ pl: async () => (await import('./i18n/pl')).content,
27
+ pt: async () => (await import('./i18n/pt')).content,
28
+ ru: async () => (await import('./i18n/ru')).content,
29
+ sv: async () => (await import('./i18n/sv')).content,
30
+ tr: async () => (await import('./i18n/tr')).content,
31
+ zh: async () => (await import('./i18n/zh')).content,
24
32
  },
25
33
  };
26
34
 
@@ -0,0 +1,174 @@
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { GeneradorSecurityTxtUI } from '../ui';
4
+
5
+ const slug = 'security-txt-generator-rfc-9116-de';
6
+ const title = 'Security.txt Generator RFC 9116';
7
+ const description = 'Erstellen Sie Ihre professionelle security.txt-Datei, um die Meldung von Sicherheitslücken zu erleichtern und internationale Webstandards zu erfüllen.';
8
+
9
+ const faqData = [
10
+ {
11
+ question: 'Was ist die security.txt-Datei?',
12
+ answer: 'Es handelt sich um einen Standard (RFC 9116), der es Webseiten ermöglicht, festzulegen, wie Sicherheitsforscher sie kontaktieren sollen, um Schwachstellen verantwortungsvoll zu melden.',
13
+ },
14
+ {
15
+ question: 'Wo sollte die security.txt-Datei abgelegt werden?',
16
+ answer: 'Der empfohlene Standardspeicherort ist der Ordner /.well-known/ Ihrer Domain, was zur URL https://example.com/.well-known/security.txt führt.',
17
+ },
18
+ {
19
+ question: 'Warum ist das Ablaufdatum Pflicht?',
20
+ answer: 'Um sicherzustellen, dass Kontaktinformationen nicht veralten. Fehlt ein gültiges Ablaufdatum, vertrauen Forscher möglicherweise nicht darauf, dass die Kommunikationskanäle noch aktiv sind.',
21
+ },
22
+ {
23
+ question: 'Welche Felder sind in einer security.txt erforderlich?',
24
+ answer: 'Laut RFC 9116 sind die Pflichtfelder „Contact" (mit einer E-Mail-Adresse oder URL) und „Expires" (mit einem zukünftigen Datum im ISO-8601-Format).',
25
+ },
26
+ ];
27
+
28
+ const howToData = [
29
+ { name: 'Felder ausfüllen', text: 'Tragen Sie Ihre E-Mail-Adresse oder Kontakt-URL ein und wählen Sie ein Ablaufdatum.' },
30
+ { name: 'Optionale Felder hinzufügen', text: 'Ergänzen Sie weitere Angaben wie Ihren PGP-Schlüssel, Ihre Sicherheitsrichtlinie oder Stellenangebote.' },
31
+ { name: 'Datei herunterladen oder kopieren', text: 'Klicken Sie auf „.txt herunterladen" oder kopieren Sie den Inhalt und speichern Sie ihn als security.txt.' },
32
+ { name: 'Auf den Server hochladen', text: 'Legen Sie die Datei im Ordner /.well-known/ Ihrer Domain ab.' },
33
+ ];
34
+
35
+ const faqSchema: WithContext<FAQPage> = {
36
+ '@context': 'https://schema.org',
37
+ '@type': 'FAQPage',
38
+ mainEntity: faqData.map((item) => ({
39
+ '@type': 'Question',
40
+ name: item.question,
41
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
42
+ })),
43
+ };
44
+
45
+ const howToSchema: WithContext<HowToThing> = {
46
+ '@context': 'https://schema.org',
47
+ '@type': 'HowTo',
48
+ name: title,
49
+ description,
50
+ step: howToData.map((s, i) => ({ '@type': 'HowToStep', position: i + 1, name: s.name, text: s.text })),
51
+ };
52
+
53
+ const appSchema: WithContext<SoftwareApplication> = {
54
+ '@context': 'https://schema.org',
55
+ '@type': 'SoftwareApplication',
56
+ name: title,
57
+ description,
58
+ applicationCategory: 'UtilityApplication',
59
+ operatingSystem: 'All',
60
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
61
+ inLanguage: 'de',
62
+ };
63
+
64
+ const ui: GeneradorSecurityTxtUI = {
65
+ titleBasicFields: 'Pflichtfelder',
66
+ labelContact: 'Kontakt (E-Mail oder URL)',
67
+ placeholderContact: 'mailto:security@example.com oder https://example.com/kontakt',
68
+ contactTip: 'Adresse, an die Sicherheitsmeldungen gesendet werden sollen.',
69
+ labelExpires: 'Ablaufdatum',
70
+ expiresTip: 'Sollte höchstens ein Jahr in der Zukunft liegen.',
71
+ titleOptionalFields: 'Optionale Felder',
72
+ labelEncryption: 'Öffentlicher Schlüssel',
73
+ placeholderEncryption: 'https://example.com/pgp-key.txt',
74
+ encryptionTip: 'Link zu Ihrem PGP-Schlüssel für verschlüsselte Meldungen.',
75
+ labelPolicy: 'Sicherheitsrichtlinie',
76
+ placeholderPolicy: 'https://example.com/sicherheit/richtlinie/',
77
+ policyTip: 'Seite, die den Umgang mit Schwachstellen beschreibt.',
78
+ labelAcknowledgments: 'Danksagungen',
79
+ placeholderAcknowledgments: 'https://example.com/sicherheit/hall-of-fame/',
80
+ acknowledgmentsTip: 'Seite zur Würdigung von Sicherheitsforschern.',
81
+ labelHiring: 'Stellenangebote',
82
+ placeholderHiring: 'https://example.com/jobs',
83
+ hiringTip: 'Link zu Sicherheitsstellen im Unternehmen.',
84
+ resultTitle: 'Vorschau (security.txt)',
85
+ btnCopy: 'Code kopieren',
86
+ btnDownload: '.txt herunterladen',
87
+ copiedMessage: 'Kopiert',
88
+ generatingMessage: 'security.txt-Datei wird erstellt...',
89
+ comment: 'Erstellt',
90
+ };
91
+
92
+ export const content: ToolLocaleContent<GeneradorSecurityTxtUI> = {
93
+ slug,
94
+ title,
95
+ description,
96
+ ui,
97
+ faqTitle: 'Häufig gestellte Fragen',
98
+ faq: faqData,
99
+ bibliographyTitle: 'Technische Ressourcen zu Security.txt',
100
+ bibliography: [
101
+ { name: 'RFC 9116: A File Format to Aid in Security Vulnerability Disclosure', url: 'https://datatracker.ietf.org/doc/html/rfc9116' },
102
+ { name: 'Security.txt Official Website', url: 'https://securitytxt.org/' },
103
+ { name: 'OWASP: Vulnerability Disclosure Cheat Sheet', url: 'https://cheatsheetseries.owasp.org/cheatsheets/Vulnerability_Disclosure_Cheat_Sheet.html' },
104
+ ],
105
+ howTo: howToData,
106
+ schemas: [faqSchema, howToSchema, appSchema],
107
+ seo: [
108
+ { type: 'title', text: 'Was ist eine Security.txt-Datei und warum sollten Sie eine erstellen?', level: 2 },
109
+ {
110
+ type: 'paragraph',
111
+ html: 'Im heutigen Cybersicherheitsumfeld sind Transparenz und Kommunikation entscheidend. Als Systemadministrator, Webentwickler oder Betreiber eines digitalen Unternehmens kennen Sie sicher Textdateien, die Maschinen helfen, Ihre Website zu verstehen, wie <code>robots.txt</code> oder <code>ads.txt</code>. Es gibt jedoch einen weniger bekannten, aber grundlegenden Standard für die Integrität Ihrer Plattform: <strong>Security.txt</strong>, definiert durch <strong>RFC 9116</strong>.',
112
+ },
113
+ {
114
+ type: 'paragraph',
115
+ html: 'Der Zweck von <strong>security.txt</strong> besteht darin, Sicherheitsforschern eine standardisierte Möglichkeit zu bieten, die Verantwortlichen einer Website zu kontaktieren, wenn sie eine Schwachstelle entdecken. Ohne diese Datei weiß ein ethischer Hacker, der einen Fehler in Ihrem System findet, möglicherweise nicht, an wen er sich wenden soll — mit der Folge, dass die Information verloren geht, ohne Vorwarnung veröffentlicht oder von Angreifern ausgenutzt wird.',
116
+ },
117
+ { type: 'title', text: 'Security.txt nach RFC 9116 erstellen und einbinden', level: 2 },
118
+ {
119
+ type: 'paragraph',
120
+ html: 'Der <strong>Standard für den Kontakt zu Sicherheitsforschern</strong> schreibt vor, dass diese Datei an einem bestimmten Ort auf Ihrem Server liegen muss: im Ordner <code>/.well-known/</code>. Der finale Pfad lautet in der Regel <code>https://ihredomain.de/.well-known/security.txt</code>. Die Ablage im Root-Verzeichnis (<code>/security.txt</code>) ist zwar ebenfalls zulässig, wird von automatischen Scan-Tools jedoch weniger bevorzugt.',
121
+ },
122
+ { type: 'title', text: 'Pflichtfelder, die nicht fehlen dürfen', level: 3 },
123
+ {
124
+ type: 'paragraph',
125
+ html: 'Ihre <strong>security.txt</strong> muss mindestens zwei kritische Elemente enthalten:',
126
+ },
127
+ {
128
+ type: 'list',
129
+ items: [
130
+ '<strong>Contact:</strong> E-Mail-Adresse oder URL eines Formulars für eingehende Meldungen. Muss mit <code>mailto:</code> oder <code>https://</code> beginnen.',
131
+ '<strong>Expires:</strong> Ein Datum im ISO-8601-Format, das angibt, wann die Dateiinformationen ungültig werden. Es wird empfohlen, nicht mehr als ein Jahr in der Zukunft anzugeben.',
132
+ ],
133
+ },
134
+ { type: 'code', text: 'Contact: mailto:security@ihrunternehmen.de\nExpires: 2025-12-31T23:59:59.000Z' },
135
+ { type: 'title', text: 'Optionale Felder für erweiterten Schutz', level: 3 },
136
+ {
137
+ type: 'paragraph',
138
+ html: 'Für Websites, die einen umfassenderen <strong>Webseitenschutz</strong> anstreben, bietet der Standard weitere Felder:',
139
+ },
140
+ {
141
+ type: 'list',
142
+ items: [
143
+ '<strong>Encryption:</strong> Ein Link zu Ihrem öffentlichen PGP-Schlüssel, damit Forscher Ihnen verschlüsselte Informationen zusenden können.',
144
+ '<strong>Policy:</strong> Ein Link zu Ihrer Sicherheitsrichtlinien-Seite, auf der Sie den Prozess der verantwortungsvollen Offenlegung erläutern.',
145
+ '<strong>Acknowledgments:</strong> Ein Link zu Ihrer „Hall of Fame" oder Danksagungsseite für Sicherheitsforscher.',
146
+ '<strong>Hiring:</strong> Ein Link zu Ihren offenen Stellen im Bereich Cybersicherheit.',
147
+ ],
148
+ },
149
+ { type: 'title', text: 'Vorteile unseres kostenlosen Security.txt-Generators', level: 2 },
150
+ {
151
+ type: 'paragraph',
152
+ html: 'Viele fragen sich, wie sie schnell und unkompliziert einen <strong>Sicherheitskontakt</strong> für ihre Website einrichten können. Mit unserem Tool stellen Sie sicher, dass Ihre Datei exakt dem RFC-9116-Format entspricht, ohne aufwendige technische Dokumente lesen zu müssen.',
153
+ },
154
+ {
155
+ type: 'paragraph',
156
+ html: 'Ein Generator bewahrt Sie vor typischen Syntaxfehlern. Das Vergessen des Präfixes <code>mailto:</code> oder eine falsch formatierte Zeitzone im Ablaufdatum kann dazu führen, dass automatisierte Tools von Forschern Ihre Datei einfach ignorieren.',
157
+ },
158
+ { type: 'title', text: 'Auswirkungen auf SEO und Web-Reputation', level: 3 },
159
+ {
160
+ type: 'paragraph',
161
+ html: 'Die Datei <code>security.txt</code> ist zwar kein direkter Rankingfaktor bei Google wie Ladegeschwindigkeit oder HTTPS, wirkt sich aber indirekt aus. Eine Website, die Schwachstellen gut verwaltet, vermeidet laute Hacks (Defacement, Spam-Injektionen), die das SEO innerhalb von Stunden ruinieren können. Darüber hinaus vergeben viele Plattformen für unternehmensweites Sicherheitsrating (wie SecurityScorecard oder BitSight) Bonuspunkte an Domains, die diesen Standard implementieren.',
162
+ },
163
+ { type: 'title', text: 'Fazit: Ein einfacher Schritt für mehr Sicherheit im Web', level: 2 },
164
+ {
165
+ type: 'paragraph',
166
+ html: 'Kurz gesagt: <strong>security.txt herunterladen</strong> und auf Ihren Server hochladen gehört zu den schnellsten und wirkungsvollsten Sicherheitsmaßnahmen, die Sie noch heute umsetzen können. Sie erleichtern den „Guten" die Arbeit, schrecken Neugierige ab und signalisieren der Welt, dass Sie Datenschutz und Nutzerdaten ernst nehmen.',
167
+ },
168
+ {
169
+ type: 'paragraph',
170
+ html: 'Warten Sie nicht auf einen Sicherheitsvorfall, um es zu bereuen, keinen Kommunikationskanal bereitgestellt zu haben. Nutzen Sie unseren <strong>Security.txt-Generator</strong> jetzt und halten Sie Ihr digitales Ökosystem unter Kontrolle.',
171
+ },
172
+ ],
173
+ };
174
+