@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 { JpgAPngLocaleContent } from '../index';
4
+
5
+ const slug = 'jpg-png-donusturucu';
6
+ const title = 'Online ve Ücretsiz JPG\'den PNG\'ye Dönüştür';
7
+ const description =
8
+ 'Dosya yüklemeden tarayıcınızda JPG görüntülerini PNG\'ye dönüştürün. Kayıpsız, ücretsiz ve tamamen özel dönüşüm.';
9
+
10
+ const ui: ImageConverterUI = {
11
+ dragText: 'JPG 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: JpgAPngLocaleContent['faq'] = [
22
+ {
23
+ question: 'JPG\'den PNG\'ye dönüştürmeyi ne zaman kullanmalıyım?',
24
+ answer:
25
+ 'Bir fotoğrafın içindeki metni veya logoları düzenleyeceğiniz zaman. Bir JPG dosyasını birden çok kez kaydederseniz, o dosya bozulur. PNG ise sıkıştırmayı dondurur.',
26
+ },
27
+ {
28
+ question: 'PNG dosyası hemen şeffaf bir arka plana sahip olacak mı?',
29
+ answer:
30
+ 'Hayır. Orijinal JPG dosyası düzdü ve bu tür bir yapısal kanala sahip değildi. Elde edilen PNG bu alanı hazırlayacaktır, ardından Photoshop veya başka bir düzenleyici kullanarak parçayı izole etmeniz gerekecektir.',
31
+ },
32
+ {
33
+ question: 'Bu web sitesinin trafik sınırları var mı?',
34
+ answer:
35
+ 'Bulut bağımlılığı olmayan Edge teknolojileri sayesinde, dönüşümünüzün boyutu herhangi bir sınır oluşturmaz çünkü tamamen bilgisayarınızı veya mobil terminalinizi kullanır.',
36
+ },
37
+ ];
38
+
39
+ const howTo: JpgAPngLocaleContent['howTo'] = [
40
+ {
41
+ name: 'JPG\'yi panele sürükleyin',
42
+ text: 'Fare veya bilgisayar seçici kullanarak JPG formatındaki statik görüntüleri yükleyin.',
43
+ },
44
+ {
45
+ name: 'Kayıpsız Yürütme',
46
+ text: 'Vanilla yazılımı, görüntünün bitlerini PNG ailesine özgü kayıpsız bir kılıfa iter.',
47
+ },
48
+ {
49
+ name: 'Oturanı Bitir',
50
+ text: 'Panele tıkladığınızda tarayıcınız indirilen web varlıklarını Kullanıcı Klasörlerinize bırakacaktır.',
51
+ },
52
+ ];
53
+
54
+ const bibliography: JpgAPngLocaleContent['bibliography'] = [
55
+ {
56
+ name: 'The W3C PNG Graphics',
57
+ url: 'https://www.w3.org/Graphics/PNG/',
58
+ },
59
+ {
60
+ name: 'Understanding Digital Image Compression',
61
+ url: 'https://en.wikipedia.org/wiki/Image_compression',
62
+ },
63
+ ];
64
+
65
+ const seo: JpgAPngLocaleContent['seo'] = [
66
+ {
67
+ type: 'title',
68
+ text: 'JPG\'den PNG\'ye Dönüştürücü: Kayıpsız Düzenleme ve Şeffaflık',
69
+ level: 2,
70
+ },
71
+ {
72
+ type: 'paragraph',
73
+ html: '<strong>JPG</strong> fotoğraf makinesi fotoğrafları için rakipsizdir, ancak bir zayıf noktası vardır: dosyayı her kaydettiğinizde kayıplı sıkıştırmasını yeniden uygular, kenarları ve geçişleri kademeli olarak bozar. <strong>PNG</strong> kayıpsız sıkıştırma kullanır; bir kez kaydedildiğinde pikseller değişmez. Bir JPG görüntüsünü PNG\'ye dönüştürmek, bir görüntüyü yoğun düzenleme için hazırlamanız, şeffaf bir arka plan eklemeniz veya birden fazla kaydetme gerektiren bir tasarım akışına entegre etmeniz gerektiğinde kilit işlemdir.',
74
+ },
75
+ {
76
+ type: 'title',
77
+ text: 'JPG mi PNG mi? Her formatı ne zaman kullanmalı?',
78
+ level: 3,
79
+ },
80
+ {
81
+ type: 'paragraph',
82
+ html: '<strong>JPG</strong> fotoğrafçılığın kralıdır: düşük boyut, her şeyle uyumlu. Ancak sıkıştırma kusurları her düzenleme ve yeniden kaydetme ile birikir. Bir görüntüyü tekrar tekrar kırpmanız, rötuşlamanız veya metin eklemeniz gerekiyorsa, JPG\'den başlamak her döngüde bozulma eklemek anlamına gelir. Ayrıca, JPG dosyasında alfa kanalı yoktur: şeffaf arka planlara sahip olamaz, bu da onu logolar, simgeler ve kullanıcı arayüzü (UI) öğeleri için diskalifiye eder.',
83
+ },
84
+ {
85
+ type: 'paragraph',
86
+ html: '<strong>PNG</strong> kurumsal logolar, net metin içeren ekran görüntüleri, arayüz öğeleri, daha sonra kırpmanız gerekecek beyaz arka planlı ürün görselleri veya birden fazla kez düzenlenecek herhangi bir grafik kaynağı için doğru seçimdir. Kayıpsız sıkıştırma, metin kenarlarının mükemmel bir şekilde tanımlanmış kalmasını ve düz renklerin JPEG paraziti olmadan saf kalmasını garanti eder.',
87
+ },
88
+ {
89
+ type: 'title',
90
+ text: 'Karşılaştırma: Yerel Dönüşüm vs Bulut',
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ı uzak bir sunucuya yükleyen araçlar.',
99
+ icon: 'mdi:cloud-upload',
100
+ pointIcon: 'mdi:close-circle-outline',
101
+ points: [
102
+ 'Yükleme ve indirmede ağ gecikmesi',
103
+ 'Görüntüleriniz başkalarının sunucularında kalır',
104
+ 'Boyut ve günlük dönüşüm sınırları',
105
+ 'Müdahaleci reklamlar ve üçüncü taraf izleyiciler',
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
+ 'Anında hız — sıfır ağ gecikmesi',
115
+ 'Tam gizlilik — dışarıya 0 bayt gönderilir',
116
+ 'MB veya dosya sayısı sınırı yok',
117
+ 'Reklam veya izleme içermeyen temiz arayüz',
118
+ ],
119
+ },
120
+ ],
121
+ },
122
+ {
123
+ type: 'title',
124
+ text: 'Teknik Olarak Nasıl Çalışır?',
125
+ level: 3,
126
+ },
127
+ {
128
+ type: 'paragraph',
129
+ html: 'Süreç tamamen yereldir: tarayıcı seçilen JPG ile bir <strong>Blob</strong> oluşturur ve bunu bellekteki bir <strong>Canvas HTML5</strong> üzerine çizer. Oluşturulduktan sonra <code>toDataURL(\'image/png\')</code> çağrılır — tarayıcıya entegre PNG kodeği, herhangi bir yeni kayıplı sıkıştırma uygulamadan her pikseli yeniden kodlar. Sonuç, JPG\'nin mevcut durumunu sadık bir şekilde koruyan bir PNG\'dir: ne daha iyi ne daha kötü, sadece dondurulmuş halidir.',
130
+ },
131
+ {
132
+ type: 'paragraph',
133
+ html: 'Elde edilen PNG, Photoshop veya GIMP gibi profesyonel araçlarda kullanılan kayıpsız DEFLATE sıkıştırmasını kullanacaktır. Boyutu, tüm pikselleri bilgi atmadan sakladığı için orijinal JPG\'den — genellikle 2 ila 5 kat — daha büyük olacaktır. Bu, aslına uygunluk ve sonsuz düzenlenebilirlik için ödenen bedeldir.',
134
+ },
135
+ {
136
+ type: 'tip',
137
+ title: 'Önemli: PNG, JPEG kalitesini geri getirmez',
138
+ html: 'Bir JPG görüntüsünü PNG\'ye dönüştürmek, orijinal JPEG sıkıştırması sırasında <strong>kaybedilen kaliteyi geri getirmez</strong>. JPG dosyanızda blok kusurları veya renk paraziti varsa, PNG bunları bozulmadan koruyacaktır — sadece daha fazlasının eklenmesini engeller. Dönüşümü, görüntünün mevcut durumunu "dondurmak" olarak düşünün, böylece gelecekteki düzenlemeler görüntüyü daha fazla bozmaz.',
139
+ },
140
+ {
141
+ type: 'title',
142
+ text: 'Kullanım Durumları ve Uyumluluk',
143
+ level: 3,
144
+ },
145
+ {
146
+ type: 'list',
147
+ icon: 'mdi:check-circle',
148
+ items: [
149
+ 'Kırpma işleminden sonra şeffaf arka plana ihtiyaç duyan logolar ve marka öğeleri.',
150
+ 'Metin içeren ve birden çok kez düzenlenip yeniden kaydedilecek ekran görüntüleri.',
151
+ 'E-ticaret için temiz ve kırpılabilir beyaz arka plan gerektiren ürün görselleri.',
152
+ 'PowerPoint veya Google Slaytlar sunumları için grafik kaynakları.',
153
+ 'Kenar netliğinin kritik olduğu web ve mobil uygulamalar için kullanıcı arayüzü (UI) varlıkları.',
154
+ ],
155
+ },
156
+ {
157
+ type: 'title',
158
+ text: 'Sonuç',
159
+ level: 3,
160
+ },
161
+ {
162
+ type: 'paragraph',
163
+ html: 'JPG\'den PNG\'ye dönüştürme, her ciddi tasarım iş akışındaki ilk adımdır. Orijinal kaliteyi değiştirmez, ancak her pikseli gelecekteki düzenlemelerden korur. Bu araçla süreç anında ve tamamen özel olarak gerçekleşir, kurumsal veya kişisel görüntüleriniz cihazınızdan hiçbir zaman çıkmaz.',
164
+ },
165
+ ];
166
+
167
+
168
+ export const content: JpgAPngLocaleContent = {
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 { JpgAPngLocaleContent } from '../index';
4
+
5
+ const slug = 'convert-jpg-to-png';
6
+ const title = '在线免费将 JPG 转换为 PNG';
7
+ const description =
8
+ '在您的浏览器中完成 JPG 到 PNG 的转换,无需上传文件。无损转换、免费且完全私密。';
9
+
10
+ const ui: ImageConverterUI = {
11
+ dragText: '拖拽 JPG 文件...',
12
+ convertText: '立即将其转换为 PNG',
13
+ selectFiles: '选择文件',
14
+ processedFiles: '已处理文件',
15
+ downloadAll: '下载全部 (.zip)',
16
+ pending: '等待中',
17
+ bibliographyTitle: '参考文献',
18
+ faqTitle: '常见问题',
19
+ };
20
+
21
+ const faq: JpgAPngLocaleContent['faq'] = [
22
+ {
23
+ question: '我什么时候应该将 JPG 转换为 PNG?',
24
+ answer:
25
+ '每当您需要编辑照片中的文字或徽标(logo)时。如果您多次保存 JPG,图像质量会变差。而 PNG 会“冻结”压缩,保持质量不变。',
26
+ },
27
+ {
28
+ question: 'PNG 文件会立即具有透明背景吗?',
29
+ answer:
30
+ '不会。原始 JPG 是扁平的,没有透明通道。生成的 PNG 会准备好这个容器,然后您需要使用 Photoshop 或其他编辑器来隔离并移除背景。',
31
+ },
32
+ {
33
+ question: '这个网站有流量限制吗?',
34
+ answer:
35
+ '由于使用了无云端依赖的 Edge 技术,您的转换大小不受任何限制,因为它完全利用您的电脑或移动终端完成处理。',
36
+ },
37
+ ];
38
+
39
+ const howTo: JpgAPngLocaleContent['howTo'] = [
40
+ {
41
+ name: '将 JPG 拖入面板',
42
+ text: '使用鼠标或文件选择器上传 JPG 格式的静态图像。',
43
+ },
44
+ {
45
+ name: '无损执行',
46
+ text: 'Vanilla 软件将图像位信息推入 PNG 家族特有的无损包装容器中。',
47
+ },
48
+ {
49
+ name: '结束会话',
50
+ text: '点击面板,您的浏览器会将下载的网页资产保存到您的用户文件夹中。',
51
+ },
52
+ ];
53
+
54
+ const bibliography: JpgAPngLocaleContent['bibliography'] = [
55
+ {
56
+ name: 'The W3C PNG Graphics',
57
+ url: 'https://www.w3.org/Graphics/PNG/',
58
+ },
59
+ {
60
+ name: 'Understanding Digital Image Compression',
61
+ url: 'https://en.wikipedia.org/wiki/Image_compression',
62
+ },
63
+ ];
64
+
65
+ const seo: JpgAPngLocaleContent['seo'] = [
66
+ {
67
+ type: 'title',
68
+ text: 'JPG 转 PNG 转换器:无损编辑与透明度支持',
69
+ level: 2,
70
+ },
71
+ {
72
+ type: 'paragraph',
73
+ html: '<strong>JPG</strong> 对于相机拍摄的照片来说是无可比拟的,但它有一个致命弱点:每次保存文件时,它都会重新应用有损压缩,导致边缘和渐变逐渐降级。而 <strong>PNG</strong> 使用无损压缩——一旦保存,像素就是不可更改的。当您需要准备图像进行深度编辑、添加透明背景,或将其集成到需要多次保存的设计流程中时,将 JPG 转换为 PNG 就是关键操作。',
74
+ },
75
+ {
76
+ type: 'title',
77
+ text: 'JPG 还是 PNG?何时使用每种格式',
78
+ level: 3,
79
+ },
80
+ {
81
+ type: 'paragraph',
82
+ html: '<strong>JPG</strong> 是摄影之王:体积小,兼容性极佳。但在每次编辑和重新保存时,其压缩伪影(artifacts)会不断累积。如果您需要反复裁剪、修饰或向图像添加文字,从 JPG 开始意味着在每个周期中都会引入质量退化。此外,JPG 缺乏 Alpha 通道:它无法拥有透明背景,这使其在徽标、图标和 UI 元素中处于劣势。',
83
+ },
84
+ {
85
+ type: 'paragraph',
86
+ html: '<strong>PNG</strong> 是公司徽标、文字清晰的截图、界面元素、后期需要抠图的白底产品图,或任何需要多次编辑的图形资源的正确选择。无损压缩保证了文字边缘保持完美的清晰度,纯色区域保持纯净,没有 JPEG 噪点。',
87
+ },
88
+ {
89
+ type: 'title',
90
+ text: '对比:本地转换 vs 云端转换',
91
+ level: 3,
92
+ },
93
+ {
94
+ type: 'comparative',
95
+ items: [
96
+ {
97
+ title: '云端转换器',
98
+ description: '将您的文件上传到远程服务器进行处理的工具。',
99
+ icon: 'mdi:cloud-upload',
100
+ pointIcon: 'mdi:close-circle-outline',
101
+ points: [
102
+ '上传和下载时的网络延迟',
103
+ '您的图像保留在他人的服务器上',
104
+ '文件大小和每日转换次数限制',
105
+ '干扰性广告和第三方追踪器',
106
+ ],
107
+ },
108
+ {
109
+ title: '我们的本地架构',
110
+ description: '通过 Vanilla JS 技术在您的硬件上直接处理。',
111
+ icon: 'mdi:laptop-mac',
112
+ highlight: true,
113
+ points: [
114
+ '即时处理——零网络延迟',
115
+ '完全隐私——0 字节向外传输',
116
+ '没有 MB 大小或文件数量限制',
117
+ '界面干净,无广告或追踪',
118
+ ],
119
+ },
120
+ ],
121
+ },
122
+ {
123
+ type: 'title',
124
+ text: '技术原理是如何运作的',
125
+ level: 3,
126
+ },
127
+ {
128
+ type: 'paragraph',
129
+ html: '处理过程完全是本地的:浏览器根据选定的 JPG 创建一个 <strong>Blob</strong>,并将其绘制在内存中的 <strong>HTML5 Canvas</strong> 上。渲染完成后,调用 <code>toDataURL(\'image/png\')</code>——浏览器内置的 PNG 编解码器会重新编码每个像素,而不应用任何新的有损压缩。结果是一个忠实保留 JPG 当前状态的 PNG:质量既没有变好也没有变坏,只是被“冻结”了。',
130
+ },
131
+ {
132
+ type: 'paragraph',
133
+ html: '生成的 PNG 将使用 DEFLATE 无损压缩,这与 Photoshop 或 GIMP 等专业工具所使用的技术相同。由于它存储了所有像素且不丢弃信息,因此其体积将比原始 JPG 更大——通常在 2 到 5 倍之间。这是为了忠实度和无限可编辑性所付出的代价。',
134
+ },
135
+ {
136
+ type: 'tip',
137
+ title: '重要提示:PNG 不会恢复 JPEG 的质量',
138
+ html: '将 JPG 转换为 PNG <strong>不会恢复</strong>在原始 JPEG 压缩过程中损失的质量。如果您的 JPG 已经存在模糊块(block artifacts)或色彩噪点,PNG 会完好地保留它们——它只是防止了进一步压缩带来的损失。您可以将转换视为对图像当前状态的“冻结”,以便未来的编辑不会进一步降低其质量。',
139
+ },
140
+ {
141
+ type: 'title',
142
+ text: '使用场景与兼容性',
143
+ level: 3,
144
+ },
145
+ {
146
+ type: 'list',
147
+ icon: 'mdi:check-circle',
148
+ items: [
149
+ '抠图后需要透明背景的徽标和品牌元素。',
150
+ '带有文字且需要多次编辑和重新保存的截图。',
151
+ '需要干净、可抠图白底的电商产品图。',
152
+ '用于 PowerPoint 或 Google Slides 演示文稿的图形资源。',
153
+ '边缘清晰度至关重要的网页和移动应用的 UI 资产。',
154
+ ],
155
+ },
156
+ {
157
+ type: 'title',
158
+ text: '结论',
159
+ level: 3,
160
+ },
161
+ {
162
+ type: 'paragraph',
163
+ html: '将 JPG 转换为 PNG 是任何严肃设计流程的第一步。它不会改变原始质量,但会保护每个像素不受未来编辑的影响。使用此工具,转换过程瞬间完成且完全私密,您的企业或个人图像绝不会离开您的设备。',
164
+ },
165
+ ];
166
+
167
+
168
+ export const content: JpgAPngLocaleContent = {
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 jpgAPng: 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 { JpgAWebpLocaleContent } from '../index';
4
+
5
+ const slug = 'jpg-zu-webp-konverter';
6
+ const title = 'JPG zu WebP Konverter Online und Kostenlos';
7
+ const description =
8
+ 'Konvertieren Sie JPG-Bilder direkt in Ihrem Browser in WebP. Überlegene Kompression ohne sichtbaren Qualitätsverlust. Keine Dateiuploads. Kostenlos, unbegrenzt und privat.';
9
+
10
+ const ui: ImageConverterUI = {
11
+ dragText: 'JPG-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: JpgAWebpLocaleContent['faq'] = [
22
+ {
23
+ question: 'Warum JPG-Fotos in WebP konvertieren?',
24
+ answer:
25
+ 'WebP ermöglicht eine deutlich bessere Kompression herkömmlicher JPG-Dateien, ohne dass das menschliche Auge den Unterschied bemerkt. Dies führt zu schnelleren und moderneren Websites.',
26
+ },
27
+ {
28
+ question: 'Muss ich pro Bild bezahlen?',
29
+ answer:
30
+ 'Nein, das Tool ist kostenlos und alles wird direkt auf Ihrem Computer verarbeitet. Es ist unbegrenzt sowohl für den privaten als auch für den professionellen Gebrauch.',
31
+ },
32
+ {
33
+ question: 'Ist die Konvertierung sicher?',
34
+ answer:
35
+ 'Ja, absolut. Die gesamte Verarbeitung findet im HTML5 Canvas Ihres lokalen Browsers statt, ohne dass Daten an externe Server gesendet werden.',
36
+ },
37
+ ];
38
+
39
+ const howTo: JpgAWebpLocaleContent['howTo'] = [
40
+ {
41
+ name: 'JPG-Fotos einfügen',
42
+ text: 'Legen Sie Ihre JPG-Dateien ab oder ziehen Sie sie direkt in den oberen Bereich. Die Erkennung erfolgt praktisch sofort.',
43
+ },
44
+ {
45
+ name: 'Verarbeitung zu WebP',
46
+ text: 'Die lokale Rendering-Engine konvertiert jede Bilddatei in ein ultra-optimiertes WebP, das für das Web bereit ist.',
47
+ },
48
+ {
49
+ name: 'Ergebnisse herunterladen',
50
+ text: 'Speichern Sie jedes WebP einzeln oder laden Sie die ZIP-Datei mit allen konvertierten Dateien herunter.',
51
+ },
52
+ ];
53
+
54
+ const bibliography: JpgAWebpLocaleContent['bibliography'] = [
55
+ {
56
+ name: 'Google WebP Kompressionsstudie',
57
+ url: 'https://developers.google.com/speed/webp/docs/webp_study',
58
+ },
59
+ {
60
+ name: 'Web.dev: Bilder in modernen Formaten bereitstellen',
61
+ url: 'https://web.dev/uses-webp-images/',
62
+ },
63
+ ];
64
+
65
+ const seo: JpgAWebpLocaleContent['seo'] = [
66
+ {
67
+ type: 'title',
68
+ text: 'JPG zu WebP Konverter: Beschleunigen Sie Ihre Seite mit Googles modernem Format',
69
+ level: 2,
70
+ },
71
+ {
72
+ type: 'paragraph',
73
+ html: 'Das <strong>JPG</strong>-Format dominiert seit Jahrzehnten die digitale Fotografie – universell kompatibel und weit verbreitet. Doch Google hat <strong>WebP</strong> entwickelt, um JPG in seinem eigenen Bereich zu schlagen: dieselbe visuelle Qualität bei 25–35 % geringerer Dateigröße. Für Entwickler und Marketingteams, die gegen langsame Ladezeiten kämpfen, ist die Konvertierung von JPG in WebP die wertvollste Optimierung, die ohne Änderungen am Design vorgenommen werden kann.',
74
+ },
75
+ {
76
+ type: 'title',
77
+ text: 'JPG oder WebP? Wann welches Format zu verwenden ist',
78
+ level: 3,
79
+ },
80
+ {
81
+ type: 'paragraph',
82
+ html: '<strong>JPG</strong> bleibt die richtige Wahl, wenn Sie universelle Kompatibilität benötigen: E-Mails an Kunden, Word-Dokumente, ältere Social-Media-Plattformen oder CMS-Systeme, die WebP noch nicht akzeptieren. Sein dreißigjähriges Ökosystem garantiert, dass jeder Bildschirm, Drucker oder Betrachter es problemlos öffnen kann. Der Hauptnachteil ist die Größe – ein 1,5 MB großes JPG im Header kann den LCP-Score Ihrer Seite verschlechtern und die Schwellenwerte für Google Core Web Vitals verfehlen.',
83
+ },
84
+ {
85
+ type: 'paragraph',
86
+ html: '<strong>WebP</strong> ist die intelligente Wahl für alle Inhalte auf Ihrer Website. Chrome, Firefox, Safari und Edge unterstützen es seit Jahren nativ. Produktbilder im E-Commerce, Blog-Banner, Video-Thumbnails und alle online veröffentlichten Fotos profitieren direkt: leichtere Seiten, bessere Google PageSpeed Insights Scores und eine flüssigere Benutzererfahrung – besonders bei langsamen mobilen Verbindungen.',
87
+ },
88
+ {
89
+ type: 'title',
90
+ text: 'Vergleich: Lokale vs Cloud Konvertierung',
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.',
99
+ icon: 'mdi:cloud-upload',
100
+ pointIcon: 'mdi:close-circle-outline',
101
+ points: [
102
+ 'Netzwerklatenz beim Hoch- und Herunterladen',
103
+ 'Ihre Fotos werden auf Servern von Drittanbietern gespeichert',
104
+ 'Dateigrößenlimits und tägliche Konvertierungsbeschränkungen',
105
+ 'Aufdringliche Werbung und Drittanbieter-Tracker',
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
+ 'Sofortige Geschwindigkeit – keine Netzwerklatenz',
115
+ 'Vollständige Privatsphäre – 0 Byte werden extern gesendet',
116
+ 'Keine Megabyte-Limits oder Dateianzahlbeschränkungen',
117
+ 'Saubere Benutzeroberfläche, keine Werbung oder Tracking',
118
+ ],
119
+ },
120
+ ],
121
+ },
122
+ {
123
+ type: 'title',
124
+ text: 'Wie es technisch funktioniert',
125
+ level: 3,
126
+ },
127
+ {
128
+ type: 'paragraph',
129
+ html: 'Wenn Sie ein JPG in das Tool ziehen, erstellt der Browser ein <strong>Blob-Objekt</strong>, das nur in Ihrem RAM existiert. Dieser Blob wird dekodiert und auf ein unsichtbares <strong>HTML5 Canvas</strong>-Element gezeichnet. Da JPG kein Alpha-Kanal besitzt, erfolgt die Konvertierung in WebP direkt: Die Engine exportiert das Canvas durch Aufruf von <code>toDataURL(\'image/webp\')</code> und erzeugt einen Byte-Stream, den Ihr Betriebssystem sofort herunterlädt – ganz ohne Server.',
130
+ },
131
+ {
132
+ type: 'paragraph',
133
+ html: 'Der WebP-Kompressionsalgorithmus kombiniert Techniken zur Blockvorhersage (ähnlich denen in VP8, Googles Video-Codec) mit Farbumwandlungen und arithmetischer Kodierung. Das Ergebnis ist eine Datei, die dieselben Wahrnehmungsinformationen wie das ursprüngliche JPG enthält, aber weitaus effizienter verpackt ist – was bedeutet, dass bei jedem Seitenaufruf weniger Kilobyte übertragen werden.',
134
+ },
135
+ {
136
+ type: 'tip',
137
+ title: 'Core Web Vitals Tipp: LCP und Bildgewicht',
138
+ html: 'Der <strong>Largest Contentful Paint (LCP)</strong> ist die Google-Metrik, die misst, wie lange es dauert, bis das größte visuelle Element auf Ihrer Seite geladen ist. Ein 1,5 MB großes Header-JPG kann zu einem WebP von nur 900 KB – oder sogar 600 KB – werden, ohne dass ein sichtbarer Unterschied besteht. Diese <strong>Ersparnis von 25–35 %</strong> kann Ihren LCP von "Verbesserungswürdig" auf "Gut" heben und Sie in den Suchergebnissen weiter nach oben bringen.',
139
+ },
140
+ {
141
+ type: 'title',
142
+ text: 'Anwendungsfälle und Kompatibilität',
143
+ level: 3,
144
+ },
145
+ {
146
+ type: 'list',
147
+ icon: 'mdi:check-circle',
148
+ items: [
149
+ 'Produktbilder in WooCommerce- oder Shopify-Shops: weniger Gewicht, mehr Conversions.',
150
+ 'Fotografie für Blogs und Artikel: bessere PageSpeed-Werte ohne Redesign.',
151
+ 'Web-Banner und Werbemittel: leichtere Dateien bei gleicher Schärfe.',
152
+ 'Portfolio-Galerien für Architektur-, Fotografie- oder Designstudios.',
153
+ 'Video-Thumbnails auf Streaming-Seiten oder Online-Kursplattformen.',
154
+ ],
155
+ },
156
+ {
157
+ type: 'title',
158
+ text: 'Fazit',
159
+ level: 3,
160
+ },
161
+ {
162
+ type: 'paragraph',
163
+ html: 'Die Konvertierung Ihrer JPGs in WebP ist heute eine der einfachsten und kosteneffizientesten Optimierungen, die Sie für jede Website vornehmen können. Mit diesem Tool erledigen Sie das in Sekunden, kostenlos und ohne dass Ihre Bilder jemals Ihr Gerät verlassen. Weniger Kilobyte, besserer LCP, schnellere Seiten – alles bei exakt demselben Erscheinungsbild wie zuvor.',
164
+ },
165
+ ];
166
+
167
+
168
+ export const content: JpgAWebpLocaleContent = {
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 { JpgAWebpLocaleContent } from '../index';
4
4
 
5
5
  const slug = 'jpg-to-webp-converter';
@@ -164,16 +164,6 @@ const seo: JpgAWebpLocaleContent['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: JpgAWebpLocaleContent = {
179
169
  slug,
@@ -184,5 +174,5 @@ export const content: JpgAWebpLocaleContent = {
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 { JpgAWebpLocaleContent } from '../index';
4
4
 
5
5
  const slug = 'convertidor-jpg-a-webp';
@@ -164,16 +164,6 @@ const seo: JpgAWebpLocaleContent['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: JpgAWebpLocaleContent = {
179
169
  slug,
@@ -184,5 +174,5 @@ export const content: JpgAWebpLocaleContent = {
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 { JpgAWebpLocaleContent } from '../index';
4
4
 
5
5
  const slug = 'convertisseur-jpg-en-webp';
@@ -164,16 +164,6 @@ const seo: JpgAWebpLocaleContent['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: JpgAWebpLocaleContent = {
179
169
  slug,
@@ -184,5 +174,5 @@ export const content: JpgAWebpLocaleContent = {
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
  };