@jjlmoya/utils-tools 1.13.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/tests/diacritics_density.test.ts +118 -0
- package/src/tests/inverted_punctuation.test.ts +84 -0
- package/src/tests/no_en_dash.test.ts +70 -0
- package/src/tests/script_density.test.ts +94 -0
- package/src/tool/date-diff-calculator/i18n/de.ts +4 -4
- package/src/tool/date-diff-calculator/i18n/pl.ts +1 -1
- package/src/tool/date-diff-calculator/i18n/ru.ts +4 -4
- package/src/tool/date-diff-calculator/i18n/zh.ts +3 -3
- package/src/tool/drive-direct-link/i18n/de.ts +4 -4
- package/src/tool/drive-direct-link/i18n/es.ts +1 -1
- package/src/tool/drive-direct-link/i18n/fr.ts +1 -1
- package/src/tool/drive-direct-link/i18n/pl.ts +4 -4
- package/src/tool/drive-direct-link/i18n/ru.ts +8 -8
- package/src/tool/drive-direct-link/i18n/zh.ts +4 -4
- package/src/tool/email-list-cleaner/i18n/de.ts +2 -2
- package/src/tool/email-list-cleaner/i18n/pl.ts +2 -2
- package/src/tool/email-list-cleaner/i18n/ru.ts +7 -7
- package/src/tool/email-list-cleaner/i18n/sv.ts +1 -1
- package/src/tool/email-list-cleaner/i18n/zh.ts +3 -3
- package/src/tool/env-badge-spain/i18n/ru.ts +10 -10
- package/src/tool/morse-beacon/bibliography.ts +3 -3
- package/src/tool/morse-beacon/i18n/de.ts +4 -4
- package/src/tool/morse-beacon/i18n/en.ts +2 -2
- package/src/tool/morse-beacon/i18n/es.ts +2 -2
- package/src/tool/morse-beacon/i18n/fr.ts +5 -5
- package/src/tool/morse-beacon/i18n/id.ts +2 -2
- package/src/tool/morse-beacon/i18n/it.ts +2 -2
- package/src/tool/morse-beacon/i18n/ja.ts +2 -2
- package/src/tool/morse-beacon/i18n/ko.ts +2 -2
- package/src/tool/morse-beacon/i18n/nl.ts +2 -2
- package/src/tool/morse-beacon/i18n/pl.ts +3 -3
- package/src/tool/morse-beacon/i18n/pt.ts +2 -2
- package/src/tool/morse-beacon/i18n/ru.ts +3 -3
- package/src/tool/morse-beacon/i18n/sv.ts +2 -2
- package/src/tool/morse-beacon/i18n/tr.ts +2 -2
- package/src/tool/morse-beacon/i18n/zh.ts +3 -3
- package/src/tool/password-generator/bibliography.ts +3 -3
- package/src/tool/password-generator/i18n/de.ts +5 -5
- package/src/tool/password-generator/i18n/fr.ts +1 -1
- package/src/tool/password-generator/i18n/pl.ts +3 -3
- package/src/tool/password-generator/i18n/ru.ts +4 -4
- package/src/tool/password-generator/i18n/zh.ts +3 -3
- package/src/tool/routes/bibliography.ts +5 -5
- package/src/tool/routes/i18n/de.ts +1 -1
- package/src/tool/routes/i18n/fr.ts +3 -3
- package/src/tool/routes/i18n/ru.ts +3 -3
- package/src/tool/routes/i18n/zh.ts +1 -1
- package/src/tool/rule-of-three/bibliography.ts +2 -2
- package/src/tool/rule-of-three/i18n/de.ts +2 -2
- package/src/tool/rule-of-three/i18n/fr.ts +7 -7
- package/src/tool/rule-of-three/i18n/nl.ts +2 -2
- package/src/tool/rule-of-three/i18n/pl.ts +2 -2
- package/src/tool/rule-of-three/i18n/ru.ts +3 -3
- package/src/tool/rule-of-three/i18n/tr.ts +1 -1
- package/src/tool/rule-of-three/i18n/zh.ts +2 -2
- package/src/tool/seo-content-optimizer/i18n/fr.ts +3 -3
- package/src/tool/seo-content-optimizer/i18n/ru.ts +1 -1
- package/src/tool/speed-reader/i18n/de.ts +3 -3
- package/src/tool/speed-reader/i18n/en.ts +2 -2
- package/src/tool/speed-reader/i18n/fr.ts +9 -9
- package/src/tool/speed-reader/i18n/id.ts +2 -2
- package/src/tool/speed-reader/i18n/it.ts +2 -2
- package/src/tool/speed-reader/i18n/nl.ts +2 -2
- package/src/tool/speed-reader/i18n/pl.ts +3 -3
- package/src/tool/speed-reader/i18n/pt.ts +2 -2
- package/src/tool/speed-reader/i18n/ru.ts +10 -10
- package/src/tool/speed-reader/i18n/sv.ts +2 -2
- package/src/tool/speed-reader/i18n/zh.ts +4 -4
- package/src/tool/text-pixel-calculator/i18n/de.ts +2 -2
- package/src/tool/text-pixel-calculator/i18n/fr.ts +1 -1
- package/src/tool/text-pixel-calculator/i18n/pl.ts +3 -3
- package/src/tool/text-pixel-calculator/i18n/ru.ts +4 -4
- package/src/tool/text-pixel-calculator/i18n/zh.ts +3 -3
- package/src/tool/whatsapp-link/bibliography.ts +2 -2
- package/src/tool/whatsapp-link/i18n/de.ts +4 -4
- package/src/tool/whatsapp-link/i18n/es.ts +2 -2
- package/src/tool/whatsapp-link/i18n/fr.ts +2 -2
- package/src/tool/whatsapp-link/i18n/pl.ts +4 -4
- package/src/tool/whatsapp-link/i18n/ru.ts +5 -5
- package/src/tool/whatsapp-link/i18n/zh.ts +4 -4
- package/src/tool/whatsapp-link/whatsapp-link-generator.css +41 -4
|
@@ -110,7 +110,7 @@ export const content: ToolLocaleContent<SpeedReaderUI> = {
|
|
|
110
110
|
icon: 'mdi:speedometer-slow',
|
|
111
111
|
title: 'Kognitiv tystnad',
|
|
112
112
|
highlight: true,
|
|
113
|
-
description: 'Över 400-500 WPM tystnar din inre röst
|
|
113
|
+
description: 'Över 400-500 WPM tystnar din inre röst - den hinner inte med. Du slutar "höra" det du läser och börjar "se" rena betydelser och koncept. Detta är det ultimata flow-tillståndet.',
|
|
114
114
|
},
|
|
115
115
|
{
|
|
116
116
|
icon: 'mdi:brain',
|
|
@@ -132,7 +132,7 @@ export const content: ToolLocaleContent<SpeedReaderUI> = {
|
|
|
132
132
|
{
|
|
133
133
|
title: 'Nivå 2: Ljudvallen (400 till 500 WPM)',
|
|
134
134
|
highlight: true,
|
|
135
|
-
description: 'Det är här magin händer. Du kommer att känna obehag. Sänk inte farten när du missar ett ord
|
|
135
|
+
description: 'Det är här magin händer. Du kommer att känna obehag. Sänk inte farten när du missar ett ord - din hjärna kommer att lära sig att fylla i luckor från sammanhanget.',
|
|
136
136
|
points: ['Subvokalisering försvinner', 'Mentalt flow-tillstånd', 'Fördubbla din bashastighet'],
|
|
137
137
|
},
|
|
138
138
|
{
|
|
@@ -94,7 +94,7 @@ export const content: ToolLocaleContent<SpeedReaderUI> = {
|
|
|
94
94
|
},
|
|
95
95
|
{
|
|
96
96
|
type: 'tip',
|
|
97
|
-
html: '
|
|
97
|
+
html: '"RSVP 阅读不仅仅是读得更快。它是消除了文本和大脑之间的机械摩擦。"',
|
|
98
98
|
},
|
|
99
99
|
{ type: 'title', level: 3, text: '数据注入背后的科学' },
|
|
100
100
|
{
|
|
@@ -110,7 +110,7 @@ export const content: ToolLocaleContent<SpeedReaderUI> = {
|
|
|
110
110
|
icon: 'mdi:speedometer-slow',
|
|
111
111
|
title: '认知静默',
|
|
112
112
|
highlight: true,
|
|
113
|
-
description: '当速度高于 400-500 WPM
|
|
113
|
+
description: '当速度高于 400-500 WPM 时,您的内心声音会保持安静-它跟不上速度。您不再"听到"您所读的内容,而是开始"看到"纯粹的含义和概念。这是终极的心流状态。',
|
|
114
114
|
},
|
|
115
115
|
{
|
|
116
116
|
icon: 'mdi:brain',
|
|
@@ -126,13 +126,13 @@ export const content: ToolLocaleContent<SpeedReaderUI> = {
|
|
|
126
126
|
items: [
|
|
127
127
|
{
|
|
128
128
|
title: '级别 1:觉醒 (200 到 300 WPM)',
|
|
129
|
-
description: '
|
|
129
|
+
description: '您的正常阅读速度。习惯界面。放松脸部,让单词呈现在您面前。不要试图"捕捉"它们。',
|
|
130
130
|
points: ['适合初学者', '熟悉 ORP', '无眼部疲劳'],
|
|
131
131
|
},
|
|
132
132
|
{
|
|
133
133
|
title: '级别 2:音障 (400 到 500 WPM)',
|
|
134
134
|
highlight: true,
|
|
135
|
-
description: '
|
|
135
|
+
description: '这就是奇迹发生的地方。您会感到不适。错过单词时不要慢下来-您的大脑会学会根据上下文填补空白。',
|
|
136
136
|
points: ['默读消失', '精神心流状态', '两倍基础速度'],
|
|
137
137
|
},
|
|
138
138
|
{
|
|
@@ -30,7 +30,7 @@ const howToData = [
|
|
|
30
30
|
{ name: 'Text eingeben', text: 'Geben Sie den Text, den Sie messen möchten, in den Eingabebereich ein.' },
|
|
31
31
|
{ name: 'Schriftart konfigurieren', text: 'Legen Sie die Schriftfamilie, die Größe in Pixeln, das Gewicht und den Stil (kursiv) fest.' },
|
|
32
32
|
{ name: 'Ergebnis ablesen', text: 'Die Pixelbreite und die Zeichenanzahl werden in Echtzeit aktualisiert.' },
|
|
33
|
-
{ name: 'Wert kopieren', text: 'Klicken Sie auf
|
|
33
|
+
{ name: 'Wert kopieren', text: 'Klicken Sie auf "Breite kopieren", um die Pixelanzahl in die Zwischenablage zu speichern.' },
|
|
34
34
|
];
|
|
35
35
|
|
|
36
36
|
const faqSchema: WithContext<FAQPage> = {
|
|
@@ -96,7 +96,7 @@ export const content: ToolLocaleContent<TextPixelCalculatorUI> = {
|
|
|
96
96
|
{ type: 'title', level: 3, text: 'Warum das Zählen von Zeichen nicht ausreicht' },
|
|
97
97
|
{
|
|
98
98
|
type: 'paragraph',
|
|
99
|
-
html: 'Moderne Schriftarten sind <strong>proportional</strong>: Jedes Zeichen hat eine andere Breite. Ein
|
|
99
|
+
html: 'Moderne Schriftarten sind <strong>proportional</strong>: Jedes Zeichen hat eine andere Breite. Ein "W" kann dreimal mehr Platz einnehmen als ein "i". Die Anzahl der Zeichen sagt nichts über den tatsächlichen visuellen Raum aus, den der Text einnimmt.',
|
|
100
100
|
},
|
|
101
101
|
{
|
|
102
102
|
type: 'list',
|
|
@@ -96,7 +96,7 @@ export const content: ToolLocaleContent<TextPixelCalculatorUI> = {
|
|
|
96
96
|
{ type: 'title', level: 3, text: 'Pourquoi compter les caractères ne suffit pas' },
|
|
97
97
|
{
|
|
98
98
|
type: 'paragraph',
|
|
99
|
-
html: 'Les polices modernes sont <strong>proportionnelles</strong
|
|
99
|
+
html: 'Les polices modernes sont <strong>proportionnelles</strong>: chaque glyphe a une largeur différente. Un "W" peut occuper trois fois plus de place qu\'un "i". Le nombre de caractères ne vous dit rien sur l\'espace visuel réel occupé par le texte.',
|
|
100
100
|
},
|
|
101
101
|
{
|
|
102
102
|
type: 'list',
|
|
@@ -10,7 +10,7 @@ const faqData = [
|
|
|
10
10
|
},
|
|
11
11
|
{
|
|
12
12
|
question: 'Dlaczego szerokość w pikselach różni się między krojami pisma?',
|
|
13
|
-
answer: 'Większość czcionek jest proporcjonalna, co oznacza, że każdy znak ma inną szerokość. Na przykład wielka litera
|
|
13
|
+
answer: 'Większość czcionek jest proporcjonalna, co oznacza, że każdy znak ma inną szerokość. Na przykład wielka litera "M" jest zawsze szersza niż mała litera "i" w standardowej czcionce bezszeryfowej.',
|
|
14
14
|
},
|
|
15
15
|
{
|
|
16
16
|
question: 'Czy mierzenie znaków to to samo co mierzenie pikseli?',
|
|
@@ -30,7 +30,7 @@ const howToData = [
|
|
|
30
30
|
{ name: 'Wpisz tekst', text: 'Wpisz lub wklej tekst, który chcesz zmierzyć, w obszarze wejściowym.' },
|
|
31
31
|
{ name: 'Skonfiguruj czcionkę', text: 'Ustaw rodzinę czcionek, rozmiar w pikselach, wagę i to, czy ma być pochylona.' },
|
|
32
32
|
{ name: 'Odczytaj wynik', text: 'Szerokość w pikselach i liczba znaków są aktualizowane w czasie rzeczywistym.' },
|
|
33
|
-
{ name: 'Skopiuj wartość', text: 'Kliknij
|
|
33
|
+
{ name: 'Skopiuj wartość', text: 'Kliknij "Kopiuj szerokość", aby zapisać liczbę pikseli w schowku.' },
|
|
34
34
|
];
|
|
35
35
|
|
|
36
36
|
const faqSchema: WithContext<FAQPage> = {
|
|
@@ -96,7 +96,7 @@ export const content: ToolLocaleContent<TextPixelCalculatorUI> = {
|
|
|
96
96
|
{ type: 'title', level: 3, text: 'Dlaczego liczenie znaków nie wystarczy' },
|
|
97
97
|
{
|
|
98
98
|
type: 'paragraph',
|
|
99
|
-
html: 'Nowoczesne kroje pisma są <strong>proporcjonalne</strong>: każdy glif ma inną szerokość. Litera
|
|
99
|
+
html: 'Nowoczesne kroje pisma są <strong>proporcjonalne</strong>: każdy glif ma inną szerokość. Litera "W" może zajmować trzy razy więcej miejsca niż "i". Liczba znaków nic nie mówi o rzeczywistej przestrzeni wizualnej, jaką zajmuje tekst.',
|
|
100
100
|
},
|
|
101
101
|
{
|
|
102
102
|
type: 'list',
|
|
@@ -10,11 +10,11 @@ const faqData = [
|
|
|
10
10
|
},
|
|
11
11
|
{
|
|
12
12
|
question: 'Почему ширина в пикселях различается у разных шрифтов?',
|
|
13
|
-
answer: 'Большинство шрифтов являются пропорциональными, что означает, что каждый символ имеет разную ширину. Например, заглавная буква
|
|
13
|
+
answer: 'Большинство шрифтов являются пропорциональными, что означает, что каждый символ имеет разную ширину. Например, заглавная буква "M" всегда шире строчной "i" в стандартном шрифте без засечек.',
|
|
14
14
|
},
|
|
15
15
|
{
|
|
16
16
|
question: 'Равна ли длина в символах ширине в пикселях?',
|
|
17
|
-
answer: 'Нет. Количество символов дает вам длину строки, а измерение в пикселях
|
|
17
|
+
answer: 'Нет. Количество символов дает вам длину строки, а измерение в пикселях - визуальное пространство, которое она занимает. Это крайне важно для предотвращения переполнения контейнера текстом в веб-дизайне.',
|
|
18
18
|
},
|
|
19
19
|
{
|
|
20
20
|
question: 'Могу ли я использовать любой шрифт Google Fonts?',
|
|
@@ -30,7 +30,7 @@ const howToData = [
|
|
|
30
30
|
{ name: 'Введите текст', text: 'Введите или вставьте текст, который вы хотите измерить, в поле ввода.' },
|
|
31
31
|
{ name: 'Настройте шрифт', text: 'Укажите семейство шрифтов, размер в пикселях, насыщенность и начертание (курсив).' },
|
|
32
32
|
{ name: 'Получите результат', text: 'Ширина в пикселях и количество символов обновляются в режиме реального времени.' },
|
|
33
|
-
{ name: 'Скопируйте значение', text: 'Нажмите
|
|
33
|
+
{ name: 'Скопируйте значение', text: 'Нажмите "Копировать ширину", чтобы сохранить количество пикселей в буфер обмена.' },
|
|
34
34
|
];
|
|
35
35
|
|
|
36
36
|
const faqSchema: WithContext<FAQPage> = {
|
|
@@ -96,7 +96,7 @@ export const content: ToolLocaleContent<TextPixelCalculatorUI> = {
|
|
|
96
96
|
{ type: 'title', level: 3, text: 'Почему подсчета символов недостаточно' },
|
|
97
97
|
{
|
|
98
98
|
type: 'paragraph',
|
|
99
|
-
html: 'Современные шрифты являются <strong>пропорциональными</strong>: каждый глиф имеет разную ширину. Буква
|
|
99
|
+
html: 'Современные шрифты являются <strong>пропорциональными</strong>: каждый глиф имеет разную ширину. Буква "W" может занимать в три раза больше места, чем "i". Количество символов ничего не говорит вам о фактическом визуальном пространстве, которое занимает текст.',
|
|
100
100
|
},
|
|
101
101
|
{
|
|
102
102
|
type: 'list',
|
|
@@ -10,7 +10,7 @@ const faqData = [
|
|
|
10
10
|
},
|
|
11
11
|
{
|
|
12
12
|
question: '为什么不同字体的像素宽度不同?',
|
|
13
|
-
answer: '
|
|
13
|
+
answer: '大多数字体都是比例字体,这意味着每个字符都有不同的宽度。例如,在标准的无衬线字体中,大写字母"M"总是比小写字母"i"宽。',
|
|
14
14
|
},
|
|
15
15
|
{
|
|
16
16
|
question: '测量字符数和测量像素是一回事吗?',
|
|
@@ -30,7 +30,7 @@ const howToData = [
|
|
|
30
30
|
{ name: '输入文本', text: '在输入区域键入或粘贴您想要测量的文本。' },
|
|
31
31
|
{ name: '配置字体', text: '设置字体系列、像素大小、字重以及是否斜体。' },
|
|
32
32
|
{ name: '读取结果', text: '像素宽度和字符计数会进行实时更新。' },
|
|
33
|
-
{ name: '复制数值', text: '
|
|
33
|
+
{ name: '复制数值', text: '点击"复制宽度"将像素值保存到剪贴板。' },
|
|
34
34
|
];
|
|
35
35
|
|
|
36
36
|
const faqSchema: WithContext<FAQPage> = {
|
|
@@ -96,7 +96,7 @@ export const content: ToolLocaleContent<TextPixelCalculatorUI> = {
|
|
|
96
96
|
{ type: 'title', level: 3, text: '为什么只计算字符数是不够的' },
|
|
97
97
|
{
|
|
98
98
|
type: 'paragraph',
|
|
99
|
-
html: '现代字体是<strong>比例字体</strong
|
|
99
|
+
html: '现代字体是<strong>比例字体</strong>:每个字形都有不同的宽度。一个"W"占用的空间可能是"i"的三倍。字符数无法告诉您文本实际占用的视觉空间。',
|
|
100
100
|
},
|
|
101
101
|
{
|
|
102
102
|
type: 'list',
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { BibliographyEntry } from '../../types';
|
|
2
2
|
|
|
3
3
|
export const bibliography: BibliographyEntry[] = [
|
|
4
|
-
{ name: 'How to use the click to chat feature
|
|
5
|
-
{ name: 'API Click to chat: parameters and formats
|
|
4
|
+
{ name: 'How to use the click to chat feature - WhatsApp Help Center', url: 'https://faq.whatsapp.com/591339899867293' },
|
|
5
|
+
{ name: 'API Click to chat: parameters and formats - WhatsApp', url: 'https://faq.whatsapp.com/425559092497645' },
|
|
6
6
|
];
|
|
@@ -14,7 +14,7 @@ const faqData = [
|
|
|
14
14
|
},
|
|
15
15
|
{
|
|
16
16
|
question: 'Wie verwende ich den generierten QR-Code?',
|
|
17
|
-
answer: 'Sobald ein gültiger Link generiert wurde, erscheint die Schaltfläche
|
|
17
|
+
answer: 'Sobald ein gültiger Link generiert wurde, erscheint die Schaltfläche "QR anzeigen". Der QR-Code enthält Ihre Link-URL. Klicken Sie mit der rechten Maustaste darauf und wählen Sie "Bild speichern unter", um eine saubere, hochauflösende Datei für Visitenkarten, Poster oder soziale Medien herunterzuladen.',
|
|
18
18
|
},
|
|
19
19
|
{
|
|
20
20
|
question: 'Wo landen meine Daten?',
|
|
@@ -92,13 +92,13 @@ export const content: ToolLocaleContent<WhatsappLinkUI> = {
|
|
|
92
92
|
{ type: 'title', level: 3, text: 'Wofür ist der wa.me WhatsApp Shortener gedacht?' },
|
|
93
93
|
{
|
|
94
94
|
type: 'paragraph',
|
|
95
|
-
html: 'WhatsApp bietet eine API namens
|
|
95
|
+
html: 'WhatsApp bietet eine API namens "Click to Chat" an. Über eine spezielle URL kann jeder Nutzer einen neuen Chat mit Ihnen eröffnen, ohne Sie vorher als Kontakt hinzufügen zu müssen, sowohl vom Handy als auch von WhatsApp Web aus.',
|
|
96
96
|
},
|
|
97
97
|
{
|
|
98
98
|
type: 'list',
|
|
99
99
|
items: [
|
|
100
|
-
'<strong>Mehr Konversionen:</strong> Ein
|
|
101
|
-
'<strong>Vorformulierte Nachricht:</strong> Der Nutzer drückt einfach auf
|
|
100
|
+
'<strong>Mehr Konversionen:</strong> Ein "Kontakt über WhatsApp"-Button in Ihrem Shop reduziert Hürden und steigert die Verkäufe.',
|
|
101
|
+
'<strong>Vorformulierte Nachricht:</strong> Der Nutzer drückt einfach auf "Senden". Beispiel: "Hallo! Ich komme von Instagram und möchte das Angebot in Anspruch nehmen."',
|
|
102
102
|
'<strong>Automatischer QR-Code:</strong> Laden Sie den QR-Code für Visitenkarten, Poster oder Social-Media-Posts herunter.',
|
|
103
103
|
],
|
|
104
104
|
},
|
|
@@ -89,7 +89,7 @@ export const content: ToolLocaleContent<WhatsappLinkUI> = {
|
|
|
89
89
|
type: 'paragraph',
|
|
90
90
|
html: '¿Necesitas que clientes o seguidores te contacten por WhatsApp sin tener que guardar tu número? Nuestro <strong>creador de enlaces wa.me</strong> soluciona este problema generando un link que abre un chat directo al instante, sin pasos previos.',
|
|
91
91
|
},
|
|
92
|
-
{ type: 'title', level: 3, text: '¿Para qué sirve el acortador
|
|
92
|
+
{ type: 'title', level: 3, text: '¿Para qué sirve el acortador de enlaces de WhatsApp?' },
|
|
93
93
|
{
|
|
94
94
|
type: 'paragraph',
|
|
95
95
|
html: 'WhatsApp dispone de una API llamada "Clic para chatear". Mediante una URL especial, cualquier usuario puede abrir un chat nuevo contigo sin necesidad de añadirte como contacto previamente, tanto desde móvil como desde WhatsApp Web.',
|
|
@@ -110,7 +110,7 @@ export const content: ToolLocaleContent<WhatsappLinkUI> = {
|
|
|
110
110
|
{
|
|
111
111
|
type: 'code',
|
|
112
112
|
ariaLabel: 'Formato de URL de WhatsApp',
|
|
113
|
-
code: 'https://wa.me/34XXXXXXXXX\
|
|
113
|
+
code: 'https://wa.me/34XXXXXXXXX\n(Para anadir un mensaje, usa el parametro text en la URL)',
|
|
114
114
|
},
|
|
115
115
|
{ type: 'title', level: 3, text: 'Privacidad garantizada y procesamiento local' },
|
|
116
116
|
{
|
|
@@ -97,8 +97,8 @@ export const content: ToolLocaleContent<WhatsappLinkUI> = {
|
|
|
97
97
|
{
|
|
98
98
|
type: 'list',
|
|
99
99
|
items: [
|
|
100
|
-
|
|
101
|
-
|
|
100
|
+
`<strong>Plus de conversions:</strong> Un bouton " Contacter via WhatsApp " sur votre boutique réduit la friction et augmente les ventes.`,
|
|
101
|
+
`<strong>Message prédéfini:</strong> L'utilisateur appuie juste sur " Envoyer ". Exemple: " Bonjour ! Je viens d'Instagram et veux profiter de l'offre. "`,
|
|
102
102
|
"<strong>Code QR automatique :</strong> Téléchargez le QR pour cartes de visite, affiches ou publications sur les réseaux.",
|
|
103
103
|
],
|
|
104
104
|
},
|
|
@@ -14,7 +14,7 @@ const faqData = [
|
|
|
14
14
|
},
|
|
15
15
|
{
|
|
16
16
|
question: 'Jak korzystać z wygenerowanego kodu QR?',
|
|
17
|
-
answer: 'Po wygenerowaniu prawidłowego linku pojawi się przycisk
|
|
17
|
+
answer: 'Po wygenerowaniu prawidłowego linku pojawi się przycisk "Pokaż QR". Kod QR zawiera adres URL Twojego linku. Kliknij go prawym przyciskiem myszy i wybierz "Zapisz obraz jako", aby pobrać czysty plik o wysokiej rozdzielczości do wizytówek, plakatów lub mediów społecznościowych.',
|
|
18
18
|
},
|
|
19
19
|
{
|
|
20
20
|
question: 'Gdzie trafiają moje dane?',
|
|
@@ -92,13 +92,13 @@ export const content: ToolLocaleContent<WhatsappLinkUI> = {
|
|
|
92
92
|
{ type: 'title', level: 3, text: 'Do czego służy skracacz WhatsApp wa.me?' },
|
|
93
93
|
{
|
|
94
94
|
type: 'paragraph',
|
|
95
|
-
html: 'WhatsApp oferuje interfejs API o nazwie
|
|
95
|
+
html: 'WhatsApp oferuje interfejs API o nazwie "Kliknij i rozmawiaj". Za pomocą specjalnego adresu URL każdy użytkownik może otworzyć z Tobą nowy czat bez konieczności dodawania Cię najpierw do kontaktów, zarówno z telefonu komórkowego, jak i przez WhatsApp Web.',
|
|
96
96
|
},
|
|
97
97
|
{
|
|
98
98
|
type: 'list',
|
|
99
99
|
items: [
|
|
100
|
-
'<strong>Większa konwersja:</strong> Przycisk
|
|
101
|
-
'<strong>Wstępnie wypełniona wiadomość:</strong> Użytkownik po prostu naciska
|
|
100
|
+
'<strong>Większa konwersja:</strong> Przycisk "Kontakt przez WhatsApp" w Twoim sklepie zmniejsza opory i zwiększa sprzedaż.',
|
|
101
|
+
'<strong>Wstępnie wypełniona wiadomość:</strong> Użytkownik po prostu naciska "Wyślij". Przykład: "Cześć! Piszę z Instagrama i chcę skorzystać z oferty".',
|
|
102
102
|
'<strong>Automatyczny kod QR:</strong> Pobierz kod QR do wizytówek, plakatów lub postów w mediach społecznościowych.',
|
|
103
103
|
],
|
|
104
104
|
},
|
|
@@ -14,7 +14,7 @@ const faqData = [
|
|
|
14
14
|
},
|
|
15
15
|
{
|
|
16
16
|
question: 'Как использовать сгенерированный QR-код?',
|
|
17
|
-
answer: 'Как только будет создана действительная ссылка, появится кнопка
|
|
17
|
+
answer: 'Как только будет создана действительная ссылка, появится кнопка "Показать QR". QR-код содержит URL-адрес вашей ссылки. Нажмите на него правой кнопкой мыши и выберите "Сохранить изображение как", чтобы загрузить чистый файл в высоком разрешении для визиток, плакатов или социальных сетей.',
|
|
18
18
|
},
|
|
19
19
|
{
|
|
20
20
|
question: 'Куда попадают мои данные?',
|
|
@@ -24,7 +24,7 @@ const faqData = [
|
|
|
24
24
|
|
|
25
25
|
const howToData = [
|
|
26
26
|
{ name: 'Выберите префикс', text: 'Выберите код своей страны из выпадающего списка и введите свой номер телефона без префикса.' },
|
|
27
|
-
{ name: 'Добавьте необязательное сообщение', text: 'Напишите предзаполненный текст, который появится, когда кто-то откроет ссылку и нажмет
|
|
27
|
+
{ name: 'Добавьте необязательное сообщение', text: 'Напишите предзаполненный текст, который появится, когда кто-то откроет ссылку и нажмет "Отправить".' },
|
|
28
28
|
{ name: 'Создайте ссылку', text: 'Нажмите зеленую кнопку, чтобы получить прямую ссылку wa.me, готовую к отправке.' },
|
|
29
29
|
{ name: 'Поделитесь или распечатайте QR', text: 'Скопируйте ссылку, проверьте чат или скачайте QR-код для визиток и печати.' },
|
|
30
30
|
];
|
|
@@ -92,13 +92,13 @@ export const content: ToolLocaleContent<WhatsappLinkUI> = {
|
|
|
92
92
|
{ type: 'title', level: 3, text: 'Для чего нужен сокращатель WhatsApp wa.me?' },
|
|
93
93
|
{
|
|
94
94
|
type: 'paragraph',
|
|
95
|
-
html: 'WhatsApp предлагает API под названием
|
|
95
|
+
html: 'WhatsApp предлагает API под названием "Прямая связь". Используя специальный URL-адрес, любой пользователь может начать с вами новый чат, не добавляя вас в контакты, как с мобильного телефона, так и через WhatsApp Web.',
|
|
96
96
|
},
|
|
97
97
|
{
|
|
98
98
|
type: 'list',
|
|
99
99
|
items: [
|
|
100
|
-
'<strong>Больше конверсий:</strong> кнопка
|
|
101
|
-
'<strong>Предзаполненное сообщение:</strong> пользователю достаточно нажать
|
|
100
|
+
'<strong>Больше конверсий:</strong> кнопка "Связаться через WhatsApp" в вашем магазине снижает барьеры и увеличивает продажи.',
|
|
101
|
+
'<strong>Предзаполненное сообщение:</strong> пользователю достаточно нажать "Отправить". Пример: "Здравствуйте! Я с Instagram и хочу воспользоваться предложением".',
|
|
102
102
|
'<strong>Автоматический QR-код:</strong> скачайте QR-код для визиток, плакатов или постов в социальных сетях.',
|
|
103
103
|
],
|
|
104
104
|
},
|
|
@@ -14,7 +14,7 @@ const faqData = [
|
|
|
14
14
|
},
|
|
15
15
|
{
|
|
16
16
|
question: '如何使用生成的二维码?',
|
|
17
|
-
answer: '
|
|
17
|
+
answer: '生成有效链接后,将出现"显示二维码"按钮。二维码包含您的链接 URL。右键点击二维码并选择"图片另存为",即可下载用于名片、海报或社交媒体的高分辨率图片。',
|
|
18
18
|
},
|
|
19
19
|
{
|
|
20
20
|
question: '我的数据会流向何处?',
|
|
@@ -92,13 +92,13 @@ export const content: ToolLocaleContent<WhatsappLinkUI> = {
|
|
|
92
92
|
{ type: 'title', level: 3, text: 'wa.me WhatsApp 短链接有什么用?' },
|
|
93
93
|
{
|
|
94
94
|
type: 'paragraph',
|
|
95
|
-
html: 'WhatsApp
|
|
95
|
+
html: 'WhatsApp 提供了一个名为"点击聊天"的 API。通过使用特殊的 URL,任何用户都可以与您开启新聊天,而无需先将您添加为联系人,无论是在手机上还是通过 WhatsApp 网页版。',
|
|
96
96
|
},
|
|
97
97
|
{
|
|
98
98
|
type: 'list',
|
|
99
99
|
items: [
|
|
100
|
-
'<strong>提高转化率:</strong
|
|
101
|
-
'<strong>预填消息:</strong
|
|
100
|
+
'<strong>提高转化率:</strong>在您的商店中添加"通过 WhatsApp 联系"按钮可减少摩擦并增加销售额。',
|
|
101
|
+
'<strong>预填消息:</strong>用户只需按"发送"。例如:"您好!我从 Instagram 过来,想领取优惠。"',
|
|
102
102
|
'<strong>自动二维码:</strong>下载二维码用于名片、海报或社交媒体贴子。',
|
|
103
103
|
],
|
|
104
104
|
},
|
|
@@ -27,6 +27,13 @@
|
|
|
27
27
|
display: flex;
|
|
28
28
|
flex-direction: column;
|
|
29
29
|
gap: 1.25rem;
|
|
30
|
+
box-sizing: border-box;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.wl-root *,
|
|
34
|
+
.wl-root *::before,
|
|
35
|
+
.wl-root *::after {
|
|
36
|
+
box-sizing: border-box;
|
|
30
37
|
}
|
|
31
38
|
|
|
32
39
|
.theme-dark .wl-root {
|
|
@@ -50,7 +57,9 @@
|
|
|
50
57
|
background: var(--wl-panel-bg);
|
|
51
58
|
border: 1px solid var(--wl-panel-border);
|
|
52
59
|
border-radius: 1.25rem;
|
|
53
|
-
|
|
60
|
+
width: 100%;
|
|
61
|
+
min-width: 0;
|
|
62
|
+
padding: clamp(1rem, 4vw, 1.5rem);
|
|
54
63
|
display: flex;
|
|
55
64
|
flex-direction: column;
|
|
56
65
|
gap: 1.25rem;
|
|
@@ -73,11 +82,14 @@
|
|
|
73
82
|
.wl-phone-row {
|
|
74
83
|
display: flex;
|
|
75
84
|
gap: 0.5rem;
|
|
85
|
+
width: 100%;
|
|
86
|
+
min-width: 0;
|
|
76
87
|
}
|
|
77
88
|
|
|
78
89
|
.wl-prefix-select {
|
|
79
90
|
flex-shrink: 0;
|
|
80
|
-
width: 7.5rem;
|
|
91
|
+
width: min(7.5rem, 42%);
|
|
92
|
+
min-width: 6.75rem;
|
|
81
93
|
background: var(--wl-field-bg);
|
|
82
94
|
border: 1px solid var(--wl-field-border);
|
|
83
95
|
border-radius: 0.75rem;
|
|
@@ -96,6 +108,8 @@
|
|
|
96
108
|
|
|
97
109
|
.wl-phone-input {
|
|
98
110
|
flex: 1;
|
|
111
|
+
min-width: 0;
|
|
112
|
+
width: 100%;
|
|
99
113
|
background: var(--wl-field-bg);
|
|
100
114
|
border: 1px solid var(--wl-field-border);
|
|
101
115
|
border-radius: 0.75rem;
|
|
@@ -183,7 +197,9 @@
|
|
|
183
197
|
background: var(--wl-result-bg);
|
|
184
198
|
border: 1px solid var(--wl-result-border);
|
|
185
199
|
border-radius: 1.25rem;
|
|
186
|
-
|
|
200
|
+
width: 100%;
|
|
201
|
+
min-width: 0;
|
|
202
|
+
padding: clamp(1rem, 4vw, 1.5rem);
|
|
187
203
|
display: flex;
|
|
188
204
|
flex-direction: column;
|
|
189
205
|
gap: 0.75rem;
|
|
@@ -205,10 +221,12 @@
|
|
|
205
221
|
display: flex;
|
|
206
222
|
align-items: center;
|
|
207
223
|
gap: 0.625rem;
|
|
224
|
+
min-width: 0;
|
|
208
225
|
}
|
|
209
226
|
|
|
210
227
|
.wl-link-display {
|
|
211
228
|
flex: 1;
|
|
229
|
+
min-width: 0;
|
|
212
230
|
font-size: 0.8rem;
|
|
213
231
|
font-weight: 500;
|
|
214
232
|
color: var(--wl-link-color);
|
|
@@ -257,6 +275,25 @@
|
|
|
257
275
|
}
|
|
258
276
|
|
|
259
277
|
.wl-qr-canvas {
|
|
278
|
+
max-width: 100%;
|
|
279
|
+
height: auto;
|
|
260
280
|
border-radius: 0.75rem;
|
|
261
281
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
|
|
262
|
-
}
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
@media (max-width: 24rem) {
|
|
285
|
+
.wl-phone-row,
|
|
286
|
+
.wl-result-row {
|
|
287
|
+
flex-direction: column;
|
|
288
|
+
align-items: stretch;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
.wl-prefix-select {
|
|
292
|
+
width: 100%;
|
|
293
|
+
min-width: 0;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
.wl-result-actions {
|
|
297
|
+
justify-content: flex-end;
|
|
298
|
+
}
|
|
299
|
+
}
|