@jjlmoya/utils-converters 1.7.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 (345) 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/title_quality.test.ts +55 -0
  10. package/src/tool/avifAJpg/i18n/de.ts +178 -0
  11. package/src/tool/avifAJpg/i18n/en.ts +2 -12
  12. package/src/tool/avifAJpg/i18n/es.ts +2 -12
  13. package/src/tool/avifAJpg/i18n/fr.ts +2 -12
  14. package/src/tool/avifAJpg/i18n/id.ts +178 -0
  15. package/src/tool/avifAJpg/i18n/it.ts +178 -0
  16. package/src/tool/avifAJpg/i18n/ja.ts +178 -0
  17. package/src/tool/avifAJpg/i18n/ko.ts +178 -0
  18. package/src/tool/avifAJpg/i18n/nl.ts +178 -0
  19. package/src/tool/avifAJpg/i18n/pl.ts +178 -0
  20. package/src/tool/avifAJpg/i18n/pt.ts +178 -0
  21. package/src/tool/avifAJpg/i18n/ru.ts +178 -0
  22. package/src/tool/avifAJpg/i18n/sv.ts +178 -0
  23. package/src/tool/avifAJpg/i18n/tr.ts +178 -0
  24. package/src/tool/avifAJpg/i18n/zh.ts +178 -0
  25. package/src/tool/avifAJpg/index.ts +13 -1
  26. package/src/tool/avifAPng/i18n/de.ts +178 -0
  27. package/src/tool/avifAPng/i18n/en.ts +2 -12
  28. package/src/tool/avifAPng/i18n/es.ts +2 -12
  29. package/src/tool/avifAPng/i18n/fr.ts +2 -12
  30. package/src/tool/avifAPng/i18n/id.ts +178 -0
  31. package/src/tool/avifAPng/i18n/it.ts +178 -0
  32. package/src/tool/avifAPng/i18n/ja.ts +178 -0
  33. package/src/tool/avifAPng/i18n/ko.ts +178 -0
  34. package/src/tool/avifAPng/i18n/nl.ts +178 -0
  35. package/src/tool/avifAPng/i18n/pl.ts +178 -0
  36. package/src/tool/avifAPng/i18n/pt.ts +178 -0
  37. package/src/tool/avifAPng/i18n/ru.ts +178 -0
  38. package/src/tool/avifAPng/i18n/sv.ts +178 -0
  39. package/src/tool/avifAPng/i18n/tr.ts +178 -0
  40. package/src/tool/avifAPng/i18n/zh.ts +178 -0
  41. package/src/tool/avifAPng/index.ts +13 -1
  42. package/src/tool/avifAWebp/i18n/de.ts +178 -0
  43. package/src/tool/avifAWebp/i18n/en.ts +2 -12
  44. package/src/tool/avifAWebp/i18n/es.ts +2 -12
  45. package/src/tool/avifAWebp/i18n/fr.ts +2 -12
  46. package/src/tool/avifAWebp/i18n/id.ts +178 -0
  47. package/src/tool/avifAWebp/i18n/it.ts +178 -0
  48. package/src/tool/avifAWebp/i18n/ja.ts +178 -0
  49. package/src/tool/avifAWebp/i18n/ko.ts +178 -0
  50. package/src/tool/avifAWebp/i18n/nl.ts +178 -0
  51. package/src/tool/avifAWebp/i18n/pl.ts +178 -0
  52. package/src/tool/avifAWebp/i18n/pt.ts +178 -0
  53. package/src/tool/avifAWebp/i18n/ru.ts +178 -0
  54. package/src/tool/avifAWebp/i18n/sv.ts +178 -0
  55. package/src/tool/avifAWebp/i18n/tr.ts +178 -0
  56. package/src/tool/avifAWebp/i18n/zh.ts +178 -0
  57. package/src/tool/avifAWebp/index.ts +13 -1
  58. package/src/tool/bmpAJpg/i18n/de.ts +178 -0
  59. package/src/tool/bmpAJpg/i18n/en.ts +2 -12
  60. package/src/tool/bmpAJpg/i18n/es.ts +2 -12
  61. package/src/tool/bmpAJpg/i18n/fr.ts +2 -12
  62. package/src/tool/bmpAJpg/i18n/id.ts +178 -0
  63. package/src/tool/bmpAJpg/i18n/it.ts +178 -0
  64. package/src/tool/bmpAJpg/i18n/ja.ts +178 -0
  65. package/src/tool/bmpAJpg/i18n/ko.ts +178 -0
  66. package/src/tool/bmpAJpg/i18n/nl.ts +178 -0
  67. package/src/tool/bmpAJpg/i18n/pl.ts +178 -0
  68. package/src/tool/bmpAJpg/i18n/pt.ts +178 -0
  69. package/src/tool/bmpAJpg/i18n/ru.ts +178 -0
  70. package/src/tool/bmpAJpg/i18n/sv.ts +178 -0
  71. package/src/tool/bmpAJpg/i18n/tr.ts +178 -0
  72. package/src/tool/bmpAJpg/i18n/zh.ts +178 -0
  73. package/src/tool/bmpAJpg/index.ts +13 -1
  74. package/src/tool/bmpAPng/i18n/de.ts +177 -0
  75. package/src/tool/bmpAPng/i18n/en.ts +2 -12
  76. package/src/tool/bmpAPng/i18n/es.ts +2 -12
  77. package/src/tool/bmpAPng/i18n/fr.ts +2 -12
  78. package/src/tool/bmpAPng/i18n/id.ts +177 -0
  79. package/src/tool/bmpAPng/i18n/it.ts +177 -0
  80. package/src/tool/bmpAPng/i18n/ja.ts +177 -0
  81. package/src/tool/bmpAPng/i18n/ko.ts +177 -0
  82. package/src/tool/bmpAPng/i18n/nl.ts +177 -0
  83. package/src/tool/bmpAPng/i18n/pl.ts +177 -0
  84. package/src/tool/bmpAPng/i18n/pt.ts +177 -0
  85. package/src/tool/bmpAPng/i18n/ru.ts +177 -0
  86. package/src/tool/bmpAPng/i18n/sv.ts +177 -0
  87. package/src/tool/bmpAPng/i18n/tr.ts +177 -0
  88. package/src/tool/bmpAPng/i18n/zh.ts +177 -0
  89. package/src/tool/bmpAPng/index.ts +13 -1
  90. package/src/tool/bmpAWebp/i18n/de.ts +178 -0
  91. package/src/tool/bmpAWebp/i18n/en.ts +2 -12
  92. package/src/tool/bmpAWebp/i18n/es.ts +2 -12
  93. package/src/tool/bmpAWebp/i18n/fr.ts +2 -12
  94. package/src/tool/bmpAWebp/i18n/id.ts +178 -0
  95. package/src/tool/bmpAWebp/i18n/it.ts +178 -0
  96. package/src/tool/bmpAWebp/i18n/ja.ts +178 -0
  97. package/src/tool/bmpAWebp/i18n/ko.ts +178 -0
  98. package/src/tool/bmpAWebp/i18n/nl.ts +178 -0
  99. package/src/tool/bmpAWebp/i18n/pl.ts +178 -0
  100. package/src/tool/bmpAWebp/i18n/pt.ts +178 -0
  101. package/src/tool/bmpAWebp/i18n/ru.ts +178 -0
  102. package/src/tool/bmpAWebp/i18n/sv.ts +178 -0
  103. package/src/tool/bmpAWebp/i18n/tr.ts +178 -0
  104. package/src/tool/bmpAWebp/i18n/zh.ts +178 -0
  105. package/src/tool/bmpAWebp/index.ts +13 -1
  106. package/src/tool/gifAJpg/i18n/de.ts +178 -0
  107. package/src/tool/gifAJpg/i18n/en.ts +2 -12
  108. package/src/tool/gifAJpg/i18n/es.ts +2 -12
  109. package/src/tool/gifAJpg/i18n/fr.ts +2 -12
  110. package/src/tool/gifAJpg/i18n/id.ts +178 -0
  111. package/src/tool/gifAJpg/i18n/it.ts +178 -0
  112. package/src/tool/gifAJpg/i18n/ja.ts +178 -0
  113. package/src/tool/gifAJpg/i18n/ko.ts +178 -0
  114. package/src/tool/gifAJpg/i18n/nl.ts +178 -0
  115. package/src/tool/gifAJpg/i18n/pl.ts +178 -0
  116. package/src/tool/gifAJpg/i18n/pt.ts +178 -0
  117. package/src/tool/gifAJpg/i18n/ru.ts +178 -0
  118. package/src/tool/gifAJpg/i18n/sv.ts +178 -0
  119. package/src/tool/gifAJpg/i18n/tr.ts +178 -0
  120. package/src/tool/gifAJpg/i18n/zh.ts +178 -0
  121. package/src/tool/gifAJpg/index.ts +13 -1
  122. package/src/tool/gifAPng/i18n/de.ts +178 -0
  123. package/src/tool/gifAPng/i18n/en.ts +2 -12
  124. package/src/tool/gifAPng/i18n/es.ts +2 -12
  125. package/src/tool/gifAPng/i18n/fr.ts +2 -12
  126. package/src/tool/gifAPng/i18n/id.ts +178 -0
  127. package/src/tool/gifAPng/i18n/it.ts +178 -0
  128. package/src/tool/gifAPng/i18n/ja.ts +178 -0
  129. package/src/tool/gifAPng/i18n/ko.ts +178 -0
  130. package/src/tool/gifAPng/i18n/nl.ts +178 -0
  131. package/src/tool/gifAPng/i18n/pl.ts +178 -0
  132. package/src/tool/gifAPng/i18n/pt.ts +178 -0
  133. package/src/tool/gifAPng/i18n/ru.ts +178 -0
  134. package/src/tool/gifAPng/i18n/sv.ts +178 -0
  135. package/src/tool/gifAPng/i18n/tr.ts +178 -0
  136. package/src/tool/gifAPng/i18n/zh.ts +178 -0
  137. package/src/tool/gifAPng/index.ts +12 -0
  138. package/src/tool/gifAWebp/i18n/de.ts +178 -0
  139. package/src/tool/gifAWebp/i18n/en.ts +2 -12
  140. package/src/tool/gifAWebp/i18n/es.ts +2 -12
  141. package/src/tool/gifAWebp/i18n/fr.ts +2 -12
  142. package/src/tool/gifAWebp/i18n/id.ts +178 -0
  143. package/src/tool/gifAWebp/i18n/it.ts +178 -0
  144. package/src/tool/gifAWebp/i18n/ja.ts +178 -0
  145. package/src/tool/gifAWebp/i18n/ko.ts +178 -0
  146. package/src/tool/gifAWebp/i18n/nl.ts +178 -0
  147. package/src/tool/gifAWebp/i18n/pl.ts +178 -0
  148. package/src/tool/gifAWebp/i18n/pt.ts +178 -0
  149. package/src/tool/gifAWebp/i18n/ru.ts +178 -0
  150. package/src/tool/gifAWebp/i18n/sv.ts +178 -0
  151. package/src/tool/gifAWebp/i18n/tr.ts +178 -0
  152. package/src/tool/gifAWebp/i18n/zh.ts +178 -0
  153. package/src/tool/gifAWebp/index.ts +12 -0
  154. package/src/tool/imagenBase64/i18n/de.ts +168 -0
  155. package/src/tool/imagenBase64/i18n/en.ts +2 -12
  156. package/src/tool/imagenBase64/i18n/es.ts +2 -12
  157. package/src/tool/imagenBase64/i18n/fr.ts +2 -12
  158. package/src/tool/imagenBase64/i18n/id.ts +168 -0
  159. package/src/tool/imagenBase64/i18n/it.ts +168 -0
  160. package/src/tool/imagenBase64/i18n/ja.ts +168 -0
  161. package/src/tool/imagenBase64/i18n/ko.ts +168 -0
  162. package/src/tool/imagenBase64/i18n/nl.ts +168 -0
  163. package/src/tool/imagenBase64/i18n/pl.ts +168 -0
  164. package/src/tool/imagenBase64/i18n/pt.ts +173 -0
  165. package/src/tool/imagenBase64/i18n/ru.ts +168 -0
  166. package/src/tool/imagenBase64/i18n/sv.ts +168 -0
  167. package/src/tool/imagenBase64/i18n/tr.ts +168 -0
  168. package/src/tool/imagenBase64/i18n/zh.ts +168 -0
  169. package/src/tool/imagenBase64/index.ts +12 -0
  170. package/src/tool/jpgAIco/i18n/de.ts +183 -0
  171. package/src/tool/jpgAIco/i18n/en.ts +8 -13
  172. package/src/tool/jpgAIco/i18n/es.ts +13 -18
  173. package/src/tool/jpgAIco/i18n/fr.ts +9 -14
  174. package/src/tool/jpgAIco/i18n/id.ts +183 -0
  175. package/src/tool/jpgAIco/i18n/it.ts +183 -0
  176. package/src/tool/jpgAIco/i18n/ja.ts +183 -0
  177. package/src/tool/jpgAIco/i18n/ko.ts +183 -0
  178. package/src/tool/jpgAIco/i18n/nl.ts +183 -0
  179. package/src/tool/jpgAIco/i18n/pl.ts +183 -0
  180. package/src/tool/jpgAIco/i18n/pt.ts +183 -0
  181. package/src/tool/jpgAIco/i18n/ru.ts +183 -0
  182. package/src/tool/jpgAIco/i18n/sv.ts +183 -0
  183. package/src/tool/jpgAIco/i18n/tr.ts +183 -0
  184. package/src/tool/jpgAIco/i18n/zh.ts +183 -0
  185. package/src/tool/jpgAIco/index.ts +12 -0
  186. package/src/tool/jpgAPng/i18n/de.ts +178 -0
  187. package/src/tool/jpgAPng/i18n/en.ts +2 -12
  188. package/src/tool/jpgAPng/i18n/es.ts +2 -12
  189. package/src/tool/jpgAPng/i18n/fr.ts +2 -12
  190. package/src/tool/jpgAPng/i18n/id.ts +178 -0
  191. package/src/tool/jpgAPng/i18n/it.ts +178 -0
  192. package/src/tool/jpgAPng/i18n/ja.ts +178 -0
  193. package/src/tool/jpgAPng/i18n/ko.ts +178 -0
  194. package/src/tool/jpgAPng/i18n/nl.ts +178 -0
  195. package/src/tool/jpgAPng/i18n/pl.ts +178 -0
  196. package/src/tool/jpgAPng/i18n/pt.ts +178 -0
  197. package/src/tool/jpgAPng/i18n/ru.ts +178 -0
  198. package/src/tool/jpgAPng/i18n/sv.ts +178 -0
  199. package/src/tool/jpgAPng/i18n/tr.ts +178 -0
  200. package/src/tool/jpgAPng/i18n/zh.ts +178 -0
  201. package/src/tool/jpgAPng/index.ts +13 -1
  202. package/src/tool/jpgAWebp/i18n/de.ts +178 -0
  203. package/src/tool/jpgAWebp/i18n/en.ts +2 -12
  204. package/src/tool/jpgAWebp/i18n/es.ts +2 -12
  205. package/src/tool/jpgAWebp/i18n/fr.ts +2 -12
  206. package/src/tool/jpgAWebp/i18n/id.ts +178 -0
  207. package/src/tool/jpgAWebp/i18n/it.ts +178 -0
  208. package/src/tool/jpgAWebp/i18n/ja.ts +178 -0
  209. package/src/tool/jpgAWebp/i18n/ko.ts +178 -0
  210. package/src/tool/jpgAWebp/i18n/nl.ts +178 -0
  211. package/src/tool/jpgAWebp/i18n/pl.ts +178 -0
  212. package/src/tool/jpgAWebp/i18n/pt.ts +178 -0
  213. package/src/tool/jpgAWebp/i18n/ru.ts +178 -0
  214. package/src/tool/jpgAWebp/i18n/sv.ts +178 -0
  215. package/src/tool/jpgAWebp/i18n/tr.ts +178 -0
  216. package/src/tool/jpgAWebp/i18n/zh.ts +178 -0
  217. package/src/tool/jpgAWebp/index.ts +12 -0
  218. package/src/tool/pngAIco/i18n/de.ts +183 -0
  219. package/src/tool/pngAIco/i18n/en.ts +8 -13
  220. package/src/tool/pngAIco/i18n/es.ts +19 -24
  221. package/src/tool/pngAIco/i18n/fr.ts +20 -25
  222. package/src/tool/pngAIco/i18n/id.ts +183 -0
  223. package/src/tool/pngAIco/i18n/it.ts +183 -0
  224. package/src/tool/pngAIco/i18n/ja.ts +183 -0
  225. package/src/tool/pngAIco/i18n/ko.ts +183 -0
  226. package/src/tool/pngAIco/i18n/nl.ts +183 -0
  227. package/src/tool/pngAIco/i18n/pl.ts +183 -0
  228. package/src/tool/pngAIco/i18n/pt.ts +183 -0
  229. package/src/tool/pngAIco/i18n/ru.ts +183 -0
  230. package/src/tool/pngAIco/i18n/sv.ts +183 -0
  231. package/src/tool/pngAIco/i18n/tr.ts +183 -0
  232. package/src/tool/pngAIco/i18n/zh.ts +183 -0
  233. package/src/tool/pngAIco/index.ts +12 -0
  234. package/src/tool/pngAJpg/i18n/de.ts +191 -0
  235. package/src/tool/pngAJpg/i18n/en.ts +2 -12
  236. package/src/tool/pngAJpg/i18n/es.ts +2 -12
  237. package/src/tool/pngAJpg/i18n/fr.ts +2 -12
  238. package/src/tool/pngAJpg/i18n/id.ts +191 -0
  239. package/src/tool/pngAJpg/i18n/it.ts +191 -0
  240. package/src/tool/pngAJpg/i18n/ja.ts +191 -0
  241. package/src/tool/pngAJpg/i18n/ko.ts +191 -0
  242. package/src/tool/pngAJpg/i18n/nl.ts +191 -0
  243. package/src/tool/pngAJpg/i18n/pl.ts +191 -0
  244. package/src/tool/pngAJpg/i18n/pt.ts +191 -0
  245. package/src/tool/pngAJpg/i18n/ru.ts +191 -0
  246. package/src/tool/pngAJpg/i18n/sv.ts +191 -0
  247. package/src/tool/pngAJpg/i18n/tr.ts +191 -0
  248. package/src/tool/pngAJpg/i18n/zh.ts +191 -0
  249. package/src/tool/pngAJpg/index.ts +13 -1
  250. package/src/tool/pngAWebp/i18n/de.ts +182 -0
  251. package/src/tool/pngAWebp/i18n/en.ts +2 -12
  252. package/src/tool/pngAWebp/i18n/es.ts +2 -12
  253. package/src/tool/pngAWebp/i18n/fr.ts +2 -12
  254. package/src/tool/pngAWebp/i18n/id.ts +182 -0
  255. package/src/tool/pngAWebp/i18n/it.ts +182 -0
  256. package/src/tool/pngAWebp/i18n/ja.ts +182 -0
  257. package/src/tool/pngAWebp/i18n/ko.ts +182 -0
  258. package/src/tool/pngAWebp/i18n/nl.ts +182 -0
  259. package/src/tool/pngAWebp/i18n/pl.ts +182 -0
  260. package/src/tool/pngAWebp/i18n/pt.ts +182 -0
  261. package/src/tool/pngAWebp/i18n/ru.ts +182 -0
  262. package/src/tool/pngAWebp/i18n/sv.ts +182 -0
  263. package/src/tool/pngAWebp/i18n/tr.ts +182 -0
  264. package/src/tool/pngAWebp/i18n/zh.ts +182 -0
  265. package/src/tool/pngAWebp/index.ts +12 -0
  266. package/src/tool/svgAJpg/i18n/de.ts +178 -0
  267. package/src/tool/svgAJpg/i18n/en.ts +8 -13
  268. package/src/tool/svgAJpg/i18n/es.ts +8 -13
  269. package/src/tool/svgAJpg/i18n/fr.ts +2 -12
  270. package/src/tool/svgAJpg/i18n/id.ts +178 -0
  271. package/src/tool/svgAJpg/i18n/it.ts +178 -0
  272. package/src/tool/svgAJpg/i18n/ja.ts +178 -0
  273. package/src/tool/svgAJpg/i18n/ko.ts +178 -0
  274. package/src/tool/svgAJpg/i18n/nl.ts +178 -0
  275. package/src/tool/svgAJpg/i18n/pl.ts +178 -0
  276. package/src/tool/svgAJpg/i18n/pt.ts +178 -0
  277. package/src/tool/svgAJpg/i18n/ru.ts +178 -0
  278. package/src/tool/svgAJpg/i18n/sv.ts +178 -0
  279. package/src/tool/svgAJpg/i18n/tr.ts +178 -0
  280. package/src/tool/svgAJpg/i18n/zh.ts +178 -0
  281. package/src/tool/svgAJpg/index.ts +12 -0
  282. package/src/tool/svgAPng/i18n/de.ts +178 -0
  283. package/src/tool/svgAPng/i18n/en.ts +8 -13
  284. package/src/tool/svgAPng/i18n/es.ts +31 -36
  285. package/src/tool/svgAPng/i18n/fr.ts +2 -12
  286. package/src/tool/svgAPng/i18n/id.ts +178 -0
  287. package/src/tool/svgAPng/i18n/it.ts +178 -0
  288. package/src/tool/svgAPng/i18n/ja.ts +178 -0
  289. package/src/tool/svgAPng/i18n/ko.ts +178 -0
  290. package/src/tool/svgAPng/i18n/nl.ts +178 -0
  291. package/src/tool/svgAPng/i18n/pl.ts +178 -0
  292. package/src/tool/svgAPng/i18n/pt.ts +178 -0
  293. package/src/tool/svgAPng/i18n/ru.ts +178 -0
  294. package/src/tool/svgAPng/i18n/sv.ts +178 -0
  295. package/src/tool/svgAPng/i18n/tr.ts +178 -0
  296. package/src/tool/svgAPng/i18n/zh.ts +178 -0
  297. package/src/tool/svgAPng/index.ts +12 -0
  298. package/src/tool/webpAIco/i18n/de.ts +183 -0
  299. package/src/tool/webpAIco/i18n/en.ts +8 -13
  300. package/src/tool/webpAIco/i18n/es.ts +9 -14
  301. package/src/tool/webpAIco/i18n/fr.ts +11 -16
  302. package/src/tool/webpAIco/i18n/id.ts +183 -0
  303. package/src/tool/webpAIco/i18n/it.ts +183 -0
  304. package/src/tool/webpAIco/i18n/ja.ts +183 -0
  305. package/src/tool/webpAIco/i18n/ko.ts +183 -0
  306. package/src/tool/webpAIco/i18n/nl.ts +183 -0
  307. package/src/tool/webpAIco/i18n/pl.ts +183 -0
  308. package/src/tool/webpAIco/i18n/pt.ts +183 -0
  309. package/src/tool/webpAIco/i18n/ru.ts +183 -0
  310. package/src/tool/webpAIco/i18n/sv.ts +183 -0
  311. package/src/tool/webpAIco/i18n/tr.ts +183 -0
  312. package/src/tool/webpAIco/i18n/zh.ts +183 -0
  313. package/src/tool/webpAIco/index.ts +12 -0
  314. package/src/tool/webpAJpg/i18n/de.ts +187 -0
  315. package/src/tool/webpAJpg/i18n/en.ts +9 -13
  316. package/src/tool/webpAJpg/i18n/es.ts +37 -42
  317. package/src/tool/webpAJpg/i18n/fr.ts +35 -40
  318. package/src/tool/webpAJpg/i18n/id.ts +182 -0
  319. package/src/tool/webpAJpg/i18n/it.ts +182 -0
  320. package/src/tool/webpAJpg/i18n/ja.ts +182 -0
  321. package/src/tool/webpAJpg/i18n/ko.ts +182 -0
  322. package/src/tool/webpAJpg/i18n/nl.ts +182 -0
  323. package/src/tool/webpAJpg/i18n/pl.ts +182 -0
  324. package/src/tool/webpAJpg/i18n/pt.ts +182 -0
  325. package/src/tool/webpAJpg/i18n/ru.ts +182 -0
  326. package/src/tool/webpAJpg/i18n/sv.ts +182 -0
  327. package/src/tool/webpAJpg/i18n/tr.ts +182 -0
  328. package/src/tool/webpAJpg/i18n/zh.ts +182 -0
  329. package/src/tool/webpAJpg/index.ts +12 -0
  330. package/src/tool/webpAPng/i18n/de.ts +182 -0
  331. package/src/tool/webpAPng/i18n/en.ts +8 -13
  332. package/src/tool/webpAPng/i18n/es.ts +35 -40
  333. package/src/tool/webpAPng/i18n/fr.ts +2 -12
  334. package/src/tool/webpAPng/i18n/id.ts +182 -0
  335. package/src/tool/webpAPng/i18n/it.ts +182 -0
  336. package/src/tool/webpAPng/i18n/ja.ts +182 -0
  337. package/src/tool/webpAPng/i18n/ko.ts +182 -0
  338. package/src/tool/webpAPng/i18n/nl.ts +182 -0
  339. package/src/tool/webpAPng/i18n/pl.ts +182 -0
  340. package/src/tool/webpAPng/i18n/pt.ts +182 -0
  341. package/src/tool/webpAPng/i18n/ru.ts +182 -0
  342. package/src/tool/webpAPng/i18n/sv.ts +182 -0
  343. package/src/tool/webpAPng/i18n/tr.ts +182 -0
  344. package/src/tool/webpAPng/i18n/zh.ts +182 -0
  345. 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 { PngAWebpLocaleContent } from '../index';
