@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 { GifAPngLocaleContent } from '../index';
4
+
5
+ const slug = 'gif-png-donusturucu';
6
+ const title = 'GIF\'i PNG\'ye Çevrimiçi Dönüştür';
7
+ const description =
8
+ 'GIF dosyalarınızdan ilk kareyi çıkarın ve şeffaflığı koruyarak bunu PNG\'ye dönüştürün. Sunucu yok. Yerel işleme. Ücretsiz.';
9
+
10
+ const ui: ImageConverterUI = {
11
+ dragText: 'GIF dosyalarını buraya sürükleyin...',
12
+ convertText: 'Anında PNG\'ye dönüştürmek için',
13
+ selectFiles: 'Dosyaları seçin',
14
+ processedFiles: 'İşlenen dosyalar',
15
+ downloadAll: 'Tümünü İndir (.zip)',
16
+ pending: 'Bekliyor',
17
+ bibliographyTitle: 'Bibliyografik Referanslar',
18
+ faqTitle: 'Sıkça Sorulan Sorular',
19
+ };
20
+
21
+ const faq: GifAPngLocaleContent['faq'] = [
22
+ {
23
+ question: 'Neden GIF gibi animasyonlu bir formatı PNG gibi statik bir formata dönüştürelim?',
24
+ answer:
25
+ 'Pek çok sosyal ağ veya avatar, değişen fotoğrafları kabul etmez. Karmaşık bir GIF\'in ilk karesini yüksek kaliteli bir PNG\'ye çıkarmak engelleri çözer ve işe yaramaz dosya ağırlığını azaltır.',
26
+ },
27
+ {
28
+ question: 'Eski GIF\'teki şeffaflıklar sonuç PNG\'sinde korunur mu?',
29
+ answer:
30
+ 'Evet, JPG\'nin aksine PNG formatı alfa kanalını korur. GIF\'in şeffaf bir arka planı varsa, PNG bunu keskin kenarlarla koruyacaktır.',
31
+ },
32
+ {
33
+ question: 'İşlemeden sonra görsellerimi bir süre sunucularda tutuyor musunuz?',
34
+ answer:
35
+ 'Hiçbir sunucu GIF\'inizi tutmaz; Web Canvas API sayesinde tüm çıkarma işlemi yereldir. Dosyanızı herhangi bir ağ teması olmadan güvenli bir şekilde çözen PC\'nizin işlemcisidir.',
36
+ },
37
+ ];
38
+
39
+ const howTo: GifAPngLocaleContent['howTo'] = [
40
+ {
41
+ name: 'Animasyonu Hazırlayın',
42
+ text: 'Ağır GIF dosyalarını ekleme kutusuna sürükleyin.',
43
+ },
44
+ {
45
+ name: 'Mükemmel Çıkarılmış Fotoğraf',
46
+ text: 'Sistem, hareketin tam kaynağını dondurarak milisaniyeler içinde kusursuz bir kopya çıkaracaktır.',
47
+ },
48
+ {
49
+ name: 'Statik Görüntünüzü Kaydedin',
50
+ text: 'Statik PNG formatına dönüştürülen GIF avatarlarını toplu olarak ZIP olarak kaydedin.',
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-PNG Dönüştürücü: GIF\'in Renk ve Şeffaflık Sınırlarını Aşın',
69
+ level: 2,
70
+ },
71
+ {
72
+ type: 'paragraph',
73
+ html: 'GIF, monitörlerin ancak 256 rengi gösterebildiği bir çağda tasarlandı. Onlarca yıl sonra, bu kısıtlama hala en büyük zayıflığı olmaya devam ediyor. PNG, kalitenin ve şeffaflığın önemli olduğu tüm kullanım durumlarında GIF\'in yerini almak üzere tam olarak bu yüzden doğdu: logolar, simgeler, arayüz grafikleri ve herhangi bir arka plan renginde mükemmel görünmesi gereken şeffaf arka planlı her türlü görüntü.',
74
+ },
75
+ {
76
+ type: 'title',
77
+ text: 'GIF vs PNG: 16 milyon renk devrimi',
78
+ level: 3,
79
+ },
80
+ {
81
+ type: 'paragraph',
82
+ html: 'GIF ve PNG arasındaki en kritik fark sadece renk sayısı değildir. GIF ikili şeffaflığı destekler: her piksel ya opak ya da tamamen şeffaftır, geçişler yoktur. PNG ise piksel başına 256 opaklık seviyesi ile tam alfa kanalını destekler. Bu, PNG\'deki bir logonun kenarlarının mükemmel şekilde pürüzsüzleştirilebileceği anlamına gelirken, GIF\'tekiler renkli arka planlar üzerinde karakteristik bir tırtıklı yapı gösterir.',
83
+ },
84
+ {
85
+ type: 'paragraph',
86
+ html: 'Üstün şeffaflığa ek olarak PNG, GIF\'in 256 renk sınırını ortadan kaldırır. Ekran görüntüleri, gradyanlı illüstrasyonlar, gölgeli logolar: bunların hepsi PNG\'de önemli ölçüde daha iyi görünür. Ve kayıpsız sıkıştırma olduğundan, her piksel, bir JPG dönüşümünün getireceği yapay dokular olmadan tam olarak orijinal değerini korur.',
87
+ },
88
+ {
89
+ type: 'title',
90
+ text: 'Mimari Karşılaştırması: Yerel vs Bulut',
91
+ level: 3,
92
+ },
93
+ {
94
+ type: 'comparative',
95
+ items: [
96
+ {
97
+ title: 'Bulut Dönüştürücüler',
98
+ description: 'Görüntülerinizi uzak sunucularda işleyen araçlar.',
99
+ icon: 'mdi:cloud-upload',
100
+ pointIcon: 'mdi:close-circle-outline',
101
+ points: [
102
+ 'Logolarınız ve simgeleriniz internet üzerinden iletilir',
103
+ 'Ağ gecikmesi nedeniyle bekleme süresi',
104
+ 'Boyut ve dosya sayısı sınırları',
105
+ 'Görselleriniz üçüncü taraf önbelleklerinde kalabilir',
106
+ ],
107
+ },
108
+ {
109
+ title: 'Yerel Mimarimiz',
110
+ description: 'Vanilla JS teknolojisi ile doğrudan donanımınızda işleme.',
111
+ icon: 'mdi:laptop-mac',
112
+ highlight: true,
113
+ points: [
114
+ 'GIF cihazınızı asla terk etmez',
115
+ 'Ağ olmadan anında dönüşüm',
116
+ 'Dosya veya boyut sınırı yok',
117
+ 'Mutlak gizlilik: 0 bayt gönderilir',
118
+ ],
119
+ },
120
+ ],
121
+ },
122
+ {
123
+ type: 'title',
124
+ text: 'Yerel GIF-PNG dönüşümü nasıl çalışır?',
125
+ level: 3,
126
+ },
127
+ {
128
+ type: 'paragraph',
129
+ html: 'Dönüşüm, tarayıcının Canvas API\'sini kullanır. GIF, bellekte yerel bir Image öğesi olarak çözülür. HTML5 tuvali üzerinde işlenirken tarayıcının grafik motoru, orijinal şeffaflık bilgisi bozulmadan ilk kareyi yakalar.',
130
+ },
131
+ {
132
+ type: 'paragraph',
133
+ html: 'JPG dönüşümünün aksine, PNG ile beyaz bir arka plan eklemek gerekmez. Orijinal GIF\'in alfa kanalı doğrudan dışa aktarılan PNG\'de korunur. <code>toDataURL(\'image/png\')</code> yöntemi, herhangi bir ağ iletimi olmadan bilgisayarınızın RAM\'inde PNG bayt akışını oluşturur ve dosya doğrudan indirilir.',
134
+ },
135
+ {
136
+ type: 'tip',
137
+ title: 'GIF ikili şeffaflığı vs PNG alfa kanalı',
138
+ html: 'GIF yalnızca ikili şeffaflığı (opak veya şeffaf) destekler. PNG\'ye dönüştürüldüğünde, GIF\'in yarı şeffaf pikselleri tarayıcının yorumladığı şekilde kalır. GIF\'inizin tırtıklı kenarları varsa, PNG bunları koruyacaktır; ancak bunları herhangi bir editörde kenar yumuşatma ile düzenleyebilirsiniz, bu orijinal GIF ile imkansızdır.',
139
+ },
140
+ {
141
+ type: 'title',
142
+ text: 'Elde edilen PNG\'nin kullanım durumları ve uyumluluğu',
143
+ level: 3,
144
+ },
145
+ {
146
+ type: 'list',
147
+ icon: 'mdi:check-circle',
148
+ items: [
149
+ 'Herhangi bir arka plan renginde kullanım için logolar ve simgeler.',
150
+ 'Discord, Telegram, Slack ve oyun platformları için avatarlar.',
151
+ 'Web ve mobil uygulamalar için arayüz grafikleri.',
152
+ 'Şeffaf arka planlı kişiselleştirilmiş çıkartmalar ve emojiler.',
153
+ 'Teknik dokümantasyon için ekran görüntüleri ve kullanıcı arayüzü öğeleri.',
154
+ ],
155
+ },
156
+ {
157
+ type: 'title',
158
+ text: 'Sonuç: PNG, GIF\'in her zaman olmak istediği şeydir',
159
+ level: 3,
160
+ },
161
+ {
162
+ type: 'paragraph',
163
+ html: 'GIF\'ten PNG\'ye dönüştürmek sadece format değiştirmek değildir: bir görüntüyü GIF\'in asla ulaşamadığı modern standarta güncellemektir. Daha fazla renk, daha iyi şeffaflık, daha az boyut. Aracımız bu dönüşümü, herhangi bir veriyi dışarı göndermeden milisaniyeler içinde doğrudan tarayıcınızda gerçekleştirir.',
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: 'tr', 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 = '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
+ '许多社交网络或头像不支持会动的图片。将复杂 GIF 的第一帧提取到高质量的 PNG 中可以解决这些障碍,并减少不必要的文件体积。',
26
+ },
27
+ {
28
+ question: '旧 GIF 的透明度会在生成的 PNG 中保留吗?',
29
+ answer:
30
+ '是的,与 JPG 不同,PNG 格式保留 Alpha 通道。如果 GIF 有透明背景,PNG 将保留它并保持边缘清晰。',
31
+ },
32
+ {
33
+ question: '处理后,我的图片会在服务器上保留一段时间吗?',
34
+ answer:
35
+ '没有任何服务器会保留您的 GIF;由于 Web Canvas API 的作用,所有提取均在本地完成。是您电脑的处理器在没有任何网络接触的情况下安全地解码您的文件。',
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 转 PNG 转换器:克服 GIF 的颜色和透明度限制',
69
+ level: 2,
70
+ },
71
+ {
72
+ type: 'paragraph',
73
+ html: 'GIF 设计于显示器几乎只能显示 256 色的年代。几十年后,这一限制仍然是它最大的弱点。PNG 的诞生正是为了在所有重视质量和透明度的用例中取代 GIF:Logo、图标、界面图形以及任何在任何背景色上都必须看起来完美的透明背景图像。',
74
+ },
75
+ {
76
+ type: 'title',
77
+ text: 'GIF vs PNG:1600 万色的革命',
78
+ level: 3,
79
+ },
80
+ {
81
+ type: 'paragraph',
82
+ html: 'GIF 和 PNG 之间最关键的区别不仅仅是颜色的数量。GIF 支持二进制透明:每个像素要么不透明,要么完全透明,没有灰度等级。而 PNG 支持完整的 Alpha 通道,每个像素具有 256 个不透明度级别。这意味着 PNG 中的 Logo 边缘可以被完美平滑,而 GIF 在彩色背景上展现出特征性的锯齿。',
83
+ },
84
+ {
85
+ type: 'paragraph',
86
+ html: '除了卓越的透明度外,PNG 还消除了 GIF 的 256 色限制。屏幕截图、带有渐变的插图、带有阴影的 Logo:所有这些在 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
+ '您的 Logo 和图标通过互联网传输',
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 转 PNG 的技术原理',
125
+ level: 3,
126
+ },
127
+ {
128
+ type: 'paragraph',
129
+ html: '转换使用了浏览器的 Canvas API。GIF 在内存中被解码为原生 Image 元素。通过在 HTML5 画布(canvas)上渲染,浏览器的图形引擎会捕捉第一帧,且保留其原始透明度信息完好无损。',
130
+ },
131
+ {
132
+ type: 'paragraph',
133
+ html: '与转换为 JPG 不同,使用 PNG 无需添加白色背景。原 GIF 的 Alpha 通道直接保留在导出的 PNG 中。画布的 <code>toDataURL(\'image/png\')</code> 方法直接在您电脑的 RAM 中生成 PNG 字节流,无需任何网络传输,生成的文件会立即下载。',
134
+ },
135
+ {
136
+ type: 'tip',
137
+ title: 'GIF 的二进制透明 vs PNG 的 Alpha 通道',
138
+ html: 'GIF 仅支持二进制透明(全透明或不透明)。转换为 PNG 时,GIF 的半透明像素将保持浏览器解释的样子。如果您的 GIF 有锯齿状边缘,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
+ '可在任何背景色上使用的 Logo 和图标。',
150
+ '用于 Discord、Telegram、Slack 和游戏平台的个人头像。',
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: 'zh', faq, howTo }),
178
+ };
@@ -16,6 +16,18 @@ export const gifAPng: ConvertersToolEntry<ImageConverterUI> = {
16
16
  es: () => import('./i18n/es').then((m) => m.content),
17
17
  en: () => import('./i18n/en').then((m) => m.content),
18
18
  fr: () => import('./i18n/fr').then((m) => m.content),
19
+ de: () => import('./i18n/de').then((m) => m.content),
20
+ id: () => import('./i18n/id').then((m) => m.content),
21
+ it: () => import('./i18n/it').then((m) => m.content),
22
+ ja: () => import('./i18n/ja').then((m) => m.content),
23
+ ko: () => import('./i18n/ko').then((m) => m.content),
24
+ nl: () => import('./i18n/nl').then((m) => m.content),
25
+ pl: () => import('./i18n/pl').then((m) => m.content),
26
+ pt: () => import('./i18n/pt').then((m) => m.content),
27
+ ru: () => import('./i18n/ru').then((m) => m.content),
28
+ sv: () => import('./i18n/sv').then((m) => m.content),
29
+ tr: () => import('./i18n/tr').then((m) => m.content),
30
+ zh: () => import('./i18n/zh').then((m) => m.content),
19
31
  },
