@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 { GifAPngLocaleContent } from '../index';
4
+
5
+ const slug = 'convert-gif-to-png';
6
+ const title = 'GIF PNG 온라인 변환기';
7
+ const description =
8
+ 'GIF 파일에서 첫 번째 프레임을 추출하고 투명도를 유지하여 PNG로 변환하세요. 서버 필요 없음. 로컬 처리. 무료 이용 가능.';
9
+
10
+ const ui: ImageConverterUI = {
11
+ dragText: 'GIF 파일을 여기로 드래그하세요...',
12
+ convertText: '즉시 PNG로 변환하기',
13
+ selectFiles: '파일 선택',
14
+ processedFiles: '처리된 파일',
15
+ downloadAll: '모두 다운로드 (.zip)',
16
+ pending: '대기 중',
17
+ bibliographyTitle: '참고 문헌',
18
+ faqTitle: '자주 묻는 질문',
19
+ };
20
+
21
+ const faq: GifAPngLocaleContent['faq'] = [
22
+ {
23
+ question: '왜 GIF와 같은 애니메이션 형식을 PNG와 같은 정지 형식으로 변환하나요?',
24
+ answer:
25
+ '많은 SNS나 아바타 서비스는 움직이는 이미지를 지원하지 않을 수 있습니다. 복잡한 GIF에서 첫 프레임을 고품질 PNG로 추출하면 이러한 제한을 해결하고 불필요한 파일 용량을 줄일 수 있습니다.',
26
+ },
27
+ {
28
+ question: '기존 GIF의 투명도가 변환된 PNG에서도 유지되나요?',
29
+ answer:
30
+ '네, JPG와 달리 PNG 형식은 알파 채널을 유지합니다. 원본 GIF에 투명 배경이 있었다면 PNG에서도 경계선을 선명하게 유지하며 투명도가 보존됩니다.',
31
+ },
32
+ {
33
+ question: '처리 후 내 이미지가 서버에 잠시 동안 보관되나요?',
34
+ answer:
35
+ '어떤 서버도 사용자의 GIF를 보관하지 않습니다. Web Canvas API 덕분에 모든 추출 과정은 로컬에서 이루어집니다. 외부 네트워크 연결 없이 사용자의 PC 프로세서가 안전하게 파일을 디코딩합니다.',
36
+ },
37
+ ];
38
+
39
+ const howTo: GifAPngLocaleContent['howTo'] = [
40
+ {
41
+ name: '애니메이션 파일 준비',
42
+ text: '변환하려는 용량이 큰 GIF 파일들을 입력 영역으로 드래그 앤 드롭하세요.',
43
+ },
44
+ {
45
+ name: '완벽한 프레임 추출',
46
+ text: '시스템이 이미지의 정확한 시작점을 포착하여 수 밀리초 내에 무결점 복사본을 만들어 냅니다.',
47
+ },
48
+ {
49
+ name: '정지 이미지 저장',
50
+ text: '정지된 PNG 형식으로 변환된 GIF 아바타들을 ZIP 파일로 묶어서 대량 저장하세요.',
51
+ },
52
+ ];
53
+
54
+ const bibliography: GifAPngLocaleContent['bibliography'] = [
55
+ {
56
+ name: 'World Wide Web Consortium: PNG format',
57
+ url: 'https://www.w3.org/TR/png/',
58
+ },
59
+ {
60
+ name: 'CompuServe GIF Information',
61
+ url: 'https://www.w3.org/Graphics/GIF/spec-gif89a.txt',
62
+ },
63
+ ];
64
+
65
+ const seo: GifAPngLocaleContent['seo'] = [
66
+ {
67
+ type: 'title',
68
+ text: 'GIF to PNG 변환기: GIF의 색상과 투명도 한계를 넘어서는 품질',
69
+ level: 2,
70
+ },
71
+ {
72
+ type: 'paragraph',
73
+ html: 'GIF는 모니터가 겨우 256색만 표현할 수 있던 시절에 설계되었습니다. 수십 년이 지난 지금도 이러한 한계는 큰 약점으로 남아 있습니다. PNG는 바로 이러한 품질과 투명도가 중요한 모든 경우(로고, 아이콘, 인터페이스 그래픽, 어떤 배경색 위에서도 완벽하게 보여야 하는 투명 배경 이미지 등)에서 GIF를 대체하기 위해 탄생했습니다.',
74
+ },
75
+ {
76
+ type: 'title',
77
+ text: 'GIF vs PNG: 1,600만 색상의 혁명',
78
+ level: 3,
79
+ },
80
+ {
81
+ type: 'paragraph',
82
+ html: 'GIF와 PNG의 가장 결정적인 차이점은 색상 수만이 아닙니다. GIF는 이진 투명도(불투명하거나 완전히 투명함)만을 지원하여 그라데이션 처리가 불가능합니다. 반면 PNG는 픽셀당 256단계의 불투명도를 부여하는 전체 알파 채널을 지원합니다. 이는 PNG 로고의 경계선이 완벽하게 부드럽게 보정될 수 있음을 의미하며, GIF 로고는 유색 배경 위에서 특유의 계단 현상이 나타납니다.',
83
+ },
84
+ {
85
+ type: 'paragraph',
86
+ html: '우수한 투명도 외에도 PNG는 GIF의 256색 제한을 없앴습니다. 스크린샷, 그래데이션이 있는 일러스트레이션, 그림자가 있는 로고 등 모든 이미지가 PNG에서 훨씬 더 선명하게 보입니다. 또한 무손실 압축이므로 JPG 변환 시 발생하는 노이즈 없이 각 픽셀이 원본 값을 정확하게 유지합니다.',
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: '로컬 환경의 GIF to PNG 변환 원리',
125
+ level: 3,
126
+ },
127
+ {
128
+ type: 'paragraph',
129
+ html: '이 변환은 브라우저의 Canvas API를 활용합니다. GIF는 메모리 내에서 네이티브 Image 요소로 디코딩됩니다. HTML5 캔버스 위에서 렌더링이 이루어지며, 브라우저 엔진은 원본의 투명도 정보를 그대로 유지하면서 첫 번째 프레임을 캡처합니다.',
130
+ },
131
+ {
132
+ type: 'paragraph',
133
+ html: 'JPG 변환과 달리 PNG는 흰색 배경을 추가할 필요가 없습니다. 원본 GIF의 알파 채널이 내보낸 PNG 파일에 그대로 보존됩니다. 캔버스의 <code>toDataURL(\'image/png\')</code> 메서드는 네트워크 전송 없이 사용자의 컴퓨터 RAM에서 직접 PNG 바이트 스트림을 생성하며, 파일은 즉시 다운로드됩니다.',
134
+ },
135
+ {
136
+ type: 'tip',
137
+ title: 'GIF의 이진 투명도 vs PNG의 알파 채널 비교',
138
+ html: 'GIF는 불투명하거나 투명한 두 가지 상태만 지원합니다. PNG로 변환하면 GIF의 반투명한 픽셀들이 브라우저가 해석한 그대로 유지됩니다. 만약 원본 GIF에 계단 현상이 있었다면 PNG에서도 그대로 나타나지만, PNG에서는 이미지 편집기를 통해 부드러운 가장자리 처리가 가능해집니다. 이는 원본 GIF에서는 할 수 없는 작업입니다.',
139
+ },
140
+ {
141
+ type: 'title',
142
+ text: '변환된 PNG의 활용 사례 및 호환성',
143
+ level: 3,
144
+ },
145
+ {
146
+ type: 'list',
147
+ icon: 'mdi:check-circle',
148
+ items: [
149
+ '어떠한 배경색 위에서도 자연스럽게 어울리는 로고 및 아이콘.',
150
+ '디스코드, 텔레그램, 슬랙 및 게이밍 플랫폼용 아바타 이미지.',
151
+ '웹 및 모바일 앱용 고해상도 인터페이스 그래픽.',
152
+ '투명 배경을 가진 개인화된 스티커 및 이모지.',
153
+ '기술 문서 제작을 위한 스크린샷 및 UI 요소.',
154
+ ],
155
+ },
156
+ {
157
+ type: 'title',
158
+ text: '결론: PNG는 GIF가 항상 꿈꿔왔던 모습입니다',
159
+ level: 3,
160
+ },
161
+ {
162
+ type: 'paragraph',
163
+ html: 'GIF에서 PNG로 변환하는 것은 단순한 확장자 변경이 아닙니다. 이미지를 GIF가 결코 도달할 수 없었던 현대적인 표준으로 업데이트하는 과정입니다. 더 많은 색상, 더 뛰어난 투명도, 더 가벼운 용량을 경험해 보세요. 당사의 도구는 외부로 데이터를 전송하지 않고 브라우저에서 수 밀리초 만에 이 과정을 완료합니다.',
164
+ },
165
+ ];
166
+
167
+
168
+ export const content: GifAPngLocaleContent = {
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 { GifAPngLocaleContent } from '../index';
4
+
5
+ const slug = 'gif-naar-png-converter';
6
+ const title = 'GIF naar PNG Online Converteren';
7
+ const description =
8
+ 'Extraheer het eerste frame uit je GIF\'s en converteer het naar PNG met behoud van transparantie. Zonder server. Lokale verwerking. Gratis.';
9
+
10
+ const ui: ImageConverterUI = {
11
+ dragText: 'Sleep GIF-bestanden hierheen...',
12
+ convertText: 'Om ze direct naar PNG te converteren',
13
+ selectFiles: 'Bestanden selecteren',
14
+ processedFiles: 'Verwerkte bestanden',
15
+ downloadAll: 'Alles downloaden (.zip)',
16
+ pending: 'In afwachting',
17
+ bibliographyTitle: 'Bibliografische Referenties',
18
+ faqTitle: 'Veelgestelde Vragen',
19
+ };
20
+
21
+ const faq: GifAPngLocaleContent['faq'] = [
22
+ {
23
+ question: 'Waarom een geanimeerd formaat zoals GIF naar een statisch formaat zoals PNG converteren?',
24
+ answer:
25
+ 'Veel sociale netwerken of avatars ondersteunen geen afbeeldingen die veranderen. Het extraheren van het eerste frame van een complexe GIF naar een hoogwaardige PNG lost barrières op en vermindert onnodig bestandsgewicht.',
26
+ },
27
+ {
28
+ question: 'Blijven de transparanties van de oude GIF behouden in de resulterende PNG?',
29
+ answer:
30
+ 'Ja, in tegenstelling tot JPG behoudt het PNG-formaat het alfakanaal. Als de GIF een transparante achtergrond had, zal de PNG deze behouden met scherpe randen.',
31
+ },
32
+ {
33
+ question: 'Bewaren jullie mijn afbeeldingen na verwerking enige tijd op de servers?',
34
+ answer:
35
+ 'Geen enkele server bewaart je GIF; de gehele extractie is lokaal dankzij de Web Canvas API. Het is de processor van je pc die op veilige wijze je bestand decodeert zonder enig contact met het netwerk.',
36
+ },
37
+ ];
38
+
39
+ const howTo: GifAPngLocaleContent['howTo'] = [
40
+ {
41
+ name: 'Breng de Animatie Dichterbij',
42
+ text: 'Sleep de zware GIF-bestanden naar het invoerveld.',
43
+ },
44
+ {
45
+ name: 'Perfect Geëxtraheerde Foto',
46
+ text: 'Het systeem stopt de exacte oorsprong van de beweging en maakt in milliseconden een onberispelijke kopie.',
47
+ },
48
+ {
49
+ name: 'Sla je Statische Beeld op',
50
+ text: 'Sla alle naar PNG geconverteerde statische GIF-avatars massaal op in een ZIP-bestand.',
51
+ },
52
+ ];
53
+
54
+ const bibliography: GifAPngLocaleContent['bibliography'] = [
55
+ {
56
+ name: 'World Wide Web Consortium: PNG format',
57
+ url: 'https://www.w3.org/TR/png/',
58
+ },
59
+ {
60
+ name: 'CompuServe GIF Information',
61
+ url: 'https://www.w3.org/Graphics/GIF/spec-gif89a.txt',
62
+ },
63
+ ];
64
+
65
+ const seo: GifAPngLocaleContent['seo'] = [
66
+ {
67
+ type: 'title',
68
+ text: 'GIF naar PNG Converter: Overschrijd de kleur- en transparantiegrenzen van GIF',
69
+ level: 2,
70
+ },
71
+ {
72
+ type: 'paragraph',
73
+ html: 'GIF werd ontworpen in een tijd dat monitoren nauwelijks 256 kleuren konden weergeven. Decennia later is die beperking nog steeds de grootste zwakte. PNG werd precies geboren om GIF te vervangen in alle gebruiksscenario\'s waar kwaliteit en transparantie belangrijk zijn: logo\'s, iconen, interface-graphics en elke afbeelding met een transparante achtergrond die er op elke achtergrondkleur perfect uit moet zien.',
74
+ },
75
+ {
76
+ type: 'title',
77
+ text: 'GIF vs PNG: de revolutie van de 16 miljoen kleuren',
78
+ level: 3,
79
+ },
80
+ {
81
+ type: 'paragraph',
82
+ html: 'Het meest cruciale verschil tussen GIF och PNG is niet alleen het aantal kleuren. GIF ondersteunt binaire transparantie: elke pixel is ondoorzichtig of volledig transparant, zonder gradaties. PNG daarentegen ondersteunt het volledige alfakanaal, met 256 niveaus van ondoorzichtigheid per pixel. Dit betekent dat de randen van een logo in PNG perfect kunnen worden gladgestreken, terwijl die van GIF een kenmerkende karteling vertonen op gekleurde achtergronden.',
83
+ },
84
+ {
85
+ type: 'paragraph',
86
+ html: 'Naast de superieure transparantie neemt PNG de grens van 256 kleuren van GIF weg. Screenshots, illustraties met gradiënten, logo\'s met schaduwen: ze zien er allemaal aanzienlijk beter uit in PNG. En omdat het verliesvrije compressie is, behoudt elke pixel precies de originele waarde, zonder de artefacten die een conversie naar JPG zou introduceren.',
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 afbeeldingen op externe servers verwerken.',
99
+ icon: 'mdi:cloud-upload',
100
+ pointIcon: 'mdi:close-circle-outline',
101
+ points: [
102
+ 'Je logo\'s en iconen reizen via internet',
103
+ 'Wachttijd door netwerklatentie',
104
+ 'Limieten op grootte en aantal bestanden',
105
+ 'Je afbeeldingen kunnen in caches van derden blijven staan',
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 conversie zonder netwerk',
116
+ 'Zonder limieten op bestanden of grootte',
117
+ 'Absolute privacy: 0 bytes verzonden',
118
+ ],
119
+ },
120
+ ],
121
+ },
122
+ {
123
+ type: 'title',
124
+ text: 'Hoe de lokale GIF naar PNG conversie werkt',
125
+ level: 3,
126
+ },
127
+ {
128
+ type: 'paragraph',
129
+ html: 'De conversie maakt gebruik van de Canvas API van de browser. De GIF wordt in het geheugen gedecodeerd als een eigen Image-element. Door het op een HTML5-canvas te renderen, legt de grafische engine van de browser het eerste frame vast met al zijn originele transparantie-informatie intact.',
130
+ },
131
+ {
132
+ type: 'paragraph',
133
+ html: 'In tegenstelling tot de conversie naar JPG, is bij PNG geen witte achtergrond nodig. Het alfakanaal van de originele GIF wordt direct bewaard in de geëxporteerde PNG. De <code>toDataURL(\'image/png\')</code> methode genereert de PNG-bytestroom in het RAM-geheugen van je computer zonder enige netwerktransmissie, en het bestand wordt direct gedownload.',
134
+ },
135
+ {
136
+ type: 'tip',
137
+ title: 'Binaire transparantie van GIF vs alfakanaal van PNG',
138
+ html: 'GIF ondersteunt alleen binaire transparantie (ondoorzichtig of transparant). Bij het converteren naar PNG blijven de half-transparante pixels van de GIF behouden zoals de browser ze interpreteert. Als je GIF kartelige randen heeft, zal de PNG deze behouden — maar je kunt ze bewerken met randverzachting in elke editor, iets wat onmogelijk is met de originele GIF.',
139
+ },
140
+ {
141
+ type: 'title',
142
+ text: 'Gebruiksscenario\'s en compatibiliteit van de resulterende PNG',
143
+ level: 3,
144
+ },
145
+ {
146
+ type: 'list',
147
+ icon: 'mdi:check-circle',
148
+ items: [
149
+ 'Logo\'s en iconen voor gebruik op elke achtergrondkleur.',
150
+ 'Avatars voor Discord, Telegram, Slack en gamingplatforms.',
151
+ 'Interface-graphics voor web- en mobiele apps.',
152
+ 'Gepersonaliseerde stickers en emoji\'s met transparante achtergrond.',
153
+ 'Screenshots en UI-elementen voor technische documentatie.',
154
+ ],
155
+ },
156
+ {
157
+ type: 'title',
158
+ text: 'Conclusie: PNG is wat de GIF altijd had willen zijn',
159
+ level: 3,
160
+ },
161
+ {
162
+ type: 'paragraph',
163
+ html: 'Converteren van GIF naar PNG is niet alleen een formaatverandering: het is het bijwerken van een afbeelding naar de moderne standaard die de GIF nooit heeft kunnen bereiken. Meer kleuren, betere transparantie, minder gewicht. Onze tool voert deze conversie in milliseconden uit, direct in je browser, zonder gegevens naar buiten te sturen.',
164
+ },
165
+ ];
166
+
167
+
168
+ export const content: GifAPngLocaleContent = {
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 { GifAPngLocaleContent } from '../index';
4
+
5
+ const slug = 'konwerter-gif-na-png';
6
+ const title = 'Konwersja GIF na PNG Online';
7
+ const description =
8
+ 'Wyodrębnij pierwszą klatkę ze swoich plików GIF i przekonwertuj ją na PNG z zachowaniem przezroczystości. Bez serwera. Przetwarzanie lokalne. Darmowe.';
9
+
10
+ const ui: ImageConverterUI = {
11
+ dragText: 'Przeciągnij pliki GIF...',
12
+ convertText: 'Aby błyskawicznie konwertować je na PNG',
13
+ selectFiles: 'Wybierz pliki',
14
+ processedFiles: 'Przetworzone pliki',
15
+ downloadAll: 'Pobierz wszystko (.zip)',
16
+ pending: 'Oczekiwanie',
17
+ bibliographyTitle: 'Bibliografia',
18
+ faqTitle: 'Często zadawane pytania',
19
+ };
20
+
21
+ const faq: GifAPngLocaleContent['faq'] = [
22
+ {
23
+ question: 'Dlaczego warto konwertować format animowany, taki jak GIF, na format statyczny, taki jak PNG?',
24
+ answer:
25
+ 'Wiele sieci społecznościowych lub awatarów nie obsługuje obrazów, które się zmieniają. Wyodrębnienie pierwszej klatki ze złożonego GIF-a do wysokiej jakości pliku PNG rozwiązuje ten problem i redukuje zbędny rozmiar pliku.',
26
+ },
27
+ {
28
+ question: 'Czy przezroczystości ze starego GIF-a zostaną zachowane w wynikowym pliku PNG?',
29
+ answer:
30
+ 'Tak, w przeciwieństwie do JPG, format PNG zachowuje kanał alfa. Jeśli GIF posiadał przezroczyste tło, plik PNG zachowa je z wyraźnymi krawędziami.',
31
+ },
32
+ {
33
+ question: 'Czy przechowujecie moje obrazy na serwerach przez jakiś czas po przetworzeniu?',
34
+ answer:
35
+ 'Żaden serwer nie przechowuje Twoich plików GIF; całe wyodrębnianie odbywa się lokalnie dzięki interfejsowi Web Canvas API. To procesor Twojego komputera bezpiecznie dekoduje plik bez kontaktu z siecią.',
36
+ },
37
+ ];
38
+
39
+ const howTo: GifAPngLocaleContent['howTo'] = [
40
+ {
41
+ name: 'Przeciągnij Animację',
42
+ text: 'Przemieść ciężkie pliki GIF do pola wstawiania.',
43
+ },
44
+ {
45
+ name: 'Idealnie Wyodrębnione Zdjęcie',
46
+ text: 'System zatrzyma ruch dokładnie w punkcie początkowym, tworząc nieskazitelną kopię w ciągu milisekund.',
47
+ },
48
+ {
49
+ name: 'Zapisz swój Statyczny Obraz',
50
+ text: 'Zapisz zbiorczo w formacie ZIP wszystkie awatary GIF przekonwertowane na statyczny format PNG.',
51
+ },
52
+ ];
53
+
54
+ const bibliography: GifAPngLocaleContent['bibliography'] = [
55
+ {
56
+ name: 'World Wide Web Consortium: PNG format',
57
+ url: 'https://www.w3.org/TR/png/',
58
+ },
59
+ {
60
+ name: 'CompuServe GIF Information',
61
+ url: 'https://www.w3.org/Graphics/GIF/spec-gif89a.txt',
62
+ },
63
+ ];
64
+
65
+ const seo: GifAPngLocaleContent['seo'] = [
66
+ {
67
+ type: 'title',
68
+ text: 'Konwerter GIF na PNG: Pokonaj ograniczenia kolorów i przezroczystości GIF',
69
+ level: 2,
70
+ },
71
+ {
72
+ type: 'paragraph',
73
+ html: 'Format GIF został zaprojektowany w czasach, gdy monitory ledwo mogły wyświetlać 256 kolorów. Dziesięciolecia później to ograniczenie pozostaje jego największą słabością. PNG narodziło się właśnie po to, by zastąpić GIF we wszystkich przypadkach użycia, w których jakość i przezroczystość mają znaczenie: logo, ikony, grafiki interfejsu i wszelkie obrazy z przezroczystym tłem, które muszą wyglądać idealnie na każdym tle.',
74
+ },
75
+ {
76
+ type: 'title',
77
+ text: 'GIF vs PNG: rewolucja 16 milionów kolorów',
78
+ level: 3,
79
+ },
80
+ {
81
+ type: 'paragraph',
82
+ html: 'Najważniejsza różnica między GIF a PNG to nie tylko liczba kolorów. GIF obsługuje przezroczystość binarną: każdy piksel jest albo nieprzezroczysty, albo całkowicie przezroczysty, bez stopniowania. PNG natomiast obsługuje pełny kanał alfa, z 256 poziomami nieprzezroczystości na piksel. Oznacza to, że krawędzie logo w formacie PNG mogą być idealnie wygładzone, podczas gdy te w formacie GIF wykazują charakterystyczne ząbkowanie na kolorowych tłach.',
83
+ },
84
+ {
85
+ type: 'paragraph',
86
+ html: 'Oprócz doskonałej przezroczystości, PNG eliminuje limit 256 kolorów GIF. Zrzuty ekranu, ilustracje z gradientami, logo z cieniami – wszystkie wyglądają znacznie lepiej w formacie PNG. A ponieważ jest to kompresja bezstratna, każdy piksel zachowuje dokładnie oryginalną wartość, bez artefaktów, które wprowadziłaby konwersja do JPG.',
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 przetwarzające Twoje obrazy na zdalnych serwerach.',
99
+ icon: 'mdi:cloud-upload',
100
+ pointIcon: 'mdi:close-circle-outline',
101
+ points: [
102
+ 'Twoje logo i ikony wędrują przez internet',
103
+ 'Czas oczekiwania wynikający z opóźnień sieci',
104
+ 'Limity rozmiaru i liczby plików',
105
+ 'Twoje obrazy mogą pozostać w pamięci podręcznej osób trzecich',
106
+ ],
107
+ },
108
+ {
109
+ title: 'Nasza lokalna architektura',
110
+ description: 'Przetwarzanie bezpośrednio na Twoim sprzęcie za pomocą technologii Vanilla JS.',
111
+ icon: 'mdi:laptop-mac',
112
+ highlight: true,
113
+ points: [
114
+ 'Plik GIF nigdy nie opuszcza Twojego urządzenia',
115
+ 'Natychmiastowa konwersja bez transmisji sieciowej',
116
+ 'Brak limitów liczby plików i rozmiaru',
117
+ 'Całkowita prywatność: 0 bajtów wysyłanych na zewnątrz',
118
+ ],
119
+ },
120
+ ],
121
+ },
122
+ {
123
+ type: 'title',
124
+ text: 'Jak działa lokalna konwersja GIF na PNG',
125
+ level: 3,
126
+ },
127
+ {
128
+ type: 'paragraph',
129
+ html: 'Konwersja wykorzystuje interfejs Canvas API przeglądarki. Plik GIF jest dekodowany w pamięci jako natywny element Image. Renderując go na płótnie HTML5, silnik graficzny przeglądarki przechwytuje pierwszą klatkę z nienaruszoną oryginalną informacją o przezroczystości.',
130
+ },
131
+ {
132
+ type: 'paragraph',
133
+ html: 'W przeciwieństwie do konwersji do JPG, w przypadku PNG nie ma potrzeby dodawania białego tła. Kanał alfa oryginalnego GIF-a jest zachowywany bezpośrednio w wyeksportowanym pliku PNG. Metoda <code>toDataURL(\'image/png\')</code> generuje strumień bajtów PNG w pamięci RAM komputera bez konieczności transmisji sieciowej, a plik jest pobierany bezpośrednio.',
134
+ },
135
+ {
136
+ type: 'tip',
137
+ title: 'Przezroczystość binarna GIF vs kanał alfa PNG',
138
+ html: 'GIF obsługuje tylko przezroczystość binarną (nieprzezroczysty lub przezroczysty). Przy konwersji do PNG, półprzezroczyste piksele GIF są zachowywane tak, jak interpretuje je przeglądarka. Jeśli Twój GIF ma ząbkowane krawędzie, plik PNG je zachowa – ale będziesz mógł je edytować z wygładzaniem krawędzi w dowolnym edytorze, co jest niemożliwe w przypadku oryginalnego GIF-a.',
139
+ },
140
+ {
141
+ type: 'title',
142
+ text: 'Przypadki użycia i kompatybilność wynikowego pliku PNG',
143
+ level: 3,
144
+ },
145
+ {
146
+ type: 'list',
147
+ icon: 'mdi:check-circle',
148
+ items: [
149
+ 'Logo i ikony do użytku na dowolnym tle kolorystycznym.',
150
+ 'Awatary dla Discord, Telegram, Slack i platform gamingowych.',
151
+ 'Grafiki interfejsu dla aplikacji internetowych i mobilnych.',
152
+ 'Spersonalizowane naklejki i emoji z przezroczystym tłem.',
153
+ 'Zrzuty ekranu i elementy interfejsu użytkownika dla dokumentacji technicznej.',
154
+ ],
155
+ },
156
+ {
157
+ type: 'title',
158
+ text: 'Podsumowanie: PNG to forma, którą GIF zawsze chciał być',
159
+ level: 3,
160
+ },
161
+ {
162
+ type: 'paragraph',
163
+ html: 'Konwersja z formatu GIF do PNG to nie tylko zmiana formatu: to aktualizacja obrazu do nowoczesnego standardu, którego GIF nigdy nie zdołał osiągnąć. Więcej kolorów, lepsza przezroczystość, mniejszy rozmiar. Nasze narzędzie wykonuje tę konwersję w milisekundach bez przesyłania jakichkolwiek danych na zewnątrz.',
164
+ },
165
+ ];
166
+
167
+
168
+ export const content: GifAPngLocaleContent = {
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
+ };