@jjlmoya/utils-converters 1.15.0 → 1.18.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 (397) hide show
  1. package/package.json +8 -4
  2. package/scripts/clean_titles.py +95 -0
  3. package/scripts/postinstall.mjs +27 -0
  4. package/src/category/i18n/de.ts +1 -1
  5. package/src/category/i18n/fr.ts +9 -9
  6. package/src/category/i18n/ru.ts +1 -1
  7. package/src/category/i18n/sv.ts +1 -1
  8. package/src/data.ts +0 -21
  9. package/src/layouts/PreviewLayout.astro +2 -1
  10. package/src/pages/[locale]/[slug].astro +28 -12
  11. package/src/tests/diacritics_density.test.ts +118 -0
  12. package/src/tests/inverted_punctuation.test.ts +84 -0
  13. package/src/tests/no_en_dash.test.ts +70 -0
  14. package/src/tests/pagespeed_best_practices.test.ts +198 -0
  15. package/src/tests/script_density.test.ts +94 -0
  16. package/src/tests/shared-test-helpers.ts +56 -0
  17. package/src/tests/tool_exports.test.ts +34 -0
  18. package/src/tool/avifAJpg/bibliography.ts +12 -0
  19. package/src/tool/avifAJpg/entry.ts +2 -0
  20. package/src/tool/avifAJpg/i18n/de.ts +2 -12
  21. package/src/tool/avifAJpg/i18n/en.ts +2 -12
  22. package/src/tool/avifAJpg/i18n/es.ts +2 -12
  23. package/src/tool/avifAJpg/i18n/fr.ts +11 -21
  24. package/src/tool/avifAJpg/i18n/id.ts +2 -12
  25. package/src/tool/avifAJpg/i18n/it.ts +2 -12
  26. package/src/tool/avifAJpg/i18n/ja.ts +1 -11
  27. package/src/tool/avifAJpg/i18n/ko.ts +1 -11
  28. package/src/tool/avifAJpg/i18n/nl.ts +2 -12
  29. package/src/tool/avifAJpg/i18n/pl.ts +2 -12
  30. package/src/tool/avifAJpg/i18n/pt.ts +2 -12
  31. package/src/tool/avifAJpg/i18n/ru.ts +7 -17
  32. package/src/tool/avifAJpg/i18n/sv.ts +2 -12
  33. package/src/tool/avifAJpg/i18n/tr.ts +1 -11
  34. package/src/tool/avifAJpg/i18n/zh.ts +4 -14
  35. package/src/tool/avifAJpg/seo.astro +2 -1
  36. package/src/tool/avifAPng/bibliography.ts +12 -0
  37. package/src/tool/avifAPng/entry.ts +2 -0
  38. package/src/tool/avifAPng/i18n/de.ts +4 -14
  39. package/src/tool/avifAPng/i18n/en.ts +4 -14
  40. package/src/tool/avifAPng/i18n/es.ts +4 -14
  41. package/src/tool/avifAPng/i18n/fr.ts +10 -20
  42. package/src/tool/avifAPng/i18n/id.ts +4 -14
  43. package/src/tool/avifAPng/i18n/it.ts +1 -11
  44. package/src/tool/avifAPng/i18n/ja.ts +1 -11
  45. package/src/tool/avifAPng/i18n/ko.ts +1 -11
  46. package/src/tool/avifAPng/i18n/nl.ts +4 -14
  47. package/src/tool/avifAPng/i18n/pl.ts +4 -14
  48. package/src/tool/avifAPng/i18n/pt.ts +4 -14
  49. package/src/tool/avifAPng/i18n/ru.ts +5 -15
  50. package/src/tool/avifAPng/i18n/sv.ts +4 -14
  51. package/src/tool/avifAPng/i18n/tr.ts +1 -11
  52. package/src/tool/avifAPng/i18n/zh.ts +3 -13
  53. package/src/tool/avifAPng/seo.astro +2 -1
  54. package/src/tool/avifAWebp/bibliography.ts +12 -0
  55. package/src/tool/avifAWebp/entry.ts +2 -0
  56. package/src/tool/avifAWebp/i18n/de.ts +6 -16
  57. package/src/tool/avifAWebp/i18n/en.ts +6 -16
  58. package/src/tool/avifAWebp/i18n/es.ts +6 -16
  59. package/src/tool/avifAWebp/i18n/fr.ts +13 -23
  60. package/src/tool/avifAWebp/i18n/id.ts +6 -16
  61. package/src/tool/avifAWebp/i18n/it.ts +1 -11
  62. package/src/tool/avifAWebp/i18n/ja.ts +1 -11
  63. package/src/tool/avifAWebp/i18n/ko.ts +2 -12
  64. package/src/tool/avifAWebp/i18n/nl.ts +6 -16
  65. package/src/tool/avifAWebp/i18n/pl.ts +6 -16
  66. package/src/tool/avifAWebp/i18n/pt.ts +6 -16
  67. package/src/tool/avifAWebp/i18n/ru.ts +7 -17
  68. package/src/tool/avifAWebp/i18n/sv.ts +6 -16
  69. package/src/tool/avifAWebp/i18n/tr.ts +2 -12
  70. package/src/tool/avifAWebp/i18n/zh.ts +6 -16
  71. package/src/tool/avifAWebp/seo.astro +2 -1
  72. package/src/tool/bmpAJpg/bibliography.ts +12 -0
  73. package/src/tool/bmpAJpg/entry.ts +2 -0
  74. package/src/tool/bmpAJpg/i18n/de.ts +1 -11
  75. package/src/tool/bmpAJpg/i18n/en.ts +1 -11
  76. package/src/tool/bmpAJpg/i18n/es.ts +1 -11
  77. package/src/tool/bmpAJpg/i18n/fr.ts +9 -19
  78. package/src/tool/bmpAJpg/i18n/id.ts +1 -11
  79. package/src/tool/bmpAJpg/i18n/it.ts +1 -11
  80. package/src/tool/bmpAJpg/i18n/ja.ts +1 -11
  81. package/src/tool/bmpAJpg/i18n/ko.ts +1 -11
  82. package/src/tool/bmpAJpg/i18n/nl.ts +1 -11
  83. package/src/tool/bmpAJpg/i18n/pl.ts +1 -11
  84. package/src/tool/bmpAJpg/i18n/pt.ts +1 -11
  85. package/src/tool/bmpAJpg/i18n/ru.ts +5 -15
  86. package/src/tool/bmpAJpg/i18n/sv.ts +1 -11
  87. package/src/tool/bmpAJpg/i18n/tr.ts +1 -11
  88. package/src/tool/bmpAJpg/i18n/zh.ts +1 -11
  89. package/src/tool/bmpAJpg/seo.astro +2 -1
  90. package/src/tool/bmpAPng/bibliography.ts +12 -0
  91. package/src/tool/bmpAPng/entry.ts +2 -0
  92. package/src/tool/bmpAPng/i18n/de.ts +2 -12
  93. package/src/tool/bmpAPng/i18n/en.ts +3 -13
  94. package/src/tool/bmpAPng/i18n/es.ts +2 -12
  95. package/src/tool/bmpAPng/i18n/fr.ts +12 -22
  96. package/src/tool/bmpAPng/i18n/id.ts +2 -12
  97. package/src/tool/bmpAPng/i18n/it.ts +2 -12
  98. package/src/tool/bmpAPng/i18n/ja.ts +1 -11
  99. package/src/tool/bmpAPng/i18n/ko.ts +1 -11
  100. package/src/tool/bmpAPng/i18n/nl.ts +2 -12
  101. package/src/tool/bmpAPng/i18n/pl.ts +2 -12
  102. package/src/tool/bmpAPng/i18n/pt.ts +2 -12
  103. package/src/tool/bmpAPng/i18n/ru.ts +9 -19
  104. package/src/tool/bmpAPng/i18n/sv.ts +2 -12
  105. package/src/tool/bmpAPng/i18n/tr.ts +1 -11
  106. package/src/tool/bmpAPng/i18n/zh.ts +1 -11
  107. package/src/tool/bmpAPng/seo.astro +2 -1
  108. package/src/tool/bmpAWebp/bibliography.ts +12 -0
  109. package/src/tool/bmpAWebp/entry.ts +2 -0
  110. package/src/tool/bmpAWebp/i18n/de.ts +8 -18
  111. package/src/tool/bmpAWebp/i18n/en.ts +8 -18
  112. package/src/tool/bmpAWebp/i18n/es.ts +8 -18
  113. package/src/tool/bmpAWebp/i18n/fr.ts +13 -23
  114. package/src/tool/bmpAWebp/i18n/id.ts +8 -18
  115. package/src/tool/bmpAWebp/i18n/it.ts +8 -18
  116. package/src/tool/bmpAWebp/i18n/ja.ts +7 -17
  117. package/src/tool/bmpAWebp/i18n/ko.ts +7 -17
  118. package/src/tool/bmpAWebp/i18n/nl.ts +8 -18
  119. package/src/tool/bmpAWebp/i18n/pl.ts +8 -18
  120. package/src/tool/bmpAWebp/i18n/pt.ts +8 -18
  121. package/src/tool/bmpAWebp/i18n/ru.ts +10 -20
  122. package/src/tool/bmpAWebp/i18n/sv.ts +8 -18
  123. package/src/tool/bmpAWebp/i18n/tr.ts +8 -18
  124. package/src/tool/bmpAWebp/i18n/zh.ts +8 -18
  125. package/src/tool/bmpAWebp/seo.astro +2 -1
  126. package/src/tool/gifAJpg/bibliography.ts +12 -0
  127. package/src/tool/gifAJpg/entry.ts +2 -0
  128. package/src/tool/gifAJpg/i18n/de.ts +1 -11
  129. package/src/tool/gifAJpg/i18n/en.ts +1 -11
  130. package/src/tool/gifAJpg/i18n/es.ts +1 -11
  131. package/src/tool/gifAJpg/i18n/fr.ts +9 -19
  132. package/src/tool/gifAJpg/i18n/id.ts +1 -11
  133. package/src/tool/gifAJpg/i18n/it.ts +1 -11
  134. package/src/tool/gifAJpg/i18n/ja.ts +1 -11
  135. package/src/tool/gifAJpg/i18n/ko.ts +1 -11
  136. package/src/tool/gifAJpg/i18n/nl.ts +1 -11
  137. package/src/tool/gifAJpg/i18n/pl.ts +1 -11
  138. package/src/tool/gifAJpg/i18n/pt.ts +1 -11
  139. package/src/tool/gifAJpg/i18n/ru.ts +2 -12
  140. package/src/tool/gifAJpg/i18n/sv.ts +1 -11
  141. package/src/tool/gifAJpg/i18n/tr.ts +1 -11
  142. package/src/tool/gifAJpg/i18n/zh.ts +1 -11
  143. package/src/tool/gifAJpg/seo.astro +2 -1
  144. package/src/tool/gifAPng/bibliography.ts +12 -0
  145. package/src/tool/gifAPng/entry.ts +2 -0
  146. package/src/tool/gifAPng/i18n/de.ts +2 -12
  147. package/src/tool/gifAPng/i18n/en.ts +3 -13
  148. package/src/tool/gifAPng/i18n/es.ts +2 -12
  149. package/src/tool/gifAPng/i18n/fr.ts +11 -21
  150. package/src/tool/gifAPng/i18n/id.ts +2 -12
  151. package/src/tool/gifAPng/i18n/it.ts +2 -12
  152. package/src/tool/gifAPng/i18n/ja.ts +1 -11
  153. package/src/tool/gifAPng/i18n/ko.ts +1 -11
  154. package/src/tool/gifAPng/i18n/nl.ts +2 -12
  155. package/src/tool/gifAPng/i18n/pl.ts +3 -13
  156. package/src/tool/gifAPng/i18n/pt.ts +2 -12
  157. package/src/tool/gifAPng/i18n/ru.ts +3 -13
  158. package/src/tool/gifAPng/i18n/sv.ts +3 -13
  159. package/src/tool/gifAPng/i18n/tr.ts +1 -11
  160. package/src/tool/gifAPng/i18n/zh.ts +2 -12
  161. package/src/tool/gifAPng/seo.astro +2 -1
  162. package/src/tool/gifAWebp/bibliography.ts +12 -0
  163. package/src/tool/gifAWebp/entry.ts +2 -0
  164. package/src/tool/gifAWebp/i18n/de.ts +3 -13
  165. package/src/tool/gifAWebp/i18n/en.ts +3 -13
  166. package/src/tool/gifAWebp/i18n/es.ts +1 -11
  167. package/src/tool/gifAWebp/i18n/fr.ts +11 -21
  168. package/src/tool/gifAWebp/i18n/id.ts +3 -13
  169. package/src/tool/gifAWebp/i18n/it.ts +1 -11
  170. package/src/tool/gifAWebp/i18n/ja.ts +1 -11
  171. package/src/tool/gifAWebp/i18n/ko.ts +1 -11
  172. package/src/tool/gifAWebp/i18n/nl.ts +3 -13
  173. package/src/tool/gifAWebp/i18n/pl.ts +3 -13
  174. package/src/tool/gifAWebp/i18n/pt.ts +3 -13
  175. package/src/tool/gifAWebp/i18n/ru.ts +7 -17
  176. package/src/tool/gifAWebp/i18n/sv.ts +3 -13
  177. package/src/tool/gifAWebp/i18n/tr.ts +1 -11
  178. package/src/tool/gifAWebp/i18n/zh.ts +4 -14
  179. package/src/tool/gifAWebp/seo.astro +2 -1
  180. package/src/tool/imagenBase64/bibliography.ts +12 -0
  181. package/src/tool/imagenBase64/component.astro +0 -301
  182. package/src/tool/imagenBase64/entry.ts +2 -0
  183. package/src/tool/imagenBase64/i18n/de.ts +7 -17
  184. package/src/tool/imagenBase64/i18n/en.ts +7 -17
  185. package/src/tool/imagenBase64/i18n/es.ts +7 -17
  186. package/src/tool/imagenBase64/i18n/fr.ts +17 -27
  187. package/src/tool/imagenBase64/i18n/id.ts +7 -17
  188. package/src/tool/imagenBase64/i18n/it.ts +6 -16
  189. package/src/tool/imagenBase64/i18n/ja.ts +1 -11
  190. package/src/tool/imagenBase64/i18n/ko.ts +1 -11
  191. package/src/tool/imagenBase64/i18n/nl.ts +7 -17
  192. package/src/tool/imagenBase64/i18n/pl.ts +7 -17
  193. package/src/tool/imagenBase64/i18n/pt.ts +7 -17
  194. package/src/tool/imagenBase64/i18n/ru.ts +9 -19
  195. package/src/tool/imagenBase64/i18n/sv.ts +7 -17
  196. package/src/tool/imagenBase64/i18n/tr.ts +2 -12
  197. package/src/tool/imagenBase64/i18n/zh.ts +7 -17
  198. package/src/tool/imagenBase64/image-to-base64-converter.css +299 -0
  199. package/src/tool/imagenBase64/seo.astro +2 -1
  200. package/src/tool/jpgAIco/bibliography.ts +12 -0
  201. package/src/tool/jpgAIco/entry.ts +2 -0
  202. package/src/tool/jpgAIco/i18n/de.ts +9 -19
  203. package/src/tool/jpgAIco/i18n/en.ts +9 -19
  204. package/src/tool/jpgAIco/i18n/es.ts +7 -17
  205. package/src/tool/jpgAIco/i18n/fr.ts +13 -23
  206. package/src/tool/jpgAIco/i18n/id.ts +9 -19
  207. package/src/tool/jpgAIco/i18n/it.ts +3 -13
  208. package/src/tool/jpgAIco/i18n/ja.ts +2 -12
  209. package/src/tool/jpgAIco/i18n/ko.ts +2 -12
  210. package/src/tool/jpgAIco/i18n/nl.ts +9 -19
  211. package/src/tool/jpgAIco/i18n/pl.ts +9 -19
  212. package/src/tool/jpgAIco/i18n/pt.ts +9 -19
  213. package/src/tool/jpgAIco/i18n/ru.ts +11 -21
  214. package/src/tool/jpgAIco/i18n/sv.ts +9 -19
  215. package/src/tool/jpgAIco/i18n/tr.ts +3 -13
  216. package/src/tool/jpgAIco/i18n/zh.ts +9 -19
  217. package/src/tool/jpgAIco/seo.astro +2 -1
  218. package/src/tool/jpgAPng/bibliography.ts +12 -0
  219. package/src/tool/jpgAPng/entry.ts +2 -0
  220. package/src/tool/jpgAPng/i18n/de.ts +7 -17
  221. package/src/tool/jpgAPng/i18n/en.ts +9 -19
  222. package/src/tool/jpgAPng/i18n/es.ts +7 -17
  223. package/src/tool/jpgAPng/i18n/fr.ts +13 -23
  224. package/src/tool/jpgAPng/i18n/id.ts +7 -17
  225. package/src/tool/jpgAPng/i18n/it.ts +5 -15
  226. package/src/tool/jpgAPng/i18n/ja.ts +3 -13
  227. package/src/tool/jpgAPng/i18n/ko.ts +3 -13
  228. package/src/tool/jpgAPng/i18n/nl.ts +7 -17
  229. package/src/tool/jpgAPng/i18n/pl.ts +7 -17
  230. package/src/tool/jpgAPng/i18n/pt.ts +7 -17
  231. package/src/tool/jpgAPng/i18n/ru.ts +10 -20
  232. package/src/tool/jpgAPng/i18n/sv.ts +7 -17
  233. package/src/tool/jpgAPng/i18n/tr.ts +6 -16
  234. package/src/tool/jpgAPng/i18n/zh.ts +8 -18
  235. package/src/tool/jpgAPng/seo.astro +2 -1
  236. package/src/tool/jpgAWebp/bibliography.ts +12 -0
  237. package/src/tool/jpgAWebp/entry.ts +2 -0
  238. package/src/tool/jpgAWebp/i18n/de.ts +10 -20
  239. package/src/tool/jpgAWebp/i18n/en.ts +10 -20
  240. package/src/tool/jpgAWebp/i18n/es.ts +4 -14
  241. package/src/tool/jpgAWebp/i18n/fr.ts +16 -26
  242. package/src/tool/jpgAWebp/i18n/id.ts +10 -20
  243. package/src/tool/jpgAWebp/i18n/it.ts +6 -16
  244. package/src/tool/jpgAWebp/i18n/ja.ts +2 -12
  245. package/src/tool/jpgAWebp/i18n/ko.ts +3 -13
  246. package/src/tool/jpgAWebp/i18n/nl.ts +10 -20
  247. package/src/tool/jpgAWebp/i18n/pl.ts +10 -20
  248. package/src/tool/jpgAWebp/i18n/pt.ts +10 -20
  249. package/src/tool/jpgAWebp/i18n/ru.ts +10 -20
  250. package/src/tool/jpgAWebp/i18n/sv.ts +10 -20
  251. package/src/tool/jpgAWebp/i18n/tr.ts +5 -15
  252. package/src/tool/jpgAWebp/i18n/zh.ts +9 -19
  253. package/src/tool/jpgAWebp/seo.astro +2 -1
  254. package/src/tool/pngAIco/bibliography.ts +12 -0
  255. package/src/tool/pngAIco/entry.ts +2 -0
  256. package/src/tool/pngAIco/i18n/de.ts +8 -18
  257. package/src/tool/pngAIco/i18n/en.ts +8 -18
  258. package/src/tool/pngAIco/i18n/es.ts +8 -18
  259. package/src/tool/pngAIco/i18n/fr.ts +14 -24
  260. package/src/tool/pngAIco/i18n/id.ts +8 -18
  261. package/src/tool/pngAIco/i18n/it.ts +4 -14
  262. package/src/tool/pngAIco/i18n/ja.ts +2 -12
  263. package/src/tool/pngAIco/i18n/ko.ts +2 -12
  264. package/src/tool/pngAIco/i18n/nl.ts +8 -18
  265. package/src/tool/pngAIco/i18n/pl.ts +8 -18
  266. package/src/tool/pngAIco/i18n/pt.ts +8 -18
  267. package/src/tool/pngAIco/i18n/ru.ts +11 -21
  268. package/src/tool/pngAIco/i18n/sv.ts +8 -18
  269. package/src/tool/pngAIco/i18n/tr.ts +7 -17
  270. package/src/tool/pngAIco/i18n/zh.ts +8 -18
  271. package/src/tool/pngAIco/seo.astro +2 -1
  272. package/src/tool/pngAJpg/bibliography.ts +12 -0
  273. package/src/tool/pngAJpg/entry.ts +2 -0
  274. package/src/tool/pngAJpg/i18n/de.ts +1 -11
  275. package/src/tool/pngAJpg/i18n/en.ts +1 -11
  276. package/src/tool/pngAJpg/i18n/es.ts +1 -11
  277. package/src/tool/pngAJpg/i18n/fr.ts +3 -13
  278. package/src/tool/pngAJpg/i18n/id.ts +1 -11
  279. package/src/tool/pngAJpg/i18n/it.ts +1 -11
  280. package/src/tool/pngAJpg/i18n/ja.ts +1 -11
  281. package/src/tool/pngAJpg/i18n/ko.ts +1 -11
  282. package/src/tool/pngAJpg/i18n/nl.ts +1 -11
  283. package/src/tool/pngAJpg/i18n/pl.ts +7 -17
  284. package/src/tool/pngAJpg/i18n/pt.ts +1 -11
  285. package/src/tool/pngAJpg/i18n/ru.ts +9 -19
  286. package/src/tool/pngAJpg/i18n/sv.ts +1 -11
  287. package/src/tool/pngAJpg/i18n/tr.ts +1 -11
  288. package/src/tool/pngAJpg/i18n/zh.ts +6 -16
  289. package/src/tool/pngAJpg/seo.astro +2 -1
  290. package/src/tool/pngAWebp/bibliography.ts +16 -0
  291. package/src/tool/pngAWebp/entry.ts +2 -0
  292. package/src/tool/pngAWebp/i18n/de.ts +7 -21
  293. package/src/tool/pngAWebp/i18n/en.ts +7 -21
  294. package/src/tool/pngAWebp/i18n/es.ts +6 -20
  295. package/src/tool/pngAWebp/i18n/fr.ts +13 -27
  296. package/src/tool/pngAWebp/i18n/id.ts +7 -21
  297. package/src/tool/pngAWebp/i18n/it.ts +3 -17
  298. package/src/tool/pngAWebp/i18n/ja.ts +2 -16
  299. package/src/tool/pngAWebp/i18n/ko.ts +2 -16
  300. package/src/tool/pngAWebp/i18n/nl.ts +7 -21
  301. package/src/tool/pngAWebp/i18n/pl.ts +7 -21
  302. package/src/tool/pngAWebp/i18n/pt.ts +6 -20
  303. package/src/tool/pngAWebp/i18n/ru.ts +8 -22
  304. package/src/tool/pngAWebp/i18n/sv.ts +7 -21
  305. package/src/tool/pngAWebp/i18n/tr.ts +6 -20
  306. package/src/tool/pngAWebp/i18n/zh.ts +6 -20
  307. package/src/tool/pngAWebp/seo.astro +2 -1
  308. package/src/tool/svgAJpg/bibliography.ts +12 -0
  309. package/src/tool/svgAJpg/entry.ts +2 -0
  310. package/src/tool/svgAJpg/i18n/de.ts +2 -12
  311. package/src/tool/svgAJpg/i18n/en.ts +1 -11
  312. package/src/tool/svgAJpg/i18n/es.ts +1 -11
  313. package/src/tool/svgAJpg/i18n/fr.ts +6 -16
  314. package/src/tool/svgAJpg/i18n/id.ts +1 -11
  315. package/src/tool/svgAJpg/i18n/it.ts +1 -11
  316. package/src/tool/svgAJpg/i18n/ja.ts +1 -11
  317. package/src/tool/svgAJpg/i18n/ko.ts +1 -11
  318. package/src/tool/svgAJpg/i18n/nl.ts +1 -11
  319. package/src/tool/svgAJpg/i18n/pl.ts +1 -11
  320. package/src/tool/svgAJpg/i18n/pt.ts +1 -11
  321. package/src/tool/svgAJpg/i18n/ru.ts +3 -13
  322. package/src/tool/svgAJpg/i18n/sv.ts +1 -11
  323. package/src/tool/svgAJpg/i18n/tr.ts +1 -11
  324. package/src/tool/svgAJpg/i18n/zh.ts +1 -11
  325. package/src/tool/svgAJpg/seo.astro +2 -1
  326. package/src/tool/svgAPng/bibliography.ts +12 -0
  327. package/src/tool/svgAPng/entry.ts +2 -0
  328. package/src/tool/svgAPng/i18n/de.ts +3 -13
  329. package/src/tool/svgAPng/i18n/en.ts +3 -13
  330. package/src/tool/svgAPng/i18n/es.ts +1 -11
  331. package/src/tool/svgAPng/i18n/fr.ts +9 -19
  332. package/src/tool/svgAPng/i18n/id.ts +3 -13
  333. package/src/tool/svgAPng/i18n/it.ts +3 -13
  334. package/src/tool/svgAPng/i18n/ja.ts +1 -11
  335. package/src/tool/svgAPng/i18n/ko.ts +1 -11
  336. package/src/tool/svgAPng/i18n/nl.ts +3 -13
  337. package/src/tool/svgAPng/i18n/pl.ts +3 -13
  338. package/src/tool/svgAPng/i18n/pt.ts +3 -13
  339. package/src/tool/svgAPng/i18n/ru.ts +5 -15
  340. package/src/tool/svgAPng/i18n/sv.ts +3 -13
  341. package/src/tool/svgAPng/i18n/tr.ts +3 -13
  342. package/src/tool/svgAPng/i18n/zh.ts +3 -13
  343. package/src/tool/svgAPng/seo.astro +2 -1
  344. package/src/tool/webpAIco/bibliography.ts +12 -0
  345. package/src/tool/webpAIco/entry.ts +2 -0
  346. package/src/tool/webpAIco/i18n/de.ts +1 -11
  347. package/src/tool/webpAIco/i18n/en.ts +1 -11
  348. package/src/tool/webpAIco/i18n/es.ts +1 -11
  349. package/src/tool/webpAIco/i18n/fr.ts +5 -15
  350. package/src/tool/webpAIco/i18n/id.ts +1 -11
  351. package/src/tool/webpAIco/i18n/it.ts +1 -11
  352. package/src/tool/webpAIco/i18n/ja.ts +1 -11
  353. package/src/tool/webpAIco/i18n/ko.ts +1 -11
  354. package/src/tool/webpAIco/i18n/nl.ts +1 -11
  355. package/src/tool/webpAIco/i18n/pl.ts +1 -11
  356. package/src/tool/webpAIco/i18n/pt.ts +1 -11
  357. package/src/tool/webpAIco/i18n/ru.ts +3 -13
  358. package/src/tool/webpAIco/i18n/sv.ts +1 -11
  359. package/src/tool/webpAIco/i18n/tr.ts +1 -11
  360. package/src/tool/webpAIco/i18n/zh.ts +1 -12
  361. package/src/tool/webpAIco/seo.astro +2 -1
  362. package/src/tool/webpAJpg/bibliography.ts +16 -0
  363. package/src/tool/webpAJpg/entry.ts +2 -0
  364. package/src/tool/webpAJpg/i18n/de.ts +3 -17
  365. package/src/tool/webpAJpg/i18n/en.ts +3 -17
  366. package/src/tool/webpAJpg/i18n/es.ts +1 -15
  367. package/src/tool/webpAJpg/i18n/fr.ts +10 -24
  368. package/src/tool/webpAJpg/i18n/id.ts +3 -17
  369. package/src/tool/webpAJpg/i18n/it.ts +2 -16
  370. package/src/tool/webpAJpg/i18n/ja.ts +1 -15
  371. package/src/tool/webpAJpg/i18n/ko.ts +1 -15
  372. package/src/tool/webpAJpg/i18n/nl.ts +2 -16
  373. package/src/tool/webpAJpg/i18n/pl.ts +3 -17
  374. package/src/tool/webpAJpg/i18n/pt.ts +3 -17
  375. package/src/tool/webpAJpg/i18n/ru.ts +7 -21
  376. package/src/tool/webpAJpg/i18n/sv.ts +3 -17
  377. package/src/tool/webpAJpg/i18n/tr.ts +2 -16
  378. package/src/tool/webpAJpg/i18n/zh.ts +2 -16
  379. package/src/tool/webpAJpg/seo.astro +2 -1
  380. package/src/tool/webpAPng/bibliography.ts +16 -0
  381. package/src/tool/webpAPng/entry.ts +2 -0
  382. package/src/tool/webpAPng/i18n/de.ts +3 -17
  383. package/src/tool/webpAPng/i18n/en.ts +3 -17
  384. package/src/tool/webpAPng/i18n/es.ts +1 -15
  385. package/src/tool/webpAPng/i18n/fr.ts +9 -23
  386. package/src/tool/webpAPng/i18n/id.ts +3 -17
  387. package/src/tool/webpAPng/i18n/it.ts +3 -17
  388. package/src/tool/webpAPng/i18n/ja.ts +1 -15
  389. package/src/tool/webpAPng/i18n/ko.ts +1 -15
  390. package/src/tool/webpAPng/i18n/nl.ts +3 -17
  391. package/src/tool/webpAPng/i18n/pl.ts +3 -17
  392. package/src/tool/webpAPng/i18n/pt.ts +3 -17
  393. package/src/tool/webpAPng/i18n/ru.ts +4 -18
  394. package/src/tool/webpAPng/i18n/sv.ts +3 -17
  395. package/src/tool/webpAPng/i18n/tr.ts +2 -17
  396. package/src/tool/webpAPng/i18n/zh.ts +3 -17
  397. package/src/tool/webpAPng/seo.astro +2 -1
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { ImageConverterUI } from '../../../shared/ImageConverter.astro';
2
3
  import { generateSchemas } from '../../../shared/logic/schemas';