20
32
  };
21
33
 
@@ -0,0 +1,178 @@
1
+ import type { ImageConverterUI } from '../../../shared/ImageConverter.astro';
2
+ import { generateSchemas } from '../../../shared/logic/schemas';
3
+ import type { GifAWebpLocaleContent } from '../index';
4
+
5
+ const slug = 'gif-in-webp-konvertieren';
6
+ const title = 'GIF in statisches WebP online konvertieren';
7
+ const description =
8
+ 'Konvertieren Sie animierte GIFs in statisches WebP. Bewahrt Transparenz. Kein Server erforderlich. Lokale Verarbeitung im Browser. Kostenlos.';
9
+
10
+ const ui: ImageConverterUI = {
11
+ dragText: 'GIF-Dateien hierher ziehen...',
12
+ convertText: 'Um sie sofort in WebP zu konvertieren',
13
+ selectFiles: 'Dateien auswählen',
14
+ processedFiles: 'Verarbeitete Dateien',
15
+ downloadAll: 'Alles herunterladen (.zip)',
16
+ pending: 'Ausstehend',
17
+ bibliographyTitle: 'Literaturhinweise',
18
+ faqTitle: 'Häufig gestellte Fragen',
19
+ };
20
+
21
+ const faq: GifAWebpLocaleContent['faq'] = [
22
+ {
23
+ question: 'Wozu eine animierte Datei in das moderne statische WebP-Format umwandeln?',
24
+ answer:
25
+ 'WebP ist der Kompressionsstandard von Google; es ist bemerkenswert leichtgewichtig und erhält Transparenzen sauber. Der Wechsel von GIF zu WebP eliminiert die schwere Animation und führt zu einem enormen Gewinn an Web-Geschwindigkeit.',
26
+ },
27
+ {
28
+ question: 'Bleibt der ursprüngliche Avatar transparent?',
29
+ answer:
30
+ 'Ja, im Gegensatz zu JPEG respektiert der WebP-Container den komplexen Alpha-Kanal. Alle Silhouetten bleiben so perfekt, wie sie nativ waren.',
31
+ },
32
+ {
33
+ question: 'Wohin werden die Dateien hochgeladen?',
34
+ answer:
35
+ 'Es findet kein Upload statt. Die Verarbeitung erfolgt vollständig durch das JavaScript des Browsers auf Ihrem PC, ohne jegliche Remote-Übertragung.',
36
+ },
37
+ ];
38
+
39
+ const howTo: GifAWebpLocaleContent['howTo'] = [
40
+ {
41
+ name: 'Eine animierte Lawine starten',
42
+ text: 'Verschieben und legen Sie Dutzende von Memes in der markierten Zone ab, ganz ohne Remote-Verbindung.',
43
+ },
44
+ {
45
+ name: 'Erleben Sie den unsichtbaren Wandel',
46
+ text: 'Beobachten Sie, wie sich die Fortschrittsanzeige Millisekunde für Millisekunde ändert, während der lokale Canvas-Decoder das Ergebnis generiert.',
47
+ },
48
+ {
49
+ name: 'Ihr sauberes Ergebnis-Arsenal speichern',
50
+ text: 'Nehmen Sie die extrahierten Dateien einzeln entgegen oder drücken Sie auf ZIP-Download, um alles zu paketieren.',
51
+ },
52
+ ];
53
+
54
+ const bibliography: GifAWebpLocaleContent['bibliography'] = [
55
+ {
56
+ name: 'GIF89a Spezifikation',
57
+ url: 'https://www.w3.org/Graphics/GIF/spec-gif89a.txt',
58
+ },
59
+ {
60
+ name: 'Google WebP Dokumentation',
61
+ url: 'https://developers.google.com/speed/webp',
62
+ },
63
+ ];
64
+
65
+ const seo: GifAWebpLocaleContent['seo'] = [
66
+ {
67
+ type: 'title',
68
+ text: 'GIF-zu-WebP-Konverter: Der moderne Ersatz für schwere Animationen',
69
+ level: 2,
70
+ },
71
+ {
72
+ type: 'paragraph',
73
+ html: 'Animierte GIFs sind die Dinosaurier des modernen Web-Contents: Sie verbrauchen unverhältnismäßig viel Bandbreite, verschlechtern den PageSpeed jeder Seite und sind für einen erheblichen Prozentsatz des Gesamtgewichts von Tausenden von Websites verantwortlich. Ein typisches 5 MB großes animiertes GIF kann zu einer WebP-Animation unter 1 MB werden, bei gleicher visueller Qualität. WebP ist der moderne Nachfolger, den Google speziell entwickelt hat, um GIF im Web abzulösen.',
74
+ },
75
+ {
76
+ type: 'title',
77
+ text: 'GIF vs WebP: Die Kluft zwischen Vergangenheit und Gegenwart des Webs',
78
+ level: 3,
79
+ },
80
+ {
81
+ type: 'paragraph',
82
+ html: 'GIF ist ein Format von 1987, das ursprünglich nicht für Animationen konzipiert wurde – diese Funktion kam erst als späterer Hack hinzu. Seine 256-Farben-Palette, die ineffiziente Kompression und die Unfähigkeit, Audio zu verarbeiten, machen es zu einem veralteten Format. WebP, 2010 von Google entwickelt, bietet überlegene verlustbehaftete und verlustfreie Kompression, native Animationsunterstützung und vollen Alpha-Kanal.',
83
+ },
84
+ {
85
+ type: 'paragraph',
86
+ html: 'Für einen Webentwickler kann der Ersatz von GIFs durch WebP auf Seiten eine Verbesserung des Google PageSpeed Scores um 10 bis 30 Punkte bedeuten. Weniger Seitengewicht bedeutet bessere Core Web Vitals, bessere SEO-Rankings und niedrigere Bandbreitenkosten auf den Servern. Es ist nicht nur eine ästhetische Verbesserung – es ist eine Entscheidung für die technische Architektur.',
87
+ },
88
+ {
89
+ type: 'title',
90
+ text: 'Architekturvergleich: Lokal vs Cloud',
91
+ level: 3,
92
+ },
93
+ {
94
+ type: 'comparative',
95
+ items: [
96
+ {
97
+ title: 'Cloud Konverter',
98
+ description: 'Plattformen, die Ihre GIFs auf Remote-Servern verarbeiten.',
99
+ icon: 'mdi:cloud-upload',
100
+ pointIcon: 'mdi:close-circle-outline',
101
+ points: [
102
+ 'Ihre Animationen reisen über das Internet zu Servern von Drittanbietern',
103
+ 'Wartezeit aufgrund von Netzwerklatenz beim Upload und Download',
104
+ 'Größenbeschränkungen (große GIFs werden oft abgelehnt)',
105
+ 'Risiko der Speicherung und Analyse der Dateien',
106
+ ],
107
+ },
108
+ {
109
+ title: 'Unsere lokale Architektur',
110
+ description: 'Direkte Verarbeitung auf Ihrer Hardware mittels Vanilla JS-Technologie.',
111
+ icon: 'mdi:laptop-mac',
112
+ highlight: true,
113
+ points: [
114
+ 'Das GIF verlässt nie Ihr Gerät',
115
+ 'Sofortige Konvertierung ohne Netzwerkwartezeit',
116
+ 'Keine Größenlimits: Verarbeitung von GIFs jedes Gewichts',
117
+ 'Voller Datenschutz: 0 Bytes werden nach außen gesendet',
118
+ ],
119
+ },
120
+ ],
121
+ },
122
+ {
123
+ type: 'title',
124
+ text: 'Wie die lokale GIF-zu-WebP-Konvertierung funktioniert',
125
+ level: 3,
126
+ },
127
+ {
128
+ type: 'paragraph',
129
+ html: 'Die lokale Konvertierung nutzt die HTML5 Canvas API. Das GIF wird als natives Image-Element des Browsers geladen. Durch das Zeichnen auf eine Leinwand erfasst die Grafik-Engine das erste Animationsbild mit all seinen Transparenzinformationen. Die Methode <code>toDataURL(\'image/webp\')</code> exportiert den Frame direkt im RAM als WebP.',
130
+ },
131
+ {
132
+ type: 'paragraph',
133
+ html: 'WebP unterstützt einen vollen Alpha-Kanal, sodass GIF-Transparenzen im resultierenden WebP erhalten bleiben, ohne dass ein Hintergrund hinzugefügt werden muss. WebP-Kompressionsalgorithmen sind wesentlich effizienter als GIF oder PNG, was die drastische Reduzierung der Dateigröße des Endergebnisses erklärt.',
134
+ },
135
+ {
136
+ type: 'tip',
137
+ title: 'Garantierte PageSpeed Verbesserung',
138
+ html: 'Ein 5 MB großes animiertes GIF kann zu einem WebP unter 1 MB werden. Wenn Sie GIFs auf Ihren Webseiten haben, kann deren Ersatz durch WebP sofort Ihren Largest Contentful Paint (LCP) und die Total Blocking Time (TBT) verbessern, was sich direkt auf Ihre SEO-Rankings auswirkt.',
139
+ },
140
+ {
141
+ type: 'title',
142
+ text: 'Anwendungsfälle und Kompatibilität des resultierenden WebP',
143
+ level: 3,
144
+ },
145
+ {
146
+ type: 'list',
147
+ icon: 'mdi:check-circle',
148
+ items: [
149
+ 'Ersetzen von GIFs auf Webseiten zur Verbesserung der PageSpeed-Werte.',
150
+ 'Optimierte Avatare und Sticker für Discord, Slack und moderne Plattformen.',
151
+ 'Banner und Visuals für digitale Marketingkampagnen.',
152
+ 'Animationen in Progressive Web Applications (PWA).',
153
+ 'Kompatibel mit Chrome, Edge, Firefox, Safari 14+ und allen modernen Browsern.',
154
+ ],
155
+ },
156
+ {
157
+ type: 'title',
158
+ text: 'Fazit: Migrieren Sie Ihre GIFs ins 21. Jahrhundert',
159
+ level: 3,
160
+ },
161
+ {
162
+ type: 'paragraph',
163
+ html: 'Jedes GIF auf Ihrer Website ist eine verpasste Optimierungschance. Unser Tool konvertiert GIFs sofort, privat und ohne Limits direkt in Ihrem Browser in WebP. Das Ergebnis: bis zu 5-mal kleinere Dateien, perfekte Transparenz und Kompatibilität mit allen modernen Browsern.',
164
+ },
165
+ ];
166
+
167
+
168
+ export const content: GifAWebpLocaleContent = {
169
+ slug,
170
+ title,
171
+ description,
172
+ ui,
173
+ seo,
174
+ faq,
175
+ bibliography,
176
+ howTo,
177
+ schemas: generateSchemas({ title, description, inLanguage: 'de', faq, howTo }),
178
+ };
@@ -1,5 +1,5 @@
1
- import type { WithContext, SoftwareApplication } from 'schema-dts';
2
1
  import type { ImageConverterUI } from '../../../shared/ImageConverter.astro';
