@jjlmoya/utils-developer 1.29.1 → 1.31.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 +70 -70
- package/src/category/seo.astro +1 -1
- package/src/components/PreviewNavSidebar.astro +1 -1
- package/src/components/PreviewToolbar.astro +1 -1
- package/src/data.ts +1 -1
- package/src/env.d.ts +1 -1
- package/src/layouts/PreviewLayout.astro +1 -1
- package/src/pages/[locale]/[slug].astro +162 -162
- package/src/pages/index.astro +1 -1
- package/src/tests/entry_contract.test.ts +8 -2
- package/src/tests/faq_count.test.ts +1 -1
- package/src/tests/i18n_coverage.test.ts +2 -6
- package/src/tests/inverted_punctuation.test.ts +113 -113
- package/src/tests/mocks/astro_mock.js +1 -1
- package/src/tests/no_h1_in_components.test.ts +1 -1
- package/src/tests/promote_this_website_i18n.test.ts +33 -0
- package/src/tests/slug_language_code_format.test.ts +25 -25
- package/src/tests/slug_uniqueness.test.ts +86 -86
- package/src/tests/tool_validation.test.ts +15 -15
- package/src/tool/aspectRatio/i18n/de.ts +164 -164
- package/src/tool/aspectRatio/i18n/ja.ts +1 -1
- package/src/tool/aspectRatio/i18n/ko.ts +1 -1
- package/src/tool/aspectRatio/i18n/pl.ts +164 -164
- package/src/tool/aspectRatio/i18n/ru.ts +164 -164
- package/src/tool/aspectRatio/i18n/zh.ts +165 -165
- package/src/tool/aspectRatio/seo.astro +15 -15
- package/src/tool/calculadoraTiempoDatos/i18n/de.ts +143 -143
- package/src/tool/calculadoraTiempoDatos/i18n/ja.ts +1 -1
- package/src/tool/calculadoraTiempoDatos/i18n/ko.ts +1 -1
- package/src/tool/calculadoraTiempoDatos/i18n/pl.ts +143 -143
- package/src/tool/calculadoraTiempoDatos/i18n/ru.ts +144 -144
- package/src/tool/calculadoraTiempoDatos/i18n/sv.ts +143 -143
- package/src/tool/calculadoraTiempoDatos/i18n/zh.ts +144 -144
- package/src/tool/calculadoraTiempoDatos/seo.astro +15 -15
- package/src/tool/colorConverter/i18n/de.ts +120 -120
- package/src/tool/colorConverter/i18n/ja.ts +1 -1
- package/src/tool/colorConverter/i18n/ko.ts +1 -1
- package/src/tool/colorConverter/i18n/ru.ts +120 -120
- package/src/tool/colorConverter/i18n/zh.ts +1 -1
- package/src/tool/colorConverter/seo.astro +15 -15
- package/src/tool/conversorExcelCsvHtml/i18n/ja.ts +1 -1
- package/src/tool/conversorExcelCsvHtml/i18n/ko.ts +1 -1
- package/src/tool/conversorExcelCsvHtml/i18n/pl.ts +124 -124
- package/src/tool/conversorExcelCsvHtml/i18n/ru.ts +124 -124
- package/src/tool/conversorExcelCsvHtml/i18n/zh.ts +125 -125
- package/src/tool/conversorExcelCsvHtml/seo.astro +15 -15
- package/src/tool/cronGenerator/i18n/ja.ts +1 -1
- package/src/tool/cronGenerator/i18n/ko.ts +1 -1
- package/src/tool/cronGenerator/i18n/zh.ts +183 -183
- package/src/tool/cronGenerator/seo.astro +15 -15
- package/src/tool/cssSpecificityCalculator/i18n/ja.ts +1 -1
- package/src/tool/cssSpecificityCalculator/i18n/ko.ts +1 -1
- package/src/tool/cssSpecificityCalculator/i18n/zh.ts +1 -1
- package/src/tool/cssSpecificityCalculator/seo.astro +15 -15
- package/src/tool/cssToInlineConverter/i18n/ja.ts +1 -1
- package/src/tool/cssToInlineConverter/i18n/ko.ts +1 -1
- package/src/tool/cssToInlineConverter/i18n/zh.ts +1 -1
- package/src/tool/cssToInlineConverter/seo.astro +15 -15
- package/src/tool/duplicateCssRemover/i18n/ja.ts +1 -1
- package/src/tool/duplicateCssRemover/i18n/ko.ts +1 -1
- package/src/tool/duplicateCssRemover/i18n/zh.ts +1 -1
- package/src/tool/duplicateCssRemover/seo.astro +15 -15
- package/src/tool/generadorSecurityTxt/i18n/ja.ts +1 -1
- package/src/tool/generadorSecurityTxt/i18n/ko.ts +1 -1
- package/src/tool/generadorSecurityTxt/i18n/zh.ts +1 -1
- package/src/tool/generadorSecurityTxt/seo.astro +15 -15
- package/src/tool/hashGenerator/i18n/ja.ts +1 -1
- package/src/tool/hashGenerator/i18n/ko.ts +1 -1
- package/src/tool/hashGenerator/seo.astro +15 -15
- package/src/tool/inspectorCertificadosSsl/i18n/ja.ts +1 -1
- package/src/tool/inspectorCertificadosSsl/i18n/ko.ts +1 -1
- package/src/tool/inspectorCertificadosSsl/i18n/zh.ts +1 -1
- package/src/tool/inspectorCertificadosSsl/seo.astro +15 -15
- package/src/tool/jsonFormatter/seo.astro +15 -15
- package/src/tool/jwtDecoder/i18n/es.ts +248 -248
- package/src/tool/jwtDecoder/i18n/fr.ts +248 -248
- package/src/tool/jwtDecoder/i18n/tr.ts +248 -248
- package/src/tool/keycode/seo.astro +15 -15
- package/src/tool/llmCostCalculator/i18n/fr.ts +149 -149
- package/src/tool/llmCostCalculator/i18n/ja.ts +1 -1
- package/src/tool/llmCostCalculator/i18n/ko.ts +1 -1
- package/src/tool/llmCostCalculator/seo.astro +15 -15
- package/src/tool/mobileMockupGenerator/i18n/ja.ts +1 -1
- package/src/tool/mobileMockupGenerator/i18n/ko.ts +1 -1
- package/src/tool/mobileMockupGenerator/i18n/zh.ts +1 -1
- package/src/tool/mobileMockupGenerator/seo.astro +15 -15
- package/src/tool/musicalTypography/i18n/ja.ts +1 -1
- package/src/tool/musicalTypography/i18n/ko.ts +1 -1
- package/src/tool/musicalTypography/i18n/zh.ts +1 -1
- package/src/tool/musicalTypography/seo.astro +15 -15
- package/src/tool/placeholderGenerator/i18n/ja.ts +1 -1
- package/src/tool/placeholderGenerator/i18n/ko.ts +1 -1
- package/src/tool/placeholderGenerator/i18n/zh.ts +1 -1
- package/src/tool/placeholderGenerator/seo.astro +15 -15
- package/src/tool/promoteThisWebsite/entry.ts +13 -0
- package/src/tool/promoteThisWebsite/i18n/de.ts +95 -0
- package/src/tool/promoteThisWebsite/i18n/fr.ts +95 -0
- package/src/tool/promoteThisWebsite/i18n/id.ts +95 -0
- package/src/tool/promoteThisWebsite/i18n/it.ts +95 -0
- package/src/tool/promoteThisWebsite/i18n/ja.ts +95 -0
- package/src/tool/promoteThisWebsite/i18n/ko.ts +95 -0
- package/src/tool/promoteThisWebsite/i18n/nl.ts +95 -0
- package/src/tool/promoteThisWebsite/i18n/pl.ts +95 -0
- package/src/tool/promoteThisWebsite/i18n/pt.ts +95 -0
- package/src/tool/promoteThisWebsite/i18n/ru.ts +95 -0
- package/src/tool/promoteThisWebsite/i18n/sv.ts +95 -0
- package/src/tool/promoteThisWebsite/i18n/tr.ts +95 -0
- package/src/tool/promoteThisWebsite/i18n/zh.ts +95 -0
- package/src/tool/promptLibrary/i18n/ja.ts +1 -1
- package/src/tool/promptLibrary/i18n/ko.ts +1 -1
- package/src/tool/promptLibrary/i18n/zh.ts +1 -1
- package/src/tool/promptLibrary/seo.astro +15 -15
- package/src/tool/readabilityCalculator/i18n/ja.ts +1 -1
- package/src/tool/readabilityCalculator/i18n/ko.ts +1 -1
- package/src/tool/readabilityCalculator/i18n/zh.ts +1 -1
- package/src/tool/readabilityCalculator/seo.astro +15 -15
- package/src/tool/serpPixelSimulator/entry.ts +30 -30
- package/src/tool/serpPixelSimulator/i18n/en.ts +211 -211
- package/src/tool/serpPixelSimulator/i18n/fr.ts +214 -214
- package/src/tool/serpPixelSimulator/i18n/ru.ts +214 -214
- package/src/tool/serpPixelSimulator/logic.ts +18 -18
- package/src/tool/serpPixelSimulator/serp-pixel-simulator.css +195 -195
- package/src/tool/svgSanitizer/i18n/ja.ts +1 -1
- package/src/tool/svgSanitizer/i18n/ko.ts +1 -1
- package/src/tool/svgSanitizer/seo.astro +15 -15
- package/src/tool/svgToCss/i18n/ja.ts +1 -1
- package/src/tool/svgToCss/i18n/ko.ts +1 -1
- package/src/tool/svgToCss/seo.astro +15 -15
- package/src/tool/urlCleaner/i18n/ja.ts +1 -1
- package/src/tool/urlCleaner/i18n/ko.ts +1 -1
- package/src/tool/urlCleaner/i18n/zh.ts +1 -1
- package/src/tool/urlCleaner/seo.astro +15 -15
- package/src/tool/urlEncoderDecoder/i18n/es.ts +146 -146
- package/src/tool/urlEncoderDecoder/i18n/ko.ts +1 -1
- package/src/tool/urlEncoderDecoder/seo.astro +15 -15
- package/src/tool/utmGenerator/i18n/ja.ts +1 -1
- package/src/tool/utmGenerator/i18n/ko.ts +1 -1
- package/src/tool/utmGenerator/i18n/zh.ts +1 -1
- package/src/tool/utmGenerator/seo.astro +15 -15
- package/src/types.ts +1 -1
|
@@ -1,150 +1,150 @@
|
|
|
1
1
|
import { bibliography } from '../bibliography';
|
|
2
|
-
import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
|
|
3
|
-
import type { ToolLocaleContent } from '../../../types';
|
|
4
|
-
import type { UrlEncoderDecoderUI } from '../ui';
|
|
5
|
-
|
|
6
|
-
const slug = 'codificador-decodificador-url';
|
|
7
|
-
const title = 'Codificador y Decodificador de URLs Online';
|
|
8
|
-
const description =
|
|
9
|
-
'Convierte caracteres especiales de cualquier enlace a formato seguro (Percent-Encoding) o devuélvelos a su estado original legible al instante de forma local.';
|
|
10
|
-
|
|
11
|
-
const faqData = [
|
|
12
|
-
{
|
|
13
|
-
question: '¿Qué caracteres se codifican en una URL?',
|
|
14
|
-
answer:
|
|
15
|
-
'Se codifican todos los caracteres no permitidos en el estándar ASCII para URLs: espacios, tildes, ñ, símbolos como &, =, +, #, ?, /, entre otros. Por ejemplo, un espacio se convierte en %20 y la ñ en %C3%B1.',
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
question: '¿Cuál es la diferencia entre encodeURI y encodeURIComponent?',
|
|
19
|
-
answer:
|
|
20
|
-
'encodeURI codifica una URL completa y deja intactos los caracteres reservados como / y ?. encodeURIComponent codifica todos los caracteres especiales incluyendo los reservados, siendo ideal para codificar valores individuales de parámetros de consulta.',
|
|
21
|
-
},
|
|
22
|
-
{
|
|
23
|
-
question: '¿Por qué mi URL tiene %20 en lugar de espacios?',
|
|
24
|
-
answer:
|
|
25
|
-
'El protocolo HTTP no permite espacios en las URLs. El %20 es la representación en Percent-Encoding del espacio en blanco según el estándar ASCII. Algunos sistemas usan el signo + como alternativa, pero %20 es el más universal y seguro.',
|
|
26
|
-
},
|
|
27
|
-
{
|
|
28
|
-
question: '¿Es seguro usar esta herramienta con URLs privadas?',
|
|
29
|
-
answer:
|
|
30
|
-
'Sí, completamente seguro. Todo el procesamiento ocurre en tu navegador mediante JavaScript nativo (encodeURIComponent/decodeURIComponent). Ninguna de tus URLs o parámetros se envían a ningún servidor externo.',
|
|
31
|
-
},
|
|
32
|
-
];
|
|
33
|
-
|
|
34
|
-
const howToData = [
|
|
35
|
-
{
|
|
36
|
-
name: 'Pegar el texto crudo',
|
|
37
|
-
text: 'Escribe o pega tu URL o cadena de texto en el campo superior "Texto Crudo (Legible)".',
|
|
38
|
-
},
|
|
39
|
-
{
|
|
40
|
-
name: 'Codificar o decodificar',
|
|
41
|
-
text: 'Haz clic en "Codificar URL" para convertir el texto a formato seguro Percent-Encoding, o en "Decodificar" para revertir una URL codificada a su forma legible.',
|
|
42
|
-
},
|
|
43
|
-
{
|
|
44
|
-
name: 'Copiar el resultado',
|
|
45
|
-
text: 'Usa el botón "Copiar" del campo correspondiente para llevar el resultado a tu portapapeles.',
|
|
46
|
-
},
|
|
47
|
-
];
|
|
48
|
-
|
|
49
|
-
const faqSchema: WithContext<FAQPage> = {
|
|
50
|
-
'@context': 'https://schema.org',
|
|
51
|
-
'@type': 'FAQPage',
|
|
52
|
-
mainEntity: faqData.map((item) => ({
|
|
53
|
-
'@type': 'Question',
|
|
54
|
-
name: item.question,
|
|
55
|
-
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
56
|
-
})),
|
|
57
|
-
};
|
|
58
|
-
|
|
59
|
-
const howToSchema: WithContext<HowToThing> = {
|
|
60
|
-
'@context': 'https://schema.org',
|
|
61
|
-
'@type': 'HowTo',
|
|
62
|
-
name: title,
|
|
63
|
-
description,
|
|
64
|
-
step: howToData.map((step, i) => ({
|
|
65
|
-
'@type': 'HowToStep',
|
|
66
|
-
position: i + 1,
|
|
67
|
-
name: step.name,
|
|
68
|
-
text: step.text,
|
|
69
|
-
})),
|
|
70
|
-
};
|
|
71
|
-
|
|
72
|
-
const appSchema: WithContext<SoftwareApplication> = {
|
|
73
|
-
'@context': 'https://schema.org',
|
|
74
|
-
'@type': 'SoftwareApplication',
|
|
75
|
-
name: title,
|
|
76
|
-
description,
|
|
77
|
-
applicationCategory: 'UtilityApplication',
|
|
78
|
-
operatingSystem: 'All',
|
|
79
|
-
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
80
|
-
inLanguage: 'es',
|
|
81
|
-
};
|
|
82
|
-
|
|
83
|
-
const ui: UrlEncoderDecoderUI = {
|
|
84
|
-
labelRaw: 'Texto Crudo (Legible)',
|
|
85
|
-
labelEncoded: 'URL Formateada (Encoded)',
|
|
86
|
-
btnClear: 'Limpiar',
|
|
87
|
-
btnCopy: 'Copiar',
|
|
88
|
-
btnCopied: '¡Copiado!',
|
|
89
|
-
btnEncode: 'Codificar URL',
|
|
90
|
-
btnDecode: 'Decodificar',
|
|
91
|
-
placeholderRaw: 'https://ejemplo.com/busqueda?q=zapatos de tacón rojo&talla=38',
|
|
92
|
-
placeholderEncoded: 'https%3A%2F%2Fejemplo.com%2Fbusqueda%3Fq%3Dzapatos%20de%20tac%C3%B3n%20rojo%26talla%3D38',
|
|
93
|
-
};
|
|
94
|
-
|
|
95
|
-
export const content: ToolLocaleContent<UrlEncoderDecoderUI> = {
|
|
96
|
-
slug,
|
|
97
|
-
title,
|
|
98
|
-
description,
|
|
99
|
-
ui,
|
|
100
|
-
faqTitle: 'Preguntas Frecuentes',
|
|
101
|
-
faq: faqData,
|
|
2
|
+
import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
|
|
3
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
4
|
+
import type { UrlEncoderDecoderUI } from '../ui';
|
|
5
|
+
|
|
6
|
+
const slug = 'codificador-decodificador-url';
|
|
7
|
+
const title = 'Codificador y Decodificador de URLs Online';
|
|
8
|
+
const description =
|
|
9
|
+
'Convierte caracteres especiales de cualquier enlace a formato seguro (Percent-Encoding) o devuélvelos a su estado original legible al instante de forma local.';
|
|
10
|
+
|
|
11
|
+
const faqData = [
|
|
12
|
+
{
|
|
13
|
+
question: '¿Qué caracteres se codifican en una URL?',
|
|
14
|
+
answer:
|
|
15
|
+
'Se codifican todos los caracteres no permitidos en el estándar ASCII para URLs: espacios, tildes, ñ, símbolos como &, =, +, #, ?, /, entre otros. Por ejemplo, un espacio se convierte en %20 y la ñ en %C3%B1.',
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
question: '¿Cuál es la diferencia entre encodeURI y encodeURIComponent?',
|
|
19
|
+
answer:
|
|
20
|
+
'encodeURI codifica una URL completa y deja intactos los caracteres reservados como / y ?. encodeURIComponent codifica todos los caracteres especiales incluyendo los reservados, siendo ideal para codificar valores individuales de parámetros de consulta.',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
question: '¿Por qué mi URL tiene %20 en lugar de espacios?',
|
|
24
|
+
answer:
|
|
25
|
+
'El protocolo HTTP no permite espacios en las URLs. El %20 es la representación en Percent-Encoding del espacio en blanco según el estándar ASCII. Algunos sistemas usan el signo + como alternativa, pero %20 es el más universal y seguro.',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
question: '¿Es seguro usar esta herramienta con URLs privadas?',
|
|
29
|
+
answer:
|
|
30
|
+
'Sí, completamente seguro. Todo el procesamiento ocurre en tu navegador mediante JavaScript nativo (encodeURIComponent/decodeURIComponent). Ninguna de tus URLs o parámetros se envían a ningún servidor externo.',
|
|
31
|
+
},
|
|
32
|
+
];
|
|
33
|
+
|
|
34
|
+
const howToData = [
|
|
35
|
+
{
|
|
36
|
+
name: 'Pegar el texto crudo',
|
|
37
|
+
text: 'Escribe o pega tu URL o cadena de texto en el campo superior "Texto Crudo (Legible)".',
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
name: 'Codificar o decodificar',
|
|
41
|
+
text: 'Haz clic en "Codificar URL" para convertir el texto a formato seguro Percent-Encoding, o en "Decodificar" para revertir una URL codificada a su forma legible.',
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
name: 'Copiar el resultado',
|
|
45
|
+
text: 'Usa el botón "Copiar" del campo correspondiente para llevar el resultado a tu portapapeles.',
|
|
46
|
+
},
|
|
47
|
+
];
|
|
48
|
+
|
|
49
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
50
|
+
'@context': 'https://schema.org',
|
|
51
|
+
'@type': 'FAQPage',
|
|
52
|
+
mainEntity: faqData.map((item) => ({
|
|
53
|
+
'@type': 'Question',
|
|
54
|
+
name: item.question,
|
|
55
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
56
|
+
})),
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
const howToSchema: WithContext<HowToThing> = {
|
|
60
|
+
'@context': 'https://schema.org',
|
|
61
|
+
'@type': 'HowTo',
|
|
62
|
+
name: title,
|
|
63
|
+
description,
|
|
64
|
+
step: howToData.map((step, i) => ({
|
|
65
|
+
'@type': 'HowToStep',
|
|
66
|
+
position: i + 1,
|
|
67
|
+
name: step.name,
|
|
68
|
+
text: step.text,
|
|
69
|
+
})),
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
73
|
+
'@context': 'https://schema.org',
|
|
74
|
+
'@type': 'SoftwareApplication',
|
|
75
|
+
name: title,
|
|
76
|
+
description,
|
|
77
|
+
applicationCategory: 'UtilityApplication',
|
|
78
|
+
operatingSystem: 'All',
|
|
79
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
80
|
+
inLanguage: 'es',
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
const ui: UrlEncoderDecoderUI = {
|
|
84
|
+
labelRaw: 'Texto Crudo (Legible)',
|
|
85
|
+
labelEncoded: 'URL Formateada (Encoded)',
|
|
86
|
+
btnClear: 'Limpiar',
|
|
87
|
+
btnCopy: 'Copiar',
|
|
88
|
+
btnCopied: '¡Copiado!',
|
|
89
|
+
btnEncode: 'Codificar URL',
|
|
90
|
+
btnDecode: 'Decodificar',
|
|
91
|
+
placeholderRaw: 'https://ejemplo.com/busqueda?q=zapatos de tacón rojo&talla=38',
|
|
92
|
+
placeholderEncoded: 'https%3A%2F%2Fejemplo.com%2Fbusqueda%3Fq%3Dzapatos%20de%20tac%C3%B3n%20rojo%26talla%3D38',
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
export const content: ToolLocaleContent<UrlEncoderDecoderUI> = {
|
|
96
|
+
slug,
|
|
97
|
+
title,
|
|
98
|
+
description,
|
|
99
|
+
ui,
|
|
100
|
+
faqTitle: 'Preguntas Frecuentes',
|
|
101
|
+
faq: faqData,
|
|
102
102
|
bibliographyTitle: 'Referencias y Documentación',
|
|
103
103
|
bibliography,
|
|
104
|
-
howTo: howToData,
|
|
105
|
-
schemas: [faqSchema, howToSchema, appSchema],
|
|
106
|
-
seo: [
|
|
107
|
-
{
|
|
108
|
-
type: 'title',
|
|
109
|
-
text: '¿Qué es la Codificación de una URL?',
|
|
110
|
-
level: 2,
|
|
111
|
-
},
|
|
112
|
-
{
|
|
113
|
-
type: 'paragraph',
|
|
114
|
-
html: 'Al navegar por internet o enviar peticiones a servidores, es común pensar en una URL (Uniform Resource Locator) como simplemente una "dirección web". Sin embargo, el protocolo de internet dicta que las URLs solo pueden transmitirse utilizando un conjunto muy restringido de caracteres <strong>ASCII estándar</strong>.',
|
|
115
|
-
},
|
|
116
|
-
{
|
|
117
|
-
type: 'paragraph',
|
|
118
|
-
html: '¿Qué ocurre si la URL contiene un espacio, tildes, o parámetros especiales como símbolos de más (<code>+</code>) o de igual (<code>=</code>)? Para evitar que los sistemas colapsen intentando leer caracteres ilegales, estos deben ser traducidos a su forma segura compatible utilizando <strong>Percent-Encoding</strong> (Codificación porcentual).',
|
|
119
|
-
},
|
|
120
|
-
{
|
|
121
|
-
type: 'title',
|
|
122
|
-
text: 'Cómo funciona el Percent-Encoding',
|
|
123
|
-
level: 3,
|
|
124
|
-
},
|
|
125
|
-
{
|
|
126
|
-
type: 'paragraph',
|
|
127
|
-
html: 'Cuando utilizas esta herramienta, el algoritmo toma cualquier carácter "inseguro" (como un espacio en blanco o una letra acentuada como la ñ) y lo sustituye por un signo de porcentaje <code>%</code> seguido de dos dígitos hexadecimales correspondientes a su valor en el estándar UTF-8.',
|
|
128
|
-
},
|
|
129
|
-
{
|
|
130
|
-
type: 'list',
|
|
131
|
-
items: [
|
|
132
|
-
'<strong>Ejemplo Básico:</strong> Un simple espacio en blanco será sustituido por su equivalente seguro: <code>%20</code>.',
|
|
133
|
-
'<strong>Soporte Extendido:</strong> Una letra <code>á</code> se transformará en <code>%C3%A1</code>, y la <code>ñ</code> en <code>%C3%B1</code>.',
|
|
134
|
-
],
|
|
135
|
-
},
|
|
136
|
-
{
|
|
137
|
-
type: 'title',
|
|
138
|
-
text: 'La importancia en APIs y Consultas GET',
|
|
139
|
-
level: 3,
|
|
140
|
-
},
|
|
141
|
-
{
|
|
142
|
-
type: 'paragraph',
|
|
143
|
-
html: 'Cuando desarrollas integraciones, un error típico consiste en pasar una cadena cruda a los parámetros de una URL. Si insertas <code>camisa&azul</code> de forma pura a tu backend (<code>/buscar?q=camisa&azul</code>), el servidor interpretará que <code>azul</code> es un nuevo parámetro, rompiendo toda la lógica del código.',
|
|
144
|
-
},
|
|
145
|
-
{
|
|
146
|
-
type: 'paragraph',
|
|
104
|
+
howTo: howToData,
|
|
105
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
106
|
+
seo: [
|
|
107
|
+
{
|
|
108
|
+
type: 'title',
|
|
109
|
+
text: '¿Qué es la Codificación de una URL?',
|
|
110
|
+
level: 2,
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
type: 'paragraph',
|
|
114
|
+
html: 'Al navegar por internet o enviar peticiones a servidores, es común pensar en una URL (Uniform Resource Locator) como simplemente una "dirección web". Sin embargo, el protocolo de internet dicta que las URLs solo pueden transmitirse utilizando un conjunto muy restringido de caracteres <strong>ASCII estándar</strong>.',
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
type: 'paragraph',
|
|
118
|
+
html: '¿Qué ocurre si la URL contiene un espacio, tildes, o parámetros especiales como símbolos de más (<code>+</code>) o de igual (<code>=</code>)? Para evitar que los sistemas colapsen intentando leer caracteres ilegales, estos deben ser traducidos a su forma segura compatible utilizando <strong>Percent-Encoding</strong> (Codificación porcentual).',
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
type: 'title',
|
|
122
|
+
text: 'Cómo funciona el Percent-Encoding',
|
|
123
|
+
level: 3,
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
type: 'paragraph',
|
|
127
|
+
html: 'Cuando utilizas esta herramienta, el algoritmo toma cualquier carácter "inseguro" (como un espacio en blanco o una letra acentuada como la ñ) y lo sustituye por un signo de porcentaje <code>%</code> seguido de dos dígitos hexadecimales correspondientes a su valor en el estándar UTF-8.',
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
type: 'list',
|
|
131
|
+
items: [
|
|
132
|
+
'<strong>Ejemplo Básico:</strong> Un simple espacio en blanco será sustituido por su equivalente seguro: <code>%20</code>.',
|
|
133
|
+
'<strong>Soporte Extendido:</strong> Una letra <code>á</code> se transformará en <code>%C3%A1</code>, y la <code>ñ</code> en <code>%C3%B1</code>.',
|
|
134
|
+
],
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
type: 'title',
|
|
138
|
+
text: 'La importancia en APIs y Consultas GET',
|
|
139
|
+
level: 3,
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
type: 'paragraph',
|
|
143
|
+
html: 'Cuando desarrollas integraciones, un error típico consiste en pasar una cadena cruda a los parámetros de una URL. Si insertas <code>camisa&azul</code> de forma pura a tu backend (<code>/buscar?q=camisa&azul</code>), el servidor interpretará que <code>azul</code> es un nuevo parámetro, rompiendo toda la lógica del código.',
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
type: 'paragraph',
|
|
147
147
|
html: 'Esta herramienta realiza los cálculos directamente en tu navegador local. Ninguna de tus cadenas URL necesita enviarse a servidores de terceros, lo que ayuda a mantener privados tus tokens y parámetros analíticos.',
|
|
148
|
-
},
|
|
149
|
-
],
|
|
150
|
-
};
|
|
148
|
+
},
|
|
149
|
+
],
|
|
150
|
+
};
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
---
|
|
2
|
-
import { SEORenderer } from '@jjlmoya/utils-shared';
|
|
3
|
-
import { urlEncoderDecoder } from './index';
|
|
4
|
-
import type { KnownLocale } from '../../types';
|
|
5
|
-
|
|
6
|
-
interface Props {
|
|
7
|
-
locale?: KnownLocale;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
const { locale = 'es' } = Astro.props;
|
|
11
|
-
const content = await urlEncoderDecoder.i18n[locale]?.();
|
|
12
|
-
if (!content) return null;
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
{content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
|
|
1
|
+
---
|
|
2
|
+
import { SEORenderer } from '@jjlmoya/utils-shared';
|
|
3
|
+
import { urlEncoderDecoder } from './index';
|
|
4
|
+
import type { KnownLocale } from '../../types';
|
|
5
|
+
|
|
6
|
+
interface Props {
|
|
7
|
+
locale?: KnownLocale;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const { locale = 'es' } = Astro.props;
|
|
11
|
+
const content = await urlEncoderDecoder.i18n[locale]?.();
|
|
12
|
+
if (!content) return null;
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
{content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
---
|
|
2
|
-
import { SEORenderer } from '@jjlmoya/utils-shared';
|
|
3
|
-
import { utmGenerator } from './index';
|
|
4
|
-
import type { KnownLocale } from '../../types';
|
|
5
|
-
|
|
6
|
-
interface Props {
|
|
7
|
-
locale?: KnownLocale;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
const { locale = 'es' } = Astro.props;
|
|
11
|
-
const content = await utmGenerator.i18n[locale]?.();
|
|
12
|
-
if (!content) return null;
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
{content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
|
|
1
|
+
---
|
|
2
|
+
import { SEORenderer } from '@jjlmoya/utils-shared';
|
|
3
|
+
import { utmGenerator } from './index';
|
|
4
|
+
import type { KnownLocale } from '../../types';
|
|
5
|
+
|
|
6
|
+
interface Props {
|
|
7
|
+
locale?: KnownLocale;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const { locale = 'es' } = Astro.props;
|
|
11
|
+
const content = await utmGenerator.i18n[locale]?.();
|
|
12
|
+
if (!content) return null;
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
{content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
|
package/src/types.ts
CHANGED