@jjlmoya/utils-hardware 1.15.0 โ†’ 1.16.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 (152) hide show
  1. package/package.json +1 -1
  2. package/src/category/index.ts +2 -1
  3. package/src/entries.ts +4 -1
  4. package/src/index.ts +1 -0
  5. package/src/pages/[locale]/[slug].astro +28 -12
  6. package/src/tests/locale_completeness.test.ts +6 -20
  7. package/src/tests/shared-test-helpers.ts +56 -0
  8. package/src/tests/tool_exports.test.ts +34 -0
  9. package/src/tests/tool_validation.test.ts +2 -2
  10. package/src/tool/batteryHealthEstimator/bibliography.ts +13 -0
  11. package/src/tool/batteryHealthEstimator/i18n/de.ts +2 -12
  12. package/src/tool/batteryHealthEstimator/i18n/en.ts +2 -12
  13. package/src/tool/batteryHealthEstimator/i18n/es.ts +2 -12
  14. package/src/tool/batteryHealthEstimator/i18n/fr.ts +2 -12
  15. package/src/tool/batteryHealthEstimator/i18n/id.ts +2 -12
  16. package/src/tool/batteryHealthEstimator/i18n/it.ts +2 -12
  17. package/src/tool/batteryHealthEstimator/i18n/ja.ts +2 -12
  18. package/src/tool/batteryHealthEstimator/i18n/ko.ts +2 -12
  19. package/src/tool/batteryHealthEstimator/i18n/nl.ts +2 -12
  20. package/src/tool/batteryHealthEstimator/i18n/pl.ts +2 -12
  21. package/src/tool/batteryHealthEstimator/i18n/pt.ts +2 -12
  22. package/src/tool/batteryHealthEstimator/i18n/ru.ts +2 -12
  23. package/src/tool/batteryHealthEstimator/i18n/sv.ts +2 -12
  24. package/src/tool/batteryHealthEstimator/i18n/tr.ts +2 -12
  25. package/src/tool/batteryHealthEstimator/i18n/zh.ts +2 -12
  26. package/src/tool/batteryHealthEstimator/seo.astro +3 -2
  27. package/src/tool/deadPixelTest/bibliography.ts +13 -0
  28. package/src/tool/deadPixelTest/i18n/de.ts +2 -12
  29. package/src/tool/deadPixelTest/i18n/en.ts +2 -12
  30. package/src/tool/deadPixelTest/i18n/es.ts +2 -12
  31. package/src/tool/deadPixelTest/i18n/fr.ts +2 -12
  32. package/src/tool/deadPixelTest/i18n/id.ts +2 -12
  33. package/src/tool/deadPixelTest/i18n/it.ts +2 -12
  34. package/src/tool/deadPixelTest/i18n/ja.ts +2 -12
  35. package/src/tool/deadPixelTest/i18n/ko.ts +2 -12
  36. package/src/tool/deadPixelTest/i18n/nl.ts +2 -12
  37. package/src/tool/deadPixelTest/i18n/pl.ts +2 -12
  38. package/src/tool/deadPixelTest/i18n/pt.ts +2 -12
  39. package/src/tool/deadPixelTest/i18n/ru.ts +2 -12
  40. package/src/tool/deadPixelTest/i18n/sv.ts +2 -12
  41. package/src/tool/deadPixelTest/i18n/tr.ts +2 -12
  42. package/src/tool/deadPixelTest/i18n/zh.ts +2 -12
  43. package/src/tool/deadPixelTest/seo.astro +3 -2
  44. package/src/tool/gamepadTest/bibliography.ts +12 -0
  45. package/src/tool/gamepadTest/i18n/de.ts +2 -12
  46. package/src/tool/gamepadTest/i18n/en.ts +2 -12
  47. package/src/tool/gamepadTest/i18n/es.ts +2 -12
  48. package/src/tool/gamepadTest/i18n/fr.ts +2 -12
  49. package/src/tool/gamepadTest/i18n/id.ts +2 -12
  50. package/src/tool/gamepadTest/i18n/it.ts +2 -12
  51. package/src/tool/gamepadTest/i18n/ja.ts +2 -12
  52. package/src/tool/gamepadTest/i18n/ko.ts +2 -12
  53. package/src/tool/gamepadTest/i18n/nl.ts +2 -12
  54. package/src/tool/gamepadTest/i18n/pl.ts +2 -12
  55. package/src/tool/gamepadTest/i18n/pt.ts +2 -12
  56. package/src/tool/gamepadTest/i18n/ru.ts +2 -12
  57. package/src/tool/gamepadTest/i18n/sv.ts +2 -12
  58. package/src/tool/gamepadTest/i18n/tr.ts +2 -12
  59. package/src/tool/gamepadTest/i18n/zh.ts +2 -12
  60. package/src/tool/gamepadTest/seo.astro +3 -2
  61. package/src/tool/gamepadVibrationTester/bibliography.ts +13 -0
  62. package/src/tool/gamepadVibrationTester/i18n/de.ts +2 -12
  63. package/src/tool/gamepadVibrationTester/i18n/en.ts +2 -12
  64. package/src/tool/gamepadVibrationTester/i18n/es.ts +2 -12
  65. package/src/tool/gamepadVibrationTester/i18n/fr.ts +2 -12
  66. package/src/tool/gamepadVibrationTester/i18n/id.ts +2 -12
  67. package/src/tool/gamepadVibrationTester/i18n/it.ts +2 -12
  68. package/src/tool/gamepadVibrationTester/i18n/ja.ts +2 -12
  69. package/src/tool/gamepadVibrationTester/i18n/ko.ts +2 -12
  70. package/src/tool/gamepadVibrationTester/i18n/nl.ts +2 -12
  71. package/src/tool/gamepadVibrationTester/i18n/pl.ts +2 -12
  72. package/src/tool/gamepadVibrationTester/i18n/pt.ts +2 -12
  73. package/src/tool/gamepadVibrationTester/i18n/ru.ts +2 -12
  74. package/src/tool/gamepadVibrationTester/i18n/sv.ts +2 -12
  75. package/src/tool/gamepadVibrationTester/i18n/tr.ts +2 -12
  76. package/src/tool/gamepadVibrationTester/i18n/zh.ts +2 -12
  77. package/src/tool/gamepadVibrationTester/seo.astro +3 -2
  78. package/src/tool/keyboardTest/bibliography.ts +13 -0
  79. package/src/tool/keyboardTest/i18n/de.ts +2 -12
  80. package/src/tool/keyboardTest/i18n/en.ts +2 -12
  81. package/src/tool/keyboardTest/i18n/es.ts +2 -12
  82. package/src/tool/keyboardTest/i18n/fr.ts +2 -12
  83. package/src/tool/keyboardTest/i18n/id.ts +2 -12
  84. package/src/tool/keyboardTest/i18n/it.ts +2 -12
  85. package/src/tool/keyboardTest/i18n/ja.ts +2 -12
  86. package/src/tool/keyboardTest/i18n/ko.ts +2 -12
  87. package/src/tool/keyboardTest/i18n/nl.ts +2 -12
  88. package/src/tool/keyboardTest/i18n/pl.ts +2 -12
  89. package/src/tool/keyboardTest/i18n/pt.ts +2 -12
  90. package/src/tool/keyboardTest/i18n/ru.ts +2 -12
  91. package/src/tool/keyboardTest/i18n/sv.ts +2 -12
  92. package/src/tool/keyboardTest/i18n/tr.ts +2 -12
  93. package/src/tool/keyboardTest/i18n/zh.ts +2 -12
  94. package/src/tool/keyboardTest/seo.astro +3 -2
  95. package/src/tool/mousePollingTest/bibliography.ts +13 -0
  96. package/src/tool/mousePollingTest/i18n/de.ts +2 -12
  97. package/src/tool/mousePollingTest/i18n/en.ts +2 -12
  98. package/src/tool/mousePollingTest/i18n/es.ts +2 -12
  99. package/src/tool/mousePollingTest/i18n/fr.ts +2 -12
  100. package/src/tool/mousePollingTest/i18n/id.ts +2 -12
  101. package/src/tool/mousePollingTest/i18n/it.ts +2 -12
  102. package/src/tool/mousePollingTest/i18n/ja.ts +2 -12
  103. package/src/tool/mousePollingTest/i18n/ko.ts +2 -12
  104. package/src/tool/mousePollingTest/i18n/nl.ts +2 -12
  105. package/src/tool/mousePollingTest/i18n/pl.ts +2 -12
  106. package/src/tool/mousePollingTest/i18n/pt.ts +2 -12
  107. package/src/tool/mousePollingTest/i18n/ru.ts +2 -12
  108. package/src/tool/mousePollingTest/i18n/sv.ts +2 -12
  109. package/src/tool/mousePollingTest/i18n/tr.ts +2 -12
  110. package/src/tool/mousePollingTest/i18n/zh.ts +2 -12
  111. package/src/tool/mousePollingTest/seo.astro +3 -2
  112. package/src/tool/refreshRateDetector/bibliography.astro +14 -0
  113. package/src/tool/refreshRateDetector/bibliography.ts +20 -0
  114. package/src/tool/refreshRateDetector/component.astro +206 -0
  115. package/src/tool/refreshRateDetector/entry.ts +29 -0
  116. package/src/tool/refreshRateDetector/i18n/de.ts +196 -0
  117. package/src/tool/refreshRateDetector/i18n/en.ts +196 -0
  118. package/src/tool/refreshRateDetector/i18n/es.ts +196 -0
  119. package/src/tool/refreshRateDetector/i18n/fr.ts +196 -0
  120. package/src/tool/refreshRateDetector/i18n/id.ts +196 -0
  121. package/src/tool/refreshRateDetector/i18n/it.ts +196 -0
  122. package/src/tool/refreshRateDetector/i18n/ja.ts +196 -0
  123. package/src/tool/refreshRateDetector/i18n/ko.ts +196 -0
  124. package/src/tool/refreshRateDetector/i18n/nl.ts +196 -0
  125. package/src/tool/refreshRateDetector/i18n/pl.ts +196 -0
  126. package/src/tool/refreshRateDetector/i18n/pt.ts +196 -0
  127. package/src/tool/refreshRateDetector/i18n/ru.ts +196 -0
  128. package/src/tool/refreshRateDetector/i18n/sv.ts +196 -0
  129. package/src/tool/refreshRateDetector/i18n/tr.ts +196 -0
  130. package/src/tool/refreshRateDetector/i18n/zh.ts +196 -0
  131. package/src/tool/refreshRateDetector/index.ts +11 -0
  132. package/src/tool/refreshRateDetector/monitor-refresh-rate-detector.css +342 -0
  133. package/src/tool/refreshRateDetector/seo.astro +15 -0
  134. package/src/tool/refreshRateDetector/ui.ts +24 -0
  135. package/src/tool/toneGenerator/bibliography.ts +13 -0
  136. package/src/tool/toneGenerator/i18n/de.ts +2 -12
  137. package/src/tool/toneGenerator/i18n/en.ts +2 -12
  138. package/src/tool/toneGenerator/i18n/es.ts +2 -12
  139. package/src/tool/toneGenerator/i18n/fr.ts +2 -12
  140. package/src/tool/toneGenerator/i18n/id.ts +2 -12
  141. package/src/tool/toneGenerator/i18n/it.ts +2 -12
  142. package/src/tool/toneGenerator/i18n/ja.ts +2 -12
  143. package/src/tool/toneGenerator/i18n/ko.ts +2 -12
  144. package/src/tool/toneGenerator/i18n/nl.ts +2 -12
  145. package/src/tool/toneGenerator/i18n/pl.ts +2 -12
  146. package/src/tool/toneGenerator/i18n/pt.ts +2 -12
  147. package/src/tool/toneGenerator/i18n/ru.ts +2 -12
  148. package/src/tool/toneGenerator/i18n/sv.ts +2 -12
  149. package/src/tool/toneGenerator/i18n/tr.ts +2 -12
  150. package/src/tool/toneGenerator/i18n/zh.ts +2 -12
  151. package/src/tool/toneGenerator/seo.astro +3 -2
  152. package/src/tools.ts +2 -1
