@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,191 @@
1
+ import type { ImageConverterUI } from '../../../shared/ImageConverter.astro';
2
+ import { generateSchemas } from '../../../shared/logic/schemas';
3
+ import type { PngAJpgLocaleContent } from '../index';
4
+
5
+ const slug = 'png-jpg-donusturucu';
6
+ const title = 'PNG\'yi Online JPG\'ye Dönüştür';
7
+ const description =
8
+ 'PNG görüntülerinizi anında kendi bilgisayarınızda hızlı sıkıştırmalı JPG formatına dönüştürün. Fotoğrafları internete yüklemeden. Toplu optimizasyon.';
9
+
10
+ const ui: ImageConverterUI = {
11
+ dragText: 'PNG dosyalarını buraya sürükleyin...',
12
+ convertText: 'Anında JPG\'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: PngAJpgLocaleContent['faq'] = [
22
+ {
23
+ question: 'Neden yerel PNG - JPG dönüştürücümüzü seçmelisiniz?',
24
+ answer:
25
+ 'Geleneksel araçların aksine, yardımcı programımız dosyaları tamamen tarayıcınızda işler. Görüntüleriniz asla başkasının sabit diskine değmez, bu da verilerinizin tam egemenliğini ve gizliliğini garanti eder.',
26
+ },
27
+ {
28
+ question: 'JPG mi yoksa PNG mi? Benim durumum için hangisi daha iyi?',
29
+ answer:
30
+ 'PNG, logolar ve şeffaflık içeren öğeler için idealdir. Ancak JPG, web sitelerinin yükleme hızını önemli ölçüde artıran çok daha düşük ağırlıklara ulaştığı için fotoğraflar ve web banner\'ları için altın standarttır.',
31
+ },
32
+ {
33
+ question: 'Hiçbir şey yüklemeden teknik dönüşüm nasıl çalışıyor?',
34
+ answer:
35
+ 'HTML5 Canvas\'ın gücünü kullanıyoruz. Tarayıcı, görüntüyü görünmez bir sanal tuval üzerinde yeniden oluşturur, şeffaflıkları beyaza boyar ve anında doğrudan indirdiğiniz bir bayt akışı oluşturur.',
36
+ },
37
+ {
38
+ question: 'Gizli belgeler için güvenli mi?',
39
+ answer:
40
+ 'Evet, bankacılık, sağlık veya hukuk sektörlerindeki profesyoneller için en güvenli seçenektir. Sadece RAM\'inizi kullanan bir "kara kutu" olduğu için, içinde olup bitenler sekmeyi kapattığınızda ölür ve üçüncü taraf bulutlarda sızıntıları önler.',
41
+ },
42
+ ];
43
+
44
+ const howTo: PngAJpgLocaleContent['howTo'] = [
45
+ {
46
+ name: 'Dosya seçimi',
47
+ text: 'PNG dosyalarınızı bir klasörde hazırlayın ve hepsini birlikte işlem alanına sürükleyin veya keşfediciyi kullanarak arayın.',
48
+ },
49
+ {
50
+ name: 'Anında işleme',
51
+ text: 'Tarayıcı ağırlığı yerel olarak optimize ederken her dosya için durumun "Hazır" olarak değiştiğini doğrulayın.',
52
+ },
53
+ {
54
+ name: 'Optimize edilmiş indirme',
55
+ text: 'Yeni JPG\'lerinizi tek tek kaydedin veya tüm görüntüleri içeren sıkıştırılmış bir ZIP dosyası almak için "Tümünü İndir" düğmesini kullanın.',
56
+ },
57
+ ];
58
+
59
+ const bibliography: PngAJpgLocaleContent['bibliography'] = [
60
+ {
61
+ name: 'PNG Konsorsiyumu Özellikleri',
62
+ url: 'http://www.libpng.org/pub/png/',
63
+ },
64
+ {
65
+ name: 'JPEG Komitesi',
66
+ url: 'https://jpeg.org/',
67
+ },
68
+ ];
69
+
70
+ const seo: PngAJpgLocaleContent['seo'] = [
71
+ {
72
+ type: 'title',
73
+ text: 'PNG - JPG Dönüştürücü: Görüntü Optimizasyonu İçin Kesin Kılavuz',
74
+ level: 2,
75
+ },
76
+ {
77
+ type: 'paragraph',
78
+ html: 'Dijital tasarım ve web geliştirme dünyasında verimlilik her şeydir. PNG (Portable Network Graphics) formatı, şeffaflıkları koruma yeteneği ve kayıpsız sıkıştırması nedeniyle sevilir, ancak büyük bir düşmanı vardır: dosya ağırlığı. Web sitenizin uçmasını veya e-postalarınızın anında yüklenmesini istediğinizde, PNG\'den JPG\'ye geçiş en akıllıca teknik karardır.',
79
+ },
80
+ {
81
+ type: 'title',
82
+ text: 'JPG mi yoksa PNG mi?',
83
+ level: 3,
84
+ },
85
+ {
86
+ type: 'paragraph',
87
+ html: 'Bir format diğerinden daha iyi değildir, her ihtiyaca uygun bir araç vardır. PNG kayıpsız bir formattır; arayüz maketleri, küçük metinli logolar ve şeffaf arka plan gerektiren görsel öğeler için idealdir. Ancak bu sadakatin bir bedeli vardır: dosyalar sıkıştırılmış eşdeğerinden 5 veya 10 kat daha ağır olabilir.',
88
+ },
89
+ {
90
+ type: 'paragraph',
91
+ html: 'Öte yandan JPG (Joint Photographic Experts Group), insan gözünün neredeyse hiç fark etmediği bilgileri kaldırmak için ayrıklaştırma algoritmaları kullanarak tüy siklet ağırlıklara ulaşır. Fotoğraflar, reklam banner\'ları ve sosyal medya için altın standarttır. PNG\'lerinizi JPG\'ye dönüştürerek geometrik sadakati ağ hızıyla değiştiriyorsunuz.',
92
+ },
93
+ {
94
+ type: 'title',
95
+ text: 'Mimari Karşılaştırması: Yerel ve Bulut',
96
+ level: 3,
97
+ },
98
+ {
99
+ type: 'comparative',
100
+ items: [
101
+ {
102
+ title: 'Bulut Dönüştürücüler',
103
+ description: 'Fotoğraflarınızı uzak bir sunucuya yükleyen geleneksel araçlar.',
104
+ icon: 'mdi:cloud-upload',
105
+ pointIcon: 'mdi:close-circle-outline',
106
+ points: [
107
+ 'Ağ gecikmesi (Yükleme/İndirme)',
108
+ 'Özel verilerin sızma riski',
109
+ 'Dosya başına boyut sınırları',
110
+ 'Reklamlar ve izleyiciler',
111
+ ],
112
+ },
113
+ {
114
+ title: 'Yerel Mimarimiz',
115
+ description: 'Vanilla JS teknolojisi aracılığıyla donanımınızda doğrudan işleme.',
116
+ icon: 'mdi:laptop-mac',
117
+ highlight: true,
118
+ points: [
119
+ 'Ağsız anında hız',
120
+ 'Garantili gizlilik (0 bayt gönderildi)',
121
+ 'Dosya başına MB sınırı yok',
122
+ 'Profesyonel ve temiz arayüz',
123
+ ],
124
+ },
125
+ ],
126
+ },
127
+ {
128
+ type: 'title',
129
+ text: 'Teknik dönüşüm nasıl çalışır?',
130
+ level: 3,
131
+ },
132
+ {
133
+ type: 'paragraph',
134
+ html: 'Bir görüntüyü sunucuya göndermeden nasıl dönüştürmenin mümkün olduğunu merak ediyor olmalısınız. Sihir, modern tarayıcıların gücünde yatıyor. Bir dosya seçtiğinizde, yalnızca RAM\'inizde bulunan bir Blob oluşturuyoruz. Bu Blob, görünmez bir HTML5 Canvas öğesi üzerinde çizilir.',
135
+ },
136
+ {
137
+ type: 'paragraph',
138
+ html: 'JPG şeffaflığı desteklemediği için algoritmamız, PNG\'yi üzerine "boyamadan" önce arka planı düz beyaz bir renkle doldurur. Görüntü oluşturulduktan sonra yerel dışa aktarma yöntemini çalıştırarak bilgisayarınızın doğrudan indirdiği bir bayt akışı oluşturuyoruz.',
139
+ },
140
+ {
141
+ type: 'tip',
142
+ title: 'SEO İpucu: İdeal Ağırlık',
143
+ html: 'Google, yavaş web sitelerini aktif olarak cezalandırır. Largest Contentful Paint (LCP) değeriniz 2MB\'lık bir başlık PNG\'si nedeniyle yüksekse, bunu 200KB\'lık bir JPG\'ye dönüştürmek, görsel fark olmadan PageSpeed metriklerinizi anında iyileştirebilir.',
144
+ },
145
+ {
146
+ type: 'title',
147
+ text: 'Şirketler ve Profesyoneller İçin Güvenlik',
148
+ level: 3,
149
+ },
150
+ {
151
+ type: 'paragraph',
152
+ html: 'Bankacılık, sağlık veya hukuk gibi hassas sektörlerde çalışıyorsanız, dosyaları çevrimiçi dönüştürücülere yüklemek bir güvenlik ihlalidir. Aracımız bir "kara kutu" gibi çalışır: içinde ne oluyorsa RAM\'inizde kalır. Gizli belgelerle çalışmanın tek güvenli yolu budur.',
153
+ },
154
+ {
155
+ type: 'title',
156
+ text: 'Sonucun Uyumluluğu',
157
+ level: 3,
158
+ },
159
+ {
160
+ type: 'list',
161
+ icon: 'mdi:check-circle',
162
+ items: [
163
+ 'Windows, macOS ve mobil cihaz görüntüleyicileri.',
164
+ 'Sosyal ağlar (Instagram, LinkedIn vb.).',
165
+ 'Ofis araçları (Word, PowerPoint).',
166
+ 'İçerik yöneticileri (WordPress, Shopify).',
167
+ ],
168
+ },
169
+ {
170
+ type: 'title',
171
+ text: 'Sonuç: Bir Profesyonel Gibi Optimize Edin',
172
+ level: 3,
173
+ },
174
+ {
175
+ type: 'paragraph',
176
+ html: 'Bu dönüştürücü sadece başka bir sayfa değil; hayatınızı kolaylaştırmak için tasarlanmış bir mühendislik harikasıdır. İster bir geliştirici ister bir ev kullanıcısı olun, megabaytlardan tasarruf etmek ve verilerinizi güvende tutmak için nihai çözüm burada.',
177
+ },
178
+ ];
179
+
180
+
181
+ export const content: PngAJpgLocaleContent = {
182
+ slug,
183
+ title,
184
+ description,
185
+ ui,
186
+ seo,
187
+ faq,
188
+ bibliography,
189
+ howTo,
190
+ schemas: generateSchemas({ title, description, inLanguage: 'tr', faq, howTo }),
191
+ };
@@ -0,0 +1,191 @@
1
+ import type { ImageConverterUI } from '../../../shared/ImageConverter.astro';
2
+ import { generateSchemas } from '../../../shared/logic/schemas';
3
+ import type { PngAJpgLocaleContent } from '../index';
4
+
5
+ const slug = 'png-to-jpg-converter';
6
+ const title = '在线将 PNG 转换为 JPG';
7
+ const description =
8
+ '在您自己的计算机上立即将 PNG 图像转换为快速压缩的 JPG 格式。无需将照片上传到互联网。支持批量优化。';
9
+
10
+ const ui: ImageConverterUI = {
11
+ dragText: '拖拽 PNG 文件...',
12
+ convertText: '立即将其转换为 JPG',
13
+ selectFiles: '选择文件',
14
+ processedFiles: '已处理文件',
15
+ downloadAll: '下载全部 (.zip)',
16
+ pending: '等待中',
17
+ bibliographyTitle: '参考文献',
18
+ faqTitle: '常见问题',
19
+ };
20
+
21
+ const faq: PngAJpgLocaleContent['faq'] = [
22
+ {
23
+ question: '为什么要选择我们的本地 PNG 转 JPG 转换器?',
24
+ answer:
25
+ '与传统工具不同,我们的实用程序完全在您的浏览器中处理文件。您的图像永远不会触及他人的硬盘,保证了您数据的完全主权和隐私。',
26
+ },
27
+ {
28
+ question: 'JPG 还是 PNG?哪种更适合我的情况?',
29
+ answer:
30
+ 'PNG 是具有透明度要求的徽标和元素的理想选择。然而,JPG 是摄影和网页横幅的黄金标准,因为它能达到更小的文件体积,从而显著提高网站的加载速度。',
31
+ },
32
+ {
33
+ question: '如何在不上传任何内容的情况下进行技术转换?',
34
+ answer:
35
+ '我们利用 HTML5 Canvas 的强大功能。浏览器在一个不可见的虚拟画布上重建图像,用白色填充透明部分,并生成可以直接立即下载的字节流。',
36
+ },
37
+ {
38
+ question: '对于机密文档安全吗?',
39
+ answer:
40
+ '是的,对于银行业、医疗保健或法律行业的专业人士来说,这是最安全的选择。作为一个仅使用您内存的“黑匣子”,关闭标签页后,内部发生的一切都会消失,从而避免了第三方云端的泄露。',
41
+ },
42
+ ];
43
+
44
+ const howTo: PngAJpgLocaleContent['howTo'] = [
45
+ {
46
+ name: '选择文件',
47
+ text: '在文件夹中准备好 PNG 文件,并将其全部拖入处理区域,或使用文件资源管理器查找。',
48
+ },
49
+ {
50
+ name: '即时处理',
51
+ text: '在浏览器本地优化大小的同时,确认每个文件的状态变为“就绪”。',
52
+ },
53
+ {
54
+ name: '优化下载',
55
+ text: '逐个保存您的新 JPG,或使用“下载全部”按钮获取包含所有图像的压缩 ZIP 文件。',
56
+ },
57
+ ];
58
+
59
+ const bibliography: PngAJpgLocaleContent['bibliography'] = [
60
+ {
61
+ name: 'PNG 联盟规范',
62
+ url: 'http://www.libpng.org/pub/png/',
63
+ },
64
+ {
65
+ name: 'JPEG 委员会',
66
+ url: 'https://jpeg.org/',
67
+ },
68
+ ];
69
+
70
+ const seo: PngAJpgLocaleContent['seo'] = [
71
+ {
72
+ type: 'title',
73
+ text: 'PNG 转 JPG 转换器:图像优化终极指南',
74
+ level: 2,
75
+ },
76
+ {
77
+ type: 'paragraph',
78
+ html: '在数字设计和网页开发的世界中,效率就是一切。PNG (Portable Network Graphics) 格式因其保持透明度的能力和无损压缩而受到喜爱,但它有一个大敌人:文件重量。当您希望您的网站飞速运行或您的电子邮件即时加载时,从 PNG 转换为 JPG 是最明智的技术决策。',
79
+ },
80
+ {
81
+ type: 'title',
82
+ text: 'JPG 还是 PNG?',
83
+ level: 3,
84
+ },
85
+ {
86
+ type: 'paragraph',
87
+ html: '没有一种格式优于另一种格式,只有适合每种需求的工具。PNG 是无损格式,非常适合界面模型、带有小文本的徽标以及需要透明背景的视觉元素。然而,这种忠实性是有代价的:文件体积可能比压缩后的同类产品重 5 或 10 倍。',
88
+ },
89
+ {
90
+ type: 'paragraph',
91
+ html: '另一方面,JPG (Joint Photographic Experts Group) 使用离散化算法技术来删除人眼几乎察觉不到的信息,从而实现羽量级的大小。它是摄影、广告横幅和社交媒体的黄金标准。通过将 PNG 转换为 JPG,您是将几何保真度换取网络速度。',
92
+ },
93
+ {
94
+ type: 'title',
95
+ text: '架构对比:本地 vs 云端',
96
+ level: 3,
97
+ },
98
+ {
99
+ type: 'comparative',
100
+ items: [
101
+ {
102
+ title: '云端转换器',
103
+ description: '将您的照片上传到远程服务器的传统工具。',
104
+ icon: 'mdi:cloud-upload',
105
+ pointIcon: 'mdi:close-circle-outline',
106
+ points: [
107
+ '网络延迟(上传/下载)',
108
+ '私有数据泄露风险',
109
+ '每个文件的尺寸限制',
110
+ '广告和追踪器',
111
+ ],
112
+ },
113
+ {
114
+ title: '我们的本地架构',
115
+ description: '通过 Vanilla JS 技术在您的硬件上直接处理。',
116
+ icon: 'mdi:laptop-mac',
117
+ highlight: true,
118
+ points: [
119
+ '无需网络的即时速度',
120
+ '隐私保证(发送数据为 0 字节)',
121
+ '无单文件大小限制',
122
+ '专业且干净的界面',
123
+ ],
124
+ },
125
+ ],
126
+ },
127
+ {
128
+ type: 'title',
129
+ text: '技术转换的工作原理',
130
+ level: 3,
131
+ },
132
+ {
133
+ type: 'paragraph',
134
+ html: '您可能想知道如何在不发送到服务器的情况下转换图像。奥秘在于现代浏览器的强大功能。当您选择一个文件时,我们会生成一个仅存在于您内存中的 Blob。该 Blob 会被绘制在一个不可见的 HTML5 Canvas 元素上。',
135
+ },
136
+ {
137
+ type: 'paragraph',
138
+ html: '由于 JPG 不支持透明度,我们的算法会在“绘制”PNG 之前先用纯白色填充背景。合成图像后,我们执行原生导出方法,生成可供您的计算机直接下载的字节流。',
139
+ },
140
+ {
141
+ type: 'tip',
142
+ title: 'SEO 建议:理想的文件重量',
143
+ html: 'Google 会主动惩罚缓慢的网站。如果您的 Largest Contentful Paint (LCP) 因为一个 2MB 的头部 PNG 而偏高,那么将其转换为 200KB 的 JPG 可以在不影响视觉效果的情况下立即改善您的 PageSpeed 指标。',
144
+ },
145
+ {
146
+ type: 'title',
147
+ text: '企业和专业人士的安全保障',
148
+ level: 3,
149
+ },
150
+ {
151
+ type: 'paragraph',
152
+ html: '如果您在银行、医疗保健或法律等敏感行业工作,将文件上传到在线转换器属于安全违规行为。我们的工具就像一个“黑匣子”:内部发生的一切都留在您的内存中。这是处理机密文档唯一安全的方法。',
153
+ },
154
+ {
155
+ type: 'title',
156
+ text: '结果的兼容性',
157
+ level: 3,
158
+ },
159
+ {
160
+ type: 'list',
161
+ icon: 'mdi:check-circle',
162
+ items: [
163
+ 'Windows、macOS 和移动设备查看器。',
164
+ '社交网络 (Instagram, LinkedIn 等)。',
165
+ '办公工具 (Word, PowerPoint)。',
166
+ '内容管理系统 (WordPress, Shopify)。',
167
+ ],
168
+ },
169
+ {
170
+ type: 'title',
171
+ text: '结论:像专业人士一样优化',
172
+ level: 3,
173
+ },
174
+ {
175
+ type: 'paragraph',
176
+ html: '这个转换器不只是另一个网页;它是为您生活更便捷而设计的工程杰作。无论您是开发人员还是家庭用户,这里都有节省空间并确保数据安全的终极解决方案。',
177
+ },
178
+ ];
179
+
180
+
181
+ export const content: PngAJpgLocaleContent = {
182
+ slug,
183
+ title,
184
+ description,
185
+ ui,
186
+ seo,
187
+ faq,
188
+ bibliography,
189
+ howTo,
190
+ schemas: generateSchemas({ title, description, inLanguage: 'zh', faq, howTo }),
191
+ };
@@ -13,9 +13,21 @@ export const pngAJpg: 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,182 @@
1
+ import type { ImageConverterUI } from '../../../shared/ImageConverter.astro';
2
+ import { generateSchemas } from '../../../shared/logic/schemas';
3
+ import type { PngAWebpLocaleContent } from '../index';
4
+
5
+ const slug = 'png-zu-webp-konverter';
6
+ const title = 'PNG zu WebP Konverter Online und Kostenlos';
7
+ const description =
8
+ 'Konvertieren Sie PNG-Bilder in Ihrem Browser in WebP. Bis zu 40 % geringere Dateigröße. Transparenz bleibt erhalten. Keine Dateiuploads. Kostenlos und privat.';
9
+
10
+ const ui: ImageConverterUI = {
11
+ dragText: 'PNG-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: PngAWebpLocaleContent['faq'] = [
22
+ {
23
+ question: 'Warum PNG in WebP konvertieren?',
24
+ answer:
25
+ 'WebP bietet bei gleicher Qualität eine bis zu 40 % bessere Komprimierung als PNG und unterstützt gleichzeitig die Alpha-Transparenz. Es ist das von Google PageSpeed Insights empfohlene Format.',
26
+ },
27
+ {
28
+ question: 'Geht bei dem Prozess die Transparenz verloren?',
29
+ answer:
30
+ 'Nein. Die technische Implementierung von WebP unterstützt den Alpha-Kanal. Die Transparenzen der ursprünglichen PNG bleiben in der neuen WebP-Datei erhalten.',
31
+ },
32
+ {
33
+ question: 'Gelangen meine Bilder auf einen Server?',
34
+ answer:
35
+ 'Nein. Der Code wird ausschließlich in Ihrem Browser ausgeführt (Client-Side). Wir sehen, protokollieren oder speichern die von Ihnen konvertierten Bilder niemals.',
36
+ },
37
+ ];
38
+
39
+ const howTo: PngAWebpLocaleContent['howTo'] = [
40
+ {
41
+ name: 'PNGs einfügen',
42
+ text: 'Ziehen Sie Ihre großen PNG-Dateien in den Upload-Bereich oder nutzen Sie den klassischen interaktiven Auswahldialog.',
43
+ },
44
+ {
45
+ name: 'Kanal-Erkennung',
46
+ text: 'Die lokale Rendering-Engine erkennt die Pixelzusammensetzung und exportiert sie in das optimierte WebP-Format.',
47
+ },
48
+ {
49
+ name: 'Direkter Download',
50
+ text: 'Laden Sie Ihre stark komprimierten WebP-Dateien einzeln herunter oder fassen Sie sie mit dem ZIP-Paket-Konverter zusammen.',
51
+ },
52
+ ];
53
+
54
+ const bibliography: PngAWebpLocaleContent['bibliography'] = [
55
+ {
56
+ name: 'Google: WebP Implementierungsdetails',
57
+ url: 'https://developers.google.com/speed/webp/',
58
+ },
59
+ {
60
+ name: 'W3C: Leitfaden zu Core Web Vitals',
61
+ url: 'https://web.dev/vitals/',
62
+ },
63
+ {
64
+ name: 'Mozilla Docs: Bildformate',
65
+ url: 'https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Image_types',
66
+ },
67
+ ];
68
+
69
+ const seo: PngAWebpLocaleContent['seo'] = [
70
+ {
71
+ type: 'title',
72
+ text: 'PNG zu WebP Konverter: Transparenz und moderne Kompression für das Web',
73
+ level: 2,
74
+ },
75
+ {
76
+ type: 'paragraph',
77
+ html: '<strong>PNG</strong> war jahrzehntelang das Referenzformat für Webbilder mit Transparenz – Logos, Icons, UI-Elemente, Produktbilder auf freigestelltem Hintergrund. Das Problem ist die Dateigröße: Die verlustfreie Kompression, die Qualität garantiert, erzeugt auch spürbar große Dateien. Googles <strong>WebP</strong> löst diesen Widerspruch: Es unterstützt den Alpha-Kanal (Transparenz) <em>und</em> komprimiert weitaus besser als PNG, was den Wechsel von PNG zu WebP auf Ihrer Website zu einer perfekten Optimierung macht, bei der Sie auf nichts verzichten müssen.',
78
+ },
79
+ {
80
+ type: 'title',
81
+ text: 'PNG oder WebP? Wann welches Format zu verwenden ist',
82
+ level: 3,
83
+ },
84
+ {
85
+ type: 'paragraph',
86
+ html: '<strong>PNG</strong> bleibt das richtige Format, wenn Kompatibilität entscheidend ist: Design-Tools wie Photoshop oder Figma, Druck-Workflows, ältere Desktop-Anwendungen oder jeder Kontext, in dem WebP-Unterstützung nicht garantiert ist. Es ist auch das ideale Format für das Speichern von Arbeitsebenen in Bearbeitungspipelines, da seine verlustfreie Kompression jeden Pixel bewahrt. Der Preis: Dateien, die 3–8 Mal mehr wiegen können als ihr WebP-Äquivalent.',
87
+ },
88
+ {
89
+ type: 'paragraph',
90
+ html: '<strong>WebP</strong> ist der natürliche Ersatz für PNG für alle modernen Web-Inhalte. Chrome, Firefox, Safari und Edge unterstützen es nativ. Ein verlustfreies WebP-Bild ist 26 % kleiner als die entsprechende PNG-Datei; im verlustbehafteten Modus kann es bis zu 40 % kleiner sein, bei praktisch nicht unterscheidbarer visueller Qualität. Und entscheidend für das Webdesign: <strong>WebP bewahrt die Alpha-Transparenz</strong> genau wie PNG, ohne visuelle Kompromisse.',
91
+ },
92
+ {
93
+ type: 'title',
94
+ text: 'Vergleich: Lokale vs Cloud Konvertierung',
95
+ level: 3,
96
+ },
97
+ {
98
+ type: 'comparative',
99
+ items: [
100
+ {
101
+ title: 'Cloud Konverter',
102
+ description: 'Tools, die Ihre Dateien auf einen Remote-Server hochladen.',
103
+ icon: 'mdi:cloud-upload',
104
+ pointIcon: 'mdi:close-circle-outline',
105
+ points: [
106
+ 'Netzwerklatenz beim Hoch- und Herunterladen',
107
+ 'Ihre Logos und Bilder werden auf Servern von Drittanbietern gespeichert',
108
+ 'Dateigrößenlimits und tägliche Konvertierungsbeschränkungen',
109
+ 'Aufdringliche Werbung und Drittanbieter-Tracker',
110
+ ],
111
+ },
112
+ {
113
+ title: 'Unsere lokale Architektur',
114
+ description: 'Direkte Verarbeitung auf Ihrer Hardware mittels Vanilla JS-Technologie.',
115
+ icon: 'mdi:laptop-mac',
116
+ highlight: true,
117
+ points: [
118
+ 'Sofortige Geschwindigkeit – keine Netzwerklatenz',
119
+ 'Vollständige Privatsphäre – 0 Byte werden extern gesendet',
120
+ 'Keine Megabyte-Limits oder Dateianzahlbeschränkungen',
121
+ 'Saubere Benutzeroberfläche, keine Werbung oder Tracking',
122
+ ],
123
+ },
124
+ ],
125
+ },
126
+ {
127
+ type: 'title',
128
+ text: 'Wie es technisch funktioniert',
129
+ level: 3,
130
+ },
131
+ {
132
+ type: 'paragraph',
133
+ html: 'Die PNG wird lokal geladen und in einem im Speicher befindlichen <strong>HTML5 Canvas</strong> dekodiert. Die Canvas-API bewahrt den Alpha-Kanal der ursprünglichen PNG – alle transparenten und halbtransparenten Pixel bleiben im RGBA-Pixelbuffer intakt. Das Canvas wird dann durch Aufruf von <code>toDataURL(\'image/webp\')</code> exportiert, wodurch der WebP-Codec des Browsers (basierend auf Googles libwebp) angewendet wird, um eine kompaktere Datei zu erzeugen, ohne die Transparenzdaten zu verändern.',
134
+ },
135
+ {
136
+ type: 'paragraph',
137
+ html: 'WebP verwendet zwei Kompressionsmodi: den verlustfreien Modus für Bilder, bei denen jeder Pixel exakt dem Original entsprechen muss, und den verlustbehafteten Modus für Fotos und Elemente, bei denen kleine Unterschiede unmerklich sind. Der verlustfreie Modus erzeugt Dateien, die 26 % kleiner als PNG sind; der verlustbehaftete Modus kann Reduktionen von bis zu 40 % im Vergleich zu PNG erreichen, während eine exzellente visuelle Qualität beibehalten wird.',
138
+ },
139
+ {
140
+ type: 'tip',
141
+ title: 'Tipp: WebP schlägt sowohl PNG als auch JPG im Web',
142
+ html: 'WebP im verlustfreien Modus ist kleiner als PNG. WebP im verlustbehafteten Modus ist kleiner als JPG. Damit ist WebP das <strong>einzige Format, das beide im Web-Kontext ersetzt</strong>. Konvertieren Sie Ihre transparenten PNGs vor dem Hochladen in WebP: Google PageSpeed Insights erkennt dies und bewertet es in Audits für "Bilder in modernen Formaten bereitstellen" positiv.',
143
+ },
144
+ {
145
+ type: 'title',
146
+ text: 'Anwendungsfälle und Kompatibilität',
147
+ level: 3,
148
+ },
149
+ {
150
+ type: 'list',
151
+ icon: 'mdi:check-circle',
152
+ items: [
153
+ 'Logos und Icons mit transparentem Hintergrund für Websites und Apps.',
154
+ 'Produktbilder mit freigestelltem Hintergrund in E-Commerce-Shops.',
155
+ 'CSS-Sprites und UI-Elemente mit Alpha-Transparenz.',
156
+ 'Rasterisierte Illustrationen und Vektorgrafiken für Landing Pages.',
157
+ 'Artikel-Thumbnails mit transparentem Hintergrund in Blogs und Nachrichtenportalen.',
158
+ ],
159
+ },
160
+ {
161
+ type: 'title',
162
+ text: 'Fazit',
163
+ level: 3,
164
+ },
165
+ {
166
+ type: 'paragraph',
167
+ html: 'Der Wechsel von PNG zu WebP ist die umfassendste Webbild-Optimierung, die verfügbar ist: Sie erhalten leichtere Dateien, bewahren die Transparenz und verbessern die Core Web Vitals-Metriken, ohne etwas an Ihrem visuellen Design zu ändern. Dieses Tool erledigt das sofort, kostenlos und völlig privat – Ihre Bilder werden in Ihrem Browser verarbeitet und verlassen niemals Ihr Gerät.',
168
+ },
169
+ ];
170
+
171
+
172
+ export const content: PngAWebpLocaleContent = {
173
+ slug,
174
+ title,
175
+ description,
176
+ ui,
177
+ seo,
178
+ faq,
179
+ bibliography,
180
+ howTo,
181
+ schemas: generateSchemas({ title, description, inLanguage: 'de', faq, howTo }),
182
+ };
@@ -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 { PngAWebpLocaleContent } from '../index';
4
4
 