2
+ import { generateSchemas } from '../../../shared/logic/schemas';
3
3
  import type { GifAWebpLocaleContent } from '../index';
4
4
 
5
5
  const slug = 'gif-to-webp-converter';
@@ -164,16 +164,6 @@ const seo: GifAWebpLocaleContent['seo'] = [
164
164
  },
165
165
  ];
166
166
 
167
- const appSchema: WithContext<SoftwareApplication> = {
168
- '@context': 'https://schema.org',
169
- '@type': 'SoftwareApplication',
170
- name: title,
171
- description,
172
- applicationCategory: 'UtilitiesApplication',
173
- operatingSystem: 'Web',
174
- offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
175
- inLanguage: 'en',
176
- };
177
167
 
178
168
  export const content: GifAWebpLocaleContent = {
179
169
  slug,
@@ -184,5 +174,5 @@ export const content: GifAWebpLocaleContent = {
184
174
  faq,
185
175
  bibliography,
186
176
  howTo,
187
- schemas: [appSchema as any],
177
+ schemas: generateSchemas({ title, description, inLanguage: 'en', faq, howTo }),
188
178
  };
@@ -1,5 +1,5 @@
1
- import type { WithContext, SoftwareApplication } from 'schema-dts';
2
1
  import type { ImageConverterUI } from '../../../shared/ImageConverter.astro';
2
+ import { generateSchemas } from '../../../shared/logic/schemas';
3
3
  import type { GifAWebpLocaleContent } from '../index';
4
4
 
5
5
  const slug = 'convertidor-gif-a-webp';
@@ -164,16 +164,6 @@ const seo: GifAWebpLocaleContent['seo'] = [
164
164
  },
165
165
  ];