@@ -0,0 +1,196 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { RefreshRateDetectorUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
5
+
6
+ const slug = 'rilevatore-frequenza-aggiornamento-monitor';
7
+ const title = 'Rilevatore Frequenza di Aggiornamento Monitor';
8
+ const description = 'Rileva istantaneamente la frequenza di aggiornamento del tuo monitor con precisione utilizzando requestAnimationFrame. Testa la stabilitร  dei fotogrammi e confrontala con gli standard del settore.';
9
+
10
+ const faqData = [
11
+ {
12
+ question: 'Cos\'รจ la frequenza di aggiornamento (Hz)?',
13
+ answer: 'La frequenza di aggiornamento indica quante volte al secondo il monitor aggiorna l\'immagine. Un monitor a 60Hz si aggiorna 60 volte al secondo, mentre uno a 144Hz si aggiorna 144 volte. Frequenze piรน elevate si traducono in movimenti piรน fluidi.',
14
+ },
15
+ {
16
+ question: 'Quanto รจ preciso questo rilevatore?',
17
+ answer: 'Questo strumento utilizza requestAnimationFrame, che si sincronizza con il ciclo di aggiornamento del monitor. La precisione dipende dal carico del sistema. La modalitร  stabile misura per periodi piรน lunghi per una maggiore precisione.',
18
+ },
19
+ {
20
+ question: 'Qual รจ la differenza tra la modalitร  Stabile e quella Veloce?',
21
+ answer: 'La modalitร  Veloce misura per un breve periodo (~3 secondi) per un feedback rapido. La modalitร  Stabile richiede piรน tempo (~10 secondi) per filtrare il rumore del sistema e fornire risultati piรน affidabili.',
22
+ },
23
+ {
24
+ question: 'Perchรฉ gli Hz rilevati sono diversi da quelli indicati dal mio monitor?',
25
+ answer: 'Ciรฒ puรฒ accadere se: il collegamento del cavo รจ allentato, i driver sono obsoleti o l\'interferenza del ridimensionamento del sistema operativo. Prova a scollegare e ricollegare il cavo del display o ad aggiornare i driver della GPU.',
26
+ },
27
+ {
28
+ question: 'Quali frequenze di aggiornamento supportano i monitor moderni?',
29
+ answer: 'Gli standard comuni sono 60Hz (base), 75Hz, 120Hz, 144Hz (gaming), 240Hz (gaming competitivo) e 360Hz (eSport professionali).',
30
+ },
31
+ ];
32
+
33
+ const howToData = [
34
+ {
35
+ name: 'Carica lo strumento',
36
+ text: 'Basta aprire questa pagina. Il rilevatore inizia a misurare immediatamente.',
37
+ },
38
+ {
39
+ name: 'Attendi la stabilizzazione',
40
+ text: 'Scegli la modalitร  Stabile o Veloce. Lascia che la misurazione venga completata senza spostare la finestra.',
41
+ },
42
+ {
43
+ name: 'Controlla il tachimetro',
44
+ text: 'La frequenza di aggiornamento del monitor appare come un quadrante fluido, con statistiche di benchmark (min/max/media).',
45
+ },
46
+ {
47
+ name: 'Confronta con gli standard',
48
+ text: 'Lo strumento mostra a quale standard corrisponde il tuo monitor (60, 75, 120, 144, 240, 360Hz).',
49
+ },
50
+ {
51
+ name: 'Opzionale: test del salto dei fotogrammi',
52
+ text: 'Osserva il quadrato animato che attraversa lo schermo per confermare visivamente la fluiditร .',
53
+ },
54
+ ];
55
+
56
+ const faqSchema: WithContext<FAQPage> = {
57
+ '@context': 'https://schema.org',
58
+ '@type': 'FAQPage',
59
+ mainEntity: faqData.map((item) => ({
60
+ '@type': 'Question',
61
+ name: item.question,
62
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
63
+ })),
64
+ };
65
+
66
+ const howToSchema: WithContext<HowTo> = {
67
+ '@context': 'https://schema.org',
68
+ '@type': 'HowTo',
69
+ name: title,
70
+ description,
71
+ step: howToData.map((step, i) => ({
72
+ '@type': 'HowToStep',
73
+ position: i + 1,
74
+ name: step.name,
75
+ text: step.text,
76
+ })),
77
+ };
78
+
79
+ const appSchema: WithContext<SoftwareApplication> = {
80
+ '@context': 'https://schema.org',
81
+ '@type': 'SoftwareApplication',
82
+ name: title,
83
+ description,
84
+ applicationCategory: 'UtilityApplication',
85
+ operatingSystem: 'All',
86
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD' },
87
+ inLanguage: 'it',
88
+ };
89
+
90
+ export const content: ToolLocaleContent<RefreshRateDetectorUI> = {
91
+ slug,
92
+ title,
93
+ description,
94
+ faq: faqData,
95
+ bibliography,
96
+ howTo: howToData,
97
+ schemas: [faqSchema, howToSchema, appSchema],
98
+ seo: [
99
+ {
100
+ type: 'title',
101
+ text: 'Rilevatore Frequenza di Aggiornamento Monitor: Testa gli Hz del tuo Display Online',
102
+ level: 2,
103
+ },
104
+ {
105
+ type: 'paragraph',
106
+ html: 'Rileva istantaneamente la frequenza di aggiornamento del tuo monitor (60Hz, 144Hz, 240Hz, ecc.) con precisione. Testa la stabilitร  dei fotogrammi e verifica che il tuo display stia funzionando secondo le sue specifiche nominali.',
107
+ },
108
+ {
109
+ type: 'title',
110
+ text: 'Perchรฉ la Frequenza di Aggiornamento del Monitor รจ Importante',
111
+ level: 3,
112
+ },
113
+ {
114
+ type: 'paragraph',
115
+ html: 'La frequenza di aggiornamento determina la fluiditร  con cui i movimenti appaiono sullo schermo. I giocatori traggono vantaggio da monitor a 144Hz o superiori, mentre gli utenti generici trovano adeguati i 60Hz. Questo strumento aiuta a confermare che il monitor fornisca effettivamente la frequenza di aggiornamento pubblicizzata.',
116
+ },
117
+ {
118
+ type: 'title',
119
+ text: 'Come Rilevare la tua Frequenza di Aggiornamento',
120
+ level: 3,
121
+ },
122
+ {
123
+ type: 'list',
124
+ items: [
125
+ 'Carica questo rilevatore: la misurazione inizia immediatamente',
126
+ 'Scegli tra la modalitร  di misurazione Veloce (3s) o Stabile (10s)',
127
+ 'Leggi gli Hz del tuo monitor dal quadrante del tachimetro',
128
+ 'Confrontali con gli standard del settore (60, 75, 120, 144, 240, 360Hz)',
129
+ ],
130
+ },
131
+ {
132
+ type: 'title',
133
+ text: 'Standard Comuni della Frequenza di Aggiornamento',
134
+ level: 3,
135
+ },
136
+ {
137
+ type: 'table',
138
+ headers: ['Standard', 'Caso d\'Uso', 'Utente Tipico'],
139
+ rows: [
140
+ ['60Hz', 'Informatica Generale', 'Ufficio, Navigazione Web'],
141
+ ['75Hz', 'Gaming Leggero', 'Giocatori Occasionali'],
142
+ ['120Hz', 'Multimedia', 'Console, Streaming'],
143
+ ['144Hz', 'Gaming Competitivo', 'FPS, Giochi Veloci'],
144
+ ['240Hz+', 'eSport Professionali', 'Giocatori Pro, Streamer'],
145
+ ],
146
+ },
147
+ {
148
+ type: 'title',
149
+ text: 'Risoluzione dei Problemi: Il Display Mostra meno Hz di quelli Previsti',
150
+ level: 3,
151
+ },
152
+ {
153
+ type: 'list',
154
+ items: [
155
+ 'Controlla i collegamenti del cavo HDMI/DisplayPort: i cavi allentati riducono la larghezza di banda',
156
+ 'Aggiorna i driver della GPU (NVIDIA, AMD, Intel)',
157
+ 'Controlla le impostazioni del display del sistema operativo per assicurarti che la frequenza di aggiornamento elevata sia abilitata',
158
+ 'Prova diversi cavi o porte sul monitor',
159
+ 'Riavvia il computer e ripeti il test',
160
+ ],
161
+ },
162
+ {
163
+ type: 'title',
164
+ text: 'La Tecnologia Dietro questo Rilevatore',
165
+ level: 3,
166
+ },
167
+ {
168
+ type: 'paragraph',
169
+ html: 'Questo strumento utilizza l\'API requestAnimationFrame del browser, che si sincronizza direttamente con il ciclo di aggiornamento del monitor. Misurando il tempo tra i fotogrammi dell\'animazione, calcoliamo la tua esatta frequenza di aggiornamento con alta precisione, senza bisogno di hardware speciale.',
170
+ },
171
+ ],
172
+ ui: {
173
+ badge: 'Test del Display',
174
+ title: 'Rilevatore Frequenza Monitor',
175
+ description: 'Rileva istantaneamente la frequenza di aggiornamento del tuo display',
176
+ modeStable: 'Stabile (10s, preciso)',
177
+ modeFast: 'Veloce (3s, rapido)',
178
+ measurementStatus: 'Misurazione in corso...',
179
+ currentHz: 'Attuale',
180
+ averageHz: 'Media',
181
+ maxHz: 'Massimo',
182
+ minHz: 'Minimo',
183
+ standardDetected: 'Standard Rilevato',
184
+ frameSkippingTest: 'Test del Salto dei Fotogrammi',
185
+ startMeasurement: 'Avvia Misurazione',
186
+ resetMeasurement: 'Ripristina',
187
+ copyResult: 'Copia Risultato',
188
+ copiedFeedback: 'Copiato negli appunti!',
189
+ optimalConfiguration: '[OK] Configurazione Ottimale',
190
+ suboptimalConfiguration: '[AVVISO] Sotto l\'Ottimale',
191
+ unstableRefreshRate: '[AVVISO] Frequenza Instabile',
192
+ measurementNotStarted: 'Pronto per la misurazione',
193
+ switchMonitorHint: 'Trascina la finestra su un altro monitor per testarlo',
194
+ incompatibleBrowserMsg: 'Il tuo browser non supporta requestAnimationFrame',
195
+ },
196
+ };
@@ -0,0 +1,196 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { RefreshRateDetectorUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
5
+
6
+ const slug = 'monitor-refresh-rate-detector';
7
+ const title = 'ใƒขใƒ‹ใ‚ฟใƒผใƒชใƒ•ใƒฌใƒƒใ‚ทใƒฅใƒฌใƒผใƒˆๆธฌๅฎšๅ™จ';
8
+ const description = 'requestAnimationFrameใ‚’ไฝฟ็”จใ—ใฆใ€ใƒขใƒ‹ใ‚ฟใƒผใฎใƒชใƒ•ใƒฌใƒƒใ‚ทใƒฅใƒฌใƒผใƒˆใ‚’็žฌๆ™‚ใซ้ซ˜็ฒพๅบฆใงๆคœๅ‡บใ—ใพใ™ใ€‚ใƒ•ใƒฌใƒผใƒ ใฎๅฎ‰ๅฎšๆ€งใ‚’ใƒ†ใ‚นใƒˆใ—ใ€ๆฅญ็•Œๆจ™ๆบ–ใจๆฏ”่ผƒใงใใพใ™ใ€‚';
9
+
10
+ const faqData = [
11
+ {
12
+ question: 'ใƒชใƒ•ใƒฌใƒƒใ‚ทใƒฅใƒฌใƒผใƒˆ๏ผˆHz๏ผ‰ใจใฏไฝ•ใงใ™ใ‹๏ผŸ',
13
+ answer: 'ใƒชใƒ•ใƒฌใƒƒใ‚ทใƒฅใƒฌใƒผใƒˆใจใฏใ€ใƒขใƒ‹ใ‚ฟใƒผใŒ1็ง’้–“ใซ็”ปๅƒใ‚’ๆ›ดๆ–ฐใ™ใ‚‹ๅ›žๆ•ฐใฎใ“ใจใงใ™ใ€‚60Hzใฎใƒขใƒ‹ใ‚ฟใƒผใฏ1็ง’้–“ใซ60ๅ›žใ€144Hzใฏ144ๅ›žๆ›ดๆ–ฐใ•ใ‚Œใพใ™ใ€‚ๆ•ฐๅ€คใŒ้ซ˜ใ„ใปใฉใ€ๅ‹•ใใŒใ‚ˆใ‚Šๆป‘ใ‚‰ใ‹ใซใชใ‚Šใพใ™ใ€‚',
14
+ },
15
+ {
16
+ question: 'ใ“ใฎๆธฌๅฎšๅ™จใฎ็ฒพๅบฆใฏใฉใฎใใ‚‰ใ„ใงใ™ใ‹๏ผŸ',
17
+ answer: 'ใ“ใฎใƒ„ใƒผใƒซใฏใ€ใƒขใƒ‹ใ‚ฟใƒผใฎๆ›ดๆ–ฐใ‚ตใ‚คใ‚ฏใƒซใจๅŒๆœŸใ™ใ‚‹requestAnimationFrameใ‚’ไฝฟ็”จใ—ใฆใ„ใพใ™ใ€‚็ฒพๅบฆใฏใ‚ทใ‚นใƒ†ใƒ ่ฒ ่ทใซไพๅญ˜ใ—ใพใ™ใ€‚ๅฎ‰ๅฎšใƒขใƒผใƒ‰ใงใฏใ€ใ‚ˆใ‚Š้•ทใ„ๆ™‚้–“ๆธฌๅฎšใ™ใ‚‹ใ“ใจใง็ฒพๅบฆใ‚’้ซ˜ใ‚ใฆใ„ใพใ™ใ€‚',
18
+ },
19
+ {
20
+ question: 'ๅฎ‰ๅฎšใƒขใƒผใƒ‰ใจ้ซ˜้€Ÿใƒขใƒผใƒ‰ใฎ้•ใ„ใฏไฝ•ใงใ™ใ‹๏ผŸ',
21
+ answer: '้ซ˜้€Ÿใƒขใƒผใƒ‰ใฏ็Ÿญๆ™‚้–“๏ผˆ็ด„3็ง’๏ผ‰ๆธฌๅฎšใ—ใ€็ด ๆ—ฉใ็ตๆžœใ‚’่กจ็คบใ—ใพใ™ใ€‚ๅฎ‰ๅฎšใƒขใƒผใƒ‰ใฏใ‚ˆใ‚Š้•ทใ„ๆ™‚้–“๏ผˆ็ด„10็ง’๏ผ‰ใ‹ใ‘ใฆใ‚ทใ‚นใƒ†ใƒ ใƒŽใ‚คใ‚บใ‚’้™คๅŽปใ—ใ€ใ‚ˆใ‚Šไฟก้ ผๆ€งใฎ้ซ˜ใ„็ตๆžœใ‚’ๆไพ›ใ—ใพใ™ใ€‚',
22
+ },
23
+ {
24
+ question: 'ๆคœๅ‡บใ•ใ‚ŒใŸHzใŒใƒขใƒ‹ใ‚ฟใƒผใฎไป•ๆง˜ใจ็•ฐใชใ‚‹ใฎใฏใชใœใงใ™ใ‹๏ผŸ',
25
+ answer: 'ใ‚ฑใƒผใƒ–ใƒซใฎๆŽฅ็ถšไธ่‰ฏใ€ใƒ‰ใƒฉใ‚คใƒใฎๅคใ•ใ€OSใฎใ‚นใ‚ฑใƒผใƒชใƒณใ‚ฐ่จญๅฎšใฎๅฝฑ้ŸฟใชใฉใŒ่€ƒใˆใ‚‰ใ‚Œใพใ™ใ€‚ใƒ‡ใ‚ฃใ‚นใƒ—ใƒฌใ‚คใ‚ฑใƒผใƒ–ใƒซใฎๆŠœใๅทฎใ—ใ‚„ใ€GPUใƒ‰ใƒฉใ‚คใƒใฎๆ›ดๆ–ฐใ‚’่ฉฆใ—ใฆใใ ใ•ใ„ใ€‚',
26
+ },
27
+ {
28
+ question: 'ๆœ€ๆ–ฐใฎใƒขใƒ‹ใ‚ฟใƒผใฏใฉใฎใ‚ˆใ†ใชใƒชใƒ•ใƒฌใƒƒใ‚ทใƒฅใƒฌใƒผใƒˆใ‚’ใ‚ตใƒใƒผใƒˆใ—ใฆใ„ใพใ™ใ‹๏ผŸ',
29
+ answer: 'ไธ€่ˆฌ็š„ใชๆจ™ๆบ–ใฏใ€60Hz๏ผˆๅŸบๆœฌ๏ผ‰ใ€75Hzใ€120Hzใ€144Hz๏ผˆใ‚ฒใƒผใƒ ็”จ๏ผ‰ใ€240Hz๏ผˆ็ซถๆŠ€ใ‚ฒใƒผใƒ ็”จ๏ผ‰ใ€360Hz๏ผˆใƒ—ใƒญeใ‚นใƒใƒผใƒ„็”จ๏ผ‰ใชใฉใงใ™ใ€‚',
30
+ },
31
+ ];
32
+
33
+ const howToData = [
34
+ {
35
+ name: 'ใƒ„ใƒผใƒซใ‚’่ชญใฟ่พผใ‚€',
36
+ text: 'ใ“ใฎใƒšใƒผใ‚ธใ‚’้–‹ใใ ใ‘ใงใ€ๆธฌๅฎšใŒ่‡ชๅ‹•็š„ใซ้–‹ๅง‹ใ•ใ‚Œใพใ™ใ€‚',
37
+ },
38
+ {
39
+ name: 'ๅฎ‰ๅฎšใ™ใ‚‹ใพใงๅพ…ใค',
40
+ text: 'ๅฎ‰ๅฎšใƒขใƒผใƒ‰ใพใŸใฏ้ซ˜้€Ÿใƒขใƒผใƒ‰ใ‚’้ธๆŠžใ—ใพใ™ใ€‚ใ‚ฆใ‚ฃใƒณใƒ‰ใ‚ฆใ‚’ๅ‹•ใ‹ใ•ใšใซๆธฌๅฎšใŒๅฎŒไบ†ใ™ใ‚‹ใพใงๅพ…ๆฉŸใ—ใพใ™ใ€‚',
41
+ },
42
+ {
43
+ name: 'ใƒกใƒผใ‚ฟใƒผใ‚’็ขบ่ชใ™ใ‚‹',
44
+ text: 'ใƒขใƒ‹ใ‚ฟใƒผใฎใƒชใƒ•ใƒฌใƒƒใ‚ทใƒฅใƒฌใƒผใƒˆใŒใ€ๅŸบๆบ–็ตฑ่จˆ๏ผˆๆœ€ๅฐ/ๆœ€ๅคง/ๅนณๅ‡๏ผ‰ใจๅ…ฑใซใ‚นใƒ ใƒผใ‚บใชใƒ€ใ‚คใƒคใƒซใง่กจ็คบใ•ใ‚Œใพใ™ใ€‚',
45
+ },
46
+ {
47
+ name: 'ๆจ™ๆบ–ใจๆฏ”่ผƒใ™ใ‚‹',
48
+ text: 'ใƒขใƒ‹ใ‚ฟใƒผใŒใฉใฎๆจ™ๆบ–๏ผˆ60, 75, 120, 144, 240, 360Hz๏ผ‰ใซไธ€่‡ดใ—ใฆใ„ใ‚‹ใ‹ใ‚’่กจ็คบใ—ใพใ™ใ€‚',
49
+ },
50
+ {
51
+ name: 'ใ‚ชใƒ—ใ‚ทใƒงใƒณ๏ผšใƒ•ใƒฌใƒผใƒ ใ‚นใ‚ญใƒƒใƒ—ใƒ†ใ‚นใƒˆ',
52
+ text: '็”ป้ขใ‚’ๆจชๅˆ‡ใ‚‹ใ‚ขใƒ‹ใƒกใƒผใ‚ทใƒงใƒณใฎๅ››่ง’ๅฝขใ‚’่ฆ‹ใฆใ€่ฆ–่ฆš็š„ใซๆป‘ใ‚‰ใ‹ใ•ใ‚’็ขบ่ชใ—ใพใ™ใ€‚',
53
+ },
54
+ ];
55
+
56
+ const faqSchema: WithContext<FAQPage> = {
57
+ '@context': 'https://schema.org',
58
+ '@type': 'FAQPage',
59
+ mainEntity: faqData.map((item) => ({
60
+ '@type': 'Question',
61
+ name: item.question,
62
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
63
+ })),
64
+ };
65
+
66
+ const howToSchema: WithContext<HowTo> = {
67
+ '@context': 'https://schema.org',
68
+ '@type': 'HowTo',
69
+ name: title,
70
+ description,
71
+ step: howToData.map((step, i) => ({
72
+ '@type': 'HowToStep',
73
+ position: i + 1,
74
+ name: step.name,
75
+ text: step.text,
76
+ })),
77
+ };
78
+
79
+ const appSchema: WithContext<SoftwareApplication> = {
80
+ '@context': 'https://schema.org',
81
+ '@type': 'SoftwareApplication',
82
+ name: title,
83
+ description,
84
+ applicationCategory: 'UtilityApplication',
85
+ operatingSystem: 'All',
86
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD' },
87
+ inLanguage: 'ja',
88
+ };
89
+
90
+ export const content: ToolLocaleContent<RefreshRateDetectorUI> = {
91
+ slug,
92
+ title,
93
+ description,
94
+ faq: faqData,
95
+ bibliography,
96
+ howTo: howToData,
97
+ schemas: [faqSchema, howToSchema, appSchema],
98
+ seo: [
99
+ {
100
+ type: 'title',
101
+ text: 'ใƒขใƒ‹ใ‚ฟใƒผใƒชใƒ•ใƒฌใƒƒใ‚ทใƒฅใƒฌใƒผใƒˆๆธฌๅฎšๅ™จ๏ผšใƒ‡ใ‚ฃใ‚นใƒ—ใƒฌใ‚คHzใ‚’ใ‚ชใƒณใƒฉใ‚คใƒณใงใƒ†ใ‚นใƒˆ',
102
+ level: 2,
103
+ },
104
+ {
105
+ type: 'paragraph',
106
+ html: 'ใƒขใƒ‹ใ‚ฟใƒผใฎใƒชใƒ•ใƒฌใƒƒใ‚ทใƒฅใƒฌใƒผใƒˆ๏ผˆ60Hz, 144Hz, 240Hzใชใฉ๏ผ‰ใ‚’็žฌๆ™‚ใซ้ซ˜็ฒพๅบฆใงๆคœๅ‡บใ—ใพใ™ใ€‚ใƒ•ใƒฌใƒผใƒ ใฎๅฎ‰ๅฎšๆ€งใ‚’ใƒ†ใ‚นใƒˆใ—ใ€ใƒ‡ใ‚ฃใ‚นใƒ—ใƒฌใ‚คใŒๅฎšๆ ผไป•ๆง˜ใงๅ‹•ไฝœใ—ใฆใ„ใ‚‹ใ‹ใ‚’็ขบ่ชใงใใพใ™ใ€‚',
107
+ },
108
+ {
109
+ type: 'title',
110
+ text: 'ใƒขใƒ‹ใ‚ฟใƒผใฎใƒชใƒ•ใƒฌใƒƒใ‚ทใƒฅใƒฌใƒผใƒˆใŒ้‡่ฆใช็†็”ฑ',
111
+ level: 3,
112
+ },
113
+ {
114
+ type: 'paragraph',
115
+ html: 'ใƒชใƒ•ใƒฌใƒƒใ‚ทใƒฅใƒฌใƒผใƒˆใฏใ€็”ป้ขไธŠใฎๅ‹•ใใŒใฉใ‚Œใ ใ‘ๆป‘ใ‚‰ใ‹ใซ่ฆ‹ใˆใ‚‹ใ‹ใ‚’ๆฑบๅฎšใ—ใพใ™ใ€‚ใ‚ฒใƒผใƒžใƒผใฏ144HzไปฅไธŠใฎใƒขใƒ‹ใ‚ฟใƒผใงๆฉๆตใ‚’ๅ—ใ‘ใพใ™ใŒใ€ไธ€่ˆฌ็š„ใชใƒฆใƒผใ‚ถใƒผใฏ60Hzใงๅๅˆ†ใงใ™ใ€‚ใ“ใฎใƒ„ใƒผใƒซใฏใ€ใƒขใƒ‹ใ‚ฟใƒผใŒๅ…ฌ็งฐ้€šใ‚Šใฎใƒชใƒ•ใƒฌใƒƒใ‚ทใƒฅใƒฌใƒผใƒˆใ‚’ๅ‡บใ—ใฆใ„ใ‚‹ใ‹็ขบ่ชใ™ใ‚‹ใฎใซๅฝน็ซ‹ใกใพใ™ใ€‚',
116
+ },
117
+ {
118
+ type: 'title',
119
+ text: 'ใƒชใƒ•ใƒฌใƒƒใ‚ทใƒฅใƒฌใƒผใƒˆใ‚’ๆคœๅ‡บใ™ใ‚‹ๆ–นๆณ•',
120
+ level: 3,
121
+ },
122
+ {
123
+ type: 'list',
124
+ items: [
125
+ 'ใ“ใฎๆธฌๅฎšๅ™จใ‚’่ชญใฟ่พผใ‚€ใจใ€ใ™ใใซๆธฌๅฎšใŒ้–‹ๅง‹ใ•ใ‚Œใพใ™',
126
+ '้ซ˜้€Ÿ๏ผˆ3็ง’๏ผ‰ใพใŸใฏๅฎ‰ๅฎš๏ผˆ10็ง’๏ผ‰ใฎๆธฌๅฎšใƒขใƒผใƒ‰ใ‚’้ธๆŠžใ—ใพใ™',
127
+ 'ใƒกใƒผใ‚ฟใƒผใฎใƒ€ใ‚คใƒคใƒซใ‹ใ‚‰ใƒขใƒ‹ใ‚ฟใƒผใฎHzใ‚’่ชญใฟๅ–ใ‚Šใพใ™',
128
+ 'ๆฅญ็•Œๆจ™ๆบ–๏ผˆ60, 75, 120, 144, 240, 360Hz๏ผ‰ใจๆฏ”่ผƒใ—ใพใ™',
129
+ ],
130
+ },
131
+ {
132
+ type: 'title',
133
+ text: 'ไธ€่ˆฌ็š„ใชใƒชใƒ•ใƒฌใƒƒใ‚ทใƒฅใƒฌใƒผใƒˆๆจ™ๆบ–',
134
+ level: 3,
135
+ },
136
+ {
137
+ type: 'table',
138
+ headers: ['ๆจ™ๆบ–', 'ไธปใช็”จ้€”', 'ไธ€่ˆฌ็š„ใชใƒฆใƒผใ‚ถใƒผ'],
139
+ rows: [
140
+ ['60Hz', 'ไธ€่ˆฌ็š„ใชใ‚ณใƒณใƒ”ใƒฅใƒผใ‚ฟๅˆฉ็”จ', 'ไบ‹ๅ‹™ใ€Web้–ฒ่ฆง'],
141
+ ['75Hz', 'ใƒฉใ‚คใƒˆใชใ‚ฒใƒผใƒ ', 'ใ‚ซใ‚ธใƒฅใ‚ขใƒซใ‚ฒใƒผใƒžใƒผ'],
142
+ ['120Hz', 'ใƒžใƒซใƒใƒกใƒ‡ใ‚ฃใ‚ข', 'ใ‚ณใƒณใ‚ฝใƒผใƒซๆฉŸใ€้…ไฟก่ฆ–่ด'],
143
+ ['144Hz', '็ซถๆŠ€ใ‚ฒใƒผใƒ ', 'FPSใ€้ซ˜้€Ÿใชใ‚ขใ‚ฏใ‚ทใƒงใƒณใ‚ฒใƒผใƒ '],
144
+ ['240Hz+', 'ใƒ—ใƒญeใ‚นใƒใƒผใƒ„', 'ใƒ—ใƒญใ‚ฒใƒผใƒžใƒผใ€้…ไฟก่€…'],
145
+ ],
146
+ },
147
+ {
148
+ type: 'title',
149
+ text: 'ใƒˆใƒฉใƒ–ใƒซใ‚ทใƒฅใƒผใƒ†ใ‚ฃใƒณใ‚ฐ๏ผšHzใŒๆƒณๅฎšใ‚ˆใ‚ŠไฝŽใ่กจ็คบใ•ใ‚Œใ‚‹ๅ ดๅˆ',
150
+ level: 3,
151
+ },
152
+ {
153
+ type: 'list',
154
+ items: [
155
+ 'HDMI/DisplayPortใ‚ฑใƒผใƒ–ใƒซใฎๆŽฅ็ถšใ‚’็ขบ่ชใ—ใฆใใ ใ•ใ„ใ€‚ๆŽฅ็ถšไธ่‰ฏใฏๅธฏๅŸŸๅน…ใ‚’ไฝŽไธ‹ใ•ใ›ใพใ™ใ€‚',
156
+ 'GPUใƒ‰ใƒฉใ‚คใƒ๏ผˆNVIDIA, AMD, Intel๏ผ‰ใ‚’ๆ›ดๆ–ฐใ—ใฆใใ ใ•ใ„ใ€‚',
157
+ 'OSใฎใƒ‡ใ‚ฃใ‚นใƒ—ใƒฌใ‚ค่จญๅฎšใ‚’็ขบ่ชใ—ใ€้ซ˜ใƒชใƒ•ใƒฌใƒƒใ‚ทใƒฅใƒฌใƒผใƒˆใŒๆœ‰ๅŠนใซใชใฃใฆใ„ใ‚‹ใ‹็ขบ่ชใ—ใฆใใ ใ•ใ„ใ€‚',
158
+ 'ๅˆฅใฎใ‚ฑใƒผใƒ–ใƒซใ‚„ใƒขใƒ‹ใ‚ฟใƒผใฎใƒใƒผใƒˆใ‚’่ฉฆใ—ใฆใใ ใ•ใ„ใ€‚',
159
+ 'ใ‚ณใƒณใƒ”ใƒฅใƒผใ‚ฟใ‚’ๅ†่ตทๅ‹•ใ—ใฆๅ†ใƒ†ใ‚นใƒˆใ—ใฆใใ ใ•ใ„ใ€‚',
160
+ ],
161
+ },
162
+ {
163
+ type: 'title',
164
+ text: 'ใ“ใฎๆธฌๅฎšๅ™จใฎไป•็ต„ใฟ',
165
+ level: 3,
166
+ },
167
+ {
168
+ type: 'paragraph',
169
+ html: 'ใ“ใฎใƒ„ใƒผใƒซใฏใƒ–ใƒฉใ‚ฆใ‚ถใฎrequestAnimationFrame APIใ‚’ไฝฟ็”จใ—ใฆใŠใ‚Šใ€ใƒขใƒ‹ใ‚ฟใƒผใฎๆ›ดๆ–ฐใ‚ตใ‚คใ‚ฏใƒซใจ็›ดๆŽฅๅŒๆœŸใ—ใพใ™ใ€‚ใ‚ขใƒ‹ใƒกใƒผใ‚ทใƒงใƒณใƒ•ใƒฌใƒผใƒ ้–“ใฎๆ™‚้–“ใ‚’ๆธฌๅฎšใ™ใ‚‹ใ“ใจใงใ€็‰นๅˆฅใชใƒใƒผใƒ‰ใ‚ฆใ‚งใ‚ขใ‚’ๅฟ…่ฆใจใ›ใšใซๆญฃ็ขบใชใƒชใƒ•ใƒฌใƒƒใ‚ทใƒฅใƒฌใƒผใƒˆใ‚’้ซ˜็ฒพๅบฆใง็ฎ—ๅ‡บใ—ใพใ™ใ€‚',
170
+ },
171
+ ],
172
+ ui: {
173
+ badge: 'ใƒ‡ใ‚ฃใ‚นใƒ—ใƒฌใ‚คใƒ†ใ‚นใƒˆ',
174
+ title: 'ใƒขใƒ‹ใ‚ฟใƒผใƒชใƒ•ใƒฌใƒƒใ‚ทใƒฅใƒฌใƒผใƒˆๆธฌๅฎš',
175
+ description: 'ใƒ‡ใ‚ฃใ‚นใƒ—ใƒฌใ‚คใฎใƒชใƒ•ใƒฌใƒƒใ‚ทใƒฅใƒฌใƒผใƒˆใ‚’็žฌๆ™‚ใซๆธฌๅฎš',
176
+ modeStable: 'ๅฎ‰ๅฎš๏ผˆ10็ง’ใ€้ซ˜็ฒพๅบฆ๏ผ‰',
177
+ modeFast: '้ซ˜้€Ÿ๏ผˆ3็ง’ใ€ใ‚ฏใ‚คใƒƒใ‚ฏ๏ผ‰',
178
+ measurementStatus: 'ๆธฌๅฎšไธญ...',
179
+ currentHz: '็พๅœจๅ€ค',
180
+ averageHz: 'ๅนณๅ‡ๅ€ค',
181
+ maxHz: 'ๆœ€ๅคงๅ€ค',
182
+ minHz: 'ๆœ€ๅฐๅ€ค',
183
+ standardDetected: 'ๆคœๅ‡บใ•ใ‚ŒใŸๆจ™ๆบ–',
184
+ frameSkippingTest: 'ใƒ•ใƒฌใƒผใƒ ใ‚นใ‚ญใƒƒใƒ—ใƒ†ใ‚นใƒˆ',
185
+ startMeasurement: 'ๆธฌๅฎš้–‹ๅง‹',
186
+ resetMeasurement: 'ใƒชใ‚ปใƒƒใƒˆ',
187
+ copyResult: '็ตๆžœใ‚’ใ‚ณใƒ”ใƒผ',
188
+ copiedFeedback: 'ใ‚ฏใƒชใƒƒใƒ—ใƒœใƒผใƒ‰ใซใ‚ณใƒ”ใƒผใ—ใพใ—ใŸ๏ผ',
189
+ optimalConfiguration: '[OK] ๆœ€้ฉใช่จญๅฎš',
190
+ suboptimalConfiguration: '[่ญฆๅ‘Š] ๆœ€้ฉๅ€คๆœชๆบ€',
191
+ unstableRefreshRate: '[่ญฆๅ‘Š] ไธๅฎ‰ๅฎšใชใƒชใƒ•ใƒฌใƒƒใ‚ทใƒฅใƒฌใƒผใƒˆ',
192
+ measurementNotStarted: 'ๆธฌๅฎšๆบ–ๅ‚™ๅฎŒไบ†',
193
+ switchMonitorHint: 'ใ‚ฆใ‚ฃใƒณใƒ‰ใ‚ฆใ‚’ๅˆฅใฎใƒขใƒ‹ใ‚ฟใƒผใซ็งปๅ‹•ใ—ใฆใƒ†ใ‚นใƒˆใงใใพใ™',
194
+ incompatibleBrowserMsg: 'ใŠไฝฟใ„ใฎใƒ–ใƒฉใ‚ฆใ‚ถใฏrequestAnimationFrameใ‚’ใ‚ตใƒใƒผใƒˆใ—ใฆใ„ใพใ›ใ‚“',
195
+ },
196
+ };
@@ -0,0 +1,196 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { RefreshRateDetectorUI } from '../ui';
4
+ import { bibliography } from '../bibliography';
5
+
6
+ const slug = 'monitor-refresh-rate-detector';
7
+ const title = '๋ชจ๋‹ˆํ„ฐ ์ฃผ์‚ฌ์œจ ์ธก์ •๊ธฐ';
8
+ const description = 'requestAnimationFrame์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋‹ˆํ„ฐ์˜ ์ฃผ์‚ฌ์œจ์„ ์ฆ‰์‹œ ์ •ํ™•ํ•˜๊ฒŒ ๊ฐ์ง€ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋ ˆ์ž„ ์•ˆ์ •์„ฑ์„ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์—…๊ณ„ ํ‘œ์ค€๊ณผ ๋น„๊ตํ•ด ๋ณด์„ธ์š”.';
9
+
10
+ const faqData = [
11
+ {
12
+ question: '์ฃผ์‚ฌ์œจ(Hz)์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?',
13
+ answer: '์ฃผ์‚ฌ์œจ์€ ๋ชจ๋‹ˆํ„ฐ๊ฐ€ ์ดˆ๋‹น ํ™”๋ฉด์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ํšŸ์ˆ˜๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. 60Hz ๋ชจ๋‹ˆํ„ฐ๋Š” ์ดˆ๋‹น 60ํšŒ, 144Hz ๋ชจ๋‹ˆํ„ฐ๋Š” 144ํšŒ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค. ์ฃผ์‚ฌ์œจ์ด ๋†’์„์ˆ˜๋ก ์›€์ง์ž„์ด ๋” ๋ถ€๋“œ๋Ÿฌ์›Œ์ง‘๋‹ˆ๋‹ค.',
14
+ },
15
+ {
16
+ question: '์ด ์ธก์ •๊ธฐ๋Š” ์–ผ๋งˆ๋‚˜ ์ •ํ™•ํ•œ๊ฐ€์š”?',
17
+ answer: '์ด ๋„๊ตฌ๋Š” ๋ชจ๋‹ˆํ„ฐ์˜ ์žฌ์ƒ ์ฃผ๊ธฐ์™€ ๋™๊ธฐํ™”๋˜๋Š” requestAnimationFrame์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ •ํ™•๋„๋Š” ์‹œ์Šคํ…œ ๋ถ€ํ•˜์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•ˆ์ • ๋ชจ๋“œ๋Š” ๋” ๊ธด ์‹œ๊ฐ„ ๋™์•ˆ ์ธก์ •ํ•˜์—ฌ ์ •๋ฐ€๋„๋ฅผ ๋†’์ž…๋‹ˆ๋‹ค.',
18
+ },
19
+ {
20
+ question: '์•ˆ์ • ๋ชจ๋“œ์™€ ๋น ๋ฅธ ๋ชจ๋“œ์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?',
21
+ answer: '๋น ๋ฅธ ๋ชจ๋“œ๋Š” ์งง์€ ์‹œ๊ฐ„(~3์ดˆ) ๋™์•ˆ ์ธก์ •ํ•˜์—ฌ ๋น ๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์•ˆ์ • ๋ชจ๋“œ๋Š” ๋” ๊ธด ์‹œ๊ฐ„(~10์ดˆ) ๋™์•ˆ ์ธก์ •ํ•˜์—ฌ ์‹œ์Šคํ…œ ๋…ธ์ด์ฆˆ๋ฅผ ๊ฑธ๋Ÿฌ๋‚ด๊ณ  ๋” ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.',
22
+ },
23
+ {
24
+ question: '๊ฐ์ง€๋œ ์ฃผ์‚ฌ์œจ์ด ๋ชจ๋‹ˆํ„ฐ ์‚ฌ์–‘๊ณผ ๋‹ค๋ฅธ ์ด์œ ๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?',
25
+ answer: '์ผ€์ด๋ธ” ์—ฐ๊ฒฐ ๋ถˆ๋Ÿ‰, ์˜ค๋ž˜๋œ ๋“œ๋ผ์ด๋ฒ„, ๋˜๋Š” OS์˜ ๋ฐฐ์œจ ์„ค์ • ๊ฐ„์„ญ ๋“ฑ์ด ์›์ธ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋””์Šคํ”Œ๋ ˆ์ด ์ผ€์ด๋ธ”์„ ๋‹ค์‹œ ์—ฐ๊ฒฐํ•˜๊ฑฐ๋‚˜ GPU ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์—…๋ฐ์ดํŠธํ•ด ๋ณด์„ธ์š”.',
26
+ },
27
+ {
28
+ question: '์ตœ์‹  ๋ชจ๋‹ˆํ„ฐ๋Š” ์–ด๋–ค ์ฃผ์‚ฌ์œจ์„ ์ง€์›ํ•˜๋‚˜์š”?',
29
+ answer: '์ผ๋ฐ˜์ ์ธ ํ‘œ์ค€์€ 60Hz(๊ธฐ๋ณธ), 75Hz, 120Hz, 144Hz(๊ฒŒ์ด๋ฐ), 240Hz(๊ณ ์„ฑ๋Šฅ ๊ฒŒ์ด๋ฐ), 360Hz(์ „๋ฌธ e์Šคํฌ์ธ ) ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.',
30
+ },
31
+ ];
32
+
33
+ const howToData = [
34
+ {
35
+ name: '๋„๊ตฌ ์‹คํ–‰',
36
+ text: '์ด ํŽ˜์ด์ง€๋ฅผ ์—ด๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ธก์ •๊ธฐ๊ฐ€ ์ฆ‰์‹œ ์ธก์ •์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.',
37
+ },
38
+ {
39
+ name: '์•ˆ์ •ํ™” ๋Œ€๊ธฐ',
40
+ text: '์•ˆ์ • ๋˜๋Š” ๋น ๋ฅธ ๋ชจ๋“œ๋ฅผ ์„ ํƒํ•˜์„ธ์š”. ์ฐฝ์„ ์˜ฎ๊ธฐ์ง€ ๋ง๊ณ  ์ธก์ •์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ์„ธ์š”.',
41
+ },
42
+ {
43
+ name: '๊ณ„๊ธฐํŒ ํ™•์ธ',
44
+ text: '๋ชจ๋‹ˆํ„ฐ์˜ ์ฃผ์‚ฌ์œจ์ด ๋ถ€๋“œ๋Ÿฌ์šด ๋‹ค์ด์–ผ๊ณผ ๋ฒค์น˜๋งˆํฌ ํ†ต๊ณ„(์ตœ์†Œ/์ตœ๋Œ€/ํ‰๊ท )์™€ ํ•จ๊ป˜ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.',
45
+ },
46
+ {
47
+ name: 'ํ‘œ์ค€๊ณผ ๋น„๊ต',
48
+ text: '๋‚ด ๋ชจ๋‹ˆํ„ฐ๊ฐ€ ์–ด๋–ค ํ‘œ์ค€(60, 75, 120, 144, 240, 360Hz)์— ํ•ด๋‹นํ•˜๋Š”์ง€ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.',
49
+ },
50
+ {
51
+ name: '์„ ํƒ ์‚ฌํ•ญ: ํ”„๋ ˆ์ž„ ์Šคํ‚ต ํ…Œ์ŠคํŠธ',
52
+ text: 'ํ™”๋ฉด์„ ๊ฐ€๋กœ์ง€๋ฅด๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜ ์‚ฌ๊ฐํ˜•์„ ๋ณด๋ฉฐ ์‹œ๊ฐ์ ์œผ๋กœ ๋ถ€๋“œ๋Ÿฌ์›€์„ ํ™•์ธํ•˜์„ธ์š”.',
53
+ },
54
+ ];
55
+
56
+ const faqSchema: WithContext<FAQPage> = {
57
+ '@context': 'https://schema.org',
58
+ '@type': 'FAQPage',
59
+ mainEntity: faqData.map((item) => ({
60
+ '@type': 'Question',
61
+ name: item.question,
62
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
63
+ })),
64
+ };
65
+
66
+ const howToSchema: WithContext<HowTo> = {
67
+ '@context': 'https://schema.org',
68
+ '@type': 'HowTo',
69
+ name: title,
70
+ description,
71
+ step: howToData.map((step, i) => ({
72
+ '@type': 'HowToStep',
73
+ position: i + 1,
74
+ name: step.name,
75
+ text: step.text,
76
+ })),
77
+ };
78
+
79
+ const appSchema: WithContext<SoftwareApplication> = {
80
+ '@context': 'https://schema.org',
81
+ '@type': 'SoftwareApplication',
82
+ name: title,
83
+ description,
84
+ applicationCategory: 'UtilityApplication',
85
+ operatingSystem: 'All',
86
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD' },
87
+ inLanguage: 'ko',
88
+ };
89
+
90
+ export const content: ToolLocaleContent<RefreshRateDetectorUI> = {
91
+ slug,
92
+ title,
93
+ description,
94
+ faq: faqData,
95
+ bibliography,
96
+ howTo: howToData,
97
+ schemas: [faqSchema, howToSchema, appSchema],
98
+ seo: [
99
+ {
100
+ type: 'title',
101
+ text: '๋ชจ๋‹ˆํ„ฐ ์ฃผ์‚ฌ์œจ ์ธก์ •๊ธฐ: ์˜จ๋ผ์ธ ๋””์Šคํ”Œ๋ ˆ์ด Hz ํ…Œ์ŠคํŠธ',
102
+ level: 2,
103
+ },
104
+ {
105
+ type: 'paragraph',
106
+ html: '๋ชจ๋‹ˆํ„ฐ์˜ ์ฃผ์‚ฌ์œจ(60Hz, 144Hz, 240Hz ๋“ฑ)์„ ์ฆ‰์‹œ ์ •๋ฐ€ํ•˜๊ฒŒ ๊ฐ์ง€ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋ ˆ์ž„ ์•ˆ์ •์„ฑ์„ ํ…Œ์ŠคํŠธํ•˜๊ณ  ๋””์Šคํ”Œ๋ ˆ์ด๊ฐ€ ์ •๊ฒฉ ์‚ฌ์–‘๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.',
107
+ },
108
+ {
109
+ type: 'title',
110
+ text: '๋ชจ๋‹ˆํ„ฐ ์ฃผ์‚ฌ์œจ์ด ์ค‘์š”ํ•œ ์ด์œ ',
111
+ level: 3,
112
+ },
113
+ {
114
+ type: 'paragraph',
115
+ html: '์ฃผ์‚ฌ์œจ์€ ํ™”๋ฉด์˜ ์›€์ง์ž„์ด ์–ผ๋งˆ๋‚˜ ๋ถ€๋“œ๋Ÿฝ๊ฒŒ ๋ณด์ด๋Š”์ง€๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ฒŒ์ด๋จธ๋Š” 144Hz ์ด์ƒ์˜ ๋ชจ๋‹ˆํ„ฐ์—์„œ ํฐ ํ˜œํƒ์„ ๋ณด๋ฉฐ, ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๋Š” 60Hz๋กœ๋„ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋„๊ตฌ๋Š” ๋ชจ๋‹ˆํ„ฐ๊ฐ€ ์‹ค์ œ๋กœ ๊ด‘๊ณ ๋œ ์ฃผ์‚ฌ์œจ์„ ์ œ๊ณตํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.',
116
+ },
117
+ {
118
+ type: 'title',
119
+ text: '์ฃผ์‚ฌ์œจ ๊ฐ์ง€ ๋ฐฉ๋ฒ•',
120
+ level: 3,
121
+ },
122
+ {
123
+ type: 'list',
124
+ items: [
125
+ '์ด ์ธก์ •๊ธฐ๋ฅผ ๋กœ๋“œํ•˜๋ฉด ์ฆ‰์‹œ ์ธก์ •์ด ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค',
126
+ '๋น ๋ฅธ(3์ดˆ) ๋˜๋Š” ์•ˆ์ •(10์ดˆ) ์ธก์ • ๋ชจ๋“œ ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•˜์„ธ์š”',
127
+ '๊ณ„๊ธฐํŒ ๋‹ค์ด์–ผ์—์„œ ๋ชจ๋‹ˆํ„ฐ์˜ ์ฃผ์‚ฌ์œจ์„ ํ™•์ธํ•˜์„ธ์š”',
128
+ '์—…๊ณ„ ํ‘œ์ค€(60, 75, 120, 144, 240, 360Hz)๊ณผ ๋น„๊ตํ•ด ๋ณด์„ธ์š”',
129
+ ],
130
+ },
131
+ {
132
+ type: 'title',
133
+ text: '์ผ๋ฐ˜์ ์ธ ์ฃผ์‚ฌ์œจ ํ‘œ์ค€',
134
+ level: 3,
135
+ },
136
+ {
137
+ type: 'table',
138
+ headers: ['ํ‘œ์ค€', '์šฉ๋„', '์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ์ž'],
139
+ rows: [
140
+ ['60Hz', '์ผ๋ฐ˜ ์ปดํ“จํ„ฐ ์‚ฌ์šฉ', '์‚ฌ๋ฌด์šฉ, ์›น ์„œํ•‘'],
141
+ ['75Hz', '๊ฐ€๋ฒผ์šด ๊ฒŒ์ด๋ฐ', '์บ์ฃผ์–ผ ๊ฒŒ์ด๋จธ'],
142
+ ['120Hz', '๋ฉ€ํ‹ฐ๋ฏธ๋””์–ด', '์ฝ˜์†”, ์ŠคํŠธ๋ฆฌ๋ฐ'],
143
+ ['144Hz', '์ „๋ฌธ ๊ฒŒ์ด๋ฐ', 'FPS, ๋น ๋ฅธ ํ™”๋ฉด ์ „ํ™˜ ๊ฒŒ์ž„'],
144
+ ['240Hz+', 'ํ”„๋กœ e์Šคํฌ์ธ ', 'ํ”„๋กœ ๊ฒŒ์ด๋จธ, ์ŠคํŠธ๋ฆฌ๋จธ'],
145
+ ],
146
+ },
147
+ {
148
+ type: 'title',
149
+ text: '๋ฌธ์ œ ํ•ด๊ฒฐ: ์ฃผ์‚ฌ์œจ์ด ์˜ˆ์ƒ๋ณด๋‹ค ๋‚ฎ๊ฒŒ ํ‘œ์‹œ๋  ๋•Œ',
150
+ level: 3,
151
+ },
152
+ {
153
+ type: 'list',
154
+ items: [
155
+ 'HDMI/DisplayPort ์ผ€์ด๋ธ” ์—ฐ๊ฒฐ์„ ํ™•์ธํ•˜์„ธ์š”. ์—ฐ๊ฒฐ์ด ํ—๊ฑฐ์šฐ๋ฉด ๋Œ€์—ญํญ์ด ์ค„์–ด๋“ญ๋‹ˆ๋‹ค.',
156
+ 'GPU ๋“œ๋ผ์ด๋ฒ„(NVIDIA, AMD, Intel)๋ฅผ ์—…๋ฐ์ดํŠธํ•˜์„ธ์š”.',
157
+ 'OS ๋””์Šคํ”Œ๋ ˆ์ด ์„ค์ •์—์„œ ๋†’์€ ์ฃผ์‚ฌ์œจ์ด ํ™œ์„ฑํ™”๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.',
158
+ '๋‹ค๋ฅธ ์ผ€์ด๋ธ”์ด๋‚˜ ๋ชจ๋‹ˆํ„ฐ ํฌํŠธ๋ฅผ ์‹œ๋„ํ•ด ๋ณด์„ธ์š”.',
159
+ '์ปดํ“จํ„ฐ๋ฅผ ์žฌ๋ถ€ํŒ…ํ•œ ํ›„ ๋‹ค์‹œ ํ…Œ์ŠคํŠธํ•ด ๋ณด์„ธ์š”.',
160
+ ],
161
+ },
162
+ {
163
+ type: 'title',
164
+ text: '์ด ์ธก์ •๊ธฐ์— ์ ์šฉ๋œ ๊ธฐ์ˆ ',
165
+ level: 3,
166
+ },
167
+ {
168
+ type: 'paragraph',
169
+ html: '์ด ๋„๊ตฌ๋Š” ๋ชจ๋‹ˆํ„ฐ์˜ ์žฌ์ƒ ์ฃผ๊ธฐ์™€ ์ง์ ‘ ๋™๊ธฐํ™”๋˜๋Š” ๋ธŒ๋ผ์šฐ์ €์˜ requestAnimationFrame API๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์• ๋‹ˆ๋ฉ”์ด์…˜ ํ”„๋ ˆ์ž„ ๊ฐ„์˜ ์‹œ๊ฐ„์„ ์ธก์ •ํ•˜์—ฌ ๋ณ„๋„์˜ ํ•˜๋“œ์›จ์–ด ์—†์ด๋„ ์ •ํ™•ํ•œ ์ฃผ์‚ฌ์œจ์„ ๋†’์€ ์ •๋ฐ€๋„๋กœ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.',
170
+ },
171
+ ],
172
+ ui: {
173
+ badge: '๋””์Šคํ”Œ๋ ˆ์ด ํ…Œ์ŠคํŠธ',
174
+ title: '๋ชจ๋‹ˆํ„ฐ ์ฃผ์‚ฌ์œจ ์ธก์ •',
175
+ description: '๋””์Šคํ”Œ๋ ˆ์ด ์ฃผ์‚ฌ์œจ์„ ์ฆ‰์‹œ ๊ฐ์ง€ํ•˜์„ธ์š”',
176
+ modeStable: '์•ˆ์ •(10์ดˆ, ์ •๋ฐ€)',
177
+ modeFast: '๋น ๋ฅธ(3์ดˆ, ํ€ต)',
178
+ measurementStatus: '์ธก์ • ์ค‘...',
179
+ currentHz: 'ํ˜„์žฌ',
180
+ averageHz: 'ํ‰๊ท ',
181
+ maxHz: '์ตœ๋Œ€',
182
+ minHz: '์ตœ์†Œ',
183
+ standardDetected: '๊ฐ์ง€๋œ ํ‘œ์ค€',
184
+ frameSkippingTest: 'ํ”„๋ ˆ์ž„ ์Šคํ‚ต ํ…Œ์ŠคํŠธ',
185
+ startMeasurement: '์ธก์ • ์‹œ์ž‘',
186
+ resetMeasurement: '์ดˆ๊ธฐํ™”',
187
+ copyResult: '๊ฒฐ๊ณผ ๋ณต์‚ฌ',
188
+ copiedFeedback: 'ํด๋ฆฝ๋ณด๋“œ์— ๋ณต์‚ฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!',
189
+ optimalConfiguration: '[OK] ์ตœ์ ์˜ ๊ตฌ์„ฑ',
190
+ suboptimalConfiguration: '[๊ฒฝ๊ณ ] ์ตœ์  ์‚ฌ์–‘ ๋ฏธ๋‹ฌ',
191
+ unstableRefreshRate: '[๊ฒฝ๊ณ ] ๋ถˆ์•ˆ์ •ํ•œ ์ฃผ์‚ฌ์œจ',
192
+ measurementNotStarted: '์ธก์ • ์ค€๋น„ ์™„๋ฃŒ',
193
+ switchMonitorHint: '์ฐฝ์„ ๋‹ค๋ฅธ ๋ชจ๋‹ˆํ„ฐ๋กœ ๋“œ๋ž˜๊ทธํ•˜์—ฌ ํ…Œ์ŠคํŠธํ•ด ๋ณด์„ธ์š”',
194
+ incompatibleBrowserMsg: '๋ธŒ๋ผ์šฐ์ €๊ฐ€ requestAnimationFrame์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค',
195
+ },
196
+ };