@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.
- package/package.json +60 -59
- package/src/shared/logic/schemas.ts +57 -0
- package/src/tests/faq_count.test.ts +13 -4
- package/src/tests/i18n_coverage.test.ts +36 -0
- package/src/tests/locale_completeness.test.ts +42 -0
- package/src/tests/no_h1_in_components.test.ts +48 -0
- package/src/tests/schemas_fulfillment.test.ts +23 -0
- package/src/tests/seo_length.test.ts +1 -1
- package/src/tests/slug_uniqueness.test.ts +81 -0
- package/src/tests/title_quality.test.ts +55 -0
- package/src/tool/avifAJpg/i18n/de.ts +178 -0
- package/src/tool/avifAJpg/i18n/en.ts +2 -12
- package/src/tool/avifAJpg/i18n/es.ts +2 -12
- package/src/tool/avifAJpg/i18n/fr.ts +2 -12
- package/src/tool/avifAJpg/i18n/id.ts +178 -0
- package/src/tool/avifAJpg/i18n/it.ts +178 -0
- package/src/tool/avifAJpg/i18n/ja.ts +178 -0
- package/src/tool/avifAJpg/i18n/ko.ts +178 -0
- package/src/tool/avifAJpg/i18n/nl.ts +178 -0
- package/src/tool/avifAJpg/i18n/pl.ts +178 -0
- package/src/tool/avifAJpg/i18n/pt.ts +178 -0
- package/src/tool/avifAJpg/i18n/ru.ts +178 -0
- package/src/tool/avifAJpg/i18n/sv.ts +178 -0
- package/src/tool/avifAJpg/i18n/tr.ts +178 -0
- package/src/tool/avifAJpg/i18n/zh.ts +178 -0
- package/src/tool/avifAJpg/index.ts +13 -1
- package/src/tool/avifAPng/i18n/de.ts +178 -0
- package/src/tool/avifAPng/i18n/en.ts +2 -12
- package/src/tool/avifAPng/i18n/es.ts +2 -12
- package/src/tool/avifAPng/i18n/fr.ts +2 -12
- package/src/tool/avifAPng/i18n/id.ts +178 -0
- package/src/tool/avifAPng/i18n/it.ts +178 -0
- package/src/tool/avifAPng/i18n/ja.ts +178 -0
- package/src/tool/avifAPng/i18n/ko.ts +178 -0
- package/src/tool/avifAPng/i18n/nl.ts +178 -0
- package/src/tool/avifAPng/i18n/pl.ts +178 -0
- package/src/tool/avifAPng/i18n/pt.ts +178 -0
- package/src/tool/avifAPng/i18n/ru.ts +178 -0
- package/src/tool/avifAPng/i18n/sv.ts +178 -0
- package/src/tool/avifAPng/i18n/tr.ts +178 -0
- package/src/tool/avifAPng/i18n/zh.ts +178 -0
- package/src/tool/avifAPng/index.ts +13 -1
- package/src/tool/avifAWebp/i18n/de.ts +178 -0
- package/src/tool/avifAWebp/i18n/en.ts +2 -12
- package/src/tool/avifAWebp/i18n/es.ts +2 -12
- package/src/tool/avifAWebp/i18n/fr.ts +2 -12
- package/src/tool/avifAWebp/i18n/id.ts +178 -0
- package/src/tool/avifAWebp/i18n/it.ts +178 -0
- package/src/tool/avifAWebp/i18n/ja.ts +178 -0
- package/src/tool/avifAWebp/i18n/ko.ts +178 -0
- package/src/tool/avifAWebp/i18n/nl.ts +178 -0
- package/src/tool/avifAWebp/i18n/pl.ts +178 -0
- package/src/tool/avifAWebp/i18n/pt.ts +178 -0
- package/src/tool/avifAWebp/i18n/ru.ts +178 -0
- package/src/tool/avifAWebp/i18n/sv.ts +178 -0
- package/src/tool/avifAWebp/i18n/tr.ts +178 -0
- package/src/tool/avifAWebp/i18n/zh.ts +178 -0
- package/src/tool/avifAWebp/index.ts +13 -1
- package/src/tool/bmpAJpg/i18n/de.ts +178 -0
- package/src/tool/bmpAJpg/i18n/en.ts +2 -12
- package/src/tool/bmpAJpg/i18n/es.ts +2 -12
- package/src/tool/bmpAJpg/i18n/fr.ts +2 -12
- package/src/tool/bmpAJpg/i18n/id.ts +178 -0
- package/src/tool/bmpAJpg/i18n/it.ts +178 -0
- package/src/tool/bmpAJpg/i18n/ja.ts +178 -0
- package/src/tool/bmpAJpg/i18n/ko.ts +178 -0
- package/src/tool/bmpAJpg/i18n/nl.ts +178 -0
- package/src/tool/bmpAJpg/i18n/pl.ts +178 -0
- package/src/tool/bmpAJpg/i18n/pt.ts +178 -0
- package/src/tool/bmpAJpg/i18n/ru.ts +178 -0
- package/src/tool/bmpAJpg/i18n/sv.ts +178 -0
- package/src/tool/bmpAJpg/i18n/tr.ts +178 -0
- package/src/tool/bmpAJpg/i18n/zh.ts +178 -0
- package/src/tool/bmpAJpg/index.ts +13 -1
- package/src/tool/bmpAPng/i18n/de.ts +177 -0
- package/src/tool/bmpAPng/i18n/en.ts +2 -12
- package/src/tool/bmpAPng/i18n/es.ts +2 -12
- package/src/tool/bmpAPng/i18n/fr.ts +2 -12
- package/src/tool/bmpAPng/i18n/id.ts +177 -0
- package/src/tool/bmpAPng/i18n/it.ts +177 -0
- package/src/tool/bmpAPng/i18n/ja.ts +177 -0
- package/src/tool/bmpAPng/i18n/ko.ts +177 -0
- package/src/tool/bmpAPng/i18n/nl.ts +177 -0
- package/src/tool/bmpAPng/i18n/pl.ts +177 -0
- package/src/tool/bmpAPng/i18n/pt.ts +177 -0
- package/src/tool/bmpAPng/i18n/ru.ts +177 -0
- package/src/tool/bmpAPng/i18n/sv.ts +177 -0
- package/src/tool/bmpAPng/i18n/tr.ts +177 -0
- package/src/tool/bmpAPng/i18n/zh.ts +177 -0
- package/src/tool/bmpAPng/index.ts +13 -1
- package/src/tool/bmpAWebp/i18n/de.ts +178 -0
- package/src/tool/bmpAWebp/i18n/en.ts +2 -12
- package/src/tool/bmpAWebp/i18n/es.ts +2 -12
- package/src/tool/bmpAWebp/i18n/fr.ts +2 -12
- package/src/tool/bmpAWebp/i18n/id.ts +178 -0
- package/src/tool/bmpAWebp/i18n/it.ts +178 -0
- package/src/tool/bmpAWebp/i18n/ja.ts +178 -0
- package/src/tool/bmpAWebp/i18n/ko.ts +178 -0
- package/src/tool/bmpAWebp/i18n/nl.ts +178 -0
- package/src/tool/bmpAWebp/i18n/pl.ts +178 -0
- package/src/tool/bmpAWebp/i18n/pt.ts +178 -0
- package/src/tool/bmpAWebp/i18n/ru.ts +178 -0
- package/src/tool/bmpAWebp/i18n/sv.ts +178 -0
- package/src/tool/bmpAWebp/i18n/tr.ts +178 -0
- package/src/tool/bmpAWebp/i18n/zh.ts +178 -0
- package/src/tool/bmpAWebp/index.ts +13 -1
- package/src/tool/gifAJpg/i18n/de.ts +178 -0
- package/src/tool/gifAJpg/i18n/en.ts +2 -12
- package/src/tool/gifAJpg/i18n/es.ts +2 -12
- package/src/tool/gifAJpg/i18n/fr.ts +2 -12
- package/src/tool/gifAJpg/i18n/id.ts +178 -0
- package/src/tool/gifAJpg/i18n/it.ts +178 -0
- package/src/tool/gifAJpg/i18n/ja.ts +178 -0
- package/src/tool/gifAJpg/i18n/ko.ts +178 -0
- package/src/tool/gifAJpg/i18n/nl.ts +178 -0
- package/src/tool/gifAJpg/i18n/pl.ts +178 -0
- package/src/tool/gifAJpg/i18n/pt.ts +178 -0
- package/src/tool/gifAJpg/i18n/ru.ts +178 -0
- package/src/tool/gifAJpg/i18n/sv.ts +178 -0
- package/src/tool/gifAJpg/i18n/tr.ts +178 -0
- package/src/tool/gifAJpg/i18n/zh.ts +178 -0
- package/src/tool/gifAJpg/index.ts +13 -1
- package/src/tool/gifAPng/i18n/de.ts +178 -0
- package/src/tool/gifAPng/i18n/en.ts +2 -12
- package/src/tool/gifAPng/i18n/es.ts +2 -12
- package/src/tool/gifAPng/i18n/fr.ts +2 -12
- package/src/tool/gifAPng/i18n/id.ts +178 -0
- package/src/tool/gifAPng/i18n/it.ts +178 -0
- package/src/tool/gifAPng/i18n/ja.ts +178 -0
- package/src/tool/gifAPng/i18n/ko.ts +178 -0
- package/src/tool/gifAPng/i18n/nl.ts +178 -0
- package/src/tool/gifAPng/i18n/pl.ts +178 -0
- package/src/tool/gifAPng/i18n/pt.ts +178 -0
- package/src/tool/gifAPng/i18n/ru.ts +178 -0
- package/src/tool/gifAPng/i18n/sv.ts +178 -0
- package/src/tool/gifAPng/i18n/tr.ts +178 -0
- package/src/tool/gifAPng/i18n/zh.ts +178 -0
- package/src/tool/gifAPng/index.ts +12 -0
- package/src/tool/gifAWebp/i18n/de.ts +178 -0
- package/src/tool/gifAWebp/i18n/en.ts +2 -12
- package/src/tool/gifAWebp/i18n/es.ts +2 -12
- package/src/tool/gifAWebp/i18n/fr.ts +2 -12
- package/src/tool/gifAWebp/i18n/id.ts +178 -0
- package/src/tool/gifAWebp/i18n/it.ts +178 -0
- package/src/tool/gifAWebp/i18n/ja.ts +178 -0
- package/src/tool/gifAWebp/i18n/ko.ts +178 -0
- package/src/tool/gifAWebp/i18n/nl.ts +178 -0
- package/src/tool/gifAWebp/i18n/pl.ts +178 -0
- package/src/tool/gifAWebp/i18n/pt.ts +178 -0
- package/src/tool/gifAWebp/i18n/ru.ts +178 -0
- package/src/tool/gifAWebp/i18n/sv.ts +178 -0
- package/src/tool/gifAWebp/i18n/tr.ts +178 -0
- package/src/tool/gifAWebp/i18n/zh.ts +178 -0
- package/src/tool/gifAWebp/index.ts +12 -0
- package/src/tool/imagenBase64/i18n/de.ts +168 -0
- package/src/tool/imagenBase64/i18n/en.ts +2 -12
- package/src/tool/imagenBase64/i18n/es.ts +2 -12
- package/src/tool/imagenBase64/i18n/fr.ts +2 -12
- package/src/tool/imagenBase64/i18n/id.ts +168 -0
- package/src/tool/imagenBase64/i18n/it.ts +168 -0
- package/src/tool/imagenBase64/i18n/ja.ts +168 -0
- package/src/tool/imagenBase64/i18n/ko.ts +168 -0
- package/src/tool/imagenBase64/i18n/nl.ts +168 -0
- package/src/tool/imagenBase64/i18n/pl.ts +168 -0
- package/src/tool/imagenBase64/i18n/pt.ts +173 -0
- package/src/tool/imagenBase64/i18n/ru.ts +168 -0
- package/src/tool/imagenBase64/i18n/sv.ts +168 -0
- package/src/tool/imagenBase64/i18n/tr.ts +168 -0
- package/src/tool/imagenBase64/i18n/zh.ts +168 -0
- package/src/tool/imagenBase64/index.ts +12 -0
- package/src/tool/jpgAIco/i18n/de.ts +183 -0
- package/src/tool/jpgAIco/i18n/en.ts +8 -13
- package/src/tool/jpgAIco/i18n/es.ts +13 -18
- package/src/tool/jpgAIco/i18n/fr.ts +9 -14
- package/src/tool/jpgAIco/i18n/id.ts +183 -0
- package/src/tool/jpgAIco/i18n/it.ts +183 -0
- package/src/tool/jpgAIco/i18n/ja.ts +183 -0
- package/src/tool/jpgAIco/i18n/ko.ts +183 -0
- package/src/tool/jpgAIco/i18n/nl.ts +183 -0
- package/src/tool/jpgAIco/i18n/pl.ts +183 -0
- package/src/tool/jpgAIco/i18n/pt.ts +183 -0
- package/src/tool/jpgAIco/i18n/ru.ts +183 -0
- package/src/tool/jpgAIco/i18n/sv.ts +183 -0
- package/src/tool/jpgAIco/i18n/tr.ts +183 -0
- package/src/tool/jpgAIco/i18n/zh.ts +183 -0
- package/src/tool/jpgAIco/index.ts +12 -0
- package/src/tool/jpgAPng/i18n/de.ts +178 -0
- package/src/tool/jpgAPng/i18n/en.ts +2 -12
- package/src/tool/jpgAPng/i18n/es.ts +2 -12
- package/src/tool/jpgAPng/i18n/fr.ts +2 -12
- package/src/tool/jpgAPng/i18n/id.ts +178 -0
- package/src/tool/jpgAPng/i18n/it.ts +178 -0
- package/src/tool/jpgAPng/i18n/ja.ts +178 -0
- package/src/tool/jpgAPng/i18n/ko.ts +178 -0
- package/src/tool/jpgAPng/i18n/nl.ts +178 -0
- package/src/tool/jpgAPng/i18n/pl.ts +178 -0
- package/src/tool/jpgAPng/i18n/pt.ts +178 -0
- package/src/tool/jpgAPng/i18n/ru.ts +178 -0
- package/src/tool/jpgAPng/i18n/sv.ts +178 -0
- package/src/tool/jpgAPng/i18n/tr.ts +178 -0
- package/src/tool/jpgAPng/i18n/zh.ts +178 -0
- package/src/tool/jpgAPng/index.ts +13 -1
- package/src/tool/jpgAWebp/i18n/de.ts +178 -0
- package/src/tool/jpgAWebp/i18n/en.ts +2 -12
- package/src/tool/jpgAWebp/i18n/es.ts +2 -12
- package/src/tool/jpgAWebp/i18n/fr.ts +2 -12
- package/src/tool/jpgAWebp/i18n/id.ts +178 -0
- package/src/tool/jpgAWebp/i18n/it.ts +178 -0
- package/src/tool/jpgAWebp/i18n/ja.ts +178 -0
- package/src/tool/jpgAWebp/i18n/ko.ts +178 -0
- package/src/tool/jpgAWebp/i18n/nl.ts +178 -0
- package/src/tool/jpgAWebp/i18n/pl.ts +178 -0
- package/src/tool/jpgAWebp/i18n/pt.ts +178 -0
- package/src/tool/jpgAWebp/i18n/ru.ts +178 -0
- package/src/tool/jpgAWebp/i18n/sv.ts +178 -0
- package/src/tool/jpgAWebp/i18n/tr.ts +178 -0
- package/src/tool/jpgAWebp/i18n/zh.ts +178 -0
- package/src/tool/jpgAWebp/index.ts +12 -0
- package/src/tool/pngAIco/i18n/de.ts +183 -0
- package/src/tool/pngAIco/i18n/en.ts +8 -13
- package/src/tool/pngAIco/i18n/es.ts +19 -24
- package/src/tool/pngAIco/i18n/fr.ts +20 -25
- package/src/tool/pngAIco/i18n/id.ts +183 -0
- package/src/tool/pngAIco/i18n/it.ts +183 -0
- package/src/tool/pngAIco/i18n/ja.ts +183 -0
- package/src/tool/pngAIco/i18n/ko.ts +183 -0
- package/src/tool/pngAIco/i18n/nl.ts +183 -0
- package/src/tool/pngAIco/i18n/pl.ts +183 -0
- package/src/tool/pngAIco/i18n/pt.ts +183 -0
- package/src/tool/pngAIco/i18n/ru.ts +183 -0
- package/src/tool/pngAIco/i18n/sv.ts +183 -0
- package/src/tool/pngAIco/i18n/tr.ts +183 -0
- package/src/tool/pngAIco/i18n/zh.ts +183 -0
- package/src/tool/pngAIco/index.ts +12 -0
- package/src/tool/pngAJpg/i18n/de.ts +191 -0
- package/src/tool/pngAJpg/i18n/en.ts +2 -12
- package/src/tool/pngAJpg/i18n/es.ts +2 -12
- package/src/tool/pngAJpg/i18n/fr.ts +2 -12
- package/src/tool/pngAJpg/i18n/id.ts +191 -0
- package/src/tool/pngAJpg/i18n/it.ts +191 -0
- package/src/tool/pngAJpg/i18n/ja.ts +191 -0
- package/src/tool/pngAJpg/i18n/ko.ts +191 -0
- package/src/tool/pngAJpg/i18n/nl.ts +191 -0
- package/src/tool/pngAJpg/i18n/pl.ts +191 -0
- package/src/tool/pngAJpg/i18n/pt.ts +191 -0
- package/src/tool/pngAJpg/i18n/ru.ts +191 -0
- package/src/tool/pngAJpg/i18n/sv.ts +191 -0
- package/src/tool/pngAJpg/i18n/tr.ts +191 -0
- package/src/tool/pngAJpg/i18n/zh.ts +191 -0
- package/src/tool/pngAJpg/index.ts +13 -1
- package/src/tool/pngAWebp/i18n/de.ts +182 -0
- package/src/tool/pngAWebp/i18n/en.ts +2 -12
- package/src/tool/pngAWebp/i18n/es.ts +2 -12
- package/src/tool/pngAWebp/i18n/fr.ts +2 -12
- package/src/tool/pngAWebp/i18n/id.ts +182 -0
- package/src/tool/pngAWebp/i18n/it.ts +182 -0
- package/src/tool/pngAWebp/i18n/ja.ts +182 -0
- package/src/tool/pngAWebp/i18n/ko.ts +182 -0
- package/src/tool/pngAWebp/i18n/nl.ts +182 -0
- package/src/tool/pngAWebp/i18n/pl.ts +182 -0
- package/src/tool/pngAWebp/i18n/pt.ts +182 -0
- package/src/tool/pngAWebp/i18n/ru.ts +182 -0
- package/src/tool/pngAWebp/i18n/sv.ts +182 -0
- package/src/tool/pngAWebp/i18n/tr.ts +182 -0
- package/src/tool/pngAWebp/i18n/zh.ts +182 -0
- package/src/tool/pngAWebp/index.ts +12 -0
- package/src/tool/svgAJpg/i18n/de.ts +178 -0
- package/src/tool/svgAJpg/i18n/en.ts +8 -13
- package/src/tool/svgAJpg/i18n/es.ts +8 -13
- package/src/tool/svgAJpg/i18n/fr.ts +2 -12
- package/src/tool/svgAJpg/i18n/id.ts +178 -0
- package/src/tool/svgAJpg/i18n/it.ts +178 -0
- package/src/tool/svgAJpg/i18n/ja.ts +178 -0
- package/src/tool/svgAJpg/i18n/ko.ts +178 -0
- package/src/tool/svgAJpg/i18n/nl.ts +178 -0
- package/src/tool/svgAJpg/i18n/pl.ts +178 -0
- package/src/tool/svgAJpg/i18n/pt.ts +178 -0
- package/src/tool/svgAJpg/i18n/ru.ts +178 -0
- package/src/tool/svgAJpg/i18n/sv.ts +178 -0
- package/src/tool/svgAJpg/i18n/tr.ts +178 -0
- package/src/tool/svgAJpg/i18n/zh.ts +178 -0
- package/src/tool/svgAJpg/index.ts +12 -0
- package/src/tool/svgAPng/i18n/de.ts +178 -0
- package/src/tool/svgAPng/i18n/en.ts +8 -13
- package/src/tool/svgAPng/i18n/es.ts +31 -36
- package/src/tool/svgAPng/i18n/fr.ts +2 -12
- package/src/tool/svgAPng/i18n/id.ts +178 -0
- package/src/tool/svgAPng/i18n/it.ts +178 -0
- package/src/tool/svgAPng/i18n/ja.ts +178 -0
- package/src/tool/svgAPng/i18n/ko.ts +178 -0
- package/src/tool/svgAPng/i18n/nl.ts +178 -0
- package/src/tool/svgAPng/i18n/pl.ts +178 -0
- package/src/tool/svgAPng/i18n/pt.ts +178 -0
- package/src/tool/svgAPng/i18n/ru.ts +178 -0
- package/src/tool/svgAPng/i18n/sv.ts +178 -0
- package/src/tool/svgAPng/i18n/tr.ts +178 -0
- package/src/tool/svgAPng/i18n/zh.ts +178 -0
- package/src/tool/svgAPng/index.ts +12 -0
- package/src/tool/webpAIco/i18n/de.ts +183 -0
- package/src/tool/webpAIco/i18n/en.ts +8 -13
- package/src/tool/webpAIco/i18n/es.ts +9 -14
- package/src/tool/webpAIco/i18n/fr.ts +11 -16
- package/src/tool/webpAIco/i18n/id.ts +183 -0
- package/src/tool/webpAIco/i18n/it.ts +183 -0
- package/src/tool/webpAIco/i18n/ja.ts +183 -0
- package/src/tool/webpAIco/i18n/ko.ts +183 -0
- package/src/tool/webpAIco/i18n/nl.ts +183 -0
- package/src/tool/webpAIco/i18n/pl.ts +183 -0
- package/src/tool/webpAIco/i18n/pt.ts +183 -0
- package/src/tool/webpAIco/i18n/ru.ts +183 -0
- package/src/tool/webpAIco/i18n/sv.ts +183 -0
- package/src/tool/webpAIco/i18n/tr.ts +183 -0
- package/src/tool/webpAIco/i18n/zh.ts +183 -0
- package/src/tool/webpAIco/index.ts +12 -0
- package/src/tool/webpAJpg/i18n/de.ts +187 -0
- package/src/tool/webpAJpg/i18n/en.ts +9 -13
- package/src/tool/webpAJpg/i18n/es.ts +37 -42
- package/src/tool/webpAJpg/i18n/fr.ts +35 -40
- package/src/tool/webpAJpg/i18n/id.ts +182 -0
- package/src/tool/webpAJpg/i18n/it.ts +182 -0
- package/src/tool/webpAJpg/i18n/ja.ts +182 -0
- package/src/tool/webpAJpg/i18n/ko.ts +182 -0
- package/src/tool/webpAJpg/i18n/nl.ts +182 -0
- package/src/tool/webpAJpg/i18n/pl.ts +182 -0
- package/src/tool/webpAJpg/i18n/pt.ts +182 -0
- package/src/tool/webpAJpg/i18n/ru.ts +182 -0
- package/src/tool/webpAJpg/i18n/sv.ts +182 -0
- package/src/tool/webpAJpg/i18n/tr.ts +182 -0
- package/src/tool/webpAJpg/i18n/zh.ts +182 -0
- package/src/tool/webpAJpg/index.ts +12 -0
- package/src/tool/webpAPng/i18n/de.ts +182 -0
- package/src/tool/webpAPng/i18n/en.ts +8 -13
- package/src/tool/webpAPng/i18n/es.ts +35 -40
- package/src/tool/webpAPng/i18n/fr.ts +2 -12
- package/src/tool/webpAPng/i18n/id.ts +182 -0
- package/src/tool/webpAPng/i18n/it.ts +182 -0
- package/src/tool/webpAPng/i18n/ja.ts +182 -0
- package/src/tool/webpAPng/i18n/ko.ts +182 -0
- package/src/tool/webpAPng/i18n/nl.ts +182 -0
- package/src/tool/webpAPng/i18n/pl.ts +182 -0
- package/src/tool/webpAPng/i18n/pt.ts +182 -0
- package/src/tool/webpAPng/i18n/ru.ts +182 -0
- package/src/tool/webpAPng/i18n/sv.ts +182 -0
- package/src/tool/webpAPng/i18n/tr.ts +182 -0
- package/src/tool/webpAPng/i18n/zh.ts +182 -0
- 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 { GifAWebpLocaleContent } from '../index';
|
|
4
|
+
|
|
5
|
+
const slug = 'konvertera-gif-till-webp';
|
|
6
|
+
const title = 'Konvertera GIF till statisk WebP Online';
|
|
7
|
+
const description =
|
|
8
|
+
'Konvertera animerade GIF-filer till statisk WebP. Bevarar transparens. Ingen server. Bearbetas lokalt i din webbläsare. Gratis.';
|
|
9
|
+
|
|
10
|
+
const ui: ImageConverterUI = {
|
|
11
|
+
dragText: 'Dra GIF-filer hit...',
|
|
12
|
+
convertText: 'För att konvertera dem till WebP direkt',
|
|
13
|
+
selectFiles: 'Välj filer',
|
|
14
|
+
processedFiles: 'Bearbetade filer',
|
|
15
|
+
downloadAll: 'Ladda ner alla (.zip)',
|
|
16
|
+
pending: 'Väntande',
|
|
17
|
+
bibliographyTitle: 'Bibliografiska Referenser',
|
|
18
|
+
faqTitle: 'Vanliga Frågor',
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const faq: GifAWebpLocaleContent['faq'] = [
|
|
22
|
+
{
|
|
23
|
+
question: 'Varför frysa en animerad fil till det moderna statiska WebP-formatet?',
|
|
24
|
+
answer:
|
|
25
|
+
'WebP är Googles komprimeringsstandard. Det är extremt lättviktigt och behåller transparens på ett rent sätt. Genom att gå från GIF till WebP elimineras den tunga animationen och man uppnår en enorm vinst i webbhastighet.',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
question: 'Kommer den ursprungliga avataren att förbli transparent?',
|
|
29
|
+
answer:
|
|
30
|
+
'Ja, till skillnad från JPEG respekterar WebP-containern den komplexa alfakanalen. Alla dess silhuetter förblir perfekta precis som de var naturligt.',
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
question: 'Vart laddas filerna upp?',
|
|
34
|
+
answer:
|
|
35
|
+
'Ingen uppladdning sker. Bearbetningen utförs helt av webbläsarens JavaScript på din dator, med noll extern sändning.',
|
|
36
|
+
},
|
|
37
|
+
];
|
|
38
|
+
|
|
39
|
+
const howTo: GifAWebpLocaleContent['howTo'] = [
|
|
40
|
+
{
|
|
41
|
+
name: 'Starta en animerad lavin',
|
|
42
|
+
text: 'Flytta och släpp dussintals memes i den avgränsade zonen utan extern anslutning.',
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: 'Bevittna den stora osynliga förändringen',
|
|
46
|
+
text: 'Se hur en framstegsindikator ändras för varje millisekund medan den lokala canvas-avkodaren genererar resultatet.',
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: 'Spara din rena arsenal av resultat',
|
|
50
|
+
text: 'Hämta de extraherade filerna individuellt eller tryck på Ladda ner Zip för att paketera allt.',
|
|
51
|
+
},
|
|
52
|
+
];
|
|
53
|
+
|
|
54
|
+
const bibliography: GifAWebpLocaleContent['bibliography'] = [
|
|
55
|
+
{
|
|
56
|
+
name: 'GIF89a Specifikation',
|
|
57
|
+
url: 'https://www.w3.org/Graphics/GIF/spec-gif89a.txt',
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
name: 'Google WebP Dokumentation',
|
|
61
|
+
url: 'https://developers.google.com/speed/webp',
|
|
62
|
+
},
|
|
63
|
+
];
|
|
64
|
+
|
|
65
|
+
const seo: GifAWebpLocaleContent['seo'] = [
|
|
66
|
+
{
|
|
67
|
+
type: 'title',
|
|
68
|
+
text: 'GIF till WebP-konverterare: Den moderna ersättaren för tunga animationer',
|
|
69
|
+
level: 2,
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
type: 'paragraph',
|
|
73
|
+
html: 'Animerade GIF-filer är dinosaurierna i det moderna webbinnehållet: de förbrukar oproportionerligt mycket bandbredd, försämrar PageSpeed för alla sidor och står för en betydande procentandel av den totala vikten på tusentals webbplatser. En typisk animerad GIF på 5 MB kan bli en WebP-animation under 1 MB med samma visuella kvalitet. WebP är den moderna efterföljaren som Google specifikt utformat för att ersätta GIF på webben.',
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
type: 'title',
|
|
77
|
+
text: 'GIF vs WebP: klyftan mellan webbens dåtid och nutid',
|
|
78
|
+
level: 3,
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
type: 'paragraph',
|
|
82
|
+
html: 'GIF är ett format från 1987 som ursprungligen inte var designat för animationer – den funktionen kom till som ett senare hack. Dess 256-färgers palett, ineffektiva komprimering och oförmåga att hantera ljud gör det till ett föråldrat format. WebP, utvecklat av Google 2010, erbjuder överlägsen komprimering (både förlustfri och med förlust), inbyggt stöd för animationer och full alfakanal.',
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
type: 'paragraph',
|
|
86
|
+
html: 'För en webbutvecklare kan byte av GIF-filer mot WebP på sidor innebära en förbättring av Google PageSpeed-poängen med 10 till 30 punkter. Mindre sidvikt innebär bättre Core Web Vitals, bättre SEO-rankning och lägre bandbreddskostnader på servrar. Det är inte bara en estetisk förbättring – det är ett tekniskt arkitekturbeslut.',
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
type: 'title',
|
|
90
|
+
text: 'Arkitekturjämförelse: Lokal vs Moln',
|
|
91
|
+
level: 3,
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
type: 'comparative',
|
|
95
|
+
items: [
|
|
96
|
+
{
|
|
97
|
+
title: 'Molnkonverterare',
|
|
98
|
+
description: 'Plattformar som bearbetar dina GIF-filer på fjärrservrar.',
|
|
99
|
+
icon: 'mdi:cloud-upload',
|
|
100
|
+
pointIcon: 'mdi:close-circle-outline',
|
|
101
|
+
points: [
|
|
102
|
+
'Dina animationer reser över internet till tredjepartsservrar',
|
|
103
|
+
'Väntetid på grund av nätverkslatens vid uppladdning och nedladdning',
|
|
104
|
+
'Storleksbegränsningar (stora GIF-filer avvisas ofta)',
|
|
105
|
+
'Risk för filretention och analys',
|
|
106
|
+
],
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
title: 'Vår Lokala Arkitektur',
|
|
110
|
+
description: 'Direkt bearbetning på din hårdvara med Vanilla JS-teknik.',
|
|
111
|
+
icon: 'mdi:laptop-mac',
|
|
112
|
+
highlight: true,
|
|
113
|
+
points: [
|
|
114
|
+
'GIF-filen lämnar aldrig din enhet',
|
|
115
|
+
'Omedelbar konvertering utan nätverksväntan',
|
|
116
|
+
'Inga storleksbegränsningar: bearbeta GIF-filer av vilken vikt som helst',
|
|
117
|
+
'Total integritet: 0 byte skickas externt',
|
|
118
|
+
],
|
|
119
|
+
},
|
|
120
|
+
],
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
type: 'title',
|
|
124
|
+
text: 'Hur den lokala GIF till WebP-konverteringen fungerar',
|
|
125
|
+
level: 3,
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
type: 'paragraph',
|
|
129
|
+
html: 'Den lokala konverteringen använder HTML5 Canvas-API:et. GIF-filen laddas som ett inbyggt Image-element i webbläsaren. Genom att rita den på en canvas fångar grafikmotorn det första animationsbilden med all dess transparensinformation. Metoden <code>toDataURL(\'image/webp\')</code> exporterar bilden som WebP direkt i RAM-minnet.',
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
type: 'paragraph',
|
|
133
|
+
html: 'WebP stöder full alfakanal, så GIF-transparens bevaras i den resulterande WebP-filen utan att man behöver lägga till en bakgrund. WebP-komprimeringsalgoritmer är betydligt effektivare än GIF eller PNG, vilket förklarar den drastiska filstorleksminskningen av slutresultatet.',
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
type: 'tip',
|
|
137
|
+
title: 'Garanterad PageSpeed förbättring',
|
|
138
|
+
html: 'En animerad GIF på 5 MB kan bli en WebP under 1 MB. Om du har GIF-filer på dina webbsidor kan byte till WebP omedelbart förbättra Largest Contentful Paint (LCP) och Total Blocking Time (TBT), vilket direkt påverkar SEO-rankningen.',
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
type: 'title',
|
|
142
|
+
text: 'Användningsfall och kompatibilitet för resulterande WebP',
|
|
143
|
+
level: 3,
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
type: 'list',
|
|
147
|
+
icon: 'mdi:check-circle',
|
|
148
|
+
items: [
|
|
149
|
+
'Byta ut GIF-filer på webbsidor för att förbättra PageSpeed-poängen.',
|
|
150
|
+
'Optimerade avatarer och stickers för Discord, Slack och moderna plattformar.',
|
|
151
|
+
'Banners och visuellt material för digitala marknadsföringskampanjer.',
|
|
152
|
+
'Animationer i progressiva webbapplikationer (PWA).',
|
|
153
|
+
'Kompatibel med Chrome, Edge, Firefox, Safari 14+ och alla moderna webbläsare.',
|
|
154
|
+
],
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
type: 'title',
|
|
158
|
+
text: 'Slutsats: migrera dina GIF-filer till 2000-talet',
|
|
159
|
+
level: 3,
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
type: 'paragraph',
|
|
163
|
+
html: 'Varje GIF på din webbplats är en missad optimeringsmöjlighet. Vårt verktyg konverterar GIF-filer till WebP omedelbart, privat och utan begränsningar, direkt i din webbläsare. Resultatet: filer upp till 5 gånger mindre, perfekt transparens och kompatibilitet med alla moderna webbläsare.',
|
|
164
|
+
},
|
|
165
|
+
];
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
export const content: GifAWebpLocaleContent = {
|
|
169
|
+
slug,
|
|
170
|
+
title,
|
|
171
|
+
description,
|
|
172
|
+
ui,
|
|
173
|
+
seo,
|
|
174
|
+
faq,
|
|
175
|
+
bibliography,
|
|
176
|
+
howTo,
|
|
177
|
+
schemas: generateSchemas({ title, description, inLanguage: 'sv', 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 { GifAWebpLocaleContent } from '../index';
|
|
4
|
+
|
|
5
|
+
const slug = 'gif-den-webp-ye-donusturucu';
|
|
6
|
+
const title = 'GIF\'i Statik WebP\'ye Online Dönüştür';
|
|
7
|
+
const description =
|
|
8
|
+
'Hareketli GIF\'leri statik WebP\'ye dönüştürün. Şeffaflığı korur. Sunucu yok. Tarayıcınızda yerel olarak işlenir. Ücretsiz.';
|
|
9
|
+
|
|
10
|
+
const ui: ImageConverterUI = {
|
|
11
|
+
dragText: 'GIF dosyalarını sürükleyin...',
|
|
12
|
+
convertText: 'Anında WebP\'ye dönüştürmek için',
|
|
13
|
+
selectFiles: 'Dosyaları seçin',
|
|
14
|
+
processedFiles: 'İşlenen dosyalar',
|
|
15
|
+
downloadAll: 'Tümünü indir (.zip)',
|
|
16
|
+
pending: 'Bekliyor',
|
|
17
|
+
bibliographyTitle: 'Bibliyografik Referanslar',
|
|
18
|
+
faqTitle: 'Sıkça Sorulan Sorular',
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const faq: GifAWebpLocaleContent['faq'] = [
|
|
22
|
+
{
|
|
23
|
+
question: 'Neden hareketli bir dosyayı modern statik WebP formatına dondurmalıyım?',
|
|
24
|
+
answer:
|
|
25
|
+
'WebP, Google\'ın sıkıştırma standardıdır; oldukça hafiftir ve şeffaflığı temiz bir şekilde korur. GIF\'ten WebP\'ye geçmek, ağır animasyonu ortadan kaldırır ve web hızında muazzam bir kazanç sağlar.',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
question: 'Orijinal avatar şeffaf kalacak mı?',
|
|
29
|
+
answer:
|
|
30
|
+
'Evet, JPEG\'in aksine WebP kapsayıcısı karmaşık Alpha kanalına saygı duyar. Tüm silüetleri orijinalindeki gibi mükemmel kalacaktır.',
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
question: 'Dosyalar nereye yüklenecek?',
|
|
34
|
+
answer:
|
|
35
|
+
'Yükleme yok. İşleme, bilgisayarınızdaki tarayıcının Javascript\'i tarafından tamamen yerel olarak gerçekleştirilir, uzaktan gönderim sıfırdır.',
|
|
36
|
+
},
|
|
37
|
+
];
|
|
38
|
+
|
|
39
|
+
const howTo: GifAWebpLocaleContent['howTo'] = [
|
|
40
|
+
{
|
|
41
|
+
name: 'Hareketli bir çığ başlatın',
|
|
42
|
+
text: 'Düzinelerce memeyi uzaktan bağlantı olmadan sınırlı bölgeye taşıyın ve bırakın.',
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: 'Büyük görünmez değişime tanık olun',
|
|
46
|
+
text: 'Yerel canvas kod çözücü çıktıyı oluştururken milisaniye başına değişen ilerleme göstergesini izleyin.',
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: 'Temiz sonuç arsenalini kaydedin',
|
|
50
|
+
text: 'Çıkarılan dosyaları tek tek alın veya her şeyi paketlemek için Zip İndir düğmesine basın.',
|
|
51
|
+
},
|
|
52
|
+
];
|
|
53
|
+
|
|
54
|
+
const bibliography: GifAWebpLocaleContent['bibliography'] = [
|
|
55
|
+
{
|
|
56
|
+
name: 'GIF89a Spesifikasyonu',
|
|
57
|
+
url: 'https://www.w3.org/Graphics/GIF/spec-gif89a.txt',
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
name: 'Google WebP Dokümantasyonu',
|
|
61
|
+
url: 'https://developers.google.com/speed/webp',
|
|
62
|
+
},
|
|
63
|
+
];
|
|
64
|
+
|
|
65
|
+
const seo: GifAWebpLocaleContent['seo'] = [
|
|
66
|
+
{
|
|
67
|
+
type: 'title',
|
|
68
|
+
text: 'GIF to WebP Dönüştürücü: Ağır Animasyonlar İçin Modern Alternatif',
|
|
69
|
+
level: 2,
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
type: 'paragraph',
|
|
73
|
+
html: 'Hareketli GIF\'ler modern web içeriğinin dinozorlarıdır: Orantısız bant genişliği tüketirler, her sayfanın PageSpeed değerini düşürürler ve binlerce web sitesindeki toplam ağırlığın önemli bir yüzdesinden sorumludurlar. Tipik bir 5 MB hareketli GIF, aynı görsel kalite ile 1 MB\'ın altında bir WebP animasyonuna dönüşebilir. WebP, Google tarafından web\'de GIF\'in yerini alması için özel olarak tasarlanmış modern bir pillettir.',
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
type: 'title',
|
|
77
|
+
text: 'GIF vs WebP: Web\'in geçmişi ve bugünü arasındaki uçurum',
|
|
78
|
+
level: 3,
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
type: 'paragraph',
|
|
82
|
+
html: 'GIF, aslen animasyonlar için tasarlanmamış 1987 yapımı bir formattır; bu özellik daha sonra bir "hack" olarak eklenmiştir. 256 renk paleti, verimsiz sıkıştırması ve sesi işleyememesi onu eski bir format haline getirir. Google tarafından 2010 yılında geliştirilen WebP, hem kayıplı hem de kayıpsız üstün sıkıştırma, yerel animasyon desteği ve tam alfa kanalı sunar.',
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
type: 'paragraph',
|
|
86
|
+
html: 'Bir web geliştiricisi için, sayfalardaki GIF\'leri WebP ile değiştirmek, Google PageSpeed puanında 10 ila 30 puanlık bir iyileşme anlamına gelebilir. Daha az sayfa ağırlığı, daha iyi Core Web Vitals, daha iyi SEO sıralamaları ve sunucularda daha düşük bant genişliği maliyetleri demektir. Bu sadece estetik bir iyileştirme değil, teknik bir mimari karardır.',
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
type: 'title',
|
|
90
|
+
text: 'Mimari Karşılaştırması: Yerel vs Bulut',
|
|
91
|
+
level: 3,
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
type: 'comparative',
|
|
95
|
+
items: [
|
|
96
|
+
{
|
|
97
|
+
title: 'Bulut Dönüştürücüler',
|
|
98
|
+
description: 'GIF\'lerinizi uzak sunucularda işleyen platformlar.',
|
|
99
|
+
icon: 'mdi:cloud-upload',
|
|
100
|
+
pointIcon: 'mdi:close-circle-outline',
|
|
101
|
+
points: [
|
|
102
|
+
'Animasyonlarınız internet üzerinden üçüncü taraf sunuculara seyahat eder',
|
|
103
|
+
'Yükleme ve indirme sırasında ağ gecikmesi nedeniyle bekleme süresi',
|
|
104
|
+
'Boyut sınırları (büyük GIF\'ler genellikle reddedilir)',
|
|
105
|
+
'Dosya saklama ve analiz riski',
|
|
106
|
+
],
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
title: 'Bizim Yerel Mimarimiz',
|
|
110
|
+
description: 'Vanilla JS teknolojisini kullanarak doğrudan donanımınızda işleme.',
|
|
111
|
+
icon: 'mdi:laptop-mac',
|
|
112
|
+
highlight: true,
|
|
113
|
+
points: [
|
|
114
|
+
'GIF asla cihazınızdan ayrılmaz',
|
|
115
|
+
'Ağ bekleyişi olmadan anında dönüşüm',
|
|
116
|
+
'Boyut sınırı yok: Her ağırlıktaki GIF\'leri işleyin',
|
|
117
|
+
'Tam gizlilik: Harici olarak 0 bayt gönderilir',
|
|
118
|
+
],
|
|
119
|
+
},
|
|
120
|
+
],
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
type: 'title',
|
|
124
|
+
text: 'Yerel GIF to WebP dönüşümü nasıl çalışır?',
|
|
125
|
+
level: 3,
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
type: 'paragraph',
|
|
129
|
+
html: 'Yerel dönüşüm HTML5 Canvas API\'sini kullanır. GIF, yerel bir tarayıcı Image öğesi olarak yüklenir. Bir tuvale çizilerek, grafik motoru tüm şeffaflık bilgileriyle birlikte ilk animasyon karesini yakalar. <code>toDataURL(\'image/webp\')</code> yöntemi, kareyi doğrudan RAM\'de WebP olarak dışa aktarır.',
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
type: 'paragraph',
|
|
133
|
+
html: 'WebP tam alfa kanalını destekler, bu nedenle GIF şeffaflıkları, bir arka plan eklemeye gerek kalmadan sonuçtaki WebP\'de korunur. WebP sıkıştırma algoritmaları GIF veya PNG\'den önemli ölçüde daha verimlidir, bu da nihai çıktının dosya boyutundaki radikal azalmayı açıklar.',
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
type: 'tip',
|
|
137
|
+
title: 'Garantili PageSpeed iyileştirmesi',
|
|
138
|
+
html: '5 MB\'lık hareketli bir GIF, 1 MB\'ın altında bir WebP olabilir. Web sitenizin sayfalarında GIF\'ler varsa, bunları WebP ile değiştirmek Largest Contentful Paint (LCP) ve Total Blocking Time (TBT) değerlerinizi anında iyileştirerek SEO sıralamalarını doğrudan etkileyebilir.',
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
type: 'title',
|
|
142
|
+
text: 'Sonuç WebP\'nin kullanım durumları ve uyumluluğu',
|
|
143
|
+
level: 3,
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
type: 'list',
|
|
147
|
+
icon: 'mdi:check-circle',
|
|
148
|
+
items: [
|
|
149
|
+
'PageSpeed puanlarını artırmak için web sayfalarındaki GIF\'lerin değiştirilmesi.',
|
|
150
|
+
'Discord, Slack ve modern platformlar için optimize edilmiş avatarlar ve çıkartmalar.',
|
|
151
|
+
'Dijital pazarlama kampanyaları için bannerlar ve görseller.',
|
|
152
|
+
'Progresif web uygulamalarındaki (PWA) animasyonlar.',
|
|
153
|
+
'Chrome, Edge, Firefox, Safari 14+ ve tüm modern tarayıcılarla uyumludur.',
|
|
154
|
+
],
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
type: 'title',
|
|
158
|
+
text: 'Sonuç: GIF\'lerinizi 21. yüzyıla taşıyın',
|
|
159
|
+
level: 3,
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
type: 'paragraph',
|
|
163
|
+
html: 'Web sitenizdeki her GIF, kaçırılmış bir optimizasyon fırsatıdır. Aracımız GIF\'leri anında, özel olarak ve sınırsız bir şekilde doğrudan tarayıcınızda WebP\'ye dönüştürür. Sonuç: 5 kata kadar daha küçük dosyalar, mükemmel şeffaflık ve tüm modern tarayıcılarla uyumluluk.',
|
|
164
|
+
},
|
|
165
|
+
];
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
export const content: GifAWebpLocaleContent = {
|
|
169
|
+
slug,
|
|
170
|
+
title,
|
|
171
|
+
description,
|
|
172
|
+
ui,
|
|
173
|
+
seo,
|
|
174
|
+
faq,
|
|
175
|
+
bibliography,
|
|
176
|
+
howTo,
|
|
177
|
+
schemas: generateSchemas({ title, description, inLanguage: 'tr', 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 { GifAWebpLocaleContent } from '../index';
|
|
4
|
+
|
|
5
|
+
const slug = 'gif-to-webp-converter';
|
|
6
|
+
const title = '在线将 GIF 转换为静态 WebP';
|
|
7
|
+
const description =
|
|
8
|
+
'将动态 GIF 转换为静态 WebP。保留透明度。无需服务器。在浏览器中本地处理。免费。';
|
|
9
|
+
|
|
10
|
+
const ui: ImageConverterUI = {
|
|
11
|
+
dragText: '拖入 GIF 文件...',
|
|
12
|
+
convertText: '立即将其转换为 WebP',
|
|
13
|
+
selectFiles: '选择文件',
|
|
14
|
+
processedFiles: '已处理文件',
|
|
15
|
+
downloadAll: '下载全部 (.zip)',
|
|
16
|
+
pending: '等待中',
|
|
17
|
+
bibliographyTitle: '参考文献',
|
|
18
|
+
faqTitle: '常见问题',
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const faq: GifAWebpLocaleContent['faq'] = [
|
|
22
|
+
{
|
|
23
|
+
question: '为什么要将动态文件切换为现代静态 WebP 格式?',
|
|
24
|
+
answer:
|
|
25
|
+
'WebP 是 Google 的压缩标准;它非常轻量且能干净地保留透明度。从 GIF 切换到 WebP 可以消除沉重的动画,并获得巨大的网页速度提升。',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
question: '原始头像会保持透明吗?',
|
|
29
|
+
answer:
|
|
30
|
+
'是的,与 JPEG 不同,WebP 容器遵循复杂的 Alpha 通道。所有的轮廓都将像原生一样保持完美。',
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
question: '文件会上传到哪里?',
|
|
34
|
+
answer:
|
|
35
|
+
'没有上传。处理完全由您 PC 上的浏览器 Javascript 执行,零远程发送。',
|
|
36
|
+
},
|
|
37
|
+
];
|
|
38
|
+
|
|
39
|
+
const howTo: GifAWebpLocaleContent['howTo'] = [
|
|
40
|
+
{
|
|
41
|
+
name: '启动动态文件处理',
|
|
42
|
+
text: '在没有远程连接的情况下,将数十个表情包移动并放入划定区域。',
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: '见证伟大的隐形变化',
|
|
46
|
+
text: '当本地 Canvas 解码器生成输出时,观察每毫秒变化的进度指示器。',
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: '保存您干净的结果集',
|
|
50
|
+
text: '单独获取提取的文件,或按“下载 Zip”打包所有内容。',
|
|
51
|
+
},
|
|
52
|
+
];
|
|
53
|
+
|
|
54
|
+
const bibliography: GifAWebpLocaleContent['bibliography'] = [
|
|
55
|
+
{
|
|
56
|
+
name: 'GIF89a 规范',
|
|
57
|
+
url: 'https://www.w3.org/Graphics/GIF/spec-gif89a.txt',
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
name: 'Google WebP 文档',
|
|
61
|
+
url: 'https://developers.google.com/speed/webp',
|
|
62
|
+
},
|
|
63
|
+
];
|
|
64
|
+
|
|
65
|
+
const seo: GifAWebpLocaleContent['seo'] = [
|
|
66
|
+
{
|
|
67
|
+
type: 'title',
|
|
68
|
+
text: 'GIF 转 WebP 转换器:沉重动画的现代替代方案',
|
|
69
|
+
level: 2,
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
type: 'paragraph',
|
|
73
|
+
html: '动态 GIF 是现代网络内容的恐龙:它们消耗不成比例的带宽,降低任何页面的 PageSpeed,并且在成千上万个网站的总重量中占有相当大的比例。一个典型的 5 MB 动态 GIF 在保持相同视觉质量的情况下可以变成 1 MB 以下的 WebP 动画。WebP 是 Google 专门为在网络上取代 GIF 而设计的现代继任者。',
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
type: 'title',
|
|
77
|
+
text: 'GIF vs WebP:网络过去与现状之间的鸿沟',
|
|
78
|
+
level: 3,
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
type: 'paragraph',
|
|
82
|
+
html: 'GIF 是一种 1987 年的格式,最初并非为动画设计——该功能是后来作为一种“黑客”手段加入的。它的 256 色调色板、低效率的压缩以及无法处理音频,使其成为一种过时的格式。WebP 由 Google 在 2010 年开发,提供卓越的有损和无损压缩、原生动画支持以及完整的 Alpha 通道。',
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
type: 'paragraph',
|
|
86
|
+
html: '对于 Web 开发人员来说,在页面上用 WebP 取代 GIF 可能意味着 Google PageSpeed 分数提高 10 到 30 分。更轻的页面重量意味着更好的 Core Web Vitals、更好的 SEO 排名以及更低的服务器带宽成本。这不仅仅是美学上的提升——它是一项技术架构决策。',
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
type: 'title',
|
|
90
|
+
text: '架构比较:本地 vs 云端',
|
|
91
|
+
level: 3,
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
type: 'comparative',
|
|
95
|
+
items: [
|
|
96
|
+
{
|
|
97
|
+
title: '云端转换器',
|
|
98
|
+
description: '在远程服务器上处理您的 GIF 的平台。',
|
|
99
|
+
icon: 'mdi:cloud-upload',
|
|
100
|
+
pointIcon: 'mdi:close-circle-outline',
|
|
101
|
+
points: [
|
|
102
|
+
'您的动画通过互联网传输到第三方服务器',
|
|
103
|
+
'由于上传和下载时的网络延迟造成的等待时间',
|
|
104
|
+
'大小限制(大的 GIF 经常被拒绝)',
|
|
105
|
+
'文件保留和分析的风险',
|
|
106
|
+
],
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
title: '我们的本地架构',
|
|
110
|
+
description: '使用 Vanilla JS 技术直接在您的硬件上进行处理。',
|
|
111
|
+
icon: 'mdi:laptop-mac',
|
|
112
|
+
highlight: true,
|
|
113
|
+
points: [
|
|
114
|
+
'GIF 永远不会离开您的设备',
|
|
115
|
+
'即时转换,无需网络等待',
|
|
116
|
+
'无大小限制:处理任何重量的 GIF',
|
|
117
|
+
'绝对隐私:0 字节向外发送',
|
|
118
|
+
],
|
|
119
|
+
},
|
|
120
|
+
],
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
type: 'title',
|
|
124
|
+
text: '本地 GIF 转 WebP 转换的工作原理',
|
|
125
|
+
level: 3,
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
type: 'paragraph',
|
|
129
|
+
html: '本地转换使用 HTML5 Canvas API。GIF 被加载为原生的浏览器 Image 元素。通过将其绘制到画布上,图形引擎会捕捉包含所有透明度信息的第一帧动画。<code>toDataURL(\'image/webp\')</code> 方法直接在 RAM 中将该帧导出为 WebP。',
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
type: 'paragraph',
|
|
133
|
+
html: 'WebP 支持完整的 Alpha 通道,因此 GIF 的透明度保留在生成的 WebP 中,无需添加背景。WebP 压缩算法的效率明显高于 GIF 或 PNG,这解释了最终输出文件大小的大幅降低。',
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
type: 'tip',
|
|
137
|
+
title: '保证网页速度提升',
|
|
138
|
+
html: '一个 5 MB 的动态 GIF 可以变成 1 MB 以下的 WebP。如果您的网站页面上有 GIF,用 WebP 替换它们可以立即改善您的 Largest Contentful Paint (LCP) 和 Total Blocking Time (TBT),直接影响 SEO 排名。',
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
type: 'title',
|
|
142
|
+
text: '生成的 WebP 的使用案例和兼容性',
|
|
143
|
+
level: 3,
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
type: 'list',
|
|
147
|
+
icon: 'mdi:check-circle',
|
|
148
|
+
items: [
|
|
149
|
+
'替换网页上的 GIF 以提高 PageSpeed 分数。',
|
|
150
|
+
'为 Discord、Slack 和现代平台优化的头像和贴纸。',
|
|
151
|
+
'用于数字营销活动的横幅和视觉效果。',
|
|
152
|
+
'渐进式 Web 应用程序 (PWA) 中的动画。',
|
|
153
|
+
'兼容 Chrome、Edge、Firefox、Safari 14+ 以及所有现代浏览器。',
|
|
154
|
+
],
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
type: 'title',
|
|
158
|
+
text: '结论:将您的 GIF 迁移到 21 世纪',
|
|
159
|
+
level: 3,
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
type: 'paragraph',
|
|
163
|
+
html: '您网站上的每一个 GIF 都是一次错失的优化机会。我们的工具直接在您的浏览器中即时、私密且无限制地将 GIF 转换为 WebP。结果:文件缩小高达 5 倍、完美的透明度,并与所有现代浏览器兼容。',
|
|
164
|
+
},
|
|
165
|
+
];
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
export const content: GifAWebpLocaleContent = {
|
|
169
|
+
slug,
|
|
170
|
+
title,
|
|
171
|
+
description,
|
|
172
|
+
ui,
|
|
173
|
+
seo,
|
|
174
|
+
faq,
|
|
175
|
+
bibliography,
|
|
176
|
+
howTo,
|
|
177
|
+
schemas: generateSchemas({ title, description, inLanguage: 'zh', faq, howTo }),
|
|
178
|
+
};
|
|
@@ -16,6 +16,18 @@ export const gifAWebp: ConvertersToolEntry<ImageConverterUI> = {
|
|
|
16
16
|
es: () => import('./i18n/es').then((m) => m.content),
|
|
17
17
|
en: () => import('./i18n/en').then((m) => m.content),
|
|
18
18
|
fr: () => import('./i18n/fr').then((m) => m.content),
|
|
19
|
+
de: () => import('./i18n/de').then((m) => m.content),
|
|
20
|
+
id: () => import('./i18n/id').then((m) => m.content),
|
|
21
|
+
it: () => import('./i18n/it').then((m) => m.content),
|
|
22
|
+
ja: () => import('./i18n/ja').then((m) => m.content),
|
|
23
|
+
ko: () => import('./i18n/ko').then((m) => m.content),
|
|
24
|
+
nl: () => import('./i18n/nl').then((m) => m.content),
|
|
25
|
+
pl: () => import('./i18n/pl').then((m) => m.content),
|
|
26
|
+
pt: () => import('./i18n/pt').then((m) => m.content),
|
|
27
|
+
ru: () => import('./i18n/ru').then((m) => m.content),
|
|
28
|
+
sv: () => import('./i18n/sv').then((m) => m.content),
|
|
29
|
+
tr: () => import('./i18n/tr').then((m) => m.content),
|
|
30
|
+
zh: () => import('./i18n/zh').then((m) => m.content),
|
|
19
31
|
},
|
|
20
32
|
};
|
|
21
33
|
|