5
5
  const slug = 'png-to-webp-converter';
@@ -168,16 +168,6 @@ const seo: PngAWebpLocaleContent['seo'] = [
168
168
  },
169
169
  ];
170
170
 
171
- const appSchema: WithContext<SoftwareApplication> = {
172
- '@context': 'https://schema.org',
173
- '@type': 'SoftwareApplication',
174
- name: title,
175
- description,
176
- applicationCategory: 'UtilitiesApplication',
177
- operatingSystem: 'Web',
178
- offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
179
- inLanguage: 'en',
180
- };
181
171
 
182
172
  export const content: PngAWebpLocaleContent = {
183
173
  slug,
@@ -188,5 +178,5 @@ export const content: PngAWebpLocaleContent = {
188
178
  faq,
189
179
  bibliography,
190
180
  howTo,
191
- schemas: [appSchema as any],
181
+ schemas: generateSchemas({ title, description, inLanguage: 'en', faq, howTo }),
192
182
  };
@@ -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 { PngAWebpLocaleContent } from '../index';
4
4
 
5
5
  const slug = 'convertidor-png-a-webp';
@@ -168,16 +168,6 @@ const seo: PngAWebpLocaleContent['seo'] = [
168
168
  },
169
169
  ];
170
170
 
171
- const appSchema: WithContext<SoftwareApplication> = {
172
- '@context': 'https://schema.org',
173
- '@type': 'SoftwareApplication',
174
- name: title,
175
- description,
176
- applicationCategory: 'UtilitiesApplication',
177
- operatingSystem: 'Web',
178
- offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
179
- inLanguage: 'es',
180
- };
181
171
 
