Compare commits
397 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fe11326615 | ||
|
|
ad5eb71cf9 | ||
|
|
f37ab38ebc | ||
|
|
d3596a9202 | ||
|
|
648e47bc87 | ||
|
|
9aee36645a | ||
|
|
80ba000b74 | ||
|
|
3955812375 | ||
|
|
3f0d407ada | ||
|
|
a19beabbe8 | ||
|
|
88a8c3679b | ||
|
|
a525897987 | ||
|
|
1b5f804da0 | ||
|
|
dc10b7acca | ||
|
|
0506e083fe | ||
|
|
44468cbaa4 | ||
|
|
fc6cc85fda | ||
|
|
4c0e7f020f | ||
|
|
65bcfc9a2e | ||
|
|
8de1a73f07 | ||
|
|
1dd51cd50a | ||
|
|
f5771d5e75 | ||
|
|
5cfe933505 | ||
|
|
c77d3ac5d5 | ||
|
|
9acf2312db | ||
|
|
c60e52c5a8 | ||
|
|
3e204101d5 | ||
|
|
1eb6e33ab8 | ||
|
|
af660f344d | ||
|
|
3b825b727a | ||
|
|
f8d7a6a7a0 | ||
|
|
c310904f77 | ||
|
|
8d5eb36b2a | ||
|
|
a326310baa | ||
|
|
a057f3e55a | ||
|
|
0fca2c39ea | ||
|
|
f67a35a92f | ||
|
|
637c66818b | ||
|
|
33a937aff2 | ||
|
|
4b28aeafe3 | ||
|
|
d23dda00bb | ||
|
|
042baa0c11 | ||
|
|
c25583244d | ||
|
|
ef894e3cf3 | ||
|
|
e55d462ea1 | ||
|
|
9bd149b997 | ||
|
|
2f5d9400ec | ||
|
|
14a3edb290 | ||
|
|
60724ae91a | ||
|
|
9bc916ac77 | ||
|
|
15a3bde66d | ||
|
|
fe2308236c | ||
|
|
70d5457e99 | ||
|
|
68b573a762 | ||
|
|
4344b8abed | ||
|
|
2c5ebcab7e | ||
|
|
f7fe3d297e | ||
|
|
b66d418bfa | ||
|
|
3518decae7 | ||
|
|
2ea560f844 | ||
|
|
ab9bfc301b | ||
|
|
963503dcb4 | ||
|
|
f3c30f0307 | ||
|
|
d10e4e7d4d | ||
|
|
11acb4ec60 | ||
|
|
b717b97669 | ||
|
|
5293fbed29 | ||
|
|
ac0b46b2b6 | ||
|
|
70142bb6b5 | ||
|
|
c43ad02baf | ||
|
|
4e3c48c4fb | ||
|
|
5776340091 | ||
|
|
38d147dc70 | ||
|
|
0bf5e18e0b | ||
|
|
0d89de8acc | ||
|
|
a6259a0bbc | ||
|
|
bd13f66c1c | ||
|
|
4d7f966d8c | ||
|
|
b0fea23081 | ||
|
|
e63eb47374 | ||
|
|
f9d43626e7 | ||
|
|
060b24a9f8 | ||
|
|
4693e5a08f | ||
|
|
21d2cc3630 | ||
|
|
6b1c5a8dc4 | ||
|
|
66b7107167 | ||
|
|
dda8fc2ff1 | ||
|
|
55ef87d561 | ||
|
|
3de54422d2 | ||
|
|
a704160fc2 | ||
|
|
e2d4124e53 | ||
|
|
24ec34929c | ||
|
|
ba10cfcbdd | ||
|
|
35f59f3d92 | ||
|
|
257a0b5a6a | ||
|
|
3bb0bd2861 | ||
|
|
abd2b91e07 | ||
|
|
66712f7094 | ||
|
|
e865213018 | ||
|
|
8e01d92572 | ||
|
|
c8f7c40cb7 | ||
|
|
1138440119 | ||
|
|
b72c9c93c9 | ||
|
|
4da151a3a3 | ||
|
|
496b0ea3d7 | ||
|
|
5aeaae377e | ||
|
|
718c7f7ab0 | ||
|
|
ec583436ed | ||
|
|
a1447b867d | ||
|
|
d6bfe2842d | ||
|
|
6aacfad161 | ||
|
|
1917b18eee | ||
|
|
bbfb76c052 | ||
|
|
f905a502fd | ||
|
|
bd53192bd7 | ||
|
|
19aa3d3feb | ||
|
|
cc9dbaae73 | ||
|
|
16e4e24f65 | ||
|
|
a3cc71b361 | ||
|
|
ecb038f9f3 | ||
|
|
acac70de5f | ||
|
|
6bea7dfec2 | ||
|
|
420648d851 | ||
|
|
13a6b0994e | ||
|
|
fc14d5353b | ||
|
|
2f39c94f05 | ||
|
|
1de4ea0121 | ||
|
|
e586dddbeb | ||
|
|
d3298dbdad | ||
|
|
49e7661832 | ||
|
|
a543438462 | ||
|
|
70c527f2ae | ||
|
|
479e101aa6 | ||
|
|
9b30912805 | ||
|
|
b35ae3a85f | ||
|
|
7ca515b3db | ||
|
|
86febfb699 | ||
|
|
9476d3f001 | ||
|
|
6746fb8490 | ||
|
|
23751ac893 | ||
|
|
bd69bdd3eb | ||
|
|
91869723e5 | ||
|
|
3eeffaf0c4 | ||
|
|
7909007d2c | ||
|
|
9795f6385f | ||
|
|
55c44f4216 | ||
|
|
1df52b17c4 | ||
|
|
866940616b | ||
|
|
9e5018ce08 | ||
|
|
1661b4bdaa | ||
|
|
99aa74787c | ||
|
|
570d7f6c88 | ||
|
|
22c2ad267f | ||
|
|
53e4ba84c7 | ||
|
|
d71a5e4c03 | ||
|
|
3f24c6cb72 | ||
|
|
be532db363 | ||
|
|
889ecf6b29 | ||
|
|
5efa1b5be4 | ||
|
|
63e697dd37 | ||
|
|
44b05328e6 | ||
|
|
fea0e9c3fa | ||
|
|
0e8e7fc281 | ||
|
|
28604b0e36 | ||
|
|
e4d450c1c8 | ||
|
|
6a2feab7bd | ||
|
|
25f52689e1 | ||
|
|
6073803215 | ||
|
|
68bfe1388b | ||
|
|
7a52f1eab8 | ||
|
|
72c5dfbbeb | ||
|
|
a6f1b2e503 | ||
|
|
aeb0c161ea | ||
|
|
977c522b5d | ||
|
|
e9778d44da | ||
|
|
794485c265 | ||
|
|
1252f43d23 | ||
|
|
53fd91fdb3 | ||
|
|
b3712a24c2 | ||
|
|
3bc5c0eb34 | ||
|
|
b240d1d65c | ||
|
|
3b2b3d5c13 | ||
|
|
1fab479806 | ||
|
|
c30e5f59b8 | ||
|
|
a3ab802777 | ||
|
|
10017df554 | ||
|
|
ededb314a0 | ||
|
|
0bea52d01a | ||
|
|
be8e151212 | ||
|
|
4c2b49bcf4 | ||
|
|
50dcc191e8 | ||
|
|
8b7e8425de | ||
|
|
e1141b25a7 | ||
|
|
c295cfa508 | ||
|
|
48fc4b5dce | ||
|
|
7d4ddfdfad | ||
|
|
3493c4de74 | ||
|
|
42fc94a9a2 | ||
|
|
d4ba4a5fdd | ||
|
|
f82cdcf663 | ||
|
|
f05499defd | ||
|
|
7038beb545 | ||
|
|
f5e7c4cd85 | ||
|
|
e69cb6ef95 | ||
|
|
c17cdfc92b | ||
|
|
9d45f17cfc | ||
|
|
aeb7e9010a | ||
|
|
7b19117311 | ||
|
|
a72e0223b9 | ||
|
|
f43aa7af83 | ||
|
|
f7f61b88b9 | ||
|
|
2fe3416c5c | ||
|
|
9f5c8914bc | ||
|
|
247f5be479 | ||
|
|
caa1b260a7 | ||
|
|
398d7e8592 | ||
|
|
01dca68b17 | ||
|
|
470bdaeeb4 | ||
|
|
71633d7718 | ||
|
|
9bb9f2f082 | ||
|
|
f0dc0b829e | ||
|
|
32a0f57b0b | ||
|
|
45d68bd75e | ||
|
|
28f1f4fa02 | ||
|
|
2b1f42b4eb | ||
|
|
eaa94d8bbc | ||
|
|
67c9cd903f | ||
|
|
8ba5991314 | ||
|
|
188929ff6f | ||
|
|
02c1f1262b | ||
|
|
8e8592438e | ||
|
|
0aad6497a8 | ||
|
|
372e8abf57 | ||
|
|
d1b6cd5c96 | ||
|
|
390f2d97b6 | ||
|
|
4fe737aed1 | ||
|
|
53456b9663 | ||
|
|
994501a614 | ||
|
|
3fc58dbe64 | ||
|
|
2a834b130b | ||
|
|
c436d94ead | ||
|
|
1e7d4e83cc | ||
|
|
f643dbe005 | ||
|
|
b85f12eccd | ||
|
|
0aac1509aa | ||
|
|
5237c7ca46 | ||
|
|
b163a7d1d4 | ||
|
|
6f662c6a7a | ||
|
|
77b3cedfad | ||
|
|
1fa7066477 | ||
|
|
65376ea717 | ||
|
|
97317bd7b2 | ||
|
|
ef5b307046 | ||
|
|
9e359c9dcd | ||
|
|
152a11d7bc | ||
|
|
5c1a0f44f8 | ||
|
|
6c876b896b | ||
|
|
0105d3d71d | ||
|
|
4edbf811d7 | ||
|
|
7a30759a12 | ||
|
|
e83c790e5a | ||
|
|
120c1423a1 | ||
|
|
d1cbaeffd8 | ||
|
|
10123705f0 | ||
|
|
901b93ee5d | ||
|
|
0212e3baaa | ||
|
|
5816ef960b | ||
|
|
c65f5bb9c0 | ||
|
|
8cce06308d | ||
|
|
96b48019ef | ||
|
|
92b48f281c | ||
|
|
9c2d1b45ed | ||
|
|
2365585964 | ||
|
|
5a30e5755e | ||
|
|
aa01ce0ca7 | ||
|
|
9201b1dc72 | ||
|
|
3c70866ead | ||
|
|
9b0ec703ee | ||
|
|
19eac584b8 | ||
|
|
b78821985b | ||
|
|
8b3ffacb6f | ||
|
|
0dbbacc69a | ||
|
|
f1c0e0d1d3 | ||
|
|
5f296c766f | ||
|
|
25da65c1d2 | ||
|
|
5d7d4264c0 | ||
|
|
aba934c429 | ||
|
|
3d2f1ca4c9 | ||
|
|
aec8a589af | ||
|
|
dbcf62dc76 | ||
|
|
41208d2727 | ||
|
|
3a1407eb19 | ||
|
|
da13d7fb1e | ||
|
|
898d1d14d5 | ||
|
|
1a6b9026e3 | ||
|
|
600384297d | ||
|
|
e955f4ae66 | ||
|
|
3c583151a3 | ||
|
|
e514242393 | ||
|
|
19cf9fac9b | ||
|
|
8e73f36473 | ||
|
|
526fabf442 | ||
|
|
2d80df041b | ||
|
|
89931c2817 | ||
|
|
e68f136a13 | ||
|
|
af18739ed1 | ||
|
|
b34a879939 | ||
|
|
5d1236c115 | ||
|
|
aca3bc870b | ||
|
|
7715215b9e | ||
|
|
044e39a159 | ||
|
|
5e7fc781be | ||
|
|
1b80f7b029 | ||
|
|
84dae5091f | ||
|
|
09b0e08434 | ||
|
|
2679fdd908 | ||
|
|
a209f980f5 | ||
|
|
13c8e8242d | ||
|
|
ab91519ae7 | ||
|
|
16f232e6d1 | ||
|
|
59ba2517ca | ||
|
|
10525e0463 | ||
|
|
b84fafc3dd | ||
|
|
2c74de0ac3 | ||
|
|
e50866440f | ||
|
|
0aadd5ac35 | ||
|
|
080c4233ae | ||
|
|
e5569d29bb | ||
|
|
4aa1044b3e | ||
|
|
c109e20700 | ||
|
|
9c58854d8e | ||
|
|
c5a2fbeeb5 | ||
|
|
35e81c12a1 | ||
|
|
cdec3b403e | ||
|
|
dccd885924 | ||
|
|
f4bed5f8c4 | ||
|
|
f647ab8813 | ||
|
|
3ad7b18516 | ||
|
|
225ba206bc | ||
|
|
e93eeddbda | ||
|
|
22d50ebce8 | ||
|
|
d2fa963132 | ||
|
|
bb7eb2d4d7 | ||
|
|
5320bb018b | ||
|
|
c927d24133 | ||
|
|
eab28d4a2c | ||
|
|
cc7b646d93 | ||
|
|
b4f4aa8b30 | ||
|
|
ca88ac20b6 | ||
|
|
346add9b3e | ||
|
|
580df44de5 | ||
|
|
7b13ccdd18 | ||
|
|
d67e5003df | ||
|
|
f57e1dc4ec | ||
|
|
cbd6237ddd | ||
|
|
5f7480e028 | ||
|
|
9e48207fcc | ||
|
|
86fc8624be | ||
|
|
b179d4c446 | ||
|
|
e98f41b858 | ||
|
|
20075c4552 | ||
|
|
d5e9bade48 | ||
|
|
3112784087 | ||
|
|
26c406b19a | ||
|
|
fadb822d6e | ||
|
|
1c36ead286 | ||
|
|
ecd904c70e | ||
|
|
d38f69c45a | ||
|
|
5ed9b14616 | ||
|
|
ad38ee688c | ||
|
|
5773adfdbd | ||
|
|
e16e3a4ef1 | ||
|
|
230dff0548 | ||
|
|
c48024696b | ||
|
|
3743b2fe9c | ||
|
|
654d81d4d9 | ||
|
|
9d3a105157 | ||
|
|
b6622bdef3 | ||
|
|
11fd1850e8 | ||
|
|
4df961d1d4 | ||
|
|
f77d0a81c7 | ||
|
|
f8546a7759 | ||
|
|
0c812c6a4f | ||
|
|
b10d6da3e1 | ||
|
|
d59f4818b4 | ||
|
|
d3ebd151cb | ||
|
|
f82419e3c4 | ||
|
|
a0f845aa1f | ||
|
|
e67bb8349e | ||
|
|
75177f7072 | ||
|
|
1fa1bba031 | ||
|
|
42c9aed737 | ||
|
|
ccd5de29c6 | ||
|
|
a4a3a96138 | ||
|
|
cd799a2fa0 | ||
|
|
18fb301cb0 | ||
|
|
0c948baec6 |
74
.github/workflows/gulp-deploy.yml
vendored
Normal file
@@ -0,0 +1,74 @@
|
||||
name: Build and Deploy to GitHub Pages
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- "**"
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
deploy:
|
||||
description: "Deploy to GitHub Pages?"
|
||||
required: true
|
||||
default: "true"
|
||||
type: choice
|
||||
options:
|
||||
- "true"
|
||||
- "false"
|
||||
|
||||
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
|
||||
permissions:
|
||||
contents: read
|
||||
pages: write
|
||||
id-token: write
|
||||
|
||||
# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
|
||||
# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
|
||||
concurrency:
|
||||
group: "pages"
|
||||
cancel-in-progress: false
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
node-version: [20.x]
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
cache: "npm"
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
|
||||
- name: Build project
|
||||
run: npm run build:prod
|
||||
|
||||
- name: Setup Pages
|
||||
uses: actions/configure-pages@v4
|
||||
if: inputs.deploy == 'true'
|
||||
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-pages-artifact@v3
|
||||
if: inputs.deploy == 'true'
|
||||
with:
|
||||
path: "./dist"
|
||||
|
||||
deploy:
|
||||
environment:
|
||||
name: github-pages
|
||||
url: ${{ steps.deployment.outputs.page_url }}
|
||||
runs-on: ubuntu-latest
|
||||
needs: build
|
||||
if: inputs.deploy == 'true'
|
||||
steps:
|
||||
- name: Deploy to GitHub Pages
|
||||
id: deployment
|
||||
uses: actions/deploy-pages@v4
|
||||
58
.gitignore
vendored
Normal file
@@ -0,0 +1,58 @@
|
||||
# Dependencies
|
||||
node_modules/
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
|
||||
# Build outputs
|
||||
dist/
|
||||
.tmp/
|
||||
|
||||
# OS generated files
|
||||
.DS_Store
|
||||
.DS_Store?
|
||||
._*
|
||||
.Spotlight-V100
|
||||
.Trashes
|
||||
ehthumbs.db
|
||||
Thumbs.db
|
||||
|
||||
# IDE files
|
||||
.vscode/
|
||||
.idea/
|
||||
*.swp
|
||||
*.swo
|
||||
|
||||
# Logs
|
||||
logs
|
||||
*.log
|
||||
|
||||
# Runtime data
|
||||
pids
|
||||
*.pid
|
||||
*.seed
|
||||
*.pid.lock
|
||||
|
||||
# Coverage directory used by tools like istanbul
|
||||
coverage/
|
||||
|
||||
# nyc test coverage
|
||||
.nyc_output
|
||||
|
||||
# Dependency directories
|
||||
jspm_packages/
|
||||
|
||||
# Optional npm cache directory
|
||||
.npm
|
||||
|
||||
# Optional REPL history
|
||||
.node_repl_history
|
||||
|
||||
# Output of 'npm pack'
|
||||
*.tgz
|
||||
|
||||
# Yarn Integrity file
|
||||
.yarn-integrity
|
||||
|
||||
# dotenv environment variables file
|
||||
.env
|
||||
13
CREDITS.md
Normal file
@@ -0,0 +1,13 @@
|
||||
# Credits
|
||||
|
||||
## Developers
|
||||
- the_al
|
||||
- Mathias Malmqvist
|
||||
|
||||
## Special Thanks
|
||||
- **Board model detection**: [Battle Beaver Customs](https://battlebeavercustoms.com/)
|
||||
- **Color detection**: romek77 from Poland
|
||||
|
||||
---
|
||||
|
||||
Thank you to everyone who contributed to this project, whether through code, testing, feedback, or translations. Your support makes this project possible!
|
||||
136
DEVELOPMENT.md
Normal file
@@ -0,0 +1,136 @@
|
||||
# Development Guide
|
||||
|
||||
## Quick Start
|
||||
|
||||
```bash
|
||||
# Install dependencies
|
||||
npm install
|
||||
|
||||
# Start development with auto-reload
|
||||
npm run dev:full
|
||||
```
|
||||
|
||||
Open `https://localhost:8443` in your browser (accept the SSL certificate warning).
|
||||
|
||||
## Available Scripts
|
||||
|
||||
| Script | Description |
|
||||
| --------------------- | --------------------------------------------------------- |
|
||||
| `npm run build` | Build for development (with source maps) |
|
||||
| `npm run build:prod` | Build for production (minified, optimized) |
|
||||
| `npm run clean` | Clean the dist directory |
|
||||
| `npm run serve:https` | Serve built app over HTTPS (required for WebHID) |
|
||||
| `npm run serve` | Serve built app over HTTP (WebHID won't work) |
|
||||
| `npm run start` | Build and serve over HTTPS |
|
||||
| `npm run dev:full` | **Recommended**: Build, watch, and serve with auto-reload |
|
||||
| `npm run watch` | Watch files and rebuild on changes |
|
||||
|
||||
## Development Workflow
|
||||
|
||||
### For Active Development
|
||||
|
||||
```bash
|
||||
npm run dev:full
|
||||
```
|
||||
|
||||
This starts the complete development environment:
|
||||
|
||||
- Builds the application
|
||||
- Watches for file changes
|
||||
- Serves over HTTPS at `https://localhost:8443`
|
||||
- Automatically rebuilds when you save files
|
||||
|
||||
### For Testing Built Version
|
||||
|
||||
```bash
|
||||
npm run start
|
||||
```
|
||||
|
||||
This builds once and serves the result.
|
||||
|
||||
## Important Notes
|
||||
|
||||
### HTTPS Requirement
|
||||
|
||||
The WebHID API requires HTTPS. The development server uses self-signed certificates located at:
|
||||
|
||||
- `server.crt` - SSL certificate
|
||||
- `server.key` - SSL private key
|
||||
|
||||
### Browser Compatibility
|
||||
|
||||
- **Chrome/Edge**: Full WebHID support ✅
|
||||
- **Firefox**: No WebHID support ❌
|
||||
- **Safari**: No WebHID support ❌
|
||||
|
||||
### SSL Certificate Warning
|
||||
|
||||
When first accessing `https://localhost:8443`, your browser will show a security warning because we're using a self-signed certificate. This is normal for development - click "Advanced" and "Proceed to localhost" to continue.
|
||||
|
||||
## File Structure
|
||||
|
||||
```
|
||||
├── js/ # Source JavaScript files
|
||||
│ ├── core.js # Main application entry point
|
||||
│ ├── controllers/ # Controller-specific classes
|
||||
│ └── modals/ # Modal dialog handlers
|
||||
├── css/ # Source CSS files
|
||||
├── templates/ # HTML template files
|
||||
├── lang/ # Translation JSON files
|
||||
├── assets/ # SVG assets
|
||||
├── dist/ # Built application (auto-generated)
|
||||
└── dev-server.js # Custom development server
|
||||
```
|
||||
|
||||
## Build Process
|
||||
|
||||
The build system uses Gulp with the following steps:
|
||||
|
||||
1. **JavaScript**: Bundled with Rollup, supports ES modules
|
||||
2. **CSS**: Concatenated and optionally minified
|
||||
3. **HTML**: Processed and optionally minified
|
||||
4. **Assets**: Copied to dist, SVGs can be inlined in production
|
||||
5. **Languages**: JSON files copied and optionally minified
|
||||
|
||||
### Development vs Production
|
||||
|
||||
| Feature | Development | Production |
|
||||
| -------------- | ----------- | ---------- |
|
||||
| Source maps | ✅ | ❌ |
|
||||
| Minification | ❌ | ✅ |
|
||||
| Asset inlining | ❌ | ✅ |
|
||||
| File hashing | ❌ | ✅ |
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Port Already in Use
|
||||
|
||||
If port 8443 is busy:
|
||||
|
||||
```bash
|
||||
PORT=8444 npm run serve:https
|
||||
```
|
||||
|
||||
### Build Errors
|
||||
|
||||
Clean and rebuild:
|
||||
|
||||
```bash
|
||||
npm run clean
|
||||
npm run build
|
||||
```
|
||||
|
||||
### SSL Certificate Issues
|
||||
|
||||
The certificates are pre-generated. If you need new ones:
|
||||
|
||||
```bash
|
||||
openssl req -x509 -newkey rsa:4096 -keyout server.key -out server.crt -days 365 -nodes -subj "/CN=localhost"
|
||||
```
|
||||
|
||||
### WebHID Not Working
|
||||
|
||||
1. Make sure you're using HTTPS (`npm run serve:https`)
|
||||
2. Use Chrome or Edge browser
|
||||
3. Accept the SSL certificate warning
|
||||
4. Check browser console for errors
|
||||
21
LICENSE.txt
Normal file
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2024 the_al
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
48
LINUX.md
Normal file
@@ -0,0 +1,48 @@
|
||||
# Linux Setup Guide for DualShock / DualSense Tools
|
||||
|
||||
This .md resolving problem of `Main Error Stack: NotAllowedError: Failed to open the device` on Linux.
|
||||
|
||||
Under Linux (specifically Debian and Debian based distros, web browsers are restricted from accessing raw hardware devices (`hidraw`) by default. You may encounter a `NotAllowedError: Failed to open the device` error.
|
||||
|
||||
Follow these steps to configure your system permissions properly and safe.
|
||||
|
||||
We're going to simply add a rules in `udev` ( Linux kernel device manager )
|
||||
|
||||
---
|
||||
|
||||
## 1. Browser Requirements (Avoid Snaps/Flatpaks)
|
||||
|
||||
Modern distributions like Ubuntu 24.04 LTS install browsers (Firefox, Chromium) as **Snap** or **Flatpak** packages by default. These versions run in a strict sandbox that blocks WebHID completely.
|
||||
|
||||
* **Firefox** does not support WebHID at all on Linux.
|
||||
* **Recommended:** Use **Google Chrome** or **Brave**, but ensure they are installed via a native system package (**`.deb`** or **`.rpm`**) downloaded directly from their official websites, **not** from the Ubuntu App Center / Software Store.
|
||||
|
||||
---
|
||||
|
||||
## 2. Add udev Rules for PlayStation Controllers
|
||||
|
||||
You need to grant your user session permission to read and write to Sony controllers.
|
||||
|
||||
Open your terminal and run the following command to create a persistent rule file for both DualShock 4 (PS4) and DualSense (PS5) controllers:
|
||||
|
||||
create file in /etc/udev/rules.d/99-sony-controllers.rules
|
||||
|
||||
here is two rules to resolve the problem.
|
||||
|
||||
*simply add it with your favorite text editor*
|
||||
|
||||
### DualSense
|
||||
`SUBSYSTEM=="hidraw", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0ce6", GROUP="plugdev", MODE="0660"`
|
||||
|
||||
### DualShock 4
|
||||
`SUBSYSTEM=="hidraw", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="09cc", GROUP="plugdev", MODE="0660"`
|
||||
|
||||
## 3. Reload rules
|
||||
|
||||
after that reload rules with theses commands to apply changes
|
||||
|
||||
`sudo udevadm control --reload-rules && sudo udevadm trigger`
|
||||
|
||||
## 4. Final
|
||||
|
||||
Unplug, refresh (F5), plug it back in and enjoy ! :)
|
||||
94
README.md
@@ -1,3 +1,93 @@
|
||||
# dualshock-tools.github.io
|
||||
# DualShock Calibration GUI
|
||||
|
||||
The code behind the DualShock Calibration GUI
|
||||
A web-based calibration tool for PlayStation DualShock 4, DualSense, and DualSense Edge controllers using the WebHID API.
|
||||
|
||||
## Features
|
||||
|
||||
- Controller connection via WebHID API
|
||||
- Stick calibration and range calibration
|
||||
- Input testing and visualization
|
||||
- Battery status display
|
||||
- Multi-language support (20+ languages)
|
||||
- Progressive Web App capabilities
|
||||
|
||||
## Development
|
||||
|
||||
### Prerequisites
|
||||
|
||||
- Node.js (v16 or higher)
|
||||
- npm or yarn
|
||||
- Modern browser with WebHID support (Chrome/Edge)
|
||||
|
||||
### Getting Started
|
||||
|
||||
1. **Install dependencies:**
|
||||
|
||||
```bash
|
||||
npm install
|
||||
```
|
||||
|
||||
2. **Build the application:**
|
||||
|
||||
```bash
|
||||
npm run build
|
||||
```
|
||||
|
||||
3. **Start the development server:**
|
||||
|
||||
```bash
|
||||
npm run start
|
||||
```
|
||||
|
||||
The app will be available at `https://localhost:8443`
|
||||
|
||||
### Development Scripts
|
||||
|
||||
- `npm run build` - Build the application for development
|
||||
- `npm run build:prod` - Build the application for production
|
||||
- `npm run clean` - Clean the dist directory
|
||||
- `npm run serve:https` - Serve the built app over HTTPS (required for WebHID)
|
||||
- `npm run serve` - Serve the built app over HTTP (WebHID won't work)
|
||||
- `npm run start` - Build and serve the app
|
||||
- `npm run dev:full` - Build, watch for changes, and serve with auto-reload
|
||||
- `npm run watch` - Watch for file changes and rebuild
|
||||
|
||||
### Development Workflow
|
||||
|
||||
For active development with auto-rebuild:
|
||||
|
||||
```bash
|
||||
npm run dev:full
|
||||
```
|
||||
|
||||
This will:
|
||||
|
||||
1. Build the application
|
||||
2. Start watching for file changes
|
||||
3. Serve the app over HTTPS at `https://localhost:8443`
|
||||
4. Automatically rebuild when files change
|
||||
|
||||
### Important Notes
|
||||
|
||||
- **HTTPS Required**: The WebHID API requires HTTPS. The development server uses self-signed certificates.
|
||||
- **Browser Security**: You may need to accept the self-signed certificate warning in your browser.
|
||||
- **Controller Support**: Only works in browsers with WebHID support (Chrome, Edge, Opera).
|
||||
|
||||
### Project Structure
|
||||
|
||||
- `js/` - Source JavaScript files
|
||||
- `css/` - Source CSS files
|
||||
- `templates/` - HTML template files
|
||||
- `lang/` - Translation files
|
||||
- `assets/` - SVG assets
|
||||
- `dist/` - Built application (generated)
|
||||
|
||||
### Build System
|
||||
|
||||
The project uses Gulp for building:
|
||||
|
||||
- JavaScript bundling with Rollup
|
||||
- CSS concatenation and minification
|
||||
- HTML processing and minification
|
||||
- Asset optimization
|
||||
- Development vs production builds
|
||||
|
||||
@@ -15,15 +15,15 @@ To translate the project into a new language, follow these steps:
|
||||
|
||||
3. **Save the File**: Save the changes to the JSON file.
|
||||
|
||||
4. **Update `core.js`**: Add the new language to the list of available languages (`available_langs`) in [core.js](https://github.com/dualshock-tools/dualshock-tools.github.io/blob/main/core.js). For example:
|
||||
4. **Update `core.js`**: Add the new language to the list of available languages (`available_langs`) in [core.js](https://github.com/dualshock-tools/dualshock-tools.github.io/blob/main/core.js). The languages are inserted in alphabetical order with respect to the locale (es_es, fr_fr, ..). For example:
|
||||
|
||||
```json
|
||||
```javascript
|
||||
var available_langs = {
|
||||
"zh_cn": { "name": "Chinese", "file": "zh_cn.json"},
|
||||
"fr_fr": { "name": "Français", "file": "fr_fr.json"},
|
||||
"hu_hu": { "name": "Hungarian", "file": "hu_hu.json"},
|
||||
"it_it": { "name": "Italiano", "file": "it_it.json"},
|
||||
"es_es": { "name": "Español", "file": "es_es.json"},
|
||||
"fr_fr": { "name": "Français", "file": "fr_fr.json"},
|
||||
"hu_hu": { "name": "Magyar", "file": "hu_hu.json"},
|
||||
"it_it": { "name": "Italiano", "file": "it_it.json"},
|
||||
"zh_cn": { "name": "中文", "file": "zh_cn.json"},
|
||||
};
|
||||
```
|
||||
|
||||
|
||||
BIN
apple-touch-icon.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
assets/donate.png
Normal file
|
After Width: | Height: | Size: 449 B |
112
assets/dualsense-controller.svg
Normal file
@@ -0,0 +1,112 @@
|
||||
<svg id="controller-svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 518" style="width: 80%; height: auto; max-width: 80%;" stroke-width="1">
|
||||
<g id="Button_infills">
|
||||
<g id="Mute_infill" transform="translate(0,0.65) scale(0.70)">
|
||||
<path id="Mute_infill" d="M454.47,468.7c-6.47,0-12.69.04-18.75.14-.92.01-2.18.28-2.96,1.48-.56.85-.83,2.14-.8,3.81.03,2.24.41,3.3,3.67,3.32,4.47.03,8.94.02,13.41.02l5.53-.03c1.83,0,3.67,0,5.5-.01,4.41-.01,8.97-.03,13.46.04,3.68.09,4.03-1.61,4.06-3.62.02-1.47-.23-2.58-.76-3.39-.67-1.03-1.83-1.6-3.26-1.62-6.64-.08-12.98-.12-19.1-.12Z"/>
|
||||
</g>
|
||||
<g id="Down_infill" transform="translate(0,0.65) scale(0.70)">
|
||||
<path d="M177.4,357.17c-1.88,2.05-4.45,3.18-7.24,3.18h-22.91c-2.79,0-5.36-1.13-7.25-3.18-1.88-2.05-2.79-4.71-2.55-7.49l1.25-14.78c.43-5.04,2.71-9.71,6.42-13.16l9.04-8.39c1.21-1.12,2.74-1.68,4.27-1.68s2.98.54,4.18,1.61l9.44,8.45c3.87,3.47,6.24,8.23,6.68,13.4l1.23,14.55c.24,2.78-.67,5.44-2.56,7.49Z"/>
|
||||
</g>
|
||||
<g id="PS_infill" transform="translate(0,0.65) scale(0.70)">
|
||||
<path d="M455.41,437.59c11.37.03,20.87-9.06,21-20.1.14-11.24-9.39-20.97-20.61-21.05-11.23-.08-21,9.57-20.99,20.72,0,11.16,9.32,20.4,20.6,20.43Z"/>
|
||||
</g>
|
||||
<g id="Right_infill" transform="translate(0,0.65) scale(0.70)">
|
||||
<path d="M223.51,284.09v22.91c0,2.79-1.13,5.36-3.18,7.24-2.05,1.89-4.71,2.8-7.49,2.56l-14.55-1.23c-5.17-.44-9.93-2.81-13.39-6.68l-8.46-9.44c-2.17-2.43-2.14-6.06.07-8.45l8.4-9.04c3.44-3.71,8.11-5.99,13.15-6.42l14.78-1.25c2.78-.24,5.44.67,7.49,2.56,2.05,1.88,3.18,4.45,3.18,7.24Z"/>
|
||||
</g>
|
||||
<g id="Left_infill" transform="translate(0,0.65) scale(0.70)">
|
||||
<path d="M140.97,299.45l-8.46,9.44c-3.46,3.87-8.22,6.24-13.39,6.68l-14.55,1.23c-2.78.24-5.44-.67-7.49-2.56-2.05-1.88-3.18-4.45-3.18-7.24v-22.91c0-2.79,1.13-5.36,3.18-7.24,1.84-1.69,4.17-2.6,6.63-2.6.28,0,.57.01.86.04l14.78,1.25c5.04.43,9.71,2.71,13.15,6.42l8.4,9.04c2.21,2.39,2.24,6.02.07,8.45Z"/>
|
||||
</g>
|
||||
<g id="Up_infill" transform="translate(0,0.65) scale(0.70)">
|
||||
<path d="M179.96,241.41l-1.23,14.55c-.44,5.17-2.81,9.93-6.68,13.39l-9.44,8.46c-2.43,2.17-6.06,2.14-8.45-.07l-9.04-8.4c-3.71-3.44-5.99-8.11-6.42-13.15l-1.25-14.78c-.24-2.78.67-5.44,2.55-7.49,1.89-2.05,4.46-3.18,7.25-3.18h22.91c2.79,0,5.36,1.13,7.24,3.18,1.89,2.05,2.8,4.71,2.56,7.49Z"/>
|
||||
</g>
|
||||
<g id="Triangle_infill" transform="translate(0,0.65) scale(0.70)">
|
||||
<path d="M751.45,261.08c15.08-.01,26.75-11.5,26.73-26.31-.02-14.47-12.19-26.62-26.73-26.69-14.57-.07-26.65,11.99-26.66,26.63-.01,14.84,11.65,26.37,26.66,26.36Z"/>
|
||||
</g>
|
||||
<g id="Cross_infill" transform="translate(0,0.65) scale(0.70)">
|
||||
<path d="M750.93,379.05c15.44-.06,27.38-11.64,27.24-26.43-.13-14.28-12.84-26.83-26.99-26.3-14.58.55-26.43,12.2-26.39,26.91.04,14.23,11.83,25.88,26.14,25.82Z"/>
|
||||
</g>
|
||||
<g id="Circle_infill" transform="translate(0,0.65) scale(0.70)">
|
||||
<path d="M787.29,293.47c-.03,14.49,11.88,26.68,26.15,26.75,14.74.08,26.99-11.95,26.95-26.46-.04-14.51-12.12-26.34-27.04-26.48-14.04-.14-26.03,11.91-26.06,26.18Z"/>
|
||||
</g>
|
||||
<g id="Square_infill" transform="translate(0,0.65) scale(0.70)">
|
||||
<path d="M689.1,320.22c14.61.11,27.23-12.13,27.17-26.35-.06-14.09-12.36-26.44-26.54-26.66-14.42-.22-26.52,11.67-26.66,26.18-.13,14.49,11.74,26.73,26.03,26.83Z"/>
|
||||
</g>
|
||||
<g id="Options_infill" transform="translate(0,0.65) scale(0.70)">
|
||||
<path d="M691.58,199.27l-4.27,17.92c-.91,3.82-4.76,6.19-8.58,5.28-3.82-.91-6.19-4.76-5.28-8.58l4.27-17.92c.78-3.27,3.71-5.48,6.93-5.48.54,0,1.1.06,1.65.19,1.85.44,3.42,1.58,4.42,3.2s1.3,3.53.86,5.38Z"/>
|
||||
</g>
|
||||
<g id="Create_infill" transform="translate(0,0.65) scale(0.70)">
|
||||
<path d="M224.03,191.39c.55-.13,1.11-.19,1.65-.19,3.22,0,6.15,2.21,6.93,5.47l4.27,17.93c.44,1.85.13,3.76-.86,5.38-1,1.62-2.57,2.76-4.42,3.2-3.82.91-7.67-1.46-8.58-5.28l-4.27-17.92c-.91-3.82,1.46-7.67,5.28-8.58Z"/>
|
||||
</g>
|
||||
<g id="R2_infill" transform="translate(0,0.65) scale(0.70)">
|
||||
<path d="M800.14,115.88c-1.06,1.16-2.71,1.73-5.05,1.73-.01,0-.03,0-.04-.01-24.46-6.24-52.88-10.2-84.5-11.76h-.12c-4.19.08-7.09-.8-8.55-2.62-1.41-1.74-1.67-4.53-.77-8.29l.03-.15,9.87-67.57c3.29-14.17,13.23-21.12,30.28-21.12,2.57,0,5.31.16,8.22.47,13.16,1.54,22.93,6.87,29.86,16.29,2.6,3.53,4.67,7.72,6.16,12.44,7.81,24.72,11.55,46.61,15.88,71.95l.15.88c.41,3.61-.06,6.25-1.42,7.76Z"/>
|
||||
</g>
|
||||
<g id="L2_infill" transform="translate(0,0.65) scale(0.70)">
|
||||
<path d="M208.41,103.22c-1.47,1.82-4.36,2.7-8.55,2.62h-.12c-31.62,1.56-60.04,5.52-84.5,11.76-.01.01-.03.01-.04.01-2.34,0-4-.57-5.05-1.73-1.36-1.51-1.84-4.15-1.42-7.76l.15-.88c4.33-25.34,8.07-47.23,15.87-71.95,1.49-4.72,3.57-8.91,6.17-12.44,6.93-9.42,16.7-14.75,29.86-16.29,2.9-.31,5.64-.47,8.22-.47,17.05,0,26.98,6.95,30.28,21.12l9.87,67.57.03.15c.89,3.76.63,6.55-.77,8.29Z"/>
|
||||
</g>
|
||||
<g id="R1_infill" transform="translate(0,0.65) scale(0.70)">
|
||||
<path d="M805.8,173.73c-45.97-8.48-86.34-15.03-123.26-19.99,2.9-8.22,9.5-13.32,20.48-15.9,26.02-3.4,53.76,2.2,87.27,17.61.98.44,1.96.95,2.94,1.51,9.2,5.27,12.41,9.42,12.57,16.77Z"/>
|
||||
</g>
|
||||
<g id="L1_infill" transform="translate(0,0.65) scale(0.70)">
|
||||
<path d="M226.89,153.84c-42.76,6.62-84.3,13.1-123.56,19.27.76-6.19,2.09-12.15,27.86-22.29,28.7-10.58,37.26-12.24,70.44-13.64,2.49-.11,4.68,0,6.67.32,9.71,1.57,15.81,6.94,18.59,16.34Z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Outline" transform="translate(0,0.65) scale(0.70)">
|
||||
<g id="Controller">
|
||||
<path id="Controller_outline" d="M804.61,172.5s.09.02.13.02c-45.03-8.29-84.58-14.71-120.82-19.6.06,0,.12.02.17.02-.09.21-.14.44-.23.66-1.95.4-4.06.27-6,.85-.01-.01-.04-.03-.06-.05-.04-.13-.09-.26-.14-.39.02,0,.04,0,.07,0-4.87-.52-9.74-1.01-14.62-1.5-4.79-.46-9.6-.91-14.4-1.34h-.01s-.37-.05-.37-.05c-9.11-.83-18.27-1.58-27.45-2.28,0,.04,0,.08,0,.11,6.85.92,13.16,2.58,18.67,6.93,0,0-.01-.01-.02-.02,1.13.1,2.24.2,3.36.3,5.18,1.42,9.39,5.36,10.93,10.49,1.6,5.35,1.3,12.24-.9,20.47l-21.05,109.2c-4.19,26.12-19.01,37.08-42.82,41.56l-143.01.03-128.89-.03c-23.72-4.39-39.07-18.19-42.83-41.64l-2.11-10.93c-.29-2.09-.65-4.23-1.12-6.43l-12.19-62.64-5.57-28.92-.04-.19c-.09-.35-.16-.68-.25-1.03l-1.25-6.42s0-.03-.01-.04c-.67-4.99-.48-9.34.61-12.98,1.44-4.81,5.22-8.56,9.95-10.19,1.68-.14,3.36-.28,5.03-.42-.01,0-.02.02-.04.03.13-.02.26-.04.39-.06,1.51-.96,3.05-1.79,4.52-2.46,4.51-2.11,9.69-3.99,14.78-4.58-8.71.66-17.56,1.37-26.29,2.11l-1.11.09c-9.48.82-18.77,1.68-27.61,2.55l-.46.05s0-.01,0-.02c-.02.03-.03.06-.04.09-1.99.06-3.94-.42-5.98-.72,0-.03,0-.06-.01-.09.03,0,.06,0,.08-.01-41.23,6.38-81.95,12.73-121.09,18.88,0-.03.01-.07.02-.1l-5.76,1.61c-1.39.76-2.77,1.68-4.11,2.75-6.4,5.15-12.04,13.69-17.24,26.11-27.39,64.19-47.54,129.24-59.9,193.34C4.64,462.34-.21,530.22,3.08,597.4c2.41,40.48,7.54,66.82,16.62,85.41,9.85,20.12,24.59,31.39,46.4,35.45l39.76,12.39.33.07h.1c.97.12,1.93.18,2.86.18,13.63,0,18.84-11.41,21.55-19.96,27.65-75.71,49.02-130.11,67.27-171.19,8.52-19.59,24.3-29.11,48.23-29.11,3.5,0,7.23.21,11.11.63h.17c60.68,2.54,123.31,3.82,186.16,3.82,70.29,0,142.26-1.6,213.94-4.76,2.31-.2,4.59-.3,6.77-.3,23.28,0,39.64,11.03,50,33.68,26.25,62.96,48.44,119.86,67.83,173.94,3.28,8.94,9.45,13.47,18.32,13.47,1.52,0,3.14-.14,4.82-.4h.06s45.5-13.11,45.5-13.11c2-.48,4.05-1.09,6.27-1.86l.13-.04.72-.25v-.02c15.47-5.75,26.84-17.21,34.75-35,7.77-17.48,12.58-41.33,15.58-77.35,4.35-57.49-1.58-134.16-16.29-210.35-15.8-81.82-40.06-154.86-68.3-205.65-2.37-4.62-4.05-7.26-5.79-9.11-2.01-2.17-4.26-3.46-7.64-4.35,0-.05-.03.03-.04-.02M654.75,157.28c1.32.12,2.27.2,2.26.19,4.84.46,9.76.95,14.92,1.48-3.75,2.27-6.89,5.18-9.51,8.8-.01-.02-.01-.04-.02-.06-.81,1.03-1.56,2.12-2.23,3.26-.18-2.07-.53-4.04-1.07-5.86-.89-2.98-2.4-5.62-4.35-7.82ZM251.1,157.47l.22-.17.34-.03c-2.05,2.16-3.62,4.8-4.53,7.83-.29.95-.5,1.95-.69,2.98-.3-.5-.5-.83-.51-.82-2.55-3.31-5.76-6.16-9.46-8.41,4.54-.44,9.37-.89,14.63-1.37ZM63.74,711.34c-1.7,0-3.53-.26-5.45-.77l-.46-.09c-15.03-4.97-25.58-14.54-33.18-30.09-8.75-17.89-13.71-43.59-16.08-83.29C2.18,466.43,27.04,334.31,82.48,204.42c5.96-14.26,12.4-22.95,19.68-26.57,36.97-5.81,77.23-12.09,119.66-18.67,12.6,2.24,22,10.48,24.57,21.52.29,2.12.73,4.32,1.3,6.61l5.63,28.91,13.52,70.16c3.04,22.28-4.43,36.44-19.51,54.89-33.86,35.52-63.96,83.16-92.02,145.65-22.57,50.27-43.21,108.54-64.97,183.45-3.79,15.91-8.97,32.96-18.74,38.81-2.41,1.45-4.98,2.16-7.85,2.16ZM804.28,725.31c-1.3.21-2.54.31-3.7.31-6.47,0-10.8-3.22-13.23-9.84-19.36-54.03-41.59-111.02-67.97-174.28-11.21-24.52-29.78-36.96-55.17-36.96-2.28,0-4.64.1-6.97.3-71.45,3.15-143.25,4.75-213.42,4.75-62.79,0-125.39-1.28-185.99-3.8-3.91-.42-7.72-.63-11.32-.63-26.2,0-44.22,10.9-53.58,32.37-18.31,41.24-39.73,95.76-67.43,171.64-3.62,11.38-8.49,16.23-16.28,16.23-.66,0-1.36-.03-2.07-.1l-34.11-10.63c.47-.24.93-.49,1.38-.76,11.51-6.9,17.19-25.2,21.22-42.14,31.82-109.48,78.28-245.56,155.72-326.77l.12-.14c10.32-12.6,15.94-21.99,18.94-31.77.01.02.02.03.03.05l.04-.29c.47-1.24.83-2.6,1.14-4.03,5.82,18.4,22.43,32.57,45.18,34.56l129.25.04,143.13-.03h.24c23.32-2.05,38.12-13.14,44.92-33.72.1.51.2,1.01.32,1.53,3.02,14.37,11.49,26.24,20.3,37l.17.19c81.44,78.96,128.1,212.33,162.99,332.38,5.91,20.1,10.54,31.1,19.1,35.05l-32.95,9.49ZM902.84,602.66c-4.81,57.88-14.43,96.11-47.36,107.83-4.19,1.09-7.37,1.59-9.99,1.59-9.87,0-14.41-6.75-22.08-32.85-22.39-77.03-43.38-136.08-66.05-185.82-29.41-64.53-61.55-113.22-98.27-148.86-16.5-20.18-23.88-35.21-18.4-61.3l20.03-98.96c4.49-15.34,12.4-22.67,27.28-25.27,35.69,4.91,74.62,11.29,119,19.5h.07c5.65,1.12,7.18,2.15,11.82,11.17,60.68,109.11,92.4,301.63,83.95,412.97Z"/>
|
||||
<g id="Speaker_grill">
|
||||
<circle cx="420.29" cy="357.71" r="4.82"/>
|
||||
<circle cx="437.84" cy="357.71" r="4.82"/>
|
||||
<circle cx="455.38" cy="357.71" r="4.82"/>
|
||||
<circle cx="472.93" cy="357.71" r="4.82"/>
|
||||
<circle cx="490.47" cy="358.68" r="4.82"/>
|
||||
</g>
|
||||
<path id="L3_surround" d="M340.92,373.72c-12.1-11.94-28.56-18.52-46.36-18.52-1.03,0-2.06.02-3.11.06-16.56.69-32.12,7.92-43.82,20.35-11.43,12.15-17.66,28.1-17.11,43.7-.63,16.4,5.79,32.86,17.63,45.16,12.39,12.87,29.14,19.96,47.17,19.96h.13c17.75-.03,34.16-6.86,46.21-19.24,12.14-12.46,18.58-29.31,18.14-47.45-.41-16.77-7.12-32.41-18.9-44.04ZM296.63,478.55c-.35,0-.7,0-1.06,0-16.24,0-31.34-6.14-42.53-17.29-11.18-11.15-17.33-26.19-17.32-42.36.02-27.96,22.56-58.15,58.94-58.15h.29c16.72.07,32,6.28,43.02,17.47,10.8,10.97,16.65,25.88,16.48,41.98-.4,36.53-29.71,58.36-57.82,58.36Z"/>
|
||||
<path id="R3_surround" d="M617.17,355.14c-1.39,0-2.81.05-4.21.13-16.38,1.04-31.68,7.93-43.07,19.39-11.63,11.71-18.09,27.2-18.18,43.63-.1,18.38,6.27,34.57,18.42,46.8,12.21,12.3,29.46,19.38,47.3,19.41h.1c16.61,0,32.4-6.7,44.48-18.88,12.21-12.3,19.13-29.12,19-46.1.29-16.6-6.42-33.11-18.41-45.31-12.1-12.31-28.23-19.09-45.43-19.09ZM675.5,419.52c-.02,32.9-25.99,58.85-59.12,59.08h-.4c-15.55,0-30.85-6.54-41.96-17.95-11.2-11.5-17.15-26.51-16.74-42.27.84-32.25,26.93-57.61,59.4-57.74h.24c16.08,0,31.03,6.27,42.11,17.65,10.89,11.19,16.89,26.21,16.48,41.23Z"/>
|
||||
</g>
|
||||
<g id="Button_outlines">
|
||||
<path id="L1" d="M131.54,151.76c28.58-10.54,37.1-12.19,70.13-13.58.62-.03,1.21-.04,1.78-.04,1.7,0,3.23.11,4.69.35,8.92,1.44,14.64,6.2,17.45,14.54-.03,0-.06,0-.08.01,0,.03,0,.06.01.09,2.04.3,3.99.78,5.98.72.02-.03.03-.06.04-.09-3.07-11.83-10.65-18.79-22.53-20.72-1.76-.27-3.6-.41-5.61-.41-.63,0-1.28,0-1.95.04-5.25.22-9.69.44-13.55.68-23.59,1.48-33.63,4.15-58.32,13.26-1.9.75-3.55,1.43-5.01,2.05l-.16.07c-23.9,10.2-24.72,17.05-25.6,24.3-.02.13-.04.25-.05.38l5.76-1.61c.79-5.14,3.38-10.75,27.02-20.05Z"/>
|
||||
<path id="R1" d="M804.81,159.88c-2.27-2.33-5.34-4.53-9.35-6.83-1.04-.6-2.15-1.17-3.28-1.69-27.77-12.77-52.08-18.98-74.31-18.98-5.21,0-10.43.34-15.56,1.02l-.23.04c-13.31,3.1-21.29,9.84-24.35,20.58-.02,0-.04,0-.07,0,.05.13.1.26.14.39.02.02.05.03.06.05.49-.18,1-.3,1.52-.33,1.52-.11,3.01-.3,4.48-.51.01-.04.03-.08.05-.12.05-.18.11-.36.18-.54-.06,0-.12-.02-.17-.02,2.98-7.21,9.14-11.7,19.28-14.1,4.8-.62,9.73-.94,14.65-.94,21.43,0,44.99,6.05,72.03,18.48.91.41,1.84.89,2.85,1.47,8.44,4.83,11.54,8.54,12.01,14.69-.05,0-.09-.02-.13-.02.06.13.12.25.16.39.02.06.05.12.07.18,1.01.07,1.98.26,2.89.58.87-.31,1.74-.34,2.57-.15-.14-5.55-1.73-9.75-5.49-13.61Z"/>
|
||||
<path id="L2_outline" d="M115.16,122.1h.4l.52-.07.06-.02c24.15-6.19,52.33-10.12,83.69-11.68h.47c5.39,0,9.3-1.44,11.61-4.29,2.31-2.88,2.86-6.94,1.67-11.99l-9.91-67.79c-3.78-16.37-15.49-24.66-34.81-24.66-2.7,0-5.6.17-8.61.49-14.28,1.66-25.37,7.75-32.97,18.08-2.9,3.94-5.2,8.57-6.83,13.75-7.91,25.05-11.67,47.06-16.02,72.55l-.18,1.03c-.57,5.06.28,8.9,2.55,11.39,1.92,2.12,4.73,3.2,8.34,3.2ZM109.72,108.29l.15-.89c4.32-25.3,8.06-47.16,15.84-71.81,1.46-4.61,3.48-8.7,6.02-12.15,6.76-9.19,16.3-14.38,29.16-15.89,2.88-.31,5.61-.46,8.11-.46,16.53,0,26.12,6.66,29.29,20.26l9.88,67.62.04.18c.81,3.44.62,5.94-.57,7.43-1.21,1.5-3.65,2.25-7.25,2.25h-.69c-31.62,1.56-60.09,5.52-84.61,11.76-1.98-.02-3.35-.48-4.19-1.4-1.15-1.27-1.55-3.69-1.18-6.92Z"/>
|
||||
<path id="R2_outline" d="M709.98,110.34h.41c31.43,1.56,59.6,5.48,83.74,11.68l.06.02.53.07h.4c3.61,0,6.42-1.08,8.34-3.2,2.27-2.5,3.13-6.33,2.54-11.45l-.17-.97c-4.35-25.49-8.11-47.5-16.02-72.55-1.63-5.18-3.93-9.81-6.83-13.75-7.61-10.33-18.71-16.42-32.99-18.08-3-.33-5.89-.49-8.6-.49-19.32,0-31.03,8.3-34.82,24.74l-9.87,67.63c-1.21,5.13-.66,9.2,1.66,12.08,2.31,2.85,6.22,4.29,11.61,4.29ZM702.09,95.12l.04-.2,9.85-67.49c3.18-13.69,12.77-20.35,29.31-20.35,2.49,0,5.22.16,8.1.46,12.87,1.51,22.41,6.7,29.17,15.89,2.53,3.43,4.55,7.52,6.01,12.15,7.79,24.65,11.52,46.51,15.85,71.82l.14.83c.37,3.3-.03,5.71-1.17,6.97-.85.93-2.22,1.39-4.19,1.4-24.52-6.25-52.99-10.21-84.66-11.77h-.64c-3.56,0-6.07-.77-7.26-2.25-1.2-1.49-1.4-3.99-.56-7.47Z"/>
|
||||
<path id="Create_outline" d="M218.64,218.94c1.25,5.26,5.9,8.93,11.31,8.93.92,0,1.83-.11,2.69-.32,3.02-.72,5.57-2.57,7.2-5.22,1.63-2.65,2.13-5.76,1.41-8.77l-4.26-17.93c-1.25-5.26-5.9-8.93-11.31-8.93-.9,0-1.81.11-2.7.32-3.02.71-5.57,2.57-7.2,5.21-1.63,2.65-2.13,5.76-1.42,8.78l4.27,17.93ZM220.47,195.11c.86-1.4,2.21-2.37,3.79-2.75.46-.11.93-.16,1.42-.16,2.85,0,5.3,1.93,5.96,4.7l4.27,17.93c.38,1.59.11,3.23-.74,4.62-.86,1.4-2.21,2.38-3.8,2.75-.47.11-.94.17-1.42.17-2.85,0-5.3-1.94-5.96-4.71l-4.27-17.93c-.38-1.59-.11-3.23.75-4.62Z"/>
|
||||
<path id="Options_outline" d="M677.7,226.85c.91.21,1.82.32,2.69.32,5.4,0,10.05-3.68,11.3-8.94l4.27-17.92c.72-3.02.22-6.15-1.41-8.79-1.63-2.64-4.18-4.5-7.2-5.22-.88-.21-1.79-.31-2.69-.31-5.41,0-10.06,3.67-11.32,8.93l-4.27,17.93c-1.49,6.23,2.38,12.51,8.62,14.01ZM674.43,214.12l4.26-17.92c.66-2.77,3.11-4.71,5.96-4.71.5,0,.96.06,1.42.17,1.59.38,2.94,1.35,3.8,2.74.85,1.38,1.12,3.03.74,4.63l-4.26,17.92c-.66,2.77-3.11,4.71-5.96,4.71-.47,0-.95-.06-1.42-.17-1.59-.38-2.94-1.35-3.8-2.75-.86-1.39-1.12-3.04-.74-4.63Z"/>
|
||||
<path id="Left_outline" d="M99.81,321.31c1.27.35,2.6.53,3.93.53.42,0,.83-.02,1.25-.06l14.55-1.23c5.53-.47,10.68-2.71,14.76-6.39.68-.6,1.32-1.25,1.94-1.94l8.45-9.44c3.91-4.36,3.85-10.88-.13-15.18l-8.39-9.04c-4.29-4.63-10.11-7.47-16.4-8l-14.78-1.25c-4.13-.36-8.24,1.05-11.29,3.85s-4.8,6.79-4.8,10.93v22.91c0,4.14,1.75,8.12,4.8,10.93,1.75,1.61,3.85,2.76,6.11,3.38ZM93.9,284.09c0-2.79,1.13-5.36,3.18-7.24,1.84-1.69,4.17-2.6,6.63-2.6.28,0,.57.01.86.04l14.78,1.25c5.04.43,9.71,2.71,13.15,6.42l8.4,9.04c2.21,2.39,2.24,6.02.07,8.45l-8.46,9.44c-3.46,3.87-8.22,6.24-13.39,6.68l-14.55,1.23c-2.78.24-5.44-.67-7.49-2.56-2.05-1.88-3.18-4.45-3.18-7.24v-22.91Z"/>
|
||||
<path id="Right_outline" d="M172.85,287.6c-3.98,4.3-4.04,10.82-.14,15.18l8.27,9.23.19.21c4.32,4.83,10.25,7.78,16.7,8.33l14.55,1.23c.42.04.83.06,1.25.06,1.4,0,2.79-.2,4.12-.58,2.18-.64,4.22-1.76,5.92-3.33,3.05-2.81,4.8-6.79,4.8-10.93v-22.91c0-4.14-1.75-8.13-4.8-10.93-3.05-2.8-7.16-4.2-11.29-3.85l-14.78,1.25c-.74.06-1.48.16-2.2.28-2.7.47-5.27,1.36-7.65,2.64-2.43,1.31-4.64,3.01-6.55,5.08l-8.39,9.04ZM198.06,275.54l14.78-1.25c2.78-.24,5.44.67,7.49,2.56,2.05,1.88,3.18,4.45,3.18,7.24v22.91c0,2.79-1.13,5.36-3.18,7.24-2.05,1.89-4.71,2.8-7.49,2.56l-14.55-1.23c-5.17-.44-9.93-2.81-13.39-6.68l-8.46-9.44c-2.17-2.43-2.14-6.06.07-8.45l8.4-9.04c3.44-3.71,8.11-5.99,13.15-6.42Z"/>
|
||||
<path id="Down_outline" d="M183.71,334.71c-.13-1.61-.42-3.18-.84-4.71-.05-.16-.1-.32-.15-.47-.22-.68-.45-1.34-.69-2-1.43-3.61-3.69-6.87-6.65-9.52l-9.44-8.46c-4.36-3.9-10.88-3.85-15.18.14l-9.04,8.39c-1.05.97-2,2.01-2.85,3.12-2.94,3.82-4.74,8.41-5.15,13.28l-1.25,14.78c-.15,1.83.03,3.65.54,5.38.62,2.18,1.75,4.21,3.31,5.91,2.8,3.05,6.79,4.8,10.93,4.8h22.91c4.14,0,8.12-1.75,10.93-4.8,2.8-3.05,4.2-7.16,3.85-11.29l-1.23-14.55ZM177.4,357.17c-1.88,2.05-4.45,3.18-7.24,3.18h-22.91c-2.79,0-5.36-1.13-7.25-3.18-1.88-2.05-2.79-4.71-2.55-7.49l1.25-14.78c.43-5.04,2.71-9.71,6.42-13.16l9.04-8.39c1.21-1.12,2.74-1.68,4.27-1.68s2.98.54,4.18,1.61l9.44,8.45c3.87,3.47,6.24,8.23,6.68,13.4l1.23,14.55c.24,2.78-.67,5.44-2.56,7.49Z"/>
|
||||
<path id="Up_outline" d="M133.72,256.61c.48,5.73,2.88,11.07,6.81,15.22.38.41.78.8,1.19,1.18l9.04,8.39c2.18,2.02,4.92,3.03,7.67,3.03s5.36-.97,7.51-2.9l9.44-8.45c1.35-1.2,2.55-2.53,3.58-3.96,2.51-3.43,4.1-7.44,4.64-11.72.05-.34.08-.68.11-1.02l1.23-14.55c.35-4.13-1.05-8.24-3.85-11.29-2.81-3.05-6.79-4.8-10.93-4.8h-22.91c-4.14,0-8.13,1.75-10.93,4.8-1.53,1.66-2.64,3.64-3.27,5.76-.54,1.77-.74,3.65-.58,5.53l1.25,14.78ZM140,233.92c1.89-2.05,4.46-3.18,7.25-3.18h22.91c2.79,0,5.36,1.13,7.24,3.18,1.89,2.05,2.8,4.71,2.56,7.49l-1.23,14.55c-.44,5.17-2.81,9.93-6.68,13.39l-9.44,8.46c-2.43,2.17-6.06,2.14-8.45-.07l-9.04-8.4c-3.71-3.44-5.99-8.11-6.42-13.15l-1.25-14.78c-.24-2.78.67-5.44,2.55-7.49Z"/>
|
||||
<path id="Cross_outline" d="M751.82,321.39h-.11c-8.53,0-16.94,3.65-23.08,10.01-5.91,6.13-9.01,13.94-8.72,21.98.63,17.53,13.54,30.1,31.38,30.57h.03c17.47,0,31.35-13.6,31.6-30.96.12-8.05-3.19-16.1-9.08-22.09-5.9-6.01-13.93-9.48-22.02-9.51ZM770.09,370.25c-4.93,5-11.74,7.77-19.16,7.8h-.1c-13.76,0-24.99-11.14-25.03-24.82-.04-13.99,11.13-25.37,25.43-25.91.28-.01.56-.02.84-.02,13.25,0,24.99,11.83,25.12,25.32.06,6.67-2.46,12.93-7.09,17.63Z"/>
|
||||
<path id="Triangle_outline" d="M751.06,266c.21,0,.41,0,.62,0,8.36,0,16.79-3.45,22.54-9.22,5.71-5.73,8.72-13.49,8.69-22.44-.05-17.11-14.19-31.03-31.52-31.03h-.19c-17.15.1-31.24,14.15-31.4,31.3-.08,8.08,3.16,15.85,9.1,21.87,5.94,6.02,14.02,9.48,22.16,9.51ZM751.32,209.08h.12c13.93.07,25.71,11.83,25.73,25.69.01,6.89-2.62,13.27-7.4,17.98-4.79,4.71-11.3,7.31-18.35,7.32-6.99,0-13.47-2.6-18.25-7.33-4.77-4.72-7.4-11.13-7.39-18.03.01-14.13,11.47-25.63,25.53-25.63Z"/>
|
||||
<path id="Circle_outline" d="M791.23,272.06c-5.72,5.82-8.79,13.5-8.65,21.62.31,17.85,13.17,30.72,31.27,31.3.3,0,.6.01.9.01,16.35,0,30.24-14.13,30.33-30.86.05-8.44-3.12-16.31-8.92-22.14-5.91-5.94-13.96-9.21-22.68-9.21-8.47,0-16.37,3.3-22.25,9.28ZM839.39,293.77c.02,6.64-2.62,12.96-7.44,17.78-4.93,4.95-11.46,7.67-18.37,7.67,0,0-.14,0-.14,0-13.66-.07-25.18-11.87-25.15-25.75.03-13.65,11.4-25.19,24.83-25.19h.23c14.33.14,26.01,11.57,26.05,25.49Z"/>
|
||||
<path id="Square_outline" d="M691.99,262.62c-.79-.06-1.6-.09-2.38-.09-8.46,0-16.39,3.35-22.34,9.45-5.74,5.88-8.93,13.76-8.74,21.58-.29,17.51,12.78,31.02,30.42,31.42.26,0,.52,0,.78,0,17.09,0,30.37-12.98,30.9-30.18.51-16.54-12.34-30.97-28.64-32.18ZM707.82,311.38c-4.97,4.99-11.72,7.85-18.53,7.85,0,0-.18,0-.18,0-6.58-.05-12.82-2.74-17.59-7.59-4.87-4.95-7.51-11.43-7.45-18.24.13-13.89,11.46-25.19,25.26-25.19h.38c13.56.21,25.5,12.2,25.56,25.67.03,6.44-2.62,12.65-7.44,17.5Z"/>
|
||||
<path id="PS_outline" d="M455.4,442.49h.21c14.28-.12,25.41-11.31,25.35-25.47-.06-14.05-11.44-25.51-25.42-25.54-13.74,0-25.39,11.7-25.44,25.55-.03,6.72,2.63,13.09,7.46,17.95,4.82,4.84,11.16,7.51,17.84,7.51ZM441.75,403.34c3.78-3.75,8.85-5.9,13.92-5.9h.13c5.08.04,10.12,2.23,13.84,6.02,3.73,3.8,5.84,8.91,5.78,14.02-.13,10.54-9.08,19.11-20,19.11h0c-10.81-.02-19.6-8.74-19.6-19.43,0-5.03,2.17-10.07,5.94-13.82Z"/>
|
||||
<path id="Mute_outline" d="M474.24,464.3c-6.6-.06-13.03-.1-19.11-.1-6.51,0-12.67.04-18.82.11-2.55.03-4.67.99-6.15,2.77-1.4,1.7-2.12,4.04-2.07,6.78.07,3.52,1.54,7.73,8.15,7.76,2.64.01,5.27.02,7.91.02h11.06s1.74-.03,1.74-.03c0,0,7.44-.02,9.31-.02,2.62,0,5.25,0,7.86.04h.17c7.21,0,8.38-5.01,8.43-8,.05-2.57-.65-4.8-2.03-6.45-1.54-1.85-3.77-2.85-6.45-2.88ZM473.79,476.4h-2.19c-2.66-.05-2.76-.04-5.42-.04-1.84,0-10.97.03-10.97.03l-5.52.04h-5.9c-2.5,0-5,0-7.5-.02-.93,0-2.31-.66-2.33-2.29-.02-1.53-.18-2.63.18-3.31.57-1.06,1.65-1.24,2.25-1.25,6.08-.11,12.21-.17,18.74-.17,6.06,0,12.48.05,19.09.15,1.14.02,2.07.53,2.55,1.42.21.4.5,1.12.47,2.82-.02,1.47-.69,2.61-3.43,2.61Z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g transform="translate(0,0.65) scale(0.70)">
|
||||
<g id="Trackpad_infill" >
|
||||
<path d="M452.27,328.53v-.02c40.22,0,80.43.07,120.65-.07,6.47-.02,13.17.01,19.36-1.58,19.32-4.99,29.59-18.18,33.51-36.6,7.44-34.93,15.37-69.99,21.95-105.09,1.8-9.6-.91-20.7-9.35-26.91-6.53-4.8-15.07-5.38-22.94-6-15.84-1.24-31.65-1.69-47.52-2.33-25.29-1.01-52.32-3.71-77.62-4-59.86-.67-117.65,1.12-177.41,5.09-10.18.68-20.91.48-30.97,2.12-12.6,2.05-25.72,12.82-22.5,31.32,2.97,17.08,7.65,34.26,11,51.28,3.72,18.85,7.61,37.68,11.08,56.58,2.33,12.67,8.64,23.23,19.04,30.56,9.97,7.03,21.64,5.61,33.14,5.62,39.53.06,79.06.02,118.6.02Z"/>
|
||||
</g>
|
||||
<g id="Trackpad_outline" >
|
||||
<path d="M272.25,153.56c-4.52,2.07-9.76,5.6-12.42,9.85-4.66,6.89-3.71,15.95-1.11,26.9l19.74,98.37c4.52,27.51,18.61,41.63,45.84,43.95h.12l235.94.06c-4.66-.08,4.33,0,9.56,0,35.3,0,49.5-11.1,56.07-37.73l20.44-101.35c4.26-16.93,3.93-29.59-6.87-37.71-6.24-4.92-13.49-6.41-21.4-7.26-52.97-4-107.12-6.03-161.4-6.03-.3,0-.6,0-.9,0-2.3-.01-4.58-.02-6.81-.02-.36,0-.72,0-1.08,0-.33,0-.66,0-1,0-3.06.02-6.18.05-9.34.09-48.92.43-98.66,2.47-148.15,6.11-5.85.15-12,2.31-17.24,4.76ZM641.07,192.4l-20.45,101.35c-6.01,24.35-18.98,33.44-50.41,33.44-3.02,0-6.24.2-9.64,0l-235.88-.06c-24.7-2.11-36.7-14.33-40.82-39.44l-19.79-98.56c-2.23-9.46-3.46-17.08.31-22.64,4.07-6.04,11.93-10.09,23.26-12.03,13.9-1.04,27.83-1.95,41.74-2.73,35.06-1.79,70.63-3.02,101.96-3.47.19,0,.38,0,.58,0,1.55-.02,3.08-.04,4.6-.06,6.53-.06,13.04-.09,19.54-.09,46.61.2,104.83,2.34,158.55,5.8,3.45.26,7.4.89,10.36,1.77,18.01,5.87,21.08,16.85,16.09,36.73Z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="L3" transform="translate(0,0.65) scale(0.70)">
|
||||
<g id="L3_infill">
|
||||
<path d="M295.63,461.03c23.36,0,41.53-17.87,41.57-40.86.03-23.53-18.65-42.27-42.16-42.27-23.09,0-41.82,18.55-41.83,41.45-.01,23.9,18.09,41.69,42.42,41.69Z"/>
|
||||
</g>
|
||||
<g id="L3_outline">
|
||||
<path d="M295.14,466.67c-26.36-.18-47.62-21.47-47.16-47.19.51-28.21,21.76-46.51,47.28-47.04,25.52-.53,47.65,22.07,47.37,47.25-.29,26.05-21.63,47.15-47.5,46.98ZM295.63,461.03c23.36,0,41.53-17.87,41.57-40.86.03-23.53-18.65-42.27-42.16-42.27-23.09,0-41.82,18.55-41.83,41.45-.01,23.9,18.09,41.69,42.42,41.69Z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="R3" transform="translate(0,0.65) scale(0.70)">
|
||||
<g id="R3_infill">
|
||||
<path d="M658.23,419.7c.55-22.76-17.76-41.19-40.35-41.72-23.43-.55-42.68,18.19-43.29,40.74-.65,23.92,18.7,41.15,39.11,42.46,25.96,1.66,44.96-18.72,44.52-41.48Z"/>
|
||||
</g>
|
||||
<g id="R3_outline">
|
||||
<path d="M664.07,419.78c-.01,26.37-21.16,47.39-47.6,47.32-26.19-.06-48.19-21.58-47.62-47.5.59-26.82,21.12-47.52,48.44-47.45,26.83.08,46.79,21.47,46.78,47.62ZM658.23,419.7c.55-22.76-17.76-41.19-40.35-41.72-23.43-.55-42.68,18.19-43.29,40.74-.65,23.92,18.7,41.15,39.11,42.46,25.96,1.66,44.96-18.72,44.52-41.48Z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="TriggerPercentages" transform="translate(0,0.65) scale(0.70)">
|
||||
<text id="L2_percentage" x="160" y="80" font-family="Arial, sans-serif" font-size="24" font-weight="bold" fill="#1a237e" text-anchor="middle" opacity="0">0 %</text>
|
||||
<text id="R2_percentage" x="750" y="80" font-family="Arial, sans-serif" font-size="24" font-weight="bold" fill="#1a237e" text-anchor="middle" opacity="0">0 %</text>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 23 KiB |
132
assets/dualshock-controller.svg
Normal file
@@ -0,0 +1,132 @@
|
||||
<svg id="controller-svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 518" style="width: 80%; height: auto; max-width: 80%;" stroke-width="0">
|
||||
|
||||
<g id="Controller_infills">
|
||||
<path d="M622.95,326.87c-29.09-128.96-37.19-148.52-47.08-165.39-6.92-11.81-15.21-23.77-19.53-29.84-1.47-2.07-3.77-3.37-6.31-3.57-38.85-3.04-71.02-2.57-79.95-2.35-1.06.03-2.06.45-2.82,1.18l-2.73,2.63c-1.73,1.66-4,2.58-6.4,2.58H181.88c-2.4,0-4.67-.92-6.4-2.58l-2.73-2.63c-.76-.74-1.77-1.16-2.82-1.18-8.93-.22-41.11-.69-79.95,2.35-2.54.2-4.84,1.5-6.32,3.57-4.32,6.07-12.61,18.03-19.53,29.84-9.88,16.88-17.99,36.43-47.08,165.43-7.25,34.62-20.46,118.95,13.61,153.45,14.34,14.52,34.26,20.73,53.29,16.6,23.23-5.03,42.3-24.84,53.71-55.79,5.08-13.79,9.26-25.52,12.62-34.94,13.92-39.03,17.22-48.31,30.19-51.55l.3-.08h.31s77.55.17,77.55.17h122.75l77.86-.17.3.08c12.97,3.24,16.27,12.52,30.19,51.55,3.36,9.43,7.54,21.16,12.62,34.94,11.4,30.95,30.48,50.76,53.71,55.79,19.04,4.12,38.96-2.09,53.29-16.6,34.07-34.5,20.86-118.83,13.6-153.49Z"/>
|
||||
<path d="M274.86,314.85c0-30.28-24.63-54.91-54.92-54.91s-54.92,24.63-54.92,54.91,24.63,54.92,54.92,54.92,54.92-24.63,54.92-54.92Z"/>
|
||||
<path d="M420.06,259.93c-30.28,0-54.92,24.63-54.92,54.91s24.63,54.92,54.92,54.92,54.92-24.63,54.92-54.92-24.63-54.91-54.92-54.91Z"/>
|
||||
</g>
|
||||
<g id="Button_infills">
|
||||
<g id="Down_infill">
|
||||
<path d="M104.86,265.19v-6.44c0-5.03,1.96-9.87,5.46-13.49l7.64-7.89c3-3.09,8-2.99,10.87.22l6.95,7.79c3.17,3.55,4.92,8.14,4.92,12.9v6.9c0,6.43-5.21,11.64-11.64,11.64h-12.57c-6.43,0-11.64-5.21-11.64-11.64Z"/>
|
||||
</g>
|
||||
<g id="PS_infill">
|
||||
<circle cx="320.16" cy="314.85" r="13.82"/>
|
||||
</g>
|
||||
<g id="Right_infill">
|
||||
<path d="M163.28,242.61h-6.44c-5.03,0-9.87-1.96-13.49-5.46l-7.89-7.64c-3.09-3-2.99-8,.22-10.87l7.79-6.95c3.55-3.17,8.14-4.92,12.9-4.92h6.9c6.43,0,11.64,5.21,11.64,11.64v12.57c0,6.43-5.21,11.64-11.64,11.64Z"/>
|
||||
</g>
|
||||
<g id="Left_infill">
|
||||
<path d="M82.28,206.77h6.44c5.03,0,9.87,1.96,13.49,5.46l7.89,7.64c3.09,3,2.99,8-.22,10.87l-7.79,6.95c-3.55,3.17-8.14,4.92-12.9,4.92h-6.9c-6.43,0-11.64-5.21-11.64-11.64v-12.57c0-6.43,5.21-11.64,11.64-11.64Z"/>
|
||||
</g>
|
||||
<g id="Up_infill">
|
||||
<path d="M140.7,184.19v6.44c0,5.03-1.96,9.87-5.46,13.49l-7.64,7.89c-3,3.09-8,2.99-10.87-.22l-6.95-7.79c-3.17-3.55-4.92-8.14-4.92-12.9v-6.9c0-6.43,5.21-11.64,11.64-11.64h12.57c6.43,0,11.64,5.21,11.64,11.64Z"/>
|
||||
</g>
|
||||
<g id="Triangle_infill">
|
||||
<circle cx="517.22" cy="178.98" r="19.67"/>
|
||||
</g>
|
||||
<g id="Cross_infill">
|
||||
<circle cx="517.22" cy="270.62" r="19.67"/>
|
||||
</g>
|
||||
<g id="Circle_infill">
|
||||
<circle cx="563.04" cy="224.8" r="19.67"/>
|
||||
</g>
|
||||
<g id="Square_infill">
|
||||
<circle cx="471.4" cy="224.8" r="19.67"/>
|
||||
</g>
|
||||
<g id="Options_infill">
|
||||
<rect x="437.88" y="144.01" width="16.52" height="32.55" rx="8.26" ry="8.26" transform="translate(892.28 320.56) rotate(-180)"/>
|
||||
</g>
|
||||
<g id="Create_infill">
|
||||
<rect x="185.6" y="144.01" width="16.52" height="32.55" rx="8.26" ry="8.26"/>
|
||||
</g>
|
||||
<g id="R2_infill">
|
||||
<path d="M472.73,80.69l2.79-35.54c1.25-15.98,14.77-28.21,30.8-27.85h0c13.24.3,24.75,9.19,28.38,21.93l11.58,40.63c.77,2.71-1.26,5.4-4.08,5.4h-65.24c-2.47,0-4.42-2.11-4.23-4.57Z"/>
|
||||
</g>
|
||||
<g id="L2_infill">
|
||||
<path d="M167.27,80.69l-2.79-35.54c-1.25-15.98-14.77-28.21-30.8-27.85h0c-13.24.3-24.75,9.19-28.38,21.93l-11.58,40.63c-.77,2.71,1.26,5.4,4.08,5.4h65.24c2.47,0,4.42-2.11,4.23-4.57Z"/>
|
||||
</g>
|
||||
<g id="R1_infill">
|
||||
<path id="R1_infill" d="M549.16,125.5v-3.34c0-2.86-1.68-5.44-4.28-6.62-9.49-4.3-33.93-12.7-65.02-3.2-3.06.94-5.17,3.75-5.17,6.96v3.76s34.84-.67,74.48,2.44Z"/>
|
||||
</g>
|
||||
<g id="L1_infill">
|
||||
<path id="L1_infill" d="M165.32,123.06v-3.76c0-3.2-2.11-6.02-5.17-6.96-31.09-9.5-55.53-1.1-65.02,3.2-2.6,1.18-4.28,3.76-4.28,6.62v3.34s38.5-2.96,74.48-2.44Z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Outline">
|
||||
<g id="Button_outlines_behind">
|
||||
<path id="L1" d="M88.34,128.2v-6.04c0-3.82,2.26-7.31,5.75-8.9,9.4-4.26,34.72-13.11,66.78-3.31,4.15,1.27,6.94,5.03,6.94,9.35v6.3l-2.54-.04c-35.46-.51-73.86,2.4-74.25,2.43l-2.69.21ZM131.57,110.5c-16.83,0-29.48,4.62-35.42,7.31-1.71.77-2.81,2.48-2.81,4.34v.65c9.13-.63,39.98-2.57,69.48-2.28v-1.23c0-2.11-1.37-3.94-3.4-4.57-10.1-3.09-19.49-4.23-27.84-4.23Z"/>
|
||||
<path id="R1" d="M551.66,128.2l-2.7-.21c-39.06-3.06-73.88-2.44-74.23-2.43l-2.55.05v-6.31c0-4.32,2.79-8.08,6.94-9.35,32.06-9.8,57.38-.95,66.78,3.31,3.49,1.58,5.75,5.07,5.75,8.9v6.04ZM483.07,120.5c12.35,0,36.81.3,63.59,2.3v-.64c0-1.86-1.1-3.57-2.81-4.34-8.88-4.02-32.83-12.38-63.26-3.09-2.04.62-3.4,2.46-3.4,4.57v1.23c1.42-.01,3.41-.03,5.88-.03Z"/>
|
||||
</g>
|
||||
<g id="Controller">
|
||||
<path d="M72.26,503.22c-16.56,0-32.79-6.81-45.17-19.34-35.77-36.22-22.36-122.58-14.94-158.03,29.26-129.74,37.53-149.6,47.65-166.89,7.02-11.98,15.4-24.07,19.78-30.22,2.33-3.28,5.98-5.34,10-5.65,39.08-3.06,71.47-2.58,80.46-2.37,2.31.06,4.5.97,6.17,2.58l2.73,2.63c.79.76,1.83,1.18,2.93,1.18h36.97v5h-36.97c-2.4,0-4.67-.92-6.4-2.58l-2.73-2.63c-.76-.74-1.77-1.16-2.82-1.18-8.93-.21-41.11-.69-79.95,2.35-2.54.2-4.84,1.5-6.32,3.57-4.32,6.07-12.61,18.03-19.53,29.84-9.88,16.88-17.99,36.43-47.08,165.43-7.25,34.62-20.46,118.95,13.61,153.45,14.34,14.52,34.26,20.73,53.29,16.6,23.23-5.03,42.3-24.84,53.71-55.79,5.08-13.79,9.26-25.52,12.62-34.94,13.92-39.03,17.22-48.31,30.19-51.55l1.21,4.85c-10.08,2.52-12.69,9.11-26.69,48.38-3.36,9.44-7.55,21.18-12.64,34.99-12.01,32.61-32.38,53.55-57.34,58.95-4.23.91-8.5,1.36-12.74,1.36Z"/>
|
||||
<path d="M98.46,460.5c-10.71,0-23.53-1.31-38.69-4.41-28.57-5.83-42.38-20.36-48.94-31.52-7.15-12.17-7.45-22.9-7.46-23.35l5-.1-2.5.05,2.5-.06c0,.1.32,10.07,6.9,21.15,8.81,14.83,24.12,24.57,45.5,28.93,53.9,11,73.86-1.74,76.88-10.01l4.7,1.72c-3.38,9.23-16.88,17.6-43.89,17.6Z"/>
|
||||
<path d="M567.74,503.22c-4.25,0-8.51-.45-12.74-1.36-24.96-5.4-45.33-26.34-57.34-58.95-5.09-13.81-9.28-25.56-12.64-34.99-14-39.27-16.61-45.86-26.69-48.38l1.21-4.85c12.97,3.24,16.27,12.52,30.19,51.55,3.36,9.43,7.54,21.16,12.62,34.94,11.4,30.95,30.48,50.76,53.71,55.79,19.03,4.12,38.96-2.09,53.29-16.6,34.07-34.5,20.86-118.83,13.6-153.49-29.09-128.96-37.19-148.52-47.08-165.39-6.92-11.81-15.21-23.77-19.53-29.84-1.47-2.07-3.77-3.37-6.31-3.57-38.85-3.04-71.02-2.57-79.95-2.35-1.06.03-2.06.45-2.82,1.18l-2.73,2.63c-1.73,1.66-4,2.58-6.4,2.58h-36.97v-5h36.97c1.1,0,2.14-.42,2.93-1.18l2.73-2.63c1.67-1.61,3.86-2.52,6.17-2.58,8.99-.22,41.38-.69,80.46,2.37,4.02.31,7.66,2.37,10,5.65,4.37,6.14,12.76,18.23,19.78,30.22,10.13,17.29,18.39,37.15,47.65,166.86,7.43,35.48,20.84,121.84-14.93,158.06-12.37,12.53-28.61,19.34-45.17,19.34Z"/>
|
||||
<path d="M541.54,460.5c-27.01,0-40.51-8.36-43.89-17.6l4.7-1.72c3.03,8.27,22.99,21.01,76.88,10.01,21.38-4.36,36.68-14.1,45.5-28.93,6.58-11.08,6.9-21.05,6.9-21.15l5,.11c0,.45-.3,11.18-7.46,23.35-6.56,11.16-20.37,25.69-48.94,31.52-15.16,3.09-27.99,4.41-38.69,4.41Z"/> -->
|
||||
<rect x="258.62" y="354.78" width="122.75" height="5"/>
|
||||
<path d="M219.94,374.77c-33.04,0-59.92-26.88-59.92-59.92s26.88-59.91,59.92-59.91,59.92,26.88,59.92,59.91-26.88,59.92-59.92,59.92ZM219.94,259.94c-30.28,0-54.92,24.63-54.92,54.91s24.63,54.92,54.92,54.92,54.92-24.63,54.92-54.92-24.63-54.91-54.92-54.91Z"/>
|
||||
<path d="M122.78,301.15c-42.16,0-76.46-34.3-76.46-76.46s34.3-76.46,76.46-76.46,76.46,34.3,76.46,76.46-34.3,76.46-76.46,76.46ZM122.78,153.23c-39.4,0-71.46,32.06-71.46,71.46s32.06,71.46,71.46,71.46,71.46-32.06,71.46-71.46-32.06-71.46-71.46-71.46Z"/>
|
||||
<path d="M420.06,374.77c-33.04,0-59.92-26.88-59.92-59.92s26.88-59.91,59.92-59.91,59.92,26.88,59.92,59.91-26.88,59.92-59.92,59.92ZM420.06,259.94c-30.28,0-54.92,24.63-54.92,54.91s24.63,54.92,54.92,54.92,54.92-24.63,54.92-54.92-24.63-54.91-54.92-54.91Z"/>
|
||||
<path d="M517.22,301.15c-42.16,0-76.46-34.3-76.46-76.46s34.3-76.46,76.46-76.46,76.46,34.3,76.46,76.46-34.3,76.46-76.46,76.46ZM517.22,153.23c-39.4,0-71.46,32.06-71.46,71.46s32.06,71.46,71.46,71.46,71.46-32.06,71.46-71.46-32.06-71.46-71.46-71.46Z"/>
|
||||
<path id="L3_outline_" d="M219.94,354.21c-21.7,0-39.36-17.66-39.36-39.36s17.66-39.36,39.36-39.36,39.36,17.66,39.36,39.36-17.66,39.36-39.36,39.36ZM219.94,280.49c-18.95,0-34.36,15.41-34.36,34.36s15.41,34.36,34.36,34.36,34.36-15.41,34.36-34.36-15.41-34.36-34.36-34.36Z"/>
|
||||
<path id="R3_outline_" d="M420.06,354.21c-21.7,0-39.36-17.66-39.36-39.36s17.66-39.36,39.36-39.36,39.36,17.66,39.36,39.36-17.66,39.36-39.36,39.36ZM420.06,280.49c-18.95,0-34.36,15.41-34.36,34.36s15.41,34.36,34.36,34.36,34.36-15.41,34.36-34.36-15.41-34.36-34.36-34.36Z"/>
|
||||
<g id="Speaker_grill">
|
||||
<circle class="st2" cx="297.85" cy="262.87" r="2.73"/>
|
||||
<circle class="st2" cx="309.07" cy="262.87" r="2.73"/>
|
||||
<circle class="st2" cx="320.29" cy="262.87" r="2.73"/>
|
||||
<circle class="st2" cx="331.51" cy="262.87" r="2.73"/>
|
||||
<circle class="st2" cx="303.46" cy="270.62" r="2.73"/>
|
||||
<circle class="st2" cx="314.68" cy="270.62" r="2.73"/>
|
||||
<circle class="st2" cx="325.9" cy="270.62" r="2.73"/>
|
||||
<!-- <circle class="st2" cx="308.78" cy="279" r="2.73"/> -->
|
||||
<!-- <circle class="st2" cx="320" cy="279" r="2.73"/> -->
|
||||
<!-- <circle class="st2" cx="331.22" cy="279" r="2.73"/> -->
|
||||
<circle class="st2" cx="337.12" cy="270.62" r="2.73"/>
|
||||
<circle class="st2" cx="342.73" cy="262.87" r="2.73"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Button_outlines">
|
||||
<path id="L2_outline" d="M163.04,87.76h-65.24c-2.13,0-4.09-.98-5.38-2.68s-1.69-3.86-1.1-5.91l11.58-40.63c3.95-13.88,16.3-23.42,30.73-23.74,17.35-.38,31.99,12.85,33.35,30.15l2.79,35.54c.15,1.87-.5,3.73-1.77,5.1-1.27,1.38-3.08,2.16-4.95,2.16ZM134.37,19.8c-.21,0-.42,0-.63,0-12.22.27-22.68,8.36-26.03,20.11l-11.58,40.63c-.15.53-.05,1.09.28,1.53.33.44.84.69,1.39.69h65.24c.49,0,.94-.2,1.28-.56s.5-.83.46-1.32l-2.79-35.54c-1.13-14.44-13.21-25.55-27.62-25.55Z"/>
|
||||
<path id="R2_outline" d="M542.2,87.76h-65.24c-1.87,0-3.68-.79-4.95-2.16-1.27-1.38-1.92-3.24-1.77-5.1l2.79-35.54c1.36-17.3,16.01-30.5,33.35-30.15,14.42.32,26.77,9.86,30.73,23.74l11.58,40.63c.58,2.05.18,4.21-1.1,5.91s-3.25,2.68-5.38,2.68ZM505.63,19.8c-14.42,0-26.49,11.11-27.62,25.55l-2.79,35.54c-.04.49.12.96.46,1.32s.79.56,1.28.56h65.24c.55,0,1.06-.25,1.39-.69.33-.44.44-1,.28-1.53l-11.58-40.63c-3.35-11.75-13.81-19.84-26.03-20.11-.21,0-.42,0-.63,0Z"/>
|
||||
<path id="Create_outline" d="M193.86,179.05c-5.93,0-10.76-4.83-10.76-10.76v-16.03c0-5.93,4.83-10.76,10.76-10.76s10.76,4.83,10.76,10.76v16.03c0,5.93-4.83,10.76-10.76,10.76ZM193.86,146.51c-3.18,0-5.76,2.58-5.76,5.76v16.03c0,3.18,2.58,5.76,5.76,5.76s5.76-2.58,5.76-5.76v-16.03c0-3.18-2.58-5.76-5.76-5.76Z"/>
|
||||
<path id="Options_outline" d="M446.14,179.05c-5.93,0-10.76-4.83-10.76-10.76v-16.03c0-5.93,4.83-10.76,10.76-10.76s10.76,4.83,10.76,10.76v16.03c0,5.93-4.83,10.76-10.76,10.76ZM446.14,146.51c-3.18,0-5.76,2.58-5.76,5.76v16.03c0,3.18,2.58,5.76,5.76,5.76s5.76-2.58,5.76-5.76v-16.03c0-3.18-2.58-5.76-5.76-5.76Z"/>
|
||||
<path id="Left_outline" d="M89.18,245.11h-6.9c-7.8,0-14.14-6.34-14.14-14.14v-12.57c0-7.8,6.34-14.14,14.14-14.14h6.44c5.71,0,11.12,2.19,15.23,6.17l7.89,7.64c1.97,1.92,3.07,4.59,3.01,7.34-.06,2.75-1.26,5.37-3.31,7.2l-7.79,6.95c-4.01,3.58-9.19,5.55-14.57,5.55ZM82.28,209.27c-5.04,0-9.14,4.1-9.14,9.14v12.57c0,5.04,4.1,9.14,9.14,9.14h6.9c4.15,0,8.14-1.52,11.24-4.28l7.79-6.95c1.03-.92,1.61-2.19,1.64-3.57.03-1.39-.5-2.68-1.5-3.64l-7.89-7.64c-3.17-3.07-7.34-4.76-11.75-4.76h-6.44Z"/>
|
||||
<path id="Right_outline" d="M163.28,245.11h-6.44c-5.71,0-11.12-2.19-15.23-6.17l-7.89-7.64c-1.97-1.92-3.07-4.59-3.01-7.34.06-2.75,1.26-5.37,3.31-7.2l7.79-6.95c4.01-3.58,9.19-5.55,14.57-5.55h6.9c7.8,0,14.14,6.34,14.14,14.14v12.57c0,7.8-6.34,14.14-14.14,14.14ZM156.38,209.27c-4.15,0-8.14,1.52-11.24,4.28l-7.79,6.95c-1.03.92-1.61,2.19-1.64,3.57-.03,1.39.5,2.68,1.5,3.64l7.89,7.64c3.17,3.07,7.34,4.76,11.75,4.76h6.44c5.04,0,9.14-4.1,9.14-9.14v-12.57c0-5.04-4.1-9.14-9.14-9.14h-6.9Z"/>
|
||||
<path id="Down_outline" d="M129.07,279.32h-12.57c-7.8,0-14.14-6.34-14.14-14.14v-6.44c0-5.71,2.19-11.12,6.17-15.23l7.64-7.89c1.92-1.97,4.59-3.05,7.34-3.01,2.75.06,5.37,1.26,7.2,3.31l6.95,7.79c3.58,4.01,5.55,9.19,5.55,14.57v6.9c0,7.8-6.34,14.14-14.14,14.14ZM123.29,237.62c-1.35,0-2.6.53-3.54,1.5l-7.64,7.89c-3.07,3.17-4.76,7.34-4.76,11.75v6.44c0,5.04,4.1,9.14,9.14,9.14h12.57c5.04,0,9.14-4.1,9.14-9.14v-6.9c0-4.15-1.52-8.14-4.28-11.24l-6.95-7.79c-.92-1.03-2.19-1.61-3.57-1.64-.04,0-.07,0-.11,0Z"/>
|
||||
<path id="Up_outline" d="M122.26,216.76c-.07,0-.13,0-.2,0-2.75-.06-5.37-1.26-7.2-3.31l-6.95-7.79c-3.58-4.01-5.55-9.19-5.55-14.57v-6.9c0-7.8,6.34-14.14,14.14-14.14h12.57c7.8,0,14.14,6.34,14.14,14.14v6.44c0,5.71-2.19,11.12-6.17,15.23l-7.64,7.89c-1.87,1.92-4.46,3.02-7.13,3.02ZM116.49,175.06c-5.04,0-9.14,4.1-9.14,9.14v6.9c0,4.15,1.52,8.14,4.28,11.24l6.95,7.79c.92,1.03,2.19,1.61,3.57,1.64,1.38.02,2.68-.5,3.64-1.5l7.64-7.89c3.07-3.17,4.76-7.34,4.76-11.75v-6.44c0-5.04-4.1-9.14-9.14-9.14h-12.57Z"/>
|
||||
<path id="Cross_outline" d="M517.22,292.79c-12.23,0-22.17-9.95-22.17-22.17s9.95-22.17,22.17-22.17,22.17,9.95,22.17,22.17-9.95,22.17-22.17,22.17ZM517.22,253.44c-9.47,0-17.17,7.7-17.17,17.17s7.7,17.17,17.17,17.17,17.17-7.7,17.17-17.17-7.7-17.17-17.17-17.17Z"/>
|
||||
<path id="Triangle_outline" d="M517.22,201.15c-12.23,0-22.17-9.95-22.17-22.17s9.95-22.17,22.17-22.17,22.17,9.95,22.17,22.17-9.95,22.17-22.17,22.17ZM517.22,161.81c-9.47,0-17.17,7.7-17.17,17.17s7.7,17.17,17.17,17.17,17.17-7.7,17.17-17.17-7.7-17.17-17.17-17.17Z"/>
|
||||
<path id="Circle_outline" d="M563.04,246.97c-12.23,0-22.17-9.95-22.17-22.17s9.95-22.17,22.17-22.17,22.17,9.95,22.17,22.17-9.95,22.17-22.17,22.17ZM563.04,207.63c-9.47,0-17.17,7.7-17.17,17.17s7.7,17.17,17.17,17.17,17.17-7.7,17.17-17.17-7.7-17.17-17.17-17.17Z"/>
|
||||
<path id="Square_outline" d="M471.4,246.97c-12.23,0-22.17-9.95-22.17-22.17s9.95-22.17,22.17-22.17,22.17,9.95,22.17,22.17-9.95,22.17-22.17,22.17ZM471.4,207.63c-9.47,0-17.17,7.7-17.17,17.17s7.7,17.17,17.17,17.17,17.17-7.7,17.17-17.17-7.7-17.17-17.17-17.17Z"/>
|
||||
<path id="PS_outline" d="M320.16,331.18c-9,0-16.32-7.32-16.32-16.32s7.32-16.32,16.32-16.32,16.32,7.32,16.32,16.32-7.32,16.32-16.32,16.32ZM320.16,303.53c-6.24,0-11.32,5.08-11.32,11.32s5.08,11.32,11.32,11.32,11.32-5.08,11.32-11.32-5.08-11.32-11.32-11.32Z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g id="Trackpad_infill" >
|
||||
<!-- smaller infill <path d="M224.42,133.65h-191.01c2.47h191.15v102.42c0,1.92-1.56,3.48-3.48,3.48h-184.19c-1.92,0-3.48-1.56-3.48-3.48v-102.42h0Z"/> -->
|
||||
<path d="M419.35,234.87v-102.38c0-2.12-1.73-3.85-3.85-3.85h-191.01c-2.12,0-3.85,1.73-3.85,3.85v102.38c0,4.13,3.36,7.5,7.5,7.5h183.71c4.13,0,7.5-3.36,7.5-7.5Z"/>
|
||||
</g>
|
||||
<g id="Trackpad_outline" >
|
||||
<path d="M415.51,123.65h-191.01c-4.88,0-8.85,3.97-8.85,8.85v102.38c0,6.89,5.61,12.5,12.5,12.5h183.71c6.89,0,12.5-5.61,12.5-12.5v-102.38c0-4.88-3.97-8.85-8.85-8.85ZM228.14,242.36c-4.13,0-7.5-3.36-7.5-7.5v-102.38c0-2.12,1.73-3.85,3.85-3.85h191.01c2.12,0,3.85,1.73,3.85,3.85v102.38c0,4.13-3.36,7.5-7.5,7.5h-183.71Z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="L3">
|
||||
<g id="L3_infill">
|
||||
<circle cx="219.94" cy="314.85" r="36.86"/>
|
||||
</g>
|
||||
<g id="L3_outline">
|
||||
<path d="M219.94,354.21c-21.7,0-39.36-17.66-39.36-39.36s17.66-39.36,39.36-39.36,39.36,17.66,39.36,39.36-17.66,39.36-39.36,39.36ZM219.94,280.49c-18.95,0-34.36,15.41-34.36,34.36s15.41,34.36,34.36,34.36,34.36-15.41,34.36-34.36-15.41-34.36-34.36-34.36Z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="R3">
|
||||
<g id="R3_infill">
|
||||
<circle cx="420.06" cy="314.85" r="36.86"/>
|
||||
</g>
|
||||
<g id="R3_outline">
|
||||
<path d="M420.06,354.21c-21.7,0-39.36-17.66-39.36-39.36s17.66-39.36,39.36-39.36,39.36,17.66,39.36,39.36-17.66,39.36-39.36,39.36ZM420.06,280.49c-18.95,0-34.36,15.41-34.36,34.36s15.41,34.36,34.36,34.36,34.36-15.41,34.36-34.36-15.41-34.36-34.36-34.36Z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="TriggerPercentages">
|
||||
<text id="L2_percentage" x="133" y="70" font-family="Arial, sans-serif" font-size="19" font-weight="bold" fill="#1a237e" text-anchor="middle" opacity="0">0 %</text>
|
||||
<text id="R2_percentage" x="507" y="70" font-family="Arial, sans-serif" font-size="19" font-weight="bold" fill="#1a237e" text-anchor="middle" opacity="0">0 %</text>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 16 KiB |
48
assets/icons.svg
Normal file
@@ -0,0 +1,48 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" class="d-none">
|
||||
<symbol id="paypal" viewBox="0 0 384 512">
|
||||
<path fill="currentColor" d="M111.4 295.9c-3.5 19.2-17.4 108.7-21.5 134-.3 1.8-1 2.5-3 2.5H12.3c-7.6 0-13.1-6.6-12.1-13.9L58.8 46.6c1.5-9.6 10.1-16.9 20-16.9 152.3 0 165.1-3.7 204 11.4 60.1 23.3 65.6 79.5 44 140.3-21.5 62.6-72.5 89.5-140.1 90.3-43.4 .7-69.5-7-75.3 24.2zM357.1 152c-1.8-1.3-2.5-1.8-3 1.3-2 11.4-5.1 22.5-8.8 33.6-39.9 113.8-150.5 103.9-204.5 103.9-6.1 0-10.1 3.3-10.9 9.4-22.6 140.4-27.1 169.7-27.1 169.7-1 7.1 3.5 12.9 10.6 12.9h63.5c8.6 0 15.7-6.3 17.4-14.9 .7-5.4-1.1 6.1 14.4-91.3 4.6-22 14.3-19.7 29.3-19.7 71 0 126.4-28.8 142.9-112.3 6.5-34.8 4.6-71.4-23.8-92.6z"/>
|
||||
</symbol>
|
||||
<symbol id="ethereum" viewBox="0 0 320 512">
|
||||
<path fill="currentColor" d="M311.9 260.8L160 353.6 8 260.8 160 0l151.9 260.8zM160 383.4L8 290.6 160 512l152-221.4-152 92.8z"/>
|
||||
</symbol>
|
||||
<symbol id="info" viewBox="0 -880 960 960">
|
||||
<path fill="currentColor" d="M440-280h80v-240h-80v240Zm40-320q17 0 28.5-11.5T520-640q0-17-11.5-28.5T480-680q-17 0-28.5 11.5T440-640q0 17 11.5 28.5T480-600Zm0 520q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z"/>
|
||||
</symbol>
|
||||
<symbol id="discord" viewBox="0 0 640 512">
|
||||
<path fill="currentColor" d="M524.531,69.836a1.5,1.5,0,0,0-.764-.7A485.065,485.065,0,0,0,404.081,32.03a1.816,1.816,0,0,0-1.923.91,337.461,337.461,0,0,0-14.9,30.6,447.848,447.848,0,0,0-134.426,0,309.541,309.541,0,0,0-15.135-30.6,1.89,1.89,0,0,0-1.924-.91A483.689,483.689,0,0,0,116.085,69.137a1.712,1.712,0,0,0-.788.676C39.068,183.651,18.186,294.69,28.43,404.354a2.016,2.016,0,0,0,.765,1.375A487.666,487.666,0,0,0,176.02,479.918a1.9,1.9,0,0,0,2.063-.676A348.2,348.2,0,0,0,208.12,430.4a1.86,1.86,0,0,0-1.019-2.588,321.173,321.173,0,0,1-45.868-21.853,1.885,1.885,0,0,1-.185-3.126c3.082-2.309,6.166-4.711,9.109-7.137a1.819,1.819,0,0,1,1.9-.256c96.229,43.917,200.41,43.917,295.5,0a1.812,1.812,0,0,1,1.924.233c2.944,2.426,6.027,4.851,9.132,7.16a1.884,1.884,0,0,1-.162,3.126,301.407,301.407,0,0,1-45.89,21.83,1.875,1.875,0,0,0-1,2.611,391.055,391.055,0,0,0,30.014,48.815,1.864,1.864,0,0,0,2.063.7A486.048,486.048,0,0,0,610.7,405.729a1.882,1.882,0,0,0,.765-1.352C623.729,277.594,590.933,167.465,524.531,69.836ZM222.491,337.58c-28.972,0-52.844-26.587-52.844-59.239S193.056,219.1,222.491,219.1c29.665,0,53.306,26.82,52.843,59.239C275.334,310.993,251.924,337.58,222.491,337.58Zm195.38,0c-28.971,0-52.843-26.587-52.843-59.239S388.437,219.1,417.871,219.1c29.667,0,53.307,26.82,52.844,59.239C470.715,310.993,447.538,337.58,417.871,337.58Z"/>
|
||||
</symbol>
|
||||
<symbol id="mail" viewBox="0 0 512 512">
|
||||
<path fill="currentColor" d="M48 64C21.5 64 0 85.5 0 112c0 15.1 7.1 29.3 19.2 38.4L236.8 313.6c11.4 8.5 27 8.5 38.4 0L492.8 150.4c12.1-9.1 19.2-23.3 19.2-38.4c0-26.5-21.5-48-48-48H48zM0 176V384c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V176L294.4 339.2c-22.8 17.1-54 17.1-76.8 0L0 176z"/>
|
||||
</symbol>
|
||||
<symbol id="github" viewBox="0 0 496 512">
|
||||
<path fill="currentColor" d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/>
|
||||
</symbol>
|
||||
<symbol id="time-back" viewBox="0 0 16 16">
|
||||
<path fill="currentColor" d="M8,0C5.609,0,3.463,1.047,2,2.709V0H0v6h6V4H3.528C3.6,3.916,3.681,3.838,3.756,3.756 C4.891,2.625,6.397,2,8,2s3.109,0.625,4.244,1.756C13.375,4.891,14,6.397,14,8s-0.625,3.109-1.756,4.244 C11.109,13.375,9.603,14,8,14s-3.113-0.619-4.244-1.756S2,9.603,2,8H0c0,4.419,3.581,8,8,8s8-3.581,8-8S12.419,0,8,0z M7,4v4.416 l3.291,3.291l1.416-1.416L9,7.584V4H7z" />
|
||||
</symbol>
|
||||
<symbol id="mug" viewBox="0 0 512 512">
|
||||
<path fill="currentColor" d="M88 0C74.7 0 64 10.7 64 24c0 38.9 23.4 59.4 39.1 73.1l1.1 1C120.5 112.3 128 119.9 128 136c0 13.3 10.7 24 24 24s24-10.7 24-24c0-38.9-23.4-59.4-39.1-73.1l-1.1-1C119.5 47.7 112 40.1 112 24c0-13.3-10.7-24-24-24zM32 192c-17.7 0-32 14.3-32 32V416c0 53 43 96 96 96H288c53 0 96-43 96-96h16c61.9 0 112-50.1 112-112s-50.1-112-112-112H352 32zm352 64h16c26.5 0 48 21.5 48 48s-21.5 48-48 48H384V256zM224 24c0-13.3-10.7-24-24-24s-24 10.7-24 24c0 38.9 23.4 59.4 39.1 73.1l1.1 1C232.5 112.3 240 119.9 240 136c0 13.3 10.7 24 24 24s24-10.7 24-24c0-38.9-23.4-59.4-39.1-73.1l-1.1-1C231.5 47.7 224 40.1 224 24z"/>
|
||||
</symbol>
|
||||
<symbol id="lang" viewBox="0 0 640 512">
|
||||
<path d="M0 128C0 92.7 28.7 64 64 64H256h48 16H576c35.3 0 64 28.7 64 64V384c0 35.3-28.7 64-64 64H320 304 256 64c-35.3 0-64-28.7-64-64V128zm320 0V384H576V128H320zM178.3 175.9c-3.2-7.2-10.4-11.9-18.3-11.9s-15.1 4.7-18.3 11.9l-64 144c-4.5 10.1 .1 21.9 10.2 26.4s21.9-.1 26.4-10.2l8.9-20.1h73.6l8.9 20.1c4.5 10.1 16.3 14.6 26.4 10.2s14.6-16.3 10.2-26.4l-64-144zM160 233.2L179 276H141l19-42.8zM448 164c11 0 20 9 20 20v4h44 16c11 0 20 9 20 20s-9 20-20 20h-2l-1.6 4.5c-8.9 24.4-22.4 46.6-39.6 65.4c.9 .6 1.8 1.1 2.7 1.6l18.9 11.3c9.5 5.7 12.5 18 6.9 27.4s-18 12.5-27.4 6.9l-18.9-11.3c-4.5-2.7-8.8-5.5-13.1-8.5c-10.6 7.5-21.9 14-34 19.4l-3.6 1.6c-10.1 4.5-21.9-.1-26.4-10.2s.1-21.9 10.2-26.4l3.6-1.6c6.4-2.9 12.6-6.1 18.5-9.8l-12.2-12.2c-7.8-7.8-7.8-20.5 0-28.3s20.5-7.8 28.3 0l14.6 14.6 .5 .5c12.4-13.1 22.5-28.3 29.8-45H448 376c-11 0-20-9-20-20s9-20 20-20h52v-4c0-11 9-20 20-20z"/>
|
||||
</symbol>
|
||||
<symbol id="arrows-alt" viewBox="-8.5 0 32 32">
|
||||
<path fill="currentColor" d="M13.76 18.48v0c-0.48 0-0.84 0.36-0.84 0.84v1.12l-4.4-4.4 4.4-4.4v1.12c0 0.48 0.36 0.84 0.84 0.84s0.84-0.36 0.84-0.84v-3.16c0-0.48-0.36-0.84-0.88-0.84v0h-3.16c-0.48 0-0.84 0.36-0.84 0.84s0.36 0.84 0.84 0.84h1.12l-4.4 4.4-4.4-4.4h1.16c0.48 0 0.84-0.36 0.84-0.84s-0.36-0.84-0.84-0.84h-3.16c-0.52 0-0.88 0.4-0.88 0.88v3.16c0 0.48 0.36 0.8 0.84 0.8v0c0.48 0 0.84-0.36 0.84-0.84v-1.12l4.4 4.4-4.4 4.4v-1.12c0-0.48-0.36-0.84-0.84-0.84-0.44-0.040-0.8 0.32-0.8 0.8v3.16c0 0.44 0.24 0.8 0.84 0.8h3.16c0.48 0 0.84-0.36 0.84-0.84s-0.36-0.8-0.84-0.8h-1.12l4.4-4.4 4.4 4.4h-1.12c-0.48 0-0.84 0.36-0.84 0.84s0.36 0.84 0.84 0.84h3.16c0.56 0 0.88-0.32 0.88-0.8v0-3.16c-0.040-0.48-0.44-0.84-0.88-0.84z"></path>
|
||||
</symbol>
|
||||
<symbol id="ps-square" viewBox="0 0 32 32">
|
||||
<circle cx="16" cy="16" r="16" fill="currentColor"/>
|
||||
<rect x="9" y="9" width="14" height="14" fill="none" stroke="#ffffff" stroke-width="3"/>
|
||||
</symbol>
|
||||
<symbol id="ps-circle" viewBox="0 0 32 32">
|
||||
<circle cx="16" cy="16" r="16" fill="currentColor"/>
|
||||
<circle cx="16" cy="16" r="7" fill="none" stroke="#ffffff" stroke-width="3"/>
|
||||
</symbol>
|
||||
<symbol id="ps-cross" viewBox="0 0 32 32">
|
||||
<circle cx="16" cy="16" r="16" fill="currentColor"/>
|
||||
<path fill="none" stroke="#ffffff" stroke-width="3" stroke-linecap="round" d="M10 10 L22 22 M22 10 L10 22"/>
|
||||
</symbol>
|
||||
<symbol id="ps-triangle" viewBox="0 0 32 32">
|
||||
<circle cx="16" cy="16" r="16" fill="currentColor"/>
|
||||
<path fill="none" stroke="#ffffff" stroke-width="3" stroke-linejoin="miter" d="M16 8 L24 22 L8 22 Z"/>
|
||||
</symbol>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 8.1 KiB |
150
css/finetune.css
Normal file
@@ -0,0 +1,150 @@
|
||||
/* Styles for fine-tuning interface */
|
||||
|
||||
/* Styling for coordinate labels - base state to prevent layout shift */
|
||||
#finetuneStickCanvasLx-lbl,
|
||||
#finetuneStickCanvasLy-lbl,
|
||||
#finetuneStickCanvasRx-lbl,
|
||||
#finetuneStickCanvasRy-lbl {
|
||||
padding: 2px 4px !important;
|
||||
border-radius: 3px !important;
|
||||
background-color: transparent !important;
|
||||
}
|
||||
|
||||
/* Styling for finetune input boxes - base state to prevent layout shift */
|
||||
input[id^="finetune"] {
|
||||
border: 1px solid transparent !important;
|
||||
width: 90px !important;
|
||||
min-width: 90px !important;
|
||||
color: #969696 !important;
|
||||
}
|
||||
|
||||
/* Styling for highlighted coordinate labels */
|
||||
#finetuneStickCanvasLx-lbl.text-primary,
|
||||
#finetuneStickCanvasLy-lbl.text-primary,
|
||||
#finetuneStickCanvasRx-lbl.text-primary,
|
||||
#finetuneStickCanvasRy-lbl.text-primary {
|
||||
color: #0d6efd !important;
|
||||
background-color: rgba(13, 110, 253, 0.1) !important;
|
||||
}
|
||||
|
||||
/* CSS Grid layout for finetune inputs around canvas */
|
||||
.finetune-grid {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr auto 1fr;
|
||||
grid-template-rows: auto 1fr auto;
|
||||
grid-template-areas:
|
||||
". top ."
|
||||
"left center right"
|
||||
". bottom .";
|
||||
justify-items: center;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
margin: 0 auto;
|
||||
max-width: fit-content;
|
||||
}
|
||||
|
||||
.finetune-top {
|
||||
grid-area: top;
|
||||
}
|
||||
|
||||
.finetune-left {
|
||||
grid-area: left;
|
||||
}
|
||||
|
||||
.finetune-center {
|
||||
grid-area: center;
|
||||
}
|
||||
|
||||
.finetune-right {
|
||||
grid-area: right;
|
||||
}
|
||||
|
||||
.finetune-bottom {
|
||||
grid-area: bottom;
|
||||
}
|
||||
|
||||
/* Finetune mode visibility controls */
|
||||
.finetune-center-mode {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.finetune-circularity-mode {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* When circularity mode is active */
|
||||
#finetuneModal.circularity-mode .finetune-center-mode {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#finetuneModal.circularity-mode .finetune-circularity-mode {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/* Hide raw numbers mode - hide input boxes when checkbox is unchecked */
|
||||
#finetuneModal.hide-raw-numbers .finetune-top,
|
||||
#finetuneModal.hide-raw-numbers .finetune-left,
|
||||
#finetuneModal.hide-raw-numbers .finetune-right,
|
||||
#finetuneModal.hide-raw-numbers .finetune-bottom {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* Hide spacers when raw numbers are hidden */
|
||||
#finetuneModal.hide-raw-numbers .spacer.hide-raw-numbers {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* Adjust grid layout when raw numbers are hidden - center the canvas */
|
||||
#finetuneModal.hide-raw-numbers .finetune-grid {
|
||||
grid-template-columns: 1fr;
|
||||
grid-template-rows: 1fr;
|
||||
grid-template-areas: "center";
|
||||
}
|
||||
|
||||
/* when element with id finetuneModal has class hide-raw-numbers, hide all elements with id finetuneStickCanvasL and finetuneStickCanvasR */
|
||||
#finetuneModal.hide-raw-numbers #finetuneStickCanvasL,
|
||||
#finetuneModal.hide-raw-numbers #finetuneStickCanvasR {
|
||||
display: none;
|
||||
}
|
||||
#finetuneModal:not(.hide-raw-numbers) #finetuneStickCanvasL,
|
||||
#finetuneModal:not(.hide-raw-numbers) #finetuneStickCanvasR {
|
||||
display: block;
|
||||
}
|
||||
#finetuneModal.hide-raw-numbers #finetuneStickCanvasL_large,
|
||||
#finetuneModal.hide-raw-numbers #finetuneStickCanvasR_large
|
||||
{
|
||||
display: block;
|
||||
}
|
||||
#finetuneModal:not(.hide-raw-numbers) #finetuneStickCanvasL_large,
|
||||
#finetuneModal:not(.hide-raw-numbers) #finetuneStickCanvasR_large {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* Error slack button toggle states */
|
||||
.left-stick-values,
|
||||
.right-stick-values {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.left-stick-slider,
|
||||
.right-stick-slider {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* When left stick is in slider mode (only in circularity mode) */
|
||||
#finetuneModal.circularity-mode #left-stick-card.show-slider .left-stick-values {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
#finetuneModal.circularity-mode #left-stick-card.show-slider .left-stick-slider.finetune-circularity-mode {
|
||||
display: block !important;
|
||||
}
|
||||
|
||||
/* When right stick is in slider mode (only in circularity mode) */
|
||||
#finetuneModal.circularity-mode #right-stick-card.show-slider .right-stick-values {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
#finetuneModal.circularity-mode #right-stick-card.show-slider .right-stick-slider.finetune-circularity-mode {
|
||||
display: block !important;
|
||||
}
|
||||
130
css/main.css
Normal file
@@ -0,0 +1,130 @@
|
||||
/* Main styles for DualShock Calibration GUI */
|
||||
|
||||
/* Add padding to body to prevent content from being hidden behind fixed footer */
|
||||
body {
|
||||
padding-bottom: 80px;
|
||||
}
|
||||
|
||||
dl.row dt {
|
||||
font-weight: normal;
|
||||
}
|
||||
dl.row dd {
|
||||
font-family: monospace;
|
||||
}
|
||||
|
||||
#left-stick-card,
|
||||
#right-stick-card {
|
||||
cursor: pointer;
|
||||
outline: none !important;
|
||||
}
|
||||
|
||||
.stick-card-active {
|
||||
border: 1px solid #0d6efd !important;
|
||||
box-shadow: 0 0 10px rgba(13, 110, 253, 0.3) !important;
|
||||
}
|
||||
|
||||
.stick-card-active .card-header {
|
||||
background-color: #0d6efd !important;
|
||||
color: white !important;
|
||||
}
|
||||
|
||||
/* Quick Test Icon Animations */
|
||||
@keyframes shake {
|
||||
0%, 100% { transform: translateX(0); }
|
||||
10%, 30%, 50%, 70%, 90% { transform: translateX(-2px); }
|
||||
20%, 40%, 60%, 80% { transform: translateX(2px); }
|
||||
}
|
||||
|
||||
@keyframes pulse {
|
||||
0%, 100% { transform: scale(1); opacity: 1; }
|
||||
50% { transform: scale(1.1); opacity: 0.8; }
|
||||
}
|
||||
|
||||
@keyframes bounce {
|
||||
0%, 20%, 50%, 80%, 100% { transform: translateY(0); }
|
||||
40% { transform: translateY(-3px); }
|
||||
60% { transform: translateY(-2px); }
|
||||
}
|
||||
|
||||
@keyframes glow {
|
||||
0%, 100% { text-shadow: 0 0 5px rgba(13, 110, 253, 0.5); }
|
||||
50% { text-shadow: 0 0 15px rgba(13, 110, 253, 0.8), 0 0 25px rgba(13, 110, 253, 0.6); }
|
||||
}
|
||||
|
||||
/* Animation classes for different test types - only animate when accordion is expanded */
|
||||
.accordion-item:has(.accordion-collapse.show) i.fas.test-icon-usb {
|
||||
animation: pulse 1s ease-in-out infinite !important;
|
||||
}
|
||||
|
||||
.accordion-item:has(.accordion-collapse.show) i.fas.test-icon-buttons {
|
||||
animation: bounce 0.6s ease-in-out infinite !important;
|
||||
}
|
||||
|
||||
.accordion-item:has(.accordion-collapse.show) i.fas.test-icon-haptic {
|
||||
animation: shake 0.5s ease-in-out infinite !important;
|
||||
}
|
||||
|
||||
.accordion-item:has(.accordion-collapse.show) i.fas.test-icon-adaptive {
|
||||
animation: pulse 1s ease-in-out infinite !important;
|
||||
}
|
||||
|
||||
.accordion-item:has(.accordion-collapse.show) i.fas.test-icon-speaker {
|
||||
animation: bounce 0.6s ease-in-out infinite !important;
|
||||
}
|
||||
|
||||
.accordion-item:has(.accordion-collapse.show) i.fas.test-icon-microphone {
|
||||
animation: glow 1.5s ease-in-out infinite !important;
|
||||
}
|
||||
|
||||
.accordion-item:has(.accordion-collapse.show) i.fas.test-icon-lights {
|
||||
animation: glow 1.2s ease-in-out infinite !important;
|
||||
}
|
||||
|
||||
.accordion-item:has(.accordion-collapse.show) i.fas.test-icon-headphone {
|
||||
animation: pulse 1s ease-in-out infinite !important;
|
||||
}
|
||||
|
||||
/* Quick Test accordion button height reduction */
|
||||
#quickTestAccordion .accordion-button {
|
||||
padding: 0.5rem 1rem;
|
||||
}
|
||||
|
||||
/* Quick Test accordion body tint */
|
||||
#quickTestAccordion .accordion-collapse .accordion-body {
|
||||
background-color: rgba(13, 125, 253, 0.05);
|
||||
}
|
||||
|
||||
/* Skip button hover behavior */
|
||||
.skip-btn {
|
||||
opacity: 0;
|
||||
transition: opacity 0.2s ease-in-out;
|
||||
}
|
||||
|
||||
.accordion-header:hover .skip-btn {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
/* Blinking animation for range calibration alert */
|
||||
@keyframes blink {
|
||||
0%, 50% { opacity: 1; }
|
||||
51%, 100% { opacity: 0.3; }
|
||||
}
|
||||
|
||||
.blink-text {
|
||||
animation: blink 1s infinite;
|
||||
}
|
||||
|
||||
/* Pulsing animation for text */
|
||||
@keyframes pulse-text {
|
||||
0%, 100% { opacity: 1; }
|
||||
50% { opacity: 0.5; }
|
||||
}
|
||||
|
||||
.pulsing-text {
|
||||
animation: pulse-text 0.75s ease-in-out infinite;
|
||||
}
|
||||
|
||||
/* Set text color to red for internationalized elements */
|
||||
/* .ds-i18n {
|
||||
color: red;
|
||||
} */
|
||||
183
dev-server.js
Normal file
@@ -0,0 +1,183 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
import https from 'https';
|
||||
import http from 'http';
|
||||
import fs from 'fs';
|
||||
import path from 'path';
|
||||
import { fileURLToPath } from 'url';
|
||||
|
||||
const __filename = fileURLToPath(import.meta.url);
|
||||
const __dirname = path.dirname(__filename);
|
||||
|
||||
// Configuration
|
||||
const config = {
|
||||
port: process.env.PORT || 8443,
|
||||
httpPort: process.env.HTTP_PORT || 8080,
|
||||
host: process.env.HOST || 'localhost',
|
||||
distDir: path.join(__dirname, 'dist'),
|
||||
certFile: path.join(__dirname, 'server.crt'),
|
||||
keyFile: path.join(__dirname, 'server.key'),
|
||||
useHttps: process.env.HTTPS === 'true'
|
||||
};
|
||||
|
||||
// MIME types
|
||||
const mimeTypes = {
|
||||
'.html': 'text/html',
|
||||
'.js': 'text/javascript',
|
||||
'.css': 'text/css',
|
||||
'.json': 'application/json',
|
||||
'.png': 'image/png',
|
||||
'.jpg': 'image/jpeg',
|
||||
'.gif': 'image/gif',
|
||||
'.svg': 'image/svg+xml',
|
||||
'.ico': 'image/x-icon',
|
||||
'.webmanifest': 'application/manifest+json'
|
||||
};
|
||||
|
||||
function getMimeType(filePath) {
|
||||
const ext = path.extname(filePath).toLowerCase();
|
||||
return mimeTypes[ext] || 'application/octet-stream';
|
||||
}
|
||||
|
||||
function requestHandler(req, res) {
|
||||
// Parse URL and remove query parameters
|
||||
let urlPath = new URL(req.url, `http://${req.headers.host}`).pathname;
|
||||
|
||||
// Default to index.html for root requests
|
||||
if (urlPath === '/') {
|
||||
urlPath = '/index.html';
|
||||
}
|
||||
|
||||
const filePath = path.join(config.distDir, urlPath);
|
||||
const mimeType = getMimeType(filePath);
|
||||
|
||||
// Security check - ensure file is within dist directory
|
||||
if (!filePath.startsWith(config.distDir)) {
|
||||
res.writeHead(403, { 'Content-Type': 'text/plain' });
|
||||
res.end('Forbidden');
|
||||
return;
|
||||
}
|
||||
|
||||
// Set CORS headers for development
|
||||
res.setHeader('Access-Control-Allow-Origin', '*');
|
||||
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
|
||||
res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');
|
||||
|
||||
// Disable caching for development
|
||||
res.setHeader('Cache-Control', 'no-cache, no-store, must-revalidate');
|
||||
res.setHeader('Pragma', 'no-cache');
|
||||
res.setHeader('Expires', '0');
|
||||
|
||||
// Handle OPTIONS requests
|
||||
if (req.method === 'OPTIONS') {
|
||||
res.writeHead(200);
|
||||
res.end();
|
||||
return;
|
||||
}
|
||||
|
||||
fs.readFile(filePath, (err, data) => {
|
||||
if (err) {
|
||||
if (err.code === 'ENOENT') {
|
||||
// Try to serve index.html for SPA routing
|
||||
const indexPath = path.join(config.distDir, 'index.html');
|
||||
fs.readFile(indexPath, (indexErr, indexData) => {
|
||||
if (indexErr) {
|
||||
res.writeHead(404, { 'Content-Type': 'text/plain' });
|
||||
res.end('Not Found');
|
||||
} else {
|
||||
res.writeHead(200, { 'Content-Type': 'text/html' });
|
||||
res.end(indexData);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
res.writeHead(500, { 'Content-Type': 'text/plain' });
|
||||
res.end('Internal Server Error');
|
||||
}
|
||||
} else {
|
||||
res.writeHead(200, { 'Content-Type': mimeType });
|
||||
res.end(data);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function startServer() {
|
||||
// Check if dist directory exists
|
||||
if (!fs.existsSync(config.distDir)) {
|
||||
console.error(`❌ Dist directory not found: ${config.distDir}`);
|
||||
console.log('💡 Run "npm run build" first to build the application');
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
if (config.useHttps) {
|
||||
// Check if SSL certificates exist
|
||||
if (!fs.existsSync(config.certFile) || !fs.existsSync(config.keyFile)) {
|
||||
console.error('❌ SSL certificates not found');
|
||||
console.log('💡 SSL certificates are required for WebHID API');
|
||||
console.log(' Make sure server.crt and server.key exist in the project root');
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
// Read SSL certificates
|
||||
const options = {
|
||||
key: fs.readFileSync(config.keyFile),
|
||||
cert: fs.readFileSync(config.certFile)
|
||||
};
|
||||
|
||||
// Create HTTPS server
|
||||
const server = https.createServer(options, requestHandler);
|
||||
|
||||
server.listen(config.port, config.host, () => {
|
||||
console.log('🚀 Development server started!');
|
||||
console.log(`📱 App running at: https://${config.host}:${config.port}`);
|
||||
console.log('🔒 HTTPS enabled (required for WebHID API)');
|
||||
console.log('💡 Press Ctrl+C to stop the server');
|
||||
console.log('');
|
||||
console.log('📝 Note: You may need to accept the self-signed certificate in your browser');
|
||||
});
|
||||
|
||||
server.on('error', (err) => {
|
||||
if (err.code === 'EADDRINUSE') {
|
||||
console.error(`❌ Port ${config.port} is already in use`);
|
||||
console.log('💡 Try using a different port: PORT=8444 npm run serve:https');
|
||||
} else {
|
||||
console.error('❌ Server error:', err.message);
|
||||
}
|
||||
process.exit(1);
|
||||
});
|
||||
} else {
|
||||
// Create HTTP server (for testing only - WebHID won't work)
|
||||
const server = http.createServer(requestHandler);
|
||||
|
||||
server.listen(config.httpPort, config.host, () => {
|
||||
console.log('🚀 Development server started!');
|
||||
console.log(`📱 App running at: http://${config.host}:${config.httpPort}`);
|
||||
console.log('⚠️ HTTP mode - WebHID API will only work on localhost');
|
||||
console.log('💡 Use "npm run serve:https" to enable WebHID support to other clients on the local network');
|
||||
console.log('💡 Press Ctrl+C to stop the server');
|
||||
});
|
||||
|
||||
server.on('error', (err) => {
|
||||
if (err.code === 'EADDRINUSE') {
|
||||
console.error(`❌ Port ${config.httpPort} is already in use`);
|
||||
console.log('💡 Try using a different port: HTTP_PORT=8081 npm run serve');
|
||||
} else {
|
||||
console.error('❌ Server error:', err.message);
|
||||
}
|
||||
process.exit(1);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// Handle graceful shutdown
|
||||
process.on('SIGINT', () => {
|
||||
console.log('\n👋 Shutting down development server...');
|
||||
process.exit(0);
|
||||
});
|
||||
|
||||
process.on('SIGTERM', () => {
|
||||
console.log('\n👋 Shutting down development server...');
|
||||
process.exit(0);
|
||||
});
|
||||
|
||||
// Start the server
|
||||
startServer();
|
||||
BIN
favicon-16x16.png
Normal file
|
After Width: | Height: | Size: 659 B |
BIN
favicon-32x32.png
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
favicon-96x96.png
Normal file
|
After Width: | Height: | Size: 8.0 KiB |
BIN
favicon.ico
Normal file
|
After Width: | Height: | Size: 15 KiB |
3
favicon.svg
Normal file
|
After Width: | Height: | Size: 154 KiB |
1
googlec4c2e36a49e62fa3.html
Normal file
@@ -0,0 +1 @@
|
||||
google-site-verification: googlec4c2e36a49e62fa3.html
|
||||
319
gulpfile.js
Normal file
@@ -0,0 +1,319 @@
|
||||
import gulp from 'gulp';
|
||||
import cleanCSS from 'gulp-clean-css';
|
||||
import htmlmin from 'gulp-htmlmin';
|
||||
import concat from 'gulp-concat';
|
||||
import sourcemaps from 'gulp-sourcemaps';
|
||||
import gulpif from 'gulp-if';
|
||||
import rename from 'gulp-rename';
|
||||
import { deleteAsync } from 'del';
|
||||
import yargs from 'yargs';
|
||||
import { hideBin } from 'yargs/helpers';
|
||||
import replace from 'gulp-replace';
|
||||
import jsonMinify from 'gulp-json-minify';
|
||||
import crypto from 'crypto';
|
||||
import { rollup } from 'rollup';
|
||||
import { nodeResolve } from '@rollup/plugin-node-resolve';
|
||||
import rollupTerser from '@rollup/plugin-terser';
|
||||
import fs from 'fs/promises';
|
||||
import path from 'path';
|
||||
import { glob } from 'glob';
|
||||
|
||||
// Get command line arguments
|
||||
const argv = yargs(hideBin(process.argv)).argv;
|
||||
const isProduction = argv.production || process.env.NODE_ENV === 'production';
|
||||
|
||||
// Paths configuration
|
||||
const paths = {
|
||||
src: {
|
||||
js: {
|
||||
entry: 'js/core.js',
|
||||
all: 'js/**/*.js'
|
||||
},
|
||||
css: ['css/main.css', 'css/finetune.css'],
|
||||
html: {
|
||||
main: 'index.html',
|
||||
templates: 'templates/**/*.html'
|
||||
},
|
||||
lang: 'lang/**/*.json',
|
||||
assets: [
|
||||
'favicon.ico',
|
||||
'favicon.svg',
|
||||
'favicon-16x16.png',
|
||||
'favicon-32x32.png',
|
||||
'favicon-96x96.png',
|
||||
'apple-touch-icon.png',
|
||||
'web-app-manifest-192x192.png',
|
||||
'web-app-manifest-512x512.png',
|
||||
'site.webmanifest',
|
||||
'assets/donate.png',
|
||||
'googlec4c2e36a49e62fa3.html',
|
||||
'images/*.*',
|
||||
'fa.min.css'
|
||||
],
|
||||
svg: 'assets/**/*.svg'
|
||||
},
|
||||
dist: 'dist',
|
||||
temp: '.tmp'
|
||||
};
|
||||
|
||||
// Clean task
|
||||
function clean() {
|
||||
return deleteAsync([paths.dist, paths.temp]);
|
||||
}
|
||||
|
||||
// JavaScript bundling with Rollup
|
||||
async function scripts() {
|
||||
const inputOptions = {
|
||||
input: paths.src.js.entry,
|
||||
plugins: [
|
||||
nodeResolve(),
|
||||
...(isProduction ? [
|
||||
rollupTerser({
|
||||
compress: {
|
||||
drop_console: false,
|
||||
drop_debugger: true,
|
||||
pure_funcs: ['console.debug', 'console.trace'],
|
||||
passes: 2,
|
||||
unsafe: true,
|
||||
unsafe_comps: true,
|
||||
unsafe_math: true,
|
||||
unsafe_proto: true
|
||||
},
|
||||
mangle: {
|
||||
reserved: [
|
||||
'gboot', 'connect', 'disconnect', 'disconnectSync',
|
||||
'show_faq_modal', 'calibrate_stick_centers', 'calibrate_range',
|
||||
'ds5_finetune', 'auto_calibrate_stick_centers', 'flash_all_changes',
|
||||
'reboot_controller', 'welcome_accepted', 'show_info_tab',
|
||||
'nvslock', 'nvsunlock', 'refresh_nvstatus', 'show_edge_modal',
|
||||
'show_donate_modal'
|
||||
],
|
||||
properties: {
|
||||
regex: /^_/
|
||||
}
|
||||
},
|
||||
format: {
|
||||
comments: false
|
||||
}
|
||||
})
|
||||
] : [])
|
||||
]
|
||||
};
|
||||
|
||||
let filename = 'app.js';
|
||||
|
||||
if (isProduction) {
|
||||
const bundle = await rollup(inputOptions);
|
||||
const { output } = await bundle.generate({ format: 'es' });
|
||||
const code = output[0].code;
|
||||
const hash = crypto.createHash('md5').update(code).digest('hex').substring(0, 8);
|
||||
filename = `app-${hash}.js`;
|
||||
|
||||
await fs.writeFile(path.join(paths.dist, filename), code);
|
||||
await bundle.close();
|
||||
} else {
|
||||
const outputOptions = {
|
||||
file: path.join(paths.dist, filename),
|
||||
format: 'es',
|
||||
sourcemap: true
|
||||
};
|
||||
|
||||
const bundle = await rollup(inputOptions);
|
||||
await bundle.write(outputOptions);
|
||||
await bundle.close();
|
||||
}
|
||||
|
||||
// Store the filename for HTML processing
|
||||
global.jsFilename = filename;
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
// CSS processing
|
||||
function styles() {
|
||||
let stream = gulp.src(paths.src.css)
|
||||
.pipe(gulpif(!isProduction, sourcemaps.init()))
|
||||
.pipe(concat('app.css'));
|
||||
|
||||
if (isProduction) {
|
||||
stream = stream.pipe(cleanCSS({
|
||||
level: 2
|
||||
}));
|
||||
|
||||
// Add hash to filename in production
|
||||
stream = stream.pipe(rename(function(path) {
|
||||
const hash = crypto.createHash('md5').update(Date.now().toString()).digest('hex').substring(0, 8);
|
||||
path.basename = `app-${hash}`;
|
||||
global.cssFilename = `${path.basename}.css`;
|
||||
}));
|
||||
} else {
|
||||
stream = stream.pipe(sourcemaps.write('.'));
|
||||
global.cssFilename = 'app.css';
|
||||
}
|
||||
|
||||
return stream.pipe(gulp.dest(paths.dist));
|
||||
}
|
||||
|
||||
// Bundle templates and SVG assets into HTML for production
|
||||
async function bundleAssets() {
|
||||
if (!isProduction) {
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
try {
|
||||
// Read all template files
|
||||
const templateFiles = await glob('templates/**/*.html');
|
||||
const templates = {};
|
||||
|
||||
for (const templateFile of templateFiles) {
|
||||
const content = await fs.readFile(templateFile, 'utf8');
|
||||
const templateName = path.basename(templateFile, '.html');
|
||||
templates[templateName] = content;
|
||||
}
|
||||
|
||||
// Read SVG assets
|
||||
const svgFiles = await glob('assets/**/*.svg');
|
||||
const svgAssets = {};
|
||||
|
||||
for (const svgFile of svgFiles) {
|
||||
const content = await fs.readFile(svgFile, 'utf8');
|
||||
const assetName = path.relative('assets', svgFile);
|
||||
svgAssets[assetName] = content;
|
||||
}
|
||||
|
||||
// Create the bundled assets object
|
||||
const bundledAssets = {
|
||||
templates,
|
||||
svg: svgAssets
|
||||
};
|
||||
|
||||
// Store for use in HTML processing
|
||||
global.bundledAssets = bundledAssets;
|
||||
return Promise.resolve();
|
||||
} catch (error) {
|
||||
console.error('Error bundling assets:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
// HTML processing
|
||||
async function html() {
|
||||
const jsFile = global.jsFilename || 'app.js';
|
||||
const cssFile = global.cssFilename || 'app.css';
|
||||
|
||||
let htmlContent = await fs.readFile(paths.src.html.main, 'utf8');
|
||||
|
||||
// Replace script and CSS references
|
||||
htmlContent = htmlContent.replace('<script type="module" src="js/core.js"></script>', `<script type="module" src="${jsFile}"></script>`);
|
||||
htmlContent = htmlContent.replace('<link rel="stylesheet" href="css/main.css">', '');
|
||||
htmlContent = htmlContent.replace('<link rel="stylesheet" href="css/finetune.css">', `<link rel="stylesheet" href="${cssFile}">`);
|
||||
|
||||
// In production, inject bundled assets
|
||||
if (isProduction && global.bundledAssets) {
|
||||
const bundledAssetsScript = `
|
||||
<script type="text/javascript">
|
||||
window.BUNDLED_ASSETS = ${JSON.stringify(global.bundledAssets)};
|
||||
</script>`;
|
||||
|
||||
// Insert the bundled assets script before the main app script
|
||||
htmlContent = htmlContent.replace(
|
||||
`<script type="module" src="${jsFile}"></script>`,
|
||||
`${bundledAssetsScript}\n<script type="module" src="${jsFile}"></script>`
|
||||
);
|
||||
}
|
||||
|
||||
if (isProduction) {
|
||||
// Use htmlmin to minify the content
|
||||
const htmlMinify = (await import('html-minifier-terser')).minify;
|
||||
htmlContent = await htmlMinify(htmlContent, {
|
||||
caseSensitive: false,
|
||||
collapseBooleanAttributes: true,
|
||||
collapseInlineTagWhitespace: false,
|
||||
collapseWhitespace: true,
|
||||
conservativeCollapse: false,
|
||||
decodeEntities: true,
|
||||
html5: true,
|
||||
includeAutoGeneratedTags: true,
|
||||
keepClosingSlash: false,
|
||||
minifyCSS: true,
|
||||
minifyJS: true,
|
||||
minifyURLs: false,
|
||||
preserveLineBreaks: false,
|
||||
preventAttributesEscaping: false,
|
||||
processConditionalComments: false,
|
||||
removeAttributeQuotes: true,
|
||||
removeComments: true,
|
||||
removeEmptyAttributes: true,
|
||||
removeEmptyElements: false,
|
||||
removeOptionalTags: true,
|
||||
removeRedundantAttributes: true,
|
||||
removeScriptTypeAttributes: true,
|
||||
removeStyleLinkTypeAttributes: true,
|
||||
removeTagWhitespace: false,
|
||||
sortAttributes: true,
|
||||
sortClassName: true,
|
||||
trimCustomFragments: true,
|
||||
useShortDoctype: true
|
||||
});
|
||||
}
|
||||
|
||||
// Write the processed HTML file
|
||||
await fs.writeFile(path.join(paths.dist, 'index.html'), htmlContent);
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
// Template processing (only for development builds)
|
||||
function templates() {
|
||||
if (isProduction) {
|
||||
// In production, templates are bundled into the HTML file
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
return gulp.src(paths.src.html.templates)
|
||||
.pipe(gulp.dest(`${paths.dist}/templates`));
|
||||
}
|
||||
|
||||
// Language files processing
|
||||
function languages() {
|
||||
return gulp.src(paths.src.lang)
|
||||
.pipe(gulpif(isProduction, jsonMinify()))
|
||||
.pipe(gulp.dest(`${paths.dist}/lang`));
|
||||
}
|
||||
|
||||
// Copy assets (SVGs are bundled in production)
|
||||
function assets() {
|
||||
if (isProduction) {
|
||||
// In production, SVGs are bundled into the HTML file, so only copy other assets
|
||||
return gulp.src(paths.src.assets, { base: '.', encoding: false })
|
||||
.pipe(gulp.dest(paths.dist));
|
||||
}
|
||||
|
||||
return gulp.src([...paths.src.assets, paths.src.svg], { base: '.', encoding: false })
|
||||
.pipe(gulp.dest(paths.dist));
|
||||
}
|
||||
|
||||
// Watch task
|
||||
function watch() {
|
||||
gulp.watch(paths.src.js.all, scripts);
|
||||
gulp.watch(paths.src.css, styles);
|
||||
gulp.watch([paths.src.html.main, paths.src.html.templates], gulp.series(html, templates));
|
||||
gulp.watch(paths.src.lang, languages);
|
||||
gulp.watch([...paths.src.assets, paths.src.svg], assets);
|
||||
}
|
||||
|
||||
// Development task
|
||||
function dev() {
|
||||
console.log('🚀 Development mode - watching files for changes...');
|
||||
return watch();
|
||||
}
|
||||
|
||||
// Build task
|
||||
const build = gulp.series(
|
||||
clean,
|
||||
gulp.parallel(scripts, styles),
|
||||
bundleAssets,
|
||||
gulp.parallel(html, templates, languages, assets)
|
||||
);
|
||||
|
||||
// Export tasks
|
||||
export { clean, scripts, styles, bundleAssets, html, templates, languages, assets, watch, dev, build };
|
||||
export default build;
|
||||
BIN
images/FAQ_Housing_Closing.jpg
Normal file
|
After Width: | Height: | Size: 98 KiB |
BIN
images/FAQ_finetuning.png
Normal file
|
After Width: | Height: | Size: 29 KiB |
BIN
images/FAQ_history.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
images/FAQ_option_1.jpg
Normal file
|
After Width: | Height: | Size: 191 KiB |
BIN
images/FAQ_option_2.jpg
Normal file
|
After Width: | Height: | Size: 226 KiB |
BIN
images/FAQ_save_changes.png
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
634
index.html
@@ -5,325 +5,411 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>DualShock Calibration GUI</title>
|
||||
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css"
|
||||
rel="stylesheet"
|
||||
<link id="bootstrap-css" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css"
|
||||
rel="stylesheet"
|
||||
integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH"
|
||||
crossorigin="anonymous">
|
||||
|
||||
<link rel="stylesheet"
|
||||
href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6.4.2/css/fontawesome.min.css"
|
||||
integrity="sha384-BY+fdrpOd3gfeRvTSMT+VUZmA728cfF9Z2G42xpaRkUGu2i3DyzpTURDo5A6CaLK"
|
||||
<link rel="stylesheet"
|
||||
href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6.6.0/css/fontawesome.min.css"
|
||||
integrity="sha384-NvKbDTEnL+A8F/AA5Tc5kmMLSJHUO868P+lDtTpJIeQdGYaUIuLr4lVGOEA1OcMy"
|
||||
crossorigin="anonymous">
|
||||
|
||||
<link rel="stylesheet"
|
||||
href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6.6.0/css/all.min.css"
|
||||
integrity="sha384-h/hnnw1Bi4nbpD6kE7nYfCXzovi622sY5WBxww8ARKwpdLj5kUWjRuyiXaD1U2JT"
|
||||
crossorigin="anonymous">
|
||||
|
||||
|
||||
<script src="https://code.jquery.com/jquery-3.7.1.min.js"
|
||||
integrity="sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo="
|
||||
crossorigin="anonymous"></script>
|
||||
|
||||
<meta http-equiv="Permissions-Policy" content="interest-cohort=()">
|
||||
<script type="module" src="js/core.js"></script>
|
||||
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
|
||||
<link rel="manifest" href="/site.webmanifest">
|
||||
|
||||
<link rel="icon" type="image/png" href="/favicon-96x96.png" sizes="96x96">
|
||||
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
||||
<link rel="shortcut icon" href="/favicon.ico" />
|
||||
<meta name="apple-mobile-web-app-title" content="DS Tools" />
|
||||
|
||||
<!-- External CSS files -->
|
||||
<link rel="stylesheet" href="css/main.css">
|
||||
<link rel="stylesheet" href="css/finetune.css">
|
||||
|
||||
<script src="core.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" class="d-none">
|
||||
<symbol id="discord" viewBox="0 0 640 512">
|
||||
<path d="M524.531,69.836a1.5,1.5,0,0,0-.764-.7A485.065,485.065,0,0,0,404.081,32.03a1.816,1.816,0,0,0-1.923.91,337.461,337.461,0,0,0-14.9,30.6,447.848,447.848,0,0,0-134.426,0,309.541,309.541,0,0,0-15.135-30.6,1.89,1.89,0,0,0-1.924-.91A483.689,483.689,0,0,0,116.085,69.137a1.712,1.712,0,0,0-.788.676C39.068,183.651,18.186,294.69,28.43,404.354a2.016,2.016,0,0,0,.765,1.375A487.666,487.666,0,0,0,176.02,479.918a1.9,1.9,0,0,0,2.063-.676A348.2,348.2,0,0,0,208.12,430.4a1.86,1.86,0,0,0-1.019-2.588,321.173,321.173,0,0,1-45.868-21.853,1.885,1.885,0,0,1-.185-3.126c3.082-2.309,6.166-4.711,9.109-7.137a1.819,1.819,0,0,1,1.9-.256c96.229,43.917,200.41,43.917,295.5,0a1.812,1.812,0,0,1,1.924.233c2.944,2.426,6.027,4.851,9.132,7.16a1.884,1.884,0,0,1-.162,3.126,301.407,301.407,0,0,1-45.89,21.83,1.875,1.875,0,0,0-1,2.611,391.055,391.055,0,0,0,30.014,48.815,1.864,1.864,0,0,0,2.063.7A486.048,486.048,0,0,0,610.7,405.729a1.882,1.882,0,0,0,.765-1.352C623.729,277.594,590.933,167.465,524.531,69.836ZM222.491,337.58c-28.972,0-52.844-26.587-52.844-59.239S193.056,219.1,222.491,219.1c29.665,0,53.306,26.82,52.843,59.239C275.334,310.993,251.924,337.58,222.491,337.58Zm195.38,0c-28.971,0-52.843-26.587-52.843-59.239S388.437,219.1,417.871,219.1c29.667,0,53.307,26.82,52.844,59.239C470.715,310.993,447.538,337.58,417.871,337.58Z"/>
|
||||
</symbol>
|
||||
<symbol id="mail" viewBox="0 0 512 512">
|
||||
<path d="M48 64C21.5 64 0 85.5 0 112c0 15.1 7.1 29.3 19.2 38.4L236.8 313.6c11.4 8.5 27 8.5 38.4 0L492.8 150.4c12.1-9.1 19.2-23.3 19.2-38.4c0-26.5-21.5-48-48-48H48zM0 176V384c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V176L294.4 339.2c-22.8 17.1-54 17.1-76.8 0L0 176z"/>
|
||||
</symbol>
|
||||
<symbol id="github" viewBox="0 0 496 512">
|
||||
<path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/>
|
||||
</symbol>
|
||||
<symbol id="mug" viewBox="0 0 512 512">
|
||||
<path fill="#ffffff" d="M88 0C74.7 0 64 10.7 64 24c0 38.9 23.4 59.4 39.1 73.1l1.1 1C120.5 112.3 128 119.9 128 136c0 13.3 10.7 24 24 24s24-10.7 24-24c0-38.9-23.4-59.4-39.1-73.1l-1.1-1C119.5 47.7 112 40.1 112 24c0-13.3-10.7-24-24-24zM32 192c-17.7 0-32 14.3-32 32V416c0 53 43 96 96 96H288c53 0 96-43 96-96h16c61.9 0 112-50.1 112-112s-50.1-112-112-112H352 32zm352 64h16c26.5 0 48 21.5 48 48s-21.5 48-48 48H384V256zM224 24c0-13.3-10.7-24-24-24s-24 10.7-24 24c0 38.9 23.4 59.4 39.1 73.1l1.1 1C232.5 112.3 240 119.9 240 136c0 13.3 10.7 24 24 24s24-10.7 24-24c0-38.9-23.4-59.4-39.1-73.1l-1.1-1C231.5 47.7 224 40.1 224 24z"/>
|
||||
</symbol>
|
||||
<symbol id="lang" viewBox="0 0 640 512">
|
||||
<path d="M0 128C0 92.7 28.7 64 64 64H256h48 16H576c35.3 0 64 28.7 64 64V384c0 35.3-28.7 64-64 64H320 304 256 64c-35.3 0-64-28.7-64-64V128zm320 0V384H576V128H320zM178.3 175.9c-3.2-7.2-10.4-11.9-18.3-11.9s-15.1 4.7-18.3 11.9l-64 144c-4.5 10.1 .1 21.9 10.2 26.4s21.9-.1 26.4-10.2l8.9-20.1h73.6l8.9 20.1c4.5 10.1 16.3 14.6 26.4 10.2s14.6-16.3 10.2-26.4l-64-144zM160 233.2L179 276H141l19-42.8zM448 164c11 0 20 9 20 20v4h44 16c11 0 20 9 20 20s-9 20-20 20h-2l-1.6 4.5c-8.9 24.4-22.4 46.6-39.6 65.4c.9 .6 1.8 1.1 2.7 1.6l18.9 11.3c9.5 5.7 12.5 18 6.9 27.4s-18 12.5-27.4 6.9l-18.9-11.3c-4.5-2.7-8.8-5.5-13.1-8.5c-10.6 7.5-21.9 14-34 19.4l-3.6 1.6c-10.1 4.5-21.9-.1-26.4-10.2s.1-21.9 10.2-26.4l3.6-1.6c6.4-2.9 12.6-6.1 18.5-9.8l-12.2-12.2c-7.8-7.8-7.8-20.5 0-28.3s20.5-7.8 28.3 0l14.6 14.6 .5 .5c12.4-13.1 22.5-28.3 29.8-45H448 376c-11 0-20-9-20-20s9-20 20-20h52v-4c0-11 9-20 20-20z"/>
|
||||
</symbol>
|
||||
</svg>
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>
|
||||
|
||||
<nav class="navbar bg-body-tertiary navbar-expand-md bg-body-tertiary">
|
||||
<div class="container-fluid">
|
||||
<a class="navbar-brand ds-i18n" href="https://dualshock-tools.github.io">DualShock Calibration GUI</a>
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>
|
||||
<div class="collapse navbar-collapse container-fluid justify-content-end" id="navbarNavDropdown">
|
||||
|
||||
<nav class="navbar bg-body-tertiary navbar-expand-lg bg-body-tertiary">
|
||||
<div class="container-fluid">
|
||||
<a class="navbar-brand ds-i18n">DualShock Calibration GUI</a>
|
||||
|
||||
<div class="d-flex" id="navbarNavAltMarkup">
|
||||
<div class="nav-item dropdown me-2">
|
||||
<ul class="navbar-nav">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link ds-i18n" href="#" onclick="show_faq_modal();">Frequently Asked Questions</a>
|
||||
</li>
|
||||
<li class="nav-item dropdown" id="navbarNavAltMarkup">
|
||||
<a class="nav-link dropdown-toggle" id="langMenuButton" role="button" href="#" data-bs-toggle="dropdown" aria-expanded="false" aria-haspopup="true">
|
||||
<svg class="bi text-secondary" width="1.5em" height="1.5em" ><use xlink:href="#lang"/></svg> <span id="curLang">English</span>
|
||||
<svg class="bi text-secondary" width="1.5em" height="1.5em" ><use xlink:href="#lang"/></svg> <span id="curLang">English</span>
|
||||
</a>
|
||||
<ul class="dropdown-menu dropdown-menu-end" aria-labelledby="langMenuButton" id="availLangs">
|
||||
<ul class="dropdown-menu dropdown-menu-end" aria-labelledby="langMenuButton" id="availLangs" style="max-height:70vh; overflow-y:auto;">
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
|
||||
<div class="container p-2">
|
||||
|
||||
<div id="missinghid" style="display: none;">
|
||||
<p class="ds-i18n">Unsupported browser. Please use a web browser with WebHID support (e.g. Chrome).</p>
|
||||
</div>
|
||||
|
||||
<div id="offlinebar" class="vstack p-2" style="display: none;">
|
||||
<p class="ds-i18n">Connect a DualShock 4 or a DualSense controller to your computer and press Connect.</p>
|
||||
<button id="btnconnect" type="button" class="btn btn-outline-primary ds-i18n" onclick="connect()">Connect</button><br>
|
||||
</div>
|
||||
|
||||
<div id="onlinebar" class="vstack p-2" style="display: none;">
|
||||
<div class="hstack gap-2"><p><b class="ds-i18n">Connected to:</b></p><p id="devname"></p></div>
|
||||
<button type="button" class="btn btn-outline-secondary ds-i18n" onclick="disconnect()">Disconnect</button><br>
|
||||
</div>
|
||||
|
||||
<div id="mainmenu" class="container" style="display: none;">
|
||||
<div class="row">
|
||||
<div class="col-md-6 col-sm-12">
|
||||
<div class="card text-bg-light" >
|
||||
<div class="card-header ds-i18n">Firmware Info</div>
|
||||
|
||||
<div class="vstack p-2" id="fwinfo"> </div>
|
||||
</div>
|
||||
<br>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 col-sm-12">
|
||||
<div class="vstack gap-2 p-2">
|
||||
<button id="btnmcs2" type="button" class="btn btn-primary ds-btn ds-i18n" onclick="calib_open()">Calibrate stick center</button>
|
||||
<div class="hstack gap-2">
|
||||
<button type="button" class="btn btn-primary ds-btn ds-i18n" onclick="multi_calibrate_range(true)">Calibrate stick range (permanent)</button>
|
||||
<button type="button" class="btn btn-primary ds-btn ds-i18n" onclick="multi_calibrate_range(false)">Calibrate stick range (temporary)</button>
|
||||
</div>
|
||||
<button type="button" class="btn btn-danger ds-btn ds-i18n" onclick="multi_reset()" id="resetBtn">Reset controller</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<p class="ds-i18n">Sections below are not useful, just some debug infos or manual commands</p>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-6 col-sm-12">
|
||||
<div class="card text-bg-light" >
|
||||
<div class="card-header">Debug info</div>
|
||||
<div class="vstack p-2">
|
||||
<div class="hstack"><p class="ds-i18n">NVS Status</p><p class="ms-auto ds-i18n" id="d-nvstatus">Unknown</p></div>
|
||||
<div class="hstack"><p class="ds-i18n">BD Addr</p><p class="ms-auto ds-i18n" id="d-bdaddr">Unknown</p></div>
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 col-sm-12">
|
||||
<div class="card text-bg-light" >
|
||||
<div class="card-header ds-i18n">Debug buttons</div>
|
||||
<div class="vstack gap-2 p-2">
|
||||
<div class="hstack gap-2">
|
||||
<button type="button" class="btn btn-success ds-btn ds-i18n" onclick="multi_nvstatus()">Query NVS status</button>
|
||||
<button type="button" class="btn btn-primary ds-btn ds-i18n" onclick="multi_nvsunlock()">NVS unlock</button>
|
||||
<button type="button" class="btn btn-primary ds-btn ds-i18n" onclick="multi_nvslock()">NVS lock</button>
|
||||
</div>
|
||||
<button type="button" class="btn btn-primary ds-btn ds-i18n" onclick="multi_getbdaddr()">Get BDAddr</button>
|
||||
<button id="btnmcs" type="button" class="btn btn-primary ds-btn ds-i18n" onclick="multi_calibrate_sticks()">Fast calibrate stick center (OLD)</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- Welcome Modal -->
|
||||
<div class="modal fade" id="welcomeModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="welcomeModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog modal-dialog-centered modal-lg">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h1 class="modal-title fs-5 ds-i18n" id="welcomeModalLabel">Welcome to the Calibration GUI</h1>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p class="ds-i18n">Just few things to know before you can start:</p>
|
||||
<ul>
|
||||
<li class="ds-i18n">This website is not affiliated with Sony, PlayStation & co.</li>
|
||||
<li class="ds-i18n">This service is provided without warranty. Use at your own risk.</li>
|
||||
<li class="ds-i18n">Keep the internal battery of the controller connected and ensure it is well charged. If the battery dies during operations, the controller will be damaged and rendered unusable.</li>
|
||||
<li class="ds-i18n">Before doing the permanent calibration, try the temporary one to ensure that everything is working well.</li>
|
||||
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<div class="container p-2">
|
||||
|
||||
<!-- Unsupported Browser Warning -->
|
||||
<div id="missinghid" style="bottom: 80px; left: 0; right: 0; z-index: 1030; padding: 12px 20px; display: none;">
|
||||
<div class="container">
|
||||
<div style="border: 2px solid #0d6efd; border-radius: 8px; color: #0d6efd; padding: 12px; background-color: white;">
|
||||
<p class="mb-1">
|
||||
<i class="fas fa-hand"></i>
|
||||
<span class="ds-i18n">Unsupported browser.</span>
|
||||
</p>
|
||||
<p class="mb-1">
|
||||
<span class="ds-i18n">Please use a web browser with WebHID support (e.g. Google Chrome or Microsoft Edge) on a PC or Mac.</span>
|
||||
<span class="ds-i18n">Firefox is supported with the WebHID extension installed.</span>
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
<span class="ds-i18n">Using this utility on a phone or tablet is not supported.</span>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="offlinebar" class="vstack p-2" style="display: none;">
|
||||
<p class="ds-i18n">Please connect a DualShock 4, a DualSense, DualSense Edge or VR2 controller to your computer and press Connect.</p>
|
||||
<button id="btnconnect" type="button" class="btn btn-outline-primary" onclick="connect()">
|
||||
<span class="spinner-border spinner-border-sm" style="display: none;" id="connectspinner" aria-hidden="true"></span>
|
||||
<span class="ds-i18n">Connect</span>
|
||||
</button>
|
||||
<br>
|
||||
</div>
|
||||
|
||||
<div id="onlinebar" class="vstack p-2" style="display: none;">
|
||||
<div class="row">
|
||||
<div class="col-sm-9 hstack">
|
||||
<p><b class="ds-i18n">Connected to:</b></p> <p id="devname"></p>
|
||||
</div>
|
||||
<div class="col-sm-3">
|
||||
<p id="d-bat" style="text-align: right;"></p>
|
||||
</div>
|
||||
</div>
|
||||
<button type="button" class="btn btn-outline-secondary ds-i18n" onclick="disconnect()">Disconnect</button><br>
|
||||
</div>
|
||||
|
||||
<div id="mainmenu" class="container" style="display: none;">
|
||||
<ul class="nav nav-tabs mb-3" id="mainTabs" role="tablist">
|
||||
<li class="nav-item" role="presentation">
|
||||
<button class="nav-link active" id="controller-tab" data-bs-toggle="tab" data-bs-target="#controller-content" type="button" role="tab" aria-controls="controller-content" aria-selected="true">
|
||||
<i class="fas fa-gamepad"></i> <span class="ds-i18n">Calibration</span>
|
||||
</button>
|
||||
</li>
|
||||
<!-- <li class="nav-item" role="presentation">
|
||||
<button class="nav-link" id="tests-tab" data-bs-toggle="tab" data-bs-target="#tests-content" type="button" role="tab" aria-controls="tests-content" aria-selected="false">
|
||||
<i class="fas fa-vial"></i> <span class="ds-i18n">Tests</span>
|
||||
</button>
|
||||
</li> -->
|
||||
<li class="nav-item" role="presentation">
|
||||
<button class="nav-link" id="info-tab" data-bs-toggle="tab" data-bs-target="#info-content" type="button" role="tab" aria-controls="info-content" aria-selected="false">
|
||||
<i class="fas fa-info-circle"></i> <span class="ds-i18n">Info</span>
|
||||
</button>
|
||||
</li>
|
||||
<li class="nav-item" role="presentation">
|
||||
<button class="nav-link" id="debug-tab" data-bs-toggle="tab" data-bs-target="#debug-content" type="button" role="tab" aria-controls="debug-content" aria-selected="false">
|
||||
<i class="fas fa-bug"></i> <span class="ds-i18n">Debug</span>
|
||||
</button>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-primary ds-i18n" onclick="welcome_accepted();">Understood</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="tab-content" id="mainTabsContent">
|
||||
<div class="tab-pane show active" id="controller-content" role="tabpanel" aria-labelledby="controller-tab">
|
||||
<!-- Main page content (controller info, calibration, joystick info) -->
|
||||
<div class="row">
|
||||
<div class="col-md-6 col-sm-12">
|
||||
<div class="card text-bg-light" >
|
||||
<div class="card-header"><i class="fas fa-gamepad"></i> <span class="ds-i18n">Controller Info</span></div>
|
||||
<dl class="row px-3 py-2" id="fwinfo"></dl>
|
||||
<span id="infoshowall" class="pb-4 px-4 row">
|
||||
<button class="btn btn-outline-secondary" onclick="show_info_tab()"><i class="fas fa-plus me-1"></i> <span class="ds-i18n">Show all</span></button>
|
||||
</span>
|
||||
</div>
|
||||
<br>
|
||||
|
||||
<!-- New calibrate modal -->
|
||||
<div class="modal fade" id="calibCenterModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="calibTitle" aria-hidden="true">
|
||||
<div class="modal-dialog modal-lg">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h1 class="modal-title fs-5 ds-i18n" id="calibTitle">Stick center calibration</h1>
|
||||
<button type="button" id="calibCross" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="d-flex justify-content-end" id="quick-tests-div">
|
||||
<button type="button" class="btn btn-outline-primary ds-btn mb-3" onclick="show_quick_test_modal()" id="quick-test-btn">
|
||||
<i class="fas fa-vial" id="quick-test-icon"></i>
|
||||
<span id="quick-test-text" class="ds-i18n">Quick Test</span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-4">
|
||||
<div class="list-group" id="list-tab">
|
||||
<a class="ds-i18n list-group-item list-group-item-action active" id="list-1-calib">Welcome</a>
|
||||
<a class="ds-i18n list-group-item list-group-item-action" id="list-2-calib">Step 1</a>
|
||||
<a class="ds-i18n list-group-item list-group-item-action" id="list-3-calib">Step 2</a>
|
||||
<a class="ds-i18n list-group-item list-group-item-action" id="list-4-calib">Step 3</a>
|
||||
<a class="ds-i18n list-group-item list-group-item-action" id="list-5-calib">Step 4</a>
|
||||
<a class="ds-i18n list-group-item list-group-item-action" id="list-6-calib">Completed</a>
|
||||
</div>
|
||||
<div class="text-center mx-3" id="controller-svg-container">
|
||||
<!-- DualSense 5 Controller SVG loaded from template -->
|
||||
<div id="controller-svg-placeholder"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-8">
|
||||
<div class="container" id="list-1">
|
||||
<h4 class="ds-i18n">Welcome to the stick center-calibration wizard!</h4>
|
||||
|
||||
<p class="ds-i18n">This tool will guide you in re-centering the analog sticks of your controller. It consists in four steps: you will be asked to move both sticks in a direction and release them.</p>
|
||||
|
||||
<p class="ds-i18n">Please be aware that, <i>once the calibration is running, it cannot be canceled</i>. Do not close this page or disconnect your controller until is completed.</p>
|
||||
|
||||
<h5 class="ds-i18n">Calibration storage</h5>
|
||||
|
||||
<p class="ds-i18n">By default the calibration is only saved in a volatile storage, so that if you (or this tool) mess something up, a reset of the controller is enough to make it work again.</p>
|
||||
|
||||
<p class="ds-i18n">If you wish to store the calibration permanently in the controller, tick the checkbox below:</p>
|
||||
|
||||
<input class="form-check-input" type="checkbox" value="" id="calibPermanentChanges">
|
||||
<label class="form-check-label ds-i18n" for="calibPermanentChanges">Write changes permanently in the controller</label>
|
||||
|
||||
<br>
|
||||
|
||||
<p class="ds-i18n"><small>Warning: <font color="red">Do not store the calibration permanently if the controller battery is low or disconnected. It will damage your controller.</font></small></p>
|
||||
|
||||
<p class="ds-i18n">Press <b>Start</b> to begin calibration.</p>
|
||||
|
||||
<div class="col-md-6 col-sm-12" style="min-width: 330px;">
|
||||
<div class="vstack gap-2 p-2">
|
||||
<button type="button" class="btn btn-primary ds-btn" onclick="calibrate_stick_centers()" id="four-step-center-calib" style="display: none;">
|
||||
<span class="ds-i18n">Calibrate stick center</span>
|
||||
</button>
|
||||
<div class="btn-group w-100" role="group" style="display: none;" id="quick-center-calib-group">
|
||||
<button type="button" class="btn btn-primary ds-btn flex-grow-1" onclick="executeSelectedCenterCalibration()" id="quick-center-calib">
|
||||
<span> </span>
|
||||
<span class="ds-i18n">Calibrate stick center</span>
|
||||
</button>
|
||||
<button type="button" class="btn btn-primary ds-btn dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false" style="flex: 0 0 35px;">
|
||||
<span class="visually-hidden">Toggle dropdown</span>
|
||||
</button>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a class="dropdown-item" href="#" onclick="setCenterCalibrationMethod('quick', event)">
|
||||
<i class="fas fa-check me-2" id="check-quick" style="display: none;"></i><span class="ds-i18n">Use quick calibration</span>
|
||||
</a></li>
|
||||
<li><a class="dropdown-item" href="#" onclick="setCenterCalibrationMethod('four-step', event)">
|
||||
<i class="fas fa-check me-2" id="check-four-step"></i><span class="ds-i18n">Use four-step calibration</span>
|
||||
</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="container" style="display: none;" id="list-2">
|
||||
<p class="ds-i18n">Please move both sticks to the <b>top-left corner</b> and release them.</p>
|
||||
<p class="ds-i18n">When the sticks are back in the center, press <b>Continue</b>.</p>
|
||||
<div class="btn-group w-100" role="group" id="range-calib-group">
|
||||
<button type="button" class="btn btn-primary ds-btn flex-grow-1" onclick="executeSelectedRangeCalibration()" id="range-calib">
|
||||
<span> </span>
|
||||
<span class="ds-i18n">Calibrate stick range</span>
|
||||
</button>
|
||||
<button type="button" class="btn btn-primary ds-btn dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false" style="flex: 0 0 35px;">
|
||||
<span class="visually-hidden">Toggle dropdown</span>
|
||||
</button>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a class="dropdown-item" href="#" onclick="setRangeCalibrationMethod('normal', event)">
|
||||
<i class="fas fa-check me-2" id="check-range-normal"></i><span class="ds-i18n">Use normal mode</span>
|
||||
</a></li>
|
||||
<li><a class="dropdown-item" href="#" onclick="setRangeCalibrationMethod('expert', event)">
|
||||
<i class="fas fa-check me-2" id="check-range-expert" style="display: none;"></i><span class="ds-i18n">Use expert mode</span>
|
||||
</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="container" style="display: none;" id="list-3">
|
||||
<p class="ds-i18n">Please move both sticks to the <b>top-right corner</b> and release them.</p>
|
||||
<p class="ds-i18n">When the sticks are back in the center, press <b>Continue</b>.</p>
|
||||
</div>
|
||||
<div class="container" style="display: none;" id="list-4">
|
||||
<p class="ds-i18n">Please move both sticks to the <b>bottom-left corner</b> and release them.</p>
|
||||
<p class="ds-i18n">When the sticks are back in the center, press <b>Continue</b>.</p>
|
||||
</div>
|
||||
<div class="container" style="display: none;" id="list-5">
|
||||
<p class="ds-i18n">Please move both sticks to the <b>bottom-right corner</b> and release them.</p>
|
||||
<p class="ds-i18n">When the sticks are back in the center, press <b>Continue</b>.</p>
|
||||
</div>
|
||||
<div class="container" style="display: none;" id="list-6">
|
||||
<p class="ds-i18n">Calibration completed successfully!</p>
|
||||
<p><span class="ds-i18n">You can check the calibration with the</span> <a href="https://hardwaretester.com/gamepad" target="_blank">gamepad tester</a>.</p>
|
||||
<p class="ds-i18n">Have a nice day :)</p>
|
||||
<button type="button" class="btn btn-primary ds-btn" onclick="ds5_finetune()" id="ds5finetune">
|
||||
<span class="ds-i18n">Finetune stick calibration</span>
|
||||
</button>
|
||||
<hr>
|
||||
<button id="savechanges" type="button" class="btn btn-success ds-btn ds-i18n" onclick="flash_all_changes()">Save changes permanently</button>
|
||||
<button id="restore-calibration-btn" type="button" class="btn btn-secondary ds-btn ds-i18n" onclick="openCalibrationHistoryModal()">Restore calibration</button>
|
||||
<button type="button" class="btn btn-danger ds-btn ds-i18n" onclick="reboot_controller()" id="resetBtn">Reboot controller</button>
|
||||
|
||||
<div class="card text-bg-light" >
|
||||
<div class="card-header"><i class="fas fa-crosshairs"></i> <span class="ds-i18n">Joystick Info</span></div>
|
||||
<div class="vstack px-2">
|
||||
<center>
|
||||
<div style="position: relative; display: inline-block;">
|
||||
<canvas id="stickCanvas" width="300" height="150"></canvas>
|
||||
<svg
|
||||
id="circularityCheckIcon" class="bi" width="32" height="32"
|
||||
style="cursor: pointer; color: #ff4000cb; position: absolute; top: 25px; right: -30px; display: none;"
|
||||
onclick="show_circularity_warning()"
|
||||
>
|
||||
<use xlink:href="#info"/></svg>
|
||||
</div>
|
||||
</center>
|
||||
</div>
|
||||
<div class="px-2">
|
||||
<div class="hstack">
|
||||
<div class="vstack" style="text-align: center;">
|
||||
<span>LX:</span>
|
||||
<pre id="lx-lbl" style="min-width: 80px;"></pre>
|
||||
</div>
|
||||
|
||||
<div class="vstack" style="text-align: center;">
|
||||
<span>LY:</span>
|
||||
<pre id="ly-lbl" style="min-width: 80px;"></pre>
|
||||
</div>
|
||||
|
||||
<div id="stick-item-rx" class="vstack" style="text-align: center;">
|
||||
<span>RX:</span>
|
||||
<pre id="rx-lbl" style="min-width: 80px;"></pre>
|
||||
</div>
|
||||
|
||||
<div id="stick-item-ry" class="vstack" style="text-align: center;">
|
||||
<span>RY:</span>
|
||||
<pre id="ry-lbl" style="min-width: 80px;"></pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="px-2">
|
||||
<center>
|
||||
<div class="btn-group mb-3" role="group" aria-label="Display mode options">
|
||||
<input type="radio" class="btn-check" name="displayMode" id="normalMode" value="normal" checked>
|
||||
<label class="btn btn-outline-secondary btn-sm ds-i18n" for="normalMode">Normal</label>
|
||||
|
||||
<input type="radio" class="btn-check" name="displayMode" id="centerZoomMode" value="centerZoom">
|
||||
<label class="btn btn-outline-secondary btn-sm ds-i18n" for="centerZoomMode">10x zoom</label>
|
||||
|
||||
<input type="radio" class="btn-check" name="displayMode" id="checkCircularityMode" value="checkCircularity">
|
||||
<label class="btn btn-outline-secondary btn-sm ds-i18n" for="checkCircularityMode">Check circularity</label>
|
||||
</div>
|
||||
</center>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- <div class="tab-pane" id="tests-content" role="tabpanel" aria-labelledby="tests-tab">
|
||||
<div class="card text-bg-light mt-3" style="min-height: 500px;">
|
||||
<div class="card-header">
|
||||
<i class="fas fa-vial"></i> <span class="ds-i18n">Tests</span>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="col-4">
|
||||
<div class="list-group" id="tests-list" role="tablist">
|
||||
<a class="list-group-item list-group-item-action active ds-i18n" id="haptic-test-tab" data-bs-toggle="list" href="#haptic-test-pane">Haptic Motors</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-8">
|
||||
<div class="bg-white border rounded-3 p-4">
|
||||
<div class="tab-content">
|
||||
<div class="tab-pane show active" id="haptic-test-pane" role="tabpanel" aria-labelledby="haptic-test-tab">
|
||||
<h5 class="ds-i18n">Test the Haptic Motors</h5>
|
||||
<p class="ds-i18n">Press L2 to test the strong (left) haptic motor</p>
|
||||
<p class="ds-i18n">Press R2 to test the weak (right) haptic motor</p>
|
||||
<p class="ds-i18n">The motor strength will match how hard you press the trigger</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div> -->
|
||||
<div class="tab-pane" id="info-content" role="tabpanel" aria-labelledby="info-tab">
|
||||
<div class="container-fluid py-4">
|
||||
<div class="row">
|
||||
<div class="col-lg-12 col-xl-6 py-3">
|
||||
<div class="card">
|
||||
<h5 class="card-header"><i class="fas fa-code"></i> <span class="ds-i18n">Software</span></h5>
|
||||
<div class="card-body">
|
||||
<dl class="row" id="fwinfoextra-fw"></dl>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-12 col-xl-6 py-3">
|
||||
<div class="card">
|
||||
<h5 class="card-header"><i class="fas fa-microchip"></i> <span class="ds-i18n">Hardware</span></h5>
|
||||
<div class="card-body">
|
||||
<dl class="row" id="fwinfoextra-hw"></dl>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-primary" id="calibNext" onclick="calib_next()">
|
||||
<span class="spinner-border spinner-border-sm" role="status" aria-hidden="true" id="btnSpinner" style="display: none;"></span>
|
||||
<span id="calibNextText" class="ds-i18n">Next</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab-pane" id="debug-content" role="tabpanel" aria-labelledby="debug-tab">
|
||||
<div class="container-fluid py-4">
|
||||
<div class="row">
|
||||
<p class="ds-i18n">Sections below are not useful, just some debug infos or manual commands</p>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6 col-sm-12">
|
||||
<div class="card text-bg-light" >
|
||||
<div class="card-header"><i class="fas fa-bug"></i> <span class="ds-i18n">Debug Info</span></div>
|
||||
<div class="vstack p-2">
|
||||
<div class="hstack"><p class="ds-i18n">NVS Status</p><p class="ms-auto ds-i18n" id="d-nvstatus">Unknown</p></div>
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
</div>
|
||||
|
||||
<!-- Modal -->
|
||||
<div class="modal fade" id="calibrateModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="staticBackdropLabel" aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h1 class="modal-title fs-5" id="staticBackdropLabel">Calibrating center</h1>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p class="ds-i18n">Recentering the controller sticks. </p>
|
||||
<p class="ds-i18n">Please do not close this window and do not disconnect your controller. </p>
|
||||
<div class="progress" role="progressbar" aria-label="Centering" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100">
|
||||
<div class="progress-bar" style="width: 0%"></div>
|
||||
<div class="col-md-6 col-sm-12">
|
||||
<div class="card text-bg-light" >
|
||||
<div class="card-header"><i class="fas fa-skull-crossbones"></i> <span class="ds-i18n">Debug buttons</span></div>
|
||||
<div class="vstack gap-2 p-2">
|
||||
<div class="hstack gap-2">
|
||||
<button type="button" class="btn btn-success ds-btn ds-i18n" onclick="refresh_nvstatus()">Query NVS status</button>
|
||||
<button type="button" class="btn btn-primary ds-btn ds-i18n" onclick="nvsunlock()">NVS unlock</button>
|
||||
<button type="button" class="btn btn-primary ds-btn ds-i18n" onclick="nvslock()">NVS lock</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Alert Messages Container -->
|
||||
<div class="container-fluid fixed-bottom " style="z-index: 1040; pointer-events: none; bottom: 70px;">
|
||||
<div class="container">
|
||||
<div id="alert-container" class="mb-3" style="pointer-events: auto;">
|
||||
<!-- Alert messages will be dynamically inserted here -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Modal -->
|
||||
<div class="modal fade" id="rangeModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="staticBackdropLabel" aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h1 class="modal-title fs-5 ds-i18n" id="staticBackdropLabel">Range calibration</h1>
|
||||
<!-- About drift and this utility -->
|
||||
<div id="aboutdrift" style="position: fixed; bottom: 6em; left: 0; right: 0; z-index: 0; display: none;">
|
||||
<div class="container">
|
||||
<div class="mb-4" style="border: 2px solid #0d6efd; border-radius: 8px; color: #0d6efd; padding: 12px; background-color: white;">
|
||||
<p class="mb-2">
|
||||
<i class="fas fa-hand-point-up"></i>
|
||||
<span class="ds-i18n">This utility cannot fix stick drift.</span>
|
||||
</p>
|
||||
<p class="mb-2">
|
||||
<span class="ds-i18n">Drift is caused by mechanical parts in the joystick being worn out, and they need to be replaced to fix the drift.</span>
|
||||
<span class="ds-i18n">After they have been replaced, this utility can be used to calibrate the controller to work with the new joysticks.</span></p>
|
||||
<p class="mb-0">
|
||||
<i class="fas fa-regular fa-triangle-exclamation"></i>
|
||||
<span class="ds-i18n">Calibrating without replacing the joysticks may help temporarily, but it may also make the problem worse, with no way to undo it.</span>
|
||||
</p>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p class="ds-i18n"><b>The controller is now sampling data!</b></p>
|
||||
<p class="ds-i18n">Rotate the sticks slowly to cover the whole range. Press "Done" when completed.</p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-primary ds-i18n" onclick="multi_calibrate_range_on_close()">Done</button>
|
||||
|
||||
<div id="lastConnected" class="gap-2">
|
||||
<span class="text-muted"><i class="fas fa-history"></i> <span class="ds-i18n">Last connected</span>:</span>
|
||||
<span id="lastConnectedInfo"></span>
|
||||
<div id="lastConnectedWarning" style="display: none;">
|
||||
<p class="text-danger" style="margin-top: 8px; margin-bottom: 0;">
|
||||
<i class="fas fa-regular fa-triangle-exclamation"></i> <span class="ds-i18n">This controller has unsaved changes that will be lost when the controller is rebooted.</span>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="modal fade" id="donateModal" tabindex="-1" aria-labelledby="modal-title" aria-hidden="true">
|
||||
<div class="modal-dialog modal-dialog-centered">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title"></h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
<!-- Fixed Footer -->
|
||||
<footer class="fixed-bottom bg-body-tertiary border-top">
|
||||
<div class="container">
|
||||
<div class="d-flex flex-column flex-sm-row justify-content-between py-3" id="footbody">
|
||||
<p class="mb-0"><a target="_blank" href="https://github.com/dualshock-tools/dualshock-tools.github.io/commits/main/"><span class="ds-i18n">Version</span> 2.26</a> (2026-07-12) - <a href="#" class="ds-i18n" onclick="show_donate_modal();">Support this project</a> <span id="authorMsg"></span></p>
|
||||
|
||||
<ul class="list-unstyled d-flex mb-0">
|
||||
<li class="ms-3"><a class="text-dark" href="mailto:ds4@the.al" target="_blank"><svg class="bi" width="24" height="24"><use xlink:href="#mail"/></svg></a></li>
|
||||
<li class="ms-3"><a class="text-dark" href="https://discord.gg/w2P7Rrs2Yp" target="_blank"><svg class="bi" width="24" height="24"><use xlink:href="#discord"/></svg></a></li>
|
||||
<li class="ms-3"><a class="text-dark" href="https://github.com/dualshock-tools/" target="_blank"><svg class="bi" width="24" height="24"><use xlink:href="#github"/></svg></a></li>
|
||||
<li class="ms-3"><a class="text-dark" href="https://the.al/ds_history/"><svg class="bi" width="24" height="24"><use xlink:href="#time-back"/></svg></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="modal-body p-4" id="donateBody">
|
||||
<p class="ds-i18n">Hi, thank you for using this software.</p>
|
||||
<p><span class="ds-i18n">If you're finding it helpful and you want to support my efforts, feel free to</span> <a href="https://paypal.me/alaincarlucci" target="_blank" class="text-body-secondary ds-i18n">buy me a coffee</a><span class="ds-i18n">! :)</span></p>
|
||||
<p class="ds-i18n">Do you have any suggestion or issue? Drop me a message via email or discord.</p>
|
||||
<p class="ds-i18n">Cheers!</p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button onclick="window.open('https://paypal.me/alaincarlucci')" type="button" class="btn btn-success" data-bs-dismiss="modal">
|
||||
<svg class="bi" width="18" height="18"><use xlink:href="#mug"/></svg>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Popup -->
|
||||
<div class="modal fade" id="popupModal" tabindex="-1" aria-labelledby="popupTitle" aria-hidden="true">
|
||||
<div class="modal-dialog modal-dialog-centered">
|
||||
<div class="modal-content">
|
||||
<div class="modal-body" id="popupBody"></div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-primary" data-bs-dismiss="modal">OK</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="container">
|
||||
<footer>
|
||||
<div class="d-flex flex-column flex-sm-row justify-content-between py-4 my-4 border-top" id="footbody">
|
||||
<p><span class="ds-i18n">Version</span> 0.5 (2024-04-14) - <a href="#" class="ds-i18n" data-bs-toggle="modal" data-bs-target="#donateModal">Support this project</a> <span id="authorMsg"></span></p>
|
||||
|
||||
<ul class="list-unstyled d-flex">
|
||||
<li class="ms-3"><a class="link-body-emphasis" href="mailto:ds4@the.al" target="_blank"><svg class="bi" width="24" height="24"><use xlink:href="#mail"/></svg></a></li>
|
||||
<li class="ms-3"><a class="link-body-emphasis" href="#" onclick="discord_popup()"><svg class="bi" width="24" height="24"><use xlink:href="#discord"/></svg></a></li>
|
||||
<li class="ms-3"><a class="link-body-emphasis" href="https://github.com/dualshock-tools/" target="_blank"><svg class="bi" width="24" height="24"><use xlink:href="#github"/></svg></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</footer>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
<!-- Google tag (gtag.js) -->
|
||||
@@ -333,6 +419,8 @@
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
gtag('config', 'G-FSXPMDXLLS');
|
||||
gboot();
|
||||
|
||||
// The gboot() function is now auto-called when the core.js module loads
|
||||
// No manual initialization needed here
|
||||
</script>
|
||||
</html>
|
||||
|
||||
676
js/controller-manager.js
Normal file
@@ -0,0 +1,676 @@
|
||||
'use strict';
|
||||
|
||||
import { sleep, la } from './utils.js';
|
||||
import { l } from './translations.js';
|
||||
import { Storage } from './storage.js';
|
||||
|
||||
const NOT_GENUINE_SONY_CONTROLLER_MSG = "Your device might not be a genuine Sony controller. If it is not a clone then please report this issue.";
|
||||
|
||||
/**
|
||||
* Controller Manager - Manages the current controller instance and provides unified interface
|
||||
*/
|
||||
class ControllerManager {
|
||||
constructor(uiDependencies = {}) {
|
||||
this.currentController = null;
|
||||
this.handleNvStatusUpdate = uiDependencies.handleNvStatusUpdate;
|
||||
this.has_changes_to_write = null;
|
||||
this.inputHandler = null; // Callback function for input processing
|
||||
|
||||
// Button and stick states for UI updates
|
||||
this.button_states = {
|
||||
// e.g. 'square': false, 'cross': false, ...
|
||||
sticks: {
|
||||
left: {
|
||||
x: 0,
|
||||
y: 0
|
||||
},
|
||||
right: {
|
||||
x: 0,
|
||||
y: 0
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// Touch points for touchpad input
|
||||
this.touchPoints = [];
|
||||
|
||||
// Battery status tracking
|
||||
this.batteryStatus = {
|
||||
bat_txt: "",
|
||||
changed: false,
|
||||
charge_level: 0,
|
||||
cable_connected: false,
|
||||
is_charging: false,
|
||||
is_error: false
|
||||
};
|
||||
this._lastBatteryText = "";
|
||||
}
|
||||
|
||||
/**
|
||||
* Save has_changes_to_write state to storage
|
||||
*/
|
||||
async _saveHasChangesState() {
|
||||
if (!this.currentController) return;
|
||||
try {
|
||||
const serialNumber = await this.currentController.getSerialNumber();
|
||||
Storage.hasChangesState.set(serialNumber, this.has_changes_to_write);
|
||||
} catch (e) {
|
||||
console.warn('Failed to save changes state:', e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Restore has_changes_to_write state from storage
|
||||
*/
|
||||
async _restoreHasChangesState() {
|
||||
if (!this.currentController) return;
|
||||
try {
|
||||
const serialNumber = await this.currentController.getSerialNumber();
|
||||
const restoredState = Storage.hasChangesState.get(serialNumber);
|
||||
if (restoredState !== null) {
|
||||
this.has_changes_to_write = restoredState;
|
||||
this._updateUI();
|
||||
}
|
||||
} catch (e) {
|
||||
console.warn('Failed to restore changes state:', e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update UI based on current has_changes_to_write state
|
||||
*/
|
||||
_updateUI() {
|
||||
const saveBtn = $("#savechanges");
|
||||
saveBtn
|
||||
.prop('disabled', !this.has_changes_to_write)
|
||||
.toggleClass('btn-success', this.has_changes_to_write)
|
||||
.toggleClass('btn-outline-secondary', !this.has_changes_to_write);
|
||||
}
|
||||
|
||||
/**
|
||||
* Clear controller state: remove storage entry and reset UI
|
||||
* @private
|
||||
*/
|
||||
async _clearControllerState() {
|
||||
if (this.currentController) {
|
||||
try {
|
||||
const serialNumber = await this.currentController.getSerialNumber();
|
||||
Storage.hasChangesState.clear(serialNumber);
|
||||
} catch (e) {
|
||||
console.warn('Failed to clear storage:', e);
|
||||
}
|
||||
}
|
||||
this.has_changes_to_write = false;
|
||||
this._updateUI();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the current controller instance
|
||||
* @param {BaseController} controller Controller instance
|
||||
*/
|
||||
setControllerInstance(instance) {
|
||||
this.currentController = instance;
|
||||
if (instance) {
|
||||
this._restoreHasChangesState().catch(e => console.warn('Failed to restore changes state:', e));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the current device (for backward compatibility)
|
||||
* @returns {HIDDevice|null} Current device or null if none set
|
||||
*/
|
||||
getDevice() {
|
||||
return this.currentController?.getDevice() || null;
|
||||
}
|
||||
|
||||
getInputConfig() {
|
||||
return this.currentController.getInputConfig();
|
||||
}
|
||||
|
||||
async getDeviceInfo() {
|
||||
if (!this.currentController) return null;
|
||||
return await this.currentController.getInfo();
|
||||
}
|
||||
|
||||
getFinetuneMaxValue() {
|
||||
if (!this.currentController) return null;
|
||||
return this.currentController.getFinetuneMaxValue();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set input report handler on the underlying device
|
||||
* @param {Function|null} handler Input report handler function or null to clear
|
||||
*/
|
||||
setInputReportHandler(handler) {
|
||||
if (!this.currentController) return;
|
||||
this.currentController.device.oninputreport = handler;
|
||||
}
|
||||
|
||||
/**
|
||||
* Query NVS (Non-Volatile Storage) status
|
||||
* @returns {Promise<Object>} NVS status object
|
||||
*/
|
||||
async queryNvStatus() {
|
||||
const nv = await this.currentController.queryNvStatus();
|
||||
this.handleNvStatusUpdate(nv);
|
||||
return nv;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get in-memory module data (finetune data)
|
||||
* @returns {Promise<Array>} Module data array
|
||||
*/
|
||||
async getInMemoryModuleData() {
|
||||
return await this.currentController.getInMemoryModuleData();
|
||||
}
|
||||
|
||||
/**
|
||||
* Write finetune data to controller
|
||||
* @param {Array} data Finetune data array
|
||||
*/
|
||||
async writeFinetuneData(data) {
|
||||
await this.currentController.writeFinetuneData(data);
|
||||
}
|
||||
|
||||
getModel() {
|
||||
if (!this.currentController) return null;
|
||||
return this.currentController.getModel();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the list of supported quick tests for the current controller
|
||||
* @returns {Array<string>} Array of supported test types
|
||||
*/
|
||||
getSupportedQuickTests() {
|
||||
if (!this.currentController) {
|
||||
return [];
|
||||
}
|
||||
return this.currentController.getSupportedQuickTests();
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a controller is connected
|
||||
* @returns {boolean} True if controller is connected
|
||||
*/
|
||||
isConnected() {
|
||||
return this.currentController !== null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the input callback function
|
||||
* @param {Function} callback - Function to call after processing input
|
||||
*/
|
||||
setInputHandler(callback) {
|
||||
this.inputHandler = callback;
|
||||
}
|
||||
|
||||
/**
|
||||
* Disconnect the current controller
|
||||
*/
|
||||
async disconnect() {
|
||||
if (this.currentController) {
|
||||
await this.currentController.close();
|
||||
this.currentController = null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update NVS changes status and UI
|
||||
* @param {boolean} hasChanges Changes status
|
||||
*/
|
||||
setHasChangesToWrite(hasChanges) {
|
||||
if (hasChanges === this.has_changes_to_write)
|
||||
return;
|
||||
|
||||
this.has_changes_to_write = hasChanges;
|
||||
this._updateUI();
|
||||
this._saveHasChangesState().catch(e => console.warn('Failed to save changes state:', e));
|
||||
}
|
||||
|
||||
// Unified controller operations that delegate to the current controller
|
||||
|
||||
/**
|
||||
* Flash/save changes to the controller
|
||||
*/
|
||||
async flash(progressCallback = null) {
|
||||
await this._clearControllerState();
|
||||
return this.currentController.flash(progressCallback);
|
||||
}
|
||||
|
||||
/**
|
||||
* Reset the controller
|
||||
*/
|
||||
async reset() {
|
||||
await this._clearControllerState();
|
||||
return this.currentController.reset();
|
||||
}
|
||||
|
||||
/**
|
||||
* Unlock NVS (Non-Volatile Storage)
|
||||
*/
|
||||
async nvsUnlock() {
|
||||
await this.currentController.nvsUnlock();
|
||||
await this.queryNvStatus(); // Refresh NVS status
|
||||
}
|
||||
|
||||
/**
|
||||
* Lock NVS (Non-Volatile Storage)
|
||||
*/
|
||||
async nvsLock() {
|
||||
const res = await this.currentController.nvsLock();
|
||||
if (!res.ok) {
|
||||
throw new Error(l("NVS Lock failed"), { cause: res.error });
|
||||
}
|
||||
|
||||
await this.queryNvStatus(); // Refresh NVS status
|
||||
return res;
|
||||
}
|
||||
|
||||
/**
|
||||
* Begin stick calibration
|
||||
*/
|
||||
async calibrateSticksBegin() {
|
||||
const res = await this.currentController.calibrateSticksBegin();
|
||||
if (!res.ok) {
|
||||
throw new Error(l(NOT_GENUINE_SONY_CONTROLLER_MSG), { cause: res.error });
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sample stick position during calibration
|
||||
*/
|
||||
async calibrateSticksSample() {
|
||||
const res = await this.currentController.calibrateSticksSample();
|
||||
if (!res.ok) {
|
||||
await sleep(500);
|
||||
throw new Error(l("Stick calibration failed"), { cause: res.error });
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* End stick calibration
|
||||
*/
|
||||
async calibrateSticksEnd() {
|
||||
const res = await this.currentController.calibrateSticksEnd();
|
||||
if (!res.ok) {
|
||||
await sleep(500);
|
||||
throw new Error(l("Stick calibration failed"), { cause: res.error });
|
||||
}
|
||||
|
||||
this.setHasChangesToWrite(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Begin stick range calibration (for UI-driven calibration)
|
||||
*/
|
||||
async calibrateRangeBegin() {
|
||||
const res = await this.currentController.calibrateRangeBegin();
|
||||
if (!res.ok) {
|
||||
throw new Error(l(NOT_GENUINE_SONY_CONTROLLER_MSG), { cause: res.error });
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle range calibration on close
|
||||
*/
|
||||
async calibrateRangeOnClose() {
|
||||
if(!this.currentController) {
|
||||
return { success: false };
|
||||
}
|
||||
const res = await this.currentController.calibrateRangeEnd();
|
||||
if(res?.ok) {
|
||||
this.setHasChangesToWrite(true);
|
||||
return { success: true, message: l("Range calibration completed") };
|
||||
} else {
|
||||
// Check if the error is code 3 (DS4/DS5) or codes 4/5 (DS5 Edge), which typically means
|
||||
// the calibration was already ended or the controller is not in range calibration mode
|
||||
if (res?.code === 3 || res?.code === 4 || res?.code === 5) {
|
||||
console.log("Range calibration end returned expected error code", res.code, "- treating as successful completion");
|
||||
// This is likely not an error - the calibration may have already been completed
|
||||
// or the user closed the window without starting calibration
|
||||
return { success: true };
|
||||
}
|
||||
|
||||
console.log("Range calibration end failed with unexpected error:", res);
|
||||
await sleep(500);
|
||||
const msg = res?.code ? (`${l("Range calibration failed")}. ${l("Error")} ${res.code}`) : (`${l("Range calibration failed")}. ${res?.error || ""}`);
|
||||
return { success: false, message: msg, error: res?.error };
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Full stick calibration process ("OLD" fully automated calibration)
|
||||
* @param {Function} progressCallback - Callback function to report progress (0-100)
|
||||
*/
|
||||
async calibrateSticks(progressCallback) {
|
||||
try {
|
||||
la("multi_calibrate_sticks");
|
||||
|
||||
progressCallback(20);
|
||||
await this.calibrateSticksBegin();
|
||||
progressCallback(30);
|
||||
|
||||
// Sample multiple times during the process
|
||||
const sampleCount = 5;
|
||||
for (let i = 0; i < sampleCount; i++) {
|
||||
await sleep(100);
|
||||
await this.calibrateSticksSample();
|
||||
|
||||
// Progress from 30% to 80% during sampling
|
||||
const sampleProgress = 30 + ((i + 1) / sampleCount) * 50;
|
||||
progressCallback(Math.round(sampleProgress));
|
||||
}
|
||||
|
||||
progressCallback(90);
|
||||
await this.calibrateSticksEnd();
|
||||
progressCallback(100);
|
||||
|
||||
return { success: true, message: l("Stick calibration completed") };
|
||||
} catch (e) {
|
||||
la("multi_calibrate_sticks_failed", {"r": e});
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Disable left adaptive trigger effects (DS5 only)
|
||||
* @returns {Promise<Object>} Result object with success status and message
|
||||
*/
|
||||
async disableLeftAdaptiveTrigger() {
|
||||
if (!this.currentController) {
|
||||
throw new Error(l("No controller connected"));
|
||||
}
|
||||
|
||||
// Check if the controller supports adaptive triggers (DS5 only)
|
||||
if (this.getModel() !== "DS5") {
|
||||
throw new Error(l("Adaptive triggers are only supported on DualSense controllers"));
|
||||
}
|
||||
|
||||
// Check if the controller has the disableLeftAdaptiveTrigger method
|
||||
if (typeof this.currentController.disableLeftAdaptiveTrigger !== 'function') {
|
||||
throw new Error(l("Controller does not support adaptive trigger control"));
|
||||
}
|
||||
|
||||
try {
|
||||
const result = await this.currentController.disableLeftAdaptiveTrigger();
|
||||
return result;
|
||||
} catch (error) {
|
||||
throw new Error(l("Failed to disable adaptive trigger"), { cause: error });
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set left adaptive trigger with preset configurations (DS5 only)
|
||||
* @param {string} preset - Preset name: 'light', 'medium', 'heavy', 'custom'
|
||||
* @param {Object} customParams - Custom parameters for 'custom' preset {start, end, force}
|
||||
* @returns {Promise<Object>} Result object with success status and message
|
||||
*/
|
||||
async setAdaptiveTriggerPreset({left, right}/* , customParams = {} */) {
|
||||
const presets = {
|
||||
'off': { start: 0, end: 0, force: 0, mode: 'off' },
|
||||
'light': { start: 10, end: 80, force: 150, mode: 'single'},
|
||||
'medium': { start: 15, end: 100, force: 200, mode: 'single' },
|
||||
'heavy': { start: 20, end: 120, force: 255, mode: 'single' },
|
||||
// 'custom': customParams
|
||||
};
|
||||
|
||||
if (!presets[left] || !presets[right]) {
|
||||
throw new Error(`Invalid preset. Available presets: light, medium, heavy, custom. Got "${left}" and "${right}".`);
|
||||
}
|
||||
|
||||
const leftPreset = presets[left];
|
||||
const rightPreset = presets[right];
|
||||
|
||||
// if (preset === 'custom') {
|
||||
// // Validate custom parameters
|
||||
// if (typeof start !== 'number' || typeof end !== 'number' || typeof force !== 'number') {
|
||||
// throw new Error(l("Custom preset requires start, end, and force parameters"));
|
||||
// }
|
||||
// }
|
||||
|
||||
return await this.currentController?.setAdaptiveTrigger(leftPreset, rightPreset);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set vibration motors for haptic feedback (DS5 only)
|
||||
* @param {Object} options - Vibration options
|
||||
* @param {number} options.heavyLeft - Left motor intensity (0-255)
|
||||
* @param {number} options.lightRight - Right motor intensity (0-255)
|
||||
* @param {number} options.duration - Duration in milliseconds (optional)
|
||||
* @param {Function} doneCb - Callback function called when vibration ends (optional)
|
||||
*/
|
||||
async setVibration({heavyLeft, lightRight, duration = 0}, doneCb = ({success}) => {}) {
|
||||
try {
|
||||
await this.currentController.setVibration(heavyLeft, lightRight);
|
||||
|
||||
// If duration is specified, automatically turn off vibration after the duration
|
||||
if (duration > 0) {
|
||||
setTimeout(async () => {
|
||||
if(!this.currentController) return doneCb({success: true});
|
||||
await this.currentController.setVibration(0, 0); // Turn off vibration
|
||||
doneCb({success: true});
|
||||
}, duration);
|
||||
}
|
||||
} catch (error) {
|
||||
if(!this.currentController) return; // the controller was unplugged
|
||||
if(duration) doneCb({ success: false});
|
||||
throw new Error(l("Failed to set vibration"), { cause: error });
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Test speaker tone (DS5 only)
|
||||
* @param {number} duration - Duration in milliseconds (optional)
|
||||
* @param {Function} doneCb - Callback function called when tone ends (optional)
|
||||
* @param {string} output - Audio output destination: "speaker" (default) or "headphones" (optional)
|
||||
*/
|
||||
async setSpeakerTone(duration = 1000, doneCb = ({success}) => {}, output = "speaker") {
|
||||
try {
|
||||
await this.currentController.setSpeakerTone(output);
|
||||
|
||||
// If duration is specified, automatically reset speaker after the duration
|
||||
if (duration > 0) {
|
||||
setTimeout(async () => {
|
||||
if(!this.currentController) return doneCb({success: true});
|
||||
// Reset speaker settings to default by calling setSpeakerTone with reset parameters
|
||||
try {
|
||||
if (this.currentController.resetSpeakerSettings) {
|
||||
await this.currentController.resetSpeakerSettings();
|
||||
}
|
||||
} catch (resetError) {
|
||||
console.warn("Failed to reset speaker settings:", resetError);
|
||||
}
|
||||
doneCb({success: true});
|
||||
}, duration);
|
||||
}
|
||||
} catch (error) {
|
||||
if(!this.currentController) return; // the controller was unplugged
|
||||
if(duration) doneCb({ success: false});
|
||||
throw new Error(l("Failed to set speaker tone"), { cause: error });
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function to check if stick positions have changed
|
||||
*/
|
||||
_sticksChanged(current, newValues) {
|
||||
return current.left.x !== newValues.left.x || current.left.y !== newValues.left.y ||
|
||||
current.right.x !== newValues.right.x || current.right.y !== newValues.right.y;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generic button processing for DS4/DS5
|
||||
* Records button states and returns changes
|
||||
*/
|
||||
_recordButtonStates(data, BUTTON_MAP, dpad_byte, l2_analog_byte, r2_analog_byte) {
|
||||
const changes = {};
|
||||
|
||||
// Stick positions (always at bytes 0-3)
|
||||
const [new_lx, new_ly, new_rx, new_ry] = [0, 1, 2, 3]
|
||||
.map(i => data.getUint8(i))
|
||||
.map(v => Math.round((v - 127.5) / 128 * 100) / 100);
|
||||
|
||||
const newSticks = {
|
||||
left: { x: new_lx, y: new_ly },
|
||||
right: { x: new_rx, y: new_ry }
|
||||
};
|
||||
|
||||
if (this._sticksChanged(this.button_states.sticks, newSticks)) {
|
||||
this.button_states.sticks = newSticks;
|
||||
changes.sticks = newSticks;
|
||||
}
|
||||
|
||||
// L2/R2 analog values
|
||||
[
|
||||
['l2', l2_analog_byte],
|
||||
['r2', r2_analog_byte]
|
||||
].forEach(([name, byte]) => {
|
||||
const val = data.getUint8(byte);
|
||||
const key = name + '_analog';
|
||||
if (val !== this.button_states[key]) {
|
||||
this.button_states[key] = val;
|
||||
changes[key] = val;
|
||||
}
|
||||
});
|
||||
|
||||
// Dpad is a 4-bit hat value
|
||||
const hat = data.getUint8(dpad_byte) & 0x0F;
|
||||
const dpad_map = {
|
||||
up: (hat === 0 || hat === 1 || hat === 7),
|
||||
right: (hat === 1 || hat === 2 || hat === 3),
|
||||
down: (hat === 3 || hat === 4 || hat === 5),
|
||||
left: (hat === 5 || hat === 6 || hat === 7)
|
||||
};
|
||||
for (const dir of ['up', 'right', 'down', 'left']) {
|
||||
const pressed = dpad_map[dir];
|
||||
if (this.button_states[dir] !== pressed) {
|
||||
this.button_states[dir] = pressed;
|
||||
changes[dir] = pressed;
|
||||
}
|
||||
}
|
||||
|
||||
// Other buttons
|
||||
for (const btn of BUTTON_MAP) {
|
||||
if (['up', 'right', 'down', 'left'].includes(btn.name)) continue; // Dpad handled above
|
||||
const pressed = (data.getUint8(btn.byte) & btn.mask) !== 0;
|
||||
if (this.button_states[btn.name] !== pressed) {
|
||||
this.button_states[btn.name] = pressed;
|
||||
changes[btn.name] = pressed;
|
||||
}
|
||||
}
|
||||
|
||||
return changes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Process controller input data and call callback if set
|
||||
* This is the first part of the split process_controller_input function
|
||||
* @param {Object} inputData - The input data from the controller
|
||||
* @returns {Object} Changes object containing processed input data
|
||||
*/
|
||||
processControllerInput(inputData) {
|
||||
const { data } = inputData;
|
||||
|
||||
const inputConfig = this.currentController.getInputConfig();
|
||||
const { buttonMap, dpadByte, l2AnalogByte, r2AnalogByte } = inputConfig;
|
||||
const { touchpadOffset } = inputConfig;
|
||||
|
||||
// Process button states using the device-specific configuration
|
||||
const changes = this._recordButtonStates(data, buttonMap, dpadByte, l2AnalogByte, r2AnalogByte);
|
||||
|
||||
// Parse and store touch points if touchpad data is available
|
||||
if (touchpadOffset) {
|
||||
this.touchPoints = this._parseTouchPoints(data, touchpadOffset);
|
||||
}
|
||||
|
||||
// Parse and store battery status
|
||||
this.batteryStatus = this._parseBatteryStatus(data);
|
||||
|
||||
const result = {
|
||||
changes,
|
||||
inputConfig: { buttonMap },
|
||||
touchPoints: this.touchPoints,
|
||||
batteryStatus: this.batteryStatus,
|
||||
};
|
||||
|
||||
this.inputHandler(result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse touch points from input data
|
||||
* @param {DataView} data - Input data view
|
||||
* @param {number} offset - Offset to touchpad data
|
||||
* @returns {Array} Array of touch points with {active, id, x, y} properties
|
||||
*/
|
||||
_parseTouchPoints(data, offset) {
|
||||
// Returns array of up to 2 points: {active, id, x, y}
|
||||
const points = [];
|
||||
for (let i = 0; i < 2; i++) {
|
||||
const base = offset + i * 4;
|
||||
const arr = [];
|
||||
for (let j = 0; j < 4; j++) arr.push(data.getUint8(base + j));
|
||||
const b0 = data.getUint8(base);
|
||||
const active = (b0 & 0x80) === 0; // 0 = finger down, 1 = up
|
||||
const id = b0 & 0x7F;
|
||||
const b1 = data.getUint8(base + 1);
|
||||
const b2 = data.getUint8(base + 2);
|
||||
const b3 = data.getUint8(base + 3);
|
||||
// x: 12 bits, y: 12 bits
|
||||
const x = ((b2 & 0x0F) << 8) | b1;
|
||||
const y = (b3 << 4) | (b2 >> 4);
|
||||
points.push({ active, id, x, y });
|
||||
}
|
||||
return points;
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse battery status from input data
|
||||
*/
|
||||
_parseBatteryStatus(data) {
|
||||
const batteryInfo = this.currentController.parseBatteryStatus(data);
|
||||
const bat_txt = this._batteryPercentToText(batteryInfo);
|
||||
|
||||
const changed = bat_txt !== this._lastBatteryText;
|
||||
this._lastBatteryText = bat_txt;
|
||||
|
||||
return { bat_txt, changed, ...batteryInfo };
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert battery percentage to display text with icons
|
||||
*/
|
||||
_batteryPercentToText({charge_level, is_charging, is_error}) {
|
||||
if (is_error) {
|
||||
return '<font color="red">' + l("error") + '</font>';
|
||||
}
|
||||
|
||||
const batteryIcons = [
|
||||
{ threshold: 20, icon: 'fa-battery-empty' },
|
||||
{ threshold: 40, icon: 'fa-battery-quarter' },
|
||||
{ threshold: 60, icon: 'fa-battery-half' },
|
||||
{ threshold: 80, icon: 'fa-battery-three-quarters' },
|
||||
];
|
||||
|
||||
const icon_txt = batteryIcons.find(item => charge_level < item.threshold)?.icon || 'fa-battery-full';
|
||||
const icon_full = `<i class="fa-solid ${icon_txt}"></i>`;
|
||||
const bolt_txt = is_charging ? '<i class="fa-solid fa-bolt"></i>' : '';
|
||||
return [`${charge_level}%`, icon_full, bolt_txt].join(' ');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a bound input handler function that can be assigned to device.oninputreport
|
||||
* @returns {Function} Bound input handler function
|
||||
*/
|
||||
getInputHandler() {
|
||||
return this.processControllerInput.bind(this);
|
||||
}
|
||||
}
|
||||
|
||||
// Function to initialize the controller manager with dependencies
|
||||
export function initControllerManager(dependencies = {}) {
|
||||
const self = new ControllerManager(dependencies);
|
||||
|
||||
// This disables the save button until something actually changes
|
||||
self.setHasChangesToWrite(false);
|
||||
return self;
|
||||
}
|
||||
207
js/controllers/base-controller.js
Normal file
@@ -0,0 +1,207 @@
|
||||
'use strict';
|
||||
|
||||
/**
|
||||
* Base Controller class that provides common functionality for all controller types
|
||||
*/
|
||||
class BaseController {
|
||||
constructor(device) {
|
||||
this.device = device;
|
||||
this.model = "undefined"; // to be set by subclasses
|
||||
this.finetuneMaxValue; // to be set by subclasses
|
||||
}
|
||||
|
||||
getModel() {
|
||||
return this.model;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the underlying HID device
|
||||
* @returns {HIDDevice} The HID device
|
||||
*/
|
||||
getDevice() {
|
||||
return this.device;
|
||||
}
|
||||
|
||||
getInputConfig() {
|
||||
throw new Error('getInputConfig() must be implemented by subclass');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the maximum value for finetune data
|
||||
* @returns {number} Maximum value for finetune adjustments
|
||||
*/
|
||||
getFinetuneMaxValue() {
|
||||
if(!this.finetuneMaxValue) throw new Error('getFinetuneMaxValue() must be implemented by subclass');
|
||||
return this.finetuneMaxValue;
|
||||
}
|
||||
|
||||
getNumberOfSticks() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set input report handler
|
||||
* @param {Function} handler Input report handler function
|
||||
*/
|
||||
setInputReportHandler(handler) {
|
||||
this.device.oninputreport = handler;
|
||||
}
|
||||
|
||||
/**
|
||||
* Allocate request buffer with proper size based on device feature reports
|
||||
* @param {number} id Report ID
|
||||
* @param {Array} data Data array to include in the request
|
||||
* @returns {Uint8Array} Allocated request buffer
|
||||
*/
|
||||
alloc_req(id, data = []) {
|
||||
const fr = this.device.collections[0].featureReports;
|
||||
const [report] = fr.find(e => e.reportId === id)?.items || [];
|
||||
const maxLen = report?.reportCount || data.length;
|
||||
|
||||
const len = Math.min(data.length, maxLen);
|
||||
const out = new Uint8Array(maxLen);
|
||||
out.set(data.slice(0, len));
|
||||
return out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Send feature report to device
|
||||
* @param {number} reportId Report ID
|
||||
* @param {ArrayBuffer|Array} data Data to send (if Array, will be processed through allocReq)
|
||||
*/
|
||||
async sendFeatureReport(reportId, data) {
|
||||
// If data is an array, use allocReq to create proper buffer
|
||||
if (Array.isArray(data)) {
|
||||
data = this.alloc_req(reportId, data);
|
||||
}
|
||||
|
||||
try {
|
||||
return await this.device.sendFeatureReport(reportId, data);
|
||||
} catch (error) {
|
||||
// HID doesn't throw proper Errors with stack (stack is "name: message") so generate a new stack here
|
||||
throw new Error(error.stack);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Receive feature report from device
|
||||
* @param {number} reportId Report ID
|
||||
*/
|
||||
async receiveFeatureReport(reportId) {
|
||||
return await this.device.receiveFeatureReport(reportId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Close the HID device connection
|
||||
*/
|
||||
async close() {
|
||||
if (this.device?.opened) {
|
||||
await this.device.close();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the serial number of the device
|
||||
* @returns {Promise<string>} The device serial number
|
||||
*/
|
||||
async getSerialNumber() {
|
||||
throw new Error('getSerialNumber() must be implemented by subclass');
|
||||
}
|
||||
|
||||
// Abstract methods that must be implemented by subclasses
|
||||
async getInfo() {
|
||||
throw new Error('getInfo() must be implemented by subclass');
|
||||
}
|
||||
|
||||
async flash(progressCallback = null) {
|
||||
throw new Error('flash() must be implemented by subclass');
|
||||
}
|
||||
|
||||
async reset() {
|
||||
throw new Error('reset() must be implemented by subclass');
|
||||
}
|
||||
|
||||
async nvsLock() {
|
||||
throw new Error('nvsLock() must be implemented by subclass');
|
||||
}
|
||||
|
||||
async nvsUnlock() {
|
||||
throw new Error('nvsUnlock() must be implemented by subclass');
|
||||
}
|
||||
|
||||
async calibrateSticksBegin() {
|
||||
throw new Error('calibrateSticksBegin() must be implemented by subclass');
|
||||
}
|
||||
|
||||
async calibrateSticksEnd() {
|
||||
throw new Error('calibrateSticksEnd() must be implemented by subclass');
|
||||
}
|
||||
|
||||
async calibrateSticksSample() {
|
||||
throw new Error('calibrateSticksSample() must be implemented by subclass');
|
||||
}
|
||||
|
||||
async calibrateRangeBegin() {
|
||||
throw new Error('calibrateRangeBegin() must be implemented by subclass');
|
||||
}
|
||||
|
||||
async calibrateRangeEnd() {
|
||||
throw new Error('calibrateRangeEnd() must be implemented by subclass');
|
||||
}
|
||||
|
||||
parseBatteryStatus(data) {
|
||||
throw new Error('parseBatteryStatus() must be implemented by subclass');
|
||||
}
|
||||
|
||||
async setAdaptiveTrigger(left, right) {
|
||||
// Default no-op implementation for controllers that don't support adaptive triggers
|
||||
return { success: true, message: "This controller does not support adaptive triggers" };
|
||||
}
|
||||
|
||||
async setVibration(heavyLeft = 0, lightRight = 0) {
|
||||
// Default no-op implementation for controllers that don't support vibration
|
||||
return { success: true, message: "This controller does not support vibration" };
|
||||
}
|
||||
|
||||
async setAdaptiveTriggerPreset(config) {
|
||||
// Default no-op implementation for controllers that don't support adaptive trigger presets
|
||||
return { success: true, message: "This controller does not support adaptive trigger presets" };
|
||||
}
|
||||
|
||||
async setSpeakerTone(output = 'speaker') {
|
||||
// Default no-op implementation for controllers that don't support speaker audio
|
||||
if (callback) callback({ success: true, message: "This controller does not support speaker audio" });
|
||||
return { success: true, message: "This controller does not support speaker audio" };
|
||||
}
|
||||
|
||||
async resetLights() {
|
||||
// Default no-op implementation for controllers that don't support controllable lights
|
||||
return { success: true, message: "This controller does not support controllable lights" };
|
||||
}
|
||||
|
||||
async setMuteLed(mode) {
|
||||
// Default no-op implementation for controllers that don't support mute LED
|
||||
return { success: true, message: "This controller does not support mute LED" };
|
||||
}
|
||||
|
||||
async setLightbarColor(r, g, b) {
|
||||
// Default no-op implementation for controllers that don't support lightbar colors
|
||||
return { success: true, message: "This controller does not support lightbar colors" };
|
||||
}
|
||||
|
||||
async setPlayerIndicator(pattern) {
|
||||
// Default no-op implementation for controllers that don't support player indicators
|
||||
return { success: true, message: "This controller does not support player indicators" };
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the list of supported quick tests for this controller
|
||||
* @returns {Array<string>} Array of supported test types
|
||||
*/
|
||||
getSupportedQuickTests() {
|
||||
// Default implementation - supports all tests
|
||||
return ['usb', 'buttons', 'adaptive', 'haptic', 'lights', 'speaker', 'headphone', 'microphone'];
|
||||
}
|
||||
}
|
||||
|
||||
export default BaseController;
|
||||
133
js/controllers/controller-factory.js
Normal file
@@ -0,0 +1,133 @@
|
||||
'use strict';
|
||||
|
||||
import DS4Controller from './ds4-controller.js';
|
||||
import DS5Controller from './ds5-controller.js';
|
||||
import DS5EdgeController from './ds5-edge-controller.js';
|
||||
import VR2Controller from './vr2-controller.js';
|
||||
import { dec2hex } from '../utils.js';
|
||||
|
||||
/**
|
||||
* Controller Factory - Creates the appropriate controller instance based on device type
|
||||
*/
|
||||
class ControllerFactory {
|
||||
static getSupportedModels() {
|
||||
const ds4v1 = { vendorId: 0x054c, productId: 0x05c4 };
|
||||
const ds4v2 = { vendorId: 0x054c, productId: 0x09cc };
|
||||
const ds5 = { vendorId: 0x054c, productId: 0x0ce6 };
|
||||
const ds5edge = { vendorId: 0x054c, productId: 0x0df2 };
|
||||
const vr2_left = { vendorId: 0x054c, productId: 0x0e45 };
|
||||
const vr2_right = { vendorId: 0x054c, productId: 0x0e46 };
|
||||
return [ds4v1, ds4v2, ds5, ds5edge, vr2_left, vr2_right];
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Create a controller instance based on the HID device product ID
|
||||
* @param {HIDDevice} device The HID device
|
||||
* @returns {BaseController} The appropriate controller instance
|
||||
*/
|
||||
static createControllerInstance(device) {
|
||||
switch (device.productId) {
|
||||
case 0x05c4: // DS4 v1
|
||||
case 0x09cc: // DS4 v2
|
||||
return new DS4Controller(device);
|
||||
|
||||
case 0x0ce6: // DS5
|
||||
return new DS5Controller(device);
|
||||
|
||||
case 0x0df2: // DS5 Edge
|
||||
return new DS5EdgeController(device);
|
||||
|
||||
case 0x0e45: // VR2 Left
|
||||
return new VR2Controller(device, true);
|
||||
|
||||
case 0x0e46: // VR2 Right
|
||||
return new VR2Controller(device, false);
|
||||
|
||||
default:
|
||||
throw new Error(`Unsupported device: ${dec2hex(device.vendorId)}:${dec2hex(device.productId)}`);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get device name based on product ID
|
||||
* @param {number} productId Product ID
|
||||
* @returns {string} Device name
|
||||
*/
|
||||
static getDeviceName(productId) {
|
||||
switch (productId) {
|
||||
case 0x05c4:
|
||||
return "Sony DualShock 4 V1";
|
||||
case 0x09cc:
|
||||
return "Sony DualShock 4 V2";
|
||||
case 0x0ce6:
|
||||
return "Sony DualSense";
|
||||
case 0x0df2:
|
||||
return "Sony DualSense Edge";
|
||||
case 0x0e45:
|
||||
return "VR2 Left Controller";
|
||||
case 0x0e46:
|
||||
return "VR2 Right Controller";
|
||||
default:
|
||||
return "Unknown Device";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get UI configuration based on product ID
|
||||
* @param {number} productId Product ID
|
||||
* @returns {Object} UI configuration
|
||||
*/
|
||||
static getUIConfig(productId) {
|
||||
switch (productId) {
|
||||
case 0x05c4: // DS4 v1
|
||||
case 0x09cc: // DS4 v2
|
||||
return {
|
||||
showInfo: false,
|
||||
showFinetune: false,
|
||||
showInfoTab: false,
|
||||
showQuickTests: true,
|
||||
showFourStepCalib: true,
|
||||
showQuickCalib: false,
|
||||
showCalibrationHistory: false
|
||||
};
|
||||
|
||||
case 0x0ce6: // DS5
|
||||
case 0x0df2: // DS5 Edge
|
||||
return {
|
||||
showInfo: true,
|
||||
showFinetune: true,
|
||||
showInfoTab: true,
|
||||
showQuickTests: true,
|
||||
showFourStepCalib: false,
|
||||
showQuickCalib: true,
|
||||
showCalibrationHistory: true
|
||||
};
|
||||
|
||||
case 0x0e45: // VR2 Left Controller
|
||||
case 0x0e46: // VR2 Right Controller
|
||||
return {
|
||||
showInfo: true,
|
||||
showFinetune: false,
|
||||
showInfoTab: true,
|
||||
showQuickTests: false,
|
||||
showFourStepCalib: true,
|
||||
showQuickCalib: false
|
||||
};
|
||||
|
||||
default:
|
||||
return {
|
||||
showInfo: false,
|
||||
showFinetune: false,
|
||||
showInfoTab: false,
|
||||
showQuickTests: false,
|
||||
showFourStepCalib: false,
|
||||
showQuickCalib: false,
|
||||
showCalibrationHistory: false
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Export for use in other modules
|
||||
export default ControllerFactory;
|
||||
715
js/controllers/ds4-controller.js
Normal file
@@ -0,0 +1,715 @@
|
||||
'use strict';
|
||||
|
||||
import BaseController from './base-controller.js';
|
||||
import {
|
||||
sleep,
|
||||
buf2hex,
|
||||
dec2hex,
|
||||
dec2hex32,
|
||||
format_mac_from_view,
|
||||
la
|
||||
} from '../utils.js';
|
||||
import { l } from '../translations.js';
|
||||
|
||||
// DS4 Button mapping configuration
|
||||
const DS4_BUTTON_MAP = [
|
||||
{ name: 'up', byte: 4, mask: 0x0 }, // Dpad handled separately
|
||||
{ name: 'right', byte: 4, mask: 0x1 },
|
||||
{ name: 'down', byte: 4, mask: 0x2 },
|
||||
{ name: 'left', byte: 4, mask: 0x3 },
|
||||
{ name: 'square', byte: 4, mask: 0x10, svg: 'Square' },
|
||||
{ name: 'cross', byte: 4, mask: 0x20, svg: 'Cross' },
|
||||
{ name: 'circle', byte: 4, mask: 0x40, svg: 'Circle' },
|
||||
{ name: 'triangle', byte: 4, mask: 0x80, svg: 'Triangle' },
|
||||
{ name: 'l1', byte: 5, mask: 0x01, svg: 'L1' },
|
||||
{ name: 'l2', byte: 5, mask: 0x04, svg: 'L2' }, // analog handled separately
|
||||
{ name: 'r1', byte: 5, mask: 0x02, svg: 'R1' },
|
||||
{ name: 'r2', byte: 5, mask: 0x08, svg: 'R2' }, // analog handled separately
|
||||
{ name: 'create', byte: 5, mask: 0x10, svg: 'Create' },
|
||||
{ name: 'options', byte: 5, mask: 0x20, svg: 'Options' },
|
||||
{ name: 'l3', byte: 5, mask: 0x40, svg: 'L3' },
|
||||
{ name: 'r3', byte: 5, mask: 0x80, svg: 'R3' },
|
||||
{ name: 'ps', byte: 6, mask: 0x01, svg: 'PS' },
|
||||
{ name: 'touchpad', byte: 6, mask: 0x02, svg: 'Trackpad' },
|
||||
// No mute button on DS4
|
||||
];
|
||||
|
||||
// DS4 Input processing configuration
|
||||
const DS4_INPUT_CONFIG = {
|
||||
buttonMap: DS4_BUTTON_MAP,
|
||||
dpadByte: 4,
|
||||
l2AnalogByte: 7,
|
||||
r2AnalogByte: 8,
|
||||
touchpadOffset: 34,
|
||||
};
|
||||
|
||||
// DS4 Output Report Constants
|
||||
const DS4_OUTPUT_REPORT = {
|
||||
USB_REPORT_ID: 0x05,
|
||||
BT_REPORT_ID: 0x11,
|
||||
};
|
||||
|
||||
const DS4_VALID_FLAG0 = {
|
||||
RUMBLE: 0x01, // Bit 0 for rumble motors
|
||||
LED: 0x02, // Bit 1 for LED control
|
||||
LED_BLINK: 0x04, // Bit 2 for LED blink control
|
||||
};
|
||||
|
||||
// Basic DS4 Output Structure for vibration and LED control
|
||||
class DS4OutputStruct {
|
||||
constructor(currentState = null) {
|
||||
// Create a 32-byte buffer for DS4 output report (USB)
|
||||
this.buffer = new ArrayBuffer(31);
|
||||
this.view = new DataView(this.buffer);
|
||||
|
||||
// Control flags
|
||||
this.validFlag0 = currentState?.validFlag0 || 0;
|
||||
this.validFlag1 = currentState?.validFlag1 || 0;
|
||||
|
||||
// Vibration motors
|
||||
this.rumbleRight = currentState?.rumbleRight || 0;
|
||||
this.rumbleLeft = currentState?.rumbleLeft || 0;
|
||||
|
||||
// LED control
|
||||
this.ledRed = currentState?.ledRed || 0;
|
||||
this.ledGreen = currentState?.ledGreen || 0;
|
||||
this.ledBlue = currentState?.ledBlue || 0;
|
||||
|
||||
// LED timing
|
||||
this.ledFlashOn = currentState?.ledFlashOn || 0;
|
||||
this.ledFlashOff = currentState?.ledFlashOff || 0;
|
||||
}
|
||||
|
||||
// Pack the data into the output buffer
|
||||
pack() {
|
||||
// Based on DS4 output report structure
|
||||
// Byte 0-2: Valid flags and padding
|
||||
this.view.setUint8(0, this.validFlag0);
|
||||
this.view.setUint8(1, this.validFlag1);
|
||||
this.view.setUint8(2, 0x00);
|
||||
|
||||
// Byte 3-4: Rumble motors
|
||||
this.view.setUint8(3, this.rumbleRight);
|
||||
this.view.setUint8(4, this.rumbleLeft);
|
||||
|
||||
// Bytes 5-7: LED RGB
|
||||
this.view.setUint8(5, this.ledRed);
|
||||
this.view.setUint8(6, this.ledGreen);
|
||||
this.view.setUint8(7, this.ledBlue);
|
||||
|
||||
// Bytes 8-9: LED flash timing
|
||||
this.view.setUint8(8, this.ledFlashOn);
|
||||
this.view.setUint8(9, this.ledFlashOff);
|
||||
|
||||
return this.buffer;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* DualShock 4 Controller implementation
|
||||
*/
|
||||
class DS4Controller extends BaseController {
|
||||
constructor(device) {
|
||||
super(device);
|
||||
this.model = "DS4";
|
||||
|
||||
// Initialize current output state to track controller settings
|
||||
this.currentOutputState = {
|
||||
validFlag0: 0,
|
||||
validFlag1: 0,
|
||||
rumbleRight: 0,
|
||||
rumbleLeft: 0,
|
||||
ledRed: 0,
|
||||
ledGreen: 0,
|
||||
ledBlue: 0,
|
||||
ledFlashOn: 0,
|
||||
ledFlashOff: 0,
|
||||
};
|
||||
}
|
||||
|
||||
getInputConfig() {
|
||||
return DS4_INPUT_CONFIG;
|
||||
}
|
||||
|
||||
async getSerialNumber() {
|
||||
return await this.getBdAddr();
|
||||
}
|
||||
|
||||
async getInfo() {
|
||||
// Device-only: collect info and return a common structure; do not touch the DOM
|
||||
try {
|
||||
let deviceTypeText = l("unknown");
|
||||
let is_clone = false;
|
||||
|
||||
const view = await this.receiveFeatureReport(0xa3);
|
||||
|
||||
const cmd = view.getUint8(0, true);
|
||||
|
||||
if(cmd != 0xa3 || view.buffer.byteLength < 49) {
|
||||
if(view.buffer.byteLength != 49) {
|
||||
deviceTypeText = l("clone");
|
||||
is_clone = true;
|
||||
}
|
||||
}
|
||||
|
||||
const k1 = new TextDecoder().decode(view.buffer.slice(1, 0x10)).replace(/\0/g, '');
|
||||
const k2 = new TextDecoder().decode(view.buffer.slice(0x10, 0x20)).replace(/\0/g, '');
|
||||
|
||||
const hw_ver_major = view.getUint16(0x21, true);
|
||||
const hw_ver_minor = view.getUint16(0x23, true);
|
||||
const sw_ver_major = view.getUint32(0x25, true);
|
||||
const sw_ver_minor = view.getUint16(0x25+4, true);
|
||||
try {
|
||||
if(!is_clone) {
|
||||
// If this feature report succeeds, it's an original device
|
||||
await this.receiveFeatureReport(0x81);
|
||||
deviceTypeText = l("original");
|
||||
}
|
||||
} catch(e) {
|
||||
la("clone");
|
||||
is_clone = true;
|
||||
deviceTypeText = l("clone");
|
||||
}
|
||||
|
||||
const hw_version = `${dec2hex(hw_ver_major)}:${dec2hex(hw_ver_minor)}`;
|
||||
const sw_version = `${dec2hex(sw_ver_major)}:${dec2hex(sw_ver_minor)}`;
|
||||
const infoItems = [
|
||||
{ key: l("Build Date"), value: `${k1} ${k2}`, cat: "fw" },
|
||||
{ key: l("HW Version"), value: hw_version, cat: "hw" },
|
||||
{ key: l("SW Version"), value: sw_version, cat: "fw" },
|
||||
{ key: l("Device Type"), value: deviceTypeText, cat: "hw", severity: is_clone ? 'danger' : undefined },
|
||||
];
|
||||
|
||||
const board_model = this.hwToBoardModel(hw_ver_minor);
|
||||
const bd_addr = await this.getBdAddr();
|
||||
|
||||
if(!is_clone) {
|
||||
// Add Board Model (UI will append the info icon)
|
||||
infoItems.push({ key: l("Board Model"), value: board_model, cat: "hw", addInfoIcon: 'board', copyable: true });
|
||||
infoItems.push({ key: l("Bluetooth Address"), value: bd_addr, cat: "hw" });
|
||||
}
|
||||
|
||||
const nv = await this.queryNvStatus();
|
||||
const rare = this.isRare(hw_ver_minor);
|
||||
const disable_bits = is_clone ? 1 : 0; // 1: clone
|
||||
|
||||
la("ds4_get_info", { hw_version, board_model, bd_addr, is_clone }); // Collect Bluetooth address for analytics
|
||||
|
||||
return { ok: true, infoItems, nv, disable_bits, rare };
|
||||
} catch(error) {
|
||||
// Return error but do not touch DOM
|
||||
return { ok: false, error, disable_bits: 1 };
|
||||
}
|
||||
}
|
||||
|
||||
async flash(progressCallback = null) {
|
||||
la("ds4_flash");
|
||||
try {
|
||||
await this.nvsUnlock();
|
||||
const lockRes = await this.nvsLock();
|
||||
if(!lockRes.ok) throw (lockRes.error || new Error("NVS lock failed"));
|
||||
|
||||
return { success: true, message: l("Changes saved successfully") };
|
||||
} catch(error) {
|
||||
throw new Error(l("Error while saving changes"), { cause: error });
|
||||
}
|
||||
}
|
||||
|
||||
async reset() {
|
||||
la("ds4_reset");
|
||||
try {
|
||||
await this.sendFeatureReport(0xa0, [4,1,0]);
|
||||
} catch(error) {
|
||||
}
|
||||
}
|
||||
|
||||
async nvsLock() {
|
||||
// la("ds4_nvlock");
|
||||
try {
|
||||
await this.sendFeatureReport(0xa0, [10,1,0]);
|
||||
return { ok: true };
|
||||
} catch(error) {
|
||||
return { ok: false, error };
|
||||
}
|
||||
}
|
||||
|
||||
async nvsUnlock() {
|
||||
// la("ds4_nvunlock");
|
||||
try {
|
||||
await this.sendFeatureReport(0xa0, [10,2,0x3e,0x71,0x7f,0x89]);
|
||||
return { ok: true };
|
||||
} catch(error) {
|
||||
return { ok: false, error };
|
||||
}
|
||||
}
|
||||
|
||||
async getBdAddr() {
|
||||
const view = await this.receiveFeatureReport(0x12);
|
||||
return format_mac_from_view(view, 1);
|
||||
}
|
||||
|
||||
async calibrateRangeBegin() {
|
||||
la("ds4_calibrate_range_begin");
|
||||
try {
|
||||
// Begin
|
||||
await this.sendFeatureReport(0x90, [1,1,2]);
|
||||
await sleep(200);
|
||||
|
||||
// Assert
|
||||
const data = await this.receiveFeatureReport(0x91);
|
||||
const data2 = await this.receiveFeatureReport(0x92);
|
||||
const [d1, d2] = [data, data2].map(v => v.buffer.byteLength == 4 ? v.getUint32(0, false) : undefined);
|
||||
if(d1 != 0x91010201 || d2 != 0x920102ff) {
|
||||
la("ds4_calibrate_range_begin_failed", {"d1": d1, "d2": d2});
|
||||
return {
|
||||
ok: false,
|
||||
error: new Error(`Stick range calibration begin failed: ${d1}, ${d2}`),
|
||||
code: 1, d1, d2
|
||||
};
|
||||
}
|
||||
return { ok: true };
|
||||
} catch(error) {
|
||||
la("ds4_calibrate_range_begin_failed", {"r": error});
|
||||
return { ok: false, error };
|
||||
}
|
||||
}
|
||||
|
||||
async calibrateRangeEnd() {
|
||||
la("ds4_calibrate_range_end");
|
||||
try {
|
||||
// Write
|
||||
await this.sendFeatureReport(0x90, [2,1,2]);
|
||||
await sleep(200);
|
||||
|
||||
const data = await this.receiveFeatureReport(0x91);
|
||||
const data2 = await this.receiveFeatureReport(0x92);
|
||||
const [d1, d2] = [data, data2].map(v => v.getUint32(0, false));
|
||||
if(d1 != 0x91010202 || d2 != 0x92010201) {
|
||||
la("ds4_calibrate_range_end_failed", {"d1": d1, "d2": d2});
|
||||
return { ok: false, code: 3, d1, d2 };
|
||||
}
|
||||
|
||||
return { ok: true };
|
||||
} catch(error) {
|
||||
la("ds4_calibrate_range_end_failed", {"r": error});
|
||||
return { ok: false, error };
|
||||
}
|
||||
}
|
||||
|
||||
async calibrateSticksBegin() {
|
||||
la("ds4_calibrate_sticks_begin");
|
||||
try {
|
||||
// Begin
|
||||
await this.sendFeatureReport(0x90, [1,1,1]);
|
||||
await sleep(200);
|
||||
|
||||
// Assert
|
||||
const data = await this.receiveFeatureReport(0x91);
|
||||
const data2 = await this.receiveFeatureReport(0x92);
|
||||
const [d1, d2] = [data, data2].map(v => v.buffer.byteLength == 4 ? v.getUint32(0, false) : undefined);
|
||||
if(d1 != 0x91010101 || d2 != 0x920101ff) {
|
||||
la("ds4_calibrate_sticks_begin_failed", {"d1": d1, "d2": d2});
|
||||
return {
|
||||
ok: false,
|
||||
error: new Error(`Stick center calibration begin failed: ${d1}, ${d2}`),
|
||||
code: 1, d1, d2,
|
||||
};
|
||||
}
|
||||
|
||||
return { ok: true };
|
||||
} catch(error) {
|
||||
la("ds4_calibrate_sticks_begin_failed", {"r": error});
|
||||
return { ok: false, error };
|
||||
}
|
||||
}
|
||||
|
||||
async calibrateSticksSample() {
|
||||
la("ds4_calibrate_sticks_sample");
|
||||
try {
|
||||
// Sample
|
||||
await this.sendFeatureReport(0x90, [3,1,1]);
|
||||
await sleep(200);
|
||||
|
||||
// Assert
|
||||
const data = await this.receiveFeatureReport(0x91);
|
||||
const data2 = await this.receiveFeatureReport(0x92);
|
||||
if(data.getUint32(0, false) != 0x91010101 || data2.getUint32(0, false) != 0x920101ff) {
|
||||
const [d1, d2] = [data, data2].map(v => dec2hex32(v.getUint32(0, false)));
|
||||
la("ds4_calibrate_sticks_sample_failed", {"d1": d1, "d2": d2});
|
||||
return { ok: false, code: 2, d1, d2 };
|
||||
}
|
||||
return { ok: true };
|
||||
} catch(error) {
|
||||
return { ok: false, error };
|
||||
}
|
||||
}
|
||||
|
||||
async calibrateSticksEnd() {
|
||||
la("ds4_calibrate_sticks_end");
|
||||
try {
|
||||
// Write
|
||||
await this.sendFeatureReport(0x90, [2,1,1]);
|
||||
await sleep(200);
|
||||
|
||||
const data = await this.receiveFeatureReport(0x91);
|
||||
const data2 = await this.receiveFeatureReport(0x92);
|
||||
if(data.getUint32(0, false) != 0x91010102 || data2.getUint32(0, false) != 0x92010101) {
|
||||
const [d1, d2] = [data, data2].map(v => dec2hex32(v.getUint32(0, false)));
|
||||
la("ds4_calibrate_sticks_end_failed", {"d1": d1, "d2": d2});
|
||||
return { ok: false, code: 3, d1, d2 };
|
||||
}
|
||||
|
||||
return { ok: true };
|
||||
} catch(error) {
|
||||
la("ds4_calibrate_sticks_end_failed", {"r": error});
|
||||
return { ok: false, error };
|
||||
}
|
||||
}
|
||||
|
||||
async queryNvStatus() {
|
||||
try {
|
||||
await this.sendFeatureReport(0x08, [0xff,0, 12]);
|
||||
const data = await this.receiveFeatureReport(0x11);
|
||||
const ret = data.getUint8(1, false);
|
||||
const res = { device: 'ds4', code: ret }
|
||||
switch(ret) {
|
||||
case 1:
|
||||
return { ...res, status: 'locked', locked: true, mode: 'temporary' };
|
||||
case 0:
|
||||
return { ...res, status: 'unlocked', locked: false, mode: 'permanent' };
|
||||
default:
|
||||
return { ...res, status: 'unknown', locked: null };
|
||||
}
|
||||
} catch (error) {
|
||||
return { device: 'ds4', status: 'error', locked: null, code: 2, error };
|
||||
}
|
||||
}
|
||||
|
||||
hwToBoardModel(hw_ver) {
|
||||
const a = hw_ver >> 8;
|
||||
if(a == 0x31) {
|
||||
return "JDM-001";
|
||||
} else if(a == 0x43) {
|
||||
return "JDM-011";
|
||||
} else if(a == 0x54) {
|
||||
return "JDM-030";
|
||||
} else if(a >= 0x64 && a <= 0x74) {
|
||||
return "JDM-040";
|
||||
} else if((a > 0x80 && a < 0x84) || a == 0x93) {
|
||||
return "JDM-020";
|
||||
} else if(a == 0xa4 || a == 0x90 || a == 0xa0) {
|
||||
return "JDM-050";
|
||||
} else if(a == 0xb0) {
|
||||
return "JDM-055 (Scuf?)";
|
||||
} else if(a == 0xb4) {
|
||||
return "JDM-055";
|
||||
} else {
|
||||
if(this.isRare(hw_ver))
|
||||
return "WOW!";
|
||||
return l("Unknown");
|
||||
}
|
||||
}
|
||||
|
||||
isRare(hw_ver) {
|
||||
const a = hw_ver >> 8;
|
||||
const b = a >> 4;
|
||||
return ((b == 7 && a > 0x74) || (b == 9 && a != 0x93 && a != 0x90));
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse DS4 battery status from input data
|
||||
*/
|
||||
parseBatteryStatus(data) {
|
||||
const bat = data.getUint8(29); // DS4 battery byte is at position 29
|
||||
|
||||
// DS4: bat_data = low 4 bits, bat_status = bit 4
|
||||
const bat_data = bat & 0x0f;
|
||||
const bat_status = (bat >> 4) & 1;
|
||||
const cable_connected = bat_status === 1;
|
||||
|
||||
let charge_level = 0;
|
||||
let is_charging = false;
|
||||
let is_error = false;
|
||||
|
||||
if (cable_connected) {
|
||||
if (bat_data < 10) {
|
||||
charge_level = Math.min(bat_data * 10 + 5, 100);
|
||||
is_charging = true;
|
||||
} else if (bat_data === 10) {
|
||||
charge_level = 100;
|
||||
is_charging = true;
|
||||
} else if (bat_data === 11) {
|
||||
charge_level = 100; // Fully charged
|
||||
} else {
|
||||
charge_level = 0;
|
||||
is_error = true;
|
||||
}
|
||||
} else {
|
||||
// On battery power
|
||||
charge_level = bat_data < 10 ? bat_data * 10 + 5 : 100;
|
||||
}
|
||||
|
||||
return { charge_level, cable_connected, is_charging, is_error };
|
||||
}
|
||||
|
||||
/**
|
||||
* Send output report to the DS4 controller
|
||||
* @param {ArrayBuffer} data - The output report data
|
||||
*/
|
||||
async sendOutputReport(data, reason = "") {
|
||||
if (!this.device?.opened) {
|
||||
throw new Error('Device is not opened');
|
||||
}
|
||||
try {
|
||||
console.log(`Sending output report${ reason ? ` to ${reason}` : '' }:`, DS4_OUTPUT_REPORT.USB_REPORT_ID, buf2hex(data));
|
||||
await this.device.sendReport(DS4_OUTPUT_REPORT.USB_REPORT_ID, new Uint8Array(data));
|
||||
} catch (error) {
|
||||
throw new Error(`Failed to send output report: ${error.message}`);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the current output state with values from an OutputStruct
|
||||
* @param {DS4OutputStruct} outputStruct - The output structure to copy state from
|
||||
*/
|
||||
updateCurrentOutputState(outputStruct) {
|
||||
this.currentOutputState = { ...outputStruct };
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a copy of the current output state
|
||||
* @returns {Object} A copy of the current output state
|
||||
*/
|
||||
getCurrentOutputState() {
|
||||
return { ...this.currentOutputState };
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize the current output state when the controller is first connected.
|
||||
* This method sets up reasonable defaults for the DS4 controller.
|
||||
*/
|
||||
async initializeCurrentOutputState() {
|
||||
try {
|
||||
// Reset all output state to known defaults
|
||||
this.currentOutputState = {
|
||||
...this.getCurrentOutputState(),
|
||||
validFlag0: DS4_VALID_FLAG0.RUMBLE | DS4_VALID_FLAG0.LED,
|
||||
ledRed: 0,
|
||||
ledGreen: 0,
|
||||
ledBlue: 255, // Default to blue
|
||||
ledFlashOn: 0,
|
||||
ledFlashOff: 0
|
||||
};
|
||||
|
||||
// Send a "reset" output report to ensure the controller is in a known state
|
||||
const resetOutputStruct = new DS4OutputStruct(this.currentOutputState);
|
||||
await this.sendOutputReport(resetOutputStruct.pack(), 'init default states');
|
||||
|
||||
// Update our state to reflect what we just sent
|
||||
this.updateCurrentOutputState(resetOutputStruct);
|
||||
} catch (error) {
|
||||
console.warn("Failed to initialize DS4 output state:", error);
|
||||
// Even if the reset fails, we still have the default state initialized
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set vibration motors for haptic feedback
|
||||
* @param {number} heavyLeft - Left motor intensity (0-255)
|
||||
* @param {number} lightRight - Right motor intensity (0-255)
|
||||
*/
|
||||
async setVibration(heavyLeft = 0, lightRight = 0) {
|
||||
try {
|
||||
const { validFlag0 } = this.currentOutputState;
|
||||
const outputStruct = new DS4OutputStruct({
|
||||
...this.currentOutputState,
|
||||
rumbleLeft: Math.max(0, Math.min(255, heavyLeft)),
|
||||
rumbleRight: Math.max(0, Math.min(255, lightRight)),
|
||||
validFlag0: validFlag0 | DS4_VALID_FLAG0.RUMBLE,
|
||||
});
|
||||
await this.sendOutputReport(outputStruct.pack(), 'set vibration');
|
||||
outputStruct.validFlag0 &= ~DS4_VALID_FLAG0.RUMBLE;
|
||||
|
||||
// Update current state to reflect the changes
|
||||
this.updateCurrentOutputState(outputStruct);
|
||||
|
||||
return { success: true, message: "Vibration set successfully" };
|
||||
} catch (error) {
|
||||
throw new Error("Failed to set vibration", { cause: error });
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set lightbar color
|
||||
* @param {number} red - Red component (0-255)
|
||||
* @param {number} green - Green component (0-255)
|
||||
* @param {number} blue - Blue component (0-255)
|
||||
*/
|
||||
async setLightbarColor(red = 0, green = 0, blue = 0) {
|
||||
try {
|
||||
const { validFlag0 } = this.currentOutputState;
|
||||
const outputStruct = new DS4OutputStruct({
|
||||
...this.currentOutputState,
|
||||
ledRed: Math.max(0, Math.min(255, red)),
|
||||
ledGreen: Math.max(0, Math.min(255, green)),
|
||||
ledBlue: Math.max(0, Math.min(255, blue)),
|
||||
validFlag0: validFlag0 | DS4_VALID_FLAG0.LED,
|
||||
});
|
||||
await this.sendOutputReport(outputStruct.pack(), 'set lightbar color');
|
||||
outputStruct.validFlag0 &= ~DS4_VALID_FLAG0.LED;
|
||||
|
||||
// Update current state to reflect the changes
|
||||
this.updateCurrentOutputState(outputStruct);
|
||||
} catch (error) {
|
||||
throw new Error("Failed to set lightbar color", { cause: error });
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set lightbar blink pattern
|
||||
* @param {number} red - Red component (0-255)
|
||||
* @param {number} green - Green component (0-255)
|
||||
* @param {number} blue - Blue component (0-255)
|
||||
* @param {number} flashOn - On duration in deciseconds (0-255)
|
||||
* @param {number} flashOff - Off duration in deciseconds (0-255)
|
||||
*/
|
||||
async setLightbarBlink(red = 0, green = 0, blue = 0, flashOn = 0, flashOff = 0) {
|
||||
try {
|
||||
const { validFlag0 } = this.currentOutputState;
|
||||
const outputStruct = new DS4OutputStruct({
|
||||
...this.currentOutputState,
|
||||
ledRed: Math.max(0, Math.min(255, red)),
|
||||
ledGreen: Math.max(0, Math.min(255, green)),
|
||||
ledBlue: Math.max(0, Math.min(255, blue)),
|
||||
ledFlashOn: Math.max(0, Math.min(255, flashOn)),
|
||||
ledFlashOff: Math.max(0, Math.min(255, flashOff)),
|
||||
validFlag0: validFlag0 | DS4_VALID_FLAG0.LED | DS4_VALID_FLAG0.LED_BLINK,
|
||||
});
|
||||
await this.sendOutputReport(outputStruct.pack(), 'set lightbar blink');
|
||||
outputStruct.validFlag0 &= ~(DS4_VALID_FLAG0.LED | DS4_VALID_FLAG0.LED_BLINK);
|
||||
|
||||
// Update current state to reflect the changes
|
||||
this.updateCurrentOutputState(outputStruct);
|
||||
} catch (error) {
|
||||
throw new Error("Failed to set lightbar blink", { cause: error });
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set speaker tone for audio output through the controller's headphone jack
|
||||
* Note: DS4 only supports playing sound through headphones connected to the controller.
|
||||
* The built-in speaker is not supported. DS4 audio is a standard USB audio device,
|
||||
* not controlled via HID output reports.
|
||||
* @param {string} output - Audio output destination: "headphones" only (throws error if "speaker")
|
||||
* @throws {Error} If output is set to "speaker" (not supported on DS4)
|
||||
*/
|
||||
async setSpeakerTone(output = "speaker") {
|
||||
// Throw error if trying to use the built-in speaker
|
||||
if (output === "speaker") {
|
||||
throw new Error("DS4 does not support playing sound through the built-in speaker. Only 'headphones' output is supported.");
|
||||
}
|
||||
|
||||
// DS4 speaker works as a standard USB audio device (class-compliant)
|
||||
// It cannot be controlled through HID output reports like DS5
|
||||
|
||||
// Create Web Audio Context
|
||||
const audioContext = new (window.AudioContext || window.webkitAudioContext)();
|
||||
if (audioContext.state === 'suspended') {
|
||||
await audioContext.resume();
|
||||
}
|
||||
|
||||
// Try to get microphone permission to see device labels
|
||||
let hasPermission = false;
|
||||
try {
|
||||
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
|
||||
stream.getTracks().forEach(track => track.stop());
|
||||
hasPermission = true;
|
||||
} catch (error) {
|
||||
throw new Error('Microphone permission required to enumerate audio devices', { cause: error });
|
||||
}
|
||||
|
||||
// Check if we have access to audio devices and setSinkId support
|
||||
if (navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {
|
||||
const devices = await navigator.mediaDevices.enumerateDevices();
|
||||
const audioOutputs = devices.filter(device => device.kind === 'audiooutput');
|
||||
|
||||
// Look for DualShock 4 audio device
|
||||
const ds4AudioDevice = audioOutputs.find(device =>
|
||||
device.label && /wireless controller|dualshock|sony/i.test(device.label)
|
||||
);
|
||||
|
||||
// Create audio elements for tone generation
|
||||
const oscillator = audioContext.createOscillator();
|
||||
oscillator.type = 'sine';
|
||||
oscillator.frequency.setValueAtTime(880, audioContext.currentTime);
|
||||
|
||||
// Configure volume envelope (fade in/out to avoid clicks)
|
||||
// Use max volume for better audibility
|
||||
const gainNode = audioContext.createGain();
|
||||
gainNode.gain.setValueAtTime(0, audioContext.currentTime);
|
||||
gainNode.gain.linearRampToValueAtTime(1, audioContext.currentTime + 0.05);
|
||||
gainNode.gain.linearRampToValueAtTime(1, audioContext.currentTime + 0.5);
|
||||
gainNode.gain.linearRampToValueAtTime(0, audioContext.currentTime + 0.25);
|
||||
|
||||
// Connect audio graph
|
||||
oscillator.connect(gainNode);
|
||||
|
||||
let audioElement = null;
|
||||
|
||||
// If DS4 audio device is found and setSinkId is supported, route to it
|
||||
if (ds4AudioDevice && typeof HTMLMediaElement !== 'undefined' && HTMLMediaElement.prototype.setSinkId) {
|
||||
try {
|
||||
// Create a MediaStreamDestination to capture the audio
|
||||
const streamDestination = audioContext.createMediaStreamDestination();
|
||||
gainNode.connect(streamDestination);
|
||||
|
||||
// Create an audio element to play the stream
|
||||
audioElement = new Audio();
|
||||
audioElement.autoplay = false;
|
||||
audioElement.volume = 1.0; // Max volume
|
||||
|
||||
// Set the audio output to the DS4 speaker BEFORE setting srcObject
|
||||
await audioElement.setSinkId(ds4AudioDevice.deviceId);
|
||||
audioElement.srcObject = streamDestination.stream;
|
||||
|
||||
// Play the audio element FIRST
|
||||
await audioElement.play();
|
||||
|
||||
// THEN start the oscillator (so the stream is already being consumed)
|
||||
oscillator.start();
|
||||
oscillator.stop(audioContext.currentTime + 0.8);
|
||||
} catch (error) {
|
||||
throw new Error('Could not set DS4 as audio sink', { cause: error });
|
||||
}
|
||||
}
|
||||
|
||||
// Clean up audio context and element after tone completes
|
||||
setTimeout(() => {
|
||||
if (audioElement) {
|
||||
audioElement.pause();
|
||||
audioElement.srcObject = null;
|
||||
}
|
||||
if (audioContext.state !== 'closed') {
|
||||
audioContext.close();
|
||||
}
|
||||
}, 1000);
|
||||
} else {
|
||||
throw new Error('WebRTC getUserMedia API or mediaDevices enumeration not available.');
|
||||
}
|
||||
}
|
||||
|
||||
getNumberOfSticks() {
|
||||
return 2;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the list of supported quick tests for DS4 controller
|
||||
* DS4 does not support adaptive triggers, speaker, or microphone
|
||||
* @returns {Array<string>} Array of supported test types
|
||||
*/
|
||||
getSupportedQuickTests() {
|
||||
return ['usb', 'buttons', 'haptic', 'lights', 'headphone'];
|
||||
}
|
||||
}
|
||||
|
||||
export default DS4Controller;
|
||||
897
js/controllers/ds5-controller.js
Normal file
@@ -0,0 +1,897 @@
|
||||
'use strict';
|
||||
|
||||
import BaseController from './base-controller.js';
|
||||
import {
|
||||
sleep,
|
||||
buf2hex,
|
||||
dec2hex,
|
||||
dec2hex32,
|
||||
dec2hex8,
|
||||
format_mac_from_view,
|
||||
reverse_str,
|
||||
la,
|
||||
} from '../utils.js';
|
||||
import { l } from '../translations.js';
|
||||
|
||||
// DS5 Button mapping configuration
|
||||
const DS5_BUTTON_MAP = [
|
||||
{ name: 'up', byte: 7, mask: 0x0 }, // Dpad handled separately
|
||||
{ name: 'right', byte: 7, mask: 0x1 },
|
||||
{ name: 'down', byte: 7, mask: 0x2 },
|
||||
{ name: 'left', byte: 7, mask: 0x3 },
|
||||
{ name: 'square', byte: 7, mask: 0x10, svg: 'Square' },
|
||||
{ name: 'cross', byte: 7, mask: 0x20, svg: 'Cross' },
|
||||
{ name: 'circle', byte: 7, mask: 0x40, svg: 'Circle' },
|
||||
{ name: 'triangle', byte: 7, mask: 0x80, svg: 'Triangle' },
|
||||
{ name: 'l1', byte: 8, mask: 0x01, svg: 'L1' },
|
||||
{ name: 'l2', byte: 4, mask: 0xff }, // analog handled separately
|
||||
{ name: 'r1', byte: 8, mask: 0x02, svg: 'R1' },
|
||||
{ name: 'r2', byte: 5, mask: 0xff }, // analog handled separately
|
||||
{ name: 'create', byte: 8, mask: 0x10, svg: 'Create' },
|
||||
{ name: 'options', byte: 8, mask: 0x20, svg: 'Options' },
|
||||
{ name: 'l3', byte: 8, mask: 0x40, svg: 'L3' },
|
||||
{ name: 'r3', byte: 8, mask: 0x80, svg: 'R3' },
|
||||
{ name: 'ps', byte: 9, mask: 0x01, svg: 'PS' },
|
||||
{ name: 'touchpad', byte: 9, mask: 0x02, svg: 'Trackpad' },
|
||||
{ name: 'mute', byte: 9, mask: 0x04, svg: 'Mute' },
|
||||
];
|
||||
|
||||
// DS5 Input processing configuration
|
||||
const DS5_INPUT_CONFIG = {
|
||||
buttonMap: DS5_BUTTON_MAP,
|
||||
dpadByte: 7,
|
||||
l2AnalogByte: 4,
|
||||
r2AnalogByte: 5,
|
||||
touchpadOffset: 32,
|
||||
};
|
||||
|
||||
// DS5 Adaptive Trigger Effect Modes
|
||||
const DS5_TRIGGER_EFFECT_MODE = {
|
||||
OFF: 0x00, // No effect
|
||||
RESISTANCE: 0x01, // Constant resistance
|
||||
TRIGGER: 0x02, // Single-trigger effect with release
|
||||
AUTO_TRIGGER: 0x06, // Automatic trigger with vibration
|
||||
};
|
||||
|
||||
// DS5 Output Report Constants
|
||||
const DS5_OUTPUT_REPORT = {
|
||||
USB_REPORT_ID: 0x02,
|
||||
BT_REPORT_ID: 0x31,
|
||||
}
|
||||
|
||||
const DS5_VALID_FLAG0 = {
|
||||
RIGHT_VIBRATION: 0x01, // Bit 0 for right vibration motor
|
||||
LEFT_VIBRATION: 0x02, // Bit 1 for left vibration motor
|
||||
LEFT_TRIGGER: 0x04, // Bit 2 for left adaptive trigger
|
||||
RIGHT_TRIGGER: 0x08, // Bit 3 for right adaptive trigger
|
||||
HEADPHONE_VOLUME: 0x10, // Bit 4 for headphone volume control
|
||||
SPEAKER_VOLUME: 0x20, // Bit 5 for speaker volume control
|
||||
MIC_VOLUME: 0x40, // Bit 6 for microphone volume control
|
||||
AUDIO_CONTROL: 0x80, // Bit 7 for audio control
|
||||
};
|
||||
|
||||
const DS5_VALID_FLAG1 = {
|
||||
MUTE_LED: 0x01, // Bit 0 for mute LED control
|
||||
POWER_SAVE_MUTE: 0x02, // Bit 1 for power-save mute control
|
||||
LIGHTBAR_COLOR: 0x04, // Bit 2 for lightbar color control
|
||||
RESERVED_BIT_3: 0x08, // Bit 3 (reserved)
|
||||
PLAYER_INDICATOR: 0x10, // Bit 4 for player indicator LED control
|
||||
LED_BRIGHTNESS: 0x20, // Bit 6 for LED brightness control
|
||||
LIGHTBAR_SETUP: 0x40, // Bit 6 for lightbar setup control
|
||||
RESERVED_BIT_7: 0x80, // Bit 7 (reserved)
|
||||
}
|
||||
|
||||
const DS5_VALID_FLAG2 = {
|
||||
LED_BRIGHTNESS: 0x01, // Bit 0 for LED brightness control
|
||||
LIGHTBAR_SETUP: 0x02, // Bit 1 for lightbar setup control
|
||||
};
|
||||
|
||||
// Basic DS5 Output Structure for adaptive trigger control
|
||||
class DS5OutputStruct {
|
||||
constructor(currentState = null) {
|
||||
// Create a 47-byte buffer for DS5 output report (USB)
|
||||
this.buffer = new ArrayBuffer(47);
|
||||
this.view = new DataView(this.buffer);
|
||||
|
||||
// Control flags
|
||||
this.validFlag0 = currentState.validFlag0 || 0;
|
||||
this.validFlag1 = currentState.validFlag1 || 0;
|
||||
this.validFlag2 = currentState.validFlag2 || 0;
|
||||
|
||||
// Vibration motors
|
||||
this.bcVibrationRight = currentState.bcVibrationRight || 0;
|
||||
this.bcVibrationLeft = currentState.bcVibrationLeft || 0;
|
||||
|
||||
// Audio control
|
||||
this.headphoneVolume = currentState.headphoneVolume || 0;
|
||||
this.speakerVolume = currentState.speakerVolume || 0;
|
||||
this.micVolume = currentState.micVolume || 0;
|
||||
this.audioControl = currentState.audioControl || 0;
|
||||
this.audioControl2 = currentState.audioControl2 || 0;
|
||||
|
||||
// LED and indicator control
|
||||
this.muteLedControl = currentState.muteLedControl || 0;
|
||||
this.powerSaveMuteControl = currentState.powerSaveMuteControl || 0;
|
||||
this.lightbarSetup = currentState.lightbarSetup || 0;
|
||||
this.ledBrightness = currentState.ledBrightness || 0;
|
||||
this.playerIndicator = currentState.playerIndicator || 0;
|
||||
this.ledCRed = currentState.ledCRed || 0;
|
||||
this.ledCGreen = currentState.ledCGreen || 0;
|
||||
this.ledCBlue = currentState.ledCBlue || 0;
|
||||
|
||||
// Adaptive trigger parameters
|
||||
this.adaptiveTriggerLeftMode = currentState.adaptiveTriggerLeftMode || 0;
|
||||
this.adaptiveTriggerLeftParam0 = currentState.adaptiveTriggerLeftParam0 || 0;
|
||||
this.adaptiveTriggerLeftParam1 = currentState.adaptiveTriggerLeftParam1 || 0;
|
||||
this.adaptiveTriggerLeftParam2 = currentState.adaptiveTriggerLeftParam2 || 0;
|
||||
|
||||
this.adaptiveTriggerRightMode = currentState.adaptiveTriggerRightMode || 0;
|
||||
this.adaptiveTriggerRightParam0 = currentState.adaptiveTriggerRightParam0 || 0;
|
||||
this.adaptiveTriggerRightParam1 = currentState.adaptiveTriggerRightParam1 || 0;
|
||||
this.adaptiveTriggerRightParam2 = currentState.adaptiveTriggerRightParam2 || 0;
|
||||
|
||||
// Haptic feedback
|
||||
this.hapticVolume = currentState.hapticVolume || 0;
|
||||
}
|
||||
|
||||
// Pack the data into the output buffer
|
||||
pack() {
|
||||
// Based on DS5 output report structure from HID descriptor
|
||||
// Byte 0-1: Control flags (16-bit little endian)
|
||||
this.view.setUint16(0, (this.validFlag1 << 8) | this.validFlag0, true);
|
||||
|
||||
// Byte 2-3: Vibration motors
|
||||
this.view.setUint8(2, this.bcVibrationRight);
|
||||
this.view.setUint8(3, this.bcVibrationLeft);
|
||||
|
||||
// Bytes 4-7: Audio control (reserved for now)
|
||||
this.view.setUint8(4, this.headphoneVolume);
|
||||
this.view.setUint8(5, this.speakerVolume);
|
||||
this.view.setUint8(6, this.micVolume);
|
||||
this.view.setUint8(7, this.audioControl);
|
||||
|
||||
// Byte 8: Mute LED control
|
||||
this.view.setUint8(8, this.muteLedControl);
|
||||
|
||||
// Byte 9: Reserved
|
||||
this.view.setUint8(9, 0);
|
||||
|
||||
// Bytes 10-20: Right adaptive trigger
|
||||
this.view.setUint8(10, this.adaptiveTriggerRightMode);
|
||||
this.view.setUint8(11, this.adaptiveTriggerRightParam0);
|
||||
this.view.setUint8(12, this.adaptiveTriggerRightParam1);
|
||||
this.view.setUint8(13, this.adaptiveTriggerRightParam2);
|
||||
// Additional trigger parameters (bytes 14-20 reserved for extended params)
|
||||
for (let i = 14; i <= 20; i++) {
|
||||
this.view.setUint8(i, 0);
|
||||
}
|
||||
|
||||
// Bytes 21-31: Left adaptive trigger
|
||||
this.view.setUint8(21, this.adaptiveTriggerLeftMode);
|
||||
this.view.setUint8(22, this.adaptiveTriggerLeftParam0);
|
||||
this.view.setUint8(23, this.adaptiveTriggerLeftParam1);
|
||||
this.view.setUint8(24, this.adaptiveTriggerLeftParam2);
|
||||
// Additional trigger parameters (bytes 25-31 reserved for extended params)
|
||||
for (let i = 25; i <= 31; i++) {
|
||||
this.view.setUint8(i, 0);
|
||||
}
|
||||
|
||||
// Bytes 32-42: Reserved
|
||||
for (let i = 32; i <= 42; i++) {
|
||||
this.view.setUint8(i, 0);
|
||||
}
|
||||
|
||||
// Byte 43: Player LED indicator
|
||||
this.view.setUint8(43, this.playerIndicator);
|
||||
|
||||
// Bytes 44-46: Lightbar RGB
|
||||
this.view.setUint8(44, this.ledCRed);
|
||||
this.view.setUint8(45, this.ledCGreen);
|
||||
this.view.setUint8(46, this.ledCBlue);
|
||||
|
||||
return this.buffer;
|
||||
}
|
||||
}
|
||||
|
||||
function ds5_color(serialNumber) {
|
||||
// Color is obtained by the 5th and 6th characters of the serial number
|
||||
// e.g. A12305xxx0000000 -> '05' -> Starlight Blue
|
||||
const colorMap = {
|
||||
'00': 'White',
|
||||
'01': 'Midnight Black',
|
||||
'02': 'Cosmic Red',
|
||||
'03': 'Nova Pink',
|
||||
'04': 'Galactic Purple',
|
||||
'05': 'Starlight Blue',
|
||||
'06': 'Grey Camouflage',
|
||||
'07': 'Volcanic Red',
|
||||
'08': 'Sterling Silver',
|
||||
'09': 'Cobalt Blue',
|
||||
'10': 'Chroma Teal',
|
||||
'11': 'Chroma Indigo',
|
||||
'12': 'Chroma Pearl',
|
||||
'30': '30th Anniversary',
|
||||
'Z1': 'God of War Ragnarok',
|
||||
'Z2': 'Spider-Man 2',
|
||||
'Z3': 'Astro Bot',
|
||||
'Z4': 'Fortnite',
|
||||
'Z6': 'The Last of Us',
|
||||
'ZA': 'God of War 20th Anniversary',
|
||||
'ZB': 'Icon Blue Limited Edition',
|
||||
};
|
||||
|
||||
const colorCode = serialNumber.slice(4, 6);
|
||||
const colorName = colorMap[colorCode] || 'Unknown';
|
||||
return colorName;
|
||||
}
|
||||
|
||||
/**
|
||||
* DualSense (DS5) Controller implementation
|
||||
*/
|
||||
class DS5Controller extends BaseController {
|
||||
constructor(device) {
|
||||
super(device);
|
||||
this.model = "DS5";
|
||||
this.finetuneMaxValue = 65535; // 16-bit max value for DS5
|
||||
|
||||
// Initialize current output state to track controller settings
|
||||
this.currentOutputState = {
|
||||
validFlag0: 0,
|
||||
validFlag1: 0,
|
||||
validFlag2: 0,
|
||||
bcVibrationRight: 0,
|
||||
bcVibrationLeft: 0,
|
||||
headphoneVolume: 0,
|
||||
speakerVolume: 0,
|
||||
micVolume: 0,
|
||||
audioControl: 0,
|
||||
audioControl2: 0,
|
||||
muteLedControl: 0,
|
||||
powerSaveMuteControl: 0,
|
||||
lightbarSetup: 0,
|
||||
ledBrightness: 0,
|
||||
playerIndicator: 0,
|
||||
ledCRed: 0,
|
||||
ledCGreen: 0,
|
||||
ledCBlue: 0,
|
||||
adaptiveTriggerLeftMode: 0,
|
||||
adaptiveTriggerLeftParam0: 0,
|
||||
adaptiveTriggerLeftParam1: 0,
|
||||
adaptiveTriggerLeftParam2: 0,
|
||||
adaptiveTriggerRightMode: 0,
|
||||
adaptiveTriggerRightParam0: 0,
|
||||
adaptiveTriggerRightParam1: 0,
|
||||
adaptiveTriggerRightParam2: 0,
|
||||
hapticVolume: 0
|
||||
};
|
||||
}
|
||||
|
||||
getInputConfig() {
|
||||
return DS5_INPUT_CONFIG;
|
||||
}
|
||||
|
||||
async getSerialNumber() {
|
||||
return await this.getSystemInfo(1, 19, 17);
|
||||
}
|
||||
|
||||
async getInfo() {
|
||||
return this._getInfo(false);
|
||||
}
|
||||
|
||||
async _getInfo(is_edge) {
|
||||
// Device-only: collect info and return a common structure; do not touch the DOM
|
||||
try {
|
||||
console.log("Fetching DS5 info...");
|
||||
const view = await this.receiveFeatureReport(0x20);
|
||||
console.log("Got DS5 info report:", buf2hex(view.buffer));
|
||||
const cmd = view.getUint8(0, true);
|
||||
if(cmd != 0x20 || view.buffer.byteLength != 64)
|
||||
return { ok: false, error: new Error("Invalid response for ds5_info") };
|
||||
|
||||
const build_date = new TextDecoder().decode(view.buffer.slice(1, 1+11));
|
||||
const build_time = new TextDecoder().decode(view.buffer.slice(12, 20));
|
||||
|
||||
const fwtype = view.getUint16(20, true);
|
||||
const swseries = view.getUint16(22, true);
|
||||
const hwinfo = view.getUint32(24, true);
|
||||
const fwversion = view.getUint32(28, true);
|
||||
|
||||
const updversion = view.getUint16(44, true);
|
||||
const unk = view.getUint8(46, true);
|
||||
|
||||
const fwversion1 = view.getUint32(48, true);
|
||||
const fwversion2 = view.getUint32(52, true);
|
||||
const fwversion3 = view.getUint32(56, true);
|
||||
|
||||
const serial_number = await this.getSystemInfo(1, 19, 17);
|
||||
const color = ds5_color(serial_number);
|
||||
const infoItems = [
|
||||
{ key: l("Serial Number"), value: serial_number, cat: "hw", copyable: true },
|
||||
{ key: l("MCU Unique ID"), value: await this.getSystemInfo(1, 9, 9, false), cat: "hw", isExtra: true, copyable: true },
|
||||
{ key: l("PCBA ID"), value: reverse_str(await this.getSystemInfo(1, 17, 14)), cat: "hw", isExtra: true },
|
||||
{ key: l("Battery Barcode"), value: await this.getSystemInfo(1, 24, 23), cat: "hw", isExtra: true, copyable: true },
|
||||
{ key: l("VCM Left Barcode"), value: await this.getSystemInfo(1, 26, 16), cat: "hw", isExtra: true, copyable: true },
|
||||
{ key: l("VCM Right Barcode"), value: await this.getSystemInfo(1, 28, 16), cat: "hw", isExtra: true, copyable: true },
|
||||
|
||||
{ key: l("Color"), value: l(color), cat: "hw", addInfoIcon: 'color', copyable: true },
|
||||
|
||||
...(is_edge ? [] : [{ key: l("Board Model"), value: this.hwToBoardModel(hwinfo), cat: "hw", addInfoIcon: 'board', copyable: true }]),
|
||||
|
||||
{ key: l("FW Build Date"), value: build_date + " " + build_time, cat: "fw" },
|
||||
{ key: l("FW Type"), value: "0x" + dec2hex(fwtype), cat: "fw", isExtra: true },
|
||||
{ key: l("FW Series"), value: "0x" + dec2hex(swseries), cat: "fw", isExtra: true },
|
||||
{ key: l("HW Model"), value: "0x" + dec2hex32(hwinfo), cat: "hw", isExtra: true },
|
||||
{ key: l("FW Version"), value: "0x" + dec2hex32(fwversion), cat: "fw", isExtra: true },
|
||||
{ key: l("FW Update"), value: "0x" + dec2hex(updversion), cat: "fw", isExtra: true },
|
||||
{ key: l("FW Update Info"), value: "0x" + dec2hex8(unk), cat: "fw", isExtra: true },
|
||||
{ key: l("SBL FW Version"), value: "0x" + dec2hex32(fwversion1), cat: "fw", isExtra: true },
|
||||
{ key: l("Venom FW Version"), value: "0x" + dec2hex32(fwversion2), cat: "fw", isExtra: true },
|
||||
{ key: l("Spider FW Version"), value: "0x" + dec2hex32(fwversion3), cat: "fw", isExtra: true },
|
||||
|
||||
{ key: l("Touchpad ID"), value: await this.getSystemInfo(5, 2, 8, false), cat: "hw", isExtra: true, copyable: true },
|
||||
{ key: l("Touchpad FW Version"), value: await this.getSystemInfo(5, 4, 8, false), cat: "fw", isExtra: true },
|
||||
];
|
||||
|
||||
const old_controller = build_date.search(/ 2020| 2021/);
|
||||
let disable_bits = 0;
|
||||
if(old_controller != -1) {
|
||||
la("ds5_info_error", {"r": "old"})
|
||||
disable_bits |= 2; // 2: outdated firmware
|
||||
}
|
||||
|
||||
const nv = await this.queryNvStatus();
|
||||
const bd_addr = await this.getBdAddr();
|
||||
infoItems.push({ key: l("Bluetooth Address"), value: bd_addr, cat: "hw", isExtra: true });
|
||||
|
||||
const pending_reboot = (nv?.status === 'pending_reboot');
|
||||
|
||||
return { ok: true, infoItems, nv, disable_bits, pending_reboot };
|
||||
} catch(error) {
|
||||
la("ds5_info_error", {"r": error})
|
||||
return { ok: false, error, disable_bits: 1 };
|
||||
}
|
||||
}
|
||||
|
||||
async flash(progressCallback = null) {
|
||||
la("ds5_flash");
|
||||
try {
|
||||
await this.nvsUnlock();
|
||||
const lockRes = await this.nvsLock();
|
||||
if(!lockRes.ok) throw (lockRes.error || new Error("NVS lock failed"));
|
||||
|
||||
return { success: true, message: l("Changes saved successfully") };
|
||||
} catch(error) {
|
||||
throw new Error(l("Error while saving changes"), { cause: error });
|
||||
}
|
||||
}
|
||||
|
||||
async reset() {
|
||||
la("ds5_reset");
|
||||
try {
|
||||
await this.sendFeatureReport(0x80, [1,1]);
|
||||
} catch(error) {
|
||||
}
|
||||
}
|
||||
|
||||
async nvsLock() {
|
||||
// la("ds5_nvlock");
|
||||
try {
|
||||
await this.sendFeatureReport(0x80, [3,1]);
|
||||
await this.receiveFeatureReport(0x81);
|
||||
return { ok: true };
|
||||
} catch(error) {
|
||||
return { ok: false, error };
|
||||
}
|
||||
}
|
||||
|
||||
async nvsUnlock() {
|
||||
// la("ds5_nvunlock");
|
||||
try {
|
||||
await this.sendFeatureReport(0x80, [3,2, 101, 50, 64, 12]);
|
||||
const data = await this.receiveFeatureReport(0x81);
|
||||
} catch(error) {
|
||||
await sleep(500);
|
||||
throw new Error(l("NVS Unlock failed"), { cause: error });
|
||||
}
|
||||
}
|
||||
|
||||
async getBdAddr() {
|
||||
await this.sendFeatureReport(0x80, [9,2]);
|
||||
const data = await this.receiveFeatureReport(0x81);
|
||||
return format_mac_from_view(data, 4);
|
||||
}
|
||||
|
||||
async getSystemInfo(base, num, length, decode = true) {
|
||||
await this.sendFeatureReport(128, [base,num])
|
||||
const pcba_id = await this.receiveFeatureReport(129);
|
||||
if(pcba_id.getUint8(1) != base || pcba_id.getUint8(2) != num || pcba_id.getUint8(3) != 2) {
|
||||
return l("error");
|
||||
}
|
||||
if(decode)
|
||||
return new TextDecoder().decode(pcba_id.buffer.slice(4, 4+length));
|
||||
|
||||
return buf2hex(pcba_id.buffer.slice(4, 4+length));
|
||||
}
|
||||
|
||||
async calibrateSticksBegin() {
|
||||
la("ds5_calibrate_sticks_begin");
|
||||
try {
|
||||
// Begin
|
||||
await this.sendFeatureReport(0x82, [1,1,1]);
|
||||
|
||||
// Assert
|
||||
const data = await this.receiveFeatureReport(0x83);
|
||||
if(data.getUint32(0, false) != 0x83010101) {
|
||||
const d1 = dec2hex32(data.getUint32(0, false));
|
||||
la("ds5_calibrate_sticks_begin_failed", {"d1": d1});
|
||||
throw new Error(`Stick center calibration begin failed: ${d1}`);
|
||||
}
|
||||
return { ok: true };
|
||||
} catch(error) {
|
||||
la("ds5_calibrate_sticks_begin_failed", {"r": error});
|
||||
return { ok: false, error };
|
||||
}
|
||||
}
|
||||
|
||||
async calibrateSticksSample() {
|
||||
la("ds5_calibrate_sticks_sample");
|
||||
try {
|
||||
// Sample
|
||||
await this.sendFeatureReport(0x82, [3,1,1]);
|
||||
|
||||
// Assert
|
||||
const data = await this.receiveFeatureReport(0x83);
|
||||
if(data.getUint32(0, false) != 0x83010101) {
|
||||
const d1 = dec2hex32(data.getUint32(0, false));
|
||||
la("ds5_calibrate_sticks_sample_failed", {"d1": d1});
|
||||
throw new Error(`Stick center calibration sample failed: ${d1}`);
|
||||
}
|
||||
return { ok: true };
|
||||
} catch(error) {
|
||||
la("ds5_calibrate_sticks_sample_failed", {"r": error});
|
||||
return { ok: false, error };
|
||||
}
|
||||
}
|
||||
|
||||
async calibrateSticksEnd() {
|
||||
la("ds5_calibrate_sticks_end");
|
||||
try {
|
||||
// Write
|
||||
await this.sendFeatureReport(0x82, [2,1,1]);
|
||||
|
||||
const data = await this.receiveFeatureReport(0x83);
|
||||
|
||||
if(data.getUint32(0, false) != 0x83010102) {
|
||||
const d1 = dec2hex32(data.getUint32(0, false));
|
||||
la("ds5_calibrate_sticks_failed", {"s": 3, "d1": d1});
|
||||
throw new Error(`Stick center calibration end failed: ${d1}`);
|
||||
}
|
||||
|
||||
return { ok: true };
|
||||
} catch(error) {
|
||||
la("ds5_calibrate_sticks_end_failed", {"r": error});
|
||||
return { ok: false, error };
|
||||
}
|
||||
}
|
||||
|
||||
async calibrateRangeBegin() {
|
||||
la("ds5_calibrate_range_begin");
|
||||
try {
|
||||
// Begin
|
||||
await this.sendFeatureReport(0x82, [1,1,2]);
|
||||
|
||||
// Assert
|
||||
const data = await this.receiveFeatureReport(0x83);
|
||||
if(data.getUint32(0, false) != 0x83010201) {
|
||||
const d1 = dec2hex32(data.getUint32(0, false));
|
||||
la("ds5_calibrate_range_begin_failed", {"d1": d1});
|
||||
throw new Error(`Stick range calibration begin failed: ${d1}`);
|
||||
}
|
||||
return { ok: true };
|
||||
} catch(error) {
|
||||
la("ds5_calibrate_range_begin_failed", {"r": error});
|
||||
return { ok: false, error };
|
||||
}
|
||||
}
|
||||
|
||||
async calibrateRangeEnd() {
|
||||
la("ds5_calibrate_range_end");
|
||||
try {
|
||||
// Write
|
||||
await this.sendFeatureReport(0x82, [2,1,2]);
|
||||
|
||||
// Assert
|
||||
const data = await this.receiveFeatureReport(0x83);
|
||||
|
||||
if(data.getUint32(0, false) != 0x83010202) {
|
||||
const d1 = dec2hex32(data.getUint32(0, false));
|
||||
la("ds5_calibrate_range_end_failed", {"d1": d1});
|
||||
throw new Error(`Stick range calibration end failed: ${d1}`);
|
||||
}
|
||||
|
||||
return { ok: true };
|
||||
} catch(error) {
|
||||
la("ds5_calibrate_range_end_failed", {"r": error});
|
||||
return { ok: false, error };
|
||||
}
|
||||
}
|
||||
|
||||
async queryNvStatus() {
|
||||
try {
|
||||
await this.sendFeatureReport(0x80, [3,3]);
|
||||
const data = await this.receiveFeatureReport(0x81);
|
||||
const ret = data.getUint32(1, false);
|
||||
if (ret === 0x15010100) {
|
||||
return { device: 'ds5', status: 'pending_reboot', locked: null, code: 4, raw: ret };
|
||||
}
|
||||
if (ret === 0x03030201) {
|
||||
return { device: 'ds5', status: 'locked', locked: true, mode: 'temporary', code: 1, raw: ret };
|
||||
}
|
||||
if (ret === 0x03030200) {
|
||||
return { device: 'ds5', status: 'unlocked', locked: false, mode: 'permanent', code: 0, raw: ret };
|
||||
}
|
||||
if (ret === 1 || ret === 2) {
|
||||
return { device: 'ds5', status: 'unknown', locked: null, code: 2, raw: ret };
|
||||
}
|
||||
return { device: 'ds5', status: 'unknown', locked: null, code: ret, raw: ret };
|
||||
} catch (error) {
|
||||
return { device: 'ds5', status: 'error', locked: null, code: 2, error };
|
||||
}
|
||||
}
|
||||
|
||||
hwToBoardModel(hw_ver) {
|
||||
const a = (hw_ver >> 8) & 0xff;
|
||||
if(a == 0x03) return "BDM-010";
|
||||
if(a == 0x04) return "BDM-020";
|
||||
if(a == 0x05) return "BDM-030";
|
||||
if(a == 0x06) return "BDM-040";
|
||||
if(a == 0x07 || a == 0x08) return "BDM-050";
|
||||
// TODO 0x09..0x10?
|
||||
if(a == 0x11) return "BDM-060M";
|
||||
// TODO 0x12?
|
||||
if(a == 0x13) return "BDM-060X";
|
||||
return l("Unknown");
|
||||
}
|
||||
|
||||
async getInMemoryModuleData() {
|
||||
// DualSense
|
||||
await this.sendFeatureReport(0x80, [12, 2]);
|
||||
await sleep(100);
|
||||
const data = await this.receiveFeatureReport(0x81);
|
||||
const cmd = data.getUint8(0, true);
|
||||
const [p1, p2, p3] = [1, 2, 3].map(i => data.getUint8(i, true));
|
||||
|
||||
if(cmd != 129 || p1 != 12 || (p2 != 2 && p2 != 4) || p3 != 2)
|
||||
return null;
|
||||
|
||||
return Array.from({ length: 12 }, (_, i) => data.getUint16(4 + i * 2, true));
|
||||
}
|
||||
|
||||
async writeFinetuneData(data) {
|
||||
const pkg = data.reduce((acc, val) => acc.concat([val & 0xff, val >> 8]), [12, 1]);
|
||||
await this.sendFeatureReport(0x80, pkg);
|
||||
}
|
||||
|
||||
/**
|
||||
* Send output report to the DS5 controller
|
||||
* @param {ArrayBuffer} data - The output report data
|
||||
*/
|
||||
async sendOutputReport(data, reason = "") {
|
||||
if (!this.device?.opened) {
|
||||
throw new Error('Device is not opened');
|
||||
}
|
||||
try {
|
||||
console.log(`Sending output report${ reason ? ` to ${reason}` : '' }:`, DS5_OUTPUT_REPORT.USB_REPORT_ID, buf2hex(data));
|
||||
await this.device.sendReport(DS5_OUTPUT_REPORT.USB_REPORT_ID, new Uint8Array(data));
|
||||
} catch (error) {
|
||||
throw new Error(`Failed to send output report: ${error.message}`);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the current output state with values from an OutputStruct
|
||||
* @param {DS5OutputStruct} outputStruct - The output structure to copy state from
|
||||
*/
|
||||
updateCurrentOutputState(outputStruct) {
|
||||
this.currentOutputState = { ...outputStruct };
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a copy of the current output state
|
||||
* @returns {Object} A copy of the current output state
|
||||
*/
|
||||
getCurrentOutputState() {
|
||||
return { ...this.currentOutputState };
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize the current output state when the controller is first connected.
|
||||
* Since DS5 controllers don't provide a way to read the current output state,
|
||||
* this method sets up reasonable defaults and attempts to detect any current settings.
|
||||
*/
|
||||
async initializeCurrentOutputState() {
|
||||
try {
|
||||
// Reset all output state to known defaults
|
||||
this.currentOutputState = {
|
||||
...this.getCurrentOutputState(),
|
||||
validFlag1: 0b1111_0111,
|
||||
ledCRed: 0,
|
||||
ledCGreen: 0,
|
||||
ledCBlue: 255,
|
||||
};
|
||||
|
||||
// Send a "reset" output report to ensure the controller is in a known state
|
||||
// This will turn off any existing effects and set the controller to defaults
|
||||
const resetOutputStruct = new DS5OutputStruct(this.currentOutputState);
|
||||
await this.sendOutputReport(resetOutputStruct.pack(), 'init default states');
|
||||
|
||||
// Update our state to reflect what we just sent
|
||||
this.updateCurrentOutputState(resetOutputStruct);
|
||||
} catch (error) {
|
||||
console.warn("Failed to initialize DS5 output state:", error);
|
||||
// Even if the reset fails, we still have the default state initialized
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set left adaptive trigger to single-trigger mode
|
||||
*/
|
||||
async setAdaptiveTrigger(left, right) {
|
||||
try {
|
||||
const modeMap = {
|
||||
'off': DS5_TRIGGER_EFFECT_MODE.OFF,
|
||||
'single': DS5_TRIGGER_EFFECT_MODE.TRIGGER,
|
||||
'auto': DS5_TRIGGER_EFFECT_MODE.AUTO_TRIGGER,
|
||||
'resistance': DS5_TRIGGER_EFFECT_MODE.RESISTANCE,
|
||||
}
|
||||
|
||||
// Create output structure with current controller state
|
||||
const { validFlag0 } = this.currentOutputState;
|
||||
const outputStruct = new DS5OutputStruct({
|
||||
...this.currentOutputState,
|
||||
adaptiveTriggerLeftMode: modeMap[left.mode],
|
||||
adaptiveTriggerLeftParam0: left.start,
|
||||
adaptiveTriggerLeftParam1: left.end,
|
||||
adaptiveTriggerLeftParam2: left.force,
|
||||
|
||||
adaptiveTriggerRightMode: modeMap[right.mode],
|
||||
adaptiveTriggerRightParam0: right.start,
|
||||
adaptiveTriggerRightParam1: right.end,
|
||||
adaptiveTriggerRightParam2: right.force,
|
||||
|
||||
validFlag0: validFlag0 | DS5_VALID_FLAG0.LEFT_TRIGGER | DS5_VALID_FLAG0.RIGHT_TRIGGER,
|
||||
});
|
||||
await this.sendOutputReport(outputStruct.pack(), 'set adaptive trigger mode');
|
||||
outputStruct.validFlag0 &= ~(DS5_VALID_FLAG0.LEFT_TRIGGER | DS5_VALID_FLAG0.RIGHT_TRIGGER);
|
||||
|
||||
// Update current state to reflect the changes
|
||||
this.updateCurrentOutputState(outputStruct);
|
||||
|
||||
return { success: true };
|
||||
} catch (error) {
|
||||
throw new Error("Failed to set left adaptive trigger mode", { cause: error });
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set vibration motors for haptic feedback
|
||||
* @param {number} heavyLeft - Left motor intensity (0-255)
|
||||
* @param {number} lightRight - Right motor intensity (0-255)
|
||||
*/
|
||||
async setVibration(heavyLeft = 0, lightRight = 0) {
|
||||
try {
|
||||
const { validFlag0 } = this.currentOutputState;
|
||||
const outputStruct = new DS5OutputStruct({
|
||||
...this.currentOutputState,
|
||||
bcVibrationLeft: Math.max(0, Math.min(255, heavyLeft)),
|
||||
bcVibrationRight: Math.max(0, Math.min(255, lightRight)),
|
||||
validFlag0: validFlag0 | DS5_VALID_FLAG0.LEFT_VIBRATION | DS5_VALID_FLAG0.RIGHT_VIBRATION, // Update both vibration motors
|
||||
});
|
||||
await this.sendOutputReport(outputStruct.pack(), 'set vibration');
|
||||
outputStruct.validFlag0 &= ~(DS5_VALID_FLAG0.LEFT_VIBRATION | DS5_VALID_FLAG0.RIGHT_VIBRATION);
|
||||
|
||||
// Update current state to reflect the changes
|
||||
this.updateCurrentOutputState(outputStruct);
|
||||
} catch (error) {
|
||||
throw new Error("Failed to set vibration", { cause: error });
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Test speaker tone by controlling speaker volume and audio settings
|
||||
* This creates a brief audio feedback through the controller's speaker or headphones
|
||||
* @param {string} output - Audio output destination: "speaker" (default) or "headphones"
|
||||
*/
|
||||
async setSpeakerTone(output = "speaker") {
|
||||
try {
|
||||
const { validFlag0 } = this.currentOutputState;
|
||||
const outputStruct = new DS5OutputStruct({
|
||||
...this.currentOutputState,
|
||||
speakerVolume: 85,
|
||||
headphoneVolume: 55,
|
||||
validFlag0: validFlag0 | DS5_VALID_FLAG0.HEADPHONE_VOLUME | DS5_VALID_FLAG0.SPEAKER_VOLUME | DS5_VALID_FLAG0.AUDIO_CONTROL,
|
||||
});
|
||||
await this.sendOutputReport(outputStruct.pack(), output === "headphones" ? 'play headphone tone' : 'play speaker tone');
|
||||
outputStruct.validFlag0 &= ~(DS5_VALID_FLAG0.HEADPHONE_VOLUME | DS5_VALID_FLAG0.SPEAKER_VOLUME | DS5_VALID_FLAG0.AUDIO_CONTROL);
|
||||
|
||||
// Send feature reports to enable audio
|
||||
if (output === "headphones") {
|
||||
// Audio configuration command for headphones
|
||||
await this.sendFeatureReport(128, [6, 4, 0, 0, 0, 0, 4, 0, 6]);
|
||||
// Enable headphone tone
|
||||
await this.sendFeatureReport(128, [6, 2, 1, 1, 0]);
|
||||
} else {
|
||||
// Audio configuration command for speakers
|
||||
await this.sendFeatureReport(128, [6, 4, 0, 0, 8]);
|
||||
// Enable speaker tone
|
||||
await this.sendFeatureReport(128, [6, 2, 1, 1, 0]);
|
||||
}
|
||||
|
||||
// Update current state to reflect the changes
|
||||
this.updateCurrentOutputState(outputStruct);
|
||||
} catch (error) {
|
||||
throw new Error("Failed to set speaker tone", { cause: error });
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Reset speaker settings to default (turn off speaker)
|
||||
*/
|
||||
async resetSpeakerSettings() {
|
||||
try {
|
||||
// Disable speaker tone first via feature report
|
||||
await this.sendFeatureReport(128, [6, 2, 0, 1, 0]);
|
||||
|
||||
const { validFlag0 } = this.currentOutputState;
|
||||
const outputStruct = new DS5OutputStruct({
|
||||
...this.currentOutputState,
|
||||
speakerVolume: 0,
|
||||
validFlag0: validFlag0 | DS5_VALID_FLAG0.SPEAKER_VOLUME | DS5_VALID_FLAG0.AUDIO_CONTROL,
|
||||
});
|
||||
// outputStruct.audioControl = 0x00;
|
||||
await this.sendOutputReport(outputStruct.pack(), 'stop speaker tone');
|
||||
outputStruct.validFlag0 &= ~(DS5_VALID_FLAG0.SPEAKER_VOLUME | DS5_VALID_FLAG0.AUDIO_CONTROL);
|
||||
|
||||
// Update current state to reflect the changes
|
||||
this.updateCurrentOutputState(outputStruct);
|
||||
} catch (error) {
|
||||
throw new Error("Failed to reset speaker settings", { cause: error });
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set lightbar color
|
||||
* @param {number} red - Red component (0-255)
|
||||
* @param {number} green - Green component (0-255)
|
||||
* @param {number} blue - Blue component (0-255)
|
||||
*/
|
||||
async setLightbarColor(red = 0, green = 0, blue = 0) {
|
||||
try {
|
||||
const { validFlag1 } = this.currentOutputState;
|
||||
const outputStruct = new DS5OutputStruct({
|
||||
...this.currentOutputState,
|
||||
ledCRed: Math.max(0, Math.min(255, red)),
|
||||
ledCGreen: Math.max(0, Math.min(255, green)),
|
||||
ledCBlue: Math.max(0, Math.min(255, blue)),
|
||||
validFlag1: validFlag1 | DS5_VALID_FLAG1.LIGHTBAR_COLOR,
|
||||
});
|
||||
await this.sendOutputReport(outputStruct.pack(), 'set lightbar color');
|
||||
outputStruct.validFlag1 &= ~DS5_VALID_FLAG1.LIGHTBAR_COLOR;
|
||||
|
||||
// Update current state to reflect the changes
|
||||
this.updateCurrentOutputState(outputStruct);
|
||||
} catch (error) {
|
||||
throw new Error("Failed to set lightbar color", { cause: error });
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set player indicator lights
|
||||
* @param {number} pattern - Player indicator pattern (0-31, each bit represents a light)
|
||||
*/
|
||||
async setPlayerIndicator(pattern = 0) {
|
||||
try {
|
||||
const { validFlag1 } = this.currentOutputState;
|
||||
const outputStruct = new DS5OutputStruct({
|
||||
...this.currentOutputState,
|
||||
playerIndicator: Math.max(0, Math.min(31, pattern)),
|
||||
validFlag1: validFlag1 | DS5_VALID_FLAG1.PLAYER_INDICATOR,
|
||||
});
|
||||
await this.sendOutputReport(outputStruct.pack(), 'set player indicator');
|
||||
outputStruct.validFlag1 &= ~DS5_VALID_FLAG1.PLAYER_INDICATOR;
|
||||
|
||||
// Update current state to reflect the changes
|
||||
this.updateCurrentOutputState(outputStruct);
|
||||
} catch (error) {
|
||||
throw new Error("Failed to set player indicator", { cause: error });
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Reset lights to default state (turn off)
|
||||
*/
|
||||
async resetLights() {
|
||||
try {
|
||||
await this.setLightbarColor(0, 0, 0);
|
||||
await this.setPlayerIndicator(0);
|
||||
await this.setMuteLed(0);
|
||||
} catch (error) {
|
||||
throw new Error("Failed to reset lights", { cause: error });
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set mute button LED state
|
||||
* @param {number} state - Mute LED state (0 = off, 1 = solid, 2 = pulsing)
|
||||
*/
|
||||
async setMuteLed(state = 0) {
|
||||
try {
|
||||
const { validFlag1 } = this.currentOutputState;
|
||||
const outputStruct = new DS5OutputStruct({
|
||||
...this.currentOutputState,
|
||||
muteLedControl: Math.max(0, Math.min(2, state)),
|
||||
validFlag1: validFlag1 | DS5_VALID_FLAG1.MUTE_LED,
|
||||
});
|
||||
await this.sendOutputReport(outputStruct.pack(), 'set mute LED');
|
||||
outputStruct.validFlag1 &= ~DS5_VALID_FLAG1.MUTE_LED;
|
||||
|
||||
// Update current state to reflect the changes
|
||||
this.updateCurrentOutputState(outputStruct);
|
||||
} catch (error) {
|
||||
throw new Error("Failed to set mute LED", { cause: error });
|
||||
}
|
||||
}
|
||||
|
||||
getNumberOfSticks() {
|
||||
return 2;
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse DS5 battery status from input data
|
||||
*/
|
||||
parseBatteryStatus(data) {
|
||||
const bat = data.getUint8(52); // DS5 battery byte is at position 52
|
||||
|
||||
// DS5: bat_charge = low 4 bits, bat_status = high 4 bits
|
||||
const bat_charge = bat & 0x0f;
|
||||
const bat_status = bat >> 4;
|
||||
|
||||
let charge_level = 0;
|
||||
let cable_connected = false;
|
||||
let is_charging = false;
|
||||
let is_error = false;
|
||||
|
||||
switch (bat_status) {
|
||||
case 0:
|
||||
// On battery power
|
||||
charge_level = Math.min(bat_charge * 10 + 5, 100);
|
||||
break;
|
||||
case 1:
|
||||
// Charging
|
||||
charge_level = Math.min(bat_charge * 10 + 5, 100);
|
||||
is_charging = true;
|
||||
cable_connected = true;
|
||||
break;
|
||||
case 2:
|
||||
// Fully charged
|
||||
charge_level = 100;
|
||||
cable_connected = true;
|
||||
break;
|
||||
case 15:
|
||||
// Battery is flat
|
||||
charge_level = 0;
|
||||
is_charging = true;
|
||||
cable_connected = true;
|
||||
break;
|
||||
case 11: // not sure yet what this error means
|
||||
default:
|
||||
// Error state
|
||||
is_error = true;
|
||||
break;
|
||||
}
|
||||
|
||||
return { charge_level, cable_connected, is_charging, is_error };
|
||||
}
|
||||
}
|
||||
|
||||
export default DS5Controller;
|
||||
263
js/controllers/ds5-edge-controller.js
Normal file
@@ -0,0 +1,263 @@
|
||||
'use strict';
|
||||
|
||||
import DS5Controller from './ds5-controller.js';
|
||||
import { sleep, dec2hex32, la, lf } from '../utils.js';
|
||||
import { l } from "../translations.js";
|
||||
|
||||
/**
|
||||
* DualSense Edge (DS5 Edge) Controller implementation
|
||||
*/
|
||||
class DS5EdgeController extends DS5Controller {
|
||||
constructor(device) {
|
||||
super(device);
|
||||
this.model = "DS5_Edge";
|
||||
this.finetuneMaxValue = 4095; // 12-bit max value for DS5 Edge
|
||||
}
|
||||
|
||||
async getInfo() {
|
||||
// DS5 Edge uses the same info structure as DS5 but with is_edge=true
|
||||
const result = await this._getInfo(true);
|
||||
|
||||
if (result.ok) {
|
||||
// DS Edge extra module info
|
||||
const empty = Array(17).fill('\x00').join('');
|
||||
try {
|
||||
const sticks_barcode = (await this.getBarcode()).map(barcode => barcode === empty ? l("Unknown") : barcode);
|
||||
result.infoItems.push({ key: l("Left Module Barcode"), value: sticks_barcode[1], cat: "fw" });
|
||||
result.infoItems.push({ key: l("Right Module Barcode"), value: sticks_barcode[0], cat: "fw" });
|
||||
} catch(_e) {
|
||||
// ignore module read errors here
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
async flash(progressCallback = null) {
|
||||
la("ds5_edge_flash");
|
||||
try {
|
||||
const ret = await this.flashModules(progressCallback);
|
||||
if(ret) {
|
||||
return {
|
||||
success: true,
|
||||
message: "<b>" + l("Changes saved successfully") + "</b>.<br><br>" + l("If the calibration is not stored permanently, please double-check the wirings of the hardware mod."),
|
||||
isHtml: true
|
||||
};
|
||||
}
|
||||
} catch(error) {
|
||||
throw new Error(l("Error while saving changes"), { cause: error });
|
||||
}
|
||||
}
|
||||
|
||||
async getBarcode() {
|
||||
try {
|
||||
const td = new TextDecoder();
|
||||
|
||||
await this.sendFeatureReport(0x80, [21,34,0]);
|
||||
await sleep(100);
|
||||
|
||||
const r_data = await this.receiveFeatureReport(0x81);
|
||||
const r_bc = td.decode(r_data.buffer.slice(21, 21+17));
|
||||
|
||||
await this.sendFeatureReport(0x80, [21,34,1]);
|
||||
await sleep(100);
|
||||
|
||||
const l_data = await this.receiveFeatureReport(0x81);
|
||||
const l_bc = td.decode(l_data.buffer.slice(21, 21+17));
|
||||
return [l_bc, r_bc];
|
||||
} catch(error) {
|
||||
la("ds5_edge_barcode_modules_failed", {"r": error});
|
||||
throw new Error(l("Cannot read module barcodes"), { cause: error });
|
||||
}
|
||||
}
|
||||
|
||||
async unlockModule(i) {
|
||||
const m_name = i == 0 ? "left module" : "right module";
|
||||
|
||||
await this.sendFeatureReport(0x80, [21, 6, i, 11]);
|
||||
await sleep(200);
|
||||
const ret = await this.waitUntilWritten([21, 6, 2]);
|
||||
if(!ret) {
|
||||
throw new Error(l("Cannot unlock") + " " + l(m_name));
|
||||
}
|
||||
}
|
||||
|
||||
async lockModule(i) {
|
||||
const m_name = i == 0 ? "left module" : "right module";
|
||||
|
||||
await this.sendFeatureReport(0x80, [21, 4, i, 8]);
|
||||
await sleep(200);
|
||||
const ret = await this.waitUntilWritten([21, 4, 2]);
|
||||
if(!ret) {
|
||||
throw new Error(l("Cannot lock") + " " + l(m_name));
|
||||
}
|
||||
}
|
||||
|
||||
async storeDataInto(i) {
|
||||
const m_name = i == 0 ? "left module" : "right module";
|
||||
|
||||
await this.sendFeatureReport(0x80, [21, 5, i]);
|
||||
await sleep(200);
|
||||
const ret = await this.waitUntilWritten([21, 3, 2]);
|
||||
if(!ret) {
|
||||
throw new Error(l("Cannot store data into") + " " + l(m_name));
|
||||
}
|
||||
}
|
||||
|
||||
async flashModules(progressCallback) {
|
||||
la("ds5_edge_flash_modules");
|
||||
try {
|
||||
progressCallback(0);
|
||||
|
||||
// Reload data, this ensures correctly writing data in the controller
|
||||
await sleep(100);
|
||||
progressCallback(10);
|
||||
|
||||
// Unlock modules
|
||||
await this.unlockModule(0);
|
||||
progressCallback(15);
|
||||
await this.unlockModule(1);
|
||||
progressCallback(30);
|
||||
|
||||
// Unlock NVS
|
||||
await this.nvsUnlock();
|
||||
await sleep(50);
|
||||
progressCallback(45);
|
||||
|
||||
// This should trigger write into modules
|
||||
const data = await this.getInMemoryModuleData();
|
||||
await sleep(50);
|
||||
progressCallback(60);
|
||||
await this.writeFinetuneData(data);
|
||||
|
||||
// Extra delay
|
||||
await sleep(100);
|
||||
|
||||
// Lock back modules
|
||||
await this.lockModule(0);
|
||||
progressCallback(80);
|
||||
await this.lockModule(1);
|
||||
progressCallback(100);
|
||||
|
||||
// Lock back NVS
|
||||
await sleep(100);
|
||||
const lockRes = await this.nvsLock();
|
||||
if(!lockRes.ok) throw (lockRes.error || new Error("NVS lock failed"));
|
||||
|
||||
await sleep(250);
|
||||
|
||||
return true;
|
||||
} catch(error) {
|
||||
la("ds5_edge_flash_modules_failed", {"r": error});
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
async waitUntilWritten(expected) {
|
||||
let attempts = 0;
|
||||
const maxAttempts = 10;
|
||||
|
||||
while (attempts < maxAttempts) {
|
||||
const data = await this.receiveFeatureReport(0x81);
|
||||
|
||||
// Check if all expected bytes match
|
||||
const allMatch = expected.every((expectedByte, i) =>
|
||||
data.getUint8(1 + i, true) === expectedByte
|
||||
);
|
||||
|
||||
if (allMatch) {
|
||||
return true;
|
||||
}
|
||||
|
||||
attempts++;
|
||||
await sleep(50);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
async calibrateSticksEnd() {
|
||||
la("ds5_calibrate_sticks_end");
|
||||
try {
|
||||
// Write
|
||||
await this.sendFeatureReport(0x82, [2,1,1]);
|
||||
|
||||
let data = await this.receiveFeatureReport(0x83);
|
||||
|
||||
if(data.getUint32(0, false) != 0x83010101) {
|
||||
const d1 = dec2hex32(data.getUint32(0, false));
|
||||
la("ds5_calibrate_sticks_failed", {"s": 3, d1});
|
||||
return { ok: false, code: 4, d1 };
|
||||
}
|
||||
|
||||
await this.sendFeatureReport(0x82, [2,1,1]);
|
||||
data = await this.receiveFeatureReport(0x83);
|
||||
if(data.getUint32(0, false) != 0x83010103 && data.getUint32(0, false) != 0x83010312) {
|
||||
const d1 = dec2hex32(data.getUint32(0, false));
|
||||
la("ds5_calibrate_sticks_failed", {"s": 3, d1});
|
||||
return { ok: false, code: 5, d1 };
|
||||
}
|
||||
|
||||
return { ok: true };
|
||||
} catch(error) {
|
||||
la("ds5_calibrate_sticks_end_failed", {"r": error});
|
||||
return { ok: false, error };
|
||||
}
|
||||
}
|
||||
|
||||
async calibrateRangeEnd() {
|
||||
la("ds5_calibrate_range_end");
|
||||
try {
|
||||
// Write
|
||||
await this.sendFeatureReport(0x82, [2,1,2]);
|
||||
|
||||
// Assert
|
||||
let data = await this.receiveFeatureReport(0x83);
|
||||
|
||||
if(data.getUint32(0, false) != 0x83010201) {
|
||||
const d1 = dec2hex32(data.getUint32(0, false));
|
||||
la("ds5_calibrate_range_end_failed", {d1});
|
||||
return { ok: false, code: 4, d1 };
|
||||
}
|
||||
|
||||
await this.sendFeatureReport(0x82, [2,1,2]);
|
||||
data = await this.receiveFeatureReport(0x83)
|
||||
if(data.getUint32(0, false) != 0x83010203) {
|
||||
const d1 = dec2hex32(data.getUint32(0, false));
|
||||
la("ds5_calibrate_range_end_failed", {d1});
|
||||
return { ok: false, code: 5, d1 };
|
||||
}
|
||||
|
||||
return { ok: true };
|
||||
} catch(error) {
|
||||
la("ds5_calibrate_range_end_failed", {"r": error});
|
||||
return { ok: false, error };
|
||||
}
|
||||
}
|
||||
|
||||
async getInMemoryModuleData() {
|
||||
// DualSense Edge
|
||||
await this.sendFeatureReport(0x80, [12, 4]);
|
||||
await sleep(100);
|
||||
const data = await this.receiveFeatureReport(0x81);
|
||||
const cmd = data.getUint8(0, true);
|
||||
const [p1, p2, p3] = [1, 2, 3].map(i => data.getUint8(i, true));
|
||||
|
||||
if(cmd != 129 || p1 != 12 || (p2 != 2 && p2 != 4) || p3 != 2)
|
||||
return null;
|
||||
|
||||
return Array.from({ length: 12 }, (_, i) => data.getUint16(4 + i * 2, true));
|
||||
}
|
||||
|
||||
async writeFinetuneData(data) {
|
||||
const pkg = data.reduce((acc, val) => acc.concat([val & 0xff, val >> 8]), [12, 1]);
|
||||
await this.sendFeatureReport(0x80, pkg)
|
||||
}
|
||||
|
||||
getNumberOfSticks() {
|
||||
return 2;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export default DS5EdgeController;
|
||||
646
js/controllers/vr2-controller.js
Normal file
@@ -0,0 +1,646 @@
|
||||
'use strict';
|
||||
|
||||
import BaseController from './base-controller.js';
|
||||
import {
|
||||
sleep,
|
||||
buf2hex,
|
||||
dec2hex,
|
||||
dec2hex32,
|
||||
dec2hex8,
|
||||
format_mac_from_view,
|
||||
reverse_str,
|
||||
la,
|
||||
} from '../utils.js';
|
||||
import { l } from '../translations.js';
|
||||
|
||||
// DS5 Button mapping configuration
|
||||
const DS5_BUTTON_MAP = [
|
||||
{ name: 'up', byte: 0, mask: 0x0 }, // Disabled
|
||||
{ name: 'right', byte: 0, mask: 0x0 }, // Disabled
|
||||
{ name: 'down', byte: 0, mask: 0x0 }, // Disabled
|
||||
{ name: 'left', byte: 0, mask: 0x0 }, // Disabled
|
||||
{ name: 'square', byte: 9, mask: 0x10, svg: 'Square' },
|
||||
{ name: 'cross', byte: 9, mask: 0x20, svg: 'Cross' },
|
||||
{ name: 'circle', byte: 9, mask: 0x40, svg: 'Circle' },
|
||||
{ name: 'triangle', byte: 9, mask: 0x80, svg: 'Triangle' },
|
||||
{ name: 'l1', byte: 9, mask: 0x10, svg: 'L1' },
|
||||
{ name: 'l2', byte: 4, mask: 0xff }, // analog handled separately
|
||||
{ name: 'r1', byte: 9, mask: 0x20, svg: 'R1' },
|
||||
{ name: 'r2', byte: 4, mask: 0xff }, // analog handled separately
|
||||
{ name: 'create', byte: 10, mask: 0x01, svg: 'Create' },
|
||||
{ name: 'options', byte: 10, mask: 0x02, svg: 'Options' },
|
||||
{ name: 'l3', byte: 10, mask: 0x04, svg: 'L3' },
|
||||
{ name: 'r3', byte: 10, mask: 0x08, svg: 'R3' },
|
||||
{ name: 'ps', byte: 10, mask: 0x10, svg: 'PS' },
|
||||
{ name: 'touchpad', byte: 0, mask: 0x00, svg: 'Trackpad' },
|
||||
{ name: 'mute', byte: 0, mask: 0x00, svg: 'Mute' },
|
||||
];
|
||||
|
||||
// DS5 Input processing configuration
|
||||
const DS5_INPUT_CONFIG = {
|
||||
buttonMap: DS5_BUTTON_MAP,
|
||||
dpadByte: 7,
|
||||
l2AnalogByte: 4,
|
||||
r2AnalogByte: 4,
|
||||
touchpadOffset: 32,
|
||||
};
|
||||
|
||||
// DS5 Adaptive Trigger Effect Modes
|
||||
const DS5_TRIGGER_EFFECT_MODE = {
|
||||
OFF: 0x00, // No effect
|
||||
RESISTANCE: 0x01, // Constant resistance
|
||||
TRIGGER: 0x02, // Single-trigger effect with release
|
||||
AUTO_TRIGGER: 0x06, // Automatic trigger with vibration
|
||||
};
|
||||
|
||||
// DS5 Output Report Constants
|
||||
const DS5_OUTPUT_REPORT = {
|
||||
USB_REPORT_ID: 0x02,
|
||||
BT_REPORT_ID: 0x31,
|
||||
}
|
||||
|
||||
const DS5_VALID_FLAG0 = {
|
||||
RIGHT_VIBRATION: 0x01, // Bit 0 for right vibration motor
|
||||
LEFT_VIBRATION: 0x02, // Bit 1 for left vibration motor
|
||||
LEFT_TRIGGER: 0x04, // Bit 2 for left adaptive trigger
|
||||
RIGHT_TRIGGER: 0x08, // Bit 3 for right adaptive trigger
|
||||
HEADPHONE_VOLUME: 0x10, // Bit 4 for headphone volume control
|
||||
SPEAKER_VOLUME: 0x20, // Bit 5 for speaker volume control
|
||||
MIC_VOLUME: 0x40, // Bit 6 for microphone volume control
|
||||
AUDIO_CONTROL: 0x80, // Bit 7 for audio control
|
||||
};
|
||||
|
||||
const DS5_VALID_FLAG1 = {
|
||||
MUTE_LED: 0x01, // Bit 0 for mute LED control
|
||||
POWER_SAVE_MUTE: 0x02, // Bit 1 for power-save mute control
|
||||
LIGHTBAR_COLOR: 0x04, // Bit 2 for lightbar color control
|
||||
RESERVED_BIT_3: 0x08, // Bit 3 (reserved)
|
||||
PLAYER_INDICATOR: 0x10, // Bit 4 for player indicator LED control
|
||||
LED_BRIGHTNESS: 0x20, // Bit 6 for LED brightness control
|
||||
LIGHTBAR_SETUP: 0x40, // Bit 6 for lightbar setup control
|
||||
RESERVED_BIT_7: 0x80, // Bit 7 (reserved)
|
||||
}
|
||||
|
||||
const DS5_VALID_FLAG2 = {
|
||||
LED_BRIGHTNESS: 0x01, // Bit 0 for LED brightness control
|
||||
LIGHTBAR_SETUP: 0x02, // Bit 1 for lightbar setup control
|
||||
};
|
||||
|
||||
// Basic DS5 Output Structure for adaptive trigger control
|
||||
class DS5OutputStruct {
|
||||
constructor(currentState = null) {
|
||||
// Create a 47-byte buffer for DS5 output report (USB)
|
||||
this.buffer = new ArrayBuffer(47);
|
||||
this.view = new DataView(this.buffer);
|
||||
|
||||
// Control flags
|
||||
this.validFlag0 = currentState.validFlag0 || 0;
|
||||
this.validFlag1 = currentState.validFlag1 || 0;
|
||||
this.validFlag2 = currentState.validFlag2 || 0;
|
||||
|
||||
// Vibration motors
|
||||
this.bcVibrationRight = currentState.bcVibrationRight || 0;
|
||||
this.bcVibrationLeft = currentState.bcVibrationLeft || 0;
|
||||
|
||||
// Audio control
|
||||
this.headphoneVolume = currentState.headphoneVolume || 0;
|
||||
this.speakerVolume = currentState.speakerVolume || 0;
|
||||
this.micVolume = currentState.micVolume || 0;
|
||||
this.audioControl = currentState.audioControl || 0;
|
||||
this.audioControl2 = currentState.audioControl2 || 0;
|
||||
|
||||
// LED and indicator control
|
||||
this.muteLedControl = currentState.muteLedControl || 0;
|
||||
this.powerSaveMuteControl = currentState.powerSaveMuteControl || 0;
|
||||
this.lightbarSetup = currentState.lightbarSetup || 0;
|
||||
this.ledBrightness = currentState.ledBrightness || 0;
|
||||
this.playerIndicator = currentState.playerIndicator || 0;
|
||||
this.ledCRed = currentState.ledCRed || 0;
|
||||
this.ledCGreen = currentState.ledCGreen || 0;
|
||||
this.ledCBlue = currentState.ledCBlue || 0;
|
||||
|
||||
// Adaptive trigger parameters
|
||||
this.adaptiveTriggerLeftMode = currentState.adaptiveTriggerLeftMode || 0;
|
||||
this.adaptiveTriggerLeftParam0 = currentState.adaptiveTriggerLeftParam0 || 0;
|
||||
this.adaptiveTriggerLeftParam1 = currentState.adaptiveTriggerLeftParam1 || 0;
|
||||
this.adaptiveTriggerLeftParam2 = currentState.adaptiveTriggerLeftParam2 || 0;
|
||||
|
||||
this.adaptiveTriggerRightMode = currentState.adaptiveTriggerRightMode || 0;
|
||||
this.adaptiveTriggerRightParam0 = currentState.adaptiveTriggerRightParam0 || 0;
|
||||
this.adaptiveTriggerRightParam1 = currentState.adaptiveTriggerRightParam1 || 0;
|
||||
this.adaptiveTriggerRightParam2 = currentState.adaptiveTriggerRightParam2 || 0;
|
||||
|
||||
// Haptic feedback
|
||||
this.hapticVolume = currentState.hapticVolume || 0;
|
||||
}
|
||||
|
||||
// Pack the data into the output buffer
|
||||
pack() {
|
||||
// Based on DS5 output report structure from HID descriptor
|
||||
// Byte 0-1: Control flags (16-bit little endian)
|
||||
this.view.setUint16(0, (this.validFlag1 << 8) | this.validFlag0, true);
|
||||
|
||||
// Byte 2-3: Vibration motors
|
||||
this.view.setUint8(2, this.bcVibrationRight);
|
||||
this.view.setUint8(3, this.bcVibrationLeft);
|
||||
|
||||
// Bytes 4-7: Audio control (reserved for now)
|
||||
this.view.setUint8(4, this.headphoneVolume);
|
||||
this.view.setUint8(5, this.speakerVolume);
|
||||
this.view.setUint8(6, this.micVolume);
|
||||
this.view.setUint8(7, this.audioControl);
|
||||
|
||||
// Byte 8: Mute LED control
|
||||
this.view.setUint8(8, this.muteLedControl);
|
||||
|
||||
// Byte 9: Reserved
|
||||
this.view.setUint8(9, 0);
|
||||
|
||||
// Bytes 10-20: Right adaptive trigger
|
||||
this.view.setUint8(10, this.adaptiveTriggerRightMode);
|
||||
this.view.setUint8(11, this.adaptiveTriggerRightParam0);
|
||||
this.view.setUint8(12, this.adaptiveTriggerRightParam1);
|
||||
this.view.setUint8(13, this.adaptiveTriggerRightParam2);
|
||||
// Additional trigger parameters (bytes 14-20 reserved for extended params)
|
||||
for (let i = 14; i <= 20; i++) {
|
||||
this.view.setUint8(i, 0);
|
||||
}
|
||||
|
||||
// Bytes 21-31: Left adaptive trigger
|
||||
this.view.setUint8(21, this.adaptiveTriggerLeftMode);
|
||||
this.view.setUint8(22, this.adaptiveTriggerLeftParam0);
|
||||
this.view.setUint8(23, this.adaptiveTriggerLeftParam1);
|
||||
this.view.setUint8(24, this.adaptiveTriggerLeftParam2);
|
||||
// Additional trigger parameters (bytes 25-31 reserved for extended params)
|
||||
for (let i = 25; i <= 31; i++) {
|
||||
this.view.setUint8(i, 0);
|
||||
}
|
||||
|
||||
// Bytes 32-42: Reserved
|
||||
for (let i = 32; i <= 42; i++) {
|
||||
this.view.setUint8(i, 0);
|
||||
}
|
||||
|
||||
// Byte 43: Player LED indicator
|
||||
this.view.setUint8(43, this.playerIndicator);
|
||||
|
||||
// Bytes 44-46: Lightbar RGB
|
||||
this.view.setUint8(44, this.ledCRed);
|
||||
this.view.setUint8(45, this.ledCGreen);
|
||||
this.view.setUint8(46, this.ledCBlue);
|
||||
|
||||
return this.buffer;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* VR2 Controller implementation
|
||||
*/
|
||||
class VR2Controller extends BaseController {
|
||||
constructor(device, isLeft) {
|
||||
super(device);
|
||||
this.model = "VR2";
|
||||
this.finetuneMaxValue = 65535; // 16-bit max value for DS5
|
||||
|
||||
// Initialize current output state to track controller settings
|
||||
this.currentOutputState = {
|
||||
validFlag0: 0,
|
||||
validFlag1: 0,
|
||||
validFlag2: 0,
|
||||
bcVibrationRight: 0,
|
||||
bcVibrationLeft: 0,
|
||||
headphoneVolume: 0,
|
||||
speakerVolume: 0,
|
||||
micVolume: 0,
|
||||
audioControl: 0,
|
||||
audioControl2: 0,
|
||||
muteLedControl: 0,
|
||||
powerSaveMuteControl: 0,
|
||||
lightbarSetup: 0,
|
||||
ledBrightness: 0,
|
||||
playerIndicator: 0,
|
||||
ledCRed: 0,
|
||||
ledCGreen: 0,
|
||||
ledCBlue: 0,
|
||||
adaptiveTriggerLeftMode: 0,
|
||||
adaptiveTriggerLeftParam0: 0,
|
||||
adaptiveTriggerLeftParam1: 0,
|
||||
adaptiveTriggerLeftParam2: 0,
|
||||
adaptiveTriggerRightMode: 0,
|
||||
adaptiveTriggerRightParam0: 0,
|
||||
adaptiveTriggerRightParam1: 0,
|
||||
adaptiveTriggerRightParam2: 0,
|
||||
hapticVolume: 0
|
||||
};
|
||||
}
|
||||
|
||||
getInputConfig() {
|
||||
return DS5_INPUT_CONFIG;
|
||||
}
|
||||
|
||||
async getSerialNumber() {
|
||||
return await this.getSystemInfo(1, 19, 17);
|
||||
}
|
||||
|
||||
async getInfo() {
|
||||
return this._getInfo(false);
|
||||
}
|
||||
|
||||
async _getInfo(is_edge) {
|
||||
// Device-only: collect info and return a common structure; do not touch the DOM
|
||||
try {
|
||||
console.log("Fetching controller info...");
|
||||
const view = await this.receiveFeatureReport(0x20);
|
||||
console.log("Got VR2 info report:", buf2hex(view.buffer));
|
||||
const cmd = view.getUint8(0, true);
|
||||
if(cmd != 0x20 || view.buffer.byteLength != 64)
|
||||
return { ok: false, error: new Error("Invalid response for ds5_info") };
|
||||
|
||||
const build_date = new TextDecoder().decode(view.buffer.slice(1, 1+11));
|
||||
const build_time = new TextDecoder().decode(view.buffer.slice(12, 20));
|
||||
|
||||
const fwtype = view.getUint16(20, true);
|
||||
const swseries = view.getUint16(22, true);
|
||||
const hwinfo = view.getUint32(24, true);
|
||||
const fwversion = view.getUint32(28, true);
|
||||
|
||||
const updversion = view.getUint16(44, true);
|
||||
const unk = view.getUint8(46, true);
|
||||
|
||||
const fwversion1 = view.getUint32(48, true);
|
||||
const fwversion2 = view.getUint32(52, true);
|
||||
const fwversion3 = view.getUint32(56, true);
|
||||
|
||||
const serial_number = await this.getSystemInfo(1, 19, 17);
|
||||
const infoItems = [
|
||||
{ key: l("Serial Number"), value: serial_number, cat: "hw" },
|
||||
{ key: l("MCU Unique ID"), value: await this.getSystemInfo(1, 9, 9, false), cat: "hw", isExtra: true },
|
||||
{ key: l("PCBA ID"), value: reverse_str(await this.getSystemInfo(1, 17, 14)), cat: "hw", isExtra: true },
|
||||
{ key: l("Battery Barcode"), value: await this.getSystemInfo(1, 24, 23), cat: "hw", isExtra: true },
|
||||
{ key: l("VCM Left Barcode"), value: await this.getSystemInfo(1, 26, 16), cat: "hw", isExtra: true },
|
||||
{ key: l("VCM Right Barcode"), value: await this.getSystemInfo(1, 28, 16), cat: "hw", isExtra: true },
|
||||
|
||||
...(is_edge ? [] : [{ key: l("Board Model"), value: this.hwToBoardModel(hwinfo), cat: "hw", addInfoIcon: 'board' }]),
|
||||
|
||||
{ key: l("FW Build Date"), value: build_date + " " + build_time, cat: "fw" },
|
||||
{ key: l("FW Type"), value: "0x" + dec2hex(fwtype), cat: "fw", isExtra: true },
|
||||
{ key: l("FW Series"), value: "0x" + dec2hex(swseries), cat: "fw", isExtra: true },
|
||||
{ key: l("HW Model"), value: "0x" + dec2hex32(hwinfo), cat: "hw", isExtra: true },
|
||||
{ key: l("FW Version"), value: "0x" + dec2hex32(fwversion), cat: "fw", isExtra: true },
|
||||
{ key: l("FW Update"), value: "0x" + dec2hex(updversion), cat: "fw", isExtra: true },
|
||||
{ key: l("FW Update Info"), value: "0x" + dec2hex8(unk), cat: "fw", isExtra: true },
|
||||
{ key: l("SBL FW Version"), value: "0x" + dec2hex32(fwversion1), cat: "fw", isExtra: true },
|
||||
{ key: l("Venom FW Version"), value: "0x" + dec2hex32(fwversion2), cat: "fw", isExtra: true },
|
||||
{ key: l("Spider FW Version"), value: "0x" + dec2hex32(fwversion3), cat: "fw", isExtra: true },
|
||||
|
||||
{ key: l("Touchpad ID"), value: await this.getSystemInfo(5, 2, 8, false), cat: "hw", isExtra: true },
|
||||
{ key: l("Touchpad FW Version"), value: await this.getSystemInfo(5, 4, 8, false), cat: "fw", isExtra: true },
|
||||
];
|
||||
|
||||
const old_controller = build_date.search(/ 2020| 2021/);
|
||||
let disable_bits = 0;
|
||||
if(old_controller != -1) {
|
||||
la("vr2_info_error", {"r": "old"})
|
||||
disable_bits |= 2; // 2: outdated firmware
|
||||
}
|
||||
|
||||
const nv = await this.queryNvStatus();
|
||||
const bd_addr = await this.getBdAddr();
|
||||
infoItems.push({ key: l("Bluetooth Address"), value: bd_addr, cat: "hw", isExtra: true });
|
||||
|
||||
const pending_reboot = (nv?.status === 'pending_reboot');
|
||||
|
||||
return { ok: true, infoItems, nv, disable_bits, pending_reboot };
|
||||
} catch(error) {
|
||||
la("vr2_info_error", {"r": error})
|
||||
return { ok: false, error, disable_bits: 1 };
|
||||
}
|
||||
}
|
||||
|
||||
async flash(progressCallback = null) {
|
||||
la("vr2_flash");
|
||||
try {
|
||||
await this.nvsUnlock();
|
||||
const lockRes = await this.nvsLock();
|
||||
if(!lockRes.ok) throw (lockRes.error || new Error("NVS lock failed"));
|
||||
|
||||
return { success: true, message: l("Changes saved successfully") };
|
||||
} catch(error) {
|
||||
throw new Error(l("Error while saving changes"), { cause: error });
|
||||
}
|
||||
}
|
||||
|
||||
async reset() {
|
||||
la("vr2_reset");
|
||||
try {
|
||||
await this.sendFeatureReport(0x80, [1,1]);
|
||||
} catch(error) {
|
||||
}
|
||||
}
|
||||
|
||||
async nvsLock() {
|
||||
// la("vr2_nvlock");
|
||||
try {
|
||||
await this.sendFeatureReport(0x80, [3,1]);
|
||||
await this.receiveFeatureReport(0x81);
|
||||
return { ok: true };
|
||||
} catch(error) {
|
||||
return { ok: false, error };
|
||||
}
|
||||
}
|
||||
|
||||
async nvsUnlock() {
|
||||
// la("vr2_nvunlock");
|
||||
try {
|
||||
await this.sendFeatureReport(0x80, [3,2, 101, 50, 64, 12]);
|
||||
const data = await this.receiveFeatureReport(0x81);
|
||||
} catch(error) {
|
||||
await sleep(500);
|
||||
throw new Error(l("NVS Unlock failed"), { cause: error });
|
||||
}
|
||||
}
|
||||
|
||||
async getBdAddr() {
|
||||
await this.sendFeatureReport(0x80, [9,2]);
|
||||
const data = await this.receiveFeatureReport(0x81);
|
||||
return format_mac_from_view(data, 4);
|
||||
}
|
||||
|
||||
async getSystemInfo(base, num, length, decode = true) {
|
||||
await this.sendFeatureReport(128, [base,num])
|
||||
const pcba_id = await this.receiveFeatureReport(129);
|
||||
if(pcba_id.getUint8(1) != base || pcba_id.getUint8(2) != num || pcba_id.getUint8(3) != 2) {
|
||||
return l("error");
|
||||
}
|
||||
if(decode)
|
||||
return new TextDecoder().decode(pcba_id.buffer.slice(4, 4+length));
|
||||
|
||||
return buf2hex(pcba_id.buffer.slice(4, 4+length));
|
||||
}
|
||||
|
||||
async calibrateSticksBegin() {
|
||||
la("vr2_calibrate_sticks_begin");
|
||||
try {
|
||||
// Begin
|
||||
await this.sendFeatureReport(0x82, [1,1,1]);
|
||||
|
||||
// Assert
|
||||
const data = await this.receiveFeatureReport(0x83);
|
||||
if(data.getUint32(0, false) != 0x83010101) {
|
||||
const d1 = dec2hex32(data.getUint32(0, false));
|
||||
la("vr2_calibrate_sticks_begin_failed", {"d1": d1});
|
||||
throw new Error(`Stick center calibration begin failed: ${d1}`);
|
||||
}
|
||||
return { ok: true };
|
||||
} catch(error) {
|
||||
la("vr2_calibrate_sticks_begin_failed", {"r": error});
|
||||
return { ok: false, error };
|
||||
}
|
||||
}
|
||||
|
||||
async calibrateSticksSample() {
|
||||
la("vr2_calibrate_sticks_sample");
|
||||
try {
|
||||
// Sample
|
||||
await this.sendFeatureReport(0x82, [3,1,1]);
|
||||
|
||||
// Assert
|
||||
const data = await this.receiveFeatureReport(0x83);
|
||||
if(data.getUint32(0, false) != 0x83010101) {
|
||||
const d1 = dec2hex32(data.getUint32(0, false));
|
||||
la("vr2_calibrate_sticks_sample_failed", {"d1": d1});
|
||||
throw new Error(`Stick center calibration sample failed: ${d1}`);
|
||||
}
|
||||
return { ok: true };
|
||||
} catch(error) {
|
||||
la("vr2_calibrate_sticks_sample_failed", {"r": error});
|
||||
return { ok: false, error };
|
||||
}
|
||||
}
|
||||
|
||||
async calibrateSticksEnd() {
|
||||
la("vr2_calibrate_sticks_end");
|
||||
try {
|
||||
// Write
|
||||
await this.sendFeatureReport(0x82, [2,1,1]);
|
||||
|
||||
const data = await this.receiveFeatureReport(0x83);
|
||||
|
||||
if(data.getUint32(0, false) != 0x83010102) {
|
||||
const d1 = dec2hex32(data.getUint32(0, false));
|
||||
la("vr2_calibrate_sticks_failed", {"s": 3, "d1": d1});
|
||||
throw new Error(`Stick center calibration end failed: ${d1}`);
|
||||
}
|
||||
|
||||
return { ok: true };
|
||||
} catch(error) {
|
||||
la("vr2_calibrate_sticks_end_failed", {"r": error});
|
||||
return { ok: false, error };
|
||||
}
|
||||
}
|
||||
|
||||
async calibrateRangeBegin() {
|
||||
la("vr2_calibrate_range_begin");
|
||||
try {
|
||||
// Begin
|
||||
await this.sendFeatureReport(0x82, [1,1,2]);
|
||||
|
||||
// Assert
|
||||
const data = await this.receiveFeatureReport(0x83);
|
||||
if(data.getUint32(0, false) != 0x83010201) {
|
||||
const d1 = dec2hex32(data.getUint32(0, false));
|
||||
la("vr2_calibrate_range_begin_failed", {"d1": d1});
|
||||
throw new Error(`Stick range calibration begin failed: ${d1}`);
|
||||
}
|
||||
return { ok: true };
|
||||
} catch(error) {
|
||||
la("vr2_calibrate_range_begin_failed", {"r": error});
|
||||
return { ok: false, error };
|
||||
}
|
||||
}
|
||||
|
||||
async calibrateRangeEnd() {
|
||||
la("vr2_calibrate_range_end");
|
||||
try {
|
||||
// Write
|
||||
await this.sendFeatureReport(0x82, [2,1,2]);
|
||||
|
||||
// Assert
|
||||
const data = await this.receiveFeatureReport(0x83);
|
||||
|
||||
if(data.getUint32(0, false) != 0x83010202) {
|
||||
const d1 = dec2hex32(data.getUint32(0, false));
|
||||
la("vr2_calibrate_range_end_failed", {"d1": d1});
|
||||
throw new Error(`Stick range calibration end failed: ${d1}`);
|
||||
}
|
||||
|
||||
return { ok: true };
|
||||
} catch(error) {
|
||||
la("vr2_calibrate_range_end_failed", {"r": error});
|
||||
return { ok: false, error };
|
||||
}
|
||||
}
|
||||
|
||||
async queryNvStatus() {
|
||||
try {
|
||||
await this.sendFeatureReport(0x80, [3,3]);
|
||||
const data = await this.receiveFeatureReport(0x81);
|
||||
const ret = data.getUint32(1, false);
|
||||
if (ret === 0x15010100) {
|
||||
return { device: 'ds5', status: 'pending_reboot', locked: null, code: 4, raw: ret };
|
||||
}
|
||||
if (ret === 0x03030201) {
|
||||
return { device: 'ds5', status: 'locked', locked: true, mode: 'temporary', code: 1, raw: ret };
|
||||
}
|
||||
if (ret === 0x03030200) {
|
||||
return { device: 'ds5', status: 'unlocked', locked: false, mode: 'permanent', code: 0, raw: ret };
|
||||
}
|
||||
if (ret === 1 || ret === 2) {
|
||||
return { device: 'ds5', status: 'unknown', locked: null, code: 2, raw: ret };
|
||||
}
|
||||
return { device: 'ds5', status: 'unknown', locked: null, code: ret, raw: ret };
|
||||
} catch (error) {
|
||||
return { device: 'ds5', status: 'error', locked: null, code: 2, error };
|
||||
}
|
||||
}
|
||||
|
||||
hwToBoardModel(hw_ver) {
|
||||
return l("Unknown");
|
||||
}
|
||||
|
||||
async getInMemoryModuleData() {
|
||||
// DualSense
|
||||
await this.sendFeatureReport(0x80, [12, 2]);
|
||||
await sleep(100);
|
||||
const data = await this.receiveFeatureReport(0x81);
|
||||
const cmd = data.getUint8(0, true);
|
||||
const [p1, p2, p3] = [1, 2, 3].map(i => data.getUint8(i, true));
|
||||
|
||||
if(cmd != 129 || p1 != 12 || (p2 != 2 && p2 != 4) || p3 != 2)
|
||||
return null;
|
||||
|
||||
return Array.from({ length: 12 }, (_, i) => data.getUint16(4 + i * 2, true));
|
||||
}
|
||||
|
||||
async writeFinetuneData(data) {
|
||||
const pkg = data.reduce((acc, val) => acc.concat([val & 0xff, val >> 8]), [12, 1]);
|
||||
await this.sendFeatureReport(0x80, pkg);
|
||||
}
|
||||
|
||||
/**
|
||||
* Send output report to the DS5 controller
|
||||
* @param {ArrayBuffer} data - The output report data
|
||||
*/
|
||||
async sendOutputReport(data, reason = "") {
|
||||
if (!this.device?.opened) {
|
||||
throw new Error('Device is not opened');
|
||||
}
|
||||
try {
|
||||
console.log(`Sending output report${ reason ? ` to ${reason}` : '' }:`, DS5_OUTPUT_REPORT.USB_REPORT_ID, buf2hex(data));
|
||||
await this.device.sendReport(DS5_OUTPUT_REPORT.USB_REPORT_ID, new Uint8Array(data));
|
||||
} catch (error) {
|
||||
throw new Error(`Failed to send output report: ${error.message}`);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the current output state with values from an OutputStruct
|
||||
* @param {DS5OutputStruct} outputStruct - The output structure to copy state from
|
||||
*/
|
||||
updateCurrentOutputState(outputStruct) {
|
||||
this.currentOutputState = { ...outputStruct };
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a copy of the current output state
|
||||
* @returns {Object} A copy of the current output state
|
||||
*/
|
||||
getCurrentOutputState() {
|
||||
return { ...this.currentOutputState };
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize the current output state when the controller is first connected.
|
||||
* Since DS5 controllers don't provide a way to read the current output state,
|
||||
* this method sets up reasonable defaults and attempts to detect any current settings.
|
||||
*/
|
||||
async initializeCurrentOutputState() {
|
||||
try {
|
||||
// Reset all output state to known defaults
|
||||
this.currentOutputState = {
|
||||
...this.getCurrentOutputState(),
|
||||
validFlag1: 0b1111_0111,
|
||||
ledCRed: 0,
|
||||
ledCGreen: 0,
|
||||
ledCBlue: 255,
|
||||
};
|
||||
|
||||
// Send a "reset" output report to ensure the controller is in a known state
|
||||
// This will turn off any existing effects and set the controller to defaults
|
||||
const resetOutputStruct = new DS5OutputStruct(this.currentOutputState);
|
||||
await this.sendOutputReport(resetOutputStruct.pack(), 'init default states');
|
||||
|
||||
// Update our state to reflect what we just sent
|
||||
this.updateCurrentOutputState(resetOutputStruct);
|
||||
} catch (error) {
|
||||
console.warn("Failed to initialize DS5 output state:", error);
|
||||
// Even if the reset fails, we still have the default state initialized
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse DS5 battery status from input data
|
||||
*/
|
||||
parseBatteryStatus(data) {
|
||||
const bat = data.getUint8(52); // DS5 battery byte is at position 52
|
||||
|
||||
// DS5: bat_charge = low 4 bits, bat_status = high 4 bits
|
||||
const bat_charge = bat & 0x0f;
|
||||
const bat_status = bat >> 4;
|
||||
|
||||
let bat_capacity = 0;
|
||||
let cable_connected = false;
|
||||
let is_charging = false;
|
||||
let is_error = false;
|
||||
|
||||
switch (bat_status) {
|
||||
case 0:
|
||||
// On battery power
|
||||
bat_capacity = Math.min(bat_charge * 10 + 5, 100);
|
||||
break;
|
||||
case 1:
|
||||
// Charging
|
||||
bat_capacity = Math.min(bat_charge * 10 + 5, 100);
|
||||
is_charging = true;
|
||||
cable_connected = true;
|
||||
break;
|
||||
case 2:
|
||||
// Fully charged
|
||||
bat_capacity = 100;
|
||||
cable_connected = true;
|
||||
break;
|
||||
case 15:
|
||||
// Battery is flat
|
||||
bat_capacity = 0;
|
||||
is_charging = true;
|
||||
cable_connected = true;
|
||||
break;
|
||||
default:
|
||||
// Error state
|
||||
is_error = true;
|
||||
break;
|
||||
}
|
||||
|
||||
return { bat_capacity, cable_connected, is_charging, is_error };
|
||||
}
|
||||
|
||||
getNumberOfSticks() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
getSupportedQuickTests() {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
export default VR2Controller;
|
||||
1363
js/core.js
Normal file
183
js/finetune-history.js
Normal file
@@ -0,0 +1,183 @@
|
||||
'use strict';
|
||||
|
||||
import { Storage } from './storage.js';
|
||||
|
||||
const MAX_HISTORY_ENTRIES_PER_CONTROLLER = 10;
|
||||
|
||||
/**
|
||||
* Manages finetune parameter history for DS5 and Edge controllers
|
||||
* Stores entries per controller identified by serial number
|
||||
*/
|
||||
export class FinetuneHistory {
|
||||
/**
|
||||
* Save current finetune settings for a controller
|
||||
* @param {Array} finetuneData - Array of 12 finetune values
|
||||
* @param {string} controllerSerialNumber - Serial number of the controller
|
||||
* @returns {string} The ID of the saved entry
|
||||
*/
|
||||
static save(finetuneData, controllerSerialNumber) {
|
||||
if (!Array.isArray(finetuneData) || finetuneData.length !== 12) {
|
||||
throw new Error(`Finetune data must be an array of 12 values, got "${finetuneData}"`);
|
||||
}
|
||||
|
||||
if (!controllerSerialNumber || typeof controllerSerialNumber !== 'string') {
|
||||
throw new Error('Controller serial number is required');
|
||||
}
|
||||
|
||||
const allHistory = this._getAllHistory();
|
||||
const controllerHistory = allHistory[controllerSerialNumber] || [];
|
||||
|
||||
// Check if the most recent entry has the same data
|
||||
if (controllerHistory.length > 0 && this._dataEquals(controllerHistory[0].data, finetuneData)) {
|
||||
// Update the timestamp of the existing entry
|
||||
controllerHistory[0].timestamp = Date.now();
|
||||
allHistory[controllerSerialNumber] = controllerHistory;
|
||||
this._saveAllHistory(allHistory);
|
||||
return controllerHistory[0].id;
|
||||
}
|
||||
|
||||
const entry = {
|
||||
id: this._generateId(),
|
||||
timestamp: Date.now(),
|
||||
data: finetuneData
|
||||
};
|
||||
|
||||
controllerHistory.unshift(entry);
|
||||
|
||||
// Keep only the latest MAX_HISTORY_ENTRIES_PER_CONTROLLER for this controller
|
||||
if (controllerHistory.length > MAX_HISTORY_ENTRIES_PER_CONTROLLER) {
|
||||
controllerHistory.pop();
|
||||
}
|
||||
|
||||
allHistory[controllerSerialNumber] = controllerHistory;
|
||||
this._saveAllHistory(allHistory);
|
||||
return entry.id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all saved finetune settings for a specific controller
|
||||
* @param {string} controllerSerialNumber - Serial number of the controller
|
||||
* @returns {Array} Array of saved settings entries for the controller
|
||||
*/
|
||||
static getAll(controllerSerialNumber) {
|
||||
if (!controllerSerialNumber || typeof controllerSerialNumber !== 'string') {
|
||||
return [];
|
||||
}
|
||||
|
||||
const allHistory = this._getAllHistory();
|
||||
return allHistory[controllerSerialNumber] || [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get finetune settings by ID
|
||||
* @param {string} id - Entry ID
|
||||
* @param {string} controllerSerialNumber - Serial number of the controller
|
||||
* @returns {Object|null} Entry object or null if not found
|
||||
*/
|
||||
static getById(id, controllerSerialNumber) {
|
||||
if (!controllerSerialNumber || typeof controllerSerialNumber !== 'string') {
|
||||
return null;
|
||||
}
|
||||
|
||||
const history = this.getAll(controllerSerialNumber);
|
||||
return history.find(entry => entry.id === id) || null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a saved entry
|
||||
* @param {string} id - Entry ID
|
||||
* @param {string} controllerSerialNumber - Serial number of the controller
|
||||
* @returns {boolean} True if deleted, false if not found
|
||||
*/
|
||||
static delete(id, controllerSerialNumber) {
|
||||
if (!controllerSerialNumber || typeof controllerSerialNumber !== 'string') {
|
||||
return false;
|
||||
}
|
||||
|
||||
const allHistory = this._getAllHistory();
|
||||
const controllerHistory = allHistory[controllerSerialNumber] || [];
|
||||
const index = controllerHistory.findIndex(entry => entry.id === id);
|
||||
|
||||
if (index >= 0) {
|
||||
controllerHistory.splice(index, 1);
|
||||
allHistory[controllerSerialNumber] = controllerHistory;
|
||||
this._saveAllHistory(allHistory);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Clear all saved finetune settings for a specific controller
|
||||
* @param {string} controllerSerialNumber - Serial number of the controller
|
||||
*/
|
||||
static clearAll(controllerSerialNumber) {
|
||||
if (!controllerSerialNumber || typeof controllerSerialNumber !== 'string') {
|
||||
return;
|
||||
}
|
||||
|
||||
const allHistory = this._getAllHistory();
|
||||
delete allHistory[controllerSerialNumber];
|
||||
this._saveAllHistory(allHistory);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get finetune data from a specific entry
|
||||
* @param {string} id - Entry ID
|
||||
* @param {string} controllerSerialNumber - Serial number of the controller
|
||||
* @returns {Array|null} Finetune data array or null if not found
|
||||
*/
|
||||
static getDataById(id, controllerSerialNumber) {
|
||||
const entry = this.getById(id, controllerSerialNumber);
|
||||
return entry ? entry.data : null;
|
||||
}
|
||||
|
||||
// ==================== PRIVATE METHODS ====================
|
||||
|
||||
/**
|
||||
* Get all history from storage (for all controllers)
|
||||
* @private
|
||||
*/
|
||||
static _getAllHistory() {
|
||||
try {
|
||||
return Storage.finetuneHistory.getAll();
|
||||
} catch (e) {
|
||||
console.error('Failed to parse finetune history:', e);
|
||||
return {};
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Save all history to storage
|
||||
* @private
|
||||
*/
|
||||
static _saveAllHistory(allHistory) {
|
||||
try {
|
||||
Storage.finetuneHistory.setAll(allHistory);
|
||||
} catch (e) {
|
||||
console.error('Failed to save finetune history:', e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate unique ID
|
||||
* @private
|
||||
*/
|
||||
static _generateId() {
|
||||
return `${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
|
||||
}
|
||||
|
||||
/**
|
||||
* Compare two data arrays for equality
|
||||
* @private
|
||||
*/
|
||||
static _dataEquals(data1, data2) {
|
||||
if (!Array.isArray(data1) || !Array.isArray(data2)) {
|
||||
return false;
|
||||
}
|
||||
if (data1.length !== data2.length) {
|
||||
return false;
|
||||
}
|
||||
return data1.every((val, idx) => val === data2[idx]);
|
||||
}
|
||||
}
|
||||
268
js/modals/calib-center-modal.js
Normal file
@@ -0,0 +1,268 @@
|
||||
'use strict';
|
||||
|
||||
import { sleep, la } from '../utils.js';
|
||||
import { l } from '../translations.js';
|
||||
|
||||
/**
|
||||
* Calibration Center Modal Class
|
||||
* Handles step-by-step manual stick center calibration
|
||||
*/
|
||||
export class CalibCenterModal {
|
||||
constructor(controllerInstance, doneCallback = null) {
|
||||
this.controller = controllerInstance;
|
||||
this.doneCallback = doneCallback;
|
||||
|
||||
this._initEventListeners();
|
||||
|
||||
// Hide the spinner in case it's showing after prior failure
|
||||
$("#calibNext").prop("disabled", false);
|
||||
$("#btnSpinner").hide();
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize event listeners for the calibration modal
|
||||
*/
|
||||
_initEventListeners() {
|
||||
$('#calibCenterModal').on('hidden.bs.modal', () => {
|
||||
console.log("Closing calibration modal");
|
||||
destroyCurrentInstance();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Set progress bar width
|
||||
* @param {number} i - Progress percentage (0-100)
|
||||
*/
|
||||
setProgress(i) {
|
||||
$("#calib-center-progress").css('width', '' + i + '%')
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove event listeners
|
||||
*/
|
||||
removeEventListeners() {
|
||||
$('#calibCenterModal').off('hidden.bs.modal');
|
||||
}
|
||||
|
||||
/**
|
||||
* Open the calibration modal
|
||||
*/
|
||||
async open() {
|
||||
la("calib_open");
|
||||
this.calibrationGenerator = this.calibrationSteps();
|
||||
await this.next();
|
||||
new bootstrap.Modal(document.getElementById('calibCenterModal'), {}).show();
|
||||
}
|
||||
|
||||
/**
|
||||
* Proceed to the next calibration step (legacy method)
|
||||
*/
|
||||
async next() {
|
||||
la("calib_next");
|
||||
const result = await this.calibrationGenerator.next();
|
||||
if (result.done) {
|
||||
this.calibrationGenerator = null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Generator function for calibration steps
|
||||
*/
|
||||
async* calibrationSteps() {
|
||||
// Step 1: Initial setup
|
||||
la("calib_step", {"i": 1});
|
||||
this._updateUI(1, "Stick center calibration", "Start", true);
|
||||
yield 1;
|
||||
|
||||
// Step 2: Initialize calibration
|
||||
la("calib_step", {"i": 2});
|
||||
this._showSpinner("Initializing...");
|
||||
await sleep(100);
|
||||
await this._multiCalibSticksBegin();
|
||||
await this._hideSpinner();
|
||||
|
||||
this._updateUI(2, "Calibration in progress", "Continue", false);
|
||||
yield 2;
|
||||
|
||||
// Steps 3-5: Sample calibration data
|
||||
for (let sampleStep = 3; sampleStep <= 5; sampleStep++) {
|
||||
la("calib_step", {"i": sampleStep});
|
||||
this._showSpinner("Sampling...");
|
||||
await sleep(150);
|
||||
await this._multiCalibSticksSample();
|
||||
await this._hideSpinner();
|
||||
|
||||
this._updateUI(sampleStep, "Calibration in progress", "Continue", false);
|
||||
yield sampleStep;
|
||||
}
|
||||
|
||||
// Step 6: Final sampling and storage
|
||||
la("calib_step", {"i": 6});
|
||||
this._showSpinner("Sampling...");
|
||||
await this._multiCalibSticksSample();
|
||||
await sleep(200);
|
||||
$("#calibNextText").text(l("Storing calibration..."));
|
||||
await sleep(500);
|
||||
await this._multiCalibSticksEnd();
|
||||
await this._hideSpinner();
|
||||
|
||||
this._updateUI(6, "Stick center calibration", "Done", true);
|
||||
yield 6;
|
||||
|
||||
this._close(true, l("Stick calibration completed"));
|
||||
}
|
||||
|
||||
/**
|
||||
* "Old" fully automatic stick center calibration
|
||||
*/
|
||||
async multiCalibrateSticks() {
|
||||
if(!this.controller.isConnected())
|
||||
return;
|
||||
|
||||
this.setProgress(0);
|
||||
new bootstrap.Modal(document.getElementById('autoCalibCenterModal'), {}).show();
|
||||
|
||||
await sleep(1000);
|
||||
|
||||
// Use the controller manager's calibrateSticks method with UI progress updates
|
||||
this.setProgress(10);
|
||||
|
||||
const result = await this.controller.calibrateSticks((progress) => {
|
||||
this.setProgress(progress);
|
||||
});
|
||||
|
||||
await sleep(500);
|
||||
this._close(true, result?.message);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper functions for step-by-step manual calibration UI
|
||||
*/
|
||||
async _multiCalibSticksBegin() {
|
||||
await this.controller.calibrateSticksBegin();
|
||||
}
|
||||
|
||||
async _multiCalibSticksEnd() {
|
||||
await this.controller.calibrateSticksEnd();
|
||||
}
|
||||
|
||||
async _multiCalibSticksSample() {
|
||||
await this.controller.calibrateSticksSample();
|
||||
}
|
||||
|
||||
/**
|
||||
* Close the calibration modal
|
||||
*/
|
||||
_close(success = false, message = null) {
|
||||
// Call the done callback if provided
|
||||
if (this.doneCallback && typeof this.doneCallback === 'function') {
|
||||
this.doneCallback(success, message);
|
||||
}
|
||||
|
||||
$(".modal.show").modal("hide");
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the UI for a specific calibration step
|
||||
*/
|
||||
_updateUI(step, title, buttonText, allowDismiss) {
|
||||
// Hide all step lists and remove active class
|
||||
for (let j = 1; j < 7; j++) {
|
||||
$("#list-" + j).hide();
|
||||
$("#list-" + j + "-calib").removeClass("active");
|
||||
}
|
||||
|
||||
// Show current step and mark as active
|
||||
$("#list-" + step).show();
|
||||
$("#list-" + step + "-calib").addClass("active");
|
||||
|
||||
// Update title and button text
|
||||
$("#calibTitle").text(l(title));
|
||||
$("#calibNextText").text(l(buttonText));
|
||||
|
||||
// Show/hide cross icon
|
||||
if (allowDismiss) {
|
||||
$("#calibCross").show();
|
||||
} else {
|
||||
$("#calibCross").hide();
|
||||
}
|
||||
|
||||
// Show/hide Quick calibrate button - only show on step 1 (welcome screen)
|
||||
$("#quickCalibBtn").toggle(step === 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Show spinner and disable button
|
||||
*/
|
||||
_showSpinner(text) {
|
||||
$("#calibNextText").text(l(text));
|
||||
$("#btnSpinner").show();
|
||||
$("#calibNext").prop("disabled", true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Hide spinner and enable button
|
||||
*/
|
||||
async _hideSpinner() {
|
||||
await sleep(200);
|
||||
$("#calibNext").prop("disabled", false);
|
||||
$("#btnSpinner").hide();
|
||||
}
|
||||
}
|
||||
|
||||
// Global reference to the current calibration instance
|
||||
let currentCalibCenterInstance = null;
|
||||
|
||||
/**
|
||||
* Helper function to safely clear the current calibration instance
|
||||
*/
|
||||
function destroyCurrentInstance() {
|
||||
if (currentCalibCenterInstance) {
|
||||
console.log("Destroying current calibration instance");
|
||||
currentCalibCenterInstance.removeEventListeners();
|
||||
currentCalibCenterInstance = null;
|
||||
}
|
||||
}
|
||||
|
||||
// Legacy function exports for backward compatibility
|
||||
export async function calibrate_stick_centers(controller, doneCallback = null) {
|
||||
currentCalibCenterInstance = new CalibCenterModal(controller, doneCallback);
|
||||
await currentCalibCenterInstance.open();
|
||||
}
|
||||
|
||||
async function calib_next() {
|
||||
if (currentCalibCenterInstance) {
|
||||
await currentCalibCenterInstance.next();
|
||||
}
|
||||
}
|
||||
|
||||
// Function to close current manual calibration and start auto calibration instead
|
||||
async function quick_calibrate_instead() {
|
||||
if (currentCalibCenterInstance) {
|
||||
// Get the callback from the current instance before closing
|
||||
const doneCallback = currentCalibCenterInstance.doneCallback;
|
||||
|
||||
// Close the current manual calibration modal (without calling callback)
|
||||
currentCalibCenterInstance.doneCallback = null; // Temporarily remove callback to avoid double-calling
|
||||
currentCalibCenterInstance._close();
|
||||
|
||||
// Get the controller from the current instance
|
||||
const { controller } = currentCalibCenterInstance;
|
||||
|
||||
// Destroy the current instance
|
||||
destroyCurrentInstance();
|
||||
|
||||
// Start auto calibration with the original callback
|
||||
await auto_calibrate_stick_centers(controller, {}, doneCallback);
|
||||
}
|
||||
}
|
||||
|
||||
// "Old" fully automatic stick center calibration
|
||||
export async function auto_calibrate_stick_centers(controller, doneCallback = null) {
|
||||
currentCalibCenterInstance = new CalibCenterModal(controller, doneCallback);
|
||||
await currentCalibCenterInstance.multiCalibrateSticks();
|
||||
}
|
||||
|
||||
// Legacy compatibility - expose functions to window for HTML onclick handlers
|
||||
window.calib_next = calib_next;
|
||||
window.quick_calibrate_instead = quick_calibrate_instead;
|
||||
422
js/modals/calib-range-modal.js
Normal file
@@ -0,0 +1,422 @@
|
||||
'use strict';
|
||||
|
||||
import { sleep, float_to_str } from '../utils.js';
|
||||
import { l } from '../translations.js';
|
||||
import { CIRCULARITY_DATA_SIZE, draw_stick_dial } from '../stick-renderer.js';
|
||||
|
||||
const SECONDS_UNTIL_UNLOCK = 15;
|
||||
|
||||
/**
|
||||
* Calibrate Stick Range Modal Class
|
||||
* Handles stick range calibration
|
||||
*/
|
||||
export class CalibRangeModal {
|
||||
constructor(controllerInstance, { ll_data, rr_data }, doneCallback = null, expertMode = false) {
|
||||
// Dependencies
|
||||
this.controller = controllerInstance;
|
||||
this.ll_data = ll_data;
|
||||
this.rr_data = rr_data;
|
||||
|
||||
// Progress tracking
|
||||
this.buttonText = l("Done");
|
||||
this.leftNonZeroCount = 0;
|
||||
this.rightNonZeroCount = 0;
|
||||
this.leftFullCycles = 0;
|
||||
this.rightFullCycles = 0;
|
||||
this.requiredFullCycles = 4;
|
||||
this.progressUpdateInterval = null;
|
||||
|
||||
// Countdown timer
|
||||
this.countdownSeconds = 0;
|
||||
this.countdownInterval = null;
|
||||
|
||||
// Progress alert enhancement
|
||||
this.leftCycleProgress = 0;
|
||||
this.rightCycleProgress = 0;
|
||||
|
||||
this.expertMode = expertMode;
|
||||
|
||||
this.allDonePromiseResolve = undefined;
|
||||
this.doneCallback = doneCallback;
|
||||
|
||||
this.hasSingleStick = (this.controller.currentController.getNumberOfSticks() == 1);
|
||||
|
||||
// Stick rendering
|
||||
this.stickRenderInterval = null;
|
||||
this.currentStickPositions = {
|
||||
left: { x: 0, y: 0 },
|
||||
right: { x: 0, y: 0 }
|
||||
};
|
||||
|
||||
this._initEventListeners();
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize event listeners for the calibration modal
|
||||
*/
|
||||
_initEventListeners() {
|
||||
$('#rangeModal').on('hidden.bs.modal', () => {
|
||||
console.log("Closing range calibration modal");
|
||||
if (currentCalibRangeInstance === this) {
|
||||
this.onClose().catch(err => console.error("Error in onClose:", err));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove event listeners
|
||||
*/
|
||||
removeEventListeners() {
|
||||
$('#rangeModal').off('hidden.bs.modal');
|
||||
}
|
||||
|
||||
async open() {
|
||||
if(!this.controller.isConnected())
|
||||
return;
|
||||
|
||||
$('#range-calibration-alert').hide();
|
||||
$('#keep-rotating-alert').removeClass('blink-text');
|
||||
$('#range-done-btn')
|
||||
.prop('disabled', true)
|
||||
.toggleClass('btn-primary', false)
|
||||
.toggleClass('btn-outline-primary', true);
|
||||
bootstrap.Modal.getOrCreateInstance('#rangeModal').show();
|
||||
|
||||
this.ll_data.fill(0);
|
||||
this.rr_data.fill(0);
|
||||
|
||||
// Start rendering loop
|
||||
this.startStickRendering();
|
||||
|
||||
this._updateUIVisibility();
|
||||
if (!this.expertMode) {
|
||||
this.updateProgress(); // reset progress bar
|
||||
this.startProgressMonitoring();
|
||||
|
||||
this.resetAlertEnhancement();
|
||||
this.startCountdown();
|
||||
}
|
||||
|
||||
await sleep(1000);
|
||||
await this.controller.calibrateRangeBegin();
|
||||
}
|
||||
|
||||
async onClose() {
|
||||
this.stopStickRendering();
|
||||
this.stopProgressMonitoring();
|
||||
this.stopCountdown();
|
||||
|
||||
const result = await this.controller.calibrateRangeOnClose();
|
||||
|
||||
// Call the done callback if provided
|
||||
if (result && this.doneCallback && typeof this.doneCallback === 'function') {
|
||||
this.doneCallback(result.success, result.message);
|
||||
}
|
||||
if (this.allDonePromiseResolve) {
|
||||
this.allDonePromiseResolve();
|
||||
}
|
||||
destroyCurrentInstance();
|
||||
}
|
||||
|
||||
/**
|
||||
* Start monitoring progress by checking ll_data and rr_data arrays
|
||||
*/
|
||||
startProgressMonitoring() {
|
||||
this.progressUpdateInterval = setInterval(() => {
|
||||
this.checkDataProgress();
|
||||
}, 100); // Check every 100ms
|
||||
}
|
||||
|
||||
/**
|
||||
* Stop progress monitoring
|
||||
*/
|
||||
stopProgressMonitoring() {
|
||||
if (this.progressUpdateInterval) {
|
||||
clearInterval(this.progressUpdateInterval);
|
||||
this.progressUpdateInterval = null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Start countdown timer for Done button
|
||||
*/
|
||||
startCountdown() {
|
||||
this.countdownSeconds = SECONDS_UNTIL_UNLOCK;
|
||||
this.updateCountdownButton();
|
||||
|
||||
// Every second, update countdown
|
||||
this.countdownInterval = setInterval(() => {
|
||||
this.countdownSeconds--;
|
||||
// If there is only one stick, sum two times leftCycleProgress, so that it can reach 100.
|
||||
if (this.countdownSeconds <= 0 || this.leftCycleProgress + (this.hasSingleStick ? this.leftCycleProgress : this.rightCycleProgress) >= 100) {
|
||||
this.stopCountdown();
|
||||
this._enableDoneButton();
|
||||
} else {
|
||||
this.checkAndEnhanceAlert();
|
||||
}
|
||||
this.updateCountdownButton();
|
||||
}, 1000);
|
||||
}
|
||||
|
||||
/**
|
||||
* Stop countdown timer
|
||||
*/
|
||||
stopCountdown() {
|
||||
if (!this.countdownInterval) return;
|
||||
|
||||
clearInterval(this.countdownInterval);
|
||||
this.countdownInterval = null;
|
||||
this.countdownSeconds = 0;
|
||||
this.updateCountdownButton();
|
||||
}
|
||||
|
||||
/**
|
||||
* Update countdown button text and state
|
||||
*/
|
||||
updateCountdownButton() {
|
||||
const seconds = this.countdownSeconds;
|
||||
const text = this.buttonText + (seconds > 0 ? ` (${seconds})` : "");
|
||||
$('#range-done-btn').text(text);
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable the Done button and hide calibration alert
|
||||
*/
|
||||
_enableDoneButton() {
|
||||
$('#range-calibration-alert').hide();
|
||||
$('#range-done-btn')
|
||||
.prop('disabled', false)
|
||||
.toggleClass('btn-primary', true)
|
||||
.toggleClass('btn-outline-primary', false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if ll_data and rr_data have received data
|
||||
*/
|
||||
checkDataProgress() {
|
||||
const JOYSTICK_EXTREME_THRESHOLD = 0.80;
|
||||
const CIRCLE_FILL_THRESHOLD = 0.95;
|
||||
|
||||
// Count the number of times the joysticks have been rotated full circle
|
||||
const leftNonZeroCount = this.ll_data.filter(v => v > JOYSTICK_EXTREME_THRESHOLD).length
|
||||
const leftFillRatio = leftNonZeroCount / CIRCULARITY_DATA_SIZE;
|
||||
if (leftFillRatio >= CIRCLE_FILL_THRESHOLD) {
|
||||
this.leftFullCycles++;
|
||||
this.ll_data.fill(0);
|
||||
}
|
||||
|
||||
if(this.hasSingleStick) {
|
||||
// Update progress if counts changed
|
||||
if (leftNonZeroCount !== this.leftNonZeroCount) {
|
||||
this.leftNonZeroCount = leftNonZeroCount;
|
||||
this.updateProgress();
|
||||
}
|
||||
} else {
|
||||
const rightNonZeroCount = this.rr_data.filter(v => v > JOYSTICK_EXTREME_THRESHOLD).length;
|
||||
const rightFillRatio = rightNonZeroCount / CIRCULARITY_DATA_SIZE;
|
||||
if (rightFillRatio >= CIRCLE_FILL_THRESHOLD) {
|
||||
this.rightFullCycles++;
|
||||
this.rr_data.fill(0);
|
||||
}
|
||||
|
||||
// Update progress if counts changed
|
||||
if (leftNonZeroCount !== this.leftNonZeroCount || rightNonZeroCount !== this.rightNonZeroCount) {
|
||||
this.leftNonZeroCount = leftNonZeroCount;
|
||||
this.rightNonZeroCount = rightNonZeroCount;
|
||||
this.updateProgress();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the progress bar and enable/disable Done button
|
||||
*/
|
||||
updateProgress() {
|
||||
// Calculate progress based on full cycles completed
|
||||
// Each stick needs to complete 4 full cycles to contribute 50% to total progress
|
||||
const leftCycleProgress = Math.min(1, this.leftFullCycles / this.requiredFullCycles) * 50;
|
||||
const rightCycleProgress = Math.min(1, this.rightFullCycles / this.requiredFullCycles) * 50;
|
||||
this.leftCycleProgress = leftCycleProgress;
|
||||
this.rightCycleProgress = rightCycleProgress;
|
||||
|
||||
// Add current partial progress for visual feedback
|
||||
const leftCurrentProgress = (this.leftNonZeroCount / CIRCULARITY_DATA_SIZE) * (50 / this.requiredFullCycles);
|
||||
const rightCurrentProgress = (this.rightNonZeroCount / CIRCULARITY_DATA_SIZE) * (50 / this.requiredFullCycles);
|
||||
|
||||
const totalProgress = Math.round(
|
||||
this.hasSingleStick ?
|
||||
Math.min(100, 2*(leftCycleProgress + leftCurrentProgress)) : (
|
||||
Math.min(50, leftCycleProgress + leftCurrentProgress) +
|
||||
Math.min(50, rightCycleProgress + rightCurrentProgress)
|
||||
)
|
||||
);
|
||||
|
||||
const $progressBar = $('#range-progress-bar');
|
||||
const $progressText = $('#range-progress-text');
|
||||
|
||||
$progressBar
|
||||
.css('width', `${totalProgress}%`)
|
||||
.attr('aria-valuenow', totalProgress);
|
||||
|
||||
if(!this.hasSingleStick) {
|
||||
$progressText.text(`${totalProgress}% (L:${this.leftFullCycles}/${this.requiredFullCycles}, R:${this.rightFullCycles}/${this.requiredFullCycles})`);
|
||||
} else {
|
||||
$progressText.text(`${totalProgress}% (L:${this.leftFullCycles}/${this.requiredFullCycles})`);
|
||||
}
|
||||
}
|
||||
|
||||
checkAndEnhanceAlert() {
|
||||
const secondsElapsed = SECONDS_UNTIL_UNLOCK - this.countdownSeconds;
|
||||
|
||||
const alertIsVisible = $('#range-calibration-alert').is(":visible")
|
||||
const progressBelowThreshold = this.leftCycleProgress < 10 || (this.hasSingleStick ? false : this.rightCycleProgress < 10);
|
||||
|
||||
if (secondsElapsed >= 5 && progressBelowThreshold && !alertIsVisible) {
|
||||
$('#range-calibration-alert').show();
|
||||
}
|
||||
|
||||
const isBlinking = $('#keep-rotating-alert').hasClass('blink-text');
|
||||
if (secondsElapsed >= 7 && progressBelowThreshold && !isBlinking) {
|
||||
$('#keep-rotating-alert').addClass('blink-text');
|
||||
}
|
||||
}
|
||||
|
||||
resetAlertEnhancement() {
|
||||
$('#keep-rotating-alert').removeClass('blink-text');
|
||||
}
|
||||
|
||||
/**
|
||||
* Update UI visibility based on expert mode
|
||||
*/
|
||||
_updateUIVisibility() {
|
||||
if (this.expertMode) {
|
||||
// Hide progress bar, progress text, and alert in expert mode. Enable Done button immediately.
|
||||
$('#range-progress-container').hide();
|
||||
$('#range-progress-text-container').hide();
|
||||
$('#range-calibration-alert').hide();
|
||||
this._enableDoneButton();
|
||||
} else {
|
||||
// Show progress bar and progress text in normal mode
|
||||
$('#range-progress-container').show();
|
||||
$('#range-progress-text-container').show();
|
||||
}
|
||||
|
||||
// Hide right stick elements if single stick controller
|
||||
$('#range-right-stick-canvas').toggle(!this.hasSingleStick);
|
||||
$('#range-rx').toggle(!this.hasSingleStick);
|
||||
$('#range-ry').toggle(!this.hasSingleStick);
|
||||
}
|
||||
|
||||
/**
|
||||
* Clear a canvas with white background
|
||||
*/
|
||||
_clearCanvas(ctx, canvas) {
|
||||
if (!ctx) return;
|
||||
ctx.fillStyle = '#ffffff';
|
||||
ctx.fillRect(0, 0, canvas.width, canvas.height);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update current stick positions for rendering
|
||||
*/
|
||||
handleControllerInput({sticks}) {
|
||||
if (sticks?.left) {
|
||||
this.currentStickPositions.left = { ...sticks.left };
|
||||
}
|
||||
if (sticks?.right) {
|
||||
this.currentStickPositions.right = { ...sticks.right };
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Start stick rendering loop
|
||||
*/
|
||||
startStickRendering() {
|
||||
if (this.stickRenderInterval) return;
|
||||
|
||||
this.stickRenderInterval = setInterval(() => {
|
||||
this._renderSticks();
|
||||
}, 16); // ~60 FPS
|
||||
}
|
||||
|
||||
/**
|
||||
* Stop stick rendering loop
|
||||
*/
|
||||
stopStickRendering() {
|
||||
if (this.stickRenderInterval) {
|
||||
clearInterval(this.stickRenderInterval);
|
||||
this.stickRenderInterval = null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Render both stick dials
|
||||
*/
|
||||
_renderSticks() {
|
||||
const leftCanvas = document.getElementById('range-left-stick-canvas');
|
||||
const leftCtx = leftCanvas.getContext('2d');
|
||||
|
||||
// Draw stick dials in normal mode (no circularity data, no zoom)
|
||||
const size = 60;
|
||||
const centerX = leftCanvas.width / 2;
|
||||
const centerY = leftCanvas.height / 2;
|
||||
const {left, right} = this.currentStickPositions;
|
||||
|
||||
this._clearCanvas(leftCtx, leftCanvas);
|
||||
draw_stick_dial(leftCtx, centerX, centerY, size, left.x, left.y);
|
||||
|
||||
const precision = 2;
|
||||
$("#range-lx-lbl").text(float_to_str(left.x, precision));
|
||||
$("#range-ly-lbl").text(float_to_str(left.y, precision));
|
||||
|
||||
// Only render right stick if not a single stick controller
|
||||
if (!this.hasSingleStick) {
|
||||
const rightCanvas = document.getElementById('range-right-stick-canvas');
|
||||
const rightCtx = rightCanvas.getContext('2d');
|
||||
|
||||
this._clearCanvas(rightCtx, rightCanvas);
|
||||
draw_stick_dial(rightCtx, centerX, centerY, size, right.x, right.y);
|
||||
|
||||
$("#range-rx-lbl").text(float_to_str(right.x, precision));
|
||||
$("#range-ry-lbl").text(float_to_str(right.y, precision));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Global reference to the current range calibration instance
|
||||
let currentCalibRangeInstance = null;
|
||||
|
||||
function destroyCurrentInstance() {
|
||||
if (currentCalibRangeInstance) {
|
||||
console.log("Destroying current range calibration instance");
|
||||
currentCalibRangeInstance.removeEventListeners();
|
||||
currentCalibRangeInstance = null;
|
||||
}
|
||||
}
|
||||
|
||||
export async function calibrate_range(controller, dependencies, doneCallback = null, expertMode = false) {
|
||||
destroyCurrentInstance(); // Clean up any existing instance
|
||||
currentCalibRangeInstance = new CalibRangeModal(controller, dependencies, doneCallback, expertMode);
|
||||
|
||||
await currentCalibRangeInstance.open();
|
||||
return new Promise((resolve) => {
|
||||
currentCalibRangeInstance.allDonePromiseResolve = resolve;
|
||||
});
|
||||
}
|
||||
|
||||
async function calibrate_range_on_close() {
|
||||
if (currentCalibRangeInstance) {
|
||||
bootstrap.Modal.getOrCreateInstance('#rangeModal').hide();
|
||||
}
|
||||
}
|
||||
|
||||
export function rangeCalibHandleControllerInput(changes) {
|
||||
if (currentCalibRangeInstance) {
|
||||
currentCalibRangeInstance.handleControllerInput(changes);
|
||||
}
|
||||
}
|
||||
|
||||
// Expose functions to window for HTML onclick handlers
|
||||
window.calibrate_range_on_close = calibrate_range_on_close;
|
||||
200
js/modals/calibration-history-modal.js
Normal file
@@ -0,0 +1,200 @@
|
||||
'use strict';
|
||||
|
||||
import { FinetuneHistory } from '../finetune-history.js';
|
||||
import { formatLocalizedDate, la } from '../utils.js';
|
||||
import { l } from '../translations.js';
|
||||
|
||||
export class CalibrationHistoryModal {
|
||||
constructor(controllerInstance = null, doneCallback = null) {
|
||||
this.modalElement = null;
|
||||
this.bootstrapModal = null;
|
||||
this.currentFinetuneData = null;
|
||||
this.currentControllerSerialNumber = null;
|
||||
this.controller = controllerInstance;
|
||||
this.doneCallback = doneCallback;
|
||||
|
||||
this._boundModalHidden = () => {
|
||||
destroyCurrentInstance();
|
||||
};
|
||||
|
||||
this._initEventListeners();
|
||||
}
|
||||
|
||||
_initEventListeners() {
|
||||
this.modalElement = document.getElementById('calibrationHistoryModal');
|
||||
if (this.modalElement) {
|
||||
this.bootstrapModal = new bootstrap.Modal(this.modalElement);
|
||||
this.modalElement.addEventListener('hidden.bs.modal', this._boundModalHidden);
|
||||
}
|
||||
}
|
||||
|
||||
removeEventListeners() {
|
||||
if (this.modalElement) {
|
||||
this.modalElement.removeEventListener('hidden.bs.modal', this._boundModalHidden);
|
||||
}
|
||||
}
|
||||
|
||||
async open(currentFinetuneData = null, controllerSerialNumber = null) {
|
||||
this.currentFinetuneData = currentFinetuneData;
|
||||
this.currentControllerSerialNumber = controllerSerialNumber;
|
||||
await this._populateHistory();
|
||||
this.bootstrapModal.show();
|
||||
}
|
||||
|
||||
close() {
|
||||
if (this.bootstrapModal) {
|
||||
this.bootstrapModal.hide();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Populate the history list
|
||||
* @private
|
||||
*/
|
||||
async _populateHistory() {
|
||||
const history = FinetuneHistory.getAll(this.currentControllerSerialNumber);
|
||||
const container = document.getElementById('historyListContainer');
|
||||
|
||||
if (!history || history.length === 0) {
|
||||
container.innerHTML = `<p class="text-muted ds-i18n">${l('No saved calibrations found.')}</p>`;
|
||||
document.getElementById('clearAllBtn').style.display = 'none';
|
||||
return;
|
||||
}
|
||||
|
||||
document.getElementById('clearAllBtn').style.display = 'block';
|
||||
|
||||
let html = '<div class="list-group">';
|
||||
|
||||
history.forEach(entry => {
|
||||
const date = formatLocalizedDate(entry.timestamp);
|
||||
const isCurrent = this.currentFinetuneData && this._dataEquals(entry.data, this.currentFinetuneData);
|
||||
|
||||
html += `
|
||||
<div class="list-group-item">
|
||||
<div class="d-flex justify-content-between align-items-start">
|
||||
<div class="flex-grow-1">
|
||||
<h6 class="mb-1">${date}</h6>
|
||||
<p class="mb-0 small">${l('Values')}: ${entry.data.join(', ')}</p>
|
||||
</div>
|
||||
<div class="btn-group-sm" role="group">
|
||||
${isCurrent ?
|
||||
`<button type="button" class="btn btn-sm btn-success ds-i18n" disabled>${l('Current')}</button>` :
|
||||
`<button type="button" class="btn btn-sm btn-primary ds-i18n" onclick="calibration_history_restore('${entry.id}')">${l('Restore')}</button>
|
||||
<button type="button" class="btn btn-sm btn-outline-danger ds-i18n" onclick="calibration_history_delete('${entry.id}')">${l('Delete')}</button>`
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
});
|
||||
|
||||
html += '</div>';
|
||||
container.innerHTML = html;
|
||||
}
|
||||
|
||||
/**
|
||||
* Compare two data arrays for equality
|
||||
* @private
|
||||
*/
|
||||
_dataEquals(data1, data2) {
|
||||
if (!Array.isArray(data1) || !Array.isArray(data2)) {
|
||||
return false;
|
||||
}
|
||||
if (data1.length !== data2.length) {
|
||||
return false;
|
||||
}
|
||||
return data1.every((val, idx) => val === data2[idx]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Apply finetune calibration to the controller
|
||||
* @param {Array} finetuneData - The finetune data to apply
|
||||
* @private
|
||||
*/
|
||||
async _applyCalibration(finetuneData) {
|
||||
if (!this.controller || !this.controller.isConnected()) {
|
||||
throw new Error('Controller not connected');
|
||||
}
|
||||
if (!Array.isArray(finetuneData) || finetuneData.length !== 12) {
|
||||
throw new Error('Invalid finetune data');
|
||||
}
|
||||
await this.controller.writeFinetuneData(finetuneData);
|
||||
this.controller.setHasChangesToWrite(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Restore a saved calibration
|
||||
* @param {string} entryId - The ID of the entry to revert to
|
||||
*/
|
||||
async restoreCalibration(entryId) {
|
||||
const entry = FinetuneHistory.getById(entryId, this.currentControllerSerialNumber);
|
||||
if (!entry) throw new Error('Calibration settings not found.');
|
||||
|
||||
await this._applyCalibration(entry.data);
|
||||
this.close();
|
||||
this.doneCallback(true, l('The calibration was restored successfully! Remember to save the changes in order not to loose them when the controller is rebooted.'));
|
||||
la("calibration_history_restored");
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a saved entry
|
||||
* @param {string} entryId - The ID of the entry to delete
|
||||
*/
|
||||
async delete(entryId) {
|
||||
const entry = FinetuneHistory.getById(entryId, this.currentControllerSerialNumber);
|
||||
if (!entry) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (confirm(l(`Delete this calibration entry?`))) {
|
||||
FinetuneHistory.delete(entryId, this.currentControllerSerialNumber);
|
||||
await this._populateHistory();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Clear all saved entries
|
||||
*/
|
||||
async clearAll() {
|
||||
if (confirm(l('Delete all calibration history for this controller? This cannot be undone.'))) {
|
||||
FinetuneHistory.clearAll(this.currentControllerSerialNumber);
|
||||
await this._populateHistory();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let currentCalibrationHistoryInstance = null;
|
||||
|
||||
function destroyCurrentInstance() {
|
||||
if (currentCalibrationHistoryInstance) {
|
||||
currentCalibrationHistoryInstance.removeEventListeners();
|
||||
currentCalibrationHistoryInstance = null;
|
||||
}
|
||||
}
|
||||
|
||||
export async function show_calibration_history_modal(controllerInstance = null, currentFinetuneData = null, controllerSerialNumber = null, doneCallback = null) {
|
||||
destroyCurrentInstance();
|
||||
|
||||
currentCalibrationHistoryInstance = new CalibrationHistoryModal(controllerInstance, doneCallback);
|
||||
await currentCalibrationHistoryInstance.open(currentFinetuneData, controllerSerialNumber);
|
||||
}
|
||||
|
||||
window.calibration_history_restore = (entryId) => {
|
||||
if (currentCalibrationHistoryInstance) {
|
||||
currentCalibrationHistoryInstance.restoreCalibration(entryId);
|
||||
}
|
||||
};
|
||||
|
||||
window.calibration_history_delete = (entryId) => {
|
||||
if (currentCalibrationHistoryInstance) {
|
||||
currentCalibrationHistoryInstance.delete(entryId);
|
||||
}
|
||||
};
|
||||
|
||||
window.calibration_history_clear_all = () => {
|
||||
if (currentCalibrationHistoryInstance) {
|
||||
currentCalibrationHistoryInstance.clearAll();
|
||||
}
|
||||
};
|
||||
|
||||
window.show_calibration_history_modal = show_calibration_history_modal;
|
||||
1523
js/modals/finetune-modal.js
Normal file
1663
js/modals/quick-test-modal.js
Normal file
210
js/stick-renderer.js
Normal file
@@ -0,0 +1,210 @@
|
||||
'use strict';
|
||||
|
||||
// Constants
|
||||
export const CIRCULARITY_DATA_SIZE = 48; // Number of angular positions to sample
|
||||
|
||||
/**
|
||||
* Draws analog stick position on a canvas with various visualization options.
|
||||
* @param {CanvasRenderingContext2D} ctx - Canvas rendering context
|
||||
* @param {number} center_x - X coordinate of stick center
|
||||
* @param {number} center_y - Y coordinate of stick center
|
||||
* @param {number} sz - Size/radius of the stick area
|
||||
* @param {number} stick_x - Current stick X position (-1 to 1)
|
||||
* @param {number} stick_y - Current stick Y position (-1 to 1)
|
||||
* @param {Object} opts - Options object
|
||||
* @param {number[]|null} opts.circularity_data - Array of circularity test data
|
||||
* @param {boolean} opts.enable_zoom_center - Whether to apply center zoom transformation
|
||||
* @param {boolean} opts.highlight - Whether to highlight the stick position
|
||||
*/
|
||||
export function draw_stick_dial(ctx, center_x, center_y, sz, stick_x, stick_y, opts = {}) {
|
||||
const { circularity_data = null, enable_zoom_center = false, highlight } = opts;
|
||||
|
||||
// Draw base circle
|
||||
ctx.lineWidth = 1;
|
||||
ctx.fillStyle = '#ffffff';
|
||||
ctx.strokeStyle = '#000000';
|
||||
ctx.beginPath();
|
||||
ctx.arc(center_x, center_y, sz, 0, 2 * Math.PI);
|
||||
ctx.closePath();
|
||||
ctx.fill();
|
||||
ctx.stroke();
|
||||
|
||||
// Helper function for circularity visualization color
|
||||
function cc_to_color(cc) {
|
||||
const dd = Math.sqrt(Math.pow((1.0 - cc), 2));
|
||||
let hh;
|
||||
if(cc <= 1.0)
|
||||
hh = 220 - 220 * Math.min(1.0, Math.max(0, (dd - 0.05)) / 0.1);
|
||||
else
|
||||
hh = (245 + (360-245) * Math.min(1.0, Math.max(0, (dd - 0.05)) / 0.15)) % 360;
|
||||
return hh;
|
||||
}
|
||||
|
||||
// Draw circularity visualization if data provided
|
||||
if (circularity_data?.length > 0) {
|
||||
const MAX_N = CIRCULARITY_DATA_SIZE;
|
||||
|
||||
for(let i = 0; i < MAX_N; i++) {
|
||||
const kd = circularity_data[i];
|
||||
const kd1 = circularity_data[(i+1) % CIRCULARITY_DATA_SIZE];
|
||||
if (kd === undefined || kd1 === undefined) continue;
|
||||
const ka = i * Math.PI * 2 / MAX_N;
|
||||
const ka1 = ((i+1)%MAX_N) * 2 * Math.PI / MAX_N;
|
||||
|
||||
const kx = Math.cos(ka) * kd;
|
||||
const ky = Math.sin(ka) * kd;
|
||||
const kx1 = Math.cos(ka1) * kd1;
|
||||
const ky1 = Math.sin(ka1) * kd1;
|
||||
|
||||
ctx.beginPath();
|
||||
ctx.moveTo(center_x, center_y);
|
||||
ctx.lineTo(center_x+kx*sz, center_y+ky*sz);
|
||||
ctx.lineTo(center_x+kx1*sz, center_y+ky1*sz);
|
||||
ctx.lineTo(center_x, center_y);
|
||||
ctx.closePath();
|
||||
|
||||
const cc = (kd + kd1) / 2;
|
||||
const hh = cc_to_color(cc);
|
||||
ctx.fillStyle = 'hsla(' + parseInt(hh) + ', 100%, 50%, 0.5)';
|
||||
ctx.fill();
|
||||
}
|
||||
}
|
||||
|
||||
// Draw circularity error text if enough data provided
|
||||
if (circularity_data?.filter(n => n > 0.3).length > 10) {
|
||||
const circularityError = calculateCircularityError(circularity_data);
|
||||
|
||||
ctx.fillStyle = '#fff';
|
||||
ctx.strokeStyle = '#444';
|
||||
ctx.lineWidth = 3;
|
||||
ctx.textAlign = 'center';
|
||||
ctx.textBaseline = 'middle';
|
||||
|
||||
ctx.font = '24px Arial';
|
||||
const text_y = center_y + sz * 0.5;
|
||||
const text = `${circularityError.toFixed(1)} %`;
|
||||
|
||||
ctx.strokeText(text, center_x, text_y);
|
||||
ctx.fillText(text, center_x, text_y);
|
||||
}
|
||||
|
||||
// Draw crosshairs
|
||||
ctx.strokeStyle = '#aaaaaa';
|
||||
ctx.lineWidth = 1;
|
||||
ctx.beginPath();
|
||||
ctx.moveTo(center_x-sz, center_y);
|
||||
ctx.lineTo(center_x+sz, center_y);
|
||||
ctx.closePath();
|
||||
ctx.stroke();
|
||||
|
||||
ctx.beginPath();
|
||||
ctx.moveTo(center_x, center_y-sz);
|
||||
ctx.lineTo(center_x, center_y+sz);
|
||||
ctx.closePath();
|
||||
ctx.stroke();
|
||||
|
||||
// Apply center zoom transformation if enabled
|
||||
let display_x = stick_x;
|
||||
let display_y = stick_y;
|
||||
if (enable_zoom_center) {
|
||||
const transformed = apply_center_zoom(stick_x, stick_y);
|
||||
display_x = transformed.x;
|
||||
display_y = transformed.y;
|
||||
|
||||
// Draw light gray circle at 50% radius to show border of zoomed center
|
||||
ctx.strokeStyle = '#d3d3d3'; // light gray
|
||||
ctx.lineWidth = 1;
|
||||
ctx.beginPath();
|
||||
ctx.arc(center_x, center_y, sz * 0.5, 0, 2 * Math.PI);
|
||||
ctx.stroke();
|
||||
}
|
||||
|
||||
ctx.fillStyle = '#000000';
|
||||
ctx.strokeStyle = '#000000';
|
||||
|
||||
// Draw stick line with variable thickness
|
||||
// Calculate distance from center
|
||||
const stick_distance = Math.sqrt(display_x*display_x + display_y*display_y);
|
||||
const boundary_radius = 0.5; // 50% radius
|
||||
|
||||
// Determine if we need to draw a two-segment line
|
||||
const use_two_segments = enable_zoom_center && stick_distance > boundary_radius;
|
||||
if (use_two_segments) {
|
||||
// Calculate boundary point
|
||||
const boundary_x = (display_x / stick_distance) * boundary_radius;
|
||||
const boundary_y = (display_y / stick_distance) * boundary_radius;
|
||||
|
||||
// First segment: thicker line from center to boundary
|
||||
ctx.lineWidth = 3;
|
||||
ctx.beginPath();
|
||||
ctx.moveTo(center_x, center_y);
|
||||
ctx.lineTo(center_x + boundary_x*sz, center_y + boundary_y*sz);
|
||||
ctx.stroke();
|
||||
|
||||
// Second segment: thinner line from boundary to stick position
|
||||
ctx.lineWidth = 1;
|
||||
ctx.beginPath();
|
||||
ctx.moveTo(center_x + boundary_x*sz, center_y + boundary_y*sz);
|
||||
ctx.lineTo(center_x + display_x*sz, center_y + display_y*sz);
|
||||
ctx.stroke();
|
||||
} else {
|
||||
// Single line from center to stick position
|
||||
ctx.lineWidth = enable_zoom_center ? 3 : 1;
|
||||
ctx.beginPath();
|
||||
ctx.moveTo(center_x, center_y);
|
||||
ctx.lineTo(center_x + display_x*sz, center_y + display_y*sz);
|
||||
ctx.stroke();
|
||||
}
|
||||
|
||||
// Draw filled circle at stick position
|
||||
ctx.beginPath();
|
||||
ctx.arc(center_x+display_x*sz, center_y+display_y*sz, highlight ? 4 : 3, 0, 2*Math.PI);
|
||||
ctx.fillStyle = highlight ? '#2989f7ff' : '#030b84ff';
|
||||
ctx.fill();
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates circularity error for stick movement data.
|
||||
* @param {number[]} data - Array of distance values at different angular positions
|
||||
* @returns {number} RMS deviation as percentage
|
||||
*/
|
||||
export function calculateCircularityError(data) {
|
||||
// Sum of squared deviations from ideal distance of 1.0, only for values > 0.2
|
||||
const sumSquaredDeviations = data.reduce((acc, val) =>
|
||||
val > 0.2 ? acc + Math.pow(val - 1, 2) : acc, 0);
|
||||
|
||||
// Calculate RMS deviation as percentage
|
||||
const validDataCount = data.filter(val => val > 0.2).length;
|
||||
return validDataCount > 0 ? Math.sqrt(sumSquaredDeviations / validDataCount) * 100 : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Applies center zoom transformation to stick coordinates.
|
||||
* @param {number} x - X coordinate
|
||||
* @param {number} y - Y coordinate
|
||||
* @returns {Object} Transformed coordinates {x, y}
|
||||
*/
|
||||
function apply_center_zoom(x, y) {
|
||||
// Calculate distance from center
|
||||
const distance = Math.sqrt(x * x + y * y);
|
||||
|
||||
// If distance is 0, return original values
|
||||
if (distance === 0) {
|
||||
return { x, y};
|
||||
}
|
||||
|
||||
// Calculate angle
|
||||
const angle = Math.atan2(y, x);
|
||||
|
||||
// Apply center zoom transformation
|
||||
const new_distance =
|
||||
distance <= 0.05
|
||||
? (distance / 0.05) * 0.5 // 0 to 0.05 maps to 0 to 0.5 (half the radius)
|
||||
: 0.5 + ((distance - 0.05) / 0.95) * 0.5 // 0.05 to 1.0 maps to 0.5 to 1.0 (other half)
|
||||
|
||||
// Convert back to x, y coordinates
|
||||
return {
|
||||
x: Math.cos(angle) * new_distance,
|
||||
y: Math.sin(angle) * new_distance
|
||||
};
|
||||
}
|
||||
245
js/storage.js
Normal file
@@ -0,0 +1,245 @@
|
||||
'use strict';
|
||||
|
||||
export const Storage = {
|
||||
STORAGE_KEYS: {
|
||||
LAST_CONNECTED_CONTROLLER: 'lastConnectedController',
|
||||
EDGE_MODAL_DONT_SHOW_AGAIN: 'edgeModalDontShowAgain',
|
||||
FAILED_CALIBRATION_COUNT: 'failedCalibrationCount',
|
||||
CENTER_CALIBRATION_METHOD: 'centerCalibrationMethod',
|
||||
RANGE_CALIBRATION_METHOD: 'rangeCalibrationMethod',
|
||||
QUICK_TEST_SKIPPED_TESTS: 'quickTestSkippedTests',
|
||||
SHOW_RAW_NUMBERS_CHECKBOX: 'showRawNumbersCheckbox',
|
||||
FINETUNE_CENTER_STEP_SIZE: 'finetuneCenterStepSize',
|
||||
FINETUNE_CIRCULARITY_STEP_SIZE: 'finetuneCircularityStepSize',
|
||||
FINETUNE_HISTORY: 'finetuneHistory',
|
||||
},
|
||||
|
||||
getChangesStorageKey(serialNumber) {
|
||||
if (!serialNumber) return null;
|
||||
return `changes_${serialNumber}`;
|
||||
},
|
||||
|
||||
setString(key, value) {
|
||||
try {
|
||||
localStorage.setItem(key, value);
|
||||
} catch (e) {
|
||||
console.warn(`Failed to save to localStorage (${key}):`, e);
|
||||
}
|
||||
},
|
||||
|
||||
getString(key) {
|
||||
try {
|
||||
return localStorage.getItem(key);
|
||||
} catch (e) {
|
||||
console.warn(`Failed to read from localStorage (${key}):`, e);
|
||||
return null;
|
||||
}
|
||||
},
|
||||
|
||||
setObject(key, value) {
|
||||
try {
|
||||
localStorage.setItem(key, JSON.stringify(value));
|
||||
} catch (e) {
|
||||
console.warn(`Failed to save object to localStorage (${key}):`, e);
|
||||
}
|
||||
},
|
||||
|
||||
getObject(key) {
|
||||
try {
|
||||
const value = localStorage.getItem(key);
|
||||
return value ? JSON.parse(value) : null;
|
||||
} catch (e) {
|
||||
console.warn(`Failed to read object from localStorage (${key}):`, e);
|
||||
return null;
|
||||
}
|
||||
},
|
||||
|
||||
removeItem(key) {
|
||||
try {
|
||||
localStorage.removeItem(key);
|
||||
} catch (e) {
|
||||
console.warn(`Failed to remove from localStorage (${key}):`, e);
|
||||
}
|
||||
},
|
||||
|
||||
setBoolean(key, value) {
|
||||
this.setString(key, value.toString());
|
||||
},
|
||||
|
||||
getBoolean(key, defaultValue = false) {
|
||||
const value = this.getString(key);
|
||||
return value !== null ? value === 'true' : defaultValue;
|
||||
},
|
||||
|
||||
setNumber(key, value) {
|
||||
this.setString(key, value.toString());
|
||||
},
|
||||
|
||||
getNumber(key, defaultValue = 0) {
|
||||
const value = this.getString(key);
|
||||
return value !== null ? parseInt(value, 10) : defaultValue;
|
||||
},
|
||||
|
||||
lastConnectedController: {
|
||||
set(info) {
|
||||
Storage.setObject(Storage.STORAGE_KEYS.LAST_CONNECTED_CONTROLLER, info);
|
||||
},
|
||||
|
||||
get() {
|
||||
return Storage.getObject(Storage.STORAGE_KEYS.LAST_CONNECTED_CONTROLLER);
|
||||
},
|
||||
|
||||
clear() {
|
||||
Storage.removeItem(Storage.STORAGE_KEYS.LAST_CONNECTED_CONTROLLER);
|
||||
},
|
||||
},
|
||||
|
||||
edgeModalDontShowAgain: {
|
||||
set(value) {
|
||||
Storage.setBoolean(Storage.STORAGE_KEYS.EDGE_MODAL_DONT_SHOW_AGAIN, value);
|
||||
},
|
||||
|
||||
get() {
|
||||
return Storage.getBoolean(Storage.STORAGE_KEYS.EDGE_MODAL_DONT_SHOW_AGAIN);
|
||||
},
|
||||
|
||||
clear() {
|
||||
Storage.removeItem(Storage.STORAGE_KEYS.EDGE_MODAL_DONT_SHOW_AGAIN);
|
||||
},
|
||||
},
|
||||
|
||||
failedCalibrationCount: {
|
||||
set(count) {
|
||||
Storage.setNumber(Storage.STORAGE_KEYS.FAILED_CALIBRATION_COUNT, count);
|
||||
},
|
||||
|
||||
get() {
|
||||
return Storage.getNumber(Storage.STORAGE_KEYS.FAILED_CALIBRATION_COUNT, 0);
|
||||
},
|
||||
|
||||
clear() {
|
||||
Storage.removeItem(Storage.STORAGE_KEYS.FAILED_CALIBRATION_COUNT);
|
||||
},
|
||||
},
|
||||
|
||||
centerCalibrationMethod: {
|
||||
set(method) {
|
||||
Storage.setString(Storage.STORAGE_KEYS.CENTER_CALIBRATION_METHOD, method);
|
||||
},
|
||||
|
||||
get(defaultValue = 'four-step') {
|
||||
return Storage.getString(Storage.STORAGE_KEYS.CENTER_CALIBRATION_METHOD) || defaultValue;
|
||||
},
|
||||
|
||||
clear() {
|
||||
Storage.removeItem(Storage.STORAGE_KEYS.CENTER_CALIBRATION_METHOD);
|
||||
},
|
||||
},
|
||||
|
||||
rangeCalibrationMethod: {
|
||||
set(method) {
|
||||
Storage.setString(Storage.STORAGE_KEYS.RANGE_CALIBRATION_METHOD, method);
|
||||
},
|
||||
|
||||
get(defaultValue = 'normal') {
|
||||
return Storage.getString(Storage.STORAGE_KEYS.RANGE_CALIBRATION_METHOD) || defaultValue;
|
||||
},
|
||||
|
||||
clear() {
|
||||
Storage.removeItem(Storage.STORAGE_KEYS.RANGE_CALIBRATION_METHOD);
|
||||
},
|
||||
},
|
||||
|
||||
quickTestSkippedTests: {
|
||||
set(tests) {
|
||||
Storage.setObject(Storage.STORAGE_KEYS.QUICK_TEST_SKIPPED_TESTS, tests);
|
||||
},
|
||||
|
||||
get() {
|
||||
return Storage.getObject(Storage.STORAGE_KEYS.QUICK_TEST_SKIPPED_TESTS) || [];
|
||||
},
|
||||
|
||||
clear() {
|
||||
Storage.removeItem(Storage.STORAGE_KEYS.QUICK_TEST_SKIPPED_TESTS);
|
||||
},
|
||||
},
|
||||
|
||||
showRawNumbersCheckbox: {
|
||||
set(value) {
|
||||
Storage.setString(Storage.STORAGE_KEYS.SHOW_RAW_NUMBERS_CHECKBOX, value.toString());
|
||||
},
|
||||
|
||||
get() {
|
||||
const value = Storage.getString(Storage.STORAGE_KEYS.SHOW_RAW_NUMBERS_CHECKBOX);
|
||||
return value === 'true';
|
||||
},
|
||||
|
||||
clear() {
|
||||
Storage.removeItem(Storage.STORAGE_KEYS.SHOW_RAW_NUMBERS_CHECKBOX);
|
||||
},
|
||||
},
|
||||
|
||||
finetuneCenterStepSize: {
|
||||
set(value) {
|
||||
Storage.setString(Storage.STORAGE_KEYS.FINETUNE_CENTER_STEP_SIZE, value.toString());
|
||||
},
|
||||
|
||||
get() {
|
||||
return Storage.getString(Storage.STORAGE_KEYS.FINETUNE_CENTER_STEP_SIZE);
|
||||
},
|
||||
|
||||
clear() {
|
||||
Storage.removeItem(Storage.STORAGE_KEYS.FINETUNE_CENTER_STEP_SIZE);
|
||||
},
|
||||
},
|
||||
|
||||
finetuneCircularityStepSize: {
|
||||
set(value) {
|
||||
Storage.setString(Storage.STORAGE_KEYS.FINETUNE_CIRCULARITY_STEP_SIZE, value.toString());
|
||||
},
|
||||
|
||||
get() {
|
||||
return Storage.getString(Storage.STORAGE_KEYS.FINETUNE_CIRCULARITY_STEP_SIZE);
|
||||
},
|
||||
|
||||
clear() {
|
||||
Storage.removeItem(Storage.STORAGE_KEYS.FINETUNE_CIRCULARITY_STEP_SIZE);
|
||||
},
|
||||
},
|
||||
|
||||
hasChangesState: {
|
||||
set(serialNumber, hasChanges) {
|
||||
const key = Storage.getChangesStorageKey(serialNumber);
|
||||
if (key) {
|
||||
Storage.setObject(key, hasChanges);
|
||||
}
|
||||
},
|
||||
|
||||
get(serialNumber) {
|
||||
const key = Storage.getChangesStorageKey(serialNumber);
|
||||
if (!key) return false;
|
||||
return Storage.getObject(key) || false;
|
||||
},
|
||||
|
||||
clear(serialNumber) {
|
||||
const key = Storage.getChangesStorageKey(serialNumber);
|
||||
if (key) {
|
||||
Storage.removeItem(key);
|
||||
}
|
||||
},
|
||||
},
|
||||
|
||||
finetuneHistory: {
|
||||
getAll() {
|
||||
return Storage.getObject(Storage.STORAGE_KEYS.FINETUNE_HISTORY) || {};
|
||||
},
|
||||
|
||||
setAll(history) {
|
||||
Storage.setObject(Storage.STORAGE_KEYS.FINETUNE_HISTORY, history);
|
||||
},
|
||||
|
||||
clear() {
|
||||
Storage.removeItem(Storage.STORAGE_KEYS.FINETUNE_HISTORY);
|
||||
},
|
||||
},
|
||||
};
|
||||
93
js/template-loader.js
Normal file
@@ -0,0 +1,93 @@
|
||||
'use strict';
|
||||
|
||||
// Cache for loaded templates
|
||||
const templateCache = new Map();
|
||||
|
||||
/**
|
||||
* Load a template from the templates directory or bundled assets
|
||||
* @param {string} templateName - Name of the template file without extension
|
||||
* @returns {Promise<string>} - Promise that resolves with the template HTML
|
||||
*/
|
||||
async function loadTemplate(templateName) {
|
||||
// Check if template is already in cache
|
||||
if (templateCache.has(templateName)) {
|
||||
return templateCache.get(templateName);
|
||||
}
|
||||
|
||||
// Check if we have bundled assets (production mode)
|
||||
if (window.BUNDLED_ASSETS && window.BUNDLED_ASSETS.templates) {
|
||||
const templateHtml = window.BUNDLED_ASSETS.templates[templateName];
|
||||
if (templateHtml) {
|
||||
templateCache.set(templateName, templateHtml);
|
||||
return templateHtml;
|
||||
}
|
||||
}
|
||||
|
||||
// Fallback to fetching from server (development mode)
|
||||
// Only append .html if the templateName doesn't already have an extension
|
||||
const hasExtension = templateName.includes('.');
|
||||
const templatePath = hasExtension ? `templates/${templateName}` : `templates/${templateName}.html`;
|
||||
|
||||
const response = await fetch(templatePath);
|
||||
if (!response.ok) {
|
||||
throw new Error(`Failed to load template: ${templateName}`);
|
||||
}
|
||||
|
||||
const templateHtml = await response.text();
|
||||
templateCache.set(templateName, templateHtml);
|
||||
return templateHtml;
|
||||
}
|
||||
|
||||
/**
|
||||
* Load SVG assets from bundled assets or server
|
||||
* @param {string} assetPath - Path to the SVG asset
|
||||
* @returns {Promise<string>} - Promise that resolves with the SVG content
|
||||
*/
|
||||
async function loadSvgAsset(assetPath) {
|
||||
// Check if we have bundled assets (production mode)
|
||||
if (window.BUNDLED_ASSETS && window.BUNDLED_ASSETS.svg) {
|
||||
const svgContent = window.BUNDLED_ASSETS.svg[assetPath];
|
||||
if (svgContent) {
|
||||
return svgContent;
|
||||
}
|
||||
}
|
||||
|
||||
// Fallback to fetching from server (development mode)
|
||||
const response = await fetch(`assets/${assetPath}`);
|
||||
if (!response.ok) {
|
||||
throw new Error(`Failed to load SVG asset: ${assetPath}`);
|
||||
}
|
||||
|
||||
return await response.text();
|
||||
}
|
||||
|
||||
/**
|
||||
* Load all templates and insert them into the DOM
|
||||
*/
|
||||
export async function loadAllTemplates() {
|
||||
// Load SVG icons
|
||||
const iconsHtml = await loadSvgAsset('icons.svg');
|
||||
const iconsContainer = document.createElement('div');
|
||||
iconsContainer.innerHTML = iconsHtml;
|
||||
document.body.prepend(iconsContainer);
|
||||
|
||||
// Load modals
|
||||
const faqModalHtml = await loadTemplate('faq-modal');
|
||||
const popupModalHtml = await loadTemplate('popup-modal');
|
||||
const finetuneModalHtml = await loadTemplate('finetune-modal');
|
||||
const calibCenterModalHtml = await loadTemplate('calib-center-modal');
|
||||
const welcomeModalHtml = await loadTemplate('welcome-modal');
|
||||
const autoCalibCenterModalHtml = await loadTemplate('auto-calib-center-modal');
|
||||
const rangeModalHtml = await loadTemplate('range-modal');
|
||||
const edgeProgressModalHtml = await loadTemplate('edge-progress-modal');
|
||||
const edgeModalHtml = await loadTemplate('edge-modal');
|
||||
const donateModalHtml = await loadTemplate('donate-modal');
|
||||
const quickTestModalHtml = await loadTemplate('quick-test-modal');
|
||||
const calibrationHistoryModalHtml = await loadTemplate('calibration-history-modal');
|
||||
|
||||
// Create modals container
|
||||
const modalsContainer = document.createElement('div');
|
||||
modalsContainer.id = 'modals-container';
|
||||
modalsContainer.innerHTML = faqModalHtml + popupModalHtml + finetuneModalHtml + calibCenterModalHtml + welcomeModalHtml + autoCalibCenterModalHtml + rangeModalHtml + edgeProgressModalHtml + edgeModalHtml + donateModalHtml + quickTestModalHtml + calibrationHistoryModalHtml;
|
||||
document.body.appendChild(modalsContainer);
|
||||
}
|
||||
194
js/translations.js
Normal file
@@ -0,0 +1,194 @@
|
||||
'use strict';
|
||||
|
||||
import { la } from './utils.js';
|
||||
import { Storage } from './storage.js';
|
||||
|
||||
// Alphabetical order
|
||||
const available_langs = {
|
||||
"ar_ar": { "name": "العربية", "file": "ar_ar.json", "direction": "rtl"},
|
||||
"bg_bg": { "name": "Български", "file": "bg_bg.json", "direction": "ltr"},
|
||||
"cz_cz": { "name": "Čeština", "file": "cz_cz.json", "direction": "ltr"},
|
||||
"da_dk": { "name": "Dansk", "file": "da_dk.json", "direction": "ltr"},
|
||||
"de_de": { "name": "Deutsch", "file": "de_de.json", "direction": "ltr"},
|
||||
"es_es": { "name": "Español", "file": "es_es.json", "direction": "ltr"},
|
||||
"fa_fa": { "name": "فارسی", "file": "fa_fa.json", "direction": "rtl"},
|
||||
"fr_fr": { "name": "Français", "file": "fr_fr.json", "direction": "ltr"},
|
||||
"hu_hu": { "name": "Magyar", "file": "hu_hu.json", "direction": "ltr"},
|
||||
"it_it": { "name": "Italiano", "file": "it_it.json", "direction": "ltr"},
|
||||
"jp_jp": { "name": "日本語", "file": "jp_jp.json", "direction": "ltr"},
|
||||
"ko_kr": { "name": "한국어", "file": "ko_kr.json", "direction": "ltr"},
|
||||
"nl_nl": { "name": "Nederlands", "file": "nl_nl.json", "direction": "ltr"},
|
||||
"pl_pl": { "name": "Polski", "file": "pl_pl.json", "direction": "ltr"},
|
||||
"pt_br": { "name": "Português do Brasil", "file": "pt_br.json", "direction": "ltr"},
|
||||
"pt_pt": { "name": "Português", "file": "pt_pt.json", "direction": "ltr"},
|
||||
"rs_rs": { "name": "Srpski", "file": "rs_rs.json", "direction": "ltr"},
|
||||
"ru_ru": { "name": "Русский", "file": "ru_ru.json", "direction": "ltr"},
|
||||
"tr_tr": { "name": "Türkçe", "file": "tr_tr.json", "direction": "ltr"},
|
||||
"ua_ua": { "name": "Українська", "file": "ua_ua.json", "direction": "ltr"},
|
||||
"vi_vn": { "name": "Tiếng Việt", "file": "vi_vn.json", "direction": "ltr"},
|
||||
"zh_cn": { "name": "中文", "file": "zh_cn.json", "direction": "ltr"},
|
||||
"zh_tw": { "name": "中文(繁)", "file": "zh_tw.json", "direction": "ltr"}
|
||||
};
|
||||
|
||||
// Translation state - will be imported from core.js app object
|
||||
let translationState = null;
|
||||
let welcomeModal = null;
|
||||
let handleLanguageChange = null;
|
||||
|
||||
export function lang_init(appState, handleLanguageChangeCb, welcomeModalCb) {
|
||||
translationState = appState;
|
||||
handleLanguageChange = handleLanguageChangeCb;
|
||||
welcomeModal = welcomeModalCb;
|
||||
|
||||
let id_iter = 0;
|
||||
const items = document.getElementsByClassName('ds-i18n');
|
||||
for(let item of items) {
|
||||
if (item.id.length == 0) {
|
||||
item.id = `ds-i18n-${id_iter++}`;
|
||||
}
|
||||
|
||||
translationState.lang_orig_text[item.id] = $(item).html();
|
||||
}
|
||||
translationState.lang_orig_text[".title"] = document.title;
|
||||
|
||||
const force_lang = Storage.getString("force_lang");
|
||||
if (force_lang != null) {
|
||||
lang_set(force_lang, true).catch(error => {
|
||||
console.error("Failed to set forced language:", error);
|
||||
});
|
||||
} else {
|
||||
const nlang = navigator.language.replace('-', '_').toLowerCase();
|
||||
const ljson = available_langs[nlang];
|
||||
if(ljson) {
|
||||
la("lang_init", {"l": nlang});
|
||||
lang_translate(ljson["file"], nlang, ljson["direction"]).catch(error => {
|
||||
console.error("Failed to load initial language:", error);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
const langs = Object.keys(available_langs);
|
||||
const olangs = [
|
||||
'<li><a class="dropdown-item" href="#" onclick="lang_set(\'en_us\');">English</a></li>',
|
||||
...langs.map(lang => {
|
||||
const name = available_langs[lang]["name"];
|
||||
return `<li><a class="dropdown-item" href="#" onclick="lang_set('${lang}');">${name}</a></li>`;
|
||||
}),
|
||||
'<li><hr class="dropdown-divider"></li>',
|
||||
'<li><a class="dropdown-item" href="https://github.com/dualshock-tools/dualshock-tools.github.io/blob/main/TRANSLATIONS.md" target="_blank">Missing your language?</a></li>'
|
||||
].join('');
|
||||
$("#availLangs").html(olangs);
|
||||
}
|
||||
|
||||
async function lang_set(lang, skip_modal=false) {
|
||||
la("lang_set", { l: lang });
|
||||
|
||||
lang_reset_page();
|
||||
if(lang != "en_us") {
|
||||
const { file, direction } = available_langs[lang];
|
||||
await lang_translate(file, lang, direction);
|
||||
}
|
||||
|
||||
await handleLanguageChange(lang);
|
||||
Storage.setString("force_lang", lang);
|
||||
if(!skip_modal && welcomeModal) {
|
||||
Storage.setString("welcome_accepted", "0");
|
||||
welcomeModal();
|
||||
}
|
||||
}
|
||||
|
||||
function lang_reset_page() {
|
||||
lang_set_direction("ltr", "en_us");
|
||||
|
||||
// Reset translation state to disable translations
|
||||
translationState.lang_cur = {};
|
||||
translationState.lang_disabled = true;
|
||||
|
||||
const { lang_orig_text } = translationState;
|
||||
const items = document.getElementsByClassName('ds-i18n');
|
||||
for(let item of items) {
|
||||
$(item).html(lang_orig_text[item.id]);
|
||||
};
|
||||
$("#authorMsg").html("");
|
||||
$("#curLang").html("English");
|
||||
document.title = lang_orig_text[".title"];
|
||||
}
|
||||
|
||||
function lang_set_direction(new_direction, lang_name) {
|
||||
const lang_prefix = lang_name.split("_")[0]
|
||||
$("html").attr("lang", lang_prefix);
|
||||
|
||||
if(new_direction == translationState.lang_cur_direction)
|
||||
return;
|
||||
|
||||
if(new_direction == "rtl") {
|
||||
$('#bootstrap-css').attr('integrity', 'sha384-dpuaG1suU0eT09tx5plTaGMLBsfDLzUCCUXOY2j/LSvXYuG6Bqs43ALlhIqAJVRb');
|
||||
$('#bootstrap-css').attr('href', 'https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.rtl.min.css');
|
||||
} else {
|
||||
$('#bootstrap-css').attr('integrity', 'sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH');
|
||||
$('#bootstrap-css').attr('href', 'https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css');
|
||||
}
|
||||
$("html").attr("dir", new_direction);
|
||||
translationState.lang_cur_direction = new_direction;
|
||||
}
|
||||
|
||||
export function l(text) {
|
||||
if(!translationState || translationState.lang_disabled)
|
||||
return text;
|
||||
|
||||
const [out] = translationState.lang_cur[text] || [];
|
||||
if(out) return out;
|
||||
|
||||
console.log(`Missing translation for "${text}"`);
|
||||
return text;
|
||||
}
|
||||
|
||||
function lang_translate(target_file, target_lang, target_direction) {
|
||||
return new Promise((resolve, reject) => {
|
||||
$.getJSON("lang/" + target_file)
|
||||
.done(function(data) {
|
||||
const { lang_orig_text, lang_cur } = translationState;
|
||||
lang_set_direction(target_direction, target_lang);
|
||||
|
||||
$.each(data, function( key, val ) {
|
||||
if(lang_cur[key]) {
|
||||
console.log("Warn: already exists " + key);
|
||||
} else {
|
||||
lang_cur[key] = [val];
|
||||
}
|
||||
});
|
||||
|
||||
if(Object.keys(lang_cur).length > 0) {
|
||||
translationState.lang_disabled = false;
|
||||
}
|
||||
|
||||
const items = document.getElementsByClassName('ds-i18n');
|
||||
for(let item of items) {
|
||||
const originalText = lang_orig_text[item.id];
|
||||
const [translatedText] = lang_cur[originalText] || [];
|
||||
if (translatedText) {
|
||||
$(item).html(translatedText);
|
||||
} else {
|
||||
console.log(`Cannot find mapping for "${originalText}"`);
|
||||
$(item).html(originalText);
|
||||
}
|
||||
}
|
||||
|
||||
const old_title = lang_orig_text[".title"];
|
||||
document.title = lang_cur[old_title];
|
||||
if(lang_cur[".authorMsg"]) {
|
||||
$("#authorMsg").html(lang_cur[".authorMsg"]);
|
||||
}
|
||||
$("#curLang").html(available_langs[target_lang]["name"]);
|
||||
|
||||
resolve();
|
||||
})
|
||||
.fail(function(jqxhr, textStatus, error) {
|
||||
console.error("Failed to load translation file:", target_file, error);
|
||||
reject(error);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// Make lang_set available globally for onclick handlers in HTML
|
||||
window.lang_set = lang_set;
|
||||
146
js/utils.js
Normal file
@@ -0,0 +1,146 @@
|
||||
'use strict';
|
||||
|
||||
import { Storage } from './storage.js';
|
||||
|
||||
/**
|
||||
* Utility functions for DualShock controller operations
|
||||
*/
|
||||
|
||||
/**
|
||||
* Sleep for specified milliseconds
|
||||
* @param {number} ms Milliseconds to sleep
|
||||
* @returns {Promise} Promise that resolves after the specified time
|
||||
*/
|
||||
export async function sleep(ms) {
|
||||
await new Promise(r => setTimeout(r, ms));
|
||||
}
|
||||
/**
|
||||
* Convert float to string with specified precision
|
||||
* @param {number} f Float number to convert
|
||||
* @param {number} precision Number of decimal places
|
||||
* @returns {string} Formatted string
|
||||
*/
|
||||
export function float_to_str(f, precision = 2) {
|
||||
if(precision <=2 && f < 0.004 && f >= -0.004) return "+0.00";
|
||||
return (f<0?"":"+") + f.toFixed(precision);
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert buffer to hexadecimal string
|
||||
* @param {ArrayBuffer} buffer Buffer to convert
|
||||
* @returns {string} Hexadecimal string representation
|
||||
*/
|
||||
export function buf2hex(buffer) {
|
||||
return [...new Uint8Array(buffer)].map(x => x.toString(16).padStart(2, '0')).join('');
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert decimal to 16-bit hexadecimal string
|
||||
* @param {number} i Decimal number
|
||||
* @returns {string} 4-character uppercase hex string
|
||||
*/
|
||||
export function dec2hex(i) {
|
||||
return (i + 0x10000).toString(16).substr(-4).toUpperCase();
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert decimal to 32-bit hexadecimal string
|
||||
* @param {number} i Decimal number
|
||||
* @returns {string} 8-character uppercase hex string
|
||||
*/
|
||||
export function dec2hex32(i) {
|
||||
return (i + 0x100000000).toString(16).substr(-8).toUpperCase();
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert decimal to 8-bit hexadecimal string
|
||||
* @param {number} i Decimal number
|
||||
* @returns {string} 2-character uppercase hex string
|
||||
*/
|
||||
export function dec2hex8(i) {
|
||||
return (i + 0x100).toString(16).substr(-2).toUpperCase();
|
||||
}
|
||||
|
||||
/**
|
||||
* Format MAC address from DataView
|
||||
* @returns {string} Formatted MAC address (XX:XX:XX:XX:XX:XX)
|
||||
*/
|
||||
export function format_mac_from_view(view, start_index_inclusive) {
|
||||
const bytes = [];
|
||||
for (let i = 0; i < 6; i++) {
|
||||
const idx = start_index_inclusive + (5 - i);
|
||||
bytes.push(dec2hex8(view.getUint8(idx, false)));
|
||||
}
|
||||
return bytes.join(":");
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse a string (for ASCII strings only, not UTF)
|
||||
* @param {string} s String to reverse
|
||||
* @returns {string} Reversed string
|
||||
*/
|
||||
export function reverse_str(s) {
|
||||
return s.split('').reverse().join('');
|
||||
}
|
||||
|
||||
export let la = undefined;
|
||||
export function lf(operation, data) { la(operation, buf2hex(data.buffer)); return data; }
|
||||
|
||||
export function initAnalyticsApi({gj, gu}) {
|
||||
la = (k, v = {}) => {
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: "https://the.al/ds4_a/l",
|
||||
data: JSON.stringify({u: gu, j: gj, k, v}),
|
||||
contentType: "application/json",
|
||||
dataType: 'json'
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export function lerp_color(a, b, t) {
|
||||
// a, b: hex color strings, t: 0.0-1.0
|
||||
function hex2rgb(hex) {
|
||||
hex = hex.replace('#', '');
|
||||
if (hex.length === 3) hex = hex.split('').map(x => x + x).join('');
|
||||
const num = parseInt(hex, 16);
|
||||
return [(num >> 16) & 255, (num >> 8) & 255, num & 255];
|
||||
}
|
||||
function rgb2hex(r, g, b) {
|
||||
return '#' + [r, g, b].map(x => x.toString(16).padStart(2, '0')).join('');
|
||||
}
|
||||
const c1 = hex2rgb(a);
|
||||
const c2 = hex2rgb(b);
|
||||
const c = [
|
||||
Math.round(c1[0] + (c2[0] - c1[0]) * t),
|
||||
Math.round(c1[1] + (c2[1] - c1[1]) * t),
|
||||
Math.round(c1[2] + (c2[2] - c1[2]) * t)
|
||||
];
|
||||
return rgb2hex(c[0], c[1], c[2]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the appropriate locale for date formatting based on language and timezone
|
||||
* @returns {string} Locale string for use with toLocaleString()
|
||||
*/
|
||||
export function getLocaleForDateFormatting() {
|
||||
let lang = Storage.getString('force_lang') || navigator.language;
|
||||
const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
|
||||
|
||||
// Replace en_US with en_UK if timezone does not start with "America"
|
||||
if (lang.toLowerCase() === 'en_us' && !timezone.startsWith('America')) {
|
||||
lang = 'en_UK';
|
||||
}
|
||||
|
||||
return lang.replace('_', '-').toLowerCase();
|
||||
}
|
||||
|
||||
/**
|
||||
* Format a timestamp as a localized date/time string
|
||||
* @param {number|string} timestamp Unix timestamp or date string
|
||||
* @returns {string} Formatted date/time string
|
||||
*/
|
||||
export function formatLocalizedDate(timestamp) {
|
||||
const locale = getLocaleForDateFormatting();
|
||||
return new Date(timestamp).toLocaleString(locale);
|
||||
}
|
||||
364
lang/ar_ar.json
Normal file
@@ -0,0 +1,364 @@
|
||||
{
|
||||
".authorMsg": "الترجمة من طرف سجاد رحيم Sajjad Rahim",
|
||||
"DualShock Calibration GUI": "DualShock Calibration GUI",
|
||||
"Connect": "اتصال",
|
||||
"Connected to:": "متصل بـ:",
|
||||
"Disconnect": "قطع الاتصال",
|
||||
"Calibrate stick center": "معايرة تمركز العصا",
|
||||
"Calibrate stick range": "معايرة مدى العصا",
|
||||
"Sections below are not useful, just some debug infos or manual commands": "الأقسام أدناه ليست مفيدة، فقط بعض معلومات التصحيح أو أوامر يدوية",
|
||||
"NVS Status": "حالة الـNVS",
|
||||
"Unknown": "غير معلوم",
|
||||
"Debug buttons": "أزرار تصحيح الأخطاء",
|
||||
"Query NVS status": "حالة إستعلام NVS",
|
||||
"NVS unlock": "فتح قفل الـNVS",
|
||||
"NVS lock": "قفل الـNVS",
|
||||
"Stick center calibration": "معايرة تمركز العصا",
|
||||
"Welcome": "مرحبًا",
|
||||
"Step 1": "الخطوة الأولى",
|
||||
"Step 2": "الخطوة الثانية",
|
||||
"Step 3": "الخطوة الثالثة",
|
||||
"Step 4": "الخطوة الرابعة",
|
||||
"Completed": "اكتملت",
|
||||
"Welcome to the stick center-calibration wizard!": "مرحباً بك في معالج ومصحح تمركز العصا!",
|
||||
"This tool will guide you in re-centering the analog sticks of your controller. It consists of four steps: you will be asked to move both sticks in a direction and release them.": "هذه الأداة ستوجهك في إعادة تمركز العصي ليد التحكم. تتكون من أربع خطوات، سيطلب منك تحريك كلا العصي إلى اتجاه معين وتركهما.",
|
||||
"Please be aware that, <i>once the calibration is running, it cannot be canceled</i>. Do not close this page or disconnect your controller until it is completed.": "المرجو الانتباه، <i>عند بدء المعايرة لا يمكنك إلغائها</i>. لا تغلق هذه الصفحة أو تقطع اتصال يد التحكم حتى الاكتمال.",
|
||||
"Press <b>Start</b> to begin calibration.": "اضغط <b>بدء</b> لبدء المعايرة.",
|
||||
"Please move both sticks to the <b>top-left corner</b> and release them.": "الرجاء حرك كلا العصي إلى <b>إعلى اليسار</b> وتركهما.",
|
||||
"When the sticks are back in the center, press <b>Continue</b>.": "عند عودة كلا العصي إلى المركز، اضغط <b>متابعة</b>.",
|
||||
"Please move both sticks to the <b>top-right corner</b> and release them.": "الرجاء حرك كلا العصي إلى <b>إعلى اليمين</b> وتركهما.",
|
||||
"Please move both sticks to the <b>bottom-left corner</b> and release them.": "الرجاء حرك كلا العصي إلى <b>أسفل اليسار</b> وتركهما.",
|
||||
"Please move both sticks to the <b>bottom-right corner</b> and release them.": "الرجاء حرك كلا العصي إلى <b>أسفل اليمين</b> وتركهما.",
|
||||
"Calibration completed successfully!": "انتهت المعايرة بنجاح!",
|
||||
"Next": "التالي",
|
||||
"Recentering the controller sticks.": "إعادة تسجيل عصا وحدة التحكم.",
|
||||
"Please do not close this window and do not disconnect your controller. ": "الرجاء عدم إغلاق هذه النافذة وعدم قطع اتصال يد التحكم. ",
|
||||
"Range calibration": "معايرة المدى",
|
||||
"The controller is now sampling data!": "يد التحكم تقوم الآن بأخذ عينات من البيانات!",
|
||||
"Done": "تمّ",
|
||||
"Hi, thank you for using this software.": "مرحباً، شكراً لك على استخدام هذا البرنامج.",
|
||||
"If you're finding it helpful and you want to support my efforts, feel free to": "إذا كنت تجد ذلك مفيداً وترغب في دعم جهودي، لا تتردد في",
|
||||
"buy me a coffee": "دعمي ماديًا",
|
||||
"! :)": "! :)",
|
||||
"Do you have any suggestion or issue? Drop me a message via email or discord.": "هل لديك أي اقتراح أو مشكلة؟ أرسل لي رسالة عبر البريد الإلكتروني أو عبر discord.",
|
||||
"Cheers!": "شكرًا!",
|
||||
"Support this project": "اِدعم هذا المشروع",
|
||||
"unknown": "غير معلوم",
|
||||
"original": "يد تحكم أصلية",
|
||||
"clone": "يد تحكم مقلدة",
|
||||
"locked": "مقفل",
|
||||
"unlocked": "مفتوح",
|
||||
"error": "خطأ",
|
||||
"Build Date": "تاريخ الإصدار",
|
||||
"HW Version": "إصدار العتاد",
|
||||
"SW Version": "إصدار البرمجيات",
|
||||
"Device Type": "نوع الجهاز",
|
||||
"Range calibration completed": "أكملت معايرة المدى",
|
||||
"Range calibration failed": "فشل في معايرة المدى،",
|
||||
"Stick calibration failed": "فشل في معايرة العصا،",
|
||||
"Stick calibration completed": "أكملت معايرة العصا",
|
||||
"NVS Lock failed": "فشل في قفل NVS",
|
||||
"NVS Unlock failed": "فشل فتح قفل NVS",
|
||||
"Please connect only one controller at time.": "الرجاء ربط يد تحكم واحدة فقط.",
|
||||
"Sony DualShock 4 V1": "Sony DualShock 4 الإصدار الأول",
|
||||
"Sony DualShock 4 V2": "Sony DualShock 4 الإصدار الثاني",
|
||||
"Sony DualSense": "Sony DualSense",
|
||||
"Sony DualSense Edge": "Sony DualSense Edge",
|
||||
"Connected invalid device": "الجهاز المتصل غير صالح،",
|
||||
"Error": "خطأ،",
|
||||
"Initializing...": "تتم التهيئة...",
|
||||
"Storing calibration...": "خزن المعايرة...",
|
||||
"Sampling...": "أخذ العينات...",
|
||||
"Calibration in progress": "جارٍ المعايرة",
|
||||
"Start": "بدء",
|
||||
"Continue": "متابعة",
|
||||
"Have a nice day :)": "أتمنى لك يومًا سعيدًا :)",
|
||||
"Welcome to the Calibration GUI": "مرحباً بك في Calibration GUI",
|
||||
"Just few things to know before you can start:": "بعض الأشياء التي يجب أن تعرفها قبل أن تبدأ",
|
||||
"This website is not affiliated with Sony, PlayStation & co.": "هذا الموقع غير مرتبط بـ Sony، PlayStation & co.",
|
||||
"This service is provided without warranty. Use at your own risk.": "هذه الخدمة مقدمة دون ضمان. استخدمها على مسؤوليتك.",
|
||||
"Keep the internal battery of the controller connected and ensure it is well charged. If the battery dies during operations, the controller will be damaged and rendered unusable.": "ابقي البطارية الداخلية ليد التحكم متصلة وتحقق أنها مشحونة بشكل جيد. وإذا نفذ شحن البطارية في أثناء العمليات، فإن يد التحكم ستتعرض للتلف وستصبح غير قابلة للاستعمال.",
|
||||
"Before doing the permanent calibration, try the temporary one to ensure that everything is working well.": "قبل إجراء المعايرة الدائمة، جرب المعايرة المؤقتة لضمان أن يعمل كل شيء بشكل جيد.",
|
||||
"Understood": "مفهوم",
|
||||
"Version": "الإصدار",
|
||||
"Frequently Asked Questions": "الأسئلة الشائعة",
|
||||
"Close": "إغلاق",
|
||||
"Welcome to the F.A.Q. section! Below, you'll find answers to some of the most commonly asked questions about this website. If you have any other inquiries or need further assistance, feel free to reach out to me directly. Your feedback and questions are always welcome!": "مرحبا بكم في قسم الأسئلة الشائعة، أدناه ستجد إجابات على بعض الأسئلة الأكثر شيوعا حول هذا الموقع. إذا كان لديك أي استفسارات أخرى أو تحتاج إلى المزيد من المساعدة، لا تتردد في التواصل معي مباشرة. ملاحظاتك وأسئلتك تلقى الترحيب دائماً!",
|
||||
"How does it work?": "طريقة العمل؟",
|
||||
"Behind the scenes, this website is the culmination of one year of dedicated effort in reverse-engineering DualShock controllers for fun/hobby from a random guy on the internet.": "خلف الكواليس،هذا الموقع جاء بفضل بسنة من الجهد المتفاني في هندسة العكسية ليد تحكم DualShock من أجل المتعة/الهواية من شخص عشوائي على شبكة الإنترنت.",
|
||||
"Through": "عَبْر",
|
||||
"this research": "هذه الأبحاث",
|
||||
", it was discovered that there exist some undocumented commands on DualShock controllers that can be sent via USB and are used during factory assembly process. If these commands are sent, the controller starts the recalibration of analog sticks.": " قد اكتشفت أن هناك بعض الأوامر غير الموثّقة على يد تحكم DualShock التي يمكن إرسالها عن طريق USB واستخدامها أثناء عملية التصنيع. إذا تم إرسال هذه الأوامر، ستبدأ يد التحكم في إعادة معايرة العصا.",
|
||||
"While the primary focus of this research wasn't initially centered on recalibration, it became apparent that a service offering this capability could greatly benefit numerous individuals. And thus, here we are.": "على الرغم من أن التركيز الأساسي لهذه الأبحاث لم يكن في البداية مركزاً على إعادة المعايرة، وأصبح من الواضح أن القدرة التي توفرها هذه الخدمة يمكن أن تفيد العديد من الاشخاص. وهكذا، ها نحن ها.",
|
||||
"Is this an officially endorsed service?": "هل هذه الخدمة معتمدة رسمياً؟",
|
||||
"No, this service is simply a creation by a DualShock enthusiast.": "لا، هذه الخدمة ببساطة تعبر عن شغفي وحماسي ليد التحكم.",
|
||||
"Does this website detect if a controller is a clone?": "هل يكتشف هذا الموقع ما إذا كانت يد التحكم نسخة مقلدة؟",
|
||||
"Yes, only DualShock4 at the moment. This happened because I accidentally purchased some clones, spent time identifying the differences and added this functionality to prevent future deception.": "نعم، فقط DualShock4 في الوقت الراهن. حدث ذلك لأنني اشتريت بعض النسخ المقلدة، وقضيت الوقت لتحديد الاختلافات وأضفت هذه الوظيفة لمنع الغِشّ في المستقبل.",
|
||||
"Unfortunately, the clones cannot be calibrated anyway, because they only clone the behavior of a DualShock4 during normal gameplay, not all the undocumented functionalities.": "لسوء الحظ، لا يمكن معايرة النسخ المقلدة على أي حال، لأنها تقلد فقط سلوك DualShock4 في أثناء اللعب العادي، وليس كل وظائفها.",
|
||||
"If you want to extend this detection functionality to DualSense, please ship me a fake DualSense and you'll see it in few weeks.": "إذا كنت ترغب في أضافة وظيفة الكشف هذه إلى DualSense، فيرجى شحن نسخ DualSense مقلدة ألي وستراها في غضون بضعة أسابيع.",
|
||||
"What development is in plan?": "ما هي التطورات في الخِطَّة؟",
|
||||
"I maintain two separate to-do lists for this project, although the priority has yet to be established.": "وأحتفظ بخطتين منفصلتين لهذا المشروع، على الرغْم أنه لم يتم بعد تحديد الأولوية.",
|
||||
"The first list is about enhancing support for DualShock4 and DualSense controllers:": "القائمة الأولى تتعلق بتعزيز الدعم لـDualShock4 وDualSense:",
|
||||
"Implement calibration of L2/R2 triggers.": "أضافة معايرة لأزرار الـL2/R2.",
|
||||
"Improve detection of clones, particularly beneficial for those seeking to purchase used controllers with assurance of authenticity.": "تحسين الكشف عن النسخ المقلدة، مما يعود بفائدة لأولئك الذين يسعون إلى شراء يد تحكم مستعملة للتأكد من جودتها.",
|
||||
"Add support for recalibrating IMUs.": "إضافة دعم لإعادة معايرة IMUs.",
|
||||
"Additionally, explore the possibility of reviving non-functioning DualShock controllers (further discussion available on Discord for interested parties).": "وإضافة إلى ذلك، استكشاف إمكانية تصليح يد تحكم DualShock التي لا تعمل (يوجد ناقشات بشأن لك على الديسكورد للأطراف المهتمة).",
|
||||
"The second list contains new controllers I aim to support:": "وتتضمن الخطة الثانية إضافة دعم ليد تحكم:",
|
||||
"DualShock 3": "DualShock 3",
|
||||
"XBox Controllers": "يد تحكم الـXBox",
|
||||
"Each of these tasks presents both immense interest and significant time investment. To provide context, supporting a new controller typically demands 6-12 months of full-time research, alongside a stroke of good fortune.": "كل من هذه الخطتين تثير اهتماما واستثمارا كبيرا في الوقت على حد سواء. ولتوفير السياق، عادة ما يتطلب دعم يد تحكم جديدة إجراء بحوث على أساس التفرغ لمدة 6-12 شهرا، إلى جانب حظا وافر.",
|
||||
"I love this service, it helped me! How can I contribute?": "أحب هذه الخدمة، لقد ساعدتني! كيف يمكنني المساهمة؟",
|
||||
"I'm glad to hear that you found this helpful! If you're interested in contributing, here are a few ways you can help me:": "يسعدني أن أسمع أنك وجدت هذه الخدمة مفيدة! إذا كنت مهتما بالمساهمة، إليك بعض الطرق التي يمكنك أن تساعدني:",
|
||||
"Consider making a": "فكّر في",
|
||||
"donation": "التبرع",
|
||||
"to support my late-night caffeine-fueled reverse-engineering efforts.": "لدعم جهودي في وقت متأخر من الليل في الهندسة العكسية.",
|
||||
"Ship me a controller you would love to add (send me an email for organization).": "اشحن لي يد تحكم تريد إضافتها (أرسل لي رسالة بريد إلكتروني).",
|
||||
"Translate this website in your language": "ترجمة هذا الموقع بلغتك",
|
||||
", to help more people like you!": "، لمساعدة المزيد من الناس من أمثالك!",
|
||||
"This website uses analytics to improve the service.": "يستخدم هذا الموقع التحليلات لتحسين الخدمة.",
|
||||
"Board Model": "نوع اللوحة",
|
||||
"This DualSense controller has outdated firmware.": "يد تحكم DualSense هذه تستخدم برمجيات قديمة.",
|
||||
"Please update the firmware and try again.": "الرجاء حدث البرمجيات وحاول مرة أخرى.",
|
||||
"Joystick Info": "معلومات عصا التحكم",
|
||||
"Check circularity": "التحقق من الدوران",
|
||||
"No.": "لا.",
|
||||
"Does this software resolve stickdrift?": "هل هذا البرنامج يحلّ انحراف العصا؟",
|
||||
"Stickdrift is caused by a physical defect; namely dirt, worn potentiometer or in some cases a worn spring.": "انحراف العصا خلل مادي، مثل الأتربة أو تلف في المقاومة المتغيرة أو في بعض الحالات تلف في النابض.",
|
||||
"After range calibration, joysticks always go in corners.": "بعد معايرة المدى, العصا دائما ستتحرك في الزوايا.",
|
||||
"This issue happens because you have clicked \"Done\" immediately after starting a range calibration.": "تحدث هذه المشكلة لأنك قمت بالنقر على \"تم\" مباشرة بعد بدء معايرة النطاق.",
|
||||
"Please read the instructions.": "يُرجى قراءة التعليمات.",
|
||||
"You have to rotate the joysticks before you press \"Done\".": "عليك تدوير عصا التحكم قبل أن تضغط على \"تم\".",
|
||||
"Make sure to touch the edges of the joystick frame and rotate slowly, preferably in each direction - clockwise and anti-clockwise.": "تحقق من لمس حواف إطار عصا التحكم وتدويرها ببطء، ويفضل أن يكون ذلك في اتجاه عقارب الساعة وعلى عكس اتجاه عقرب الساعة.",
|
||||
"Only after you have done that, you click on \"Done\".": "فقط بعد أن تقوم بذلك، انقر فوق \"تم\".",
|
||||
"Changes saved successfully": "تم حفظ التغييرات بنجاح",
|
||||
"Error while saving changes": "حدث خطأ أثناء حفظ التغييرات:",
|
||||
"Save changes permanently": "حفظ التغييرات بشكل دائم",
|
||||
"Reboot controller": "إعادة تشغيل عصا التحكم",
|
||||
"Controller Info": "معلومات عصا التحكم",
|
||||
"Debug Info": "معلومات التصحيح",
|
||||
"Software": "البرمجيات",
|
||||
"Hardware": "العتاد",
|
||||
"FW Build Date": "تاريخ إنشاء البرمجيات",
|
||||
"FW Type": "نوع البرمجيات",
|
||||
"FW Series": "سلسلة البرمجيات",
|
||||
"FW Version": "إصدار البرمجيات",
|
||||
"FW Update": "تحديث البرمجيات",
|
||||
"FW Update Info": "معلومات تحديث البرمجيات",
|
||||
"SBL FW Version": "إصدار برمجيات SPL",
|
||||
"Venom FW Version": "إصدار برمجيات Venom ",
|
||||
"Spider FW Version": "إصدار برمجيات Spider",
|
||||
"Touchpad FW Version": "إصدار برمجيات الـTouchpad",
|
||||
"Serial Number": "الرقم التسلسلي",
|
||||
"MCU Unique ID": "معرف MCU",
|
||||
"PCBA ID": "PCBA ID",
|
||||
"Battery Barcode": "رمز البطارية الشريطي",
|
||||
"VCM Left Barcode": "VCM Left Barcode",
|
||||
"VCM Right Barcode": "VCM Right Barcode",
|
||||
"HW Model": "نوع العتاد",
|
||||
"Touchpad ID": "Touchpad ID",
|
||||
"Bluetooth Address": "عنوان البلوتوث",
|
||||
"Show all": "عرض الكل",
|
||||
"(DualSense & DualSense Edge) Will updating the firmware reset calibration?": "",
|
||||
"(DualSense Edge) Is the calibration stored on the controller or the modules?": "",
|
||||
"(beta)": "",
|
||||
"10x zoom": "",
|
||||
"30th Anniversary": "",
|
||||
"<b>Externally</b>: by applying +1.8V directly to the visible test point without opening the controller.": "",
|
||||
"<b>Internally</b>: by soldering a wire from a +1.8V source to the write-protect TP.": "",
|
||||
"<strong>Average circularity error:</strong> smaller is not always better! Aim for 7-9 %.": "",
|
||||
"A reboot is needed to continue using this DualSense Edge. Please disconnect and reconnect your controller.": "",
|
||||
"A sample test was done with 30 dualsense edge modules, and the results showed that the inner quartile range (IQR) is 8.3% and 9.0%, with an average of 8.6%. This goes to show that stock controllers by default have a relatively high range, and the rule of thumb is to follow factory calibration.": "",
|
||||
"Adaptive Trigger": "",
|
||||
"Adaptive triggers are only supported on DualSense controllers": "",
|
||||
"Add test": "",
|
||||
"After they have been replaced, this utility can be used to calibrate the controller to work with the new joysticks.": "",
|
||||
"Aim for a circularity error of around 7-9 % for the best playing experience.": "",
|
||||
"Astro Bot": "",
|
||||
"Battery level is low. Tests may fail due to the controller being in power saving mode.": "",
|
||||
"Be gentle to avoid damage.": "",
|
||||
"Buttons": "",
|
||||
"Calibrating without replacing the joysticks may help temporarily, but it may also make the problem worse, with no way to undo it.": "",
|
||||
"Calibration": "",
|
||||
"Calibration History": "",
|
||||
"Calibration is being stored in the stick modules.": "",
|
||||
"Can I overwrite a (permanent) calibration?": "",
|
||||
"Can I restore a previous calibration?": "",
|
||||
"Cancel": "",
|
||||
"Cannot copy text to the clipboard:": "",
|
||||
"Cannot lock": "",
|
||||
"Cannot read module barcodes": "",
|
||||
"Cannot store data into": "",
|
||||
"Cannot unlock": "",
|
||||
"Center": "",
|
||||
"Center (L1)": "",
|
||||
"Chroma Indigo": "",
|
||||
"Chroma Pearl": "",
|
||||
"Chroma Teal": "",
|
||||
"Circularity": "",
|
||||
"Circularity (R1)": "",
|
||||
"Clear All": "",
|
||||
"Cobalt Blue": "",
|
||||
"Color": "",
|
||||
"Controller does not support adaptive trigger control": "",
|
||||
"Cosmic Red": "",
|
||||
"Current": "",
|
||||
"Debug": "",
|
||||
"Delete": "",
|
||||
"Delete all calibration history for this controller? This cannot be undone.": "",
|
||||
"Delete this calibration entry?": "",
|
||||
"Don't show again": "",
|
||||
"Drift is caused by mechanical parts in the joystick being worn out, and they need to be replaced to fix the drift.": "",
|
||||
"DualSense Edge Calibration": "",
|
||||
"Fail": "",
|
||||
"Failed": "",
|
||||
"Failed to connect to device": "",
|
||||
"Failed to disable adaptive trigger": "",
|
||||
"Failed to set speaker tone": "",
|
||||
"Failed to set vibration": "",
|
||||
"Feel for vibration in the controller.": "",
|
||||
"Finetune stick calibration": "",
|
||||
"Finetuning is only available for DualSense and DualSense Edge.": "",
|
||||
"Firefox is supported with the WebHID extension installed.": "",
|
||||
"For more info or help, feel free to reach out on Discord.": "",
|
||||
"Fortnite": "",
|
||||
"Galactic Purple": "",
|
||||
"God of War 20th Anniversary": "",
|
||||
"God of War Ragnarok": "",
|
||||
"Grey Camouflage": "",
|
||||
"Haptic Vibration": "",
|
||||
"Headphone Jack": "",
|
||||
"Housing": "",
|
||||
"How do I use the finetuning feature?": "",
|
||||
"If the calibration is not stored permanently, please double-check the wirings of the hardware mod.": "",
|
||||
"If you don't have a battery connected or the connected battery is empty, AND your cable disconnects during saving the calibration, then your controller has a high chance of being bricked.": "",
|
||||
"If you have not clicked the green button \"Save changes permanently\", then unplugging the controller will reset to the previously saved calibration. It is recommended you test your calibration before saving.": "",
|
||||
"If you have saved the changes permanently, you can reset the changes only if you are using a DualSense or DualSense Edge. You can click on the grey button \"Restore Calibration\" to go back to one of the previous calibrations that was saved on the controller. Known issue: You may need to reboot your controller first in order for previous calibrations to show up.": "",
|
||||
"Image 1": "",
|
||||
"Images": "",
|
||||
"In most cases, calibrating your joysticks that have prior drift issues may result in a worse and unpredictable calibration.": "",
|
||||
"Increase non-circularity": "",
|
||||
"Info": "",
|
||||
"Instructions": "",
|
||||
"It appears the latest joystick calibration has not been saved.": "",
|
||||
"Keep rotating the sticks even if you see no progress!": "",
|
||||
"Last connected": "",
|
||||
"Learn more...": "",
|
||||
"Left Module Barcode": "",
|
||||
"Left stick": "",
|
||||
"Lights": "",
|
||||
"Listen for a tone from the controller speaker.": "",
|
||||
"Long-press [circle] to skip ahead.": "",
|
||||
"Microphone": "",
|
||||
"Microphone Level:": "",
|
||||
"Midnight Black": "",
|
||||
"More details and images": "",
|
||||
"Move the stick to select it for tuning, then without touching the stick use the D-pad buttons to adjust the center point. Flick it and adjust it again if it is off center or flickers.": "",
|
||||
"No controller connected": "",
|
||||
"No saved calibrations found.": "",
|
||||
"No tests completed yet.": "",
|
||||
"Normal": "",
|
||||
"Not shown in the video: You can now also increase the range in each direction uniformly by using the cross in the top right and moving the slider up, which may speed up finetuning. Make sure to rotate the joystick first, otherwise the button cannot be pressed.": "",
|
||||
"Not tested": "",
|
||||
"Nova Pink": "",
|
||||
"Only official controllers are supported, no third-party or \"fake\" controllers.": "",
|
||||
"Option 1": "",
|
||||
"Option 2": "",
|
||||
"Pass": "",
|
||||
"Passed": "",
|
||||
"PlayStation Virtual Reality 2": "",
|
||||
"Please connect a DualShock 4, a DualSense, DualSense Edge or VR2 controller to your computer and press Connect.": "",
|
||||
"Please note: the stick modules on the DS Edge <b>cannot be calibrated via software alone</b>.": "",
|
||||
"Please release the stick to center position before adjusting with D-pad buttons.": "",
|
||||
"Please use a web browser with WebHID support (e.g. Google Chrome or Microsoft Edge) on a PC or Mac.": "",
|
||||
"Plug in headphones to the 3.5mm jack": "",
|
||||
"Press L2 and R2 triggers to feel the trigger resistance.": "",
|
||||
"Press [circle] to close, or [square] to start over": "",
|
||||
"Press [square] to Pass, [cross] to Fail, or [circle] to skip.": "",
|
||||
"Press [square] to begin or [circle] to close": "",
|
||||
"Press [triangle] to go back.": "",
|
||||
"Press each button until they turn green.": "",
|
||||
"Press the D-pad or face buttons in the direction you want the stick position to move.": "",
|
||||
"Progress": "",
|
||||
"Push the stick straight up/down/left/right as far as possible.": "",
|
||||
"Quick Test": "",
|
||||
"Quick calibrate": "",
|
||||
"Range calibration appears to have failed. Please try again and make sure you rotate the sticks.": "",
|
||||
"Repeat": "",
|
||||
"Restart": "",
|
||||
"Restore": "",
|
||||
"Restore calibration": "",
|
||||
"Right Module Barcode": "",
|
||||
"Right stick": "",
|
||||
"Rotate the sticks slowly at least 2 times in one direction and 2 times in the other direction to cover the whole range.": "",
|
||||
"Run through these tests to verify your controller's functionality.": "",
|
||||
"Saving calibration is locked by default on DualSense Edge joystick modules. A hardware mod is required to save the calibration permanently. The calibration is saved on the modules themselves, so you have to perform the mod twice: once for each module. You would need to bridge two points on the PCB with enamelled wire. There are multiple methods, I personally recommend using either of these two locations to solder the wire to. See images below. Ensure the wire is thin enough so that the shell is closed properly. Make sure you don't short the wire to ground through the letters near the bottom joint.": "",
|
||||
"Show raw numbers": "",
|
||||
"Sony DualShock 4": "",
|
||||
"Sony controllers come from the factory calibrated to have an average circularity error of nearly 10 %, and this is now what games expect. Too perfect circularity can make movements and aim feel stiff and unresponsive in some games.": "",
|
||||
"Speaker": "",
|
||||
"Spider-Man 2": "",
|
||||
"Starlight Blue": "",
|
||||
"Step size": "",
|
||||
"Sterling Silver": "",
|
||||
"Support for calibrating DualSense Edge stick modules is now available as an <b>experimental feature</b>.": "",
|
||||
"Test Speaker": "",
|
||||
"Test Summary": "",
|
||||
"Test all buttons, or long-press [square] to Pass and [cross] to Fail, or [circle] to skip.": "",
|
||||
"The <b>Done</b> button will unlock after at most 15 seconds. If you press <b>Done</b> without rotating the sticks, the calibration will be incomplete and you will need to repeat it.": "",
|
||||
"The Last of Us": "",
|
||||
"The calibration is stored on each module individually. It is carried over if you place the modules in a different DualSense Edge. Likewise, if you place a different set of modules in your DualSense Edge, you will get a different calibration that is tied to those new modules.": "",
|
||||
"The calibration was restored successfully! Remember to save the changes in order not to loose them when the controller is rebooted.": "",
|
||||
"The device appears to be a clone. All calibration functionality is disabled.": "",
|
||||
"The device is connected via Bluetooth. Disconnect and reconnect using a USB cable instead.": "",
|
||||
"The finetuning and quick test menus are only accessible for DualSense and DualSense Edge.": "",
|
||||
"The item has been copied to the clipboard.": "",
|
||||
"The website supports the following official controllers:": "",
|
||||
"These previous calibrations are stored locally in your browser's storage. Meaning you can only restore calibrations using the same computer and browser that you used to calibrate it with, and deleting the cache or using Incognito will make any previous calibration irrecoverable.": "",
|
||||
"This controller has unsaved changes that will be lost when the controller is rebooted.": "",
|
||||
"This involves temporarily disabling write protection by applying <b>+1.8V</b> to a specific test point on each module.": "",
|
||||
"This is only for advanced users. If you're not sure what you're doing, please do not attempt it.": "",
|
||||
"This software is not intended to fix stickdrift and will <b>not</b> fix stickdrift on its own if you already experience that.": "",
|
||||
"This test checks all controller buttons by requiring you to press each button up to three times.": "",
|
||||
"This test checks the headphone jack functionality.": "",
|
||||
"This test checks the reliability of the USB port.": "",
|
||||
"This test will cycle through red, green, and blue colors on the controller lightbar, animate the player indicator lights, and flash the mute button.": "",
|
||||
"This test will enable heavy resistance on both L2 and R2 triggers.": "",
|
||||
"This utility cannot fix stick drift.": "",
|
||||
"This video from V2.16 shows how to use the finetuning menu.": "",
|
||||
"To store a custom calibration on the stick's internal memory, a <b>hardware modification</b> is required.": "",
|
||||
"USB Connector": "",
|
||||
"Unsupported browser.": "",
|
||||
"Use expert mode": "",
|
||||
"Use four-step calibration": "",
|
||||
"Use normal mode": "",
|
||||
"Use quick calibration": "",
|
||||
"Using this utility on a phone or tablet is not supported.": "",
|
||||
"Values": "",
|
||||
"Volcanic Red": "",
|
||||
"Watch the controller lights change colors, the player lights animate, and the mute button flash.": "",
|
||||
"We are not responsible for any damage caused by attempting this modification.": "",
|
||||
"We recommend a circularity between 7% and 9%. The reason for this is to mimic a stock controllers calibration. However, symmetrical overshoot is more important and if you need to deviate from this range to achieve better symmetry, that is fine too.": "",
|
||||
"What are the risks of using the calibration?": "",
|
||||
"What circularity percentage to aim for when calibrating and finetuning.": "",
|
||||
"What the software will help with, is ensuring new joysticks will function properly after replacing the old broken joysticks that drift. This step involves opening up the controller and soldering new potentiometers or an entire new joystick.": "",
|
||||
"When calibrating, there is no risk. However, if your controller disconnects during the split second that you save a calibration, then you have a chance of bricking your controller. Make sure your battery has enough charge and is plugged into the controller, and the USB cable is securely connected. This prevents your controller from being bricked if the USB cable accidentally disconnects.": "",
|
||||
"Which controllers does DualShock Calibration GUI support?": "",
|
||||
"While holding the stick to be adjusted straight up/down/left/right, make adjustments until you see lightblue sectors in all four directions after circling the stick both left and right. Then use the": "",
|
||||
"White": "",
|
||||
"Wiggle the USB cable to see if the controller disconnects.": "",
|
||||
"Yes. Simply do another calibration, and click the green button to save permanently.": "",
|
||||
"You can do this in two ways:": "",
|
||||
"You should save your changes, or reboot the controller to revert back to the previous state.": "",
|
||||
"Your device might not be a genuine Sony controller. If it is not a clone then please report this issue.": "",
|
||||
"failed": "",
|
||||
"here": "",
|
||||
"hide": "",
|
||||
"left module": "",
|
||||
"passed": "",
|
||||
"right module": "",
|
||||
"serial number": "",
|
||||
"skipped": "",
|
||||
"tests completed": "",
|
||||
"to increase the non-circularity.": "",
|
||||
"": ""
|
||||
}
|
||||
364
lang/bg_bg.json
Normal file
@@ -0,0 +1,364 @@
|
||||
{
|
||||
".authorMsg": "- Превод на Български е извършен от: <a href='https://www.youtube.com/channel/UC8pzDCIt_CUj8sa7cYgPzHQ'>Tamir-Teknik</a>",
|
||||
"DualShock Calibration GUI": "DualShock калибрационен интерфейс",
|
||||
"Connect": "Свържи",
|
||||
"Connected to:": "Свързан с:",
|
||||
"Disconnect": "Изключване",
|
||||
"Calibrate stick center": "Калибриране на центъра на джойстиците",
|
||||
"Calibrate stick range": "Калибриране на обхвата на джойстиците",
|
||||
"Sections below are not useful, just some debug infos or manual commands": "Секциите по-долу не са полезни, просто някаква отстрана информация или ръчни команди",
|
||||
"NVS Status": "NVS Статус",
|
||||
"Unknown": "Неизвестно",
|
||||
"Query NVS status": "Заявка за статус на NVS",
|
||||
"NVS unlock": "Отключване на NVS",
|
||||
"NVS lock": "Заключване на NVS",
|
||||
"Stick center calibration": "Калибриране на центъра на джойстиците",
|
||||
"Welcome": "Добре дошли",
|
||||
"Step 1": "Стъпка 1",
|
||||
"Step 2": "Стъпка 2",
|
||||
"Step 3": "Стъпка 3",
|
||||
"Step 4": "Стъпка 4",
|
||||
"Completed": "Завършено",
|
||||
"Welcome to the stick center-calibration wizard!": "Добре дошли в магьосника за калибриране на центъра на джойстиците!",
|
||||
"This tool will guide you in re-centering the analog sticks of your controller. It consists of four steps: you will be asked to move both sticks in a direction and release them.": "Този инструмент ще ви насочи към центриране на аналоговите джойстици на вашия контролер. Той се състои от четири стъпки: ще ви бъде поискано да преместите двата джойстика в една посока и да ги освободите.",
|
||||
"Please be aware that, <i>once the calibration is running, it cannot be canceled</i>. Do not close this page or disconnect your controller until it is completed.": "Моля, имайте предвид, че, <i>веднъж като калибрацията е стартирана, не може да бъде отменена</i>. Не затваряйте тази страница или не изключвайте контролера си, докато не приключи.",
|
||||
"Press <b>Start</b> to begin calibration.": "Натиснете <b>Стартирайте</b>, за да започнете калибрирането",
|
||||
"Please move both sticks to the <b>top-left corner</b> and release them.": "Моля, преместете двата джойстика в <b>горния ляв ъгъл</b> и ги освободете.",
|
||||
"When the sticks are back in the center, press <b>Continue</b>.": "Когато джойстиците се върнат в центъра, натиснете <b>Продължи</b>.",
|
||||
"Please move both sticks to the <b>top-right corner</b> and release them.": "Моля, преместете двата джойстика в <b>горния десен ъгъл</b> и ги освободете.",
|
||||
"Please move both sticks to the <b>bottom-left corner</b> and release them.": "Моля, преместете двата джойстика в <b>долния ляв ъгъл</b> и ги освободете.",
|
||||
"Please move both sticks to the <b>bottom-right corner</b> and release them.": "Моля, преместете двата джойстика в <b>долния десен ъгъл</b> и ги освободете.",
|
||||
"Calibration completed successfully!": "Калибрацията завърши успешно!",
|
||||
"Next": "Следващо",
|
||||
"Recentering the controller sticks.": "Повторно центриране на джойстиците на контролера.",
|
||||
"Please do not close this window and do not disconnect your controller. ": "Моля, не затваряйте този прозорец и не изключвайте контролера си. ",
|
||||
"Range calibration": "Калибриране на обхвата",
|
||||
"The controller is now sampling data!": "Контролерът в момента примерява данни!",
|
||||
"Done": "Готово",
|
||||
"Hi, thank you for using this software.": "Здравейте, благодарим ви, че използвате този софтуер.",
|
||||
"If you're finding it helpful and you want to support my efforts, feel free to": "Ако намирате, че е полезно и искате да подкрепите усилията ми, не се колебайте",
|
||||
"buy me a coffee": "поръчайте ми кафе",
|
||||
"! :)": "! :)",
|
||||
"Do you have any suggestion or issue? Drop me a message via email or discord.": "Имате ли някакви предложения или проблеми? Изпратете ми съобщение по имейл или discord.",
|
||||
"Cheers!": "Благодаря!",
|
||||
"Support this project": "Подкрепете този проект",
|
||||
"unknown": "неизвестен",
|
||||
"original": "оригинален",
|
||||
"clone": "клон",
|
||||
"locked": "заключен",
|
||||
"unlocked": "отключен",
|
||||
"error": "грешка",
|
||||
"Build Date": "Дата на изграждане",
|
||||
"HW Version": "Версия на хардуера",
|
||||
"SW Version": "Версия на софтуера",
|
||||
"Device Type": "Тип устройство",
|
||||
"Range calibration completed": "Калибрация на обхвата завършена",
|
||||
"Range calibration failed": "Калибрация на обхвата неуспешна",
|
||||
"Stick calibration failed": "Калибрация на джойстиците неуспешна",
|
||||
"Stick calibration completed": "Калибрация на джойстиците завършена",
|
||||
"NVS Lock failed": "Заключване на NVS неуспешно",
|
||||
"NVS Unlock failed": "Отключване на NVS неуспешно",
|
||||
"Please connect only one controller at time.": "Моля, свържете само един контролер по време на",
|
||||
"Sony DualShock 4 V1": "Sony DualShock 4 V1",
|
||||
"Sony DualShock 4 V2": "Sony DualShock 4 V2",
|
||||
"Sony DualSense": "Sony DualSense",
|
||||
"Sony DualSense Edge": "Sony DualSense Edge",
|
||||
"Connected invalid device": "Свързан невалидно устройство",
|
||||
"Error": "Грешка",
|
||||
"Initializing...": "Инициализация...",
|
||||
"Storing calibration...": "Запазване на калибрацията...",
|
||||
"Sampling...": "Проба...",
|
||||
"Calibration in progress": "Калибрация в ход",
|
||||
"Start": "Започни",
|
||||
"Continue": "Продължи",
|
||||
"Have a nice day :)": "Приятен ден! :)",
|
||||
"Welcome to the Calibration GUI": "Добре дошли в Calibration GUI",
|
||||
"Just few things to know before you can start:": "Просто няколко неща, които трябва да знаете, преди да започнете:",
|
||||
"This website is not affiliated with Sony, PlayStation & co.": "Този уебсайт не е свързан с Sony, PlayStation и др.",
|
||||
"This service is provided without warranty. Use at your own risk.": "Този сервиз се предоставя без гаранция. Използвайте на ваш собствен риск.",
|
||||
"Keep the internal battery of the controller connected and ensure it is well charged. If the battery dies during operations, the controller will be damaged and rendered unusable.": "Задръжте вътрешната батерия на контролера свързана и се уверете, че е напълно заредена. Ако батерията умре по време на операциите, контролерът ще бъде повреден и неползваем.",
|
||||
"Before doing the permanent calibration, try the temporary one to ensure that everything is working well.": "Преди да направите перманентната калибрация, опитайте временната, за да се уверите, че всичко работи добре.",
|
||||
"Understood": "Разбрано",
|
||||
"Version": "Версия",
|
||||
"Frequently Asked Questions": "Често задавани въпроси",
|
||||
"Close": "Затвори",
|
||||
"Welcome to the F.A.Q. section! Below, you'll find answers to some of the most commonly asked questions about this website. If you have any other inquiries or need further assistance, feel free to reach out to me directly. Your feedback and questions are always welcome!": "Добре дошли в раздела с често задавани въпроси! По-долу ще намерите отговори на някои от най-често задаваните въпроси относно този уебсайт. Ако имате други въпроси или се нуждаете от допълнителна помощ, не се колебайте да се свържете директно с мен. Вашите отзиви и въпроси са винаги добре дошли!",
|
||||
"How does it work?": "Как работи това?",
|
||||
"Behind the scenes, this website is the culmination of one year of dedicated effort in reverse-engineering DualShock controllers for fun/hobby from a random guy on the internet.": "Отвъд кадъра, този уебсайт е резултатът от една година на посветена усилия в обратното проектиране на контролерите DualShock за забавление / хоби от случаен човек в интернет.",
|
||||
"Through": "Чрез",
|
||||
"this research": "тази изследователска дейност",
|
||||
", it was discovered that there exist some undocumented commands on DualShock controllers that can be sent via USB and are used during factory assembly process. If these commands are sent, the controller starts the recalibration of analog sticks.": ", беше открито, че съществуват някои недокументирани команди на контролерите DualShock, които могат да се изпращат по USB и се използват по време на процеса на сглобяване във фабриката. Ако тези команди се изпратят, контролерът започва повторната калибрация на аналоговите палчета.",
|
||||
"While the primary focus of this research wasn't initially centered on recalibration, it became apparent that a service offering this capability could greatly benefit numerous individuals. And thus, here we are.": "Въпреки че основният фокус на това изследване първоначално не беше насочен към калибрацията, стана ясно, че услуга, която предлага тази възможност, може значително да ползва много хора. И така, ето ни.",
|
||||
"Is this an officially endorsed service?": "Това ли е официално подкрепена услуга?",
|
||||
"No, this service is simply a creation by a DualShock enthusiast.": "Не, тази услуга просто е създадена от ентусиаст на DualShock.",
|
||||
"Does this website detect if a controller is a clone?": "Този уебсайт ли открива дали контролерът е копие?",
|
||||
"Yes, only DualShock4 at the moment. This happened because I accidentally purchased some clones, spent time identifying the differences and added this functionality to prevent future deception.": "Да, само DualShock4 в момента. Това се случи, защото случайно закупих някои копия, изразходвах време за идентифициране на разликите и добавих тази функционалност, за да предотвратя бъдеща измама.",
|
||||
"Unfortunately, the clones cannot be calibrated anyway, because they only clone the behavior of a DualShock4 during normal gameplay, not all the undocumented functionalities.": "За съжаление, копията все пак не могат да бъдат калибрирани, защото те само клонират поведението на DualShock4 по време на нормална игра, не всички недокументирани функционалности.",
|
||||
"If you want to extend this detection functionality to DualSense, please ship me a fake DualSense and you'll see it in few weeks.": "Ако искате да разширите тази функционалност за откриване и за DualSense, моля, пратете ми фалшив DualSense и ще я видите след няколко седмици.",
|
||||
"What development is in plan?": "Какво развитие е планирано?",
|
||||
"I maintain two separate to-do lists for this project, although the priority has yet to be established.": "За този проект поддържам два отделни списъка с неща за направление, въпреки че приоритетът все още не е установен.",
|
||||
"The first list is about enhancing support for DualShock4 and DualSense controllers:": "Първият списък е за подобряване на поддръжката за контролерите DualShock4 и DualSense:",
|
||||
"Implement calibration of L2/R2 triggers.": "Изпълнете калибрирането на тригерите L2/R2.",
|
||||
"Improve detection of clones, particularly beneficial for those seeking to purchase used controllers with assurance of authenticity.": "Подобрете откриването на клонове, което е особено полезно за онези, които търсят да закупят използвани контролери с увереност в автентичността им.",
|
||||
"Add support for recalibrating IMUs.": "Добавете поддръжка за рекалибриране на IMU.",
|
||||
"Additionally, explore the possibility of reviving non-functioning DualShock controllers (further discussion available on Discord for interested parties).": "Освен това, изследвайте възможността за възстановяване на неработещи контролери DualShock (допълнителни дискусии налични в Discord за заинтересованите страни).",
|
||||
"The second list contains new controllers I aim to support:": "Вторият списък съдържа новите контролери, които се надявам да подкрепя:",
|
||||
"DualShock 3": "DualShock 3",
|
||||
"XBox Controllers": "Контролери на Xbox",
|
||||
"Each of these tasks presents both immense interest and significant time investment. To provide context, supporting a new controller typically demands 6-12 months of full-time research, alongside a stroke of good fortune.": "Всяка от тези задачи представя както огромен интерес, така и значителни времеви инвестиции. За да предоставя контекст, подкрепата на нов контролер обикновено изисква 6-12 месеца на изцяло време за изследване, заедно с малко късмет.",
|
||||
"I love this service, it helped me! How can I contribute?": "Обожавам този сервиз, помогна ми! Как мога да допринеса?",
|
||||
"I'm glad to hear that you found this helpful! If you're interested in contributing, here are a few ways you can help me:": "Радвам се, че научих, че това ви беше полезно! Ако се интересувате от допринесване, ето няколко начина, по които можете да ми помогнете:",
|
||||
"Consider making a": "Разгледайте да направите ",
|
||||
"donation": "дарение",
|
||||
"to support my late-night caffeine-fueled reverse-engineering efforts.": "за подкрепа на моите нощни усилия за обратно инженерство, задвижвани от кафето.",
|
||||
"Ship me a controller you would love to add (send me an email for organization).": "Изпратете ми контролер, който бихте искали да добавите (изпратете ми имейл за организация).",
|
||||
"Translate this website in your language": "Преведете този уебсайт на ваш език",
|
||||
", to help more people like you!": ", за да помогнете на повече хора като вас!",
|
||||
"This website uses analytics to improve the service.": "Този уебсайт използва анализи за подобряване на услугата.",
|
||||
"Board Model": "Модел на платката",
|
||||
"This DualSense controller has outdated firmware.": "Този контролер DualSense има остарял фърмуер.",
|
||||
"Please update the firmware and try again.": "Моля, актуализирайте фърмуера и опитайте отново.",
|
||||
"Joystick Info": "Информация за джойстика",
|
||||
"Check circularity": "Проверка на кръговостта",
|
||||
"No.": "Не.",
|
||||
"Does this software resolve stickdrift?": "Този софтуер решава ли проблема със стикдрифт?",
|
||||
"Stickdrift is caused by a physical defect; namely dirt, worn potentiometer or in some cases a worn spring.": "Стикдрифтът е причинен от физически дефект;а именно замърсяване, износен потенциометър или в някои случаи износена пружина.",
|
||||
"After range calibration, joysticks always go in corners.": "След калибровката на обхвата, джойстиците винаги отиват в ъглите.",
|
||||
"This issue happens because you have clicked \"Done\" immediately after starting a range calibration.": "Този проблем възниква, защото сте натиснали „Готово“ веднага след започване на калибровката на обхвата.",
|
||||
"Please read the instructions.": "Моля, прочетете инструкциите.",
|
||||
"You have to rotate the joysticks before you press \"Done\".": "Трябва да завъртите джойстиците, преди да натиснете \"Готово\".",
|
||||
"Make sure to touch the edges of the joystick frame and rotate slowly, preferably in each direction - clockwise and anti-clockwise.": "Убедете се, че докосвате краищата на рамката на джойстика и завъртате бавно, предпочитано в двете посоки - по часовниковата стрелка и обратно на часовниковата стрелка.",
|
||||
"Only after you have done that, you click on \"Done\".": "Само след като сте направили това, натиснете \"Готово\".",
|
||||
"Changes saved successfully": "Промените са запазени успешно",
|
||||
"Error while saving changes": "Грешка при запазване на промените:",
|
||||
"Save changes permanently": "Запазете промените постоянно",
|
||||
"Reboot controller": "Рестартирайте контролера",
|
||||
"(DualSense & DualSense Edge) Will updating the firmware reset calibration?": "",
|
||||
"(DualSense Edge) Is the calibration stored on the controller or the modules?": "",
|
||||
"(beta)": "",
|
||||
"10x zoom": "",
|
||||
"30th Anniversary": "",
|
||||
"<b>Externally</b>: by applying +1.8V directly to the visible test point without opening the controller.": "",
|
||||
"<b>Internally</b>: by soldering a wire from a +1.8V source to the write-protect TP.": "",
|
||||
"<strong>Average circularity error:</strong> smaller is not always better! Aim for 7-9 %.": "",
|
||||
"A reboot is needed to continue using this DualSense Edge. Please disconnect and reconnect your controller.": "",
|
||||
"A sample test was done with 30 dualsense edge modules, and the results showed that the inner quartile range (IQR) is 8.3% and 9.0%, with an average of 8.6%. This goes to show that stock controllers by default have a relatively high range, and the rule of thumb is to follow factory calibration.": "",
|
||||
"Adaptive Trigger": "",
|
||||
"Adaptive triggers are only supported on DualSense controllers": "",
|
||||
"Add test": "",
|
||||
"After they have been replaced, this utility can be used to calibrate the controller to work with the new joysticks.": "",
|
||||
"Aim for a circularity error of around 7-9 % for the best playing experience.": "",
|
||||
"Astro Bot": "",
|
||||
"Battery Barcode": "",
|
||||
"Battery level is low. Tests may fail due to the controller being in power saving mode.": "",
|
||||
"Be gentle to avoid damage.": "",
|
||||
"Bluetooth Address": "",
|
||||
"Buttons": "",
|
||||
"Calibrating without replacing the joysticks may help temporarily, but it may also make the problem worse, with no way to undo it.": "",
|
||||
"Calibration": "",
|
||||
"Calibration History": "",
|
||||
"Calibration is being stored in the stick modules.": "",
|
||||
"Can I overwrite a (permanent) calibration?": "",
|
||||
"Can I restore a previous calibration?": "",
|
||||
"Cancel": "",
|
||||
"Cannot copy text to the clipboard:": "",
|
||||
"Cannot lock": "",
|
||||
"Cannot read module barcodes": "",
|
||||
"Cannot store data into": "",
|
||||
"Cannot unlock": "",
|
||||
"Center": "",
|
||||
"Center (L1)": "",
|
||||
"Chroma Indigo": "",
|
||||
"Chroma Pearl": "",
|
||||
"Chroma Teal": "",
|
||||
"Circularity": "",
|
||||
"Circularity (R1)": "",
|
||||
"Clear All": "",
|
||||
"Cobalt Blue": "",
|
||||
"Color": "",
|
||||
"Controller Info": "",
|
||||
"Controller does not support adaptive trigger control": "",
|
||||
"Cosmic Red": "",
|
||||
"Current": "",
|
||||
"Debug": "",
|
||||
"Debug Info": "",
|
||||
"Debug buttons": "",
|
||||
"Delete": "",
|
||||
"Delete all calibration history for this controller? This cannot be undone.": "",
|
||||
"Delete this calibration entry?": "",
|
||||
"Don't show again": "",
|
||||
"Drift is caused by mechanical parts in the joystick being worn out, and they need to be replaced to fix the drift.": "",
|
||||
"DualSense Edge Calibration": "",
|
||||
"FW Build Date": "",
|
||||
"FW Series": "",
|
||||
"FW Type": "",
|
||||
"FW Update": "",
|
||||
"FW Update Info": "",
|
||||
"FW Version": "",
|
||||
"Fail": "",
|
||||
"Failed": "",
|
||||
"Failed to connect to device": "",
|
||||
"Failed to disable adaptive trigger": "",
|
||||
"Failed to set speaker tone": "",
|
||||
"Failed to set vibration": "",
|
||||
"Feel for vibration in the controller.": "",
|
||||
"Finetune stick calibration": "",
|
||||
"Finetuning is only available for DualSense and DualSense Edge.": "",
|
||||
"Firefox is supported with the WebHID extension installed.": "",
|
||||
"For more info or help, feel free to reach out on Discord.": "",
|
||||
"Fortnite": "",
|
||||
"Galactic Purple": "",
|
||||
"God of War 20th Anniversary": "",
|
||||
"God of War Ragnarok": "",
|
||||
"Grey Camouflage": "",
|
||||
"HW Model": "",
|
||||
"Haptic Vibration": "",
|
||||
"Hardware": "",
|
||||
"Headphone Jack": "",
|
||||
"Housing": "",
|
||||
"How do I use the finetuning feature?": "",
|
||||
"If the calibration is not stored permanently, please double-check the wirings of the hardware mod.": "",
|
||||
"If you don't have a battery connected or the connected battery is empty, AND your cable disconnects during saving the calibration, then your controller has a high chance of being bricked.": "",
|
||||
"If you have not clicked the green button \"Save changes permanently\", then unplugging the controller will reset to the previously saved calibration. It is recommended you test your calibration before saving.": "",
|
||||
"If you have saved the changes permanently, you can reset the changes only if you are using a DualSense or DualSense Edge. You can click on the grey button \"Restore Calibration\" to go back to one of the previous calibrations that was saved on the controller. Known issue: You may need to reboot your controller first in order for previous calibrations to show up.": "",
|
||||
"Image 1": "",
|
||||
"Images": "",
|
||||
"In most cases, calibrating your joysticks that have prior drift issues may result in a worse and unpredictable calibration.": "",
|
||||
"Increase non-circularity": "",
|
||||
"Info": "",
|
||||
"Instructions": "",
|
||||
"It appears the latest joystick calibration has not been saved.": "",
|
||||
"Keep rotating the sticks even if you see no progress!": "",
|
||||
"Last connected": "",
|
||||
"Learn more...": "",
|
||||
"Left Module Barcode": "",
|
||||
"Left stick": "",
|
||||
"Lights": "",
|
||||
"Listen for a tone from the controller speaker.": "",
|
||||
"Long-press [circle] to skip ahead.": "",
|
||||
"MCU Unique ID": "",
|
||||
"Microphone": "",
|
||||
"Microphone Level:": "",
|
||||
"Midnight Black": "",
|
||||
"More details and images": "",
|
||||
"Move the stick to select it for tuning, then without touching the stick use the D-pad buttons to adjust the center point. Flick it and adjust it again if it is off center or flickers.": "",
|
||||
"No controller connected": "",
|
||||
"No saved calibrations found.": "",
|
||||
"No tests completed yet.": "",
|
||||
"Normal": "",
|
||||
"Not shown in the video: You can now also increase the range in each direction uniformly by using the cross in the top right and moving the slider up, which may speed up finetuning. Make sure to rotate the joystick first, otherwise the button cannot be pressed.": "",
|
||||
"Not tested": "",
|
||||
"Nova Pink": "",
|
||||
"Only official controllers are supported, no third-party or \"fake\" controllers.": "",
|
||||
"Option 1": "",
|
||||
"Option 2": "",
|
||||
"PCBA ID": "",
|
||||
"Pass": "",
|
||||
"Passed": "",
|
||||
"PlayStation Virtual Reality 2": "",
|
||||
"Please connect a DualShock 4, a DualSense, DualSense Edge or VR2 controller to your computer and press Connect.": "",
|
||||
"Please note: the stick modules on the DS Edge <b>cannot be calibrated via software alone</b>.": "",
|
||||
"Please release the stick to center position before adjusting with D-pad buttons.": "",
|
||||
"Please use a web browser with WebHID support (e.g. Google Chrome or Microsoft Edge) on a PC or Mac.": "",
|
||||
"Plug in headphones to the 3.5mm jack": "",
|
||||
"Press L2 and R2 triggers to feel the trigger resistance.": "",
|
||||
"Press [circle] to close, or [square] to start over": "",
|
||||
"Press [square] to Pass, [cross] to Fail, or [circle] to skip.": "",
|
||||
"Press [square] to begin or [circle] to close": "",
|
||||
"Press [triangle] to go back.": "",
|
||||
"Press each button until they turn green.": "",
|
||||
"Press the D-pad or face buttons in the direction you want the stick position to move.": "",
|
||||
"Progress": "",
|
||||
"Push the stick straight up/down/left/right as far as possible.": "",
|
||||
"Quick Test": "",
|
||||
"Quick calibrate": "",
|
||||
"Range calibration appears to have failed. Please try again and make sure you rotate the sticks.": "",
|
||||
"Repeat": "",
|
||||
"Restart": "",
|
||||
"Restore": "",
|
||||
"Restore calibration": "",
|
||||
"Right Module Barcode": "",
|
||||
"Right stick": "",
|
||||
"Rotate the sticks slowly at least 2 times in one direction and 2 times in the other direction to cover the whole range.": "",
|
||||
"Run through these tests to verify your controller's functionality.": "",
|
||||
"SBL FW Version": "",
|
||||
"Saving calibration is locked by default on DualSense Edge joystick modules. A hardware mod is required to save the calibration permanently. The calibration is saved on the modules themselves, so you have to perform the mod twice: once for each module. You would need to bridge two points on the PCB with enamelled wire. There are multiple methods, I personally recommend using either of these two locations to solder the wire to. See images below. Ensure the wire is thin enough so that the shell is closed properly. Make sure you don't short the wire to ground through the letters near the bottom joint.": "",
|
||||
"Serial Number": "",
|
||||
"Show all": "",
|
||||
"Show raw numbers": "",
|
||||
"Software": "",
|
||||
"Sony DualShock 4": "",
|
||||
"Sony controllers come from the factory calibrated to have an average circularity error of nearly 10 %, and this is now what games expect. Too perfect circularity can make movements and aim feel stiff and unresponsive in some games.": "",
|
||||
"Speaker": "",
|
||||
"Spider FW Version": "",
|
||||
"Spider-Man 2": "",
|
||||
"Starlight Blue": "",
|
||||
"Step size": "",
|
||||
"Sterling Silver": "",
|
||||
"Support for calibrating DualSense Edge stick modules is now available as an <b>experimental feature</b>.": "",
|
||||
"Test Speaker": "",
|
||||
"Test Summary": "",
|
||||
"Test all buttons, or long-press [square] to Pass and [cross] to Fail, or [circle] to skip.": "",
|
||||
"The <b>Done</b> button will unlock after at most 15 seconds. If you press <b>Done</b> without rotating the sticks, the calibration will be incomplete and you will need to repeat it.": "",
|
||||
"The Last of Us": "",
|
||||
"The calibration is stored on each module individually. It is carried over if you place the modules in a different DualSense Edge. Likewise, if you place a different set of modules in your DualSense Edge, you will get a different calibration that is tied to those new modules.": "",
|
||||
"The calibration was restored successfully! Remember to save the changes in order not to loose them when the controller is rebooted.": "",
|
||||
"The device appears to be a clone. All calibration functionality is disabled.": "",
|
||||
"The device is connected via Bluetooth. Disconnect and reconnect using a USB cable instead.": "",
|
||||
"The finetuning and quick test menus are only accessible for DualSense and DualSense Edge.": "",
|
||||
"The item has been copied to the clipboard.": "",
|
||||
"The website supports the following official controllers:": "",
|
||||
"These previous calibrations are stored locally in your browser's storage. Meaning you can only restore calibrations using the same computer and browser that you used to calibrate it with, and deleting the cache or using Incognito will make any previous calibration irrecoverable.": "",
|
||||
"This controller has unsaved changes that will be lost when the controller is rebooted.": "",
|
||||
"This involves temporarily disabling write protection by applying <b>+1.8V</b> to a specific test point on each module.": "",
|
||||
"This is only for advanced users. If you're not sure what you're doing, please do not attempt it.": "",
|
||||
"This software is not intended to fix stickdrift and will <b>not</b> fix stickdrift on its own if you already experience that.": "",
|
||||
"This test checks all controller buttons by requiring you to press each button up to three times.": "",
|
||||
"This test checks the headphone jack functionality.": "",
|
||||
"This test checks the reliability of the USB port.": "",
|
||||
"This test will cycle through red, green, and blue colors on the controller lightbar, animate the player indicator lights, and flash the mute button.": "",
|
||||
"This test will enable heavy resistance on both L2 and R2 triggers.": "",
|
||||
"This utility cannot fix stick drift.": "",
|
||||
"This video from V2.16 shows how to use the finetuning menu.": "",
|
||||
"To store a custom calibration on the stick's internal memory, a <b>hardware modification</b> is required.": "",
|
||||
"Touchpad FW Version": "",
|
||||
"Touchpad ID": "",
|
||||
"USB Connector": "",
|
||||
"Unsupported browser.": "",
|
||||
"Use expert mode": "",
|
||||
"Use four-step calibration": "",
|
||||
"Use normal mode": "",
|
||||
"Use quick calibration": "",
|
||||
"Using this utility on a phone or tablet is not supported.": "",
|
||||
"VCM Left Barcode": "",
|
||||
"VCM Right Barcode": "",
|
||||
"Values": "",
|
||||
"Venom FW Version": "",
|
||||
"Volcanic Red": "",
|
||||
"Watch the controller lights change colors, the player lights animate, and the mute button flash.": "",
|
||||
"We are not responsible for any damage caused by attempting this modification.": "",
|
||||
"We recommend a circularity between 7% and 9%. The reason for this is to mimic a stock controllers calibration. However, symmetrical overshoot is more important and if you need to deviate from this range to achieve better symmetry, that is fine too.": "",
|
||||
"What are the risks of using the calibration?": "",
|
||||
"What circularity percentage to aim for when calibrating and finetuning.": "",
|
||||
"What the software will help with, is ensuring new joysticks will function properly after replacing the old broken joysticks that drift. This step involves opening up the controller and soldering new potentiometers or an entire new joystick.": "",
|
||||
"When calibrating, there is no risk. However, if your controller disconnects during the split second that you save a calibration, then you have a chance of bricking your controller. Make sure your battery has enough charge and is plugged into the controller, and the USB cable is securely connected. This prevents your controller from being bricked if the USB cable accidentally disconnects.": "",
|
||||
"Which controllers does DualShock Calibration GUI support?": "",
|
||||
"While holding the stick to be adjusted straight up/down/left/right, make adjustments until you see lightblue sectors in all four directions after circling the stick both left and right. Then use the": "",
|
||||
"White": "",
|
||||
"Wiggle the USB cable to see if the controller disconnects.": "",
|
||||
"Yes. Simply do another calibration, and click the green button to save permanently.": "",
|
||||
"You can do this in two ways:": "",
|
||||
"You should save your changes, or reboot the controller to revert back to the previous state.": "",
|
||||
"Your device might not be a genuine Sony controller. If it is not a clone then please report this issue.": "",
|
||||
"failed": "",
|
||||
"here": "",
|
||||
"hide": "",
|
||||
"left module": "",
|
||||
"passed": "",
|
||||
"right module": "",
|
||||
"serial number": "",
|
||||
"skipped": "",
|
||||
"tests completed": "",
|
||||
"to increase the non-circularity.": "",
|
||||
"": ""
|
||||
}
|
||||
364
lang/cz_cz.json
Normal file
@@ -0,0 +1,364 @@
|
||||
{
|
||||
".authorMsg": "Překlad od Rowan_CZE <a href='https://beardedvillains.cz/'>Bearded Villains Czech Republic</a>",
|
||||
"DualShock Calibration GUI": "DualShock Calibration GUI",
|
||||
"Connect": "Připojit",
|
||||
"Connected to:": "Připojeno:",
|
||||
"Disconnect": "Odpojit",
|
||||
"Calibrate stick center": "Kalibrujte střed páčky",
|
||||
"Calibrate stick range": "Kalibrace dosahu páčky",
|
||||
"Sections below are not useful, just some debug infos or manual commands": "Sekce níže nejsou užitečné, jen některé informace o ladění nebo ruční příkazy",
|
||||
"NVS Status": "Status NVS",
|
||||
"Unknown": "Neznámý",
|
||||
"Query NVS status": "Dotaz na stav NVS",
|
||||
"NVS unlock": "Odblokuj NVS",
|
||||
"NVS lock": "Zablokuj NVS",
|
||||
"Stick center calibration": "Kalibrace středu páčky",
|
||||
"Welcome": "Vítej",
|
||||
"Step 1": "Krok 1",
|
||||
"Step 2": "Krok 2",
|
||||
"Step 3": "Krok 3",
|
||||
"Step 4": "Krok 4",
|
||||
"Completed": "Zakończono",
|
||||
"Welcome to the stick center-calibration wizard!": "Vítejte v průvodci kalibrací středu páček!",
|
||||
"This tool will guide you in re-centering the analog sticks of your controller. It consists of four steps: you will be asked to move both sticks in a direction and release them.": "Tento nástroj vás provede opětovným vycentrováním analogových pák vašeho ovladače. Skládá se ze čtyř kroků: budete požádáni, abyste pohnuli oběma pákami ve směru a uvolnili je.",
|
||||
"Please be aware that, <i>once the calibration is running, it cannot be canceled</i>. Do not close this page or disconnect your controller until it is completed.": "Mějte prosím na paměti, že <i>jakmile je kalibrace spuštěna, nelze ji zrušit</i>. Nezavírejte tuto stránku ani neodpojujte ovladač, dokud nebude dokončena.",
|
||||
"Press <b>Start</b> to begin calibration.": "Stisknutím tlačítka <b>Start</b> zahájíte kalibraci.",
|
||||
"Please move both sticks to the <b>top-left corner</b> and release them.": "Přesuňte prosím obě páčky do <b>levého horního rohu</b> a uvolněte je.",
|
||||
"When the sticks are back in the center, press <b>Continue</b>.": "Když jsou tyče zpět ve středu, stiskněte <b>Pokračovat</b>.",
|
||||
"Please move both sticks to the <b>top-right corner</b> and release them.": "Přesuňte prosím obě páčky do <b>pravého horního rohu</b> a uvolněte je.",
|
||||
"Please move both sticks to the <b>bottom-left corner</b> and release them.": "Přesuňte prosím obě páčky do <b>levého dolního rohu</b> a uvolněte je.",
|
||||
"Please move both sticks to the <b>bottom-right corner</b> and release them.": "Přesuňte prosím obě páčky do <b>pravého dolního rohu</b> a uvolněte je.",
|
||||
"Calibration completed successfully!": "KKalibrace úspěšně dokončena!",
|
||||
"Next": "Další",
|
||||
"Recentering the controller sticks.": "Vycentrování páček.",
|
||||
"Please do not close this window and do not disconnect your controller. ": "Nezavírejte toto okno a neodpojujte ovladač. ",
|
||||
"Range calibration": "Kalibrace rozsahu",
|
||||
"The controller is now sampling data!": "Regulátor nyní vzorkuje data!",
|
||||
"Done": "Hotovo",
|
||||
"Hi, thank you for using this software.": "Dobrý den, děkujeme, že používáte tento software.",
|
||||
"If you're finding it helpful and you want to support my efforts, feel free to": "Pokud to považujete za užitečné a chcete mé úsilí podpořit, neváhejte",
|
||||
"buy me a coffee": "Kup mi kávu",
|
||||
"! :)": "! :)",
|
||||
"Do you have any suggestion or issue? Drop me a message via email or discord.": "Máte nějaký návrh nebo problém? Napište mi zprávu na e-mail nebo diskord.",
|
||||
"Cheers!": "Na zdraví!",
|
||||
"Support this project": "Podpořte tento projekt",
|
||||
"unknown": "Neznámý",
|
||||
"original": "Original",
|
||||
"clone": "Klon",
|
||||
"locked": "Uzamčeno",
|
||||
"unlocked": "Odemčeno",
|
||||
"error": "Chyba",
|
||||
"Build Date": "Build Date",
|
||||
"HW Version": "Verze HW",
|
||||
"SW Version": "Verze SW",
|
||||
"Device Type": "Typ zařízení",
|
||||
"Range calibration completed": "Kalibrace rozsahu dokončena",
|
||||
"Range calibration failed": "Kalibrace rozsahu se nezdařila",
|
||||
"Stick calibration failed": "Kalibrace páček se nezdařila",
|
||||
"Stick calibration completed": "Kalibrace páček dokončena",
|
||||
"NVS Lock failed": "Zámek NVS se nezdařil",
|
||||
"NVS Unlock failed": "Odemknutí NVS se nezdařilo",
|
||||
"Please connect only one controller at time.": "Připojte vždy pouze jeden ovladač.",
|
||||
"Sony DualShock 4 V1": "Sony DualShock 4 V1",
|
||||
"Sony DualShock 4 V2": "Sony DualShock 4 V2",
|
||||
"Sony DualSense": "Sony DualSense",
|
||||
"Sony DualSense Edge": "Sony DualSense Edge",
|
||||
"Connected invalid device": "Připojené neplatné zařízení",
|
||||
"Error": "Chyba",
|
||||
"Initializing...": "Inicializace...",
|
||||
"Storing calibration...": "Uložení kalibrace...",
|
||||
"Sampling...": "Vzorkování...",
|
||||
"Calibration in progress": "Probíhá kalibrace",
|
||||
"Start": "Start",
|
||||
"Continue": "Pokračovat",
|
||||
"Have a nice day :)": "Hezký den :)",
|
||||
"Welcome to the Calibration GUI": "Vítejte v GUI kalibrace",
|
||||
"Just few things to know before you can start:": "Jen pár věcí, které byste měli vědět, než začnete",
|
||||
"This website is not affiliated with Sony, PlayStation & co.": "Tato webová stránka není přidružena k Sony, PlayStation & co.",
|
||||
"This service is provided without warranty. Use at your own risk.": "Tato služba je poskytována bez záruky. Použití na vlastní nebezpečí.",
|
||||
"Keep the internal battery of the controller connected and ensure it is well charged. If the battery dies during operations, the controller will be damaged and rendered unusable.": "Udržujte vnitřní baterii ovladače připojenou a ujistěte se, že je dobře nabitá. Pokud se baterie během provozu vybije, ovladač se poškodí a stane se nepoužitelným.",
|
||||
"Before doing the permanent calibration, try the temporary one to ensure that everything is working well.": "Před provedením trvalé kalibrace vyzkoušejte dočasnou, abyste se ujistili, že vše funguje dobře.",
|
||||
"Understood": "Pochopil",
|
||||
"Version": "Verze",
|
||||
"Frequently Asked Questions": "Často kladené otázky",
|
||||
"Close": "Zavřít",
|
||||
"Welcome to the F.A.Q. section! Below, you'll find answers to some of the most commonly asked questions about this website. If you have any other inquiries or need further assistance, feel free to reach out to me directly. Your feedback and questions are always welcome!": "Vítejte v F.A.Q. sekce! Níže naleznete odpovědi na některé z nejčastěji kladených otázek o tomto webu. Pokud máte nějaké další dotazy nebo potřebujete další pomoc, neváhejte se na mě obrátit přímo. Vaše názory a dotazy jsou vždy vítány!",
|
||||
"How does it work?": "Jak to funguje?",
|
||||
"Behind the scenes, this website is the culmination of one year of dedicated effort in reverse-engineering DualShock controllers for fun/hobby from a random guy on the internet.": "V zákulisí je tato webová stránka vyvrcholením jednoho roku oddaného úsilí v reverzním inženýrství ovladačů DualShock pro zábavu/hobby od náhodného kluka na internetu.",
|
||||
"Through": "Přes",
|
||||
"this research": "tento výzkum",
|
||||
", it was discovered that there exist some undocumented commands on DualShock controllers that can be sent via USB and are used during factory assembly process. If these commands are sent, the controller starts the recalibration of analog sticks.": ", bylo zjištěno, že na ovladačích DualShock existují některé nezdokumentované příkazy, které lze odeslat přes USB a používají se během výrobního procesu montáže. Pokud jsou tyto příkazy odeslány, ovladač zahájí rekalibraci analogových ovladačů.",
|
||||
"While the primary focus of this research wasn't initially centered on recalibration, it became apparent that a service offering this capability could greatly benefit numerous individuals. And thus, here we are.": "I když primární zaměření tohoto výzkumu nebylo zpočátku zaměřeno na rekalibraci, ukázalo se, že služba nabízející tuto schopnost může být velkým přínosem pro mnoho jednotlivců. A tak jsme tady.",
|
||||
"Is this an officially endorsed service?": "Je to oficiálně schválená služba?",
|
||||
"No, this service is simply a creation by a DualShock enthusiast.": "Ne, tato služba je jednoduše výtvorem nadšence pro DualShock.",
|
||||
"Does this website detect if a controller is a clone?": "Detekuje tento web, zda je ovladač klon?",
|
||||
"Yes, only DualShock4 at the moment. This happened because I accidentally purchased some clones, spent time identifying the differences and added this functionality to prevent future deception.": "Ano, momentálně pouze DualShock4. Stalo se to proto, že jsem omylem zakoupil nějaké klony, strávil čas identifikací rozdílů a přidal tuto funkci, abych zabránil budoucímu podvodu.",
|
||||
"Unfortunately, the clones cannot be calibrated anyway, because they only clone the behavior of a DualShock4 during normal gameplay, not all the undocumented functionalities.": "Bohužel klony stejně nelze zkalibrovat, protože klonují pouze chování DualShocku4 při běžném hraní, ne všechny nezdokumentované funkce.",
|
||||
"If you want to extend this detection functionality to DualSense, please ship me a fake DualSense and you'll see it in few weeks.": "Pokud chcete rozšířit tuto funkci detekce na DualSense, pošlete mi prosím falešný DualSense a uvidíte ho za několik týdnů.",
|
||||
"What development is in plan?": "Jaký vývoj je v plánu?",
|
||||
"I maintain two separate to-do lists for this project, although the priority has yet to be established.": "Pro tento projekt udržuji dva samostatné seznamy úkolů, ačkoli priorita ještě nebyla stanovena.",
|
||||
"The first list is about enhancing support for DualShock4 and DualSense controllers:": "První seznam se týká vylepšení podpory pro ovladač DualShock4 a DualSense:",
|
||||
"Implement calibration of L2/R2 triggers.": "Proveďte kalibraci spouštěčů L2/R2.",
|
||||
"Improve detection of clones, particularly beneficial for those seeking to purchase used controllers with assurance of authenticity.": "Zlepšete detekci klonů, což je zvláště výhodné pro ty, kteří chtějí koupit použité ovladače s jistotou pravosti.",
|
||||
"Add support for recalibrating IMUs.": "Přidejte podporu pro rekalibraci IMU.",
|
||||
"Additionally, explore the possibility of reviving non-functioning DualShock controllers (further discussion available on Discord for interested parties).": "Kromě toho prozkoumejte možnost oživení nefunkčních ovladačů DualShock (další diskuze je pro zainteresované strany k dispozici na Discordu).",
|
||||
"The second list contains new controllers I aim to support:": "Druhý seznam obsahuje nové ovladače, které se snažím podporovat:",
|
||||
"DualShock 3": "DualShock 3",
|
||||
"XBox Controllers": "Ovládač Xbox",
|
||||
"Each of these tasks presents both immense interest and significant time investment. To provide context, supporting a new controller typically demands 6-12 months of full-time research, alongside a stroke of good fortune.": "Každý z těchto úkolů představuje obrovský zájem a značnou časovou investici. Aby bylo možné poskytnout kontext, podpora nového ovladače obvykle vyžaduje 6–12 měsíců výzkumu na plný úvazek a štěstí.",
|
||||
"I love this service, it helped me! How can I contribute?": "Miluji tuto službu, pomohla mi! Jak mohu přispět?",
|
||||
"I'm glad to hear that you found this helpful! If you're interested in contributing, here are a few ways you can help me:": "Těší mě, že vám to pomohlo! Pokud máte zájem přispět, zde je několik způsobů, jak mi můžete pomoci:",
|
||||
"Consider making a": "Zvažte vytvoření a ",
|
||||
"donation": "Příspěvek",
|
||||
"to support my late-night caffeine-fueled reverse-engineering efforts.": "na podporu mého nočního úsilí o reverzní inženýrství poháněné kofeinem.",
|
||||
"Ship me a controller you would love to add (send me an email for organization).": "Zašlete mi ovladač, který byste rádi přidali (zašlete mi e-mail pro organizaci).",
|
||||
"Translate this website in your language": "Přeložte tento web do svého jazyka",
|
||||
", to help more people like you!": ", pomoci více lidem, jako jste vy!",
|
||||
"This website uses analytics to improve the service.": "Tento web používá analýzy ke zlepšení služeb.",
|
||||
"Board Model": "Model základní desky",
|
||||
"This DualSense controller has outdated firmware.": "Tento ovladač DualSense má zastaralý firmware.",
|
||||
"Please update the firmware and try again.": "Aktualizujte firmware a zkuste to znovu.",
|
||||
"Joystick Info": "Informace o joysticku",
|
||||
"Check circularity": "Zkontrolujte rozsah",
|
||||
"(DualSense & DualSense Edge) Will updating the firmware reset calibration?": "",
|
||||
"(DualSense Edge) Is the calibration stored on the controller or the modules?": "",
|
||||
"(beta)": "",
|
||||
"10x zoom": "",
|
||||
"30th Anniversary": "",
|
||||
"<b>Externally</b>: by applying +1.8V directly to the visible test point without opening the controller.": "",
|
||||
"<b>Internally</b>: by soldering a wire from a +1.8V source to the write-protect TP.": "",
|
||||
"<strong>Average circularity error:</strong> smaller is not always better! Aim for 7-9 %.": "",
|
||||
"A reboot is needed to continue using this DualSense Edge. Please disconnect and reconnect your controller.": "",
|
||||
"A sample test was done with 30 dualsense edge modules, and the results showed that the inner quartile range (IQR) is 8.3% and 9.0%, with an average of 8.6%. This goes to show that stock controllers by default have a relatively high range, and the rule of thumb is to follow factory calibration.": "",
|
||||
"Adaptive Trigger": "",
|
||||
"Adaptive triggers are only supported on DualSense controllers": "",
|
||||
"Add test": "",
|
||||
"After range calibration, joysticks always go in corners.": "",
|
||||
"After they have been replaced, this utility can be used to calibrate the controller to work with the new joysticks.": "",
|
||||
"Aim for a circularity error of around 7-9 % for the best playing experience.": "",
|
||||
"Astro Bot": "",
|
||||
"Battery Barcode": "",
|
||||
"Battery level is low. Tests may fail due to the controller being in power saving mode.": "",
|
||||
"Be gentle to avoid damage.": "",
|
||||
"Bluetooth Address": "",
|
||||
"Buttons": "",
|
||||
"Calibrating without replacing the joysticks may help temporarily, but it may also make the problem worse, with no way to undo it.": "",
|
||||
"Calibration": "",
|
||||
"Calibration History": "",
|
||||
"Calibration is being stored in the stick modules.": "",
|
||||
"Can I overwrite a (permanent) calibration?": "",
|
||||
"Can I restore a previous calibration?": "",
|
||||
"Cancel": "",
|
||||
"Cannot copy text to the clipboard:": "",
|
||||
"Cannot lock": "",
|
||||
"Cannot read module barcodes": "",
|
||||
"Cannot store data into": "",
|
||||
"Cannot unlock": "",
|
||||
"Center": "",
|
||||
"Center (L1)": "",
|
||||
"Changes saved successfully": "",
|
||||
"Chroma Indigo": "",
|
||||
"Chroma Pearl": "",
|
||||
"Chroma Teal": "",
|
||||
"Circularity": "",
|
||||
"Circularity (R1)": "",
|
||||
"Clear All": "",
|
||||
"Cobalt Blue": "",
|
||||
"Color": "",
|
||||
"Controller Info": "",
|
||||
"Controller does not support adaptive trigger control": "",
|
||||
"Cosmic Red": "",
|
||||
"Current": "",
|
||||
"Debug": "",
|
||||
"Debug Info": "",
|
||||
"Debug buttons": "",
|
||||
"Delete": "",
|
||||
"Delete all calibration history for this controller? This cannot be undone.": "",
|
||||
"Delete this calibration entry?": "",
|
||||
"Does this software resolve stickdrift?": "",
|
||||
"Don't show again": "",
|
||||
"Drift is caused by mechanical parts in the joystick being worn out, and they need to be replaced to fix the drift.": "",
|
||||
"DualSense Edge Calibration": "",
|
||||
"Error while saving changes": "",
|
||||
"FW Build Date": "",
|
||||
"FW Series": "",
|
||||
"FW Type": "",
|
||||
"FW Update": "",
|
||||
"FW Update Info": "",
|
||||
"FW Version": "",
|
||||
"Fail": "",
|
||||
"Failed": "",
|
||||
"Failed to connect to device": "",
|
||||
"Failed to disable adaptive trigger": "",
|
||||
"Failed to set speaker tone": "",
|
||||
"Failed to set vibration": "",
|
||||
"Feel for vibration in the controller.": "",
|
||||
"Finetune stick calibration": "",
|
||||
"Finetuning is only available for DualSense and DualSense Edge.": "",
|
||||
"Firefox is supported with the WebHID extension installed.": "",
|
||||
"For more info or help, feel free to reach out on Discord.": "",
|
||||
"Fortnite": "",
|
||||
"Galactic Purple": "",
|
||||
"God of War 20th Anniversary": "",
|
||||
"God of War Ragnarok": "",
|
||||
"Grey Camouflage": "",
|
||||
"HW Model": "",
|
||||
"Haptic Vibration": "",
|
||||
"Hardware": "",
|
||||
"Headphone Jack": "",
|
||||
"Housing": "",
|
||||
"How do I use the finetuning feature?": "",
|
||||
"If the calibration is not stored permanently, please double-check the wirings of the hardware mod.": "",
|
||||
"If you don't have a battery connected or the connected battery is empty, AND your cable disconnects during saving the calibration, then your controller has a high chance of being bricked.": "",
|
||||
"If you have not clicked the green button \"Save changes permanently\", then unplugging the controller will reset to the previously saved calibration. It is recommended you test your calibration before saving.": "",
|
||||
"If you have saved the changes permanently, you can reset the changes only if you are using a DualSense or DualSense Edge. You can click on the grey button \"Restore Calibration\" to go back to one of the previous calibrations that was saved on the controller. Known issue: You may need to reboot your controller first in order for previous calibrations to show up.": "",
|
||||
"Image 1": "",
|
||||
"Images": "",
|
||||
"In most cases, calibrating your joysticks that have prior drift issues may result in a worse and unpredictable calibration.": "",
|
||||
"Increase non-circularity": "",
|
||||
"Info": "",
|
||||
"Instructions": "",
|
||||
"It appears the latest joystick calibration has not been saved.": "",
|
||||
"Keep rotating the sticks even if you see no progress!": "",
|
||||
"Last connected": "",
|
||||
"Learn more...": "",
|
||||
"Left Module Barcode": "",
|
||||
"Left stick": "",
|
||||
"Lights": "",
|
||||
"Listen for a tone from the controller speaker.": "",
|
||||
"Long-press [circle] to skip ahead.": "",
|
||||
"MCU Unique ID": "",
|
||||
"Make sure to touch the edges of the joystick frame and rotate slowly, preferably in each direction - clockwise and anti-clockwise.": "",
|
||||
"Microphone": "",
|
||||
"Microphone Level:": "",
|
||||
"Midnight Black": "",
|
||||
"More details and images": "",
|
||||
"Move the stick to select it for tuning, then without touching the stick use the D-pad buttons to adjust the center point. Flick it and adjust it again if it is off center or flickers.": "",
|
||||
"No controller connected": "",
|
||||
"No saved calibrations found.": "",
|
||||
"No tests completed yet.": "",
|
||||
"No.": "",
|
||||
"Normal": "",
|
||||
"Not shown in the video: You can now also increase the range in each direction uniformly by using the cross in the top right and moving the slider up, which may speed up finetuning. Make sure to rotate the joystick first, otherwise the button cannot be pressed.": "",
|
||||
"Not tested": "",
|
||||
"Nova Pink": "",
|
||||
"Only after you have done that, you click on \"Done\".": "",
|
||||
"Only official controllers are supported, no third-party or \"fake\" controllers.": "",
|
||||
"Option 1": "",
|
||||
"Option 2": "",
|
||||
"PCBA ID": "",
|
||||
"Pass": "",
|
||||
"Passed": "",
|
||||
"PlayStation Virtual Reality 2": "",
|
||||
"Please connect a DualShock 4, a DualSense, DualSense Edge or VR2 controller to your computer and press Connect.": "",
|
||||
"Please note: the stick modules on the DS Edge <b>cannot be calibrated via software alone</b>.": "",
|
||||
"Please read the instructions.": "",
|
||||
"Please release the stick to center position before adjusting with D-pad buttons.": "",
|
||||
"Please use a web browser with WebHID support (e.g. Google Chrome or Microsoft Edge) on a PC or Mac.": "",
|
||||
"Plug in headphones to the 3.5mm jack": "",
|
||||
"Press L2 and R2 triggers to feel the trigger resistance.": "",
|
||||
"Press [circle] to close, or [square] to start over": "",
|
||||
"Press [square] to Pass, [cross] to Fail, or [circle] to skip.": "",
|
||||
"Press [square] to begin or [circle] to close": "",
|
||||
"Press [triangle] to go back.": "",
|
||||
"Press each button until they turn green.": "",
|
||||
"Press the D-pad or face buttons in the direction you want the stick position to move.": "",
|
||||
"Progress": "",
|
||||
"Push the stick straight up/down/left/right as far as possible.": "",
|
||||
"Quick Test": "",
|
||||
"Quick calibrate": "",
|
||||
"Range calibration appears to have failed. Please try again and make sure you rotate the sticks.": "",
|
||||
"Reboot controller": "",
|
||||
"Repeat": "",
|
||||
"Restart": "",
|
||||
"Restore": "",
|
||||
"Restore calibration": "",
|
||||
"Right Module Barcode": "",
|
||||
"Right stick": "",
|
||||
"Rotate the sticks slowly at least 2 times in one direction and 2 times in the other direction to cover the whole range.": "",
|
||||
"Run through these tests to verify your controller's functionality.": "",
|
||||
"SBL FW Version": "",
|
||||
"Save changes permanently": "",
|
||||
"Saving calibration is locked by default on DualSense Edge joystick modules. A hardware mod is required to save the calibration permanently. The calibration is saved on the modules themselves, so you have to perform the mod twice: once for each module. You would need to bridge two points on the PCB with enamelled wire. There are multiple methods, I personally recommend using either of these two locations to solder the wire to. See images below. Ensure the wire is thin enough so that the shell is closed properly. Make sure you don't short the wire to ground through the letters near the bottom joint.": "",
|
||||
"Serial Number": "",
|
||||
"Show all": "",
|
||||
"Show raw numbers": "",
|
||||
"Software": "",
|
||||
"Sony DualShock 4": "",
|
||||
"Sony controllers come from the factory calibrated to have an average circularity error of nearly 10 %, and this is now what games expect. Too perfect circularity can make movements and aim feel stiff and unresponsive in some games.": "",
|
||||
"Speaker": "",
|
||||
"Spider FW Version": "",
|
||||
"Spider-Man 2": "",
|
||||
"Starlight Blue": "",
|
||||
"Step size": "",
|
||||
"Sterling Silver": "",
|
||||
"Stickdrift is caused by a physical defect; namely dirt, worn potentiometer or in some cases a worn spring.": "",
|
||||
"Support for calibrating DualSense Edge stick modules is now available as an <b>experimental feature</b>.": "",
|
||||
"Test Speaker": "",
|
||||
"Test Summary": "",
|
||||
"Test all buttons, or long-press [square] to Pass and [cross] to Fail, or [circle] to skip.": "",
|
||||
"The <b>Done</b> button will unlock after at most 15 seconds. If you press <b>Done</b> without rotating the sticks, the calibration will be incomplete and you will need to repeat it.": "",
|
||||
"The Last of Us": "",
|
||||
"The calibration is stored on each module individually. It is carried over if you place the modules in a different DualSense Edge. Likewise, if you place a different set of modules in your DualSense Edge, you will get a different calibration that is tied to those new modules.": "",
|
||||
"The calibration was restored successfully! Remember to save the changes in order not to loose them when the controller is rebooted.": "",
|
||||
"The device appears to be a clone. All calibration functionality is disabled.": "",
|
||||
"The device is connected via Bluetooth. Disconnect and reconnect using a USB cable instead.": "",
|
||||
"The finetuning and quick test menus are only accessible for DualSense and DualSense Edge.": "",
|
||||
"The item has been copied to the clipboard.": "",
|
||||
"The website supports the following official controllers:": "",
|
||||
"These previous calibrations are stored locally in your browser's storage. Meaning you can only restore calibrations using the same computer and browser that you used to calibrate it with, and deleting the cache or using Incognito will make any previous calibration irrecoverable.": "",
|
||||
"This controller has unsaved changes that will be lost when the controller is rebooted.": "",
|
||||
"This involves temporarily disabling write protection by applying <b>+1.8V</b> to a specific test point on each module.": "",
|
||||
"This is only for advanced users. If you're not sure what you're doing, please do not attempt it.": "",
|
||||
"This issue happens because you have clicked \"Done\" immediately after starting a range calibration.": "",
|
||||
"This software is not intended to fix stickdrift and will <b>not</b> fix stickdrift on its own if you already experience that.": "",
|
||||
"This test checks all controller buttons by requiring you to press each button up to three times.": "",
|
||||
"This test checks the headphone jack functionality.": "",
|
||||
"This test checks the reliability of the USB port.": "",
|
||||
"This test will cycle through red, green, and blue colors on the controller lightbar, animate the player indicator lights, and flash the mute button.": "",
|
||||
"This test will enable heavy resistance on both L2 and R2 triggers.": "",
|
||||
"This utility cannot fix stick drift.": "",
|
||||
"This video from V2.16 shows how to use the finetuning menu.": "",
|
||||
"To store a custom calibration on the stick's internal memory, a <b>hardware modification</b> is required.": "",
|
||||
"Touchpad FW Version": "",
|
||||
"Touchpad ID": "",
|
||||
"USB Connector": "",
|
||||
"Unsupported browser.": "",
|
||||
"Use expert mode": "",
|
||||
"Use four-step calibration": "",
|
||||
"Use normal mode": "",
|
||||
"Use quick calibration": "",
|
||||
"Using this utility on a phone or tablet is not supported.": "",
|
||||
"VCM Left Barcode": "",
|
||||
"VCM Right Barcode": "",
|
||||
"Values": "",
|
||||
"Venom FW Version": "",
|
||||
"Volcanic Red": "",
|
||||
"Watch the controller lights change colors, the player lights animate, and the mute button flash.": "",
|
||||
"We are not responsible for any damage caused by attempting this modification.": "",
|
||||
"We recommend a circularity between 7% and 9%. The reason for this is to mimic a stock controllers calibration. However, symmetrical overshoot is more important and if you need to deviate from this range to achieve better symmetry, that is fine too.": "",
|
||||
"What are the risks of using the calibration?": "",
|
||||
"What circularity percentage to aim for when calibrating and finetuning.": "",
|
||||
"What the software will help with, is ensuring new joysticks will function properly after replacing the old broken joysticks that drift. This step involves opening up the controller and soldering new potentiometers or an entire new joystick.": "",
|
||||
"When calibrating, there is no risk. However, if your controller disconnects during the split second that you save a calibration, then you have a chance of bricking your controller. Make sure your battery has enough charge and is plugged into the controller, and the USB cable is securely connected. This prevents your controller from being bricked if the USB cable accidentally disconnects.": "",
|
||||
"Which controllers does DualShock Calibration GUI support?": "",
|
||||
"While holding the stick to be adjusted straight up/down/left/right, make adjustments until you see lightblue sectors in all four directions after circling the stick both left and right. Then use the": "",
|
||||
"White": "",
|
||||
"Wiggle the USB cable to see if the controller disconnects.": "",
|
||||
"Yes. Simply do another calibration, and click the green button to save permanently.": "",
|
||||
"You can do this in two ways:": "",
|
||||
"You have to rotate the joysticks before you press \"Done\".": "",
|
||||
"You should save your changes, or reboot the controller to revert back to the previous state.": "",
|
||||
"Your device might not be a genuine Sony controller. If it is not a clone then please report this issue.": "",
|
||||
"failed": "",
|
||||
"here": "",
|
||||
"hide": "",
|
||||
"left module": "",
|
||||
"passed": "",
|
||||
"right module": "",
|
||||
"serial number": "",
|
||||
"skipped": "",
|
||||
"tests completed": "",
|
||||
"to increase the non-circularity.": "",
|
||||
"": ""
|
||||
}
|
||||
364
lang/da_dk.json
Normal file
@@ -0,0 +1,364 @@
|
||||
{
|
||||
".authorMsg": "- Oversættelse til dansk af Claus Christensen",
|
||||
"DualShock Calibration GUI": "DualShock Kalibrerings GUI",
|
||||
"Connect": "Tilslut",
|
||||
"Connected to:": "Tilsluttet til:",
|
||||
"Disconnect": "Afbryd",
|
||||
"Calibrate stick center": "Kalibrér styrepindens centrum",
|
||||
"Calibrate stick range": "Kalibrér styrepindens rækkevidde",
|
||||
"Sections below are not useful, just some debug infos or manual commands": "Afsnittene nedenfor er ikke relevante, blot nogle fejlfindingsoplysninger eller manuelle kommandoer",
|
||||
"NVS Status": "NVS Status",
|
||||
"Unknown": "Ukendt",
|
||||
"Debug buttons": "Fejlfindingsknapper",
|
||||
"Query NVS status": "Forespørg NVS status",
|
||||
"NVS unlock": "lås NVS op",
|
||||
"NVS lock": "lås NVS",
|
||||
"Stick center calibration": "Kalibrering af styrepindens centrum",
|
||||
"Welcome": "Velkommen",
|
||||
"Step 1": "Trin 1",
|
||||
"Step 2": "Trin 2",
|
||||
"Step 3": "Trin 3",
|
||||
"Step 4": "Trin 4",
|
||||
"Completed": "Fuldført",
|
||||
"Welcome to the stick center-calibration wizard!": "Velkommen til guiden til kalibrering af styrepindens centrum!",
|
||||
"This tool will guide you in re-centering the analog sticks of your controller. It consists of four steps: you will be asked to move both sticks in a direction and release them.": "Dette værktøj vil guide dig i at centrere de analoge styrepinde på din controller igen. Det består af fire trin: Du vil blive bedt om at bevæge begge styrepinde i én retning og derefter slippe dem.",
|
||||
"Please be aware that, <i>once the calibration is running, it cannot be canceled</i>. Do not close this page or disconnect your controller until it is completed.": "Vær venligst opmærksom på, at <i>når kalibreringen først er i gang, kan den ikke annulleres</i>. Luk ikke denne side, og frakobl ikke din controller, før processen er afsluttet.",
|
||||
"Press <b>Start</b> to begin calibration.": "Tryk på <b>\"Start\"</b> for at begynde kalibreringen.",
|
||||
"Please move both sticks to the <b>top-left corner</b> and release them.": "Flyt begge styrepinde til det <b>øverste venstre hjørne</b>, og slip dem.",
|
||||
"When the sticks are back in the center, press <b>Continue</b>.": "Når styrepindene er tilbage i centrum, skak du trykke på <b>\"Fortsæt\"</b>.",
|
||||
"Please move both sticks to the <b>top-right corner</b> and release them.": "Flyt begge styrepinde til det <b>øverste højre hjørne</b>, og slip dem.",
|
||||
"Please move both sticks to the <b>bottom-left corner</b> and release them.": "Flyt begge styrepinde til det <b>nederste venstre hjørne</b>, og slip dem.",
|
||||
"Please move both sticks to the <b>bottom-right corner</b> and release them.": "Flyt begge styrepinde til det <b>nederste højre hjørne</b>, og slip dem.",
|
||||
"Calibration completed successfully!": "Kalibreringen er gennemført med succes!",
|
||||
"Next": "Næste",
|
||||
"Recentering the controller sticks.": "Genjustering af controllerens styrepinde.",
|
||||
"Please do not close this window and do not disconnect your controller. ": "Luk venligst ikke dette vindue, og frakobl ikke din controller. ",
|
||||
"Range calibration": "Rækkeviddekalibrering",
|
||||
"The controller is now sampling data!": "Controlleren indsamler nu data!",
|
||||
"Done": "Færdig",
|
||||
"Hi, thank you for using this software.": "Hej, tak fordi du bruger denne software.",
|
||||
"If you're finding it helpful and you want to support my efforts, feel free to": "Hvis du finder den nyttig, og du ønsker at støtte mine bestræbelser, er du velkommen til at",
|
||||
"buy me a coffee": "købe mig en kaffe",
|
||||
"! :)": "! :)",
|
||||
"Do you have any suggestion or issue? Drop me a message via email or discord.": "Har du forslag eller oplever du problemer? Send mig en besked via e-mail eller Discord.",
|
||||
"Cheers!": "Cheers!",
|
||||
"Support this project": "Støt dette projekt",
|
||||
"unknown": "ukendt",
|
||||
"original": "original",
|
||||
"clone": "klon",
|
||||
"locked": "låst",
|
||||
"unlocked": "ulåst",
|
||||
"error": "fejl",
|
||||
"Build Date": "Build Dato",
|
||||
"HW Version": "HW Version",
|
||||
"SW Version": "SW Version",
|
||||
"Device Type": "Enhedstype",
|
||||
"Range calibration completed": "Rækkeviddekalibrering gennemført",
|
||||
"Range calibration failed": "Rækkeviddekalibrering mislykkedes",
|
||||
"Stick calibration failed": "Kalibrering af styrepinde mislykkedes",
|
||||
"Stick calibration completed": "Kalibrering af styrepinde gennemført",
|
||||
"NVS Lock failed": "NVS låsning mislykkedes",
|
||||
"NVS Unlock failed": "NVS oplåsning mislykkedes",
|
||||
"Please connect only one controller at time.": "Forbind kun én controller ad gangen.",
|
||||
"Sony DualShock 4 V1": "Sony DualShock 4 V1",
|
||||
"Sony DualShock 4 V2": "Sony DualShock 4 V2",
|
||||
"Sony DualSense": "Sony DualSense",
|
||||
"Sony DualSense Edge": "Sony DualSense Edge",
|
||||
"Connected invalid device": "Forbundet til en ugyldig enhed",
|
||||
"The device appears to be a clone. All calibration functionality is disabled.": "Enheden ser ud til at være en kopi. Al kalibreringsfunktionalitet er deaktiveret.",
|
||||
"Error": "Fejl",
|
||||
"Initializing...": "Initialiserer...",
|
||||
"Storing calibration...": "Gemmer kalibrering...",
|
||||
"Sampling...": "Sampling...",
|
||||
"Calibration in progress": "Kalibrering er i gang",
|
||||
"Start": "Start",
|
||||
"Continue": "Fortsæt",
|
||||
"Have a nice day :)": "Hav en god dag :)",
|
||||
"Welcome to the Calibration GUI": "Velkommen til Kalibrerings GUI",
|
||||
"Just few things to know before you can start:": "Bare et par ting, du skal vide, før du går i gang:",
|
||||
"This website is not affiliated with Sony, PlayStation & co.": "Denne hjemmeside er ikke tilknyttet Sony, PlayStation & co.",
|
||||
"This service is provided without warranty. Use at your own risk.": "Denne service leveres uden garanti og benyttes på eget ansvar.",
|
||||
"Keep the internal battery of the controller connected and ensure it is well charged. If the battery dies during operations, the controller will be damaged and rendered unusable.": "Hold controllerens interne batteri tilsluttet, og sørg for, at det er godt opladet. Hvis batteriet løber tør for strøm under processen, kan controlleren blive beskadiget og ubrugelig.",
|
||||
"Before doing the permanent calibration, try the temporary one to ensure that everything is working well.": "Før du foretager en permanent kalibrering, bør du prøve en midlertidig for at sikre, at alt fungerer korrekt.",
|
||||
"Understood": "Forstået",
|
||||
"Version": "Version",
|
||||
"Frequently Asked Questions": "Ofte stillede spørgsmål",
|
||||
"Close": "Luk",
|
||||
"Welcome to the F.A.Q. section! Below, you'll find answers to some of the most commonly asked questions about this website. If you have any other inquiries or need further assistance, feel free to reach out to me directly. Your feedback and questions are always welcome!": "<b>Velkommen til sektionen med ofte stillede spørgsmål!</b><br> Her finder du svar på nogle af de mest almindelige spørgsmål om denne hjemmeside. Hvis du har andre spørgsmål eller har brug for yderligere hjælp, er du altid velkommen til at kontakte mig direkte. Din feedback og dine spørgsmål er altid velkomne!",
|
||||
"How does it work?": "Hvordan fungerer det?",
|
||||
"Behind the scenes, this website is the culmination of one year of dedicated effort in reverse-engineering DualShock controllers for fun/hobby from a random guy on the internet.": "Bag kulisserne er denne hjemmeside resultatet af et års dedikeret arbejde med reverse-engineering af DualShock controllere for sjov/hobby, udført af en tilfældig fyr på internettet.",
|
||||
"Through": "Gennem",
|
||||
"this research": "denne forskning",
|
||||
", it was discovered that there exist some undocumented commands on DualShock controllers that can be sent via USB and are used during factory assembly process. If these commands are sent, the controller starts the recalibration of analog sticks.": ", blev det opdaget, at der findes nogle udokumenterede kommandoer på DualShock-controllere, som kan sendes via USB og anvendes under fabriksmonteringsprocessen. Når disse kommandoer sendes, starter controlleren en genkalibrering af de analoge styrepinde.",
|
||||
"While the primary focus of this research wasn't initially centered on recalibration, it became apparent that a service offering this capability could greatly benefit numerous individuals. And thus, here we are.": "Selvom det oprindelige fokus for denne forskning oprindeligt ikke var rettet mod genkalibrering, blev det hurtigt klart, at en service med denne funktion kunne være til stor gavn for mange. Og dermed er vi her.",
|
||||
"Is this an officially endorsed service?": "Er dette en officielt godkendt service?",
|
||||
"No, this service is simply a creation by a DualShock enthusiast.": "Nej, denne service er blot skabt af en DualShock-entusiast.",
|
||||
"Does this website detect if a controller is a clone?": "Kan denne hjemmeside registrere, om en controller er en klon?",
|
||||
"Yes, only DualShock4 at the moment. This happened because I accidentally purchased some clones, spent time identifying the differences and added this functionality to prevent future deception.": "Ja, kun DualShock4 i øjeblikket. Det skete, fordi jeg ved en fejl købte nogle kloner, brugte tid på at identificere forskellene og tilføjede denne funktionalitet for at forhindre fremtidigt bedrag.",
|
||||
"Unfortunately, the clones cannot be calibrated anyway, because they only clone the behavior of a DualShock4 during normal gameplay, not all the undocumented functionalities.": "Desværre kan klonerne ikke kalibreres, fordi de kun efterligner DualShock4’s adfærd under almindeligt gameplay og ikke alle de udokumenterede funktioner.",
|
||||
"If you want to extend this detection functionality to DualSense, please ship me a fake DualSense and you'll see it in few weeks.": "Hvis du ønsker at udvide denne detektionsfunktionalitet til DualSense, så send mig en falsk DualSense, og du vil kunne se resultaterne om et par uger.",
|
||||
"What development is in plan?": "Hvilke forbedringer er planlagt?",
|
||||
"I maintain two separate to-do lists for this project, although the priority has yet to be established.": "Jeg vedligeholder to separate to-do-lister for dette projekt, selvom prioriteringen endnu ikke er fastlagt.",
|
||||
"The first list is about enhancing support for DualShock4 and DualSense controllers:": "Den første liste handler om at forbedre understøttelsen af DualShock4- og DualSense-controllere:",
|
||||
"Implement calibration of L2/R2 triggers.": "Implementering af kalibrering for L2/R2-aftrækker.",
|
||||
"Improve detection of clones, particularly beneficial for those seeking to purchase used controllers with assurance of authenticity.": "Forbedring af registreringen af kloner, hvilket især er nyttigt for dem, der ønsker at købe brugte controllere med garanti for ægthed.",
|
||||
"Add support for recalibrating IMUs.": "Tilføjelse af understøttelse for genkalibrering af IMU’er.",
|
||||
"Additionally, explore the possibility of reviving non-functioning DualShock controllers (further discussion available on Discord for interested parties).": "Undersøgelse af muligheden for at genoplive ikke-fungerende DualShock-controllere (yderligere diskussion er tilgængelig på Discord for interesserede).",
|
||||
"The second list contains new controllers I aim to support:": "Den anden liste indeholder nye controllere, jeg har til hensigt at understøtte:",
|
||||
"DualShock 3": "DualShock 3",
|
||||
"XBox Controllers": "Xbox Controller",
|
||||
"Each of these tasks presents both immense interest and significant time investment. To provide context, supporting a new controller typically demands 6-12 months of full-time research, alongside a stroke of good fortune.": "Hver af disse opgaver er både utroligt spændende og kræver en betydelig tidsmæssig investering. For at sætte det i perspektiv kræver det typisk 6-12 måneders fuldtidsforskning at tilføje understøttelse af en ny controller - og en god portion held.",
|
||||
"I love this service, it helped me! How can I contribute?": "Jeg elsker denne service, den har hjulpet mig! Hvordan kan jeg bidrage?",
|
||||
"I'm glad to hear that you found this helpful! If you're interested in contributing, here are a few ways you can help me:": "Jeg er glad for at høre, at du fandt dette nyttigt! Hvis du er interesseret i at bidrage, er her nogle måder, du kan hjælpe mig på:",
|
||||
"Consider making a": "Overvej at give en",
|
||||
"donation": "donation",
|
||||
"to support my late-night caffeine-fueled reverse-engineering efforts.": ", for at støtte mine sene nætter med koffein-drevne reverse-engineering indsatser.",
|
||||
"Ship me a controller you would love to add (send me an email for organization).": "Send mig en controller, du gerne vil have tilføjet (send en e-mail for at aftale det praktiske).",
|
||||
"Translate this website in your language": "Oversæt denne hjemmeside til dit sprog",
|
||||
", to help more people like you!": ", for at hjælpe flere personer som dig!",
|
||||
"This website uses analytics to improve the service.": "Hjemmesiden anvender analyseværktøjer for at forbedre servicen.",
|
||||
"Board Model": "Board Model",
|
||||
"This DualSense controller has outdated firmware.": "Denne DualSense controller har forældet firmware.",
|
||||
"Please update the firmware and try again.": "Opdater venligst firmwaren og prøv igen.",
|
||||
"Joystick Info": "Joystick Info",
|
||||
"Check circularity": "Tjek cirkularitet",
|
||||
"No.": "Nej.",
|
||||
"Does this software resolve stickdrift?": "Kan denne software løse styrepinddrift?",
|
||||
"Stickdrift is caused by a physical defect; namely dirt, worn potentiometer or in some cases a worn spring.": "Styrepinddrift skyldes en fysisk fejl; nemlig snavs, en slidt potentiometer eller i nogle tilfælde en slidt fjeder.",
|
||||
"After range calibration, joysticks always go in corners.": "Efter rækkeviddekalibrering, bevæger styrepindene sig altid ud i hjørnerne.",
|
||||
"This issue happens because you have clicked \"Done\" immediately after starting a range calibration.": "Dette problem opstår, fordi du har klikket på \"Færdig\" lige efter at have startet en rækkeviddekalibrering.",
|
||||
"Please read the instructions.": "Læs venligst vejledningen.",
|
||||
"You have to rotate the joysticks before you press \"Done\".": "Du skal dreje styrepindene, inden du trykker på \"Færdig\".",
|
||||
"Make sure to touch the edges of the joystick frame and rotate slowly, preferably in each direction - clockwise and anti-clockwise.": "Sørg for at røre ved kanterne af styrepindens ramme og drej langsomt, helst i begge retninger - med uret og mod uret.",
|
||||
"Only after you have done that, you click on \"Done\".": "Først når du har gjort det, skal du klikke på \"Færdig\".",
|
||||
"Changes saved successfully": "Ændringer gemt med succes",
|
||||
"Error while saving changes": "Fejl under gemning af ændringer",
|
||||
"Save changes permanently": "Gem ændringer permanent",
|
||||
"Reboot controller": "Genstart Controller",
|
||||
"Controller Info": "Controller Info",
|
||||
"Debug Info": "Fejlfindingsinfo",
|
||||
"Software": "Software",
|
||||
"Hardware": "Hardware",
|
||||
"FW Build Date": "FW Build Dato",
|
||||
"FW Type": "FW Type",
|
||||
"FW Series": "FW Serie",
|
||||
"Serial Number": "Serienummer",
|
||||
"Battery Barcode": "Batteri Stregkode",
|
||||
"VCM Left Barcode": "VCM Venstre Stregkode",
|
||||
"VCM Right Barcode": "VCM Højre Stregkode",
|
||||
"Show all": "Vis alt",
|
||||
"Finetune stick calibration": "Finjuster styrepindskalibrering",
|
||||
"(beta)": "(beta)",
|
||||
"Left stick": "Venstre styrepind",
|
||||
"Right stick": "Højre styrepind",
|
||||
"Cancel": "Afbryd",
|
||||
"30th Anniversary": "30th Anniversary",
|
||||
"<b>Externally</b>: by applying +1.8V directly to the visible test point without opening the controller.": "<b>Eksternt</b>: ved at påføre +1,8V direkte på det synlige testpunkt uden at åbne controlleren.",
|
||||
"<b>Internally</b>: by soldering a wire from a +1.8V source to the write-protect TP.": "<b>Intern</b>: ved at lodde en ledning fra en +1,8V kilde til skrivebeskyttelses-testpunktet (TP).",
|
||||
"Astro Bot": "Astro Bot",
|
||||
"Bluetooth Address": "Bluetooth Adresse",
|
||||
"Calibration is being stored in the stick modules.": "Kalibreringen bliver gemt i styrepindmodulerne.",
|
||||
"Cannot lock": "Kan ikke låse",
|
||||
"Cannot store data into": "Kan ikke gemme data i",
|
||||
"Cannot unlock": "Kan ikke låse op",
|
||||
"Chroma Indigo": "Chroma Indigo",
|
||||
"Chroma Pearl": "Chroma Pearl",
|
||||
"Chroma Teal": "Chroma Teal",
|
||||
"Cobalt Blue": "Cobalt Blue",
|
||||
"Color": "Farve",
|
||||
"Cosmic Red": "Cosmic Red",
|
||||
"DualSense Edge Calibration": "DualSense Edge Kalibrering",
|
||||
"FW Update": "FW Opdatering",
|
||||
"FW Update Info": "FW Opdateringsinfo",
|
||||
"FW Version": "FW Version",
|
||||
"For more info or help, feel free to reach out on Discord.": "For mere info eller hjælp, er du velkommen til at kontakte os på Discord.",
|
||||
"Fortnite": "Fortnite",
|
||||
"Galactic Purple": "Galactic Purple",
|
||||
"God of War Ragnarok": "God of War Ragnarok",
|
||||
"Grey Camouflage": "Grey Camouflage",
|
||||
"HW Model": "HW Model",
|
||||
"If the calibration is not stored permanently, please double-check the wirings of the hardware mod.": "Hvis kalibreringen ikke gemmes permanent, skal du dobbelttjekke kabelføringen af hardware-modifikationen.",
|
||||
"Left Module Barcode": "Venstre Modul Stregkode",
|
||||
"MCU Unique ID": "MCU Unikt ID",
|
||||
"Midnight Black": "Midnight Black",
|
||||
"More details and images": "Flere detaljer og billeder",
|
||||
"Nova Pink": "Nova Pink",
|
||||
"PCBA ID": "PCBA ID",
|
||||
"Right Module Barcode": "Højre Modul Stregkode",
|
||||
"SBL FW Version": "SBL FW Version",
|
||||
"Spider FW Version": "Spider FW Version",
|
||||
"Spider-Man 2": "Spider-Man 2",
|
||||
"Starlight Blue": "Starlight Blue",
|
||||
"Sterling Silver": "Sterling Silver",
|
||||
"Support for calibrating DualSense Edge stick modules is now available as an <b>experimental feature</b>.": "Understøttelse af kalibrering af DualSense Edge styrepindmoduler er nu tilgængelig som en <b>eksperimentel funktion</b>.",
|
||||
"The Last of Us": "The Last of Us",
|
||||
"This involves temporarily disabling write protection by applying <b>+1.8V</b> to a specific test point on each module.": "Dette involverer midlertidigt at deaktivere skrivebeskyttelsen ved, at anvende <b>+1,8V</b> til et specifikt testpunkt på hver modul.",
|
||||
"This is only for advanced users. If you're not sure what you're doing, please do not attempt it.": "Dette er kun for avancerede brugere. Hvis du er usikker på hvad du laver, bør du ikke forsøge det.",
|
||||
"Touchpad FW Version": "Touchpad FW Version",
|
||||
"Touchpad ID": "Touchpad ID",
|
||||
"Venom FW Version": "Venom FW Version",
|
||||
"Volcanic Red": "Volcanic Red",
|
||||
"We are not responsible for any damage caused by attempting this modification.": "Vi påtager os intet ansvar for eventuelle skader forårsaget af denne ændring.",
|
||||
"White": "Hvid",
|
||||
"You can do this in two ways:": "Du kan gøre dette på to måder:",
|
||||
"here": "her",
|
||||
"left module": "venstre modul",
|
||||
"right module": "højre modul",
|
||||
"10x zoom": "10x zoom",
|
||||
"Calibration": "Kalibrering",
|
||||
"Debug": "Fejlfinding",
|
||||
"Info": "Info",
|
||||
"Normal": "Normal",
|
||||
"Please note: the stick modules on the DS Edge <b>cannot be calibrated via software alone</b>.": "Bemærk venligst: Styrepindmodulerne på DS Edge <b>kan ikke kalibreres udelukkende via software</b>.",
|
||||
"To store a custom calibration on the stick's internal memory, a <b>hardware modification</b> is required.": "For at gemme en brugerdefineret kalibrering i styrepindens interne hukommelse kræves der en <b>hardwaremodifikation</b>.",
|
||||
"Center (L1)": "Center (L1)",
|
||||
"Circularity (R1)": "Cirkularitet (R1)",
|
||||
"Move the stick to select it for tuning, then without touching the stick use the D-pad buttons to adjust the center point. Flick it and adjust it again if it is off center or flickers.": "Flyt styrepinden for at vælge den til justering, og brug derefter D-pad til at justere centerpunktet uden at røre ved styrepinden. Bevæg den hurtigt og juster igen, hvis den ikke står i centrum eller flimrer.",
|
||||
"Please release the stick to center position before adjusting with D-pad buttons.": "Slip styrepinden til centerposition, før du justerer med D-pad.",
|
||||
"Press the D-pad or face buttons in the direction you want the stick position to move.": "Tryk på D-pad eller frontknapperne i den retning, du vil have styrepindens positionen til at bevæge sig.",
|
||||
"Push the stick straight up/down/left/right as far as possible.": "Skub styrepinden så langt som muligt op/ned/til venstre/til højre.",
|
||||
"Show raw numbers": "Vis faktiske tal",
|
||||
"The device is connected via Bluetooth. Disconnect and reconnect using a USB cable instead.": "Enheden er forbundet via Bluetooth. Afbryd forbindelsen, og tilslut den igen med et USB-kabel i stedet.",
|
||||
"Your device might not be a genuine Sony controller. If it is not a clone then please report this issue.": "Din enhed er muligvis ikke en ægte Sony-controller. Hvis det ikke er en kopi, bedes du rapportere dette problem.",
|
||||
"<strong>Average circularity error:</strong> smaller is not always better! Aim for 7-9 %.": "<strong>Gennemsnitlig cirkularitetsfejl:</strong> mindre er ikke altid bedre! Sigt efter 7-9 %.",
|
||||
"A reboot is needed to continue using this DualSense Edge. Please disconnect and reconnect your controller.": "En genstart er nødvendig for at fortsætte med at bruge denne DualSense Edge. Afbryd forbindelsen til controlleren, og tilslut den igen.",
|
||||
"Adaptive Trigger": "Adaptiv aftrækker",
|
||||
"Adaptive triggers are only supported on DualSense controllers": "Adaptive aftrækkere understøttes kun på DualSense-controllere.",
|
||||
"Add test": "Tilføj test",
|
||||
"Be gentle to avoid damage.": "Vær forsigtig for at undgå skader.",
|
||||
"Buttons": "Knapper",
|
||||
"Center": "Centrer",
|
||||
"Circularity": "Cirkularitet",
|
||||
"Controller does not support adaptive trigger control": "Controlleren understøtter ikke kontrol af adaptive aftrækkere.",
|
||||
"Don't show again": "Vis ikke igen",
|
||||
"Fail": "Fejl",
|
||||
"Failed": "Mislykkedes",
|
||||
"Failed to connect to device": "Kunne ikke oprette forbindelse til enheden.",
|
||||
"Failed to disable adaptive trigger": "Kunne ikke deaktivere adaptiv aftrækker.",
|
||||
"Failed to set speaker tone": "Kunne ikke indstille højttalertone.",
|
||||
"Failed to set vibration": "Kunne ikke indstille vibration.",
|
||||
"Feel for vibration in the controller.": "Mærk efter vibration i controlleren.",
|
||||
"Haptic Vibration": "Haptisk vibration",
|
||||
"Headphone Jack": "Hovedtelefonstik",
|
||||
"Increase non-circularity": "Øg ikke-cirkulariteten",
|
||||
"Instructions": "Instruktioner",
|
||||
"Keep rotating the sticks even if you see no progress!": "Bliv ved med at dreje pindene, selvom du ikke ser nogen fremgang!",
|
||||
"Learn more...": "Læs mere",
|
||||
"Lights": "Lys",
|
||||
"Listen for a tone from the controller speaker.": "Lyt efter en tone fra controllerens højttaler.",
|
||||
"Long-press [circle] to skip ahead.": "Tryk og hold [circle] nede for at springe fremad.",
|
||||
"Microphone": "Mikrofon",
|
||||
"Microphone Level:": "Mikrofonniveau:",
|
||||
"No controller connected": "Ingen controller tilsluttet",
|
||||
"No tests completed yet.": "Ingen tests er færdige endnu.",
|
||||
"Not tested": "Ikke testet",
|
||||
"Pass": "Godkend",
|
||||
"Passed": "Godkendt",
|
||||
"Plug in headphones to the 3.5mm jack": "Tilslut hovedtelefoner til 3,5 mm-stikket.",
|
||||
"Press L2 and R2 triggers to feel the trigger resistance.": "Tryk på L2- og R2-aftrækkere for at mærke aftrækkerens modstand.",
|
||||
"Press [circle] to close, or [square] to start over": "Tryk på [circle] for at lukke, eller [square] for at starte forfra.",
|
||||
"Press [square] to Pass, [cross] to Fail, or [circle] to skip.": "Tryk på [square] for at godkende, [cross] for at fejle, eller [circle] for at springe over.",
|
||||
"Press [square] to begin or [circle] to close": "Tryk på [square] for at starte eller [circle] for at lukke.",
|
||||
"Press [triangle] to go back.": "Tryk på [triangle] for at gå tilbage.",
|
||||
"Press each button until they turn green.": "Tryk på hver knap, indtil den bliver grøn.",
|
||||
"Progress": "Fremgang",
|
||||
"Quick Test": "Hurtig Test",
|
||||
"Quick calibrate": "Hurtig kalibrering",
|
||||
"Range calibration appears to have failed. Please try again and make sure you rotate the sticks.": "Kalibrering af rækkevidde ser ud til at være mislykket. Prøv igen, og sørg for at dreje pindene.",
|
||||
"Repeat": "Gentag",
|
||||
"Restart": "Genstart",
|
||||
"Rotate the sticks slowly at least 2 times in one direction and 2 times in the other direction to cover the whole range.": "Drej pinde langsomt mindst 2 gange i den ene retning og 2 gange i den anden retning for at dække hele bevægelsesområdet.",
|
||||
"Run through these tests to verify your controller's functionality.": "Gennemfør disse tests for at verificere, at din controller fungerer korrekt.",
|
||||
"Sony controllers come from the factory calibrated to have an average circularity error of nearly 10 %, and this is now what games expect. Too perfect circularity can make movements and aim feel stiff and unresponsive in some games.": "Sony-controllere leveres fra fabrikken kalibreret med en gennemsnitlig cirkularitetsfejl på næsten 10 %, og det er nu det, spil forventer. For perfekt cirkularitet kan få bevægelser og sigte til at føles stive og uresponsive i nogle spil.",
|
||||
"Speaker": "Højttaler",
|
||||
"Step size": "Trinstørrelse",
|
||||
"Test Speaker": "Test højttaler",
|
||||
"Test Summary": "Testoversigt",
|
||||
"Test all buttons, or long-press [square] to Pass and [cross] to Fail, or [circle] to skip.": "Test alle knapper, eller tryk og hold [square] for at godkende, [cross] for at fejle, eller [circle] for at springe over.",
|
||||
"The <b>Done</b> button will unlock after at most 15 seconds. If you press <b>Done</b> without rotating the sticks, the calibration will be incomplete and you will need to repeat it.": "<b>Færdig</b>-knappen vil blive tilgængelig efter højst 15 sekunder. Hvis du trykker på <b>Færdig</b> uden at dreje pindene, vil kalibreringen være ufuldstændig, og du bliver nødt til at gentage den.",
|
||||
"This test checks all controller buttons by requiring you to press each button up to three times.": "Denne test kontrollerer alle controllerens knapper ved at kræve, at du trykker på hver knap op til tre gange.",
|
||||
"This test checks the headphone jack functionality.": "Denne test kontrollerer hovedtelefonstikkens funktionalitet.",
|
||||
"This test checks the reliability of the USB port.": "Denne test kontrollerer USB-portens pålidelighed.",
|
||||
"This test will cycle through red, green, and blue colors on the controller lightbar, animate the player indicator lights, and flash the mute button.": "Denne test vil skifte mellem rødt, grønt og blåt på controllerens lysbjælke, animere spillerindikatorlysene og blinke med mute-knappen.",
|
||||
"This test will enable heavy resistance on both L2 and R2 triggers.": "Denne test vil aktivere stærk modstand på både L2- og R2-aftrækkere.",
|
||||
"USB Connector": "USB-stik",
|
||||
"Watch the controller lights change colors, the player lights animate, and the mute button flash.": "Se controllerens lys skifte farve, spillerlysene animere og mute-knappen blinke.",
|
||||
"While holding the stick to be adjusted straight up/down/left/right, make adjustments until you see lightblue sectors in all four directions after circling the stick both left and right. Then use the": "Mens du holder den pind, der skal justeres, lige op/ned/venstre/højre, foretag justeringer, indtil du ser lyseblå sektorer i alle fire retninger efter at have cirklet pinden både til venstre og højre. Brug derefter...",
|
||||
"Wiggle the USB cable to see if the controller disconnects.": "Vrik med USB-kablet for at se, om controlleren afbrydes.",
|
||||
"failed": "fejlet",
|
||||
"hide": "skjul",
|
||||
"passed": "godkendt",
|
||||
"skipped": "sprunget over",
|
||||
"tests completed": "tests er gennemført",
|
||||
"to increase the non-circularity.": "for at øge ikke-cirkulariteten.",
|
||||
"After they have been replaced, this utility can be used to calibrate the controller to work with the new joysticks.": "Efter de er blevet udskiftet, kan dette værktøj bruges til at kalibrere controlleren til at fungere med de nye joysticks.",
|
||||
"Aim for a circularity error of around 7-9 % for the best playing experience.": "Sigt efter en cirkularitetsfejl på omkring 7-9 % for den bedste spiloplevelse.",
|
||||
"Battery level is low. Tests may fail due to the controller being in power saving mode.": "Batteriniveauet er lavt. Tests kan fejle, fordi controlleren er i strømbesparende tilstand.",
|
||||
"Calibrating without replacing the joysticks may help temporarily, but it may also make the problem worse, with no way to undo it.": "Kalibrering uden udskiftning af joysticks kan hjælpe midlertidigt, men det kan også gøre problemet værre, uden mulighed for at fortryde det.",
|
||||
"Calibration History": "Kalibreringshistorik",
|
||||
"Cannot copy text to the clipboard:": "Kan ikke kopiere tekst til udklipsholderen:",
|
||||
"Cannot read module barcodes": "Kan ikke læse modul-stregkoder",
|
||||
"Clear All": "Ryd alt",
|
||||
"Current": "Aktuel",
|
||||
"Delete": "Slet",
|
||||
"Delete all calibration history for this controller? This cannot be undone.": "Slet al kalibreringshistorik for denne controller? Dette kan ikke fortrydes.",
|
||||
"Delete this calibration entry?": "Slet denne kalibreringspost?",
|
||||
"Drift is caused by mechanical parts in the joystick being worn out, and they need to be replaced to fix the drift.": "Drift skyldes, at mekaniske dele i joysticket er slidte, og de skal udskiftes for at løse problemet.",
|
||||
"Firefox is supported with the WebHID extension installed.": "Firefox understøttes med WebHID-udvidelsen installeret.",
|
||||
"It appears the latest joystick calibration has not been saved.": "Det ser ud til, at den seneste joystick-kalibrering ikke er blevet gemt.",
|
||||
"Last connected": "Sidst tilsluttet",
|
||||
"No saved calibrations found.": "Ingen gemte kalibreringer fundet.",
|
||||
"Please connect a DualShock 4, a DualSense, DualSense Edge or VR2 controller to your computer and press Connect.": "Tilslut venligst en DualShock 4, DualSense, DualSense Edge eller VR2 controller til din computer og tryk på Tilslut.",
|
||||
"Please use a web browser with WebHID support (e.g. Google Chrome or Microsoft Edge) on a PC or Mac.": "Brug venligst en webbrowser med WebHID-understøttelse (f.eks. Google Chrome eller Microsoft Edge) på en PC eller Mac.",
|
||||
"Restore": "Gendan",
|
||||
"Restore calibration": "Gendan kalibrering",
|
||||
"The calibration was restored successfully! Remember to save the changes in order not to loose them when the controller is rebooted.": "Kalibreringen blev gendannet! Husk at gemme ændringerne, så de ikke går tabt, når controlleren genstartes.",
|
||||
"The item has been copied to the clipboard.": "Elementet er blevet kopieret til udklipsholderen.",
|
||||
"This controller has unsaved changes that will be lost when the controller is rebooted.": "Denne controller har ikke-gemte ændringer, som vil gå tabt, når controlleren genstartes.",
|
||||
"This utility cannot fix stick drift.": "Dette værktøj kan ikke rette stick drift.",
|
||||
"Unsupported browser.": "Browseren understøttes ikke.",
|
||||
"Use expert mode": "Brug eksperttilstand",
|
||||
"Use four-step calibration": "Brug fire-trins kalibrering",
|
||||
"Use normal mode": "Brug normal tilstand",
|
||||
"Use quick calibration": "Brug hurtig kalibrering",
|
||||
"Using this utility on a phone or tablet is not supported.": "Brug af dette værktøj på en telefon eller tablet understøttes ikke.",
|
||||
"Values": "Værdier",
|
||||
"You should save your changes, or reboot the controller to revert back to the previous state.": "Du bør gemme dine ændringer, eller genstarte controlleren for at vende tilbage til den tidligere tilstand.",
|
||||
"serial number": "serienummer",
|
||||
"(DualSense & DualSense Edge) Will updating the firmware reset calibration?": "",
|
||||
"(DualSense Edge) Is the calibration stored on the controller or the modules?": "",
|
||||
"A sample test was done with 30 dualsense edge modules, and the results showed that the inner quartile range (IQR) is 8.3% and 9.0%, with an average of 8.6%. This goes to show that stock controllers by default have a relatively high range, and the rule of thumb is to follow factory calibration.": "",
|
||||
"Can I overwrite a (permanent) calibration?": "",
|
||||
"Can I restore a previous calibration?": "",
|
||||
"Finetuning is only available for DualSense and DualSense Edge.": "",
|
||||
"God of War 20th Anniversary": "",
|
||||
"Housing": "",
|
||||
"How do I use the finetuning feature?": "",
|
||||
"If you don't have a battery connected or the connected battery is empty, AND your cable disconnects during saving the calibration, then your controller has a high chance of being bricked.": "",
|
||||
"If you have not clicked the green button \"Save changes permanently\", then unplugging the controller will reset to the previously saved calibration. It is recommended you test your calibration before saving.": "",
|
||||
"If you have saved the changes permanently, you can reset the changes only if you are using a DualSense or DualSense Edge. You can click on the grey button \"Restore Calibration\" to go back to one of the previous calibrations that was saved on the controller. Known issue: You may need to reboot your controller first in order for previous calibrations to show up.": "",
|
||||
"Image 1": "",
|
||||
"Images": "",
|
||||
"In most cases, calibrating your joysticks that have prior drift issues may result in a worse and unpredictable calibration.": "",
|
||||
"Not shown in the video: You can now also increase the range in each direction uniformly by using the cross in the top right and moving the slider up, which may speed up finetuning. Make sure to rotate the joystick first, otherwise the button cannot be pressed.": "",
|
||||
"Only official controllers are supported, no third-party or \"fake\" controllers.": "",
|
||||
"Option 1": "",
|
||||
"Option 2": "",
|
||||
"PlayStation Virtual Reality 2": "",
|
||||
"Saving calibration is locked by default on DualSense Edge joystick modules. A hardware mod is required to save the calibration permanently. The calibration is saved on the modules themselves, so you have to perform the mod twice: once for each module. You would need to bridge two points on the PCB with enamelled wire. There are multiple methods, I personally recommend using either of these two locations to solder the wire to. See images below. Ensure the wire is thin enough so that the shell is closed properly. Make sure you don't short the wire to ground through the letters near the bottom joint.": "",
|
||||
"Sony DualShock 4": "",
|
||||
"The calibration is stored on each module individually. It is carried over if you place the modules in a different DualSense Edge. Likewise, if you place a different set of modules in your DualSense Edge, you will get a different calibration that is tied to those new modules.": "",
|
||||
"The finetuning and quick test menus are only accessible for DualSense and DualSense Edge.": "",
|
||||
"The website supports the following official controllers:": "",
|
||||
"These previous calibrations are stored locally in your browser's storage. Meaning you can only restore calibrations using the same computer and browser that you used to calibrate it with, and deleting the cache or using Incognito will make any previous calibration irrecoverable.": "",
|
||||
"This software is not intended to fix stickdrift and will <b>not</b> fix stickdrift on its own if you already experience that.": "",
|
||||
"This video from V2.16 shows how to use the finetuning menu.": "",
|
||||
"We recommend a circularity between 7% and 9%. The reason for this is to mimic a stock controllers calibration. However, symmetrical overshoot is more important and if you need to deviate from this range to achieve better symmetry, that is fine too.": "",
|
||||
"What are the risks of using the calibration?": "",
|
||||
"What circularity percentage to aim for when calibrating and finetuning.": "",
|
||||
"What the software will help with, is ensuring new joysticks will function properly after replacing the old broken joysticks that drift. This step involves opening up the controller and soldering new potentiometers or an entire new joystick.": "",
|
||||
"When calibrating, there is no risk. However, if your controller disconnects during the split second that you save a calibration, then you have a chance of bricking your controller. Make sure your battery has enough charge and is plugged into the controller, and the USB cable is securely connected. This prevents your controller from being bricked if the USB cable accidentally disconnects.": "",
|
||||
"Which controllers does DualShock Calibration GUI support?": "",
|
||||
"Yes. Simply do another calibration, and click the green button to save permanently.": "",
|
||||
"": ""
|
||||
}
|
||||
364
lang/de_de.json
Normal file
@@ -0,0 +1,364 @@
|
||||
{
|
||||
".authorMsg": "- Deutsch Übersetzung von <a href='https://chat.openai.com'>ChatGPT</a> und Tobi_DarkKnight",
|
||||
"DualShock Calibration GUI": "DualShock-Kalibrierungs-GUI",
|
||||
"Connect": "Verbinden",
|
||||
"Connected to:": "Verbunden mit:",
|
||||
"Disconnect": "Trennen",
|
||||
"Calibrate stick center": "Stickmitte kalibrieren",
|
||||
"Calibrate stick range": "Stickbereich kalibrieren",
|
||||
"Sections below are not useful, just some debug infos or manual commands": "Die untenstehenden Abschnitte sind nicht nützlich, nur einige Debug-Infos oder manuelle Befehle",
|
||||
"NVS Status": "NVS-Status",
|
||||
"Unknown": "Unbekannt",
|
||||
"Debug buttons": "Debug Knöpfe",
|
||||
"Query NVS status": "NVS-Status abfragen",
|
||||
"NVS unlock": "NVS entsperren",
|
||||
"NVS lock": "NVS sperren",
|
||||
"Stick center calibration": "Kalibrierung der Stickmitte",
|
||||
"Welcome": "Willkommen",
|
||||
"Step 1": "Schritt 1",
|
||||
"Step 2": "Schritt 2",
|
||||
"Step 3": "Schritt 3",
|
||||
"Step 4": "Schritt 4",
|
||||
"Completed": "Abgeschlossen",
|
||||
"Welcome to the stick center-calibration wizard!": "Willkommen im Assistenten zur Kalibrierung der Stickmitte",
|
||||
"This tool will guide you in re-centering the analog sticks of your controller. It consists of four steps: you will be asked to move both sticks in a direction and release them.": "Dieses Tool wird dich durch das Zurücksetzen der Analog-Stickmitte führen. Es besteht aus vier Schritten: Du wirst aufgefordert, beide Sticks in eine Richtung zu bewegen und loszulassen.",
|
||||
"Please be aware that, <i>once the calibration is running, it cannot be canceled</i>. Do not close this page or disconnect your controller until it is completed.": "Bitte beachte, <i>dass die Kalibrierung, sobald sie läuft, nicht abgebrochen werden kann</i>. Schließe diese Seite nicht und trennen deinen Controller nicht, bis die Kalibrierung abgeschlossen ist.",
|
||||
"Press <b>Start</b> to begin calibration.": "Drücke <b>Start</b>, um mit der Kalibrierung zu beginnen.",
|
||||
"Please move both sticks to the <b>top-left corner</b> and release them.": "Bewege bitte beide Sticks in die <b>obere linke Ecke</b> und lasse sie los.",
|
||||
"When the sticks are back in the center, press <b>Continue</b>.": "Wenn die Sticks wieder in der Mitte sind, drücke <b>Weiter</b>.",
|
||||
"Please move both sticks to the <b>top-right corner</b> and release them.": "Bewege bitte beide Sticks in die <b>obere rechte Ecke</b> und lasse sie los.",
|
||||
"Please move both sticks to the <b>bottom-left corner</b> and release them.": "Bewege bitte beide Sticks in die <b>untere linke Ecke</b> und lasse sie los.",
|
||||
"Please move both sticks to the <b>bottom-right corner</b> and release them.": "Bewege bitte beide Sticks in die <b>untere rechte Ecke</b> und lasse sie los.",
|
||||
"Calibration completed successfully!": "Kalibrierung erfolgreich abgeschlossen!",
|
||||
"Next": "Weiter",
|
||||
"Recentering the controller sticks.": "Controller-Sticks zurücksetzen.",
|
||||
"Please do not close this window and do not disconnect your controller. ": "Bitte schließe das Fenster nicht und trenne deinen Controller nicht. ",
|
||||
"Range calibration": "Bereichskalibrierung",
|
||||
"The controller is now sampling data!": "Der Controller erfasst jetzt Daten!</b>",
|
||||
"Done": "Fertig",
|
||||
"Hi, thank you for using this software.": "Hallo, vielen Dank, dass du diese Software verwendest.",
|
||||
"If you're finding it helpful and you want to support my efforts, feel free to": "Wenn du sie hilfreich findest und meine Bemühungen unterstützen möchten, kannst du mir gerne",
|
||||
"buy me a coffee": "einen Kaffee kaufen",
|
||||
"! :)": "! :)",
|
||||
"Do you have any suggestion or issue? Drop me a message via email or discord.": "Hast du einen Vorschlag oder ein Problem? Schicke mir eine Nachricht per E-Mail oder Discord.",
|
||||
"Cheers!": "Cheers!",
|
||||
"Support this project": "Unterstütze dieses Projekt",
|
||||
"unknown": "unbekannt",
|
||||
"original": "original",
|
||||
"clone": "Klon",
|
||||
"locked": "gesperrt",
|
||||
"unlocked": "entsperrt",
|
||||
"error": "Fehler",
|
||||
"Build Date": "Build-Datum",
|
||||
"HW Version": "HW-Version",
|
||||
"SW Version": "SW-Version",
|
||||
"Device Type": "Gerätetyp",
|
||||
"Range calibration completed": "Bereichskalibrierung abgeschlossen",
|
||||
"Range calibration failed": "Bereichskalibrierung fehlgeschlagen",
|
||||
"Stick calibration failed": "Stick-Kalibrierung fehlgeschlagen",
|
||||
"Stick calibration completed": "Stick-Kalibrierung abgeschlossen",
|
||||
"NVS Lock failed": "NVS-Sperrung fehlgeschlagen",
|
||||
"NVS Unlock failed": "NVS-Entsperrung fehlgeschlagen",
|
||||
"Please connect only one controller at time.": "Bitte verbinde jeweils nur einen Controller.",
|
||||
"Sony DualShock 4 V1": "Sony DualShock 4 V1",
|
||||
"Sony DualShock 4 V2": "Sony DualShock 4 V2",
|
||||
"Sony DualSense": "Sony DualSense",
|
||||
"Sony DualSense Edge": "Sony DualSense Edge",
|
||||
"Connected invalid device": "Ungültiges Gerät verbunden",
|
||||
"Error": "Fehler",
|
||||
"Initializing...": "Initialisierung...",
|
||||
"Storing calibration...": "Kalibrierung speichern...",
|
||||
"Sampling...": "Probenahme...",
|
||||
"Calibration in progress": "Kalibrierung läuft",
|
||||
"Start": "Start",
|
||||
"Continue": "Fortfahren",
|
||||
"Have a nice day :)": "Einen schönen Tag noch! :)",
|
||||
"Welcome to the Calibration GUI": "Willkommen bei der Kalibrierungs-GUI",
|
||||
"Just few things to know before you can start:": "Nur wenige Dinge, die du wissen solltest, bevor du beginnst:",
|
||||
"This website is not affiliated with Sony, PlayStation & co.": "Diese Website ist nicht mit Sony, PlayStation & Co. verbunden.",
|
||||
"This service is provided without warranty. Use at your own risk.": "Dieser Service wird ohne Garantie bereitgestellt. Nutzung auf eigene Gefahr.",
|
||||
"Keep the internal battery of the controller connected and ensure it is well charged. If the battery dies during operations, the controller will be damaged and rendered unusable.": "Lass den Akku des Controllers angeschlossen und stelle sicher, dass diese gut geladen ist. Sollte die batterie während des Prozesses leer gehen, wird der Controller kaputt gehen.",
|
||||
"Before doing the permanent calibration, try the temporary one to ensure that everything is working well.": "Bevor du die permanente Kalibrierung durchführst, probiere die temporäre aus, um sicherzustellen, dass alles gut funktioniert.",
|
||||
"Understood": "Verstanden",
|
||||
"Version": "Version",
|
||||
"Frequently Asked Questions": "Häufig gestellte Fragen",
|
||||
"Close": "Schließen",
|
||||
"Welcome to the F.A.Q. section! Below, you'll find answers to some of the most commonly asked questions about this website. If you have any other inquiries or need further assistance, feel free to reach out to me directly. Your feedback and questions are always welcome!": "Willkommen im F.A.Q.-Bereich! Unten findest du Antworten auf einige der am häufigsten gestellten Fragen zu dieser Website. Wenn du weitere Fragen haben solltest oder Unterstützung benötigst, kannst du dich gerne direkt an mich wenden. Dein Feedback und Fragen sind immer willkommen!",
|
||||
"How does it work?": "Wie funktioniert es?",
|
||||
"Behind the scenes, this website is the culmination of one year of dedicated effort in reverse-engineering DualShock controllers for fun/hobby from a random guy on the internet.": "Hinter den Kulissen ist diese Website das Ergebnis eines einjährigen engagierten Aufwands beim Reverse-Engineering von DualShock-Controllern zum Spaß/Hobby eines zufälligen Typen im Internet.",
|
||||
"Through": "Durch",
|
||||
"this research": "diese Forschung",
|
||||
", it was discovered that there exist some undocumented commands on DualShock controllers that can be sent via USB and are used during factory assembly process. If these commands are sent, the controller starts the recalibration of analog sticks.": ", wurde entdeckt, dass es einige nicht dokumentierte Befehle auf DualShock-Controllern gibt, die über USB gesendet werden können und während des Herstellungsprozesses verwendet werden. Wenn diese Befehle gesendet werden, startet der Controller die Neukalibrierung der Analog-Sticks.",
|
||||
"While the primary focus of this research wasn't initially centered on recalibration, it became apparent that a service offering this capability could greatly benefit numerous individuals. And thus, here we are.": "Obwohl der Schwerpunkt dieser Forschung ursprünglich nicht auf der Neukalibrierung lag, wurde klar, dass ein Service, der diese Fähigkeit bietet, zahlreichen Personen erhebliche Verbesserungen bringen könnte. Und so sind wir hier.",
|
||||
"Is this an officially endorsed service?": "Ist dies ein offiziell unterstützter Service?",
|
||||
"No, this service is simply a creation by a DualShock enthusiast.": "Nein, dieser Service ist einfach eine Schöpfung eines DualShock-Enthusiasten.",
|
||||
"Does this website detect if a controller is a clone?": "Erkennt diese Website, ob ein Controller ein Klon ist?",
|
||||
"Yes, only DualShock4 at the moment. This happened because I accidentally purchased some clones, spent time identifying the differences and added this functionality to prevent future deception.": "Ja, derzeit nur DualShock4. Dies geschah, weil ich versehentlich einige Klone gekauft habe, Zeit damit verbracht habe, die Unterschiede zu identifizieren und diese Funktionalität hinzugefügt habe, um zukünftige Täuschungen zu verhindern.",
|
||||
"Unfortunately, the clones cannot be calibrated anyway, because they only clone the behavior of a DualShock4 during normal gameplay, not all the undocumented functionalities.": "Leider können die Klone sowieso nicht kalibriert werden, weil sie nur das Verhalten eines DualShock4 während eines normalen Gameplays nachahmen und nicht alle undokumentierten Funktionen.",
|
||||
"If you want to extend this detection functionality to DualSense, please ship me a fake DualSense and you'll see it in few weeks.": "Wenn du diese Erkennungsfunktionalität auf DualSense erweitern willst, sende mir bitte einen gefälschten DualSense und du wirst die Funktion in wenigen Wochen sehen.",
|
||||
"What development is in plan?": "Was ist in der Planung?",
|
||||
"I maintain two separate to-do lists for this project, although the priority has yet to be established.": "Ich führe für dieses Projekt zwei separate To-Do-Listen, obwohl die Priorität noch nicht festgelegt wurde.",
|
||||
"The first list is about enhancing support for DualShock4 and DualSense controllers:": "Die erste Liste befasst sich mit der Verbesserung der Unterstützung für DualShock4- und DualSense-Controller:",
|
||||
"Implement calibration of L2/R2 triggers.": "Implementierung der Kalibrierung von L2/R2-Schultertasten.",
|
||||
"Improve detection of clones, particularly beneficial for those seeking to purchase used controllers with assurance of authenticity.": "Verbesserung der Erkennung von Klonen, was insbesondere für diejenigen von Vorteil ist, die gebrauchte Controller mit der Gewissheit der Echtheit kaufen möchten.",
|
||||
"Add support for recalibrating IMUs.": "Unterstützung für die Neukalibrierung von IMUs hinzufügen.",
|
||||
"Additionally, explore the possibility of reviving non-functioning DualShock controllers (further discussion available on Discord for interested parties).": "Zusätzlich die Möglichkeit, nicht funktionierende DualShock-Controller wiederzubeleben (weitere Diskussionen auf Discord für interessierte verfügbar).",
|
||||
"The second list contains new controllers I aim to support:": "Die zweite Liste enthält neue Controller, die ich unterstützen möchte:",
|
||||
"DualShock 3": "DualShock 3",
|
||||
"XBox Controllers": "Xbox-Controller",
|
||||
"Each of these tasks presents both immense interest and significant time investment. To provide context, supporting a new controller typically demands 6-12 months of full-time research, alongside a stroke of good fortune.": "Jede dieser Aufgaben bietet sowohl ein immenses Interesse als auch eine erhebliche zeitliche Investition. Um einen Kontext zu bieten, erfordert die Unterstützung eines neuen Controllers in der Regel 6-12 Monate Vollzeitforschung, neben ein paar Glückstreffern.",
|
||||
"I love this service, it helped me! How can I contribute?": "Ich liebe diesen Service, er hat mir geholfen! Wie kann ich dazu beitragen?",
|
||||
"I'm glad to hear that you found this helpful! If you're interested in contributing, here are a few ways you can help me:": "Es freut mich zu hören, dass du den Service hilfreich gefunden hast! Wenn du Interesse hast am etwas am Projekt beizutragen, gibt es hier einige Möglichkeiten, wie du mir helfen kannst:",
|
||||
"Consider making a": "Vielleicht ja eine ",
|
||||
"donation": "Spende",
|
||||
"to support my late-night caffeine-fueled reverse-engineering efforts.": ", um meine koffeingetriebenen Reverse-Engineering-Nachtschichten zu unterstützen.",
|
||||
"Ship me a controller you would love to add (send me an email for organization).": "Schicke mir einen Controller, den du gerne hinzufügen möchtest (sende mir eine E-Mail zur Organisation).",
|
||||
"Translate this website in your language": "Übersetze die Website in deine Sprache",
|
||||
", to help more people like you!": ", um mehr Menschen wie dir zu helfen!",
|
||||
"This website uses analytics to improve the service.": "Diese Website verwendet Analytics, um den Service zu verbessern.",
|
||||
"Board Model": "Platinentyp",
|
||||
"This DualSense controller has outdated firmware.": "Dieser DualSense-Controller hat eine veraltete Firmware.",
|
||||
"Please update the firmware and try again.": "Bitte aktualisiere die Firmware und versuche es erneut.",
|
||||
"Joystick Info": "Joystick-Informationen",
|
||||
"Check circularity": "Kreisförmigkeit prüfen",
|
||||
"No.": "Nein.",
|
||||
"Does this software resolve stickdrift?": "Behebt diese Software Stickdrift?",
|
||||
"Stickdrift is caused by a physical defect; namely dirt, worn potentiometer or in some cases a worn spring.": "Stickdrift wird durch einen physischen Defekt verursacht; größtenteils durch Schmutz, abgenutzte Potentiometer oder in manchen Fällen durch abgenutzte Federn.",
|
||||
"After range calibration, joysticks always go in corners.": "Nach der Kalibrierung bewegen sich die Joysticks nur in die Ecken.",
|
||||
"This issue happens because you have clicked \"Done\" immediately after starting a range calibration.": "Das passiert, weil du direkt nach dem Starten der Kalibrierung \"Fertig\" gedrückt hast.",
|
||||
"Please read the instructions.": "Bitte lese die Anleitung.",
|
||||
"You have to rotate the joysticks before you press \"Done\".": "Du musst die Joysticks rotieren bevor du auf \"Fertig\" drückst.",
|
||||
"Make sure to touch the edges of the joystick frame and rotate slowly, preferably in each direction - clockwise and anti-clockwise.": "Stelle sicher, dass du die Ränder des Joystick-Gehäuses berührst und drehe sie langsam, am besten in beide Richtungen.",
|
||||
"Only after you have done that, you click on \"Done\".": "Erst wenn du das gemacht hast, klickst du auf \"Fertig\".",
|
||||
"Changes saved successfully": "Änderungen erfolgreich gespeichert",
|
||||
"Error while saving changes": "Fehler beim Speichern der Änderungen",
|
||||
"Save changes permanently": "Änderungen Permanent speichern",
|
||||
"Reboot controller": "Controller Neustarten",
|
||||
"Controller Info": "Controller Infos",
|
||||
"Debug Info": "Debug Infos",
|
||||
"Software": "Software",
|
||||
"Hardware": "Hardware",
|
||||
"FW Build Date": "FW Build Datum",
|
||||
"FW Type": "FW Typ",
|
||||
"FW Series": "FW Serie",
|
||||
"Serial Number": "Serien Nummer",
|
||||
"Battery Barcode": "Batterie Barcode",
|
||||
"VCM Left Barcode": "VCM Linker Barcode",
|
||||
"VCM Right Barcode": "VCM rechter Barcode",
|
||||
"Show all": "Alles anzeigen",
|
||||
"Finetune stick calibration": "Feinabstimmung der Stick-Kalibrierung",
|
||||
"(beta)": "(beta)",
|
||||
"Left stick": "Linker Stick",
|
||||
"Right stick": "Rechter Stick",
|
||||
"Cancel": "Abbrechen",
|
||||
"10x zoom": "10 Fache Vergrößerung",
|
||||
"30th Anniversary": "30th Anniversary",
|
||||
"<b>Externally</b>: by applying +1.8V directly to the visible test point without opening the controller.": "<b>Extern</b>: gib +1,8V an den Testpunkt ohne den Controller zu öffnen.",
|
||||
"<b>Internally</b>: by soldering a wire from a +1.8V source to the write-protect TP.": "<b>Intern</b>: Kabel von einer +1,8V stelle an den schreibschutz Testpunkt löten.",
|
||||
"<strong>Average circularity error:</strong> smaller is not always better! Aim for 7-9 %.": "<strong>Durschnittliche Kreisförmige Fehlerrate:</strong> kleiner ist immer besser! Ziele auf 7.9% Fehlerrate.",
|
||||
"A reboot is needed to continue using this DualSense Edge. Please disconnect and reconnect your controller.": "Ein Neustart wird benötigt, damit du den Controller weiter Nutzen kannst. Bitte trenne und verbinde den Controller erneut.",
|
||||
"Adaptive Trigger": "Adaptive Trigger",
|
||||
"Adaptive triggers are only supported on DualSense controllers": "Addaptive Trigger werden nur beim DualSense Controller unterstützt",
|
||||
"Add test": "Test Hinzufügen",
|
||||
"After they have been replaced, this utility can be used to calibrate the controller to work with the new joysticks.": "Nach dem diese ersetzt wurden, kann dieses Programm genutzt werden um den Controller mit den neuen Sticks zu kalibrieren",
|
||||
"Aim for a circularity error of around 7-9 % for the best playing experience.": "Versuche eine Fehlerrate zwischen 7-9% zu erreichen für das beste Gefühl beim Spielen",
|
||||
"Astro Bot": "Astro Bot",
|
||||
"Battery level is low. Tests may fail due to the controller being in power saving mode.": "Batteriestand zu niedrig. Tests könnten Fehlschlagen da der Controller in den Energiesparmodus geht.",
|
||||
"Be gentle to avoid damage.": "Sei vorsichtig um keine Schäden zu verursachen.",
|
||||
"Bluetooth Address": "Bluetooth-Adresse",
|
||||
"Buttons": "Knöpfe",
|
||||
"Calibrating without replacing the joysticks may help temporarily, but it may also make the problem worse, with no way to undo it.": "Kalibrierung ohne die Sticks zu Ersetzen kann temporär helfen, kann aber das Problem auch verschlimmern und es gibt kein Weg zurück.",
|
||||
"Calibration": "Kalibrierung",
|
||||
"Calibration History": "Frühere Kalibrierung",
|
||||
"Calibration is being stored in the stick modules.": "Die Kalibrierung wird in den Stick-Modulen gespeichert.",
|
||||
"Cannot copy text to the clipboard:": "Text konnte nicht in den Zwischenspeicher gepackt werden.",
|
||||
"Cannot lock": "Nicht Sperrbar",
|
||||
"Cannot read module barcodes": "Modul Barcode kann nicht gelesen werden",
|
||||
"Cannot store data into": "Daten können nicht in folgendes gepseichert werden:",
|
||||
"Cannot unlock": "Nicht entsperrbar",
|
||||
"Center": "Mitte",
|
||||
"Center (L1)": "Mitte (L1)",
|
||||
"Chroma Indigo": "Chroma Indigo",
|
||||
"Chroma Pearl": "Chroma Perl",
|
||||
"Chroma Teal": "Chroma Teal",
|
||||
"Circularity": "Zirkularität",
|
||||
"Circularity (R1)": "Zirkularität (R1)",
|
||||
"Clear All": "Entferne Alles",
|
||||
"Cobalt Blue": "Cobalt Blau",
|
||||
"Color": "Farbe",
|
||||
"Controller does not support adaptive trigger control": "Controller unterstützt keine Adaptive Trigger Steuerung:",
|
||||
"Cosmic Red": "Cosmic Red",
|
||||
"Current": "Dezeitig",
|
||||
"Debug": "Debug",
|
||||
"Delete": "Löschen",
|
||||
"Delete all calibration history for this controller? This cannot be undone.": "Kalibrierungsverlauf für den Controller löschen? Das kann nicht Rückgängig gemacht werden!",
|
||||
"Delete this calibration entry?": "Diesen Kalibrierungseintrag löschen?",
|
||||
"Don't show again": "Nicht erneut zeigen",
|
||||
"Drift is caused by mechanical parts in the joystick being worn out, and they need to be replaced to fix the drift.": "Drift entsteht durch die mechanische Abnutzung im Stick und diese muss ersetzt werden um drift zu beheben.",
|
||||
"DualSense Edge Calibration": "DualSense Edge Kalibrierung",
|
||||
"FW Update": "FW Update",
|
||||
"FW Update Info": "FW Update Information",
|
||||
"FW Version": "FW Version",
|
||||
"Fail": "Fehlgeschlagen",
|
||||
"Failed": "Fehlgeschlagen",
|
||||
"Failed to connect to device": "Verbindung zum Gerät konnte nicht hergestellt werden",
|
||||
"Failed to disable adaptive trigger": "Deaktivierung der Adaptiven Trigger konnte nicht durchgeführt werden",
|
||||
"Failed to set speaker tone": "Lautstärke des Lautsprechers konnte nicht eingestellt werden",
|
||||
"Failed to set vibration": "Vibration konnte nicht eingestellt werden",
|
||||
"Feel for vibration in the controller.": "Fühle nach der Vibration des Controllers",
|
||||
"Firefox is supported with the WebHID extension installed.": "Firefox ist nur mit der WebHID Erweiterung unterstützt.",
|
||||
"For more info or help, feel free to reach out on Discord.": "Für mehr Infos oder hilfe, komm auf den Discord Server.",
|
||||
"Fortnite": "Schmutz",
|
||||
"Galactic Purple": "Galactic Purple",
|
||||
"God of War Ragnarok": "God of War Ragnarok",
|
||||
"Grey Camouflage": "Grey Camouflage",
|
||||
"HW Model": "HW Modell",
|
||||
"Haptic Vibration": "Haptische Vibration",
|
||||
"Headphone Jack": "Kopfhöreranschluss",
|
||||
"If the calibration is not stored permanently, please double-check the wirings of the hardware mod.": "Wenn die Kalibrierung nicht dauerhaft gespeichert wird, prüfe erneut die Lötverbindung für die Hardware Mod",
|
||||
"Increase non-circularity": "Erweitere nicht-kreisförmigkeit",
|
||||
"Info": "Info",
|
||||
"Instructions": "Anleitung",
|
||||
"It appears the latest joystick calibration has not been saved.": "Es sieht aus, als wären die letzte Kalibrierung nicht gespeichert gewesen.",
|
||||
"Keep rotating the sticks even if you see no progress!": "Drehe weiterhin die Sticks auch wenn du kein Fortschritt siehst!",
|
||||
"Last connected": "Zuletzt verbunden",
|
||||
"Learn more...": "Erfahre weiteres...",
|
||||
"Left Module Barcode": "Barcode vom linken Stick",
|
||||
"Lights": "Lichter",
|
||||
"Listen for a tone from the controller speaker.": "Höre ob etwas vom Controller Lautsprecher kommt",
|
||||
"Long-press [circle] to skip ahead.": "Drücke lange auf [circle] um zu Überspringen.",
|
||||
"MCU Unique ID": "MCU Unique ID",
|
||||
"Microphone": "Mikrofon",
|
||||
"Microphone Level:": "Mikrofonpegel",
|
||||
"Midnight Black": "Mitternacht-Schwarz",
|
||||
"More details and images": "Mehr Details und Bilder",
|
||||
"Move the stick to select it for tuning, then without touching the stick use the D-pad buttons to adjust the center point. Flick it and adjust it again if it is off center or flickers.": "Bewege den Stick wo du Fein-Tuning machen willst, dann lasse den Stick los und nutze die D-Pad tasten um den Mittelpunkt zu Justireren. Dann bewege den Stick kurz und justiere nach wenn es nicht Mittig ist oder flackert.",
|
||||
"No controller connected": "Kein Controller verbunden",
|
||||
"No saved calibrations found.": "Keine gespeicherte Kalibrierung gefunden.",
|
||||
"No tests completed yet.": "Keine Tests bis jetzt durchgeführt",
|
||||
"Normal": "Normal",
|
||||
"Not tested": "Nicht getestet",
|
||||
"Nova Pink": "Nova Pink",
|
||||
"PCBA ID": "PCBA-ID",
|
||||
"Pass": "Bestanden",
|
||||
"Passed": "Bestanden",
|
||||
"Please connect a DualShock 4, a DualSense, DualSense Edge or VR2 controller to your computer and press Connect.": "Verbinde einen DualShock 4, DualSense, DualSense Edge oder VR2 Controller mit dem Rechner und klicke auf \"Verbinden\".",
|
||||
"Please note: the stick modules on the DS Edge <b>cannot be calibrated via software alone</b>.": "Bitte Beachte: die Stick-Module vom DualSense Edge <b>können nicht alleinig per Software kalibriert werden</b>.",
|
||||
"Please release the stick to center position before adjusting with D-pad buttons.": "Lass die Sticks los bevor du die mit dem D-Pad justierst.",
|
||||
"Please use a web browser with WebHID support (e.g. Google Chrome or Microsoft Edge) on a PC or Mac.": "Bitte nutze einen Browser mit WebHID support wie Google Chrome oder Edge auf einem PC oder Mac.",
|
||||
"Plug in headphones to the 3.5mm jack": "Schließe Kopfhörer an der 3,5mm Klinke an",
|
||||
"Press L2 and R2 triggers to feel the trigger resistance.": "Drücke L2 und R2 um den Trigger-Widerstand zu spühren.",
|
||||
"Press [circle] to close, or [square] to start over": "Drücke [circle] zum schließen oder [square] um es erneut zu beginnen",
|
||||
"Press [square] to Pass, [cross] to Fail, or [circle] to skip.": "Drücke [square] für bestanden, [cross] für durchgefallen oder [circle] zum überspringen.",
|
||||
"Press [square] to begin or [circle] to close": "Drücke [square] zum beginnen oder [circole] um zu beenden",
|
||||
"Press [triangle] to go back.": "Drücke [triangle] um zurück zu gehen.",
|
||||
"Press each button until they turn green.": "Drücke jede Taste bis diese grün ",
|
||||
"Press the D-pad or face buttons in the direction you want the stick position to move.": "Drücke die D-Pad oder Steuerknöpfe in die Richtung wohin du den Stick bewegt haben willst.",
|
||||
"Progress": "Fortschritt",
|
||||
"Push the stick straight up/down/left/right as far as possible.": "Drücke den Stick gerade nach oben/unten/links/rechts so weit wie es geht.",
|
||||
"Quick Test": "Schnelltest",
|
||||
"Quick calibrate": "Schnelle Kalibrierung",
|
||||
"Range calibration appears to have failed. Please try again and make sure you rotate the sticks.": "Die Zirkularitäts-Kalibrierung scheint fehlgeschlagen zu sein. Versuche es erneut und stelle sicher die Sticks auch zu rotieren.",
|
||||
"Repeat": "Wiederholen",
|
||||
"Restart": "Neustart",
|
||||
"Restore": "Wiederherstellen",
|
||||
"Restore calibration": "Kalibrierung Wiederherstellen",
|
||||
"Right Module Barcode": "Barcode vom rechten Modul",
|
||||
"Rotate the sticks slowly at least 2 times in one direction and 2 times in the other direction to cover the whole range.": "Rotiere die Sticks langsam mindestens zwei mal in eine und dann zwei mal in die andere Richtung um die ganze Reichweite zu erzielen",
|
||||
"Run through these tests to verify your controller's functionality.": "Gehe durch die tests um die Funktionalität des Controllers bestätigen zu können.",
|
||||
"SBL FW Version": "SBL FW Version",
|
||||
"Show raw numbers": "Zeig mir die rohen Zahlen",
|
||||
"Sony controllers come from the factory calibrated to have an average circularity error of nearly 10 %, and this is now what games expect. Too perfect circularity can make movements and aim feel stiff and unresponsive in some games.": "Sony Controller kommen mit einer werksseitigen Zirkularitäts-Fehlerrate von fast 10%, was Spiele auch erwarten. Zu perfekte Zirkularität machen bewegungen und das Zielen etwas steif und nicht nutzbar in manchen Spielen.",
|
||||
"Speaker": "Lautsprecher",
|
||||
"Spider FW Version": "Spider FW Version",
|
||||
"Spider-Man 2": "Spider-Man 2",
|
||||
"Starlight Blue": "Starlight Blue",
|
||||
"Step size": "Schrittzahl",
|
||||
"Sterling Silver": "Sterling Silver",
|
||||
"Support for calibrating DualSense Edge stick modules is now available as an <b>experimental feature</b>.": "Kalibrierung der DualSense Edge Sticks ist derzeit noch ein <b>Experimentelles</b> feature.",
|
||||
"Test Speaker": "Lautsprecher testen",
|
||||
"Test Summary": "Testergebnisse",
|
||||
"Test all buttons, or long-press [square] to Pass and [cross] to Fail, or [circle] to skip.": "Teste alle knöpfe oder drücke lange [square] wenn es besteht oder [cross] wenn es fehlschlägt oder [circle] um zu überspringen",
|
||||
"The <b>Done</b> button will unlock after at most 15 seconds. If you press <b>Done</b> without rotating the sticks, the calibration will be incomplete and you will need to repeat it.": "Der <b>Fertig</b> Knopf wird meist nach 15 Sekunden verfügbar. Wenn du die Sticks nicht rotierst, wird die Kalibrierung nicht komplett sein und du wirst es erneut durchführen müssen.",
|
||||
"The Last of Us": "The Last of Us",
|
||||
"The calibration was restored successfully! Remember to save the changes in order not to loose them when the controller is rebooted.": "Die Kalibrierung konnte erfolgreich wiederhergestellt werden! Speicher diese aber damit diese nicht verloren gehen bei einem Neustart des Controllers.",
|
||||
"The device appears to be a clone. All calibration functionality is disabled.": "Dieses Gerät schein ein Klon zu sein. Alle Kalibrierungsfunktionen sind daher aus.",
|
||||
"The device is connected via Bluetooth. Disconnect and reconnect using a USB cable instead.": "Das Gerät wurde per Bluetooth verbunden. Trenne die Verbindung und schließe es erneut per USB Kabel an.",
|
||||
"The item has been copied to the clipboard.": "In den Zwischenspeicher gespeichert.",
|
||||
"This controller has unsaved changes that will be lost when the controller is rebooted.": "Der Controller hat nicht gespeicherte Änderungen die verloren gehen wenn dieser Neugestartet wird.",
|
||||
"This involves temporarily disabling write protection by applying <b>+1.8V</b> to a specific test point on each module.": "Es handelt dabei um eine temporäre entfernung des Schreibschutzes durch eine Spannungszufuhr von <b>+1,8V</b> am Testpunkt von den jeweiligen Modulen.",
|
||||
"This is only for advanced users. If you're not sure what you're doing, please do not attempt it.": "Das ist nur für erfahrene Nutzer. Wenn du nicht weißt was du da machst, mach das bitte nicht.",
|
||||
"This test checks all controller buttons by requiring you to press each button up to three times.": "Dieser Test prüft alle Tasten indem du alle Tasten bis zu drei mal drückst.",
|
||||
"This test checks the headphone jack functionality.": "Dieser Test prüft den Kopfhöreranschluss.",
|
||||
"This test checks the reliability of the USB port.": "Dieser Test prüft die Zuverlässigkeit des USB Anschlusses",
|
||||
"This test will cycle through red, green, and blue colors on the controller lightbar, animate the player indicator lights, and flash the mute button.": "Dieser Test geht durch die Farben an der Lightbar, Spieleranzahl und dem Stummknopf.",
|
||||
"This test will enable heavy resistance on both L2 and R2 triggers.": "Dieser Test schaltet den schweren Widerstand der L2 und R2 Trigger ein.",
|
||||
"This utility cannot fix stick drift.": "Dieses Programm repariert kein Stick Drift.",
|
||||
"To store a custom calibration on the stick's internal memory, a <b>hardware modification</b> is required.": "Um die Kalibrierung auf den Speicher des Sticks zu speichern, muss eine <b>Hardware Modifikation</b> durchgeführt werden.",
|
||||
"Touchpad FW Version": "Touchpad FW Version",
|
||||
"Touchpad ID": "Touchpad ID",
|
||||
"USB Connector": "USB Verbindung",
|
||||
"Unsupported browser.": "Nicht unterstützer Browser.",
|
||||
"Use expert mode": "Expertenmodus nutzen",
|
||||
"Use four-step calibration": "4 Schritte Kalibrierung",
|
||||
"Use normal mode": "Normalen-Modus nutzen",
|
||||
"Use quick calibration": "Schnelle Kalibrierung",
|
||||
"Using this utility on a phone or tablet is not supported.": "Das Programm bietet keine Unterstützung auf Handys und Tablets.",
|
||||
"Values": "Werte",
|
||||
"Venom FW Version": "Venom FW Version",
|
||||
"Volcanic Red": "Volcanic Red",
|
||||
"Watch the controller lights change colors, the player lights animate, and the mute button flash.": "Schau wie sich die Lightbar-Farben, die Spieleranzahl und Stummknopf ändern.",
|
||||
"We are not responsible for any damage caused by attempting this modification.": "Wir übernehmen keine Haftung für irgendwelche Schädern bei der Modifizierungsversuch.",
|
||||
"While holding the stick to be adjusted straight up/down/left/right, make adjustments until you see lightblue sectors in all four directions after circling the stick both left and right. Then use the": "Während du den Stick nach oben/unten/links/rechts hätst, mach verändeungen bis du hellblaue sektoren in allen vier Richtungen nach einer Kreisbewegung bei beiden Sticks siehst. Danach nutze folgendes:",
|
||||
"White": "White",
|
||||
"Wiggle the USB cable to see if the controller disconnects.": "Wackel etwas am USB Anschluss und prüfe ob sich die Verbindung trennt",
|
||||
"You can do this in two ways:": "Du kannst es auf zwei Wegen machen",
|
||||
"You should save your changes, or reboot the controller to revert back to the previous state.": "Du solltest deine Änderungen speichern, oder diese gehen beim Neustart des Controllers verloren.",
|
||||
"Your device might not be a genuine Sony controller. If it is not a clone then please report this issue.": "Dein Gerät könnte kein echtes Sony Gerät sein. Wenn es kein Klon ist, dann melde bitte den Fehler.",
|
||||
"failed": "Fehlgeschlagen",
|
||||
"here": "hier",
|
||||
"hide": "verstecken",
|
||||
"left module": "Linkes Modul",
|
||||
"passed": "Bestanden",
|
||||
"right module": "Rechtes Modul",
|
||||
"serial number": "Seriennummer",
|
||||
"skipped": "Überspringen",
|
||||
"tests completed": "Tests geschafft:",
|
||||
"to increase the non-circularity.": "um die nicht-kreisförmigkeit zu erhöhen",
|
||||
"(DualSense & DualSense Edge) Will updating the firmware reset calibration?": "",
|
||||
"(DualSense Edge) Is the calibration stored on the controller or the modules?": "",
|
||||
"A sample test was done with 30 dualsense edge modules, and the results showed that the inner quartile range (IQR) is 8.3% and 9.0%, with an average of 8.6%. This goes to show that stock controllers by default have a relatively high range, and the rule of thumb is to follow factory calibration.": "",
|
||||
"Can I overwrite a (permanent) calibration?": "",
|
||||
"Can I restore a previous calibration?": "",
|
||||
"Finetuning is only available for DualSense and DualSense Edge.": "",
|
||||
"God of War 20th Anniversary": "",
|
||||
"Housing": "",
|
||||
"How do I use the finetuning feature?": "",
|
||||
"If you don't have a battery connected or the connected battery is empty, AND your cable disconnects during saving the calibration, then your controller has a high chance of being bricked.": "",
|
||||
"If you have not clicked the green button \"Save changes permanently\", then unplugging the controller will reset to the previously saved calibration. It is recommended you test your calibration before saving.": "",
|
||||
"If you have saved the changes permanently, you can reset the changes only if you are using a DualSense or DualSense Edge. You can click on the grey button \"Restore Calibration\" to go back to one of the previous calibrations that was saved on the controller. Known issue: You may need to reboot your controller first in order for previous calibrations to show up.": "",
|
||||
"Image 1": "",
|
||||
"Images": "",
|
||||
"In most cases, calibrating your joysticks that have prior drift issues may result in a worse and unpredictable calibration.": "",
|
||||
"Not shown in the video: You can now also increase the range in each direction uniformly by using the cross in the top right and moving the slider up, which may speed up finetuning. Make sure to rotate the joystick first, otherwise the button cannot be pressed.": "",
|
||||
"Only official controllers are supported, no third-party or \"fake\" controllers.": "",
|
||||
"Option 1": "",
|
||||
"Option 2": "",
|
||||
"PlayStation Virtual Reality 2": "",
|
||||
"Saving calibration is locked by default on DualSense Edge joystick modules. A hardware mod is required to save the calibration permanently. The calibration is saved on the modules themselves, so you have to perform the mod twice: once for each module. You would need to bridge two points on the PCB with enamelled wire. There are multiple methods, I personally recommend using either of these two locations to solder the wire to. See images below. Ensure the wire is thin enough so that the shell is closed properly. Make sure you don't short the wire to ground through the letters near the bottom joint.": "",
|
||||
"Sony DualShock 4": "",
|
||||
"The calibration is stored on each module individually. It is carried over if you place the modules in a different DualSense Edge. Likewise, if you place a different set of modules in your DualSense Edge, you will get a different calibration that is tied to those new modules.": "",
|
||||
"The finetuning and quick test menus are only accessible for DualSense and DualSense Edge.": "",
|
||||
"The website supports the following official controllers:": "",
|
||||
"These previous calibrations are stored locally in your browser's storage. Meaning you can only restore calibrations using the same computer and browser that you used to calibrate it with, and deleting the cache or using Incognito will make any previous calibration irrecoverable.": "",
|
||||
"This software is not intended to fix stickdrift and will <b>not</b> fix stickdrift on its own if you already experience that.": "",
|
||||
"This video from V2.16 shows how to use the finetuning menu.": "",
|
||||
"We recommend a circularity between 7% and 9%. The reason for this is to mimic a stock controllers calibration. However, symmetrical overshoot is more important and if you need to deviate from this range to achieve better symmetry, that is fine too.": "",
|
||||
"What are the risks of using the calibration?": "",
|
||||
"What circularity percentage to aim for when calibrating and finetuning.": "",
|
||||
"What the software will help with, is ensuring new joysticks will function properly after replacing the old broken joysticks that drift. This step involves opening up the controller and soldering new potentiometers or an entire new joystick.": "",
|
||||
"When calibrating, there is no risk. However, if your controller disconnects during the split second that you save a calibration, then you have a chance of bricking your controller. Make sure your battery has enough charge and is plugged into the controller, and the USB cable is securely connected. This prevents your controller from being bricked if the USB cable accidentally disconnects.": "",
|
||||
"Which controllers does DualShock Calibration GUI support?": "",
|
||||
"Yes. Simply do another calibration, and click the green button to save permanently.": "",
|
||||
"": ""
|
||||
}
|
||||
364
lang/es_es.json
Normal file
@@ -0,0 +1,364 @@
|
||||
{
|
||||
".authorMsg": "- Traducción al Español realizado por Ruben Martins, Miguel Borja @closesim, Eliar Pineda Miranda",
|
||||
"! :)": "! :)",
|
||||
", it was discovered that there exist some undocumented commands on DualShock controllers that can be sent via USB and are used during factory assembly process. If these commands are sent, the controller starts the recalibration of analog sticks.": ", se descubrió que existen ciertos comandos no documentados de los DualShock que se pueden enviar por USB y que se usan en la fabrica durante el proceso de montaje. Si estos comandos son enviados, el mando empieza el proceso de recalibración de los análogos.",
|
||||
", to help more people like you!": ", para que ayude más personas como tu!",
|
||||
"Add support for recalibrating IMUs.": "Añadir soporte de recalibracion de IMUs.",
|
||||
"Additionally, explore the possibility of reviving non-functioning DualShock controllers (further discussion available on Discord for interested parties).": "Adicionalmente, investigar la posibilidad de revivir mandos dañados DualShock (discucion disponible on Discord para los interesados).",
|
||||
"Battery Barcode": "Código de barras de la batería",
|
||||
"Battery level is low. Tests may fail due to the controller being in power saving mode.": "El nivel de batería es bajo. Las pruebas podrían fallar porque el mando está en modo de ahorro de energía.",
|
||||
"Be gentle to avoid damage.": "Sé delicado para evitar daños.",
|
||||
"Before doing the permanent calibration, try the temporary one to ensure that everything is working well.": "Antes de hacer un calibración permanente, pruebe hacer una calibración temporal, para asegurarse que todo funciona bien.",
|
||||
"Behind the scenes, this website is the culmination of one year of dedicated effort in reverse-engineering DualShock controllers for fun/hobby from a random guy on the internet.": "Detras de escenas, esta web es la culminación de un año de dedicación y esfuerzo de ingeneria-reversa de los controles DualShock por diversión/hobby de alguien aleatorio en internet.",
|
||||
"Board Model": "Modelo de la placa",
|
||||
"Build Date": "Fecha de compilación",
|
||||
"Buttons": "Botones",
|
||||
"Calibrate stick center": "Calibrar centro de los análogos",
|
||||
"Calibrate stick range": "Calibrar el rango de los análogos",
|
||||
"Calibrating without replacing the joysticks may help temporarily, but it may also make the problem worse, with no way to undo it.": "Calibrar sin reemplazar los joysticks puede ayudar temporalmente, pero también puede empeorar el problema, sin posibilidad de solucionarlo.",
|
||||
"Calibration History": "Historial de calibración",
|
||||
"Calibration completed successfully!": "Calibración realizada con exito!",
|
||||
"Calibration in progress": "Calibración en proceso",
|
||||
"Calibration is being stored in the stick modules.": "La calibración se almacena en los módulos del stick.",
|
||||
"Calibration": "Calibración",
|
||||
"Cancel": "Cancelar",
|
||||
"Cannot copy text to the clipboard:": "No se puede copiar texto al portapapeles:",
|
||||
"Cannot lock": "No se puede bloquear",
|
||||
"Cannot read module barcodes": "No se pueden leer los códigos de barras del módulo",
|
||||
"Cannot store data into": "No se pueden almacenar datos en",
|
||||
"Cannot unlock": "No se puede desbloquear",
|
||||
"Center (L1)": "Centro (L1)",
|
||||
"Center": "Centro",
|
||||
"Changes saved successfully": "Los cambios se guardaron correctamente",
|
||||
"Check circularity": "Comprobar circularidad",
|
||||
"Cheers!": "Saludos!",
|
||||
"Circularity (R1)": "Circularidad (R1)",
|
||||
"Circularity": "Circularidad",
|
||||
"Clear All": "Borrar todo",
|
||||
"Close": "Cerrar",
|
||||
"Completed": "Completado",
|
||||
"Connect": "Conectar",
|
||||
"Connected invalid device": "Dispositivo conectado no válido",
|
||||
"Connected to:": "Conectado a:",
|
||||
"Consider making a": "Considera hacer una",
|
||||
"Continue": "Continuar",
|
||||
"Controller Info": "Información del mando",
|
||||
"Controller does not support adaptive trigger control": "Este mando no soporta los gatillos adaptativos.",
|
||||
"Current": "Actual",
|
||||
"Delete all calibration history for this controller? This cannot be undone.": "¿Eliminar todo el historial de calibración de este controlador? No se puede deshacer.",
|
||||
"Delete this calibration entry?": "¿Borrar esta entrada de calibración?",
|
||||
"Delete": "Borrar",
|
||||
"Device Type": "Tipo de dispositivo",
|
||||
"Disconnect": "Desconectar",
|
||||
"Do you have any suggestion or issue? Drop me a message via email or discord.": "Tienes alguna sugerencia o problema? Házmelo saber por email o Discord",
|
||||
"Does this software resolve stickdrift?": "¿Este software soluciona el drift del joystick?",
|
||||
"Does this website detect if a controller is a clone?": "Esta web detecta si el mando es un clón?",
|
||||
"Don't show again": "No volver a mostrar",
|
||||
"Done": "Listo",
|
||||
"Drift is caused by mechanical parts in the joystick being worn out, and they need to be replaced to fix the drift.": "El drift se produce cuando las piezas mecánicas del joystick se desgastan y es necesario reemplazarlas para solucionar el problema.",
|
||||
"DualShock 3": "DualShock 3",
|
||||
"DualShock Calibration GUI": "GUI de Calibración DualShock",
|
||||
"Each of these tasks presents both immense interest and significant time investment. To provide context, supporting a new controller typically demands 6-12 months of full-time research, alongside a stroke of good fortune.": "Cada una de estas tareas demandan muchísimo interes y una cantidad significativa de tiempo de investigacion. Para dar más contexto, dar soporte a un nuevo mando normalmente requiere 6-12 meses de investigación de tiempo completo, además de un golpe de buena suerte.",
|
||||
"Error while saving changes": "Error al guardar los cambios",
|
||||
"Error": "Error",
|
||||
"FW Build Date": "Fecha de compilación del FW",
|
||||
"Fail": "Error",
|
||||
"Failed to connect to device": "No se pudo conectar al dispositivo",
|
||||
"Failed to disable adaptive trigger": "No se pudo desactivar el gatillo adaptativo",
|
||||
"Failed to set speaker tone": "No se pudo configurar el tono del altavoz",
|
||||
"Failed to set vibration": "No se pudo configurar la vibración",
|
||||
"Failed": "Falló",
|
||||
"failed": "falló",
|
||||
"Feel for vibration in the controller.": "Siente la vibración en el mando.",
|
||||
"Frequently Asked Questions": "Preguntas Frecuentes",
|
||||
"HW Version": "Versión HW",
|
||||
"Haptic Vibration": "Vibración háptica",
|
||||
"Have a nice day :)": "Que tenga un buen dia! :)",
|
||||
"Hi, thank you for using this software.": "Hola, gracias por utilizar este software.",
|
||||
"How does it work?": "Como funciona?",
|
||||
"I love this service, it helped me! How can I contribute?": "Me encantó este servicio, me ayudó mucho! Como puedo ayudar?",
|
||||
"I maintain two separate to-do lists for this project, although the priority has yet to be established.": "Mantengo dos listas de tareas separadas para este proyecto, aún así la prioridad aún esta por establecerse.",
|
||||
"I'm glad to hear that you found this helpful! If you're interested in contributing, here are a few ways you can help me:": "Me encanta escuchar que lo has encontrado útil! Si tienes ganas de apoyar, hay unas cuantas cosas para que me ayudes:",
|
||||
"If you want to extend this detection functionality to DualSense, please ship me a fake DualSense and you'll see it in few weeks.": "Si quieres que se amplíe la función de detección enviame un Dualsense falso y lo varás en unas cuantas semanas.",
|
||||
"If you're finding it helpful and you want to support my efforts, feel free to": "Si te ha parecido útil y te gustaria apoyar mis esfuerzos, no te cortes",
|
||||
"Implement calibration of L2/R2 triggers.": "Implementar calibración de los gatillos L2/R2.",
|
||||
"Improve detection of clones, particularly beneficial for those seeking to purchase used controllers with assurance of authenticity.": "Mejorar la detección de clones, perticularmente beneficioso para quienes quieran comprar mandos usados y quieran asegurar su autenticidad.",
|
||||
"Info": "Información",
|
||||
"Initializing...": "Inicializando...",
|
||||
"Instructions": "Instrucciones",
|
||||
"Is this an officially endorsed service?": "Es esto un servicio oficial?",
|
||||
"It appears the latest joystick calibration has not been saved.": "Parece que no se ha guardado la última calibración del joystick.",
|
||||
"Joystick Info": "Información del joystick",
|
||||
"Just few things to know before you can start:": "Un par de cosas antes de empezar:",
|
||||
"Keep rotating the sticks even if you see no progress!": "¡Sigue girando las palancas incluso si no ves ningún progreso!",
|
||||
"Keep the internal battery of the controller connected and ensure it is well charged. If the battery dies during operations, the controller will be damaged and rendered unusable.": "Mantenga la batería del mando siempre conectada y asegurese que este bien cargada. Si la bateria se descarga durante las operaciones, el mando quedará dañado e inservible permanentemente",
|
||||
"Last connected": "Última conexión",
|
||||
"Learn more...": "Saber más...",
|
||||
"Left Module Barcode": "Código de barras del módulo izquierdo",
|
||||
"Left stick": "Palanca izquierdo",
|
||||
"Lights": "Luces",
|
||||
"Listen for a tone from the controller speaker.": "Escuche un tono del altavoz del controlador.",
|
||||
"Long-press [circle] to skip ahead.": "Mantenga presionado [círculo] para avanzar rápidamente.",
|
||||
"Microphone Level:": "Nivel de micrófono",
|
||||
"Microphone": "Micrófono",
|
||||
"More details and images": "Más detalles e imágenes",
|
||||
"NVS Lock failed": "Bloqueo NVS Fallido",
|
||||
"NVS Status": "Estado NVS",
|
||||
"NVS Unlock failed": "Desbloqueo NVS Fallido",
|
||||
"NVS lock": "Bloqueo NVS",
|
||||
"NVS unlock": "Desbloqueo NVS",
|
||||
"Next": "Siguiente",
|
||||
"No controller connected": "No hay ningún mando conectado",
|
||||
"No saved calibrations found.": "No se encontraron calibraciones guardadas.",
|
||||
"No tests completed yet.": "Aún no se han completado pruebas.",
|
||||
"No, this service is simply a creation by a DualShock enthusiast.": "No, este servicio simplemente nació de un amante del control DualShock.",
|
||||
"Passed": "Aprobado",
|
||||
"passed": "aprobado",
|
||||
"Please be aware that, <i>once the calibration is running, it cannot be canceled</i>. Do not close this page or disconnect your controller until it is completed.": "Atención: <i>la calibración NO se puede interrumpir</i>. No cierre esta página, ni desconecte el mando hasta que sea completada.",
|
||||
"Please connect a DualShock 4, a DualSense, DualSense Edge or VR2 controller to your computer and press Connect.": "Conecte un mando DualShock 4, DualSense, DualSense Edge o VR2 a su computadora y presione Conectar.",
|
||||
"Please connect only one controller at time.": "Por favor, conecte solo un mando a la vez.",
|
||||
"Please do not close this window and do not disconnect your controller. ": "Por favor, no cierre esta ventana y/o desconecte el mando. ",
|
||||
"Please move both sticks to the <b>bottom-left corner</b> and release them.": "Mueva ambos análogos hacia la esquina <b>inferior-izquierda</b> y luego suéltelos.",
|
||||
"Please move both sticks to the <b>bottom-right corner</b> and release them.": "Mueva ambos análogos hacia la esquina <b>inferior-derecha</b> y luego suéltelos.",
|
||||
"Please move both sticks to the <b>top-left corner</b> and release them.": "Mueva ambos análogos hacia la esquina <b>superior-izquierda</b> y luego suéltelos.",
|
||||
"Please move both sticks to the <b>top-right corner</b> and release them.": "Mueva ambos análogos hacia la esquina <b>superior-derecha</b> y luego suéltelos.",
|
||||
"Please note: the stick modules on the DS Edge <b>cannot be calibrated via software alone</b>.": "Tenga en cuenta: los módulos de memoria en el DS Edge <b>No se puede calibrar solo mediante software</b>.",
|
||||
"Please read the instructions.": "Por favor lea las instrucciones.",
|
||||
"Please update the firmware and try again.": "Por favor, actualiza el firmware y vuelve a intentarlo.",
|
||||
"Plug in headphones to the 3.5mm jack": "Conecte los auriculares al conector de 3,5 mm",
|
||||
"Press <b>Start</b> to begin calibration.": "Pulse <b>Empezar</b> para iniciar calibración",
|
||||
"Press L2 and R2 triggers to feel the trigger resistance.": "Presione los gatillos L2 y R2 para sentir la resistencia del gatillo.",
|
||||
"Press [circle] to close, or [square] to start over": "Presione [círculo] para cerrar, o [cuadrado] para comenzar de nuevo",
|
||||
"Query NVS status": "Consultar estado NVS",
|
||||
"Quick calibrate": "Calibración rápida",
|
||||
"Range calibration completed": "Calibración de Rango completada",
|
||||
"Range calibration failed": "Calibración de Rango fallida",
|
||||
"Range calibration": "Calibración de rango",
|
||||
"Recentering the controller sticks.": "Re-centrando los análogos del mando.",
|
||||
"SW Version": "Versión SW",
|
||||
"Sampling...": "Captando...",
|
||||
"Sections below are not useful, just some debug infos or manual commands": "Las secciones de abajo no son de utilidad, solo son información de depuración o comandos manuales",
|
||||
"Ship me a controller you would love to add (send me an email for organization).": "Envíame el mando que te gustaria añadir (envíame un email para organizarnos).",
|
||||
"Sony DualSense Edge": "Sony DualSense Edge",
|
||||
"Sony DualSense": "Sony DualSense",
|
||||
"Sony DualShock 4 V1": "Sony DualShock 4 V1",
|
||||
"Sony DualShock 4 V2": "Sony DualShock 4 V2",
|
||||
"Start": "Empezar",
|
||||
"Step 1": "Paso 1",
|
||||
"Step 2": "Paso 2",
|
||||
"Step 3": "Paso 3",
|
||||
"Step 4": "Paso 4",
|
||||
"Stick calibration completed": "Calibración de análogos completada",
|
||||
"Stick calibration failed": "Calibración de análogos fallida",
|
||||
"Stick center calibration": "Calibración de centro de los análogos",
|
||||
"Storing calibration...": "Guardando Calibración...",
|
||||
"Support this project": "Apoya este proyecto",
|
||||
"The controller is now sampling data!": "El mando ahora esta captando información!</b>",
|
||||
"The first list is about enhancing support for DualShock4 and DualSense controllers:": "La primera lista es para mejorar el soporte a mandos DualShock4 e DualSense:",
|
||||
"The second list contains new controllers I aim to support:": "La siguiente lista contiene los mandos que busco dar soporte:",
|
||||
"This DualSense controller has outdated firmware.": "Este mando DualSense tiene un firmware desactualizado.",
|
||||
"This service is provided without warranty. Use at your own risk.": "Este servicio se ofrece sin ninguna garantía. Úselo bajo su propio riesgo. ",
|
||||
"This tool will guide you in re-centering the analog sticks of your controller. It consists of four steps: you will be asked to move both sticks in a direction and release them.": "Esta herramienta le guiará a re-centrar los sticks análogos. Consiste en cuatro pasos: Se le pedirá que mueva los análogos en una dirección y que luego los suelte.",
|
||||
"This website is not affiliated with Sony, PlayStation & co.": "Esta web no esta afiliada con Sony, PlayStation & co.",
|
||||
"This website uses analytics to improve the service.": "Este sitio web utiliza análisis para mejorar el servicio.",
|
||||
"Through": "Através",
|
||||
"Translate this website in your language": "Traduce esta web en tu idioma",
|
||||
"Understood": "Entendido",
|
||||
"Unfortunately, the clones cannot be calibrated anyway, because they only clone the behavior of a DualShock4 during normal gameplay, not all the undocumented functionalities.": "Desafortunadamente, los clones no se pueden calibrar de ninguna manera, debido a que ellos clonan el comportamiento de un DualShock4 durante una partida normal, no todas las funciones indocumentadas.",
|
||||
"Unknown": "Desconocido",
|
||||
"Version": "Versión",
|
||||
"Welcome to the Calibration GUI": "Bienvenido a la GUI de Calibración",
|
||||
"Welcome to the F.A.Q. section! Below, you'll find answers to some of the most commonly asked questions about this website. If you have any other inquiries or need further assistance, feel free to reach out to me directly. Your feedback and questions are always welcome!": "Bienvenido a la sección F.A.Q.! Abajo vas a encontrar las preguntas más frecuentes sobre este sitio web. Si tienes alguna otra consulta o necesitas asistencia, siente libre de contactarme directamente. Tus comentarios y preguntas son siempre bienvenidas!",
|
||||
"Welcome to the stick center-calibration wizard!": "Bienvenido al asistente de calibración de centro de los análogos!",
|
||||
"Welcome": "Bienvenido",
|
||||
"What development is in plan?": "Que desarrollos se tienen planeados?",
|
||||
"When the sticks are back in the center, press <b>Continue</b>.": "Cuando los análogos estén de vuelta en su centro, pulse <b>Continuar</b>",
|
||||
"While the primary focus of this research wasn't initially centered on recalibration, it became apparent that a service offering this capability could greatly benefit numerous individuals. And thus, here we are.": "Mientras que el enfoque inicial de esta investigación no era recalibrar los análogos, se evidenció claramente que ofrecer un servicio con esta capacidad podría beneficiar a varias personas. Por eso, aqui estamos.",
|
||||
"XBox Controllers": "Mandos Xbox",
|
||||
"Yes, only DualShock4 at the moment. This happened because I accidentally purchased some clones, spent time identifying the differences and added this functionality to prevent future deception.": "Si, solo DualShock4 de momento. Esto sucedió ya que acidentalmente compré algunos clones y le dediqué un tiempo en identificar las diferencias, y añadí la función para prevenir futuras decepciones.",
|
||||
"buy me a coffee": "y cómprame un café",
|
||||
"clone": "clón",
|
||||
"donation": "donación",
|
||||
"error": "error",
|
||||
"locked": "bloqueado",
|
||||
"original": "original",
|
||||
"this research": "de esta investigación",
|
||||
"to support my late-night caffeine-fueled reverse-engineering efforts.": "para ayudar mi trasnochado cafe-alimentado esfuerzo de ingeniería inversa.",
|
||||
"unknown": "desconocido",
|
||||
"unlocked": "desbloqueado",
|
||||
"(beta)": "(beta)",
|
||||
"10x zoom": "Zoom 10x",
|
||||
"30th Anniversary": "30º Aniversario",
|
||||
"<b>Externally</b>: by applying +1.8V directly to the visible test point without opening the controller.": "<b>Externamente</b>: aplicando +1.8V directamente al punto de prueba visible sin abrir el controlador.",
|
||||
"<b>Internally</b>: by soldering a wire from a +1.8V source to the write-protect TP.": "<b>Internamente</b>: soldando un cable desde una fuente de +1.8V al punto de protección contra escritura (TP).",
|
||||
"<strong>Average circularity error:</strong> smaller is not always better! Aim for 7-9 %.": "<strong>Error medio de circularidad:</strong> ¡más pequeño no siempre es mejor! Apunta a 7-9 %. ",
|
||||
"A reboot is needed to continue using this DualSense Edge. Please disconnect and reconnect your controller.": "Se requiere reiniciar para seguir usando este DualSense Edge. Por favor, desconecta y vuelve a conectar el controlador.",
|
||||
"Adaptive Trigger": "Gatillo adaptativo",
|
||||
"Adaptive triggers are only supported on DualSense controllers": "Los gatillos adaptativos solo son compatibles con mandos DualSense",
|
||||
"Add test": "Añadir prueba",
|
||||
"After range calibration, joysticks always go in corners.": "Después de la calibración de rango, los joysticks siempre se van a las esquinas.",
|
||||
"After they have been replaced, this utility can be used to calibrate the controller to work with the new joysticks.": "Después de ser reemplazados, esta utilidad puede usarse para calibrar el controlador y que funcione con los nuevos joysticks.",
|
||||
"Aim for a circularity error of around 7-9 % for the best playing experience.": "Apunta a un error de circularidad de alrededor de 7-9 % para la mejor experiencia de juego.",
|
||||
"Astro Bot": "Astro Bot",
|
||||
"Bluetooth Address": "Dirección Bluetooth",
|
||||
"Chroma Indigo": "Chroma Índigo",
|
||||
"Chroma Pearl": "Chroma Perla",
|
||||
"Chroma Teal": "Chroma Verde Azulado",
|
||||
"Cobalt Blue": "Azul Cobalto",
|
||||
"Color": "Color",
|
||||
"Cosmic Red": "Rojo Cósmico",
|
||||
"Debug Info": "Información de depuración",
|
||||
"Debug buttons": "Botones de depuración",
|
||||
"Debug": "Depuración",
|
||||
"DualSense Edge Calibration": "Calibración DualSense Edge",
|
||||
"FW Series": "Serie FW",
|
||||
"FW Type": "Tipo de FW",
|
||||
"FW Update Info": "Información de actualización FW",
|
||||
"FW Update": "Actualizar FW",
|
||||
"FW Version": "Versión FW",
|
||||
"Finetune stick calibration": "Ajuste fino de calibración del stick",
|
||||
"Firefox is supported with the WebHID extension installed.": "Firefox es compatible con la extensión WebHID instalada.",
|
||||
"For more info or help, feel free to reach out on Discord.": "Para más información o ayuda, no dudes en contactar en Discord.",
|
||||
"Fortnite": "Fortnite",
|
||||
"Galactic Purple": "Púrpura Galáctico",
|
||||
"God of War Ragnarok": "God of War Ragnarok",
|
||||
"Grey Camouflage": "Camuflaje gris",
|
||||
"HW Model": "Modelo HW",
|
||||
"Hardware": "Hardware",
|
||||
"Headphone Jack": "Conector de auriculares",
|
||||
"If the calibration is not stored permanently, please double-check the wirings of the hardware mod.": "Si la calibración no se guarda permanentemente, verifica el cableado de la modificación hardware.",
|
||||
"Increase non-circularity": "Aumentar la no circularidad",
|
||||
"MCU Unique ID": "ID único del MCU",
|
||||
"Make sure to touch the edges of the joystick frame and rotate slowly, preferably in each direction - clockwise and anti-clockwise.": "Asegúrate de tocar los bordes del marco del joystick y girar lentamente, preferiblemente en ambas direcciones: horario y antihorario.",
|
||||
"Midnight Black": "Negro Medianoche",
|
||||
"Move the stick to select it for tuning, then without touching the stick use the D-pad buttons to adjust the center point. Flick it and adjust it again if it is off center or flickers.": "Mueve el stick para seleccionarlo, luego sin tocarlo usa la cruceta para ajustar el punto central. Muévelo y ajústalo de nuevo si está descentrado o parpadea.",
|
||||
"No.": "No.",
|
||||
"Normal": "Normal",
|
||||
"Not tested": "No probado",
|
||||
"Nova Pink": "Rosa Nova",
|
||||
"Only after you have done that, you click on \"Done\".": "Solo después de hacer eso, haz clic en \"Hecho\".",
|
||||
"PCBA ID": "ID de PCBA",
|
||||
"Pass": "Aprobado",
|
||||
"Please release the stick to center position before adjusting with D-pad buttons.": "Suelta el stick en la posición central antes de ajustar con la cruceta.",
|
||||
"Please use a web browser with WebHID support (e.g. Google Chrome or Microsoft Edge) on a PC or Mac.": "Usa un navegador con soporte WebHID (por ejemplo, Google Chrome o Microsoft Edge) en PC o Mac.",
|
||||
"Press [square] to Pass, [cross] to Fail, or [circle] to skip.": "Pulsa [cuadrado] para aprobar, [cruz] para fallar o [círculo] para omitir.",
|
||||
"Press [square] to begin or [circle] to close": "Pulsa [cuadrado] para comenzar o [círculo] para cerrar",
|
||||
"Press [triangle] to go back.": "Pulsa [triángulo] para volver.",
|
||||
"Press each button until they turn green.": "Pulsa cada botón hasta que se pongan en verde.",
|
||||
"Press the D-pad or face buttons in the direction you want the stick position to move.": "Pulsa la cruceta o los botones frontales en la dirección en la que quieras mover el stick.",
|
||||
"Progress": "Progreso",
|
||||
"Push the stick straight up/down/left/right as far as possible.": "Empuja el stick completamente hacia arriba/abajo/izquierda/derecha.",
|
||||
"Quick Test": "Prueba rápida",
|
||||
"Range calibration appears to have failed. Please try again and make sure you rotate the sticks.": "La calibración de rango parece haber fallado. Inténtalo de nuevo y asegúrate de girar los sticks.",
|
||||
"Reboot controller": "Reiniciar controlador",
|
||||
"Repeat": "Repetir",
|
||||
"Restart": "Reiniciar",
|
||||
"Restore calibration": "Restaurar calibración",
|
||||
"Restore": "Restaurar",
|
||||
"Right Module Barcode": "Código de barras del módulo derecho",
|
||||
"Right stick": "Stick derecho",
|
||||
"Rotate the sticks slowly at least 2 times in one direction and 2 times in the other direction to cover the whole range.": "Gira los sticks lentamente al menos 2 veces en cada dirección para cubrir todo el rango.",
|
||||
"Run through these tests to verify your controller's functionality.": "Realiza estas pruebas para verificar el funcionamiento del controlador.",
|
||||
"SBL FW Version": "Versión FW SBL",
|
||||
"Save changes permanently": "Guardar cambios permanentemente",
|
||||
"Serial Number": "Número de serie",
|
||||
"Show all": "Mostrar todo",
|
||||
"Show raw numbers": "Mostrar valores sin procesar",
|
||||
"Software": "Software",
|
||||
"Sony controllers come from the factory calibrated to have an average circularity error of nearly 10 %, and this is now what games expect. Too perfect circularity can make movements and aim feel stiff and unresponsive in some games.": "Los mandos Sony vienen calibrados de fábrica con un error medio de circularidad de casi el 10 %, y esto es lo que esperan los juegos. Una circularidad demasiado perfecta puede hacer que el movimiento y la puntería se sientan rígidos en algunos juegos.",
|
||||
"Speaker": "Altavoz",
|
||||
"Spider FW Version": "Versión FW Spider",
|
||||
"Spider-Man 2": "Spider-Man 2",
|
||||
"Starlight Blue": "Azul Estelar",
|
||||
"Step size": "Tamaño de paso",
|
||||
"Sterling Silver": "Plata Sterling",
|
||||
"Stickdrift is caused by a physical defect; namely dirt, worn potentiometer or in some cases a worn spring.": "El drift del stick es causado por un defecto físico, como suciedad, potenciómetro desgastado o en algunos casos un muelle desgastado.",
|
||||
"Support for calibrating DualSense Edge stick modules is now available as an <b>experimental feature</b>.": "El soporte para calibrar módulos de stick DualSense Edge ya está disponible como <b>función experimental</b>.",
|
||||
"Test Speaker": "Probar altavoz",
|
||||
"Test Summary": "Resumen de pruebas",
|
||||
"Test all buttons, or long-press [square] to Pass and [cross] to Fail, or [circle] to skip.": "Prueba todos los botones o mantén pulsado [cuadrado] para aprobar, [cruz] para fallar o [círculo] para omitir.",
|
||||
"The <b>Done</b> button will unlock after at most 15 seconds. If you press <b>Done</b> without rotating the sticks, the calibration will be incomplete and you will need to repeat it.": "El botón <b>Hecho</b> se desbloqueará en un máximo de 15 segundos. Si lo pulsas sin girar los sticks, la calibración será incompleta y tendrás que repetirla.",
|
||||
"The Last of Us": "The Last of Us",
|
||||
"The calibration was restored successfully! Remember to save the changes in order not to loose them when the controller is rebooted.": "¡La calibración se restauró correctamente! Recuerda guardar los cambios para no perderlos al reiniciar el controlador.",
|
||||
"The device appears to be a clone. All calibration functionality is disabled.": "El dispositivo parece ser una copia. Todas las funciones de calibración están deshabilitadas.",
|
||||
"The device is connected via Bluetooth. Disconnect and reconnect using a USB cable instead.": "El dispositivo está conectado por Bluetooth. Desconéctalo y vuelve a conectarlo usando un cable USB.",
|
||||
"The item has been copied to the clipboard.": "El elemento se ha copiado al portapapeles.",
|
||||
"This controller has unsaved changes that will be lost when the controller is rebooted.": "Este controlador tiene cambios no guardados que se perderán al reiniciarlo.",
|
||||
"This involves temporarily disabling write protection by applying <b>+1.8V</b> to a specific test point on each module.": "Esto implica desactivar temporalmente la protección de escritura aplicando <b>+1.8V</b> a un punto de prueba específico en cada módulo.",
|
||||
"This is only for advanced users. If you're not sure what you're doing, please do not attempt it.": "Esto es solo para usuarios avanzados. Si no estás seguro de lo que haces, no lo intentes.",
|
||||
"This issue happens because you have clicked \"Done\" immediately after starting a range calibration.": "Este problema ocurre porque hiciste clic en \"Hecho\" inmediatamente después de iniciar la calibración de rango.",
|
||||
"This test checks all controller buttons by requiring you to press each button up to three times.": "Esta prueba verifica todos los botones requiriendo que los pulses hasta tres veces.",
|
||||
"This test checks the headphone jack functionality.": "Esta prueba verifica el conector de auriculares.",
|
||||
"This test checks the reliability of the USB port.": "Esta prueba verifica la fiabilidad del puerto USB.",
|
||||
"This test will cycle through red, green, and blue colors on the controller lightbar, animate the player indicator lights, and flash the mute button.": "Esta prueba alternará colores rojo, verde y azul en la barra de luz, animará las luces de jugador y hará parpadear el botón de silencio.",
|
||||
"This test will enable heavy resistance on both L2 and R2 triggers.": "Esta prueba activará alta resistencia en los gatillos L2 y R2.",
|
||||
"This utility cannot fix stick drift.": "Esta utilidad no puede corregir el drift del stick.",
|
||||
"To store a custom calibration on the stick's internal memory, a <b>hardware modification</b> is required.": "Para guardar una calibración personalizada en la memoria interna del stick, se requiere una <b>modificación hardware</b>.",
|
||||
"Touchpad FW Version": "Versión FW del touchpad",
|
||||
"Touchpad ID": "ID del touchpad",
|
||||
"USB Connector": "Conector USB",
|
||||
"Unsupported browser.": "Navegador no compatible.",
|
||||
"Use expert mode": "Usar modo experto",
|
||||
"Use four-step calibration": "Usar calibración en cuatro pasos",
|
||||
"Use normal mode": "Usar modo normal",
|
||||
"Use quick calibration": "Usar calibración rápida",
|
||||
"Using this utility on a phone or tablet is not supported.": "No se admite el uso de esta utilidad en teléfonos o tabletas.",
|
||||
"VCM Left Barcode": "Código de barras VCM izquierdo",
|
||||
"VCM Right Barcode": "Código de barras VCM derecho",
|
||||
"Values": "Valores",
|
||||
"Venom FW Version": "Versión FW Venom",
|
||||
"Volcanic Red": "Rojo Volcánico",
|
||||
"Watch the controller lights change colors, the player lights animate, and the mute button flash.": "Observa cómo cambian los colores, se animan las luces de jugador y parpadea el botón de silencio.",
|
||||
"We are not responsible for any damage caused by attempting this modification.": "No somos responsables de ningún daño causado al intentar esta modificación.",
|
||||
"While holding the stick to be adjusted straight up/down/left/right, make adjustments until you see lightblue sectors in all four directions after circling the stick both left and right. Then use the": "Mientras mantienes el stick recto en una dirección, ajusta hasta ver sectores azul claro en las cuatro direcciones tras girarlo. Luego usa el",
|
||||
"White": "Blanco",
|
||||
"Wiggle the USB cable to see if the controller disconnects.": "Mueve el cable USB para comprobar si el controlador se desconecta.",
|
||||
"You can do this in two ways:": "Puedes hacerlo de dos maneras:",
|
||||
"You have to rotate the joysticks before you press \"Done\".": "Debes girar los joysticks antes de pulsar \"Hecho\".",
|
||||
"You should save your changes, or reboot the controller to revert back to the previous state.": "Debes guardar los cambios o reiniciar el controlador para volver al estado anterior.",
|
||||
"Your device might not be a genuine Sony controller. If it is not a clone then please report this issue.": "Tu dispositivo puede no ser un mando Sony original. Si no es una copia, por favor informa del problema.",
|
||||
"here": "aquí",
|
||||
"hide": "ocultar",
|
||||
"left module": "módulo izquierdo",
|
||||
"right module": "módulo derecho",
|
||||
"serial number": "número de serie",
|
||||
"skipped": "omitido",
|
||||
"tests completed": "pruebas completadas",
|
||||
"to increase the non-circularity.": "para aumentar la no circularidad.",
|
||||
"(DualSense & DualSense Edge) Will updating the firmware reset calibration?": "",
|
||||
"(DualSense Edge) Is the calibration stored on the controller or the modules?": "",
|
||||
"A sample test was done with 30 dualsense edge modules, and the results showed that the inner quartile range (IQR) is 8.3% and 9.0%, with an average of 8.6%. This goes to show that stock controllers by default have a relatively high range, and the rule of thumb is to follow factory calibration.": "",
|
||||
"Can I overwrite a (permanent) calibration?": "",
|
||||
"Can I restore a previous calibration?": "",
|
||||
"Finetuning is only available for DualSense and DualSense Edge.": "",
|
||||
"God of War 20th Anniversary": "",
|
||||
"Housing": "",
|
||||
"How do I use the finetuning feature?": "",
|
||||
"If you don't have a battery connected or the connected battery is empty, AND your cable disconnects during saving the calibration, then your controller has a high chance of being bricked.": "",
|
||||
"If you have not clicked the green button \"Save changes permanently\", then unplugging the controller will reset to the previously saved calibration. It is recommended you test your calibration before saving.": "",
|
||||
"If you have saved the changes permanently, you can reset the changes only if you are using a DualSense or DualSense Edge. You can click on the grey button \"Restore Calibration\" to go back to one of the previous calibrations that was saved on the controller. Known issue: You may need to reboot your controller first in order for previous calibrations to show up.": "",
|
||||
"Image 1": "",
|
||||
"Images": "",
|
||||
"In most cases, calibrating your joysticks that have prior drift issues may result in a worse and unpredictable calibration.": "",
|
||||
"Not shown in the video: You can now also increase the range in each direction uniformly by using the cross in the top right and moving the slider up, which may speed up finetuning. Make sure to rotate the joystick first, otherwise the button cannot be pressed.": "",
|
||||
"Only official controllers are supported, no third-party or \"fake\" controllers.": "",
|
||||
"Option 1": "",
|
||||
"Option 2": "",
|
||||
"PlayStation Virtual Reality 2": "",
|
||||
"Saving calibration is locked by default on DualSense Edge joystick modules. A hardware mod is required to save the calibration permanently. The calibration is saved on the modules themselves, so you have to perform the mod twice: once for each module. You would need to bridge two points on the PCB with enamelled wire. There are multiple methods, I personally recommend using either of these two locations to solder the wire to. See images below. Ensure the wire is thin enough so that the shell is closed properly. Make sure you don't short the wire to ground through the letters near the bottom joint.": "",
|
||||
"Sony DualShock 4": "",
|
||||
"The calibration is stored on each module individually. It is carried over if you place the modules in a different DualSense Edge. Likewise, if you place a different set of modules in your DualSense Edge, you will get a different calibration that is tied to those new modules.": "",
|
||||
"The finetuning and quick test menus are only accessible for DualSense and DualSense Edge.": "",
|
||||
"The website supports the following official controllers:": "",
|
||||
"These previous calibrations are stored locally in your browser's storage. Meaning you can only restore calibrations using the same computer and browser that you used to calibrate it with, and deleting the cache or using Incognito will make any previous calibration irrecoverable.": "",
|
||||
"This software is not intended to fix stickdrift and will <b>not</b> fix stickdrift on its own if you already experience that.": "",
|
||||
"This video from V2.16 shows how to use the finetuning menu.": "",
|
||||
"We recommend a circularity between 7% and 9%. The reason for this is to mimic a stock controllers calibration. However, symmetrical overshoot is more important and if you need to deviate from this range to achieve better symmetry, that is fine too.": "",
|
||||
"What are the risks of using the calibration?": "",
|
||||
"What circularity percentage to aim for when calibrating and finetuning.": "",
|
||||
"What the software will help with, is ensuring new joysticks will function properly after replacing the old broken joysticks that drift. This step involves opening up the controller and soldering new potentiometers or an entire new joystick.": "",
|
||||
"When calibrating, there is no risk. However, if your controller disconnects during the split second that you save a calibration, then you have a chance of bricking your controller. Make sure your battery has enough charge and is plugged into the controller, and the USB cable is securely connected. This prevents your controller from being bricked if the USB cable accidentally disconnects.": "",
|
||||
"Which controllers does DualShock Calibration GUI support?": "",
|
||||
"Yes. Simply do another calibration, and click the green button to save permanently.": "",
|
||||
"": ""
|
||||
}
|
||||
268
lang/fa_fa.json
Normal file
@@ -0,0 +1,268 @@
|
||||
{
|
||||
".authorMsg": "گسترش و ترجمه توسط محمد میرحسینی",
|
||||
"DualShock Calibration GUI": "رابط کاربری کالیبراسیون DualShock",
|
||||
"Connect": "اتصال",
|
||||
"Connected to:": "متصل به:",
|
||||
"Disconnect": "قطع اتصال",
|
||||
"Calibrate stick center": "کالیبراسیون مرکز استیک",
|
||||
"Calibrate stick range": "کالیبراسیون محدوده استیک",
|
||||
"Sections below are not useful, just some debug infos or manual commands": "بخشهای زیر برای کاربران عادی مفید نیست، فقط اطلاعات اشکالزدایی یا دستورات دستی هستند",
|
||||
"NVS Status": "وضعیت NVS",
|
||||
"Unknown": "نامشخص",
|
||||
"Debug buttons": "دکمههای اشکالزدایی",
|
||||
"Query NVS status": "استعلام وضعیت NVS",
|
||||
"NVS unlock": "باز کردن قفل NVS",
|
||||
"NVS lock": "قفل کردن NVS",
|
||||
"Stick center calibration": "کالیبراسیون مرکز استیک",
|
||||
"Welcome": "خوش آمدید",
|
||||
"Step 1": "مرحله ۱",
|
||||
"Step 2": "مرحله ۲",
|
||||
"Step 3": "مرحله ۳",
|
||||
"Step 4": "مرحله ۴",
|
||||
"Completed": "تکمیل شد",
|
||||
"Welcome to the stick center-calibration wizard!": "به راهنمای کالیبراسیون مرکز استیک خوش آمدید!",
|
||||
"This tool will guide you in re-centering the analog sticks of your controller. It consists of four steps: you will be asked to move both sticks in a direction and release them.": "این ابزار شما را در بازتنظیم مرکز استیکهای آنالوگ کنترلر راهنمایی میکند. این فرآیند شامل چهار مرحله است که در هر مرحله باید استیکها را در یک جهت حرکت داده و رها کنید.",
|
||||
"Please be aware that, <i>once the calibration is running, it cannot be canceled</i>. Do not close this page or disconnect your controller until it is completed.": "لطفاً توجه داشته باشید، <i>پس از شروع کالیبراسیون، نمیتوان آن را لغو کرد</i>. تا پایان فرآیند، صفحه را نبندید و کنترلر را قطع نکنید.",
|
||||
"Press <b>Start</b> to begin calibration.": "برای شروع کالیبراسیون روی <b>شروع</b> کلیک کنید.",
|
||||
"Please move both sticks to the <b>top-left corner</b> and release them.": "لطفاً هر دو استیک را به <b>بالا سمت چپ</b> حرکت داده و رها کنید.",
|
||||
"When the sticks are back in the center, press <b>Continue</b>.": "پس از بازگشت استیکها به مرکز، روی <b>ادامه</b> کلیک کنید.",
|
||||
"Please move both sticks to the <b>top-right corner</b> and release them.": "لطفاً هر دو استیک را به <b>بالا سمت راست</b> حرکت داده و رها کنید.",
|
||||
"Please move both sticks to the <b>bottom-left corner</b> and release them.": "لطفاً هر دو استیک را به <b>پایین سمت چپ</b> حرکت داده و رها کنید.",
|
||||
"Please move both sticks to the <b>bottom-right corner</b> and release them.": "لطفاً هر دو استیک را به <b>پایین سمت راست</b> حرکت داده و رها کنید.",
|
||||
"Calibration completed successfully!": "کالیبراسیون با موفقیت انجام شد!",
|
||||
"Next": "بعدی",
|
||||
"Recentering the controller sticks.": "بازتنظیم مرکز استیکهای کنترلر در حال انجام است.",
|
||||
"Please do not close this window and do not disconnect your controller. ": "لطفاً این پنجره را نبندید و کنترلر را قطع نکنید.",
|
||||
"Range calibration": "کالیبراسیون محدوده",
|
||||
"The controller is now sampling data!": "کنترلر اکنون در حال نمونهبرداری از دادههاست!",
|
||||
"Done": "تکمیل",
|
||||
"Hi, thank you for using this software.": "سلام، از استفاده شما از این نرمافزار متشکرم.",
|
||||
"If you're finding it helpful and you want to support my efforts, feel free to": "اگر این نرمافزار برایتان مفید بود و میخواهید از تلاشهای من حمایت کنید، میتوانید",
|
||||
"buy me a coffee": "یک قهوه برای من بخرید",
|
||||
"! :)": "! :)",
|
||||
"Do you have any suggestion or issue? Drop me a message via email or discord.": "آیا پیشنهادی یا مشکلی دارید؟ از طریق ایمیل یا Discord پیام دهید.",
|
||||
"Cheers!": "با تشکر!",
|
||||
"Support this project": "حمایت از این پروژه",
|
||||
"unknown": "نامشخص",
|
||||
"original": "کنترلر اصلی",
|
||||
"clone": "کنترلر کپی",
|
||||
"locked": "قفل شده",
|
||||
"unlocked": "باز",
|
||||
"error": "خطا",
|
||||
"Build Date": "تاریخ ساخت",
|
||||
"HW Version": "نسخه سختافزار",
|
||||
"SW Version": "نسخه نرمافزار",
|
||||
"Device Type": "نوع دستگاه",
|
||||
"Range calibration completed": "کالیبراسیون محدوده تکمیل شد",
|
||||
"Range calibration failed": "کالیبراسیون محدوده ناموفق بود",
|
||||
"Stick calibration failed": "کالیبراسیون استیک ناموفق بود",
|
||||
"Stick calibration completed": "کالیبراسیون استیک تکمیل شد",
|
||||
"NVS Lock failed": "قفل NVS ناموفق بود",
|
||||
"NVS Unlock failed": "باز کردن قفل NVS ناموفق بود",
|
||||
"Please connect only one controller at time.": "لطفاً تنها یک کنترلر را همزمان متصل کنید.",
|
||||
"Sony DualShock 4 V1": "سونی DualShock 4 نسخه ۱",
|
||||
"Sony DualShock 4 V2": "سونی DualShock 4 نسخه ۲",
|
||||
"Sony DualSense": "سونی DualSense",
|
||||
"Sony DualSense Edge": "سونی DualSense Edge",
|
||||
"Connected invalid device": "دستگاه متصل نامعتبر است",
|
||||
"Error": "خطا",
|
||||
"Initializing...": "در حال راهاندازی...",
|
||||
"Storing calibration...": "در حال ذخیرهسازی کالیبراسیون...",
|
||||
"Sampling...": "در حال نمونهبرداری...",
|
||||
"Calibration in progress": "کالیبراسیون در حال انجام است",
|
||||
"Start": "شروع",
|
||||
"Continue": "ادامه",
|
||||
"Have a nice day :)": "روز خوبی داشته باشید :)",
|
||||
"Welcome to the Calibration GUI": "به رابط کاربری کالیبراسیون خوش آمدید",
|
||||
"Just few things to know before you can start:": "چند نکته قبل از شروع:",
|
||||
"This website is not affiliated with Sony, PlayStation & co.": "این وبسایت به سونی، پلیاستیشن یا شرکتهای وابسته مرتبط نیست.",
|
||||
"This service is provided without warranty. Use at your own risk.": "این سرویس بدون ضمانت ارائه میشود. استفاده با مسئولیت خود شماست.",
|
||||
"Keep the internal battery of the controller connected and ensure it is well charged. If the battery dies during operations, the controller will be damaged and rendered unusable.": "باتری داخلی کنترلر را متصل نگه دارید و مطمئن شوید شارژ کافی دارد. اگر باتری در حین عملیات خالی شود، کنترلر آسیب دیده و غیرقابل استفاده میشود.",
|
||||
"Before doing the permanent calibration, try the temporary one to ensure that everything is working well.": "قبل از انجام کالیبراسیون دائمی، ابتدا کالیبراسیون موقت را امتحان کنید تا از عملکرد صحیح همه چیز مطمئن شوید.",
|
||||
"Understood": "متوجه شدم",
|
||||
"Version": "نسخه",
|
||||
"Frequently Asked Questions": "سؤالات متداول",
|
||||
"Close": "بستن",
|
||||
"Welcome to the F.A.Q. section! Below, you'll find answers to some of the most commonly asked questions about this website. If you have any other inquiries or need further assistance, feel free to reach out to me directly. Your feedback and questions are always welcome!": "به بخش سؤالات متداول خوش آمدید! در اینجا پاسخ پرسشهای رایج دربارهی این وبسایت را خواهید یافت. در صورت نیاز به راهنمایی بیشتر میتوانید با ما تماس بگیرید.",
|
||||
"How does it work?": "این ابزار چگونه کار میکند؟",
|
||||
"Behind the scenes, this website is the culmination of one year of dedicated effort in reverse-engineering DualShock controllers for fun/hobby from a random guy on the internet.": "در پشت صحنه، این وبسایت حاصل بیش از یک سال تلاش برای مهندسی معکوس کنترلرهای DualShock توسط فردی علاقهمند است.",
|
||||
"Through": "از طریق",
|
||||
", it was discovered that there exist some undocumented commands on DualShock controllers that can be sent via USB and are used during factory assembly process. If these commands are sent, the controller starts the recalibration of analog sticks.": "مشخص شد که مجموعهای از دستورات غیرمستند در کنترلرهای DualShock وجود دارد که از طریق USB قابل ارسال هستند و در فرآیند کارخانهای مونتاژ استفاده میشوند. ارسال این دستورات باعث آغاز بازکالیبراسیون آنالوگ استیکها میشود.",
|
||||
"While the primary focus of this research wasn't initially centered on recalibration, it became apparent that a service offering this capability could greatly benefit numerous individuals. And thus, here we are.": "اگرچه هدف اصلی این تحقیق بازکالیبراسیون نبود، اما مشخص شد که ارائهی چنین قابلیتی میتواند برای افراد زیادی مفید باشد — و نتیجه آن همین وبسایت است.",
|
||||
"Is this an officially endorsed service?": "آیا این یک سرویس رسمی است؟",
|
||||
"No, this service is simply a creation by a DualShock enthusiast.": "خیر، این یک پروژهی مستقل و شخصی است که توسط یک علاقهمند به کنترلرهای DualShock توسعه داده شده است.",
|
||||
"Does this website detect if a controller is a clone?": "آیا این سایت میتواند کنترلرهای غیراصل (کپی) را شناسایی کند؟",
|
||||
"Yes, only DualShock4 at the moment. This happened because I accidentally purchased some clones, spent time identifying the differences and added this functionality to prevent future deception.": "بله، فعلاً فقط برای کنترلرهای DualShock4 فعال است. پس از خرید تصادفی چند کنترلر غیراصل، تفاوتها بررسی و این قابلیت برای جلوگیری از خطا در آینده افزوده شد.",
|
||||
"Unfortunately, the clones cannot be calibrated anyway, because they only clone the behavior of a DualShock4 during normal gameplay, not all the undocumented functionalities.": "متأسفانه کنترلرهای غیراصل قابل کالیبره کردن نیستند چون فقط رفتار معمولی DualShock4 را شبیهسازی میکنند و به دستورات پیشرفته پاسخ نمیدهند.",
|
||||
"If you want to extend this detection functionality to DualSense, please ship me a fake DualSense and you'll see it in few weeks.": "اگر مایلید قابلیت شناسایی به DualSense هم اضافه شود، کافی است یک کنترلر غیراصل برای ما ارسال کنید تا پس از بررسی اضافه شود.",
|
||||
"What development is in plan?": "برنامههای توسعه آینده چیست؟",
|
||||
"I maintain two separate to-do lists for this project, although the priority has yet to be established.": "برای این پروژه دو فهرست کار جداگانه دارم، هرچند هنوز ترتیب اولویتها نهایی نشده است.",
|
||||
"The first list is about enhancing support for DualShock4 and DualSense controllers:": "فهرست اول مربوط به بهبود پشتیبانی از کنترلرهای DualShock4 و DualSense است:",
|
||||
"Implement calibration of L2/R2 triggers.": "افزودن امکان کالیبره کردن دکمههای L2/R2.",
|
||||
"Improve detection of clones, particularly beneficial for those seeking to purchase used controllers with assurance of authenticity.": "بهبود شناسایی کنترلرهای غیراصل، مفید برای کسانی که قصد خرید کنترلر کارکرده دارند.",
|
||||
"Add support for recalibrating IMUs.": "افزودن پشتیبانی از بازکالیبراسیون حسگرهای حرکتی (IMU).",
|
||||
"Additionally, explore the possibility of reviving non-functioning DualShock controllers (further discussion available on Discord for interested parties).": "بررسی امکان احیای کنترلرهای ازکارافتاده DualShock (بحث بیشتر در Discord در دسترس است).",
|
||||
"The second list contains new controllers I aim to support:": "فهرست دوم شامل کنترلرهایی است که قصد پشتیبانی از آنها را دارم:",
|
||||
"DualShock 3": "DualShock 3",
|
||||
"XBox Controllers": "کنترلرهای XBox",
|
||||
"Each of these tasks presents both immense interest and significant time investment. To provide context, supporting a new controller typically demands 6-12 months of full-time research, alongside a stroke of good fortune.": "هر یک از این وظایف به زمان و علاقهی زیادی نیاز دارد. معمولاً پشتیبانی از یک کنترلر جدید بین ۶ تا ۱۲ ماه تحقیق تماموقت زمان میبرد.",
|
||||
"No.": "خیر.",
|
||||
"Does this software resolve stickdrift?": "آیا این نرمافزار مشکل استیک دریفت را برطرف میکند؟",
|
||||
"Stickdrift is caused by a physical defect; namely dirt, worn potentiometer or in some cases a worn spring.": "استیکدریفت معمولاً به دلیل ایراد سختافزاری مثل آلودگی، فرسودگی پتانسیومتر یا فنر داخلی است.",
|
||||
"After range calibration, joysticks always go in corners.": "بعد از کالیبراسیون دامنه، جویاستیکها همیشه به گوشهها میچسبند.",
|
||||
"This issue happens because you have clicked \"Done\" immediately after starting a range calibration.": "این اتفاق زمانی رخ میدهد که بلافاصله پس از شروع کالیبراسیون روی «انجام شد» کلیک میکنید.",
|
||||
"Please read the instructions.": "لطفاً دستورالعملها را با دقت بخوانید.",
|
||||
"You have to rotate the joysticks before you press \"Done\".": "باید قبل از فشردن دکمهی «انجام شد»، جویاستیکها را بچرخانید.",
|
||||
"Make sure to touch the edges of the joystick frame and rotate slowly, preferably in each direction - clockwise and anti-clockwise.": "مطمئن شوید جویاستیک را تا لبههای قاب حرکت داده و در هر دو جهت ساعتگرد و پادساعتگرد بهآرامی بچرخانید.",
|
||||
"Only after you have done that, you click on \"Done\".": "فقط پس از انجام کامل این مراحل، روی «انجام شد» کلیک کنید.",
|
||||
"I love this service, it helped me! How can I contribute?": "از این سرویس خیلی راضیام! چطور میتونم کمک کنم؟",
|
||||
"I'm glad to hear that you found this helpful! If you're interested in contributing, here are a few ways you can help me:": "خوشحالم که این ابزار برات مفید بوده! اگر دوست داری کمک کنی، چند روش ساده هست:",
|
||||
"Consider making a": "میتونی با",
|
||||
"donation": "حمایت مالی",
|
||||
"to support my late-night caffeine-fueled reverse-engineering efforts.": "از تلاشهای شبانهروزم برای توسعه این ابزار حمایت کنی.",
|
||||
"Ship me a controller you would love to add (send me an email for organization).": "یک کنترلر که دوست داری به لیست پشتیبانی اضافه بشه برای من بفرست (برای هماهنگی ایمیل بزن).",
|
||||
"Translate this website in your language": "این وبسایت را به زبان خودت ترجمه کن",
|
||||
", to help more people like you!": "تا افراد بیشتری بتوانند از آن استفاده کنند!",
|
||||
"(DualSense & DualSense Edge) Will updating the firmware reset calibration?": "",
|
||||
"(DualSense Edge) Is the calibration stored on the controller or the modules?": "",
|
||||
"<strong>Average circularity error:</strong> smaller is not always better! Aim for 7-9 %.": "",
|
||||
"A reboot is needed to continue using this DualSense Edge. Please disconnect and reconnect your controller.": "",
|
||||
"A sample test was done with 30 dualsense edge modules, and the results showed that the inner quartile range (IQR) is 8.3% and 9.0%, with an average of 8.6%. This goes to show that stock controllers by default have a relatively high range, and the rule of thumb is to follow factory calibration.": "",
|
||||
"Adaptive Trigger": "",
|
||||
"Adaptive triggers are only supported on DualSense controllers": "",
|
||||
"Add test": "",
|
||||
"After they have been replaced, this utility can be used to calibrate the controller to work with the new joysticks.": "",
|
||||
"Aim for a circularity error of around 7-9 % for the best playing experience.": "",
|
||||
"Battery level is low. Tests may fail due to the controller being in power saving mode.": "",
|
||||
"Be gentle to avoid damage.": "",
|
||||
"Buttons": "",
|
||||
"Calibrating without replacing the joysticks may help temporarily, but it may also make the problem worse, with no way to undo it.": "",
|
||||
"Calibration History": "",
|
||||
"Can I overwrite a (permanent) calibration?": "",
|
||||
"Can I restore a previous calibration?": "",
|
||||
"Cannot copy text to the clipboard:": "",
|
||||
"Cannot read module barcodes": "",
|
||||
"Center": "",
|
||||
"Circularity": "",
|
||||
"Clear All": "",
|
||||
"Controller does not support adaptive trigger control": "",
|
||||
"Current": "",
|
||||
"Delete": "",
|
||||
"Delete all calibration history for this controller? This cannot be undone.": "",
|
||||
"Delete this calibration entry?": "",
|
||||
"Don't show again": "",
|
||||
"Drift is caused by mechanical parts in the joystick being worn out, and they need to be replaced to fix the drift.": "",
|
||||
"Fail": "",
|
||||
"Failed": "",
|
||||
"Failed to connect to device": "",
|
||||
"Failed to disable adaptive trigger": "",
|
||||
"Failed to set speaker tone": "",
|
||||
"Failed to set vibration": "",
|
||||
"Feel for vibration in the controller.": "",
|
||||
"Finetuning is only available for DualSense and DualSense Edge.": "",
|
||||
"Firefox is supported with the WebHID extension installed.": "",
|
||||
"God of War 20th Anniversary": "",
|
||||
"Haptic Vibration": "",
|
||||
"Headphone Jack": "",
|
||||
"Housing": "",
|
||||
"How do I use the finetuning feature?": "",
|
||||
"If you don't have a battery connected or the connected battery is empty, AND your cable disconnects during saving the calibration, then your controller has a high chance of being bricked.": "",
|
||||
"If you have not clicked the green button \"Save changes permanently\", then unplugging the controller will reset to the previously saved calibration. It is recommended you test your calibration before saving.": "",
|
||||
"If you have saved the changes permanently, you can reset the changes only if you are using a DualSense or DualSense Edge. You can click on the grey button \"Restore Calibration\" to go back to one of the previous calibrations that was saved on the controller. Known issue: You may need to reboot your controller first in order for previous calibrations to show up.": "",
|
||||
"Image 1": "",
|
||||
"Images": "",
|
||||
"In most cases, calibrating your joysticks that have prior drift issues may result in a worse and unpredictable calibration.": "",
|
||||
"Increase non-circularity": "",
|
||||
"Instructions": "",
|
||||
"It appears the latest joystick calibration has not been saved.": "",
|
||||
"Keep rotating the sticks even if you see no progress!": "",
|
||||
"Last connected": "",
|
||||
"Learn more...": "",
|
||||
"Lights": "",
|
||||
"Listen for a tone from the controller speaker.": "",
|
||||
"Long-press [circle] to skip ahead.": "",
|
||||
"Microphone": "",
|
||||
"Microphone Level:": "",
|
||||
"No controller connected": "",
|
||||
"No saved calibrations found.": "",
|
||||
"No tests completed yet.": "",
|
||||
"Not shown in the video: You can now also increase the range in each direction uniformly by using the cross in the top right and moving the slider up, which may speed up finetuning. Make sure to rotate the joystick first, otherwise the button cannot be pressed.": "",
|
||||
"Not tested": "",
|
||||
"Only official controllers are supported, no third-party or \"fake\" controllers.": "",
|
||||
"Option 1": "",
|
||||
"Option 2": "",
|
||||
"Pass": "",
|
||||
"Passed": "",
|
||||
"PlayStation Virtual Reality 2": "",
|
||||
"Please connect a DualShock 4, a DualSense, DualSense Edge or VR2 controller to your computer and press Connect.": "",
|
||||
"Please use a web browser with WebHID support (e.g. Google Chrome or Microsoft Edge) on a PC or Mac.": "",
|
||||
"Plug in headphones to the 3.5mm jack": "",
|
||||
"Press L2 and R2 triggers to feel the trigger resistance.": "",
|
||||
"Press [circle] to close, or [square] to start over": "",
|
||||
"Press [square] to Pass, [cross] to Fail, or [circle] to skip.": "",
|
||||
"Press [square] to begin or [circle] to close": "",
|
||||
"Press [triangle] to go back.": "",
|
||||
"Press each button until they turn green.": "",
|
||||
"Progress": "",
|
||||
"Quick Test": "",
|
||||
"Quick calibrate": "",
|
||||
"Range calibration appears to have failed. Please try again and make sure you rotate the sticks.": "",
|
||||
"Repeat": "",
|
||||
"Restart": "",
|
||||
"Restore": "",
|
||||
"Restore calibration": "",
|
||||
"Rotate the sticks slowly at least 2 times in one direction and 2 times in the other direction to cover the whole range.": "",
|
||||
"Run through these tests to verify your controller's functionality.": "",
|
||||
"Saving calibration is locked by default on DualSense Edge joystick modules. A hardware mod is required to save the calibration permanently. The calibration is saved on the modules themselves, so you have to perform the mod twice: once for each module. You would need to bridge two points on the PCB with enamelled wire. There are multiple methods, I personally recommend using either of these two locations to solder the wire to. See images below. Ensure the wire is thin enough so that the shell is closed properly. Make sure you don't short the wire to ground through the letters near the bottom joint.": "",
|
||||
"Sony DualShock 4": "",
|
||||
"Sony controllers come from the factory calibrated to have an average circularity error of nearly 10 %, and this is now what games expect. Too perfect circularity can make movements and aim feel stiff and unresponsive in some games.": "",
|
||||
"Speaker": "",
|
||||
"Step size": "",
|
||||
"Test Speaker": "",
|
||||
"Test Summary": "",
|
||||
"Test all buttons, or long-press [square] to Pass and [cross] to Fail, or [circle] to skip.": "",
|
||||
"The <b>Done</b> button will unlock after at most 15 seconds. If you press <b>Done</b> without rotating the sticks, the calibration will be incomplete and you will need to repeat it.": "",
|
||||
"The calibration is stored on each module individually. It is carried over if you place the modules in a different DualSense Edge. Likewise, if you place a different set of modules in your DualSense Edge, you will get a different calibration that is tied to those new modules.": "",
|
||||
"The calibration was restored successfully! Remember to save the changes in order not to loose them when the controller is rebooted.": "",
|
||||
"The device appears to be a clone. All calibration functionality is disabled.": "",
|
||||
"The finetuning and quick test menus are only accessible for DualSense and DualSense Edge.": "",
|
||||
"The item has been copied to the clipboard.": "",
|
||||
"The website supports the following official controllers:": "",
|
||||
"These previous calibrations are stored locally in your browser's storage. Meaning you can only restore calibrations using the same computer and browser that you used to calibrate it with, and deleting the cache or using Incognito will make any previous calibration irrecoverable.": "",
|
||||
"This controller has unsaved changes that will be lost when the controller is rebooted.": "",
|
||||
"This software is not intended to fix stickdrift and will <b>not</b> fix stickdrift on its own if you already experience that.": "",
|
||||
"This test checks all controller buttons by requiring you to press each button up to three times.": "",
|
||||
"This test checks the headphone jack functionality.": "",
|
||||
"This test checks the reliability of the USB port.": "",
|
||||
"This test will cycle through red, green, and blue colors on the controller lightbar, animate the player indicator lights, and flash the mute button.": "",
|
||||
"This test will enable heavy resistance on both L2 and R2 triggers.": "",
|
||||
"This utility cannot fix stick drift.": "",
|
||||
"This video from V2.16 shows how to use the finetuning menu.": "",
|
||||
"USB Connector": "",
|
||||
"Unsupported browser.": "",
|
||||
"Use expert mode": "",
|
||||
"Use four-step calibration": "",
|
||||
"Use normal mode": "",
|
||||
"Use quick calibration": "",
|
||||
"Using this utility on a phone or tablet is not supported.": "",
|
||||
"Values": "",
|
||||
"Watch the controller lights change colors, the player lights animate, and the mute button flash.": "",
|
||||
"We recommend a circularity between 7% and 9%. The reason for this is to mimic a stock controllers calibration. However, symmetrical overshoot is more important and if you need to deviate from this range to achieve better symmetry, that is fine too.": "",
|
||||
"What are the risks of using the calibration?": "",
|
||||
"What circularity percentage to aim for when calibrating and finetuning.": "",
|
||||
"What the software will help with, is ensuring new joysticks will function properly after replacing the old broken joysticks that drift. This step involves opening up the controller and soldering new potentiometers or an entire new joystick.": "",
|
||||
"When calibrating, there is no risk. However, if your controller disconnects during the split second that you save a calibration, then you have a chance of bricking your controller. Make sure your battery has enough charge and is plugged into the controller, and the USB cable is securely connected. This prevents your controller from being bricked if the USB cable accidentally disconnects.": "",
|
||||
"Which controllers does DualShock Calibration GUI support?": "",
|
||||
"While holding the stick to be adjusted straight up/down/left/right, make adjustments until you see lightblue sectors in all four directions after circling the stick both left and right. Then use the": "",
|
||||
"Wiggle the USB cable to see if the controller disconnects.": "",
|
||||
"Yes. Simply do another calibration, and click the green button to save permanently.": "",
|
||||
"You should save your changes, or reboot the controller to revert back to the previous state.": "",
|
||||
"failed": "",
|
||||
"hide": "",
|
||||
"passed": "",
|
||||
"serial number": "",
|
||||
"skipped": "",
|
||||
"tests completed": "",
|
||||
"to increase the non-circularity.": "",
|
||||
"": ""
|
||||
}
|
||||
435
lang/fr_fr.json
@@ -1,119 +1,364 @@
|
||||
{
|
||||
".authorMsg": "- Traduction Française par <a href='https://github.com/Sadenki'>Cyrille Pugeault</a>",
|
||||
"DualShock Calibration GUI": "Interface de calibration DualShock",
|
||||
"Unsupported browser. Please use a web browser with WebHID support (e.g. Chrome).": "Navigateur incompatible. Merci d'utiliser un navigateur doté du support WebHID (e.x : Chrome)",
|
||||
"Connect a DualShock 4 or a DualSense controller to your computer and press Connect.": "Connecter une manette DualShock 4 ou DualSence à votre ordinateur et Appuyez sur Connecter",
|
||||
".authorMsg": "- Traduction française par <a href='https://github.com/Sadenki'>Cyrille Pugeault</a> & <a href='https://github.com/TyduSubak'>Alexandre Pugeault</a>.",
|
||||
"DualShock Calibration GUI": "Interface de calibrage DualShock",
|
||||
"Connect": "Connecter",
|
||||
"Connected to:": "Connecté à:",
|
||||
"Disconnect": "Déconnecter",
|
||||
"Firmware Info": "Information sur le Firmware",
|
||||
"Calibrate stick center": "Calibration centrage joystick",
|
||||
"Calibrate stick range (permanent)": "Calibration de la portée du joystick (permanente)",
|
||||
"Calibrate stick range (temporary)": "Calibration de la portée du joystick (temporaire)",
|
||||
"Reset controller": "Réinitialisé la manette",
|
||||
"Sections below are not useful, just some debug infos or manual commands": "La sections plus bas n'est pas utile, juste quelques informations de débug ou commande manuel",
|
||||
"NVS Status": "Status NVS",
|
||||
"Unknown": "Inconnue",
|
||||
"BD Addr": "Adresse BD",
|
||||
"Debug buttons": "Bouton Debug",
|
||||
"Query NVS status": "requête status NVS",
|
||||
"NVS unlock": "Débloquer NVS",
|
||||
"NVS lock": "Bloquer NVS",
|
||||
"Get BDAddr": "Obtenir BDAddr",
|
||||
"Fast calibrate stick center (OLD)": "Calibration rapide pour centrer le joystick (Ancienne méthode)",
|
||||
"Stick center calibration": "Calibration pour centrer le joystick",
|
||||
"Welcome": "Bienvenu",
|
||||
"Calibrate stick center": "Calibrer le centrage du joystick",
|
||||
"Calibrate stick range": "Calibrer la portée du joystick",
|
||||
"Sections below are not useful, just some debug infos or manual commands": "Les sections plus bas ne sont pas utiles, juste quelques informations de débug ou des commandes manuelles",
|
||||
"NVS Status": "Status du NVS",
|
||||
"Unknown": "Inconnu",
|
||||
"Query NVS status": "Status de la requête NVS",
|
||||
"NVS unlock": "Déverrouiller le NVS",
|
||||
"NVS lock": "Verrouiller le NVS",
|
||||
"Stick center calibration": "Calibrage du centrage du joystick",
|
||||
"Welcome": "Bienvenue",
|
||||
"Step 1": "Étape 1",
|
||||
"Step 2": "Étape 2",
|
||||
"Step 3": "Étape 3",
|
||||
"Step 4": "Étape 4",
|
||||
"Completed": "Terminé",
|
||||
"Welcome to the stick center-calibration wizard!": "Bienvenu dans l'assistant de calibration pour centrer du joystick",
|
||||
"This tool will guide you in re-centering the analog sticks of your controller. It consists in four steps: you will be asked to move both sticks in a direction and release them.": "Cette outil va vous guider afin de centrer à nouveau les joysticks de votre manette. Cela consiste en quatres étapes: nous allons vous demander de bouger les deux joysticks dans une direction puis de les relachers",
|
||||
"Please be aware that, <i>once the calibration is running, it cannot be canceled</i>. Do not close this page or disconnect your controller until is completed.": "Faite attention : <i>une fois le processus lancer, vous ne pouvez pas l'annuler</i>. Ne pas fermer cette page ou déconnecter la manette jusqu'à la fin du processus.",
|
||||
"Calibration storage": "Mémorisation des données de calibration",
|
||||
"By default the calibration is only saved in a volatile storage, so that if you (or this tool) mess something up, a reset of the controller is enough to make it work again.": "Par défault la calibration est sauvegardé dans des données volatile, de tel sorte que si vous (ou cet outil) venez à dégrader une fonction, une simple remise à zéro de la manette sera suffisant pour récuperer un fonctionnement normal.",
|
||||
"If you wish to store the calibration permanently in the controller, tick the checkbox below:": "Si vous souhaitez enregistrer la calibration du joystick de manière permanente, cocher la case plus bas:",
|
||||
"Write changes permanently in the controller": "Enregistrer de manière permanente les modifications dans la manette",
|
||||
"<small>Warning: <font color=\"red\">Do not store the calibration permanently if the controller battery is low or disconnected. It will damage your controller.</font></small>": "<small>Attention: <font color='red'>N'effectuez pas la calibration de manière permanente si la batterie de votre manette est faible ou déconnecté. Cela entrainerai des dommages irréversible sur votre manette.</font></small>",
|
||||
"Press <b>Start</b> to begin calibration.": "Appuyez sur <b>Démarrer</b> pour commencer le processus de calibration",
|
||||
"Please move both sticks to the <b>top-left corner</b> and release them.": "Merci de bouger les deux joysticks <b>en haut à gauche</b> puis relachez.",
|
||||
"When the sticks are back in the center, press <b>Continue</b>.": "Quand les deux joysticks sont revenue au centre, Appuyez sur <b>Continuer</b>",
|
||||
"Please move both sticks to the <b>top-right corner</b> and release them.": "Merci de bouger les deux joysticks <b>en haut à droite</b> puis relachez.",
|
||||
"Please move both sticks to the <b>bottom-left corner</b> and release them.": "Merci de bouger les deux joysticks <b>en bas à gauche</b> puis relachez.",
|
||||
"Please move both sticks to the <b>bottom-right corner</b> and release them.": "Merci de bouger les deux joysticks<b>en bas à droite</b> puis relachez.",
|
||||
"Calibration completed successfully!": "Calibration réussit avec succès!",
|
||||
"Welcome to the stick center-calibration wizard!": "Bienvenue dans l'assistant de calibrage de centrage du joystick !",
|
||||
"This tool will guide you in re-centering the analog sticks of your controller. It consists of four steps: you will be asked to move both sticks in a direction and release them.": "Cet outil va vous guider afin de recentrer les joysticks analogiques de votre manette. Il consiste en quatre étapes : il vous sera demandé de bouger les deux joysticks dans une direction puis de les relâcher.",
|
||||
"Please be aware that, <i>once the calibration is running, it cannot be canceled</i>. Do not close this page or disconnect your controller until it is completed.": "Veuillez noter <i>qu'une fois le calibrage lancé, il n'est pas possible de l'annuler</i>. Ne fermez pas cette page et ne déconnectez pas la manette tant que le calibrage n'est pas terminé.",
|
||||
"Press <b>Start</b> to begin calibration.": "Appuyez sur <b>Démarrer</b> pour commencer le calibrage.",
|
||||
"Please move both sticks to the <b>top-left corner</b> and release them.": "Veuillez déplacer les deux joysticks <b>en haut à gauche</b> puis relâchez-les.",
|
||||
"When the sticks are back in the center, press <b>Continue</b>.": "Une fois les deux joysticks recentrés, appuyez sur <b>Continuer</b>.",
|
||||
"Please move both sticks to the <b>top-right corner</b> and release them.": "Veuillez déplacer les deux joysticks <b>en haut à droite</b> puis relâchez-les.",
|
||||
"Please move both sticks to the <b>bottom-left corner</b> and release them.": "Veuillez déplacer les deux joysticks <b>en bas à gauche</b> puis relâchez-les.",
|
||||
"Please move both sticks to the <b>bottom-right corner</b> and release them.": "Veuillez déplacer les deux joysticks <b>en bas à droite</b> puis relâchez-les.",
|
||||
"Calibration completed successfully!": "Calibrage terminé avec succès !",
|
||||
"Next": "Suivant",
|
||||
"Recentering the controller sticks. ": "Recentrer les joysticks de la manette. ",
|
||||
"Please do not close this window and do not disconnect your controller. ": "Merci de ne pas fermer cette fenêtre ou déconnecter votre manette. ",
|
||||
"Range calibration": "Calibration de la portée du joystick ",
|
||||
"<b>The controller is now sampling data!</b>": "<b>La manette est maintenant en train d'échantillonner les données!</b>",
|
||||
"Rotate the sticks slowly to cover the whole range. Press \"Done\" when completed.": "Faite tourner doucement les joysticks afin d'atteindre la portée maximal. Appuyez sur \"Fait\" quand vous avez terminé.",
|
||||
"Done": "Fait",
|
||||
"Hi, thank you for using this software.": "Au revoir, merci d'avoir utilisé cet outil.",
|
||||
"If you're finding it helpful and you want to support my efforts, feel free to": "Si vous avez trouvé cette outil pratique et que vous souhaitez m'apporter du soutien dans mon travail, soyez libre de",
|
||||
"buy me a coffee": "m'offrir un café",
|
||||
"Recentering the controller sticks.": "Recentrement des joysticks de la manette en cours.",
|
||||
"Please do not close this window and do not disconnect your controller. ": "Veuillez ne pas fermer cette fenêtre et ne déconnectez pas votre manette. ",
|
||||
"Range calibration": "Calibrage de la portée du joystick",
|
||||
"The controller is now sampling data!": "La manette est maintenant en train d'échantillonner les données !",
|
||||
"Done": "Terminer",
|
||||
"Hi, thank you for using this software.": "Salut, merci d'avoir utilisé cet outil.",
|
||||
"If you're finding it helpful and you want to support my efforts, feel free to": "Si vous le trouvez utile et que vous souhaitez soutenir mon travail, n'hésitez pas à",
|
||||
"buy me a coffee": "m'offrir un café ",
|
||||
"! :)": "! :)",
|
||||
"Do you have any suggestion or issue? Drop me a message via email or discord.": "Vous avez des suggéstions ou un problème? laissez moi un message par email ou sur discord.",
|
||||
"Cheers!": "A la prochaine!",
|
||||
"Support this project": "Apporter du soutien à ce projet",
|
||||
|
||||
"Do you have any suggestion or issue? Drop me a message via email or discord.": "Vous avez des suggestions ou un problème ? Laissez-moi un message par e-mail ou sur Discord.",
|
||||
"Cheers!": "À la prochaine !",
|
||||
"Support this project": "Soutenir ce projet",
|
||||
"unknown": "inconnue",
|
||||
"original": "original",
|
||||
"clone": "clone",
|
||||
"locked": "vérouillé",
|
||||
"unlocked": "dévérouillé",
|
||||
"original": "original",
|
||||
"clone": "clone",
|
||||
"locked": "verrouillé",
|
||||
"unlocked": "déverrouillé",
|
||||
"error": "erreur",
|
||||
"Build Date:": "Date Build:",
|
||||
"HW Version:": "Version HW:",
|
||||
"SW Version:": "Version SW:",
|
||||
"Device Type:": "Device Device:",
|
||||
"Firmware Type:": "Type Firmware:",
|
||||
"SW Series:": "Serie SW:",
|
||||
"HW Info:": "Info HW:",
|
||||
"SW Version:": "Version SW:",
|
||||
"UPD Version:": "Version UPD:",
|
||||
"FW Version1:": "Version FW1:",
|
||||
"FW Version2:": "Version FW2:",
|
||||
"FW Version3:": "Version FW3:",
|
||||
|
||||
"Range calibration completed": "Calibration de la portée réussit",
|
||||
"Range calibration failed: ": "Echec de la calibration de la portée: ",
|
||||
"Cannot unlock NVS": "Impossible de dévérouiller NVS",
|
||||
"Cannot relock NVS": "Impossible de vérouiller NVS",
|
||||
"Error 1": "Erreur 1",
|
||||
"Error 2": "Erreur 2",
|
||||
"Error 3": "Erreur 3",
|
||||
"Stick calibration failed: ": "Echec de la calibration du centrage des joysticks: ",
|
||||
"Stick calibration completed": "Calibration du centrage des joysticks terminé",
|
||||
"NVS Lock failed: ": "Echec du vérouillage NVS: ",
|
||||
"NVS Unlock failed: ": "Echec du dévérouillage NVS: ",
|
||||
"Please connect only one controller at time.": "Merci de ne connecter qu'une manette à la fois.",
|
||||
"Build Date": "Date de build",
|
||||
"HW Version": "Version matérielle",
|
||||
"SW Version": "Version logicielle",
|
||||
"Device Type": "Type d'appareil",
|
||||
"Range calibration completed": "Calibrage de la portée terminé",
|
||||
"Range calibration failed": "Échec du calibrage de la portée",
|
||||
"Stick calibration failed": "Échec du calibrage des joysticks",
|
||||
"Stick calibration completed": "Calibrage des joysticks terminé",
|
||||
"NVS Lock failed": "Échec du verrouillage du NVS",
|
||||
"NVS Unlock failed": "Échec du déverrouillage du NVS",
|
||||
"Please connect only one controller at time.": "Veuillez ne connecter qu'une seule manette à la fois.",
|
||||
"Sony DualShock 4 V1": "Sony DualShock 4 V1",
|
||||
"Sony DualShock 4 V2": "Sony DualShock 4 V2",
|
||||
"Sony DualSense": "Sony DualSense",
|
||||
"Sony DualSense Edge": "Sony DualSense Edge",
|
||||
"Connected invalid device: ": "Connecté à un appareil non valide: ",
|
||||
"Calibration of the DualSense Edge is not currently supported.": "La calibration de la manette DualSense Edge n'est pas actuellement supportée",
|
||||
"The device appears to be a DS4 clone. All functionalities are disabled.": "Cet appareil semble être une contre-façon. Toutes les fonctionnalités sont désactivé",
|
||||
"Error: ": "Erreur: ",
|
||||
"My handle on discord is: the_al": "Mon ID sur discord est: the_al",
|
||||
"Connected invalid device": "Appareil non valide connecté",
|
||||
"Error": "Erreur",
|
||||
"Initializing...": "Initialisation...",
|
||||
"Storing calibration...": "Sauvegarde de la calibration...",
|
||||
"Storing calibration...": "Sauvegarde du calibrage...",
|
||||
"Sampling...": "Échantillonnage...",
|
||||
"Calibration in progress": "Calibration en cours",
|
||||
"Start": "Commencer",
|
||||
"Done": "Terminer",
|
||||
"Calibration in progress": "Calibrage en cours",
|
||||
"Start": "Démarrer",
|
||||
"Continue": "Continuer",
|
||||
"You can check the calibration with the": "Vous pouvez vérifier la calibration avec le:",
|
||||
"Have a nice day :)": "On vous souhaite une bonne journée :)",
|
||||
"Welcome to the Calibration GUI": "Bienvenu dans l'assistant de calibration",
|
||||
"Just few things to know before you can start:": "Juste quelques petites information avant que nous commençons:",
|
||||
"Have a nice day :)": "Bonne journée :)",
|
||||
"Welcome to the Calibration GUI": "Bienvenue dans l'interface de calibrage",
|
||||
"Just few things to know before you can start:": "Quelques informations à savoir avant de commencer :",
|
||||
"This website is not affiliated with Sony, PlayStation & co.": "Ce site n'est pas affilié avec Sony, PlayStation & co.",
|
||||
"This service is provided without warranty. Use at your own risk.": "Ce service est proposé sans garantie, à utiliser à vos risque et péril. ",
|
||||
"Keep the internal battery of the controller connected and ensure it is well charged. If the battery dies during operations, the controller will be damaged and rendered unusable.": "Tieni sempre la batteria interna del controller collegata, e assicurati che sia carica. Se il controller si spegne durante le operazioni, diventerà inutilizzabile.",
|
||||
"Before doing the permanent calibration, try the temporary one to ensure that everything is working well.": "Avant de faire des modifications définitive, essayer la méthode temporaire afin de vous assurer que tout fonctionne comme il faut!",
|
||||
"This service is provided without warranty. Use at your own risk.": "Ce service est proposé sans garantie. À utiliser à vos risques et périls.",
|
||||
"Keep the internal battery of the controller connected and ensure it is well charged. If the battery dies during operations, the controller will be damaged and rendered unusable.": "Gardez la batterie interne de la manette connectée et assurez-vous qu'elle soit bien chargée. Si la batterie se décharge pendant le processus, la manette sera endommagée et rendue inutilisable.",
|
||||
"Before doing the permanent calibration, try the temporary one to ensure that everything is working well.": "Avant de procéder à un calibrage permanent, essayez d'abord le temporaire afin de vous assurer que tout fonctionne correctement.",
|
||||
"Understood": "Compris",
|
||||
"Version": "Version",
|
||||
"Frequently Asked Questions": "Foire Aux Questions",
|
||||
"Close": "Fermer",
|
||||
"Welcome to the F.A.Q. section! Below, you'll find answers to some of the most commonly asked questions about this website. If you have any other inquiries or need further assistance, feel free to reach out to me directly. Your feedback and questions are always welcome!": "Bienvenue dans la section FAQ ! Vous trouverez ci-dessous les réponses aux questions les plus fréquemment posées sur ce site. Si vous avez d'autres questions ou besoin d'aide, n'hésitez pas à me contacter directement. Vos commentaires et questions sont toujours les bienvenus !",
|
||||
"How does it work?": "Comment ça fonctionne ?",
|
||||
"Behind the scenes, this website is the culmination of one year of dedicated effort in reverse-engineering DualShock controllers for fun/hobby from a random guy on the internet.": "En coulisses, ce site est le fruit d'une année d'efforts dédiés au rétro-ingénierie des manettes DualShock par un passionné anonyme sur Internet.",
|
||||
"Through": "Grâce à",
|
||||
"this research": "cette recherche",
|
||||
", it was discovered that there exist some undocumented commands on DualShock controllers that can be sent via USB and are used during factory assembly process. If these commands are sent, the controller starts the recalibration of analog sticks.": ", il a été découvert qu'il existe des commandes non documentées sur les manettes DualShock pouvant être envoyées via USB, utilisées lors du processus d'assemblage en usine. L'envoi de ces commandes déclenche la recalibration des sticks analogiques.",
|
||||
"While the primary focus of this research wasn't initially centered on recalibration, it became apparent that a service offering this capability could greatly benefit numerous individuals. And thus, here we are.": "Bien que le but principal de cette recherche n'était pas initialement axé sur la recalibration, il est devenu évident qu'un tel service pourrait bénéficier à de nombreuses personnes. Et nous y voilà.",
|
||||
"Is this an officially endorsed service?": "S'agit-il d'un service officiellement approuvé ?",
|
||||
"No, this service is simply a creation by a DualShock enthusiast.": "Non, ce service est simplement une création d'un passionné de DualShock.",
|
||||
"Does this website detect if a controller is a clone?": "Ce site détecte-t-il si une manette est un clone ?",
|
||||
"Yes, only DualShock4 at the moment. This happened because I accidentally purchased some clones, spent time identifying the differences and added this functionality to prevent future deception.": "Oui, uniquement la DualShock 4 pour le moment. Cela est arrivé parce que j'ai accidentellement acheté des clones, j'ai passé du temps à identifier les différences et j'ai ajouté cette fonctionnalité pour éviter de futures déceptions.",
|
||||
"Unfortunately, the clones cannot be calibrated anyway, because they only clone the behavior of a DualShock4 during normal gameplay, not all the undocumented functionalities.": "Malheureusement, les clones ne peuvent pas être calibrés, car ils ne reproduisent que le comportement d'une DualShock 4 en jeu normal, pas toutes les fonctionnalités non documentées.",
|
||||
"If you want to extend this detection functionality to DualSense, please ship me a fake DualSense and you'll see it in few weeks.": "Si vous souhaitez étendre cette détection à la DualSense, envoyez-moi une fausse DualSense et vous la verrez prise en charge en quelques semaines.",
|
||||
"What development is in plan?": "Quels développements sont prévus ?",
|
||||
"I maintain two separate to-do lists for this project, although the priority has yet to be established.": "Je maintiens deux listes de tâches séparées pour ce projet, bien que la priorité n'ait pas encore été établie.",
|
||||
"The first list is about enhancing support for DualShock4 and DualSense controllers:": "La première liste concerne l'amélioration du support pour les manettes DualShock 4 et DualSense :",
|
||||
"Implement calibration of L2/R2 triggers.": "Mettre en œuvre la calibration des gâchettes L2/R2.",
|
||||
"Improve detection of clones, particularly beneficial for those seeking to purchase used controllers with assurance of authenticity.": "Améliorer la détection des clones, particulièrement utile pour ceux qui souhaitent acheter des manettes d'occasion avec une assurance d'authenticité.",
|
||||
"Add support for recalibrating IMUs.": "Ajouter la prise en charge de la recalibration des IMU.",
|
||||
"Additionally, explore the possibility of reviving non-functioning DualShock controllers (further discussion available on Discord for interested parties).": "Explorer également la possibilité de réanimer des manettes DualShock non fonctionnelles (discussion disponible sur Discord pour les personnes intéressées).",
|
||||
"The second list contains new controllers I aim to support:": "La deuxième liste contient les nouvelles manettes que je souhaite prendre en charge :",
|
||||
"DualShock 3": "DualShock 3",
|
||||
"XBox Controllers": "Manettes Xbox",
|
||||
"Each of these tasks presents both immense interest and significant time investment. To provide context, supporting a new controller typically demands 6-12 months of full-time research, alongside a stroke of good fortune.": "Chacune de ces tâches représente un immense intérêt et un investissement de temps considérable. Pour donner un contexte, la prise en charge d'une nouvelle manette nécessite généralement 6 à 12 mois de recherche à plein temps, avec une bonne dose de chance.",
|
||||
"I love this service, it helped me! How can I contribute?": "J'adore ce service, il m'a aidé ! Comment puis-je contribuer ?",
|
||||
"I'm glad to hear that you found this helpful! If you're interested in contributing, here are a few ways you can help me:": "Je suis ravi que vous l'ayez trouvé utile ! Si vous souhaitez contribuer, voici quelques façons de m'aider :",
|
||||
"Consider making a": "Envisagez de faire un",
|
||||
"donation": "don",
|
||||
"to support my late-night caffeine-fueled reverse-engineering efforts.": "pour soutenir mes efforts de rétro-ingénierie nocturnes alimentés par la caféine.",
|
||||
"Ship me a controller you would love to add (send me an email for organization).": "Envoyez-moi une manette que vous aimeriez voir prise en charge (contactez-moi par e-mail pour l'organisation).",
|
||||
"Translate this website in your language": "Traduisez ce site dans votre langue",
|
||||
", to help more people like you!": ", pour aider plus de personnes comme vous !",
|
||||
"This website uses analytics to improve the service.": "Ce site utilise des outils d'analyse pour améliorer le service.",
|
||||
"Board Model": "Modèle de carte",
|
||||
"This DualSense controller has outdated firmware.": "Cette manette DualSense a un firmware obsolète.",
|
||||
"Please update the firmware and try again.": "Veuillez mettre à jour le firmware et réessayer.",
|
||||
"Joystick Info": "Infos Joystick",
|
||||
"Check circularity": "Vérifier la circularité",
|
||||
"(beta)": "(bêta)",
|
||||
"10x zoom": "Zoom ×10",
|
||||
"30th Anniversary": "30ème Anniversaire",
|
||||
"<b>Externally</b>: by applying +1.8V directly to the visible test point without opening the controller.": "<b>Extérieurement</b> : en appliquant +1,8V directement sur le point de test visible sans ouvrir la manette.",
|
||||
"<b>Internally</b>: by soldering a wire from a +1.8V source to the write-protect TP.": "<b>Intérieurement</b> : en soudant un fil depuis une source +1,8V au point de test de protection en écriture.",
|
||||
"<strong>Average circularity error:</strong> smaller is not always better! Aim for 7-9 %.": "<strong>Erreur de circularité moyenne :</strong> plus petit n'est pas toujours mieux ! Visez 7-9 %.",
|
||||
"A reboot is needed to continue using this DualSense Edge. Please disconnect and reconnect your controller.": "Un redémarrage est nécessaire pour continuer à utiliser cette DualSense Edge. Veuillez déconnecter et reconnecter votre manette.",
|
||||
"Adaptive Trigger": "Gâchette adaptative",
|
||||
"Adaptive triggers are only supported on DualSense controllers": "Les gâchettes adaptatives ne sont prises en charge que sur les manettes DualSense",
|
||||
"Add test": "Ajouter un test",
|
||||
"After range calibration, joysticks always go in corners.": "Après la calibration de portée, les joysticks vont toujours dans les coins.",
|
||||
"After they have been replaced, this utility can be used to calibrate the controller to work with the new joysticks.": "Une fois remplacés, cet outil peut être utilisé pour calibrer la manette afin qu'elle fonctionne correctement avec les nouveaux joysticks.",
|
||||
"Aim for a circularity error of around 7-9 % for the best playing experience.": "Visez une erreur de circularité d'environ 7-9 % pour la meilleure expérience de jeu.",
|
||||
"Astro Bot": "Astro Bot",
|
||||
"Battery Barcode": "Code-barres batterie",
|
||||
"Battery level is low. Tests may fail due to the controller being in power saving mode.": "Niveau de batterie faible. Les tests peuvent échouer car la manette est en mode économie d'énergie.",
|
||||
"Be gentle to avoid damage.": "Soyez délicat pour éviter tout dommage.",
|
||||
"Bluetooth Address": "Adresse Bluetooth",
|
||||
"Buttons": "Boutons",
|
||||
"Calibrating without replacing the joysticks may help temporarily, but it may also make the problem worse, with no way to undo it.": "Calibrer sans remplacer les joysticks peut aider temporairement, mais peut aussi aggraver le problème sans possibilité de retour en arrière.",
|
||||
"Calibration": "Calibration",
|
||||
"Calibration History": "Historique de calibration",
|
||||
"Calibration is being stored in the stick modules.": "La calibration est en cours d'enregistrement dans les modules de stick.",
|
||||
"Cancel": "Annuler",
|
||||
"Cannot copy text to the clipboard:": "Impossible de copier le texte dans le presse-papiers :",
|
||||
"Cannot lock": "Impossible de verrouiller",
|
||||
"Cannot read module barcodes": "Impossible de lire les codes-barres des modules",
|
||||
"Cannot store data into": "Impossible de stocker les données dans",
|
||||
"Cannot unlock": "Impossible de déverrouiller",
|
||||
"Center": "Centre",
|
||||
"Center (L1)": "Centre (L1)",
|
||||
"Changes saved successfully": "Modifications sauvegardées avec succès",
|
||||
"Chroma Indigo": "Chroma Indigo",
|
||||
"Chroma Pearl": "Chroma Nacre",
|
||||
"Chroma Teal": "Chroma Sarcelle",
|
||||
"Circularity": "Circularité",
|
||||
"Circularity (R1)": "Circularité (R1)",
|
||||
"Clear All": "Tout effacer",
|
||||
"Cobalt Blue": "Bleu cobalt",
|
||||
"Color": "Couleur",
|
||||
"Controller Info": "Infos manette",
|
||||
"Controller does not support adaptive trigger control": "La manette ne prend pas en charge le contrôle des gâchettes adaptatives",
|
||||
"Cosmic Red": "Rouge cosmique",
|
||||
"Current": "Actuel",
|
||||
"Debug": "Debug",
|
||||
"Debug Info": "Infos debug",
|
||||
"Debug buttons": "Boutons debug",
|
||||
"Delete": "Supprimer",
|
||||
"Delete all calibration history for this controller? This cannot be undone.": "Supprimer tout l'historique de calibration de cette manette ? Cette action est irréversible.",
|
||||
"Delete this calibration entry?": "Supprimer cette entrée de calibration ?",
|
||||
"Does this software resolve stickdrift?": "Ce logiciel résout-il la dérive des sticks ?",
|
||||
"Don't show again": "Ne plus afficher",
|
||||
"Drift is caused by mechanical parts in the joystick being worn out, and they need to be replaced to fix the drift.": "La dérive est causée par l'usure des pièces mécaniques du joystick. Elles doivent être remplacées pour corriger la dérive.",
|
||||
"DualSense Edge Calibration": "Calibration DualSense Edge",
|
||||
"Error while saving changes": "Erreur lors de l'enregistrement des modifications",
|
||||
"FW Build Date": "Date de build FW",
|
||||
"FW Series": "Série FW",
|
||||
"FW Type": "Type FW",
|
||||
"FW Update": "Mise à jour FW",
|
||||
"FW Update Info": "Infos mise à jour FW",
|
||||
"FW Version": "Version FW",
|
||||
"Fail": "Échec",
|
||||
"Failed": "Échoué",
|
||||
"Failed to connect to device": "Échec de la connexion à l'appareil",
|
||||
"Failed to disable adaptive trigger": "Échec de la désactivation des gâchettes adaptatives",
|
||||
"Failed to set speaker tone": "Échec de la configuration du son du haut-parleur",
|
||||
"Failed to set vibration": "Échec de la configuration des vibrations",
|
||||
"Feel for vibration in the controller.": "Sentez les vibrations dans la manette.",
|
||||
"Finetune stick calibration": "Affiner la calibration des sticks",
|
||||
"Firefox is supported with the WebHID extension installed.": "Firefox est pris en charge avec l'extension WebHID installée.",
|
||||
"For more info or help, feel free to reach out on Discord.": "Pour plus d'informations ou d'aide, n'hésitez pas à nous contacter sur Discord.",
|
||||
"Fortnite": "Fortnite",
|
||||
"Galactic Purple": "Violet galactique",
|
||||
"God of War Ragnarok": "God of War Ragnarök",
|
||||
"Grey Camouflage": "Camouflage gris",
|
||||
"HW Model": "Modèle matériel",
|
||||
"Haptic Vibration": "Vibration haptique",
|
||||
"Hardware": "Matériel",
|
||||
"Headphone Jack": "Prise casque",
|
||||
"If the calibration is not stored permanently, please double-check the wirings of the hardware mod.": "Si la calibration n'est pas enregistrée de façon permanente, vérifiez le câblage de la modification matérielle.",
|
||||
"Increase non-circularity": "Augmenter la non-circularité",
|
||||
"Info": "Info",
|
||||
"Instructions": "Instructions",
|
||||
"It appears the latest joystick calibration has not been saved.": "Il semble que la dernière calibration du joystick n'ait pas été sauvegardée.",
|
||||
"Keep rotating the sticks even if you see no progress!": "Continuez à tourner les sticks même si vous ne voyez aucune progression !",
|
||||
"Last connected": "Dernière connexion",
|
||||
"Learn more...": "En savoir plus...",
|
||||
"Left Module Barcode": "Code-barres module gauche",
|
||||
"Left stick": "Stick gauche",
|
||||
"Lights": "Lumières",
|
||||
"Listen for a tone from the controller speaker.": "Écoutez le son émis par le haut-parleur de la manette.",
|
||||
"Long-press [circle] to skip ahead.": "Appui long sur [cercle] pour passer.",
|
||||
"MCU Unique ID": "ID unique MCU",
|
||||
"Make sure to touch the edges of the joystick frame and rotate slowly, preferably in each direction - clockwise and anti-clockwise.": "Veillez à toucher les bords du cadre du joystick et à tourner lentement, de préférence dans les deux sens — horaire et antihoraire.",
|
||||
"Microphone": "Microphone",
|
||||
"Microphone Level:": "Niveau du microphone :",
|
||||
"Midnight Black": "Noir minuit",
|
||||
"More details and images": "Plus de détails et d'images",
|
||||
"Move the stick to select it for tuning, then without touching the stick use the D-pad buttons to adjust the center point. Flick it and adjust it again if it is off center or flickers.": "Bougez le stick pour le sélectionner, puis sans le toucher, utilisez le D-pad pour ajuster le point central. Faites-le bouger rapidement et réajustez si il est décentré ou vacille.",
|
||||
"No controller connected": "Aucune manette connectée",
|
||||
"No saved calibrations found.": "Aucune calibration sauvegardée.",
|
||||
"No tests completed yet.": "Aucun test effectué pour l'instant.",
|
||||
"No.": "Non.",
|
||||
"Normal": "Normal",
|
||||
"Not tested": "Non testé",
|
||||
"Nova Pink": "Rose Nova",
|
||||
"Only after you have done that, you click on \"Done\".": "Ce n'est qu'après avoir effectué cela que vous cliquez sur \"Terminer\".",
|
||||
"PCBA ID": "ID PCBA",
|
||||
"Pass": "Réussi",
|
||||
"Passed": "Réussi",
|
||||
"Please connect a DualShock 4, a DualSense, DualSense Edge or VR2 controller to your computer and press Connect.": "Veuillez connecter une manette DualShock 4, DualSense, DualSense Edge ou VR2 à votre ordinateur et appuyez sur Connecter.",
|
||||
"Please note: the stick modules on the DS Edge <b>cannot be calibrated via software alone</b>.": "Remarque : les modules de stick de la DS Edge <b>ne peuvent pas être calibrés par logiciel seul</b>.",
|
||||
"Please read the instructions.": "Veuillez lire les instructions.",
|
||||
"Please release the stick to center position before adjusting with D-pad buttons.": "Veuillez relâcher le stick en position centrale avant d'ajuster avec les boutons du D-pad.",
|
||||
"Please use a web browser with WebHID support (e.g. Google Chrome or Microsoft Edge) on a PC or Mac.": "Veuillez utiliser un navigateur avec la prise en charge WebHID (ex. Google Chrome ou Microsoft Edge) sur PC ou Mac.",
|
||||
"Plug in headphones to the 3.5mm jack": "Branchez un casque sur la prise 3,5 mm",
|
||||
"Press L2 and R2 triggers to feel the trigger resistance.": "Appuyez sur les gâchettes L2 et R2 pour ressentir leur résistance.",
|
||||
"Press [circle] to close, or [square] to start over": "Appuyez sur [cercle] pour fermer, ou [carré] pour recommencer",
|
||||
"Press [square] to Pass, [cross] to Fail, or [circle] to skip.": "Appuyez sur [carré] pour Réussi, [croix] pour Échec, ou [cercle] pour passer.",
|
||||
"Press [square] to begin or [circle] to close": "Appuyez sur [carré] pour commencer ou [cercle] pour fermer",
|
||||
"Press [triangle] to go back.": "Appuyez sur [triangle] pour revenir en arrière.",
|
||||
"Press each button until they turn green.": "Appuyez sur chaque bouton jusqu'à ce qu'il devienne vert.",
|
||||
"Press the D-pad or face buttons in the direction you want the stick position to move.": "Appuyez sur le D-pad ou les boutons directionnels dans la direction souhaitée pour déplacer la position du stick.",
|
||||
"Progress": "Progression",
|
||||
"Push the stick straight up/down/left/right as far as possible.": "Poussez le stick vers le haut/bas/gauche/droite aussi loin que possible.",
|
||||
"Quick Test": "Test rapide",
|
||||
"Quick calibrate": "Calibration rapide",
|
||||
"Range calibration appears to have failed. Please try again and make sure you rotate the sticks.": "La calibration de portée semble avoir échoué. Veuillez réessayer en vous assurant de faire tourner les sticks.",
|
||||
"Reboot controller": "Redémarrer la manette",
|
||||
"Repeat": "Répéter",
|
||||
"Restart": "Redémarrer",
|
||||
"Restore": "Restaurer",
|
||||
"Restore calibration": "Restaurer la calibration",
|
||||
"Right Module Barcode": "Code-barres module droit",
|
||||
"Right stick": "Stick droit",
|
||||
"Rotate the sticks slowly at least 2 times in one direction and 2 times in the other direction to cover the whole range.": "Faites tourner les sticks lentement au moins 2 fois dans un sens et 2 fois dans l'autre pour couvrir toute la portée.",
|
||||
"Run through these tests to verify your controller's functionality.": "Effectuez ces tests pour vérifier le bon fonctionnement de votre manette.",
|
||||
"SBL FW Version": "Version FW SBL",
|
||||
"Save changes permanently": "Sauvegarder les modifications de façon permanente",
|
||||
"Serial Number": "Numéro de série",
|
||||
"Show all": "Tout afficher",
|
||||
"Show raw numbers": "Afficher les valeurs brutes",
|
||||
"Software": "Logiciel",
|
||||
"Sony controllers come from the factory calibrated to have an average circularity error of nearly 10 %, and this is now what games expect. Too perfect circularity can make movements and aim feel stiff and unresponsive in some games.": "Les manettes Sony sortent d'usine avec une erreur de circularité moyenne d'environ 10 %, ce que les jeux attendent désormais. Une circularité trop parfaite peut rendre les mouvements et la visée rigides et peu réactifs dans certains jeux.",
|
||||
"Speaker": "Haut-parleur",
|
||||
"Spider FW Version": "Version FW Spider",
|
||||
"Spider-Man 2": "Spider-Man 2",
|
||||
"Starlight Blue": "Bleu lumière des étoiles",
|
||||
"Step size": "Taille du pas",
|
||||
"Sterling Silver": "Argent sterling",
|
||||
"Stickdrift is caused by a physical defect; namely dirt, worn potentiometer or in some cases a worn spring.": "La dérive du stick est causée par un défaut physique : de la saleté, un potentiomètre usé ou dans certains cas un ressort usé.",
|
||||
"Support for calibrating DualSense Edge stick modules is now available as an <b>experimental feature</b>.": "La prise en charge de la calibration des modules de stick DualSense Edge est désormais disponible en tant que <b>fonctionnalité expérimentale</b>.",
|
||||
"Test Speaker": "Tester le haut-parleur",
|
||||
"Test Summary": "Résumé des tests",
|
||||
"Test all buttons, or long-press [square] to Pass and [cross] to Fail, or [circle] to skip.": "Testez tous les boutons, ou appui long sur [carré] pour Réussi, [croix] pour Échec, ou [cercle] pour passer.",
|
||||
"The <b>Done</b> button will unlock after at most 15 seconds. If you press <b>Done</b> without rotating the sticks, the calibration will be incomplete and you will need to repeat it.": "Le bouton <b>Terminer</b> se déverrouillera après 15 secondes au maximum. Si vous appuyez sur <b>Terminer</b> sans avoir tourné les sticks, la calibration sera incomplète et devra être recommencée.",
|
||||
"The Last of Us": "The Last of Us",
|
||||
"The calibration was restored successfully! Remember to save the changes in order not to loose them when the controller is rebooted.": "La calibration a été restaurée avec succès ! N'oubliez pas de sauvegarder les modifications pour ne pas les perdre lors du redémarrage de la manette.",
|
||||
"The device appears to be a clone. All calibration functionality is disabled.": "L'appareil semble être un clone. Toutes les fonctionnalités de calibration sont désactivées.",
|
||||
"The device is connected via Bluetooth. Disconnect and reconnect using a USB cable instead.": "L'appareil est connecté en Bluetooth. Déconnectez-le et reconnectez-le via un câble USB.",
|
||||
"The item has been copied to the clipboard.": "L'élément a été copié dans le presse-papiers.",
|
||||
"This controller has unsaved changes that will be lost when the controller is rebooted.": "Cette manette a des modifications non sauvegardées qui seront perdues lors du redémarrage.",
|
||||
"This involves temporarily disabling write protection by applying <b>+1.8V</b> to a specific test point on each module.": "Cela implique de désactiver temporairement la protection en écriture en appliquant <b>+1,8V</b> sur un point de test spécifique de chaque module.",
|
||||
"This is only for advanced users. If you're not sure what you're doing, please do not attempt it.": "Ceci est réservé aux utilisateurs avancés. Si vous n'êtes pas sûr de ce que vous faites, ne tentez pas cette opération.",
|
||||
"This issue happens because you have clicked \"Done\" immediately after starting a range calibration.": "Ce problème survient parce que vous avez cliqué sur \"Terminer\" immédiatement après avoir démarré une calibration de portée.",
|
||||
"This test checks all controller buttons by requiring you to press each button up to three times.": "Ce test vérifie tous les boutons de la manette en vous demandant d'appuyer sur chaque bouton jusqu'à trois fois.",
|
||||
"This test checks the headphone jack functionality.": "Ce test vérifie le fonctionnement de la prise casque.",
|
||||
"This test checks the reliability of the USB port.": "Ce test vérifie la fiabilité du port USB.",
|
||||
"This test will cycle through red, green, and blue colors on the controller lightbar, animate the player indicator lights, and flash the mute button.": "Ce test fait défiler les couleurs rouge, vert et bleu sur la barre lumineuse, anime les voyants du joueur et fait clignoter le bouton muet.",
|
||||
"This test will enable heavy resistance on both L2 and R2 triggers.": "Ce test activera une forte résistance sur les gâchettes L2 et R2.",
|
||||
"This utility cannot fix stick drift.": "Cet outil ne peut pas corriger la dérive des sticks.",
|
||||
"To store a custom calibration on the stick's internal memory, a <b>hardware modification</b> is required.": "Pour stocker une calibration personnalisée dans la mémoire interne du stick, une <b>modification matérielle</b> est nécessaire.",
|
||||
"Touchpad FW Version": "Version FW Touchpad",
|
||||
"Touchpad ID": "ID Touchpad",
|
||||
"USB Connector": "Connecteur USB",
|
||||
"Unsupported browser.": "Navigateur non pris en charge.",
|
||||
"Use expert mode": "Utiliser le mode expert",
|
||||
"Use four-step calibration": "Utiliser la calibration en quatre étapes",
|
||||
"Use normal mode": "Utiliser le mode normal",
|
||||
"Use quick calibration": "Utiliser la calibration rapide",
|
||||
"Using this utility on a phone or tablet is not supported.": "L'utilisation de cet outil sur un téléphone ou une tablette n'est pas prise en charge.",
|
||||
"VCM Left Barcode": "Code-barres VCM gauche",
|
||||
"VCM Right Barcode": "Code-barres VCM droit",
|
||||
"Values": "Valeurs",
|
||||
"Venom FW Version": "Version FW Venom",
|
||||
"Volcanic Red": "Rouge volcanique",
|
||||
"Watch the controller lights change colors, the player lights animate, and the mute button flash.": "Regardez les lumières de la manette changer de couleur, les voyants du joueur s'animer et le bouton muet clignoter.",
|
||||
"We are not responsible for any damage caused by attempting this modification.": "Nous ne sommes pas responsables des dommages causés par cette modification.",
|
||||
"While holding the stick to be adjusted straight up/down/left/right, make adjustments until you see lightblue sectors in all four directions after circling the stick both left and right. Then use the": "En maintenant le stick vers le haut/bas/gauche/droite, effectuez des ajustements jusqu'à voir des secteurs bleu clair dans les quatre directions après avoir tourné le stick dans les deux sens. Puis utilisez le",
|
||||
"White": "Blanc",
|
||||
"Wiggle the USB cable to see if the controller disconnects.": "Bougez le câble USB pour voir si la manette se déconnecte.",
|
||||
"You can do this in two ways:": "Vous pouvez le faire de deux façons :",
|
||||
"You have to rotate the joysticks before you press \"Done\".": "Vous devez faire tourner les joysticks avant d'appuyer sur \"Terminer\".",
|
||||
"You should save your changes, or reboot the controller to revert back to the previous state.": "Vous devriez sauvegarder vos modifications, ou redémarrer la manette pour revenir à l'état précédent.",
|
||||
"Your device might not be a genuine Sony controller. If it is not a clone then please report this issue.": "Votre appareil n'est peut-être pas une manette Sony authentique. Si ce n'est pas un clone, veuillez signaler ce problème.",
|
||||
"failed": "échoué",
|
||||
"here": "ici",
|
||||
"hide": "masquer",
|
||||
"left module": "module gauche",
|
||||
"passed": "réussi",
|
||||
"right module": "module droit",
|
||||
"serial number": "numéro de série",
|
||||
"skipped": "ignoré",
|
||||
"tests completed": "tests effectués",
|
||||
"to increase the non-circularity.": "pour augmenter la non-circularité.",
|
||||
"(DualSense & DualSense Edge) Will updating the firmware reset calibration?": "",
|
||||
"(DualSense Edge) Is the calibration stored on the controller or the modules?": "",
|
||||
"A sample test was done with 30 dualsense edge modules, and the results showed that the inner quartile range (IQR) is 8.3% and 9.0%, with an average of 8.6%. This goes to show that stock controllers by default have a relatively high range, and the rule of thumb is to follow factory calibration.": "",
|
||||
"Can I overwrite a (permanent) calibration?": "",
|
||||
"Can I restore a previous calibration?": "",
|
||||
"Finetuning is only available for DualSense and DualSense Edge.": "",
|
||||
"God of War 20th Anniversary": "",
|
||||
"Housing": "",
|
||||
"How do I use the finetuning feature?": "",
|
||||
"If you don't have a battery connected or the connected battery is empty, AND your cable disconnects during saving the calibration, then your controller has a high chance of being bricked.": "",
|
||||
"If you have not clicked the green button \"Save changes permanently\", then unplugging the controller will reset to the previously saved calibration. It is recommended you test your calibration before saving.": "",
|
||||
"If you have saved the changes permanently, you can reset the changes only if you are using a DualSense or DualSense Edge. You can click on the grey button \"Restore Calibration\" to go back to one of the previous calibrations that was saved on the controller. Known issue: You may need to reboot your controller first in order for previous calibrations to show up.": "",
|
||||
"Image 1": "",
|
||||
"Images": "",
|
||||
"In most cases, calibrating your joysticks that have prior drift issues may result in a worse and unpredictable calibration.": "",
|
||||
"Not shown in the video: You can now also increase the range in each direction uniformly by using the cross in the top right and moving the slider up, which may speed up finetuning. Make sure to rotate the joystick first, otherwise the button cannot be pressed.": "",
|
||||
"Only official controllers are supported, no third-party or \"fake\" controllers.": "",
|
||||
"Option 1": "",
|
||||
"Option 2": "",
|
||||
"PlayStation Virtual Reality 2": "",
|
||||
"Saving calibration is locked by default on DualSense Edge joystick modules. A hardware mod is required to save the calibration permanently. The calibration is saved on the modules themselves, so you have to perform the mod twice: once for each module. You would need to bridge two points on the PCB with enamelled wire. There are multiple methods, I personally recommend using either of these two locations to solder the wire to. See images below. Ensure the wire is thin enough so that the shell is closed properly. Make sure you don't short the wire to ground through the letters near the bottom joint.": "",
|
||||
"Sony DualShock 4": "",
|
||||
"The calibration is stored on each module individually. It is carried over if you place the modules in a different DualSense Edge. Likewise, if you place a different set of modules in your DualSense Edge, you will get a different calibration that is tied to those new modules.": "",
|
||||
"The finetuning and quick test menus are only accessible for DualSense and DualSense Edge.": "",
|
||||
"The website supports the following official controllers:": "",
|
||||
"These previous calibrations are stored locally in your browser's storage. Meaning you can only restore calibrations using the same computer and browser that you used to calibrate it with, and deleting the cache or using Incognito will make any previous calibration irrecoverable.": "",
|
||||
"This software is not intended to fix stickdrift and will <b>not</b> fix stickdrift on its own if you already experience that.": "",
|
||||
"This video from V2.16 shows how to use the finetuning menu.": "",
|
||||
"We recommend a circularity between 7% and 9%. The reason for this is to mimic a stock controllers calibration. However, symmetrical overshoot is more important and if you need to deviate from this range to achieve better symmetry, that is fine too.": "",
|
||||
"What are the risks of using the calibration?": "",
|
||||
"What circularity percentage to aim for when calibrating and finetuning.": "",
|
||||
"What the software will help with, is ensuring new joysticks will function properly after replacing the old broken joysticks that drift. This step involves opening up the controller and soldering new potentiometers or an entire new joystick.": "",
|
||||
"When calibrating, there is no risk. However, if your controller disconnects during the split second that you save a calibration, then you have a chance of bricking your controller. Make sure your battery has enough charge and is plugged into the controller, and the USB cable is securely connected. This prevents your controller from being bricked if the USB cable accidentally disconnects.": "",
|
||||
"Which controllers does DualShock Calibration GUI support?": "",
|
||||
"Yes. Simply do another calibration, and click the green button to save permanently.": "",
|
||||
"": ""
|
||||
}
|
||||
}
|
||||
353
lang/hu_hu.json
@@ -1,26 +1,18 @@
|
||||
{
|
||||
".authorMsg": "| A magyarítást a <a href='https://pandafix.hu' target='_blank'>Pandafix</a> készítette.",
|
||||
"DualShock Calibration GUI": "DualShock / DualSense kontroller kalibráló felület",
|
||||
"Unsupported browser. Please use a web browser with WebHID support (e.g. Chrome).": "Nem támogatott böngésző! Kérlek olyan böngészőt használj, ami támogatja a WebHID protokollt (pl: Chrome, Maxthon)",
|
||||
"Connect a DualShock 4 or a DualSense controller to your computer and press Connect.": "Csatlakoztass egy <b>PS4 DualShock 4</b> vagy <b>PS5 DualSense</b> kontrollert és kattints a Csatlakozás gombra",
|
||||
"Connect": "Csatlakozás",
|
||||
"Connected to:": "Csatlakoztatva:",
|
||||
"Disconnect": "Lecsatlakozás",
|
||||
"Firmware Info": "Firmware információk",
|
||||
"Calibrate stick center": "Hüvelykujjkar középállásának újrakalibrálása",
|
||||
"Calibrate stick range (permanent)": "Hüvelykujjkar tartományának újrakalibrálása (tartós)",
|
||||
"Calibrate stick range (temporary)": "Hüvelykujjkar tartományának újrakalibrálása (ideiglenes)",
|
||||
"Reset controller": "Kontroller gyári beállításinak visszatöltése (csak ideiglenes újrakalibrálás esetén)",
|
||||
"Calibrate stick range": "Hüvelykujjkar tartományának újrakalibrálása",
|
||||
"Sections below are not useful, just some debug infos or manual commands": "Az alábbi funkciók nem kalibrálásra használatosak, csak néhány hibakeresési információt vagy kézi parancsot alkalmaznak",
|
||||
"NVS Status": "NVS státusz",
|
||||
"Unknown": "Ismeretlen",
|
||||
"BD Addr": "BD címzés",
|
||||
"Debug buttons": "Hibakeresési funkciók",
|
||||
"Debug buttons": "Hibakeresési gombok",
|
||||
"Query NVS status": "Az NVS állapotának lekérdezése",
|
||||
"NVS unlock": "NVS feloldása",
|
||||
"NVS lock": "NVS zárolása",
|
||||
"Get BDAddr": "BD címzés lekérdezése",
|
||||
"Fast calibrate stick center (OLD)": "Hüvelykujjkar középállásának gyors újrakalibrálása (elavult)",
|
||||
"Stick center calibration": "Hüvelykujjkar középállásának újrakalibrálása",
|
||||
"Welcome": "Használati utasítások",
|
||||
"Step 1": "Lépés: 1",
|
||||
@@ -29,13 +21,8 @@
|
||||
"Step 4": "Lépés: 4",
|
||||
"Completed": "Befejezés",
|
||||
"Welcome to the stick center-calibration wizard!": "Üdvözöl a hüvelykujjkar középállásának kalibrálását végző alkalmazás!",
|
||||
"This tool will guide you in re-centering the analog sticks of your controller. It consists in four steps: you will be asked to move both sticks in a direction and release them.": "Ez az eszköz segít a kontroller analóg karjainak újraközpontosításában. Négy lépésből áll: mindkét hüvelykujjkart mozgasd a megadott irányba, majd engedd el.",
|
||||
"Please be aware that, <i>once the calibration is running, it cannot be canceled</i>. Do not close this page or disconnect your controller until is completed.": "Kérlek, vedd figyelembe, hogy <i>miután a kalibrálás elindul, azt nem lehet megszakítani</i>. Ne zárd be ezt az oldalt, és ne válaszd le a kontrollert, amíg be nem fejeződött a kalibrálási procedúra.",
|
||||
"Calibration storage": "Újrakalibrálási tároló",
|
||||
"By default the calibration is only saved in a volatile storage, so that if you (or this tool) mess something up, a reset of the controller is enough to make it work again.": "A kalibráció alapértelmezés szerint csak egy ideiglenes tárolóba kerül elmentésre, így ha valamit elrontasz (vagy ez az alkalmazás ront el), akkor a kontroller újraindítása elegendő ahhoz, hogy újra működjön.",
|
||||
"If you wish to store the calibration permanently in the controller, tick the checkbox below:": "Ha a kalibrációt tartósan a kontrollerben szeretnéd tárolni, jelöld be az alábbi jelölőnégyzetet:",
|
||||
"Write changes permanently in the controller": "A változtatások végleges írása a kontrollerbe",
|
||||
"<small>Warning: <font color=\"red\">Do not store the calibration permanently if the controller battery is low or disconnected. It will damage your controller.</font></small>": "<small>Figyelem: <font color='red'>Ne tárold tartósan a kalibrálást, ha a kontroller akkumulátora lemerült vagy le van választva. Ez károsíthatja a kontrollert!</font></small>",
|
||||
"This tool will guide you in re-centering the analog sticks of your controller. It consists of four steps: you will be asked to move both sticks in a direction and release them.": "Ez az eszköz segít a kontroller analóg karjainak újraközpontosításában. Négy lépésből áll: mindkét hüvelykujjkart mozgasd a megadott irányba, majd engedd el.",
|
||||
"Please be aware that, <i>once the calibration is running, it cannot be canceled</i>. Do not close this page or disconnect your controller until it is completed.": "Kérlek, vedd figyelembe, hogy <i>miután a kalibrálás elindul, azt nem lehet megszakítani</i>. Ne zárd be ezt az oldalt, és ne válaszd le a kontrollert, amíg be nem fejeződött a kalibrálási procedúra.",
|
||||
"Press <b>Start</b> to begin calibration.": "Nyomd meg a <b>Kezdés</b> gombot az újrakalibrálás megkezdéséhez",
|
||||
"Please move both sticks to the <b>top-left corner</b> and release them.": "Kérlek, mozgasd mindkét hüvelykujjkart átlósan a <b>bal felső sarokba</b>, és engedd el őket.",
|
||||
"When the sticks are back in the center, press <b>Continue</b>.": "Amikor a hüvelykujjkarok ismét középen vannak, nyomd meg a <b>Folytatás</b> gombot.",
|
||||
@@ -44,11 +31,10 @@
|
||||
"Please move both sticks to the <b>bottom-right corner</b> and release them.": "Kérlek, mozgasd mindkét hüvelykujjkart átlósan a <b>jobb alsó sarokba</b>, és engedd el őket.",
|
||||
"Calibration completed successfully!": "A kalibrálás sikeresen befejeződött!",
|
||||
"Next": "Következő",
|
||||
"Recentering the controller sticks. ": "A kontroller hüvelykujjkar középállásának újrakalibrálása. ",
|
||||
"Recentering the controller sticks.": "A kontroller hüvelykujjkar középállásának újrakalibrálása.",
|
||||
"Please do not close this window and do not disconnect your controller. ": "Kérlek, ne zárd be ezt az ablakot, és ne válaszd le a kontrollert. ",
|
||||
"Range calibration": "Elmozdulási tartomány kalibrálása",
|
||||
"<b>The controller is now sampling data!</b>": "<b>A kontroller most az adatokat mintavételezi!</b>",
|
||||
"Rotate the sticks slowly to cover the whole range. Press \"Done\" when completed.": "Lassan forgasd mind a két a hüvelykujjkart, hogy a teljes tartományt lefedje (legalább 6 teljes kör, körkörösen a külső szélek mentén). Ha elkészültél, nyomd meg a \"Kész\" gombot.",
|
||||
"The controller is now sampling data!": "A kontroller most az adatokat mintavételezi!</b>",
|
||||
"Done": "Kész",
|
||||
"Hi, thank you for using this software.": "Szia! Köszönjük, hogy ezt az alkalmazást használtad.",
|
||||
"If you're finding it helpful and you want to support my efforts, feel free to": "Ha hasznosnak találod ezt az alkalmazást, és támogatni szeretnéd a készítőt, akkor kérlek tedd meg",
|
||||
@@ -57,63 +43,322 @@
|
||||
"Do you have any suggestion or issue? Drop me a message via email or discord.": "Van valami javaslatod vagy problémád? Írj üzenetet e-mailben vagy discordban.",
|
||||
"Cheers!": "A legjobbakat!",
|
||||
"Support this project": "Támogasd ezt a projektet",
|
||||
|
||||
"unknown": "ismeretlen",
|
||||
"original": "eredeti",
|
||||
"clone": "hamisítvány",
|
||||
"original": "eredeti",
|
||||
"clone": "hamisítvány",
|
||||
"locked": "zárolt",
|
||||
"unlocked": "feloldott",
|
||||
"error": "hiba",
|
||||
"Build Date:": "Gyártási dátum:",
|
||||
"HW Version:": "HW verzió:",
|
||||
"SW Version:": "SW verzió:",
|
||||
"Device Type:": "Eszköz típusa:",
|
||||
"Firmware Type:": "Firmware típusa:",
|
||||
"SW Series:": "SW széria:",
|
||||
"HW Info:": "HW információk:",
|
||||
"SW Version:": "SW verzió:",
|
||||
"UPD Version:": "UPD verzió:",
|
||||
"FW Version1:": "FW1 verzió:",
|
||||
"FW Version2:": "FW2 verzió:",
|
||||
"FW Version3:": "FW3 verzió:",
|
||||
|
||||
"Build Date": "Gyártási dátum",
|
||||
"HW Version": "HW verzió",
|
||||
"SW Version": "SW verzió",
|
||||
"Device Type": "Eszköz típusa",
|
||||
"Range calibration completed": "A tartománykalibráció befejeződött",
|
||||
"Range calibration failed: ": "A tartománykalibráció meghiúsult: ",
|
||||
"Cannot unlock NVS": "NVS feloldása nem lehetséges",
|
||||
"Cannot relock NVS": "NVS újbóli zárolása nem lehetséges",
|
||||
"Error 1": "Hiba 1",
|
||||
"Error 2": "Hiba 2",
|
||||
"Error 3": "Hiba 3",
|
||||
"Stick calibration failed: ": "Hüvelykujjkar kalibrálása sikertelen: ",
|
||||
"Range calibration failed": "A tartománykalibráció meghiúsult",
|
||||
"Stick calibration failed": "Hüvelykujjkar kalibrálása sikertelen",
|
||||
"Stick calibration completed": "Hüvelykujjkar kalibrálása befejeződött",
|
||||
"NVS Lock failed: ": "NVS zárolása sikertelen: ",
|
||||
"NVS Unlock failed: ": "NVS feloldása sikertelen: ",
|
||||
"NVS Lock failed": "NVS zárolása sikertelen",
|
||||
"NVS Unlock failed": "NVS feloldása sikertelen",
|
||||
"Please connect only one controller at time.": "Kérlek, egyidejűleg csak egy kontrollert csatlakoztass.",
|
||||
"Sony DualShock 4 V1": "Sony DualShock 4 V1",
|
||||
"Sony DualShock 4 V2": "Sony DualShock 4 V2",
|
||||
"Sony DualSense": "Sony DualSense",
|
||||
"Sony DualSense Edge": "Sony DualSense Edge",
|
||||
"Connected invalid device: ": "Érvénytelen eszköz csatlakoztatva: ",
|
||||
"Calibration of the DualSense Edge is not currently supported.": "A DualSense Edge kontroller kalibrálása jelenleg nem támogatott.",
|
||||
"The device appears to be a DS4 clone. All functionalities are disabled.": "Úgy tűnik, hogy a kontroller egy DS4 klón (hamisítvány). Minden funkció le lesz tiltva.",
|
||||
"Error: ": "Hiba: ",
|
||||
"My handle on discord is: the_al": "Fogjunk kezet a Discordon: the_al",
|
||||
"Connected invalid device": "Érvénytelen eszköz csatlakoztatva",
|
||||
"Error": "Hiba",
|
||||
"Initializing...": "Inicializálás...",
|
||||
"Storing calibration...": "Kalibrálási adatok tárolása...",
|
||||
"Sampling...": "Mintavételezés...",
|
||||
"Calibration in progress": "Kalibrálás folyamatban",
|
||||
"Start": "Kezdés",
|
||||
"Done": "Befejezés",
|
||||
"Continue": "Folytatás",
|
||||
"You can check the calibration with the": "Az újrakalibrálást ellenőrizheted az alábbi alkalmazással is:",
|
||||
"Have a nice day :)": "További szép napot kívánunk! :)",
|
||||
"Welcome to the Calibration GUI": "Üdvözöl a Dualshock/DualSense kalibrálást segítő alkalmazás!",
|
||||
"Just few things to know before you can start:": "Csak néhány dolog, amit tudnod kell, mielőtt belevágnál:",
|
||||
"Just few things to know before you can start:": "Csak néhány dolog, amit tudnod kell, mielőtt belevágnál:",
|
||||
"This website is not affiliated with Sony, PlayStation & co.": "Ez a webhely semmilyen módon nem áll kapcsolatban a Sony és a PlayStation társaságokkal valamint azok leányvállalataival.",
|
||||
"This service is provided without warranty. Use at your own risk.": "Ezt a szolgáltatást garancia nélkül nyújtjuk. Használata csak saját felelősségre. Anyagi kár esetén se vállalunk felelősséget!",
|
||||
"This service is provided without warranty. Use at your own risk.": "Ezt a szolgáltatást garancia nélkül nyújtjuk. Használata csak saját felelősségre. Anyagi kár esetén se vállalunk felelősséget!",
|
||||
"Keep the internal battery of the controller connected and ensure it is well charged. If the battery dies during operations, the controller will be damaged and rendered unusable.": "Tartsd csatlakoztatva a vezérlő belső akkumulátorát, és győződj meg róla, hogy megfelelően van feltöltve. Ha az akkumulátor működés közben lemerül, a vezérlő megsérül és használhatatlanná válik. Győződj meg róla, hogy az USB kábel és a csatlakozók nem kontakthibásak! A kontroller kalibrálását teljesen összeszerelt állapotban végezd!",
|
||||
"Before doing the permanent calibration, try the temporary one to ensure that everything is working well.": "A tartós kalibrálás elvégzése előtt próbáld ki az ideiglenes kalibrációt, hogy megbizonyosodj arról, hogy minden jól működik!",
|
||||
"Understood": "Megértettem és elfogadom",
|
||||
"Version": "Verzió",
|
||||
"Frequently Asked Questions": "Gyakran Ismételt Kérdések",
|
||||
"Close": "Bezár",
|
||||
"Welcome to the F.A.Q. section! Below, you'll find answers to some of the most commonly asked questions about this website. If you have any other inquiries or need further assistance, feel free to reach out to me directly. Your feedback and questions are always welcome!": "Üdvözöllek a gyakran ismételt kérdések szekcióban! Az alábbiakban választ találsz a weboldallal kapcsolatban leggyakrabban feltett kérdésekre. Ha további kérdésed van, vagy további segítségre van szükséged, fordulj közvetlenül a szoftver készítőjéhez. Visszajelzésed és kérdéseid mindig szívesen fogadja!",
|
||||
"How does it work?": "Hogyan működik ez a felület?",
|
||||
"Behind the scenes, this website is the culmination of one year of dedicated effort in reverse-engineering DualShock controllers for fun/hobby from a random guy on the internet.": "A színfalak mögött ez a weboldal több évnyi kutatás és erőfeszítés betetőzése a DualShock kontrollerek visszafejtése terén szórakozásból/hobbiból egy véletlenszerű sráctól az interneten.",
|
||||
"Through": "A kutatás során",
|
||||
"this research": "kiderült",
|
||||
", it was discovered that there exist some undocumented commands on DualShock controllers that can be sent via USB and are used during factory assembly process. If these commands are sent, the controller starts the recalibration of analog sticks.": ", hogy a DualShock kontrollereken vannak olyan nem dokumentált parancsok, amelyek USB-n keresztül küldhetők, és a gyártás során használatosak. Ha ezeket a parancsokat elküldjük, a kontroller elindítja az analóg karok újrakalibrálását.",
|
||||
"While the primary focus of this research wasn't initially centered on recalibration, it became apparent that a service offering this capability could greatly benefit numerous individuals. And thus, here we are.": "Noha ennek a kutatásnak az elsődleges célja kezdetben nem az újrakalibrálásra irányult, nyilvánvalóvá vált, hogy egy ilyen lehetőség sokak számára hasznos lehet. És így, itt vagyunk.",
|
||||
"Is this an officially endorsed service?": "Ez egy hivatalosan jóváhagyott szolgáltatás?",
|
||||
"No, this service is simply a creation by a DualShock enthusiast.": "Nem, ez a szolgáltatás egyszerűen egy DualShock kontroller rajongó által készített szolgáltatás.",
|
||||
"Does this website detect if a controller is a clone?": "Ez a webhely érzékeli, hogy a csatlakoztatott kontroller klón?",
|
||||
"Yes, only DualShock4 at the moment. This happened because I accidentally purchased some clones, spent time identifying the differences and added this functionality to prevent future deception.": "Igen, jelenleg csak a DualShock 4 kontrollereken. Ez azért történt, mert a készítő véletlenül vásárolt néhány klónt, időt töltött a különbségek azonosításával, és hozzáadta ezt a funkciót, hogy megakadályozza a jövőbeni megtévesztést.",
|
||||
"Unfortunately, the clones cannot be calibrated anyway, because they only clone the behavior of a DualShock4 during normal gameplay, not all the undocumented functionalities.": "Sajnos a klónokat amúgy sem lehet kalibrálni, mert csak a DualShock 4 kontroller viselkedését klónozzák normál játék közben, nem az összes dokumentálatlan funkciót.",
|
||||
"If you want to extend this detection functionality to DualSense, please ship me a fake DualSense and you'll see it in few weeks.": "Ha szeretnél segíteni ezt az észlelési funkciót kiterjeszteni a DualSense-re, küldj a fejlesztőnek egy hamis DualSense-t, és az alaklamzás néhány héten belül látni fogja.",
|
||||
"What development is in plan?": "Milyen fejlesztés van tervben?",
|
||||
"I maintain two separate to-do lists for this project, although the priority has yet to be established.": "A fejlesztő két külön listát vezet ehhez a projekthez, bár a prioritást még meg kell határozni.",
|
||||
"The first list is about enhancing support for DualShock4 and DualSense controllers:": "Az első lista a DualShock 4 és DualSense kontrollerek támogatásának javításáról szól:",
|
||||
"Implement calibration of L2/R2 triggers.": "Az L2/R2 ravaszok kalibrálásának lehetősége.",
|
||||
"Improve detection of clones, particularly beneficial for those seeking to purchase used controllers with assurance of authenticity.": "A klón kontrollerek észlelésének javítása, különösen azok számára, akik megbízható, eredeti kontrollert szeretnének vásárolni.",
|
||||
"Add support for recalibrating IMUs.": "Az IMU-k újrakalibrálási lehetőségének hozzáadása.",
|
||||
"Additionally, explore the possibility of reviving non-functioning DualShock controllers (further discussion available on Discord for interested parties).": "Ezenkívül a nem működő DualShock kontroller újjáélesztési lehetőségének vizsgálata (további megbeszélések elérhetők a Discord-on az érdeklődők számára).",
|
||||
"The second list contains new controllers I aim to support:": "A második lista új kontrollereket tartalmaz, amelyeket a fejlesztő támogatni kíván:",
|
||||
"DualShock 3": "DualShock 3",
|
||||
"XBox Controllers": "Xbox kontrollerek",
|
||||
"Each of these tasks presents both immense interest and significant time investment. To provide context, supporting a new controller typically demands 6-12 months of full-time research, alongside a stroke of good fortune.": "Ezen feladatok mindegyike jelentős mennyiségű kutatást és időbefektetést jelent. A kontextus biztosítása érdekében egy új kontroller támogatása általában 6-12 hónapos teljes munkaidős kutatást igényel, egy csöpnyi szerencsével meghintve.",
|
||||
"I love this service, it helped me! How can I contribute?": "Imádom ezt a szolgáltatást, segített! Hogyan tudok hozzájárulni?",
|
||||
"I'm glad to hear that you found this helpful! If you're interested in contributing, here are a few ways you can help me:": "Örülök, hogy ezt hasznosnak találtad! Ha érdekel a hozzájárulás, itt van néhány módszer, amellyel segíthetsz a fejlesztőnek:",
|
||||
"Consider making a": "Fontold meg a",
|
||||
"donation": "fejlesztő támogatását",
|
||||
"to support my late-night caffeine-fueled reverse-engineering efforts.": ", hogy a hosszú éjszakákba nyúló koffeinbevitel biztosítva legyen a visszafejtési műveletek közben!",
|
||||
"Ship me a controller you would love to add (send me an email for organization).": "Küldj a fejlesztőnek egy kontrollert, amelyet szívesen látnál a támogatott kontrollerek listájában (küldj e-mailt a fejlesztőnek).",
|
||||
"Translate this website in your language": "Fordítsd le ezt a webhelyet a saját nyelvedre",
|
||||
", to help more people like you!": ", hogy több hozzád hasonló embernek segítsen!",
|
||||
"This website uses analytics to improve the service.": "Ez a weboldal analitikát használ a szolgáltatás javításához.",
|
||||
"Board Model": "Alaplap verzió",
|
||||
"This DualSense controller has outdated firmware.": "Ennek a DualSense vezérlőnek elavult a firmware-e.",
|
||||
"Please update the firmware and try again.": "Kérlek frissítsd a firmware-t, és próbáld újra.",
|
||||
"Joystick Info": "Analógkar információ",
|
||||
"Check circularity": "Körkörösség ellenőrzése",
|
||||
"No.": "Nem",
|
||||
"Does this software resolve stickdrift?": "Megoldja ez a szoftver a stick drift problémát?",
|
||||
"Stickdrift is caused by a physical defect; namely dirt, worn potentiometer or in some cases a worn spring.": "A stick driftet fizikai hiba okozza; például szennyeződés, elhasználódott (kopott) potenciométer vagy bizonyos esetekben egy elhasználódott rugó.",
|
||||
"After range calibration, joysticks always go in corners.": "Kalibráció után a hüvelykujjkarok mindig a sarkokba mennek.",
|
||||
"This issue happens because you have clicked \"Done\" immediately after starting a range calibration.": "Ez a probléma azért fordul elő, mert a tartománykalibrálás indítása után azonnal rákattintottál a \"Kész\" gombra.",
|
||||
"Please read the instructions.": "Kérlek, olvasd el az utasításokat!",
|
||||
"You have to rotate the joysticks before you press \"Done\".": "Forgasd el a hüvelykujjkarokat, mielőtt megnyomnád a \"Kész\" gombot.",
|
||||
"Make sure to touch the edges of the joystick frame and rotate slowly, preferably in each direction - clockwise and anti-clockwise.": "Ügyelj arra, hogy a hüvelykujjakrok érjenek el a keret széléig és annak mentén forgasd lassan, lehetőleg mindkét irányban - óramutató járásával megegyezően és ellentétesen is.",
|
||||
"Only after you have done that, you click on \"Done\".": "Csak miután ezt megtetted, azután kattints a \"Kész\" gombra.",
|
||||
"Changes saved successfully": "A változások sikeresen mentésre kerültek",
|
||||
"Error while saving changes": "A változások mentése közben hiba lépett fel",
|
||||
"Save changes permanently": "A változtatások végleges mentése a kontrollerbe",
|
||||
"Reboot controller": "Kontroller újraindítása",
|
||||
"Controller Info": "Információk a kontrollerről",
|
||||
"Debug Info": "Hibakeresési információk",
|
||||
"Software": "Szoftver",
|
||||
"Hardware": "Hardver",
|
||||
"FW Build Date": "FW kiadásának dátuma",
|
||||
"FW Type": "FW típusa",
|
||||
"FW Series": "FW széria",
|
||||
"FW Version": "FW verzió",
|
||||
"FW Update": "FW frissítés",
|
||||
"FW Update Info": "FW frissítési információ",
|
||||
"SBL FW Version": "SBL FW verzió",
|
||||
"Venom FW Version": "Venom FW verzió",
|
||||
"Spider FW Version": "Spider FW verzió",
|
||||
"Touchpad FW Version": "Tapipad FW verzió",
|
||||
"Serial Number": "Szériaszám",
|
||||
"MCU Unique ID": "MCU egyedi azonosító",
|
||||
"PCBA ID": "PCBA azonosító",
|
||||
"Battery Barcode": "Akkumulátor vonalkód",
|
||||
"VCM Left Barcode": "Bal VCM vonalkód",
|
||||
"VCM Right Barcode": "Jobb VCM vonalkód",
|
||||
"HW Model": "HW modell",
|
||||
"Touchpad ID": "Tapipad azonosító",
|
||||
"Bluetooth Address": "Bluetooth cím",
|
||||
"Show all": "Mindet megjelenít",
|
||||
"Finetune stick calibration": "Karok finomkalibrálása",
|
||||
"(beta)": "(béta)",
|
||||
"Left stick": "Bal kar",
|
||||
"Right stick": "Jobb kar",
|
||||
"Cancel": "Mégse",
|
||||
"<b>Externally</b>: by applying +1.8V directly to the visible test point without opening the controller.": "<b>Külsőleg</b>: +1,8 V közvetlen alkalmazásával a látható tesztpontra, anélkül, hogy a kontrollert szétszednéd.",
|
||||
"<b>Internally</b>: by soldering a wire from a +1.8V source to the write-protect TP.": "<b>Belsőleg</b>: egy vezeték forrasztásával egy +1,8 V-os forrásból az írásvédelmi tesztponthoz.",
|
||||
"Calibration is being stored in the stick modules.": "A kalibráció mentése a hüvelykujjkar modulokban történik.",
|
||||
"DualSense Edge Calibration": "DualSense Edge kalibráció",
|
||||
"For more info or help, feel free to reach out on Discord.": "További információért vagy segítségért nyugodtan keress fel a Discordon.",
|
||||
"More details and images": "További részletek és képek",
|
||||
"Please note: the stick modules on the DS Edge <b>cannot be calibrated via software alone</b>.": "Kérlek, vedd figyelembe: a DS Edge hüvelykujjkar moduljai <b>nem kalibrálhatók kizárólag szoftveresen</b>.",
|
||||
"To store a custom calibration on the stick's internal memory, a <b>hardware modification</b> is required.": "<b>Hardveres módosítás</b> szükséges az egyedi kalibrációnak a modulok belső memóriájában történő tárolásához.",
|
||||
"Support for calibrating DualSense Edge stick modules is now available as an <b>experimental feature</b>.": "A DualSense Edge hüvelykujjkar modulok kalibrálásának támogatása mostantól <b>kísérleti funkcióként</b> elérhető.",
|
||||
"This involves temporarily disabling write protection by applying <b>+1.8V</b> to a specific test point on each module.": "Ez magában foglalja az írásvédelem ideiglenes letiltását az egyes modulokon található specifikus tesztpont <b>+1,8 V</b>-os betáplálásával.",
|
||||
"This is only for advanced users. If you're not sure what you're doing, please do not attempt it.": "Ez kizárólag haladó felhasználóknak szól. Ha nem vagy biztos abban, hogy mit csinálsz, kérlek, ne próbáld meg.",
|
||||
"We are not responsible for any damage caused by attempting this modification.": "Nem vállalunk felelősséget az ezen módosítás megkísérlése által okozott károkért.",
|
||||
"You can do this in two ways:": "Ezt kétféleképpen teheted meg:",
|
||||
"here": "itt",
|
||||
"Cannot lock": "Zárolás nem lehetséges",
|
||||
"Cannot store data into": "Adatok tárolása nem lehetséges ide:",
|
||||
"Cannot unlock": "Feloldás nem lehetséges",
|
||||
"Color": "Szín",
|
||||
"If the calibration is not stored permanently, please double-check the wirings of the hardware mod.": "Ha a kalibráció nem került véglegesen tárolásra, kérlek, ellenőrizd újra a hardvermódosítás vezetékezését!",
|
||||
"Left Module Barcode": "Bal modul vonalkódja",
|
||||
"Right Module Barcode": "Jobb modul vonalkódja",
|
||||
"left module": "bal modul",
|
||||
"right module": "jobb modul",
|
||||
"30th Anniversary": "30th Anniversary",
|
||||
"Astro Bot": "Astro Bot",
|
||||
"Cobalt Blue": "Cobalt Blue",
|
||||
"Cosmic Red": "Cosmic Red",
|
||||
"Galactic Purple": "Galactic Purple",
|
||||
"God of War Ragnarok": "God of War Ragnarok",
|
||||
"Grey Camouflage": "Grey Camouflage",
|
||||
"Midnight Black": "Midnight Black",
|
||||
"Nova Pink": "Nova Pink",
|
||||
"Starlight Blue": "Starlight Blue",
|
||||
"Sterling Silver": "Sterling Silver",
|
||||
"Volcanic Red": "Volcanic Red",
|
||||
"White": "Fehér",
|
||||
"10x zoom": "10x nagyítás",
|
||||
"<strong>Average circularity error:</strong> smaller is not always better! Aim for 7-9 %.": "<strong>Átlagos körkörösségi hiba:</strong> a kisebb nem mindig jobb! Célozd meg a 7-9%-ot.",
|
||||
"A reboot is needed to continue using this DualSense Edge. Please disconnect and reconnect your controller.": "A DualSense Edge további használatához újraindítás szükséges. Kérlek, válaszd le, majd csatlakoztasd újra a kontrollert.",
|
||||
"Adaptive Trigger": "Adaptív ravasz",
|
||||
"Adaptive triggers are only supported on DualSense controllers": "Az adaptív ravaszok csak DualSense kontrollereken támogatottak",
|
||||
"Add test": "Teszt hozzáadása",
|
||||
"Be gentle to avoid damage.": "Légy óvatos, hogy elkerüld a sérülést.",
|
||||
"Buttons": "Gombok",
|
||||
"Calibration": "Kalibrálás",
|
||||
"Center": "Közép",
|
||||
"Center (L1)": "Közép (L1)",
|
||||
"Chroma Indigo": "Chroma Indigó",
|
||||
"Chroma Pearl": "Chroma Gyöngy",
|
||||
"Chroma Teal": "Chroma Kékeszöld",
|
||||
"Circularity": "Körkörösség",
|
||||
"Circularity (R1)": "Körkörösség (R1)",
|
||||
"Controller does not support adaptive trigger control": "A kontroller nem támogatja az adaptív ravasz vezérlését",
|
||||
"Debug": "Hibakeresés",
|
||||
"Don't show again": "Ne jelenjen meg újra",
|
||||
"Fail": "Sikertelen",
|
||||
"Failed": "Sikertelen",
|
||||
"Failed to connect to device": "Nem sikerült csatlakozni az eszközhöz",
|
||||
"Failed to disable adaptive trigger": "Nem sikerült letiltani az adaptív ravaszt",
|
||||
"Failed to set speaker tone": "Nem sikerült beállítani a hangszóró hangját",
|
||||
"Failed to set vibration": "Nem sikerült beállítani a rezgést",
|
||||
"Feel for vibration in the controller.": "Érezd a rezgést a kontrollerben.",
|
||||
"Fortnite": "Fortnite",
|
||||
"Haptic Vibration": "Haptikus rezgés",
|
||||
"Headphone Jack": "Fejhallgató-csatlakozó",
|
||||
"Increase non-circularity": "Nem-körkörösség növelése",
|
||||
"Info": "Infó",
|
||||
"Instructions": "Utasítások",
|
||||
"Keep rotating the sticks even if you see no progress!": "Forgasd tovább a karokat akkor is, ha nem látsz változást!",
|
||||
"Learn more...": "Tudj meg többet...",
|
||||
"Lights": "Fények",
|
||||
"Listen for a tone from the controller speaker.": "Figyeld a hangjelzést a kontroller hangszórójából.",
|
||||
"Long-press [circle] to skip ahead.": "Nyomd hosszan a [kör] gombot a kihagyáshoz.",
|
||||
"Microphone": "Mikrofon",
|
||||
"Microphone Level:": "Mikrofon szint:",
|
||||
"Move the stick to select it for tuning, then without touching the stick use the D-pad buttons to adjust the center point. Flick it and adjust it again if it is off center or flickers.": "Mozgasd meg a kart a kiválasztáshoz, majd anélkül, hogy hozzáérnél, használd a D-pad (nyíl) gombokat a középpont beállításához. Pöccintsd meg, és állítsd be újra, ha nincs középen vagy ugrál.",
|
||||
"No controller connected": "Nincs csatlakoztatva kontroller",
|
||||
"No tests completed yet.": "Még nincsenek befejezett tesztek.",
|
||||
"Normal": "Normál",
|
||||
"Not tested": "Nincs tesztelve",
|
||||
"Pass": "Sikeres",
|
||||
"Passed": "Sikeres",
|
||||
"Please connect a DualShock 4, a DualSense, DualSense Edge or VR2 controller to your computer and press Connect.": "Kérlek, csatlakoztass egy DualShock 4, DualSense, DualSense Edge vagy VR2 kontrollert a számítógépedhez, és kattints a Csatlakozás gombra.",
|
||||
"Please release the stick to center position before adjusting with D-pad buttons.": "Kérlek, engedd el a kart középső állásba, mielőtt a D-pad gombokkal módosítanád.",
|
||||
"Plug in headphones to the 3.5mm jack": "Csatlakoztass egy fejhallgatót a 3,5 mm-es jack aljzathoz",
|
||||
"Press L2 and R2 triggers to feel the trigger resistance.": "Nyomd meg az L2 és R2 ravaszokat az ellenállás érzékeléséhez.",
|
||||
"Press [circle] to close, or [square] to start over": "Nyomd meg a [kör] gombot a bezáráshoz, vagy a [négyzet] gombot az újrakezdéshez",
|
||||
"Press [square] to Pass, [cross] to Fail, or [circle] to skip.": "Nyomd meg a [négyzet] gombot, ha Sikeres, a [kereszt] gombot, ha Sikertelen, vagy a [kör] gombot a kihagyáshoz.",
|
||||
"Press [square] to begin or [circle] to close": "Nyomd meg a [négyzet] gombot a kezdéshez, vagy a [kör] gombot a bezáráshoz",
|
||||
"Press [triangle] to go back.": "Nyomd meg a [háromszög] gombot a visszalépéshez.",
|
||||
"Press each button until they turn green.": "Nyomj meg minden gombot, amíg zöldre nem váltanak.",
|
||||
"Press the D-pad or face buttons in the direction you want the stick position to move.": "Nyomd a D-padot vagy az előlapi gombokat abba az irányba, amerre a kar pozícióját mozgatni szeretnéd.",
|
||||
"Progress": "Folyamat",
|
||||
"Push the stick straight up/down/left/right as far as possible.": "Told a kart egyenesen fel/le/balra/jobbra, ameddig csak lehet.",
|
||||
"Quick Test": "Gyors teszt",
|
||||
"Quick calibrate": "Gyors kalibrálás",
|
||||
"Range calibration appears to have failed. Please try again and make sure you rotate the sticks.": "Úgy tűnik, a tartománykalibrálás sikertelen volt. Kérlek, próbáld újra, és győződj meg róla, hogy forgatod a karokat.",
|
||||
"Repeat": "Ismétlés",
|
||||
"Restart": "Újraindítás",
|
||||
"Rotate the sticks slowly at least 2 times in one direction and 2 times in the other direction to cover the whole range.": "Forgasd a karokat lassan legalább kétszer az egyik irányba, és kétszer a másik irányba, hogy a teljes tartományt lefedd.",
|
||||
"Run through these tests to verify your controller's functionality.": "Futtasd le ezeket a teszteket a kontroller működésének ellenőrzéséhez.",
|
||||
"Show raw numbers": "Nyers adatok mutatása",
|
||||
"Sony controllers come from the factory calibrated to have an average circularity error of nearly 10 %, and this is now what games expect. Too perfect circularity can make movements and aim feel stiff and unresponsive in some games.": "A Sony kontrollerek gyárilag közel 10%-os átlagos körkörösségi hibával érkeznek, és a játékok jelenleg ezt várják el. A túl tökéletes körkörösség miatt a mozgás és a célzás merevnek és érzéketlennek tűnhet bizonyos játékokban.",
|
||||
"Speaker": "Hangszóró",
|
||||
"Spider-Man 2": "Spider-Man 2",
|
||||
"Step size": "Lépésköz",
|
||||
"Test Speaker": "Hangszóró tesztelése",
|
||||
"Test Summary": "Teszt összesítése",
|
||||
"Test all buttons, or long-press [square] to Pass and [cross] to Fail, or [circle] to skip.": "Teszteld az összes gombot, vagy nyomd hosszan a [négyzet] gombot, ha Sikeres, a [kereszt] gombot, ha Sikertelen, vagy a [kör] gombot a kihagyáshoz.",
|
||||
"The <b>Done</b> button will unlock after at most 15 seconds. If you press <b>Done</b> without rotating the sticks, the calibration will be incomplete and you will need to repeat it.": "A <b>Kész</b> gomb legfeljebb 15 másodperc múlva válik elérhetővé. Ha a karok forgatása nélkül nyomod meg a <b>Kész</b> gombot, a kalibrálás hiányos lesz, és meg kell ismételned.",
|
||||
"The Last of Us": "The Last of Us",
|
||||
"The device appears to be a clone. All calibration functionality is disabled.": "Az eszköz hamisítványnak tűnik. Minden kalibrációs funkció letiltásra került.",
|
||||
"The device is connected via Bluetooth. Disconnect and reconnect using a USB cable instead.": "Az eszköz Bluetooth-on keresztül csatlakozik. Válaszd le, és csatlakoztasd inkább USB-kábellel.",
|
||||
"This test checks all controller buttons by requiring you to press each button up to three times.": "Ez a teszt az összes kontrollergombot ellenőrzi; minden gombot akár háromszor is meg kell nyomnod.",
|
||||
"This test checks the headphone jack functionality.": "Ez a teszt a fejhallgató-csatlakozó működését ellenőrzi.",
|
||||
"This test checks the reliability of the USB port.": "Ez a teszt az USB-port megbízhatóságát ellenőrzi.",
|
||||
"This test will cycle through red, green, and blue colors on the controller lightbar, animate the player indicator lights, and flash the mute button.": "Ez a teszt végigmegy a piros, zöld és kék színeken a fénysávon, animálja a játékosjelző fényeket, és villogtatja a némítás gombot.",
|
||||
"This test will enable heavy resistance on both L2 and R2 triggers.": "Ez a teszt erős ellenállást kapcsol be mind az L2, mind az R2 ravaszon.",
|
||||
"USB Connector": "USB csatlakozó",
|
||||
"Watch the controller lights change colors, the player lights animate, and the mute button flash.": "Figyeld, ahogy a kontroller fényei színt váltanak, a játékosjelzők animálódnak, és a némítás gomb villog.",
|
||||
"While holding the stick to be adjusted straight up/down/left/right, make adjustments until you see lightblue sectors in all four directions after circling the stick both left and right. Then use the": "Miközben a beállítandó kart egyenesen fel/le/balra/jobbra tartod, végezd el a módosításokat, amíg világoskék szektorokat nem látsz mind a négy irányban, miután a kart balra és jobbra is körbeforgattad. Ezután használd a",
|
||||
"Wiggle the USB cable to see if the controller disconnects.": "Mozgasd meg az USB-kábelt, hogy lásd, szétkapcsol-e a kontroller.",
|
||||
"Your device might not be a genuine Sony controller. If it is not a clone then please report this issue.": "Lehetséges, hogy az eszközöd nem eredeti Sony kontroller. Ha nem hamisítvány, kérlek, jelentsd ezt a problémát.",
|
||||
"failed": "sikertelen",
|
||||
"hide": "elrejtés",
|
||||
"passed": "sikeres",
|
||||
"skipped": "kihagyva",
|
||||
"tests completed": "befejezett teszt",
|
||||
"to increase the non-circularity.": "a nem-körkörösség növeléséhez.",
|
||||
"After they have been replaced, this utility can be used to calibrate the controller to work with the new joysticks.": "A cserét követően ez az eszköz használható a kontroller kalibrálására, hogy az új karokkal megfelelően működjön.",
|
||||
"Aim for a circularity error of around 7-9 % for the best playing experience.": "Célozz meg 7-9% körüli körkörösségi hibát a legjobb játékélmény érdekében.",
|
||||
"Battery level is low. Tests may fail due to the controller being in power saving mode.": "Az akkumulátor töltöttségi szintje alacsony. A tesztek sikertelenek lehetnek, mert a kontroller energiatakarékos módban van.",
|
||||
"Calibrating without replacing the joysticks may help temporarily, but it may also make the problem worse, with no way to undo it.": "A karok cseréje nélküli kalibrálás átmenetileg segíthet, de ronthat is a problémán, visszaállítási lehetőség nélkül.",
|
||||
"Calibration History": "Kalibrálási előzmények",
|
||||
"Cannot copy text to the clipboard:": "Nem sikerült a vágólapra másolni a szöveget:",
|
||||
"Cannot read module barcodes": "Nem olvashatók a modul vonalkódjai",
|
||||
"Clear All": "Összes törlése",
|
||||
"Current": "Jelenlegi",
|
||||
"Delete": "Törlés",
|
||||
"Delete all calibration history for this controller? This cannot be undone.": "Törlöd a kontroller összes kalibrálási előzményét? Ez a művelet nem vonható vissza.",
|
||||
"Delete this calibration entry?": "Törlöd ezt a kalibrálási bejegyzést?",
|
||||
"Drift is caused by mechanical parts in the joystick being worn out, and they need to be replaced to fix the drift.": "A driftet (kúszást) a joystick mechanikus alkatrészeinek kopása okozza, amelyek cserére szorulnak a hiba elhárításához.",
|
||||
"Firefox is supported with the WebHID extension installed.": "A Firefox csak a WebHID kiegészítő telepítésével támogatott.",
|
||||
"It appears the latest joystick calibration has not been saved.": "Úgy tűnik, a legutóbbi joystick kalibráció nem lett elmentve.",
|
||||
"Last connected": "Utoljára csatlakoztatva",
|
||||
"No saved calibrations found.": "Nem található mentett kalibráció.",
|
||||
"Please use a web browser with WebHID support (e.g. Google Chrome or Microsoft Edge) on a PC or Mac.": "Kérlek, használj WebHID támogatással rendelkező böngészőt (pl. Google Chrome vagy Microsoft Edge) PC-n vagy Mac-en.",
|
||||
"Restore": "Visszaállítás",
|
||||
"Restore calibration": "Kalibráció visszaállítása",
|
||||
"The calibration was restored successfully! Remember to save the changes in order not to loose them when the controller is rebooted.": "A kalibráció visszaállítása sikeres volt! Ne felejtsd el menteni a változtatásokat, hogy ne vesszenek el a kontroller újraindításakor.",
|
||||
"The item has been copied to the clipboard.": "Az elem a vágólapra másolva.",
|
||||
"This controller has unsaved changes that will be lost when the controller is rebooted.": "A kontrolleren mentetlen változtatások vannak, amelyek elvesznek az újraindításkor.",
|
||||
"This utility cannot fix stick drift.": "Ez az eszköz nem tudja kijavítani a stick driftet.",
|
||||
"Unsupported browser.": "Nem támogatott böngésző.",
|
||||
"Use expert mode": "Szakértő mód használata",
|
||||
"Use four-step calibration": "Négy lépéses kalibrálás használata",
|
||||
"Use normal mode": "Normál mód használata",
|
||||
"Use quick calibration": "Gyors kalibrálás használata",
|
||||
"Using this utility on a phone or tablet is not supported.": "Ennek az eszköznek a használata telefonon vagy táblagépen nem támogatott.",
|
||||
"Values": "Értékek",
|
||||
"You should save your changes, or reboot the controller to revert back to the previous state.": "Mentsd el a változtatásokat, vagy indítsd újra a kontrollert az előző állapot visszaállításához.",
|
||||
"serial number": "sorozatszám",
|
||||
"(DualSense & DualSense Edge) Will updating the firmware reset calibration?": "",
|
||||
"(DualSense Edge) Is the calibration stored on the controller or the modules?": "",
|
||||
"A sample test was done with 30 dualsense edge modules, and the results showed that the inner quartile range (IQR) is 8.3% and 9.0%, with an average of 8.6%. This goes to show that stock controllers by default have a relatively high range, and the rule of thumb is to follow factory calibration.": "",
|
||||
"Can I overwrite a (permanent) calibration?": "",
|
||||
"Can I restore a previous calibration?": "",
|
||||
"Finetuning is only available for DualSense and DualSense Edge.": "",
|
||||
"God of War 20th Anniversary": "",
|
||||
"Housing": "",
|
||||
"How do I use the finetuning feature?": "",
|
||||
"If you don't have a battery connected or the connected battery is empty, AND your cable disconnects during saving the calibration, then your controller has a high chance of being bricked.": "",
|
||||
"If you have not clicked the green button \"Save changes permanently\", then unplugging the controller will reset to the previously saved calibration. It is recommended you test your calibration before saving.": "",
|
||||
"If you have saved the changes permanently, you can reset the changes only if you are using a DualSense or DualSense Edge. You can click on the grey button \"Restore Calibration\" to go back to one of the previous calibrations that was saved on the controller. Known issue: You may need to reboot your controller first in order for previous calibrations to show up.": "",
|
||||
"Image 1": "",
|
||||
"Images": "",
|
||||
"In most cases, calibrating your joysticks that have prior drift issues may result in a worse and unpredictable calibration.": "",
|
||||
"Not shown in the video: You can now also increase the range in each direction uniformly by using the cross in the top right and moving the slider up, which may speed up finetuning. Make sure to rotate the joystick first, otherwise the button cannot be pressed.": "",
|
||||
"Only official controllers are supported, no third-party or \"fake\" controllers.": "",
|
||||
"Option 1": "",
|
||||
"Option 2": "",
|
||||
"PlayStation Virtual Reality 2": "",
|
||||
"Saving calibration is locked by default on DualSense Edge joystick modules. A hardware mod is required to save the calibration permanently. The calibration is saved on the modules themselves, so you have to perform the mod twice: once for each module. You would need to bridge two points on the PCB with enamelled wire. There are multiple methods, I personally recommend using either of these two locations to solder the wire to. See images below. Ensure the wire is thin enough so that the shell is closed properly. Make sure you don't short the wire to ground through the letters near the bottom joint.": "",
|
||||
"Sony DualShock 4": "",
|
||||
"The calibration is stored on each module individually. It is carried over if you place the modules in a different DualSense Edge. Likewise, if you place a different set of modules in your DualSense Edge, you will get a different calibration that is tied to those new modules.": "",
|
||||
"The finetuning and quick test menus are only accessible for DualSense and DualSense Edge.": "",
|
||||
"The website supports the following official controllers:": "",
|
||||
"These previous calibrations are stored locally in your browser's storage. Meaning you can only restore calibrations using the same computer and browser that you used to calibrate it with, and deleting the cache or using Incognito will make any previous calibration irrecoverable.": "",
|
||||
"This software is not intended to fix stickdrift and will <b>not</b> fix stickdrift on its own if you already experience that.": "",
|
||||
"This video from V2.16 shows how to use the finetuning menu.": "",
|
||||
"We recommend a circularity between 7% and 9%. The reason for this is to mimic a stock controllers calibration. However, symmetrical overshoot is more important and if you need to deviate from this range to achieve better symmetry, that is fine too.": "",
|
||||
"What are the risks of using the calibration?": "",
|
||||
"What circularity percentage to aim for when calibrating and finetuning.": "",
|
||||
"What the software will help with, is ensuring new joysticks will function properly after replacing the old broken joysticks that drift. This step involves opening up the controller and soldering new potentiometers or an entire new joystick.": "",
|
||||
"When calibrating, there is no risk. However, if your controller disconnects during the split second that you save a calibration, then you have a chance of bricking your controller. Make sure your battery has enough charge and is plugged into the controller, and the USB cable is securely connected. This prevents your controller from being bricked if the USB cable accidentally disconnects.": "",
|
||||
"Which controllers does DualShock Calibration GUI support?": "",
|
||||
"Yes. Simply do another calibration, and click the green button to save permanently.": "",
|
||||
"": ""
|
||||
}
|
||||
355
lang/it_it.json
@@ -1,26 +1,18 @@
|
||||
{
|
||||
".authorMsg": "- Traduzione in Italiano a cura di <a href='https://blog.the.al'>the_al</a>",
|
||||
"DualShock Calibration GUI": "GUI di Calibrazione DualShock",
|
||||
"Unsupported browser. Please use a web browser with WebHID support (e.g. Chrome).": "Browser non supportato. Visita questo sito usando un browser con supporto WebHID (es. Google Chrome).",
|
||||
"Connect a DualShock 4 or a DualSense controller to your computer and press Connect.": "Collega un controller DualShock 4 o DualSense al computer e premi Connetti",
|
||||
"Connect": "Connetti",
|
||||
"Connected to:": "Connesso a:",
|
||||
"Disconnect": "Disconnetti",
|
||||
"Firmware Info": "Informazioni sul Firmware",
|
||||
"Calibrate stick center": "Ricentra gli analogici",
|
||||
"Calibrate stick range (permanent)": "Calibra il range degli analogici (permanente)",
|
||||
"Calibrate stick range (temporary)": "Calibra il range degli analogici (temporaneo)",
|
||||
"Reset controller": "Resetta il controller",
|
||||
"Calibrate stick range": "Calibra il range degli analogici",
|
||||
"Sections below are not useful, just some debug infos or manual commands": "Le sezioni qua sotto non sono utili, sono per debug o comandi manuali",
|
||||
"NVS Status": "Stato NVS",
|
||||
"Unknown": "Sconosciuto",
|
||||
"BD Addr": "Indirizzo BD",
|
||||
"Debug buttons": "Pulsanti di debug",
|
||||
"Debug buttons": "Pulsanti di Debug",
|
||||
"Query NVS status": "Ottieni stato NVS",
|
||||
"NVS unlock": "Sblocca NVS",
|
||||
"NVS lock": "Blocca NVS",
|
||||
"Get BDAddr": "Ottieni indirizzo BD",
|
||||
"Fast calibrate stick center (OLD)": "Ricentra velocemente gli analogici (vecchio)",
|
||||
"Stick center calibration": "Calibrazione del centro degli analogici",
|
||||
"Welcome": "Benvenuto",
|
||||
"Step 1": "Step 1",
|
||||
@@ -29,13 +21,8 @@
|
||||
"Step 4": "Step 4",
|
||||
"Completed": "Completato",
|
||||
"Welcome to the stick center-calibration wizard!": "Benvenuto nel wizard di calibrazione degli analogici",
|
||||
"This tool will guide you in re-centering the analog sticks of your controller. It consists in four steps: you will be asked to move both sticks in a direction and release them.": "Questo strumento ti guida nel ricentrare le levette analogiche del tuo controller. Consiste in quattro passi: ti verrà chiesto di spostare entrambi gli analogici in una direzione e poi rilasciarli.",
|
||||
"Please be aware that, <i>once the calibration is running, it cannot be canceled</i>. Do not close this page or disconnect your controller until is completed.": "Attenzione: <i>se la calibrazione è in corso, non può essere annullata</i>. Non chiudere questa pagina e non disconnettere il controller finché non è completata.",
|
||||
"Calibration storage": "Salvataggio della calibrazione",
|
||||
"By default the calibration is only saved in a volatile storage, so that if you (or this tool) mess something up, a reset of the controller is enough to make it work again.": "Di base, la calibrazione è salvata solo in memoria temporanea, in modo che se qualcosa va storto, un reset risolve il problema.",
|
||||
"If you wish to store the calibration permanently in the controller, tick the checkbox below:": "Se preferisci salvare la calibrazione permanentemente nel controller, spunta la casella qua sotto:",
|
||||
"Write changes permanently in the controller": "Salva i cambiamenti permanentemente nel controller",
|
||||
"<small>Warning: <font color=\"red\">Do not store the calibration permanently if the controller battery is low or disconnected. It will damage your controller.</font></small>": "<small>Attenzione: <font color='red'>Non salvare permanentemente la calibrazione se la batteria del controller è bassa o disconnessa. Questo potrebbe danneggiare il controller.</font></small>",
|
||||
"This tool will guide you in re-centering the analog sticks of your controller. It consists of four steps: you will be asked to move both sticks in a direction and release them.": "Questo strumento ti guida nel ricentrare le levette analogiche del tuo controller. Consiste in quattro passi: ti verrà chiesto di spostare entrambi gli analogici in una direzione e poi rilasciarli.",
|
||||
"Please be aware that, <i>once the calibration is running, it cannot be canceled</i>. Do not close this page or disconnect your controller until it is completed.": "Attenzione: <i>se la calibrazione è in corso, non può essere annullata</i>. Non chiudere questa pagina e non disconnettere il controller finché non è completata.",
|
||||
"Press <b>Start</b> to begin calibration.": "Premi <b>Avvia</b> per avviare la calibrazione",
|
||||
"Please move both sticks to the <b>top-left corner</b> and release them.": "Muovi entrambi gli analogici <b>in alto a sinistra</b> e rilasciali.",
|
||||
"When the sticks are back in the center, press <b>Continue</b>.": "Quando le levette sono nuovamente al centro, premi <b>Continua</b>",
|
||||
@@ -44,11 +31,10 @@
|
||||
"Please move both sticks to the <b>bottom-right corner</b> and release them.": "Muovi entrambi gli analogici <b>in basso a destra</b> e rilasciali.",
|
||||
"Calibration completed successfully!": "Calibrazione completata con successo!",
|
||||
"Next": "Avanti",
|
||||
"Recentering the controller sticks. ": "Ricentro gli analogici. ",
|
||||
"Recentering the controller sticks.": "Ricentro gli analogici.",
|
||||
"Please do not close this window and do not disconnect your controller. ": "Non chiudere questa finestra e non disconnettere il controller. ",
|
||||
"Range calibration": "Calibrazione del range",
|
||||
"<b>The controller is now sampling data!</b>": "<b>Il controller sta campionando i dati!</b>",
|
||||
"Rotate the sticks slowly to cover the whole range. Press \"Done\" when completed.": "Ruota gli analogici lentamente in modo da coprire l'intero range. Premi \"Fatto\" quando hai finito.",
|
||||
"The controller is now sampling data!": "Il controller sta campionando i dati!</b>",
|
||||
"Done": "Fatto",
|
||||
"Hi, thank you for using this software.": "Ciao, grazie per aver usato questo software.",
|
||||
"If you're finding it helpful and you want to support my efforts, feel free to": "Se lo hai trovato utile e vuoi supportare i miei sforzi, sentiti libero di",
|
||||
@@ -57,63 +43,322 @@
|
||||
"Do you have any suggestion or issue? Drop me a message via email or discord.": "Hai qualche suggerimento o problema? Lasciami un messaggio via email o discord.",
|
||||
"Cheers!": "A presto!",
|
||||
"Support this project": "Supporta il progetto",
|
||||
|
||||
"unknown": "sconosciuto",
|
||||
"original": "originale",
|
||||
"clone": "clone",
|
||||
"original": "originale",
|
||||
"clone": "clone",
|
||||
"locked": "bloccato",
|
||||
"unlocked": "sbloccato",
|
||||
"error": "errore",
|
||||
"Build Date:": "Data Build:",
|
||||
"HW Version:": "Versione HW:",
|
||||
"SW Version:": "Versione SW:",
|
||||
"Device Type:": "Tipo Device:",
|
||||
"Firmware Type:": "Tipo Firmware:",
|
||||
"SW Series:": "Serie SW:",
|
||||
"HW Info:": "Info HW:",
|
||||
"SW Version:": "Versione SW:",
|
||||
"UPD Version:": "Versione UPD:",
|
||||
"FW Version1:": "Versione FW1:",
|
||||
"FW Version2:": "Versione FW2:",
|
||||
"FW Version3:": "Versione FW3:",
|
||||
|
||||
"Build Date": "Data Build",
|
||||
"HW Version": "Versione HW",
|
||||
"SW Version": "Versione SW",
|
||||
"Device Type": "Tipo Device",
|
||||
"Range calibration completed": "Calibrazione range completata",
|
||||
"Range calibration failed: ": "Calibrazione range fallita: ",
|
||||
"Cannot unlock NVS": "Impossibile sbloccare NVS",
|
||||
"Cannot relock NVS": "Impossibile ribloccare NVS",
|
||||
"Error 1": "Errore 1",
|
||||
"Error 2": "Errore 2",
|
||||
"Error 3": "Errore 3",
|
||||
"Stick calibration failed: ": "Calibrazione analogici fallita: ",
|
||||
"Range calibration failed": "Calibrazione range fallita",
|
||||
"Stick calibration failed": "Calibrazione analogici fallita",
|
||||
"Stick calibration completed": "Calibrazione analogici completata",
|
||||
"NVS Lock failed: ": "Blocco NVS fallito: ",
|
||||
"NVS Unlock failed: ": "Sblocco NVS fallito: ",
|
||||
"NVS Lock failed": "Blocco NVS fallito",
|
||||
"NVS Unlock failed": "Sblocco NVS fallito",
|
||||
"Please connect only one controller at time.": "Connettere un solo controller alla volta, grazie.",
|
||||
"Sony DualShock 4 V1": "Sony DualShock 4 V1",
|
||||
"Sony DualShock 4 V2": "Sony DualShock 4 V2",
|
||||
"Sony DualSense": "Sony DualSense",
|
||||
"Sony DualSense Edge": "Sony DualSense Edge",
|
||||
"Connected invalid device: ": "Connesso dispositivo non valido: ",
|
||||
"Calibration of the DualSense Edge is not currently supported.": "",
|
||||
"The device appears to be a DS4 clone. All functionalities are disabled.": "",
|
||||
"Error: ": "Errore: ",
|
||||
"My handle on discord is: the_al": "Il mio handle su discord è: the_al",
|
||||
"Connected invalid device": "Connesso dispositivo non valido",
|
||||
"Error": "Errore",
|
||||
"Initializing...": "Inizializzo...",
|
||||
"Storing calibration...": "Salvo la calibrazione...",
|
||||
"Sampling...": "Campiono...",
|
||||
"Calibration in progress": "Calibrazione in corso",
|
||||
"Start": "Avvia",
|
||||
"Done": "Fatto",
|
||||
"Continue": "Continua",
|
||||
"You can check the calibration with the": "Puoi controllare la calibrazione con il",
|
||||
"Have a nice day :)": "Buona giornata! :)",
|
||||
"Welcome to the Calibration GUI": "Benvenuto alla Calibration GUI",
|
||||
"Just few things to know before you can start:": "Alcune cose da sapere prima di iniziare:",
|
||||
"Just few things to know before you can start:": "Alcune cose da sapere prima di iniziare:",
|
||||
"This website is not affiliated with Sony, PlayStation & co.": "Questo sito web non è affiliato con Sony, PlayStation & co.",
|
||||
"This service is provided without warranty. Use at your own risk.": "Questo servizio è fornito senza garanzia. Usalo a tuo rischio. ",
|
||||
"This service is provided without warranty. Use at your own risk.": "Questo servizio è fornito senza garanzia. Usalo a tuo rischio. ",
|
||||
"Keep the internal battery of the controller connected and ensure it is well charged. If the battery dies during operations, the controller will be damaged and rendered unusable.": "Tieni sempre la batteria interna del controller collegata, e assicurati che sia carica. Se il controller si spegne durante le operazioni, diventerà inutilizzabile.",
|
||||
"Before doing the permanent calibration, try the temporary one to ensure that everything is working well.": "Non eseguire fin da subito le calibrazioni permanenti, inizia con quelle temporanee e controlla che sia tutto ok!",
|
||||
"Understood": "Ho capito",
|
||||
"Version": "Versione",
|
||||
"Frequently Asked Questions": "Domande frequenti",
|
||||
"Close": "Chiudi",
|
||||
"Welcome to the F.A.Q. section! Below, you'll find answers to some of the most commonly asked questions about this website. If you have any other inquiries or need further assistance, feel free to reach out to me directly. Your feedback and questions are always welcome!": "Benvenuto nella sezione Domande frequenti! Qui sotto puoi trovare risposte ad alcune delle domande più frequenti su questo sito web. Se hai altre domande o hai bisogno di ulteriore assistenza, non esitare a contattarmi direttamente. Un feedback o domande sono sempre benvenute!",
|
||||
"How does it work?": "Come funziona?",
|
||||
"Behind the scenes, this website is the culmination of one year of dedicated effort in reverse-engineering DualShock controllers for fun/hobby from a random guy on the internet.": "Dietro le quinte, questo sito web è il risultato di un anno di impegno dedicato al reverse-engineering dei controller DualShock per divertimento/hobby da parte di un ragazzo a caso su internet.",
|
||||
"Through": "Attraverso",
|
||||
"this research": "questa ricerca",
|
||||
", it was discovered that there exist some undocumented commands on DualShock controllers that can be sent via USB and are used during factory assembly process. If these commands are sent, the controller starts the recalibration of analog sticks.": ", è stato scoperto che esistono alcuni comandi non documentati sui controller DualShock che possono essere inviati tramite USB e vengono utilizzati durante il processo di assemblaggio in fabbrica. Se questi comandi vengono inviati, il controller avvia la ricalibrazione dei joystick analogici.",
|
||||
"While the primary focus of this research wasn't initially centered on recalibration, it became apparent that a service offering this capability could greatly benefit numerous individuals. And thus, here we are.": "Sebbene il focus principale di questa ricerca non fosse inizialmente centrato sulla ricalibrazione, è diventato evidente che un servizio che offrisse questa capacità potesse essere di grande beneficio per numerose persone. E quindi, eccoci qui.",
|
||||
"Is this an officially endorsed service?": "Questo è un servizio ufficialmente approvato?",
|
||||
"No, this service is simply a creation by a DualShock enthusiast.": "No, questo servizio è semplicemente una creazione di un appassionato di DualShock.",
|
||||
"Does this website detect if a controller is a clone?": "Questo sito web rileva se un controller è un clone?",
|
||||
"Yes, only DualShock4 at the moment. This happened because I accidentally purchased some clones, spent time identifying the differences and added this functionality to prevent future deception.": "Sì, solo DualShock4 al momento. Questo è successo perché ho acquistato accidentalmente alcuni cloni, ho passato del tempo ad identificare le differenze e ho aggiunto questa funzionalità per evitare future frodi.",
|
||||
"Unfortunately, the clones cannot be calibrated anyway, because they only clone the behavior of a DualShock4 during normal gameplay, not all the undocumented functionalities.": "Sfortunatamente, i cloni non possono essere comunque calibrati, perché clonano solo il comportamento di un DualShock4 durante un gameplay normale, non tutte le funzionalità non documentate.",
|
||||
"If you want to extend this detection functionality to DualSense, please ship me a fake DualSense and you'll see it in few weeks.": "Se vuoi estendere questa funzionalità di rilevamento anche a DualSense, spediscimi un clone e vedrai il servizio attivo tra qualche settimana.",
|
||||
"What development is in plan?": "Quali sviluppi sono previsti?",
|
||||
"I maintain two separate to-do lists for this project, although the priority has yet to be established.": "Mantengo due elenchi di cose da fare separati per questo progetto, anche se la priorità deve ancora essere stabilita.",
|
||||
"The first list is about enhancing support for DualShock4 and DualSense controllers:": "Il primo elenco riguarda il potenziamento del supporto per i controller DualShock4 e DualSense:",
|
||||
"Implement calibration of L2/R2 triggers.": "Implementare la calibrazione dei grilletti L2/R2.",
|
||||
"Improve detection of clones, particularly beneficial for those seeking to purchase used controllers with assurance of authenticity.": "Migliorare il rilevamento dei cloni, particolarmente utile per coloro che cercano di acquistare controller usati con la garanzia di autenticità.",
|
||||
"Add support for recalibrating IMUs.": "Aggiungere il supporto per la ricalibrazione degli IMU.",
|
||||
"Additionally, explore the possibility of reviving non-functioning DualShock controllers (further discussion available on Discord for interested parties).": "Inoltre, esplorare la possibilità di ripristinare i controller DualShock non funzionanti (ulteriori discussioni disponibili su Discord per gli interessati).",
|
||||
"The second list contains new controllers I aim to support:": "Il secondo elenco contiene i nuovi controller che spero di supportare presto:",
|
||||
"DualShock 3": "DualShock 3",
|
||||
"XBox Controllers": "Controller Xbox",
|
||||
"Each of these tasks presents both immense interest and significant time investment. To provide context, supporting a new controller typically demands 6-12 months of full-time research, alongside a stroke of good fortune.": "Ciascuno di questi compiti presenta un interesse immenso e un significativo investimento di tempo. Per darti un'idea, supportare un nuovo controller richiede tipicamente da 6 a 12 mesi di ricerca a tempo pieno, oltre a una buona dose di fortuna.",
|
||||
"I love this service, it helped me! How can I contribute?": "Adoro questo servizio, mi ha aiutato! Come posso contribuire?",
|
||||
"I'm glad to hear that you found this helpful! If you're interested in contributing, here are a few ways you can help me:": "Sono felice di sapere che hai trovato utile questo servizio! Se sei interessato a contribuire, ecco alcuni modi in cui puoi aiutarmi:",
|
||||
"Consider making a": "Potresti fare una ",
|
||||
"donation": "donazione",
|
||||
"to support my late-night caffeine-fueled reverse-engineering efforts.": "per sostenere le mie sessioni di reverse-engineering notturne a suon di caffè.",
|
||||
"Ship me a controller you would love to add (send me an email for organization).": "Spediscimi un controller che vorresti aggiungere (mandami un'email per l'organizzazione).",
|
||||
"Translate this website in your language": "Traduci questo sito web nella tua lingua",
|
||||
", to help more people like you!": ", per aiutare più persone come te!",
|
||||
"This website uses analytics to improve the service.": "Questo sito web utilizza analytics per migliorare il servizio.",
|
||||
"Board Model": "Modello scheda",
|
||||
"This DualSense controller has outdated firmware.": "Questo controller DualSense ha un firmware non aggiornato.",
|
||||
"Please update the firmware and try again.": "Aggiorna il firmware e riprova.",
|
||||
"Joystick Info": "Informazioni sui Joystick",
|
||||
"Check circularity": "Controlla circolarità",
|
||||
"No.": "No.",
|
||||
"Does this software resolve stickdrift?": "Questo software risolve lo stick drift?",
|
||||
"Stickdrift is caused by a physical defect; namely dirt, worn potentiometer or in some cases a worn spring.": "Lo stick drift è causato da difetti fisici; ad esempio polvere, potenziometri consumati o in alcuni casi una molla consumata.",
|
||||
"After range calibration, joysticks always go in corners.": "Dopo la calibrazione del range, i joystick vanno sempre all'angolo.",
|
||||
"This issue happens because you have clicked \"Done\" immediately after starting a range calibration.": "Questo succede perché hai cliccato \"Fatto\" subito dopo aver avviato la calibrazione del range.",
|
||||
"Please read the instructions.": "Leggi le istruzioni.",
|
||||
"You have to rotate the joysticks before you press \"Done\".": "Devi ruotare i joystick prima di premere \"Fatto\".",
|
||||
"Make sure to touch the edges of the joystick frame and rotate slowly, preferably in each direction - clockwise and anti-clockwise.": "Assicurati di ruotare gli analogici fino a toccare i bordi, preferibilmente in ogni direzione - senso orario e antiorario.",
|
||||
"Only after you have done that, you click on \"Done\".": "Solo dopo che hai fatto questo, clicca \"Fatto\".",
|
||||
"Changes saved successfully": "Modifiche salvate con successo",
|
||||
"Error while saving changes": "Errore nel salvare le modifiche:",
|
||||
"Save changes permanently": "Salva i cambiamenti permanentemente",
|
||||
"Reboot controller": "Riavvia il controller",
|
||||
"Controller Info": "Informazioni sul Controller",
|
||||
"Debug Info": "Informazioni di Debug",
|
||||
"Software": "Software",
|
||||
"Hardware": "Hardware",
|
||||
"FW Build Date": "Data Build FW",
|
||||
"FW Type": "Tipo FW",
|
||||
"FW Series": "Serie FW",
|
||||
"FW Version": "Versione FW",
|
||||
"FW Update": "Aggiornamento FW",
|
||||
"FW Update Info": "Info Aggiornamento FW",
|
||||
"SBL FW Version": "Versione FW SBL",
|
||||
"Venom FW Version": "Versione FW Venom",
|
||||
"Spider FW Version": "Versione FW Spider",
|
||||
"Touchpad FW Version": "Versione FW Touchpad",
|
||||
"Serial Number": "Numero di serie",
|
||||
"MCU Unique ID": "ID univoco MCU",
|
||||
"PCBA ID": "ID PCBA",
|
||||
"Battery Barcode": "Barcode Batteria",
|
||||
"VCM Left Barcode": "Barcode VCM Sinistro",
|
||||
"VCM Right Barcode": "Barcode VCM Destro",
|
||||
"HW Model": "Modello HW",
|
||||
"Touchpad ID": "ID Touchpad",
|
||||
"Bluetooth Address": "Indirizzo Bluetooth",
|
||||
"Show all": "Mostra tutto",
|
||||
"Finetune stick calibration": "Affina calibrazione joystick",
|
||||
"(beta)": "(beta)",
|
||||
"Left stick": "Levetta sinistra",
|
||||
"Right stick": "Levetta destra",
|
||||
"Cancel": "Annulla",
|
||||
"<b>Externally</b>: by applying +1.8V directly to the visible test point without opening the controller.": "<b>Esternamente</b>: applicando +1.8V direttamente al test point visibile senza aprire il controller",
|
||||
"<b>Internally</b>: by soldering a wire from a +1.8V source to the write-protect TP.": "<b>Internamente</b>: saldando un filo da un test point a +1.8V al test point di write-protect.",
|
||||
"Calibration is being stored in the stick modules.": "Sto salvando la calibrazione nei moduli degli stick.",
|
||||
"DualSense Edge Calibration": "Calibrazione del DualSense Edge",
|
||||
"For more info or help, feel free to reach out on Discord.": "Per ulteriori informazioni o supporto, non esitare a contattarci su Discord.",
|
||||
"More details and images": "Ulteriori dettagli e immagini",
|
||||
"Please note: the stick modules on the DS Edge <b>cannot be calibrated via software alone</b>.": "Attenzione: i moduli degli stick del DS Edge <b>non possono essere calibrati solo tramite software</b>.",
|
||||
"To store a custom calibration on the stick's internal memory, a <b>hardware modification</b> is required.": "Per salvare una calibrazione personalizzata nella memoria interna dello stick, è necessaria una <b>modifica hardware</b>.",
|
||||
"Support for calibrating DualSense Edge stick modules is now available as an <b>experimental feature</b>.": "Il supporto per la calibrazione dei moduli stick del DualSense Edge è ora disponibile come <b>funzionalità sperimentale</b>.",
|
||||
"This involves temporarily disabling write protection by applying <b>+1.8V</b> to a specific test point on each module.": "Questo comporta la disattivazione temporanea della protezione scrittura applicando <b>+1.8V</b> a uno specifico punto di test su ciascun modulo.",
|
||||
"This is only for advanced users. If you're not sure what you're doing, please do not attempt it.": "Questa procedura è destinata solo a utenti esperti. Se non sei sicuro di ciò che stai facendo, ti preghiamo di non tentarla.",
|
||||
"We are not responsible for any damage caused by attempting this modification.": "Non siamo responsabili per eventuali danni causati dal tentativo di questa modifica.",
|
||||
"You can do this in two ways:": "Puoi farlo in due modi:",
|
||||
"here": "qui",
|
||||
"Cannot lock": "Non riesco a bloccare il",
|
||||
"Cannot store data into": "Non riesco a salvare i dati nel",
|
||||
"Cannot unlock": "Non riesco a sbloccare il",
|
||||
"Color": "Colore",
|
||||
"If the calibration is not stored permanently, please double-check the wirings of the hardware mod.": "Se la calibrazione non è salvata permanentemente, controlla i cablaggi della mod hardware.",
|
||||
"Left Module Barcode": "Codice modulo sinistro",
|
||||
"Right Module Barcode": "Codice modulo destro",
|
||||
"left module": "modulo sinistro",
|
||||
"right module": "modulo destro",
|
||||
"30th Anniversary": "30th Anniversary",
|
||||
"Astro Bot": "Astro Bot",
|
||||
"Cobalt Blue": "Cobalt Blue",
|
||||
"Cosmic Red": "Cosmic Red",
|
||||
"Galactic Purple": "Galactic Purple",
|
||||
"God of War Ragnarok": "God of War Ragnarok",
|
||||
"Grey Camouflage": "Grey Camouflage",
|
||||
"Midnight Black": "Midnight Black",
|
||||
"Nova Pink": "Nova Pink",
|
||||
"Starlight Blue": "Starlight Blue",
|
||||
"Sterling Silver": "Sterling Silver",
|
||||
"Volcanic Red": "Volcanic Red",
|
||||
"White": "Original White",
|
||||
"Chroma Indigo": "Chroma Indigo",
|
||||
"Chroma Pearl": "Chroma Pearl",
|
||||
"Chroma Teal": "Chroma Teal",
|
||||
"Fortnite": "Fortnite",
|
||||
"Spider-Man 2": "Spider-Man 2",
|
||||
"The Last of Us": "The Last of Us",
|
||||
"10x zoom": "Zoom 10x",
|
||||
"Normal": "Normale",
|
||||
"Calibration": "Calibrazione",
|
||||
"Debug": "Debug",
|
||||
"Info": "Info",
|
||||
"Center (L1)": "Centro (L1)",
|
||||
"Circularity (R1)": "Circolarità (R1)",
|
||||
"Move the stick to select it for tuning, then without touching the stick use the D-pad buttons to adjust the center point. Flick it and adjust it again if it is off center or flickers.": "Sposta lo stick per selezionarlo per la calibrazione, quindi, senza toccare lo stick, usa i pulsanti del D-pad per regolare il punto centrale. Muovi rapidamente lo stick e regola di nuovo se non è centrato o se sfarfalla.",
|
||||
"Please release the stick to center position before adjusting with D-pad buttons.": "Rilascia lo stick al centro prima di usare i pulsanti del D-pad.",
|
||||
"Press the D-pad or face buttons in the direction you want the stick position to move.": "Premi il D-pad o i pulsanti frontali nella direzione in cui vuoi spostare lo stick.",
|
||||
"Push the stick straight up/down/left/right as far as possible.": "Premi lo stick completamente verso l'alto, il basso, sinistra o destra.",
|
||||
"Show raw numbers": "Mostra i dati raw",
|
||||
"<strong>Average circularity error:</strong> smaller is not always better! Aim for 7-9 %.": "<strong>Errore medio di circolarità:</strong> più basso non è sempre meglio! Punta al 7–9 %.",
|
||||
"A reboot is needed to continue using this DualSense Edge. Please disconnect and reconnect your controller.": "È necessario un riavvio per continuare a usare questo DualSense Edge. Disconnetti e ricollega il controller.",
|
||||
"Adaptive Trigger": "Trigger adattivo",
|
||||
"Adaptive triggers are only supported on DualSense controllers": "I trigger adattivi sono supportati solo sui controller DualSense",
|
||||
"Add test": "Aggiungi test",
|
||||
"Be gentle to avoid damage.": "Agisci con delicatezza per evitare danni.",
|
||||
"Buttons": "Pulsanti",
|
||||
"Center": "Centro",
|
||||
"Circularity": "Circolarità",
|
||||
"Controller does not support adaptive trigger control": "Il controller non supporta il controllo dei trigger adattivi",
|
||||
"Don't show again": "Non mostrare più",
|
||||
"Fail": "Errore",
|
||||
"Failed": "Fallito",
|
||||
"Failed to connect to device": "Connessione al dispositivo non riuscita",
|
||||
"Failed to disable adaptive trigger": "Impossibile disattivare il trigger adattivo",
|
||||
"Failed to set speaker tone": "Impossibile attivare il tono dall'altoparlante",
|
||||
"Failed to set vibration": "Impossibile impostare la vibrazione",
|
||||
"Feel for vibration in the controller.": "Senti la vibrazione nel controller.",
|
||||
"Haptic Vibration": "Vibrazione aptica",
|
||||
"Headphone Jack": "Jack cuffie",
|
||||
"Increase non-circularity": "Aumenta la non-circolarità",
|
||||
"Instructions": "Istruzioni",
|
||||
"Keep rotating the sticks even if you see no progress!": "Continua a ruotare le levette anche se non vedi progressi!",
|
||||
"Learn more...": "Scopri di più...",
|
||||
"Lights": "LEDs",
|
||||
"Listen for a tone from the controller speaker.": "Ascolta un tono proveniente dall'altoparlante del controller.",
|
||||
"Long-press [circle] to skip ahead.": "Tieni premuto [circle] per saltare il test.",
|
||||
"Microphone": "Microfono",
|
||||
"Microphone Level:": "Livello microfono:",
|
||||
"No controller connected": "Nessun controller connesso",
|
||||
"No tests completed yet.": "Nessun test completato.",
|
||||
"Not tested": "Non testato",
|
||||
"Pass": "Superato",
|
||||
"Passed": "Superato",
|
||||
"Plug in headphones to the 3.5mm jack": "Collega le cuffie al jack da 3.5mm",
|
||||
"Press L2 and R2 triggers to feel the trigger resistance.": "Premi i trigger L2 e R2 per sentire la resistenza.",
|
||||
"Press [circle] to close, or [square] to start over": "Premi [circle] per chiudere o [square] per ricominciare",
|
||||
"Press [square] to Pass, [cross] to Fail, or [circle] to skip.": "Premi [square] se superato, [cross] se fallito o [circle] per saltare.",
|
||||
"Press [square] to begin or [circle] to close": "Premi [square] per iniziare o [circle] per chiudere",
|
||||
"Press [triangle] to go back.": "Premi [triangle] per tornare indietro.",
|
||||
"Press each button until they turn green.": "Premi ogni pulsante finché non diventa verde.",
|
||||
"Progress": "Progresso",
|
||||
"Quick Test": "Test rapido",
|
||||
"Quick calibrate": "Calibrazione rapida",
|
||||
"Range calibration appears to have failed. Please try again and make sure you rotate the sticks.": "La calibrazione del range sembra non essere riuscita. Riprova assicurandoti di ruotare le levette.",
|
||||
"Repeat": "Ripeti",
|
||||
"Restart": "Riavvia",
|
||||
"Rotate the sticks slowly at least 2 times in one direction and 2 times in the other direction to cover the whole range.": "Ruota lentamente le levette almeno 2 volte in una direzione e 2 nell'altra per coprire l'intero range.",
|
||||
"Run through these tests to verify your controller's functionality.": "Esegui questi test per verificare il corretto funzionamento del controller.",
|
||||
"Sony controllers come from the factory calibrated to have an average circularity error of nearly 10 %, and this is now what games expect. Too perfect circularity can make movements and aim feel stiff and unresponsive in some games.": "I controller Sony escono di fabbrica calibrati con un errore medio di circolarità di circa il 10 %, ed è ciò che i giochi si aspettano. Una circolarità troppo perfetta può rendere i movimenti e la mira rigidi e poco reattivi in alcuni titoli.",
|
||||
"Speaker": "Altoparlante",
|
||||
"Step size": "Dimensione passo",
|
||||
"Test Speaker": "Test altoparlante",
|
||||
"Test Summary": "Riepilogo test",
|
||||
"Test all buttons, or long-press [square] to Pass and [cross] to Fail, or [circle] to skip.": "Testa tutti i pulsanti, oppure tieni premuto [square] per superarlo, [cross] per fallirlo o [circle] per saltare.",
|
||||
"The <b>Done</b> button will unlock after at most 15 seconds. If you press <b>Done</b> without rotating the sticks, the calibration will be incomplete and you will need to repeat it.": "Il pulsante <b>Fine</b> si sbloccherà dopo massimo 15 secondi. Se premi <b>Fine</b> senza ruotare le levette, la calibrazione sarà incompleta e dovrai ripeterla.",
|
||||
"The device is connected via Bluetooth. Disconnect and reconnect using a USB cable instead.": "Il dispositivo è connesso via Bluetooth. Disconnetti e ricollega tramite cavo USB.",
|
||||
"This test checks all controller buttons by requiring you to press each button up to three times.": "Questo test verifica tutti i pulsanti del controller chiedendoti di premerli fino a tre volte ciascuno.",
|
||||
"This test checks the headphone jack functionality.": "Questo test verifica il funzionamento del jack cuffie.",
|
||||
"This test checks the reliability of the USB port.": "Questo test controlla l'affidabilità della porta USB.",
|
||||
"This test will cycle through red, green, and blue colors on the controller lightbar, animate the player indicator lights, and flash the mute button.": "Questo test farà scorrere i colori rosso, verde e blu sulla barra luminosa del controller, animerà i LED giocatore e farà lampeggiare il pulsante mute.",
|
||||
"This test will enable heavy resistance on both L2 and R2 triggers.": "Questo test attiverà un'elevata resistenza su entrambi i grilletti L2 e R2.",
|
||||
"USB Connector": "Connettore USB",
|
||||
"Watch the controller lights change colors, the player lights animate, and the mute button flash.": "Osserva i LED del controller cambiare colore, i LED giocatore animarsi e il pulsante mute lampeggiare.",
|
||||
"While holding the stick to be adjusted straight up/down/left/right, make adjustments until you see lightblue sectors in all four directions after circling the stick both left and right. Then use the": "Tenendo l'analogico da regolare verso l'alto, basso, sinistra o destra, effettua le regolazioni finché non vedi settori azzurri in tutte e quattro le direzioni dopo aver ruotato la levetta in entrambi i sensi. Poi usa",
|
||||
"Wiggle the USB cable to see if the controller disconnects.": "Muovi leggermente il cavo USB per vedere se il controller si disconnette.",
|
||||
"Your device might not be a genuine Sony controller. If it is not a clone then please report this issue.": "Il tuo dispositivo potrebbe non essere un controller Sony originale. Se non è un clone, segnala il problema.",
|
||||
"failed": "fallito",
|
||||
"hide": "nascondi",
|
||||
"passed": "superato",
|
||||
"skipped": "saltato",
|
||||
"tests completed": "test completati",
|
||||
"to increase the non-circularity.": "per aumentare la non-circolarità.",
|
||||
"Please connect a DualShock 4, a DualSense, DualSense Edge or VR2 controller to your computer and press Connect.": "Connetti un controller DualShock 4, DualSense, DualSense Edge o VR2 al computer e premi Connetti.",
|
||||
"Cannot copy text to the clipboard:": "Non posso copiare il testo negli appunti:",
|
||||
"The device appears to be a clone. All calibration functionality is disabled.": "Il dispositivo sembra un clone. Le funzioni di calibrazione sono disattivate.",
|
||||
"The item has been copied to the clipboard.": "Testo copiato negli appunti.",
|
||||
"Cannot read module barcodes": "Errore nella lettura dei codici a barre dei moduli",
|
||||
"After they have been replaced, this utility can be used to calibrate the controller to work with the new joysticks.": "Dopo essere stati sostituiti, questa utility può essere usata per calibrare il controller in modo che funzioni correttamente con i nuovi joystick.",
|
||||
"Aim for a circularity error of around 7-9 % for the best playing experience.": "Mira ad un errore di circolarità del 7-9 % per avere un'ottima esperienza di gioco.",
|
||||
"Battery level is low. Tests may fail due to the controller being in power saving mode.": "La carica della batteria è bassa. I test potrebbero fallire poiché il controller potrebbe essere in risparmio energetico.",
|
||||
"Calibrating without replacing the joysticks may help temporarily, but it may also make the problem worse, with no way to undo it.": "Calibrare senza sostituire i joystick può aiutare temporaneamente, ma potrebbe anche peggiorare il problema senza possibilità di annullare le modifiche.",
|
||||
"Calibration History": "Storico calibrazioni",
|
||||
"Clear All": "Rimuovi tutti",
|
||||
"Current": "Attuale",
|
||||
"Delete": "Rimuovi",
|
||||
"Delete all calibration history for this controller? This cannot be undone.": "Rimuovere lo storico calibrazioni per questo controller? Questa operazione non può essere annullata.",
|
||||
"Delete this calibration entry?": "Rimuovere questa voce?",
|
||||
"Drift is caused by mechanical parts in the joystick being worn out, and they need to be replaced to fix the drift.": "Il drift è causato da parti meccaniche nel joystick che vengono usurate e devono essere sostituite per risolvere il problema.",
|
||||
"Firefox is supported with the WebHID extension installed.": "Firefox è supportato con l'estensione WebHID installata.",
|
||||
"It appears the latest joystick calibration has not been saved.": "Sembra che l'ultima calibrazione non è stata salvata.",
|
||||
"Last connected": "Ultimo connesso",
|
||||
"No saved calibrations found.": "Nessuna calibrazione salvata presente.",
|
||||
"Please use a web browser with WebHID support (e.g. Google Chrome or Microsoft Edge) on a PC or Mac.": "Si prega di usare un browser web con supporto WebHID (es. Google Chrome o Microsoft Edge) su un PC o Mac.",
|
||||
"Restore": "Ripristina",
|
||||
"Restore calibration": "Ripristina calibrazione",
|
||||
"The calibration was restored successfully! Remember to save the changes in order not to loose them when the controller is rebooted.": "La calibrazione è stata ripristinata con successo! Ricordati di salvare i cambiamenti per non perderla quando il controller viene riavviato.",
|
||||
"This controller has unsaved changes that will be lost when the controller is rebooted.": "Questo controller ha cambiamenti non salvati che verranno persi al riavvio.",
|
||||
"This utility cannot fix stick drift.": "Questa utility non risolve il drift degli analogici.",
|
||||
"Unsupported browser.": "Browser non supportato.",
|
||||
"Use expert mode": "Usa modalità esperto",
|
||||
"Use four-step calibration": "Usa calibrazione in quattro passi",
|
||||
"Use normal mode": "Usa modalità normale",
|
||||
"Use quick calibration": "Usa calibrazione veloce",
|
||||
"Using this utility on a phone or tablet is not supported.": "L'utilizzo di questa utility su smartphone o tablet non è supportato.",
|
||||
"Values": "Valori",
|
||||
"You should save your changes, or reboot the controller to revert back to the previous state.": "Dovresti salvare i cambiamenti oppure riavviare il controller per ritornare alla calibrazione precedente.",
|
||||
"serial number": "numero di serie",
|
||||
"(DualSense & DualSense Edge) Will updating the firmware reset calibration?": "(DualSense & DualSense Edge) Aggiornare il fiwmare resetta la calibrazione?",
|
||||
"(DualSense Edge) Is the calibration stored on the controller or the modules?": "(DualSense Edge) La calibrazione è salvata nel controller o nei moduli?",
|
||||
"Saving calibration is locked by default on DualSense Edge joystick modules. A hardware mod is required to save the calibration permanently. The calibration is saved on the modules themselves, so you have to perform the mod twice: once for each module. You would need to bridge two points on the PCB with enamelled wire. There are multiple methods, I personally recommend using either of these two locations to solder the wire to. See images below. Ensure the wire is thin enough so that the shell is closed properly. Make sure you don't short the wire to ground through the letters near the bottom joint.": "Il salvataggio della calibrazione è bloccato di default sui moduli del DualSense Edge. Una modifica hardware è necessaria per salvare la calibrazione permanentemente. La calibrazone è salvata sugli stessi moduli, quindi la modifica dev'essere fatta due volte: una per modulo. Devi fare un ponte fra due punti sul PCB con del rame smaltato. Ci sono vari metodi, suggerisco questi due punti per saldare il filo. Vedi le immagini qua sotto. Assicurati che il filo sia sottile abbastanza in modo che la cover si possa chiudere. Assicurati di non fare un corto circuito con la massa attraverso le lettere vicino al contatto in basso.",
|
||||
"Can I overwrite a (permanent) calibration?": "Posso sovrascrivere una calibrazione (permanente)?",
|
||||
"Can I restore a previous calibration?": "Posso ripristinare una calibrazione precedente?",
|
||||
"Finetuning is only available for DualSense and DualSense Edge.": "Il finetuning è disponibile solo per DualSense e DualSense Edge.",
|
||||
"Housing": "Cover",
|
||||
"How do I use the finetuning feature?": "Come uso la funzione di finetuning?",
|
||||
"If you don't have a battery connected or the connected battery is empty, AND your cable disconnects during saving the calibration, then your controller has a high chance of being bricked.": "Se non hai una batteria collegata o la batteria è scarica, E il cavo si disconnette durante il salvataggio della calibrazione, allora il tuo controller ha alte probabilità di rompersi definitivamente.",
|
||||
"If you have not clicked the green button \"Save changes permanently\", then unplugging the controller will reset to the previously saved calibration. It is recommended you test your calibration before saving.": "Se non hai premuto il tasto verde \"Salva i cambimenti permanentemente\", allora scollegare il controller reimposta la calibrazione precedentemente salvata. È consigliato testare la calibrazione prima di salvarla.",
|
||||
"If you have saved the changes permanently, you can reset the changes only if you are using a DualSense or DualSense Edge. You can click on the grey button \"Restore Calibration\" to go back to one of the previous calibrations that was saved on the controller. Known issue: You may need to reboot your controller first in order for previous calibrations to show up.": "Se hai salvato i cambiamenti permanentemente, puoi resettare i cambiamenti solo se usi un DualSense o DualSense Edge. Puoi cliccare sul tasto grigio \"Ripristina Calibrazione\" per tornare ad una delle precedenti calibrazioni che era salvata sul controller. Problema noto: potresti dover riavviare il controller prima, in modo da far apparire le calibrazioni precedenti.",
|
||||
"Image 1": "Immagine 1",
|
||||
"Images": "Immagini",
|
||||
"In most cases, calibrating your joysticks that have prior drift issues may result in a worse and unpredictable calibration.": "Spesso, calibrare un joystick che ha già problemi di drift può causare una calibrazione preggiore e imprevedibile.",
|
||||
"Not shown in the video: You can now also increase the range in each direction uniformly by using the cross in the top right and moving the slider up, which may speed up finetuning. Make sure to rotate the joystick first, otherwise the button cannot be pressed.": "Non mostrata nel video: puoi anche aumentare il range in ogni direzione uniformemente usando la croce in alto a destra e muovendo lo slider verso l'alto, che può velocizzare il finetuning. Ricordati di ruotare il joystick prima, altrimenti i pulsanti non possono essere premuti.",
|
||||
"Only official controllers are supported, no third-party or \"fake\" controllers.": "Solo controller ufficiali sono supportati, non di terze parti o controller \"fake\".",
|
||||
"Option 1": "Opzione 1",
|
||||
"Option 2": "Opzione 2",
|
||||
"PlayStation Virtual Reality 2": "PlayStation Virtual Reality 2",
|
||||
"Sony DualShock 4": "Sony DualShock 4",
|
||||
"The calibration is stored on each module individually. It is carried over if you place the modules in a different DualSense Edge. Likewise, if you place a different set of modules in your DualSense Edge, you will get a different calibration that is tied to those new modules.": "La calibrazione viene memorizzata singolarmente su ciascun modulo. Verrà mantenuta anche se inserisci i moduli in un altro DualSense Edge. Allo stesso modo, se inserisci un diverso set di moduli nel tuo DualSense Edge, otterrai una calibrazione diversa associata a quei nuovi moduli.",
|
||||
"The finetuning and quick test menus are only accessible for DualSense and DualSense Edge.": "I menu di regolazione fine e test rapido sono accessibili solo per DualSense e DualSense Edge.",
|
||||
"The website supports the following official controllers:": "Il sito web supporta i seguenti controller ufficiali:",
|
||||
"These previous calibrations are stored locally in your browser's storage. Meaning you can only restore calibrations using the same computer and browser that you used to calibrate it with, and deleting the cache or using Incognito will make any previous calibration irrecoverable.": "Le calibrazioni precedenti vengono memorizzate localmente nell'archivio del browser. Ciò significa che puoi ripristinarle solo utilizzando lo stesso computer e browser con cui hai effettuato la calibrazione; eliminare la cache o utilizzare la modalità in incognito renderà impossibile recuperare qualsiasi calibrazione precedente.",
|
||||
"This software is not intended to fix stickdrift and will <b>not</b> fix stickdrift on its own if you already experience that.": "Questo software non è progettato per correggere lo stick drift e <b>non</b> risolverà lo stick drift da solo se il problema è già presente.",
|
||||
"This video from V2.16 shows how to use the finetuning menu.": "Questo video della versione V2.16 mostra come utilizzare il menu di regolazione fine.",
|
||||
"We recommend a circularity between 7% and 9%. The reason for this is to mimic a stock controllers calibration. However, symmetrical overshoot is more important and if you need to deviate from this range to achieve better symmetry, that is fine too.": "Consigliamo una circolarità compresa tra il 7% e il 9%. Il motivo è replicare la calibrazione di un controller originale. Tuttavia, è più importante ottenere un overshoot simmetrico e, se per farlo è necessario uscire da questo intervallo, va bene anche così.",
|
||||
"What are the risks of using the calibration?": "Quali sono i rischi dell'utilizzo della calibrazione?",
|
||||
"What circularity percentage to aim for when calibrating and finetuning.": "Quale percentuale di circolarità è consigliabile raggiungere durante la calibrazione e la regolazione fine.",
|
||||
"What the software will help with, is ensuring new joysticks will function properly after replacing the old broken joysticks that drift. This step involves opening up the controller and soldering new potentiometers or an entire new joystick.": "Questo software aiuta a garantire che i nuovi joystick funzionino correttamente dopo aver sostituito quelli vecchi e difettosi affetti da stick drift. Questa operazione richiede l'apertura del controller e la saldatura di nuovi potenziometri oppure di un joystick completamente nuovo.",
|
||||
"When calibrating, there is no risk. However, if your controller disconnects during the split second that you save a calibration, then you have a chance of bricking your controller. Make sure your battery has enough charge and is plugged into the controller, and the USB cable is securely connected. This prevents your controller from being bricked if the USB cable accidentally disconnects.": "Durante la calibrazione non ci sono rischi. Tuttavia, se il controller si disconnette nell'istante in cui viene salvata la calibrazione, esiste la possibilità che diventi inutilizzabile. Assicurati che la batteria sia sufficientemente carica e collegata al controller e che il cavo USB sia collegato saldamente. In questo modo si evita che il controller diventi inutilizzabile nel caso in cui il cavo USB si scolleghi accidentalmente.",
|
||||
"Which controllers does DualShock Calibration GUI support?": "Quali controller sono supportati da DualShock Calibration GUI?",
|
||||
"Yes. Simply do another calibration, and click the green button to save permanently.": "Sì. È sufficiente eseguire una nuova calibrazione e fare clic sul pulsante verde per salvarla in modo permanente.",
|
||||
"A sample test was done with 30 dualsense edge modules, and the results showed that the inner quartile range (IQR) is 8.3% and 9.0%, with an average of 8.6%. This goes to show that stock controllers by default have a relatively high range, and the rule of thumb is to follow factory calibration.": "",
|
||||
"God of War 20th Anniversary": "",
|
||||
"": ""
|
||||
}
|
||||
}
|
||||
364
lang/jp_jp.json
Normal file
@@ -0,0 +1,364 @@
|
||||
{
|
||||
".authorMsg": "- 日本語への翻訳: <a href='https://github.com/Keitan924111'>Keitan924111</a>",
|
||||
"DualShock Calibration GUI": "DualShock Calibration GUI",
|
||||
"Connect": "接続",
|
||||
"Connected to:": "接続先:",
|
||||
"Disconnect": "切断",
|
||||
"Calibrate stick center": "スティックの中央をキャリブレーション",
|
||||
"Calibrate stick range": "スティックの範囲をキャリブレーション",
|
||||
"Sections below are not useful, just some debug infos or manual commands": "以下のセクションはデバッグ情報や手動コマンドに使用します",
|
||||
"NVS Status": "NVSステータス",
|
||||
"Unknown": "不明",
|
||||
"Query NVS status": "NVSステータスのクエリ",
|
||||
"NVS unlock": "NVSロック解除",
|
||||
"NVS lock": "NVSロック",
|
||||
"Stick center calibration": "スティック中央のキャリブレーション",
|
||||
"Welcome": "ようこそ",
|
||||
"Step 1": "ステップ1",
|
||||
"Step 2": "ステップ2",
|
||||
"Step 3": "ステップ3",
|
||||
"Step 4": "ステップ4",
|
||||
"Completed": "完了",
|
||||
"Welcome to the stick center-calibration wizard!": "スティック中央キャリブレーションウィザードへようこそ!",
|
||||
"This tool will guide you in re-centering the analog sticks of your controller. It consists of four steps: you will be asked to move both sticks in a direction and release them.": "このツールでは、コントローラのアナログスティックの再センタリングの手順をご案内します。4つのステップで構成されており、両方のスティックを特定の方向に倒してから元に戻すように求められます。",
|
||||
"Please be aware that, <i>once the calibration is running, it cannot be canceled</i>. Do not close this page or disconnect your controller until it is completed.": "キャリブレーションを開始すると<i>キャンセルできなくなります</i>。完了するまで、このページを閉じたりコントローラを切断したりしないでください。",
|
||||
"Press <b>Start</b> to begin calibration.": "キャリブレーションを開始するには<b>開始</b>を押してください。",
|
||||
"Please move both sticks to the <b>top-left corner</b> and release them.": "両方のスティックを<b>左上の隅</b>に倒して、戻してください。",
|
||||
"When the sticks are back in the center, press <b>Continue</b>.": "スティックが中央に戻ったら、<b>続行</b>を押してください。",
|
||||
"Please move both sticks to the <b>top-right corner</b> and release them.": "両方のスティックを<b>右上の隅</b>に倒して、戻してください。",
|
||||
"Please move both sticks to the <b>bottom-left corner</b> and release them.": "両方のスティックを<b>左下の隅</b>に倒して、戻してください。",
|
||||
"Please move both sticks to the <b>bottom-right corner</b> and release them.": "両方のスティックを<b>右下の隅</b>に倒して、戻してください。",
|
||||
"Calibration completed successfully!": "キャリブレーションが正常に完了しました!",
|
||||
"Next": "次へ",
|
||||
"Recentering the controller sticks.": "コントローラのスティックを再センタリングしています。",
|
||||
"Please do not close this window and do not disconnect your controller. ": "このウインドウを閉じたり、コントローラーを切断したりしないでください。 ",
|
||||
"Range calibration": "範囲のキャリブレーション",
|
||||
"The controller is now sampling data!": "コントローラが現在データをサンプリングしています!",
|
||||
"Done": "完了",
|
||||
"Hi, thank you for using this software.": "こんにちは、このソフトウェアをご利用いただきありがとうございます。",
|
||||
"If you're finding it helpful and you want to support my efforts, feel free to": "役立つと思われる場合、または私の取り組みをサポートしたい場合は、お気軽に",
|
||||
"buy me a coffee": "コーヒーをおごってください",
|
||||
"! :)": "! :)",
|
||||
"Do you have any suggestion or issue? Drop me a message via email or discord.": "ご提案やご意見はありますか?メールまたはdiscordでお知らせください。",
|
||||
"Cheers!": "乾杯!",
|
||||
"Support this project": "このプロジェクトをサポート",
|
||||
"unknown": "不明",
|
||||
"original": "オリジナル",
|
||||
"clone": "クローン",
|
||||
"locked": "ロックされています",
|
||||
"unlocked": "ロックが解除されています",
|
||||
"error": "エラー",
|
||||
"Build Date": "ビルド日",
|
||||
"HW Version": "HWバージョン",
|
||||
"SW Version": "SWバージョン",
|
||||
"Device Type": "デバイスタイプ",
|
||||
"Range calibration completed": "範囲のキャリブレーションが完了しました",
|
||||
"Range calibration failed": "範囲のキャリブレーションに失敗しました",
|
||||
"Stick calibration failed": "スティックのキャリブレーションに失敗しました",
|
||||
"Stick calibration completed": "スティックのキャリブレーションが完了しました",
|
||||
"NVS Lock failed": "NVSのロックに失敗しました",
|
||||
"NVS Unlock failed": "NVSのロック解除に失敗しました",
|
||||
"Please connect only one controller at time.": "コントローラーは、一度に一つのみ接続してください。",
|
||||
"Sony DualShock 4 V1": "Sony DualShock 4 V1",
|
||||
"Sony DualShock 4 V2": "Sony DualShock 4 V2",
|
||||
"Sony DualSense": "Sony DualSense",
|
||||
"Sony DualSense Edge": "Sony DualSense Edge",
|
||||
"Connected invalid device": "接続された無効なデバイス",
|
||||
"Error": "エラー",
|
||||
"Initializing...": "初期化中...",
|
||||
"Storing calibration...": "キャリブレーションの保存中...",
|
||||
"Sampling...": "サンプリング...",
|
||||
"Calibration in progress": "キャリブレーション進行中",
|
||||
"Start": "開始",
|
||||
"Continue": "続行",
|
||||
"Have a nice day :)": "良い1日を! :)",
|
||||
"Welcome to the Calibration GUI": "Calibration GUIへようこそ",
|
||||
"Just few things to know before you can start:": "始める前に知っておくべきこと:",
|
||||
"This website is not affiliated with Sony, PlayStation & co.": "このウェブサイトは、ソニーやPlayStationなどとは関係ありません。",
|
||||
"This service is provided without warranty. Use at your own risk.": "このサービスは無保証で提供されます。自己責任で使用してください。",
|
||||
"Keep the internal battery of the controller connected and ensure it is well charged. If the battery dies during operations, the controller will be damaged and rendered unusable.": "コントローラーの内蔵バッテリーを接続し、十分に充電が行われていることを確認してください。操作中にバッテリーが切れると、コントローラーが破損し、使用できなくなります。",
|
||||
"Before doing the permanent calibration, try the temporary one to ensure that everything is working well.": "永久キャリブレーションを行う前に、一時的なキャリブレーションを行ってすべてが正常に動作していることを確認してください。",
|
||||
"Understood": "了解",
|
||||
"Version": "バージョン",
|
||||
"Frequently Asked Questions": "よくある質問",
|
||||
"Close": "閉じる",
|
||||
"Welcome to the F.A.Q. section! Below, you'll find answers to some of the most commonly asked questions about this website. If you have any other inquiries or need further assistance, feel free to reach out to me directly. Your feedback and questions are always welcome!": "ようこそ、よくある質問セクションへ!以下に、このウェブサイトに関する最もよくある質問の答えがあります。その他の問い合わせがある場合や、さらなるサポートが必要な場合は、直接お問い合わせください。フィードバックや質問はいつでも歓迎します!",
|
||||
"How does it work?": "これはどのように機能しますか?",
|
||||
"Behind the scenes, this website is the culmination of one year of dedicated effort in reverse-engineering DualShock controllers for fun/hobby from a random guy on the internet.": "舞台裏では、このウェブサイトはインターネット上のランダムな人物による楽しみや趣味のためのDualShockコントローラーのリバースエンジニアリングに1年間専念した結果です。",
|
||||
"Through": "を通じて",
|
||||
"this research": "この研究",
|
||||
", it was discovered that there exist some undocumented commands on DualShock controllers that can be sent via USB and are used during factory assembly process. If these commands are sent, the controller starts the recalibration of analog sticks.": "、DualShockコントローラーにはUSB経由で送信され、工場の組み立てプロセス中に使用される未文書化のコマンドがいくつか存在することが発見されました。これらのコマンドが送信されると、コントローラーはアナログスティックの再キャリブレーションを開始します。",
|
||||
"While the primary focus of this research wasn't initially centered on recalibration, it became apparent that a service offering this capability could greatly benefit numerous individuals. And thus, here we are.": "この研究の主な焦点は当初、再キャリブレーションに置かれていませんでしたが、この機能を提供するサービスが多くの人々に大きな利益をもたらす可能性があることが明らかになりました。その結果、ここにいます。",
|
||||
"Is this an officially endorsed service?": "これは公式に承認されたサービスですか?",
|
||||
"No, this service is simply a creation by a DualShock enthusiast.": "いいえ、このサービスは単なるDualShock愛好家によるものです。",
|
||||
"Does this website detect if a controller is a clone?": "このウェブサイトはコントローラーがクローンかどうかを検出しますか?",
|
||||
"Yes, only DualShock4 at the moment. This happened because I accidentally purchased some clones, spent time identifying the differences and added this functionality to prevent future deception.": "はい、現時点ではDualShock4のみです。これは私が偶然いくつかのクローンを購入し、違いを特定するのに時間を費やし、将来の誤解を防ぐためにこの機能を追加したためです。",
|
||||
"Unfortunately, the clones cannot be calibrated anyway, because they only clone the behavior of a DualShock4 during normal gameplay, not all the undocumented functionalities.": "残念ながら、クローンはどちらにせよキャリブレーションできません。なぜなら、彼らは通常のゲームプレイ中のDualShock4の振る舞いだけをクローン化し、未文書化の機能全てをクローン化しないからです。",
|
||||
"If you want to extend this detection functionality to DualSense, please ship me a fake DualSense and you'll see it in few weeks.": "この検出機能をDualSenseに拡張したい場合は、偽のDualSenseを送ってください。数週間で実装されます。",
|
||||
"What development is in plan?": "どのような開発計画がありますか?",
|
||||
"I maintain two separate to-do lists for this project, although the priority has yet to be established.": "このプロジェクトでは、優先順位はまだ確立されていませんが、2つの別々のToDoリストを管理しています。",
|
||||
"The first list is about enhancing support for DualShock4 and DualSense controllers:": "最初のリストは、DualShock4およびDualSenseコントローラーのサポートを強化することに関するものです:",
|
||||
"Implement calibration of L2/R2 triggers.": "L2/R2トリガーのキャリブレーションを実装する。",
|
||||
"Improve detection of clones, particularly beneficial for those seeking to purchase used controllers with assurance of authenticity.": "クローンの検出を改善し、特に本物であることを保証された中古コントローラーを購入しようとする人々にとって有益です。",
|
||||
"Add support for recalibrating IMUs.": "IMUの再キャリブレーションのサポートを追加する。",
|
||||
"Additionally, explore the possibility of reviving non-functioning DualShock controllers (further discussion available on Discord for interested parties).": "さらに、機能しないDualShockコントローラーの復活の可能性を探ります(興味のある方はDiscordでさらに議論が可能です)。",
|
||||
"The second list contains new controllers I aim to support:": "2番目のリストには、サポートする新しいコントローラーが含まれています:",
|
||||
"DualShock 3": "DualShock 3",
|
||||
"XBox Controllers": "Xboxコントローラー",
|
||||
"Each of these tasks presents both immense interest and significant time investment. To provide context, supporting a new controller typically demands 6-12 months of full-time research, alongside a stroke of good fortune.": "これらのタスクの各々が非常に興味深く、かつ大きな時間の投資を必要とします。文脈を提供するために、新しいコントローラーをサポートするには通常、6〜12か月のフルタイムの研究と、幸運が必要です。",
|
||||
"I love this service, it helped me! How can I contribute?": "このサービスが大好きです、役に立ちました!どのように貢献できますか?",
|
||||
"I'm glad to hear that you found this helpful! If you're interested in contributing, here are a few ways you can help me:": "あなたがこれが役に立つと感じていると聞いて嬉しいです!貢献したいとお考えでしたら、以下はあなたが私を助けることができるいくつかの方法です:",
|
||||
"Consider making a": "以下を検討してください",
|
||||
"donation": "寄付",
|
||||
"to support my late-night caffeine-fueled reverse-engineering efforts.": "夜遅くまでのカフェインで支えられたリバースエンジニアリングの取り組みを支援するために。",
|
||||
"Ship me a controller you would love to add (send me an email for organization).": "追加したいコントローラーを送ってください(組織のためにメールを送ってください)。",
|
||||
"Translate this website in your language": "このウェブサイトをあなたの言語に翻訳する",
|
||||
", to help more people like you!": "、あなたのような多くの人々を助けるために!",
|
||||
"This website uses analytics to improve the service.": "このウェブサイトはサービスを向上させるためにアナリティクスを使用しています。",
|
||||
"Board Model": "基板モデル",
|
||||
"This DualSense controller has outdated firmware.": "このDualSenseコントローラーのファームウェアは古くなっています。",
|
||||
"Please update the firmware and try again.": "ファームウェアを更新してから再試行してください。",
|
||||
"Joystick Info": "ジョイスティック情報",
|
||||
"Check circularity": "円形を確認",
|
||||
"Finetune stick calibration": "スティックの微調整キャリブレーション",
|
||||
"(beta)": "(ベータ版)",
|
||||
"Left stick": "左スティック",
|
||||
"Right stick": "右スティック",
|
||||
"Cancel": "キャンセル",
|
||||
"10x zoom": "10倍ズーム",
|
||||
"30th Anniversary": "30th Anniversary",
|
||||
"<b>Externally</b>: by applying +1.8V directly to the visible test point without opening the controller.": "<b>外部から行う場合</b>: +1.8Vをテストポイントに加えることで、コントローラーを開けずに行います。",
|
||||
"<b>Internally</b>: by soldering a wire from a +1.8V source to the write-protect TP.": "<b>内部から行う場合</b>: はんだ付けにより、テストポイントにジャンパ線を介して+1.8Vを加えることにより行います。",
|
||||
"A reboot is needed to continue using this DualSense Edge. Please disconnect and reconnect your controller.": "DualSense Edgeを使用するには、再起動が必要です。一旦切断して、再度接続してください。",
|
||||
"Adaptive Trigger": "アダプティブトリガー",
|
||||
"Adaptive triggers are only supported on DualSense controllers": "アダプティブトリガーはDualSenseコントローラーにのみ対応しています",
|
||||
"Add test": "テストの追加",
|
||||
"After range calibration, joysticks always go in corners.": "範囲のキャリブレーションの後、ジョイスティックがコーナーに張り付きます。",
|
||||
"Aim for a circularity error of around 7-9 % for the best playing experience.": "最高のプレイ体験を得るには、7~9%の円形誤差を目指してください。",
|
||||
"Astro Bot": "Astro Bot",
|
||||
"Battery Barcode": "バッテリーのバーコード",
|
||||
"Battery level is low. Tests may fail due to the controller being in power saving mode.": "バッテリー残量が低下しています。省電力モードの影響により、テストが失敗する可能性があります。",
|
||||
"Be gentle to avoid damage.": "損傷を避けるため、やさしく行ってください。",
|
||||
"Bluetooth Address": "Bluetoothアドレス",
|
||||
"Buttons": "ボタン",
|
||||
"Calibrating without replacing the joysticks may help temporarily, but it may also make the problem worse, with no way to undo it.": "部品の交換無しでキャリブレーションを行うと、一時的な改善にはなるかもしれませんが、問題をより深刻にするおそれがあります。また、これを元に戻す方法はありません。",
|
||||
"Calibration": "キャリブレーション",
|
||||
"Calibration History": "キャリブレーションの履歴",
|
||||
"Calibration is being stored in the stick modules.": "キャリブレーションはスティックモジュールに保存されます。",
|
||||
"Cannot copy text to the clipboard:": "テキストをクリップボードにコピーできません",
|
||||
"Cannot lock": "ロックできません",
|
||||
"Cannot read module barcodes": "モジュールのバーコードを読み取れません",
|
||||
"Cannot store data into": "データを保存できません",
|
||||
"Cannot unlock": "アンロックできません",
|
||||
"Center": "中心",
|
||||
"Center (L1)": "中心(L1)",
|
||||
"Changes saved successfully": "変更を保存しました",
|
||||
"Chroma Indigo": "Chroma Indigo",
|
||||
"Chroma Pearl": "Chroma Pearl",
|
||||
"Chroma Teal": "Chroma Teal",
|
||||
"Circularity": "円形誤差",
|
||||
"Circularity (R1)": "円形誤差(R1)",
|
||||
"Clear All": "すべてクリア",
|
||||
"Cobalt Blue": "Cobalt Blue",
|
||||
"Color": "色",
|
||||
"Controller Info": "コントローラーの情報",
|
||||
"Controller does not support adaptive trigger control": "このコントローラーはアダプティブトリガーコントロールに対応していません",
|
||||
"Cosmic Red": "Cosmic Red",
|
||||
"Debug": "デバッグ",
|
||||
"Debug Info": "デバッグ情報",
|
||||
"Debug buttons": "デバッグ用の操作",
|
||||
"Delete": "削除",
|
||||
"Delete all calibration history for this controller? This cannot be undone.": "このコントローラーのキャリブレーション履歴を削除してもよろしいですか?これは元に戻せません。",
|
||||
"Delete this calibration entry?": "このキャリブレーションエントリを削除してもよろしいですか?",
|
||||
"Does this software resolve stickdrift?": "このソフトウェアはドリフト現象を解決しますか?",
|
||||
"Don't show again": "再度表示しない",
|
||||
"Drift is caused by mechanical parts in the joystick being worn out, and they need to be replaced to fix the drift.": "ドリフト現象は、ジョイスティックの部品の物理的な摩耗によって発生します。これを修正するには、部品の交換が必要です。",
|
||||
"DualSense Edge Calibration": "DualSense Edgeのキャリブレーション",
|
||||
"Error while saving changes": "変更の保存中にエラーが発生しました",
|
||||
"FW Build Date": "FWビルド日時",
|
||||
"FW Series": "FWシリーズ",
|
||||
"FW Type": "FWタイプ",
|
||||
"FW Update": "FWアップデート",
|
||||
"FW Update Info": "FWアップデート情報",
|
||||
"FW Version": "FWバージョン",
|
||||
"Fail": "失敗",
|
||||
"Failed": "失敗しました",
|
||||
"Failed to connect to device": "デバイスに接続できませんでした",
|
||||
"Failed to disable adaptive trigger": "アダプティブトリガーを無効にできませんでした",
|
||||
"Failed to set speaker tone": "スピーカートーンをセットできませんでした",
|
||||
"Failed to set vibration": "バイブレーションをセットできませんでした",
|
||||
"Firefox is supported with the WebHID extension installed.": "WebHID拡張機能がインストールされている場合、Firefoxも使用できます。",
|
||||
"For more info or help, feel free to reach out on Discord.": "詳しい情報やヘルプが必要なら、Discordでお気軽にご連絡ください。",
|
||||
"Fortnite": "Fortnite",
|
||||
"Galactic Purple": "Galactic Purple",
|
||||
"God of War Ragnarok": "God of War Ragnarok",
|
||||
"Grey Camouflage": "Grey Camouflage",
|
||||
"HW Model": "HWモデル",
|
||||
"Haptic Vibration": "ハプティックバイブレーション",
|
||||
"Hardware": "ハードウェア",
|
||||
"Headphone Jack": "ヘッドフォンジャック",
|
||||
"If the calibration is not stored permanently, please double-check the wirings of the hardware mod.": "永久キャリブレーションの保存ができない場合は、ハードウェアモジュールの配線を確認してください。",
|
||||
"Increase non-circularity": "円形誤差を増やす",
|
||||
"Info": "情報",
|
||||
"Instructions": "説明",
|
||||
"It appears the latest joystick calibration has not been saved.": "最新のスティックのキャリブレーションが保存されていないようです。",
|
||||
"Keep rotating the sticks even if you see no progress!": "進捗に変化がない場合でも、スティックを回転させ続けてください!",
|
||||
"Last connected": "最後に接続したデバイス",
|
||||
"Learn more...": "詳細情報...",
|
||||
"Left Module Barcode": "左モジュールバーコード",
|
||||
"Lights": "ライト",
|
||||
"Listen for a tone from the controller speaker.": "コントローラーのスピーカーから流れる音を確認してください。",
|
||||
"Long-press [circle] to skip ahead.": " [circle] を長押ししてスキップします。",
|
||||
"MCU Unique ID": "MCUユニークID",
|
||||
"Make sure to touch the edges of the joystick frame and rotate slowly, preferably in each direction - clockwise and anti-clockwise.": "ティックのフレームに触れるように、ゆっくりと回転させてください。時計回りと反時計回りの両方向で回転させてください。",
|
||||
"Microphone": "マイク",
|
||||
"Microphone Level:": "マイクレベル",
|
||||
"Midnight Black": "Midnight Black",
|
||||
"More details and images": "詳細とイメージ",
|
||||
"Move the stick to select it for tuning, then without touching the stick use the D-pad buttons to adjust the center point. Flick it and adjust it again if it is off center or flickers.": "スティックを動かして調整対象を選択し、スティックに触れずに十字ボタンを使って中心点を調整します。中心からずれている場合やちらつく場合は、スティックを軽く弾いて再度調整してください。",
|
||||
"No controller connected": "コントローラーが接続されていません",
|
||||
"No saved calibrations found.": "保存されたキャリブレーションはありません",
|
||||
"No tests completed yet.": "テストはまだ完了していません。",
|
||||
"No.": "いいえ。",
|
||||
"Normal": "標準",
|
||||
"Not tested": "テスト未実行",
|
||||
"Nova Pink": "Nova Pink",
|
||||
"Only after you have done that, you click on \"Done\".": "操作が完了したら、\"完了\"をクリックしてください。.",
|
||||
"PCBA ID": "PCBA ID",
|
||||
"Pass": "合格",
|
||||
"Passed": "合格しました",
|
||||
"Please connect a DualShock 4, a DualSense, DualSense Edge or VR2 controller to your computer and press Connect.": "DualShock4、DualSense、DualSense EdgeまたはVR2コントローラーをコンピューターに接続して、接続を押してください。",
|
||||
"Please note: the stick modules on the DS Edge <b>cannot be calibrated via software alone</b>.": "注意:DS Edgeのスティックモジュールは、ソフトウェアのみではキャリブレーションできません。",
|
||||
"Please read the instructions.": "説明をお読みください。",
|
||||
"Please release the stick to center position before adjusting with D-pad buttons.": "十字ボタンで中央を調整する前に、スティックから手を放してください。",
|
||||
"Please use a web browser with WebHID support (e.g. Google Chrome or Microsoft Edge) on a PC or Mac.": "PCまたはMacでWebHIDに対応するWebブラウザ(Google Chrome、Microsoft Edgeなど)を使用してください。",
|
||||
"Plug in headphones to the 3.5mm jack": "3.5mmジャックにヘッドフォンを挿入してください",
|
||||
"Press [circle] to close, or [square] to start over": " [circle] を押すと閉じます。 [square] を押すと初めからやり直します。",
|
||||
"Press [square] to Pass, [cross] to Fail, or [circle] to skip.": " [square] で合格、 [cross] で失敗、 [circle] でスキップします。",
|
||||
"Press [square] to begin or [circle] to close": " [square] を押して開始、または [circle] を押すと終了します",
|
||||
"Press [triangle] to go back.": " [triangle] を押して戻ります",
|
||||
"Press each button until they turn green.": "それぞれのボタンを押して緑色になることを確認してください",
|
||||
"Press the D-pad or face buttons in the direction you want the stick position to move.": "スティックの位置を移動させたい方向に、十字ボタンまたはフェイスボタンを押してください。",
|
||||
"Progress": "進捗",
|
||||
"Push the stick straight up/down/left/right as far as possible.": "スティックを可能な限り上下左右に倒してください。",
|
||||
"Quick Test": "クイックテスト",
|
||||
"Quick calibrate": "クイックキャリブレーション",
|
||||
"Range calibration appears to have failed. Please try again and make sure you rotate the sticks.": "範囲のキャリブレーションに失敗しました。もう一度お試しください。その際、必ずスティックを回転させてください。",
|
||||
"Reboot controller": "コントローラーの再起動",
|
||||
"Repeat": "繰り返し",
|
||||
"Restart": "リスタート",
|
||||
"Restore": "復元",
|
||||
"Restore calibration": "キャリブレーションの復元",
|
||||
"Right Module Barcode": "右モジュールのバーコード",
|
||||
"Rotate the sticks slowly at least 2 times in one direction and 2 times in the other direction to cover the whole range.": "スティックをゆっくり一方向に少なくとも2回転させたら、逆方向に少なくとも2回転させてください。",
|
||||
"Run through these tests to verify your controller's functionality.": "コントローラーの機能性を確認するために、以下のテストを実行してください。",
|
||||
"SBL FW Version": "SBL FWバージョン",
|
||||
"Save changes permanently": "変更を永久に保存します",
|
||||
"Serial Number": "シリアルナンバー",
|
||||
"Show all": "すべて表示",
|
||||
"Show raw numbers": "生の数値を表示",
|
||||
"Software": "ソフトウェア",
|
||||
"Sony controllers come from the factory calibrated to have an average circularity error of nearly 10 %, and this is now what games expect. Too perfect circularity can make movements and aim feel stiff and unresponsive in some games.": "Sonyのコントローラーは、工場出荷時に平均約10%の真円度誤差となるように調整されており、これはほとんどのゲームで想定されている値です。真円度が完璧すぎると、ゲームによっては動きや照準がぎこちなかったり、反応が鈍く感じられることがあります。",
|
||||
"Speaker": "スピーカー",
|
||||
"Spider FW Version": "Spider FWバージョン",
|
||||
"Spider-Man 2": "Spider-Man 2",
|
||||
"Starlight Blue": "Starlight Blue",
|
||||
"Step size": "ステップサイズ",
|
||||
"Sterling Silver": "Sterling Silver",
|
||||
"Stickdrift is caused by a physical defect; namely dirt, worn potentiometer or in some cases a worn spring.": "スティックのドリフトは、物理的な問題によって発生します。例えば、汚れ、ポテンションメータの劣化、スプリングの不具合などです。",
|
||||
"Support for calibrating DualSense Edge stick modules is now available as an <b>experimental feature</b>.": "DualSense Edgeのスティックモジュールのキャリブレーションは<b>実験的機能</b>で利用可能です。",
|
||||
"Test Speaker": "スピーカーテスト",
|
||||
"Test Summary": "テストの概要",
|
||||
"Test all buttons, or long-press [square] to Pass and [cross] to Fail, or [circle] to skip.": "すべてのボタンをテストするか、ボタンの長押し [square] で合格、 [cross] で失敗、 [circle] でスキップできます。",
|
||||
"The <b>Done</b> button will unlock after at most 15 seconds. If you press <b>Done</b> without rotating the sticks, the calibration will be incomplete and you will need to repeat it.": "<b>完了</b>ボタンは15秒後に有効になります。スティックを回転させずに<b>完了</b>ボタンを押した場合、キャリブレーションを正常に完了できないため、再度実行する必要があります。",
|
||||
"The device is connected via Bluetooth. Disconnect and reconnect using a USB cable instead.": "デバイスはBluetoothで接続されています。一度切断して、USBケーブルで接続してください。",
|
||||
"The item has been copied to the clipboard.": "クリップボードにコピーしました。",
|
||||
"This controller has unsaved changes that will be lost when the controller is rebooted.": "コントローラーに変更が保存されていません。コントローラーを再起動すると、変更が失われます。",
|
||||
"This involves temporarily disabling write protection by applying <b>+1.8V</b> to a specific test point on each module.": "これは、各モジュールの特定のテストポイントに<b>+1.8V</b>を印加することにより、書き込み保護を一時的に無効にすることを含みます。",
|
||||
"This is only for advanced users. If you're not sure what you're doing, please do not attempt it.": "これは上級者向けの内容です。何をしようとしているのかわからない場合は、実行しないでください。",
|
||||
"This issue happens because you have clicked \"Done\" immediately after starting a range calibration.": "この問題は、範囲のキャリブレーションを開始した直後に \"完了\" をクリックしたために発生します。",
|
||||
"This test checks all controller buttons by requiring you to press each button up to three times.": "コントローラーのすべてのボタンをテストします。それぞれのボタンは3回以上押してください。",
|
||||
"This test checks the headphone jack functionality.": "ヘッドフォンジャックの機能をテストします。",
|
||||
"This test checks the reliability of the USB port.": "USBポートの信頼性をテストします。",
|
||||
"This test will cycle through red, green, and blue colors on the controller lightbar, animate the player indicator lights, and flash the mute button.": "このテストではライトバーを赤、緑、青の順番で発光、ミュートボタンを点滅させます。",
|
||||
"This test will enable heavy resistance on both L2 and R2 triggers.": "このテストではL2およびR2トリガーの抵抗を強めます。",
|
||||
"This utility cannot fix stick drift.": "ユーティリティを使用してドリフト現象を修正することはできません。",
|
||||
"Touchpad FW Version": "タッチパッドFWバージョン",
|
||||
"Touchpad ID": "タッチパッドID",
|
||||
"USB Connector": "USBコネクタ",
|
||||
"Unsupported browser.": "非対応のブラウザです。",
|
||||
"Use expert mode": "エキスパートモード",
|
||||
"Use normal mode": "標準モード",
|
||||
"Use quick calibration": "クイックキャリブレーションの使用",
|
||||
"Using this utility on a phone or tablet is not supported.": "このユーティリティはスマートフォンおよびタブレットでは利用できません。",
|
||||
"VCM Left Barcode": "左VCMのバーコード",
|
||||
"VCM Right Barcode": "右VCMのバーコード",
|
||||
"Values": "値",
|
||||
"Venom FW Version": "Venom FWバージョン",
|
||||
"Volcanic Red": "Volcanic Red",
|
||||
"Watch the controller lights change colors, the player lights animate, and the mute button flash.": "コントローラーのライトの色の変化、プレイヤーライトのアニメーション、ミュートボタンの点滅を確認してください。",
|
||||
"We are not responsible for any damage caused by attempting this modification.": "この改造を試みたことによって生じた損害について、我々は一切責任を負いません。",
|
||||
"While holding the stick to be adjusted straight up/down/left/right, make adjustments until you see lightblue sectors in all four directions after circling the stick both left and right. Then use the": "調整したいスティックを上下左右のいずれかにまっすぐ倒した状態で、調整を行ってください。その後、スティックを左回り・右回りの両方向に回転させたとき、四方向すべてに水色のセクターが表示されるまで調整します。",
|
||||
"White": "White",
|
||||
"Wiggle the USB cable to see if the controller disconnects.": "USBケーブルを揺らしてみて、コントローラーの接続が切れるかどうか確認してください。",
|
||||
"You can do this in two ways:": "2つの方法があります。",
|
||||
"You have to rotate the joysticks before you press \"Done\".": " \"完了\"をクリックする前に、スティックを回転させてください。",
|
||||
"You should save your changes, or reboot the controller to revert back to the previous state.": "変更を保存するか、コントローラーを再起動して前の状態に戻してください。",
|
||||
"Your device might not be a genuine Sony controller. If it is not a clone then please report this issue.": "このデバイスはSONY純正ではない可能性があります。このデバイスがクローン品ではない場合は、この問題を報告してください。",
|
||||
"failed": "失敗しました",
|
||||
"hide": "隠す",
|
||||
"left module": "左モジュール",
|
||||
"passed": "合格しました",
|
||||
"right module": "右モジュール",
|
||||
"serial number": "シリアルナンバー",
|
||||
"skipped": "スキップしました",
|
||||
"tests completed": "テストが完了しました",
|
||||
"(DualSense & DualSense Edge) Will updating the firmware reset calibration?": "",
|
||||
"(DualSense Edge) Is the calibration stored on the controller or the modules?": "",
|
||||
"<strong>Average circularity error:</strong> smaller is not always better! Aim for 7-9 %.": "",
|
||||
"A sample test was done with 30 dualsense edge modules, and the results showed that the inner quartile range (IQR) is 8.3% and 9.0%, with an average of 8.6%. This goes to show that stock controllers by default have a relatively high range, and the rule of thumb is to follow factory calibration.": "",
|
||||
"After they have been replaced, this utility can be used to calibrate the controller to work with the new joysticks.": "",
|
||||
"Can I overwrite a (permanent) calibration?": "",
|
||||
"Can I restore a previous calibration?": "",
|
||||
"Current": "",
|
||||
"Feel for vibration in the controller.": "",
|
||||
"Finetuning is only available for DualSense and DualSense Edge.": "",
|
||||
"God of War 20th Anniversary": "",
|
||||
"Housing": "",
|
||||
"How do I use the finetuning feature?": "",
|
||||
"If you don't have a battery connected or the connected battery is empty, AND your cable disconnects during saving the calibration, then your controller has a high chance of being bricked.": "",
|
||||
"If you have not clicked the green button \"Save changes permanently\", then unplugging the controller will reset to the previously saved calibration. It is recommended you test your calibration before saving.": "",
|
||||
"If you have saved the changes permanently, you can reset the changes only if you are using a DualSense or DualSense Edge. You can click on the grey button \"Restore Calibration\" to go back to one of the previous calibrations that was saved on the controller. Known issue: You may need to reboot your controller first in order for previous calibrations to show up.": "",
|
||||
"Image 1": "",
|
||||
"Images": "",
|
||||
"In most cases, calibrating your joysticks that have prior drift issues may result in a worse and unpredictable calibration.": "",
|
||||
"Not shown in the video: You can now also increase the range in each direction uniformly by using the cross in the top right and moving the slider up, which may speed up finetuning. Make sure to rotate the joystick first, otherwise the button cannot be pressed.": "",
|
||||
"Only official controllers are supported, no third-party or \"fake\" controllers.": "",
|
||||
"Option 1": "",
|
||||
"Option 2": "",
|
||||
"PlayStation Virtual Reality 2": "",
|
||||
"Press L2 and R2 triggers to feel the trigger resistance.": "",
|
||||
"Saving calibration is locked by default on DualSense Edge joystick modules. A hardware mod is required to save the calibration permanently. The calibration is saved on the modules themselves, so you have to perform the mod twice: once for each module. You would need to bridge two points on the PCB with enamelled wire. There are multiple methods, I personally recommend using either of these two locations to solder the wire to. See images below. Ensure the wire is thin enough so that the shell is closed properly. Make sure you don't short the wire to ground through the letters near the bottom joint.": "",
|
||||
"Sony DualShock 4": "",
|
||||
"The Last of Us": "",
|
||||
"The calibration is stored on each module individually. It is carried over if you place the modules in a different DualSense Edge. Likewise, if you place a different set of modules in your DualSense Edge, you will get a different calibration that is tied to those new modules.": "",
|
||||
"The calibration was restored successfully! Remember to save the changes in order not to loose them when the controller is rebooted.": "",
|
||||
"The device appears to be a clone. All calibration functionality is disabled.": "",
|
||||
"The finetuning and quick test menus are only accessible for DualSense and DualSense Edge.": "",
|
||||
"The website supports the following official controllers:": "",
|
||||
"These previous calibrations are stored locally in your browser's storage. Meaning you can only restore calibrations using the same computer and browser that you used to calibrate it with, and deleting the cache or using Incognito will make any previous calibration irrecoverable.": "",
|
||||
"This software is not intended to fix stickdrift and will <b>not</b> fix stickdrift on its own if you already experience that.": "",
|
||||
"This video from V2.16 shows how to use the finetuning menu.": "",
|
||||
"To store a custom calibration on the stick's internal memory, a <b>hardware modification</b> is required.": "",
|
||||
"Use four-step calibration": "",
|
||||
"We recommend a circularity between 7% and 9%. The reason for this is to mimic a stock controllers calibration. However, symmetrical overshoot is more important and if you need to deviate from this range to achieve better symmetry, that is fine too.": "",
|
||||
"What are the risks of using the calibration?": "",
|
||||
"What circularity percentage to aim for when calibrating and finetuning.": "",
|
||||
"What the software will help with, is ensuring new joysticks will function properly after replacing the old broken joysticks that drift. This step involves opening up the controller and soldering new potentiometers or an entire new joystick.": "",
|
||||
"When calibrating, there is no risk. However, if your controller disconnects during the split second that you save a calibration, then you have a chance of bricking your controller. Make sure your battery has enough charge and is plugged into the controller, and the USB cable is securely connected. This prevents your controller from being bricked if the USB cable accidentally disconnects.": "",
|
||||
"Which controllers does DualShock Calibration GUI support?": "",
|
||||
"Yes. Simply do another calibration, and click the green button to save permanently.": "",
|
||||
"here": "",
|
||||
"to increase the non-circularity.": "",
|
||||
"": ""
|
||||
}
|
||||
364
lang/ko_kr.json
Normal file
@@ -0,0 +1,364 @@
|
||||
{
|
||||
".authorMsg": "한국어 번역 : 제타",
|
||||
"DualShock Calibration GUI": "DualShock 보정 GUI",
|
||||
"Connect": "연결",
|
||||
"Connected to:": "연결된 기기:",
|
||||
"Disconnect": "연결 끊기",
|
||||
"Calibrate stick center": "스틱 중앙 보정",
|
||||
"Calibrate stick range": "스틱 범위 보정",
|
||||
"Sections below are not useful, just some debug infos or manual commands": "아래 항목은 디버그 정보와 수동 명령어로, 일반 사용자에게는 유용하지 않습니다.",
|
||||
"NVS Status": "NVS 상태",
|
||||
"Unknown": "알 수 없음",
|
||||
"Debug buttons": "디버그 버튼",
|
||||
"Query NVS status": "NVS 상태 조회",
|
||||
"NVS unlock": "NVS 잠금 해제",
|
||||
"NVS lock": "NVS 잠금",
|
||||
"Stick center calibration": "스틱 중앙 보정",
|
||||
"Welcome": "환영합니다",
|
||||
"Step 1": "1단계",
|
||||
"Step 2": "2단계",
|
||||
"Step 3": "3단계",
|
||||
"Step 4": "4단계",
|
||||
"Completed": "완료",
|
||||
"Welcome to the stick center-calibration wizard!": "스틱 중앙 보정 마법사에 오신 것을 환영합니다!",
|
||||
"This tool will guide you in re-centering the analog sticks of your controller. It consists of four steps: you will be asked to move both sticks in a direction and release them.": "이 도구는 컨트롤러 아날로그 스틱의 중앙을 다시 설정하는 과정을 안내합니다. 총 4단계로 구성되며, 각 단계마다 양쪽 스틱을 특정 방향으로 움직였다가 놓으라는 안내가 표시됩니다.",
|
||||
"Please be aware that, <i>once the calibration is running, it cannot be canceled</i>. Do not close this page or disconnect your controller until it is completed.": "<i>보정이 시작되면 취소할 수 없습니다</i>. 완료될 때까지 이 페이지를 닫거나 컨트롤러 연결을 해제하지 마십시오.",
|
||||
"Press <b>Start</b> to begin calibration.": "<b>시작</b>을 눌러 보정을 시작하세요.",
|
||||
"Please move both sticks to the <b>top-left corner</b> and release them.": "양쪽 스틱을 <b>왼쪽 위</b> 방향으로 끝까지 민 다음 놓아주세요.",
|
||||
"When the sticks are back in the center, press <b>Continue</b>.": "스틱이 중앙으로 돌아오면 <b>계속</b> 버튼을 누르세요.",
|
||||
"Please move both sticks to the <b>top-right corner</b> and release them.": "양쪽 스틱을 <b>오른쪽 위</b> 방향으로 끝까지 민 다음 놓아주세요.",
|
||||
"Please move both sticks to the <b>bottom-left corner</b> and release them.": "양쪽 스틱을 <b>왼쪽 아래</b> 방향으로 끝까지 민 다음 놓아주세요.",
|
||||
"Please move both sticks to the <b>bottom-right corner</b> and release them.": "양쪽 스틱을 <b>오른쪽 아래</b> 방향으로 끝까지 민 다음 놓아주세요.",
|
||||
"Calibration completed successfully!": "보정이 성공적으로 완료되었습니다!",
|
||||
"Next": "다음",
|
||||
"Recentering the controller sticks.": "컨트롤러 스틱 중앙을 다시 설정하는 중입니다.",
|
||||
"Please do not close this window and do not disconnect your controller. ": "이 창을 닫거나 컨트롤러 연결을 해제하지 마십시오.",
|
||||
"Range calibration": "범위 보정",
|
||||
"The controller is now sampling data!": "컨트롤러가 데이터 샘플링을 시작했습니다!",
|
||||
"Done": "완료",
|
||||
"Hi, thank you for using this software.": "안녕하세요, 저희 소프트웨어를 이용해 주셔서 감사합니다.",
|
||||
"If you're finding it helpful and you want to support my efforts, feel free to": "이 프로그램이 도움이 되었고, 개발자를 응원하고 싶으시다면",
|
||||
"buy me a coffee": "커피 한 잔 사주세요",
|
||||
"! :)": "! :)",
|
||||
"Do you have any suggestion or issue? Drop me a message via email or discord.": "제안이나 문제가 있으신가요? 이메일이나 Discord로 메시지를 보내주세요.",
|
||||
"Cheers!": "감사합니다!",
|
||||
"Support this project": "프로젝트 후원하기",
|
||||
"unknown": "알 수 없음",
|
||||
"original": "정품",
|
||||
"clone": "복제품",
|
||||
"locked": "잠김",
|
||||
"unlocked": "잠금 해제",
|
||||
"error": "오류",
|
||||
"Build Date": "빌드 날짜",
|
||||
"HW Version": "하드웨어 버전",
|
||||
"SW Version": "소프트웨어 버전",
|
||||
"Device Type": "기기 종류",
|
||||
"Range calibration completed": "범위 보정이 완료되었습니다.",
|
||||
"Range calibration failed": "범위 보정에 실패했습니다",
|
||||
"Stick calibration failed": "스틱 보정에 실패했습니다",
|
||||
"Stick calibration completed": "스틱 보정이 완료되었습니다.",
|
||||
"NVS Lock failed": "NVS 잠금에 실패했습니다",
|
||||
"NVS Unlock failed": "NVS 잠금 해제에 실패했습니다",
|
||||
"Please connect only one controller at time.": "한 번에 하나의 컨트롤러만 연결해주세요.",
|
||||
"Sony DualShock 4 V1": "Sony DualShock 4 V1",
|
||||
"Sony DualShock 4 V2": "Sony DualShock 4 V2",
|
||||
"Sony DualSense": "Sony DualSense",
|
||||
"Sony DualSense Edge": "Sony DualSense Edge",
|
||||
"Connected invalid device": "잘못된 기기가 연결되었습니다",
|
||||
"Error": "오류",
|
||||
"Initializing...": "초기화 중...",
|
||||
"Storing calibration...": "보정 값 저장 중...",
|
||||
"Sampling...": "샘플링 중...",
|
||||
"Calibration in progress": "보정 진행 중",
|
||||
"Start": "시작",
|
||||
"Continue": "계속",
|
||||
"Have a nice day :)": "좋은 하루 되세요 :)",
|
||||
"Welcome to the Calibration GUI": "보정 GUI에 오신 것을 환영합니다",
|
||||
"Just few things to know before you can start:": "시작하기 전에 몇 가지 알아둘 사항이 있습니다:",
|
||||
"This website is not affiliated with Sony, PlayStation & co.": "이 웹사이트는 Sony, PlayStation 및 관련사와 아무런 관련이 없습니다.",
|
||||
"This service is provided without warranty. Use at your own risk.": "이 서비스는 어떠한 보증도 제공하지 않으며, 사용에 대한 책임은 본인에게 있습니다.",
|
||||
"Keep the internal battery of the controller connected and ensure it is well charged. If the battery dies during operations, the controller will be damaged and rendered unusable.": "컨트롤러의 내장 배터리가 연결되어 있고 충분히 충전되었는지 확인하세요. 작업 중 배터리가 방전되면 컨트롤러가 손상되어 사용할 수 없게 될 수 있습니다.",
|
||||
"Before doing the permanent calibration, try the temporary one to ensure that everything is working well.": "영구 보정을 진행하기 전에, 임시 보정을 먼저 시도하여 모든 것이 정상적으로 작동하는지 확인하세요.",
|
||||
"Understood": "이해했습니다",
|
||||
"Version": "버전",
|
||||
"Frequently Asked Questions": "자주 묻는 질문",
|
||||
"Close": "닫기",
|
||||
"Welcome to the F.A.Q. section! Below, you'll find answers to some of the most commonly asked questions about this website. If you have any other inquiries or need further assistance, feel free to reach out to me directly. Your feedback and questions are always welcome!": "자주 묻는 질문(F.A.Q.)에 오신 것을 환영합니다! 아래에서 이 웹사이트에 대해 자주 묻는 질문과 답변을 확인하실 수 있습니다. 다른 문의사항이나 추가 지원이 필요하시면 언제든지 직접 연락해주세요. 여러분의 피드백과 질문을 언제나 환영합니다!",
|
||||
"How does it work?": "어떻게 작동하나요?",
|
||||
"Behind the scenes, this website is the culmination of one year of dedicated effort in reverse-engineering DualShock controllers for fun/hobby from a random guy on the internet.": "이 웹사이트는 인터넷의 한 유저가 1년 동안 재미와 취미로 DualShock 컨트롤러를 리버스 엔지니어링한 노력의 결실입니다.",
|
||||
"this research": "이 연구",
|
||||
", it was discovered that there exist some undocumented commands on DualShock controllers that can be sent via USB and are used during factory assembly process. If these commands are sent, the controller starts the recalibration of analog sticks.": "를 통해 DualShock 컨트롤러에 문서화되지 않은 특정 명령어가 존재하며, 이 명령어는 USB를 통해 전송되어 공장 조립 과정에서 사용된다는 사실이 발견되었습니다. 이 명령어를 전송하면 컨트롤러가 아날로그 스틱 재보정을 시작합니다.",
|
||||
"While the primary focus of this research wasn't initially centered on recalibration, it became apparent that a service offering this capability could greatly benefit numerous individuals. And thus, here we are.": "처음에는 재보정이 이 연구의 주된 초점은 아니었지만, 이 기능을 제공하는 서비스가 많은 사람들에게 큰 도움이 될 수 있다는 사실이 명확해졌습니다. 그래서 이 웹사이트를 만들게 되었습니다.",
|
||||
"Is this an officially endorsed service?": "이것은 공식적으로 인증된 서비스인가요?",
|
||||
"No, this service is simply a creation by a DualShock enthusiast.": "아니요, 이 서비스는 한 DualShock 팬이 만든 개인적인 창작물입니다.",
|
||||
"Does this website detect if a controller is a clone?": "이 웹사이트는 컨트롤러가 복제품인지 감지할 수 있나요?",
|
||||
"Yes, only DualShock4 at the moment. This happened because I accidentally purchased some clones, spent time identifying the differences and added this functionality to prevent future deception.": "네, 현재로서는 DualShock 4만 감지할 수 있습니다. 제가 실수로 복제품을 구매하게 되어, 차이점을 파악하는 데 시간을 투자했고, 앞으로 다른 사람들이 속지 않도록 이 기능을 추가했습니다.",
|
||||
"Unfortunately, the clones cannot be calibrated anyway, because they only clone the behavior of a DualShock4 during normal gameplay, not all the undocumented functionalities.": "안타깝게도 복제품은 보정이 불가능합니다. 일반적인 게임 플레이 동작만 복제할 뿐, 문서화되지 않은 모든 기능까지 복제하지는 않기 때문입니다.",
|
||||
"If you want to extend this detection functionality to DualSense, please ship me a fake DualSense and you'll see it in few weeks.": "DualSense 복제품 감지 기능 추가를 원하신다면, 저에게 가짜 DualSense를 보내주세요. 몇 주 안에 기능을 추가해 드리겠습니다.",
|
||||
"What development is in plan?": "어떤 개발 계획이 있나요?",
|
||||
"I maintain two separate to-do lists for this project, although the priority has yet to be established.": "이 프로젝트에는 두 개의 별도 할 일 목록이 있으며, 아직 우선순위는 정해지지 않았습니다.",
|
||||
"The first list is about enhancing support for DualShock4 and DualSense controllers:": "첫 번째 목록은 DualShock 4 및 DualSense 컨트롤러 지원 강화에 관한 것입니다:",
|
||||
"Implement calibration of L2/R2 triggers.": "L2/R2 트리거 보정 기능 구현",
|
||||
"Improve detection of clones, particularly beneficial for those seeking to purchase used controllers with assurance of authenticity.": "복제품 탐지 기능 개선 (특히 정품 인증이 필요한 중고 컨트롤러 구매자에게 유용)",
|
||||
"Add support for recalibrating IMUs.": "IMU 재보정 지원 추가",
|
||||
"Additionally, explore the possibility of reviving non-functioning DualShock controllers (further discussion available on Discord for interested parties).": "또한, 작동하지 않는 DualShock 컨트롤러를 되살릴 수 있는 가능성 탐색 (관심 있는 분들은 Discord에서 추가 논의 가능)",
|
||||
"The second list contains new controllers I aim to support:": "두 번째 목록은 앞으로 지원할 새로운 컨트롤러들입니다:",
|
||||
"DualShock 3": "DualShock 3",
|
||||
"XBox Controllers": "Xbox 컨트롤러",
|
||||
"Each of these tasks presents both immense interest and significant time investment. To provide context, supporting a new controller typically demands 6-12 months of full-time research, alongside a stroke of good fortune.": "각 작업은 매우 흥미롭지만 상당한 시간 투자가 필요합니다. 새로운 컨트롤러를 지원하려면 보통 6~12개월의 전담 연구와 약간의 행운이 필요합니다.",
|
||||
"I love this service, it helped me! How can I contribute?": "이 서비스 정말 마음에 들어요, 큰 도움이 됐습니다! 어떻게 기여할 수 있나요?",
|
||||
"I'm glad to hear that you found this helpful! If you're interested in contributing, here are a few ways you can help me:": "도움이 되셨다니 기쁩니다! 기여하고 싶으시다면 다음과 같은 방법으로 저를 도울 수 있습니다:",
|
||||
"Consider making a": "다음과 같은",
|
||||
"donation": "기부",
|
||||
"to support my late-night caffeine-fueled reverse-engineering efforts.": "를 통해 카페인으로 버티는 저의 밤샘 리버스 엔지니어링 작업을 응원해주세요.",
|
||||
"Ship me a controller you would love to add (send me an email for organization).": "추가하고 싶은 컨트롤러가 있다면 저에게 보내주세요 (자세한 내용은 이메일로 문의).",
|
||||
"Translate this website in your language": "이 웹사이트를 당신의 언어로 번역해주세요",
|
||||
", to help more people like you!": ", 당신과 같은 더 많은 사람들을 돕기 위해!",
|
||||
"This website uses analytics to improve the service.": "이 웹사이트는 서비스 개선을 위해 분석 도구를 사용합니다.",
|
||||
"Board Model": "보드 모델",
|
||||
"This DualSense controller has outdated firmware.": "이 DualSense 컨트롤러의 펌웨어가 오래되었습니다.",
|
||||
"Please update the firmware and try again.": "펌웨어를 업데이트한 후 다시 시도해주세요.",
|
||||
"Joystick Info": "조이스틱 정보",
|
||||
"Check circularity": "원형성 확인",
|
||||
"No.": "아니요.",
|
||||
"Does this software resolve stickdrift?": "이 소프트웨어로 스틱 쏠림 현상을 해결할 수 있나요?",
|
||||
"Stickdrift is caused by a physical defect; namely dirt, worn potentiometer or in some cases a worn spring.": "스틱 쏠림은 먼지, 마모된 전위차계(포텐셔미터) 또는 마모된 스프링과 같은 물리적 결함으로 인해 발생합니다.",
|
||||
"After range calibration, joysticks always go in corners.": "범위 보정 후 조이스틱이 항상 가장자리로 쏠려요.",
|
||||
"This issue happens because you have clicked \"Done\" immediately after starting a range calibration.": "이 문제는 범위 보정을 시작하자마자 \"완료\"를 클릭했기 때문에 발생합니다.",
|
||||
"Please read the instructions.": "안내를 제대로 읽어주세요.",
|
||||
"You have to rotate the joysticks before you press \"Done\".": "\"완료\"를 누르기 전에 조이스틱을 돌려야 합니다.",
|
||||
"Make sure to touch the edges of the joystick frame and rotate slowly, preferably in each direction - clockwise and anti-clockwise.": "조이스틱 프레임 가장자리까지 닿도록 천천히, 가급적 시계 방향과 시계 반대 방향으로 모두 돌려주세요.",
|
||||
"Only after you have done that, you click on \"Done\".": "그 과정을 마친 후에 \"완료\"를 클릭해야 합니다.",
|
||||
"Changes saved successfully": "변경 사항이 성공적으로 저장되었습니다.",
|
||||
"Error while saving changes": "변경 사항 저장 중 오류 발생",
|
||||
"Save changes permanently": "변경 사항 영구 저장",
|
||||
"Reboot controller": "컨트롤러 재부팅",
|
||||
"Controller Info": "컨트롤러 정보",
|
||||
"Debug Info": "디버그 정보",
|
||||
"Software": "소프트웨어",
|
||||
"Hardware": "하드웨어",
|
||||
"FW Build Date": "펌웨어 빌드 날짜",
|
||||
"FW Type": "펌웨어 타입",
|
||||
"FW Series": "펌웨어 시리즈",
|
||||
"FW Version": "펌웨어 버전",
|
||||
"FW Update": "펌웨어 업데이트",
|
||||
"FW Update Info": "펌웨어 업데이트 정보",
|
||||
"SBL FW Version": "SBL 펌웨어 버전",
|
||||
"Venom FW Version": "Venom 펌웨어 버전",
|
||||
"Spider FW Version": "Spider 펌웨어 버전",
|
||||
"Touchpad FW Version": "터치패드 펌웨어 버전",
|
||||
"Serial Number": "시리얼 번호",
|
||||
"MCU Unique ID": "MCU 고유 ID",
|
||||
"PCBA ID": "PCBA ID",
|
||||
"Battery Barcode": "배터리 바코드",
|
||||
"VCM Left Barcode": "VCM 왼쪽 바코드",
|
||||
"VCM Right Barcode": "VCM 오른쪽 바코드",
|
||||
"HW Model": "하드웨어 모델",
|
||||
"Touchpad ID": "터치패드 ID",
|
||||
"Bluetooth Address": "블루투스 주소",
|
||||
"Show all": "모두 보기",
|
||||
"(beta)": "(베타)",
|
||||
"10x zoom": "10배 줌",
|
||||
"30th Anniversary": "30주년 기념",
|
||||
"<b>Externally</b>: by applying +1.8V directly to the visible test point without opening the controller.": "<b>외부에서</b>: 컨트롤러를 분해하지 않고 보이는 테스트 포인트에 직접 +1.8V를 인가합니다.",
|
||||
"<b>Internally</b>: by soldering a wire from a +1.8V source to the write-protect TP.": "<b>내부에서</b>: +1.8V 소스에서 쓰기 방지 TP까지 와이어를 납땜합니다.",
|
||||
"Astro Bot": "아스트로 봇",
|
||||
"Calibration": "보정",
|
||||
"Calibration is being stored in the stick modules.": "보정 값이 스틱 모듈에 저장되고 있습니다.",
|
||||
"Cancel": "취소",
|
||||
"Cannot lock": "잠글 수 없음",
|
||||
"Cannot store data into": "데이터를 저장할 수 없음:",
|
||||
"Cannot unlock": "잠금 해제할 수 없음",
|
||||
"Center (L1)": "중앙 (L1)",
|
||||
"Chroma Indigo": "크로마 인디고",
|
||||
"Chroma Pearl": "크로마 펄",
|
||||
"Chroma Teal": "크로마 틸",
|
||||
"Circularity (R1)": "원형성 (R1)",
|
||||
"Cobalt Blue": "코발트 블루",
|
||||
"Color": "색상",
|
||||
"Cosmic Red": "코스믹 레드",
|
||||
"Debug": "디버그",
|
||||
"DualSense Edge Calibration": "DualSense Edge 보정",
|
||||
"Finetune stick calibration": "스틱 보정 미세 조정",
|
||||
"For more info or help, feel free to reach out on Discord.": "더 많은 정보나 도움이 필요하시면 Discord로 문의해주세요.",
|
||||
"Fortnite": "포트나이트",
|
||||
"Galactic Purple": "갤럭틱 퍼플",
|
||||
"God of War Ragnarok": "갓 오브 워 라그나로크",
|
||||
"Grey Camouflage": "그레이 카무플라주",
|
||||
"If the calibration is not stored permanently, please double-check the wirings of the hardware mod.": "보정 값이 영구적으로 저장되지 않으면 하드웨어 개조 배선을 다시 확인해주세요.",
|
||||
"Info": "정보",
|
||||
"Left Module Barcode": "왼쪽 모듈 바코드",
|
||||
"Left stick": "왼쪽 스틱",
|
||||
"Midnight Black": "미드나이트 블랙",
|
||||
"More details and images": "자세한 내용 및 이미지 더보기",
|
||||
"Move the stick to select it for tuning, then without touching the stick use the D-pad buttons to adjust the center point. Flick it and adjust it again if it is off center or flickers.": "스틱을 움직여 조정할 스틱을 선택한 다음, 스틱을 만지지 않은 상태에서 D-패드 버튼을 사용하여 중앙점을 조정하세요. 스틱을 튕겨보고 중앙에서 벗어나거나 흔들리면 다시 조정하세요.",
|
||||
"Normal": "일반",
|
||||
"Nova Pink": "노바 핑크",
|
||||
"Please note: the stick modules on the DS Edge <b>cannot be calibrated via software alone</b>.": "참고: DS Edge의 스틱 모듈은 <b>소프트웨어만으로는 보정할 수 없습니다</b>.",
|
||||
"To store a custom calibration on the stick's internal memory, a <b>hardware modification</b> is required.": "스틱 내부 메모리에 사용자 지정 보정 값을 저장하려면 <b>하드웨어 개조</b>가 필요합니다.",
|
||||
"Please release the stick to center position before adjusting with D-pad buttons.": "D-패드 버튼으로 조정하기 전에 스틱을 중앙 위치에 놓아주세요.",
|
||||
"Press the D-pad or face buttons in the direction you want the stick position to move.": "스틱 위치를 이동시키고 싶은 방향으로 D-패드나 페이스 버튼을 누르세요.",
|
||||
"Push the stick straight up/down/left/right as far as possible.": "스틱을 위/아래/왼쪽/오른쪽으로 최대한 밀어주세요.",
|
||||
"Right Module Barcode": "오른쪽 모듈 바코드",
|
||||
"Right stick": "오른쪽 스틱",
|
||||
"Show raw numbers": "원시 데이터 보기",
|
||||
"Spider-Man 2": "스파이더맨 2",
|
||||
"Starlight Blue": "스타라이트 블루",
|
||||
"Sterling Silver": "스털링 실버",
|
||||
"Support for calibrating DualSense Edge stick modules is now available as an <b>experimental feature</b>.": "DualSense Edge 스틱 모듈 보정 지원이 이제 <b>실험적인 기능</b>으로 제공됩니다.",
|
||||
"The Last of Us": "더 라스트 오브 어스",
|
||||
"This involves temporarily disabling write protection by applying <b>+1.8V</b> to a specific test point on each module.": "이를 위해서는 각 모듈의 특정 테스트 포인트에 <b>+1.8V</b>를 인가하여 쓰기 방지를 일시적으로 비활성화해야 합니다.",
|
||||
"This is only for advanced users. If you're not sure what you're doing, please do not attempt it.": "이 기능은 고급 사용자 전용입니다. 잘 모르는 경우 시도하지 마십시오.",
|
||||
"Volcanic Red": "볼캐닉 레드",
|
||||
"We are not responsible for any damage caused by attempting this modification.": "이 개조 시도로 인해 발생하는 어떠한 손상에 대해서도 책임지지 않습니다.",
|
||||
"White": "화이트",
|
||||
"You can do this in two ways:": "두 가지 방법으로 할 수 있습니다:",
|
||||
"here": "여기",
|
||||
"left module": "왼쪽 모듈",
|
||||
"right module": "오른쪽 모듈",
|
||||
"(DualSense & DualSense Edge) Will updating the firmware reset calibration?": "",
|
||||
"(DualSense Edge) Is the calibration stored on the controller or the modules?": "",
|
||||
"<strong>Average circularity error:</strong> smaller is not always better! Aim for 7-9 %.": "",
|
||||
"A reboot is needed to continue using this DualSense Edge. Please disconnect and reconnect your controller.": "",
|
||||
"A sample test was done with 30 dualsense edge modules, and the results showed that the inner quartile range (IQR) is 8.3% and 9.0%, with an average of 8.6%. This goes to show that stock controllers by default have a relatively high range, and the rule of thumb is to follow factory calibration.": "",
|
||||
"Adaptive Trigger": "",
|
||||
"Adaptive triggers are only supported on DualSense controllers": "",
|
||||
"Add test": "",
|
||||
"After they have been replaced, this utility can be used to calibrate the controller to work with the new joysticks.": "",
|
||||
"Aim for a circularity error of around 7-9 % for the best playing experience.": "",
|
||||
"Battery level is low. Tests may fail due to the controller being in power saving mode.": "",
|
||||
"Be gentle to avoid damage.": "",
|
||||
"Buttons": "",
|
||||
"Calibrating without replacing the joysticks may help temporarily, but it may also make the problem worse, with no way to undo it.": "",
|
||||
"Calibration History": "",
|
||||
"Can I overwrite a (permanent) calibration?": "",
|
||||
"Can I restore a previous calibration?": "",
|
||||
"Cannot copy text to the clipboard:": "",
|
||||
"Cannot read module barcodes": "",
|
||||
"Center": "",
|
||||
"Circularity": "",
|
||||
"Clear All": "",
|
||||
"Controller does not support adaptive trigger control": "",
|
||||
"Current": "",
|
||||
"Delete": "",
|
||||
"Delete all calibration history for this controller? This cannot be undone.": "",
|
||||
"Delete this calibration entry?": "",
|
||||
"Don't show again": "",
|
||||
"Drift is caused by mechanical parts in the joystick being worn out, and they need to be replaced to fix the drift.": "",
|
||||
"Fail": "",
|
||||
"Failed": "",
|
||||
"Failed to connect to device": "",
|
||||
"Failed to disable adaptive trigger": "",
|
||||
"Failed to set speaker tone": "",
|
||||
"Failed to set vibration": "",
|
||||
"Feel for vibration in the controller.": "",
|
||||
"Finetuning is only available for DualSense and DualSense Edge.": "",
|
||||
"Firefox is supported with the WebHID extension installed.": "",
|
||||
"God of War 20th Anniversary": "",
|
||||
"Haptic Vibration": "",
|
||||
"Headphone Jack": "",
|
||||
"Housing": "",
|
||||
"How do I use the finetuning feature?": "",
|
||||
"If you don't have a battery connected or the connected battery is empty, AND your cable disconnects during saving the calibration, then your controller has a high chance of being bricked.": "",
|
||||
"If you have not clicked the green button \"Save changes permanently\", then unplugging the controller will reset to the previously saved calibration. It is recommended you test your calibration before saving.": "",
|
||||
"If you have saved the changes permanently, you can reset the changes only if you are using a DualSense or DualSense Edge. You can click on the grey button \"Restore Calibration\" to go back to one of the previous calibrations that was saved on the controller. Known issue: You may need to reboot your controller first in order for previous calibrations to show up.": "",
|
||||
"Image 1": "",
|
||||
"Images": "",
|
||||
"In most cases, calibrating your joysticks that have prior drift issues may result in a worse and unpredictable calibration.": "",
|
||||
"Increase non-circularity": "",
|
||||
"Instructions": "",
|
||||
"It appears the latest joystick calibration has not been saved.": "",
|
||||
"Keep rotating the sticks even if you see no progress!": "",
|
||||
"Last connected": "",
|
||||
"Learn more...": "",
|
||||
"Lights": "",
|
||||
"Listen for a tone from the controller speaker.": "",
|
||||
"Long-press [circle] to skip ahead.": "",
|
||||
"Microphone": "",
|
||||
"Microphone Level:": "",
|
||||
"No controller connected": "",
|
||||
"No saved calibrations found.": "",
|
||||
"No tests completed yet.": "",
|
||||
"Not shown in the video: You can now also increase the range in each direction uniformly by using the cross in the top right and moving the slider up, which may speed up finetuning. Make sure to rotate the joystick first, otherwise the button cannot be pressed.": "",
|
||||
"Not tested": "",
|
||||
"Only official controllers are supported, no third-party or \"fake\" controllers.": "",
|
||||
"Option 1": "",
|
||||
"Option 2": "",
|
||||
"Pass": "",
|
||||
"Passed": "",
|
||||
"PlayStation Virtual Reality 2": "",
|
||||
"Please connect a DualShock 4, a DualSense, DualSense Edge or VR2 controller to your computer and press Connect.": "",
|
||||
"Please use a web browser with WebHID support (e.g. Google Chrome or Microsoft Edge) on a PC or Mac.": "",
|
||||
"Plug in headphones to the 3.5mm jack": "",
|
||||
"Press L2 and R2 triggers to feel the trigger resistance.": "",
|
||||
"Press [circle] to close, or [square] to start over": "",
|
||||
"Press [square] to Pass, [cross] to Fail, or [circle] to skip.": "",
|
||||
"Press [square] to begin or [circle] to close": "",
|
||||
"Press [triangle] to go back.": "",
|
||||
"Press each button until they turn green.": "",
|
||||
"Progress": "",
|
||||
"Quick Test": "",
|
||||
"Quick calibrate": "",
|
||||
"Range calibration appears to have failed. Please try again and make sure you rotate the sticks.": "",
|
||||
"Repeat": "",
|
||||
"Restart": "",
|
||||
"Restore": "",
|
||||
"Restore calibration": "",
|
||||
"Rotate the sticks slowly at least 2 times in one direction and 2 times in the other direction to cover the whole range.": "",
|
||||
"Run through these tests to verify your controller's functionality.": "",
|
||||
"Saving calibration is locked by default on DualSense Edge joystick modules. A hardware mod is required to save the calibration permanently. The calibration is saved on the modules themselves, so you have to perform the mod twice: once for each module. You would need to bridge two points on the PCB with enamelled wire. There are multiple methods, I personally recommend using either of these two locations to solder the wire to. See images below. Ensure the wire is thin enough so that the shell is closed properly. Make sure you don't short the wire to ground through the letters near the bottom joint.": "",
|
||||
"Sony DualShock 4": "",
|
||||
"Sony controllers come from the factory calibrated to have an average circularity error of nearly 10 %, and this is now what games expect. Too perfect circularity can make movements and aim feel stiff and unresponsive in some games.": "",
|
||||
"Speaker": "",
|
||||
"Step size": "",
|
||||
"Test Speaker": "",
|
||||
"Test Summary": "",
|
||||
"Test all buttons, or long-press [square] to Pass and [cross] to Fail, or [circle] to skip.": "",
|
||||
"The <b>Done</b> button will unlock after at most 15 seconds. If you press <b>Done</b> without rotating the sticks, the calibration will be incomplete and you will need to repeat it.": "",
|
||||
"The calibration is stored on each module individually. It is carried over if you place the modules in a different DualSense Edge. Likewise, if you place a different set of modules in your DualSense Edge, you will get a different calibration that is tied to those new modules.": "",
|
||||
"The calibration was restored successfully! Remember to save the changes in order not to loose them when the controller is rebooted.": "",
|
||||
"The device appears to be a clone. All calibration functionality is disabled.": "",
|
||||
"The device is connected via Bluetooth. Disconnect and reconnect using a USB cable instead.": "",
|
||||
"The finetuning and quick test menus are only accessible for DualSense and DualSense Edge.": "",
|
||||
"The item has been copied to the clipboard.": "",
|
||||
"The website supports the following official controllers:": "",
|
||||
"These previous calibrations are stored locally in your browser's storage. Meaning you can only restore calibrations using the same computer and browser that you used to calibrate it with, and deleting the cache or using Incognito will make any previous calibration irrecoverable.": "",
|
||||
"This controller has unsaved changes that will be lost when the controller is rebooted.": "",
|
||||
"This software is not intended to fix stickdrift and will <b>not</b> fix stickdrift on its own if you already experience that.": "",
|
||||
"This test checks all controller buttons by requiring you to press each button up to three times.": "",
|
||||
"This test checks the headphone jack functionality.": "",
|
||||
"This test checks the reliability of the USB port.": "",
|
||||
"This test will cycle through red, green, and blue colors on the controller lightbar, animate the player indicator lights, and flash the mute button.": "",
|
||||
"This test will enable heavy resistance on both L2 and R2 triggers.": "",
|
||||
"This utility cannot fix stick drift.": "",
|
||||
"This video from V2.16 shows how to use the finetuning menu.": "",
|
||||
"Through": "",
|
||||
"USB Connector": "",
|
||||
"Unsupported browser.": "",
|
||||
"Use expert mode": "",
|
||||
"Use four-step calibration": "",
|
||||
"Use normal mode": "",
|
||||
"Use quick calibration": "",
|
||||
"Using this utility on a phone or tablet is not supported.": "",
|
||||
"Values": "",
|
||||
"Watch the controller lights change colors, the player lights animate, and the mute button flash.": "",
|
||||
"We recommend a circularity between 7% and 9%. The reason for this is to mimic a stock controllers calibration. However, symmetrical overshoot is more important and if you need to deviate from this range to achieve better symmetry, that is fine too.": "",
|
||||
"What are the risks of using the calibration?": "",
|
||||
"What circularity percentage to aim for when calibrating and finetuning.": "",
|
||||
"What the software will help with, is ensuring new joysticks will function properly after replacing the old broken joysticks that drift. This step involves opening up the controller and soldering new potentiometers or an entire new joystick.": "",
|
||||
"When calibrating, there is no risk. However, if your controller disconnects during the split second that you save a calibration, then you have a chance of bricking your controller. Make sure your battery has enough charge and is plugged into the controller, and the USB cable is securely connected. This prevents your controller from being bricked if the USB cable accidentally disconnects.": "",
|
||||
"Which controllers does DualShock Calibration GUI support?": "",
|
||||
"While holding the stick to be adjusted straight up/down/left/right, make adjustments until you see lightblue sectors in all four directions after circling the stick both left and right. Then use the": "",
|
||||
"Wiggle the USB cable to see if the controller disconnects.": "",
|
||||
"Yes. Simply do another calibration, and click the green button to save permanently.": "",
|
||||
"You should save your changes, or reboot the controller to revert back to the previous state.": "",
|
||||
"Your device might not be a genuine Sony controller. If it is not a clone then please report this issue.": "",
|
||||
"failed": "",
|
||||
"hide": "",
|
||||
"passed": "",
|
||||
"serial number": "",
|
||||
"skipped": "",
|
||||
"tests completed": "",
|
||||
"to increase the non-circularity.": "",
|
||||
"": ""
|
||||
}
|
||||
364
lang/nl_nl.json
Normal file
@@ -0,0 +1,364 @@
|
||||
{
|
||||
".authorMsg": "Vertaald door <a href='https://github.com/Notedop'>Notedop</a> en <a href='https://github.com/Jarnostuff'>Jarnostuff</a>.",
|
||||
"DualShock Calibration GUI": "DualShock Kalibratie GUI",
|
||||
"Connect": "Verbinden",
|
||||
"Connected to:": "Verbonden met:",
|
||||
"Disconnect": "Verbreken",
|
||||
"Calibrate stick center": "Kalibreer stick-center",
|
||||
"Calibrate stick range": "Kalibreer stick-bereik",
|
||||
"Sections below are not useful, just some debug infos or manual commands": "De onderstaande secties zijn niet nuttig, slechts enkele debug-informatie of handmatige commando's",
|
||||
"NVS Status": "NVS-status",
|
||||
"Unknown": "Onbekend",
|
||||
"Query NVS status": "NVS-status opvragen",
|
||||
"NVS unlock": "NVS ontgrendelen",
|
||||
"NVS lock": "NVS vergrendelen",
|
||||
"Stick center calibration": "Stick center kalibratie",
|
||||
"Welcome": "Welkom",
|
||||
"Step 1": "Stap 1",
|
||||
"Step 2": "Stap 2",
|
||||
"Step 3": "Stap 3",
|
||||
"Step 4": "Stap 4",
|
||||
"Completed": "Voltooid",
|
||||
"Welcome to the stick center-calibration wizard!": "Welkom bij de stick center kalibratie wizard!",
|
||||
"This tool will guide you in re-centering the analog sticks of your controller. It consists of four steps: you will be asked to move both sticks in a direction and release them.": "Deze tool begeleidt u bij het opnieuw centreren van de analoge sticks van uw controller. Het bestaat uit vier stappen: u zal worden gevraagd om beide sticks in een richting te bewegen en ze los te laten.",
|
||||
"Please be aware that, <i>once the calibration is running, it cannot be canceled</i>. Do not close this page or disconnect your controller until it is completed.": "Houd er rekening mee dat, <i>eenmaal de kalibratie is uitgevoerd, deze niet kan worden geannuleerd</i>. Sluit deze pagina niet en koppel uw controller niet los voordat deze is voltooid.",
|
||||
"Press <b>Start</b> to begin calibration.": "Druk op <b>Start</b> om de kalibratie te starten.",
|
||||
"Please move both sticks to the <b>top-left corner</b> and release them.": "Verplaats beide sticks naar de <b>linkerbovenhoek</b> en laat ze los.",
|
||||
"When the sticks are back in the center, press <b>Continue</b>.": "Als de sticks weer in het midden staan, druk dan op <b>Doorgaan</b>.",
|
||||
"Please move both sticks to the <b>top-right corner</b> and release them.": "Verplaats alsjeblieft beide sticks in de <b>rechter bovenhoek</b> en laat ze los.",
|
||||
"Please move both sticks to the <b>bottom-left corner</b> and release them.": "Verplaats alsjeblieft beide sticks in de <b>linker onderhoek</b> en laat ze los.",
|
||||
"Please move both sticks to the <b>bottom-right corner</b> and release them.": "Verplaats alstublieft beide sticks in de <b>rechter onderhoek</b> en laat ze los.",
|
||||
"Calibration completed successfully!": "Kalibratie succesvol voltooid!",
|
||||
"Next": "Next",
|
||||
"Recentering the controller sticks.": "Her-centreer de controller sticks.",
|
||||
"Please do not close this window and do not disconnect your controller. ": "Sluit dit venster niet en koppel uw controller niet los. ",
|
||||
"Range calibration": "Bereik kalibratie",
|
||||
"The controller is now sampling data!": "De controller verzamelt nu gegevens!",
|
||||
"Done": "Gereed",
|
||||
"Hi, thank you for using this software.": "Hallo, bedankt voor het gebruik van deze software.",
|
||||
"If you're finding it helpful and you want to support my efforts, feel free to": " Als u het nuttig vindt en mijn inspanningen wilt steunen, voelt u vrij om",
|
||||
"buy me a coffee": "een koffie voor mij te kopen",
|
||||
"! :)": "! :)",
|
||||
"Do you have any suggestion or issue? Drop me a message via email or discord.": "Heeft u een suggestie of probleem? Stuur me een bericht via e-mail of discord.",
|
||||
"Cheers!": "Bedankt!",
|
||||
"Support this project": "Steun dit project",
|
||||
"unknown": "onbekend",
|
||||
"original": "origineel",
|
||||
"clone": "clone",
|
||||
"locked": "vergrendeld",
|
||||
"unlocked": "ontgrendeld",
|
||||
"error": "error",
|
||||
"Build Date": "Build Date",
|
||||
"HW Version": "HW-versie ",
|
||||
"SW Version": "SW-versie",
|
||||
"Device Type": "Apparaat type",
|
||||
"Range calibration completed": "Kalibratie van het bereik is voltooid",
|
||||
"Range calibration failed": " Kalibratie van het bereik is mislukt",
|
||||
"Stick calibration failed": "Stick kalibratie mislukt",
|
||||
"Stick calibration completed": "Stick kalibratie voltooid",
|
||||
"NVS Lock failed": "NVS vergrendeling mislukt",
|
||||
"NVS Unlock failed": "NVS ontgrendeling mislukt",
|
||||
"Please connect only one controller at time.": "Sluit slechts één controller tegelijk aan.",
|
||||
"Sony DualShock 4 V1": "Sony DualShock 4 V1",
|
||||
"Sony DualShock 4 V2": "Sony DualShock 4 V2",
|
||||
"Sony DualSense": "Sony DualSense",
|
||||
"Sony DualSense Edge": "Sony DualSense Edge",
|
||||
"Connected invalid device": "Ongeldig apparaat verbonden",
|
||||
"Error": "Error",
|
||||
"Initializing...": "Initialiseren...",
|
||||
"Storing calibration...": "Kalibratie opslaan...",
|
||||
"Sampling...": "Data verzamelen...",
|
||||
"Calibration in progress": "Kalibratie wordt uitgevoerd",
|
||||
"Start": "Start",
|
||||
"Continue": "Continue",
|
||||
"Have a nice day :)": "Fijne dag :)",
|
||||
"Welcome to the Calibration GUI": "Welkom bij de kalibratie GUI",
|
||||
"Just few things to know before you can start:": "Een paar dingen die u moet weten voordat u kunt beginnen:",
|
||||
"This website is not affiliated with Sony, PlayStation & co.": "Deze website is niet gelieerd aan Sony, PlayStation & co.",
|
||||
"This service is provided without warranty. Use at your own risk.": "Deze service wordt geleverd zonder garantie. Gebruik op eigen risico.",
|
||||
"Keep the internal battery of the controller connected and ensure it is well charged. If the battery dies during operations, the controller will be damaged and rendered unusable.": "Houd de interne batterij van de controller aangesloten en zorg ervoor dat deze goed is opgeladen. Als de batterij leegraakt tijdens het gebruik, wordt de controller beschadigd en onbruikbaar gemaakt.",
|
||||
"Before doing the permanent calibration, try the temporary one to ensure that everything is working well.": "Probeer eerst de tijdelijke kalibratie voordat u de permanente kalibratie uitvoert om er zeker van te zijn dat alles goed werkt.",
|
||||
"Understood": "Begrepen",
|
||||
"Version": "Version",
|
||||
"Frequently Asked Questions": "Frequently Asked Questions",
|
||||
"Close": "Sluiten",
|
||||
"Welcome to the F.A.Q. section! Below, you'll find answers to some of the most commonly asked questions about this website. If you have any other inquiries or need further assistance, feel free to reach out to me directly. Your feedback and questions are always welcome!": " Welkom bij de FAQ sectie! Hieronder vindt u antwoorden op enkele van de meest gestelde vragen over deze website. Als u nog andere vragen heeft of verdere hulp nodig heeft, kunt u rechtstreeks contact met mij opnemen. Uw feedback en vragen zijn altijd welkom!",
|
||||
"How does it work?": "Hoe werkt het?",
|
||||
"Behind the scenes, this website is the culmination of one year of dedicated effort in reverse-engineering DualShock controllers for fun/hobby from a random guy on the internet.": "Achter de schermen is deze website het resultaat van een jaar toegewijde inspanning in het reverse-engineeren van DualShock-controllers voor de lol/hobby van een willekeurige man op internet.",
|
||||
"Through": "Door",
|
||||
"this research": "dit onderzoek",
|
||||
", it was discovered that there exist some undocumented commands on DualShock controllers that can be sent via USB and are used during factory assembly process. If these commands are sent, the controller starts the recalibration of analog sticks.": ", werd ontdekt dat er enkele ongedocumenteerde opdrachten op DualShock-controllers bestaan die via USB kunnen worden verzonden en worden gebruikt tijdens het assemblageproces in de fabriek. Als deze commando's worden verzonden, start de controller de herkalibratie van analoge sticks.",
|
||||
"While the primary focus of this research wasn't initially centered on recalibration, it became apparent that a service offering this capability could greatly benefit numerous individuals. And thus, here we are.": "Hoewel de primaire focus van dit onderzoek aanvankelijk niet op herkalibratie lag, werd het duidelijk dat een dienst die deze mogelijkheid biedt, veel individuen enorm ten goede zou kunnen komen. En dus zijn we hier.",
|
||||
"Is this an officially endorsed service?": "Is dit een officieel goedgekeurde dienst?",
|
||||
"No, this service is simply a creation by a DualShock enthusiast.": "Nee, deze dienst is eenvoudigweg een creatie van een DualShock-liefhebber.",
|
||||
"Does this website detect if a controller is a clone?": "Detecteert deze website of een controller een kloon is?",
|
||||
"Yes, only DualShock4 at the moment. This happened because I accidentally purchased some clones, spent time identifying the differences and added this functionality to prevent future deception.": " Ja, momenteel alleen DualShock4. Dit gebeurde omdat ik per ongeluk een aantal klonen kocht, tijd besteedde aan het identificeren van de verschillen en deze functionaliteit toevoegde om toekomstige misleiding te voorkomen.",
|
||||
"Unfortunately, the clones cannot be calibrated anyway, because they only clone the behavior of a DualShock4 during normal gameplay, not all the undocumented functionalities.": "Helaas kunnen de klonen hoe dan ook niet worden gekalibreerd, omdat ze alleen het gedrag klonen van een DualShock4 tijdens een normale gameplay en niet alle niet-gedocumenteerde functionaliteiten die een DualShock heeft.",
|
||||
"If you want to extend this detection functionality to DualSense, please ship me a fake DualSense and you'll see it in few weeks.": "Als u wilt dat ik deze detectie functionaliteit uitbreidt naar DualSense, stuur me dan een nep-DualSense en je zult het binnen een paar weken zien.",
|
||||
"What development is in plan?": "Welke ontwikkeling staat er op de planning?",
|
||||
"I maintain two separate to-do lists for this project, although the priority has yet to be established.": "Ik houd twee aparte to-do-lijsten bij voor dit project, hoewel de prioriteit nog moet worden vastgesteld.",
|
||||
"The first list is about enhancing support for DualShock4 and DualSense controllers:": "De eerste lijst gaat over het verbeteren van de ondersteuning voor DualShock4- en DualSense-controllers:",
|
||||
"Implement calibration of L2/R2 triggers.": "Implementeer kalibratie van L2/R2-triggers.",
|
||||
"Improve detection of clones, particularly beneficial for those seeking to purchase used controllers with assurance of authenticity.": "Verbeter de detectie van klonen, vooral gunstig voor degenen die gebruikte controllers willen kopen met de zekerheid van authenticiteit.",
|
||||
"Add support for recalibrating IMUs.": "Ondersteuning toevoegen voor het opnieuw kalibreren van IMU's.",
|
||||
"Additionally, explore the possibility of reviving non-functioning DualShock controllers (further discussion available on Discord for interested parties).": "Verken bovendien de mogelijkheid om niet functionerende DualShock-controllers nieuw leven in te blazen (verdere discussie beschikbaar op Discord voor geïnteresseerde partijen ).",
|
||||
"The second list contains new controllers I aim to support:": "De tweede lijst bevat nieuwe controllers die ik wil ondersteunen:",
|
||||
"DualShock 3": "DualShock 3",
|
||||
"XBox Controllers": "XBox Controllers",
|
||||
"Each of these tasks presents both immense interest and significant time investment. To provide context, supporting a new controller typically demands 6-12 months of full-time research, alongside a stroke of good fortune.": "Elk van deze taken biedt zowel enorme interesse als aanzienlijke tijdsinvestering. Om context te bieden, vereist het ondersteunen van een nieuwe controller doorgaans zes tot twaalf maanden fulltime onderzoek, naast een meevaller.",
|
||||
"I love this service, it helped me! How can I contribute?": "Ik ben dol op deze service, het heeft me geholpen! Hoe kan ik bijdragen?",
|
||||
"I'm glad to hear that you found this helpful! If you're interested in contributing, here are a few ways you can help me:": "Ik ben blij om te horen dat je dit nuttig vond! Als u geïnteresseerd bent om bij te dragen, zijn hier een paar manieren waarop u me kunt helpen:",
|
||||
"Consider making a": "Overweeg een",
|
||||
"donation": "donatie",
|
||||
"to support my late-night caffeine-fueled reverse-engineering efforts.": "ter ondersteuning van mijn door cafeïne aangedreven reverse-engineering-inspanningen.",
|
||||
"Ship me a controller you would love to add (send me an email for organization).": "Stuur mij een controller die u graag wilt toevoegen (stuur mij een e-mail voor organisatie).",
|
||||
"Translate this website in your language": "Vertaal deze website in uw taal",
|
||||
", to help more people like you!": ", om meer mensen zoals jij te helpen!",
|
||||
"This website uses analytics to improve the service.": "Deze website maakt gebruik van analyses om de service te verbeteren.",
|
||||
"Board Model": "Board Model",
|
||||
"This DualSense controller has outdated firmware.": "Deze DualSense-controller heeft verouderde firmware.",
|
||||
"Please update the firmware and try again.": "Update de firmware en probeer het opnieuw.",
|
||||
"Joystick Info": "Joystick Info",
|
||||
"Check circularity": "Controleer de circulariteit",
|
||||
"(beta)": "(beta)",
|
||||
"10x zoom": "10x zoom",
|
||||
"30th Anniversary": "30-jarig Jubileum",
|
||||
"<b>Externally</b>: by applying +1.8V directly to the visible test point without opening the controller.": "<b>Extern</b>: door +1,8 V rechtstreeks op het zichtbare testpunt aan te sluiten zonder de controller te openen.",
|
||||
"<b>Internally</b>: by soldering a wire from a +1.8V source to the write-protect TP.": "<b>Intern</b>: door een draad van een +1,8 V-bron naar het write-protect-testpunt te solderen.",
|
||||
"<strong>Average circularity error:</strong> smaller is not always better! Aim for 7-9 %.": "<strong>Gemiddelde circulariteitsfout:</strong> kleiner is niet altijd beter! Streef naar 7-9 %.",
|
||||
"A reboot is needed to continue using this DualSense Edge. Please disconnect and reconnect your controller.": "Er is een herstart nodig om deze DualSense Edge te kunnen blijven gebruiken. Koppel uw controller los en sluit hem opnieuw aan.",
|
||||
"Adaptive Trigger": "Adaptieve Trigger",
|
||||
"Adaptive triggers are only supported on DualSense controllers": "Adaptieve triggers worden alleen ondersteund op DualSense-controllers.",
|
||||
"Add test": "Test toevoegen",
|
||||
"After range calibration, joysticks always go in corners.": "Na kalibratie van het bereik gaan joysticks altijd naar de hoeken.",
|
||||
"After they have been replaced, this utility can be used to calibrate the controller to work with the new joysticks.": "Nadat ze zijn vervangen, kan dit programma worden gebruikt om de controller te kalibreren zodat deze met de nieuwe joysticks werkt.",
|
||||
"Aim for a circularity error of around 7-9 % for the best playing experience.": "Streef naar een circulariteitsfout van ongeveer 7-9 % voor de beste speelervaring.",
|
||||
"Astro Bot": "Astro Bot",
|
||||
"Battery Barcode": "Batterijbarcode",
|
||||
"Battery level is low. Tests may fail due to the controller being in power saving mode.": "Het batterijniveau is laag. Testen kunnen mislukken omdat de controller in de energiebesparingsmodus staat.",
|
||||
"Be gentle to avoid damage.": "Wees voorzichtig om schade te voorkomen.",
|
||||
"Bluetooth Address": "Bluetooth-adres",
|
||||
"Buttons": "Knoppen",
|
||||
"Calibrating without replacing the joysticks may help temporarily, but it may also make the problem worse, with no way to undo it.": "Kalibreren zonder de joysticks te vervangen kan tijdelijk helpen, maar het kan het probleem ook verergeren, waardoor het niet meer ongedaan kan worden gemaakt.",
|
||||
"Calibration": "Kalibratie",
|
||||
"Calibration History": "Kalibratiegeschiedenis",
|
||||
"Calibration is being stored in the stick modules.": "De kalibratie wordt opgeslagen in de stickmodules.",
|
||||
"Cancel": "Annuleren",
|
||||
"Cannot copy text to the clipboard:": "Kan geen tekst naar het klembord kopiëren:",
|
||||
"Cannot lock": "Kan niet vergrendelen",
|
||||
"Cannot read module barcodes": "Kan modulebarcodes niet lezen",
|
||||
"Cannot store data into": "Kan geen gegevens opslaan in",
|
||||
"Cannot unlock": "Kan niet ontgrendelen",
|
||||
"Center": "Midden",
|
||||
"Center (L1)": "Midden (L1)",
|
||||
"Changes saved successfully": "Wijzigingen succesvol opgeslagen",
|
||||
"Chroma Indigo": "Chroma Indigo",
|
||||
"Chroma Pearl": "Chroma Pearl",
|
||||
"Chroma Teal": "Chroma Teal",
|
||||
"Circularity": "Circulariteit",
|
||||
"Circularity (R1)": "Circulariteit (R1)",
|
||||
"Clear All": "Alles Wissen",
|
||||
"Cobalt Blue": "Cobalt Blue",
|
||||
"Color": "Kleur",
|
||||
"Controller Info": "Controllerinformatie",
|
||||
"Controller does not support adaptive trigger control": "Controller ondersteunt geen adaptieve triggerbesturing",
|
||||
"Cosmic Red": "Cosmic Red",
|
||||
"Current": "Huidig",
|
||||
"Debug": "Debug",
|
||||
"Debug Info": "Debug-informatie",
|
||||
"Debug buttons": "Debug-knoppen",
|
||||
"Delete": "Verwijderen",
|
||||
"Delete all calibration history for this controller? This cannot be undone.": "Wilt u alle kalibratiegegevens voor deze controller verwijderen? Dit kan niet ongedaan worden gemaakt.",
|
||||
"Delete this calibration entry?": "Dit kalibratie-item verwijderen?",
|
||||
"Does this software resolve stickdrift?": "Lost deze software stickdrift op?",
|
||||
"Don't show again": "Niet meer weergeven",
|
||||
"Drift is caused by mechanical parts in the joystick being worn out, and they need to be replaced to fix the drift.": "Drift wordt veroorzaakt door slijtage van mechanische onderdelen in de joystick. Deze moeten worden vervangen om de drift te herstellen.",
|
||||
"DualSense Edge Calibration": "DualSense Edge Kalibratie",
|
||||
"Error while saving changes": "Fout tijdens het opslaan van wijzigingen",
|
||||
"FW Build Date": "FW Build Date",
|
||||
"FW Series": "FW Series",
|
||||
"FW Type": "FW Type",
|
||||
"FW Update": "FW Update",
|
||||
"FW Update Info": "FW Update Info",
|
||||
"FW Version": "FW Version",
|
||||
"Fail": "Mislukt",
|
||||
"Failed": "Mislukt",
|
||||
"Failed to connect to device": "Kan geen verbinding maken met het apparaat",
|
||||
"Failed to disable adaptive trigger": "Mislukt om adaptieve trigger uit te schakelen",
|
||||
"Failed to set speaker tone": "Kan de luidsprekertoon niet instellen",
|
||||
"Failed to set vibration": "Mislukt om trilling in te stellen",
|
||||
"Feel for vibration in the controller.": "Voel of de controller trilt.",
|
||||
"Finetune stick calibration": "Stickkalibratie nauwkeurig afstellen",
|
||||
"Firefox is supported with the WebHID extension installed.": "Firefox wordt ondersteund met de WebHID-extensie geïnstalleerd.",
|
||||
"For more info or help, feel free to reach out on Discord.": "Neem voor meer informatie of hulp gerust contact op via Discord.",
|
||||
"Fortnite": "Fortnite",
|
||||
"Galactic Purple": "Galactic Purple",
|
||||
"God of War Ragnarok": "God of War Ragnarok",
|
||||
"Grey Camouflage": "Grey Camouflage",
|
||||
"HW Model": "HW Model",
|
||||
"Haptic Vibration": "Haptische Vibratie",
|
||||
"Hardware": "Hardware",
|
||||
"Headphone Jack": "Headphone Jack",
|
||||
"If the calibration is not stored permanently, please double-check the wirings of the hardware mod.": "Als de kalibratie niet permanent wordt opgeslagen, controleer dan nogmaals de kabels van de hardwaremodificatie.",
|
||||
"Increase non-circularity": "Verhoog de niet-circulariteit",
|
||||
"Info": "Informatie",
|
||||
"Instructions": "Instructies",
|
||||
"It appears the latest joystick calibration has not been saved.": "Het lijkt erop dat de laatste joystickkalibratie niet is opgeslagen.",
|
||||
"Keep rotating the sticks even if you see no progress!": "Blijf de sticks draaien, ook al ziet u geen vooruitgang!",
|
||||
"Last connected": "Laatst verbonden",
|
||||
"Learn more...": "Lees meer...",
|
||||
"Left Module Barcode": "Linker Modulebarcode",
|
||||
"Left stick": "Linker stick",
|
||||
"Lights": "Lichten",
|
||||
"Listen for a tone from the controller speaker.": "Luister of er een toon uit de luidspreker van de controller komt.",
|
||||
"Long-press [circle] to skip ahead.": "Houd [cirkel] ingedrukt om door te gaan.",
|
||||
"MCU Unique ID": "MCU unieke ID",
|
||||
"Make sure to touch the edges of the joystick frame and rotate slowly, preferably in each direction - clockwise and anti-clockwise.": "Zorg ervoor dat u de randen van het joystickframe aanraakt en deze langzaam draait, bij voorkeur in beide richtingen - met de klok mee en tegen de klok in.",
|
||||
"Microphone": "Microfoon",
|
||||
"Microphone Level:": "Microfoonniveau:",
|
||||
"Midnight Black": "Midnight Black",
|
||||
"More details and images": "Meer details en afbeeldingen",
|
||||
"Move the stick to select it for tuning, then without touching the stick use the D-pad buttons to adjust the center point. Flick it and adjust it again if it is off center or flickers.": "Beweeg de stick om deze te selecteren voor het afstellen, vervolgens zonder de stick aan te raken gebruikt u de D-pad-knoppen om het middelpunt aan te passen. Beweeg de stick en pas deze opnieuw aan als deze niet in het midden staat of flikkert.",
|
||||
"No controller connected": "Geen controller verbonden",
|
||||
"No saved calibrations found.": "Geen opgeslagen kalibraties gevonden.",
|
||||
"No tests completed yet.": "Nog geen testen voltooid.",
|
||||
"No.": "Nee.",
|
||||
"Normal": "Normaal",
|
||||
"Not tested": "Niet getest",
|
||||
"Nova Pink": "Nova Pink",
|
||||
"Only after you have done that, you click on \"Done\".": "Pas nadat u dat hebt gedaan, klikt u op \"Gereed\".",
|
||||
"PCBA ID": "PCBA ID",
|
||||
"Pass": "Geslaagd",
|
||||
"Passed": "Geslaagd",
|
||||
"Please connect a DualShock 4, a DualSense, DualSense Edge or VR2 controller to your computer and press Connect.": "Sluit een DualShock 4, DualSense, DualSense Edge of VR2 controller aan op uw computer en druk op Verbinden.",
|
||||
"Please note: the stick modules on the DS Edge <b>cannot be calibrated via software alone</b>.": "Let op: de stickmodules op de DS Edge <b>kunnen niet alleen via software worden gekalibreerd</b>.",
|
||||
"Please read the instructions.": "Lees alstublieft de instructies.",
|
||||
"Please release the stick to center position before adjusting with D-pad buttons.": "Laat de stick eerst los zodat deze terugkeert naar de middenpositie voordat u aanpassingen doet met de D-pad-knoppen.",
|
||||
"Please use a web browser with WebHID support (e.g. Google Chrome or Microsoft Edge) on a PC or Mac.": "Gebruik een webbrowser met WebHID-ondersteuning (bijvoorbeeld Google Chrome of Microsoft Edge) op een pc of Mac.",
|
||||
"Plug in headphones to the 3.5mm jack": "Sluit een hoofdtelefoon aan op de 3,5 mm-aansluiting.",
|
||||
"Press L2 and R2 triggers to feel the trigger resistance.": "Druk op L2 en R2 om de weerstand van de trigger te voelen.",
|
||||
"Press [circle] to close, or [square] to start over": "Druk op [cirkel] om te sluiten, of op [vierkant] om opnieuw te beginnen.",
|
||||
"Press [square] to Pass, [cross] to Fail, or [circle] to skip.": "Druk op [vierkant] om goed te keuren, [kruis] om af te keuren of [cirkel] om over te slaan.",
|
||||
"Press [square] to begin or [circle] to close": "Druk op [vierkant] om te beginnen of op [cirkel] om te sluiten.",
|
||||
"Press [triangle] to go back.": "Druk op [driehoek] om terug te gaan.",
|
||||
"Press each button until they turn green.": "Druk op elke knop totdat ze groen worden.",
|
||||
"Press the D-pad or face buttons in the direction you want the stick position to move.": "Druk op de D-pad of de knoppen in de richting waarin u de stick wilt bewegen.",
|
||||
"Progress": "Voortgang",
|
||||
"Push the stick straight up/down/left/right as far as possible.": "Duw de stick zo ver mogelijk omhoog/omlaag/naar links/naar rechts.",
|
||||
"Quick Test": "Snelle test",
|
||||
"Quick calibrate": "Snel kalibreren",
|
||||
"Range calibration appears to have failed. Please try again and make sure you rotate the sticks.": "De bereikkalibratie lijkt mislukt te zijn. Probeer het opnieuw en zorg ervoor dat u de sticks ronddraait.",
|
||||
"Reboot controller": "Controller opnieuw opstarten",
|
||||
"Repeat": "Herhalen",
|
||||
"Restart": "Opnieuw starten",
|
||||
"Restore": "Herstellen",
|
||||
"Restore calibration": "Kalibratie herstellen",
|
||||
"Right Module Barcode": "Rechter module Barcode",
|
||||
"Right stick": "Rechter stick",
|
||||
"Rotate the sticks slowly at least 2 times in one direction and 2 times in the other direction to cover the whole range.": "Draai de sticks langzaam minstens 2 keer in de ene richting en 2 keer in de andere richting om het hele bereik te dekken.",
|
||||
"Run through these tests to verify your controller's functionality.": "Voer deze testen uit om de functionaliteit van uw controller te controleren.",
|
||||
"SBL FW Version": "SBL FW Versie",
|
||||
"Save changes permanently": "Wijzigingen permanent opslaan",
|
||||
"Serial Number": "Serienummer",
|
||||
"Show all": "Alles weergeven",
|
||||
"Show raw numbers": "Ruwe waarden tonen",
|
||||
"Software": "Software",
|
||||
"Sony controllers come from the factory calibrated to have an average circularity error of nearly 10 %, and this is now what games expect. Too perfect circularity can make movements and aim feel stiff and unresponsive in some games.": "Sony-controllers worden in de fabriek gekalibreerd met een gemiddelde circulariteitsfout van bijna 10 %, en dit is nu wat games verwachten. Een te perfecte circulariteit kan ervoor zorgen dat bewegingen en richten in sommige games stijf en traag aanvoelen.",
|
||||
"Speaker": "Luidspreker",
|
||||
"Spider FW Version": "Spider FW Versie",
|
||||
"Spider-Man 2": "Spider-Man 2",
|
||||
"Starlight Blue": "Starlight Blue",
|
||||
"Step size": "Stapgrootte",
|
||||
"Sterling Silver": "Sterling Silver",
|
||||
"Stickdrift is caused by a physical defect; namely dirt, worn potentiometer or in some cases a worn spring.": "Stickdrift wordt veroorzaakt door een fysiek defect, namelijk vuil, een versleten potentiometer of in sommige gevallen een versleten veer.",
|
||||
"Support for calibrating DualSense Edge stick modules is now available as an <b>experimental feature</b>.": "Ondersteuning voor het kalibreren van DualSense Edge-stickmodules is nu beschikbaar als een <b>experimentele functie</b>.",
|
||||
"Test Speaker": "Luidspreker testen",
|
||||
"Test Summary": "Samenvatting van de test",
|
||||
"Test all buttons, or long-press [square] to Pass and [cross] to Fail, or [circle] to skip.": "Test alle knoppen, of druk lang op [vierkant] om te slagen en [kruis] om te mislukken, of [cirkel] om over te slaan.",
|
||||
"The <b>Done</b> button will unlock after at most 15 seconds. If you press <b>Done</b> without rotating the sticks, the calibration will be incomplete and you will need to repeat it.": "De knop <b>Gereed</b> wordt na maximaal 15 seconden ontgrendeld. Als u op <b>Gereed</b> drukt zonder de sticks te draaien, is de kalibratie onvolledig en moet u deze herhalen.",
|
||||
"The Last of Us": "The Last of Us",
|
||||
"The calibration was restored successfully! Remember to save the changes in order not to loose them when the controller is rebooted.": "De kalibratie is succesvol teruggezet! Vergeet niet de wijzigingen op te slaan, zodat ze niet verloren gaan wanneer de controller opnieuw wordt opgestart.",
|
||||
"The device appears to be a clone. All calibration functionality is disabled.": "Het apparaat lijkt een kloon te zijn. Alle kalibratiefuncties zijn uitgeschakeld.",
|
||||
"The device is connected via Bluetooth. Disconnect and reconnect using a USB cable instead.": "Het apparaat is verbonden via Bluetooth. Verbreek de verbinding en maak opnieuw verbinding met een USB-kabel.",
|
||||
"The item has been copied to the clipboard.": "Het item is gekopieerd naar het klembord.",
|
||||
"This controller has unsaved changes that will be lost when the controller is rebooted.": "Deze controller bevat niet-opgeslagen wijzigingen die verloren zullen gaan wanneer de controller opnieuw wordt opgestart.",
|
||||
"This involves temporarily disabling write protection by applying <b>+1.8V</b> to a specific test point on each module.": "Hiervoor moet de schrijfbeveiliging tijdelijk worden uitgeschakeld door <b>+1,8 V</b> toe te passen op een specifiek testpunt op elke module.",
|
||||
"This is only for advanced users. If you're not sure what you're doing, please do not attempt it.": "Dit is alleen voor gevorderde gebruikers. Als u niet zeker weet wat u doet, probeer dit dan alsjeblieft niet.",
|
||||
"This issue happens because you have clicked \"Done\" immediately after starting a range calibration.": "Dit probleem doet zich voor omdat u direct na het starten van een bereikkalibratie op \"Gereed\" hebt geklikt.",
|
||||
"This test checks all controller buttons by requiring you to press each button up to three times.": "Deze test controleert alle knoppen van de controller waarbij u elke knop drie keer moet indrukken.",
|
||||
"This test checks the headphone jack functionality.": "Deze test controleert de functionaliteit van de koptelefoonaansluiting.",
|
||||
"This test checks the reliability of the USB port.": "Deze test controleert de betrouwbaarheid van de USB-poort.",
|
||||
"This test will cycle through red, green, and blue colors on the controller lightbar, animate the player indicator lights, and flash the mute button.": "Deze test laat de kleuren rood, groen en blauw op de lichtbalk van de controller zien, laat de lichtjes van de spelersindicator oplichten en laat de mute-knop knipperen.",
|
||||
"This test will enable heavy resistance on both L2 and R2 triggers.": "Deze test schakelt een sterke weerstand in op zowel de L2- als de R2-trigger.",
|
||||
"This utility cannot fix stick drift.": "Dit programma kan stickdrift niet oplossen.",
|
||||
"To store a custom calibration on the stick's internal memory, a <b>hardware modification</b> is required.": "Om een aangepaste kalibratie op te slaan in het interne geheugen van de stick, is een <b>hardwareaanpassing</b> vereist.",
|
||||
"Touchpad FW Version": "Touchpad FW Versie",
|
||||
"Touchpad ID": "Touchpad ID",
|
||||
"USB Connector": "USB-aansluiting",
|
||||
"Unsupported browser.": "Browser wordt niet ondersteund.",
|
||||
"Use expert mode": "Gebruik expertmodus",
|
||||
"Use four-step calibration": "Gebruik vierstaps kalibratie",
|
||||
"Use normal mode": "Gebruik normale modus",
|
||||
"Use quick calibration": "Gebruik snelle kalibratie",
|
||||
"Using this utility on a phone or tablet is not supported.": "Het gebruik van dit programma op een telefoon of tablet wordt niet ondersteund.",
|
||||
"VCM Left Barcode": "VCM linker barcode",
|
||||
"VCM Right Barcode": "VCM rechter barcode",
|
||||
"Values": "Waarden",
|
||||
"Venom FW Version": "Venom FW Versie",
|
||||
"Volcanic Red": "Volcanic Red",
|
||||
"Watch the controller lights change colors, the player lights animate, and the mute button flash.": "Bekijk hoe de lampjes op de controller van kleur veranderen, de spelerslampjes oplichten en de mute-knop knippert.",
|
||||
"We are not responsible for any damage caused by attempting this modification.": "Wij zijn niet verantwoordelijk voor schade die wordt veroorzaakt door het uitvoeren van deze wijziging.",
|
||||
"While holding the stick to be adjusted straight up/down/left/right, make adjustments until you see lightblue sectors in all four directions after circling the stick both left and right. Then use the": "Terwijl u de stick recht omhoog/omlaag/naar links/naar rechts houdt, past u de instellingen aan totdat u lichtblauwe sectoren in alle vier de richtingen ziet nadat u de stick zowel naar links als naar rechts hebt gedraaid. Gebruik vervolgens de",
|
||||
"White": "Wit",
|
||||
"Wiggle the USB cable to see if the controller disconnects.": "Beweeg de USB-kabel heen en weer om te zien of de controller losraakt.",
|
||||
"You can do this in two ways:": "U kunt dit op twee manieren doen:",
|
||||
"You have to rotate the joysticks before you press \"Done\".": "U moet de joysticks draaien voordat u op \"Gereed\" drukt.",
|
||||
"You should save your changes, or reboot the controller to revert back to the previous state.": "U moet uw wijzigingen opslaan of de controller opnieuw opstarten om terug te keren naar de vorige status.",
|
||||
"Your device might not be a genuine Sony controller. If it is not a clone then please report this issue.": "Uw apparaat is mogelijk geen originele Sony-controller. Als het geen kloon is, meld dit probleem dan.",
|
||||
"failed": "mislukt",
|
||||
"here": "hier",
|
||||
"hide": "verbergen",
|
||||
"left module": "linker module",
|
||||
"passed": "geslaagd",
|
||||
"right module": "rechter module",
|
||||
"serial number": "serienummer",
|
||||
"skipped": "overgeslagen",
|
||||
"tests completed": "testen voltooid",
|
||||
"to increase the non-circularity.": "om de niet-circulariteit te vergroten.",
|
||||
"(DualSense & DualSense Edge) Will updating the firmware reset calibration?": "",
|
||||
"(DualSense Edge) Is the calibration stored on the controller or the modules?": "",
|
||||
"A sample test was done with 30 dualsense edge modules, and the results showed that the inner quartile range (IQR) is 8.3% and 9.0%, with an average of 8.6%. This goes to show that stock controllers by default have a relatively high range, and the rule of thumb is to follow factory calibration.": "",
|
||||
"Can I overwrite a (permanent) calibration?": "",
|
||||
"Can I restore a previous calibration?": "",
|
||||
"Finetuning is only available for DualSense and DualSense Edge.": "",
|
||||
"God of War 20th Anniversary": "",
|
||||
"Housing": "",
|
||||
"How do I use the finetuning feature?": "",
|
||||
"If you don't have a battery connected or the connected battery is empty, AND your cable disconnects during saving the calibration, then your controller has a high chance of being bricked.": "",
|
||||
"If you have not clicked the green button \"Save changes permanently\", then unplugging the controller will reset to the previously saved calibration. It is recommended you test your calibration before saving.": "",
|
||||
"If you have saved the changes permanently, you can reset the changes only if you are using a DualSense or DualSense Edge. You can click on the grey button \"Restore Calibration\" to go back to one of the previous calibrations that was saved on the controller. Known issue: You may need to reboot your controller first in order for previous calibrations to show up.": "",
|
||||
"Image 1": "",
|
||||
"Images": "",
|
||||
"In most cases, calibrating your joysticks that have prior drift issues may result in a worse and unpredictable calibration.": "",
|
||||
"Not shown in the video: You can now also increase the range in each direction uniformly by using the cross in the top right and moving the slider up, which may speed up finetuning. Make sure to rotate the joystick first, otherwise the button cannot be pressed.": "",
|
||||
"Only official controllers are supported, no third-party or \"fake\" controllers.": "",
|
||||
"Option 1": "",
|
||||
"Option 2": "",
|
||||
"PlayStation Virtual Reality 2": "",
|
||||
"Saving calibration is locked by default on DualSense Edge joystick modules. A hardware mod is required to save the calibration permanently. The calibration is saved on the modules themselves, so you have to perform the mod twice: once for each module. You would need to bridge two points on the PCB with enamelled wire. There are multiple methods, I personally recommend using either of these two locations to solder the wire to. See images below. Ensure the wire is thin enough so that the shell is closed properly. Make sure you don't short the wire to ground through the letters near the bottom joint.": "",
|
||||
"Sony DualShock 4": "",
|
||||
"The calibration is stored on each module individually. It is carried over if you place the modules in a different DualSense Edge. Likewise, if you place a different set of modules in your DualSense Edge, you will get a different calibration that is tied to those new modules.": "",
|
||||
"The finetuning and quick test menus are only accessible for DualSense and DualSense Edge.": "",
|
||||
"The website supports the following official controllers:": "",
|
||||
"These previous calibrations are stored locally in your browser's storage. Meaning you can only restore calibrations using the same computer and browser that you used to calibrate it with, and deleting the cache or using Incognito will make any previous calibration irrecoverable.": "",
|
||||
"This software is not intended to fix stickdrift and will <b>not</b> fix stickdrift on its own if you already experience that.": "",
|
||||
"This video from V2.16 shows how to use the finetuning menu.": "",
|
||||
"We recommend a circularity between 7% and 9%. The reason for this is to mimic a stock controllers calibration. However, symmetrical overshoot is more important and if you need to deviate from this range to achieve better symmetry, that is fine too.": "",
|
||||
"What are the risks of using the calibration?": "",
|
||||
"What circularity percentage to aim for when calibrating and finetuning.": "",
|
||||
"What the software will help with, is ensuring new joysticks will function properly after replacing the old broken joysticks that drift. This step involves opening up the controller and soldering new potentiometers or an entire new joystick.": "",
|
||||
"When calibrating, there is no risk. However, if your controller disconnects during the split second that you save a calibration, then you have a chance of bricking your controller. Make sure your battery has enough charge and is plugged into the controller, and the USB cable is securely connected. This prevents your controller from being bricked if the USB cable accidentally disconnects.": "",
|
||||
"Which controllers does DualShock Calibration GUI support?": "",
|
||||
"Yes. Simply do another calibration, and click the green button to save permanently.": "",
|
||||
"": ""
|
||||
}
|
||||
362
lang/pl_pl.json
Normal file
@@ -0,0 +1,362 @@
|
||||
{
|
||||
".authorMsg": "Tłumaczenie na język polski wykonał <a href='https://github.com/Marekk2k'>Marekk</a>, oraz <a href='https://github.com/GoomisPL'>GoomisPL</a>",
|
||||
"DualShock Calibration GUI": "DualShock Calibration GUI",
|
||||
"Connect": "Połącz",
|
||||
"Connected to:": "Połączono z:",
|
||||
"Disconnect": "Rozłącz kontroler",
|
||||
"Calibrate stick center": "Skalibruj punkt środkowy drążków",
|
||||
"Calibrate stick range": "Skalibruj maksymalny zakres drążków",
|
||||
"Sections below are not useful, just some debug infos or manual commands": "Poniższe sekcje nie są przydatne, zawierają jedynie informacje dotyczące debugowania lub ręcznych poleceń",
|
||||
"NVS Status": "Status NVS",
|
||||
"Unknown": "Nieznany",
|
||||
"Debug buttons": "Opcje debugowania",
|
||||
"Query NVS status": "Zapytanie o status NVS",
|
||||
"NVS unlock": "Odblokuj NVS",
|
||||
"NVS lock": "Zablokuj NVS",
|
||||
"Stick center calibration": "Kalibracja centralna drążków",
|
||||
"Welcome": "Witamy",
|
||||
"Step 1": "Krok 1",
|
||||
"Step 2": "Krok 2",
|
||||
"Step 3": "Krok 3",
|
||||
"Step 4": "Krok 4",
|
||||
"Completed": "Zakończono",
|
||||
"Welcome to the stick center-calibration wizard!": "Witamy w narzędziu kalibracyjnym centralnego punktu drążków!",
|
||||
"This tool will guide you in re-centering the analog sticks of your controller. It consists of four steps: you will be asked to move both sticks in a direction and release them.": "To narzędzie pomoże Ci w ponownym wycentrowaniu drążków kontrolera. Składa się z czterech kroków: zostaniesz poproszony o przesunięcie obu drążków w określonych kierunkach, a następnie w ich puszczeniu.",
|
||||
"Please be aware that, <i>once the calibration is running, it cannot be canceled</i>. Do not close this page or disconnect your controller until it is completed.": "Prosimy pamiętać, żeby po rozpoczęciu kalibracji nie anulować całej procedury. Nie zamykaj tej strony ani nie odłączaj kontrolera do czasu zakończenia.",
|
||||
"Press <b>Start</b> to begin calibration.": "Naciśnij <b>Start</b>, żeby rozpocząć kalibrację.",
|
||||
"Please move both sticks to the <b>top-left corner</b> and release them.": "Proszę przesuń oba drążki maksymalnie do <b>lewy-górny-róg</b> a następnie je puść.",
|
||||
"When the sticks are back in the center, press <b>Continue</b>.": "Gdy drążki po puszczeniu znajdują się na środku, naciśnij <b>Kontynuuj</b>.",
|
||||
"Please move both sticks to the <b>top-right corner</b> and release them.": "Proszę przesuń oba drążki maksymalnie do <b>prawy-górny-róg</b> a następnie je puść.",
|
||||
"Please move both sticks to the <b>bottom-left corner</b> and release them.": "Proszę przesuń oba drążki maksymalnie do <b>lewy-dolny-róg</b> a następnie je puść.",
|
||||
"Please move both sticks to the <b>bottom-right corner</b> and release them.": "Proszę przesuń oba drążki maksymalnie do <b>prawy-dolny-róg</b> a następnie je puść.",
|
||||
"Calibration completed successfully!": "Kalibracja została wykonana pomyślnie!",
|
||||
"Next": "Dalej",
|
||||
"Recentering the controller sticks.": "Ponowne centrowanie drążków kontrolera.",
|
||||
"Please do not close this window and do not disconnect your controller. ": "Proszę nie zamykaj tego okna, ani nie odłączaj swojego kontrolera. ",
|
||||
"Range calibration": "Kalibracja maksymalnego zakresu",
|
||||
"The controller is now sampling data!": "Kontroler zbiera teraz dane!",
|
||||
"Done": "Gotowe",
|
||||
"Hi, thank you for using this software.": "Cześć, dzięki ci za użycie tego oprogramowania.",
|
||||
"If you're finding it helpful and you want to support my efforts, feel free to": "Jeżeli uznałeś to narzędzie za pomocne, i chcesz wesprzeć mój wysiłek, nie krępuj się",
|
||||
"buy me a coffee": "Kup mi kawę",
|
||||
"! :)": "! :)",
|
||||
"Do you have any suggestion or issue? Drop me a message via email or discord.": "Czy masz jakąś sugestię lub problem? Napisz do mnie wiadomość e-mailem lub na Discordzie.",
|
||||
"Cheers!": "Pozdrawiam!",
|
||||
"Support this project": "Wesprzyj projekt",
|
||||
"unknown": "nieznany",
|
||||
"original": "oryginał",
|
||||
"clone": "klon",
|
||||
"locked": "zablokowany",
|
||||
"unlocked": "odblokowany",
|
||||
"error": "błąd",
|
||||
"Build Date": "Data Produkcji",
|
||||
"HW Version": "Wersja HW",
|
||||
"SW Version": "Wersja SW",
|
||||
"Device Type": "Rodzaj urządzenia",
|
||||
"Range calibration completed": "Kalibracja maksymalnego zakresu drążków została zakończona pomyślnie",
|
||||
"Range calibration failed": "Kalibracja zakresu nieudana",
|
||||
"Stick calibration failed": "Kalibracja drążków nie powiodła się",
|
||||
"Stick calibration completed": "Kalibracja drążków zakończona pomyślnie",
|
||||
"NVS Lock failed": "Blokada NVS nie powiodła się",
|
||||
"NVS Unlock failed": "Odblokowanie NVS nie powiodło się",
|
||||
"Please connect only one controller at time.": "Proszę podłączyć tylko jeden kontroler jednocześnie",
|
||||
"Sony DualShock 4 V1": "Sony DualShock 4 V1",
|
||||
"Sony DualShock 4 V2": "Sony DualShock 4 V2",
|
||||
"Sony DualSense": "Sony DualSense",
|
||||
"Sony DualSense Edge": "Sony DualSense Edge",
|
||||
"Connected invalid device": "Podłączono nieznane urządzenie",
|
||||
"Error": "Błąd",
|
||||
"Initializing...": "Inicjowanie...",
|
||||
"Storing calibration...": "Zapisywanie kalibracji...",
|
||||
"Sampling...": "Próbkowanie danych...",
|
||||
"Calibration in progress": "Kalibracja w toku",
|
||||
"Start": "Start",
|
||||
"Continue": "Kontynuuj",
|
||||
"Have a nice day :)": "Życzę ci miłego dnia! :)",
|
||||
"Welcome to the Calibration GUI": "Witamy w Calibration GUI",
|
||||
"Just few things to know before you can start:": "O to kilka rzeczy o których musisz wiedzieć przed rozpoczęciem",
|
||||
"This website is not affiliated with Sony, PlayStation & co.": "Ta strona nie jest w żaden sposób spowiązana z Sony, PlayStation & co.",
|
||||
"This service is provided without warranty. Use at your own risk.": "Ta usługa nie świadczy, ani nie podlega żadnej gwarancji. Robisz to wszystko to na własne ryzyko.",
|
||||
"Keep the internal battery of the controller connected and ensure it is well charged. If the battery dies during operations, the controller will be damaged and rendered unusable.": "Upewnij się przed procesem kalibracji, czy twoja bateria w kontrolerze jest dobrze naładowana. W przeciwnym razie gdy bateria się rozładuje, to wewnętrzny sterownik kontrolera może ulec całkowitemu uszkodzeniu",
|
||||
"Before doing the permanent calibration, try the temporary one to ensure that everything is working well.": "Przed wykonaniem kalibracji stałej wypróbuj kalibrację tymczasową, aby upewnić się, że wszystko działa dobrze.",
|
||||
"Understood": "Zrozumiano",
|
||||
"Version": "Wersja",
|
||||
"Frequently Asked Questions": "Często zadawane pytania",
|
||||
"Close": "Zamknij",
|
||||
"Welcome to the F.A.Q. section! Below, you'll find answers to some of the most commonly asked questions about this website. If you have any other inquiries or need further assistance, feel free to reach out to me directly. Your feedback and questions are always welcome!": "Witaj w sekcji FAQ! Poniżej znajdziesz odpowiedzi na niektóre z najczęściej zadawanych pytań dotyczących tej witryny. Jeśli masz inne pytania lub potrzebujesz dalszej pomocy, skontaktuj się ze mną bezpośrednio. Twoje opinie i pytania są zawsze mile widziane!",
|
||||
"How does it work?": "Jak to działa?",
|
||||
"Behind the scenes, this website is the culmination of one year of dedicated effort in reverse-engineering DualShock controllers for fun/hobby from a random guy on the internet.": "Za kulisami ta witryna internetowa jest wynikiem całorocznych wysiłków związanych z inżynierią wsteczną kontrolerów DualShock dla zabawy/hobby jakiegoś przypadkowego faceta w Internecie.",
|
||||
"Through": "Poprzez",
|
||||
"this research": "badania",
|
||||
", it was discovered that there exist some undocumented commands on DualShock controllers that can be sent via USB and are used during factory assembly process. If these commands are sent, the controller starts the recalibration of analog sticks.": "odkryto, że w kontrolerach DualShock, oraz DualSense znajdują się pewne nieudokumentowane polecenia, które można wysyłać poprzez USB i wykorzystywać je w procesie produkcyjnym. Po wysłaniu tych poleceń sterownik rozpoczyna ponowną kalibrację drążków.",
|
||||
"While the primary focus of this research wasn't initially centered on recalibration, it became apparent that a service offering this capability could greatly benefit numerous individuals. And thus, here we are.": "Chociaż początkowo główny nacisk w tych badaniach nie skupiał się na ponownej kalibracji, stało się jasne, że usługa oferująca taką możliwość może przynieść ogromne korzyści wielu osobom. I tak oto jesteśmy.",
|
||||
"Is this an officially endorsed service?": "Czy jest to oficjalnie zatwierdzona usługa?",
|
||||
"No, this service is simply a creation by a DualShock enthusiast.": "Nie, ta usługa jest po prostu dziełem entuzjasty DualShock'a",
|
||||
"Does this website detect if a controller is a clone?": "Czy ta witryna internetowa wykrywa, czy kontroler jest klonem?",
|
||||
"Yes, only DualShock4 at the moment. This happened because I accidentally purchased some clones, spent time identifying the differences and added this functionality to prevent future deception.": "Tak, obecnie tylko DualShock 4. Stało się tak, ponieważ przez przypadek kupiłem kilka klonów, spędziłem czas na identyfikowaniu różnic i dodałem tę funkcję, aby zapobiec przyszłym oszustwom.",
|
||||
"Unfortunately, the clones cannot be calibrated anyway, because they only clone the behavior of a DualShock4 during normal gameplay, not all the undocumented functionalities.": "Niestety klonów i tak nie da się skalibrować, ponieważ klonują jedynie zachowanie DualShocka 4 podczas normalnej rozgrywki, a nie wszystkie nieudokumentowane funkcje.",
|
||||
"If you want to extend this detection functionality to DualSense, please ship me a fake DualSense and you'll see it in few weeks.": "Jeśli chcesz rozszerzyć tę funkcję wykrywania na DualSense, prześlij mi fałszywy DualSense, a zobaczysz go za kilka tygodni.",
|
||||
"What development is in plan?": "Jakie masz dalsze plany na rozwój?",
|
||||
"I maintain two separate to-do lists for this project, although the priority has yet to be established.": "Prowadzę dwie osobne listy rzeczy do zrobienia dla tego projektu, chociaż priorytet nie został jeszcze ustalony.",
|
||||
"The first list is about enhancing support for DualShock4 and DualSense controllers:": "Pierwsza lista dotyczy ulepszenia obsługi kontrolerów DualShock 4 i DualSense:",
|
||||
"Implement calibration of L2/R2 triggers.": "Implementacja funkcji kalibracji przycisków L2/R2.",
|
||||
"Improve detection of clones, particularly beneficial for those seeking to purchase used controllers with assurance of authenticity.": "Usprawnienie do wykrywania klonów, co jest szczególnie korzystne dla osób chcących kupić używane kontrolery z gwarancją autentyczności.",
|
||||
"Add support for recalibrating IMUs.": "Dodanie obsługi ponownej kalibracji IMU.",
|
||||
"Additionally, explore the possibility of reviving non-functioning DualShock controllers (further discussion available on Discord for interested parties).": "Możliwość zbadania niedziałających kontrolerów DualShock w celu możliwości ich ożywienia (dalsza dyskusja dostępna na Discordzie dla zainteresowanych).",
|
||||
"The second list contains new controllers I aim to support:": "Druga lista zawiera nowe kontrolery, które chcę wspierać:",
|
||||
"DualShock 3": "DualShock 3",
|
||||
"XBox Controllers": "Kontroler Xbox",
|
||||
"Each of these tasks presents both immense interest and significant time investment. To provide context, supporting a new controller typically demands 6-12 months of full-time research, alongside a stroke of good fortune.": "Każde z tych zadań oferuje zarówno ogromne zainteresowanie, jak i znaczną inwestycję czasową. Aby zapewnić pewien kontekst, obsługa nowego kontrolera zazwyczaj wymaga 6–12 miesięcy badań w pełnym wymiarze godzin i odrobiny szczęścia.",
|
||||
"I love this service, it helped me! How can I contribute?": "Uwielbiam tę usługę, pomogła mi! Jak mogę się odwdzięczyć?",
|
||||
"I'm glad to hear that you found this helpful! If you're interested in contributing, here are a few ways you can help me:": "Miło mi słyszeć, że okazało się to pomocne! Jeśli jesteś zainteresowany wsparciem, oto kilka sposobów, w jakie możesz mi pomóc:",
|
||||
"Consider making a": "Rozważ tworzenie ",
|
||||
"donation": "Donacja",
|
||||
"to support my late-night caffeine-fueled reverse-engineering efforts.": "aby wesprzeć moje nocne wysiłki w zakresie inżynierii wstecznej napędzane kofeiną.",
|
||||
"Ship me a controller you would love to add (send me an email for organization).": "Wyślij mi kontroler, który chciałbyś dodać (wyślij mi e-mail do organizacji).",
|
||||
"Translate this website in your language": "Przetłumacz tę stronę na swój język",
|
||||
", to help more people like you!": ", aby pomóc większej ilości osób takich jak ty!",
|
||||
"This website uses analytics to improve the service.": "Ta strona korzysta z analiz w celu ulepszenia usług.",
|
||||
"Board Model": "Model płytki",
|
||||
"This DualSense controller has outdated firmware.": "Ten kontroler DualSense posiada przestarzały firmware.",
|
||||
"Please update the firmware and try again.": "Proszę zaktualizuj firmware i spróbuj ponownie.",
|
||||
"Joystick Info": "Informacje o drążkach",
|
||||
"Check circularity": "Sprawdź kołowość",
|
||||
"No.": "Nie.",
|
||||
"Does this software resolve stickdrift?": "Czy to oprogramowanie rozwiązuje dryfowanie drążka?",
|
||||
"Stickdrift is caused by a physical defect; namely dirt, worn potentiometer or in some cases a worn spring.": "Dryft drążka jest spowodowany wadą fizyczną, np. brudem, zużytym potencjometrem lub, w niektórych przypadkach, zużytą sprężyną.",
|
||||
"After range calibration, joysticks always go in corners.": "Po kalibracji zakresu, drążki wchodzą tylko w zakręty.",
|
||||
"This issue happens because you have clicked \"Done\" immediately after starting a range calibration.": "Problem ten występuje, ponieważ kliknąłeś \"Gotowe\" zaraz po rozpoczęciu kalibracji zakresu.",
|
||||
"Please read the instructions.": "Proszę przeczytaj instrukcję.",
|
||||
"You have to rotate the joysticks before you press \"Done\".": "Musisz zacząć obracać drążki zanim naciśniesz \"Gotowe\".",
|
||||
"Make sure to touch the edges of the joystick frame and rotate slowly, preferably in each direction - clockwise and anti-clockwise.": "Pamiętaj o dotykaniu krawędzi ramki drążka i jego powolnym obracaniu, najlepiej w każdym kierunku – zgodnie z ruchem wskazówek zegara, i na odwrót.",
|
||||
"Only after you have done that, you click on \"Done\".": "Dopiero po wykonaniu tej czynności, kliknij \"Gotowe\".",
|
||||
"Changes saved successfully": "Zmiany zostały zapisane pomyślnie",
|
||||
"Error while saving changes": "Wystąpił błąd podczas zapisywania zmian",
|
||||
"Save changes permanently": "Zapisz zmiany permanentnie",
|
||||
"Reboot controller": "Uruchom ponownie kontroler",
|
||||
"Controller Info": "Informacje o kontrolerze",
|
||||
"Debug Info": "Informacje z debugowania",
|
||||
"Software": "Software",
|
||||
"Hardware": "Hardware",
|
||||
"FW Build Date": "Data buildu FW",
|
||||
"FW Type": "Typ FW",
|
||||
"FW Series": "Seria FW",
|
||||
"FW Version": "Wersja FW",
|
||||
"FW Update": "Aktualizacja FW",
|
||||
"FW Update Info": "Informacja aktualizacji FW",
|
||||
"SBL FW Version": "Wersja FW (SBL)",
|
||||
"Venom FW Version": "Wersja FW (Venom)",
|
||||
"Spider FW Version": "Wersja FW (Spider)",
|
||||
"Touchpad FW Version": "Wersja FW Touchpada",
|
||||
"Serial Number": "Numer seryjny",
|
||||
"MCU Unique ID": "Unikalny kod ID MCU",
|
||||
"PCBA ID": "ID PCBA",
|
||||
"Battery Barcode": "Barcode baterii",
|
||||
"VCM Left Barcode": "Barcode VCM (lewy)",
|
||||
"VCM Right Barcode": "Barcode VCM (prawy)",
|
||||
"HW Model": "Model HW",
|
||||
"Touchpad ID": "ID Touchpada",
|
||||
"Bluetooth Address": "Adres Bluetooth",
|
||||
"Show all": "Pokaż wszystko",
|
||||
"Finetune stick calibration": "Dokładna kalibracja drążków",
|
||||
"(beta)": "(beta)",
|
||||
"Left stick": "Lewy drążęk",
|
||||
"Right stick": "Prawy drążęk",
|
||||
"Cancel": "Anuluj",
|
||||
"30th Anniversary": "30th Anniversary",
|
||||
"<b>Externally</b>: by applying +1.8V directly to the visible test point without opening the controller.": "<b>Zewnętrznie</b>: poprzez podanie +1.8V bezpośrednio do widocznego punktu testowego bez otwierania kontrolera.",
|
||||
"<b>Internally</b>: by soldering a wire from a +1.8V source to the write-protect TP.": "<b>Wewnętrznie</b>: przez przylutowanie przewodu z źródła +1.8V do punktu testowego ochrony przed zapisem.",
|
||||
"Astro Bot": "Astro Bot",
|
||||
"Calibration is being stored in the stick modules.": "Kalibracja jest zapisywana w modułach drążków.",
|
||||
"Cannot lock": "Nie można zablokować",
|
||||
"Cannot store data into": "Nie można zachować informacji w",
|
||||
"Cannot unlock": "Nie można odblokować",
|
||||
"Cobalt Blue": "Cobalt Blue",
|
||||
"Color": "Kolor",
|
||||
"Cosmic Red": "Cosmic Red",
|
||||
"DualSense Edge Calibration": "Kalibracja DualSense Edge",
|
||||
"For more info or help, feel free to reach out on Discord.": "Aby uzyskać więcej informacji lub pomoc, skontaktuj się do nas na Discordzie",
|
||||
"Galactic Purple": "Galactic Purple",
|
||||
"God of War Ragnarok": "God of War Ragnarok",
|
||||
"Grey Camouflage": "Grey Camouflage",
|
||||
"If the calibration is not stored permanently, please double-check the wirings of the hardware mod.": "Jeśli kalibracja nie zapisuje się na stałe, prosimy o dwukrotne sprawdzenie modyfikacji sprzętowej.",
|
||||
"Left Module Barcode": "Barcode lewego modułu",
|
||||
"Midnight Black": "Midnight Black",
|
||||
"More details and images": "Więcej szczegółów i zdjęć",
|
||||
"Nova Pink": "Nova Pink",
|
||||
"Please note: the stick modules on the DS Edge <b>cannot be calibrated via software alone</b>.": "Uwaga: moduły drążków w DS Edge <b>nie mogą być kalibrowane wyłącznie za pomocą oprogramowania!</b>.",
|
||||
"To store a custom calibration on the stick's internal memory, a <b>hardware modification</b> is required.": "Aby zapisać niestandardową kalibrację w wewnętrznej pamięci drążka, wymagana jest ręczna <b>modyfikacja sprzętowa</b>.",
|
||||
"Right Module Barcode": "Barcode prawego modułu",
|
||||
"Starlight Blue": "Starlight Blue",
|
||||
"Sterling Silver": "Sterling Silver",
|
||||
"Support for calibrating DualSense Edge stick modules is now available as an <b>experimental feature</b>.": "Wsparcie dla obsługi kalibrowania modułów drążków DualSense Edge jest teraz dostępna jako <b>funkcja eksperymentalna</b>.",
|
||||
"This involves temporarily disabling write protection by applying <b>+1.8V</b> to a specific test point on each module.": "Polega to na czasowym wyłączeniu ochrony przed zapisem poprzez podanie <b>+1.8V</b> na punkt testowy modułu.",
|
||||
"This is only for advanced users. If you're not sure what you're doing, please do not attempt it.": "Tylko dla zaawansowanych użytkowników. Jeśli nie jesteś pewien co robisz, proszę nie próbuj tego!",
|
||||
"Volcanic Red": "Volcanic Red",
|
||||
"We are not responsible for any damage caused by attempting this modification.": "Nie ponosimy odpowiedzialności za jakiekolwiek szkody spowodowane próbą tej modyfikacji.",
|
||||
"White": "White",
|
||||
"You can do this in two ways:": "Możesz to zrobić na 2 sposoby",
|
||||
"here": "tutaj",
|
||||
"left module": "lewy moduł",
|
||||
"right module": "prawy moduł",
|
||||
"Chroma Indigo": "Chroma Indigo",
|
||||
"Chroma Pearl": "Chroma Pearl",
|
||||
"Chroma Teal": "Chroma Teal",
|
||||
"Fortnite": "Fortnite",
|
||||
"Spider-Man 2": "Spider-Man 2",
|
||||
"The Last of Us": "The Last of US",
|
||||
"10x zoom": "10-krotne przybliżenie",
|
||||
"Calibration": "Kalibracja",
|
||||
"Debug": "Wyszukiwanie błędów",
|
||||
"Info": "Informacje",
|
||||
"Normal": "Normalne",
|
||||
"Center (L1)": "Centrowanie (L1)",
|
||||
"Circularity (R1)": "Kołowość (R1)",
|
||||
"Move the stick to select it for tuning, then without touching the stick use the D-pad buttons to adjust the center point. Flick it and adjust it again if it is off center or flickers.": "Porusz drążek który chcesz wyregulować, następnie bez dotykania go użyj pada kierunkowego (d-pad/krzyżak) by wybrać punkt środkowy. Wyreguluj i wyśrodkuj ponownie jeśli nie jest na środku lub skacze.",
|
||||
"Please release the stick to center position before adjusting with D-pad buttons.": "Pozostaw drążek na pozycji środkowej zanim zaczniesz centrować przy pomocy pada kierunkowego (d-pad/krzyżak).",
|
||||
"Press the D-pad or face buttons in the direction you want the stick position to move.": "Naciśnij pad kierunkowy (d-pad/krzyżak) lub przyciski funkcyjne w kierunku którym chcesz ustawić pozycję drążka.",
|
||||
"Push the stick straight up/down/left/right as far as possible.": "Przesuń drążek prosto w górę/dół/lewo/prawo najdalej jak to możliwe.",
|
||||
"Show raw numbers": "Pokaż surowe liczby",
|
||||
"<strong>Average circularity error:</strong> smaller is not always better! Aim for 7-9 %.": "<strong>Średni błąd kołowości:</strong> mniej nie zawsze znaczy lepiej! Celuj w 7-9%.",
|
||||
"A reboot is needed to continue using this DualSense Edge. Please disconnect and reconnect your controller.": "By nadal używać tego DualSense Edge zrestartuj kontroler. Odłącz i podłącz go ponownie.",
|
||||
"Adaptive Trigger": "Trigger adaptacyjny",
|
||||
"Adaptive triggers are only supported on DualSense controllers": "Adaptacyjne triggery wspierane są tylko w kontrolerach DualSense",
|
||||
"Add test": "Dodaj test",
|
||||
"Be gentle to avoid damage.": "Bądź delikatny aby uniknąć uszkodzeń",
|
||||
"Buttons": "Przyciski",
|
||||
"Center": "Środek",
|
||||
"Circularity": "Kołowość",
|
||||
"Controller does not support adaptive trigger control": "Kontroler nie wspiera kontroli adaptacyjnych triggerów",
|
||||
"Don't show again": "Nie pokazuj ponownie",
|
||||
"Fail": "Błąd",
|
||||
"Failed": "Niepowodzenie",
|
||||
"Failed to connect to device": "Podłączenie urządzenia nie powiodło się",
|
||||
"Failed to disable adaptive trigger": "Blokada adaptacyjnego triggera nie powiodła się",
|
||||
"Failed to set speaker tone": "Nie udało się ustawić dźwięku głośnika",
|
||||
"Failed to set vibration": "Nie udało się ustawić wibracji",
|
||||
"Feel for vibration in the controller.": "Poczuj wibracje w kontrolerze",
|
||||
"Haptic Vibration": "Wibracje Haptyczne",
|
||||
"Headphone Jack": "Wejście słuchawkowe (mini-jack 3,5mm)",
|
||||
"Increase non-circularity": "Zwiększ odchył kołowości",
|
||||
"Instructions": "Instrukcje",
|
||||
"Keep rotating the sticks even if you see no progress!": "Kręć drążkami, nawet jeśli nie widzisz postępu!",
|
||||
"Learn more...": "Czytaj więcej...",
|
||||
"Lights": "Światła",
|
||||
"Listen for a tone from the controller speaker.": "Posłuchaj dźwięku z głośnika kontrolera",
|
||||
"Long-press [circle] to skip ahead.": "Przytrzymaj dłużej [circle] by przejść dalej.",
|
||||
"Microphone": "Mikrofon",
|
||||
"Microphone Level:": "Poziom mikrofonu",
|
||||
"No controller connected": "Nie podłączono kontrolera",
|
||||
"No tests completed yet.": "Nie wykonano żadnego testu",
|
||||
"Not tested": "Nie testowane",
|
||||
"Pass": "Zalicz",
|
||||
"Passed": "Zaliczono",
|
||||
"Please connect a DualShock 4, a DualSense, DualSense Edge or VR2 controller to your computer and press Connect.": "Podłącz DualShock4, DualSense, DualSense Edge lub kontroler V2 do komputera i naciśnij Połącz.",
|
||||
"Plug in headphones to the 3.5mm jack": "Podłącz słuchawki do gniazda 3.5mm typu jack",
|
||||
"Press L2 and R2 triggers to feel the trigger resistance.": "Naciskaj triggery L2 i R2 aby poczuć opór triggerów",
|
||||
"Press [circle] to close, or [square] to start over": "Naciśnij [circle] by zamknąć, lub [square] by rozpocząć",
|
||||
"Press [square] to Pass, [cross] to Fail, or [circle] to skip.": "Naciśnij [square] by zakończyć, [cross] by przerwać, lub [circle] by pominąć.",
|
||||
"Press [square] to begin or [circle] to close": "Naciśnij [square], aby zacząć, lub [circle], aby zamknąć",
|
||||
"Press [triangle] to go back.": "Naciśnij [triangle] by powrócić",
|
||||
"Press each button until they turn green.": "Naciskaj każdy przycisk, aż zmieni kolor na zielony.",
|
||||
"Progress": "Postęp",
|
||||
"Quick Test": "Szybki Test",
|
||||
"Quick calibrate": "Szybka kalibracja",
|
||||
"Range calibration appears to have failed. Please try again and make sure you rotate the sticks.": "Kalibracja zakresu drążków zakończona niepowodzeniem. Spróbuj ponownie i bądź pewny, że obracasz drążki.",
|
||||
"Repeat": "Powtarzaj",
|
||||
"Restart": "Restart",
|
||||
"Rotate the sticks slowly at least 2 times in one direction and 2 times in the other direction to cover the whole range.": "Obracaj drążki powoli co najmniej 2 razy w jedną strone i 2 razy w inną by pokryć cały zakres.",
|
||||
"Run through these tests to verify your controller's functionality.": "Przejdź przez te testy by zweryfikować funkcjonalność kontrolera.",
|
||||
"Sony controllers come from the factory calibrated to have an average circularity error of nearly 10 %, and this is now what games expect. Too perfect circularity can make movements and aim feel stiff and unresponsive in some games.": "Fabryczne pady Sony mają błąd kołowości ok. 10% i pod to optymalizowane są gry. Zbyt idealna kołowość może sprawiać wrażenie sztywności celowania.",
|
||||
"Speaker": "Głośnik",
|
||||
"Step size": "Wielkość pomiaru",
|
||||
"Test Speaker": "Test Głośnika",
|
||||
"Test Summary": "Podsumowanie testu",
|
||||
"Test all buttons, or long-press [square] to Pass and [cross] to Fail, or [circle] to skip.": "Sprawdź wszystkie przyciski lub naciskaj długo [square] by zakończyć, [cross] by przerwać lub [circle] by pominać.",
|
||||
"The <b>Done</b> button will unlock after at most 15 seconds. If you press <b>Done</b> without rotating the sticks, the calibration will be incomplete and you will need to repeat it.": "Przycisk <b>Gotowe</> będzie dostępny za około 15 sekund. Jeśli naciśniesz <b>Gotowe</b> bez obracania drążków, kalibracja będzie niekompletna a proces będzie wymagał powtórzenia.",
|
||||
"The device appears to be a clone. All calibration functionality is disabled.": "Urządzenie wygląda na nieoryginalne. Test fukncjonalności jest zablokowany.",
|
||||
"The device is connected via Bluetooth. Disconnect and reconnect using a USB cable instead.": "Urządzenie jest podłączone przez Bluetooth. Odłącz i podłącz je za pomocą kabla USB.",
|
||||
"This test checks all controller buttons by requiring you to press each button up to three times.": "Ten test sprawdza wszystkie przyciski kontrolera przez potrójne naciśnięcie każdego z nich.",
|
||||
"This test checks the headphone jack functionality.": "Ten test sprawdza działanie gniazda słuchawkowego (jack).",
|
||||
"This test checks the reliability of the USB port.": "Ten test sprawdza działanie portu USB.",
|
||||
"This test will cycle through red, green, and blue colors on the controller lightbar, animate the player indicator lights, and flash the mute button.": "Ten test przejdzie przez działanie kolorów: czerwonego, zielonego i niebieskiego, diod na listwie świetlnej, oraz diody przycisku wyciszenia.",
|
||||
"This test will enable heavy resistance on both L2 and R2 triggers.": "Ten test włączy duży opór na obu triggerach L2 i R2.",
|
||||
"USB Connector": "Gniazdo USB",
|
||||
"Watch the controller lights change colors, the player lights animate, and the mute button flash.": "Obserwuj zmianę kolorów, animację diody gracza oraz miganie przycisku wyciszenia.",
|
||||
"While holding the stick to be adjusted straight up/down/left/right, make adjustments until you see lightblue sectors in all four directions after circling the stick both left and right. Then use the": "Przytrzymując drążek w skrajnych pozycjach góra/dół/lewa/prawa, kalibruj (obracaj) dopóki nie zobaczysz jasnoniebieskiego wypełnienia we wszystkich czterech kierunkach po wychyleniu w lewo i prawo. Następnie użyj",
|
||||
"Wiggle the USB cable to see if the controller disconnects.": "Poruszaj kablem USB by sprawdzić, czy kontroler się nie rozłączy",
|
||||
"Your device might not be a genuine Sony controller. If it is not a clone then please report this issue.": "Twoje urzędzenie możę być nieoryginalnym kontrolerem Sony. Jeśli masz pewność, że kontroler jest oryginalny i ze sprawdzonego źródła - poinformuj nas o tym.",
|
||||
"failed": "nie zdano",
|
||||
"hide": "ukryj",
|
||||
"passed": "zdano",
|
||||
"skipped": "pominięto",
|
||||
"tests completed": "testy zakończone",
|
||||
"to increase the non-circularity.": "aby zwiększyć odchył kołowości.",
|
||||
"After they have been replaced, this utility can be used to calibrate the controller to work with the new joysticks.": "Po ich wymianie to narzędzie może zostać wykorzystane do skalibrowania kontrolera pod kątem pracy z nowymi drążkami.",
|
||||
"Aim for a circularity error of around 7-9 % for the best playing experience.": "Dla najlepszych wrażeń dąż do błędu kołowości rzędu 7-9%.",
|
||||
"Battery level is low. Tests may fail due to the controller being in power saving mode.": "Niski poziom baterii. Testy mogą się nie powieść, ponieważ kontroler znajduje się w trybie oszczędzania energii.",
|
||||
"Calibrating without replacing the joysticks may help temporarily, but it may also make the problem worse, with no way to undo it.": "Kalibracja bez wymiany drążków może pomóc tymczasowo, ale może również pogorszyć problem, bez możliwości cofnięcia zmian.",
|
||||
"Calibration History": "Historia kalibracji",
|
||||
"Cannot read module barcodes": "Nie można odczytać kodów kreskowych modułów",
|
||||
"Clear All": "Wyczyść wszystko",
|
||||
"Current": "Aktualne",
|
||||
"Delete": "Usuń",
|
||||
"Delete all calibration history for this controller? This cannot be undone.": "Usunąć całą historię kalibracji dla tego kontrolera? Tej operacji nie można cofnąć.",
|
||||
"Delete this calibration entry?": "Usunąć ten wpis kalibracji?",
|
||||
"Drift is caused by mechanical parts in the joystick being worn out, and they need to be replaced to fix the drift.": "Dryfowanie jest spowodowane zużyciem części mechanicznych wewnątrz drążka; aby naprawić ten problem, należy je wymienić.",
|
||||
"Firefox is supported with the WebHID extension installed.": "Firefox jest obsługiwany po zainstalowaniu rozszerzenia WebHID.",
|
||||
"It appears the latest joystick calibration has not been saved.": "Wygląda na to, że ostatnia kalibracja drążków nie została zapisana.",
|
||||
"Last connected": "Ostatnio połączono:",
|
||||
"No saved calibrations found.": "Nie znaleziono zapisanych kalibracji.",
|
||||
"Please use a web browser with WebHID support (e.g. Google Chrome or Microsoft Edge) on a PC or Mac.": "Proszę użyć przeglądarki obsługującej WebHID (np. Google Chrome lub Microsoft Edge) na komputerze PC lub Mac.",
|
||||
"Restore": "Przywróć",
|
||||
"Restore calibration": "Przywróć kalibrację",
|
||||
"The calibration was restored successfully! Remember to save the changes in order not to loose them when the controller is rebooted.": "Kalibracja została pomyślnie przywrócona! Pamiętaj, aby zapisać zmiany, aby nie utracić ich po ponownym uruchomieniu kontrolera.",
|
||||
"This controller has unsaved changes that will be lost when the controller is rebooted.": "Ten kontroler posiada niezapisane zmiany, które zostaną utracone po jego ponownym uruchomieniu.",
|
||||
"This utility cannot fix stick drift.": "To narzędzie nie naprawia dryfowania drążków (stick drift).",
|
||||
"Unsupported browser.": "Nieobsługiwana przeglądarka.",
|
||||
"Use expert mode": "Użyj trybu eksperckiego",
|
||||
"Use four-step calibration": "Użyj kalibracji 4-stopniowej",
|
||||
"Use normal mode": "Użyj trybu normalnego",
|
||||
"Use quick calibration": "Użyj szybkiej kalibracji",
|
||||
"Using this utility on a phone or tablet is not supported.": "Korzystanie z tego narzędzia na telefonie lub tablecie nie jest obsługiwane.",
|
||||
"Values": "Wartości",
|
||||
"You should save your changes, or reboot the controller to revert back to the previous state.": "Powinieneś zapisać zmiany lub ponownie uruchomić kontroler, aby powrócić do poprzedniego stanu.",
|
||||
"serial number": "numer seryjny",
|
||||
"(DualSense & DualSense Edge) Will updating the firmware reset calibration?": "(DualSense & DualSense Edge) Czy aktualizacja oprogramowania układowego (firmware) zresetuje kalibrację?",
|
||||
"(DualSense Edge) Is the calibration stored on the controller or the modules?": "(DualSense Edge) Czy kalibracja jest zapisywana w kontrolerze, czy w modułach?",
|
||||
"A sample test was done with 30 dualsense edge modules, and the results showed that the inner quartile range (IQR) is 8.3% and 9.0%, with an average of 8.6%. This goes to show that stock controllers by default have a relatively high range, and the rule of thumb is to follow factory calibration.": "Test próbny przeprowadzony na 30 modułach DualSense Edge wykazał, że rozstęp ćwiartkowy (IQR) wynosi od 8,3% do 9,0%, przy średniej 8,6%. Dowodzi to, że fabryczne kontrolery mają domyślnie stosunkowo wysoki zakres, a ogólną zasadą jest trzymanie się kalibracji fabrycznej.",
|
||||
"Can I overwrite a (permanent) calibration?": "Czy mogę nadpisać (stałą) kalibrację?",
|
||||
"Can I restore a previous calibration?": "Czy mogę przywrócić poprzednią kalibrację?",
|
||||
"Finetuning is only available for DualSense and DualSense Edge.": "Dokładna regulacja jest dostępna tylko dla kontrolerów DualSense oraz DualSense Edge.",
|
||||
"God of War 20th Anniversary": "God of War 20th Anniversary",
|
||||
"Housing": "Obudowa",
|
||||
"How do I use the finetuning feature?": "Jak korzystać z funkcji dokładnej regulacji?",
|
||||
"If you don't have a battery connected or the connected battery is empty, AND your cable disconnects during saving the calibration, then your controller has a high chance of being bricked.": "Jeśli nie masz podłączonej baterii lub podłączona bateria jest rozładowana, A kabel odłączy się podczas zapisywania kalibracji, istnieje duże ryzyko nieodwracalnego uszkodzenia (uceglenia) kontrolera.",
|
||||
"If you have not clicked the green button \"Save changes permanently\", then unplugging the controller will reset to the previously saved calibration. It is recommended you test your calibration before saving.": "Jeśli nie kliknąłeś zielonego przycisku „Zapisz zmiany na stałe”, odłączenie kontrolera przywróci poprzednio zapisaną kalibrację. Zaleca się przetestowanie kalibracji przed jej zapisaniem.",
|
||||
"If you have saved the changes permanently, you can reset the changes only if you are using a DualSense or DualSense Edge. You can click on the grey button \"Restore Calibration\" to go back to one of the previous calibrations that was saved on the controller. Known issue: You may need to reboot your controller first in order for previous calibrations to show up.": "Jeśli zapisałeś zmiany na stałe, możesz je zresetować tylko w przypadku korzystania z kontrolera DualSense lub DualSense Edge. Możesz kliknąć szary przycisk „Przywróć kalibrację”, aby powrócić do jednej z poprzednich kalibracji zapisanych w kontrolerze. Znany błąd: Może być konieczne ponowne uruchomienie kontrolera, aby poprzednie kalibracje stały się widoczne.",
|
||||
"Image 1": "Zdjęcie 1",
|
||||
"Images": "Zdjęcia",
|
||||
"In most cases, calibrating your joysticks that have prior drift issues may result in a worse and unpredictable calibration.": "W większości przypadków kalibracja drążków, które już wcześniej miały problemy z dryfowaniem, może skutkować pogorszeniem sytuacji i nieprzewidywalnym działaniem.",
|
||||
"Not shown in the video: You can now also increase the range in each direction uniformly by using the cross in the top right and moving the slider up, which may speed up finetuning. Make sure to rotate the joystick first, otherwise the button cannot be pressed.": "Niewidoczne na filmie: Możesz teraz również równomiernie zwiększyć zakres w każdym kierunku za pomocą krzyżyka w prawym górnym rogu i przesunięcia suwaka w górę, co może przyspieszyć dokładną regulację. Pamiętaj, aby najpierw obrócić drążek, w przeciwnym razie przycisk nie będzie mógł być wciśnięty.",
|
||||
"Only official controllers are supported, no third-party or \"fake\" controllers.": "Obsługiwane są wyłącznie oficjalne kontrolery; urządzenia firm trzecich lub podróbki nie są wspierane.",
|
||||
"Option 1": "Opcja 1",
|
||||
"Option 2": "Opcja 2",
|
||||
"PlayStation Virtual Reality 2": "PlayStation Virtual Reality 2",
|
||||
"Saving calibration is locked by default on DualSense Edge joystick modules. A hardware mod is required to save the calibration permanently. The calibration is saved on the modules themselves, so you have to perform the mod twice: once for each module. You would need to bridge two points on the PCB with enamelled wire. There are multiple methods, I personally recommend using either of these two locations to solder the wire to. See images below. Ensure the wire is thin enough so that the shell is closed properly. Make sure you don't short the wire to ground through the letters near the bottom joint.": "Zapisywanie kalibracji w modułach drążków DualSense Edge jest domyślnie zablokowane. Aby zapisać kalibrację na stałe, wymagana jest modyfikacja sprzętowa. Kalibracja jest zapisywana bezpośrednio w modułach, więc modyfikację trzeba wykonać dwukrotnie: osobno dla każdego modułu. Wymagane jest zmostkowanie dwóch punktów na płytce PCB za pomocą przewodu emaliowanego (uzwojeniowego). Istnieje kilka metod – osobiście zalecam przylutowanie przewodu w jednym z dwóch wskazanych miejsc. Zobacz zdjęcia poniżej. Upewnij się, że przewód jest wystarczająco cienki, aby obudowa zamknęła się prawidłowo. Uważaj, aby nie zwrzeć przewodu do masy poprzez litery znajdujące się w pobliżu dolnego lutu.",
|
||||
"Sony DualShock 4": "Sony DualShock 4",
|
||||
"The calibration is stored on each module individually. It is carried over if you place the modules in a different DualSense Edge. Likewise, if you place a different set of modules in your DualSense Edge, you will get a different calibration that is tied to those new modules.": "Kalibracja jest zapisywana indywidualnie w każdym module. Zostanie ona przeniesiona, jeśli umieścisz moduły w innym kontrolerze DualSense Edge. Podobnie, jeśli włożysz inny zestaw modułów do swojego DualSense Edge, uzyskasz inną kalibrację, przypisaną do tych nowych modułów.",
|
||||
"The finetuning and quick test menus are only accessible for DualSense and DualSense Edge.": "Menu dokładnej regulacji oraz szybkiego testu są dostępne wyłącznie dla kontrolerów DualSense oraz DualSense Edge.",
|
||||
"The website supports the following official controllers:": "Strona obsługuje następujące oficjalne kontrolery:",
|
||||
"These previous calibrations are stored locally in your browser's storage. Meaning you can only restore calibrations using the same computer and browser that you used to calibrate it with, and deleting the cache or using Incognito will make any previous calibration irrecoverable.": "Te poprzednie kalibracje są przechowywane lokalnie w pamięci Twojej przeglądarki. Oznacza to, że możesz przywrócić kalibrację tylko na tym samym komputerze i w tej samej przeglądarce, na której była wykonywana. Wyczyszczenie pamięci podręcznej (cache) lub korzystanie z trybu incognito uniemożliwi odzyskanie wcześniejszych kalibracji.",
|
||||
"This software is not intended to fix stickdrift and will <b>not</b> fix stickdrift on its own if you already experience that.": "To oprogramowanie nie jest przeznaczone do naprawiania dryfu drążków i <b>nie</b> naprawi go samodzielnie, jeśli Twój kontroler już tego doświadcza.",
|
||||
"This video from V2.16 shows how to use the finetuning menu.": "Ten film z wersji V2.16 pokazuje, jak korzystać z menu dokładnej regulacji.",
|
||||
"We recommend a circularity between 7% and 9%. The reason for this is to mimic a stock controllers calibration. However, symmetrical overshoot is more important and if you need to deviate from this range to achieve better symmetry, that is fine too.": "Zalecamy kołowość na poziomie między 7% a 9%. Ma to na celu odwzorowanie kalibracji fabrycznego kontrolera. Jednak symetryczne przekroczenie zakresu (overshoot) jest ważniejsze i jeśli musisz odbiec od tego przedziału, aby uzyskać lepszą symetrię, jest to jak najbardziej w porządku.",
|
||||
"What are the risks of using the calibration?": "Jakie ryzyko wiąże się z przeprowadzeniem kalibracji?",
|
||||
"What circularity percentage to aim for when calibrating and finetuning.": "Do jakiego procentu kołowości dążyć podczas kalibracji i dokładnej regulacji.",
|
||||
"What the software will help with, is ensuring new joysticks will function properly after replacing the old broken joysticks that drift. This step involves opening up the controller and soldering new potentiometers or an entire new joystick.": "Oprogramowanie pomaga w zapewnieniu, że nowe analogi będą działać prawidłowo po wymianie starych, uszkodzonych i dryfujących drążków. Ten etap wymaga otwarcia kontrolera i wlutowania nowych potencjometrów lub całego nowego modułu drążka.",
|
||||
"When calibrating, there is no risk. However, if your controller disconnects during the split second that you save a calibration, then you have a chance of bricking your controller. Make sure your battery has enough charge and is plugged into the controller, and the USB cable is securely connected. This prevents your controller from being bricked if the USB cable accidentally disconnects.": "Podczas samej kalibracji nie ma żadnego ryzyka. Jeśli jednak kontroler odłączy się w tym ułamku sekundy, w którym zapisujesz kalibrację, istnieje szansa na jego uszkodzenie (uceglenie). Upewnij się, że bateria jest wystarczająco naładowana, wpięta do kontrolera, a kabel USB jest stabilnie podłączony. Zapobiegnie to ucegleniu kontrolera w razie przypadkowego wypięcia kabla USB.",
|
||||
"Which controllers does DualShock Calibration GUI support?": "Które kontrolery są obsługiwane przez DualShock Calibration GUI?",
|
||||
"Yes. Simply do another calibration, and click the green button to save permanently.": "Tak. Po prostu wykonaj kolejną kalibrację i kliknij zielony przycisk, aby zapisać ją na stałe.",
|
||||
"": ""
|
||||
}
|
||||
364
lang/pt_br.json
Normal file
@@ -0,0 +1,364 @@
|
||||
{
|
||||
".authorMsg": "- Tradução para o Português do Brasil realizada por Emertels, Padula, Diego A, Simão M, ricardo_57 :)",
|
||||
"DualShock Calibration GUI": "GUI de Calibração DualShock",
|
||||
"Connect": "Conectar",
|
||||
"Connected to:": "Conectado a:",
|
||||
"Disconnect": "Desconectar",
|
||||
"Calibrate stick center": "Calibrar centro do analógico",
|
||||
"Calibrate stick range": "Calibrar alcance do analógico",
|
||||
"Sections below are not useful, just some debug infos or manual commands": "As seções abaixo não são úteis, apenas algumas informações de depuração ou comandos manuais",
|
||||
"NVS Status": "Status da NVS",
|
||||
"Unknown": "Desconhecido",
|
||||
"Query NVS status": "Consultar status da NVS",
|
||||
"NVS unlock": "Desbloquear a NVS",
|
||||
"NVS lock": "Bloquear a NVS",
|
||||
"Stick center calibration": "Calibração do centro do analógico",
|
||||
"Welcome": "Bem-vindo",
|
||||
"Step 1": "Passo 1",
|
||||
"Step 2": "Passo 2",
|
||||
"Step 3": "Passo 3",
|
||||
"Step 4": "Passo 4",
|
||||
"Completed": "Concluído",
|
||||
"Welcome to the stick center-calibration wizard!": "Bem-vindo ao assistente de calibração do centro dos analógicos!",
|
||||
"This tool will guide you in re-centering the analog sticks of your controller. It consists of four steps: you will be asked to move both sticks in a direction and release them.": "Esta ferramenta irá guiá-lo na centralização dos analógicos de seu controle. Consiste em quatro etapas: será solicitado que você mova ambos os analógicos em uma direção e os solte.",
|
||||
"Please be aware that, <i>once the calibration is running, it cannot be canceled</i>. Do not close this page or disconnect your controller until it is completed.": "Esteja ciente de que, <i>uma vez que a calibração esteja em execução, ela não pode ser cancelada</i>. Não feche esta página nem desconecte seu controle até que esteja concluída.",
|
||||
"Press <b>Start</b> to begin calibration.": "Pressione <b>Iniciar</b> para começar a calibração.",
|
||||
"Please move both sticks to the <b>top-left corner</b> and release them.": "Mova ambos os analógicos para o <b>canto superior esquerdo</b> e solte-os.",
|
||||
"When the sticks are back in the center, press <b>Continue</b>.": "Quando os analógicos voltarem ao centro, pressione <b>Continuar</b>.",
|
||||
"Please move both sticks to the <b>top-right corner</b> and release them.": "Mova ambos os analógicos para o <b>canto superior direito</b> e solte-os.",
|
||||
"Please move both sticks to the <b>bottom-left corner</b> and release them.": "Mova ambos os analógicos para o <b>canto inferior esquerdo</b> e solte-os.",
|
||||
"Please move both sticks to the <b>bottom-right corner</b> and release them.": "Mova ambos os analógicos para o <b>canto inferior direito</b> e solte-os.",
|
||||
"Calibration completed successfully!": "Calibração concluída com sucesso!",
|
||||
"Next": "Próximo",
|
||||
"Recentering the controller sticks.": "Recentralizando os analógicos do controle.",
|
||||
"Please do not close this window and do not disconnect your controller. ": "Por favor, não feche esta janela e não desconecte seu controle. ",
|
||||
"Range calibration": "Calibração de alcance",
|
||||
"The controller is now sampling data!": "O controle está coletando amostras de dados agora!",
|
||||
"Done": "Concluído",
|
||||
"Hi, thank you for using this software.": "Olá, obrigado por usar este software.",
|
||||
"If you're finding it helpful and you want to support my efforts, feel free to": "Se você achar útil e quiser apoiar meus esforços, sinta-se à vontade para",
|
||||
"buy me a coffee": "me pagar um café",
|
||||
"! :)": "! :)",
|
||||
"Do you have any suggestion or issue? Drop me a message via email or discord.": "Tem alguma sugestão ou problema? Envie-me uma mensagem por e-mail ou discord.",
|
||||
"Cheers!": "Valeu!",
|
||||
"Support this project": "Apoie este projeto",
|
||||
"unknown": "desconhecido",
|
||||
"original": "original",
|
||||
"clone": "clone",
|
||||
"locked": "bloqueada",
|
||||
"unlocked": "desbloqueada",
|
||||
"error": "erro",
|
||||
"Build Date": "Data de Compilação",
|
||||
"HW Version": "Versão de HW",
|
||||
"SW Version": "Versão de SW",
|
||||
"Device Type": "Tipo de Dispositivo",
|
||||
"Range calibration completed": "Calibração de alcance concluída",
|
||||
"Range calibration failed": "A calibração de alcance falhou",
|
||||
"Stick calibration failed": "A calibração do analógico falhou",
|
||||
"Stick calibration completed": "Calibração do analógico concluída",
|
||||
"NVS Lock failed": "Bloqueio da NVS falhou",
|
||||
"NVS Unlock failed": "Desbloqueio da NVS falhou",
|
||||
"Please connect only one controller at time.": "Por favor, conecte somente um controle por vez.",
|
||||
"Sony DualShock 4 V1": "Sony DualShock 4 V1",
|
||||
"Sony DualShock 4 V2": "Sony DualShock 4 V2",
|
||||
"Sony DualSense": "Sony DualSense",
|
||||
"Sony DualSense Edge": "Sony DualSense Edge",
|
||||
"Connected invalid device": "Dispositivo inválido conectado",
|
||||
"Error": "Erro",
|
||||
"Initializing...": "Inicializando...",
|
||||
"Storing calibration...": "Salvando calibração...",
|
||||
"Sampling...": "Amostragem...",
|
||||
"Calibration in progress": "Calibração em andamento",
|
||||
"Start": "Iniciar",
|
||||
"Continue": "Continuar",
|
||||
"Have a nice day :)": "Tenha um ótimo dia :)",
|
||||
"Welcome to the Calibration GUI": "Bem-vindo à Interface de Calibração",
|
||||
"Just few things to know before you can start:": "Apenas algumas coisas para saber antes de começar:",
|
||||
"This website is not affiliated with Sony, PlayStation & co.": "Este site não é afiliado à Sony, PlayStation e suas afiliadas.",
|
||||
"This service is provided without warranty. Use at your own risk.": "Este serviço é fornecido sem garantia. Use por sua conta e risco.",
|
||||
"Keep the internal battery of the controller connected and ensure it is well charged. If the battery dies during operations, the controller will be damaged and rendered unusable.": "Mantenha a bateria interna do controle conectada e certifique-se de que esteja bem carregada. Se a bateria acabar durante as operações, o controle será danificado e ficará inutilizável.",
|
||||
"Before doing the permanent calibration, try the temporary one to ensure that everything is working well.": "Antes de fazer a calibração permanente, tente a calibração temporária para garantir que tudo esteja funcionando bem.",
|
||||
"Understood": "Entendido",
|
||||
"Version": "Versão",
|
||||
"Frequently Asked Questions": "Perguntas Frequentes",
|
||||
"Close": "Fechar",
|
||||
"Welcome to the F.A.Q. section! Below, you'll find answers to some of the most commonly asked questions about this website. If you have any other inquiries or need further assistance, feel free to reach out to me directly. Your feedback and questions are always welcome!": "Bem-vindo à seção de Perguntas Frequentes! Abaixo, você encontrará respostas para algumas das perguntas mais comuns sobre este site. Se tiver outras dúvidas ou precisar de mais assistência, sinta-se à vontade para entrar em contato diretamente comigo. Seus comentários e perguntas são sempre bem-vindos!",
|
||||
"How does it work?": "Como funciona?",
|
||||
"Behind the scenes, this website is the culmination of one year of dedicated effort in reverse-engineering DualShock controllers for fun/hobby from a random guy on the internet.": "Nos bastidores, este site é o resultado de um ano de esforço dedicado à engenharia reversa dos controles DualShock por diversão/hobby de um cara aleatório na internet.",
|
||||
"Through": "Através",
|
||||
"this research": "desta pesquisa",
|
||||
", it was discovered that there exist some undocumented commands on DualShock controllers that can be sent via USB and are used during factory assembly process. If these commands are sent, the controller starts the recalibration of analog sticks.": ", foi descoberto que existem alguns comandos não documentados nos controles DualShock que podem ser enviados via USB e são usados durante o processo de montagem na fábrica. Se esses comandos forem enviados, o controle inicia a recalibração dos analógicos.",
|
||||
"While the primary focus of this research wasn't initially centered on recalibration, it became apparent that a service offering this capability could greatly benefit numerous individuals. And thus, here we are.": "Embora o foco principal desta pesquisa não estivesse inicialmente centrado na recalibração, ficou evidente que um serviço oferecendo essa capacidade poderia beneficiar enormemente várias pessoas. E assim, aqui estamos.",
|
||||
"Is this an officially endorsed service?": "Este é um serviço oficial?",
|
||||
"No, this service is simply a creation by a DualShock enthusiast.": "Não, este serviço é apenas uma criação de um entusiasta do DualShock.",
|
||||
"Does this website detect if a controller is a clone?": "Este site detecta se um controle é um clone?",
|
||||
"Yes, only DualShock4 at the moment. This happened because I accidentally purchased some clones, spent time identifying the differences and added this functionality to prevent future deception.": "Sim, apenas DualShock 4 no momento. Isso aconteceu porque comprei alguns clones por acidente, passei um tempo identificando as diferenças e adicionei essa funcionalidade para evitar futuras decepções.",
|
||||
"Unfortunately, the clones cannot be calibrated anyway, because they only clone the behavior of a DualShock4 during normal gameplay, not all the undocumented functionalities.": "Infelizmente, os clones não podem ser calibrados, porque eles apenas clonam o comportamento de um DualShock 4 durante o jogo normal, e não todas as funcionalidades não documentadas.",
|
||||
"If you want to extend this detection functionality to DualSense, please ship me a fake DualSense and you'll see it in few weeks.": "Se você quiser estender essa funcionalidade de detecção ao DualSense, por favor, me envie um DualSense falso e você verá isso em algumas semanas.",
|
||||
"What development is in plan?": "Quais são os planos de desenvolvimento?",
|
||||
"I maintain two separate to-do lists for this project, although the priority has yet to be established.": "Mantenho duas listas de tarefas separadas para este projeto, embora a prioridade ainda não tenha sido estabelecida.",
|
||||
"The first list is about enhancing support for DualShock4 and DualSense controllers:": "A primeira lista é sobre aprimorar o suporte para os controles DualShock 4 e DualSense:",
|
||||
"Implement calibration of L2/R2 triggers.": "Implementar a calibração dos gatilhos L2/R2.",
|
||||
"Improve detection of clones, particularly beneficial for those seeking to purchase used controllers with assurance of authenticity.": "Melhorar a detecção de clones, especialmente benéfico para aqueles que buscam comprar controles usados com garantia de autenticidade.",
|
||||
"Add support for recalibrating IMUs.": "Adicionar suporte para recalibrar IMUs.",
|
||||
"Additionally, explore the possibility of reviving non-functioning DualShock controllers (further discussion available on Discord for interested parties).": "Além disso, explorar a possibilidade de reviver controles DualShock que não estão funcionando (mais discussões disponíveis no Discord para as partes interessadas).",
|
||||
"The second list contains new controllers I aim to support:": "A segunda lista contém novos controles aos quais pretendo dar suporte:",
|
||||
"DualShock 3": "DualShock 3",
|
||||
"XBox Controllers": "Controles Xbox",
|
||||
"Each of these tasks presents both immense interest and significant time investment. To provide context, supporting a new controller typically demands 6-12 months of full-time research, alongside a stroke of good fortune.": "Cada uma dessas tarefas apresenta um imenso interesse e um investimento significativo de tempo. Para contextualizar, dar suporte a um novo controle geralmente exige de 6 a 12 meses de pesquisa em tempo integral, além de um golpe de sorte.",
|
||||
"I love this service, it helped me! How can I contribute?": "Adoro este serviço, ele me ajudou! Como posso contribuir?",
|
||||
"I'm glad to hear that you found this helpful! If you're interested in contributing, here are a few ways you can help me:": "Fico feliz em saber que você achou isso útil! Se você estiver interessado em contribuir, aqui estão algumas maneiras de me ajudar:",
|
||||
"Consider making a": "Considere fazer uma ",
|
||||
"donation": "doação",
|
||||
"to support my late-night caffeine-fueled reverse-engineering efforts.": "para apoiar meus esforços de engenharia reversa movidos a cafeína nas madrugadas.",
|
||||
"Ship me a controller you would love to add (send me an email for organization).": "Envie-me um controle que você adoraria adicionar (me envie um e-mail para combinar).",
|
||||
"Translate this website in your language": "Traduza este site para o seu idioma",
|
||||
", to help more people like you!": ", para ajudar mais pessoas como você!",
|
||||
"This website uses analytics to improve the service.": "Este site utiliza análises para melhorar o serviço.",
|
||||
"Board Model": "Modelo da Placa",
|
||||
"This DualSense controller has outdated firmware.": "Este controle DualSense possui um firmware desatualizado.",
|
||||
"Please update the firmware and try again.": "Por favor, atualize o firmware e tente novamente.",
|
||||
"Joystick Info": "Informações dos Analógicos",
|
||||
"Check circularity": "Verificar circularidade",
|
||||
"No.": "Não.",
|
||||
"Does this software resolve stickdrift?": "Este software resolve o drift?",
|
||||
"Stickdrift is caused by a physical defect; namely dirt, worn potentiometer or in some cases a worn spring.": "O drift nos analógicos é causado por um defeito físico, como sujeira, potenciômetro gasto ou, em alguns casos, uma mola gasta.",
|
||||
"After range calibration, joysticks always go in corners.": "Após a calibração de alcance, os analógicos sempre vão para os cantos.",
|
||||
"This issue happens because you have clicked \"Done\" immediately after starting a range calibration.": "Esse problema acontece porque você clicou em \"Concluído\" logo após iniciar a calibração de alcance.",
|
||||
"Please read the instructions.": "Por favor, leia as instruções.",
|
||||
"You have to rotate the joysticks before you press \"Done\".": "Você precisa girar os analógicos antes de clicar em \"Concluído\".",
|
||||
"Make sure to touch the edges of the joystick frame and rotate slowly, preferably in each direction - clockwise and anti-clockwise.": "Certifique-se de tocar nas bordas da moldura do analógico e gire lentamente, preferencialmente em cada direção - horário e anti-horário.",
|
||||
"Only after you have done that, you click on \"Done\".": "Somente após fazer isso, clique em \"Concluído\".",
|
||||
"Changes saved successfully": "Alterações salvas com sucesso",
|
||||
"Error while saving changes": "Erro ao salvar as alterações.",
|
||||
"Save changes permanently": "Salvar alterações permanentemente.",
|
||||
"Reboot controller": "Reiniciar o controle",
|
||||
"(beta)": "(beta)",
|
||||
"10x zoom": "Zoom 10x",
|
||||
"30th Anniversary": "30º Aniversário",
|
||||
"<b>Externally</b>: by applying +1.8V directly to the visible test point without opening the controller.": "<b>Externamente</b>: aplicando +1.8V diretamente no ponto de teste visível sem abrir o controle.",
|
||||
"<b>Internally</b>: by soldering a wire from a +1.8V source to the write-protect TP.": "<b>Internamente</b>: soldando um fio de uma fonte de +1.8V ao TP de proteção de escrita.",
|
||||
"<strong>Average circularity error:</strong> smaller is not always better! Aim for 7-9 %.": "<strong>Erro médio de circularidade:</strong> nem sempre quanto menor, melhor! Tente atingir entre 7-9 %.",
|
||||
"A reboot is needed to continue using this DualSense Edge. Please disconnect and reconnect your controller.": "É necessário reiniciar para continuar usando este DualSense Edge. Por favor, desconecte e reconecte seu controle.",
|
||||
"Adaptive Trigger": "Gatilho Adaptável",
|
||||
"Adaptive triggers are only supported on DualSense controllers": "Gatilhos adaptáveis são suportados apenas em controles DualSense",
|
||||
"Add test": "Adicionar teste",
|
||||
"After they have been replaced, this utility can be used to calibrate the controller to work with the new joysticks.": "Após a substituição, este utilitário pode ser usado para calibrar o controle para funcionar com os novos analógicos.",
|
||||
"Aim for a circularity error of around 7-9 % for the best playing experience.": "Busque um erro de circularidade em torno de 7-9 % para a melhor experiência de jogo.",
|
||||
"Astro Bot": "Astro Bot",
|
||||
"Battery Barcode": "Código de Barras da Bateria",
|
||||
"Battery level is low. Tests may fail due to the controller being in power saving mode.": "O nível da bateria está baixo. Os testes podem falhar devido ao controle estar em modo de economia de energia.",
|
||||
"Be gentle to avoid damage.": "Seja gentil para evitar danos.",
|
||||
"Bluetooth Address": "Endereço Bluetooth",
|
||||
"Buttons": "Botões",
|
||||
"Calibrating without replacing the joysticks may help temporarily, but it may also make the problem worse, with no way to undo it.": "Calibrar sem substituir os analógicos pode ajudar temporariamente, mas também pode piorar o problema, sem chance de desfazer.",
|
||||
"Calibration": "Calibração",
|
||||
"Calibration History": "Histórico de Calibração",
|
||||
"Calibration is being stored in the stick modules.": "A calibração está sendo armazenada nos módulos dos analógicos.",
|
||||
"Cancel": "Cancelar",
|
||||
"Cannot copy text to the clipboard:": "Não é possível copiar texto para a área de transferência:",
|
||||
"Cannot lock": "Não é possível bloquear",
|
||||
"Cannot read module barcodes": "Não é possível ler os códigos de barras do módulo",
|
||||
"Cannot store data into": "Não é possível armazenar dados em",
|
||||
"Cannot unlock": "Não é possível desbloquear",
|
||||
"Center": "Centro",
|
||||
"Center (L1)": "Centro (L1)",
|
||||
"Chroma Indigo": "Chroma Indigo",
|
||||
"Chroma Pearl": "Chroma Pearl",
|
||||
"Chroma Teal": "Chroma Teal",
|
||||
"Circularity": "Circularidade",
|
||||
"Circularity (R1)": "Circularidade (R1)",
|
||||
"Clear All": "Limpar Tudo",
|
||||
"Cobalt Blue": "Cobalt Blue",
|
||||
"Color": "Cor",
|
||||
"Controller Info": "Informações do Controle",
|
||||
"Controller does not support adaptive trigger control": "O controle não suporta controle de gatilho adaptável",
|
||||
"Cosmic Red": "Cosmic Red",
|
||||
"Current": "Corrente",
|
||||
"Debug": "Depuração",
|
||||
"Debug Info": "Informações de Depuração",
|
||||
"Debug buttons": "Botões de depuração",
|
||||
"Delete": "Excluir",
|
||||
"Delete all calibration history for this controller? This cannot be undone.": "Excluir todo o histórico de calibração deste controle? Isso não pode ser desfeito.",
|
||||
"Delete this calibration entry?": "Excluir esta entrada de calibração?",
|
||||
"Don't show again": "Não mostrar novamente",
|
||||
"Drift is caused by mechanical parts in the joystick being worn out, and they need to be replaced to fix the drift.": "O drift é causado pelo desgaste das peças mecânicas do analógico, e elas precisam ser substituídas para corrigir o problema.",
|
||||
"DualSense Edge Calibration": "Calibração do DualSense Edge",
|
||||
"FW Build Date": "Data de Compilação do FW",
|
||||
"FW Series": "Série do FW",
|
||||
"FW Type": "Tipo de FW",
|
||||
"FW Update": "Atualização de FW",
|
||||
"FW Update Info": "Informações de Atualização de FW",
|
||||
"FW Version": "Versão do FW",
|
||||
"Fail": "Falha",
|
||||
"Failed": "Falhou",
|
||||
"Failed to connect to device": "Falha ao conectar ao dispositivo",
|
||||
"Failed to disable adaptive trigger": "Falha ao desativar gatilho adaptável",
|
||||
"Failed to set speaker tone": "Falha ao definir tom do alto-falante",
|
||||
"Failed to set vibration": "Falha ao definir vibração",
|
||||
"Feel for vibration in the controller.": "Sinta a vibração no controle.",
|
||||
"Finetune stick calibration": "Ajuste fino da calibração do analógico",
|
||||
"Firefox is supported with the WebHID extension installed.": "O Firefox é suportado com a extensão WebHID instalada.",
|
||||
"For more info or help, feel free to reach out on Discord.": "Para mais informações ou ajuda, sinta-se à vontade para entrar em contato no Discord.",
|
||||
"Fortnite": "Fortnite",
|
||||
"Galactic Purple": "Galactic Purple",
|
||||
"God of War Ragnarok": "God of War Ragnarok",
|
||||
"Grey Camouflage": "Grey Camouflage",
|
||||
"HW Model": "Modelo de HW",
|
||||
"Haptic Vibration": "Vibração Háptica",
|
||||
"Hardware": "Hardware",
|
||||
"Headphone Jack": "Entrada de Fone de Ouvido",
|
||||
"If the calibration is not stored permanently, please double-check the wirings of the hardware mod.": "Se a calibração não for salva permanentemente, revise as conexões do mod de hardware.",
|
||||
"Increase non-circularity": "Aumentar não-circularidade",
|
||||
"Info": "Informações",
|
||||
"Instructions": "Instruções",
|
||||
"It appears the latest joystick calibration has not been saved.": "Parece que a última calibração do analógico não foi salva.",
|
||||
"Keep rotating the sticks even if you see no progress!": "Continue girando os analógicos mesmo que você não veja progresso!",
|
||||
"Last connected": "Última conexão",
|
||||
"Learn more...": "Saiba mais...",
|
||||
"Left Module Barcode": "Código de Barras do Módulo Esquerdo",
|
||||
"Left stick": "Analógico esquerdo",
|
||||
"Lights": "Luzes",
|
||||
"Listen for a tone from the controller speaker.": "Ouça um tom vindo do alto-falante do controle.",
|
||||
"Long-press [circle] to skip ahead.": "Pressione e segure [círculo] para pular.",
|
||||
"MCU Unique ID": "ID Único do MCU",
|
||||
"Microphone": "Microfone",
|
||||
"Microphone Level:": "Nível do Microfone:",
|
||||
"Midnight Black": "Midnight Black",
|
||||
"More details and images": "Mais detalhes e imagens",
|
||||
"Move the stick to select it for tuning, then without touching the stick use the D-pad buttons to adjust the center point. Flick it and adjust it again if it is off center or flickers.": "Mova o analógico para selecioná-lo para ajuste, depois, sem tocar no analógico, use os botões do direcional (D-pad) para ajustar o ponto central. Solte-o e ajuste novamente se estiver fora de centro ou tremendo.",
|
||||
"No controller connected": "Nenhum controle conectado",
|
||||
"No saved calibrations found.": "Nenhuma calibração salva encontrada.",
|
||||
"No tests completed yet.": "Nenhum teste concluído ainda.",
|
||||
"Normal": "Normal",
|
||||
"Not tested": "Não testado",
|
||||
"Nova Pink": "Nova Pink",
|
||||
"PCBA ID": "ID da PCBA",
|
||||
"Pass": "Passou",
|
||||
"Passed": "Passou",
|
||||
"Please connect a DualShock 4, a DualSense, DualSense Edge or VR2 controller to your computer and press Connect.": "Por favor, conecte um controle DualShock 4, DualSense, DualSense Edge ou VR2 ao seu computador e clique em Conectar.",
|
||||
"Please note: the stick modules on the DS Edge <b>cannot be calibrated via software alone</b>.": "Observe: os módulos de analógico do DS Edge <b>não podem ser calibrados apenas via software</b>.",
|
||||
"Please release the stick to center position before adjusting with D-pad buttons.": "Por favor, solte o analógico para a posição central antes de ajustar com os botões do direcional (D-pad).",
|
||||
"Please use a web browser with WebHID support (e.g. Google Chrome or Microsoft Edge) on a PC or Mac.": "Por favor, use um navegador com suporte a WebHID (ex: Google Chrome ou Microsoft Edge) em um PC ou Mac.",
|
||||
"Plug in headphones to the 3.5mm jack": "Conecte fones de ouvido na entrada de 3.5mm",
|
||||
"Press L2 and R2 triggers to feel the trigger resistance.": "Pressione os gatilhos L2 e R2 para sentir a resistência.",
|
||||
"Press [circle] to close, or [square] to start over": "Pressione [círculo] para fechar, ou [quadrado] para recomeçar",
|
||||
"Press [square] to Pass, [cross] to Fail, or [circle] to skip.": "Pressione [quadrado] para Passar, [xis] para Falhar, ou [círculo] para pular.",
|
||||
"Press [square] to begin or [circle] to close": "Pressione [quadrado] para começar ou [círculo] para fechar",
|
||||
"Press [triangle] to go back.": "Pressione [triângulo] para voltar.",
|
||||
"Press each button until they turn green.": "Pressione cada botão até que fiquem verdes.",
|
||||
"Press the D-pad or face buttons in the direction you want the stick position to move.": "Pressione o direcional (D-pad) ou os botões de ação na direção que você deseja mover a posição do analógico.",
|
||||
"Progress": "Progresso",
|
||||
"Push the stick straight up/down/left/right as far as possible.": "Empurre o analógico diretamente para cima/baixo/esquerda/direita o máximo possível.",
|
||||
"Quick Test": "Teste Rápido",
|
||||
"Quick calibrate": "Calibração rápida",
|
||||
"Range calibration appears to have failed. Please try again and make sure you rotate the sticks.": "A calibração de alcance parece ter falhado. Por favor, tente novamente e certifique-se de girar os analógicos.",
|
||||
"Repeat": "Repetir",
|
||||
"Restart": "Reiniciar",
|
||||
"Restore": "Restaurar",
|
||||
"Restore calibration": "Restaurar calibração",
|
||||
"Right Module Barcode": "Código de Barras do Módulo Direito",
|
||||
"Right stick": "Analógico direito",
|
||||
"Rotate the sticks slowly at least 2 times in one direction and 2 times in the other direction to cover the whole range.": "Gire os analógicos lentamente pelo menos 2 vezes em uma direção e 2 vezes na outra direção para cobrir todo o alcance.",
|
||||
"Run through these tests to verify your controller's functionality.": "Execute estes testes para verificar a funcionalidade do seu controle.",
|
||||
"SBL FW Version": "Versão do FW SBL",
|
||||
"Serial Number": "Número de Série",
|
||||
"Show all": "Mostrar tudo",
|
||||
"Show raw numbers": "Mostrar números brutos",
|
||||
"Software": "Software",
|
||||
"Sony controllers come from the factory calibrated to have an average circularity error of nearly 10 %, and this is now what games expect. Too perfect circularity can make movements and aim feel stiff and unresponsive in some games.": "Os controles da Sony vêm calibrados de fábrica para ter um erro médio de circularidade de quase 10%, e é isso que os jogos esperam agora. Uma circularidade perfeita demais pode fazer com que os movimentos e a mira pareçam rígidos e sem resposta em alguns jogos.",
|
||||
"Speaker": "Alto-falante",
|
||||
"Spider FW Version": "Versão do FW Spider",
|
||||
"Spider-Man 2": "Spider-Man 2",
|
||||
"Starlight Blue": "Starlight Blue",
|
||||
"Step size": "Tamanho do passo",
|
||||
"Sterling Silver": "Sterling Silver",
|
||||
"Support for calibrating DualSense Edge stick modules is now available as an <b>experimental feature</b>.": "O suporte para calibração dos módulos de analógico do DualSense Edge agora está disponível como um <b>recurso experimental</b>.",
|
||||
"Test Speaker": "Testar Alto-falante",
|
||||
"Test Summary": "Resumo do Teste",
|
||||
"Test all buttons, or long-press [square] to Pass and [cross] to Fail, or [circle] to skip.": "Teste todos os botões, ou mantenha pressionado [quadrado] para Passar e [xis] para Falhar, ou [círculo] para pular.",
|
||||
"The <b>Done</b> button will unlock after at most 15 seconds. If you press <b>Done</b> without rotating the sticks, the calibration will be incomplete and you will need to repeat it.": "O botão <b>Concluído</b> será desbloqueado após no máximo 15 segundos. Se você pressionar <b>Concluído</b> sem girar os analógicos, a calibração ficará incompleta e você precisará repeti-la.",
|
||||
"The Last of Us": "The Last of Us",
|
||||
"The calibration was restored successfully! Remember to save the changes in order not to loose them when the controller is rebooted.": "A calibração foi restaurada com sucesso! Lembre-se de salvar as alterações para não perdê-las quando o controle for reiniciado.",
|
||||
"The device appears to be a clone. All calibration functionality is disabled.": "O dispositivo parece ser um clone. Toda a funcionalidade de calibração está desativada.",
|
||||
"The device is connected via Bluetooth. Disconnect and reconnect using a USB cable instead.": "O dispositivo está conectado via Bluetooth. Desconecte e reconecte usando um cabo USB.",
|
||||
"The item has been copied to the clipboard.": "O item foi copiado para a área de transferência.",
|
||||
"This controller has unsaved changes that will be lost when the controller is rebooted.": "Este controle tem alterações não salvas que serão perdidas quando o controle for reiniciado.",
|
||||
"This involves temporarily disabling write protection by applying <b>+1.8V</b> to a specific test point on each module.": "Isso envolve desativar temporariamente a proteção de escrita aplicando <b>+1.8V</b> em um ponto de teste específico em cada módulo.",
|
||||
"This is only for advanced users. If you're not sure what you're doing, please do not attempt it.": "Isso é apenas para usuários avançados. Se você não tem certeza do que está fazendo, por favor, não tente.",
|
||||
"This test checks all controller buttons by requiring you to press each button up to three times.": "Este teste verifica todos os botões do controle exigindo que você pressione cada botão até três vezes.",
|
||||
"This test checks the headphone jack functionality.": "Este teste verifica a funcionalidade da entrada de fone de ouvido.",
|
||||
"This test checks the reliability of the USB port.": "Este teste verifica a confiabilidade da porta USB.",
|
||||
"This test will cycle through red, green, and blue colors on the controller lightbar, animate the player indicator lights, and flash the mute button.": "Este teste alternará entre as cores vermelho, verde e azul na barra de luz do controle, animará as luzes indicadoras do jogador e piscará o botão mudo.",
|
||||
"This test will enable heavy resistance on both L2 and R2 triggers.": "Este teste ativará uma resistência pesada nos gatilhos L2 e R2.",
|
||||
"This utility cannot fix stick drift.": "Este utilitário não pode consertar o drift do analógico.",
|
||||
"To store a custom calibration on the stick's internal memory, a <b>hardware modification</b> is required.": "Para armazenar uma calibração personalizada na memória interna do analógico, é necessária uma <b>modificação de hardware</b>.",
|
||||
"Touchpad FW Version": "Versão do FW do Touchpad",
|
||||
"Touchpad ID": "ID do Touchpad",
|
||||
"USB Connector": "Conector USB",
|
||||
"Unsupported browser.": "Navegador não suportado.",
|
||||
"Use expert mode": "Usar modo especialista",
|
||||
"Use four-step calibration": "Usar calibração de quatro etapas",
|
||||
"Use normal mode": "Usar modo normal",
|
||||
"Use quick calibration": "Usar calibração rápida",
|
||||
"Using this utility on a phone or tablet is not supported.": "O uso deste utilitário em um celular ou tablet não é suportado.",
|
||||
"VCM Left Barcode": "Código de Barras VCM Esquerdo",
|
||||
"VCM Right Barcode": "Código de Barras VCM Direito",
|
||||
"Values": "Valores",
|
||||
"Venom FW Version": "Versão do FW Venom",
|
||||
"Volcanic Red": "Volcanic Red",
|
||||
"Watch the controller lights change colors, the player lights animate, and the mute button flash.": "Observe as luzes do controle mudarem de cor, as luzes do jogador animarem e o botão mudo piscar.",
|
||||
"We are not responsible for any damage caused by attempting this modification.": "Não nos responsabilizamos por quaisquer danos causados ao tentar esta modificação.",
|
||||
"While holding the stick to be adjusted straight up/down/left/right, make adjustments until you see lightblue sectors in all four directions after circling the stick both left and right. Then use the": "Enquanto segura o analógico a ser ajustado diretamente para cima/baixo/esquerda/direita, faça ajustes até ver setores em azul-claro em todas as quatro direções após girar o analógico para a esquerda e para a direita. Então use o",
|
||||
"White": "Branco",
|
||||
"Wiggle the USB cable to see if the controller disconnects.": "Balance o cabo USB para ver se o controle desconecta.",
|
||||
"You can do this in two ways:": "Você pode fazer isso de duas maneiras:",
|
||||
"You should save your changes, or reboot the controller to revert back to the previous state.": "Você deve salvar suas alterações, ou reiniciar o controle para reverter ao estado anterior.",
|
||||
"Your device might not be a genuine Sony controller. If it is not a clone then please report this issue.": "Seu dispositivo pode não ser um controle genuíno da Sony. Se não for um clone, por favor, relate este problema.",
|
||||
"failed": "falhou",
|
||||
"here": "aqui",
|
||||
"hide": "ocultar",
|
||||
"left module": "módulo esquerdo",
|
||||
"passed": "passou",
|
||||
"right module": "módulo direito",
|
||||
"serial number": "número de série",
|
||||
"skipped": "pulado",
|
||||
"tests completed": "testes concluídos",
|
||||
"to increase the non-circularity.": "para aumentar a não-circularidade.",
|
||||
"(DualSense & DualSense Edge) Will updating the firmware reset calibration?": "",
|
||||
"(DualSense Edge) Is the calibration stored on the controller or the modules?": "",
|
||||
"A sample test was done with 30 dualsense edge modules, and the results showed that the inner quartile range (IQR) is 8.3% and 9.0%, with an average of 8.6%. This goes to show that stock controllers by default have a relatively high range, and the rule of thumb is to follow factory calibration.": "",
|
||||
"Can I overwrite a (permanent) calibration?": "",
|
||||
"Can I restore a previous calibration?": "",
|
||||
"Finetuning is only available for DualSense and DualSense Edge.": "",
|
||||
"God of War 20th Anniversary": "",
|
||||
"Housing": "",
|
||||
"How do I use the finetuning feature?": "",
|
||||
"If you don't have a battery connected or the connected battery is empty, AND your cable disconnects during saving the calibration, then your controller has a high chance of being bricked.": "",
|
||||
"If you have not clicked the green button \"Save changes permanently\", then unplugging the controller will reset to the previously saved calibration. It is recommended you test your calibration before saving.": "",
|
||||
"If you have saved the changes permanently, you can reset the changes only if you are using a DualSense or DualSense Edge. You can click on the grey button \"Restore Calibration\" to go back to one of the previous calibrations that was saved on the controller. Known issue: You may need to reboot your controller first in order for previous calibrations to show up.": "",
|
||||
"Image 1": "",
|
||||
"Images": "",
|
||||
"In most cases, calibrating your joysticks that have prior drift issues may result in a worse and unpredictable calibration.": "",
|
||||
"Not shown in the video: You can now also increase the range in each direction uniformly by using the cross in the top right and moving the slider up, which may speed up finetuning. Make sure to rotate the joystick first, otherwise the button cannot be pressed.": "",
|
||||
"Only official controllers are supported, no third-party or \"fake\" controllers.": "",
|
||||
"Option 1": "",
|
||||
"Option 2": "",
|
||||
"PlayStation Virtual Reality 2": "",
|
||||
"Saving calibration is locked by default on DualSense Edge joystick modules. A hardware mod is required to save the calibration permanently. The calibration is saved on the modules themselves, so you have to perform the mod twice: once for each module. You would need to bridge two points on the PCB with enamelled wire. There are multiple methods, I personally recommend using either of these two locations to solder the wire to. See images below. Ensure the wire is thin enough so that the shell is closed properly. Make sure you don't short the wire to ground through the letters near the bottom joint.": "",
|
||||
"Sony DualShock 4": "",
|
||||
"The calibration is stored on each module individually. It is carried over if you place the modules in a different DualSense Edge. Likewise, if you place a different set of modules in your DualSense Edge, you will get a different calibration that is tied to those new modules.": "",
|
||||
"The finetuning and quick test menus are only accessible for DualSense and DualSense Edge.": "",
|
||||
"The website supports the following official controllers:": "",
|
||||
"These previous calibrations are stored locally in your browser's storage. Meaning you can only restore calibrations using the same computer and browser that you used to calibrate it with, and deleting the cache or using Incognito will make any previous calibration irrecoverable.": "",
|
||||
"This software is not intended to fix stickdrift and will <b>not</b> fix stickdrift on its own if you already experience that.": "",
|
||||
"This video from V2.16 shows how to use the finetuning menu.": "",
|
||||
"We recommend a circularity between 7% and 9%. The reason for this is to mimic a stock controllers calibration. However, symmetrical overshoot is more important and if you need to deviate from this range to achieve better symmetry, that is fine too.": "",
|
||||
"What are the risks of using the calibration?": "",
|
||||
"What circularity percentage to aim for when calibrating and finetuning.": "",
|
||||
"What the software will help with, is ensuring new joysticks will function properly after replacing the old broken joysticks that drift. This step involves opening up the controller and soldering new potentiometers or an entire new joystick.": "",
|
||||
"When calibrating, there is no risk. However, if your controller disconnects during the split second that you save a calibration, then you have a chance of bricking your controller. Make sure your battery has enough charge and is plugged into the controller, and the USB cable is securely connected. This prevents your controller from being bricked if the USB cable accidentally disconnects.": "",
|
||||
"Which controllers does DualShock Calibration GUI support?": "",
|
||||
"Yes. Simply do another calibration, and click the green button to save permanently.": "",
|
||||
"": ""
|
||||
}
|
||||
364
lang/pt_pt.json
Normal file
@@ -0,0 +1,364 @@
|
||||
{
|
||||
".authorMsg": "- Tradução para Português de Portugal realizada por @dualsense_no_drift :) / ElMaçãS",
|
||||
"DualShock Calibration GUI": "GUI Calibração de DualShock",
|
||||
"Connect": "Conectar",
|
||||
"Connected to:": "Conectado a:",
|
||||
"Disconnect": "Desconectar",
|
||||
"Calibrate stick center": "Calibrar o centro do joystick",
|
||||
"Calibrate stick range": "Calibrar o alcançe do joystick",
|
||||
"Sections below are not useful, just some debug infos or manual commands": "As seções abaixo não são úteis, apenas algumas informações de depuração ou comandos manuais",
|
||||
"NVS Status": "Status NVS",
|
||||
"Unknown": "Desconhecido",
|
||||
"Query NVS status": "Consultar status NVS",
|
||||
"NVS unlock": "Desbloquear NVS",
|
||||
"NVS lock": "Bloquear NVS",
|
||||
"Stick center calibration": "Calibração do centro do joystick",
|
||||
"Welcome": "Bem-vindo",
|
||||
"Step 1": "Passo 1",
|
||||
"Step 2": "Passo 2",
|
||||
"Step 3": "Passo 3",
|
||||
"Step 4": "Passo 4",
|
||||
"Completed": "Concluído",
|
||||
"Welcome to the stick center-calibration wizard!": "Bem-vindo ao assistente de calibração de centro dos joysticks!",
|
||||
"This tool will guide you in re-centering the analog sticks of your controller. It consists of four steps: you will be asked to move both sticks in a direction and release them.": "Esta ferramenta irá guiá-lo para recentrar os joysticks do controlador. Consiste em quatro etapas: onde será solicitado que mova ambos os joysticks numa direção e que os solte.",
|
||||
"Please be aware that, <i>once the calibration is running, it cannot be canceled</i>. Do not close this page or disconnect your controller until it is completed.": "Esteja ciente de que, <i>quando a calibração iniciar, não poderá ser cancelada</i>. Não feche esta página ou desconecte o controlador, até que a calibração estar concluída.",
|
||||
"Press <b>Start</b> to begin calibration.": "Pressione <b>Iniciar</b> para começar a calibração.",
|
||||
"Please move both sticks to the <b>top-left corner</b> and release them.": "Mova ambos os joysticks para o <b>canto superior esquerdo</b> e solte-os.",
|
||||
"When the sticks are back in the center, press <b>Continue</b>.": "Quando os joysticks voltarem ao centro, pressione <b>Continuar</b>.",
|
||||
"Please move both sticks to the <b>top-right corner</b> and release them.": "Mova ambos os joysticks para o <b>canto superior direito</b> e solte-os.",
|
||||
"Please move both sticks to the <b>bottom-left corner</b> and release them.": "Mova ambos os joysticks para o <b>canto inferior esquerdo</b> e solte-os.",
|
||||
"Please move both sticks to the <b>bottom-right corner</b> and release them.": "Mova ambos os joysticks para o <b>canto inferior direito</b> e solte-os.",
|
||||
"Calibration completed successfully!": "Calibração concluída com sucesso!",
|
||||
"Next": "Próximo",
|
||||
"Recentering the controller sticks.": "A recentrar os manípulos do controlador.",
|
||||
"Please do not close this window and do not disconnect your controller. ": "Por favor, não feche esta janela e não desconecte o seu controlador. ",
|
||||
"Range calibration": "Calibração de alcançe",
|
||||
"The controller is now sampling data!": "O controlador está agora a recolher dados!",
|
||||
"Done": "Concluído",
|
||||
"Hi, thank you for using this software.": "Olá, obrigado por usar este software.",
|
||||
"If you're finding it helpful and you want to support my efforts, feel free to": "Se está a achar útil e quiser suportar-me os esforços, sinta-se à vontade para",
|
||||
"buy me a coffee": "comprar-me um café",
|
||||
"! :)": "! :)",
|
||||
"Do you have any suggestion or issue? Drop me a message via email or discord.": "Tem alguma sugestão ou problema? Envie-me mensagem por e-mail ou discord.",
|
||||
"Cheers!": "Saúde!",
|
||||
"Support this project": "Apoie este projeto",
|
||||
"unknown": "desconhecido",
|
||||
"original": "original",
|
||||
"clone": "clone",
|
||||
"locked": "bloqueado",
|
||||
"unlocked": "desbloqueado",
|
||||
"error": "erro",
|
||||
"Build Date": "Data de Compilação",
|
||||
"HW Version": "Versão HW",
|
||||
"SW Version": "Versão SW",
|
||||
"Device Type": "Tipo de Dispositivo",
|
||||
"Range calibration completed": "Calibração de alcance completa",
|
||||
"Range calibration failed": "Calibração de alcance falhou",
|
||||
"Stick calibration failed": "Calibração do joystick falhou",
|
||||
"Stick calibration completed": "Calibração do joystick completa",
|
||||
"NVS Lock failed": "Bloqueio de NVS falhou",
|
||||
"NVS Unlock failed": "Desbloqueio de NVS falhou",
|
||||
"Please connect only one controller at time.": "Por favor, ligue apenas um controlador de cada vez.",
|
||||
"Sony DualShock 4 V1": "Sony DualShock 4 V1",
|
||||
"Sony DualShock 4 V2": "Sony DualShock 4 V2",
|
||||
"Sony DualSense": "Sony DualSense",
|
||||
"Sony DualSense Edge": "Sony DualSense Edge",
|
||||
"Connected invalid device": "Dispositivo inválido ligado",
|
||||
"Error": "Erro",
|
||||
"Initializing...": "Iniciando...",
|
||||
"Storing calibration...": "Armazenando a calibração...",
|
||||
"Sampling...": "Amostragem...",
|
||||
"Calibration in progress": "Calibração em progresso",
|
||||
"Start": "Inicio",
|
||||
"Continue": "Continuar",
|
||||
"Have a nice day :)": "Tenha um bom dia :)",
|
||||
"Welcome to the Calibration GUI": "Bem-vindo à GUI de Calibração",
|
||||
"Just few things to know before you can start:": "Algumas coisas que precisa de saber antes de começar:",
|
||||
"This website is not affiliated with Sony, PlayStation & co.": "Este website não é afiliado à Sony, PlayStation & co.",
|
||||
"This service is provided without warranty. Use at your own risk.": "Este serviço não oferece garantia. Utilize por sua conta e risco.",
|
||||
"Keep the internal battery of the controller connected and ensure it is well charged. If the battery dies during operations, the controller will be damaged and rendered unusable.": "Mantenha a bateria interna do controlador conectada e certefique-se que esteja bem carregada. Se a bateria se esgotar durante as operações, o controlador será danificado e ficará inutilizável.",
|
||||
"Before doing the permanent calibration, try the temporary one to ensure that everything is working well.": "Antes de fazer a calibração permanente, experimente a temporária para garantir que está tudo a funcionar corretamente.",
|
||||
"Understood": "Entendido",
|
||||
"Version": "Versão",
|
||||
"Frequently Asked Questions": "Perguntas Frequentes",
|
||||
"Close": "Fechar",
|
||||
"Welcome to the F.A.Q. section! Below, you'll find answers to some of the most commonly asked questions about this website. If you have any other inquiries or need further assistance, feel free to reach out to me directly. Your feedback and questions are always welcome!": "Bem-vindo à seção de Perguntas Frequentes (F.A.Q.)! Abaixo, encontrará as respostas para algumas das perguntas mais comuns sobre este site. Caso tenha alguma outra dúvida ou necessite de mais assistência, sinta-se à vontade para entrar em contato diretamente comigo. O seu feedback e perguntas são sempre bem-vindos!!",
|
||||
"How does it work?": "Como funciona?",
|
||||
"Behind the scenes, this website is the culmination of one year of dedicated effort in reverse-engineering DualShock controllers for fun/hobby from a random guy on the internet.": "Nos bastidores, este site é o resultado de um ano de esforço dedicado à engenharia inversa nos controladores DualShock por diversão/hobby de um tipo aleatório na internet.",
|
||||
"Through": "Através",
|
||||
"this research": "esta pesquisa",
|
||||
", it was discovered that there exist some undocumented commands on DualShock controllers that can be sent via USB and are used during factory assembly process. If these commands are sent, the controller starts the recalibration of analog sticks.": ", descobriu-se que existem alguns comandos não documentados nos controladores DualShock que podem ser enviados via USB e são utilizados durante o processo de montagem de fábrica. Se estes comandos forem enviados, o controlador inicia a recalibração dos joysticks.",
|
||||
"While the primary focus of this research wasn't initially centered on recalibration, it became apparent that a service offering this capability could greatly benefit numerous individuals. And thus, here we are.": "Embora o foco principal desta pesquisa não fosse inicialmente centrado na recalibração, tornou-se evidente que um serviço que oferecesse esta capacidade poderia beneficiar imenso inúmeras pessoas. E, portanto, aqui estamos.",
|
||||
"Is this an officially endorsed service?": "Este é um serviço oficialmente aprovado?",
|
||||
"No, this service is simply a creation by a DualShock enthusiast.": "Não, este serviço é apenas uma criação de um entusiasta do DualShock.",
|
||||
"Does this website detect if a controller is a clone?": "Este site detecta se um controlador é um clone?",
|
||||
"Yes, only DualShock4 at the moment. This happened because I accidentally purchased some clones, spent time identifying the differences and added this functionality to prevent future deception.": "Sim, apenas DualShock4 no momento. Isso aconteceu porque comprei alguns clones por acidente, passei tempo identificando as diferenças e adicionei essa funcionalidade para evitar futuras decepções.",
|
||||
"Unfortunately, the clones cannot be calibrated anyway, because they only clone the behavior of a DualShock4 during normal gameplay, not all the undocumented functionalities.": "Infelizmente, os clones não podem ser calibrados de qualquer forma, porque apenas clonam o comportamento do DualShock4 durante o jogo normal, não todas as funcionalidades não documentadas.",
|
||||
"If you want to extend this detection functionality to DualSense, please ship me a fake DualSense and you'll see it in few weeks.": "Se você quiser estender esta funcionalidade de detecção ao DualSense, por favor, envie-me um DualSense falso e verá isso em algumas semanas.",
|
||||
"What development is in plan?": "Quais são os planos de desenvolvimento?",
|
||||
"I maintain two separate to-do lists for this project, although the priority has yet to be established.": "Mantenho duas listas de tarefas separadas para este projeto, embora a prioridade ainda não tenha sido estabelecida.",
|
||||
"The first list is about enhancing support for DualShock4 and DualSense controllers:": "A primeira lista é sobre aprimorar o suporte para os controladores DualShock4 e DualSense:",
|
||||
"Implement calibration of L2/R2 triggers.": "Implementar a calibração dos gatilhos L2/R2.",
|
||||
"Improve detection of clones, particularly beneficial for those seeking to purchase used controllers with assurance of authenticity.": "Melhorar a detecção de clones, especialmente benéfico para aqueles que procuram comprar controladores usados com garantia de autenticidade.",
|
||||
"Add support for recalibrating IMUs.": "Adicionar suporte para recalibrar IMUs.",
|
||||
"Additionally, explore the possibility of reviving non-functioning DualShock controllers (further discussion available on Discord for interested parties).": "Adicionalmente, explore a possibilidade de reviver controladores DualShock que não estão funcionando (mais discussão disponível no Discord para partes interessadas).",
|
||||
"The second list contains new controllers I aim to support:": "A segunda lista contém novos controladores que pretendo suportar:",
|
||||
"DualShock 3": "DualShock 3",
|
||||
"XBox Controllers": "Controladores Xbox",
|
||||
"Each of these tasks presents both immense interest and significant time investment. To provide context, supporting a new controller typically demands 6-12 months of full-time research, alongside a stroke of good fortune.": "Cada uma dessas tarefas apresenta um imenso interesse e um investimento de tempo significativo. Para contextualizar, dar suporte a um novo controlador geralmente exige de 6 a 12 meses de pesquisa a tempo inteiro, além de um golpe de sorte.",
|
||||
"I love this service, it helped me! How can I contribute?": "Adorei este serviço, ajudou-me! Como posso contribuir?",
|
||||
"I'm glad to hear that you found this helpful! If you're interested in contributing, here are a few ways you can help me:": "Fico feliz por saber que isto foi útil para si! Se estiver interessado em contribuir, estão aqui algumas formas de me ajudar:",
|
||||
"Consider making a": "Considere fazer uma ",
|
||||
"donation": "doação",
|
||||
"to support my late-night caffeine-fueled reverse-engineering efforts.": "para apoiar os meus esforços de engenharia inversa impulsionados pelo meu combustivel de cafeina noturna.",
|
||||
"Ship me a controller you would love to add (send me an email for organization).": "Envie-me um controlador que você adoraria adicionar (envie-me um e-mail para organização).",
|
||||
"Translate this website in your language": "Traduza este site para o seu idioma",
|
||||
", to help more people like you!": ", para ajudar mais pessoas como você!",
|
||||
"This website uses analytics to improve the service.": "Este site utiliza análises para melhorar o serviço.",
|
||||
"Board Model": "Modelo da Placa",
|
||||
"This DualSense controller has outdated firmware.": "Este controlador DualSense possui um firmware desatualizado.",
|
||||
"Please update the firmware and try again.": "Por favor, atualize o firmware e tente novamente.",
|
||||
"Joystick Info": "Informações do Joystick",
|
||||
"Check circularity": "Verificar circularidade",
|
||||
"No.": "Não.",
|
||||
"Does this software resolve stickdrift?": "Esse software resolve o drift do joystick?",
|
||||
"Stickdrift is caused by a physical defect; namely dirt, worn potentiometer or in some cases a worn spring.": "O drift nos joysticks é causado por um defeito físico; nomeadamente, sujidades, potenciômetro desgastado ou, em alguns casos, uma mola desgastada.",
|
||||
"After range calibration, joysticks always go in corners.": "Após a calibração do alcance, os joysticks vão sempre para os cantos.",
|
||||
"This issue happens because you have clicked \"Done\" immediately after starting a range calibration.": "Este problema ocorre porque clicou em \"Concluído\" imediatamente após iniciar uma calibração de alcance.",
|
||||
"Please read the instructions.": "Por favor, leia as instruções.",
|
||||
"You have to rotate the joysticks before you press \"Done\".": "Tem de rodar os joysticks antes de clicar \"Concluído\"",
|
||||
"Make sure to touch the edges of the joystick frame and rotate slowly, preferably in each direction - clockwise and anti-clockwise.": "Certifique-se que toca nas extremidades da estrutura do Joystick e gire lentamente, de prefrerencia em ambas as direções - no sentido dos ponteiros do relógio e no sentido contrário.",
|
||||
"Only after you have done that, you click on \"Done\".": "So depois de o fazer, clique em \"Concluído\".",
|
||||
"Changes saved successfully": "Alterações salvas com sucesso",
|
||||
"Error while saving changes": "Erro ao salvar as alterações.",
|
||||
"Save changes permanently": "Salvar alterações permanentemente.",
|
||||
"Reboot controller": "Reiniciar controlador",
|
||||
"(beta)": "(beta)",
|
||||
"<b>Externally</b>: by applying +1.8V directly to the visible test point without opening the controller.": "<b>Externamente</b>: aplicando +1,8 V diretamente ao ponto de teste visível sem abrir o controlador",
|
||||
"<b>Internally</b>: by soldering a wire from a +1.8V source to the write-protect TP.": "<b>Internamente</b>: soldadura de um fio de uma fonte de +1,8 V ao TP de proteção contra a escrita.",
|
||||
"Battery Barcode": "Código de barras da bateria",
|
||||
"Bluetooth Address": "Endereço Bluetooth",
|
||||
"Calibration is being stored in the stick modules.": " A calibration esta a ser gravada nos modulos dos joysticks.",
|
||||
"Cancel": "Cancelar",
|
||||
"Controller Info": "Informação do controlador",
|
||||
"Debug Info": "Informação de depuração ",
|
||||
"Debug buttons": "Botões de depuração",
|
||||
"DualSense Edge Calibration": "Calibração Dualsense Edge",
|
||||
"FW Build Date": "Data de compilação do FW",
|
||||
"FW Type": "Tipo de FW",
|
||||
"FW Update": "Atualização de FW",
|
||||
"FW Update Info": "Info da atualização de FW",
|
||||
"FW Version": "Versão do FW",
|
||||
"Finetune stick calibration": "Ajuste fino da calibração dos joysticks",
|
||||
"For more info or help, feel free to reach out on Discord.": "Para mais informações ou ajuda, sinta-se a vontade para me contactar no Discord.",
|
||||
"HW Model": "Modelo de HW",
|
||||
"Hardware": "Hardware",
|
||||
"Left stick": "Joystick esquerdo",
|
||||
"MCU Unique ID": "ID Unico da MCU",
|
||||
"More details and images": "Mais detalhes e imagens",
|
||||
"Please note: the stick modules on the DS Edge <b>cannot be calibrated via software alone</b>.": "Nota: os módulos do DS Edge <b>não podem ser calibrados apenas por software</b>.",
|
||||
"To store a custom calibration on the stick's internal memory, a <b>hardware modification</b> is required.": "Para armazenar uma calibração personalizada na memória interna do joystick, é necessária uma <b>modificação de hardware</b>.",
|
||||
"Right stick": "joystick direito",
|
||||
"SBL FW Version": "Versão de FW SBL",
|
||||
"Serial Number": "Numero de Série",
|
||||
"Show all": "Mostrar tudo",
|
||||
"Software": "Software",
|
||||
"Spider FW Version": "Versão Spider FW",
|
||||
"Support for calibrating DualSense Edge stick modules is now available as an <b>experimental feature</b>.": "O suporte para calibração dos módulos DualSense Edge está agora disponível como <b>recurso experimental</b>.",
|
||||
"This involves temporarily disabling write protection by applying <b>+1.8V</b> to a specific test point on each module.": "Isto envolve desativar temporariamente a proteção contra gravação aplicando <b>+1,8 V</b> para um ponto de teste específico em cada módulo",
|
||||
"This is only for advanced users. If you're not sure what you're doing, please do not attempt it.": "Isto é apenas para utilizadores avançados. Se não tem a certeza do que está a fazer, por favor, não tente.",
|
||||
"Touchpad FW Version": "Versão FW do Touchpad",
|
||||
"Touchpad ID": "Touchpad ID",
|
||||
"VCM Left Barcode": "Codigo de barras VCM Esquerda",
|
||||
"VCM Right Barcode": "Codigo de barras VCM Direita",
|
||||
"Venom FW Version": "Versão de FW Venom",
|
||||
"We are not responsible for any damage caused by attempting this modification.": "Não nos responsabilizamos por quaisquer dano causado ao tentar usar esta modificação.",
|
||||
"You can do this in two ways:": "Pode fazer isto de duas formas",
|
||||
"here": "Aqui",
|
||||
"Cannot lock": "Não é possível bloquear",
|
||||
"Cannot store data into": "Não é possível armazenar dados em",
|
||||
"Cannot unlock": "Não é possível desbloquear",
|
||||
"Color": "Cor",
|
||||
"FW Series": "Série do FW",
|
||||
"If the calibration is not stored permanently, please double-check the wirings of the hardware mod.": "Se a calibração não for armazenada permanentemente, verifique novamente os fios soldados na modificação de hardware.",
|
||||
"Left Module Barcode": "Código de barras do módulo esquerdo",
|
||||
"PCBA ID": "ID do PCBA",
|
||||
"Right Module Barcode": "Código de barras do módulo direito",
|
||||
"left module": "módulo esquerdo",
|
||||
"right module": "módulo direito",
|
||||
"10x zoom": "Ampliar 10x",
|
||||
"<strong>Average circularity error:</strong> smaller is not always better! Aim for 7-9 %.": "<strong>Erro médio de circularidade:</strong> menor nem sempre é melhor! Procure entre 7 e 9%.",
|
||||
"A reboot is needed to continue using this DualSense Edge. Please disconnect and reconnect your controller.": "É necessário reiniciar o dispositivo para continuar a utilizar o DualSense Edge. Desligue e volte a ligar o controle.",
|
||||
"Adaptive Trigger": "Gatilho Adaptável",
|
||||
"Adaptive triggers are only supported on DualSense controllers": "Os gatilhos adaptativos são suportados apenas nos controladores DualSense",
|
||||
"Add test": "adicionar teste",
|
||||
"Be gentle to avoid damage.": "Seja gentil para evitar danos.",
|
||||
"Buttons": "Botões",
|
||||
"Calibration": "Calibração",
|
||||
"Center": "Centro",
|
||||
"Center (L1)": "Centro (L1)",
|
||||
"Circularity": "Circularidade",
|
||||
"Circularity (R1)": "Circularidade (R1)",
|
||||
"Controller does not support adaptive trigger control": "O controlador não suporta o controlo de gatilho adaptável",
|
||||
"Debug": "Depurar",
|
||||
"Don't show again": "Don't show again",
|
||||
"Fail": "Falha",
|
||||
"Failed": "falhou",
|
||||
"Failed to connect to device": "Falha ao ligar ao dispositivo",
|
||||
"Failed to disable adaptive trigger": "Falha ao desativar o gatilho adaptável",
|
||||
"Failed to set speaker tone": "Falha ao definir o tom do altifalante",
|
||||
"Failed to set vibration": "Falha ao definir vibração",
|
||||
"Feel for vibration in the controller.": "Sinta a vibração no controlador.",
|
||||
"Haptic Vibration": "Vibração háptica",
|
||||
"Headphone Jack": "Entrada dos auscultadores",
|
||||
"Increase non-circularity": "Aumentar a não circularidade",
|
||||
"Info": "Informação",
|
||||
"Instructions": "Instruções",
|
||||
"Keep rotating the sticks even if you see no progress!": "Continue a rodar os joysticks mesmo que não veja qualquer progresso!",
|
||||
"Learn more...": "Saber mais...",
|
||||
"Lights": "Luzes",
|
||||
"Listen for a tone from the controller speaker.": "Ouça um tom vindo do altifalante do controlador.",
|
||||
"Long-press [circle] to skip ahead.": "Mantenha premido [círculo] para avançar.",
|
||||
"Microphone": "microfone",
|
||||
"Microphone Level:": "Nivel do microfone",
|
||||
"Move the stick to select it for tuning, then without touching the stick use the D-pad buttons to adjust the center point. Flick it and adjust it again if it is off center or flickers.": "Mova o analógico para selecionar a afinação e, sem tocar no analógico, utilize os botões direcionais para ajustar o ponto central. Mova-o e ajuste-o novamente se estiver descentrado ou a piscar.",
|
||||
"No controller connected": "Nenhum controlador ligado",
|
||||
"No tests completed yet.": "Nenhum teste concluído ainda.",
|
||||
"Normal": "Normal",
|
||||
"Not tested": "Não testado",
|
||||
"Pass": "Passar",
|
||||
"Passed": "Passou",
|
||||
"Please release the stick to center position before adjusting with D-pad buttons.": "Solte o joystick para a posição central antes de ajustar com os botões D-pad.",
|
||||
"Plug in headphones to the 3.5mm jack": "Connecte os auscultadores ao jack de audio de 3,5 mm",
|
||||
"Press L2 and R2 triggers to feel the trigger resistance.": "Pressione os gatilhos L2 e R2 para sentir a resistência do gatilho.",
|
||||
"Press [circle] to close, or [square] to start over": "Prima [círculo] para fechar ou [quadrado] para recomeçar",
|
||||
"Press [square] to Pass, [cross] to Fail, or [circle] to skip.": "Prima [quadrado] para Passar, [cruz] para Reprovar ou [círculo] para Saltar.",
|
||||
"Press [square] to begin or [circle] to close": "Prima [quadrado] para começar ou [círculo] para fechar",
|
||||
"Press [triangle] to go back.": "Prima [triângulo] para voltar atrás.",
|
||||
"Press each button until they turn green.": "Pressione cada botão até que fiquem verdes.",
|
||||
"Press the D-pad or face buttons in the direction you want the stick position to move.": "Pressione o D-pad ou os botões frontais na direção em que pretende que a posição do comando se mova.",
|
||||
"Progress": "Progresso",
|
||||
"Push the stick straight up/down/left/right as far as possible.": "Empurre o joystick para cima/baixo/esquerda/direita o mais possível.",
|
||||
"Quick Test": "Teste rápido",
|
||||
"Quick calibrate": "Calibração rápida",
|
||||
"Range calibration appears to have failed. Please try again and make sure you rotate the sticks.": "A calibração do alcance parece ter falhado. Tente novamente e certifique-se de que roda os joysticks.",
|
||||
"Repeat": "Repetir",
|
||||
"Restart": "Reiniciar",
|
||||
"Rotate the sticks slowly at least 2 times in one direction and 2 times in the other direction to cover the whole range.": "Rode os joysticks lentamente pelo menos 2 vezes numa direção e 2 vezes na outra direção para cobrir todo o alcance.",
|
||||
"Run through these tests to verify your controller's functionality.": "Execute estes testes para verificar a funcionalidade do seu controlador.",
|
||||
"Show raw numbers": "Mostrar números brutos",
|
||||
"Sony controllers come from the factory calibrated to have an average circularity error of nearly 10 %, and this is now what games expect. Too perfect circularity can make movements and aim feel stiff and unresponsive in some games.": "Os comandos da Sony saem de fábrica calibrados para terem um erro médio de circularidade de quase 10%, e é isso que os jogos esperam. Uma circulação demasiado perfeita pode fazer com que os movimentos e a mira pareçam rígidos e sem resposta em alguns jogos.",
|
||||
"Speaker": "auscultadores",
|
||||
"Step size": "Tamanho do passo",
|
||||
"Test Speaker": "Testar o auscultadores",
|
||||
"Test Summary": "Resumo do teste",
|
||||
"Test all buttons, or long-press [square] to Pass and [cross] to Fail, or [circle] to skip.": "Teste todos os botões ou mantenha premido [quadrado] para Passar e [cruz] para Reprovar, ou [círculo] para Saltar.",
|
||||
"The <b>Done</b> button will unlock after at most 15 seconds. If you press <b>Done</b> without rotating the sticks, the calibration will be incomplete and you will need to repeat it.": "O botão <b>Concluído</b> será desbloqueado após, no máximo, 15 segundos. Se premir <b>Concluído</b> sem rodar os manípulos, a calibração ficará incompleta e será necessário repeti-la.",
|
||||
"The device is connected via Bluetooth. Disconnect and reconnect using a USB cable instead.": "O dispositivo está ligado via Bluetooth. Desligue e volte a ligar usando um cabo USB.",
|
||||
"This test checks all controller buttons by requiring you to press each button up to three times.": "Este teste verifica todos os botões do comando, exigindo que pressione cada botão até três vezes.",
|
||||
"This test checks the headphone jack functionality.": "Este teste verifica a funcionalidade do conector de auscultadores.",
|
||||
"This test checks the reliability of the USB port.": "Este teste verifica a fiabilidade da porta USB.",
|
||||
"This test will cycle through red, green, and blue colors on the controller lightbar, animate the player indicator lights, and flash the mute button.": "Este teste irá alternar entre as cores vermelha, verde e azul na barra de luzes do comando, animar as luzes indicadoras do jogador e piscar o botão de silenciar.",
|
||||
"This test will enable heavy resistance on both L2 and R2 triggers.": "Este teste irá habilitar alta resistência nos gatilhos L2 e R2.",
|
||||
"USB Connector": "Conector USB",
|
||||
"Watch the controller lights change colors, the player lights animate, and the mute button flash.": "Observe as luzes do comando a mudar de cor, as luzes do leitor a animarem-se e o botão de silêncio a piscar.",
|
||||
"While holding the stick to be adjusted straight up/down/left/right, make adjustments until you see lightblue sectors in all four directions after circling the stick both left and right. Then use the": "Enquanto segura o joystick a ser ajustado para cima/baixo/esquerda/direita, faça ajustes até ver setores azul-claros em todas as quatro direções, depois de rodar o joystick para a esquerda e para a direita. Em seguida, utilize o",
|
||||
"Wiggle the USB cable to see if the controller disconnects.": "Mexa o cabo USB para ver se o comando se desliga.",
|
||||
"Your device might not be a genuine Sony controller. If it is not a clone then please report this issue.": "O seu dispositivo pode não ser um comando original da Sony. Se não for um clone, comunique o problema.",
|
||||
"failed": "falhou",
|
||||
"hide": "ocultar",
|
||||
"passed": "passou",
|
||||
"skipped": "ignorado",
|
||||
"tests completed": "testes concluídos",
|
||||
"to increase the non-circularity.": "para aumentar a não circularidade.",
|
||||
"After they have been replaced, this utility can be used to calibrate the controller to work with the new joysticks.": "Depois de serem substituídos, esta ferramenta pode ser utilizada para calibrar o comando para funcionar com os novos joysticks.",
|
||||
"Aim for a circularity error of around 7-9 % for the best playing experience.": "Procure um erro de circularidade de cerca de 7-9 % para a melhor experiência de jogo.",
|
||||
"Battery level is low. Tests may fail due to the controller being in power saving mode.": "Nivel de Bateria Baixo. Testes podem falhar pelo o comando estar em modo de poupança de Bateria.",
|
||||
"Calibrating without replacing the joysticks may help temporarily, but it may also make the problem worse, with no way to undo it.": "Calibrar sem substituir os joysticks pode ajudar temporariamente, mas também pode agravar o problema, sem haver forma de o reverter.",
|
||||
"Calibration History": "Historico de Calibração",
|
||||
"Cannot copy text to the clipboard:": "Não é possível copiar o texto para a área de transferência:",
|
||||
"Cannot read module barcodes": "Não é possível ler os códigos de barras dos módulos",
|
||||
"Current": "Atual",
|
||||
"Delete": "Apagar",
|
||||
"Delete all calibration history for this controller? This cannot be undone.": "Eliminar todo o histórico de calibração deste comando? Isto não pode ser desfeito.",
|
||||
"Delete this calibration entry?": "Eliminar esta entrada de calibração?",
|
||||
"Drift is caused by mechanical parts in the joystick being worn out, and they need to be replaced to fix the drift.": "O drift é causado pelo desgaste das peças mecânicas do joystick, e estas precisam de ser substituídas para corrigir o drift.",
|
||||
"Firefox is supported with the WebHID extension installed.": "O Firefox é suportado com a extensão WebHID instalada.",
|
||||
"It appears the latest joystick calibration has not been saved.": "Parece que a calibração mais recente do joystick não foi guardada.",
|
||||
"Last connected": "Última ligação",
|
||||
"No saved calibrations found.": "Não foram encontradas calibrações guardadas.",
|
||||
"Please connect a DualShock 4, a DualSense, DualSense Edge or VR2 controller to your computer and press Connect.": "Por favor, ligue um comando DualShock 4, DualSense, DualSense Edge ou VR2 ao seu computador e pressione Ligar.",
|
||||
"Please use a web browser with WebHID support (e.g. Google Chrome or Microsoft Edge) on a PC or Mac.": "Por favor, utilize um navegador com suporte a WebHID (por exemplo, Google Chrome ou Microsoft Edge) num PC ou Mac.",
|
||||
"Restore": "Restaurar",
|
||||
"Restore calibration": "Restaurar Calibração",
|
||||
"The calibration was restored successfully! Remember to save the changes in order not to loose them when the controller is rebooted.": "A calibração foi restaurada com sucesso! Lembre-se de guardar as alterações para não as perder quando o comando for reiniciado.",
|
||||
"The device appears to be a clone. All calibration functionality is disabled.": "O dispositivo aparenta ser uma cópia. Todas as funcionalidades de calibração estão desativadas.",
|
||||
"The item has been copied to the clipboard.": "O item foi copiado para a área de transferência.",
|
||||
"This controller has unsaved changes that will be lost when the controller is rebooted.": "Este comando tem alterações não guardadas que serão perdidas quando o comando for reiniciado.",
|
||||
"This utility cannot fix stick drift.": "Esta ferramenta não consegue corrigir o drift do joystick.",
|
||||
"Unsupported browser.": "Navegador não suportado.",
|
||||
"Use expert mode": "Ativar modo especialista",
|
||||
"Use four-step calibration": "Utilizar calibração em quatro passos",
|
||||
"Use normal mode": "Ativar modo normal",
|
||||
"Use quick calibration": "Utilizar calibração rápida",
|
||||
"Using this utility on a phone or tablet is not supported.": "A utilização desta ferramenta num telemóvel ou tablet não é suportada.",
|
||||
"Values": "Valores",
|
||||
"You should save your changes, or reboot the controller to revert back to the previous state.": "Deve guardar as suas alterações ou reiniciar o comando para voltar ao estado anterior.",
|
||||
"serial number": "Número de série",
|
||||
"(DualSense & DualSense Edge) Will updating the firmware reset calibration?": "",
|
||||
"(DualSense Edge) Is the calibration stored on the controller or the modules?": "",
|
||||
"30th Anniversary": "",
|
||||
"A sample test was done with 30 dualsense edge modules, and the results showed that the inner quartile range (IQR) is 8.3% and 9.0%, with an average of 8.6%. This goes to show that stock controllers by default have a relatively high range, and the rule of thumb is to follow factory calibration.": "",
|
||||
"Astro Bot": "",
|
||||
"Can I overwrite a (permanent) calibration?": "",
|
||||
"Can I restore a previous calibration?": "",
|
||||
"Chroma Indigo": "",
|
||||
"Chroma Pearl": "",
|
||||
"Chroma Teal": "",
|
||||
"Clear All": "",
|
||||
"Cobalt Blue": "",
|
||||
"Cosmic Red": "",
|
||||
"Finetuning is only available for DualSense and DualSense Edge.": "",
|
||||
"Fortnite": "",
|
||||
"Galactic Purple": "",
|
||||
"God of War 20th Anniversary": "",
|
||||
"God of War Ragnarok": "",
|
||||
"Grey Camouflage": "",
|
||||
"Housing": "",
|
||||
"How do I use the finetuning feature?": "",
|
||||
"If you don't have a battery connected or the connected battery is empty, AND your cable disconnects during saving the calibration, then your controller has a high chance of being bricked.": "",
|
||||
"If you have not clicked the green button \"Save changes permanently\", then unplugging the controller will reset to the previously saved calibration. It is recommended you test your calibration before saving.": "",
|
||||
"If you have saved the changes permanently, you can reset the changes only if you are using a DualSense or DualSense Edge. You can click on the grey button \"Restore Calibration\" to go back to one of the previous calibrations that was saved on the controller. Known issue: You may need to reboot your controller first in order for previous calibrations to show up.": "",
|
||||
"Image 1": "",
|
||||
"Images": "",
|
||||
"In most cases, calibrating your joysticks that have prior drift issues may result in a worse and unpredictable calibration.": "",
|
||||
"Midnight Black": "",
|
||||
"Not shown in the video: You can now also increase the range in each direction uniformly by using the cross in the top right and moving the slider up, which may speed up finetuning. Make sure to rotate the joystick first, otherwise the button cannot be pressed.": "",
|
||||
"Nova Pink": "",
|
||||
"Only official controllers are supported, no third-party or \"fake\" controllers.": "",
|
||||
"Option 1": "",
|
||||
"Option 2": "",
|
||||
"PlayStation Virtual Reality 2": "",
|
||||
"Saving calibration is locked by default on DualSense Edge joystick modules. A hardware mod is required to save the calibration permanently. The calibration is saved on the modules themselves, so you have to perform the mod twice: once for each module. You would need to bridge two points on the PCB with enamelled wire. There are multiple methods, I personally recommend using either of these two locations to solder the wire to. See images below. Ensure the wire is thin enough so that the shell is closed properly. Make sure you don't short the wire to ground through the letters near the bottom joint.": "",
|
||||
"Sony DualShock 4": "",
|
||||
"Spider-Man 2": "",
|
||||
"Starlight Blue": "",
|
||||
"Sterling Silver": "",
|
||||
"The Last of Us": "",
|
||||
"The calibration is stored on each module individually. It is carried over if you place the modules in a different DualSense Edge. Likewise, if you place a different set of modules in your DualSense Edge, you will get a different calibration that is tied to those new modules.": "",
|
||||
"The finetuning and quick test menus are only accessible for DualSense and DualSense Edge.": "",
|
||||
"The website supports the following official controllers:": "",
|
||||
"These previous calibrations are stored locally in your browser's storage. Meaning you can only restore calibrations using the same computer and browser that you used to calibrate it with, and deleting the cache or using Incognito will make any previous calibration irrecoverable.": "",
|
||||
"This software is not intended to fix stickdrift and will <b>not</b> fix stickdrift on its own if you already experience that.": "",
|
||||
"This video from V2.16 shows how to use the finetuning menu.": "",
|
||||
"Volcanic Red": "",
|
||||
"We recommend a circularity between 7% and 9%. The reason for this is to mimic a stock controllers calibration. However, symmetrical overshoot is more important and if you need to deviate from this range to achieve better symmetry, that is fine too.": "",
|
||||
"What are the risks of using the calibration?": "",
|
||||
"What circularity percentage to aim for when calibrating and finetuning.": "",
|
||||
"What the software will help with, is ensuring new joysticks will function properly after replacing the old broken joysticks that drift. This step involves opening up the controller and soldering new potentiometers or an entire new joystick.": "",
|
||||
"When calibrating, there is no risk. However, if your controller disconnects during the split second that you save a calibration, then you have a chance of bricking your controller. Make sure your battery has enough charge and is plugged into the controller, and the USB cable is securely connected. This prevents your controller from being bricked if the USB cable accidentally disconnects.": "",
|
||||
"Which controllers does DualShock Calibration GUI support?": "",
|
||||
"White": "",
|
||||
"Yes. Simply do another calibration, and click the green button to save permanently.": "",
|
||||
"": ""
|
||||
}
|
||||
364
lang/rs_rs.json
Normal file
@@ -0,0 +1,364 @@
|
||||
{
|
||||
".authorMsg": "- Srpski prevod: <a href='https://www.linkedin.com/in/lazar-dimitrijevic/'>Lazar Dimitrijevic</a> - <a href='https://github.com/lazardimi'>GitHub</a>.",
|
||||
"DualShock Calibration GUI": "Interfejs za kalibraciju DualShock",
|
||||
"Connect": "Poveži",
|
||||
"Connected to:": "Povezano sa:",
|
||||
"Disconnect": "Prekini vezu",
|
||||
"Calibrate stick center": "Kalibrišite centar džojstika",
|
||||
"Calibrate stick range": "Kalibrišite opseg džojstika",
|
||||
"Sections below are not useful, just some debug infos or manual commands": "Sekcije ispod nisu korisne, samo neke informacije za debagovanje ili ručne komande",
|
||||
"NVS Status": "Status NVS",
|
||||
"Unknown": "Nepoznato",
|
||||
"Debug buttons": "Dugmići za debagovanje",
|
||||
"Query NVS status": "Upitaj status NVS",
|
||||
"NVS unlock": "Otključaj NVS",
|
||||
"NVS lock": "Zaključaj NVS",
|
||||
"Stick center calibration": "Kalibracija centra džojstika",
|
||||
"Welcome": "Dobrodošli",
|
||||
"Step 1": "Korak 1",
|
||||
"Step 2": "Korak 2",
|
||||
"Step 3": "Korak 3",
|
||||
"Step 4": "Korak 4",
|
||||
"Completed": "Završeno",
|
||||
"Welcome to the stick center-calibration wizard!": "Dobrodošli u asistent za kalibraciju centra džojstika!",
|
||||
"This tool will guide you in re-centering the analog sticks of your controller. It consists of four steps: you will be asked to move both sticks in a direction and release them.": "Ovaj alat će vas voditi kroz ponovno centriranje analognih džojstika na vašem kontroleru. Sastoji se od četiri koraka: biće vam zatraženo da pomerate oba džojstika u određenom pravcu i zatim ih otpustite.",
|
||||
"Please be aware that, <i>once the calibration is running, it cannot be canceled</i>. Do not close this page or disconnect your controller until it is completed.": "Molimo vas da imate na umu da <i>jednom kada kalibracija počne, ne može se otkazati</i>. Ne zatvarajte ovu stranicu i ne prekidajte vezu sa kontrolerom dok se proces ne završi.",
|
||||
"Press <b>Start</b> to begin calibration.": "Pritisnite <b>Počni</b> da biste započeli kalibraciju.",
|
||||
"Please move both sticks to the <b>top-left corner</b> and release them.": "Molimo vas da pomerite oba džojstika u <b>gornji levi ugao</b> i zatim ih otpustite.",
|
||||
"When the sticks are back in the center, press <b>Continue</b>.": "Kada se džojstici vrate u centar, pritisnite <b>Nastavi</b>.",
|
||||
"Please move both sticks to the <b>top-right corner</b> and release them.": "Molimo vas da pomerite oba džojstika u <b>gornji desni ugao</b> i zatim ih otpustite.",
|
||||
"Please move both sticks to the <b>bottom-left corner</b> and release them.": "Molimo vas da pomerite oba džojstika u <b>donji levi ugao</b> i zatim ih otpustite.",
|
||||
"Please move both sticks to the <b>bottom-right corner</b> and release them.": "Molimo vas da pomerite oba džojstika u <b>donji desni ugao</b> i zatim ih otpustite.",
|
||||
"Calibration completed successfully!": "Kalibracija je uspešno završena!",
|
||||
"Next": "Sledeće",
|
||||
"Recentering the controller sticks.": "Ponovno centriranje džojstika kontrolera.",
|
||||
"Please do not close this window and do not disconnect your controller. ": "Molimo vas da ne zatvarate ovaj prozor i da ne prekidate vezu sa kontrolerom. ",
|
||||
"Range calibration": "Kalibracija opsega džojstika",
|
||||
"The controller is now sampling data!": "Kontroler sada prikuplja podatke!",
|
||||
"Done": "Završeno",
|
||||
"Hi, thank you for using this software.": "Zdravo, hvala vam što koristite ovaj softver.",
|
||||
"If you're finding it helpful and you want to support my efforts, feel free to": "Ako vam je koristan i želite da podržite moj rad, slobodno",
|
||||
"buy me a coffee": "kupite mi kafu",
|
||||
"! :)": "! :)",
|
||||
"Do you have any suggestion or issue? Drop me a message via email or discord.": "Imate li neki predlog ili problem? Pošaljite mi poruku putem e-pošte ili Discord-a.",
|
||||
"Cheers!": "Želimo vam sve najbolje!",
|
||||
"Support this project": "Podržite ovaj projekat",
|
||||
"unknown": "nepoznato",
|
||||
"original": "originalno",
|
||||
"clone": "klon",
|
||||
"locked": "zaključano",
|
||||
"unlocked": "otključano",
|
||||
"error": "greška",
|
||||
"Build Date": "Datum izrade",
|
||||
"HW Version": "Verzija hardvera",
|
||||
"SW Version": "Verzija softvera",
|
||||
"Device Type": "Tip uređaja",
|
||||
"Range calibration completed": "Kalibracija opsega završena",
|
||||
"Range calibration failed": "Kalibracija opsega nije uspela",
|
||||
"Stick calibration failed": "Kalibracija džojstika nije uspela",
|
||||
"Stick calibration completed": "Kalibracija džojstika završena",
|
||||
"NVS Lock failed": "Zaključavanje NVS nije uspelo",
|
||||
"NVS Unlock failed": "Otključavanje NVS nije uspelo",
|
||||
"Please connect only one controller at time.": "Molimo vas da povežete samo jedan kontroler istovremeno.",
|
||||
"Sony DualShock 4 V1": "Sony DualShock 4 V1",
|
||||
"Sony DualShock 4 V2": "Sony DualShock 4 V2",
|
||||
"Sony DualSense": "Sony DualSense",
|
||||
"Sony DualSense Edge": "Sony DualSense Edge",
|
||||
"Connected invalid device": "Povezan je nevažeći uređaj",
|
||||
"Error": "Greška",
|
||||
"Initializing...": "Inicijalizacija...",
|
||||
"Storing calibration...": "Čuvanje kalibracije...",
|
||||
"Sampling...": "Uzorak...",
|
||||
"Calibration in progress": "Kalibracija u toku",
|
||||
"Start": "Počni",
|
||||
"Continue": "Nastavi",
|
||||
"Have a nice day :)": "Želimo vam prijatan dan :)",
|
||||
"Welcome to the Calibration GUI": "Dobrodošli u interfejs za kalibraciju",
|
||||
"Just few things to know before you can start:": "Samo nekoliko stvari koje treba da znate pre nego što počnete:",
|
||||
"This website is not affiliated with Sony, PlayStation & co.": "Ovaj sajt nije povezan sa Sony, PlayStation & ko.",
|
||||
"This service is provided without warranty. Use at your own risk.": "Ovaj servis se pruža bez garancije. Koristite na sopstveni rizik.",
|
||||
"Keep the internal battery of the controller connected and ensure it is well charged. If the battery dies during operations, the controller will be damaged and rendered unusable.": "Držite internu bateriju kontrolera povezanu i obezbedite da je dobro napunjena. Ako se baterija isprazni tokom operacije, kontroler će biti oštećen i postaće neupotrebljiv.",
|
||||
"Before doing the permanent calibration, try the temporary one to ensure that everything is working well.": "Pre nego što izvršite trajnu kalibraciju, probajte privremenu kako biste obezbedili da sve radi kako treba.",
|
||||
"Understood": "Razumem",
|
||||
"Version": "Verzija",
|
||||
"Frequently Asked Questions": "Često postavljana pitanja",
|
||||
"Close": "Zatvori",
|
||||
"Welcome to the F.A.Q. section! Below, you'll find answers to some of the most commonly asked questions about this website. If you have any other inquiries or need further assistance, feel free to reach out to me directly. Your feedback and questions are always welcome!": "Dobrodošli u sekciju ČPP! Ispod ćete naći odgovore na neka od najčešće postavljanih pitanja o ovom sajtu. Ako imate još pitanja ili vam je potrebna dodatna pomoć, slobodno me kontaktirajte direktno. Vaši komentari i pitanja su uvek dobrodošli!",
|
||||
"How does it work?": "Kako to radi?",
|
||||
"Behind the scenes, this website is the culmination of one year of dedicated effort in reverse-engineering DualShock controllers for fun/hobby from a random guy on the internet.": "Iza kulisa, ovaj sajt je rezultat godinu dana posvećenog rada na reverznom inženjeringu DualShock kontrolera iz zadovoljstva/hobija od strane slučajnog čoveka na internetu.",
|
||||
"Through": "Kroz",
|
||||
"this research": "ovo istraživanje",
|
||||
", it was discovered that there exist some undocumented commands on DualShock controllers that can be sent via USB and are used during factory assembly process. If these commands are sent, the controller starts the recalibration of analog sticks.": ", otkriveno je da postoje neke nedokumentovane komande na DualShock kontrolerima koje se mogu poslati preko USB-a i koriste se tokom procesa fabričkog sklapanja. Ako se ove komande pošalju, kontroler započinje ponovnu kalibraciju analognih džojstika.",
|
||||
"While the primary focus of this research wasn't initially centered on recalibration, it became apparent that a service offering this capability could greatly benefit numerous individuals. And thus, here we are.": "Iako primarni fokus ovog istraživanja nije bio na kalibraciji, postalo je očigledno da servis koji nudi ovu mogućnost može biti od velike koristi mnogim pojedincima. I evo nas.",
|
||||
"Is this an officially endorsed service?": "Da li je ovo zvanično odobren servis?",
|
||||
"No, this service is simply a creation by a DualShock enthusiast.": "Ne, ovaj servis je jednostavno kreacija entuzijaste za DualShock.",
|
||||
"Does this website detect if a controller is a clone?": "Da li ovaj sajt detektuje da li je kontroler klon?",
|
||||
"Yes, only DualShock4 at the moment. This happened because I accidentally purchased some clones, spent time identifying the differences and added this functionality to prevent future deception.": "Da, trenutno samo DualShock4. Ovo se dogodilo jer sam slučajno kupio nekoliko klonova, proveo vreme identifikujući razlike i dodao ovu funkcionalnost da bih sprečio buduće obmane.",
|
||||
"Unfortunately, the clones cannot be calibrated anyway, because they only clone the behavior of a DualShock4 during normal gameplay, not all the undocumented functionalities.": "Nažalost, klonovi se ne mogu kalibrisati, jer oni samo kopiraju ponašanje DualShock4 tokom normalne igre, a ne sve nedokumentovane funkcionalnosti.",
|
||||
"If you want to extend this detection functionality to DualSense, please ship me a fake DualSense and you'll see it in few weeks.": "Ako želite da proširite ovu funkcionalnost detekcije na DualSense, molimo vas da mi pošaljete lažnu DualSense i videćete je za nekoliko nedelja.",
|
||||
"What development is in plan?": "Koji razvoj je u planu?",
|
||||
"I maintain two separate to-do lists for this project, although the priority has yet to be established.": "Držim dve odvojene liste zadataka za ovaj projekat, iako prioritet još nije utvrđen.",
|
||||
"The first list is about enhancing support for DualShock4 and DualSense controllers:": "Prva lista se odnosi na poboljšanje podrške za DualShock4 i DualSense kontrolere:",
|
||||
"Implement calibration of L2/R2 triggers.": "Implementiraj kalibraciju L2/R2 okidača.",
|
||||
"Improve detection of clones, particularly beneficial for those seeking to purchase used controllers with assurance of authenticity.": "Poboljšaj detekciju klonova, što je posebno korisno za one koji žele da kupe polovne kontrolere sa obezbeđenjem autentičnosti.",
|
||||
"Add support for recalibrating IMUs.": "Dodaj podršku za ponovnu kalibraciju IMU.",
|
||||
"Additionally, explore the possibility of reviving non-functioning DualShock controllers (further discussion available on Discord for interested parties).": "Dodatno, istraži mogućnost oživljavanja nefunkcionalnih DualShock kontrolera (dodatna rasprava dostupna na Discord-u za zainteresovane).",
|
||||
"The second list contains new controllers I aim to support:": "Druga lista sadrži nove kontrolere koje ciljam da podržim:",
|
||||
"DualShock 3": "DualShock 3",
|
||||
"XBox Controllers": "XBox kontroleri",
|
||||
"Each of these tasks presents both immense interest and significant time investment. To provide context, supporting a new controller typically demands 6-12 months of full-time research, alongside a stroke of good fortune.": "Svaka od ovih zadataka predstavlja ogroman interes i značajnu investiciju vremena. Da bih dao kontekst, podrška za novi kontroler obično zahteva 6-12 meseci punog radnog vremena istraživanja, uz malo sreće.",
|
||||
"I love this service, it helped me! How can I contribute?": "Volim ovaj servis, pomogao mi je! Kako mogu da doprinesem?",
|
||||
"I'm glad to hear that you found this helpful! If you're interested in contributing, here are a few ways you can help me:": "Drago mi je da ste našli ovo korisnim! Ako ste zainteresovani da doprinesete, evo nekoliko načina na koje možete da mi pomognete:",
|
||||
"Consider making a": "Razmislite o tome da napravite",
|
||||
"donation": "donaciju",
|
||||
"to support my late-night caffeine-fueled reverse-engineering efforts.": "da podržite moje napore reverznog inženjeringa kasno u noć podstaknute kofeinom.",
|
||||
"Ship me a controller you would love to add (send me an email for organization).": "Pošaljite mi kontroler koji biste voleli da dodate (pošaljite mi e-mail za organizaciju).",
|
||||
"Translate this website in your language": "Prevedite ovaj sajt na svoj jezik",
|
||||
", to help more people like you!": ", da biste pomogli više ljudi poput vas!",
|
||||
"This website uses analytics to improve the service.": "Ovaj sajt koristi analitiku za poboljšanje servisa.",
|
||||
"Board Model": "Model ploče",
|
||||
"This DualSense controller has outdated firmware.": "Ovaj DualSense kontroler ima zastareli firmware.",
|
||||
"Please update the firmware and try again.": "Molimo vas da ažurirate firmware i pokušate ponovo.",
|
||||
"Joystick Info": "Informacije o džojstiku",
|
||||
"Check circularity": "Proveri kružnost",
|
||||
"No.": "Ne.",
|
||||
"Does this software resolve stickdrift?": "Da li ovaj softver rešava stickdrift?",
|
||||
"Stickdrift is caused by a physical defect; namely dirt, worn potentiometer or in some cases a worn spring.": "Stickdrift je uzrokovan fizičkim defektom; naime, prljavštinom, istrošenim potenciometrom ili u nekim slučajevima istrošenom oprugom.",
|
||||
"After range calibration, joysticks always go in corners.": "Nakon kalibracije opsega, džojstici uvek idu u uglove.",
|
||||
"This issue happens because you have clicked \"Done\" immediately after starting a range calibration.": "Ovaj problem se dešava jer ste pritisnuli \"Završeno\" odmah nakon pokretanja kalibracije opsega.",
|
||||
"Please read the instructions.": "Molimo vas da pročitate uputstva.",
|
||||
"You have to rotate the joysticks before you press \"Done\".": "Morate rotirati džojstike pre nego što pritisnete \"Završeno\".",
|
||||
"Make sure to touch the edges of the joystick frame and rotate slowly, preferably in each direction - clockwise and anti-clockwise.": "Obavezno dodirnite ivice okvira džojstika i rotirajte polako, po mogućstvu u oba pravca - u smeru kazaljke na satu i suprotno.",
|
||||
"Only after you have done that, you click on \"Done\".": "Tek nakon što to uradite, kliknite na \"Završeno\".",
|
||||
"Changes saved successfully": "Promene uspešno sačuvane",
|
||||
"Error while saving changes": "Greška prilikom čuvanja promena:",
|
||||
"Save changes permanently": "Sačuvaj promene trajno",
|
||||
"Reboot controller": "Ponovo pokreni kontroler",
|
||||
"Controller Info": "Informacije o kontroleru",
|
||||
"Debug Info": "Informacije za debagovanje",
|
||||
"Software": "Softver",
|
||||
"Hardware": "Hardver",
|
||||
"FW Build Date": "Datum izrade firmvera",
|
||||
"FW Type": "Tip firmvera",
|
||||
"FW Series": "Serija firmvera",
|
||||
"FW Version": "Verzija firmvera",
|
||||
"FW Update": "Ažuriranje firmvera",
|
||||
"FW Update Info": "Informacije o ažuriranju firmvera",
|
||||
"SBL FW Version": "SBL verzija firmvera",
|
||||
"Venom FW Version": "Venom verzija firmvera",
|
||||
"Spider FW Version": "Spider verzija firmvera",
|
||||
"Touchpad FW Version": "Verzija firmvera za touchpad",
|
||||
"Serial Number": "Serijski broj",
|
||||
"MCU Unique ID": "Jedinstveni ID MCU",
|
||||
"PCBA ID": "PCBA ID",
|
||||
"Battery Barcode": "Barkod baterije",
|
||||
"VCM Left Barcode": "VCM levi barkod",
|
||||
"VCM Right Barcode": "VCM desni barkod",
|
||||
"HW Model": "Model hardvera",
|
||||
"Touchpad ID": "ID touchpada",
|
||||
"Bluetooth Address": "Bluetooth adresa",
|
||||
"Show all": "Prikaži sve",
|
||||
"Finetune stick calibration": "Fino podešavanje kalibracije džojstika",
|
||||
"(beta)": "(beta)",
|
||||
"Left stick": "Levi džojstik",
|
||||
"Right stick": "Desni džojstik",
|
||||
"Cancel": "Otkaži",
|
||||
"(DualSense & DualSense Edge) Will updating the firmware reset calibration?": "",
|
||||
"(DualSense Edge) Is the calibration stored on the controller or the modules?": "",
|
||||
"10x zoom": "",
|
||||
"30th Anniversary": "",
|
||||
"<b>Externally</b>: by applying +1.8V directly to the visible test point without opening the controller.": "",
|
||||
"<b>Internally</b>: by soldering a wire from a +1.8V source to the write-protect TP.": "",
|
||||
"<strong>Average circularity error:</strong> smaller is not always better! Aim for 7-9 %.": "",
|
||||
"A reboot is needed to continue using this DualSense Edge. Please disconnect and reconnect your controller.": "",
|
||||
"A sample test was done with 30 dualsense edge modules, and the results showed that the inner quartile range (IQR) is 8.3% and 9.0%, with an average of 8.6%. This goes to show that stock controllers by default have a relatively high range, and the rule of thumb is to follow factory calibration.": "",
|
||||
"Adaptive Trigger": "",
|
||||
"Adaptive triggers are only supported on DualSense controllers": "",
|
||||
"Add test": "",
|
||||
"After they have been replaced, this utility can be used to calibrate the controller to work with the new joysticks.": "",
|
||||
"Aim for a circularity error of around 7-9 % for the best playing experience.": "",
|
||||
"Astro Bot": "",
|
||||
"Battery level is low. Tests may fail due to the controller being in power saving mode.": "",
|
||||
"Be gentle to avoid damage.": "",
|
||||
"Buttons": "",
|
||||
"Calibrating without replacing the joysticks may help temporarily, but it may also make the problem worse, with no way to undo it.": "",
|
||||
"Calibration": "",
|
||||
"Calibration History": "",
|
||||
"Calibration is being stored in the stick modules.": "",
|
||||
"Can I overwrite a (permanent) calibration?": "",
|
||||
"Can I restore a previous calibration?": "",
|
||||
"Cannot copy text to the clipboard:": "",
|
||||
"Cannot lock": "",
|
||||
"Cannot read module barcodes": "",
|
||||
"Cannot store data into": "",
|
||||
"Cannot unlock": "",
|
||||
"Center": "",
|
||||
"Center (L1)": "",
|
||||
"Chroma Indigo": "",
|
||||
"Chroma Pearl": "",
|
||||
"Chroma Teal": "",
|
||||
"Circularity": "",
|
||||
"Circularity (R1)": "",
|
||||
"Clear All": "",
|
||||
"Cobalt Blue": "",
|
||||
"Color": "",
|
||||
"Controller does not support adaptive trigger control": "",
|
||||
"Cosmic Red": "",
|
||||
"Current": "",
|
||||
"Debug": "",
|
||||
"Delete": "",
|
||||
"Delete all calibration history for this controller? This cannot be undone.": "",
|
||||
"Delete this calibration entry?": "",
|
||||
"Don't show again": "",
|
||||
"Drift is caused by mechanical parts in the joystick being worn out, and they need to be replaced to fix the drift.": "",
|
||||
"DualSense Edge Calibration": "",
|
||||
"Fail": "",
|
||||
"Failed": "",
|
||||
"Failed to connect to device": "",
|
||||
"Failed to disable adaptive trigger": "",
|
||||
"Failed to set speaker tone": "",
|
||||
"Failed to set vibration": "",
|
||||
"Feel for vibration in the controller.": "",
|
||||
"Finetuning is only available for DualSense and DualSense Edge.": "",
|
||||
"Firefox is supported with the WebHID extension installed.": "",
|
||||
"For more info or help, feel free to reach out on Discord.": "",
|
||||
"Fortnite": "",
|
||||
"Galactic Purple": "",
|
||||
"God of War 20th Anniversary": "",
|
||||
"God of War Ragnarok": "",
|
||||
"Grey Camouflage": "",
|
||||
"Haptic Vibration": "",
|
||||
"Headphone Jack": "",
|
||||
"Housing": "",
|
||||
"How do I use the finetuning feature?": "",
|
||||
"If the calibration is not stored permanently, please double-check the wirings of the hardware mod.": "",
|
||||
"If you don't have a battery connected or the connected battery is empty, AND your cable disconnects during saving the calibration, then your controller has a high chance of being bricked.": "",
|
||||
"If you have not clicked the green button \"Save changes permanently\", then unplugging the controller will reset to the previously saved calibration. It is recommended you test your calibration before saving.": "",
|
||||
"If you have saved the changes permanently, you can reset the changes only if you are using a DualSense or DualSense Edge. You can click on the grey button \"Restore Calibration\" to go back to one of the previous calibrations that was saved on the controller. Known issue: You may need to reboot your controller first in order for previous calibrations to show up.": "",
|
||||
"Image 1": "",
|
||||
"Images": "",
|
||||
"In most cases, calibrating your joysticks that have prior drift issues may result in a worse and unpredictable calibration.": "",
|
||||
"Increase non-circularity": "",
|
||||
"Info": "",
|
||||
"Instructions": "",
|
||||
"It appears the latest joystick calibration has not been saved.": "",
|
||||
"Keep rotating the sticks even if you see no progress!": "",
|
||||
"Last connected": "",
|
||||
"Learn more...": "",
|
||||
"Left Module Barcode": "",
|
||||
"Lights": "",
|
||||
"Listen for a tone from the controller speaker.": "",
|
||||
"Long-press [circle] to skip ahead.": "",
|
||||
"Microphone": "",
|
||||
"Microphone Level:": "",
|
||||
"Midnight Black": "",
|
||||
"More details and images": "",
|
||||
"Move the stick to select it for tuning, then without touching the stick use the D-pad buttons to adjust the center point. Flick it and adjust it again if it is off center or flickers.": "",
|
||||
"No controller connected": "",
|
||||
"No saved calibrations found.": "",
|
||||
"No tests completed yet.": "",
|
||||
"Normal": "",
|
||||
"Not shown in the video: You can now also increase the range in each direction uniformly by using the cross in the top right and moving the slider up, which may speed up finetuning. Make sure to rotate the joystick first, otherwise the button cannot be pressed.": "",
|
||||
"Not tested": "",
|
||||
"Nova Pink": "",
|
||||
"Only official controllers are supported, no third-party or \"fake\" controllers.": "",
|
||||
"Option 1": "",
|
||||
"Option 2": "",
|
||||
"Pass": "",
|
||||
"Passed": "",
|
||||
"PlayStation Virtual Reality 2": "",
|
||||
"Please connect a DualShock 4, a DualSense, DualSense Edge or VR2 controller to your computer and press Connect.": "",
|
||||
"Please note: the stick modules on the DS Edge <b>cannot be calibrated via software alone</b>.": "",
|
||||
"Please release the stick to center position before adjusting with D-pad buttons.": "",
|
||||
"Please use a web browser with WebHID support (e.g. Google Chrome or Microsoft Edge) on a PC or Mac.": "",
|
||||
"Plug in headphones to the 3.5mm jack": "",
|
||||
"Press L2 and R2 triggers to feel the trigger resistance.": "",
|
||||
"Press [circle] to close, or [square] to start over": "",
|
||||
"Press [square] to Pass, [cross] to Fail, or [circle] to skip.": "",
|
||||
"Press [square] to begin or [circle] to close": "",
|
||||
"Press [triangle] to go back.": "",
|
||||
"Press each button until they turn green.": "",
|
||||
"Press the D-pad or face buttons in the direction you want the stick position to move.": "",
|
||||
"Progress": "",
|
||||
"Push the stick straight up/down/left/right as far as possible.": "",
|
||||
"Quick Test": "",
|
||||
"Quick calibrate": "",
|
||||
"Range calibration appears to have failed. Please try again and make sure you rotate the sticks.": "",
|
||||
"Repeat": "",
|
||||
"Restart": "",
|
||||
"Restore": "",
|
||||
"Restore calibration": "",
|
||||
"Right Module Barcode": "",
|
||||
"Rotate the sticks slowly at least 2 times in one direction and 2 times in the other direction to cover the whole range.": "",
|
||||
"Run through these tests to verify your controller's functionality.": "",
|
||||
"Saving calibration is locked by default on DualSense Edge joystick modules. A hardware mod is required to save the calibration permanently. The calibration is saved on the modules themselves, so you have to perform the mod twice: once for each module. You would need to bridge two points on the PCB with enamelled wire. There are multiple methods, I personally recommend using either of these two locations to solder the wire to. See images below. Ensure the wire is thin enough so that the shell is closed properly. Make sure you don't short the wire to ground through the letters near the bottom joint.": "",
|
||||
"Show raw numbers": "",
|
||||
"Sony DualShock 4": "",
|
||||
"Sony controllers come from the factory calibrated to have an average circularity error of nearly 10 %, and this is now what games expect. Too perfect circularity can make movements and aim feel stiff and unresponsive in some games.": "",
|
||||
"Speaker": "",
|
||||
"Spider-Man 2": "",
|
||||
"Starlight Blue": "",
|
||||
"Step size": "",
|
||||
"Sterling Silver": "",
|
||||
"Support for calibrating DualSense Edge stick modules is now available as an <b>experimental feature</b>.": "",
|
||||
"Test Speaker": "",
|
||||
"Test Summary": "",
|
||||
"Test all buttons, or long-press [square] to Pass and [cross] to Fail, or [circle] to skip.": "",
|
||||
"The <b>Done</b> button will unlock after at most 15 seconds. If you press <b>Done</b> without rotating the sticks, the calibration will be incomplete and you will need to repeat it.": "",
|
||||
"The Last of Us": "",
|
||||
"The calibration is stored on each module individually. It is carried over if you place the modules in a different DualSense Edge. Likewise, if you place a different set of modules in your DualSense Edge, you will get a different calibration that is tied to those new modules.": "",
|
||||
"The calibration was restored successfully! Remember to save the changes in order not to loose them when the controller is rebooted.": "",
|
||||
"The device appears to be a clone. All calibration functionality is disabled.": "",
|
||||
"The device is connected via Bluetooth. Disconnect and reconnect using a USB cable instead.": "",
|
||||
"The finetuning and quick test menus are only accessible for DualSense and DualSense Edge.": "",
|
||||
"The item has been copied to the clipboard.": "",
|
||||
"The website supports the following official controllers:": "",
|
||||
"These previous calibrations are stored locally in your browser's storage. Meaning you can only restore calibrations using the same computer and browser that you used to calibrate it with, and deleting the cache or using Incognito will make any previous calibration irrecoverable.": "",
|
||||
"This controller has unsaved changes that will be lost when the controller is rebooted.": "",
|
||||
"This involves temporarily disabling write protection by applying <b>+1.8V</b> to a specific test point on each module.": "",
|
||||
"This is only for advanced users. If you're not sure what you're doing, please do not attempt it.": "",
|
||||
"This software is not intended to fix stickdrift and will <b>not</b> fix stickdrift on its own if you already experience that.": "",
|
||||
"This test checks all controller buttons by requiring you to press each button up to three times.": "",
|
||||
"This test checks the headphone jack functionality.": "",
|
||||
"This test checks the reliability of the USB port.": "",
|
||||
"This test will cycle through red, green, and blue colors on the controller lightbar, animate the player indicator lights, and flash the mute button.": "",
|
||||
"This test will enable heavy resistance on both L2 and R2 triggers.": "",
|
||||
"This utility cannot fix stick drift.": "",
|
||||
"This video from V2.16 shows how to use the finetuning menu.": "",
|
||||
"To store a custom calibration on the stick's internal memory, a <b>hardware modification</b> is required.": "",
|
||||
"USB Connector": "",
|
||||
"Unsupported browser.": "",
|
||||
"Use expert mode": "",
|
||||
"Use four-step calibration": "",
|
||||
"Use normal mode": "",
|
||||
"Use quick calibration": "",
|
||||
"Using this utility on a phone or tablet is not supported.": "",
|
||||
"Values": "",
|
||||
"Volcanic Red": "",
|
||||
"Watch the controller lights change colors, the player lights animate, and the mute button flash.": "",
|
||||
"We are not responsible for any damage caused by attempting this modification.": "",
|
||||
"We recommend a circularity between 7% and 9%. The reason for this is to mimic a stock controllers calibration. However, symmetrical overshoot is more important and if you need to deviate from this range to achieve better symmetry, that is fine too.": "",
|
||||
"What are the risks of using the calibration?": "",
|
||||
"What circularity percentage to aim for when calibrating and finetuning.": "",
|
||||
"What the software will help with, is ensuring new joysticks will function properly after replacing the old broken joysticks that drift. This step involves opening up the controller and soldering new potentiometers or an entire new joystick.": "",
|
||||
"When calibrating, there is no risk. However, if your controller disconnects during the split second that you save a calibration, then you have a chance of bricking your controller. Make sure your battery has enough charge and is plugged into the controller, and the USB cable is securely connected. This prevents your controller from being bricked if the USB cable accidentally disconnects.": "",
|
||||
"Which controllers does DualShock Calibration GUI support?": "",
|
||||
"While holding the stick to be adjusted straight up/down/left/right, make adjustments until you see lightblue sectors in all four directions after circling the stick both left and right. Then use the": "",
|
||||
"White": "",
|
||||
"Wiggle the USB cable to see if the controller disconnects.": "",
|
||||
"Yes. Simply do another calibration, and click the green button to save permanently.": "",
|
||||
"You can do this in two ways:": "",
|
||||
"You should save your changes, or reboot the controller to revert back to the previous state.": "",
|
||||
"Your device might not be a genuine Sony controller. If it is not a clone then please report this issue.": "",
|
||||
"failed": "",
|
||||
"here": "",
|
||||
"hide": "",
|
||||
"left module": "",
|
||||
"passed": "",
|
||||
"right module": "",
|
||||
"serial number": "",
|
||||
"skipped": "",
|
||||
"tests completed": "",
|
||||
"to increase the non-circularity.": "",
|
||||
"": ""
|
||||
}
|
||||
364
lang/ru_ru.json
Normal file
@@ -0,0 +1,364 @@
|
||||
{
|
||||
".authorMsg": "- Перевод на Русский язык выполнен: <a href='https://www.youtube.com/channel/UC8pzDCIt_CUj8sa7cYgPzHQ'>Tamir-Teknik</a>, Amnesia44, <a href='https://t.me/Belibobka'>Beliboba</a>",
|
||||
"DualShock Calibration GUI": "Интерфейс калибровки DualShock",
|
||||
"Connect": "Подключить",
|
||||
"Connected to:": "Подключено к:",
|
||||
"Disconnect": "Отключить",
|
||||
"Calibrate stick center": "Откалибровать центр джойстика",
|
||||
"Calibrate stick range": "Откалибровать диапазон джойстика",
|
||||
"Sections below are not useful, just some debug infos or manual commands": "Разделы ниже не несут полезной нагрузки, просто некоторая отладочная информация и ручные команды",
|
||||
"NVS Status": "Статус NVS",
|
||||
"Unknown": "Неизвестно",
|
||||
"Query NVS status": "Запросить статус NVS",
|
||||
"NVS unlock": "Разблокировать NVS",
|
||||
"NVS lock": "Заблокировать NVS",
|
||||
"Stick center calibration": "Калибровка центра джойстика",
|
||||
"Welcome": "Добро пожаловать",
|
||||
"Step 1": "Шаг 1",
|
||||
"Step 2": "Шаг 2",
|
||||
"Step 3": "Шаг 3",
|
||||
"Step 4": "Шаг 4",
|
||||
"Completed": "Завершено",
|
||||
"Welcome to the stick center-calibration wizard!": "Добро пожаловать в мастер калибровки центра джойстика!",
|
||||
"This tool will guide you in re-centering the analog sticks of your controller. It consists of four steps: you will be asked to move both sticks in a direction and release them.": "Этот инструмент поможет вам перекалибровать аналоговые стики вашего контроллера. Он состоит из четырех шагов: вам будет предложено переместить оба джойстика в определенном направлении и отпустить их.",
|
||||
"Please be aware that, <i>once the calibration is running, it cannot be canceled</i>. Do not close this page or disconnect your controller until it is completed.": "Обратите внимание, <i>после запуска калибровки ее нельзя отменить</i>. Не закрывайте эту страницу и не отключайте контроллер до завершения процесса.",
|
||||
"Press <b>Start</b> to begin calibration.": "Нажмите <b>Начать</b>, чтобы начать калибровку.",
|
||||
"Please move both sticks to the <b>top-left corner</b> and release them.": "Пожалуйста, переместите оба джойстика в <b>верхний левый угол</b> и отпустите их.",
|
||||
"When the sticks are back in the center, press <b>Continue</b>.": "Когда стики вернутся в центр, нажмите <b>Продолжить</b>.",
|
||||
"Please move both sticks to the <b>top-right corner</b> and release them.": "Пожалуйста, переместите оба джойстика в <b>верхний правый угол</b> и отпустите их.",
|
||||
"Please move both sticks to the <b>bottom-left corner</b> and release them.": "Пожалуйста, переместите оба джойстика в <b>нижний левый угол</b> и отпустите их.",
|
||||
"Please move both sticks to the <b>bottom-right corner</b> and release them.": "Пожалуйста, переместите оба джойстика в <b>нижний правый угол</b> и отпустите их.",
|
||||
"Calibration completed successfully!": "Калибровка успешно завершена!",
|
||||
"Next": "Далее",
|
||||
"Recentering the controller sticks.": "Центрирование стиков контроллера.",
|
||||
"Please do not close this window and do not disconnect your controller. ": "Пожалуйста, не закрывайте это окно и не отключайте контроллер.",
|
||||
"Range calibration": "Калибровка диапазона",
|
||||
"The controller is now sampling data!": "Контроллер в настоящее время собирает данные!",
|
||||
"Done": "Готово",
|
||||
"Hi, thank you for using this software.": "Привет, спасибо за использование этого программного обеспечения.",
|
||||
"If you're finding it helpful and you want to support my efforts, feel free to": "Если вы находите это полезным и хотите поддержать мои усилия, не стесняйтесь",
|
||||
"buy me a coffee": "Угостите меня кофе",
|
||||
"! :)": "! :)",
|
||||
"Do you have any suggestion or issue? Drop me a message via email or discord.": "У вас есть какие-либо предложения или проблемы? Отправьте мне сообщение по электронной почте или в дискорд.",
|
||||
"Cheers!": "Спасибо!",
|
||||
"Support this project": "Поддержите этот проект",
|
||||
"unknown": "неизвестно",
|
||||
"original": "оригинальный",
|
||||
"clone": "клон",
|
||||
"locked": "заблокирован",
|
||||
"unlocked": "разблокирован",
|
||||
"error": "ошибка",
|
||||
"Build Date": "Дата сборки",
|
||||
"HW Version": "Версия аппаратного обеспечения",
|
||||
"SW Version": "Версия программного обеспечения",
|
||||
"Device Type": "Тип устройства",
|
||||
"Range calibration completed": "Калибровка диапазона завершена",
|
||||
"Range calibration failed": "Калибровка диапазона не удалась",
|
||||
"Stick calibration failed": "Калибровка джойстика не удалась",
|
||||
"Stick calibration completed": "Калибровка джойстика завершена",
|
||||
"NVS Lock failed": "Блокировка NVS не удалась",
|
||||
"NVS Unlock failed": "Разблокировка NVS не удалась",
|
||||
"Please connect only one controller at time.": "Пожалуйста, подключайте только один контроллер за раз.",
|
||||
"Sony DualShock 4 V1": "Sony DualShock 4 V1",
|
||||
"Sony DualShock 4 V2": "Sony DualShock 4 V2",
|
||||
"Sony DualSense": "Sony DualSense",
|
||||
"Sony DualSense Edge": "Sony DualSense Edge",
|
||||
"Connected invalid device": "Подключено недопустимое устройство",
|
||||
"Error": "Ошибка",
|
||||
"Initializing...": "Инициализация...",
|
||||
"Storing calibration...": "Сохранение калибровки...",
|
||||
"Sampling...": "Выборка...",
|
||||
"Calibration in progress": "Калибровка в процессе",
|
||||
"Start": "Старт",
|
||||
"Continue": "Продолжить",
|
||||
"Have a nice day :)": "Хорошего дня! :)",
|
||||
"Welcome to the Calibration GUI": "Добро пожаловать в Calibration GUI",
|
||||
"Just few things to know before you can start:": "Несколько вещей, о которых нужно знать, прежде чем начать:",
|
||||
"This website is not affiliated with Sony, PlayStation & co.": "Этот сайт не связан с Sony, PlayStation и т.д.",
|
||||
"This service is provided without warranty. Use at your own risk.": "Этот сервис предоставляется без гарантии. Используйте на свой страх и риск.",
|
||||
"Keep the internal battery of the controller connected and ensure it is well charged. If the battery dies during operations, the controller will be damaged and rendered unusable.": "Держите внутреннюю батарею контроллера подключенной и убедитесь, что она хорошо заряжена. Если батарея разрядится во время операций, контроллер будет поврежден и непригоден к использованию.",
|
||||
"Before doing the permanent calibration, try the temporary one to ensure that everything is working well.": "Перед проведением постоянной калибровки попробуйте временную, чтобы убедиться, что все работает хорошо.",
|
||||
"Understood": "Понял",
|
||||
"Version": "Версия",
|
||||
"Frequently Asked Questions": "Часто задаваемые вопросы",
|
||||
"Close": "Закрыть",
|
||||
"Welcome to the F.A.Q. section! Below, you'll find answers to some of the most commonly asked questions about this website. If you have any other inquiries or need further assistance, feel free to reach out to me directly. Your feedback and questions are always welcome!": "Добро пожаловать в раздел Часто задаваемых вопросов! Ниже вы найдете ответы на некоторые из самых часто задаваемых вопросов о данном веб-сайте. Если у вас есть другие вопросы или вам нужна дополнительная помощь, не стесняйтесь обращаться ко мне напрямую. Ваши отзывы и вопросы всегда приветствуются!",
|
||||
"How does it work?": "Как это работает?",
|
||||
"Behind the scenes, this website is the culmination of one year of dedicated effort in reverse-engineering DualShock controllers for fun/hobby from a random guy on the internet.": "За кадром этот веб сайт является результатом одного года преданного труда по обратной разработке контроллеров DualShock для развлечения/хобби от случайного парня в интернете.",
|
||||
"Through": "Через",
|
||||
"this research": "это исследование",
|
||||
", it was discovered that there exist some undocumented commands on DualShock controllers that can be sent via USB and are used during factory assembly process. If these commands are sent, the controller starts the recalibration of analog sticks.": ", было обнаружено, что существуют некоторые не задокументированные команды на контроллерах DualShock, которые можно отправить через USB и используются во время процесса сборки на фабрике. Если эти команды отправлены, контроллер начинает перекалибровку аналоговых стиков.",
|
||||
"While the primary focus of this research wasn't initially centered on recalibration, it became apparent that a service offering this capability could greatly benefit numerous individuals. And thus, here we are.": "Хотя основное внимание этого исследования изначально не было сосредоточено на перекалибровке, стало очевидно, что сервис, предлагающий эту возможность, может принести огромную пользу многим людям. И вот мы здесь.",
|
||||
"Is this an officially endorsed service?": "Это официально поддерживаемый сервис?",
|
||||
"No, this service is simply a creation by a DualShock enthusiast.": "Нет, этот сервис просто создан энтузиастом DualShock.",
|
||||
"Does this website detect if a controller is a clone?": "Этот сайт определяет, является ли контроллер клоном?",
|
||||
"Yes, only DualShock4 at the moment. This happened because I accidentally purchased some clones, spent time identifying the differences and added this functionality to prevent future deception.": "Да, на данный момент только DualShock4. Это произошло потому, что я случайно приобрел несколько клонов, потратил время на выявление различий и добавил эту функциональность, чтобы предотвратить будущие обманы.",
|
||||
"Unfortunately, the clones cannot be calibrated anyway, because they only clone the behavior of a DualShock4 during normal gameplay, not all the undocumented functionalities.": "К сожалению, клоны все равно не могут быть калиброваны, потому что они только клонируют поведение DualShock4 во время обычной игры, а не все не задокументированные функциональности.",
|
||||
"If you want to extend this detection functionality to DualSense, please ship me a fake DualSense and you'll see it in few weeks.": "Если вы хотите расширить эту функциональность обнаружения на DualSense, пожалуйста, отправьте мне поддельный DualSense, и вы увидите его через несколько недель.",
|
||||
"What development is in plan?": "Какие разработки запланированы?",
|
||||
"I maintain two separate to-do lists for this project, although the priority has yet to be established.": "Я веду два отдельных списка дел по этому проекту, хотя приоритет еще не установлен.",
|
||||
"The first list is about enhancing support for DualShock4 and DualSense controllers:": "Первый список касается улучшения поддержки контроллеров DualShock4 и DualSense:",
|
||||
"Implement calibration of L2/R2 triggers.": "Внедрить калибровку триггеров L2/R2.",
|
||||
"Improve detection of clones, particularly beneficial for those seeking to purchase used controllers with assurance of authenticity.": "Улучшить обнаружение клонов, что особенно полезно для тех, кто хочет приобрести подержанные контроллеры с гарантией подлинности.",
|
||||
"Add support for recalibrating IMUs.": "Добавить поддержку повторной калибровки IMU.",
|
||||
"Additionally, explore the possibility of reviving non-functioning DualShock controllers (further discussion available on Discord for interested parties).": "Кроме того, исследуйте возможность оживления неисправных контроллеров DualShock (дополнительное обсуждение доступно на Discord для заинтересованных лиц).",
|
||||
"The second list contains new controllers I aim to support:": "Второй список содержит новые контроллеры, которые я намерен поддержать:",
|
||||
"DualShock 3": "DualShock 3",
|
||||
"XBox Controllers": "Контроллеры Xbox",
|
||||
"Each of these tasks presents both immense interest and significant time investment. To provide context, supporting a new controller typically demands 6-12 months of full-time research, alongside a stroke of good fortune.": "Каждая из этих задач представляет собой огромный интерес и значительные временные затраты. Для предоставления контекста, поддержка нового контроллера обычно требует 6-12 месяцев полноценных исследований на полную ставку, а также удачи.",
|
||||
"I love this service, it helped me! How can I contribute?": "Мне нравится этот сервис, он помог мне! Как я могу внести свой вклад?",
|
||||
"I'm glad to hear that you found this helpful! If you're interested in contributing, here are a few ways you can help me:": "Я рад услышать, что вам это помогло! Если вы заинтересованы в участии, вот несколько способов, которыми вы можете мне помочь:",
|
||||
"Consider making a": "Рассмотрите возможность сделать",
|
||||
"donation": "пожертвование",
|
||||
"to support my late-night caffeine-fueled reverse-engineering efforts.": "для поддержки моих усилий по обратной разработке, проводимых на кофеине поздним вечером.",
|
||||
"Ship me a controller you would love to add (send me an email for organization).": "Отправьте мне контроллер, который вы хотели бы добавить (отправьте мне электронное письмо для организации).",
|
||||
"Translate this website in your language": "Переведите этот сайт на свой язык",
|
||||
", to help more people like you!": ", чтобы помочь большему числу людей, подобных вам!",
|
||||
"This website uses analytics to improve the service.": "Этот сайт использует аналитику для улучшения сервиса.",
|
||||
"Board Model": "Модель платы",
|
||||
"This DualSense controller has outdated firmware.": "Прошивка этого контроллера DualSense устарела.",
|
||||
"Please update the firmware and try again.": "Пожалуйста, обновите прошивку и попробуйте снова.",
|
||||
"Joystick Info": "Информация о джойстике",
|
||||
"Check circularity": "Проверить округлость",
|
||||
"No.": "Нет.",
|
||||
"Does this software resolve stickdrift?": "Это программное обеспечение решает проблему дрифта стика?",
|
||||
"Stickdrift is caused by a physical defect; namely dirt, worn potentiometer or in some cases a worn spring.": "Дрифт стика вызван физическим дефектом, а именно грязью, изношенным потенциометром или, в некоторых случаях, изношенной пружиной.",
|
||||
"After range calibration, joysticks always go in corners.": "После калибровки диапазона джойстики всегда уходят в углы.",
|
||||
"This issue happens because you have clicked \"Done\" immediately after starting a range calibration.": "Эта проблема возникает, потому что вы нажали \"Готово\" сразу после начала калибровки диапазона.",
|
||||
"Please read the instructions.": "Пожалуйста, прочитайте инструкции.",
|
||||
"You have to rotate the joysticks before you press \"Done\".": "Вы должны вращать джойстики перед тем, как нажать \"Готово\".",
|
||||
"Make sure to touch the edges of the joystick frame and rotate slowly, preferably in each direction - clockwise and anti-clockwise.": "Убедитесь, что касаетесь краев рамы джойстика и вращайте медленно, предпочтительно в обоих направлениях — по часовой стрелке и против часовой стрелки.",
|
||||
"Only after you have done that, you click on \"Done\".": "Только после того, как вы это сделали, нажмите \"Готово\".",
|
||||
"Changes saved successfully": "Изменения успешно сохранены",
|
||||
"Error while saving changes": "Ошибка при сохранении изменений:",
|
||||
"Save changes permanently": "Сохранить изменения навсегда",
|
||||
"Reboot controller": "Перезагрузить контроллер",
|
||||
"(beta)": "Бета",
|
||||
"<b>Externally</b>: by applying +1.8V directly to the visible test point without opening the controller.": "<b>Снаружи</b>: подачей напряжения +1,8 В непосредственно на видимую тестовую точку (TP) без вскрытия корпуса контроллера.",
|
||||
"<b>Internally</b>: by soldering a wire from a +1.8V source to the write-protect TP.": "<b>Внутри</b>: припаяйте провод от +1,8 В к точке защиты от записи.",
|
||||
"Battery Barcode": "Штрих-код батареи",
|
||||
"Bluetooth Address": "Адрес Bluetooth",
|
||||
"Calibration is being stored in the stick modules.": "Калибровка сохраняется в модулях стиков",
|
||||
"Cancel": "Отмена",
|
||||
"Cannot lock": "Не удалось заблокировать",
|
||||
"Cannot store data into": "Не удалось сохранить данные",
|
||||
"Cannot unlock": "Не удалось разблокировать",
|
||||
"Color": "Цвет",
|
||||
"Controller Info": "Инфо контроллера",
|
||||
"Debug Info": "Дебаг-информация",
|
||||
"Debug buttons": "Отладка кнопок",
|
||||
"DualSense Edge Calibration": "Калибровка DualSense Edge",
|
||||
"FW Build Date": "Дата сборки ПО",
|
||||
"FW Series": "Серия ПО",
|
||||
"FW Type": "Тип ПО",
|
||||
"FW Update": "Обновление ПО",
|
||||
"FW Update Info": "Информация об обновлении ПО",
|
||||
"FW Version": "Версия ПО",
|
||||
"Finetune stick calibration": "Точная калибровка стиков",
|
||||
"For more info or help, feel free to reach out on Discord.": "Для получения помощи не стесняйтесь обращаться в Discord",
|
||||
"HW Model": "Модель устройства",
|
||||
"Hardware": "Аппаратная часть",
|
||||
"If the calibration is not stored permanently, please double-check the wirings of the hardware mod.": "Если калибровка не сохраняется после перезагрузки, тщательно проверьте правильность подключения.",
|
||||
"Left Module Barcode": "Штрих-код левого модуля",
|
||||
"Left stick": "Левый стик",
|
||||
"MCU Unique ID": "Уникальный MCU ID",
|
||||
"More details and images": "Больше деталей и изображения",
|
||||
"PCBA ID": "ID платы",
|
||||
"Please note: the stick modules on the DS Edge <b>cannot be calibrated via software alone</b>.": "Обратите внимание: модули стиков на контроллере Dualsense Edge <b>нельзя откалибровать только с помощью программного обеспечения</b>.",
|
||||
"To store a custom calibration on the stick's internal memory, a <b>hardware modification</b> is required.": "Для сохранения пользовательской калибровки во внутренней памяти джойстика требуется <b>аппаратная модификация</b>.",
|
||||
"Right Module Barcode": "Штрих-код правого модуля",
|
||||
"Right stick": "Правый стик",
|
||||
"SBL FW Version": "Версия прошивки SBL",
|
||||
"Serial Number": "Серийный номер",
|
||||
"Show all": "Показать все",
|
||||
"Software": "Программное обеспечение",
|
||||
"Spider FW Version": "Версия прошивки Spider",
|
||||
"Support for calibrating DualSense Edge stick modules is now available as an <b>experimental feature</b>.": "Поддержка калибровки модулей DualSense Edge теперь доступна в качестве <b>экспериментальной функции</b>",
|
||||
"This involves temporarily disabling write protection by applying <b>+1.8V</b> to a specific test point on each module.": "Для этого необходимо временно отключить защиту от записи, подав напряжение <b>+1,8 В</b> на определенную контрольную точку на каждом модуле.",
|
||||
"This is only for advanced users. If you're not sure what you're doing, please do not attempt it.": "Только для продвинутых пользователей! Если вы не уверены ",
|
||||
"Touchpad FW Version": "Версия прошивки тачпада",
|
||||
"Touchpad ID": "ID тачпада",
|
||||
"VCM Left Barcode": "Штрих-код левого VCM",
|
||||
"VCM Right Barcode": "Штрих-код правого VCM",
|
||||
"Venom FW Version": "Версия прошивки Venom",
|
||||
"We are not responsible for any damage caused by attempting this modification.": "Мы не несем ответсвенности за какой-либо причиненный ущерб данной модификацией",
|
||||
"You can do this in two ways:": "Это можно сделать двумя способами",
|
||||
"here": "здесь",
|
||||
"left module": "Левый модуль",
|
||||
"right module": "Правый модуль",
|
||||
"10x zoom": "10x прибл.",
|
||||
"30th Anniversary": "30-я годовщина",
|
||||
"<strong>Average circularity error:</strong> smaller is not always better! Aim for 7-9 %.": "<strong>Средняя ошибка круглости:</strong> меньше не всегда лучше! Нацельтесь на 7-9%",
|
||||
"A reboot is needed to continue using this DualSense Edge. Please disconnect and reconnect your controller.": "Требуется перезагрузка чтобы продолжить использовать этот Dualsense Edge. пожалуйста переподключите свой контроллер.",
|
||||
"Adaptive Trigger": "Адаптивный Триггер",
|
||||
"Adaptive triggers are only supported on DualSense controllers": "Адаптивные триггеры поддерживаются только на контроллерах DualSense.",
|
||||
"Add test": "Добавить тест",
|
||||
"After they have been replaced, this utility can be used to calibrate the controller to work with the new joysticks.": "Этот инструмент может быть использован для калибровки стиков после их замены.",
|
||||
"Aim for a circularity error of around 7-9 % for the best playing experience.": "Нацельтесь на ошибку круглости около 7-9% для лучшего игрового опыта.",
|
||||
"Astro Bot": "Astro Bot",
|
||||
"Battery level is low. Tests may fail due to the controller being in power saving mode.": "Низкий уровень заряда батареи. Тесты могут провалиться из-за того что контроллер находится в режиме энергосбережения.",
|
||||
"Be gentle to avoid damage.": "Будьте нежны чтобы избежать повреждений.",
|
||||
"Buttons": "Кнопки",
|
||||
"Calibrating without replacing the joysticks may help temporarily, but it may also make the problem worse, with no way to undo it.": "Калибровка без замены стиков может помочь временно, но может и усугубить положение без возможности всё вернуть.",
|
||||
"Calibration": "Калибровка",
|
||||
"Calibration History": "История калибровки",
|
||||
"Cannot copy text to the clipboard:": "Не могу скопировать текст в буфер обмена",
|
||||
"Cannot read module barcodes": "Не могу прочитать штрих-коды модели",
|
||||
"Center": "Центр",
|
||||
"Center (L1)": "Центр (L1)",
|
||||
"Chroma Indigo": "Хромовый индиго",
|
||||
"Chroma Pearl": "Хромовый жемчуг",
|
||||
"Chroma Teal": "Хромовый бирюзовый",
|
||||
"Circularity": "Круглость",
|
||||
"Circularity (R1)": "Круглость (R1)",
|
||||
"Clear All": "Очистить Всё",
|
||||
"Cobalt Blue": "Кобальтовый синий",
|
||||
"Controller does not support adaptive trigger control": "Контроллер не поддерживает адаптивные триггеры",
|
||||
"Cosmic Red": "Космический красный",
|
||||
"Current": "Текущий",
|
||||
"Debug": "Отладка",
|
||||
"Delete": "Удалить",
|
||||
"Delete all calibration history for this controller? This cannot be undone.": "Удалить историю калибровки с контроллера? Это нельзя обратить.",
|
||||
"Delete this calibration entry?": "Удалить эту запись о калибровке?",
|
||||
"Don't show again": "Не показывать снова",
|
||||
"Drift is caused by mechanical parts in the joystick being worn out, and they need to be replaced to fix the drift.": "Дрифт вызван износом механических частей стика и их следует заменить чтобы его исправить",
|
||||
"Fail": "Провал",
|
||||
"Failed": "Провалился",
|
||||
"Failed to connect to device": "Не смог подключиться к устройству",
|
||||
"Failed to disable adaptive trigger": "Не смог отключить адаптивный триггер",
|
||||
"Failed to set speaker tone": "Не смог задать тон динамика",
|
||||
"Failed to set vibration": "Не смог задать вибрацию",
|
||||
"Feel for vibration in the controller.": "Почувствуйте вибрацию в контроллере",
|
||||
"Firefox is supported with the WebHID extension installed.": "Firefox поддерживается если установлено расширение добавляющее поддержку WebHID",
|
||||
"Fortnite": "Fortnite",
|
||||
"Galactic Purple": "Галактический розовый",
|
||||
"God of War Ragnarok": "God of War Ragnarok",
|
||||
"Grey Camouflage": "Серый камуфляж",
|
||||
"Haptic Vibration": "Виброотклик",
|
||||
"Headphone Jack": "Порт для наушников",
|
||||
"Increase non-circularity": "Увеличить некруглость",
|
||||
"Info": "Информация",
|
||||
"Instructions": "Инструкции",
|
||||
"It appears the latest joystick calibration has not been saved.": "Кажется, калибровка стика не была сохранена",
|
||||
"Keep rotating the sticks even if you see no progress!": "Продолжайте вращать стики даже если не замечаете прогресса",
|
||||
"Last connected": "Последнее подключение",
|
||||
"Learn more...": "Подробнее",
|
||||
"Lights": "Светодиоды",
|
||||
"Listen for a tone from the controller speaker.": "Слушайте звук динамика контроллера",
|
||||
"Long-press [circle] to skip ahead.": "Долгое нажатие на [circle] чтобы пропустить.",
|
||||
"Microphone": "Микрофон",
|
||||
"Microphone Level:": "Уровень громкости микрофона",
|
||||
"Midnight Black": "Полуночный чёрный",
|
||||
"Move the stick to select it for tuning, then without touching the stick use the D-pad buttons to adjust the center point. Flick it and adjust it again if it is off center or flickers.": "Двигайте стик чтобы выбрать его для настройки, потом, не прикасаясь к стику используйте кнопки D-pad чтобы настроить точку центра. Дёрните его и настройте опять если он самопроизвольное дёргается или не в центре.",
|
||||
"No controller connected": "Нет подключенных контроллеров",
|
||||
"No saved calibrations found.": "Не найдено сохранённых калибровок",
|
||||
"No tests completed yet.": "Не пройден ни один тест.",
|
||||
"Normal": "Обычный",
|
||||
"Not tested": "Не протестировано",
|
||||
"Nova Pink": "Ярко-розовый",
|
||||
"Pass": "Пройти",
|
||||
"Passed": "Пройдено",
|
||||
"Please connect a DualShock 4, a DualSense, DualSense Edge or VR2 controller to your computer and press Connect.": "Пожалуйста подключите один из следующих контроллеров к компьютеру и нажмите Подключить: DualShock 4, DualSense, DualSense Edge, VR2",
|
||||
"Please release the stick to center position before adjusting with D-pad buttons.": "Пожалуйста отпустите стик в центральную позицию прежде цем настраивать его кнопками D-pad",
|
||||
"Please use a web browser with WebHID support (e.g. Google Chrome or Microsoft Edge) on a PC or Mac.": "Пожалуйста, используйте браузер с поддержкой WebHID (Google Chrome или Microsoft Edge)",
|
||||
"Plug in headphones to the 3.5mm jack": "Воткните наушники в 3.5мм порт",
|
||||
"Press L2 and R2 triggers to feel the trigger resistance.": "Нажимайте триггеры L2 и R2, вы должны почувствовать сопротивление.",
|
||||
"Press [circle] to close, or [square] to start over": "Нажмите [circle] чтобы закрыть, или [square] чтобы начать заново.",
|
||||
"Press [square] to Pass, [cross] to Fail, or [circle] to skip.": "Нажмите [square] чтобы пометить как пройденный, [cross] как проваленный, или [circle] чтобы пропустить",
|
||||
"Press [square] to begin or [circle] to close": "Нажмите [square] чтобы начать или [circle] чтобы закрыть",
|
||||
"Press [triangle] to go back.": "Нажмите [triangle] чтобы вернуться назад.",
|
||||
"Press each button until they turn green.": "Нажимайте каждую кнопку пока она не станет зелёной.",
|
||||
"Press the D-pad or face buttons in the direction you want the stick position to move.": "Нажимайте D-pad или кнопки с фигурами в сторону, в которую вы хотите подвинуть положение стика.",
|
||||
"Progress": "Прогресс",
|
||||
"Push the stick straight up/down/left/right as far as possible.": "Тяните стик ровно вверх/вниз/влево/вправо как можно дальше.",
|
||||
"Quick Test": "Быстрый тест",
|
||||
"Quick calibrate": "Быстрая калибровка",
|
||||
"Range calibration appears to have failed. Please try again and make sure you rotate the sticks.": "Кажется, калибровка диапазона провалилась. Попробуйте снова и убедитесь, что вы вращаете стики.",
|
||||
"Repeat": "Повторить",
|
||||
"Restart": "Перезапустить",
|
||||
"Restore": "Восстановить",
|
||||
"Restore calibration": "Восстановить калибровку",
|
||||
"Rotate the sticks slowly at least 2 times in one direction and 2 times in the other direction to cover the whole range.": "Медленно вращайте минимум 2 раза в одном направлении, а затем в другом чтобы покрыть весь диапазон.",
|
||||
"Run through these tests to verify your controller's functionality.": "Пройдитесь по этим тестами чтобы проверить работоспособность вашего контроллера.",
|
||||
"Show raw numbers": "Показывать сырые значения",
|
||||
"Sony controllers come from the factory calibrated to have an average circularity error of nearly 10 %, and this is now what games expect. Too perfect circularity can make movements and aim feel stiff and unresponsive in some games.": "Контроллеры Sony с завода откалиброваны на ошибку круглости около 10%, и игры ожидают именно это. Слишком идеальная круглость может сделать движения и прицеливание неотзывчивыми и деревянными в играх.",
|
||||
"Speaker": "Динамик",
|
||||
"Spider-Man 2": "Spider-Man 2",
|
||||
"Starlight Blue": "Звёздный синий",
|
||||
"Step size": "Размер шага",
|
||||
"Sterling Silver": "Светлый серебристый",
|
||||
"Test Speaker": "Проверка динамика",
|
||||
"Test Summary": "Сводка по тесту",
|
||||
"Test all buttons, or long-press [square] to Pass and [cross] to Fail, or [circle] to skip.": "Проверьте все кнопки, или произведите долгое нажание на [square] для прохождения, [cross] для провала, или [circle] для пропуска.",
|
||||
"The <b>Done</b> button will unlock after at most 15 seconds. If you press <b>Done</b> without rotating the sticks, the calibration will be incomplete and you will need to repeat it.": "Кнопка ",
|
||||
"The Last of Us": "The Last of Us",
|
||||
"The calibration was restored successfully! Remember to save the changes in order not to loose them when the controller is rebooted.": "Калибровка была успешно восстановлена! Не забывайте сохранять изменения чтобы не потерять их при перезагрузке контроллера.",
|
||||
"The device appears to be a clone. All calibration functionality is disabled.": "Кажется, вы используете не оригинальный контроллер. Весь функционал калибровки был отключен.",
|
||||
"The device is connected via Bluetooth. Disconnect and reconnect using a USB cable instead.": "Это устройство было подключено по Bluetooth. Отключите и переподключите используя кабель USB.",
|
||||
"The item has been copied to the clipboard.": "Значение было скопировано в буфер обмена.",
|
||||
"This controller has unsaved changes that will be lost when the controller is rebooted.": "У этого контроллера есть несохранённые изменения которые будут утеряны при его перезагрузке.",
|
||||
"This test checks all controller buttons by requiring you to press each button up to three times.": "Этот тест проверяет все кнопки контроллера, вы должны нажать каждую кнопку до трёх раз.",
|
||||
"This test checks the headphone jack functionality.": "Этот тест проверяет функционал порта для наушников.",
|
||||
"This test checks the reliability of the USB port.": "Этот тест проверяет надёжность USB порта.",
|
||||
"This test will cycle through red, green, and blue colors on the controller lightbar, animate the player indicator lights, and flash the mute button.": "Этот тест подсветит красным, зелёным и синим светодиоды контроллера, анимирует огоньки игрока и померцает кнопкой заглушения микрофона.",
|
||||
"This test will enable heavy resistance on both L2 and R2 triggers.": "Этот тест проверит тяжёлое сопротивление на триггерах L2 и R2.",
|
||||
"This utility cannot fix stick drift.": "Этот инструмент не исправит Дрифт стиков.",
|
||||
"USB Connector": "USB Коннектор",
|
||||
"Unsupported browser.": "Неподдерживаемый браузер.",
|
||||
"Use expert mode": "Использовать режим эксперта",
|
||||
"Use four-step calibration": "Использовать четырёхшаговую калибровку",
|
||||
"Use normal mode": "Использовать обычный режим",
|
||||
"Use quick calibration": "Использовать быструю калибровку",
|
||||
"Using this utility on a phone or tablet is not supported.": "Использование этого инструмента на телефоне или планшете невозможно",
|
||||
"Values": "Значения",
|
||||
"Volcanic Red": "Вулканический красный",
|
||||
"Watch the controller lights change colors, the player lights animate, and the mute button flash.": "Смотрите на смену цветов светодиодов контроллера, анимацию огоньков игрока и мерцание кнопки заглушения микрофона",
|
||||
"While holding the stick to be adjusted straight up/down/left/right, make adjustments until you see lightblue sectors in all four directions after circling the stick both left and right. Then use the": "Удерживая стик нажимайте вверх/вниз/влево/вправо, вносите изменения пока не увидите светло-голубые сектора во всех четырёх направлениях после прокрутки стика по и против часовой стрелки, потом используйте",
|
||||
"White": "Белый",
|
||||
"Wiggle the USB cable to see if the controller disconnects.": "Потеребите USB кабель чтобы проверить отключится ли контроллер.",
|
||||
"You should save your changes, or reboot the controller to revert back to the previous state.": "Вы должны сохранить свои изменнеия или перезагрузить контроллер чтобы вернуться к предыдущему состоянию.",
|
||||
"Your device might not be a genuine Sony controller. If it is not a clone then please report this issue.": "Ваше устройство может быть не оригинальным контроллером Sony. Если это клон пожалуйста об этой ошибке.",
|
||||
"failed": "провалено",
|
||||
"hide": "скрыть",
|
||||
"passed": "пройдено",
|
||||
"serial number": "серийный номер",
|
||||
"skipped": "пропущено",
|
||||
"tests completed": "тестов пройдено",
|
||||
"to increase the non-circularity.": "чтобы увеличить",
|
||||
"(DualSense & DualSense Edge) Will updating the firmware reset calibration?": "",
|
||||
"(DualSense Edge) Is the calibration stored on the controller or the modules?": "",
|
||||
"A sample test was done with 30 dualsense edge modules, and the results showed that the inner quartile range (IQR) is 8.3% and 9.0%, with an average of 8.6%. This goes to show that stock controllers by default have a relatively high range, and the rule of thumb is to follow factory calibration.": "",
|
||||
"Can I overwrite a (permanent) calibration?": "",
|
||||
"Can I restore a previous calibration?": "",
|
||||
"Finetuning is only available for DualSense and DualSense Edge.": "",
|
||||
"God of War 20th Anniversary": "",
|
||||
"Housing": "",
|
||||
"How do I use the finetuning feature?": "",
|
||||
"If you don't have a battery connected or the connected battery is empty, AND your cable disconnects during saving the calibration, then your controller has a high chance of being bricked.": "",
|
||||
"If you have not clicked the green button \"Save changes permanently\", then unplugging the controller will reset to the previously saved calibration. It is recommended you test your calibration before saving.": "",
|
||||
"If you have saved the changes permanently, you can reset the changes only if you are using a DualSense or DualSense Edge. You can click on the grey button \"Restore Calibration\" to go back to one of the previous calibrations that was saved on the controller. Known issue: You may need to reboot your controller first in order for previous calibrations to show up.": "",
|
||||
"Image 1": "",
|
||||
"Images": "",
|
||||
"In most cases, calibrating your joysticks that have prior drift issues may result in a worse and unpredictable calibration.": "",
|
||||
"Not shown in the video: You can now also increase the range in each direction uniformly by using the cross in the top right and moving the slider up, which may speed up finetuning. Make sure to rotate the joystick first, otherwise the button cannot be pressed.": "",
|
||||
"Only official controllers are supported, no third-party or \"fake\" controllers.": "",
|
||||
"Option 1": "",
|
||||
"Option 2": "",
|
||||
"PlayStation Virtual Reality 2": "",
|
||||
"Saving calibration is locked by default on DualSense Edge joystick modules. A hardware mod is required to save the calibration permanently. The calibration is saved on the modules themselves, so you have to perform the mod twice: once for each module. You would need to bridge two points on the PCB with enamelled wire. There are multiple methods, I personally recommend using either of these two locations to solder the wire to. See images below. Ensure the wire is thin enough so that the shell is closed properly. Make sure you don't short the wire to ground through the letters near the bottom joint.": "",
|
||||
"Sony DualShock 4": "",
|
||||
"The calibration is stored on each module individually. It is carried over if you place the modules in a different DualSense Edge. Likewise, if you place a different set of modules in your DualSense Edge, you will get a different calibration that is tied to those new modules.": "",
|
||||
"The finetuning and quick test menus are only accessible for DualSense and DualSense Edge.": "",
|
||||
"The website supports the following official controllers:": "",
|
||||
"These previous calibrations are stored locally in your browser's storage. Meaning you can only restore calibrations using the same computer and browser that you used to calibrate it with, and deleting the cache or using Incognito will make any previous calibration irrecoverable.": "",
|
||||
"This software is not intended to fix stickdrift and will <b>not</b> fix stickdrift on its own if you already experience that.": "",
|
||||
"This video from V2.16 shows how to use the finetuning menu.": "",
|
||||
"We recommend a circularity between 7% and 9%. The reason for this is to mimic a stock controllers calibration. However, symmetrical overshoot is more important and if you need to deviate from this range to achieve better symmetry, that is fine too.": "",
|
||||
"What are the risks of using the calibration?": "",
|
||||
"What circularity percentage to aim for when calibrating and finetuning.": "",
|
||||
"What the software will help with, is ensuring new joysticks will function properly after replacing the old broken joysticks that drift. This step involves opening up the controller and soldering new potentiometers or an entire new joystick.": "",
|
||||
"When calibrating, there is no risk. However, if your controller disconnects during the split second that you save a calibration, then you have a chance of bricking your controller. Make sure your battery has enough charge and is plugged into the controller, and the USB cable is securely connected. This prevents your controller from being bricked if the USB cable accidentally disconnects.": "",
|
||||
"Which controllers does DualShock Calibration GUI support?": "",
|
||||
"Yes. Simply do another calibration, and click the green button to save permanently.": "",
|
||||
"": ""
|
||||
}
|
||||
364
lang/tr_tr.json
Normal file
@@ -0,0 +1,364 @@
|
||||
{
|
||||
".authorMsg": "- Çeviri: <a href='https://share.google/hCBJV5fFMbd5gJxxZ'>CzR PlayStation&Bilgisayar Teknik Servis</a> tarafından yapılmıştır.",
|
||||
"DualShock Calibration GUI": "DualShock Kalibrasyon Arayüzü",
|
||||
"Connect": "Bağlan",
|
||||
"Connected to:": "Bağlanılan Cihaz:",
|
||||
"Disconnect": "Bağlantıyı Kes",
|
||||
"Calibrate stick center": "Analog Merkezini Kalibre Et",
|
||||
"Calibrate stick range": "Analog Ara Mesafeyi Kalibre Et",
|
||||
"Sections below are not useful, just some debug infos or manual commands": "Aşağıdaki bölümler kullanışlı değildir, sadece bazı hata ayıklama bilgileri veya manuel komutlar içerir",
|
||||
"NVS Status": "NVS Durumu",
|
||||
"Unknown": "Bilinmiyor",
|
||||
"Query NVS status": "NVS Durumunu Sorgula",
|
||||
"NVS unlock": "NVS Kilidini Aç",
|
||||
"NVS lock": "NVS Kilitle",
|
||||
"Stick center calibration": "Analog Merkezi Kalibrasyonu",
|
||||
"Welcome": "Hoş Geldiniz",
|
||||
"Step 1": "1.Adım",
|
||||
"Step 2": "2.Adım",
|
||||
"Step 3": "3.Adım",
|
||||
"Step 4": "4.Adım",
|
||||
"Completed": "Tamamlandı",
|
||||
"Welcome to the stick center-calibration wizard!": "Analog Merkezi Kalibrasyon Sihirbazına Hoş Geldiniz!",
|
||||
"This tool will guide you in re-centering the analog sticks of your controller. It consists of four steps: you will be asked to move both sticks in a direction and release them.": "Bu araç, denetleyicinizin analog çubuklarını yeniden merkezlemekte size rehberlik edecektir. Dört adımdan oluşur: Her iki çubuğu da bir yönde hareket ettirmeniz ve ardından bırakmanız istenecektir.",
|
||||
"Please be aware that, <i>once the calibration is running, it cannot be canceled</i>. Do not close this page or disconnect your controller until it is completed.": "Lütfen bilin ki, <i>kalibrasyon başladığında, iptal edilemez</i>. Tamamlanana kadar bu sayfayı kapatmayın veya denetleyici bağlantısını kesmeyin.",
|
||||
"Press <b>Start</b> to begin calibration.": "Kalibrasyonu başlatmak için <b>Başlat</b> düğmesine basın.",
|
||||
"Please move both sticks to the <b>top-left corner</b> and release them.": "Lütfen her iki analogu <b>sol üst köşeye</b> taşıyın ve bırakın.",
|
||||
"When the sticks are back in the center, press <b>Continue</b>.": "Analoglar tekrar merkezdeyken, <b>Devam</b> düğmesine basın.",
|
||||
"Please move both sticks to the <b>top-right corner</b> and release them.": "Lütfen her iki analogu <b>sağ üst köşeye</b> taşıyın ve bırakın.",
|
||||
"Please move both sticks to the <b>bottom-left corner</b> and release them.": "Lütfen her iki analogu <b>sol alt köşeye</b> taşıyın ve bırakın.",
|
||||
"Please move both sticks to the <b>bottom-right corner</b> and release them.": "Lütfen her iki analogu <b>sağ alt köşeye</b> taşıyın ve bırakın.",
|
||||
"Calibration completed successfully!": "Kalibrasyon başarıyla tamamlandı!",
|
||||
"Next": "İleri",
|
||||
"Recentering the controller sticks.": "Denetleyici analoglarını yeniden merkezleme.",
|
||||
"Please do not close this window and do not disconnect your controller. ": "Lütfen bu pencereyi kapatmayın ve denetleyici bağlantısını kesmeyin. ",
|
||||
"Range calibration": "Ara Mesafe Kalibrasyonu",
|
||||
"The controller is now sampling data!": "Denetleyici şu anda veri örnekleme yapıyor!",
|
||||
"Done": "Tamamlandı",
|
||||
"Hi, thank you for using this software.": "Merhaba, bu yazılımı kullandığınız için teşekkür ederim.",
|
||||
"If you're finding it helpful and you want to support my efforts, feel free to": "Yararlı bulduysanız ve çabalarımı desteklemek istiyorsanız, bana destek olabilirsiniz.",
|
||||
"buy me a coffee": "bana bir kahve alabilirsiniz",
|
||||
"! :)": "! :)",
|
||||
"Do you have any suggestion or issue? Drop me a message via email or discord.": "Herhangi bir öneriniz veya sorunuz var mı? Bana e-posta veya discord üzerinden mesaj atabilirsiniz.",
|
||||
"Cheers!": "Teşekkürler!",
|
||||
"Support this project": "Bu Projeyi Destekle",
|
||||
"unknown": "Bilinmeyen",
|
||||
"original": "Orijinal",
|
||||
"clone": "Yan Sanayi",
|
||||
"locked": "Kilitli",
|
||||
"unlocked": "Kilidi Açık",
|
||||
"error": "Hata",
|
||||
"Build Date": "Derleme Tarihi",
|
||||
"HW Version": "Donanım Sürümü",
|
||||
"SW Version": "Yazılım Sürümü",
|
||||
"Device Type": "Cihaz Türü",
|
||||
"Range calibration completed": "Ara mesafe kalibrasyonu tamamlandı",
|
||||
"Range calibration failed": "Ara mesafe kalibrasyonu başarısız oldu",
|
||||
"Stick calibration failed": "Analog kalibrasyonu başarısız oldu",
|
||||
"Stick calibration completed": "Analog kalibrasyonu tamamlandı",
|
||||
"NVS Lock failed": "NVS kilidi kilitlenemedi",
|
||||
"NVS Unlock failed": "NVS kilidi açılamadı",
|
||||
"Please connect only one controller at time.": "Lütfen sadece bir denetleyici bağlayın.",
|
||||
"Sony DualShock 4 V1": "Sony DualShock 4 V1",
|
||||
"Sony DualShock 4 V2": "Sony DualShock 4 V2",
|
||||
"Sony DualSense": "Sony DualSense",
|
||||
"Sony DualSense Edge": "Sony DualSense Edge",
|
||||
"Connected invalid device": "Geçersiz bir cihaz bağlandı",
|
||||
"The device appears to be a clone. All calibration functionality is disabled.": "Bağladığınız kol yan sanayi, bu nedenle tüm kalibrasyon işlevleri devre dışı bırakıldı.",
|
||||
"Error": "Hata",
|
||||
"Initializing...": "Başlatılıyor...",
|
||||
"Storing calibration...": "Kalibrasyon kaydediliyor...",
|
||||
"Sampling...": "Örnekleme yapılıyor...",
|
||||
"Calibration in progress": "Kalibrasyon devam ediyor",
|
||||
"Start": "Başlat",
|
||||
"Continue": "Devam",
|
||||
"Have a nice day :)": " CzR PS&PC ekibi olarak keyifli oyunlar ve iyi günler dileriz 🎮",
|
||||
"Welcome to the Calibration GUI": "Kalibrasyon Arayüzü'ne hoş geldiniz",
|
||||
"Just few things to know before you can start:": "Başlamadan önce bilmeniz gereken birkaç şey:",
|
||||
"This website is not affiliated with Sony, PlayStation & co.": "Bu web sitesi, Sony, PlayStation ve diğerleri ile ilişkili değildir.",
|
||||
"This service is provided without warranty. Use at your own risk.": "Bu hizmet garanti olmaksızın sunulmaktadır. Kullanım kendi sorumluluğunuzdadır.",
|
||||
"Keep the internal battery of the controller connected and ensure it is well charged. If the battery dies during operations, the controller will be damaged and rendered unusable.": "Denetleyicinin dahili bataryasını bağlı tutun ve iyi şarj edildiğinden emin olun. İşlemler sırasında pil biterse, denetleyici zarar görecektir ve kullanılamaz hale gelecektir.",
|
||||
"Before doing the permanent calibration, try the temporary one to ensure that everything is working well.": "Kalıcı kalibrasyonu yapmadan önce, her şeyin iyi çalıştığından emin olmak için geçici bir kalibrasyon yapın.",
|
||||
"Understood": "Anlaşıldı",
|
||||
"Version": "Sürüm",
|
||||
"Frequently Asked Questions": "Sıkça Sorulan Sorular",
|
||||
"Close": "Kapat",
|
||||
"Welcome to the F.A.Q. section! Below, you'll find answers to some of the most commonly asked questions about this website. If you have any other inquiries or need further assistance, feel free to reach out to me directly. Your feedback and questions are always welcome!": "Sıkça Sorulan Sorular bölümüne hoş geldiniz! Aşağıda, bu web sitesi hakkında en sık sorulan soruların cevaplarını bulacaksınız. Başka sorularınız varsa veya daha fazla yardıma ihtiyacınız varsa, doğrudan bana ulaşmaktan çekinmeyin. Geri bildiriminiz ve sorularınız her zaman hoş geldiniz!",
|
||||
"How does it work?": "Nasıl çalışır?",
|
||||
"Behind the scenes, this website is the culmination of one year of dedicated effort in reverse-engineering DualShock controllers for fun/hobby from a random guy on the internet.": "Arka planda, bu web sitesi, internette rastgele birinden eğlence/hobi için DualShock denetleyicilerini ters mühendislikle bir yıl boyunca çalışan birinin çabalarının sonucudur.",
|
||||
"Through": "Aracılığıyla",
|
||||
"this research": "bu araştırma",
|
||||
", it was discovered that there exist some undocumented commands on DualShock controllers that can be sent via USB and are used during factory assembly process. If these commands are sent, the controller starts the recalibration of analog sticks.": ", DualShock denetleyicilerinde USB aracılığıyla gönderilebilen ve fabrika montaj sürecinde kullanılan belgelenmemiş bazı komutların var olduğu keşfedildi. Bu komutlar gönderildiğinde, denetleyici analog çubukların yeniden kalibrasyonunu başlatır.",
|
||||
"While the primary focus of this research wasn't initially centered on recalibration, it became apparent that a service offering this capability could greatly benefit numerous individuals. And thus, here we are.": "Bu araştırmanın asıl odak noktası başlangıçta yeniden kalibrasyon üzerinde olmasa da, bu yeteneği sunan bir hizmetin birçok kişiye büyük fayda sağlayabileceği açık hale geldi. Ve böylece, işte buradayız.",
|
||||
"Is this an officially endorsed service?": "Bu resmi olarak onaylanmış bir hizmet mi?",
|
||||
"No, this service is simply a creation by a DualShock enthusiast.": "Hayır, bu hizmet sadece bir DualShock hayranı tarafından oluşturulmuştur.",
|
||||
"Does this website detect if a controller is a clone?": "Bu web sitesi bir denetleyicinin bir kopya olup olmadığını algılar mı?",
|
||||
"Yes, only DualShock4 at the moment. This happened because I accidentally purchased some clones, spent time identifying the differences and added this functionality to prevent future deception.": "Evet, şu anda sadece DualShock4. Bu, yanlışlıkla bazı kopyalar satın aldım, farkları belirlemek için zaman harcadım ve gelecekteki aldatmaları önlemek için bu işlevi ekledim.",
|
||||
"Unfortunately, the clones cannot be calibrated anyway, because they only clone the behavior of a DualShock4 during normal gameplay, not all the undocumented functionalities.": "Maalesef, kopyalar zaten kalibre edilemez, çünkü sadece normal bir oyun sırasında DualShock4'ün davranışını kopyalarlar, belgelenmemiş tüm işlevleri değil.",
|
||||
"If you want to extend this detection functionality to DualSense, please ship me a fake DualSense and you'll see it in few weeks.": "Bu algılama işlevselliğini DualSense'e genişletmek istiyorsanız, lütfen bana sahte bir DualSense gönderin ve birkaç hafta içinde göreceksiniz.",
|
||||
"What development is in plan?": "Planlanan geliştirme nedir?",
|
||||
"I maintain two separate to-do lists for this project, although the priority has yet to be established.": "Bu proje için henüz öncelik belirlenmemiş olmasına rağmen, iki ayrı yapılacaklar listesi tutuyorum.",
|
||||
"The first list is about enhancing support for DualShock4 and DualSense controllers:": "İlk liste, DualShock4 ve DualSense denetleyicileri için destek geliştirmeyi içerir:",
|
||||
"Implement calibration of L2/R2 triggers.": "L2/R2 tetiklerinin kalibrasyonunu uygula.",
|
||||
"Improve detection of clones, particularly beneficial for those seeking to purchase used controllers with assurance of authenticity.": "Klonların tespitini iyileştir, özellikle kullanılmış denetleyicilerin orijinalliği konusunda güvence arayanlar için faydalı olur.",
|
||||
"Add support for recalibrating IMUs.": "IMU'ların yeniden kalibre edilmesini destekle.",
|
||||
"Additionally, explore the possibility of reviving non-functioning DualShock controllers (further discussion available on Discord for interested parties).": "Ayrıca, çalışmayan DualShock denetleyicilerinin yeniden canlandırma olasılığını araştır (ilgilenen taraflar için Discord'da daha fazla tartışma mevcuttur).",
|
||||
"The second list contains new controllers I aim to support:": "İkinci liste, desteklemeyi amaçladığım yeni denetleyicileri içerir:",
|
||||
"DualShock 3": "DualShock 3",
|
||||
"XBox Controllers": "Xbox Denetleyicileri",
|
||||
"Each of these tasks presents both immense interest and significant time investment. To provide context, supporting a new controller typically demands 6-12 months of full-time research, alongside a stroke of good fortune.": "Bu görevlerin her biri hem büyük bir ilgi hem de önemli bir zaman yatırımı gerektirir. Bir bağlam sağlamak için, genellikle yeni bir denetleyiciyi desteklemek için tam zamanlı olarak 6-12 ay araştırma yapmak ve biraz şans gereklidir.",
|
||||
"I love this service, it helped me! How can I contribute?": "Bu hizmeti seviyorum, bana yardımcı oldu! Nasıl katkıda bulunabilirim?",
|
||||
"I'm glad to hear that you found this helpful! If you're interested in contributing, here are a few ways you can help me:": "Bunu faydalı bulduğunuza sevindim! Katkıda bulunmak istiyorsanız, size yardımcı olabileceğiniz birkaç yol:",
|
||||
"Consider making a": "Şu anda ",
|
||||
"donation": "bağış",
|
||||
"to support my late-night caffeine-fueled reverse-engineering efforts.": "desteklemek için bağış yapmayı düşünebilirsiniz.",
|
||||
"Ship me a controller you would love to add (send me an email for organization).": "Eklemek istediğiniz bir denetleyiciyi var ise bana gönderin (organizasyon için bana bir e-posta gönderin).",
|
||||
"Translate this website in your language": "Bu web sitesini kendi dilinize çevirin",
|
||||
", to help more people like you!": ", sizin gibi daha fazla insanın faydalanması için!",
|
||||
"This website uses analytics to improve the service.": "Bu web sitesi hizmeti iyileştirmek için analiz kullanıyor.",
|
||||
"Board Model": "Kart Modeli",
|
||||
"This DualSense controller has outdated firmware.": "Bu DualSense denetleyicisinin yazılımı güncel değil.",
|
||||
"Please update the firmware and try again.": "Lütfen yazılımı güncelleyin ve tekrar deneyin.",
|
||||
"Joystick Info": "Joystick Bilgisi",
|
||||
"Check circularity": "Daireselliği Kontrol Et",
|
||||
"No.": "Hayır.",
|
||||
"Does this software resolve stickdrift?": "Bu yazılım analog kaydırma sorununu çözer mi?",
|
||||
"Stickdrift is caused by a physical defect; namely dirt, worn potentiometer or in some cases a worn spring.": "Analog kaydırması fiziksel bir arızadan kaynaklanır; kir, aşınmış potansiyometre veya bazı durumlarda aşınmış bir yaydan.",
|
||||
"After range calibration, joysticks always go in corners.": "Ara mesafe kalibrasyonundan sonra, analoglar her zaman köşeye gidiyor.",
|
||||
"This issue happens because you have clicked \"Done\" immediately after starting a range calibration.": "Bu sorun, ara mesafe kalibrasyonuna başladıktan hemen sonra \"Tamam\" butonuna bastığınız için meydana gelir.",
|
||||
"Please read the instructions.": "Lütfen talimatları okuyun.",
|
||||
"You have to rotate the joysticks before you press \"Done\".": "\"Tamam\" butonuna basmadan önce joystickleri döndürmelisiniz.",
|
||||
"Make sure to touch the edges of the joystick frame and rotate slowly, preferably in each direction - clockwise and anti-clockwise.": "Analog çerçevesinin kenarlarına dokunduğunuzdan emin olun ve yavaşça döndürün; tercihen her iki yönde - hem saat yönünde, hem saat yönünün tersine.",
|
||||
"Only after you have done that, you click on \"Done\".": "Ancak bunu yaptıktan sonra \"Tamam\" butonuna basmalısınız.",
|
||||
"Changes saved successfully": "Değişiklikler başarıyla kaydedildi.",
|
||||
"Error while saving changes": "Değişiklikleri kaydederken hata:",
|
||||
"Save changes permanently": "Değişiklikleri Kalıcı Olarak Kaydet",
|
||||
"Reboot controller": "Denetleyiciyi Yeniden Başlat",
|
||||
"(beta)": "(beta)",
|
||||
"30th Anniversary": "30. Yıl Dönümü",
|
||||
"<b>Externally</b>: by applying +1.8V directly to the visible test point without opening the controller.": "<b>Harici olarak</b>: Denetleyiciyi açmadan görünür test noktasına doğrudan +1.8V uygulayarak",
|
||||
"<b>Internally</b>: by soldering a wire from a +1.8V source to the write-protect TP.": "<b>Dahili olarak</b>: +1.8V bir kaynaktan yazma koruma TP'sine bir kablo lehimleyerek.",
|
||||
"Astro Bot": "Astro Bot",
|
||||
"Battery Barcode": "Batarya Barkodu",
|
||||
"Bluetooth Address": "Bluetooth Adresi",
|
||||
"Calibration is being stored in the stick modules.": "Kalibrasyon, analog modüllerine kaydediliyor.",
|
||||
"Cancel": "İptal",
|
||||
"Cannot lock": "Kilitlenemiyor",
|
||||
"Cannot store data into": "Veri kaydedilemiyor",
|
||||
"Cannot unlock": "Kilit açılamıyor",
|
||||
"Chroma Indigo": "Kroma İndigo",
|
||||
"Chroma Pearl": "Kroma İnci",
|
||||
"Chroma Teal": "Kroma Turkuaz",
|
||||
"Cobalt Blue": "Kobalt Mavisi",
|
||||
"Color": "Renk",
|
||||
"Controller Info": "Denetleyici Bilgisi",
|
||||
"Cosmic Red": "Kozmik Kırmızı",
|
||||
"Debug Info": "Hata Ayıklama Bilgisi",
|
||||
"Debug buttons": "Hata ayıklama düğmeleri",
|
||||
"DualSense Edge Calibration": "DualSense Edge Kalibrasyonu",
|
||||
"FW Build Date": "FW Derleme Tarihi",
|
||||
"FW Series": "FW Serisi",
|
||||
"FW Type": "FW Türü",
|
||||
"FW Update": "FW Güncellemesi",
|
||||
"FW Update Info": "FW Güncelleme Bilgisi",
|
||||
"FW Version": "FW Sürümü",
|
||||
"Finetune stick calibration": "Analog Kalibrasyonunu İnce Ayarla",
|
||||
"For more info or help, feel free to reach out on Discord.": "Daha fazla bilgi veya yardım için Discord üzerinden ulaşabilirsiniz.",
|
||||
"Fortnite": "Fortnite",
|
||||
"Galactic Purple": "Galaktik Mor",
|
||||
"God of War Ragnarok": "God of War Ragnarok",
|
||||
"Grey Camouflage": "Gri Kamuflaj",
|
||||
"HW Model": "HW Modeli",
|
||||
"Hardware": "Donanım",
|
||||
"If the calibration is not stored permanently, please double-check the wirings of the hardware mod.": "Kalibrasyon kalıcı olarak kaydedilmezse, lütfen donanım modunun kablolamasını iki kez kontrol edin.",
|
||||
"Left Module Barcode": "Sol Modül Barkodu",
|
||||
"Left stick": "Sol Analog",
|
||||
"MCU Unique ID": "MCU Benzersiz Kimliği",
|
||||
"Midnight Black": "Gece Yarısı Siyahı",
|
||||
"More details and images": "Daha fazla detay ve görsel",
|
||||
"Nova Pink": "Nova Pembe",
|
||||
"PCBA ID": "PCBA Kimliği",
|
||||
"Please note: the stick modules on the DS Edge <b>cannot be calibrated via software alone</b>.": "Lütfen dikkat: DS Edge üzerindeki analog modülleri <b>yalnızca yazılım aracılığıyla kalibre edilemez</b>.",
|
||||
"To store a custom calibration on the stick's internal memory, a <b>hardware modification</b> is required.": "Özelleştirilmiş bir kalibrasyonu analogun dahili belleğine kaydetmek için bir <b>donanım değişikliği</b> gereklidir.",
|
||||
"Right Module Barcode": "Sağ Modül Barkodu",
|
||||
"Right stick": "Sağ Analog",
|
||||
"SBL FW Version": "SBL FW Sürümü",
|
||||
"Serial Number": "Seri Numarası",
|
||||
"Show all": "Tümünü Göster",
|
||||
"Software": "Yazılım",
|
||||
"Spider FW Version": "Örümcek FW Sürümü",
|
||||
"Spider-Man 2": "Örümcek-Adam 2",
|
||||
"Starlight Blue": "Yıldız Işığı Mavisi",
|
||||
"Sterling Silver": "Gümüş",
|
||||
"Support for calibrating DualSense Edge stick modules is now available as an <b>experimental feature</b>.": "DualSense Edge analog modüllerinin kalibrasyonuna destek, artık <b>deneysel bir özellik</b> olarak mevcuttur.",
|
||||
"The Last of Us": "The Last of Us",
|
||||
"This involves temporarily disabling write protection by applying <b>+1.8V</b> to a specific test point on each module.": "Bu, her modül üzerindeki belirli bir test noktasına <b>+1.8V</b> uygulayarak yazma korumasını geçici olarak devre dışı bırakmayı içerir.",
|
||||
"This is only for advanced users. If you're not sure what you're doing, please do not attempt it.": "Bu sadece ileri düzey kullanıcılar içindir. Ne yaptığınızdan emin değilseniz, lütfen denemeyin.",
|
||||
"Touchpad FW Version": "Dokunmatik Yüzey FW Sürümü",
|
||||
"Touchpad ID": "Dokunmatik Yüzey Kimliği",
|
||||
"VCM Left Barcode": "VCM Sol Barkodu",
|
||||
"VCM Right Barcode": "VCM Sağ Barkodu",
|
||||
"Venom FW Version": "Venom FW Sürümü",
|
||||
"Volcanic Red": "Volkanik Kırmızı",
|
||||
"We are not responsible for any damage caused by attempting this modification.": "Bu modifikasyonu denemenin neden olduğu herhangi bir hasardan sorumlu değiliz.",
|
||||
"White": "Beyaz",
|
||||
"You can do this in two ways:": "Bunu iki şekilde yapabilirsiniz:",
|
||||
"here": "burada",
|
||||
"left module": "Sol Modül",
|
||||
"right module": "Sağ Modül",
|
||||
"10x zoom": "10x Yakınlaştırma",
|
||||
"Calibration": "KALİBRASYON",
|
||||
"Debug": "HATA AYIKLAMA",
|
||||
"Info": "BİLGİ",
|
||||
"Normal": "Normal",
|
||||
"Center (L1)": "Merkez (L1)",
|
||||
"Circularity (R1)": "Dairesellik (R1)",
|
||||
"Move the stick to select it for tuning, then without touching the stick use the D-pad buttons to adjust the center point. Flick it and adjust it again if it is off center or flickers.": "Analoğu ayar için seçin, ardından analoğa dokunmadan yön tuşlarını kullanarak merkez noktasını ayarlayın. Analoğu hafifçe oynatın, merkezden kaymışsa veya titreme oluyorsa tekrar ayarlayın.",
|
||||
"Please release the stick to center position before adjusting with D-pad buttons.": "Lütfen yön tuşlarıyla ayarlamadan önce analoğu merkez konumuna bırakın.",
|
||||
"Press the D-pad or face buttons in the direction you want the stick position to move.": "Analoğun konumunu hareket ettirmek istediğiniz yöne (⬆️ ⬇️ ⬅️ ➡️) veya (△, ☐, O, ✕) tuşlarına basarak ayarlayın.",
|
||||
"Push the stick straight up/down/left/right as far as possible.": "Analoğu mümkün olduğunca yukarı/aşağı/sola/sağa itin.",
|
||||
"Show raw numbers": "Ham değerleri göster",
|
||||
"The device is connected via Bluetooth. Disconnect and reconnect using a USB cable instead.": "Cihaz Bluetooth üzerinden bağlı. Bunun yerine bağlantıyı kesip USB kablosu ile yeniden bağlayın.",
|
||||
"Your device might not be a genuine Sony controller. If it is not a clone then please report this issue.": "Cihazınız orijinal Sony kolu olmayabilir. Eğer yan sanayi değilse lütfen bu sorunu bildirin.",
|
||||
"<strong>Average circularity error:</strong> smaller is not always better! Aim for 7-9 %.": "<strong>Ortalama dairesellik hatası:</strong> %7–9 aralığını hedefleyin.Daha küçük olması her zaman iyi değildir!",
|
||||
"A reboot is needed to continue using this DualSense Edge. Please disconnect and reconnect your controller.": "Bu DualSense Edge'i kullanmaya devam etmek için yeniden başlatma gereklidir. Lütfen kontrol cihazınızı çıkarıp yeniden bağlayın.",
|
||||
"Adaptive Trigger": "Uyarlanabilir Tetik",
|
||||
"Adaptive triggers are only supported on DualSense controllers": "Uyarlanabilir tetikler yalnızca DualSense kontrol cihazlarında desteklenir.",
|
||||
"Add test": "Test ekle",
|
||||
"Be gentle to avoid damage.": "Hasar oluşmaması için dikkatli olun.",
|
||||
"Buttons": "Tuşlar",
|
||||
"Center": "Merkez",
|
||||
"Circularity": "Dairesellik",
|
||||
"Controller does not support adaptive trigger control": "Bu kontrol cihazı uyarlanabilir tetik kontrolünü desteklemiyor.",
|
||||
"Don't show again": "Bir daha gösterme",
|
||||
"Fail": "Başarısız",
|
||||
"Failed": "Başarısız Oldu",
|
||||
"Failed to connect to device": "Cihaza bağlanılamadı",
|
||||
"Failed to disable adaptive trigger": "Uyarlanabilir tetik devre dışı bırakılamadı",
|
||||
"Failed to set speaker tone": "Hoparlör sesi ayarlanamadı",
|
||||
"Failed to set vibration": "Titreşim ayarlanamadı",
|
||||
"Feel for vibration in the controller.": "Kontrol cihazındaki titreşimi hissedin.",
|
||||
"Haptic Vibration": "Dokunsal Titreşim",
|
||||
"Headphone Jack": "Kulaklık Girişi",
|
||||
"Increase non-circularity": "Dairesellikten Sapmayı Artır",
|
||||
"Instructions": "Talimatlar",
|
||||
"Keep rotating the sticks even if you see no progress!": "İlerleme görmeseniz bile analogları döndürmeye devam edin!",
|
||||
"Learn more...": "Daha fazla bilgi...",
|
||||
"Lights": "Işıklar",
|
||||
"Listen for a tone from the controller speaker.": "Kontrol cihazı hoparlöründen gelen sesi dinleyin.",
|
||||
"Long-press [circle] to skip ahead.": "[circle] tuşuna uzun basarak atla.",
|
||||
"Microphone": "Mikrofon",
|
||||
"Microphone Level:": "Mikrofon Seviyesi:",
|
||||
"No controller connected": "Bağlı kontrol cihazı yok",
|
||||
"No tests completed yet.": "Henüz hiçbir test tamamlanmadı.",
|
||||
"Not tested": "Test Edilmedi",
|
||||
"Pass": "Geç",
|
||||
"Passed": "Geçti",
|
||||
"Plug in headphones to the 3.5mm jack": "Kulaklığı 3.5 mm girişe takın",
|
||||
"Press L2 and R2 triggers to feel the trigger resistance.": "Tetik direncini hissetmek için L2 ve R2 tuşlarına basın.",
|
||||
"Press [circle] to close, or [square] to start over": "[circle] ile Kapatın veya [square] ile Yeniden Başlayın",
|
||||
"Press [square] to Pass, [cross] to Fail, or [circle] to skip.": "[square] ile Geç, [cross] ile Başarısız, [circle] ile Atla.",
|
||||
"Press [square] to begin or [circle] to close": "[square] ile Başlatın veya [circle] ile Kapatın",
|
||||
"Press [triangle] to go back.": "[triangle] ile Geri Dönün.",
|
||||
"Press each button until they turn green.": "Her bir tuşa yeşil olana kadar basın.",
|
||||
"Progress": "İlerleme",
|
||||
"Quick Test": "Hızlı Test",
|
||||
"Quick calibrate": "Hızlı Kalibrasyon",
|
||||
"Range calibration appears to have failed. Please try again and make sure you rotate the sticks.": "Analog ara mesafe kalibrasyonu başarısız gibi görünüyor. Lütfen yeniden deneyin ve analogları döndürdüğünüzden emin olun",
|
||||
"Repeat": "Tekrar Et",
|
||||
"Restart": "Yeniden Başlat",
|
||||
"Rotate the sticks slowly at least 2 times in one direction and 2 times in the other direction to cover the whole range.": "Analogları yavaşça en az iki kez bir yöne ve iki kez diğer yöne çevirerek tüm aralığı kapsayın.",
|
||||
"Run through these tests to verify your controller's functionality.": "Kontrol cihazınızın işlevselliğini doğrulamak için bu testleri gerçekleştirin.",
|
||||
"Sony controllers come from the factory calibrated to have an average circularity error of nearly 10 %, and this is now what games expect. Too perfect circularity can make movements and aim feel stiff and unresponsive in some games.": "Sony kontrol cihazları fabrikadan yaklaşık %10 ortalama dairesellik hatasıyla kalibre edilmiş olarak gelir ve oyunlar artık bunu bekler. Çok mükemmel dairesellik, bazı oyunlarda hareketleri ve nişan almayı sert ve tepkisiz hissettirebilir.",
|
||||
"Speaker": "Hoparlör",
|
||||
"Step size": "Adım boyutu",
|
||||
"Test Speaker": "Hoparlörü Test Et",
|
||||
"Test Summary": "Test Özeti",
|
||||
"Test all buttons, or long-press [square] to Pass and [cross] to Fail, or [circle] to skip.": "Tüm tuşları test edin veya [square] tuşuna uzun basarak Geçin, [cross] tuşuna uzun basarak Başarısız, [circle] ile atlayın.",
|
||||
"The <b>Done</b> button will unlock after at most 15 seconds. If you press <b>Done</b> without rotating the sticks, the calibration will be incomplete and you will need to repeat it.": "<b>Bitti</b> düğmesi en fazla 15 saniye sonra etkinleşecektir. Analogları döndürmeden <b>Bitti</b>ye basarsanız kalibrasyon eksik olur ve tekrarlamanız gerekir.",
|
||||
"This test checks all controller buttons by requiring you to press each button up to three times.": "Bu test, her bir tuşa en fazla üç kez basmanızı isteyerek tüm tuşları kontrol eder.",
|
||||
"This test checks the headphone jack functionality.": "Bu test, kulaklık girişinin işlevselliğini kontrol eder.",
|
||||
"This test checks the reliability of the USB port.": "Bu test, USB portunun güvenilirliğini kontrol eder.",
|
||||
"This test will cycle through red, green, and blue colors on the controller lightbar, animate the player indicator lights, and flash the mute button.": "Bu testte kontrol cihazının ışık çubuğunda kırmızı, yeşil ve mavi renkler sırasıyla gösterilir, oyuncu göstergesi ışıkları animasyonlu yanar ve sessiz düğmesi yanıp söner.",
|
||||
"This test will enable heavy resistance on both L2 and R2 triggers.": "Bu testte L2 ve R2 tetiklerinde yüksek direnç etkinleştirilir.",
|
||||
"USB Connector": "USB Bağlantı Noktası",
|
||||
"Watch the controller lights change colors, the player lights animate, and the mute button flash.": "Kontrol cihazı ışıklarının renk değiştirmesini, oyuncu ışıklarının animasyon yapmasını ve sessiz düğmesinin yanıp sönmesini izleyin.",
|
||||
"While holding the stick to be adjusted straight up/down/left/right, make adjustments until you see lightblue sectors in all four directions after circling the stick both left and right. Then use the": "Ayarlanacak analoğu yukarı/aşağı/sol/sağ konumda tutarken, analoğu hem sola hem sağa çevirdikten sonra dört yönde açık mavi alanlar görene kadar ayarlamalar yapın. Ardından şunu kullanın:",
|
||||
"Wiggle the USB cable to see if the controller disconnects.": "Kontrol cihazının bağlantısının kopup kopmadığını görmek için USB kablosunu hafifçe oynatın.",
|
||||
"failed": "Başarısız",
|
||||
"hide": "Gizle",
|
||||
"passed": "Geçti",
|
||||
"skipped": "Atlanmış",
|
||||
"tests completed": "Tamamlanan Testler",
|
||||
"to increase the non-circularity.": "Dairesellikten sapmayı artırmak için.",
|
||||
"Please connect a DualShock 4, a DualSense, DualSense Edge or VR2 controller to your computer and press Connect.": "Lütfen bir DualShock 4, DualSense, DualSense Edge veya VR2 kontrolcüsünü bilgisayarınıza bağlayın ve ‘Bağlan’ butonuna basın.",
|
||||
"Cannot copy text to the clipboard:": "Metin panoya kopyalanamıyor:",
|
||||
"The item has been copied to the clipboard.": "Öğe panoya kopyalandı.",
|
||||
"After they have been replaced, this utility can be used to calibrate the controller to work with the new joysticks.": "Değiştirildikten sonra, bu araç kontrolcüyü yeni analoglarla çalışacak şekilde kalibre etmek için kullanılır.",
|
||||
"Aim for a circularity error of around 7-9 % for the best playing experience.": "En iyi oyun deneyimi için yaklaşık %7–9 arası dairesellik hatasını hedefleyin.",
|
||||
"Battery level is low. Tests may fail due to the controller being in power saving mode.": "Pil seviyesi düşük. Kontrolcü güç tasarruf modunda olduğu için testler başarısız olabilir.",
|
||||
"Calibrating without replacing the joysticks may help temporarily, but it may also make the problem worse, with no way to undo it.": "Analogları değiştirmeden kalibrasyon yapmak geçici olarak yardımcı olabilir, ancak sorunu daha da kötüleştirebilir ve geri dönüşüde mümkün olmayabilir.CzR PS&PC ekibi olarak dikkate almanızı öneririz",
|
||||
"Calibration History": "Kalibrasyon Geçmişi",
|
||||
"Cannot read module barcodes": "Modül barkodları okunamıyor",
|
||||
"Clear All": "Tümünü Temizle",
|
||||
"Current": "Mevcut",
|
||||
"Delete": "Sil",
|
||||
"Delete all calibration history for this controller? This cannot be undone.": "Bu kontrolcüye ait tüm kalibrasyon geçmişi silinsin mi? Bu işlem geri alınamaz.",
|
||||
"Delete this calibration entry?": "Bu kalibrasyon kaydı silinsin mi?",
|
||||
"Drift is caused by mechanical parts in the joystick being worn out, and they need to be replaced to fix the drift.": "Drift sorunu analog mekanizmasının aşınmasından kaynaklanır ve sorunun çözülmesi için analog mekanizmasının değiştirilmesi gerekir.",
|
||||
"Firefox is supported with the WebHID extension installed.": "WebHID eklentisi yüklü olduğunda Firefox desteklenir.",
|
||||
"It appears the latest joystick calibration has not been saved.": "En son analog kalibrasyonu kaydedilmemiş görünüyor.",
|
||||
"Last connected": "Son Bağlanan Kontrolcü",
|
||||
"No saved calibrations found.": "Kayıtlı kalibrasyon bulunamadı.",
|
||||
"Please use a web browser with WebHID support (e.g. Google Chrome or Microsoft Edge) on a PC or Mac.": "Lütfen PC veya Mac üzerinde WebHID destekli bir web tarayıcısı kullanın (ör. Google Chrome veya Microsoft Edge).",
|
||||
"Restore": "Geri Yükle",
|
||||
"Restore calibration": "Kalibrasyonu Geri Yükle",
|
||||
"The calibration was restored successfully! Remember to save the changes in order not to loose them when the controller is rebooted.": "Kalibrasyon başarıyla geri yüklendi! Kontrolcü yeniden başlatıldığında kaybolmaması için değişiklikleri kaydetmeyi unutmayın.",
|
||||
"This controller has unsaved changes that will be lost when the controller is rebooted.": "Bu kontrolcüde kaydedilmemiş değişiklikler var. Kontrolcü yeniden başlatıldığında bu değişiklikler kaybolacaktır.",
|
||||
"This utility cannot fix stick drift.": "Bu araç analog drift sorununu gideremez.",
|
||||
"Unsupported browser.": "Desteklenmeyen tarayıcı.",
|
||||
"Use expert mode": "Uzman modunu kullan",
|
||||
"Use four-step calibration": "Dört adımlı kalibrasyonu kullan",
|
||||
"Use normal mode": "Normal modu kullan",
|
||||
"Use quick calibration": "Hızlı kalibrasyonu kullan",
|
||||
"Using this utility on a phone or tablet is not supported.": "Bu araç telefon veya tablet üzerinde kullanımı desteklenmez.",
|
||||
"Values": "Değerler",
|
||||
"You should save your changes, or reboot the controller to revert back to the previous state.": "Değişiklikleri kaydetmeli ya da önceki duruma dönmek için kontrolcüyü yeniden başlatmalısınız.",
|
||||
"serial number": "Kontrolcünün Seri Numarası",
|
||||
"(DualSense & DualSense Edge) Will updating the firmware reset calibration?": "(DualSense ve DualSense Edge) Donanım yazılımını güncellemek kalibrasyonu sıfırlar mı?",
|
||||
"(DualSense Edge) Is the calibration stored on the controller or the modules?": "(DualSense Edge) Kalibrasyon kontrolcüde mi, analog modüllerinde mi saklanır?",
|
||||
"A sample test was done with 30 dualsense edge modules, and the results showed that the inner quartile range (IQR) is 8.3% and 9.0%, with an average of 8.6%. This goes to show that stock controllers by default have a relatively high range, and the rule of thumb is to follow factory calibration.": "30 DualSense Edge modülüyle yapılan örnek bir testte, iç çeyrek aralığının (IQR) %8,3 ile %9,0 arasında, ortalamanın ise %8,6 olduğu görüldü. Bu sonuç, fabrika çıkışlı kontrolcülerin varsayılan olarak nispeten yüksek bir aralığa sahip olduğunu ve genel kural olarak fabrika kalibrasyonunun takip edilmesi gerektiğini gösterir.",
|
||||
"Can I overwrite a (permanent) calibration?": "Kalıcı bir kalibrasyonun üzerine yazabilir miyim?",
|
||||
"Can I restore a previous calibration?": "Önceki bir kalibrasyonu geri yükleyebilir miyim?",
|
||||
"Finetuning is only available for DualSense and DualSense Edge.": "İnce ayar yalnızca DualSense ve DualSense Edge için kullanılabilir.",
|
||||
"God of War 20th Anniversary": "God of War 20. Yıl Dönümü",
|
||||
"Housing": "Kasa",
|
||||
"How do I use the finetuning feature?": "İnce ayar özelliğini nasıl kullanırım?",
|
||||
"If you don't have a battery connected or the connected battery is empty, AND your cable disconnects during saving the calibration, then your controller has a high chance of being bricked.": "Batarya bağlı değilse veya bağlı batarya boşsa VE kalibrasyon kaydedilirken kablo bağlantısı kesilirse, kontrolcünüzün kullanılamaz hâle gelme ihtimali yüksektir.",
|
||||
"If you have not clicked the green button \"Save changes permanently\", then unplugging the controller will reset to the previously saved calibration. It is recommended you test your calibration before saving.": "Yeşil \"Değişiklikleri Kalıcı Olarak Kaydet\" düğmesine tıklamadıysanız, kontrolcünün bağlantısını kestiğinizde daha önce kaydedilmiş kalibrasyona geri dönülür. Kaydetmeden önce kalibrasyonu test etmeniz önerilir.",
|
||||
"If you have saved the changes permanently, you can reset the changes only if you are using a DualSense or DualSense Edge. You can click on the grey button \"Restore Calibration\" to go back to one of the previous calibrations that was saved on the controller. Known issue: You may need to reboot your controller first in order for previous calibrations to show up.": "Değişiklikleri kalıcı olarak kaydettiyseniz, yalnızca DualSense veya DualSense Edge kullanıyorsanız değişiklikleri geri alabilirsiniz. Kontrolcüye kaydedilen önceki kalibrasyonlardan birine dönmek için gri \"Kalibrasyonu Geri Yükle\" düğmesine tıklayabilirsiniz. Bilinen sorun: Önceki kalibrasyonların görünmesi için önce kontrolcünüzü yeniden başlatmanız gerekebilir.",
|
||||
"Image 1": "Görsel 1",
|
||||
"Images": "Görseller",
|
||||
"In most cases, calibrating your joysticks that have prior drift issues may result in a worse and unpredictable calibration.": "Çoğu durumda, daha önce drift sorunu yaşayan analogları kalibre etmek daha kötü ve öngörülemez bir kalibrasyona yol açabilir.",
|
||||
"Not shown in the video: You can now also increase the range in each direction uniformly by using the cross in the top right and moving the slider up, which may speed up finetuning. Make sure to rotate the joystick first, otherwise the button cannot be pressed.": "Videoda gösterilmeyen bir özellik: Artık sağ üstteki artı işaretini kullanıp kaydırıcıyı yukarı taşıyarak her yöndeki aralığı eşit miktarda artırabilirsiniz. Bu, ince ayarı hızlandırabilir. Önce analoğu döndürdüğünüzden emin olun; aksi hâlde düğmeye basılamaz.",
|
||||
"Only official controllers are supported, no third-party or \"fake\" controllers.": "Yalnızca orijinal kontrolcüler desteklenir; üçüncü taraf veya \"yan sanayi\" kontrolcüler desteklenmez.",
|
||||
"Option 1": "Seçenek 1",
|
||||
"Option 2": "Seçenek 2",
|
||||
"PlayStation Virtual Reality 2": "PlayStation Virtual Reality 2",
|
||||
"Saving calibration is locked by default on DualSense Edge joystick modules. A hardware mod is required to save the calibration permanently. The calibration is saved on the modules themselves, so you have to perform the mod twice: once for each module. You would need to bridge two points on the PCB with enamelled wire. There are multiple methods, I personally recommend using either of these two locations to solder the wire to. See images below. Ensure the wire is thin enough so that the shell is closed properly. Make sure you don't short the wire to ground through the letters near the bottom joint.": "DualSense Edge analog modüllerinde kalibrasyon kaydı varsayılan olarak kilitlidir. Kalibrasyonu kalıcı olarak kaydetmek için donanım modifikasyonu gerekir. Kalibrasyon modüllerin kendi üzerine kaydedildiğinden, modifikasyonu her modül için bir kez olmak üzere iki kez yapmanız gerekir. PCB üzerindeki iki noktayı emaye kaplı kabloyla köprülemeniz gerekir. Birden fazla yöntem vardır; kabloyu lehimlemek için şahsen bu iki konumdan birini öneriyorum. Aşağıdaki görsellere bakın. Kasanın düzgün kapanabilmesi için kablonun yeterince ince olduğundan emin olun. Alt bağlantı noktasının yakınındaki harfler üzerinden kabloyu şasiye kısa devre ettirmediğinizden emin olun.",
|
||||
"Sony DualShock 4": "Sony DualShock 4",
|
||||
"The calibration is stored on each module individually. It is carried over if you place the modules in a different DualSense Edge. Likewise, if you place a different set of modules in your DualSense Edge, you will get a different calibration that is tied to those new modules.": "Kalibrasyon her modülde ayrı ayrı saklanır. Modülleri farklı bir DualSense Edge'e taktığınızda kalibrasyon da modüllerle birlikte taşınır. Aynı şekilde, DualSense Edge'e farklı bir modül seti takarsanız bu yeni modüllere bağlı farklı bir kalibrasyon kullanılır.",
|
||||
"The finetuning and quick test menus are only accessible for DualSense and DualSense Edge.": "İnce ayar ve hızlı test menülerine yalnızca DualSense ve DualSense Edge ile erişilebilir.",
|
||||
"The website supports the following official controllers:": "Web sitesi şu orijinal kontrolcüleri destekler:",
|
||||
"These previous calibrations are stored locally in your browser's storage. Meaning you can only restore calibrations using the same computer and browser that you used to calibrate it with, and deleting the cache or using Incognito will make any previous calibration irrecoverable.": "Önceki kalibrasyonlar tarayıcınızın yerel depolama alanında saklanır. Bu nedenle kalibrasyonları yalnızca kalibrasyonu yaptığınız aynı bilgisayar ve tarayıcı üzerinden geri yükleyebilirsiniz. Önbelleği silmek veya Gizli Mod'u kullanmak, önceki kalibrasyonları geri getirilemez hâle getirir.",
|
||||
"This software is not intended to fix stickdrift and will <b>not</b> fix stickdrift on its own if you already experience that.": "Bu yazılım analog drift sorununu gidermek için tasarlanmamıştır ve bu sorunu zaten yaşıyorsanız tek başına <b>gidermez</b>.",
|
||||
"This video from V2.16 shows how to use the finetuning menu.": "V2.16 sürümündeki bu video, ince ayar menüsünün nasıl kullanılacağını gösterir.",
|
||||
"We recommend a circularity between 7% and 9%. The reason for this is to mimic a stock controllers calibration. However, symmetrical overshoot is more important and if you need to deviate from this range to achieve better symmetry, that is fine too.": "Dairesellik için %7 ile %9 aralığını öneriyoruz. Bunun nedeni, fabrika çıkışlı kontrolcülerin kalibrasyonunu taklit etmektir. Ancak simetrik taşma daha önemlidir; daha iyi simetri elde etmek için bu aralığın dışına çıkmanız gerekiyorsa bunda sorun yoktur.",
|
||||
"What are the risks of using the calibration?": "Kalibrasyonu kullanmanın riskleri nelerdir?",
|
||||
"What circularity percentage to aim for when calibrating and finetuning.": "Kalibrasyon ve ince ayar sırasında hedeflenmesi gereken dairesellik yüzdesi.",
|
||||
"What the software will help with, is ensuring new joysticks will function properly after replacing the old broken joysticks that drift. This step involves opening up the controller and soldering new potentiometers or an entire new joystick.": "Yazılımın yardımcı olacağı konu, drift yapan eski ve bozuk analoglar değiştirildikten sonra yeni analogların doğru çalışmasını sağlamaktır. Bu işlem, kontrolcünün açılmasını ve yeni potansiyometrelerin ya da komple yeni bir analog mekanizmasının lehimlenmesini gerektirir.",
|
||||
"When calibrating, there is no risk. However, if your controller disconnects during the split second that you save a calibration, then you have a chance of bricking your controller. Make sure your battery has enough charge and is plugged into the controller, and the USB cable is securely connected. This prevents your controller from being bricked if the USB cable accidentally disconnects.": "Kalibrasyon sırasında risk yoktur. Ancak kalibrasyonu kaydettiğiniz o kısa anda kontrolcünün bağlantısı kesilirse kontrolcüyü kullanılamaz hâle getirme ihtimaliniz vardır. Bataryanın yeterince şarjlı ve kontrolcüye bağlı olduğundan, USB kablosunun da güvenli şekilde takılı olduğundan emin olun. Bu, USB kablosu yanlışlıkla çıkarsa kontrolcünün kullanılamaz hâle gelmesini önler.",
|
||||
"Which controllers does DualShock Calibration GUI support?": "DualShock Kalibrasyon Arayüzü hangi kontrolcüleri destekler?",
|
||||
"Yes. Simply do another calibration, and click the green button to save permanently.": "Evet. Yeniden kalibrasyon yapıp kalıcı olarak kaydetmek için yeşil düğmeye tıklamanız yeterlidir.",
|
||||
"": ""
|
||||
}
|
||||
364
lang/ua_ua.json
Normal file
@@ -0,0 +1,364 @@
|
||||
{
|
||||
".authorMsg": "- Переклав солов'їною: sladk0y",
|
||||
"DualShock Calibration GUI": "Майстер калібрування DualКонтролерів",
|
||||
"Connect": "Підключити",
|
||||
"Connected to:": "Підключено до:",
|
||||
"Disconnect": "Від'їднати",
|
||||
"Calibrate stick center": "Калібрувати центральне положення стіка",
|
||||
"Calibrate stick range": "Калібрувати діапазон стіка",
|
||||
"Sections below are not useful, just some debug infos or manual commands": "Розділи нижче не є корисними — це лише відладочна інформація або ручні команди",
|
||||
"NVS Status": "Статус NVS",
|
||||
"Unknown": "Невідомо",
|
||||
"Debug buttons": "Кнопки для налагодження",
|
||||
"Query NVS status": "Запит статусу NVS",
|
||||
"NVS unlock": "Розблокувати NVS",
|
||||
"NVS lock": "Заблокувати NVS",
|
||||
"Stick center calibration": "Калібрування центрального положення стіка.",
|
||||
"Welcome": "Ласкаво просимо!",
|
||||
"Step 1": "Крок 1",
|
||||
"Step 2": "Крок 2",
|
||||
"Step 3": "Крок 3",
|
||||
"Step 4": "Крок 4",
|
||||
"Completed": "Завершено",
|
||||
"Welcome to the stick center-calibration wizard!": "Ласкаво просимо до майстра калібрування центрального положення стіка!",
|
||||
"This tool will guide you in re-centering the analog sticks of your controller. It consists of four steps: you will be asked to move both sticks in a direction and release them.": "Цей інструмент допоможе вам відкалібрувати центральне положення аналогових стіків вашого контролера. Процес складається з чотирьох кроків: вам буде запропоновано перемістити обидва стіки в певному напрямку і відпустити їх.",
|
||||
"Please be aware that, <i>once the calibration is running, it cannot be canceled</i>. Do not close this page or disconnect your controller until it is completed.": "Зверніть увагу, що <i>після початку калібрування, її неможливо буде скасувати</i>. Не закривайте цю сторінку та не відключайте контролер до завершення процесу.",
|
||||
"Press <b>Start</b> to begin calibration.": "Натисніть <b>Старт</b>, щоб почати калібрування.",
|
||||
"Please move both sticks to the <b>top-left corner</b> and release them.": "Будь ласка, перемістіть обидва стіки в <b>верхній лівий кут</b> і відпустіть їх.",
|
||||
"When the sticks are back in the center, press <b>Continue</b>.": "Коли стіки повернуться в центральне положення, натисніть <b>Продовжити</b>.",
|
||||
"Please move both sticks to the <b>top-right corner</b> and release them.": "Будь ласка, перемістіть обидва стіки в <b>верхній правий кут</b> і відпустіть їх.",
|
||||
"Please move both sticks to the <b>bottom-left corner</b> and release them.": "Будь ласка, перемістіть обидва стіки в <b>нижній лівий кут</b> і відпустіть їх.",
|
||||
"Please move both sticks to the <b>bottom-right corner</b> and release them.": "Будь ласка, перемістіть обидва стіки в <b>нижній правий кут</b> і відпустіть їх.",
|
||||
"Calibration completed successfully!": "Калібрування успішно завершено!",
|
||||
"Next": "Далі",
|
||||
"Recentering the controller sticks.": "Центрування стіків контролера.",
|
||||
"Please do not close this window and do not disconnect your controller. ": "Будь ласка, не закривайте це вікно і не відключайте ваш контролер. ",
|
||||
"Range calibration": "Калібрування діапазону.",
|
||||
"The controller is now sampling data!": "Контролер зараз збирає дані!",
|
||||
"Done": "Готово",
|
||||
"Hi, thank you for using this software.": "Привіт, дякуємо за використання цього програмного забезпечення.",
|
||||
"If you're finding it helpful and you want to support my efforts, feel free to": "Якщо вважаєте, що це корисно й хочете підтримати мої зусилля - не соромтесь і",
|
||||
"buy me a coffee": "пригостіть мене кавою!",
|
||||
"! :)": "! :)",
|
||||
"Do you have any suggestion or issue? Drop me a message via email or discord.": "Маєте пропозиції чи виникли проблеми? Напишіть мені на електронну пошту або в Discord.",
|
||||
"Cheers!": "Дякую!",
|
||||
"Support this project": "Підтримайте проєкт!",
|
||||
"unknown": "невідомо",
|
||||
"original": "оригінальний",
|
||||
"clone": "клон",
|
||||
"locked": "заблоковано",
|
||||
"unlocked": "розблоковано",
|
||||
"error": "помилка",
|
||||
"Build Date": "Дата збірки",
|
||||
"HW Version": "Версія апаратного забезпечення",
|
||||
"SW Version": "Версія програмного забезпечення",
|
||||
"Device Type": "Тип пристрою",
|
||||
"Range calibration completed": "Калібрування діапазону завершено",
|
||||
"Range calibration failed": "Калібрування діапазону не вдалося",
|
||||
"Stick calibration failed": "Калібрування джойстика не вдалося",
|
||||
"Stick calibration completed": "Калібрування джойстика завершено",
|
||||
"NVS Lock failed": "Блокування NVS не вдалося",
|
||||
"NVS Unlock failed": "Розблокування NVS не вдалося",
|
||||
"Please connect only one controller at time.": "Будь ласка, підключайте лише один контролер одночасно.",
|
||||
"Sony DualShock 4 V1": "Sony DualShock 4 V1",
|
||||
"Sony DualShock 4 V2": "Sony DualShock 4 V2",
|
||||
"Sony DualSense": "Sony DualSense",
|
||||
"Sony DualSense Edge": "Sony DualSense Edge",
|
||||
"Connected invalid device": "Підключено неприпустиме пристрій",
|
||||
"Error": "Помилка",
|
||||
"Initializing...": "Ініціалізація...",
|
||||
"Storing calibration...": "Збереження калібрування...",
|
||||
"Sampling...": "Збір даних...",
|
||||
"Calibration in progress": "Калібрування триває",
|
||||
"Start": "Старт",
|
||||
"Continue": "Продовжити",
|
||||
"Have a nice day :)": "Гарного дня! :)",
|
||||
"Welcome to the Calibration GUI": "Ласкаво просимо до інтерфейсу калібрування",
|
||||
"Just few things to know before you can start:": "Кілька моментів, які слід врахувати перед початком:",
|
||||
"This website is not affiliated with Sony, PlayStation & co.": "Цей сайт не має стосунку до Sony, PlayStation чи будь-яких інших компаній.",
|
||||
"This service is provided without warranty. Use at your own risk.": "Сервіс надається без гарантій. Користуйтеся на власний ризик.",
|
||||
"Keep the internal battery of the controller connected and ensure it is well charged. If the battery dies during operations, the controller will be damaged and rendered unusable.": "Тримайте внутрішню батарею контролера під’єднаною та впевніться, що вона достатньо заряджена. Якщо акумулятор розрядиться під час процесу, пристрій може пошкодитися або почати працювати некоректно.",
|
||||
"Before doing the permanent calibration, try the temporary one to ensure that everything is working well.": "Перед основним калібруванням зробіть коротку перевірку, щоб пересвідчитися, що все функціонує належним чином.",
|
||||
"Understood": "Зрозуміло",
|
||||
"Version": "Версія",
|
||||
"Frequently Asked Questions": "Часті запитання",
|
||||
"Close": "Закрити",
|
||||
"Welcome to the F.A.Q. section! Below, you'll find answers to some of the most commonly asked questions about this website. If you have any other inquiries or need further assistance, feel free to reach out to me directly. Your feedback and questions are always welcome!": "Ласкаво просимо до розділу «Часті запитання»! Тут ви знайдете відповіді на найпоширеніші запитання про цей вебсайт. Якщо ви не знайшли потрібної інформації або потребуєте додаткової допомоги, сміливо звертайтеся до мене безпосередньо. Я завжди радий вашим запитанням і відгукам!",
|
||||
"How does it work?": "Як це працює?",
|
||||
"Behind the scenes, this website is the culmination of one year of dedicated effort in reverse-engineering DualShock controllers for fun/hobby from a random guy on the internet.": "За лаштунками цей вебсайт - результат року наполегливої праці над зворотним інжинірингом DualКонтролерів, виконаної ентузіастом.",
|
||||
"Through": "Під час цього",
|
||||
"this research": "дослідження",
|
||||
", it was discovered that there exist some undocumented commands on DualShock controllers that can be sent via USB and are used during factory assembly process. If these commands are sent, the controller starts the recalibration of analog sticks.": ", було виявлено кілька незадокументованих команд для DualКонтролерів. Їх можна надсилати через USB, і саме вони використовуються під час заводського складання. Коли контролер отримує одну з таких команд, він запускає повторне калібрування аналогових стіків.",
|
||||
"While the primary focus of this research wasn't initially centered on recalibration, it became apparent that a service offering this capability could greatly benefit numerous individuals. And thus, here we are.": "Хоча спочатку це дослідження не було зосереджене на повторному калібруванні, згодом стало очевидно, що сервіс із такою можливістю може бути корисним для багатьох людей. Саме тому й з'явився цей вебсайт.",
|
||||
"Is this an officially endorsed service?": "Чи є цей сервіс офіційним?",
|
||||
"No, this service is simply a creation by a DualShock enthusiast.": "Ні, це незалежний проєкт, створений ентузіастом.",
|
||||
"Does this website detect if a controller is a clone?": "Чи може цей сайт визначити, чи є контролер підробкою?",
|
||||
"Yes, only DualShock4 at the moment. This happened because I accidentally purchased some clones, spent time identifying the differences and added this functionality to prevent future deception.": "Так, але наразі лише для DualShock 4. Ця функція з'явилася після того, як я випадково придбав кілька клонів, витратив багато часу на пошук відмінностей між ними й вирішив додати її, щоб уберегти інших від подібних ситуацій.",
|
||||
"Unfortunately, the clones cannot be calibrated anyway, because they only clone the behavior of a DualShock4 during normal gameplay, not all the undocumented functionalities.": "На жаль, клони все одно можна відкалібрувати, адже вони лише імітують поведінку DualShock 4 під час звичайної гри, але не відтворюють усі його незадокументовані можливості.",
|
||||
"If you want to extend this detection functionality to DualSense, please ship me a fake DualSense and you'll see it in few weeks.": "Якщо ви хочете, щоб ця функція також підтримувала DualSense, будь ласка, надішліть мені підроблений контролер DualSense і за кілька тижнів ви побачите результат.",
|
||||
"What development is in plan?": "Які функції плануються?",
|
||||
"I maintain two separate to-do lists for this project, although the priority has yet to be established.": "Для цього проєкту я веду два окремі списки завдань, хоча їхній пріоритет ще не визначено.",
|
||||
"The first list is about enhancing support for DualShock4 and DualSense controllers:": "Перший список стосується вдосконалення підтримки DualShock 4 і DualSense:",
|
||||
"Implement calibration of L2/R2 triggers.": "Додати калібрування спускових гачків L2/R2.",
|
||||
"Improve detection of clones, particularly beneficial for those seeking to purchase used controllers with assurance of authenticity.": "Покращити виявлення підробок - це буде особливо корисно для тих, хто купує вживані контролери й хоче переконатися в їхній автентичності.",
|
||||
"Add support for recalibrating IMUs.": "Додати підтримку повторного калібрування IMU.",
|
||||
"Additionally, explore the possibility of reviving non-functioning DualShock controllers (further discussion available on Discord for interested parties).": "Дослідити можливість відновлення несправних контролерів DualShock (додаткове обговорення доступне на Discord для всіх охочих).",
|
||||
"The second list contains new controllers I aim to support:": "Другий список містить контролери, підтримку яких я планую додати:",
|
||||
"DualShock 3": "DualShock 3",
|
||||
"XBox Controllers": "Контролери Xbox",
|
||||
"Each of these tasks presents both immense interest and significant time investment. To provide context, supporting a new controller typically demands 6-12 months of full-time research, alongside a stroke of good fortune.": "Кожне з цих завдань потребує значних витрат часу та є доволі складним. Для розуміння масштабу: підтримка нового контролера зазвичай вимагає від шести до дванадцяти місяців досліджень, а також частки везіння.",
|
||||
"I love this service, it helped me! How can I contribute?": "Мені подобається цей сервіс і він мені допоміг. Як я можу підтримати проєкт?",
|
||||
"I'm glad to hear that you found this helpful! If you're interested in contributing, here are a few ways you can help me:": "Радий чути, що сервіс виявився корисним! Якщо ви хочете підтримати його розвиток, ось кілька способів:",
|
||||
"Consider making a": "Підтримайте проєкт",
|
||||
"donation": "пожертвою.",
|
||||
"to support my late-night caffeine-fueled reverse-engineering efforts.": "Це допоможе мені й надалі займатися зворотним інжинірингом, навіть за чашкою кави пізно вночі.",
|
||||
"Ship me a controller you would love to add (send me an email for organization).": "Надішліть мені контролер, підтримку якого ви хотіли б бачити (зв'яжіться зі мною електронною поштою, щоб домовитися).",
|
||||
"Translate this website in your language": "Перекладіть цей сайт своєю мовою",
|
||||
", to help more people like you!": ", щоб він став доступним і корисним для ще більшої кількості людей.",
|
||||
"This website uses analytics to improve the service.": "Платформа застосовує аналітику для вдосконалення роботи.",
|
||||
"Board Model": "Модель плати",
|
||||
"This DualSense controller has outdated firmware.": "Прошивка цього контролера DualSense застаріла.",
|
||||
"Please update the firmware and try again.": "Будь ласка, оновіть прошивку та спробуйте знову.",
|
||||
"Joystick Info": "Інформація про джойстик",
|
||||
"Check circularity": "Перевірити округлість",
|
||||
"No.": "Ні.",
|
||||
"Does this software resolve stickdrift?": "Чи усуває це програмне забезпечення дріфт стіків?",
|
||||
"Stickdrift is caused by a physical defect; namely dirt, worn potentiometer or in some cases a worn spring.": "Дріфт стіків спричиняють фізичні несправності, зокрема забруднення, зношення потенціометра або, в окремих випадках, ослаблення пружини.",
|
||||
"After range calibration, joysticks always go in corners.": "Після калібрування діапазону стіки постійно відхиляються в кути",
|
||||
"This issue happens because you have clicked \"Done\" immediately after starting a range calibration.": "Це трапляється, якщо ви натиснули \"Готово\" одразу після початку калібрування діапазону.",
|
||||
"Please read the instructions.": "Будь ласка, уважно прочитайте інструкцію.",
|
||||
"You have to rotate the joysticks before you press \"Done\".": "Перш ніж натискати \"Готово\", потрібно повністю обернути джойстики..",
|
||||
"Make sure to touch the edges of the joystick frame and rotate slowly, preferably in each direction - clockwise and anti-clockwise.": "Переконайтеся, що під час обертання ви торкаєтеся країв рамки навколо джойстика. Обертайте його повільно в обох напрямках - за годинниковою стрілкою та проти неї.",
|
||||
"Only after you have done that, you click on \"Done\".": "Лише після цього натискайте \"Готово\".",
|
||||
"Changes saved successfully": "Зміни успішно збережено",
|
||||
"Error while saving changes": "Помилка при збереженні змін:",
|
||||
"Save changes permanently": "Зберегти зміни назавжди",
|
||||
"Reboot controller": "Перезавантажити контролер",
|
||||
"Controller Info": "Інформація про контролер",
|
||||
"Debug Info": "Інформація для налагодження",
|
||||
"Software": "Програмне забезпечення",
|
||||
"Hardware": "Апаратне забезпечення",
|
||||
"FW Build Date": "Дата збірки прошивки",
|
||||
"FW Type": "Тип прошивки",
|
||||
"FW Series": "Серія прошивки",
|
||||
"FW Version": "Версія прошивки",
|
||||
"FW Update": "Оновлення прошивки",
|
||||
"FW Update Info": "Інфо про оновлення прошивки",
|
||||
"SBL FW Version": "Версія прошивки SBL",
|
||||
"Venom FW Version": "Версія прошивки Venom",
|
||||
"Spider FW Version": "Версія прошивки Spider",
|
||||
"Touchpad FW Version": "Версія прошивки тачпаду",
|
||||
"Serial Number": "Серійний номер",
|
||||
"MCU Unique ID": "Унікальний ID MCU",
|
||||
"PCBA ID": "ID PCBA",
|
||||
"Battery Barcode": "Штрих-код батареї",
|
||||
"VCM Left Barcode": "Штрих-код VCM лівий",
|
||||
"VCM Right Barcode": "Штрих-код VCM правий",
|
||||
"HW Model": "Апаратна модель",
|
||||
"Touchpad ID": "ID тачпаду",
|
||||
"Bluetooth Address": "Bluetooth адреса",
|
||||
"Show all": "Показати все",
|
||||
"(beta)": "(бета)",
|
||||
"<b>Externally</b>: by applying +1.8V directly to the visible test point without opening the controller.": "<b>Зовнішньо</b>: шляхом подачі +1,8В безпосередньо на видиму тестову точку без розбирання контролера.",
|
||||
"<b>Internally</b>: by soldering a wire from a +1.8V source to the write-protect TP.": "<b>Внутрішньо</b>: припаявши дріт від джерела +1,8В до тестової точки захисту від запису.",
|
||||
"Calibration is being stored in the stick modules.": "Калібрування зберігається в модулях стіків.",
|
||||
"Cancel": "Скасувати",
|
||||
"DualSense Edge Calibration": "Калібрування DualSense Edge",
|
||||
"Finetune stick calibration": "Тонке налаштування калібрування стіків",
|
||||
"For more info or help, feel free to reach out on Discord.": "Для додаткової інформації або допомоги звертайтесь у Discord.",
|
||||
"Left stick": "Лівий стік",
|
||||
"More details and images": "Більше деталей та зображень",
|
||||
"Please note: the stick modules on the DS Edge <b>cannot be calibrated via software alone</b>.": "Зверніть увагу: модулі стіків на DS Edge <b>неможливо відкалібрувати лише програмним шляхом</b>.",
|
||||
"To store a custom calibration on the stick's internal memory, a <b>hardware modification</b> is required.": "Щоб зберегти власне калібрування у внутрішній памʼяті стіка, потрібна <b>апаратна модифікація</b>.",
|
||||
"Right stick": "Правий стік",
|
||||
"Support for calibrating DualSense Edge stick modules is now available as an <b>experimental feature</b>.": "Підтримка калібрування модулів стіків DualSense Edge тепер доступна як <b>експериментальна функція</b>.",
|
||||
"This involves temporarily disabling write protection by applying <b>+1.8V</b> to a specific test point on each module.": "Це вимагає тимчасового вимкнення захисту від запису шляхом подачі <b>+1,8В</b> на певну тестову точку кожного модуля.",
|
||||
"This is only for advanced users. If you're not sure what you're doing, please do not attempt it.": "Це лише для досвідчених користувачів. Якщо ви не впевнені у своїх діях, будь ласка, не намагайтеся це зробити.",
|
||||
"We are not responsible for any damage caused by attempting this modification.": "Ми не несемо відповідальності за будь-які пошкодження, спричинені спробами цієї модифікації.",
|
||||
"You can do this in two ways:": "Ви можете зробити це двома способами:",
|
||||
"here": "тут",
|
||||
"30th Anniversary": "Обмежена серія до 30-тої річниці",
|
||||
"Astro Bot": "Обмежена серія Astro Bot",
|
||||
"Cannot lock": "Не вдалося заблокувати",
|
||||
"Cannot store data into": "Не вдалося зберегти дані в",
|
||||
"Cannot unlock": "Не вдалося розблокувати",
|
||||
"Cobalt Blue": "Кобальтово-синій",
|
||||
"Color": "Колір",
|
||||
"Cosmic Red": "Космічний червоний",
|
||||
"Galactic Purple": "Галактичний пурпуровий",
|
||||
"God of War Ragnarok": "Обмежена серія God of War: Ragnarok",
|
||||
"Grey Camouflage": "Сірий камуфляж",
|
||||
"If the calibration is not stored permanently, please double-check the wirings of the hardware mod.": "Якщо калібрування не зберігається постійно, будь ласка, перевірте підключення апаратної модифікації.",
|
||||
"Left Module Barcode": "Штрих-код лівого модуля",
|
||||
"Midnight Black": "Чорна ніч",
|
||||
"Nova Pink": "Рожевий «Нова зірка»",
|
||||
"Right Module Barcode": "Штрих-код правого модуля",
|
||||
"Starlight Blue": "Зоряний синій",
|
||||
"Sterling Silver": "Монетний срібний",
|
||||
"Volcanic Red": "Вулканічний червоний",
|
||||
"White": "Білий",
|
||||
"left module": "лівий модуль",
|
||||
"right module": "правий модуль",
|
||||
"Chroma Indigo": "Насичений індиго",
|
||||
"Chroma Pearl": "Насичений перлистий",
|
||||
"Chroma Teal": "Насичений синьо-зелений",
|
||||
"Fortnite": "Обмежена серія Fortnite",
|
||||
"Spider-Man 2": "Обмежена серія Spider-Man 2",
|
||||
"The Last of Us": "Обмежена серія The Last of Us",
|
||||
"10x zoom": "Наближення в 10x",
|
||||
"Normal": "Нормальний маштаб",
|
||||
"Calibration": "Калібрування",
|
||||
"Debug": "Налагодження",
|
||||
"Info": "Інформація",
|
||||
"Center (L1)": "Центрування (L1)",
|
||||
"Circularity (R1)": "Округлість (R1)",
|
||||
"Move the stick to select it for tuning, then without touching the stick use the D-pad buttons to adjust the center point. Flick it and adjust it again if it is off center or flickers.": "Перемістіть стік, щоб вибрати його для налаштування, потім, не торкаючись стіка, використовуйте кнопки D-pad для регулювання центральної точки. Різко відпустіть і налаштуйте знову, якщо стік зміщений від центру або тремтить.",
|
||||
"Please release the stick to center position before adjusting with D-pad buttons.": "Будь ласка, відпустіть стік у центральне положення перед регулюванням за допомогою кнопок D-pad.",
|
||||
"Press the D-pad or face buttons in the direction you want the stick position to move.": "Натисніть D-pad або передні кнопки в напрямку, куди потрібно змістити положення стіка.",
|
||||
"Push the stick straight up/down/left/right as far as possible.": "Відхиліть стік максимально вгору/вниз/вліво/вправо.",
|
||||
"Show raw numbers": "Показати необроблені значення",
|
||||
"The device is connected via Bluetooth. Disconnect and reconnect using a USB cable instead.": "Пристрій під’єднано через Bluetooth. Від’єднайте його та під’єднайте знову, але вже за допомогою USB-кабелю.",
|
||||
"Your device might not be a genuine Sony controller. If it is not a clone then please report this issue.": "Ваш пристрій може бути не оригінальним контролером Sony. Якщо це не підробка, повідомте про цю проблему.",
|
||||
"<strong>Average circularity error:</strong> smaller is not always better! Aim for 7-9 %.": "<strong>Середня похибка округлості:</strong> менше — не завжди краще! Орієнтуйтеся на 7–9 %.",
|
||||
"A reboot is needed to continue using this DualSense Edge. Please disconnect and reconnect your controller.": "Щоб продовжити використання DualSense Edge, потрібно перезавантажити контролер. Від’єднайте його та під’єднайте знову.",
|
||||
"Adaptive Trigger": "Адаптивний спусковий гачок",
|
||||
"Adaptive triggers are only supported on DualSense controllers": "Адаптивні спускові гачки підтримуються лише контролерами DualSense",
|
||||
"Add test": "Додати тест",
|
||||
"Be gentle to avoid damage.": "Будьте обережні, щоб уникнути пошкодження.",
|
||||
"Buttons": "Кнопки",
|
||||
"Center": "Центр",
|
||||
"Circularity": "Округлість",
|
||||
"Controller does not support adaptive trigger control": "Контролер не підтримує керування адаптивними спусковими гачками",
|
||||
"Don't show again": "Більше не показувати",
|
||||
"Fail": "Не пройдено",
|
||||
"Failed": "Невдало",
|
||||
"Failed to connect to device": "Не вдалося під’єднатися до пристрою",
|
||||
"Failed to disable adaptive trigger": "Не вдалося вимкнути адаптивний спусковий гачок",
|
||||
"Failed to set speaker tone": "Не вдалося задати тон динаміка",
|
||||
"Failed to set vibration": "Не вдалося налаштувати вібрацію",
|
||||
"Feel for vibration in the controller.": "Перевірте, чи відчувається вібрація на контролері.",
|
||||
"Haptic Vibration": "Тактильна вібрація",
|
||||
"Headphone Jack": "Аудіороз’єм",
|
||||
"Increase non-circularity": "Збільшити неокруглість",
|
||||
"Instructions": "Інструкції",
|
||||
"Keep rotating the sticks even if you see no progress!": "Продовжуйте обертати стіки, навіть якщо не бачите прогресу!",
|
||||
"Learn more...": "Дізнатися більше...",
|
||||
"Lights": "Підсвічування",
|
||||
"Listen for a tone from the controller speaker.": "Прослухайте сигнал із динаміка контролера.",
|
||||
"Long-press [circle] to skip ahead.": "Утримуйте [circle], щоб пропустити і перейти далі.",
|
||||
"Microphone": "Мікрофон",
|
||||
"Microphone Level:": "Рівень мікрофона:",
|
||||
"No controller connected": "Контролер не під’єднано",
|
||||
"No tests completed yet.": "Жодного тесту ще не завершено.",
|
||||
"Not tested": "Не перевірено",
|
||||
"Pass": "Пройдено",
|
||||
"Passed": "Успішно",
|
||||
"Plug in headphones to the 3.5mm jack": "Підключіть навушники до роз’єму 3,5 мм",
|
||||
"Press L2 and R2 triggers to feel the trigger resistance.": "Натисніть спускові гачки L2 і R2, щоб відчути опір.",
|
||||
"Press [circle] to close, or [square] to start over": "Натисніть [circle], щоб закрити, або [square], щоб почати спочатку",
|
||||
"Press [square] to Pass, [cross] to Fail, or [circle] to skip.": "Натисніть [square], щоб позначити як пройдено, [cross] — як не пройдено, або [circle], щоб пропустити.",
|
||||
"Press [square] to begin or [circle] to close": "Натисніть [square], щоб почати, або [circle], щоб закрити",
|
||||
"Press [triangle] to go back.": "Натисніть [triangle], щоб повернутися назад.",
|
||||
"Press each button until they turn green.": "Натискайте кожну кнопку, доки вона не стане зеленою.",
|
||||
"Progress": "Прогрес",
|
||||
"Quick Test": "Швидкий тест",
|
||||
"Quick calibrate": "Швидке калібрування",
|
||||
"Range calibration appears to have failed. Please try again and make sure you rotate the sticks.": "Схоже, калібрування діапазону не вдалося. Спробуйте ще раз і переконайтеся, що ви обертаєте стіки.",
|
||||
"Repeat": "Повторити",
|
||||
"Restart": "Перезапустити",
|
||||
"Rotate the sticks slowly at least 2 times in one direction and 2 times in the other direction to cover the whole range.": "Повільно обертайте стіки щонайменше двічі в один бік і двічі в інший, щоб охопити весь діапазон руху.",
|
||||
"Run through these tests to verify your controller's functionality.": "Виконайте ці тести, щоб перевірити працездатність контролера.",
|
||||
"Sony controllers come from the factory calibrated to have an average circularity error of nearly 10 %, and this is now what games expect. Too perfect circularity can make movements and aim feel stiff and unresponsive in some games.": "Контролери Sony з заводу калібровані із середньою похибкою округлості близько 10 % — саме цього очікують ігри. Надто ідеальна округлість може зробити рухи або прицілювання надто жорсткими й нечутливим.",
|
||||
"Speaker": "Динамік",
|
||||
"Step size": "Крок зміни",
|
||||
"Test Speaker": "Перевірити динамік",
|
||||
"Test Summary": "Підсумок тесту",
|
||||
"Test all buttons, or long-press [square] to Pass and [cross] to Fail, or [circle] to skip.": "Перевірте всі кнопки, або утримуйте [square], щоб позначити як пройдено, [cross] — як не пройдено, або [circle] — щоб пропустити.",
|
||||
"The <b>Done</b> button will unlock after at most 15 seconds. If you press <b>Done</b> without rotating the sticks, the calibration will be incomplete and you will need to repeat it.": "Кнопка <b>Готово</b> стане доступною не пізніше ніж через 15 секунд. Якщо натиснути <b>Готово</b>, не обертаючи стіки, калібрування буде неповним, і доведеться повторити.",
|
||||
"This test checks all controller buttons by requiring you to press each button up to three times.": "Цей тест перевіряє всі кнопки контролера, вимагаючи натиснути кожну до трьох разів.",
|
||||
"This test checks the headphone jack functionality.": "Цей тест перевіряє працездатність аудіороз’єму.",
|
||||
"This test checks the reliability of the USB port.": "Цей тест перевіряє надійність USB-порту.",
|
||||
"This test will cycle through red, green, and blue colors on the controller lightbar, animate the player indicator lights, and flash the mute button.": "Цей тест послідовно відтворить червоний, зелений і синій кольори на панелі підсвічування контролера, а також анімує індикатори гравця й блимне кнопкою вимкнення мікрофона.",
|
||||
"This test will enable heavy resistance on both L2 and R2 triggers.": "Цей тест вмикає сильний опір на обох спускових гачках L2 та R2.",
|
||||
"USB Connector": "USB-роз’єм",
|
||||
"Watch the controller lights change colors, the player lights animate, and the mute button flash.": "Спостерігайте, як змінюються кольори підсвічування, анімуються індикатори гравця й блимає кнопка вимкнення мікрофона.",
|
||||
"While holding the stick to be adjusted straight up/down/left/right, make adjustments until you see lightblue sectors in all four directions after circling the stick both left and right. Then use the": "Утримуючи стік, який потрібно налаштувати, прямо вгору/вниз/вліво/вправо, коригуйте положення, доки після обертання стіка в обидва боки не з’являться блакитні сектори у всіх чотирьох напрямках. Потім використовуйте",
|
||||
"Wiggle the USB cable to see if the controller disconnects.": "Поворушіть USB-кабель, щоб перевірити, чи не роз’єднується контролер.",
|
||||
"failed": "невдало",
|
||||
"hide": "приховати",
|
||||
"passed": "успішно",
|
||||
"skipped": "пропущено",
|
||||
"tests completed": "тестів завершено",
|
||||
"to increase the non-circularity.": "щоб збільшити неокруглість.",
|
||||
"Please connect a DualShock 4, a DualSense, DualSense Edge or VR2 controller to your computer and press Connect.": "Під’єднайте контролер DualShock 4, DualSense, DualSense Edge або VR2 до комп’ютера та натисніть «Підключити».",
|
||||
"The device appears to be a clone. All calibration functionality is disabled.": "Схоже, цей пристрій є підробкою. Усі функції калібрування вимкнено.",
|
||||
"Cannot copy text to the clipboard:": "Не вдалося скопіювати текст до буфера обміну:",
|
||||
"The item has been copied to the clipboard.": "Скопійовано до буфера обміну",
|
||||
"After they have been replaced, this utility can be used to calibrate the controller to work with the new joysticks.": "Після заміни, утиліту можна використати для калібрування контролера з новими стіками.",
|
||||
"Aim for a circularity error of around 7-9 % for the best playing experience.": "Для найкращого ігрового досвіду прагніть до похибки округлості близько 7–9%.",
|
||||
"Battery level is low. Tests may fail due to the controller being in power saving mode.": "Рівень заряду батареї низький. Тести можуть завершитися невдало через режим енергозбереження контролера.",
|
||||
"Calibrating without replacing the joysticks may help temporarily, but it may also make the problem worse, with no way to undo it.": "Калібрування без заміни стіків може дати тимчасовий ефект, але також здатне погіршити проблему без можливості скасування.",
|
||||
"Calibration History": "Історія калібрування",
|
||||
"Cannot read module barcodes": "Не вдалося зчитати штрихкоди модулів",
|
||||
"Clear All": "Очистити все",
|
||||
"Current": "Поточне",
|
||||
"Delete": "Видалити",
|
||||
"Delete all calibration history for this controller? This cannot be undone.": "Видалити всю історію калібрування цього контролера? Цю дію неможливо скасувати.",
|
||||
"Delete this calibration entry?": "Видалити цей запис калібрування?",
|
||||
"Drift is caused by mechanical parts in the joystick being worn out, and they need to be replaced to fix the drift.": "Дрифт виникає через зношення механічних частин, тому для його усунення необхідно замінити стіки.",
|
||||
"Firefox is supported with the WebHID extension installed.": "Firefox підтримується за умови встановлення розширення WebHID.",
|
||||
"It appears the latest joystick calibration has not been saved.": "Схоже, останнє калібрування стіків не було збережене.",
|
||||
"Last connected": "Останнє підключення",
|
||||
"No saved calibrations found.": "Збережених калібрувань не знайдено.",
|
||||
"Please use a web browser with WebHID support (e.g. Google Chrome or Microsoft Edge) on a PC or Mac.": "Будь ласка, використовуйте веббраузер із підтримкою WebHID (наприклад, Google Chrome або Microsoft Edge) на ПК чи Mac.",
|
||||
"Restore": "Відновити",
|
||||
"Restore calibration": "Відновити калібрування",
|
||||
"The calibration was restored successfully! Remember to save the changes in order not to loose them when the controller is rebooted.": "Калібрування успішно відновлено! Не забудьте зберегти зміни, щоб вони не були втрачені після перезавантаження контролера.",
|
||||
"This controller has unsaved changes that will be lost when the controller is rebooted.": "Цей контролер має незбережені зміни, які буде втрачено після його перезавантаження.",
|
||||
"This utility cannot fix stick drift.": "Ця утиліта не може усунути дрифт стіків.",
|
||||
"Unsupported browser.": "Непідтримуваний браузер.",
|
||||
"Use expert mode": "Використовувати експертний режим",
|
||||
"Use four-step calibration": "Використовувати чотириетапне калібрування",
|
||||
"Use normal mode": "Використовувати звичайний режим",
|
||||
"Use quick calibration": "Використовувати швидке калібрування",
|
||||
"Using this utility on a phone or tablet is not supported.": "Використання цієї утиліти на телефоні або планшеті не підтримується.",
|
||||
"Values": "Значення",
|
||||
"You should save your changes, or reboot the controller to revert back to the previous state.": "Вам слід зберегти зміни або перезавантажити контролер, щоб повернутися до попереднього стану",
|
||||
"serial number": "серійний номер",
|
||||
"(DualSense & DualSense Edge) Will updating the firmware reset calibration?": "(Лише для DualSense і DualSense Edge) Чи скидається калібрування після оновлення прошивки?",
|
||||
"(DualSense Edge) Is the calibration stored on the controller or the modules?": "(Лише для DualSense Edge) Калібрування зберігається на контролері чи в модулях?",
|
||||
"A sample test was done with 30 dualsense edge modules, and the results showed that the inner quartile range (IQR) is 8.3% and 9.0%, with an average of 8.6%. This goes to show that stock controllers by default have a relatively high range, and the rule of thumb is to follow factory calibration.": "Було протестовано 30 модулів стіків DualSense Edge. Результати показали, що міжквартильний розмах (IQR) становить від 8,3 % до 9,0 %, а середнє значення — 8,6 %. Це свідчить про те, що заводське калібрування має досить велику похибку, тому зазвичай рекомендується орієнтуватися саме на нього.",
|
||||
"Can I overwrite a (permanent) calibration?": "Чи можна перезаписати постійне калібрування?",
|
||||
"Can I restore a previous calibration?": "Чи можна відновити попереднє калібрування?",
|
||||
"Finetuning is only available for DualSense and DualSense Edge.": "Тонке налаштування доступне лише для DualSense і DualSense Edge.",
|
||||
"God of War 20th Anniversary": "20-та річниця God of War",
|
||||
"Housing": "Корпус",
|
||||
"How do I use the finetuning feature?": "Як користуватися функцією тонкого налаштування?",
|
||||
"If you don't have a battery connected or the connected battery is empty, AND your cable disconnects during saving the calibration, then your controller has a high chance of being bricked.": "Якщо під час збереження змін кабель від'єднається, а акумулятор не підключений або повністю розряджений, імовірність вивести контролер з ладу буде дуже високою.",
|
||||
"If you have not clicked the green button \"Save changes permanently\", then unplugging the controller will reset to the previously saved calibration. It is recommended you test your calibration before saving.": "Якщо ви не натиснули зелену кнопку «Зберегти зміни назавжди», після від'єднання контролера буде автоматично відновлено попереднє збережене калібрування. Тому перед збереженням змін рекомендується перевірити результат.",
|
||||
"If you have saved the changes permanently, you can reset the changes only if you are using a DualSense or DualSense Edge. You can click on the grey button \"Restore Calibration\" to go back to one of the previous calibrations that was saved on the controller. Known issue: You may need to reboot your controller first in order for previous calibrations to show up.": "Якщо ви вже зберегли зміни назавжди, скасувати їх можна лише на DualSense або DualSense Edge. Для цього натисніть сіру кнопку «Відновити калібрування», щоб повернути одну з попередніх версій калібрування, збережених на контролері. Відоме обмеження: щоб попередні версії з'явилися у списку, може знадобитися перезавантажити контролер.",
|
||||
"Image 1": "Зображення 1",
|
||||
"Images": "Зображення",
|
||||
"In most cases, calibrating your joysticks that have prior drift issues may result in a worse and unpredictable calibration.": "У більшості випадків калібрування стіків із наявним дріфтом лише погіршить ситуацію та може призвести до непередбачуваної роботи контролера.",
|
||||
"Not shown in the video: You can now also increase the range in each direction uniformly by using the cross in the top right and moving the slider up, which may speed up finetuning. Make sure to rotate the joystick first, otherwise the button cannot be pressed.": "У відео не показано одну нову можливість: тепер можна рівномірно збільшити діапазон в усіх напрямках. Для цього натисніть кнопку у вигляді хрестика у верхньому правому куті та пересуньте повзунок угору. Це допоможе пришвидшити тонке налаштування. Перед цим обов'язково покрутіть стік, інакше кнопка буде недоступною.",
|
||||
"Only official controllers are supported, no third-party or \"fake\" controllers.": "Підтримуються лише оригінальні контролери. Контролери сторонніх виробників і підробки не підтримуються.",
|
||||
"Option 1": "Варіант 1",
|
||||
"Option 2": "Варіант 2",
|
||||
"PlayStation Virtual Reality 2": "PlayStation Virtual Reality 2",
|
||||
"Saving calibration is locked by default on DualSense Edge joystick modules. A hardware mod is required to save the calibration permanently. The calibration is saved on the modules themselves, so you have to perform the mod twice: once for each module. You would need to bridge two points on the PCB with enamelled wire. There are multiple methods, I personally recommend using either of these two locations to solder the wire to. See images below. Ensure the wire is thin enough so that the shell is closed properly. Make sure you don't short the wire to ground through the letters near the bottom joint.": "За замовчуванням можливість збереження калібрування в модулях стіків DualSense Edge заблокована. Для постійного збереження калібрування потрібна апаратна модифікація. Калібрування записується безпосередньо в модуль, тому модифікацію потрібно виконати окремо для кожного з них. Для цього необхідно з'єднати дві точки на друкованій платі емальованим дротом.Існує кілька способів виконати цю модифікацію, але я рекомендую скористатися одним із двох варіантів, показаних на зображеннях нижче. Переконайтеся, що дріт достатньо тонкий, щоб корпус можна було повністю закрити. Також стежте, щоб він не торкався контактних майданчиків із літерами біля нижньої точки паяння.",
|
||||
"Sony DualShock 4": "Sony DualShock 4",
|
||||
"The calibration is stored on each module individually. It is carried over if you place the modules in a different DualSense Edge. Likewise, if you place a different set of modules in your DualSense Edge, you will get a different calibration that is tied to those new modules.": "Калібрування зберігається окремо в кожному модулі стіка. Якщо переставити модулі в інший контролер DualSense Edge, їхнє калібрування також буде перенесено. І навпаки: якщо встановити в контролер інший комплект модулів, буде використано калібрування, збережене саме в них.",
|
||||
"The finetuning and quick test menus are only accessible for DualSense and DualSense Edge.": "Меню тонкого налаштування та швидкої перевірки доступні лише для DualSense і DualSense Edge.",
|
||||
"The website supports the following official controllers:": "Вебсайт підтримує такі моделі:",
|
||||
"These previous calibrations are stored locally in your browser's storage. Meaning you can only restore calibrations using the same computer and browser that you used to calibrate it with, and deleting the cache or using Incognito will make any previous calibration irrecoverable.": "Попередні версії калібрування зберігаються локально у сховищі вашого браузера. Тому відновити їх можна лише на тому самому комп'ютері й у тому самому браузері, який використовувався для калібрування. Якщо очистити кеш браузера або скористатися режимом інкогніто, попередні версії стануть недоступними для відновлення.",
|
||||
"This software is not intended to fix stickdrift and will <b>not</b> fix stickdrift on its own if you already experience that.": "Це програмне забезпечення не призначене для усунення дріфту стіків і <b>не</b> здатне виправити проблему, якщо вона вже виникла.",
|
||||
"This video from V2.16 shows how to use the finetuning menu.": "У цьому відео для версії 2.16 показано, як користуватися меню тонкого налаштування.",
|
||||
"We recommend a circularity between 7% and 9%. The reason for this is to mimic a stock controllers calibration. However, symmetrical overshoot is more important and if you need to deviate from this range to achieve better symmetry, that is fine too.": "Ми рекомендуємо досягати округлості в межах від 7 % до 9 %. Це дає змогу наблизити калібрування до заводського. Водночас симетричність виходу за межі діапазону важливіша, тому, якщо для кращої симетрії потрібно трохи вийти за ці межі, це цілком допустимо.",
|
||||
"What are the risks of using the calibration?": "Які ризики пов'язані з калібруванням?",
|
||||
"What circularity percentage to aim for when calibrating and finetuning.": "До якого значення округлості слід прагнути під час калібрування та тонкого налаштування?",
|
||||
"What the software will help with, is ensuring new joysticks will function properly after replacing the old broken joysticks that drift. This step involves opening up the controller and soldering new potentiometers or an entire new joystick.": "Ця програма допомагає правильно відкалібрувати нові стіки після заміни зношених. Для цього потрібно розібрати контролер і замінити потенціометри або весь модуль стіка.",
|
||||
"When calibrating, there is no risk. However, if your controller disconnects during the split second that you save a calibration, then you have a chance of bricking your controller. Make sure your battery has enough charge and is plugged into the controller, and the USB cable is securely connected. This prevents your controller from being bricked if the USB cable accidentally disconnects.": "Саме калібрування є безпечним. Однак якщо під час збереження змін контролер від'єднається, існує ризик вивести його з ладу. Щоб цього уникнути, переконайтеся, що акумулятор достатньо заряджений і підключений до контролера, а USB-кабель надійно зафіксований.",
|
||||
"Which controllers does DualShock Calibration GUI support?": "Які контролери підтримує Майстер калібрування DualКонтролерів?",
|
||||
"Yes. Simply do another calibration, and click the green button to save permanently.": "Так. Просто виконайте калібрування ще раз і натисніть зелену кнопку, щоб перезаписати його.",
|
||||
"": ""
|
||||
}
|
||||
364
lang/vi_vn.json
Normal file
@@ -0,0 +1,364 @@
|
||||
{
|
||||
".authorMsg": "- Bản dịch tiếng Việt do MeoU cung cấp",
|
||||
"DualShock Calibration GUI": "Giao diện Hiệu chỉnh Tay cầm",
|
||||
"Connect": "Kết nối",
|
||||
"Connected to:": "Đã kết nối với:",
|
||||
"Disconnect": "Ngắt kết nối",
|
||||
"Calibrate stick center": "Hiệu chỉnh tâm analog",
|
||||
"Calibrate stick range": "Hiệu chỉnh phạm vi ngoài analog",
|
||||
"Sections below are not useful, just some debug infos or manual commands": "Các phần bên dưới không hữu ích, chỉ là thông tin gỡ lỗi hoặc lệnh thủ công",
|
||||
"NVS Status": "Trạng thái NVS",
|
||||
"Unknown": "Không rõ",
|
||||
"Debug buttons": "Nút Gỡ lỗi",
|
||||
"Query NVS status": "Truy vấn trạng thái NVS",
|
||||
"NVS unlock": "Mở khóa NVS",
|
||||
"NVS lock": "Khóa NVS",
|
||||
"Stick center calibration": "Hiệu chỉnh tâm analog",
|
||||
"Welcome": "Chào mừng",
|
||||
"Step 1": "Bước 1",
|
||||
"Step 2": "Bước 2",
|
||||
"Step 3": "Bước 3",
|
||||
"Step 4": "Bước 4",
|
||||
"Completed": "Đã hoàn thành",
|
||||
"Welcome to the stick center-calibration wizard!": "Chào mừng đến với trình hướng dẫn hiệu chỉnh tâm analog!",
|
||||
"This tool will guide you in re-centering the analog sticks of your controller. It consists of four steps: you will be asked to move both sticks in a direction and release them.": "Công cụ này sẽ hướng dẫn mày cách định vị lại tâm analog. Gồm bốn bước: mày sẽ được yêu cầu di chuyển cả hai cần analog theo một hướng và thả ra.",
|
||||
"Please be aware that, <i>once the calibration is running, it cannot be canceled</i>. Do not close this page or disconnect your controller until it is completed.": "Xin lưu ý, <i>một khi quá trình hiệu chỉnh bắt đầu, nó không thể bị hủy</i>. Đừng đóng trang này hoặc ngắt kết nối tay cầm cho đến khi hoàn tất.",
|
||||
"Press <b>Start</b> to begin calibration.": "Nhấn <b>Bắt đầu</b> để tiến hành hiệu chỉnh.",
|
||||
"Please move both sticks to the <b>top-left corner</b> and release them.": "Vui lòng di chuyển cả hai cần analog đến <b>góc trên bên trái</b> và thả ra.",
|
||||
"When the sticks are back in the center, press <b>Continue</b>.": "Khi các cần analog trở về tâm, nhấn <b>Tiếp tục</b>.",
|
||||
"Please move both sticks to the <b>top-right corner</b> and release them.": "Vui lòng di chuyển cả hai cần analog đến <b>góc trên bên phải</b> và thả ra.",
|
||||
"Please move both sticks to the <b>bottom-left corner</b> and release them.": "Vui lòng di chuyển cả hai cần analog đến <b>góc dưới bên trái</b> và thả ra.",
|
||||
"Please move both sticks to the <b>bottom-right corner</b> and release them.": "Vui lòng di chuyển cả hai cần analog đến <b>góc dưới bên phải</b> và thả ra.",
|
||||
"Calibration completed successfully!": "Hiệu chỉnh hoàn tất thành công!",
|
||||
"Next": "Tiếp theo",
|
||||
"Recentering the controller sticks.": "Đang định vị lại tâm analog.",
|
||||
"Please do not close this window and do not disconnect your controller. ": "Vui lòng không đóng cửa sổ này và không ngắt kết nối tay cầm.",
|
||||
"Range calibration": "Hiệu chỉnh phạm vi ngoài analog",
|
||||
"The controller is now sampling data!": "Tay cầm hiện đang lấy mẫu dữ liệu!",
|
||||
"Done": "Hoàn thành",
|
||||
"Hi, thank you for using this software.": "Chào, cảm ơn mày đã sử dụng phần mềm này.",
|
||||
"If you're finding it helpful and you want to support my efforts, feel free to": "Nếu mày thấy nó hữu ích và muốn ủng hộ công sức của tao, hãy ủng hộ nhé!",
|
||||
"buy me a coffee": "mời tao một ly cà phê",
|
||||
"! :)": "! :)",
|
||||
"Do you have any suggestion or issue? Drop me a message via email or discord.": "Mày có đề xuất hay gặp vấn đề gì không? Gửi tin nhắn cho tao qua email hoặc Discord.",
|
||||
"Cheers!": "Chúc vui vẻ!",
|
||||
"Support this project": "Ủng hộ dự án này",
|
||||
"unknown": "Thiết bị không rõ",
|
||||
"original": "Hàng chính hãng",
|
||||
"clone": "Hàng nhái/Clone",
|
||||
"locked": "Đã khóa",
|
||||
"unlocked": "Đã mở khóa",
|
||||
"error": "Lỗi",
|
||||
"Build Date": "Ngày Build",
|
||||
"HW Version": "Phiên bản Phần cứng (HW)",
|
||||
"SW Version": "Phiên bản Phần mềm (SW)",
|
||||
"Device Type": "Loại thiết bị",
|
||||
"Range calibration completed": "Hiệu chỉnh phạm vi ngoài analog đã hoàn tất",
|
||||
"Range calibration failed": "Hiệu chỉnh phạm vi ngoài analog thất bại",
|
||||
"Stick calibration failed": "Hiệu chỉnh analog thất bại",
|
||||
"Stick calibration completed": "Hiệu chỉnh analog hoàn tất",
|
||||
"NVS Lock failed": "Khóa NVS thất bại",
|
||||
"NVS Unlock failed": "Mở khóa NVS thất bại",
|
||||
"Please connect only one controller at time.": "Mỗi lần chỉ được kết nối một tay cầm.",
|
||||
"Sony DualShock 4 V1": "Tay cầm PS4 V1 (Sony DualShock 4 V1)",
|
||||
"Sony DualShock 4 V2": "Tay cầm PS4 V2 (Sony DualShock 4 V2)",
|
||||
"Sony DualSense": "Tay cầm PS5 (Sony DualSense)",
|
||||
"Sony DualSense Edge": "Tay cầm PS5 Elite/DSE (Sony DualSense Edge)",
|
||||
"Connected invalid device": "Đã kết nối thiết bị không hợp lệ",
|
||||
"The device appears to be a clone. All calibration functionality is disabled.": "Thiết bị có vẻ là hàng nhái. Tất cả chức năng hiệu chỉnh đều bị vô hiệu hóa.",
|
||||
"Error": "Lỗi",
|
||||
"Initializing...": "Đang khởi tạo...",
|
||||
"Storing calibration...": "Đang lưu hiệu chỉnh...",
|
||||
"Sampling...": "Đang lấy mẫu...",
|
||||
"Calibration in progress": "Đang tiến hành hiệu chỉnh",
|
||||
"Start": "Bắt đầu",
|
||||
"Continue": "Tiếp tục",
|
||||
"Have a nice day :)": "Chúc mày một ngày tốt lành :)",
|
||||
"Welcome to the Calibration GUI": "Chào mừng đến với Giao diện Hiệu chỉnh",
|
||||
"Just few things to know before you can start:": "Vài điều cần biết trước khi mày bắt đầu:",
|
||||
"This website is not affiliated with Sony, PlayStation & co.": "Trang web này không liên kết với Sony, PlayStation và các công ty liên quan.",
|
||||
"This service is provided without warranty. Use at your own risk.": "Dịch vụ này được cung cấp mà không có bảo hành. Mày tự chịu rủi ro khi sử dụng.",
|
||||
"Keep the internal battery of the controller connected and ensure it is well charged. If the battery dies during operations, the controller will be damaged and rendered unusable.": "Giữ pin bên trong tay cầm luôn được kết nối và đảm bảo pin đã được sạc đầy. Nếu pin hết trong quá trình thao tác, tay cầm sẽ bị hỏng và không thể sử dụng được.",
|
||||
"Before doing the permanent calibration, try the temporary one to ensure that everything is working well.": "Trước khi thực hiện hiệu chỉnh vĩnh viễn, hãy thử hiệu chỉnh tạm thời để đảm bảo mọi thứ hoạt động tốt.",
|
||||
"Understood": "Đã hiểu",
|
||||
"Version": "Phiên bản",
|
||||
"Frequently Asked Questions": "Câu hỏi thường gặp",
|
||||
"Close": "Đóng",
|
||||
"Welcome to the F.A.Q. section! Below, you'll find answers to some of the most commonly asked questions about this website. If you have any other inquiries or need further assistance, feel free to reach out to me directly. Your feedback and questions are always welcome!": "Chào mừng đến với phần Câu hỏi thường gặp! Dưới đây, mày sẽ tìm thấy câu trả lời cho những câu hỏi phổ biến nhất về trang web này. Nếu mày có bất kỳ thắc mắc nào khác hoặc cần hỗ trợ thêm, hãy liên hệ trực tiếp với tao. Phản hồi và câu hỏi của mày luôn được chào đón!",
|
||||
"How does it work?": "Nó hoạt động như thế nào?",
|
||||
"Behind the scenes, this website is the culmination of one year of dedicated effort in reverse-engineering DualShock controllers for fun/hobby from a random guy on the internet.": "Đằng sau, trang web này là kết quả của một năm nỗ lực đảo ngược kỹ thuật (reverse-engineering) các tay cầm DualShock vì sở thích của một người bình thường trên mạng.",
|
||||
"Through": "Thông qua",
|
||||
"this research": "nghiên cứu này",
|
||||
", it was discovered that there exist some undocumented commands on DualShock controllers that can be sent via USB and are used during factory assembly process. If these commands are sent, the controller starts the recalibration of analog sticks.": ", đã phát hiện ra rằng có một số lệnh không được ghi lại trên các tay cầm DualShock có thể gửi qua USB và được sử dụng trong quá trình lắp ráp tại nhà máy. Các lệnh này sẽ khiến tay cầm bắt đầu hiệu chỉnh lại cần analog.",
|
||||
"While the primary focus of this research wasn't initially centered on recalibration, it became apparent that a service offering this capability could greatly benefit numerous individuals. And thus, here we are.": "Mặc dù trọng tâm chính của nghiên cứu này ban đầu không phải là hiệu chỉnh lại, nhưng rõ ràng là một dịch vụ cung cấp khả năng này có thể mang lại lợi ích lớn cho nhiều người. Và thế là, nó ra đời.",
|
||||
"Is this an officially endorsed service?": "Đây có phải là công cụ được chính thức xác nhận không?",
|
||||
"No, this service is simply a creation by a DualShock enthusiast.": "Không, công cụ này chỉ đơn thuần là sản phẩm của một người đam mê DualShock tạo ra.",
|
||||
"Does this website detect if a controller is a clone?": "Trang web này có phát hiện được tay cầm là hàng nhái không?",
|
||||
"Yes, only DualShock4 at the moment. This happened because I accidentally purchased some clones, spent time identifying the differences and added this functionality to prevent future deception.": "Có, hiện tại chỉ DualShock4. Tao đã vô tình mua phải hàng nhái, dành thời gian xác định sự khác biệt và thêm chức năng này để ngăn chặn lừa đảo trong tương lai. (Người dịch lưu ý: DualSense cũng có thể)",
|
||||
"Unfortunately, the clones cannot be calibrated anyway, because they only clone the behavior of a DualShock4 during normal gameplay, not all the undocumented functionalities.": "Thật không may, hàng nhái dù sao cũng không thể hiệu chỉnh được, vì chúng chỉ sao chép hành vi của DualShock4 trong khi chơi game bình thường, chứ không phải tất cả các chức năng không được ghi lại.",
|
||||
"If you want to extend this detection functionality to DualSense, please ship me a fake DualSense and you'll see it in few weeks.": "Nếu mày muốn mở rộng chức năng phát hiện này sang DualSense, vui lòng gửi cho tao một tay cầm DualSense giả và mày sẽ thấy nó hoạt động trong vài tuần.",
|
||||
"What development is in plan?": "Có kế hoạch phát triển nào không?",
|
||||
"I maintain two separate to-do lists for this project, although the priority has yet to be established.": "Tao có hai danh sách việc cần làm riêng biệt cho dự án này, dù chưa biết ưu tiên cái nào.",
|
||||
"The first list is about enhancing support for DualShock4 and DualSense controllers:": "Danh sách đầu tiên là về việc tăng cường hỗ trợ cho các tay cầm DualShock4 và DualSense:",
|
||||
"Implement calibration of L2/R2 triggers.": "Thực hiện hiệu chỉnh cò (trigger) L2/R2.",
|
||||
"Improve detection of clones, particularly beneficial for those seeking to purchase used controllers with assurance of authenticity.": "Cải thiện khả năng phát hiện hàng nhái, đặc biệt có lợi cho những người muốn mua tay cầm đã qua sử dụng với sự đảm bảo về tính xác thực.",
|
||||
"Add support for recalibrating IMUs.": "Thêm hỗ trợ hiệu chỉnh lại IMU (con quay hồi chuyển).",
|
||||
"Additionally, explore the possibility of reviving non-functioning DualShock controllers (further discussion available on Discord for interested parties).": "Ngoài ra, khám phá khả năng cứu chữa các tay cầm DualShock bị hỏng (thảo luận thêm có sẵn trên Discord cho những người quan tâm).",
|
||||
"The second list contains new controllers I aim to support:": "Danh sách thứ hai bao gồm các tay cầm mới mà tao dự định hỗ trợ:",
|
||||
"DualShock 3": "DualShock 3",
|
||||
"XBox Controllers": "Tay cầm Xbox",
|
||||
"Each of these tasks presents both immense interest and significant time investment. To provide context, supporting a new controller typically demands 6-12 months of full-time research, alongside a stroke of good fortune.": "Mỗi nhiệm vụ này đều có sự quan tâm lớn và đòi hỏi đầu tư thời gian đáng kể. Để mày dễ hình dung, việc hỗ trợ một tay cầm mới thường mất 6-12 tháng nghiên cứu toàn thời gian, cùng với một chút may mắn.",
|
||||
"I love this service, it helped me! How can I contribute?": "Web hiệu chỉnh này đỉnh quá! Tao muốn ủng hộ nhà phát triển!",
|
||||
"I'm glad to hear that you found this helpful! If you're interested in contributing, here are a few ways you can help me:": "Rất vui vì công cụ này giúp ích được cho mày! Nếu mày muốn đóng góp, đây là một vài cách mày có thể giúp tao:",
|
||||
"Consider making a": "Hãy cân nhắc ",
|
||||
"donation": "quyên góp",
|
||||
"to support my late-night caffeine-fueled reverse-engineering efforts.": "để ủng hộ những nỗ lực đảo ngược kỹ thuật thâu đêm với cà phê của tao.",
|
||||
"Ship me a controller you would love to add (send me an email for organization).": "Gửi cho tao một tay cầm mà mày muốn tao thêm vào (liên hệ qua email).",
|
||||
"Translate this website in your language": "Dịch trang web này sang ngôn ngữ của mày",
|
||||
", to help more people like you!": "để giúp đỡ nhiều người hơn như mày!",
|
||||
"This website uses analytics to improve the service.": "Trang web này sử dụng công cụ phân tích để cải thiện chất lượng dịch vụ.",
|
||||
"Board Model": "Mẫu bo mạch",
|
||||
"This DualSense controller has outdated firmware.": "Tay cầm DualSense này có firmware đã lỗi thời.",
|
||||
"Please update the firmware and try again.": "Vui lòng cập nhật firmware và thử lại.",
|
||||
"Joystick Info": "Thông tin Joystick",
|
||||
"Check circularity": "Kiểm tra độ tròn analog",
|
||||
"No.": "Không.",
|
||||
"Does this software resolve stickdrift?": "Phần mềm này có giải quyết được lỗi stick drift (trôi analog) không?",
|
||||
"Stickdrift is caused by a physical defect; namely dirt, worn potentiometer or in some cases a worn spring.": "Stick drift là do lỗi vật lý, thường là bụi bẩn, chiết áp bị mòn, hoặc đôi khi là lò xo bị mòn.",
|
||||
"After range calibration, joysticks always go in corners.": "Sau khi hiệu chỉnh phạm vi, analog bị trôi vào góc.",
|
||||
"This issue happens because you have clicked \"Done\" immediately after starting a range calibration.": "Vấn đề này xảy ra vì mày đã nhấp \"Hoàn thành\" ngay sau khi bắt đầu hiệu chỉnh phạm vi.",
|
||||
"Please read the instructions.": "Vui lòng đọc hướng dẫn.",
|
||||
"You have to rotate the joysticks before you press \"Done\".": "Mày phải xoay analog trước khi nhấn \"Hoàn thành\".",
|
||||
"Make sure to touch the edges of the joystick frame and rotate slowly, preferably in each direction - clockwise and anti-clockwise.": "Đảm bảo analog chạm vào viền khung và xoay chậm, tốt nhất là theo cả hai hướng - kim đồng hồ và ngược kim đồng hồ.",
|
||||
"Only after you have done that, you click on \"Done\".": "Chỉ sau khi mày làm xong, hãy nhấp vào \"Hoàn thành\".",
|
||||
"Changes saved successfully": "Thay đổi đã được lưu thành công.",
|
||||
"Error while saving changes": "Lỗi khi lưu thay đổi:",
|
||||
"Save changes permanently": "Lưu các thay đổi vĩnh viễn",
|
||||
"Reboot controller": "Khởi động lại tay cầm",
|
||||
"Controller Info": "Thông tin Tay cầm",
|
||||
"Debug Info": "Thông tin Gỡ lỗi",
|
||||
"Software": "Phần mềm",
|
||||
"Hardware": "Phần cứng",
|
||||
"FW Build Date": "Ngày Build FW",
|
||||
"FW Type": "Loại FW",
|
||||
"FW Series": "Series FW",
|
||||
"FW Version": "Phiên bản FW",
|
||||
"FW Update": "Cập nhật FW",
|
||||
"FW Update Info": "Thông tin Nâng cấp FW",
|
||||
"SBL FW Version": "Phiên bản FW SBL",
|
||||
"Venom FW Version": "Phiên bản FW Venom",
|
||||
"Spider FW Version": "Phiên bản FW Spider",
|
||||
"Touchpad FW Version": "Phiên bản FW Touchpad",
|
||||
"Serial Number": "Số seri",
|
||||
"MCU Unique ID": "ID duy nhất MCU",
|
||||
"PCBA ID": "ID PCBA",
|
||||
"Battery Barcode": "Mã vạch Pin",
|
||||
"VCM Left Barcode": "Mã vạch VCM Trái",
|
||||
"VCM Right Barcode": "Mã vạch VCM Phải",
|
||||
"HW Model": "Mẫu HW",
|
||||
"Touchpad ID": "ID Touchpad",
|
||||
"Bluetooth Address": "Địa chỉ Bluetooth",
|
||||
"Show all": "Hiển thị tất cả thông tin",
|
||||
"Finetune stick calibration": "Hiệu chỉnh analog tinh chỉnh",
|
||||
"(beta)": "(bản thử nghiệm)",
|
||||
"Left stick": "Analog trái (mV)",
|
||||
"Right stick": "Analog phải (mV)",
|
||||
"Cancel": "Hủy",
|
||||
"<b>Externally</b>: by applying +1.8V directly to the visible test point without opening the controller.": "<b>Bên ngoài</b>: Không cần mở tay cầm, cấp +1.8V trực tiếp vào điểm thử nghiệm (test point) có thể nhìn thấy.",
|
||||
"<b>Internally</b>: by soldering a wire from a +1.8V source to the write-protect TP.": "<b>Bên trong</b>: Hàn dây từ nguồn +1.8V đến TP bảo vệ ghi (write-protect TP).",
|
||||
"Calibration is being stored in the stick modules.": "Dữ liệu hiệu chỉnh đang được lưu vào các mô-đun analog.",
|
||||
"DualSense Edge Calibration": "Hiệu chỉnh DualSense Edge",
|
||||
"For more info or help, feel free to reach out on Discord.": "Cần thêm thông tin hoặc trợ giúp, hãy liên hệ trên Discord.",
|
||||
"More details and images": "Thêm chi tiết và hình ảnh",
|
||||
"Please note: the stick modules on the DS Edge <b>cannot be calibrated via software alone</b>.": "Xin lưu ý: các mô-đun analog trên DS Edge <b>không thể được hiệu chỉnh chỉ bằng phần mềm</b>.",
|
||||
"To store a custom calibration on the stick's internal memory, a <b>hardware modification</b> is required.": "Để lưu hiệu chỉnh tùy chỉnh vào bộ nhớ trong của analog, cần phải có một <b>thao tác phần cứng</b>.",
|
||||
"Support for calibrating DualSense Edge stick modules is now available as an <b>experimental feature</b>.": "Hỗ trợ hiệu chỉnh các mô-đun analog của DualSense Edge hiện đã có sẵn dưới dạng <b>tính năng thử nghiệm</b>.",
|
||||
"This involves temporarily disabling write protection by applying <b>+1.8V</b> to a specific test point on each module.": "Điều này liên quan đến việc tạm thời vô hiệu hóa bảo vệ ghi bằng cách cấp <b>+1.8V</b> vào một điểm thử nghiệm cụ thể trên mỗi mô-đun.",
|
||||
"This is only for advanced users. If you're not sure what you're doing, please do not attempt it.": "Điều này chỉ dành cho người dùng nâng cao. Nếu mày không chắc chắn mình đang làm gì, vui lòng không thử.",
|
||||
"We are not responsible for any damage caused by attempting this modification.": "Tao không chịu trách nhiệm cho bất kỳ thiệt hại nào do việc cố gắng thực hiện thao tác này.",
|
||||
"You can do this in two ways:": "Mày có thể làm điều này bằng hai cách:",
|
||||
"here": "tại đây",
|
||||
"If the calibration is not stored permanently, please double-check the wirings of the hardware mod.": "Nếu hiệu chỉnh không được lưu vĩnh viễn, vui lòng kiểm tra lại dây nối của mod phần cứng.",
|
||||
"Cannot lock": "Không thể khóa",
|
||||
"Cannot store data into": "Không thể lưu dữ liệu vào",
|
||||
"Cannot unlock": "Không thể mở khóa",
|
||||
"Color": "Màu sắc",
|
||||
"Left Module Barcode": "Mã vạch Mô-đun Trái",
|
||||
"Right Module Barcode": "Mã vạch Mô-đun Phải",
|
||||
"left module": "mô-đun trái",
|
||||
"right module": "mô-đun phải",
|
||||
"30th Anniversary": "Phiên bản Kỷ niệm 30 năm",
|
||||
"Astro Bot": "Astro Bot",
|
||||
"Cobalt Blue": "Xanh Cobalt",
|
||||
"Cosmic Red": "Đỏ Vũ trụ",
|
||||
"Galactic Purple": "Tím Thiên hà",
|
||||
"God of War Ragnarok": "God of War Ragnarok",
|
||||
"Grey Camouflage": "Rằn ri Xám",
|
||||
"Midnight Black": "Đen Huyền bí",
|
||||
"Nova Pink": "Hồng Nova",
|
||||
"Starlight Blue": "Xanh Ánh sao",
|
||||
"Sterling Silver": "Bạc Sterling",
|
||||
"Volcanic Red": "Đỏ Núi lửa",
|
||||
"White": "Trắng",
|
||||
"Chroma Indigo": "Chroma Indigo",
|
||||
"Chroma Pearl": "Chroma Pearl",
|
||||
"Chroma Teal": "Chroma Teal",
|
||||
"Fortnite": "Fortnite",
|
||||
"Spider-Man 2": "Spider-Man 2",
|
||||
"The Last of Us": "The Last of Us",
|
||||
"10x zoom": "Test tốc độ 10x",
|
||||
"Calibration": "Hiệu chỉnh",
|
||||
"Debug": "Gỡ lỗi",
|
||||
"Info": "Thông tin",
|
||||
"Normal": "Bình thường",
|
||||
"<strong>Average circularity error:</strong> smaller is not always better! Aim for 7-9 %.": "<strong>Lỗi độ tròn trung bình của analog</strong>: Bình thường nên dưới 9%.",
|
||||
"A reboot is needed to continue using this DualSense Edge. Please disconnect and reconnect your controller.": "Cần khởi động lại để tiếp tục sử dụng DualSense Edge này. Vui lòng ngắt kết nối và kết nối lại tay cầm.",
|
||||
"Adaptive Trigger": "Cò (Trigger) thích ứng",
|
||||
"Adaptive triggers are only supported on DualSense controllers": "Cò thích ứng chỉ được hỗ trợ trên tay cầm PS5",
|
||||
"Add test": "Thực hiện kiểm tra",
|
||||
"Be gentle to avoid damage.": "Thao tác nhẹ nhàng để tránh hư hỏng",
|
||||
"Buttons": "Nút bấm",
|
||||
"Center": "Tâm",
|
||||
"Center (L1)": "Tâm (L1)",
|
||||
"Circularity": "Độ tròn",
|
||||
"Circularity (R1)": "Độ tròn (R1)",
|
||||
"Controller does not support adaptive trigger control": "Tay cầm không hỗ trợ điều khiển cò thích ứng",
|
||||
"Don't show again": "Không hiển thị lại",
|
||||
"Fail": "Thất bại",
|
||||
"Failed": "Đã thất bại",
|
||||
"Failed to connect to device": "Không thể kết nối với thiết bị",
|
||||
"Failed to disable adaptive trigger": "Không thể tắt cò thích ứng",
|
||||
"Failed to set speaker tone": "Không thể đặt âm lượng loa",
|
||||
"Failed to set vibration": "Không thể đặt độ rung",
|
||||
"Feel for vibration in the controller.": "Cảm nhận độ rung của tay cầm",
|
||||
"Haptic Vibration": "Rung phản hồi",
|
||||
"Headphone Jack": "Jack tai nghe",
|
||||
"Increase non-circularity": "Tăng độ không tròn",
|
||||
"Instructions": "Hướng dẫn",
|
||||
"Keep rotating the sticks even if you see no progress!": "Tiếp tục xoay analog cho đến khi thanh tiến trình đầy",
|
||||
"Learn more...": "Tìm hiểu thêm...",
|
||||
"Lights": "Đèn",
|
||||
"Listen for a tone from the controller speaker.": "Lắng nghe âm báo từ loa tay cầm",
|
||||
"Long-press [circle] to skip ahead.": "Nhấn giữ [circle] để bỏ qua.",
|
||||
"Microphone": "Micrô",
|
||||
"Microphone Level:": "Mức Micrô",
|
||||
"Move the stick to select it for tuning, then without touching the stick use the D-pad buttons to adjust the center point. Flick it and adjust it again if it is off center or flickers.": "Di chuyển analog để chọn vị trí muốn điều chỉnh, sau đó sử dụng các nút D-pad để điều chỉnh điểm trung tâm (không cần chạm vào analog). Nếu tâm bị lệch, hãy gẩy nhẹ analog và điều chỉnh lại.",
|
||||
"No controller connected": "Chưa kết nối tay cầm nào",
|
||||
"No tests completed yet.": "Chưa hoàn thành bài kiểm tra nào",
|
||||
"Not tested": "Chưa kiểm tra",
|
||||
"Pass": "Đạt",
|
||||
"Passed": "Đã đạt",
|
||||
"Please release the stick to center position before adjusting with D-pad buttons.": "Vui lòng đảm bảo analog ở vị trí chính giữa trước khi điều chỉnh bằng các nút D-pad.",
|
||||
"Plug in headphones to the 3.5mm jack": "Cắm tai nghe vào cổng 3.5mm",
|
||||
"Press L2 and R2 triggers to feel the trigger resistance.": "Nhấn cò L2 và R2 để cảm nhận lực cản của cò",
|
||||
"Press [circle] to close, or [square] to start over": "Nhấn [circle] để đóng, hoặc [square] để bắt đầu lại",
|
||||
"Press [square] to Pass, [cross] to Fail, or [circle] to skip.": "Nhấn [square] để Đạt, [cross] để Lỗi, hoặc [circle] để bỏ qua.",
|
||||
"Press [square] to begin or [circle] to close": "Nhấn [square] để bắt đầu hoặc [circle] để đóng",
|
||||
"Press [triangle] to go back.": "Nhấn [triangle] để quay lại.",
|
||||
"Press each button until they turn green.": "Nhấn từng nút cho đến khi chúng chuyển sang màu xanh lá cây",
|
||||
"Press the D-pad or face buttons in the direction you want the stick position to move.": "Nhấn D-pad hoặc các nút mặt theo hướng mày muốn vị trí analog di chuyển.",
|
||||
"Progress": "Tiến trình",
|
||||
"Push the stick straight up/down/left/right as far as possible.": "Đẩy analog thẳng lên/xuống/trái/phải hết mức có thể.",
|
||||
"Quick Test": "Kiểm tra nhanh",
|
||||
"Quick calibrate": "Hiệu chỉnh nhanh",
|
||||
"Range calibration appears to have failed. Please try again and make sure you rotate the sticks.": "Hiệu chỉnh phạm vi thất bại. Vui lòng thử lại và đảm bảo đã xoay analog.",
|
||||
"Repeat": "Lặp lại",
|
||||
"Restart": "Khởi động lại",
|
||||
"Rotate the sticks slowly at least 2 times in one direction and 2 times in the other direction to cover the whole range.": "Xoay analog chậm rãi ít nhất 2 lần theo một hướng và 2 lần theo hướng ngược lại để bao phủ toàn bộ phạm vi.",
|
||||
"Run through these tests to verify your controller's functionality.": "Thực hiện các bài kiểm tra này để kiểm tra chức năng của tay cầm.",
|
||||
"Show raw numbers": "Hiển thị dữ liệu thô",
|
||||
"Sony controllers come from the factory calibrated to have an average circularity error of nearly 10 %, and this is now what games expect. Too perfect circularity can make movements and aim feel stiff and unresponsive in some games.": "Các tay cầm Sony xuất xưởng được hiệu chỉnh với lỗi độ tròn trung bình gần 10%, và đây là điều mà các trò chơi mong đợi. Độ tròn quá hoàn hảo có thể khiến chuyển động và ngắm bắn cảm thấy cứng và kém phản hồi trong một số trò chơi.",
|
||||
"Speaker": "Loa",
|
||||
"Step size": "Kích thước bước",
|
||||
"Test Speaker": "Kiểm tra Loa",
|
||||
"Test Summary": "Tóm tắt Kiểm tra",
|
||||
"Test all buttons, or long-press [square] to Pass and [cross] to Fail, or [circle] to skip.": "Kiểm tra tất cả các nút, hoặc nhấn giữ [square] để Đạt, [cross] để Lỗi, hoặc [circle] để bỏ qua.",
|
||||
"The <b>Done</b> button will unlock after at most 15 seconds. If you press <b>Done</b> without rotating the sticks, the calibration will be incomplete and you will need to repeat it.": "Nút <b>Hoàn thành</b> sẽ mở khóa sau tối đa 15 giây. Nếu mày nhấn <b>Hoàn thành</b> mà không xoay analog, hiệu chỉnh sẽ không hoàn tất và mày cần phải lặp lại.",
|
||||
"The device is connected via Bluetooth. Disconnect and reconnect using a USB cable instead.": "Tay cầm đang được kết nối bằng Bluetooth. Vui lòng ngắt kết nối và kết nối lại bằng cáp USB.",
|
||||
"This test checks all controller buttons by requiring you to press each button up to three times.": "Bài kiểm tra này kiểm tra tất cả các nút bấm của tay cầm bằng cách yêu cầu mày nhấn mỗi nút tối đa ba lần.",
|
||||
"This test checks the headphone jack functionality.": "Bài kiểm tra này kiểm tra chức năng của jack tai nghe.",
|
||||
"This test checks the reliability of the USB port.": "Bài kiểm tra này kiểm tra cổng USB có hoạt động bình thường không.",
|
||||
"This test will cycle through red, green, and blue colors on the controller lightbar, animate the player indicator lights, and flash the mute button.": "Bài kiểm tra này sẽ chuyển đổi qua các màu đỏ, xanh lá, và xanh dương trên thanh đèn của tay cầm, tạo hiệu ứng đèn báo người chơi, và làm nút tắt tiếng nhấp nháy.",
|
||||
"This test will enable heavy resistance on both L2 and R2 triggers.": "Bài kiểm tra này sẽ kích hoạt lực cản nặng trên cả cò L2 và R2.",
|
||||
"USB Connector": "Cổng kết nối USB",
|
||||
"Watch the controller lights change colors, the player lights animate, and the mute button flash.": "Quan sát đèn tay cầm đổi màu, đèn báo người chơi chuyển động, và nút tắt tiếng có nhấp nháy không.",
|
||||
"While holding the stick to be adjusted straight up/down/left/right, make adjustments until you see lightblue sectors in all four directions after circling the stick both left and right. Then use the": "Trong khi giữ analog cần điều chỉnh thẳng lên/xuống/trái/phải, thực hiện điều chỉnh cho đến khi mày thấy các khu vực màu xanh nhạt ở cả bốn hướng sau khi xoay tròn analog sang cả trái và phải. Sau đó dùng",
|
||||
"Wiggle the USB cable to see if the controller disconnects.": "Lắc nhẹ cáp USB để kiểm tra tay cầm có bị ngắt kết nối không.",
|
||||
"Your device might not be a genuine Sony controller. If it is not a clone then please report this issue.": "Tay cầm này có thể không phải là tay cầm Sony chính hãng.",
|
||||
"failed": "thất bại",
|
||||
"hide": "ẩn",
|
||||
"passed": "đã đạt",
|
||||
"skipped": "đã bỏ qua",
|
||||
"tests completed": "bài kiểm tra đã hoàn thành",
|
||||
"to increase the non-circularity.": "để tăng độ không tròn.",
|
||||
"(DualSense & DualSense Edge) Will updating the firmware reset calibration?": "",
|
||||
"(DualSense Edge) Is the calibration stored on the controller or the modules?": "",
|
||||
"A sample test was done with 30 dualsense edge modules, and the results showed that the inner quartile range (IQR) is 8.3% and 9.0%, with an average of 8.6%. This goes to show that stock controllers by default have a relatively high range, and the rule of thumb is to follow factory calibration.": "",
|
||||
"After they have been replaced, this utility can be used to calibrate the controller to work with the new joysticks.": "",
|
||||
"Aim for a circularity error of around 7-9 % for the best playing experience.": "",
|
||||
"Battery level is low. Tests may fail due to the controller being in power saving mode.": "",
|
||||
"Calibrating without replacing the joysticks may help temporarily, but it may also make the problem worse, with no way to undo it.": "",
|
||||
"Calibration History": "",
|
||||
"Can I overwrite a (permanent) calibration?": "",
|
||||
"Can I restore a previous calibration?": "",
|
||||
"Cannot copy text to the clipboard:": "",
|
||||
"Cannot read module barcodes": "",
|
||||
"Clear All": "",
|
||||
"Current": "",
|
||||
"Delete": "",
|
||||
"Delete all calibration history for this controller? This cannot be undone.": "",
|
||||
"Delete this calibration entry?": "",
|
||||
"Drift is caused by mechanical parts in the joystick being worn out, and they need to be replaced to fix the drift.": "",
|
||||
"Finetuning is only available for DualSense and DualSense Edge.": "",
|
||||
"Firefox is supported with the WebHID extension installed.": "",
|
||||
"God of War 20th Anniversary": "",
|
||||
"Housing": "",
|
||||
"How do I use the finetuning feature?": "",
|
||||
"If you don't have a battery connected or the connected battery is empty, AND your cable disconnects during saving the calibration, then your controller has a high chance of being bricked.": "",
|
||||
"If you have not clicked the green button \"Save changes permanently\", then unplugging the controller will reset to the previously saved calibration. It is recommended you test your calibration before saving.": "",
|
||||
"If you have saved the changes permanently, you can reset the changes only if you are using a DualSense or DualSense Edge. You can click on the grey button \"Restore Calibration\" to go back to one of the previous calibrations that was saved on the controller. Known issue: You may need to reboot your controller first in order for previous calibrations to show up.": "",
|
||||
"Image 1": "",
|
||||
"Images": "",
|
||||
"In most cases, calibrating your joysticks that have prior drift issues may result in a worse and unpredictable calibration.": "",
|
||||
"It appears the latest joystick calibration has not been saved.": "",
|
||||
"Last connected": "",
|
||||
"No saved calibrations found.": "",
|
||||
"Not shown in the video: You can now also increase the range in each direction uniformly by using the cross in the top right and moving the slider up, which may speed up finetuning. Make sure to rotate the joystick first, otherwise the button cannot be pressed.": "",
|
||||
"Only official controllers are supported, no third-party or \"fake\" controllers.": "",
|
||||
"Option 1": "",
|
||||
"Option 2": "",
|
||||
"PlayStation Virtual Reality 2": "",
|
||||
"Please connect a DualShock 4, a DualSense, DualSense Edge or VR2 controller to your computer and press Connect.": "",
|
||||
"Please use a web browser with WebHID support (e.g. Google Chrome or Microsoft Edge) on a PC or Mac.": "",
|
||||
"Restore": "",
|
||||
"Restore calibration": "",
|
||||
"Saving calibration is locked by default on DualSense Edge joystick modules. A hardware mod is required to save the calibration permanently. The calibration is saved on the modules themselves, so you have to perform the mod twice: once for each module. You would need to bridge two points on the PCB with enamelled wire. There are multiple methods, I personally recommend using either of these two locations to solder the wire to. See images below. Ensure the wire is thin enough so that the shell is closed properly. Make sure you don't short the wire to ground through the letters near the bottom joint.": "",
|
||||
"Sony DualShock 4": "",
|
||||
"The calibration is stored on each module individually. It is carried over if you place the modules in a different DualSense Edge. Likewise, if you place a different set of modules in your DualSense Edge, you will get a different calibration that is tied to those new modules.": "",
|
||||
"The calibration was restored successfully! Remember to save the changes in order not to loose them when the controller is rebooted.": "",
|
||||
"The finetuning and quick test menus are only accessible for DualSense and DualSense Edge.": "",
|
||||
"The item has been copied to the clipboard.": "",
|
||||
"The website supports the following official controllers:": "",
|
||||
"These previous calibrations are stored locally in your browser's storage. Meaning you can only restore calibrations using the same computer and browser that you used to calibrate it with, and deleting the cache or using Incognito will make any previous calibration irrecoverable.": "",
|
||||
"This controller has unsaved changes that will be lost when the controller is rebooted.": "",
|
||||
"This software is not intended to fix stickdrift and will <b>not</b> fix stickdrift on its own if you already experience that.": "",
|
||||
"This utility cannot fix stick drift.": "",
|
||||
"This video from V2.16 shows how to use the finetuning menu.": "",
|
||||
"Unsupported browser.": "",
|
||||
"Use expert mode": "",
|
||||
"Use four-step calibration": "",
|
||||
"Use normal mode": "",
|
||||
"Use quick calibration": "",
|
||||
"Using this utility on a phone or tablet is not supported.": "",
|
||||
"Values": "",
|
||||
"We recommend a circularity between 7% and 9%. The reason for this is to mimic a stock controllers calibration. However, symmetrical overshoot is more important and if you need to deviate from this range to achieve better symmetry, that is fine too.": "",
|
||||
"What are the risks of using the calibration?": "",
|
||||
"What circularity percentage to aim for when calibrating and finetuning.": "",
|
||||
"What the software will help with, is ensuring new joysticks will function properly after replacing the old broken joysticks that drift. This step involves opening up the controller and soldering new potentiometers or an entire new joystick.": "",
|
||||
"When calibrating, there is no risk. However, if your controller disconnects during the split second that you save a calibration, then you have a chance of bricking your controller. Make sure your battery has enough charge and is plugged into the controller, and the USB cable is securely connected. This prevents your controller from being bricked if the USB cable accidentally disconnects.": "",
|
||||
"Which controllers does DualShock Calibration GUI support?": "",
|
||||
"Yes. Simply do another calibration, and click the green button to save permanently.": "",
|
||||
"You should save your changes, or reboot the controller to revert back to the previous state.": "",
|
||||
"serial number": "",
|
||||
"": ""
|
||||
}
|
||||
395
lang/zh_cn.json
@@ -1,26 +1,18 @@
|
||||
{
|
||||
".authorMsg": "- 中文翻译由 <a href='https://github.com/Yyiyun'>Eythavon</a> 提供",
|
||||
"DualShock Calibration GUI": "手柄校准界面",
|
||||
"Unsupported browser. Please use a web browser with WebHID support (e.g. Chrome).": "不支持的浏览器。请使用支持 WebHID 的浏览器 (例如 Chrome)。",
|
||||
"Connect a DualShock 4 or a DualSense controller to your computer and press Connect.": "将 DualShock 4 或 DualSense 手柄连接到您的计算机,然后按下连接。",
|
||||
".authorMsg": "- 中文翻译由 <a href='https://github.com/Yyiyun'>Eythavon</a> <a href='https://space.bilibili.com/7173897'>坩埚钳特大号</a> <a href='https://space.bilibili.com/185181540'>修手柄的小丁</a> <a href='https://space.bilibili.com/1871691558'>秋月筱翊</a> 提供 请不要相信镜像网站上的广告 请认准源网站 https://dualshock-tools.github.io/",
|
||||
"DualShock Calibration GUI": "DualShock手柄校准工具",
|
||||
"Connect": "连接",
|
||||
"Connected to:": "连接至:",
|
||||
"Disconnect": "断开连接",
|
||||
"Firmware Info": "固件信息",
|
||||
"Calibrate stick center": "校准摇杆中心",
|
||||
"Calibrate stick range (permanent)": "校准摇杆外圈 (永久)",
|
||||
"Calibrate stick range (temporary)": "校准摇杆外圈 (临时)",
|
||||
"Reset controller": "重置手柄",
|
||||
"Sections below are not useful, just some debug infos or manual commands": "以下部分没有用处,只是一些调试信息或手动命令",
|
||||
"Calibrate stick range": "校准摇杆外圈",
|
||||
"Sections below are not useful, just some debug infos or manual commands": "以下项目正常情况下没有用处,只是一些调试信息或隐藏命令等。",
|
||||
"NVS Status": "NVS 状态",
|
||||
"Unknown": "未知",
|
||||
"BD Addr": "BD 地址",
|
||||
"Debug buttons": "调试按钮",
|
||||
"Query NVS status": "查询 NVS 状态",
|
||||
"NVS unlock": "解锁 NVS",
|
||||
"NVS lock": "锁定 NVS",
|
||||
"Get BDAddr": "获取 BD 地址",
|
||||
"Fast calibrate stick center (OLD)": "快速校准摇杆中心 (旧版)",
|
||||
"Stick center calibration": "摇杆中心校准",
|
||||
"Welcome": "欢迎",
|
||||
"Step 1": "步骤 1",
|
||||
@@ -28,92 +20,345 @@
|
||||
"Step 3": "步骤 3",
|
||||
"Step 4": "步骤 4",
|
||||
"Completed": "已完成",
|
||||
"Welcome to the stick center-calibration wizard!": "欢迎使用摇杆中心校准向导!",
|
||||
"This tool will guide you in re-centering the analog sticks of your controller. It consists in four steps: you will be asked to move both sticks in a direction and release them.": "此工具将指导您重新定位手柄的模拟摇杆。 它包括四个步骤:您将被要求将两个摇杆移动到一个方向并释放它们。",
|
||||
"Please be aware that, <i>once the calibration is running, it cannot be canceled</i>. Do not close this page or disconnect your controller until is completed.": "请注意,<i>一旦校准开始,就无法取消</i>。 在完成之前,请不要关闭此页面或断开手柄的连接。",
|
||||
"Calibration storage": "校准存储",
|
||||
"By default the calibration is only saved in a volatile storage, so that if you (or this tool) mess something up, a reset of the controller is enough to make it work again.": "默认情况下,校准仅保存在易失性存储器中,因此,如果您(或此工具)出错,重新设置手柄就足以使其再次工作。",
|
||||
"If you wish to store the calibration permanently in the controller, tick the checkbox below:": "如果您希望永久保存校准数据到手柄中,请在下方的复选框中打勾:",
|
||||
"Write changes permanently in the controller": "将更改永久写入手柄中",
|
||||
"<small>Warning: <font color=\"red\">Do not store the calibration permanently if the controller battery is low or disconnected. It will damage your controller.</font></small>": "<small>警告:<font color='red'>如果手柄电池电量低或断开连接,请勿永久存储校准数据。这将损坏您的手柄。</font></small>",
|
||||
"Welcome to the stick center-calibration wizard!": "欢迎使用摇杆中心校准工具!",
|
||||
"This tool will guide you in re-centering the analog sticks of your controller. It consists of four steps: you will be asked to move both sticks in a direction and release them.": "此工具会引导你校准摇杆中心。 你需要将两个摇杆同时推向某个方向然后松开,且要重复这个步骤四次。",
|
||||
"Please be aware that, <i>once the calibration is running, it cannot be canceled</i>. Do not close this page or disconnect your controller until it is completed.": "请注意,<i>一旦校准开始,就无法取消</i>。 在完成之前,请不要关闭此页面或断开手柄连接。",
|
||||
"Press <b>Start</b> to begin calibration.": "按 <b>开始</b> 开始校准。",
|
||||
"Please move both sticks to the <b>top-left corner</b> and release them.": "请将两个摇杆移动到 <b>左上角</b> 并释放它们。",
|
||||
"Please move both sticks to the <b>top-left corner</b> and release them.": "请将两个摇杆移动到 <b>左上角</b> 然后松手。",
|
||||
"When the sticks are back in the center, press <b>Continue</b>.": "当摇杆回到中心位置时,按 <b>继续</b>。",
|
||||
"Please move both sticks to the <b>top-right corner</b> and release them.": "请将两个摇杆移动到 <b>右上角</b> 并释放它们。",
|
||||
"Please move both sticks to the <b>bottom-left corner</b> and release them.": "请将两个摇杆移动到 <b>左下角</b> 并释放它们。",
|
||||
"Please move both sticks to the <b>bottom-right corner</b> and release them.": "请将两个摇杆移动到 <b>右下角</b> 并释放它们。",
|
||||
"Please move both sticks to the <b>top-right corner</b> and release them.": "请将两个摇杆移动到 <b>右上角</b> 然后松手。",
|
||||
"Please move both sticks to the <b>bottom-left corner</b> and release them.": "请将两个摇杆移动到 <b>左下角</b> 然后松手。",
|
||||
"Please move both sticks to the <b>bottom-right corner</b> and release them.": "请将两个摇杆移动到 <b>右下角</b> 然后松手。",
|
||||
"Calibration completed successfully!": "校准成功完成!",
|
||||
"Next": "下一步",
|
||||
"Recentering the controller sticks. ": "重新定位手柄摇杆。 ",
|
||||
"Recentering the controller sticks.": "重新定位摇杆中心。",
|
||||
"Please do not close this window and do not disconnect your controller. ": "请不要关闭此窗口,也不要断开手柄的连接。 ",
|
||||
"Range calibration": "摇杆外圈校准",
|
||||
"<b>The controller is now sampling data!</b>": "<b>手柄现在正在采样数据!</b>",
|
||||
"Rotate the sticks slowly to cover the whole range. Press \"Done\" when completed.": "缓慢转动摇杆以覆盖整个范围。 完成后按 \"完成\"。",
|
||||
"The controller is now sampling data!": "手柄现在正在采样数据!",
|
||||
"Done": "完成",
|
||||
"Hi, thank you for using this software.": "嗨,感谢您使用此软件。",
|
||||
"If you're finding it helpful and you want to support my efforts, feel free to": "如果您觉得有帮助,并且想支持我的努力,请随时",
|
||||
"buy me a coffee": "请我喝咖啡",
|
||||
"If you're finding it helpful and you want to support my efforts, feel free to": "如果你觉得这些对你有帮助,想支持一下我,随时欢迎!",
|
||||
"buy me a coffee": "赞助一杯卡布奇诺",
|
||||
"! :)": "! :)",
|
||||
"Do you have any suggestion or issue? Drop me a message via email or discord.": "您有任何建议或问题吗?通过电子邮件或 Discord 给我留言。",
|
||||
"Do you have any suggestion or issue? Drop me a message via email or discord.": "有任何建议或问题?可以通过电子邮件或 Discord 给我留言。",
|
||||
"Cheers!": "干杯!",
|
||||
"Support this project": "支持此项目",
|
||||
|
||||
"unknown": "未知",
|
||||
"original": "原始",
|
||||
"clone": "克隆",
|
||||
"unknown": "未知设备",
|
||||
"original": "原厂正品",
|
||||
"clone": "盗版仿品",
|
||||
"locked": "已锁定",
|
||||
"unlocked": "已解锁",
|
||||
"error": "错误",
|
||||
"Build Date:": "构建日期:",
|
||||
"HW Version:": "硬件版本:",
|
||||
"SW Version:": "软件版本:",
|
||||
"Device Type:": "设备类型:",
|
||||
"Firmware Type:": "固件类型:",
|
||||
"SW Series:": "软件系列:",
|
||||
"HW Info:": "硬件信息:",
|
||||
"SW Version:": "软件版本:",
|
||||
"UPD Version:": "更新版本:",
|
||||
"FW Version1:": "固件版本1:",
|
||||
"FW Version2:": "固件版本2:",
|
||||
"FW Version3:": "固件版本3:",
|
||||
|
||||
"Build Date": "构建日期",
|
||||
"HW Version": "硬件版本",
|
||||
"SW Version": "软件版本",
|
||||
"Device Type": "设备类型",
|
||||
"Range calibration completed": "摇杆外圈校准已完成",
|
||||
"Range calibration failed: ": "摇杆外圈校准失败: ",
|
||||
"Cannot unlock NVS": "无法解锁 NVS",
|
||||
"Cannot relock NVS": "无法重新锁定 NVS",
|
||||
"Error 1": "错误 1",
|
||||
"Error 2": "错误 2",
|
||||
"Error 3": "错误 3",
|
||||
"Stick calibration failed: ": "摇杆校准失败: ",
|
||||
"Range calibration failed": "摇杆外圈校准失败",
|
||||
"Stick calibration failed": "摇杆校准失败",
|
||||
"Stick calibration completed": "摇杆校准完成",
|
||||
"NVS Lock failed: ": "NVS 锁定失败: ",
|
||||
"NVS Unlock failed: ": "NVS 解锁失败: ",
|
||||
"Please connect only one controller at time.": "请一次只连接一个手柄。",
|
||||
"Sony DualShock 4 V1": "Sony DualShock 4 V1",
|
||||
"Sony DualShock 4 V2": "Sony DualShock 4 V2",
|
||||
"Sony DualSense": "Sony DualSense",
|
||||
"Sony DualSense Edge": "Sony DualSense Edge",
|
||||
"Connected invalid device: ": "连接了无效设备: ",
|
||||
"Calibration of the DualSense Edge is not currently supported.": "目前不支持对 DualSense Edge 的校准。",
|
||||
"The device appears to be a DS4 clone. All functionalities are disabled.": "该设备似乎是 DS4 克隆。所有功能均已禁用。",
|
||||
"Error: ": "错误: ",
|
||||
"My handle on discord is: the_al": "我的 Discord 用户名是: the_al",
|
||||
"NVS Lock failed": "NVS 锁定失败",
|
||||
"NVS Unlock failed": "NVS 解锁失败",
|
||||
"Please connect only one controller at time.": "一次只能连接一个手柄。",
|
||||
"Sony DualShock 4 V1": "PS4手柄一代(Sony DualShock 4 V1)",
|
||||
"Sony DualShock 4 V2": "PS4手柄二代(Sony DualShock 4 V2)",
|
||||
"Sony DualSense": "PS5手柄(Sony DualSense)",
|
||||
"Sony DualSense Edge": "PS5精英手柄/DSE(Sony DualSense Edge)",
|
||||
"Connected invalid device": "连接了无效设备",
|
||||
"Error": "错误",
|
||||
"Initializing...": "初始化...",
|
||||
"Storing calibration...": "正在存储校准...",
|
||||
"Storing calibration...": "正在保存校准...",
|
||||
"Sampling...": "采样中...",
|
||||
"Calibration in progress": "校准进行中",
|
||||
"Start": "开始",
|
||||
"Done": "完成",
|
||||
"Continue": "继续",
|
||||
"You can check the calibration with the": "您可以通过以下方式检查校准",
|
||||
"Have a nice day :)": "祝您有美好的一天! :)",
|
||||
"Welcome to the Calibration GUI": "欢迎使用校准 GUI",
|
||||
"Just few things to know before you can start:": "在开始之前,有几件事情需要了解:",
|
||||
"Have a nice day :)": "祝你好运! :)",
|
||||
"Welcome to the Calibration GUI": "欢迎使用校准工具",
|
||||
"Just few things to know before you can start:": "在开始之前,请知晓以下事项:",
|
||||
"This website is not affiliated with Sony, PlayStation & co.": "此网站与 Sony、PlayStation 等无关。",
|
||||
"This service is provided without warranty. Use at your own risk.": "此服务不附带任何保修。使用需自负风险。",
|
||||
"Keep the internal battery of the controller connected and ensure it is well charged. If the battery dies during operations, the controller will be damaged and rendered unusable.": "保持手柄的内部电池连接,并确保其充电充足。如果在操作过程中电池电量耗尽,手柄将受损并无法使用。",
|
||||
"This service is provided without warranty. Use at your own risk.": "此服务不附带保修,使用需自负风险。",
|
||||
"Keep the internal battery of the controller connected and ensure it is well charged. If the battery dies during operations, the controller will be damaged and rendered unusable.": "手柄内置电池需插上主板,且保持电量充足。如果在过程中电池电量耗尽,手柄会受损并无法使用。",
|
||||
"Before doing the permanent calibration, try the temporary one to ensure that everything is working well.": "在进行永久校准之前,先尝试临时校准以确保一切正常。",
|
||||
"Understood": "知道了",
|
||||
"Version": "版本",
|
||||
"Frequently Asked Questions": "常见问题",
|
||||
"Close": "关闭",
|
||||
"Welcome to the F.A.Q. section! Below, you'll find answers to some of the most commonly asked questions about this website. If you have any other inquiries or need further assistance, feel free to reach out to me directly. Your feedback and questions are always welcome!": "欢迎来到常见问题的解答部分!在下面,您将找到关于本网站常见问题的答案。如果您有任何其他疑问或者需要进一步的帮助,请随时直接联系我。欢迎您的反馈和提问!",
|
||||
"How does it work?": "它是如何运行的?",
|
||||
"Behind the scenes, this website is the culmination of one year of dedicated effort in reverse-engineering DualShock controllers for fun/hobby from a random guy on the internet.": "这个网站是网上一个普通人花费了一年时间为了兴趣爱好而逆向DualShock手柄的劳动结晶。",
|
||||
"Through": "通过",
|
||||
"this research": "这个研究",
|
||||
", it was discovered that there exist some undocumented commands on DualShock controllers that can be sent via USB and are used during factory assembly process. If these commands are sent, the controller starts the recalibration of analog sticks.": ",我们发现DualShock手柄上存在一些隐藏命令,这些命令只在工厂校准期间使用,且是通过USB传输。我们可以利用这些命令让手柄重新校准摇杆。",
|
||||
"While the primary focus of this research wasn't initially centered on recalibration, it became apparent that a service offering this capability could greatly benefit numerous individuals. And thus, here we are.": "虽然最初我们并不是为了校准摇杆,但很明显,提供校准服务可以极大地惠及许多人。所以你就看到这个网站了。",
|
||||
"Is this an officially endorsed service?": "索尼官方认可这个吗?",
|
||||
"No, this service is simply a creation by a DualShock enthusiast.": "不,这只是一个DualShock爱好者的小创作。",
|
||||
"Does this website detect if a controller is a clone?": "这个网站能检测到手柄是否是正品吗?",
|
||||
"Yes, only DualShock4 at the moment. This happened because I accidentally purchased some clones, spent time identifying the differences and added this functionality to prevent future deception.": "可以,但目前只能检测DualShock4手柄,因为我之前不小心买到了一些仿品,从而浪费了些时间,所以添加了这个功能以防止还有人被骗。",
|
||||
"Unfortunately, the clones cannot be calibrated anyway, because they only clone the behavior of a DualShock4 during normal gameplay, not all the undocumented functionalities.": "当然,盗版仿品不能进行校准,因为它们只会模仿正品手柄的功能,而没有正品手柄的那些隐藏命令。",
|
||||
"If you want to extend this detection functionality to DualSense, please ship me a fake DualSense and you'll see it in few weeks.": "如果你希望我也加上检测DualSense手柄是否正品,那你可以给我寄个假的DualSense,过个几周我就会加上。(言外之意:目前DS5手柄还没有盗版)",
|
||||
"What development is in plan?": "有什么发展计划吗?",
|
||||
"I maintain two separate to-do lists for this project, although the priority has yet to be established.": "我在这个项目上还有两件想要的功能,虽然不知道先做哪个。",
|
||||
"The first list is about enhancing support for DualShock4 and DualSense controllers:": "首先是继续加强对DualShock4和DualSense手柄的支持:",
|
||||
"Implement calibration of L2/R2 triggers.": "实现L2/R2扳机的校准。",
|
||||
"Improve detection of clones, particularly beneficial for those seeking to purchase used controllers with assurance of authenticity.": "改进对盗版仿品的检测,对那些希望购买原装二手手柄的人特别有益。",
|
||||
"Add support for recalibrating IMUs.": "添加重新校准陀螺仪功能。",
|
||||
"Additionally, explore the possibility of reviving non-functioning DualShock controllers (further discussion available on Discord for interested parties).": "此外,研究抢救挂掉的的DualShock手柄的可能(你也对此感兴趣的话,可以来Discord进一步讨论)。",
|
||||
"The second list contains new controllers I aim to support:": "然后,添加一些新手柄的支持:",
|
||||
"DualShock 3": "DualShock 3",
|
||||
"XBox Controllers": "XBox 手柄",
|
||||
"Each of these tasks presents both immense interest and significant time investment. To provide context, supporting a new controller typically demands 6-12 months of full-time research, alongside a stroke of good fortune.": "不过,每项任务都需要巨大的兴趣和时间投入,为了支持一个新的手柄,也许需要6-12个月的全职研究,同时还需要足够的运气才行。",
|
||||
"I love this service, it helped me! How can I contribute?": "你这个网页校准太吊了!我要给你爆米!",
|
||||
"I'm glad to hear that you found this helpful! If you're interested in contributing, here are a few ways you can help me:": "很高兴本工具能帮到你!如果你有兴趣支持我,可以通过以下途径:",
|
||||
"Consider making a": "你可以通过",
|
||||
"donation": "捐赠",
|
||||
"to support my late-night caffeine-fueled reverse-engineering efforts.": "来支持我拉满咖啡干逆向的一个个夜晚。",
|
||||
"Ship me a controller you would love to add (send me an email for organization).": "给我寄一个你想添加的手柄(记得先邮件联系)。",
|
||||
"Translate this website in your language": "帮我们改进翻译",
|
||||
", to help more people like you!": ",以此帮助更多像你一样的人!",
|
||||
"This website uses analytics to improve the service.": "该网站使用分析工具来提升服务质量。",
|
||||
"Board Model": "主板型号",
|
||||
"This DualSense controller has outdated firmware.": "该DualSense手柄的固件已过时。",
|
||||
"Please update the firmware and try again.": "请更新固件后重试。",
|
||||
"Joystick Info": "摇杆信息",
|
||||
"Check circularity": "测试摇杆外圈",
|
||||
"No.": "不可以。",
|
||||
"Does this software resolve stickdrift?": "这东西能修复摇杆漂移吗?",
|
||||
"Stickdrift is caused by a physical defect; namely dirt, worn potentiometer or in some cases a worn spring.": "摇杆漂移是由物理缺陷引起的,比如进灰、电位器磨损,乃至弹簧不回弹。",
|
||||
"After range calibration, joysticks always go in corners.": "校准外圈后摇杆乱飞。",
|
||||
"This issue happens because you have clicked \"Done\" immediately after starting a range calibration.": "可能是因为你在开始校准外圈后就马上点了“完成”按钮。",
|
||||
"Please read the instructions.": "请跟着说明来。",
|
||||
"You have to rotate the joysticks before you press \"Done\".": "在按“完成”之前,你要先转一会摇杆。",
|
||||
"Make sure to touch the edges of the joystick frame and rotate slowly, preferably in each direction - clockwise and anti-clockwise.": "摇杆要碰到最外圈,且要慢慢地旋转,最好顺时针和逆时针方向都各旋转几圈。",
|
||||
"Only after you have done that, you click on \"Done\".": "完成上述操作后,才能点“完成”按钮。",
|
||||
"Changes saved successfully": "更改已成功保存。",
|
||||
"Error while saving changes": "保存更改时出错",
|
||||
"Save changes permanently": "永久保存更改",
|
||||
"Reboot controller": "重启手柄",
|
||||
"Controller Info": "手柄信息",
|
||||
"Debug Info": "调试信息",
|
||||
"Software": "软件",
|
||||
"Hardware": "硬件",
|
||||
"FW Build Date": "固件构建日期",
|
||||
"FW Type": "固件类型",
|
||||
"FW Series": "固件系列",
|
||||
"FW Version": "固件版本",
|
||||
"FW Update": "固件更新",
|
||||
"FW Update Info": "固件升级信息",
|
||||
"SBL FW Version": "SBL固件版本",
|
||||
"Venom FW Version": "Venom固件版本",
|
||||
"Spider FW Version": "Spider固件版本",
|
||||
"Touchpad FW Version": "触摸板固件版本",
|
||||
"Serial Number": "序列号",
|
||||
"MCU Unique ID": "MCU唯一ID",
|
||||
"PCBA ID": "PCBA ID",
|
||||
"Battery Barcode": "电池条形码",
|
||||
"VCM Left Barcode": "左音圈马达条形码",
|
||||
"VCM Right Barcode": "右音圈马达条形码",
|
||||
"HW Model": "硬件型号",
|
||||
"Touchpad ID": "触摸板ID",
|
||||
"Bluetooth Address": "蓝牙地址",
|
||||
"Show all": "显示全部",
|
||||
"Finetune stick calibration": "微调摇杆校准",
|
||||
"(beta)": "测试版本",
|
||||
"Left stick": "左摇杆",
|
||||
"Right stick": "右摇杆",
|
||||
"Cancel": "取消",
|
||||
"<b>Externally</b>: by applying +1.8V directly to the visible test point without opening the controller.": "<b>外部</b>:无需打开手柄,直接对看到的的测试点施加+1.8V电压",
|
||||
"<b>Internally</b>: by soldering a wire from a +1.8V source to the write-protect TP.": "<b>内部</b>:将+1.8V电源与写保护测试点飞线连接。",
|
||||
"Calibration is being stored in the stick modules.": "正在向摇杆模块保存校准数据。",
|
||||
"DualSense Edge Calibration": "DualSense Edge校准",
|
||||
"For more info or help, feel free to reach out on Discord.": "需要更多信息或帮助,请随时在Discord上联系。",
|
||||
"More details and images": "更多细节和图像",
|
||||
"Please note: the stick modules on the DS Edge <b>cannot be calibrated via software alone</b>.": "注意:DualSense Edge的摇杆模块<b>无法仅通过软件进行校准</b>。",
|
||||
"To store a custom calibration on the stick's internal memory, a <b>hardware modification</b> is required.": "要向摇杆内部固件保存校准数据,需要<b>在硬件层面进行修改</b>。",
|
||||
"Support for calibrating DualSense Edge stick modules is now available as an <b>experimental feature</b>.": "现已提供校准 DualSense Edge 摇杆模块的支持,此功能为<b>实验性功能</b>。",
|
||||
"This involves temporarily disabling write protection by applying <b>+1.8V</b> to a specific test point on each module.": "需要对摇杆模块的特定测试点施加<b>+1.8V</b>电压来暂时禁用写保护。",
|
||||
"This is only for advanced users. If you're not sure what you're doing, please do not attempt it.": "只建议经验丰富的老手操作,小白请勿尝试。",
|
||||
"We are not responsible for any damage caused by attempting this modification.": "如出现硬件损坏,我们概不负责。",
|
||||
"You can do this in two ways:": "有两种办法:",
|
||||
"here": "这里",
|
||||
"If the calibration is not stored permanently, please double-check the wirings of the hardware mod.": "如果校准没有永久生效,请检查接线是否正确。",
|
||||
"Cannot lock": "无法锁定",
|
||||
"Cannot store data into": "无法将数据存储至",
|
||||
"Cannot unlock": "无法解锁",
|
||||
"Color": "颜色",
|
||||
"Left Module Barcode": "左模块条形码",
|
||||
"Right Module Barcode": "右模块条形码",
|
||||
"left module": "左模块",
|
||||
"right module": "右模块",
|
||||
"30th Anniversary": "30周年纪念版",
|
||||
"Astro Bot": "宇宙机器人",
|
||||
"Cobalt Blue": "钴晶蓝",
|
||||
"Cosmic Red": "星辰红",
|
||||
"Galactic Purple": "银河紫",
|
||||
"God of War Ragnarok": "战神:诸神黄昏",
|
||||
"Grey Camouflage": "深灰迷彩",
|
||||
"Midnight Black": "午夜黑",
|
||||
"Nova Pink": "新星粉",
|
||||
"Starlight Blue": "星光蓝",
|
||||
"Sterling Silver": "亮灰银",
|
||||
"Volcanic Red": "火山红",
|
||||
"White": "白色",
|
||||
"Chroma Indigo": "净彩靛青",
|
||||
"Chroma Pearl": "净彩珠白",
|
||||
"Chroma Teal": "净彩凫绿",
|
||||
"Fortnite": "堡垒之夜",
|
||||
"Spider-Man 2": "漫威蜘蛛侠2",
|
||||
"The Last of Us": "最后生还者",
|
||||
"10x zoom": "10x放大测试",
|
||||
"Calibration": "校准",
|
||||
"Debug": "调试",
|
||||
"Info": "信息",
|
||||
"Normal": "正常",
|
||||
"<strong>Average circularity error:</strong> smaller is not always better! Aim for 7-9 %.": "<strong>平均圆度误差</strong>:越小并不意味越好,正常情况下应该在7-9%之间。",
|
||||
"A reboot is needed to continue using this DualSense Edge. Please disconnect and reconnect your controller.": "DualSense Egde手柄需要重启才能继续,断开并重新连接即可。",
|
||||
"Adaptive Trigger": "自适应扳机",
|
||||
"Adaptive triggers are only supported on DualSense controllers": "自适应扳机仅支持PS5手柄",
|
||||
"Add test": "进行测试",
|
||||
"Be gentle to avoid damage.": "请小心操作,以防损坏",
|
||||
"Buttons": "按钮",
|
||||
"Center": "中心",
|
||||
"Center (L1)": "中心 (L1)",
|
||||
"Circularity": "圆度",
|
||||
"Circularity (R1)": "圆度 (R1)",
|
||||
"Controller does not support adaptive trigger control": "手柄不支持自适应扳机",
|
||||
"Don't show again": "不再显示",
|
||||
"Fail": "失败",
|
||||
"Failed": "已失败",
|
||||
"Failed to connect to device": "无法连接到设备",
|
||||
"Failed to disable adaptive trigger": "无法禁用自适应扳机",
|
||||
"Failed to set speaker tone": "无法设置扬声器音量",
|
||||
"Failed to set vibration": "无法设置振动",
|
||||
"Feel for vibration in the controller.": "感受控制器的振动",
|
||||
"Haptic Vibration": "振动",
|
||||
"Headphone Jack": "耳机孔",
|
||||
"Increase non-circularity": "增加非圆度",
|
||||
"Instructions": "说明",
|
||||
"Keep rotating the sticks even if you see no progress!": "请继续旋转摇杆直到进度条满",
|
||||
"Learn more...": "了解更多...",
|
||||
"Lights": "灯光",
|
||||
"Listen for a tone from the controller speaker.": "听手柄扬声器发出的提示音",
|
||||
"Long-press [circle] to skip ahead.": "长按[圆圈]跳过。",
|
||||
"Microphone": "麦克风",
|
||||
"Microphone Level:": "麦克风音量",
|
||||
"Move the stick to select it for tuning, then without touching the stick use the D-pad buttons to adjust the center point. Flick it and adjust it again if it is off center or flickers.": "移动摇杆选择要调整的位置,然后使用方向键调整中心点(无需触摸摇杆)。如果中心点偏离,请轻弹摇杆并再次调整。",
|
||||
"No controller connected": "未连接手柄",
|
||||
"No tests completed yet.": "尚未完成任何测试",
|
||||
"Not tested": "未测试",
|
||||
"Pass": "通过",
|
||||
"Passed": "已通过",
|
||||
"Please release the stick to center position before adjusting with D-pad buttons.": "在使用方向键调整之前,请确保摇杆处于正中心位置。",
|
||||
"Plug in headphones to the 3.5mm jack": "将耳机插入3.5毫米接口",
|
||||
"Press L2 and R2 triggers to feel the trigger resistance.": "按两个扳机键,感受扳机的阻力",
|
||||
"Press [circle] to close, or [square] to start over": "按[圆圈]关闭,或按[方块]重新开始",
|
||||
"Press [square] to Pass, [cross] to Fail, or [circle] to skip.": "按[方块]通过,[叉]失败,或按[圆圈]跳过。",
|
||||
"Press [square] to begin or [circle] to close": "按[方块]开始或[圆圈]关闭",
|
||||
"Press [triangle] to go back.": "按[三角形]返回。",
|
||||
"Press each button until they turn green.": "按下每个按钮,直到变为绿色",
|
||||
"Press the D-pad or face buttons in the direction you want the stick position to move.": "按方向键或正面按钮,选择摇杆位置移动的方向。",
|
||||
"Progress": "进度",
|
||||
"Push the stick straight up/down/left/right as far as possible.": "向上/向下/向左/向右直推摇杆推到头。",
|
||||
"Quick Test": "快速测试",
|
||||
"Quick calibrate": "快速校准",
|
||||
"Range calibration appears to have failed. Please try again and make sure you rotate the sticks.": "范围校准失败。请重试一次,且要旋转摇杆。",
|
||||
"Repeat": "重复",
|
||||
"Restart": "重新启动",
|
||||
"Rotate the sticks slowly at least 2 times in one direction and 2 times in the other direction to cover the whole range.": "顺时针缓慢旋转摇杆至少 2 圈,然后再逆时针旋转 2 圈,让摇杆能覆盖整个范围。",
|
||||
"Run through these tests to verify your controller's functionality.": "快速测试可以帮你快速检测手柄各项功能是否正常。",
|
||||
"Show raw numbers": "显示原始数据",
|
||||
"Sony controllers come from the factory calibrated to have an average circularity error of nearly 10 %, and this is now what games expect. Too perfect circularity can make movements and aim feel stiff and unresponsive in some games.": "索尼手柄出厂时已校准,通常平均圆度误差接近10%,这是正常情况。在某些游戏中,过于完美的圆度反而会让移动和瞄准僵硬或迟钝。",
|
||||
"Speaker": "扬声器",
|
||||
"Step size": "步骤",
|
||||
"Test Speaker": "测试扬声器",
|
||||
"Test Summary": "测试摘要",
|
||||
"Test all buttons, or long-press [square] to Pass and [cross] to Fail, or [circle] to skip.": "测试所有按钮,或长按 [方块] 表示通过,[叉号] 表示失败,或长按 [圆圈] 表示跳过。",
|
||||
"The <b>Done</b> button will unlock after at most 15 seconds. If you press <b>Done</b> without rotating the sticks, the calibration will be incomplete and you will need to repeat it.": "<b>完成</b> 按钮会在最多 15 秒后解锁。如果你在不旋转摇杆就按下 <b>完成</b>,则校准会失败,需要重新进行校准。",
|
||||
"The device is connected via Bluetooth. Disconnect and reconnect using a USB cable instead.": "手柄是蓝牙连接。请断开蓝牙,用 USB 数据线插上电脑。",
|
||||
"This test checks all controller buttons by requiring you to press each button up to three times.": "此项检测手柄的所有按钮是否正常,每个按钮最多按三次即可变绿。",
|
||||
"This test checks the headphone jack functionality.": "此项检测耳机插孔是否正常。",
|
||||
"This test checks the reliability of the USB port.": "此项检查USB接口是否正常。",
|
||||
"This test will cycle through red, green, and blue colors on the controller lightbar, animate the player indicator lights, and flash the mute button.": "此项会让灯条闪彩虹色,让玩家指示灯不断切换,让静音按钮呈渐变闪烁。",
|
||||
"This test will enable heavy resistance on both L2 and R2 triggers.": "此项会激活L2和R2两个扳机键的自适应扳机功能。",
|
||||
"USB Connector": "USB接口",
|
||||
"Watch the controller lights change colors, the player lights animate, and the mute button flash.": "观察手柄指示灯、玩家指示灯以及静音按钮是否有变化。",
|
||||
"While holding the stick to be adjusted straight up/down/left/right, make adjustments until you see lightblue sectors in all four directions after circling the stick both left and right. Then use the": "握住要垂直向上/向下/向左/向右调整的摇杆,进行调整,直到左右旋转摇杆后,在四个方向上都看到淡蓝色扇形。然后使用",
|
||||
"Wiggle the USB cable to see if the controller disconnects.": "轻轻晃动USB线,看手柄是否会断开连接。",
|
||||
"Your device might not be a genuine Sony controller. If it is not a clone then please report this issue.": "此手柄不是索尼正品手柄。如果是我们检测错误,请联系我们。",
|
||||
"failed": "失败",
|
||||
"hide": "隐藏",
|
||||
"passed": "已通过",
|
||||
"skipped": "跳过",
|
||||
"tests completed": "测试已完成",
|
||||
"to increase the non-circularity.": "增加非圆度",
|
||||
"Cannot copy text to the clipboard:": "无法复制到剪贴板",
|
||||
"Please connect a DualShock 4, a DualSense, DualSense Edge or VR2 controller to your computer and press Connect.": "请将DualShock 4、DualSense、DualSense Edge或VR2手柄用有线插上电脑,然后点下方的连接按钮。",
|
||||
"The device appears to be a clone. All calibration functionality is disabled.": "此手柄不是索尼正品手柄。校准功能无法使用。",
|
||||
"The item has been copied to the clipboard.": "已复制到剪贴板。",
|
||||
"After they have been replaced, this utility can be used to calibrate the controller to work with the new joysticks.": "更换摇杆后,可以使用此工具来校准,使其正常使用。",
|
||||
"Aim for a circularity error of around 7-9 % for the best playing experience.": "为了获得最佳游戏体验,请将圆度误差保持在7-9%左右。",
|
||||
"Battery level is low. Tests may fail due to the controller being in power saving mode.": "电池电量低。由于手柄会处于省电模式,测试可能会失败。",
|
||||
"Calibrating without replacing the joysticks may help temporarily, but it may also make the problem worse, with no way to undo it.": "如果不更换摇杆就校准,可能会有一定效果,也可能漂得更厉害,且无法撤消。",
|
||||
"Calibration History": "校准历史",
|
||||
"Cannot read module barcodes": "无法读取模块条码",
|
||||
"Clear All": "清除所有",
|
||||
"Current": "目前",
|
||||
"Delete": "删除",
|
||||
"Delete all calibration history for this controller? This cannot be undone.": "删除此手柄的所有校准历史记录?此操作无法撤销。",
|
||||
"Delete this calibration entry?": "删除此校准项目?",
|
||||
"Drift is caused by mechanical parts in the joystick being worn out, and they need to be replaced to fix the drift.": "漂移是因为摇杆出现物理磨损引起的,需要更换摇杆才能彻底修复漂移。",
|
||||
"Firefox is supported with the WebHID extension installed.": "Firefox浏览器可以安装WebHID扩展。",
|
||||
"It appears the latest joystick calibration has not been saved.": "上次的摇杆校准数据没有保存。",
|
||||
"Last connected": "最后连接",
|
||||
"No saved calibrations found.": "无校准数据。",
|
||||
"Please use a web browser with WebHID support (e.g. Google Chrome or Microsoft Edge) on a PC or Mac.": "请在PC或Mac上使用支持WebHID的Web浏览器(如Google Chrome或Microsoft Edge)。",
|
||||
"Restore": "恢复",
|
||||
"Restore calibration": "恢复校准",
|
||||
"The calibration was restored successfully! Remember to save the changes in order not to loose them when the controller is rebooted.": "校准数据已恢复。请记得保存更改,以免丢失数据。",
|
||||
"This controller has unsaved changes that will be lost when the controller is rebooted.": "此手柄有未保存的更改,重启后将会丢失。",
|
||||
"This utility cannot fix stick drift.": "此工具无法修复摇杆漂移。",
|
||||
"Unsupported browser.": "浏览器不支持。",
|
||||
"Use expert mode": "使用专家模式",
|
||||
"Use four-step calibration": "使用四步校准",
|
||||
"Use normal mode": "使用普通模式",
|
||||
"Use quick calibration": "使用快速校准",
|
||||
"Using this utility on a phone or tablet is not supported.": "此工具不支持手机或平板。",
|
||||
"Values": "值",
|
||||
"You should save your changes, or reboot the controller to revert back to the previous state.": "请保存校准数据,或者重启手柄来撤销校准。",
|
||||
"serial number": "序列号",
|
||||
"(DualSense & DualSense Edge) Will updating the firmware reset calibration?": "",
|
||||
"(DualSense Edge) Is the calibration stored on the controller or the modules?": "",
|
||||
"A sample test was done with 30 dualsense edge modules, and the results showed that the inner quartile range (IQR) is 8.3% and 9.0%, with an average of 8.6%. This goes to show that stock controllers by default have a relatively high range, and the rule of thumb is to follow factory calibration.": "",
|
||||
"Can I overwrite a (permanent) calibration?": "",
|
||||
"Can I restore a previous calibration?": "",
|
||||
"Finetuning is only available for DualSense and DualSense Edge.": "",
|
||||
"God of War 20th Anniversary": "",
|
||||
"Housing": "",
|
||||
"How do I use the finetuning feature?": "",
|
||||
"If you don't have a battery connected or the connected battery is empty, AND your cable disconnects during saving the calibration, then your controller has a high chance of being bricked.": "",
|
||||
"If you have not clicked the green button \"Save changes permanently\", then unplugging the controller will reset to the previously saved calibration. It is recommended you test your calibration before saving.": "",
|
||||
"If you have saved the changes permanently, you can reset the changes only if you are using a DualSense or DualSense Edge. You can click on the grey button \"Restore Calibration\" to go back to one of the previous calibrations that was saved on the controller. Known issue: You may need to reboot your controller first in order for previous calibrations to show up.": "",
|
||||
"Image 1": "",
|
||||
"Images": "",
|
||||
"In most cases, calibrating your joysticks that have prior drift issues may result in a worse and unpredictable calibration.": "",
|
||||
"Not shown in the video: You can now also increase the range in each direction uniformly by using the cross in the top right and moving the slider up, which may speed up finetuning. Make sure to rotate the joystick first, otherwise the button cannot be pressed.": "",
|
||||
"Only official controllers are supported, no third-party or \"fake\" controllers.": "",
|
||||
"Option 1": "",
|
||||
"Option 2": "",
|
||||
"PlayStation Virtual Reality 2": "",
|
||||
"Saving calibration is locked by default on DualSense Edge joystick modules. A hardware mod is required to save the calibration permanently. The calibration is saved on the modules themselves, so you have to perform the mod twice: once for each module. You would need to bridge two points on the PCB with enamelled wire. There are multiple methods, I personally recommend using either of these two locations to solder the wire to. See images below. Ensure the wire is thin enough so that the shell is closed properly. Make sure you don't short the wire to ground through the letters near the bottom joint.": "",
|
||||
"Sony DualShock 4": "",
|
||||
"The calibration is stored on each module individually. It is carried over if you place the modules in a different DualSense Edge. Likewise, if you place a different set of modules in your DualSense Edge, you will get a different calibration that is tied to those new modules.": "",
|
||||
"The finetuning and quick test menus are only accessible for DualSense and DualSense Edge.": "",
|
||||
"The website supports the following official controllers:": "",
|
||||
"These previous calibrations are stored locally in your browser's storage. Meaning you can only restore calibrations using the same computer and browser that you used to calibrate it with, and deleting the cache or using Incognito will make any previous calibration irrecoverable.": "",
|
||||
"This software is not intended to fix stickdrift and will <b>not</b> fix stickdrift on its own if you already experience that.": "",
|
||||
"This video from V2.16 shows how to use the finetuning menu.": "",
|
||||
"We recommend a circularity between 7% and 9%. The reason for this is to mimic a stock controllers calibration. However, symmetrical overshoot is more important and if you need to deviate from this range to achieve better symmetry, that is fine too.": "",
|
||||
"What are the risks of using the calibration?": "",
|
||||
"What circularity percentage to aim for when calibrating and finetuning.": "",
|
||||
"What the software will help with, is ensuring new joysticks will function properly after replacing the old broken joysticks that drift. This step involves opening up the controller and soldering new potentiometers or an entire new joystick.": "",
|
||||
"When calibrating, there is no risk. However, if your controller disconnects during the split second that you save a calibration, then you have a chance of bricking your controller. Make sure your battery has enough charge and is plugged into the controller, and the USB cable is securely connected. This prevents your controller from being bricked if the USB cable accidentally disconnects.": "",
|
||||
"Which controllers does DualShock Calibration GUI support?": "",
|
||||
"Yes. Simply do another calibration, and click the green button to save permanently.": "",
|
||||
"": ""
|
||||
}
|
||||
}
|
||||
364
lang/zh_tw.json
Normal file
@@ -0,0 +1,364 @@
|
||||
{
|
||||
".authorMsg": "- 中文(繁體)翻譯由 JEFF <a href='https://space.bilibili.com/185181540'>修手柄的小丁</a> 提供",
|
||||
"DualShock Calibration GUI": "手把校準界面",
|
||||
"Connect": "連結",
|
||||
"Connected to:": "連結至:",
|
||||
"Disconnect": "斷開連結",
|
||||
"Calibrate stick center": "校準搖桿中心",
|
||||
"Calibrate stick range": "校準搖桿外圈",
|
||||
"Sections below are not useful, just some debug infos or manual commands": "以下部分沒有用處,只是一些除錯資訊或手動命令",
|
||||
"NVS Status": "NVS 狀態",
|
||||
"Unknown": "未知",
|
||||
"Query NVS status": "查詢 NVS 狀態",
|
||||
"NVS unlock": "解鎖 NVS",
|
||||
"NVS lock": "鎖定 NVS",
|
||||
"Stick center calibration": "搖桿中心校準",
|
||||
"Welcome": "歡迎",
|
||||
"Step 1": "步驟 1",
|
||||
"Step 2": "步驟 2",
|
||||
"Step 3": "步驟 3",
|
||||
"Step 4": "步驟 4",
|
||||
"Completed": "已完成",
|
||||
"Welcome to the stick center-calibration wizard!": "歡迎使用搖桿中心校準嚮導!",
|
||||
"This tool will guide you in re-centering the analog sticks of your controller. It consists of four steps: you will be asked to move both sticks in a direction and release them.": "此工具將指導您重新定位手把的模擬搖桿。 它包括四個步驟:您將被要求將兩個搖桿移動到一個方向並釋放它們。",
|
||||
"Please be aware that, <i>once the calibration is running, it cannot be canceled</i>. Do not close this page or disconnect your controller until it is completed.": "請注意,<i>一旦校準开始,就無法取消</i>。 在完成之前,請不要關閉此頁面或斷開手把的連結。",
|
||||
"Press <b>Start</b> to begin calibration.": "按 <b>開始</b> 開始校準。",
|
||||
"Please move both sticks to the <b>top-left corner</b> and release them.": "請將兩個搖桿移到 <b>左上角</b> 並釋放它們。",
|
||||
"When the sticks are back in the center, press <b>Continue</b>.": "當搖桿回到中心位置時,按 <b>繼續</b>。",
|
||||
"Please move both sticks to the <b>top-right corner</b> and release them.": "請將兩個搖桿移到 <b>右上角</b> 並釋放它們。",
|
||||
"Please move both sticks to the <b>bottom-left corner</b> and release them.": "請將兩個搖桿移到 <b>左下角</b> 並釋放它們。",
|
||||
"Please move both sticks to the <b>bottom-right corner</b> and release them.": "請將兩個搖桿移到 <b>右下角</b> 並釋放它們。",
|
||||
"Calibration completed successfully!": "校準成功完成!",
|
||||
"Next": "下一步",
|
||||
"Recentering the controller sticks.": "重新定位手把摇杆。",
|
||||
"Please do not close this window and do not disconnect your controller. ": "請不要關閉此窗口,也不要斷開手把的連接。 ",
|
||||
"Range calibration": "摇杆外圈校準",
|
||||
"The controller is now sampling data!": "手把現在正在採樣數據!",
|
||||
"Done": "完成",
|
||||
"Hi, thank you for using this software.": "嗨,感謝您使用此軟體。",
|
||||
"If you're finding it helpful and you want to support my efforts, feel free to": "如果您覺得有幫助,想支持我的努力,請隨時",
|
||||
"buy me a coffee": "請我喝咖啡",
|
||||
"! :)": "! :)",
|
||||
"Do you have any suggestion or issue? Drop me a message via email or discord.": "您有任何建議或問題嗎?透過電子郵件或 Discord 給我留言。",
|
||||
"Cheers!": "乾杯!",
|
||||
"Support this project": "支持此項目",
|
||||
"unknown": "未知設備",
|
||||
"original": "原廠正品",
|
||||
"clone": "克隆盜版",
|
||||
"locked": "已鎖定",
|
||||
"unlocked": "已解鎖",
|
||||
"error": "錯誤",
|
||||
"Build Date": "建置日期",
|
||||
"HW Version": "硬體版本",
|
||||
"SW Version": "軟體版本",
|
||||
"Device Type": "設備類型",
|
||||
"Range calibration completed": "搖桿外圈校準已完成",
|
||||
"Range calibration failed": "搖桿外圈校準失敗",
|
||||
"Stick calibration failed": "摇杆校準失敗",
|
||||
"Stick calibration completed": "摇杆校準完成",
|
||||
"NVS Lock failed": "NVS 鎖定失敗",
|
||||
"NVS Unlock failed": "NVS 解鎖失敗",
|
||||
"Please connect only one controller at time.": "請一次只連接一個手把。",
|
||||
"Sony DualShock 4 V1": "Sony DualShock 4 V1",
|
||||
"Sony DualShock 4 V2": "Sony DualShock 4 V2",
|
||||
"Sony DualSense": "Sony DualSense",
|
||||
"Sony DualSense Edge": "Sony DualSense Edge",
|
||||
"Connected invalid device": "連接了無效設備",
|
||||
"Error": "錯誤",
|
||||
"Initializing...": "初始化...",
|
||||
"Storing calibration...": "正在儲存校準...",
|
||||
"Sampling...": "採樣中...",
|
||||
"Calibration in progress": "校準進行中",
|
||||
"Start": "開始",
|
||||
"Continue": "繼續",
|
||||
"Have a nice day :)": "祝您有美好的一天! :)",
|
||||
"Welcome to the Calibration GUI": "歡迎使用校準 GUI",
|
||||
"Just few things to know before you can start:": "在開始之前,有幾件事情要了解:",
|
||||
"This website is not affiliated with Sony, PlayStation & co.": "此網站與 Sony、PlayStation 等無關。",
|
||||
"This service is provided without warranty. Use at your own risk.": "此服務不附帶任何保固。使用需自負風險。",
|
||||
"Keep the internal battery of the controller connected and ensure it is well charged. If the battery dies during operations, the controller will be damaged and rendered unusable.": "保持手把的內部電池連接,並確保其充電充足。如果在操作過程中電池電量耗盡,手把將受損並無法使用。",
|
||||
"Before doing the permanent calibration, try the temporary one to ensure that everything is working well.": "在進行永久校準之前,先嘗試臨時校準以確保一切正常。",
|
||||
"Understood": "知道了",
|
||||
"Version": "版本",
|
||||
"Frequently Asked Questions": "常見問題",
|
||||
"Close": "關閉",
|
||||
"Welcome to the F.A.Q. section! Below, you'll find answers to some of the most commonly asked questions about this website. If you have any other inquiries or need further assistance, feel free to reach out to me directly. Your feedback and questions are always welcome!": "歡迎來到常見問題的解答部分!在下面,您將找到關於本網站常見問題的答案。如果您有任何其他疑問或需要進一步協助,請隨時直接與我聯繫。您的回饋和問題都是受歡迎的!",
|
||||
"How does it work?": "它是如何工作的?",
|
||||
"Behind the scenes, this website is the culmination of one year of dedicated effort in reverse-engineering DualShock controllers for fun/hobby from a random guy on the internet.": "在幕後,這個網站是一個來自網路上一個普通人花了一年時間來為了娛樂和愛好而逆向DualShock手把的努力結晶。",
|
||||
"Through": "通過",
|
||||
"this research": "這項研究",
|
||||
", it was discovered that there exist some undocumented commands on DualShock controllers that can be sent via USB and are used during factory assembly process. If these commands are sent, the controller starts the recalibration of analog sticks.": "透過這項研究,發現DualShock手把上存在一些未記錄的命令,可以透過USB發送,並在工廠組裝過程中使用。如果發送了這些命令,手把將開始重新校準模擬搖桿。",
|
||||
"While the primary focus of this research wasn't initially centered on recalibration, it became apparent that a service offering this capability could greatly benefit numerous individuals. And thus, here we are.": "雖然最初這項研究的主要焦點並不是集中在重新校準上,但很明顯,提供這種能力的服務可以極大地惠及許多人。顯而易見,我們也在這其中。",
|
||||
"Is this an officially endorsed service?": "這是官方認可的工具嗎?",
|
||||
"No, this service is simply a creation by a DualShock enthusiast.": "不,這個工具只是一個DualShock愛好者的創作。",
|
||||
"Does this website detect if a controller is a clone?": "這個網站能偵測到手把是否是正品嗎?",
|
||||
"Yes, only DualShock4 at the moment. This happened because I accidentally purchased some clones, spent time identifying the differences and added this functionality to prevent future deception.": "是的,目前只有DualShock4。這是因為我不小心買到了一些盜版,因此花了一些時間鑑別了它們的差異,並添加了這個功能以防止未來被騙。",
|
||||
"Unfortunately, the clones cannot be calibrated anyway, because they only clone the behavior of a DualShock4 during normal gameplay, not all the undocumented functionalities.": "不幸的是,盜版無論如何都不能進行校準,因為它們只複製了在正常遊戲過程中DualShock4的功能部分,而不是所有未記錄的功能。",
|
||||
"If you want to extend this detection functionality to DualSense, please ship me a fake DualSense and you'll see it in few weeks.": "如果您想將此檢測功能擴展到DualSense,請寄給我一個假的DualSense,您將在幾週內看到結果。",
|
||||
"What development is in plan?": "有什麼發展計畫嗎?",
|
||||
"I maintain two separate to-do lists for this project, although the priority has yet to be established.": "我為這個項目維護兩個單獨的待辦事項列表,儘管優先順序尚未確定。",
|
||||
"The first list is about enhancing support for DualShock4 and DualSense controllers:": "第一個清單是關於增強對DualShock4和DualSense手把的支援:",
|
||||
"Implement calibration of L2/R2 triggers.": "實現L2/R2扳機的校準。",
|
||||
"Improve detection of clones, particularly beneficial for those seeking to purchase used controllers with assurance of authenticity.": "改進盜版的檢測,對那些希望購買原廠正品的二手手把的人特別有益。",
|
||||
"Add support for recalibrating IMUs.": "新增支援重新校準IMU(陀螺儀)。",
|
||||
"Additionally, explore the possibility of reviving non-functioning DualShock controllers (further discussion available on Discord for interested parties).": "此外,探討復活不工作的DualShock手把的可能性(對此有興趣的人可在Discord上進一步的討論)。",
|
||||
"The second list contains new controllers I aim to support:": "第二個清單包含我打算支援的新手把:",
|
||||
"DualShock 3": "DualShock 3",
|
||||
"XBox Controllers": "XBox 手把",
|
||||
"Each of these tasks presents both immense interest and significant time investment. To provide context, supporting a new controller typically demands 6-12 months of full-time research, alongside a stroke of good fortune.": "每項任務都需要巨大的興趣和顯著的時間投入。為了提供支持,相容於新的手把通常需要6-12個月的全職研究,同時還需要一點好運才能做到。",
|
||||
"I love this service, it helped me! How can I contribute?": "我喜歡這個工具,它幫助了我!我如何做出貢獻?",
|
||||
"I'm glad to hear that you found this helpful! If you're interested in contributing, here are a few ways you can help me:": "很高興聽到本工具對您有幫助!如果您有興趣做出貢獻,以下是您可以幫助我的幾種方式:",
|
||||
"Consider making a": "考慮完成一項",
|
||||
"donation": "捐贈",
|
||||
"to support my late-night caffeine-fueled reverse-engineering efforts.": "以支持我的深夜因一杯咖啡而激發對逆向工程努力。",
|
||||
"Ship me a controller you would love to add (send me an email for organization).": "給我寄一個您想添加的手把(發送電子郵件給我進行安排)。",
|
||||
"Translate this website in your language": "將這個網站翻譯成您的語言",
|
||||
", to help more people like you!": "以幫助更多像您一樣的人!",
|
||||
"This website uses analytics to improve the service.": "該網站使用分析工具來改善服務。",
|
||||
"Board Model": "主機板型號",
|
||||
"This DualSense controller has outdated firmware.": "該DualSense手把的韌體已過時。",
|
||||
"Please update the firmware and try again.": "請更新韌體後重試。",
|
||||
"Joystick Info": "搖桿資訊",
|
||||
"Check circularity": "檢查搖桿外圈圓度。",
|
||||
"No.": "不可以。",
|
||||
"Does this software resolve stickdrift?": "這個軟體能解決搖桿漂移嗎?",
|
||||
"Stickdrift is caused by a physical defect; namely dirt, worn potentiometer or in some cases a worn spring.": "搖桿漂移是由物理缺陷引起的;即污垢、磨損的電位器或在某些情況下磨損的彈簧。",
|
||||
"After range calibration, joysticks always go in corners.": "範圍校準後,搖桿總是會進入角落。",
|
||||
"This issue happens because you have clicked \"Done\" immediately after starting a range calibration.": "這個問題發生是因為你在開始範圍校準後立即點擊了\"完成\"。",
|
||||
"Please read the instructions.": "請閱讀說明。",
|
||||
"You have to rotate the joysticks before you press \"Done\".": "在按\"完成\"之前,必須旋轉搖桿。",
|
||||
"Make sure to touch the edges of the joystick frame and rotate slowly, preferably in each direction - clockwise and anti-clockwise.": "確保觸摸搖桿框架的邊緣,並慢慢旋轉,最好是每個方向 - 順時針和逆時針。",
|
||||
"Only after you have done that, you click on \"Done\".": "只有在這樣做之後,你才可以點擊\"完成\"。",
|
||||
"Changes saved successfully": "更改已成功保存",
|
||||
"Error while saving changes": "保存更改時出錯:",
|
||||
"Save changes permanently": "永久保存更改",
|
||||
"Reboot controller": "重啟手把",
|
||||
"(beta)": "測試版本",
|
||||
"<b>Externally</b>: by applying +1.8V directly to the visible test point without opening the controller.": "<b>外部方式</b>:直接將 +1.8V 電壓施加到可見的測試點,無需打開手把",
|
||||
"<b>Internally</b>: by soldering a wire from a +1.8V source to the write-protect TP.": "<b>內部方式</b>:從 +1.8V 電源點焊接一條導線至寫入保護測試點(TP)",
|
||||
"Calibration is being stored in the stick modules.": "校正資料正被儲存到搖桿模組中。",
|
||||
"Cancel": "取消",
|
||||
"Controller Info": "手把資訊",
|
||||
"Debug Info": "除錯資訊",
|
||||
"Debug buttons": "除錯按鈕",
|
||||
"DualSense Edge Calibration": "DualSense Edge 校正",
|
||||
"FW Build Date": "韌體建構日期",
|
||||
"FW Series": "韌體系列",
|
||||
"FW Type": "韌體類型",
|
||||
"FW Update": "韌體更新",
|
||||
"FW Update Info": "韌體更新資訊",
|
||||
"FW Version": "韌體版本",
|
||||
"Finetune stick calibration": "微調搖桿校正",
|
||||
"For more info or help, feel free to reach out on Discord.": "如需更多資訊或協助,歡迎隨時在 Discord 上與我們聯繫。",
|
||||
"HW Model": "硬體型號",
|
||||
"Hardware": "硬體",
|
||||
"Left stick": "左搖桿電壓(mV)",
|
||||
"More details and images": "更多詳情與圖片",
|
||||
"PCBA ID": "PCBA ID",
|
||||
"Please note: the stick modules on the DS Edge <b>cannot be calibrated via software alone</b>.": "請注意:DS Edge上的搖桿模組<b>無法僅透過軟體進行校準</b>。",
|
||||
"To store a custom calibration on the stick's internal memory, a <b>hardware modification</b> is required.": "要在搖桿的內部記憶體上儲存自訂校準,需要進行<b>硬體修改</b>。",
|
||||
"Right stick": "右搖桿電壓(mV)",
|
||||
"SBL FW Version": "SBL韌體版本",
|
||||
"Show all": "顯示全部資訊",
|
||||
"Software": "軟體",
|
||||
"Spider FW Version": "Spider韌體版本",
|
||||
"Support for calibrating DualSense Edge stick modules is now available as an <b>experimental feature</b>.": "現在已提供對 DualSense Edge 搖桿模組校正的支援,作為一項<b>實驗性功能</b>。",
|
||||
"This involves temporarily disabling write protection by applying <b>+1.8V</b> to a specific test point on each module.": "這需要在每個模組上的特定測試點施加 <b>+1.8V</b> 電壓,以暫時停用寫入保護。",
|
||||
"This is only for advanced users. If you're not sure what you're doing, please do not attempt it.": "這僅適用於進階使用者。如果您不確定自己在做什麼,請不要嘗試。",
|
||||
"Touchpad FW Version": "觸控板韌體版本",
|
||||
"Touchpad ID": "觸控板ID",
|
||||
"We are not responsible for any damage caused by attempting this modification.": "我們不對嘗試此修改所造成的任何損壞負責。",
|
||||
"You can do this in two ways:": "您可以透過兩種方式來完成這項操作:",
|
||||
"here": "這裡",
|
||||
"If the calibration is not stored permanently, please double-check the wirings of the hardware mod.": "如果校準沒有永久生效,請檢查硬體模組的接線。",
|
||||
"Battery Barcode": "電池條碼",
|
||||
"Bluetooth Address": "藍牙位址",
|
||||
"Cannot lock": "無法鎖定",
|
||||
"Cannot store data into": "無法將數據儲存到",
|
||||
"Cannot unlock": "無法解鎖",
|
||||
"Color": "顏色",
|
||||
"Left Module Barcode": "左側模組條碼",
|
||||
"MCU Unique ID": "MCU唯一ID",
|
||||
"Right Module Barcode": "右側模組條碼",
|
||||
"Serial Number": "序列號",
|
||||
"VCM Left Barcode": "VCM左條碼",
|
||||
"VCM Right Barcode": "VCM右條碼",
|
||||
"Venom FW Version": "Venom韌體版本",
|
||||
"left module": "左側模組",
|
||||
"right module": "右側模組",
|
||||
"30th Anniversary": "30週年紀念版",
|
||||
"Astro Bot": "宇宙機器人",
|
||||
"Cobalt Blue": "鈷藍色",
|
||||
"Cosmic Red": "星塵紅",
|
||||
"Galactic Purple": "銀河紫",
|
||||
"God of War Ragnarok": "戰神:諸神黃昏",
|
||||
"Grey Camouflage": "深灰迷彩",
|
||||
"Midnight Black": "午夜黑",
|
||||
"Nova Pink": "星幻粉",
|
||||
"Starlight Blue": "星光藍",
|
||||
"Sterling Silver": "亮灰銀",
|
||||
"Volcanic Red": "火山紅",
|
||||
"White": "白色",
|
||||
"Chroma Indigo": "閃耀靛紫",
|
||||
"Chroma Pearl": "閃耀珍珠白",
|
||||
"Chroma Teal": "閃耀青",
|
||||
"Fortnite": "要塞英雄",
|
||||
"Spider-Man 2": "蜘蛛人2",
|
||||
"The Last of Us": "最後生還者",
|
||||
"10x zoom": "10倍縮放測試",
|
||||
"Calibration": "校準",
|
||||
"Debug": "除錯",
|
||||
"Info": "資訊",
|
||||
"Normal": "正常",
|
||||
"(DualSense & DualSense Edge) Will updating the firmware reset calibration?": "(DualSense & DualSense Edge) 更新韌體會重置校準嗎?",
|
||||
"(DualSense Edge) Is the calibration stored on the controller or the modules?": "(DualSense Edge) 校準資料是儲存在手把上還是模組上?",
|
||||
"<strong>Average circularity error:</strong> smaller is not always better! Aim for 7-9 %.": "<strong>平均圓度誤差:</strong>並非越小越好!目標請設定在 7-9 % 之間。",
|
||||
"A reboot is needed to continue using this DualSense Edge. Please disconnect and reconnect your controller.": "需要重啟手把才能繼續使用此 DualSense Edge。請斷開並重新連接您的手把。",
|
||||
"A sample test was done with 30 dualsense edge modules, and the results showed that the inner quartile range (IQR) is 8.3% and 9.0%, with an average of 8.6%. This goes to show that stock controllers by default have a relatively high range, and the rule of thumb is to follow factory calibration.": "針對 30 個 DualSense Edge 模組進行的抽樣測試顯示,四分位距 (IQR) 介於 8.3% 到 9.0% 之間,平均值為 8.6%。這表明原廠手把預設就有相對較高的外圈範圍,經驗法則是以原廠校準為準。",
|
||||
"Adaptive Trigger": "自適應觸發器(適應性扳機)",
|
||||
"Adaptive triggers are only supported on DualSense controllers": "自適應觸發器僅支援 DualSense 手把",
|
||||
"Add test": "新增測試",
|
||||
"After they have been replaced, this utility can be used to calibrate the controller to work with the new joysticks.": "更換之後,可以使用此工具進行校準,以便讓手把能與新的搖桿正常運作。",
|
||||
"Aim for a circularity error of around 7-9 % for the best playing experience.": "為了獲得最佳的遊戲體驗,目標請將圓度誤差控制在 7-9 % 左右。",
|
||||
"Battery level is low. Tests may fail due to the controller being in power saving mode.": "電量過低。由於手把處於省電模式,測試可能會失敗。",
|
||||
"Be gentle to avoid damage.": "請動作輕柔以避免損壞。",
|
||||
"Buttons": "按鍵",
|
||||
"Calibrating without replacing the joysticks may help temporarily, but it may also make the problem worse, with no way to undo it.": "在不更換搖桿的情況下進行校準可能會有暫時性的幫助,但也可能會使問題變得更糟,且無法撤銷。",
|
||||
"Calibration History": "校準歷史紀錄",
|
||||
"Can I overwrite a (permanent) calibration?": "我可以覆蓋(永久)校準嗎?",
|
||||
"Can I restore a previous calibration?": "我可以還原之前的校準嗎?",
|
||||
"Cannot copy text to the clipboard:": "無法將文字複製到剪貼簿:",
|
||||
"Cannot read module barcodes": "無法讀取模組條碼",
|
||||
"Center": "中心",
|
||||
"Center (L1)": "中心 (L1)",
|
||||
"Circularity": "圓度",
|
||||
"Circularity (R1)": "圓度 (R1)",
|
||||
"Clear All": "全部清除",
|
||||
"Controller does not support adaptive trigger control": "手把不支援自適應觸發器控制",
|
||||
"Current": "當前",
|
||||
"Delete": "刪除",
|
||||
"Delete all calibration history for this controller? This cannot be undone.": "確定要刪除此手把的所有校準歷史紀錄嗎?此操作無法復原。",
|
||||
"Delete this calibration entry?": "確定要刪除此校準項目嗎?",
|
||||
"Don't show again": "不再顯示",
|
||||
"Drift is caused by mechanical parts in the joystick being worn out, and they need to be replaced to fix the drift.": "漂移是由搖桿中的機械零件磨損引起的,必須更換零件才能解決漂移問題。",
|
||||
"Fail": "不通過",
|
||||
"Failed": "失敗",
|
||||
"Failed to connect to device": "連線至裝置失敗",
|
||||
"Failed to disable adaptive trigger": "停用自適應觸發器失敗",
|
||||
"Failed to set speaker tone": "設定喇叭音調失敗",
|
||||
"Failed to set vibration": "設定震動失敗",
|
||||
"Feel for vibration in the controller.": "感受手把的震動。",
|
||||
"Finetuning is only available for DualSense and DualSense Edge.": "微調功能僅適用於 DualSense 和 DualSense Edge。",
|
||||
"Firefox is supported with the WebHID extension installed.": "Firefox 在安裝 WebHID 擴充功能後即可支援。",
|
||||
"God of War 20th Anniversary": "戰神 20 週年紀念版",
|
||||
"Haptic Vibration": "觸覺回饋震動",
|
||||
"Headphone Jack": "耳機插孔",
|
||||
"Housing": "外殼",
|
||||
"How do I use the finetuning feature?": "我該如何使用微調功能?",
|
||||
"If you don't have a battery connected or the connected battery is empty, AND your cable disconnects during saving the calibration, then your controller has a high chance of being bricked.": "如果您沒有連接電池或連接的電池已沒電,且在儲存校準時線材斷開,那麼您的手把有很大機率會變磚(損壞)。",
|
||||
"If you have not clicked the green button \"Save changes permanently\", then unplugging the controller will reset to the previously saved calibration. It is recommended you test your calibration before saving.": "如果您尚未點擊綠色按鈕「永久保存更改」,那麼拔掉手把將會回復到上一次儲存的校準。建議您在儲存前先測試您的校準。",
|
||||
"If you have saved the changes permanently, you can reset the changes only if you are using a DualSense or DualSense Edge. You can click on the grey button \"Restore Calibration\" to go back to one of the previous calibrations that was saved on the controller. Known issue: You may need to reboot your controller first in order for previous calibrations to show up.": "如果您已經永久保存了更改,只有在您使用 DualSense 或 DualSense Edge 的情況下才能重置。您可以點擊灰色按鈕「還原校準」以返回之前儲存在手把上的某次校準。已知問題:您可能需要先重啟手把,之前的校準紀錄才會顯示出來。",
|
||||
"Image 1": "圖片 1",
|
||||
"Images": "圖片",
|
||||
"In most cases, calibrating your joysticks that have prior drift issues may result in a worse and unpredictable calibration.": "在大多數情況下,對原本就有漂移問題的搖桿進行校準,可能會導致更糟且不可預測的校準結果。",
|
||||
"Increase non-circularity": "增加非圓度",
|
||||
"Instructions": "說明",
|
||||
"It appears the latest joystick calibration has not been saved.": "最新的搖桿校準似乎尚未儲存。",
|
||||
"Keep rotating the sticks even if you see no progress!": "即使沒看到進度條變化,也請繼續旋轉搖桿!",
|
||||
"Last connected": "最後連接時間",
|
||||
"Learn more...": "了解更多...",
|
||||
"Lights": "燈光",
|
||||
"Listen for a tone from the controller speaker.": "聆聽手把喇叭發出的音調。",
|
||||
"Long-press [circle] to skip ahead.": "長按 [○] 跳過。",
|
||||
"Microphone": "麥克風",
|
||||
"Microphone Level:": "麥克風音量:",
|
||||
"Move the stick to select it for tuning, then without touching the stick use the D-pad buttons to adjust the center point. Flick it and adjust it again if it is off center or flickers.": "移動搖桿以選擇進行微調,然後在不觸碰搖桿的情況下,使用方向鍵(D-pad)調整中心點。如果它偏離中心或發生抖動,請撥動搖桿並再次調整。",
|
||||
"No controller connected": "未連接手把",
|
||||
"No saved calibrations found.": "找不到已儲存的校準資料。",
|
||||
"No tests completed yet.": "尚未完成任何測試。",
|
||||
"Not shown in the video: You can now also increase the range in each direction uniformly by using the cross in the top right and moving the slider up, which may speed up finetuning. Make sure to rotate the joystick first, otherwise the button cannot be pressed.": "影片中未顯示的部分:您現在也可以透過右上角十字並將滑桿向上移動,來均勻增加各個方向的範圍,這可能會加速微調過程。請確保先旋轉搖桿,否則無法按下該按鈕。",
|
||||
"Not tested": "未測試",
|
||||
"Only official controllers are supported, no third-party or \"fake\" controllers.": "僅支援官方原廠手把,不支援任何第三方或「仿冒」手把。",
|
||||
"Option 1": "選項 1",
|
||||
"Option 2": "選項 2",
|
||||
"Pass": "通過",
|
||||
"Passed": "通過",
|
||||
"PlayStation Virtual Reality 2": "PlayStation VR2",
|
||||
"Please connect a DualShock 4, a DualSense, DualSense Edge or VR2 controller to your computer and press Connect.": "請將 DualShock 4、DualSense、DualSense Edge 或 VR2 手把連接至您的電腦,然後按下「連結」。",
|
||||
"Please release the stick to center position before adjusting with D-pad buttons.": "在使用方向鍵調整之前,請先放開搖桿使其回到中心位置。",
|
||||
"Please use a web browser with WebHID support (e.g. Google Chrome or Microsoft Edge) on a PC or Mac.": "請在 PC 或 Mac 上使用支援 WebHID 的網頁瀏覽器(例如 Google Chrome 或 Microsoft Edge)。",
|
||||
"Plug in headphones to the 3.5mm jack": "將耳機插入 3.5mm 插孔",
|
||||
"Press L2 and R2 triggers to feel the trigger resistance.": "按下 L2 和 R2 鍵以感受扳機阻力。",
|
||||
"Press [circle] to close, or [square] to start over": "按 [○] 關閉,或按 [□] 重新開始",
|
||||
"Press [square] to Pass, [cross] to Fail, or [circle] to skip.": "按 [□] 設為通過,按 [×] 設為不通過,或按 [○] 跳過。",
|
||||
"Press [square] to begin or [circle] to close": "按 [□] 開始,或按 [○] 關閉",
|
||||
"Press [triangle] to go back.": "按 [△] 返回。",
|
||||
"Press each button until they turn green.": "按下每個按鍵直到它們變成綠色。",
|
||||
"Press the D-pad or face buttons in the direction you want the stick position to move.": "朝您希望搖桿位置移動的方向按下方向鍵或正面按鍵。",
|
||||
"Progress": "進度",
|
||||
"Push the stick straight up/down/left/right as far as possible.": "將搖桿盡可能推向正上/正下/正左/正右方。",
|
||||
"Quick Test": "快速測試",
|
||||
"Quick calibrate": "快速校準",
|
||||
"Range calibration appears to have failed. Please try again and make sure you rotate the sticks.": "範圍校準似乎失敗了。請重試並確保您有旋轉搖桿。",
|
||||
"Repeat": "重複",
|
||||
"Restart": "重新開始",
|
||||
"Restore": "還原",
|
||||
"Restore calibration": "還原校準",
|
||||
"Rotate the sticks slowly at least 2 times in one direction and 2 times in the other direction to cover the whole range.": "將搖桿朝一個方向緩慢旋轉至少 2 次,再朝另一個方向旋轉 2 次,以完整涵蓋整個範圍。",
|
||||
"Run through these tests to verify your controller's functionality.": "執行這些測試以驗證您的手把功能是否正常。",
|
||||
"Saving calibration is locked by default on DualSense Edge joystick modules. A hardware mod is required to save the calibration permanently. The calibration is saved on the modules themselves, so you have to perform the mod twice: once for each module. You would need to bridge two points on the PCB with enamelled wire. There are multiple methods, I personally recommend using either of these two locations to solder the wire to. See images below. Ensure the wire is thin enough so that the shell is closed properly. Make sure you don't short the wire to ground through the letters near the bottom joint.": "DualSense Edge 搖桿模組預設是鎖定儲存校準資料的。需要進行硬體修改才能永久儲存校準。由於校準資料是儲存在模組本身,因此您必須進行兩次硬體修改:每個模組各一次。您需要用漆包線橋接 PCB 上的兩個點。有幾種方法,我個人推薦使用這兩個位置之一來焊接導線。請參見下方圖片。確保線材足夠細,以便外殼能正常閉合。請確保不要讓導線透過底部接點附近的英文字母與地線短路。",
|
||||
"Show raw numbers": "顯示原始數據",
|
||||
"Sony DualShock 4": "Sony DualShock 4",
|
||||
"Sony controllers come from the factory calibrated to have an average circularity error of nearly 10 %, and this is now what games expect. Too perfect circularity can make movements and aim feel stiff and unresponsive in some games.": "Sony 手把出廠時經過校準,平均圓度誤差接近 10%,而這也是目前遊戲所預期的數值。過於完美的圓度可能會導致某些遊戲中的移動和瞄準顯得生硬且反應遲鈍。",
|
||||
"Speaker": "喇叭",
|
||||
"Step size": "步長大小",
|
||||
"Test Speaker": "測試喇叭",
|
||||
"Test Summary": "測試摘要",
|
||||
"Test all buttons, or long-press [square] to Pass and [cross] to Fail, or [circle] to skip.": "測試所有按鍵,或長按 [□] 設為通過,長按 [×] 設為不通過,或按 [○] 跳過。",
|
||||
"The <b>Done</b> button will unlock after at most 15 seconds. If you press <b>Done</b> without rotating the sticks, the calibration will be incomplete and you will need to repeat it.": "<b>完成</b> 按鈕將在最多 15 秒後解鎖。如果您在沒有旋轉搖桿的情況下按下 <b>完成</b>,校準將是不完整的,您將需要重新操作。",
|
||||
"The calibration is stored on each module individually. It is carried over if you place the modules in a different DualSense Edge. Likewise, if you place a different set of modules in your DualSense Edge, you will get a different calibration that is tied to those new modules.": "校準資料單獨儲存在每個模組上。如果您將模組移至不同的 DualSense Edge,校準資料也會隨之轉移。同樣地,如果您在 DualSense Edge 中放置另一組不同的模組,您將獲得與這些新模組綁定的不同校準結果。",
|
||||
"The calibration was restored successfully! Remember to save the changes in order not to loose them when the controller is rebooted.": "校準已成功還原!請記得儲存變更,以免手把重啟時遺失。",
|
||||
"The device appears to be a clone. All calibration functionality is disabled.": "該裝置似乎是仿冒品。所有校準功能均已停用。",
|
||||
"The device is connected via Bluetooth. Disconnect and reconnect using a USB cable instead.": "該裝置目前透過藍牙連接。請斷開連線並改用 USB 線重新連接。",
|
||||
"The finetuning and quick test menus are only accessible for DualSense and DualSense Edge.": "微調和快速測試選單僅適用於 DualSense 和 DualSense Edge。",
|
||||
"The item has been copied to the clipboard.": "項目已成功複製到剪貼簿。",
|
||||
"The website supports the following official controllers:": "本網站支援以下官方原廠手把:",
|
||||
"These previous calibrations are stored locally in your browser's storage. Meaning you can only restore calibrations using the same computer and browser that you used to calibrate it with, and deleting the cache or using Incognito will make any previous calibration irrecoverable.": "這些先前的校準記錄儲存在您瀏覽器的本地空間中。這意味著您只能在使用同一台電腦和同一個瀏覽器時才能還原校準,清除快取或使用無痕模式將導致先前的校準記錄無法找回。",
|
||||
"This controller has unsaved changes that will be lost when the controller is rebooted.": "此手把有未儲存的變更,將在手把重啟時遺失。",
|
||||
"This software is not intended to fix stickdrift and will <b>not</b> fix stickdrift on its own if you already experience that.": "此軟體並非設計用來解決搖桿漂移問題,如果您已經遇到漂移,它本身<b>無法</b>修復漂移。",
|
||||
"This test checks all controller buttons by requiring you to press each button up to three times.": "此測試將要求您按下每個按鍵最多三次,以檢查所有手把按鍵。",
|
||||
"This test checks the headphone jack functionality.": "此測試用來檢查耳機插孔功能。",
|
||||
"This test checks the reliability of the USB port.": "此測試用來檢查 USB 連接埠的穩定性。",
|
||||
"This test will cycle through red, green, and blue colors on the controller lightbar, animate the player indicator lights, and flash the mute button.": "此測試將循環切換手把燈條的紅、綠、藍三色,播放玩家指示燈動畫,並閃爍靜音按鈕。",
|
||||
"This test will enable heavy resistance on both L2 and R2 triggers.": "此測試將在 L2 和 R2 扳機上啟用強烈的阻力回饋。",
|
||||
"This utility cannot fix stick drift.": "此工具無法修復搖桿漂移。",
|
||||
"This video from V2.16 shows how to use the finetuning menu.": "這段來自 V2.16 的影片展示了如何使用微調選單。",
|
||||
"USB Connector": "USB 連接埠",
|
||||
"Unsupported browser.": "不支援的瀏覽器。",
|
||||
"Use expert mode": "使用專家模式",
|
||||
"Use four-step calibration": "使用四步驟校準",
|
||||
"Use normal mode": "使用正常模式",
|
||||
"Use quick calibration": "使用快速校準",
|
||||
"Using this utility on a phone or tablet is not supported.": "不支援在手機或平板電腦上使用此工具。",
|
||||
"Values": "數值",
|
||||
"Watch the controller lights change colors, the player lights animate, and the mute button flash.": "觀察手把燈條顏色變化、玩家指示燈動畫以及靜音按鈕的閃爍。",
|
||||
"We recommend a circularity between 7% and 9%. The reason for this is to mimic a stock controllers calibration. However, symmetrical overshoot is more important and if you need to deviate from this range to achieve better symmetry, that is fine too.": "我們建議將圓度保持在 7% 到 9% 之間。這是為了模擬原廠手把的校準設定。然而,對稱的過衝量更為重要,如果您為了達到更好的對稱性而需要偏離這個範圍,那也是完全沒問題的。",
|
||||
"What are the risks of using the calibration?": "使用此校準有什麼風險?",
|
||||
"What circularity percentage to aim for when calibrating and finetuning.": "校準和微調時應該以多少圓度百分比為目標。",
|
||||
"What the software will help with, is ensuring new joysticks will function properly after replacing the old broken joysticks that drift. This step involves opening up the controller and soldering new potentiometers or an entire new joystick.": "此軟體能提供幫助的地方,是在更換了原本漂移損壞的老舊搖桿後,確保新搖桿能夠正常運作。該步驟涉及拆開手把並焊接新的電位器或整個新搖桿。",
|
||||
"When calibrating, there is no risk. However, if your controller disconnects during the split second that you save a calibration, then you have a chance of bricking your controller. Make sure your battery has enough charge and is plugged into the controller, and the USB cable is securely connected. This prevents your controller from being bricked if the USB cable accidentally disconnects.": "在進行校準時是沒有風險的。然而,如果在您儲存校準的那一瞬間手把斷開連接,則有可能會導致手把損壞(變磚)。請確保您的電池電量充足且已接上手把,同時 USB 連接線已牢固連接。這可以防止因 USB 線意外脫落而導致手把損壞。",
|
||||
"Which controllers does DualShock Calibration GUI support?": "DualShock Calibration GUI 支援哪些手把?",
|
||||
"While holding the stick to be adjusted straight up/down/left/right, make adjustments until you see lightblue sectors in all four directions after circling the stick both left and right. Then use the": "將要調整的搖桿推向正上/正下/正左/正右方,並進行調整,直到將搖桿左右旋轉一圈後在四個方向都看到淡藍色區域。然後使用",
|
||||
"Wiggle the USB cable to see if the controller disconnects.": "晃動 USB 連接線以檢查手把是否會斷開連結。",
|
||||
"Yes. Simply do another calibration, and click the green button to save permanently.": "是的。只需再進行一次校準,然後點擊綠色按鈕永久儲存即可。",
|
||||
"You should save your changes, or reboot the controller to revert back to the previous state.": "您應該儲存變更,或重啟手把以還原到先前的狀態。",
|
||||
"Your device might not be a genuine Sony controller. If it is not a clone then please report this issue.": "您的裝置可能不是 Sony 原廠手把。如果確認它不是盜版仿冒品,請回報此問題。",
|
||||
"failed": "失敗",
|
||||
"hide": "隱藏",
|
||||
"passed": "通過",
|
||||
"serial number": "序列號",
|
||||
"skipped": "已跳過",
|
||||
"tests completed": "個測試已完成",
|
||||
"to increase the non-circularity.": "以增加非圓度。",
|
||||
"": ""
|
||||
}
|
||||
5653
package-lock.json
generated
Normal file
56
package.json
Normal file
@@ -0,0 +1,56 @@
|
||||
{
|
||||
"name": "dualshock-calibration-gui",
|
||||
"version": "1.0.0",
|
||||
"description": "A web-based calibration tool for PlayStation DualShock 4, DualSense, and DualSense Edge controllers",
|
||||
"main": "index.html",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"build": "gulp build",
|
||||
"build:prod": "gulp build --production",
|
||||
"clean": "gulp clean",
|
||||
"dev": "gulp dev",
|
||||
"watch": "gulp watch",
|
||||
"serve": "node dev-server.js",
|
||||
"serve:https": "HTTPS=true node dev-server.js",
|
||||
"start": "npm run build && npm run serve",
|
||||
"dev:serve": "npm run build && concurrently \"npm run dev\" \"npm run serve\"",
|
||||
"dev:full": "npm run build && concurrently --kill-others \"npm run watch\" \"npm run serve\""
|
||||
},
|
||||
"devDependencies": {
|
||||
"rollup": "^4.9.0",
|
||||
"@rollup/plugin-node-resolve": "^15.2.3",
|
||||
"@rollup/plugin-terser": "^0.4.4",
|
||||
"gulp": "^5.0.1",
|
||||
"gulp-cli": "^3.1.0",
|
||||
"gulp-terser": "^2.1.0",
|
||||
"gulp-clean-css": "^4.3.0",
|
||||
"gulp-htmlmin": "^5.0.1",
|
||||
"gulp-rev": "^11.0.0",
|
||||
"gulp-rev-replace": "^0.4.4",
|
||||
"gulp-concat": "^2.6.1",
|
||||
"gulp-sourcemaps": "^3.0.0",
|
||||
"gulp-if": "^3.0.0",
|
||||
"gulp-rename": "^2.1.0",
|
||||
"rollup-stream": "^1.24.1",
|
||||
"vinyl-source-stream": "^2.0.0",
|
||||
"vinyl-buffer": "^1.0.1",
|
||||
"del": "^8.0.0",
|
||||
"yargs": "^18.0.0",
|
||||
"gulp-svgmin": "^4.1.0",
|
||||
"gulp-replace": "^1.1.4",
|
||||
"gulp-json-minify": "^1.2.3",
|
||||
"glob": "^10.3.10",
|
||||
"html-minifier-terser": "^7.2.0",
|
||||
"concurrently": "^8.2.2",
|
||||
"http-server": "^14.1.1"
|
||||
},
|
||||
"keywords": [
|
||||
"dualshock",
|
||||
"dualsense",
|
||||
"controller",
|
||||
"calibration",
|
||||
"webHID"
|
||||
],
|
||||
"author": "",
|
||||
"license": "MIT"
|
||||
}
|
||||
225
scripts/README_check_translations.md
Normal file
@@ -0,0 +1,225 @@
|
||||
# Translation String Checker
|
||||
|
||||
This script analyzes the DualShock Tools codebase to find translation strings and compares them with the language files to identify discrepancies.
|
||||
|
||||
## Features
|
||||
|
||||
### 1. **Source Code Analysis**
|
||||
|
||||
- Scans HTML files for elements with the `ds-i18n` class
|
||||
- Scans JavaScript files for strings passed to the `l()` function
|
||||
- Handles both `l()` and `this.l()` function calls
|
||||
- Strips simple HTML formatting tags (`<b>`, `<i>`, `<em>`, `<strong>`, `<span>`)
|
||||
- Decodes HTML entities and normalizes whitespace
|
||||
- **Automatically ignores commented-out code:**
|
||||
- HTML comments (`<!-- ... -->`)
|
||||
- JavaScript single-line comments (`// ...`)
|
||||
- JavaScript multi-line comments (`/* ... */`)
|
||||
|
||||
### 2. **Smart Filtering**
|
||||
|
||||
Automatically excludes non-translatable strings:
|
||||
|
||||
- CSS class selectors (e.g., `.alert`, `.hide`)
|
||||
- CSS ID selectors (e.g., `#id`)
|
||||
- Compound selectors (e.g., `circle.ds-touch`)
|
||||
- SVG element lists (e.g., `path,rect,circle`)
|
||||
- Hex escape sequences (e.g., `\x1B`)
|
||||
- CSS display values (`hide`, `show`)
|
||||
|
||||
### 3. **Whitelist for Unused Strings**
|
||||
|
||||
The script includes a whitelist (`WHITELIST_UNUSED`) for strings that are in language files but should be ignored by the unused check. These strings may be:
|
||||
|
||||
- Used dynamically (e.g., controller model names, color variants)
|
||||
- Reserved for future use
|
||||
- Used in comments or documentation
|
||||
- Part of error messages that are rarely triggered
|
||||
|
||||
The whitelist is defined in the script and can be updated as needed. Whitelisted strings are excluded from the "unused translations" report but are still included in the JSON output for reference.
|
||||
|
||||
### 4. **Comparison & Reporting**
|
||||
|
||||
Identifies two types of issues:
|
||||
|
||||
- **Missing translations**: Strings used in code but not in translation files
|
||||
- **Unused translations**: Strings in translation files but no longer used in code (excluding whitelisted strings)
|
||||
|
||||
### 5. **Clickable File References & Language Tracking**
|
||||
|
||||
Each missing translation shows:
|
||||
|
||||
- The exact file location in `file:line:col` format (clickable in VS Code)
|
||||
- A note if the string appears in multiple locations
|
||||
- Which language files are missing this translation
|
||||
|
||||
Example output:
|
||||
|
||||
```
|
||||
- Don't show again
|
||||
→ templates/edge-modal.html:33:11
|
||||
Missing from: ALL languages (22)
|
||||
- Connected invalid device:
|
||||
→ js/core.js:224:11
|
||||
(and 1 more location)
|
||||
Missing from: ALL languages (22)
|
||||
- Some partial translation
|
||||
→ index.html:123:45
|
||||
Missing from: ar_ar, de_de, es_es, fr_fr, it_it (and 5 more)
|
||||
```
|
||||
|
||||
### 6. **Multiple Output Modes**
|
||||
|
||||
#### Normal Mode (default)
|
||||
|
||||
Human-readable output with sections for missing and unused translations:
|
||||
|
||||
```bash
|
||||
python3 scripts/check_translations.py
|
||||
```
|
||||
|
||||
#### Verbose Mode
|
||||
|
||||
Shows excluded strings for debugging:
|
||||
|
||||
```bash
|
||||
python3 scripts/check_translations.py --verbose
|
||||
# or
|
||||
python3 scripts/check_translations.py -v
|
||||
```
|
||||
|
||||
#### JSON Mode
|
||||
|
||||
Machine-readable output for integration with other tools:
|
||||
|
||||
```bash
|
||||
python3 scripts/check_translations.py --json
|
||||
```
|
||||
|
||||
JSON output includes location and language information:
|
||||
|
||||
```json
|
||||
{
|
||||
"summary": {
|
||||
"total_strings_used": 223,
|
||||
"total_translation_keys": 268,
|
||||
"total_languages": 22,
|
||||
"missing_count": 28,
|
||||
"unused_count": 0,
|
||||
"excluded_count": 5,
|
||||
"whitelisted_count": 57
|
||||
},
|
||||
"missing_translations": [
|
||||
{
|
||||
"string": "Don't show again",
|
||||
"missing_from_languages": [
|
||||
"ar_ar", "bg_bg", "cz_cz", "da_dk", "de_de", "es_es",
|
||||
"fa_fa", "fr_fr", "hu_hu", "it_it", "jp_jp", "ko_kr",
|
||||
"nl_nl", "pl_pl", "pt_br", "pt_pt", "rs_rs", "ru_ru",
|
||||
"tr_tr", "ua_ua", "zh_cn", "zh_tw"
|
||||
],
|
||||
"locations": [
|
||||
{
|
||||
"file": "templates/edge-modal.html",
|
||||
"line": 33,
|
||||
"col": 11
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"unused_translations": [...],
|
||||
"excluded_strings": [...],
|
||||
"whitelisted_strings": [...]
|
||||
}
|
||||
```
|
||||
|
||||
## Exit Codes
|
||||
|
||||
- **0**: All translations are in sync
|
||||
- **1**: There are missing or unused translations (suitable for CI/CD)
|
||||
|
||||
## Usage Examples
|
||||
|
||||
### Check translations and see results
|
||||
|
||||
```bash
|
||||
python3 scripts/check_translations.py
|
||||
```
|
||||
|
||||
### Debug excluded strings
|
||||
|
||||
```bash
|
||||
python3 scripts/check_translations.py --verbose
|
||||
```
|
||||
|
||||
### Generate JSON report
|
||||
|
||||
```bash
|
||||
python3 scripts/check_translations.py --json > translation_report.json
|
||||
```
|
||||
|
||||
### Use in CI/CD pipeline
|
||||
|
||||
```bash
|
||||
# This will fail (exit code 1) if there are discrepancies
|
||||
python3 scripts/check_translations.py
|
||||
```
|
||||
|
||||
## How It Works
|
||||
|
||||
1. **Scan Phase**: The script scans all HTML and JavaScript files to extract translation strings
|
||||
- Comments are automatically removed before extraction to avoid false positives
|
||||
2. **Filter Phase**: Non-translatable strings (CSS selectors, etc.) are filtered out
|
||||
3. **Load Phase**: Translation keys are loaded from all language files in `lang/`
|
||||
4. **Compare Phase**: Set operations identify missing and unused translations
|
||||
5. **Report Phase**: Results are displayed with clickable file references
|
||||
|
||||
## Special Keys
|
||||
|
||||
The following keys are excluded from comparison as they are metadata:
|
||||
|
||||
- `.authorMsg` - Author information in language files
|
||||
- `.title` - Language name in language files
|
||||
|
||||
## Managing the Whitelist
|
||||
|
||||
The `WHITELIST_UNUSED` set in the script contains strings that should be ignored by the unused translations check. To update the whitelist:
|
||||
|
||||
1. Open `scripts/check_translations.py`
|
||||
2. Find the `WHITELIST_UNUSED` set (near the top of the file)
|
||||
3. Add or remove strings as needed
|
||||
4. Run the script to verify the changes
|
||||
|
||||
**When to add strings to the whitelist:**
|
||||
|
||||
- Controller model names (e.g., "Sony DualSense", "DualShock 4 V2")
|
||||
- Color variants (e.g., "Midnight Black", "Cosmic Red")
|
||||
- Special edition names (e.g., "30th Anniversary", "God of War Ragnarok")
|
||||
- Error messages that are rarely shown (e.g., "Error 2", "Error 3")
|
||||
- Strings used dynamically or conditionally
|
||||
- Strings reserved for future features
|
||||
|
||||
**When NOT to add strings to the whitelist:**
|
||||
|
||||
- Strings that are truly unused and should be removed from language files
|
||||
- Strings that should be used in code but aren't yet (fix the code instead)
|
||||
|
||||
## File Structure
|
||||
|
||||
The script expects the following directory structure:
|
||||
|
||||
```
|
||||
.
|
||||
├── lang/ # Translation JSON files
|
||||
├── js/ # JavaScript files
|
||||
├── templates/ # HTML template files
|
||||
└── *.html # Root HTML files
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- The script uses regex patterns to extract strings, so it may not catch dynamically generated translation keys
|
||||
- HTML content with complex nested tags is skipped to avoid false positives
|
||||
- The script normalizes whitespace to match how the translation system processes strings
|
||||
- All language files should ideally have the same keys (the script takes a union of all keys)
|
||||
- **Commented-out code is automatically ignored**, so translation strings in comments won't be detected as "used"
|
||||
539
scripts/check_translations.py
Executable file
@@ -0,0 +1,539 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
# (C) 2025 dualshock-tools
|
||||
#
|
||||
# This script analyzes the source files to find translation strings and compares
|
||||
# them with the language files to identify:
|
||||
# - Strings that are used in code but missing from translation files
|
||||
# - Strings that are in translation files but no longer used in code
|
||||
#
|
||||
# The script extracts translation strings from:
|
||||
# - HTML files: elements with ds-i18n class
|
||||
# - JavaScript files: l() function calls
|
||||
# - JavaScript files: HTML embedded in strings with ds-i18n class
|
||||
#
|
||||
# The script automatically ignores commented-out code:
|
||||
# - HTML comments (<!-- ... -->)
|
||||
# - JavaScript single-line comments (// ...)
|
||||
# - JavaScript multi-line comments (/* ... */)
|
||||
#
|
||||
# Usage:
|
||||
# python3 scripts/check_translations.py # Normal output
|
||||
# python3 scripts/check_translations.py --verbose # Show excluded strings
|
||||
# python3 scripts/check_translations.py --compact # Compact output (no language details)
|
||||
# python3 scripts/check_translations.py --json # Output in JSON format
|
||||
|
||||
import os
|
||||
import re
|
||||
import json
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
# Check for flags
|
||||
VERBOSE = '--verbose' in sys.argv or '-v' in sys.argv
|
||||
JSON_OUTPUT = '--json' in sys.argv
|
||||
COMPACT = '--compact' in sys.argv
|
||||
|
||||
# Directories to scan
|
||||
ROOT_DIR = Path(".")
|
||||
LANG_DIR = ROOT_DIR / "lang"
|
||||
JS_DIR = ROOT_DIR / "js"
|
||||
TEMPLATES_DIR = ROOT_DIR / "templates"
|
||||
|
||||
# Special keys that are not in source code
|
||||
SPECIAL_KEYS = {".authorMsg", ".title"}
|
||||
|
||||
# Patterns to exclude from translation checks (CSS selectors, technical strings, etc.)
|
||||
EXCLUDE_PATTERNS = [
|
||||
r'^\.[\w-]+$', # CSS class selectors like .alert, .hide
|
||||
r'^#[\w-]+$', # CSS ID selectors
|
||||
r'^[\w-]+\.[\w-]+$', # CSS compound selectors like circle.ds-touch
|
||||
r'^path,rect,circle', # SVG element lists
|
||||
r'^\\x[0-9a-fA-F]+$', # Hex escape sequences
|
||||
]
|
||||
|
||||
# Whitelist of strings that are in language files but should be ignored by unused check
|
||||
# These strings may be used dynamically, in comments, or reserved for future use
|
||||
WHITELIST_UNUSED = {
|
||||
"(beta)",
|
||||
"30th Anniversary",
|
||||
"Astro Bot",
|
||||
"Chroma Indigo",
|
||||
"Chroma Pearl",
|
||||
"Chroma Teal",
|
||||
"Cobalt Blue",
|
||||
"Cosmic Red",
|
||||
"Fortnite",
|
||||
"Galactic Purple",
|
||||
"God of War Ragnarok",
|
||||
"Grey Camouflage",
|
||||
"Midnight Black",
|
||||
"Nova Pink",
|
||||
"Spider-Man 2",
|
||||
"Starlight Blue",
|
||||
"Sterling Silver",
|
||||
"The Last of Us",
|
||||
"Volcanic Red",
|
||||
"White",
|
||||
"God of War 20th Anniversary"
|
||||
|
||||
"Sony DualSense",
|
||||
"Sony DualSense Edge",
|
||||
"Sony DualShock 4 V1",
|
||||
"Sony DualShock 4 V2",
|
||||
|
||||
"Calibration in progress",
|
||||
"Continue",
|
||||
"Start",
|
||||
"Initializing...",
|
||||
"Sampling...",
|
||||
"left module",
|
||||
"right module",
|
||||
"Your device might not be a genuine Sony controller. If it is not a clone then please report this issue.",
|
||||
|
||||
"Adaptive Trigger",
|
||||
"Buttons",
|
||||
"Haptic Vibration",
|
||||
"Headphone Jack",
|
||||
"Lights",
|
||||
"Microphone",
|
||||
"Speaker",
|
||||
"USB Connector",
|
||||
}
|
||||
|
||||
|
||||
def should_exclude_string(text):
|
||||
"""Check if a string should be excluded from translation checks."""
|
||||
for pattern in EXCLUDE_PATTERNS:
|
||||
if re.match(pattern, text):
|
||||
return True
|
||||
return False
|
||||
|
||||
def find_html_files():
|
||||
"""Find all HTML files in the project."""
|
||||
html_files = []
|
||||
# Root HTML files
|
||||
html_files.extend(ROOT_DIR.glob("*.html"))
|
||||
# Template HTML files
|
||||
html_files.extend(TEMPLATES_DIR.glob("*.html"))
|
||||
return html_files
|
||||
|
||||
def find_js_files():
|
||||
"""Find all JavaScript files in the js directory."""
|
||||
js_files = []
|
||||
js_files.extend(JS_DIR.glob("**/*.js"))
|
||||
return js_files
|
||||
|
||||
def extract_ds_i18n_strings(html_files):
|
||||
"""Extract strings from elements with ds-i18n class in HTML files.
|
||||
|
||||
Automatically ignores HTML comments (<!-- ... -->) before extraction.
|
||||
"""
|
||||
strings = {} # Changed to dict to track locations
|
||||
|
||||
# Pattern to match elements with ds-i18n class and extract their content
|
||||
# This handles various HTML structures including multi-line content
|
||||
# Match opening tag with ds-i18n class, then capture content until closing tag
|
||||
pattern = r'<(\w+)[^>]*class="[^"]*ds-i18n[^"]*"[^>]*>(.*?)</\1>'
|
||||
|
||||
for html_file in html_files:
|
||||
try:
|
||||
with open(html_file, 'r', encoding='utf-8') as f:
|
||||
content = f.read()
|
||||
lines = content.split('\n')
|
||||
|
||||
# Remove HTML comments before processing
|
||||
# This regex handles both single-line and multi-line comments
|
||||
content = re.sub(r'<!--.*?-->', '', content, flags=re.DOTALL)
|
||||
|
||||
# Find all matches (DOTALL flag allows . to match newlines)
|
||||
matches = re.finditer(pattern, content, re.DOTALL)
|
||||
for match in matches:
|
||||
text = match.group(2)
|
||||
|
||||
# Skip if contains complex nested HTML tags
|
||||
# Allow simple formatting tags like <b>, <i>, <em>, <strong>, <span>
|
||||
if '<' in text and '>' in text:
|
||||
# Check if it contains only simple formatting tags
|
||||
# Remove simple formatting tags temporarily to check for other HTML
|
||||
text_without_simple_tags = re.sub(r'</?(?:b|i|em|strong|span)>', '', text)
|
||||
if '<' in text_without_simple_tags:
|
||||
# Contains other HTML elements (complex content), skip it
|
||||
continue
|
||||
# Otherwise, keep the original text with simple formatting tags
|
||||
|
||||
if text:
|
||||
# Calculate line and column number
|
||||
line_num = content[:match.start()].count('\n') + 1
|
||||
col_num = match.start() - content[:match.start()].rfind('\n')
|
||||
|
||||
# Store location info
|
||||
if text not in strings:
|
||||
strings[text] = []
|
||||
strings[text].append({
|
||||
'file': str(html_file),
|
||||
'line': line_num,
|
||||
'col': col_num
|
||||
})
|
||||
|
||||
except Exception as e:
|
||||
print(f"Error reading {html_file}: {e}")
|
||||
|
||||
return strings
|
||||
|
||||
def extract_l_function_strings(js_files):
|
||||
"""Extract strings passed to l() function in JavaScript files.
|
||||
|
||||
Automatically ignores JavaScript comments (// and /* ... */) before extraction.
|
||||
"""
|
||||
strings = {} # Changed to dict to track locations
|
||||
|
||||
# Pattern to match l("string") or l('string') or this.l("string") or this.l('string')
|
||||
# Handles both single and double quotes
|
||||
# Use word boundary \b to ensure 'l' is not part of a larger word (e.g., .html)
|
||||
pattern = r'(?:this\.)?\bl\s*\(\s*["\'`]([^"\'`]+)["\'`]\s*\)'
|
||||
|
||||
for js_file in js_files:
|
||||
try:
|
||||
with open(js_file, 'r', encoding='utf-8') as f:
|
||||
content = f.read()
|
||||
|
||||
# Remove JavaScript comments before processing
|
||||
# Remove single-line comments (// ...)
|
||||
content = re.sub(r'//.*?$', '', content, flags=re.MULTILINE)
|
||||
# Remove multi-line comments (/* ... */)
|
||||
content = re.sub(r'/\*.*?\*/', '', content, flags=re.DOTALL)
|
||||
|
||||
# Find all matches
|
||||
matches = re.finditer(pattern, content)
|
||||
for match in matches:
|
||||
text = match.group(1)
|
||||
if text:
|
||||
# Calculate line and column number
|
||||
line_num = content[:match.start()].count('\n') + 1
|
||||
col_num = match.start() - content[:match.start()].rfind('\n')
|
||||
|
||||
# Store location info
|
||||
if text not in strings:
|
||||
strings[text] = []
|
||||
strings[text].append({
|
||||
'file': str(js_file),
|
||||
'line': line_num,
|
||||
'col': col_num
|
||||
})
|
||||
|
||||
except Exception as e:
|
||||
print(f"Error reading {js_file}: {e}")
|
||||
|
||||
return strings
|
||||
|
||||
def extract_html_strings_from_js(js_files):
|
||||
"""Extract strings from HTML embedded in JavaScript files.
|
||||
|
||||
This function looks for HTML strings in JavaScript that contain elements with ds-i18n class.
|
||||
Automatically ignores JavaScript comments (// and /* ... */) before extraction.
|
||||
"""
|
||||
strings = {} # Dict to track locations
|
||||
|
||||
# Pattern to match elements with ds-i18n class in HTML strings
|
||||
# This handles HTML within JavaScript strings (both single and double quotes)
|
||||
pattern = r'<(\w+)[^>]*class=["\'`][^"\'`]*ds-i18n[^"\'`]*["\'`][^>]*>(.*?)</\1>'
|
||||
|
||||
# Pattern to match template literal function calls like ${l('string')} or ${l("string")}
|
||||
template_literal_pattern = r'\$\{l\s*\(\s*["\'`]([^"\'`]+)["\'`]\s*\)\}'
|
||||
|
||||
for js_file in js_files:
|
||||
try:
|
||||
with open(js_file, 'r', encoding='utf-8') as f:
|
||||
content = f.read()
|
||||
original_content = content # Keep original for line number calculation
|
||||
|
||||
# Remove JavaScript comments before processing
|
||||
# Remove single-line comments (// ...)
|
||||
content = re.sub(r'//.*?$', '', content, flags=re.MULTILINE)
|
||||
# Remove multi-line comments (/* ... */)
|
||||
content = re.sub(r'/\*.*?\*/', '', content, flags=re.DOTALL)
|
||||
|
||||
# Find all matches (DOTALL flag allows . to match newlines)
|
||||
matches = re.finditer(pattern, content, re.DOTALL)
|
||||
for match in matches:
|
||||
text = match.group(2)
|
||||
|
||||
# Skip if contains complex nested HTML tags
|
||||
# Allow simple formatting tags like <b>, <i>, <em>, <strong>, <span>
|
||||
if '<' in text and '>' in text:
|
||||
# Check if it contains only simple formatting tags
|
||||
# Remove simple formatting tags temporarily to check for other HTML
|
||||
text_without_simple_tags = re.sub(r'</?(?:b|i|em|strong|span)>', '', text)
|
||||
if '<' in text_without_simple_tags:
|
||||
# Contains other HTML elements (complex content), skip it
|
||||
continue
|
||||
# Otherwise, keep the original text with simple formatting tags
|
||||
|
||||
if text:
|
||||
# Extract any template literal function calls like ${l('string')}
|
||||
template_matches = re.finditer(template_literal_pattern, text)
|
||||
for template_match in template_matches:
|
||||
extracted_string = template_match.group(1)
|
||||
if extracted_string:
|
||||
# Calculate line and column number using original content
|
||||
line_num = original_content[:match.start()].count('\n') + 1
|
||||
col_num = match.start() - original_content[:match.start()].rfind('\n')
|
||||
|
||||
# Store location info
|
||||
if extracted_string not in strings:
|
||||
strings[extracted_string] = []
|
||||
strings[extracted_string].append({
|
||||
'file': str(js_file),
|
||||
'line': line_num,
|
||||
'col': col_num
|
||||
})
|
||||
|
||||
# Also handle text that doesn't contain template literal patterns
|
||||
# (for backwards compatibility with non-template literal strings)
|
||||
if not re.search(template_literal_pattern, text):
|
||||
# Calculate line and column number using original content
|
||||
line_num = original_content[:match.start()].count('\n') + 1
|
||||
col_num = match.start() - original_content[:match.start()].rfind('\n')
|
||||
|
||||
# Store location info
|
||||
if text not in strings:
|
||||
strings[text] = []
|
||||
strings[text].append({
|
||||
'file': str(js_file),
|
||||
'line': line_num,
|
||||
'col': col_num
|
||||
})
|
||||
|
||||
except Exception as e:
|
||||
print(f"Error reading {js_file}: {e}")
|
||||
|
||||
return strings
|
||||
|
||||
def load_translation_keys():
|
||||
"""Load all translation keys from language files.
|
||||
|
||||
Returns:
|
||||
tuple: (all_keys, keys_by_language)
|
||||
- all_keys: set of all unique keys across all language files
|
||||
- keys_by_language: dict mapping language code to set of keys in that language
|
||||
"""
|
||||
all_keys = set()
|
||||
keys_by_language = {}
|
||||
|
||||
lang_files = list(LANG_DIR.glob("*.json"))
|
||||
|
||||
if not lang_files:
|
||||
print(f"Warning: No language files found in {LANG_DIR}")
|
||||
return all_keys, keys_by_language
|
||||
|
||||
# Load keys from all language files
|
||||
for lang_file in lang_files:
|
||||
try:
|
||||
# Extract language code from filename (e.g., "en_us" from "en_us.json")
|
||||
lang_code = lang_file.stem
|
||||
|
||||
with open(lang_file, 'r', encoding='utf-8') as f:
|
||||
data = json.load(f)
|
||||
keys = set(data.keys())
|
||||
keys.discard("") # Remove empty string key if present
|
||||
|
||||
keys_by_language[lang_code] = keys
|
||||
all_keys.update(keys)
|
||||
except Exception as e:
|
||||
print(f"Error reading {lang_file}: {e}")
|
||||
|
||||
# Remove empty string key if present
|
||||
all_keys.discard("")
|
||||
|
||||
return all_keys, keys_by_language
|
||||
|
||||
def main():
|
||||
if not JSON_OUTPUT:
|
||||
print("=" * 80)
|
||||
print("Translation String Checker")
|
||||
print("=" * 80)
|
||||
print()
|
||||
|
||||
# Find all source files
|
||||
if not JSON_OUTPUT:
|
||||
print("Scanning source files...")
|
||||
html_files = find_html_files()
|
||||
js_files = find_js_files()
|
||||
|
||||
if not JSON_OUTPUT:
|
||||
print(f"Found {len(html_files)} HTML files")
|
||||
print(f"Found {len(js_files)} JavaScript files")
|
||||
print()
|
||||
|
||||
# Extract strings from source files
|
||||
if not JSON_OUTPUT:
|
||||
print("Extracting translation strings from source files...")
|
||||
ds_i18n_strings = extract_ds_i18n_strings(html_files)
|
||||
l_function_strings = extract_l_function_strings(js_files)
|
||||
html_in_js_strings = extract_html_strings_from_js(js_files)
|
||||
|
||||
if not JSON_OUTPUT:
|
||||
print(f"Found {len(ds_i18n_strings)} strings with ds-i18n class in HTML files")
|
||||
print(f"Found {len(l_function_strings)} strings in l() function calls")
|
||||
print(f"Found {len(html_in_js_strings)} strings with ds-i18n class in JavaScript files")
|
||||
print()
|
||||
|
||||
# Combine all used strings and filter out excluded patterns
|
||||
# Merge the three dictionaries, combining location lists for duplicate strings
|
||||
all_used_strings_with_locations = {}
|
||||
for text, locations in ds_i18n_strings.items():
|
||||
all_used_strings_with_locations[text] = locations.copy()
|
||||
for text, locations in l_function_strings.items():
|
||||
if text in all_used_strings_with_locations:
|
||||
all_used_strings_with_locations[text].extend(locations)
|
||||
else:
|
||||
all_used_strings_with_locations[text] = locations.copy()
|
||||
for text, locations in html_in_js_strings.items():
|
||||
if text in all_used_strings_with_locations:
|
||||
all_used_strings_with_locations[text].extend(locations)
|
||||
else:
|
||||
all_used_strings_with_locations[text] = locations.copy()
|
||||
|
||||
excluded_strings = {s for s in all_used_strings_with_locations.keys() if should_exclude_string(s)}
|
||||
used_strings_with_locations = {k: v for k, v in all_used_strings_with_locations.items() if k not in excluded_strings}
|
||||
used_strings = set(used_strings_with_locations.keys())
|
||||
|
||||
if not JSON_OUTPUT and excluded_strings:
|
||||
print(f"Excluded {len(excluded_strings)} non-translatable strings (CSS selectors, etc.)")
|
||||
if VERBOSE:
|
||||
for s in sorted(excluded_strings):
|
||||
print(f" - \"{s}\"")
|
||||
print()
|
||||
|
||||
# Load translation keys
|
||||
if not JSON_OUTPUT:
|
||||
print("Loading translation keys from language files...")
|
||||
translation_keys, keys_by_language = load_translation_keys()
|
||||
if not JSON_OUTPUT:
|
||||
print(f"Found {len(translation_keys)} keys in translation files")
|
||||
print(f"Found {len(keys_by_language)} language files")
|
||||
print()
|
||||
|
||||
# Remove special keys from comparison
|
||||
translation_keys_for_comparison = translation_keys - SPECIAL_KEYS
|
||||
|
||||
# Remove special keys from each language's key set
|
||||
keys_by_language_filtered = {}
|
||||
for lang_code, keys in keys_by_language.items():
|
||||
keys_by_language_filtered[lang_code] = keys - SPECIAL_KEYS
|
||||
|
||||
# Find missing translations (used in code but not in translation files)
|
||||
missing_translations = used_strings - translation_keys_for_comparison
|
||||
|
||||
# For each missing translation, find which languages are missing it
|
||||
missing_by_language = {}
|
||||
for string in missing_translations:
|
||||
missing_langs = []
|
||||
for lang_code, keys in keys_by_language_filtered.items():
|
||||
if string not in keys:
|
||||
missing_langs.append(lang_code)
|
||||
missing_by_language[string] = sorted(missing_langs)
|
||||
|
||||
# Find unused translations (in translation files but not used in code)
|
||||
# Exclude whitelisted strings from unused check
|
||||
unused_translations = (translation_keys_for_comparison - used_strings) - WHITELIST_UNUSED
|
||||
|
||||
# Output results
|
||||
if JSON_OUTPUT:
|
||||
# Build missing translations with locations and missing languages
|
||||
missing_with_locations = []
|
||||
for string in sorted(missing_translations):
|
||||
entry = {
|
||||
"string": string,
|
||||
"missing_from_languages": missing_by_language.get(string, [])
|
||||
}
|
||||
if string in used_strings_with_locations:
|
||||
entry["locations"] = used_strings_with_locations[string]
|
||||
missing_with_locations.append(entry)
|
||||
|
||||
result = {
|
||||
"summary": {
|
||||
"total_strings_used": len(used_strings),
|
||||
"total_translation_keys": len(translation_keys_for_comparison),
|
||||
"total_languages": len(keys_by_language),
|
||||
"missing_count": len(missing_translations),
|
||||
"unused_count": len(unused_translations),
|
||||
"excluded_count": len(excluded_strings),
|
||||
"whitelisted_count": len(WHITELIST_UNUSED)
|
||||
},
|
||||
"missing_translations": missing_with_locations,
|
||||
"unused_translations": sorted(unused_translations),
|
||||
"excluded_strings": sorted(excluded_strings),
|
||||
"whitelisted_strings": sorted(WHITELIST_UNUSED)
|
||||
}
|
||||
print(json.dumps(result, indent=2, ensure_ascii=False))
|
||||
return 1 if (missing_translations or unused_translations) else 0
|
||||
|
||||
# Print results (text format)
|
||||
print("=" * 80)
|
||||
print("RESULTS")
|
||||
print("=" * 80)
|
||||
print()
|
||||
|
||||
if missing_translations:
|
||||
print(f"⚠️ MISSING TRANSLATIONS ({len(missing_translations)} strings)")
|
||||
print("These strings are used in code but not found in translation files:")
|
||||
print("-" * 80)
|
||||
for string in sorted(missing_translations):
|
||||
print(f" - \"{string}\"")
|
||||
# Show first location where this string was found (skip in compact mode)
|
||||
if not COMPACT and string in used_strings_with_locations:
|
||||
locations = used_strings_with_locations[string]
|
||||
if locations:
|
||||
loc = locations[0]
|
||||
print(f" → {loc['file']}:{loc['line']}:{loc['col']}")
|
||||
if len(locations) > 1:
|
||||
print(f" (and {len(locations) - 1} more location{'s' if len(locations) > 2 else ''})")
|
||||
# Show which languages are missing this translation (skip in compact mode)
|
||||
if not COMPACT and string in missing_by_language:
|
||||
missing_langs = missing_by_language[string]
|
||||
if len(missing_langs) == len(keys_by_language):
|
||||
print(f" Missing from: ALL languages ({len(missing_langs)})")
|
||||
else:
|
||||
# Show first few languages, then count
|
||||
if len(missing_langs) <= 5:
|
||||
print(f" Missing from: {', '.join(missing_langs)}")
|
||||
else:
|
||||
print(f" Missing from: {', '.join(missing_langs[:5])} (and {len(missing_langs) - 5} more)")
|
||||
print()
|
||||
else:
|
||||
print("✅ No missing translations found!")
|
||||
print()
|
||||
|
||||
if unused_translations:
|
||||
print(f"ℹ️ UNUSED TRANSLATIONS ({len(unused_translations)} strings)")
|
||||
print("These strings are in translation files but not used in code:")
|
||||
print("-" * 80)
|
||||
for string in sorted(unused_translations):
|
||||
print(f" - \"{string}\"")
|
||||
print()
|
||||
else:
|
||||
print("✅ No unused translations found!")
|
||||
print()
|
||||
|
||||
# Summary
|
||||
print("=" * 80)
|
||||
print("SUMMARY")
|
||||
print("=" * 80)
|
||||
print(f"Total strings used in code: {len(used_strings)}")
|
||||
print(f"Total keys in translation files: {len(translation_keys_for_comparison)}")
|
||||
print(f"Missing translations: {len(missing_translations)}")
|
||||
print(f"Unused translations: {len(unused_translations)}")
|
||||
print(f"Whitelisted strings: {len(WHITELIST_UNUSED)}")
|
||||
print()
|
||||
|
||||
if missing_translations or unused_translations:
|
||||
print("⚠️ Translation files need updates!")
|
||||
return 1
|
||||
else:
|
||||
print("✅ All translations are in sync!")
|
||||
return 0
|
||||
|
||||
if __name__ == "__main__":
|
||||
exit(main())
|
||||
174
scripts/forget_bluetooth.py
Executable file
@@ -0,0 +1,174 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
# (C) 2025 dualshock-tools
|
||||
#
|
||||
# This script lists paired Bluetooth devices on macOS and allows you to
|
||||
# select which ones to forget (unpair).
|
||||
#
|
||||
# Usage: python3 scripts/forget_bluetooth.py
|
||||
#
|
||||
# Requirements: macOS with blueutil installed
|
||||
# Install blueutil: brew install blueutil
|
||||
|
||||
import subprocess
|
||||
import sys
|
||||
import re
|
||||
|
||||
def check_blueutil():
|
||||
"""Check if blueutil is installed."""
|
||||
try:
|
||||
subprocess.run(['blueutil', '--version'], capture_output=True, check=True)
|
||||
return True
|
||||
except (subprocess.CalledProcessError, FileNotFoundError):
|
||||
return False
|
||||
|
||||
def get_paired_devices():
|
||||
"""Get list of paired Bluetooth devices."""
|
||||
try:
|
||||
result = subprocess.run(
|
||||
['blueutil', '--paired'],
|
||||
capture_output=True,
|
||||
text=True,
|
||||
check=True
|
||||
)
|
||||
return result.stdout
|
||||
except subprocess.CalledProcessError as e:
|
||||
print(f"Error getting paired devices: {e}")
|
||||
return None
|
||||
|
||||
def parse_devices(output):
|
||||
"""Parse blueutil output into a list of devices."""
|
||||
devices = []
|
||||
# Pattern: address: xx-xx-xx-xx-xx-xx, name: "Device Name", ...
|
||||
pattern = r'address: ([0-9a-f-]+).*?name: "([^"]*)"'
|
||||
matches = re.finditer(pattern, output, re.IGNORECASE | re.DOTALL)
|
||||
|
||||
for match in matches:
|
||||
address = match.group(1)
|
||||
name = match.group(2)
|
||||
devices.append({
|
||||
'address': address,
|
||||
'name': name
|
||||
})
|
||||
|
||||
return devices
|
||||
|
||||
def forget_device(address):
|
||||
"""Forget (unpair) a Bluetooth device by its address."""
|
||||
try:
|
||||
subprocess.run(
|
||||
['blueutil', '--unpair', address],
|
||||
capture_output=True,
|
||||
text=True,
|
||||
check=True
|
||||
)
|
||||
return True
|
||||
except subprocess.CalledProcessError as e:
|
||||
print(f"Error forgetting device {address}: {e}")
|
||||
return False
|
||||
|
||||
def main():
|
||||
print("=" * 60)
|
||||
print("Bluetooth Controller Manager for macOS")
|
||||
print("=" * 60)
|
||||
print()
|
||||
|
||||
# Check if blueutil is installed
|
||||
if not check_blueutil():
|
||||
print("ERROR: blueutil is not installed.")
|
||||
print()
|
||||
print("Please install it using Homebrew:")
|
||||
print(" brew install blueutil")
|
||||
print()
|
||||
print("If you don't have Homebrew, install it from:")
|
||||
print(" https://brew.sh")
|
||||
sys.exit(1)
|
||||
|
||||
# Get paired devices
|
||||
print("Fetching paired Bluetooth controllers...")
|
||||
output = get_paired_devices()
|
||||
|
||||
if output is None:
|
||||
print("Failed to get paired devices.")
|
||||
sys.exit(1)
|
||||
|
||||
devices = parse_devices(output)
|
||||
|
||||
if not devices:
|
||||
print("No paired Bluetooth devices found.")
|
||||
sys.exit(0)
|
||||
|
||||
# Filter devices to only show controllers
|
||||
devices = [d for d in devices if 'controller' in d['name'].lower()]
|
||||
|
||||
if not devices:
|
||||
print("No paired Bluetooth controllers found.")
|
||||
sys.exit(0)
|
||||
|
||||
# Display devices
|
||||
print(f"\nFound {len(devices)} paired device(s):\n")
|
||||
for idx, device in enumerate(devices, 1):
|
||||
print(f" {idx}. {device['name']}")
|
||||
print(f" Address: {device['address']}")
|
||||
print()
|
||||
|
||||
# Ask user which devices to forget
|
||||
print("=" * 60)
|
||||
print("Enter the numbers of devices to forget (comma-separated),")
|
||||
print("or 'all' to forget all devices, or 'q' to quit:")
|
||||
print("=" * 60)
|
||||
|
||||
user_input = input("> ").strip().lower()
|
||||
|
||||
if user_input == 'q':
|
||||
print("Cancelled.")
|
||||
sys.exit(0)
|
||||
|
||||
# Parse selection
|
||||
selected_indices = []
|
||||
if user_input == 'all':
|
||||
selected_indices = list(range(len(devices)))
|
||||
else:
|
||||
try:
|
||||
parts = [p.strip() for p in user_input.split(',')]
|
||||
for part in parts:
|
||||
idx = int(part) - 1
|
||||
if 0 <= idx < len(devices):
|
||||
selected_indices.append(idx)
|
||||
else:
|
||||
print(f"Warning: Invalid number {part}, skipping.")
|
||||
except ValueError:
|
||||
print("Invalid input. Please enter numbers separated by commas.")
|
||||
sys.exit(1)
|
||||
|
||||
if not selected_indices:
|
||||
print("No devices selected.")
|
||||
sys.exit(0)
|
||||
|
||||
# Confirm
|
||||
print("\nDevices to forget:")
|
||||
for idx in selected_indices:
|
||||
device = devices[idx]
|
||||
print(f" - {device['name']} ({device['address']})")
|
||||
|
||||
confirm = input("\nAre you sure? (yes/no): ").strip().lower()
|
||||
if confirm not in ['yes', 'y']:
|
||||
print("Cancelled.")
|
||||
sys.exit(0)
|
||||
|
||||
# Forget devices
|
||||
print("\nForgetting devices...")
|
||||
success_count = 0
|
||||
for idx in selected_indices:
|
||||
device = devices[idx]
|
||||
print(f" Forgetting {device['name']}...", end=' ')
|
||||
if forget_device(device['address']):
|
||||
print("✓ Done")
|
||||
success_count += 1
|
||||
else:
|
||||
print("✗ Failed")
|
||||
|
||||
print(f"\nSuccessfully forgot {success_count} of {len(selected_indices)} device(s).")
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
74
scripts/process_lang.py
Executable file
@@ -0,0 +1,74 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
# (C) 2025 dualshock-tools
|
||||
#
|
||||
# This script can be used to add or remove a sentence from all the language
|
||||
# files. It's really simple and hacking: just edit this files adding lines
|
||||
# In the corresponsing fields (add, remove) and run it.
|
||||
#
|
||||
# Quick note: run it from the "root" directory of the project: it searches for
|
||||
# ./lang/ so the correct command should be `python3 scripts/process_lang.py`.
|
||||
|
||||
data = {
|
||||
"remove": [
|
||||
# Add here lines to remove from each language file
|
||||
],
|
||||
"add": [
|
||||
# Add here lines to add to each language file
|
||||
],
|
||||
}
|
||||
|
||||
## ---
|
||||
|
||||
import os, json
|
||||
|
||||
def process_file(filename):
|
||||
x = json.loads(open(filename, "r").read())
|
||||
|
||||
modified = False
|
||||
for i in data["remove"]:
|
||||
if i in x:
|
||||
del x[i]
|
||||
modified = True
|
||||
else:
|
||||
print("[REMOVE] %s: Cannot find '%s'" % (filename, i))
|
||||
for i in data["add"]:
|
||||
if i in x:
|
||||
print("[ADD] %s: '%s' already present" % (filename, i))
|
||||
else:
|
||||
x[i] = ""
|
||||
modified = True
|
||||
|
||||
if "" in x:
|
||||
del x[""]
|
||||
empties = []
|
||||
for i in x:
|
||||
if len(x[i].strip()) == 0:
|
||||
empties += [i]
|
||||
|
||||
empties = sorted(empties)
|
||||
|
||||
for i in empties:
|
||||
del x[i]
|
||||
|
||||
for i in empties:
|
||||
x[i] = ""
|
||||
|
||||
x[""] = ""
|
||||
|
||||
return (modified, json.dumps(x, indent=4, ensure_ascii=False))
|
||||
|
||||
|
||||
files = list(os.listdir("lang"))
|
||||
|
||||
for i in files:
|
||||
modified, new_file = process_file("lang/" + i)
|
||||
if not modified:
|
||||
print("%s: not modified" % (i, ))
|
||||
continue
|
||||
if len(new_file) < 100:
|
||||
print("%s: invalid content" % (i, ))
|
||||
continue
|
||||
print("%s: writing changes" % (i, ))
|
||||
|
||||
open("lang/" + i, "w").write(new_file)
|
||||
72
setup-dev.sh
Executable file
@@ -0,0 +1,72 @@
|
||||
#!/bin/bash
|
||||
|
||||
# DualShock Calibration GUI - Development Setup Script
|
||||
|
||||
echo "🎮 DualShock Calibration GUI - Development Setup"
|
||||
echo "================================================"
|
||||
echo ""
|
||||
|
||||
# Check if Node.js is installed
|
||||
if ! command -v node &> /dev/null; then
|
||||
echo "❌ Node.js is not installed"
|
||||
echo "💡 Please install Node.js (v16 or higher) from https://nodejs.org/"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check Node.js version
|
||||
NODE_VERSION=$(node -v | cut -d'v' -f2)
|
||||
MAJOR_VERSION=$(echo $NODE_VERSION | cut -d'.' -f1)
|
||||
|
||||
if [ "$MAJOR_VERSION" -lt 16 ]; then
|
||||
echo "❌ Node.js version $NODE_VERSION is too old"
|
||||
echo "💡 Please upgrade to Node.js v16 or higher"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✅ Node.js version: $NODE_VERSION"
|
||||
|
||||
# Check if npm is installed
|
||||
if ! command -v npm &> /dev/null; then
|
||||
echo "❌ npm is not installed"
|
||||
echo "💡 npm should come with Node.js installation"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✅ npm version: $(npm -v)"
|
||||
echo ""
|
||||
|
||||
# Install dependencies
|
||||
echo "📦 Installing dependencies..."
|
||||
if npm install; then
|
||||
echo "✅ Dependencies installed successfully"
|
||||
else
|
||||
echo "❌ Failed to install dependencies"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo ""
|
||||
|
||||
# Build the application
|
||||
echo "🔨 Building application..."
|
||||
if npm run build; then
|
||||
echo "✅ Application built successfully"
|
||||
else
|
||||
echo "❌ Failed to build application"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "🎉 Setup complete!"
|
||||
echo ""
|
||||
echo "🚀 To start development:"
|
||||
echo " npm run dev:full"
|
||||
echo ""
|
||||
echo "📱 The app will be available at:"
|
||||
echo " https://localhost:8443"
|
||||
echo ""
|
||||
echo "💡 You may need to accept the SSL certificate warning in your browser"
|
||||
echo "💡 Use Chrome or Edge for full WebHID support"
|
||||
echo ""
|
||||
echo "📚 For more information, see:"
|
||||
echo " - README.md"
|
||||
echo " - DEVELOPMENT.md"
|
||||
21
site.webmanifest
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"name": "Dualshock Calibration GUI",
|
||||
"short_name": "DS Tools",
|
||||
"icons": [
|
||||
{
|
||||
"src": "/web-app-manifest-192x192.png",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png",
|
||||
"purpose": "maskable"
|
||||
},
|
||||
{
|
||||
"src": "/web-app-manifest-512x512.png",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png",
|
||||
"purpose": "maskable"
|
||||
}
|
||||
],
|
||||
"theme_color": "#ffffff",
|
||||
"background_color": "#ffffff",
|
||||
"display": "standalone"
|
||||
}
|
||||
19
templates/auto-calib-center-modal.html
Normal file
@@ -0,0 +1,19 @@
|
||||
<!-- Modal -->
|
||||
<div class="modal fade" id="autoCalibCenterModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="staticBackdropLabel" aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h1 class="modal-title fs-5" id="staticBackdropLabel">Calibrating center</h1>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p class="ds-i18n">Recentering the controller sticks.</p>
|
||||
<p class="ds-i18n">Please do not close this window and do not disconnect your controller. </p>
|
||||
<div class="progress" role="progressbar" aria-label="Centering" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100">
|
||||
<div id="calib-center-progress" class="progress-bar" style="width: 0%"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
67
templates/calib-center-modal.html
Normal file
@@ -0,0 +1,67 @@
|
||||
<!-- New calibrate modal -->
|
||||
<div class="modal fade" id="calibCenterModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="calibTitle" aria-hidden="true">
|
||||
<div class="modal-dialog modal-lg">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h1 class="modal-title fs-5 ds-i18n" id="calibTitle">Stick center calibration</h1>
|
||||
<button type="button" id="calibCross" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-4">
|
||||
<div class="list-group" id="list-tab">
|
||||
<a class="ds-i18n list-group-item list-group-item-action active" id="list-1-calib">Welcome</a>
|
||||
<a class="ds-i18n list-group-item list-group-item-action" id="list-2-calib">Step 1</a>
|
||||
<a class="ds-i18n list-group-item list-group-item-action" id="list-3-calib">Step 2</a>
|
||||
<a class="ds-i18n list-group-item list-group-item-action" id="list-4-calib">Step 3</a>
|
||||
<a class="ds-i18n list-group-item list-group-item-action" id="list-5-calib">Step 4</a>
|
||||
<a class="ds-i18n list-group-item list-group-item-action" id="list-6-calib">Completed</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-8">
|
||||
<div class="container" id="list-1">
|
||||
<h4 class="ds-i18n">Welcome to the stick center-calibration wizard!</h4>
|
||||
|
||||
<p class="ds-i18n">This tool will guide you in re-centering the analog sticks of your controller. It consists of four steps: you will be asked to move both sticks in a direction and release them.</p>
|
||||
|
||||
<p class="ds-i18n">Please be aware that, <i>once the calibration is running, it cannot be canceled</i>. Do not close this page or disconnect your controller until it is completed.</p>
|
||||
|
||||
<p class="ds-i18n">Press <b>Start</b> to begin calibration.</p>
|
||||
</div>
|
||||
<div class="container" style="display: none;" id="list-2">
|
||||
<p class="ds-i18n">Please move both sticks to the <b>top-left corner</b> and release them.</p>
|
||||
<p class="ds-i18n">When the sticks are back in the center, press <b>Continue</b>.</p>
|
||||
</div>
|
||||
<div class="container" style="display: none;" id="list-3">
|
||||
<p class="ds-i18n">Please move both sticks to the <b>top-right corner</b> and release them.</p>
|
||||
<p class="ds-i18n">When the sticks are back in the center, press <b>Continue</b>.</p>
|
||||
</div>
|
||||
<div class="container" style="display: none;" id="list-4">
|
||||
<p class="ds-i18n">Please move both sticks to the <b>bottom-left corner</b> and release them.</p>
|
||||
<p class="ds-i18n">When the sticks are back in the center, press <b>Continue</b>.</p>
|
||||
</div>
|
||||
<div class="container" style="display: none;" id="list-5">
|
||||
<p class="ds-i18n">Please move both sticks to the <b>bottom-right corner</b> and release them.</p>
|
||||
<p class="ds-i18n">When the sticks are back in the center, press <b>Continue</b>.</p>
|
||||
</div>
|
||||
<div class="container" style="display: none;" id="list-6">
|
||||
<p class="ds-i18n">Calibration completed successfully!</p>
|
||||
<p class="ds-i18n">Have a nice day :)</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-outline-secondary" id="quickCalibBtn" onclick="quick_calibrate_instead()">
|
||||
<i class="fas fa-bolt"></i> <span class="ds-i18n">Quick calibrate</span>
|
||||
</button>
|
||||
<button type="button" class="btn btn-primary" id="calibNext" onclick="calib_next()">
|
||||
<span class="spinner-border spinner-border-sm" role="status" aria-hidden="true" id="btnSpinner" style="display: none;"></span>
|
||||
<span id="calibNextText" class="ds-i18n">Next</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
19
templates/calibration-history-modal.html
Normal file
@@ -0,0 +1,19 @@
|
||||
<div class="modal fade" id="calibrationHistoryModal" tabindex="-1" aria-labelledby="calibrationHistoryModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog modal-lg modal-dialog-centered modal-dialog-scrollable">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h1 class="modal-title fs-5 ds-i18n" id="calibrationHistoryModalLabel">Calibration History</h1>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div id="historyListContainer">
|
||||
<p class="text-muted ds-i18n">No saved calibrations found.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary ds-i18n" data-bs-dismiss="modal">Close</button>
|
||||
<button type="button" class="btn btn-danger ds-i18n" onclick="calibration_history_clear_all()" id="clearAllBtn" style="display: none;">Clear All</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
34
templates/donate-modal.html
Normal file
@@ -0,0 +1,34 @@
|
||||
<div class="modal fade" id="donateModal" tabindex="-1" aria-labelledby="modal-title" aria-hidden="true">
|
||||
<div class="modal-dialog modal-dialog-centered">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title"></h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
|
||||
<div class="modal-body p-4" id="donateBody">
|
||||
<p class="ds-i18n">Hi, thank you for using this software.</p>
|
||||
<p><span class="ds-i18n">If you're finding it helpful and you want to support my efforts, feel free to</span> <a href="https://paypal.me/alaincarlucci" target="_blank" class="text-body-secondary ds-i18n">buy me a coffee</a><span class="ds-i18n">! :)</span></p>
|
||||
<p class="ds-i18n">Do you have any suggestion or issue? Drop me a message via email or discord.</p>
|
||||
<p class="ds-i18n">Cheers!</p>
|
||||
|
||||
<div class="collapse" id="ethereumCollapse">
|
||||
<div class="card card-body">
|
||||
<h5 class="card-title">Ethereum Address</h5>
|
||||
<center><img src="assets/donate.png" width="128px" /></center>
|
||||
<input type="text" class="form-control" value="0x27dDA2f15A6A477fcdFB3709Ed0760aEF0246D5D" readonly />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button data-bs-toggle="collapse" data-bs-target="#ethereumCollapse" aria-expanded="false" aria-controls="ethereumCollapse" type="button" class="btn btn-success">
|
||||
<svg class="bi" width="18" height="18"><use xlink:href="#ethereum"/></svg> Ethereum
|
||||
</button>
|
||||
|
||||
<button onclick="window.open('https://paypal.me/alaincarlucci')" type="button" class="btn btn-primary" data-bs-dismiss="modal">
|
||||
<svg class="bi" width="18" height="18"><use xlink:href="#paypal"/></svg> PayPal
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
39
templates/edge-modal.html
Normal file
@@ -0,0 +1,39 @@
|
||||
<div class="modal fade" id="edgeModal" tabindex="-1" aria-labelledby="modal-title" aria-hidden="true">
|
||||
<div class="modal-dialog modal-xl modal-dialog-centered">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title ds-i18n">DualSense Edge Calibration</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
|
||||
<div class="modal-body p-4" id="donateBody">
|
||||
<p class="ds-i18n">Support for calibrating DualSense Edge stick modules is now available as an <b>experimental feature</b>.</p>
|
||||
<p class="ds-i18n">Please note: the stick modules on the DS Edge <b>cannot be calibrated via software alone</b>.</p>
|
||||
<p class="ds-i18n">To store a custom calibration on the stick's internal memory, a <b>hardware modification</b> is required.</p>
|
||||
<p class="ds-i18n">This involves temporarily disabling write protection by applying <b>+1.8V</b> to a specific test point on each module.</p>
|
||||
<p></p>
|
||||
|
||||
<p><span class="ds-i18n">You can do this in two ways:</span>
|
||||
<ul>
|
||||
<li class="ds-i18n"><b>Internally</b>: by soldering a wire from a +1.8V source to the write-protect TP.</li>
|
||||
<li class="ds-i18n"><b>Externally</b>: by applying +1.8V directly to the visible test point without opening the controller.</li>
|
||||
</ul>
|
||||
</p>
|
||||
|
||||
<p><b><span class="ds-i18n">This is only for advanced users. If you're not sure what you're doing, please do not attempt it.</span></b></p>
|
||||
<p><span class="ds-i18n">More details and images</span> <a href="https://github.com/lewy20041/Dualsense_Edge_Modules_Callibration" class="ds-i18n">here</a>.</p>
|
||||
|
||||
<p class="ds-i18n">We are not responsible for any damage caused by attempting this modification.</p>
|
||||
<p class="ds-i18n">For more info or help, feel free to reach out on Discord.</p>
|
||||
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<div class="form-check me-auto">
|
||||
<input class="form-check-input" type="checkbox" id="edgeModalDontShowAgain">
|
||||
<label class="form-check-label ds-i18n" for="edgeModalDontShowAgain">Don't show again</label>
|
||||
</div>
|
||||
<button type="button" class="btn btn-primary ds-i18n" data-bs-dismiss="modal">Understood</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
20
templates/edge-progress-modal.html
Normal file
@@ -0,0 +1,20 @@
|
||||
<!-- Edge in progress Modal -->
|
||||
<div class="modal fade" id="edgeProgressModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="edgeProgressLabel" aria-hidden="true">
|
||||
<div class="modal-dialog modal-dialog-centered">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h1 class="modal-title fs-5 ds-i18n" id="edgeProgressLabel">Storing calibration...</h1>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p class="ds-i18n">Calibration is being stored in the stick modules.</p>
|
||||
<p class="ds-i18n">Please do not close this window and do not disconnect your controller. </p>
|
||||
|
||||
<div class="progress" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100">
|
||||
<div id="dsedge-progress" class="progress-bar progress-bar-striped progress-bar-animated" style="width: 0%"></div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
234
templates/faq-modal.html
Normal file
@@ -0,0 +1,234 @@
|
||||
<!-- FAQ -->
|
||||
<div class="modal fade" id="faqModal" tabindex="-1" role="dialog" aria-labelledby="faqModalTitle" aria-hidden="true">
|
||||
<div class="modal-dialog modal-lg modal-fullscreen-md-down" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title ds-i18n" id="faqModalTitle">Frequently Asked Questions</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="p-3 ds-i18n">Welcome to the F.A.Q. section! Below, you'll find answers to some of the most commonly asked questions about this website. If you have any other inquiries or need further assistance, feel free to reach out to me directly. Your feedback and questions are always welcome!</div>
|
||||
<div class="accordion accordion-flush" id="accordionFlushExample">
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header">
|
||||
<button class="ds-i18n accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#flush-collapse13" aria-expanded="false" aria-controls="flush-collapse6">Which controllers does DualShock Calibration GUI support?</button>
|
||||
</h2>
|
||||
<div id="flush-collapse13" class="accordion-collapse collapse" data-bs-parent="#accordionFlushExample">
|
||||
<div class="accordion-body">
|
||||
<p class="ds-i18n">Only official controllers are supported, no third-party or "fake" controllers.</p>
|
||||
<p class="ds-i18n">The website supports the following official controllers:</p>
|
||||
<ul>
|
||||
<li class="ds-i18n">Sony DualShock 4</li>
|
||||
<li class="ds-i18n">Sony DualSense</li>
|
||||
<li><span class="ds-i18n">Sony DualSense Edge</span>*</li>
|
||||
<li class="ds-i18n">PlayStation Virtual Reality 2</li>
|
||||
</ul>
|
||||
<p class="ds-i18n">The finetuning and quick test menus are only accessible for DualSense and DualSense Edge.</p>
|
||||
<p>*<span class="ds-i18n">Saving calibration is locked by default on DualSense Edge joystick modules. A hardware mod is required to save the calibration permanently. The calibration is saved on the modules themselves, so you have to perform the mod twice: once for each module. You would need to bridge two points on the PCB with enamelled wire. There are multiple methods, I personally recommend using either of these two locations to solder the wire to. See images below. Ensure the wire is thin enough so that the shell is closed properly. Make sure you don't short the wire to ground through the letters near the bottom joint.</span></p>
|
||||
<p><span class="ds-i18n">Images</span>: <a target="_blank" href="./images/FAQ_option_1.jpg" class="ds-i18n">Option 1</a>, <a target="_blank" href="./images/FAQ_option_2.jpg" class="ds-i18n">Option 2</a>, <a target="_blank" href="./images/FAQ_Housing_Closing.jpg" class="ds-i18n">Housing</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header">
|
||||
<button class="ds-i18n accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#flush-collapse3" aria-expanded="false" aria-controls="flush-collapse3">How does it work?</button>
|
||||
</h2>
|
||||
<div id="flush-collapse3" class="accordion-collapse collapse" data-bs-parent="#accordionFlushExample">
|
||||
<div class="accordion-body">
|
||||
<p class="ds-i18n">Behind the scenes, this website is the culmination of one year of dedicated effort in reverse-engineering DualShock controllers for fun/hobby from a random guy on the internet.</p>
|
||||
|
||||
<p><span class="ds-i18n">Through</span> <a class="ds-i18n" href='https://blog.the.al' target='_blank'>this research</a><span class="ds-i18n">, it was discovered that there exist some undocumented commands on DualShock controllers that can be sent via USB and are used during factory assembly process. If these commands are sent, the controller starts the recalibration of analog sticks.</span></p>
|
||||
<p class="ds-i18n">While the primary focus of this research wasn't initially centered on recalibration, it became apparent that a service offering this capability could greatly benefit numerous individuals. And thus, here we are.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header">
|
||||
<button class="ds-i18n accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#flush-collapseTwo" aria-expanded="false" aria-controls="flush-collapseTwo">Is this an officially endorsed service?</button>
|
||||
</h2>
|
||||
<div id="flush-collapseTwo" class="accordion-collapse collapse" data-bs-parent="#accordionFlushExample">
|
||||
<div class="ds-i18n accordion-body">No, this service is simply a creation by a DualShock enthusiast.</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header">
|
||||
<button class="ds-i18n accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#flush-collapse4" aria-expanded="false" aria-controls="flush-collapse4">Does this website detect if a controller is a clone?</button>
|
||||
</h2>
|
||||
<div id="flush-collapse4" class="accordion-collapse collapse" data-bs-parent="#accordionFlushExample">
|
||||
<div class="accordion-body">
|
||||
<p class="ds-i18n">Yes, only DualShock4 at the moment. This happened because I accidentally purchased some clones, spent time identifying the differences and added this functionality to prevent future deception.</p>
|
||||
|
||||
<p class="ds-i18n">Unfortunately, the clones cannot be calibrated anyway, because they only clone the behavior of a DualShock4 during normal gameplay, not all the undocumented functionalities.</p>
|
||||
|
||||
<p class="ds-i18n">If you want to extend this detection functionality to DualSense, please ship me a fake DualSense and you'll see it in few weeks.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header">
|
||||
<button class="ds-i18n accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#flush-collapse8" aria-expanded="false" aria-controls="flush-collapse8">Can I overwrite a (permanent) calibration?</button>
|
||||
</h2>
|
||||
<div id="flush-collapse8" class="accordion-collapse collapse" data-bs-parent="#accordionFlushExample">
|
||||
<div class="accordion-body">
|
||||
<p class="ds-i18n">Yes. Simply do another calibration, and click the green button to save permanently.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header">
|
||||
<button class="ds-i18n accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#flush-collapse15" aria-expanded="false" aria-controls="flush-collapse6">Can I restore a previous calibration?</button>
|
||||
</h2>
|
||||
<div id="flush-collapse15" class="accordion-collapse collapse" data-bs-parent="#accordionFlushExample">
|
||||
<div class="accordion-body">
|
||||
<p class="ds-i18n">If you have not clicked the green button "Save changes permanently", then unplugging the controller will reset to the previously saved calibration. It is recommended you test your calibration before saving.</p>
|
||||
<p class="ds-i18n">If you have saved the changes permanently, you can reset the changes only if you are using a DualSense or DualSense Edge. You can click on the grey button "Restore Calibration" to go back to one of the previous calibrations that was saved on the controller. Known issue: You may need to reboot your controller first in order for previous calibrations to show up.</p>
|
||||
<p class="ds-i18n">These previous calibrations are stored locally in your browser's storage. Meaning you can only restore calibrations using the same computer and browser that you used to calibrate it with, and deleting the cache or using Incognito will make any previous calibration irrecoverable.</p>
|
||||
<p><span class="ds-i18n">Images</span>: <a target="_blank" href="./images/FAQ_save_changes.png">Image 1</a>, <a target="_blank" href="./images/FAQ_history.png">Image 2</a></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header">
|
||||
<button class="ds-i18n accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#flush-collapse9" aria-expanded="false" aria-controls="flush-collapse9">Does this software resolve stickdrift?</button>
|
||||
</h2>
|
||||
<div id="flush-collapse9" class="accordion-collapse collapse" data-bs-parent="#accordionFlushExample">
|
||||
<div class="accordion-body">
|
||||
<p class="ds-i18n">Stickdrift is caused by a physical defect; namely dirt, worn potentiometer or in some cases a worn spring.</p>
|
||||
<p class="ds-i18n">This software is not intended to fix stickdrift and will <b>not</b> fix stickdrift on its own if you already experience that.</p>
|
||||
<p><b><span class="ds-i18n">In most cases, calibrating your joysticks that have prior drift issues may result in a worse and unpredictable calibration.</span></b></p>
|
||||
<p class="ds-i18n">What the software will help with, is ensuring new joysticks will function properly after replacing the old broken joysticks that drift. This step involves opening up the controller and soldering new potentiometers or an entire new joystick.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header">
|
||||
<button class="ds-i18n accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#flush-collapse10" aria-expanded="false" aria-controls="flush-collapse10">(DualSense & DualSense Edge) Will updating the firmware reset calibration?</button>
|
||||
</h2>
|
||||
<div id="flush-collapse10" class="accordion-collapse collapse" data-bs-parent="#accordionFlushExample">
|
||||
<div class="accordion-body">
|
||||
<p class="ds-i18n">No.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header">
|
||||
<button class="ds-i18n accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#flush-collapse11" aria-expanded="false" aria-controls="flush-collapse11">After range calibration, joysticks always go in corners.</button>
|
||||
</h2>
|
||||
<div id="flush-collapse11" class="accordion-collapse collapse" data-bs-parent="#accordionFlushExample">
|
||||
<div class="accordion-body">
|
||||
<p class="ds-i18n">This issue happens because you have clicked "Done" immediately after starting a range calibration.</p>
|
||||
<p><b><span class="ds-i18n">Please read the instructions.</span></b></p>
|
||||
<p class="ds-i18n">You have to rotate the joysticks before you press "Done".</p>
|
||||
<p class="ds-i18n">Make sure to touch the edges of the joystick frame and rotate slowly, preferably in each direction - clockwise and anti-clockwise.</p>
|
||||
<p class="ds-i18n">Only after you have done that, you click on "Done".</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header">
|
||||
<button class="ds-i18n accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#flush-collapse17" aria-expanded="false" aria-controls="flush-collapse6">(DualSense Edge) Is the calibration stored on the controller or the modules?</button>
|
||||
</h2>
|
||||
<div id="flush-collapse17" class="accordion-collapse collapse" data-bs-parent="#accordionFlushExample">
|
||||
<div class="accordion-body">
|
||||
<p class="ds-i18n">The calibration is stored on each module individually. It is carried over if you place the modules in a different DualSense Edge. Likewise, if you place a different set of modules in your DualSense Edge, you will get a different calibration that is tied to those new modules.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header">
|
||||
<button class="ds-i18n accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#flush-collapse19" aria-expanded="false" aria-controls="flush-collapse6">How do I use the finetuning feature?</button>
|
||||
</h2>
|
||||
<div id="flush-collapse19" class="accordion-collapse collapse" data-bs-parent="#accordionFlushExample">
|
||||
<div class="accordion-body">
|
||||
<p class="ds-i18n">Finetuning is only available for DualSense and DualSense Edge.</p>
|
||||
<p><a href="https://www.youtube.com/watch?v=3SKohYoX47E&t=123s" class="ds-i18n">This video from V2.16 shows how to use the finetuning menu.</a></p>
|
||||
<p class="ds-i18n">Not shown in the video: You can now also increase the range in each direction uniformly by using the cross in the top right and moving the slider up, which may speed up finetuning. Make sure to rotate the joystick first, otherwise the button cannot be pressed.</p>
|
||||
<p><span class="ds-i18n">Images</span>: <a target="_blank" href="./images/FAQ_finetuning.png" class="ds-i18n">Image 1</a></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header">
|
||||
<button class="ds-i18n accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#flush-collapse20" aria-expanded="false" aria-controls="flush-collapse6">What are the risks of using the calibration?</button>
|
||||
</h2>
|
||||
<div id="flush-collapse20" class="accordion-collapse collapse" data-bs-parent="#accordionFlushExample">
|
||||
<div class="accordion-body">
|
||||
<p class="ds-i18n">When calibrating, there is no risk. However, if your controller disconnects during the split second that you save a calibration, then you have a chance of bricking your controller. Make sure your battery has enough charge and is plugged into the controller, and the USB cable is securely connected. This prevents your controller from being bricked if the USB cable accidentally disconnects.</p>
|
||||
<p class="ds-i18n">If you don't have a battery connected or the connected battery is empty, AND your cable disconnects during saving the calibration, then your controller has a high chance of being bricked.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header">
|
||||
<button class="ds-i18n accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#flush-collapse21" aria-expanded="false" aria-controls="flush-collapse6">What circularity percentage to aim for when calibrating and finetuning.</button>
|
||||
</h2>
|
||||
<div id="flush-collapse21" class="accordion-collapse collapse" data-bs-parent="#accordionFlushExample">
|
||||
<div class="accordion-body">
|
||||
<p class="ds-i18n">We recommend a circularity between 7% and 9%. The reason for this is to mimic a stock controllers calibration. However, symmetrical overshoot is more important and if you need to deviate from this range to achieve better symmetry, that is fine too.</p>
|
||||
<p class="ds-i18n">A sample test was done with 30 dualsense edge modules, and the results showed that the inner quartile range (IQR) is 8.3% and 9.0%, with an average of 8.6%. This goes to show that stock controllers by default have a relatively high range, and the rule of thumb is to follow factory calibration.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header">
|
||||
<button class="ds-i18n accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#flush-collapse5" aria-expanded="false" aria-controls="flush-collapse5">What development is in plan?</button>
|
||||
</h2>
|
||||
<div id="flush-collapse5" class="accordion-collapse collapse" data-bs-parent="#accordionFlushExample">
|
||||
<div class="accordion-body">
|
||||
<p class="ds-i18n">I maintain two separate to-do lists for this project, although the priority has yet to be established.</p>
|
||||
|
||||
<p class="ds-i18n">The first list is about enhancing support for DualShock4 and DualSense controllers:</p>
|
||||
<ul>
|
||||
<li class="ds-i18n">Implement calibration of L2/R2 triggers.</li>
|
||||
<li class="ds-i18n">Improve detection of clones, particularly beneficial for those seeking to purchase used controllers with assurance of authenticity.</li>
|
||||
<li class="ds-i18n">Add support for recalibrating IMUs.</li>
|
||||
<li class="ds-i18n">Additionally, explore the possibility of reviving non-functioning DualShock controllers (further discussion available on Discord for interested parties).</li>
|
||||
</ul>
|
||||
|
||||
<p class="ds-i18n">The second list contains new controllers I aim to support:</p>
|
||||
<ul>
|
||||
<li class="ds-i18n">DualShock 3</li>
|
||||
<li class="ds-i18n">XBox Controllers</li>
|
||||
</ul>
|
||||
|
||||
<p class="ds-i18n">Each of these tasks presents both immense interest and significant time investment. To provide context, supporting a new controller typically demands 6-12 months of full-time research, alongside a stroke of good fortune.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header">
|
||||
<button class="ds-i18n accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#flush-collapse12" aria-expanded="false" aria-controls="flush-collapse6">I love this service, it helped me! How can I contribute?</button>
|
||||
</h2>
|
||||
<div id="flush-collapse12" class="accordion-collapse collapse" data-bs-parent="#accordionFlushExample">
|
||||
<div class="accordion-body">
|
||||
<p class="ds-i18n">I'm glad to hear that you found this helpful! If you're interested in contributing, here are a few ways you can help me:</p>
|
||||
<ul>
|
||||
<li><span class="ds-i18n">Consider making a</span> <a href="https://paypal.me/alaincarlucci" target="_blank" class="ds-i18n">donation</a> <span class="ds-i18n">to support my late-night caffeine-fueled reverse-engineering efforts.</span></li>
|
||||
<li class="ds-i18n">Ship me a controller you would love to add (send me an email for organization).</li>
|
||||
<li><a href="https://github.com/dualshock-tools/dualshock-tools.github.io/blob/main/TRANSLATIONS.md" class="ds-i18n" target="_blank">Translate this website in your language</a><span class="ds-i18n">, to help more people like you!</span></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-primary ds-i18n" data-bs-dismiss="modal">Close</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
241
templates/finetune-modal.html
Normal file
@@ -0,0 +1,241 @@
|
||||
<div class="modal fade" id="finetuneModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="finetuneModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog modal-dialog-centered modal-lg modal-fullscreen-lg-down">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h1 class="modal-title fs-5 ds-i18n" id="finetuneModalLabel">Finetune stick calibration</h1>
|
||||
<button type="button" class="btn-close" aria-label="Close" onclick="finetune_cancel()"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="modal-header border-top-0 pt-0">
|
||||
<div class="btn-group w-100" role="group" aria-label="Finetune mode selection">
|
||||
<input type="radio" class="btn-check" name="finetuneMode" id="finetuneModeCenter" autocomplete="off" checked>
|
||||
<label class="btn btn-outline-primary ds-i18n" for="finetuneModeCenter">Center (L1)</label>
|
||||
|
||||
<input type="radio" class="btn-check" name="finetuneMode" id="finetuneModeCircularity" autocomplete="off">
|
||||
<label class="btn btn-outline-primary ds-i18n" for="finetuneModeCircularity">Circularity (R1)</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="alert alert-info finetune-center-mode" role="alert">
|
||||
<i class="fas fa-info-circle"></i>
|
||||
<span class="ds-i18n">Move the stick to select it for tuning, then without touching the stick use the D-pad buttons to adjust the center point. Flick it and adjust it again if it is off center or flickers.</span>
|
||||
</div>
|
||||
<div class="alert alert-warning finetune-center-mode" role="alert" id="finetuneCenterWarning">
|
||||
<i class="fas fa-exclamation-triangle"></i>
|
||||
<span class="ds-i18n">Please release the stick to center position before adjusting with D-pad buttons.</span>
|
||||
</div>
|
||||
<div class="alert alert-success finetune-center-mode" role="alert" id="finetuneCenterSuccess">
|
||||
<i class="fas fa-check-circle"></i>
|
||||
<span class="ds-i18n">Press the D-pad or face buttons in the direction you want the stick position to move.</span>
|
||||
</div>
|
||||
<div class="alert alert-info finetune-circularity-mode" role="alert">
|
||||
<p>
|
||||
<i class="fas fa-info-circle"></i>
|
||||
<span class="ds-i18n">While holding the stick to be adjusted straight up/down/left/right, make adjustments until you see lightblue sectors in all four directions after circling the stick both left and right. Then use the</span>
|
||||
<svg width="24" height="24" style="vertical-align: -6px;"><use xlink:href="#arrows-alt"/></svg>
|
||||
<span class="ds-i18n">to increase the non-circularity.</span>
|
||||
</p>
|
||||
<p class="mb-0">
|
||||
<i class="fas fa-hand-point-up"></i>
|
||||
<span class="ds-i18n"><strong>Average circularity error:</strong> smaller is not always better! Aim for 7-9 %.</span>
|
||||
<a class="btn-link text-decoration-none ds-i18n" href="#" id="learn-more-link">Learn more...</a>
|
||||
</p>
|
||||
<p class="mb-0" id="learn-more-text" style="display: none;">
|
||||
<span class="ds-i18n">Sony controllers come from the factory calibrated to have an average circularity error of nearly 10 %, and this is now what games expect. Too perfect circularity can make movements and aim feel stiff and unresponsive in some games.</span>
|
||||
</p>
|
||||
</div>
|
||||
<div class="alert alert-warning finetune-circularity-mode" role="alert" id="finetuneCircularityWarning">
|
||||
<i class="fas fa-exclamation-triangle"></i>
|
||||
<span class="ds-i18n">Push the stick straight up/down/left/right as far as possible.</span>
|
||||
</div>
|
||||
<div class="alert alert-success finetune-circularity-mode" role="alert" id="finetuneCircularitySuccess">
|
||||
<i class="fas fa-check-circle"></i>
|
||||
<span class="ds-i18n">Press the D-pad or face buttons in the direction you want the stick position to move.</span>
|
||||
</div>
|
||||
<div style="width: 100%; display: flex; justify-content: center;">
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col col-lg-6 col-12">
|
||||
|
||||
<div class="card text-bg-light" id="left-stick-card" style="height: 350px;">
|
||||
<div class="card-header d-flex justify-content-between align-items-center">
|
||||
<span class="ds-i18n">Left stick</span>
|
||||
</div>
|
||||
<div class="card-body position-relative">
|
||||
<button type="button" class="btn btn-secondary position-absolute top-0 end-0 finetune-circularity-mode" id="leftErrorSlackBtn" style="z-index: 10; margin: 0.5rem;">
|
||||
<svg class="bi" width="32" height="32" style="margin: -15px -8px -12px -8px;"><use xlink:href="#arrows-alt"/></svg>
|
||||
</button>
|
||||
<button type="button" class="btn btn-warning position-absolute top-0 end-0 finetune-circularity-mode d-none" id="leftErrorSlackUndoBtn" style="z-index: 10; margin: 0.5rem;">
|
||||
<i class="fas fa-undo"></i>
|
||||
</button>
|
||||
<div class="container-fluid">
|
||||
<div class="finetune-grid">
|
||||
<div class="finetune-top finetune-center-mode">
|
||||
<input id="finetuneLY" type="number" class="form-control" min="0" max="65535" value="0">
|
||||
</div>
|
||||
<div class="finetune-top finetune-circularity-mode">
|
||||
<input id="finetuneLT" type="number" class="form-control" min="0" max="65535" value="0">
|
||||
</div>
|
||||
<div class="finetune-left finetune-circularity-mode">
|
||||
<input id="finetuneLL" type="number" class="form-control" min="0" max="65535" value="0">
|
||||
</div>
|
||||
<div class="finetune-left finetune-center-mode">
|
||||
<input id="finetuneLX" type="number" class="form-control" min="0" max="65535" value="0">
|
||||
</div>
|
||||
<div class="finetune-center">
|
||||
<canvas id="finetuneStickCanvasL" width="150px" height="150px"></canvas>
|
||||
<canvas id="finetuneStickCanvasL_large" width="210px" height="210px"></canvas>
|
||||
</div>
|
||||
<div class="finetune-right finetune-circularity-mode">
|
||||
<input id="finetuneLR" type="number" class="form-control" min="0" max="65535" value="0">
|
||||
</div>
|
||||
<div class="finetune-bottom finetune-circularity-mode">
|
||||
<input id="finetuneLB" type="number" class="form-control" min="0" max="65535" value="0">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- LX/LY values display -->
|
||||
<div class="px-2 left-stick-values">
|
||||
<div class="spacer finetune-center-mode hide-raw-numbers" style="height: 35px;"> </div>
|
||||
|
||||
<div class="hstack">
|
||||
<div class="vstack" style="text-align: center;">
|
||||
<span>LX:</span>
|
||||
<strong><pre id="finetuneStickCanvasLx-lbl" style="min-width: 80px;"></pre></strong>
|
||||
</div>
|
||||
|
||||
<div class="vstack" style="text-align: center;">
|
||||
<span>LY:</span>
|
||||
<strong><pre id="finetuneStickCanvasLy-lbl" style="min-width: 80px;"></pre></strong>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Circularity slider for left stick -->
|
||||
<div class="px-2 mt-2 finetune-circularity-mode left-stick-slider" style="display: none;">
|
||||
<label for="leftCircularitySlider" class="form-label ds-i18n" style="margin-bottom: 2px;">Increase non-circularity</label>
|
||||
<input type="range" class="form-range" min="0" max="100" value="0" id="leftCircularitySlider">
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- col -->
|
||||
|
||||
<div class="col col-lg-6 col-12">
|
||||
<div class="card text-bg-light" id="right-stick-card" style="height: 350px;">
|
||||
<div class="card-header d-flex justify-content-between align-items-center">
|
||||
<span class="ds-i18n">Right stick</span>
|
||||
</div>
|
||||
<div class="card-body position-relative">
|
||||
<button type="button" class="btn btn-secondary position-absolute top-0 end-0 finetune-circularity-mode" id="rightErrorSlackBtn" style="z-index: 10; margin: 0.5rem;">
|
||||
<svg class="bi" width="32" height="32" style="margin: -15px -8px -12px -8px;"><use xlink:href="#arrows-alt"/></svg>
|
||||
</button>
|
||||
<button type="button" class="btn btn-warning position-absolute top-0 end-0 finetune-circularity-mode d-none" id="rightErrorSlackUndoBtn" style="z-index: 10; margin: 0.5rem;">
|
||||
<i class="fas fa-undo"></i>
|
||||
</button>
|
||||
<div class="container-fluid">
|
||||
<div class="finetune-grid">
|
||||
<div class="finetune-top finetune-center-mode">
|
||||
<input id="finetuneRY" type="number" class="form-control" min="0" max="65535" value="0">
|
||||
</div>
|
||||
<div class="finetune-top finetune-circularity-mode">
|
||||
<input id="finetuneRT" type="number" class="form-control" min="0" max="65535" value="0">
|
||||
</div>
|
||||
<div class="finetune-left finetune-circularity-mode">
|
||||
<input id="finetuneRL" type="number" class="form-control" min="0" max="65535" value="0">
|
||||
</div>
|
||||
<div class="finetune-left finetune-center-mode">
|
||||
<input id="finetuneRX" type="number" class="form-control" min="0" max="65535" value="0">
|
||||
</div>
|
||||
<div class="finetune-center">
|
||||
<canvas id="finetuneStickCanvasR" width="150px" height="150px"></canvas>
|
||||
<canvas id="finetuneStickCanvasR_large" width="210px" height="210px"></canvas>
|
||||
</div>
|
||||
<div class="finetune-right finetune-circularity-mode">
|
||||
<input id="finetuneRR" type="number" class="form-control" min="0" max="65535" value="0">
|
||||
</div>
|
||||
<div class="finetune-bottom finetune-circularity-mode">
|
||||
<input id="finetuneRB" type="number" class="form-control" min="0" max="65535" value="0">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- RX/RY values display -->
|
||||
<div class="px-2 right-stick-values">
|
||||
<div class="spacer finetune-center-mode hide-raw-numbers" style="height: 35px;"> </div>
|
||||
|
||||
<div class="hstack">
|
||||
<div class="vstack" style="text-align: center;">
|
||||
<span>RX:</span>
|
||||
<strong><pre id="finetuneStickCanvasRx-lbl" style="min-width: 80px;"></pre></strong>
|
||||
</div>
|
||||
|
||||
<div class="vstack" style="text-align: center;">
|
||||
<span>RY:</span>
|
||||
<strong><pre id="finetuneStickCanvasRy-lbl" style="min-width: 80px;"></pre></strong>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Circularity slider for right stick -->
|
||||
<div class="px-2 mt-2 finetune-circularity-mode right-stick-slider" style="display: none;">
|
||||
<label for="rightCircularitySlider" class="form-label ds-i18n" style="margin-bottom: 2px;">Increase non-circularity</label>
|
||||
<input type="range" class="form-range" min="0" max="100" value="0" id="rightCircularitySlider">
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- col -->
|
||||
</div> <!-- row -->
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="modal-footer">
|
||||
<div class="form-check me-auto">
|
||||
<input class="form-check-input" type="checkbox" id="showRawNumbersCheckbox">
|
||||
<label class="form-check-label ds-i18n" for="showRawNumbersCheckbox">Show raw numbers</label>
|
||||
</div>
|
||||
<div class="dropdown me-2">
|
||||
<a class="btn btn-link text-decoration-none" href="#" role="button" id="stepSizeDropdown" data-bs-toggle="dropdown" aria-expanded="false">
|
||||
<span class="ds-i18n">Step size</span>: <span id="stepSizeValue">1</span>
|
||||
</a>
|
||||
<ul class="dropdown-menu" aria-labelledby="stepSizeDropdown">
|
||||
<li><a class="dropdown-item" href="#" data-step="15">15</a></li>
|
||||
<li><a class="dropdown-item" href="#" data-step="14">14</a></li>
|
||||
<li><a class="dropdown-item" href="#" data-step="13">13</a></li>
|
||||
<li><a class="dropdown-item" href="#" data-step="12">12</a></li>
|
||||
<li><a class="dropdown-item" href="#" data-step="11">11</a></li>
|
||||
<li><a class="dropdown-item" href="#" data-step="10">10</a></li>
|
||||
<li><a class="dropdown-item" href="#" data-step="9">9</a></li>
|
||||
<li><a class="dropdown-item" href="#" data-step="8">8</a></li>
|
||||
<li><a class="dropdown-item" href="#" data-step="7">7</a></li>
|
||||
<li><a class="dropdown-item" href="#" data-step="6">6</a></li>
|
||||
<li><a class="dropdown-item" href="#" data-step="5">5</a></li>
|
||||
<li><a class="dropdown-item" href="#" data-step="4">4</a></li>
|
||||
<li><a class="dropdown-item" href="#" data-step="3">3</a></li>
|
||||
<li><a class="dropdown-item" href="#" data-step="2">2</a></li>
|
||||
<li><a class="dropdown-item" href="#" data-step="1">1</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="dropdown me-2">
|
||||
<button class="btn btn-outline-secondary dropdown-toggle" type="button" id="quickCalibrateDropdown" data-bs-toggle="dropdown" aria-expanded="false">
|
||||
<i class="fas fa-bolt"></i> <span class="ds-i18n">Quick calibrate</span>
|
||||
</button>
|
||||
<ul class="dropdown-menu" aria-labelledby="quickCalibrateDropdown">
|
||||
<li><a class="dropdown-item" href="#" onclick="finetune_quick_calibrate_center()">
|
||||
<i class="fas fa-crosshairs"></i> <span class="ds-i18n">Center</span>
|
||||
</a></li>
|
||||
<li><a class="dropdown-item" href="#" onclick="finetune_quick_calibrate_range()">
|
||||
<i class="fas fa-expand-arrows-alt"></i> <span class="ds-i18n">Circularity</span>
|
||||
</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<button type="button" class="btn btn-secondary ds-i18n" onclick="finetune_cancel()">Cancel</button>
|
||||
<button type="button" class="btn btn-primary ds-i18n" onclick="finetune_save()">Done</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
11
templates/popup-modal.html
Normal file
@@ -0,0 +1,11 @@
|
||||
<!-- Popup -->
|
||||
<div class="modal fade" id="popupModal" tabindex="-1" aria-labelledby="popupTitle" aria-hidden="true">
|
||||
<div class="modal-dialog modal-dialog-centered">
|
||||
<div class="modal-content">
|
||||
<div class="modal-body" id="popupBody"></div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-primary" data-bs-dismiss="modal">OK</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
42
templates/quick-test-modal.html
Normal file
@@ -0,0 +1,42 @@
|
||||
<!-- Quick Test Modal -->
|
||||
<div class="modal fade" id="quickTestModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="quickTestModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog modal-lg modal-dialog-centered">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h1 class="modal-title fs-5 ds-i18n" id="quickTestModalLabel">Quick Test</h1>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p class="ds-i18n mb-3">Run through these tests to verify your controller's functionality.</p>
|
||||
<div id="battery-warning-alert" style="display: none; background-color: white; color: #ff4000cb; padding: 12px 16px; border-radius: 4px; margin-bottom: 16px; border: 2px solid;">
|
||||
<i class="fas fa-exclamation-triangle me-2"></i>
|
||||
<span class="ds-i18n">Battery level is low. Tests may fail due to the controller being in power saving mode.</span>
|
||||
</div>
|
||||
<div class="alert alert-info mb-4" id="quick-test-instructions">
|
||||
<i class="fas fa-gamepad me-2"></i>
|
||||
<span class="ds-i18n" id="quick-test-instructions-text"></span>
|
||||
</div>
|
||||
|
||||
<div class="accordion" id="quickTestAccordion">
|
||||
<!-- Accordion items will be dynamically generated -->
|
||||
</div>
|
||||
|
||||
<div class="mt-4">
|
||||
<h6><span class="ds-i18n">Test Summary</span>:</h6>
|
||||
<div id="test-summary" class="text-muted ds-i18n">No tests completed yet.</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<div class="dropdown" id="skipped-tests-dropdown" style="display: none;">
|
||||
<button class="btn btn-outline-primary dropdown-toggle" type="button" id="skippedTestsDropdown" data-bs-toggle="dropdown" aria-expanded="false">
|
||||
<i class="fas fa-list me-1"></i><span class="ds-i18n">Add test</span>
|
||||
</button>
|
||||
<ul class="dropdown-menu" aria-labelledby="skippedTestsDropdown" id="skipped-tests-list">
|
||||
<!-- Skipped tests will be populated here -->
|
||||
</ul>
|
||||
</div>
|
||||
<button type="button" class="btn btn-primary ds-i18n" data-bs-dismiss="modal">Close</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
51
templates/range-modal.html
Normal file
@@ -0,0 +1,51 @@
|
||||
<!-- Modal -->
|
||||
<div class="modal fade" id="rangeModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="staticBackdropLabel" aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h1 class="modal-title fs-5 ds-i18n" id="staticBackdropLabel">Range calibration</h1>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p><b class="ds-i18n pulsing-text">The controller is now sampling data!</b></p>
|
||||
<p class="ds-i18n">Rotate the sticks slowly at least 2 times in one direction and 2 times in the other direction to cover the whole range.</p>
|
||||
|
||||
<div style="display: flex; justify-content: center; gap: 0px; align-items: center; font-family: monospace; font-size: 0.85em;">
|
||||
<div style="text-align: left; min-width: 65px;">
|
||||
<div><small>LX: <span id="range-lx-lbl">0.00</span></small></div>
|
||||
<div><small>LY: <span id="range-ly-lbl">0.00</span></small></div>
|
||||
</div>
|
||||
<div style="text-align: center;">
|
||||
<canvas id="range-left-stick-canvas" width="150" height="150"></canvas>
|
||||
</div>
|
||||
<div style="text-align: center;">
|
||||
<canvas id="range-right-stick-canvas" width="150" height="150"></canvas>
|
||||
</div>
|
||||
<div style="text-align: left; min-width: 65px;">
|
||||
<div id="range-rx"><small>RX: <span id="range-rx-lbl">0.00</span></small></div>
|
||||
<div id="range-ry"><small>RY: <span id="range-ry-lbl">0.00</span></small></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="progress mt-2" id="range-progress-container" role="progressbar" aria-label="Range calibration progress" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100">
|
||||
<div id="range-progress-bar" class="progress-bar" style="width:0%"></div>
|
||||
</div>
|
||||
<div class="mt-2" id="range-progress-text-container">
|
||||
<small class="text-muted">
|
||||
<span class="ds-i18n">Progress</span>: <span id="range-progress-text">0%</span>
|
||||
</small>
|
||||
</div>
|
||||
|
||||
<div class="alert alert-info mt-3" id="range-calibration-alert" role="alert">
|
||||
<span id="keep-rotating-alert" ><i class="fas fa-info-circle"></i>
|
||||
<small class="ds-i18n">Keep rotating the sticks even if you see no progress!</small>
|
||||
</span>
|
||||
<br><br>
|
||||
<small class="ds-i18n">The <b>Done</b> button will unlock after at most 15 seconds. If you press <b>Done</b> without rotating the sticks, the calibration will be incomplete and you will need to repeat it.</small>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" id="range-done-btn" class="btn btn-outline-primary ds-i18n" onclick="calibrate_range_on_close()">Done</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
23
templates/welcome-modal.html
Normal file
@@ -0,0 +1,23 @@
|
||||
<!-- Welcome Modal -->
|
||||
<div class="modal fade" id="welcomeModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="welcomeModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog modal-dialog-centered modal-lg">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h1 class="modal-title fs-5 ds-i18n" id="welcomeModalLabel">Welcome to the Calibration GUI</h1>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p class="ds-i18n">Just few things to know before you can start:</p>
|
||||
<ul>
|
||||
<li class="ds-i18n">This website is not affiliated with Sony, PlayStation & co.</li>
|
||||
<li class="ds-i18n">This service is provided without warranty. Use at your own risk.</li>
|
||||
<li class="ds-i18n">This website uses analytics to improve the service.</li>
|
||||
<li class="ds-i18n">Keep the internal battery of the controller connected and ensure it is well charged. If the battery dies during operations, the controller will be damaged and rendered unusable.</li>
|
||||
<li class="ds-i18n">Before doing the permanent calibration, try the temporary one to ensure that everything is working well.</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-primary ds-i18n" onclick="welcome_accepted();">Understood</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
BIN
web-app-manifest-192x192.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
web-app-manifest-512x512.png
Normal file
|
After Width: | Height: | Size: 91 KiB |