@jjlmoya/utils-developer 1.13.0 → 1.15.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 +1 -1
- package/src/category/i18n/fr.ts +1 -1
- package/src/category/i18n/ru.ts +1 -1
- package/src/layouts/PreviewLayout.astro +1 -0
- package/src/pages/[locale]/[slug].astro +29 -12
- package/src/tests/diacritics_density.test.ts +118 -0
- package/src/tests/inverted_punctuation.test.ts +113 -0
- package/src/tests/no_en_dash.test.ts +73 -0
- package/src/tests/script_density.test.ts +94 -0
- package/src/tests/shared-test-helpers.ts +56 -0
- package/src/tests/tool_exports.test.ts +34 -0
- package/src/tool/aspectRatio/aspect-ratio-calculator.css +1 -1
- package/src/tool/aspectRatio/i18n/de.ts +1 -1
- package/src/tool/aspectRatio/i18n/fr.ts +1 -1
- package/src/tool/aspectRatio/i18n/pl.ts +2 -2
- package/src/tool/aspectRatio/i18n/ru.ts +4 -4
- package/src/tool/aspectRatio/i18n/zh.ts +1 -1
- package/src/tool/aspectRatio/seo.astro +2 -1
- package/src/tool/calculadoraTiempoDatos/data-time-calculator-web-speed-impact.css +26 -26
- package/src/tool/calculadoraTiempoDatos/i18n/de.ts +1 -1
- package/src/tool/calculadoraTiempoDatos/i18n/pl.ts +1 -1
- package/src/tool/calculadoraTiempoDatos/i18n/ru.ts +5 -5
- package/src/tool/calculadoraTiempoDatos/i18n/sv.ts +5 -5
- package/src/tool/calculadoraTiempoDatos/i18n/zh.ts +1 -1
- package/src/tool/calculadoraTiempoDatos/seo.astro +2 -1
- package/src/tool/colorConverter/color-converter-rgb-hex-hsl.css +9 -9
- package/src/tool/colorConverter/i18n/de.ts +1 -1
- package/src/tool/colorConverter/i18n/ru.ts +2 -2
- package/src/tool/colorConverter/seo.astro +2 -1
- package/src/tool/conversorExcelCsvHtml/excel-csv-html-table-converter.css +24 -24
- package/src/tool/conversorExcelCsvHtml/i18n/es.ts +1 -1
- package/src/tool/conversorExcelCsvHtml/i18n/pl.ts +1 -1
- package/src/tool/conversorExcelCsvHtml/i18n/ru.ts +2 -2
- package/src/tool/conversorExcelCsvHtml/i18n/zh.ts +2 -2
- package/src/tool/conversorExcelCsvHtml/seo.astro +2 -1
- package/src/tool/cronGenerator/cron.css +5 -5
- package/src/tool/cronGenerator/i18n/de.ts +4 -4
- package/src/tool/cronGenerator/i18n/en.ts +1 -1
- package/src/tool/cronGenerator/i18n/es.ts +2 -2
- package/src/tool/cronGenerator/i18n/fr.ts +5 -5
- package/src/tool/cronGenerator/i18n/id.ts +1 -1
- package/src/tool/cronGenerator/i18n/nl.ts +1 -1
- package/src/tool/cronGenerator/i18n/pl.ts +8 -8
- package/src/tool/cronGenerator/i18n/pt.ts +1 -1
- package/src/tool/cronGenerator/i18n/ru.ts +9 -9
- package/src/tool/cronGenerator/i18n/sv.ts +1 -1
- package/src/tool/cronGenerator/i18n/zh.ts +3 -3
- package/src/tool/cronGenerator/seo.astro +2 -1
- package/src/tool/cssSpecificityCalculator/css-specificity-calculator.css +1 -1
- package/src/tool/cssSpecificityCalculator/i18n/de.ts +1 -1
- package/src/tool/cssSpecificityCalculator/i18n/fr.ts +3 -3
- package/src/tool/cssSpecificityCalculator/i18n/pl.ts +2 -2
- package/src/tool/cssSpecificityCalculator/i18n/ru.ts +2 -2
- package/src/tool/cssSpecificityCalculator/seo.astro +2 -1
- package/src/tool/cssToInlineConverter/css-to-inline-converter.css +1 -1
- package/src/tool/cssToInlineConverter/i18n/de.ts +6 -6
- package/src/tool/cssToInlineConverter/i18n/es.ts +1 -1
- package/src/tool/cssToInlineConverter/i18n/fr.ts +3 -3
- package/src/tool/cssToInlineConverter/seo.astro +2 -1
- package/src/tool/duplicateCssRemover/duplicate-css-remover.css +2 -2
- package/src/tool/duplicateCssRemover/i18n/de.ts +7 -7
- package/src/tool/duplicateCssRemover/i18n/fr.ts +1 -1
- package/src/tool/duplicateCssRemover/i18n/id.ts +1 -1
- package/src/tool/duplicateCssRemover/i18n/nl.ts +1 -1
- package/src/tool/duplicateCssRemover/i18n/pl.ts +1 -1
- package/src/tool/duplicateCssRemover/i18n/pt.ts +1 -1
- package/src/tool/duplicateCssRemover/i18n/ru.ts +3 -3
- package/src/tool/duplicateCssRemover/i18n/sv.ts +1 -1
- package/src/tool/duplicateCssRemover/seo.astro +2 -1
- package/src/tool/generadorSecurityTxt/i18n/de.ts +5 -5
- package/src/tool/generadorSecurityTxt/i18n/ru.ts +2 -2
- package/src/tool/generadorSecurityTxt/security-txt-generator-rfc-9116.css +9 -9
- package/src/tool/generadorSecurityTxt/seo.astro +2 -1
- package/src/tool/hashGenerator/hash-generator.css +10 -10
- package/src/tool/hashGenerator/i18n/ru.ts +5 -5
- package/src/tool/hashGenerator/i18n/zh.ts +2 -2
- package/src/tool/hashGenerator/seo.astro +2 -1
- package/src/tool/inspectorCertificadosSsl/i18n/de.ts +6 -6
- package/src/tool/inspectorCertificadosSsl/i18n/ru.ts +5 -5
- package/src/tool/inspectorCertificadosSsl/seo.astro +2 -1
- package/src/tool/inspectorCertificadosSsl/ssl-tls-certificate-inspector.css +9 -9
- package/src/tool/jsonFormatter/i18n/de.ts +4 -4
- package/src/tool/jsonFormatter/i18n/en.ts +4 -4
- package/src/tool/jsonFormatter/i18n/es.ts +4 -4
- package/src/tool/jsonFormatter/i18n/fr.ts +4 -4
- package/src/tool/jsonFormatter/i18n/id.ts +4 -4
- package/src/tool/jsonFormatter/i18n/it.ts +4 -4
- package/src/tool/jsonFormatter/i18n/ja.ts +4 -4
- package/src/tool/jsonFormatter/i18n/ko.ts +4 -4
- package/src/tool/jsonFormatter/i18n/nl.ts +4 -4
- package/src/tool/jsonFormatter/i18n/pl.ts +4 -4
- package/src/tool/jsonFormatter/i18n/pt.ts +4 -4
- package/src/tool/jsonFormatter/i18n/ru.ts +5 -5
- package/src/tool/jsonFormatter/i18n/sv.ts +4 -4
- package/src/tool/jsonFormatter/i18n/tr.ts +4 -4
- package/src/tool/jsonFormatter/i18n/zh.ts +5 -5
- package/src/tool/jsonFormatter/json-formatter.css +33 -33
- package/src/tool/jsonFormatter/seo.astro +2 -1
- package/src/tool/keycode/i18n/de.ts +7 -7
- package/src/tool/keycode/i18n/en.ts +5 -5
- package/src/tool/keycode/i18n/es.ts +5 -5
- package/src/tool/keycode/i18n/fr.ts +7 -7
- package/src/tool/keycode/i18n/id.ts +5 -5
- package/src/tool/keycode/i18n/it.ts +5 -5
- package/src/tool/keycode/i18n/ja.ts +5 -5
- package/src/tool/keycode/i18n/ko.ts +5 -5
- package/src/tool/keycode/i18n/nl.ts +5 -5
- package/src/tool/keycode/i18n/pl.ts +7 -7
- package/src/tool/keycode/i18n/pt.ts +5 -5
- package/src/tool/keycode/i18n/ru.ts +6 -6
- package/src/tool/keycode/i18n/sv.ts +5 -5
- package/src/tool/keycode/i18n/tr.ts +5 -5
- package/src/tool/keycode/i18n/zh.ts +5 -5
- package/src/tool/keycode/keycode.css +1 -1
- package/src/tool/keycode/seo.astro +2 -1
- package/src/tool/llmCostCalculator/i18n/de.ts +4 -4
- package/src/tool/llmCostCalculator/i18n/en.ts +3 -3
- package/src/tool/llmCostCalculator/i18n/fr.ts +3 -3
- package/src/tool/llmCostCalculator/i18n/id.ts +3 -3
- package/src/tool/llmCostCalculator/i18n/pt.ts +3 -3
- package/src/tool/llmCostCalculator/i18n/ru.ts +3 -3
- package/src/tool/llmCostCalculator/i18n/sv.ts +3 -3
- package/src/tool/llmCostCalculator/i18n/tr.ts +3 -3
- package/src/tool/llmCostCalculator/i18n/zh.ts +3 -3
- package/src/tool/llmCostCalculator/llm-cost-calculator.css +1 -1
- package/src/tool/llmCostCalculator/seo.astro +2 -1
- package/src/tool/mobileMockupGenerator/i18n/es.ts +1 -1
- package/src/tool/mobileMockupGenerator/mobile-mockup-generator.css +68 -68
- package/src/tool/mobileMockupGenerator/seo.astro +2 -1
- package/src/tool/musicalTypography/i18n/de.ts +1 -1
- package/src/tool/musicalTypography/i18n/fr.ts +1 -1
- package/src/tool/musicalTypography/i18n/id.ts +1 -1
- package/src/tool/musicalTypography/i18n/it.ts +1 -1
- package/src/tool/musicalTypography/i18n/ko.ts +1 -1
- package/src/tool/musicalTypography/i18n/ru.ts +3 -3
- package/src/tool/musicalTypography/musical-typography.css +8 -8
- package/src/tool/musicalTypography/seo.astro +2 -1
- package/src/tool/placeholderGenerator/i18n/de.ts +4 -4
- package/src/tool/placeholderGenerator/i18n/ru.ts +1 -1
- package/src/tool/placeholderGenerator/placeholder-image-generator.css +2 -2
- package/src/tool/placeholderGenerator/seo.astro +2 -1
- package/src/tool/promptLibrary/i18n/de.ts +1 -1
- package/src/tool/promptLibrary/prompt-library.css +30 -30
- package/src/tool/promptLibrary/seo.astro +2 -1
- package/src/tool/readabilityCalculator/i18n/de.ts +2 -2
- package/src/tool/readabilityCalculator/seo.astro +2 -1
- package/src/tool/readabilityCalculator/visual-readability-calculator-wcag-apca.css +98 -14
- package/src/tool/svgSanitizer/i18n/de.ts +2 -2
- package/src/tool/svgSanitizer/i18n/id.ts +1 -1
- package/src/tool/svgSanitizer/i18n/pl.ts +1 -1
- package/src/tool/svgSanitizer/i18n/ru.ts +7 -7
- package/src/tool/svgSanitizer/i18n/sv.ts +3 -3
- package/src/tool/svgSanitizer/i18n/tr.ts +3 -3
- package/src/tool/svgSanitizer/i18n/zh.ts +3 -3
- package/src/tool/svgSanitizer/seo.astro +2 -1
- package/src/tool/svgSanitizer/svg-sanitizer.css +7 -7
- package/src/tool/svgToCss/i18n/de.ts +2 -2
- package/src/tool/svgToCss/i18n/es.ts +1 -1
- package/src/tool/svgToCss/i18n/fr.ts +1 -1
- package/src/tool/svgToCss/i18n/pl.ts +1 -1
- package/src/tool/svgToCss/i18n/ru.ts +2 -2
- package/src/tool/svgToCss/i18n/zh.ts +2 -2
- package/src/tool/svgToCss/seo.astro +2 -1
- package/src/tool/svgToCss/svg-to-css-converter.css +2 -2
- package/src/tool/urlCleaner/component.astro +23 -5
- package/src/tool/urlCleaner/i18n/de.ts +3 -3
- package/src/tool/urlCleaner/i18n/es.ts +1 -1
- package/src/tool/urlCleaner/i18n/id.ts +1 -1
- package/src/tool/urlCleaner/i18n/nl.ts +1 -1
- package/src/tool/urlCleaner/seo.astro +2 -1
- package/src/tool/urlCleaner/url-tracking-cleaner.css +104 -14
- package/src/tool/urlEncoderDecoder/i18n/de.ts +5 -5
- package/src/tool/urlEncoderDecoder/i18n/fr.ts +2 -2
- package/src/tool/urlEncoderDecoder/i18n/pl.ts +5 -5
- package/src/tool/urlEncoderDecoder/i18n/ru.ts +8 -8
- package/src/tool/urlEncoderDecoder/i18n/sv.ts +5 -5
- package/src/tool/urlEncoderDecoder/i18n/zh.ts +5 -5
- package/src/tool/urlEncoderDecoder/seo.astro +2 -1
- package/src/tool/urlEncoderDecoder/url-encoder-decoder.css +1 -1
- package/src/tool/utmGenerator/i18n/de.ts +2 -2
- package/src/tool/utmGenerator/i18n/pl.ts +5 -5
- package/src/tool/utmGenerator/i18n/ru.ts +6 -6
- package/src/tool/utmGenerator/seo.astro +2 -1
- package/src/tool/utmGenerator/utm-generator.css +6 -6
|
@@ -8,7 +8,7 @@ const description = 'Convierte tus datos de Excel o CSV a tablas HTML semántica
|
|
|
8
8
|
|
|
9
9
|
const faqData = [
|
|
10
10
|
{
|
|
11
|
-
question: '¿Cómo convierto un archivo Excel (
|
|
11
|
+
question: '¿Cómo convierto un archivo Excel (XLSX) a HTML?',
|
|
12
12
|
answer: 'Primero, abre tu archivo en Excel y guárdalo como CSV (delimitado por comas). Luego, sube ese archivo CSV a nuestra herramienta o pega su contenido para obtener el código HTML de la tabla.',
|
|
13
13
|
},
|
|
14
14
|
{
|
|
@@ -40,7 +40,7 @@ const howToData = [
|
|
|
40
40
|
},
|
|
41
41
|
{
|
|
42
42
|
name: 'Skopiuj kod',
|
|
43
|
-
text: 'Przełącz się na kartę
|
|
43
|
+
text: 'Przełącz się na kartę "Kod HTML" i skopiuj wynik, aby wkleić go na swojej stronie internetowej.',
|
|
44
44
|
},
|
|
45
45
|
];
|
|
46
46
|
|
|
@@ -13,7 +13,7 @@ const faqData = [
|
|
|
13
13
|
},
|
|
14
14
|
{
|
|
15
15
|
question: 'Включает ли сгенерированный код стили CSS?',
|
|
16
|
-
answer: 'Генератор создает чистый HTML с дополнительными классами для границ и
|
|
16
|
+
answer: 'Генератор создает чистый HTML с дополнительными классами для границ и "зебры" (чередующихся строк). Окончательные визуальные стили зависят от CSS вашего собственного сайта, что обеспечивает идеальную интеграцию.',
|
|
17
17
|
},
|
|
18
18
|
{
|
|
19
19
|
question: 'Могу ли я загружать очень большие CSV-файлы?',
|
|
@@ -40,7 +40,7 @@ const howToData = [
|
|
|
40
40
|
},
|
|
41
41
|
{
|
|
42
42
|
name: 'Скопируйте код',
|
|
43
|
-
text: 'Перейдите на вкладку
|
|
43
|
+
text: 'Перейдите на вкладку "Код HTML" и скопируйте результат для вставки на ваш сайт.',
|
|
44
44
|
},
|
|
45
45
|
];
|
|
46
46
|
|
|
@@ -21,7 +21,7 @@ const faqData = [
|
|
|
21
21
|
},
|
|
22
22
|
{
|
|
23
23
|
question: '它与 Google 表格兼容吗?',
|
|
24
|
-
answer: '绝对兼容。在 Google
|
|
24
|
+
answer: '绝对兼容。在 Google 表格中,转到"文件">"下载">"逗号分隔值 (.csv)",然后将该文件用于我们的工具。',
|
|
25
25
|
},
|
|
26
26
|
];
|
|
27
27
|
|
|
@@ -40,7 +40,7 @@ const howToData = [
|
|
|
40
40
|
},
|
|
41
41
|
{
|
|
42
42
|
name: '复制代码',
|
|
43
|
-
text: '
|
|
43
|
+
text: '切换到"HTML 代码"选项卡并复制结果以粘贴到您的网站上。',
|
|
44
44
|
},
|
|
45
45
|
];
|
|
46
46
|
|
|
@@ -9,6 +9,7 @@ interface Props {
|
|
|
9
9
|
|
|
10
10
|
const { locale = 'es' } = Astro.props;
|
|
11
11
|
const content = await conversorExcelCsvHtml.i18n[locale]?.();
|
|
12
|
+
if (!content) return null;
|
|
12
13
|
---
|
|
13
14
|
|
|
14
|
-
{content && <SEORenderer content={{ locale, sections: content.seo }} />}
|
|
15
|
+
{content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
color: var(--cron-text);
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
.theme-dark .cron-root {
|
|
16
16
|
--cron-card-bg: #1e293b;
|
|
17
17
|
--cron-bg: #0f172a;
|
|
18
18
|
--cron-text: #f1f5f9;
|
|
@@ -249,7 +249,7 @@
|
|
|
249
249
|
border: 1px solid var(--cron-border);
|
|
250
250
|
}
|
|
251
251
|
|
|
252
|
-
|
|
252
|
+
.cron-run-item {
|
|
253
253
|
display: flex;
|
|
254
254
|
align-items: center;
|
|
255
255
|
justify-content: space-between;
|
|
@@ -260,18 +260,18 @@
|
|
|
260
260
|
font-size: 0.825rem;
|
|
261
261
|
}
|
|
262
262
|
|
|
263
|
-
|
|
263
|
+
.cron-run-date {
|
|
264
264
|
font-weight: 600;
|
|
265
265
|
color: var(--cron-text);
|
|
266
266
|
text-transform: capitalize;
|
|
267
267
|
}
|
|
268
268
|
|
|
269
|
-
|
|
269
|
+
.cron-run-rel {
|
|
270
270
|
font-size: 0.72rem;
|
|
271
271
|
color: var(--cron-text-muted);
|
|
272
272
|
}
|
|
273
273
|
|
|
274
|
-
|
|
274
|
+
.cron-no-runs {
|
|
275
275
|
padding: 1rem;
|
|
276
276
|
text-align: center;
|
|
277
277
|
color: var(--cron-text-muted);
|
|
@@ -21,7 +21,7 @@ const faqData = [
|
|
|
21
21
|
{
|
|
22
22
|
question: 'Was bedeutet das Sternchen (*) in Cron?',
|
|
23
23
|
answer:
|
|
24
|
-
'Das Sternchen ist ein Platzhalter, der
|
|
24
|
+
'Das Sternchen ist ein Platzhalter, der "alle" bedeutet. Beispielsweise bedeutet ein * im Minutenfeld, dass die Aufgabe jede Minute des definierten Bereichs ausgeführt wird.',
|
|
25
25
|
},
|
|
26
26
|
{
|
|
27
27
|
question: 'Wie kann ich die anstehenden Ausführungen überprüfen?',
|
|
@@ -37,7 +37,7 @@ const howToData = [
|
|
|
37
37
|
},
|
|
38
38
|
{
|
|
39
39
|
name: 'Erweiterte Details konfigurieren',
|
|
40
|
-
text: 'Wechseln Sie zur Registerkarte
|
|
40
|
+
text: 'Wechseln Sie zur Registerkarte "Erweitert", um die genauen Minuten, Stunden oder特定 Wochentage manuell zu definieren.',
|
|
41
41
|
},
|
|
42
42
|
{
|
|
43
43
|
name: 'Übersetzung und Daten überprüfen',
|
|
@@ -157,7 +157,7 @@ export const content: ToolLocaleContent<CronGeneratorUI> = {
|
|
|
157
157
|
},
|
|
158
158
|
{
|
|
159
159
|
type: 'paragraph',
|
|
160
|
-
html: 'Obwohl wir im Zeitalter von <em>Serverless</em>-Servern und Cloud-Workflows leben, bleibt das <strong>Crontab</strong>-System das Rückgrat der globalen Technologieinfrastruktur. Von kleinen Blogs bis hin zu massiven Bankinfrastrukturen
|
|
160
|
+
html: 'Obwohl wir im Zeitalter von <em>Serverless</em>-Servern und Cloud-Workflows leben, bleibt das <strong>Crontab</strong>-System das Rückgrat der globalen Technologieinfrastruktur. Von kleinen Blogs bis hin zu massiven Bankinfrastrukturen - die Aufgabenplanung sorgt dafür, dass die digitale Welt läuft.',
|
|
161
161
|
},
|
|
162
162
|
{
|
|
163
163
|
type: 'title',
|
|
@@ -185,7 +185,7 @@ export const content: ToolLocaleContent<CronGeneratorUI> = {
|
|
|
185
185
|
},
|
|
186
186
|
{
|
|
187
187
|
type: 'paragraph',
|
|
188
|
-
html: '90 % der Server laufen auf <strong>UTC</strong>. Wenn Sie eine Aufgabe für 02:00 Uhr morgens in Ihrer lokalen Zeitzone planen, wird sie möglicherweise zu einer unerwarteten Zeit ausgeführt. Außerdem hat Cron keinen Zugriff auf Ihren üblichen <code>$PATH</code>
|
|
188
|
+
html: '90 % der Server laufen auf <strong>UTC</strong>. Wenn Sie eine Aufgabe für 02:00 Uhr morgens in Ihrer lokalen Zeitzone planen, wird sie möglicherweise zu einer unerwarteten Zeit ausgeführt. Außerdem hat Cron keinen Zugriff auf Ihren üblichen <code>$PATH</code> - verwenden Sie immer absolute Pfade wie <code>/usr/local/bin/node</code>.',
|
|
189
189
|
},
|
|
190
190
|
],
|
|
191
191
|
};
|
|
@@ -185,7 +185,7 @@ export const content: ToolLocaleContent<CronGeneratorUI> = {
|
|
|
185
185
|
},
|
|
186
186
|
{
|
|
187
187
|
type: 'paragraph',
|
|
188
|
-
html: '90% of servers run on <strong>UTC</strong>. If you schedule a task at 02:00 AM thinking in your local timezone, it may run at an unexpected time. Also, Cron does not have access to your usual <code>$PATH</code>
|
|
188
|
+
html: '90% of servers run on <strong>UTC</strong>. If you schedule a task at 02:00 AM thinking in your local timezone, it may run at an unexpected time. Also, Cron does not have access to your usual <code>$PATH</code> - always use absolute paths like <code>/usr/local/bin/node</code>.',
|
|
189
189
|
},
|
|
190
190
|
],
|
|
191
191
|
};
|
|
@@ -100,7 +100,7 @@ const ui: CronGeneratorUI = {
|
|
|
100
100
|
hintDow: '0 = Domingo, 6 = Sábado',
|
|
101
101
|
labelNextRuns: 'Próximas Ejecuciones',
|
|
102
102
|
btnCopy: 'Copiar Expresión',
|
|
103
|
-
btnCopied: 'Copiado!',
|
|
103
|
+
btnCopied: '¡Copiado!',
|
|
104
104
|
msgNoRuns: 'No se encontraron ejecuciones próximas razonables.',
|
|
105
105
|
msgError: 'Error al calcular fechas.',
|
|
106
106
|
presetEveryMinute: 'Cada minuto',
|
|
@@ -185,7 +185,7 @@ export const content: ToolLocaleContent<CronGeneratorUI> = {
|
|
|
185
185
|
},
|
|
186
186
|
{
|
|
187
187
|
type: 'paragraph',
|
|
188
|
-
html: 'El 90% de los servidores funcionan en <strong>UTC</strong>. Si programas una tarea a las 02:00 AM pensando en tu horario local, podrías ejecutarla en un momento inesperado. Además, Cron no tiene acceso a tu <code>$PATH</code> habitual
|
|
188
|
+
html: 'El 90% de los servidores funcionan en <strong>UTC</strong>. Si programas una tarea a las 02:00 AM pensando en tu horario local, podrías ejecutarla en un momento inesperado. Además, Cron no tiene acceso a tu <code>$PATH</code> habitual - usa siempre rutas absolutas como <code>/usr/local/bin/node</code>.',
|
|
189
189
|
},
|
|
190
190
|
],
|
|
191
191
|
};
|
|
@@ -96,7 +96,7 @@ const ui: CronGeneratorUI = {
|
|
|
96
96
|
fieldDom: 'Jour du Mois (1-31)',
|
|
97
97
|
fieldMonth: 'Mois (1-12)',
|
|
98
98
|
fieldDow: 'Jour de la Semaine (0-6)',
|
|
99
|
-
hintMinute: 'Ex
|
|
99
|
+
hintMinute: 'Ex: *, */5, 0,30',
|
|
100
100
|
hintDow: '0 = Dimanche, 6 = Samedi',
|
|
101
101
|
labelNextRuns: 'Prochaines exécutions',
|
|
102
102
|
btnCopy: 'Copier l\'expression',
|
|
@@ -139,11 +139,11 @@ export const content: ToolLocaleContent<CronGeneratorUI> = {
|
|
|
139
139
|
bibliographyTitle: 'Références et documentation',
|
|
140
140
|
bibliography: [
|
|
141
141
|
{
|
|
142
|
-
name: 'Manuel GNU Crontab
|
|
142
|
+
name: 'Manuel GNU Crontab: Expressions Cron sous Linux',
|
|
143
143
|
url: 'https://www.gnu.org/software/mcron/manual/html_node/Crontab-file.html',
|
|
144
144
|
},
|
|
145
145
|
{
|
|
146
|
-
name: 'Cron sur Wikipedia
|
|
146
|
+
name: 'Cron sur Wikipedia: Histoire et syntaxe',
|
|
147
147
|
url: 'https://en.wikipedia.org/wiki/Cron',
|
|
148
148
|
},
|
|
149
149
|
],
|
|
@@ -181,11 +181,11 @@ export const content: ToolLocaleContent<CronGeneratorUI> = {
|
|
|
181
181
|
},
|
|
182
182
|
{
|
|
183
183
|
type: 'tip',
|
|
184
|
-
html: 'Utilisez le slash <code>/</code> pour définir des pas
|
|
184
|
+
html: 'Utilisez le slash <code>/</code> pour définir des pas: <code>*/5</code> en minutes s\'exécute toutes les 5 minutes. La virgule <code>,</code> crée des listes (<code>1,3,5</code>) et le tiret <code>-</code> définit des plages (<code>1-5</code>).',
|
|
185
185
|
},
|
|
186
186
|
{
|
|
187
187
|
type: 'paragraph',
|
|
188
|
-
html: '90% des serveurs fonctionnent en <strong>UTC</strong>. Si vous planifiez une tâche à 02h00 en pensant à votre fuseau local, elle peut s\'exécuter à un moment inattendu. De plus, Cron n\'a pas accès à votre <code>$PATH</code> habituel
|
|
188
|
+
html: '90% des serveurs fonctionnent en <strong>UTC</strong>. Si vous planifiez une tâche à 02h00 en pensant à votre fuseau local, elle peut s\'exécuter à un moment inattendu. De plus, Cron n\'a pas accès à votre <code>$PATH</code> habituel - utilisez toujours des chemins absolus comme <code>/usr/local/bin/node</code>.',
|
|
189
189
|
},
|
|
190
190
|
],
|
|
191
191
|
};
|
|
@@ -185,7 +185,7 @@ export const content: ToolLocaleContent<CronGeneratorUI> = {
|
|
|
185
185
|
},
|
|
186
186
|
{
|
|
187
187
|
type: 'paragraph',
|
|
188
|
-
html: '90% server berjalan pada <strong>UTC</strong>. Jika Anda menjadwalkan tugas pada pukul 02:00 pagi berdasarkan zona waktu lokal Anda, tugas tersebut mungkin berjalan pada waktu yang tidak terduga. Selain itu, Cron tidak memiliki akses ke <code>$PATH</code> Anda yang biasa
|
|
188
|
+
html: '90% server berjalan pada <strong>UTC</strong>. Jika Anda menjadwalkan tugas pada pukul 02:00 pagi berdasarkan zona waktu lokal Anda, tugas tersebut mungkin berjalan pada waktu yang tidak terduga. Selain itu, Cron tidak memiliki akses ke <code>$PATH</code> Anda yang biasa - selalu gunakan jalur absolut seperti <code>/usr/local/bin/node</code>.',
|
|
189
189
|
},
|
|
190
190
|
],
|
|
191
191
|
};
|
|
@@ -185,7 +185,7 @@ export const content: ToolLocaleContent<CronGeneratorUI> = {
|
|
|
185
185
|
},
|
|
186
186
|
{
|
|
187
187
|
type: 'paragraph',
|
|
188
|
-
html: '90% van de servers draait op <strong>UTC</strong>. Als u een taak plant om 02:00 uur \'s nachts op basis van uw lokale tijdzone, kan deze op een onverwacht tijdstip worden uitgevoerd. Bovendien heeft Cron geen toegang tot uw gebruikelijke <code>$PATH</code>
|
|
188
|
+
html: '90% van de servers draait op <strong>UTC</strong>. Als u een taak plant om 02:00 uur \'s nachts op basis van uw lokale tijdzone, kan deze op een onverwacht tijdstip worden uitgevoerd. Bovendien heeft Cron geen toegang tot uw gebruikelijke <code>$PATH</code> - gebruik altijd absolute paden zoals <code>/usr/local/bin/node</code>.',
|
|
189
189
|
},
|
|
190
190
|
],
|
|
191
191
|
};
|
|
@@ -21,7 +21,7 @@ const faqData = [
|
|
|
21
21
|
{
|
|
22
22
|
question: 'Co oznacza gwiazdka (*) w Cron?',
|
|
23
23
|
answer:
|
|
24
|
-
'Gwiazdka to symbol wieloznaczny oznaczający
|
|
24
|
+
'Gwiazdka to symbol wieloznaczny oznaczający "wszystko". Na przykład gwiazdka w polu minut oznacza, że zadanie będzie uruchamiane w każdej minucie zdefiniowanego zakresu.',
|
|
25
25
|
},
|
|
26
26
|
{
|
|
27
27
|
question: 'Jak mogę sprawdzić nadchodzące wykonania?',
|
|
@@ -37,7 +37,7 @@ const howToData = [
|
|
|
37
37
|
},
|
|
38
38
|
{
|
|
39
39
|
name: 'Skonfiguruj zaawansowane szczegóły',
|
|
40
|
-
text: 'Przełącz się na kartę
|
|
40
|
+
text: 'Przełącz się na kartę "Zaawansowane", aby ręcznie zdefiniować dokładne minuty, godziny lub określone dni tygodnia.',
|
|
41
41
|
},
|
|
42
42
|
{
|
|
43
43
|
name: 'Zweryfikuj tłumaczenie i daty',
|
|
@@ -167,11 +167,11 @@ export const content: ToolLocaleContent<CronGeneratorUI> = {
|
|
|
167
167
|
{
|
|
168
168
|
type: 'list',
|
|
169
169
|
items: [
|
|
170
|
-
'<strong>Pole 1
|
|
171
|
-
'<strong>Pole 2
|
|
172
|
-
'<strong>Pole 3
|
|
173
|
-
'<strong>Pole 4
|
|
174
|
-
'<strong>Pole 5
|
|
170
|
+
'<strong>Pole 1 - Minuta (0-59):</strong> Kiedy zadanie rozpoczyna się w ciągu godziny.',
|
|
171
|
+
'<strong>Pole 2 - Godzina (0-23):</strong> Wymagany format 24-godzinny.',
|
|
172
|
+
'<strong>Pole 3 - Dzień miesiąca (1-31):</strong> Konkretny dzień kalendarzowy.',
|
|
173
|
+
'<strong>Pole 4 - Miesiąc (1-12):</strong> Od stycznia do grudnia.',
|
|
174
|
+
'<strong>Pole 5 - Dzień tygodnia (0-6):</strong> 0 to zazwyczaj niedziela.',
|
|
175
175
|
],
|
|
176
176
|
},
|
|
177
177
|
{
|
|
@@ -185,7 +185,7 @@ export const content: ToolLocaleContent<CronGeneratorUI> = {
|
|
|
185
185
|
},
|
|
186
186
|
{
|
|
187
187
|
type: 'paragraph',
|
|
188
|
-
html: '90% serwerów działa w czasie <strong>UTC</strong>. Jeśli zaplanujesz zadanie na 02:00 rano, myśląc o lokalnej strefie czasowej, może ono zostać uruchomione o nieoczekiwanej porze. Ponadto Cron nie ma dostępu do Twojej zwykłej ścieżki <code>$PATH</code>
|
|
188
|
+
html: '90% serwerów działa w czasie <strong>UTC</strong>. Jeśli zaplanujesz zadanie na 02:00 rano, myśląc o lokalnej strefie czasowej, może ono zostać uruchomione o nieoczekiwanej porze. Ponadto Cron nie ma dostępu do Twojej zwykłej ścieżki <code>$PATH</code> - zawsze używaj ścieżek bezwzględnych, takich jak <code>/usr/local/bin/node</code>.',
|
|
189
189
|
},
|
|
190
190
|
],
|
|
191
191
|
};
|
|
@@ -185,7 +185,7 @@ export const content: ToolLocaleContent<CronGeneratorUI> = {
|
|
|
185
185
|
},
|
|
186
186
|
{
|
|
187
187
|
type: 'paragraph',
|
|
188
|
-
html: '90% dos servidores funcionam em <strong>UTC</strong>. Se agendar uma tarefa às 02:00 da manhã pensando no seu fuso horário local, ela poderá ser executada num horário inesperado. Além disso, o Cron não tem acesso ao seu <code>$PATH</code> habitual
|
|
188
|
+
html: '90% dos servidores funcionam em <strong>UTC</strong>. Se agendar uma tarefa às 02:00 da manhã pensando no seu fuso horário local, ela poderá ser executada num horário inesperado. Além disso, o Cron não tem acesso ao seu <code>$PATH</code> habitual - use sempre caminhos absolutos como <code>/usr/local/bin/node</code>.',
|
|
189
189
|
},
|
|
190
190
|
],
|
|
191
191
|
};
|
|
@@ -21,7 +21,7 @@ const faqData = [
|
|
|
21
21
|
{
|
|
22
22
|
question: 'Что означает звездочка (*) в Cron?',
|
|
23
23
|
answer:
|
|
24
|
-
'Звездочка
|
|
24
|
+
'Звездочка - это подстановочный знак, означающий "все". Например, * в поле минут означает, что задача будет запускаться каждую минуту определенного диапазона.',
|
|
25
25
|
},
|
|
26
26
|
{
|
|
27
27
|
question: 'Как я могу проверить предстоящие запуски?',
|
|
@@ -37,7 +37,7 @@ const howToData = [
|
|
|
37
37
|
},
|
|
38
38
|
{
|
|
39
39
|
name: 'Настройте дополнительные детали',
|
|
40
|
-
text: 'Перейдите на вкладку
|
|
40
|
+
text: 'Перейдите на вкладку "Дополнительно", чтобы вручную определить точные минуты, часы или конкретные дни недели.',
|
|
41
41
|
},
|
|
42
42
|
{
|
|
43
43
|
name: 'Проверьте перевод и даты',
|
|
@@ -157,7 +157,7 @@ export const content: ToolLocaleContent<CronGeneratorUI> = {
|
|
|
157
157
|
},
|
|
158
158
|
{
|
|
159
159
|
type: 'paragraph',
|
|
160
|
-
html: 'Несмотря на то, что мы живем в эпоху <em>serverless</em>-серверов и облачных рабочих процессов, система <strong>Crontab</strong> остается основой глобальной технологической инфраструктуры. От небольших блогов до массивных банковских систем
|
|
160
|
+
html: 'Несмотря на то, что мы живем в эпоху <em>serverless</em>-серверов и облачных рабочих процессов, система <strong>Crontab</strong> остается основой глобальной технологической инфраструктуры. От небольших блогов до массивных банковских систем - планирование задач поддерживает работу цифрового мира.',
|
|
161
161
|
},
|
|
162
162
|
{
|
|
163
163
|
type: 'title',
|
|
@@ -167,11 +167,11 @@ export const content: ToolLocaleContent<CronGeneratorUI> = {
|
|
|
167
167
|
{
|
|
168
168
|
type: 'list',
|
|
169
169
|
items: [
|
|
170
|
-
'<strong>Поле 1
|
|
171
|
-
'<strong>Поле 2
|
|
172
|
-
'<strong>Поле 3
|
|
173
|
-
'<strong>Поле 4
|
|
174
|
-
'<strong>Поле 5
|
|
170
|
+
'<strong>Поле 1 - Минута (0-59):</strong> когда задача запускается внутри часа.',
|
|
171
|
+
'<strong>Поле 2 - Час (0-23):</strong> требуется 24-часовой формат.',
|
|
172
|
+
'<strong>Поле 3 - День месяца (1-31):</strong> конкретный календарный день.',
|
|
173
|
+
'<strong>Поле 4 - Месяц (1-12):</strong> с января по декабрь.',
|
|
174
|
+
'<strong>Поле 5 - День недели (0-6):</strong> 0 обычно означает воскресенье.',
|
|
175
175
|
],
|
|
176
176
|
},
|
|
177
177
|
{
|
|
@@ -185,7 +185,7 @@ export const content: ToolLocaleContent<CronGeneratorUI> = {
|
|
|
185
185
|
},
|
|
186
186
|
{
|
|
187
187
|
type: 'paragraph',
|
|
188
|
-
html: '90% серверов работают по времени <strong>UTC</strong>. Если вы планируете задачу на 02:00 ночи, ориентируясь на местное время, она может запуститься в неожиданное время. Кроме того, у Cron нет доступа к вашему обычному <code>$PATH</code>
|
|
188
|
+
html: '90% серверов работают по времени <strong>UTC</strong>. Если вы планируете задачу на 02:00 ночи, ориентируясь на местное время, она может запуститься в неожиданное время. Кроме того, у Cron нет доступа к вашему обычному <code>$PATH</code> - всегда используйте абсолютные пути, такие как <code>/usr/local/bin/node</code>.',
|
|
189
189
|
},
|
|
190
190
|
],
|
|
191
191
|
};
|
|
@@ -185,7 +185,7 @@ export const content: ToolLocaleContent<CronGeneratorUI> = {
|
|
|
185
185
|
},
|
|
186
186
|
{
|
|
187
187
|
type: 'paragraph',
|
|
188
|
-
html: '90 % av alla servrar körs på <strong>UTC</strong>. Om du schemalägger en uppgift kl. 02:00 med din lokala tidszon i åtanke, kan den köras vid en oväntad tidpunkt. Cron har dessutom inte tillgång till din vanliga <code>$PATH</code>
|
|
188
|
+
html: '90 % av alla servrar körs på <strong>UTC</strong>. Om du schemalägger en uppgift kl. 02:00 med din lokala tidszon i åtanke, kan den köras vid en oväntad tidpunkt. Cron har dessutom inte tillgång till din vanliga <code>$PATH</code> - använd alltid absoluta sökvägar som <code>/usr/local/bin/node</code>.',
|
|
189
189
|
},
|
|
190
190
|
],
|
|
191
191
|
};
|
|
@@ -21,7 +21,7 @@ const faqData = [
|
|
|
21
21
|
{
|
|
22
22
|
question: 'Cron 中的星号 (*) 是什么意思?',
|
|
23
23
|
answer:
|
|
24
|
-
'
|
|
24
|
+
'星号是一个通配符,表示"所有"。例如,分钟字段中的 * 表示任务将在定义范围内的每分钟运行。',
|
|
25
25
|
},
|
|
26
26
|
{
|
|
27
27
|
question: '如何检查即将进行的执行?',
|
|
@@ -37,7 +37,7 @@ const howToData = [
|
|
|
37
37
|
},
|
|
38
38
|
{
|
|
39
39
|
name: '配置高级细节',
|
|
40
|
-
text: '
|
|
40
|
+
text: '切换到"高级"选项卡,手动定义具体的分钟、小时或特定的星期。',
|
|
41
41
|
},
|
|
42
42
|
{
|
|
43
43
|
name: '验证翻译和日期',
|
|
@@ -185,7 +185,7 @@ export const content: ToolLocaleContent<CronGeneratorUI> = {
|
|
|
185
185
|
},
|
|
186
186
|
{
|
|
187
187
|
type: 'paragraph',
|
|
188
|
-
html: '90% 的服务器运行在 <strong>UTC</strong> 时间。如果您按照当地时区计划在凌晨 02:00 运行任务,它可能会在意外的时间执行。此外,Cron 无法直接访问您的 <code>$PATH</code> 变量
|
|
188
|
+
html: '90% 的服务器运行在 <strong>UTC</strong> 时间。如果您按照当地时区计划在凌晨 02:00 运行任务,它可能会在意外的时间执行。此外,Cron 无法直接访问您的 <code>$PATH</code> 变量 - 请始终使用绝对路径,例如 <code>/usr/local/bin/node</code>。',
|
|
189
189
|
},
|
|
190
190
|
],
|
|
191
191
|
};
|
|
@@ -9,6 +9,7 @@ interface Props {
|
|
|
9
9
|
|
|
10
10
|
const { locale = 'es' } = Astro.props;
|
|
11
11
|
const content = await cronGenerator.i18n[locale]?.();
|
|
12
|
+
if (!content) return null;
|
|
12
13
|
---
|
|
13
14
|
|
|
14
|
-
{content && <SEORenderer content={{ locale, sections: content.seo }} />}
|
|
15
|
+
{content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
|
|
@@ -119,7 +119,7 @@ export const content: ToolLocaleContent<CssSpecificityCalculatorUI> = {
|
|
|
119
119
|
},
|
|
120
120
|
{
|
|
121
121
|
type: 'paragraph',
|
|
122
|
-
html: 'Die CSS-Spezifität ist der Algorithmus, nach dem Browser entscheiden, welche Eigenschaftswerte auf ein bestimmtes Element angewendet werden. Es ist im Grunde ein mathematischer Wert, der dem Browser sagt,
|
|
122
|
+
html: 'Die CSS-Spezifität ist der Algorithmus, nach dem Browser entscheiden, welche Eigenschaftswerte auf ein bestimmtes Element angewendet werden. Es ist im Grunde ein mathematischer Wert, der dem Browser sagt, "wie spezifisch" eine Regel ist.',
|
|
123
123
|
},
|
|
124
124
|
{
|
|
125
125
|
type: 'paragraph',
|
|
@@ -33,11 +33,11 @@ const faqData = [
|
|
|
33
33
|
const howToData = [
|
|
34
34
|
{
|
|
35
35
|
name: 'Saisissez le premier sélecteur',
|
|
36
|
-
text: 'Tapez le Sélecteur A dans le champ texte de gauche, par exemple
|
|
36
|
+
text: 'Tapez le Sélecteur A dans le champ texte de gauche, par exemple: #header .nav-item > a. Les compteurs d\'IDs, Classes et Éléments se mettront à jour instantanément.',
|
|
37
37
|
},
|
|
38
38
|
{
|
|
39
39
|
name: 'Saisissez le deuxième sélecteur',
|
|
40
|
-
text: 'Tapez le Sélecteur B dans le champ texte de droite, par exemple
|
|
40
|
+
text: 'Tapez le Sélecteur B dans le champ texte de droite, par exemple: ul li.active a:hover. Observez comment les poids changent en temps réel.',
|
|
41
41
|
},
|
|
42
42
|
{
|
|
43
43
|
name: 'Lisez le résultat',
|
|
@@ -137,7 +137,7 @@ export const content: ToolLocaleContent<CssSpecificityCalculatorUI> = {
|
|
|
137
137
|
{
|
|
138
138
|
type: 'list',
|
|
139
139
|
items: [
|
|
140
|
-
'<strong>Colonne A (IDs)
|
|
140
|
+
'<strong>Colonne A (IDs):</strong> Compte le nombre d\'identifiants uniques. Exemple: <code>#header</code> compte comme 1 dans la colonne A.',
|
|
141
141
|
'<strong>Colonne B (Classes, Attributs et Pseudo-classes) :</strong> Compte toutes les classes (<code>.button</code>), attributs (<code>[type="text"]</code>) et pseudo-classes (<code>:hover</code>).',
|
|
142
142
|
'<strong>Colonne C (Éléments et Pseudo-éléments) :</strong> Compte tous les éléments HTML (<code>div</code>, <code>h1</code>) et pseudo-éléments (<code>::before</code>).',
|
|
143
143
|
],
|
|
@@ -119,11 +119,11 @@ export const content: ToolLocaleContent<CssSpecificityCalculatorUI> = {
|
|
|
119
119
|
},
|
|
120
120
|
{
|
|
121
121
|
type: 'paragraph',
|
|
122
|
-
html: 'Specyficzność CSS to algorytm, według którego przeglądarki decydują, które wartości właściwości zastosować do danego elementu. To nic innego jak matematyczny wynik, który mówi przeglądarce, jak bardzo
|
|
122
|
+
html: 'Specyficzność CSS to algorytm, według którego przeglądarki decydują, które wartości właściwości zastosować do danego elementu. To nic innego jak matematyczny wynik, który mówi przeglądarce, jak bardzo "szczegółowa" jest dana reguła.',
|
|
123
123
|
},
|
|
124
124
|
{
|
|
125
125
|
type: 'paragraph',
|
|
126
|
-
html: 'Jeśli dwie reguły mają różne poziomy specyficzności, wygrywa ta o wyższej wadze
|
|
126
|
+
html: 'Jeśli dwie reguły mają różne poziomy specyficzności, wygrywa ta o wyższej wadze - niezależnie od kolejności, w jakiej zostały napisane. Gdy obie mają tę samą wagę, decyduje ta zadeklarowana później w kodzie źródłowym.',
|
|
127
127
|
},
|
|
128
128
|
{
|
|
129
129
|
type: 'title',
|
|
@@ -11,7 +11,7 @@ const faqData = [
|
|
|
11
11
|
{
|
|
12
12
|
question: 'Что такое специфичность CSS?',
|
|
13
13
|
answer:
|
|
14
|
-
'Специфичность
|
|
14
|
+
'Специфичность - это алгоритм, который браузеры используют для определения того, какое правило CSS применяется к элементу, когда несколько правил конкурируют. Она представлена трёхколонным счётом (A, B, C), указывающим идентификаторы, классы/атрибуты/псевдо-классы и элементы/псевдо-элементы соответственно.',
|
|
15
15
|
},
|
|
16
16
|
{
|
|
17
17
|
question: 'Может ли класс когда-либо победить ID в специфичности?',
|
|
@@ -119,7 +119,7 @@ export const content: ToolLocaleContent<CssSpecificityCalculatorUI> = {
|
|
|
119
119
|
},
|
|
120
120
|
{
|
|
121
121
|
type: 'paragraph',
|
|
122
|
-
html: 'Специфичность CSS
|
|
122
|
+
html: 'Специфичность CSS - это алгоритм, по которому браузеры определяют, какие значения свойств применять к конкретному элементу. По сути это математический счёт, который говорит браузеру "насколько специфичным" является правило.',
|
|
123
123
|
},
|
|
124
124
|
{
|
|
125
125
|
type: 'paragraph',
|
|
@@ -9,6 +9,7 @@ interface Props {
|
|
|
9
9
|
|
|
10
10
|
const { locale = 'es' } = Astro.props;
|
|
11
11
|
const content = await cssSpecificityCalculator.i18n[locale]?.();
|
|
12
|
+
if (!content) return null;
|
|
12
13
|
---
|
|
13
14
|
|
|
14
|
-
{content && <SEORenderer content={{ locale, sections: content.seo }} />}
|
|
15
|
+
{content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
|
|
@@ -16,32 +16,32 @@ const faqData = [
|
|
|
16
16
|
{
|
|
17
17
|
question: 'Was passiert, wenn ein Element bereits ein eigenes style-Attribut hat?',
|
|
18
18
|
answer:
|
|
19
|
-
'Das Werkzeug respektiert vorhandene Inline-Styles und fügt die neuen Eigenschaften dahinter an
|
|
19
|
+
'Das Werkzeug respektiert vorhandene Inline-Styles und fügt die neuen Eigenschaften dahinter an - es simuliert dabei das Verhalten der CSS-Kaskade: Bei Konflikten überschreiben später deklarierte Eigenschaften frühere.',
|
|
20
20
|
},
|
|
21
21
|
{
|
|
22
22
|
question: 'Funktioniert es auch mit komplexen Selektoren wie :hover oder Media Queries?',
|
|
23
23
|
answer:
|
|
24
|
-
'Das Werkzeug verarbeitet Klassen-, ID-, Attribut- und strukturelle Pseudo-Klassen-Selektoren, die DOMParser auflösen kann. Zustandsabhängige Selektoren wie :hover und Media Queries können nicht inline eingebettet werden
|
|
24
|
+
'Das Werkzeug verarbeitet Klassen-, ID-, Attribut- und strukturelle Pseudo-Klassen-Selektoren, die DOMParser auflösen kann. Zustandsabhängige Selektoren wie :hover und Media Queries können nicht inline eingebettet werden - sie hängen von der Laufzeitumgebung ab und werden ignoriert.',
|
|
25
25
|
},
|
|
26
26
|
{
|
|
27
27
|
question: 'Wird mein HTML- und CSS-Code an einen Server gesendet?',
|
|
28
28
|
answer:
|
|
29
|
-
'Nein. Die gesamte Verarbeitung findet zu 100 % in Ihrem Browser mithilfe der nativen DOMParser-API statt. Kein einziges Byte Ihres Codes verlässt Ihr Gerät
|
|
29
|
+
'Nein. Die gesamte Verarbeitung findet zu 100 % in Ihrem Browser mithilfe der nativen DOMParser-API statt. Kein einziges Byte Ihres Codes verlässt Ihr Gerät - das garantiert vollständige Privatsphäre, auch bei Vorlagen mit vertraulichen Inhalten.',
|
|
30
30
|
},
|
|
31
31
|
];
|
|
32
32
|
|
|
33
33
|
const howToData = [
|
|
34
34
|
{
|
|
35
35
|
name: 'Fügen Sie Ihr HTML ein',
|
|
36
|
-
text: 'Schreiben oder fügen Sie das HTML, das Sie verarbeiten möchten, in das Feld
|
|
36
|
+
text: 'Schreiben oder fügen Sie das HTML, das Sie verarbeiten möchten, in das Feld "Original-HTML" ein. Es kann sich um ein Fragment oder ein vollständiges Dokument handeln.',
|
|
37
37
|
},
|
|
38
38
|
{
|
|
39
39
|
name: 'CSS-Regeln hinzufügen',
|
|
40
|
-
text: 'Fügen Sie die Klassen und IDs, die Sie einbetten möchten, in das Feld
|
|
40
|
+
text: 'Fügen Sie die Klassen und IDs, die Sie einbetten möchten, in das Feld "CSS-Regeln" ein. Das Werkzeug wendet sie unter Berücksichtigung der Selektorspezifität an.',
|
|
41
41
|
},
|
|
42
42
|
{
|
|
43
43
|
name: 'Konvertieren und kopieren',
|
|
44
|
-
text: 'Klicken Sie auf
|
|
44
|
+
text: 'Klicken Sie auf "CSS in HTML einbetten". Das Ergebnis mit allen Inline-Styles erscheint darunter - bereit zum Kopieren und Einfügen in Ihren E-Mail-Manager oder Ihr CMS.',
|
|
45
45
|
},
|
|
46
46
|
];
|
|
47
47
|
|
|
@@ -19,7 +19,7 @@ const faqData = [
|
|
|
19
19
|
'La herramienta respeta los estilos inline existentes y añade las nuevas propiedades a continuación, simulando el comportamiento de la cascada CSS: las propiedades declaradas más tarde sobreescriben las anteriores en caso de conflicto.',
|
|
20
20
|
},
|
|
21
21
|
{
|
|
22
|
-
question: '¿Funciona con selectores complejos como
|
|
22
|
+
question: '¿Funciona con selectores complejos como hover o media queries?',
|
|
23
23
|
answer:
|
|
24
24
|
'La herramienta procesa selectores de clase, id, atributos y pseudo-clases estructurales que DOMParser puede resolver. Los selectores dependientes de estado como :hover y las media queries no se pueden inlinear (ya que dependen del entorno en tiempo de ejecución) y son ignorados.',
|
|
25
25
|
},
|
|
@@ -16,7 +16,7 @@ const faqData = [
|
|
|
16
16
|
{
|
|
17
17
|
question: 'Que se passe-t-il si un élément a déjà son propre attribut style ?',
|
|
18
18
|
answer:
|
|
19
|
-
'L\'outil respecte les styles inline existants et ajoute les nouvelles propriétés à la suite, simulant le comportement de la cascade CSS
|
|
19
|
+
'L\'outil respecte les styles inline existants et ajoute les nouvelles propriétés à la suite, simulant le comportement de la cascade CSS: les propriétés déclarées plus tard écrasent les précédentes en cas de conflit.',
|
|
20
20
|
},
|
|
21
21
|
{
|
|
22
22
|
question: 'Fonctionne-t-il avec des sélecteurs complexes comme :hover ou les media queries ?',
|
|
@@ -124,11 +124,11 @@ export const content: ToolLocaleContent<CssToInlineConverterUI> = {
|
|
|
124
124
|
},
|
|
125
125
|
{
|
|
126
126
|
type: 'paragraph',
|
|
127
|
-
html: 'Lors du développement d\'applications web modernes, nous sommes habitués à séparer les responsabilités
|
|
127
|
+
html: 'Lors du développement d\'applications web modernes, nous sommes habitués à séparer les responsabilités: le HTML construit la structure, et un fichier CSS externe apporte tout le style visuel. Cependant, tous les environnements ne font pas confiance aux feuilles de style externes ni aux balises globales <code><style></code>.',
|
|
128
128
|
},
|
|
129
129
|
{
|
|
130
130
|
type: 'paragraph',
|
|
131
|
-
html: 'Le cas d\'usage le plus populaire où le CSS externe échoue est le <strong>Développement de Modèles d\'Email</strong>. Dans ces environnements, la seule façon fiable qu\'une police, couleur ou marge se rende correctement est qu\'elle soit imbriquée directement dans la balise
|
|
131
|
+
html: 'Le cas d\'usage le plus populaire où le CSS externe échoue est le <strong>Développement de Modèles d\'Email</strong>. Dans ces environnements, la seule façon fiable qu\'une police, couleur ou marge se rende correctement est qu\'elle soit imbriquée directement dans la balise: <code><span style="color: red;"></code>.',
|
|
132
132
|
},
|
|
133
133
|
{
|
|
134
134
|
type: 'title',
|
|
@@ -9,6 +9,7 @@ interface Props {
|
|
|
9
9
|
|
|
10
10
|
const { locale = 'es' } = Astro.props;
|
|
11
11
|
const content = await cssToInlineConverter.i18n[locale]?.();
|
|
12
|
+
if (!content) return null;
|
|
12
13
|
---
|
|
13
14
|
|
|
14
|
-
{content && <SEORenderer content={{ locale, sections: content.seo }} />}
|
|
15
|
+
{content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
color: var(--dupcss-text);
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
.theme-dark .dupcss-root {
|
|
18
18
|
--dupcss-card-bg: #1e293b;
|
|
19
19
|
--dupcss-bg: #0f172a;
|
|
20
20
|
--dupcss-text: #f1f5f9;
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
overflow: hidden;
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
.dupcss-stats-visible {
|
|
47
47
|
display: flex;
|
|
48
48
|
}
|
|
49
49
|
|