@jjlmoya/utils-hardware 1.16.0 → 1.18.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 (111) hide show
  1. package/package.json +1 -1
  2. package/src/category/i18n/de.ts +4 -4
  3. package/src/category/i18n/id.ts +3 -3
  4. package/src/category/i18n/it.ts +3 -3
  5. package/src/category/i18n/nl.ts +3 -3
  6. package/src/category/i18n/pl.ts +4 -4
  7. package/src/category/i18n/pt.ts +3 -3
  8. package/src/category/i18n/ru.ts +6 -6
  9. package/src/category/i18n/sv.ts +3 -3
  10. package/src/category/i18n/tr.ts +3 -3
  11. package/src/category/i18n/zh.ts +3 -3
  12. package/src/category/index.ts +2 -1
  13. package/src/entries.ts +4 -1
  14. package/src/index.ts +1 -0
  15. package/src/layouts/PreviewLayout.astro +1 -0
  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 +2 -2
  19. package/src/tests/no_en_dash.test.ts +70 -0
  20. package/src/tests/no_h1_in_components.test.ts +1 -1
  21. package/src/tests/script_density.test.ts +94 -0
  22. package/src/tests/tool_validation.test.ts +2 -2
  23. package/src/tool/batteryHealthEstimator/bibliography.ts +8 -8
  24. package/src/tool/batteryHealthEstimator/i18n/de.ts +1 -1
  25. package/src/tool/batteryHealthEstimator/i18n/en.ts +1 -1
  26. package/src/tool/batteryHealthEstimator/i18n/fr.ts +5 -5
  27. package/src/tool/batteryHealthEstimator/i18n/id.ts +1 -1
  28. package/src/tool/batteryHealthEstimator/i18n/nl.ts +1 -1
  29. package/src/tool/batteryHealthEstimator/i18n/pl.ts +2 -2
  30. package/src/tool/batteryHealthEstimator/i18n/pt.ts +1 -1
  31. package/src/tool/batteryHealthEstimator/i18n/ru.ts +5 -5
  32. package/src/tool/batteryHealthEstimator/i18n/sv.ts +1 -1
  33. package/src/tool/batteryHealthEstimator/i18n/tr.ts +1 -1
  34. package/src/tool/batteryHealthEstimator/i18n/zh.ts +1 -1
  35. package/src/tool/colorAccuracyTest/bibliography.astro +14 -0
  36. package/src/tool/colorAccuracyTest/bibliography.ts +16 -0
  37. package/src/tool/colorAccuracyTest/color-accuracy-test.css +841 -0
  38. package/src/tool/colorAccuracyTest/component.astro +157 -0
  39. package/src/tool/colorAccuracyTest/entry.ts +29 -0
  40. package/src/tool/colorAccuracyTest/i18n/de.ts +284 -0
  41. package/src/tool/colorAccuracyTest/i18n/en.ts +284 -0
  42. package/src/tool/colorAccuracyTest/i18n/es.ts +284 -0
  43. package/src/tool/colorAccuracyTest/i18n/fr.ts +284 -0
  44. package/src/tool/colorAccuracyTest/i18n/id.ts +284 -0
  45. package/src/tool/colorAccuracyTest/i18n/it.ts +284 -0
  46. package/src/tool/colorAccuracyTest/i18n/ja.ts +284 -0
  47. package/src/tool/colorAccuracyTest/i18n/ko.ts +284 -0
  48. package/src/tool/colorAccuracyTest/i18n/nl.ts +284 -0
  49. package/src/tool/colorAccuracyTest/i18n/pl.ts +284 -0
  50. package/src/tool/colorAccuracyTest/i18n/pt.ts +284 -0
  51. package/src/tool/colorAccuracyTest/i18n/ru.ts +284 -0
  52. package/src/tool/colorAccuracyTest/i18n/sv.ts +284 -0
  53. package/src/tool/colorAccuracyTest/i18n/tr.ts +284 -0
  54. package/src/tool/colorAccuracyTest/i18n/zh.ts +284 -0
  55. package/src/tool/colorAccuracyTest/index.ts +9 -0
  56. package/src/tool/colorAccuracyTest/logic.ts +226 -0
  57. package/src/tool/colorAccuracyTest/seo.astro +15 -0
  58. package/src/tool/colorAccuracyTest/ui.ts +27 -0
  59. package/src/tool/deadPixelTest/i18n/ru.ts +6 -6
  60. package/src/tool/deadPixelTest/i18n/sv.ts +1 -1
  61. package/src/tool/deadPixelTest/i18n/zh.ts +5 -5
  62. package/src/tool/gamepadTest/gamepad-test.css +171 -3
  63. package/src/tool/gamepadTest/i18n/es.ts +4 -4
  64. package/src/tool/gamepadTest/i18n/ru.ts +2 -2
  65. package/src/tool/gamepadTest/i18n/zh.ts +1 -1
  66. package/src/tool/gamepadVibrationTester/bibliography.ts +8 -8
  67. package/src/tool/gamepadVibrationTester/i18n/es.ts +1 -1
  68. package/src/tool/gamepadVibrationTester/i18n/fr.ts +2 -2
  69. package/src/tool/gamepadVibrationTester/i18n/ru.ts +3 -3
  70. package/src/tool/keyboardTest/keyboard-test.css +115 -2
  71. package/src/tool/mousePollingTest/bibliography.ts +8 -8
  72. package/src/tool/mousePollingTest/i18n/de.ts +1 -1
  73. package/src/tool/mousePollingTest/i18n/en.ts +1 -1
  74. package/src/tool/mousePollingTest/i18n/es.ts +1 -1
  75. package/src/tool/mousePollingTest/i18n/fr.ts +3 -3
  76. package/src/tool/mousePollingTest/i18n/id.ts +1 -1
  77. package/src/tool/mousePollingTest/i18n/it.ts +1 -1
  78. package/src/tool/mousePollingTest/i18n/ja.ts +1 -1
  79. package/src/tool/mousePollingTest/i18n/ko.ts +1 -1
  80. package/src/tool/mousePollingTest/i18n/nl.ts +1 -1
  81. package/src/tool/mousePollingTest/i18n/pl.ts +2 -2
  82. package/src/tool/mousePollingTest/i18n/pt.ts +1 -1
  83. package/src/tool/mousePollingTest/i18n/ru.ts +3 -3
  84. package/src/tool/mousePollingTest/i18n/sv.ts +1 -1
  85. package/src/tool/mousePollingTest/i18n/tr.ts +1 -1
  86. package/src/tool/mousePollingTest/i18n/zh.ts +2 -2
  87. package/src/tool/refreshRateDetector/bibliography.ts +3 -11
  88. package/src/tool/refreshRateDetector/i18n/de.ts +3 -3
  89. package/src/tool/refreshRateDetector/i18n/en.ts +3 -3
  90. package/src/tool/refreshRateDetector/i18n/fr.ts +7 -7
  91. package/src/tool/refreshRateDetector/i18n/id.ts +3 -3
  92. package/src/tool/refreshRateDetector/i18n/nl.ts +3 -3
  93. package/src/tool/refreshRateDetector/i18n/pl.ts +2 -2
  94. package/src/tool/refreshRateDetector/i18n/pt.ts +3 -3
  95. package/src/tool/refreshRateDetector/i18n/ru.ts +4 -4
  96. package/src/tool/refreshRateDetector/i18n/sv.ts +3 -3
  97. package/src/tool/refreshRateDetector/i18n/tr.ts +2 -2
  98. package/src/tool/refreshRateDetector/i18n/zh.ts +2 -2
  99. package/src/tool/toneGenerator/bibliography.ts +8 -8
  100. package/src/tool/toneGenerator/i18n/de.ts +1 -1
  101. package/src/tool/toneGenerator/i18n/en.ts +1 -1
  102. package/src/tool/toneGenerator/i18n/fr.ts +3 -3
  103. package/src/tool/toneGenerator/i18n/id.ts +1 -1
  104. package/src/tool/toneGenerator/i18n/it.ts +1 -1
  105. package/src/tool/toneGenerator/i18n/nl.ts +1 -1
  106. package/src/tool/toneGenerator/i18n/pl.ts +2 -2
  107. package/src/tool/toneGenerator/i18n/pt.ts +1 -1
  108. package/src/tool/toneGenerator/i18n/ru.ts +4 -4
  109. package/src/tool/toneGenerator/i18n/sv.ts +1 -1
  110. package/src/tool/toneGenerator/i18n/zh.ts +3 -3
  111. package/src/tools.ts +2 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jjlmoya/utils-hardware",
