@jjlmoya/utils-tools 1.2.0 → 1.4.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.
Files changed (180) hide show
  1. package/package.json +2 -1
  2. package/src/category/i18n/de.ts +172 -0
  3. package/src/category/i18n/id.ts +172 -0
  4. package/src/category/i18n/it.ts +172 -0
  5. package/src/category/i18n/ja.ts +172 -0
  6. package/src/category/i18n/ko.ts +172 -0
  7. package/src/category/i18n/nl.ts +172 -0
  8. package/src/category/i18n/pl.ts +172 -0
  9. package/src/category/i18n/pt.ts +172 -0
  10. package/src/category/i18n/ru.ts +172 -0
  11. package/src/category/i18n/sv.ts +172 -0
  12. package/src/category/i18n/tr.ts +172 -0
  13. package/src/category/i18n/zh.ts +172 -0
  14. package/src/category/index.ts +13 -1
  15. package/src/tests/i18n_coverage.test.ts +36 -0
  16. package/src/tests/locale_completeness.test.ts +1 -1
  17. package/src/tests/slug_language_code_format.test.ts +23 -0
  18. package/src/tests/slug_uniqueness.test.ts +81 -0
  19. package/src/tests/title_quality.test.ts +0 -1
  20. package/src/tool/date-diff-calculator/i18n/de.ts +132 -0
  21. package/src/tool/date-diff-calculator/i18n/fr.ts +1 -1
  22. package/src/tool/date-diff-calculator/i18n/id.ts +132 -0
  23. package/src/tool/date-diff-calculator/i18n/it.ts +132 -0
  24. package/src/tool/date-diff-calculator/i18n/ja.ts +132 -0
  25. package/src/tool/date-diff-calculator/i18n/ko.ts +132 -0
  26. package/src/tool/date-diff-calculator/i18n/nl.ts +132 -0
  27. package/src/tool/date-diff-calculator/i18n/pl.ts +132 -0
  28. package/src/tool/date-diff-calculator/i18n/pt.ts +132 -0
  29. package/src/tool/date-diff-calculator/i18n/ru.ts +132 -0
  30. package/src/tool/date-diff-calculator/i18n/sv.ts +132 -0
  31. package/src/tool/date-diff-calculator/i18n/tr.ts +132 -0
  32. package/src/tool/date-diff-calculator/i18n/zh.ts +132 -0
  33. package/src/tool/date-diff-calculator/index.ts +12 -0
  34. package/src/tool/drive-direct-link/i18n/de.ts +118 -0
  35. package/src/tool/drive-direct-link/i18n/id.ts +118 -0
  36. package/src/tool/drive-direct-link/i18n/it.ts +118 -0
  37. package/src/tool/drive-direct-link/i18n/ja.ts +118 -0
  38. package/src/tool/drive-direct-link/i18n/ko.ts +118 -0
  39. package/src/tool/drive-direct-link/i18n/nl.ts +118 -0
  40. package/src/tool/drive-direct-link/i18n/pl.ts +118 -0
  41. package/src/tool/drive-direct-link/i18n/pt.ts +118 -0
  42. package/src/tool/drive-direct-link/i18n/ru.ts +118 -0
  43. package/src/tool/drive-direct-link/i18n/sv.ts +118 -0
  44. package/src/tool/drive-direct-link/i18n/tr.ts +118 -0
  45. package/src/tool/drive-direct-link/i18n/zh.ts +118 -0
  46. package/src/tool/drive-direct-link/index.ts +12 -0
  47. package/src/tool/email-list-cleaner/i18n/de.ts +140 -0
  48. package/src/tool/email-list-cleaner/i18n/fr.ts +1 -1
  49. package/src/tool/email-list-cleaner/i18n/id.ts +140 -0
  50. package/src/tool/email-list-cleaner/i18n/it.ts +140 -0
  51. package/src/tool/email-list-cleaner/i18n/ja.ts +140 -0
  52. package/src/tool/email-list-cleaner/i18n/ko.ts +140 -0
  53. package/src/tool/email-list-cleaner/i18n/nl.ts +140 -0
  54. package/src/tool/email-list-cleaner/i18n/pl.ts +140 -0
  55. package/src/tool/email-list-cleaner/i18n/pt.ts +140 -0
  56. package/src/tool/email-list-cleaner/i18n/ru.ts +140 -0
  57. package/src/tool/email-list-cleaner/i18n/sv.ts +140 -0
  58. package/src/tool/email-list-cleaner/i18n/tr.ts +140 -0
  59. package/src/tool/email-list-cleaner/i18n/zh.ts +140 -0
  60. package/src/tool/email-list-cleaner/index.ts +12 -0
  61. package/src/tool/env-badge-spain/i18n/de.ts +153 -0
  62. package/src/tool/env-badge-spain/i18n/es.ts +1 -1
  63. package/src/tool/env-badge-spain/i18n/fr.ts +1 -1
  64. package/src/tool/env-badge-spain/i18n/id.ts +153 -0
  65. package/src/tool/env-badge-spain/i18n/it.ts +153 -0
  66. package/src/tool/env-badge-spain/i18n/ja.ts +153 -0
  67. package/src/tool/env-badge-spain/i18n/ko.ts +153 -0
  68. package/src/tool/env-badge-spain/i18n/nl.ts +153 -0
  69. package/src/tool/env-badge-spain/i18n/pl.ts +153 -0
  70. package/src/tool/env-badge-spain/i18n/pt.ts +153 -0
  71. package/src/tool/env-badge-spain/i18n/ru.ts +153 -0
  72. package/src/tool/env-badge-spain/i18n/sv.ts +153 -0
  73. package/src/tool/env-badge-spain/i18n/tr.ts +153 -0
  74. package/src/tool/env-badge-spain/i18n/zh.ts +153 -0
  75. package/src/tool/env-badge-spain/index.ts +12 -0
  76. package/src/tool/morse-beacon/i18n/de.ts +157 -0
  77. package/src/tool/morse-beacon/i18n/id.ts +157 -0
  78. package/src/tool/morse-beacon/i18n/it.ts +157 -0
  79. package/src/tool/morse-beacon/i18n/ja.ts +157 -0
  80. package/src/tool/morse-beacon/i18n/ko.ts +157 -0
  81. package/src/tool/morse-beacon/i18n/nl.ts +157 -0
  82. package/src/tool/morse-beacon/i18n/pl.ts +157 -0
  83. package/src/tool/morse-beacon/i18n/pt.ts +157 -0
  84. package/src/tool/morse-beacon/i18n/ru.ts +157 -0
  85. package/src/tool/morse-beacon/i18n/sv.ts +157 -0
  86. package/src/tool/morse-beacon/i18n/tr.ts +157 -0
  87. package/src/tool/morse-beacon/i18n/zh.ts +157 -0
  88. package/src/tool/morse-beacon/index.ts +13 -1
  89. package/src/tool/password-generator/i18n/de.ts +166 -0
  90. package/src/tool/password-generator/i18n/fr.ts +1 -1
  91. package/src/tool/password-generator/i18n/id.ts +166 -0
  92. package/src/tool/password-generator/i18n/it.ts +166 -0
  93. package/src/tool/password-generator/i18n/ja.ts +166 -0
  94. package/src/tool/password-generator/i18n/ko.ts +166 -0
  95. package/src/tool/password-generator/i18n/nl.ts +166 -0
  96. package/src/tool/password-generator/i18n/pl.ts +166 -0
  97. package/src/tool/password-generator/i18n/pt.ts +166 -0
  98. package/src/tool/password-generator/i18n/ru.ts +166 -0
  99. package/src/tool/password-generator/i18n/sv.ts +166 -0
  100. package/src/tool/password-generator/i18n/tr.ts +166 -0
  101. package/src/tool/password-generator/i18n/zh.ts +166 -0
  102. package/src/tool/password-generator/index.ts +13 -1
  103. package/src/tool/routes/i18n/de.ts +157 -0
  104. package/src/tool/routes/i18n/id.ts +157 -0
  105. package/src/tool/routes/i18n/it.ts +157 -0
  106. package/src/tool/routes/i18n/ja.ts +157 -0
  107. package/src/tool/routes/i18n/ko.ts +157 -0
  108. package/src/tool/routes/i18n/nl.ts +157 -0
  109. package/src/tool/routes/i18n/pl.ts +157 -0
  110. package/src/tool/routes/i18n/pt.ts +157 -0
  111. package/src/tool/routes/i18n/ru.ts +157 -0
  112. package/src/tool/routes/i18n/sv.ts +157 -0
  113. package/src/tool/routes/i18n/tr.ts +157 -0
  114. package/src/tool/routes/i18n/zh.ts +157 -0
  115. package/src/tool/routes/index.ts +13 -1
  116. package/src/tool/rule-of-three/i18n/de.ts +171 -0
  117. package/src/tool/rule-of-three/i18n/id.ts +171 -0
  118. package/src/tool/rule-of-three/i18n/it.ts +171 -0
  119. package/src/tool/rule-of-three/i18n/ja.ts +171 -0
  120. package/src/tool/rule-of-three/i18n/ko.ts +171 -0
  121. package/src/tool/rule-of-three/i18n/nl.ts +171 -0
  122. package/src/tool/rule-of-three/i18n/pl.ts +171 -0
  123. package/src/tool/rule-of-three/i18n/pt.ts +171 -0
  124. package/src/tool/rule-of-three/i18n/ru.ts +171 -0
  125. package/src/tool/rule-of-three/i18n/sv.ts +171 -0
  126. package/src/tool/rule-of-three/i18n/tr.ts +171 -0
  127. package/src/tool/rule-of-three/i18n/zh.ts +171 -0
  128. package/src/tool/rule-of-three/index.ts +13 -1
  129. package/src/tool/seo-content-optimizer/i18n/de.ts +136 -0
  130. package/src/tool/seo-content-optimizer/i18n/id.ts +136 -0
  131. package/src/tool/seo-content-optimizer/i18n/it.ts +136 -0
  132. package/src/tool/seo-content-optimizer/i18n/ja.ts +136 -0
  133. package/src/tool/seo-content-optimizer/i18n/ko.ts +136 -0
  134. package/src/tool/seo-content-optimizer/i18n/nl.ts +136 -0
  135. package/src/tool/seo-content-optimizer/i18n/pl.ts +136 -0
  136. package/src/tool/seo-content-optimizer/i18n/pt.ts +136 -0
  137. package/src/tool/seo-content-optimizer/i18n/ru.ts +136 -0
  138. package/src/tool/seo-content-optimizer/i18n/sv.ts +136 -0
  139. package/src/tool/seo-content-optimizer/i18n/tr.ts +136 -0
  140. package/src/tool/seo-content-optimizer/i18n/zh.ts +136 -0
  141. package/src/tool/seo-content-optimizer/index.ts +12 -0
  142. package/src/tool/speed-reader/i18n/de.ts +152 -0
  143. package/src/tool/speed-reader/i18n/id.ts +152 -0
  144. package/src/tool/speed-reader/i18n/it.ts +152 -0
  145. package/src/tool/speed-reader/i18n/ja.ts +152 -0
  146. package/src/tool/speed-reader/i18n/ko.ts +152 -0
  147. package/src/tool/speed-reader/i18n/nl.ts +152 -0
  148. package/src/tool/speed-reader/i18n/pl.ts +152 -0
  149. package/src/tool/speed-reader/i18n/pt.ts +152 -0
  150. package/src/tool/speed-reader/i18n/ru.ts +152 -0
  151. package/src/tool/speed-reader/i18n/sv.ts +152 -0
  152. package/src/tool/speed-reader/i18n/tr.ts +152 -0
  153. package/src/tool/speed-reader/i18n/zh.ts +152 -0
  154. package/src/tool/speed-reader/index.ts +12 -0
  155. package/src/tool/text-pixel-calculator/i18n/de.ts +133 -0
  156. package/src/tool/text-pixel-calculator/i18n/id.ts +133 -0
  157. package/src/tool/text-pixel-calculator/i18n/it.ts +133 -0
  158. package/src/tool/text-pixel-calculator/i18n/ja.ts +133 -0
  159. package/src/tool/text-pixel-calculator/i18n/ko.ts +133 -0
  160. package/src/tool/text-pixel-calculator/i18n/nl.ts +133 -0
  161. package/src/tool/text-pixel-calculator/i18n/pl.ts +133 -0
  162. package/src/tool/text-pixel-calculator/i18n/pt.ts +133 -0
  163. package/src/tool/text-pixel-calculator/i18n/ru.ts +133 -0
  164. package/src/tool/text-pixel-calculator/i18n/sv.ts +133 -0
  165. package/src/tool/text-pixel-calculator/i18n/tr.ts +133 -0
  166. package/src/tool/text-pixel-calculator/i18n/zh.ts +133 -0
  167. package/src/tool/text-pixel-calculator/index.ts +12 -0
  168. package/src/tool/whatsapp-link/i18n/de.ts +128 -0
  169. package/src/tool/whatsapp-link/i18n/id.ts +128 -0
  170. package/src/tool/whatsapp-link/i18n/it.ts +128 -0
  171. package/src/tool/whatsapp-link/i18n/ja.ts +128 -0
  172. package/src/tool/whatsapp-link/i18n/ko.ts +128 -0
  173. package/src/tool/whatsapp-link/i18n/nl.ts +128 -0
  174. package/src/tool/whatsapp-link/i18n/pl.ts +128 -0
  175. package/src/tool/whatsapp-link/i18n/pt.ts +128 -0
  176. package/src/tool/whatsapp-link/i18n/ru.ts +128 -0
  177. package/src/tool/whatsapp-link/i18n/sv.ts +128 -0
  178. package/src/tool/whatsapp-link/i18n/tr.ts +128 -0
  179. package/src/tool/whatsapp-link/i18n/zh.ts +128 -0
  180. package/src/tool/whatsapp-link/index.ts +12 -0
