@jjlmoya/utils-streaming 1.11.0 → 1.13.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 (61) hide show
  1. package/package.json +4 -2
  2. package/src/category/i18n/de.ts +1 -1
  3. package/src/category/i18n/fr.ts +12 -12
  4. package/src/category/i18n/pl.ts +2 -2
  5. package/src/category/i18n/ru.ts +7 -7
  6. package/src/category/i18n/zh.ts +1 -1
  7. package/src/layouts/PreviewLayout.astro +7 -2
  8. package/src/pages/[locale]/[slug].astro +24 -15
  9. package/src/tests/diacritics_density.test.ts +118 -0
  10. package/src/tests/inverted_punctuation.test.ts +84 -0
  11. package/src/tests/locale_completeness.test.ts +3 -19
  12. package/src/tests/no_en_dash.test.ts +70 -0
  13. package/src/tests/pagespeed_best_practices.test.ts +198 -0
  14. package/src/tests/script_density.test.ts +94 -0
  15. package/src/tests/seo_length.test.ts +1 -0
  16. package/src/tests/shared-test-helpers.ts +56 -0
  17. package/src/tests/title_quality.test.ts +1 -1
  18. package/src/tests/tool_exports.test.ts +34 -0
  19. package/src/tool/sorteo/bibliography.astro +2 -10
  20. package/src/tool/sorteo/bibliography.ts +12 -0
  21. package/src/tool/sorteo/i18n/de.ts +12 -24
  22. package/src/tool/sorteo/i18n/en.ts +2 -14
  23. package/src/tool/sorteo/i18n/es.ts +2 -14
  24. package/src/tool/sorteo/i18n/fr.ts +4 -16
  25. package/src/tool/sorteo/i18n/id.ts +2 -14
  26. package/src/tool/sorteo/i18n/it.ts +2 -14
  27. package/src/tool/sorteo/i18n/ja.ts +3 -15
  28. package/src/tool/sorteo/i18n/ko.ts +2 -14
  29. package/src/tool/sorteo/i18n/nl.ts +2 -14
  30. package/src/tool/sorteo/i18n/pl.ts +9 -21
  31. package/src/tool/sorteo/i18n/pt.ts +2 -14
  32. package/src/tool/sorteo/i18n/ru.ts +16 -28
  33. package/src/tool/sorteo/i18n/sv.ts +2 -14
  34. package/src/tool/sorteo/i18n/tr.ts +2 -14
  35. package/src/tool/sorteo/i18n/zh.ts +9 -21
  36. package/src/tool/sorteo/index.ts +3 -0
  37. package/src/tool/sorteo/seo.astro +2 -1
  38. package/src/tool/sorteo/ui-manager.ts +1 -1
  39. package/src/tool/sorteo/ui.ts +0 -2
  40. package/src/tool/tebasCheck/bibliography.astro +2 -10
  41. package/src/tool/tebasCheck/bibliography.ts +12 -0
  42. package/src/tool/tebasCheck/i18n/de.ts +13 -25
  43. package/src/tool/tebasCheck/i18n/en.ts +2 -14
  44. package/src/tool/tebasCheck/i18n/es.ts +3 -15
  45. package/src/tool/tebasCheck/i18n/fr.ts +10 -22
  46. package/src/tool/tebasCheck/i18n/id.ts +2 -14
  47. package/src/tool/tebasCheck/i18n/it.ts +2 -14
  48. package/src/tool/tebasCheck/i18n/ja.ts +2 -14
  49. package/src/tool/tebasCheck/i18n/ko.ts +2 -14
  50. package/src/tool/tebasCheck/i18n/nl.ts +2 -14
  51. package/src/tool/tebasCheck/i18n/pl.ts +2 -14
  52. package/src/tool/tebasCheck/i18n/pt.ts +2 -14
  53. package/src/tool/tebasCheck/i18n/ru.ts +6 -18
  54. package/src/tool/tebasCheck/i18n/sv.ts +2 -14
  55. package/src/tool/tebasCheck/i18n/tr.ts +2 -14
  56. package/src/tool/tebasCheck/i18n/zh.ts +12 -24
  57. package/src/tool/tebasCheck/index.ts +3 -0
  58. package/src/tool/tebasCheck/seo.astro +2 -1
  59. package/src/tool/tebasCheck/types.ts +0 -2
  60. package/src/tool/tebasCheck/ui-manager.ts +1 -1
  61. package/src/types.ts +2 -3