3
- "version": "1.16.0",
3
+ "version": "1.18.0",
4
4
  "type": "module",
5
5
  "main": "./src/index.ts",
6
6
  "types": "./src/index.ts",
@@ -61,7 +61,7 @@ export const content: CategoryLocaleContent = {
61
61
  },
62
62
  {
63
63
  type: 'paragraph',
64
- html: 'Monitore verschlechtern sich. Die werksseitige Farbtemperatur (Kelvin), typischerweise 6500K = D65-Tageslicht, verändert sich mit der Zeit. Für Grafikdesigner, Fotografen und Editoren ist dies katastrophal: Man bearbeitet Farben auf einem falsch kalibrierten Monitor, die Arbeit sieht auf anderen Displays anders aus, und der Kunde lehnt sie ab. Tiefe Kalibrierung erfordert Hardware (Kolorimeter für 3001000 €), aber unser <strong>Farbraum-Test</strong> ermöglicht es dir zumindest zu prüfen, ob dein Monitor einen konsistenten Gammabereich (typischerweise 2,2) beibehält.',
64
+ html: 'Monitore verschlechtern sich. Die werksseitige Farbtemperatur (Kelvin), typischerweise 6500K = D65-Tageslicht, verändert sich mit der Zeit. Für Grafikdesigner, Fotografen und Editoren ist dies katastrophal: Man bearbeitet Farben auf einem falsch kalibrierten Monitor, die Arbeit sieht auf anderen Displays anders aus, und der Kunde lehnt sie ab. Tiefe Kalibrierung erfordert Hardware (Kolorimeter für 300-1000 €), aber unser <strong>Farbraum-Test</strong> ermöglicht es dir zumindest zu prüfen, ob dein Monitor einen konsistenten Gammabereich (typischerweise 2,2) beibehält.',
65
65
  },
