@jjlmoya/utils-hardware 1.2.0 → 1.5.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/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_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/component.astro +1 -1
- 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/mousePollingTest/logic/RatonManager.ts +90 -51
- package/src/tool/mousePollingTest/logic/StatisticalFilter.ts +17 -25
- 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
- package/src/tool/mousePollingTest/worker/mouseWorker.ts +0 -50
|
@@ -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: '什么是摇杆漂移 (Joystick Drift)?',
|
|
12
|
+
answer: '漂移是指在没有触摸摇杆的情况下,控制器自行注册移动。这是由于内部电位计磨损引起的,导致其向恒定方向发送错误的电信号。',
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
question: '我可以通过软件修复漂移吗?',
|
|
16
|
+
answer: '如果漂移较轻,您可以在游戏设置中配置更大的“死区 (Dead Zone)”。这将忽略中心位置的微小摇杆移动。',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
question: '是否兼容 PS5、Xbox 和 Switch 控制器?',
|
|
20
|
+
answer: '是的。我们的工具使用现代浏览器的标准 Gamepad API,可检测几乎任何通过 USB 或蓝牙连接的控制器,包括 DualSense、DualShock 4 和 Xbox 控制器。',
|
|
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: 'zh',
|
|
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 或蓝牙手柄。',
|
|
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
|
+
};
|
|
@@ -7,10 +7,6 @@ import TestMandoBibliography from './bibliography.astro';
|
|
|
7
7
|
import type { TestMandoUI } from './ui';
|
|
8
8
|
export type TestMandoLocaleContent = ToolLocaleContent<TestMandoUI>;
|
|
9
9
|
|
|
10
|
-
import { content as es } from './i18n/es';
|
|
11
|
-
import { content as en } from './i18n/en';
|
|
12
|
-
import { content as fr } from './i18n/fr';
|
|
13
|
-
|
|
14
10
|
export const testMando: HardwareToolEntry<TestMandoUI> = {
|
|
15
11
|
id: 'test-mando',
|
|
16
12
|
icons: {
|
|
@@ -18,9 +14,21 @@ export const testMando: HardwareToolEntry<TestMandoUI> = {
|
|
|
18
14
|
fg: 'mdi:gamepad-circle',
|
|
19
15
|
},
|
|
20
16
|
i18n: {
|
|
21
|
-
|
|
22
|
-
en:
|
|
23
|
-
|
|
17
|
+
de: () => import('./i18n/de').then((m) => m.content),
|
|
18
|
+
en: () => import('./i18n/en').then((m) => m.content),
|
|
19
|
+
es: () => import('./i18n/es').then((m) => m.content),
|
|
20
|
+
fr: () => import('./i18n/fr').then((m) => m.content),
|
|
21
|
+
id: () => import('./i18n/id').then((m) => m.content),
|
|
22
|
+
it: () => import('./i18n/it').then((m) => m.content),
|
|
23
|
+
ja: () => import('./i18n/ja').then((m) => m.content),
|
|
24
|
+
ko: () => import('./i18n/ko').then((m) => m.content),
|
|
25
|
+
nl: () => import('./i18n/nl').then((m) => m.content),
|
|
26
|
+
pl: () => import('./i18n/pl').then((m) => m.content),
|
|
27
|
+
pt: () => import('./i18n/pt').then((m) => m.content),
|
|
28
|
+
ru: () => import('./i18n/ru').then((m) => m.content),
|
|
29
|
+
sv: () => import('./i18n/sv').then((m) => m.content),
|
|
30
|
+
tr: () => import('./i18n/tr').then((m) => m.content),
|
|
31
|
+
zh: () => import('./i18n/zh').then((m) => m.content),
|
|
24
32
|
},
|
|
25
33
|
};
|
|
26
34
|
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { ProbadorVibracionMandoUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const slug = 'gamepad-vibration-test-online';
|
|
6
|
+
const title = 'Online Gamepad Vibrationstester';
|
|
7
|
+
const description =
|
|
8
|
+
'Testen Sie die haptischen Motoren und die Dual-Rumble-Vibration Ihres Gamepads im Browser. Unterstützt Xbox, DualShock, DualSense und generische Controller.';
|
|
9
|
+
|
|
10
|
+
const faqData = [
|
|
11
|
+
{
|
|
12
|
+
question: 'Was benötige ich, um mein Gamepad online zu testen?',
|
|
13
|
+
answer:
|
|
14
|
+
'Verbinden Sie Ihr Gamepad einfach per USB-Kabel mit dem Computer oder Mobilgerät oder koppeln Sie es über Bluetooth. Sobald es verbunden ist, drücken Sie eine beliebige Taste, um erkannt zu werden.',
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
question: 'Funktioniert es mit jedem Gamepad-Modell?',
|
|
18
|
+
answer:
|
|
19
|
+
'Die meisten modernen Gamepads bekannter Marken (wie PlayStation oder Xbox) sind kompatibel, sofern Ihr Gerät und Betriebssystem dies unterstützen.',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
question: 'Die rechte Seite meines Gamepads vibriert weniger als die linke, ist das normal?',
|
|
23
|
+
answer:
|
|
24
|
+
'Ja, völlig normal. Gamepads haben meist ein asymmetrisches Design, bei dem eine Seite für starke, tiefe Vibrationen und die andere für schnelle, subtile Vibrationen zuständig ist.',
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
question: 'Verbrauchen diese Tests viel Akku?',
|
|
28
|
+
answer:
|
|
29
|
+
'Vibration ist eine der energieintensivsten Funktionen eines kabellosen Gamepads. Kontinuierliche, lange Tests entladen den Akku schneller als gewöhnlich.',
|
|
30
|
+
},
|
|
31
|
+
];
|
|
32
|
+
|
|
33
|
+
const howToData = [
|
|
34
|
+
{
|
|
35
|
+
name: 'Gamepad anschließen und einschalten',
|
|
36
|
+
text: 'Verbinden Sie Ihr Gamepad per USB-Kabel oder Bluetooth mit Ihrem PC, Mac oder Mobilgerät.',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: 'Taste am Gamepad drücken',
|
|
40
|
+
text: 'Browser erfordern das Drücken mindestens einer Taste, damit das Gamepad erkannt wird und die Web-Kommunikation startet.',
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: 'Vibrationsmotoren anpassen',
|
|
44
|
+
text: 'Konfigurieren Sie die Stärke des starken Motors (Low) und des feinen Motors (High) unabhängig voneinander.',
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: 'Muster ausführen',
|
|
48
|
+
text: 'Wählen Sie eine der Voreinstellungen oder konfigurieren Sie die Parameter manuell und senden Sie das Signal, um jede Komponente zu spüren.',
|
|
49
|
+
},
|
|
50
|
+
];
|
|
51
|
+
|
|
52
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
53
|
+
'@context': 'https://schema.org',
|
|
54
|
+
'@type': 'FAQPage',
|
|
55
|
+
mainEntity: faqData.map((item) => ({
|
|
56
|
+
'@type': 'Question',
|
|
57
|
+
name: item.question,
|
|
58
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
59
|
+
})),
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
const howToSchema: WithContext<HowTo> = {
|
|
63
|
+
'@context': 'https://schema.org',
|
|
64
|
+
'@type': 'HowTo',
|
|
65
|
+
name: title,
|
|
66
|
+
description,
|
|
67
|
+
step: howToData.map((step, i) => ({
|
|
68
|
+
'@type': 'HowToStep',
|
|
69
|
+
position: i + 1,
|
|
70
|
+
name: step.name,
|
|
71
|
+
text: step.text,
|
|
72
|
+
})),
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
76
|
+
'@context': 'https://schema.org',
|
|
77
|
+
'@type': 'SoftwareApplication',
|
|
78
|
+
name: title,
|
|
79
|
+
description,
|
|
80
|
+
applicationCategory: 'UtilityApplication',
|
|
81
|
+
operatingSystem: 'All',
|
|
82
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
83
|
+
inLanguage: 'de',
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
export const content: ToolLocaleContent<ProbadorVibracionMandoUI> = {
|
|
87
|
+
slug,
|
|
88
|
+
title,
|
|
89
|
+
description,
|
|
90
|
+
faqTitle: 'Häufig gestellte Fragen',
|
|
91
|
+
faq: faqData,
|
|
92
|
+
bibliographyTitle: 'Referenzen',
|
|
93
|
+
bibliography: [
|
|
94
|
+
{
|
|
95
|
+
name: 'Wie haptische Vibration funktioniert — HobbyConsolas',
|
|
96
|
+
url: 'https://www.hobbyconsolas.com/reportajes/como-funciona-vibracion-haptica-mando-dualsense-ps5-757673',
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
name: 'Gamepad API — W3C',
|
|
100
|
+
url: 'https://w3c.github.io/gamepad/',
|
|
101
|
+
},
|
|
102
|
+
],
|
|
103
|
+
howTo: howToData,
|
|
104
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
105
|
+
seo: [
|
|
106
|
+
{ type: 'title', text: 'So überprüfen Sie die Vibration Ihres Gaming Gamepads', level: 2 },
|
|
107
|
+
{
|
|
108
|
+
type: 'paragraph',
|
|
109
|
+
html: 'Haptisches Feedback ist eines der immersivsten Elemente von Gaming-Hardware. Wenn ein Motor ausfällt, sind die ersten Symptome meist abnormales Brummen oder asymmetrische Vibrationen. Eine frühzeitige Diagnose verhindert größere Ausfälle.',
|
|
110
|
+
},
|
|
111
|
+
{ type: 'title', text: 'Warum den Vibrationstest durchführen?', level: 3 },
|
|
112
|
+
{
|
|
113
|
+
type: 'paragraph',
|
|
114
|
+
html: 'Beim Kauf eines gebrauchten Gamepads, nach dem Aktualisieren von Treibern oder nach einem Sturz hilft das Testen der haptischen Motoren, echte Hardwarefehler von Softwareproblemen zu unterscheiden. Kompatibel mit Xbox, PlayStation 4, PlayStation 5 (DualSense), Nintendo Switch Pro und generischen USB-Gamepads.',
|
|
115
|
+
},
|
|
116
|
+
{ type: 'title', text: 'Dual Rumble vs Linear Aktor Architektur', level: 3 },
|
|
117
|
+
{
|
|
118
|
+
type: 'paragraph',
|
|
119
|
+
html: 'Klassische Gamepads (Xbox, DualShock) verwenden zwei asymmetrische Mikromotoren: Der linke erzeugt tiefe, grollende Vibrationen; der rechte produziert schnelles, hohes Summen. Fortschrittliche Geräte wie der DualSense verwenden Linear-Aktoren, die Texturen und Widerstände simulieren.',
|
|
120
|
+
},
|
|
121
|
+
{ type: 'title', text: 'Symptombasierter Diagnoseleitfaden', level: 3 },
|
|
122
|
+
{
|
|
123
|
+
type: 'paragraph',
|
|
124
|
+
html: 'Aktivieren Sie jeden Motor einzeln mit 100 %. Wenn beide gleich klingen, handelt es sich möglicherweise um ein Replikat mit nur einem Motor. Wenn einer nicht reagiert, überprüfen Sie die Verbindung, bevor Sie das Gehäuse öffnen. Testen Sie Teilintensitäten: Qualitätsmotoren reagieren schrittweise, nicht wie ein Ein-/Ausschalter.',
|
|
125
|
+
},
|
|
126
|
+
],
|
|
127
|
+
ui: {
|
|
128
|
+
badge: 'Vibrationstest',
|
|
129
|
+
title: 'Gamepad Vibrationstester',
|
|
130
|
+
description: 'Direkte Kontrolle über den Dual Rumble Motor Ihres Gamepads.',
|
|
131
|
+
deviceDisconnected: 'Gamepad getrennt',
|
|
132
|
+
deviceDisconnectedSub: 'Drücken Sie eine Taste an Ihrem Gamepad, um zu starten',
|
|
133
|
+
deviceFallback: 'Gamepad verbunden',
|
|
134
|
+
deviceConnectedSub: 'Stabile Verbindung. Bereit zum Testen.',
|
|
135
|
+
noSupportWarning: "Keine Dual-Rumble-Unterstützung in Ihrem Browser erkannt. Einfache generische Vibration wird verwendet.",
|
|
136
|
+
tabPresets: 'Top Presets',
|
|
137
|
+
tabCustom: 'Reine Präzision',
|
|
138
|
+
presetHeavyTitle: 'Hammerschlag',
|
|
139
|
+
presetHeavyDesc: 'Schwerer Motor auf Max für 300ms. Simuliert einen starken Schlag.',
|
|
140
|
+
presetLightTitle: 'Bienensummen',
|
|
141
|
+
presetLightDesc: 'Nur rechter Motor. Ideal zum Erkennen von ungewöhnlichem Summen.',
|
|
142
|
+
presetHeartbeatTitle: 'Herzschlag',
|
|
143
|
+
presetHeartbeatDesc: 'Subtile aufeinanderfolgende Pulse. Perfekt zum Prüfen der Trägheit.',
|
|
144
|
+
presetSongTitle: 'Münz-Rhythmus',
|
|
145
|
+
presetSongDesc: 'Simuliert aufeinanderfolgende Münzgeräusche. Kurz und taktil.',
|
|
146
|
+
presetRockYouTitle: 'Rock You!',
|
|
147
|
+
presetRockYouDesc: "Queens Klassiker in Ihren Händen: Boom, Boom, Clap!",
|
|
148
|
+
presetEarthquakeTitle: 'Maximales Erdbeben!',
|
|
149
|
+
presetEarthquakeDesc: 'Beide Motoren bei 100% explosiver Kraft. SEHR intensiv.',
|
|
150
|
+
customStrongLabel: 'Starke Kraft (Links)',
|
|
151
|
+
customWeakLabel: 'Schwache Kraft (Rechts)',
|
|
152
|
+
customDurationLabel: 'Pulsdauer',
|
|
153
|
+
btnSendSignal: 'SIGNAL JETZT SENDEN',
|
|
154
|
+
},
|
|
155
|
+
};
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { ProbadorVibracionMandoUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const slug = 'tes-getaran-gamepad-online';
|
|
6
|
+
const title = 'Tes Getaran Gamepad Online';
|
|
7
|
+
const description =
|
|
8
|
+
'Uji motor haptik dan getaran Dual-Rumble gamepad Anda di browser. Mendukung Xbox, DualShock, DualSense, dan kontroler generik.';
|
|
9
|
+
|
|
10
|
+
const faqData = [
|
|
11
|
+
{
|
|
12
|
+
question: 'Apa yang saya perlukan untuk menguji gamepad saya secara online?',
|
|
13
|
+
answer:
|
|
14
|
+
'Cukup hubungkan gamepad Anda ke komputer atau perangkat seluler melalui kabel USB atau pasangkan via Bluetooth. Setelah terhubung, tekan tombol apa saja agar terdeteksi.',
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
question: 'Apakah ini berfungsi dengan semua model gamepad?',
|
|
18
|
+
answer:
|
|
19
|
+
'Sebagian besar gamepad modern dari merek terkenal (seperti PlayStation atau Xbox) kompatibel jika perangkat dan sistem operasi Anda mendukungnya.',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
question: 'Sisi kanan gamepad saya bergetar lebih lemah dari sisi kiri, apakah itu normal?',
|
|
23
|
+
answer:
|
|
24
|
+
'Ya, sangat normal. Gamepad biasanya memiliki desain asimetris di mana satu sisi menangani getaran yang kuat dan dalam, dan sisi lainnya menangani getaran yang cepat dan halus.',
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
question: 'Apakah menjalankan tes ini menguras banyak baterai?',
|
|
28
|
+
answer:
|
|
29
|
+
'Getaran adalah salah satu fungsi yang paling banyak memakan energi pada gamepad nirkabel. Menjalankan tes yang terus-menerus dan lama akan menguras baterai lebih cepat dari biasanya.',
|
|
30
|
+
},
|
|
31
|
+
];
|
|
32
|
+
|
|
33
|
+
const howToData = [
|
|
34
|
+
{
|
|
35
|
+
name: 'Hubungkan dan nyalakan gamepad Anda',
|
|
36
|
+
text: 'Hubungkan gamepad Anda ke PC, Mac, atau seluler via kabel USB atau Bluetooth.',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: 'Tekan tombol pada gamepad',
|
|
40
|
+
text: 'Browser mengharuskan Anda menekan setidaknya satu tombol agar gamepad terdeteksi dan memulai komunikasi web.',
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: 'Sesuaikan motor getaran',
|
|
44
|
+
text: 'Konfigurasikan daya Motor Kuat (Low) dan Motor Halus (High) secara independen.',
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: 'Jalankan pola',
|
|
48
|
+
text: 'Tekan salah satu preset atau konfigurasikan parameter secara manual dan kirim sinyal untuk merasakan setiap komponen.',
|
|
49
|
+
},
|
|
50
|
+
];
|
|
51
|
+
|
|
52
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
53
|
+
'@context': 'https://schema.org',
|
|
54
|
+
'@type': 'FAQPage',
|
|
55
|
+
mainEntity: faqData.map((item) => ({
|
|
56
|
+
'@type': 'Question',
|
|
57
|
+
name: item.question,
|
|
58
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
59
|
+
})),
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
const howToSchema: WithContext<HowTo> = {
|
|
63
|
+
'@context': 'https://schema.org',
|
|
64
|
+
'@type': 'HowTo',
|
|
65
|
+
name: title,
|
|
66
|
+
description,
|
|
67
|
+
step: howToData.map((step, i) => ({
|
|
68
|
+
'@type': 'HowToStep',
|
|
69
|
+
position: i + 1,
|
|
70
|
+
name: step.name,
|
|
71
|
+
text: step.text,
|
|
72
|
+
})),
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
76
|
+
'@context': 'https://schema.org',
|
|
77
|
+
'@type': 'SoftwareApplication',
|
|
78
|
+
name: title,
|
|
79
|
+
description,
|
|
80
|
+
applicationCategory: 'UtilityApplication',
|
|
81
|
+
operatingSystem: 'All',
|
|
82
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
83
|
+
inLanguage: 'id',
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
export const content: ToolLocaleContent<ProbadorVibracionMandoUI> = {
|
|
87
|
+
slug,
|
|
88
|
+
title,
|
|
89
|
+
description,
|
|
90
|
+
faqTitle: 'Pertanyaan yang Sering Diajukan',
|
|
91
|
+
faq: faqData,
|
|
92
|
+
bibliographyTitle: 'Referensi',
|
|
93
|
+
bibliography: [
|
|
94
|
+
{
|
|
95
|
+
name: 'Cara kerja getaran haptik — HobbyConsolas',
|
|
96
|
+
url: 'https://www.hobbyconsolas.com/reportajes/como-funciona-vibracion-haptica-mando-dualsense-ps5-757673',
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
name: 'Gamepad API — W3C',
|
|
100
|
+
url: 'https://w3c.github.io/gamepad/',
|
|
101
|
+
},
|
|
102
|
+
],
|
|
103
|
+
howTo: howToData,
|
|
104
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
105
|
+
seo: [
|
|
106
|
+
{ type: 'title', text: 'Cara memeriksa getaran gamepad gaming Anda', level: 2 },
|
|
107
|
+
{
|
|
108
|
+
type: 'paragraph',
|
|
109
|
+
html: 'Umpan balik haptik adalah salah satu elemen perangkat keras gaming yang paling imersif. Ketika sebuah motor gagal, gejala awalnya biasanya berupa dengungan abnormal atau getaran asimetris. Mendiagnosisnya sejak dini mencegah kegagalan yang lebih besar.',
|
|
110
|
+
},
|
|
111
|
+
{ type: 'title', text: 'Mengapa menjalankan tes getaran?', level: 3 },
|
|
112
|
+
{
|
|
113
|
+
type: 'paragraph',
|
|
114
|
+
html: 'Saat membeli gamepad bekas, setelah memperbarui driver, atau setelah jatuh, menguji motor haptik membantu membedakan kegagalan perangkat keras yang nyata dari masalah perangkat lunak. Kompatibel dengan Xbox, PlayStation 4, PlayStation 5 (DualSense), Nintendo Switch Pro, dan gamepad USB generik.',
|
|
115
|
+
},
|
|
116
|
+
{ type: 'title', text: 'Arsitektur Dual-Rumble vs. Aktuator Linier', level: 3 },
|
|
117
|
+
{
|
|
118
|
+
type: 'paragraph',
|
|
119
|
+
html: 'Gamepad klasik (Xbox, DualShock) menggunakan dua mikro-motor asimetris: bagian kiri menghasilkan getaran yang dalam dan bergemuruh; bagian kanan menghasilkan dengungan yang cepat dan bernada tinggi. Perangkat canggih seperti DualSense menggunakan aktuator linier yang mensimulasikan tekstur dan hambatan.',
|
|
120
|
+
},
|
|
121
|
+
{ type: 'title', text: 'Panduan diagnosis berdasarkan gejala', level: 3 },
|
|
122
|
+
{
|
|
123
|
+
type: 'paragraph',
|
|
124
|
+
html: 'Aktifkan setiap motor secara independen pada 100%. Jika keduanya terdengar sama, gamepad tersebut mungkin merupakan replika dengan motor tunggal. Jika salah satu tidak merespons, periksa koneksi sebelum membuka casing. Uji intensitas fraksional: motor berkualitas merespons secara bertahap, bukan seperti sakelar on/off.',
|
|
125
|
+
},
|
|
126
|
+
],
|
|
127
|
+
ui: {
|
|
128
|
+
badge: 'Tes Getaran',
|
|
129
|
+
title: 'Penguji Getaran Gamepad',
|
|
130
|
+
description: 'Kontrol langsung atas motor Dual-Rumble gamepad Anda.',
|
|
131
|
+
deviceDisconnected: 'Gamepad Terputus',
|
|
132
|
+
deviceDisconnectedSub: 'Tekan tombol pada gamepad untuk memulai',
|
|
133
|
+
deviceFallback: 'Gamepad Terhubung',
|
|
134
|
+
deviceConnectedSub: 'Koneksi stabil. Siap untuk diuji.',
|
|
135
|
+
noSupportWarning: "Dukungan Dual-Rumble tidak terdeteksi di browser Anda. Menggunakan getaran generik dasar.",
|
|
136
|
+
tabPresets: 'Preset Utama',
|
|
137
|
+
tabCustom: 'Presisi Murni',
|
|
138
|
+
presetHeavyTitle: 'Hantaman Palu',
|
|
139
|
+
presetHeavyDesc: 'Motor berat pada maksimal selama 300ms. Mensimulasikan pukulan kuat.',
|
|
140
|
+
presetLightTitle: 'Dengungan Lebah',
|
|
141
|
+
presetLightDesc: 'Hanya motor kanan. Ideal untuk mendeteksi dengungan yang tidak biasa.',
|
|
142
|
+
presetHeartbeatTitle: 'Detak Jantung',
|
|
143
|
+
presetHeartbeatDesc: 'Denyut berurutan yang halus. Sempurna untuk memeriksa retensi inersia.',
|
|
144
|
+
presetSongTitle: 'Ritme Koin',
|
|
145
|
+
presetSongDesc: 'Mensimulasikan suara koin berturut-turut. Singkat dan taktil.',
|
|
146
|
+
presetRockYouTitle: 'Rock You!',
|
|
147
|
+
presetRockYouDesc: "Klasik Queen di tangan Anda: boom, boom, clap!",
|
|
148
|
+
presetEarthquakeTitle: 'Gempa Maksimum!',
|
|
149
|
+
presetEarthquakeDesc: 'Kedua motor pada kekuatan ledakan 100%. SANGAT intens.',
|
|
150
|
+
customStrongLabel: 'Kekuatan Kuat (Kiri)',
|
|
151
|
+
customWeakLabel: 'Kekuatan Lemah (Kanan)',
|
|
152
|
+
customDurationLabel: 'Durasi Denyut',
|
|
153
|
+
btnSendSignal: 'KIRIM SINYAL SEKARANG',
|
|
154
|
+
},
|
|
155
|
+
};
|