@@ -0,0 +1,128 @@
1
+ import type { ToolLocaleContent } from '../../../types';
2
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
3
+ import type { WhatsappLinkUI } from '../ui';
4
+
5
+ const faqData = [
6
+ {
7
+ question: 'Как создать ссылку на WhatsApp?',
8
+ answer: 'Чтобы создать ссылку, введите свой номер мобильного телефона, включая код страны. Например, для Испании введите сначала 34, для России 7, а затем свой местный номер. Вы можете добавить необязательное сообщение, и инструмент создаст готовую к копированию ссылку wa.me.',
9
+ },
10
+ {
11
+ question: 'Можно ли добавить длинное предзаполненное сообщение?',
12
+ answer: 'Да. Вы можете прикрепить сообщение, которое автоматически появится в поле чата, когда кто-то нажмет на вашу ссылку. Инструмент использует URL-кодирование для поддержки пробелов, акцентов и эмодзи без повреждения URL-адреса.',
13
+ },
14
+ {
15
+ question: 'Как использовать сгенерированный QR-код?',
16
+ answer: 'Как только будет создана действительная ссылка, появится кнопка «Показать QR». QR-код содержит URL-адрес вашей ссылки. Нажмите на него правой кнопкой мыши и выберите «Сохранить изображение как», чтобы загрузить чистый файл в высоком разрешении для визиток, плакатов или социальных сетей.',
17
+ },
18
+ {
19
+ question: 'Куда попадают мои данные?',
20
+ answer: 'Генератор обрабатывает все на стороне клиента, прямо в вашем браузере. Ваш номер телефона и предзаполненное сообщение никогда не отправляются на сервер и не сохраняются в какой-либо базе данных.',
21
+ },
22
+ ];
23
+
24
+ const howToData = [
25
+ { name: 'Выберите префикс', text: 'Выберите код своей страны из выпадающего списка и введите свой номер телефона без префикса.' },
26
+ { name: 'Добавьте необязательное сообщение', text: 'Напишите предзаполненный текст, который появится, когда кто-то откроет ссылку и нажмет «Отправить».' },
27
+ { name: 'Создайте ссылку', text: 'Нажмите зеленую кнопку, чтобы получить прямую ссылку wa.me, готовую к отправке.' },
28
+ { name: 'Поделитесь или распечатайте QR', text: 'Скопируйте ссылку, проверьте чат или скачайте QR-код для визиток и печати.' },
29
+ ];
30
+
31
+ const faqSchema: WithContext<FAQPage> = {
32
+ '@context': 'https://schema.org',
33
+ '@type': 'FAQPage',
34
+ mainEntity: faqData.map((item) => ({
35
+ '@type': 'Question',
36
+ name: item.question,
37
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
38
+ })),
39
+ };
40
+
41
+ const howToSchema: WithContext<HowTo> = {
42
+ '@context': 'https://schema.org',
43
+ '@type': 'HowTo',
44
+ name: 'Как создать прямую ссылку на WhatsApp',
45
+ step: howToData.map((s) => ({ '@type': 'HowToStep', name: s.name, text: s.text })),
46
+ };
47
+
48
+ const appSchema: WithContext<SoftwareApplication> = {
49
+ '@context': 'https://schema.org',
50
+ '@type': 'SoftwareApplication',
51
+ name: 'Генератор ссылок WhatsApp',
52
+ applicationCategory: 'UtilitiesApplication',
53
+ operatingSystem: 'Web',
54
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
55
+ description: 'Создавайте прямые ссылки для чата WhatsApp с предзаполненным сообщением и QR-кодом. Бесплатный инструмент, без регистрации, 100% конфиденциально.',
56
+ };
57
+
58
+ const ui: WhatsappLinkUI = {
59
+ phoneLabel: 'Номер телефона WhatsApp',
60
+ phonePlaceholder: '900 000 00 00',
61
+ messageLabel: 'Приветственное сообщение (необязательно)',
62
+ messagePlaceholder: 'Здравствуйте! Я хотел бы получить больше информации о вашей услуге...',
63
+ generateBtn: 'Создать ссылку',
64
+ resultLabel: 'Прямая ссылка создана',
65
+ copyTitle: 'Копировать в буфер обмена',
66
+ copyDone: 'Скопировано!',
67
+ testBtn: 'Проверить чат',
68
+ qrShow: 'Показать QR',
69
+ qrHide: 'Скрыть QR',
70
+ errorPhone: 'Пожалуйста, введите правильный номер телефона.',
71
+ defaultPrefix: '7',
72
+ };
73
+
74
+ export const content: ToolLocaleContent<WhatsappLinkUI> = {
75
+ slug: 'generator-ssylok-whatsapp',
76
+ title: 'Генератор ссылок WhatsApp с QR',
77
+ description: 'Создавайте прямые ссылки для чата WhatsApp с предзаполненным сообщением и QR-кодом. Бесплатный инструмент, без регистрации, 100% конфиденциально.',
78
+ ui,
79
+ faqTitle: 'Часто задаваемые вопросы',
80
+ faq: faqData,
81
+ howTo: howToData,
82
+ bibliographyTitle: 'Источники',
83
+ bibliography: [
84
+ { name: 'Как использовать функцию «Прямая связь» — Справочный центр WhatsApp', url: 'https://faq.whatsapp.com/591339899867293' },
85
+ { name: 'API «Прямая связь»: параметры и форматы — WhatsApp', url: 'https://faq.whatsapp.com/425559092497645' },
86
+ ],
87
+ schemas: [faqSchema, howToSchema, appSchema],
88
+ seo: [
89
+ { type: 'title', level: 2, text: 'Создавайте короткие прямые ссылки для WhatsApp' },
90
+ {
91
+ type: 'paragraph',
92
+ html: 'Нужно, чтобы клиенты или подписчики связывались с вами в WhatsApp без предварительного сохранения вашего номера? Наш <strong>конструктор ссылок wa.me</strong> решает эту проблему, создавая ссылку, которая мгновенно открывает прямой чат без лишних шагов.',
93
+ },
94
+ { type: 'title', level: 3, text: 'Для чего нужен сокращатель WhatsApp wa.me?' },
95
+ {
96
+ type: 'paragraph',
97
+ html: 'WhatsApp предлагает API под названием «Прямая связь». Используя специальный URL-адрес, любой пользователь может начать с вами новый чат, не добавляя вас в контакты, как с мобильного телефона, так и через WhatsApp Web.',
98
+ },
99
+ {
100
+ type: 'list',
101
+ items: [
102
+ '<strong>Больше конверсий:</strong> кнопка «Связаться через WhatsApp» в вашем магазине снижает барьеры и увеличивает продажи.',
103
+ '<strong>Предзаполненное сообщение:</strong> пользователю достаточно нажать «Отправить». Пример: «Здравствуйте! Я с Instagram и хочу воспользоваться предложением».',
104
+ '<strong>Автоматический QR-код:</strong> скачайте QR-код для визиток, плакатов или постов в социальных сетях.',
105
+ ],
106
+ },
107
+ { type: 'title', level: 3, text: 'Как работает создание ссылки?' },
108
+ {
109
+ type: 'paragraph',
110
+ html: 'Инструмент объединяет международный префикс и чистый номер телефона, а затем добавляет его к официальному API WhatsApp вместе с параметром сообщения, преобразованным с помощью <em>url-encoding</em>.',
111
+ },
112
+ {
113
+ type: 'code',
114
+ ariaLabel: 'Формат URL-адреса WhatsApp',
115
+ code: 'https://wa.me/7XXXXXXXXXX\nhttps://wa.me/7XXXXXXXXXX?text=%C2%A1Zdravstvuyte!%20Ya%20hochu...',
116
+ },
117
+ { type: 'title', level: 3, text: 'Гарантированная конфиденциальность и локальная обработка' },
118
+ {
119
+ type: 'paragraph',
120
+ html: 'Все построение ссылки происходит в вашем браузере с помощью JavaScript. Ни один сервер не записывает, не сохраняет и не читает введенные вами номера телефонов или сообщения. Ваша конфиденциальность полностью защищена.',
121
+ },
122
+ {
123
+ type: 'tip',
124
+ title: 'Важность международного префикса',
125
+ html: 'Для того чтобы WhatsApp правильно маршрутизировал сообщение, код страны является обязательным. Для России это <strong>7</strong>, за которым следует 10-значный номер без пробелов и символа +. Конечный результат будет, например, <code>79XXXXXXXXX</code>.',
126
+ },
127
+ ],
128
+ };
@@ -0,0 +1,128 @@
1
+ import type { ToolLocaleContent } from '../../../types';
2
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
3
+ import type { WhatsappLinkUI } from '../ui';
4
+
5
+ const faqData = [
6
+ {
7
+ question: 'Hur skapar jag en WhatsApp-länk?',
8
+ answer: 'För att skapa din länk, ange ditt mobilnummer inklusive landskod. För Sverige ange till exempel först 46, följt av ditt lokala nummer. Du kan lägga till ett valfritt meddelande så skapar verktyget den slutliga wa.me-länken redo att kopieras.',
9
+ },
10
+ {
11
+ question: 'Kan jag lägga till ett långt förifyllt meddelande?',
12
+ answer: 'Ja. Du kan bifoga ett meddelande som automatiskt visas i chattfönstret när någon klickar på din länk. Verktyget använder URL-kodning för att stödja mellanslag, accenter och emojis utan att bryta URL-adressen.',
13
+ },
14
+ {
15
+ question: 'Hur använder jag den genererade QR-koden?',
16
+ answer: 'När en giltig länk har skapats visas knappen "Visa QR". QR-koden innehåller din länk-URL. Högerklicka på den och välj "Spara bild som" för att ladda ner en ren, högupplöst fil för visitkort, affischer eller sociala medier.',
17
+ },
18
+ {
19
+ question: 'Vart tar mina data vägen?',
20
+ answer: 'Generatorn bearbetar allt på klientsidan, direkt i din webbläsare. Ditt telefonnummer och förifyllt meddelande skickas aldrig till någon server eller lagras i någon databas.',
21
+ },
22
+ ];
23
+
24
+ const howToData = [
25
+ { name: 'Välj prefix', text: 'Välj din landskod från rullgardinsmenyn och ange ditt telefonnummer utan prefixet.' },
26
+ { name: 'Lägg till ett valfritt meddelande', text: 'Skriv en förifylld text som visas när någon öppnar länken och trycker på Skicka.' },
27
+ { name: 'Skapa länken', text: 'Tryck på den gröna knappen för att få din wa.me-direktlänk redo att delas.' },
28
+ { name: 'Dela eller skriv ut QR-koden', text: 'Kopiera länken, testa chatten eller ladda ner QR-koden för kort och utskrift.' },
29
+ ];
30
+
31
+ const faqSchema: WithContext<FAQPage> = {
32
+ '@context': 'https://schema.org',
33
+ '@type': 'FAQPage',
34
+ mainEntity: faqData.map((item) => ({
35
+ '@type': 'Question',
36
+ name: item.question,
37
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
38
+ })),
39
+ };
40
+
41
+ const howToSchema: WithContext<HowTo> = {
42
+ '@context': 'https://schema.org',
43
+ '@type': 'HowTo',
44
+ name: 'Hur man skapar en direkt WhatsApp-länk',
45
+ step: howToData.map((s) => ({ '@type': 'HowToStep', name: s.name, text: s.text })),
46
+ };
47
+
48
+ const appSchema: WithContext<SoftwareApplication> = {
49
+ '@context': 'https://schema.org',
50
+ '@type': 'SoftwareApplication',
51
+ name: 'WhatsApp-länkgenerator',
52
+ applicationCategory: 'UtilitiesApplication',
53
+ operatingSystem: 'Web',
54
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
55
+ description: 'Skapa direkta WhatsApp-chattlänkar med förifyllt meddelande och QR-kod. Gratis verktyg, ingen registrering, 100 % privat.',
56
+ };
57
+
58
+ const ui: WhatsappLinkUI = {
59
+ phoneLabel: 'WhatsApp-telefonnummer',
60
+ phonePlaceholder: '070 000 00 00',
61
+ messageLabel: 'Inledande meddelande (valfritt)',
62
+ messagePlaceholder: 'Hej! Jag skulle vilja ha mer information om din tjänst...',
63
+ generateBtn: 'Skapa länk',
64
+ resultLabel: 'Direktlänk skapad',
65
+ copyTitle: 'Kopiera till urklipp',
66
+ copyDone: 'Kopierat!',
67
+ testBtn: 'Testa chatt',
68
+ qrShow: 'Visa QR',
69
+ qrHide: 'Dölj QR',
70
+ errorPhone: 'Ange ett giltigt telefonnummer.',
71
+ defaultPrefix: '46',
72
+ };
73
+
74
+ export const content: ToolLocaleContent<WhatsappLinkUI> = {
75
+ slug: 'whatsapp-lank-generator',
76
+ title: 'WhatsApp länkgenerator med QR',
77
+ description: 'Skapa direkta WhatsApp-chattlänkar med förifyllt meddelande och QR-kod. Gratis verktyg, ingen registrering, 100 % privat.',
78
+ ui,
79
+ faqTitle: 'Vanliga frågor',
80
+ faq: faqData,
81
+ howTo: howToData,
82
+ bibliographyTitle: 'Referenser',
83
+ bibliography: [
84
+ { name: 'Hur du använder funktionen "klicka för att chatta" — WhatsApp hjälpcenter', url: 'https://faq.whatsapp.com/591339899867293' },
85
+ { name: 'API Klicka för att chatta: parametrar och format — WhatsApp', url: 'https://faq.whatsapp.com/425559092497645' },
86
+ ],
87
+ schemas: [faqSchema, howToSchema, appSchema],
88
+ seo: [
89
+ { type: 'title', level: 2, text: 'Skapa korta direktlänkar för WhatsApp' },
90
+ {
91
+ type: 'paragraph',
92
+ html: 'Behöver du att kunder eller följare kontaktar dig på WhatsApp utan att behöva spara ditt nummer först? Vår <strong>wa.me-länkskapare</strong> löser detta genom att generera en länk som öppnar en direktchatt omedelbart, utan föregående steg.',
93
+ },
94
+ { type: 'title', level: 3, text: 'Vad används wa.me WhatsApp-förkortaren till?' },
95
+ {
96
+ type: 'paragraph',
97
+ html: 'WhatsApp erbjuder ett API som kallas "Klicka för att chatta". Genom att använda en speciell URL kan vilken användare som helst öppna en ny chatt med dig utan att behöva lägga till dig som kontakt först, från både mobil och WhatsApp Web.',
98
+ },
99
+ {
100
+ type: 'list',
101
+ items: [
102
+ '<strong>Fler konverteringar:</strong> En "Kontakta via WhatsApp"-knapp i din butik minskar friktionen och ökar försäljningen.',
103
+ '<strong>Förifyllt meddelande:</strong> Användaren trycker bara på "Skicka". Exempel: "Hej! Jag kom från Instagram och vill ta del av erbjudandet."',
104
+ '<strong>Automatisk QR-kod:</strong> Ladda ner QR-koden för visitkort, affischer eller inlägg i sociala medier.',
105
+ ],
106
+ },
107
+ { type: 'title', level: 3, text: 'Hur fungerar länkgenereringen?' },
108
+ {
109
+ type: 'paragraph',
110
+ html: 'Verktyget sammanfogar det internationella prefixet och det rena telefonnumret och lägger sedan till det i det officiella WhatsApp API:et tillsammans med meddelandeparametern konverterad via <em>url-kodning</em>.',
111
+ },
112
+ {
113
+ type: 'code',
114
+ ariaLabel: 'WhatsApp URL-format',
115
+ code: 'https://wa.me/46XXXXXXXXX\nhttps://wa.me/46XXXXXXXXX?text=%C2%A1Hej!%20Jag%20skulle...',
116
+ },
117
+ { type: 'title', level: 3, text: 'Garanterad integritet och lokal bearbetning' },
118
+ {
119
+ type: 'paragraph',
120
+ html: 'Hela skapandet av länken sker i din webbläsare via JavaScript. Ingen server registrerar, sparar eller läser de telefonnummer eller meddelanden du anger. Din integritet är helt skyddad.',
121
+ },
122
+ {
123
+ type: 'tip',
124
+ title: 'Vikten av internationellt prefix',
125
+ html: 'För att WhatsApp ska dirigera meddelandet korrekt är landskoden obligatorisk. För Sverige är den <strong>46</strong>, följt av mobilnumret, utan mellanslag eller +-symbolen. Slutresultatet blir till exempel <code>467XXXXXXXX</code>.',
126
+ },
127
+ ],
128
+ };
@@ -0,0 +1,128 @@
1
+ import type { ToolLocaleContent } from '../../../types';
2
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
3
+ import type { WhatsappLinkUI } from '../ui';
4
+
5
+ const faqData = [
6
+ {
7
+ question: 'WhatsApp bağlantısı nasıl oluşturulur?',
8
+ answer: 'Bağlantınızı oluşturmak için ülke kodunu da içeren cep telefonu numaranızı girin. Örneğin, İspanya için önce 34, Meksika için 52 girin, ardından yerel numaranızı yazın. İsteğe bağlı bir mesaj ekleyebilirsiniz; araç, kopyalamaya hazır nihai wa.me bağlantısını oluşturacaktır.',
9
+ },
10
+ {
11
+ question: 'Uzun, önceden doldurulmuş bir mesaj ekleyebilir miyim?',
12
+ answer: 'Evet. Birisi bağlantınıza tıkladığında sohbet kutusunda otomatik olarak görünecek bir mesaj ekleyebilirsiniz. Araç, URL\'yi bozmadan boşlukları, aksanları ve emojileri desteklemek için URL kodlamasını kullanır.',
13
+ },
14
+ {
15
+ question: 'Oluşturulan QR kodunu nasıl kullanırım?',
16
+ answer: 'Geçerli bir bağlantı oluşturulduğunda "QR Göster" düğmesi görünür. QR kodu, bağlantı URL\'nizi içerir. Kartvizitler, afişler veya sosyal medya için temiz, yüksek çözünürlüklü bir dosya indirmek için üzerine sağ tıklayın ve "Resmi farklı kaydet"i seçin.',
17
+ },
18
+ {
19
+ question: 'Verilerim nereye gidiyor?',
20
+ answer: 'Oluşturucu her şeyi doğrudan tarayıcınızda, istemci tarafında işler. Telefon numaranız ve önceden doldurulmuş mesajınız asla herhangi bir sunucuya gönderilmez veya herhangi bir veritabanında saklanmaz.',
21
+ },
22
+ ];
23
+
24
+ const howToData = [
25
+ { name: 'Öneki seçin', text: 'Açılır menüden ülke kodunuzu seçin ve telefon numaranızı önek olmadan girin.' },
26
+ { name: 'İsteğe bağlı bir mesaj ekleyin', text: 'Birisi bağlantıyı açıp Gönder\'e dokunduğunda görünecek olan önceden doldurulmuş bir metin yazın.' },
27
+ { name: 'Bağlantıyı oluşturun', text: 'Paylaşmaya hazır doğrudan wa.me URL\'nizi almak için yeşil düğmeye basın.' },
28
+ { name: 'QR\'ı paylaşın veya yazdırın', text: 'Bağlantıyı kopyalayın, sohbeti test edin veya kartlar ve baskı için QR kodunu indirin.' },
29
+ ];
30
+
31
+ const faqSchema: WithContext<FAQPage> = {
32
+ '@context': 'https://schema.org',
33
+ '@type': 'FAQPage',
34
+ mainEntity: faqData.map((item) => ({
35
+ '@type': 'Question',
36
+ name: item.question,
37
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
38
+ })),
39
+ };
40
+
41
+ const howToSchema: WithContext<HowTo> = {
42
+ '@context': 'https://schema.org',
43
+ '@type': 'HowTo',
44
+ name: 'Doğrudan WhatsApp bağlantısı nasıl oluşturulur?',
45
+ step: howToData.map((s) => ({ '@type': 'HowToStep', name: s.name, text: s.text })),
46
+ };
47
+
48
+ const appSchema: WithContext<SoftwareApplication> = {
49
+ '@context': 'https://schema.org',
50
+ '@type': 'SoftwareApplication',
51
+ name: 'WhatsApp Bağlantı Oluşturucu',
52
+ applicationCategory: 'UtilitiesApplication',
53
+ operatingSystem: 'Web',
54
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
55
+ description: 'Önceden doldurulmuş mesaj ve QR kodu ile doğrudan WhatsApp sohbet bağlantıları oluşturun. Ücretsiz araç, kayıt yok, %100 özel.',
56
+ };
57
+
58
+ const ui: WhatsappLinkUI = {
59
+ phoneLabel: 'WhatsApp Telefon Numarası',
60
+ phonePlaceholder: '5XX XXX XX XX',
61
+ messageLabel: 'Açılış mesajı (isteğe bağlı)',
62
+ messagePlaceholder: 'Merhaba! Hizmetiniz hakkında daha fazla bilgi almak istiyorum...',
63
+ generateBtn: 'Bağlantı Oluştur',
64
+ resultLabel: 'Doğrudan Bağlantı Oluşturuldu',
65
+ copyTitle: 'Panoya kopyala',
66
+ copyDone: 'Kopyalandı!',
67
+ testBtn: 'Sohbeti Test Et',
68
+ qrShow: 'QR Göster',
69
+ qrHide: 'QR Gizle',
70
+ errorPhone: 'Lütfen geçerli bir telefon numarası girin.',
71
+ defaultPrefix: '90',
72
+ };
73
+
74
+ export const content: ToolLocaleContent<WhatsappLinkUI> = {
75
+ slug: 'whatsapp-link-olusturucu',
76
+ title: 'QR Kodlu WhatsApp Bağlantı Oluşturucu',
77
+ description: 'Önceden doldurulmuş mesaj ve QR kodu ile doğrudan WhatsApp sohbet bağlantıları oluşturun. Ücretsiz araç, kayıt yok, %100 özel.',
78
+ ui,
79
+ faqTitle: 'Sıkça Sorulan Sorular',
80
+ faq: faqData,
81
+ howTo: howToData,
82
+ bibliographyTitle: 'Kaynaklar',
83
+ bibliography: [
84
+ { name: 'Tıkla Sohbet Et özelliği nasıl kullanılır — WhatsApp Yardım Merkezi', url: 'https://faq.whatsapp.com/591339899867293' },
85
+ { name: 'API Tıkla Sohbet Et: parametreler ve formatlar — WhatsApp', url: 'https://faq.whatsapp.com/425559092497645' },
86
+ ],
87
+ schemas: [faqSchema, howToSchema, appSchema],
88
+ seo: [
89
+ { type: 'title', level: 2, text: 'WhatsApp için kısa doğrudan bağlantılar oluşturun' },
90
+ {
91
+ type: 'paragraph',
92
+ html: 'Müşterilerinizin veya takipçilerinizin numaranızı kaydetmeden size WhatsApp üzerinden ulaşmasını mı istiyorsunuz? <strong>wa.me bağlantı oluşturucumuz</strong>, ön hazırlık gerektirmeden anında doğrudan bir sohbet açan bir bağlantı oluşturarak bu sorunu çözer.',
93
+ },
94
+ { type: 'title', level: 3, text: 'wa.me WhatsApp kısaltması ne işe yarar?' },
95
+ {
96
+ type: 'paragraph',
97
+ html: 'WhatsApp, "Tıkla Sohbet Et" adlı bir API sunar. Özel bir URL kullanarak, herhangi bir kullanıcı sizi rehberine eklemesine gerek kalmadan hem mobilden hem de WhatsApp Web\'den sizinle yeni bir sohbet başlatabilir.',
98
+ },
99
+ {
100
+ type: 'list',
101
+ items: [
102
+ '<strong>Daha fazla dönüşüm:</strong> Mağazanızdaki "WhatsApp ile İletişime Geç" düğmesi süreci kolaylaştırır ve satışları artırır.',
103
+ '<strong>Önceden doldurulmuş mesaj:</strong> Kullanıcı sadece "Gönder"e basar. Örn: "Merhaba! Instagram\'dan geldim ve tekliften yararlanmak istiyorum."',
104
+ '<strong>Otomatik QR kodu:</strong> Kartvizitler, afişler veya sosyal medya paylaşımları için QR\'ı indirin.',
105
+ ],
106
+ },
107
+ { type: 'title', level: 3, text: 'Bağlantı oluşturma nasıl çalışır?' },
108
+ {
109
+ type: 'paragraph',
110
+ html: 'Araç, uluslararası ülke kodunu ve temiz telefon numarasını birleştirir, ardından <em>url-encoding</em> yoluyla dönüştürülen mesaj parametresiyle birlikte resmi WhatsApp API\'sine ekler.',
111
+ },
112
+ {
113
+ type: 'code',
114
+ ariaLabel: 'WhatsApp URL formatı',
115
+ code: 'https://wa.me/90XXXXXXXXX\nhttps://wa.me/90XXXXXXXXX?text=%C2%A1Merhaba!%20İstiyorum...',
116
+ },
117
+ { type: 'title', level: 3, text: 'Garantili gizlilik ve yerel işleme' },
118
+ {
119
+ type: 'paragraph',
120
+ html: 'Tüm bağlantı oluşturma süreci JavaScript aracılığıyla tarayıcınızda gerçekleşir. Hiçbir sunucu girdiğiniz telefon numaralarını veya mesajları kaydetmez, saklamaz veya okumaz. Gizliliğiniz tam olarak korunmaktadır.',
121
+ },
122
+ {
123
+ type: 'tip',
124
+ title: 'Uluslararası önekin önemi',
125
+ html: 'WhatsApp\'ın mesajı doğru şekilde yönlendirmesi için ülke kodu zorunludur. Türkiye için <strong>90</strong>\'dır, ardından boşluk veya + sembolü olmadan 10 haneli numaranız gelir. Nihai sonuç, örneğin <code>905XXXXXXXXX</code> olacaktır.',
126
+ },
127
+ ],
128
+ };
@@ -0,0 +1,128 @@
1
+ import type { ToolLocaleContent } from '../../../types';
2
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
3
+ import type { WhatsappLinkUI } from '../ui';
4
+
5
+ const faqData = [
6
+ {
7
+ question: '如何生成 WhatsApp 链接?',
8
+ answer: '要创建链接,请输入包含国家代码的手机号码。例如,中国请输入 86,然后输入您的本地号码。您可以添加可选的消息,工具将生成最终的 wa.me 链接,可直接复制。',
9
+ },
10
+ {
11
+ question: '我可以添加较长的预填消息吗?',
12
+ answer: '可以。您可以附带一条消息,当有人点击您的链接时,该消息将自动出现在聊天框中。工具使用 URL 编码来支持空格、重音符号和表情符号,而不会破坏 URL。',
13
+ },
14
+ {
15
+ question: '如何使用生成的二维码?',
16
+ answer: '生成有效链接后,将出现“显示二维码”按钮。二维码包含您的链接 URL。右键点击二维码并选择“图片另存为”,即可下载用于名片、海报或社交媒体的高分辨率图片。',
17
+ },
18
+ {
19
+ question: '我的数据会流向何处?',
20
+ answer: '生成器完全在客户端(即您的浏览器中)处理所有内容。您的电话号码和预填消息永远不会发送到任何服务器,也不会存储在任何数据库中。',
21
+ },
22
+ ];
23
+
24
+ const howToData = [
25
+ { name: '选择区号', text: '从下拉菜单中选择您的国家代码,并输入不带前缀的电话号码。' },
26
+ { name: '添加可选消息', text: '编写一段预填文本,当有人打开链接并点击发送时,该文本将自动显示。' },
27
+ { name: '生成链接', text: '按下绿色按钮,获取您的 wa.me 直接跳转 URL,准备分享。' },
28
+ { name: '分享或打印二维码', text: '复制链接、测试聊天或下载用于名片和打印的二维码。' },
29
+ ];
30
+
31
+ const faqSchema: WithContext<FAQPage> = {
32
+ '@context': 'https://schema.org',
33
+ '@type': 'FAQPage',
34
+ mainEntity: faqData.map((item) => ({
35
+ '@type': 'Question',
36
+ name: item.question,
37
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
38
+ })),
39
+ };
40
+
41
+ const howToSchema: WithContext<HowTo> = {
42
+ '@context': 'https://schema.org',
43
+ '@type': 'HowTo',
44
+ name: '如何创建 WhatsApp 直接聊天链接',
45
+ step: howToData.map((s) => ({ '@type': 'HowToStep', name: s.name, text: s.text })),
46
+ };
47
+
48
+ const appSchema: WithContext<SoftwareApplication> = {
49
+ '@context': 'https://schema.org',
50
+ '@type': 'SoftwareApplication',
51
+ name: 'WhatsApp 链接生成器',
52
+ applicationCategory: 'UtilitiesApplication',
53
+ operatingSystem: 'Web',
54
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'CNY' },
55
+ description: '创建带有预填消息和二维码的 WhatsApp 直接聊天链接。免费工具,无需注册,100% 隐私保护。',
56
+ };
57
+
58
+ const ui: WhatsappLinkUI = {
59
+ phoneLabel: 'WhatsApp 电话号码',
60
+ phonePlaceholder: '138 0000 0000',
61
+ messageLabel: '开场消息(可选)',
62
+ messagePlaceholder: '您好!我想了解更多关于您服务的信息...',
63
+ generateBtn: '生成链接',
64
+ resultLabel: '直接链接已生成',
65
+ copyTitle: '复制到剪贴板',
66
+ copyDone: '已复制!',
67
+ testBtn: '测试聊天',
68
+ qrShow: '显示二维码',
69
+ qrHide: '隐藏二维码',
70
+ errorPhone: '请输入有效的电话号码。',
71
+ defaultPrefix: '86',
72
+ };
73
+
74
+ export const content: ToolLocaleContent<WhatsappLinkUI> = {
75
+ slug: 'whatsapp-link-generator',
76
+ title: '带二维码的 WhatsApp 链接生成器',
77
+ description: '创建带有预填消息和二维码的 WhatsApp 直接聊天链接。免费工具,无需注册,100% 隐私保护。',
78
+ ui,
79
+ faqTitle: '常见问题',
80
+ faq: faqData,
81
+ howTo: howToData,
82
+ bibliographyTitle: '参考文献',
83
+ bibliography: [
84
+ { name: '如何使用“点击聊天”功能 — WhatsApp 帮助中心', url: 'https://faq.whatsapp.com/591339899867293' },
85
+ { name: 'API 点击聊天:参数和格式 — WhatsApp', url: 'https://faq.whatsapp.com/425559092497645' },
86
+ ],
87
+ schemas: [faqSchema, howToSchema, appSchema],
88
+ seo: [
89
+ { type: 'title', level: 2, text: '为 WhatsApp 生成简短的直接链接' },
90
+ {
91
+ type: 'paragraph',
92
+ html: '是否需要客户或关注者在不先保存您号码的情况下通过 WhatsApp 联系您?我们的 <strong>wa.me 链接创建器</strong>通过生成一个能立即打开直接聊天的链接来解决这个问题,无需任何前期步骤。',
93
+ },
94
+ { type: 'title', level: 3, text: 'wa.me WhatsApp 短链接有什么用?' },
95
+ {
96
+ type: 'paragraph',
97
+ html: 'WhatsApp 提供了一个名为“点击聊天”的 API。通过使用特殊的 URL,任何用户都可以与您开启新聊天,而无需先将您添加为联系人,无论是在手机上还是通过 WhatsApp 网页版。',
98
+ },
99
+ {
100
+ type: 'list',
101
+ items: [
102
+ '<strong>提高转化率:</strong>在您的商店中添加“通过 WhatsApp 联系”按钮可减少摩擦并增加销售额。',
103
+ '<strong>预填消息:</strong>用户只需按“发送”。例如:“您好!我从 Instagram 过来,想领取优惠。”',
104
+ '<strong>自动二维码:</strong>下载二维码用于名片、海报或社交媒体贴子。',
105
+ ],
106
+ },
107
+ { type: 'title', level: 3, text: '链接生成是如何工作的?' },
108
+ {
109
+ type: 'paragraph',
110
+ html: '该工具将国际区号和纯数字电话号码拼接在一起,然后将其连同经过 <em>url-encoding</em> 转换的消息参数一起追加到官方 WhatsApp API 地址后。',
111
+ },
112
+ {
113
+ type: 'code',
114
+ ariaLabel: 'WhatsApp URL 格式',
115
+ code: 'https://wa.me/86XXXXXXXXXXX\nhttps://wa.me/86XXXXXXXXXXX?text=%C2%A1Nih%20Hao!%20...',
116
+ },
117
+ { type: 'title', level: 3, text: '隐私保证和本地处理' },
118
+ {
119
+ type: 'paragraph',
120
+ html: '所有链接的构建都在您的浏览器中通过 JavaScript 完成。没有任何服务器会记录、保存或读取您输入的电话号码或消息。您的隐私得到充分保护。',
121
+ },
122
+ {
123
+ type: 'tip',
124
+ title: '国际区号的重要性',
125
+ html: '为了让 WhatsApp 正确路由消息,国家代码是强制性的。中国是 <strong>86</strong>,其后紧跟手机号码,不要有空格或 + 符号。最终结果例如 <code>86138XXXXXXXX</code>。',
126
+ },
127
+ ],
128
+ };
@@ -11,6 +11,18 @@ export const whatsappLink: ToolsToolEntry<WhatsappLinkUI> = {
11
11
  es: () => import('./i18n/es').then((m) => m.content),
12
12
  en: () => import('./i18n/en').then((m) => m.content),
13
13
  fr: () => import('./i18n/fr').then((m) => m.content),
14
+ de: () => import('./i18n/de').then((m) => m.content),
15
+ it: () => import('./i18n/it').then((m) => m.content),
16
+ pt: () => import('./i18n/pt').then((m) => m.content),
17
+ nl: () => import('./i18n/nl').then((m) => m.content),
18
+ pl: () => import('./i18n/pl').then((m) => m.content),
19
+ tr: () => import('./i18n/tr').then((m) => m.content),
20
+ id: () => import('./i18n/id').then((m) => m.content),
21
+ sv: () => import('./i18n/sv').then((m) => m.content),
22
+ ru: () => import('./i18n/ru').then((m) => m.content),
23
+ ja: () => import('./i18n/ja').then((m) => m.content),
24
+ ko: () => import('./i18n/ko').then((m) => m.content),
25
+ zh: () => import('./i18n/zh').then((m) => m.content),
14
26
  },
15
27
  };
16
28