@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 { SeoContentOptimizerUI } from '../ui';
@@ -17,7 +18,7 @@ const faqData = [
17
18
  },
18
19
  {
19
20
  question: 'Est-il compatible avec les critères Yoast SEO ?',
20
- answer: "Oui, nous appliquons des critères similaires à Yoast : longueur des phrases, distribution des paragraphes et hiérarchie des titres.",
21
+ answer: "Oui, nous appliquons des critères similaires à Yoast: longueur des phrases, distribution des paragraphes et hiérarchie des titres.",
21
22
  },
22
23
  ];
23
24
 
@@ -89,17 +90,14 @@ export const content: ToolLocaleContent<SeoContentOptimizerUI> = {
89
90
  title: 'Optimiseur de Contenu SEO',
90
91
  description: "Analysez la densité des mots-clés, la lisibilité et la structure HTML technique de vos textes en temps réel. Outil SEO gratuit et privé.",
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: 'Guide de démarrage SEO de Google', url: 'https://developers.google.com/search/docs/fundamentals/seo-starter-guide' },
98
- { name: 'Critères de lisibilité Yoast SEO', url: 'https://yoast.com/what-is-readability/' },
99
- ],
96
+
97
+ bibliography,
100
98
  schemas: [faqSchema, howToSchema, appSchema],
101
99
  seo: [
102
- { type: 'title', level: 2, text: 'Optimiseur de Contenu SEO : Mots-Clés, Lisibilité et Structure' },
100
+ { type: 'title', level: 2, text: 'Optimiseur de Contenu SEO: Mots-Clés, Lisibilité et Structure' },
103
101
  {
104
102
  type: 'paragraph',
105
103
  html: "La qualité du contenu ne se mesure plus seulement aux mots-clés inclus, mais à la façon dont vous structurez l'information pour qu'elle soit compréhensible à la fois par les humains et les robots de Google. Notre outil d'<strong>analyse SEO en temps réel</strong> vous offre un contrôle total sur la densité des mots-clés, la lisibilité des paragraphes et les éléments techniques HTML fondamentaux.",
@@ -130,7 +128,7 @@ export const content: ToolLocaleContent<SeoContentOptimizerUI> = {
130
128
  { type: 'title', level: 3, text: 'Analyse HTML Technique' },
131
129
  {
132
130
  type: 'paragraph',
133
- html: 'Collez votre code source pour vérifier les éléments clés : unicité du <strong>H1</strong>, présence de sous-titres H2/H3, images sans attribut <code>alt</code> et existence de la balise <code>title</code>. Tout le traitement se fait dans votre navigateur sans envoyer de données à un serveur.',
131
+ html: 'Collez votre code source pour vérifier les éléments clés: unicité du <strong>H1</strong>, présence de sous-titres H2/H3, images sans attribut <code>alt</code> et existence de la balise <code>title</code>. Tout le traitement se fait dans votre navigateur sans envoyer de données à un serveur.',
134
132
  },
135
133
  ],
136
134
  };
@@ -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 { SeoContentOptimizerUI } from '../ui';
@@ -89,14 +90,11 @@ export const content: ToolLocaleContent<SeoContentOptimizerUI> = {
89
90
  title: 'Pengoptimal Konten SEO',
90
91
  description: 'Analisis kepadatan kata kunci, keterbacaan, dan struktur HTML teknis teks Anda secara real-time. Alat SEO gratis dan pribadi.',
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: "Panduan Memulai SEO dari Google", url: 'https://developers.google.com/search/docs/fundamentals/seo-starter-guide?hl=id' },
98
- { name: 'Kriteria keterbacaan Yoast SEO', url: 'https://yoast.com/what-is-readability/' },
99
- ],
96
+
97
+ bibliography,
100
98
  schemas: [faqSchema, howToSchema, appSchema],
