@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 { GifAJpgLocaleContent } from '../index';
4
+
5
+ const slug = 'conversor-gif-para-jpg';
6
+ const title = 'Converter GIF para JPG Online';
7
+ const description =
8
+ 'Extraia o primeiro fotograma dos seus GIFs e converta-o para JPG. Sem servidor. Processamento local no seu navegador. Grátis e ilimitado.';
9
+
10
+ const ui: ImageConverterUI = {
11
+ dragText: 'Arraste os ficheiros GIF...',
12
+ convertText: 'Para convertê-los para JPG 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: GifAJpgLocaleContent['faq'] = [
22
+ {
23
+ question: 'O que acontece com as animações quando passo para JPG?',
24
+ answer:
25
+ 'O formato JPG é estritamente estático e não suporta múltiplos fotogramas. O nosso conversor extrai unicamente a primeira imagem ou fotograma que aparece na sequência do GIF.',
26
+ },
27
+ {
28
+ question: 'Perderei algum efeito especial ou fundo transparente?',
29
+ answer:
30
+ 'Sim, é o comportamento natural do padrão JPG. Se carregar um GIF com fundo livre, inserimos automaticamente uma camada sólida branca subjacente para evitar cores corrompidas.',
31
+ },
32
+ {
33
+ question: 'Posso extrair fotos JPG de um GIF sem que o site guarde o meu conteúdo?',
34
+ answer:
35
+ 'Absolutamente sim. A ferramenta é uma Web App baseada no Canvas do HTML5. Toda a descodificação é executada pelo processador do seu próprio dispositivo físico.',
36
+ },
37
+ ];
38
+
39
+ const howTo: GifAJpgLocaleContent['howTo'] = [
40
+ {
41
+ name: 'Arraste Ficheiros Pesados Móveis',
42
+ text: 'Posicione ou arraste a partir da sua pasta esse GIF até largá-lo na nossa caixa de processamento.',
43
+ },
44
+ {
45
+ name: 'Cálculo Limpo do Primeiro Fotograma',
46
+ text: 'Em frações de tempo extrai-se a animação criando o JPG branco sólido sem contactar servidores.',
47
+ },
48
+ {
49
+ name: 'Capture-os Empacotados em Massa ZIP',
50
+ text: 'Descarregue com os botões ou usando o Zip se processou um grande número de ficheiros.',
51
+ },
52
+ ];
53
+
54
+ const bibliography: GifAJpgLocaleContent['bibliography'] = [
55
+ {
56
+ name: 'Especificação Técnica Joint Photographic Experts Group',
57
+ url: 'https://en.wikipedia.org/wiki/JPEG',
58
+ },
59
+ {
60
+ name: 'CompuServe GIF Information',
61
+ url: 'https://www.w3.org/Graphics/GIF/spec-gif89a.txt',
62
+ },
63
+ ];
64
+
65
+ const seo: GifAJpgLocaleContent['seo'] = [
66
+ {
67
+ type: 'title',
68
+ text: 'Conversor de GIF para JPG: Extraia Fotogramas como Imagens de Alta Qualidade',
69
+ level: 2,
70
+ },
71
+ {
72
+ type: 'paragraph',
73
+ html: 'Os ficheiros GIF dominam há décadas o mundo das animações curtas na internet. No entanto, a sua natureza animada torna-os completamente inúteis como miniatura, pré-visualização para redes sociais ou imagem para documentos. Quando precisa de extrair um fotograma concreto de um GIF e convertê-lo numa imagem estática de alta qualidade, a conversão para JPG é a solução mais prática e compatível.',
74
+ },
75
+ {
76
+ type: 'title',
77
+ text: 'GIF ou JPG? Formatos com propósitos opostos',
78
+ level: 3,
79
+ },
80
+ {
81
+ type: 'paragraph',
82
+ html: 'O GIF (Graphics Interchange Format) foi projetado em 1987 com uma limitação severa que persiste hoje: só pode representar 256 cores por fotograma. Esta restrição técnica não importava para animações simples com paletas reduzidas, mas torna-o num formato visualmente pobre para capturas de fotografia real. O JPG, por outro lado, pode renderizar milhões de cores com algoritmos de compressão percetual avançados.',
83
+ },
84
+ {
85
+ type: 'paragraph',
86
+ html: 'Extrair um fotograma de um GIF e guardá-lo como JPG tem múltiplas aplicações: gerar thumbnails para reprodutores de vídeo, criar pré-visualizações para plataformas de gestão de conteúdos, obter imagens estáticas para apresentações ou simplesmente arquivar um momento visual de uma animação complex. O JPG resultante será muito mais leve que o GIF original e universalmente compatível.',
87
+ },
88
+ {
89
+ type: 'title',
90
+ text: 'Comparativa de Arquitetura: 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 para os processar.',
99
+ icon: 'mdi:cloud-upload',
100
+ pointIcon: 'mdi:close-circle-outline',
101
+ points: [
102
+ 'Os seus GIFs viajam pela internet para servidores de terceiros',
103
+ 'Latência de rede em subida e descida',
104
+ 'Limites de tamanho e de ficheiros por sessão',
105
+ 'Risco de retenção de dados em servidores alheios',
106
+ ],
107
+ },
108
+ {
109
+ title: '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
+ 'O GIF nunca abandona o seu dispositivo',
115
+ 'Velocidade instantânea sem espera de rede',
116
+ 'Sem limites de tamanho nem de ficheiros',
117
+ 'Privacidade total: 0 bytes enviados para o exterior',
118
+ ],
119
+ },
120
+ ],
121
+ },
122
+ {
123
+ type: 'title',
124
+ text: 'Como funciona a extração técnica do fotograma',
125
+ level: 3,
126
+ },
127
+ {
128
+ type: 'paragraph',
129
+ html: 'A conversão local apoia-se na potência do Canvas API do HTML5. Quando carrega um GIF, o navegador descodifica-o em memória como um elemento Image nativo. Ao renderizá-lo sobre um canvas invisível, o motor gráfico do navegador captura automaticamente o primeiro fotograma da sequência de animação.',
130
+ },
131
+ {
132
+ type: 'paragraph',
133
+ html: 'Dado que o formato JPG não suporta transparências, o nosso algoritmo aplica um fundo branco sólido antes de exportar. O método <code>toDataURL(\'image/jpeg\')</code> do canvas gera o fluxo de bytes JPG diretamente na RAM do seu computador, sem nenhuma ligação de rede. O ficheiro resultante é descarregado imediatamente para o seu dispositivo.',
134
+ },
135
+ {
136
+ type: 'tip',
137
+ title: 'Paleta de cores limitada do GIF',
138
+ html: 'O GIF só pode conter 256 cores por fotograma. O JPG extraído herdará essa paleta reduzida do original: se o GIF tinha degradados ou fotografias, pode ver-se com certa posterização. Para obter o melhor resultado, use GIFs com cores simples ou ilustrações.',
139
+ },
140
+ {
141
+ type: 'title',
142
+ text: 'Casos de uso e compatibilidade do JPG resultante',
143
+ level: 3,
144
+ },
145
+ {
146
+ type: 'list',
147
+ icon: 'mdi:check-circle',
148
+ items: [
149
+ 'Thumbnails e pré-visualizações para plataformas de vídeo e CMS.',
150
+ 'Imagens de capa para publicações em redes sociais.',
151
+ 'Inserção em documentos Word, PowerPoint ou PDF.',
152
+ 'Ficheiros de apresentação e materiais de marketing.',
153
+ 'Compatibilidade universal com visores em Windows, macOS e telemóveis.',
154
+ ],
155
+ },
156
+ {
157
+ type: 'title',
158
+ text: 'Conclusão: o fotograma que vale mais do que a animação',
159
+ level: 3,
160
+ },
161
+ {
162
+ type: 'paragraph',
163
+ html: 'Um GIF animado de 2 MB pode produzir um JPG do primeiro fotograma de apenas 50-200 KB, dependendo da resolução. A nossa ferramenta realiza esta conversão de forma instantânea, privada e sem limites diretamente no seu navegador. Sem servidores, sem contas, sem esperas.',
164
+ },
165
+ ];
166
+
167
+
168
+ export const content: GifAJpgLocaleContent = {
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 { GifAJpgLocaleContent } from '../index';
4
+
5
+ const slug = 'konverter-gif-v-jpg';
6
+ const title = 'Конвертировать GIF в JPG Онлайн';
7
+ const description =
8
+ 'Извлеките первый кадр из ваших GIF-файлов и конвертируйте его в JPG. Без сервера. Локальная обработка в вашем браузере. Бесплатно и без ограничений.';
9
+
10
+ const ui: ImageConverterUI = {
11
+ dragText: 'Перетащите файлы GIF...',
12
+ convertText: 'Чтобы мгновенно конвертировать их в JPG',
13
+ selectFiles: 'Выбрать файлы',
14
+ processedFiles: 'Обработанные файлы',
15
+ downloadAll: 'Скачать всё (.zip)',
16
+ pending: 'В ожидании',
17
+ bibliographyTitle: 'Библиографические ссылки',
18
+ faqTitle: 'Часто задаваемые вопросы',
19
+ };
20
+
21
+ const faq: GifAJpgLocaleContent['faq'] = [
22
+ {
23
+ question: 'Что происходит с анимацией при переходе в JPG?',
24
+ answer:
25
+ 'Format JPG является строго статичным и не поддерживает несколько кадров. Наш конвертер извлекает только первое изображение или кадр, который появляется в последовательности GIF.',
26
+ },
27
+ {
28
+ question: 'Потеряю ли я спецэффекты или прозрачный фон?',
29
+ answer:
30
+ 'Да, это естественное поведение стандарта JPG. Если вы загружаете GIF с прозрачным фоном, мы автоматически добавляем под него сплошной белый слой, чтобы избежать искажения цветов.',
31
+ },
32
+ {
33
+ question: 'Могу ли я извлечь JPG-фото из GIF так, чтобы сайт не сохранял мой контент?',
34
+ answer:
35
+ 'Безусловно, да. Инструмент представляет собой веб-приложение на базе HTML5 Canvas. Вся дешифровка выполняется процессором вашего собственного физического устройства.',
36
+ },
37
+ ];
38
+
39
+ const howTo: GifAJpgLocaleContent['howTo'] = [
40
+ {
41
+ name: 'Перетащите движущиеся тяжелые файлы',
42
+ text: 'Разместите или перетащите этот GIF из вашей папки в наше поле обработки.',
43
+ },
44
+ {
45
+ name: 'Чистое вычисление первого кадра',
46
+ text: 'За доли секунды анимация извлекается с созданием сплошного белого JPG без обращения к серверам.',
47
+ },
48
+ {
49
+ name: 'Получите их в виде ZIP-архива',
50
+ text: 'Скачайте файлы по отдельности или в виде ZIP-архива, если вы обработали большое количество файлов.',
51
+ },
52
+ ];
53
+
54
+ const bibliography: GifAJpgLocaleContent['bibliography'] = [
55
+ {
56
+ name: 'Техническая спецификация Joint Photographic Experts Group',
57
+ url: 'https://en.wikipedia.org/wiki/JPEG',
58
+ },
59
+ {
60
+ name: 'CompuServe GIF Information',
61
+ url: 'https://www.w3.org/Graphics/GIF/spec-gif89a.txt',
62
+ },
63
+ ];
64
+
65
+ const seo: GifAJpgLocaleContent['seo'] = [
66
+ {
67
+ type: 'title',
68
+ text: 'Конвертер GIF в JPG: Извлекайте кадры как изображения высокого качества',
69
+ level: 2,
70
+ },
71
+ {
72
+ type: 'paragraph',
73
+ html: 'Файлы GIF десятилетиями доминировали в мире коротких анимаций в интернете. Однако их анимированная природа делает их совершенно бесполезными в качестве миниатюр, превью для социальных сетей или изображений для документов. Когда вам нужно извлечь конкретный кадр из GIF и превратить его в высококачественное статичное изображение, конвертация в JPG — самое практичное и совместимое решение.',
74
+ },
75
+ {
76
+ type: 'title',
77
+ text: 'GIF или JPG? Форматы с противоположными целями',
78
+ level: 3,
79
+ },
80
+ {
81
+ type: 'paragraph',
82
+ html: 'GIF (Graphics Interchange Format) был разработан в 1987 году с суровым ограничением, которое сохраняется и сегодня: он может отображать только 256 цветов на кадр. Это техническое ограничение не имело значения для простых анимаций с ограниченной палитрой, но делает его визуально бедным форматом для реальных фотографий. JPG, напротив, может отображать миллионы цветов с помощью продвинутых алгоритмов перцептивного сжатия.',
83
+ },
84
+ {
85
+ type: 'paragraph',
86
+ html: 'Извлечение кадра из GIF и сохранение его в формате JPG имеет множество применений: создание миниатюр для видеоплееров, предварительный просмотр для платформ управления контентом, получение статичных изображений для презентаций или просто архивирование визуального момента сложной анимации. Полученный JPG будет намного легче оригинального GIF и универсально совместим.',
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
+ 'Ваши GIF-файлы передаются через интернет на сторонние серверы',
103
+ 'Сетевая задержка при выгрузке и загрузке',
104
+ 'Ограничения на размер и количество файлов за сессию',
105
+ 'Риск хранения данных на чужих серверах',
106
+ ],
107
+ },
108
+ {
109
+ title: 'Наша локальная архитектура',
110
+ description: 'Прямая обработка на вашем оборудовании с использованием технологии Vanilla JS.',
111
+ icon: 'mdi:laptop-mac',
112
+ highlight: true,
113
+ points: [
114
+ 'GIF никогда не покидает ваше устройство',
115
+ 'Мгновенная скорость без ожидания сети',
116
+ 'Без ограничений по размеру или количеству файлов',
117
+ 'Полная конфиденциальность: 0 байт отправлено наружу',
118
+ ],
119
+ },
120
+ ],
121
+ },
122
+ {
123
+ type: 'title',
124
+ text: 'Как работает техническое извлечение кадра',
125
+ level: 3,
126
+ },
127
+ {
128
+ type: 'paragraph',
129
+ html: 'Локальная конвертация опирается на возможности Canvas API стандарта HTML5. При загрузке GIF браузер декодирует его в памяти как нативный элемент Image. При рендеринге на невидимом холсте (canvas) графический движок браузера автоматически захватывает первый кадр анимационной последовательности.',
130
+ },
131
+ {
132
+ type: 'paragraph',
133
+ html: 'Поскольку формат JPG не поддерживает прозрачность, наш алгоритм применяет сплошной белый фон перед экспортом. Метод <code>toDataURL(\'image/jpeg\')</code> холста генерирует поток байтов JPG прямо в оперативной памяти компьютера без какого-либо сетевого соединения. Результирующий файл немедленно загружается на ваше устройство.',
134
+ },
135
+ {
136
+ type: 'tip',
137
+ title: 'Ограниченная цветовая палитра GIF',
138
+ html: 'GIF может содержать только 256 цветов на кадр. Извлеченный JPG унаследует эту сокращенную палитру оригинала: если в GIF были градиенты или фотографии, на нем может быть видна некоторая постеризация. Для достижения наилучшего результата используйте GIF с простыми цветами или иллюстрациями.',
139
+ },
140
+ {
141
+ type: 'title',
142
+ text: 'Примеры использования и совместимость итогового JPG',
143
+ level: 3,
144
+ },
145
+ {
146
+ type: 'list',
147
+ icon: 'mdi:check-circle',
148
+ items: [
149
+ 'Миниатюры и превью для видеоплатформ и CMS.',
150
+ 'Обложки для постов в социальных сетях.',
151
+ 'Вставка в документы Word, PowerPoint или PDF.',
152
+ 'Файлы презентаций и маркетинговые материалы.',
153
+ 'Универсальная совместимость с просмотрщиками в Windows, macOS и на мобильных устройствах.',
154
+ ],
155
+ },
156
+ {
157
+ type: 'title',
158
+ text: 'Заключение: один кадр важнее всей анимации',
159
+ level: 3,
160
+ },
161
+ {
162
+ type: 'paragraph',
163
+ html: 'Анимированный GIF размером 2 МБ может создать JPG первого кадра весом всего 50-200 КБ, в зависимости от разрешения. Наш инструмент выполняет эту конвертацию мгновенно, приватно и без ограничений прямо в вашем браузере. Без серверов, без аккаунтов, без ожидания.',
164
+ },
165
+ ];
166
+
167
+
168
+ export const content: GifAJpgLocaleContent = {
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 { GifAJpgLocaleContent } from '../index';
4
+
5
+ const slug = 'konvertera-gif-till-jpg';
6
+ const title = 'Konvertera GIF till JPG Online';
7
+ const description =
8
+ 'Extrahera den första rutan från dina GIF-filer och konvertera den till JPG. Utan server. Lokal bearbetning i din webbläsare. Gratis och obegränsat.';
9
+
10
+ const ui: ImageConverterUI = {
11
+ dragText: 'Dra GIF-filer hit...',
12
+ convertText: 'För att konvertera dem till JPG 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: GifAJpgLocaleContent['faq'] = [
22
+ {
23
+ question: 'Vad händer med animationerna när jag går över till JPG?',
24
+ answer:
25
+ 'JPG-formatet är strikt statiskt och stöder inte flera rutor. Vår konverterare extraherar endast den första bilden eller rutan som visas i GIF-sekvensen.',
26
+ },
27
+ {
28
+ question: 'Kommer jag att förlora några specialeffekter eller transparent bakgrund?',
29
+ answer:
30
+ 'Ja, det är det naturliga beteendet för JPG-standarden. Om du laddar upp en GIF med transparent bakgrund lägger vi automatiskt till ett solitt vitt bakgrundslager för att undvika korrupta färger.',
31
+ },
32
+ {
33
+ question: 'Kan jag extrahera JPG-foton från en GIF utan att webbplatsen sparar mitt innehåll?',
34
+ answer:
35
+ 'Absolut ja. Verktyget är en webbapp baserad på HTML5 Canvas. All avkodning utförs av processorn i din egen fysiska enhet.',
36
+ },
37
+ ];
38
+
39
+ const howTo: GifAJpgLocaleContent['howTo'] = [
40
+ {
41
+ name: 'Dra rörliga tunga filer',
42
+ text: 'Placera eller dra den där GIF-filen från din mapp och släpp den i vår bearbetningsruta.',
43
+ },
44
+ {
45
+ name: 'Ren beräkning av den första rutan',
46
+ text: 'På bråkdelen av en sekund extraheras animationen och en solid vit JPG skapas utan att kontakta servrar.',
47
+ },
48
+ {
49
+ name: 'Få dem paketerade i ett ZIP-arkiv',
50
+ text: 'Ladda ner via knapparna eller använd ZIP om du bearbetade ett stort antal filer.',
51
+ },
52
+ ];
53
+
54
+ const bibliography: GifAJpgLocaleContent['bibliography'] = [
55
+ {
56
+ name: 'Joint Photographic Experts Group teknisk specifikation',
57
+ url: 'https://en.wikipedia.org/wiki/JPEG',
58
+ },
59
+ {
60
+ name: 'CompuServe GIF Information',
61
+ url: 'https://www.w3.org/Graphics/GIF/spec-gif89a.txt',
62
+ },
63
+ ];
64
+
65
+ const seo: GifAJpgLocaleContent['seo'] = [
66
+ {
67
+ type: 'title',
68
+ text: 'GIF till JPG-konverterare: Extrahera rutor som högkvalitativa bilder',
69
+ level: 2,
70
+ },
71
+ {
72
+ type: 'paragraph',
73
+ html: 'GIF-filer har i årtionden dominerat världen av korta animationer på internet. Men deras animerade natur gör dem helt oanvändbara som miniatyrbilder, förhandsvisningar för sociala nätverk eller bilder i dokument. När du behöver extrahera en specifik ruta från en GIF och konvertera den till en statisk bild av hög kvalitet, är konvertering till JPG den mest praktiska och kompatibla lösningen.',
74
+ },
75
+ {
76
+ type: 'title',
77
+ text: 'GIF eller JPG? Format med motsatta syften',
78
+ level: 3,
79
+ },
80
+ {
81
+ type: 'paragraph',
82
+ html: 'GIF (Graphics Interchange Format) designades 1987 med en sträng begränsning som kvarstår idag: det kan bara representera 256 färger per ruta. Denna tekniska restriktion spelade ingen roll för enkla animationer med reducerade paletter, men det gör det till ett visuellt fattigt format för riktig fotografering. JPG däremot kan rendera miljontals färger med avancerade perceptuella komprimeringsalgoritmer.',
83
+ },
84
+ {
85
+ type: 'paragraph',
86
+ html: 'Att extrahera en ruta från en GIF och spara den som JPG har flera tillämpningar: generera miniatyrbilder för videospelare, skapa förhandsvisningar för innehållshanteringsplattformar, få statiska bilder för presentationer eller helt enkelt arkivera ett visuellt ögonblick från en komplex animation. Den resulterande JPG-filen blir mycket lättare än den ursprungliga GIF-filen och universellt kompatibel.',
87
+ },
88
+ {
89
+ type: 'title',
90
+ text: 'Arkitekturjämförelse: Lokal 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 för bearbetning.',
99
+ icon: 'mdi:cloud-upload',
100
+ pointIcon: 'mdi:close-circle-outline',
101
+ points: [
102
+ 'Dina GIF-filer skickas över internet till tredjepartsservrar',
103
+ 'Nätverksfördröjning vid upp- och nedladdning',
104
+ 'Storleksbegränsningar och filgränser per session',
105
+ 'Risk för datalagring på andras servrar',
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
+ 'GIF-filen lämnar aldrig din enhet',
115
+ 'Omedelbar hastighet utan nätverksväntan',
116
+ 'Inga storleksbegränsningar eller filgränser',
117
+ 'Total integritet: 0 byte skickas externt',
118
+ ],
119
+ },
120
+ ],
121
+ },
122
+ {
123
+ type: 'title',
124
+ text: 'Hur den tekniska extraktionen av rutan fungerar',
125
+ level: 3,
126
+ },
127
+ {
128
+ type: 'paragraph',
129
+ html: 'Den lokala konverteringen stöder sig på kraften i HTML5 Canvas API. När du laddar en GIF avkodar webbläsaren den i minnet som ett inbyggt Image-element. Genom att rendera den på en osynlig canvas fångar webbläsarens grafikmotor automatiskt den första rutan i animationssekvensen.',
130
+ },
131
+ {
132
+ type: 'paragraph',
133
+ html: 'Eftersom JPG-formatet inte stöder transparens använder vår algoritm en solid vit bakgrund före export. Canvas-metoden <code>toDataURL(\'image/jpeg\')</code> genererar JPG-byteströmmen direkt i din dators RAM-minne, utan någon nätverksanslutning. Den resulterande filen laddas omedelbart ner till din enhet.',
134
+ },
135
+ {
136
+ type: 'tip',
137
+ title: 'GIF filens begränsade färgpalett',
138
+ html: 'GIF kan bara innehålla 256 färger per ruta. Den extraherade JPG-filen ärver den reducerade paletten från originalet: om GIF-filen hade toningar eller foton kan den se något postertiserad ut. För bästa resultat, använd GIF-filer med enkla färger eller illustrationer.',
139
+ },
140
+ {
141
+ type: 'title',
142
+ text: 'Användningsfall och kompatibilitet för den resulterande JPG-filen',
143
+ level: 3,
144
+ },
145
+ {
146
+ type: 'list',
147
+ icon: 'mdi:check-circle',
148
+ items: [
149
+ 'Miniatyrbilder och förhandsvisningar för videoplattformar och CMS.',
150
+ 'Omslagsbilder för inlägg på sociala nätverk.',
151
+ 'Infogning i Word-, PowerPoint- eller PDF-dokument.',
152
+ 'Presentationsfiler och marknadsföringsmaterial.',
153
+ 'Universell kompatibilitet med bildvisare i Windows, macOS och mobiler.',
154
+ ],
155
+ },
156
+ {
157
+ type: 'title',
158
+ text: 'Slutsats: den där rutan är värd mer än animationen',
159
+ level: 3,
160
+ },
161
+ {
162
+ type: 'paragraph',
163
+ html: 'En animerad GIF på 2 MB kan producera en JPG av den första rutan på endast cirka 50-200 KB, beroende på upplösning. Vårt verktyg utför denna konvertering omedelbart, privat och utan begränsningar, direkt i din webbläsare. Inga servrar, inga konton, ingen väntan.',
164
+ },
165
+ ];
166
+
167
+
168
+ export const content: GifAJpgLocaleContent = {
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
+ };