@jjlmoya/utils-converters 1.7.0 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (345) hide show
  1. package/package.json +60 -59
  2. package/src/shared/logic/schemas.ts +57 -0
  3. package/src/tests/faq_count.test.ts +13 -4
  4. package/src/tests/i18n_coverage.test.ts +36 -0
  5. package/src/tests/locale_completeness.test.ts +42 -0
  6. package/src/tests/no_h1_in_components.test.ts +48 -0
  7. package/src/tests/schemas_fulfillment.test.ts +23 -0
  8. package/src/tests/seo_length.test.ts +1 -1
  9. package/src/tests/title_quality.test.ts +55 -0
  10. package/src/tool/avifAJpg/i18n/de.ts +178 -0
  11. package/src/tool/avifAJpg/i18n/en.ts +2 -12
  12. package/src/tool/avifAJpg/i18n/es.ts +2 -12
  13. package/src/tool/avifAJpg/i18n/fr.ts +2 -12
  14. package/src/tool/avifAJpg/i18n/id.ts +178 -0
  15. package/src/tool/avifAJpg/i18n/it.ts +178 -0
  16. package/src/tool/avifAJpg/i18n/ja.ts +178 -0
  17. package/src/tool/avifAJpg/i18n/ko.ts +178 -0
  18. package/src/tool/avifAJpg/i18n/nl.ts +178 -0
  19. package/src/tool/avifAJpg/i18n/pl.ts +178 -0
  20. package/src/tool/avifAJpg/i18n/pt.ts +178 -0
  21. package/src/tool/avifAJpg/i18n/ru.ts +178 -0
  22. package/src/tool/avifAJpg/i18n/sv.ts +178 -0
  23. package/src/tool/avifAJpg/i18n/tr.ts +178 -0
  24. package/src/tool/avifAJpg/i18n/zh.ts +178 -0
  25. package/src/tool/avifAJpg/index.ts +13 -1
  26. package/src/tool/avifAPng/i18n/de.ts +178 -0
  27. package/src/tool/avifAPng/i18n/en.ts +2 -12
  28. package/src/tool/avifAPng/i18n/es.ts +2 -12
  29. package/src/tool/avifAPng/i18n/fr.ts +2 -12
  30. package/src/tool/avifAPng/i18n/id.ts +178 -0
  31. package/src/tool/avifAPng/i18n/it.ts +178 -0
  32. package/src/tool/avifAPng/i18n/ja.ts +178 -0
  33. package/src/tool/avifAPng/i18n/ko.ts +178 -0
  34. package/src/tool/avifAPng/i18n/nl.ts +178 -0
  35. package/src/tool/avifAPng/i18n/pl.ts +178 -0
  36. package/src/tool/avifAPng/i18n/pt.ts +178 -0
  37. package/src/tool/avifAPng/i18n/ru.ts +178 -0
  38. package/src/tool/avifAPng/i18n/sv.ts +178 -0
  39. package/src/tool/avifAPng/i18n/tr.ts +178 -0
  40. package/src/tool/avifAPng/i18n/zh.ts +178 -0
  41. package/src/tool/avifAPng/index.ts +13 -1
  42. package/src/tool/avifAWebp/i18n/de.ts +178 -0
  43. package/src/tool/avifAWebp/i18n/en.ts +2 -12
  44. package/src/tool/avifAWebp/i18n/es.ts +2 -12
  45. package/src/tool/avifAWebp/i18n/fr.ts +2 -12
  46. package/src/tool/avifAWebp/i18n/id.ts +178 -0
  47. package/src/tool/avifAWebp/i18n/it.ts +178 -0
  48. package/src/tool/avifAWebp/i18n/ja.ts +178 -0
  49. package/src/tool/avifAWebp/i18n/ko.ts +178 -0
  50. package/src/tool/avifAWebp/i18n/nl.ts +178 -0
  51. package/src/tool/avifAWebp/i18n/pl.ts +178 -0
  52. package/src/tool/avifAWebp/i18n/pt.ts +178 -0
  53. package/src/tool/avifAWebp/i18n/ru.ts +178 -0
  54. package/src/tool/avifAWebp/i18n/sv.ts +178 -0
  55. package/src/tool/avifAWebp/i18n/tr.ts +178 -0
  56. package/src/tool/avifAWebp/i18n/zh.ts +178 -0
  57. package/src/tool/avifAWebp/index.ts +13 -1
  58. package/src/tool/bmpAJpg/i18n/de.ts +178 -0
  59. package/src/tool/bmpAJpg/i18n/en.ts +2 -12
  60. package/src/tool/bmpAJpg/i18n/es.ts +2 -12
  61. package/src/tool/bmpAJpg/i18n/fr.ts +2 -12
  62. package/src/tool/bmpAJpg/i18n/id.ts +178 -0
  63. package/src/tool/bmpAJpg/i18n/it.ts +178 -0
  64. package/src/tool/bmpAJpg/i18n/ja.ts +178 -0
  65. package/src/tool/bmpAJpg/i18n/ko.ts +178 -0
  66. package/src/tool/bmpAJpg/i18n/nl.ts +178 -0
  67. package/src/tool/bmpAJpg/i18n/pl.ts +178 -0
  68. package/src/tool/bmpAJpg/i18n/pt.ts +178 -0
  69. package/src/tool/bmpAJpg/i18n/ru.ts +178 -0
  70. package/src/tool/bmpAJpg/i18n/sv.ts +178 -0
  71. package/src/tool/bmpAJpg/i18n/tr.ts +178 -0
  72. package/src/tool/bmpAJpg/i18n/zh.ts +178 -0
  73. package/src/tool/bmpAJpg/index.ts +13 -1
  74. package/src/tool/bmpAPng/i18n/de.ts +177 -0
  75. package/src/tool/bmpAPng/i18n/en.ts +2 -12
  76. package/src/tool/bmpAPng/i18n/es.ts +2 -12
  77. package/src/tool/bmpAPng/i18n/fr.ts +2 -12
  78. package/src/tool/bmpAPng/i18n/id.ts +177 -0
  79. package/src/tool/bmpAPng/i18n/it.ts +177 -0
  80. package/src/tool/bmpAPng/i18n/ja.ts +177 -0
  81. package/src/tool/bmpAPng/i18n/ko.ts +177 -0
  82. package/src/tool/bmpAPng/i18n/nl.ts +177 -0
  83. package/src/tool/bmpAPng/i18n/pl.ts +177 -0
  84. package/src/tool/bmpAPng/i18n/pt.ts +177 -0
  85. package/src/tool/bmpAPng/i18n/ru.ts +177 -0
  86. package/src/tool/bmpAPng/i18n/sv.ts +177 -0
  87. package/src/tool/bmpAPng/i18n/tr.ts +177 -0
  88. package/src/tool/bmpAPng/i18n/zh.ts +177 -0
  89. package/src/tool/bmpAPng/index.ts +13 -1
  90. package/src/tool/bmpAWebp/i18n/de.ts +178 -0
  91. package/src/tool/bmpAWebp/i18n/en.ts +2 -12
  92. package/src/tool/bmpAWebp/i18n/es.ts +2 -12
  93. package/src/tool/bmpAWebp/i18n/fr.ts +2 -12
  94. package/src/tool/bmpAWebp/i18n/id.ts +178 -0
  95. package/src/tool/bmpAWebp/i18n/it.ts +178 -0
  96. package/src/tool/bmpAWebp/i18n/ja.ts +178 -0
  97. package/src/tool/bmpAWebp/i18n/ko.ts +178 -0
  98. package/src/tool/bmpAWebp/i18n/nl.ts +178 -0
  99. package/src/tool/bmpAWebp/i18n/pl.ts +178 -0
  100. package/src/tool/bmpAWebp/i18n/pt.ts +178 -0
  101. package/src/tool/bmpAWebp/i18n/ru.ts +178 -0
  102. package/src/tool/bmpAWebp/i18n/sv.ts +178 -0
  103. package/src/tool/bmpAWebp/i18n/tr.ts +178 -0
  104. package/src/tool/bmpAWebp/i18n/zh.ts +178 -0
  105. package/src/tool/bmpAWebp/index.ts +13 -1
  106. package/src/tool/gifAJpg/i18n/de.ts +178 -0
  107. package/src/tool/gifAJpg/i18n/en.ts +2 -12
  108. package/src/tool/gifAJpg/i18n/es.ts +2 -12
  109. package/src/tool/gifAJpg/i18n/fr.ts +2 -12
  110. package/src/tool/gifAJpg/i18n/id.ts +178 -0
  111. package/src/tool/gifAJpg/i18n/it.ts +178 -0
  112. package/src/tool/gifAJpg/i18n/ja.ts +178 -0
  113. package/src/tool/gifAJpg/i18n/ko.ts +178 -0
  114. package/src/tool/gifAJpg/i18n/nl.ts +178 -0
  115. package/src/tool/gifAJpg/i18n/pl.ts +178 -0
  116. package/src/tool/gifAJpg/i18n/pt.ts +178 -0
  117. package/src/tool/gifAJpg/i18n/ru.ts +178 -0
  118. package/src/tool/gifAJpg/i18n/sv.ts +178 -0
  119. package/src/tool/gifAJpg/i18n/tr.ts +178 -0
  120. package/src/tool/gifAJpg/i18n/zh.ts +178 -0
  121. package/src/tool/gifAJpg/index.ts +13 -1
  122. package/src/tool/gifAPng/i18n/de.ts +178 -0
  123. package/src/tool/gifAPng/i18n/en.ts +2 -12
  124. package/src/tool/gifAPng/i18n/es.ts +2 -12
  125. package/src/tool/gifAPng/i18n/fr.ts +2 -12
  126. package/src/tool/gifAPng/i18n/id.ts +178 -0
  127. package/src/tool/gifAPng/i18n/it.ts +178 -0
  128. package/src/tool/gifAPng/i18n/ja.ts +178 -0
  129. package/src/tool/gifAPng/i18n/ko.ts +178 -0
  130. package/src/tool/gifAPng/i18n/nl.ts +178 -0
  131. package/src/tool/gifAPng/i18n/pl.ts +178 -0
  132. package/src/tool/gifAPng/i18n/pt.ts +178 -0
  133. package/src/tool/gifAPng/i18n/ru.ts +178 -0
  134. package/src/tool/gifAPng/i18n/sv.ts +178 -0
  135. package/src/tool/gifAPng/i18n/tr.ts +178 -0
  136. package/src/tool/gifAPng/i18n/zh.ts +178 -0
  137. package/src/tool/gifAPng/index.ts +12 -0
  138. package/src/tool/gifAWebp/i18n/de.ts +178 -0
  139. package/src/tool/gifAWebp/i18n/en.ts +2 -12
  140. package/src/tool/gifAWebp/i18n/es.ts +2 -12
  141. package/src/tool/gifAWebp/i18n/fr.ts +2 -12
  142. package/src/tool/gifAWebp/i18n/id.ts +178 -0
  143. package/src/tool/gifAWebp/i18n/it.ts +178 -0
  144. package/src/tool/gifAWebp/i18n/ja.ts +178 -0
  145. package/src/tool/gifAWebp/i18n/ko.ts +178 -0
  146. package/src/tool/gifAWebp/i18n/nl.ts +178 -0
  147. package/src/tool/gifAWebp/i18n/pl.ts +178 -0
  148. package/src/tool/gifAWebp/i18n/pt.ts +178 -0
  149. package/src/tool/gifAWebp/i18n/ru.ts +178 -0
  150. package/src/tool/gifAWebp/i18n/sv.ts +178 -0
  151. package/src/tool/gifAWebp/i18n/tr.ts +178 -0
  152. package/src/tool/gifAWebp/i18n/zh.ts +178 -0
  153. package/src/tool/gifAWebp/index.ts +12 -0
  154. package/src/tool/imagenBase64/i18n/de.ts +168 -0
  155. package/src/tool/imagenBase64/i18n/en.ts +2 -12
  156. package/src/tool/imagenBase64/i18n/es.ts +2 -12
  157. package/src/tool/imagenBase64/i18n/fr.ts +2 -12
  158. package/src/tool/imagenBase64/i18n/id.ts +168 -0
  159. package/src/tool/imagenBase64/i18n/it.ts +168 -0
  160. package/src/tool/imagenBase64/i18n/ja.ts +168 -0
  161. package/src/tool/imagenBase64/i18n/ko.ts +168 -0
  162. package/src/tool/imagenBase64/i18n/nl.ts +168 -0
  163. package/src/tool/imagenBase64/i18n/pl.ts +168 -0
  164. package/src/tool/imagenBase64/i18n/pt.ts +173 -0
  165. package/src/tool/imagenBase64/i18n/ru.ts +168 -0
  166. package/src/tool/imagenBase64/i18n/sv.ts +168 -0
  167. package/src/tool/imagenBase64/i18n/tr.ts +168 -0
  168. package/src/tool/imagenBase64/i18n/zh.ts +168 -0
  169. package/src/tool/imagenBase64/index.ts +12 -0
  170. package/src/tool/jpgAIco/i18n/de.ts +183 -0
  171. package/src/tool/jpgAIco/i18n/en.ts +8 -13
  172. package/src/tool/jpgAIco/i18n/es.ts +13 -18
  173. package/src/tool/jpgAIco/i18n/fr.ts +9 -14
  174. package/src/tool/jpgAIco/i18n/id.ts +183 -0
  175. package/src/tool/jpgAIco/i18n/it.ts +183 -0
  176. package/src/tool/jpgAIco/i18n/ja.ts +183 -0
  177. package/src/tool/jpgAIco/i18n/ko.ts +183 -0
  178. package/src/tool/jpgAIco/i18n/nl.ts +183 -0
  179. package/src/tool/jpgAIco/i18n/pl.ts +183 -0
  180. package/src/tool/jpgAIco/i18n/pt.ts +183 -0
  181. package/src/tool/jpgAIco/i18n/ru.ts +183 -0
  182. package/src/tool/jpgAIco/i18n/sv.ts +183 -0
  183. package/src/tool/jpgAIco/i18n/tr.ts +183 -0
  184. package/src/tool/jpgAIco/i18n/zh.ts +183 -0
  185. package/src/tool/jpgAIco/index.ts +12 -0
  186. package/src/tool/jpgAPng/i18n/de.ts +178 -0
  187. package/src/tool/jpgAPng/i18n/en.ts +2 -12
  188. package/src/tool/jpgAPng/i18n/es.ts +2 -12
  189. package/src/tool/jpgAPng/i18n/fr.ts +2 -12
  190. package/src/tool/jpgAPng/i18n/id.ts +178 -0
  191. package/src/tool/jpgAPng/i18n/it.ts +178 -0
  192. package/src/tool/jpgAPng/i18n/ja.ts +178 -0
  193. package/src/tool/jpgAPng/i18n/ko.ts +178 -0
  194. package/src/tool/jpgAPng/i18n/nl.ts +178 -0
  195. package/src/tool/jpgAPng/i18n/pl.ts +178 -0
  196. package/src/tool/jpgAPng/i18n/pt.ts +178 -0
  197. package/src/tool/jpgAPng/i18n/ru.ts +178 -0
  198. package/src/tool/jpgAPng/i18n/sv.ts +178 -0
  199. package/src/tool/jpgAPng/i18n/tr.ts +178 -0
  200. package/src/tool/jpgAPng/i18n/zh.ts +178 -0
  201. package/src/tool/jpgAPng/index.ts +13 -1
  202. package/src/tool/jpgAWebp/i18n/de.ts +178 -0
  203. package/src/tool/jpgAWebp/i18n/en.ts +2 -12
  204. package/src/tool/jpgAWebp/i18n/es.ts +2 -12
  205. package/src/tool/jpgAWebp/i18n/fr.ts +2 -12
  206. package/src/tool/jpgAWebp/i18n/id.ts +178 -0
  207. package/src/tool/jpgAWebp/i18n/it.ts +178 -0
  208. package/src/tool/jpgAWebp/i18n/ja.ts +178 -0
  209. package/src/tool/jpgAWebp/i18n/ko.ts +178 -0
  210. package/src/tool/jpgAWebp/i18n/nl.ts +178 -0
  211. package/src/tool/jpgAWebp/i18n/pl.ts +178 -0
  212. package/src/tool/jpgAWebp/i18n/pt.ts +178 -0
  213. package/src/tool/jpgAWebp/i18n/ru.ts +178 -0
  214. package/src/tool/jpgAWebp/i18n/sv.ts +178 -0
  215. package/src/tool/jpgAWebp/i18n/tr.ts +178 -0
  216. package/src/tool/jpgAWebp/i18n/zh.ts +178 -0
  217. package/src/tool/jpgAWebp/index.ts +12 -0
  218. package/src/tool/pngAIco/i18n/de.ts +183 -0
  219. package/src/tool/pngAIco/i18n/en.ts +8 -13
  220. package/src/tool/pngAIco/i18n/es.ts +19 -24
  221. package/src/tool/pngAIco/i18n/fr.ts +20 -25
  222. package/src/tool/pngAIco/i18n/id.ts +183 -0
  223. package/src/tool/pngAIco/i18n/it.ts +183 -0
  224. package/src/tool/pngAIco/i18n/ja.ts +183 -0
  225. package/src/tool/pngAIco/i18n/ko.ts +183 -0
  226. package/src/tool/pngAIco/i18n/nl.ts +183 -0
  227. package/src/tool/pngAIco/i18n/pl.ts +183 -0
  228. package/src/tool/pngAIco/i18n/pt.ts +183 -0
  229. package/src/tool/pngAIco/i18n/ru.ts +183 -0
  230. package/src/tool/pngAIco/i18n/sv.ts +183 -0
  231. package/src/tool/pngAIco/i18n/tr.ts +183 -0
  232. package/src/tool/pngAIco/i18n/zh.ts +183 -0
  233. package/src/tool/pngAIco/index.ts +12 -0
  234. package/src/tool/pngAJpg/i18n/de.ts +191 -0
  235. package/src/tool/pngAJpg/i18n/en.ts +2 -12
  236. package/src/tool/pngAJpg/i18n/es.ts +2 -12
  237. package/src/tool/pngAJpg/i18n/fr.ts +2 -12
  238. package/src/tool/pngAJpg/i18n/id.ts +191 -0
  239. package/src/tool/pngAJpg/i18n/it.ts +191 -0
  240. package/src/tool/pngAJpg/i18n/ja.ts +191 -0
  241. package/src/tool/pngAJpg/i18n/ko.ts +191 -0
  242. package/src/tool/pngAJpg/i18n/nl.ts +191 -0
  243. package/src/tool/pngAJpg/i18n/pl.ts +191 -0
  244. package/src/tool/pngAJpg/i18n/pt.ts +191 -0
  245. package/src/tool/pngAJpg/i18n/ru.ts +191 -0
  246. package/src/tool/pngAJpg/i18n/sv.ts +191 -0
  247. package/src/tool/pngAJpg/i18n/tr.ts +191 -0
  248. package/src/tool/pngAJpg/i18n/zh.ts +191 -0
  249. package/src/tool/pngAJpg/index.ts +13 -1
  250. package/src/tool/pngAWebp/i18n/de.ts +182 -0
  251. package/src/tool/pngAWebp/i18n/en.ts +2 -12
  252. package/src/tool/pngAWebp/i18n/es.ts +2 -12
  253. package/src/tool/pngAWebp/i18n/fr.ts +2 -12
  254. package/src/tool/pngAWebp/i18n/id.ts +182 -0
  255. package/src/tool/pngAWebp/i18n/it.ts +182 -0
  256. package/src/tool/pngAWebp/i18n/ja.ts +182 -0
  257. package/src/tool/pngAWebp/i18n/ko.ts +182 -0
  258. package/src/tool/pngAWebp/i18n/nl.ts +182 -0
  259. package/src/tool/pngAWebp/i18n/pl.ts +182 -0
  260. package/src/tool/pngAWebp/i18n/pt.ts +182 -0
  261. package/src/tool/pngAWebp/i18n/ru.ts +182 -0
  262. package/src/tool/pngAWebp/i18n/sv.ts +182 -0
  263. package/src/tool/pngAWebp/i18n/tr.ts +182 -0
  264. package/src/tool/pngAWebp/i18n/zh.ts +182 -0
  265. package/src/tool/pngAWebp/index.ts +12 -0
  266. package/src/tool/svgAJpg/i18n/de.ts +178 -0
  267. package/src/tool/svgAJpg/i18n/en.ts +8 -13
  268. package/src/tool/svgAJpg/i18n/es.ts +8 -13
  269. package/src/tool/svgAJpg/i18n/fr.ts +2 -12
  270. package/src/tool/svgAJpg/i18n/id.ts +178 -0
  271. package/src/tool/svgAJpg/i18n/it.ts +178 -0
  272. package/src/tool/svgAJpg/i18n/ja.ts +178 -0
  273. package/src/tool/svgAJpg/i18n/ko.ts +178 -0
  274. package/src/tool/svgAJpg/i18n/nl.ts +178 -0
  275. package/src/tool/svgAJpg/i18n/pl.ts +178 -0
  276. package/src/tool/svgAJpg/i18n/pt.ts +178 -0
  277. package/src/tool/svgAJpg/i18n/ru.ts +178 -0
  278. package/src/tool/svgAJpg/i18n/sv.ts +178 -0
  279. package/src/tool/svgAJpg/i18n/tr.ts +178 -0
  280. package/src/tool/svgAJpg/i18n/zh.ts +178 -0
  281. package/src/tool/svgAJpg/index.ts +12 -0
  282. package/src/tool/svgAPng/i18n/de.ts +178 -0
  283. package/src/tool/svgAPng/i18n/en.ts +8 -13
  284. package/src/tool/svgAPng/i18n/es.ts +31 -36
  285. package/src/tool/svgAPng/i18n/fr.ts +2 -12
  286. package/src/tool/svgAPng/i18n/id.ts +178 -0
  287. package/src/tool/svgAPng/i18n/it.ts +178 -0
  288. package/src/tool/svgAPng/i18n/ja.ts +178 -0
  289. package/src/tool/svgAPng/i18n/ko.ts +178 -0
  290. package/src/tool/svgAPng/i18n/nl.ts +178 -0
  291. package/src/tool/svgAPng/i18n/pl.ts +178 -0
  292. package/src/tool/svgAPng/i18n/pt.ts +178 -0
  293. package/src/tool/svgAPng/i18n/ru.ts +178 -0
  294. package/src/tool/svgAPng/i18n/sv.ts +178 -0
  295. package/src/tool/svgAPng/i18n/tr.ts +178 -0
  296. package/src/tool/svgAPng/i18n/zh.ts +178 -0
  297. package/src/tool/svgAPng/index.ts +12 -0
  298. package/src/tool/webpAIco/i18n/de.ts +183 -0
  299. package/src/tool/webpAIco/i18n/en.ts +8 -13
  300. package/src/tool/webpAIco/i18n/es.ts +9 -14
  301. package/src/tool/webpAIco/i18n/fr.ts +11 -16
  302. package/src/tool/webpAIco/i18n/id.ts +183 -0
  303. package/src/tool/webpAIco/i18n/it.ts +183 -0
  304. package/src/tool/webpAIco/i18n/ja.ts +183 -0
  305. package/src/tool/webpAIco/i18n/ko.ts +183 -0
  306. package/src/tool/webpAIco/i18n/nl.ts +183 -0
  307. package/src/tool/webpAIco/i18n/pl.ts +183 -0
  308. package/src/tool/webpAIco/i18n/pt.ts +183 -0
  309. package/src/tool/webpAIco/i18n/ru.ts +183 -0
  310. package/src/tool/webpAIco/i18n/sv.ts +183 -0
  311. package/src/tool/webpAIco/i18n/tr.ts +183 -0
  312. package/src/tool/webpAIco/i18n/zh.ts +183 -0
  313. package/src/tool/webpAIco/index.ts +12 -0
  314. package/src/tool/webpAJpg/i18n/de.ts +187 -0
  315. package/src/tool/webpAJpg/i18n/en.ts +9 -13
  316. package/src/tool/webpAJpg/i18n/es.ts +37 -42
  317. package/src/tool/webpAJpg/i18n/fr.ts +35 -40
  318. package/src/tool/webpAJpg/i18n/id.ts +182 -0
  319. package/src/tool/webpAJpg/i18n/it.ts +182 -0
  320. package/src/tool/webpAJpg/i18n/ja.ts +182 -0
  321. package/src/tool/webpAJpg/i18n/ko.ts +182 -0
  322. package/src/tool/webpAJpg/i18n/nl.ts +182 -0
  323. package/src/tool/webpAJpg/i18n/pl.ts +182 -0
  324. package/src/tool/webpAJpg/i18n/pt.ts +182 -0
  325. package/src/tool/webpAJpg/i18n/ru.ts +182 -0
  326. package/src/tool/webpAJpg/i18n/sv.ts +182 -0
  327. package/src/tool/webpAJpg/i18n/tr.ts +182 -0
  328. package/src/tool/webpAJpg/i18n/zh.ts +182 -0
  329. package/src/tool/webpAJpg/index.ts +12 -0
  330. package/src/tool/webpAPng/i18n/de.ts +182 -0
  331. package/src/tool/webpAPng/i18n/en.ts +8 -13
  332. package/src/tool/webpAPng/i18n/es.ts +35 -40
  333. package/src/tool/webpAPng/i18n/fr.ts +2 -12
  334. package/src/tool/webpAPng/i18n/id.ts +182 -0
  335. package/src/tool/webpAPng/i18n/it.ts +182 -0
  336. package/src/tool/webpAPng/i18n/ja.ts +182 -0
  337. package/src/tool/webpAPng/i18n/ko.ts +182 -0
  338. package/src/tool/webpAPng/i18n/nl.ts +182 -0
  339. package/src/tool/webpAPng/i18n/pl.ts +182 -0
  340. package/src/tool/webpAPng/i18n/pt.ts +182 -0
  341. package/src/tool/webpAPng/i18n/ru.ts +182 -0
  342. package/src/tool/webpAPng/i18n/sv.ts +182 -0
  343. package/src/tool/webpAPng/i18n/tr.ts +182 -0
  344. package/src/tool/webpAPng/i18n/zh.ts +182 -0
  345. package/src/tool/webpAPng/index.ts +12 -0