3
4
  import type { PngAJpgLocaleContent } from '../index';
@@ -37,7 +38,7 @@ const faq: PngAJpgLocaleContent['faq'] = [
37
38
  {
38
39
  question: '对于机密文档安全吗?',
39
40
  answer:
40
- '是的,对于银行业、医疗保健或法律行业的专业人士来说,这是最安全的选择。作为一个仅使用您内存的“黑匣子”,关闭标签页后,内部发生的一切都会消失,从而避免了第三方云端的泄露。',
41
+ '是的,对于银行业、医疗保健或法律行业的专业人士来说,这是最安全的选择。作为一个仅使用您内存的\"黑匣子\",关闭标签页后,内部发生的一切都会消失,从而避免了第三方云端的泄露。',
41
42
  },
42
43
  ];
43
44
 
@@ -48,22 +49,11 @@ const howTo: PngAJpgLocaleContent['howTo'] = [
48
49
  },
49
50
  {
50
51
  name: '即时处理',
51
- text: '在浏览器本地优化大小的同时,确认每个文件的状态变为“就绪”。',
52
+ text: '在浏览器本地优化大小的同时,确认每个文件的状态变为\"就绪\"。',
52
53
  },
53
54
  {
54
55
  name: '优化下载',
55
- text: '逐个保存您的新 JPG,或使用“下载全部”按钮获取包含所有图像的压缩 ZIP 文件。',
56
- },
57
- ];
58
-
59
- const bibliography: PngAJpgLocaleContent['bibliography'] = [
60
- {
61
- name: 'PNG 联盟规范',
62
- url: 'http://www.libpng.org/pub/png/',
63
- },
64
- {
65
- name: 'JPEG 委员会',
66
- url: 'https://jpeg.org/',
56
+ text: '逐个保存您的新 JPG,或使用\"下载全部\"按钮获取包含所有图像的压缩 ZIP 文件。',
67
57
  },
68
58
  ];
