@jjlmoya/utils-developer 1.4.0 → 1.6.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/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_language_code_format.test.ts +25 -0
  19. package/src/tests/slug_uniqueness.test.ts +87 -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 +1 -0
  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 +1 -0
  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 +1 -0
  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,162 @@
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { UrlEncoderDecoderUI } from '../ui';
4
+
5
+ const slug = 'url-kodlayici-ve-cozucu';
6
+ const title = 'Çevrimiçi URL Kodlayıcı ve Çözücü';
7
+ const description =
8
+ 'Herhangi bir bağlantıdaki özel karakterleri güvenli formata (Percent-Encoding) dönüştürün veya anında ve yerel olarak orijinal okunabilir durumuna geri döndürün.';
9
+
10
+ const faqData = [
11
+ {
12
+ question: 'Bir URL\'de hangi karakterler kodlanır?',
13
+ answer:
14
+ 'URL\'ler için ASCII standardında izin verilmeyen tüm karakterler kodlanır: boşluklar, aksanlı harfler, &, =, +, #, ?, / gibi semboller ve diğerleri. Örneğin, bir boşluk %20 olur ve ñ %C3%B1 olur.',
15
+ },
16
+ {
17
+ question: 'encodeURI ve encodeURIComponent arasındaki fark nedir?',
18
+ answer:
19
+ 'encodeURI tam bir URL\'yi kodlar ve / ve ? gibi ayrılmış karakterleri olduğu gibi bırakır. encodeURIComponent, ayrılmış karakterler dahil tüm özel karakterleri kodlar; bu da onu bireysel sorgu parametresi değerlerini kodlamak için ideal kılar.',
20
+ },
21
+ {
22
+ question: 'URL\'mde neden boşluk yerine %20 var?',
23
+ answer:
24
+ 'HTTP protokolü URL\'lerde boşluklara izin vermez. %20, ASCII standardına göre bir boşluğun Yüzde-Kodlama (Percent-Encoding) temsilidir. Bazı sistemler alternatif olarak + işaretini kullanır, ancak %20 en evrensel ve güvenli olanıdır.',
25
+ },
26
+ {
27
+ question: 'Bu aracı özel URL\'lerle kullanmak güvenli mi?',
28
+ answer:
29
+ 'Evet, tamamen güvenli. Tüm işlemler yerel JavaScript (encodeURIComponent/decodeURIComponent) kullanılarak tarayıcınızda gerçekleşir. URL\'lerinizin veya parametrelerinizin hiçbiri herhangi bir harici sunucuya gönderilmez.',
30
+ },
31
+ ];
32
+
33
+ const howToData = [
34
+ {
35
+ name: 'Ham metni yapıştırın',
36
+ text: 'URL veya metin dizinizi üstteki "Ham Metin (Okunabilir)" alanına yazın veya yapıştırın.',
37
+ },
38
+ {
39
+ name: 'Kodlayın veya çözün',
40
+ text: 'Metni güvenli Yüzde-Kodlama formatına dönüştürmek için "URL\'yi Kodla"ya tıklayın veya kodlanmış bir URL\'yi okunabilir formuna geri döndürmek için "Çöz"e tıklayın.',
41
+ },
42
+ {
43
+ name: 'Sonucu kopyalayın',
44
+ text: 'Sonucu panonuza almak için ilgili alanın "Kopyala" düğmesini kullanı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: UrlEncoderDecoderUI = {
83
+ labelRaw: 'Ham Metin (Okunabilir)',
84
+ labelEncoded: 'Formatlanmış URL (Kodlanmış)',
85
+ btnClear: 'Temizle',
86
+ btnCopy: 'Kopyala',
87
+ btnCopied: 'Kopyalandı!',
88
+ btnEncode: 'URL\'yi Kodla',
89
+ btnDecode: 'Çöz',
90
+ placeholderRaw: 'https://example.com/search?q=kırmızı ayakkabı&size=38',
91
+ placeholderEncoded: 'https%3A%2F%2Fexample.com%2Fsearch%3Fq%3Dk%C4%B1rm%C4%B1z%C4%B1%20ayakkab%C4%B1%26size%3D38',
92
+ };
93
+
94
+ export const content: ToolLocaleContent<UrlEncoderDecoderUI> = {
95
+ slug,
96
+ title,
97
+ description,
98
+ ui,
99
+ faqTitle: 'Sıkça Sorulan Sorular',
100
+ faq: faqData,
101
+ bibliographyTitle: 'Referanslar ve Dokümantasyon',
102
+ bibliography: [
103
+ {
104
+ name: 'MDN Web Docs: encodeURIComponent()',
105
+ url: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent',
106
+ },
107
+ {
108
+ name: 'IETF RFC 3986: URI Generic Syntax',
109
+ url: 'https://datatracker.ietf.org/doc/html/rfc3986',
110
+ },
111
+ {
112
+ name: 'W3C: URL Living Standard',
113
+ url: 'https://url.spec.whatwg.org/',
114
+ },
115
+ ],
116
+ howTo: howToData,
117
+ schemas: [faqSchema, howToSchema, appSchema],
118
+ seo: [
119
+ {
120
+ type: 'title',
121
+ text: 'URL Kodlama Nedir?',
122
+ level: 2,
123
+ },
124
+ {
125
+ type: 'paragraph',
126
+ html: 'İnternette gezinirken veya sunuculara istek gönderirken, bir URL\'yi (Uniform Resource Locator) basitçe bir "web adresi" olarak düşünmek yaygındır. Ancak internet protokolü, URL\'lerin yalnızca çok kısıtlı bir <strong>standart ASCII</strong> karakter seti kullanılarak iletilebileceğini belirtir.',
127
+ },
128
+ {
129
+ type: 'paragraph',
130
+ html: 'URL; boşluk, aksanlı harfler veya artı (<code>+</code>) veya eşittir (<code>=</code>) işaretleri gibi özel parametreler içeriyorsa ne olur? Sistemlerin geçersiz karakterleri okumaya çalışırken çökmesini önlemek için, bunların <strong>Yüzde-Kodlama</strong> (Percent-Encoding) kullanılarak güvenli uyumlu formlarına çevrilmesi gerekir.',
131
+ },
132
+ {
133
+ type: 'title',
134
+ text: 'Yüzde-Kodlama Nasıl Çalışır?',
135
+ level: 3,
136
+ },
137
+ {
138
+ type: 'paragraph',
139
+ html: 'Bu aracı kullandığınızda, algoritma herhangi bir "güvensiz" karakteri (boşluk veya ñ gibi aksanlı bir harf gibi) alır ve onu bir yüzde işareti <code>%</code> ile ardından UTF-8 standardındaki değerine karşılık gelen iki onaltılık basamakla değiştirir.',
140
+ },
141
+ {
142
+ type: 'list',
143
+ items: [
144
+ '<strong>Temel Örnek:</strong> Basit bir boşluk, güvenli eşdeğeriyle değiştirilecektir: <code>%20</code>.',
145
+ '<strong>Genişletilmiş Destek:</strong> <code>ğ</code> harfi <code>%C4%9F</code> olur ve <code>ş</code>, <code>%C5%9F</code> olur.',
146
+ ],
147
+ },
148
+ {
149
+ type: 'title',
150
+ text: 'API\'lerde ve GET İsteklerinde Önemi',
151
+ level: 3,
152
+ },
153
+ {
154
+ type: 'paragraph',
155
+ html: 'Entegrasyonlar geliştirirken tipik bir hata, URL parametrelerine ham bir dize geçirmektir. Arka ucunuza <code>tişört&mavi</code> ham dizesini eklerseniz (<code>/search?q=tişört&mavi</code>), sunucu <code>mavi</code>\'yi yeni bir parametre olarak yorumlayacak ve tüm mantığı bozacaktır.',
156
+ },
157
+ {
158
+ type: 'paragraph',
159
+ html: 'Bu araç, yerel tarayıcınızda %100 yürütme ile temiz, otomatik hesaplamaları garanti eder. URL dizelerinizin hiçbiri üçüncü taraf sunuculara iletilmez, böylece belirteçlerinizin (token) ve analitik parametrelerinizin gizliliği sağlanır.',
160
+ },
161
+ ],
162
+ };
@@ -0,0 +1,163 @@
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { UrlEncoderDecoderUI } from '../ui';
4
+
5
+ const slug = 'url-encoder-decoder';
6
+ const title = '在线 URL 编码器和解码器';
7
+ const description =
8
+ '将任何链接中的特殊字符转换为安全格式(百分比编码),或立即在本地将其恢复为原始的可读状态。';
9
+
10
+ const faqData = [
11
+ {
12
+ question: 'URL 中哪些字符会被编码?',
13
+ answer:
14
+ '所有 URL 的 ASCII 标准中不允许的字符都会被编码:空格、带重音符号的字母、符号(如 &、=、+、#、?、/ 等)等。例如,空格变为 %20,ñ 变为 %C3%B1。',
15
+ },
16
+ {
17
+ question: 'encodeURI 和 encodeURIComponent 之间有什么区别?',
18
+ answer:
19
+ 'encodeURI 对整个 URL 进行编码,并保留保留字符(如 / 和 ?)不变。encodeURIComponent 编码包括保留字符在内的所有特殊字符,因此非常适合编码单个查询参数值。',
20
+ },
21
+ {
22
+ question: '为什么我的 URL 中有 %20 而不是空格?',
23
+ answer:
24
+ 'HTTP 协议不允许 URL 中出现空格。根据 ASCII 标准,%20 是空格的百分比编码表示形式。有些系统使用 + 号作为替代方案,但 %20 是最通用且安全的。',
25
+ },
26
+ {
27
+ question: '在私有 URL 上使用此工具安全吗?',
28
+ answer:
29
+ '是的,非常安全。所有处理都在您的浏览器中使用原生 JavaScript(encodeURIComponent/decodeURIComponent)完成。您的任何 URL 或参数都不会发送到任何外部服务器。',
30
+ },
31
+ ];
32
+
33
+ const howToData = [
34
+ {
35
+ name: '粘贴原始文本',
36
+ text: '在上方“原始文本(可读)”字段中输入或粘贴您的 URL 或文本字符串。',
37
+ },
38
+ {
39
+ name: '编码或解码',
40
+ text: '点击“URL 编码”将文本转换为安全的百分比编码格式,或点击“解码”将已编码的 URL 恢复为可读形式。',
41
+ },
42
+ {
43
+ name: '复制结果',
44
+ text: '使用对应字段的“复制”按钮将结果保存到剪贴板。',
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: UrlEncoderDecoderUI = {
83
+ labelRaw: '原始文本 (可读)',
84
+ labelEncoded: '格式化 URL (已编码)',
85
+ btnClear: '清除',
86
+ btnCopy: '复制',
87
+ btnCopied: '已复制!',
88
+ btnEncode: 'URL 编码',
89
+ btnDecode: '解码',
90
+ placeholderRaw: 'https://example.com/search?q=红色高跟鞋&size=38',
91
+ placeholderEncoded: 'https%3A%2F%2Fexample.com%2Fsearch%3Fq%3D%E7%BA%A2%E8%89%B2%E9%AB%98%E8%B7%9F%E9%9E%8B%26size%3D38',
92
+ };
93
+
94
+ export const content: ToolLocaleContent<UrlEncoderDecoderUI> = {
95
+ slug,
96
+ title,
97
+ description,
98
+ ui,
99
+ faqTitle: '常见问题',
100
+ faq: faqData,
101
+ bibliographyTitle: '参考资料与文档',
102
+ bibliography: [
103
+ {
104
+ name: 'MDN Web Docs: encodeURIComponent()',
105
+ url: 'https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent',
106
+ },
107
+ {
108
+ name: 'IETF RFC 3986: URI Generic Syntax',
109
+ url: 'https://datatracker.ietf.org/doc/html/rfc3986',
110
+ },
111
+ {
112
+ name: 'W3C: URL Living Standard',
113
+ url: 'https://url.spec.whatwg.org/',
114
+ },
115
+ ],
116
+ howTo: howToData,
117
+ schemas: [faqSchema, howToSchema, appSchema],
118
+ seo: [
119
+ {
120
+ type: 'title',
121
+ text: '什么是 URL 编码?',
122
+ level: 2,
123
+ },
124
+ {
125
+ type: 'paragraph',
126
+ html: '在浏览互联网或向服务器发送请求时,人们通常将 URL(统一资源定位符)简单地视为“网址”。然而,互联网协议规定 URL 只能使用非常有限的 <strong>标准 ASCII</strong> 字符集进行传输。',
127
+ },
128
+ {
129
+ type: 'paragraph',
130
+ html: '如果 URL 包含空格、带重音符号的字母或特殊参数(如加号 <code>+</code> 或等号 <code>=</code>)会发生什么?为了防止系统在尝试读取非法字符时崩溃,必须使用<strong>百分比编码</strong>将其转换为安全的兼容形式。',
131
+ },
132
+ {
133
+ type: 'title',
134
+ text: '百分比编码的工作原理',
135
+ level: 3,
136
+ },
137
+ {
138
+ type: 'paragraph',
139
+ html: '当您使用此工具时,算法会将任何“不安全”的字符(如空格或 ñ 等带重音符号的字母)替换为百分号 <code>%</code>,后跟与其在 UTF-8 标准中的值相对应的两个十六进制数字。',
140
+ },
141
+ {
142
+ type: 'list',
143
+ items: [
144
+ '<strong>基本示例:</strong> 一个简单的空格将被其安全对应项 <code>%20</code> 替换。',
145
+ '<strong>扩展支持:</strong> 字母 <code>啊</code> 变为 <code>%E5%95%8A</code>。',
146
+ ],
147
+ },
148
+ {
149
+ type: 'title',
150
+ text: '在 API 和 GET 请求中的重要性',
151
+ level: 3,
152
+ },
153
+ {
154
+ type: 'paragraph',
155
+ html: '在开发集成时,一个典型的错误是将原始字符串传递给 URL 参数。如果您将 <code>shirt&blue</code> 直接插入到后端(<code>/search?q=shirt&blue</code>),服务器会将 <code>blue</code> 解释为一个新参数,从而破坏所有逻辑。',
156
+ },
157
+ {
158
+ type: 'paragraph',
159
+ html: '此工具通过在本地浏览器中 100% 执行,保证了计算的纯净和自动。您的任何 URL 字符串都不会传输到第三方服务器,从而确保了令牌和分析参数的隐私。',
160
+ },
161
+ ],
162
+ };
163
+
@@ -7,10 +7,6 @@ import type { UrlEncoderDecoderUI } from './ui';
7
7
 
8
8
  export type UrlEncoderDecoderLocaleContent = ToolLocaleContent<UrlEncoderDecoderUI>;
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 urlEncoderDecoder: DeveloperToolEntry<UrlEncoderDecoderUI> = {
15
11
  id: 'url-encoder-decoder',
16
12
  icons: {
@@ -18,9 +14,21 @@ export const urlEncoderDecoder: DeveloperToolEntry<UrlEncoderDecoderUI> = {
18
14
  fg: 'mdi:code-brackets',
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,118 @@
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { UtmGeneratorUI } from '../ui';
4
+
5
+ const slug = 'utm-parameter-erzeuger';
6
+ const title = 'UTM Parameter Generator für Google Analytics';
7
+ const description = 'Erstellen Sie präzise Tracking-Links für Ihre digitalen Marketingkampagnen. Optimiert für Google Analytics und andere Analysetools.';
8
+
9
+ const faqData = [
10
+ {
11
+ question: 'Ist die Verwendung von UTM-Parametern schlecht für SEO?',
12
+ answer: 'Nein, solange Sie Canonical-Tags verwenden. Suchmaschinen verstehen, dass UTM-Parameter für Analysen gedacht sind und keine doppelten Inhalte erzeugen.',
13
+ },
14
+ {
15
+ question: 'Sollte ich UTM-Parameter für interne Links verwenden?',
16
+ answer: 'Nein, niemals. UTM-Tags bei internen Links unterbrechen die Nutzersitzung in Tools wie Google Analytics und verfälschen Ihre Traffic-Daten.',
17
+ },
18
+ {
19
+ question: 'Unterscheidet Google Analytics bei UTM zwischen Groß- und Kleinschreibung?',
20
+ answer: 'Ja. „google“, „Google“ und „GOOGLE“ werden als unterschiedliche Quellen behandelt. Achten Sie immer auf Konsistenz, am besten verwenden Sie nur Kleinschreibung.',
21
+ },
22
+ ];
23
+
24
+ const howToData = [
25
+ { name: 'URL eingeben', text: 'Geben Sie die vollständige URL Ihrer Website ein, einschließlich https://' },
26
+ { name: 'Quelle definieren', text: 'Geben Sie an, woher der Traffic kommt (google, facebook, newsletter usw.)' },
27
+ { name: 'Medium auswählen', text: 'Wählen Sie die Art des Kanals (cpc, email, social, organic usw.)' },
28
+ { name: 'Kampagne benennen', text: 'Geben Sie einen identifizierbaren Namen an, um Ihre Marketingaktivitäten zu gruppieren' },
29
+ { name: 'Kopieren und verwenden', text: 'Kopieren Sie die generierte URL und verwenden Sie sie in Ihren Beiträgen, Anzeigen oder E-Mail-Signaturen' },
30
+ ];
31
+
32
+ const faqSchema: WithContext<FAQPage> = {
33
+ '@context': 'https://schema.org',
34
+ '@type': 'FAQPage',
35
+ mainEntity: faqData.map((item) => ({
36
+ '@type': 'Question',
37
+ name: item.question,
38
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
39
+ })),
40
+ };
41
+
42
+ const howToSchema: WithContext<HowToThing> = {
43
+ '@context': 'https://schema.org',
44
+ '@type': 'HowTo',
45
+ name: title,
46
+ description,
47
+ step: howToData.map((s, i) => ({ '@type': 'HowToStep', position: i + 1, name: s.name, text: s.text })),
48
+ };
49
+
50
+ const appSchema: WithContext<SoftwareApplication> = {
51
+ '@context': 'https://schema.org',
52
+ '@type': 'SoftwareApplication',
53
+ name: title,
54
+ description,
55
+ applicationCategory: 'UtilityApplication',
56
+ operatingSystem: 'All',
57
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
58
+ inLanguage: 'de',
59
+ };
60
+
61
+ const ui: UtmGeneratorUI = {
62
+ labelUrl: 'Website-URL (z. B. https://example.com) *',
63
+ labelSource: 'Kampagnenquelle (z. B. google, newsletter) *',
64
+ labelMedium: 'Kampagnenmedium (z. B. cpc, email)',
65
+ labelCampaign: 'Kampagnenname (z. B. sommer_angebot)',
66
+ labelTerm: 'Kampagnenbegriff (z. B. schuhe_kaufen)',
67
+ labelContent: 'Kampagneninhalt (z. B. banner_oben)',
68
+ labelGenerated: 'Generierte URL:',
69
+ btnCopy: 'Link kopieren',
70
+ btnCopied: 'Kopiert!',
71
+ errorInvalid: 'Geben Sie eine gültige URL ein',
72
+ errorInvalidUrl: 'Ungültige URL',
73
+ };
74
+
75
+ export const content: ToolLocaleContent<UtmGeneratorUI> = {
76
+ slug,
77
+ title,
78
+ description,
79
+ ui,
80
+ faqTitle: 'Häufig gestellte Fragen',
81
+ faq: faqData,
82
+ bibliographyTitle: 'Referenzen',
83
+ bibliography: [
84
+ { name: 'Kampagnendaten mit benutzerdefinierten URLs erfassen - Google Analytics-Hilfe (2024)', url: 'https://support.google.com/analytics/answer/1033863' },
85
+ { name: 'Best Practices für die Kennzeichnung von Kampagnen-URLs - VWO Blog (2023)', url: 'https://vwo.com/blog/utm-tagging-best-practices/' },
86
+ ],
87
+ howTo: howToData,
88
+ schemas: [faqSchema, howToSchema, appSchema],
89
+ seo: [
90
+ { type: 'title', text: 'UTM-Generator: Tracking-Parameter für Google Analytics', level: 2 },
91
+ {
92
+ type: 'paragraph',
93
+ html: '<strong>UTM-Parameter</strong> (Urchin Tracking Module) sind Textlabels, die am Ende einer URL hinzugefügt werden, um den Web-Traffic zu verfolgen. Unser Generator vereinfacht das Erstellen von trackingfähigen Links für Ihre digitalen Marketingkampagnen.',
94
+ },
95
+ { type: 'title', text: 'Die 5 Säulen einer verfolgbaren URL', level: 3 },
96
+ {
97
+ type: 'list',
98
+ items: [
99
+ '<strong>Kampagnenquelle:</strong> Identifiziert die Suchmaschine, das soziale Netzwerk oder den Traffic-Ursprung. Beispiel: google, newsletter, facebook.',
100
+ '<strong>Kampagnenmedium:</strong> Bezieht sich auf den Marketingkanal. Beispiel: cpc, email, social, banner, organic.',
101
+ '<strong>Kampagnenname:</strong> Der spezifische Name Ihrer Kampagne. Beispiel: sommer_angebot_2025, app_launch_v2.',
102
+ '<strong>Kampagnenbegriff:</strong> Bei bezahlter Suche die Keywords, auf die Sie bieten. Beispiel: sportschuhe_kaufen.',
103
+ '<strong>Kampagneninhalt:</strong> Für A/B-Tests. Unterscheidet ähnliche Elemente innerhalb einer Kampagne. Beispiel: header_v1, sidebar_v2.',
104
+ ],
105
+ },
106
+ { type: 'title', text: 'Best Practices für UTM-Tagging', level: 3 },
107
+ {
108
+ type: 'list',
109
+ items: [
110
+ '<strong>Einheitliche Schreibweise:</strong> Tools unterscheiden zwischen „Google“, „GOOGLE“ und „google“. Verwenden Sie immer Kleinschreibung, um Duplikate zu vermeiden.',
111
+ '<strong>Leerzeichen vermeiden:</strong> Leerzeichen werden zu %20. Verwenden Sie stattdessen Bindestriche (-) oder Unterstriche (_).',
112
+ '<strong>Nicht bei internen Links verwenden:</strong> UTM-Tracking ist ausschließlich für externen Traffic gedacht. Bei internen Links unterbricht es die Sitzung und verfälscht wichtige Kennzahlen.',
113
+ '<strong>Dokumentieren Sie Ihre Tags:</strong> Führen Sie Protokoll über alle verwendeten Kombinationen, um Inkonsistenzen zu vermeiden.',
114
+ ],
115
+ },
116
+ ],
117
+ };
118
+
@@ -0,0 +1,118 @@
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { UtmGeneratorUI } from '../ui';
4
+
5
+ const slug = 'pembuat-parameter-utm';
6
+ const title = 'Generator Parameter UTM untuk Google Analytics';
7
+ const description = 'Buat tautan pelacakan yang presisi untuk kampanye pemasaran digital Anda. Dioptimalkan untuk Google Analytics dan alat analisis lainnya.';
8
+
9
+ const faqData = [
10
+ {
11
+ question: 'Apakah menggunakan parameter UTM buruk untuk SEO?',
12
+ answer: 'Tidak, asalkan Anda menggunakan tag kanonikal. Mesin pencari memahami bahwa parameter UTM adalah untuk analitik dan tidak membuat konten duplikat.',
13
+ },
14
+ {
15
+ question: 'Haruskah saya menggunakan parameter UTM untuk tautan internal?',
16
+ answer: 'Tidak, jangan pernah. Tag UTM pada tautan internal memutus sesi pengguna dalam alat seperti Google Analytics, sehingga mendistorsi data lalu lintas Anda.',
17
+ },
18
+ {
19
+ question: 'Apakah Google Analytics membedakan antara huruf besar dan huruf kecil dalam UTM?',
20
+ answer: 'Ya. "google", "Google" dan "GOOGLE" akan diperlakukan sebagai sumber yang berbeda. Selalu jaga konsistensi, sebaiknya gunakan huruf kecil saja.',
21
+ },
22
+ ];
23
+
24
+ const howToData = [
25
+ { name: 'Masukkan URL', text: 'Masukkan URL lengkap situs web Anda, termasuk https://' },
26
+ { name: 'Tentukan sumber', text: 'Tentukan dari mana lalu lintas berasal (google, facebook, newsletter, dll.)' },
27
+ { name: 'Pilih media', text: 'Pilih jenis saluran (cpc, email, sosial, organik, dll.)' },
28
+ { name: 'Beri nama kampanye Anda', text: 'Tetapkan nama yang dapat diidentifikasi untuk mengelompokkan upaya pemasaran Anda' },
29
+ { name: 'Salin dan gunakan', text: 'Salin URL yang dihasilkan dan gunakan dalam postingan, iklan, atau tanda tangan email Anda' },
30
+ ];
31
+
32
+ const faqSchema: WithContext<FAQPage> = {
33
+ '@context': 'https://schema.org',
34
+ '@type': 'FAQPage',
35
+ mainEntity: faqData.map((item) => ({
36
+ '@type': 'Question',
37
+ name: item.question,
38
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
39
+ })),
40
+ };
41
+
42
+ const howToSchema: WithContext<HowToThing> = {
43
+ '@context': 'https://schema.org',
44
+ '@type': 'HowTo',
45
+ name: title,
46
+ description,
47
+ step: howToData.map((s, i) => ({ '@type': 'HowToStep', position: i + 1, name: s.name, text: s.text })),
48
+ };
49
+
50
+ const appSchema: WithContext<SoftwareApplication> = {
51
+ '@context': 'https://schema.org',
52
+ '@type': 'SoftwareApplication',
53
+ name: title,
54
+ description,
55
+ applicationCategory: 'UtilityApplication',
56
+ operatingSystem: 'All',
57
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
58
+ inLanguage: 'id',
59
+ };
60
+
61
+ const ui: UtmGeneratorUI = {
62
+ labelUrl: 'URL Situs Web (misal: https://example.com) *',
63
+ labelSource: 'Sumber kampanye (misal: google, newsletter) *',
64
+ labelMedium: 'Media kampanye (misal: cpc, email)',
65
+ labelCampaign: 'Nama kampanye (misal: penawaran_musim_panas)',
66
+ labelTerm: 'Istilah kampanye (misal: beli_sepatu)',
67
+ labelContent: 'Konten kampanye (misal: banner_atas)',
68
+ labelGenerated: 'URL yang Dihasilkan:',
69
+ btnCopy: 'Salin Tautan',
70
+ btnCopied: 'Tersalin!',
71
+ errorInvalid: 'Masukkan URL yang valid',
72
+ errorInvalidUrl: 'URL tidak valid',
73
+ };
74
+
75
+ export const content: ToolLocaleContent<UtmGeneratorUI> = {
76
+ slug,
77
+ title,
78
+ description,
79
+ ui,
80
+ faqTitle: 'Pertanyaan yang Sering Diajukan',
81
+ faq: faqData,
82
+ bibliographyTitle: 'Referensi',
83
+ bibliography: [
84
+ { name: 'Mengumpulkan data kampanye dengan URL kustom - Bantuan Google Analytics (2024)', url: 'https://support.google.com/analytics/answer/1033863' },
85
+ { name: 'Praktik Terbaik untuk Penandaan URL Kampanye - Blog VWO (2023)', url: 'https://vwo.com/blog/utm-tagging-best-practices/' },
86
+ ],
87
+ howTo: howToData,
88
+ schemas: [faqSchema, howToSchema, appSchema],
89
+ seo: [
90
+ { type: 'title', text: 'Generator UTM: Parameter Pelacakan untuk Google Analytics', level: 2 },
91
+ {
92
+ type: 'paragraph',
93
+ html: 'Parameter <strong>UTM</strong> (Urchin Tracking Module) adalah label teks yang ditambahkan ke akhir URL untuk melacak lalu lintas web. Generator kami menyederhanakan pembuatan tautan yang dapat dilacak untuk kampanye pemasaran digital Anda.',
94
+ },
95
+ { type: 'title', text: '5 Pilar Tautan yang Dapat Dilacak', level: 3 },
96
+ {
97
+ type: 'list',
98
+ items: [
99
+ '<strong>Sumber Kampanye:</strong> Mengidentifikasi mesin pencari, jejaring sosial, atau asal lalu lintas. Contoh: google, newsletter, facebook.',
100
+ '<strong>Media Kampanye:</strong> Mengacu pada saluran pemasaran. Contoh: cpc, email, sosial, banner, organik.',
101
+ '<strong>Nama Kampanye:</strong> Nama spesifik kampanye Anda. Contoh: penawaran_musim_panas_2025, peluncuran_aplikasi_v2.',
102
+ '<strong>Istilah Kampanye:</strong> Untuk pencarian berbayar, kata kunci yang Anda bidik. Contoh: beli_sepatu_olahraga.',
103
+ '<strong>Konten Kampanye:</strong> Untuk pengujian A/B. Membedakan elemen serupa dalam sebuah kampanye. Contoh: header_v1, sidebar_v2.',
104
+ ],
105
+ },
106
+ { type: 'title', text: 'Praktik Terbaik untuk Penandaan UTM', level: 3 },
107
+ {
108
+ type: 'list',
109
+ items: [
110
+ '<strong>Konsistensi huruf:</strong> Alat membedakan antara "Google", "GOOGLE" dan "google". Selalu gunakan huruf kecil untuk menghindari duplikat.',
111
+ '<strong>Hindari spasi:</strong> Spasi menjadi %20. Gunakan tanda hubung (-) atau garis bawah (_) sebagai gantinya.',
112
+ '<strong>Jangan gunakan pada tautan internal:</strong> Pelacakan UTM khusus untuk lalu lintas eksternal. Pada tautan internal, ini memutus sesi dan merusak metrik utama.',
113
+ '<strong>Dokumentasikan tag Anda:</strong> Tetap catat semua kombinasi yang Anda gunakan untuk mencegah ketidakkonsistenan.',
114
+ ],
115
+ },
116
+ ],
117
+ };
118
+