@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
@@ -5,307 +5,6 @@ interface Props { ui: ImageToBase64UI }
5
5
  const { ui } = Astro.props;
6
6
  ---
7
7
 
8
- <style>
9
- .base64-container {
10
- width: 100%;
11
- margin-bottom: 2rem;
12
- }
13
-
14
- .base64-card {
15
- background: var(--bg-surface);
16
- border: 1px solid var(--border-base);
17
- border-radius: 20px;
18
-
19
- --card-shadow: rgba(0, 0, 0, 0.04);
20
- --card-shadow-blur: 20px;
21
- --card-shadow-y: 4px;
22
-
23
- box-shadow: 0 var(--card-shadow-y) var(--card-shadow-blur) var(--card-shadow);
24
- display: flex;
25
- flex-direction: column;
26
- overflow: hidden;
27
- }
28
-
29
- @media (min-width: 800px) {
30
- .base64-card {
31
- flex-direction: row;
32
- min-height: 550px;
33
- }
34
-
35
- .upload-section {
36
- width: 40%;
37
- border-right: 1px solid var(--border-base);
38
- background: var(--bg-muted);
39
- padding: 3rem 2rem;
40
- }
41
-
42
- .result-section {
43
- flex: 1;
44
- padding: 3rem 2rem;
45
- display: flex;
46
- flex-direction: column;
47
- gap: 2rem;
48
- }
49
- }
50
-
51
- .upload-section {
52
- display: flex;
53
- flex-direction: column;
54
- justify-content: center;
55
- padding: 2rem;
56
- }
57
-
58
- .result-section {
59
- padding: 2rem;
60
- display: flex;
61
- flex-direction: column;
62
- gap: 1.5rem;
63
- }
64
-
65
- .drop-zone {
66
- position: relative;
67
- border: 2px dashed var(--border-base);
68
- border-radius: 16px;
69
- background: var(--bg-surface);
70
- padding: 2rem 1rem;
71
- text-align: center;
72
- cursor: pointer;
73
- transition: all 0.2s ease;
74
- display: flex;
75
- align-items: center;
76
- justify-content: center;
77
- min-height: 300px;
78
- height: 100%;
79
- }
80
-
81
- .drop-zone:hover {
82
- border-color: var(--accent);
83
- background: var(--bg-muted);
84
- }
85
-
86
- .drop-content {
87
- display: flex;
88
- flex-direction: column;
89
- align-items: center;
90
- gap: 0.5rem;
91
- pointer-events: none;
92
- }
93
-
94
- .upload-icon {
95
- width: 40px;
96
- height: 40px;
97
- color: var(--text-muted);
98
- margin-bottom: 0.5rem;
99
- }
100
-
101
- .drop-content h3 {
102
- margin: 0;
103
- font-size: 1.05rem;
104
- font-weight: 700;
105
- color: var(--text-base);
106
- }
107
-
108
- .drop-content p {
109
- margin: 0;
110
- font-size: 0.85rem;
111
- color: var(--text-muted);
112
- }
113
-
114
- .file-input-native {
115
- margin-top: 1.5rem;
116
- padding: 0.5rem;
117
- font-size: 0.85rem;
118
- color: var(--text-muted);
119
- background: var(--bg-surface);
120
- border: 1px solid var(--border-base);
121
- border-radius: 8px;
122
- max-width: 100%;
123
- cursor: pointer;
124
- }
125
-
126
- .drop-zone .file-input-native {
127
- pointer-events: auto;
128
- }
129
-
130
- .preview-container {
131
- position: absolute;
132
- inset: 0;
133
- background: var(--bg-surface);
134
- z-index: 10;
135
- display: flex;
136
- flex-direction: column;
137
- align-items: center;
138
- justify-content: center;
139
- padding: 1.25rem;
140
- }
141
-
142
- .preview-container.hidden {
143
- display: none;
144
- }
145
-
146
- #b64-image-preview {
147
- max-width: 100%;
148
- max-height: 250px;
149
- object-fit: contain;
150
- border-radius: 8px;
151
- }
152
-
153
- .clear-btn {
154
- position: absolute;
155
- top: 1rem;
156
- right: 1rem;
157
- background: var(--bg-surface);
158
- border: 1px solid var(--border-base);
159
- border-radius: 50%;
160
- width: 32px;
161
- height: 32px;
162
- display: flex;
163
- align-items: center;
164
- justify-content: center;
165
- color: var(--text-muted);
166
- cursor: pointer;
167
- }
168
-
169
- .image-info {
170
- position: absolute;
171
- bottom: 1rem;
172
- display: flex;
173
- background: var(--bg-muted);
174
- padding: 0.4rem 0.8rem;
175
- border-radius: 8px;
176
- border: 1px solid var(--border-base);
177
- }
178
-
179
- .info-pill {
180
- font-size: 0.7rem;
181
- font-weight: 600;
182
- color: var(--text-muted);
183
- }
184
-
185
- .name-pill {
186
- max-width: 120px;
187
- overflow: hidden;
188
- text-overflow: ellipsis;
189
- white-space: nowrap;
190
- padding-right: 0.5rem;
191
- }
192
-
193
- .size-pill {
194
- color: var(--accent);
195
- padding-left: 0.5rem;
196
- border-left: 1px solid var(--border-base);
197
- }
198
-
199
- .output-group {
200
- display: flex;
201
- flex-direction: column;
202
- gap: 0.5rem;
203
- }
204
-
205
- .output-header {
206
- display: flex;
207
- justify-content: space-between;
208
- align-items: center;
209
- }
210
-
211
- .output-header label {
212
- font-weight: 700;
213
- color: var(--text-base);
214
- font-size: 0.95rem;
215
- }
216
-
217
- .copy-btn {
218
- background: var(--bg-surface);
219
- border: 1px solid var(--border-base);
220
- color: var(--text-base);
221
- padding: 0.35rem 0.75rem;
222
- border-radius: 6px;
223
- font-size: 0.8rem;
224
- font-weight: 700;
225
- cursor: pointer;
226
- transition: all 0.2s;
227
- }
228
-
229
- .copy-btn:hover {
230
- background: var(--accent);
231
- color: var(--text-on-primary);
232
- }
233
-
234
- .code-wrapper {
235
- background: var(--bg-muted);
236
- border: 1px solid var(--border-base);
237
- border-radius: 12px;
238
- padding: 1rem;
239
- }
240
-
241
- textarea {
242
- width: 100%;
243
- min-height: 120px;
244
- background: transparent;
245
- border: none;
246
- color: var(--text-base);
247
- font-size: 0.85rem;
248
- line-height: 1.5;
249
- resize: none;
250
- outline: none;
251
- word-break: break-all;
252
- }
253
-
254
- .toast {
255
- position: fixed;
256
- bottom: 2rem;
257
- left: 50%;
258
- transform: translateX(-50%) translateY(20px);
259
- background: var(--text-base);
260
- color: var(--bg-surface);
261
- padding: 0.75rem 1.5rem;
262
- border-radius: 50px;
263
- font-weight: 700;
264
- font-size: 0.9rem;
265
- display: flex;
266
- align-items: center;
267
- gap: 0.5rem;
268
-
269
- --toast-shadow: rgba(0, 0, 0, 0.2);
270
- --toast-shadow-y: 10px;
271
- --toast-shadow-blur: 30px;
272
-
273
- box-shadow: 0 var(--toast-shadow-y) var(--toast-shadow-blur) var(--toast-shadow);
274
- opacity: 0;
275
- pointer-events: none;
276
- transition: all 0.2s;
277
- z-index: 100;
278
- }
279
-
280
- .toast.show {
281
- opacity: 1;
282
- transform: translateX(-50%) translateY(0);
283
- }
284
-
285
- @media (max-width: 600px) {
286
- .card-section {
287
- padding: 1rem;
288
- }
289
-
290
- .drop-zone {
291
- min-height: 280px;
292
- }
293
- }
294
-
295
- @media (max-width: 768px) {
296
- .card-section {
297
- padding: 1.5rem;
298
- }
299
-
300
- .drop-zone {
301
- min-height: 250px;
302
- }
303
-
304
- textarea {
305
- height: 120px;
306
- }
307
- }
308
- </style>
309
8
 