69
59
 
@@ -135,7 +125,7 @@ const seo: PngAJpgLocaleContent['seo'] = [
135
125
  },
136
126
  {
137
127
  type: 'paragraph',
138
- html: '由于 JPG 不支持透明度,我们的算法会在“绘制”PNG 之前先用纯白色填充背景。合成图像后,我们执行原生导出方法,生成可供您的计算机直接下载的字节流。',
128
+ html: '由于 JPG 不支持透明度,我们的算法会在\"绘制\"PNG 之前先用纯白色填充背景。合成图像后,我们执行原生导出方法,生成可供您的计算机直接下载的字节流。',
139
129
  },
140
130
  {
141
131
  type: 'tip',
@@ -149,7 +139,7 @@ const seo: PngAJpgLocaleContent['seo'] = [
149
139
  },
150
140
  {
151
141
  type: 'paragraph',
152
- html: '如果您在银行、医疗保健或法律等敏感行业工作,将文件上传到在线转换器属于安全违规行为。我们的工具就像一个“黑匣子”:内部发生的一切都留在您的内存中。这是处理机密文档唯一安全的方法。',
142
+ html: '如果您在银行、医疗保健或法律等敏感行业工作,将文件上传到在线转换器属于安全违规行为。我们的工具就像一个\"黑匣子\":内部发生的一切都留在您的内存中。这是处理机密文档唯一安全的方法。',
153
143
  },
154
144
  {
155
145
  type: 'title',
@@ -9,6 +9,7 @@ interface Props {
9
9
 
10
10
  const { locale = 'es' } = Astro.props;
11
11
  const content = await pngAJpg.i18n[locale]?.();
12
+ if (!content) return null;
12
13
  ---
13
14
 
14
- {content && <SEORenderer content={{ locale, sections: content.seo }} />}
15
+ {content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
@@ -0,0 +1,16 @@
1
+ import type { BibliographyEntry } from '../../types';
2
+
3
+ export const bibliography: BibliographyEntry[] = [
4
+ {
5
+ name: 'Google: WebP Implementierungsdetails',
6
+ url: 'https://developers.google.com/speed/webp/',
7
+ },
8
+ {
9
+ name: 'W3C: Leitfaden zu Core Web Vitals',
10
+ url: 'https://web.dev/vitals/',
11
+ },
12
+ {
13
+ name: 'Mozilla Docs: Bildformate',
14
+ url: 'https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Image_types',
15
+ },
16
+ ];
@@ -27,3 +27,5 @@ export const pngAWebp: ConvertersToolEntry<ImageConverterUI> = {
27
27
  zh: () => import('./i18n/zh').then((m) => m.content),
28
28
  },
29
29
  };
30
+
31
+ export { bibliography } from './bibliography';
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { ImageConverterUI } from '../../../shared/ImageConverter.astro';
2
3
  import { generateSchemas } from '../../../shared/logic/schemas';
3
4
  import type { PngAWebpLocaleContent } from '../index';
@@ -51,21 +52,6 @@ const howTo: PngAWebpLocaleContent['howTo'] = [
51
52
  },
52
53
  ];
53
54
 
54
- const bibliography: PngAWebpLocaleContent['bibliography'] = [
55
- {
56
- name: 'Google: WebP Implementierungsdetails',
57
- url: 'https://developers.google.com/speed/webp/',
58
- },
59
- {
60
- name: 'W3C: Leitfaden zu Core Web Vitals',
61
- url: 'https://web.dev/vitals/',
62
- },
63
- {
64
- name: 'Mozilla Docs: Bildformate',
65
- url: 'https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Image_types',
66
- },
67
- ];
68
-
69
55
  const seo: PngAWebpLocaleContent['seo'] = [
70
56
  {
71
57
  type: 'title',
@@ -74,7 +60,7 @@ const seo: PngAWebpLocaleContent['seo'] = [
74
60
  },
75
61
  {
76
62
  type: 'paragraph',
77
- html: '<strong>PNG</strong> war jahrzehntelang das Referenzformat für Webbilder mit Transparenz Logos, Icons, UI-Elemente, Produktbilder auf freigestelltem Hintergrund. Das Problem ist die Dateigröße: Die verlustfreie Kompression, die Qualität garantiert, erzeugt auch spürbar große Dateien. Googles <strong>WebP</strong> löst diesen Widerspruch: Es unterstützt den Alpha-Kanal (Transparenz) <em>und</em> komprimiert weitaus besser als PNG, was den Wechsel von PNG zu WebP auf Ihrer Website zu einer perfekten Optimierung macht, bei der Sie auf nichts verzichten müssen.',
63
+ html: '<strong>PNG</strong> war jahrzehntelang das Referenzformat für Webbilder mit Transparenz - Logos, Icons, UI-Elemente, Produktbilder auf freigestelltem Hintergrund. Das Problem ist die Dateigröße: Die verlustfreie Kompression, die Qualität garantiert, erzeugt auch spürbar große Dateien. Googles <strong>WebP</strong> löst diesen Widerspruch: Es unterstützt den Alpha-Kanal (Transparenz) <em>und</em> komprimiert weitaus besser als PNG, was den Wechsel von PNG zu WebP auf Ihrer Website zu einer perfekten Optimierung macht, bei der Sie auf nichts verzichten müssen.',
78
64
  },
79
65
  {
80
66
  type: 'title',
@@ -83,7 +69,7 @@ const seo: PngAWebpLocaleContent['seo'] = [
83
69
  },
84
70
  {
85
71
  type: 'paragraph',
86
- html: '<strong>PNG</strong> bleibt das richtige Format, wenn Kompatibilität entscheidend ist: Design-Tools wie Photoshop oder Figma, Druck-Workflows, ältere Desktop-Anwendungen oder jeder Kontext, in dem WebP-Unterstützung nicht garantiert ist. Es ist auch das ideale Format für das Speichern von Arbeitsebenen in Bearbeitungspipelines, da seine verlustfreie Kompression jeden Pixel bewahrt. Der Preis: Dateien, die 38 Mal mehr wiegen können als ihr WebP-Äquivalent.',
72
+ html: '<strong>PNG</strong> bleibt das richtige Format, wenn Kompatibilität entscheidend ist: Design-Tools wie Photoshop oder Figma, Druck-Workflows, ältere Desktop-Anwendungen oder jeder Kontext, in dem WebP-Unterstützung nicht garantiert ist. Es ist auch das ideale Format für das Speichern von Arbeitsebenen in Bearbeitungspipelines, da seine verlustfreie Kompression jeden Pixel bewahrt. Der Preis: Dateien, die 3-8 Mal mehr wiegen können als ihr WebP-Äquivalent.',
87
73
  },
88
74
  {
89
75
  type: 'paragraph',
@@ -115,8 +101,8 @@ const seo: PngAWebpLocaleContent['seo'] = [
115
101
  icon: 'mdi:laptop-mac',
116
102
  highlight: true,
117
103
  points: [
118
- 'Sofortige Geschwindigkeit keine Netzwerklatenz',
119
- 'Vollständige Privatsphäre 0 Byte werden extern gesendet',
104
+ 'Sofortige Geschwindigkeit - keine Netzwerklatenz',
105
+ 'Vollständige Privatsphäre - 0 Byte werden extern gesendet',
120
106
  'Keine Megabyte-Limits oder Dateianzahlbeschränkungen',
121
107
  'Saubere Benutzeroberfläche, keine Werbung oder Tracking',
122
108
  ],
@@ -130,7 +116,7 @@ const seo: PngAWebpLocaleContent['seo'] = [
130
116
  },
131
117
  {
132
118
  type: 'paragraph',
133
- html: 'Die PNG wird lokal geladen und in einem im Speicher befindlichen <strong>HTML5 Canvas</strong> dekodiert. Die Canvas-API bewahrt den Alpha-Kanal der ursprünglichen PNG alle transparenten und halbtransparenten Pixel bleiben im RGBA-Pixelbuffer intakt. Das Canvas wird dann durch Aufruf von <code>toDataURL(\'image/webp\')</code> exportiert, wodurch der WebP-Codec des Browsers (basierend auf Googles libwebp) angewendet wird, um eine kompaktere Datei zu erzeugen, ohne die Transparenzdaten zu verändern.',
119
+ html: 'Die PNG wird lokal geladen und in einem im Speicher befindlichen <strong>HTML5 Canvas</strong> dekodiert. Die Canvas-API bewahrt den Alpha-Kanal der ursprünglichen PNG - alle transparenten und halbtransparenten Pixel bleiben im RGBA-Pixelbuffer intakt. Das Canvas wird dann durch Aufruf von <code>toDataURL(\'image/webp\')</code> exportiert, wodurch der WebP-Codec des Browsers (basierend auf Googles libwebp) angewendet wird, um eine kompaktere Datei zu erzeugen, ohne die Transparenzdaten zu verändern.',
134
120
  },
135
121
  {
136
122
  type: 'paragraph',
@@ -164,7 +150,7 @@ const seo: PngAWebpLocaleContent['seo'] = [
164
150
  },
165
151
  {
166
152
  type: 'paragraph',
167
- html: 'Der Wechsel von PNG zu WebP ist die umfassendste Webbild-Optimierung, die verfügbar ist: Sie erhalten leichtere Dateien, bewahren die Transparenz und verbessern die Core Web Vitals-Metriken, ohne etwas an Ihrem visuellen Design zu ändern. Dieses Tool erledigt das sofort, kostenlos und völlig privat Ihre Bilder werden in Ihrem Browser verarbeitet und verlassen niemals Ihr Gerät.',
153
+ html: 'Der Wechsel von PNG zu WebP ist die umfassendste Webbild-Optimierung, die verfügbar ist: Sie erhalten leichtere Dateien, bewahren die Transparenz und verbessern die Core Web Vitals-Metriken, ohne etwas an Ihrem visuellen Design zu ändern. Dieses Tool erledigt das sofort, kostenlos und völlig privat - Ihre Bilder werden in Ihrem Browser verarbeitet und verlassen niemals Ihr Gerät.',
168
154
  },
169
155
  ];
170
156
 
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { ImageConverterUI } from '../../../shared/ImageConverter.astro';
2
3
  import { generateSchemas } from '../../../shared/logic/schemas';
3
4
  import type { PngAWebpLocaleContent } from '../index';
@@ -51,21 +52,6 @@ const howTo: PngAWebpLocaleContent['howTo'] = [
51
52
  },
52
53
  ];
53
54
 
54
- const bibliography: PngAWebpLocaleContent['bibliography'] = [
55
- {
56
- name: 'Google: WebP Implementation Details',
57
- url: 'https://developers.google.com/speed/webp/',
58
- },
59
- {
60
- name: 'W3C: Core Web Vitals Guidance',
61
- url: 'https://web.dev/vitals/',
62
- },
63
- {
64
- name: 'Mozilla Docs: Image Formats',
65
- url: 'https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Image_types',
66
- },
67
- ];
68
-
69
55
  const seo: PngAWebpLocaleContent['seo'] = [
70
56
  {
71
57
  type: 'title',
@@ -74,7 +60,7 @@ const seo: PngAWebpLocaleContent['seo'] = [
74
60
  },
75
61
  {
76
62
  type: 'paragraph',
77
- html: '<strong>PNG</strong> has been the reference format for web images with transparency for decades logos, icons, UI elements, product images on cut-out backgrounds. Its problem is file size: the lossless compression that guarantees quality also generates noticeably large files. Google\'s <strong>WebP</strong> solves this contradiction: it supports the alpha channel (transparency) <em>and</em> compresses far better than PNG, making the switch from PNG to WebP on your website a perfect optimization that sacrifices nothing.',
63
+ html: '<strong>PNG</strong> has been the reference format for web images with transparency for decades - logos, icons, UI elements, product images on cut-out backgrounds. Its problem is file size: the lossless compression that guarantees quality also generates noticeably large files. Google\'s <strong>WebP</strong> solves this contradiction: it supports the alpha channel (transparency) <em>and</em> compresses far better than PNG, making the switch from PNG to WebP on your website a perfect optimization that sacrifices nothing.',
78
64
  },
79
65
  {
80
66
  type: 'title',
@@ -83,7 +69,7 @@ const seo: PngAWebpLocaleContent['seo'] = [
83
69
  },
84
70
  {
85
71
  type: 'paragraph',
86
- html: '<strong>PNG</strong> remains the right format when compatibility is critical: design tools like Photoshop or Figma, print workflows, legacy desktop applications, or any context where WebP support is not guaranteed. It is also the ideal format for saving working layers in editing pipelines, since its lossless compression preserves every pixel. The cost: files that can weigh 38 times more than their WebP equivalent.',
72
+ html: '<strong>PNG</strong> remains the right format when compatibility is critical: design tools like Photoshop or Figma, print workflows, legacy desktop applications, or any context where WebP support is not guaranteed. It is also the ideal format for saving working layers in editing pipelines, since its lossless compression preserves every pixel. The cost: files that can weigh 3-8 times more than their WebP equivalent.',
87
73
  },
88
74
  {
89
75
  type: 'paragraph',
@@ -115,8 +101,8 @@ const seo: PngAWebpLocaleContent['seo'] = [
115
101
  icon: 'mdi:laptop-mac',
116
102
  highlight: true,
117
103
  points: [
118
- 'Instant speed zero network latency',
119
- 'Complete privacy 0 bytes sent externally',
104
+ 'Instant speed - zero network latency',
105
+ 'Complete privacy - 0 bytes sent externally',
120
106
  'No MB limits or file count restrictions',
121
107
  'Clean interface, no ads or tracking',
122
108
  ],
@@ -130,7 +116,7 @@ const seo: PngAWebpLocaleContent['seo'] = [
130
116
  },
131
117
  {
132
118
  type: 'paragraph',
133
- html: 'The PNG is loaded locally and decoded into an in-memory <strong>HTML5 Canvas</strong>. The Canvas API preserves the alpha channel from the original PNG all transparent and semi-transparent pixels are maintained intact in the RGBA pixel buffer. The canvas is then exported by calling <code>toDataURL(\'image/webp\')</code>, which applies the browser\'s WebP codec (based on Google\'s libwebp) to generate a more compact file without altering the transparency data.',
119
+ html: 'The PNG is loaded locally and decoded into an in-memory <strong>HTML5 Canvas</strong>. The Canvas API preserves the alpha channel from the original PNG - all transparent and semi-transparent pixels are maintained intact in the RGBA pixel buffer. The canvas is then exported by calling <code>toDataURL(\'image/webp\')</code>, which applies the browser\'s WebP codec (based on Google\'s libwebp) to generate a more compact file without altering the transparency data.',
134
120
  },
135
121
  {
136
122
  type: 'paragraph',
@@ -164,7 +150,7 @@ const seo: PngAWebpLocaleContent['seo'] = [
164
150
  },
165
151
  {
166
152
  type: 'paragraph',
167
- html: 'The move from PNG to WebP is the most complete web image optimization available: you get lighter files, preserve transparency, and improve Core Web Vitals metrics without changing anything about your visual design. This tool does it instantly, for free, and completely privately your images are processed in your browser and never travel to any external server.',
153
+ html: 'The move from PNG to WebP is the most complete web image optimization available: you get lighter files, preserve transparency, and improve Core Web Vitals metrics without changing anything about your visual design. This tool does it instantly, for free, and completely privately - your images are processed in your browser and never travel to any external server.',
168
154
  },
169
155
  ];
170
156
 
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { ImageConverterUI } from '../../../shared/ImageConverter.astro';
2
3
  import { generateSchemas } from '../../../shared/logic/schemas';
3
4
  import type { PngAWebpLocaleContent } from '../index';
@@ -51,21 +52,6 @@ const howTo: PngAWebpLocaleContent['howTo'] = [
51
52
  },
52
53
  ];
53
54
 
54
- const bibliography: PngAWebpLocaleContent['bibliography'] = [
55
- {
56
- name: 'Google: WebP Implementation Details',
57
- url: 'https://developers.google.com/speed/webp/',
58
- },
59
- {
60
- name: 'W3C: Core Web Vitals Guidance',
61
- url: 'https://web.dev/vitals/',
62
- },
63
- {
64
- name: 'Mozilla Docs: Image Formats',
65
- url: 'https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Image_types',
66
- },
67
- ];
68
-
69
55
  const seo: PngAWebpLocaleContent['seo'] = [
70
56
  {
71
57
  type: 'title',
@@ -74,7 +60,7 @@ const seo: PngAWebpLocaleContent['seo'] = [
74
60
  },
75
61
  {
76
62
  type: 'paragraph',
77
- html: 'El <strong>PNG</strong> ha sido el formato de referencia para imágenes web con transparencia durante décadas logos, iconos, elementos de UI, imágenes de producto sobre fondo recortado. Su problema es el peso: la compresión sin pérdida que garantiza su calidad también genera archivos notablemente grandes. El <strong>WebP</strong> de Google resuelve esta contradicción: soporta canal alfa (transparencias) <em>y</em> comprime mucho mejor que PNG, haciendo que cambiar PNG por WebP en tu web sea la optimización perfecta que no sacrifica nada.',
63
+ html: 'El <strong>PNG</strong> ha sido el formato de referencia para imágenes web con transparencia durante décadas - logos, iconos, elementos de UI, imágenes de producto sobre fondo recortado. Su problema es el peso: la compresión sin pérdida que garantiza su calidad también genera archivos notablemente grandes. El <strong>WebP</strong> de Google resuelve esta contradicción: soporta canal alfa (transparencias) <em>y</em> comprime mucho mejor que PNG, haciendo que cambiar PNG por WebP en tu web sea la optimización perfecta que no sacrifica nada.',
78
64
  },
79
65
  {
80
66
  type: 'title',
@@ -115,8 +101,8 @@ const seo: PngAWebpLocaleContent['seo'] = [
115
101
  icon: 'mdi:laptop-mac',
116
102
  highlight: true,
117
103
  points: [
118
- 'Velocidad instantánea cero latencia de red',
119
- 'Privacidad total 0 bytes enviados al exterior',
104
+ 'Velocidad instantánea - cero latencia de red',
105
+ 'Privacidad total - 0 bytes enviados al exterior',
120
106
  'Sin límites de MB ni de número de archivos',
121
107
  'Interfaz limpia, sin anuncios ni rastreos',
122
108
  ],
@@ -130,7 +116,7 @@ const seo: PngAWebpLocaleContent['seo'] = [
130
116
  },
131
117
  {
132
118
  type: 'paragraph',
133
- html: 'El PNG se carga localmente y se decodifica en un <strong>Canvas HTML5</strong> en memoria. El Canvas API preserva el canal alfa del PNG original todos los píxeles transparentes y semitransparentes se mantienen intactos en el buffer de píxeles RGBA. A continuación se exporta llamando a <code>toDataURL(\'image/webp\')</code>, que aplica el codec WebP del navegador (basado en libwebp de Google) para generar un archivo más compacto sin alterar la información de transparencia.',
119
+ html: 'El PNG se carga localmente y se decodifica en un <strong>Canvas HTML5</strong> en memoria. El Canvas API preserva el canal alfa del PNG original - todos los píxeles transparentes y semitransparentes se mantienen intactos en el buffer de píxeles RGBA. A continuación se exporta llamando a <code>toDataURL(\'image/webp\')</code>, que aplica el codec WebP del navegador (basado en libwebp de Google) para generar un archivo más compacto sin alterar la información de transparencia.',
134
120
  },
135
121
  {
136
122
  type: 'paragraph',
@@ -164,7 +150,7 @@ const seo: PngAWebpLocaleContent['seo'] = [
164
150
  },
165
151
  {
166
152
  type: 'paragraph',
167
- html: 'El paso de PNG a WebP es la optimización de imágenes web más completa disponible: consigues archivos más ligeros, preservas las transparencias y mejoras las métricas Core Web Vitals sin cambiar nada del diseño visual. Esta herramienta lo hace de forma instantánea, gratuita y completamente privada tus imágenes se procesan en tu navegador y no viajan a ningún servidor externo.',
153
+ html: 'El paso de PNG a WebP es la optimización de imágenes web más completa disponible: consigues archivos más ligeros, preservas las transparencias y mejoras las métricas Core Web Vitals sin cambiar nada del diseño visual. Esta herramienta lo hace de forma instantánea, gratuita y completamente privada - tus imágenes se procesan en tu navegador y no viajan a ningún servidor externo.',
168
154
  },
169
155
  ];
170
156
 
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { ImageConverterUI } from '../../../shared/ImageConverter.astro';
2
3
  import { generateSchemas } from '../../../shared/logic/schemas';
3
4
  import type { PngAWebpLocaleContent } from '../index';
@@ -51,30 +52,15 @@ const howTo: PngAWebpLocaleContent['howTo'] = [
51
52
  },
52
53
  ];
53
54
 
54
- const bibliography: PngAWebpLocaleContent['bibliography'] = [
55
- {
56
- name: 'Google: Détails d\'implémentation WebP',
57
- url: 'https://developers.google.com/speed/webp/',
58
- },
59
- {
60
- name: 'W3C: Guidance Core Web Vitals',
61
- url: 'https://web.dev/vitals/',
62
- },
63
- {
64
- name: 'Mozilla Docs: Formats d\'image',
65
- url: 'https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Image_types',
66
- },
67
- ];
68
-
69
55
  const seo: PngAWebpLocaleContent['seo'] = [
70
56
  {
71
57
  type: 'title',
72
- text: 'Convertisseur PNG vers WebP : Transparence et Compression Moderne pour le Web',
58
+ text: 'Convertisseur PNG vers WebP: Transparence et Compression Moderne pour le Web',
73
59
  level: 2,
74
60
  },
75
61
  {
76
62
  type: 'paragraph',
77
- html: 'Le <strong>PNG</strong> est le format de référence pour les images web avec transparence depuis des décennies logos, icônes, éléments d\'interface, images de produits sur fond découpé. Son problème est le poids : la compression sans perte qui garantit sa qualité génère également des fichiers notablement volumineux. Le <strong>WebP</strong> de Google résout cette contradiction : il supporte le canal alpha (transparence) <em>et</em> compresse bien mieux que le PNG, faisant du passage de PNG à WebP l\'optimisation parfaite qui ne sacrifie rien.',
63
+ html: 'Le <strong>PNG</strong> est le format de référence pour les images web avec transparence depuis des décennies - logos, icônes, éléments d\'interface, images de produits sur fond découpé. Son problème est le poids: la compression sans perte qui garantit sa qualité génère également des fichiers notablement volumineux. Le <strong>WebP</strong> de Google résout cette contradiction: il supporte le canal alpha (transparence) <em>et</em> compresse bien mieux que le PNG, faisant du passage de PNG à WebP l\'optimisation parfaite qui ne sacrifie rien.',
78
64
  },
79
65
  {
80
66
  type: 'title',
@@ -83,15 +69,15 @@ const seo: PngAWebpLocaleContent['seo'] = [
83
69
  },
84
70
  {
85
71
  type: 'paragraph',
86
- html: 'Le <strong>PNG</strong> reste le bon format lorsque la compatibilité est critique : outils de design comme Photoshop ou Figma, flux d\'impression, applications de bureau ancienne ou tout contexte où le support WebP n\'est pas garanti. C\'est aussi le format idéal pour sauvegarder les calques de travail dans les pipelines d\'édition, car sa compression sans perte préserve chaque pixel. Le coût : des fichiers qui peuvent peser 3 à 8 fois plus que leur équivalent WebP.',
72
+ html: 'Le <strong>PNG</strong> reste le bon format lorsque la compatibilité est critique: outils de design comme Photoshop ou Figma, flux d\'impression, applications de bureau ancienne ou tout contexte où le support WebP n\'est pas garanti. C\'est aussi le format idéal pour sauvegarder les calques de travail dans les pipelines d\'édition, car sa compression sans perte préserve chaque pixel. Le coût: des fichiers qui peuvent peser 3 à 8 fois plus que leur équivalent WebP.',
87
73
  },
88
74
  {
89
75
  type: 'paragraph',
90
- html: 'Le <strong>WebP</strong> est le remplacement naturel du PNG pour tout le contenu web moderne. Chrome, Firefox, Safari et Edge le supportent nativement. Une image WebP sans perte est 26 % plus petite que le PNG équivalent ; en mode avec perte, elle peut être jusqu\'à 40 % plus petite avec une qualité visuelle pratiquement indistinguible. Et, point crucial pour le design web : <strong>WebP préserve la transparence alpha</strong> exactement comme le PNG, sans aucun compromis visuel.',
76
+ html: 'Le <strong>WebP</strong> est le remplacement naturel du PNG pour tout le contenu web moderne. Chrome, Firefox, Safari et Edge le supportent nativement. Une image WebP sans perte est 26 % plus petite que le PNG équivalent ; en mode avec perte, elle peut être jusqu\'à 40 % plus petite avec une qualité visuelle pratiquement indistinguible. Et, point crucial pour le design web: <strong>WebP préserve la transparence alpha</strong> exactement comme le PNG, sans aucun compromis visuel.',
91
77
  },
92
78
  {
93
79
  type: 'title',
94
- text: 'Comparatif : Conversion locale vs Cloud',
80
+ text: 'Comparatif: Conversion locale vs Cloud',
95
81
  level: 3,
96
82
  },
97
83
  {
@@ -115,8 +101,8 @@ const seo: PngAWebpLocaleContent['seo'] = [
115
101
  icon: 'mdi:laptop-mac',
116
102
  highlight: true,
117
103
  points: [
118
- 'Vitesse instantanée zéro latence réseau',
119
- 'Confidentialité totale 0 octet envoyé à l\'extérieur',
104
+ 'Vitesse instantanée - zéro latence réseau',
105
+ 'Confidentialité totale - 0 octet envoyé à l\'extérieur',
120
106
  'Aucune limite de taille ni de nombre de fichiers',
121
107
  'Interface épurée, sans publicités ni traçage',
122
108
  ],
@@ -130,16 +116,16 @@ const seo: PngAWebpLocaleContent['seo'] = [
130
116
  },
131
117
  {
132
118
  type: 'paragraph',
133
- html: 'Le PNG est chargé localement et décodé dans un <strong>Canvas HTML5</strong> en mémoire. L\'API Canvas préserve le canal alpha du PNG original tous les pixels transparents et semi-transparents sont maintenus intacts dans le tampon de pixels RGBA. Le canvas est ensuite exporté en appelant <code>toDataURL(\'image/webp\')</code>, qui applique le codec WebP du navigateur (basé sur libwebp de Google) pour générer un fichier plus compact sans altérer les données de transparence.',
119
+ html: 'Le PNG est chargé localement et décodé dans un <strong>Canvas HTML5</strong> en mémoire. L\'API Canvas préserve le canal alpha du PNG original - tous les pixels transparents et semi-transparents sont maintenus intacts dans le tampon de pixels RGBA. Le canvas est ensuite exporté en appelant <code>toDataURL(\'image/webp\')</code>, qui applique le codec WebP du navigateur (basé sur libwebp de Google) pour générer un fichier plus compact sans altérer les données de transparence.',
134
120
  },
135
121
  {
136
122
  type: 'paragraph',
137
- html: 'WebP utilise deux modes de compression : le mode sans perte (<em>lossless</em>) pour les images où chaque pixel doit être exactement fidèle à l\'original, et le mode avec perte (<em>lossy</em>) pour les photos et éléments où de petites différences sont imperceptibles. Le mode sans perte produit des fichiers 26 % plus petits que le PNG ; le mode avec perte peut atteindre des réductions jusqu\'à 40 % par rapport au PNG tout en maintenant une excellente qualité visuelle.',
123
+ html: 'WebP utilise deux modes de compression: le mode sans perte (<em>lossless</em>) pour les images où chaque pixel doit être exactement fidèle à l\'original, et le mode avec perte (<em>lossy</em>) pour les photos et éléments où de petites différences sont imperceptibles. Le mode sans perte produit des fichiers 26 % plus petits que le PNG ; le mode avec perte peut atteindre des réductions jusqu\'à 40 % par rapport au PNG tout en maintenant une excellente qualité visuelle.',
138
124
  },
139
125
  {
140
126
  type: 'tip',
141
- title: 'Conseil : WebP surpasse à la fois PNG et JPG sur le web',
142
- html: 'WebP en mode sans perte est plus petit que le PNG. WebP en mode avec perte est plus petit que le JPG. Cela fait de WebP le <strong>seul format qui remplace les deux</strong> dans le contexte web. Convertissez vos PNG transparents en WebP avant de les mettre en ligne : Google PageSpeed Insights le détecte et le valorise positivement dans les audits "Servir les images dans des formats modernes".',
127
+ title: 'Conseil: WebP surpasse à la fois PNG et JPG sur le web',
128
+ html: 'WebP en mode sans perte est plus petit que le PNG. WebP en mode avec perte est plus petit que le JPG. Cela fait de WebP le <strong>seul format qui remplace les deux</strong> dans le contexte web. Convertissez vos PNG transparents en WebP avant de les mettre en ligne: Google PageSpeed Insights le détecte et le valorise positivement dans les audits "Servir les images dans des formats modernes".',
143
129
  },
144
130
  {
145
131
  type: 'title',
@@ -164,7 +150,7 @@ const seo: PngAWebpLocaleContent['seo'] = [
164
150
  },
165
151
  {
166
152
  type: 'paragraph',
167
- html: 'Le passage de PNG à WebP est l\'optimisation d\'images web la plus complète disponible : vous obtenez des fichiers plus légers, vous préservez la transparence et vous améliorez les métriques Core Web Vitals sans rien changer à votre design visuel. Cet outil le fait instantanément, gratuitement et de manière totalement privée vos images sont traitées dans votre navigateur et ne voyagent jamais vers aucun serveur externe.',
153
+ html: 'Le passage de PNG à WebP est l\'optimisation d\'images web la plus complète disponible: vous obtenez des fichiers plus légers, vous préservez la transparence et vous améliorez les métriques Core Web Vitals sans rien changer à votre design visuel. Cet outil le fait instantanément, gratuitement et de manière totalement privée - vos images sont traitées dans votre navigateur et ne voyagent jamais vers aucun serveur externe.',
168
154
  },
169
155
  ];
170
156
 
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { ImageConverterUI } from '../../../shared/ImageConverter.astro';
2
3
  import { generateSchemas } from '../../../shared/logic/schemas';
3
4
  import type { PngAWebpLocaleContent } from '../index';
@@ -51,21 +52,6 @@ const howTo: PngAWebpLocaleContent['howTo'] = [
51
52
  },
52
53
  ];
53
54
 
54
- const bibliography: PngAWebpLocaleContent['bibliography'] = [
55
- {
56
- name: 'Google: Detail Implementasi WebP',
57
- url: 'https://developers.google.com/speed/webp/',
58
- },
59
- {
60
- name: 'W3C: Panduan Core Web Vitals',
61
- url: 'https://web.dev/vitals/',
62
- },
63
- {
64
- name: 'Mozilla Docs: Format Gambar',
65
- url: 'https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Image_types',
66
- },
67
- ];
68
-
69
55
  const seo: PngAWebpLocaleContent['seo'] = [
70
56
  {
71
57
  type: 'title',
@@ -74,7 +60,7 @@ const seo: PngAWebpLocaleContent['seo'] = [
74
60
  },
75
61
  {
76
62
  type: 'paragraph',
77
- html: '<strong>PNG</strong> telah menjadi format referensi untuk gambar web dengan transparansi selama beberapa dekade logo, ikon, elemen UI, gambar produk dengan latar belakang transparan. Masalahnya adalah ukuran file: kompresi lossless yang menjamin kualitas juga menghasilkan file yang sangat besar. <strong>WebP</strong> Google memecahkan kontradiksi ini: ia mendukung saluran alfa (transparansi) <em>dan</em> mengompresi jauh lebih baik daripada PNG, menjadikan peralihan dari PNG ke WebP di situs web Anda sebagai optimasi sempurna yang tidak mengorbankan apa pun.',
63
+ html: '<strong>PNG</strong> telah menjadi format referensi untuk gambar web dengan transparansi selama beberapa dekade - logo, ikon, elemen UI, gambar produk dengan latar belakang transparan. Masalahnya adalah ukuran file: kompresi lossless yang menjamin kualitas juga menghasilkan file yang sangat besar. <strong>WebP</strong> Google memecahkan kontradiksi ini: ia mendukung saluran alfa (transparansi) <em>dan</em> mengompresi jauh lebih baik daripada PNG, menjadikan peralihan dari PNG ke WebP di situs web Anda sebagai optimasi sempurna yang tidak mengorbankan apa pun.',
78
64
  },
79
65
  {
80
66
  type: 'title',
@@ -83,7 +69,7 @@ const seo: PngAWebpLocaleContent['seo'] = [
83
69
  },
84
70
  {
85
71
  type: 'paragraph',
86
- html: '<strong>PNG</strong> tetap merupakan format yang tepat ketika kompatibilitas sangat penting: alat desain seperti Photoshop atau Figma, alur kerja cetak, aplikasi desktop lama, atau konteks apa pun di mana dukungan WebP tidak dijamin. Ini juga merupakan format ideal untuk menyimpan lapisan kerja dalam alur pengeditan, karena kompresi lossless-nya mempertahankan setiap piksel. Biayanya: file yang bisa berbobot 38 kali lebih berat daripada ekuivalen WebP-nya.',
72
+ html: '<strong>PNG</strong> tetap merupakan format yang tepat ketika kompatibilitas sangat penting: alat desain seperti Photoshop atau Figma, alur kerja cetak, aplikasi desktop lama, atau konteks apa pun di mana dukungan WebP tidak dijamin. Ini juga merupakan format ideal untuk menyimpan lapisan kerja dalam alur pengeditan, karena kompresi lossless-nya mempertahankan setiap piksel. Biayanya: file yang bisa berbobot 3-8 kali lebih berat daripada ekuivalen WebP-nya.',
87
73
  },
88
74
  {
89
75
  type: 'paragraph',
@@ -115,8 +101,8 @@ const seo: PngAWebpLocaleContent['seo'] = [
115
101
  icon: 'mdi:laptop-mac',
116
102
  highlight: true,
117
103
  points: [
118
- 'Kecepatan instan nol latensi jaringan',
119
- 'Privasi lengkap 0 byte dikirim secara eksternal',
104
+ 'Kecepatan instan - nol latensi jaringan',
105
+ 'Privasi lengkap - 0 byte dikirim secara eksternal',
120
106
  'Tanpa batas MB atau batasan jumlah file',
121
107
  'Antarmuka bersih, tanpa iklan atau pelacakan',
122
108
  ],
@@ -130,7 +116,7 @@ const seo: PngAWebpLocaleContent['seo'] = [
130
116
  },
131
117
  {
132
118
  type: 'paragraph',
133
- html: 'PNG dimuat secara lokal dan didekodekan ke dalam <strong>HTML5 Canvas</strong> dalam memori. API Canvas mempertahankan saluran alfa dari PNG asli semua piksel transparan dan semi-transparan dipertahankan secara utuh dalam buffer piksel RGBA. Kanvas kemudian diekspor dengan memanggil <code>toDataURL(\'image/webp\')</code>, yang menerapkan codec WebP browser (berdasarkan libwebp Google) untuk menghasilkan file yang lebih ringkas tanpa mengubah data transparansi.',
119
+ html: 'PNG dimuat secara lokal dan didekodekan ke dalam <strong>HTML5 Canvas</strong> dalam memori. API Canvas mempertahankan saluran alfa dari PNG asli - semua piksel transparan dan semi-transparan dipertahankan secara utuh dalam buffer piksel RGBA. Kanvas kemudian diekspor dengan memanggil <code>toDataURL(\'image/webp\')</code>, yang menerapkan codec WebP browser (berdasarkan libwebp Google) untuk menghasilkan file yang lebih ringkas tanpa mengubah data transparansi.',
134
120
  },
135
121
  {
136
122
  type: 'paragraph',
@@ -164,7 +150,7 @@ const seo: PngAWebpLocaleContent['seo'] = [
164
150
  },
165
151
  {
166
152
  type: 'paragraph',
167
- html: 'Peralihan dari PNG ke WebP adalah optimasi gambar web terlengkap yang tersedia: Anda mendapatkan file yang lebih ringan, mempertahankan transparansi, dan meningkatkan metrik Core Web Vitals tanpa mengubah apa pun pada desain visual Anda. Alat ini melakukannya secara instan, gratis, dan sepenuhnya privat gambar Anda diproses di browser Anda dan tidak pernah dikirim ke server eksternal mana pun.',
153
+ html: 'Peralihan dari PNG ke WebP adalah optimasi gambar web terlengkap yang tersedia: Anda mendapatkan file yang lebih ringan, mempertahankan transparansi, dan meningkatkan metrik Core Web Vitals tanpa mengubah apa pun pada desain visual Anda. Alat ini melakukannya secara instan, gratis, dan sepenuhnya privat - gambar Anda diproses di browser Anda dan tidak pernah dikirim ke server eksternal mana pun.',
168
154
  },
169
155
  ];
170
156
 
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { ImageConverterUI } from '../../../shared/ImageConverter.astro';
2
3
  import { generateSchemas } from '../../../shared/logic/schemas';
3
4
  import type { PngAWebpLocaleContent } from '../index';
@@ -51,21 +52,6 @@ const howTo: PngAWebpLocaleContent['howTo'] = [
51
52
  },
52
53
  ];
53
54
 
54
- const bibliography: PngAWebpLocaleContent['bibliography'] = [
55
- {
56
- name: 'Google: Dettagli sull\'implementazione di WebP',
57
- url: 'https://developers.google.com/speed/webp/',
58
- },
59
- {
60
- name: 'W3C: Guida ai Core Web Vitals',
61
- url: 'https://web.dev/vitals/',
62
- },
63
- {
64
- name: 'Mozilla Docs: Formati immagine',
65
- url: 'https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Image_types',
66
- },
67
- ];
68
-
69
55
  const seo: PngAWebpLocaleContent['seo'] = [
70
56
  {
71
57
  type: 'title',
@@ -115,8 +101,8 @@ const seo: PngAWebpLocaleContent['seo'] = [
115
101
  icon: 'mdi:laptop-mac',
116
102
  highlight: true,
117
103
  points: [
118
- 'Velocità istantanea latenza di rete zero',
119
- 'Privacy completa 0 byte inviati esternamente',
104
+ 'Velocità istantanea - latenza di rete zero',
105
+ 'Privacy completa - 0 byte inviati esternamente',
120
106
  'Nessun limite di MB o restrizioni sul numero di file',
121
107
  'Interfaccia pulita, senza pubblicità o tracciamento',
122
108
  ],
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { ImageConverterUI } from '../../../shared/ImageConverter.astro';
2
3
  import { generateSchemas } from '../../../shared/logic/schemas';
3
4
  import type { PngAWebpLocaleContent } from '../index';
@@ -51,21 +52,6 @@ const howTo: PngAWebpLocaleContent['howTo'] = [
51
52
  },
52
53
  ];
53
54
 
54
- const bibliography: PngAWebpLocaleContent['bibliography'] = [
55
- {
56
- name: 'Google: WebPの実装詳細',
57
- url: 'https://developers.google.com/speed/webp/',
58
- },
59
- {
60
- name: 'W3C: Core Web Vitalsガイダンス',
61
- url: 'https://web.dev/vitals/',
62
- },
63
- {
64
- name: 'Mozilla Docs: 画像形式',
65
- url: 'https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Image_types',
66
- },
67
- ];
68
-
69
55
  const seo: PngAWebpLocaleContent['seo'] = [
70
56
  {
71
57
  type: 'title',
@@ -116,7 +102,7 @@ const seo: PngAWebpLocaleContent['seo'] = [
116
102
  highlight: true,
117
103
  points: [
118
104
  'ネットワーク遅延のない即座の処理速度',
119
- '完全なプライバシー 外部送信データ0バイト',
105
+ '完全なプライバシー - 外部送信データ0バイト',
120
106
  '容量制限やファイル数の制限なし',
121
107
  '広告や追跡のないクリーンなインターフェース',
122
108
  ],
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { ImageConverterUI } from '../../../shared/ImageConverter.astro';
2
3
  import { generateSchemas } from '../../../shared/logic/schemas';
3
4
  import type { PngAWebpLocaleContent } from '../index';
@@ -51,21 +52,6 @@ const howTo: PngAWebpLocaleContent['howTo'] = [
51
52
  },
52
53
  ];
53
54
 
54
- const bibliography: PngAWebpLocaleContent['bibliography'] = [
55
- {
56
- name: 'Google: WebP 구현 세부 정보',
57
- url: 'https://developers.google.com/speed/webp/',
58
- },
59
- {
60
- name: 'W3C: Core Web Vitals 가이드',
61
- url: 'https://web.dev/vitals/',
62
- },
63
- {
64
- name: 'Mozilla Docs: 이미지 형식',
65
- url: 'https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Image_types',
66
- },
67
- ];
68
-
69
55
  const seo: PngAWebpLocaleContent['seo'] = [
70
56
  {
71
57
  type: 'title',
@@ -116,7 +102,7 @@ const seo: PngAWebpLocaleContent['seo'] = [
116
102
  highlight: true,
117
103
  points: [
118
104
  '네트워크 지연 없는 즉각적인 속도',
119
- '완벽한 개인 정보 보호 외부 전송 데이터 0바이트',
105
+ '완벽한 개인 정보 보호 - 외부 전송 데이터 0바이트',
120
106
  '용량 제한이나 파일 개수 제한 없음',
121
107
  '광고나 추적이 없는 깨끗한 인터페이스',
122
108
  ],