@jjlmoya/utils-converters 1.6.0 → 1.8.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/ImageConverter.astro +2 -1
  3. package/src/shared/logic/schemas.ts +57 -0
  4. package/src/tests/faq_count.test.ts +13 -4
  5. package/src/tests/i18n_coverage.test.ts +36 -0
  6. package/src/tests/locale_completeness.test.ts +42 -0
  7. package/src/tests/no_h1_in_components.test.ts +48 -0
  8. package/src/tests/schemas_fulfillment.test.ts +23 -0
  9. package/src/tests/seo_length.test.ts +1 -1
  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 { WebpAJpgLocaleContent } from '../index';
4
+
5
+ const slug = 'webp-to-jpg-converter';
6
+ const title = '在线免费将 WebP 转换为 JPG';
7
+ const description =
8
+ '无需上传文件即可将 WebP 图像转换为 JPG。100% 私密本地处理。透明背景将自动替换为白色。';
9
+
10
+ const ui: ImageConverterUI = {
11
+ dragText: '拖拽 WebP 文件...',
12
+ convertText: '立即将它们转换为 JPG',
13
+ selectFiles: '选择文件',
14
+ processedFiles: '已处理文件',
15
+ downloadAll: '下载全部 (.zip)',
16
+ pending: '等待中',
17
+ bibliographyTitle: '参考文献',
18
+ faqTitle: '常见问题',
19
+ };
20
+
21
+ const faq: WebpAJpgLocaleContent['faq'] = [
22
+ {
23
+ question: '我可以安全地上传私密图片吗?',
24
+ answer:
25
+ '是的。没有上传服务器。您的浏览器会在您的电脑上处理 WebP 并生成可供下载的 JPG。没有其他人能看到它。',
26
+ },
27
+ {
28
+ question: '如果我的 WebP 背景是透明的, 会发生什么?',
29
+ answer:
30
+ '由于 JPG 不支持透明度, 转换器将自动使用纯白色背景填充透明区域。',
31
+ },
32
+ {
33
+ question: '转换次数或文件大小有限制吗?',
34
+ answer:
35
+ '我们没有任何限制。只要您的电脑有足够的处理能力和内存, 您就可以转换成百上千张图片。',
36
+ },
37
+ ];
38
+
39
+ const howTo: WebpAJpgLocaleContent['howTo'] = [
40
+ {
41
+ name: '拖拽您的文件',
42
+ text: '将您的现代 WebP 文件放入上传区域, 或使用交互式文件浏览器进行选择。',
43
+ },
44
+ {
45
+ name: '本地转换',
46
+ text: '观察本地引擎如何应用背景并将每个像素解释为通用的 JPG 格式。',
47
+ },
48
+ {
49
+ name: '获取结果',
50
+ text: '您可以单独下载, 也可以使用 ZIP 包下载所有新照片。',
51
+ },
52
+ ];
53
+
54
+ const bibliography: WebpAJpgLocaleContent['bibliography'] = [
55
+ {
56
+ name: 'JPEG.org: JPEG 标准',
57
+ url: 'https://jpeg.org/jpeg/',
58
+ },
59
+ {
60
+ name: 'Mozilla Developer Network - image/jpeg',
61
+ url: 'https://developer.mozilla.org/zh-CN/docs/Web/Media/Formats/Image_types#jpeg',
62
+ },
63
+ {
64
+ name: 'WebP 到 JPEG 的兼容性',
65
+ url: 'https://developers.google.com/speed/webp/faq',
66
+ },
67
+ ];
68
+
69
+ const seo: WebpAJpgLocaleContent['seo'] = [
70
+ {
71
+ type: 'title',
72
+ text: 'WebP 转 JPG 转换器: 不牺牲隐私的通用兼容性',
73
+ level: 2,
74
+ },
75
+ {
76
+ type: 'paragraph',
77
+ html: '<strong>WebP</strong> 是 Google 对效率的追求: 图像更轻量, 质量可与传统 JPG 媲美。然而, 它的兼容性在现实世界中依然是个问题。Outlook 等邮件客户端、旧版设计软件、即时通讯应用和企业工作流程仍然依赖于无处不在的 <strong>JPG</strong>。将 WebP 转换为 JPG 是连接现代 Web 与现实世界的桥梁。',
78
+ },
79
+ {
80
+ type: 'title',
81
+ text: 'WebP vs JPG: 什么时候应该使用哪种格式?',
82
+ level: 3,
83
+ },
84
+ {
85
+ type: 'paragraph',
86
+ html: 'WebP 在可控环境中表现出色: 在 Chrome、Edge 或 Firefox 等浏览器兼容性有保障的现代网站上。与其等效的 JPG 相比, 它的卓越压缩使文件大小减少了 25-35%, 从而提高了加载速度和 Core Web Vitals 指标。当您能够控制查看环境时, 它是理想的格式。',
87
+ },
88
+ {
89
+ type: 'paragraph',
90
+ html: '而 JPG 则适用于 <em>绝对任何场景</em>: 邮件附件、PowerPoint 演示文稿、Word 文档、家用打印机、旧版编辑软件以及无一例外的社交媒体平台。如果您需要让某人在没有任何技术阻碍的情况下打开您的图片, JPG 是正确的选择。',
91
+ },
92
+ {
93
+ type: 'title',
94
+ text: '对比: 本地转换 vs 云端转换',
95
+ level: 3,
96
+ },
97
+ {
98
+ type: 'comparative',
99
+ items: [
100
+ {
101
+ title: '云端转换器',
102
+ description: '将文件上传到远程服务器的工具。',
103
+ icon: 'mdi:cloud-upload',
104
+ pointIcon: 'mdi:close-circle-outline',
105
+ points: [
106
+ '您的照片会通过互联网传输到未知的服务器',
107
+ '需要等待上传和远程处理的时间',
108
+ '每天对文件大小和免费转换次数有限制',
109
+ '存在第三方服务器保留数据的真实风险',
110
+ ],
111
+ },
112
+ {
113
+ title: '我们的本地架构',
114
+ description: '使用 Vanilla JS 技术直接在您的硬件上进行处理。',
115
+ icon: 'mdi:laptop-mac',
116
+ highlight: true,
117
+ points: [
118
+ '零字节发送: 一切都在您的内存中完成',
119
+ '即时速度, 不依赖于您的网络连接',
120
+ '对文件大小或文件数量没有限制',
121
+ '非常适合个人、医疗或企业照片',
122
+ ],
123
+ },
124
+ ],
125
+ },
126
+ {
127
+ type: 'title',
128
+ text: '技术原理',
129
+ level: 3,
130
+ },
131
+ {
132
+ type: 'paragraph',
133
+ html: '当您将 WebP 文件拖入工具时, 浏览器会使用其内部渲染引擎原生解码。随后, 图像会被绘制到一个不可见的 <strong>HTML5 Canvas</strong> 元素上。由于 JPG 不支持透明度, 算法会在合成图像之前, 用纯白色背景预填充画布。',
134
+ },
135
+ {
136
+ type: 'paragraph',
137
+ html: '最后一步是导出: Canvas 方法 <code>toDataURL(\'image/jpeg\')</code> 将画布像素转换为高质量的压缩 JPG 字节流。此流不经过任何网络通信, 直接交付给浏览器的下载系统。整个过程即使对于数百万像素的图像也只需几毫秒。',
138
+ },
139
+ {
140
+ type: 'tip',
141
+ title: '兼容性建议',
142
+ html: '与非技术用户分享照片或通过邮件发送时, 请始终使用 JPG——在任何邮件客户端、操作系统或设备上都没有任何兼容性问题, 没有例外, 也没有令人不快的意外。',
143
+ },
144
+ {
145
+ type: 'title',
146
+ text: '应用场景与兼容性',
147
+ level: 3,
148
+ },
149
+ {
150
+ type: 'list',
151
+ icon: 'mdi:check-circle',
152
+ items: [
153
+ '在 Outlook、Gmail 或 Apple Mail 的邮件中添加照片附件。',
154
+ '在 Word 文档、Excel 或 PowerPoint 演示文稿中插入图片。',
155
+ '在拒绝 WebP 的社交媒体平台上发布内容。',
156
+ '通过格式支持有限的 WhatsApp 或即时通讯软件分享。',
157
+ '在仅接受 JPG 或 PNG 的打印服务处打印照片。',
158
+ ],
159
+ },
160
+ {
161
+ type: 'title',
162
+ text: '总结',
163
+ level: 3,
164
+ },
165
+ {
166
+ type: 'paragraph',
167
+ html: 'WebP 是网页图片的未来, 但 JPG 仍然是通用兼容性的王者。此工具能让您在几秒钟内跨越这道鸿沟, 且完全私密, 无需安装任何软件。您的图片从未离开您的设备。',
168
+ },
169
+ ];
170
+
171
+
172
+ export const content: WebpAJpgLocaleContent = {
173
+ slug,
174
+ title,
175
+ description,
176
+ ui,
177
+ seo,
178
+ faq,
179
+ bibliography,
180
+ howTo,
181
+ schemas: generateSchemas({ title, description, inLanguage: 'zh', faq, howTo }),
182
+ };
@@ -16,6 +16,18 @@ export const webpAJpg: ConvertersToolEntry<ImageConverterUI> = {
16
16
  es: () => import('./i18n/es').then((m) => m.content),
17
17
  en: () => import('./i18n/en').then((m) => m.content),
18
18
  fr: () => import('./i18n/fr').then((m) => m.content),
19
+ de: () => import('./i18n/de').then((m) => m.content),
20
+ id: () => import('./i18n/id').then((m) => m.content),
21
+ it: () => import('./i18n/it').then((m) => m.content),
22
+ ja: () => import('./i18n/ja').then((m) => m.content),
23
+ ko: () => import('./i18n/ko').then((m) => m.content),
24
+ nl: () => import('./i18n/nl').then((m) => m.content),
25
+ pl: () => import('./i18n/pl').then((m) => m.content),
26
+ pt: () => import('./i18n/pt').then((m) => m.content),
27
+ ru: () => import('./i18n/ru').then((m) => m.content),
28
+ sv: () => import('./i18n/sv').then((m) => m.content),
29
+ tr: () => import('./i18n/tr').then((m) => m.content),
30
+ zh: () => import('./i18n/zh').then((m) => m.content),
19
31
  },
20
32
  };
21
33
 
@@ -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
  };