@jjlmoya/utils-hardware 1.16.0 → 1.17.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 (79) hide show
  1. package/package.json +1 -1
  2. package/src/category/i18n/ru.ts +5 -5
  3. package/src/category/index.ts +2 -1
  4. package/src/entries.ts +4 -1
  5. package/src/index.ts +1 -0
  6. package/src/tests/locale_completeness.test.ts +2 -2
  7. package/src/tests/no_h1_in_components.test.ts +1 -1
  8. package/src/tests/tool_validation.test.ts +2 -2
  9. package/src/tool/batteryHealthEstimator/bibliography.ts +8 -8
  10. package/src/tool/batteryHealthEstimator/i18n/de.ts +1 -1
  11. package/src/tool/batteryHealthEstimator/i18n/en.ts +1 -1
  12. package/src/tool/batteryHealthEstimator/i18n/fr.ts +1 -1
  13. package/src/tool/batteryHealthEstimator/i18n/id.ts +1 -1
  14. package/src/tool/batteryHealthEstimator/i18n/nl.ts +1 -1
  15. package/src/tool/batteryHealthEstimator/i18n/pl.ts +1 -1
  16. package/src/tool/batteryHealthEstimator/i18n/pt.ts +1 -1
  17. package/src/tool/batteryHealthEstimator/i18n/ru.ts +5 -5
  18. package/src/tool/batteryHealthEstimator/i18n/sv.ts +1 -1
  19. package/src/tool/batteryHealthEstimator/i18n/tr.ts +1 -1
  20. package/src/tool/batteryHealthEstimator/i18n/zh.ts +1 -1
  21. package/src/tool/colorAccuracyTest/bibliography.astro +14 -0
  22. package/src/tool/colorAccuracyTest/bibliography.ts +16 -0
  23. package/src/tool/colorAccuracyTest/color-accuracy-test.css +728 -0
  24. package/src/tool/colorAccuracyTest/component.astro +157 -0
  25. package/src/tool/colorAccuracyTest/entry.ts +29 -0
  26. package/src/tool/colorAccuracyTest/i18n/de.ts +284 -0
  27. package/src/tool/colorAccuracyTest/i18n/en.ts +284 -0
  28. package/src/tool/colorAccuracyTest/i18n/es.ts +284 -0
  29. package/src/tool/colorAccuracyTest/i18n/fr.ts +284 -0
  30. package/src/tool/colorAccuracyTest/i18n/id.ts +284 -0
  31. package/src/tool/colorAccuracyTest/i18n/it.ts +284 -0
  32. package/src/tool/colorAccuracyTest/i18n/ja.ts +284 -0
  33. package/src/tool/colorAccuracyTest/i18n/ko.ts +284 -0
  34. package/src/tool/colorAccuracyTest/i18n/nl.ts +284 -0
  35. package/src/tool/colorAccuracyTest/i18n/pl.ts +284 -0
  36. package/src/tool/colorAccuracyTest/i18n/pt.ts +284 -0
  37. package/src/tool/colorAccuracyTest/i18n/ru.ts +284 -0
  38. package/src/tool/colorAccuracyTest/i18n/sv.ts +284 -0
  39. package/src/tool/colorAccuracyTest/i18n/tr.ts +284 -0
  40. package/src/tool/colorAccuracyTest/i18n/zh.ts +284 -0
  41. package/src/tool/colorAccuracyTest/index.ts +9 -0
  42. package/src/tool/colorAccuracyTest/logic.ts +226 -0
  43. package/src/tool/colorAccuracyTest/seo.astro +15 -0
  44. package/src/tool/colorAccuracyTest/ui.ts +27 -0
  45. package/src/tool/gamepadTest/i18n/ru.ts +1 -1
  46. package/src/tool/gamepadVibrationTester/bibliography.ts +8 -8
  47. package/src/tool/gamepadVibrationTester/i18n/ru.ts +3 -3
  48. package/src/tool/mousePollingTest/bibliography.ts +8 -8
  49. package/src/tool/mousePollingTest/i18n/de.ts +1 -1
  50. package/src/tool/mousePollingTest/i18n/en.ts +1 -1
  51. package/src/tool/mousePollingTest/i18n/es.ts +1 -1
  52. package/src/tool/mousePollingTest/i18n/fr.ts +1 -1
  53. package/src/tool/mousePollingTest/i18n/id.ts +1 -1
  54. package/src/tool/mousePollingTest/i18n/it.ts +1 -1
  55. package/src/tool/mousePollingTest/i18n/ja.ts +1 -1
  56. package/src/tool/mousePollingTest/i18n/ko.ts +1 -1
  57. package/src/tool/mousePollingTest/i18n/nl.ts +1 -1
  58. package/src/tool/mousePollingTest/i18n/pl.ts +1 -1
  59. package/src/tool/mousePollingTest/i18n/pt.ts +1 -1
  60. package/src/tool/mousePollingTest/i18n/ru.ts +3 -3
  61. package/src/tool/mousePollingTest/i18n/sv.ts +1 -1
  62. package/src/tool/mousePollingTest/i18n/tr.ts +1 -1
  63. package/src/tool/mousePollingTest/i18n/zh.ts +1 -1
  64. package/src/tool/refreshRateDetector/bibliography.ts +3 -11
  65. package/src/tool/refreshRateDetector/i18n/fr.ts +3 -3
  66. package/src/tool/refreshRateDetector/i18n/nl.ts +3 -3
  67. package/src/tool/refreshRateDetector/i18n/ru.ts +4 -4
  68. package/src/tool/toneGenerator/bibliography.ts +8 -8
  69. package/src/tool/toneGenerator/i18n/de.ts +1 -1
  70. package/src/tool/toneGenerator/i18n/en.ts +1 -1
  71. package/src/tool/toneGenerator/i18n/fr.ts +1 -1
  72. package/src/tool/toneGenerator/i18n/id.ts +1 -1
  73. package/src/tool/toneGenerator/i18n/it.ts +1 -1
  74. package/src/tool/toneGenerator/i18n/nl.ts +1 -1
  75. package/src/tool/toneGenerator/i18n/pl.ts +1 -1
  76. package/src/tool/toneGenerator/i18n/pt.ts +1 -1
  77. package/src/tool/toneGenerator/i18n/ru.ts +4 -4
  78. package/src/tool/toneGenerator/i18n/sv.ts +1 -1
  79. package/src/tools.ts +2 -1
