@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 { BmpAWebpLocaleContent } from '../index';
4
+
5
+ const slug = 'bmp-webp-donusturucu';
6
+ const title = 'Ücretsiz BMP\'den WebP\'ye Dönüştür';
7
+ const description =
8
+ 'BMP görüntülerini çevrimdışı olarak WebP\'ye dönüştürün. Devasa dosyaları kilobaytlara düşürün. Dosya yüklemeden. Ücretsiz, çevrimdışı ve tamamen özel.';
9
+
10
+ const ui: ImageConverterUI = {
11
+ dragText: 'BMP dosyalarını buraya sürükleyin...',
12
+ convertText: 'Anında WebP\'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: BmpAWebpLocaleContent['faq'] = [
22
+ {
23
+ question: 'BMP dosyalarım neden 10 kat daha fazla yer kaplıyor ve WebP\'ye sahip olmanın bana avantajı ne?',
24
+ answer:
25
+ 'BMP, sıkıştırılmamış piksel haritalarını saklar. WebP ise devasa BMP\'leri bir megabayttan daha az bir boyuta düşürmek için matematiksel sıkıştırma kullanırken görüntünün son derece tanınabilir kalmasını sağlar.',
26
+ },
27
+ {
28
+ question: 'Hesap açmam gerekiyor mu?',
29
+ answer:
30
+ 'E-posta talep etmiyoruz ve materyaliniz izole kalacaktır, çünkü işleme PC\'nize yüklü olan tarayıcının Javascript\'i tarafından uzaktan gönderim olmadan gerçekleştirilir.',
31
+ },
32
+ {
33
+ question: 'Aynı anda çok sayıda dosya sürükleyebilir miyim?',
34
+ answer:
35
+ 'Evet, donanımınız kuyruk oluşturmadan hepsini işlemeyi kaldırabiliyorsa 50 veya 100 dosyayı sürükleyebilirsiniz.',
36
+ },
37
+ ];
38
+
39
+ const howTo: BmpAWebpLocaleContent['howTo'] = [
40
+ {
41
+ name: 'Ham Dosyaları Tanımlayın',
42
+ text: 'Bit haritası koleksiyonlarınızı aktarıma hazır pencerelere yerleştirin.',
43
+ },
44
+ {
45
+ name: 'Yerel Toplu Etkinleştirme',
46
+ text: 'Tüm dosyaları dijital masamıza yansıtın veya sürükleyin.',
47
+ },
48
+ {
49
+ name: 'WebP Toplu Boşaltma',
50
+ text: 'Sonuçlara tıkladığınızda mikro boyutlu görüntüleri ayrı ayrı veya anlık sıkıştırılmış paketler olarak alacaksınız.',
51
+ },
52
+ ];
53
+
54
+ const bibliography: BmpAWebpLocaleContent['bibliography'] = [
55
+ {
56
+ name: 'BMP File Format',
57
+ url: 'https://en.wikipedia.org/wiki/BMP_file_format',
58
+ },
59
+ {
60
+ name: 'Google WebP Documentation',
61
+ url: 'https://developers.google.com/speed/webp',
62
+ },
63
+ ];
64
+
65
+ const seo: BmpAWebpLocaleContent['seo'] = [
66
+ {
67
+ type: 'title',
68
+ text: 'BMP\'den WebP\'ye Dönüştürücü: Mümkün Olan En Uç Boyut Azaltma',
69
+ level: 2,
70
+ },
71
+ {
72
+ type: 'paragraph',
73
+ html: 'BMP\'yi WebP\'ye dönüştürmek, şüphesiz bir görüntüyle yapabileceğiniz en görkemli dönüştürmedir. BMP (Bitmap) formatı, dijital ekosistemin en eski ve en ağır formatıdır: her pikseli herhangi bir sıkıştırma olmadan saklar, bu da modern eşdeğerinden 20, 50 hatta 100 kat daha ağır olabilen dosyalarla sonuçlanır. Google tarafından geliştirilen WebP, mükemmel görsel kaliteyi korurken boyutu mümkün olan en düşük seviyeye indiren son nesil sıkıştırma algoritmalarını uygular.',
74
+ },
75
+ {
76
+ type: 'title',
77
+ text: 'BMP neden bu kadar ağır ve WebP neden bu kadar verimli?',
78
+ level: 3,
79
+ },
80
+ {
81
+ type: 'paragraph',
82
+ html: 'BMP formatı, disk alanının devasa olduğu ve sıkıştırmanın öncelik olmadığı 80\'li yılların Windows\'u için doğdu. Her piksel olduğu gibi saklanır, herhangi bir azaltma algoritması yoktur: BMP\'deki 1920x1080 piksellik bir görüntü içeriğinden bağımsız olarak tam olarak 5,93 MB yer kaplar. Bu, onu dahili ekran görüntüleri veya kayıpsız düzenleme için ideal hale getirir ancak web veya modern depolama için tamamen uygunsuz kılar.',
83
+ },
84
+ {
85
+ type: 'paragraph',
86
+ html: 'WebP, bloklar ve DCT dönüşümleri tabanlı tahmini sıkıştırma kullanarak (dijital videonun temelindeki aynı teknoloji) aynı 1920x1080 görüntünün 80 KB ile 300 KB arasında yer kaplamasını sağlar. Bu, orijinal BMP\'ye kıyasla %95 ile %99 arasında bir azalma anlamına gelir. Ayrıca WebP, şeffaflıklar için alfa kanalını ve hem kayıplı hem de kayıpsız sıkıştırmayı destekleyerek tam bir çok yönlülük sunar.',
87
+ },
88
+ {
89
+ type: 'title',
90
+ text: 'Karşılaştırma: Bulut Dönüştürücüler vs Yerel Mimarimiz',
91
+ level: 3,
92
+ },
93
+ {
94
+ type: 'comparative',
95
+ items: [
96
+ {
97
+ title: 'Bulut Dönüştürücüler',
98
+ description: 'Dosyalarınızı işlemek için uzak bir sunucuya yükleyen araçlar.',
99
+ icon: 'mdi:cloud-upload',
100
+ pointIcon: 'mdi:close-circle-outline',
101
+ points: [
102
+ '20 MB\'lık bir BMP\'yi yüklemek yavaş bağlantıda dakikalar sürer',
103
+ 'Görüntüleriniz başkalarının sunucularında saklanır',
104
+ 'Büyük BMP dosyalarını dışlayan boyut sınırları',
105
+ 'Müdahaleci reklamlar ve veri izleyicileri',
106
+ ],
107
+ },
108
+ {
109
+ title: 'Yerel Mimarimiz',
110
+ description: 'Vanilla JS teknolojisi ve Canvas API aracılığıyla doğrudan tarayıcınızda işleme.',
111
+ icon: 'mdi:laptop-mac',
112
+ highlight: true,
113
+ points: [
114
+ 'Ağ aktarımı olmadan anında dönüşüm',
115
+ 'Mutlak gizlilik — cihazınızdan 0 bayt çıkar',
116
+ 'Dosya başına boyut sınırı yok',
117
+ 'İnternet bağlantısı olmadan çalışır',
118
+ ],
119
+ },
120
+ ],
121
+ },
122
+ {
123
+ type: 'title',
124
+ text: 'Tarayıcıda teknik dönüşüm nasıl çalışır?',
125
+ level: 3,
126
+ },
127
+ {
128
+ type: 'paragraph',
129
+ html: 'Bir BMP dosyasını sürüklediğinizde, tarayıcı onu RAM belleğindeki ikili bir Blob olarak okur. Bu Blob, JavaScript\'in yerel görüntü motorunu kullanarak kodunu çözen bir <code>Image</code> öğesine yüklenir. Ardından, görüntü görünmez bir <code>Canvas</code> HTML5 öğesi üzerine çizilir. Tuval, görüntünün piksel piksel formunda bulunduğu sanal bir tuval görevi görür.',
130
+ },
131
+ {
132
+ type: 'paragraph',
133
+ html: 'Tuval üzerine çizildikten sonra, <code>image/webp</code> MIME türü ve istenen kalite seviyesi ile <code>toBlob()</code> yöntemini çalıştırıyoruz. Tarayıcı dahili olarak WebP sıkıştırma algoritmasını uygular ve sonuç dosyasıyla yeni bir Blob oluşturur. Bu Blob, tarayıcınızın diske kaydettiği doğrudan bir indirme URL\'sine dönüştürülür. Hiçbir zaman ağ bağlantısı kurulmaz.',
134
+ },
135
+ {
136
+ type: 'tip',
137
+ title: 'Mümkün olan en büyük sıkıştırma sıçraması',
138
+ html: 'BMP\'den WebP\'ye dönüşüm, dosya boyutunda %99\'luk bir azalma sağlayabilir. 20 MB\'lık bir BMP, görsel olarak neredeyse özdeş kalitede yaklaşık 200 KB\'lık bir WebP\'ye dönüşebilir. Standart görüntü formatları arasında mevcut olan en verimli dönüştürmedir.',
139
+ },
140
+ {
141
+ type: 'title',
142
+ text: 'WebP\'nin kullanım durumları ve uyumluluğu',
143
+ level: 3,
144
+ },
145
+ {
146
+ type: 'list',
147
+ icon: 'mdi:check-circle',
148
+ items: [
149
+ 'Web yayını — Chrome, Firefox, Safari, Edge ve tüm modern tarayıcılar.',
150
+ 'Sosyal ağlar — Instagram, Twitter, Facebook WebP\'yi yerel olarak kabul eder.',
151
+ 'Web uygulamaları ve PWA — anında yükleme için minimum boyutlar.',
152
+ 'Verimli arşivleme — eski BMP koleksiyonlarını değiştirerek gigabaytlarca tasarruf sağlar.',
153
+ 'E-posta pazarlaması — herhangi bir modern e-posta istemcisinde hızlı yüklenen hafif görüntüler.',
154
+ ],
155
+ },
156
+ {
157
+ type: 'title',
158
+ text: 'Sonuç: Tek tıklamayla en etkili dönüştürme',
159
+ level: 3,
160
+ },
161
+ {
162
+ type: 'paragraph',
163
+ html: 'Eğer elinizde Windows\'tan kalma eski BMP dosyaları, sıkıştırılmamış ekran görüntüleri veya eski araçlardan görüntüler varsa, bunları WebP\'ye dönüştürmek, depolama alanınızı ve web performansınızı optimize etmek için atabileceğiniz en etkili adımdır. Aracımızla dönüşüm anında, özel ve sınırsızdır — tam olması gerektiği gibi.',
164
+ },
165
+ ];
166
+
167
+
168
+ export const content: BmpAWebpLocaleContent = {
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 { BmpAWebpLocaleContent } from '../index';
4
+
5
+ const slug = 'convert-bmp-to-webp';
6
+ const title = '免费将 BMP 转换为 WebP';
7
+ const description =
8
+ '离线将 BMP 图像转换为 WebP。将巨大文件缩减至千字节。无需上传文件。免费、离线且完全私密。';
9
+
10
+ const ui: ImageConverterUI = {
11
+ dragText: '拖拽 BMP 文件...',
12
+ convertText: '立即将其转换为 WebP',
13
+ selectFiles: '选择文件',
14
+ processedFiles: '已处理文件',
15
+ downloadAll: '下载全部 (.zip)',
16
+ pending: '等待中',
17
+ bibliographyTitle: '参考文献',
18
+ faqTitle: '常见问题',
19
+ };
20
+
21
+ const faq: BmpAWebpLocaleContent['faq'] = [
22
+ {
23
+ question: '为什么我的 BMP 文件占用空间大 10 倍?转换为 WebP 有什么好处?',
24
+ answer:
25
+ 'BMP 存储的是未经压缩的像素图。WebP 使用数学压缩技术,在保持图像极高辨识度的同时,将巨大的 BMP 缩减到不到 1MB。',
26
+ },
27
+ {
28
+ question: '我需要注册账户吗?',
29
+ answer:
30
+ '我们不要求提供电子邮件,您的资料将保持隔离状态,因为处理是由您电脑上安装的浏览器 JavaScript 完成的,无需远程传输。',
31
+ },
32
+ {
33
+ question: '我可以同时拖入多个文件吗?',
34
+ answer:
35
+ '是的,如果您的硬件能够承受,您可以同时拖入 50 或 100 个文件进行处理,而无需排队。',
36
+ },
37
+ ];
38
+
39
+ const howTo: BmpAWebpLocaleContent['howTo'] = [
40
+ {
41
+ name: '识别原始文件',
42
+ text: '将您的位图集合放在准备好传输的窗口中。',
43
+ },
44
+ {
45
+ name: '原生批量激活',
46
+ text: '将所有文件投影或拖拽到我们的数字工作台上。',
47
+ },
48
+ {
49
+ name: '导出 WebP 批量文件',
50
+ text: '点击结果,您将分别获得极小体积的图像,或作为即时压缩包下载。',
51
+ },
52
+ ];
53
+
54
+ const bibliography: BmpAWebpLocaleContent['bibliography'] = [
55
+ {
56
+ name: 'BMP File Format',
57
+ url: 'https://en.wikipedia.org/wiki/BMP_file_format',
58
+ },
59
+ {
60
+ name: 'Google WebP Documentation',
61
+ url: 'https://developers.google.com/speed/webp',
62
+ },
63
+ ];
64
+
65
+ const seo: BmpAWebpLocaleContent['seo'] = [
66
+ {
67
+ type: 'title',
68
+ text: 'BMP 转 WebP 转换器:最极限的文件瘦身方案',
69
+ level: 2,
70
+ },
71
+ {
72
+ type: 'paragraph',
73
+ html: '将 BMP 转换为 WebP 与无疑是您可以对图像进行的、最令人惊叹的转变。BMP(位图)格式是数字生态系统中最古老、最笨重的格式之一:它不经任何压缩地存储每个像素,导致文件的体积可能是其现代等效格式的 20、50 甚至 100 倍。由 Google 开发的 WebP 应用了最先进的压缩算法,在保持出色视觉质量的同时,将体积缩减到极致。',
74
+ },
75
+ {
76
+ type: 'title',
77
+ text: '为什么 BMP 如此笨重,而 WebP 如此高效?',
78
+ level: 3,
79
+ },
80
+ {
81
+ type: 'paragraph',
82
+ html: 'BMP 格式诞生于 80 年底的 Windows 系统,当时硬盘空间巨大且压缩并非首要任务。每个像素都原样保存,没有任何缩减算法:一张 1920x1080 像素的图像在 BMP 中正好占用 5.93 MB,与其内容无关。这使其成为内部截图或无损编辑的理想选择,但完全不适合网页或现代存储。',
83
+ },
84
+ {
85
+ type: 'paragraph',
86
+ html: 'WebP 使用基于块的预测压缩和 DCT 变换(与数字视频背后的技术相同),使得同样的 1920x1080 图像仅占用 80 KB 到 300 KB。这意味着比原始 BMP 减少了 95% 到 99%。此外,WebP 支持透明度 Alpha 通道以及有损和无损压缩,提供了全面的通用性。',
87
+ },
88
+ {
89
+ type: 'title',
90
+ text: '对比:云端转换器 vs 我们的本地架构',
91
+ level: 3,
92
+ },
93
+ {
94
+ type: 'comparative',
95
+ items: [
96
+ {
97
+ title: '云端转换器',
98
+ description: '将您的 BMP 文件上传到远程服务器进行处理的工具。',
99
+ icon: 'mdi:cloud-upload',
100
+ pointIcon: 'mdi:close-circle-outline',
101
+ points: [
102
+ '在慢速连接下上传 20 MB 的 BMP 需要几分钟',
103
+ '您的图像存储在他人的服务器上',
104
+ '体积限制排除了大型 BMP 文件',
105
+ '侵入性广告和数据追踪器',
106
+ ],
107
+ },
108
+ {
109
+ title: '我们的本地架构',
110
+ description: '通过 Vanilla JS 技术和 Canvas API 在您的浏览器中直接处理。',
111
+ icon: 'mdi:laptop-mac',
112
+ highlight: true,
113
+ points: [
114
+ '无需网络传输,即时转换',
115
+ '绝对隐私——0 字节离开您的设备',
116
+ '不限单个文件的大小',
117
+ '无需互联网连接即可工作',
118
+ ],
119
+ },
120
+ ],
121
+ },
122
+ {
123
+ type: 'title',
124
+ text: '浏览器本地转换的技术原理',
125
+ level: 3,
126
+ },
127
+ {
128
+ type: 'paragraph',
129
+ html: '拖拽 BMP 文件时,浏览器将其作为二进制 Blob 读取到 RAM 内存中。该 Blob 被加载到 JavaScript 的 <code>Image</code> 元素中,使用原生图像引擎进行解码。接着,图像被绘制在不可见的 HTML5 <code>Canvas</code> 元素上。Canvas 充当虚拟画布,图像以像素对像素的形式存在于其中。',
130
+ },
131
+ {
132
+ type: 'paragraph',
133
+ html: '在 Canvas 上绘制完成后,我们运行 <code>toBlob()</code> 方法,并指定 MIME 类型为 <code>image/webp</code> 以及所需的质量等级。浏览器内部应用 WebP 压缩算法,生成包含结果文件的新 Blob。该 Blob 被转换为浏览器保存到硬盘的直接下载 URL。整个过程不建立任何网络连接。',
134
+ },
135
+ {
136
+ type: 'tip',
137
+ title: '最大的压缩跨度',
138
+ html: 'BMP 到 WebP 的转换可以实现 99% 的文件体积缩减。一张 20 MB 的 BMP 可以在视觉质量几乎完全相同的情况下,变成仅约 200 KB 的 WebP。这是标准图像格式之间最有效的转换。',
139
+ },
140
+ {
141
+ type: 'title',
142
+ text: 'WebP 的应用场景与兼容性',
143
+ level: 3,
144
+ },
145
+ {
146
+ type: 'list',
147
+ icon: 'mdi:check-circle',
148
+ items: [
149
+ '网页发布——Chrome、Firefox、Safari、Edge 及所有现代浏览器均支持。',
150
+ '社交网络——Instagram、Twitter、Facebook 原生接受 WebP。',
151
+ '网页应用与 PWA——极小体积实现即时加载。',
152
+ '高效归档——替换陈旧的 BMP 集合,节省数以 GB 计的空间。',
153
+ '邮件营销——轻量级图像,在任何现代邮件客户端中都能快速加载。',
154
+ ],
155
+ },
156
+ {
157
+ type: 'title',
158
+ text: '结论:一键实现最具冲击力的转换',
159
+ level: 3,
160
+ },
161
+ {
162
+ type: 'paragraph',
163
+ html: '如果您有来自 Windows 的陈旧 BMP 文件、未经压缩的截图或来自旧工具的图像,将它们转换为 WebP 是优化存储和网页性能的最有效行动。使用我们的工具,转换是即时的、私密的且无限制的——正应如此。',
164
+ },
165
+ ];
166
+
167
+
168
+ export const content: BmpAWebpLocaleContent = {
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
+ };
@@ -13,9 +13,21 @@ export const bmpAWebp: ConvertersToolEntry<ImageConverterUI> = {
13
13
  fg: 'mdi:file-export',
14
14
  },
15
15
  i18n: {
16
- es: () => import('./i18n/es').then((m) => m.content),
16
+ de: () => import('./i18n/de').then((m) => m.content),
17
17
  en: () => import('./i18n/en').then((m) => m.content),
18
+ es: () => import('./i18n/es').then((m) => m.content),
18
19
  fr: () => import('./i18n/fr').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 { GifAJpgLocaleContent } from '../index';
4
+
5
+ const slug = 'gif-zu-jpg-konvertieren';
6
+ const title = 'GIF in JPG online konvertieren';
7
+ const description =
8
+ 'Extrahieren Sie das erste Bild aus Ihren GIFs und konvertieren Sie es in JPG. Ohne Server. Lokale Verarbeitung im Browser. Kostenlos und unbegrenzt.';
9
+
10
+ const ui: ImageConverterUI = {
11
+ dragText: 'GIF-Dateien hierhere ziehen...',
12
+ convertText: 'Um sie sofort in JPG 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: GifAJpgLocaleContent['faq'] = [
22
+ {
23
+ question: 'Was passiert mit den Animationen, wenn ich zu JPG wechsle?',
24
+ answer:
25
+ 'Das JPG-Format ist streng statisch und unterstützt keine mehreren Einzelbilder. Unser Konverter extrahiert nur das erste Bild oder den ersten Frame aus der GIF-Sequenz.',
26
+ },
27
+ {
28
+ question: 'Verliere ich Spezialeffekte oder einen transparenten Hintergrund?',
29
+ answer:
30
+ 'Ja, das ist das natürliche Verhalten des JPG-Standards. Wenn Sie ein GIF mit transparentem Hintergrund hochladen, fügen wir automatisch eine solide weiße Hintergrundschicht ein, um Farbfehler zu vermeiden.',
31
+ },
32
+ {
33
+ question: 'Kann ich JPG-Fotos aus einem GIF extrahieren, ohne dass die Website meine Inhalte speichert?',
34
+ answer:
35
+ 'Absolut ja. Das Tool ist eine Web-App, die auf dem HTML5-Canvas basiert. Die gesamte Dekodierung wird vom Prozessor Ihres eigenen physischen Geräts ausgeführt.',
36
+ },
37
+ ];
38
+
39
+ const howTo: GifAJpgLocaleContent['howTo'] = [
40
+ {
41
+ name: 'Bewegliche schwere Dateien ziehen',
42
+ text: 'Platzieren oder ziehen Sie dieses GIF aus Ihrem Ordner in unsere Verarbeitungsbox.',
43
+ },
44
+ {
45
+ name: 'Saubere Berechnung des ersten Frames',
46
+ text: 'In Bruchteilen von Sekunden wird die Animation extrahiert und das solide weiße JPG erstellt, ohne Server zu kontaktieren.',
47
+ },
48
+ {
49
+ name: 'Erhalten Sie sie als ZIP-Paket',
50
+ text: 'Laden Sie sie über die Buttons oder als ZIP-Datei herunter, wenn Sie eine große Anzahl von Dateien verarbeitet haben.',
51
+ },
52
+ ];
53
+
54
+ const bibliography: GifAJpgLocaleContent['bibliography'] = [
55
+ {
56
+ name: 'Technische Spezifikation Joint Photographic Experts Group',
57
+ url: 'https://en.wikipedia.org/wiki/JPEG',
58
+ },
59
+ {
60
+ name: 'CompuServe GIF Information',
61
+ url: 'https://www.w3.org/Graphics/GIF/spec-gif89a.txt',
62
+ },
63
+ ];
64
+
65
+ const seo: BigIntajpgLocaleContent['seo'] = [
66
+ {
67
+ type: 'title',
68
+ text: 'GIF-zu-JPG-Konverter: Extrahieren Sie Frames als hochwertige Bilder',
69
+ level: 2,
70
+ },
71
+ {
72
+ type: 'paragraph',
73
+ html: 'GIF-Dateien dominieren seit Jahrzehnten die Welt der kurzen Animationen im Internet. Ihre animierte Natur macht sie jedoch völlig nutzlos als Thumbnail, Vorschau für soziale Netzwerke oder Bild für Dokumente. Wenn Sie einen bestimmten Frame aus einem GIF extrahieren und in ein hochwertiges statisches Bild konvertieren müssen, ist die Konvertierung in JPG die praktischste und kompatibelste Lösung.',
74
+ },
75
+ {
76
+ type: 'title',
77
+ text: 'GIF oder JPG? Formate mit gegensätzlichen Zwecken',
78
+ level: 3,
79
+ },
80
+ {
81
+ type: 'paragraph',
82
+ html: 'Das GIF (Graphics Interchange Format) wurde 1987 mit einer strengen Einschränkung entwickelt, die bis heute besteht: Es kann nur 256 Farben pro Frame darstellen. Diese technische Einschränkung war für einfache Animationen mit reduzierten Paletten egal, macht es aber zu einem visuell armen Format für reale Fotoaufnahmen. Das JPG hingegen kann Millionen von Farben mit fortschrittlichen perzeptuellen Kompressionsalgorithmen rendern.',
83
+ },
84
+ {
85
+ type: 'paragraph',
86
+ html: 'Das Extrahieren eines Frames aus einem GIF und das Speichern als JPG hat vielfältige Anwendungen: Erstellen von Thumbnails für Videoplayer, Erstellen von Vorschauen für Content-Management-Plattformen, Erhalten statischer Bilder für Präsentationen oder einfach das Archivieren eines visuellen Moments einer komplexen Animation. Das resultierende JPG wird viel leichter sein als das ursprüngliche GIF und universell kompatibel.',
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: 'Tools, die Ihre Dateien auf einen Remote-Server hochladen, um sie zu verarbeiten.',
99
+ icon: 'mdi:cloud-upload',
100
+ pointIcon: 'mdi:close-circle-outline',
101
+ points: [
102
+ 'Ihre GIFs reisen über das Internet zu Servern von Drittanbietern',
103
+ 'Netzwerklatenz beim Hoch- und Herunterladen',
104
+ 'Größen- und Dateilimits pro Sitzung',
105
+ 'Risiko der Datenaufbewahrung auf fremden Servern',
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 Geschwindigkeit ohne Netzwerkwartezeit',
116
+ 'Keine Größen- oder Dateilimits',
117
+ 'Absoluter Datenschutz: 0 Bytes werden nach außen gesendet',
118
+ ],
119
+ },
120
+ ],
121
+ },
122
+ {
123
+ type: 'title',
124
+ text: 'Wie die technische Frame-Extraktion funktioniert',
125
+ level: 3,
126
+ },
127
+ {
128
+ type: 'paragraph',
129
+ html: 'Die lokale Konvertierung stützt sich auf die Leistung des HTML5-Canvas-API. Wenn Sie ein GIF laden, dekodiert der Browser es im Speicher als natives Image-Element. Beim Rendern auf einem unsichtbaren Canvas erfasst die Grafik-Engine des Browsers automatisch den ersten Frame der Animationssequenz.',
130
+ },
131
+ {
132
+ type: 'paragraph',
133
+ html: 'Da das JPG-Format keine Transparenzen unterstützt, wendet unser Algorithmus vor dem Export einen soliden weißen Hintergrund an. Die <code>toDataURL(\'image/jpeg\')</code> Methode des Canvas generiert den JPG-Bytestrom direkt im RAM Ihres Computers, ohne jegliche Netzwerkverbindung. Die resultierende Datei wird sofort auf Ihr Gerät heruntergeladen.',
134
+ },
135
+ {
136
+ type: 'tip',
137
+ title: 'Eingeschränkte Farbpalette des GIFs',
138
+ html: 'Das GIF kann nur 256 Farben pro Frame enthalten. Das extrahierte JPG erbt diese reduzierte Palette vom Original: Wenn das GIF Verläufe oder Fotos hatte, kann es zu einer gewissen Posterisierung kommen. Verwenden Sie für das beste Ergebnis GIFs mit einfachen Farben oder Illustrationen.',
139
+ },
140
+ {
141
+ type: 'title',
142
+ text: 'Anwendungsfälle und Kompatibilität des resultierenden JPGs',
143
+ level: 3,
144
+ },
145
+ {
146
+ type: 'list',
147
+ icon: 'mdi:check-circle',
148
+ items: [
149
+ 'Thumbnails und Vorschauen für Videoplattformen und CMS.',
150
+ 'Titelbilder für Social-Media-Beiträge.',
151
+ 'Einfügen in Word-, PowerPoint- oder PDF-Dokumente.',
152
+ 'Präsentationsdateien und Marketingmaterialien.',
153
+ 'Universelle Kompatibilität mit Viewern unter Windows, macOS und Mobilgeräten.',
154
+ ],
155
+ },
156
+ {
157
+ type: 'title',
158
+ text: 'Fazit: Der Frame, der mehr wert ist als die Animation',
159
+ level: 3,
160
+ },
161
+ {
162
+ type: 'paragraph',
163
+ html: 'Ein animiertes GIF von 2 MB kann ein JPG des ersten Frames von nur etwa 50-200 KB erzeugen, abhängig von der Auflösung. Unser Tool führt diese Konvertierung sofort, privat und ohne Limits direkt in Ihrem Browser durch. Ohne Server, ohne Konten, ohne Wartezeiten.',
164
+ },
165
+ ];
166
+
167
+
168
+ export const content: GifAJpgLocaleContent = {
169
+ slug,
170
+ title,
171
+ description,
172
+ ui,
173
+ seo,
174
+ faq,
175
+ bibliography,
176
+ howTo,
177
+ schemas: generateSchemas({ title, description, inLanguage: '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 { GifAJpgLocaleContent } from '../index';
4
4
 
5
5
  const slug = 'gif-to-jpg-converter';
@@ -164,16 +164,6 @@ const seo: GifAJpgLocaleContent['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: GifAJpgLocaleContent = {
179
169
  slug,
@@ -184,5 +174,5 @@ export const content: GifAJpgLocaleContent = {
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 { GifAJpgLocaleContent } from '../index';
4
4
 
5
5
  const slug = 'convertidor-gif-a-jpg';
@@ -164,16 +164,6 @@ const seo: GifAJpgLocaleContent['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: GifAJpgLocaleContent = {
179
169
  slug,
@@ -184,5 +174,5 @@ export const content: GifAJpgLocaleContent = {
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 { GifAJpgLocaleContent } from '../index';
4
4
 
5
5
  const slug = 'convertisseur-gif-en-jpg';
@@ -164,16 +164,6 @@ const seo: GifAJpgLocaleContent['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: GifAJpgLocaleContent = {
179
169
  slug,
@@ -184,5 +174,5 @@ export const content: GifAJpgLocaleContent = {
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
  };