@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
@@ -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 { WebpAJpgLocaleContent } from '../index';
4
4
 
5
5
  const slug = 'convertidor-webp-a-jpg';
6
6
  const title = 'Convertir WebP a JPG Online y Gratis';
7
7
  const description =
8
- 'Convierte imágenes WebP a JPG sin subir archivos. Procesamiento local 100% privado. Los fondos transparentes se sustituyen por blanco automáticamente.';
8
+ 'Convierte imágenes WebP a JPG sin subir archivos. Procesamiento local 100% privado. Los fondos transparentes se reemplazan automáticamente por blanco.';
9
9
 
10
10
  const ui: ImageConverterUI = {
11
11
  dragText: 'Arrastra archivos WebP...',
@@ -22,31 +22,31 @@ const faq: WebpAJpgLocaleContent['faq'] = [
22
22
  {
23
23
  question: '¿Puedo subir imágenes privadas de forma segura?',
24
24
  answer:
25
- 'Sí. No hay un servidor de subida. Tu navegador procesa el WebP en tu ordenador y genera el JPG para que lo descargues. Nadie más lo ve.',
25
+ 'Sí. No existe un servidor de subida. Tu navegador procesa el WebP en tu equipo y genera el JPG para descargar. Nadie más lo ve.',
26
26
  },
27
27
  {
28
- question: '¿Qué ocurre con el fondo de mi WebP si es transparente?',
28
+ question: '¿Qué pasa con el fondo de mi WebP si es transparente?',
29
29
  answer:
30
- 'Como el formato JPG no soporta transparencias, el convertidor rellenará automáticamente las zonas transparentes con un fondo blanco sólido.',
30
+ 'Como JPG no admite transparencias, el conversor rellenará automáticamente las zonas transparentes con un fondo blanco sólido.',
31
31
  },
32
32
  {
33
- question: '¿Hay límite de conversiones o tamaño?',
33
+ question: '¿Hay límite de conversiones o de tamaño de archivo?',
34
34
  answer:
35
- 'No imponemos restricciones. Puedes convertir cientos de imágenes siempre que tu ordenador tenga la potencia y la memoria RAM suficiente.',
35
+ 'No imponemos restricciones. Puedes convertir cientos de imágenes siempre que tu equipo tenga potencia y RAM suficiente.',
36
36
  },
37
37
  ];
38
38
 
39
39
  const howTo: WebpAJpgLocaleContent['howTo'] = [
40
40
  {
41
- name: 'Arrastra tus Archivos',
42
- text: 'Pega tus WebP modernos al área de carga o selecciónalos usando el explorador de archivos interactivo.',
41
+ name: 'Arrastra tus archivos',
42
+ text: 'Suelta tus archivos WebP modernos en la zona de subida o selecciónalos con el explorador.',
43
43
  },
44
44
  {
45
45
  name: 'Conversión Local',
46
- text: 'Disfruta mientras el motor local de la utilidad aplica un fondo e interpreta cada píxel al universal JPG.',
46
+ text: 'Observa cómo el motor local aplica fondo e interpreta cada píxel al formato JPG universal.',
47
47
  },
48
48
  {
49
- name: 'Obtén tus Resultados',
49
+ name: 'Obtén los resultados',
50
50
  text: 'Descarga individualmente o usa el paquete ZIP para consolidar todas tus nuevas fotografías.',
51
51
  },
52
52
  ];
@@ -58,10 +58,10 @@ const bibliography: WebpAJpgLocaleContent['bibliography'] = [
58
58
  },
59
59
  {
60
60
  name: 'Mozilla Developer Network - image/jpeg',
61
- url: 'https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Image_types#jpeg',
61
+ url: 'https://developer.mozilla.org/es/docs/Web/Media/Formats/Image_types#jpeg',
62
62
  },
63
63
  {
64
- name: 'WebP to JPEG compatibility',
64
+ name: 'Compatibilidad WebP a JPEG',
65
65
  url: 'https://developers.google.com/speed/webp/faq',
66
66
  },
67
67
  ];
