@jjlmoya/utils-hardware 1.3.0 → 1.6.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.
- package/package.json +2 -1
- package/src/category/i18n/de.ts +106 -0
- package/src/category/i18n/id.ts +106 -0
- package/src/category/i18n/it.ts +106 -0
- package/src/category/i18n/ja.ts +106 -0
- package/src/category/i18n/ko.ts +106 -0
- package/src/category/i18n/nl.ts +106 -0
- package/src/category/i18n/pl.ts +106 -0
- package/src/category/i18n/pt.ts +106 -0
- package/src/category/i18n/ru.ts +106 -0
- package/src/category/i18n/sv.ts +106 -0
- package/src/category/i18n/tr.ts +106 -0
- package/src/category/i18n/zh.ts +106 -0
- package/src/category/index.ts +13 -1
- package/src/tests/category_validation.test.ts +73 -0
- package/src/tests/faq_count.test.ts +1 -1
- package/src/tests/i18n_coverage.test.ts +36 -0
- package/src/tests/locale_completeness.test.ts +1 -1
- package/src/tests/slug_language_code_format.test.ts +23 -0
- package/src/tests/slug_uniqueness.test.ts +81 -0
- package/src/tests/title_quality.test.ts +1 -1
- package/src/tool/batteryHealthEstimator/i18n/de.ts +158 -0
- package/src/tool/batteryHealthEstimator/i18n/id.ts +158 -0
- package/src/tool/batteryHealthEstimator/i18n/it.ts +158 -0
- package/src/tool/batteryHealthEstimator/i18n/ja.ts +158 -0
- package/src/tool/batteryHealthEstimator/i18n/ko.ts +158 -0
- package/src/tool/batteryHealthEstimator/i18n/nl.ts +158 -0
- package/src/tool/batteryHealthEstimator/i18n/pl.ts +158 -0
- package/src/tool/batteryHealthEstimator/i18n/pt.ts +158 -0
- package/src/tool/batteryHealthEstimator/i18n/ru.ts +158 -0
- package/src/tool/batteryHealthEstimator/i18n/sv.ts +158 -0
- package/src/tool/batteryHealthEstimator/i18n/tr.ts +158 -0
- package/src/tool/batteryHealthEstimator/i18n/zh.ts +158 -0
- package/src/tool/batteryHealthEstimator/index.ts +15 -7
- package/src/tool/deadPixelTest/i18n/de.ts +218 -0
- package/src/tool/deadPixelTest/i18n/id.ts +218 -0
- package/src/tool/deadPixelTest/i18n/it.ts +218 -0
- package/src/tool/deadPixelTest/i18n/ja.ts +218 -0
- package/src/tool/deadPixelTest/i18n/ko.ts +218 -0
- package/src/tool/deadPixelTest/i18n/nl.ts +218 -0
- package/src/tool/deadPixelTest/i18n/pl.ts +218 -0
- package/src/tool/deadPixelTest/i18n/pt.ts +218 -0
- package/src/tool/deadPixelTest/i18n/ru.ts +218 -0
- package/src/tool/deadPixelTest/i18n/sv.ts +218 -0
- package/src/tool/deadPixelTest/i18n/tr.ts +218 -0
- package/src/tool/deadPixelTest/i18n/zh.ts +217 -0
- package/src/tool/deadPixelTest/index.ts +15 -7
- package/src/tool/gamepadTest/i18n/de.ts +186 -0
- package/src/tool/gamepadTest/i18n/id.ts +186 -0
- package/src/tool/gamepadTest/i18n/it.ts +186 -0
- package/src/tool/gamepadTest/i18n/ja.ts +186 -0
- package/src/tool/gamepadTest/i18n/ko.ts +186 -0
- package/src/tool/gamepadTest/i18n/nl.ts +186 -0
- package/src/tool/gamepadTest/i18n/pl.ts +186 -0
- package/src/tool/gamepadTest/i18n/pt.ts +186 -0
- package/src/tool/gamepadTest/i18n/ru.ts +186 -0
- package/src/tool/gamepadTest/i18n/sv.ts +186 -0
- package/src/tool/gamepadTest/i18n/tr.ts +186 -0
- package/src/tool/gamepadTest/i18n/zh.ts +186 -0
- package/src/tool/gamepadTest/index.ts +15 -7
- package/src/tool/gamepadVibrationTester/i18n/de.ts +155 -0
- package/src/tool/gamepadVibrationTester/i18n/id.ts +155 -0
- package/src/tool/gamepadVibrationTester/i18n/it.ts +155 -0
- package/src/tool/gamepadVibrationTester/i18n/ja.ts +155 -0
- package/src/tool/gamepadVibrationTester/i18n/ko.ts +155 -0
- package/src/tool/gamepadVibrationTester/i18n/nl.ts +155 -0
- package/src/tool/gamepadVibrationTester/i18n/pl.ts +155 -0
- package/src/tool/gamepadVibrationTester/i18n/pt.ts +155 -0
- package/src/tool/gamepadVibrationTester/i18n/ru.ts +155 -0
- package/src/tool/gamepadVibrationTester/i18n/sv.ts +155 -0
- package/src/tool/gamepadVibrationTester/i18n/tr.ts +155 -0
- package/src/tool/gamepadVibrationTester/i18n/zh.ts +155 -0
- package/src/tool/gamepadVibrationTester/index.ts +15 -7
- package/src/tool/keyboardTest/i18n/de.ts +146 -0
- package/src/tool/keyboardTest/i18n/id.ts +146 -0
- package/src/tool/keyboardTest/i18n/it.ts +146 -0
- package/src/tool/keyboardTest/i18n/ja.ts +146 -0
- package/src/tool/keyboardTest/i18n/ko.ts +146 -0
- package/src/tool/keyboardTest/i18n/nl.ts +146 -0
- package/src/tool/keyboardTest/i18n/pl.ts +146 -0
- package/src/tool/keyboardTest/i18n/pt.ts +146 -0
- package/src/tool/keyboardTest/i18n/ru.ts +146 -0
- package/src/tool/keyboardTest/i18n/sv.ts +146 -0
- package/src/tool/keyboardTest/i18n/tr.ts +146 -0
- package/src/tool/keyboardTest/i18n/zh.ts +146 -0
- package/src/tool/keyboardTest/index.ts +15 -7
- package/src/tool/mousePollingTest/i18n/de.ts +135 -0
- package/src/tool/mousePollingTest/i18n/id.ts +135 -0
- package/src/tool/mousePollingTest/i18n/it.ts +135 -0
- package/src/tool/mousePollingTest/i18n/ja.ts +135 -0
- package/src/tool/mousePollingTest/i18n/ko.ts +135 -0
- package/src/tool/mousePollingTest/i18n/nl.ts +135 -0
- package/src/tool/mousePollingTest/i18n/pl.ts +135 -0
- package/src/tool/mousePollingTest/i18n/pt.ts +135 -0
- package/src/tool/mousePollingTest/i18n/ru.ts +135 -0
- package/src/tool/mousePollingTest/i18n/sv.ts +135 -0
- package/src/tool/mousePollingTest/i18n/tr.ts +135 -0
- package/src/tool/mousePollingTest/i18n/zh.ts +135 -0
- package/src/tool/mousePollingTest/index.ts +15 -7
- package/src/tool/toneGenerator/i18n/de.ts +146 -0
- package/src/tool/toneGenerator/i18n/id.ts +146 -0
- package/src/tool/toneGenerator/i18n/it.ts +146 -0
- package/src/tool/toneGenerator/i18n/ja.ts +146 -0
- package/src/tool/toneGenerator/i18n/ko.ts +146 -0
- package/src/tool/toneGenerator/i18n/nl.ts +146 -0
- package/src/tool/toneGenerator/i18n/pl.ts +146 -0
- package/src/tool/toneGenerator/i18n/pt.ts +146 -0
- package/src/tool/toneGenerator/i18n/ru.ts +146 -0
- package/src/tool/toneGenerator/i18n/sv.ts +146 -0
- package/src/tool/toneGenerator/i18n/tr.ts +146 -0
- package/src/tool/toneGenerator/i18n/zh.ts +146 -0
- package/src/tool/toneGenerator/index.ts +15 -7
- package/src/types.ts +1 -1
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { TestMandoUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const slug = 'gamepad-test';
|
|
6
|
+
const title = 'オンライン・ゲームパッド&コントローラーテスト';
|
|
7
|
+
const description = 'Xbox、PlayStation、PCコントローラーをテストします。デッドゾーン、スティックのドリフト、ボタンの動作を可視化。';
|
|
8
|
+
|
|
9
|
+
const faqData = [
|
|
10
|
+
{
|
|
11
|
+
question: 'ジョイスティックのドリフト現象とは何ですか?',
|
|
12
|
+
answer: 'ドリフトとは、スティックに触れていないのにコントローラーが動きを感知してしまう現象です。内部のポテンショメータが摩耗し、一定方向に誤った電気信号を送ることで発生します。',
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
question: 'ソフトウェアでドリフトを修正することはできますか?',
|
|
16
|
+
answer: 'ドリフトが軽微な場合は、ゲーム設定で「デッドゾーン(遊び)」を大きく設定することで解消できます。これにより、中央付近の小さな微動を無視するようにします。',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
question: 'PS5、Xbox、Switchのコントローラーに対応していますか?',
|
|
20
|
+
answer: 'はい。当ツールは最新ブラウザの標準Gamepad APIを使用しており、DualSense、DualShock 4、Xboxコントローラーなど、USBまたはBluetoothで接続されたほぼすべてのコントローラーを検出します。',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
question: 'ブラウザがコントローラーを検出しません。',
|
|
24
|
+
answer: 'セキュリティ上の理由から、ブラウザは最初のボタン入力があるまでゲームパッドを有効にしません。表示されない場合は、いずれかのボタン(AやXなど)を押し、シークレットモードの設定を確認してください。',
|
|
25
|
+
},
|
|
26
|
+
];
|
|
27
|
+
|
|
28
|
+
const howToData = [
|
|
29
|
+
{
|
|
30
|
+
name: 'コントローラーを接続する',
|
|
31
|
+
text: 'USBで接続するか、Bluetoothでコンピュータとペアリングしてください。',
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
name: '検出を有効にする',
|
|
35
|
+
text: 'スティックを動かすか、いずれかのボタンを押してブラウザにデバイスを認識させます。',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: 'デッドゾーンをテストする',
|
|
39
|
+
text: 'スティックから手を離し、画面上の軸を確認します。数値が 0.0000 でない場合は、わずかなドリフトが発生しています。',
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
name: 'ボタンと振動を確認する',
|
|
43
|
+
text: '各ボタンとトリガーを押してください。視覚的なインジケータが点灯し、対応デバイスであれば振動機能もテストできます。',
|
|
44
|
+
},
|
|
45
|
+
];
|
|
46
|
+
|
|
47
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
48
|
+
'@context': 'https://schema.org',
|
|
49
|
+
'@type': 'FAQPage',
|
|
50
|
+
mainEntity: faqData.map((item) => ({
|
|
51
|
+
'@type': 'Question',
|
|
52
|
+
name: item.question,
|
|
53
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
54
|
+
})),
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
const howToSchema: WithContext<HowTo> = {
|
|
58
|
+
'@context': 'https://schema.org',
|
|
59
|
+
'@type': 'HowTo',
|
|
60
|
+
name: title,
|
|
61
|
+
description,
|
|
62
|
+
step: howToData.map((step, i) => ({
|
|
63
|
+
'@type': 'HowToStep',
|
|
64
|
+
position: i + 1,
|
|
65
|
+
name: step.name,
|
|
66
|
+
text: step.text,
|
|
67
|
+
})),
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
71
|
+
'@context': 'https://schema.org',
|
|
72
|
+
'@type': 'SoftwareApplication',
|
|
73
|
+
name: title,
|
|
74
|
+
description,
|
|
75
|
+
applicationCategory: 'UtilityApplication',
|
|
76
|
+
operatingSystem: 'All',
|
|
77
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
78
|
+
inLanguage: 'ja',
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
export const content: ToolLocaleContent<TestMandoUI> = {
|
|
82
|
+
slug,
|
|
83
|
+
title,
|
|
84
|
+
description,
|
|
85
|
+
faqTitle: 'よくある質問',
|
|
86
|
+
faq: faqData,
|
|
87
|
+
bibliographyTitle: '技術リファレンス',
|
|
88
|
+
bibliography: [
|
|
89
|
+
{
|
|
90
|
+
name: 'Gamepad API 標準 - W3C',
|
|
91
|
+
url: 'https://w3c.github.io/gamepad/',
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
name: 'Vibration API - MDN Web Docs',
|
|
95
|
+
url: 'https://developer.mozilla.org/en-US/docs/Web/API/Vibration_API',
|
|
96
|
+
},
|
|
97
|
+
],
|
|
98
|
+
howTo: howToData,
|
|
99
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
100
|
+
seo: [
|
|
101
|
+
{
|
|
102
|
+
type: 'title',
|
|
103
|
+
text: 'オンライン・ゲームパッドテスト:ドリフトとスティックの問題を検出',
|
|
104
|
+
level: 2,
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
type: 'paragraph',
|
|
108
|
+
html: 'Xbox、PlayStation、Switchなどのコントローラーを無料テスト。デッドゾーンの可視化、ドリフト検出、振動テスト。',
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
type: 'title',
|
|
112
|
+
text: 'ジョイスティックのドリフトとは',
|
|
113
|
+
level: 3,
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
type: 'paragraph',
|
|
117
|
+
html: 'ドリフトは、触れていないのにアナログスティックが動きを登録してしまう一般的な不具合です。内部のポテンショメータの摩耗が原因です。',
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
type: 'title',
|
|
121
|
+
text: '対応コントローラー',
|
|
122
|
+
level: 3,
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
type: 'paragraph',
|
|
126
|
+
html: 'Xbox One、Xbox Series X/S、PlayStation 4、PlayStation 5 (DualSense)、Nintendo Switch Pro、およびほぼすべての最新のUSB/Bluetoothゲームパッドに対応。',
|
|
127
|
+
},
|
|
128
|
+
],
|
|
129
|
+
ui: {
|
|
130
|
+
badge: '入力テスト',
|
|
131
|
+
title: 'ゲームパッド&コントローラーテスト',
|
|
132
|
+
description: 'コントローラーをテストして不具合を検出します。',
|
|
133
|
+
connectionMessage: 'USBまたはBluetoothデバイスを接続してください',
|
|
134
|
+
connectionStatus: '接続中',
|
|
135
|
+
axisLabel: 'スティック軸',
|
|
136
|
+
buttonsLabel: 'ボタン',
|
|
137
|
+
vibrationTitle: '振動テスト',
|
|
138
|
+
vibrationDescription: 'ブラウザのサポートと対応するゲームパッドが必要です。',
|
|
139
|
+
vibrationLow: '弱 (Rumble)',
|
|
140
|
+
vibrationHigh: '強 (Buzz)',
|
|
141
|
+
eventHistoryTitle: 'イベント履歴',
|
|
142
|
+
eventHistoryClear: 'クリア',
|
|
143
|
+
eventWaiting: 'イベントを待機中...',
|
|
144
|
+
gameStartBtn: 'チャレンジ開始',
|
|
145
|
+
gameControllerWarning: 'ゲームパッドを接続するか、キーボードを使用してください',
|
|
146
|
+
gameTimer: 'タイム',
|
|
147
|
+
gameScore: 'スコア',
|
|
148
|
+
gameInstruction: '連打しろ!',
|
|
149
|
+
gameCompleted: 'チャレンジ完了',
|
|
150
|
+
gameNewRecord: '新記録達成!',
|
|
151
|
+
gameRestartBtn: 'リトライ',
|
|
152
|
+
gameFeedback: '君はボタン連打のレジェンドだ',
|
|
153
|
+
gameIntroTitlePre: 'プロゲーマー級の',
|
|
154
|
+
gameIntroHighlight: '反射神経',
|
|
155
|
+
gameIntroTitlePost: '?',
|
|
156
|
+
gameIntroDescPre: 'コントローラーの遅延と君の反応速度をテスト。制限時間は',
|
|
157
|
+
gameIntroDescSeconds: '30秒',
|
|
158
|
+
gameIntroDescPost: '。すべてのボタンをマスターしよう。',
|
|
159
|
+
gameShareBtn: 'ランクをシェア',
|
|
160
|
+
gameLogConnected: '接続完了',
|
|
161
|
+
gameLogDisconnected: '切断されました',
|
|
162
|
+
gameLogCleared: 'ログをクリアしました...',
|
|
163
|
+
gameLogBtnPrefix: 'ボタン',
|
|
164
|
+
gameVibNotSupported: '振動機能はサポートされていません。',
|
|
165
|
+
gameVibLow: '弱',
|
|
166
|
+
gameVibHigh: '強',
|
|
167
|
+
gameMoveStick: 'スティックを動かせ',
|
|
168
|
+
gamePress: '押せ!',
|
|
169
|
+
rankLegendaryName: 'レジェンダリー',
|
|
170
|
+
rankLegendaryDesc: '君の指は音速を超えている。',
|
|
171
|
+
rankLegendaryFlavor: 'コントローラーが火を吹くぜ!',
|
|
172
|
+
rankProName: 'プロゲーマー',
|
|
173
|
+
rankProDesc: '鋼の反射神経と完璧に調整された操作性。',
|
|
174
|
+
rankProFlavor: 'コントローラーが火を吹くぜ!',
|
|
175
|
+
rankGamerName: 'ゲーマー',
|
|
176
|
+
rankGamerDesc: '悪くない。でも競技レベルにはもっと練習が必要だ。',
|
|
177
|
+
rankGamerFlavor: 'あと少しだった!',
|
|
178
|
+
rankNoobName: 'ヌーブ',
|
|
179
|
+
rankNoobDesc: '本当にコントローラーの電源入ってる?',
|
|
180
|
+
rankNoobFlavor: 'コントローラーの調子が悪かっただけだし!',
|
|
181
|
+
gameShareText: '僕の記録を抜けるかな?',
|
|
182
|
+
gameShareScorePrefix: 'スコア:',
|
|
183
|
+
gameShareScoreSuffix: 'ヒット',
|
|
184
|
+
gameShareTitle: 'オンライン・ゲームパッドテスト',
|
|
185
|
+
},
|
|
186
|
+
};
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { TestMandoUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const slug = 'gamepad-test';
|
|
6
|
+
const title = '온라인 게임패드 및 컨트롤러 테스트';
|
|
7
|
+
const description = 'Xbox, PlayStation 또는 PC 컨트롤러를 테스트하세요. 데드존, 조이스틱 드리프트 및 버튼 입력을 시각화합니다.';
|
|
8
|
+
|
|
9
|
+
const faqData = [
|
|
10
|
+
{
|
|
11
|
+
question: '조이스틱 드리프트(Drift) 현상이란 무엇인가요?',
|
|
12
|
+
answer: '드리프트는 조이스틱을 만지지 않았는데도 컨트롤러가 움직임을 감지하는 현상입니다. 내부 가변저항(potentiometer)의 마모로 인해 일정한 방향으로 잘못된 전기 신호를 보내면서 발생합니다.',
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
question: '소프트웨어로 드리프트를 해결할 수 있나요?',
|
|
16
|
+
answer: '드리프트가 미미한 경우 게임 설정에서 "데드존(Dead Zone)"을 더 크게 설정하여 해결할 수 있습니다. 이는 중앙부의 미세한 스틱 움직임을 무시하도록 합니다.',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
question: 'PS5, Xbox, Switch 컨트롤러와 호환되나요?',
|
|
20
|
+
answer: '네. 당사의 도구는 최신 브라우저의 표준 Gamepad API를 사용하여 DualSense, DualShock 4, Xbox 컨트롤러 등 USB 또는 블루투스로 연결된 거의 모든 컨트롤러를 감지합니다.',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
question: '브라우저가 컨트롤러를 감지하지 못합니다.',
|
|
24
|
+
answer: '보안상의 이유로 브라우저는 첫 번째 버튼 입력이 있을 때까지 게임패드를 활성화하지 않습니다. 표시되지 않는다면 아무 버튼(A 또는 X 등)이나 누르고 시크릿 모드 설정을 확인하세요.',
|
|
25
|
+
},
|
|
26
|
+
];
|
|
27
|
+
|
|
28
|
+
const howToData = [
|
|
29
|
+
{
|
|
30
|
+
name: '컨트롤러 연결',
|
|
31
|
+
text: '컨트롤러를 USB로 연결하거나 컴퓨터와 블루투스로 페어링하세요.',
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
name: '감지 활성화',
|
|
35
|
+
text: '브라우저가 장치를 인식할 수 있도록 조이스틱을 움직이거나 아무 버튼이나 누르세요.',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: '데드존 테스트',
|
|
39
|
+
text: '조이스틱을 놓고 화면의 축 값을 확인하세요. 값이 0.0000이 아니라면 미세한 드리프트가 있는 것입니다.',
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
name: '버튼 및 진동 확인',
|
|
43
|
+
text: '모든 버튼과 트리거를 눌러보세요. 시각적 표시등이 켜져야 하며, 지원되는 컨트롤러라면 진동 모터도 테스트할 수 있습니다.',
|
|
44
|
+
},
|
|
45
|
+
];
|
|
46
|
+
|
|
47
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
48
|
+
'@context': 'https://schema.org',
|
|
49
|
+
'@type': 'FAQPage',
|
|
50
|
+
mainEntity: faqData.map((item) => ({
|
|
51
|
+
'@type': 'Question',
|
|
52
|
+
name: item.question,
|
|
53
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
54
|
+
})),
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
const howToSchema: WithContext<HowTo> = {
|
|
58
|
+
'@context': 'https://schema.org',
|
|
59
|
+
'@type': 'HowTo',
|
|
60
|
+
name: title,
|
|
61
|
+
description,
|
|
62
|
+
step: howToData.map((step, i) => ({
|
|
63
|
+
'@type': 'HowToStep',
|
|
64
|
+
position: i + 1,
|
|
65
|
+
name: step.name,
|
|
66
|
+
text: step.text,
|
|
67
|
+
})),
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
71
|
+
'@context': 'https://schema.org',
|
|
72
|
+
'@type': 'SoftwareApplication',
|
|
73
|
+
name: title,
|
|
74
|
+
description,
|
|
75
|
+
applicationCategory: 'UtilityApplication',
|
|
76
|
+
operatingSystem: 'All',
|
|
77
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
78
|
+
inLanguage: 'ko',
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
export const content: ToolLocaleContent<TestMandoUI> = {
|
|
82
|
+
slug,
|
|
83
|
+
title,
|
|
84
|
+
description,
|
|
85
|
+
faqTitle: '자주 묻는 질문',
|
|
86
|
+
faq: faqData,
|
|
87
|
+
bibliographyTitle: '기술 참조',
|
|
88
|
+
bibliography: [
|
|
89
|
+
{
|
|
90
|
+
name: 'Gamepad API 표준 - W3C',
|
|
91
|
+
url: 'https://w3c.github.io/gamepad/',
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
name: 'Vibration API - MDN Web Docs',
|
|
95
|
+
url: 'https://developer.mozilla.org/en-US/docs/Web/API/Vibration_API',
|
|
96
|
+
},
|
|
97
|
+
],
|
|
98
|
+
howTo: howToData,
|
|
99
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
100
|
+
seo: [
|
|
101
|
+
{
|
|
102
|
+
type: 'title',
|
|
103
|
+
text: '온라인 게임패드 테스트: 드리프트 및 스틱 불량 감지',
|
|
104
|
+
level: 2,
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
type: 'paragraph',
|
|
108
|
+
html: 'Xbox, PlayStation, Switch 등 모든 컨트롤러 무료 테스트. 데드존 시각화, 드리프트 감지 및 진동 테스트 기능을 제공합니다.',
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
type: 'title',
|
|
112
|
+
text: '조이스틱 드리프트란 무엇인가',
|
|
113
|
+
level: 3,
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
type: 'paragraph',
|
|
117
|
+
html: '드리프트는 아날로그 스틱을 만지지 않아도 움직임이 입력되는 흔한 결함입니다. 내부 부품의 마모가 주된 원인입니다.',
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
type: 'title',
|
|
121
|
+
text: '컨트롤러 호환성',
|
|
122
|
+
level: 3,
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
type: 'paragraph',
|
|
126
|
+
html: 'Xbox One, Xbox Series X/S, PS4, PS5(DualSense), 닌텐도 스위치 프로콘 및 거의 모든 현대적 USB/블루투스 게임패드와 호환됩니다.',
|
|
127
|
+
},
|
|
128
|
+
],
|
|
129
|
+
ui: {
|
|
130
|
+
badge: '입력 테스트',
|
|
131
|
+
title: '게임패드 및 컨트롤러 테스트',
|
|
132
|
+
description: '컨트롤러를 테스트하고 결함을 찾아보세요.',
|
|
133
|
+
connectionMessage: 'USB 또는 블루투스 장치를 연결하세요',
|
|
134
|
+
connectionStatus: '연결됨',
|
|
135
|
+
axisLabel: '스틱 축',
|
|
136
|
+
buttonsLabel: '버튼',
|
|
137
|
+
vibrationTitle: '진동 테스트',
|
|
138
|
+
vibrationDescription: '브라우저 지원 및 호환 가능한 게임패드가 필요합니다.',
|
|
139
|
+
vibrationLow: '낮음 (Rumble)',
|
|
140
|
+
vibrationHigh: '높음 (Buzz)',
|
|
141
|
+
eventHistoryTitle: '이벤트 기록',
|
|
142
|
+
eventHistoryClear: '지우기',
|
|
143
|
+
eventWaiting: '이벤트를 기다리는 중...',
|
|
144
|
+
gameStartBtn: '챌린지 시작',
|
|
145
|
+
gameControllerWarning: '게임패드를 연결하거나 키보드를 사용하세요',
|
|
146
|
+
gameTimer: '타이머',
|
|
147
|
+
gameScore: '점수',
|
|
148
|
+
gameInstruction: '빨리 누르세요',
|
|
149
|
+
gameCompleted: '챌린지 완료',
|
|
150
|
+
gameNewRecord: '신기록 달성!',
|
|
151
|
+
gameRestartBtn: '다시 시도',
|
|
152
|
+
gameFeedback: '당신은 버튼의 전설입니다',
|
|
153
|
+
gameIntroTitlePre: '프로 게이머급 ',
|
|
154
|
+
gameIntroHighlight: '반사신경',
|
|
155
|
+
gameIntroTitlePost: '?',
|
|
156
|
+
gameIntroDescPre: '컨트롤러 로딩 지연과 반응 속도를 테스트합니다. ',
|
|
157
|
+
gameIntroDescSeconds: '30초',
|
|
158
|
+
gameIntroDescPost: ' 동안 버튼을 마스터하세요.',
|
|
159
|
+
gameShareBtn: '랭킹 공유',
|
|
160
|
+
gameLogConnected: '연결됨',
|
|
161
|
+
gameLogDisconnected: '연결 끊김',
|
|
162
|
+
gameLogCleared: '로그 삭제됨...',
|
|
163
|
+
gameLogBtnPrefix: '버튼',
|
|
164
|
+
gameVibNotSupported: '진동이 지원되지 않습니다.',
|
|
165
|
+
gameVibLow: '낮음',
|
|
166
|
+
gameVibHigh: '높음',
|
|
167
|
+
gameMoveStick: '스틱을 움직이세요',
|
|
168
|
+
gamePress: '누르기',
|
|
169
|
+
rankLegendaryName: '전설 (LEGENDARY)',
|
|
170
|
+
rankLegendaryDesc: '당신의 손가락은 음속으로 움직입니다.',
|
|
171
|
+
rankLegendaryFlavor: '컨트롤러가 날아다녀요!',
|
|
172
|
+
rankProName: '프로 (PRO GAMER)',
|
|
173
|
+
rankProDesc: '강철 같은 반사신경과 잘 보정된 컨트롤러를 가졌군요.',
|
|
174
|
+
rankProFlavor: '컨트롤러가 날아다녀요!',
|
|
175
|
+
rankGamerName: '게이머 (GAMER)',
|
|
176
|
+
rankGamerDesc: '나쁘지 않네요, 하지만 경쟁전을 위해서는 더 많은 연습이 필요합니다.',
|
|
177
|
+
rankGamerFlavor: '거의 다 왔어요!',
|
|
178
|
+
rankNoobName: '뉴비 (NOOB)',
|
|
179
|
+
rankNoobDesc: '컨트롤러 전원이 켜져 있는지 확인해 보셨나요?',
|
|
180
|
+
rankNoobFlavor: '컨트롤러 상태가 안 좋았을 뿐이에요!',
|
|
181
|
+
gameShareText: '저를 이길 수 있나요?',
|
|
182
|
+
gameShareScorePrefix: '제 점수는',
|
|
183
|
+
gameShareScoreSuffix: '점입니다',
|
|
184
|
+
gameShareTitle: '온라인 게임패드 테스트',
|
|
185
|
+
},
|
|
186
|
+
};
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { TestMandoUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const slug = 'gamepad-test-online';
|
|
6
|
+
const title = 'Online Gamepad & Controller Test';
|
|
7
|
+
const description = 'Test je Xbox, PlayStation of PC controller. Visualiseer dead zones, joystick drift en knoppen.';
|
|
8
|
+
|
|
9
|
+
const faqData = [
|
|
10
|
+
{
|
|
11
|
+
question: 'Wat is Joystick Drift?',
|
|
12
|
+
answer: 'Drift treedt op wanneer de controller beweging registreert zonder dat de joystick wordt aangeraakt. Het wordt veroorzaakt door slijtage aan de interne potentiometers, die een vals elektrisch signaal in een constante richting sturen.',
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
question: 'Hoe kan ik drift via software oplossen?',
|
|
16
|
+
answer: 'Als de drift mild is, kun je een grotere "Dead Zone" (Deadzone) configureren in je game-instellingen. Dit negeert kleine joystickbewegingen in het midden.',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
question: 'Is het compatibel met PS5, Xbox en Switch controllers?',
|
|
20
|
+
answer: 'Ja. Onze tool maakt gebruik van de standaard Gamepad API van moderne browsers, die vrijwel elke via USB of Bluetooth aangesloten controller detecteert, inclusief DualSense, DualShock 4 en Xbox-controllers.',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
question: 'Waarom detecteert de browser mijn controller niet?',
|
|
24
|
+
answer: 'Uit veiligheidsoverwegingen schakelen browsers de gamepad pas in na de eerste druk op een knop. Als deze niet verschijnt, druk dan op een willekeurige knop (zoals A of X) en zorg ervoor dat je niet in de strikte incognitomodus zit.',
|
|
25
|
+
},
|
|
26
|
+
];
|
|
27
|
+
|
|
28
|
+
const howToData = [
|
|
29
|
+
{
|
|
30
|
+
name: 'Sluit de controller aan',
|
|
31
|
+
text: 'Sluit je gamepad aan via USB of koppel deze via Bluetooth met je computer.',
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
name: 'Activeer detectie',
|
|
35
|
+
text: 'Beweeg de joysticks of druk op een willekeurige knop zodat de browser het aangesloten apparaat herkent.',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: 'Test dead zones',
|
|
39
|
+
text: 'Laat de joysticks los en observeer de assen op het scherm. Als de waarden niet op 0.0000 staan, heb je lichte drift.',
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
name: 'Controleer knoppen en vibratie',
|
|
43
|
+
text: 'Druk op elke knop en trigger. De visuele indicatoren moeten oplichten en als je controller dit ondersteunt, kun je de vibratiemotor testen.',
|
|
44
|
+
},
|
|
45
|
+
];
|
|
46
|
+
|
|
47
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
48
|
+
'@context': 'https://schema.org',
|
|
49
|
+
'@type': 'FAQPage',
|
|
50
|
+
mainEntity: faqData.map((item) => ({
|
|
51
|
+
'@type': 'Question',
|
|
52
|
+
name: item.question,
|
|
53
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
54
|
+
})),
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
const howToSchema: WithContext<HowTo> = {
|
|
58
|
+
'@context': 'https://schema.org',
|
|
59
|
+
'@type': 'HowTo',
|
|
60
|
+
name: title,
|
|
61
|
+
description,
|
|
62
|
+
step: howToData.map((step, i) => ({
|
|
63
|
+
'@type': 'HowToStep',
|
|
64
|
+
position: i + 1,
|
|
65
|
+
name: step.name,
|
|
66
|
+
text: step.text,
|
|
67
|
+
})),
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
71
|
+
'@context': 'https://schema.org',
|
|
72
|
+
'@type': 'SoftwareApplication',
|
|
73
|
+
name: title,
|
|
74
|
+
description,
|
|
75
|
+
applicationCategory: 'UtilityApplication',
|
|
76
|
+
operatingSystem: 'All',
|
|
77
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
78
|
+
inLanguage: 'nl',
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
export const content: ToolLocaleContent<TestMandoUI> = {
|
|
82
|
+
slug,
|
|
83
|
+
title,
|
|
84
|
+
description,
|
|
85
|
+
faqTitle: 'Veelgestelde Vragen',
|
|
86
|
+
faq: faqData,
|
|
87
|
+
bibliographyTitle: 'Technische Referenties',
|
|
88
|
+
bibliography: [
|
|
89
|
+
{
|
|
90
|
+
name: 'Gamepad API Standard - W3C',
|
|
91
|
+
url: 'https://w3c.github.io/gamepad/',
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
name: 'Vibration API - MDN Web Docs',
|
|
95
|
+
url: 'https://developer.mozilla.org/en-US/docs/Web/API/Vibration_API',
|
|
96
|
+
},
|
|
97
|
+
],
|
|
98
|
+
howTo: howToData,
|
|
99
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
100
|
+
seo: [
|
|
101
|
+
{
|
|
102
|
+
type: 'title',
|
|
103
|
+
text: 'Online Gamepad Test: Detecteer Drift en Joystick Problemen',
|
|
104
|
+
level: 2,
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
type: 'paragraph',
|
|
108
|
+
html: 'Gratis tool om Xbox, PlayStation, Switch en andere controllers te testen. Visualiseer dead zones, detecteer drift en test vibratie.',
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
type: 'title',
|
|
112
|
+
text: 'Wat is Joystick Drift',
|
|
113
|
+
level: 3,
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
type: 'paragraph',
|
|
117
|
+
html: 'Drift is een veelvoorkomend defect bij analoge joysticks waarbij de stick beweging registreert zonder te worden aangeraakt. Het wordt veroorzaakt door slijtage aan de interne potentiometers.',
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
type: 'title',
|
|
121
|
+
text: 'Controller Compatibiliteit',
|
|
122
|
+
level: 3,
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
type: 'paragraph',
|
|
126
|
+
html: 'Compatibel met Xbox One, Xbox Series X/S, PlayStation 4, PlayStation 5 (DualSense), Nintendo Switch Pro en vrijwel elke moderne USB of Bluetooth gamepad.',
|
|
127
|
+
},
|
|
128
|
+
],
|
|
129
|
+
ui: {
|
|
130
|
+
badge: 'Input Test',
|
|
131
|
+
title: 'Gamepad en Controller Test',
|
|
132
|
+
description: 'Test je controller en detecteer problemen.',
|
|
133
|
+
connectionMessage: 'Sluit je USB- of Bluetooth-apparaat aan',
|
|
134
|
+
connectionStatus: 'Verbonden',
|
|
135
|
+
axisLabel: 'Assen',
|
|
136
|
+
buttonsLabel: 'Knoppen',
|
|
137
|
+
vibrationTitle: 'Vibratie Test',
|
|
138
|
+
vibrationDescription: 'Vereist browserondersteuning en een compatibele gamepad.',
|
|
139
|
+
vibrationLow: 'Laag (Rumble)',
|
|
140
|
+
vibrationHigh: 'Hoog (Buzz)',
|
|
141
|
+
eventHistoryTitle: 'Gebeurtenisgeschiedenis',
|
|
142
|
+
eventHistoryClear: 'Wissen',
|
|
143
|
+
eventWaiting: 'Wachten op gebeurtenissen...',
|
|
144
|
+
gameStartBtn: 'START CHALLENGE',
|
|
145
|
+
gameControllerWarning: 'Sluit een gamepad aan of gebruik het toetsenbord',
|
|
146
|
+
gameTimer: 'Timer',
|
|
147
|
+
gameScore: 'Score',
|
|
148
|
+
gameInstruction: 'Snel drukken',
|
|
149
|
+
gameCompleted: 'Challenge voltooid',
|
|
150
|
+
gameNewRecord: 'NIEUW RECORD',
|
|
151
|
+
gameRestartBtn: 'Opnieuw proberen',
|
|
152
|
+
gameFeedback: 'Je bent een knoppen-legende',
|
|
153
|
+
gameIntroTitlePre: 'Pro Gamer ',
|
|
154
|
+
gameIntroHighlight: 'Reflexen',
|
|
155
|
+
gameIntroTitlePost: '?',
|
|
156
|
+
gameIntroDescPre: 'Test de latentie en reactiesnelheid van je controller. Je hebt ',
|
|
157
|
+
gameIntroDescSeconds: '30 seconden',
|
|
158
|
+
gameIntroDescPost: ' om de knoppen onder de knie te krijgen.',
|
|
159
|
+
gameShareBtn: 'DEEL RANK',
|
|
160
|
+
gameLogConnected: 'Verbonden',
|
|
161
|
+
gameLogDisconnected: 'Verbinding verbroken',
|
|
162
|
+
gameLogCleared: 'Log gewist...',
|
|
163
|
+
gameLogBtnPrefix: 'Knop',
|
|
164
|
+
gameVibNotSupported: 'Vibratie niet ondersteund.',
|
|
165
|
+
gameVibLow: 'Laag',
|
|
166
|
+
gameVibHigh: 'Hoog',
|
|
167
|
+
gameMoveStick: 'BEWEEG STICK',
|
|
168
|
+
gamePress: 'DRUKKEN',
|
|
169
|
+
rankLegendaryName: 'LEGENDARISCH',
|
|
170
|
+
rankLegendaryDesc: 'Je vingers bewegen met de snelheid van het geluid.',
|
|
171
|
+
rankLegendaryFlavor: 'Mijn controller vliegt!',
|
|
172
|
+
rankProName: 'PRO GAMER',
|
|
173
|
+
rankProDesc: 'Je hebt stalen reflexen en een goed gekalibreerde controller.',
|
|
174
|
+
rankProFlavor: 'Mijn controller vliegt!',
|
|
175
|
+
rankGamerName: 'GAMER',
|
|
176
|
+
rankGamerDesc: 'Niet slecht, maar je hebt meer oefening nodig voor competitief spel.',
|
|
177
|
+
rankGamerFlavor: 'Bijna gelukt!',
|
|
178
|
+
rankNoobName: 'NOOB',
|
|
179
|
+
rankNoobDesc: 'Weet je zeker dat de controller aan staat?',
|
|
180
|
+
rankNoobFlavor: 'De controller heeft het op me gemunt!',
|
|
181
|
+
gameShareText: 'Kun je mij verslaan?',
|
|
182
|
+
gameShareScorePrefix: 'Ik heb',
|
|
183
|
+
gameShareScoreSuffix: 'punten gehaald',
|
|
184
|
+
gameShareTitle: 'Online Gamepad Test',
|
|
185
|
+
},
|
|
186
|
+
};
|