@jjlmoya/utils-developer 1.14.0 → 1.16.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/category/index.ts +2 -1
- package/src/entries.ts +4 -1
- package/src/index.ts +2 -0
- 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/locale_completeness.test.ts +2 -3
- package/src/tests/no_en_dash.test.ts +73 -0
- package/src/tests/pagespeed_best_practices.test.ts +198 -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/tests/tool_validation.test.ts +2 -2
- package/src/tool/aspectRatio/component.astro +3 -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/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/component.astro +3 -3
- 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/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/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/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/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/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/seo.astro +2 -1
- 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/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/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/seo.astro +2 -1
- package/src/tool/llmCostCalculator/component.astro +1 -2
- 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/seo.astro +2 -1
- package/src/tool/mobileMockupGenerator/component.astro +4 -5
- package/src/tool/mobileMockupGenerator/i18n/es.ts +1 -1
- 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/seo.astro +2 -1
- package/src/tool/placeholderGenerator/component.astro +2 -2
- package/src/tool/placeholderGenerator/i18n/de.ts +4 -4
- package/src/tool/placeholderGenerator/i18n/ru.ts +1 -1
- package/src/tool/placeholderGenerator/seo.astro +2 -1
- package/src/tool/promptLibrary/i18n/de.ts +1 -1
- package/src/tool/promptLibrary/seo.astro +2 -1
- package/src/tool/readabilityCalculator/component.astro +4 -4
- 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 +87 -3
- package/src/tool/serpPixelSimulator/bibliography.astro +7 -0
- package/src/tool/serpPixelSimulator/bibliography.ts +16 -0
- package/src/tool/serpPixelSimulator/component.astro +84 -0
- package/src/tool/serpPixelSimulator/controller.ts +323 -0
- package/src/tool/serpPixelSimulator/entry.ts +30 -0
- package/src/tool/serpPixelSimulator/i18n/de.ts +214 -0
- package/src/tool/serpPixelSimulator/i18n/en.ts +213 -0
- package/src/tool/serpPixelSimulator/i18n/es.ts +214 -0
- package/src/tool/serpPixelSimulator/i18n/fr.ts +214 -0
- package/src/tool/serpPixelSimulator/i18n/id.ts +214 -0
- package/src/tool/serpPixelSimulator/i18n/it.ts +214 -0
- package/src/tool/serpPixelSimulator/i18n/ja.ts +214 -0
- package/src/tool/serpPixelSimulator/i18n/ko.ts +214 -0
- package/src/tool/serpPixelSimulator/i18n/nl.ts +214 -0
- package/src/tool/serpPixelSimulator/i18n/pl.ts +214 -0
- package/src/tool/serpPixelSimulator/i18n/pt.ts +214 -0
- package/src/tool/serpPixelSimulator/i18n/ru.ts +214 -0
- package/src/tool/serpPixelSimulator/i18n/sv.ts +214 -0
- package/src/tool/serpPixelSimulator/i18n/tr.ts +214 -0
- package/src/tool/serpPixelSimulator/i18n/zh.ts +214 -0
- package/src/tool/serpPixelSimulator/index.ts +12 -0
- package/src/tool/serpPixelSimulator/logic.ts +18 -0
- package/src/tool/serpPixelSimulator/seo.astro +12 -0
- package/src/tool/serpPixelSimulator/serp-pixel-simulator.css +335 -0
- package/src/tool/serpPixelSimulator/ui.ts +33 -0
- 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/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/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 +92 -2
- 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/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/tools.ts +2 -2
|
@@ -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 }} />}
|
|
@@ -5,7 +5,7 @@ import type { DuplicateCssRemoverUI } from '../ui';
|
|
|
5
5
|
const slug = 'doppeltes-css-entfernen';
|
|
6
6
|
const title = 'Doppelten CSS Code online entfernen. Stylesheets vereinheitlichen und bereinigen';
|
|
7
7
|
const description =
|
|
8
|
-
'Kostenloses Tool zum Bereinigen und Entfernen doppelter CSS-Regeln. Fasst redundante Selektoren zusammen, respektiert die Kaskade und reduziert sofort die Dateigröße
|
|
8
|
+
'Kostenloses Tool zum Bereinigen und Entfernen doppelter CSS-Regeln. Fasst redundante Selektoren zusammen, respektiert die Kaskade und reduziert sofort die Dateigröße - direkt im Browser.';
|
|
9
9
|
|
|
10
10
|
const faqData = [
|
|
11
11
|
{
|
|
@@ -26,22 +26,22 @@ const faqData = [
|
|
|
26
26
|
{
|
|
27
27
|
question: 'Wird mein CSS an einen Server übertragen?',
|
|
28
28
|
answer:
|
|
29
|
-
'Nein. Die gesamte Verarbeitung findet direkt in Ihrem Browser per lokalem JavaScript statt. Kein Teil Ihres CSS wird an externe Server übertragen
|
|
29
|
+
'Nein. Die gesamte Verarbeitung findet direkt in Ihrem Browser per lokalem JavaScript statt. Kein Teil Ihres CSS wird an externe Server übertragen - Ihr Code bleibt vollständig privat.',
|
|
30
30
|
},
|
|
31
31
|
];
|
|
32
32
|
|
|
33
33
|
const howToData = [
|
|
34
34
|
{
|
|
35
35
|
name: 'Ihren CSS Code einfügen',
|
|
36
|
-
text: 'Kopieren Sie den Inhalt Ihrer CSS-Datei mit wiederholten Selektoren und fügen Sie ihn in das linke Feld
|
|
36
|
+
text: 'Kopieren Sie den Inhalt Ihrer CSS-Datei mit wiederholten Selektoren und fügen Sie ihn in das linke Feld "Dirty / Duplicate CSS" ein.',
|
|
37
37
|
},
|
|
38
38
|
{
|
|
39
39
|
name: 'Bereinigung starten',
|
|
40
|
-
text: 'Klicken Sie auf
|
|
40
|
+
text: 'Klicken Sie auf "CSS bereinigen und vereinheitlichen". Das Tool durchsucht alle Selektoren, führt Eigenschaften zusammen und entfernt redundante Blöcke.',
|
|
41
41
|
},
|
|
42
42
|
{
|
|
43
43
|
name: 'Ergebnis prüfen und kopieren',
|
|
44
|
-
text: 'Sehen Sie sich die Byte-Einsparungen an und kopieren Sie das optimierte CSS über den Button
|
|
44
|
+
text: 'Sehen Sie sich die Byte-Einsparungen an und kopieren Sie das optimierte CSS über den Button "Code kopieren" direkt in Ihr Projekt.',
|
|
45
45
|
},
|
|
46
46
|
];
|
|
47
47
|
|
|
@@ -141,7 +141,7 @@ export const content: ToolLocaleContent<DuplicateCssRemoverUI> = {
|
|
|
141
141
|
},
|
|
142
142
|
{
|
|
143
143
|
type: 'tip',
|
|
144
|
-
html: 'Redundante Stile zu bereinigen ist keine reine Ordnungsfrage
|
|
144
|
+
html: 'Redundante Stile zu bereinigen ist keine reine Ordnungsfrage - es ist eine messbare und unmittelbare Verbesserung wichtiger Metriken wie dem <strong>First Contentful Paint (FCP)</strong>.',
|
|
145
145
|
},
|
|
146
146
|
{
|
|
147
147
|
type: 'title',
|
|
@@ -161,7 +161,7 @@ export const content: ToolLocaleContent<DuplicateCssRemoverUI> = {
|
|
|
161
161
|
},
|
|
162
162
|
{
|
|
163
163
|
type: 'paragraph',
|
|
164
|
-
html: 'Schluss damit, Kilobytes toter Textdaten an die Mobilgeräte Ihrer Nutzer zu schicken. Vereinheitlichen Sie Ihren Code in Millisekunden
|
|
164
|
+
html: 'Schluss damit, Kilobytes toter Textdaten an die Mobilgeräte Ihrer Nutzer zu schicken. Vereinheitlichen Sie Ihren Code in Millisekunden - vollständig offline, direkt im Browser.',
|
|
165
165
|
},
|
|
166
166
|
],
|
|
167
167
|
};
|
|
@@ -16,7 +16,7 @@ const faqData = [
|
|
|
16
16
|
{
|
|
17
17
|
question: 'Des propriétés seront-elles perdues lors de la suppression des doublons ?',
|
|
18
18
|
answer:
|
|
19
|
-
'Non. L\'algorithme respecte strictement la cascade CSS
|
|
19
|
+
'Non. L\'algorithme respecte strictement la cascade CSS: pour les propriétés en conflit sous le même sélecteur, il préserve toujours la dernière déclarée. Les propriétés uniques de chaque bloc sont combinées sous un sélecteur unifié.',
|
|
20
20
|
},
|
|
21
21
|
{
|
|
22
22
|
question: 'Fonctionne-t-il avec du CSS minifié ou des commentaires ?',
|
|
@@ -141,7 +141,7 @@ export const content: ToolLocaleContent<DuplicateCssRemoverUI> = {
|
|
|
141
141
|
},
|
|
142
142
|
{
|
|
143
143
|
type: 'tip',
|
|
144
|
-
html: 'Membuang gaya yang redundan bukan sekadar soal kerapian kode
|
|
144
|
+
html: 'Membuang gaya yang redundan bukan sekadar soal kerapian kode - ini adalah peningkatan nyata dan terukur pada metrik penting seperti <strong>First Contentful Paint (FCP)</strong>.',
|
|
145
145
|
},
|
|
146
146
|
{
|
|
147
147
|
type: 'title',
|
|
@@ -141,7 +141,7 @@ export const content: ToolLocaleContent<DuplicateCssRemoverUI> = {
|
|
|
141
141
|
},
|
|
142
142
|
{
|
|
143
143
|
type: 'tip',
|
|
144
|
-
html: 'Overbodige stijlen verwijderen gaat niet alleen om codenetjes
|
|
144
|
+
html: 'Overbodige stijlen verwijderen gaat niet alleen om codenetjes - het is een meetbare en directe verbetering van vitale metrics zoals de <strong>First Contentful Paint (FCP)</strong>.',
|
|
145
145
|
},
|
|
146
146
|
{
|
|
147
147
|
type: 'title',
|
|
@@ -141,7 +141,7 @@ export const content: ToolLocaleContent<DuplicateCssRemoverUI> = {
|
|
|
141
141
|
},
|
|
142
142
|
{
|
|
143
143
|
type: 'tip',
|
|
144
|
-
html: 'Usuwanie nadmiarowych stylów to nie tylko kwestia porządku w kodzie
|
|
144
|
+
html: 'Usuwanie nadmiarowych stylów to nie tylko kwestia porządku w kodzie - to mierzalna i natychmiastowa poprawa kluczowych metryk, takich jak <strong>First Contentful Paint (FCP)</strong>.',
|
|
145
145
|
},
|
|
146
146
|
{
|
|
147
147
|
type: 'title',
|
|
@@ -141,7 +141,7 @@ export const content: ToolLocaleContent<DuplicateCssRemoverUI> = {
|
|
|
141
141
|
},
|
|
142
142
|
{
|
|
143
143
|
type: 'tip',
|
|
144
|
-
html: 'Purgar estilos redundantes não é apenas uma questão de organização do código
|
|
144
|
+
html: 'Purgar estilos redundantes não é apenas uma questão de organização do código - é uma melhoria mensurável e imediata em métricas vitais como o <strong>First Contentful Paint (FCP)</strong>.',
|
|
145
145
|
},
|
|
146
146
|
{
|
|
147
147
|
type: 'title',
|
|
@@ -26,7 +26,7 @@ const faqData = [
|
|
|
26
26
|
{
|
|
27
27
|
question: 'Отправляется ли мой CSS на сервер?',
|
|
28
28
|
answer:
|
|
29
|
-
'Нет. Вся обработка происходит прямо в браузере с помощью локального JavaScript. Никакая часть вашего CSS не передаётся на внешние серверы
|
|
29
|
+
'Нет. Вся обработка происходит прямо в браузере с помощью локального JavaScript. Никакая часть вашего CSS не передаётся на внешние серверы - полная конфиденциальность кода гарантирована.',
|
|
30
30
|
},
|
|
31
31
|
];
|
|
32
32
|
|
|
@@ -141,7 +141,7 @@ export const content: ToolLocaleContent<DuplicateCssRemoverUI> = {
|
|
|
141
141
|
},
|
|
142
142
|
{
|
|
143
143
|
type: 'tip',
|
|
144
|
-
html: 'Удаление лишних стилей
|
|
144
|
+
html: 'Удаление лишних стилей - это не просто вопрос чистоты кода. Это измеримое и немедленное улучшение ключевых показателей, таких как <strong>First Contentful Paint (FCP)</strong>.',
|
|
145
145
|
},
|
|
146
146
|
{
|
|
147
147
|
type: 'title',
|
|
@@ -155,7 +155,7 @@ export const content: ToolLocaleContent<DuplicateCssRemoverUI> = {
|
|
|
155
155
|
{
|
|
156
156
|
type: 'list',
|
|
157
157
|
items: [
|
|
158
|
-
'Представьте, что у вас есть правило <code>.box { color: red; }</code>, а сотню строк спустя
|
|
158
|
+
'Представьте, что у вас есть правило <code>.box { color: red; }</code>, а сотню строк спустя - <code>.box { padding: 10px; color: blue; }</code>. Инструмент объединит оба блока под одним селектором <code>.box</code>, включив padding.',
|
|
159
159
|
'<strong>Сохранение каскада CSS:</strong> При прямых конфликтах алгоритм строго сохраняет последнее объявленное свойство. Это гарантирует, что ваша вёрстка не сломается после очистки документа.',
|
|
160
160
|
],
|
|
161
161
|
},
|
|
@@ -141,7 +141,7 @@ export const content: ToolLocaleContent<DuplicateCssRemoverUI> = {
|
|
|
141
141
|
},
|
|
142
142
|
{
|
|
143
143
|
type: 'tip',
|
|
144
|
-
html: 'Att rensa bort redundanta stilar handlar inte bara om kodordning
|
|
144
|
+
html: 'Att rensa bort redundanta stilar handlar inte bara om kodordning - det är en mätbar och omedelbar förbättring av viktiga mätvärden som <strong>First Contentful Paint (FCP)</strong>.',
|
|
145
145
|
},
|
|
146
146
|
{
|
|
147
147
|
type: 'title',
|
|
@@ -9,6 +9,7 @@ interface Props {
|
|
|
9
9
|
|
|
10
10
|
const { locale = 'es' } = Astro.props;
|
|
11
11
|
const content = await duplicateCssRemover.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 }} />}
|