@@ -0,0 +1,226 @@
1
+ export interface ColorTest {
2
+ name: string;
3
+ description: string;
4
+ instruction: string;
5
+ colors: string[];
6
+ }
7
+
8
+ export const SRGB_TESTS: ColorTest[] = [
9
+ {
10
+ name: 'Spectral Purity',
11
+ description: 'Primary & secondary colors',
12
+ instruction: 'Watch for consistent, pure colors. Any color shift or banding indicates display inaccuracy.',
13
+ colors: ['#000', '#fff', '#f00', '#0f0', '#00f', '#ff0', '#0ff', '#f0f'],
14
+ },
15
+ {
16
+ name: 'Gradient Dynamics',
17
+ description: 'Smooth color transitions',
18
+ instruction: 'Look for banding (visible steps) instead of smooth gradients. Banding = poor color depth or calibration.',
19
+ colors: [],
20
+ },
21
+ {
22
+ name: 'Black Crush Detection',
23
+ description: 'Shadow detail test',
24
+ instruction: 'Can you see all 6 shades? If blacks blur together, your display is crushing shadow details.',
25
+ colors: ['#000', '#111', '#222', '#333', '#444', '#555'],
26
+ },
27
+ {
28
+ name: 'White Point Calibration',
29
+ description: 'Brightness & temperature',
30
+ instruction: 'Check for color tint in whites. A neutral white has no warm (yellow) or cool (blue) cast.',
31
+ colors: ['#fff', '#f5f5f5', '#e8e8e8', '#d0d0d0', '#b0b0b0'],
32
+ },
33
+ ];
34
+
35
+ export const DCIP3_TESTS: ColorTest[] = [
36
+ {
37
+ name: 'Spectral Purity (DCI-P3)',
38
+ description: 'Cinema gamut colors',
39
+ instruction: 'DCI-P3 covers more colors than sRGB. Watch for vibrant, saturated colors without clipping.',
40
+ colors: ['#000', '#fff', '#ff0000', '#00ff00', '#0000ff'],
41
+ },
42
+ {
43
+ name: 'Gradient Dynamics',
44
+ description: 'Smooth color transitions',
45
+ instruction: 'Cinema displays should show silky-smooth gradients. Any stepping = insufficient bit depth.',
46
+ colors: [],
47
+ },
48
+ {
49
+ name: 'Black Crush Detection',
50
+ description: 'Shadow detail test',
51
+ instruction: 'Can you see all 6 shades? If blacks blur together, your display is crushing shadow details.',
52
+ colors: ['#000', '#111', '#222', '#333', '#444', '#555'],
53
+ },
54
+ {
55
+ name: 'White Point Calibration',
56
+ description: 'Brightness & temperature',
57
+ instruction: 'Check for color tint in whites. A neutral white has no warm (yellow) or cool (blue) cast.',
58
+ colors: ['#fff', '#f5f5f5', '#e8e8e8', '#d0d0d0', '#b0b0b0'],
59
+ },
60
+ ];
61
+
62
+ export class SpectrumCanvasTest {
63
+ private currentTestIndex = 0;
64
+ private currentColorIndex = 0;
65
+ private gamut: 'srgb' | 'dcip3' = 'srgb';
66
+ private tests: ColorTest[] = SRGB_TESTS;
67
+ private testBg: HTMLElement | null = null;
68
+ private testName: HTMLElement | null = null;
69
+ private testDescription: HTMLElement | null = null;
70
+ private progressBar: HTMLElement | null = null;
71
+ private testOverlay: HTMLElement | null = null;
72
+ private dashboard: HTMLElement | null = null;
73
+
74
+ constructor() {
75
+ this.testBg = document.getElementById('test-bg');
76
+ this.testName = document.getElementById('test-name');
77
+ this.testDescription = document.getElementById('test-description');
78
+ this.progressBar = document.querySelector('.sc-progress-bar');
79
+ this.testOverlay = document.getElementById('test-overlay');
80
+ this.dashboard = document.getElementById('dashboard');
81
+ }
82
+
83
+ start(gamut: 'srgb' | 'dcip3' = 'srgb') {
84
+ this.gamut = gamut;
85
+ this.tests = gamut === 'dcip3' ? DCIP3_TESTS : SRGB_TESTS;
86
+ this.currentTestIndex = 0;
87
+ this.currentColorIndex = 0;
88
+ this.showCurrentTest();
89
+ this.attachKeyboardListeners();
90
+ }
91
+
92
+ private showCurrentTest() {
93
+ const test = this.tests[this.currentTestIndex];
94
+ if (!test) return;
95
+
96
+ if (this.testName) {
97
+ this.testName.textContent = test.name;
98
+ }
99
+
100
+ if (this.testDescription) {
101
+ this.testDescription.textContent = test.instruction;
102
+ }
103
+
104
+ this.updateProgress();
105
+ this.displayColor();
106
+
107
+ const win = window as Record<string, unknown>;
108
+ if (win.updateTestUI) {
109
+ (win.updateTestUI as () => void)();
110
+ }
111
+ }
112
+
113
+ private displayColor() {
114
+ const test = this.tests[this.currentTestIndex];
115
+ if (!test || !this.testBg) return;
116
+
117
+ if (test.colors.length === 0) {
118
+ this.testBg.style.backgroundColor = '';
119
+ this.testBg.style.background =
120
+ 'linear-gradient(90deg, #f00, #ff0, #0f0, #0ff, #00f, #f0f, #f00)';
121
+ } else {
122
+ this.testBg.style.background = '';
123
+ const color = test.colors[this.currentColorIndex % test.colors.length];
124
+ this.testBg.style.backgroundColor = color;
125
+ }
126
+ }
127
+
128
+ private updateProgress() {
129
+ const totalTests = this.tests.length;
130
+ const progress = ((this.currentTestIndex + 1) / totalTests) * 100;
131
+ if (this.progressBar) {
132
+ this.progressBar.style.width = `${progress}%`;
133
+ }
134
+ }
135
+
136
+ nextColor() {
137
+ const test = this.tests[this.currentTestIndex];
138
+
139
+ if (!test || test.colors.length === 0) {
140
+ this.nextTest();
141
+ return;
142
+ }
143
+
144
+ this.currentColorIndex++;
145
+
146
+ if (this.currentColorIndex >= test.colors.length) {
147
+ this.nextTest();
148
+ } else {
149
+ this.displayColor();
150
+ }
151
+ }
152
+
153
+ prevColor() {
154
+ const test = this.tests[this.currentTestIndex];
155
+
156
+ if (!test || test.colors.length === 0) {
157
+ if (this.currentTestIndex === 0) return;
158
+ this.currentTestIndex--;
159
+ this.currentColorIndex = 0;
160
+ this.showCurrentTest();
161
+ return;
162
+ }
163
+
164
+ this.currentColorIndex--;
165
+
166
+ if (this.currentColorIndex < 0) {
167
+ if (this.currentTestIndex === 0) {
168
+ this.currentColorIndex = 0;
169
+ return;
170
+ }
171
+ this.currentTestIndex--;
172
+ const prevTest = this.tests[this.currentTestIndex];
173
+ this.currentColorIndex = prevTest.colors.length - 1;
174
+ this.showCurrentTest();
175
+ } else {
176
+ this.displayColor();
177
+ }
178
+ }
179
+
180
+ nextTest() {
181
+ this.currentTestIndex++;
182
+ this.currentColorIndex = 0;
183
+
184
+ if (this.currentTestIndex >= this.tests.length) {
185
+ setTimeout(() => this.finish(), 300);
186
+ } else {
187
+ this.showCurrentTest();
188
+ }
189
+ }
190
+
191
+ reset() {
192
+ this.currentTestIndex = 0;
193
+ this.currentColorIndex = 0;
194
+ this.showCurrentTest();
195
+ }
196
+
197
+ finish() {
198
+ if (this.testOverlay) {
199
+ this.testOverlay.style.display = 'none';
200
+ }
201
+ if (this.testBg) {
202
+ this.testBg.style.backgroundColor = '';
203
+ this.testBg.style.background = '';
204
+ }
205
+ this.currentTestIndex = 0;
206
+ this.currentColorIndex = 0;
207
+ }
208
+
209
+ private attachKeyboardListeners() {
210
+ const handleKeydown = (e: KeyboardEvent) => {
211
+ if (e.code === 'Space') {
212
+ e.preventDefault();
213
+ this.nextColor();
214
+ } else if (e.key === 'r' || e.key === 'R') {
215
+ e.preventDefault();
216
+ this.reset();
217
+ } else if (e.key === 'Escape') {
218
+ e.preventDefault();
219
+ this.finish();
220
+ document.removeEventListener('keydown', handleKeydown);
221
+ }
222
+ };
223
+
224
+ document.addEventListener('keydown', handleKeydown);
225
+ }
226
+ }
@@ -0,0 +1,15 @@
1
+ ---
2
+ import { SEORenderer } from '@jjlmoya/utils-shared';
3
+ import { spectrumCanvas } 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 spectrumCanvas.i18n[locale]?.();
12
+ if (!content) return null;
13
+ ---
14
+
15
+ {content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
@@ -0,0 +1,27 @@
1
+ export interface SpectrumCanvasUI extends Record<string, string> {
2
+ badge: string;
3
+ title: string;
4
+ description: string;
5
+ btnStartCalibration: string;
6
+ btnFullscreen: string;
7
+ kbdFullscreen: string;
8
+ kbdFullscreenLabel: string;
9
+ kbdReset: string;
10
+ kbdResetLabel: string;
11
+ kbdEsc: string;
12
+ kbdEscLabel: string;
13
+ gamutSRGB: string;
14
+ gamutDCIP3: string;
15
+ gamutToggle: string;
16
+ hardwareName: string;
17
+ hardwareNamePlaceholder: string;
18
+ purityTest: string;
19
+ gradientTest: string;
20
+ blackHoleTest: string;
21
+ whitePointTest: string;
22
+ colorCheckpoint: string;
23
+ generateReport: string;
24
+ viewResults: string;
25
+ btnExit: string;
26
+ compareSideBySide: string;
27
+ }
@@ -104,7 +104,7 @@ export const content: ToolLocaleContent<TestMandoUI> = {
104
104
  },
105
105
  {
106
106
  type: 'paragraph',
107
- html: 'Дрифт это распространенный дефект аналоговых стиков, при котором регистрируется движение без прикосновения к джойстику. Это вызвано износом внутренних потенциометров.',
107
+ html: 'Дрифт -это распространенный дефект аналоговых стиков, при котором регистрируется движение без прикосновения к джойстику. Это вызвано износом внутренних потенциометров.',
108
108
  },
109
109
  {
110
110
  type: 'title',
@@ -2,12 +2,12 @@ import type { BibliographyEntry } from '../../../types';
2
2
 
3
3
  export const bibliography: BibliographyEntry[] = [
4
4
 
5
- {
6
- name: 'How haptic vibration works HobbyConsolas',
7
- url: 'https://www.hobbyconsolas.com/reportajes/como-funciona-vibracion-haptica-mando-dualsense-ps5-757673',
8
- },
9
- {
10
- name: 'Gamepad API W3C',
11
- url: 'https://w3c.github.io/gamepad/',
12
- },
5
+ {
6
+ name: 'How haptic vibration works -HobbyConsolas',
7
+ url: 'https://www.hobbyconsolas.com/reportajes/como-funciona-vibracion-haptica-mando-dualsense-ps5-757673',
8
+ },
9
+ {
10
+ name: 'Gamepad API -W3C',
11
+ url: 'https://w3c.github.io/gamepad/',
12
+ },
13
13
  ];
@@ -22,12 +22,12 @@ const faqData = [
22
22
  {
23
23
  question: 'Правая сторона моего геймпада вибрирует меньше левой, это нормально?',
24
24
  answer:
25
- 'Да, совершенно нормально. Геймпады обычно имеют асимметричную конструкцию, где одна сторона отвечает за сильную, глубокую вибрацию, а другая за быструю, легкую вибрацию.',
25
+ 'Да, совершенно нормально. Геймпады обычно имеют асимметричную конструкцию, где одна сторона отвечает за сильную, глубокую вибрацию, а другая -за быструю, легкую вибрацию.',
26
26
  },
27
27
  {
28
28
  question: 'Сильно ли эти тесты расходуют заряд батареи?',
29
29
  answer:
30
- 'Вибрация одна из самых энергоемких функций беспроводного геймпада. Проведение непрерывных длительных тестов разрядит батарею быстрее, чем обычно.',
30
+ 'Вибрация -одна из самых энергоемких функций беспроводного геймпада. Проведение непрерывных длительных тестов разрядит батарею быстрее, чем обычно.',
31
31
  },
32
32
  ];
33
33
 
@@ -96,7 +96,7 @@ export const content: ToolLocaleContent<ProbadorVibracionMandoUI> = {
96
96
  { type: 'title', text: 'Как проверить вибрацию геймпада', level: 2 },
97
97
  {
98
98
  type: 'paragraph',
99
- html: 'Тактильная отдача один из самых захватывающих элементов игрового оборудования. Когда мотор выходит из строя, первыми признаками обычно являются ненормальное жужжание или асимметричная вибрация. Ранняя диагностика предотвращает серьезные поломки.',
99
+ html: 'Тактильная отдача -один из самых захватывающих элементов игрового оборудования. Когда мотор выходит из строя, первыми признаками обычно являются ненормальное жужжание или асимметричная вибрация. Ранняя диагностика предотвращает серьезные поломки.',
100
100
  },
101
101
  { type: 'title', text: 'Зачем проводить тест вибрации?', level: 3 },
102
102
  {
@@ -2,12 +2,12 @@ import type { BibliographyEntry } from '../../../types';
2
2
 
3
3
  export const bibliography: BibliographyEntry[] = [
4
4
 
5
- {
6
- name: 'Gamepad Polling Rate Logitech',
7
- url: 'https://www.logitechg.com/en-us/innovation/delta-zero.html',
8
- },
9
- {
10
- name: 'USB HID Polling Rate USB Implementers Forum',
11
- url: 'https://www.usb.org/hid',
12
- },
5
+ {
6
+ name: 'Gamepad Polling Rate -Logitech',
7
+ url: 'https://www.logitechg.com/en-us/innovation/delta-zero.html',
8
+ },
9
+ {
10
+ name: 'USB HID Polling Rate -USB Implementers Forum',
11
+ url: 'https://www.usb.org/hid',
12
+ },
13
13
  ];
@@ -101,7 +101,7 @@ export const content: ToolLocaleContent<TestRatonUI> = {
101
101
  { type: 'title', text: 'Polling Rate Stufen und ihre Verwendung', level: 3 },
102
102
  {
103
103
  type: 'paragraph',
104
- html: '<strong>125 Hz</strong> Die Maus meldet alle 8 Millisekunden. Gut für die Büroarbeit, fühlt sich aber auf 144Hz-Monitoren ruckelig an. <strong>1000 Hz</strong> Der Goldstandard für Gaming: meldet jede Millisekunde (1 ms). Flüssige Bewegung ohne spürbare Verzögerung. <strong>8000 Hz</strong> Modernste Technologie (Razer, Logitech). Meldet alle 0,125 ms, erfordert aber eine starke CPU.',
104
+ html: '<strong>125 Hz</strong> -Die Maus meldet alle 8 Millisekunden. Gut für die Büroarbeit, fühlt sich aber auf 144Hz-Monitoren ruckelig an. <strong>1000 Hz</strong> -Der Goldstandard für Gaming: meldet jede Millisekunde (1 ms). Flüssige Bewegung ohne spürbare Verzögerung. <strong>8000 Hz</strong> -Modernste Technologie (Razer, Logitech). Meldet alle 0,125 ms, erfordert aber eine starke CPU.',
105
105
  },
106
106
  { type: 'title', text: 'Warum schwanken meine Hz?', level: 3 },
107
107
  {
@@ -101,7 +101,7 @@ export const content: ToolLocaleContent<TestRatonUI> = {
101
101
  { type: 'title', text: 'Polling Rate Levels and Their Uses', level: 3 },
102
102
  {
103
103
  type: 'paragraph',
104
- html: '<strong>125 Hz</strong> The mouse reports every 8 milliseconds. Fine for office use but feels choppy on 144Hz monitors. <strong>1000 Hz</strong> The gaming gold standard: reports every 1 ms. Smooth movement with no perceptible delay. <strong>8000 Hz</strong> Cutting-edge technology (Razer, Logitech). Reports every 0.125 ms but requires a powerful CPU.',
104
+ html: '<strong>125 Hz</strong> -The mouse reports every 8 milliseconds. Fine for office use but feels choppy on 144Hz monitors. <strong>1000 Hz</strong> -The gaming gold standard: reports every 1 ms. Smooth movement with no perceptible delay. <strong>8000 Hz</strong> -Cutting-edge technology (Razer, Logitech). Reports every 0.125 ms but requires a powerful CPU.',
105
105
  },
106
106
  { type: 'title', text: 'Why Do My Hz Fluctuate?', level: 3 },
107
107
  {
@@ -101,7 +101,7 @@ export const content: ToolLocaleContent<TestRatonUI> = {
101
101
  { type: 'title', text: 'Niveles de Polling Rate y sus usos', level: 3 },
102
102
  {
103
103
  type: 'paragraph',
104
- html: '<strong>125 Hz</strong> El ratón informa cada 8 milisegundos. Perfecto para uso de oficina, pero se nota a tirones en monitores de 144Hz. <strong>1000 Hz</strong> El estándar de oro del gaming: informa cada 1 ms. Movimiento fluido y sin retraso perceptible. <strong>8000 Hz</strong> Tecnología punta (Razer, Logitech). Informa cada 0.125 ms, pero requiere una CPU potente.',
104
+ html: '<strong>125 Hz</strong> -El ratón informa cada 8 milisegundos. Perfecto para uso de oficina, pero se nota a tirones en monitores de 144Hz. <strong>1000 Hz</strong> -El estándar de oro del gaming: informa cada 1 ms. Movimiento fluido y sin retraso perceptible. <strong>8000 Hz</strong> -Tecnología punta (Razer, Logitech). Informa cada 0.125 ms, pero requiere una CPU potente.',
105
105
  },
106
106
  { type: 'title', text: '¿Por qué mis Hz fluctúan?', level: 3 },
107
107
  {
@@ -101,7 +101,7 @@ export const content: ToolLocaleContent<TestRatonUI> = {
101
101
  { type: 'title', text: 'Niveaux de Taux de Sondage et Leurs Usages', level: 3 },
102
102
  {
103
103
  type: 'paragraph',
104
- html: "<strong>125 Hz</strong> La souris communique toutes les 8 ms. Parfait pour un usage bureautique, mais saccadé sur un écran 144Hz. <strong>1000 Hz</strong> L'étalon-or du gaming : communication toutes les 1 ms, mouvement fluide. <strong>8000 Hz</strong> Technologie de pointe (Razer, Logitech), nécessite un processeur puissant.",
104
+ html: "<strong>125 Hz</strong> -La souris communique toutes les 8 ms. Parfait pour un usage bureautique, mais saccadé sur un écran 144Hz. <strong>1000 Hz</strong> -L'étalon-or du gaming : communication toutes les 1 ms, mouvement fluide. <strong>8000 Hz</strong> -Technologie de pointe (Razer, Logitech), nécessite un processeur puissant.",
105
105
  },
106
106
  { type: 'title', text: 'Pourquoi mes Hz fluctuent-ils ?', level: 3 },
107
107
  {
@@ -101,7 +101,7 @@ export const content: ToolLocaleContent<TestRatonUI> = {
101
101
  { type: 'title', text: 'Tingkat Polling Rate dan Kegunaannya', level: 3 },
102
102
  {
103
103
  type: 'paragraph',
104
- html: '<strong>125 Hz</strong> Mouse melapor setiap 8 milidetik. Baik untuk penggunaan kantor tetapi terasa patah-patah pada monitor 144Hz. <strong>1000 Hz</strong> Standar emas gaming: melapor setiap 1 ms. Gerakan mulus tanpa lag yang terasa. <strong>8000 Hz</strong> Teknologi mutakhir (Razer, Logitech). Melapor setiap 0,125 ms tetapi membutuhkan CPU yang kuat.',
104
+ html: '<strong>125 Hz</strong> -Mouse melapor setiap 8 milidetik. Baik untuk penggunaan kantor tetapi terasa patah-patah pada monitor 144Hz. <strong>1000 Hz</strong> -Standar emas gaming: melapor setiap 1 ms. Gerakan mulus tanpa lag yang terasa. <strong>8000 Hz</strong> -Teknologi mutakhir (Razer, Logitech). Melapor setiap 0,125 ms tetapi membutuhkan CPU yang kuat.',
105
105
  },
106
106
  { type: 'title', text: 'Mengapa Hz saya Berfluktuasi?', level: 3 },
107
107
  {
@@ -101,7 +101,7 @@ export const content: ToolLocaleContent<TestRatonUI> = {
101
101
  { type: 'title', text: 'Livelli di Polling Rate e loro utilizzi', level: 3 },
102
102
  {
103
103
  type: 'paragraph',
104
- html: '<strong>125 Hz</strong> Il mouse comunica ogni 8 millisecondi. Va bene per l\'ufficio ma appare a scatti sui monitor a 144Hz. <strong>1000 Hz</strong> Lo standard d\'oro per il gaming: comunica ogni 1 ms. Movimento fluido senza ritardi percettibili. <strong>8000 Hz</strong> Tecnologia all\'avanguardia (Razer, Logitech). Comunica ogni 0,125 ms ma richiede una CPU potente.',
104
+ html: '<strong>125 Hz</strong> -Il mouse comunica ogni 8 millisecondi. Va bene per l\'ufficio ma appare a scatti sui monitor a 144Hz. <strong>1000 Hz</strong> -Lo standard d\'oro per il gaming: comunica ogni 1 ms. Movimento fluido senza ritardi percettibili. <strong>8000 Hz</strong> -Tecnologia all\'avanguardia (Razer, Logitech). Comunica ogni 0,125 ms ma richiede una CPU potente.',
105
105
  },
106
106
  { type: 'title', text: 'Perché i miei Hz fluttuano?', level: 3 },
107
107
  {
@@ -101,7 +101,7 @@ export const content: ToolLocaleContent<TestRatonUI> = {
101
101
  { type: 'title', text: 'ポーリングレートの種類と用途', level: 3 },
102
102
  {
103
103
  type: 'paragraph',
104
- html: '<strong>125 Hz</strong> 8ミリ秒ごとに報告。一般事務用途には十分ですが、144Hzモニターでは動きが荒く感じられます。<strong>1000 Hz</strong> — ゲーミングの標準:1ミリ秒ごとに報告。感知できる遅延のないスムーズな動き。<strong>8000 Hz</strong> — 最新技術(Razer、Logitechなど)。0.125ミリ秒ごとに報告しますが、ハイスペックなCPUが必要です。',
104
+ html: '<strong>125 Hz</strong> -8ミリ秒ごとに報告。一般事務用途には十分ですが、144Hzモニターでは動きが荒く感じられます。<strong>1000 Hz</strong> -ゲーミングの標準:1ミリ秒ごとに報告。感知できる遅延のないスムーズな動き。<strong>8000 Hz</strong> -最新技術(Razer、Logitechなど)。0.125ミリ秒ごとに報告しますが、ハイスペックなCPUが必要です。',
105
105
  },
106
106
  { type: 'title', text: 'Hzが変動するのはなぜですか?', level: 3 },
107
107
  {
@@ -101,7 +101,7 @@ export const content: ToolLocaleContent<TestRatonUI> = {
101
101
  { type: 'title', text: '폴링 레이트 단계 및 용도', level: 3 },
102
102
  {
103
103
  type: 'paragraph',
104
- html: '<strong>125 Hz</strong> 마우스가 8밀리초마다 보고합니다. 사무용으로는 괜찮지만 144Hz 모니터에서는 끊겨 보일 수 있습니다. <strong>1000 Hz</strong> 게이밍의 표준: 1ms마다 보고합니다. 눈에 띄는 지연 없는 부드러운 움직임을 제공합니다. <strong>8000 Hz</strong> 최첨단 기술(Razer, Logitech). 0.125ms마다 보고하지만 고성능 CPU가 필요합니다.',
104
+ html: '<strong>125 Hz</strong> -마우스가 8밀리초마다 보고합니다. 사무용으로는 괜찮지만 144Hz 모니터에서는 끊겨 보일 수 있습니다. <strong>1000 Hz</strong> -게이밍의 표준: 1ms마다 보고합니다. 눈에 띄는 지연 없는 부드러운 움직임을 제공합니다. <strong>8000 Hz</strong> -최첨단 기술(Razer, Logitech). 0.125ms마다 보고하지만 고성능 CPU가 필요합니다.',
105
105
  },
106
106
  { type: 'title', text: 'Hz 수치가 왜 변동하나요?', level: 3 },
107
107
  {
@@ -101,7 +101,7 @@ export const content: ToolLocaleContent<TestRatonUI> = {
101
101
  { type: 'title', text: 'Polling Rate Niveaus en hun Gebruik', level: 3 },
102
102
  {
103
103
  type: 'paragraph',
104
- html: '<strong>125 Hz</strong> De muis rapporteert elke 8 milliseconden. Prima voor kantoorgebruik, maar voelt schokkerig aan op 144Hz monitoren. <strong>1000 Hz</strong> De gouden standaard voor gaming: rapporteert elke 1 ms. Vloeiende beweging zonder merkbare vertraging. <strong>8000 Hz</strong> Geavanceerde technologie (Razer, Logitech). Rapporteert elke 0,125 ms, maar vereist een krachtige CPU.',
104
+ html: '<strong>125 Hz</strong> -De muis rapporteert elke 8 milliseconden. Prima voor kantoorgebruik, maar voelt schokkerig aan op 144Hz monitoren. <strong>1000 Hz</strong> -De gouden standaard voor gaming: rapporteert elke 1 ms. Vloeiende beweging zonder merkbare vertraging. <strong>8000 Hz</strong> -Geavanceerde technologie (Razer, Logitech). Rapporteert elke 0,125 ms, maar vereist een krachtige CPU.',
105
105
  },
106
106
  { type: 'title', text: 'Waarom fluctueren mijn Hz?', level: 3 },
107
107
  {
@@ -101,7 +101,7 @@ export const content: ToolLocaleContent<TestRatonUI> = {
101
101
  { type: 'title', text: 'Poziomy Polling Rate i ich zastosowania', level: 3 },
102
102
  {
103
103
  type: 'paragraph',
104
- html: '<strong>125 Hz</strong> Mysz raportuje co 8 milisekund. Dobre do pracy biurowej, ale wydaje się rwane na monitorach 144Hz. <strong>1000 Hz</strong> Złoty standard gamingowy: raportuje co 1 ms. Płynny ruch bez odczuwalnych opóźnień. <strong>8000 Hz</strong> Najnowocześniejsza technologia (Razer, Logitech). Raportuje co 0,125 ms, ale wymaga mocnego procesora.',
104
+ html: '<strong>125 Hz</strong> -Mysz raportuje co 8 milisekund. Dobre do pracy biurowej, ale wydaje się rwane na monitorach 144Hz. <strong>1000 Hz</strong> -Złoty standard gamingowy: raportuje co 1 ms. Płynny ruch bez odczuwalnych opóźnień. <strong>8000 Hz</strong> -Najnowocześniejsza technologia (Razer, Logitech). Raportuje co 0,125 ms, ale wymaga mocnego procesora.',
105
105
  },
106
106
  { type: 'title', text: 'Dlaczego moje Hz wahają się?', level: 3 },
107
107
  {
@@ -101,7 +101,7 @@ export const content: ToolLocaleContent<TestRatonUI> = {
101
101
  { type: 'title', text: 'Níveis de Polling Rate e Seus Usos', level: 3 },
102
102
  {
103
103
  type: 'paragraph',
104
- html: '<strong>125 Hz</strong> O rato comunica a cada 8 milissegundos. Bom para uso de escritório, mas parece tremido em monitores de 144Hz. <strong>1000 Hz</strong> O padrão de ouro do gaming: comunica a cada 1 ms. Movimento fluido sem atraso percetível. <strong>8000 Hz</strong> Tecnologia de ponta (Razer, Logitech). Comunica a cada 0,125 ms, mas requer um CPU potente.',
104
+ html: '<strong>125 Hz</strong> -O rato comunica a cada 8 milissegundos. Bom para uso de escritório, mas parece tremido em monitores de 144Hz. <strong>1000 Hz</strong> -O padrão de ouro do gaming: comunica a cada 1 ms. Movimento fluido sem atraso percetível. <strong>8000 Hz</strong> -Tecnologia de ponta (Razer, Logitech). Comunica a cada 0,125 ms, mas requer um CPU potente.',
105
105
  },
106
106
  { type: 'title', text: 'Porque é que os meus Hz flutuam?', level: 3 },
107
107
  {
@@ -96,12 +96,12 @@ export const content: ToolLocaleContent<TestRatonUI> = {
96
96
  { type: 'title', text: 'Полное руководство по частоте опроса мыши', level: 2 },
97
97
  {
98
98
  type: 'paragraph',
99
- html: 'Когда вы физически перемещаете мышь по коврику, это аналоговое движение должно быть преобразовано в цифровые сигналы, которые понимает ваш компьютер. <strong>Polling Rate</strong> это частота, с которой мышь «сообщает» свою позицию ПК. Она измеряется в Герцах (Гц).',
99
+ html: 'Когда вы физически перемещаете мышь по коврику, это аналоговое движение должно быть преобразовано в цифровые сигналы, которые понимает ваш компьютер. <strong>Polling Rate</strong> -это частота, с которой мышь «сообщает» свою позицию ПК. Она измеряется в Герцах (Гц).',
100
100
  },
101
101
  { type: 'title', text: 'Уровни частоты опроса и их использование', level: 3 },
102
102
  {
103
103
  type: 'paragraph',
104
- html: '<strong>125 Гц</strong> Мышь отправляет отчет каждые 8 миллисекунд. Подходит для офисного использования, но движения кажутся прерывистыми на мониторах 144 Гц. <strong>1000 Гц</strong> Золотой стандарт гейминга: отчет каждую 1 мс. Плавное движение без видимых задержек. <strong>8000 Гц</strong> Новейшие технологии (Razer, Logitech). Отчет каждые 0,125 мс, но требуется мощный процессор.',
104
+ html: '<strong>125 Гц</strong> -Мышь отправляет отчет каждые 8 миллисекунд. Подходит для офисного использования, но движения кажутся прерывистыми на мониторах 144 Гц. <strong>1000 Гц</strong> -Золотой стандарт гейминга: отчет каждую 1 мс. Плавное движение без видимых задержек. <strong>8000 Гц</strong> -Новейшие технологии (Razer, Logitech). Отчет каждые 0,125 мс, но требуется мощный процессор.',
105
105
  },
106
106
  { type: 'title', text: 'Почему частота Гц колеблется?', level: 3 },
107
107
  {
@@ -111,7 +111,7 @@ export const content: ToolLocaleContent<TestRatonUI> = {
111
111
  { type: 'title', text: 'Polling Rate против DPI: В чем разница', level: 3 },
112
112
  {
113
113
  type: 'paragraph',
114
- html: '<strong>DPI (Dots Per Inch)</strong> это чувствительность: сколько пикселей проходит курсор на дюйм физического перемещения. <strong>Гц (Polling Rate)</strong> это частота обновления: насколько плавно и своевременно сообщается об этом перемещении. Оба параметра независимы и дополняют друг друга.',
114
+ html: '<strong>DPI (Dots Per Inch)</strong> -это чувствительность: сколько пикселей проходит курсор на дюйм физического перемещения. <strong>Гц (Polling Rate)</strong> -это частота обновления: насколько плавно и своевременно сообщается об этом перемещении. Оба параметра независимы и дополняют друг друга.',
115
115
  },
116
116
  ],
117
117
  ui: {
@@ -101,7 +101,7 @@ export const content: ToolLocaleContent<TestRatonUI> = {
101
101
  { type: 'title', text: 'Polling Rate-nivåer och deras användning', level: 3 },
102
102
  {
103
103
  type: 'paragraph',
104
- html: '<strong>125 Hz</strong> Musen rapporterar var 8:e millisekund. Okej för kontorsbruk men ser ryckigt ut på 144Hz-monitorer. <strong>1000 Hz</strong> Den gyllene standarden för gaming: rapporterar varje millisekund (1 ms). Mjuk rörelse utan märkbar fördröjning. <strong>8000 Hz</strong> Banbrytande teknologi (Razer, Logitech). Rapporterar var 0,125 ms men kräver en kraftfull CPU.',
104
+ html: '<strong>125 Hz</strong> -Musen rapporterar var 8:e millisekund. Okej för kontorsbruk men ser ryckigt ut på 144Hz-monitorer. <strong>1000 Hz</strong> -Den gyllene standarden för gaming: rapporterar varje millisekund (1 ms). Mjuk rörelse utan märkbar fördröjning. <strong>8000 Hz</strong> -Banbrytande teknologi (Razer, Logitech). Rapporterar var 0,125 ms men kräver en kraftfull CPU.',
105
105
  },
106
106
  { type: 'title', text: 'Varför fluktuerar mina Hz?', level: 3 },
107
107
  {
@@ -101,7 +101,7 @@ export const content: ToolLocaleContent<TestRatonUI> = {
101
101
  { type: 'title', text: 'Polling Rate Seviyeleri ve Kullanımları', level: 3 },
102
102
  {
103
103
  type: 'paragraph',
104
- html: '<strong>125 Hz</strong> Fare her 8 milisaniyede bir bildirim yapar. Ofis kullanımı için uygundur ancak 144Hz monitörlerde kesik kesik hissettirir. <strong>1000 Hz</strong> Oyun oynamanın altın standardı: her 1 ms\'de bir bildirim yapar. Algılanabilir bir gecikme olmaksızın akıcı hareket. <strong>8000 Hz</strong> En son teknoloji (Razer, Logitech). Her 0,125 ms\'de bir bildirim yapar ancak güçlü bir CPU gerektirir.',
104
+ html: '<strong>125 Hz</strong> -Fare her 8 milisaniyede bir bildirim yapar. Ofis kullanımı için uygundur ancak 144Hz monitörlerde kesik kesik hissettirir. <strong>1000 Hz</strong> -Oyun oynamanın altın standardı: her 1 ms\'de bir bildirim yapar. Algılanabilir bir gecikme olmaksızın akıcı hareket. <strong>8000 Hz</strong> -En son teknoloji (Razer, Logitech). Her 0,125 ms\'de bir bildirim yapar ancak güçlü bir CPU gerektirir.',
105
105
  },
106
106
  { type: 'title', text: 'Hz Neden Dalgalanıyor?', level: 3 },
107
107
  {
@@ -101,7 +101,7 @@ export const content: ToolLocaleContent<TestRatonUI> = {
101
101
  { type: 'title', text: '回报率等级及其用途', level: 3 },
102
102
  {
103
103
  type: 'paragraph',
104
- html: '<strong>125 Hz</strong> 鼠标每 8 毫秒报告一次。适用于办公,但在 144Hz 显示器上会感到卡顿。 <strong>1000 Hz</strong> 游戏黄金标准:每 1 毫秒报告一次。平滑移动,无感知延迟。 <strong>8000 Hz</strong> — 尖端技术(Razer, Logitech)。每 0.125 毫秒报告一次,但需要强劲的 CPU。',
104
+ html: '<strong>125 Hz</strong> -鼠标每 8 毫秒报告一次。适用于办公,但在 144Hz 显示器上会感到卡顿。 <strong>1000 Hz</strong> -游戏黄金标准:每 1 毫秒报告一次。平滑移动,无感知延迟。 <strong>8000 Hz</strong> -尖端技术(Razer, Logitech)。每 0.125 毫秒报告一次,但需要强劲的 CPU。',
105
105
  },
106
106
  { type: 'title', text: '为什么我的 Hz 值会波动?', level: 3 },
107
107
  {
@@ -3,18 +3,10 @@ import type { BibliographyEntry } from '../../types';
3
3
  export const bibliography: BibliographyEntry[] = [
4
4
  {
5
5
  name: 'VESA DisplayPort Standard - Monitor Refresh Rates',
6
- url: 'https://www.vesa.org/standards/',
6
+ url: 'https://vesa.org/displayport-developer/why-displayport/',
7
7
  },
8
8
  {
9
9
  name: 'HDMI Specification - Refresh Rate Support',
10
- url: 'https://www.hdmi.org/spec21Sub1',
11
- },
12
- {
13
- name: 'MDN - requestAnimationFrame API',
14
- url: 'https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame',
15
- },
16
- {
17
- name: 'Screen Refresh Rate - Performance Best Practices',
18
- url: 'https://web.dev/animations-guide/',
19
- },
10
+ url: 'https://silklandtech.com/de/blogs/news/maximum-hdmi-refresh-rate',
11
+ }
20
12
  ];
@@ -122,7 +122,7 @@ export const content: ToolLocaleContent<RefreshRateDetectorUI> = {
122
122
  {
123
123
  type: 'list',
124
124
  items: [
125
- 'Chargez ce détecteur la mesure commence immédiatement',
125
+ 'Chargez ce détecteur -la mesure commence immédiatement',
126
126
  'Choisissez entre le mode de mesure Rapide (3s) ou Stable (10s)',
127
127
  'Lisez les Hz de votre moniteur sur le cadran du tachymètre',
128
128
  'Comparez aux normes de l\'industrie (60, 75, 120, 144, 240, 360Hz)',
@@ -152,7 +152,7 @@ export const content: ToolLocaleContent<RefreshRateDetectorUI> = {
152
152
  {
153
153
  type: 'list',
154
154
  items: [
155
- 'Vérifiez les connexions du câble HDMI/DisplayPort des câbles lâches réduisent la bande passante',
155
+ 'Vérifiez les connexions du câble HDMI/DisplayPort -des câbles lâches réduisent la bande passante',
156
156
  'Mettez à jour vos pilotes GPU (NVIDIA, AMD, Intel)',
157
157
  'Vérifiez les paramètres d\'affichage de l\'OS pour vous assurer que le taux de rafraîchissement élevé est activé',
158
158
  'Essayez différents câbles ou ports sur votre moniteur',
@@ -166,7 +166,7 @@ export const content: ToolLocaleContent<RefreshRateDetectorUI> = {
166
166
  },
167
167
  {
168
168
  type: 'paragraph',
169
- html: 'Cet outil utilise l\'API requestAnimationFrame du navigateur, qui se synchronise directement avec le cycle de rafraîchissement de votre moniteur. En mesurant le temps entre les images d\'animation, nous calculons votre taux de rafraîchissement exact avec une grande précision aucun matériel spécial n\'est requis.',
169
+ html: 'Cet outil utilise l\'API requestAnimationFrame du navigateur, qui se synchronise directement avec le cycle de rafraîchissement de votre moniteur. En mesurant le temps entre les images d\'animation, nous calculons votre taux de rafraîchissement exact avec une grande précision -aucun matériel spécial n\'est requis.',
170
170
  },
171
171
  ],
172
172
  ui: {
@@ -122,7 +122,7 @@ export const content: ToolLocaleContent<RefreshRateDetectorUI> = {
122
122
  {
123
123
  type: 'list',
124
124
  items: [
125
- 'Laad deze detector de meting begint onmiddellijk',
125
+ 'Laad deze detector -de meting begint onmiddellijk',
126
126
  'Kies tussen Snelle (3s) of Stabiele (10s) meetmodus',
127
127
  'Lees de Hz van uw monitor af van de snelheidsmeter',
128
128
  'Vergelijk met industriestandaarden (60, 75, 120, 144, 240, 360Hz)',
@@ -152,7 +152,7 @@ export const content: ToolLocaleContent<RefreshRateDetectorUI> = {
152
152
  {
153
153
  type: 'list',
154
154
  items: [
155
- 'Controleer HDMI/DisplayPort kabelverbindingen losse kabels verminderen de bandbreedte',
155
+ 'Controleer HDMI/DisplayPort kabelverbindingen -losse kabels verminderen de bandbreedte',
156
156
  'Update uw GPU-stuurprogramma\'s (NVIDIA, AMD, Intel)',
157
157
  'Controleer de OS-beeldscherminstellingen om er zeker van te zijn dat een hoge verversingssnelheid is ingeschakeld',
158
158
  'Probeer andere kabels of poorten op uw monitor',
@@ -166,7 +166,7 @@ export const content: ToolLocaleContent<RefreshRateDetectorUI> = {
166
166
  },
167
167
  {
168
168
  type: 'paragraph',
169
- html: 'Deze tool maakt gebruik van de requestAnimationFrame API van de browser, die direct synchroniseert met de verversingscyclus van uw monitor. Door de tijd tussen animatieframes te meten, berekenen we uw exacte verversingssnelheid met hoge precisie geen speciale hardware nodig.',
169
+ html: 'Deze tool maakt gebruik van de requestAnimationFrame API van de browser, die direct synchroniseert met de verversingscyclus van uw monitor. Door de tijd tussen animatieframes te meten, berekenen we uw exacte verversingssnelheid met hoge precisie -geen speciale hardware nodig.',
170
170
  },
171
171
  ],
172
172
  ui: {