@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 = 'conversor-jpg-para-png';
6
+ const title = 'Converter JPG para PNG Online e Grátis';
7
+ const description =
8
+ 'Converta imagens JPG para PNG no seu navegador sem carregar ficheiros. Conversão lossless, gratuita e totalmente privada.';
9
+
10
+ const ui: ImageConverterUI = {
11
+ dragText: 'Arraste os ficheiros JPG...',
12
+ convertText: 'Para convertê-los para PNG instantaneamente',
13
+ selectFiles: 'Selecionar ficheiros',
14
+ processedFiles: 'Ficheiros processados',
15
+ downloadAll: 'Descarregar Tudo (.zip)',
16
+ pending: 'Pendente',
17
+ bibliographyTitle: 'Referências Bibliográficas',
18
+ faqTitle: 'Perguntas Frequentes',
19
+ };
20
+
21
+ const faq: JpgAPngLocaleContent['faq'] = [
22
+ {
23
+ question: 'Quando devo usar JPG para PNG?',
24
+ answer:
25
+ 'Sempre que for editar texto ou logótipos dentro de uma fotografia. Se guardar um JPG várias vezes, este degrada-se. O PNG congela a compressão.',
26
+ },
27
+ {
28
+ question: 'O ficheiro PNG terá o fundo transparente imediatamente?',
29
+ answer:
30
+ 'Não. O JPG original vinha plano e sem esse tipo de canal estrutural. O PNG resultante preparará esse contentor, depois deverá isolar a peça usando o Photoshop ou outro editor.',
31
+ },
32
+ {
33
+ question: 'Este site tem limites de tráfego?',
34
+ answer:
35
+ 'Graças a tecnologias Edge sem dependências cloud, o peso da sua conversão não supõe limites porque usa integralmente o seu terminal informático ou móvel.',
36
+ },
37
+ ];
38
+
39
+ const howTo: JpgAPngLocaleContent['howTo'] = [
40
+ {
41
+ name: 'Arraste JPG para o painel',
42
+ text: 'Carregue imagens estáticas em formato JPG usando o rato táctil ou o seletor do computador.',
43
+ },
44
+ {
45
+ name: 'Execução Lossless',
46
+ text: 'O software Vanilla empurra os bits do quadro para um invólucro sem perdas nativo da família PNG.',
47
+ },
48
+ {
49
+ name: 'Terminar Sessão',
50
+ text: 'Pressione o painel e o seu navegador depositará os ativos web descarregados nas suas Pastas de Utilizador.',
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: 'Conversor de JPG para PNG: Edição sem Perdas e Transparência',
69
+ level: 2,
70
+ },
71
+ {
72
+ type: 'paragraph',
73
+ html: 'O <strong>JPG</strong> é insuperável para fotografias de câmara, mas tem um calcanhar de Aquiles: cada vez que guarda o ficheiro, aplica de novo a sua compressão com perda, degradando progressivamente os bordos e os gradientes. O <strong>PNG</strong> usa compressão sem perda — uma vez guardado, os píxeis são imutáveis. Converter um JPG para PNG é a operação chave quando precisa de preparar uma imagem para edição intensiva, adicionar um fundo transparente ou integrá-la num fluxo de design que requer vários salvamentos.',
74
+ },
75
+ {
76
+ type: 'title',
77
+ text: 'JPG ou PNG? Quando usar cada formato',
78
+ level: 3,
79
+ },
80
+ {
81
+ type: 'paragraph',
82
+ html: 'O <strong>JPG</strong> é o rei da fotografia: pesos reduzidos, compatível com tudo. Mas os seus artefactos de compressão acumulam-se com cada edição e novo salvamento. Se precisa de recortar, retocar ou adicionar texto a uma imagem repetidamente, começar de JPG significa introduzir degradação em cada ciclo. Além disso, o JPG carece de canal alfa: não pode ter fundos transparentes, o que o desqualifica para logótipos, ícones e elementos de UI.',
83
+ },
84
+ {
85
+ type: 'paragraph',
86
+ html: 'O <strong>PNG</strong> é a escolha correta para logótipos corporativos, capturas de ecrã com texto nítido, elementos de interface, imagens de produto com fundo branco que depois precisará de recortar, ou qualquer recurso gráfico que vá ser editado mais do que uma vez. A compressão sem perda garante que os bordos do texto se mantêm perfeitamente definidos e que as cores planas permanecem puras, sem ruído JPEG.',
87
+ },
88
+ {
89
+ type: 'title',
90
+ text: 'Comparativo: Conversão Local vs Nuvem',
91
+ level: 3,
92
+ },
93
+ {
94
+ type: 'comparative',
95
+ items: [
96
+ {
97
+ title: 'Conversores Cloud',
98
+ description: 'Ferramentas que carregam os seus ficheiros para um servidor remoto.',
99
+ icon: 'mdi:cloud-upload',
100
+ pointIcon: 'mdi:close-circle-outline',
101
+ points: [
102
+ 'Latência de rede no upload e download',
103
+ 'As suas imagens ficam em servidores alheios',
104
+ 'Limites de tamanho e conversões diárias',
105
+ 'Publicidade intrusiva e rastreadores de terceiros',
106
+ ],
107
+ },
108
+ {
109
+ title: 'A Nossa Arquitetura Local',
110
+ description: 'Processamento direto no seu hardware através de tecnologia Vanilla JS.',
111
+ icon: 'mdi:laptop-mac',
112
+ highlight: true,
113
+ points: [
114
+ 'Velocidade instantânea — zero latência de rede',
115
+ 'Privacidade total — 0 bytes enviados para o exterior',
116
+ 'Sem limites de MB nem de número de ficheiros',
117
+ 'Interface limpa, sem anúncios nem rastreios',
118
+ ],
119
+ },
120
+ ],
121
+ },
122
+ {
123
+ type: 'title',
124
+ text: 'Como funciona tecnicamente',
125
+ level: 3,
126
+ },
127
+ {
128
+ type: 'paragraph',
129
+ html: 'O processo é puramente local: o navegador cria um <strong>Blob</strong> com o JPG selecionado e desenha-o sobre um <strong>Canvas HTML5</strong> em memória. Uma vez renderizado, é chamado <code>toDataURL(\'image/png\')</code> — o codec PNG integrado no navegador recodifica cada píxel sem aplicar nenhuma nova compressão com perda. O resultado é um PNG que preserva fielmente o estado atual do JPG: nem melhor nem pior, simplesmente congelado.',
130
+ },
131
+ {
132
+ type: 'paragraph',
133
+ html: 'O PNG resultante utilizará compressão DEFLATE sem perda, a mesma que empregam ferramentas profissionais como o Photoshop ou o GIMP. O seu tamanho será maior do que o JPG original — normalmente entre 2 e 5 vezes — porque armazena todos os píxeis sem descartar informação. É o preço que se paga pela fidelidade e pela editabilidade infinita.',
134
+ },
135
+ {
136
+ type: 'tip',
137
+ title: 'Importante: o PNG não recupera a qualidade JPEG',
138
+ html: 'Converter um JPG para PNG <strong>não recupera a qualidade perdida</strong> durante a compressão JPEG original. Se o seu JPG já tinha artefactos de bloco ou ruído de cor, o PNG conservá-los-á intactos — simplesmente evita que se adicionem mais. Pense na conversão como "congelar" o estado atual da imagem para que edições futuras não a degradem mais.',
139
+ },
140
+ {
141
+ type: 'title',
142
+ text: 'Casos de uso e compatibilidade',
143
+ level: 3,
144
+ },
145
+ {
146
+ type: 'list',
147
+ icon: 'mdi:check-circle',
148
+ items: [
149
+ 'Logótipos e elementos de marca que precisam de fundo transparente após o recorte.',
150
+ 'Capturas de ecrã com texto que serão editadas e novamente guardadas várias vezes.',
151
+ 'Imagens de produto para e-commerce que requerem fundo branco limpo e recortável.',
152
+ 'Recursos gráficos para apresentações de PowerPoint ou Google Slides.',
153
+ 'Ativos de UI para aplicações web e móveis onde a nitidez de bordos é crítica.',
154
+ ],
155
+ },
156
+ {
157
+ type: 'title',
158
+ text: 'Conclusão',
159
+ level: 3,
160
+ },
161
+ {
162
+ type: 'paragraph',
163
+ html: 'A conversão de JPG para PNG é o primeiro passo em qualquer fluxo de trabalho de design sério. Não transforma a qualidade original, mas protege cada píxel de edições futuras. Com esta ferramenta, o processo ocorre instantaneamente e de forma completamente privada, sem que as suas imagens corporativas ou pessoais saiam em nenhum momento do seu dispositivo.',
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: 'pt', 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 = 'konverter-jpg-v-png';
6
+ const title = 'Конвертировать JPG в PNG Онлайн и Бесплатно';
7
+ const description =
8
+ 'Конвертируйте JPG-изображения в PNG в вашем браузере без загрузки файлов. Беспотерьная конвертация, бесплатно и полностью приватно.';
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 подготовит этот контейнер, затем вам нужно будет изолировать объект с помощью Photoshop или другого редактора.',
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: 'Программное обеспечение Vanilla перемещает биты кадра в оболочку без потерь, характерную для семейства 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 в 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 или PNG? Когда использовать каждый формат',
78
+ level: 3,
79
+ },
80
+ {
81
+ type: 'paragraph',
82
+ html: '<strong>JPG</strong> — король фотографии: малый вес, совместимость со всеми устройствами. Но артефакты сжатия накапливаются при каждом редактировании и повторном сохранении. Если вам нужно многократно обрезать, ретушировать или добавлять текст на изображение, начать с JPG означает вносить деградацию в каждом цикле. Кроме того, в JPG отсутствует альфа-канал: он не может иметь прозрачного фона, что делает его непригодным для логотипов, иконок и элементов интерфейса.',
83
+ },
84
+ {
85
+ type: 'paragraph',
86
+ html: '<strong>PNG</strong> — правильный выбор для корпоративных логотипов, скриншотов с четким текстом, элементов интерфейса, изображений продуктов с белым фоном, которые позже нужно будет вырезать, или любых графических ресурсов, которые будут редактироваться более одного раза. Сжатие без потерь гарантирует, что края текста остаются идеально четкими, а чистые цвета — чистыми, без шума JPEG.',
87
+ },
88
+ {
89
+ type: 'title',
90
+ text: 'Сравнение: Локальная конвертация против Облачной',
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: 'Процесс чисто локальный: браузер создает <strong>Blob</strong> с выбранным JPG и отрисовывает его на <strong>HTML5 Canvas</strong> в памяти. После рендеринга вызывается <code>toDataURL(\'image/png\')</code> — встроенный в браузер кодек PNG заново кодирует каждый пиксель без применения нового сжатия с потерями. Результатомявляется PNG, который точно сохраняет текущее состояние JPG: не лучше и не хуже, просто замороженный.',
130
+ },
131
+ {
132
+ type: 'paragraph',
133
+ html: 'Результирующий PNG будет использовать беспотерьное сжатие DEFLATE, такое же, как в профессиональных инструментах вроде Photoshop или GIMP. Его размер будет больше исходного JPG — обычно в 2–5 раз — потому что он хранит все пиксели без отбрасывания информации. Это цена за точность и бесконечные возможности редактирования.',
134
+ },
135
+ {
136
+ type: 'tip',
137
+ title: 'Важно: PNG не восстанавливает качество JPEG',
138
+ html: 'Конвертация JPG в PNG <strong>не восстанавливает качество, потерянное</strong> во время оригинального сжатия JPEG. Если ваш 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
+ 'Изображения продуктов для e-commerce, требующие чистого белого фона для обтравки.',
152
+ 'Графические ресурсы для презентаций PowerPoint или Google Slides.',
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: 'ru', 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 = 'konvertera-jpg-till-png';
6
+ const title = 'Konvertera JPG till PNG Online och Gratis';
7
+ const description =
8
+ 'Konvertera JPG-bilder till PNG i din webbläsare utan att ladda upp filer. Förlustfri konvertering, gratis och helt privat.';
9
+
10
+ const ui: ImageConverterUI = {
11
+ dragText: 'Dra JPG-filer hit...',
12
+ convertText: 'För att konvertera dem till PNG direkt',
13
+ selectFiles: 'Välj filer',
14
+ processedFiles: 'Bearbetade filer',
15
+ downloadAll: 'Ladda ner alla (.zip)',
16
+ pending: 'Väntande',
17
+ bibliographyTitle: 'Bibliografiska Referenser',
18
+ faqTitle: 'Vanliga Frågor',
19
+ };
20
+
21
+ const faq: JpgAPngLocaleContent['faq'] = [
22
+ {
23
+ question: 'När ska jag använda JPG till PNG?',
24
+ answer:
25
+ 'Närhelst du ska redigera text eller logotyper i ett fotografi. Om du sparar en JPG flera gånger blir den "smutsig". PNG fryser komprimeringen.',
26
+ },
27
+ {
28
+ question: 'Kommer PNG-filen att få en transparent bakgrund omedelbart?',
29
+ answer:
30
+ 'Nej. Den ursprungliga JPG-filen var platt och saknade den typen av strukturell kanal. Den resulterande PNG-filen förbereder den containern, sedan måste du isolera elementet med Photoshop eller ett annat redigeringsprogram.',
31
+ },
32
+ {
33
+ question: 'Har den här webbplatsen trafikbegränsningar?',
34
+ answer:
35
+ 'Tack vare Edge-teknik utan molnberoende finns det inga begränsningar eftersom den helt använder din egen dator eller mobiltelefon.',
36
+ },
37
+ ];
38
+
39
+ const howTo: JpgAPngLocaleContent['howTo'] = [
40
+ {
41
+ name: 'Dra JPG till panelen',
42
+ text: 'Ladda upp statiska bilder i JPG-format med musen eller datorns väljare.',
43
+ },
44
+ {
45
+ name: 'Förlustfri körning',
46
+ text: 'Vanilla-programvaran skjuter bildens bitar till ett förlustfritt hölje som är infödd i PNG-familjen.',
47
+ },
48
+ {
49
+ name: 'Avsluta sessionen',
50
+ text: 'Klicka på panelen så lägger din webbläsare de nedladdade webbtillgångarna i dina användarmappar.',
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: 'Konverterare från JPG till PNG: Förlustfri redigering och transparens',
69
+ level: 2,
70
+ },
71
+ {
72
+ type: 'paragraph',
73
+ html: '<strong>JPG</strong> är oslagbart för kamerafotografier, men har en akilleshäl: varje gång du sparar filen tillämpas dess förlustbringande komprimering igen, vilket gradvis försämrar kanter och gradienter. <strong>PNG</strong> använder förlustfri komprimering – när filen väl har sparats är pixlarna oföränderliga. Att konvertera en JPG till PNG är den avgörande operationen när du behöver förbereda en bild för intensiv redigering, lägga till en transparent bakgrund eller integrera den i ett designflöde som kräver flera sparanden.',
74
+ },
75
+ {
76
+ type: 'title',
77
+ text: 'JPG eller PNG? När man ska använda varje format',
78
+ level: 3,
79
+ },
80
+ {
81
+ type: 'paragraph',
82
+ html: '<strong>JPG</strong> är fotografins kung: låg vikt, kompatibel med allt. Men dess komprimeringseffekter ackumuleras vid varje redigering och omsparande. Om du behöver beskära, retuschera eller lägga till text i en bild upprepade gånger, innebär det att börja från JPG att du introducerar försämring i varje cykel. Dessutom saknar JPG en alfakanal: den kan inte ha transparenta bakgrunder, vilket gör att den inte lämpar sig för logotyper, ikoner och UI-element.',
83
+ },
84
+ {
85
+ type: 'paragraph',
86
+ html: '<strong>PNG</strong> är det rätta valet för företagslogotyper, skärmdumpar med skarp text, gränssnittselement, produktbilder med vit bakgrund som du senare behöver beskära, eller alla grafiska resurser som ska redigeras mer än en gång. Den förlustfria komprimeringen garanterar att textkanter förblir perfekt definierade och att plana färger förblir rena, utan JPEG-brus.',
87
+ },
88
+ {
89
+ type: 'title',
90
+ text: 'Jämförelse: Lokal konvertering vs moln',
91
+ level: 3,
92
+ },
93
+ {
94
+ type: 'comparative',
95
+ items: [
96
+ {
97
+ title: 'Molnkonverterare',
98
+ description: 'Verktyg som laddar upp dina filer till en fjärrserver.',
99
+ icon: 'mdi:cloud-upload',
100
+ pointIcon: 'mdi:close-circle-outline',
101
+ points: [
102
+ 'Nätverkslatens vid uppladdning och nedladdning',
103
+ 'Dina bilder finns kvar på andras servrar',
104
+ 'Begränsningar i storlek och dagliga konverteringar',
105
+ 'Påträngande reklam och tredjepartsspårare',
106
+ ],
107
+ },
108
+ {
109
+ title: 'Vår lokala arkitektur',
110
+ description: 'Direkt bearbetning på din hårdvara via Vanilla JS-teknik.',
111
+ icon: 'mdi:laptop-mac',
112
+ highlight: true,
113
+ points: [
114
+ 'Omedelbar hastighet – noll nätverkslatens',
115
+ 'Total integritet – 0 byte skickas externt',
116
+ 'Inga MB-begränsningar eller begränsningar på antal filer',
117
+ 'Rent gränssnitt, utan annonser eller spårning',
118
+ ],
119
+ },
120
+ ],
121
+ },
122
+ {
123
+ type: 'title',
124
+ text: 'Hur det fungerar tekniskt',
125
+ level: 3,
126
+ },
127
+ {
128
+ type: 'paragraph',
129
+ html: 'Processen är rent lokal: webbläsaren skapar en <strong>Blob</strong> med den valda JPG-filen och ritar den på en <strong>HTML5 Canvas</strong> i minnet. När den väl har renderats anropas <code>toDataURL(\'image/png\')</code> – webbläsarens integrerade PNG-codec kodar om varje pixel utan att tillämpa någon ny förlustbringande komprimering. Resultatet är en PNG som troget bevarar JPG-filens nuvarande tillstånd: varken bättre eller sämre, bara fryst.',
130
+ },
131
+ {
132
+ type: 'paragraph',
133
+ html: 'Den resulterande PNG-filen kommer att använda förlustfri DEFLATE-komprimering, samma som används av professionella verktyg som Photoshop eller GIMP. Dess storlek kommer att vara större än den ursprungliga JPG-filen – vanligtvis mellan 2 och 5 gånger – eftersom den lagrar alla pixlar utan att kasta bort information. Det är priset man betalar för trohet och oändlig redigerbarhet.',
134
+ },
135
+ {
136
+ type: 'tip',
137
+ title: 'Viktigt: PNG återställer inte JPEG kvalitet',
138
+ html: 'Att konvertera en JPG till PNG <strong>återställer inte den förlorade kvaliteten</strong> under den ursprungliga JPEG-komprimeringen. Om din JPG redan hade blockeffekter eller färgbrus, kommer PNG att bevara dem intakta – det förhindrar helt enkelt att fler läggs till. Tänk på konverteringen som att "frysa" bildens nuvarande tillstånd så att framtida redigeringar inte försämrar den ytterligare.',
139
+ },
140
+ {
141
+ type: 'title',
142
+ text: 'Användningsfall och kompatibilitet',
143
+ level: 3,
144
+ },
145
+ {
146
+ type: 'list',
147
+ icon: 'mdi:check-circle',
148
+ items: [
149
+ 'Logotyper och varumärkeselement som behöver transparent bakgrund efter beskärning.',
150
+ 'Skärmdumpar med text som kommer att redigeras och sparas om flera gånger.',
151
+ 'Produktbilder för e-handel som kräver ren och beskärningsbar vit bakgrund.',
152
+ 'Grafiska resurser för PowerPoint- eller Google Slides-presentationer.',
153
+ 'UI-tillgångar för webb- och mobilapplikationer där kantskärpa är kritisk.',
154
+ ],
155
+ },
156
+ {
157
+ type: 'title',
158
+ text: 'Slutsats',
159
+ level: 3,
160
+ },
161
+ {
162
+ type: 'paragraph',
163
+ html: 'Konvertering från JPG till PNG är det första steget i alla seriösa designarbetsflöden. Det omvandlar inte den ursprungliga kvaliteten, men det skyddar varje pixel från framtida redigeringar. Med det här verktyget sker processen omedelbart och helt privat, utan att dina företags- eller personliga bilder någonsin lämnar din enhet.',
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: 'sv', faq, howTo }),
178
+ };