@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.
Files changed (113) hide show
  1. package/package.json +2 -1
  2. package/src/category/i18n/de.ts +106 -0
  3. package/src/category/i18n/id.ts +106 -0
  4. package/src/category/i18n/it.ts +106 -0
  5. package/src/category/i18n/ja.ts +106 -0
  6. package/src/category/i18n/ko.ts +106 -0
  7. package/src/category/i18n/nl.ts +106 -0
  8. package/src/category/i18n/pl.ts +106 -0
  9. package/src/category/i18n/pt.ts +106 -0
  10. package/src/category/i18n/ru.ts +106 -0
  11. package/src/category/i18n/sv.ts +106 -0
  12. package/src/category/i18n/tr.ts +106 -0
  13. package/src/category/i18n/zh.ts +106 -0
  14. package/src/category/index.ts +13 -1
  15. package/src/tests/category_validation.test.ts +73 -0
  16. package/src/tests/faq_count.test.ts +1 -1
  17. package/src/tests/i18n_coverage.test.ts +36 -0
  18. package/src/tests/locale_completeness.test.ts +1 -1
  19. package/src/tests/slug_language_code_format.test.ts +23 -0
  20. package/src/tests/slug_uniqueness.test.ts +81 -0
  21. package/src/tests/title_quality.test.ts +1 -1
  22. package/src/tool/batteryHealthEstimator/i18n/de.ts +158 -0
  23. package/src/tool/batteryHealthEstimator/i18n/id.ts +158 -0
  24. package/src/tool/batteryHealthEstimator/i18n/it.ts +158 -0
  25. package/src/tool/batteryHealthEstimator/i18n/ja.ts +158 -0
  26. package/src/tool/batteryHealthEstimator/i18n/ko.ts +158 -0
  27. package/src/tool/batteryHealthEstimator/i18n/nl.ts +158 -0
  28. package/src/tool/batteryHealthEstimator/i18n/pl.ts +158 -0
  29. package/src/tool/batteryHealthEstimator/i18n/pt.ts +158 -0
  30. package/src/tool/batteryHealthEstimator/i18n/ru.ts +158 -0
  31. package/src/tool/batteryHealthEstimator/i18n/sv.ts +158 -0
  32. package/src/tool/batteryHealthEstimator/i18n/tr.ts +158 -0
  33. package/src/tool/batteryHealthEstimator/i18n/zh.ts +158 -0
  34. package/src/tool/batteryHealthEstimator/index.ts +15 -7
  35. package/src/tool/deadPixelTest/i18n/de.ts +218 -0
  36. package/src/tool/deadPixelTest/i18n/id.ts +218 -0
  37. package/src/tool/deadPixelTest/i18n/it.ts +218 -0
  38. package/src/tool/deadPixelTest/i18n/ja.ts +218 -0
  39. package/src/tool/deadPixelTest/i18n/ko.ts +218 -0
  40. package/src/tool/deadPixelTest/i18n/nl.ts +218 -0
  41. package/src/tool/deadPixelTest/i18n/pl.ts +218 -0
  42. package/src/tool/deadPixelTest/i18n/pt.ts +218 -0
  43. package/src/tool/deadPixelTest/i18n/ru.ts +218 -0
  44. package/src/tool/deadPixelTest/i18n/sv.ts +218 -0
  45. package/src/tool/deadPixelTest/i18n/tr.ts +218 -0
  46. package/src/tool/deadPixelTest/i18n/zh.ts +217 -0
  47. package/src/tool/deadPixelTest/index.ts +15 -7
  48. package/src/tool/gamepadTest/i18n/de.ts +186 -0
  49. package/src/tool/gamepadTest/i18n/id.ts +186 -0
  50. package/src/tool/gamepadTest/i18n/it.ts +186 -0
  51. package/src/tool/gamepadTest/i18n/ja.ts +186 -0
  52. package/src/tool/gamepadTest/i18n/ko.ts +186 -0
  53. package/src/tool/gamepadTest/i18n/nl.ts +186 -0
  54. package/src/tool/gamepadTest/i18n/pl.ts +186 -0
  55. package/src/tool/gamepadTest/i18n/pt.ts +186 -0
  56. package/src/tool/gamepadTest/i18n/ru.ts +186 -0
  57. package/src/tool/gamepadTest/i18n/sv.ts +186 -0
  58. package/src/tool/gamepadTest/i18n/tr.ts +186 -0
  59. package/src/tool/gamepadTest/i18n/zh.ts +186 -0
  60. package/src/tool/gamepadTest/index.ts +15 -7
  61. package/src/tool/gamepadVibrationTester/i18n/de.ts +155 -0
  62. package/src/tool/gamepadVibrationTester/i18n/id.ts +155 -0
  63. package/src/tool/gamepadVibrationTester/i18n/it.ts +155 -0
  64. package/src/tool/gamepadVibrationTester/i18n/ja.ts +155 -0
  65. package/src/tool/gamepadVibrationTester/i18n/ko.ts +155 -0
  66. package/src/tool/gamepadVibrationTester/i18n/nl.ts +155 -0
  67. package/src/tool/gamepadVibrationTester/i18n/pl.ts +155 -0
  68. package/src/tool/gamepadVibrationTester/i18n/pt.ts +155 -0
  69. package/src/tool/gamepadVibrationTester/i18n/ru.ts +155 -0
  70. package/src/tool/gamepadVibrationTester/i18n/sv.ts +155 -0
  71. package/src/tool/gamepadVibrationTester/i18n/tr.ts +155 -0
  72. package/src/tool/gamepadVibrationTester/i18n/zh.ts +155 -0
  73. package/src/tool/gamepadVibrationTester/index.ts +15 -7
  74. package/src/tool/keyboardTest/i18n/de.ts +146 -0
  75. package/src/tool/keyboardTest/i18n/id.ts +146 -0
  76. package/src/tool/keyboardTest/i18n/it.ts +146 -0
  77. package/src/tool/keyboardTest/i18n/ja.ts +146 -0
  78. package/src/tool/keyboardTest/i18n/ko.ts +146 -0
  79. package/src/tool/keyboardTest/i18n/nl.ts +146 -0
  80. package/src/tool/keyboardTest/i18n/pl.ts +146 -0
  81. package/src/tool/keyboardTest/i18n/pt.ts +146 -0
  82. package/src/tool/keyboardTest/i18n/ru.ts +146 -0
  83. package/src/tool/keyboardTest/i18n/sv.ts +146 -0
  84. package/src/tool/keyboardTest/i18n/tr.ts +146 -0
  85. package/src/tool/keyboardTest/i18n/zh.ts +146 -0
  86. package/src/tool/keyboardTest/index.ts +15 -7
  87. package/src/tool/mousePollingTest/i18n/de.ts +135 -0
  88. package/src/tool/mousePollingTest/i18n/id.ts +135 -0
  89. package/src/tool/mousePollingTest/i18n/it.ts +135 -0
  90. package/src/tool/mousePollingTest/i18n/ja.ts +135 -0
  91. package/src/tool/mousePollingTest/i18n/ko.ts +135 -0
  92. package/src/tool/mousePollingTest/i18n/nl.ts +135 -0
  93. package/src/tool/mousePollingTest/i18n/pl.ts +135 -0
  94. package/src/tool/mousePollingTest/i18n/pt.ts +135 -0
  95. package/src/tool/mousePollingTest/i18n/ru.ts +135 -0
  96. package/src/tool/mousePollingTest/i18n/sv.ts +135 -0
  97. package/src/tool/mousePollingTest/i18n/tr.ts +135 -0
  98. package/src/tool/mousePollingTest/i18n/zh.ts +135 -0
  99. package/src/tool/mousePollingTest/index.ts +15 -7
  100. package/src/tool/toneGenerator/i18n/de.ts +146 -0
  101. package/src/tool/toneGenerator/i18n/id.ts +146 -0
  102. package/src/tool/toneGenerator/i18n/it.ts +146 -0
  103. package/src/tool/toneGenerator/i18n/ja.ts +146 -0
  104. package/src/tool/toneGenerator/i18n/ko.ts +146 -0
  105. package/src/tool/toneGenerator/i18n/nl.ts +146 -0
  106. package/src/tool/toneGenerator/i18n/pl.ts +146 -0
  107. package/src/tool/toneGenerator/i18n/pt.ts +146 -0
  108. package/src/tool/toneGenerator/i18n/ru.ts +146 -0
  109. package/src/tool/toneGenerator/i18n/sv.ts +146 -0
  110. package/src/tool/toneGenerator/i18n/tr.ts +146 -0
  111. package/src/tool/toneGenerator/i18n/zh.ts +146 -0
  112. package/src/tool/toneGenerator/index.ts +15 -7
  113. 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-svenska';
