@jjlmoya/utils-converters 1.7.0 → 1.9.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 (346) hide show
  1. package/package.json +60 -59
  2. package/src/shared/logic/schemas.ts +57 -0
  3. package/src/tests/faq_count.test.ts +13 -4
  4. package/src/tests/i18n_coverage.test.ts +36 -0
  5. package/src/tests/locale_completeness.test.ts +42 -0
  6. package/src/tests/no_h1_in_components.test.ts +48 -0
  7. package/src/tests/schemas_fulfillment.test.ts +23 -0
  8. package/src/tests/seo_length.test.ts +1 -1
  9. package/src/tests/slug_uniqueness.test.ts +81 -0
  10. package/src/tests/title_quality.test.ts +55 -0
  11. package/src/tool/avifAJpg/i18n/de.ts +178 -0
  12. package/src/tool/avifAJpg/i18n/en.ts +2 -12
  13. package/src/tool/avifAJpg/i18n/es.ts +2 -12
  14. package/src/tool/avifAJpg/i18n/fr.ts +2 -12
  15. package/src/tool/avifAJpg/i18n/id.ts +178 -0
  16. package/src/tool/avifAJpg/i18n/it.ts +178 -0
  17. package/src/tool/avifAJpg/i18n/ja.ts +178 -0
  18. package/src/tool/avifAJpg/i18n/ko.ts +178 -0
  19. package/src/tool/avifAJpg/i18n/nl.ts +178 -0
  20. package/src/tool/avifAJpg/i18n/pl.ts +178 -0
  21. package/src/tool/avifAJpg/i18n/pt.ts +178 -0
  22. package/src/tool/avifAJpg/i18n/ru.ts +178 -0
  23. package/src/tool/avifAJpg/i18n/sv.ts +178 -0
  24. package/src/tool/avifAJpg/i18n/tr.ts +178 -0
  25. package/src/tool/avifAJpg/i18n/zh.ts +178 -0
  26. package/src/tool/avifAJpg/index.ts +13 -1
  27. package/src/tool/avifAPng/i18n/de.ts +178 -0
  28. package/src/tool/avifAPng/i18n/en.ts +2 -12
  29. package/src/tool/avifAPng/i18n/es.ts +2 -12
  30. package/src/tool/avifAPng/i18n/fr.ts +2 -12
  31. package/src/tool/avifAPng/i18n/id.ts +178 -0
  32. package/src/tool/avifAPng/i18n/it.ts +178 -0
  33. package/src/tool/avifAPng/i18n/ja.ts +178 -0
  34. package/src/tool/avifAPng/i18n/ko.ts +178 -0
  35. package/src/tool/avifAPng/i18n/nl.ts +178 -0
  36. package/src/tool/avifAPng/i18n/pl.ts +178 -0
  37. package/src/tool/avifAPng/i18n/pt.ts +178 -0
  38. package/src/tool/avifAPng/i18n/ru.ts +178 -0
  39. package/src/tool/avifAPng/i18n/sv.ts +178 -0
  40. package/src/tool/avifAPng/i18n/tr.ts +178 -0
  41. package/src/tool/avifAPng/i18n/zh.ts +178 -0
  42. package/src/tool/avifAPng/index.ts +13 -1
  43. package/src/tool/avifAWebp/i18n/de.ts +178 -0
  44. package/src/tool/avifAWebp/i18n/en.ts +2 -12
  45. package/src/tool/avifAWebp/i18n/es.ts +2 -12
  46. package/src/tool/avifAWebp/i18n/fr.ts +2 -12
  47. package/src/tool/avifAWebp/i18n/id.ts +178 -0
  48. package/src/tool/avifAWebp/i18n/it.ts +178 -0
  49. package/src/tool/avifAWebp/i18n/ja.ts +178 -0
  50. package/src/tool/avifAWebp/i18n/ko.ts +178 -0
  51. package/src/tool/avifAWebp/i18n/nl.ts +178 -0
  52. package/src/tool/avifAWebp/i18n/pl.ts +178 -0
  53. package/src/tool/avifAWebp/i18n/pt.ts +178 -0
  54. package/src/tool/avifAWebp/i18n/ru.ts +178 -0
  55. package/src/tool/avifAWebp/i18n/sv.ts +178 -0
  56. package/src/tool/avifAWebp/i18n/tr.ts +178 -0
  57. package/src/tool/avifAWebp/i18n/zh.ts +178 -0
  58. package/src/tool/avifAWebp/index.ts +13 -1
  59. package/src/tool/bmpAJpg/i18n/de.ts +178 -0
  60. package/src/tool/bmpAJpg/i18n/en.ts +2 -12
  61. package/src/tool/bmpAJpg/i18n/es.ts +2 -12
  62. package/src/tool/bmpAJpg/i18n/fr.ts +2 -12
  63. package/src/tool/bmpAJpg/i18n/id.ts +178 -0
  64. package/src/tool/bmpAJpg/i18n/it.ts +178 -0
  65. package/src/tool/bmpAJpg/i18n/ja.ts +178 -0
  66. package/src/tool/bmpAJpg/i18n/ko.ts +178 -0
  67. package/src/tool/bmpAJpg/i18n/nl.ts +178 -0
  68. package/src/tool/bmpAJpg/i18n/pl.ts +178 -0
  69. package/src/tool/bmpAJpg/i18n/pt.ts +178 -0
  70. package/src/tool/bmpAJpg/i18n/ru.ts +178 -0
  71. package/src/tool/bmpAJpg/i18n/sv.ts +178 -0
  72. package/src/tool/bmpAJpg/i18n/tr.ts +178 -0
  73. package/src/tool/bmpAJpg/i18n/zh.ts +178 -0
  74. package/src/tool/bmpAJpg/index.ts +13 -1
  75. package/src/tool/bmpAPng/i18n/de.ts +177 -0
  76. package/src/tool/bmpAPng/i18n/en.ts +2 -12
  77. package/src/tool/bmpAPng/i18n/es.ts +2 -12
  78. package/src/tool/bmpAPng/i18n/fr.ts +2 -12
  79. package/src/tool/bmpAPng/i18n/id.ts +177 -0
  80. package/src/tool/bmpAPng/i18n/it.ts +177 -0
  81. package/src/tool/bmpAPng/i18n/ja.ts +177 -0
  82. package/src/tool/bmpAPng/i18n/ko.ts +177 -0
  83. package/src/tool/bmpAPng/i18n/nl.ts +177 -0
  84. package/src/tool/bmpAPng/i18n/pl.ts +177 -0
  85. package/src/tool/bmpAPng/i18n/pt.ts +177 -0
  86. package/src/tool/bmpAPng/i18n/ru.ts +177 -0
  87. package/src/tool/bmpAPng/i18n/sv.ts +177 -0
  88. package/src/tool/bmpAPng/i18n/tr.ts +177 -0
  89. package/src/tool/bmpAPng/i18n/zh.ts +177 -0
  90. package/src/tool/bmpAPng/index.ts +13 -1
  91. package/src/tool/bmpAWebp/i18n/de.ts +178 -0
  92. package/src/tool/bmpAWebp/i18n/en.ts +2 -12
  93. package/src/tool/bmpAWebp/i18n/es.ts +2 -12
  94. package/src/tool/bmpAWebp/i18n/fr.ts +2 -12
  95. package/src/tool/bmpAWebp/i18n/id.ts +178 -0
  96. package/src/tool/bmpAWebp/i18n/it.ts +178 -0
  97. package/src/tool/bmpAWebp/i18n/ja.ts +178 -0
  98. package/src/tool/bmpAWebp/i18n/ko.ts +178 -0
  99. package/src/tool/bmpAWebp/i18n/nl.ts +178 -0
  100. package/src/tool/bmpAWebp/i18n/pl.ts +178 -0
  101. package/src/tool/bmpAWebp/i18n/pt.ts +178 -0
  102. package/src/tool/bmpAWebp/i18n/ru.ts +178 -0
  103. package/src/tool/bmpAWebp/i18n/sv.ts +178 -0
  104. package/src/tool/bmpAWebp/i18n/tr.ts +178 -0
  105. package/src/tool/bmpAWebp/i18n/zh.ts +178 -0
  106. package/src/tool/bmpAWebp/index.ts +13 -1
  107. package/src/tool/gifAJpg/i18n/de.ts +178 -0
  108. package/src/tool/gifAJpg/i18n/en.ts +2 -12
  109. package/src/tool/gifAJpg/i18n/es.ts +2 -12
  110. package/src/tool/gifAJpg/i18n/fr.ts +2 -12
  111. package/src/tool/gifAJpg/i18n/id.ts +178 -0
  112. package/src/tool/gifAJpg/i18n/it.ts +178 -0
  113. package/src/tool/gifAJpg/i18n/ja.ts +178 -0
  114. package/src/tool/gifAJpg/i18n/ko.ts +178 -0
  115. package/src/tool/gifAJpg/i18n/nl.ts +178 -0
  116. package/src/tool/gifAJpg/i18n/pl.ts +178 -0
  117. package/src/tool/gifAJpg/i18n/pt.ts +178 -0
  118. package/src/tool/gifAJpg/i18n/ru.ts +178 -0
  119. package/src/tool/gifAJpg/i18n/sv.ts +178 -0
  120. package/src/tool/gifAJpg/i18n/tr.ts +178 -0
  121. package/src/tool/gifAJpg/i18n/zh.ts +178 -0
  122. package/src/tool/gifAJpg/index.ts +13 -1
  123. package/src/tool/gifAPng/i18n/de.ts +178 -0
  124. package/src/tool/gifAPng/i18n/en.ts +2 -12
  125. package/src/tool/gifAPng/i18n/es.ts +2 -12
  126. package/src/tool/gifAPng/i18n/fr.ts +2 -12
  127. package/src/tool/gifAPng/i18n/id.ts +178 -0
  128. package/src/tool/gifAPng/i18n/it.ts +178 -0
  129. package/src/tool/gifAPng/i18n/ja.ts +178 -0
  130. package/src/tool/gifAPng/i18n/ko.ts +178 -0
  131. package/src/tool/gifAPng/i18n/nl.ts +178 -0
  132. package/src/tool/gifAPng/i18n/pl.ts +178 -0
  133. package/src/tool/gifAPng/i18n/pt.ts +178 -0
  134. package/src/tool/gifAPng/i18n/ru.ts +178 -0
  135. package/src/tool/gifAPng/i18n/sv.ts +178 -0
  136. package/src/tool/gifAPng/i18n/tr.ts +178 -0
  137. package/src/tool/gifAPng/i18n/zh.ts +178 -0
  138. package/src/tool/gifAPng/index.ts +12 -0
  139. package/src/tool/gifAWebp/i18n/de.ts +178 -0
  140. package/src/tool/gifAWebp/i18n/en.ts +2 -12
  141. package/src/tool/gifAWebp/i18n/es.ts +2 -12
  142. package/src/tool/gifAWebp/i18n/fr.ts +2 -12
  143. package/src/tool/gifAWebp/i18n/id.ts +178 -0
  144. package/src/tool/gifAWebp/i18n/it.ts +178 -0
  145. package/src/tool/gifAWebp/i18n/ja.ts +178 -0
  146. package/src/tool/gifAWebp/i18n/ko.ts +178 -0
  147. package/src/tool/gifAWebp/i18n/nl.ts +178 -0
  148. package/src/tool/gifAWebp/i18n/pl.ts +178 -0
  149. package/src/tool/gifAWebp/i18n/pt.ts +178 -0
  150. package/src/tool/gifAWebp/i18n/ru.ts +178 -0
  151. package/src/tool/gifAWebp/i18n/sv.ts +178 -0
  152. package/src/tool/gifAWebp/i18n/tr.ts +178 -0
  153. package/src/tool/gifAWebp/i18n/zh.ts +178 -0
  154. package/src/tool/gifAWebp/index.ts +12 -0
  155. package/src/tool/imagenBase64/i18n/de.ts +168 -0
  156. package/src/tool/imagenBase64/i18n/en.ts +2 -12
  157. package/src/tool/imagenBase64/i18n/es.ts +2 -12
  158. package/src/tool/imagenBase64/i18n/fr.ts +2 -12
  159. package/src/tool/imagenBase64/i18n/id.ts +168 -0
  160. package/src/tool/imagenBase64/i18n/it.ts +168 -0
  161. package/src/tool/imagenBase64/i18n/ja.ts +168 -0
  162. package/src/tool/imagenBase64/i18n/ko.ts +168 -0
  163. package/src/tool/imagenBase64/i18n/nl.ts +168 -0
  164. package/src/tool/imagenBase64/i18n/pl.ts +168 -0
  165. package/src/tool/imagenBase64/i18n/pt.ts +173 -0
  166. package/src/tool/imagenBase64/i18n/ru.ts +168 -0
  167. package/src/tool/imagenBase64/i18n/sv.ts +168 -0
  168. package/src/tool/imagenBase64/i18n/tr.ts +168 -0
  169. package/src/tool/imagenBase64/i18n/zh.ts +168 -0
  170. package/src/tool/imagenBase64/index.ts +12 -0
  171. package/src/tool/jpgAIco/i18n/de.ts +183 -0
  172. package/src/tool/jpgAIco/i18n/en.ts +8 -13
  173. package/src/tool/jpgAIco/i18n/es.ts +13 -18
  174. package/src/tool/jpgAIco/i18n/fr.ts +9 -14
  175. package/src/tool/jpgAIco/i18n/id.ts +183 -0
  176. package/src/tool/jpgAIco/i18n/it.ts +183 -0
  177. package/src/tool/jpgAIco/i18n/ja.ts +183 -0
  178. package/src/tool/jpgAIco/i18n/ko.ts +183 -0
  179. package/src/tool/jpgAIco/i18n/nl.ts +183 -0
  180. package/src/tool/jpgAIco/i18n/pl.ts +183 -0
  181. package/src/tool/jpgAIco/i18n/pt.ts +183 -0
  182. package/src/tool/jpgAIco/i18n/ru.ts +183 -0
  183. package/src/tool/jpgAIco/i18n/sv.ts +183 -0
  184. package/src/tool/jpgAIco/i18n/tr.ts +183 -0
  185. package/src/tool/jpgAIco/i18n/zh.ts +183 -0
  186. package/src/tool/jpgAIco/index.ts +12 -0
  187. package/src/tool/jpgAPng/i18n/de.ts +178 -0
  188. package/src/tool/jpgAPng/i18n/en.ts +2 -12
  189. package/src/tool/jpgAPng/i18n/es.ts +2 -12
  190. package/src/tool/jpgAPng/i18n/fr.ts +2 -12
  191. package/src/tool/jpgAPng/i18n/id.ts +178 -0
  192. package/src/tool/jpgAPng/i18n/it.ts +178 -0
  193. package/src/tool/jpgAPng/i18n/ja.ts +178 -0
  194. package/src/tool/jpgAPng/i18n/ko.ts +178 -0
  195. package/src/tool/jpgAPng/i18n/nl.ts +178 -0
  196. package/src/tool/jpgAPng/i18n/pl.ts +178 -0
  197. package/src/tool/jpgAPng/i18n/pt.ts +178 -0
  198. package/src/tool/jpgAPng/i18n/ru.ts +178 -0
  199. package/src/tool/jpgAPng/i18n/sv.ts +178 -0
  200. package/src/tool/jpgAPng/i18n/tr.ts +178 -0
  201. package/src/tool/jpgAPng/i18n/zh.ts +178 -0
  202. package/src/tool/jpgAPng/index.ts +13 -1
  203. package/src/tool/jpgAWebp/i18n/de.ts +178 -0
  204. package/src/tool/jpgAWebp/i18n/en.ts +2 -12
  205. package/src/tool/jpgAWebp/i18n/es.ts +2 -12
  206. package/src/tool/jpgAWebp/i18n/fr.ts +2 -12
  207. package/src/tool/jpgAWebp/i18n/id.ts +178 -0
  208. package/src/tool/jpgAWebp/i18n/it.ts +178 -0
  209. package/src/tool/jpgAWebp/i18n/ja.ts +178 -0
  210. package/src/tool/jpgAWebp/i18n/ko.ts +178 -0
  211. package/src/tool/jpgAWebp/i18n/nl.ts +178 -0
  212. package/src/tool/jpgAWebp/i18n/pl.ts +178 -0
  213. package/src/tool/jpgAWebp/i18n/pt.ts +178 -0
  214. package/src/tool/jpgAWebp/i18n/ru.ts +178 -0
  215. package/src/tool/jpgAWebp/i18n/sv.ts +178 -0
  216. package/src/tool/jpgAWebp/i18n/tr.ts +178 -0
  217. package/src/tool/jpgAWebp/i18n/zh.ts +178 -0
  218. package/src/tool/jpgAWebp/index.ts +12 -0
  219. package/src/tool/pngAIco/i18n/de.ts +183 -0
  220. package/src/tool/pngAIco/i18n/en.ts +8 -13
  221. package/src/tool/pngAIco/i18n/es.ts +19 -24
  222. package/src/tool/pngAIco/i18n/fr.ts +20 -25
  223. package/src/tool/pngAIco/i18n/id.ts +183 -0
  224. package/src/tool/pngAIco/i18n/it.ts +183 -0
  225. package/src/tool/pngAIco/i18n/ja.ts +183 -0
  226. package/src/tool/pngAIco/i18n/ko.ts +183 -0
  227. package/src/tool/pngAIco/i18n/nl.ts +183 -0
  228. package/src/tool/pngAIco/i18n/pl.ts +183 -0
  229. package/src/tool/pngAIco/i18n/pt.ts +183 -0
  230. package/src/tool/pngAIco/i18n/ru.ts +183 -0
  231. package/src/tool/pngAIco/i18n/sv.ts +183 -0
  232. package/src/tool/pngAIco/i18n/tr.ts +183 -0
  233. package/src/tool/pngAIco/i18n/zh.ts +183 -0
  234. package/src/tool/pngAIco/index.ts +12 -0
  235. package/src/tool/pngAJpg/i18n/de.ts +191 -0
  236. package/src/tool/pngAJpg/i18n/en.ts +2 -12
  237. package/src/tool/pngAJpg/i18n/es.ts +2 -12
  238. package/src/tool/pngAJpg/i18n/fr.ts +2 -12
  239. package/src/tool/pngAJpg/i18n/id.ts +191 -0
  240. package/src/tool/pngAJpg/i18n/it.ts +191 -0
  241. package/src/tool/pngAJpg/i18n/ja.ts +191 -0
  242. package/src/tool/pngAJpg/i18n/ko.ts +191 -0
  243. package/src/tool/pngAJpg/i18n/nl.ts +191 -0
  244. package/src/tool/pngAJpg/i18n/pl.ts +191 -0
  245. package/src/tool/pngAJpg/i18n/pt.ts +191 -0
  246. package/src/tool/pngAJpg/i18n/ru.ts +191 -0
  247. package/src/tool/pngAJpg/i18n/sv.ts +191 -0
  248. package/src/tool/pngAJpg/i18n/tr.ts +191 -0
  249. package/src/tool/pngAJpg/i18n/zh.ts +191 -0
  250. package/src/tool/pngAJpg/index.ts +13 -1
  251. package/src/tool/pngAWebp/i18n/de.ts +182 -0
  252. package/src/tool/pngAWebp/i18n/en.ts +2 -12
  253. package/src/tool/pngAWebp/i18n/es.ts +2 -12
  254. package/src/tool/pngAWebp/i18n/fr.ts +2 -12
  255. package/src/tool/pngAWebp/i18n/id.ts +182 -0
  256. package/src/tool/pngAWebp/i18n/it.ts +182 -0
  257. package/src/tool/pngAWebp/i18n/ja.ts +182 -0
  258. package/src/tool/pngAWebp/i18n/ko.ts +182 -0
  259. package/src/tool/pngAWebp/i18n/nl.ts +182 -0
  260. package/src/tool/pngAWebp/i18n/pl.ts +182 -0
  261. package/src/tool/pngAWebp/i18n/pt.ts +182 -0
  262. package/src/tool/pngAWebp/i18n/ru.ts +182 -0
  263. package/src/tool/pngAWebp/i18n/sv.ts +182 -0
  264. package/src/tool/pngAWebp/i18n/tr.ts +182 -0
  265. package/src/tool/pngAWebp/i18n/zh.ts +182 -0
  266. package/src/tool/pngAWebp/index.ts +12 -0
  267. package/src/tool/svgAJpg/i18n/de.ts +178 -0
  268. package/src/tool/svgAJpg/i18n/en.ts +8 -13
  269. package/src/tool/svgAJpg/i18n/es.ts +8 -13
  270. package/src/tool/svgAJpg/i18n/fr.ts +2 -12
  271. package/src/tool/svgAJpg/i18n/id.ts +178 -0
  272. package/src/tool/svgAJpg/i18n/it.ts +178 -0
  273. package/src/tool/svgAJpg/i18n/ja.ts +178 -0
  274. package/src/tool/svgAJpg/i18n/ko.ts +178 -0
  275. package/src/tool/svgAJpg/i18n/nl.ts +178 -0
  276. package/src/tool/svgAJpg/i18n/pl.ts +178 -0
  277. package/src/tool/svgAJpg/i18n/pt.ts +178 -0
  278. package/src/tool/svgAJpg/i18n/ru.ts +178 -0
  279. package/src/tool/svgAJpg/i18n/sv.ts +178 -0
  280. package/src/tool/svgAJpg/i18n/tr.ts +178 -0
  281. package/src/tool/svgAJpg/i18n/zh.ts +178 -0
  282. package/src/tool/svgAJpg/index.ts +12 -0
  283. package/src/tool/svgAPng/i18n/de.ts +178 -0
  284. package/src/tool/svgAPng/i18n/en.ts +8 -13
  285. package/src/tool/svgAPng/i18n/es.ts +31 -36
  286. package/src/tool/svgAPng/i18n/fr.ts +2 -12
  287. package/src/tool/svgAPng/i18n/id.ts +178 -0
  288. package/src/tool/svgAPng/i18n/it.ts +178 -0
  289. package/src/tool/svgAPng/i18n/ja.ts +178 -0
  290. package/src/tool/svgAPng/i18n/ko.ts +178 -0
  291. package/src/tool/svgAPng/i18n/nl.ts +178 -0
  292. package/src/tool/svgAPng/i18n/pl.ts +178 -0
  293. package/src/tool/svgAPng/i18n/pt.ts +178 -0
  294. package/src/tool/svgAPng/i18n/ru.ts +178 -0
  295. package/src/tool/svgAPng/i18n/sv.ts +178 -0
  296. package/src/tool/svgAPng/i18n/tr.ts +178 -0
  297. package/src/tool/svgAPng/i18n/zh.ts +178 -0
  298. package/src/tool/svgAPng/index.ts +12 -0
  299. package/src/tool/webpAIco/i18n/de.ts +183 -0
  300. package/src/tool/webpAIco/i18n/en.ts +8 -13
  301. package/src/tool/webpAIco/i18n/es.ts +9 -14
  302. package/src/tool/webpAIco/i18n/fr.ts +11 -16
  303. package/src/tool/webpAIco/i18n/id.ts +183 -0
  304. package/src/tool/webpAIco/i18n/it.ts +183 -0
  305. package/src/tool/webpAIco/i18n/ja.ts +183 -0
  306. package/src/tool/webpAIco/i18n/ko.ts +183 -0
  307. package/src/tool/webpAIco/i18n/nl.ts +183 -0
  308. package/src/tool/webpAIco/i18n/pl.ts +183 -0
  309. package/src/tool/webpAIco/i18n/pt.ts +183 -0
  310. package/src/tool/webpAIco/i18n/ru.ts +183 -0
  311. package/src/tool/webpAIco/i18n/sv.ts +183 -0
  312. package/src/tool/webpAIco/i18n/tr.ts +183 -0
  313. package/src/tool/webpAIco/i18n/zh.ts +183 -0
  314. package/src/tool/webpAIco/index.ts +12 -0
  315. package/src/tool/webpAJpg/i18n/de.ts +187 -0
  316. package/src/tool/webpAJpg/i18n/en.ts +9 -13
  317. package/src/tool/webpAJpg/i18n/es.ts +37 -42
  318. package/src/tool/webpAJpg/i18n/fr.ts +35 -40
  319. package/src/tool/webpAJpg/i18n/id.ts +182 -0
  320. package/src/tool/webpAJpg/i18n/it.ts +182 -0
  321. package/src/tool/webpAJpg/i18n/ja.ts +182 -0
  322. package/src/tool/webpAJpg/i18n/ko.ts +182 -0
  323. package/src/tool/webpAJpg/i18n/nl.ts +182 -0
  324. package/src/tool/webpAJpg/i18n/pl.ts +182 -0
  325. package/src/tool/webpAJpg/i18n/pt.ts +182 -0
  326. package/src/tool/webpAJpg/i18n/ru.ts +182 -0
  327. package/src/tool/webpAJpg/i18n/sv.ts +182 -0
  328. package/src/tool/webpAJpg/i18n/tr.ts +182 -0
  329. package/src/tool/webpAJpg/i18n/zh.ts +182 -0
  330. package/src/tool/webpAJpg/index.ts +12 -0
  331. package/src/tool/webpAPng/i18n/de.ts +182 -0
  332. package/src/tool/webpAPng/i18n/en.ts +8 -13
  333. package/src/tool/webpAPng/i18n/es.ts +35 -40
  334. package/src/tool/webpAPng/i18n/fr.ts +2 -12
  335. package/src/tool/webpAPng/i18n/id.ts +182 -0
  336. package/src/tool/webpAPng/i18n/it.ts +182 -0
  337. package/src/tool/webpAPng/i18n/ja.ts +182 -0
  338. package/src/tool/webpAPng/i18n/ko.ts +182 -0
  339. package/src/tool/webpAPng/i18n/nl.ts +182 -0
  340. package/src/tool/webpAPng/i18n/pl.ts +182 -0
  341. package/src/tool/webpAPng/i18n/pt.ts +182 -0
  342. package/src/tool/webpAPng/i18n/ru.ts +182 -0
  343. package/src/tool/webpAPng/i18n/sv.ts +182 -0
  344. package/src/tool/webpAPng/i18n/tr.ts +182 -0
  345. package/src/tool/webpAPng/i18n/zh.ts +182 -0
  346. package/src/tool/webpAPng/index.ts +12 -0
