@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.
Files changed (240) hide show
  1. package/package.json +1 -1
  2. package/src/category/i18n/de.ts +3 -3
  3. package/src/category/i18n/en.ts +1 -1
  4. package/src/category/i18n/es.ts +1 -1
  5. package/src/category/i18n/fr.ts +16 -16
  6. package/src/category/i18n/id.ts +1 -1
  7. package/src/category/i18n/nl.ts +1 -1
  8. package/src/category/i18n/pl.ts +1 -1
  9. package/src/category/i18n/pt.ts +1 -1
  10. package/src/category/i18n/ru.ts +10 -10
  11. package/src/category/i18n/sv.ts +1 -1
  12. package/src/category/i18n/tr.ts +1 -1
  13. package/src/category/i18n/zh.ts +4 -4
  14. package/src/layouts/PreviewLayout.astro +7 -2
  15. package/src/pages/[locale]/[slug].astro +30 -13
  16. package/src/tests/diacritics_density.test.ts +118 -0
  17. package/src/tests/inverted_punctuation.test.ts +84 -0
  18. package/src/tests/locale_completeness.test.ts +3 -20
  19. package/src/tests/no_en_dash.test.ts +70 -0
  20. package/src/tests/script_density.test.ts +94 -0
  21. package/src/tests/shared-test-helpers.ts +56 -0
  22. package/src/tests/tool_exports.test.ts +34 -0
  23. package/src/tool/date-diff-calculator/bibliography.astro +2 -10
  24. package/src/tool/date-diff-calculator/bibliography.ts +7 -0
  25. package/src/tool/date-diff-calculator/i18n/de.ts +8 -11
  26. package/src/tool/date-diff-calculator/i18n/en.ts +4 -7
  27. package/src/tool/date-diff-calculator/i18n/es.ts +4 -7
  28. package/src/tool/date-diff-calculator/i18n/fr.ts +4 -7
  29. package/src/tool/date-diff-calculator/i18n/id.ts +4 -7
  30. package/src/tool/date-diff-calculator/i18n/it.ts +4 -7
  31. package/src/tool/date-diff-calculator/i18n/ja.ts +4 -7
  32. package/src/tool/date-diff-calculator/i18n/ko.ts +4 -7
  33. package/src/tool/date-diff-calculator/i18n/nl.ts +4 -7
  34. package/src/tool/date-diff-calculator/i18n/pl.ts +5 -8
  35. package/src/tool/date-diff-calculator/i18n/pt.ts +4 -7
  36. package/src/tool/date-diff-calculator/i18n/ru.ts +8 -11
  37. package/src/tool/date-diff-calculator/i18n/sv.ts +4 -7
  38. package/src/tool/date-diff-calculator/i18n/tr.ts +4 -7
  39. package/src/tool/date-diff-calculator/i18n/zh.ts +7 -10
  40. package/src/tool/date-diff-calculator/seo.astro +2 -1
  41. package/src/tool/drive-direct-link/bibliography.astro +2 -10
  42. package/src/tool/drive-direct-link/bibliography.ts +6 -0
  43. package/src/tool/drive-direct-link/i18n/de.ts +8 -10
  44. package/src/tool/drive-direct-link/i18n/en.ts +4 -6
  45. package/src/tool/drive-direct-link/i18n/es.ts +5 -7
  46. package/src/tool/drive-direct-link/i18n/fr.ts +5 -7
  47. package/src/tool/drive-direct-link/i18n/id.ts +4 -6
  48. package/src/tool/drive-direct-link/i18n/it.ts +4 -6
  49. package/src/tool/drive-direct-link/i18n/ja.ts +4 -6
  50. package/src/tool/drive-direct-link/i18n/ko.ts +4 -6
  51. package/src/tool/drive-direct-link/i18n/nl.ts +4 -6
  52. package/src/tool/drive-direct-link/i18n/pl.ts +8 -10
  53. package/src/tool/drive-direct-link/i18n/pt.ts +4 -6
  54. package/src/tool/drive-direct-link/i18n/ru.ts +12 -14
  55. package/src/tool/drive-direct-link/i18n/sv.ts +4 -6
  56. package/src/tool/drive-direct-link/i18n/tr.ts +4 -6
  57. package/src/tool/drive-direct-link/i18n/zh.ts +8 -10
  58. package/src/tool/drive-direct-link/seo.astro +2 -1
  59. package/src/tool/email-list-cleaner/bibliography.astro +2 -10
  60. package/src/tool/email-list-cleaner/bibliography.ts +7 -0
  61. package/src/tool/email-list-cleaner/i18n/de.ts +6 -9
  62. package/src/tool/email-list-cleaner/i18n/en.ts +4 -7
  63. package/src/tool/email-list-cleaner/i18n/es.ts +4 -7
  64. package/src/tool/email-list-cleaner/i18n/fr.ts +4 -7
  65. package/src/tool/email-list-cleaner/i18n/id.ts +4 -7
  66. package/src/tool/email-list-cleaner/i18n/it.ts +4 -7
  67. package/src/tool/email-list-cleaner/i18n/ja.ts +4 -7
  68. package/src/tool/email-list-cleaner/i18n/ko.ts +4 -7
  69. package/src/tool/email-list-cleaner/i18n/nl.ts +4 -7
  70. package/src/tool/email-list-cleaner/i18n/pl.ts +6 -9
  71. package/src/tool/email-list-cleaner/i18n/pt.ts +4 -7
  72. package/src/tool/email-list-cleaner/i18n/ru.ts +11 -14
  73. package/src/tool/email-list-cleaner/i18n/sv.ts +5 -8
  74. package/src/tool/email-list-cleaner/i18n/tr.ts +4 -7
  75. package/src/tool/email-list-cleaner/i18n/zh.ts +7 -10
  76. package/src/tool/email-list-cleaner/seo.astro +2 -1
  77. package/src/tool/env-badge-spain/bibliography.astro +2 -10
  78. package/src/tool/env-badge-spain/bibliography.ts +6 -0
  79. package/src/tool/env-badge-spain/i18n/de.ts +4 -6
  80. package/src/tool/env-badge-spain/i18n/en.ts +4 -6
  81. package/src/tool/env-badge-spain/i18n/es.ts +4 -6
  82. package/src/tool/env-badge-spain/i18n/fr.ts +4 -6
  83. package/src/tool/env-badge-spain/i18n/id.ts +4 -6
  84. package/src/tool/env-badge-spain/i18n/it.ts +4 -6
  85. package/src/tool/env-badge-spain/i18n/ja.ts +4 -6
  86. package/src/tool/env-badge-spain/i18n/ko.ts +4 -6
  87. package/src/tool/env-badge-spain/i18n/nl.ts +4 -6
  88. package/src/tool/env-badge-spain/i18n/pl.ts +4 -6
  89. package/src/tool/env-badge-spain/i18n/pt.ts +4 -6
  90. package/src/tool/env-badge-spain/i18n/ru.ts +14 -16
  91. package/src/tool/env-badge-spain/i18n/sv.ts +4 -6
  92. package/src/tool/env-badge-spain/i18n/tr.ts +4 -6
  93. package/src/tool/env-badge-spain/i18n/zh.ts +4 -6
  94. package/src/tool/env-badge-spain/seo.astro +2 -1
  95. package/src/tool/morse-beacon/bibliography.astro +2 -10
  96. package/src/tool/morse-beacon/bibliography.ts +7 -0
  97. package/src/tool/morse-beacon/i18n/de.ts +8 -11
  98. package/src/tool/morse-beacon/i18n/en.ts +6 -9
  99. package/src/tool/morse-beacon/i18n/es.ts +6 -9
  100. package/src/tool/morse-beacon/i18n/fr.ts +9 -12
  101. package/src/tool/morse-beacon/i18n/id.ts +6 -9
  102. package/src/tool/morse-beacon/i18n/it.ts +6 -9
  103. package/src/tool/morse-beacon/i18n/ja.ts +6 -9
  104. package/src/tool/morse-beacon/i18n/ko.ts +6 -9
  105. package/src/tool/morse-beacon/i18n/nl.ts +6 -9
  106. package/src/tool/morse-beacon/i18n/pl.ts +7 -10
  107. package/src/tool/morse-beacon/i18n/pt.ts +6 -9
  108. package/src/tool/morse-beacon/i18n/ru.ts +7 -10
  109. package/src/tool/morse-beacon/i18n/sv.ts +6 -9
  110. package/src/tool/morse-beacon/i18n/tr.ts +6 -9
  111. package/src/tool/morse-beacon/i18n/zh.ts +7 -10
  112. package/src/tool/morse-beacon/seo.astro +2 -1
  113. package/src/tool/password-generator/bibliography.astro +2 -10
  114. package/src/tool/password-generator/bibliography.ts +8 -0
  115. package/src/tool/password-generator/i18n/de.ts +9 -13
  116. package/src/tool/password-generator/i18n/en.ts +4 -8
  117. package/src/tool/password-generator/i18n/es.ts +4 -8
  118. package/src/tool/password-generator/i18n/fr.ts +5 -9
  119. package/src/tool/password-generator/i18n/id.ts +4 -8
  120. package/src/tool/password-generator/i18n/it.ts +4 -8
  121. package/src/tool/password-generator/i18n/ja.ts +4 -8
  122. package/src/tool/password-generator/i18n/ko.ts +4 -8
  123. package/src/tool/password-generator/i18n/nl.ts +4 -8
  124. package/src/tool/password-generator/i18n/pl.ts +7 -11
  125. package/src/tool/password-generator/i18n/pt.ts +4 -8
  126. package/src/tool/password-generator/i18n/ru.ts +8 -12
  127. package/src/tool/password-generator/i18n/sv.ts +4 -8
  128. package/src/tool/password-generator/i18n/tr.ts +4 -8
  129. package/src/tool/password-generator/i18n/zh.ts +7 -11
  130. package/src/tool/password-generator/seo.astro +2 -1
  131. package/src/tool/routes/bibliography.astro +2 -10
  132. package/src/tool/routes/bibliography.ts +9 -0
  133. package/src/tool/routes/i18n/de.ts +5 -10
  134. package/src/tool/routes/i18n/en.ts +4 -9
  135. package/src/tool/routes/i18n/es.ts +4 -9
  136. package/src/tool/routes/i18n/fr.ts +7 -12
  137. package/src/tool/routes/i18n/id.ts +4 -9
  138. package/src/tool/routes/i18n/it.ts +4 -9
  139. package/src/tool/routes/i18n/ja.ts +4 -9
  140. package/src/tool/routes/i18n/ko.ts +4 -9
  141. package/src/tool/routes/i18n/nl.ts +4 -9
  142. package/src/tool/routes/i18n/pl.ts +4 -9
  143. package/src/tool/routes/i18n/pt.ts +4 -9
  144. package/src/tool/routes/i18n/ru.ts +7 -12
  145. package/src/tool/routes/i18n/sv.ts +4 -9
  146. package/src/tool/routes/i18n/tr.ts +4 -9
  147. package/src/tool/routes/i18n/zh.ts +5 -10
  148. package/src/tool/routes/seo.astro +2 -1
  149. package/src/tool/rule-of-three/bibliography.astro +2 -10
  150. package/src/tool/rule-of-three/bibliography.ts +6 -0
  151. package/src/tool/rule-of-three/i18n/de.ts +6 -8
  152. package/src/tool/rule-of-three/i18n/en.ts +4 -6
  153. package/src/tool/rule-of-three/i18n/es.ts +4 -6
  154. package/src/tool/rule-of-three/i18n/fr.ts +11 -13
  155. package/src/tool/rule-of-three/i18n/id.ts +4 -6
  156. package/src/tool/rule-of-three/i18n/it.ts +4 -6
  157. package/src/tool/rule-of-three/i18n/ja.ts +4 -6
  158. package/src/tool/rule-of-three/i18n/ko.ts +4 -6
  159. package/src/tool/rule-of-three/i18n/nl.ts +6 -8
  160. package/src/tool/rule-of-three/i18n/pl.ts +6 -8
  161. package/src/tool/rule-of-three/i18n/pt.ts +4 -6
  162. package/src/tool/rule-of-three/i18n/ru.ts +7 -9
  163. package/src/tool/rule-of-three/i18n/sv.ts +4 -6
  164. package/src/tool/rule-of-three/i18n/tr.ts +5 -7
  165. package/src/tool/rule-of-three/i18n/zh.ts +6 -8
  166. package/src/tool/rule-of-three/seo.astro +2 -1
  167. package/src/tool/seo-content-optimizer/bibliography.astro +2 -10
  168. package/src/tool/seo-content-optimizer/bibliography.ts +6 -0
  169. package/src/tool/seo-content-optimizer/i18n/de.ts +4 -6
  170. package/src/tool/seo-content-optimizer/i18n/en.ts +4 -6
  171. package/src/tool/seo-content-optimizer/i18n/es.ts +4 -6
  172. package/src/tool/seo-content-optimizer/i18n/fr.ts +7 -9
  173. package/src/tool/seo-content-optimizer/i18n/id.ts +4 -6
  174. package/src/tool/seo-content-optimizer/i18n/it.ts +4 -6
  175. package/src/tool/seo-content-optimizer/i18n/ja.ts +4 -6
  176. package/src/tool/seo-content-optimizer/i18n/ko.ts +4 -6
  177. package/src/tool/seo-content-optimizer/i18n/nl.ts +4 -6
  178. package/src/tool/seo-content-optimizer/i18n/pl.ts +4 -6
  179. package/src/tool/seo-content-optimizer/i18n/pt.ts +4 -6
  180. package/src/tool/seo-content-optimizer/i18n/ru.ts +5 -7
  181. package/src/tool/seo-content-optimizer/i18n/sv.ts +4 -6
  182. package/src/tool/seo-content-optimizer/i18n/tr.ts +4 -6
  183. package/src/tool/seo-content-optimizer/i18n/zh.ts +4 -6
  184. package/src/tool/seo-content-optimizer/seo.astro +2 -1
  185. package/src/tool/speed-reader/bibliography.astro +2 -10
  186. package/src/tool/speed-reader/bibliography.ts +10 -0
  187. package/src/tool/speed-reader/i18n/de.ts +7 -13
  188. package/src/tool/speed-reader/i18n/en.ts +6 -12
  189. package/src/tool/speed-reader/i18n/es.ts +4 -10
  190. package/src/tool/speed-reader/i18n/fr.ts +13 -19
  191. package/src/tool/speed-reader/i18n/id.ts +6 -12
  192. package/src/tool/speed-reader/i18n/it.ts +6 -12
  193. package/src/tool/speed-reader/i18n/ja.ts +4 -10
  194. package/src/tool/speed-reader/i18n/ko.ts +4 -10
  195. package/src/tool/speed-reader/i18n/nl.ts +6 -12
  196. package/src/tool/speed-reader/i18n/pl.ts +7 -13
  197. package/src/tool/speed-reader/i18n/pt.ts +6 -12
  198. package/src/tool/speed-reader/i18n/ru.ts +14 -20
  199. package/src/tool/speed-reader/i18n/sv.ts +6 -12
  200. package/src/tool/speed-reader/i18n/tr.ts +4 -10
  201. package/src/tool/speed-reader/i18n/zh.ts +8 -14
  202. package/src/tool/speed-reader/seo.astro +2 -1
  203. package/src/tool/text-pixel-calculator/bibliography.astro +2 -10
  204. package/src/tool/text-pixel-calculator/bibliography.ts +6 -0
  205. package/src/tool/text-pixel-calculator/i18n/de.ts +6 -8
  206. package/src/tool/text-pixel-calculator/i18n/en.ts +4 -6
  207. package/src/tool/text-pixel-calculator/i18n/es.ts +4 -6
  208. package/src/tool/text-pixel-calculator/i18n/fr.ts +5 -7
  209. package/src/tool/text-pixel-calculator/i18n/id.ts +4 -6
  210. package/src/tool/text-pixel-calculator/i18n/it.ts +4 -6
  211. package/src/tool/text-pixel-calculator/i18n/ja.ts +4 -6
  212. package/src/tool/text-pixel-calculator/i18n/ko.ts +4 -6
  213. package/src/tool/text-pixel-calculator/i18n/nl.ts +4 -6
  214. package/src/tool/text-pixel-calculator/i18n/pl.ts +7 -9
  215. package/src/tool/text-pixel-calculator/i18n/pt.ts +4 -6
  216. package/src/tool/text-pixel-calculator/i18n/ru.ts +8 -10
  217. package/src/tool/text-pixel-calculator/i18n/sv.ts +4 -6
  218. package/src/tool/text-pixel-calculator/i18n/tr.ts +4 -6
  219. package/src/tool/text-pixel-calculator/i18n/zh.ts +7 -9
  220. package/src/tool/text-pixel-calculator/seo.astro +2 -1
  221. package/src/tool/whatsapp-link/bibliography.astro +2 -10
  222. package/src/tool/whatsapp-link/bibliography.ts +6 -0
  223. package/src/tool/whatsapp-link/i18n/de.ts +8 -10
  224. package/src/tool/whatsapp-link/i18n/en.ts +4 -6
  225. package/src/tool/whatsapp-link/i18n/es.ts +6 -8
  226. package/src/tool/whatsapp-link/i18n/fr.ts +6 -8
  227. package/src/tool/whatsapp-link/i18n/id.ts +4 -6
  228. package/src/tool/whatsapp-link/i18n/it.ts +4 -6
  229. package/src/tool/whatsapp-link/i18n/ja.ts +4 -6
  230. package/src/tool/whatsapp-link/i18n/ko.ts +4 -6
  231. package/src/tool/whatsapp-link/i18n/nl.ts +4 -6
  232. package/src/tool/whatsapp-link/i18n/pl.ts +8 -10
  233. package/src/tool/whatsapp-link/i18n/pt.ts +4 -6
  234. package/src/tool/whatsapp-link/i18n/ru.ts +9 -11
  235. package/src/tool/whatsapp-link/i18n/sv.ts +4 -6
  236. package/src/tool/whatsapp-link/i18n/tr.ts +4 -6
  237. package/src/tool/whatsapp-link/i18n/zh.ts +8 -10
  238. package/src/tool/whatsapp-link/seo.astro +2 -1
  239. package/src/tool/whatsapp-link/whatsapp-link-generator.css +41 -4
  240. 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 { MorseBeaconUI } from '../ui';