182
172
  export const content: PngAWebpLocaleContent = {
183
173
  slug,
@@ -188,5 +178,5 @@ export const content: PngAWebpLocaleContent = {
188
178
  faq,
189
179
  bibliography,
190
180
  howTo,
191
- schemas: [appSchema as any],
181
+ schemas: generateSchemas({ title, description, inLanguage: 'es', faq, howTo }),
192
182
  };
@@ -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 { PngAWebpLocaleContent } from '../index';
4
4
 
5
5
  const slug = 'convertisseur-png-en-webp';
@@ -168,16 +168,6 @@ const seo: PngAWebpLocaleContent['seo'] = [
168
168
  },
169
169
  ];
170
170
 
171
- const appSchema: WithContext<SoftwareApplication> = {
172
- '@context': 'https://schema.org',
173
- '@type': 'SoftwareApplication',
174
- name: title,
175
- description,
176
- applicationCategory: 'UtilitiesApplication',
177
- operatingSystem: 'Web',
178
- offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
179
- inLanguage: 'fr',
180
- };
181
171
 
182
172
  export const content: PngAWebpLocaleContent = {
183
173
  slug,
@@ -188,5 +178,5 @@ export const content: PngAWebpLocaleContent = {
188
178
  faq,
189
179
  bibliography,
190
180
  howTo,
191
- schemas: [appSchema as any],
181
+ schemas: generateSchemas({ title, description, inLanguage: 'fr', faq, howTo }),
192
182
  };