@jjlmoya/utils-converters 1.7.0 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (346) hide show
  1. package/package.json +60 -59
  2. package/src/shared/logic/schemas.ts +57 -0
  3. package/src/tests/faq_count.test.ts +13 -4
  4. package/src/tests/i18n_coverage.test.ts +36 -0
  5. package/src/tests/locale_completeness.test.ts +42 -0
  6. package/src/tests/no_h1_in_components.test.ts +48 -0
  7. package/src/tests/schemas_fulfillment.test.ts +23 -0
  8. package/src/tests/seo_length.test.ts +1 -1
  9. package/src/tests/slug_uniqueness.test.ts +81 -0
  10. package/src/tests/title_quality.test.ts +55 -0
  11. package/src/tool/avifAJpg/i18n/de.ts +178 -0
  12. package/src/tool/avifAJpg/i18n/en.ts +2 -12
  13. package/src/tool/avifAJpg/i18n/es.ts +2 -12
  14. package/src/tool/avifAJpg/i18n/fr.ts +2 -12
  15. package/src/tool/avifAJpg/i18n/id.ts +178 -0
  16. package/src/tool/avifAJpg/i18n/it.ts +178 -0
  17. package/src/tool/avifAJpg/i18n/ja.ts +178 -0
  18. package/src/tool/avifAJpg/i18n/ko.ts +178 -0
  19. package/src/tool/avifAJpg/i18n/nl.ts +178 -0
  20. package/src/tool/avifAJpg/i18n/pl.ts +178 -0
  21. package/src/tool/avifAJpg/i18n/pt.ts +178 -0
  22. package/src/tool/avifAJpg/i18n/ru.ts +178 -0
  23. package/src/tool/avifAJpg/i18n/sv.ts +178 -0
  24. package/src/tool/avifAJpg/i18n/tr.ts +178 -0
  25. package/src/tool/avifAJpg/i18n/zh.ts +178 -0
  26. package/src/tool/avifAJpg/index.ts +13 -1
  27. package/src/tool/avifAPng/i18n/de.ts +178 -0
  28. package/src/tool/avifAPng/i18n/en.ts +2 -12
  29. package/src/tool/avifAPng/i18n/es.ts +2 -12
  30. package/src/tool/avifAPng/i18n/fr.ts +2 -12
  31. package/src/tool/avifAPng/i18n/id.ts +178 -0
  32. package/src/tool/avifAPng/i18n/it.ts +178 -0
  33. package/src/tool/avifAPng/i18n/ja.ts +178 -0
  34. package/src/tool/avifAPng/i18n/ko.ts +178 -0
  35. package/src/tool/avifAPng/i18n/nl.ts +178 -0
  36. package/src/tool/avifAPng/i18n/pl.ts +178 -0
  37. package/src/tool/avifAPng/i18n/pt.ts +178 -0
  38. package/src/tool/avifAPng/i18n/ru.ts +178 -0
  39. package/src/tool/avifAPng/i18n/sv.ts +178 -0
  40. package/src/tool/avifAPng/i18n/tr.ts +178 -0
  41. package/src/tool/avifAPng/i18n/zh.ts +178 -0
  42. package/src/tool/avifAPng/index.ts +13 -1
  43. package/src/tool/avifAWebp/i18n/de.ts +178 -0
  44. package/src/tool/avifAWebp/i18n/en.ts +2 -12
  45. package/src/tool/avifAWebp/i18n/es.ts +2 -12
  46. package/src/tool/avifAWebp/i18n/fr.ts +2 -12
  47. package/src/tool/avifAWebp/i18n/id.ts +178 -0
  48. package/src/tool/avifAWebp/i18n/it.ts +178 -0
  49. package/src/tool/avifAWebp/i18n/ja.ts +178 -0
  50. package/src/tool/avifAWebp/i18n/ko.ts +178 -0
  51. package/src/tool/avifAWebp/i18n/nl.ts +178 -0
  52. package/src/tool/avifAWebp/i18n/pl.ts +178 -0
  53. package/src/tool/avifAWebp/i18n/pt.ts +178 -0
  54. package/src/tool/avifAWebp/i18n/ru.ts +178 -0
  55. package/src/tool/avifAWebp/i18n/sv.ts +178 -0
  56. package/src/tool/avifAWebp/i18n/tr.ts +178 -0
  57. package/src/tool/avifAWebp/i18n/zh.ts +178 -0
  58. package/src/tool/avifAWebp/index.ts +13 -1
  59. package/src/tool/bmpAJpg/i18n/de.ts +178 -0
  60. package/src/tool/bmpAJpg/i18n/en.ts +2 -12
  61. package/src/tool/bmpAJpg/i18n/es.ts +2 -12
  62. package/src/tool/bmpAJpg/i18n/fr.ts +2 -12
  63. package/src/tool/bmpAJpg/i18n/id.ts +178 -0
  64. package/src/tool/bmpAJpg/i18n/it.ts +178 -0
  65. package/src/tool/bmpAJpg/i18n/ja.ts +178 -0
  66. package/src/tool/bmpAJpg/i18n/ko.ts +178 -0
  67. package/src/tool/bmpAJpg/i18n/nl.ts +178 -0
  68. package/src/tool/bmpAJpg/i18n/pl.ts +178 -0
  69. package/src/tool/bmpAJpg/i18n/pt.ts +178 -0
  70. package/src/tool/bmpAJpg/i18n/ru.ts +178 -0
  71. package/src/tool/bmpAJpg/i18n/sv.ts +178 -0
  72. package/src/tool/bmpAJpg/i18n/tr.ts +178 -0
  73. package/src/tool/bmpAJpg/i18n/zh.ts +178 -0
  74. package/src/tool/bmpAJpg/index.ts +13 -1
  75. package/src/tool/bmpAPng/i18n/de.ts +177 -0
  76. package/src/tool/bmpAPng/i18n/en.ts +2 -12
  77. package/src/tool/bmpAPng/i18n/es.ts +2 -12
  78. package/src/tool/bmpAPng/i18n/fr.ts +2 -12
  79. package/src/tool/bmpAPng/i18n/id.ts +177 -0
  80. package/src/tool/bmpAPng/i18n/it.ts +177 -0
  81. package/src/tool/bmpAPng/i18n/ja.ts +177 -0
  82. package/src/tool/bmpAPng/i18n/ko.ts +177 -0
  83. package/src/tool/bmpAPng/i18n/nl.ts +177 -0
  84. package/src/tool/bmpAPng/i18n/pl.ts +177 -0
  85. package/src/tool/bmpAPng/i18n/pt.ts +177 -0
  86. package/src/tool/bmpAPng/i18n/ru.ts +177 -0
  87. package/src/tool/bmpAPng/i18n/sv.ts +177 -0
  88. package/src/tool/bmpAPng/i18n/tr.ts +177 -0
  89. package/src/tool/bmpAPng/i18n/zh.ts +177 -0
  90. package/src/tool/bmpAPng/index.ts +13 -1
  91. package/src/tool/bmpAWebp/i18n/de.ts +178 -0
  92. package/src/tool/bmpAWebp/i18n/en.ts +2 -12
  93. package/src/tool/bmpAWebp/i18n/es.ts +2 -12
  94. package/src/tool/bmpAWebp/i18n/fr.ts +2 -12
  95. package/src/tool/bmpAWebp/i18n/id.ts +178 -0
  96. package/src/tool/bmpAWebp/i18n/it.ts +178 -0
  97. package/src/tool/bmpAWebp/i18n/ja.ts +178 -0
  98. package/src/tool/bmpAWebp/i18n/ko.ts +178 -0
  99. package/src/tool/bmpAWebp/i18n/nl.ts +178 -0
  100. package/src/tool/bmpAWebp/i18n/pl.ts +178 -0
  101. package/src/tool/bmpAWebp/i18n/pt.ts +178 -0
  102. package/src/tool/bmpAWebp/i18n/ru.ts +178 -0
  103. package/src/tool/bmpAWebp/i18n/sv.ts +178 -0
  104. package/src/tool/bmpAWebp/i18n/tr.ts +178 -0
  105. package/src/tool/bmpAWebp/i18n/zh.ts +178 -0
  106. package/src/tool/bmpAWebp/index.ts +13 -1
  107. package/src/tool/gifAJpg/i18n/de.ts +178 -0
  108. package/src/tool/gifAJpg/i18n/en.ts +2 -12
  109. package/src/tool/gifAJpg/i18n/es.ts +2 -12
  110. package/src/tool/gifAJpg/i18n/fr.ts +2 -12
  111. package/src/tool/gifAJpg/i18n/id.ts +178 -0
  112. package/src/tool/gifAJpg/i18n/it.ts +178 -0
  113. package/src/tool/gifAJpg/i18n/ja.ts +178 -0
  114. package/src/tool/gifAJpg/i18n/ko.ts +178 -0
  115. package/src/tool/gifAJpg/i18n/nl.ts +178 -0
  116. package/src/tool/gifAJpg/i18n/pl.ts +178 -0
  117. package/src/tool/gifAJpg/i18n/pt.ts +178 -0
  118. package/src/tool/gifAJpg/i18n/ru.ts +178 -0
  119. package/src/tool/gifAJpg/i18n/sv.ts +178 -0
  120. package/src/tool/gifAJpg/i18n/tr.ts +178 -0
  121. package/src/tool/gifAJpg/i18n/zh.ts +178 -0
  122. package/src/tool/gifAJpg/index.ts +13 -1
  123. package/src/tool/gifAPng/i18n/de.ts +178 -0
  124. package/src/tool/gifAPng/i18n/en.ts +2 -12
  125. package/src/tool/gifAPng/i18n/es.ts +2 -12
  126. package/src/tool/gifAPng/i18n/fr.ts +2 -12
  127. package/src/tool/gifAPng/i18n/id.ts +178 -0
  128. package/src/tool/gifAPng/i18n/it.ts +178 -0
  129. package/src/tool/gifAPng/i18n/ja.ts +178 -0
  130. package/src/tool/gifAPng/i18n/ko.ts +178 -0
  131. package/src/tool/gifAPng/i18n/nl.ts +178 -0
  132. package/src/tool/gifAPng/i18n/pl.ts +178 -0
  133. package/src/tool/gifAPng/i18n/pt.ts +178 -0
  134. package/src/tool/gifAPng/i18n/ru.ts +178 -0
  135. package/src/tool/gifAPng/i18n/sv.ts +178 -0
  136. package/src/tool/gifAPng/i18n/tr.ts +178 -0
  137. package/src/tool/gifAPng/i18n/zh.ts +178 -0
  138. package/src/tool/gifAPng/index.ts +12 -0
  139. package/src/tool/gifAWebp/i18n/de.ts +178 -0
  140. package/src/tool/gifAWebp/i18n/en.ts +2 -12
  141. package/src/tool/gifAWebp/i18n/es.ts +2 -12
  142. package/src/tool/gifAWebp/i18n/fr.ts +2 -12
  143. package/src/tool/gifAWebp/i18n/id.ts +178 -0
  144. package/src/tool/gifAWebp/i18n/it.ts +178 -0
  145. package/src/tool/gifAWebp/i18n/ja.ts +178 -0
  146. package/src/tool/gifAWebp/i18n/ko.ts +178 -0
  147. package/src/tool/gifAWebp/i18n/nl.ts +178 -0
  148. package/src/tool/gifAWebp/i18n/pl.ts +178 -0
  149. package/src/tool/gifAWebp/i18n/pt.ts +178 -0
  150. package/src/tool/gifAWebp/i18n/ru.ts +178 -0
  151. package/src/tool/gifAWebp/i18n/sv.ts +178 -0
  152. package/src/tool/gifAWebp/i18n/tr.ts +178 -0
  153. package/src/tool/gifAWebp/i18n/zh.ts +178 -0
  154. package/src/tool/gifAWebp/index.ts +12 -0
  155. package/src/tool/imagenBase64/i18n/de.ts +168 -0
  156. package/src/tool/imagenBase64/i18n/en.ts +2 -12
  157. package/src/tool/imagenBase64/i18n/es.ts +2 -12
  158. package/src/tool/imagenBase64/i18n/fr.ts +2 -12
  159. package/src/tool/imagenBase64/i18n/id.ts +168 -0
  160. package/src/tool/imagenBase64/i18n/it.ts +168 -0
  161. package/src/tool/imagenBase64/i18n/ja.ts +168 -0
  162. package/src/tool/imagenBase64/i18n/ko.ts +168 -0
  163. package/src/tool/imagenBase64/i18n/nl.ts +168 -0
  164. package/src/tool/imagenBase64/i18n/pl.ts +168 -0
  165. package/src/tool/imagenBase64/i18n/pt.ts +173 -0
  166. package/src/tool/imagenBase64/i18n/ru.ts +168 -0
  167. package/src/tool/imagenBase64/i18n/sv.ts +168 -0
  168. package/src/tool/imagenBase64/i18n/tr.ts +168 -0
  169. package/src/tool/imagenBase64/i18n/zh.ts +168 -0
  170. package/src/tool/imagenBase64/index.ts +12 -0
  171. package/src/tool/jpgAIco/i18n/de.ts +183 -0
  172. package/src/tool/jpgAIco/i18n/en.ts +8 -13
  173. package/src/tool/jpgAIco/i18n/es.ts +13 -18
  174. package/src/tool/jpgAIco/i18n/fr.ts +9 -14
  175. package/src/tool/jpgAIco/i18n/id.ts +183 -0
  176. package/src/tool/jpgAIco/i18n/it.ts +183 -0
  177. package/src/tool/jpgAIco/i18n/ja.ts +183 -0
  178. package/src/tool/jpgAIco/i18n/ko.ts +183 -0
  179. package/src/tool/jpgAIco/i18n/nl.ts +183 -0
  180. package/src/tool/jpgAIco/i18n/pl.ts +183 -0
  181. package/src/tool/jpgAIco/i18n/pt.ts +183 -0
  182. package/src/tool/jpgAIco/i18n/ru.ts +183 -0
  183. package/src/tool/jpgAIco/i18n/sv.ts +183 -0
  184. package/src/tool/jpgAIco/i18n/tr.ts +183 -0
  185. package/src/tool/jpgAIco/i18n/zh.ts +183 -0
  186. package/src/tool/jpgAIco/index.ts +12 -0
  187. package/src/tool/jpgAPng/i18n/de.ts +178 -0
  188. package/src/tool/jpgAPng/i18n/en.ts +2 -12
  189. package/src/tool/jpgAPng/i18n/es.ts +2 -12
  190. package/src/tool/jpgAPng/i18n/fr.ts +2 -12
  191. package/src/tool/jpgAPng/i18n/id.ts +178 -0
  192. package/src/tool/jpgAPng/i18n/it.ts +178 -0
  193. package/src/tool/jpgAPng/i18n/ja.ts +178 -0
  194. package/src/tool/jpgAPng/i18n/ko.ts +178 -0
  195. package/src/tool/jpgAPng/i18n/nl.ts +178 -0
  196. package/src/tool/jpgAPng/i18n/pl.ts +178 -0
  197. package/src/tool/jpgAPng/i18n/pt.ts +178 -0
  198. package/src/tool/jpgAPng/i18n/ru.ts +178 -0
  199. package/src/tool/jpgAPng/i18n/sv.ts +178 -0
  200. package/src/tool/jpgAPng/i18n/tr.ts +178 -0
  201. package/src/tool/jpgAPng/i18n/zh.ts +178 -0
  202. package/src/tool/jpgAPng/index.ts +13 -1
  203. package/src/tool/jpgAWebp/i18n/de.ts +178 -0
  204. package/src/tool/jpgAWebp/i18n/en.ts +2 -12
  205. package/src/tool/jpgAWebp/i18n/es.ts +2 -12
  206. package/src/tool/jpgAWebp/i18n/fr.ts +2 -12
  207. package/src/tool/jpgAWebp/i18n/id.ts +178 -0
  208. package/src/tool/jpgAWebp/i18n/it.ts +178 -0
  209. package/src/tool/jpgAWebp/i18n/ja.ts +178 -0
  210. package/src/tool/jpgAWebp/i18n/ko.ts +178 -0
  211. package/src/tool/jpgAWebp/i18n/nl.ts +178 -0
  212. package/src/tool/jpgAWebp/i18n/pl.ts +178 -0
  213. package/src/tool/jpgAWebp/i18n/pt.ts +178 -0
  214. package/src/tool/jpgAWebp/i18n/ru.ts +178 -0
  215. package/src/tool/jpgAWebp/i18n/sv.ts +178 -0
  216. package/src/tool/jpgAWebp/i18n/tr.ts +178 -0
  217. package/src/tool/jpgAWebp/i18n/zh.ts +178 -0
  218. package/src/tool/jpgAWebp/index.ts +12 -0
  219. package/src/tool/pngAIco/i18n/de.ts +183 -0
  220. package/src/tool/pngAIco/i18n/en.ts +8 -13
  221. package/src/tool/pngAIco/i18n/es.ts +19 -24
  222. package/src/tool/pngAIco/i18n/fr.ts +20 -25
  223. package/src/tool/pngAIco/i18n/id.ts +183 -0
  224. package/src/tool/pngAIco/i18n/it.ts +183 -0
  225. package/src/tool/pngAIco/i18n/ja.ts +183 -0
  226. package/src/tool/pngAIco/i18n/ko.ts +183 -0
  227. package/src/tool/pngAIco/i18n/nl.ts +183 -0
  228. package/src/tool/pngAIco/i18n/pl.ts +183 -0
  229. package/src/tool/pngAIco/i18n/pt.ts +183 -0
  230. package/src/tool/pngAIco/i18n/ru.ts +183 -0
  231. package/src/tool/pngAIco/i18n/sv.ts +183 -0
  232. package/src/tool/pngAIco/i18n/tr.ts +183 -0
  233. package/src/tool/pngAIco/i18n/zh.ts +183 -0
  234. package/src/tool/pngAIco/index.ts +12 -0
  235. package/src/tool/pngAJpg/i18n/de.ts +191 -0
  236. package/src/tool/pngAJpg/i18n/en.ts +2 -12
  237. package/src/tool/pngAJpg/i18n/es.ts +2 -12
  238. package/src/tool/pngAJpg/i18n/fr.ts +2 -12
  239. package/src/tool/pngAJpg/i18n/id.ts +191 -0
  240. package/src/tool/pngAJpg/i18n/it.ts +191 -0
  241. package/src/tool/pngAJpg/i18n/ja.ts +191 -0
  242. package/src/tool/pngAJpg/i18n/ko.ts +191 -0
  243. package/src/tool/pngAJpg/i18n/nl.ts +191 -0
  244. package/src/tool/pngAJpg/i18n/pl.ts +191 -0
  245. package/src/tool/pngAJpg/i18n/pt.ts +191 -0
  246. package/src/tool/pngAJpg/i18n/ru.ts +191 -0
  247. package/src/tool/pngAJpg/i18n/sv.ts +191 -0
  248. package/src/tool/pngAJpg/i18n/tr.ts +191 -0
  249. package/src/tool/pngAJpg/i18n/zh.ts +191 -0
  250. package/src/tool/pngAJpg/index.ts +13 -1
  251. package/src/tool/pngAWebp/i18n/de.ts +182 -0
  252. package/src/tool/pngAWebp/i18n/en.ts +2 -12
  253. package/src/tool/pngAWebp/i18n/es.ts +2 -12
  254. package/src/tool/pngAWebp/i18n/fr.ts +2 -12
  255. package/src/tool/pngAWebp/i18n/id.ts +182 -0
  256. package/src/tool/pngAWebp/i18n/it.ts +182 -0
  257. package/src/tool/pngAWebp/i18n/ja.ts +182 -0
  258. package/src/tool/pngAWebp/i18n/ko.ts +182 -0
  259. package/src/tool/pngAWebp/i18n/nl.ts +182 -0
  260. package/src/tool/pngAWebp/i18n/pl.ts +182 -0
  261. package/src/tool/pngAWebp/i18n/pt.ts +182 -0
  262. package/src/tool/pngAWebp/i18n/ru.ts +182 -0
  263. package/src/tool/pngAWebp/i18n/sv.ts +182 -0
  264. package/src/tool/pngAWebp/i18n/tr.ts +182 -0
  265. package/src/tool/pngAWebp/i18n/zh.ts +182 -0
  266. package/src/tool/pngAWebp/index.ts +12 -0
  267. package/src/tool/svgAJpg/i18n/de.ts +178 -0
  268. package/src/tool/svgAJpg/i18n/en.ts +8 -13
  269. package/src/tool/svgAJpg/i18n/es.ts +8 -13
  270. package/src/tool/svgAJpg/i18n/fr.ts +2 -12
  271. package/src/tool/svgAJpg/i18n/id.ts +178 -0
  272. package/src/tool/svgAJpg/i18n/it.ts +178 -0
  273. package/src/tool/svgAJpg/i18n/ja.ts +178 -0
  274. package/src/tool/svgAJpg/i18n/ko.ts +178 -0
  275. package/src/tool/svgAJpg/i18n/nl.ts +178 -0
  276. package/src/tool/svgAJpg/i18n/pl.ts +178 -0
  277. package/src/tool/svgAJpg/i18n/pt.ts +178 -0
  278. package/src/tool/svgAJpg/i18n/ru.ts +178 -0
  279. package/src/tool/svgAJpg/i18n/sv.ts +178 -0
  280. package/src/tool/svgAJpg/i18n/tr.ts +178 -0
  281. package/src/tool/svgAJpg/i18n/zh.ts +178 -0
  282. package/src/tool/svgAJpg/index.ts +12 -0
  283. package/src/tool/svgAPng/i18n/de.ts +178 -0
  284. package/src/tool/svgAPng/i18n/en.ts +8 -13
  285. package/src/tool/svgAPng/i18n/es.ts +31 -36
  286. package/src/tool/svgAPng/i18n/fr.ts +2 -12
  287. package/src/tool/svgAPng/i18n/id.ts +178 -0
  288. package/src/tool/svgAPng/i18n/it.ts +178 -0
  289. package/src/tool/svgAPng/i18n/ja.ts +178 -0
  290. package/src/tool/svgAPng/i18n/ko.ts +178 -0
  291. package/src/tool/svgAPng/i18n/nl.ts +178 -0
  292. package/src/tool/svgAPng/i18n/pl.ts +178 -0
  293. package/src/tool/svgAPng/i18n/pt.ts +178 -0
  294. package/src/tool/svgAPng/i18n/ru.ts +178 -0
  295. package/src/tool/svgAPng/i18n/sv.ts +178 -0
  296. package/src/tool/svgAPng/i18n/tr.ts +178 -0
  297. package/src/tool/svgAPng/i18n/zh.ts +178 -0
  298. package/src/tool/svgAPng/index.ts +12 -0
  299. package/src/tool/webpAIco/i18n/de.ts +183 -0
  300. package/src/tool/webpAIco/i18n/en.ts +8 -13
  301. package/src/tool/webpAIco/i18n/es.ts +9 -14
  302. package/src/tool/webpAIco/i18n/fr.ts +11 -16
  303. package/src/tool/webpAIco/i18n/id.ts +183 -0
  304. package/src/tool/webpAIco/i18n/it.ts +183 -0
  305. package/src/tool/webpAIco/i18n/ja.ts +183 -0
  306. package/src/tool/webpAIco/i18n/ko.ts +183 -0
  307. package/src/tool/webpAIco/i18n/nl.ts +183 -0
  308. package/src/tool/webpAIco/i18n/pl.ts +183 -0
  309. package/src/tool/webpAIco/i18n/pt.ts +183 -0
  310. package/src/tool/webpAIco/i18n/ru.ts +183 -0
  311. package/src/tool/webpAIco/i18n/sv.ts +183 -0
  312. package/src/tool/webpAIco/i18n/tr.ts +183 -0
  313. package/src/tool/webpAIco/i18n/zh.ts +183 -0
  314. package/src/tool/webpAIco/index.ts +12 -0
  315. package/src/tool/webpAJpg/i18n/de.ts +187 -0
  316. package/src/tool/webpAJpg/i18n/en.ts +9 -13
  317. package/src/tool/webpAJpg/i18n/es.ts +37 -42
  318. package/src/tool/webpAJpg/i18n/fr.ts +35 -40
  319. package/src/tool/webpAJpg/i18n/id.ts +182 -0
  320. package/src/tool/webpAJpg/i18n/it.ts +182 -0
  321. package/src/tool/webpAJpg/i18n/ja.ts +182 -0
  322. package/src/tool/webpAJpg/i18n/ko.ts +182 -0
  323. package/src/tool/webpAJpg/i18n/nl.ts +182 -0
  324. package/src/tool/webpAJpg/i18n/pl.ts +182 -0
  325. package/src/tool/webpAJpg/i18n/pt.ts +182 -0
  326. package/src/tool/webpAJpg/i18n/ru.ts +182 -0
  327. package/src/tool/webpAJpg/i18n/sv.ts +182 -0
  328. package/src/tool/webpAJpg/i18n/tr.ts +182 -0
  329. package/src/tool/webpAJpg/i18n/zh.ts +182 -0
  330. package/src/tool/webpAJpg/index.ts +12 -0
  331. package/src/tool/webpAPng/i18n/de.ts +182 -0
  332. package/src/tool/webpAPng/i18n/en.ts +8 -13
  333. package/src/tool/webpAPng/i18n/es.ts +35 -40
  334. package/src/tool/webpAPng/i18n/fr.ts +2 -12
  335. package/src/tool/webpAPng/i18n/id.ts +182 -0
  336. package/src/tool/webpAPng/i18n/it.ts +182 -0
  337. package/src/tool/webpAPng/i18n/ja.ts +182 -0
  338. package/src/tool/webpAPng/i18n/ko.ts +182 -0
  339. package/src/tool/webpAPng/i18n/nl.ts +182 -0
  340. package/src/tool/webpAPng/i18n/pl.ts +182 -0
  341. package/src/tool/webpAPng/i18n/pt.ts +182 -0
  342. package/src/tool/webpAPng/i18n/ru.ts +182 -0
  343. package/src/tool/webpAPng/i18n/sv.ts +182 -0
  344. package/src/tool/webpAPng/i18n/tr.ts +182 -0
  345. package/src/tool/webpAPng/i18n/zh.ts +182 -0
  346. package/src/tool/webpAPng/index.ts +12 -0