4
+
5
+ const slug = 'png-zu-webp-konverter';
6
+ const title = 'PNG zu WebP Konverter Online und Kostenlos';
7
+ const description =
8
+ 'Konvertieren Sie PNG-Bilder in Ihrem Browser in WebP. Bis zu 40 % geringere Dateigröße. Transparenz bleibt erhalten. Keine Dateiuploads. Kostenlos und privat.';
9
+
10
+ const ui: ImageConverterUI = {
11
+ dragText: 'PNG-Dateien hierher ziehen...',
12
+ convertText: 'Um sie sofort in WebP 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: PngAWebpLocaleContent['faq'] = [
22
+ {
23
+ question: 'Warum PNG in WebP konvertieren?',
24
+ answer:
25
+ 'WebP bietet bei gleicher Qualität eine bis zu 40 % bessere Komprimierung als PNG und unterstützt gleichzeitig die Alpha-Transparenz. Es ist das von Google PageSpeed Insights empfohlene Format.',
26
+ },
27
+ {
28
+ question: 'Geht bei dem Prozess die Transparenz verloren?',
29
+ answer:
30
+ 'Nein. Die technische Implementierung von WebP unterstützt den Alpha-Kanal. Die Transparenzen der ursprünglichen PNG bleiben in der neuen WebP-Datei erhalten.',
31
+ },
32
+ {
33
+ question: 'Gelangen meine Bilder auf einen Server?',
34
+ answer:
35
+ 'Nein. Der Code wird ausschließlich in Ihrem Browser ausgeführt (Client-Side). Wir sehen, protokollieren oder speichern die von Ihnen konvertierten Bilder niemals.',
36
+ },
37
+ ];
38
+
39
+ const howTo: PngAWebpLocaleContent['howTo'] = [
40
+ {
41
+ name: 'PNGs einfügen',
42
+ text: 'Ziehen Sie Ihre großen PNG-Dateien in den Upload-Bereich oder nutzen Sie den klassischen interaktiven Auswahldialog.',
43
+ },
44
+ {
45
+ name: 'Kanal-Erkennung',
46
+ text: 'Die lokale Rendering-Engine erkennt die Pixelzusammensetzung und exportiert sie in das optimierte WebP-Format.',
47
+ },
48
+ {
49
+ name: 'Direkter Download',
50
+ text: 'Laden Sie Ihre stark komprimierten WebP-Dateien einzeln herunter oder fassen Sie sie mit dem ZIP-Paket-Konverter zusammen.',
51
+ },
52
+ ];
53
+
54
+ const bibliography: PngAWebpLocaleContent['bibliography'] = [
55
+ {
56
+ name: 'Google: WebP Implementierungsdetails',
57
+ url: 'https://developers.google.com/speed/webp/',
58
+ },
59
+ {
60
+ name: 'W3C: Leitfaden zu Core Web Vitals',
61
+ url: 'https://web.dev/vitals/',
62
+ },
63
+ {
64
+ name: 'Mozilla Docs: Bildformate',
65
+ url: 'https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Image_types',
66
+ },
67
+ ];
68
+
69
+ const seo: PngAWebpLocaleContent['seo'] = [
70
+ {
71
+ type: 'title',
72
+ text: 'PNG zu WebP Konverter: Transparenz und moderne Kompression für das Web',
73
+ level: 2,
74
+ },
75
+ {
76
+ type: 'paragraph',
77
+ html: '<strong>PNG</strong> war jahrzehntelang das Referenzformat für Webbilder mit Transparenz – Logos, Icons, UI-Elemente, Produktbilder auf freigestelltem Hintergrund. Das Problem ist die Dateigröße: Die verlustfreie Kompression, die Qualität garantiert, erzeugt auch spürbar große Dateien. Googles <strong>WebP</strong> löst diesen Widerspruch: Es unterstützt den Alpha-Kanal (Transparenz) <em>und</em> komprimiert weitaus besser als PNG, was den Wechsel von PNG zu WebP auf Ihrer Website zu einer perfekten Optimierung macht, bei der Sie auf nichts verzichten müssen.',
78
+ },
79
+ {
80
+ type: 'title',
81
+ text: 'PNG oder WebP? Wann welches Format zu verwenden ist',
82
+ level: 3,
83
+ },
84
+ {
85
+ type: 'paragraph',
86
+ html: '<strong>PNG</strong> bleibt das richtige Format, wenn Kompatibilität entscheidend ist: Design-Tools wie Photoshop oder Figma, Druck-Workflows, ältere Desktop-Anwendungen oder jeder Kontext, in dem WebP-Unterstützung nicht garantiert ist. Es ist auch das ideale Format für das Speichern von Arbeitsebenen in Bearbeitungspipelines, da seine verlustfreie Kompression jeden Pixel bewahrt. Der Preis: Dateien, die 3–8 Mal mehr wiegen können als ihr WebP-Äquivalent.',
87
+ },
88
+ {
89
+ type: 'paragraph',
90
+ html: '<strong>WebP</strong> ist der natürliche Ersatz für PNG für alle modernen Web-Inhalte. Chrome, Firefox, Safari und Edge unterstützen es nativ. Ein verlustfreies WebP-Bild ist 26 % kleiner als die entsprechende PNG-Datei; im verlustbehafteten Modus kann es bis zu 40 % kleiner sein, bei praktisch nicht unterscheidbarer visueller Qualität. Und entscheidend für das Webdesign: <strong>WebP bewahrt die Alpha-Transparenz</strong> genau wie PNG, ohne visuelle Kompromisse.',
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
+ 'Netzwerklatenz beim Hoch- und Herunterladen',
107
+ 'Ihre Logos und Bilder werden auf Servern von Drittanbietern gespeichert',
108
+ 'Dateigrößenlimits und tägliche Konvertierungsbeschränkungen',
109
+ 'Aufdringliche Werbung und Drittanbieter-Tracker',
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
+ 'Sofortige Geschwindigkeit – keine Netzwerklatenz',
119
+ 'Vollständige Privatsphäre – 0 Byte werden extern gesendet',
120
+ 'Keine Megabyte-Limits oder Dateianzahlbeschränkungen',
121
+ 'Saubere Benutzeroberfläche, keine Werbung oder Tracking',
122
+ ],
123
+ },
124
+ ],
125
+ },
126
+ {
127
+ type: 'title',
128
+ text: 'Wie es technisch funktioniert',
129
+ level: 3,
130
+ },
131
+ {
132
+ type: 'paragraph',
133
+ html: 'Die PNG wird lokal geladen und in einem im Speicher befindlichen <strong>HTML5 Canvas</strong> dekodiert. Die Canvas-API bewahrt den Alpha-Kanal der ursprünglichen PNG – alle transparenten und halbtransparenten Pixel bleiben im RGBA-Pixelbuffer intakt. Das Canvas wird dann durch Aufruf von <code>toDataURL(\'image/webp\')</code> exportiert, wodurch der WebP-Codec des Browsers (basierend auf Googles libwebp) angewendet wird, um eine kompaktere Datei zu erzeugen, ohne die Transparenzdaten zu verändern.',
134
+ },
135
+ {
136
+ type: 'paragraph',
137
+ html: 'WebP verwendet zwei Kompressionsmodi: den verlustfreien Modus für Bilder, bei denen jeder Pixel exakt dem Original entsprechen muss, und den verlustbehafteten Modus für Fotos und Elemente, bei denen kleine Unterschiede unmerklich sind. Der verlustfreie Modus erzeugt Dateien, die 26 % kleiner als PNG sind; der verlustbehaftete Modus kann Reduktionen von bis zu 40 % im Vergleich zu PNG erreichen, während eine exzellente visuelle Qualität beibehalten wird.',
138
+ },
139
+ {
140
+ type: 'tip',
141
+ title: 'Tipp: WebP schlägt sowohl PNG als auch JPG im Web',
142
+ html: 'WebP im verlustfreien Modus ist kleiner als PNG. WebP im verlustbehafteten Modus ist kleiner als JPG. Damit ist WebP das <strong>einzige Format, das beide im Web-Kontext ersetzt</strong>. Konvertieren Sie Ihre transparenten PNGs vor dem Hochladen in WebP: Google PageSpeed Insights erkennt dies und bewertet es in Audits für "Bilder in modernen Formaten bereitstellen" positiv.',
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
+ 'Logos und Icons mit transparentem Hintergrund für Websites und Apps.',
154
+ 'Produktbilder mit freigestelltem Hintergrund in E-Commerce-Shops.',
155
+ 'CSS-Sprites und UI-Elemente mit Alpha-Transparenz.',
156
+ 'Rasterisierte Illustrationen und Vektorgrafiken für Landing Pages.',
157
+ 'Artikel-Thumbnails mit transparentem Hintergrund in Blogs und Nachrichtenportalen.',
158
+ ],
159
+ },
160
+ {
161
+ type: 'title',
162
+ text: 'Fazit',
163
+ level: 3,
164
+ },
165
+ {
166
+ type: 'paragraph',
167
+ html: 'Der Wechsel von PNG zu WebP ist die umfassendste Webbild-Optimierung, die verfügbar ist: Sie erhalten leichtere Dateien, bewahren die Transparenz und verbessern die Core Web Vitals-Metriken, ohne etwas an Ihrem visuellen Design zu ändern. Dieses Tool erledigt das sofort, kostenlos und völlig privat – Ihre Bilder werden in Ihrem Browser verarbeitet und verlassen niemals Ihr Gerät.',
168
+ },
169
+ ];
170
+
171
+
172
+ export const content: PngAWebpLocaleContent = {
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 { PngAWebpLocaleContent } from '../index';
4
4
 
5
5
  const slug = 'png-to-webp-converter';
@@ -168,16 +168,6 @@ const seo: PngAWebpLocaleContent['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
171
 
182
172
  export const content: PngAWebpLocaleContent = {
183
173
  slug,
@@ -188,5 +178,5 @@ export const content: PngAWebpLocaleContent = {
188
178
  faq,
189
179
  bibliography,
190
180
  howTo,
191
- schemas: [appSchema as any],
181
+ schemas: generateSchemas({ title, description, inLanguage: 'en', faq, howTo }),
192
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 { PngAWebpLocaleContent } from '../index';
4
4
 
5
5
  const slug = 'convertidor-png-a-webp';
@@ -168,16 +168,6 @@ const seo: PngAWebpLocaleContent['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: 'es',
180
- };
181
171
 
182
172
  export const content: PngAWebpLocaleContent = {
183
173
  slug,
@@ -188,5 +178,5 @@ export const content: PngAWebpLocaleContent = {
188
178
  faq,
189
179
  bibliography,
190
180
  howTo,
191
- schemas: [appSchema as any],
181
+ schemas: generateSchemas({ title, description, inLanguage: 'es', faq, howTo }),
192
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 { PngAWebpLocaleContent } from '../index';
4
4
 
5
5
  const slug = 'convertisseur-png-en-webp';
@@ -168,16 +168,6 @@ const seo: PngAWebpLocaleContent['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: PngAWebpLocaleContent = {
183
173
  slug,
@@ -188,5 +178,5 @@ export const content: PngAWebpLocaleContent = {
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 { PngAWebpLocaleContent } from '../index';
4
+
5
+ const slug = 'konverter-png-ke-webp';
6
+ const title = 'Konversi PNG ke WebP Online dan Gratis';
7
+ const description =
8
+ 'Konversi gambar PNG ke WebP di browser Anda. Ukuran file hingga 40% lebih kecil. Mempertahankan transparansi. Tanpa pengunggahan file. Gratis dan privat.';
9
+
10
+ const ui: ImageConverterUI = {
11
+ dragText: 'Tarik file PNG...',
12
+ convertText: 'Untuk mengkonversinya ke WebP 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: PngAWebpLocaleContent['faq'] = [
22
+ {
23
+ question: 'Mengapa mengonversi PNG ke WebP?',
24
+ answer:
25
+ 'WebP menawarkan kompresi hingga 40% lebih baik daripada PNG pada kualitas yang sama, sementara juga mendukung transparansi Alpha. Ini adalah format yang direkomendasikan oleh Google PageSpeed Insights.',
26
+ },
27
+ {
28
+ question: 'Apakah transparansi hilang dalam prosesnya?',
29
+ answer:
30
+ 'Tidak. Implementasi teknis WebP mendukung saluran alfa. Transparansi dari PNG asli akan dipertahankan dalam file WebP yang baru.',
31
+ },
32
+ {
33
+ question: 'Apakah gambar saya dikirim ke server?',
34
+ answer:
35
+ 'Tidak. Kode berjalan secara eksklusif di browser Anda (Client-Side). Kami tidak pernah melihat, merekam, atau menyimpan gambar yang Anda konversi.',
36
+ },
37
+ ];
38
+
39
+ const howTo: PngAWebpLocaleContent['howTo'] = [
40
+ {
41
+ name: 'Masukkan PNG Anda',
42
+ text: 'Letakkan file PNG besar Anda ke area unggah atau gunakan pemilih interaktif tradisional.',
43
+ },
44
+ {
45
+ name: 'Deteksi saluran',
46
+ text: 'Mesin rendering lokal akan mendeteksi dan mengekspor komposisi piksel ke format WebP yang dioptimalkan.',
47
+ },
48
+ {
49
+ name: 'Unduh Langsung',
50
+ text: 'Unduh file WebP Anda yang sangat terkompresi satu per satu atau gabungkan bersama-sama menggunakan konverter paket ZIP.',
51
+ },
52
+ ];
53
+
54
+ const bibliography: PngAWebpLocaleContent['bibliography'] = [
55
+ {
56
+ name: 'Google: Detail Implementasi WebP',
57
+ url: 'https://developers.google.com/speed/webp/',
58
+ },
59
+ {
60
+ name: 'W3C: Panduan Core Web Vitals',
61
+ url: 'https://web.dev/vitals/',
62
+ },
63
+ {
64
+ name: 'Mozilla Docs: Format Gambar',
65
+ url: 'https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Image_types',
66
+ },
67
+ ];
68
+
69
+ const seo: PngAWebpLocaleContent['seo'] = [
70
+ {
71
+ type: 'title',
72
+ text: 'Konverter PNG ke WebP: Transparansi dan Kompresi Modern untuk Web',
73
+ level: 2,
74
+ },
75
+ {
76
+ type: 'paragraph',
77
+ html: '<strong>PNG</strong> telah menjadi format referensi untuk gambar web dengan transparansi selama beberapa dekade — logo, ikon, elemen UI, gambar produk dengan latar belakang transparan. Masalahnya adalah ukuran file: kompresi lossless yang menjamin kualitas juga menghasilkan file yang sangat besar. <strong>WebP</strong> Google memecahkan kontradiksi ini: ia mendukung saluran alfa (transparansi) <em>dan</em> mengompresi jauh lebih baik daripada PNG, menjadikan peralihan dari PNG ke WebP di situs web Anda sebagai optimasi sempurna yang tidak mengorbankan apa pun.',
78
+ },
79
+ {
80
+ type: 'title',
81
+ text: 'PNG atau WebP? Kapan menggunakan masing-masing format',
82
+ level: 3,
83
+ },
84
+ {
85
+ type: 'paragraph',
86
+ html: '<strong>PNG</strong> tetap merupakan format yang tepat ketika kompatibilitas sangat penting: alat desain seperti Photoshop atau Figma, alur kerja cetak, aplikasi desktop lama, atau konteks apa pun di mana dukungan WebP tidak dijamin. Ini juga merupakan format ideal untuk menyimpan lapisan kerja dalam alur pengeditan, karena kompresi lossless-nya mempertahankan setiap piksel. Biayanya: file yang bisa berbobot 3–8 kali lebih berat daripada ekuivalen WebP-nya.',
87
+ },
88
+ {
89
+ type: 'paragraph',
90
+ html: '<strong>WebP</strong> adalah pengganti alami untuk PNG untuk semua konten web modern. Chrome, Firefox, Safari, dan Edge semuanya mendukungnya secara native. Gambar WebP lossless 26% lebih kecil daripada PNG yang setara; dalam mode lossy, ukurannya bisa hingga 40% lebih kecil dengan kualitas visual yang hampir tidak dapat dibedakan. Dan yang krusial untuk desain web: <strong>WebP mempertahankan transparansi alfa</strong> persis seperti PNG, tanpa kompromi visual.',
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
+ 'Latensi jaringan saat mengunggah dan mengunduh',
107
+ 'Logo dan gambar Anda disimpan di server pihak ketiga',
108
+ 'Batas ukuran file dan batasan konversi harian',
109
+ 'Iklan yang mengganggu dan pelacak pihak ketiga',
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
+ 'Kecepatan instan — nol latensi jaringan',
119
+ 'Privasi lengkap — 0 byte dikirim secara eksternal',
120
+ 'Tanpa batas MB atau batasan jumlah file',
121
+ 'Antarmuka bersih, tanpa iklan atau pelacakan',
122
+ ],
123
+ },
124
+ ],
125
+ },
126
+ {
127
+ type: 'title',
128
+ text: 'Cara kerjanya secara teknis',
129
+ level: 3,
130
+ },
131
+ {
132
+ type: 'paragraph',
133
+ html: 'PNG dimuat secara lokal dan didekodekan ke dalam <strong>HTML5 Canvas</strong> dalam memori. API Canvas mempertahankan saluran alfa dari PNG asli — semua piksel transparan dan semi-transparan dipertahankan secara utuh dalam buffer piksel RGBA. Kanvas kemudian diekspor dengan memanggil <code>toDataURL(\'image/webp\')</code>, yang menerapkan codec WebP browser (berdasarkan libwebp Google) untuk menghasilkan file yang lebih ringkas tanpa mengubah data transparansi.',
134
+ },
135
+ {
136
+ type: 'paragraph',
137
+ html: 'WebP menggunakan dua mode kompresi: mode lossless untuk gambar di mana setiap piksel harus benar-benar setia pada aslinya, dan mode lossy untuk foto dan elemen di mana perbedaan kecil tidak terlihat. Mode lossless menghasilkan file 26% lebih kecil dari PNG; mode lossy dapat mencapai pengurangan hingga 40% dibandingkan dengan PNG sambil mempertahankan kualitas visual yang sangat baik.',
138
+ },
139
+ {
140
+ type: 'tip',
141
+ title: 'Tip: WebP mengalahkan PNG dan JPG di web',
142
+ html: 'WebP dalam mode lossless lebih kecil dari PNG. WebP dalam mode lossy lebih kecil dari JPG. Ini menjadikan WebP sebagai <strong>satu-satunya format yang menggantikan keduanya</strong> dalam konteks web. Konversikan PNG transparan Anda ke WebP sebelum mengunggah: Google PageSpeed Insights mendeteksinya dan memberikan skor positif dalam audit "Sajikan gambar dalam format modern".',
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
+ 'Logo dan ikon dengan latar belakang transparan untuk situs web dan aplikasi.',
154
+ 'Gambar produk dengan latar belakang transparan di toko e-commerce.',
155
+ 'Sprite CSS dan elemen UI dengan transparansi alfa.',
156
+ 'Ilustrasi raster dan grafik vektor untuk landing page.',
157
+ 'Thumbnail artikel dengan latar belakang transparan di blog dan portal berita.',
158
+ ],
159
+ },
160
+ {
161
+ type: 'title',
162
+ text: 'Kesimpulan',
163
+ level: 3,
164
+ },
165
+ {
166
+ type: 'paragraph',
167
+ html: 'Peralihan dari PNG ke WebP adalah optimasi gambar web terlengkap yang tersedia: Anda mendapatkan file yang lebih ringan, mempertahankan transparansi, dan meningkatkan metrik Core Web Vitals tanpa mengubah apa pun pada desain visual Anda. Alat ini melakukannya secara instan, gratis, dan sepenuhnya privat — gambar Anda diproses di browser Anda dan tidak pernah dikirim ke server eksternal mana pun.',
168
+ },
169
+ ];
170
+
171
+
172
+ export const content: PngAWebpLocaleContent = {
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
+ };
@@ -0,0 +1,182 @@
1
+ import type { ImageConverterUI } from '../../../shared/ImageConverter.astro';
2
+ import { generateSchemas } from '../../../shared/logic/schemas';
3
+ import type { PngAWebpLocaleContent } from '../index';
4
+
5
+ const slug = 'convertitore-png-in-webp';
6
+ const title = 'Converti PNG in WebP Online e Gratis';
7
+ const description =
8
+ 'Converti immagini PNG in WebP nel tuo browser. Fino al 40% di dimensioni del file in meno. Preserva la trasparenza. Nessun caricamento di file. Gratuito e privato.';
9
+
10
+ const ui: ImageConverterUI = {
11
+ dragText: 'Trascina i file PNG...',
12
+ convertText: 'Per convertirli in WebP istantaneamente',
13
+ selectFiles: 'Seleziona file',
14
+ processedFiles: 'File elaborati',
15
+ downloadAll: 'Scarica tutto (.zip)',
16
+ pending: 'In attesa',
17
+ bibliographyTitle: 'Riferimenti Bibliografici',
18
+ faqTitle: 'Domande Frequenti',
19
+ };
20
+
21
+ const faq: PngAWebpLocaleContent['faq'] = [
22
+ {
23
+ question: 'Perché convertire PNG in WebP?',
24
+ answer:
25
+ 'WebP offre una compressione migliore fino al 40% rispetto al PNG a parità di qualità, supportando al contempo la trasparenza Alpha. È il formato consigliato da Google PageSpeed Insights.',
26
+ },
27
+ {
28
+ question: 'La trasparenza va persa nel processo?',
29
+ answer:
30
+ 'No. L\'implementazione tecnica di WebP supporta il canale alfa. Le trasparenze del PNG originale saranno preservate nel nuovo file WebP.',
31
+ },
32
+ {
33
+ question: 'Le mie immagini finiscono su qualche server?',
34
+ answer:
35
+ 'No. Il codice viene eseguito esclusivamente nel tuo browser (lato client). Non vediamo, registriamo o salviamo mai le immagini che converti.',
36
+ },
37
+ ];
38
+
39
+ const howTo: PngAWebpLocaleContent['howTo'] = [
40
+ {
41
+ name: 'Inserisci i tuoi PNG',
42
+ text: 'Trascina i tuoi file PNG nell\'area di caricamento o usa il classico selettore interattivo.',
43
+ },
44
+ {
45
+ name: 'Rilevamento del canale',
46
+ text: 'Il motore di rendering locale rileverà ed esporterà la composizione dei pixel nel formato WebP ottimizzato.',
47
+ },
48
+ {
49
+ name: 'Download diretto',
50
+ text: 'Scarica i tuoi file WebP altamente compressi individualmente o raggruppali insieme usando il convertitore ZIP.',
51
+ },
52
+ ];
53
+
54
+ const bibliography: PngAWebpLocaleContent['bibliography'] = [
55
+ {
56
+ name: 'Google: Dettagli sull\'implementazione di WebP',
57
+ url: 'https://developers.google.com/speed/webp/',
58
+ },
59
+ {
60
+ name: 'W3C: Guida ai Core Web Vitals',
61
+ url: 'https://web.dev/vitals/',
62
+ },
63
+ {
64
+ name: 'Mozilla Docs: Formati immagine',
65
+ url: 'https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Image_types',
66
+ },
67
+ ];
68
+
69
+ const seo: PngAWebpLocaleContent['seo'] = [
70
+ {
71
+ type: 'title',
72
+ text: 'Convertitore da PNG a WebP: Trasparenza e compressione moderna per il web',
73
+ level: 2,
74
+ },
75
+ {
76
+ type: 'paragraph',
77
+ html: 'Il <strong>PNG</strong> è stato per decenni il formato di riferimento per le immagini web con trasparenza: loghi, icone, elementi UI, immagini di prodotti su sfondi scontornati. Il suo problema sono le dimensioni del file: la compressione senza perdita che garantisce la qualità genera anche file notevolmente pesanti. Il <strong>WebP</strong> di Google risolve questa contraddizione: supporta il canale alfa (trasparenza) <em>e</em> comprime molto meglio del PNG, rendendo il passaggio da PNG a WebP sul tuo sito un\'ottimizzazione perfetta che non sacrifica nulla.',
78
+ },
79
+ {
80
+ type: 'title',
81
+ text: 'PNG o WebP? Quando utilizzare ciascun formato',
82
+ level: 3,
83
+ },
84
+ {
85
+ type: 'paragraph',
86
+ html: 'Il <strong>PNG</strong> rimane il formato giusto quando la compatibilità è fondamentale: strumenti di progettazione come Photoshop o Figma, flussi di lavoro di stampa, applicazioni desktop legacy o qualsiasi contesto in cui il supporto WebP non è garantito. È anche il formato ideale per salvare i livelli di lavoro nelle pipeline di editing, poiché la sua compressione senza perdita preserva ogni pixel. Il costo: file che possono pesare 3-8 volte più dei loro equivalenti WebP.',
87
+ },
88
+ {
89
+ type: 'paragraph',
90
+ html: 'Il <strong>WebP</strong> è il sostituto naturale del PNG per tutti i moderni contenuti web. Chrome, Firefox, Safari ed Edge lo supportano tutti nativamente. Un\'immagine WebP senza perdita è più piccola del 26% rispetto al PNG equivalente; in modalità lossy può essere fino al 40% più piccola con una qualità visiva praticamente indistinguibile. E fondamentale per il web design: <strong>WebP preserva la trasparenza alfa</strong> esattamente come il PNG, senza compromessi visivi.',
91
+ },
92
+ {
93
+ type: 'title',
94
+ text: 'Confronto: Conversione Locale vs Cloud',
95
+ level: 3,
96
+ },
97
+ {
98
+ type: 'comparative',
99
+ items: [
100
+ {
101
+ title: 'Convertitori Cloud',
102
+ description: 'Strumenti che caricano i tuoi file su un server remoto.',
103
+ icon: 'mdi:cloud-upload',
104
+ pointIcon: 'mdi:close-circle-outline',
105
+ points: [
106
+ 'Latenza di rete durante il caricamento e il download',
107
+ 'I tuoi loghi e immagini memorizzati su server di terze parti',
108
+ 'Limiti di dimensione dei file e tetti di conversione giornalieri',
109
+ 'Annunci intrusivi e tracker di terze parti',
110
+ ],
111
+ },
112
+ {
113
+ title: 'La Nostra Architettura Locale',
114
+ description: 'Elaborazione diretta sul tuo hardware utilizzando la tecnologia Vanilla JS.',
115
+ icon: 'mdi:laptop-mac',
116
+ highlight: true,
117
+ points: [
118
+ 'Velocità istantanea — latenza di rete zero',
119
+ 'Privacy completa — 0 byte inviati esternamente',
120
+ 'Nessun limite di MB o restrizioni sul numero di file',
121
+ 'Interfaccia pulita, senza pubblicità o tracciamento',
122
+ ],
123
+ },
124
+ ],
125
+ },
126
+ {
127
+ type: 'title',
128
+ text: 'Come funziona tecnicamente',
129
+ level: 3,
130
+ },
131
+ {
132
+ type: 'paragraph',
133
+ html: 'Il PNG viene caricato localmente e decodificato in un <strong>HTML5 Canvas</strong> in memoria. L\'API Canvas preserva il canale alfa del PNG originale: tutti i pixel trasparenti e semitrasparenti vengono mantenuti intatti nel buffer di pixel RGBA. Il canvas viene quindi esportato chiamando <code>toDataURL(\'image/webp\')</code>, che applica il codec WebP del browser (basato sulla libreria libwebp di Google) per generare un file più compatto senza alterare i dati di trasparenza.',
134
+ },
135
+ {
136
+ type: 'paragraph',
137
+ html: 'WebP utilizza due modalità di compressione: modalità senza perdita per immagini in cui ogni pixel deve essere esattamente fedele all\'originale, e modalità con perdita per foto ed elementi in cui piccole differenze sono impercettibili. La modalità senza perdita produce file più piccoli del 26% rispetto al PNG; la modalità con perdita può ottenere riduzioni fino al 40% rispetto al PNG mantenendo un\'eccellente qualità visiva.',
138
+ },
139
+ {
140
+ type: 'tip',
141
+ title: 'Suggerimento: WebP batte sia PNG che JPG sul web',
142
+ html: 'Il WebP in modalità senza perdita è più piccolo del PNG. Il WebP in modalità con perdita è più piccolo del JPG. Questo rende il WebP l\'<strong>unico formato che sostituisce entrambi</strong> nel contesto web. Converti i tuoi PNG trasparenti in WebP prima di caricarli: Google PageSpeed Insights lo rileva e lo valuta positivamente negli audit "Distribuisci immagini in formati moderni".',
143
+ },
144
+ {
145
+ type: 'title',
146
+ text: 'Casi d\'uso e compatibilità',
147
+ level: 3,
148
+ },
149
+ {
150
+ type: 'list',
151
+ icon: 'mdi:check-circle',
152
+ items: [
153
+ 'Loghi e icone con sfondi trasparenti per siti web e app.',
154
+ 'Immagini prodotto con sfondi scontornati nei negozi e-commerce.',
155
+ 'Sprite CSS ed elementi UI con trasparenza alfa.',
156
+ 'Illustrazioni rasterizzate e grafica vettoriale per landing page.',
157
+ 'Miniature di articoli con sfondi trasparenti in blog e portali di notizie.',
158
+ ],
159
+ },
160
+ {
161
+ type: 'title',
162
+ text: 'Conclusione',
163
+ level: 3,
164
+ },
165
+ {
166
+ type: 'paragraph',
167
+ html: 'Il passaggio da PNG a WebP è l\'ottimizzazione delle immagini web più completa disponibile: ottieni file più leggeri, preservi la trasparenza e migliori le metriche dei Core Web Vitals senza cambiare nulla del tuo design visivo. Questo strumento lo fa istantaneamente, gratuitamente e in modo completamente privato: le tue immagini vengono elaborate nel tuo browser e non viaggiano mai verso alcun server esterno.',
168
+ },
169
+ ];
170
+
171
+
172
+ export const content: PngAWebpLocaleContent = {
173
+ slug,
174
+ title,
175
+ description,
176
+ ui,
177
+ seo,
178
+ faq,
179
+ bibliography,
180
+ howTo,
181
+ schemas: generateSchemas({ title, description, inLanguage: 'it', faq, howTo }),
182
+ };