@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,178 @@
1
+ import type { ImageConverterUI } from '../../../shared/ImageConverter.astro';
2
+ import { generateSchemas } from '../../../shared/logic/schemas';
3
+ import type { JpgAPngLocaleContent } from '../index';
4
+
5
+ const slug = 'convert-jpg-to-png';
6
+ const title = 'JPG를 PNG로 온라인 무료 변환';
7
+ const description =
8
+ '파일 업로드 없이 브라우저에서 JPG 이미지를 PNG로 변환하세요. 로컬에서 처리되는 무손실 변환으로 무료이며 100% 안전합니다.';
9
+
10
+ const ui: ImageConverterUI = {
11
+ dragText: 'JPG 파일을 끌어다 놓으세요...',
12
+ convertText: '즉시 PNG로 변환합니다',
13
+ selectFiles: '파일 선택',
14
+ processedFiles: '처리된 파일',
15
+ downloadAll: '모두 다운로드 (.zip)',
16
+ pending: '대기 중',
17
+ bibliographyTitle: '참고 문헌',
18
+ faqTitle: '자주 묻는 질문',
19
+ };
20
+
21
+ const faq: JpgAPngLocaleContent['faq'] = [
22
+ {
23
+ question: '언제 JPG에서 PNG로 변환해야 하나요?',
24
+ answer:
25
+ '사진 내의 텍스트나 로고를 편집하려는 경우 필수입니다. JPG를 여러 번 저장하면 노이즈가 발생하지만, PNG는 압축을 고정하여 화질 저하를 방지합니다.',
26
+ },
27
+ {
28
+ question: 'PNG 파일로 변환하면 즉시 배경이 투명해지나요?',
29
+ answer:
30
+ '아니요. 원본 JPG는 평면 구조이며 투명 채널이 없습니다. 변환된 PNG는 투명 채널을 지원하는 컨테이너 역할을 하며, 이후 포토샵 등을 통해 배경을 제거해야 합니다.',
31
+ },
32
+ {
33
+ question: '이 웹사이트에 트래픽 제한이 있나요?',
34
+ answer:
35
+ '클라우드 의존성이 없는 Edge 기술을 사용하므로 변환 용량에 제한이 없습니다. 모든 작업은 사용자의 컴퓨터나 모바일 기기 내에서만 이루어집니다.',
36
+ },
37
+ ];
38
+
39
+ const howTo: JpgAPngLocaleContent['howTo'] = [
40
+ {
41
+ name: 'JPG를 패널로 드래그',
42
+ text: '마우스나 파일 선택기를 사용하여 JPG 형식의 정지 이미지를 업로드하세요.',
43
+ },
44
+ {
45
+ name: '무손실 처리',
46
+ text: '당사 소프트웨어는 이미지 비트를 PNG 패밀리 고유의 무손실 래퍼로 안전하게 보냅니다.',
47
+ },
48
+ {
49
+ name: '세션 종료',
50
+ text: '패널을 클릭하면 브라우저가 다운로드된 웹 에셋을 사용자의 다운로드 폴더에 저장합니다.',
51
+ },
52
+ ];
53
+
54
+ const bibliography: JpgAPngLocaleContent['bibliography'] = [
55
+ {
56
+ name: 'The W3C PNG Graphics',
57
+ url: 'https://www.w3.org/Graphics/PNG/',
58
+ },
59
+ {
60
+ name: 'Understanding Digital Image Compression',
61
+ url: 'https://en.wikipedia.org/wiki/Image_compression',
62
+ },
63
+ ];
64
+
65
+ const seo: JpgAPngLocaleContent['seo'] = [
66
+ {
67
+ type: 'title',
68
+ text: 'JPG to PNG 변환기: 무손실 편집과 투명도 지원',
69
+ level: 2,
70
+ },
71
+ {
72
+ type: 'paragraph',
73
+ html: '<strong>JPG</strong>는 카메라 사진에는 최적이지만 약점이 있습니다. 파일을 저장할 때마다 손실 압축이 다시 적용되어 가장자리와 그라데이션이 점진적으로 저하됩니다. <strong>PNG</strong>는 무손실 압축을 사용하여 저장 후에도 픽셀이 변하지 않습니다. JPG를 PNG로 변환하는 것은 집중적인 편집을 준비하거나, 투명 배경을 추가하거나, 여러 번 저장이 필요한 디자인 워크플로우를 위해 필수적인 과정입니다.',
74
+ },
75
+ {
76
+ type: 'title',
77
+ text: 'JPG vs PNG: 출력 형식 선택 가이드',
78
+ level: 3,
79
+ },
80
+ {
81
+ type: 'paragraph',
82
+ html: '<strong>JPG</strong>는 사진의 왕입니다. 용량이 작고 모든 기기와 호환됩니다. 하지만 편집과 재저장을 반복할 때마다 압축 노이즈가 축적됩니다. 이미지를 반복적으로 자르거나, 보정하거나, 텍스트를 추가해야 한다면 JPG에서 시작할 경우 주기마다 화질 저하가 발생합니다. 또한 JPG는 알파 채널이 없어 투명 배경이 불가능하므로 로고나 UI 요소에는 부적합합니다.',
83
+ },
84
+ {
85
+ type: 'paragraph',
86
+ html: '<strong>PNG</strong>는 기업 로고, 선명한 텍스트가 포함된 스크린샷, 제품 이미지 등 여러 번 편집될 그래픽 리소스에 적합합니다. 무손실 압축은 텍스트 가장자리를 완벽하게 정의하고, JPEG 노이즈 없이 원색을 순수하게 유지해 줍니다.',
87
+ },
88
+ {
89
+ type: 'title',
90
+ text: '비교: 로컬 변환 vs 클라우드 서비스',
91
+ level: 3,
92
+ },
93
+ {
94
+ type: 'comparative',
95
+ items: [
96
+ {
97
+ title: '클라우드 변환기',
98
+ description: '파일을 원격 서버로 업로드하여 처리하는 도구입니다.',
99
+ icon: 'mdi:cloud-upload',
100
+ pointIcon: 'mdi:close-circle-outline',
101
+ points: [
102
+ '업로드 및 다운로드 시 발생하는 네트워크 지연',
103
+ '사용자의 이미지가 외부 서버에 남을 수 있음',
104
+ '용량 및 일일 변환 횟수 제한',
105
+ '불필요한 광고 및 타사 추적기 포함',
106
+ ],
107
+ },
108
+ {
109
+ title: '당사의 로컬 아키텍처',
110
+ description: 'Vanilla JS 기술을 통해 사용자의 하드웨어에서 직접 처리합니다.',
111
+ icon: 'mdi:laptop-mac',
112
+ highlight: true,
113
+ points: [
114
+ '실시간 속도 — 네트워크 지연 제로',
115
+ '철저한 프라이버시 — 외부로 0바이트 전송',
116
+ '용량 및 파일 개수 제한 없음',
117
+ '광고나 추적이 없는 깨끗한 인터페이스',
118
+ ],
119
+ },
120
+ ],
121
+ },
122
+ {
123
+ type: 'title',
124
+ text: '기술적인 작동 방식',
125
+ level: 3,
126
+ },
127
+ {
128
+ type: 'paragraph',
129
+ html: '처리는 순수하게 로컬에서 이루어집니다. 브라우저는 선택한 JPG로 <strong>Blob</strong>을 생성하고 메모리 내 <strong>HTML5 Canvas</strong>에 그립니다. 렌더링이 완료되면 <code>toDataURL(\'image/png\')</code>이 호출되며, 브라우저에 내장된 PNG 코덱이 새로운 손실 압축 없이 각 픽셀을 다시 인코딩합니다. 결과물은 JPG의 현재 상태를 충실히 보존하며, 더 이상의 화질 저하를 방지합니다.',
130
+ },
131
+ {
132
+ type: 'paragraph',
133
+ html: '생성된 PNG는 전문 도구에서 사용하는 무손실 DEFLATE 압축을 사용합니다. 정보를 버리지 않고 모든 픽셀을 저장하기 때문에 용량은 원래 JPG보다 커집니다(보통 2~5배). 이는 무한한 화질 보존과 편집 가능성에 대한 대가입니다.',
134
+ },
135
+ {
136
+ type: 'tip',
137
+ title: '중요: PNG는 손실된 화질을 복구하지 않습니다',
138
+ html: 'JPG를 PNG로 변환한다고 해서 원본 JPEG 압축 중에 <strong>손실된 화질이 복구되는 것은 아닙니다</strong>. JPG에 이미 노이즈가 있었다면 PNG는 이를 그대로 유지하며, 단지 더 이상의 노이즈가 추가되지 않도록 할 뿐입니다. 변환은 향후 편집 과정에서 더 이상 화질이 나빠지지 않도록 현재 상태를 "고정"하는 것으로 이해하세요.',
139
+ },
140
+ {
141
+ type: 'title',
142
+ text: '사용 사례 및 호환성',
143
+ level: 3,
144
+ },
145
+ {
146
+ type: 'list',
147
+ icon: 'mdi:check-circle',
148
+ items: [
149
+ '배경 제거 후 투명 배경이 필요한 로고 및 브랜드 에셋.',
150
+ '텍스트가 포함되어 반복적인 편집과 재저장이 필요한 스크린샷.',
151
+ '깔끔한 배경이 필요한 이커머스용 제품 이미지.',
152
+ '파워포인트 또는 구글 슬라이드 발표용 그래픽 리소스.',
153
+ '가장자리의 선명도가 중요한 웹 및 모바일 앱용 UI 에셋.',
154
+ ],
155
+ },
156
+ {
157
+ type: 'title',
158
+ text: '결론',
159
+ level: 3,
160
+ },
161
+ {
162
+ type: 'paragraph',
163
+ html: 'JPG에서 PNG로의 변환은 전문적인 디자인 작업의 첫 번째 단계입니다. 원본 화질을 높여주지는 않지만, 향후 편집으로부터 모든 픽셀을 보호합니다. 이 도구를 사용하면 이미지가 외부로 유출되지 않고 즉각적이고 안전하게 작업을 완료할 수 있습니다.',
164
+ },
165
+ ];
166
+
167
+
168
+ export const content: JpgAPngLocaleContent = {
169
+ slug,
170
+ title,
171
+ description,
172
+ ui,
173
+ seo,
174
+ faq,
175
+ bibliography,
176
+ howTo,
177
+ schemas: generateSchemas({ title, description, inLanguage: 'ko', faq, howTo }),
178
+ };
@@ -0,0 +1,178 @@
1
+ import type { ImageConverterUI } from '../../../shared/ImageConverter.astro';
2
+ import { generateSchemas } from '../../../shared/logic/schemas';
3
+ import type { JpgAPngLocaleContent } from '../index';
4
+
5
+ const slug = 'jpg-naar-png-converter';
6
+ const title = 'JPG naar PNG Online en Gratis Converteren';
7
+ const description =
8
+ 'Converteer JPG-afbeeldingen naar PNG in je browser zonder bestanden te uploaden. Lossless conversie, gratis en volledig privé.';
9
+
10
+ const ui: ImageConverterUI = {
11
+ dragText: 'Sleep JPG-bestanden hierheen...',
12
+ convertText: 'Om ze direct naar PNG te converteren',
13
+ selectFiles: 'Bestanden selecteren',
14
+ processedFiles: 'Verwerkte bestanden',
15
+ downloadAll: 'Alles downloaden (.zip)',
16
+ pending: 'In afwachting',
17
+ bibliographyTitle: 'Bibliografische Referenties',
18
+ faqTitle: 'Veelgestelde Vragen',
19
+ };
20
+
21
+ const faq: JpgAPngLocaleContent['faq'] = [
22
+ {
23
+ question: 'Wanneer moet ik JPG naar PNG gebruiken?',
24
+ answer:
25
+ 'Altijd wanneer je tekst of logo\'s binnen een foto gaat bewerken. Als je een JPG meerdere keren opslaat, wordt deze "vies". PNG bevriest de compressie.',
26
+ },
27
+ {
28
+ question: 'Zal het PNG-bestand onmiddellijk een transparante achtergrond hebben?',
29
+ answer:
30
+ 'Nee. De originele JPG was plat en zonder dat type structureel kanaal. De resulterende PNG bereidt die container voor; daarna moet je het element isoleren met Photoshop of een andere editor.',
31
+ },
32
+ {
33
+ question: 'Heeft deze website verkeerslimieten?',
34
+ answer:
35
+ 'Dankzij Edge-technologieën zonder cloud-afhankelijkheden zijn er geen limieten omdat het volledig gebruikmaakt van je eigen computer of mobiele telefoon.',
36
+ },
37
+ ];
38
+
39
+ const howTo: JpgAPngLocaleContent['howTo'] = [
40
+ {
41
+ name: 'Sleep JPG naar het paneel',
42
+ text: 'Upload statische afbeeldingen in JPG-formaat via de muis of de computer-selector.',
43
+ },
44
+ {
45
+ name: 'Lossless Uitvoering',
46
+ text: 'De Vanilla-software duwt de bits van het beeld naar een lossless omhulsel dat eigen is aan de PNG-familie.',
47
+ },
48
+ {
49
+ name: 'Sessie Beëindigen',
50
+ text: 'Klik op het paneel en je browser plaatst de gedownloade webbestanden in je gebruikersmappen.',
51
+ },
52
+ ];
53
+
54
+ const bibliography: JpgAPngLocaleContent['bibliography'] = [
55
+ {
56
+ name: 'The W3C PNG Graphics',
57
+ url: 'https://www.w3.org/Graphics/PNG/',
58
+ },
59
+ {
60
+ name: 'Understanding Digital Image Compression',
61
+ url: 'https://en.wikipedia.org/wiki/Image_compression',
62
+ },
63
+ ];
64
+
65
+ const seo: JpgAPngLocaleContent['seo'] = [
66
+ {
67
+ type: 'title',
68
+ text: 'JPG naar PNG Converter: Verliesvrije Bewerking en Transparantie',
69
+ level: 2,
70
+ },
71
+ {
72
+ type: 'paragraph',
73
+ html: '<strong>JPG</strong> is onverslaanbaar voor camerafoto\'s, maar heeft een zwakke plek: elke keer dat je het bestand opslaat, wordt de compressie met verlies opnieuw toegepast, waardoor randen en gradiënten progressief verslechteren. <strong>PNG</strong> gebruikt verliesvrije compressie — eenmaal opgeslagen, zijn de pixels onveranderlijk. JPG naar PNG converteren is de sleuteloperatie wanneer je een afbeelding moet voorbereiden voor intensieve bewerking, een transparante achtergrond wilt toevoegen of deze wilt integreren in een ontwerpproces dat meerdere keren opslaan vereist.',
74
+ },
75
+ {
76
+ type: 'title',
77
+ text: 'JPG of PNG? Wanneer welk formaat te gebruiken',
78
+ level: 3,
79
+ },
80
+ {
81
+ type: 'paragraph',
82
+ html: '<strong>JPG</strong> is de koning van de fotografie: kleine bestanden, compatibel met alles. Maar de compressie-artefacten stapelen zich op bij elke bewerking en keer opslaan. Als je herhaaldelijk een afbeelding moet bijsnijden, retoucheren of tekst moet toevoegen, betekent beginnen met JPG dat je in elke cyclus verslechtering introduceert. Bovendien mist JPG het alfakanaal: het kan geen transparante achtergronden hebben, wat het ongeschikt maakt voor logo\'s, iconen en UI-elementen.',
83
+ },
84
+ {
85
+ type: 'paragraph',
86
+ html: '<strong>PNG</strong> is de juiste keuze voor bedrijfslogo\'s, screenshots met scherpe tekst, interface-elementen, productafbeeldingen met een witte achtergrond die je later moet uitsnijden, of elke grafische bron die meer dan eens bewerkt zal worden. De verliesvrije compressie garandeert dat de randen van tekst perfect gedefinieerd blijven en dat egale kleuren zuiver blijven, zonder JPEG-ruis.',
87
+ },
88
+ {
89
+ type: 'title',
90
+ text: 'Vergelijking: Lokale Conversie vs Cloud',
91
+ level: 3,
92
+ },
93
+ {
94
+ type: 'comparative',
95
+ items: [
96
+ {
97
+ title: 'Cloud Converters',
98
+ description: 'Tools die je bestanden naar een externe server uploaden.',
99
+ icon: 'mdi:cloud-upload',
100
+ pointIcon: 'mdi:close-circle-outline',
101
+ points: [
102
+ 'Netwerklatentie bij upload en download',
103
+ 'Je afbeeldingen blijven op externe servers staan',
104
+ 'Limieten voor bestandsgrootte en dagelijkse conversies',
105
+ 'Opdringerige advertenties en trackers van derden',
106
+ ],
107
+ },
108
+ {
109
+ title: 'Onze Lokale Architectuur',
110
+ description: 'Directe verwerking op je eigen hardware via Vanilla JS-technologie.',
111
+ icon: 'mdi:laptop-mac',
112
+ highlight: true,
113
+ points: [
114
+ 'Directe snelheid — nul netwerklatentie',
115
+ 'Volledige privacy — 0 bytes naar buiten verzonden',
116
+ 'Geen MB-limieten of beperkingen op aantal bestanden',
117
+ 'Schone interface, zonder advertenties of tracking',
118
+ ],
119
+ },
120
+ ],
121
+ },
122
+ {
123
+ type: 'title',
124
+ text: 'Hoe het technisch werkt',
125
+ level: 3,
126
+ },
127
+ {
128
+ type: 'paragraph',
129
+ html: 'Het proces is puur lokaal: de browser maakt een <strong>Blob</strong> met de geselecteerde JPG en tekent deze op een <strong>HTML5 Canvas</strong> in het geheugen. Eenmaal gerenderd, wordt <code>toDataURL(\'image/png\')</code> aangeroepen — de in de browser geïntegreerde PNG-codec hercodeert elke pixel zonder nieuwe compressie met verlies toe te passen. Het resultaat is een PNG die de huidige staat van de JPG natuurgetrouw bewaart: niet beter en niet slechter, gewoon bevroren.',
130
+ },
131
+ {
132
+ type: 'paragraph',
133
+ html: 'De resulterende PNG gebruikt verliesvrije DEFLATE-compressie, dezelfde die professionele tools zoals Photoshop of GIMP gebruiken. De grootte zal groter zijn dan de originele JPG — meestal tussen 2 en 5 keer — omdat het alle pixels opslaat zonder informatie weg te gooien. Dat is de prijs voor trouw en oneindige bewerkbaarheid.',
134
+ },
135
+ {
136
+ type: 'tip',
137
+ title: 'Belangrijk: PNG herstelt de JPEG kwaliteit niet',
138
+ html: 'Een JPG naar PNG converteren <strong>herstelt de verloren kwaliteit niet</strong> die tijdens de originele JPEG-compressie is verloren gegaan. Als je JPG al blok-artefacten of kleurruis had, zal de PNG deze intact houden — het voorkomt simpelweg dat er meer wordt toegevoegd. Zie de conversie als het "bevriezen" van de huidige staat van de afbeelding zodat toekomstige bewerkingen deze niet verder verslechteren.',
139
+ },
140
+ {
141
+ type: 'title',
142
+ text: 'Gebruiksscenario\'s en compatibiliteit',
143
+ level: 3,
144
+ },
145
+ {
146
+ type: 'list',
147
+ icon: 'mdi:check-circle',
148
+ items: [
149
+ 'Logo\'s en branding-elementen die een transparante achtergrond nodig hebben na het uitsnijden.',
150
+ 'Screenshots met tekst die meerdere keren bewerkt en opnieuw opgeslagen zullen worden.',
151
+ 'Productafbeeldingen voor e-commerce die een schone en uitsnijdbare witte achtergrond vereisen.',
152
+ 'Grafische bronnen voor PowerPoint- of Google Slides-presentaties.',
153
+ 'UI-assets voor web- en mobiele apps waar de scherpte van de randen kritisch is.',
154
+ ],
155
+ },
156
+ {
157
+ type: 'title',
158
+ text: 'Conclusie',
159
+ level: 3,
160
+ },
161
+ {
162
+ type: 'paragraph',
163
+ html: 'De conversie van JPG naar PNG is de eerste stap in elke serieuze ontwerpworkflow. Het transformeert de originele kwaliteit niet, maar beschermt elke pixel tegen toekomstige bewerkingen. Met deze tool gebeurt het proces onmiddellijk en volledig privé, zonder dat je zakelijke of persoonlijke afbeeldingen je apparaat verlaten.',
164
+ },
165
+ ];
166
+
167
+
168
+ export const content: JpgAPngLocaleContent = {
169
+ slug,
170
+ title,
171
+ description,
172
+ ui,
173
+ seo,
174
+ faq,
175
+ bibliography,
176
+ howTo,
177
+ schemas: generateSchemas({ title, description, inLanguage: 'nl', faq, howTo }),
178
+ };
@@ -0,0 +1,178 @@
1
+ import type { ImageConverterUI } from '../../../shared/ImageConverter.astro';
2
+ import { generateSchemas } from '../../../shared/logic/schemas';
3
+ import type { JpgAPngLocaleContent } from '../index';
4
+
5
+ const slug = 'konwerter-jpg-na-png';
6
+ const title = 'Konwertuj JPG na PNG Online i Za Darmo';
7
+ const description =
8
+ 'Konwertuj obrazy JPG na PNG w swojej przeglądarce bez przesyłania plików. Konwersja bezstratna, darmowa i całkowicie prywatna.';
9
+
10
+ const ui: ImageConverterUI = {
11
+ dragText: 'Przeciągnij pliki JPG...',
12
+ convertText: 'Aby błyskawicznie konwertować je na PNG',
13
+ selectFiles: 'Wybierz pliki',
14
+ processedFiles: 'Przetworzone pliki',
15
+ downloadAll: 'Pobierz wszystko (.zip)',
16
+ pending: 'Oczekiwanie',
17
+ bibliographyTitle: 'Bibliografia',
18
+ faqTitle: 'Często zadawane pytania',
19
+ };
20
+
21
+ const faq: JpgAPngLocaleContent['faq'] = [
22
+ {
23
+ question: 'Kiedy powinienem używać konwersji z JPG na PNG?',
24
+ answer:
25
+ 'Zawsze wtedy, gdy zamierzasz edytować tekst lub logo na zdjęciu. Jeśli zapisujesz JPG kilka razy, staje się on "brudny". PNG zamraża kompresję.',
26
+ },
27
+ {
28
+ question: 'Czy plik PNG będzie miał od razu przezroczyste tło?',
29
+ answer:
30
+ 'Nie. Oryginalny plik JPG był płaski i nie posiadał tego typu kanału strukturalnego. Wynikowy plik PNG przygotuje ten kontener, a następnie będziesz musiał wyodrębnić element za pomocą Photoshopa lub innego edytora.',
31
+ },
32
+ {
33
+ question: 'Czy ta strona ma limity ruchu?',
34
+ answer:
35
+ 'Dzięki technologiom Edge bez zależności w chmurze, rozmiar Twojej konwersji nie nakłada żadnych limitów, ponieważ w całości wykorzystuje Twój komputer lub telefon komórkowy.',
36
+ },
37
+ ];
38
+
39
+ const howTo: JpgAPngLocaleContent['howTo'] = [
40
+ {
41
+ name: 'Przeciągnij JPG do panelu',
42
+ text: 'Prześlij statyczne obrazy w formacie JPG za pomocą myszy lub selektora plików w komputerze.',
43
+ },
44
+ {
45
+ name: 'Bezstratne wykonanie',
46
+ text: 'Oprogramowanie Vanilla wypycha bity obrazu do bezstratnego opakowania natywnego dla rodziny PNG.',
47
+ },
48
+ {
49
+ name: 'Zakończ sesję',
50
+ text: 'Kliknij panel, a Twoja przeglądarka zapisze pobrane zasoby internetowe w Twoich folderach użytkownika.',
51
+ },
52
+ ];
53
+
54
+ const bibliography: JpgAPngLocaleContent['bibliography'] = [
55
+ {
56
+ name: 'The W3C PNG Graphics',
57
+ url: 'https://www.w3.org/Graphics/PNG/',
58
+ },
59
+ {
60
+ name: 'Understanding Digital Image Compression',
61
+ url: 'https://en.wikipedia.org/wiki/Image_compression',
62
+ },
63
+ ];
64
+
65
+ const seo: JpgAPngLocaleContent['seo'] = [
66
+ {
67
+ type: 'title',
68
+ text: 'Konwerter JPG na PNG: Edycja bezstratna i przezroczystość',
69
+ level: 2,
70
+ },
71
+ {
72
+ type: 'paragraph',
73
+ html: 'Format <strong>JPG</strong> jest bezkonkurencyjny w przypadku zdjęć z aparatu, ale ma słaby punkt: za każdym razem, gdy zapisujesz plik, ponownie stosowana jest kompresja stratna, co stopniowo pogarsza krawędzie i gradienty. <strong>PNG</strong> wykorzystuje kompresję bezstratną — raz zapisane piksele są niezmienne. Konwersja JPG na PNG to kluczowa operacja, gdy musisz przygotować obraz do intensywnej edycji, dodać przezroczyste tło lub zintegrować go z procesem projektowania wymagającym wielokrotnego zapisywania.',
74
+ },
75
+ {
76
+ type: 'title',
77
+ text: 'JPG czy PNG? Kiedy używać każdego formatu',
78
+ level: 3,
79
+ },
80
+ {
81
+ type: 'paragraph',
82
+ html: '<strong>JPG</strong> to król fotografii: mała waga, kompatybilność ze wszystkim. Jednak artefakty kompresji kumulują się przy każdej edycji i ponownym zapisie. Jeśli musisz wielokrotnie przycinać, retuszować lub dodawać tekst do obrazu, rozpoczęcie od JPG oznacza wprowadzanie pogorszenia jakości w każdym cyklu. Ponadto JPG nie posiada kanału alfa: nie może mieć przezroczystego tła, co dyskwalifikuje go w przypadku logo, ikon i elementów interfejsu użytkownika.',
83
+ },
84
+ {
85
+ type: 'paragraph',
86
+ html: '<strong>PNG</strong> to właściwy wybór dla logo firmowych, zrzutów ekranu z ostrym tekstem, elementów interfejsu, zdjęć produktów z białym tłem, które będziesz musiał później wyciąć, lub wszelkich zasobów graficznych, które będą edytowane więcej niż raz. Kompresja bezstratna gwarantuje, że krawędzie tekstu pozostają idealnie zdefiniowane, a jednolite kolory pozostają czyste, bez szumu JPEG.',
87
+ },
88
+ {
89
+ type: 'title',
90
+ text: 'Porównanie: Konwersja Lokalna kontra Chmurowa',
91
+ level: 3,
92
+ },
93
+ {
94
+ type: 'comparative',
95
+ items: [
96
+ {
97
+ title: 'Konwertery w chmurze',
98
+ description: 'Narzędzia przesyłające Twoje pliki na zdalny serwer.',
99
+ icon: 'mdi:cloud-upload',
100
+ pointIcon: 'mdi:close-circle-outline',
101
+ points: [
102
+ 'Opóźnienia sieciowe przy przesyłaniu i pobieraniu',
103
+ 'Twoje obrazy pozostają na serwerach innych osób',
104
+ 'Limity rozmiaru i dziennej liczby konwersji',
105
+ 'Intruzywne reklamy i trackery stron trzecich',
106
+ ],
107
+ },
108
+ {
109
+ title: 'Nasza lokalna architektura',
110
+ description: 'Przetwarzanie bezpośrednio na Twoim sprzęcie za pomocą technologii Vanilla JS.',
111
+ icon: 'mdi:laptop-mac',
112
+ highlight: true,
113
+ points: [
114
+ 'Natychmiastowa prędkość — zero opóźnień sieciowych',
115
+ 'Całkowita prywatność — 0 bajtów wysłanych na zewnątrz',
116
+ 'Brak limitów MB i liczby plików',
117
+ 'Czysty interfejs, bez reklam i śledzenia',
118
+ ],
119
+ },
120
+ ],
121
+ },
122
+ {
123
+ type: 'title',
124
+ text: 'Jak to działa technicznie',
125
+ level: 3,
126
+ },
127
+ {
128
+ type: 'paragraph',
129
+ html: 'Proces jest czysto lokalny: przeglądarka tworzy <strong>Blob</strong> z wybranym JPG i rysuje go na <strong>HTML5 Canvas</strong> w pamięci. Po wyrenderowaniu wywoływana jest funkcja <code>toDataURL(\'image/png\')</code> — zintegrowany z przeglądarką kodek PNG ponownie koduje każdy piksel bez stosowania żadnej nowej kompresji stratnej. Wynikiem jest plik PNG, który wiernie zachowuje obecny stan JPG: ani lepszy, ani gorszy, po prostu zamrożony.',
130
+ },
131
+ {
132
+ type: 'paragraph',
133
+ html: 'Wynikowy plik PNG będzie wykorzystywał bezstratną kompresję DEFLATE, taką samą jak w profesjonalnych narzędziach takich jak Photoshop czy GIMP. Jego rozmiar będzie większy niż oryginalnego JPG — zazwyczaj od 2 do 5 razy — ponieważ przechowuje wszystkie piksele bez odrzucania informacji. To cena za wierność i nieskończone możliwości edycji.',
134
+ },
135
+ {
136
+ type: 'tip',
137
+ title: 'Ważne: PNG nie przywraca jakości JPEG',
138
+ html: 'Konwersja z JPG na PNG <strong>nie przywraca jakości utraconej</strong> podczas oryginalnej kompresji JPEG. Jeśli Twój JPG posiadał już artefakty blokowe lub szum kolorów, PNG zachowa je w stanie nienaruszonym — po prostu zapobiega dodawaniu kolejnych. Myśl o konwersji jako o "zamrożeniu" obecnego stanu obrazu, tak aby przyszłe edycje nie degradowały go bardziej.',
139
+ },
140
+ {
141
+ type: 'title',
142
+ text: 'Przypadki użycia i kompatybilność',
143
+ level: 3,
144
+ },
145
+ {
146
+ type: 'list',
147
+ icon: 'mdi:check-circle',
148
+ items: [
149
+ 'Logo i elementy marki wymagające przezroczystego tła po wycięciu.',
150
+ 'Zrzuty ekranu z tekstem, które będą edytowane i ponownie zapisywane kilka razy.',
151
+ 'Zdjęcia produktów dla e-commerce wymagające czystego i dającego się wyciąć białego tła.',
152
+ 'Zasoby graficzne do prezentacji PowerPoint lub Google Slides.',
153
+ 'Elementy interfejsu dla aplikacji internetowych i mobilnych, gdzie ostrość krawędzi jest krytyczna.',
154
+ ],
155
+ },
156
+ {
157
+ type: 'title',
158
+ text: 'Podsumowanie',
159
+ level: 3,
160
+ },
161
+ {
162
+ type: 'paragraph',
163
+ html: 'Konwersja JPG na PNG to pierwszy krok w każdym poważnym procesie projektowania. Nie transformuje oryginalnej jakości, ale chroni każdy piksel przed przyszłymi edycjami. Dzięki temu narzędziu proces odbywa się natychmiastowo i całkowicie prywatnie, bez przesyłania Twoich obrazów firmowych lub osobistych z Twojego urządzenia.',
164
+ },
165
+ ];
166
+
167
+
168
+ export const content: JpgAPngLocaleContent = {
169
+ slug,
170
+ title,
171
+ description,
172
+ ui,
173
+ seo,
174
+ faq,
175
+ bibliography,
176
+ howTo,
177
+ schemas: generateSchemas({ title, description, inLanguage: 'pl', faq, howTo }),
178
+ };