@jjlmoya/utils-developer 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 (339) 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/index.ts +12 -0
  16. package/src/tests/faq_count.test.ts +1 -1
  17. package/src/tests/i18n_coverage.test.ts +36 -0
  18. package/src/tests/locale_completeness.test.ts +2 -2
  19. package/src/tests/slug_uniqueness.test.ts +81 -0
  20. package/src/tool/aspectRatio/i18n/de.ts +177 -0
  21. package/src/tool/aspectRatio/i18n/id.ts +177 -0
  22. package/src/tool/aspectRatio/i18n/it.ts +177 -0
  23. package/src/tool/aspectRatio/i18n/ja.ts +178 -0
  24. package/src/tool/aspectRatio/i18n/ko.ts +178 -0
  25. package/src/tool/aspectRatio/i18n/nl.ts +178 -0
  26. package/src/tool/aspectRatio/i18n/pl.ts +177 -0
  27. package/src/tool/aspectRatio/i18n/pt.ts +177 -0
  28. package/src/tool/aspectRatio/i18n/ru.ts +177 -0
  29. package/src/tool/aspectRatio/i18n/sv.ts +177 -0
  30. package/src/tool/aspectRatio/i18n/tr.ts +177 -0
  31. package/src/tool/aspectRatio/i18n/zh.ts +178 -0
  32. package/src/tool/aspectRatio/index.ts +15 -7
  33. package/src/tool/calculadoraTiempoDatos/i18n/de.ts +150 -0
  34. package/src/tool/calculadoraTiempoDatos/i18n/id.ts +150 -0
  35. package/src/tool/calculadoraTiempoDatos/i18n/it.ts +150 -0
  36. package/src/tool/calculadoraTiempoDatos/i18n/ja.ts +151 -0
  37. package/src/tool/calculadoraTiempoDatos/i18n/ko.ts +151 -0
  38. package/src/tool/calculadoraTiempoDatos/i18n/nl.ts +150 -0
  39. package/src/tool/calculadoraTiempoDatos/i18n/pl.ts +150 -0
  40. package/src/tool/calculadoraTiempoDatos/i18n/pt.ts +150 -0
  41. package/src/tool/calculadoraTiempoDatos/i18n/ru.ts +151 -0
  42. package/src/tool/calculadoraTiempoDatos/i18n/sv.ts +150 -0
  43. package/src/tool/calculadoraTiempoDatos/i18n/tr.ts +150 -0
  44. package/src/tool/calculadoraTiempoDatos/i18n/zh.ts +151 -0
  45. package/src/tool/calculadoraTiempoDatos/index.ts +15 -7
  46. package/src/tool/colorConverter/i18n/de.ts +126 -0
  47. package/src/tool/colorConverter/i18n/id.ts +126 -0
  48. package/src/tool/colorConverter/i18n/it.ts +126 -0
  49. package/src/tool/colorConverter/i18n/ja.ts +127 -0
  50. package/src/tool/colorConverter/i18n/ko.ts +127 -0
  51. package/src/tool/colorConverter/i18n/nl.ts +126 -0
  52. package/src/tool/colorConverter/i18n/pl.ts +126 -0
  53. package/src/tool/colorConverter/i18n/pt.ts +126 -0
  54. package/src/tool/colorConverter/i18n/ru.ts +126 -0
  55. package/src/tool/colorConverter/i18n/sv.ts +126 -0
  56. package/src/tool/colorConverter/i18n/tr.ts +126 -0
  57. package/src/tool/colorConverter/i18n/zh.ts +127 -0
  58. package/src/tool/colorConverter/index.ts +15 -7
  59. package/src/tool/conversorExcelCsvHtml/i18n/de.ts +129 -0
  60. package/src/tool/conversorExcelCsvHtml/i18n/id.ts +129 -0
  61. package/src/tool/conversorExcelCsvHtml/i18n/it.ts +129 -0
  62. package/src/tool/conversorExcelCsvHtml/i18n/ja.ts +130 -0
  63. package/src/tool/conversorExcelCsvHtml/i18n/ko.ts +130 -0
  64. package/src/tool/conversorExcelCsvHtml/i18n/nl.ts +129 -0
  65. package/src/tool/conversorExcelCsvHtml/i18n/pl.ts +129 -0
  66. package/src/tool/conversorExcelCsvHtml/i18n/pt.ts +129 -0
  67. package/src/tool/conversorExcelCsvHtml/i18n/ru.ts +129 -0
  68. package/src/tool/conversorExcelCsvHtml/i18n/sv.ts +129 -0
  69. package/src/tool/conversorExcelCsvHtml/i18n/tr.ts +129 -0
  70. package/src/tool/conversorExcelCsvHtml/i18n/zh.ts +130 -0
  71. package/src/tool/conversorExcelCsvHtml/index.ts +15 -7
  72. package/src/tool/cronGenerator/i18n/de.ts +192 -0
  73. package/src/tool/cronGenerator/i18n/es.ts +2 -1
  74. package/src/tool/cronGenerator/i18n/fr.ts +2 -1
  75. package/src/tool/cronGenerator/i18n/id.ts +192 -0
  76. package/src/tool/cronGenerator/i18n/it.ts +192 -0
  77. package/src/tool/cronGenerator/i18n/ja.ts +192 -0
  78. package/src/tool/cronGenerator/i18n/ko.ts +192 -0
  79. package/src/tool/cronGenerator/i18n/nl.ts +192 -0
  80. package/src/tool/cronGenerator/i18n/pl.ts +192 -0
  81. package/src/tool/cronGenerator/i18n/pt.ts +192 -0
  82. package/src/tool/cronGenerator/i18n/ru.ts +192 -0
  83. package/src/tool/cronGenerator/i18n/sv.ts +192 -0
  84. package/src/tool/cronGenerator/i18n/tr.ts +192 -0
  85. package/src/tool/cronGenerator/i18n/zh.ts +192 -0
  86. package/src/tool/cronGenerator/index.ts +15 -7
  87. package/src/tool/cssSpecificityCalculator/i18n/de.ts +168 -0
  88. package/src/tool/cssSpecificityCalculator/i18n/id.ts +168 -0
  89. package/src/tool/cssSpecificityCalculator/i18n/it.ts +168 -0
  90. package/src/tool/cssSpecificityCalculator/i18n/ja.ts +169 -0
  91. package/src/tool/cssSpecificityCalculator/i18n/ko.ts +169 -0
  92. package/src/tool/cssSpecificityCalculator/i18n/nl.ts +168 -0
  93. package/src/tool/cssSpecificityCalculator/i18n/pl.ts +168 -0
  94. package/src/tool/cssSpecificityCalculator/i18n/pt.ts +168 -0
  95. package/src/tool/cssSpecificityCalculator/i18n/ru.ts +168 -0
  96. package/src/tool/cssSpecificityCalculator/i18n/sv.ts +168 -0
  97. package/src/tool/cssSpecificityCalculator/i18n/tr.ts +168 -0
  98. package/src/tool/cssSpecificityCalculator/i18n/zh.ts +169 -0
  99. package/src/tool/cssSpecificityCalculator/index.ts +15 -7
  100. package/src/tool/cssToInlineConverter/i18n/de.ts +160 -0
  101. package/src/tool/cssToInlineConverter/i18n/id.ts +160 -0
  102. package/src/tool/cssToInlineConverter/i18n/it.ts +160 -0
  103. package/src/tool/cssToInlineConverter/i18n/ja.ts +161 -0
  104. package/src/tool/cssToInlineConverter/i18n/ko.ts +161 -0
  105. package/src/tool/cssToInlineConverter/i18n/nl.ts +160 -0
  106. package/src/tool/cssToInlineConverter/i18n/pl.ts +160 -0
  107. package/src/tool/cssToInlineConverter/i18n/pt.ts +160 -0
  108. package/src/tool/cssToInlineConverter/i18n/ru.ts +160 -0
  109. package/src/tool/cssToInlineConverter/i18n/sv.ts +160 -0
  110. package/src/tool/cssToInlineConverter/i18n/tr.ts +160 -0
  111. package/src/tool/cssToInlineConverter/i18n/zh.ts +161 -0
  112. package/src/tool/cssToInlineConverter/index.ts +15 -7
  113. package/src/tool/duplicateCssRemover/i18n/de.ts +167 -0
  114. package/src/tool/duplicateCssRemover/i18n/id.ts +167 -0
  115. package/src/tool/duplicateCssRemover/i18n/it.ts +167 -0
  116. package/src/tool/duplicateCssRemover/i18n/ja.ts +168 -0
  117. package/src/tool/duplicateCssRemover/i18n/ko.ts +168 -0
  118. package/src/tool/duplicateCssRemover/i18n/nl.ts +167 -0
  119. package/src/tool/duplicateCssRemover/i18n/pl.ts +167 -0
  120. package/src/tool/duplicateCssRemover/i18n/pt.ts +167 -0
  121. package/src/tool/duplicateCssRemover/i18n/ru.ts +167 -0
  122. package/src/tool/duplicateCssRemover/i18n/sv.ts +167 -0
  123. package/src/tool/duplicateCssRemover/i18n/tr.ts +167 -0
  124. package/src/tool/duplicateCssRemover/i18n/zh.ts +168 -0
  125. package/src/tool/duplicateCssRemover/index.ts +15 -7
  126. package/src/tool/generadorSecurityTxt/i18n/de.ts +174 -0
  127. package/src/tool/generadorSecurityTxt/i18n/id.ts +174 -0
  128. package/src/tool/generadorSecurityTxt/i18n/it.ts +174 -0
  129. package/src/tool/generadorSecurityTxt/i18n/ja.ts +174 -0
  130. package/src/tool/generadorSecurityTxt/i18n/ko.ts +174 -0
  131. package/src/tool/generadorSecurityTxt/i18n/nl.ts +174 -0
  132. package/src/tool/generadorSecurityTxt/i18n/pl.ts +174 -0
  133. package/src/tool/generadorSecurityTxt/i18n/pt.ts +174 -0
  134. package/src/tool/generadorSecurityTxt/i18n/ru.ts +174 -0
  135. package/src/tool/generadorSecurityTxt/i18n/sv.ts +174 -0
  136. package/src/tool/generadorSecurityTxt/i18n/tr.ts +174 -0
  137. package/src/tool/generadorSecurityTxt/i18n/zh.ts +174 -0
  138. package/src/tool/generadorSecurityTxt/index.ts +15 -7
  139. package/src/tool/hashGenerator/i18n/de.ts +119 -0
  140. package/src/tool/hashGenerator/i18n/id.ts +119 -0
  141. package/src/tool/hashGenerator/i18n/it.ts +118 -0
  142. package/src/tool/hashGenerator/i18n/ja.ts +119 -0
  143. package/src/tool/hashGenerator/i18n/ko.ts +119 -0
  144. package/src/tool/hashGenerator/i18n/nl.ts +119 -0
  145. package/src/tool/hashGenerator/i18n/pl.ts +118 -0
  146. package/src/tool/hashGenerator/i18n/pt.ts +118 -0
  147. package/src/tool/hashGenerator/i18n/ru.ts +119 -0
  148. package/src/tool/hashGenerator/i18n/sv.ts +119 -0
  149. package/src/tool/hashGenerator/i18n/tr.ts +118 -0
  150. package/src/tool/hashGenerator/i18n/zh.ts +119 -0
  151. package/src/tool/hashGenerator/index.ts +15 -7
  152. package/src/tool/inspectorCertificadosSsl/i18n/de.ts +214 -0
  153. package/src/tool/inspectorCertificadosSsl/i18n/id.ts +215 -0
  154. package/src/tool/inspectorCertificadosSsl/i18n/it.ts +214 -0
  155. package/src/tool/inspectorCertificadosSsl/i18n/ja.ts +215 -0
  156. package/src/tool/inspectorCertificadosSsl/i18n/ko.ts +215 -0
  157. package/src/tool/inspectorCertificadosSsl/i18n/nl.ts +215 -0
  158. package/src/tool/inspectorCertificadosSsl/i18n/pl.ts +215 -0
  159. package/src/tool/inspectorCertificadosSsl/i18n/pt.ts +214 -0
  160. package/src/tool/inspectorCertificadosSsl/i18n/ru.ts +215 -0
  161. package/src/tool/inspectorCertificadosSsl/i18n/sv.ts +215 -0
  162. package/src/tool/inspectorCertificadosSsl/i18n/tr.ts +215 -0
  163. package/src/tool/inspectorCertificadosSsl/i18n/zh.ts +215 -0
  164. package/src/tool/inspectorCertificadosSsl/index.ts +24 -0
  165. package/src/tool/jsonFormatter/i18n/de.ts +157 -0
  166. package/src/tool/jsonFormatter/i18n/es.ts +2 -1
  167. package/src/tool/jsonFormatter/i18n/fr.ts +2 -1
  168. package/src/tool/jsonFormatter/i18n/id.ts +157 -0
  169. package/src/tool/jsonFormatter/i18n/it.ts +156 -0
  170. package/src/tool/jsonFormatter/i18n/ja.ts +157 -0
  171. package/src/tool/jsonFormatter/i18n/ko.ts +157 -0
  172. package/src/tool/jsonFormatter/i18n/nl.ts +157 -0
  173. package/src/tool/jsonFormatter/i18n/pl.ts +156 -0
  174. package/src/tool/jsonFormatter/i18n/pt.ts +156 -0
  175. package/src/tool/jsonFormatter/i18n/ru.ts +157 -0
  176. package/src/tool/jsonFormatter/i18n/sv.ts +157 -0
  177. package/src/tool/jsonFormatter/i18n/tr.ts +157 -0
  178. package/src/tool/jsonFormatter/i18n/zh.ts +157 -0
  179. package/src/tool/jsonFormatter/index.ts +15 -7
  180. package/src/tool/keycode/i18n/de.ts +161 -0
  181. package/src/tool/keycode/i18n/es.ts +2 -1
  182. package/src/tool/keycode/i18n/fr.ts +2 -1
  183. package/src/tool/keycode/i18n/id.ts +161 -0
  184. package/src/tool/keycode/i18n/it.ts +161 -0
  185. package/src/tool/keycode/i18n/ja.ts +161 -0
  186. package/src/tool/keycode/i18n/ko.ts +161 -0
  187. package/src/tool/keycode/i18n/nl.ts +161 -0
  188. package/src/tool/keycode/i18n/pl.ts +161 -0
  189. package/src/tool/keycode/i18n/pt.ts +160 -0
  190. package/src/tool/keycode/i18n/ru.ts +160 -0
  191. package/src/tool/keycode/i18n/sv.ts +160 -0
  192. package/src/tool/keycode/i18n/tr.ts +160 -0
  193. package/src/tool/keycode/i18n/zh.ts +161 -0
  194. package/src/tool/keycode/index.ts +15 -7
  195. package/src/tool/llmCostCalculator/i18n/de.ts +166 -0
  196. package/src/tool/llmCostCalculator/i18n/fr.ts +2 -1
  197. package/src/tool/llmCostCalculator/i18n/id.ts +166 -0
  198. package/src/tool/llmCostCalculator/i18n/it.ts +166 -0
  199. package/src/tool/llmCostCalculator/i18n/ja.ts +166 -0
  200. package/src/tool/llmCostCalculator/i18n/ko.ts +166 -0
  201. package/src/tool/llmCostCalculator/i18n/nl.ts +166 -0
  202. package/src/tool/llmCostCalculator/i18n/pl.ts +165 -0
  203. package/src/tool/llmCostCalculator/i18n/pt.ts +165 -0
  204. package/src/tool/llmCostCalculator/i18n/ru.ts +165 -0
  205. package/src/tool/llmCostCalculator/i18n/sv.ts +165 -0
  206. package/src/tool/llmCostCalculator/i18n/tr.ts +165 -0
  207. package/src/tool/llmCostCalculator/i18n/zh.ts +166 -0
  208. package/src/tool/llmCostCalculator/index.ts +24 -0
  209. package/src/tool/mobileMockupGenerator/i18n/de.ts +121 -0
  210. package/src/tool/mobileMockupGenerator/i18n/id.ts +121 -0
  211. package/src/tool/mobileMockupGenerator/i18n/it.ts +121 -0
  212. package/src/tool/mobileMockupGenerator/i18n/ja.ts +122 -0
  213. package/src/tool/mobileMockupGenerator/i18n/ko.ts +122 -0
  214. package/src/tool/mobileMockupGenerator/i18n/nl.ts +121 -0
  215. package/src/tool/mobileMockupGenerator/i18n/pl.ts +31 -0
  216. package/src/tool/mobileMockupGenerator/i18n/pt.ts +121 -0
  217. package/src/tool/mobileMockupGenerator/i18n/ru.ts +121 -0
  218. package/src/tool/mobileMockupGenerator/i18n/sv.ts +121 -0
  219. package/src/tool/mobileMockupGenerator/i18n/tr.ts +121 -0
  220. package/src/tool/mobileMockupGenerator/i18n/zh.ts +122 -0
  221. package/src/tool/mobileMockupGenerator/index.ts +24 -0
  222. package/src/tool/musicalTypography/i18n/de.ts +179 -0
  223. package/src/tool/musicalTypography/i18n/id.ts +179 -0
  224. package/src/tool/musicalTypography/i18n/it.ts +179 -0
  225. package/src/tool/musicalTypography/i18n/ja.ts +180 -0
  226. package/src/tool/musicalTypography/i18n/ko.ts +180 -0
  227. package/src/tool/musicalTypography/i18n/nl.ts +179 -0
  228. package/src/tool/musicalTypography/i18n/pl.ts +179 -0
  229. package/src/tool/musicalTypography/i18n/pt.ts +101 -0
  230. package/src/tool/musicalTypography/i18n/ru.ts +47 -0
  231. package/src/tool/musicalTypography/i18n/sv.ts +29 -0
  232. package/src/tool/musicalTypography/i18n/tr.ts +29 -0
  233. package/src/tool/musicalTypography/i18n/zh.ts +30 -0
  234. package/src/tool/musicalTypography/index.ts +15 -7
  235. package/src/tool/placeholderGenerator/i18n/de.ts +176 -0
  236. package/src/tool/placeholderGenerator/i18n/id.ts +176 -0
  237. package/src/tool/placeholderGenerator/i18n/it.ts +176 -0
  238. package/src/tool/placeholderGenerator/i18n/ja.ts +177 -0
  239. package/src/tool/placeholderGenerator/i18n/ko.ts +177 -0
  240. package/src/tool/placeholderGenerator/i18n/nl.ts +176 -0
  241. package/src/tool/placeholderGenerator/i18n/pl.ts +176 -0
  242. package/src/tool/placeholderGenerator/i18n/pt.ts +176 -0
  243. package/src/tool/placeholderGenerator/i18n/ru.ts +176 -0
  244. package/src/tool/placeholderGenerator/i18n/sv.ts +176 -0
  245. package/src/tool/placeholderGenerator/i18n/tr.ts +176 -0
  246. package/src/tool/placeholderGenerator/i18n/zh.ts +177 -0
  247. package/src/tool/placeholderGenerator/index.ts +24 -0
  248. package/src/tool/promptLibrary/i18n/de.ts +131 -0
  249. package/src/tool/promptLibrary/i18n/id.ts +131 -0
  250. package/src/tool/promptLibrary/i18n/it.ts +131 -0
  251. package/src/tool/promptLibrary/i18n/ja.ts +132 -0
  252. package/src/tool/promptLibrary/i18n/ko.ts +132 -0
  253. package/src/tool/promptLibrary/i18n/nl.ts +131 -0
  254. package/src/tool/promptLibrary/i18n/pl.ts +28 -0
  255. package/src/tool/promptLibrary/i18n/pt.ts +101 -0
  256. package/src/tool/promptLibrary/i18n/ru.ts +101 -0
  257. package/src/tool/promptLibrary/i18n/sv.ts +93 -0
  258. package/src/tool/promptLibrary/i18n/tr.ts +93 -0
  259. package/src/tool/promptLibrary/i18n/zh.ts +94 -0
  260. package/src/tool/promptLibrary/index.ts +24 -0
  261. package/src/tool/readabilityCalculator/i18n/de.ts +133 -0
  262. package/src/tool/readabilityCalculator/i18n/id.ts +133 -0
  263. package/src/tool/readabilityCalculator/i18n/it.ts +133 -0
  264. package/src/tool/readabilityCalculator/i18n/ja.ts +134 -0
  265. package/src/tool/readabilityCalculator/i18n/ko.ts +134 -0
  266. package/src/tool/readabilityCalculator/i18n/nl.ts +133 -0
  267. package/src/tool/readabilityCalculator/i18n/pl.ts +29 -0
  268. package/src/tool/readabilityCalculator/i18n/pt.ts +91 -0
  269. package/src/tool/readabilityCalculator/i18n/ru.ts +91 -0
  270. package/src/tool/readabilityCalculator/i18n/sv.ts +43 -0
  271. package/src/tool/readabilityCalculator/i18n/tr.ts +43 -0
  272. package/src/tool/readabilityCalculator/i18n/zh.ts +44 -0
  273. package/src/tool/readabilityCalculator/index.ts +24 -0
  274. package/src/tool/svgSanitizer/i18n/de.ts +125 -0
  275. package/src/tool/svgSanitizer/i18n/id.ts +125 -0
  276. package/src/tool/svgSanitizer/i18n/it.ts +125 -0
  277. package/src/tool/svgSanitizer/i18n/ja.ts +126 -0
  278. package/src/tool/svgSanitizer/i18n/ko.ts +126 -0
  279. package/src/tool/svgSanitizer/i18n/nl.ts +125 -0
  280. package/src/tool/svgSanitizer/i18n/pl.ts +125 -0
  281. package/src/tool/svgSanitizer/i18n/pt.ts +30 -0
  282. package/src/tool/svgSanitizer/i18n/ru.ts +126 -0
  283. package/src/tool/svgSanitizer/i18n/sv.ts +126 -0
  284. package/src/tool/svgSanitizer/i18n/tr.ts +126 -0
  285. package/src/tool/svgSanitizer/i18n/zh.ts +126 -0
  286. package/src/tool/svgSanitizer/index.ts +24 -0
  287. package/src/tool/svgToCss/i18n/de.ts +174 -0
  288. package/src/tool/svgToCss/i18n/id.ts +174 -0
  289. package/src/tool/svgToCss/i18n/it.ts +174 -0
  290. package/src/tool/svgToCss/i18n/ja.ts +175 -0
  291. package/src/tool/svgToCss/i18n/ko.ts +175 -0
  292. package/src/tool/svgToCss/i18n/nl.ts +174 -0
  293. package/src/tool/svgToCss/i18n/pl.ts +174 -0
  294. package/src/tool/svgToCss/i18n/pt.ts +174 -0
  295. package/src/tool/svgToCss/i18n/ru.ts +174 -0
  296. package/src/tool/svgToCss/i18n/sv.ts +174 -0
  297. package/src/tool/svgToCss/i18n/tr.ts +174 -0
  298. package/src/tool/svgToCss/i18n/zh.ts +175 -0
  299. package/src/tool/svgToCss/index.ts +15 -7
  300. package/src/tool/urlCleaner/i18n/de.ts +116 -0
  301. package/src/tool/urlCleaner/i18n/id.ts +116 -0
  302. package/src/tool/urlCleaner/i18n/it.ts +116 -0
  303. package/src/tool/urlCleaner/i18n/ja.ts +117 -0
  304. package/src/tool/urlCleaner/i18n/ko.ts +117 -0
  305. package/src/tool/urlCleaner/i18n/nl.ts +116 -0
  306. package/src/tool/urlCleaner/i18n/pl.ts +29 -0
  307. package/src/tool/urlCleaner/i18n/pt.ts +43 -0
  308. package/src/tool/urlCleaner/i18n/ru.ts +43 -0
  309. package/src/tool/urlCleaner/i18n/sv.ts +43 -0
  310. package/src/tool/urlCleaner/i18n/tr.ts +43 -0
  311. package/src/tool/urlCleaner/i18n/zh.ts +44 -0
  312. package/src/tool/urlCleaner/index.ts +24 -0
  313. package/src/tool/urlEncoderDecoder/i18n/de.ts +163 -0
  314. package/src/tool/urlEncoderDecoder/i18n/id.ts +163 -0
  315. package/src/tool/urlEncoderDecoder/i18n/it.ts +163 -0
  316. package/src/tool/urlEncoderDecoder/i18n/ja.ts +163 -0
  317. package/src/tool/urlEncoderDecoder/i18n/ko.ts +163 -0
  318. package/src/tool/urlEncoderDecoder/i18n/nl.ts +163 -0
  319. package/src/tool/urlEncoderDecoder/i18n/pl.ts +162 -0
  320. package/src/tool/urlEncoderDecoder/i18n/pt.ts +162 -0
  321. package/src/tool/urlEncoderDecoder/i18n/ru.ts +163 -0
  322. package/src/tool/urlEncoderDecoder/i18n/sv.ts +163 -0
  323. package/src/tool/urlEncoderDecoder/i18n/tr.ts +162 -0
  324. package/src/tool/urlEncoderDecoder/i18n/zh.ts +163 -0
  325. package/src/tool/urlEncoderDecoder/index.ts +15 -7
  326. package/src/tool/utmGenerator/i18n/de.ts +118 -0
  327. package/src/tool/utmGenerator/i18n/id.ts +118 -0
  328. package/src/tool/utmGenerator/i18n/it.ts +118 -0
  329. package/src/tool/utmGenerator/i18n/ja.ts +118 -0
  330. package/src/tool/utmGenerator/i18n/ko.ts +118 -0
  331. package/src/tool/utmGenerator/i18n/nl.ts +118 -0
  332. package/src/tool/utmGenerator/i18n/pl.ts +117 -0
  333. package/src/tool/utmGenerator/i18n/pt.ts +118 -0
  334. package/src/tool/utmGenerator/i18n/ru.ts +118 -0
  335. package/src/tool/utmGenerator/i18n/sv.ts +118 -0
  336. package/src/tool/utmGenerator/i18n/tr.ts +117 -0
  337. package/src/tool/utmGenerator/i18n/zh.ts +118 -0
  338. package/src/tool/utmGenerator/index.ts +15 -7
  339. package/src/types.ts +1 -2