@@ -0,0 +1,182 @@
1
+ import type { ImageConverterUI } from '../../../shared/ImageConverter.astro';
2
+ import { generateSchemas } from '../../../shared/logic/schemas';
3
+ import type { WebpAPngLocaleContent } from '../index';
4
+
5
+ const slug = 'webp-zu-png-konverter';
6
+ const title = 'WebP zu PNG Konverter Online und Kostenlos';
7
+ const description =
8
+ 'Konvertieren Sie WebP-Bilder in Ihrem Browser in PNG. Erhält die Transparenz. Kein Hochladen von Dateien auf Server. Kostenlos und 100 % privat.';
9
+
10
+ const ui: ImageConverterUI = {
11
+ dragText: 'WebP-Dateien hierher ziehen...',
12
+ convertText: 'Um sie sofort in PNG zu konvertieren',
13
+ selectFiles: 'Dateien auswählen',
14
+ processedFiles: 'Verarbeitete Dateien',
15
+ downloadAll: 'Alles herunterladen (.zip)',
16
+ pending: 'Ausstehend',
17
+ bibliographyTitle: 'Literaturhinweise',
18
+ faqTitle: 'Häufig gestellte Fragen',
19
+ };
20
+
21
+ const faq: WebpAPngLocaleContent['faq'] = [
22
+ {
23
+ question: 'Warum muss ich meine WebP-Dateien in PNG konvertieren?',
24
+ answer:
25
+ 'Obwohl WebP-Dateien leichter sind, können sie in Bearbeitungsprogrammen wie älteren Photoshop-Versionen Inkompatibilitäten verursachen. PNG gewährleistet eine 100 % universelle Kompatibilität.',
26
+ },
27
+ {
28
+ question: 'Gehen Transparenzen bei der Konvertierung von WebP zu PNG verloren?',
29
+ answer:
30
+ 'Keineswegs. Im Gegensatz zur Konvertierung in JPG unterstützt PNG den Alpha-Kanal. Unser Tool bewahrt alle transparenten Bereiche der Originaldatei.',
31
+ },
32
+ {
33
+ question: 'Kann ich vertrauliche Unternehmensdateien hochladen?',
34
+ answer:
35
+ 'Das können und sollten Sie. Da alles lokal über JavaScript läuft, verlassen Ihre Unternehmensbilder niemals Ihren Computer und werden nicht auf externen Servern gespeichert.',
36
+ },
37
+ ];
38
+
39
+ const howTo: WebpAPngLocaleContent['howTo'] = [
40
+ {
41
+ name: 'WebP-Dateien ziehen',
42
+ text: 'Ziehen Sie Ihre WebP-Dateien in das Hauptfenster oder wählen Sie die Bilder auf herkömmliche Weise aus.',
43
+ },
44
+ {
45
+ name: 'High Fidelity Konvertierung',
46
+ text: 'Ihr Browser zeichnet das Bild Pixel für Pixel neu und generiert eine exakte Kopie im PNG-Format, wobei der ursprüngliche Farbraum erhalten bleibt.',
47
+ },
48
+ {
49
+ name: 'Einzel- oder Batch-Download',
50
+ text: 'Speichern Sie jede Datei einzeln oder, wenn Sie einen Stapel verarbeitet haben, klicken Sie auf die ZIP-Schaltfläche, um alle zusammen herunterzuladen.',
51
+ },
52
+ ];
53
+
54
+ const bibliography: WebpAPngLocaleContent['bibliography'] = [
55
+ {
56
+ name: 'Dokumentation der WebP-API und -Bibliothek',
57
+ url: 'https://developers.google.com/speed/webp/docs/api',
58
+ },
59
+ {
60
+ name: 'HTML Canvas 2D Kontext Spezifikation',
61
+ url: 'https://html.spec.whatwg.org/multipage/canvas.html',
62
+ },
63
+ {
64
+ name: 'Can I use: WebP-Bildformat',
65
+ url: 'https://caniuse.com/webp',
66
+ },
67
+ ];
68
+
69
+ const seo: WebpAPngLocaleContent['seo'] = [
70
+ {
71
+ type: 'title',
72
+ text: 'WebP zu PNG Konverter: Die professionelle Wahl für Bearbeitung und Design',
73
+ level: 2,
74
+ },
75
+ {
76
+ type: 'paragraph',
77
+ html: 'Wenn ein Designer eine Grafik im <strong>WebP</strong>-Format herunterlädt und versucht, sie in Photoshop, Figma oder Illustrator zu öffnen, kann das Ergebnis frustrierend sein: Die Datei lässt sich nicht laden oder verliert an Qualität. Das <strong>PNG</strong>-Format ist der unangefochtene Standard der professionellen Bearbeitung: verlustfreie Kompression, vollständiger Alpha-Kanal und garantierte Kompatibilität über die gesamte kreative Produktionskette hinweg.',
78
+ },
79
+ {
80
+ type: 'title',
81
+ text: 'WebP für das Web, PNG für das Studio',
82
+ level: 3,
83
+ },
84
+ {
85
+ type: 'paragraph',
86
+ html: 'WebP ist ein Web-Produktionsformat: Seine Kompressionsalgorithmen sind darauf optimiert, das Übertragungsgewicht zu reduzieren, nicht darauf, maximale Originaltreue über iterative Bearbeitungs-Workflows hinweg zu bewahren. Jedes Mal, wenn Sie eine bearbeitete WebP-Datei speichern, wendet der Codec die Kompression erneut an. Bei Projekten, bei denen eine Datei oft geändert wird, bedeutet dies eine kumulative Qualitätsverschlechterung.',
87
+ },
88
+ {
89
+ type: 'paragraph',
90
+ html: 'PNG verwendet eine <strong>verlustfreie Kompression</strong>: Alle Pixeldaten bleiben vollständig erhalten, egal wie oft Sie die Datei speichern. Es ist das Format der Wahl für UI/UX Designer, digitale Illustratoren und Branding-Teams, die die visuelle Integrität über Dutzende von Revisionen hinweg wahren müssen. Tools wie Photoshop, Figma, Sketch und Illustrator behandeln PNG als ihr primäres Exportformat.',
91
+ },
92
+ {
93
+ type: 'title',
94
+ text: 'Vergleich: Lokale vs Cloud Konvertierung',
95
+ level: 3,
96
+ },
97
+ {
98
+ type: 'comparative',
99
+ items: [
100
+ {
101
+ title: 'Cloud Konverter',
102
+ description: 'Tools, die Ihre Dateien auf einen Remote-Server hochladen.',
103
+ icon: 'mdi:cloud-upload',
104
+ pointIcon: 'mdi:close-circle-outline',
105
+ points: [
106
+ 'Ihre Design-Assets werden auf Servern Dritter gespeichert',
107
+ 'Langsame Remote-Verarbeitung bei großen Dateien',
108
+ 'Risiko von Datenlecks bei vertraulichen Kundenprojekten',
109
+ 'Batch Konvertierung oft eingeschränkt oder kostenpflichtig',
110
+ ],
111
+ },
112
+ {
113
+ title: 'Unsere lokale Architektur',
114
+ description: 'Direkte Verarbeitung auf Ihrer Hardware mittels Vanilla JS-Technologie.',
115
+ icon: 'mdi:laptop-mac',
116
+ highlight: true,
117
+ points: [
118
+ 'Ihre Designs verlassen niemals Ihren Rechner',
119
+ 'Dutzende Dateien sofort per Batch konvertieren',
120
+ 'Vollständiger Erhalt des Alpha-Kanals und Farbraums',
121
+ 'Absolute Privatsphäre für Kundenprojekte',
122
+ ],
123
+ },
124
+ ],
125
+ },
126
+ {
127
+ type: 'title',
128
+ text: 'Wie es technisch funktioniert',
129
+ level: 3,
130
+ },
131
+ {
132
+ type: 'paragraph',
133
+ html: 'Moderne Browser können WebP nativ dekodieren. Unser Tool nutzt diese Fähigkeit, um die Datei in ein JavaScript-<strong>Image</strong>-Element zu laden und sie dann auf ein HTML5-Canvas mit denselben Abmessungen wie das Original zu zeichnen. Im Gegensatz zur Konvertierung in JPG ist hier keine Hintergrundfüllung erforderlich: Das Canvas behält den vollständigen Alpha-Kanal bei.',
134
+ },
135
+ {
136
+ type: 'paragraph',
137
+ html: 'Der finale Export erfolgt über die Methode <code>toDataURL(\'image/png\')</code>, die ein verlustfreies, originalgetreues PNG generiert. Das Ergebnis ist eine Datei, die ohne Zwischenschritte, Farbverlust oder Transparenzverlust direkt in jede professionelle Design-Software importiert werden kann.',
138
+ },
139
+ {
140
+ type: 'tip',
141
+ title: 'Tipp für Editoren',
142
+ html: 'Verwenden Sie PNG, wenn Sie das Bild weiter bearbeiten müssen. Die verlustfreie Kompression garantiert, dass durch wiederholtes Speichern keine Qualitätsverluste entstehen – entscheidend bei der Arbeit mit Ebenen, Masken oder Farbanpassungen in Photoshop oder Figma.',
143
+ },
144
+ {
145
+ type: 'title',
146
+ text: 'Anwendungsfälle und Kompatibilität',
147
+ level: 3,
148
+ },
149
+ {
150
+ type: 'list',
151
+ icon: 'mdi:check-circle',
152
+ items: [
153
+ 'Importieren von WebP-Assets in Photoshop, Figma, Sketch oder Illustrator.',
154
+ 'Erhalt der Transparenz bei Logos und Icons für die Verwendung auf verschiedenen Hintergründen.',
155
+ 'Erstellen von Master-Kopien von Grafiken für langfristige Projekte.',
156
+ 'Exportieren von Assets für mobile Apps, die PNG mit Alpha-Kanal erfordern.',
157
+ 'Verwendung von Bildern in Design-Mockups und Präsentationen mit variablen Hintergründen.',
158
+ ],
159
+ },
160
+ {
161
+ type: 'title',
162
+ text: 'Fazit',
163
+ level: 3,
164
+ },
165
+ {
166
+ type: 'paragraph',
167
+ html: 'Wenn WebP das Format für Webserver ist, dann ist PNG das Format für das Designstudio. Dieses Tool konvertiert Ihre WebP-Assets in produktionsbereite PNGs mit intakter Transparenz und maximaler Qualität – alles in Ihrem Browser und ohne dass Ihre Dateien jemals Ihren Rechner verlassen.',
168
+ },
169
+ ];
170
+
171
+
172
+ export const content: WebpAPngLocaleContent = {
173
+ slug,
174
+ title,
175
+ description,
176
+ ui,
177
+ seo,
178
+ faq,
179
+ bibliography,
180
+ howTo,
181
+ schemas: generateSchemas({ title, description, inLanguage: 'de', faq, howTo }),
182
+ };
@@ -1,5 +1,5 @@
1
- import type { WithContext, SoftwareApplication } from 'schema-dts';
2
1
  import type { ImageConverterUI } from '../../../shared/ImageConverter.astro';
