@jjlmoya/utils-developer 1.3.0 → 1.5.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 +2 -1
- package/src/category/i18n/de.ts +34 -0
- package/src/category/i18n/id.ts +34 -0
- package/src/category/i18n/it.ts +34 -0
- package/src/category/i18n/ja.ts +34 -0
- package/src/category/i18n/ko.ts +34 -0
- package/src/category/i18n/nl.ts +34 -0
- package/src/category/i18n/pl.ts +34 -0
- package/src/category/i18n/pt.ts +34 -0
- package/src/category/i18n/ru.ts +34 -0
- package/src/category/i18n/sv.ts +34 -0
- package/src/category/i18n/tr.ts +34 -0
- package/src/category/i18n/zh.ts +34 -0
- package/src/category/index.ts +13 -1
- package/src/index.ts +12 -0
- package/src/tests/faq_count.test.ts +1 -1
- package/src/tests/i18n_coverage.test.ts +36 -0
- package/src/tests/locale_completeness.test.ts +2 -2
- package/src/tests/slug_uniqueness.test.ts +81 -0
- package/src/tool/aspectRatio/i18n/de.ts +177 -0
- package/src/tool/aspectRatio/i18n/id.ts +177 -0
- package/src/tool/aspectRatio/i18n/it.ts +177 -0
- package/src/tool/aspectRatio/i18n/ja.ts +178 -0
- package/src/tool/aspectRatio/i18n/ko.ts +178 -0
- package/src/tool/aspectRatio/i18n/nl.ts +178 -0
- package/src/tool/aspectRatio/i18n/pl.ts +177 -0
- package/src/tool/aspectRatio/i18n/pt.ts +177 -0
- package/src/tool/aspectRatio/i18n/ru.ts +177 -0
- package/src/tool/aspectRatio/i18n/sv.ts +177 -0
- package/src/tool/aspectRatio/i18n/tr.ts +177 -0
- package/src/tool/aspectRatio/i18n/zh.ts +178 -0
- package/src/tool/aspectRatio/index.ts +15 -7
- package/src/tool/calculadoraTiempoDatos/i18n/de.ts +150 -0
- package/src/tool/calculadoraTiempoDatos/i18n/id.ts +150 -0
- package/src/tool/calculadoraTiempoDatos/i18n/it.ts +150 -0
- package/src/tool/calculadoraTiempoDatos/i18n/ja.ts +151 -0
- package/src/tool/calculadoraTiempoDatos/i18n/ko.ts +151 -0
- package/src/tool/calculadoraTiempoDatos/i18n/nl.ts +150 -0
- package/src/tool/calculadoraTiempoDatos/i18n/pl.ts +150 -0
- package/src/tool/calculadoraTiempoDatos/i18n/pt.ts +150 -0
- package/src/tool/calculadoraTiempoDatos/i18n/ru.ts +151 -0
- package/src/tool/calculadoraTiempoDatos/i18n/sv.ts +150 -0
- package/src/tool/calculadoraTiempoDatos/i18n/tr.ts +150 -0
- package/src/tool/calculadoraTiempoDatos/i18n/zh.ts +151 -0
- package/src/tool/calculadoraTiempoDatos/index.ts +15 -7
- package/src/tool/colorConverter/i18n/de.ts +126 -0
- package/src/tool/colorConverter/i18n/id.ts +126 -0
- package/src/tool/colorConverter/i18n/it.ts +126 -0
- package/src/tool/colorConverter/i18n/ja.ts +127 -0
- package/src/tool/colorConverter/i18n/ko.ts +127 -0
- package/src/tool/colorConverter/i18n/nl.ts +126 -0
- package/src/tool/colorConverter/i18n/pl.ts +126 -0
- package/src/tool/colorConverter/i18n/pt.ts +126 -0
- package/src/tool/colorConverter/i18n/ru.ts +126 -0
- package/src/tool/colorConverter/i18n/sv.ts +126 -0
- package/src/tool/colorConverter/i18n/tr.ts +126 -0
- package/src/tool/colorConverter/i18n/zh.ts +127 -0
- package/src/tool/colorConverter/index.ts +15 -7
- package/src/tool/conversorExcelCsvHtml/i18n/de.ts +129 -0
- package/src/tool/conversorExcelCsvHtml/i18n/id.ts +129 -0
- package/src/tool/conversorExcelCsvHtml/i18n/it.ts +129 -0
- package/src/tool/conversorExcelCsvHtml/i18n/ja.ts +130 -0
- package/src/tool/conversorExcelCsvHtml/i18n/ko.ts +130 -0
- package/src/tool/conversorExcelCsvHtml/i18n/nl.ts +129 -0
- package/src/tool/conversorExcelCsvHtml/i18n/pl.ts +129 -0
- package/src/tool/conversorExcelCsvHtml/i18n/pt.ts +129 -0
- package/src/tool/conversorExcelCsvHtml/i18n/ru.ts +129 -0
- package/src/tool/conversorExcelCsvHtml/i18n/sv.ts +129 -0
- package/src/tool/conversorExcelCsvHtml/i18n/tr.ts +129 -0
- package/src/tool/conversorExcelCsvHtml/i18n/zh.ts +130 -0
- package/src/tool/conversorExcelCsvHtml/index.ts +15 -7
- package/src/tool/cronGenerator/i18n/de.ts +192 -0
- package/src/tool/cronGenerator/i18n/es.ts +2 -1
- package/src/tool/cronGenerator/i18n/fr.ts +2 -1
- package/src/tool/cronGenerator/i18n/id.ts +192 -0
- package/src/tool/cronGenerator/i18n/it.ts +192 -0
- package/src/tool/cronGenerator/i18n/ja.ts +192 -0
- package/src/tool/cronGenerator/i18n/ko.ts +192 -0
- package/src/tool/cronGenerator/i18n/nl.ts +192 -0
- package/src/tool/cronGenerator/i18n/pl.ts +192 -0
- package/src/tool/cronGenerator/i18n/pt.ts +192 -0
- package/src/tool/cronGenerator/i18n/ru.ts +192 -0
- package/src/tool/cronGenerator/i18n/sv.ts +192 -0
- package/src/tool/cronGenerator/i18n/tr.ts +192 -0
- package/src/tool/cronGenerator/i18n/zh.ts +192 -0
- package/src/tool/cronGenerator/index.ts +15 -7
- package/src/tool/cssSpecificityCalculator/i18n/de.ts +168 -0
- package/src/tool/cssSpecificityCalculator/i18n/id.ts +168 -0
- package/src/tool/cssSpecificityCalculator/i18n/it.ts +168 -0
- package/src/tool/cssSpecificityCalculator/i18n/ja.ts +169 -0
- package/src/tool/cssSpecificityCalculator/i18n/ko.ts +169 -0
- package/src/tool/cssSpecificityCalculator/i18n/nl.ts +168 -0
- package/src/tool/cssSpecificityCalculator/i18n/pl.ts +168 -0
- package/src/tool/cssSpecificityCalculator/i18n/pt.ts +168 -0
- package/src/tool/cssSpecificityCalculator/i18n/ru.ts +168 -0
- package/src/tool/cssSpecificityCalculator/i18n/sv.ts +168 -0
- package/src/tool/cssSpecificityCalculator/i18n/tr.ts +168 -0
- package/src/tool/cssSpecificityCalculator/i18n/zh.ts +169 -0
- package/src/tool/cssSpecificityCalculator/index.ts +15 -7
- package/src/tool/cssToInlineConverter/i18n/de.ts +160 -0
- package/src/tool/cssToInlineConverter/i18n/id.ts +160 -0
- package/src/tool/cssToInlineConverter/i18n/it.ts +160 -0
- package/src/tool/cssToInlineConverter/i18n/ja.ts +161 -0
- package/src/tool/cssToInlineConverter/i18n/ko.ts +161 -0
- package/src/tool/cssToInlineConverter/i18n/nl.ts +160 -0
- package/src/tool/cssToInlineConverter/i18n/pl.ts +160 -0
- package/src/tool/cssToInlineConverter/i18n/pt.ts +160 -0
- package/src/tool/cssToInlineConverter/i18n/ru.ts +160 -0
- package/src/tool/cssToInlineConverter/i18n/sv.ts +160 -0
- package/src/tool/cssToInlineConverter/i18n/tr.ts +160 -0
- package/src/tool/cssToInlineConverter/i18n/zh.ts +161 -0
- package/src/tool/cssToInlineConverter/index.ts +15 -7
- package/src/tool/duplicateCssRemover/i18n/de.ts +167 -0
- package/src/tool/duplicateCssRemover/i18n/id.ts +167 -0
- package/src/tool/duplicateCssRemover/i18n/it.ts +167 -0
- package/src/tool/duplicateCssRemover/i18n/ja.ts +168 -0
- package/src/tool/duplicateCssRemover/i18n/ko.ts +168 -0
- package/src/tool/duplicateCssRemover/i18n/nl.ts +167 -0
- package/src/tool/duplicateCssRemover/i18n/pl.ts +167 -0
- package/src/tool/duplicateCssRemover/i18n/pt.ts +167 -0
- package/src/tool/duplicateCssRemover/i18n/ru.ts +167 -0
- package/src/tool/duplicateCssRemover/i18n/sv.ts +167 -0
- package/src/tool/duplicateCssRemover/i18n/tr.ts +167 -0
- package/src/tool/duplicateCssRemover/i18n/zh.ts +168 -0
- package/src/tool/duplicateCssRemover/index.ts +15 -7
- package/src/tool/generadorSecurityTxt/i18n/de.ts +174 -0
- package/src/tool/generadorSecurityTxt/i18n/id.ts +174 -0
- package/src/tool/generadorSecurityTxt/i18n/it.ts +174 -0
- package/src/tool/generadorSecurityTxt/i18n/ja.ts +174 -0
- package/src/tool/generadorSecurityTxt/i18n/ko.ts +174 -0
- package/src/tool/generadorSecurityTxt/i18n/nl.ts +174 -0
- package/src/tool/generadorSecurityTxt/i18n/pl.ts +174 -0
- package/src/tool/generadorSecurityTxt/i18n/pt.ts +174 -0
- package/src/tool/generadorSecurityTxt/i18n/ru.ts +174 -0
- package/src/tool/generadorSecurityTxt/i18n/sv.ts +174 -0
- package/src/tool/generadorSecurityTxt/i18n/tr.ts +174 -0
- package/src/tool/generadorSecurityTxt/i18n/zh.ts +174 -0
- package/src/tool/generadorSecurityTxt/index.ts +15 -7
- package/src/tool/hashGenerator/i18n/de.ts +119 -0
- package/src/tool/hashGenerator/i18n/id.ts +119 -0
- package/src/tool/hashGenerator/i18n/it.ts +118 -0
- package/src/tool/hashGenerator/i18n/ja.ts +119 -0
- package/src/tool/hashGenerator/i18n/ko.ts +119 -0
- package/src/tool/hashGenerator/i18n/nl.ts +119 -0
- package/src/tool/hashGenerator/i18n/pl.ts +118 -0
- package/src/tool/hashGenerator/i18n/pt.ts +118 -0
- package/src/tool/hashGenerator/i18n/ru.ts +119 -0
- package/src/tool/hashGenerator/i18n/sv.ts +119 -0
- package/src/tool/hashGenerator/i18n/tr.ts +118 -0
- package/src/tool/hashGenerator/i18n/zh.ts +119 -0
- package/src/tool/hashGenerator/index.ts +15 -7
- package/src/tool/inspectorCertificadosSsl/i18n/de.ts +214 -0
- package/src/tool/inspectorCertificadosSsl/i18n/id.ts +215 -0
- package/src/tool/inspectorCertificadosSsl/i18n/it.ts +214 -0
- package/src/tool/inspectorCertificadosSsl/i18n/ja.ts +215 -0
- package/src/tool/inspectorCertificadosSsl/i18n/ko.ts +215 -0
- package/src/tool/inspectorCertificadosSsl/i18n/nl.ts +215 -0
- package/src/tool/inspectorCertificadosSsl/i18n/pl.ts +215 -0
- package/src/tool/inspectorCertificadosSsl/i18n/pt.ts +214 -0
- package/src/tool/inspectorCertificadosSsl/i18n/ru.ts +215 -0
- package/src/tool/inspectorCertificadosSsl/i18n/sv.ts +215 -0
- package/src/tool/inspectorCertificadosSsl/i18n/tr.ts +215 -0
- package/src/tool/inspectorCertificadosSsl/i18n/zh.ts +215 -0
- package/src/tool/inspectorCertificadosSsl/index.ts +24 -0
- package/src/tool/jsonFormatter/i18n/de.ts +157 -0
- package/src/tool/jsonFormatter/i18n/es.ts +2 -1
- package/src/tool/jsonFormatter/i18n/fr.ts +2 -1
- package/src/tool/jsonFormatter/i18n/id.ts +157 -0
- package/src/tool/jsonFormatter/i18n/it.ts +156 -0
- package/src/tool/jsonFormatter/i18n/ja.ts +157 -0
- package/src/tool/jsonFormatter/i18n/ko.ts +157 -0
- package/src/tool/jsonFormatter/i18n/nl.ts +157 -0
- package/src/tool/jsonFormatter/i18n/pl.ts +156 -0
- package/src/tool/jsonFormatter/i18n/pt.ts +156 -0
- package/src/tool/jsonFormatter/i18n/ru.ts +157 -0
- package/src/tool/jsonFormatter/i18n/sv.ts +157 -0
- package/src/tool/jsonFormatter/i18n/tr.ts +157 -0
- package/src/tool/jsonFormatter/i18n/zh.ts +157 -0
- package/src/tool/jsonFormatter/index.ts +15 -7
- package/src/tool/keycode/i18n/de.ts +161 -0
- package/src/tool/keycode/i18n/es.ts +2 -1
- package/src/tool/keycode/i18n/fr.ts +2 -1
- package/src/tool/keycode/i18n/id.ts +161 -0
- package/src/tool/keycode/i18n/it.ts +161 -0
- package/src/tool/keycode/i18n/ja.ts +161 -0
- package/src/tool/keycode/i18n/ko.ts +161 -0
- package/src/tool/keycode/i18n/nl.ts +161 -0
- package/src/tool/keycode/i18n/pl.ts +161 -0
- package/src/tool/keycode/i18n/pt.ts +160 -0
- package/src/tool/keycode/i18n/ru.ts +160 -0
- package/src/tool/keycode/i18n/sv.ts +160 -0
- package/src/tool/keycode/i18n/tr.ts +160 -0
- package/src/tool/keycode/i18n/zh.ts +161 -0
- package/src/tool/keycode/index.ts +15 -7
- package/src/tool/llmCostCalculator/i18n/de.ts +166 -0
- package/src/tool/llmCostCalculator/i18n/fr.ts +2 -1
- package/src/tool/llmCostCalculator/i18n/id.ts +166 -0
- package/src/tool/llmCostCalculator/i18n/it.ts +166 -0
- package/src/tool/llmCostCalculator/i18n/ja.ts +166 -0
- package/src/tool/llmCostCalculator/i18n/ko.ts +166 -0
- package/src/tool/llmCostCalculator/i18n/nl.ts +166 -0
- package/src/tool/llmCostCalculator/i18n/pl.ts +165 -0
- package/src/tool/llmCostCalculator/i18n/pt.ts +165 -0
- package/src/tool/llmCostCalculator/i18n/ru.ts +165 -0
- package/src/tool/llmCostCalculator/i18n/sv.ts +165 -0
- package/src/tool/llmCostCalculator/i18n/tr.ts +165 -0
- package/src/tool/llmCostCalculator/i18n/zh.ts +166 -0
- package/src/tool/llmCostCalculator/index.ts +24 -0
- package/src/tool/mobileMockupGenerator/i18n/de.ts +121 -0
- package/src/tool/mobileMockupGenerator/i18n/id.ts +121 -0
- package/src/tool/mobileMockupGenerator/i18n/it.ts +121 -0
- package/src/tool/mobileMockupGenerator/i18n/ja.ts +122 -0
- package/src/tool/mobileMockupGenerator/i18n/ko.ts +122 -0
- package/src/tool/mobileMockupGenerator/i18n/nl.ts +121 -0
- package/src/tool/mobileMockupGenerator/i18n/pl.ts +31 -0
- package/src/tool/mobileMockupGenerator/i18n/pt.ts +121 -0
- package/src/tool/mobileMockupGenerator/i18n/ru.ts +121 -0
- package/src/tool/mobileMockupGenerator/i18n/sv.ts +121 -0
- package/src/tool/mobileMockupGenerator/i18n/tr.ts +121 -0
- package/src/tool/mobileMockupGenerator/i18n/zh.ts +122 -0
- package/src/tool/mobileMockupGenerator/index.ts +24 -0
- package/src/tool/musicalTypography/i18n/de.ts +179 -0
- package/src/tool/musicalTypography/i18n/id.ts +179 -0
- package/src/tool/musicalTypography/i18n/it.ts +179 -0
- package/src/tool/musicalTypography/i18n/ja.ts +180 -0
- package/src/tool/musicalTypography/i18n/ko.ts +180 -0
- package/src/tool/musicalTypography/i18n/nl.ts +179 -0
- package/src/tool/musicalTypography/i18n/pl.ts +179 -0
- package/src/tool/musicalTypography/i18n/pt.ts +101 -0
- package/src/tool/musicalTypography/i18n/ru.ts +47 -0
- package/src/tool/musicalTypography/i18n/sv.ts +29 -0
- package/src/tool/musicalTypography/i18n/tr.ts +29 -0
- package/src/tool/musicalTypography/i18n/zh.ts +30 -0
- package/src/tool/musicalTypography/index.ts +15 -7
- package/src/tool/placeholderGenerator/i18n/de.ts +176 -0
- package/src/tool/placeholderGenerator/i18n/id.ts +176 -0
- package/src/tool/placeholderGenerator/i18n/it.ts +176 -0
- package/src/tool/placeholderGenerator/i18n/ja.ts +177 -0
- package/src/tool/placeholderGenerator/i18n/ko.ts +177 -0
- package/src/tool/placeholderGenerator/i18n/nl.ts +176 -0
- package/src/tool/placeholderGenerator/i18n/pl.ts +176 -0
- package/src/tool/placeholderGenerator/i18n/pt.ts +176 -0
- package/src/tool/placeholderGenerator/i18n/ru.ts +176 -0
- package/src/tool/placeholderGenerator/i18n/sv.ts +176 -0
- package/src/tool/placeholderGenerator/i18n/tr.ts +176 -0
- package/src/tool/placeholderGenerator/i18n/zh.ts +177 -0
- package/src/tool/placeholderGenerator/index.ts +24 -0
- package/src/tool/promptLibrary/i18n/de.ts +131 -0
- package/src/tool/promptLibrary/i18n/id.ts +131 -0
- package/src/tool/promptLibrary/i18n/it.ts +131 -0
- package/src/tool/promptLibrary/i18n/ja.ts +132 -0
- package/src/tool/promptLibrary/i18n/ko.ts +132 -0
- package/src/tool/promptLibrary/i18n/nl.ts +131 -0
- package/src/tool/promptLibrary/i18n/pl.ts +28 -0
- package/src/tool/promptLibrary/i18n/pt.ts +101 -0
- package/src/tool/promptLibrary/i18n/ru.ts +101 -0
- package/src/tool/promptLibrary/i18n/sv.ts +93 -0
- package/src/tool/promptLibrary/i18n/tr.ts +93 -0
- package/src/tool/promptLibrary/i18n/zh.ts +94 -0
- package/src/tool/promptLibrary/index.ts +24 -0
- package/src/tool/readabilityCalculator/i18n/de.ts +133 -0
- package/src/tool/readabilityCalculator/i18n/id.ts +133 -0
- package/src/tool/readabilityCalculator/i18n/it.ts +133 -0
- package/src/tool/readabilityCalculator/i18n/ja.ts +134 -0
- package/src/tool/readabilityCalculator/i18n/ko.ts +134 -0
- package/src/tool/readabilityCalculator/i18n/nl.ts +133 -0
- package/src/tool/readabilityCalculator/i18n/pl.ts +29 -0
- package/src/tool/readabilityCalculator/i18n/pt.ts +91 -0
- package/src/tool/readabilityCalculator/i18n/ru.ts +91 -0
- package/src/tool/readabilityCalculator/i18n/sv.ts +43 -0
- package/src/tool/readabilityCalculator/i18n/tr.ts +43 -0
- package/src/tool/readabilityCalculator/i18n/zh.ts +44 -0
- package/src/tool/readabilityCalculator/index.ts +24 -0
- package/src/tool/svgSanitizer/i18n/de.ts +125 -0
- package/src/tool/svgSanitizer/i18n/id.ts +125 -0
- package/src/tool/svgSanitizer/i18n/it.ts +125 -0
- package/src/tool/svgSanitizer/i18n/ja.ts +126 -0
- package/src/tool/svgSanitizer/i18n/ko.ts +126 -0
- package/src/tool/svgSanitizer/i18n/nl.ts +125 -0
- package/src/tool/svgSanitizer/i18n/pl.ts +125 -0
- package/src/tool/svgSanitizer/i18n/pt.ts +30 -0
- package/src/tool/svgSanitizer/i18n/ru.ts +126 -0
- package/src/tool/svgSanitizer/i18n/sv.ts +126 -0
- package/src/tool/svgSanitizer/i18n/tr.ts +126 -0
- package/src/tool/svgSanitizer/i18n/zh.ts +126 -0
- package/src/tool/svgSanitizer/index.ts +24 -0
- package/src/tool/svgToCss/i18n/de.ts +174 -0
- package/src/tool/svgToCss/i18n/id.ts +174 -0
- package/src/tool/svgToCss/i18n/it.ts +174 -0
- package/src/tool/svgToCss/i18n/ja.ts +175 -0
- package/src/tool/svgToCss/i18n/ko.ts +175 -0
- package/src/tool/svgToCss/i18n/nl.ts +174 -0
- package/src/tool/svgToCss/i18n/pl.ts +174 -0
- package/src/tool/svgToCss/i18n/pt.ts +174 -0
- package/src/tool/svgToCss/i18n/ru.ts +174 -0
- package/src/tool/svgToCss/i18n/sv.ts +174 -0
- package/src/tool/svgToCss/i18n/tr.ts +174 -0
- package/src/tool/svgToCss/i18n/zh.ts +175 -0
- package/src/tool/svgToCss/index.ts +15 -7
- package/src/tool/urlCleaner/i18n/de.ts +116 -0
- package/src/tool/urlCleaner/i18n/id.ts +116 -0
- package/src/tool/urlCleaner/i18n/it.ts +116 -0
- package/src/tool/urlCleaner/i18n/ja.ts +117 -0
- package/src/tool/urlCleaner/i18n/ko.ts +117 -0
- package/src/tool/urlCleaner/i18n/nl.ts +116 -0
- package/src/tool/urlCleaner/i18n/pl.ts +29 -0
- package/src/tool/urlCleaner/i18n/pt.ts +43 -0
- package/src/tool/urlCleaner/i18n/ru.ts +43 -0
- package/src/tool/urlCleaner/i18n/sv.ts +43 -0
- package/src/tool/urlCleaner/i18n/tr.ts +43 -0
- package/src/tool/urlCleaner/i18n/zh.ts +44 -0
- package/src/tool/urlCleaner/index.ts +24 -0
- package/src/tool/urlEncoderDecoder/i18n/de.ts +163 -0
- package/src/tool/urlEncoderDecoder/i18n/id.ts +163 -0
- package/src/tool/urlEncoderDecoder/i18n/it.ts +163 -0
- package/src/tool/urlEncoderDecoder/i18n/ja.ts +163 -0
- package/src/tool/urlEncoderDecoder/i18n/ko.ts +163 -0
- package/src/tool/urlEncoderDecoder/i18n/nl.ts +163 -0
- package/src/tool/urlEncoderDecoder/i18n/pl.ts +162 -0
- package/src/tool/urlEncoderDecoder/i18n/pt.ts +162 -0
- package/src/tool/urlEncoderDecoder/i18n/ru.ts +163 -0
- package/src/tool/urlEncoderDecoder/i18n/sv.ts +163 -0
- package/src/tool/urlEncoderDecoder/i18n/tr.ts +162 -0
- package/src/tool/urlEncoderDecoder/i18n/zh.ts +163 -0
- package/src/tool/urlEncoderDecoder/index.ts +15 -7
- package/src/tool/utmGenerator/i18n/de.ts +118 -0
- package/src/tool/utmGenerator/i18n/id.ts +118 -0
- package/src/tool/utmGenerator/i18n/it.ts +118 -0
- package/src/tool/utmGenerator/i18n/ja.ts +118 -0
- package/src/tool/utmGenerator/i18n/ko.ts +118 -0
- package/src/tool/utmGenerator/i18n/nl.ts +118 -0
- package/src/tool/utmGenerator/i18n/pl.ts +117 -0
- package/src/tool/utmGenerator/i18n/pt.ts +118 -0
- package/src/tool/utmGenerator/i18n/ru.ts +118 -0
- package/src/tool/utmGenerator/i18n/sv.ts +118 -0
- package/src/tool/utmGenerator/i18n/tr.ts +117 -0
- package/src/tool/utmGenerator/i18n/zh.ts +118 -0
- package/src/tool/utmGenerator/index.ts +15 -7
- package/src/types.ts +1 -2
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { ReadabilityCalculatorUI } from '../ui';
|
|
4
|
+
const slug = 'visuell-lasbarhetskalkylator';
|
|
5
|
+
const title = 'Visuell Läsbarhetskalkylatör WCAG och APCA';
|
|
6
|
+
const description = 'Kontrollera den verkliga kontrasten i dina designer med APCA (WCAG 3.0). Analysera hur teckensnittssgravur och storlek påverkar faktisk läsbarhet.';
|
|
7
|
+
const faqData = [
|
|
8
|
+
{ question: 'Vad är APCA och varför skiljer det sig från WCAG 2.1?', answer: 'APCA är Advanced Perceptual Contrast Algorithm utvecklad för WCAG 3.0. Till skillnad från den gamla enkla formeln använder APCA matematiska modeller som efterliknar hur människans hjärna uppfattar kontrast.' },
|
|
9
|
+
{ question: 'Vad betyder Lc-värdet?', answer: 'Lc (Lightness Contrast) är kontraszvärdet som genereras av APCA. Ett värde på 100 representerar ideal maximal kontrast, medan värden under 60 börjar vara kritiska för kontinuerlig läsning av text.' },
|
|
10
|
+
{ question: 'Hur påverkar teckensnittssgravuren läsbarheten?', answer: 'Tunna/Lätta typsnitt kräver mycket högre kontrast för att vara läsbara. APCA straffar lågviktiga typsnitt, vilket indikerar att en design som godkänner WCAG med weight-100 typsnitt kan vara oläslig i praktiken.' },
|
|
11
|
+
{ question: 'Är denna kalkylator privat?', answer: 'Ja, alla beräkningar utförs lokalt i din webbläsare. Färgerna och inställningarna du analyserar skickas aldrig till någon server, vilket garanterar fullständig integritet för dina designprojekt.' },
|
|
12
|
+
];
|
|
13
|
+
const howToData = [
|
|
14
|
+
{ name: 'Välj Färger', text: 'Använd färgväljarna för att ställa in textfärg och bakgrundsfärg för ditt design.' },
|
|
15
|
+
{ name: 'Justera Typografi', text: 'Flytta skjutreglagen för teckensnittstorlek och vikt för att simulera din faktiska typografi.' },
|
|
16
|
+
{ name: 'Läs Resultaten', text: 'Kontrollera WCAG 2.1-förhållandet och APCA Lc-värdet för att veta om ditt design är tillgängligt.' },
|
|
17
|
+
{ name: 'Granska Rekommendationer', text: 'Kontrollera APCA-specifika rekommendationer för brödtext, liten text och UI-element.' },
|
|
18
|
+
];
|
|
19
|
+
const faqSchema: WithContext<FAQPage> = { '@context': 'https://schema.org', '@type': 'FAQPage', mainEntity: faqData.map((item) => ({ '@type': 'Question', name: item.question, acceptedAnswer: { '@type': 'Answer', text: item.answer } })) };
|
|
20
|
+
const howToSchema: WithContext<HowToThing> = { '@context': 'https://schema.org', '@type': 'HowTo', name: title, description, step: howToData.map((s, i) => ({ '@type': 'HowToStep', position: i + 1, name: s.name, text: s.text })) };
|
|
21
|
+
const appSchema: WithContext<SoftwareApplication> = { '@context': 'https://schema.org', '@type': 'SoftwareApplication', name: title, description, applicationCategory: 'UtilityApplication', operatingSystem: 'All', offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' }, inLanguage: 'sv' };
|
|
22
|
+
const ui: ReadabilityCalculatorUI = { labelColors: 'Basfärger', labelText: 'Text', labelBg: 'Bakgrund', labelTypo: 'Typografi', labelFontSize: 'Teckensnitsstorlek', labelFontWeight: 'Vikt', labelCompare: 'Kontrastjämförelse', labelPreview: 'Perceptuell Förhandsvisning', labelApcaRecs: 'APCA Rekommendationer', labelBody: 'Läsningstext (Brödtext)', labelSmall: 'Liten Text / Bildtext', labelUi: 'UI / Knappar', statusYes: 'Ja', statusNo: 'Nej', wcagAAA: 'Godkänner AAA', wcagAA: 'Godkänner AA', wcagLarge: 'Endast Stor Text', wcagFail: 'Misslyckas', apcaExcellent: 'Utmärkt', apcaGood: 'Bra', apcaMinimal: 'Minimal', apcaPoor: 'Dålig', previewText: 'Visuell läsbarhet är inte bara matematik. Det är hur ljus och skugga interagerar med dina ögon.', wcagRatioLabel: 'WCAG 2.1 Förhållande', apcaLcLabel: 'APCA Lc (WCAG 3)' };
|
|
23
|
+
export const content: ToolLocaleContent<ReadabilityCalculatorUI> = {
|
|
24
|
+
slug, title, description, ui,
|
|
25
|
+
faqTitle: 'Vanliga Frågor',
|
|
26
|
+
faq: faqData,
|
|
27
|
+
bibliographyTitle: 'Resurser på Kontrast och APCA',
|
|
28
|
+
bibliography: [
|
|
29
|
+
{ name: 'W3C: WCAG 3.0 Draft (Silver)', url: 'https://www.w3.org/WAI/standards-guidelines/wcag/wcag3-intro/' },
|
|
30
|
+
{ name: 'Myndex: APCA Referensguide', url: 'https://apcaw3.myndex.com/' },
|
|
31
|
+
{ name: 'MDN: Tillgänglighet och Färgkontrast', url: 'https://developer.mozilla.org/en-US/docs/Web/Accessibility/Understanding_WCAG/Perceivable/Color_contrast' },
|
|
32
|
+
],
|
|
33
|
+
howTo: howToData,
|
|
34
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
35
|
+
seo: [
|
|
36
|
+
{ type: 'title', text: 'Visuell Läsbarhetskalkylatör (WCAG vs APCA)', level: 2 },
|
|
37
|
+
{ type: 'paragraph', html: 'Förstå hur dina färger och typografi påverkar faktisk läsning med den nya perceptuella tillgänglighetsstandarden. WCAG 2.1 använder en enkel matematisk formel från 2008. <strong>APCA</strong> är den nya modell som föreslås för <strong>WCAG 3.0</strong> som efterliknar mänsklig perception.' },
|
|
38
|
+
{ type: 'title', text: 'Nyckelpoänger för APCA', level: 3 },
|
|
39
|
+
{ type: 'list', items: [ '<strong>Polaritet:</strong> Förstår att Mörkt läge uppfattas annorlunda än Ljust läge.', '<strong>Teckensnittssgravur:</strong> Tilldelar specifika kontrastnivåer (Lc) baserat på typografigravur.', '<strong>Linjäritet:</strong> Åtgärdar matematiska felaktighetar i 2008 års relativa luminansmodell.' ] },
|
|
40
|
+
{ type: 'title', text: 'Rekommenderade APCA-nivåer', level: 3 },
|
|
41
|
+
{ type: 'list', items: [ '<strong>Lc 90+:</strong> Idealisk för mycket liten eller låg gravur text.', '<strong>Lc 75:</strong> Standarden för huvudsaklig läsningstext.', '<strong>Lc 60:</strong> Minimum för läsbart medelstorlek innehål.', '<strong>Lc 45:</strong> Minimum för stora eller dekorativa element.' ] },
|
|
42
|
+
],
|
|
43
|
+
};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { ReadabilityCalculatorUI } from '../ui';
|
|
4
|
+
const slug = 'gorsel-okunabilirlik-hesaplayicisi';
|
|
5
|
+
const title = 'Görsel Okunabilirlik Hesaplayıcısı WCAG ve APCA';
|
|
6
|
+
const description = 'APCA (WCAG 3.0) ile tasarımlarınızın gerçek kontrastını kontrol edin. Yazı tipi ağırlığı ve boyutunun gerçek okunabilirliği nasıl etkilediğini analiz edin.';
|
|
7
|
+
const faqData = [
|
|
8
|
+
{ question: 'APCA nedir ve WCAG 2.1\'den neden farklıdır?', answer: 'APCA, WCAG 3.0 için geliştirilen Gelişmiş Algısal Kontrast Algoritmasıdır. Eski basit formülün aksine, APCA insan beyninin kontrastı nasıl algıladığını taklit eden matematiksel modeller kullanır.' },
|
|
9
|
+
{ question: 'Lc değeri ne anlama geliyor?', answer: 'Lc (Lightness Contrast), APCA tarafından oluşturulan kontrast değeridir. 100 değeri ideal maksimum kontrastı temsil ederken, 60 altındaki değerler sürekli metin okuma için kritik olmaya başlar.' },
|
|
10
|
+
{ question: 'Yazı tipi ağırlığı okunabilirliği nasıl etkiler?', answer: 'İnce/Hafif yazı tipleri okunabilir olması için çok daha yüksek kontrast gerektirir. APCA düşük ağırlıklu yazı tiplerini cezalandırır, WCAG\'ı geçen bir tasarımın weight-100 yazı tipi ile pratikte okunamaz olabileceğini gösterir.' },
|
|
11
|
+
{ question: 'Bu hesaplayıcı özel mi?', answer: 'Evet, tüm hesaplamalar tarayıcınızda yerel olarak yapılır. Analiz ettiğiniz renkler ve ayarlar hiçbir zaman sunucuya gönderilmez, tasarım projeleriniz için tam gizlilik garantisini sağlar.' },
|
|
12
|
+
];
|
|
13
|
+
const howToData = [
|
|
14
|
+
{ name: 'Renkleri Seçin', text: 'Tasarımınızın metin rengini ve arka plan rengini ayarlamak için renk seçicileri kullanın.' },
|
|
15
|
+
{ name: 'Tipografiyi Ayarlayın', text: 'Gerçek tipografiyi simüle etmek için yazı tipi boyutu ve ağırlık kaydırıcılarını taşıyın.' },
|
|
16
|
+
{ name: 'Sonuçları Okuyun', text: 'WCAG 2.1 oranını ve APCA Lc değerini kontrol ederek tasarımınızın erişilebilir olup olmadığını bilin.' },
|
|
17
|
+
{ name: 'Tavsiyeleri Gözden Geçirin', text: 'Gövde metni, küçük metin ve UI öğeleri için APCA\'ya özgü tavsiyeleri kontrol edin.' },
|
|
18
|
+
];
|
|
19
|
+
const faqSchema: WithContext<FAQPage> = { '@context': 'https://schema.org', '@type': 'FAQPage', mainEntity: faqData.map((item) => ({ '@type': 'Question', name: item.question, acceptedAnswer: { '@type': 'Answer', text: item.answer } })) };
|
|
20
|
+
const howToSchema: WithContext<HowToThing> = { '@context': 'https://schema.org', '@type': 'HowTo', name: title, description, step: howToData.map((s, i) => ({ '@type': 'HowToStep', position: i + 1, name: s.name, text: s.text })) };
|
|
21
|
+
const appSchema: WithContext<SoftwareApplication> = { '@context': 'https://schema.org', '@type': 'SoftwareApplication', name: title, description, applicationCategory: 'UtilityApplication', operatingSystem: 'All', offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' }, inLanguage: 'tr' };
|
|
22
|
+
const ui: ReadabilityCalculatorUI = { labelColors: 'Temel Renkler', labelText: 'Metin', labelBg: 'Arka Plan', labelTypo: 'Tipografi', labelFontSize: 'Yazı Tipi Boyutu', labelFontWeight: 'Ağırlık', labelCompare: 'Kontrast Karşılaştırması', labelPreview: 'Algısal Ön İzleme', labelApcaRecs: 'APCA Önerileri', labelBody: 'Okuma Metni (Gövde)', labelSmall: 'Küçük Metin / Resim Yazısı', labelUi: 'UI / Düğmeler', statusYes: 'Evet', statusNo: 'Hayır', wcagAAA: 'AAA\'yı Geçer', wcagAA: 'AA\'yı Geçer', wcagLarge: 'Yalnızca Büyük Metin', wcagFail: 'Başarısız', apcaExcellent: 'Mükemmel', apcaGood: 'İyi', apcaMinimal: 'Minimum', apcaPoor: 'Zayıf', previewText: 'Görsel okunabilirlik sadece matematik değildir. Işık ve gölgenin gözlerinizle nasıl etkileşim kurduğudur.', wcagRatioLabel: 'WCAG 2.1 Oranı', apcaLcLabel: 'APCA Lc (WCAG 3)' };
|
|
23
|
+
export const content: ToolLocaleContent<ReadabilityCalculatorUI> = {
|
|
24
|
+
slug, title, description, ui,
|
|
25
|
+
faqTitle: 'Sık Sorulan Sorular',
|
|
26
|
+
faq: faqData,
|
|
27
|
+
bibliographyTitle: 'Kontrast ve APCA Kaynakları',
|
|
28
|
+
bibliography: [
|
|
29
|
+
{ name: 'W3C: WCAG 3.0 Tasarısı (Silver)', url: 'https://www.w3.org/WAI/standards-guidelines/wcag/wcag3-intro/' },
|
|
30
|
+
{ name: 'Myndex: APCA Referans Kılavuzu', url: 'https://apcaw3.myndex.com/' },
|
|
31
|
+
{ name: 'MDN: Erişilebilirlik ve Renk Kontrastı', url: 'https://developer.mozilla.org/en-US/docs/Web/Accessibility/Understanding_WCAG/Perceivable/Color_contrast' },
|
|
32
|
+
],
|
|
33
|
+
howTo: howToData,
|
|
34
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
35
|
+
seo: [
|
|
36
|
+
{ type: 'title', text: 'Görsel Okunabilirlik Hesaplayıcısı (WCAG vs APCA)', level: 2 },
|
|
37
|
+
{ type: 'paragraph', html: 'Renkleriniz ve tipografinizin yeni algısal erişilebilirlik standardı ile gerçek okuma üzerindeki etkisini anlayın. WCAG 2.1 basit bir 2008 matematik formülü kullanır. <strong>APCA</strong>, <strong>WCAG 3.0</strong> için önerilen insan algısını taklit eden yeni modeldir.' },
|
|
38
|
+
{ type: 'title', text: 'APCA\'nın Ana Noktaları', level: 3 },
|
|
39
|
+
{ type: 'list', items: [ '<strong>Polarite:</strong> Koyu Modu, Açık Moddan farklı şekilde algılandığını anlıyor.', '<strong>Yazı Tipi Ağırlığı:</strong> Tipografi ağırlığına dayalı belirli kontrast seviyeleri (Lc) atar.', '<strong>Doğrusallık:</strong> 2008 göreli parlaklık modelindeki matematik yanlışlıklarını düzeltir.' ] },
|
|
40
|
+
{ type: 'title', text: 'Önerilen APCA Seviyeleri', level: 3 },
|
|
41
|
+
{ type: 'list', items: [ '<strong>Lc 90+:</strong> Çok küçük veya düşük ağırlıkta metin için ideal.', '<strong>Lc 75:</strong> Ana okuma metni standardı.', '<strong>Lc 60:</strong> Okunabilir orta boyutlu içerik için minimum.', '<strong>Lc 45:</strong> Büyük veya dekoratif öğeler için minimum.' ] },
|
|
42
|
+
],
|
|
43
|
+
};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { ReadabilityCalculatorUI } from '../ui';
|
|
4
|
+
const slug = 'visual-readability-calculator-wcag-apca';
|
|
5
|
+
const title = '视觉可读性计算器 WCAG 和 APCA';
|
|
6
|
+
const description = '使用 APCA (WCAG 3.0) 检查设计的真实对比度。分析字体粗细和大小如何影响实际可读性。';
|
|
7
|
+
const faqData = [
|
|
8
|
+
{ question: 'APCA 是什么,为什么与 WCAG 2.1 不同?', answer: 'APCA 是为 WCAG 3.0 开发的高级感知对比算法。与旧的简单公式不同,APCA 使用数学模型来模拟人类大脑如何感知对比度。' },
|
|
9
|
+
{ question: 'Lc 值代表什么?', answer: 'Lc(亮度对比)是 APCA 生成的对比度值。值 100 代表理想的最大对比度,而低于 60 的值对于连续阅读文本开始变得至关重要。' },
|
|
10
|
+
{ question: '字体粗细如何影响可读性?', answer: '细/轻字体需要更高的对比度才能可读。APCA 惩罚低粗细字体,表明通过 WCAG 的使用 weight-100 字体的设计在实践中可能无法阅读。' },
|
|
11
|
+
{ question: '这个计算器是私密的吗?', answer: '是的,所有计算都在浏览器中本地执行。您分析的颜色和设置永远不会发送到任何服务器,确保您的设计项目的完全隐私。' },
|
|
12
|
+
];
|
|
13
|
+
const howToData = [
|
|
14
|
+
{ name: '选择颜色', text: '使用颜色选择器设置设计的文本颜色和背景颜色。' },
|
|
15
|
+
{ name: '调整排版', text: '移动字体大小和粗细滑块以模拟实际排版。' },
|
|
16
|
+
{ name: '阅读结果', text: '检查 WCAG 2.1 比率和 APCA Lc 值,了解您的设计是否可访问。' },
|
|
17
|
+
{ name: '查看建议', text: '检查正文、小文本和 UI 元素的 APCA 特定建议。' },
|
|
18
|
+
];
|
|
19
|
+
const faqSchema: WithContext<FAQPage> = { '@context': 'https://schema.org', '@type': 'FAQPage', mainEntity: faqData.map((item) => ({ '@type': 'Question', name: item.question, acceptedAnswer: { '@type': 'Answer', text: item.answer } })) };
|
|
20
|
+
const howToSchema: WithContext<HowToThing> = { '@context': 'https://schema.org', '@type': 'HowTo', name: title, description, step: howToData.map((s, i) => ({ '@type': 'HowToStep', position: i + 1, name: s.name, text: s.text })) };
|
|
21
|
+
const appSchema: WithContext<SoftwareApplication> = { '@context': 'https://schema.org', '@type': 'SoftwareApplication', name: title, description, applicationCategory: 'UtilityApplication', operatingSystem: 'All', offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' }, inLanguage: 'zh' };
|
|
22
|
+
const ui: ReadabilityCalculatorUI = { labelColors: '基础色', labelText: '文本', labelBg: '背景', labelTypo: '排版', labelFontSize: '字体大小', labelFontWeight: '粗细', labelCompare: '对比度比较', labelPreview: '感知预览', labelApcaRecs: 'APCA 建议', labelBody: '阅读文本(正文)', labelSmall: '小文本/标题', labelUi: 'UI / 按钮', statusYes: '是', statusNo: '否', wcagAAA: '通过 AAA', wcagAA: '通过 AA', wcagLarge: '仅大文本', wcagFail: '失败', apcaExcellent: '优秀', apcaGood: '良好', apcaMinimal: '最小', apcaPoor: '差', previewText: '视觉可读性不仅仅是数学。它是光线和阴影如何与您的眼睛相互作用。', wcagRatioLabel: 'WCAG 2.1 比率', apcaLcLabel: 'APCA Lc (WCAG 3)' };
|
|
23
|
+
export const content: ToolLocaleContent<ReadabilityCalculatorUI> = {
|
|
24
|
+
slug, title, description, ui,
|
|
25
|
+
faqTitle: '常见问题',
|
|
26
|
+
faq: faqData,
|
|
27
|
+
bibliographyTitle: '对比度和 APCA 资源',
|
|
28
|
+
bibliography: [
|
|
29
|
+
{ name: 'W3C: WCAG 3.0 草案 (Silver)', url: 'https://www.w3.org/WAI/standards-guidelines/wcag/wcag3-intro/' },
|
|
30
|
+
{ name: 'Myndex: APCA 参考指南', url: 'https://apcaw3.myndex.com/' },
|
|
31
|
+
{ name: 'MDN: 可访问性和颜色对比', url: 'https://developer.mozilla.org/en-US/docs/Web/Accessibility/Understanding_WCAG/Perceivable/Color_contrast' },
|
|
32
|
+
],
|
|
33
|
+
howTo: howToData,
|
|
34
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
35
|
+
seo: [
|
|
36
|
+
{ type: 'title', text: '视觉可读性计算器 (WCAG vs APCA)', level: 2 },
|
|
37
|
+
{ type: 'paragraph', html: '了解您的颜色和排版如何使用新的感知可访问性标准影响实际阅读。WCAG 2.1 使用简单的 2008 年数学公式。<strong>APCA</strong> 是为 <strong>WCAG 3.0</strong> 提议的模拟人类感知的新模型。' },
|
|
38
|
+
{ type: 'title', text: 'APCA 的关键要点', level: 3 },
|
|
39
|
+
{ type: 'list', items: [ '<strong>极性:</strong>理解深色模式的感知方式与浅色模式不同。', '<strong>字体粗细:</strong>根据排版粗细分配特定对比等级 (Lc)。', '<strong>线性:</strong>修复 2008 年相对亮度模型中的数学不准确性。' ] },
|
|
40
|
+
{ type: 'title', text: '建议的 APCA 级别', level: 3 },
|
|
41
|
+
{ type: 'list', items: [ '<strong>Lc 90+:</strong>非常小或低粗细文本的理想选择。', '<strong>Lc 75:</strong>主要正文阅读文本的标准。', '<strong>Lc 60:</strong>可读中等大小内容的最小值。', '<strong>Lc 45:</strong>大型或装饰元素的最小值。' ] },
|
|
42
|
+
],
|
|
43
|
+
};
|
|
44
|
+
|
|
@@ -9,6 +9,18 @@ export type ReadabilityCalculatorLocaleContent = ToolLocaleContent<ReadabilityCa
|
|
|
9
9
|
import { content as es } from './i18n/es';
|
|
10
10
|
import { content as en } from './i18n/en';
|
|
11
11
|
import { content as fr } from './i18n/fr';
|
|
12
|
+
import { content as de } from './i18n/de';
|
|
13
|
+
import { content as id } from './i18n/id';
|
|
14
|
+
import { content as it } from './i18n/it';
|
|
15
|
+
import { content as ja } from './i18n/ja';
|
|
16
|
+
import { content as ko } from './i18n/ko';
|
|
17
|
+
import { content as nl } from './i18n/nl';
|
|
18
|
+
import { content as pl } from './i18n/pl';
|
|
19
|
+
import { content as pt } from './i18n/pt';
|
|
20
|
+
import { content as ru } from './i18n/ru';
|
|
21
|
+
import { content as sv } from './i18n/sv';
|
|
22
|
+
import { content as tr } from './i18n/tr';
|
|
23
|
+
import { content as zh } from './i18n/zh';
|
|
12
24
|
|
|
13
25
|
export const readabilityCalculator: DeveloperToolEntry<ReadabilityCalculatorUI> = {
|
|
14
26
|
id: 'readability-calculator',
|
|
@@ -20,6 +32,18 @@ export const readabilityCalculator: DeveloperToolEntry<ReadabilityCalculatorUI>
|
|
|
20
32
|
es: async () => es,
|
|
21
33
|
en: async () => en,
|
|
22
34
|
fr: async () => fr,
|
|
35
|
+
de: async () => de,
|
|
36
|
+
id: async () => id,
|
|
37
|
+
it: async () => it,
|
|
38
|
+
ja: async () => ja,
|
|
39
|
+
ko: async () => ko,
|
|
40
|
+
nl: async () => nl,
|
|
41
|
+
pl: async () => pl,
|
|
42
|
+
pt: async () => pt,
|
|
43
|
+
ru: async () => ru,
|
|
44
|
+
sv: async () => sv,
|
|
45
|
+
tr: async () => tr,
|
|
46
|
+
zh: async () => zh,
|
|
23
47
|
},
|
|
24
48
|
};
|
|
25
49
|
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { SvgSanitizerUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const slug = 'svg-bereiniger';
|
|
6
|
+
const title = 'SVG Bereiniger Online';
|
|
7
|
+
const description = 'Optimiere und bereinige SVGs aus Figma, Adobe Illustrator oder Inkscape. Entferne Metadaten, überflüssige Attribute und leere Gruppen für ein produktionsfertiges SVG.';
|
|
8
|
+
|
|
9
|
+
const faqData = [
|
|
10
|
+
{
|
|
11
|
+
question: 'Kann ich den vollständigen HTML-Code einer Seite mit eingebettetem SVG einfügen?',
|
|
12
|
+
answer: 'Ja. Der Bereiniger erkennt das SVG-Element innerhalb des HTML und extrahiert nur diesen Block zur Verarbeitung. Es funktioniert auch, wenn du den SVG-Fragment direkt einfügst.',
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
question: 'Funktioniert das auch mit SVGs aus Illustrator?',
|
|
16
|
+
answer: 'Ja. Illustrator exportiert SVGs mit XML-Deklarationen, Metadaten und proprietären Namespaces, die der Bereiniger entfernt. Das Ergebnis ist ein SVG, das mit allen modernen Browsern kompatibel ist.',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
question: 'Was ist der Unterschied zwischen Bereinigen und Minifizieren?',
|
|
20
|
+
answer: 'Beim Bereinigen werden überflüssige Attribute und Tags entfernt, das eingerückte Format bleibt jedoch erhalten, damit du den Code lesen und bearbeiten kannst. Beim Minifizieren wird zusätzlich alles in eine einzige Zeile komprimiert, um die Dateigröße maximal zu reduzieren.',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
question: 'Kann das Entfernen von IDs das SVG beschädigen?',
|
|
24
|
+
answer: 'Nur wenn ein Element im SVG ein anderes per ID referenziert, zum Beispiel über fill="url(#gradient)". Deaktiviere in diesem Fall die Option IDs entfernen. Sie ist standardmäßig deaktiviert, um genau dieses Problem zu vermeiden.',
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
question: 'Wird mein SVG-Code an einen Server gesendet?',
|
|
28
|
+
answer: 'Nein. Die gesamte Verarbeitung erfolgt in deinem Browser mithilfe der nativen DOMParser- und XMLSerializer-APIs. Der Code verlässt dein Gerät zu keiner Zeit.',
|
|
29
|
+
},
|
|
30
|
+
];
|
|
31
|
+
|
|
32
|
+
const howToData = [
|
|
33
|
+
{ name: 'SVG einfügen', text: 'Füge den SVG-Code aus Figma, Illustrator oder Inkscape in das Textfeld ein.' },
|
|
34
|
+
{ name: 'Optionen konfigurieren', text: 'Aktiviere oder deaktiviere die Optionen: IDs entfernen, width/height entfernen und minifizieren – je nach Bedarf.' },
|
|
35
|
+
{ name: 'Bereinigen', text: 'Klicke auf SVG bereinigen, um den Code zu verarbeiten und das optimierte Ergebnis zu erhalten.' },
|
|
36
|
+
{ name: 'Kopieren oder herunterladen', text: 'Nutze die Schaltflächen Kopieren oder Herunterladen, um das bereinigte SVG für die Produktion zu sichern.' },
|
|
37
|
+
];
|
|
38
|
+
|
|
39
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
40
|
+
'@context': 'https://schema.org',
|
|
41
|
+
'@type': 'FAQPage',
|
|
42
|
+
mainEntity: faqData.map((item) => ({
|
|
43
|
+
'@type': 'Question',
|
|
44
|
+
name: item.question,
|
|
45
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
46
|
+
})),
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
const howToSchema: WithContext<HowToThing> = {
|
|
50
|
+
'@context': 'https://schema.org',
|
|
51
|
+
'@type': 'HowTo',
|
|
52
|
+
name: title,
|
|
53
|
+
description,
|
|
54
|
+
step: howToData.map((s, i) => ({ '@type': 'HowToStep', position: i + 1, name: s.name, text: s.text })),
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
58
|
+
'@context': 'https://schema.org',
|
|
59
|
+
'@type': 'SoftwareApplication',
|
|
60
|
+
name: title,
|
|
61
|
+
description,
|
|
62
|
+
applicationCategory: 'UtilityApplication',
|
|
63
|
+
operatingSystem: 'All',
|
|
64
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
65
|
+
inLanguage: 'de',
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
const ui: SvgSanitizerUI = {
|
|
69
|
+
labelInput: 'Füge hier dein unbereinigtes SVG ein',
|
|
70
|
+
labelOutput: 'Bereinigtes SVG',
|
|
71
|
+
optRemoveIds: 'IDs entfernen',
|
|
72
|
+
optRemoveWH: 'width/height entfernen',
|
|
73
|
+
optMinify: 'Minifizieren',
|
|
74
|
+
btnSanitize: 'SVG bereinigen',
|
|
75
|
+
btnCopy: 'Kopieren',
|
|
76
|
+
btnCopied: 'Kopiert',
|
|
77
|
+
btnDownload: 'Herunterladen',
|
|
78
|
+
statOriginal: 'Original',
|
|
79
|
+
statCleaned: 'Bereinigt',
|
|
80
|
+
statReduction: 'Reduzierung',
|
|
81
|
+
statElems: 'Elem. entfernt',
|
|
82
|
+
statAttrs: 'Attrs. entfernt',
|
|
83
|
+
errorPaste: 'Füge ein SVG ein, bevor du bereinigst.',
|
|
84
|
+
errorProcess: 'Fehler bei der SVG-Verarbeitung.',
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
export const content: ToolLocaleContent<SvgSanitizerUI> = {
|
|
88
|
+
slug,
|
|
89
|
+
title,
|
|
90
|
+
description,
|
|
91
|
+
ui,
|
|
92
|
+
faqTitle: 'Häufig gestellte Fragen',
|
|
93
|
+
faq: faqData,
|
|
94
|
+
bibliographyTitle: 'Referenzen',
|
|
95
|
+
bibliography: [
|
|
96
|
+
{ name: 'SVG Specification - W3C', url: 'https://www.w3.org/TR/SVG2/' },
|
|
97
|
+
{ name: 'Figma SVG Export - Offizielle Dokumentation', url: 'https://help.figma.com/hc/en-us/articles/360040028114-Export-from-Figma' },
|
|
98
|
+
{ name: 'SVGO - SVG Optimizer (Open-Source-Referenz)', url: 'https://github.com/svg/svgo' },
|
|
99
|
+
],
|
|
100
|
+
howTo: howToData,
|
|
101
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
102
|
+
seo: [
|
|
103
|
+
{ type: 'title', text: 'SVG Bereiniger: Code aus Figma und Illustrator aufräumen', level: 2 },
|
|
104
|
+
{
|
|
105
|
+
type: 'paragraph',
|
|
106
|
+
html: 'Füge ein beliebiges SVG aus <strong>Figma</strong>, Adobe Illustrator oder dem Browser-Inspektor ein und erhalte eine saubere, optimierte Vektordatei, die sofort produktionsbereit ist.',
|
|
107
|
+
},
|
|
108
|
+
{ type: 'title', text: 'Warum sind exportierte SVGs so unordentlich?', level: 3 },
|
|
109
|
+
{
|
|
110
|
+
type: 'paragraph',
|
|
111
|
+
html: 'Wenn du ein SVG aus Figma exportierst, erhältst du eine Datei voller Attribute, die nur innerhalb der App einen Sinn ergeben: <code>data-name</code>, <code>xml:space</code>, Verweise auf interne Ebenen und Design-Metadaten. Das Ergebnis ist ein SVG, das 40–70 % größer als nötig sein kann.',
|
|
112
|
+
},
|
|
113
|
+
{ type: 'title', text: 'Was der Bereiniger entfernt', level: 3 },
|
|
114
|
+
{
|
|
115
|
+
type: 'list',
|
|
116
|
+
items: [
|
|
117
|
+
'<strong>Editor-Metadaten:</strong> die Tags <code>metadata</code>, <code>title</code> und <code>desc</code>, die Figma und Illustrator automatisch hinzufügen.',
|
|
118
|
+
'<strong>Inkscape-Namespaces:</strong> alle Elemente mit dem Präfix <code>inkscape:</code> und <code>sodipodi:</code>.',
|
|
119
|
+
'<strong>Überflüssige Attribute:</strong> <code>xml:space</code>, <code>version</code>, unnötige <code>xmlns:*</code> und Figma-<code>data-*</code>-Attribute.',
|
|
120
|
+
'<strong>Leere Gruppen:</strong> <code><g></code>-Elemente ohne Inhalt, die als Artefakte gelöschter Ebenen übrig bleiben.',
|
|
121
|
+
'<strong>XML-Deklarationen:</strong> die <code><?xml version="1.0"?></code>-Deklaration und den DOCTYPE, die beim Einbetten von SVG in HTML nicht benötigt werden.',
|
|
122
|
+
],
|
|
123
|
+
},
|
|
124
|
+
],
|
|
125
|
+
};
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { SvgSanitizerUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const slug = 'pembersih-svg';
|
|
6
|
+
const title = 'Pembersih SVG Online';
|
|
7
|
+
const description = 'Optimalkan dan bersihkan SVG yang diekspor dari Figma, Adobe Illustrator, atau Inkscape. Hapus metadata, atribut yang tidak perlu, dan grup kosong untuk menghasilkan SVG siap produksi.';
|
|
8
|
+
|
|
9
|
+
const faqData = [
|
|
10
|
+
{
|
|
11
|
+
question: 'Bisakah saya menempel seluruh HTML halaman yang berisi SVG tertanam?',
|
|
12
|
+
answer: 'Bisa. Pembersih akan mendeteksi elemen SVG di dalam HTML dan mengekstrak hanya blok tersebut untuk diproses. Cara ini juga berfungsi jika kamu langsung menempelkan fragmen SVG-nya.',
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
question: 'Apakah ini berfungsi untuk SVG dari Illustrator?',
|
|
16
|
+
answer: 'Ya. Illustrator mengekspor SVG dengan deklarasi XML, metadata, dan namespace miliknya sendiri yang akan dihapus oleh pembersih. Hasilnya adalah SVG yang kompatibel dengan semua browser modern.',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
question: 'Apa perbedaan antara membersihkan dan meminifikasi?',
|
|
20
|
+
answer: 'Membersihkan menghapus atribut dan tag yang tidak diperlukan, tetapi tetap mempertahankan format indentasi agar kamu bisa membaca dan mengedit kode. Meminifikasi juga memampatkan semuanya menjadi satu baris untuk memperkecil ukuran file semaksimal mungkin.',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
question: 'Apakah menghapus ID bisa merusak SVG?',
|
|
24
|
+
answer: 'Hanya jika ada elemen dalam SVG yang merujuk elemen lain melalui ID, misalnya lewat fill="url(#gradient)". Dalam kasus itu, nonaktifkan opsi Hapus ID. Opsi ini dinonaktifkan secara default justru untuk mencegah masalah tersebut.',
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
question: 'Apakah kode SVG saya dikirim ke server?',
|
|
28
|
+
answer: 'Tidak. Semua pemrosesan terjadi di browser kamu menggunakan API bawaan DOMParser dan XMLSerializer. Kode tidak pernah meninggalkan perangkatmu.',
|
|
29
|
+
},
|
|
30
|
+
];
|
|
31
|
+
|
|
32
|
+
const howToData = [
|
|
33
|
+
{ name: 'Tempelkan SVG', text: 'Tempelkan kode SVG yang diekspor dari Figma, Illustrator, atau Inkscape ke area teks.' },
|
|
34
|
+
{ name: 'Atur opsi', text: 'Aktifkan atau nonaktifkan opsi: hapus ID, hilangkan width/height, dan minifikasi sesuai kebutuhanmu.' },
|
|
35
|
+
{ name: 'Bersihkan', text: 'Klik Bersihkan SVG untuk memproses kode dan mendapatkan hasil yang sudah dioptimalkan.' },
|
|
36
|
+
{ name: 'Salin atau unduh', text: 'Gunakan tombol Salin atau Unduh untuk mendapatkan SVG bersih yang siap digunakan di produksi.' },
|
|
37
|
+
];
|
|
38
|
+
|
|
39
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
40
|
+
'@context': 'https://schema.org',
|
|
41
|
+
'@type': 'FAQPage',
|
|
42
|
+
mainEntity: faqData.map((item) => ({
|
|
43
|
+
'@type': 'Question',
|
|
44
|
+
name: item.question,
|
|
45
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
46
|
+
})),
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
const howToSchema: WithContext<HowToThing> = {
|
|
50
|
+
'@context': 'https://schema.org',
|
|
51
|
+
'@type': 'HowTo',
|
|
52
|
+
name: title,
|
|
53
|
+
description,
|
|
54
|
+
step: howToData.map((s, i) => ({ '@type': 'HowToStep', position: i + 1, name: s.name, text: s.text })),
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
58
|
+
'@context': 'https://schema.org',
|
|
59
|
+
'@type': 'SoftwareApplication',
|
|
60
|
+
name: title,
|
|
61
|
+
description,
|
|
62
|
+
applicationCategory: 'UtilityApplication',
|
|
63
|
+
operatingSystem: 'All',
|
|
64
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
65
|
+
inLanguage: 'id',
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
const ui: SvgSanitizerUI = {
|
|
69
|
+
labelInput: 'Tempelkan SVG kotor kamu di sini',
|
|
70
|
+
labelOutput: 'SVG bersih',
|
|
71
|
+
optRemoveIds: 'Hapus ID',
|
|
72
|
+
optRemoveWH: 'Hilangkan width/height',
|
|
73
|
+
optMinify: 'Minifikasi',
|
|
74
|
+
btnSanitize: 'Bersihkan SVG',
|
|
75
|
+
btnCopy: 'Salin',
|
|
76
|
+
btnCopied: 'Tersalin',
|
|
77
|
+
btnDownload: 'Unduh',
|
|
78
|
+
statOriginal: 'Asli',
|
|
79
|
+
statCleaned: 'Bersih',
|
|
80
|
+
statReduction: 'Pengurangan',
|
|
81
|
+
statElems: 'Elem. dihapus',
|
|
82
|
+
statAttrs: 'Attrs. dihapus',
|
|
83
|
+
errorPaste: 'Tempelkan SVG terlebih dahulu sebelum membersihkan.',
|
|
84
|
+
errorProcess: 'Terjadi kesalahan saat memproses SVG.',
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
export const content: ToolLocaleContent<SvgSanitizerUI> = {
|
|
88
|
+
slug,
|
|
89
|
+
title,
|
|
90
|
+
description,
|
|
91
|
+
ui,
|
|
92
|
+
faqTitle: 'Pertanyaan Umum',
|
|
93
|
+
faq: faqData,
|
|
94
|
+
bibliographyTitle: 'Referensi',
|
|
95
|
+
bibliography: [
|
|
96
|
+
{ name: 'SVG Specification - W3C', url: 'https://www.w3.org/TR/SVG2/' },
|
|
97
|
+
{ name: 'Figma SVG Export - Dokumentasi Resmi', url: 'https://help.figma.com/hc/en-us/articles/360040028114-Export-from-Figma' },
|
|
98
|
+
{ name: 'SVGO - SVG Optimizer (referensi open source)', url: 'https://github.com/svg/svgo' },
|
|
99
|
+
],
|
|
100
|
+
howTo: howToData,
|
|
101
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
102
|
+
seo: [
|
|
103
|
+
{ type: 'title', text: 'Pembersih SVG: Rapikan Kode dari Figma dan Illustrator', level: 2 },
|
|
104
|
+
{
|
|
105
|
+
type: 'paragraph',
|
|
106
|
+
html: 'Tempelkan SVG dari <strong>Figma</strong>, Adobe Illustrator, atau inspector browser dan dapatkan file vektor yang bersih, teroptimasi, dan siap digunakan di produksi.',
|
|
107
|
+
},
|
|
108
|
+
{ type: 'title', text: 'Mengapa SVG yang diekspor begitu berantakan?', level: 3 },
|
|
109
|
+
{
|
|
110
|
+
type: 'paragraph',
|
|
111
|
+
html: 'Saat kamu mengekspor SVG dari Figma, kamu mendapatkan file yang penuh dengan atribut yang hanya bermakna di dalam aplikasinya: <code>data-name</code>, <code>xml:space</code>, referensi ke layer internal, dan metadata desain. Hasilnya adalah SVG yang bisa 40–70% lebih besar dari yang seharusnya.',
|
|
112
|
+
},
|
|
113
|
+
{ type: 'title', text: 'Apa yang dihapus oleh Pembersih', level: 3 },
|
|
114
|
+
{
|
|
115
|
+
type: 'list',
|
|
116
|
+
items: [
|
|
117
|
+
'<strong>Metadata editor:</strong> tag <code>metadata</code>, <code>title</code>, dan <code>desc</code> yang ditambahkan Figma dan Illustrator secara otomatis.',
|
|
118
|
+
'<strong>Namespace Inkscape:</strong> semua elemen dengan awalan <code>inkscape:</code> dan <code>sodipodi:</code>.',
|
|
119
|
+
'<strong>Atribut tidak perlu:</strong> <code>xml:space</code>, <code>version</code>, <code>xmlns:*</code> yang berlebihan, dan atribut <code>data-*</code> dari Figma.',
|
|
120
|
+
'<strong>Grup kosong:</strong> elemen <code><g></code> tanpa konten yang tersisa sebagai artefak dari layer yang sudah dihapus.',
|
|
121
|
+
'<strong>Deklarasi XML:</strong> deklarasi <code><?xml version="1.0"?></code> dan DOCTYPE yang tidak diperlukan saat SVG ditanam dalam HTML.',
|
|
122
|
+
],
|
|
123
|
+
},
|
|
124
|
+
],
|
|
125
|
+
};
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { SvgSanitizerUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const slug = 'pulizia-svg';
|
|
6
|
+
const title = 'Pulizia SVG Online';
|
|
7
|
+
const description = 'Ottimizza e pulisci gli SVG esportati da Figma, Adobe Illustrator o Inkscape. Rimuovi metadati, attributi inutili e gruppi vuoti per ottenere un SVG pronto per la produzione.';
|
|
8
|
+
|
|
9
|
+
const faqData = [
|
|
10
|
+
{
|
|
11
|
+
question: 'Posso incollare l\'HTML completo di una pagina con SVG incorporato?',
|
|
12
|
+
answer: 'Sì. Lo strumento rileva l\'elemento SVG all\'interno dell\'HTML ed estrae solo quel blocco per elaborarlo. Funziona anche se incolli direttamente il frammento SVG.',
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
question: 'Funziona con gli SVG di Illustrator?',
|
|
16
|
+
answer: 'Sì. Illustrator esporta SVG con dichiarazioni XML, metadati e namespace proprietari che lo strumento rimuove. Il risultato è un SVG compatibile con tutti i browser moderni.',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
question: 'Qual è la differenza tra pulire e minificare?',
|
|
20
|
+
answer: 'Pulire rimuove attributi e tag inutili, ma mantiene il formato con indentazione in modo che tu possa leggere e modificare il codice. Minificare comprime anche tutto in una singola riga per ridurre al massimo il peso del file.',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
question: 'Rimuovere gli ID può rompere l\'SVG?',
|
|
24
|
+
answer: 'Solo se un elemento dell\'SVG fa riferimento a un altro tramite ID, ad esempio con fill="url(#gradient)". In quel caso, disattiva l\'opzione Rimuovi ID. È disattivata per impostazione predefinita proprio per evitare questo problema.',
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
question: 'Il mio codice SVG viene inviato a qualche server?',
|
|
28
|
+
answer: 'No. Tutta l\'elaborazione avviene nel tuo browser utilizzando le API native DOMParser e XMLSerializer. Il codice non lascia mai il tuo dispositivo.',
|
|
29
|
+
},
|
|
30
|
+
];
|
|
31
|
+
|
|
32
|
+
const howToData = [
|
|
33
|
+
{ name: 'Incolla l\'SVG', text: 'Incolla il codice SVG esportato da Figma, Illustrator o Inkscape nell\'area di testo.' },
|
|
34
|
+
{ name: 'Configura le opzioni', text: 'Attiva o disattiva le opzioni: rimuovi ID, elimina width/height e minifica in base alle tue esigenze.' },
|
|
35
|
+
{ name: 'Pulisci', text: 'Clicca su Pulisci SVG per elaborare il codice e ottenere il risultato ottimizzato.' },
|
|
36
|
+
{ name: 'Copia o scarica', text: 'Usa i pulsanti Copia o Scarica per ottenere l\'SVG pulito pronto per la produzione.' },
|
|
37
|
+
];
|
|
38
|
+
|
|
39
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
40
|
+
'@context': 'https://schema.org',
|
|
41
|
+
'@type': 'FAQPage',
|
|
42
|
+
mainEntity: faqData.map((item) => ({
|
|
43
|
+
'@type': 'Question',
|
|
44
|
+
name: item.question,
|
|
45
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
46
|
+
})),
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
const howToSchema: WithContext<HowToThing> = {
|
|
50
|
+
'@context': 'https://schema.org',
|
|
51
|
+
'@type': 'HowTo',
|
|
52
|
+
name: title,
|
|
53
|
+
description,
|
|
54
|
+
step: howToData.map((s, i) => ({ '@type': 'HowToStep', position: i + 1, name: s.name, text: s.text })),
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
58
|
+
'@context': 'https://schema.org',
|
|
59
|
+
'@type': 'SoftwareApplication',
|
|
60
|
+
name: title,
|
|
61
|
+
description,
|
|
62
|
+
applicationCategory: 'UtilityApplication',
|
|
63
|
+
operatingSystem: 'All',
|
|
64
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
65
|
+
inLanguage: 'it',
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
const ui: SvgSanitizerUI = {
|
|
69
|
+
labelInput: 'Incolla qui il tuo SVG sporco',
|
|
70
|
+
labelOutput: 'SVG pulito',
|
|
71
|
+
optRemoveIds: 'Rimuovi ID',
|
|
72
|
+
optRemoveWH: 'Elimina width/height',
|
|
73
|
+
optMinify: 'Minifica',
|
|
74
|
+
btnSanitize: 'Pulisci SVG',
|
|
75
|
+
btnCopy: 'Copia',
|
|
76
|
+
btnCopied: 'Copiato',
|
|
77
|
+
btnDownload: 'Scarica',
|
|
78
|
+
statOriginal: 'Originale',
|
|
79
|
+
statCleaned: 'Pulito',
|
|
80
|
+
statReduction: 'Riduzione',
|
|
81
|
+
statElems: 'Elem. rimossi',
|
|
82
|
+
statAttrs: 'Attrs. rimossi',
|
|
83
|
+
errorPaste: 'Incolla un SVG prima di pulire.',
|
|
84
|
+
errorProcess: 'Errore durante l\'elaborazione dell\'SVG.',
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
export const content: ToolLocaleContent<SvgSanitizerUI> = {
|
|
88
|
+
slug,
|
|
89
|
+
title,
|
|
90
|
+
description,
|
|
91
|
+
ui,
|
|
92
|
+
faqTitle: 'Domande Frequenti',
|
|
93
|
+
faq: faqData,
|
|
94
|
+
bibliographyTitle: 'Riferimenti',
|
|
95
|
+
bibliography: [
|
|
96
|
+
{ name: 'SVG Specification - W3C', url: 'https://www.w3.org/TR/SVG2/' },
|
|
97
|
+
{ name: 'Figma SVG Export - Documentazione ufficiale', url: 'https://help.figma.com/hc/en-us/articles/360040028114-Export-from-Figma' },
|
|
98
|
+
{ name: 'SVGO - SVG Optimizer (riferimento open source)', url: 'https://github.com/svg/svgo' },
|
|
99
|
+
],
|
|
100
|
+
howTo: howToData,
|
|
101
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
102
|
+
seo: [
|
|
103
|
+
{ type: 'title', text: 'Pulizia SVG: Codice Pulito da Figma e Illustrator', level: 2 },
|
|
104
|
+
{
|
|
105
|
+
type: 'paragraph',
|
|
106
|
+
html: 'Incolla qualsiasi SVG esportato da <strong>Figma</strong>, Adobe Illustrator o dall\'inspector del browser e ottieni un file vettoriale pulito, ottimizzato e pronto per la produzione.',
|
|
107
|
+
},
|
|
108
|
+
{ type: 'title', text: 'Perché gli SVG esportati sono così sporchi?', level: 3 },
|
|
109
|
+
{
|
|
110
|
+
type: 'paragraph',
|
|
111
|
+
html: 'Quando esporti un SVG da Figma, ottieni un file carico di attributi che hanno senso solo all\'interno dell\'applicazione: <code>data-name</code>, <code>xml:space</code>, riferimenti a layer interni e metadati di design. Il risultato è un SVG che può pesare dal 40 al 70% in più del necessario.',
|
|
112
|
+
},
|
|
113
|
+
{ type: 'title', text: 'Cosa rimuove lo strumento di pulizia', level: 3 },
|
|
114
|
+
{
|
|
115
|
+
type: 'list',
|
|
116
|
+
items: [
|
|
117
|
+
'<strong>Metadati dell\'editor:</strong> tag <code>metadata</code>, <code>title</code> e <code>desc</code> aggiunti automaticamente da Figma e Illustrator.',
|
|
118
|
+
'<strong>Namespace di Inkscape:</strong> tutti gli elementi con prefisso <code>inkscape:</code> e <code>sodipodi:</code>.',
|
|
119
|
+
'<strong>Attributi inutili:</strong> <code>xml:space</code>, <code>version</code>, <code>xmlns:*</code> superflui e attributi <code>data-*</code> di Figma.',
|
|
120
|
+
'<strong>Gruppi vuoti:</strong> elementi <code><g></code> senza contenuto rimasti come artefatti di layer eliminati.',
|
|
121
|
+
'<strong>Dichiarazioni XML:</strong> la dichiarazione <code><?xml version="1.0"?></code> e il DOCTYPE inutili quando si incorpora un SVG in HTML.',
|
|
122
|
+
],
|
|
123
|
+
},
|
|
124
|
+
],
|
|
125
|
+
};
|