@@ -5,7 +6,7 @@ import type { MorseBeaconUI } from '../ui';
5
6
  const faqData = [
6
7
  {
7
8
  question: 'Mors alfabesinde SOS imdat sinyali nedir?',
8
- answer: "Sinyal '... --- ...' şeklindedir (üç nokta, üç çizgi, üç nokta). Acil bir durumu belirtmek için harfler arasında boşluk bırakılmadan sürekli olarak iletilir.",
9
+ answer: "Sinyal '... −−− ...' şeklindedir (üç nokta, üç çizgi, üç nokta). Acil bir durumu belirtmek için harfler arasında boşluk bırakılmadan sürekli olarak iletilir.",
9
10
  },
10
11
  {
11
12
  question: 'Fener neden tarayıcımda çalışmıyor?',
@@ -91,15 +92,11 @@ export const content: ToolLocaleContent<MorseBeaconUI> = {
91
92
  title: 'Mors Feneri: Taktik SOS Vericisi',
92
93
  description: 'Cihazınızı bir Mors iletim istasyonuna dönüştürün. Flaşı ve ekranı acil durum ışık sinyalleri ve taktik iletişim olarak kullanın.',
93
94
  ui,
94
- faqTitle: 'Sıkça Sorulan Sorular',
95
+
95
96
  faq: faqData,
96
97
  howTo: howToData,
97
- bibliographyTitle: 'Kaynaklar',
98
- bibliography: [
99
- { name: 'ITU-R M.1677-1 — Uluslararası Mors Alfabesi', url: 'https://www.itu.int/dms_pubrec/itu-r/rec/m/R-REC-M.1677-1-200910-I!!PDF-E.pdf' },
100
- { name: 'W3C MediaCapture Image — Torch', url: 'https://w3c.github.io/mediacapture-image/#torch' },
101
- { name: 'Mors Alfabesi — Vikipedi', url: 'https://tr.wikipedia.org/wiki/Mors_alfabesi' },
102
- ],
98
+
99
+ bibliography,
103
100
  schemas: [faqSchema, howToSchema, appSchema],
104
101
  seo: [
105
102
  {
@@ -124,7 +121,7 @@ export const content: ToolLocaleContent<MorseBeaconUI> = {
124
121
  {
125
122
  icon: 'mdi:flash-alert',
126
123
  title: 'SOS Acil Durum Modu',
127
- description: "'SOS Döngüsü' düğmesi sürekli olarak ··· --- ··· dizisini iletir. Bu sinyal evrensel olarak bir yardım çağrısı olarak kabul edilir ve LED fenerin yüksek kontrastı sayesinde belirli koşullar altında gün ışığında bile çok uzak mesafelerden görülebilir.",
124
+ description: "'SOS Döngüsü' düğmesi sürekli olarak ··· −−− ··· dizisini iletir. Bu sinyal evrensel olarak bir yardım çağrısı olarak kabul edilir ve LED fenerin yüksek kontrastı sayesinde belirli koşullar altında gün ışığında bile çok uzak mesafelerden görülebilir.",
128
125
  points: [],
129
126
  },
130
127
  ],
@@ -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 { MorseBeaconUI } from '../ui';
@@ -5,7 +6,7 @@ import type { MorseBeaconUI } from '../ui';
5
6
  const faqData = [
6
7
  {
7
8
  question: '摩尔斯电码中的 SOS 求救信号是什么?',
8
- answer: "信号是 '... --- ...'(三短、三长、三短)。它是连续发送的,字母之间没有空格,表示紧急情况。",
9
+ answer: "信号是 '... −−− ...'(三短、三长、三短)。它是连续发送的,字母之间没有空格,表示紧急情况。",
9
10
  },
10
11
  {
11
12
  question: '为什么我的浏览器中闪光灯不工作?',
@@ -36,7 +37,7 @@ const howToData = [
36
37
  },
37
38
  {
38
39
  name: '开始传输',
39
- text: '按下“传输”,系统将根据摩尔斯标准将文本转换为自动光脉冲。',
40
+ text: '按下"传输",系统将根据摩尔斯标准将文本转换为自动光脉冲。',
40
41
  },
41
42
  ];
42
43
 
@@ -91,15 +92,11 @@ export const content: ToolLocaleContent<MorseBeaconUI> = {
91
92
  title: '摩尔斯信标:战术 SOS 发射器',
92
93
  description: '将您的设备变成摩尔斯电码传输站。使用闪光灯和屏幕作为紧急光信号和战术通信。',
93
94
  ui,
94
- faqTitle: '常见问题',
95
+
95
96
  faq: faqData,
96
97
  howTo: howToData,
97
- bibliographyTitle: '参考文献',
98
- bibliography: [
99
- { name: 'ITU-R M.1677-1 — 国际摩尔斯电码', url: 'https://www.itu.int/dms_pubrec/itu-r/rec/m/R-REC-M.1677-1-200910-I!!PDF-E.pdf' },
100
- { name: 'W3C MediaCapture Image — Torch', url: 'https://w3c.github.io/mediacapture-image/#torch' },
101
- { name: '摩尔斯电码 — 维基百科', url: 'https://zh.wikipedia.org/wiki/%E6%91%A9%E5%B0%94%E6%96%AF%E7%94%B5%E7%A0%81' },
102
- ],
98
+
99
+ bibliography,
103
100
  schemas: [faqSchema, howToSchema, appSchema],
104
101
  seo: [
105
102
  {
@@ -124,7 +121,7 @@ export const content: ToolLocaleContent<MorseBeaconUI> = {
124
121
  {
125
122
  icon: 'mdi:flash-alert',
126
123
  title: 'SOS 紧急模式',
127
- description: "SOS 循环”按钮持续发送 ··· --- ··· 序列。该信号是全球公认的求救信号,得益于 LED 闪光灯的高对比度,在某些条件下的白天,即使在很远的地方也可以看到。",
124
+ description: `"SOS 循环"按钮持续发送 ··· \u2212\u2212\u2212 ··· 序列。该信号是全球公认的求救信号,得益于 LED 闪光灯的高对比度,在某些条件下的白天,即使在很远的地方也可以看到。`,
128
125
  points: [],
129
126
  },
130
127
  ],
@@ -9,6 +9,7 @@ interface Props {
9
9
 
10
10
  const { locale = 'es' } = Astro.props;
11
11
  const content = await morseBeacon.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 { passwordGenerator } from './index';
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 passwordGenerator.i18n[locale]?.();
3
+ import { bibliography } from './bibliography';
12
4
  ---
13
5
 
14
- {content && <SharedBibliography links={content.bibliography} />}
6
+ <SharedBibliography links={bibliography} />
@@ -0,0 +1,8 @@
1
+ import type { BibliographyEntry } from '../../types';
2
+
3
+ export const bibliography: BibliographyEntry[] = [
4
+ { name: 'Web Cryptography API - MDN Web Docs', url: 'https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API' },
5
+ { name: 'NIST SP 800-63B: Digital Identity Guidelines', url: 'https://pages.nist.gov/800-63-3/sp800-63b.html' },
6
+ { name: 'Password - Wikipedia', url: 'https://en.wikipedia.org/wiki/Password' },
7
+ { name: 'Have I Been Pwned - Check if your password was exposed', url: 'https://haveibeenpwned.com/Passwords' },
8
+ ];
@@ -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,8 +9,8 @@ const faqData = [
8
9
  answer: 'Ja, solange der Generator clientseitig arbeitet. Unser Tool generiert Passwörter lokal in Ihrem Browser unter Verwendung kryptografisch sicherer Algorithmen. Ihr Passwort wird niemals über das Internet gesendet oder auf einem Server gespeichert.',
9
10
  },
10
11
  {
11
- question: 'Was macht ein Passwort hacksicher“?',
12
- answer: 'Der Schlüssel ist Entropie (Zufälligkeit). Eine Mischung aus Groß- und Kleinschreibung, Zahlen und Sonderzeichen in Kombination mit einer Mindestlänge von 1216 Zeichen macht einen Brute-Force-Angriff mit aktueller Technologie praktisch unmöglich.',
12
+ question: 'Was macht ein Passwort "hacksicher"?',
13
+ answer: 'Der Schlüssel ist Entropie (Zufälligkeit). Eine Mischung aus Groß- und Kleinschreibung, Zahlen und Sonderzeichen in Kombination mit einer Mindestlänge von 12-16 Zeichen macht einen Brute-Force-Angriff mit aktueller Technologie praktisch unmöglich.',
13
14
  },
14
15
  {
15
16
  question: 'Warum sollte man gängige Wörter oder Daten vermeiden?',
@@ -32,7 +33,7 @@ const howToData = [
32
33
  },
33
34
  {
34
35
  name: 'Passwort generieren',
35
- text: 'Klicken Sie auf die Schaltfläche Generieren“. Jeder Klick erzeugt eine einzigartige Kombination mit hoher Entropie basierend auf kryptografischen Algorithmen.',
36
+ text: 'Klicken Sie auf die Schaltfläche "Generieren". Jeder Klick erzeugt eine einzigartige Kombination mit hoher Entropie basierend auf kryptografischen Algorithmen.',
36
37
  },
37
38
  {
38
39
  name: 'Mit einem Klick kopieren',
@@ -89,16 +90,11 @@ export const content: ToolLocaleContent<PasswordGeneratorUI> = {
89
90
  title: 'Sicherer Zufallspasswort Generator',
90
91
  description: 'Erstellen Sie sofort starke, hacksichere Passwörter. Kostenloses Cybersecurity-Tool zum Generieren zufälliger, sicherer Schlüssel.',
91
92
  ui,
92
- faqTitle: 'Häufig gestellte Fragen',
93
+
93
94
  faq: faqData,
94
95
  howTo: howToData,
95
- bibliographyTitle: 'Referenzen',
96
- bibliography: [
97
- { name: 'Web Cryptography API — MDN Web Docs', url: 'https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API' },
98
- { name: 'NIST SP 800-63B: Digital Identity Guidelines', url: 'https://pages.nist.gov/800-63-3/sp800-63b.html' },
99
- { name: 'Passwort — Wikipedia', url: 'https://de.wikipedia.org/wiki/Passwort' },
100
- { name: 'Have I Been Pwned — Prüfen Sie, ob Ihr Passwort geleakt wurde', 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: 'Ihr Passwort ist die einzige Barriere zwischen Ihren persönlichen Daten (Bankwesen, Medizin, Fotos) und einem Cyberkriminellen. Dennoch verlassen sich Durchschnittsnutzer immer noch auf vorhersehbare Muster wie 123456 oder Haustiernamen, die in <strong>weniger als einer Sekunde</strong> geknackt werden können.',
107
+ html: 'Ihr Passwort ist die einzige Barriere zwischen Ihren persönlichen Daten (Bankwesen, Medizin, Fotos) und einem Cyberkriminellen. Dennoch verlassen sich Durchschnittsnutzer immer noch auf vorhersehbare Muster wie "123456" oder Haustiernamen, die in <strong>weniger als einer Sekunde</strong> geknackt werden können.',
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: 'Der Mythos der Ersetzung',
149
- description: 'Das Ersetzen von a durch „@“ oder e durch 3 (Leetspeak) täuscht niemanden. Moderne Wörterbuchangriffe enthalten diese Variationen bereits automatisch. Vermeiden Sie erkennbare Wörter.',
145
+ description: 'Das Ersetzen von "a" durch "@" oder "e" durch "3" (Leetspeak) täuscht niemanden. Moderne Wörterbuchangriffe enthalten diese Variationen bereits automatisch. Vermeiden Sie erkennbare Wörter.',
150
146
  points: [],
151
147
  },
152
148
  {
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { ToolLocaleContent } from '../../../types';
2
3
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
3
4
  import type { PasswordGeneratorUI } from '../ui';
@@ -89,16 +90,11 @@ export const content: ToolLocaleContent<PasswordGeneratorUI> = {
89
90
  title: 'Secure Random Password Generator',
90
91
  description: 'Create strong, hack-proof passwords instantly. Free cybersecurity tool to generate random, secure keys.',
91
92
  ui,
92
- faqTitle: 'Frequently Asked Questions',
93
+
93
94
  faq: faqData,
94
95
  howTo: howToData,
95
- bibliographyTitle: 'References',
96
- bibliography: [
97
- { name: 'Web Cryptography API — MDN Web Docs', url: 'https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API' },
98
- { name: 'NIST SP 800-63B: Digital Identity Guidelines', url: 'https://pages.nist.gov/800-63-3/sp800-63b.html' },
99
- { name: 'Password — Wikipedia', url: 'https://en.wikipedia.org/wiki/Password' },
100
- { name: 'Have I Been Pwned — Check if your password was exposed', url: 'https://haveibeenpwned.com/Passwords' },
101
- ],
96
+
97
+ bibliography,
102
98
  schemas: [faqSchema, howToSchema, appSchema],
103
99
  seo: [
104
100
  {
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { ToolLocaleContent } from '../../../types';
2
3
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
3
4
  import type { PasswordGeneratorUI } from '../ui';
@@ -89,16 +90,11 @@ export const content: ToolLocaleContent<PasswordGeneratorUI> = {
89
90
  title: 'Generador de Contraseñas Seguras y Aleatorias',
90
91
  description: 'Crea contraseñas robustas e imposibles de hackear al instante. Herramienta gratuita de ciberseguridad para generar claves aleatorias y seguras.',
91
92
  ui,
92
- faqTitle: 'Preguntas Frecuentes',
93
+
93
94
  faq: faqData,
94
95
  howTo: howToData,
95
- bibliographyTitle: 'Referencias',
96
- bibliography: [
97
- { name: 'Web Cryptography API — MDN Web Docs', url: 'https://developer.mozilla.org/es/docs/Web/API/Web_Crypto_API' },
98
- { name: 'NIST SP 800-63B: Digital Identity Guidelines', url: 'https://pages.nist.gov/800-63-3/sp800-63b.html' },
99
- { name: 'Contraseña — Wikipedia', url: 'https://es.wikipedia.org/wiki/Contrase%C3%B1a' },
100
- { name: 'Have I Been Pwned — Comprueba si tu contraseña fue expuesta', url: 'https://haveibeenpwned.com/Passwords' },
101
- ],
96
+
97
+ bibliography,
102
98
  schemas: [faqSchema, howToSchema, appSchema],
103
99
  seo: [
104
100
  {
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { ToolLocaleContent } from '../../../types';
2
3
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
3
4
  import type { PasswordGeneratorUI } from '../ui';
@@ -89,16 +90,11 @@ export const content: ToolLocaleContent<PasswordGeneratorUI> = {
89
90
  title: 'Générateur de mots de passe sécurisés et aléatoires',
90
91
  description: 'Créez des mots de passe robustes et impossibles à pirater instantanément. Outil de cybersécurité gratuit pour générer des clés aléatoires et sécurisées.',
91
92
  ui,
92
- faqTitle: 'Questions fréquentes',
93
+
93
94
  faq: faqData,
94
95
  howTo: howToData,
95
- bibliographyTitle: 'Références',
96
- bibliography: [
97
- { name: 'API Web Cryptography — MDN Web Docs', url: 'https://developer.mozilla.org/fr/docs/Web/API/Web_Crypto_API' },
98
- { name: 'NIST SP 800-63B : Lignes directrices sur l\'identité numérique', url: 'https://pages.nist.gov/800-63-3/sp800-63b.html' },
99
- { name: 'Mot de passe — Wikipédia', url: 'https://fr.wikipedia.org/wiki/Mot_de_passe' },
100
- { name: 'Have I Been Pwned — Vérifiez si votre mot de passe a été exposé', url: 'https://haveibeenpwned.com/Passwords' },
101
- ],
96
+
97
+ bibliography,
102
98
  schemas: [faqSchema, howToSchema, appSchema],
103
99
  seo: [
104
100
  {
@@ -122,7 +118,7 @@ export const content: ToolLocaleContent<PasswordGeneratorUI> = {
122
118
  },
123
119
  {
124
120
  icon: 'mdi:flask',
125
- title: 'La solution : entropie pure',
121
+ title: 'La solution: entropie pure',
126
122
  description: 'L\'entropie mesure le désordre ou l\'imprévisibilité. Plus l\'entropie (en bits) est élevée, plus un ordinateur a besoin de temps pour la craquer. Cet outil utilise crypto.getRandomValues(), une API du navigateur qui génère des nombres aléatoires cryptographiquement sécurisés, contrairement à Math.random() qui est prévisible.',
127
123
  points: [],
128
124
  },
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { ToolLocaleContent } from '../../../types';
2
3
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
3
4
  import type { PasswordGeneratorUI } from '../ui';
@@ -89,16 +90,11 @@ export const content: ToolLocaleContent<PasswordGeneratorUI> = {
89
90
  title: 'Pembuat Kata Sandi Acak Aman',
90
91
  description: 'Buat kata sandi yang kuat dan tahan peretas secara instan. Alat keamanan siber gratis untuk menghasilkan kunci acak dan aman.',
91
92
  ui,
92
- faqTitle: 'Pertanyaan yang Sering Diajukan',
93
+
93
94
  faq: faqData,
94
95
  howTo: howToData,
95
- bibliographyTitle: 'Referensi',
96
- bibliography: [
97
- { name: 'Web Cryptography API — MDN Web Docs', url: 'https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API' },
98
- { name: 'NIST SP 800-63B: Digital Identity Guidelines', url: 'https://pages.nist.gov/800-63-3/sp800-63b.html' },
99
- { name: 'Password — Wikipedia', url: 'https://id.wikipedia.org/wiki/Kata_sandi' },
100
- { name: 'Have I Been Pwned — Periksa apakah kata sandi Anda terekspos', url: 'https://haveibeenpwned.com/Passwords' },
101
- ],
96
+
97
+ bibliography,
102
98
  schemas: [faqSchema, howToSchema, appSchema],
103
99
  seo: [
104
100
  {
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { ToolLocaleContent } from '../../../types';
2
3
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
3
4
  import type { PasswordGeneratorUI } from '../ui';
@@ -89,16 +90,11 @@ export const content: ToolLocaleContent<PasswordGeneratorUI> = {
89
90
  title: 'Generatore di Password Casuali Sicure',
90
91
  description: 'Crea istantaneamente password forti e a prova di hacker. Strumento gratuito di cybersecurity per generare chiavi casuali e sicure.',
91
92
  ui,
92
- faqTitle: 'Domande Frequenti',
93
+
93
94
  faq: faqData,
94
95
  howTo: howToData,
95
- bibliographyTitle: 'Riferimenti',
96
- bibliography: [
97
- { name: 'Web Cryptography API — MDN Web Docs', url: 'https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API' },
98
- { name: 'NIST SP 800-63B: Digital Identity Guidelines', url: 'https://pages.nist.gov/800-63-3/sp800-63b.html' },
99
- { name: 'Password — Wikipedia', url: 'https://it.wikipedia.org/wiki/Password' },
100
- { name: 'Have I Been Pwned — Controlla se la tua password è stata esposta', url: 'https://haveibeenpwned.com/Passwords' },
101
- ],
96
+
97
+ bibliography,
102
98
  schemas: [faqSchema, howToSchema, appSchema],
103
99
  seo: [
104
100
  {
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { ToolLocaleContent } from '../../../types';
2
3
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
3
4
  import type { PasswordGeneratorUI } from '../ui';
@@ -89,16 +90,11 @@ export const content: ToolLocaleContent<PasswordGeneratorUI> = {
89
90
  title: '安全なランダムパスワード生成ツール',
90
91
  description: '強力でハッカーに強いパスワードを即座に作成します。ランダムで安全なキーを生成するための無料のサイバーセキュリティツール。',
91
92
  ui,
92
- faqTitle: 'よくある質問',
93
+
93
94
  faq: faqData,
94
95
  howTo: howToData,
95
- bibliographyTitle: '参考文献',
96
- bibliography: [
97
- { name: 'Web Cryptography API — MDN Web Docs', url: 'https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API' },
98
- { name: 'NIST SP 800-63B: Digital Identity Guidelines', url: 'https://pages.nist.gov/800-63-3/sp800-63b.html' },
99
- { name: 'パスワード — Wikipedia', url: 'https://ja.wikipedia.org/wiki/%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89' },
100
- { name: 'Have I Been Pwned — パスワードの漏洩を確認', url: 'https://haveibeenpwned.com/Passwords' },
101
- ],
96
+
97
+ bibliography,
102
98
  schemas: [faqSchema, howToSchema, appSchema],
103
99
  seo: [
104
100
  {
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { ToolLocaleContent } from '../../../types';
2
3
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
3
4
  import type { PasswordGeneratorUI } from '../ui';
@@ -89,16 +90,11 @@ export const content: ToolLocaleContent<PasswordGeneratorUI> = {
89
90
  title: '안전한 무작위 비밀번호 생성기',
90
91
  description: '강력하고 해킹에 강한 비밀번호를 즉시 생성하세요. 무작위의 안전한 키를 생성하기 위한 무료 사이버 보안 도구입니다.',
91
92
  ui,
92
- faqTitle: '자주 묻는 질문',
93
+
93
94
  faq: faqData,
94
95
  howTo: howToData,
95
- bibliographyTitle: '참고 문헌',
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: 디지털 ID 가이드라인', url: 'https://pages.nist.gov/800-63-3/sp800-63b.html' },
99
- { name: '비밀번호 — 위키백과', url: 'https://ko.wikipedia.org/wiki/%EB%B9%84%EB%B0%80%EB%B2%88%ED%98%B8' },
100
- { name: 'Have I Been Pwned — 비밀번호 유출 여부 확인', url: 'https://haveibeenpwned.com/Passwords' },
101
- ],
96
+
97
+ bibliography,
102
98
  schemas: [faqSchema, howToSchema, appSchema],
103
99
  seo: [
104
100
  {
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { ToolLocaleContent } from '../../../types';
2
3
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
3
4
  import type { PasswordGeneratorUI } from '../ui';
@@ -89,16 +90,11 @@ export const content: ToolLocaleContent<PasswordGeneratorUI> = {
89
90
  title: 'Veilige willekeurige wachtwoordgenerator',
90
91
  description: 'Maak direct sterke, hackerbestendige wachtwoorden. Gratis cybersecurity-tool om willekeurige, veilige sleutels te genereren.',
91
92
  ui,
92
- faqTitle: 'Veelgestelde Vragen',
93
+
93
94
  faq: faqData,
94
95
  howTo: howToData,
95
- bibliographyTitle: 'Referenties',
96
- bibliography: [
97
- { name: 'Web Cryptography API — MDN Web Docs', url: 'https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API' },
98
- { name: 'NIST SP 800-63B: Digital Identity Guidelines', url: 'https://pages.nist.gov/800-63-3/sp800-63b.html' },
99
- { name: 'Wachtwoord — Wikipedia', url: 'https://nl.wikipedia.org/wiki/Wachtwoord' },
100
- { name: 'Have I Been Pwned — Controleer of uw wachtwoord is uitgelekt', url: 'https://haveibeenpwned.com/Passwords' },
101
- ],
96
+
97
+ bibliography,
102
98
  schemas: [faqSchema, howToSchema, appSchema],
103
99
  seo: [
104
100
  {
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { ToolLocaleContent } from '../../../types';
2
3
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
3
4
  import type { PasswordGeneratorUI } from '../ui';
@@ -89,16 +90,11 @@ export const content: ToolLocaleContent<PasswordGeneratorUI> = {
89
90
  title: 'Generator bezpiecznych losowych haseł',
90
91
  description: 'Błyskawicznie twórz silne, odporne na hakerów hasła. Darmowe narzędzie do cyberbezpieczeństwa do generowania losowych, bezpiecznych kluczy.',
91
92
  ui,
92
- faqTitle: 'Często zadawane pytania',
93
+
93
94
  faq: faqData,
94
95
  howTo: howToData,
95
- bibliographyTitle: 'Źródła',
96
- bibliography: [
97
- { name: 'Web Cryptography API — MDN Web Docs', url: 'https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API' },
98
- { name: 'NIST SP 800-63B: Digital Identity Guidelines', url: 'https://pages.nist.gov/800-63-3/sp800-63b.html' },
99
- { name: 'Hasło — Wikipedia', url: 'https://pl.wikipedia.org/wiki/Has%C5%82o' },
100
- { name: 'Have I Been Pwned — Sprawdź, czy Twoje hasło zostało ujawnione', 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: 'Twoje hasło to jedyna barierą między Twoimi danymi osobowymi (bankowość, dokumentacja medyczna, zdjęcia) a cyberprzestępcą. Mimo to przeciętny użytkownik wciąż polega na przewidywalnych wzorcach, takich jak 123456 lub imiona zwierząt, które można złamać w <strong>mniej niż sekundę</strong>.',
107
+ html: 'Twoje hasło to jedyna barierą między Twoimi danymi osobowymi (bankowość, dokumentacja medyczna, zdjęcia) a cyberprzestępcą. Mimo to przeciętny użytkownik wciąż polega na przewidywalnych wzorcach, takich jak "123456" lub imiona zwierząt, które można złamać w <strong>mniej niż sekundę</strong>.',
112
108
  },
113
109
  {
114
110
  type: 'comparative',
@@ -123,7 +119,7 @@ export const content: ToolLocaleContent<PasswordGeneratorUI> = {
123
119
  {
124
120
  icon: 'mdi:flask',
125
121
  title: 'Rozwiązanie: Czysta entropia',
126
- description: 'Entropia mierzy nieporządek lub nieprzewidywalność. Im wyższa entropia (liczba bitów), tym więcej czasu komputer potrzebuje na jej złamanie. To narzędzie wykorzystuje crypto.getRandomValues() interfejs API przeglądarki, który generuje kryptograficznie bezpieczne liczby losowe, w przeciwieństwie do Math.random(), który jest przewidywalny.',
122
+ description: 'Entropia mierzy nieporządek lub nieprzewidywalność. Im wyższa entropia (liczba bitów), tym więcej czasu komputer potrzebuje na jej złamanie. To narzędzie wykorzystuje crypto.getRandomValues() - interfejs API przeglądarki, który generuje kryptograficznie bezpieczne liczby losowe, w przeciwieństwie do Math.random(), który jest przewidywalny.',
127
123
  points: [],
128
124
  },
129
125
  ],
@@ -146,7 +142,7 @@ export const content: ToolLocaleContent<PasswordGeneratorUI> = {
146
142
  {
147
143
  icon: 'mdi:eye-off',
148
144
  title: 'Mit podstawiania znaków',
149
- description: 'Zastępowanie a znakiem „@” lub e cyfrą 3 (Leetspeak) nikogo nie zwiedzie. Nowoczesne słowniki ataków automatycznie uwzględniają te warianty. Unikaj używania łatwo rozpoznawalnych słów.',
145
+ description: 'Zastępowanie "a" znakiem "@" lub "e" cyfrą "3" (Leetspeak) nikogo nie zwiedzie. Nowoczesne słowniki ataków automatycznie uwzględniają te warianty. Unikaj używania łatwo rozpoznawalnych słów.',
150
146
  points: [],
151
147
  },
152
148
  {
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { ToolLocaleContent } from '../../../types';
2
3
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
3
4
  import type { PasswordGeneratorUI } from '../ui';
@@ -89,16 +90,11 @@ export const content: ToolLocaleContent<PasswordGeneratorUI> = {
89
90
  title: 'Gerador de Passwords Aleatórias Seguras',
90
91
  description: 'Crie passwords fortes e à prova de hackers instantaneamente. Ferramenta de cibersegurança gratuita para gerar chaves aleatórias e seguras.',
91
92
  ui,
92
- faqTitle: 'Perguntas Frequentes',
93
+
93
94
  faq: faqData,
94
95
  howTo: howToData,
95
- bibliographyTitle: 'Referências',
96
- bibliography: [
97
- { name: 'Web Cryptography API — MDN Web Docs', url: 'https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API' },
98
- { name: 'NIST SP 800-63B: Digital Identity Guidelines', url: 'https://pages.nist.gov/800-63-3/sp800-63b.html' },
99
- { name: 'Password — Wikipédia', url: 'https://pt.wikipedia.org/wiki/Palavra-passe' },
100
- { name: 'Have I Been Pwned — Verifique se a sua password foi exposta', url: 'https://haveibeenpwned.com/Passwords' },
101
- ],
96
+
97
+ bibliography,
102
98
  schemas: [faqSchema, howToSchema, appSchema],
103
99
  seo: [
104
100
  {
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { ToolLocaleContent } from '../../../types';
2
3
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
3
4
  import type { PasswordGeneratorUI } from '../ui';
@@ -17,7 +18,7 @@ const faqData = [
17
18
  },
18
19
  {
19
20
  question: 'Должен ли я запоминать все свои пароли?',
20
- answer: 'Не рекомендуется. Идеальный подход использовать менеджер паролей (например, Bitwarden, 1Password или встроенный в браузер) для хранения этих длинных случайных паролей, чтобы вам нужно было помнить только один надежный мастер-пароль.',
21
+ answer: 'Не рекомендуется. Идеальный подход - использовать менеджер паролей (например, Bitwarden, 1Password или встроенный в браузер) для хранения этих длинных случайных паролей, чтобы вам нужно было помнить только один надежный мастер-пароль.',
21
22
  },
22
23
  ];
23
24
 
@@ -89,16 +90,11 @@ export const content: ToolLocaleContent<PasswordGeneratorUI> = {
89
90
  title: 'Генератор надежных случайных паролей',
90
91
  description: 'Мгновенно создавайте надежные, устойчивые к взлому пароли. Бесплатный инструмент кибербезопасности для генерации случайных защищенных ключей.',
91
92
  ui,
92
- faqTitle: 'Часто задаваемые вопросы',
93
+
93
94
  faq: faqData,
94
95
  howTo: howToData,
95
- bibliographyTitle: 'Источники',
96
- bibliography: [
97
- { name: 'Web Cryptography API — MDN Web Docs', url: 'https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API' },
98
- { name: 'NIST SP 800-63B: Digital Identity Guidelines', url: 'https://pages.nist.gov/800-63-3/sp800-63b.html' },
99
- { name: 'Пароль — Википедия', url: 'https://ru.wikipedia.org/wiki/%D0%9F%D0%B0%D1%80%D0%BE%D0%BB%D1%8C' },
100
- { name: 'Have I Been Pwned — Проверьте, не был ли ваш пароль скомпрометирован', url: 'https://haveibeenpwned.com/Passwords' },
101
- ],
96
+
97
+ bibliography,
102
98
  schemas: [faqSchema, howToSchema, appSchema],
103
99
  seo: [
104
100
  {
@@ -108,7 +104,7 @@ export const content: ToolLocaleContent<PasswordGeneratorUI> = {
108
104
  },
109
105
  {
110
106
  type: 'paragraph',
111
- html: 'Ваш пароль единственный барьер между вашими личными данными (банковскими счетами, медицинскими картами, фотографиями) и киберпреступником. Тем не менее, обычный пользователь все еще полагается на предсказуемые шаблоны вроде «123456» или клички домашних животных, которые можно взломать <strong>менее чем за секунду</strong>.',
107
+ html: 'Ваш пароль - единственный барьер между вашими личными данными (банковскими счетами, медицинскими картами, фотографиями) и киберпреступником. Тем не менее, обычный пользователь все еще полагается на предсказуемые шаблоны вроде "123456" или клички домашних животных, которые можно взломать <strong>менее чем за секунду</strong>.',
112
108
  },
113
109
  {
114
110
  type: 'comparative',
@@ -146,12 +142,12 @@ export const content: ToolLocaleContent<PasswordGeneratorUI> = {
146
142
  {
147
143
  icon: 'mdi:eye-off',
148
144
  title: 'Миф о замене символов',
149
- description: 'Замена «a» на «@» или «e» на «3» (Leetspeak) никого не обманет. Современные словари атак уже автоматически включают эти варианты. Избегайте использования узнаваемых слов.',
145
+ description: 'Замена "a" на "@" или "e" на "3" (Leetspeak) никого не обманет. Современные словари атак уже автоматически включают эти варианты. Избегайте использования узнаваемых слов.',
150
146
  points: [],
151
147
  },
152
148
  {
153
149
  icon: 'mdi:key-chain',
154
- title: 'Разные сайты разные ключи',
150
+ title: 'Разные сайты: разные ключи',
155
151
  description: 'Если вы используете один и тот же пароль для электронной почты и форума, и форум взломают, теперь у преступников есть доступ к вашей почте. Используйте менеджер паролей (например, Bitwarden или 1Password), чтобы он запоминал сложные пароли за вас.',
156
152
  points: [],
157
153
  },
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { ToolLocaleContent } from '../../../types';
2
3
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
3
4
  import type { PasswordGeneratorUI } from '../ui';
@@ -89,16 +90,11 @@ export const content: ToolLocaleContent<PasswordGeneratorUI> = {
89
90
  title: 'Säker slumpmässig lösenordsgenerator',
90
91
  description: 'Skapa starka, hacksäkra lösenord omedelbart. Gratis cybersäkerhetsverktyg för att generera slumpmässiga, säkra nycklar.',
91
92
  ui,
92
- faqTitle: 'Vanliga frågor',
93
+
93
94
  faq: faqData,
94
95
  howTo: howToData,
95
- bibliographyTitle: 'Referenser',
96
- bibliography: [
97
- { name: 'Web Cryptography API — MDN Web Docs', url: 'https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API' },
98
- { name: 'NIST SP 800-63B: Digital Identity Guidelines', url: 'https://pages.nist.gov/800-63-3/sp800-63b.html' },
99
- { name: 'Lösenord — Wikipedia', url: 'https://sv.wikipedia.org/wiki/L%C3%B6senord' },
100
- { name: 'Have I Been Pwned — Kontrollera om ditt lösenord har exponerats', url: 'https://haveibeenpwned.com/Passwords' },
101
- ],
96
+
97
+ bibliography,
102
98
  schemas: [faqSchema, howToSchema, appSchema],
103
99
  seo: [
104
100
  {
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { ToolLocaleContent } from '../../../types';
2
3
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
3
4
  import type { PasswordGeneratorUI } from '../ui';
@@ -89,16 +90,11 @@ export const content: ToolLocaleContent<PasswordGeneratorUI> = {
89
90
  title: 'Güvenli Rastgele Şifre Oluşturucu',
90
91
  description: 'Anında güçlü, hackerlara karşı dayanıklı şifreler oluşturun. Rastgele, güvenli anahtarlar oluşturmak için ücretsiz siber güvenlik aracı.',
91
92
  ui,
92
- faqTitle: 'Sıkça Sorulan Sorular',
93
+
93
94
  faq: faqData,
94
95
  howTo: howToData,
95
- bibliographyTitle: 'Kaynaklar',
96
- bibliography: [
97
- { name: 'Web Cryptography API — MDN Web Docs', url: 'https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API' },
98
- { name: 'NIST SP 800-63B: Digital Identity Guidelines', url: 'https://pages.nist.gov/800-63-3/sp800-63b.html' },
99
- { name: 'Şifre — Vikipedi', url: 'https://tr.wikipedia.org/wiki/Parola' },
100
- { name: 'Have I Been Pwned — Şifrenizin ifşa olup olmadığını kontrol edin', url: 'https://haveibeenpwned.com/Passwords' },
101
- ],
96
+
97
+ bibliography,
102
98
  schemas: [faqSchema, howToSchema, appSchema],
103
99
  seo: [
104
100
  {