@jjlmoya/utils-developer 1.4.0 → 1.6.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/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_language_code_format.test.ts +25 -0
- package/src/tests/slug_uniqueness.test.ts +87 -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 +1 -0
- 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 +1 -0
- 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 +1 -0
- 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,157 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { JsonFormatterUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const slug = 'json-formatter';
|
|
6
|
+
const title = '免费在线 JSON 格式化与校验工具';
|
|
7
|
+
const description =
|
|
8
|
+
'免费在线工具,用于格式化、校验和修复 JSON 代码。美化并排版 JSON。自动检测语法错误并提高代码可读性。';
|
|
9
|
+
|
|
10
|
+
const faqData = [
|
|
11
|
+
{
|
|
12
|
+
question: '使用此格式化工具时,我的数据安全吗?',
|
|
13
|
+
answer:
|
|
14
|
+
'绝对安全。所有处理均 100% 在您的浏览器中完成(客户端处理)。您的 JSON 数据永远不会被发送到任何服务器,确保您的数据结构完全私密。',
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
question: '导致“Invalid JSON”错误的原因是什么?',
|
|
18
|
+
answer:
|
|
19
|
+
'通常是由于对象末尾多余的逗号、键(key)缺少双引号或存在不可见字符引起的。我们的工具会高亮显示错误的具体行号,方便您进行修复。',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
question: '它能修复错误的 JSON 吗?',
|
|
23
|
+
answer:
|
|
24
|
+
'我们的工具会自动尝试修正常见错误,例如不必要的末尾逗号或格式错误的转义字符,使 JSON 符合 RFC 8259 标准并变为有效格式。',
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
question: '它支持非常大的 JSON 文件吗?',
|
|
28
|
+
answer:
|
|
29
|
+
'支持。其处理引擎经过优化,能够处理复杂的数据结构和大型文件,而不会导致浏览器界面卡顿。',
|
|
30
|
+
},
|
|
31
|
+
];
|
|
32
|
+
|
|
33
|
+
const howToData = [
|
|
34
|
+
{
|
|
35
|
+
name: '粘贴代码',
|
|
36
|
+
text: '将未格式化或已压缩的 JSON 粘贴到主文本区域内。',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: '校验与格式化',
|
|
40
|
+
text: '系统将自动分析代码,高亮显示语法错误,并应用缩进以提高可读性。',
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: '选择样式',
|
|
44
|
+
text: '根据您需要可读性还是节省空间,在展开(美化)或压缩(最小化)格式之间进行选择。',
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: '复制结果',
|
|
48
|
+
text: '点击复制按钮,将完美校验后的 JSON 获取到剪贴板中。',
|
|
49
|
+
},
|
|
50
|
+
];
|
|
51
|
+
|
|
52
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
53
|
+
'@context': 'https://schema.org',
|
|
54
|
+
'@type': 'FAQPage',
|
|
55
|
+
mainEntity: faqData.map((item) => ({
|
|
56
|
+
'@type': 'Question',
|
|
57
|
+
name: item.question,
|
|
58
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
59
|
+
})),
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
const howToSchema: WithContext<HowToThing> = {
|
|
63
|
+
'@context': 'https://schema.org',
|
|
64
|
+
'@type': 'HowTo',
|
|
65
|
+
name: title,
|
|
66
|
+
description,
|
|
67
|
+
step: howToData.map((step, i) => ({
|
|
68
|
+
'@type': 'HowToStep',
|
|
69
|
+
position: i + 1,
|
|
70
|
+
name: step.name,
|
|
71
|
+
text: step.text,
|
|
72
|
+
})),
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
76
|
+
'@context': 'https://schema.org',
|
|
77
|
+
'@type': 'SoftwareApplication',
|
|
78
|
+
name: title,
|
|
79
|
+
description,
|
|
80
|
+
applicationCategory: 'UtilityApplication',
|
|
81
|
+
operatingSystem: 'All',
|
|
82
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
83
|
+
inLanguage: 'zh',
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
const ui: JsonFormatterUI = {
|
|
87
|
+
labelInput: '输入 (JSON)',
|
|
88
|
+
labelOutput: '输出',
|
|
89
|
+
btnMinify: '压缩',
|
|
90
|
+
btnBeautify: '美化',
|
|
91
|
+
btnFix: '尝试修复',
|
|
92
|
+
btnCopy: '复制',
|
|
93
|
+
statusWaiting: '等待输入...',
|
|
94
|
+
statusValid: '有效的 JSON',
|
|
95
|
+
statusInvalid: '无效的 JSON',
|
|
96
|
+
toastCopied: '已复制!',
|
|
97
|
+
toastFixed: 'JSON 已修复(预览)',
|
|
98
|
+
toastFixFailed: '无法自动修复',
|
|
99
|
+
placeholder: '在此粘贴您的 JSON...',
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
export const content: ToolLocaleContent<JsonFormatterUI> = {
|
|
103
|
+
slug,
|
|
104
|
+
title,
|
|
105
|
+
description,
|
|
106
|
+
ui,
|
|
107
|
+
faqTitle: '常见问题',
|
|
108
|
+
faq: faqData,
|
|
109
|
+
bibliographyTitle: '参考资料与标准',
|
|
110
|
+
bibliography: [
|
|
111
|
+
{
|
|
112
|
+
name: 'RFC 8259 – The JavaScript Object Notation (JSON) Data Interchange Format (IETF)',
|
|
113
|
+
url: 'https://datatracker.ietf.org/doc/html/rfc8259',
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
name: 'ECMA-404 – The JSON Data Interchange Syntax (Ecma International)',
|
|
117
|
+
url: 'https://www.ecma-international.org/publications-and-standards/standards/ecma-404/',
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
name: 'JSON.org – JSON 介绍',
|
|
121
|
+
url: 'https://www.json.org/json-en.html',
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
name: 'MDN Web Docs – JSON',
|
|
125
|
+
url: 'https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/JSON',
|
|
126
|
+
},
|
|
127
|
+
],
|
|
128
|
+
howTo: howToData,
|
|
129
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
130
|
+
seo: [
|
|
131
|
+
{
|
|
132
|
+
type: 'title',
|
|
133
|
+
text: 'JSON 校验与格式化',
|
|
134
|
+
level: 2,
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
type: 'paragraph',
|
|
138
|
+
html: 'JSON (JavaScript Object Notation) 是 Web 数据交换的事实标准。然而,其严谨的语法使得在手动编辑时容易出现人为错误。',
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
type: 'paragraph',
|
|
142
|
+
html: '此工具允许您验证结构、对代码进行格式化以提高可读性,并自动修复常见的语法错误。',
|
|
143
|
+
},
|
|
144
|
+
{ type: 'grid', columns: 2 },
|
|
145
|
+
{
|
|
146
|
+
type: 'card',
|
|
147
|
+
title: '它能修复的常见错误',
|
|
148
|
+
html: '<ul><li><strong>单引号:</strong> JSON 标准要求使用双引号。该工具会将 <code>\'key\': \'value\'</code> 转换为 <code>"key": "value"</code>。</li><li><strong>未加引号的键:</strong> 检测 JavaScript 风格的对象键并添加必要的引号。</li><li><strong>末尾逗号:</strong> 移除对象或数组末尾会破坏严格解析器的逗号(trailing commas)。</li></ul>',
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
type: 'card',
|
|
152
|
+
title: '功能特性',
|
|
153
|
+
html: '<ul><li><strong>语法高亮:</strong> 对键、字符串、数字和布尔值进行着色,以便快速阅读。</li><li><strong>实时校验:</strong> 立即指示 JSON 是否有效,或显示特定的解析错误。</li><li><strong>完全隐私:</strong> 所有处理均在您的浏览器中完成。数据不会被发送到外部服务器。</li></ul>',
|
|
154
|
+
},
|
|
155
|
+
],
|
|
156
|
+
};
|
|
157
|
+
|
|
@@ -7,10 +7,6 @@ import type { JsonFormatterUI } from './ui';
|
|
|
7
7
|
|
|
8
8
|
export type JsonFormatterLocaleContent = ToolLocaleContent<JsonFormatterUI>;
|
|
9
9
|
|
|
10
|
-
import { content as es } from './i18n/es';
|
|
11
|
-
import { content as en } from './i18n/en';
|
|
12
|
-
import { content as fr } from './i18n/fr';
|
|
13
|
-
|
|
14
10
|
export const jsonFormatter: DeveloperToolEntry<JsonFormatterUI> = {
|
|
15
11
|
id: 'json-formatter',
|
|
16
12
|
icons: {
|
|
@@ -18,9 +14,21 @@ export const jsonFormatter: DeveloperToolEntry<JsonFormatterUI> = {
|
|
|
18
14
|
fg: 'mdi:code-braces',
|
|
19
15
|
},
|
|
20
16
|
i18n: {
|
|
21
|
-
|
|
22
|
-
en: async () => en,
|
|
23
|
-
|
|
17
|
+
de: async () => (await import('./i18n/de')).content,
|
|
18
|
+
en: async () => (await import('./i18n/en')).content,
|
|
19
|
+
es: async () => (await import('./i18n/es')).content,
|
|
20
|
+
fr: async () => (await import('./i18n/fr')).content,
|
|
21
|
+
id: async () => (await import('./i18n/id')).content,
|
|
22
|
+
it: async () => (await import('./i18n/it')).content,
|
|
23
|
+
ja: async () => (await import('./i18n/ja')).content,
|
|
24
|
+
ko: async () => (await import('./i18n/ko')).content,
|
|
25
|
+
nl: async () => (await import('./i18n/nl')).content,
|
|
26
|
+
pl: async () => (await import('./i18n/pl')).content,
|
|
27
|
+
pt: async () => (await import('./i18n/pt')).content,
|
|
28
|
+
ru: async () => (await import('./i18n/ru')).content,
|
|
29
|
+
sv: async () => (await import('./i18n/sv')).content,
|
|
30
|
+
tr: async () => (await import('./i18n/tr')).content,
|
|
31
|
+
zh: async () => (await import('./i18n/zh')).content,
|
|
24
32
|
},
|
|
25
33
|
};
|
|
26
34
|
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { KeycodeUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const slug = 'tastaturcode';
|
|
6
|
+
const title = 'Tastaturcode Visualizer Online. KeyCode Inspector';
|
|
7
|
+
const description =
|
|
8
|
+
'Kostenloses Online-Tool, um event.key, event.code, event.which und die Position jeder Taste in Echtzeit zu sehen. Erzeugt sofort verwendbare JavaScript-Codeausschnitte.';
|
|
9
|
+
|
|
10
|
+
const faqData = [
|
|
11
|
+
{
|
|
12
|
+
question: 'Was ist der Unterschied zwischen event.key und event.code?',
|
|
13
|
+
answer:
|
|
14
|
+
'event.code steht für die physische Taste auf der Tastatur, unabhängig von der konfigurierten Sprache. event.key steht für das erzeugte Zeichen, das sich ändert, wenn Sie Shift drücken oder eine andere Sprache verwenden. Für Spielsteuerungen verwenden Sie code; für Texteingabe und semantische Tastaturkürzel verwenden Sie key.',
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
question: 'Was ist event.which und warum gilt es als veraltet?',
|
|
18
|
+
answer:
|
|
19
|
+
'event.which ist eine veraltete Eigenschaft, die einen numerischen ASCII-Code der Taste zurückgibt. Sie ist in modernen Standards als veraltet (deprecated) markiert, weil event.key und event.code sie mit präziseren und besser lesbaren Informationen ersetzen. Sie wird in diesem Tool zu Bildungszwecken angezeigt.',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
question: 'Was bedeutet die location-Eigenschaft?',
|
|
23
|
+
answer:
|
|
24
|
+
'Die location-Eigenschaft gibt an, wo die Taste physisch auf der Tastatur liegt: Standard (normale Position), Left (linke Modifikatortaste), Right (rechte Modifikatortaste) oder Numpad (Nummernblock). So lassen sich beispielsweise die linke und rechte STRG-Taste unterscheiden.',
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
question: 'Funktioniert das Tool mit internationalen Tastaturen und Nicht-QWERTY-Layouts?',
|
|
28
|
+
answer:
|
|
29
|
+
'Ja. Das Tool zeigt genau das an, was der Browser für Ihre Tastaturkonfiguration meldet. event.code gibt immer den QWERTY-Namen der physischen Position zurück, während event.key das tatsächliche Zeichen entsprechend Ihrer Sprache anzeigt.',
|
|
30
|
+
},
|
|
31
|
+
];
|
|
32
|
+
|
|
33
|
+
const howToData = [
|
|
34
|
+
{
|
|
35
|
+
name: 'Eine Taste drücken',
|
|
36
|
+
text: 'Wenn die Seite den Fokus hat, drücken Sie eine beliebige Taste auf der Tastatur, um sofort alle Ereignisinformationen zu sehen.',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: 'Einzelne Werte kopieren',
|
|
40
|
+
text: 'Klicken Sie auf die Schaltfläche zum Kopieren neben jeder Eigenschaft (event.key, event.code usw.), um den jeweiligen Wert in die Zwischenablage zu kopieren.',
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: 'Codeausschnitte verwenden',
|
|
44
|
+
text: 'Im Bereich „Schnelle Codeausschnitte" finden Sie JavaScript-Codeblöcke, die Sie direkt in Ihr Projekt einfügen können.',
|
|
45
|
+
},
|
|
46
|
+
];
|
|
47
|
+
|
|
48
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
49
|
+
'@context': 'https://schema.org',
|
|
50
|
+
'@type': 'FAQPage',
|
|
51
|
+
mainEntity: faqData.map((item) => ({
|
|
52
|
+
'@type': 'Question',
|
|
53
|
+
name: item.question,
|
|
54
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
55
|
+
})),
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
const howToSchema: WithContext<HowToThing> = {
|
|
59
|
+
'@context': 'https://schema.org',
|
|
60
|
+
'@type': 'HowTo',
|
|
61
|
+
name: title,
|
|
62
|
+
description,
|
|
63
|
+
step: howToData.map((step, i) => ({
|
|
64
|
+
'@type': 'HowToStep',
|
|
65
|
+
position: i + 1,
|
|
66
|
+
name: step.name,
|
|
67
|
+
text: step.text,
|
|
68
|
+
})),
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
72
|
+
'@context': 'https://schema.org',
|
|
73
|
+
'@type': 'SoftwareApplication',
|
|
74
|
+
name: title,
|
|
75
|
+
description,
|
|
76
|
+
applicationCategory: 'DeveloperApplication',
|
|
77
|
+
operatingSystem: 'All',
|
|
78
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
79
|
+
inLanguage: 'de',
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
const ui: KeycodeUI = {
|
|
83
|
+
promptTitle: 'Taste drücken',
|
|
84
|
+
promptSubtitle: 'Beliebige Taste auf Ihrer Tastatur, um den Code zu sehen',
|
|
85
|
+
snippetsTitle: 'Schnelle Codeausschnitte',
|
|
86
|
+
btnCopy: 'Kopieren',
|
|
87
|
+
locationStandard: 'Standard',
|
|
88
|
+
locationLeft: 'Links',
|
|
89
|
+
locationRight: 'Rechts',
|
|
90
|
+
locationNumpad: 'Numpad',
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
export const content: ToolLocaleContent<KeycodeUI> = {
|
|
94
|
+
slug,
|
|
95
|
+
title,
|
|
96
|
+
description,
|
|
97
|
+
ui,
|
|
98
|
+
faqTitle: 'Häufig gestellte Fragen',
|
|
99
|
+
faq: faqData,
|
|
100
|
+
bibliographyTitle: 'Referenzen und Standards',
|
|
101
|
+
bibliography: [
|
|
102
|
+
{
|
|
103
|
+
name: 'MDN Web Docs – KeyboardEvent',
|
|
104
|
+
url: 'https://developer.mozilla.org/de/docs/Web/API/KeyboardEvent',
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
name: 'UI Events Specification (W3C) – KeyboardEvent',
|
|
108
|
+
url: 'https://www.w3.org/TR/uievents/#events-keyboardevents',
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
name: 'MDN – KeyboardEvent.code values',
|
|
112
|
+
url: 'https://developer.mozilla.org/en-US/docs/Web/API/UI_Events/Keyboard_event_code_values',
|
|
113
|
+
},
|
|
114
|
+
],
|
|
115
|
+
howTo: howToData,
|
|
116
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
117
|
+
seo: [
|
|
118
|
+
{
|
|
119
|
+
type: 'title',
|
|
120
|
+
text: 'Tastaturereignisse in JavaScript verstehen',
|
|
121
|
+
level: 2,
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
type: 'paragraph',
|
|
125
|
+
html: 'Wenn ein Benutzer eine Taste drückt, löst der Browser drei Ereignisse aus: <code>keydown</code>, <code>keypress</code> und <code>keyup</code>. Jedes davon gibt Eigenschaften mit Informationen über die gedrückte Taste zurück, aber nicht alle sind gleichwertig oder empfehlenswert.',
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
type: 'title',
|
|
129
|
+
text: 'Eigenschaften von Tastaturereignissen',
|
|
130
|
+
level: 3,
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
type: 'grid',
|
|
134
|
+
columns: 2,
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
type: 'card',
|
|
138
|
+
title: 'event.code — Die physische Taste',
|
|
139
|
+
html: '<p>Gibt den Bezeichner der <strong>physischen Position</strong> der Taste auf der Tastatur zurück, unter Verwendung der QWERTY-Nomenklatur. Die Taste „A" auf einer AZERTY-Tastatur gibt zum Beispiel <code>KeyQ</code> zurück. Ideal für Spielsteuerungen, bei denen die Position zählt, nicht das Zeichen.</p>',
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
type: 'card',
|
|
143
|
+
title: 'event.key — Das erzeugte Zeichen',
|
|
144
|
+
html: '<p>Gibt den <strong>Zeichenwert</strong> zurück, der je nach Sprache und aktiven Modifikatoren erzeugt wird. Shift+A ergibt <code>"A"</code>; ohne Shift ergibt sich <code>"a"</code>. Bei Sondertasten werden Namen wie <code>"Enter"</code>, <code>"Escape"</code> oder <code>"ArrowUp"</code> zurückgegeben.</p>',
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
type: 'title',
|
|
148
|
+
text: 'Wann welche Eigenschaft verwenden',
|
|
149
|
+
level: 3,
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
type: 'tip',
|
|
153
|
+
html: 'Verwenden Sie <code>event.code</code> für Spielsteuerungen (WASD unabhängig von der Sprache) und <code>event.key</code>, um bestimmte Zeichen oder semantische Tastaturkürzel wie <code>Ctrl+C</code> zu erkennen.',
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
type: 'paragraph',
|
|
157
|
+
html: 'Die Eigenschaften <code>event.which</code> und <code>event.keyCode</code> sind gemäß dem W3C-Standard offiziell <strong>veraltet</strong>. Obwohl moderne Browser sie aus Kompatibilitätsgründen weiterhin unterstützen, sollten sie in neuem Code nicht mehr verwendet werden.',
|
|
158
|
+
},
|
|
159
|
+
],
|
|
160
|
+
};
|
|
161
|
+
|
|
@@ -2,7 +2,7 @@ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'sche
|
|
|
2
2
|
import type { ToolLocaleContent } from '../../../types';
|
|
3
3
|
import type { KeycodeUI } from '../ui';
|
|
4
4
|
|
|
5
|
-
const slug = '
|
|
5
|
+
const slug = 'visualiseur-codes-clavier';
|
|
6
6
|
const title = 'Visualiseur de codes clavier en ligne. KeyCode Inspector';
|
|
7
7
|
const description =
|
|
8
8
|
'Outil en ligne gratuit pour voir en temps réel le event.key, event.code, event.which et la location de n\'importe quelle touche de clavier. Génère des extraits de code JavaScript prêts à l\'emploi.';
|
|
@@ -158,3 +158,4 @@ export const content: ToolLocaleContent<KeycodeUI> = {
|
|
|
158
158
|
},
|
|
159
159
|
],
|
|
160
160
|
};
|
|
161
|
+
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { KeycodeUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const slug = 'penampil-kode-keyboard';
|
|
6
|
+
const title = 'Visualizer Kode Tombol Keyboard Online. KeyCode Inspector';
|
|
7
|
+
const description =
|
|
8
|
+
'Alat online gratis untuk melihat event.key, event.code, event.which, dan lokasi setiap tombol keyboard secara real time. Menghasilkan cuplikan kode JavaScript siap pakai.';
|
|
9
|
+
|
|
10
|
+
const faqData = [
|
|
11
|
+
{
|
|
12
|
+
question: 'Apa perbedaan antara event.key dan event.code?',
|
|
13
|
+
answer:
|
|
14
|
+
'event.code mewakili tombol fisik pada keyboard, terlepas dari bahasa yang dikonfigurasi. event.key mewakili karakter yang dihasilkan, yang dapat berubah jika Anda menekan Shift atau menggunakan bahasa lain. Gunakan code untuk kontrol game; gunakan key untuk input teks dan pintasan keyboard semantik.',
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
question: 'Apa itu event.which dan mengapa dianggap usang?',
|
|
18
|
+
answer:
|
|
19
|
+
'event.which adalah properti lama yang mengembalikan kode ASCII numerik untuk tombol yang ditekan. Properti ini ditandai sebagai usang (deprecated) dalam standar modern karena event.key dan event.code menggantikannya dengan informasi yang lebih tepat dan mudah dibaca. Properti ini ditampilkan dalam alat ini untuk keperluan edukasi.',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
question: 'Apa arti properti location?',
|
|
23
|
+
answer:
|
|
24
|
+
'Properti location menunjukkan di mana tombol berada secara fisik pada keyboard: Standard (posisi normal), Left (tombol modifier kiri), Right (tombol modifier kanan), atau Numpad (papan angka). Properti ini berguna untuk membedakan tombol CTRL kiri dan kanan, misalnya.',
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
question: 'Apakah berfungsi dengan keyboard internasional dan tata letak non-QWERTY?',
|
|
28
|
+
answer:
|
|
29
|
+
'Ya. Alat ini menampilkan tepat apa yang dilaporkan browser untuk konfigurasi keyboard Anda. event.code selalu mengembalikan nama QWERTY dari posisi fisik, sedangkan event.key menampilkan karakter aktual sesuai bahasa Anda.',
|
|
30
|
+
},
|
|
31
|
+
];
|
|
32
|
+
|
|
33
|
+
const howToData = [
|
|
34
|
+
{
|
|
35
|
+
name: 'Tekan sembarang tombol',
|
|
36
|
+
text: 'Saat halaman mendapat fokus, tekan sembarang tombol pada keyboard untuk langsung melihat semua informasi event.',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: 'Salin nilai individual',
|
|
40
|
+
text: 'Klik tombol salin di sebelah setiap properti (event.key, event.code, dll.) untuk menyalin nilai tersebut ke clipboard.',
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: 'Gunakan cuplikan kode',
|
|
44
|
+
text: 'Di bagian "Cuplikan Cepat" Anda akan menemukan blok kode JavaScript yang siap ditempel langsung ke proyek Anda.',
|
|
45
|
+
},
|
|
46
|
+
];
|
|
47
|
+
|
|
48
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
49
|
+
'@context': 'https://schema.org',
|
|
50
|
+
'@type': 'FAQPage',
|
|
51
|
+
mainEntity: faqData.map((item) => ({
|
|
52
|
+
'@type': 'Question',
|
|
53
|
+
name: item.question,
|
|
54
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
55
|
+
})),
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
const howToSchema: WithContext<HowToThing> = {
|
|
59
|
+
'@context': 'https://schema.org',
|
|
60
|
+
'@type': 'HowTo',
|
|
61
|
+
name: title,
|
|
62
|
+
description,
|
|
63
|
+
step: howToData.map((step, i) => ({
|
|
64
|
+
'@type': 'HowToStep',
|
|
65
|
+
position: i + 1,
|
|
66
|
+
name: step.name,
|
|
67
|
+
text: step.text,
|
|
68
|
+
})),
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
72
|
+
'@context': 'https://schema.org',
|
|
73
|
+
'@type': 'SoftwareApplication',
|
|
74
|
+
name: title,
|
|
75
|
+
description,
|
|
76
|
+
applicationCategory: 'DeveloperApplication',
|
|
77
|
+
operatingSystem: 'All',
|
|
78
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
79
|
+
inLanguage: 'id',
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
const ui: KeycodeUI = {
|
|
83
|
+
promptTitle: 'Tekan sebuah tombol',
|
|
84
|
+
promptSubtitle: 'Tombol apa saja pada keyboard Anda untuk melihat kodenya',
|
|
85
|
+
snippetsTitle: 'Cuplikan Cepat',
|
|
86
|
+
btnCopy: 'Salin',
|
|
87
|
+
locationStandard: 'Standard',
|
|
88
|
+
locationLeft: 'Kiri',
|
|
89
|
+
locationRight: 'Kanan',
|
|
90
|
+
locationNumpad: 'Numpad',
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
export const content: ToolLocaleContent<KeycodeUI> = {
|
|
94
|
+
slug,
|
|
95
|
+
title,
|
|
96
|
+
description,
|
|
97
|
+
ui,
|
|
98
|
+
faqTitle: 'Pertanyaan yang Sering Diajukan',
|
|
99
|
+
faq: faqData,
|
|
100
|
+
bibliographyTitle: 'Referensi dan Standar',
|
|
101
|
+
bibliography: [
|
|
102
|
+
{
|
|
103
|
+
name: 'MDN Web Docs – KeyboardEvent',
|
|
104
|
+
url: 'https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent',
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
name: 'UI Events Specification (W3C) – KeyboardEvent',
|
|
108
|
+
url: 'https://www.w3.org/TR/uievents/#events-keyboardevents',
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
name: 'MDN – KeyboardEvent.code values',
|
|
112
|
+
url: 'https://developer.mozilla.org/en-US/docs/Web/API/UI_Events/Keyboard_event_code_values',
|
|
113
|
+
},
|
|
114
|
+
],
|
|
115
|
+
howTo: howToData,
|
|
116
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
117
|
+
seo: [
|
|
118
|
+
{
|
|
119
|
+
type: 'title',
|
|
120
|
+
text: 'Memahami event keyboard di JavaScript',
|
|
121
|
+
level: 2,
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
type: 'paragraph',
|
|
125
|
+
html: 'Saat pengguna menekan tombol, browser memicu tiga event: <code>keydown</code>, <code>keypress</code>, dan <code>keyup</code>. Masing-masing mengekspos properti dengan informasi tentang tombol yang ditekan, tetapi tidak semuanya setara atau direkomendasikan.',
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
type: 'title',
|
|
129
|
+
text: 'Properti event tombol keyboard',
|
|
130
|
+
level: 3,
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
type: 'grid',
|
|
134
|
+
columns: 2,
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
type: 'card',
|
|
138
|
+
title: 'event.code — Tombol fisik',
|
|
139
|
+
html: '<p>Mengembalikan pengenal <strong>posisi fisik</strong> tombol pada keyboard, menggunakan nomenklatur QWERTY. Misalnya, tombol "A" pada keyboard AZERTY mengembalikan <code>KeyQ</code>. Ideal untuk kontrol game di mana posisi yang penting, bukan karakter.</p>',
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
type: 'card',
|
|
143
|
+
title: 'event.key — Karakter yang dihasilkan',
|
|
144
|
+
html: '<p>Mengembalikan <strong>nilai karakter</strong> yang dihasilkan berdasarkan bahasa dan modifier aktif. Menekan Shift+A mengembalikan <code>"A"</code>; tanpa Shift mengembalikan <code>"a"</code>. Untuk tombol khusus, mengembalikan nama seperti <code>"Enter"</code>, <code>"Escape"</code>, <code>"ArrowUp"</code>.</p>',
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
type: 'title',
|
|
148
|
+
text: 'Kapan menggunakan setiap properti',
|
|
149
|
+
level: 3,
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
type: 'tip',
|
|
153
|
+
html: 'Gunakan <code>event.code</code> untuk kontrol game (WASD terlepas dari bahasa) dan <code>event.key</code> untuk mendeteksi karakter tertentu atau pintasan keyboard semantik seperti <code>Ctrl+C</code>.',
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
type: 'paragraph',
|
|
157
|
+
html: 'Properti <code>event.which</code> dan <code>event.keyCode</code> secara resmi telah <strong>usang</strong> menurut standar W3C. Meskipun browser modern masih mendukungnya untuk kompatibilitas, keduanya sebaiknya tidak digunakan pada kode baru.',
|
|
158
|
+
},
|
|
159
|
+
],
|
|
160
|
+
};
|
|
161
|
+
|