310
9
  <div class="base64-container animate-in">
311
10
  <div class="base64-card">
@@ -41,3 +41,5 @@ export const imagenBase64: ConvertersToolEntry<ImageToBase64UI> = {
41
41
  zh: () => import('./i18n/zh').then((m) => m.content),
42
42
  },
43
43
  };
44
+
45
+ export { bibliography } from './bibliography';
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { ImagenBase64LocaleContent } from '../index';
2
3
  import { generateSchemas } from '../../../shared/logic/schemas';
3
4
  import type { ImageToBase64UI } from '../index';
@@ -60,17 +61,6 @@ const howTo: ImagenBase64LocaleContent['howTo'] = [
60
61
  },
61
62
  ];
62
63
 
63
- const bibliography: ImagenBase64LocaleContent['bibliography'] = [
64
- {
65
- name: 'MDN Web Docs: Data URIs',
66
- url: 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URLs',
67
- },
68
- {
69
- name: 'Base64 Kodierung RFC 4648',
70
- url: 'https://datatracker.ietf.org/doc/html/rfc4648',
71
- },
72
- ];
73
-
74
64
  const seo: ImagenBase64LocaleContent['seo'] = [
75
65
  {
76
66
  type: 'title',
@@ -79,7 +69,7 @@ const seo: ImagenBase64LocaleContent['seo'] = [
79
69
  },
80
70
  {
81
71
  type: 'paragraph',
82
- html: 'Base64 ist eine Kodierungstechnik, die Binärdaten wie ein Bild in eine reine ASCII-Textzeichenfolge transformiert. Das Ergebnis ist eine Data URI: eine in sich geschlossene URL, die mit <code>data:image/png;base64,...</code> beginnt und das gesamte kodierte Bild enthält. Durch das direkte Einbetten dieses Codes in Ihr HTML, CSS oder JSON wird das Bild ohne zusätzliche HTTP-Anfrage an den Server geladen null Netzwerklatenz, sofortiges Laden.',
72
+ html: 'Base64 ist eine Kodierungstechnik, die Binärdaten - wie ein Bild - in eine reine ASCII-Textzeichenfolge transformiert. Das Ergebnis ist eine Data URI: eine in sich geschlossene URL, die mit <code>data:image/png;base64,...</code> beginnt und das gesamte kodierte Bild enthält. Durch das direkte Einbetten dieses Codes in Ihr HTML, CSS oder JSON wird das Bild ohne zusätzliche HTTP-Anfrage an den Server geladen - null Netzwerklatenz, sofortiges Laden.',
83
73
  },
84
74
  {
85
75
  type: 'title',
@@ -88,7 +78,7 @@ const seo: ImagenBase64LocaleContent['seo'] = [
88
78
  },
89
79
  {
90
80
  type: 'paragraph',
91
- html: 'Das Hauptargument für Base64 ist die Eliminierung von Netzwerkanfragen. Jedes Bild auf einer Webseite bedeutet eine HTTP-Anfrage mit dem entsprechenden Overhead für Verbindung, DNS, TLS-Handshake und Latenz. Bei sehr kleinen, kritischen Bildern dem Hauptlogo der Anwendung, dem Favicon oder einem UI-Icon eliminiert das Einbetten in Base64 in CSS oder HTML diese Kosten und garantiert eine sofortige Anzeige, noch bevor der Browser etwas zwischengespeichert hat.',
81
+ html: 'Das Hauptargument für Base64 ist die Eliminierung von Netzwerkanfragen. Jedes Bild auf einer Webseite bedeutet eine HTTP-Anfrage mit dem entsprechenden Overhead für Verbindung, DNS, TLS-Handshake und Latenz. Bei sehr kleinen, kritischen Bildern - dem Hauptlogo der Anwendung, dem Favicon oder einem UI-Icon - eliminiert das Einbetten in Base64 in CSS oder HTML diese Kosten und garantiert eine sofortige Anzeige, noch bevor der Browser etwas zwischengespeichert hat.',
92
82
  },
93
83
  {
94
84
  type: 'paragraph',
@@ -117,12 +107,12 @@ const seo: ImagenBase64LocaleContent['seo'] = [
117
107
  },
118
108
  {
119
109
  type: 'paragraph',
120
- html: 'Wenn Sie ein Bild auswählen oder ziehen, liest die <code>FileReader</code>-API des Browsers es direkt von der Festplatte als Binärdaten in den RAM. Die Methode <code>readAsDataURL()</code> konvertiert diese Binärbytes mithilfe des RFC 4648-Algorithmus in ihre Base64-Darstellung alle 3 Bytes der Originaldaten werden als 4 ASCII-Zeichen aus dem Base64-Alphabet dargestellt. Das Ergebnis enthält den automatisch erkannten korrekten MIME-Typ.',
110
+ html: 'Wenn Sie ein Bild auswählen oder ziehen, liest die <code>FileReader</code>-API des Browsers es direkt von der Festplatte als Binärdaten in den RAM. Die Methode <code>readAsDataURL()</code> konvertiert diese Binärbytes mithilfe des RFC 4648-Algorithmus in ihre Base64-Darstellung - alle 3 Bytes der Originaldaten werden als 4 ASCII-Zeichen aus dem Base64-Alphabet dargestellt. Das Ergebnis enthält den automatisch erkannten korrekten MIME-Typ.',
121
111
  },
122
112
  {
123
113
  type: 'tip',
124
114
  title: 'Nur für kleine Bilder verwenden (unter 10 KB)',
125
- html: 'Base64 erhöht die Dateigröße um etwa 33 %: Ein 10 KB großes Bild wird zu ca. 13,3 KB Text. Bei kleinen Icons und Logos ist dieser Aufwand minimal, und die Eliminierung der HTTP-Anfrage gleicht dies aus. Bei Fotos oder großen Bildern ist der Größen-Overhead signifikant verwenden Sie für große Bilder immer ein CDN.',
115
+ html: 'Base64 erhöht die Dateigröße um etwa 33 %: Ein 10 KB großes Bild wird zu ca. 13,3 KB Text. Bei kleinen Icons und Logos ist dieser Aufwand minimal, und die Eliminierung der HTTP-Anfrage gleicht dies aus. Bei Fotos oder großen Bildern ist der Größen-Overhead signifikant - verwenden Sie für große Bilder immer ein CDN.',
126
116
  },
127
117
  {
128
118
  type: 'title',
@@ -131,7 +121,7 @@ const seo: ImagenBase64LocaleContent['seo'] = [
131
121
  },
132
122
  {
133
123
  type: 'tip',
134
- title: 'Vermeiden Sie Base64 für große Bilder nutzen Sie ein CDN',
124
+ title: 'Vermeiden Sie Base64 für große Bilder: nutzen Sie ein CDN',
135
125
  html: 'Wenn Sie Bilder haben, die größer als 10-20 KB sind, schadet Base64 der Performance: Es bläht die HTML/CSS-Größe auf, verhindert, dass der Browser das Bild unabhängig zwischenspeichert, und blockiert das Rendering, während der Parser den riesigen String verarbeitet. Für große Bilder sollten Sie immer ein CDN mit entsprechenden Cache-Headern verwenden.',
136
126
  },
137
127
  {
@@ -141,7 +131,7 @@ const seo: ImagenBase64LocaleContent['seo'] = [
141
131
  },
142
132
  {
143
133
  type: 'paragraph',
144
- html: 'Data URIs sind mit 100 % der modernen Browser und den meisten E-Mail-Clients kompatibel. Unser Tool verarbeitet alles lokal über die FileReader-API Ihre Bilder verlassen niemals Ihr Gerät. Damit eignet es sich für Unternehmensbilder, private Screenshots oder alle vertraulichen visuellen Inhalte, die Sie in Base64 konvertieren müssen.',
134
+ html: 'Data URIs sind mit 100 % der modernen Browser und den meisten E-Mail-Clients kompatibel. Unser Tool verarbeitet alles lokal über die FileReader-API - Ihre Bilder verlassen niemals Ihr Gerät. Damit eignet es sich für Unternehmensbilder, private Screenshots oder alle vertraulichen visuellen Inhalte, die Sie in Base64 konvertieren müssen.',
145
135
  },
146
136
  {
147
137
  type: 'title',
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { ImagenBase64LocaleContent } from '../index';
2
3
  import { generateSchemas } from '../../../shared/logic/schemas';
3
4
  import type { ImageToBase64UI } from '../index';
@@ -60,17 +61,6 @@ const howTo: ImagenBase64LocaleContent['howTo'] = [
60
61
  },
61
62
  ];
62
63
 
63
- const bibliography: ImagenBase64LocaleContent['bibliography'] = [
64
- {
65
- name: 'MDN Web Docs: Data URIs',
66
- url: 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URLs',
67
- },
68
- {
69
- name: 'Base64 Encoding RFC 4648',
70
- url: 'https://datatracker.ietf.org/doc/html/rfc4648',
71
- },
72
- ];
73
-
74
64
  const seo: ImagenBase64LocaleContent['seo'] = [
75
65
  {
76
66
  type: 'title',
@@ -79,7 +69,7 @@ const seo: ImagenBase64LocaleContent['seo'] = [
79
69
  },
80
70
  {
81
71
  type: 'paragraph',
82
- html: 'Base64 is an encoding technique that transforms binary data like an image into a pure ASCII text string. The result is a Data URI: a self-contained URL that starts with <code>data:image/png;base64,...</code> and contains the entire encoded image. By embedding this code directly in your HTML, CSS or JSON, the image loads without any additional HTTP request to the server zero network latency, instant loading.',
72
+ html: 'Base64 is an encoding technique that transforms binary data - like an image - into a pure ASCII text string. The result is a Data URI: a self-contained URL that starts with <code>data:image/png;base64,...</code> and contains the entire encoded image. By embedding this code directly in your HTML, CSS or JSON, the image loads without any additional HTTP request to the server - zero network latency, instant loading.',
83
73
  },
84
74
  {
85
75
  type: 'title',
@@ -88,7 +78,7 @@ const seo: ImagenBase64LocaleContent['seo'] = [
88
78
  },
89
79
  {
90
80
  type: 'paragraph',
91
- html: 'The main argument for Base64 is the elimination of network requests. Every image on a web page means an HTTP request with its overhead of connection, DNS, TLS handshake and latency. For very small critical images the main application logo, favicon, a UI icon embedding them in Base64 in the CSS or HTML eliminates that cost and guarantees they display instantly even before the browser has cached anything.',
81
+ html: 'The main argument for Base64 is the elimination of network requests. Every image on a web page means an HTTP request with its overhead of connection, DNS, TLS handshake and latency. For very small critical images - the main application logo, favicon, a UI icon - embedding them in Base64 in the CSS or HTML eliminates that cost and guarantees they display instantly even before the browser has cached anything.',
92
82
  },
93
83
  {
94
84
  type: 'paragraph',
@@ -117,12 +107,12 @@ const seo: ImagenBase64LocaleContent['seo'] = [
117
107
  },
118
108
  {
119
109
  type: 'paragraph',
120
- html: 'When you select or drag an image, the browser\'s <code>FileReader</code> API reads it directly from disk as binary data in RAM. The <code>readAsDataURL()</code> method converts those binary bytes to their Base64 representation using the RFC 4648 algorithm every 3 bytes of original data are represented as 4 ASCII characters from the Base64 alphabet. The result includes the automatically detected correct MIME type.',
110
+ html: 'When you select or drag an image, the browser\'s <code>FileReader</code> API reads it directly from disk as binary data in RAM. The <code>readAsDataURL()</code> method converts those binary bytes to their Base64 representation using the RFC 4648 algorithm - every 3 bytes of original data are represented as 4 ASCII characters from the Base64 alphabet. The result includes the automatically detected correct MIME type.',
121
111
  },
122
112
  {
123
113
  type: 'tip',
124
114
  title: 'Use it only for small images (under 10 KB)',
125
- html: 'Base64 increases file size by approximately 33%: a 10 KB image becomes ~13.3 KB of text. For small icons and logos this cost is minimal and the elimination of the HTTP request compensates for it. For photographs or large images, the size overhead is significant always use a CDN for large images.',
115
+ html: 'Base64 increases file size by approximately 33%: a 10 KB image becomes ~13.3 KB of text. For small icons and logos this cost is minimal and the elimination of the HTTP request compensates for it. For photographs or large images, the size overhead is significant - always use a CDN for large images.',
126
116
  },
127
117
  {
128
118
  type: 'title',
@@ -131,7 +121,7 @@ const seo: ImagenBase64LocaleContent['seo'] = [
131
121
  },
132
122
  {
133
123
  type: 'tip',
134
- title: 'Avoid Base64 for large images use a CDN instead',
124
+ title: 'Avoid Base64 for large images: use a CDN instead',
135
125
  html: 'If you have images larger than 10-20 KB, Base64 hurts performance: it inflates HTML/CSS size, prevents the browser from caching the image independently, and blocks rendering while the parser processes the giant string. For large images, always serve from a CDN with appropriate cache headers.',
136
126
  },
137
127
  {
@@ -141,7 +131,7 @@ const seo: ImagenBase64LocaleContent['seo'] = [
141
131
  },
142
132
  {
143
133
  type: 'paragraph',
144
- html: 'Data URIs are compatible with 100% of modern browsers and most email clients. Our tool processes everything locally via the FileReader API your images never leave your device. This makes it suitable for corporate images, private screenshots or any confidential visual content that you need to convert to Base64.',
134
+ html: 'Data URIs are compatible with 100% of modern browsers and most email clients. Our tool processes everything locally via the FileReader API - your images never leave your device. This makes it suitable for corporate images, private screenshots or any confidential visual content that you need to convert to Base64.',
145
135
  },
146
136
  {
147
137
  type: 'title',
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { ImagenBase64LocaleContent } from '../index';
2
3
  import { generateSchemas } from '../../../shared/logic/schemas';
3
4
  import type { ImageToBase64UI } from '../index';
@@ -60,17 +61,6 @@ const howTo: ImagenBase64LocaleContent['howTo'] = [
60
61
  },
61
62
  ];
62
63
 
63
- const bibliography: ImagenBase64LocaleContent['bibliography'] = [
64
- {
65
- name: 'MDN Web Docs: Data URIs',
66
- url: 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URLs',
67
- },
68
- {
69
- name: 'Base64 Encoding RFC 4648',
70
- url: 'https://datatracker.ietf.org/doc/html/rfc4648',
71
- },
72
- ];
73
-
74
64
  const seo: ImagenBase64LocaleContent['seo'] = [
75
65
  {
76
66
  type: 'title',
@@ -79,7 +69,7 @@ const seo: ImagenBase64LocaleContent['seo'] = [
79
69
  },
80
70
  {
81
71
  type: 'paragraph',
82
- html: 'Base64 es una técnica de codificación que transforma datos binarios como una imagen en una cadena de texto ASCII puro. El resultado es un Data URI: una URL auto-contenida que empieza por <code>data:image/png;base64,...</code> y contiene toda la imagen codificada. Al incrustar este código directamente en tu HTML, CSS o JSON, la imagen se carga sin ninguna petición HTTP adicional al servidor cero latencia de red, carga instantánea.',
72
+ html: 'Base64 es una técnica de codificación que transforma datos binarios - como una imagen - en una cadena de texto ASCII puro. El resultado es un Data URI: una URL auto-contenida que empieza por <code>data:image/png;base64,...</code> y contiene toda la imagen codificada. Al incrustar este código directamente en tu HTML, CSS o JSON, la imagen se carga sin ninguna petición HTTP adicional al servidor - cero latencia de red, carga instantánea.',
83
73
  },
84
74
  {
85
75
  type: 'title',
@@ -88,7 +78,7 @@ const seo: ImagenBase64LocaleContent['seo'] = [
88
78
  },
89
79
  {
90
80
  type: 'paragraph',
91
- html: 'El principal argumento a favor de Base64 es la eliminación de peticiones de red. Cada imagen en una página web supone una petición HTTP con su overhead de conexión, DNS, handshake TLS y latencia. Para imágenes críticas muy pequeñas el logo principal de la aplicación, el favicon, un icono de UI incrustarlas en Base64 en el CSS o HTML elimina ese coste y garantiza que se muestren de forma instantánea incluso antes de que el navegador haya cacheado nada.',
81
+ html: 'El principal argumento a favor de Base64 es la eliminación de peticiones de red. Cada imagen en una página web supone una petición HTTP con su overhead de conexión, DNS, handshake TLS y latencia. Para imágenes críticas muy pequeñas - el logo principal de la aplicación, el favicon, un icono de UI - incrustarlas en Base64 en el CSS o HTML elimina ese coste y garantiza que se muestren de forma instantánea incluso antes de que el navegador haya cacheado nada.',
92
82
  },
93
83
  {
94
84
  type: 'paragraph',
@@ -117,12 +107,12 @@ const seo: ImagenBase64LocaleContent['seo'] = [
117
107
  },
118
108
  {
119
109
  type: 'paragraph',
120
- html: 'Cuando seleccionas o arrastras una imagen, la API <code>FileReader</code> del navegador la lee directamente desde el disco como datos binarios en memoria RAM. El método <code>readAsDataURL()</code> convierte esos bytes binarios a su representación Base64 usando el algoritmo de RFC 4648 cada 3 bytes de datos originales se representan como 4 caracteres ASCII del alfabeto Base64. El resultado incluye el tipo MIME correcto detectado automáticamente.',
110
+ html: 'Cuando seleccionas o arrastras una imagen, la API <code>FileReader</code> del navegador la lee directamente desde el disco como datos binarios en memoria RAM. El método <code>readAsDataURL()</code> convierte esos bytes binarios a su representación Base64 usando el algoritmo de RFC 4648 - cada 3 bytes de datos originales se representan como 4 caracteres ASCII del alfabeto Base64. El resultado incluye el tipo MIME correcto detectado automáticamente.',
121
111
  },
122
112
  {
123
113
  type: 'tip',
124
114
  title: 'Úsalo solo para imágenes pequeñas (menos de 10 KB)',
125
- html: 'Base64 aumenta el tamaño del archivo en aproximadamente un 33%: una imagen de 10 KB se convierte en ~13.3 KB de texto. Para iconos y logos pequeños este coste es mínimo y la eliminación de la petición HTTP lo compensa. Para fotografías o imágenes grandes, el overhead de tamaño es significativo usa siempre un CDN para imágenes grandes.',
115
+ html: 'Base64 aumenta el tamaño del archivo en aproximadamente un 33%: una imagen de 10 KB se convierte en ~13.3 KB de texto. Para iconos y logos pequeños este coste es mínimo y la eliminación de la petición HTTP lo compensa. Para fotografías o imágenes grandes, el overhead de tamaño es significativo - usa siempre un CDN para imágenes grandes.',
126
116
  },
127
117
  {
128
118
  type: 'title',
@@ -131,7 +121,7 @@ const seo: ImagenBase64LocaleContent['seo'] = [
131
121
  },
132
122
  {
133
123
  type: 'tip',
134
- title: 'Evita Base64 para imágenes grandes usa un CDN',
124
+ title: 'Evita Base64 para imágenes grandes: usa un CDN',
135
125
  html: 'Si tienes imágenes de más de 10-20 KB, Base64 perjudica el rendimiento: infla el tamaño del HTML/CSS, impide que el navegador cachee la imagen de forma independiente, y bloquea el render mientras el parser procesa el string gigante. Para imágenes grandes, sirve siempre desde un CDN con headers de caché apropiados.',
136
126
  },
137
127
  {
@@ -141,7 +131,7 @@ const seo: ImagenBase64LocaleContent['seo'] = [
141
131
  },
142
132
  {
143
133
  type: 'paragraph',
144
- html: 'Los Data URIs son compatibles con el 100% de los navegadores modernos y la mayoría de clientes de email. Nuestra herramienta procesa todo localmente mediante la API FileReader tus imágenes nunca salen de tu dispositivo. Esto la hace adecuada para imágenes corporativas, capturas de pantalla privadas o cualquier contenido visual confidencial que necesites convertir a Base64.',
134
+ html: 'Los Data URIs son compatibles con el 100% de los navegadores modernos y la mayoría de clientes de email. Nuestra herramienta procesa todo localmente mediante la API FileReader - tus imágenes nunca salen de tu dispositivo. Esto la hace adecuada para imágenes corporativas, capturas de pantalla privadas o cualquier contenido visual confidencial que necesites convertir a Base64.',
145
135
  },
146
136
  {
147
137
  type: 'title',
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { ImagenBase64LocaleContent } from '../index';
2
3
  import { generateSchemas } from '../../../shared/logic/schemas';
3
4
  import type { ImageToBase64UI } from '../index';
@@ -52,7 +53,7 @@ const howTo: ImagenBase64LocaleContent['howTo'] = [
52
53
  },
53
54
  {
54
55
  name: 'Copiez le code généré',
55
- text: 'Vous verrez deux zones de texte : le Data URI complet (prêt à utiliser dans src="" ou CSS) et le Base64 pur pour d\'autres utilisations.',
56
+ text: 'Vous verrez deux zones de texte: le Data URI complet (prêt à utiliser dans src="" ou CSS) et le Base64 pur pour d\'autres utilisations.',
56
57
  },
57
58
  {
58
59
  name: 'Utilisez le code dans votre projet',
@@ -60,26 +61,15 @@ const howTo: ImagenBase64LocaleContent['howTo'] = [
60
61
  },
61
62
  ];
62
63
 
63
- const bibliography: ImagenBase64LocaleContent['bibliography'] = [
64
- {
65
- name: 'MDN Web Docs: Data URIs',
66
- url: 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URLs',
67
- },
68
- {
69
- name: 'Base64 Encoding RFC 4648',
70
- url: 'https://datatracker.ietf.org/doc/html/rfc4648',
71
- },
72
- ];
73
-
74
64
  const seo: ImagenBase64LocaleContent['seo'] = [
75
65
  {
76
66
  type: 'title',
77
- text: 'Convertisseur Image vers Base64 : Intégrez des Images Sans Requêtes HTTP',
67
+ text: 'Convertisseur Image vers Base64: Intégrez des Images Sans Requêtes HTTP',
78
68
  level: 2,
79
69
  },
80
70
  {
81
71
  type: 'paragraph',
82
- html: 'Base64 est une technique d\'encodage qui transforme des données binaires comme une image en une chaîne de texte ASCII pur. Le résultat est un Data URI : une URL auto-contenue qui commence par <code>data:image/png;base64,...</code> et contient l\'image entière encodée. En intégrant ce code directement dans votre HTML, CSS ou JSON, l\'image se charge sans aucune requête HTTP supplémentaire au serveur zéro latence réseau, chargement instantané.',
72
+ html: 'Base64 est une technique d\'encodage qui transforme des données binaires - comme une image - en une chaîne de texte ASCII pur. Le résultat est un Data URI: une URL auto-contenue qui commence par <code>data:image/png;base64,...</code> et contient l\'image entière encodée. En intégrant ce code directement dans votre HTML, CSS ou JSON, l\'image se charge sans aucune requête HTTP supplémentaire au serveur - zéro latence réseau, chargement instantané.',
83
73
  },
84
74
  {
85
75
  type: 'title',
@@ -88,11 +78,11 @@ const seo: ImagenBase64LocaleContent['seo'] = [
88
78
  },
89
79
  {
90
80
  type: 'paragraph',
91
- html: 'Le principal argument en faveur de Base64 est l\'élimination des requêtes réseau. Chaque image sur une page web représente une requête HTTP avec son overhead de connexion, DNS, handshake TLS et latence. Pour les très petites images critiques le logo principal de l\'application, le favicon, une icône d\'interface les intégrer en Base64 dans le CSS ou HTML élimine ce coût et garantit leur affichage instantané même avant que le navigateur n\'ait rien mis en cache.',
81
+ html: 'Le principal argument en faveur de Base64 est l\'élimination des requêtes réseau. Chaque image sur une page web représente une requête HTTP avec son overhead de connexion, DNS, handshake TLS et latence. Pour les très petites images critiques - le logo principal de l\'application, le favicon, une icône d\'interface - les intégrer en Base64 dans le CSS ou HTML élimine ce coût et garantit leur affichage instantané même avant que le navigateur n\'ait rien mis en cache.',
92
82
  },
93
83
  {
94
84
  type: 'paragraph',
95
- html: 'Cette technique est particulièrement puissante dans les applications SPA (Single Page Applications) où le bundle JavaScript et CSS est généré au moment de la compilation : intégrer de petites images dans le bundle garantit qu\'elles se chargent avec le code sans requêtes supplémentaires. Elle est aussi indispensable pour les emails HTML, où les clients de messagerie bloquent les images externes mais affichent toujours les Data URIs intégrés.',
85
+ html: 'Cette technique est particulièrement puissante dans les applications SPA (Single Page Applications) où le bundle JavaScript et CSS est généré au moment de la compilation: intégrer de petites images dans le bundle garantit qu\'elles se chargent avec le code sans requêtes supplémentaires. Elle est aussi indispensable pour les emails HTML, où les clients de messagerie bloquent les images externes mais affichent toujours les Data URIs intégrés.',
96
86
  },
97
87
  {
98
88
  type: 'title',
@@ -103,11 +93,11 @@ const seo: ImagenBase64LocaleContent['seo'] = [
103
93
  type: 'list',
104
94
  icon: 'mdi:check-circle',
105
95
  items: [
106
- 'HTML inline : <code>&lt;img src="data:image/png;base64,..."&gt;</code> pour les icônes critiques.',
107
- 'CSS background : <code>background-image: url("data:image/svg+xml;base64,...")</code> pour les SVGs d\'interface.',
108
- 'JSON et APIs REST : envoi d\'images comme données texte dans les payloads JSON.',
109
- 'Emails HTML : images intégrées qui s\'affichent même quand le client bloque les URLs externes.',
110
- 'Intégration SVG : intégrer des images raster dans des fichiers SVG comme données inline.',
96
+ 'HTML inline: <code>&lt;img src="data:image/png;base64,..."&gt;</code> pour les icônes critiques.',
97
+ 'CSS background: <code>background-image: url("data:image/svg+xml;base64,...")</code> pour les SVGs d\'interface.',
98
+ 'JSON et APIs REST: envoi d\'images comme données texte dans les payloads JSON.',
99
+ 'Emails HTML: images intégrées qui s\'affichent même quand le client bloque les URLs externes.',
100
+ 'Intégration SVG: intégrer des images raster dans des fichiers SVG comme données inline.',
111
101
  ],
112
102
  },
113
103
  {
@@ -117,12 +107,12 @@ const seo: ImagenBase64LocaleContent['seo'] = [
117
107
  },
118
108
  {
119
109
  type: 'paragraph',
120
- html: 'Lorsque vous sélectionnez ou faites glisser une image, l\'API <code>FileReader</code> du navigateur la lit directement depuis le disque comme données binaires en RAM. La méthode <code>readAsDataURL()</code> convertit ces octets binaires en leur représentation Base64 selon l\'algorithme RFC 4648 chaque 3 octets de données originales sont représentés par 4 caractères ASCII de l\'alphabet Base64. Le résultat inclut le type MIME correct détecté automatiquement.',
110
+ html: 'Lorsque vous sélectionnez ou faites glisser une image, l\'API <code>FileReader</code> du navigateur la lit directement depuis le disque comme données binaires en RAM. La méthode <code>readAsDataURL()</code> convertit ces octets binaires en leur représentation Base64 selon l\'algorithme RFC 4648 - chaque 3 octets de données originales sont représentés par 4 caractères ASCII de l\'alphabet Base64. Le résultat inclut le type MIME correct détecté automatiquement.',
121
111
  },
122
112
  {
123
113
  type: 'tip',
124
114
  title: 'Utilisez',
125
- html: 'Base64 augmente la taille du fichier d\'environ 33% : une image de 10 Ko devient ~13,3 Ko de texte. Pour les petites icônes et logos, ce coût est minimal et l\'élimination de la requête HTTP le compense. Pour les photographies ou grandes images, le surcoût de taille est significatif utilisez toujours un CDN pour les grandes images.',
115
+ html: 'Base64 augmente la taille du fichier d\'environ 33%: une image de 10 Ko devient ~13,3 Ko de texte. Pour les petites icônes et logos, ce coût est minimal et l\'élimination de la requête HTTP le compense. Pour les photographies ou grandes images, le surcoût de taille est significatif - utilisez toujours un CDN pour les grandes images.',
126
116
  },
127
117
  {
128
118
  type: 'title',
@@ -131,8 +121,8 @@ const seo: ImagenBase64LocaleContent['seo'] = [
131
121
  },
132
122
  {
133
123
  type: 'tip',
134
- title: 'Évitez Base64 pour les grandes images utilisez un CDN',
135
- html: 'Si vous avez des images de plus de 10-20 Ko, Base64 nuit aux performances : il gonfle la taille du HTML/CSS, empêche le navigateur de mettre l\'image en cache de façon indépendante, et bloque le rendu pendant que le parseur traite la chaîne géante. Pour les grandes images, servez toujours depuis un CDN avec des en-têtes de cache appropriés.',
124
+ title: 'Évitez Base64 pour les grandes images: utilisez un CDN',
125
+ html: 'Si vous avez des images de plus de 10-20 Ko, Base64 nuit aux performances: il gonfle la taille du HTML/CSS, empêche le navigateur de mettre l\'image en cache de façon indépendante, et bloque le rendu pendant que le parseur traite la chaîne géante. Pour les grandes images, servez toujours depuis un CDN avec des en-têtes de cache appropriés.',
136
126
  },
137
127
  {
138
128
  type: 'title',
@@ -141,11 +131,11 @@ const seo: ImagenBase64LocaleContent['seo'] = [
141
131
  },
142
132
  {
143
133
  type: 'paragraph',
144
- html: 'Les Data URIs sont compatibles avec 100% des navigateurs modernes et la plupart des clients de messagerie. Notre outil traite tout localement via l\'API FileReader vos images ne quittent jamais votre appareil. Cela le rend adapté aux images d\'entreprise, aux captures d\'écran privées ou à tout contenu visuel confidentiel que vous devez convertir en Base64.',
134
+ html: 'Les Data URIs sont compatibles avec 100% des navigateurs modernes et la plupart des clients de messagerie. Notre outil traite tout localement via l\'API FileReader - vos images ne quittent jamais votre appareil. Cela le rend adapté aux images d\'entreprise, aux captures d\'écran privées ou à tout contenu visuel confidentiel que vous devez convertir en Base64.',
145
135
  },
146
136
  {
147
137
  type: 'title',
148
- text: 'Conclusion : L\'outil d\'intégration le plus rapide et le plus privé',
138
+ text: 'Conclusion: L\'outil d\'intégration le plus rapide et le plus privé',
149
139
  level: 3,
150
140
  },
151
141
  {