@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,94 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { PromptLibraryUI } from '../ui';
|
|
4
|
+
const slug = 'prompt-library';
|
|
5
|
+
const title = '私人 AI 提示库';
|
|
6
|
+
const description = '私密地组织、标记和保存您的 ChatGPT、Midjourney 和 Claude 提示。您在 localStorage 中的专属提示库。';
|
|
7
|
+
const faqData = [
|
|
8
|
+
{ question: '我的提示保存在哪里?', answer: '您的提示仅保存在浏览器的本地存储中。我们不使用外部服务器,因此您的数据完全私密。' },
|
|
9
|
+
{ question: '如果我清除浏览器 cookie 或历史记录会怎样?', answer: '如果您清除网站数据或本地存储,您将丢失已保存的提示。如果您经常清除浏览器,我们建议进行备份。' },
|
|
10
|
+
{ question: '我可以将其用于 Midjourney、ChatGPT 或 DALL-E 吗?', answer: '是的,它与任何类型的 AI 指令兼容。您可以创建特定标签来组织命令并轻松将其复制到您首选的 AI 工具。' },
|
|
11
|
+
];
|
|
12
|
+
const howToData = [
|
|
13
|
+
{ name: '创建提示', text: '单击"新提示"按钮并输入标题和说明。' },
|
|
14
|
+
{ name: '添加标签', text: '输入以空格或逗号分隔的标签来分类您的提示。' },
|
|
15
|
+
{ name: '使用变量', text: '在文本中使用括号 [这样] 在卡片上创建可填充字段。' },
|
|
16
|
+
{ name: '复制并分享', text: '一键复制到剪贴板或使用分享按钮分享直接链接。' },
|
|
17
|
+
];
|
|
18
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
19
|
+
'@context': 'https://schema.org',
|
|
20
|
+
'@type': 'FAQPage',
|
|
21
|
+
mainEntity: faqData.map((item) => ({ '@type': 'Question', name: item.question, acceptedAnswer: { '@type': 'Answer', text: item.answer } })),
|
|
22
|
+
};
|
|
23
|
+
const howToSchema: WithContext<HowToThing> = {
|
|
24
|
+
'@context': 'https://schema.org',
|
|
25
|
+
'@type': 'HowTo',
|
|
26
|
+
name: title,
|
|
27
|
+
description,
|
|
28
|
+
step: howToData.map((s, i) => ({ '@type': 'HowToStep', position: i + 1, name: s.name, text: s.text })),
|
|
29
|
+
};
|
|
30
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
31
|
+
'@context': 'https://schema.org',
|
|
32
|
+
'@type': 'SoftwareApplication',
|
|
33
|
+
name: title,
|
|
34
|
+
description,
|
|
35
|
+
applicationCategory: 'UtilityApplication',
|
|
36
|
+
operatingSystem: 'All',
|
|
37
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
38
|
+
inLanguage: 'zh',
|
|
39
|
+
};
|
|
40
|
+
const ui: PromptLibraryUI = {
|
|
41
|
+
placeholderSearch: '按关键字或标签搜索...',
|
|
42
|
+
btnNew: '新建提示',
|
|
43
|
+
emptyTitle: '您的库为空',
|
|
44
|
+
emptyDesc: '创建您的第一个提示,开始构建您的私人 AI 存储库。',
|
|
45
|
+
btnAddFirst: '添加第一个',
|
|
46
|
+
modalTitleCreate: '创建新提示',
|
|
47
|
+
modalTitleEdit: '编辑提示',
|
|
48
|
+
labelTitle: '标识标题',
|
|
49
|
+
placeholderTitle: '例如:SEO 营销专家',
|
|
50
|
+
labelContent: '说明(提示)',
|
|
51
|
+
placeholderContent: '在此处为 AI 编写详细说明...',
|
|
52
|
+
hintContent: '提示:使用括号 [这样] 稍后填充变量。',
|
|
53
|
+
labelTags: '标签',
|
|
54
|
+
placeholderTags: '例如:营销、seo(用空格或逗号添加)',
|
|
55
|
+
btnCancel: '取消',
|
|
56
|
+
btnSave: '保存到本地',
|
|
57
|
+
ariaLabelStar: '标星提示',
|
|
58
|
+
ariaLabelEdit: '编辑提示',
|
|
59
|
+
ariaLabelShare: '分享提示',
|
|
60
|
+
ariaLabelCopy: '复制提示',
|
|
61
|
+
ariaLabelDelete: '删除提示',
|
|
62
|
+
varsTitle: '必需变量',
|
|
63
|
+
noResults: '找不到此搜索的提示。',
|
|
64
|
+
confirmTitle: '删除提示?',
|
|
65
|
+
confirmDesc: '此操作无法撤销。',
|
|
66
|
+
btnCancelDelete: '取消',
|
|
67
|
+
btnConfirmDelete: '永久删除',
|
|
68
|
+
};
|
|
69
|
+
export const content: ToolLocaleContent<PromptLibraryUI> = {
|
|
70
|
+
slug,
|
|
71
|
+
title,
|
|
72
|
+
description,
|
|
73
|
+
ui,
|
|
74
|
+
faqTitle: '常见问题',
|
|
75
|
+
faq: faqData,
|
|
76
|
+
bibliographyTitle: '提示工程参考',
|
|
77
|
+
bibliography: [
|
|
78
|
+
{ name: '提示工程指南 (DAIR.AI)', url: 'https://www.promptingguide.ai/' },
|
|
79
|
+
{ name: '什么是提示工程 (Google Cloud)', url: 'https://cloud.google.com/discover/what-is-prompt-engineering' },
|
|
80
|
+
],
|
|
81
|
+
howTo: howToData,
|
|
82
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
83
|
+
seo: [
|
|
84
|
+
{ type: 'title', text: '为什么需要提示库?', level: 2 },
|
|
85
|
+
{ type: 'paragraph', html: '如果您定期使用 ChatGPT、Claude 或 Midjourney 等 AI 工具,您可能会发现自己重复相同的说明。<strong>提示库</strong>是停止浪费时间重写您喜爱的命令的最终解决方案。' },
|
|
86
|
+
{ type: 'title', text: '组织提示的优势', level: 3 },
|
|
87
|
+
{ type: 'list', items: [ '<strong>即时搜索:</strong>通过简单的文本搜索找到您几个月前使用的特定说明。', '<strong>标签分类:</strong>将您的提示标记为"营销"、"编程"或"文案"以快速过滤。', '<strong>单击复制:</strong>只需单击一下即可将全文复制到剪贴板。', '<strong>完全隐私:</strong>所有数据都通过 localStorage 在浏览器中本地存储。' ] },
|
|
88
|
+
{ type: 'title', text: '提示中的变量', level: 3 },
|
|
89
|
+
{ type: 'paragraph', html: '在提示中使用 <strong>[变量]</strong> 表示法来创建动态可填充字段。打开卡片时,每个定义的变量都会出现输入。提示将与填充的值一起复制,准备粘贴到您的 AI 中。' },
|
|
90
|
+
{ type: 'title', text: '共享提示', level: 3 },
|
|
91
|
+
{ type: 'paragraph', html: '每个提示都可以通过 URL 分享。分享按钮生成一个链接,打开时会显示预填充提示内容的创建表单。' },
|
|
92
|
+
],
|
|
93
|
+
};
|
|
94
|
+
|
|
@@ -9,6 +9,18 @@ export type PromptLibraryLocaleContent = ToolLocaleContent<PromptLibraryUI>;
|
|
|
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 promptLibrary: DeveloperToolEntry<PromptLibraryUI> = {
|
|
14
26
|
id: 'prompt-library',
|
|
@@ -20,6 +32,18 @@ export const promptLibrary: DeveloperToolEntry<PromptLibraryUI> = {
|
|
|
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,133 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { ReadabilityCalculatorUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const slug = 'visueller-lesbarkeitsrechner-wcag-apca';
|
|
6
|
+
const title = 'Visueller Lesbarkeitsrechner WCAG und APCA';
|
|
7
|
+
const description = 'Prüfen Sie den echten Kontrast Ihrer Designs mit APCA (WCAG 3.0). Analysieren Sie, wie Schriftgewicht und -größe die tatsächliche Lesbarkeit beeinflussen. Von einfachen Verhältnissen zur wahrnehmungsbasierten Lesbarkeit.';
|
|
8
|
+
|
|
9
|
+
const faqData = [
|
|
10
|
+
{
|
|
11
|
+
question: 'Was ist APCA und warum unterscheidet es sich von WCAG 2.1?',
|
|
12
|
+
answer: 'APCA ist der Advanced Perceptual Contrast Algorithm, der für WCAG 3.0 entwickelt wurde. Anders als das alte einfache Verhältnis verwendet APCA mathematische Modelle, die nachbilden, wie das menschliche Gehirn Kontrast wahrnimmt – unter Berücksichtigung der Polarität (heller vs. dunkler Hintergrund) und der Schriftgröße bzw. des Schriftgewichts.',
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
question: 'Was bedeutet der Lc-Wert?',
|
|
16
|
+
answer: 'Lc (Lightness Contrast) ist der von APCA erzeugte Kontrastwert. Ein Wert von 100 steht für idealen Maximalkontrast, während Werte unter 60 für Fließtext kritisch werden. Es handelt sich um eine absolute Wahrnehmungsskala.',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
question: 'Wie beeinflusst das Schriftgewicht die Lesbarkeit?',
|
|
20
|
+
answer: 'Dünne Schriften (Thin/Light) benötigen wesentlich höhere Kontraste, um lesbar zu sein. APCA bestraft Schriften mit geringem Gewicht und zeigt, dass ein Design, das WCAG mit einer 100er-Schrift besteht, in der Praxis unleserlich sein kann.',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
question: 'Ist dieser Rechner datenschutzkonform?',
|
|
24
|
+
answer: 'Ja, alle Berechnungen werden lokal in Ihrem Browser durchgeführt. Die analysierten Farben und Einstellungen werden niemals an einen Server übertragen, was vollständige Privatsphäre für Ihre Designprojekte garantiert.',
|
|
25
|
+
},
|
|
26
|
+
];
|
|
27
|
+
|
|
28
|
+
const howToData = [
|
|
29
|
+
{ name: 'Farben wählen', text: 'Verwenden Sie die Farbwähler, um die Text- und Hintergrundfarbe Ihres Designs festzulegen.' },
|
|
30
|
+
{ name: 'Typografie anpassen', text: 'Stellen Sie mit den Schiebereglern die Schriftgröße und das Schriftgewicht ein, um Ihre tatsächliche Typografie zu simulieren.' },
|
|
31
|
+
{ name: 'Ergebnisse ablesen', text: 'Prüfen Sie das WCAG 2.1-Verhältnis und den APCA-Lc-Wert, um festzustellen, ob Ihr Design barrierefrei ist.' },
|
|
32
|
+
{ name: 'Empfehlungen prüfen', text: 'Lesen Sie die APCA-spezifischen Empfehlungen für Fließtext, kleinen Text und UI-Elemente.' },
|
|
33
|
+
];
|
|
34
|
+
|
|
35
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
36
|
+
'@context': 'https://schema.org',
|
|
37
|
+
'@type': 'FAQPage',
|
|
38
|
+
mainEntity: faqData.map((item) => ({
|
|
39
|
+
'@type': 'Question',
|
|
40
|
+
name: item.question,
|
|
41
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
42
|
+
})),
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
const howToSchema: WithContext<HowToThing> = {
|
|
46
|
+
'@context': 'https://schema.org',
|
|
47
|
+
'@type': 'HowTo',
|
|
48
|
+
name: title,
|
|
49
|
+
description,
|
|
50
|
+
step: howToData.map((s, i) => ({ '@type': 'HowToStep', position: i + 1, name: s.name, text: s.text })),
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
54
|
+
'@context': 'https://schema.org',
|
|
55
|
+
'@type': 'SoftwareApplication',
|
|
56
|
+
name: title,
|
|
57
|
+
description,
|
|
58
|
+
applicationCategory: 'UtilityApplication',
|
|
59
|
+
operatingSystem: 'All',
|
|
60
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
61
|
+
inLanguage: 'de',
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
const ui: ReadabilityCalculatorUI = {
|
|
65
|
+
labelColors: 'Grundfarben',
|
|
66
|
+
labelText: 'Text',
|
|
67
|
+
labelBg: 'Hintergrund',
|
|
68
|
+
labelTypo: 'Typografie',
|
|
69
|
+
labelFontSize: 'Schriftgröße',
|
|
70
|
+
labelFontWeight: 'Schriftgewicht',
|
|
71
|
+
labelCompare: 'Kontrastvergleich',
|
|
72
|
+
labelPreview: 'Wahrnehmungsvorschau',
|
|
73
|
+
labelApcaRecs: 'APCA-Empfehlungen',
|
|
74
|
+
labelBody: 'Fließtext (Body)',
|
|
75
|
+
labelSmall: 'Kleiner Text / Bildunterschrift',
|
|
76
|
+
labelUi: 'UI / Schaltflächen',
|
|
77
|
+
statusYes: 'Ja',
|
|
78
|
+
statusNo: 'Nein',
|
|
79
|
+
wcagAAA: 'Besteht AAA',
|
|
80
|
+
wcagAA: 'Besteht AA',
|
|
81
|
+
wcagLarge: 'Nur großer Text',
|
|
82
|
+
wcagFail: 'Nicht bestanden',
|
|
83
|
+
apcaExcellent: 'Ausgezeichnet',
|
|
84
|
+
apcaGood: 'Gut',
|
|
85
|
+
apcaMinimal: 'Minimal',
|
|
86
|
+
apcaPoor: 'Unzureichend',
|
|
87
|
+
previewText: 'Visuelle Lesbarkeit ist nicht nur Mathematik. Es ist die Art, wie Licht und Schatten mit Ihren Augen interagieren.',
|
|
88
|
+
wcagRatioLabel: 'WCAG 2.1 Verhältnis',
|
|
89
|
+
apcaLcLabel: 'APCA Lc (WCAG 3)',
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
export const content: ToolLocaleContent<ReadabilityCalculatorUI> = {
|
|
93
|
+
slug,
|
|
94
|
+
title,
|
|
95
|
+
description,
|
|
96
|
+
ui,
|
|
97
|
+
faqTitle: 'Häufig gestellte Fragen',
|
|
98
|
+
faq: faqData,
|
|
99
|
+
bibliographyTitle: 'Ressourcen zu Kontrast und APCA',
|
|
100
|
+
bibliography: [
|
|
101
|
+
{ name: 'W3C: WCAG 3.0 Entwurf (Silver)', url: 'https://www.w3.org/WAI/standards-guidelines/wcag/wcag3-intro/' },
|
|
102
|
+
{ name: 'Myndex: APCA Referenzhandbuch', url: 'https://apcaw3.myndex.com/' },
|
|
103
|
+
{ name: 'MDN: Barrierefreiheit und Farbkontrast', url: 'https://developer.mozilla.org/de/docs/Web/Accessibility/Understanding_WCAG/Perceivable/Color_contrast' },
|
|
104
|
+
],
|
|
105
|
+
howTo: howToData,
|
|
106
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
107
|
+
seo: [
|
|
108
|
+
{ type: 'title', text: 'Visueller Lesbarkeitsrechner (WCAG vs APCA)', level: 2 },
|
|
109
|
+
{
|
|
110
|
+
type: 'paragraph',
|
|
111
|
+
html: 'Verstehen Sie, wie Farben und Typografie die tatsächliche Lesbarkeit beeinflussen – mit dem neuen wahrnehmungsbasierten Barrierefreiheitsstandard. WCAG 2.1 nutzt eine einfache Formel aus dem Jahr 2008. <strong>APCA</strong> ist das neue Modell für <strong>WCAG 3.0</strong>, das menschliche Wahrnehmung nachbildet.',
|
|
112
|
+
},
|
|
113
|
+
{ type: 'title', text: 'Kernpunkte von APCA', level: 3 },
|
|
114
|
+
{
|
|
115
|
+
type: 'list',
|
|
116
|
+
items: [
|
|
117
|
+
'<strong>Polarität:</strong> Berücksichtigt, dass Dark Mode anders wahrgenommen wird als Light Mode.',
|
|
118
|
+
'<strong>Schriftgewicht:</strong> Weist spezifische Kontrastschwellen (Lc) je nach Schriftstärke zu.',
|
|
119
|
+
'<strong>Linearität:</strong> Behebt mathematische Ungenauigkeiten im relativen Luminanzmodell von 2008.',
|
|
120
|
+
],
|
|
121
|
+
},
|
|
122
|
+
{ type: 'title', text: 'Empfohlene APCA-Stufen', level: 3 },
|
|
123
|
+
{
|
|
124
|
+
type: 'list',
|
|
125
|
+
items: [
|
|
126
|
+
'<strong>Lc 90+:</strong> Ideal für sehr kleinen oder dünnen Text.',
|
|
127
|
+
'<strong>Lc 75:</strong> Standard für normalen Fließtext.',
|
|
128
|
+
'<strong>Lc 60:</strong> Minimum für lesbaren Text mittlerer Größe.',
|
|
129
|
+
'<strong>Lc 45:</strong> Minimum für große oder dekorative Elemente.',
|
|
130
|
+
],
|
|
131
|
+
},
|
|
132
|
+
],
|
|
133
|
+
};
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { ReadabilityCalculatorUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const slug = 'kalkulator-keterbacaan-visual-wcag-apca';
|
|
6
|
+
const title = 'Kalkulator Keterbacaan Visual WCAG dan APCA';
|
|
7
|
+
const description = 'Periksa kontras nyata desain Anda dengan APCA (WCAG 3.0). Analisis bagaimana ketebalan dan ukuran font memengaruhi keterbacaan sesungguhnya. Dari rasio sederhana hingga keterbacaan perseptual.';
|
|
8
|
+
|
|
9
|
+
const faqData = [
|
|
10
|
+
{
|
|
11
|
+
question: 'Apa itu APCA dan mengapa berbeda dari WCAG 2.1?',
|
|
12
|
+
answer: 'APCA adalah Advanced Perceptual Contrast Algorithm yang dikembangkan untuk WCAG 3.0. Berbeda dengan rasio sederhana lama, APCA menggunakan model matematis yang meniru cara otak manusia mempersepsikan kontras, dengan mempertimbangkan polaritas (latar terang vs. gelap) serta ukuran dan ketebalan font.',
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
question: 'Apa arti nilai Lc?',
|
|
16
|
+
answer: 'Lc (Lightness Contrast) adalah nilai kontras yang dihasilkan oleh APCA. Nilai 100 mewakili kontras maksimum ideal, sementara nilai di bawah 60 mulai kritis untuk teks bacaan panjang. Ini adalah skala magnitudo persepsi absolut.',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
question: 'Bagaimana ketebalan font memengaruhi keterbacaan?',
|
|
20
|
+
answer: 'Font tipis (Thin/Light) membutuhkan kontras yang jauh lebih tinggi agar dapat dibaca. APCA memberikan penalti pada font berbobot rendah, menunjukkan bahwa desain yang lolos WCAG dengan font bobot 100 bisa saja tidak terbaca dalam praktiknya.',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
question: 'Apakah kalkulator ini menjaga privasi?',
|
|
24
|
+
answer: 'Ya, semua perhitungan dilakukan secara lokal di browser Anda. Warna dan pengaturan yang Anda analisis tidak pernah dikirim ke server mana pun, sehingga privasi proyek desain Anda sepenuhnya terjaga.',
|
|
25
|
+
},
|
|
26
|
+
];
|
|
27
|
+
|
|
28
|
+
const howToData = [
|
|
29
|
+
{ name: 'Pilih Warna', text: 'Gunakan pemilih warna untuk mengatur warna teks dan warna latar belakang desain Anda.' },
|
|
30
|
+
{ name: 'Sesuaikan Tipografi', text: 'Geser slider ukuran dan ketebalan font untuk mensimulasikan tipografi Anda yang sebenarnya.' },
|
|
31
|
+
{ name: 'Baca Hasilnya', text: 'Periksa rasio WCAG 2.1 dan nilai APCA Lc untuk mengetahui apakah desain Anda aksesibel.' },
|
|
32
|
+
{ name: 'Tinjau Rekomendasi', text: 'Cek rekomendasi khusus APCA untuk teks bacaan, teks kecil, dan elemen UI.' },
|
|
33
|
+
];
|
|
34
|
+
|
|
35
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
36
|
+
'@context': 'https://schema.org',
|
|
37
|
+
'@type': 'FAQPage',
|
|
38
|
+
mainEntity: faqData.map((item) => ({
|
|
39
|
+
'@type': 'Question',
|
|
40
|
+
name: item.question,
|
|
41
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
42
|
+
})),
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
const howToSchema: WithContext<HowToThing> = {
|
|
46
|
+
'@context': 'https://schema.org',
|
|
47
|
+
'@type': 'HowTo',
|
|
48
|
+
name: title,
|
|
49
|
+
description,
|
|
50
|
+
step: howToData.map((s, i) => ({ '@type': 'HowToStep', position: i + 1, name: s.name, text: s.text })),
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
54
|
+
'@context': 'https://schema.org',
|
|
55
|
+
'@type': 'SoftwareApplication',
|
|
56
|
+
name: title,
|
|
57
|
+
description,
|
|
58
|
+
applicationCategory: 'UtilityApplication',
|
|
59
|
+
operatingSystem: 'All',
|
|
60
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
61
|
+
inLanguage: 'id',
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
const ui: ReadabilityCalculatorUI = {
|
|
65
|
+
labelColors: 'Warna Dasar',
|
|
66
|
+
labelText: 'Teks',
|
|
67
|
+
labelBg: 'Latar Belakang',
|
|
68
|
+
labelTypo: 'Tipografi',
|
|
69
|
+
labelFontSize: 'Ukuran Font',
|
|
70
|
+
labelFontWeight: 'Ketebalan Font',
|
|
71
|
+
labelCompare: 'Perbandingan Kontras',
|
|
72
|
+
labelPreview: 'Pratinjau Perseptual',
|
|
73
|
+
labelApcaRecs: 'Rekomendasi APCA',
|
|
74
|
+
labelBody: 'Teks Bacaan (Body)',
|
|
75
|
+
labelSmall: 'Teks Kecil / Keterangan',
|
|
76
|
+
labelUi: 'UI / Tombol',
|
|
77
|
+
statusYes: 'Ya',
|
|
78
|
+
statusNo: 'Tidak',
|
|
79
|
+
wcagAAA: 'Lulus AAA',
|
|
80
|
+
wcagAA: 'Lulus AA',
|
|
81
|
+
wcagLarge: 'Hanya Teks Besar',
|
|
82
|
+
wcagFail: 'Gagal',
|
|
83
|
+
apcaExcellent: 'Sangat Baik',
|
|
84
|
+
apcaGood: 'Baik',
|
|
85
|
+
apcaMinimal: 'Minimal',
|
|
86
|
+
apcaPoor: 'Buruk',
|
|
87
|
+
previewText: 'Keterbacaan visual bukan sekadar matematika. Ini adalah cara cahaya dan bayangan berinteraksi dengan mata Anda.',
|
|
88
|
+
wcagRatioLabel: 'Rasio WCAG 2.1',
|
|
89
|
+
apcaLcLabel: 'APCA Lc (WCAG 3)',
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
export const content: ToolLocaleContent<ReadabilityCalculatorUI> = {
|
|
93
|
+
slug,
|
|
94
|
+
title,
|
|
95
|
+
description,
|
|
96
|
+
ui,
|
|
97
|
+
faqTitle: 'Pertanyaan yang Sering Diajukan',
|
|
98
|
+
faq: faqData,
|
|
99
|
+
bibliographyTitle: 'Sumber tentang Kontras dan APCA',
|
|
100
|
+
bibliography: [
|
|
101
|
+
{ name: 'W3C: Draf WCAG 3.0 (Silver)', url: 'https://www.w3.org/WAI/standards-guidelines/wcag/wcag3-intro/' },
|
|
102
|
+
{ name: 'Myndex: Panduan Referensi APCA', url: 'https://apcaw3.myndex.com/' },
|
|
103
|
+
{ name: 'MDN: Aksesibilitas dan Kontras Warna', url: 'https://developer.mozilla.org/en-US/docs/Web/Accessibility/Understanding_WCAG/Perceivable/Color_contrast' },
|
|
104
|
+
],
|
|
105
|
+
howTo: howToData,
|
|
106
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
107
|
+
seo: [
|
|
108
|
+
{ type: 'title', text: 'Kalkulator Keterbacaan Visual (WCAG vs APCA)', level: 2 },
|
|
109
|
+
{
|
|
110
|
+
type: 'paragraph',
|
|
111
|
+
html: 'Pahami bagaimana warna dan tipografi Anda memengaruhi keterbacaan nyata dengan standar aksesibilitas perseptual terbaru. WCAG 2.1 menggunakan rumus matematis sederhana dari tahun 2008. <strong>APCA</strong> adalah model baru yang diusulkan untuk <strong>WCAG 3.0</strong> yang meniru persepsi manusia.',
|
|
112
|
+
},
|
|
113
|
+
{ type: 'title', text: 'Poin Utama APCA', level: 3 },
|
|
114
|
+
{
|
|
115
|
+
type: 'list',
|
|
116
|
+
items: [
|
|
117
|
+
'<strong>Polaritas:</strong> Memahami bahwa Dark Mode dipersepsikan berbeda dari Light Mode.',
|
|
118
|
+
'<strong>Ketebalan Font:</strong> Menetapkan tingkat kontras (Lc) spesifik berdasarkan bobot tipografi.',
|
|
119
|
+
'<strong>Linearitas:</strong> Memperbaiki ketidakakuratan matematis dalam model luminansi relatif tahun 2008.',
|
|
120
|
+
],
|
|
121
|
+
},
|
|
122
|
+
{ type: 'title', text: 'Level APCA yang Direkomendasikan', level: 3 },
|
|
123
|
+
{
|
|
124
|
+
type: 'list',
|
|
125
|
+
items: [
|
|
126
|
+
'<strong>Lc 90+:</strong> Ideal untuk teks sangat kecil atau berbobot rendah.',
|
|
127
|
+
'<strong>Lc 75:</strong> Standar untuk teks bacaan utama (body).',
|
|
128
|
+
'<strong>Lc 60:</strong> Minimum untuk konten berukuran sedang yang terbaca.',
|
|
129
|
+
'<strong>Lc 45:</strong> Minimum untuk elemen besar atau dekoratif.',
|
|
130
|
+
],
|
|
131
|
+
},
|
|
132
|
+
],
|
|
133
|
+
};
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { ReadabilityCalculatorUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const slug = 'calcolatore-leggibilita-visiva-wcag-apca';
|
|
6
|
+
const title = 'Calcolatore di Leggibilità Visiva WCAG e APCA';
|
|
7
|
+
const description = 'Verifica il contrasto reale dei tuoi design con APCA (WCAG 3.0). Analizza come il peso e la dimensione del font influenzano la leggibilità effettiva. Dai semplici rapporti alla leggibilità percettiva.';
|
|
8
|
+
|
|
9
|
+
const faqData = [
|
|
10
|
+
{
|
|
11
|
+
question: "Cos'è APCA e perché è diverso da WCAG 2.1?",
|
|
12
|
+
answer: "APCA è l'Advanced Perceptual Contrast Algorithm sviluppato per WCAG 3.0. A differenza del vecchio rapporto semplice, APCA utilizza modelli matematici che replicano come il cervello umano percepisce il contrasto, tenendo conto della polarità (sfondo chiaro vs. scuro) e della dimensione e del peso del font.",
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
question: 'Cosa rappresenta il valore Lc?',
|
|
16
|
+
answer: "Lc (Lightness Contrast) è il valore di contrasto generato da APCA. Un valore di 100 rappresenta il contrasto massimo ideale, mentre valori inferiori a 60 diventano critici per i testi a lettura continua. È una scala di magnitudine assoluta della percezione.",
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
question: 'Come influisce il peso del font sulla leggibilità?',
|
|
20
|
+
answer: 'I font sottili (Thin/Light) richiedono un contrasto molto più elevato per essere leggibili. APCA penalizza i font a basso peso, indicando che un design che supera WCAG con un font a peso 100 potrebbe risultare illeggibile nella pratica.',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
question: 'Questo calcolatore è privato?',
|
|
24
|
+
answer: 'Sì, tutti i calcoli vengono eseguiti localmente nel tuo browser. I colori e le impostazioni che analizzi non vengono mai inviati a nessun server, garantendo la massima privacy per i tuoi progetti di design.',
|
|
25
|
+
},
|
|
26
|
+
];
|
|
27
|
+
|
|
28
|
+
const howToData = [
|
|
29
|
+
{ name: 'Scegli i Colori', text: 'Usa i selettori di colore per impostare il colore del testo e dello sfondo del tuo design.' },
|
|
30
|
+
{ name: 'Regola la Tipografia', text: 'Usa i cursori di dimensione e peso del font per simulare la tua tipografia reale.' },
|
|
31
|
+
{ name: 'Leggi i Risultati', text: 'Controlla il rapporto WCAG 2.1 e il valore APCA Lc per sapere se il tuo design è accessibile.' },
|
|
32
|
+
{ name: 'Esamina i Consigli', text: 'Leggi le raccomandazioni APCA specifiche per il testo corpo, il testo piccolo e gli elementi UI.' },
|
|
33
|
+
];
|
|
34
|
+
|
|
35
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
36
|
+
'@context': 'https://schema.org',
|
|
37
|
+
'@type': 'FAQPage',
|
|
38
|
+
mainEntity: faqData.map((item) => ({
|
|
39
|
+
'@type': 'Question',
|
|
40
|
+
name: item.question,
|
|
41
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
42
|
+
})),
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
const howToSchema: WithContext<HowToThing> = {
|
|
46
|
+
'@context': 'https://schema.org',
|
|
47
|
+
'@type': 'HowTo',
|
|
48
|
+
name: title,
|
|
49
|
+
description,
|
|
50
|
+
step: howToData.map((s, i) => ({ '@type': 'HowToStep', position: i + 1, name: s.name, text: s.text })),
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
54
|
+
'@context': 'https://schema.org',
|
|
55
|
+
'@type': 'SoftwareApplication',
|
|
56
|
+
name: title,
|
|
57
|
+
description,
|
|
58
|
+
applicationCategory: 'UtilityApplication',
|
|
59
|
+
operatingSystem: 'All',
|
|
60
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
61
|
+
inLanguage: 'it',
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
const ui: ReadabilityCalculatorUI = {
|
|
65
|
+
labelColors: 'Colori Base',
|
|
66
|
+
labelText: 'Testo',
|
|
67
|
+
labelBg: 'Sfondo',
|
|
68
|
+
labelTypo: 'Tipografia',
|
|
69
|
+
labelFontSize: 'Dimensione Font',
|
|
70
|
+
labelFontWeight: 'Peso Font',
|
|
71
|
+
labelCompare: 'Confronto Contrasto',
|
|
72
|
+
labelPreview: 'Anteprima Percettiva',
|
|
73
|
+
labelApcaRecs: 'Raccomandazioni APCA',
|
|
74
|
+
labelBody: 'Testo Corpo (Body)',
|
|
75
|
+
labelSmall: 'Testo Piccolo / Didascalia',
|
|
76
|
+
labelUi: 'UI / Pulsanti',
|
|
77
|
+
statusYes: 'Sì',
|
|
78
|
+
statusNo: 'No',
|
|
79
|
+
wcagAAA: 'Supera AAA',
|
|
80
|
+
wcagAA: 'Supera AA',
|
|
81
|
+
wcagLarge: 'Solo Testo Grande',
|
|
82
|
+
wcagFail: 'Non Supera',
|
|
83
|
+
apcaExcellent: 'Eccellente',
|
|
84
|
+
apcaGood: 'Buono',
|
|
85
|
+
apcaMinimal: 'Minimo',
|
|
86
|
+
apcaPoor: 'Insufficiente',
|
|
87
|
+
previewText: 'La leggibilità visiva non è solo matematica. È il modo in cui luce e ombra interagiscono con i tuoi occhi.',
|
|
88
|
+
wcagRatioLabel: 'Rapporto WCAG 2.1',
|
|
89
|
+
apcaLcLabel: 'APCA Lc (WCAG 3)',
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
export const content: ToolLocaleContent<ReadabilityCalculatorUI> = {
|
|
93
|
+
slug,
|
|
94
|
+
title,
|
|
95
|
+
description,
|
|
96
|
+
ui,
|
|
97
|
+
faqTitle: 'Domande Frequenti',
|
|
98
|
+
faq: faqData,
|
|
99
|
+
bibliographyTitle: 'Risorse su Contrasto e APCA',
|
|
100
|
+
bibliography: [
|
|
101
|
+
{ name: 'W3C: Bozza WCAG 3.0 (Silver)', url: 'https://www.w3.org/WAI/standards-guidelines/wcag/wcag3-intro/' },
|
|
102
|
+
{ name: 'Myndex: Guida di Riferimento APCA', url: 'https://apcaw3.myndex.com/' },
|
|
103
|
+
{ name: 'MDN: Accessibilità e Contrasto Colore', url: 'https://developer.mozilla.org/it/docs/Web/Accessibility/Understanding_WCAG/Perceivable/Color_contrast' },
|
|
104
|
+
],
|
|
105
|
+
howTo: howToData,
|
|
106
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
107
|
+
seo: [
|
|
108
|
+
{ type: 'title', text: 'Calcolatore di Leggibilità Visiva (WCAG vs APCA)', level: 2 },
|
|
109
|
+
{
|
|
110
|
+
type: 'paragraph',
|
|
111
|
+
html: 'Scopri come i tuoi colori e la tua tipografia influenzano la leggibilità reale con il nuovo standard di accessibilità percettiva. WCAG 2.1 usa una semplice formula matematica del 2008. <strong>APCA</strong> è il nuovo modello proposto per <strong>WCAG 3.0</strong> che replica la percezione umana.',
|
|
112
|
+
},
|
|
113
|
+
{ type: 'title', text: 'Punti Chiave di APCA', level: 3 },
|
|
114
|
+
{
|
|
115
|
+
type: 'list',
|
|
116
|
+
items: [
|
|
117
|
+
'<strong>Polarità:</strong> Riconosce che la modalità scura (Dark Mode) viene percepita diversamente da quella chiara.',
|
|
118
|
+
'<strong>Peso del Font:</strong> Assegna livelli di contrasto specifici (Lc) in base al peso tipografico.',
|
|
119
|
+
'<strong>Linearità:</strong> Corregge le imprecisioni matematiche nel modello di luminanza relativa del 2008.',
|
|
120
|
+
],
|
|
121
|
+
},
|
|
122
|
+
{ type: 'title', text: 'Livelli APCA Consigliati', level: 3 },
|
|
123
|
+
{
|
|
124
|
+
type: 'list',
|
|
125
|
+
items: [
|
|
126
|
+
'<strong>Lc 90+:</strong> Ideale per testo molto piccolo o di basso peso.',
|
|
127
|
+
'<strong>Lc 75:</strong> Lo standard per il testo corpo principale.',
|
|
128
|
+
'<strong>Lc 60:</strong> Minimo per contenuto di dimensione media leggibile.',
|
|
129
|
+
'<strong>Lc 45:</strong> Minimo per elementi grandi o decorativi.',
|
|
130
|
+
],
|
|
131
|
+
},
|
|
132
|
+
],
|
|
133
|
+
};
|