@jjlmoya/utils-converters 1.7.0 → 1.9.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/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/slug_uniqueness.test.ts +81 -0
  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 { GifAWebpLocaleContent } from '../index';
4
+
5
+ const slug = 'konwerter-gif-na-webp';
6
+ const title = 'Konwertuj GIF na statyczne WebP Online';
7
+ const description =
8
+ 'Konwertuj animowane pliki GIF na statyczne WebP. Zachowuje przezroczystość. Bez serwera. Przetwarzane lokalnie w przeglądarce. Za darmo.';
9
+
10
+ const ui: ImageConverterUI = {
11
+ dragText: 'Przeciągnij pliki GIF...',
12
+ convertText: 'Aby natychmiast przekonwertować je na WebP',
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: GifAWebpLocaleContent['faq'] = [
22
+ {
23
+ question: 'Dlaczego warto zamrozić animowany plik do nowoczesnego statycznego formatu WebP?',
24
+ answer:
25
+ 'WebP to standard kompresji od Google; jest niezwykle lekki i czysto zachowuje przezroczystość. Przejście z GIF na WebP eliminuje ciężką animację i zapewnia ogromny wzrost szybkości ładowania stron.',
26
+ },
27
+ {
28
+ question: 'Czy oryginalny awatar pozostanie przezroczysty?',
29
+ answer:
30
+ 'Tak, w przeciwieństwie do JPEG, kontener WebP respektuje złożony kanał alfa. Wszystkie sylwetki pozostaną idealne, tak jak w oryginale.',
31
+ },
32
+ {
33
+ question: 'Gdzie przesyłane są pliki?',
34
+ answer:
35
+ 'Pliki nie są nigdzie przesyłane. Przetwarzanie odbywa się w całości przez JavaScript przeglądarki na Twoim komputerze, bez wysyłania danych na serwer.',
36
+ },
37
+ ];
38
+
39
+ const howTo: GifAWebpLocaleContent['howTo'] = [
40
+ {
41
+ name: 'Uruchom animowaną lawinę',
42
+ text: 'Przenieś i upuść dziesiątki memów do wyznaczonej strefy bez połączenia z serwerem.',
43
+ },
44
+ {
45
+ name: 'Świadectwo wielkiej niewidzialnej zmiany',
46
+ text: 'Obserwuj, jak wskaźnik postępu zmienia się co milisekundę, podczas gdy lokalny dekoder canvas generuje wynik.',
47
+ },
48
+ {
49
+ name: 'Zapisz swój czysty arsenał wyników',
50
+ text: 'Pobierz wyekstrahowane pliki pojedynczo lub naciśnij Pobierz Zip, aby spakować wszystko.',
51
+ },
52
+ ];
53
+
54
+ const bibliography: GifAWebpLocaleContent['bibliography'] = [
55
+ {
56
+ name: 'Specyfikacja GIF89a',
57
+ url: 'https://www.w3.org/Graphics/GIF/spec-gif89a.txt',
58
+ },
59
+ {
60
+ name: 'Dokumentacja Google WebP',
61
+ url: 'https://developers.google.com/speed/webp',
62
+ },
63
+ ];
64
+
65
+ const seo: GifAWebpLocaleContent['seo'] = [
66
+ {
67
+ type: 'title',
68
+ text: 'Konwerter GIF na WebP: Nowoczesny zamiennik dla ciężkich animacji',
69
+ level: 2,
70
+ },
71
+ {
72
+ type: 'paragraph',
73
+ html: 'Animowane pliki GIF to dinozaury współczesnego internetu: zużywają nieproporcjonalnie dużą szerokość pasma, pogarszają wynik PageSpeed każdej strony i odpowiadają za znaczny procent całkowitej wagi tysięcy witryn. Typowy animowany GIF o rozmiarze 5 MB może stać się animacją WebP o wadze poniżej 1 MB przy zachowaniu tej samej jakości wizualnej. WebP to nowoczesny następca, którego Google zaprojektowało specjalnie w celu zastąpienia formatu GIF w sieci.',
74
+ },
75
+ {
76
+ type: 'title',
77
+ text: 'GIF vs WebP: przepaść między przeszłością a teraźniejszością sieci',
78
+ level: 3,
79
+ },
80
+ {
81
+ type: 'paragraph',
82
+ html: 'GIF to format z 1987 roku, który pierwotnie nie był projektowany z myślą o animacjach — ta funkcja pojawiła się później jako rozwiązanie tymczasowe. Paleta 256 kolorów, niewydajna kompresja i brak obsługi dźwięku sprawiają, że jest to format przestarzały. WebP, opracowany przez Google w 2010 roku, oferuje doskonałą kompresję zarówno stratną, jak i bezstratną, natywną obsługę animacji oraz pełny kanał alfa.',
83
+ },
84
+ {
85
+ type: 'paragraph',
86
+ html: 'Dla web developera zastąpienie plików GIF formatem WebP na stronach może oznaczać poprawę wyniku Google PageSpeed o 10 do 30 punktów. Mniejsza waga strony oznacza lepsze wskaźniki Core Web Vitals, wyższe pozycje w SEO i niższe koszty transferu na serwerach. To nie tylko poprawa estetyczna — to decyzja dotycząca architektury technicznej.',
87
+ },
88
+ {
89
+ type: 'title',
90
+ text: 'Porównanie architektury: Lokalnie vs Chmura',
91
+ level: 3,
92
+ },
93
+ {
94
+ type: 'comparative',
95
+ items: [
96
+ {
97
+ title: 'Konwertery w chmurze',
98
+ description: 'Platformy, które przetwarzają pliki GIF na zdalnych serwerach.',
99
+ icon: 'mdi:cloud-upload',
100
+ pointIcon: 'mdi:close-circle-outline',
101
+ points: [
102
+ 'Twoje animacje przesyłane są przez internet na serwery osób trzecich',
103
+ 'Czas oczekiwania wynikający z opóźnień sieci przy wysyłaniu i pobieraniu',
104
+ 'Limity rozmiaru (duże pliki GIF są często odrzucane)',
105
+ 'Ryzyko przechowywania i analizy plików przez serwis',
106
+ ],
107
+ },
108
+ {
109
+ title: 'Nasza lokalna architektura',
110
+ description: 'Bezpośrednie przetwarzanie na Twoim sprzęcie przy użyciu 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 oczekiwania na sieć',
116
+ 'Brak limitów rozmiaru: przetwarzaj pliki GIF o dowolnej wadze',
117
+ 'Pełna 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 WebP',
125
+ level: 3,
126
+ },
127
+ {
128
+ type: 'paragraph',
129
+ html: 'Lokalna konwersja wykorzystuje API HTML5 Canvas. Plik GIF jest ładowany jako natywny element Image przeglądarki. Poprzez narysowanie go na płótnie (canvas), silnik graficzny przechwytuje pierwszą klatkę animacji wraz ze wszystkimi informacjami o przezroczystości. Metoda <code>toDataURL(\'image/webp\')</code> eksportuje klatkę jako WebP bezpośrednio w pamięci RAM.',
130
+ },
131
+ {
132
+ type: 'paragraph',
133
+ html: 'WebP obsługuje pełny kanał alfa, więc przezroczystości GIF są zachowywane w wynikowym pliku WebP bez konieczności dodawania tła. Algorytmy kompresji WebP są znacznie wydajniejsze niż te w GIF czy PNG, co tłumaczy drastyczną redukcję rozmiaru pliku końcowego.',
134
+ },
135
+ {
136
+ type: 'tip',
137
+ title: 'Gwarantowana poprawa PageSpeed',
138
+ html: 'Animowany GIF o rozmiarze 5 MB może stać się plikiem WebP o wadze poniżej 1 MB. Jeśli masz pliki GIF na swoich stronach, zastąpienie ich formatem WebP może natychmiast poprawić wskaźniki Largest Contentful Paint (LCP) i Total Blocking Time (TBT), co bezpośrednio wpływa na rankingi SEO.',
139
+ },
140
+ {
141
+ type: 'title',
142
+ text: 'Przypadki użycia i kompatybilność wynikowego formatu WebP',
143
+ level: 3,
144
+ },
145
+ {
146
+ type: 'list',
147
+ icon: 'mdi:check-circle',
148
+ items: [
149
+ 'Zastępowanie plików GIF na stronach internetowych w celu poprawy wyników PageSpeed.',
150
+ 'Zoptymalizowane awatary i naklejki dla Discorda, Slacka i nowoczesnych platform.',
151
+ 'Bannery i materiały wizualne do cyfrowych kampanii marketingowych.',
152
+ 'Animacje w progresywnych aplikacjach internetowych (PWA).',
153
+ 'Kompatybilność z Chrome, Edge, Firefox, Safari 14+ i wszystkimi nowoczesnymi przeglądarkami.',
154
+ ],
155
+ },
156
+ {
157
+ type: 'title',
158
+ text: 'Podsumowanie: przenieś swoje pliki GIF w XXI wiek',
159
+ level: 3,
160
+ },
161
+ {
162
+ type: 'paragraph',
163
+ html: 'Każdy GIF na Twojej stronie to niewykorzystana okazja do optymalizacji. Nasze narzędzie konwertuje pliki GIF na WebP natychmiast, prywatnie i bez limitów, bezpośrednio w przeglądarce. Wynik: pliki do 5 razy mniejsze, idealna przezroczystość i kompatybilność ze wszystkimi nowoczesnymi przeglądarkami.',
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: 'pl', 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 { GifAWebpLocaleContent } from '../index';
4
+
5
+ const slug = 'conversor-de-gif-para-webp';
6
+ const title = 'Converter GIF para WebP estático Online';
7
+ const description =
8
+ 'Converta GIFs animados para WebP estático. Preserva a transparência. Sem servidor. Processado localmente no seu navegador. Gratuito.';
9
+
10
+ const ui: ImageConverterUI = {
11
+ dragText: 'Arraste os arquivos GIF...',
12
+ convertText: 'Para convertê-los em WebP instantaneamente',
13
+ selectFiles: 'Selecionar arquivos',
14
+ processedFiles: 'Arquivos processados',
15
+ downloadAll: 'Baixar tudo (.zip)',
16
+ pending: 'Pendente',
17
+ bibliographyTitle: 'Referências Bibliográficas',
18
+ faqTitle: 'Perguntas Frequentes',
19
+ };
20
+
21
+ const faq: GifAWebpLocaleContent['faq'] = [
22
+ {
23
+ question: 'Por que congelar um arquivo animado para o formato moderno WebP estático?',
24
+ answer:
25
+ 'WebP é o padrão de compressão do Google; é notavelmente leve e mantém a transparência de forma limpa. Mudar de GIF para WebP elimina a animação pesada e proporciona um ganho abismal na velocidade da web.',
26
+ },
27
+ {
28
+ question: 'O avatar original permanecerá transparente?',
29
+ answer:
30
+ 'Sim, ao contrário do JPEG, o contentor WebP respeita o complexo canal Alpha. Todas as suas silhuetas permanecerão perfeitas como eram nativamente.',
31
+ },
32
+ {
33
+ question: 'Para onde os arquivos serão enviados?',
34
+ answer:
35
+ 'Não há upload. O processamento é realizado inteiramente pelo Javascript do navegador no seu PC, com zero envio remoto.',
36
+ },
37
+ ];
38
+
39
+ const howTo: GifAWebpLocaleContent['howTo'] = [
40
+ {
41
+ name: 'Lance uma avalanche animada',
42
+ text: 'Mova e solte dezenas de memes na zona delimitada sem conexão remota.',
43
+ },
44
+ {
45
+ name: 'Testemunhe a grande mudança invisível',
46
+ text: 'Observe um indicador progressivo mudar a cada milissegundo enquanto o decodificador canvas local gera o resultado.',
47
+ },
48
+ {
49
+ name: 'Salve seu arsenal de resultados limpos',
50
+ text: 'Pegue os arquivos extraídos individualmente ou pressione Baixar Zip para empacotar tudo.',
51
+ },
52
+ ];
53
+
54
+ const bibliography: GifAWebpLocaleContent['bibliography'] = [
55
+ {
56
+ name: 'Especificação GIF89a',
57
+ url: 'https://www.w3.org/Graphics/GIF/spec-gif89a.txt',
58
+ },
59
+ {
60
+ name: 'Documentação do Google WebP',
61
+ url: 'https://developers.google.com/speed/webp',
62
+ },
63
+ ];
64
+
65
+ const seo: GifAWebpLocaleContent['seo'] = [
66
+ {
67
+ type: 'title',
68
+ text: 'Conversor de GIF para WebP: O substituto moderno para animações pesadas',
69
+ level: 2,
70
+ },
71
+ {
72
+ type: 'paragraph',
73
+ html: 'GIFs animados são os dinossauros do conteúdo web moderno: consomem largura de banda desproporcional, degradam o PageSpeed de qualquer página e são responsáveis por uma porcentagem significativa do peso total em milhares de sites. Um GIF animado típico de 5 MB pode tornar-se uma animação WebP com menos de 1 MB com a mesma qualidade visual. WebP é o sucessor moderno que a Google projetou especificamente para substituir o GIF na web.',
74
+ },
75
+ {
76
+ type: 'title',
77
+ text: 'GIF vs WebP: o abismo entre o passado e o presente da web',
78
+ level: 3,
79
+ },
80
+ {
81
+ type: 'paragraph',
82
+ html: 'O GIF é um formato de 1987 não projetado originalmente para animações — essa funcionalidade surgiu como um "hack" posterior. A sua paleta de 256 cores, a compressão ineficiente e a incapacidade de lidar com áudio tornam-no um formato obsoleto. O WebP, desenvolvido pela Google em 2010, oferece compressão superior, tanto com perdas como sem perdas, suporte nativo para animações e canal alpha completo.',
83
+ },
84
+ {
85
+ type: 'paragraph',
86
+ html: 'Para um desenvolvedor web, substituir GIFs por WebP nas páginas pode significar uma melhoria na pontuação do Google PageSpeed de 10 a 30 pontos. Menos peso de página significa melhores Core Web Vitals, melhor posicionamento SEO e menores custos de largura de banda nos servidores. Não é apenas uma melhoria estética — é uma decisão de arquitetura técnica.',
87
+ },
88
+ {
89
+ type: 'title',
90
+ text: 'Comparação de Arquitetura: Local vs Nuvem',
91
+ level: 3,
92
+ },
93
+ {
94
+ type: 'comparative',
95
+ items: [
96
+ {
97
+ title: 'Conversores Cloud',
98
+ description: 'Plataformas que processam os seus GIFs em servidores remotos.',
99
+ icon: 'mdi:cloud-upload',
100
+ pointIcon: 'mdi:close-circle-outline',
101
+ points: [
102
+ 'As suas animações viajam pela internet para servidores de terceiros',
103
+ 'Tempo de espera devido à latência de rede no upload e download',
104
+ 'Limites de tamanho (GIFs grandes são frequentemente rejeitados)',
105
+ 'Risco de retenção e análise de arquivos',
106
+ ],
107
+ },
108
+ {
109
+ title: 'Nossa Arquitetura Local',
110
+ description: 'Processamento direto no seu hardware usando tecnologia Vanilla JS.',
111
+ icon: 'mdi:laptop-mac',
112
+ highlight: true,
113
+ points: [
114
+ 'O GIF nunca sai do seu dispositivo',
115
+ 'Conversão instantânea sem espera de rede',
116
+ 'Sem limites de tamanho: processe GIFs de qualquer peso',
117
+ 'Privacidade total: 0 bytes enviados externamente',
118
+ ],
119
+ },
120
+ ],
121
+ },
122
+ {
123
+ type: 'title',
124
+ text: 'Como funciona a conversão local de GIF para WebP',
125
+ level: 3,
126
+ },
127
+ {
128
+ type: 'paragraph',
129
+ html: 'A conversão local utiliza a API HTML5 Canvas. O GIF é carregado como um elemento Image nativo do navegador. Ao desenhá-lo num canvas, o motor gráfico captura o primeiro quadro da animação com toda a sua informação de transparência. O método <code>toDataURL(\'image/webp\')</code> exporta o quadro como WebP diretamente na RAM.',
130
+ },
131
+ {
132
+ type: 'paragraph',
133
+ html: 'O WebP suporta canal alpha completo, pelo que as transparências do GIF são preservadas no WebP resultante sem necessidade de adicionar um fundo. Os algoritmos de compressão do WebP são significativamente mais eficientes do que os do GIF ou PNG, o que explica a redução drástica do tamanho do arquivo final.',
134
+ },
135
+ {
136
+ type: 'tip',
137
+ title: 'Melhoria garantida no PageSpeed',
138
+ html: 'Um GIF animado de 5 MB pode tornar-se um WebP com menos de 1 MB. Se tiver GIFs nas páginas do seu site, substituí-los por WebP pode melhorar imediatamente o seu Largest Contentful Paint (LCP) e Total Blocking Time (TBT), impactando diretamente o posicionamento SEO.',
139
+ },
140
+ {
141
+ type: 'title',
142
+ text: 'Casos de uso e compatibilidade do WebP resultante',
143
+ level: 3,
144
+ },
145
+ {
146
+ type: 'list',
147
+ icon: 'mdi:check-circle',
148
+ items: [
149
+ 'Substituir GIFs em páginas web para melhorar as pontuações de PageSpeed.',
150
+ 'Avatares e stickers otimizados para Discord, Slack e plataformas modernas.',
151
+ 'Banners e visuais para campanhas de marketing digital.',
152
+ 'Animações em aplicações web progressivas (PWA).',
153
+ 'Compatível com Chrome, Edge, Firefox, Safari 14+ e todos os navegadores modernos.',
154
+ ],
155
+ },
156
+ {
157
+ type: 'title',
158
+ text: 'Conclusão: migre os seus GIFs para o século XXI',
159
+ level: 3,
160
+ },
161
+ {
162
+ type: 'paragraph',
163
+ html: 'Cada GIF no seu site é uma oportunidade de otimização perdida. A nossa ferramenta converte GIFs para WebP instantaneamente, de forma privada e sem limites, diretamente no seu navegador. O resultado: arquivos até 5 vezes menores, transparência perfeita e compatibilidade com todos os navegadores modernos.',
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: 'pt', faq, howTo }),
178
+ };
@@ -0,0 +1,178 @@
1
+ import type { ImageConverterUI } from '../../../shared/ImageConverter.astro';
2
+ import { generateSchemas } from '../../../shared/logic/schemas';
3
+ import type { GifAWebpLocaleContent } from '../index';
4
+
5
+ const slug = 'konverter-gif-v-webp';
6
+ const title = 'Конвертировать GIF в статическое WebP онлайн';
7
+ const description =
8
+ 'Конвертируйте анимированные GIF в статическое WebP. Сохраняет прозрачность. Без сервера. Обработка локально в вашем браузере. Бесплатно.';
9
+
10
+ const ui: ImageConverterUI = {
11
+ dragText: 'Перетащите GIF-файлы...',
12
+ convertText: 'Чтобы мгновенно конвертировать их в WebP',
13
+ selectFiles: 'Выбрать файлы',
14
+ processedFiles: 'Обработанные файлы',
15
+ downloadAll: 'Скачать всё (.zip)',
16
+ pending: 'В ожидании',
17
+ bibliographyTitle: 'Библиографические ссылки',
18
+ faqTitle: 'Часто задаваемые вопросы',
19
+ };
20
+
21
+ const faq: GifAWebpLocaleContent['faq'] = [
22
+ {
23
+ question: 'Зачем преобразовывать анимированный файл в современный статический формат WebP?',
24
+ answer:
25
+ 'WebP — это стандарт сжатия Google; он невероятно легкий и чисто сохраняет прозрачность. Переход от GIF к WebP устраняет тяжелую анимацию и дает колоссальный выигрыш в скорости веб-загрузки.',
26
+ },
27
+ {
28
+ question: 'Останется ли оригинальный аватар прозрачным?',
29
+ answer:
30
+ 'Да, в отличие от JPEG, контейнер WebP учитывает сложный альфа-канал. Все его силуэты останутся такими же идеальными, какими они были изначально.',
31
+ },
32
+ {
33
+ question: 'Куда будут загружаться файлы?',
34
+ answer:
35
+ 'Загрузки на сервер нет. Обработка выполняется полностью JavaScript-движком браузера на вашем ПК, с нулевой дистанционной передачей.',
36
+ },
37
+ ];
38
+
39
+ const howTo: GifAWebpLocaleContent['howTo'] = [
40
+ {
41
+ name: 'Запустите анимированную лавину',
42
+ text: 'Перемещайте и сбрасывайте десятки мемов в выделенную зону без удаленного подключения.',
43
+ },
44
+ {
45
+ name: 'Станьте свидетелем великой невидимой перемены',
46
+ text: 'Наблюдайте, как прогресс-индикатор меняется каждую миллисекунду, пока локальный декодер Canvas генерирует результат.',
47
+ },
48
+ {
49
+ name: 'Сохраните ваш чистый арсенал результатов',
50
+ text: 'Забирайте извлеченные файлы по отдельности или нажмите «Скачать ZIP», чтобы упаковать всё сразу.',
51
+ },
52
+ ];
53
+
54
+ const bibliography: GifAWebpLocaleContent['bibliography'] = [
55
+ {
56
+ name: 'Спецификация GIF89a',
57
+ url: 'https://www.w3.org/Graphics/GIF/spec-gif89a.txt',
58
+ },
59
+ {
60
+ name: 'Документация Google WebP',
61
+ url: 'https://developers.google.com/speed/webp',
62
+ },
63
+ ];
64
+
65
+ const seo: GifAWebpLocaleContent['seo'] = [
66
+ {
67
+ type: 'title',
68
+ text: 'Конвертер GIF в WebP: Современная замена тяжелым анимациям',
69
+ level: 2,
70
+ },
71
+ {
72
+ type: 'paragraph',
73
+ html: 'Анимированные GIF — это динозавры современного веб-контента: они потребляют непропорционально большую полосу пропускания, ухудшают PageSpeed любой страницы и отвечают за значительный процент общего веса на тысячах сайтов. Типичный анимированный GIF размером 5 МБ может превратиться в WebP-анимацию весом менее 1 МБ при том же визуальном качестве. WebP — это современный преемник, разработанный Google специально для замены GIF в Интернете.',
74
+ },
75
+ {
76
+ type: 'title',
77
+ text: 'GIF против WebP: Пропасть между прошлым и настоящим веба',
78
+ level: 3,
79
+ },
80
+ {
81
+ type: 'paragraph',
82
+ html: 'GIF — это формат 1987 года, изначально не предназначенный для анимаций — эта функция появилась позже как «хакерское» решение. Его 256-цветная палитра, неэффективное сжатие и невозможность работы со звуком делают его устаревшим форматом. WebP, разработанный Google в 2010 году, предлагает превосходное сжатие как с потерями, так и без потерь, нативную поддержку анимации и полный альфа-канал.',
83
+ },
84
+ {
85
+ type: 'paragraph',
86
+ html: 'Для веб-разработчика замена GIF на WebP на страницах может означать улучшение показателей Google PageSpeed на 10–30 пунктов. Меньший вес страницы означает лучшие показатели Core Web Vitals, более высокие позиции в SEO и более низкие затраты на полосу пропускания серверов. Это не просто эстетическое улучшение — это техническое архитектурное решение.',
87
+ },
88
+ {
89
+ type: 'title',
90
+ text: 'Сравнение архитектур: Локальная vs Облачная',
91
+ level: 3,
92
+ },
93
+ {
94
+ type: 'comparative',
95
+ items: [
96
+ {
97
+ title: 'Облачные конвертеры',
98
+ description: 'Платформы, которые обрабатывают ваши GIF на удаленных серверах.',
99
+ icon: 'mdi:cloud-upload',
100
+ pointIcon: 'mdi:close-circle-outline',
101
+ points: [
102
+ 'Ваши анимации передаются через интернет на сторонние серверы',
103
+ 'Время ожидания из-за сетевой задержки при загрузке и скачивании',
104
+ 'Ограничения по размеру (большие GIF часто отклоняются)',
105
+ 'Риск удержания и анализа файлов сторонними лицами',
106
+ ],
107
+ },
108
+ {
109
+ title: 'Наша локальная архитектура',
110
+ description: 'Прямая обработка на вашем оборудовании с использованием технологии Vanilla JS.',
111
+ icon: 'mdi:laptop-mac',
112
+ highlight: true,
113
+ points: [
114
+ 'GIF никогда не покидает ваше устройство',
115
+ 'Мгновенная конвертация без ожидания сети',
116
+ 'Нет ограничений по размеру: обрабатывайте GIF любого веса',
117
+ 'Полная конфиденциальность: 0 байт отправляется вовне',
118
+ ],
119
+ },
120
+ ],
121
+ },
122
+ {
123
+ type: 'title',
124
+ text: 'Как работает локальная конвертация GIF в WebP',
125
+ level: 3,
126
+ },
127
+ {
128
+ type: 'paragraph',
129
+ html: 'Локальная конвертация использует HTML5 Canvas API. GIF загружается как нативный элемент Image браузера. Рисуя его на холсте, графический движок захватывает первый кадр анимации со всей информацией о прозрачности. Метод <code>toDataURL(\'image/webp\')</code> экспортирует кадр как WebP напрямую в оперативную память.',
130
+ },
131
+ {
132
+ type: 'paragraph',
133
+ html: 'WebP поддерживает полный альфа-канал, поэтому прозрачность GIF сохраняется в результирующем WebP без необходимости добавления фона. Алгоритмы сжатия WebP значительно эффективнее, чем у GIF или PNG, что объясняет радикальное снижение размера итогового файла.',
134
+ },
135
+ {
136
+ type: 'tip',
137
+ title: 'Гарантированное улучшение PageSpeed',
138
+ html: 'Анимированный GIF весом 5 МБ может превратиться в WebP весом менее 1 МБ. Если на страницах вашего сайта есть GIF, их замена на WebP может немедленно улучшить показатели Largest Contentful Paint (LCP) и Total Blocking Time (TBT), что напрямую влияет на SEO-рейтинг.',
139
+ },
140
+ {
141
+ type: 'title',
142
+ text: 'Варианты использования и совместимость результирующего WebP',
143
+ level: 3,
144
+ },
145
+ {
146
+ type: 'list',
147
+ icon: 'mdi:check-circle',
148
+ items: [
149
+ 'Замена GIF на веб-страницах для повышения показателей PageSpeed.',
150
+ 'Оптимизированные аватары и стикеры для Discord, Slack и современных платформ.',
151
+ 'Баннеры и визуальные эффекты для цифровых маркетинговых кампаний.',
152
+ 'Анимации в прогрессивных веб-приложениях (PWA).',
153
+ 'Совместимость с Chrome, Edge, Firefox, Safari 14+ и всеми современными браузерами.',
154
+ ],
155
+ },
156
+ {
157
+ type: 'title',
158
+ text: 'Заключение: перенесите ваши GIF в 21 век',
159
+ level: 3,
160
+ },
161
+ {
162
+ type: 'paragraph',
163
+ html: 'Каждый GIF на вашем сайте — это упущенная возможность оптимизации. Наш инструмент конвертирует GIF в WebP мгновенно, приватно и без ограничений прямо в вашем браузере. Результат: файлы до 5 раз меньше, идеальная прозрачность и совместимость со всеми современными браузерами.',
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: 'ru', faq, howTo }),
178
+ };