@@ -0,0 +1,215 @@
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { InspectorCertificadosSslUI } from '../ui';
4
+
5
+ const slug = 'ssl-tls-certificate-inspector-pl';
6
+ const title = 'Online Inspektor Certyfikatów SSL/TLS Wyświetl Pliki PEM i CRT';
7
+ const description = 'Analizuj pliki certyfikatów SSL (.pem, .crt, .der) lokalnie. Sprawdzaj daty wygaśnięcia, wystawców, tematy i odciski palców SHA-256 bez opuszczania Twojej przeglądarki.';
8
+
9
+ const faqData = [
10
+ {
11
+ question: 'Czy bezpieczne jest analizowanie mojego certyfikatu SSL na tej stronie?',
12
+ answer: 'Absolutnie bezpieczne. To narzędzie działa w 100% po stronie klienta. Gdy przeciągniesz plik .pem lub .crt, przeglądarka odczyta dane lokalnie i nigdy nie wyśle ich na żaden serwer. Pełna prywatność.',
13
+ },
14
+ {
15
+ question: 'Jakie formaty certyfikatów są obsługiwane?',
16
+ answer: 'Narzędzie obsługuje najczęstsze formaty: PEM (zakodowany w Base64 z nagłówkami "BEGIN CERTIFICATE") i DER (format binarny), które zazwyczaj mają rozszerzenia .pem, .crt, .cer lub .der.',
17
+ },
18
+ {
19
+ question: 'Czy mogę zobaczyć datę wygaśnięcia pliku .crt?',
20
+ answer: 'Tak, po załadowaniu pliku natychmiast zobaczysz sekcję "Status ważności", która pokazuje dokładną datę wygaśnięcia i czy certyfikat jest dziś jeszcze ważny.',
21
+ },
22
+ {
23
+ question: 'Co robi wydawca certyfikatu?',
24
+ answer: 'Wydawca (Issuer) wskazuje, która Urząd Certyfikacji (CA) zatwierdził tożsamość witryny. Ważne jest wiedzieć, czy certyfikat będzie rozpoznawany przez przeglądarki komercyjne.',
25
+ },
26
+ {
27
+ question: 'Jak obliczane są odciski palców SHA-256?',
28
+ answer: 'Obliczane są poprzez bezpośrednie zastosowanie algorytmu hash do binarnej zawartości certyfikatu. Służą do weryfikacji, że plik nie został zmieniony i jest zgodny z tym, co serwer oczekuje.',
29
+ },
30
+ ];
31
+
32
+ const howToData = [
33
+ { name: 'Znajdź swój plik', text: 'Umieść plik z rozszerzeniem .pem, .crt, .cer lub .der na swoim komputerze.' },
34
+ { name: 'Przeciągnij i upuść', text: 'Po prostu przeciągnij plik na area z kropkami powyżej.' },
35
+ { name: 'Wyświetl wyniki', text: 'Od razu zobaczysz, kto wydał certyfikat, dla kogo, kiedy wygasa i jego odciski palców.' },
36
+ ];
37
+
38
+ const faqSchema: WithContext<FAQPage> = {
39
+ '@context': 'https://schema.org',
40
+ '@type': 'FAQPage',
41
+ mainEntity: faqData.map((item) => ({
42
+ '@type': 'Question',
43
+ name: item.question,
44
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
45
+ })),
46
+ };
47
+
48
+ const howToSchema: WithContext<HowToThing> = {
49
+ '@context': 'https://schema.org',
50
+ '@type': 'HowTo',
51
+ name: title,
52
+ description,
53
+ step: howToData.map((s, i) => ({ '@type': 'HowToStep', position: i + 1, name: s.name, text: s.text })),
54
+ };
55
+
56
+ const appSchema: WithContext<SoftwareApplication> = {
57
+ '@context': 'https://schema.org',
58
+ '@type': 'SoftwareApplication',
59
+ name: title,
60
+ description,
61
+ applicationCategory: 'UtilityApplication',
62
+ operatingSystem: 'All',
63
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
64
+ inLanguage: 'pl',
65
+ };
66
+
67
+ const ui: InspectorCertificadosSslUI = {
68
+ labelAnalyzeCertificate: 'Analizuj certyfikat',
69
+ dragDropText: 'Przeciągnij plik .pem, .crt lub .cer tutaj',
70
+ dragDropSubtext: '(przetwarzanie 100% lokalne w twojej przeglądarce)',
71
+ cardStatusTitle: 'Status ważności',
72
+ cardSubjectTitle: 'Temat (Właściciel)',
73
+ cardIssuerTitle: 'Wydawca (CA)',
74
+ cardFingerprintsTitle: 'Odciski palców',
75
+ cardTechnicalTitle: 'Szczegóły techniczne',
76
+ labelValidityStatus: 'Status:',
77
+ labelExpiryDate: 'Wygasa',
78
+ labelIssueDate: 'Wystawiony',
79
+ labelSha256: 'Odcisk palca SHA-256',
80
+ labelSha1: 'Odcisk palca SHA-1',
81
+ labelSignatureAlgorithm: 'Algorytm podpisu',
82
+ labelVersion: 'Wersja X.509',
83
+ labelSerialNumber: 'Numer seryjny',
84
+ labelCommonName: 'Nazwa pospolitą',
85
+ labelOrganization: 'Organizacja',
86
+ labelOrgUnit: 'Jednostka organizacyjna',
87
+ labelLocality: 'Miejscowość',
88
+ labelState: 'Stan/Prowincja',
89
+ labelCountry: 'Kraj',
90
+ labelEmail: 'Email',
91
+ statusValid: 'Ważny',
92
+ statusExpired: 'Wygasł',
93
+ errorMessageInvalid: 'Nieprawidłowy plik.',
94
+ supportedFormats: '.pem, .crt, .cer, .der',
95
+ };
96
+
97
+ export const content: ToolLocaleContent<InspectorCertificadosSslUI> = {
98
+ slug,
99
+ title,
100
+ description,
101
+ ui,
102
+ faqTitle: 'Często zadawane pytania',
103
+ faq: faqData,
104
+ bibliographyTitle: 'Zasoby techniczne na temat certyfikatów SSL/TLS',
105
+ bibliography: [
106
+ { name: 'RFC 5280: Internet X.509 Public Key Infrastructure Certificate and CRL Profile', url: 'https://datatracker.ietf.org/doc/html/rfc5280' },
107
+ { name: 'NIST: FIPS 180-4 Secure Hash Standard (SHA)', url: 'https://csrc.nist.gov/publications/detail/fips/180/4/final' },
108
+ { name: 'Mozilla: SSL/TLS Encryption Overview', url: 'https://developer.mozilla.org/en-US/docs/Glossary/TLS' },
109
+ { name: 'OpenSSL: X.509 Certificate Format Documentation', url: 'https://www.openssl.org/docs/man1.1.1/man1/x509.html' },
110
+ ],
111
+ howTo: howToData,
112
+ schemas: [faqSchema, howToSchema, appSchema],
113
+ seo: [
114
+ { type: 'title', text: 'Czym jest inspektor certyfikatów SSL/TLS i dlaczego go potrzebujesz?', level: 2 },
115
+ {
116
+ type: 'paragraph',
117
+ html: 'W świecie tworzenia stron internetowych i cyberbezpieczeństwa <strong>certyfikaty SSL (Secure Sockets Layer) i TLS (Transport Layer Security)</strong> są fundamentem zaufania. Certyfikat cyfrowy to nic innego jak plik łączący klucz kryptograficzny z danymi organizacji lub domeny. Jednak pliki te często występują w formacie binarnym (.der) lub zakodowanym w Base64 (.pem, .crt), które nie są czytelne na pierwszy rzut oka.',
118
+ },
119
+ {
120
+ type: 'paragraph',
121
+ html: 'Nasz <strong>inspektor certyfikatów SSL/TLS</strong> pozwala "otworzyć" te pliki wizualnie i bezpiecznie. W przeciwieństwie do narzędzi, które wysyłają zapytania do domeny publicznej (takich jak sławny test SSL Labs), to narzędzie pracuje bezpośrednio z plikiem na Twoim urządzeniu. Jest to kluczowe, gdy konfigurujesz serwery Nginx, Apache lub ładujesz certyfikaty do AWS lub Google Cloud Load Balancer i musisz zweryfikować, że plik w Twojej ręce jest prawidłowy przed przesłaniem.',
122
+ },
123
+ { type: 'title', text: 'Jak sprawdzić plik .pem lub .crt krok po kroku', level: 2 },
124
+ {
125
+ type: 'paragraph',
126
+ html: 'Analiza certyfikatu za pomocą naszego narzędzia jest niezwykle prosta i nie wymaga znajomości konsoli (OpenSSL). Wykonaj następujące kroki:',
127
+ },
128
+ {
129
+ type: 'list',
130
+ items: [
131
+ '<strong>Znajdź swój plik:</strong> Umieść plik z rozszerzeniem .pem, .crt, .cer lub .der na swoim komputerze.',
132
+ '<strong>Przeciągnij i upuść:</strong> Po prostu przeciągnij plik na area z kropkami powyżej.',
133
+ '<strong>Wyświetl wyniki:</strong> Od razu zobaczysz, kto wydał certyfikat, dla kogo, kiedy wygasa i jego odciski palców.',
134
+ ],
135
+ },
136
+ {
137
+ type: 'tip',
138
+ title: 'Pełna prywatność',
139
+ html: 'Najważniejsza część tego procesu to <strong>prywatność</strong>. Plik nigdy nie jest przesyłany na nasze serwery. Cała analiza struktury ASN.1 certyfikatu odbywa się w pamięci RAM Twojej przeglądarki. Pełne bezpieczeństwo dla Twoich kluczy publicznych.',
140
+ },
141
+ { type: 'title', text: 'Kluczowe pola widoczne podczas analizy certyfikatu', level: 2 },
142
+ {
143
+ type: 'paragraph',
144
+ html: 'Analizując certyfikat, dzielimy najistotniejsze informacje techniczne, abyś mógł je zweryfikować na pierwszy rzut oka:',
145
+ },
146
+ {
147
+ type: 'list',
148
+ items: [
149
+ '<strong>Temat:</strong> Pokazuje dane właściciela, w tym wspólną nazwę (CN), organizację i lokalizację.',
150
+ '<strong>Wydawca:</strong> Identyfikuje Urząd Certyfikacji (CA), który podpisał certyfikat (np. Let\'s Encrypt, DigiCert).',
151
+ '<strong>Okres ważności:</strong> Pokazuje dokładną datę wydania i krytyczną datę wygaśnięcia.',
152
+ '<strong>Odciski palców:</strong> Odciski palców SHA-256 i SHA-1 służą do weryfikacji integralności pliku.',
153
+ ],
154
+ },
155
+ { type: 'title', text: 'Obsługiwane formaty: PEM, CRT, CER i DER', level: 2 },
156
+ {
157
+ type: 'paragraph',
158
+ html: 'Istnieje kilka formatów plików certyfikatów i czasami może to być mylące. Nasze narzędzie jest kompatybilne z najczęstszymi:',
159
+ },
160
+ {
161
+ type: 'list',
162
+ items: [
163
+ '<strong>PEM (.pem, .crt, .cer):</strong> Najpopularniejszy format w systemach Linux i serwerach WWW. Zaczyna się linią <code>-----BEGIN CERTIFICATE-----</code>.',
164
+ '<strong>DER (.der, .cer):</strong> Format binarny. Powszechnie używany w środowiskach Windows (Java, Active Directory) i zwykle trudniej czytelny bez wyspecjalizowanych narzędzi.',
165
+ ],
166
+ },
167
+ {
168
+ type: 'paragraph',
169
+ html: 'Nawet jeśli plik ma niezwykłe rozszerzenie, jeśli struktura wewnętrzna to standardowy certyfikat X.509, nasz silnik napędzany <strong>node-forge</strong> będzie w stanie go zinterpretować bez problemów.',
170
+ },
171
+ { type: 'title', text: 'Dlaczego użyć tego narzędzia zamiast OpenSSL?', level: 2 },
172
+ {
173
+ type: 'paragraph',
174
+ html: 'OpenSSL to szwajcarski scyzoryk kryptografii, ale jego polecenia są trudne do zapamiętania. Aby wyświetlić certyfikat z konsoli, musisz napisać:',
175
+ },
176
+ { type: 'code', text: 'openssl x509 -in certificado.crt -text -noout' },
177
+ {
178
+ type: 'paragraph',
179
+ html: 'Nasze narzędzie oferuje wyraźne korzyści dla codziennego workflow\'u:',
180
+ },
181
+ {
182
+ type: 'list',
183
+ items: [
184
+ '<strong>Szybkość:</strong> Nie ma potrzeby otwierania terminala ani zapamiętywania skomplikowanych flag.',
185
+ '<strong>Wizualne:</strong> Formatujemy nazwy pól (Locality, Organization), aby były czytelne, a nie skrótami takimi jak "L" czy "O".',
186
+ '<strong>Alerty ważności:</strong> Automatycznie obliczamy, czy certyfikat jest dzisiaj ważny, oszczędzając ci ręcznej weryfikacji aktualnej daty z datą certyfikatu.',
187
+ '<strong>Wieloplatformowy:</strong> Działa na dowolnym systemie operacyjnym z nowoczesną przeglądarką, bez żadnych zależności do zainstalowania.',
188
+ ],
189
+ },
190
+ { type: 'title', text: 'Bezpieczeństwo i prywatność: Twój certyfikat nigdy nie opuszcza RAM\'u', level: 2 },
191
+ {
192
+ type: 'paragraph',
193
+ html: 'Jako deweloper wiem, jak krytyczne jest obsługiwanie tego typu informacji. Chociaż certyfikat jest technicznie <strong>informacją publiczną</strong> (wysyłaną do każdej przeglądarki odwiedzającej Twoją witrynę), ciągle jest to dobra praktyka, aby bez konieczności nie przesyłać plików na serwery zewnętrzne.',
194
+ },
195
+ {
196
+ type: 'paragraph',
197
+ html: 'To narzędzie używa JavaScriptu, który działa ściśle po stronie klienta. Gdy przeciągniesz plik, odczytamy jego zawartość i przetwarzamy ją lokalnie. Możesz to zweryfikować, rozłączając internet: narzędzie będzie działać dokładnie tak samo.',
198
+ },
199
+ { type: 'title', text: 'Typowe przypadki użycia inspektora SSL', level: 2 },
200
+ {
201
+ type: 'paragraph',
202
+ html: 'Kiedy dodanie tej strony do zakładek byłoby przydatne?',
203
+ },
204
+ {
205
+ type: 'list',
206
+ items: [
207
+ '<strong>Debugowanie serwera:</strong> Gdy instalujesz certyfikat, a witryna ciągle zgłasza błędy, aby zweryfikować, że przypadkowo nie załadowałeś starego certyfikatu.',
208
+ '<strong>Weryfikacja łańcucha:</strong> Aby sprawdzić, czy plik zawiera certyfikat końcowy czy pośredni.',
209
+ '<strong>Audyt zasobów:</strong> Aby sprawdzić, które Urzędy Certyfikacji zostały użyte w starym projekcie.',
210
+ '<strong>Integralność kopii:</strong> Podczas przenoszenia certyfikatów między serwerami, aby zapewnić, że plik nie jest uszkodzony, porównując jego odcisk SHA-256.',
211
+ ],
212
+ },
213
+ ],
214
+ };
215
+
@@ -0,0 +1,214 @@
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { InspectorCertificadosSslUI } from '../ui';
4
+
5
+ const slug = 'inspetor-certificados-ssl-tls';
6
+ const title = 'Inspetor de Certificados SSL/TLS Online Visualizar ficheiros PEM e CRT';
7
+ const description = 'Analise ficheiros de certificados SSL (.pem, .crt, .der) localmente. Verifique datas de expiração, emissores, titulares e impressões digitais SHA-256 sem que os seus dados saiam do browser.';
8
+
9
+ const faqData = [
10
+ {
11
+ question: 'É seguro analisar o meu certificado SSL neste site?',
12
+ answer: 'Absolutamente. Este utilitário funciona 100% do lado do cliente. Quando arrasta o seu ficheiro .pem ou .crt, o browser lê os dados localmente e nunca os envia para qualquer servidor. Privacidade total.',
13
+ },
14
+ {
15
+ question: 'Que formatos de certificado são suportados?',
16
+ answer: 'A ferramenta suporta os formatos mais comuns: PEM (codificado em Base64 com cabeçalhos "BEGIN CERTIFICATE") e DER (formato binário), que normalmente têm extensões .pem, .crt, .cer ou .der.',
17
+ },
18
+ {
19
+ question: 'Posso ver a data de expiração de um ficheiro .crt?',
20
+ answer: 'Sim, ao carregar o ficheiro verá imediatamente a secção "Estado de Validade", que mostra a data exata de expiração e se o certificado ainda é válido hoje.',
21
+ },
22
+ {
23
+ question: 'Para que serve o emissor do certificado?',
24
+ answer: 'O emissor (Issuer) indica qual Autoridade de Certificação (CA) validou a identidade do site. É fundamental para saber se o certificado será reconhecido pelos browsers comerciais.',
25
+ },
26
+ {
27
+ question: 'Como são calculadas as impressões digitais SHA-256?',
28
+ answer: 'São calculadas aplicando um algoritmo de hash diretamente ao conteúdo binário do certificado. Servem para verificar que o ficheiro não foi adulterado e corresponde ao que o servidor espera.',
29
+ },
30
+ ];
31
+
32
+ const howToData = [
33
+ { name: 'Encontre o seu ficheiro', text: 'Localize o ficheiro com extensão .pem, .crt, .cer ou .der no seu computador.' },
34
+ { name: 'Arraste e solte', text: 'Arraste simplesmente o ficheiro para a área pontilhada acima.' },
35
+ { name: 'Veja os resultados', text: 'Instantaneamente verá quem emitiu o certificado, para quem é, quando expira e as suas impressões digitais.' },
36
+ ];
37
+
38
+ const faqSchema: WithContext<FAQPage> = {
39
+ '@context': 'https://schema.org',
40
+ '@type': 'FAQPage',
41
+ mainEntity: faqData.map((item) => ({
42
+ '@type': 'Question',
43
+ name: item.question,
44
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
45
+ })),
46
+ };
47
+
48
+ const howToSchema: WithContext<HowToThing> = {
49
+ '@context': 'https://schema.org',
50
+ '@type': 'HowTo',
51
+ name: title,
52
+ description,
53
+ step: howToData.map((s, i) => ({ '@type': 'HowToStep', position: i + 1, name: s.name, text: s.text })),
54
+ };
55
+
56
+ const appSchema: WithContext<SoftwareApplication> = {
57
+ '@context': 'https://schema.org',
58
+ '@type': 'SoftwareApplication',
59
+ name: title,
60
+ description,
61
+ applicationCategory: 'UtilityApplication',
62
+ operatingSystem: 'All',
63
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
64
+ inLanguage: 'pt',
65
+ };
66
+
67
+ const ui: InspectorCertificadosSslUI = {
68
+ labelAnalyzeCertificate: 'Analisar Certificado',
69
+ dragDropText: 'Arraste o seu ficheiro .pem, .crt ou .cer para aqui',
70
+ dragDropSubtext: '(Processamento 100% local no seu browser)',
71
+ cardStatusTitle: 'Estado de Validade',
72
+ cardSubjectTitle: 'Titular (Subject)',
73
+ cardIssuerTitle: 'Emissor (CA)',
74
+ cardFingerprintsTitle: 'Impressões Digitais',
75
+ cardTechnicalTitle: 'Detalhes Técnicos',
76
+ labelValidityStatus: 'Estado:',
77
+ labelExpiryDate: 'Expira em',
78
+ labelIssueDate: 'Emitido em',
79
+ labelSha256: 'Impressão SHA-256',
80
+ labelSha1: 'Impressão SHA-1',
81
+ labelSignatureAlgorithm: 'Algoritmo de Assinatura',
82
+ labelVersion: 'Versão X.509',
83
+ labelSerialNumber: 'Número de Série',
84
+ labelCommonName: 'Common Name',
85
+ labelOrganization: 'Organization',
86
+ labelOrgUnit: 'Org. Unit',
87
+ labelLocality: 'Locality',
88
+ labelState: 'State/Province',
89
+ labelCountry: 'Country',
90
+ labelEmail: 'Email',
91
+ statusValid: 'Válido',
92
+ statusExpired: 'Expirado',
93
+ errorMessageInvalid: 'Ficheiro inválido.',
94
+ supportedFormats: '.pem, .crt, .cer, .der',
95
+ };
96
+
97
+ export const content: ToolLocaleContent<InspectorCertificadosSslUI> = {
98
+ slug,
99
+ title,
100
+ description,
101
+ ui,
102
+ faqTitle: 'Perguntas Frequentes',
103
+ faq: faqData,
104
+ bibliographyTitle: 'Recursos Técnicos sobre Certificados SSL/TLS',
105
+ bibliography: [
106
+ { name: 'RFC 5280: Internet X.509 Public Key Infrastructure Certificate and CRL Profile', url: 'https://datatracker.ietf.org/doc/html/rfc5280' },
107
+ { name: 'NIST: FIPS 180-4 Secure Hash Standard (SHA)', url: 'https://csrc.nist.gov/publications/detail/fips/180/4/final' },
108
+ { name: 'Mozilla: Visão geral da encriptação SSL/TLS', url: 'https://developer.mozilla.org/pt-PT/docs/Glossary/TLS' },
109
+ { name: 'OpenSSL: Documentação do Formato de Certificado X.509', url: 'https://www.openssl.org/docs/man1.1.1/man1/x509.html' },
110
+ ],
111
+ howTo: howToData,
112
+ schemas: [faqSchema, howToSchema, appSchema],
113
+ seo: [
114
+ { type: 'title', text: 'O que é um Inspetor de Certificados SSL/TLS e por que precisa de um?', level: 2 },
115
+ {
116
+ type: 'paragraph',
117
+ html: 'No mundo do desenvolvimento web e da cibersegurança, os <strong>certificados SSL (Secure Sockets Layer) e TLS (Transport Layer Security)</strong> são a pedra angular da confiança digital. Um certificado digital não é mais do que um ficheiro que associa uma chave criptográfica aos dados de uma organização ou domínio. No entanto, estes ficheiros surgem frequentemente em formatos binários (.der) ou codificados em Base64 (.pem, .crt) que não são legíveis à primeira vista.',
118
+ },
119
+ {
120
+ type: 'paragraph',
121
+ html: 'O nosso <strong>Inspetor de Certificados SSL/TLS</strong> permite-lhe "abrir" estes ficheiros de forma visual e segura. Ao contrário das ferramentas que consultam um domínio público (como o popular teste da SSL Labs), este utilitário trabalha diretamente com o ficheiro que tem no seu dispositivo. É fundamental quando está a configurar servidores Nginx ou Apache, ou a carregar certificados num Load Balancer da AWS ou Google Cloud, e precisa de verificar se o ficheiro em mãos está correto antes de o enviar.',
122
+ },
123
+ { type: 'title', text: 'Como inspecionar um ficheiro .pem ou .crt passo a passo', level: 2 },
124
+ {
125
+ type: 'paragraph',
126
+ html: 'Analisar um certificado com a nossa ferramenta é extremamente simples e não requer conhecimentos de linha de comandos (OpenSSL). Siga estes passos:',
127
+ },
128
+ {
129
+ type: 'list',
130
+ items: [
131
+ '<strong>Encontre o seu ficheiro:</strong> Localize o ficheiro com extensão .pem, .crt, .cer ou .der no seu computador.',
132
+ '<strong>Arraste e solte:</strong> Arraste simplesmente o ficheiro para a área pontilhada acima.',
133
+ '<strong>Veja os resultados:</strong> Instantaneamente verá quem emitiu o certificado, para quem é, quando expira e as suas impressões digitais.',
134
+ ],
135
+ },
136
+ {
137
+ type: 'tip',
138
+ title: 'Privacidade Total',
139
+ html: 'O mais importante neste processo é a <strong>privacidade</strong>. O ficheiro nunca é carregado para os nossos servidores. Toda a análise da estrutura ASN.1 do certificado acontece na RAM do seu próprio browser. Segurança total para as suas chaves públicas.',
140
+ },
141
+ { type: 'title', text: 'Campos principais que verá ao analisar o seu certificado', level: 2 },
142
+ {
143
+ type: 'paragraph',
144
+ html: 'Ao analisar o seu certificado, apresentamos as informações técnicas mais relevantes para que possa verificá-las de relance:',
145
+ },
146
+ {
147
+ type: 'list',
148
+ items: [
149
+ '<strong>Titular (Subject):</strong> Mostra os dados do proprietário, incluindo o Common Name (CN), organização e localização.',
150
+ '<strong>Emissor (Issuer):</strong> Identifica a Autoridade de Certificação (CA) que assinou o certificado (ex.: Let\'s Encrypt, DigiCert).',
151
+ '<strong>Período de Validade:</strong> Mostra a data exata de emissão e a data crítica de expiração.',
152
+ '<strong>Impressões Digitais:</strong> As impressões SHA-256 e SHA-1 servem para verificar a integridade do ficheiro.',
153
+ ],
154
+ },
155
+ { type: 'title', text: 'Formatos suportados: PEM, CRT, CER e DER', level: 2 },
156
+ {
157
+ type: 'paragraph',
158
+ html: 'Existem vários formatos de ficheiros de certificado e por vezes é confuso. A nossa ferramenta é compatível com os mais comuns:',
159
+ },
160
+ {
161
+ type: 'list',
162
+ items: [
163
+ '<strong>PEM (.pem, .crt, .cer):</strong> O formato mais comum em Linux e servidores web. Começa com a linha <code>-----BEGIN CERTIFICATE-----</code>.',
164
+ '<strong>DER (.der, .cer):</strong> O formato binário. Muito usado em ambientes Windows (Java, Active Directory) e geralmente mais difícil de ler sem ferramentas especializadas.',
165
+ ],
166
+ },
167
+ {
168
+ type: 'paragraph',
169
+ html: 'Mesmo que o seu ficheiro tenha uma extensão invulgar, se a estrutura interna for um certificado X.509 padrão, o nosso motor baseado em <strong>node-forge</strong> conseguirá interpretá-lo sem problemas.',
170
+ },
171
+ { type: 'title', text: 'Por que usar esta ferramenta em vez de OpenSSL?', level: 2 },
172
+ {
173
+ type: 'paragraph',
174
+ html: 'O OpenSSL é o canivete suíço da criptografia, mas os seus comandos são difíceis de memorizar. Para ver um certificado na linha de comandos teria de escrever:',
175
+ },
176
+ { type: 'code', text: 'openssl x509 -in certificado.crt -text -noout' },
177
+ {
178
+ type: 'paragraph',
179
+ html: 'A nossa ferramenta oferece vantagens claras para o fluxo de trabalho diário:',
180
+ },
181
+ {
182
+ type: 'list',
183
+ items: [
184
+ '<strong>Rapidez:</strong> Não precisa de abrir o terminal nem de memorizar opções complexas.',
185
+ '<strong>Visual:</strong> Formatamos os nomes dos campos (Locality, Organization) para serem legíveis, não abreviações como "L" ou "O".',
186
+ '<strong>Alertas de validade:</strong> Calculamos automaticamente se o certificado é válido hoje, poupando-lhe a verificação manual das datas.',
187
+ '<strong>Multiplataforma:</strong> Funciona em qualquer sistema operativo com um browser moderno, sem instalar dependências.',
188
+ ],
189
+ },
190
+ { type: 'title', text: 'Segurança e Privacidade: o seu certificado nunca sai do browser', level: 2 },
191
+ {
192
+ type: 'paragraph',
193
+ html: 'Como programador, sei o quão crítico é lidar com este tipo de informação. Embora um certificado seja tecnicamente <strong>informação pública</strong> (é enviado a qualquer browser que visita o seu site), é ainda assim boa prática não carregar ficheiros para servidores externos desnecessariamente.',
194
+ },
195
+ {
196
+ type: 'paragraph',
197
+ html: 'Este utilitário usa JavaScript que corre estritamente no cliente. Ao arrastar o ficheiro, lemos o seu conteúdo e processamos tudo localmente. Pode verificá-lo desligando a internet: a ferramenta continuará a funcionar exatamente da mesma forma.',
198
+ },
199
+ { type: 'title', text: 'Casos de uso comuns para o Inspetor SSL', level: 2 },
200
+ {
201
+ type: 'paragraph',
202
+ html: 'Quando é que terá esta página nos favoritos a ser útil?',
203
+ },
204
+ {
205
+ type: 'list',
206
+ items: [
207
+ '<strong>Depuração de servidor:</strong> Quando instala um certificado mas o site continua a dar erros, para verificar que não carregou por engano o certificado antigo.',
208
+ '<strong>Verificação de cadeia:</strong> Para ver se um ficheiro contém o certificado final ou um certificado intermédio.',
209
+ '<strong>Auditoria de ativos:</strong> Para verificar qual Autoridade de Certificação foi usada num projeto antigo.',
210
+ '<strong>Integridade de cópias:</strong> Ao mover certificados entre servidores, para garantir que o ficheiro não está corrompido comparando a sua impressão SHA-256.',
211
+ ],
212
+ },
213
+ ],
214
+ };
@@ -0,0 +1,215 @@
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { InspectorCertificadosSslUI } from '../ui';
4
+
5
+ const slug = 'ssl-tls-certificate-inspector-ru';
6
+ const title = 'Онлайн Инспектор Сертификатов SSL/TLS Просмотр PEM и CRT файлов';
7
+ const description = 'Анализируйте файлы SSL-сертификатов (.pem, .crt, .der) локально. Проверяйте сроки действия, издателей, субъекты и отпечатки SHA-256, не передавая данные на сервер.';
8
+
9
+ const faqData = [
10
+ {
11
+ question: 'Безопасно ли анализировать мой SSL-сертификат на этом сайте?',
12
+ answer: 'Абсолютно безопасно. Эта утилита работает на 100% со стороны клиента. Когда вы перетаскиваете файл .pem или .crt, браузер читает данные локально и никогда не отправляет их на какой-либо сервер. Полная приватность.',
13
+ },
14
+ {
15
+ question: 'Какие форматы сертификатов поддерживаются?',
16
+ answer: 'Инструмент поддерживает наиболее распространённые форматы: PEM (кодированный Base64 с заголовками "BEGIN CERTIFICATE") и DER (бинарный формат), которые обычно имеют расширения .pem, .crt, .cer или .der.',
17
+ },
18
+ {
19
+ question: 'Могу ли я увидеть дату истечения файла .crt?',
20
+ answer: 'Да, при загрузке файла вы сразу же увидите раздел "Статус валидности", который показывает точную дату истечения и валидность сертификата на сегодня.',
21
+ },
22
+ {
23
+ question: 'Что делает издатель сертификата?',
24
+ answer: 'Издатель (Issuer) указывает, какой Центр Сертификации (CA) подтвердил подлинность сайта. Важно знать, будет ли сертификат распознан коммерческими браузерами.',
25
+ },
26
+ {
27
+ question: 'Как вычисляются отпечатки SHA-256?',
28
+ answer: 'Они вычисляются путём применения алгоритма хеширования непосредственно к бинарному содержимому сертификата. Они служат для проверки того, что файл не был изменён и соответствует ожидаемому сервером.',
29
+ },
30
+ ];
31
+
32
+ const howToData = [
33
+ { name: 'Найдите файл', text: 'Найдите на компьютере файл с расширением .pem, .crt, .cer или .der.' },
34
+ { name: 'Перетащите', text: 'Просто перетащите файл в пунктирную область выше.' },
35
+ { name: 'Посмотрите результаты', text: 'Сразу же вы увидите, кто выдал сертификат, для кого, когда истекает и его отпечатки.' },
36
+ ];
37
+
38
+ const faqSchema: WithContext<FAQPage> = {
39
+ '@context': 'https://schema.org',
40
+ '@type': 'FAQPage',
41
+ mainEntity: faqData.map((item) => ({
42
+ '@type': 'Question',
43
+ name: item.question,
44
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
45
+ })),
46
+ };
47
+
48
+ const howToSchema: WithContext<HowToThing> = {
49
+ '@context': 'https://schema.org',
50
+ '@type': 'HowTo',
51
+ name: title,
52
+ description,
53
+ step: howToData.map((s, i) => ({ '@type': 'HowToStep', position: i + 1, name: s.name, text: s.text })),
54
+ };
55
+
56
+ const appSchema: WithContext<SoftwareApplication> = {
57
+ '@context': 'https://schema.org',
58
+ '@type': 'SoftwareApplication',
59
+ name: title,
60
+ description,
61
+ applicationCategory: 'UtilityApplication',
62
+ operatingSystem: 'All',
63
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
64
+ inLanguage: 'ru',
65
+ };
66
+
67
+ const ui: InspectorCertificadosSslUI = {
68
+ labelAnalyzeCertificate: 'Анализировать сертификат',
69
+ dragDropText: 'Перетащите сюда файл .pem, .crt или .cer',
70
+ dragDropSubtext: '(100% локальная обработка в браузере)',
71
+ cardStatusTitle: 'Статус валидности',
72
+ cardSubjectTitle: 'Субъект (Владелец)',
73
+ cardIssuerTitle: 'Издатель (CA)',
74
+ cardFingerprintsTitle: 'Отпечатки',
75
+ cardTechnicalTitle: 'Технические детали',
76
+ labelValidityStatus: 'Статус:',
77
+ labelExpiryDate: 'Истекает',
78
+ labelIssueDate: 'Выпущено',
79
+ labelSha256: 'Отпечаток SHA-256',
80
+ labelSha1: 'Отпечаток SHA-1',
81
+ labelSignatureAlgorithm: 'Алгоритм подписи',
82
+ labelVersion: 'Версия X.509',
83
+ labelSerialNumber: 'Серийный номер',
84
+ labelCommonName: 'Общее имя',
85
+ labelOrganization: 'Организация',
86
+ labelOrgUnit: 'Подразделение',
87
+ labelLocality: 'Населённый пункт',
88
+ labelState: 'Область/Регион',
89
+ labelCountry: 'Страна',
90
+ labelEmail: 'Email',
91
+ statusValid: 'Действителен',
92
+ statusExpired: 'Истёк',
93
+ errorMessageInvalid: 'Недействительный файл.',
94
+ supportedFormats: '.pem, .crt, .cer, .der',
95
+ };
96
+
97
+ export const content: ToolLocaleContent<InspectorCertificadosSslUI> = {
98
+ slug,
99
+ title,
100
+ description,
101
+ ui,
102
+ faqTitle: 'Часто задаваемые вопросы',
103
+ faq: faqData,
104
+ bibliographyTitle: 'Технические ресурсы о сертификатах SSL/TLS',
105
+ bibliography: [
106
+ { name: 'RFC 5280: Internet X.509 Public Key Infrastructure Certificate and CRL Profile', url: 'https://datatracker.ietf.org/doc/html/rfc5280' },
107
+ { name: 'NIST: FIPS 180-4 Secure Hash Standard (SHA)', url: 'https://csrc.nist.gov/publications/detail/fips/180/4/final' },
108
+ { name: 'Mozilla: SSL/TLS Encryption Overview', url: 'https://developer.mozilla.org/en-US/docs/Glossary/TLS' },
109
+ { name: 'OpenSSL: X.509 Certificate Format Documentation', url: 'https://www.openssl.org/docs/man1.1.1/man1/x509.html' },
110
+ ],
111
+ howTo: howToData,
112
+ schemas: [faqSchema, howToSchema, appSchema],
113
+ seo: [
114
+ { type: 'title', text: 'Что такое инспектор сертификатов SSL/TLS и зачем он нужен?', level: 2 },
115
+ {
116
+ type: 'paragraph',
117
+ html: 'В мире веб-разработки и кибербезопасности <strong>сертификаты SSL (Secure Sockets Layer) и TLS (Transport Layer Security)</strong> — это основание доверия. Цифровой сертификат — это просто файл, связывающий криптографический ключ с данными организации или домена. Однако эти файлы часто поставляются в бинарном формате (.der) или кодировке Base64 (.pem, .crt), которые не читаются с первого взгляда.',
118
+ },
119
+ {
120
+ type: 'paragraph',
121
+ html: 'Наш <strong>инспектор сертификатов SSL/TLS</strong> позволяет "открывать" эти файлы визуально и безопасно. В отличие от инструментов, которые запрашивают публичный домен (как знаменитый тест SSL Labs), эта утилита работает непосредственно с файлом на вашем устройстве. Это критически важно, когда вы настраиваете серверы Nginx, Apache или загружаете сертификаты в AWS или Google Cloud Load Balancer, и вам нужно проверить, что файл в ваших руках правильный, прежде чем загружать его.',
122
+ },
123
+ { type: 'title', text: 'Как пошагово проверить файл .pem или .crt', level: 2 },
124
+ {
125
+ type: 'paragraph',
126
+ html: 'Анализировать сертификат с помощью нашего инструмента очень просто и не требует знания консоли (OpenSSL). Выполните следующие шаги:',
127
+ },
128
+ {
129
+ type: 'list',
130
+ items: [
131
+ '<strong>Найдите файл:</strong> Найдите на компьютере файл с расширением .pem, .crt, .cer или .der.',
132
+ '<strong>Перетащите:</strong> Просто перетащите файл в пунктирную область выше.',
133
+ '<strong>Посмотрите результаты:</strong> Сразу же вы увидите, кто выдал сертификат, для кого, когда истекает и его отпечатки.',
134
+ ],
135
+ },
136
+ {
137
+ type: 'tip',
138
+ title: 'Полная приватность',
139
+ html: 'Самая важная часть этого процесса — <strong>приватность</strong>. Файл никогда не загружается на наши серверы. Все разбор ASN.1 структуры сертификата происходит в RAM вашего браузера. Полная безопасность для ваших открытых ключей.',
140
+ },
141
+ { type: 'title', text: 'Ключевые поля, которые вы увидите при анализе сертификата', level: 2 },
142
+ {
143
+ type: 'paragraph',
144
+ html: 'При анализе вашего сертификата мы разбираем наиболее релевантную техническую информацию, чтобы вы могли проверить её с первого взгляда:',
145
+ },
146
+ {
147
+ type: 'list',
148
+ items: [
149
+ '<strong>Субъект:</strong> Показывает данные владельца, включая общее имя (CN), организацию и место расположения.',
150
+ '<strong>Издатель:</strong> Идентифицирует Центр Сертификации (CA), который подписал сертификат (например, Let\'s Encrypt, DigiCert).',
151
+ '<strong>Период действия:</strong> Показывает точную дату выпуска и критическую дату истечения.',
152
+ '<strong>Отпечатки:</strong> Отпечатки SHA-256 и SHA-1 служат для проверки целостности файла.',
153
+ ],
154
+ },
155
+ { type: 'title', text: 'Поддерживаемые форматы: PEM, CRT, CER и DER', level: 2 },
156
+ {
157
+ type: 'paragraph',
158
+ html: 'Существует несколько форматов файлов сертификатов, и иногда это может быть запутанным. Наш инструмент совместим с наиболее распространёнными:',
159
+ },
160
+ {
161
+ type: 'list',
162
+ items: [
163
+ '<strong>PEM (.pem, .crt, .cer):</strong> Наиболее распространённый формат на Linux и веб-серверах. Начинается со строки <code>-----BEGIN CERTIFICATE-----</code>.',
164
+ '<strong>DER (.der, .cer):</strong> Бинарный формат. Широко используется в среде Windows (Java, Active Directory) и обычно сложнее читается без специализированных инструментов.',
165
+ ],
166
+ },
167
+ {
168
+ type: 'paragraph',
169
+ html: 'Даже если ваш файл имеет необычное расширение, если внутренняя структура — это стандартный сертификат X.509, наш движок на базе <strong>node-forge</strong> сможет его интерпретировать без проблем.',
170
+ },
171
+ { type: 'title', text: 'Почему использовать этот инструмент вместо OpenSSL?', level: 2 },
172
+ {
173
+ type: 'paragraph',
174
+ html: 'OpenSSL — это швейцарский армейский нож криптографии, но его команды трудно запомнить. Чтобы просмотреть сертификат из консоли, вам нужно написать:',
175
+ },
176
+ { type: 'code', text: 'openssl x509 -in certificado.crt -text -noout' },
177
+ {
178
+ type: 'paragraph',
179
+ html: 'Наш инструмент предлагает явные преимущества для повседневного рабочего процесса:',
180
+ },
181
+ {
182
+ type: 'list',
183
+ items: [
184
+ '<strong>Скорость:</strong> Не нужно открывать терминал или запоминать сложные флаги.',
185
+ '<strong>Визуально:</strong> Мы форматируем названия полей (Locality, Organization) так, чтобы они были читаемы, а не короткие коды вроде "L" или "O".',
186
+ '<strong>Оповещения валидности:</strong> Мы автоматически вычисляем, действителен ли сертификат сегодня, избавляя вас от необходимости вручную проверять текущую дату против даты сертификата.',
187
+ '<strong>Кроссплатформенность:</strong> Работает на любой операционной системе с современным браузером, без зависимостей для установки.',
188
+ ],
189
+ },
190
+ { type: 'title', text: 'Безопасность и приватность: ваш сертификат никогда не покидает RAM', level: 2 },
191
+ {
192
+ type: 'paragraph',
193
+ html: 'Как разработчик, я знаю, насколько критично правильное обращение с этой информацией. Хотя сертификат технически является <strong>публичной информацией</strong> (отправляется в любой браузер, посещающий ваш сайт), тем не менее, это хорошая практика — не загружать файлы на внешние серверы без необходимости.',
194
+ },
195
+ {
196
+ type: 'paragraph',
197
+ html: 'Эта утилита использует JavaScript, который работает исключительно на стороне клиента. Когда вы перетаскиваете файл, мы читаем его содержимое и обрабатываем локально. Вы можете это проверить, отключив интернет: инструмент будет работать точно так же.',
198
+ },
199
+ { type: 'title', text: 'Общие случаи использования инспектора SSL', level: 2 },
200
+ {
201
+ type: 'paragraph',
202
+ html: 'Когда добавление этой страницы в закладки было бы полезным?',
203
+ },
204
+ {
205
+ type: 'list',
206
+ items: [
207
+ '<strong>Отладка сервера:</strong> Когда вы устанавливаете сертификат, а сайт продолжает давать ошибки, чтобы проверить, что вы случайно не загрузили старый сертификат.',
208
+ '<strong>Проверка цепочки:</strong> Чтобы посмотреть, содержит ли файл конечный сертификат или промежуточный.',
209
+ '<strong>Аудит активов:</strong> Чтобы проверить, какой Центр Сертификации использовался в старом проекте.',
210
+ '<strong>Целостность копии:</strong> При перемещении сертификатов между серверами, чтобы убедиться, что файл не повреждён, сравнивая его отпечаток SHA-256.',
211
+ ],
212
+ },
213
+ ],
214
+ };
215
+