@@ -0,0 +1,178 @@
1
+ import type { ImageConverterUI } from '../../../shared/ImageConverter.astro';
2
+ import { generateSchemas } from '../../../shared/logic/schemas';
3
+ import type { JpgAPngLocaleContent } from '../index';
4
+
5
+ const slug = 'convertitore-jpg-a-png';
6
+ const title = 'Convertire JPG in PNG Online e Gratis';
7
+ const description =
8
+ 'Converti le immagini JPG in PNG nel tuo browser senza caricare file. Conversione lossless, gratuita e totalmente privata.';
9
+
10
+ const ui: ImageConverterUI = {
11
+ dragText: 'Trascina i file JPG...',
12
+ convertText: 'Per convertirli in PNG istantaneamente',
13
+ selectFiles: 'Seleziona i file',
14
+ processedFiles: 'File elaborati',
15
+ downloadAll: 'Scarica tutto (.zip)',
16
+ pending: 'In attesa',
17
+ bibliographyTitle: 'Riferimenti Bibliografici',
18
+ faqTitle: 'Domande Frequenti',
19
+ };
20
+
21
+ const faq: JpgAPngLocaleContent['faq'] = [
22
+ {
23
+ question: 'Quando dovrei usare da JPG a PNG?',
24
+ answer:
25
+ 'Ogni volta che devi modificare testo o loghi all\'interno di una fotografia. Se salvi un JPG più volte, questo si degrada. Il PNG congela la compressione.',
26
+ },
27
+ {
28
+ question: 'Il file PNG avrà immediatamente lo sfondo trasparente?',
29
+ answer:
30
+ 'No. Il JPG originale era piatto e senza quel tipo di canale strutturale. Il PNG risultante preparerà quel contenitore, poi dovrai isolare l\'elemento usando Photoshop o un altro editor.',
31
+ },
32
+ {
33
+ question: 'Questo sito ha limiti di traffico?',
34
+ answer:
35
+ 'Grazie alle tecnologie Edge senza dipendenze cloud, il peso della tua conversione non comporta limiti perché utilizza interamente il tuo terminale informatico o mobile.',
36
+ },
37
+ ];
38
+
39
+ const howTo: JpgAPngLocaleContent['howTo'] = [
40
+ {
41
+ name: 'Trascina JPG nel pannello',
42
+ text: 'Carica immagini statiche in formato JPG utilizzando il mouse o il selettore del computer.',
43
+ },
44
+ {
45
+ name: 'Esecuzione Lossless',
46
+ text: 'Il software Vanilla spinge i bit del quadro verso un involucro senza perdite nativo della famiglia PNG.',
47
+ },
48
+ {
49
+ name: 'Termina Sessione',
50
+ text: 'Fai clic sul pannello e il tuo browser depositerà gli asset web scaricati nelle tue cartelle utente.',
51
+ },
52
+ ];
53
+
54
+ const bibliography: JpgAPngLocaleContent['bibliography'] = [
55
+ {
56
+ name: 'The W3C PNG Graphics',
57
+ url: 'https://www.w3.org/Graphics/PNG/',
58
+ },
59
+ {
60
+ name: 'Understanding Digital Image Compression',
61
+ url: 'https://en.wikipedia.org/wiki/Image_compression',
62
+ },
63
+ ];
64
+
65
+ const seo: JpgAPngLocaleContent['seo'] = [
66
+ {
67
+ type: 'title',
68
+ text: 'Convertitore da JPG a PNG: Editing senza perdite e trasparenza',
69
+ level: 2,
70
+ },
71
+ {
72
+ type: 'paragraph',
73
+ html: 'Il <strong>JPG</strong> è insuperabile per le fotografie scattate con la fotocamera, ma ha un tallone d\'Achille: ogni volta che salvi il file viene applicata nuovamente la sua compressione con perdita, degradando progressivamente i bordi e le sfumature. Il <strong>PNG</strong> utilizza una compressione senza perdita: una volta salvato, i pixel sono immutabili. Convertire un JPG in PNG è l\'operazione chiave quando devi preparare un\'immagine per l\'editing intensivo, aggiungere uno sfondo trasparente o integrarla in un flusso di progettazione che richiede più salvataggi.',
74
+ },
75
+ {
76
+ type: 'title',
77
+ text: 'JPG o PNG? Quando usare ogni formato',
78
+ level: 3,
79
+ },
80
+ {
81
+ type: 'paragraph',
82
+ html: 'Il <strong>JPG</strong> è il re della fotografia: pesi ridotti, compatibile con tutto. Ma i suoi artefatti di compressione si accumulano ad ogni modifica e salvataggio. Se devi ritagliare, ritoccare o aggiungere testo a un\'immagine ripetutamente, iniziare dal JPG significa introdurre un degrado in ogni ciclo. Inoltre, il JPG è privo di canale alfa: non può avere sfondi trasparenti, il che lo squalifica per loghi, icone ed elementi di UI.',
83
+ },
84
+ {
85
+ type: 'paragraph',
86
+ html: 'Il <strong>PNG</strong> è la scelta corretta per i loghi aziendali, gli screenshot con testo nitido, gli elementi di interfaccia, le immagini di prodotto con sfondo bianco che dovrai ritagliare in seguito o qualsiasi risorsa grafica che verrà modificata più di una volta. La compressione senza perdita garantisce che i bordi del testo rimangano perfettamente definiti e che i colori piatti rimangano puri, senza rumore JPEG.',
87
+ },
88
+ {
89
+ type: 'title',
90
+ text: 'Confronto: Conversione Locale vs Cloud',
91
+ level: 3,
92
+ },
93
+ {
94
+ type: 'comparative',
95
+ items: [
96
+ {
97
+ title: 'Convertitori Cloud',
98
+ description: 'Strumenti che caricano i tuoi file su un server remoto.',
99
+ icon: 'mdi:cloud-upload',
100
+ pointIcon: 'mdi:close-circle-outline',
101
+ points: [
102
+ 'Latenza di rete in upload e download',
103
+ 'Le tue immagini rimangono su server altrui',
104
+ 'Limiti di dimensioni e conversioni giornaliere',
105
+ 'Pubblicità intrusiva e tracker di terze parti',
106
+ ],
107
+ },
108
+ {
109
+ title: 'La Nostra Architettura Locale',
110
+ description: 'Elaborazione diretta sul tuo hardware tramite tecnologia Vanilla JS.',
111
+ icon: 'mdi:laptop-mac',
112
+ highlight: true,
113
+ points: [
114
+ 'Velocità istantanea — zero latenza di rete',
115
+ 'Privacy totale — 0 byte inviati all\'esterno',
116
+ 'Nessun limite di MB né di numero di file',
117
+ 'Interfaccia pulita, senza annunci o tracciamenti',
118
+ ],
119
+ },
120
+ ],
121
+ },
122
+ {
123
+ type: 'title',
124
+ text: 'Come funziona tecnicamente',
125
+ level: 3,
126
+ },
127
+ {
128
+ type: 'paragraph',
129
+ html: 'Il processo è puramente locale: il browser crea un <strong>Blob</strong> con il JPG selezionato e lo disegna su un <strong>Canvas HTML5</strong> in memoria. Una volta renderizzato, viene chiamato <code>toDataURL(\'image/png\')</code> — il codec PNG integrato nel browser ricodifica ogni pixel senza applicare alcuna nuova compressione con perdita. Il risultato è un PNG che preserva fedelmente lo stato attuale del JPG: né meglio né peggio, semplicemente congelato.',
130
+ },
131
+ {
132
+ type: 'paragraph',
133
+ html: 'Il PNG risultante utilizzerà la compressione DEFLATE senza perdita, la stessa impiegata da strumenti professionali come Photoshop o GIMP. La sua dimensione sarà maggiore rispetto al JPG originale — normalmente tra 2 e 5 volte — perché memorizza tutti i pixel senza scartare informazioni. È il prezzo da pagare per la fedeltà e l\'editabilità infinita.',
134
+ },
135
+ {
136
+ type: 'tip',
137
+ title: 'Importante: il PNG non recupera la qualità JPEG',
138
+ html: 'Convertire un JPG in PNG <strong>non recupera la qualità persa</strong> durante la compressione JPEG originale. Se il tuo JPG presentava già artefatti di blocco o rumore di colore, il PNG li conserverà intatti: evita semplicemente che se ne aggiungano altri. Pensa alla conversione come a un "congelamento" dello stato attuale dell\'immagine in modo che le modifiche future non la degradino ulteriormente.',
139
+ },
140
+ {
141
+ type: 'title',
142
+ text: 'Casi d\'uso e compatibilità',
143
+ level: 3,
144
+ },
145
+ {
146
+ type: 'list',
147
+ icon: 'mdi:check-circle',
148
+ items: [
149
+ 'Loghi ed elementi di marca che necessitano di uno sfondo trasparente dopo il ritaglio.',
150
+ 'Screenshot con testo che verranno modificati e risalvati più volte.',
151
+ 'Immagini di prodotto per l\'e-commerce che richiedono uno sfondo bianco pulito e ritagliabile.',
152
+ 'Risorse grafiche per presentazioni PowerPoint o Google Slides.',
153
+ 'Asset di interfaccia utente per applicazioni web e mobili dove la nitidezza dei bordi è fondamentale.',
154
+ ],
155
+ },
156
+ {
157
+ type: 'title',
158
+ text: 'Conclusione',
159
+ level: 3,
160
+ },
161
+ {
162
+ type: 'paragraph',
163
+ html: 'La conversione da JPG a PNG è il primo passo in qualsiasi flusso di lavoro di progettazione serio. Non trasforma la qualità originale, ma protegge ogni pixel da future modifiche. Con questo strumento, il processo avviene all\'istante e in modo completamente privato, senza che le tue immagini aziendali o personali lascino mai il tuo dispositivo.',
164
+ },
165
+ ];
166
+
167
+
168
+ export const content: JpgAPngLocaleContent = {
169
+ slug,
170
+ title,
171
+ description,
172
+ ui,
173
+ seo,
174
+ faq,
175
+ bibliography,
176
+ howTo,
177
+ schemas: generateSchemas({ title, description, inLanguage: 'it', faq, howTo }),
178
+ };
@@ -0,0 +1,178 @@
1
+ import type { ImageConverterUI } from '../../../shared/ImageConverter.astro';
2
+ import { generateSchemas } from '../../../shared/logic/schemas';
3
+ import type { JpgAPngLocaleContent } from '../index';
4
+
5
+ const slug = 'jpg-to-png-converter';
6
+ const title = 'JPGをPNGにオンラインで無料で変換';
7
+ const description =
8
+ 'ブラウザ上でファイルをアップロードせずにJPG画像をPNGに変換します。ロスレス変換、無料で完全にプライベートに使用できます。';
9
+
10
+ const ui: ImageConverterUI = {
11
+ dragText: 'JPGファイルをドラッグ...',
12
+ convertText: '即座にPNGに変換します',
13
+ selectFiles: 'ファイルを選択',
14
+ processedFiles: '処理済みファイル',
15
+ downloadAll: 'すべてダウンロード (.zip)',
16
+ pending: '待機中',
17
+ bibliographyTitle: '参考文献',
18
+ faqTitle: 'よくある質問',
19
+ };
20
+
21
+ const faq: JpgAPngLocaleContent['faq'] = [
22
+ {
23
+ question: 'いつJPGからPNGへの変換を使うべきですか?',
24
+ answer:
25
+ '写真内のテキストやロゴを編集する場合は常に。JPGを何度も保存すると、画像が劣化します。PNGは圧縮を固定します。',
26
+ },
27
+ {
28
+ question: 'PNGファイルはすぐに背景が透明になりますか?',
29
+ answer:
30
+ 'いいえ。元のJPGはフラットで、そのような構造的なチャンネルはありません。結果のPNGはそのコンテナを準備します。その後、Photoshopなどのエディタを使用して要素を分離する必要があります。',
31
+ },
32
+ {
33
+ question: 'このウェブサイトにトラフィック制限はありますか?',
34
+ answer:
35
+ 'クラウドに依存しないEdgeテクノロジーのおかげで、変換の重量に制限はありません。すべてお使いのコンピュータまたはモバイル端末を使用するためです。',
36
+ },
37
+ ];
38
+
39
+ const howTo: JpgAPngLocaleContent['howTo'] = [
40
+ {
41
+ name: 'JPGをパネルにドラッグ',
42
+ text: 'マウスまたはコンピュータのセレクタを使用してJPG形式の静止画像をアップロードしてください。',
43
+ },
44
+ {
45
+ name: 'ロスレス実行',
46
+ text: 'Vanillaソフトウェアが、描画ビットをPNGファミリー固有のロスレスラッパーに送り込みます。',
47
+ },
48
+ {
49
+ name: 'セッションを終了',
50
+ text: 'パネルをクリックすると、ブラウザがダウンロードされたウェブアセットをユーザーフォルダに保存します。',
51
+ },
52
+ ];
53
+
54
+ const bibliography: JpgAPngLocaleContent['bibliography'] = [
55
+ {
56
+ name: 'The W3C PNG Graphics',
57
+ url: 'https://www.w3.org/Graphics/PNG/',
58
+ },
59
+ {
60
+ name: 'Understanding Digital Image Compression',
61
+ url: 'https://en.wikipedia.org/wiki/Image_compression',
62
+ },
63
+ ];
64
+
65
+ const seo: JpgAPngLocaleContent['seo'] = [
66
+ {
67
+ type: 'title',
68
+ text: 'JPGからPNGへのコンバーター:ロスレス編集と透明度',
69
+ level: 2,
70
+ },
71
+ {
72
+ type: 'paragraph',
73
+ html: '<strong>JPG</strong>はカメラの写真には無敵ですが、弱点があります。ファイルを保存するたびに非可逆圧縮が再適用され、エッジやグラデーションが徐々に劣化します。<strong>PNG</strong>は可逆圧縮を使用しており、一度保存されたピクセルは不変です。JPGをPNGに変換することは、集中的な編集のために画像を準備したり、透明な背景を追加したり、何度も保存が必要なデザインワークフローに統合したりする場合の重要な操作です。',
74
+ },
75
+ {
76
+ type: 'title',
77
+ text: 'JPGかPNGか? 各フォーマットをいつ使うべきか',
78
+ level: 3,
79
+ },
80
+ {
81
+ type: 'paragraph',
82
+ html: '<strong>JPG</strong>は写真の王様です。ファイルサイズが小さく、すべてに互換性があります。しかし、圧縮によるノイズ(アーティファクト)は、編集や再保存のたびに蓄積されます。画像を繰り返し切り抜いたり、補正したり、テキストを追加したりする必要がある場合、JPGから始めるとサイクルごとに劣化が生じることを意味します。また、JPGにはアルファチャンネルがなく、背景を透明にすることができないため、ロゴ、アイコン、UI要素には適していません。',
83
+ },
84
+ {
85
+ type: 'paragraph',
86
+ html: '<strong>PNG</strong>は、企業ロゴ、鮮明なテキスト付きのスクリーンショット、インターフェース要素、後で切り抜く必要がある白い背景の製品画像、または複数回編集されるグラフィックリソースにとって正しい選択です。可逆圧縮により、テキストのエッジが完全に定義されたままになり、ベタ塗りの色がJPEGノイズなしで純粋なまま保たれることが保証されます。',
87
+ },
88
+ {
89
+ type: 'title',
90
+ text: '比較:ローカル変換 vs クラウド',
91
+ level: 3,
92
+ },
93
+ {
94
+ type: 'comparative',
95
+ items: [
96
+ {
97
+ title: 'クラウドコンバーター',
98
+ description: 'ファイルをリモートサーバーにアップロードするツール。',
99
+ icon: 'mdi:cloud-upload',
100
+ pointIcon: 'mdi:close-circle-outline',
101
+ points: [
102
+ 'アップロードとダウンロードのネットワーク遅延',
103
+ '画像が他人のサーバーに残る',
104
+ 'サイズや1日の変換回数の制限',
105
+ '押し付けがましい広告やサードパーティ製トラッカー',
106
+ ],
107
+ },
108
+ {
109
+ title: '当サイトのローカルアーキテクチャ',
110
+ description: 'Vanilla JSテクノロジーを使用してハードウェア上で直接処理。',
111
+ icon: 'mdi:laptop-mac',
112
+ highlight: true,
113
+ points: [
114
+ '瞬時の速度 — ネットワーク遅延ゼロ',
115
+ '完全なプライバシー — 0バイトが外部に送信される',
116
+ 'ファイルサイズやファイル数の制限なし',
117
+ '広告やトラッキングのないクリーンなインターフェース',
118
+ ],
119
+ },
120
+ ],
121
+ },
122
+ {
123
+ type: 'title',
124
+ text: '技術的な仕組み',
125
+ level: 3,
126
+ },
127
+ {
128
+ type: 'paragraph',
129
+ html: 'プロセスは純粋にローカルです。ブラウザは選択されたJPGを含む<strong>Blob</strong>を作成し、メモリ内の<strong>HTML5キャンバス</strong>上に描画します。レンダリング後、<code>toDataURL(\'image/png\')</code>が呼び出されます。ブラウザに統合されたPNGコーデックが、新たな非可逆圧縮を適用することなく各ピクセルを再コード化します。結果として得られるPNGは、JPGの現在の状態を忠実に保持します。改善も改悪もされず、ただ「静止」されます。',
130
+ },
131
+ {
132
+ type: 'paragraph',
133
+ html: '得られたPNGは、PhotoshopやGIMPなどの専門的なツールで使用されている可逆DEFLATE圧縮を使用します。情報を破棄せずにすべてのピクセルを保存するため、サイズは元のJPGより大きく(通常2〜5倍)なります。これは、忠実度と無限の編集可能性のために支払う対価です。',
134
+ },
135
+ {
136
+ type: 'tip',
137
+ title: '重要:PNGはJPEGの品質を回復させません',
138
+ html: 'JPGをPNGに変換しても、元のJPEG圧縮中に<strong>失われた品質は回復しません</strong>。JPGにすでにブロックノイズや色ノイズがあった場合、PNGはそれらをそのまま保持します。単にそれ以上のノイズが追加されるのを防ぐだけです。変換は、将来の編集によってこれ以上劣化しないように、画像の現在の状態を「凍結」するものと考えてください。',
139
+ },
140
+ {
141
+ type: 'title',
142
+ text: '使用例と互換性',
143
+ level: 3,
144
+ },
145
+ {
146
+ type: 'list',
147
+ icon: 'mdi:check-circle',
148
+ items: [
149
+ '切り抜き後に透明な背景が必要なロゴやブランド要素。',
150
+ '何度も編集して再保存される、テキスト付きのスクリーンショット。',
151
+ 'クリーンで切り抜き可能な白い背景が必要なEコマース用の製品画像。',
152
+ 'PowerPointやGoogle Slidesのプレゼンテーション用グラフィックリソース。',
153
+ 'エッジの鮮明さが重要なウェブおよびモバイルアプリケーション用のUIアセット。',
154
+ ],
155
+ },
156
+ {
157
+ type: 'title',
158
+ text: '結論',
159
+ level: 3,
160
+ },
161
+ {
162
+ type: 'paragraph',
163
+ html: 'JPGからPNGへの変換は、本格的なデザインワークフローにおける最初のステップです。元の品質を向上させるものではありませんが、将来の編集からすべてのピクセルを保護します。このツールを使用すれば、プロセスは瞬時に完全にプライベートに行われ、企業や個人の画像がデバイスの外に出ることは一切ありません。',
164
+ },
165
+ ];
166
+
167
+
168
+ export const content: JpgAPngLocaleContent = {
169
+ slug,
170
+ title,
171
+ description,
172
+ ui,
173
+ seo,
174
+ faq,
175
+ bibliography,
176
+ howTo,
177
+ schemas: generateSchemas({ title, description, inLanguage: 'ja', faq, howTo }),
178
+ };
@@ -0,0 +1,178 @@
1
+ import type { ImageConverterUI } from '../../../shared/ImageConverter.astro';
2
+ import { generateSchemas } from '../../../shared/logic/schemas';
3
+ import type { JpgAPngLocaleContent } from '../index';
4
+
5
+ const slug = 'jpg-to-png-converter';
6
+ const title = 'JPG를 PNG로 온라인 무료 변환';
7
+ const description =
8
+ '파일 업로드 없이 브라우저에서 JPG 이미지를 PNG로 변환하세요. 로컬에서 처리되는 무손실 변환으로 무료이며 100% 안전합니다.';
9
+
10
+ const ui: ImageConverterUI = {
11
+ dragText: 'JPG 파일을 끌어다 놓으세요...',
12
+ convertText: '즉시 PNG로 변환합니다',
13
+ selectFiles: '파일 선택',
14
+ processedFiles: '처리된 파일',
15
+ downloadAll: '모두 다운로드 (.zip)',
16
+ pending: '대기 중',
17
+ bibliographyTitle: '참고 문헌',
18
+ faqTitle: '자주 묻는 질문',
19
+ };
20
+
21
+ const faq: JpgAPngLocaleContent['faq'] = [
22
+ {
23
+ question: '언제 JPG에서 PNG로 변환해야 하나요?',
24
+ answer:
25
+ '사진 내의 텍스트나 로고를 편집하려는 경우 필수입니다. JPG를 여러 번 저장하면 노이즈가 발생하지만, PNG는 압축을 고정하여 화질 저하를 방지합니다.',
26
+ },
27
+ {
28
+ question: 'PNG 파일로 변환하면 즉시 배경이 투명해지나요?',
29
+ answer:
30
+ '아니요. 원본 JPG는 평면 구조이며 투명 채널이 없습니다. 변환된 PNG는 투명 채널을 지원하는 컨테이너 역할을 하며, 이후 포토샵 등을 통해 배경을 제거해야 합니다.',
31
+ },
32
+ {
33
+ question: '이 웹사이트에 트래픽 제한이 있나요?',
34
+ answer:
35
+ '클라우드 의존성이 없는 Edge 기술을 사용하므로 변환 용량에 제한이 없습니다. 모든 작업은 사용자의 컴퓨터나 모바일 기기 내에서만 이루어집니다.',
36
+ },
37
+ ];
38
+
39
+ const howTo: JpgAPngLocaleContent['howTo'] = [
40
+ {
41
+ name: 'JPG를 패널로 드래그',
42
+ text: '마우스나 파일 선택기를 사용하여 JPG 형식의 정지 이미지를 업로드하세요.',
43
+ },
44
+ {
45
+ name: '무손실 처리',
46
+ text: '당사 소프트웨어는 이미지 비트를 PNG 패밀리 고유의 무손실 래퍼로 안전하게 보냅니다.',
47
+ },
48
+ {
49
+ name: '세션 종료',
50
+ text: '패널을 클릭하면 브라우저가 다운로드된 웹 에셋을 사용자의 다운로드 폴더에 저장합니다.',
51
+ },
52
+ ];
53
+
54
+ const bibliography: JpgAPngLocaleContent['bibliography'] = [
55
+ {
56
+ name: 'The W3C PNG Graphics',
57
+ url: 'https://www.w3.org/Graphics/PNG/',
58
+ },
59
+ {
60
+ name: 'Understanding Digital Image Compression',
61
+ url: 'https://en.wikipedia.org/wiki/Image_compression',
62
+ },
63
+ ];
64
+
65
+ const seo: JpgAPngLocaleContent['seo'] = [
66
+ {
67
+ type: 'title',
68
+ text: 'JPG to PNG 변환기: 무손실 편집과 투명도 지원',
69
+ level: 2,
70
+ },
71
+ {
72
+ type: 'paragraph',
73
+ html: '<strong>JPG</strong>는 카메라 사진에는 최적이지만 약점이 있습니다. 파일을 저장할 때마다 손실 압축이 다시 적용되어 가장자리와 그라데이션이 점진적으로 저하됩니다. <strong>PNG</strong>는 무손실 압축을 사용하여 저장 후에도 픽셀이 변하지 않습니다. JPG를 PNG로 변환하는 것은 집중적인 편집을 준비하거나, 투명 배경을 추가하거나, 여러 번 저장이 필요한 디자인 워크플로우를 위해 필수적인 과정입니다.',
74
+ },
75
+ {
76
+ type: 'title',
77
+ text: 'JPG vs PNG: 출력 형식 선택 가이드',
78
+ level: 3,
79
+ },
80
+ {
81
+ type: 'paragraph',
82
+ html: '<strong>JPG</strong>는 사진의 왕입니다. 용량이 작고 모든 기기와 호환됩니다. 하지만 편집과 재저장을 반복할 때마다 압축 노이즈가 축적됩니다. 이미지를 반복적으로 자르거나, 보정하거나, 텍스트를 추가해야 한다면 JPG에서 시작할 경우 주기마다 화질 저하가 발생합니다. 또한 JPG는 알파 채널이 없어 투명 배경이 불가능하므로 로고나 UI 요소에는 부적합합니다.',
83
+ },
84
+ {
85
+ type: 'paragraph',
86
+ html: '<strong>PNG</strong>는 기업 로고, 선명한 텍스트가 포함된 스크린샷, 제품 이미지 등 여러 번 편집될 그래픽 리소스에 적합합니다. 무손실 압축은 텍스트 가장자리를 완벽하게 정의하고, JPEG 노이즈 없이 원색을 순수하게 유지해 줍니다.',
87
+ },
88
+ {
89
+ type: 'title',
90
+ text: '비교: 로컬 변환 vs 클라우드 서비스',
91
+ level: 3,
92
+ },
93
+ {
94
+ type: 'comparative',
95
+ items: [
96
+ {
97
+ title: '클라우드 변환기',
98
+ description: '파일을 원격 서버로 업로드하여 처리하는 도구입니다.',
99
+ icon: 'mdi:cloud-upload',
100
+ pointIcon: 'mdi:close-circle-outline',
101
+ points: [
102
+ '업로드 및 다운로드 시 발생하는 네트워크 지연',
103
+ '사용자의 이미지가 외부 서버에 남을 수 있음',
104
+ '용량 및 일일 변환 횟수 제한',
105
+ '불필요한 광고 및 타사 추적기 포함',
106
+ ],
107
+ },
108
+ {
109
+ title: '당사의 로컬 아키텍처',
110
+ description: 'Vanilla JS 기술을 통해 사용자의 하드웨어에서 직접 처리합니다.',
111
+ icon: 'mdi:laptop-mac',
112
+ highlight: true,
113
+ points: [
114
+ '실시간 속도 — 네트워크 지연 제로',
115
+ '철저한 프라이버시 — 외부로 0바이트 전송',
116
+ '용량 및 파일 개수 제한 없음',
117
+ '광고나 추적이 없는 깨끗한 인터페이스',
118
+ ],
119
+ },
120
+ ],
121
+ },
122
+ {
123
+ type: 'title',
124
+ text: '기술적인 작동 방식',
125
+ level: 3,
126
+ },
127
+ {
128
+ type: 'paragraph',
129
+ html: '처리는 순수하게 로컬에서 이루어집니다. 브라우저는 선택한 JPG로 <strong>Blob</strong>을 생성하고 메모리 내 <strong>HTML5 Canvas</strong>에 그립니다. 렌더링이 완료되면 <code>toDataURL(\'image/png\')</code>이 호출되며, 브라우저에 내장된 PNG 코덱이 새로운 손실 압축 없이 각 픽셀을 다시 인코딩합니다. 결과물은 JPG의 현재 상태를 충실히 보존하며, 더 이상의 화질 저하를 방지합니다.',
130
+ },
131
+ {
132
+ type: 'paragraph',
133
+ html: '생성된 PNG는 전문 도구에서 사용하는 무손실 DEFLATE 압축을 사용합니다. 정보를 버리지 않고 모든 픽셀을 저장하기 때문에 용량은 원래 JPG보다 커집니다(보통 2~5배). 이는 무한한 화질 보존과 편집 가능성에 대한 대가입니다.',
134
+ },
135
+ {
136
+ type: 'tip',
137
+ title: '중요: PNG는 손실된 화질을 복구하지 않습니다',
138
+ html: 'JPG를 PNG로 변환한다고 해서 원본 JPEG 압축 중에 <strong>손실된 화질이 복구되는 것은 아닙니다</strong>. JPG에 이미 노이즈가 있었다면 PNG는 이를 그대로 유지하며, 단지 더 이상의 노이즈가 추가되지 않도록 할 뿐입니다. 변환은 향후 편집 과정에서 더 이상 화질이 나빠지지 않도록 현재 상태를 "고정"하는 것으로 이해하세요.',
139
+ },
140
+ {
141
+ type: 'title',
142
+ text: '사용 사례 및 호환성',
143
+ level: 3,
144
+ },
145
+ {
146
+ type: 'list',
147
+ icon: 'mdi:check-circle',
148
+ items: [
149
+ '배경 제거 후 투명 배경이 필요한 로고 및 브랜드 에셋.',
150
+ '텍스트가 포함되어 반복적인 편집과 재저장이 필요한 스크린샷.',
151
+ '깔끔한 배경이 필요한 이커머스용 제품 이미지.',
152
+ '파워포인트 또는 구글 슬라이드 발표용 그래픽 리소스.',
153
+ '가장자리의 선명도가 중요한 웹 및 모바일 앱용 UI 에셋.',
154
+ ],
155
+ },
156
+ {
157
+ type: 'title',
158
+ text: '결론',
159
+ level: 3,
160
+ },
161
+ {
162
+ type: 'paragraph',
163
+ html: 'JPG에서 PNG로의 변환은 전문적인 디자인 작업의 첫 번째 단계입니다. 원본 화질을 높여주지는 않지만, 향후 편집으로부터 모든 픽셀을 보호합니다. 이 도구를 사용하면 이미지가 외부로 유출되지 않고 즉각적이고 안전하게 작업을 완료할 수 있습니다.',
164
+ },
165
+ ];
166
+
167
+
168
+ export const content: JpgAPngLocaleContent = {
169
+ slug,
170
+ title,
171
+ description,
172
+ ui,
173
+ seo,
174
+ faq,
175
+ bibliography,
176
+ howTo,
177
+ schemas: generateSchemas({ title, description, inLanguage: 'ko', faq, howTo }),
178
+ };