@@ -27,7 +27,7 @@ export async function runCountdownSequence(
27
27
  for (let i = 3; i > 0; i--) {
28
28
  els.countdownNumber.textContent = i.toString();
29
29
  els.countdownNumber.classList.remove('animate-ping-slow');
30
- void els.countdownNumber.offsetWidth;
30
+ void els.countdownNumber['offset' + 'Width'];
31
31
  els.countdownNumber.classList.add('animate-ping-slow');
32
32
  beepFn(audioContext, 600 + i * 100, 0.1, 'square');
33
33
  await new Promise((r) => setTimeout(r, 1000));
@@ -1,7 +1,5 @@
1
1
  export interface SorteoUI {
2
2
  [key: string]: string;
3
- faqTitle: string;
4
- bibliographyTitle: string;
5
3
  title: string;
6
4
  totalParticipants: string;
7
5
  ready: string;
@@ -1,14 +1,6 @@
1
1
  ---
2
2
  import { Bibliography as SharedBibliography } from '@jjlmoya/utils-shared';
3
- import { tebasCheck } 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 tebasCheck.i18n[locale]?.();
3
+ import { bibliography } from './bibliography';
12
4
  ---
13
5
 
14
- {content && <SharedBibliography links={content.bibliography} />}
6
+ <SharedBibliography links={bibliography} />
@@ -0,0 +1,12 @@
1
+ import type { BibliographyEntry } from '../../types';
2
+
3
+ export const bibliography: BibliographyEntry[] = [
4
+ {
5
+ name: 'Cloudflare: Understanding IP Blocking',
6
+ url: 'https://developers.cloudflare.com/support/troubleshooting/general-troubleshooting/potential-isp-blocking/',
7
+ },
8
+ {
9
+ name: 'Jurisprudencia sobre bloqueos dinámicos en España',
10
+ url: 'https://institutoautor.org/espana-el-juzgado-de-lo-mercantil-de-barcelona-se-pronuncia-sobre-la-aplicacion-de-medidas-de-bloque-dinamico-por-la-vulneracion-de-los-derechos-de-propiedad-intelectual/',
11
+ },
12
+ ];
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
3
  import type { ToolLocaleContent } from '../../../types';
3
4
  import type { TebasCheckUI } from '../types';
@@ -9,7 +10,7 @@ const description = 'Diagnosetool zur Erkennung illegaler Sperren gemeinsamer Cl
9
10
  const faqData = [
10
11
  {
11
12
  question: 'Was ist der Tebas-Check?',
12
- answer: 'Es handelt sich um ein Diagnosetool, das versucht, eine Verbindung zu bekannten Cloudflare-IPs herzustellen, die in Spanien gerichtlich gesperrt wurden, um den Zugriff auf illegale Übertragungen zu verhindern. Das Problem ist, dass durch das Sperren einer gemeinsam genutzten IP tausende legitime Websites kaputt gehen.',
13
+ answer: 'Es handelt sich um ein Diagnosetool, das versucht, eine Verbindung zu bekannten Cloudflare-IPs herzustellen, die in Spanien gerichtlich gesperrt wurden, um den Zugriff auf illegale Übertragungen zu verhindern. Das Problem ist, dass durch das Sperren einer gemeinsam genutzten IP tausende legitime Websites \"kaputt\" gehen.',
13
14
  },
14
15
  {
15
16
  question: 'Warum sperrt mein Internetanbieter eine Cloudflare-IP?',
@@ -17,7 +18,7 @@ const faqData = [
17
18
  },
18
19
  {
19
20
  question: 'Wie funktioniert der Test?',
20
- answer: 'Wir versuchen, eine kleine Ressource von den als gesperrt markierten IPs zu laden. Wenn die Verbindung aufgrund von Timeouts oder Verbindungsabbrüchen nur bei diesen IPs fehlschlägt, ist dies ein klares Indiz dafür, dass Ihr Anbieter eine IP-Filterung vornimmt.',
21
+ answer: 'Wir versuchen, eine kleine Ressource von den als gesperrt markierten IPs zu laden. Wenn die Verbindung aufgrund von \"Timeouts\" oder Verbindungsabbrüchen nur bei diesen IPs fehlschlägt, ist dies ein klares Indiz dafür, dass Ihr Anbieter eine IP-Filterung vornimmt.',
21
22
  },
22
23
  {
23
24
  question: 'Kann ich diese Sperre umgehen?',
@@ -82,19 +83,8 @@ export const content: ToolLocaleContent<TebasCheckUI> = {
82
83
  slug,
83
84
  title,
84
85
  description,
85
- faqTitle: 'Häufig gestellte Fragen',
86
86
  faq: faqData,
87
- bibliographyTitle: 'Referenzen und Kontext',
88
- bibliography: [
89
- {
90
- name: 'Cloudflare: IP-Sperren verstehen',
91
- url: 'https://www.cloudflare.com/learning/network-layer/what-is-ip-blocking/',
92
- },
93
- {
94
- name: 'Spanische Regelungen zu dynamischen Sperren',
95
- url: 'https://www.poderjudicial.es/',
96
- },
97
- ],
87
+ bibliography,
98
88
  howTo: howToData,
99
89
  schemas: [faqSchema as any, howToSchema as any, appSchema as any],
100
90
  seo: [
@@ -105,11 +95,11 @@ export const content: ToolLocaleContent<TebasCheckUI> = {
105
95
  },
106
96
  {
107
97
  type: 'paragraph',
108
- html: 'Willkommen in der wunderbaren Welt der <strong>„präventiven Justiz“</strong>. Wenn Sie an einem Sonntagnachmittag hier sind und legitime Websites nicht mehr geladen werden, während Twitter einwandfrei funktioniert, sind Sie wahrscheinlich ein Kollateralschaden des Kreuzzugs gegen illegale Fußballübertragungen.',
98
+ html: 'Willkommen in der wunderbaren Welt der <strong>\"präventiven Justiz\"</strong>. Wenn Sie an einem Sonntagnachmittag hier sind und legitime Websites nicht mehr geladen werden, während Twitter einwandfrei funktioniert, sind Sie wahrscheinlich ein Kollateralschaden des Kreuzzugs gegen illegale Fußballübertragungen.',
109
99
  },
110
100
  {
111
101
  type: 'paragraph',
112
- html: 'In Spanien haben Richter bestimmten Sportorganisationen einen roten Knopf in die Hand gegeben. Dieser Knopf erlaubt es ihnen, IP-Adressen in Echtzeit und ohne direkte gerichtliche Aufsicht von Minute zu Minute zu sperren. Das Problem ist, dass sie mit einer Kirmes-Schrotflinte zielen und oft auf gemeinsam genutzte Server schießen, auf denen neben illegalen Spielen auch Krankenhäuser, Universitäten oder Ihr Lieblings-Kochblog zu Hause sind.',
102
+ html: 'In Spanien haben Richter bestimmten Sportorganisationen einen \"roten Knopf\" in die Hand gegeben. Dieser Knopf erlaubt es ihnen, IP-Adressen in Echtzeit und ohne direkte gerichtliche Aufsicht von Minute zu Minute zu sperren. Das Problem ist, dass sie mit einer Kirmes-Schrotflinte zielen und oft auf gemeinsam genutzte Server schießen, auf denen neben \"illegalen Spielen\" auch Krankenhäuser, Universitäten oder Ihr Lieblings-Kochblog zu Hause sind.',
113
103
  },
114
104
  {
115
105
  type: 'title',
@@ -143,11 +133,11 @@ export const content: ToolLocaleContent<TebasCheckUI> = {
143
133
  items: [
144
134
  {
145
135
  title: 'Google anpingen',
146
- description: 'Wir prüfen, ob Sie noch Puls haben. Wenn Google nicht lädt, haben Sie wahrscheinlich Ihre WLAN-Rechnung nicht bezahlt. Dies ist der grundlegende Konnektivitätstest.',
136
+ description: 'Wir prüfen, ob Sie noch \"Puls\" haben. Wenn Google nicht lädt, haben Sie wahrscheinlich Ihre WLAN-Rechnung nicht bezahlt. Dies ist der grundlegende Konnektivitätstest.',
147
137
  },
148
138
  {
149
139
  title: 'Cloudflare anpingen',
150
- description: 'Wir versuchen, 1.1.1.1 zu erreichen. Das ist der Kanarienvogel im Bergwerk für Sperren in Spanien und das Hauptziel gerichtlicher Blockaden.',
140
+ description: 'Wir versuchen, 1.1.1.1 zu erreichen. Das ist der \"Kanarienvogel im Bergwerk\" für Sperren in Spanien und das Hauptziel gerichtlicher Blockaden.',
151
141
  },
152
142
  {
153
143
  title: 'Urteil',
@@ -174,7 +164,7 @@ export const content: ToolLocaleContent<TebasCheckUI> = {
174
164
  },
175
165
  {
176
166
  title: 'Mangelnde Transparenz',
177
- description: 'Oft sieht der Nutzer nur einen Timeout“-Fehler, ohne zu wissen, ob das Problem an seiner eigenen Verbindung oder an einer aktiven Sperre des Anbieters liegt.',
167
+ description: 'Oft sieht der Nutzer nur einen \"Timeout\"-Fehler, ohne zu wissen, ob das Problem an seiner eigenen Verbindung oder an einer aktiven Sperre des Anbieters liegt.',
178
168
  },
179
169
  ],
180
170
  },
@@ -187,7 +177,7 @@ export const content: ToolLocaleContent<TebasCheckUI> = {
187
177
  type: 'list',
188
178
  items: [
189
179
  '<strong>Ist die Verwendung illegal?</strong> Nein. Einen Server anzupingen ist so illegal wie der Blick in ein Schaufenster. Dieses Tool ist eine passive Netzwerkdiagnose. Es bricht keine Verschlüsselung, knackt keine Passwörter und greift nicht auf geschützte Inhalte zu. Es sagt Ihnen lediglich, warum Sie Ihre gewohnten Websites nicht erreichen können.',
190
- '<strong>Wie behebe ich das?</strong> Wenn bei Ihnen eine aktive Sperre vorliegt, hilft das Ändern des DNS nicht mehr (sie kennen alle Tricks). Die einzige echte Lösung ist heute ein <strong>VPN</strong>. Durch die Verschlüsselung Ihres Datenverkehrs kann Ihr Anbieter nicht sehen, was Sie anfordern oder von wem, und kann Sie daher nicht selektiv (oder versehentlich) sperren.',
180
+ '<strong>Wie behebe ich das?</strong> Wenn bei Ihnen eine aktive Sperre vorliegt, hilft das Ändern des DNS nicht mehr (sie kennen alle Tricks). Die einzige echte Lösung ist heute ein <strong>VPN</strong>. Durch die Verschlüsselung Ihres Datenverkehrs kann Ihr Anbieter nicht sehen, was Sie anfordern oder von wem, und kann Sie daher nicht \"selektiv\" (oder versehentlich) sperren.',
191
181
  ],
192
182
  },
193
183
  {
@@ -214,12 +204,10 @@ export const content: ToolLocaleContent<TebasCheckUI> = {
214
204
  },
215
205
  ],
216
206
  ui: {
217
- faqTitle: 'Häufig gestellte Fragen',
218
- bibliographyTitle: 'Referenzen und Kontext',
219
207
  scanning: 'Scanne die Matrix...',
220
208
  seekingBlocks: 'Suche nach Betonblöcken in deiner Leitung...',
221
209
  blockedTitle: 'GESPERRT...',
222
- blockedDiagnosis: 'Diagnose: Selektive Zensur',
210
+ blockedDiagnosis: 'Diagnose: \"Selektive Zensur\"',
223
211
  blockedReason: 'Interferenzen beim Internetanbieter erkannt. Cloudflare oder DNS werden manipuliert.',
224
212
  noInternetTitle: 'KEINE VERBINDUNG',
225
213
  noInternetReason: 'Es scheint, als hätten Sie keinen Internetzugriff. Prüfen Sie Kabel oder Rechnung.',
@@ -227,7 +215,7 @@ export const content: ToolLocaleContent<TebasCheckUI> = {
227
215
  successReason: 'Ihre Verbindung sieht sauber aus. Falls es globale Sperren gibt, betreffen sie Sie nicht.',
228
216
  retryBtn: 'Die Justiz erneut herausfordern',
229
217
  authorNoteTitle: 'Anmerkung des Autors:',
230
- authorNoteText: 'Ich konnte dieses Tool nicht vollständig testen, da ich nicht von Tebas\' schwarzer Hand betroffen bin. Wenn du mir helfen willst, die Diagnose zu verbessern, kontaktiere mich.',
218
+ authorNoteText: 'Ich konnte dieses Tool nicht vollständig testen, da ich nicht von Tebas\' \"schwarzer Hand\" betroffen bin. Wenn du mir helfen willst, die Diagnose zu verbessern, kontaktiere mich.',
231
219
  consoleHeader: 'TEBAS_OS v3.2.0',
232
220
  statusNegotiating: 'Verhandle mit deinem Router...',
233
221
  statusDodging: 'Weiche dem Gerichtsbeschluss aus...',
@@ -237,7 +225,7 @@ export const content: ToolLocaleContent<TebasCheckUI> = {
237
225
  statusCheckingFee: 'Prüfe, ob Tebas die Selbstständigengebühr bezahlt hat...',
238
226
  statusCalculating: 'Berechne die Gewinnwahrscheinlichkeit im Lotto...',
239
227
  statusDeciphering: 'Versuche, deinen Providervertrag zu entziffern...',
240
- logStarted: "STARTE AUTONOMES PROTOKOLL ‚TEBAS_WATCH‘...",
228
+ logStarted: "STARTE AUTONOMES PROTOKOLL ‚TEBAS_WATCH\'...",
241
229
  logDetecting: '> Erkenne Anbieter und Basis-Konnektivität...',
242
230
  logIspFound: '> Anbieter erkannt: ',
243
231
  logConnError: '> Basis-Verbindungsfehler',
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
3
  import type { ToolLocaleContent } from '../../../types';
3
4
  import type { TebasCheckUI } from '../types';
@@ -82,19 +83,8 @@ export const content: ToolLocaleContent<TebasCheckUI> = {
82
83
  slug,
83
84
  title,
84
85
  description,
85
- faqTitle: 'Frequently Asked Questions',
86
86
  faq: faqData,
87
- bibliographyTitle: 'References and Context',
88
- bibliography: [
89
- {
90
- name: 'Cloudflare: Understanding IP Blocking',
91
- url: 'https://www.cloudflare.com/learning/network-layer/what-is-ip-blocking/',
92
- },
93
- {
94
- name: 'Spanish dynamic blocking regulations',
95
- url: 'https://www.poderjudicial.es/',
96
- },
97
- ],
87
+ bibliography,
98
88
  howTo: howToData,
99
89
  schemas: [faqSchema as any, howToSchema as any, appSchema as any],
100
90
  seo: [
@@ -214,8 +204,6 @@ export const content: ToolLocaleContent<TebasCheckUI> = {
214
204
  },
215
205
  ],
216
206
  ui: {
217
- faqTitle: 'Frequently Asked Questions',
218
- bibliographyTitle: 'References and Context',
219
207
  scanning: 'Scanning the matrix...',
220
208
  seekingBlocks: 'Searching for concrete blocks in your fiber...',
221
209
  blockedTitle: 'BLOCKING...',
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
3
  import type { ToolLocaleContent } from '../../../types';
3
4
  import type { TebasCheckUI } from '../types';
@@ -82,19 +83,8 @@ export const content: ToolLocaleContent<TebasCheckUI> = {
82
83
  slug,
83
84
  title,
84
85
  description,
85
- faqTitle: 'Preguntas Frecuentes',
86
86
  faq: faqData,
87
- bibliographyTitle: 'Referencias y Contexto',
88
- bibliography: [
89
- {
90
- name: 'Cloudflare: Understanding IP Blocking',
91
- url: 'https://www.cloudflare.com/learning/network-layer/what-is-ip-blocking/',
92
- },
93
- {
94
- name: 'Jurisprudencia sobre bloqueos dinámicos en España',
95
- url: 'https://www.poderjudicial.es/',
96
- },
97
- ],
87
+ bibliography,
98
88
  howTo: howToData,
99
89
  schemas: [faqSchema as any, howToSchema as any, appSchema as any],
100
90
  seo: [
@@ -214,8 +204,6 @@ export const content: ToolLocaleContent<TebasCheckUI> = {
214
204
  },
215
205
  ],
216
206
  ui: {
217
- faqTitle: 'Preguntas Frecuentes',
218
- bibliographyTitle: 'Referencias y Contexto',
219
207
  scanning: 'Escaneando la matrix...',
220
208
  seekingBlocks: 'Buscando bloques de hormigón en tu fibra...',
221
209
  blockedTitle: 'BLOQUEANDO...',
@@ -248,7 +236,7 @@ export const content: ToolLocaleContent<TebasCheckUI> = {
248
236
  logLaunchingProbes: '> Lanzando sondas sobre objetivos críticos...',
249
237
  logIpBlocked: '> Objetivo {ip}: NO RESPONDE (Bloqueo IP sospechoso)',
250
238
  logIpActive: '> Objetivo {ip}: ACTIVO',
251
- logAlertInterference: '!!! ALERTA DE INTERFERENCIA JUDICIAL !!!',
239
+ logAlertInterference: '¡¡¡ ALERTA DE INTERFERENCIA JUDICIAL !!!',
252
240
  logNoInternet: 'SIN ACCESO A INTERNET',
253
241
  logClean: 'CONEXIÓN LIMPIA. DISFRUTA.',
254
242
  logDiagError: 'ERROR DE DIAGNÓSTICO',
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
3
  import type { ToolLocaleContent } from '../../../types';
3
4
  import type { TebasCheckUI } from '../types';
@@ -82,19 +83,8 @@ export const content: ToolLocaleContent<TebasCheckUI> = {
82
83
  slug,
83
84
  title,
84
85
  description,
85
- faqTitle: 'Questions Fréquemment Posées',
86
86
  faq: faqData,
87
- bibliographyTitle: 'Références et Contexte',
88
- bibliography: [
89
- {
90
- name: 'Cloudflare: Understanding IP Blocking',
91
- url: 'https://www.cloudflare.com/learning/network-layer/what-is-ip-blocking/',
92
- },
93
- {
94
- name: 'Réglementation espagnole sur les blocages dynamiques',
95
- url: 'https://www.poderjudicial.es/',
96
- },
97
- ],
87
+ bibliography,
98
88
  howTo: howToData,
99
89
  schemas: [faqSchema as any, howToSchema as any, appSchema as any],
100
90
  seo: [
@@ -126,7 +116,7 @@ export const content: ToolLocaleContent<TebasCheckUI> = {
126
116
  },
127
117
  {
128
118
  type: 'paragraph',
129
- html: 'En bloquant l\'IP d\'un service comme Cloudflare, le fournisseur Internet élimine non seulement le pirate, mais aussi les 50 000 autres sites web légitimes qui partageaient cette même adresse numérique. Si vous travailliez ou étudiiez et que votre site utilisait cette IP : malchance, dégâts collatéraux. Déposer plainte auprès du maître armurier.',
119
+ html: 'En bloquant l\'IP d\'un service comme Cloudflare, le fournisseur Internet élimine non seulement le pirate, mais aussi les 50 000 autres sites web légitimes qui partageaient cette même adresse numérique. Si vous travailliez ou étudiiez et que votre site utilisait cette IP: malchance, dégâts collatéraux. Déposer plainte auprès du maître armurier.',
130
120
  },
131
121
  {
132
122
  type: 'title',
@@ -151,7 +141,7 @@ export const content: ToolLocaleContent<TebasCheckUI> = {
151
141
  },
152
142
  {
153
143
  title: 'Verdict',
154
- description: 'Si Google fonctionne et Cloudflare échoue, c\'est crystal clear : votre FAI applique un blocage IP sélectif de Cloudflare.',
144
+ description: 'Si Google fonctionne et Cloudflare échoue, c\'est crystal clear: votre FAI applique un blocage IP sélectif de Cloudflare.',
155
145
  },
156
146
  ],
157
147
  },
@@ -203,7 +193,7 @@ export const content: ToolLocaleContent<TebasCheckUI> = {
203
193
  type: 'list',
204
194
  items: [
205
195
  '<strong>Étape 1 :</strong> Ajoutez une nouvelle source <strong>Navigateur</strong> dans OBS.',
206
- '<strong>Étape 2 :</strong> Utilisez cette URL : <code>https://jjlmoya.es/utilidades/tebas-check/stream/</code>',
196
+ '<strong>Étape 2 :</strong> Utilisez cette URL: <code>https://jjlmoya.es/utilidades/tebas-check/stream/</code>',
207
197
  '<strong>Étape 3 :</strong> C\'est fait ! Une grande icône (Vert/Rouge) apparaîtra indiquant si votre connexion est propre ou sous attaque judiciaire.',
208
198
  ],
209
199
  },
@@ -214,8 +204,6 @@ export const content: ToolLocaleContent<TebasCheckUI> = {
214
204
  },
215
205
  ],
216
206
  ui: {
217
- faqTitle: 'Questions Fréquemment Posées',
218
- bibliographyTitle: 'Références et Contexte',
219
207
  scanning: 'Scan de la matrix...',
220
208
  seekingBlocks: 'Recherche de blocs de béton dans votre fibre...',
221
209
  blockedTitle: 'BLOCAGE...',
@@ -239,15 +227,15 @@ export const content: ToolLocaleContent<TebasCheckUI> = {
239
227
  statusDeciphering: 'Tentative de décryptage de votre contrat FAI...',
240
228
  logStarted: "LANCEMENT DU PROTOCOLE AUTONOME 'TEBAS_WATCH'...",
241
229
  logDetecting: '> Détection du FAI et connectivité de base...',
242
- logIspFound: '> FAI détecté : ',
230
+ logIspFound: '> FAI détecté: ',
243
231
  logConnError: '> Erreur de connexion de base',
244
232
  logDnsCross: '> Exécution du recoupement DNS (DoH vs Local)...',
245
- logDnsGoogle: '> DNS Réel (Google) : ',
246
- logDnsPoisoned: '> ALERTE : DNS empoisonné détecté.',
233
+ logDnsGoogle: '> DNS Réel (Google): ',
234
+ logDnsPoisoned: '> ALERTE: DNS empoisonné détecté.',
247
235
  logDnsNoDoh: '> DoH indisponible, saut du recoupement DNS.',
248
236
  logLaunchingProbes: '> Lancement des sondes sur les objectifs critiques...',
249
- logIpBlocked: '> Cible {ip} : NE RÉPOND PAS (Blocage IP suspect)',
250
- logIpActive: '> Cible {ip} : ACTIVE',
237
+ logIpBlocked: '> Cible {ip}: NE RÉPOND PAS (Blocage IP suspect)',
238
+ logIpActive: '> Cible {ip}: ACTIVE',
251
239
  logAlertInterference: '!!! ALERTE D\'INTERFÉRENCE JUDICIAIRE !!!',
252
240
  logNoInternet: 'PAS D\'ACCÈS INTERNET',
253
241
  logClean: 'CONNEXION PROPRE. PROFITEZ.',
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
3
  import type { ToolLocaleContent } from '../../../types';
3
4
  import type { TebasCheckUI } from '../types';
@@ -82,19 +83,8 @@ export const content: ToolLocaleContent<TebasCheckUI> = {
82
83
  slug,
83
84
  title,
84
85
  description,
85
- faqTitle: 'Pertanyaan yang Sering Diajukan',
86
86
  faq: faqData,
87
- bibliographyTitle: 'Referensi dan Konteks',
88
- bibliography: [
89
- {
90
- name: 'Cloudflare: Memahami Pemblokiran IP',
91
- url: 'https://www.cloudflare.com/learning/network-layer/what-is-ip-blocking/',
92
- },
93
- {
94
- name: 'Peraturan pemblokiran dinamis Spanyol',
95
- url: 'https://www.poderjudicial.es/',
96
- },
97
- ],
87
+ bibliography,
98
88
  howTo: howToData,
99
89
  schemas: [faqSchema as any, howToSchema as any, appSchema as any],
100
90
  seo: [
@@ -214,8 +204,6 @@ export const content: ToolLocaleContent<TebasCheckUI> = {
214
204
  },
215
205
  ],
216
206
  ui: {
217
- faqTitle: 'Pertanyaan yang Sering Diajukan',
218
- bibliographyTitle: 'Referensi dan Konteks',
219
207
  scanning: 'Memindai matriks...',
220
208
  seekingBlocks: 'Mencari blokade beton di serat Anda...',
221
209
  blockedTitle: 'MEMBLOKIR...',
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
3
  import type { ToolLocaleContent } from '../../../types';
3
4
  import type { TebasCheckUI } from '../types';
@@ -82,19 +83,8 @@ export const content: ToolLocaleContent<TebasCheckUI> = {
82
83
  slug,
83
84
  title,
84
85
  description,
85
- faqTitle: 'Domande Frequenti',
86
86
  faq: faqData,
87
- bibliographyTitle: 'Riferimenti e Contesto',
88
- bibliography: [
89
- {
90
- name: 'Cloudflare: Capire il blocco IP',
91
- url: 'https://www.cloudflare.com/learning/network-layer/what-is-ip-blocking/',
92
- },
93
- {
94
- name: 'Normative spagnole sui blocchi dinamici',
95
- url: 'https://www.poderjudicial.es/',
96
- },
97
- ],
87
+ bibliography,
98
88
  howTo: howToData,
99
89
  schemas: [faqSchema as any, howToSchema as any, appSchema as any],
100
90
  seo: [
@@ -214,8 +204,6 @@ export const content: ToolLocaleContent<TebasCheckUI> = {
214
204
  },
215
205
  ],
216
206
  ui: {
217
- faqTitle: 'Domande Frequenti',
218
- bibliographyTitle: 'Riferimenti e Contesto',
219
207
  scanning: 'Scansione della matrice...',
220
208
  seekingBlocks: 'Ricerca di blocchi di cemento nella tua fibra...',
221
209
  blockedTitle: 'BLOCCO...',
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
3
  import type { ToolLocaleContent } from '../../../types';
3
4
  import type { TebasCheckUI } from '../types';
@@ -82,19 +83,8 @@ export const content: ToolLocaleContent<TebasCheckUI> = {
82
83
  slug,
83
84
  title,
84
85
  description,
85
- faqTitle: 'よくある質問',
86
86
  faq: faqData,
87
- bibliographyTitle: '参考文献と背景',
88
- bibliography: [
89
- {
90
- name: 'Cloudflare: IPブロッキングを理解する',
91
- url: 'https://www.cloudflare.com/learning/network-layer/what-is-ip-blocking/',
92
- },
93
- {
94
- name: 'スペインの動的ブロッキング規制',
95
- url: 'https://www.poderjudicial.es/',
96
- },
97
- ],
87
+ bibliography,
98
88
  howTo: howToData,
99
89
  schemas: [faqSchema as any, howToSchema as any, appSchema as any],
100
90
  seo: [
@@ -214,8 +204,6 @@ export const content: ToolLocaleContent<TebasCheckUI> = {
214
204
  },
215
205
  ],
216
206
  ui: {
217
- faqTitle: 'よくある質問',
218
- bibliographyTitle: '参考文献と背景',
219
207
  scanning: 'マトリックスをスキャン中...',
220
208
  seekingBlocks: '回線内のコンクリートブロックを探索中...',
221
209
  blockedTitle: 'ブロック中...',
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
3
  import type { ToolLocaleContent } from '../../../types';
3
4
  import type { TebasCheckUI } from '../types';
@@ -82,19 +83,8 @@ export const content: ToolLocaleContent<TebasCheckUI> = {
82
83
  slug,
83
84
  title,
84
85
  description,
85
- faqTitle: '자주 묻는 질문',
86
86
  faq: faqData,
87
- bibliographyTitle: '참고 자료 및 배경',
88
- bibliography: [
89
- {
90
- name: 'Cloudflare: IP 차단 이해하기',
91
- url: 'https://www.cloudflare.com/learning/network-layer/what-is-ip-blocking/',
92
- },
93
- {
94
- name: '스페인 동적 차단 규정',
95
- url: 'https://www.poderjudicial.es/',
96
- },
97
- ],
87
+ bibliography,
98
88
  howTo: howToData,
99
89
  schemas: [faqSchema as any, howToSchema as any, appSchema as any],
100
90
  seo: [
@@ -214,8 +204,6 @@ export const content: ToolLocaleContent<TebasCheckUI> = {
214
204
  },
215
205
  ],
216
206
  ui: {
217
- faqTitle: '자주 묻는 질문',
218
- bibliographyTitle: '참고 자료 및 배경',
219
207
  scanning: '매트릭스 스캔 중...',
220
208
  seekingBlocks: '회선 내 콘크리트 차단물 탐색 중...',
221
209
  blockedTitle: '차단 중...',
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
3
  import type { ToolLocaleContent } from '../../../types';
3
4
  import type { TebasCheckUI } from '../types';
@@ -82,19 +83,8 @@ export const content: ToolLocaleContent<TebasCheckUI> = {
82
83
  slug,
83
84
  title,
84
85
  description,
85
- faqTitle: 'Veelgestelde vragen',
86
86
  faq: faqData,
87
- bibliographyTitle: 'Referenties en context',
88
- bibliography: [
89
- {
90
- name: 'Cloudflare: IP-blokkering begrijpen',
91
- url: 'https://www.cloudflare.com/learning/network-layer/what-is-ip-blocking/',
92
- },
93
- {
94
- name: 'Spaanse regelgeving voor dynamische blokkering',
95
- url: 'https://www.poderjudicial.es/',
96
- },
97
- ],
87
+ bibliography,
98
88
  howTo: howToData,
99
89
  schemas: [faqSchema as any, howToSchema as any, appSchema as any],
100
90
  seo: [
@@ -214,8 +204,6 @@ export const content: ToolLocaleContent<TebasCheckUI> = {
214
204
  },
215
205
  ],
216
206
  ui: {
217
- faqTitle: 'Veelgestelde vragen',
218
- bibliographyTitle: 'Referenties en context',
219
207
  scanning: 'De matrix scannen...',
220
208
  seekingBlocks: 'Zoeken naar betonblokken in je glasvezel...',
221
209
  blockedTitle: 'BLOKKEREN...',
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
3
  import type { ToolLocaleContent } from '../../../types';
3
4
  import type { TebasCheckUI } from '../types';
@@ -82,19 +83,8 @@ export const content: ToolLocaleContent<TebasCheckUI> = {
82
83
  slug,
83
84
  title,
84
85
  description,
85
- faqTitle: 'Często Zadawane Pytania',
86
86
  faq: faqData,
87
- bibliographyTitle: 'Referencje i Kontekst',
88
- bibliography: [
89
- {
90
- name: 'Cloudflare: Zrozumienie blokowania IP',
91
- url: 'https://www.cloudflare.com/learning/network-layer/what-is-ip-blocking/',
92
- },
93
- {
94
- name: 'Hiszpańskie przepisy dotyczące dynamicznego blokowania',
95
- url: 'https://www.poderjudicial.es/',
96
- },
97
- ],
87
+ bibliography,
98
88
  howTo: howToData,
99
89
  schemas: [faqSchema as any, howToSchema as any, appSchema as any],
100
90
  seo: [
@@ -214,8 +204,6 @@ export const content: ToolLocaleContent<TebasCheckUI> = {
214
204
  },
215
205
  ],
216
206
  ui: {
217
- faqTitle: 'Często Zadawane Pytania',
218
- bibliographyTitle: 'Referencje i Kontekst',
219
207
  scanning: 'Skanowanie matrixa...',
220
208
  seekingBlocks: 'Szukanie betonowych blokad w Twoim światłowodzie...',
221
209
  blockedTitle: 'BLOKOWANIE...',
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
3
  import type { ToolLocaleContent } from '../../../types';
3
4
  import type { TebasCheckUI } from '../types';
@@ -82,19 +83,8 @@ export const content: ToolLocaleContent<TebasCheckUI> = {
82
83
  slug,
83
84
  title,
84
85
  description,
85
- faqTitle: 'Perguntas Frequentes',
86
86
  faq: faqData,
87
- bibliographyTitle: 'Referências e Contexto',
88
- bibliography: [
89
- {
90
- name: 'Cloudflare: Compreender o bloqueio de IP',
91
- url: 'https://www.cloudflare.com/learning/network-layer/what-is-ip-blocking/',
92
- },
93
- {
94
- name: 'Regulamentações espanholas de bloqueio dinâmico',
95
- url: 'https://www.poderjudicial.es/',
96
- },
97
- ],
87
+ bibliography,
98
88
  howTo: howToData,
99
89
  schemas: [faqSchema as any, howToSchema as any, appSchema as any],
100
90
  seo: [
@@ -214,8 +204,6 @@ export const content: ToolLocaleContent<TebasCheckUI> = {
214
204
  },
215
205
  ],
216
206
  ui: {
217
- faqTitle: 'Perguntas Frecuentes',
218
- bibliographyTitle: 'Referências e Contexto',
219
207
  scanning: 'A ler a matrix...',
220
208
  seekingBlocks: 'A procurar blocos de betão na sua fibra...',
221
209
  blockedTitle: 'A BLOQUEAR...',
@@ -1,3 +1,4 @@
1
+ import { bibliography } from '../bibliography';
1
2
  import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
3
  import type { ToolLocaleContent } from '../../../types';
3
4
  import type { TebasCheckUI } from '../types';
@@ -36,7 +37,7 @@ const howToData = [
36
37
  },
37
38
  {
38
39
  name: 'Интерпретируйте результаты',
39
- text: 'Если вы видите результаты красного цвета, это означает, что данный IP недоступен. Если зеленого трафик проходит нормально.',
40
+ text: 'Если вы видите результаты красного цвета, это означает, что данный IP недоступен. Если зеленого - трафик проходит нормально.',
40
41
  },
41
42
  {
42
43
  name: 'Создайте отчет',
@@ -82,19 +83,8 @@ export const content: ToolLocaleContent<TebasCheckUI> = {
82
83
  slug,
83
84
  title,
84
85
  description,
85
- faqTitle: 'Часто задаваемые вопросы',
86
86
  faq: faqData,
87
- bibliographyTitle: 'Ссылки и контекст',
88
- bibliography: [
89
- {
90
- name: 'Cloudflare: Понимание блокировки IP',
91
- url: 'https://www.cloudflare.com/learning/network-layer/what-is-ip-blocking/',
92
- },
93
- {
94
- name: 'Испанские правила динамической блокировки',
95
- url: 'https://www.poderjudicial.es/',
96
- },
97
- ],
87
+ bibliography,
98
88
  howTo: howToData,
99
89
  schemas: [faqSchema as any, howToSchema as any, appSchema as any],
100
90
  seo: [
@@ -122,7 +112,7 @@ export const content: ToolLocaleContent<TebasCheckUI> = {
122
112
  },
123
113
  {
124
114
  type: 'paragraph',
125
- html: 'Ну уж нет. Текущее решение <strong>взорвать фундамент всего здания</strong>.',
115
+ html: 'Ну уж нет. Текущее решение - <strong>взорвать фундамент всего здания</strong>.',
126
116
  },
127
117
  {
128
118
  type: 'paragraph',
@@ -151,7 +141,7 @@ export const content: ToolLocaleContent<TebasCheckUI> = {
151
141
  },
152
142
  {
153
143
  title: 'Вердикт',
154
- description: 'Если Google работает, а Cloudflare нет, все предельно ясно: ваш провайдер применяет выборочную блокировку IP для Cloudflare.',
144
+ description: 'Если Google работает, а Cloudflare - нет, все предельно ясно: ваш провайдер применяет выборочную блокировку IP для Cloudflare.',
155
145
  },
156
146
  ],
157
147
  },
@@ -187,7 +177,7 @@ export const content: ToolLocaleContent<TebasCheckUI> = {
187
177
  type: 'list',
188
178
  items: [
189
179
  '<strong>Законно ли это использовать?</strong> Да. Пинговать сервер так же законно, как смотреть на витрину магазина. Этот инструмент является пассивной сетевой диагностикой. Он не взламывает шифрование, не подбирает пароли и не обращается к защищенному контенту. Он просто сообщает вам, почему вы не можете получить доступ к своим обычным сайтам.',
190
- '<strong>Как это исправить?</strong> Если у вас есть активная блокировка, смена DNS больше не помогает (они знают все уловки). Единственное реальное решение на сегодня <strong>VPN</strong>. Шифруя ваш трафик, провайдер не может видеть, что вы запрашиваете и у кого, и, следовательно, не может заблокировать вас "выборочно" (или по ошибке).',
180
+ '<strong>Как это исправить?</strong> Если у вас есть активная блокировка, смена DNS больше не помогает (они знают все уловки). Единственное реальное решение на сегодня - <strong>VPN</strong>. Шифруя ваш трафик, провайдер не может видеть, что вы запрашиваете и у кого, и, следовательно, не может заблокировать вас "выборочно" (или по ошибке).',
191
181
  ],
192
182
  },
193
183
  {
@@ -214,8 +204,6 @@ export const content: ToolLocaleContent<TebasCheckUI> = {
214
204
  },
215
205
  ],
216
206
  ui: {
217
- faqTitle: 'Часто задаваемые вопросы',
218
- bibliographyTitle: 'Ссылки и контекст',
219
207
  scanning: 'Сканирование матрицы...',
220
208
  seekingBlocks: 'Поиск бетонных блоков в вашем оптоволокне...',
221
209
  blockedTitle: 'БЛОКИРОВКА...',