@jjlmoya/utils-tools 1.12.0 → 1.14.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/de.ts +3 -3
- package/src/category/i18n/en.ts +1 -1
- package/src/category/i18n/es.ts +1 -1
- package/src/category/i18n/fr.ts +16 -16
- package/src/category/i18n/id.ts +1 -1
- package/src/category/i18n/nl.ts +1 -1
- package/src/category/i18n/pl.ts +1 -1
- package/src/category/i18n/pt.ts +1 -1
- package/src/category/i18n/ru.ts +10 -10
- package/src/category/i18n/sv.ts +1 -1
- package/src/category/i18n/tr.ts +1 -1
- package/src/category/i18n/zh.ts +4 -4
- package/src/layouts/PreviewLayout.astro +7 -2
- package/src/pages/[locale]/[slug].astro +30 -13
- package/src/tests/diacritics_density.test.ts +118 -0
- package/src/tests/inverted_punctuation.test.ts +84 -0
- package/src/tests/locale_completeness.test.ts +3 -20
- package/src/tests/no_en_dash.test.ts +70 -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/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 +8 -11
- 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 +5 -8
- package/src/tool/date-diff-calculator/i18n/pt.ts +4 -7
- package/src/tool/date-diff-calculator/i18n/ru.ts +8 -11
- 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 +7 -10
- 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 +8 -10
- package/src/tool/drive-direct-link/i18n/en.ts +4 -6
- package/src/tool/drive-direct-link/i18n/es.ts +5 -7
- package/src/tool/drive-direct-link/i18n/fr.ts +5 -7
- 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 +8 -10
- package/src/tool/drive-direct-link/i18n/pt.ts +4 -6
- package/src/tool/drive-direct-link/i18n/ru.ts +12 -14
- 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 +8 -10
- 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 +6 -9
- 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 +6 -9
- package/src/tool/email-list-cleaner/i18n/pt.ts +4 -7
- package/src/tool/email-list-cleaner/i18n/ru.ts +11 -14
- package/src/tool/email-list-cleaner/i18n/sv.ts +5 -8
- package/src/tool/email-list-cleaner/i18n/tr.ts +4 -7
- package/src/tool/email-list-cleaner/i18n/zh.ts +7 -10
- 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 +14 -16
- 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 +8 -11
- package/src/tool/morse-beacon/i18n/en.ts +6 -9
- package/src/tool/morse-beacon/i18n/es.ts +6 -9
- package/src/tool/morse-beacon/i18n/fr.ts +9 -12
- package/src/tool/morse-beacon/i18n/id.ts +6 -9
- package/src/tool/morse-beacon/i18n/it.ts +6 -9
- package/src/tool/morse-beacon/i18n/ja.ts +6 -9
- package/src/tool/morse-beacon/i18n/ko.ts +6 -9
- package/src/tool/morse-beacon/i18n/nl.ts +6 -9
- package/src/tool/morse-beacon/i18n/pl.ts +7 -10
- package/src/tool/morse-beacon/i18n/pt.ts +6 -9
- package/src/tool/morse-beacon/i18n/ru.ts +7 -10
- package/src/tool/morse-beacon/i18n/sv.ts +6 -9
- package/src/tool/morse-beacon/i18n/tr.ts +6 -9
- package/src/tool/morse-beacon/i18n/zh.ts +7 -10
- 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 +9 -13
- 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 +5 -9
- 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 +7 -11
- package/src/tool/password-generator/i18n/pt.ts +4 -8
- package/src/tool/password-generator/i18n/ru.ts +8 -12
- 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 +7 -11
- 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 +5 -10
- 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 +7 -12
- 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 +7 -12
- 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 +5 -10
- 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 +6 -8
- 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 +11 -13
- 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 +6 -8
- package/src/tool/rule-of-three/i18n/pl.ts +6 -8
- package/src/tool/rule-of-three/i18n/pt.ts +4 -6
- package/src/tool/rule-of-three/i18n/ru.ts +7 -9
- package/src/tool/rule-of-three/i18n/sv.ts +4 -6
- package/src/tool/rule-of-three/i18n/tr.ts +5 -7
- package/src/tool/rule-of-three/i18n/zh.ts +6 -8
- 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 +7 -9
- 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 +5 -7
- 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 +7 -13
- package/src/tool/speed-reader/i18n/en.ts +6 -12
- package/src/tool/speed-reader/i18n/es.ts +4 -10
- package/src/tool/speed-reader/i18n/fr.ts +13 -19
- package/src/tool/speed-reader/i18n/id.ts +6 -12
- package/src/tool/speed-reader/i18n/it.ts +6 -12
- 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 +6 -12
- package/src/tool/speed-reader/i18n/pl.ts +7 -13
- package/src/tool/speed-reader/i18n/pt.ts +6 -12
- package/src/tool/speed-reader/i18n/ru.ts +14 -20
- package/src/tool/speed-reader/i18n/sv.ts +6 -12
- package/src/tool/speed-reader/i18n/tr.ts +4 -10
- package/src/tool/speed-reader/i18n/zh.ts +8 -14
- 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 +6 -8
- 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 +5 -7
- 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 +7 -9
- package/src/tool/text-pixel-calculator/i18n/pt.ts +4 -6
- package/src/tool/text-pixel-calculator/i18n/ru.ts +8 -10
- 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 +7 -9
- 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 +8 -10
- package/src/tool/whatsapp-link/i18n/en.ts +4 -6
- package/src/tool/whatsapp-link/i18n/es.ts +6 -8
- package/src/tool/whatsapp-link/i18n/fr.ts +6 -8
- 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 +8 -10
- package/src/tool/whatsapp-link/i18n/pt.ts +4 -6
- package/src/tool/whatsapp-link/i18n/ru.ts +9 -11
- 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 +8 -10
- package/src/tool/whatsapp-link/seo.astro +2 -1
- package/src/tool/whatsapp-link/whatsapp-link-generator.css +41 -4
- 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';
|
|
@@ -8,7 +9,7 @@ const faqData = [
|
|
|
8
9
|
answer: '只要生成器是在客户端运行的,就是安全的。我们的工具利用加密安全的算法在您的浏览器内本地生成密码。您的密码绝不会通过互联网发送,也不会存储在任何服务器上。',
|
|
9
10
|
},
|
|
10
11
|
{
|
|
11
|
-
question: '
|
|
12
|
+
question: '是什么让密码"防黑客"?',
|
|
12
13
|
answer: '关键在于熵(随机性)。大小写字母、数字和特殊符号的混合,再加上 12-16 个字符的最小长度,使得以当前技术进行的暴力破解攻击几乎不可能成功。',
|
|
13
14
|
},
|
|
14
15
|
{
|
|
@@ -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
|
{
|
|
@@ -108,7 +104,7 @@ export const content: ToolLocaleContent<PasswordGeneratorUI> = {
|
|
|
108
104
|
},
|
|
109
105
|
{
|
|
110
106
|
type: 'paragraph',
|
|
111
|
-
html: '
|
|
107
|
+
html: '您的密码是您的个人数据(银行、医疗、照片)与网络罪犯之间唯一的屏障。然而,普通用户仍然依赖于可预测的模式,如"123456"或宠物名字,这些模式在<strong>不到一秒钟</strong>的时间内就可以被破解。',
|
|
112
108
|
},
|
|
113
109
|
{
|
|
114
110
|
type: 'comparative',
|
|
@@ -146,7 +142,7 @@ export const content: ToolLocaleContent<PasswordGeneratorUI> = {
|
|
|
146
142
|
{
|
|
147
143
|
icon: 'mdi:eye-off',
|
|
148
144
|
title: '替换的神话',
|
|
149
|
-
description: '
|
|
145
|
+
description: '用"@"代替"a"或用"3"代替"e"(Leetspeak)骗不了任何人。现代攻击字典已经自动包含了这些变体。避免使用可识别的单词。',
|
|
150
146
|
points: [],
|
|
151
147
|
},
|
|
152
148
|
{
|
|
@@ -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';
|
|
@@ -32,7 +33,7 @@ const howToData = [
|
|
|
32
33
|
},
|
|
33
34
|
{
|
|
34
35
|
name: 'Sequenz optimieren',
|
|
35
|
-
text: 'Klicken Sie auf die Schaltfläche
|
|
36
|
+
text: 'Klicken Sie auf die Schaltfläche "Optimieren". Der Algorithmus berechnet in Sekunden die effizienteste Reihenfolge, um alle Haltepunkte abzudecken.',
|
|
36
37
|
},
|
|
37
38
|
{
|
|
38
39
|
name: 'Im Navigator öffnen',
|
|
@@ -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,22 +90,16 @@ 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
|
{
|
|
106
101
|
type: 'title',
|
|
107
|
-
text: "Optimiseur d'itinéraires intelligent
|
|
102
|
+
text: "Optimiseur d'itinéraires intelligent: TSP pour livraisons et voyages",
|
|
108
103
|
level: 2,
|
|
109
104
|
},
|
|
110
105
|
{
|
|
@@ -118,11 +113,11 @@ export const content: ToolLocaleContent<RoutesUI> = {
|
|
|
118
113
|
},
|
|
119
114
|
{
|
|
120
115
|
type: 'paragraph',
|
|
121
|
-
html: "L'outil utilise l'API <strong>OSRM (Open Source Routing Machine)</strong>, un moteur de routage haute performance basé sur les données OpenStreetMap. Le processus
|
|
116
|
+
html: "L'outil utilise l'API <strong>OSRM (Open Source Routing Machine)</strong>, un moteur de routage haute performance basé sur les données OpenStreetMap. Le processus: d'abord il calcule l'itinéraire circulaire optimal entre tous les points (algorithme TSP), puis détermine le meilleur point de coupe pour le convertir en trajet linéaire aller simple, et enfin trace l'itinéraire sur la carte avec la distance totale estimée.",
|
|
122
117
|
},
|
|
123
118
|
{
|
|
124
119
|
type: 'title',
|
|
125
|
-
text: "Cas d'usage
|
|
120
|
+
text: "Cas d'usage: livraisons, commerciaux et voyages",
|
|
126
121
|
level: 2,
|
|
127
122
|
},
|
|
128
123
|
{
|
|
@@ -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';
|
|
@@ -69,7 +70,7 @@ const appSchema: WithContext<SoftwareApplication> = {
|
|
|
69
70
|
|
|
70
71
|
const ui: RoutesUI = {
|
|
71
72
|
titleSidebar: 'Точки маршрута',
|
|
72
|
-
descriptionSidebar: 'Кликните по карте, чтобы добавить остановки. Первая точка
|
|
73
|
+
descriptionSidebar: 'Кликните по карте, чтобы добавить остановки. Первая точка - это старт.',
|
|
73
74
|
emptyState: 'Точки не добавлены',
|
|
74
75
|
btnOptimize: 'Рассчитать оптимальный маршрут',
|
|
75
76
|
btnCalculating: 'Расчет...',
|
|
@@ -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
|
{
|
|
@@ -109,7 +104,7 @@ export const content: ToolLocaleContent<RoutesUI> = {
|
|
|
109
104
|
},
|
|
110
105
|
{
|
|
111
106
|
type: 'paragraph',
|
|
112
|
-
html: '<strong>Онлайн-оптимизатор маршрутов</strong>
|
|
107
|
+
html: '<strong>Онлайн-оптимизатор маршрутов</strong> - это бесплатный инструмент, решающий классическую <em>задачу коммивояжера (TSP)</em>. Добавьте все свои остановки в любом порядке, и алгоритм автоматически рассчитает наиболее эффективную последовательность, чтобы минимизировать общее пройденное расстояние.',
|
|
113
108
|
},
|
|
114
109
|
{
|
|
115
110
|
type: 'title',
|
|
@@ -118,7 +113,7 @@ export const content: ToolLocaleContent<RoutesUI> = {
|
|
|
118
113
|
},
|
|
119
114
|
{
|
|
120
115
|
type: 'paragraph',
|
|
121
|
-
html: 'Инструмент использует API <strong>OSRM (Open Source Routing Machine)</strong>
|
|
116
|
+
html: 'Инструмент использует API <strong>OSRM (Open Source Routing Machine)</strong> - высокопроизводительный движок маршрутизации, основанный на данных OpenStreetMap. Процесс таков: сначала рассчитывается оптимальный круговой маршрут между всеми точками (алгоритм TSP), затем определяется точка разрыва для превращения его в линейный маршрут в одну сторону, и, наконец, маршрут отрисовывается на карте с указанием оценочного общего расстояния.',
|
|
122
117
|
},
|
|
123
118
|
{
|
|
124
119
|
type: 'title',
|
|
@@ -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
|
{
|
|
@@ -109,7 +104,7 @@ export const content: ToolLocaleContent<RoutesUI> = {
|
|
|
109
104
|
},
|
|
110
105
|
{
|
|
111
106
|
type: 'paragraph',
|
|
112
|
-
html: '<strong>在线路线优化器</strong
|
|
107
|
+
html: '<strong>在线路线优化器</strong>是一款免费工具,旨在解决经典的"旅行商问题 (TSP)"。您可以以任何顺序添加所有停靠点,算法将自动计算最高效的顺序,以最小化总行程距离。',
|
|
113
108
|
},
|
|
114
109
|
{
|
|
115
110
|
type: 'title',
|
|
@@ -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
|
+
];
|