@jjlmoya/utils-hardware 1.3.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/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,217 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { PixelesPantallaUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const slug = 'dead-pixel-tester';
|
|
6
|
+
const title = '屏幕坏点检测与修复工具';
|
|
7
|
+
const description =
|
|
8
|
+
'在线检测显示器是否存在死点或亮点(卡住的像素),并使用我们的高频闪烁工具尝试修复。';
|
|
9
|
+
|
|
10
|
+
const faqData = [
|
|
11
|
+
{
|
|
12
|
+
question: '死点 (Dead Pixel) 和亮点/卡住的像素 (Stuck Pixel) 有什么区别?',
|
|
13
|
+
answer:
|
|
14
|
+
'死点由于没有电力供应(晶体管损坏)而永久显示为黑色。亮点或卡住的像素通常显示为明亮的颜色(红、绿或蓝),有时可以通过高频闪烁刺激来恢复活力。',
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
question: '修复工具 (Strobe) 是如何工作的?',
|
|
18
|
+
answer:
|
|
19
|
+
'我们的工具以极快的速度产生三原色的闪烁。这可以强迫卡住的像素液晶重新活动。建议运行 10 到 30 分钟。',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
question: '温度会导致坏点出现吗?',
|
|
23
|
+
answer:
|
|
24
|
+
'是的,极端温度会影响面板。然而,最常见的原因是生产缺陷或损坏液晶电气接触点的物理冲击。',
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
question: '保修范围涵盖多少个坏点?',
|
|
28
|
+
answer:
|
|
29
|
+
'这取决于制造商和 ISO 9241-307 标准。通常,品牌认为对于 1 级面板,最多 2 到 3 个亮点是“正常”的,而 0 级面板则不允许有任何坏点。',
|
|
30
|
+
},
|
|
31
|
+
];
|
|
32
|
+
|
|
33
|
+
const howToData = [
|
|
34
|
+
{
|
|
35
|
+
name: '清洁屏幕',
|
|
36
|
+
text: '在开始之前,用超细纤维布彻底清洁显示器,以免将灰尘误认为坏点。',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: '进入全屏模式',
|
|
40
|
+
text: '按下 F11 或全屏按钮,以免浏览器界面干扰坏点检测。',
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: '切换颜色',
|
|
44
|
+
text: '在黑、白、红、绿、蓝背景之间切换。寻找任何与背景颜色不符的点。',
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: '开始修复循环',
|
|
48
|
+
text: '如果你发现了一个亮点,将 Strobe 工具移动到该位置并让它运行至少 20 分钟。',
|
|
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: 'zh',
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
export const content: ToolLocaleContent<PixelesPantallaUI> = {
|
|
87
|
+
slug,
|
|
88
|
+
title,
|
|
89
|
+
description,
|
|
90
|
+
faqTitle: '常见问题',
|
|
91
|
+
faq: faqData,
|
|
92
|
+
bibliographyTitle: '参考资料与标准',
|
|
93
|
+
bibliography: [
|
|
94
|
+
{
|
|
95
|
+
name: 'ISO/IEC 9241-307: 显示器人体工程学及相关设备',
|
|
96
|
+
url: 'https://www.iso.org/standard/72025.html',
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
name: '坏点政策 - 通用标准 (VESA)',
|
|
100
|
+
url: 'https://www.vesa.org/',
|
|
101
|
+
},
|
|
102
|
+
],
|
|
103
|
+
howTo: howToData,
|
|
104
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
105
|
+
seo: [
|
|
106
|
+
{
|
|
107
|
+
type: 'title',
|
|
108
|
+
text: '完整指南:死点、亮点以及如何修复它们',
|
|
109
|
+
level: 2,
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
type: 'paragraph',
|
|
113
|
+
html: '注意到屏幕上有一个不改变颜色的奇怪点吗?这可能是面板缺陷。本工具可帮助你诊断显示器是否存在<strong>死点</strong>或<strong>卡住的像素</strong>(亮点),并提供尝试修复的方案。',
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
type: 'title',
|
|
117
|
+
text: '死点和亮点有什么区别?',
|
|
118
|
+
level: 3,
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
type: 'paragraph',
|
|
122
|
+
html: '现代显示器的像素缺陷主要有两种类型,每种都有不同的特点和解决方案。',
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
type: 'title',
|
|
126
|
+
text: '亮点/卡住的像素 (Stuck Pixel)',
|
|
127
|
+
level: 4,
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
type: 'paragraph',
|
|
131
|
+
html: '这是最常见的缺陷。它发生在红、绿、蓝子像素中的一个或多个卡在“开启”状态时。<strong>症状:</strong>在深色背景下,你会看到一个永久发光的色点(红、绿、蓝或白色)。<strong>通常是可修复的。</strong>液晶仍然有反应,只是被“锁”在特定的偏振状态。我们的 Strobe 修复工具尝试通过快速电压刺激来解锁它。',
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
type: 'title',
|
|
135
|
+
text: '死点 (Dead Pixel)',
|
|
136
|
+
level: 4,
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
type: 'paragraph',
|
|
140
|
+
html: '当控制像素的晶体管完全失效且无法透光时发生。<strong>症状:</strong>永久性的黑点,在浅色或白色背景下尤为明显。<strong>难以修复(通常是永久性的)。</strong>损坏发生在硬件层面(电路烧毁)。任何电刺激都无法修复它,通常需要更换面板。',
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
type: 'title',
|
|
144
|
+
text: 'Strobe 修复工具是如何工作的?',
|
|
145
|
+
level: 3,
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
type: 'paragraph',
|
|
149
|
+
html: '“修复像素”功能使用了一种被称为 <strong>Pixel Exercising</strong>(像素锻炼)的技术。它在受影响的区域产生高频随机噪声模式(颜色快速闪烁)。',
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
type: 'title',
|
|
153
|
+
text: '机制:液晶与电压',
|
|
154
|
+
level: 4,
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
type: 'paragraph',
|
|
158
|
+
html: '液晶显示器使用液晶,其透明度根据施加的电压而改变。当一个子像素卡住时,意味着液晶“冻结”在特定的偏振状态。快速的电压变化(通过快速切换原色实现)尝试“锻炼”液晶并迫使它改变状态。',
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
type: 'title',
|
|
162
|
+
text: '使用建议',
|
|
163
|
+
level: 4,
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
type: 'paragraph',
|
|
167
|
+
html: '<ul><li>建议在受影响区域运行该工具至少 <strong>10 到 20 分钟</strong>。</li><li>如果不起作用,请尝试更长时间(最长 1 小时),或尝试用超细纤维布非常轻微地按压该像素(风险自担)。</li><li>在某些情况下,在激活 Strobe 之前用吹风机(低温档)稍微加热显示器可以提高效果。</li></ul>',
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
type: 'title',
|
|
171
|
+
text: '癫痫警告',
|
|
172
|
+
level: 3,
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
type: 'paragraph',
|
|
176
|
+
html: '修复模式使用高频率的快速闪光。如果你患有光敏性癫痫或对光敏感,<strong>请勿使用此功能</strong>。暴露在闪烁模式下可能会引发易感人群的癫痫发作。',
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
type: 'title',
|
|
180
|
+
text: '何时申请保修或更换',
|
|
181
|
+
level: 3,
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
type: 'paragraph',
|
|
185
|
+
html: '如果你确认存在缺陷像素(尤其是多个死点),可以将我们的测试结果作为保修索赔的证据。许多制造商根据 ISO 9241-307(1 级)标准,将超过 2-3 个亮点或 1 个死点视为符合更换条件的制造缺陷。',
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
type: 'title',
|
|
189
|
+
text: '死点标准的历史',
|
|
190
|
+
level: 3,
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
type: 'paragraph',
|
|
194
|
+
html: '几十年来,由于制造的复杂性,液晶显示器一直存在像素缺陷。一个全高清面板(1920×1080)包含 6,220,800 个像素(18,662,400 个子像素)。统计上的缺陷概率是不可避免的。这就是为什么存在 ISO 9241-307 等标准,来根据显示器级别定义“可接受的死点”数量。',
|
|
195
|
+
},
|
|
196
|
+
],
|
|
197
|
+
ui: {
|
|
198
|
+
badge: '屏幕实用程序',
|
|
199
|
+
title: '死点或亮点?',
|
|
200
|
+
description: '通过纯色背景检查显示器状态,并使用我们的高频刺激工具尝试修复卡住的像素。',
|
|
201
|
+
btnStartTest: '开始测试',
|
|
202
|
+
btnStartFix: '修复像素',
|
|
203
|
+
kbdFullscreen: 'F11',
|
|
204
|
+
kbdFullscreenLabel: '全屏',
|
|
205
|
+
kbdSpace: '空格键',
|
|
206
|
+
kbdSpaceLabel: '切换颜色',
|
|
207
|
+
kbdEsc: 'ESC',
|
|
208
|
+
kbdEscLabel: '退出',
|
|
209
|
+
colorBlack: '黑色',
|
|
210
|
+
colorWhite: '白色',
|
|
211
|
+
colorRed: '红色',
|
|
212
|
+
colorGreen: '绿色',
|
|
213
|
+
colorBlue: '蓝色',
|
|
214
|
+
btnToggleFixer: '打开修复工具 (Strobe)',
|
|
215
|
+
btnExit: '退出 (ESC)',
|
|
216
|
+
},
|
|
217
|
+
};
|
|
@@ -7,10 +7,6 @@ import PixelesPantallaBibliography from './bibliography.astro';
|
|
|
7
7
|
import type { PixelesPantallaUI } from './ui';
|
|
8
8
|
export type PixelesPantallaLocaleContent = ToolLocaleContent<PixelesPantallaUI>;
|
|
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 pixelesPantalla: HardwareToolEntry<PixelesPantallaUI> = {
|
|
15
11
|
id: 'pixeles-pantalla',
|
|
16
12
|
icons: {
|
|
@@ -18,9 +14,21 @@ export const pixelesPantalla: HardwareToolEntry<PixelesPantallaUI> = {
|
|
|
18
14
|
fg: 'mdi:monitor-shimmer',
|
|
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,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-deutsch';
|
|
6
|
+
const title = 'Online Gamepad & Controller Test';
|
|
7
|
+
const description = 'Testen Sie Ihren Xbox-, PlayStation- oder PC-Controller. Visualisieren Sie Totzonen, Joystick-Drift und Tasten.';
|
|
8
|
+
|
|
9
|
+
const faqData = [
|
|
10
|
+
{
|
|
11
|
+
question: 'Was ist Joystick-Drift?',
|
|
12
|
+
answer: 'Drift tritt auf, wenn der Controller Bewegungen registriert, ohne dass der Joystick berührt wird. Dies wird durch Verschleiß der internen Potentiometer verursacht, die ein falsches elektrisches Signal in eine konstante Richtung senden.',
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
question: 'Wie kann ich Drift per Software beheben?',
|
|
16
|
+
answer: 'Wenn der Drift geringfügig ist, können Sie in Ihren Spieleinstellungen eine größere "Totzone" (Deadzone) konfigurieren. Dadurch werden kleine Joystick-Bewegungen in der Mitte ignoriert.',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
question: 'Ist es mit PS5-, Xbox- und Switch-Controllern kompatibel?',
|
|
20
|
+
answer: 'Ja. Unser Tool verwendet die Standard-Gamepad-API moderner Browser, die fast jeden über USB oder Bluetooth angeschlossenen Controller erkennt, einschließlich DualSense, DualShock 4 und Xbox-Controller.',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
question: 'Warum erkennt der Browser meinen Controller nicht?',
|
|
24
|
+
answer: 'Aus Sicherheitsgründen aktivieren Browser das Gamepad erst nach dem ersten Tastendruck. Wenn es nicht erscheint, drücken Sie eine beliebige Taste (wie A oder X) und stellen Sie sicher, dass Sie sich nicht im strengen Inkognito-Modus befinden.',
|
|
25
|
+
},
|
|
26
|
+
];
|
|
27
|
+
|
|
28
|
+
const howToData = [
|
|
29
|
+
{
|
|
30
|
+
name: 'Controller anschließen',
|
|
31
|
+
text: 'Schließen Sie Ihr Gamepad über USB an oder koppeln Sie es über Bluetooth mit Ihrem Computer.',
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
name: 'Erkennung aktivieren',
|
|
35
|
+
text: 'Bewegen Sie die Joysticks oder drücken Sie eine beliebige Taste, damit der Browser das angeschlossene Gerät erkennt.',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: 'Totzonen testen',
|
|
39
|
+
text: 'Lassen Sie die Joysticks los und beobachten Sie die Achsen auf dem Bildschirm. Wenn die Werte nicht bei 0,0000 liegen, haben Sie einen leichten Drift.',
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
name: 'Tasten und Vibration prüfen',
|
|
43
|
+
text: 'Drücken Sie jede Taste und jeden Trigger. Die visuellen Anzeigen sollten aufleuchten, und wenn Ihr Controller dies unterstützt, können Sie den Vibrationsmotor 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: 'de',
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
export const content: ToolLocaleContent<TestMandoUI> = {
|
|
82
|
+
slug,
|
|
83
|
+
title,
|
|
84
|
+
description,
|
|
85
|
+
faqTitle: 'Häufig gestellte Fragen',
|
|
86
|
+
faq: faqData,
|
|
87
|
+
bibliographyTitle: 'Technische Referenzen',
|
|
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: Drift und Joystick Probleme erkennen',
|
|
104
|
+
level: 2,
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
type: 'paragraph',
|
|
108
|
+
html: 'Kostenloses Tool zum Testen von Xbox-, PlayStation-, Switch- und anderen Controllern. Visualisieren Sie Totzonen, erkennen Sie Drift und testen Sie die Vibration.',
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
type: 'title',
|
|
112
|
+
text: 'Was ist Joystick-Drift',
|
|
113
|
+
level: 3,
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
type: 'paragraph',
|
|
117
|
+
html: 'Drift ist ein häufiger Defekt bei analogen Joysticks, bei dem der Stick Bewegungen registriert, ohne berührt zu werden. Er wird durch Verschleiß der internen Potentiometer verursacht.',
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
type: 'title',
|
|
121
|
+
text: 'Controller-Kompatibilität',
|
|
122
|
+
level: 3,
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
type: 'paragraph',
|
|
126
|
+
html: 'Kompatibel mit Xbox One, Xbox Series X/S, PlayStation 4, PlayStation 5 (DualSense), Nintendo Switch Pro und praktisch jedem modernen USB- oder Bluetooth-Gamepad.',
|
|
127
|
+
},
|
|
128
|
+
],
|
|
129
|
+
ui: {
|
|
130
|
+
badge: 'Eingabetest',
|
|
131
|
+
title: 'Gamepad und Controller Test',
|
|
132
|
+
description: 'Testen Sie Ihren Controller und erkennen Sie Probleme.',
|
|
133
|
+
connectionMessage: 'Schließen Sie Ihr USB- oder Bluetooth-Gerät an',
|
|
134
|
+
connectionStatus: 'Verbunden',
|
|
135
|
+
axisLabel: 'Achsen',
|
|
136
|
+
buttonsLabel: 'Tasten',
|
|
137
|
+
vibrationTitle: 'Vibrationstest',
|
|
138
|
+
vibrationDescription: 'Erfordert Browser-Unterstützung und kompatibles Gamepad.',
|
|
139
|
+
vibrationLow: 'Niedrig (Rumble)',
|
|
140
|
+
vibrationHigh: 'Hoch (Buzz)',
|
|
141
|
+
eventHistoryTitle: 'Ereignisverlauf',
|
|
142
|
+
eventHistoryClear: 'Löschen',
|
|
143
|
+
eventWaiting: 'Warte auf Ereignisse...',
|
|
144
|
+
gameStartBtn: 'CHALLENGE STARTEN',
|
|
145
|
+
gameControllerWarning: 'Controller anschließen oder Tastatur nutzen',
|
|
146
|
+
gameTimer: 'Zeit',
|
|
147
|
+
gameScore: 'Punkte',
|
|
148
|
+
gameInstruction: 'Schnell drücken',
|
|
149
|
+
gameCompleted: 'Herausforderung abgeschlossen',
|
|
150
|
+
gameNewRecord: 'NEUER REKORD',
|
|
151
|
+
gameRestartBtn: 'Wiederholen',
|
|
152
|
+
gameFeedback: 'Du bist eine Tasten-Legende',
|
|
153
|
+
gameIntroTitlePre: 'Pro Gamer ',
|
|
154
|
+
gameIntroHighlight: 'Reflexe',
|
|
155
|
+
gameIntroTitlePost: '?',
|
|
156
|
+
gameIntroDescPre: 'Testen Sie die Latenz und Reaktionsgeschwindigkeit Ihres Controllers. Sie haben ',
|
|
157
|
+
gameIntroDescSeconds: '30 Sekunden',
|
|
158
|
+
gameIntroDescPost: ', um die Tasten zu meistern.',
|
|
159
|
+
gameShareBtn: 'RANG TEILEN',
|
|
160
|
+
gameLogConnected: 'Verbunden',
|
|
161
|
+
gameLogDisconnected: 'Getrennt',
|
|
162
|
+
gameLogCleared: 'Protokoll gelöscht...',
|
|
163
|
+
gameLogBtnPrefix: 'Taste',
|
|
164
|
+
gameVibNotSupported: 'Vibration nicht unterstützt.',
|
|
165
|
+
gameVibLow: 'Niedrig',
|
|
166
|
+
gameVibHigh: 'Hoch',
|
|
167
|
+
gameMoveStick: 'STICK BEWEGEN',
|
|
168
|
+
gamePress: 'DRÜCKEN',
|
|
169
|
+
rankLegendaryName: 'LEGENDÄR',
|
|
170
|
+
rankLegendaryDesc: 'Deine Finger bewegen sich mit Schallgeschwindigkeit.',
|
|
171
|
+
rankLegendaryFlavor: 'Mein Controller fliegt!',
|
|
172
|
+
rankProName: 'PRO GAMER',
|
|
173
|
+
rankProDesc: 'Du hast stählerne Reflexe und einen gut kalibrierten Controller.',
|
|
174
|
+
rankProFlavor: 'Mein Controller fliegt!',
|
|
175
|
+
rankGamerName: 'GAMER',
|
|
176
|
+
rankGamerDesc: 'Nicht schlecht, aber du brauchst mehr Übung für kompetitives Spielen.',
|
|
177
|
+
rankGamerFlavor: 'Fast geschafft!',
|
|
178
|
+
rankNoobName: 'NOOB',
|
|
179
|
+
rankNoobDesc: 'Bist du sicher, dass der Controller eingeschaltet ist?',
|
|
180
|
+
rankNoobFlavor: 'Der Controller hat was gegen mich!',
|
|
181
|
+
gameShareText: 'Kannst du mich schlagen?',
|
|
182
|
+
gameShareScorePrefix: 'Ich habe',
|
|
183
|
+
gameShareScoreSuffix: 'Treffer erzielt',
|
|
184
|
+
gameShareTitle: 'Online Gamepad Test',
|
|
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 = 'tes-gamepad-online';
|
|
6
|
+
const title = 'Tes Gamepad & Kontroler Online';
|
|
7
|
+
const description = 'Uji kontroler Xbox, PlayStation, atau PC Anda. Visualisasikan dead zone, drift joystick, dan tombol.';
|
|
8
|
+
|
|
9
|
+
const faqData = [
|
|
10
|
+
{
|
|
11
|
+
question: 'Apa itu Joystick Drift?',
|
|
12
|
+
answer: 'Drift terjadi ketika kontroler mendeteksi gerakan tanpa joystick disentuh. Hal ini disebabkan oleh keausan pada potensiometer internal, yang mengirimkan sinyal listrik palsu ke arah yang konstan.',
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
question: 'Bagaimana cara memperbaiki drift melalui software?',
|
|
16
|
+
answer: 'Jika drift ringan, Anda dapat mengonfigurasi "Dead Zone" (Zona Mati) yang lebih besar di pengaturan game Anda. Ini akan mengabaikan gerakan joystick kecil di bagian tengah.',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
question: 'Apakah ini kompatibel dengan kontroler PS5, Xbox, dan Switch?',
|
|
20
|
+
answer: 'Ya. Alat kami menggunakan Gamepad API standar dari browser modern, yang mendeteksi hampir semua kontroler yang terhubung via USB atau Bluetooth, termasuk DualSense, DualShock 4, dan Kontroler Xbox.',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
question: 'Mengapa browser tidak mendeteksi kontroler saya?',
|
|
24
|
+
answer: 'Untuk keamanan, browser hanya mengaktifkan gamepad setelah penekanan tombol pertama. Jika tidak muncul, tekan tombol apa saja (seperti A atau X) dan pastikan Anda tidak berada dalam mode penyamaran yang ketat.',
|
|
25
|
+
},
|
|
26
|
+
];
|
|
27
|
+
|
|
28
|
+
const howToData = [
|
|
29
|
+
{
|
|
30
|
+
name: 'Hubungkan kontroler',
|
|
31
|
+
text: 'Colokkan gamepad Anda via USB oder sambungkan via Bluetooth ke komputer Anda.',
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
name: 'Aktifkan deteksi',
|
|
35
|
+
text: 'Gerakkan joystick atau tekan tombol apa pun agar browser mengenali perangkat yang terhubung.',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: 'Uji dead zone',
|
|
39
|
+
text: 'Lepaskan joystick dan amati sumbu di layar. Jika nilainya tidak 0.0000, Anda memiliki sedikit drift.',
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
name: 'Verifikasi tombol dan getaran',
|
|
43
|
+
text: 'Tekan setiap tombol dan trigger. Indikator visual harus menyala dan jika kontroler Anda mendukungnya, Anda dapat menguji motor getaran.',
|
|
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: 'id',
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
export const content: ToolLocaleContent<TestMandoUI> = {
|
|
82
|
+
slug,
|
|
83
|
+
title,
|
|
84
|
+
description,
|
|
85
|
+
faqTitle: 'Pertanyaan yang Sering Diajukan',
|
|
86
|
+
faq: faqData,
|
|
87
|
+
bibliographyTitle: 'Referensi Teknis',
|
|
88
|
+
bibliography: [
|
|
89
|
+
{
|
|
90
|
+
name: 'Standar 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: 'Tes Gamepad Online: Deteksi Drift dan Masalah Joystick',
|
|
104
|
+
level: 2,
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
type: 'paragraph',
|
|
108
|
+
html: 'Alat gratis untuk menguji kontroler Xbox, PlayStation, Switch, dan lainnya. Visualisasikan dead zone, deteksi drift, dan uji getaran.',
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
type: 'title',
|
|
112
|
+
text: 'Apa itu Joystick Drift',
|
|
113
|
+
level: 3,
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
type: 'paragraph',
|
|
117
|
+
html: 'Drift adalah cacat umum pada joystick analog di mana stick mencatat gerakan tanpa disentuh. Hal ini disebabkan oleh keausan pada potensiometer internal.',
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
type: 'title',
|
|
121
|
+
text: 'Kompatibilitas Kontroler',
|
|
122
|
+
level: 3,
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
type: 'paragraph',
|
|
126
|
+
html: 'Kompatibel dengan Xbox One, Xbox Series X/S, PlayStation 4, PlayStation 5 (DualSense), Nintendo Switch Pro, dan hampir semua gamepad USB atau Bluetooth modern.',
|
|
127
|
+
},
|
|
128
|
+
],
|
|
129
|
+
ui: {
|
|
130
|
+
badge: 'Tes Input',
|
|
131
|
+
title: 'Tes Gamepad dan Kontroler',
|
|
132
|
+
description: 'Uji kontroler Anda dan deteksi masalah.',
|
|
133
|
+
connectionMessage: 'Hubungkan perangkat USB atau Bluetooth Anda',
|
|
134
|
+
connectionStatus: 'Terhubung',
|
|
135
|
+
axisLabel: 'Sumbu',
|
|
136
|
+
buttonsLabel: 'Tombol',
|
|
137
|
+
vibrationTitle: 'Tes Getaran',
|
|
138
|
+
vibrationDescription: 'Membutuhkan dukungan browser dan gamepad yang kompatibel.',
|
|
139
|
+
vibrationLow: 'Rendah (Rumble)',
|
|
140
|
+
vibrationHigh: 'Tinggi (Buzz)',
|
|
141
|
+
eventHistoryTitle: 'Riwayat Kejadian',
|
|
142
|
+
eventHistoryClear: 'Bersihkan',
|
|
143
|
+
eventWaiting: 'Menunggu kejadian...',
|
|
144
|
+
gameStartBtn: 'MULAI TANTANGAN',
|
|
145
|
+
gameControllerWarning: 'Hubungkan gamepad atau gunakan keyboard',
|
|
146
|
+
gameTimer: 'Timer',
|
|
147
|
+
gameScore: 'Skor',
|
|
148
|
+
gameInstruction: 'Tekan cepat',
|
|
149
|
+
gameCompleted: 'Tantangan Selesai',
|
|
150
|
+
gameNewRecord: 'REKOR BARU',
|
|
151
|
+
gameRestartBtn: 'Coba Lagi',
|
|
152
|
+
gameFeedback: 'Anda adalah legenda tombol',
|
|
153
|
+
gameIntroTitlePre: 'Refleks ',
|
|
154
|
+
gameIntroHighlight: 'Pro Gamer',
|
|
155
|
+
gameIntroTitlePost: '?',
|
|
156
|
+
gameIntroDescPre: 'Uji latensi kontroler dan kecepatan reaksi Anda. Anda punya waktu ',
|
|
157
|
+
gameIntroDescSeconds: '30 detik',
|
|
158
|
+
gameIntroDescPost: ' untuk menguasai tombol.',
|
|
159
|
+
gameShareBtn: 'BAGIKAN PERINGKAT',
|
|
160
|
+
gameLogConnected: 'Terhubung',
|
|
161
|
+
gameLogDisconnected: 'Terputus',
|
|
162
|
+
gameLogCleared: 'Log dibersihkan...',
|
|
163
|
+
gameLogBtnPrefix: 'Tombol',
|
|
164
|
+
gameVibNotSupported: 'Getaran tidak didukung.',
|
|
165
|
+
gameVibLow: 'Rendah',
|
|
166
|
+
gameVibHigh: 'Tinggi',
|
|
167
|
+
gameMoveStick: 'GERAKKAN STICK',
|
|
168
|
+
gamePress: 'TEKAN',
|
|
169
|
+
rankLegendaryName: 'LEGENDA',
|
|
170
|
+
rankLegendaryDesc: 'Jari-jari Anda bergerak secepat kilat.',
|
|
171
|
+
rankLegendaryFlavor: 'Gamepad saya terbang!',
|
|
172
|
+
rankProName: 'PRO GAMER',
|
|
173
|
+
rankProDesc: 'Anda memiliki refleks baja dan kontroler yang terkalibrasi dengan baik.',
|
|
174
|
+
rankProFlavor: 'Gamepad saya terbang!',
|
|
175
|
+
rankGamerName: 'GAMER',
|
|
176
|
+
rankGamerDesc: 'Lumayan, tapi Anda butuh lebih banyak latihan untuk permainan kompetitif.',
|
|
177
|
+
rankGamerFlavor: 'Hampir saja!',
|
|
178
|
+
rankNoobName: 'NOOB',
|
|
179
|
+
rankNoobDesc: 'Apakah Anda yakin kontroler Anda sudah menyala?',
|
|
180
|
+
rankNoobFlavor: 'Gamepad-nya tidak mau kerja sama!',
|
|
181
|
+
gameShareText: 'Bisakah Anda mengalahkan saya?',
|
|
182
|
+
gameShareScorePrefix: 'Saya dapat',
|
|
183
|
+
gameShareScoreSuffix: 'poin',
|
|
184
|
+
gameShareTitle: 'Tes Gamepad Online',
|
|
185
|
+
},
|
|
186
|
+
};
|