@@ -69,12 +69,12 @@ const bibliography: WebpAJpgLocaleContent['bibliography'] = [
69
69
  const seo: WebpAJpgLocaleContent['seo'] = [
70
70
  {
71
71
  type: 'title',
72
- text: 'Convertidor WebP a JPG: Compatibilidad Universal sin Comprometer tu Privacidad',
72
+ text: 'Convertidor WebP a JPG: Compatibilidad Universal sin Comprometer la Privacidad',
73
73
  level: 2,
74
74
  },
75
75
  {
76
76
  type: 'paragraph',
77
- html: 'El formato <strong>WebP</strong> es la apuesta de Google por la eficiencia: imágenes más ligeras con calidad comparable al JPG tradicional. Sin embargo, su compatibilidad sigue siendo un problema real. Clientes de correo electrónico como Outlook, software de diseño heredado, aplicaciones de mensajería y flujos de trabajo corporativos todavía dependen del omnipresente <strong>JPG</strong>. Convertir WebP a JPG es el puente entre la web moderna y el mundo real.',
77
+ html: '<strong>WebP</strong> es la apuesta de Google por la eficiencia: imágenes más ligeras con una calidad comparable al JPG tradicional. Sin embargo, su compatibilidad sigue siendo un problema en el mundo real. Clientes de correo como Outlook, software de diseño antiguo, apps de mensajería y flujos de trabajo corporativos siguen dependiendo del ubicuo <strong>JPG</strong>. Convertir WebP a JPG es el puente entre la web moderna y el mundo real.',
78
78
  },
79
79
  {
80
80
  type: 'title',
@@ -83,11 +83,11 @@ const seo: WebpAJpgLocaleContent['seo'] = [
83
83
  },
84
84
  {
85
85
  type: 'paragraph',
86
- html: 'WebP brilla en entornos controlados: sitios web modernos con Chrome, Edge o Firefox donde se puede garantizar la compatibilidad del navegador. Su compresión superior reduce el peso de los archivos entre un 25 y un 35 % respecto a JPG equivalente, mejorando los tiempos de carga y las métricas Core Web Vitals. Es el formato ideal cuando controlas el entorno de visualización.',
86
+ html: 'WebP brilla en entornos controlados: sitios web modernos en Chrome, Edge o Firefox donde se puede garantizar la compatibilidad del navegador. Su compresión superior reduce el peso de los archivos entre un 25-35% respecto a un JPG equivalente, mejorando tiempos de carga y métricas Core Web Vitals. Es el formato ideal cuando controlas el entorno de visualización.',
87
87
  },
88
88
  {
89
89
  type: 'paragraph',
90
- html: 'JPG, por otro lado, funciona en <em>absolutamente todos los contextos</em>: correos electrónicos adjuntos, presentaciones de PowerPoint, documentos Word, impresoras domésticas, aplicaciones de edición antiguas y plataformas de redes sociales sin excepción. Si necesitas que alguien abra tu imagen sin fricción técnica alguna, JPG es la respuesta correcta.',
90
+ html: 'JPG, por otro lado, funciona en <em>absolutamente todos los contextos</em>: adjuntos de email, presentaciones PowerPoint, documentos Word, impresoras domésticas, aplicaciones de edición legacy y plataformas sociales sin excepción. Si necesitas que alguien abra tu imagen sin fricciones técnicas, JPG es la respuesta correcta.',
91
91
  },
92
92
  {
93
93
  type: 'title',
@@ -103,9 +103,9 @@ const seo: WebpAJpgLocaleContent['seo'] = [
103
103
  icon: 'mdi:cloud-upload',
104
104
  pointIcon: 'mdi:close-circle-outline',
105
105
  points: [
106
- 'Tus fotos viajan por Internet a servidores desconocidos',
107
- 'Tiempo de espera por subida y procesamiento remoto',
108
- 'Límites de tamaño y conversiones gratuitas por día',
106
+ 'Tus fotos viajan por internet a servidores desconocidos',
107
+ 'Tiempo de espera por la subida y el procesado remoto',
108
+ 'Límites diarios de tamaño y número de conversiones gratis',
109
109
  'Riesgo real de retención de datos en servidores de terceros',
110
110
  ],
111
111
  },
@@ -115,9 +115,9 @@ const seo: WebpAJpgLocaleContent['seo'] = [
115
115
  icon: 'mdi:laptop-mac',
116
116
  highlight: true,
117
117
  points: [
118
- 'Cero bytes enviados: todo ocurre en tu RAM',
118
+ 'Cero bytes enviados: todo sucede en tu memoria RAM',
119
119
  'Velocidad instantánea sin depender de tu conexión',
120
- 'Sin límites de tamaño ni número de archivos',
120
+ 'Sin límites de tamaño de archivo ni cantidad de ficheros',
121
121
  'Ideal para fotos personales, médicas o corporativas',
122
122
  ],
123
123
  },
@@ -130,16 +130,16 @@ const seo: WebpAJpgLocaleContent['seo'] = [
130
130
  },
131
131
  {
132
132
  type: 'paragraph',
133
- html: 'Cuando arrastras un archivo WebP a la herramienta, el navegador lo decodifica de forma nativa usando su motor de renderizado interno. A continuación, el archivo se dibuja sobre un elemento <strong>Canvas HTML5</strong> invisible. Dado que JPG no admite transparencias, el algoritmo rellena previamente el canvas con un fondo blanco sólido antes de componer la imagen encima.',
133
+ html: 'Al arrastrar un WebP a la herramienta, el navegador lo decodifica de forma nativa usando su motor de renderizado interno. A continuación, el archivo se dibuja sobre un elemento <strong>Canvas HTML5</strong> invisible. Dado que JPG no admite transparencia, el algoritmo rellena previamente el lienzo con un fondo blanco sólido antes de componer la imagen encima.',
134
134
  },
135
135
  {
136
136
  type: 'paragraph',
137
- html: 'El paso final es la exportación: el método <code>toDataURL(\'image/jpeg\')</code> del Canvas convierte los píxeles del lienzo en un flujo de bytes JPG comprimido con alta calidad. Este flujo se entrega directamente al sistema de descarga del navegador, sin ninguna comunicación de red. El proceso completo dura milisegundos incluso para imágenes de varios megapíxeles.',
137
+ html: 'El paso final es la exportación: el método <code>toDataURL(\'image/jpeg\')</code> del Canvas convierte los píxeles del lienzo en un flujo de bytes JPG comprimido de alta calidad. Este flujo se entrega directamente al sistema de descargas del navegador, sin comunicación de red alguna. Todo el proceso toma milisegundos incluso para imágenes de varios megapíxeles.',
138
138
  },
139
139
  {
140
140
  type: 'tip',
141
141
  title: 'Consejo de compatibilidad',
142
- html: 'Cuando compartas fotos con usuarios no técnicos o las envíes por correo electrónico, usa siempre JPG. Es el formato con compatibilidad garantizada al 100 % en cualquier cliente de correo, sistema operativo o dispositivo, sin excepciones ni sorpresas desagradables.',
142
+ html: 'Cuando compartas fotos con usuarios no técnicos o las envíes por email, usa siempre JPG: cero problemas de compatibilidad en cualquier cliente de correo, sistema operativo o dispositivo, sin excepciones ni sorpresas desagradables.',
143
143
  },
144
144
  {
145
145
  type: 'title',
@@ -150,11 +150,11 @@ const seo: WebpAJpgLocaleContent['seo'] = [
150
150
  type: 'list',
151
151
  icon: 'mdi:check-circle',
152
152
  items: [
153
- 'Adjuntar fotos en correos electrónicos desde Outlook, Gmail o Apple Mail.',
153
+ 'Adjuntar fotos en emails desde Outlook, Gmail o Apple Mail.',
154
154
  'Insertar imágenes en documentos Word, Excel o presentaciones PowerPoint.',
155
- 'Publicar en plataformas de redes sociales que rechazan WebP.',
156
- 'Compartir por WhatsApp o aplicaciones de mensajería con soporte limitado de formatos.',
157
- 'Imprimir fotografías en servicios de impresión que solo aceptan JPG o PNG.',
155
+ 'Publicar en redes sociales que rechazan el formato WebP.',
156
+ 'Compartir por WhatsApp o apps de mensajería con soporte limitado.',
157
+ 'Imprimir fotografías en servicios de revelado que solo aceptan JPG o PNG.',
158
158
  ],
159
159
  },
160
160
  {
@@ -164,21 +164,10 @@ const seo: WebpAJpgLocaleContent['seo'] = [
164
164
  },
165
165
  {
166
166
  type: 'paragraph',
167
- html: 'WebP es el futuro de la imagen web, pero JPG sigue siendo el rey de la compatibilidad universal. Esta herramienta te permite cruzar ese puente en segundos, de forma completamente privada y sin instalar nada. Tu imagen nunca abandona tu dispositivo.',
167
+ html: 'WebP es el futuro de las imágenes web, pero JPG sigue siendo el rey de la compatibilidad universal. Esta herramienta te permite cruzar ese puente en segundos, de forma totalmente privada y sin instalar nada. Tu imagen nunca sale de tu equipo.',
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
-
182
171
  export const content: WebpAJpgLocaleContent = {
183
172
  slug,
184
173
  title,
@@ -188,5 +177,11 @@ export const content: WebpAJpgLocaleContent = {
188
177
  faq,
189
178
  bibliography,
190
179
  howTo,
191
- schemas: [appSchema as any],
180
+ schemas: generateSchemas({
181
+ title,
182
+ description,
183
+ inLanguage: 'es',
184
+ faq,
185
+ howTo,
186
+ }),
192
187
  };
@@ -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 { WebpAJpgLocaleContent } from '../index';
4
4
 
5
5
  const slug = 'convertisseur-webp-en-jpg';
@@ -22,32 +22,32 @@ const faq: WebpAJpgLocaleContent['faq'] = [
22
22
  {
23
23
  question: 'Puis-je télécharger des images privées en toute sécurité ?',
24
24
  answer:
25
- 'Oui. Il n\'y a pas de serveur de téléchargement. Votre navigateur traite le WebP sur votre ordinateur et génère le JPG à télécharger. Personne d\'autre ne le voit.',
25
+ 'Oui. Il n\'y a pas de serveur de téléchargement. Votre navigateur traite le WebP sur votre ordinateur et génère le JPG que vous téléchargez. Personne d\'autre ne le voit.',
26
26
  },
27
27
  {
28
- question: 'Que se passe-t-il avec le fond de mon WebP s\'il est transparent ?',
28
+ question: 'Qu\'advient-il de mon fond WebP s\'il est transparent ?',
29
29
  answer:
30
- 'Comme le JPG ne supporte pas la transparence, le convertisseur remplira automatiquement les zones transparentes avec un fond blanc solide.',
30
+ 'Comme le JPG ne supporte pas la transparence, le convertisseur remplira automatiquement les zones transparentes avec un fond blanc uni.',
31
31
  },
32
32
  {
33
- question: 'Y a-t-il une limite aux conversions ou à la taille des fichiers ?',
33
+ question: 'Y a-t-il une limite sur les conversions ou la taille des fichiers ?',
34
34
  answer:
35
- 'Nous n\'imposons aucune restriction. Vous pouvez convertir des centaines d\'images tant que votre ordinateur dispose de la puissance de traitement et de la RAM suffisantes.',
35
+ 'Nous n\'imposons aucune restriction. Vous pouvez convertir des centaines d\'images tant que votre ordinateur a une puissance de traitement et une RAM suffisantes.',
36
36
  },
37
37
  ];
38
38
 
39
39
  const howTo: WebpAJpgLocaleContent['howTo'] = [
40
40
  {
41
41
  name: 'Faites glisser vos fichiers',
42
- text: 'Déposez vos fichiers WebP modernes dans la zone de téléchargement ou sélectionnez-les à l\'aide du navigateur de fichiers interactif.',
42
+ text: 'Déposez vos fichiers WebP modernes dans la zone de téléchargement ou sélectionnez-les avec l\'explorateur.',
43
43
  },
44
44
  {
45
- name: 'Conversion locale',
46
- text: 'Observez le moteur local appliquer un fond et interpréter chaque pixel au format JPG universel.',
45
+ name: 'Conversion Locale',
46
+ text: 'Regardez comment le moteur local applique un fond et interprète chaque pixel au format JPG universel.',
47
47
  },
48
48
  {
49
49
  name: 'Obtenez vos résultats',
50
- text: 'Téléchargez individuellement ou utilisez le package ZIP pour consolider toutes vos nouvelles photographies.',
50
+ text: 'Téléchargez individuellement ou utilisez le package ZIP pour regrouper toutes vos nouvelles photographies.',
51
51
  },
52
52
  ];
53
53
 
@@ -58,7 +58,7 @@ const bibliography: WebpAJpgLocaleContent['bibliography'] = [
58
58
  },
59
59
  {
60
60
  name: 'Mozilla Developer Network - image/jpeg',
61
- url: 'https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Image_types#jpeg',
61
+ url: 'https://developer.mozilla.org/fr/docs/Web/Media/Formats/Image_types#jpeg',
62
62
  },
63
63
  {
64
64
  name: 'Compatibilité WebP vers JPEG',
@@ -74,20 +74,20 @@ const seo: WebpAJpgLocaleContent['seo'] = [
74
74
  },
75
75
  {
76
76
  type: 'paragraph',
77
- html: 'Le format <strong>WebP</strong> est le pari de Google sur l\'efficacité : des images plus légères avec une qualité comparable au JPG traditionnel. Pourtant, sa compatibilité reste un problème concret. Les clients de messagerie comme Outlook, les logiciels de design anciens, les applications de messagerie et les flux de travail d\'entreprise dépendent encore du <strong>JPG</strong> omniprésent. Convertir WebP en JPG, c\'est construire le pont entre le web moderne et le monde réel.',
77
+ html: '<strong>WebP</strong> est le pari de Google sur l\'efficacité : des images plus légères avec une qualité comparable au JPG traditionnel. Cependant, sa compatibilité reste un problème dans le monde réel. Les clients de messagerie comme Outlook, les anciens logiciels de conception, les applications de messagerie et les flux de travail en entreprise dépendent toujours de l\'ubiquitaire <strong>JPG</strong>. Convertir WebP en JPG est le pont entre le web moderne et le monde réel.',
78
78
  },
79
79
  {
80
80
  type: 'title',
81
- text: 'WebP vs JPG : Quand Utiliser Chaque Format ?',
81
+ text: 'WebP vs JPG : Quand utiliser chaque format ?',
82
82
  level: 3,
83
83
  },
84
84
  {
85
85
  type: 'paragraph',
86
- html: 'WebP excelle dans les environnements maîtrisés : sites web modernes sur Chrome, Edge ou Firefox où la compatibilité du navigateur est garantie. Sa compression supérieure réduit le poids des fichiers de 25 à 35 % par rapport à un JPG équivalent, améliorant les temps de chargement et les métriques Core Web Vitals. C\'est le format idéal quand vous contrôlez l\'environnement d\'affichage.',
86
+ html: 'WebP excelle dans les environnements contrôlés : sites web modernes sur Chrome, Edge ou Firefox où la compatibilité du navigateur peut être garantie. Sa compression supérieure réduit le poids des fichiers de 25-35% par rapport à un JPG équivalent, améliorant les temps de chargement et les métriques Core Web Vitals. C\'est le format idéal lorsque vous contrôlez l\'environnement de visualisation.',
87
87
  },
88
88
  {
89
89
  type: 'paragraph',
90
- html: 'Le JPG, en revanche, fonctionne dans <em>absolument tous les contextes</em> : pièces jointes d\'e-mail, présentations PowerPoint, documents Word, imprimantes domestiques, applications d\'édition héritées et plateformes de réseaux sociaux sans exception. Si vous avez besoin qu\'une personne ouvre votre image sans aucune friction technique, JPG est la bonne réponse.',
90
+ html: 'Le JPG, quant à lui, fonctionne dans <em>absolument tous les contextes</em> : pièces jointes d\'e-mails, présentations PowerPoint, documents Word, imprimantes domestiques, applications d\'édition héritées et plateformes sociales sans exception. Si vous avez besoin que quelqu\'un ouvre votre image sans friction technique, le JPG est la bonne réponse.',
91
91
  },
92
92
  {
93
93
  type: 'title',
@@ -103,9 +103,9 @@ const seo: WebpAJpgLocaleContent['seo'] = [
103
103
  icon: 'mdi:cloud-upload',
104
104
  pointIcon: 'mdi:close-circle-outline',
105
105
  points: [
106
- 'Vos photos transitent par Internet vers des serveurs inconnus',
107
- 'Temps d\'attente pour l\'upload et le traitement distant',
108
- 'Limites quotidiennes de taille et de conversions gratuites',
106
+ 'Vos photos voyagent sur Internet vers des serveurs inconnus',
107
+ 'Temps d\'attente pour le téléchargement et le traitement à distance',
108
+ 'Limites quotidiennes sur la taille et le nombre de conversions gratuites',
109
109
  'Risque réel de rétention des données sur des serveurs tiers',
110
110
  ],
111
111
  },
@@ -115,9 +115,9 @@ const seo: WebpAJpgLocaleContent['seo'] = [
115
115
  icon: 'mdi:laptop-mac',
116
116
  highlight: true,
117
117
  points: [
118
- 'Zéro octet envoyé : tout se passe dans votre RAM',
118
+ 'Zéro octet envoyé : tout se passe dans votre mémoire RAM',
119
119
  'Vitesse instantanée sans dépendre de votre connexion',
120
- 'Aucune limite de taille ni de nombre de fichiers',
120
+ 'Aucune limite sur la taille des fichiers ou le nombre de fichiers',
121
121
  'Idéal pour les photos personnelles, médicales ou d\'entreprise',
122
122
  ],
123
123
  },
@@ -130,16 +130,16 @@ const seo: WebpAJpgLocaleContent['seo'] = [
130
130
  },
131
131
  {
132
132
  type: 'paragraph',
133
- html: 'Lorsque vous glissez un fichier WebP dans l\'outil, le navigateur le décode nativement via son moteur de rendu interne. Le fichier est ensuite dessiné sur un élément <strong>Canvas HTML5</strong> invisible. Comme le JPG ne supporte pas la transparence, l\'algorithme pré-remplit le canvas avec un fond blanc solide avant de composer l\'image par-dessus.',
133
+ html: 'En faisant glisser un WebP vers l\'outil, le navigateur le décode nativement en utilisant son moteur de rendu interne. Le fichier est ensuite dessiné sur un élément <strong>Canvas HTML5</strong> invisible. Comme le JPG ne supporte pas la transparence, l\'algorithme pré-remplit le canevas avec un fond blanc uni avant de composer l\'image par-dessus.',
134
134
  },
135
135
  {
136
136
  type: 'paragraph',
137
- html: 'L\'étape finale est l\'export : la méthode Canvas <code>toDataURL(\'image/jpeg\')</code> convertit les pixels du canevas en un flux d\'octets JPG compressé en haute qualité. Ce flux est livré directement au système de téléchargement du navigateur, sans aucune communication réseau. L\'ensemble du processus prend quelques millisecondes même pour des images de plusieurs mégapixels.',
137
+ html: 'L\'étape finale est l\'exportation : la méthode <code>toDataURL(\'image/jpeg\')</code> du Canvas convertit les pixels du canevas en un flux d\'octets JPG compressé de haute qualité. Ce flux est livré directement au système de téléchargement du navigateur, sans aucune communication réseau. Tout le processus prend quelques millisecondes, même pour des images de plusieurs mégapixels.',
138
138
  },
139
139
  {
140
140
  type: 'tip',
141
141
  title: 'Conseil de compatibilité',
142
- html: 'Lorsque vous partagez des photos avec des utilisateurs non techniques ou les envoyez par e-mail, utilisez toujours le JPG — compatibilité garantie à 100 % sur tout client de messagerie, système d\'exploitation ou appareil, sans exceptions ni mauvaises surprises.',
142
+ html: 'Lorsque vous partagez des photos avec des utilisateurs non techniques ou que vous les envoyez par e-mail, utilisez toujours le JPG — zéro problème de compatibilité sur n\'importe quel client de messagerie, système d\'exploitation ou appareil, sans exception et sans mauvaise surprise.',
143
143
  },
144
144
  {
145
145
  type: 'title',
@@ -151,10 +151,10 @@ const seo: WebpAJpgLocaleContent['seo'] = [
151
151
  icon: 'mdi:check-circle',
152
152
  items: [
153
153
  'Joindre des photos dans des e-mails depuis Outlook, Gmail ou Apple Mail.',
154
- 'Insérer des images dans des documents Word, Excel ou présentations PowerPoint.',
155
- 'Publier sur des plateformes de réseaux sociaux qui rejettent le WebP.',
156
- 'Partager via WhatsApp ou applications de messagerie au support de formats limité.',
157
- 'Imprimer des photographies dans des services qui n\'acceptent que le JPG ou PNG.',
154
+ 'Insérer des images dans des documents Word, Excel ou des présentations PowerPoint.',
155
+ 'Publier sur des réseaux sociaux qui rejettent le format WebP.',
156
+ 'Partager via WhatsApp ou des applications de messagerie au support limité.',
157
+ 'Imprimer des photographies chez des services de tirage qui n\'acceptent que le JPG ou le PNG.',
158
158
  ],
159
159
  },
160
160
  {
@@ -164,21 +164,10 @@ const seo: WebpAJpgLocaleContent['seo'] = [
164
164
  },
165
165
  {
166
166
  type: 'paragraph',
167
- html: 'WebP est l\'avenir de l\'image web, mais le JPG reste le roi de la compatibilité universelle. Cet outil vous permet de franchir ce pont en quelques secondes, en toute confidentialité et sans rien installer. Votre image ne quitte jamais votre appareil.',
167
+ html: 'Le WebP est l\'avenir des images web, mais le JPG reste le roi de la compatibilité universelle. Cet outil vous permet de franchir ce pont en quelques secondes, de manière totalement privée et sans rien installer. Votre image ne quitte jamais votre appareil.',
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
-
182
171
  export const content: WebpAJpgLocaleContent = {
183
172
  slug,
184
173
  title,
@@ -188,5 +177,11 @@ export const content: WebpAJpgLocaleContent = {
188
177
  faq,
189
178
  bibliography,
190
179
  howTo,
191
- schemas: [appSchema as any],
180
+ schemas: generateSchemas({
181
+ title,
182
+ description,
183
+ inLanguage: 'fr',
184
+ faq,
185
+ howTo,
186
+ }),
192
187
  };
@@ -0,0 +1,182 @@
1
+ import type { ImageConverterUI } from '../../../shared/ImageConverter.astro';
2
+ import { generateSchemas } from '../../../shared/logic/schemas';
3
+ import type { WebpAJpgLocaleContent } from '../index';
4
+
5
+ const slug = 'konverter-webp-ke-jpg';
6
+ const title = 'Konversi WebP ke JPG Online dan Gratis';
7
+ const description =
8
+ 'Konversi gambar WebP ke JPG tanpa mengunggah file. Pemrosesan lokal pribadi 100%. Latar belakang transparan secara otomatis diganti dengan warna putih.';
9
+
10
+ const ui: ImageConverterUI = {
11
+ dragText: 'Tarik file WebP...',
12
+ convertText: 'Untuk mengkonversinya ke JPG 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: WebpAJpgLocaleContent['faq'] = [
22
+ {
23
+ question: 'Dapatkah saya mengunggah gambar pribadi dengan aman?',
24
+ answer:
25
+ 'Ya. Tidak ada server unggahan. Browser Anda memproses WebP di komputer Anda dan menghasilkan JPG untuk Anda unduh. Tidak ada orang lain yang melihatnya.',
26
+ },
27
+ {
28
+ question: 'Apa yang terjadi dengan latar belakang WebP saya jika transparan?',
29
+ answer:
30
+ 'Karena JPG tidak mendukung transparansi, konverter akan secara otomatis mengisi area transparan dengan latar belakang putih solid.',
31
+ },
32
+ {
33
+ question: 'Apakah ada batasan pada konversi atau ukuran file?',
34
+ answer:
35
+ 'Kami tidak memberlakukan batasan apa pun. Anda dapat mengonversi ratusan gambar selama komputer Anda memiliki daya pemrosesan dan RAM yang cukup.',
36
+ },
37
+ ];
38
+
39
+ const howTo: WebpAJpgLocaleContent['howTo'] = [
40
+ {
41
+ name: 'Tarik file Anda',
42
+ text: 'Letakkan file WebP modern Anda ke area unggahan atau pilih menggunakan browser file interaktif.',
43
+ },
44
+ {
45
+ name: 'Konversi Lokal',
46
+ text: 'Lihat bagaimana mesin lokal menerapkan latar belakang dan menafsirkan setiap piksel ke format JPG universal.',
47
+ },
48
+ {
49
+ name: 'Dapatkan hasil Anda',
50
+ text: 'Unduh satu per satu atau gunakan paket ZIP untuk menggabungkan semua foto baru Anda.',
51
+ },
52
+ ];
53
+
54
+ const bibliography: WebpAJpgLocaleContent['bibliography'] = [
55
+ {
56
+ name: 'JPEG.org: Standar JPEG',
57
+ url: 'https://jpeg.org/jpeg/',
58
+ },
59
+ {
60
+ name: 'Mozilla Developer Network - image/jpeg',
61
+ url: 'https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Image_types#jpeg',
62
+ },
63
+ {
64
+ name: 'Kompatibilitas WebP ke JPEG',
65
+ url: 'https://developers.google.com/speed/webp/faq',
66
+ },
67
+ ];
68
+
69
+ const seo: WebpAJpgLocaleContent['seo'] = [
70
+ {
71
+ type: 'title',
72
+ text: 'Konverter WebP ke JPG: Kompatibilitas Universal Tanpa Mengorbankan Privasi',
73
+ level: 2,
74
+ },
75
+ {
76
+ type: 'paragraph',
77
+ html: '<strong>WebP</strong> adalah taruhan Google pada efisiensi: gambar yang lebih ringan dengan kualitas yang sebanding dengan JPG tradisional. Namun, kompatibilitasnya tetap menjadi masalah di dunia nyata. Klien email seperti Outlook, perangkat lunak desain lama, aplikasi pesan, dan alur kerja perusahaan masih bergantung pada <strong>JPG</strong> yang ada di mana-mana. Mengonversi WebP ke JPG adalah jembatan antara web modern dan dunia nyata.',
78
+ },
79
+ {
80
+ type: 'title',
81
+ text: 'WebP vs JPG: Kapan Menggunakan Setiap Format?',
82
+ level: 3,
83
+ },
84
+ {
85
+ type: 'paragraph',
86
+ html: 'WebP unggul dalam lingkungan terkontrol: situs web modern di Chrome, Edge, atau Firefox di mana kompatibilitas browser dapat dijamin. Kompresinya yang unggul mengurangi berat file sebesar 25–35% dibandingkan dengan JPG yang setara, meningkatkan waktu pemuatan dan metrik Core Web Vitals. Ini adalah format ideal saat Anda mengontrol lingkungan tampilan.',
87
+ },
88
+ {
89
+ type: 'paragraph',
90
+ html: 'JPG, di sisi lain, berfungsi di <em>hampir setiap konteks</em>: lampiran email, presentasi PowerPoint, dokumen Word, printer rumah, aplikasi pengeditan lama, dan platform media sosial tanpa pengecualian. Jika Anda membutuhkan seseorang untuk membuka gambar Anda tanpa hambatan teknis apa pun, JPG adalah jawaban yang tepat.',
91
+ },
92
+ {
93
+ type: 'title',
94
+ text: 'Perbandingan: Konversi Lokal vs Cloud',
95
+ level: 3,
96
+ },
97
+ {
98
+ type: 'comparative',
99
+ items: [
100
+ {
101
+ title: 'Konverter Cloud',
102
+ description: 'Alat yang mengunggah file Anda ke server jarak jauh.',
103
+ icon: 'mdi:cloud-upload',
104
+ pointIcon: 'mdi:close-circle-outline',
105
+ points: [
106
+ 'Foto Anda tersebar di internet ke server yang tidak dikenal',
107
+ 'Waktu tunggu untuk pengunggahan dan pemrosesan jarak jauh',
108
+ 'Batasan harian pada ukuran file dan konversi gratis',
109
+ 'Risiko nyata retensi data pada server pihak ketiga',
110
+ ],
111
+ },
112
+ {
113
+ title: 'Arsitektur Lokal Kami',
114
+ description: 'Pemrosesan langsung pada perangkat keras Anda menggunakan teknologi Vanilla JS.',
115
+ icon: 'mdi:laptop-mac',
116
+ highlight: true,
117
+ points: [
118
+ 'Nol byte terkirim: semuanya terjadi di RAM Anda',
119
+ 'Kecepatan instan tanpa bergantung pada koneksi Anda',
120
+ 'Tidak ada batasan pada ukuran file atau jumlah file',
121
+ 'Sangat cocok untuk foto pribadi, medis, atau perusahaan',
122
+ ],
123
+ },
124
+ ],
125
+ },
126
+ {
127
+ type: 'title',
128
+ text: 'Cara Kerjanya Secara Teknis',
129
+ level: 3,
130
+ },
131
+ {
132
+ type: 'paragraph',
133
+ html: 'Saat Anda menarik file WebP ke dalam alat, browser mendekodenya secara native menggunakan mesin rendering internalnya. File tersebut kemudian digambar ke elemen <strong>HTML5 Canvas</strong> yang tidak terlihat. Karena JPG tidak mendukung transparansi, algoritme akan mengisi kanvas dengan latar belakang putih solid sebelum menyatukan gambar di atasnya.',
134
+ },
135
+ {
136
+ type: 'paragraph',
137
+ html: 'Langkah terakhir adalah ekspor: metode Canvas <code>toDataURL(\'image/jpeg\')</code> mengonversi piksel kanvas menjadi aliran byte JPG terkompresi berkualitas tinggi. Aliran ini dikirim langsung ke sistem unduhan browser, tanpa komunikasi jaringan sama sekali. Seluruh proses memakan waktu milidetik bahkan untuk gambar multi-megapiksel.',
138
+ },
139
+ {
140
+ type: 'tip',
141
+ title: 'Tip kompatibilitas',
142
+ html: 'Saat berbagi foto dengan pengguna non-teknis atau mengirimnya melalui email, selalu gunakan JPG — nol masalah kompatibilitas di klien email, sistem operasi, atau perangkat apa pun, tanpa pengecualian dan tanpa kejutan yang tidak menyenangkan.',
143
+ },
144
+ {
145
+ type: 'title',
146
+ text: 'Kasus Penggunaan dan Kompatibilitas',
147
+ level: 3,
148
+ },
149
+ {
150
+ type: 'list',
151
+ icon: 'mdi:check-circle',
152
+ items: [
153
+ 'Melampirkan foto di email dari Outlook, Gmail, atau Apple Mail.',
154
+ 'Memasukkan gambar dalam dokumen Word, Excel, atau presentasi PowerPoint.',
155
+ 'Posting di platform media sosial yang menolak WebP.',
156
+ 'Berbagi melalui WhatsApp atau aplikasi pesan dengan dukungan format terbatas.',
157
+ 'Mencetak foto di layanan cetak yang hanya menerima JPG atau PNG.',
158
+ ],
159
+ },
160
+ {
161
+ type: 'title',
162
+ text: 'Kesimpulan',
163
+ level: 3,
164
+ },
165
+ {
166
+ type: 'paragraph',
167
+ html: 'WebP adalah masa depan gambar web, tetapi JPG tetap menjadi raja kompatibilitas universal. Alat ini memungkinkan Anda menyeberangi jembatan itu dalam hitungan detik, sepenuhnya secara pribadi dan tanpa memasang apa pun. Gambar Anda tidak pernah meninggalkan perangkat Anda.',
168
+ },
169
+ ];
170
+
171
+
172
+ export const content: WebpAJpgLocaleContent = {
173
+ slug,
174
+ title,
175
+ description,
176
+ ui,
177
+ seo,
178
+ faq,
179
+ bibliography,
180
+ howTo,
181
+ schemas: generateSchemas({ title, description, inLanguage: 'id', faq, howTo }),
182
+ };