@@ -0,0 +1,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 = 'convert-gif-to-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
+ 'JPG 형식은 정지 이미지 전용이며 여러 프레임을 지원하지 않습니다. 당사의 변환기는 GIF 시퀀스에서 가장 처음에 나타나는 이미지 또는 프레임 하나만을 추출합니다.',
26
+ },
27
+ {
28
+ question: '특수 효과나 투명 배경이 사라지나요?',
29
+ answer:
30
+ '네, 이는 JPG 표준의 특성입니다. 투명 배경이 있는 GIF를 업로드하면 색상 왜곡을 방지하기 위해 자동으로 흰색 배경 레이어를 삽입하여 처리합니다.',
31
+ },
32
+ {
33
+ question: '웹사이트 서버에 저장되지 않고 GIF에서 JPG를 추출할 수 있나요?',
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 to JPG 변환기: 애니메이션 프레임을 고품질 정지 이미지로 추출',
69
+ level: 2,
70
+ },
71
+ {
72
+ type: 'paragraph',
73
+ html: 'GIF 파일은 수십 년 동안 인터넷의 짧은 애니메이션 문화를 주도해 왔습니다. 하지만 애니메이션 형태는 썸네일, SNS 미리보기, 문서 삽입용 이미지로 활용하기에는 부적합한 경우가 많습니다. 특정 프레임을 고품질 정지 이미지로 추출해야 할 때 JPG 변환은 가장 실용적이고 호환성이 뛰어난 해결책입니다.',
74
+ },
75
+ {
76
+ type: 'title',
77
+ text: 'GIF 또는 JPG? 상반된 목적을 가진 두 형식',
78
+ level: 3,
79
+ },
80
+ {
81
+ type: 'paragraph',
82
+ html: 'GIF(Graphics Interchange Format)는 프레임당 256색만 표현할 수 있다는 기술적 한계를 안고 1987년에 설계되었습니다. 간단한 그래픽에는 문제가 없었으나 정밀한 사진 표현에는 적합하지 않았습니다. 반면 JPG는 고도의 압축 알고리즘을 통해 수백만 가지 색상을 렌더링할 수 있습니다.',
83
+ },
84
+ {
85
+ type: 'paragraph',
86
+ html: 'GIF에서 프레임을 추출하여 JPG로 저장하는 것은 비디오 플레이어의 썸네일 생성, 콘텐츠 관리 플랫폼용 미리보기 제작, 프리젠테이션용 정지 이미지 확보 등 다양한 용도로 활용됩니다. 결과물인 JPG는 원본 GIF보다 훨씬 가볍고 모든 기기에서 완벽하게 호환됩니다.',
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
+ '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: '로컬 변환은 HTML5 Canvas API의 성능을 활용합니다. GIF를 로드하면 브라우저는 이를 메모리에 네이티브 Image 데이터로 디코딩합니다. 보이지 않는 캔버스 위에서 렌더링이 이루어지며, 브라우저 엔진은 애니메이션 시퀀스의 첫 번째 프레임을 자동으로 캡처합니다.',
130
+ },
131
+ {
132
+ type: 'paragraph',
133
+ html: 'JPG 형식은 투명도를 지원하지 않으므로 내보내기 전에 흰색 배경을 적용합니다. 캔버스의 <code>toDataURL(\'image/jpeg\')</code> 메서드는 네트워크 연결 없이 사용자의 컴퓨터 RAM에서 직접 JPG 바이트 스트림을 생성하며, 결과물은 즉시 사용자의 기기에 저장됩니다.',
134
+ },
135
+ {
136
+ type: 'tip',
137
+ title: 'GIF의 제한된 색상 팔레트 안내',
138
+ html: 'GIF는 프레임당 256색만 가질 수 있습니다. 추출된 JPG는 원본의 제한된 색상을 그대로 물려받으므로, 그라데이션이 포함된 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
+ '워드, 파워포인트, PDF 등 문서 삽입용 이미지.',
152
+ '발표용 파일 및 마케팅 기획안 자료 구축.',
153
+ '윈도우, 맥, 모바일 등 모든 환경의 이미지 뷰어와 완벽 호환.',
154
+ ],
155
+ },
156
+ {
157
+ type: 'title',
158
+ text: '결론: 애니메이션 전체보다 가치 있는 결정적 한 장면',
159
+ level: 3,
160
+ },
161
+ {
162
+ type: 'paragraph',
163
+ html: '2MB 용량의 GIF 애니메이션에서 약 50~200KB 수준의 가벼운 JPG 프레임을 생성할 수 있습니다. 당사의 도구는 서버에 파일을 업로드하지 않고 브라우저에서 즉시 프라이버시를 보호하며 변환을 완료합니다. 기다림 없이 지금 바로 확인해 보세요.',
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: '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 { GifAJpgLocaleContent } from '../index';
4
+
5
+ const slug = 'gif-naar-jpg-converter';
6
+ const title = 'GIF naar JPG Online Converteren';
7
+ const description =
8
+ 'Extraheer het eerste frame uit je GIF\'s en converteer het naar JPG. Zonder server. Lokale verwerking in je browser. Gratis en onbeperkt.';
9
+
10
+ const ui: ImageConverterUI = {
11
+ dragText: 'Sleep GIF-bestanden hierheen...',
12
+ convertText: 'Om ze direct naar JPG 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: GifAJpgLocaleContent['faq'] = [
22
+ {
23
+ question: 'Wat gebeurt er met de animaties als ik naar JPG ga?',
24
+ answer:
25
+ 'Het JPG-formaat is strikt statisch en ondersteunt geen meerdere frames. Onze converter extraheert alleen het eerste beeld of frame dat in de GIF-sequentie verschijnt.',
26
+ },
27
+ {
28
+ question: 'Verlies ik speciale effecten of een transparante achtergrond?',
29
+ answer:
30
+ 'Ja, dat is het natuurlijke gedrag van de JPG-standaard. Als je een GIF met een transparante achtergrond uploadt, voegen we automatisch een solide witte achtergrondlaag toe om kleurcorruptie te voorkomen.',
31
+ },
32
+ {
33
+ question: 'Kan ik JPG-foto\'s uit een GIF extraheren zonder dat de site mijn inhoud opslaat?',
34
+ answer:
35
+ 'Absoluut ja. De tool is een Web App gebaseerd op het Canvas van HTML5. De gehele decodering wordt uitgevoerd door de processor van je eigen fysieke apparaat.',
36
+ },
37
+ ];
38
+
39
+ const howTo: GifAJpgLocaleContent['howTo'] = [
40
+ {
41
+ name: 'Sleep Beweegbare Zware Bestanden',
42
+ text: 'Plaats of sleep die GIF uit je map naar onze verwerkingsbox.',
43
+ },
44
+ {
45
+ name: 'Schone Berekening van het Eerste Frame',
46
+ text: 'In fracties van tijd wordt de animatie geëxtraheerd en de solide witte JPG gemaakt zonder servers te contacteren.',
47
+ },
48
+ {
49
+ name: 'Download ze Verpakt in een ZIP-bestand',
50
+ text: 'Download ze via de knoppen of gebruik de ZIP als je een groot aantal bestanden hebt verwerkt.',
51
+ },
52
+ ];
53
+
54
+ const bibliography: GifAJpgLocaleContent['bibliography'] = [
55
+ {
56
+ name: 'Technische Specificatie 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 naar JPG Converter: Extraheer Frames als Hoogwaardige Afbeeldingen',
69
+ level: 2,
70
+ },
71
+ {
72
+ type: 'paragraph',
73
+ html: 'GIF-bestanden domineren al decennia de wereld van korte animaties op internet. Hun geanimeerde aard maakt ze echter volledig nutteloos als thumbnail, preview voor sociale netwerken of afbeelding voor documenten. Wanneer je een specifiek frame uit een GIF moet extraheren en converteren naar een statisch beeld van hoge kwaliteit, is de conversie naar JPG de meest praktische en compatibele oplossing.',
74
+ },
75
+ {
76
+ type: 'title',
77
+ text: 'GIF of JPG? Formaten met tegengestelde doelen',
78
+ level: 3,
79
+ },
80
+ {
81
+ type: 'paragraph',
82
+ html: 'De GIF (Graphics Interchange Format) werd in 1987 ontworpen met een strikte beperking die vandaag de dag nog steeds bestaat: het kan slechts 256 kleuren per frame weergeven. Deze technische beperking was niet erg voor eenvoudige animaties met beperkte paletten, maar maakt het een visueel arm formaat voor echte foto-opnamen. De JPG daarentegen kan miljoenen kleuren renderen met geavanceerde perceptuele compressie-algoritmen.',
83
+ },
84
+ {
85
+ type: 'paragraph',
86
+ html: 'Het extraheren van een frame uit een GIF en het opslaan als JPG heeft meerdere toepassingen: het genereren van thumbnails voor videospelers, het maken van previews voor contentbeheerplatformen, het verkrijgen van statische beelden voor presentaties of simpelweg het archiveren van een visueel moment uit een complexe animatie. De resulterende JPG zal veel lichter zijn dan de originele GIF en universeel compatibel.',
87
+ },
88
+ {
89
+ type: 'title',
90
+ text: 'Vergelijking van Architectuur: Lokaal 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 om ze te verwerken.',
99
+ icon: 'mdi:cloud-upload',
100
+ pointIcon: 'mdi:close-circle-outline',
101
+ points: [
102
+ 'Je GIF\'s reizen via internet naar servers van derden',
103
+ 'Netwerklatentie bij uploaden en downloaden',
104
+ 'Limieten op grootte en aantal bestanden per sessie',
105
+ 'Risico op gegevensretentie op externe servers',
106
+ ],
107
+ },
108
+ {
109
+ title: 'Onze Lokale Architectuur',
110
+ description: 'Directe verwerking op je hardware via Vanilla JS-technologie.',
111
+ icon: 'mdi:laptop-mac',
112
+ highlight: true,
113
+ points: [
114
+ 'De GIF verlaat nooit je apparaat',
115
+ 'Onmiddellijke snelheid zonder wachttijd op het netwerk',
116
+ 'Zonder limieten op grootte of aantal bestanden',
117
+ 'Volledige privacy: 0 bytes naar buiten verzonden',
118
+ ],
119
+ },
120
+ ],
121
+ },
122
+ {
123
+ type: 'title',
124
+ text: 'Hoe de technische frame-extractie werkt',
125
+ level: 3,
126
+ },
127
+ {
128
+ type: 'paragraph',
129
+ html: 'De lokale conversie steunt op de kracht van de Canvas API van HTML5. Wanneer je een GIF laadt, decodeert de browser deze in het geheugen als een eigen Image-element. Door het op een onzichtbaar canvas te renderen, legt de grafische engine van de browser automatisch het eerste frame van de animatiesequentie vast.',
130
+ },
131
+ {
132
+ type: 'paragraph',
133
+ html: 'Aangezien het JPG-formaat geen transparantie ondersteunt, past ons algoritme een solide witte achtergrond toe voordat het exporteert. De <code>toDataURL(\'image/jpeg\')</code> methode van het canvas genereert de JPG-bytestroom direct in het RAM-geheugen van je computer, zonder enige netwerkverbinding. Het resulterende bestand wordt onmiddellijk naar je apparaat gedownload.',
134
+ },
135
+ {
136
+ type: 'tip',
137
+ title: 'Beperkt kleurenpalet van de GIF',
138
+ html: 'De GIF kan slechts 256 kleuren per frame bevatten. De geëxtraheerde JPG erft dat beperkte palet van het origineel over: als de GIF overgangen of foto\'s had, kan deze er wat geposteriseerd uitzien. Gebruik voor het beste resultaat GIF\'s met eenvoudige kleuren of illustraties.',
139
+ },
140
+ {
141
+ type: 'title',
142
+ text: 'Gebruiksscenario\'s en compatibiliteit van de resulterende JPG',
143
+ level: 3,
144
+ },
145
+ {
146
+ type: 'list',
147
+ icon: 'mdi:check-circle',
148
+ items: [
149
+ 'Thumbnails en previews voor videoplatforms en CMS.',
150
+ 'Omslagafbeeldingen voor posts op sociale netwerken.',
151
+ 'Invoegen in Word-, PowerPoint- of PDF-documenten.',
152
+ 'Presentatiebestanden en marketingmateriaal.',
153
+ 'Universele compatibiliteit met viewers op Windows, macOS en mobiel.',
154
+ ],
155
+ },
156
+ {
157
+ type: 'title',
158
+ text: 'Conclusie: het frame dat meer waard is dan de animatie',
159
+ level: 3,
160
+ },
161
+ {
162
+ type: 'paragraph',
163
+ html: 'Een geanimeerde GIF van 2 MB kan een JPG van het eerste frame produceren van slechts ongeveer 50-200 KB, afhankelijk van de resolutie. Onze tool voert deze conversie onmiddellijk, privé en onbeperkt uit, rechtstreeks in je browser. Geen servers, geen accounts, geen wachttijden.',
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: '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 { GifAJpgLocaleContent } from '../index';
4
+
5
+ const slug = 'konwerter-gif-na-jpg';
6
+ const title = 'Konwersja GIF na JPG Online';
7
+ const description =
8
+ 'Wyodrębnij pierwszą klatkę ze swoich plików GIF i przekonwertuj ją na JPG. Bez serwera. Przetwarzanie lokalne w przeglądarce. Darmowe i nieograniczone.';
9
+
10
+ const ui: ImageConverterUI = {
11
+ dragText: 'Przeciągnij pliki GIF...',
12
+ convertText: 'Aby błyskawicznie konwertować je na JPG',
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: GifAJpgLocaleContent['faq'] = [
22
+ {
23
+ question: 'Co dzieje się z animacjami po przejściu na format JPG?',
24
+ answer:
25
+ 'Format JPG jest ściśle statyczny i nie obsługuje wielu klatek. Nasz konwerter wyodrębnia wyłącznie pierwszy obraz lub klatkę, która pojawia się w sekwencji pliku GIF.',
26
+ },
27
+ {
28
+ question: 'Czy stracę jakieś efekty specjalne lub przezroczyste tło?',
29
+ answer:
30
+ 'Tak, jest to naturalne zachowanie standardu JPG. Jeśli prześlesz plik GIF z przezroczystym tłem, automatycznie wstawimy pod spód jednolitą białą warstwę, aby uniknąć błędów w kolorach.',
31
+ },
32
+ {
33
+ question: 'Czy mogę wyodrębnić zdjęcia JPG z pliku GIF bez zapisywania treści przez witrynę?',
34
+ answer:
35
+ 'Absolutnie tak. Narzędzie jest aplikacją internetową opartą na interfejsie Canvas języka HTML5. Całe dekodowanie wykonuje procesor Twojego własnego urządzenia fizycznego.',
36
+ },
37
+ ];
38
+
39
+ const howTo: GifAJpgLocaleContent['howTo'] = [
40
+ {
41
+ name: 'Przeciągnij ruchome ciężkie pliki',
42
+ text: 'Umieść lub przeciągnij dany plik GIF ze swojego folderu do naszego pola przetwarzania.',
43
+ },
44
+ {
45
+ name: 'Czyste obliczanie pierwszej klatki',
46
+ text: 'W ułamku sekundy animacja zostaje wyodrębniona, tworząc plik JPG z jednolitym białym tłem bez kontaktu z serwerami.',
47
+ },
48
+ {
49
+ name: 'Pobierz je w postaci paczki ZIP',
50
+ text: 'Pobierz pliki za pomocą przycisków lub używając archiwum ZIP, jeśli przetwarzasz dużą liczbę plików.',
51
+ },
52
+ ];
53
+
54
+ const bibliography: GifAJpgLocaleContent['bibliography'] = [
55
+ {
56
+ name: 'Specyfikacja techniczna 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: 'Konwerter GIF na JPG: Wyodrębniaj klatki jako obrazy wysokiej jakości',
69
+ level: 2,
70
+ },
71
+ {
72
+ type: 'paragraph',
73
+ html: 'Pliki GIF od dziesięcioleci dominują w świecie krótkich animacji internetowych. Jednak ich animowana natura czyni je całkowicie bezużytecznymi jako miniatury, podglądy w mediach społecznościowych czy obrazy w dokumentach. Gdy potrzebujesz wyodrębnić konkretną klatkę z pliku GIF i przekształcić ją w wysokiej jakości obraz statyczny, konwersja na JPG jest najbardziej praktycznym i kompatybilnym rozwiązaniem.',
74
+ },
75
+ {
76
+ type: 'title',
77
+ text: 'GIF czy JPG? Formaty o przeciwstawnych przeznaczeniach',
78
+ level: 3,
79
+ },
80
+ {
81
+ type: 'paragraph',
82
+ html: 'Format GIF (Graphics Interchange Format) został zaprojektowany w 1987 roku z poważnym ograniczeniem, które utrzymuje się do dziś: może reprezentować tylko 256 kolorów na klatkę. To techniczne ograniczenie nie miało znaczenia w przypadku prostych animacji z ograniczoną paletą, ale sprawia, że jest to format ubogi wizualnie dla rzeczywistych ujęć fotograficznych. JPG natomiast może renderować miliony kolorów dzięki zaawansowanym algorytmom kompresji percepcyjnej.',
83
+ },
84
+ {
85
+ type: 'paragraph',
86
+ html: 'Wyodrębnienie klatki z pliku GIF i zapisanie jej jako JPG ma wiele zastosowań: generowanie miniatur dla odtwarzaczy wideo, tworzenie podglądów dla platform zarządzania treścią, uzyskiwanie obrazów statycznych do prezentacji lub po prostu archiwizowanie wizualnego momentu złożonej animacji. Wynikowy plik JPG będzie znacznie lżejszy niż oryginalny plik GIF i uniwersalnie kompatybilny.',
87
+ },
88
+ {
89
+ type: 'title',
90
+ text: 'Porównanie architektury: 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 w celu ich przetworzenia.',
99
+ icon: 'mdi:cloud-upload',
100
+ pointIcon: 'mdi:close-circle-outline',
101
+ points: [
102
+ 'Twoje pliki GIF wędrują przez internet do serwerów osób trzecich',
103
+ 'Opóźnienia sieciowe przy przesyłaniu i pobieraniu',
104
+ 'Limity rozmiaru i liczby plików na sesję',
105
+ 'Ryzyko przechowywania danych na cudzych serwerach',
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
+ 'Plik GIF nigdy nie opuszcza Twojego urządzenia',
115
+ 'Błyskawiczna prędkość bez oczekiwania na połączenie z siecią',
116
+ 'Brak limitów rozmiaru i liczby plików',
117
+ 'Całkowita prywatność: 0 bajtów wysyłanych na zewnątrz',
118
+ ],
119
+ },
120
+ ],
121
+ },
122
+ {
123
+ type: 'title',
124
+ text: 'Jak technicznie działa wyodrębnianie klatki',
125
+ level: 3,
126
+ },
127
+ {
128
+ type: 'paragraph',
129
+ html: 'Lokalna konwersja opiera się na mocy interfejsu Canvas API języka HTML5. Po załadowaniu pliku GIF przeglądarka dekoduje go w pamięci jako natywny element Image. Renderując go na niewidocznym płótnie (canvas), silnik graficzny przeglądarki automatycznie przechwytuje pierwszą klatkę sekwencji animacji.',
130
+ },
131
+ {
132
+ type: 'paragraph',
133
+ html: 'Ponieważ format JPG nie obsługuje przezroczystości, nasz algorytm stosuje jednolite białe tło przed eksportem. Metoda <code>toDataURL(\'image/jpeg\')</code> płótna generuje strumień bajtów JPG bezpośrednio w pamięci RAM Twojego komputera, bez żadnego połączenia sieciowego. Wynikowy plik jest natychmiast pobierany na Twoje urządzenie.',
134
+ },
135
+ {
136
+ type: 'tip',
137
+ title: 'Ograniczona paleta kolorów pliku GIF',
138
+ html: 'Plik GIF może zawierać tylko 256 kolorów na klatkę. Wyodrębniony plik JPG odziedziczy tę ograniczoną paletę z oryginału: jeśli GIF posiadał przejścia tonalne lub był fotografią, może być widoczna pewna posteryzacja. Aby uzyskać najlepszy wynik, używaj plików GIF o prostych kolorach lub ilustracji.',
139
+ },
140
+ {
141
+ type: 'title',
142
+ text: 'Przypadki użycia i kompatybilność wynikowego pliku JPG',
143
+ level: 3,
144
+ },
145
+ {
146
+ type: 'list',
147
+ icon: 'mdi:check-circle',
148
+ items: [
149
+ 'Miniatury i podglądy dla platform wideo i systemów CMS.',
150
+ 'Obrazy nagłówkowe do postów w mediach społecznościowych.',
151
+ 'Wstawianie do dokumentów Word, PowerPoint lub PDF.',
152
+ 'Pliki prezentacji i materiały marketingowe.',
153
+ 'Uniwersalna kompatybilność z przeglądarkami na Windows, macOS i urządzeniach mobilnych.',
154
+ ],
155
+ },
156
+ {
157
+ type: 'title',
158
+ text: 'Podsumowanie: klatka warta więcej niż cała animacja',
159
+ level: 3,
160
+ },
161
+ {
162
+ type: 'paragraph',
163
+ html: 'Animowany plik GIF o rozmiarze 2 MB może wyprodukować plik JPG pierwszej klatki o rozmiarze zaledwie 50-200 KB, zależnie od rozdzielczości. Nasze narzędzie wykonuje tę konwersję w sposób błyskawiczny, prywatny i bez limitów, bezpośrednio w Twojej przeglądarce. Bez serwerów, bez kont, bez czekania.',
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: 'pl', faq, howTo }),
178
+ };