@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 { SvgAPngLocaleContent } from '../index';
4
+
5
+ const slug = 'svg-zu-png-konverter';
6
+ const title = 'SVG zu PNG Konverter Online und Kostenlos';
7
+ const description =
8
+ 'Konvertieren Sie SVG-Vektordateien in Ihrem Browser in PNG. HD-Ausgabe mit doppelter Skalierung. Transparenz bleibt erhalten. Kostenlos und 100 % privat.';
9
+
10
+ const ui: ImageConverterUI = {
11
+ dragText: 'SVG-Dateien hierher ziehen...',
12
+ convertText: 'Um sie sofort in PNG 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: SvgAPngLocaleContent['faq'] = [
22
+ {
23
+ question: 'Warum SVG-Dateien in PNG konvertieren?',
24
+ answer:
25
+ 'SVG basiert auf Vektoren und ist ideal für Logos, aber manchmal benötigen Sie das gerasterte PNG-Format für die Verwendung in Anwendungen, die keine Vektoren unterstützen, oder zum Teilen über Messaging-Apps oder soziale Medien.',
26
+ },
27
+ {
28
+ question: 'Kann ich die Ausgabegröße wählen?',
29
+ answer:
30
+ 'Wir verdoppeln derzeit den Maßstab der Quell-SVG, damit die PNG-Ausgabe scharf ist und sich für Retina- oder 4K-Bildschirme eignet.',
31
+ },
32
+ {
33
+ question: 'Bleibt die SVG-Transparenz erhalten?',
34
+ answer:
35
+ 'Ja, die resultierende PNG bewahrt den Alpha-Kanal der ursprünglichen SVG, sodass alle transparenten Hintergründe intakt bleiben.',
36
+ },
37
+ ];
38
+
39
+ const howTo: SvgAPngLocaleContent['howTo'] = [
40
+ {
41
+ name: 'SVG-Dateien einfügen',
42
+ text: 'Ziehen Sie Ihre SVG-Dateien direkt in den oberen Bereich.',
43
+ },
44
+ {
45
+ name: 'PNG-Erzeugung in HD',
46
+ text: 'In Millisekunden wandelt unsere lokale Engine jeden Vektor in eine HD-Pixelebene im transparenten PNG-Format um.',
47
+ },
48
+ {
49
+ name: 'Dateien herunterladen',
50
+ text: 'Speichern Sie die generierten PNGs einzeln oder als ZIP-Paket.',
51
+ },
52
+ ];
53
+
54
+ const bibliography: SvgAPngLocaleContent['bibliography'] = [
55
+ {
56
+ name: 'W3C SVG Spezifikation',
57
+ url: 'https://www.w3.org/TR/SVG/',
58
+ },
59
+ {
60
+ name: 'Mozilla: SVG Tutorial',
61
+ url: 'https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial',
62
+ },
63
+ ];
64
+
65
+ const seo: SvgAPngLocaleContent['seo'] = [
66
+ {
67
+ type: 'title',
68
+ text: 'SVG zu PNG Konverter: Vom unendlichen Vektor zum universellen Raster',
69
+ level: 2,
70
+ },
71
+ {
72
+ type: 'paragraph',
73
+ html: '<strong>SVG</strong> (Scalable Vector Graphics) ist die perfekte Wahl für Webdesign: unendlich skalierbar, leichtgewichtig und mit jedem Code-Editor editierbar. Doch wenn Sie dieses Logo oder Icon in einer mobilen App verwenden, es in sozialen Medien teilen oder in eine PowerPoint Präsentation einfügen möchten, stoßen Sie auf eine Hürde: Die meisten dieser Plattformen unterstützen kein SVG. Das <strong>PNG</strong>-Format ist die universelle Lösung: gerastert, mit einem Alpha-Kanal und in absolut jedem Kontext kompatibel.',
74
+ },
75
+ {
76
+ type: 'title',
77
+ text: 'SVG vs PNG: Vektoren für das Web, Raster für die Welt',
78
+ level: 3,
79
+ },
80
+ {
81
+ type: 'paragraph',
82
+ html: 'SVG speichert das Bild als mathematische Anweisungen: eine Bézier Kurve, ein Gradient, ein Polygon. Das bedeutet, dass dieselbe Datei bei 16 oder 16.000 Pixeln perfekt aussieht. Es ist das ideale Format für Ihren Webcode, CSS-Animationen und jedes Element, das sich ohne Qualitätsverlust an verschiedene Bildschirmauflösungen anpassen muss.',
83
+ },
84
+ {
85
+ type: 'paragraph',
86
+ html: 'PNG speichert das Bild als Pixelgitter mit Farb- und Transparenzinformationen für jeden Pixel. Es ist ein <strong>verlustfreies</strong> Format, was bedeutet, dass die Qualität vollständig erhalten bleibt. Sobald eine SVG zu PNG gerastert wurde, ist die Auflösung fest vorgegeben. Deshalb ist die Wahl der richtigen Exportgröße entscheidend: Unser Tool rendert doppelt skaliert (2x), um Schärfe auf Retina und 4K Bildschirmen zu gewährleisten.',
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
+ 'Ihr SVG-Code gelangt auf externe Server',
103
+ 'Remote-Rendering mit inkonsistenter Qualität',
104
+ 'Wartezeit für Upload und Verarbeitung',
105
+ 'Einschränkungen bei der SVG-Dateigröße',
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
+ 'Ihre SVG verlässt niemals Ihren Browser',
115
+ 'Rendering durch die native Browser-Engine für maximale Treue',
116
+ 'PNG in 2x Auflösung für hochdichte Bildschirme',
117
+ 'Transparenz bleibt dank vollem Alpha-Kanal erhalten',
118
+ ],
119
+ },
120
+ ],
121
+ },
122
+ {
123
+ type: 'title',
124
+ text: 'Wie es technisch funktioniert',
125
+ level: 3,
126
+ },
127
+ {
128
+ type: 'paragraph',
129
+ html: 'Der Prozess beginnt mit dem Laden der SVG-Datei in ein JavaScript <strong>Image</strong>-Element. Sobald die Browser-Engine den Vektor-XML analysiert und gerendert hat, wird das resultierende Bild auf ein <strong>HTML5 Canvas</strong> gezeichnet, dessen Dimensionen doppelt so groß wie die ursprüngliche SVG-Größe sind (2x Skalierung). Dies erzeugt eine PNG mit der doppelten Anzahl an Pixeln pro Dimension, ideal für hochauflösende Bildschirme.',
130
+ },
131
+ {
132
+ type: 'paragraph',
133
+ html: 'Im Gegensatz zur Konvertierung in JPG behält das Canvas beim Export in PNG den vollen Alpha-Kanal bei: Transparente Bereiche in der ursprünglichen SVG werden zu vollständig transparenten Pixeln in der resultierenden PNG – ohne weiße Hintergrundfüllung. Der Export nutzt die Methode <code>toDataURL(\'image/png\')</code> mit verlustfreier Kompression.',
134
+ },
135
+ {
136
+ type: 'tip',
137
+ title: 'Tipp vor dem Rastern',
138
+ html: 'Wählen Sie Ihre PNG-Exportgröße sorgfältig – das Rastern einer SVG ist ein Einwegprozess: Sie können die Vektoren nicht aus der resultierenden PNG wiederherstellen. Behalten Sie immer die Original-SVG als Masterquelle und generieren Sie PNGs in der höchsten Auflösung, die Sie jemals benötigen könnten.',
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
+ 'Exportieren von Vektor-Logos für PowerPoint oder Google Slides Präsentationen.',
150
+ 'Erstellen von PNG-Icons für iOS, Android oder Progressive Web Apps.',
151
+ 'Teilen von SVG-Designs auf Instagram, LinkedIn oder anderen sozialen Medien.',
152
+ 'Einfügen von Vektor-Illustrationen in Word-Dokumente oder PDFs.',
153
+ 'Generieren von PNG-Thumbnails von SVG-Grafiken für die CMS-Vorschau.',
154
+ ],
155
+ },
156
+ {
157
+ type: 'title',
158
+ text: 'Fazit',
159
+ level: 3,
160
+ },
161
+ {
162
+ type: 'paragraph',
163
+ html: 'SVG ist die Sprache der Vektoren; PNG ist der Reisepass für den Rest der digitalen Welt. Dieses Tool rastert Ihre SVGs in 2x Auflösung mit erhaltener Transparenz direkt in Ihrem Browser, ohne dass ein einziges Byte Ihres Designs an einen externen Server gesendet wird.',
164
+ },
165
+ ];
166
+
167
+
168
+ export const content: SvgAPngLocaleContent = {
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 { SvgAPngLocaleContent } from '../index';
4
4
 
5
5
  const slug = 'svg-to-png-converter';
@@ -164,17 +164,6 @@ const seo: SvgAPngLocaleContent['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
-
178
167
  export const content: SvgAPngLocaleContent = {
179
168
  slug,
180
169
  title,
@@ -184,5 +173,11 @@ export const content: SvgAPngLocaleContent = {
184
173
  faq,
185
174
  bibliography,
186
175
  howTo,
187
- schemas: [appSchema as any],
176
+ schemas: generateSchemas({
177
+ title,
178
+ description,
179
+ inLanguage: 'en',
180
+ faq,
181
+ howTo,
182
+ }),
188
183
  };
@@ -1,11 +1,11 @@
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 { SvgAPngLocaleContent } from '../index';
4
4
 
5
5
  const slug = 'convertidor-svg-a-png';
6
6
  const title = 'Convertir SVG a PNG Online y Gratis';
7
7
  const description =
8
- 'Convierte archivos SVG vectoriales a PNG en tu navegador. Salida a doble escala HD. Conserva transparencias. Gratis y 100% privado.';
8
+ 'Convierte archivos SVG vectoriales a PNG en tu navegador. Salida HD a doble escala. Conserva transparencias. Gratis y 100% privado.';
9
9
 
10
10
  const ui: ImageConverterUI = {
11
11
  dragText: 'Arrastra archivos SVG...',
@@ -22,12 +22,12 @@ const faq: SvgAPngLocaleContent['faq'] = [
22
22
  {
23
23
  question: '¿Por qué convertir archivos SVG a PNG?',
24
24
  answer:
25
- 'SVG es vectorial e ideal para logos, pero a veces necesitas el formato rasterizado PNG para usarlo en aplicaciones que no soportan vectores o para enviarlos por WhatsApp o redes sociales.',
25
+ 'SVG es un formato vectorial ideal para logos, pero a veces necesitas el formato PNG rasterizado para usarlo en aplicaciones que no soportan vectores, o para compartir por apps de mensajería o redes sociales.',
26
26
  },
27
27
  {
28
28
  question: '¿Puedo elegir el tamaño de salida?',
29
29
  answer:
30
- 'Actualmente duplicamos la escala del SVG de origen para que la salida PNG sea nítida y apta para pantallas Retina o 4K.',
30
+ 'Actualmente duplicamos la escala del SVG de origen para que el PNG de salida sea nítido y adecuado para pantallas Retina o 4K.',
31
31
  },
32
32
  {
33
33
  question: '¿Se mantienen las transparencias del SVG?',
@@ -39,15 +39,15 @@ const faq: SvgAPngLocaleContent['faq'] = [
39
39
  const howTo: SvgAPngLocaleContent['howTo'] = [
40
40
  {
41
41
  name: 'Inserta tus archivos SVG',
42
- text: 'Pega tus archivos SVG o arrástralos directamente al área superior.',
42
+ text: 'Suelta tus archivos SVG o arrástralos directamente a la zona superior.',
43
43
  },
44
44
  {
45
- name: 'Generación del PNG HD',
46
- text: 'En milisegundos nuestro motor local recreará cada vector en una capa de píxeles HD en formato PNG transparente.',
45
+ name: 'Generación de PNG HD',
46
+ text: 'En milisegundos nuestro motor local recreará cada vector como una capa de píxeles HD en formato PNG transparente.',
47
47
  },
48
48
  {
49
- name: 'Descarga los archivos',
50
- text: 'Guarda los PNG generados individualmente o en un paquete ZIP.',
49
+ name: 'Descarga los ficheros',
50
+ text: 'Guarda los PNG generados uno a uno o como paquete ZIP.',
51
51
  },
52
52
  ];
53
53
 
@@ -58,7 +58,7 @@ const bibliography: SvgAPngLocaleContent['bibliography'] = [
58
58
  },
59
59
  {
60
60
  name: 'Mozilla: SVG Tutorial',
61
- url: 'https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial',
61
+ url: 'https://developer.mozilla.org/es/docs/Web/SVG/Tutorial',
62
62
  },
63
63
  ];
64
64
 
@@ -70,7 +70,7 @@ const seo: SvgAPngLocaleContent['seo'] = [
70
70
  },
71
71
  {
72
72
  type: 'paragraph',
73
- html: '<strong>SVG</strong> (Scalable Vector Graphics) es la elección perfecta para el diseño web: escalable al infinito, ligero y editable con cualquier editor de código. Pero cuando necesitas usar ese logo o icono en una aplicación móvil, compartirlo en redes sociales o insertarlo en una presentación de PowerPoint, te topas con una barrera: la mayoría de estas plataformas no soportan SVG. El formato <strong>PNG</strong> es la solución universal: rasterizado, con canal alfa y compatible en absolutamente todos los contextos.',
73
+ html: 'El <strong>SVG</strong> (Scalable Vector Graphics) es la elección perfecta para el diseño web: infinitamente escalable, ligero y editable con cualquier editor de código. Pero cuando necesitas usar ese logo o icono en una app móvil, compartirlo en redes sociales o insertarlo en una presentación PowerPoint, te topas con un muro: la mayoría de estas plataformas no soportan SVG. El formato <strong>PNG</strong> es la solución universal: rasterizado, con canal alfa y compatible en absolutamente todos los contextos.',
74
74
  },
75
75
  {
76
76
  type: 'title',
@@ -79,11 +79,11 @@ const seo: SvgAPngLocaleContent['seo'] = [
79
79
  },
80
80
  {
81
81
  type: 'paragraph',
82
- html: 'SVG almacena la imagen como instrucciones matemáticas: una curva de Bézier, un gradiente, un polígono. Esto significa que el mismo archivo luce perfectamente a 16px o a 16.000px. Es el formato ideal para el código de tu web, para animaciones CSS y para cualquier elemento que necesite adaptarse a diferentes resoluciones de pantalla sin pérdida de calidad.',
82
+ html: 'SVG almacena la imagen como instrucciones matemáticas: una curva de Bézier, un degradado, un polígono. Esto significa que el mismo archivo se ve perfecto a 16px o a 16,000px. Es el formato ideal para tu código web, animaciones CSS y cualquier elemento que deba adaptarse a distintas resoluciones de pantalla sin perder ni un ápice de calidad.',
83
83
  },
84
84
  {
85
85
  type: 'paragraph',
86
- html: 'PNG almacena la imagen como una cuadrícula de píxeles con información de color y transparencia para cada uno. Es un formato <strong>sin pérdida</strong>, lo que significa que la calidad se preserva íntegramente. Una vez que un SVG se rasteriza a PNG, la resolución queda fijada. Por eso es crucial elegir bien el tamaño de exportación: nuestra herramienta renderiza a doble escala (2x) para garantizar nitidez en pantallas Retina y 4K.',
86
+ html: 'PNG almacena la imagen como una rejilla de píxeles con información de color y transparencia para cada uno. Es un formato <strong>lossless</strong> (sin pérdida), lo que significa que la calidad se preserva íntegramente. Una vez que un SVG se convierte a PNG, la resolución es fija. Por eso, elegir el tamaño de exportación correcto es crítico: nuestra herramienta renderiza a doble escala (2x) para asegurar la nitidez en pantallas Retina y 4K.',
87
87
  },
88
88
  {
89
89
  type: 'title',
@@ -101,8 +101,8 @@ const seo: SvgAPngLocaleContent['seo'] = [
101
101
  points: [
102
102
  'Tu código SVG viaja a servidores externos',
103
103
  'Renderizado remoto con calidad inconsistente',
104
- 'Tiempo de espera por subida y procesamiento',
105
- 'Limitaciones en el tamaño de archivo SVG',
104
+ 'Tiempo de espera por la subida y el procesado',
105
+ 'Limitaciones en el tamaño del archivo SVG',
106
106
  ],
107
107
  },
108
108
  {
@@ -112,9 +112,9 @@ const seo: SvgAPngLocaleContent['seo'] = [
112
112
  highlight: true,
113
113
  points: [
114
114
  'Tu SVG nunca abandona tu navegador',
115
- 'Renderizado nativo del motor del navegador, máxima fidelidad',
116
- 'PNG a 2x de resolución para pantallas de alta densidad',
117
- 'Transparencias preservadas con canal alfa completo',
115
+ 'Renderizado con el motor nativo del navegador para máxima fidelidad',
116
+ 'PNG a resolución 2x para pantallas de alta densidad',
117
+ 'Transparencia preservada con canal alfa completo',
118
118
  ],
119
119
  },
120
120
  ],
@@ -126,16 +126,16 @@ const seo: SvgAPngLocaleContent['seo'] = [
126
126
  },
127
127
  {
128
128
  type: 'paragraph',
129
- html: 'El proceso comienza cargando el archivo SVG en un elemento <strong>Image</strong> de JavaScript. Una vez que el motor del navegador ha parseado y renderizado el XML vectorial, la imagen resultante se dibuja sobre un <strong>Canvas HTML5</strong> cuyas dimensiones son el doble del tamaño original del SVG (escala 2x). Esto produce un PNG con el doble de píxeles por dimensión, ideal para pantallas de alta resolución.',
129
+ html: 'El proceso comienza cargando el archivo SVG en un elemento <strong>Image</strong> de JavaScript. Una vez que el motor del navegador ha interpretado y renderizado el XML vectorial, la imagen resultante se dibuja sobre un <strong>Canvas HTML5</strong> cuyas dimensiones son el doble del tamaño original del SVG (escala 2x). Esto produce un PNG con el doble de píxeles por dimensión, ideal para pantallas de alta resolución.',
130
130
  },
131
131
  {
132
132
  type: 'paragraph',
133
- html: 'A diferencia de la conversión a JPG, al exportar a PNG el canvas retiene el canal alfa completo: las zonas transparentes del SVG original se convierten en píxeles totalmente transparentes en el PNG resultante. No hay relleno de fondo blanco. La exportación usa el método <code>toDataURL(\'image/png\')</code> con compresión sin pérdida.',
133
+ html: 'A diferencia de la conversión a JPG, al exportar a PNG el canvas conserva el canal alfa completo: las zonas transparentes del SVG original se convierten en píxeles totalmente transparentes en el PNG resultante, sin relleno de fondo blanco. La exportación utiliza el método <code>toDataURL(\'image/png\')</code> con compresión sin pérdida.',
134
134
  },
135
135
  {
136
136
  type: 'tip',
137
137
  title: 'Consejo antes de rasterizar',
138
- html: 'Elige bien el tamaño de exportación PNG porque la rasterización es un proceso de un solo sentido: no podrás recuperar los vectores desde el PNG resultante. Guarda siempre el SVG original como fuente maestra y genera los PNG a la resolución más alta que puedas necesitar.',
138
+ html: 'Elige bien el tamaño de exportación a PNG; rasterizar un SVG es un proceso de una sola dirección: no puedes recuperar los vectores a partir del PNG resultante. Mantén siempre el SVG original como fuente maestra y genera PNGs a la máxima resolución que vayas a necesitar.',
139
139
  },
140
140
  {
141
141
  type: 'title',
@@ -147,9 +147,9 @@ const seo: SvgAPngLocaleContent['seo'] = [
147
147
  icon: 'mdi:check-circle',
148
148
  items: [
149
149
  'Exportar logos vectoriales para presentaciones PowerPoint o Google Slides.',
150
- 'Crear iconos PNG para aplicaciones iOS, Android o Progressive Web Apps.',
150
+ 'Crear iconos PNG para apps de iOS, Android o Progressive Web Apps.',
151
151
  'Compartir diseños SVG en Instagram, LinkedIn u otras redes sociales.',
152
- 'Insertar ilustraciones vectoriales en documentos Word o PDF.',
152
+ 'Insertar ilustraciones vectoriales en documentos Word o PDFs.',
153
153
  'Generar miniaturas PNG de gráficos SVG para previsualización en CMS.',
154
154
  ],
155
155
  },
@@ -160,21 +160,10 @@ const seo: SvgAPngLocaleContent['seo'] = [
160
160
  },
161
161
  {
162
162
  type: 'paragraph',
163
- html: 'SVG es el lenguaje de los vectores; PNG es el pasaporte al resto del mundo digital. Esta herramienta rasteriza tus SVG a resolución 2x con transparencias intactas, directamente en tu navegador, sin que ningún byte de tu diseño viaje a ningún servidor externo.',
163
+ html: 'SVG es el lenguaje de los vectores; PNG es el pasaporte al resto del mundo digital. Esta herramienta rasteriza tus SVGs a resolución 2x con la transparencia intacta, directamente en tu navegador, sin que un solo byte de tu diseño viaje a ningún servidor externo.',
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
-
178
167
  export const content: SvgAPngLocaleContent = {
179
168
  slug,
180
169
  title,
@@ -184,5 +173,11 @@ export const content: SvgAPngLocaleContent = {
184
173
  faq,
185
174
  bibliography,
186
175
  howTo,
187
- schemas: [appSchema as any],
176
+ schemas: generateSchemas({
177
+ title,
178
+ description,
179
+ inLanguage: 'es',
180
+ faq,
181
+ howTo,
182
+ }),
188
183
  };
@@ -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 { SvgAPngLocaleContent } from '../index';
4
4
 
5
5
  const slug = 'convertisseur-svg-en-png';
@@ -164,16 +164,6 @@ const seo: SvgAPngLocaleContent['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: SvgAPngLocaleContent = {
179
169
  slug,
@@ -184,5 +174,5 @@ export const content: SvgAPngLocaleContent = {
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
  };
@@ -0,0 +1,178 @@
1
+ import type { ImageConverterUI } from '../../../shared/ImageConverter.astro';
2
+ import { generateSchemas } from '../../../shared/logic/schemas';
3
+ import type { SvgAPngLocaleContent } from '../index';
4
+
5
+ const slug = 'konverter-svg-ke-png';
6
+ const title = 'Konversi SVG ke PNG Online dan Gratis';
7
+ const description =
8
+ 'Konversi file vektor SVG ke PNG di browser Anda. Output HD skala ganda. Mempertahankan transparansi. Gratis dan 100% pribadi.';
9
+
10
+ const ui: ImageConverterUI = {
11
+ dragText: 'Tarik file SVG...',
12
+ convertText: 'Untuk mengkonversinya ke PNG secara instan',
13
+ selectFiles: 'Pilih file',
14
+ processedFiles: 'File yang diproses',
15
+ downloadAll: 'Unduh Semua (.zip)',
16
+ pending: 'Menunggu',
17
+ bibliographyTitle: 'Referensi Bibliografi',
18
+ faqTitle: 'Pertanyaan yang Sering Diajukan',
19
+ };
20
+
21
+ const faq: SvgAPngLocaleContent['faq'] = [
22
+ {
23
+ question: 'Mengapa mengonversi file SVG ke PNG?',
24
+ answer:
25
+ 'SVG berbasis vektor dan ideal untuk logo, tetapi terkadang Anda memerlukan format PNG raster untuk digunakan dalam aplikasi yang tidak mendukung vektor, atau untuk dibagikan melalui aplikasi pesan atau media sosial.',
26
+ },
27
+ {
28
+ question: 'Dapatkah saya memilih ukuran output?',
29
+ answer:
30
+ 'Kami saat ini menduplikasi skala SVG sumber sehingga output PNG tajam dan cocok untuk layar Retina atau 4K.',
31
+ },
32
+ {
33
+ question: 'Apakah transparansi SVG dipertahankan?',
34
+ answer:
35
+ 'Ya, PNG yang dihasilkan mempertahankan saluran alfa dari SVG asli, menjaga semua latar belakang transparan tetap utuh.',
36
+ },
37
+ ];
38
+
39
+ const howTo: SvgAPngLocaleContent['howTo'] = [
40
+ {
41
+ name: 'Masukkan file SVG Anda',
42
+ text: 'Letakkan file SVG Anda atau tarik langsung ke area atas.',
43
+ },
44
+ {
45
+ name: 'Generasi PNG HD',
46
+ text: 'Dalam hitungan milidetik, mesin lokal kami akan membuat ulang setiap vektor sebagai lapisan piksel HD dalam format PNG transparan.',
47
+ },
48
+ {
49
+ name: 'Unduh file',
50
+ text: 'Simpan PNG yang dihasilkan satu per satu atau sebagai paket ZIP.',
51
+ },
52
+ ];
53
+
54
+ const bibliography: SvgAPngLocaleContent['bibliography'] = [
55
+ {
56
+ name: 'Spesifikasi W3C SVG',
57
+ url: 'https://www.w3.org/TR/SVG/',
58
+ },
59
+ {
60
+ name: 'Mozilla: Tutorial SVG',
61
+ url: 'https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial',
62
+ },
63
+ ];
64
+
65
+ const seo: SvgAPngLocaleContent['seo'] = [
66
+ {
67
+ type: 'title',
68
+ text: 'Konverter SVG ke PNG: Dari Vektor Tak Terbatas ke Raster Universal',
69
+ level: 2,
70
+ },
71
+ {
72
+ type: 'paragraph',
73
+ html: '<strong>SVG</strong> (Scalable Vector Graphics) adalah pilihan sempurna untuk desain web: dapat diskalakan secara tak terbatas, ringan, dan dapat diedit dengan editor kode apa pun. Tetapi ketika Anda perlu menggunakan logo atau ikon itu di aplikasi seluler, membagikannya di media sosial, atau memasukkannya ke dalam presentasi PowerPoint, Anda menemui kendala: sebagian besar platform ini tidak mendukung SVG. Format <strong>PNG</strong> adalah solusi universal: raster, dengan saluran alfa, dan kompatibel dalam setiap konteks.',
74
+ },
75
+ {
76
+ type: 'title',
77
+ text: 'SVG vs PNG: Vektor untuk Web, Raster untuk Dunia',
78
+ level: 3,
79
+ },
80
+ {
81
+ type: 'paragraph',
82
+ html: 'SVG menyimpan gambar sebagai instruksi matematis: kurva Bézier, gradien, poligon. Ini berarti file yang sama terlihat sempurna pada 16px atau 16.000px. Ini adalah format ideal untuk kode web Anda, animasi CSS, dan elemen apa pun yang perlu beradaptasi dengan resolusi layar yang berbeda tanpa kehilangan kualitas.',
83
+ },
84
+ {
85
+ type: 'paragraph',
86
+ html: 'PNG menyimpan gambar sebagai kisi piksel dengan informasi warna dan transparansi untuk setiap piksel. Ini adalah format <strong>lossless</strong>, yang berarti kualitas dipertahankan sepenuhnya. Setelah SVG diraster ke PNG, resolusinya menjadi tetap. Itulah mengapa memilih ukuran ekspor yang tepat sangat penting: alat kami merender pada skala ganda (2x) untuk memastikan ketajaman pada layar Retina dan 4K.',
87
+ },
88
+ {
89
+ type: 'title',
90
+ text: 'Perbandingan: Konversi Lokal vs Cloud',
91
+ level: 3,
92
+ },
93
+ {
94
+ type: 'comparative',
95
+ items: [
96
+ {
97
+ title: 'Konverter Cloud',
98
+ description: 'Alat yang mengunggah file Anda ke server jarak jauh.',
99
+ icon: 'mdi:cloud-upload',
100
+ pointIcon: 'mdi:close-circle-outline',
101
+ points: [
102
+ 'Kode SVG Anda dikirim ke server eksternal',
103
+ 'Rendering jarak jauh dengan kualitas yang tidak konsisten',
104
+ 'Waktu tunggu untuk pengunggahan dan pemrosesan',
105
+ 'Batasan pada ukuran file SVG',
106
+ ],
107
+ },
108
+ {
109
+ title: 'Arsitektur Lokal Kami',
110
+ description: 'Pemrosesan langsung pada perangkat keras Anda menggunakan teknologi Vanilla JS.',
111
+ icon: 'mdi:laptop-mac',
112
+ highlight: true,
113
+ points: [
114
+ 'SVG Anda tidak pernah meninggalkan browser',
115
+ 'Rendering mesin browser native untuk kesetiaan maksimum',
116
+ 'PNG resolusi 2x untuk layar dengan kepadatan tinggi',
117
+ 'Transparansi dipertahankan dengan saluran alfa penuh',
118
+ ],
119
+ },
120
+ ],
121
+ },
122
+ {
123
+ type: 'title',
124
+ text: 'Cara Kerjanya Secara Teknis',
125
+ level: 3,
126
+ },
127
+ {
128
+ type: 'paragraph',
129
+ html: 'Proses dimulai dengan memuat file SVG ke dalam elemen JavaScript <strong>Image</strong>. Setelah mesin browser mengurai dan merender XML vektor, gambar yang dihasilkan digambar ke <strong>HTML5 Canvas</strong> yang dimensinya dua kali lipat ukuran SVG asli (skala 2x). Ini menghasilkan PNG dengan piksel dua kali lebih banyak per dimensi, ideal untuk layar beresolusi tinggi.',
130
+ },
131
+ {
132
+ type: 'paragraph',
133
+ html: 'Berbeda dengan konversi ke JPG, saat mengekspor ke PNG, kanvas mempertahankan saluran alfa penuh: area transparan dalam SVG asli menjadi piksel transparan sepenuhnya dalam PNG yang dihasilkan — tanpa pengisian latar belakang putih. Ekspor menggunakan metode <code>toDataURL(\'image/png\')</code> dengan kompresi lossless.',
134
+ },
135
+ {
136
+ type: 'tip',
137
+ title: 'Tip sebelum merasterisasi',
138
+ html: 'Pilih ukuran ekspor PNG Anda dengan hati-hati — merasterisasi SVG adalah proses satu arah: Anda tidak dapat memulihkan vektor dari PNG yang dihasilkan. Selalu simpan SVG asli sebagai sumber master, dan hasilkan PNG pada resolusi tertinggi yang mungkin Anda butuhkan.',
139
+ },
140
+ {
141
+ type: 'title',
142
+ text: 'Kasus Penggunaan dan Kompatibilitas',
143
+ level: 3,
144
+ },
145
+ {
146
+ type: 'list',
147
+ icon: 'mdi:check-circle',
148
+ items: [
149
+ 'Mengekspor logo vektor untuk presentasi PowerPoint atau Google Slides.',
150
+ 'Membuat ikon PNG untuk iOS, Android, atau Progressive Web Apps.',
151
+ 'Berbagi desain SVG di Instagram, LinkedIn, atau media sosial lainnya.',
152
+ 'Memasukkan ilustrasi vektor ke dalam dokumen Word atau PDF.',
153
+ 'Menghasilkan thumbnail PNG dari grafik SVG untuk pratinjau CMS.',
154
+ ],
155
+ },
156
+ {
157
+ type: 'title',
158
+ text: 'Kesimpulan',
159
+ level: 3,
160
+ },
161
+ {
162
+ type: 'paragraph',
163
+ html: 'SVG adalah bahasa vektor; PNG adalah paspor ke seluruh dunia digital. Alat ini merasterisasi SVG Anda pada resolusi 2x dengan transparansi utuh, langsung di browser Anda, tanpa satu byte pun dari desain Anda dikirim ke server eksternal mana pun.',
164
+ },
165
+ ];
166
+
167
+
168
+ export const content: SvgAPngLocaleContent = {
169
+ slug,
170
+ title,
171
+ description,
172
+ ui,
173
+ seo,
174
+ faq,
175
+ bibliography,
176
+ howTo,
177
+ schemas: generateSchemas({ title, description, inLanguage: 'id', faq, howTo }),
178
+ };