@jjlmoya/utils-tools 1.12.0 → 1.13.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/pages/[locale]/[slug].astro +30 -13
- package/src/tests/locale_completeness.test.ts +3 -20
- package/src/tests/shared-test-helpers.ts +56 -0
- package/src/tests/tool_exports.test.ts +34 -0
- package/src/tool/date-diff-calculator/bibliography.astro +2 -10
- package/src/tool/date-diff-calculator/bibliography.ts +7 -0
- package/src/tool/date-diff-calculator/i18n/de.ts +4 -7
- package/src/tool/date-diff-calculator/i18n/en.ts +4 -7
- package/src/tool/date-diff-calculator/i18n/es.ts +4 -7
- package/src/tool/date-diff-calculator/i18n/fr.ts +4 -7
- package/src/tool/date-diff-calculator/i18n/id.ts +4 -7
- package/src/tool/date-diff-calculator/i18n/it.ts +4 -7
- package/src/tool/date-diff-calculator/i18n/ja.ts +4 -7
- package/src/tool/date-diff-calculator/i18n/ko.ts +4 -7
- package/src/tool/date-diff-calculator/i18n/nl.ts +4 -7
- package/src/tool/date-diff-calculator/i18n/pl.ts +4 -7
- package/src/tool/date-diff-calculator/i18n/pt.ts +4 -7
- package/src/tool/date-diff-calculator/i18n/ru.ts +4 -7
- package/src/tool/date-diff-calculator/i18n/sv.ts +4 -7
- package/src/tool/date-diff-calculator/i18n/tr.ts +4 -7
- package/src/tool/date-diff-calculator/i18n/zh.ts +4 -7
- package/src/tool/date-diff-calculator/seo.astro +2 -1
- package/src/tool/drive-direct-link/bibliography.astro +2 -10
- package/src/tool/drive-direct-link/bibliography.ts +6 -0
- package/src/tool/drive-direct-link/i18n/de.ts +4 -6
- package/src/tool/drive-direct-link/i18n/en.ts +4 -6
- package/src/tool/drive-direct-link/i18n/es.ts +4 -6
- package/src/tool/drive-direct-link/i18n/fr.ts +4 -6
- package/src/tool/drive-direct-link/i18n/id.ts +4 -6
- package/src/tool/drive-direct-link/i18n/it.ts +4 -6
- package/src/tool/drive-direct-link/i18n/ja.ts +4 -6
- package/src/tool/drive-direct-link/i18n/ko.ts +4 -6
- package/src/tool/drive-direct-link/i18n/nl.ts +4 -6
- package/src/tool/drive-direct-link/i18n/pl.ts +4 -6
- package/src/tool/drive-direct-link/i18n/pt.ts +4 -6
- package/src/tool/drive-direct-link/i18n/ru.ts +4 -6
- package/src/tool/drive-direct-link/i18n/sv.ts +4 -6
- package/src/tool/drive-direct-link/i18n/tr.ts +4 -6
- package/src/tool/drive-direct-link/i18n/zh.ts +4 -6
- package/src/tool/drive-direct-link/seo.astro +2 -1
- package/src/tool/email-list-cleaner/bibliography.astro +2 -10
- package/src/tool/email-list-cleaner/bibliography.ts +7 -0
- package/src/tool/email-list-cleaner/i18n/de.ts +4 -7
- package/src/tool/email-list-cleaner/i18n/en.ts +4 -7
- package/src/tool/email-list-cleaner/i18n/es.ts +4 -7
- package/src/tool/email-list-cleaner/i18n/fr.ts +4 -7
- package/src/tool/email-list-cleaner/i18n/id.ts +4 -7
- package/src/tool/email-list-cleaner/i18n/it.ts +4 -7
- package/src/tool/email-list-cleaner/i18n/ja.ts +4 -7
- package/src/tool/email-list-cleaner/i18n/ko.ts +4 -7
- package/src/tool/email-list-cleaner/i18n/nl.ts +4 -7
- package/src/tool/email-list-cleaner/i18n/pl.ts +4 -7
- package/src/tool/email-list-cleaner/i18n/pt.ts +4 -7
- package/src/tool/email-list-cleaner/i18n/ru.ts +4 -7
- package/src/tool/email-list-cleaner/i18n/sv.ts +4 -7
- package/src/tool/email-list-cleaner/i18n/tr.ts +4 -7
- package/src/tool/email-list-cleaner/i18n/zh.ts +4 -7
- package/src/tool/email-list-cleaner/seo.astro +2 -1
- package/src/tool/env-badge-spain/bibliography.astro +2 -10
- package/src/tool/env-badge-spain/bibliography.ts +6 -0
- package/src/tool/env-badge-spain/i18n/de.ts +4 -6
- package/src/tool/env-badge-spain/i18n/en.ts +4 -6
- package/src/tool/env-badge-spain/i18n/es.ts +4 -6
- package/src/tool/env-badge-spain/i18n/fr.ts +4 -6
- package/src/tool/env-badge-spain/i18n/id.ts +4 -6
- package/src/tool/env-badge-spain/i18n/it.ts +4 -6
- package/src/tool/env-badge-spain/i18n/ja.ts +4 -6
- package/src/tool/env-badge-spain/i18n/ko.ts +4 -6
- package/src/tool/env-badge-spain/i18n/nl.ts +4 -6
- package/src/tool/env-badge-spain/i18n/pl.ts +4 -6
- package/src/tool/env-badge-spain/i18n/pt.ts +4 -6
- package/src/tool/env-badge-spain/i18n/ru.ts +4 -6
- package/src/tool/env-badge-spain/i18n/sv.ts +4 -6
- package/src/tool/env-badge-spain/i18n/tr.ts +4 -6
- package/src/tool/env-badge-spain/i18n/zh.ts +4 -6
- package/src/tool/env-badge-spain/seo.astro +2 -1
- package/src/tool/morse-beacon/bibliography.astro +2 -10
- package/src/tool/morse-beacon/bibliography.ts +7 -0
- package/src/tool/morse-beacon/i18n/de.ts +4 -7
- package/src/tool/morse-beacon/i18n/en.ts +4 -7
- package/src/tool/morse-beacon/i18n/es.ts +4 -7
- package/src/tool/morse-beacon/i18n/fr.ts +4 -7
- package/src/tool/morse-beacon/i18n/id.ts +4 -7
- package/src/tool/morse-beacon/i18n/it.ts +4 -7
- package/src/tool/morse-beacon/i18n/ja.ts +4 -7
- package/src/tool/morse-beacon/i18n/ko.ts +4 -7
- package/src/tool/morse-beacon/i18n/nl.ts +4 -7
- package/src/tool/morse-beacon/i18n/pl.ts +4 -7
- package/src/tool/morse-beacon/i18n/pt.ts +4 -7
- package/src/tool/morse-beacon/i18n/ru.ts +4 -7
- package/src/tool/morse-beacon/i18n/sv.ts +4 -7
- package/src/tool/morse-beacon/i18n/tr.ts +4 -7
- package/src/tool/morse-beacon/i18n/zh.ts +4 -7
- package/src/tool/morse-beacon/seo.astro +2 -1
- package/src/tool/password-generator/bibliography.astro +2 -10
- package/src/tool/password-generator/bibliography.ts +8 -0
- package/src/tool/password-generator/i18n/de.ts +4 -8
- package/src/tool/password-generator/i18n/en.ts +4 -8
- package/src/tool/password-generator/i18n/es.ts +4 -8
- package/src/tool/password-generator/i18n/fr.ts +4 -8
- package/src/tool/password-generator/i18n/id.ts +4 -8
- package/src/tool/password-generator/i18n/it.ts +4 -8
- package/src/tool/password-generator/i18n/ja.ts +4 -8
- package/src/tool/password-generator/i18n/ko.ts +4 -8
- package/src/tool/password-generator/i18n/nl.ts +4 -8
- package/src/tool/password-generator/i18n/pl.ts +4 -8
- package/src/tool/password-generator/i18n/pt.ts +4 -8
- package/src/tool/password-generator/i18n/ru.ts +4 -8
- package/src/tool/password-generator/i18n/sv.ts +4 -8
- package/src/tool/password-generator/i18n/tr.ts +4 -8
- package/src/tool/password-generator/i18n/zh.ts +4 -8
- package/src/tool/password-generator/seo.astro +2 -1
- package/src/tool/routes/bibliography.astro +2 -10
- package/src/tool/routes/bibliography.ts +9 -0
- package/src/tool/routes/i18n/de.ts +4 -9
- package/src/tool/routes/i18n/en.ts +4 -9
- package/src/tool/routes/i18n/es.ts +4 -9
- package/src/tool/routes/i18n/fr.ts +4 -9
- package/src/tool/routes/i18n/id.ts +4 -9
- package/src/tool/routes/i18n/it.ts +4 -9
- package/src/tool/routes/i18n/ja.ts +4 -9
- package/src/tool/routes/i18n/ko.ts +4 -9
- package/src/tool/routes/i18n/nl.ts +4 -9
- package/src/tool/routes/i18n/pl.ts +4 -9
- package/src/tool/routes/i18n/pt.ts +4 -9
- package/src/tool/routes/i18n/ru.ts +4 -9
- package/src/tool/routes/i18n/sv.ts +4 -9
- package/src/tool/routes/i18n/tr.ts +4 -9
- package/src/tool/routes/i18n/zh.ts +4 -9
- package/src/tool/routes/seo.astro +2 -1
- package/src/tool/rule-of-three/bibliography.astro +2 -10
- package/src/tool/rule-of-three/bibliography.ts +6 -0
- package/src/tool/rule-of-three/i18n/de.ts +4 -6
- package/src/tool/rule-of-three/i18n/en.ts +4 -6
- package/src/tool/rule-of-three/i18n/es.ts +4 -6
- package/src/tool/rule-of-three/i18n/fr.ts +4 -6
- package/src/tool/rule-of-three/i18n/id.ts +4 -6
- package/src/tool/rule-of-three/i18n/it.ts +4 -6
- package/src/tool/rule-of-three/i18n/ja.ts +4 -6
- package/src/tool/rule-of-three/i18n/ko.ts +4 -6
- package/src/tool/rule-of-three/i18n/nl.ts +4 -6
- package/src/tool/rule-of-three/i18n/pl.ts +4 -6
- package/src/tool/rule-of-three/i18n/pt.ts +4 -6
- package/src/tool/rule-of-three/i18n/ru.ts +4 -6
- package/src/tool/rule-of-three/i18n/sv.ts +4 -6
- package/src/tool/rule-of-three/i18n/tr.ts +4 -6
- package/src/tool/rule-of-three/i18n/zh.ts +4 -6
- package/src/tool/rule-of-three/seo.astro +2 -1
- package/src/tool/seo-content-optimizer/bibliography.astro +2 -10
- package/src/tool/seo-content-optimizer/bibliography.ts +6 -0
- package/src/tool/seo-content-optimizer/i18n/de.ts +4 -6
- package/src/tool/seo-content-optimizer/i18n/en.ts +4 -6
- package/src/tool/seo-content-optimizer/i18n/es.ts +4 -6
- package/src/tool/seo-content-optimizer/i18n/fr.ts +4 -6
- package/src/tool/seo-content-optimizer/i18n/id.ts +4 -6
- package/src/tool/seo-content-optimizer/i18n/it.ts +4 -6
- package/src/tool/seo-content-optimizer/i18n/ja.ts +4 -6
- package/src/tool/seo-content-optimizer/i18n/ko.ts +4 -6
- package/src/tool/seo-content-optimizer/i18n/nl.ts +4 -6
- package/src/tool/seo-content-optimizer/i18n/pl.ts +4 -6
- package/src/tool/seo-content-optimizer/i18n/pt.ts +4 -6
- package/src/tool/seo-content-optimizer/i18n/ru.ts +4 -6
- package/src/tool/seo-content-optimizer/i18n/sv.ts +4 -6
- package/src/tool/seo-content-optimizer/i18n/tr.ts +4 -6
- package/src/tool/seo-content-optimizer/i18n/zh.ts +4 -6
- package/src/tool/seo-content-optimizer/seo.astro +2 -1
- package/src/tool/speed-reader/bibliography.astro +2 -10
- package/src/tool/speed-reader/bibliography.ts +10 -0
- package/src/tool/speed-reader/i18n/de.ts +4 -10
- package/src/tool/speed-reader/i18n/en.ts +4 -10
- package/src/tool/speed-reader/i18n/es.ts +4 -10
- package/src/tool/speed-reader/i18n/fr.ts +4 -10
- package/src/tool/speed-reader/i18n/id.ts +4 -10
- package/src/tool/speed-reader/i18n/it.ts +4 -10
- package/src/tool/speed-reader/i18n/ja.ts +4 -10
- package/src/tool/speed-reader/i18n/ko.ts +4 -10
- package/src/tool/speed-reader/i18n/nl.ts +4 -10
- package/src/tool/speed-reader/i18n/pl.ts +4 -10
- package/src/tool/speed-reader/i18n/pt.ts +4 -10
- package/src/tool/speed-reader/i18n/ru.ts +4 -10
- package/src/tool/speed-reader/i18n/sv.ts +4 -10
- package/src/tool/speed-reader/i18n/tr.ts +4 -10
- package/src/tool/speed-reader/i18n/zh.ts +4 -10
- package/src/tool/speed-reader/seo.astro +2 -1
- package/src/tool/text-pixel-calculator/bibliography.astro +2 -10
- package/src/tool/text-pixel-calculator/bibliography.ts +6 -0
- package/src/tool/text-pixel-calculator/i18n/de.ts +4 -6
- package/src/tool/text-pixel-calculator/i18n/en.ts +4 -6
- package/src/tool/text-pixel-calculator/i18n/es.ts +4 -6
- package/src/tool/text-pixel-calculator/i18n/fr.ts +4 -6
- package/src/tool/text-pixel-calculator/i18n/id.ts +4 -6
- package/src/tool/text-pixel-calculator/i18n/it.ts +4 -6
- package/src/tool/text-pixel-calculator/i18n/ja.ts +4 -6
- package/src/tool/text-pixel-calculator/i18n/ko.ts +4 -6
- package/src/tool/text-pixel-calculator/i18n/nl.ts +4 -6
- package/src/tool/text-pixel-calculator/i18n/pl.ts +4 -6
- package/src/tool/text-pixel-calculator/i18n/pt.ts +4 -6
- package/src/tool/text-pixel-calculator/i18n/ru.ts +4 -6
- package/src/tool/text-pixel-calculator/i18n/sv.ts +4 -6
- package/src/tool/text-pixel-calculator/i18n/tr.ts +4 -6
- package/src/tool/text-pixel-calculator/i18n/zh.ts +4 -6
- package/src/tool/text-pixel-calculator/seo.astro +2 -1
- package/src/tool/whatsapp-link/bibliography.astro +2 -10
- package/src/tool/whatsapp-link/bibliography.ts +6 -0
- package/src/tool/whatsapp-link/i18n/de.ts +4 -6
- package/src/tool/whatsapp-link/i18n/en.ts +4 -6
- package/src/tool/whatsapp-link/i18n/es.ts +4 -6
- package/src/tool/whatsapp-link/i18n/fr.ts +4 -6
- package/src/tool/whatsapp-link/i18n/id.ts +4 -6
- package/src/tool/whatsapp-link/i18n/it.ts +4 -6
- package/src/tool/whatsapp-link/i18n/ja.ts +4 -6
- package/src/tool/whatsapp-link/i18n/ko.ts +4 -6
- package/src/tool/whatsapp-link/i18n/nl.ts +4 -6
- package/src/tool/whatsapp-link/i18n/pl.ts +4 -6
- package/src/tool/whatsapp-link/i18n/pt.ts +4 -6
- package/src/tool/whatsapp-link/i18n/ru.ts +4 -6
- package/src/tool/whatsapp-link/i18n/sv.ts +4 -6
- package/src/tool/whatsapp-link/i18n/tr.ts +4 -6
- package/src/tool/whatsapp-link/i18n/zh.ts +4 -6
- package/src/tool/whatsapp-link/seo.astro +2 -1
- package/src/types.ts +0 -2
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
1
2
|
import type { ToolLocaleContent } from '../../../types';
|
|
2
3
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
3
4
|
import type { PasswordGeneratorUI } from '../ui';
|
|
@@ -89,16 +90,11 @@ export const content: ToolLocaleContent<PasswordGeneratorUI> = {
|
|
|
89
90
|
title: 'Gerador de Passwords Aleatórias Seguras',
|
|
90
91
|
description: 'Crie passwords fortes e à prova de hackers instantaneamente. Ferramenta de cibersegurança gratuita para gerar chaves aleatórias e seguras.',
|
|
91
92
|
ui,
|
|
92
|
-
|
|
93
|
+
|
|
93
94
|
faq: faqData,
|
|
94
95
|
howTo: howToData,
|
|
95
|
-
|
|
96
|
-
bibliography
|
|
97
|
-
{ name: 'Web Cryptography API — MDN Web Docs', url: 'https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API' },
|
|
98
|
-
{ name: 'NIST SP 800-63B: Digital Identity Guidelines', url: 'https://pages.nist.gov/800-63-3/sp800-63b.html' },
|
|
99
|
-
{ name: 'Password — Wikipédia', url: 'https://pt.wikipedia.org/wiki/Palavra-passe' },
|
|
100
|
-
{ name: 'Have I Been Pwned — Verifique se a sua password foi exposta', url: 'https://haveibeenpwned.com/Passwords' },
|
|
101
|
-
],
|
|
96
|
+
|
|
97
|
+
bibliography,
|
|
102
98
|
schemas: [faqSchema, howToSchema, appSchema],
|
|
103
99
|
seo: [
|
|
104
100
|
{
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
1
2
|
import type { ToolLocaleContent } from '../../../types';
|
|
2
3
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
3
4
|
import type { PasswordGeneratorUI } from '../ui';
|
|
@@ -89,16 +90,11 @@ export const content: ToolLocaleContent<PasswordGeneratorUI> = {
|
|
|
89
90
|
title: 'Генератор надежных случайных паролей',
|
|
90
91
|
description: 'Мгновенно создавайте надежные, устойчивые к взлому пароли. Бесплатный инструмент кибербезопасности для генерации случайных защищенных ключей.',
|
|
91
92
|
ui,
|
|
92
|
-
|
|
93
|
+
|
|
93
94
|
faq: faqData,
|
|
94
95
|
howTo: howToData,
|
|
95
|
-
|
|
96
|
-
bibliography
|
|
97
|
-
{ name: 'Web Cryptography API — MDN Web Docs', url: 'https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API' },
|
|
98
|
-
{ name: 'NIST SP 800-63B: Digital Identity Guidelines', url: 'https://pages.nist.gov/800-63-3/sp800-63b.html' },
|
|
99
|
-
{ name: 'Пароль — Википедия', url: 'https://ru.wikipedia.org/wiki/%D0%9F%D0%B0%D1%80%D0%BE%D0%BB%D1%8C' },
|
|
100
|
-
{ name: 'Have I Been Pwned — Проверьте, не был ли ваш пароль скомпрометирован', url: 'https://haveibeenpwned.com/Passwords' },
|
|
101
|
-
],
|
|
96
|
+
|
|
97
|
+
bibliography,
|
|
102
98
|
schemas: [faqSchema, howToSchema, appSchema],
|
|
103
99
|
seo: [
|
|
104
100
|
{
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
1
2
|
import type { ToolLocaleContent } from '../../../types';
|
|
2
3
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
3
4
|
import type { PasswordGeneratorUI } from '../ui';
|
|
@@ -89,16 +90,11 @@ export const content: ToolLocaleContent<PasswordGeneratorUI> = {
|
|
|
89
90
|
title: 'Säker slumpmässig lösenordsgenerator',
|
|
90
91
|
description: 'Skapa starka, hacksäkra lösenord omedelbart. Gratis cybersäkerhetsverktyg för att generera slumpmässiga, säkra nycklar.',
|
|
91
92
|
ui,
|
|
92
|
-
|
|
93
|
+
|
|
93
94
|
faq: faqData,
|
|
94
95
|
howTo: howToData,
|
|
95
|
-
|
|
96
|
-
bibliography
|
|
97
|
-
{ name: 'Web Cryptography API — MDN Web Docs', url: 'https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API' },
|
|
98
|
-
{ name: 'NIST SP 800-63B: Digital Identity Guidelines', url: 'https://pages.nist.gov/800-63-3/sp800-63b.html' },
|
|
99
|
-
{ name: 'Lösenord — Wikipedia', url: 'https://sv.wikipedia.org/wiki/L%C3%B6senord' },
|
|
100
|
-
{ name: 'Have I Been Pwned — Kontrollera om ditt lösenord har exponerats', url: 'https://haveibeenpwned.com/Passwords' },
|
|
101
|
-
],
|
|
96
|
+
|
|
97
|
+
bibliography,
|
|
102
98
|
schemas: [faqSchema, howToSchema, appSchema],
|
|
103
99
|
seo: [
|
|
104
100
|
{
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
1
2
|
import type { ToolLocaleContent } from '../../../types';
|
|
2
3
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
3
4
|
import type { PasswordGeneratorUI } from '../ui';
|
|
@@ -89,16 +90,11 @@ export const content: ToolLocaleContent<PasswordGeneratorUI> = {
|
|
|
89
90
|
title: 'Güvenli Rastgele Şifre Oluşturucu',
|
|
90
91
|
description: 'Anında güçlü, hackerlara karşı dayanıklı şifreler oluşturun. Rastgele, güvenli anahtarlar oluşturmak için ücretsiz siber güvenlik aracı.',
|
|
91
92
|
ui,
|
|
92
|
-
|
|
93
|
+
|
|
93
94
|
faq: faqData,
|
|
94
95
|
howTo: howToData,
|
|
95
|
-
|
|
96
|
-
bibliography
|
|
97
|
-
{ name: 'Web Cryptography API — MDN Web Docs', url: 'https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API' },
|
|
98
|
-
{ name: 'NIST SP 800-63B: Digital Identity Guidelines', url: 'https://pages.nist.gov/800-63-3/sp800-63b.html' },
|
|
99
|
-
{ name: 'Şifre — Vikipedi', url: 'https://tr.wikipedia.org/wiki/Parola' },
|
|
100
|
-
{ name: 'Have I Been Pwned — Şifrenizin ifşa olup olmadığını kontrol edin', url: 'https://haveibeenpwned.com/Passwords' },
|
|
101
|
-
],
|
|
96
|
+
|
|
97
|
+
bibliography,
|
|
102
98
|
schemas: [faqSchema, howToSchema, appSchema],
|
|
103
99
|
seo: [
|
|
104
100
|
{
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
1
2
|
import type { ToolLocaleContent } from '../../../types';
|
|
2
3
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
3
4
|
import type { PasswordGeneratorUI } from '../ui';
|
|
@@ -89,16 +90,11 @@ export const content: ToolLocaleContent<PasswordGeneratorUI> = {
|
|
|
89
90
|
title: '安全随机密码生成器',
|
|
90
91
|
description: '立即创建强大、防黑客的密码。免费的网络安全工具,用于生成随机、安全的密钥。',
|
|
91
92
|
ui,
|
|
92
|
-
|
|
93
|
+
|
|
93
94
|
faq: faqData,
|
|
94
95
|
howTo: howToData,
|
|
95
|
-
|
|
96
|
-
bibliography
|
|
97
|
-
{ name: 'Web Cryptography API — MDN Web Docs', url: 'https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API' },
|
|
98
|
-
{ name: 'NIST SP 800-63B: 数字身份指南', url: 'https://pages.nist.gov/800-63-3/sp800-63b.html' },
|
|
99
|
-
{ name: '密码 — 维基百科', url: 'https://zh.wikipedia.org/wiki/%E5%AF%86%E7%A0%81' },
|
|
100
|
-
{ name: 'Have I Been Pwned — 检查您的密码是否已泄露', url: 'https://haveibeenpwned.com/Passwords' },
|
|
101
|
-
],
|
|
96
|
+
|
|
97
|
+
bibliography,
|
|
102
98
|
schemas: [faqSchema, howToSchema, appSchema],
|
|
103
99
|
seo: [
|
|
104
100
|
{
|
|
@@ -9,6 +9,7 @@ interface Props {
|
|
|
9
9
|
|
|
10
10
|
const { locale = 'es' } = Astro.props;
|
|
11
11
|
const content = await passwordGenerator.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 }} />}
|
|
@@ -1,14 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
import { Bibliography as SharedBibliography } from '@jjlmoya/utils-shared';
|
|
3
|
-
import {
|
|
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 routes.i18n[locale]?.();
|
|
3
|
+
import { bibliography } from './bibliography';
|
|
12
4
|
---
|
|
13
5
|
|
|
14
|
-
|
|
6
|
+
<SharedBibliography links={bibliography} />
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { BibliographyEntry } from '../../types';
|
|
2
|
+
|
|
3
|
+
export const bibliography: BibliographyEntry[] = [
|
|
4
|
+
{ name: 'Leaflet — Open-source interactive maps library', url: 'https://leafletjs.com/' },
|
|
5
|
+
{ name: 'OpenStreetMap — Open cartographic data', url: 'https://www.openstreetmap.org/' },
|
|
6
|
+
{ name: 'CARTO — Voyager map tiles', url: 'https://carto.com/basemaps/' },
|
|
7
|
+
{ name: 'Nominatim — Reverse geocoding service (OpenStreetMap)', url: 'https://nominatim.org/' },
|
|
8
|
+
{ name: 'OSRM — Open Source Routing Machine (route optimization)', url: 'http://project-osrm.org/' },
|
|
9
|
+
];
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
1
2
|
import type { ToolLocaleContent } from '../../../types';
|
|
2
3
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
3
4
|
import type { RoutesUI } from '../ui';
|
|
@@ -89,17 +90,11 @@ export const content: ToolLocaleContent<RoutesUI> = {
|
|
|
89
90
|
title: 'Kostenloser optimaler Routenplaner',
|
|
90
91
|
description: 'Optimieren Sie Ihre Liefer- oder Reiserouten kostenlos. Unser Tool ordnet Ihre Haltepunkte automatisch neu, um den kürzesten und effizientesten Weg zu finden.',
|
|
91
92
|
ui,
|
|
92
|
-
|
|
93
|
+
|
|
93
94
|
faq: faqData,
|
|
94
95
|
howTo: howToData,
|
|
95
|
-
|
|
96
|
-
bibliography
|
|
97
|
-
{ name: 'Leaflet — Open-Source interaktive Kartenbibliothek', url: 'https://leafletjs.com/' },
|
|
98
|
-
{ name: 'OpenStreetMap — Offene kartografische Daten', url: 'https://www.openstreetmap.org/' },
|
|
99
|
-
{ name: 'CARTO — Voyager-Kartenkacheln', url: 'https://carto.com/basemaps/' },
|
|
100
|
-
{ name: 'Nominatim — Reverse-Geocoding-Dienst (OpenStreetMap)', url: 'https://nominatim.org/' },
|
|
101
|
-
{ name: 'OSRM — Open Source Routing Machine (Routenoptimierung)', url: 'http://project-osrm.org/' },
|
|
102
|
-
],
|
|
96
|
+
|
|
97
|
+
bibliography,
|
|
103
98
|
schemas: [faqSchema, howToSchema, appSchema],
|
|
104
99
|
seo: [
|
|
105
100
|
{
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
1
2
|
import type { ToolLocaleContent } from '../../../types';
|
|
2
3
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
3
4
|
import type { RoutesUI } from '../ui';
|
|
@@ -89,17 +90,11 @@ export const content: ToolLocaleContent<RoutesUI> = {
|
|
|
89
90
|
title: 'Free Optimal Route Calculator',
|
|
90
91
|
description: 'Optimize your delivery or travel routes for free. Our tool automatically reorders your stops to find the shortest and most efficient path.',
|
|
91
92
|
ui,
|
|
92
|
-
|
|
93
|
+
|
|
93
94
|
faq: faqData,
|
|
94
95
|
howTo: howToData,
|
|
95
|
-
|
|
96
|
-
bibliography
|
|
97
|
-
{ name: 'Leaflet — Open-source interactive maps library', url: 'https://leafletjs.com/' },
|
|
98
|
-
{ name: 'OpenStreetMap — Open cartographic data', url: 'https://www.openstreetmap.org/' },
|
|
99
|
-
{ name: 'CARTO — Voyager map tiles', url: 'https://carto.com/basemaps/' },
|
|
100
|
-
{ name: 'Nominatim — Reverse geocoding service (OpenStreetMap)', url: 'https://nominatim.org/' },
|
|
101
|
-
{ name: 'OSRM — Open Source Routing Machine (route optimization)', url: 'http://project-osrm.org/' },
|
|
102
|
-
],
|
|
96
|
+
|
|
97
|
+
bibliography,
|
|
103
98
|
schemas: [faqSchema, howToSchema, appSchema],
|
|
104
99
|
seo: [
|
|
105
100
|
{
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
1
2
|
import type { ToolLocaleContent } from '../../../types';
|
|
2
3
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
3
4
|
import type { RoutesUI } from '../ui';
|
|
@@ -89,17 +90,11 @@ export const content: ToolLocaleContent<RoutesUI> = {
|
|
|
89
90
|
title: 'Calculadora de Rutas Óptimas Gratis',
|
|
90
91
|
description: 'Optimiza tus rutas de reparto o viaje gratis. Nuestra herramienta reordena tus paradas automáticamente para encontrar el camino más corto y eficiente.',
|
|
91
92
|
ui,
|
|
92
|
-
|
|
93
|
+
|
|
93
94
|
faq: faqData,
|
|
94
95
|
howTo: howToData,
|
|
95
|
-
|
|
96
|
-
bibliography
|
|
97
|
-
{ name: 'Leaflet — Librería de mapas interactivos de código abierto', url: 'https://leafletjs.com/' },
|
|
98
|
-
{ name: 'OpenStreetMap — Datos cartográficos abiertos', url: 'https://www.openstreetmap.org/' },
|
|
99
|
-
{ name: 'CARTO — Tiles de mapas Voyager', url: 'https://carto.com/basemaps/' },
|
|
100
|
-
{ name: 'Nominatim — Servicio de geocodificación inversa (OpenStreetMap)', url: 'https://nominatim.org/' },
|
|
101
|
-
{ name: 'OSRM — Open Source Routing Machine (optimización de rutas)', url: 'http://project-osrm.org/' },
|
|
102
|
-
],
|
|
96
|
+
|
|
97
|
+
bibliography,
|
|
103
98
|
schemas: [faqSchema, howToSchema, appSchema],
|
|
104
99
|
seo: [
|
|
105
100
|
{
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
1
2
|
import type { ToolLocaleContent } from '../../../types';
|
|
2
3
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
3
4
|
import type { RoutesUI } from '../ui';
|
|
@@ -89,17 +90,11 @@ export const content: ToolLocaleContent<RoutesUI> = {
|
|
|
89
90
|
title: "Calculateur d'itinéraires optimaux gratuit",
|
|
90
91
|
description: "Optimisez vos itinéraires de livraison ou de voyage gratuitement. Notre outil réorganise automatiquement vos arrêts pour trouver le chemin le plus court et le plus efficace.",
|
|
91
92
|
ui,
|
|
92
|
-
|
|
93
|
+
|
|
93
94
|
faq: faqData,
|
|
94
95
|
howTo: howToData,
|
|
95
|
-
|
|
96
|
-
bibliography
|
|
97
|
-
{ name: 'Leaflet — Bibliothèque de cartes interactives open source', url: 'https://leafletjs.com/' },
|
|
98
|
-
{ name: 'OpenStreetMap — Données cartographiques ouvertes', url: 'https://www.openstreetmap.org/' },
|
|
99
|
-
{ name: 'CARTO — Tuiles de carte Voyager', url: 'https://carto.com/basemaps/' },
|
|
100
|
-
{ name: 'Nominatim — Service de géocodage inverse (OpenStreetMap)', url: 'https://nominatim.org/' },
|
|
101
|
-
{ name: "OSRM — Open Source Routing Machine (optimisation d'itinéraires)", url: 'http://project-osrm.org/' },
|
|
102
|
-
],
|
|
96
|
+
|
|
97
|
+
bibliography,
|
|
103
98
|
schemas: [faqSchema, howToSchema, appSchema],
|
|
104
99
|
seo: [
|
|
105
100
|
{
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
1
2
|
import type { ToolLocaleContent } from '../../../types';
|
|
2
3
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
3
4
|
import type { RoutesUI } from '../ui';
|
|
@@ -89,17 +90,11 @@ export const content: ToolLocaleContent<RoutesUI> = {
|
|
|
89
90
|
title: 'Kalkulator Rute Optimal Gratis',
|
|
90
91
|
description: 'Optimalkan rute pengiriman atau perjalanan Anda secara gratis. Alat kami mengurutkan ulang perhentian Anda secara otomatis untuk menemukan jalur terpendek dan paling efisien.',
|
|
91
92
|
ui,
|
|
92
|
-
|
|
93
|
+
|
|
93
94
|
faq: faqData,
|
|
94
95
|
howTo: howToData,
|
|
95
|
-
|
|
96
|
-
bibliography
|
|
97
|
-
{ name: 'Leaflet — Library peta interaktif sumber terbuka', url: 'https://leafletjs.com/' },
|
|
98
|
-
{ name: 'OpenStreetMap — Data kartografi terbuka', url: 'https://www.openstreetmap.org/' },
|
|
99
|
-
{ name: 'CARTO — Tile peta Voyager', url: 'https://carto.com/basemaps/' },
|
|
100
|
-
{ name: 'Nominatim — Layanan geocoding balik (OpenStreetMap)', url: 'https://nominatim.org/' },
|
|
101
|
-
{ name: 'OSRM — Open Source Routing Machine (optimisasi rute)', url: 'http://project-osrm.org/' },
|
|
102
|
-
],
|
|
96
|
+
|
|
97
|
+
bibliography,
|
|
103
98
|
schemas: [faqSchema, howToSchema, appSchema],
|
|
104
99
|
seo: [
|
|
105
100
|
{
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
1
2
|
import type { ToolLocaleContent } from '../../../types';
|
|
2
3
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
3
4
|
import type { RoutesUI } from '../ui';
|
|
@@ -89,17 +90,11 @@ export const content: ToolLocaleContent<RoutesUI> = {
|
|
|
89
90
|
title: 'Calcolatore di Rotte Ottimali Gratuito',
|
|
90
91
|
description: 'Ottimizza le tue rotte di consegna o di viaggio gratuitamente. Il nostro strumento riordina automaticamente le tue tappe per trovare il percorso più breve ed efficiente.',
|
|
91
92
|
ui,
|
|
92
|
-
|
|
93
|
+
|
|
93
94
|
faq: faqData,
|
|
94
95
|
howTo: howToData,
|
|
95
|
-
|
|
96
|
-
bibliography
|
|
97
|
-
{ name: 'Leaflet — Libreria di mappe interattive open-source', url: 'https://leafletjs.com/' },
|
|
98
|
-
{ name: 'OpenStreetMap — Dati cartografici aperti', url: 'https://www.openstreetmap.org/' },
|
|
99
|
-
{ name: 'CARTO — Tile delle mappe Voyager', url: 'https://carto.com/basemaps/' },
|
|
100
|
-
{ name: 'Nominatim — Servizio di geocodifica inversa (OpenStreetMap)', url: 'https://nominatim.org/' },
|
|
101
|
-
{ name: 'OSRM — Open Source Routing Machine (ottimizzazione rotte)', url: 'http://project-osrm.org/' },
|
|
102
|
-
],
|
|
96
|
+
|
|
97
|
+
bibliography,
|
|
103
98
|
schemas: [faqSchema, howToSchema, appSchema],
|
|
104
99
|
seo: [
|
|
105
100
|
{
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
1
2
|
import type { ToolLocaleContent } from '../../../types';
|
|
2
3
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
3
4
|
import type { RoutesUI } from '../ui';
|
|
@@ -89,17 +90,11 @@ export const content: ToolLocaleContent<RoutesUI> = {
|
|
|
89
90
|
title: '無料の最適ルート計算機',
|
|
90
91
|
description: '配達や旅行のルートを無料で最適化します。当ツールは経由地を自動的に並べ替えて、最短かつ最も効率的な経路を見つけます。',
|
|
91
92
|
ui,
|
|
92
|
-
|
|
93
|
+
|
|
93
94
|
faq: faqData,
|
|
94
95
|
howTo: howToData,
|
|
95
|
-
|
|
96
|
-
bibliography
|
|
97
|
-
{ name: 'Leaflet — オープンソースのインタラクティブ・マップ・ライブラリ', url: 'https://leafletjs.com/' },
|
|
98
|
-
{ name: 'OpenStreetMap — オープンな地図データ', url: 'https://www.openstreetmap.org/' },
|
|
99
|
-
{ name: 'CARTO — Voyager マップタイル', url: 'https://carto.com/basemaps/' },
|
|
100
|
-
{ name: 'Nominatim — 逆ジオコーディングサービス(OpenStreetMap)', url: 'https://nominatim.org/' },
|
|
101
|
-
{ name: 'OSRM — Open Source Routing Machine(ルート最適化)', url: 'http://project-osrm.org/' },
|
|
102
|
-
],
|
|
96
|
+
|
|
97
|
+
bibliography,
|
|
103
98
|
schemas: [faqSchema, howToSchema, appSchema],
|
|
104
99
|
seo: [
|
|
105
100
|
{
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
1
2
|
import type { ToolLocaleContent } from '../../../types';
|
|
2
3
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
3
4
|
import type { RoutesUI } from '../ui';
|
|
@@ -89,17 +90,11 @@ export const content: ToolLocaleContent<RoutesUI> = {
|
|
|
89
90
|
title: '무료 최적 경로 계산기',
|
|
90
91
|
description: '배달 또는 여행 경로를 무료로 최적화하세요. 당사의 도구는 가장 짧고 효율적인 경로를 찾기 위해 정거장을 자동으로 재배치합니다.',
|
|
91
92
|
ui,
|
|
92
|
-
|
|
93
|
+
|
|
93
94
|
faq: faqData,
|
|
94
95
|
howTo: howToData,
|
|
95
|
-
|
|
96
|
-
bibliography
|
|
97
|
-
{ name: 'Leaflet — 오픈 소스 대화형 지도 라이브러리', url: 'https://leafletjs.com/' },
|
|
98
|
-
{ name: 'OpenStreetMap — 공개 지도 데이터', url: 'https://www.openstreetmap.org/' },
|
|
99
|
-
{ name: 'CARTO — Voyager 지도 타일', url: 'https://carto.com/basemaps/' },
|
|
100
|
-
{ name: 'Nominatim — 역 지오코딩 서비스 (OpenStreetMap)', url: 'https://nominatim.org/' },
|
|
101
|
-
{ name: 'OSRM — 오픈 소스 라우팅 엔진 (경로 최적화)', url: 'http://project-osrm.org/' },
|
|
102
|
-
],
|
|
96
|
+
|
|
97
|
+
bibliography,
|
|
103
98
|
schemas: [faqSchema, howToSchema, appSchema],
|
|
104
99
|
seo: [
|
|
105
100
|
{
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
1
2
|
import type { ToolLocaleContent } from '../../../types';
|
|
2
3
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
3
4
|
import type { RoutesUI } from '../ui';
|
|
@@ -89,17 +90,11 @@ export const content: ToolLocaleContent<RoutesUI> = {
|
|
|
89
90
|
title: 'Gratis optimale routeplanner',
|
|
90
91
|
description: 'Optimaliseer uw bezorg- of reisroutes gratis. Onze tool reorganiseert uw stops automatisch om de kortste en meest efficiënte route te vinden.',
|
|
91
92
|
ui,
|
|
92
|
-
|
|
93
|
+
|
|
93
94
|
faq: faqData,
|
|
94
95
|
howTo: howToData,
|
|
95
|
-
|
|
96
|
-
bibliography
|
|
97
|
-
{ name: 'Leaflet — Open-source interactieve kaartenbibliotheek', url: 'https://leafletjs.com/' },
|
|
98
|
-
{ name: 'OpenStreetMap — Open cartografische gegevens', url: 'https://www.openstreetmap.org/' },
|
|
99
|
-
{ name: 'CARTO — Voyager-kaarttegels', url: 'https://carto.com/basemaps/' },
|
|
100
|
-
{ name: 'Nominatim — Omgekeerde geocoderingsdienst (OpenStreetMap)', url: 'https://nominatim.org/' },
|
|
101
|
-
{ name: 'OSRM — Open Source Routing Machine (route-optimalisatie)', url: 'http://project-osrm.org/' },
|
|
102
|
-
],
|
|
96
|
+
|
|
97
|
+
bibliography,
|
|
103
98
|
schemas: [faqSchema, howToSchema, appSchema],
|
|
104
99
|
seo: [
|
|
105
100
|
{
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
1
2
|
import type { ToolLocaleContent } from '../../../types';
|
|
2
3
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
3
4
|
import type { RoutesUI } from '../ui';
|
|
@@ -89,17 +90,11 @@ export const content: ToolLocaleContent<RoutesUI> = {
|
|
|
89
90
|
title: 'Darmowy Kalkulator Optymalnej Trasy',
|
|
90
91
|
description: 'Optymalizuj swoje trasy dostaw lub podróży za darmo. Nasze narzędzie automatycznie porządkuje przystanki, aby znaleźć najkrótszą i najskuteczniejszą ścieżkę.',
|
|
91
92
|
ui,
|
|
92
|
-
|
|
93
|
+
|
|
93
94
|
faq: faqData,
|
|
94
95
|
howTo: howToData,
|
|
95
|
-
|
|
96
|
-
bibliography
|
|
97
|
-
{ name: 'Leaflet — otwarta biblioteka map interaktywnych', url: 'https://leafletjs.com/' },
|
|
98
|
-
{ name: 'OpenStreetMap — otwarte dane kartograficzne', url: 'https://www.openstreetmap.org/' },
|
|
99
|
-
{ name: 'CARTO — kafelki mapy Voyager', url: 'https://carto.com/basemaps/' },
|
|
100
|
-
{ name: 'Nominatim — usługa odwróconego geokodowania (OpenStreetMap)', url: 'https://nominatim.org/' },
|
|
101
|
-
{ name: 'OSRM — Open Source Routing Machine (optymalizacja tras)', url: 'http://project-osrm.org/' },
|
|
102
|
-
],
|
|
96
|
+
|
|
97
|
+
bibliography,
|
|
103
98
|
schemas: [faqSchema, howToSchema, appSchema],
|
|
104
99
|
seo: [
|
|
105
100
|
{
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
1
2
|
import type { ToolLocaleContent } from '../../../types';
|
|
2
3
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
3
4
|
import type { RoutesUI } from '../ui';
|
|
@@ -89,17 +90,11 @@ export const content: ToolLocaleContent<RoutesUI> = {
|
|
|
89
90
|
title: 'Calculadora de Rotas Ideais Gratuita',
|
|
90
91
|
description: 'Otimize as suas rotas de entrega ou de viagem gratuitamente. A nossa ferramenta reordena automaticamente as suas paragens para encontrar o caminho mais curto e eficiente.',
|
|
91
92
|
ui,
|
|
92
|
-
|
|
93
|
+
|
|
93
94
|
faq: faqData,
|
|
94
95
|
howTo: howToData,
|
|
95
|
-
|
|
96
|
-
bibliography
|
|
97
|
-
{ name: 'Leaflet — Biblioteca de mapas interativos de código aberto', url: 'https://leafletjs.com/' },
|
|
98
|
-
{ name: 'OpenStreetMap — Dados cartográficos abertos', url: 'https://www.openstreetmap.org/' },
|
|
99
|
-
{ name: 'CARTO — Mosaicos de mapas Voyager', url: 'https://carto.com/basemaps/' },
|
|
100
|
-
{ name: 'Nominatim — Serviço de geocodificação reversa (OpenStreetMap)', url: 'https://nominatim.org/' },
|
|
101
|
-
{ name: 'OSRM — Open Source Routing Machine (otimização de rotas)', url: 'http://project-osrm.org/' },
|
|
102
|
-
],
|
|
96
|
+
|
|
97
|
+
bibliography,
|
|
103
98
|
schemas: [faqSchema, howToSchema, appSchema],
|
|
104
99
|
seo: [
|
|
105
100
|
{
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
1
2
|
import type { ToolLocaleContent } from '../../../types';
|
|
2
3
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
3
4
|
import type { RoutesUI } from '../ui';
|
|
@@ -89,17 +90,11 @@ export const content: ToolLocaleContent<RoutesUI> = {
|
|
|
89
90
|
title: 'Бесплатный калькулятор оптимального маршрута',
|
|
90
91
|
description: 'Бесплатно оптимизируйте маршруты доставки или путешествий. Наш инструмент автоматически переставляет ваши остановки, чтобы найти кратчайший и самый эффективный путь.',
|
|
91
92
|
ui,
|
|
92
|
-
|
|
93
|
+
|
|
93
94
|
faq: faqData,
|
|
94
95
|
howTo: howToData,
|
|
95
|
-
|
|
96
|
-
bibliography
|
|
97
|
-
{ name: 'Leaflet — открытая библиотека интерактивных карт', url: 'https://leafletjs.com/' },
|
|
98
|
-
{ name: 'OpenStreetMap — открытые картографические данные', url: 'https://www.openstreetmap.org/' },
|
|
99
|
-
{ name: 'CARTO — тайлы карт Voyager', url: 'https://carto.com/basemaps/' },
|
|
100
|
-
{ name: 'Nominatim — сервис обратного геокодирования (OpenStreetMap)', url: 'https://nominatim.org/' },
|
|
101
|
-
{ name: 'OSRM — Open Source Routing Machine (оптимизация маршрутов)', url: 'http://project-osrm.org/' },
|
|
102
|
-
],
|
|
96
|
+
|
|
97
|
+
bibliography,
|
|
103
98
|
schemas: [faqSchema, howToSchema, appSchema],
|
|
104
99
|
seo: [
|
|
105
100
|
{
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
1
2
|
import type { ToolLocaleContent } from '../../../types';
|
|
2
3
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
3
4
|
import type { RoutesUI } from '../ui';
|
|
@@ -89,17 +90,11 @@ export const content: ToolLocaleContent<RoutesUI> = {
|
|
|
89
90
|
title: 'Gratis optimal ruttberäknare',
|
|
90
91
|
description: 'Optimera dina leverans- eller resrutter gratis. Vårt verktyg sorterar om dina stopp automatiskt för att hitta den kortaste och mest effektiva vägen.',
|
|
91
92
|
ui,
|
|
92
|
-
|
|
93
|
+
|
|
93
94
|
faq: faqData,
|
|
94
95
|
howTo: howToData,
|
|
95
|
-
|
|
96
|
-
bibliography
|
|
97
|
-
{ name: 'Leaflet — Interaktivt kartbibliotek med öppen källkod', url: 'https://leafletjs.com/' },
|
|
98
|
-
{ name: 'OpenStreetMap — Öppna kartografiska data', url: 'https://www.openstreetmap.org/' },
|
|
99
|
-
{ name: 'CARTO — Voyager-kartplattor', url: 'https://carto.com/basemaps/' },
|
|
100
|
-
{ name: 'Nominatim — Omvänd geokodningstjänst (OpenStreetMap)', url: 'https://nominatim.org/' },
|
|
101
|
-
{ name: 'OSRM — Open Source Routing Machine (ruttoptimering)', url: 'http://project-osrm.org/' },
|
|
102
|
-
],
|
|
96
|
+
|
|
97
|
+
bibliography,
|
|
103
98
|
schemas: [faqSchema, howToSchema, appSchema],
|
|
104
99
|
seo: [
|
|
105
100
|
{
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
1
2
|
import type { ToolLocaleContent } from '../../../types';
|
|
2
3
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
3
4
|
import type { RoutesUI } from '../ui';
|
|
@@ -89,17 +90,11 @@ export const content: ToolLocaleContent<RoutesUI> = {
|
|
|
89
90
|
title: 'Ücretsiz En Uygun Rota Hesaplayıcı',
|
|
90
91
|
description: 'Teslimat veya seyahat rotalarınızı ücretsiz olarak optimize edin. Aracımız, en kısa ve en verimli yolu bulmak için duraklarınızı otomatik olarak yeniden sıralar.',
|
|
91
92
|
ui,
|
|
92
|
-
|
|
93
|
+
|
|
93
94
|
faq: faqData,
|
|
94
95
|
howTo: howToData,
|
|
95
|
-
|
|
96
|
-
bibliography
|
|
97
|
-
{ name: 'Leaflet — Açık kaynaklı etkileşimli harita kütüphanesi', url: 'https://leafletjs.com/' },
|
|
98
|
-
{ name: 'OpenStreetMap — Açık kartografik veriler', url: 'https://www.openstreetmap.org/' },
|
|
99
|
-
{ name: 'CARTO — Voyager harita kutucukları', url: 'https://carto.com/basemaps/' },
|
|
100
|
-
{ name: 'Nominatim — Ters coğrafi kodlama servisi (OpenStreetMap)', url: 'https://nominatim.org/' },
|
|
101
|
-
{ name: 'OSRM — Açık Kaynak Rota Makinesi (rota optimizasyonu)', url: 'http://project-osrm.org/' },
|
|
102
|
-
],
|
|
96
|
+
|
|
97
|
+
bibliography,
|
|
103
98
|
schemas: [faqSchema, howToSchema, appSchema],
|
|
104
99
|
seo: [
|
|
105
100
|
{
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
1
2
|
import type { ToolLocaleContent } from '../../../types';
|
|
2
3
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
3
4
|
import type { RoutesUI } from '../ui';
|
|
@@ -89,17 +90,11 @@ export const content: ToolLocaleContent<RoutesUI> = {
|
|
|
89
90
|
title: '免费最佳路线计算器',
|
|
90
91
|
description: '免费优化您的送货或旅行路线。我们的工具会自动重新排列您的停靠点,以找到最短、最高效的路径。',
|
|
91
92
|
ui,
|
|
92
|
-
|
|
93
|
+
|
|
93
94
|
faq: faqData,
|
|
94
95
|
howTo: howToData,
|
|
95
|
-
|
|
96
|
-
bibliography
|
|
97
|
-
{ name: 'Leaflet — 开源交互式地图库', url: 'https://leafletjs.com/' },
|
|
98
|
-
{ name: 'OpenStreetMap — 开源地图数据', url: 'https://www.openstreetmap.org/' },
|
|
99
|
-
{ name: 'CARTO — Voyager 地图图块', url: 'https://carto.com/basemaps/' },
|
|
100
|
-
{ name: 'Nominatim — 逆地理编码服务 (OpenStreetMap)', url: 'https://nominatim.org/' },
|
|
101
|
-
{ name: 'OSRM — 开源路由引擎 (路线优化)', url: 'http://project-osrm.org/' },
|
|
102
|
-
],
|
|
96
|
+
|
|
97
|
+
bibliography,
|
|
103
98
|
schemas: [faqSchema, howToSchema, appSchema],
|
|
104
99
|
seo: [
|
|
105
100
|
{
|
|
@@ -9,6 +9,7 @@ interface Props {
|
|
|
9
9
|
|
|
10
10
|
const { locale = 'es' } = Astro.props;
|
|
11
11
|
const content = await routes.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 }} />}
|
|
@@ -1,14 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
import { Bibliography as SharedBibliography } from '@jjlmoya/utils-shared';
|
|
3
|
-
import {
|
|
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 ruleOfThree.i18n[locale]?.();
|
|
3
|
+
import { bibliography } from './bibliography';
|
|
12
4
|
---
|
|
13
5
|
|
|
14
|
-
|
|
6
|
+
<SharedBibliography links={bibliography} />
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { BibliographyEntry } from '../../types';
|
|
2
|
+
|
|
3
|
+
export const bibliography: BibliographyEntry[] = [
|
|
4
|
+
{ name: 'Proportionality (mathematics) — Wikipedia', url: 'https://en.wikipedia.org/wiki/Proportionality_(mathematics)' },
|
|
5
|
+
{ name: 'Ratios and proportions — Khan Academy', url: 'https://www.khanacademy.org/math/pre-algebra/pre-algebra-ratios-rates/pre-algebra-ratios-intro/a/ratio-review' },
|
|
6
|
+
];
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { bibliography } from '../bibliography';
|
|
1
2
|
import type { ToolLocaleContent } from '../../../types';
|
|
2
3
|
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
3
4
|
import type { RuleOfThreeUI } from '../ui';
|
|
@@ -86,14 +87,11 @@ export const content: ToolLocaleContent<RuleOfThreeUI> = {
|
|
|
86
87
|
title: 'Einfacher Dreisatz Rechner',
|
|
87
88
|
description: 'Lösen Sie mathematische Proportionen sofort. Das ultimative Tool zur Berechnung von Mengen, Rezepten, Rabatten und Umrechnungen.',
|
|
88
89
|
ui,
|
|
89
|
-
|
|
90
|
+
|
|
90
91
|
faq: faqData,
|
|
91
92
|
howTo: howToData,
|
|
92
|
-
|
|
93
|
-
bibliography
|
|
94
|
-
{ name: 'Proportionalität (Mathematik) — Wikipedia', url: 'https://de.wikipedia.org/wiki/Proportionalit%C3%A4t' },
|
|
95
|
-
{ name: 'Verhältnisse und Proportionen — Khan Academy', url: 'https://de.khanacademy.org/math/pre-algebra/pre-algebra-ratios-rates' },
|
|
96
|
-
],
|
|
93
|
+
|
|
94
|
+
bibliography,
|
|
97
95
|
schemas: [faqSchema, howToSchema, appSchema],
|
|
98
96
|
seo: [
|
|
99
97
|
{
|