66
66
  {
67
67
  type: 'paragraph',
@@ -74,11 +74,11 @@ export const content: CategoryLocaleContent = {
74
74
  },
75
75
  {
76
76
  type: 'paragraph',
77
- html: 'Gamer sprechen von Bottleneck", wenn GPU und CPU unausgeglichen sind. Eine leistungsstarke GPU, die von einer schwachen CPU gespeist wird, erreicht nie ihr Potenzial. Das Konzept ist einfach: Wenn die GPU darauf wartet, dass die CPU fertig wird, ist das Verschwendung. Testwerkzeuge helfen zu diagnostizieren: Liegt mein Problem an der GPU oder CPU? Brauche ich ein Upgrade? Oder reicht es, die Videoeinstellungen zu reduzieren?',
77
+ html: 'Gamer sprechen von "Bottleneck", wenn GPU und CPU unausgeglichen sind. Eine leistungsstarke GPU, die von einer schwachen CPU gespeist wird, erreicht nie ihr Potenzial. Das Konzept ist einfach: Wenn die GPU darauf wartet, dass die CPU fertig wird, ist das Verschwendung. Testwerkzeuge helfen zu diagnostizieren: Liegt mein Problem an der GPU oder CPU? Brauche ich ein Upgrade? Oder reicht es, die Videoeinstellungen zu reduzieren?',
78
78
  },
79
79
  {
80
80
  type: 'paragraph',
81
- html: 'Latenz-Tests sind auch für kompetitives Gaming entscheidend. Die Eingabe-zu-Display-Latenz (vom Drücken einer Taste bis zum Erscheinen auf dem Bildschirm) kann bei einem guten Setup 2050 ms betragen, aber bei einem langsamen 200+ ms. In Wettkampfspielen (FPS, Kampfspiele) ist 50 ms der Unterschied zwischen Sieg und Niederlage. Deshalb investieren Profi-Gamer in 240-Hz-Monitore, 8000-Hz-Mäuse und optimierte PCs.',
81
+ html: 'Latenz-Tests sind auch für kompetitives Gaming entscheidend. Die Eingabe-zu-Display-Latenz (vom Drücken einer Taste bis zum Erscheinen auf dem Bildschirm) kann bei einem guten Setup 20-50 ms betragen, aber bei einem langsamen 200+ ms. In Wettkampfspielen (FPS, Kampfspiele) ist 50 ms der Unterschied zwischen Sieg und Niederlage. Deshalb investieren Profi-Gamer in 240-Hz-Monitore, 8000-Hz-Mäuse und optimierte PCs.',
82
82
  },
83
83
  {
84
84
  type: 'title',
@@ -87,7 +87,7 @@ export const content: CategoryLocaleContent = {
87
87
  },
88
88
  {
89
89
  type: 'paragraph',
90
- html: 'Reparierbarkeit" ist im Jahr 2026 immer wichtiger. Ein reparierbares" Telefon hält 6 Jahre; ein versiegeltes" läuft in 23 Jahren ab. Ein Laptop mit aufrüstbarem RAM ist eine Investition; einer mit verlötetem RAM ist wegwerfbar. Die von uns implementierten Diagnosewerkzeuge stehen im Einklang mit der Recht-auf-Reparatur-Bewegung: Wir möchten, dass du genau weißt, was kaputt ist, bevor du deine Geräte wegwirfst.',
90
+ html: '"Reparierbarkeit" ist im Jahr 2026 immer wichtiger. Ein "reparierbares" Telefon hält 6 Jahre; ein "versiegeltes" läuft in 2-3 Jahren ab. Ein Laptop mit aufrüstbarem RAM ist eine Investition; einer mit verlötetem RAM ist wegwerfbar. Die von uns implementierten Diagnosewerkzeuge stehen im Einklang mit der Recht-auf-Reparatur-Bewegung: Wir möchten, dass du genau weißt, was kaputt ist, bevor du deine Geräte wegwirfst.',
91
91
  },
92
92
  {
93
93
  type: 'paragraph',
@@ -61,7 +61,7 @@ export const content: CategoryLocaleContent = {
61
61
  },
62
62
  {
63
63
  type: 'paragraph',
64
- html: 'Monitor mengalami penurunan kualitas. Suhu warna pabrik (Kelvin), biasanya 6500K = D65 Daylight, berubah seiring waktu. Bagi desainer grafis, fotografer, dan editor, ini sangat merugikan: Anda mengedit warna pada monitor yang salah dikalibrasi, hasilnya terlihat berbeda di layar lain, dan klien menolaknya. Kalibrasi mendalam memerlukan perangkat keras (kolorimeter seharga €3001000), tetapi <strong>uji ruang warna</strong> kami setidaknya memungkinkan Anda mengaudit apakah monitor Anda mempertahankan rentang gamma yang konsisten (biasanya 2,2).',
64
+ html: 'Monitor mengalami penurunan kualitas. Suhu warna pabrik (Kelvin), biasanya 6500K = D65 Daylight, berubah seiring waktu. Bagi desainer grafis, fotografer, dan editor, ini sangat merugikan: Anda mengedit warna pada monitor yang salah dikalibrasi, hasilnya terlihat berbeda di layar lain, dan klien menolaknya. Kalibrasi mendalam memerlukan perangkat keras (kolorimeter seharga €300-1000), tetapi <strong>uji ruang warna</strong> kami setidaknya memungkinkan Anda mengaudit apakah monitor Anda mempertahankan rentang gamma yang konsisten (biasanya 2,2).',
65
65
  },
66
66
  {
67
67
  type: 'paragraph',
@@ -78,7 +78,7 @@ export const content: CategoryLocaleContent = {
78
78
  },
79
79
  {
80
80
  type: 'paragraph',
81
- html: 'Uji latensi juga penting untuk gaming kompetitif. Latensi input-ke-layar (dari menekan tombol hingga melihatnya di layar) bisa 2050 ms pada setup yang layak, tetapi 200+ ms pada setup yang lambat. Dalam game kompetitif (FPS, fighting game), 50 ms adalah perbedaan antara kemenangan dan kekalahan. Itulah mengapa gamer pro berinvestasi dalam monitor 240Hz, mouse 8000Hz, dan PC yang dioptimalkan.',
81
+ html: 'Uji latensi juga penting untuk gaming kompetitif. Latensi input-ke-layar (dari menekan tombol hingga melihatnya di layar) bisa 20-50 ms pada setup yang layak, tetapi 200+ ms pada setup yang lambat. Dalam game kompetitif (FPS, fighting game), 50 ms adalah perbedaan antara kemenangan dan kekalahan. Itulah mengapa gamer pro berinvestasi dalam monitor 240Hz, mouse 8000Hz, dan PC yang dioptimalkan.',
82
82
  },
83
83
  {
84
84
  type: 'title',
@@ -87,7 +87,7 @@ export const content: CategoryLocaleContent = {
87
87
  },
88
88
  {
89
89
  type: 'paragraph',
90
- html: '"Kemampuan perbaikan" semakin penting di tahun 2026. Ponsel yang "dapat diperbaiki" bertahan 6 tahun; yang "tersegel" kadaluarsa dalam 23 tahun. Laptop dengan RAM yang dapat ditingkatkan adalah investasi; yang dengan RAM yang disolder adalah barang sekali pakai. Alat diagnostik yang kami implementasikan selaras dengan gerakan Hak untuk Memperbaiki: kami ingin Anda mengetahui dengan tepat apa yang rusak sebelum Anda membuang perangkat Anda.',
90
+ html: '"Kemampuan perbaikan" semakin penting di tahun 2026. Ponsel yang "dapat diperbaiki" bertahan 6 tahun; yang "tersegel" kadaluarsa dalam 2-3 tahun. Laptop dengan RAM yang dapat ditingkatkan adalah investasi; yang dengan RAM yang disolder adalah barang sekali pakai. Alat diagnostik yang kami implementasikan selaras dengan gerakan Hak untuk Memperbaiki: kami ingin Anda mengetahui dengan tepat apa yang rusak sebelum Anda membuang perangkat Anda.',
91
91
  },
92
92
  {
93
93
  type: 'paragraph',
@@ -61,7 +61,7 @@ export const content: CategoryLocaleContent = {
61
61
  },
62
62
  {
63
63
  type: 'paragraph',
64
- html: 'I monitor si degradano. La temperatura del colore di fabbrica (Kelvin), tipicamente 6500K = D65 Daylight, cambia nel tempo. Per grafici, fotografi ed editor, questo è catastrofico: si modificano i colori su un monitor mal calibrato, il lavoro appare diverso su altri display e il cliente lo rifiuta. La calibrazione approfondita richiede hardware (colorimetro da €3001000), ma il nostro <strong>test dello spazio colore</strong> ti permette almeno di verificare se il tuo monitor mantiene un gamma range coerente (tipicamente 2,2).',
64
+ html: 'I monitor si degradano. La temperatura del colore di fabbrica (Kelvin), tipicamente 6500K = D65 Daylight, cambia nel tempo. Per grafici, fotografi ed editor, questo è catastrofico: si modificano i colori su un monitor mal calibrato, il lavoro appare diverso su altri display e il cliente lo rifiuta. La calibrazione approfondita richiede hardware (colorimetro da €300-1000), ma il nostro <strong>test dello spazio colore</strong> ti permette almeno di verificare se il tuo monitor mantiene un gamma range coerente (tipicamente 2,2).',
65
65
  },
66
66
  {
67
67
  type: 'paragraph',
@@ -78,7 +78,7 @@ export const content: CategoryLocaleContent = {
78
78
  },
79
79
  {
80
80
  type: 'paragraph',
81
- html: 'I test di latenza sono fondamentali anche per il gaming competitivo. La latenza input-display (dalla pressione di un tasto al vederlo sullo schermo) può essere di 2050 ms su un setup decente, ma di 200+ ms su uno lento. Nei giochi competitivi (FPS, picchiaduro), 50 ms è la differenza tra vittoria e sconfitta. Ecco perché i gamer professionisti investono in monitor a 240Hz, mouse a 8000Hz e PC ottimizzati.',
81
+ html: 'I test di latenza sono fondamentali anche per il gaming competitivo. La latenza input-display (dalla pressione di un tasto al vederlo sullo schermo) può essere di 20-50 ms su un setup decente, ma di 200+ ms su uno lento. Nei giochi competitivi (FPS, picchiaduro), 50 ms è la differenza tra vittoria e sconfitta. Ecco perché i gamer professionisti investono in monitor a 240Hz, mouse a 8000Hz e PC ottimizzati.',
82
82
  },
83
83
  {
84
84
  type: 'title',
@@ -87,7 +87,7 @@ export const content: CategoryLocaleContent = {
87
87
  },
88
88
  {
89
89
  type: 'paragraph',
90
- html: 'La "riparabilità" è sempre più importante nel 2026. Un telefono "riparabile" dura 6 anni; uno "sigillato" scade in 23 anni. Un laptop con RAM aggiornabile è un investimento; uno con RAM saldata è usa e getta. Gli strumenti diagnostici che implementiamo si allineano con il movimento per il Diritto alla Riparazione: vogliamo che tu sappia esattamente cosa è rotto prima di buttare i tuoi dispositivi.',
90
+ html: 'La "riparabilità" è sempre più importante nel 2026. Un telefono "riparabile" dura 6 anni; uno "sigillato" scade in 2-3 anni. Un laptop con RAM aggiornabile è un investimento; uno con RAM saldata è usa e getta. Gli strumenti diagnostici che implementiamo si allineano con il movimento per il Diritto alla Riparazione: vogliamo che tu sappia esattamente cosa è rotto prima di buttare i tuoi dispositivi.',
91
91
  },
92
92
  {
93
93
  type: 'paragraph',
@@ -61,7 +61,7 @@ export const content: CategoryLocaleContent = {
61
61
  },
62
62
  {
63
63
  type: 'paragraph',
64
- html: 'Monitoren degraderen. De fabriekskleurtemperatuur (Kelvin), doorgaans 6500K = D65-daglicht, verandert in de loop der tijd. Voor grafisch ontwerpers, fotografen en editors is dit catastrofaal: je bewerkt kleuren op een verkeerd gekalibreerde monitor, het werk ziet er anders uit op andere schermen en de klant wijst het af. Diepe kalibratie vereist hardware (colorimeter van €3001000), maar onze <strong>kleurruimtetest</strong> stelt je in elk geval in staat te controleren of je monitor een consistent gammagebied (doorgaans 2,2) handhaaft.',
64
+ html: 'Monitoren degraderen. De fabriekskleurtemperatuur (Kelvin), doorgaans 6500K = D65-daglicht, verandert in de loop der tijd. Voor grafisch ontwerpers, fotografen en editors is dit catastrofaal: je bewerkt kleuren op een verkeerd gekalibreerde monitor, het werk ziet er anders uit op andere schermen en de klant wijst het af. Diepe kalibratie vereist hardware (colorimeter van €300-1000), maar onze <strong>kleurruimtetest</strong> stelt je in elk geval in staat te controleren of je monitor een consistent gammagebied (doorgaans 2,2) handhaaft.',
65
65
  },
66
66
  {
67
67
  type: 'paragraph',
@@ -78,7 +78,7 @@ export const content: CategoryLocaleContent = {
78
78
  },
79
79
  {
80
80
  type: 'paragraph',
81
- html: 'Latentietests zijn ook cruciaal voor competitief gaming. De invoer-naar-scherm latentie (van het indrukken van een knop tot het zien ervan op scherm) kan 2050ms zijn bij een goede setup, maar 200+ms bij een trage. In competitieve games (FPS, vechtspellen) is 50ms het verschil tussen winst en verlies. Daarom investeren pro-gamers in 240Hz-monitors, 8000Hz-muizen en geoptimaliseerde pc\'s.',
81
+ html: 'Latentietests zijn ook cruciaal voor competitief gaming. De invoer-naar-scherm latentie (van het indrukken van een knop tot het zien ervan op scherm) kan 20-50ms zijn bij een goede setup, maar 200+ms bij een trage. In competitieve games (FPS, vechtspellen) is 50ms het verschil tussen winst en verlies. Daarom investeren pro-gamers in 240Hz-monitors, 8000Hz-muizen en geoptimaliseerde pc\'s.',
82
82
  },
83
83
  {
84
84
  type: 'title',
@@ -87,7 +87,7 @@ export const content: CategoryLocaleContent = {
87
87
  },
88
88
  {
89
89
  type: 'paragraph',
90
- html: '"Repareerbaarheid" wordt in 2026 steeds belangrijker. Een "repareerbare" telefoon gaat 6 jaar mee; een "verzegelde" verloopt in 23 jaar. Een laptop met upgradeerbaar RAM is een investering; een met gesoldeerd RAM is wegwerpbaar. De diagnostische tools die we implementeren sluiten aan bij de Recht op Reparatie-beweging: we willen dat je precies weet wat er kapot is voordat je je apparaten weggooit.',
90
+ html: '"Repareerbaarheid" wordt in 2026 steeds belangrijker. Een "repareerbare" telefoon gaat 6 jaar mee; een "verzegelde" verloopt in 2-3 jaar. Een laptop met upgradeerbaar RAM is een investering; een met gesoldeerd RAM is wegwerpbaar. De diagnostische tools die we implementeren sluiten aan bij de Recht op Reparatie-beweging: we willen dat je precies weet wat er kapot is voordat je je apparaten weggooit.',
91
91
  },
92
92
  {
93
93
  type: 'paragraph',
@@ -12,7 +12,7 @@ export const content: CategoryLocaleContent = {
12
12
  },
13
13
  {
14
14
  type: 'paragraph',
15
- html: 'Utrzymanie sprzętu nie wymaga już instalowania ciężkich aplikacji diagnostycznych. W tej sekcji oferujemy zestaw <strong>bezpłatnych narzędzi online</strong> zaprojektowanych do testowania komponentów przy użyciu natywnych interfejsów API sieci Web. Od wykrywania zmęczenia panelu LED po pomiar częstotliwości próbkowania urządzeń peryferyjnych do gier stosujemy standardowe protokoły testowe, abyś znał rzeczywisty stan swojego sprzętu.',
15
+ html: 'Utrzymanie sprzętu nie wymaga już instalowania ciężkich aplikacji diagnostycznych. W tej sekcji oferujemy zestaw <strong>bezpłatnych narzędzi online</strong> zaprojektowanych do testowania komponentów przy użyciu natywnych interfejsów API sieci Web. Od wykrywania zmęczenia panelu LED po pomiar częstotliwości próbkowania urządzeń peryferyjnych do gier - stosujemy standardowe protokoły testowe, abyś znał rzeczywisty stan swojego sprzętu.',
16
16
  },
17
17
  {
18
18
  type: 'paragraph',
@@ -61,7 +61,7 @@ export const content: CategoryLocaleContent = {
61
61
  },
62
62
  {
63
63
  type: 'paragraph',
64
- html: 'Monitory degradują się. Fabryczna temperatura barwowa (Kelviny), zazwyczaj 6500K = D65 światło dzienne, zmienia się z czasem. Dla grafików, fotografów i edytorów jest to katastrofalne: edytujesz kolory na źle skalibrowanym monitorze, praca wygląda inaczej na innych wyświetlaczach, a klient ją odrzuca. Głęboka kalibracja wymaga sprzętu (kolorymetr za 3001000 €), ale nasz <strong>test przestrzeni barw</strong> pozwala przynajmniej sprawdzić, czy monitor utrzymuje spójny zakres gammy (zazwyczaj 2,2).',
64
+ html: 'Monitory degradują się. Fabryczna temperatura barwowa (Kelviny), zazwyczaj 6500K = D65 światło dzienne, zmienia się z czasem. Dla grafików, fotografów i edytorów jest to katastrofalne: edytujesz kolory na źle skalibrowanym monitorze, praca wygląda inaczej na innych wyświetlaczach, a klient ją odrzuca. Głęboka kalibracja wymaga sprzętu (kolorymetr za 300-1000 €), ale nasz <strong>test przestrzeni barw</strong> pozwala przynajmniej sprawdzić, czy monitor utrzymuje spójny zakres gammy (zazwyczaj 2,2).',
65
65
  },
66
66
  {
67
67
  type: 'paragraph',
@@ -78,7 +78,7 @@ export const content: CategoryLocaleContent = {
78
78
  },
79
79
  {
80
80
  type: 'paragraph',
81
- html: 'Testy opóźnień są również kluczowe dla gier kompetytywnych. Opóźnienie wejście-wyświetlacz (od naciśnięcia przycisku do zobaczenia go na ekranie) może wynosić 2050ms przy dobrym zestawie, ale 200+ms przy wolnym. W grach kompetytywnych (FPS, bijatyki) 50ms to różnica między zwycięstwem a porażką. Dlatego profesjonalni gracze inwestują w monitory 240Hz, myszy 8000Hz i zoptymalizowane komputery.',
81
+ html: 'Testy opóźnień są również kluczowe dla gier kompetytywnych. Opóźnienie wejście-wyświetlacz (od naciśnięcia przycisku do zobaczenia go na ekranie) może wynosić 20-50ms przy dobrym zestawie, ale 200+ms przy wolnym. W grach kompetytywnych (FPS, bijatyki) 50ms to różnica między zwycięstwem a porażką. Dlatego profesjonalni gracze inwestują w monitory 240Hz, myszy 8000Hz i zoptymalizowane komputery.',
82
82
  },
83
83
  {
84
84
  type: 'title',
@@ -87,7 +87,7 @@ export const content: CategoryLocaleContent = {
87
87
  },
88
88
  {
89
89
  type: 'paragraph',
90
- html: '"Naprawialność" jest coraz ważniejsza w 2026 roku. "Naprawialny" telefon wytrzymuje 6 lat; "zapieczętowany" wygasa w 23 lata. Laptop z wymienialną pamięcią RAM to inwestycja; z wlutowaną RAM to jednorazówka. Narzędzia diagnostyczne, które wdrażamy, są zgodne z ruchem Prawa do Naprawy: chcemy, abyś wiedział dokładnie, co się zepsuje, zanim wyrzucisz urządzenia.',
90
+ html: '"Naprawialność" jest coraz ważniejsza w 2026 roku. "Naprawialny" telefon wytrzymuje 6 lat; "zapieczętowany" wygasa w 2-3 lata. Laptop z wymienialną pamięcią RAM to inwestycja; z wlutowaną RAM to jednorazówka. Narzędzia diagnostyczne, które wdrażamy, są zgodne z ruchem Prawa do Naprawy: chcemy, abyś wiedział dokładnie, co się zepsuje, zanim wyrzucisz urządzenia.',
91
91
  },
92
92
  {
93
93
  type: 'paragraph',
@@ -61,7 +61,7 @@ export const content: CategoryLocaleContent = {
61
61
  },
62
62
  {
63
63
  type: 'paragraph',
64
- html: 'Os monitores degradam-se. A temperatura de cor de fábrica (Kelvin), tipicamente 6500K = D65 Luz do Dia, muda com o tempo. Para designers gráficos, fotógrafos e editores, isto é catastrófico: edita cores num monitor mal calibrado, o trabalho parece diferente noutros ecrãs e o cliente rejeita-o. A calibração profunda requer hardware (colorímetro a €3001000), mas o nosso <strong>teste de espaço de cor</strong> permite pelo menos auditar se o seu monitor mantém uma gama de gama consistente (tipicamente 2,2).',
64
+ html: 'Os monitores degradam-se. A temperatura de cor de fábrica (Kelvin), tipicamente 6500K = D65 Luz do Dia, muda com o tempo. Para designers gráficos, fotógrafos e editores, isto é catastrófico: edita cores num monitor mal calibrado, o trabalho parece diferente noutros ecrãs e o cliente rejeita-o. A calibração profunda requer hardware (colorímetro a €300-1000), mas o nosso <strong>teste de espaço de cor</strong> permite pelo menos auditar se o seu monitor mantém uma gama de gama consistente (tipicamente 2,2).',
65
65
  },
66
66
  {
67
67
  type: 'paragraph',
@@ -78,7 +78,7 @@ export const content: CategoryLocaleContent = {
78
78
  },
79
79
  {
80
80
  type: 'paragraph',
81
- html: 'Os testes de latência são também cruciais para o gaming competitivo. A latência de entrada para ecrã (de pressionar um botão a vê-lo no ecrã) pode ser 2050ms num setup decente, mas 200+ms num lento. Em jogos competitivos (FPS, jogos de luta), 50ms é a diferença entre vitória e derrota. É por isso que os jogadores profissionais investem em monitores de 240Hz, ratos de 8000Hz e PCs otimizados.',
81
+ html: 'Os testes de latência são também cruciais para o gaming competitivo. A latência de entrada para ecrã (de pressionar um botão a vê-lo no ecrã) pode ser 20-50ms num setup decente, mas 200+ms num lento. Em jogos competitivos (FPS, jogos de luta), 50ms é a diferença entre vitória e derrota. É por isso que os jogadores profissionais investem em monitores de 240Hz, ratos de 8000Hz e PCs otimizados.',
82
82
  },
83
83
  {
84
84
  type: 'title',
@@ -87,7 +87,7 @@ export const content: CategoryLocaleContent = {
87
87
  },
88
88
  {
89
89
  type: 'paragraph',
90
- html: 'A "reparabilidade" é cada vez mais importante em 2026. Um telemóvel "reparável" dura 6 anos; um "selado" expira em 23 anos. Um portátil com RAM atualizável é um investimento; um com RAM soldada é descartável. As ferramentas de diagnóstico que implementamos estão alinhadas com o movimento pelo Direito a Reparar: queremos que saiba exatamente o que está avariado antes de descartar os seus dispositivos.',
90
+ html: 'A "reparabilidade" é cada vez mais importante em 2026. Um telemóvel "reparável" dura 6 anos; um "selado" expira em 2-3 anos. Um portátil com RAM atualizável é um investimento; um com RAM soldada é descartável. As ferramentas de diagnóstico que implementamos estão alinhadas com o movimento pelo Direito a Reparar: queremos que saiba exatamente o que está avariado antes de descartar os seus dispositivos.',
91
91
  },
92
92
  {
93
93
  type: 'paragraph',
@@ -12,7 +12,7 @@ export const content: CategoryLocaleContent = {
12
12
  },
13
13
  {
14
14
  type: 'paragraph',
15
- html: 'Обслуживание оборудования больше не требует установки тяжёлых диагностических приложений. В этом разделе мы предлагаем набор <strong>бесплатных онлайн-инструментов</strong>, предназначенных для тестирования ваших компонентов с использованием нативных веб-API. От обнаружения усталости LED-панели до измерения частоты опроса игровых периферийных устройств мы применяем стандартные протоколы тестирования, чтобы вы знали реальное состояние вашего оборудования.',
15
+ html: 'Обслуживание оборудования больше не требует установки тяжёлых диагностических приложений. В этом разделе мы предлагаем набор <strong>бесплатных онлайн-инструментов</strong>, предназначенных для тестирования ваших компонентов с использованием нативных веб-API. От обнаружения усталости LED-панели до измерения частоты опроса игровых периферийных устройств -мы применяем стандартные протоколы тестирования, чтобы вы знали реальное состояние вашего оборудования.',
16
16
  },
17
17
  {
18
18
  type: 'paragraph',
@@ -43,7 +43,7 @@ export const content: CategoryLocaleContent = {
43
43
  },
44
44
  {
45
45
  type: 'paragraph',
46
- html: 'Износ джойстика (известный как дрейф) наиболее распространённая неисправность в современных контроллерах PS5, Xbox и Switch. Наш <strong>симулятор контроллера</strong> анализирует оси X/Y с точностью числа с плавающей запятой, позволяя визуализировать любое нежелательное движение или отсутствие мёртвой зоны в стиках. Также позволяет тестировать тактильный отклик и вибрацию мотора Dual-Rumble через браузер.',
46
+ html: 'Износ джойстика (известный как дрейф) -наиболее распространённая неисправность в современных контроллерах PS5, Xbox и Switch. Наш <strong>симулятор контроллера</strong> анализирует оси X/Y с точностью числа с плавающей запятой, позволяя визуализировать любое нежелательное движение или отсутствие мёртвой зоны в стиках. Также позволяет тестировать тактильный отклик и вибрацию мотора Dual-Rumble через браузер.',
47
47
  },
48
48
  {
49
49
  type: 'title',
@@ -61,11 +61,11 @@ export const content: CategoryLocaleContent = {
61
61
  },
62
62
  {
63
63
  type: 'paragraph',
64
- html: 'Мониторы деградируют. Заводская цветовая температура (Кельвин), обычно 6500K = D65 дневной свет, меняется со временем. Для графических дизайнеров, фотографов и редакторов это катастрофично: вы редактируете цвета на неправильно откалиброванном мониторе, работа выглядит иначе на других дисплеях, и клиент отвергает её. Глубокая калибровка требует оборудования (колориметр за €3001000), но наш <strong>тест цветового пространства</strong> позволяет хотя бы проверить, поддерживает ли ваш монитор консистентный гамма-диапазон (обычно 2,2).',
64
+ html: 'Мониторы деградируют. Заводская цветовая температура (Кельвин), обычно 6500K = D65 дневной свет, меняется со временем. Для графических дизайнеров, фотографов и редакторов это катастрофично: вы редактируете цвета на неправильно откалиброванном мониторе, работа выглядит иначе на других дисплеях, и клиент отвергает её. Глубокая калибровка требует оборудования (колориметр за €300-1000), но наш <strong>тест цветового пространства</strong> позволяет хотя бы проверить, поддерживает ли ваш монитор консистентный гамма-диапазон (обычно 2,2).',
65
65
  },
66
66
  {
67
67
  type: 'paragraph',
68
- html: 'Понимание sRGB vs. Adobe RGB vs. P3 также критично. sRGB веб-стандарт (достаточен для 99% использования), но Adobe RGB охватывает на 40% больше цветов (необходим для профессионалов). Монитор, охватывающий только 70% sRGB, будет производить недостаточную цветовую насыщенность. Наши инструменты позволяют проводить проверку без вложений в профессиональное оборудование за €1000.',
68
+ html: 'Понимание sRGB vs. Adobe RGB vs. P3 также критично. sRGB -веб-стандарт (достаточен для 99% использования), но Adobe RGB охватывает на 40% больше цветов (необходим для профессионалов). Монитор, охватывающий только 70% sRGB, будет производить недостаточную цветовую насыщенность. Наши инструменты позволяют проводить проверку без вложений в профессиональное оборудование за €1000.',
69
69
  },
70
70
  {
71
71
  type: 'title',
@@ -78,7 +78,7 @@ export const content: CategoryLocaleContent = {
78
78
  },
79
79
  {
80
80
  type: 'paragraph',
81
- html: 'Тесты задержки также критичны для соревновательного игрового процесса. Задержка ввод-дисплей (от нажатия кнопки до отображения на экране) может составлять 2050 мс на приличном оборудовании, но 200+ мс на медленном. В соревновательных играх (FPS, файтинги) 50 мс разница между победой и поражением. Поэтому профессиональные геймеры инвестируют в мониторы 240 Гц, мыши 8000 Гц и оптимизированные ПК.',
81
+ html: 'Тесты задержки также критичны для соревновательного игрового процесса. Задержка ввод-дисплей (от нажатия кнопки до отображения на экране) может составлять 20-50 мс на приличном оборудовании, но 200+ мс на медленном. В соревновательных играх (FPS, файтинги) 50 мс -разница между победой и поражением. Поэтому профессиональные геймеры инвестируют в мониторы 240 Гц, мыши 8000 Гц и оптимизированные ПК.',
82
82
  },
83
83
  {
84
84
  type: 'title',
@@ -87,7 +87,7 @@ export const content: CategoryLocaleContent = {
87
87
  },
88
88
  {
89
89
  type: 'paragraph',
90
- html: '"Ремонтопригодность" становится всё важнее в 2026 году. "Ремонтируемый" телефон служит 6 лет; "запечатанный" истекает через 23 года. Ноутбук с обновляемой ОЗУ инвестиция; с припаянной ОЗУ одноразовый. Диагностические инструменты, которые мы внедряем, согласуются с движением за право на ремонт: мы хотим, чтобы вы знали точно, что сломалось, прежде чем выбрасывать устройства.',
90
+ html: '"Ремонтопригодность" становится всё важнее в 2026 году. "Ремонтируемый" телефон служит 6 лет; "запечатанный" истекает через 2-3 года. Ноутбук с обновляемой ОЗУ -инвестиция; с припаянной ОЗУ -одноразовый. Диагностические инструменты, которые мы внедряем, согласуются с движением за право на ремонт: мы хотим, чтобы вы знали точно, что сломалось, прежде чем выбрасывать устройства.',
91
91
  },
92
92
  {
93
93
  type: 'paragraph',
@@ -61,7 +61,7 @@ export const content: CategoryLocaleContent = {
61
61
  },
62
62
  {
63
63
  type: 'paragraph',
64
- html: 'Monitorer försämras. Fabriksfärgtemperaturen (Kelvin), vanligtvis 6500K = D65-dagsljus, förändras med tiden. För grafiska designers, fotografer och redaktörer är detta katastrofalt: du redigerar färger på en felkalibrerad monitor, arbetet ser annorlunda ut på andra skärmar och kunden avvisar det. Djup kalibrering kräver hårdvara (kolorimeter för €3001000), men vårt <strong>färgrymstest</strong> låter dig åtminstone granska om din monitor bibehåller ett konsekvent gammaomfång (typiskt 2,2).',
64
+ html: 'Monitorer försämras. Fabriksfärgtemperaturen (Kelvin), vanligtvis 6500K = D65-dagsljus, förändras med tiden. För grafiska designers, fotografer och redaktörer är detta katastrofalt: du redigerar färger på en felkalibrerad monitor, arbetet ser annorlunda ut på andra skärmar och kunden avvisar det. Djup kalibrering kräver hårdvara (kolorimeter för €300-1000), men vårt <strong>färgrymstest</strong> låter dig åtminstone granska om din monitor bibehåller ett konsekvent gammaomfång (typiskt 2,2).',
65
65
  },
66
66
  {
67
67
  type: 'paragraph',
@@ -78,7 +78,7 @@ export const content: CategoryLocaleContent = {
78
78
  },
79
79
  {
80
80
  type: 'paragraph',
81
- html: 'Latenstester är också kritiska för tävlingsinriktat gaming. Inmatnings-till-skärm-latens (från att trycka på en knapp till att se det på skärmen) kan vara 2050ms på ett bra setup, men 200+ms på ett långsamt. I tävlingsspel (FPS, fightingspel) är 50ms skillnaden mellan seger och nederlag. Det är därför pro-gamers investerar i 240Hz-monitorer, 8000Hz-möss och optimerade datorer.',
81
+ html: 'Latenstester är också kritiska för tävlingsinriktat gaming. Inmatnings-till-skärm-latens (från att trycka på en knapp till att se det på skärmen) kan vara 20-50ms på ett bra setup, men 200+ms på ett långsamt. I tävlingsspel (FPS, fightingspel) är 50ms skillnaden mellan seger och nederlag. Det är därför pro-gamers investerar i 240Hz-monitorer, 8000Hz-möss och optimerade datorer.',
82
82
  },
83
83
  {
84
84
  type: 'title',
@@ -87,7 +87,7 @@ export const content: CategoryLocaleContent = {
87
87
  },
88
88
  {
89
89
  type: 'paragraph',
90
- html: '"Reparerbarhet" är allt viktigare 2026. En "reparerbar" telefon håller 6 år; en "förseglad" löper ut på 23 år. En bärbar dator med uppgraderbart RAM är en investering; en med lödad RAM är förbrukningsbar. Diagnostikverktygen vi implementerar stämmer överens med Rätt till reparation-rörelsen: vi vill att du vet exakt vad som är sönder innan du kastar dina enheter.',
90
+ html: '"Reparerbarhet" är allt viktigare 2026. En "reparerbar" telefon håller 6 år; en "förseglad" löper ut på 2-3 år. En bärbar dator med uppgraderbart RAM är en investering; en med lödad RAM är förbrukningsbar. Diagnostikverktygen vi implementerar stämmer överens med Rätt till reparation-rörelsen: vi vill att du vet exakt vad som är sönder innan du kastar dina enheter.',
91
91
  },
92
92
  {
93
93
  type: 'paragraph',
@@ -61,7 +61,7 @@ export const content: CategoryLocaleContent = {
61
61
  },
62
62
  {
63
63
  type: 'paragraph',
64
- html: 'Monitörler bozunur. Fabrika renk sıcaklığı (Kelvin), genellikle 6500K = D65 Gün Işığı, zamanla değişir. Grafik tasarımcılar, fotoğrafçılar ve editörler için bu felaket anlamına gelir: yanlış kalibre edilmiş bir monitörde renkleri düzenlersiniz, çalışma diğer ekranlarda farklı görünür ve müşteri reddeder. Derin kalibrasyon donanım gerektirir (€3001000 kolorimetri), ancak <strong>renk uzayı testimiz</strong> en azından monitörünüzün tutarlı bir gama aralığını (genellikle 2,2) koruyup korumadığını denetlemenizi sağlar.',
64
+ html: 'Monitörler bozunur. Fabrika renk sıcaklığı (Kelvin), genellikle 6500K = D65 Gün Işığı, zamanla değişir. Grafik tasarımcılar, fotoğrafçılar ve editörler için bu felaket anlamına gelir: yanlış kalibre edilmiş bir monitörde renkleri düzenlersiniz, çalışma diğer ekranlarda farklı görünür ve müşteri reddeder. Derin kalibrasyon donanım gerektirir (€300-1000 kolorimetri), ancak <strong>renk uzayı testimiz</strong> en azından monitörünüzün tutarlı bir gama aralığını (genellikle 2,2) koruyup korumadığını denetlemenizi sağlar.',
65
65
  },
66
66
  {
67
67
  type: 'paragraph',
@@ -78,7 +78,7 @@ export const content: CategoryLocaleContent = {
78
78
  },
79
79
  {
80
80
  type: 'paragraph',
81
- html: 'Gecikme testleri de rekabetçi oyunculuk için kritiktir. Giriş-ekran gecikmesi (bir düğmeye basmaktan ekranda görmek) iyi bir kurulumda 2050ms, yavaş bir kurulumda 200+ms olabilir. Rekabetçi oyunlarda (FPS, dövüş oyunları) 50ms zafer ile yenilgi arasındaki farktır. Bu yüzden profesyonel oyuncular 240Hz monitörlere, 8000Hz farelere ve optimize edilmiş PC\'lere yatırım yapar.',
81
+ html: 'Gecikme testleri de rekabetçi oyunculuk için kritiktir. Giriş-ekran gecikmesi (bir düğmeye basmaktan ekranda görmek) iyi bir kurulumda 20-50ms, yavaş bir kurulumda 200+ms olabilir. Rekabetçi oyunlarda (FPS, dövüş oyunları) 50ms zafer ile yenilgi arasındaki farktır. Bu yüzden profesyonel oyuncular 240Hz monitörlere, 8000Hz farelere ve optimize edilmiş PC\'lere yatırım yapar.',
82
82
  },
83
83
  {
84
84
  type: 'title',
@@ -87,7 +87,7 @@ export const content: CategoryLocaleContent = {
87
87
  },
88
88
  {
89
89
  type: 'paragraph',
90
- html: '"Onarılabilirlik" 2026\'da giderek daha önemli hale geliyor. "Onarılabilir" bir telefon 6 yıl dayanır; "mühürlü" olan 23 yılda sona erer. Yükseltilebilir RAM\'lı dizüstü bilgisayar bir yatırımdır; lehimli RAM\'lı olan ise tek kullanımlıktır. Uyguladığımız tanı araçları Onarım Hakkı hareketiyle uyumludur: cihazlarınızı atmadan önce tam olarak neyin bozuk olduğunu bilmenizi istiyoruz.',
90
+ html: '"Onarılabilirlik" 2026\'da giderek daha önemli hale geliyor. "Onarılabilir" bir telefon 6 yıl dayanır; "mühürlü" olan 2-3 yılda sona erer. Yükseltilebilir RAM\'lı dizüstü bilgisayar bir yatırımdır; lehimli RAM\'lı olan ise tek kullanımlıktır. Uyguladığımız tanı araçları Onarım Hakkı hareketiyle uyumludur: cihazlarınızı atmadan önce tam olarak neyin bozuk olduğunu bilmenizi istiyoruz.',
91
91
  },
92
92
  {
93
93
  type: 'paragraph',
@@ -61,7 +61,7 @@ export const content: CategoryLocaleContent = {
61
61
  },
62
62
  {
63
63
  type: 'paragraph',
64
- html: '显示器会老化。出厂色温(开尔文),通常为 6500K = D65 日光色,会随时间变化。对于平面设计师、摄影师和剪辑师而言,这是灾难性的:在未正确校准的显示器上编辑颜色,作品在其他屏幕上看起来不同,客户会拒绝。深度校准需要硬件(3001000 欧元的色度计),但我们的<strong>色彩空间测试</strong>至少可以让您检测显示器是否保持一致的伽马范围(通常为 2.2)。',
64
+ html: '显示器会老化。出厂色温(开尔文),通常为 6500K = D65 日光色,会随时间变化。对于平面设计师、摄影师和剪辑师而言,这是灾难性的:在未正确校准的显示器上编辑颜色,作品在其他屏幕上看起来不同,客户会拒绝。深度校准需要硬件(300-1000 欧元的色度计),但我们的<strong>色彩空间测试</strong>至少可以让您检测显示器是否保持一致的伽马范围(通常为 2.2)。',
65
65
  },
66
66
  {
67
67
  type: 'paragraph',
@@ -78,7 +78,7 @@ export const content: CategoryLocaleContent = {
78
78
  },
79
79
  {
80
80
  type: 'paragraph',
81
- html: '延迟测试对于竞技游戏同样至关重要。输入到显示的延迟(从按下按钮到在屏幕上看到)在良好的设置中可以是 2050ms,但在缓慢的设置中可以是 200ms 以上。在竞技游戏(FPS、格斗游戏)中,50ms 是胜败之差。这就是为什么职业玩家投资 240Hz 显示器、8000Hz 鼠标和优化 PC。',
81
+ html: '延迟测试对于竞技游戏同样至关重要。输入到显示的延迟(从按下按钮到在屏幕上看到)在良好的设置中可以是 20-50ms,但在缓慢的设置中可以是 200ms 以上。在竞技游戏(FPS、格斗游戏)中,50ms 是胜败之差。这就是为什么职业玩家投资 240Hz 显示器、8000Hz 鼠标和优化 PC。',
82
82
  },
83
83
  {
84
84
  type: 'title',
@@ -87,7 +87,7 @@ export const content: CategoryLocaleContent = {
87
87
  },
88
88
  {
89
89
  type: 'paragraph',
90
- html: '"可维修性"在 2026 年变得越来越重要。"可维修"手机可用 6 年;"密封"手机在 23 年内到期。带可升级 RAM 的笔记本电脑是投资;带焊接 RAM 的是消耗品。我们实施的诊断工具与维修权运动一致:我们希望您在丢弃设备之前确切知道哪里出了问题。',
90
+ html: '"可维修性"在 2026 年变得越来越重要。"可维修"手机可用 6 年;"密封"手机在 2-3 年内到期。带可升级 RAM 的笔记本电脑是投资;带焊接 RAM 的是消耗品。我们实施的诊断工具与维修权运动一致:我们希望您在丢弃设备之前确切知道哪里出了问题。',
91
91
  },
92
92
  {
93
93
  type: 'paragraph',
@@ -7,10 +7,11 @@ import { testRaton } from '../tool/mousePollingTest/index';
7
7
  import { estimadorSaludBateria } from '../tool/batteryHealthEstimator/index';
8
8
  import { toneGenerator } from '../tool/toneGenerator/index';
9
9
  import { refreshRateDetector } from '../tool/refreshRateDetector/index';
10
+ import { spectrumCanvas } from '../tool/colorAccuracyTest/index';
10
11
 
11
12
  export const hardwareCategory: HardwareCategoryEntry = {
12
13
  icon: 'mdi:memory',
13
- tools: [pixelesPantalla, testTeclado, testMando, probadorVibracionMando, testRaton, estimadorSaludBateria, toneGenerator, refreshRateDetector],
14
+ tools: [pixelesPantalla, testTeclado, testMando, probadorVibracionMando, testRaton, estimadorSaludBateria, toneGenerator, refreshRateDetector, spectrumCanvas],
14
15
  i18n: {
15
16
  en: () => import('./i18n/en').then((m) => m.content),
16
17
  es: () => import('./i18n/es').then((m) => m.content),
package/src/entries.ts CHANGED
@@ -14,6 +14,8 @@ export { toneGenerator } from './tool/toneGenerator/entry';
14
14
  export type { ToneGeneratorLocaleContent } from './tool/toneGenerator/entry';
15
15
  export { refreshRateDetector } from './tool/refreshRateDetector/entry';
16
16
  export type { RefreshRateDetectorLocaleContent } from './tool/refreshRateDetector/entry';
17
+ export { spectrumCanvas } from './tool/colorAccuracyTest/entry';
18
+ export type { SpectrumCanvasLocaleContent } from './tool/colorAccuracyTest/entry';
17
19
  export { hardwareCategory } from './category';
18
20
  import { estimadorSaludBateria } from './tool/batteryHealthEstimator/entry';
19
21
  import { pixelesPantalla } from './tool/deadPixelTest/entry';
@@ -23,4 +25,5 @@ import { testTeclado } from './tool/keyboardTest/entry';
23
25
  import { testRaton } from './tool/mousePollingTest/entry';
24
26
  import { toneGenerator } from './tool/toneGenerator/entry';
25
27
  import { refreshRateDetector } from './tool/refreshRateDetector/entry';
26
- export const ALL_ENTRIES = [estimadorSaludBateria, pixelesPantalla, testMando, probadorVibracionMando, testTeclado, testRaton, toneGenerator, refreshRateDetector];
28
+ import { spectrumCanvas } from './tool/colorAccuracyTest/entry';
29
+ export const ALL_ENTRIES = [estimadorSaludBateria, pixelesPantalla, testMando, probadorVibracionMando, testTeclado, testRaton, toneGenerator, refreshRateDetector, spectrumCanvas];
package/src/index.ts CHANGED
@@ -25,3 +25,4 @@ export { TEST_RATON_TOOL } from './tool/mousePollingTest/index';
25
25
  export { ESTIMADOR_SALUD_BATERIA_TOOL } from './tool/batteryHealthEstimator/index';
26
26
  export { TONE_GENERATOR_TOOL } from './tool/toneGenerator/index';
27
27
  export { REFRESH_RATE_DETECTOR_TOOL } from './tool/refreshRateDetector/index';
28
+ export { SPECTRUM_CANVAS_TOOL } from './tool/colorAccuracyTest/index';
@@ -78,6 +78,7 @@ const { title, currentLocale = "es", localeUrls = {}, hasSidebar = false } = Ast
78
78
  transition:
79
79
  background-color 0.3s ease,
80
80
  color 0.3s ease;
81
+ font-family: Inter, sans-serif;
81
82
  }
82
83
 
83
84
  main {
@@ -0,0 +1,118 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { ALL_TOOLS } from '../tools';
3
+
4
+ type LocaleWithDiacritics = keyof typeof DIACRITIC_RULES;
5
+
6
+ const DIACRITIC_RULES = {
7
+ de: {
8
+ language: 'German',
9
+ expectedCharacters: 'ä ö ü ß',
10
+ characters: /[äöüÄÖÜß]/g,
11
+ minPerThousandLetters: 0.1,
12
+ },
13
+ es: {
14
+ language: 'Spanish',
15
+ expectedCharacters: 'á é í ó ú ü ñ',
16
+ characters: /[áéíóúüñÁÉÍÓÚÜÑ]/g,
17
+ minPerThousandLetters: 0.1,
18
+ },
19
+ fr: {
20
+ language: 'French',
21
+ expectedCharacters: 'à â æ ç é è ê ë î ï ô œ ù û ü ÿ',
22
+ characters: /[àâæçéèêëîïôœùûüÿÀÂÆÇÉÈÊËÎÏÔŒÙÛÜŸ]/g,
23
+ minPerThousandLetters: 0.1,
24
+ },
25
+ it: {
26
+ language: 'Italian',
27
+ expectedCharacters: 'à è é ì í î ò ó ù ú',
28
+ characters: /[àèéìíîòóùúÀÈÉÌÍÎÒÓÙÚ]/g,
29
+ minPerThousandLetters: 0.1,
30
+ },
31
+ pl: {
32
+ language: 'Polish',
33
+ expectedCharacters: 'ą ć ę ł ń ó ś ź ż',
34
+ characters: /[ąćęłńóśźżĄĆĘŁŃÓŚŹŻ]/g,
35
+ minPerThousandLetters: 0.1,
36
+ },
37
+ pt: {
38
+ language: 'Portuguese',
39
+ expectedCharacters: 'á â ã à ç é ê í ó ô õ ú ü',
40
+ characters: /[áâãàçéêíóôõúüÁÂÃÀÇÉÊÍÓÔÕÚÜ]/g,
41
+ minPerThousandLetters: 0.1,
42
+ },
43
+ sv: {
44
+ language: 'Swedish',
45
+ expectedCharacters: 'å ä ö',
46
+ characters: /[åäöÅÄÖ]/g,
47
+ minPerThousandLetters: 0.1,
48
+ },
49
+ tr: {
50
+ language: 'Turkish',
51
+ expectedCharacters: 'ç ğ ı İ ö ş ü',
52
+ characters: /[çğıöşüÇĞİÖŞÜ]/g,
53
+ minPerThousandLetters: 0.1,
54
+ },
55
+ } as const;
56
+
57
+ const LETTERS = /\p{L}/gu;
58
+ const TRANSLATABLE_KEYS = ['title', 'description', 'ui', 'seo', 'faq', 'howTo'] as const;
59
+
60
+ function collectStrings(value: unknown): string[] {
61
+ if (typeof value === 'string') return [value];
62
+ if (!value || typeof value !== 'object') return [];
63
+ if (Array.isArray(value)) return value.flatMap(collectStrings);
64
+ return Object.values(value).flatMap(collectStrings);
65
+ }
66
+
67
+ function normalizeText(value: unknown): string {
68
+ return collectStrings(value).join(' ').normalize('NFC');
69
+ }
70
+
71
+ function translatableContent(content: Record<string, unknown>) {
72
+ return TRANSLATABLE_KEYS.map((key) => content[key]);
73
+ }
74
+
75
+ function letterCount(text: string): number {
76
+ return text.match(LETTERS)?.length ?? 0;
77
+ }
78
+
79
+ function diacriticCount(text: string, locale: LocaleWithDiacritics): number {
80
+ return text.match(DIACRITIC_RULES[locale].characters)?.length ?? 0;
81
+ }
82
+
83
+ function diacriticsPerThousandLetters(text: string, locale: LocaleWithDiacritics): number {
84
+ const letters = letterCount(text);
85
+ if (letters === 0) return 0;
86
+ return diacriticCount(text, locale) / letters * 1000;
87
+ }
88
+
89
+ describe('Diacritics density validation', () => {
90
+ ALL_TOOLS.forEach((tool) => {
91
+ describe(`Tool: ${tool.entry.id}`, () => {
92
+ Object.keys(DIACRITIC_RULES).forEach((locale) => {
93
+ it(`${locale} keeps the expected accent and special-letter set`, async () => {
94
+ const typedLocale = locale as LocaleWithDiacritics;
95
+ const loader = tool.entry.i18n[typedLocale];
96
+ if (!loader) return;
97
+
98
+ const content = await loader();
99
+ const text = normalizeText(translatableContent(content as Record<string, unknown>));
100
+ const rule = DIACRITIC_RULES[typedLocale];
101
+ const letters = letterCount(text);
102
+ const matches = diacriticCount(text, typedLocale);
103
+ const density = diacriticsPerThousandLetters(text, typedLocale);
104
+
105
+ expect(
106
+ density,
107
+ [
108
+ `Possible spelling or encoding issue detected in ${tool.entry.id}/${typedLocale} (${rule.language}).`,
109
+ `The text has ${matches} special characters (${density.toFixed(2)} per 1000 letters, ${letters} letters analyzed).`,
110
+ `This locale should include some of these characters: ${rule.expectedCharacters}.`,
111
+ 'If the count is 0 or near 0, accents, tildes, or special letters were probably stripped by encoding or normalization.',
112
+ ].join(' '),
113
+ ).toBeGreaterThanOrEqual(rule.minPerThousandLetters);
114
+ });
115
+ });
116
+ });
117
+ });
118
+ });
@@ -0,0 +1,84 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { ALL_TOOLS } from '../tools';
3
+
4
+ const INVERTED_PUNCTUATION_LOCALES = {
5
+ es: {
6
+ language: 'Spanish',
7
+ questionStart: '¿',
8
+ questionEnd: '?',
9
+ exclamationStart: '¡',
10
+ exclamationEnd: '!',
11
+ },
12
+ } as const;
13
+
14
+ type InvertedPunctuationLocale = keyof typeof INVERTED_PUNCTUATION_LOCALES;
15
+
16
+ const TRANSLATABLE_KEYS = ['title', 'description', 'ui', 'seo', 'faq', 'howTo'] as const;
17
+
18
+ function collectStrings(value: unknown): string[] {
19
+ if (typeof value === 'string') return [value];
20
+ if (!value || typeof value !== 'object') return [];
21
+ if (Array.isArray(value)) return value.flatMap(collectStrings);
22
+ return Object.values(value).flatMap(collectStrings);
23
+ }
24
+
25
+ function translatableStrings(content: Record<string, unknown>): string[] {
26
+ return TRANSLATABLE_KEYS.flatMap((key) => collectStrings(content[key]));
27
+ }
28
+
29
+ function sentenceStart(text: string, endIndex: number): string {
30
+ const beforeMark = text.slice(0, endIndex).trimEnd();
31
+ const boundary = Math.max(
32
+ beforeMark.lastIndexOf('.'),
33
+ beforeMark.lastIndexOf(':'),
34
+ beforeMark.lastIndexOf(';'),
35
+ beforeMark.lastIndexOf('\n'),
36
+ );
37
+
38
+ return beforeMark.slice(boundary + 1).trimStart();
39
+ }
40
+
41
+ function findMissingInvertedMarks(
42
+ text: string,
43
+ startMark: string,
44
+ endMark: string,
45
+ ): string[] {
46
+ return [...text.matchAll(new RegExp(`\\${endMark}`, 'g'))]
47
+ .map((match) => sentenceStart(text, match.index ?? 0))
48
+ .filter((segment) => segment.length > 0 && !segment.includes(startMark))
49
+ .map((segment) => `${segment}${endMark}`);
50
+ }
51
+
52
+ describe('Inverted punctuation validation', () => {
53
+ ALL_TOOLS.forEach((tool) => {
54
+ describe(`Tool: ${tool.entry.id}`, () => {
55
+ Object.keys(INVERTED_PUNCTUATION_LOCALES).forEach((locale) => {
56
+ it(`${locale} uses opening punctuation marks for questions and exclamations`, async () => {
57
+ const typedLocale = locale as InvertedPunctuationLocale;
58
+ const loader = tool.entry.i18n[typedLocale];
59
+ if (!loader) return;
60
+
61
+ const rule = INVERTED_PUNCTUATION_LOCALES[typedLocale];
62
+ const content = await loader();
63
+ const strings = translatableStrings(content as Record<string, unknown>);
64
+ const missingQuestions = strings.flatMap((text) =>
65
+ findMissingInvertedMarks(text, rule.questionStart, rule.questionEnd)
66
+ );
67
+ const missingExclamations = strings.flatMap((text) =>
68
+ findMissingInvertedMarks(text, rule.exclamationStart, rule.exclamationEnd)
69
+ );
70
+ const failures = [...missingQuestions, ...missingExclamations];
71
+
72
+ expect(
73
+ failures,
74
+ [
75
+ `Missing opening punctuation marks in ${tool.entry.id}/${typedLocale} (${rule.language}).`,
76
+ `Questions must use ${rule.questionStart}...${rule.questionEnd} and exclamations must use ${rule.exclamationStart}...${rule.exclamationEnd}.`,
77
+ `Examples: ${failures.slice(0, 5).join(' | ')}`,
78
+ ].join(' '),
79
+ ).toHaveLength(0);
80
+ });
81
+ });
82
+ });
83
+ });
84
+ });
@@ -21,8 +21,8 @@ describe('Locale Completeness Validation', () => {
21
21
  });
22
22
  });
23
23
 
24
- it('all 10 tools registered', () => {
25
- expect(ALL_TOOLS.length).toBe(8);
24
+ it('all 9 tools registered', () => {
25
+ expect(ALL_TOOLS.length).toBe(9);
26
26
  });
27
27
  });
28
28