6
+ const title = 'Gamepad & Controller Test Online';
7
+ const description = 'Testa din Xbox-, PlayStation- eller PC-kontroll. Visualisera döda zoner, joystickdrift och knappar.';
8
+
9
+ const faqData = [
10
+ {
11
+ question: 'Vad är Joystickdrift?',
12
+ answer: 'Drift uppstår när kontrollen registrerar rörelse utan att joysticken vidrörs. Det orsakas av slitage på de interna potentiometrarna, som skickar en falsk elektrisk signal i en konstant riktning.',
13
+ },
14
+ {
15
+ question: 'Hur kan jag fixa drift med mjukvara?',
16
+ answer: 'Om driften är mild kan du konfigurera en större "Död zon" (Deadzone) i dina spelinställningar. Detta ignorerar små joystickrörelser i mitten.',
17
+ },
18
+ {
19
+ question: 'Är det kompatibelt med PS5-, Xbox- och Switch-kontroller?',
20
+ answer: 'Ja. Vårt verktyg använder standard Gamepad API från moderna webbläsare, som upptäcker nästan alla kontroller anslutna via USB eller Bluetooth, inklusive DualSense, DualShock 4 och Xbox-kontroller.',
21
+ },
22
+ {
23
+ question: 'Varför upptäcker inte webbläsaren min kontroll?',
24
+ answer: 'Av säkerhetsskäl aktiverar webbläsare endast gamepaden efter den första knapptryckningen. Om den inte visas, tryck på valfri knapp (som A eller X) och se till att du inte är i strikt inkognitoläge.',
25
+ },
26
+ ];
27
+
28
+ const howToData = [
29
+ {
30
+ name: 'Anslut kontrollen',
31
+ text: 'Anslut din gamepad via USB eller para ihop den via Bluetooth med din dator.',
32
+ },
33
+ {
34
+ name: 'Aktivera detektering',
35
+ text: 'Rör på joystickarna eller tryck på valfri knapp så att webbläsaren känner igen den anslutna enheten.',
36
+ },
37
+ {
38
+ name: 'Testa döda zoner',
39
+ text: 'Släpp joystickarna och observera axlarna på skärmen. Om värdena inte är 0,0000 har du en lätt drift.',
40
+ },
41
+ {
42
+ name: 'Verifiera knappar och vibration',
43
+ text: 'Tryck på varje knapp och avtryckare. Visuella indikatorer bör tändas och om din kontroll stöder det kan du testa vibrationsmotorn.',
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: 'sv',
79
+ };
80
+
81
+ export const content: ToolLocaleContent<TestMandoUI> = {
82
+ slug,
83
+ title,
84
+ description,
85
+ faqTitle: 'Vanliga frågor',
86
+ faq: faqData,
87
+ bibliographyTitle: 'Tekniska referenser',
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: 'Gamepad Test Online: Upptäck Drift och Joystickproblem',
104
+ level: 2,
105
+ },
106
+ {
107
+ type: 'paragraph',
108
+ html: 'Gratis verktyg för att testa Xbox-, PlayStation-, Switch- och andra kontroller. Visualisera döda zoner, detektera drift och testa vibration.',
109
+ },
110
+ {
111
+ type: 'title',
112
+ text: 'Vad är Joystickdrift',
113
+ level: 3,
114
+ },
115
+ {
116
+ type: 'paragraph',
117
+ html: 'Drift är ett vanligt fel på analoga joysticks där spaken registrerar rörelse utan att man rör vid den. Det orsakas av slitage på de interna potentiometrarna.',
118
+ },
119
+ {
120
+ type: 'title',
121
+ text: 'Kontrollkompatibilitet',
122
+ level: 3,
123
+ },
124
+ {
125
+ type: 'paragraph',
126
+ html: 'Kompatibel med Xbox One, Xbox Series X/S, PlayStation 4, PlayStation 5 (DualSense), Nintendo Switch Pro och praktiskt taget vilken modern USB- eller Bluetooth-gamepad som helst.',
127
+ },
128
+ ],
129
+ ui: {
130
+ badge: 'Inmatningstest',
131
+ title: 'Gamepad och kontrolltest',
132
+ description: 'Testa din kontroll och upptäck problem.',
133
+ connectionMessage: 'Anslut din USB- eller Bluetooth-enhet',
134
+ connectionStatus: 'Ansluten',
135
+ axisLabel: 'Axlar',
136
+ buttonsLabel: 'Knappar',
137
+ vibrationTitle: 'Vibrationstest',
138
+ vibrationDescription: 'Kräver webbläsarstöd och kompatibel gamepad.',
139
+ vibrationLow: 'Låg (Rumble)',
140
+ vibrationHigh: 'Hög (Buzz)',
141
+ eventHistoryTitle: 'Händelsehistorik',
142
+ eventHistoryClear: 'Rensa',
143
+ eventWaiting: 'Väntar på händelser...',
144
+ gameStartBtn: 'STARTA UTMANING',
145
+ gameControllerWarning: 'Anslut en gamepad eller använd tangentbord',
146
+ gameTimer: 'Timer',
147
+ gameScore: 'Poäng',
148
+ gameInstruction: 'Tryck snabbt',
149
+ gameCompleted: 'Utmaning slutförd',
150
+ gameNewRecord: 'NYTT REKORD',
151
+ gameRestartBtn: 'Försök igen',
152
+ gameFeedback: 'Du är en knapplegend',
153
+ gameIntroTitlePre: 'Reflexer som en ',
154
+ gameIntroHighlight: 'Pro Gamer',
155
+ gameIntroTitlePost: '?',
156
+ gameIntroDescPre: 'Testa din kontrolls latens och din reaktionshastighet. Du har ',
157
+ gameIntroDescSeconds: '30 sekunder',
158
+ gameIntroDescPost: ' på dig att bemästra knapparna.',
159
+ gameShareBtn: 'DELA RANK',
160
+ gameLogConnected: 'Ansluten',
161
+ gameLogDisconnected: 'Frånkopplad',
162
+ gameLogCleared: 'Loggen rensad...',
163
+ gameLogBtnPrefix: 'Knapp',
164
+ gameVibNotSupported: 'Vibration stöds inte.',
165
+ gameVibLow: 'Låg',
166
+ gameVibHigh: 'Hög',
167
+ gameMoveStick: 'RÖR SPAKEN',
168
+ gamePress: 'TRYCK',
169
+ rankLegendaryName: 'LEGENDARISK',
170
+ rankLegendaryDesc: 'Dina fingrar rör sig med ljudets hastighet.',
171
+ rankLegendaryFlavor: 'Min kontroll flyger!',
172
+ rankProName: 'PRO GAMER',
173
+ rankProDesc: 'Du har stålreflexer och en välkalibrerad kontroll.',
174
+ rankProFlavor: 'Min kontroll flyger!',
175
+ rankGamerName: 'GAMER',
176
+ rankGamerDesc: 'Inte illa, men du behöver mer träning för tävlingsspel.',
177
+ rankGamerFlavor: 'Nästan där!',
178
+ rankNoobName: 'NOOB',
179
+ rankNoobDesc: 'Är du säker på att kontrollen är påslagen?',
180
+ rankNoobFlavor: 'Kontrollen har något emot mig!',
181
+ gameShareText: 'Kan du slå mig?',
182
+ gameShareScorePrefix: 'Jag fick',
183
+ gameShareScoreSuffix: 'träffar',
184
+ gameShareTitle: 'Gamepad Test Online',
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 = 'oyun-kolu-testi-online';
6
+ const title = 'Çevrimiçi Oyun Kolu ve Kontrolcü Testi';
7
+ const description = 'Xbox, PlayStation veya PC kontrolcünüzü test edin. Ölü bölgeleri, joystick kaymasını ve düğmeleri görselleştirin.';
8
+
9
+ const faqData = [
10
+ {
11
+ question: 'Joystick Kayması (Drift) Nedir?',
12
+ answer: 'Kayma, kontrolcü joystick\'e dokunulmadan hareket algıladığında meydana gelir. Bu, sabit bir yönde yanlış elektrik sinyali gönderen dahili potansiyometrelerdeki aşınmadan kaynaklanır.',
13
+ },
14
+ {
15
+ question: 'Kaymayı yazılım yoluyla nasıl düzeltebilirim?',
16
+ answer: 'Kayma hafifse, oyun ayarlarınızda daha büyük bir "Ölü Bölge" (Deadzone) yapılandırabilirsiniz. Bu, merkezdeki küçük joystick hareketlerini görmezden gelir.',
17
+ },
18
+ {
19
+ question: 'PS5, Xbox ve Switch kontrolcüleriyle uyumlu mu?',
20
+ answer: 'Evet. Aracımız, DualSense, DualShock 4 ve Xbox Kontrolcüleri dahil olmak üzere USB veya Bluetooth üzerinden bağlanan hemen hemen her kontrolcüyü algılayan modern tarayıcıların standart Gamepad API\'sini kullanır.',
21
+ },
22
+ {
23
+ question: 'Tarayıcı neden kontrolcümü algılamıyor?',
24
+ answer: 'Güvenlik nedeniyle tarayıcılar, oyun kolunu yalnızca ilk düğme basışından sonra etkinleştirir. Görünmüyorsa, herhangi bir düğmeye (A veya X gibi) basın ve katı gizli modda olmadığınızdan emin olun.',
25
+ },
26
+ ];
27
+
28
+ const howToData = [
29
+ {
30
+ name: 'Kontrolcüyü bağlayın',
31
+ text: 'Oyun kolunuzu USB üzerinden prize takın veya bilgisayarınızla Bluetooth üzerinden eşleştirin.',
32
+ },
33
+ {
34
+ name: 'Algılamayı etkinleştirin',
35
+ text: 'Tarayıcının bağlı cihazı tanıması için joystickleri hareket ettirin veya herhangi bir düğmeye basın.',
36
+ },
37
+ {
38
+ name: 'Ölü bölgeleri test edin',
39
+ text: 'Joystickleri bırakın ve ekrandaki eksenleri gözlemleyin. Değerler 0.0000\'da değilse, hafif bir kayma (drift) var demektir.',
40
+ },
41
+ {
42
+ name: 'Düğmeleri ve titreşimi doğrulayın',
43
+ text: 'Her düğmeye ve tetiğe basın. Görsel göstergeler yanmalı ve kontrolcünüz destekliyorsa titreşim motorunu test edebilirsiniz.',
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: 'tr',
79
+ };
80
+
81
+ export const content: ToolLocaleContent<TestMandoUI> = {
82
+ slug,
83
+ title,
84
+ description,
85
+ faqTitle: 'Sıkça Sorulan Sorular',
86
+ faq: faqData,
87
+ bibliographyTitle: 'Teknik Referanslar',
88
+ bibliography: [
89
+ {
90
+ name: 'Gamepad API Standardı - W3C',
91
+ url: 'https://w3c.github.io/gamepad/',
92
+ },
93
+ {
94
+ name: 'Titreşim API\'sı - MDN Web Belgeleri',
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: 'Çevrimiçi Oyun Kolu Testi: Kayma ve Joystick Sorunlarını Belirleyin',
104
+ level: 2,
105
+ },
106
+ {
107
+ type: 'paragraph',
108
+ html: 'Xbox, PlayStation, Switch ve diğer kontrolcüleri test etmek için ücretsiz araç. Ölü bölgeleri görselleştirin, kaymayı algılayın ve titreşimi test edin.',
109
+ },
110
+ {
111
+ type: 'title',
112
+ text: 'Joystick Kayması (Drift) Nedir',
113
+ level: 3,
114
+ },
115
+ {
116
+ type: 'paragraph',
117
+ html: 'Kayma, analog joysticklerde çubuğa dokunulmadan hareket algılandığı yaygın bir hatadır. Dahili potansiyometrelerdeki aşınmadan kaynaklanır.',
118
+ },
119
+ {
120
+ type: 'title',
121
+ text: 'Kontrolcü Uyumluluğu',
122
+ level: 3,
123
+ },
124
+ {
125
+ type: 'paragraph',
126
+ html: 'Xbox One, Xbox Series X/S, PlayStation 4, PlayStation 5 (DualSense), Nintendo Switch Pro ve hemen hemen her modern USB veya Bluetooth oyun kolu ile uyumludur.',
127
+ },
128
+ ],
129
+ ui: {
130
+ badge: 'Giriş Testi',
131
+ title: 'Oyun Kolu ve Kontrolcü Testi',
132
+ description: 'Kontrolcünüzü test edin ve sorunları algılayın.',
133
+ connectionMessage: 'USB veya Bluetooth cihazınızı bağlayın',
134
+ connectionStatus: 'Bağlı',
135
+ axisLabel: 'Eksenler',
136
+ buttonsLabel: 'Düğmeler',
137
+ vibrationTitle: 'Titreşim Testi',
138
+ vibrationDescription: 'Tarayıcı desteği ve uyumlu oyun kolu gerektirir.',
139
+ vibrationLow: 'Düşük (Rumble)',
140
+ vibrationHigh: 'Yüksek (Buzz)',
141
+ eventHistoryTitle: 'Olay Geçmişi',
142
+ eventHistoryClear: 'Temizle',
143
+ eventWaiting: 'Olaylar bekleniyor...',
144
+ gameStartBtn: 'MÜCADELEYİ BAŞLAT',
145
+ gameControllerWarning: 'Bir oyun kolu bağlayın veya klavye kullanın',
146
+ gameTimer: 'Zamanlayıcı',
147
+ gameScore: 'Puan',
148
+ gameInstruction: 'Hızlı bas',
149
+ gameCompleted: 'Mücadele Tamamlandı',
150
+ gameNewRecord: 'YENİ REKOR',
151
+ gameRestartBtn: 'Tekrar Dene',
152
+ gameFeedback: 'Bir düğme efsanesisin',
153
+ gameIntroTitlePre: 'Pro Gamer ',
154
+ gameIntroHighlight: 'Refleksleri',
155
+ gameIntroTitlePost: '?',
156
+ gameIntroDescPre: 'Kontrolcü gecikmesini ve tepki hızınızı test edin. Düğmelerde ustalaşmak için ',
157
+ gameIntroDescSeconds: '30 saniyeniz',
158
+ gameIntroDescPost: ' var.',
159
+ gameShareBtn: 'SIRALAMAYI PAYLAŞ',
160
+ gameLogConnected: 'Bağlı',
161
+ gameLogDisconnected: 'Bağlantı Kesildi',
162
+ gameLogCleared: 'Günlük temizlendi...',
163
+ gameLogBtnPrefix: 'Düğme',
164
+ gameVibNotSupported: 'Titreşim desteklenmiyor.',
165
+ gameVibLow: 'Düşük',
166
+ gameVibHigh: 'Yüksek',
167
+ gameMoveStick: 'ÇUBUĞU HAREKET ETTİR',
168
+ gamePress: 'BAS',
169
+ rankLegendaryName: 'EFSANEVİ',
170
+ rankLegendaryDesc: 'Parmakların ses hızında hareket ediyor.',
171
+ rankLegendaryFlavor: 'Kontrolcüm uçuyor!',
172
+ rankProName: 'PRO GAMER',
173
+ rankProDesc: 'Çelik gibi reflekslerin ve iyi kalibre edilmiş bir kontrolcün var.',
174
+ rankProFlavor: 'Kontrolcüm uçuyor!',
175
+ rankGamerName: 'GAMER',
176
+ rankGamerDesc: 'Fena değil, ancak rekabetçi oyunlar için daha fazla pratiğe ihtiyacın var.',
177
+ rankGamerFlavor: 'Neredeyse oluyordu!',
178
+ rankNoobName: 'NOOB',
179
+ rankNoobDesc: 'Kontrolcünün açık olduğundan emin misin?',
180
+ rankNoobFlavor: 'Kontrolcü bana gıcık herhalde!',
181
+ gameShareText: 'Beni yenebilir misin?',
182
+ gameShareScorePrefix: 'Skorum:',
183
+ gameShareScoreSuffix: 'isabet',
184
+ gameShareTitle: 'Çevrimiçi Oyun Kolu Testi',
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: '什么是摇杆漂移 (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
- es: async () => es,
22
- en: async () => en,
23
- fr: async () => fr,
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