101
99
  seo: [
102
100
  { type: 'title', level: 2, text: 'Pengoptimal Konten SEO: Kata Kunci, Keterbacaan, dan Struktur' },
@@ -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 { SeoContentOptimizerUI } from '../ui';
@@ -89,14 +90,11 @@ export const content: ToolLocaleContent<SeoContentOptimizerUI> = {
89
90
  title: 'Ottimizzatore di Contenuti SEO',
90
91
  description: 'Analizza la densità delle parole chiave, la leggibilità e la struttura HTML tecnica dei tuoi testi in tempo reale. Strumento SEO gratuito e privato.',
91
92
  ui,
92
- faqTitle: 'Domande Frequenti',
93
+
93
94
  faq: faqData,
94
95
  howTo: howToData,
95
- bibliographyTitle: 'Riferimenti',
96
- bibliography: [
97
- { name: "Guida introduttiva di Google alla SEO", url: 'https://developers.google.com/search/docs/fundamentals/seo-starter-guide?hl=it' },
98
- { name: 'Criteri di leggibilità Yoast SEO', url: 'https://yoast.com/what-is-readability/' },
99
- ],
96
+
97
+ bibliography,
100
98
  schemas: [faqSchema, howToSchema, appSchema],
101
99
  seo: [
102
100
  { type: 'title', level: 2, text: 'Ottimizzatore di Contenuti SEO: Parole Chiave, Leggibilità e Struttura' },
@@ -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 { SeoContentOptimizerUI } from '../ui';
@@ -89,14 +90,11 @@ export const content: ToolLocaleContent<SeoContentOptimizerUI> = {
89
90
  title: 'SEOコンテンツ最適化ツール',
90
91
  description: 'テキストのキーワード密度、読みやすさ、テクニカルHTML構造をリアルタイムで分析します。サーバーにデータを送信しない、無料でプライバシーに配慮したSEOツールです。',
91
92
  ui,
92
- faqTitle: 'よくある質問',
93
+
93
94
  faq: faqData,
94
95
  howTo: howToData,
95
- bibliographyTitle: '参考文献',
96
- bibliography: [
97
- { name: 'Google SEOスターターガイド', url: 'https://developers.google.com/search/docs/fundamentals/seo-starter-guide?hl=ja' },
98
- { name: 'Yoast SEOの読みやすさ基準', url: 'https://yoast.com/what-is-readability/' },
99
- ],
96
+
97
+ bibliography,
100
98
  schemas: [faqSchema, howToSchema, appSchema],
101
99
  seo: [
102
100
  { type: 'title', level: 2, text: 'SEOコンテンツ最適化:キーワード、読みやすさ、階層構造' },
@@ -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 { SeoContentOptimizerUI } from '../ui';
@@ -89,14 +90,11 @@ export const content: ToolLocaleContent<SeoContentOptimizerUI> = {
89
90
  title: 'SEO 콘텐츠 최적화 도구',
90
91
  description: '텍스트의 키워드 밀도, 가독성 및 기술 HTML 구조를 실시간으로 분석하세요. 무료로 제공되는 개인정보 보호 SEO 도구입니다.',
91
92
  ui,
92
- faqTitle: '자주 묻는 질문',
93
+
93
94
  faq: faqData,
94
95
  howTo: howToData,
95
- bibliographyTitle: '참고 문헌',
96
- bibliography: [
97
- { name: 'Google 검색 엔진 최적화(SEO) 기본 가이드', url: 'https://developers.google.com/search/docs/fundamentals/seo-starter-guide?hl=ko' },
98
- { name: 'Yoast SEO 가독성 기준', url: 'https://yoast.com/what-is-readability/' },
99
- ],
96
+
97
+ bibliography,
100
98
  schemas: [faqSchema, howToSchema, appSchema],
101
99
  seo: [
102
100
  { type: 'title', level: 2, text: 'SEO 콘텐츠 최적화: 키워드, 가독성 및 구조' },
@@ -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 { SeoContentOptimizerUI } from '../ui';
@@ -89,14 +90,11 @@ export const content: ToolLocaleContent<SeoContentOptimizerUI> = {
89
90
  title: 'SEO Content Optimizer',
90
91
  description: 'Analyseer de zoekwoorddichtheid, leesbaarheid en technische HTML-structuur van uw teksten in realtime. Gratis en privé SEO-tool.',
91
92
  ui,
92
- faqTitle: 'Veelgestelde Vragen',
93
+
93
94
  faq: faqData,
94
95
  howTo: howToData,
95
- bibliographyTitle: 'Referenties',
96
- bibliography: [
97
- { name: "Google's SEO-starthandleiding", url: 'https://developers.google.com/search/docs/fundamentals/seo-starter-guide?hl=nl' },
98
- { name: 'Yoast SEO leesbaarheidscriteria', url: 'https://yoast.com/what-is-readability/' },
99
- ],
96
+
97
+ bibliography,
100
98
  schemas: [faqSchema, howToSchema, appSchema],
101
99
  seo: [
102
100
  { type: 'title', level: 2, text: 'SEO Content Optimizer: Zoekwoorden, Leesbaarheid en Structuur' },
@@ -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 { SeoContentOptimizerUI } from '../ui';
@@ -89,14 +90,11 @@ export const content: ToolLocaleContent<SeoContentOptimizerUI> = {
89
90
  title: 'Optymalizator Treści SEO',
90
91
  description: 'Analizuj gęstość słów kluczowych, czytelność i techniczną strukturę HTML swoich tekstów w czasie rzeczywistym. Darmowe i prywatne narzędzie SEO.',
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: "Wprowadzenie Google do SEO", url: 'https://developers.google.com/search/docs/fundamentals/seo-starter-guide?hl=pl' },
98
- { name: 'Kryteria czytelności Yoast SEO', url: 'https://yoast.com/what-is-readability/' },
99
- ],
96
+
97
+ bibliography,
100
98
  schemas: [faqSchema, howToSchema, appSchema],
101
99
  seo: [
102
100
  { type: 'title', level: 2, text: 'Optymalizator treści SEO: słowa kluczowe, czytelność i struktura' },
@@ -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 { SeoContentOptimizerUI } from '../ui';
@@ -89,14 +90,11 @@ export const content: ToolLocaleContent<SeoContentOptimizerUI> = {
89
90
  title: 'Otimizador de Conteúdo SEO',
90
91
  description: 'Analise a densidade de palavras-chave, legibilidade e estrutura HTML técnica dos seus textos em tempo real. Ferramenta de SEO gratuita e privada.',
91
92
  ui,
92
- faqTitle: 'Perguntas Frequentes',
93
+
93
94
  faq: faqData,
94
95
  howTo: howToData,
95
- bibliographyTitle: 'Referências',
96
- bibliography: [
97
- { name: "Guia de SEO para iniciantes do Google", url: 'https://developers.google.com/search/docs/fundamentals/seo-starter-guide?hl=pt-br' },
98
- { name: 'Critérios de legibilidade Yoast SEO', url: 'https://yoast.com/what-is-readability/' },
99
- ],
96
+
97
+ bibliography,
100
98
  schemas: [faqSchema, howToSchema, appSchema],
101
99
  seo: [
102
100
  { type: 'title', level: 2, text: 'Otimizador de Conteúdo SEO: Palavras-Chave, Legibilidade e Estrutura' },
@@ -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 { SeoContentOptimizerUI } from '../ui';
@@ -89,14 +90,11 @@ export const content: ToolLocaleContent<SeoContentOptimizerUI> = {
89
90
  title: 'Оптимизатор SEO контента',
90
91
  description: 'Анализируйте плотность ключевых слов, читабельность и техническую структуру HTML ваших текстов в режиме реального времени. Бесплатный и приватный SEO-инструмент.',
91
92
  ui,
92
- faqTitle: 'Часто задаваемые вопросы',
93
+
93
94
  faq: faqData,
94
95
  howTo: howToData,
95
- bibliographyTitle: 'Источники',
96
- bibliography: [
97
- { name: 'Руководство Google по поисковой оптимизации для начинающих', url: 'https://developers.google.com/search/docs/fundamentals/seo-starter-guide?hl=ru' },
98
- { name: 'Критерии читабельности Yoast SEO', url: 'https://yoast.com/what-is-readability/' },
99
- ],
96
+
97
+ bibliography,
100
98
  schemas: [faqSchema, howToSchema, appSchema],
101
99
  seo: [
102
100
  { type: 'title', level: 2, text: 'Оптимизатор SEO-контента: ключевые слова, читабельность и структура' },
@@ -120,7 +118,7 @@ export const content: ToolLocaleContent<SeoContentOptimizerUI> = {
120
118
  { type: 'title', level: 3, text: 'Читабельность в стиле Yoast' },
121
119
  {
122
120
  type: 'paragraph',
123
- html: 'Читабельность это косвенный, но решающий фактор ранжирования. Если пользователи уходят, потому что абзацы представляют собой бесконечные блоки текста, ваше <em>время пребывания на сайте</em> сокращается. Анализатор обнаруживает длинные предложения (более 20 слов), абзацы объемом более 150 слов и проверяет наличие подзаголовков.',
121
+ html: 'Читабельность - это косвенный, но решающий фактор ранжирования. Если пользователи уходят, потому что абзацы представляют собой бесконечные блоки текста, ваше <em>время пребывания на сайте</em> сокращается. Анализатор обнаруживает длинные предложения (более 20 слов), абзацы объемом более 150 слов и проверяет наличие подзаголовков.',
124
122
  },
125
123
  {
126
124
  type: 'tip',
@@ -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 { SeoContentOptimizerUI } from '../ui';
@@ -89,14 +90,11 @@ export const content: ToolLocaleContent<SeoContentOptimizerUI> = {
89
90
  title: 'SEO Content Optimizer',
90
91
  description: 'Analysera sökordsdensitet, läsbarhet och teknisk HTML-struktur i dina texter i realtid. Gratis och privat SEO-verktyg.',
91
92
  ui,
92
- faqTitle: 'Vanliga frågor',
93
+
93
94
  faq: faqData,
94
95
  howTo: howToData,
95
- bibliographyTitle: 'Referenser',
96
- bibliography: [
97
- { name: "Googles startguide för SEO", url: 'https://developers.google.com/search/docs/fundamentals/seo-starter-guide?hl=sv' },
98
- { name: 'Yoast SEO läsbarhetskriterier', url: 'https://yoast.com/what-is-readability/' },
99
- ],
96
+
97
+ bibliography,
100
98
  schemas: [faqSchema, howToSchema, appSchema],
101
99
  seo: [
102
100
  { type: 'title', level: 2, text: 'SEO Content Optimizer: Sökord, läsbarhet och struktur' },
@@ -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 { SeoContentOptimizerUI } from '../ui';
@@ -89,14 +90,11 @@ export const content: ToolLocaleContent<SeoContentOptimizerUI> = {
89
90
  title: 'SEO İçerik Optimize Edici',
90
91
  description: 'Metinlerinizin anahtar kelime yoğunluğunu, okunabilirliğini ve teknik HTML yapısını gerçek zamanlı olarak analiz edin. Ücretsiz ve gizlilik odaklı SEO 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: "Google'ın SEO Başlangıç Kılavuzu", url: 'https://developers.google.com/search/docs/fundamentals/seo-starter-guide?hl=tr' },
98
- { name: 'Yoast SEO okunabilirlik kriterleri', url: 'https://yoast.com/what-is-readability/' },
99
- ],
96
+
97
+ bibliography,
100
98
  schemas: [faqSchema, howToSchema, appSchema],
101
99
  seo: [
102
100
  { type: 'title', level: 2, text: 'SEO İçerik Optimize Edici: Anahtar Kelimeler, Okunabilirlik ve Yapı' },
@@ -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 { SeoContentOptimizerUI } from '../ui';
@@ -89,14 +90,11 @@ export const content: ToolLocaleContent<SeoContentOptimizerUI> = {
89
90
  title: 'SEO 内容优化工具',
90
91
  description: '实时分析文本的关键词密度、可读性和技术 HTML 结构。免费且私密的 SEO 工具。',
91
92
  ui,
92
- faqTitle: '常见问题',
93
+
93
94
  faq: faqData,
94
95
  howTo: howToData,
95
- bibliographyTitle: '参考文献',
96
- bibliography: [
97
- { name: 'Google SEO 入门指南', url: 'https://developers.google.com/search/docs/fundamentals/seo-starter-guide?hl=zh-cn' },
98
- { name: 'Yoast SEO 可读性标准', url: 'https://yoast.com/what-is-readability/' },
99
- ],
96
+
97
+ bibliography,
100
98
  schemas: [faqSchema, howToSchema, appSchema],
101
99
  seo: [
102
100
  { type: 'title', level: 2, text: 'SEO 内容优化:关键词、可读性和结构' },
@@ -9,6 +9,7 @@ interface Props {
9
9
 
10
10
  const { locale = 'es' } = Astro.props;
11
11
  const content = await seoContentOptimizer.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 { speedReader } 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 speedReader.i18n[locale]?.();
3
+ import { bibliography } from './bibliography';
12
4
  ---
13
5
 
14
- {content && <SharedBibliography links={content.bibliography} />}
6
+ <SharedBibliography links={bibliography} />
@@ -0,0 +1,10 @@
1
+ import type { BibliographyEntry } from '../../types';
2
+
3
+ export const bibliography: BibliographyEntry[] = [
4
+ { name: 'Rayner, K., et al. (2016). So much to read, so little time. Psychological Science in the Public Interest.', url: 'https://journals.sagepub.com/doi/full/10.1177/1529100615623267' },
5
+ { name: 'Forster, K. I. (1970). Visual perception of rapidly presented word sequences. Perception & Psychophysics.', url: 'https://link.springer.com/article/10.3758/BF03212522' },
6
+ { name: 'Öquist, G., & Goldstein, M. (2003). Towards an improved readability on mobile devices. Mobile HCI.', url: 'https://www.researchgate.net/publication/221063852_Towards_an_improved_readability_on_mobile_devices' },
7
+ { name: 'Juola, J. F., et al. (1982). Visual search and reading of rapid serial visual presentations. Perception & Psychophysics.', url: 'https://link.springer.com/article/10.3758/BF03202598' },
8
+ { name: 'Masson, M. E. J. (1983). Conceptual processing of text during rapid serial visual presentation. Journal of Educational Psychology.', url: 'https://psycnet.apa.org/record/1984-08638-001' },
9
+ { name: 'Saldana, D., & Greene, R. (2022). Reading effectiveness with RSVP apps. Reading Psychology.', url: 'https://www.tandfonline.com/doi/abs/10.1080/02702711.2022.2030000' },
10
+ ];
@@ -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 { SpeedReaderUI } from '../ui';
@@ -75,18 +76,11 @@ export const content: ToolLocaleContent<SpeedReaderUI> = {
75
76
  title: 'RSVP Speed Reader',
76
77
  description: 'Trainieren Sie Ihre Lesegeschwindigkeit auf bis zu 1000 Wörter pro Minute. RSVP-Technologie mit optimaler Fokuspunkt-Ausrichtung. Verdoppeln Sie Ihre intellektuelle Produktivität.',
77
78
  ui,
78
- faqTitle: 'Häufig gestellte Fragen',
79
+
79
80
  faq: faqData,
80
81
  howTo: howToData,
81
- bibliographyTitle: 'Referenzen',
82
- bibliography: [
83
- { name: 'Rayner, K., et al. (2016). So much to read, so little time. Psychological Science in the Public Interest.', url: 'https://journals.sagepub.com/doi/full/10.1177/1529100615623267' },
84
- { name: 'Forster, K. I. (1970). Visual perception of rapidly presented word sequences. Perception & Psychophysics.', url: 'https://link.springer.com/article/10.3758/BF03212522' },
85
- { name: 'Öquist, G., & Goldstein, M. (2003). Towards an improved readability on mobile devices. Mobile HCI.', url: 'https://www.researchgate.net/publication/221063852_Towards_an_improved_readability_on_mobile_devices' },
86
- { name: 'Juola, J. F., et al. (1982). Visual search and reading of rapid serial visual presentations. Perception & Psychophysics.', url: 'https://link.springer.com/article/10.3758/BF03202598' },
87
- { name: 'Masson, M. E. J. (1983). Conceptual processing of text during rapid serial visual presentation. Journal of Educational Psychology.', url: 'https://psycnet.apa.org/record/1984-08638-001' },
88
- { name: 'Saldana, D., & Greene, R. (2022). Reading effectiveness with RSVP apps. Reading Psychology.', url: 'https://www.tandfonline.com/doi/abs/10.1080/02702711.2022.2030000' },
89
- ],
82
+
83
+ bibliography,
90
84
  schemas: [faqSchema, howToSchema, appSchema],
91
85
  seo: [
92
86
  { type: 'title', level: 2, text: 'Die Formel 1 des Lesens: Schalten Sie Ihre mentale Bandbreite frei' },
@@ -116,7 +110,7 @@ export const content: ToolLocaleContent<SpeedReaderUI> = {
116
110
  icon: 'mdi:speedometer-slow',
117
111
  title: 'Kognitive Stille',
118
112
  highlight: true,
119
- description: 'Ab 400-500 WPM verstummt Ihre innere Stimme sie kommt nicht mehr mit. Sie hören nicht mehr auf das, was Sie lesen, sondern sehen reine Bedeutungen und Konzepte. Das ist der ultimative Flow-Zustand.',
113
+ description: 'Ab 400-500 WPM verstummt Ihre innere Stimme - sie kommt nicht mehr mit. Sie hören nicht mehr auf das, was Sie lesen, sondern sehen reine Bedeutungen und Konzepte. Das ist der ultimative Flow-Zustand.',
120
114
  },
121
115
  {
122
116
  icon: 'mdi:brain',
@@ -132,13 +126,13 @@ export const content: ToolLocaleContent<SpeedReaderUI> = {
132
126
  items: [
133
127
  {
134
128
  title: 'Level 1: Das Erwachen (200 bis 300 WPM)',
135
- description: 'Ihre normale Lesegeschwindigkeit. Gewöhnen Sie sich an die Benutzeroberfläche. Entspannen Sie Ihr Gesicht und lassen Sie die Wörter auf sich zukommen. Versuchen Sie nicht, sie zu greifen“.',
129
+ description: 'Ihre normale Lesegeschwindigkeit. Gewöhnen Sie sich an die Benutzeroberfläche. Entspannen Sie Ihr Gesicht und lassen Sie die Wörter auf sich zukommen. Versuchen Sie nicht, sie zu "greifen".',
136
130
  points: ['Ideal für Anfänger', 'Gewöhnung an den ORP', 'Keine Überanstrengung der Augen'],
137
131
  },
138
132
  {
139
133
  title: 'Level 2: Schallmauer (400 bis 500 WPM)',
140
134
  highlight: true,
141
- description: 'Hier geschieht die Magie. Sie werden ein gewisses Unbehagen spüren. Werden Sie nicht langsamer, wenn Sie ein Wort verpassen Ihr Gehirn wird lernen, Lücken aus dem Kontext zu füllen.',
135
+ description: 'Hier geschieht die Magie. Sie werden ein gewisses Unbehagen spüren. Werden Sie nicht langsamer, wenn Sie ein Wort verpassen - Ihr Gehirn wird lernen, Lücken aus dem Kontext zu füllen.',
142
136
  points: ['Subvokalisierung verschwindet', 'Mentaler Flow-Zustand', 'Verdoppelung der Basisgeschwindigkeit'],
143
137
  },
144
138
  {
@@ -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 { SpeedReaderUI } from '../ui';
@@ -75,18 +76,11 @@ export const content: ToolLocaleContent<SpeedReaderUI> = {
75
76
  title: 'RSVP Speed Reader',
76
77
  description: 'Train your reading speed up to 1000 words per minute. RSVP technology with optimal focal point alignment. Double your intellectual productivity.',
77
78
  ui,
78
- faqTitle: 'Frequently Asked Questions',
79
+
79
80
  faq: faqData,
80
81
  howTo: howToData,
81
- bibliographyTitle: 'References',
82
- bibliography: [
83
- { name: 'Rayner, K., et al. (2016). So much to read, so little time. Psychological Science in the Public Interest.', url: 'https://journals.sagepub.com/doi/full/10.1177/1529100615623267' },
84
- { name: 'Forster, K. I. (1970). Visual perception of rapidly presented word sequences. Perception & Psychophysics.', url: 'https://link.springer.com/article/10.3758/BF03212522' },
85
- { name: 'Öquist, G., & Goldstein, M. (2003). Towards an improved readability on mobile devices. Mobile HCI.', url: 'https://www.researchgate.net/publication/221063852_Towards_an_improved_readability_on_mobile_devices' },
86
- { name: 'Juola, J. F., et al. (1982). Visual search and reading of rapid serial visual presentations. Perception & Psychophysics.', url: 'https://link.springer.com/article/10.3758/BF03202598' },
87
- { name: 'Masson, M. E. J. (1983). Conceptual processing of text during rapid serial visual presentation. Journal of Educational Psychology.', url: 'https://psycnet.apa.org/record/1984-08638-001' },
88
- { name: 'Saldana, D., & Greene, R. (2022). Reading effectiveness with RSVP apps. Reading Psychology.', url: 'https://www.tandfonline.com/doi/abs/10.1080/02702711.2022.2030000' },
89
- ],
82
+
83
+ bibliography,
90
84
  schemas: [faqSchema, howToSchema, appSchema],
91
85
  seo: [
92
86
  { type: 'title', level: 2, text: 'The Formula 1 of Reading: Unlock Your Mental Bandwidth' },
@@ -116,7 +110,7 @@ export const content: ToolLocaleContent<SpeedReaderUI> = {
116
110
  icon: 'mdi:speedometer-slow',
117
111
  title: 'Cognitive Silence',
118
112
  highlight: true,
119
- description: 'Above 400-500 WPM, your inner voice goes quiet it cannot keep up. You stop "hearing" what you read and start "seeing" pure meanings and concepts. This is the ultimate flow state.',
113
+ description: 'Above 400-500 WPM, your inner voice goes quiet - it cannot keep up. You stop "hearing" what you read and start "seeing" pure meanings and concepts. This is the ultimate flow state.',
120
114
  },
121
115
  {
122
116
  icon: 'mdi:brain',
@@ -138,7 +132,7 @@ export const content: ToolLocaleContent<SpeedReaderUI> = {
138
132
  {
139
133
  title: 'Level 2: Sound Barrier (400 to 500 WPM)',
140
134
  highlight: true,
141
- description: 'This is where the magic happens. You will feel discomfort. Do not slow down when you miss a word your brain will learn to fill in gaps from context.',
135
+ description: 'This is where the magic happens. You will feel discomfort. Do not slow down when you miss a word - your brain will learn to fill in gaps from context.',
142
136
  points: ['Subvocalisation disappears', 'Mental flow state', 'Double your base speed'],
143
137
  },
144
138
  {
@@ -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 { SpeedReaderUI } from '../ui';
@@ -75,18 +76,11 @@ export const content: ToolLocaleContent<SpeedReaderUI> = {
75
76
  title: 'RSVP Lector Rápido',
76
77
  description: 'Entrena tu velocidad de lectura hasta 1000 palabras por minuto. Tecnología RSVP con alineación de punto focal óptimo. Dobla tu productividad intelectual.',
77
78
  ui,
78
- faqTitle: 'Preguntas Frecuentes',
79
+
79
80
  faq: faqData,
80
81
  howTo: howToData,
81
- bibliographyTitle: 'Referencias',
82
- bibliography: [
83
- { name: 'Rayner, K., et al. (2016). So much to read, so little time. Psychological Science in the Public Interest.', url: 'https://journals.sagepub.com/doi/full/10.1177/1529100615623267' },
84
- { name: 'Forster, K. I. (1970). Visual perception of rapidly presented word sequences. Perception & Psychophysics.', url: 'https://link.springer.com/article/10.3758/BF03212522' },
85
- { name: 'Öquist, G., & Goldstein, M. (2003). Towards an improved readability on mobile devices. Mobile HCI.', url: 'https://www.researchgate.net/publication/221063852_Towards_an_improved_readability_on_mobile_devices' },
86
- { name: 'Juola, J. F., et al. (1982). Visual search and reading of rapid serial visual presentations. Perception & Psychophysics.', url: 'https://link.springer.com/article/10.3758/BF03202598' },
87
- { name: 'Masson, M. E. J. (1983). Conceptual processing of text during rapid serial visual presentation. Journal of Educational Psychology.', url: 'https://psycnet.apa.org/record/1984-08638-001' },
88
- { name: 'Saldana, D., & Greene, R. (2022). Reading effectiveness with RSVP apps. Reading Psychology.', url: 'https://www.tandfonline.com/doi/abs/10.1080/02702711.2022.2030000' },
89
- ],
82
+
83
+ bibliography,
90
84
  schemas: [faqSchema, howToSchema, appSchema],
91
85
  seo: [
92
86
  { type: 'title', level: 2, text: 'La Fórmula 1 de la Lectura: Desbloquea tu Ancho de Banda Mental' },
@@ -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 { SpeedReaderUI } from '../ui';
@@ -75,28 +76,21 @@ export const content: ToolLocaleContent<SpeedReaderUI> = {
75
76
  title: 'RSVP Lecteur Rapide',
76
77
  description: "Entraînez votre vitesse de lecture jusqu'à 1000 mots par minute. Technologie RSVP avec alignement du point focal optimal. Doublez votre productivité intellectuelle.",
77
78
  ui,
78
- faqTitle: 'Questions Fréquentes',
79
+
79
80
  faq: faqData,
80
81
  howTo: howToData,
81
- bibliographyTitle: 'Références',
82
- bibliography: [
83
- { name: 'Rayner, K., et al. (2016). So much to read, so little time. Psychological Science in the Public Interest.', url: 'https://journals.sagepub.com/doi/full/10.1177/1529100615623267' },
84
- { name: 'Forster, K. I. (1970). Visual perception of rapidly presented word sequences. Perception & Psychophysics.', url: 'https://link.springer.com/article/10.3758/BF03212522' },
85
- { name: 'Öquist, G., & Goldstein, M. (2003). Towards an improved readability on mobile devices. Mobile HCI.', url: 'https://www.researchgate.net/publication/221063852_Towards_an_improved_readability_on_mobile_devices' },
86
- { name: 'Juola, J. F., et al. (1982). Visual search and reading of rapid serial visual presentations. Perception & Psychophysics.', url: 'https://link.springer.com/article/10.3758/BF03202598' },
87
- { name: 'Masson, M. E. J. (1983). Conceptual processing of text during rapid serial visual presentation. Journal of Educational Psychology.', url: 'https://psycnet.apa.org/record/1984-08638-001' },
88
- { name: 'Saldana, D., & Greene, R. (2022). Reading effectiveness with RSVP apps. Reading Psychology.', url: 'https://www.tandfonline.com/doi/abs/10.1080/02702711.2022.2030000' },
89
- ],
82
+
83
+ bibliography,
90
84
  schemas: [faqSchema, howToSchema, appSchema],
91
85
  seo: [
92
- { type: 'title', level: 2, text: 'La Formule 1 de la Lecture : Débloquez Votre Bande Passante Mentale' },
86
+ { type: 'title', level: 2, text: 'La Formule 1 de la Lecture: Débloquez Votre Bande Passante Mentale' },
93
87
  {
94
88
  type: 'paragraph',
95
- html: 'Et si lire était, biomécaniquement, une perte de temps ? Votre cerveau est un superordinateur bridé par une connexion analogique : vos yeux. Le <strong>Lecteur RSVP</strong> brise ce goulot d\'étranglement en présentant les mots au point focal exact où votre esprit les traite le plus rapidement.',
89
+ html: 'Et si lire était, biomécaniquement, une perte de temps ? Votre cerveau est un superordinateur bridé par une connexion analogique: vos yeux. Le <strong>Lecteur RSVP</strong> brise ce goulot d\'étranglement en présentant les mots au point focal exact où votre esprit les traite le plus rapidement.',
96
90
  },
97
91
  {
98
92
  type: 'paragraph',
99
- html: 'La lecture traditionnelle est un processus inefficace. Vos yeux ne fonctionnent pas comme un scanner ; ils fonctionnent comme une caméra en rafale : arrêt, mise au point, saut. Ce saut, appelé <strong>saccade</strong>, vous fait passer une grande partie du temps à déplacer les yeux plutôt qu\'à absorber l\'information.',
93
+ html: 'La lecture traditionnelle est un processus inefficace. Vos yeux ne fonctionnent pas comme un scanner ; ils fonctionnent comme une caméra en rafale: arrêt, mise au point, saut. Ce saut, appelé <strong>saccade</strong>, vous fait passer une grande partie du temps à déplacer les yeux plutôt qu\'à absorber l\'information.',
100
94
  },
101
95
  {
102
96
  type: 'tip',
@@ -116,33 +110,33 @@ export const content: ToolLocaleContent<SpeedReaderUI> = {
116
110
  icon: 'mdi:speedometer-slow',
117
111
  title: 'Silence Cognitif',
118
112
  highlight: true,
119
- description: 'Au-delà de 400-500 MPM, votre voix intérieure se tait elle ne peut pas suivre le rythme. Vous cessez d\'"entendre" ce que vous lisez et commencez à "voir" des significations et des idées pures.',
113
+ description: 'Au-delà de 400-500 MPM, votre voix intérieure se tait - elle ne peut pas suivre le rythme. Vous cessez d\'"entendre" ce que vous lisez et commencez à "voir" des significations et des idées pures.',
120
114
  },
121
115
  {
122
116
  icon: 'mdi:brain',
123
117
  title: 'Neuroplasticité Visuelle',
124
- description: 'Comme aller à la salle de sport : 300 MPM semblera rapide au début. Après une semaine, 500 MPM semblera une promenade. Vous re-entraînez les voies neuronales reliant le cortex visuel au langage.',
118
+ description: 'Comme aller à la salle de sport: 300 MPM semblera rapide au début. Après une semaine, 500 MPM semblera une promenade. Vous re-entraînez les voies neuronales reliant le cortex visuel au langage.',
125
119
  },
126
120
  ],
127
121
  },
128
- { type: 'title', level: 3, text: 'Protocole d\'Entraînement : Du Débutant à l\'Expert' },
122
+ { type: 'title', level: 3, text: 'Protocole d\'Entraînement: Du Débutant à l\'Expert' },
129
123
  {
130
124
  type: 'comparative',
131
125
  columns: 3,
132
126
  items: [
133
127
  {
134
- title: "Niveau 1 : L'Éveil (200 à 300 MPM)",
128
+ title: "Niveau 1: L'Éveil (200 à 300 MPM)",
135
129
  description: "Votre vitesse de lecture normale. Habituez-vous à l'interface. Détendez le visage et laissez les mots venir à vous. N'essayez pas de les attraper.",
136
130
  points: ['Idéal pour débutants', 'Familiarisation ORP', 'Sans fatigue oculaire'],
137
131
  },
138
132
  {
139
- title: "Niveau 2 : Le Mur du Son (400 à 500 MPM)",
133
+ title: "Niveau 2: Le Mur du Son (400 à 500 MPM)",
140
134
  highlight: true,
141
135
  description: "C'est ici que la magie se produit. Vous ressentirez de l'inconfort. Ne ralentissez pas si vous manquez un mot. Votre cerveau apprendra à combler les lacunes par le contexte.",
142
136
  points: ['La subvocalisation disparaît', 'État de flux mental', 'Doublez votre vitesse de base'],
143
137
  },
144
138
  {
145
- title: "Niveau 3 : Vitesse d'Évasion (600+ MPM)",
139
+ title: "Niveau 3: Vitesse d'Évasion (600+ MPM)",
146
140
  description: "Territoire avancé. Idéal pour réviser des cours, lire des actualités ou consommer de la documentation technique.",
147
141
  points: ['Roman moyen en 2 heures', 'Efficacité de lecture maximale', 'Nécessite une pratique préalable'],
148
142
  },
@@ -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 { SpeedReaderUI } from '../ui';
@@ -75,18 +76,11 @@ export const content: ToolLocaleContent<SpeedReaderUI> = {
75
76
  title: 'RSVP Speed Reader',
76
77
  description: 'Latih kecepatan membaca Anda hingga 1000 kata per menit. Teknologi RSVP dengan penyelarasan titik fokus yang optimal. Gandakan produktivitas intelektual Anda.',
77
78
  ui,
78
- faqTitle: 'Pertanyaan yang Sering Diajukan',
79
+
79
80
  faq: faqData,
80
81
  howTo: howToData,
81
- bibliographyTitle: 'Referensi',
82
- bibliography: [
83
- { name: 'Rayner, K., et al. (2016). So much to read, so little time. Psychological Science in the Public Interest.', url: 'https://journals.sagepub.com/doi/full/10.1177/1529100615623267' },
84
- { name: 'Forster, K. I. (1970). Visual perception of rapidly presented word sequences. Perception & Psychophysics.', url: 'https://link.springer.com/article/10.3758/BF03212522' },
85
- { name: 'Öquist, G., & Goldstein, M. (2003). Towards an improved readability on mobile devices. Mobile HCI.', url: 'https://www.researchgate.net/publication/221063852_Towards_an_improved_readability_on_mobile_devices' },
86
- { name: 'Juola, J. F., et al. (1982). Visual search and reading of rapid serial visual presentations. Perception & Psychophysics.', url: 'https://link.springer.com/article/10.3758/BF03202598' },
87
- { name: 'Masson, M. E. J. (1983). Conceptual processing of text during rapid serial visual presentation. Journal of Educational Psychology.', url: 'https://psycnet.apa.org/record/1984-08638-001' },
88
- { name: 'Saldana, D., & Greene, R. (2022). Reading effectiveness with RSVP apps. Reading Psychology.', url: 'https://www.tandfonline.com/doi/abs/10.1080/02702711.2022.2030000' },
89
- ],
82
+
83
+ bibliography,
90
84
  schemas: [faqSchema, howToSchema, appSchema],
91
85
  seo: [
92
86
  { type: 'title', level: 2, text: 'Formula 1 dalam Membaca: Buka Bandwidth Mental Anda' },
@@ -116,7 +110,7 @@ export const content: ToolLocaleContent<SpeedReaderUI> = {
116
110
  icon: 'mdi:speedometer-slow',
117
111
  title: 'Keheningan Kognitif',
118
112
  highlight: true,
119
- description: 'Di atas 400-500 WPM, suara batin Anda akan diam ia tidak bisa mengimbanginya. Anda berhenti "mendengar" apa yang Anda baca dan mulai "melihat" makna dan konsep murni. Ini adalah kondisi aliran (flow) yang terbaik.',
113
+ description: 'Di atas 400-500 WPM, suara batin Anda akan diam - ia tidak bisa mengimbanginya. Anda berhenti "mendengar" apa yang Anda baca dan mulai "melihat" makna dan konsep murni. Ini adalah kondisi aliran (flow) yang terbaik.',
120
114
  },
121
115
  {
122
116
  icon: 'mdi:brain',
@@ -138,7 +132,7 @@ export const content: ToolLocaleContent<SpeedReaderUI> = {
138
132
  {
139
133
  title: 'Level 2: Penghalang Suara (400 hingga 500 WPM)',
140
134
  highlight: true,
141
- description: 'Di sinilah keajaiban terjadi. Anda akan merasa tidak nyaman. Jangan melambat saat Anda melewatkan satu kata otak Anda akan belajar mengisi celah dari konteks.',
135
+ description: 'Di sinilah keajaiban terjadi. Anda akan merasa tidak nyaman. Jangan melambat saat Anda melewatkan satu kata - otak Anda akan belajar mengisi celah dari konteks.',
142
136
  points: ['Subvokalisasi menghilang', 'Kondisi aliran mental', 'Gandakan kecepatan dasar Anda'],
143
137
  },
144
138
  {