166
166
 
167
- const appSchema: WithContext<SoftwareApplication> = {
168
- '@context': 'https://schema.org',
169
- '@type': 'SoftwareApplication',
170
- name: title,
171
- description,
172
- applicationCategory: 'UtilitiesApplication',
173
- operatingSystem: 'Web',
174
- offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
175
- inLanguage: 'es',
176
- };
177
167
 
178
168
  export const content: GifAWebpLocaleContent = {
179
169
  slug,
@@ -184,5 +174,5 @@ export const content: GifAWebpLocaleContent = {
184
174
  faq,
185
175
  bibliography,
186
176
  howTo,
187
- schemas: [appSchema as any],
177
+ schemas: generateSchemas({ title, description, inLanguage: 'es', faq, howTo }),
188
178
  };
@@ -1,5 +1,5 @@
1
- import type { WithContext, SoftwareApplication } from 'schema-dts';
2
1
  import type { ImageConverterUI } from '../../../shared/ImageConverter.astro';
2
+ import { generateSchemas } from '../../../shared/logic/schemas';
3
3
  import type { GifAWebpLocaleContent } from '../index';
4
4
 
5
5
  const slug = 'convertisseur-gif-en-webp';
@@ -164,16 +164,6 @@ const seo: GifAWebpLocaleContent['seo'] = [
164
164
  },
165
165
  ];
166
166
 
167
- const appSchema: WithContext<SoftwareApplication> = {
168
- '@context': 'https://schema.org',
169
- '@type': 'SoftwareApplication',
170
- name: title,
171
- description,
172
- applicationCategory: 'UtilitiesApplication',
173
- operatingSystem: 'Web',
174
- offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
175
- inLanguage: 'fr',
176
- };
177
167
 
178
168
  export const content: GifAWebpLocaleContent = {
179
169
  slug,
@@ -184,5 +174,5 @@ export const content: GifAWebpLocaleContent = {
184
174
  faq,
185
175
  bibliography,
186
176
  howTo,
187
- schemas: [appSchema as any],
177
+ schemas: generateSchemas({ title, description, inLanguage: 'fr', faq, howTo }),
188
178
  };