2
+ import { generateSchemas } from '../../../shared/logic/schemas';
3
3
  import type { WebpAPngLocaleContent } from '../index';
4
4
 
5
5
  const slug = 'webp-to-png-converter';
@@ -168,17 +168,6 @@ const seo: WebpAPngLocaleContent['seo'] = [
168
168
  },
169
169
  ];
170
170
 
171
- const appSchema: WithContext<SoftwareApplication> = {
172
- '@context': 'https://schema.org',
173
- '@type': 'SoftwareApplication',
174
- name: title,
175
- description,
176
- applicationCategory: 'UtilitiesApplication',
177
- operatingSystem: 'Web',
178
- offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
179
- inLanguage: 'en',
180
- };
181
-
182
171
  export const content: WebpAPngLocaleContent = {
183
172
  slug,
184
173
  title,
@@ -188,5 +177,11 @@ export const content: WebpAPngLocaleContent = {
188
177
  faq,
189
178
  bibliography,
190
179
  howTo,
191
- schemas: [appSchema as any],
180
+ schemas: generateSchemas({
181
+ title,
182
+ description,
183
+ inLanguage: 'en',
184
+ faq,
185
+ howTo,
186
+ }),
192
187
  };
@@ -1,11 +1,11 @@
1
- import type { WithContext, SoftwareApplication } from 'schema-dts';
2
1
  import type { ImageConverterUI } from '../../../shared/ImageConverter.astro';
2
+ import { generateSchemas } from '../../../shared/logic/schemas';
3
3
  import type { WebpAPngLocaleContent } from '../index';
4
4
 
5
5
  const slug = 'convertidor-webp-a-png';
6
6
  const title = 'Convertir WebP a PNG Online y Gratis';
7
7
  const description =
8
- 'Convierte imágenes WebP a PNG en tu navegador. Conserva la transparencia. Sin subir archivos a servidores. Gratis y 100% privado.';
8
+ 'Convierte imágenes WebP a PNG en tu navegador. Conserva transparencias. Sin subir archivos a servidores. Gratis y 100% privado.';
9
9
 
10
10
  const ui: ImageConverterUI = {
11
11
  dragText: 'Arrastra archivos WebP...',
@@ -22,32 +22,32 @@ const faq: WebpAPngLocaleContent['faq'] = [
22
22
  {
23
23
  question: '¿Por qué necesito convertir mis archivos WebP a PNG?',
24
24
  answer:
25
- 'A pesar de ser más ligeros, los WebP pueden causar incompatibilidades en programas de edición como Photoshop antiguo. El PNG asegura un 100% de compatibilidad universalmente.',
25
+ 'Pese a ser más ligeros, los archivos WebP pueden dar incompatibilidades en programas de edición como Photoshop antiguos. El PNG asegura una compatibilidad universal al 100%.',
26
26
  },
27
27
  {
28
- question: '¿Se pierden las transparencias si paso de WebP a PNG?',
28
+ question: '¿Se pierden las transparencias al pasar de WebP a PNG?',
29
29
  answer:
30
- 'No, en absoluto. A diferencia de la conversión a JPG, el PNG soporta el canal alfa. Nuestra utilidad preservará cualquier zona transparente del archivo original.',
30
+ 'En absoluto. A diferencia de la conversión a JPG, el PNG soporta el canal alfa. Nuestra utilidad preservará cualquier zona transparente del archivo original.',
31
31
  },
32
32
  {
33
- question: '¿Puedo subir archivos confidenciales de mi empresa?',
33
+ question: '¿Puedo subir archivos confidenciales de empresa?',
34
34
  answer:
35
- 'Puedes y debes. Como todo se ejecuta localmente mediante JavaScript, las imágenes de tu empresa nunca saldrán de tu ordenador ni se guardarán en servidores ajenos.',
35
+ 'Puedes y debes. Como todo corre localmente por JavaScript, tus imágenes de empresa nunca abandonarán tu equipo ni se guardarán en servidores externos.',
36
36
  },
37
37
  ];
38
38
 
39
39
  const howTo: WebpAPngLocaleContent['howTo'] = [
40
40
  {
41
- name: 'Arrastra tus WebP',
41
+ name: 'Arrastra tus archivos WebP',
42
42
  text: 'Mueve y suelta tus archivos WebP sobre el panel principal o selecciona las imágenes de forma tradicional.',
43
43
  },
44
44
  {
45
45
  name: 'Conversión de Alta Fidelidad',
46
- text: 'Tu navegador redibujará píxel a píxel la imagen y generará su copia exacta en formato PNG, manteniendo la gama de colores original.',
46
+ text: 'Tu navegador redibujará píxel a píxel la imagen y generará una copia exacta en formato PNG, manteniendo la gama de colores original.',
47
47
  },
48
48
  {
49
- name: 'Descarga Individual o Masiva',
50
- text: 'Guarda cada fichero suelto o, si has procesado un lote, haz clic en el botón ZIP para bajarlos todos empaquetados.',
49
+ name: 'Descarga Individual o en Lote',
50
+ text: 'Guarda cada archivo individualmente o, si procesaste un lote, pulsa el botón ZIP para bajarlos todos empaquetados.',
51
51
  },
52
52
  ];
53
53
 
@@ -69,12 +69,12 @@ const bibliography: WebpAPngLocaleContent['bibliography'] = [
69
69
  const seo: WebpAPngLocaleContent['seo'] = [
70
70
  {
71
71
  type: 'title',
72
- text: 'Convertidor WebP a PNG: La Opción Profesional para Edición y Diseño',
72
+ text: 'Convertidor WebP a PNG: La Elección Profesional para Edición y Diseño',
73
73
  level: 2,
74
74
  },
75
75
  {
76
76
  type: 'paragraph',
77
- html: 'Cuando un diseñador descarga un recurso gráfico en formato <strong>WebP</strong> y lo intenta abrir en Photoshop, Figma o Illustrator, el resultado puede ser frustrante: el archivo no se carga o pierde calidad. El formato <strong>PNG</strong> es el estándar indiscutible de la edición profesional: compresión sin pérdida, canal alfa completo y compatibilidad garantizada con toda la cadena de producción creativa.',
77
+ html: 'Cuando un diseñador descarga un recurso gráfico en formato <strong>WebP</strong> e intenta abrirlo en Photoshop, Figma o Illustrator, el resultado puede ser frustrante: el archivo no carga o pierde calidad. El formato <strong>PNG</strong> es el estándar indiscutible de la edición profesional: compresión sin pérdida, canal alfa completo y compatibilidad garantizada en toda la cadena de producción creativa.',
78
78
  },
79
79
  {
80
80
  type: 'title',
@@ -83,11 +83,11 @@ const seo: WebpAPngLocaleContent['seo'] = [
83
83
  },
84
84
  {
85
85
  type: 'paragraph',
86
- html: 'WebP es un formato de producción web: sus algoritmos de compresión están optimizados para reducir el peso de transferencia, no para preservar la fidelidad máxima en flujos de edición iterativa. Cada vez que guardas un WebP editado, el codec aplica de nuevo la compresión. Para proyectos donde el archivo va a ser modificado varias veces, esto supone una degradación acumulativa de la calidad.',
86
+ html: 'WebP es un formato de producción web: sus algoritmos de compresión están optimizados para reducir el peso de transferencia, no para preservar la máxima fidelidad en flujos de edición iterativos. Cada vez que guardas un WebP editado, el códec aplica compresión de nuevo. Para proyectos donde un archivo se modificará muchas veces, esto supone una degradación de calidad acumulativa.',
87
87
  },
88
88
  {
89
89
  type: 'paragraph',
90
- html: 'PNG emplea compresión <strong>sin pérdida</strong>: los datos de cada píxel se conservan íntegramente sin importar cuántas veces guardes el archivo. Es el formato elegido por diseñadores de interfaces (UI/UX), ilustradores digitales y equipos de branding que necesitan mantener la integridad visual a lo largo de decenas de revisiones. Herramientas como Photoshop, Figma, Sketch e Illustrator tratan PNG como su formato de exportación principal.',
90
+ html: 'PNG utiliza <strong>compresión sin pérdida</strong> (lossless): los datos de cada píxel se preservan íntegramente sin importar cuántas veces guardes el archivo. Es el formato elegido por diseñadores UI/UX, ilustradores digitales y equipos de branding que necesitan mantener la integridad visual a través de decenas de revisiones. Herramientas como Photoshop, Figma, Sketch e Illustrator tratan al PNG como su formato nativo de exportación primario.',
91
91
  },
92
92
  {
93
93
  type: 'title',
@@ -103,10 +103,10 @@ const seo: WebpAPngLocaleContent['seo'] = [
103
103
  icon: 'mdi:cloud-upload',
104
104
  pointIcon: 'mdi:close-circle-outline',
105
105
  points: [
106
- 'Tus activos de diseño se almacenan en servidores ajenos',
107
- 'Procesamiento remoto lento para archivos de gran tamaño',
106
+ 'Tus assets de diseño se almacenan en servidores de terceros',
107
+ 'Procesamiento remoto lento para archivos pesados',
108
108
  'Riesgo de filtraciones en proyectos confidenciales de clientes',
109
- 'Conversión por lotes limitada o de pago',
109
+ 'Conversión por lotes limitada o bajo pago',
110
110
  ],
111
111
  },
112
112
  {
@@ -115,8 +115,8 @@ const seo: WebpAPngLocaleContent['seo'] = [
115
115
  icon: 'mdi:laptop-mac',
116
116
  highlight: true,
117
117
  points: [
118
- 'Tus diseños nunca salen de tu máquina',
119
- 'Conversión por lotes de decenas de archivos al instante',
118
+ 'Tus diseños nunca abandonan tu máquina',
119
+ 'Convierte por lotes decenas de archivos al instante',
120
120
  'Preservación total del canal alfa y la gama de colores',
121
121
  'Privacidad absoluta para proyectos de clientes',
122
122
  ],
@@ -130,16 +130,16 @@ const seo: WebpAPngLocaleContent['seo'] = [
130
130
  },
131
131
  {
132
132
  type: 'paragraph',
133
- html: 'El navegador moderno es capaz de decodificar WebP de forma nativa. Nuestra herramienta aprovecha esta capacidad para cargar el archivo en un elemento <strong>Image</strong> de JavaScript y, a continuación, dibujarlo sobre un canvas HTML5 con las mismas dimensiones que el original. Al contrario que la conversión a JPG, aquí no es necesario rellenar el fondo: el canvas mantiene el canal alfa completo.',
133
+ html: 'Los navegadores modernos pueden decodificar WebP de forma nativa. Nuestra herramienta aprovecha esta capacidad para cargar el archivo en un elemento <strong>Image</strong> de JavaScript y, posteriormente, lo dibuja sobre un lienzo HTML5 con las mismas dimensiones del original. A diferencia de la conversión a JPG, aquí no hace falta relleno de fondo: el lienzo conserva el canal alfa completo.',
134
134
  },
135
135
  {
136
136
  type: 'paragraph',
137
- html: 'La exportación final utiliza el método <code>toDataURL(\'image/png\')</code>, que genera un PNG con compresión sin pérdida fiel al original. El resultado es un archivo listo para importar directamente en cualquier software de diseño profesional sin pasos intermedios, degradación de color ni pérdida de transparencias.',
137
+ html: 'La exportación final utiliza el método <code>toDataURL(\'image/png\')</code>, que genera un PNG sin pérdida fiel al original. El resultado es un archivo listo para importar directamente en cualquier software de diseño profesional sin pasos intermedios, degradación de color o pérdida de transparencia.',
138
138
  },
139
139
  {
140
140
  type: 'tip',
141
141
  title: 'Consejo para editores',
142
- html: 'Usa PNG cuando necesites continuar editando la imagen. La compresión sin pérdida garantiza que no habrá degradación de calidad por guardado repetido, algo crítico cuando trabajas con capas, máscaras o ajustes de color en Photoshop o Figma.',
142
+ html: 'Utiliza PNG cuando necesites seguir editando la imagen. La compresión sin pérdida garantiza que no habrá degradación de calidad por guardados repetidos, algo crítico al trabajar con capas, máscaras o ajustes de color en Photoshop o Figma.',
143
143
  },
144
144
  {
145
145
  type: 'title',
@@ -151,10 +151,10 @@ const seo: WebpAPngLocaleContent['seo'] = [
151
151
  icon: 'mdi:check-circle',
152
152
  items: [
153
153
  'Importar recursos WebP en Photoshop, Figma, Sketch o Illustrator.',
154
- 'Preservar transparencias en logos e iconos para uso en múltiples fondos.',
155
- 'Crear versiones maestras de gráficos para proyectos de larga duración.',
156
- 'Exportar assets para aplicaciones móviles que requieren PNG con canal alfa.',
157
- 'Usar imágenes en maquetas y presentaciones de diseño con fondos variables.',
154
+ 'Preservar la transparencia en logos e iconos para uso en múltiples fondos.',
155
+ 'Crear copias maestras de gráficos para proyectos de larga duración.',
156
+ 'Exportar assets para apps móviles que requieren PNG con canal alfa.',
157
+ 'Uso de imágenes en maquetas de diseño y presentaciones con fondos variables.',
158
158
  ],
159
159
  },
160
160
  {
@@ -164,21 +164,10 @@ const seo: WebpAPngLocaleContent['seo'] = [
164
164
  },
165
165
  {
166
166
  type: 'paragraph',
167
- html: 'Si WebP es el formato del servidor web, PNG es el formato del estudio de diseño. Esta herramienta convierte tus recursos WebP en PNG de producción, con transparencias intactas y calidad máxima, todo en tu navegador y sin que tus archivos abandonen tu equipo.',
167
+ html: 'Si WebP es el formato del servidor web, PNG es el formato del estudio de diseño. Esta herramienta convierte tus recursos WebP en PNGs listos para producción, con transparencia intacta y máxima calidad, todo en tu navegador y sin que tus archivos salgan nunca de tu equipo.',
168
168
  },
169
169
  ];
170
170
 
171
- const appSchema: WithContext<SoftwareApplication> = {
172
- '@context': 'https://schema.org',
173
- '@type': 'SoftwareApplication',
174
- name: title,
175
- description,
176
- applicationCategory: 'UtilitiesApplication',
177
- operatingSystem: 'Web',
178
- offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
179
- inLanguage: 'es',
180
- };
181
-
182
171
  export const content: WebpAPngLocaleContent = {
183
172
  slug,
184
173
  title,
@@ -188,5 +177,11 @@ export const content: WebpAPngLocaleContent = {
188
177
  faq,
189
178
  bibliography,
190
179
  howTo,
191
- schemas: [appSchema as any],
180
+ schemas: generateSchemas({
181
+ title,
182
+ description,
183
+ inLanguage: 'es',
184
+ faq,
185
+ howTo,
186
+ }),
192
187
  };
@@ -1,5 +1,5 @@
1
- import type { WithContext, SoftwareApplication } from 'schema-dts';
2
1
  import type { ImageConverterUI } from '../../../shared/ImageConverter.astro';
2
+ import { generateSchemas } from '../../../shared/logic/schemas';
3
3
  import type { WebpAPngLocaleContent } from '../index';
4
4
 
5
5
  const slug = 'convertisseur-webp-en-png';
@@ -168,16 +168,6 @@ const seo: WebpAPngLocaleContent['seo'] = [
168
168
  },
169
169
  ];
170
170
 
171
- const appSchema: WithContext<SoftwareApplication> = {
172
- '@context': 'https://schema.org',
173
- '@type': 'SoftwareApplication',
174
- name: title,
175
- description,
176
- applicationCategory: 'UtilitiesApplication',
177
- operatingSystem: 'Web',
178
- offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
179
- inLanguage: 'fr',
180
- };
181
171
 
182
172
  export const content: WebpAPngLocaleContent = {
183
173
  slug,
@@ -188,5 +178,5 @@ export const content: WebpAPngLocaleContent = {
188
178
  faq,
189
179
  bibliography,
190
180
  howTo,
191
- schemas: [appSchema as any],
181
+ schemas: generateSchemas({ title, description, inLanguage: 'fr', faq, howTo }),
192
182
  };
@@ -0,0 +1,182 @@
1
+ import type { ImageConverterUI } from '../../../shared/ImageConverter.astro';
2
+ import { generateSchemas } from '../../../shared/logic/schemas';
3
+ import type { WebpAPngLocaleContent } from '../index';
4
+
5
+ const slug = 'konverter-webp-ke-png';
6
+ const title = 'Konversi WebP ke PNG Online dan Gratis';
7
+ const description =
8
+ 'Konversi gambar WebP ke PNG di browser Anda. Menjaga transparansi. Tanpa unggah file ke server. Gratis dan 100% pribadi.';
9
+
10
+ const ui: ImageConverterUI = {
11
+ dragText: 'Tarik file WebP...',
12
+ convertText: 'Untuk mengkonversinya ke PNG secara instan',
13
+ selectFiles: 'Pilih file',
14
+ processedFiles: 'File yang diproses',
15
+ downloadAll: 'Unduh Semua (.zip)',
16
+ pending: 'Menunggu',
17
+ bibliographyTitle: 'Referensi Bibliografi',
18
+ faqTitle: 'Pertanyaan yang Sering Diajukan',
19
+ };
20
+
21
+ const faq: WebpAPngLocaleContent['faq'] = [
22
+ {
23
+ question: 'Mengapa saya perlu mengonversi file WebP saya ke PNG?',
24
+ answer:
25
+ 'Meskipun lebih ringan, file WebP dapat menyebabkan ketidakcocokan dalam program pengeditan seperti Photoshop versi lama. PNG memastikan kompatibilitas universal 100%.',
26
+ },
27
+ {
28
+ question: 'Apakah transparansi hilang saat mengonversi dari WebP ke PNG?',
29
+ answer:
30
+ 'Sama sekali tidak. Berbeda dengan konversi ke JPG, PNG mendukung saluran alfa. Alat kami akan menjaga area transparan apa pun dari file asli.',
31
+ },
32
+ {
33
+ question: 'Dapatkah saya mengunggah file perusahaan yang bersifat rahasia?',
34
+ answer:
35
+ 'Anda bisa dan harus melakukannya. Karena semuanya berjalan secara lokal melalui JavaScript, gambar perusahaan Anda tidak akan pernah meninggalkan komputer Anda atau disimpan di server eksternal.',
36
+ },
37
+ ];
38
+
39
+ const howTo: WebpAPngLocaleContent['howTo'] = [
40
+ {
41
+ name: 'Tarik file WebP Anda',
42
+ text: 'Pindahkan dan letakkan file WebP Anda ke panel utama atau pilih gambar secara tradisional.',
43
+ },
44
+ {
45
+ name: 'Konversi Fidelity Tinggi',
46
+ text: 'Browser Anda akan menggambar ulang gambar piksel demi piksel dan menghasilkan salinan persis dalam format PNG, dengan mempertahankan gamut warna asli.',
47
+ },
48
+ {
49
+ name: 'Unduhan Individu atau Massal',
50
+ text: 'Simpan setiap file secara terpisah atau, jika Anda memproses dalam jumlah banyak, klik tombol ZIP untuk mengunduh semuanya secara bersamaan.',
51
+ },
52
+ ];
53
+
54
+ const bibliography: WebpAPngLocaleContent['bibliography'] = [
55
+ {
56
+ name: 'Dokumentasi API dan Perpustakaan WebP',
57
+ url: 'https://developers.google.com/speed/webp/docs/api',
58
+ },
59
+ {
60
+ name: 'Spesifikasi Konteks 2D HTML Canvas',
61
+ url: 'https://html.spec.whatwg.org/multipage/canvas.html',
62
+ },
63
+ {
64
+ name: 'Can I use: format gambar WebP',
65
+ url: 'https://caniuse.com/webp',
66
+ },
67
+ ];
68
+
69
+ const seo: WebpAPngLocaleContent['seo'] = [
70
+ {
71
+ type: 'title',
72
+ text: 'Konverter WebP ke PNG: Pilihan Profesional untuk Pengeditan dan Desain',
73
+ level: 2,
74
+ },
75
+ {
76
+ type: 'paragraph',
77
+ html: 'Ketika seorang desainer mengunduh aset grafis dalam format <strong>WebP</strong> dan mencoba membukanya di Photoshop, Figma, atau Illustrator, hasilnya bisa membuat frustrasi: file gagal dimuat atau kualitasnya menurun. Format <strong>PNG</strong> adalah standar tak terbantahkan dalam pengeditan profesional: kompresi lossless, saluran alfa penuh, dan jaminan kompatibilitas di seluruh rantai produksi kreatif.',
78
+ },
79
+ {
80
+ type: 'title',
81
+ text: 'WebP untuk Web, PNG untuk Studio',
82
+ level: 3,
83
+ },
84
+ {
85
+ type: 'paragraph',
86
+ html: 'WebP adalah format produksi web: algoritme kompresinya dioptimalkan untuk mengurangi berat transfer, bukan untuk menjaga kesetiaan maksimum melalui alur kerja pengeditan iteratif. Setiap kali Anda menyimpan WebP yang telah diedit, codec akan menerapkan kompresi lagi. Untuk proyek di mana sebuah file akan dimodifikasi berkali-kali, ini berarti penurunan kualitas secara kumulatif.',
87
+ },
88
+ {
89
+ type: 'paragraph',
90
+ html: 'PNG menggunakan <strong>kompresi lossless</strong>: data setiap piksel dipertahankan sepenuhnya tidak peduli berapa kali Anda menyimpan file tersebut. Ini adalah format yang dipilih oleh desainer UI/UX, ilustrator digital, dan tim branding yang perlu menjaga integritas visual melalui puluhan revisi. Alat seperti Photoshop, Figma, Sketch, dan Illustrator memperlakukan PNG sebagai format ekspor utama mereka.',
91
+ },
92
+ {
93
+ type: 'title',
94
+ text: 'Perbandingan: Konversi Lokal vs Cloud',
95
+ level: 3,
96
+ },
97
+ {
98
+ type: 'comparative',
99
+ items: [
100
+ {
101
+ title: 'Konverter Cloud',
102
+ description: 'Alat yang mengunggah file Anda ke server jarak jauh.',
103
+ icon: 'mdi:cloud-upload',
104
+ pointIcon: 'mdi:close-circle-outline',
105
+ points: [
106
+ 'Aset desain Anda disimpan di server pihak ketiga',
107
+ 'Pemrosesan jarak jauh yang lambat untuk file besar',
108
+ 'Risiko kebocoran untuk proyek klien yang bersifat rahasia',
109
+ 'Konversi batch terbatas atau berbayar',
110
+ ],
111
+ },
112
+ {
113
+ title: 'Arsitektur Lokal Kami',
114
+ description: 'Pemrosesan langsung pada perangkat keras Anda menggunakan teknologi Vanilla JS.',
115
+ icon: 'mdi:laptop-mac',
116
+ highlight: true,
117
+ points: [
118
+ 'Desain Anda tidak pernah meninggalkan mesin Anda',
119
+ 'Konversi batch puluhan file secara instan',
120
+ 'Pelestarian penuh saluran alfa dan gamut warna',
121
+ 'Privasi absolut untuk proyek klien',
122
+ ],
123
+ },
124
+ ],
125
+ },
126
+ {
127
+ type: 'title',
128
+ text: 'Cara Kerjanya Secara Teknis',
129
+ level: 3,
130
+ },
131
+ {
132
+ type: 'paragraph',
133
+ html: 'Browser modern dapat mendekode WebP secara native. Alat kami memanfaatkan kemampuan ini untuk memuat file ke dalam elemen JavaScript <strong>Image</strong>, lalu menggambarnya ke kanvas HTML5 dengan dimensi yang sama dengan aslinya. Berbeda dengan konversi ke JPG, tidak diperlukan pengisian latar belakang di sini: kanvas mempertahankan saluran alfa penuh.',
134
+ },
135
+ {
136
+ type: 'paragraph',
137
+ html: 'Ekspor akhir menggunakan metode <code>toDataURL(\'image/png\')</code>, yang menghasilkan PNG lossless yang sesuai dengan aslinya. Hasilnya adalah file yang siap diimpor langsung ke perangkat lunak desain profesional apa pun tanpa langkah perantara, degradasi warna, atau hilangnya transparansi.',
138
+ },
139
+ {
140
+ type: 'tip',
141
+ title: 'Tip untuk editor',
142
+ html: 'Gunakan PNG saat Anda perlu terus mengedit gambar. Kompresi lossless menjamin tidak ada penurunan kualitas akibat penyimpanan berulang kali — sangat penting saat bekerja dengan lapisan, masker, atau penyesuaian warna di Photoshop atau Figma.',
143
+ },
144
+ {
145
+ type: 'title',
146
+ text: 'Kasus Penggunaan dan Kompatibilitas',
147
+ level: 3,
148
+ },
149
+ {
150
+ type: 'list',
151
+ icon: 'mdi:check-circle',
152
+ items: [
153
+ 'Mengimpor aset WebP ke Photoshop, Figma, Sketch, atau Illustrator.',
154
+ 'Menjaga transparansi pada logo dan ikon untuk digunakan pada berbagai latar belakang.',
155
+ 'Membuat salinan master grafik untuk proyek jangka panjang.',
156
+ 'Mengekspor aset untuk aplikasi seluler yang memerlukan PNG dengan saluran alfa.',
157
+ 'Menggunakan gambar dalam desain mockup dan presentasi dengan latar belakang variabel.',
158
+ ],
159
+ },
160
+ {
161
+ type: 'title',
162
+ text: 'Kesimpulan',
163
+ level: 3,
164
+ },
165
+ {
166
+ type: 'paragraph',
167
+ html: 'Jika WebP adalah format server web, maka PNG adalah format studio desain. Alat ini mengonversi aset WebP Anda menjadi PNG siap produksi, dengan transparansi yang utuh dan kualitas maksimal — semuanya di browser Anda dan tanpa file Anda pernah meninggalkan mesin Anda.',
168
+ },
169
+ ];
170
+
171
+
172
+ export const content: WebpAPngLocaleContent = {
173
+ slug,
174
+ title,
175
+ description,
176
+ ui,
177
+ seo,
178
+ faq,
179
+ bibliography,
180
+ howTo,
181
+ schemas: generateSchemas({ title, description, inLanguage: 'id', faq, howTo }),
182
+ };