mirror of
https://github.com/dualshock-tools/dualshock-tools.github.io.git
synced 2026-07-18 05:34:06 +03:00
Compare commits
65 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
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 |
@@ -1,25 +1,27 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" class="d-none">
|
||||
<symbol id="paypal" viewBox="0 0 384 512">
|
||||
<path fill="#ffffff" 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"/>
|
||||
<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="#ffffff" 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"/>
|
||||
<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 -860 960 960">
|
||||
<path 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 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 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"/>
|
||||
<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 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"/>
|
||||
<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 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"/>
|
||||
<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="#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"/>
|
||||
<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"/>
|
||||
|
||||
|
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 8.1 KiB |
11
css/main.css
11
css/main.css
@@ -15,6 +15,7 @@ dl.row dd {
|
||||
#left-stick-card,
|
||||
#right-stick-card {
|
||||
cursor: pointer;
|
||||
outline: none !important;
|
||||
}
|
||||
|
||||
.stick-card-active {
|
||||
@@ -113,6 +114,16 @@ dl.row dd {
|
||||
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;
|
||||
|
||||
114
index.html
114
index.html
@@ -74,8 +74,23 @@
|
||||
|
||||
<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>
|
||||
<!-- 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;">
|
||||
@@ -153,26 +168,63 @@
|
||||
<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;">
|
||||
1. <span class="ds-i18n">Calibrate stick center</span>
|
||||
</button>
|
||||
<button type="button" class="btn btn-primary ds-btn" onclick="auto_calibrate_stick_centers()" id="quick-center-calib" style="display: none;">
|
||||
1. <span class="ds-i18n">Calibrate stick center</span>
|
||||
</button>
|
||||
<button type="button" class="btn btn-primary ds-btn" onclick="calibrate_range()">
|
||||
2. <span class="ds-i18n">Calibrate stick range</span>
|
||||
<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="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>
|
||||
<button type="button" class="btn btn-primary ds-btn" onclick="ds5_finetune()" id="ds5finetune">
|
||||
3. <span class="ds-i18n">Finetune stick calibration</span>
|
||||
<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()" id="resetBtn">Save changes permanently</button>
|
||||
<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>
|
||||
<canvas id="stickCanvas" width="300" height="150"></canvas>
|
||||
<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">
|
||||
@@ -314,16 +366,46 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- About drift and this utility -->
|
||||
<div id="aboutdrift" style="position: fixed; bottom: 70px; left: 0; right: 0; z-index: 1030; 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 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>
|
||||
|
||||
<!-- 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.21</a> (2025-12-06) - <a href="#" class="ds-i18n" onclick="show_donate_modal();">Support this project</a> <span id="authorMsg"></span></p>
|
||||
<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.24</a> (2026-01-13) - <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="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="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="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>
|
||||
<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>
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
'use strict';
|
||||
|
||||
import { sleep, la } from './utils.js';
|
||||
import { l } from './translations.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
|
||||
@@ -35,7 +38,7 @@ class ControllerManager {
|
||||
this.batteryStatus = {
|
||||
bat_txt: "",
|
||||
changed: false,
|
||||
bat_capacity: 0,
|
||||
charge_level: 0,
|
||||
cable_connected: false,
|
||||
is_charging: false,
|
||||
is_error: false
|
||||
@@ -43,12 +46,73 @@ class ControllerManager {
|
||||
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));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -158,13 +222,9 @@ class ControllerManager {
|
||||
if (hasChanges === this.has_changes_to_write)
|
||||
return;
|
||||
|
||||
const saveBtn = $("#savechanges");
|
||||
saveBtn
|
||||
.prop('disabled', !hasChanges)
|
||||
.toggleClass('btn-success', hasChanges)
|
||||
.toggleClass('btn-outline-secondary', !hasChanges);
|
||||
|
||||
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
|
||||
@@ -173,7 +233,7 @@ class ControllerManager {
|
||||
* Flash/save changes to the controller
|
||||
*/
|
||||
async flash(progressCallback = null) {
|
||||
this.setHasChangesToWrite(false);
|
||||
await this._clearControllerState();
|
||||
return this.currentController.flash(progressCallback);
|
||||
}
|
||||
|
||||
@@ -181,7 +241,8 @@ class ControllerManager {
|
||||
* Reset the controller
|
||||
*/
|
||||
async reset() {
|
||||
await this.currentController.reset();
|
||||
await this._clearControllerState();
|
||||
return this.currentController.reset();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -211,7 +272,7 @@ class ControllerManager {
|
||||
async calibrateSticksBegin() {
|
||||
const res = await this.currentController.calibrateSticksBegin();
|
||||
if (!res.ok) {
|
||||
throw new Error(`${l("Stick calibration failed")}. ${res.error?.message}`, { cause: res.error });
|
||||
throw new Error(l(NOT_GENUINE_SONY_CONTROLLER_MSG), { cause: res.error });
|
||||
}
|
||||
}
|
||||
|
||||
@@ -245,7 +306,7 @@ class ControllerManager {
|
||||
async calibrateRangeBegin() {
|
||||
const res = await this.currentController.calibrateRangeBegin();
|
||||
if (!res.ok) {
|
||||
throw new Error(`${l("Stick calibration failed")}. ${res.error?.message}`, { cause: res.error });
|
||||
throw new Error(l(NOT_GENUINE_SONY_CONTROLLER_MSG), { cause: res.error });
|
||||
}
|
||||
}
|
||||
|
||||
@@ -253,6 +314,9 @@ class ControllerManager {
|
||||
* 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);
|
||||
@@ -575,7 +639,7 @@ class ControllerManager {
|
||||
/**
|
||||
* Convert battery percentage to display text with icons
|
||||
*/
|
||||
_batteryPercentToText({bat_capacity, is_charging, is_error}) {
|
||||
_batteryPercentToText({charge_level, is_charging, is_error}) {
|
||||
if (is_error) {
|
||||
return '<font color="red">' + l("error") + '</font>';
|
||||
}
|
||||
@@ -587,10 +651,10 @@ class ControllerManager {
|
||||
{ threshold: 80, icon: 'fa-battery-three-quarters' },
|
||||
];
|
||||
|
||||
const icon_txt = batteryIcons.find(item => bat_capacity < item.threshold)?.icon || 'fa-battery-full';
|
||||
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 [`${bat_capacity}%`, icon_full, bolt_txt].join(' ');
|
||||
return [`${charge_level}%`, icon_full, bolt_txt].join(' ');
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -100,6 +100,14 @@ class BaseController {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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');
|
||||
|
||||
@@ -86,9 +86,10 @@ class ControllerFactory {
|
||||
showInfo: false,
|
||||
showFinetune: false,
|
||||
showInfoTab: false,
|
||||
showFourStepCalib: true,
|
||||
showQuickTests: true,
|
||||
showQuickCalib: false
|
||||
showFourStepCalib: true,
|
||||
showQuickCalib: false,
|
||||
showCalibrationHistory: false
|
||||
};
|
||||
|
||||
case 0x0ce6: // DS5
|
||||
@@ -97,9 +98,10 @@ class ControllerFactory {
|
||||
showInfo: true,
|
||||
showFinetune: true,
|
||||
showInfoTab: true,
|
||||
showFourStepCalib: false,
|
||||
showQuickTests: true,
|
||||
showQuickCalib: true
|
||||
showFourStepCalib: false,
|
||||
showQuickCalib: true,
|
||||
showCalibrationHistory: true
|
||||
};
|
||||
|
||||
case 0x0e45: // VR2 Left Controller
|
||||
@@ -108,8 +110,8 @@ class ControllerFactory {
|
||||
showInfo: true,
|
||||
showFinetune: false,
|
||||
showInfoTab: true,
|
||||
showFourStepCalib: true,
|
||||
showQuickTests: false,
|
||||
showFourStepCalib: true,
|
||||
showQuickCalib: false
|
||||
};
|
||||
|
||||
@@ -118,9 +120,10 @@ class ControllerFactory {
|
||||
showInfo: false,
|
||||
showFinetune: false,
|
||||
showInfoTab: false,
|
||||
showFourStepCalib: false,
|
||||
showQuickTests: false,
|
||||
showQuickCalib: false
|
||||
showFourStepCalib: false,
|
||||
showQuickCalib: false,
|
||||
showCalibrationHistory: false
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,8 +11,6 @@ import {
|
||||
} from '../utils.js';
|
||||
import { l } from '../translations.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.";
|
||||
|
||||
// DS4 Button mapping configuration
|
||||
const DS4_BUTTON_MAP = [
|
||||
{ name: 'up', byte: 4, mask: 0x0 }, // Dpad handled separately
|
||||
@@ -133,6 +131,10 @@ class DS4Controller extends BaseController {
|
||||
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 {
|
||||
@@ -169,18 +171,21 @@ class DS4Controller extends BaseController {
|
||||
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: `${dec2hex(hw_ver_major)}:${dec2hex(hw_ver_minor)}`, cat: "hw" },
|
||||
{ key: l("SW Version"), value: `${dec2hex32(sw_ver_major)}:${dec2hex(sw_ver_minor)}`, 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: this.hwToBoardModel(hw_ver_minor), cat: "hw", addInfoIcon: 'board', copyable: true });
|
||||
|
||||
const bd_addr = await this.getBdAddr();
|
||||
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" });
|
||||
}
|
||||
|
||||
@@ -188,6 +193,8 @@ class DS4Controller extends BaseController {
|
||||
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
|
||||
@@ -256,7 +263,7 @@ class DS4Controller extends BaseController {
|
||||
la("ds4_calibrate_range_begin_failed", {"d1": d1, "d2": d2});
|
||||
return {
|
||||
ok: false,
|
||||
error: new Error(l(NOT_GENUINE_SONY_CONTROLLER_MSG)),
|
||||
error: new Error(`Stick range calibration begin failed: ${d1}, ${d2}`),
|
||||
code: 1, d1, d2
|
||||
};
|
||||
}
|
||||
@@ -304,7 +311,7 @@ class DS4Controller extends BaseController {
|
||||
la("ds4_calibrate_sticks_begin_failed", {"d1": d1, "d2": d2});
|
||||
return {
|
||||
ok: false,
|
||||
error: new Error(l(NOT_GENUINE_SONY_CONTROLLER_MSG)),
|
||||
error: new Error(`Stick center calibration begin failed: ${d1}, ${d2}`),
|
||||
code: 1, d1, d2,
|
||||
};
|
||||
}
|
||||
@@ -420,29 +427,29 @@ class DS4Controller extends BaseController {
|
||||
const bat_status = (bat >> 4) & 1;
|
||||
const cable_connected = bat_status === 1;
|
||||
|
||||
let bat_capacity = 0;
|
||||
let charge_level = 0;
|
||||
let is_charging = false;
|
||||
let is_error = false;
|
||||
|
||||
if (cable_connected) {
|
||||
if (bat_data < 10) {
|
||||
bat_capacity = Math.min(bat_data * 10 + 5, 100);
|
||||
charge_level = Math.min(bat_data * 10 + 5, 100);
|
||||
is_charging = true;
|
||||
} else if (bat_data === 10) {
|
||||
bat_capacity = 100;
|
||||
charge_level = 100;
|
||||
is_charging = true;
|
||||
} else if (bat_data === 11) {
|
||||
bat_capacity = 100; // Fully charged
|
||||
charge_level = 100; // Fully charged
|
||||
} else {
|
||||
bat_capacity = 0;
|
||||
charge_level = 0;
|
||||
is_error = true;
|
||||
}
|
||||
} else {
|
||||
// On battery power
|
||||
bat_capacity = bat_data < 10 ? bat_data * 10 + 5 : 100;
|
||||
charge_level = bat_data < 10 ? bat_data * 10 + 5 : 100;
|
||||
}
|
||||
|
||||
return { bat_capacity, cable_connected, is_charging, is_error };
|
||||
return { charge_level, cable_connected, is_charging, is_error };
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -193,7 +193,9 @@ class DS5OutputStruct {
|
||||
}
|
||||
}
|
||||
|
||||
function ds5_color(x) {
|
||||
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',
|
||||
@@ -214,9 +216,10 @@ function ds5_color(x) {
|
||||
'Z3': 'Astro Bot',
|
||||
'Z4': 'Fortnite',
|
||||
'Z6': 'The Last of Us',
|
||||
'ZB': 'Icon Blue Limited Edition',
|
||||
};
|
||||
|
||||
const colorCode = x.slice(4, 6);
|
||||
const colorCode = serialNumber.slice(4, 6);
|
||||
const colorName = colorMap[colorCode] || 'Unknown';
|
||||
return colorName;
|
||||
}
|
||||
@@ -266,6 +269,10 @@ class DS5Controller extends BaseController {
|
||||
return DS5_INPUT_CONFIG;
|
||||
}
|
||||
|
||||
async getSerialNumber() {
|
||||
return await this.getSystemInfo(1, 19, 17);
|
||||
}
|
||||
|
||||
async getInfo() {
|
||||
return this._getInfo(false);
|
||||
}
|
||||
@@ -538,6 +545,10 @@ class DS5Controller extends BaseController {
|
||||
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");
|
||||
}
|
||||
|
||||
@@ -844,7 +855,7 @@ class DS5Controller extends BaseController {
|
||||
const bat_charge = bat & 0x0f;
|
||||
const bat_status = bat >> 4;
|
||||
|
||||
let bat_capacity = 0;
|
||||
let charge_level = 0;
|
||||
let cable_connected = false;
|
||||
let is_charging = false;
|
||||
let is_error = false;
|
||||
@@ -852,32 +863,33 @@ class DS5Controller extends BaseController {
|
||||
switch (bat_status) {
|
||||
case 0:
|
||||
// On battery power
|
||||
bat_capacity = Math.min(bat_charge * 10 + 5, 100);
|
||||
charge_level = Math.min(bat_charge * 10 + 5, 100);
|
||||
break;
|
||||
case 1:
|
||||
// Charging
|
||||
bat_capacity = Math.min(bat_charge * 10 + 5, 100);
|
||||
charge_level = Math.min(bat_charge * 10 + 5, 100);
|
||||
is_charging = true;
|
||||
cable_connected = true;
|
||||
break;
|
||||
case 2:
|
||||
// Fully charged
|
||||
bat_capacity = 100;
|
||||
charge_level = 100;
|
||||
cable_connected = true;
|
||||
break;
|
||||
case 15:
|
||||
// Battery is flat
|
||||
bat_capacity = 0;
|
||||
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 { bat_capacity, cable_connected, is_charging, is_error };
|
||||
return { charge_level, cable_connected, is_charging, is_error };
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -50,14 +50,25 @@ class DS5EdgeController extends DS5Controller {
|
||||
}
|
||||
|
||||
async getBarcode() {
|
||||
await this.sendFeatureReport(0x80, [21,34]);
|
||||
await sleep(100);
|
||||
|
||||
const data = await this.receiveFeatureReport(0x81);
|
||||
const td = new TextDecoder();
|
||||
const r_bc = td.decode(data.buffer.slice(21, 21+17));
|
||||
const l_bc = td.decode(data.buffer.slice(40, 40+17));
|
||||
return [r_bc, l_bc];
|
||||
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) {
|
||||
|
||||
@@ -238,6 +238,10 @@ class VR2Controller extends BaseController {
|
||||
return DS5_INPUT_CONFIG;
|
||||
}
|
||||
|
||||
async getSerialNumber() {
|
||||
return await this.getSystemInfo(1, 19, 17);
|
||||
}
|
||||
|
||||
async getInfo() {
|
||||
return this._getInfo(false);
|
||||
}
|
||||
|
||||
338
js/core.js
338
js/core.js
@@ -1,19 +1,22 @@
|
||||
'use strict';
|
||||
|
||||
import { sleep, float_to_str, dec2hex, dec2hex32, lerp_color, initAnalyticsApi, la, createCookie, readCookie } from './utils.js';
|
||||
import { sleep, float_to_str, dec2hex, dec2hex32, lerp_color, initAnalyticsApi, la } from './utils.js';
|
||||
import { Storage } from './storage.js';
|
||||
import { initControllerManager } from './controller-manager.js';
|
||||
import ControllerFactory from './controllers/controller-factory.js';
|
||||
import { lang_init, l } from './translations.js';
|
||||
import { loadAllTemplates } from './template-loader.js';
|
||||
import { draw_stick_position, CIRCULARITY_DATA_SIZE } from './stick-renderer.js';
|
||||
import { draw_stick_dial, CIRCULARITY_DATA_SIZE, calculateCircularityError } from './stick-renderer.js';
|
||||
import { ds5_finetune, isFinetuneVisible, finetune_handle_controller_input } from './modals/finetune-modal.js';
|
||||
import { calibrate_stick_centers, auto_calibrate_stick_centers } from './modals/calib-center-modal.js';
|
||||
import { calibrate_range } from './modals/calib-range-modal.js';
|
||||
import { calibrate_range, rangeCalibHandleControllerInput } from './modals/calib-range-modal.js';
|
||||
import {
|
||||
show_quick_test_modal,
|
||||
isQuickTestVisible,
|
||||
quicktest_handle_controller_input
|
||||
} from './modals/quick-test-modal.js';
|
||||
import { show_calibration_history_modal } from './modals/calibration-history-modal.js';
|
||||
import { FinetuneHistory } from './finetune-history.js';
|
||||
|
||||
// Application State - manages app-wide state and UI
|
||||
const app = {
|
||||
@@ -22,6 +25,12 @@ const app = {
|
||||
last_disable_btn: 0,
|
||||
|
||||
shownRangeCalibrationWarning: false,
|
||||
failedCalibrationDetectionsCount: 0,
|
||||
failedCalibrationModalShownCount: 0,
|
||||
|
||||
// Calibration method preference
|
||||
centerCalibrationMethod: 'four-step', // 'quick' or 'four-step'
|
||||
rangeCalibrationMethod: 'normal', // 'normal' or 'expert'
|
||||
|
||||
// Language and UI state
|
||||
lang_orig_text: {},
|
||||
@@ -107,12 +116,12 @@ function gboot() {
|
||||
initAnalyticsApi(app); // init just with gu for now
|
||||
lang_init(app, handleLanguageChange, show_welcome_modal);
|
||||
show_welcome_modal();
|
||||
initCalibrationMethod();
|
||||
|
||||
$("input[name='displayMode']").on('change', on_stick_mode_change);
|
||||
|
||||
// Setup edge modal "Don't show again" checkbox
|
||||
$('#edgeModalDontShowAgain').on('change', function() {
|
||||
localStorage.setItem('edgeModalDontShowAgain', this.checked.toString());
|
||||
Storage.edgeModalDontShowAgain.set(this.checked);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -132,6 +141,8 @@ function gboot() {
|
||||
}
|
||||
|
||||
$("#offlinebar").show();
|
||||
$("#aboutdrift").show();
|
||||
updateLastConnectedInfo();
|
||||
navigator.hid.addEventListener("disconnect", handleDisconnectedDevice);
|
||||
}
|
||||
|
||||
@@ -209,13 +220,15 @@ async function continue_connection({data, device}) {
|
||||
}
|
||||
|
||||
// Helper to apply basic UI visibility based on device type
|
||||
function applyDeviceUI({ showInfo, showFinetune, showInfoTab, showFourStepCalib, showQuickTests, showQuickCalib }) {
|
||||
function applyDeviceUI({ showInfo, showFinetune, showInfoTab, showQuickTests, showFourStepCalib, showQuickCalib, showCalibrationHistory }) {
|
||||
$("#infoshowall").toggle(!!showInfo);
|
||||
$("#ds5finetune").toggle(!!showFinetune);
|
||||
$("#info-tab").toggle(!!showInfoTab);
|
||||
$("#four-step-center-calib").toggle(!!showFourStepCalib);
|
||||
$("#quick-tests-div").css("visibility", showQuickTests ? "visible" : "hidden");
|
||||
$("#four-step-center-calib").toggle(!!showFourStepCalib);
|
||||
$("#quick-center-calib").toggle(!!showQuickCalib);
|
||||
$("#quick-center-calib-group").toggle(!!showQuickCalib);
|
||||
$("#restore-calibration-btn").toggle(!!showCalibrationHistory);
|
||||
}
|
||||
|
||||
let controllerInstance = null;
|
||||
@@ -260,14 +273,13 @@ async function continue_connection({data, device}) {
|
||||
$("#onlinebar").show();
|
||||
$("#mainmenu").show();
|
||||
$("#resetBtn").show();
|
||||
$("#aboutdrift").hide();
|
||||
|
||||
$("#d-nvstatus").text = l("Unknown");
|
||||
$("#d-bdaddr").text = l("Unknown");
|
||||
|
||||
$('#controller-tab').tab('show');
|
||||
|
||||
const model = controllerInstance.getModel();
|
||||
|
||||
const numOfSticks = controllerInstance.getNumberOfSticks();
|
||||
if(numOfSticks == 2) {
|
||||
$("#stick-item-rx").show();
|
||||
@@ -279,6 +291,29 @@ async function continue_connection({data, device}) {
|
||||
throw new Error(`Invalid number of sticks: ${numOfSticks}`);
|
||||
}
|
||||
|
||||
const model = controllerInstance.getModel();
|
||||
|
||||
// Save controller info to local storage
|
||||
const lastConnectedInfo = {
|
||||
deviceName: deviceName,
|
||||
timestamp: new Date().toISOString(),
|
||||
serialNumber: await controllerInstance.getSerialNumber(),
|
||||
};
|
||||
|
||||
// Extract info from infoItems
|
||||
if (info.infoItems && Array.isArray(info.infoItems)) {
|
||||
for (const item of info.infoItems) {
|
||||
if (item.key === l("Board Model")) {
|
||||
lastConnectedInfo.boardModel = item.value;
|
||||
} else if (item.key === l("Color")) {
|
||||
lastConnectedInfo.color = item.value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Storage.lastConnectedController.set(lastConnectedInfo);
|
||||
updateLastConnectedInfo();
|
||||
|
||||
// Initialize SVG controller based on model
|
||||
await init_svg_controller(model);
|
||||
|
||||
@@ -320,6 +355,24 @@ async function continue_connection({data, device}) {
|
||||
if(model == "VR2") {
|
||||
show_popup(l("<p>Support for PS VR2 controllers is <b>minimal and highly experimental</b>.</p><p>I currently don't own these controllers, so I cannot verify the calibration process myself.</p><p>If you'd like to help improve full support, you can contribute with a donation or even send the controllers for testing.</p><p>Feel free to contact me on Discord (the_al) or by email at ds4@the.al .</p><br><p>Thank you for your support!</p>"), true)
|
||||
}
|
||||
|
||||
// Check for unsaved calibration changes
|
||||
if (controller.has_changes_to_write) {
|
||||
show_popup(`<p>${
|
||||
l("It appears the latest joystick calibration has not been saved.")
|
||||
}</p><p>${
|
||||
l("You should save your changes, or reboot the controller to revert back to the previous state.")
|
||||
}</p>`, true);
|
||||
}
|
||||
|
||||
// Save finetune parameters for DS5 and Edge controllers
|
||||
if (model === "DS5" || model === "DS5_Edge") {
|
||||
if (!controller.has_changes_to_write) {
|
||||
const finetuneData = await controllerInstance.getInMemoryModuleData();
|
||||
const serialNumber = await controllerInstance.getSerialNumber();
|
||||
FinetuneHistory.save(finetuneData, serialNumber);
|
||||
}
|
||||
}
|
||||
} catch(err) {
|
||||
await disconnect();
|
||||
throw err;
|
||||
@@ -337,6 +390,8 @@ async function disconnect() {
|
||||
}
|
||||
app.gj = 0;
|
||||
app.disable_btn = 0;
|
||||
app.shownRangeCalibrationWarning = false;
|
||||
app.failedCalibrationDetectionsCount = 0;
|
||||
update_disable_btn();
|
||||
|
||||
await controller.disconnect();
|
||||
@@ -345,6 +400,45 @@ async function disconnect() {
|
||||
$("#offlinebar").show();
|
||||
$("#onlinebar").hide();
|
||||
$("#mainmenu").hide();
|
||||
$("#aboutdrift").show();
|
||||
updateLastConnectedInfo();
|
||||
}
|
||||
|
||||
function updateLastConnectedInfo() {
|
||||
const $lastConnected = $("#lastConnected");
|
||||
const $infoDiv = $("#lastConnectedInfo");
|
||||
const info = Storage.lastConnectedController.get();
|
||||
|
||||
if (!info) {
|
||||
console.log("No last connected info found.", $lastConnected);
|
||||
$lastConnected.hide();
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const parts = [];
|
||||
if (info.color) parts.push(l(info.color));
|
||||
if (info.boardModel) parts.push(info.boardModel);
|
||||
if (info.deviceName) parts.push(info.deviceName);
|
||||
|
||||
let text = parts.join(" ");
|
||||
if (info.serialNumber) {
|
||||
text += ", " + l("serial number") + " " + info.serialNumber;
|
||||
}
|
||||
|
||||
$infoDiv.text(text);
|
||||
|
||||
if (info.serialNumber) {
|
||||
const hasChanges = Storage.hasChangesState.get(info.serialNumber);
|
||||
const $warning = $("#lastConnectedWarning");
|
||||
$warning.toggle(hasChanges);
|
||||
}
|
||||
|
||||
$lastConnected.show();
|
||||
} catch (error) {
|
||||
console.error("Error parsing last connected info:", error);
|
||||
$lastConnected.hide();
|
||||
}
|
||||
}
|
||||
|
||||
// Wrapper function for HTML onclick handlers
|
||||
@@ -400,7 +494,7 @@ function set_edge_progress(score) {
|
||||
}
|
||||
|
||||
function show_welcome_modal() {
|
||||
const already_accepted = readCookie("welcome_accepted");
|
||||
const already_accepted = Storage.getString("welcome_accepted");
|
||||
if(already_accepted == "1")
|
||||
return;
|
||||
|
||||
@@ -409,7 +503,7 @@ function show_welcome_modal() {
|
||||
|
||||
function welcome_accepted() {
|
||||
la("welcome_accepted");
|
||||
createCookie("welcome_accepted", "1");
|
||||
Storage.setString("welcome_accepted", "1");
|
||||
$("#welcomeModal").modal("hide");
|
||||
}
|
||||
|
||||
@@ -446,6 +540,9 @@ async function init_svg_controller(model) {
|
||||
|
||||
svgContainer.innerHTML = svgContent;
|
||||
|
||||
// Reset trackpad bounding box so it's recalculated for the new SVG
|
||||
trackpadBbox = undefined;
|
||||
|
||||
const lightBlue = '#7ecbff';
|
||||
const midBlue = '#3399cc';
|
||||
const dualshock = document.getElementById('Controller');
|
||||
@@ -487,9 +584,9 @@ function collectCircularityData(stickStates, leftData, rightData) {
|
||||
}
|
||||
}
|
||||
|
||||
function clear_circularity() {
|
||||
ll_data.fill(0);
|
||||
rr_data.fill(0);
|
||||
function clear_circularity(leftOrRight = 'both') {
|
||||
if(['left', 'both'].includes(leftOrRight)) ll_data.fill(0);
|
||||
if(['right', 'both'].includes(leftOrRight)) rr_data.fill(0);
|
||||
}
|
||||
|
||||
function reset_circularity_mode() {
|
||||
@@ -517,14 +614,14 @@ function refresh_stick_pos() {
|
||||
const enable_circ_test = circ_checked();
|
||||
|
||||
// Draw left stick
|
||||
draw_stick_position(ctx, hb, yb, sz, plx, ply, {
|
||||
draw_stick_dial(ctx, hb, yb, sz, plx, ply, {
|
||||
circularity_data: enable_circ_test ? ll_data : null,
|
||||
enable_zoom_center,
|
||||
});
|
||||
|
||||
if(!hasSingleStick) {
|
||||
// Draw right stick
|
||||
draw_stick_position(ctx, w-hb, yb, sz, prx, pry, {
|
||||
draw_stick_dial(ctx, w-hb, yb, sz, prx, pry, {
|
||||
circularity_data: enable_circ_test ? rr_data : null,
|
||||
enable_zoom_center,
|
||||
});
|
||||
@@ -584,6 +681,17 @@ function refresh_stick_pos() {
|
||||
} catch (e) {
|
||||
// Fail silently if SVG not present
|
||||
}
|
||||
|
||||
const circularityCheckIcon = document.getElementById('circularityCheckIcon');
|
||||
if (!enable_circ_test) {
|
||||
circularityCheckIcon.style.display = 'none';
|
||||
return;
|
||||
}
|
||||
|
||||
const ll_error = calculateCircularityError(ll_data);
|
||||
const rr_error = calculateCircularityError(rr_data);
|
||||
const isTooSmall = (ll_error && ll_error < 5 || rr_error && rr_error < 5);
|
||||
circularityCheckIcon.style.display = isTooSmall ? 'block' : 'none';
|
||||
}
|
||||
|
||||
const circ_checked = () => $("#checkCircularityMode").is(':checked');
|
||||
@@ -623,7 +731,7 @@ const throttled_refresh_sticks = (() => {
|
||||
|
||||
const update_stick_graphics = (changes) => throttled_refresh_sticks(changes);
|
||||
|
||||
function update_battery_status({/* bat_capacity, cable_connected, is_charging, is_error, */ bat_txt, changed}) {
|
||||
function update_battery_status({/* charge_level, cable_connected, is_charging, is_error, */ bat_txt, changed}) {
|
||||
if(changed) {
|
||||
$("#d-bat").html(bat_txt);
|
||||
}
|
||||
@@ -749,18 +857,48 @@ function detectFailedRangeCalibration(changes) {
|
||||
const hasOpenModals = document.querySelectorAll('.modal.show').length > 0;
|
||||
|
||||
if (failedCalibration && !app.shownRangeCalibrationWarning && !hasOpenModals) {
|
||||
app.failedCalibrationDetectionsCount++;
|
||||
if (app.failedCalibrationDetectionsCount < 5) {
|
||||
return; // require 5 consecutive detections
|
||||
}
|
||||
|
||||
app.failedCalibrationModalShownCount++;
|
||||
Storage.failedCalibrationCount.set(app.failedCalibrationModalShownCount);
|
||||
|
||||
app.shownRangeCalibrationWarning = true;
|
||||
show_popup(l("Range calibration appears to have failed. Please try again and make sure you rotate the sticks."));
|
||||
if (app.failedCalibrationCount <= 6) { // keep it from getting annoying
|
||||
show_popup(l("Range calibration appears to have failed. Please try again and make sure you rotate the sticks."));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function isRangeCalibrationVisible() {
|
||||
const modal = document.getElementById('rangeModal');
|
||||
if (!modal) return false;
|
||||
return modal.classList.contains('show');
|
||||
}
|
||||
|
||||
// Callback function to handle UI updates after controller input processing
|
||||
function handleControllerInput({ changes, inputConfig, touchPoints, batteryStatus }) {
|
||||
const { buttonMap } = inputConfig;
|
||||
|
||||
// Open Quick Test modal if options button is pressed while L1 is held down
|
||||
if (changes.options && controller.button_states.l1) {
|
||||
update_ds_button_svg({ l1: false }, buttonMap); // Clear L1
|
||||
show_quick_test_modal(controller);
|
||||
return;
|
||||
}
|
||||
|
||||
// Update range calibration modal stick visualization if visible
|
||||
if (isRangeCalibrationVisible() && changes.sticks) {
|
||||
collectCircularityData(changes.sticks, ll_data, rr_data);
|
||||
rangeCalibHandleControllerInput(changes);
|
||||
return;
|
||||
}
|
||||
|
||||
// Handle Quick Test Modal input (can be open from any tab)
|
||||
if (isQuickTestVisible()) {
|
||||
quicktest_handle_controller_input(changes);
|
||||
quicktest_handle_controller_input(changes, batteryStatus);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -959,8 +1097,7 @@ function show_donate_modal() {
|
||||
|
||||
function show_edge_modal() {
|
||||
// Check if user has chosen not to show the modal again
|
||||
const dontShowAgain = localStorage.getItem('edgeModalDontShowAgain');
|
||||
if (dontShowAgain === 'true') {
|
||||
if (Storage.edgeModalDontShowAgain.get()) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -973,6 +1110,15 @@ function show_info_tab() {
|
||||
$('#info-tab').tab('show');
|
||||
}
|
||||
|
||||
function show_circularity_warning() {
|
||||
const message = `<p>
|
||||
${l("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.")
|
||||
}</p><p>
|
||||
${l("Aim for a circularity error of around 7-9 % for the best playing experience.")}`;
|
||||
|
||||
show_popup(message, true);
|
||||
}
|
||||
|
||||
// Alert Management Functions
|
||||
let alertCounter = 0;
|
||||
|
||||
@@ -1059,50 +1205,154 @@ window.disconnect = disconnectSync;
|
||||
window.show_faq_modal = show_faq_modal;
|
||||
window.show_info_tab = show_info_tab;
|
||||
window.copyValueToClipboard = copyValueToClipboard;
|
||||
window.calibrate_range = () => calibrate_range(
|
||||
controller,
|
||||
{ ll_data, rr_data },
|
||||
(success, message) => {
|
||||
if (success) {
|
||||
resetStickDiagrams();
|
||||
successAlert(message);
|
||||
switchToRangeMode();
|
||||
app.shownRangeCalibrationWarning = false
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
window.calibrate_stick_centers = () => calibrate_stick_centers(
|
||||
controller,
|
||||
(success, message) => {
|
||||
if (success) {
|
||||
resetStickDiagrams();
|
||||
successAlert(message);
|
||||
switchTo10xZoomMode();
|
||||
}
|
||||
}
|
||||
);
|
||||
window.auto_calibrate_stick_centers = () => auto_calibrate_stick_centers(
|
||||
controller,
|
||||
(success, message) => {
|
||||
if (success) {
|
||||
resetStickDiagrams();
|
||||
successAlert(message);
|
||||
infoAlert(message, 2_000);
|
||||
switchTo10xZoomMode();
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
window.ds5_finetune = () => ds5_finetune(
|
||||
controller,
|
||||
{ ll_data, rr_data, clear_circularity },
|
||||
(success) => success && switchToRangeMode()
|
||||
);
|
||||
|
||||
window.openCalibrationHistoryModal = async () => {
|
||||
let currentFinetuneData = null;
|
||||
let controllerSerialNumber = null;
|
||||
try {
|
||||
if (controller && typeof controller.getInMemoryModuleData === 'function') {
|
||||
currentFinetuneData = await controller.getInMemoryModuleData('finetune');
|
||||
}
|
||||
if (controller && typeof controller.getDeviceInfo === 'function') {
|
||||
const info = await controller.getDeviceInfo();
|
||||
const serialNumberItem = info?.infoItems?.find(item => item.key === l("Serial Number"));
|
||||
controllerSerialNumber = serialNumberItem?.value;
|
||||
}
|
||||
} catch (error) {
|
||||
console.warn('Could not retrieve current finetune data or serial number:', error);
|
||||
}
|
||||
la("calibration_history_modal_open");
|
||||
await show_calibration_history_modal(controller, currentFinetuneData, controllerSerialNumber, (success, message) => {
|
||||
if(!message) return;
|
||||
success ? infoAlert(message) : errorAlert(message);
|
||||
});
|
||||
};
|
||||
|
||||
window.flash_all_changes = flash_all_changes;
|
||||
window.reboot_controller = reboot_controller;
|
||||
window.refresh_nvstatus = refresh_nvstatus;
|
||||
window.nvsunlock = nvsunlock;
|
||||
|
||||
// Calibration method selection
|
||||
window.setCenterCalibrationMethod = (method, event) => {
|
||||
if (event) {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
}
|
||||
app.centerCalibrationMethod = method;
|
||||
Storage.centerCalibrationMethod.set(method);
|
||||
updateCalibrationMethodUI();
|
||||
// Close the dropdown
|
||||
const dropdownButton = event?.target?.closest('.dropdown-menu')?.previousElementSibling;
|
||||
if (dropdownButton) {
|
||||
const dropdown = bootstrap.Dropdown.getInstance(dropdownButton);
|
||||
if (dropdown) dropdown.hide();
|
||||
}
|
||||
};
|
||||
|
||||
window.executeSelectedCenterCalibration = () => {
|
||||
if (app.centerCalibrationMethod === 'quick') {
|
||||
auto_calibrate_stick_centers(
|
||||
controller,
|
||||
(success, message) => {
|
||||
if (success) {
|
||||
resetStickDiagrams();
|
||||
infoAlert(message, 2_000);
|
||||
switchTo10xZoomMode();
|
||||
}
|
||||
}
|
||||
);
|
||||
} else {
|
||||
calibrate_stick_centers(
|
||||
controller,
|
||||
(success, message) => {
|
||||
if (success) {
|
||||
resetStickDiagrams();
|
||||
infoAlert(message, 2_000);
|
||||
switchTo10xZoomMode();
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
window.setRangeCalibrationMethod = (method, event) => {
|
||||
if (event) {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
}
|
||||
app.rangeCalibrationMethod = method;
|
||||
Storage.rangeCalibrationMethod.set(method);
|
||||
updateCalibrationMethodUI();
|
||||
// Close the dropdown
|
||||
const dropdownButton = event?.target?.closest('.dropdown-menu')?.previousElementSibling;
|
||||
if (dropdownButton) {
|
||||
const dropdown = bootstrap.Dropdown.getInstance(dropdownButton);
|
||||
if (dropdown) dropdown.hide();
|
||||
}
|
||||
};
|
||||
|
||||
window.executeSelectedRangeCalibration = () => {
|
||||
calibrate_range(
|
||||
controller,
|
||||
{ ll_data, rr_data },
|
||||
(success, message) => {
|
||||
resetStickDiagrams();
|
||||
if(message) {
|
||||
infoAlert(message, 2_000);
|
||||
}
|
||||
switchToRangeMode();
|
||||
},
|
||||
app.rangeCalibrationMethod === 'expert'
|
||||
);
|
||||
};
|
||||
|
||||
function updateCalibrationMethodUI() {
|
||||
$('#check-quick').toggle(app.centerCalibrationMethod === 'quick');
|
||||
$('#check-four-step').toggle(app.centerCalibrationMethod === 'four-step');
|
||||
$('#check-range-normal').toggle(app.rangeCalibrationMethod === 'normal');
|
||||
$('#check-range-expert').toggle(app.rangeCalibrationMethod === 'expert');
|
||||
}
|
||||
|
||||
function initCalibrationMethod() {
|
||||
const savedCenterMethod = Storage.centerCalibrationMethod.get();
|
||||
if (savedCenterMethod && (savedCenterMethod === 'quick' || savedCenterMethod === 'four-step')) {
|
||||
app.centerCalibrationMethod = savedCenterMethod;
|
||||
}
|
||||
|
||||
const savedRangeMethod = Storage.rangeCalibrationMethod.get();
|
||||
if (savedRangeMethod && (savedRangeMethod === 'normal' || savedRangeMethod === 'expert')) {
|
||||
app.rangeCalibrationMethod = savedRangeMethod;
|
||||
}
|
||||
|
||||
const savedFailedCalibrationCount = Storage.failedCalibrationCount.get();
|
||||
if (savedFailedCalibrationCount > 0) {
|
||||
app.failedCalibrationModalShownCount = savedFailedCalibrationCount;
|
||||
}
|
||||
|
||||
updateCalibrationMethodUI();
|
||||
}
|
||||
window.nvslock = nvslock;
|
||||
window.welcome_accepted = welcome_accepted;
|
||||
window.show_donate_modal = show_donate_modal;
|
||||
window.show_circularity_warning = show_circularity_warning;
|
||||
window.show_quick_test_modal = () => {
|
||||
show_quick_test_modal(controller).catch(error => {
|
||||
throw new Error("Failed to show quick test modal", { cause: error });
|
||||
|
||||
183
js/finetune-history.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]);
|
||||
}
|
||||
}
|
||||
@@ -109,7 +109,7 @@ export class CalibCenterModal {
|
||||
this._updateUI(6, "Stick center calibration", "Done", true);
|
||||
yield 6;
|
||||
|
||||
this._close(true);
|
||||
this._close(true, l("Stick calibration completed"));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
'use strict';
|
||||
|
||||
import { sleep } from '../utils.js';
|
||||
import { sleep, float_to_str } from '../utils.js';
|
||||
import { l } from '../translations.js';
|
||||
import { CIRCULARITY_DATA_SIZE } from '../stick-renderer.js';
|
||||
import { CIRCULARITY_DATA_SIZE, draw_stick_dial } from '../stick-renderer.js';
|
||||
|
||||
const SECONDS_UNTIL_UNLOCK = 15;
|
||||
|
||||
@@ -11,7 +11,7 @@ const SECONDS_UNTIL_UNLOCK = 15;
|
||||
* Handles stick range calibration
|
||||
*/
|
||||
export class CalibRangeModal {
|
||||
constructor(controllerInstance, { ll_data, rr_data }, doneCallback = null) {
|
||||
constructor(controllerInstance, { ll_data, rr_data }, doneCallback = null, expertMode = false) {
|
||||
// Dependencies
|
||||
this.controller = controllerInstance;
|
||||
this.ll_data = ll_data;
|
||||
@@ -34,10 +34,40 @@ export class CalibRangeModal {
|
||||
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() {
|
||||
@@ -55,29 +85,37 @@ export class CalibRangeModal {
|
||||
this.ll_data.fill(0);
|
||||
this.rr_data.fill(0);
|
||||
|
||||
this.updateProgress(); // reset progress bar
|
||||
this.startProgressMonitoring();
|
||||
// Start rendering loop
|
||||
this.startStickRendering();
|
||||
|
||||
this.resetAlertEnhancement();
|
||||
this.startCountdown();
|
||||
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();
|
||||
|
||||
bootstrap.Modal.getOrCreateInstance('#rangeModal').hide();
|
||||
|
||||
const result = await this.controller.calibrateRangeOnClose();
|
||||
|
||||
// Call the done callback if provided (range calibration is always successful when onClose is called)
|
||||
if (this.doneCallback && typeof this.doneCallback === 'function') {
|
||||
this.doneCallback(true, result?.message);
|
||||
// Call the done callback if provided
|
||||
if (result && this.doneCallback && typeof this.doneCallback === 'function') {
|
||||
this.doneCallback(result.success, result.message);
|
||||
}
|
||||
this.allDonePromiseResolve();
|
||||
if (this.allDonePromiseResolve) {
|
||||
this.allDonePromiseResolve();
|
||||
}
|
||||
destroyCurrentInstance();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -112,14 +150,7 @@ export class CalibRangeModal {
|
||||
// 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();
|
||||
|
||||
$('#range-calibration-alert').hide();
|
||||
$('#range-done-btn')
|
||||
.prop('disabled', false)
|
||||
.toggleClass('btn-primary', true)
|
||||
.toggleClass('btn-outline-primary', false);
|
||||
|
||||
this.updateCountdownButton();
|
||||
this._enableDoneButton();
|
||||
} else {
|
||||
this.checkAndEnhanceAlert();
|
||||
}
|
||||
@@ -148,11 +179,22 @@ export class CalibRangeModal {
|
||||
$('#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.95;
|
||||
const JOYSTICK_EXTREME_THRESHOLD = 0.80;
|
||||
const CIRCLE_FILL_THRESHOLD = 0.95;
|
||||
|
||||
// Count the number of times the joysticks have been rotated full circle
|
||||
@@ -244,18 +286,119 @@ export class CalibRangeModal {
|
||||
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() {
|
||||
currentCalibRangeInstance = null;
|
||||
if (currentCalibRangeInstance) {
|
||||
console.log("Destroying current range calibration instance");
|
||||
currentCalibRangeInstance.removeEventListeners();
|
||||
currentCalibRangeInstance = null;
|
||||
}
|
||||
}
|
||||
|
||||
export async function calibrate_range(controller, dependencies, doneCallback = null) {
|
||||
export async function calibrate_range(controller, dependencies, doneCallback = null, expertMode = false) {
|
||||
destroyCurrentInstance(); // Clean up any existing instance
|
||||
currentCalibRangeInstance = new CalibRangeModal(controller, dependencies, doneCallback);
|
||||
currentCalibRangeInstance = new CalibRangeModal(controller, dependencies, doneCallback, expertMode);
|
||||
|
||||
await currentCalibRangeInstance.open();
|
||||
return new Promise((resolve) => {
|
||||
@@ -265,8 +408,13 @@ export async function calibrate_range(controller, dependencies, doneCallback = n
|
||||
|
||||
async function calibrate_range_on_close() {
|
||||
if (currentCalibRangeInstance) {
|
||||
await currentCalibRangeInstance.onClose();
|
||||
destroyCurrentInstance();
|
||||
bootstrap.Modal.getOrCreateInstance('#rangeModal').hide();
|
||||
}
|
||||
}
|
||||
|
||||
export function rangeCalibHandleControllerInput(changes) {
|
||||
if (currentCalibRangeInstance) {
|
||||
currentCalibRangeInstance.handleControllerInput(changes);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
200
js/modals/calibration-history-modal.js
Normal file
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;
|
||||
@@ -1,7 +1,8 @@
|
||||
'use strict';
|
||||
|
||||
import { draw_stick_position } from '../stick-renderer.js';
|
||||
import { draw_stick_dial } from '../stick-renderer.js';
|
||||
import { dec2hex32, float_to_str, la } from '../utils.js';
|
||||
import { Storage } from '../storage.js';
|
||||
import { auto_calibrate_stick_centers } from './calib-center-modal.js';
|
||||
import { calibrate_range } from './calib-range-modal.js';
|
||||
|
||||
@@ -95,6 +96,19 @@ export class Finetune {
|
||||
left: { x: 0, y: 0 },
|
||||
right: { x: 0, y: 0 }
|
||||
};
|
||||
|
||||
// Binary search state for R2/L2 circularity calibration
|
||||
this.binarySearch = {
|
||||
active: false,
|
||||
minValue: 0,
|
||||
maxValue: 65535,
|
||||
lastAdjustedValue: 0,
|
||||
inputSuffix: null,
|
||||
lastAxisValue: 0,
|
||||
targetAxisMin: 0.99,
|
||||
searchIterations: 0,
|
||||
maxIterations: 20
|
||||
};
|
||||
}
|
||||
|
||||
get mode() {
|
||||
@@ -208,6 +222,7 @@ export class Finetune {
|
||||
|
||||
this._initSliderListeners(lOrR);
|
||||
this._initButtonListeners(lOrR);
|
||||
this._initKeyboardListeners(lOrR);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -250,6 +265,24 @@ export class Finetune {
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize keyboard event listeners for a specific stick card
|
||||
*/
|
||||
_initKeyboardListeners(lOrR) {
|
||||
const stickCard = $(`#${lOrR}-stick-card`);
|
||||
|
||||
stickCard.on('keydown', (e) => {
|
||||
this._onKeyboardEvent(e, true);
|
||||
});
|
||||
|
||||
stickCard.on('keyup', (e) => {
|
||||
this._onKeyboardEvent(e, false);
|
||||
});
|
||||
|
||||
// Make stick cards focusable
|
||||
stickCard.attr('tabindex', '0');
|
||||
}
|
||||
|
||||
/**
|
||||
* Clean up event listeners for the finetune modal
|
||||
*/
|
||||
@@ -274,7 +307,7 @@ export class Finetune {
|
||||
_removeStickEventListeners() {
|
||||
LEFT_AND_RIGHT.forEach(lOrR => {
|
||||
// Remove stick card listeners
|
||||
$(`#${lOrR}-stick-card`).off('click');
|
||||
$(`#${lOrR}-stick-card`).off('click keydown keyup');
|
||||
|
||||
// Remove slider listeners
|
||||
const sliderId = `#${lOrR}CircularitySlider`;
|
||||
@@ -343,6 +376,42 @@ export class Finetune {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle keyboard events for arrow key adjustments
|
||||
* Arrow keys work like D-pad buttons for fine-tuning
|
||||
*/
|
||||
_onKeyboardEvent(event, isKeyDown) {
|
||||
const key = event.key;
|
||||
|
||||
// Map arrow keys to button names (D-pad)
|
||||
const keyToButtonMap = {
|
||||
'ArrowLeft': 'left',
|
||||
'ArrowRight': 'right',
|
||||
'ArrowUp': 'up',
|
||||
'ArrowDown': 'down'
|
||||
};
|
||||
|
||||
const button = keyToButtonMap[key];
|
||||
if (!button) return;
|
||||
|
||||
event.preventDefault();
|
||||
|
||||
// Arrow keys work as D-pad buttons for adjustments
|
||||
if (!this.active_stick) return;
|
||||
|
||||
const changes = {};
|
||||
|
||||
if (isKeyDown) {
|
||||
// Simulate button press by creating a change object
|
||||
changes[button] = true;
|
||||
this.handleDpadAdjustment(changes);
|
||||
} else {
|
||||
// Simulate button release
|
||||
changes[button] = false;
|
||||
this.handleDpadAdjustment(changes);
|
||||
}
|
||||
}
|
||||
|
||||
/* Set the quick calibrating state to prevent dialog destruction
|
||||
* @param {boolean} isCalibrating - Whether quick calibration is in progress
|
||||
*/
|
||||
@@ -428,13 +497,12 @@ export class Finetune {
|
||||
// Private methods
|
||||
|
||||
/**
|
||||
* Restore the show raw numbers checkbox state from localStorage
|
||||
* Restore the show raw numbers checkbox state from storage
|
||||
*/
|
||||
_restoreShowRawNumbersCheckbox() {
|
||||
const savedState = localStorage.getItem('showRawNumbersCheckbox');
|
||||
if (savedState) {
|
||||
const isChecked = savedState === 'true';
|
||||
$("#showRawNumbersCheckbox").prop('checked', isChecked);
|
||||
const isChecked = Storage.showRawNumbersCheckbox.get();
|
||||
if (isChecked) {
|
||||
$("#showRawNumbersCheckbox").prop('checked', true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -643,13 +711,13 @@ export class Finetune {
|
||||
if (this._mode === 'circularity') {
|
||||
// Draw stick position with circle
|
||||
const circularityData = lOrR === 'left' ? this.ll_data : this.rr_data;
|
||||
draw_stick_position(ctx, hb, yb, sz, plx, ply, {
|
||||
draw_stick_dial(ctx, hb, yb, sz, plx, ply, {
|
||||
circularity_data: circularityData,
|
||||
highlight
|
||||
});
|
||||
} else {
|
||||
// Draw stick position with crosshair
|
||||
draw_stick_position(ctx, hb, yb, sz, plx, ply, {
|
||||
draw_stick_dial(ctx, hb, yb, sz, plx, ply, {
|
||||
enable_zoom_center: true,
|
||||
highlight
|
||||
});
|
||||
@@ -672,7 +740,7 @@ export class Finetune {
|
||||
const showRawNumbers = $("#showRawNumbersCheckbox").is(":checked");
|
||||
const modal = $("#finetuneModal");
|
||||
modal.toggleClass("hide-raw-numbers", !showRawNumbers);
|
||||
localStorage.setItem('showRawNumbersCheckbox', showRawNumbers);
|
||||
Storage.showRawNumbersCheckbox.set(showRawNumbers);
|
||||
|
||||
this.refresh_finetune_sticks();
|
||||
}
|
||||
@@ -832,6 +900,25 @@ export class Finetune {
|
||||
|
||||
const quadrant = this._getStickQuadrant(currentStick.x, currentStick.y);
|
||||
|
||||
if (changes.r2_analog !== undefined || changes.l2_analog !== undefined) {
|
||||
const r2Value = this.controller.button_states.r2_analog || 0;
|
||||
const l2Value = this.controller.button_states.l2_analog || 0;
|
||||
|
||||
if (r2Value === 0 && l2Value === 0) {
|
||||
this.binarySearch.inputSuffix = null;
|
||||
this.stopContinuousDpadAdjustment();
|
||||
return;
|
||||
}
|
||||
|
||||
if (!this.binarySearch.active && !this.binarySearch.inputSuffix && !this._isDpadAdjustmentActive()) {
|
||||
const inputSuffix = this._getFinetuneInputSuffixForQuadrant(this.active_stick, quadrant);
|
||||
if (inputSuffix) {
|
||||
this._startBinarySearch(inputSuffix);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// Use circularity step size for circularity mode
|
||||
const adjustmentStep = this._circularityStepSize;
|
||||
|
||||
@@ -890,14 +977,8 @@ export class Finetune {
|
||||
const element = $(`#finetune${inputSuffix}`);
|
||||
if (!element.length) return;
|
||||
|
||||
// Initialize previous axis values for the active stick
|
||||
if (this.active_stick && this.controller.button_states.sticks) {
|
||||
const currentStick = this.controller.button_states.sticks[this.active_stick];
|
||||
this._previousAxisValues[this.active_stick].x = currentStick.x;
|
||||
this._previousAxisValues[this.active_stick].y = currentStick.y;
|
||||
}
|
||||
this._savePreviousStickPosition();
|
||||
|
||||
// Perform initial adjustment immediately...
|
||||
this._performDpadAdjustment(element, adjustment);
|
||||
this.clearCircularity();
|
||||
|
||||
@@ -916,12 +997,117 @@ export class Finetune {
|
||||
|
||||
clearTimeout(this.continuous_adjustment.initial_delay);
|
||||
this.continuous_adjustment.initial_delay = null;
|
||||
|
||||
this.binarySearch.active = false;
|
||||
}
|
||||
|
||||
_isDpadAdjustmentActive() {
|
||||
return !!this.continuous_adjustment.initial_delay;
|
||||
}
|
||||
|
||||
_savePreviousStickPosition() {
|
||||
if (this.active_stick && this.controller.button_states.sticks) {
|
||||
const currentStick = this.controller.button_states.sticks[this.active_stick];
|
||||
this._previousAxisValues[this.active_stick].x = currentStick.x;
|
||||
this._previousAxisValues[this.active_stick].y = currentStick.y;
|
||||
}
|
||||
}
|
||||
|
||||
_startBinarySearch(inputSuffix) {
|
||||
const element = $(`#finetune${inputSuffix}`);
|
||||
if (!element.length) return;
|
||||
|
||||
const currentValue = parseInt(element.val()) || 0;
|
||||
|
||||
this.binarySearch = {
|
||||
active: true,
|
||||
minValue: Math.max(0, currentValue - 500),
|
||||
maxValue: Math.min(65535, currentValue + 500),
|
||||
lastAdjustedValue: currentValue,
|
||||
inputSuffix: inputSuffix,
|
||||
lastAxisValue: 0,
|
||||
targetAxisMin: 0.99,
|
||||
searchIterations: 0,
|
||||
maxIterations: 20
|
||||
};
|
||||
|
||||
this._savePreviousStickPosition();
|
||||
this._performBinarySearchStep();
|
||||
}
|
||||
|
||||
async _performBinarySearchStep() {
|
||||
if (!this.binarySearch.active || !this.binarySearch.inputSuffix) return;
|
||||
|
||||
const element = $(`#finetune${this.binarySearch.inputSuffix}`);
|
||||
if (!element.length) return;
|
||||
|
||||
const midValue = this._calculateBinarySearchMidpoint();
|
||||
element.val(midValue);
|
||||
this.binarySearch.lastAdjustedValue = midValue;
|
||||
|
||||
await this._onFinetuneChange();
|
||||
this.clearCircularity();
|
||||
await new Promise(resolve => setTimeout(resolve, 50));
|
||||
|
||||
const absAxis = this._calculateBinarySearchAxisValue();
|
||||
this.binarySearch.lastAxisValue = absAxis;
|
||||
this.binarySearch.searchIterations++;
|
||||
|
||||
if (this._isBinarySearchConverged(absAxis)) {
|
||||
this.binarySearch.active = false;
|
||||
this.stopContinuousDpadAdjustment();
|
||||
return;
|
||||
}
|
||||
|
||||
this._updateBinarySearchBounds(midValue, absAxis);
|
||||
|
||||
this.continuous_adjustment.repeat_delay = setTimeout(
|
||||
() => this._performBinarySearchStep(),
|
||||
50
|
||||
);
|
||||
}
|
||||
|
||||
_calculateBinarySearchMidpoint() {
|
||||
const { minValue, maxValue, searchIterations, lastAdjustedValue } = this.binarySearch;
|
||||
return searchIterations === 0
|
||||
? lastAdjustedValue
|
||||
: Math.floor((minValue + maxValue) / 2);
|
||||
}
|
||||
|
||||
_calculateBinarySearchAxisValue() {
|
||||
if (!this.binarySearch.inputSuffix || !this.active_stick) {
|
||||
return 0;
|
||||
}
|
||||
const currentStick = this.controller.button_states.sticks[this.active_stick];
|
||||
if (!currentStick) {
|
||||
return 0;
|
||||
}
|
||||
const lastChar = this.binarySearch.inputSuffix.slice(-1);
|
||||
const axis = (['X', 'L', 'R'].includes(lastChar)) ? currentStick.x : currentStick.y;
|
||||
return Math.abs(axis);
|
||||
}
|
||||
|
||||
_isBinarySearchConverged(absAxis) {
|
||||
const convergenceThreshold = 0.005;
|
||||
const diff = Math.abs(absAxis - this.binarySearch.targetAxisMin);
|
||||
const hasConverged = diff < convergenceThreshold;
|
||||
const maxIterationsReached = this.binarySearch.searchIterations >= this.binarySearch.maxIterations;
|
||||
return hasConverged || maxIterationsReached;
|
||||
}
|
||||
|
||||
_updateBinarySearchBounds(midValue, absAxis) {
|
||||
if (!this.binarySearch.inputSuffix) return;
|
||||
|
||||
const isInvertedDirection = this.binarySearch.inputSuffix.endsWith('R') || this.binarySearch.inputSuffix.endsWith('B');
|
||||
const isAxisTooLow = absAxis < this.binarySearch.targetAxisMin;
|
||||
|
||||
if (isAxisTooLow === isInvertedDirection) {
|
||||
this.binarySearch.maxValue = midValue;
|
||||
} else {
|
||||
this.binarySearch.minValue = midValue;
|
||||
}
|
||||
}
|
||||
|
||||
async _performDpadAdjustment(element, adjustment) {
|
||||
const currentValue = parseInt(element.val()) || 0;
|
||||
const maxValue = this.controller.getFinetuneMaxValue();
|
||||
@@ -970,25 +1156,23 @@ export class Finetune {
|
||||
}
|
||||
|
||||
/**
|
||||
* Save step size to localStorage
|
||||
* Save step size to storage
|
||||
*/
|
||||
_saveStepSizeToLocalStorage() {
|
||||
localStorage.setItem('finetuneCenterStepSize', this._centerStepSize.toString());
|
||||
localStorage.setItem('finetuneCircularityStepSize', this._circularityStepSize.toString());
|
||||
Storage.finetuneCenterStepSize.set(this._centerStepSize);
|
||||
Storage.finetuneCircularityStepSize.set(this._circularityStepSize);
|
||||
}
|
||||
|
||||
/**
|
||||
* Restore step size from localStorage
|
||||
* Restore step size from storage
|
||||
*/
|
||||
_restoreStepSizeFromLocalStorage() {
|
||||
// Restore center step size
|
||||
const savedCenterStepSize = localStorage.getItem('finetuneCenterStepSize');
|
||||
const savedCenterStepSize = Storage.finetuneCenterStepSize.get();
|
||||
if (savedCenterStepSize) {
|
||||
this._centerStepSize = parseInt(savedCenterStepSize);
|
||||
}
|
||||
|
||||
// Restore circularity step size
|
||||
const savedCircularityStepSize = localStorage.getItem('finetuneCircularityStepSize');
|
||||
const savedCircularityStepSize = Storage.finetuneCircularityStepSize.get();
|
||||
if (savedCircularityStepSize) {
|
||||
this._circularityStepSize = parseInt(savedCircularityStepSize);
|
||||
}
|
||||
@@ -996,14 +1180,6 @@ export class Finetune {
|
||||
this._updateStepSizeUI();
|
||||
}
|
||||
|
||||
/**
|
||||
* Reset circularity sliders to zero position
|
||||
*/
|
||||
_resetCircularitySliders() {
|
||||
$(`#leftCircularitySlider`).val(0);
|
||||
$(`#rightCircularitySlider`).val(0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle the start of circularity slider adjustment
|
||||
* Store base values and reset previous slider value
|
||||
@@ -1112,7 +1288,7 @@ export class Finetune {
|
||||
circData.fill(0);
|
||||
|
||||
// Call the clearCircularity function to update the display
|
||||
this.clearCircularity();
|
||||
this.clearCircularity(lOrR);
|
||||
|
||||
// Trigger the change event to update the finetune data once when slider is released
|
||||
this._onFinetuneChange();
|
||||
@@ -1170,7 +1346,7 @@ export class Finetune {
|
||||
this._showErrorSlackButton(lOrR);
|
||||
|
||||
// Clear the circularity data display
|
||||
this.clearCircularity();
|
||||
this.clearCircularity(lOrR);
|
||||
|
||||
// Trigger the change event to update the finetune data
|
||||
this._onFinetuneChange();
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
'use strict';
|
||||
|
||||
import { l } from '../translations.js';
|
||||
import { la } from '../utils.js'
|
||||
import { la } from '../utils.js';
|
||||
import { Storage } from '../storage.js';
|
||||
|
||||
const TEST_SEQUENCE = ['usb', 'buttons', 'adaptive', 'haptic', 'lights', 'speaker', 'headphone', 'microphone'];
|
||||
const TEST_NAMES = {
|
||||
@@ -93,36 +94,33 @@ export class QuickTestModal {
|
||||
isTransitioning: false,
|
||||
skippedTests: [],
|
||||
lightsAnimationInterval: null,
|
||||
batteryAlertShown: false,
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Save skipped tests to localStorage
|
||||
* Save skipped tests to storage
|
||||
*/
|
||||
_saveSkippedTestsToStorage() {
|
||||
try {
|
||||
localStorage.setItem('quickTestSkippedTests', JSON.stringify(this.state.skippedTests));
|
||||
Storage.quickTestSkippedTests.set(this.state.skippedTests);
|
||||
} catch (error) {
|
||||
console.warn('Failed to save skipped tests to localStorage:', error);
|
||||
console.warn('Failed to save skipped tests to storage:', error);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Load skipped tests from localStorage
|
||||
* Load skipped tests from storage
|
||||
*/
|
||||
_loadSkippedTestsFromStorage() {
|
||||
try {
|
||||
const saved = localStorage.getItem('quickTestSkippedTests');
|
||||
if (saved) {
|
||||
const skippedTests = JSON.parse(saved);
|
||||
if (Array.isArray(skippedTests)) {
|
||||
this.state.skippedTests = skippedTests.filter(test => TEST_SEQUENCE.includes(test));
|
||||
// Apply the skipped tests to the UI
|
||||
this._applySkippedTestsToUI();
|
||||
}
|
||||
const skippedTests = Storage.quickTestSkippedTests.get();
|
||||
if (Array.isArray(skippedTests) && skippedTests.length > 0) {
|
||||
this.state.skippedTests = skippedTests.filter(test => TEST_SEQUENCE.includes(test));
|
||||
this._applySkippedTestsToUI();
|
||||
}
|
||||
} catch (error) {
|
||||
console.warn('Failed to load skipped tests from localStorage:', error);
|
||||
console.warn('Failed to load skipped tests from storage:', error);
|
||||
this.state.skippedTests = [];
|
||||
}
|
||||
}
|
||||
@@ -263,6 +261,7 @@ export class QuickTestModal {
|
||||
case 'haptic':
|
||||
const hapticTestDesc = l('This test will activate the controller\'s vibration motors, first the heavy one, and then the light one.');
|
||||
const hapticInstructions = l('Feel for vibration in the controller.');
|
||||
const hapticRepeat = l('Repeat');
|
||||
return `
|
||||
<p>${hapticTestDesc}</p>
|
||||
<p><strong>${instructions}:</strong> ${hapticInstructions}</p>
|
||||
@@ -273,6 +272,9 @@ export class QuickTestModal {
|
||||
<button type="button" class="btn btn-danger" id="haptic-fail-btn" onclick="markTestResult('haptic', false)">
|
||||
<i class="fas fa-times me-1"></i><span>${fail}</span>
|
||||
</button>
|
||||
<button type="button" class="btn btn-outline-primary" id="haptic-replay-btn" onclick="replayHapticTest()">
|
||||
<i class="fas fa-redo me-1"></i><span>${hapticRepeat}</span>
|
||||
</button>
|
||||
</div>
|
||||
`;
|
||||
case 'adaptive':
|
||||
@@ -376,13 +378,13 @@ export class QuickTestModal {
|
||||
}
|
||||
|
||||
/**
|
||||
* Clear saved skipped tests from localStorage
|
||||
* Clear saved skipped tests from storage
|
||||
*/
|
||||
_clearSkippedTestsFromStorage() {
|
||||
try {
|
||||
localStorage.removeItem('quickTestSkippedTests');
|
||||
Storage.quickTestSkippedTests.clear();
|
||||
} catch (error) {
|
||||
console.warn('Failed to clear skipped tests from localStorage:', error);
|
||||
console.warn('Failed to clear skipped tests from storage:', error);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1099,7 +1101,7 @@ export class QuickTestModal {
|
||||
this.state.skippedTests.push(testType);
|
||||
}
|
||||
|
||||
// Save to localStorage
|
||||
// Save to storage
|
||||
this._saveSkippedTestsToStorage();
|
||||
|
||||
// Stop any ongoing test activities
|
||||
@@ -1275,9 +1277,21 @@ export class QuickTestModal {
|
||||
/**
|
||||
* Handle controller input for test navigation and control
|
||||
*/
|
||||
handleControllerInput(changes) {
|
||||
handleControllerInput(changes, batteryStatus) {
|
||||
if(this.state.isTransitioning) return;
|
||||
|
||||
// Check battery status and show/hide warning if charge is 5% or less
|
||||
if (batteryStatus) {
|
||||
// Only update visibility if alert hasn't been shown or charge level changed
|
||||
if (!this.state.batteryAlertShown || batteryStatus.changed ) {
|
||||
console.log("Battery status changed:", batteryStatus);
|
||||
const { charge_level, is_error } = batteryStatus;
|
||||
const $batteryWarning = $('#battery-warning-alert');
|
||||
$batteryWarning.toggle(charge_level <= 5 || is_error);
|
||||
this.state.batteryAlertShown = true;
|
||||
}
|
||||
}
|
||||
|
||||
const activeTest = this._getCurrentActiveTest();
|
||||
|
||||
// If buttons test is active, track button presses
|
||||
@@ -1503,7 +1517,7 @@ export class QuickTestModal {
|
||||
// Reset state
|
||||
this._initializeState();
|
||||
|
||||
// Load saved skipped tests from localStorage
|
||||
// Load saved skipped tests from storage
|
||||
this._loadSkippedTestsFromStorage();
|
||||
|
||||
// Reset button colors to initial state
|
||||
@@ -1572,9 +1586,9 @@ export function isQuickTestVisible() {
|
||||
/**
|
||||
* Handle controller input for the Quick Test Modal
|
||||
*/
|
||||
export function quicktest_handle_controller_input(changes) {
|
||||
export function quicktest_handle_controller_input(changes, batteryStatus) {
|
||||
if (currentQuickTestInstance && isQuickTestVisible()) {
|
||||
currentQuickTestInstance.handleControllerInput(changes);
|
||||
currentQuickTestInstance.handleControllerInput(changes, batteryStatus);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1632,6 +1646,12 @@ function replaySpeakerTest() {
|
||||
}
|
||||
}
|
||||
|
||||
function replayHapticTest() {
|
||||
if (currentQuickTestInstance) {
|
||||
currentQuickTestInstance._startHapticTest();
|
||||
}
|
||||
}
|
||||
|
||||
// Legacy compatibility - expose functions to window for HTML onclick handlers
|
||||
window.markTestResult = markTestResult;
|
||||
window.resetAllTests = resetAllTests;
|
||||
@@ -1640,3 +1660,4 @@ window.skipTest = skipTest;
|
||||
window.addTestBack = addTestBack;
|
||||
window.testHeadphoneAudio = testHeadphoneAudio;
|
||||
window.replaySpeakerTest = replaySpeakerTest;
|
||||
window.replayHapticTest = replayHapticTest;
|
||||
|
||||
@@ -16,7 +16,7 @@ export const CIRCULARITY_DATA_SIZE = 48; // Number of angular positions to sampl
|
||||
* @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_position(ctx, center_x, center_y, sz, stick_x, stick_y, opts = {}) {
|
||||
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
|
||||
@@ -168,7 +168,7 @@ export function draw_stick_position(ctx, center_x, center_y, sz, stick_x, stick_
|
||||
* @param {number[]} data - Array of distance values at different angular positions
|
||||
* @returns {number} RMS deviation as percentage
|
||||
*/
|
||||
function calculateCircularityError(data) {
|
||||
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);
|
||||
|
||||
245
js/storage.js
Normal file
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);
|
||||
},
|
||||
},
|
||||
};
|
||||
@@ -83,10 +83,11 @@ export async function loadAllTemplates() {
|
||||
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;
|
||||
modalsContainer.innerHTML = faqModalHtml + popupModalHtml + finetuneModalHtml + calibCenterModalHtml + welcomeModalHtml + autoCalibCenterModalHtml + rangeModalHtml + edgeProgressModalHtml + edgeModalHtml + donateModalHtml + quickTestModalHtml + calibrationHistoryModalHtml;
|
||||
document.body.appendChild(modalsContainer);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
'use strict';
|
||||
|
||||
import { la, createCookie, readCookie } from './utils.js';
|
||||
import { la } from './utils.js';
|
||||
import { Storage } from './storage.js';
|
||||
|
||||
// Alphabetical order
|
||||
const available_langs = {
|
||||
@@ -50,7 +51,7 @@ export function lang_init(appState, handleLanguageChangeCb, welcomeModalCb) {
|
||||
}
|
||||
translationState.lang_orig_text[".title"] = document.title;
|
||||
|
||||
const force_lang = readCookie("force_lang");
|
||||
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);
|
||||
@@ -89,9 +90,9 @@ async function lang_set(lang, skip_modal=false) {
|
||||
}
|
||||
|
||||
await handleLanguageChange(lang);
|
||||
createCookie("force_lang", lang);
|
||||
Storage.setString("force_lang", lang);
|
||||
if(!skip_modal && welcomeModal) {
|
||||
createCookie("welcome_accepted", "0");
|
||||
Storage.setString("welcome_accepted", "0");
|
||||
welcomeModal();
|
||||
}
|
||||
}
|
||||
|
||||
45
js/utils.js
45
js/utils.js
@@ -1,5 +1,7 @@
|
||||
'use strict';
|
||||
|
||||
import { Storage } from './storage.js';
|
||||
|
||||
/**
|
||||
* Utility functions for DualShock controller operations
|
||||
*/
|
||||
@@ -118,38 +120,27 @@ export function lerp_color(a, b, t) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a cookie with specified name, value, and expiration days
|
||||
* @param {string} name Cookie name
|
||||
* @param {string} value Cookie value
|
||||
* @param {number} days Number of days until expiration
|
||||
* Get the appropriate locale for date formatting based on language and timezone
|
||||
* @returns {string} Locale string for use with toLocaleString()
|
||||
*/
|
||||
export function createCookie(name, value, days) {
|
||||
const expires = days ? "; expires=" + new Date(Date.now() + days * 24 * 60 * 60 * 1000).toGMTString() : "";
|
||||
document.cookie = encodeURIComponent(name) + "=" + encodeURIComponent(value) + expires + "; path=/";
|
||||
}
|
||||
export function getLocaleForDateFormatting() {
|
||||
let lang = Storage.getString('force_lang') || navigator.language;
|
||||
const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
|
||||
|
||||
/**
|
||||
* Read a cookie value by name
|
||||
* @param {string} name Cookie name
|
||||
* @returns {string|null} Cookie value or null if not found
|
||||
*/
|
||||
export function readCookie(name) {
|
||||
const nameEQ = encodeURIComponent(name) + "=";
|
||||
const ca = document.cookie.split(';');
|
||||
for (let i = 0; i < ca.length; i++) {
|
||||
let c = ca[i];
|
||||
while (c.charAt(0) === ' ')
|
||||
c = c.substring(1, c.length);
|
||||
if (c.indexOf(nameEQ) === 0)
|
||||
return decodeURIComponent(c.substring(nameEQ.length, c.length));
|
||||
// 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 null;
|
||||
|
||||
return lang.replace('_', '-').toLowerCase();
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a cookie by setting its expiration to the past
|
||||
* @param {string} name Cookie name to delete
|
||||
* 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 eraseCookie(name) {
|
||||
createCookie(name, "", -1);
|
||||
export function formatLocalizedDate(timestamp) {
|
||||
const locale = getLocaleForDateFormatting();
|
||||
return new Date(timestamp).toLocaleString(locale);
|
||||
}
|
||||
@@ -1,7 +1,6 @@
|
||||
{
|
||||
".authorMsg": "الترجمة من طرف سجاد رحيم Sajjad Rahim",
|
||||
"DualShock Calibration GUI": "DualShock Calibration GUI",
|
||||
"Unsupported browser. Please use a web browser with WebHID support (e.g. Chrome).": "المتصفح غير معتمد. الرجاء استخدام متصفح بدعم WebHID (على سبيل المثال Chrome).",
|
||||
"Connect": "اتصال",
|
||||
"Connected to:": "متصل بـ:",
|
||||
"Disconnect": "قطع الاتصال",
|
||||
@@ -35,7 +34,7 @@
|
||||
"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>",
|
||||
"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": "إذا كنت تجد ذلك مفيداً وترغب في دعم جهودي، لا تتردد في",
|
||||
@@ -67,14 +66,12 @@
|
||||
"Sony DualSense Edge": "Sony DualSense Edge",
|
||||
"Connected invalid device": "الجهاز المتصل غير صالح،",
|
||||
"Error": "خطأ،",
|
||||
"My handle on discord is: the_al": "معرفي على ديسكورد هو، the_al",
|
||||
"Initializing...": "تتم التهيئة...",
|
||||
"Storing calibration...": "خزن المعايرة...",
|
||||
"Sampling...": "أخذ العينات...",
|
||||
"Calibration in progress": "جارٍ المعايرة",
|
||||
"Start": "بدء",
|
||||
"Continue": "متابعة",
|
||||
"You can check the calibration with the": "يمكنك التحقق من المعايرة من خلال",
|
||||
"Have a nice day :)": "أتمنى لك يومًا سعيدًا :)",
|
||||
"Welcome to the Calibration GUI": "مرحباً بك في Calibration GUI",
|
||||
"Just few things to know before you can start:": "بعض الأشياء التي يجب أن تعرفها قبل أن تبدأ",
|
||||
@@ -124,8 +121,6 @@
|
||||
", to help more people like you!": "، لمساعدة المزيد من الناس من أمثالك!",
|
||||
"This website uses analytics to improve the service.": "يستخدم هذا الموقع التحليلات لتحسين الخدمة.",
|
||||
"Board Model": "نوع اللوحة",
|
||||
"This feature is experimental.": "هذه الخاصية تجريبية.",
|
||||
"Please let me know if the board model of your controller is not detected correctly.": "من فضلك أخبرني إذا لم يتم اكتشاف نوع لوحة التحكم بشكل صحيح.",
|
||||
"This DualSense controller has outdated firmware.": "يد تحكم DualSense هذه تستخدم برمجيات قديمة.",
|
||||
"Please update the firmware and try again.": "الرجاء حدث البرمجيات وحاول مرة أخرى.",
|
||||
"Joystick Info": "معلومات عصا التحكم",
|
||||
@@ -183,14 +178,20 @@
|
||||
"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.": "",
|
||||
"Cancel": "",
|
||||
"Cannot copy text to the clipboard:": "",
|
||||
"Cannot lock": "",
|
||||
"Cannot read module barcodes": "",
|
||||
"Cannot store data into": "",
|
||||
"Cannot unlock": "",
|
||||
"Center": "",
|
||||
@@ -200,12 +201,18 @@
|
||||
"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": "",
|
||||
@@ -215,6 +222,7 @@
|
||||
"Failed to set vibration": "",
|
||||
"Feel for vibration in the controller.": "",
|
||||
"Finetune stick calibration": "",
|
||||
"Firefox is supported with the WebHID extension installed.": "",
|
||||
"For more info or help, feel free to reach out on Discord.": "",
|
||||
"Fortnite": "",
|
||||
"Galactic Purple": "",
|
||||
@@ -226,7 +234,9 @@
|
||||
"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": "",
|
||||
@@ -239,6 +249,7 @@
|
||||
"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 tested": "",
|
||||
@@ -248,6 +259,7 @@
|
||||
"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": "",
|
||||
@@ -263,6 +275,8 @@
|
||||
"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.": "",
|
||||
@@ -280,9 +294,11 @@
|
||||
"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 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 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.": "",
|
||||
"This is only for advanced users. If you're not sure what you're doing, please do not attempt it.": "",
|
||||
"This test checks all controller buttons by requiring you to press each button up to three times.": "",
|
||||
@@ -290,8 +306,16 @@
|
||||
"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.": "",
|
||||
"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.": "",
|
||||
@@ -299,6 +323,7 @@
|
||||
"White": "",
|
||||
"Wiggle the USB cable to see if the controller disconnects.": "",
|
||||
"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": "",
|
||||
@@ -306,6 +331,7 @@
|
||||
"left module": "",
|
||||
"passed": "",
|
||||
"right module": "",
|
||||
"serial number": "",
|
||||
"skipped": "",
|
||||
"tests completed": "",
|
||||
"to increase the non-circularity.": "",
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
{
|
||||
".authorMsg": "- Превод на Български е извършен от: <a href='https://www.youtube.com/channel/UC8pzDCIt_CUj8sa7cYgPzHQ'>Tamir-Teknik</a>",
|
||||
"DualShock Calibration GUI": "DualShock калибрационен интерфейс",
|
||||
"Unsupported browser. Please use a web browser with WebHID support (e.g. Chrome).": "Неподдържан браузър. Моля, използвайте уеб браузър с поддръжка на WebHID (например Chrome).",
|
||||
"Connect": "Свържи",
|
||||
"Connected to:": "Свързан с:",
|
||||
"Disconnect": "Изключване",
|
||||
@@ -34,7 +33,7 @@
|
||||
"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>",
|
||||
"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": "Ако намирате, че е полезно и искате да подкрепите усилията ми, не се колебайте",
|
||||
@@ -66,14 +65,12 @@
|
||||
"Sony DualSense Edge": "Sony DualSense Edge",
|
||||
"Connected invalid device": "Свързан невалидно устройство",
|
||||
"Error": "Грешка",
|
||||
"My handle on discord is: the_al": "Моят ник в discord е: the_al",
|
||||
"Initializing...": "Инициализация...",
|
||||
"Storing calibration...": "Запазване на калибрацията...",
|
||||
"Sampling...": "Проба...",
|
||||
"Calibration in progress": "Калибрация в ход",
|
||||
"Start": "Започни",
|
||||
"Continue": "Продължи",
|
||||
"You can check the calibration with the": "Можете да проверите калибрацията с",
|
||||
"Have a nice day :)": "Приятен ден! :)",
|
||||
"Welcome to the Calibration GUI": "Добре дошли в Calibration GUI",
|
||||
"Just few things to know before you can start:": "Просто няколко неща, които трябва да знаете, преди да започнете:",
|
||||
@@ -123,8 +120,6 @@
|
||||
", to help more people like you!": ", за да помогнете на повече хора като вас!",
|
||||
"This website uses analytics to improve the service.": "Този уебсайт използва анализи за подобряване на услугата.",
|
||||
"Board Model": "Модел на платката",
|
||||
"This feature is experimental.": "Тази функция е експериментална.",
|
||||
"Please let me know if the board model of your controller is not detected correctly.": "Моля, уведомете ме, ако моделът на платката на вашия контролер не е разпознат правилно.",
|
||||
"This DualSense controller has outdated firmware.": "Този контролер DualSense има остарял фърмуер.",
|
||||
"Please update the firmware and try again.": "Моля, актуализирайте фърмуера и опитайте отново.",
|
||||
"Joystick Info": "Информация за джойстика",
|
||||
@@ -158,16 +153,22 @@
|
||||
"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.": "",
|
||||
"Cancel": "",
|
||||
"Cannot copy text to the clipboard:": "",
|
||||
"Cannot lock": "",
|
||||
"Cannot read module barcodes": "",
|
||||
"Cannot store data into": "",
|
||||
"Cannot unlock": "",
|
||||
"Center": "",
|
||||
@@ -177,15 +178,21 @@
|
||||
"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": "",
|
||||
@@ -201,6 +208,7 @@
|
||||
"Failed to set vibration": "",
|
||||
"Feel for vibration in the controller.": "",
|
||||
"Finetune stick calibration": "",
|
||||
"Firefox is supported with the WebHID extension installed.": "",
|
||||
"For more info or help, feel free to reach out on Discord.": "",
|
||||
"Fortnite": "",
|
||||
"Galactic Purple": "",
|
||||
@@ -214,7 +222,9 @@
|
||||
"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": "",
|
||||
@@ -228,6 +238,7 @@
|
||||
"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 tested": "",
|
||||
@@ -238,6 +249,7 @@
|
||||
"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": "",
|
||||
@@ -253,6 +265,8 @@
|
||||
"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.": "",
|
||||
@@ -275,9 +289,11 @@
|
||||
"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 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 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.": "",
|
||||
"This is only for advanced users. If you're not sure what you're doing, please do not attempt it.": "",
|
||||
"This test checks all controller buttons by requiring you to press each button up to three times.": "",
|
||||
@@ -285,12 +301,20 @@
|
||||
"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.": "",
|
||||
"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.": "",
|
||||
@@ -299,6 +323,7 @@
|
||||
"White": "",
|
||||
"Wiggle the USB cable to see if the controller disconnects.": "",
|
||||
"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": "",
|
||||
@@ -306,6 +331,7 @@
|
||||
"left module": "",
|
||||
"passed": "",
|
||||
"right module": "",
|
||||
"serial number": "",
|
||||
"skipped": "",
|
||||
"tests completed": "",
|
||||
"to increase the non-circularity.": "",
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
{
|
||||
".authorMsg": "Překlad od Rowan_CZE <a href='https://beardedvillains.cz/'>Bearded Villains Czech Republic</a>",
|
||||
"DualShock Calibration GUI": "DualShock Calibration GUI",
|
||||
"Unsupported browser. Please use a web browser with WebHID support (e.g. Chrome).": "Nepodporovaný prohlížeč. Použijte prosím webový prohlížeč s podporou WebHID (např. Chrome).",
|
||||
"Connect": "Připojit",
|
||||
"Connected to:": "Připojeno:",
|
||||
"Disconnect": "Odpojit",
|
||||
@@ -34,7 +33,7 @@
|
||||
"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",
|
||||
"<b>The controller is now sampling data!</b>": "<b>Regulátor nyní vzorkuje data!</b>",
|
||||
"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",
|
||||
@@ -66,14 +65,12 @@
|
||||
"Sony DualSense Edge": "Sony DualSense Edge",
|
||||
"Connected invalid device": "Připojené neplatné zařízení",
|
||||
"Error": "Chyba",
|
||||
"My handle on discord is: the_al": "Můj Discord to: the_al",
|
||||
"Initializing...": "Inicializace...",
|
||||
"Storing calibration...": "Uložení kalibrace...",
|
||||
"Sampling...": "Vzorkování...",
|
||||
"Calibration in progress": "Probíhá kalibrace",
|
||||
"Start": "Start",
|
||||
"Continue": "Pokračovat",
|
||||
"You can check the calibration with the": "Kalibraci můžete zkontrolovat pomocí",
|
||||
"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",
|
||||
@@ -123,8 +120,6 @@
|
||||
", 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 feature is experimental.": "Tato funkce je experimentální.",
|
||||
"Please let me know if the board model of your controller is not detected correctly.": "Prosím, dejte mi vědět, pokud model základní desky vašeho ovládače není správně detekován",
|
||||
"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",
|
||||
@@ -141,18 +136,24 @@
|
||||
"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 reset a permanent calibration to previous calibration?": "",
|
||||
"Can you overwrite a permanent calibration?": "",
|
||||
"Cancel": "",
|
||||
"Cannot copy text to the clipboard:": "",
|
||||
"Cannot lock": "",
|
||||
"Cannot read module barcodes": "",
|
||||
"Cannot store data into": "",
|
||||
"Cannot unlock": "",
|
||||
"Center": "",
|
||||
@@ -163,16 +164,22 @@
|
||||
"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": "",
|
||||
@@ -189,6 +196,7 @@
|
||||
"Failed to set vibration": "",
|
||||
"Feel for vibration in the controller.": "",
|
||||
"Finetune stick calibration": "",
|
||||
"Firefox is supported with the WebHID extension installed.": "",
|
||||
"For more info or help, feel free to reach out on Discord.": "",
|
||||
"Fortnite": "",
|
||||
"Galactic Purple": "",
|
||||
@@ -203,7 +211,9 @@
|
||||
"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": "",
|
||||
@@ -218,6 +228,7 @@
|
||||
"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": "",
|
||||
@@ -231,6 +242,7 @@
|
||||
"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": "",
|
||||
@@ -247,6 +259,8 @@
|
||||
"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.": "",
|
||||
@@ -271,9 +285,11 @@
|
||||
"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 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 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.": "",
|
||||
"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.": "",
|
||||
@@ -283,12 +299,20 @@
|
||||
"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.": "",
|
||||
"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.": "",
|
||||
@@ -299,6 +323,7 @@
|
||||
"Yes. Simply do another permanent calibration.": "",
|
||||
"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": "",
|
||||
@@ -306,6 +331,7 @@
|
||||
"left module": "",
|
||||
"passed": "",
|
||||
"right module": "",
|
||||
"serial number": "",
|
||||
"skipped": "",
|
||||
"tests completed": "",
|
||||
"to increase the non-circularity.": "",
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
{
|
||||
".authorMsg": "- Oversættelse til dansk af Claus Christensen",
|
||||
"DualShock Calibration GUI": "DualShock Kalibrerings GUI",
|
||||
"Unsupported browser. Please use a web browser with WebHID support (e.g. Chrome).": "Browseren understøttes ikke. Brug venligst en webbrowser med WebHID-understøttelse (f.eks. Chrome).",
|
||||
"Connect": "Tilslut",
|
||||
"Connected to:": "Tilsluttet til:",
|
||||
"Disconnect": "Afbryd",
|
||||
@@ -35,7 +34,7 @@
|
||||
"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",
|
||||
"<b>The controller is now sampling data!</b>": "<b>Controlleren indsamler nu data!</b>",
|
||||
"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",
|
||||
@@ -68,14 +67,12 @@
|
||||
"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",
|
||||
"My handle on discord is: the_al": "Mit brugernavn på Discord er: the_al",
|
||||
"Initializing...": "Initialiserer...",
|
||||
"Storing calibration...": "Gemmer kalibrering...",
|
||||
"Sampling...": "Sampling...",
|
||||
"Calibration in progress": "Kalibrering er i gang",
|
||||
"Start": "Start",
|
||||
"Continue": "Fortsæt",
|
||||
"You can check the calibration with the": "Du kan tjekke kalibreringen med",
|
||||
"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:",
|
||||
@@ -125,8 +122,6 @@
|
||||
", 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 feature is experimental.": "Denne funktion er eksperimentel.",
|
||||
"Please let me know if the board model of your controller is not detected correctly.": "Giv mig venligst besked, hvis board modellen på din controller ikke bliver registreret korrekt.",
|
||||
"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",
|
||||
@@ -244,7 +239,6 @@
|
||||
"Buttons": "Knapper",
|
||||
"Center": "Centrer",
|
||||
"Circularity": "Cirkularitet",
|
||||
"Click \"Test Speaker\" to listen for the tone through the headphones": "Klik på \"Test Højttaler\" for at høre tonen gennem hovedtelefonerne.",
|
||||
"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",
|
||||
@@ -295,10 +289,8 @@
|
||||
"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 activate the controller's vibration motors, first the heavy one, and then the light one.": "Denne test vil aktivere controllerens vibrationsmotorer, først den kraftige og derefter den lette.",
|
||||
"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.",
|
||||
"This test will play a tone through the controller's built-in speaker.": "Denne test vil afspille en tone gennem controllerens indbyggede højttaler.",
|
||||
"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...",
|
||||
@@ -309,8 +301,39 @@
|
||||
"skipped": "sprunget over",
|
||||
"tests completed": "tests er gennemført",
|
||||
"to increase the non-circularity.": "for at øge ikke-cirkulariteten.",
|
||||
"Cannot copy text to the clipboard:": "",
|
||||
"Please connect a DualShock 4, a DualSense, DualSense Edge or VR2 controller to your computer and press Connect.": "",
|
||||
"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.": "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",
|
||||
"": ""
|
||||
}
|
||||
@@ -1,7 +1,6 @@
|
||||
{
|
||||
".authorMsg": "- Deutsch Übersetzung von <a href='https://chat.openai.com'>ChatGPT</a>",
|
||||
"DualShock Calibration GUI": "DualShock-Kalibrierungs-GUI",
|
||||
"Unsupported browser. Please use a web browser with WebHID support (e.g. Chrome).": "Nicht unterstützter Browser. Verwende bitte einen Webbrowser mit WebHID-Unterstützung (z.B. Chrome).",
|
||||
"Connect": "Verbinden",
|
||||
"Connected to:": "Verbunden mit:",
|
||||
"Disconnect": "Trennen",
|
||||
@@ -35,7 +34,7 @@
|
||||
"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",
|
||||
"<b>The controller is now sampling data!</b>": "<b>Der Controller erfasst jetzt Daten!</b>",
|
||||
"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",
|
||||
@@ -67,14 +66,12 @@
|
||||
"Sony DualSense Edge": "Sony DualSense Edge",
|
||||
"Connected invalid device": "Verbundenes ungültiges Gerät",
|
||||
"Error": "Fehler",
|
||||
"My handle on discord is: the_al": "Mein Handle auf Discord ist: the_al",
|
||||
"Initializing...": "Initialisierung...",
|
||||
"Storing calibration...": "Kalibrierung speichern...",
|
||||
"Sampling...": "Probenahme...",
|
||||
"Calibration in progress": "Kalibrierung läuft",
|
||||
"Start": "Start",
|
||||
"Continue": "Fortfahren",
|
||||
"You can check the calibration with the": "Du kannst die Kalibrierung mit dem",
|
||||
"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:",
|
||||
@@ -124,8 +121,6 @@
|
||||
", 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 feature is experimental.": "Diese Funktion ist experimentell.",
|
||||
"Please let me know if the board model of your controller is not detected correctly.": "Bitte lasse mich wissen, wenn das Platinentyp Ihres Controllers nicht korrekt erkannt wird.",
|
||||
"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",
|
||||
@@ -175,14 +170,20 @@
|
||||
"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.": "",
|
||||
"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.": "",
|
||||
"Cannot copy text to the clipboard:": "",
|
||||
"Cannot lock": "",
|
||||
"Cannot read module barcodes": "",
|
||||
"Cannot store data into": "",
|
||||
"Cannot unlock": "",
|
||||
"Center": "",
|
||||
@@ -192,12 +193,18 @@
|
||||
"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": "",
|
||||
"FW Update": "",
|
||||
"FW Update Info": "",
|
||||
@@ -209,6 +216,7 @@
|
||||
"Failed to set speaker tone": "",
|
||||
"Failed to set vibration": "",
|
||||
"Feel for vibration in the controller.": "",
|
||||
"Firefox is supported with the WebHID extension installed.": "",
|
||||
"For more info or help, feel free to reach out on Discord.": "",
|
||||
"Fortnite": "",
|
||||
"Galactic Purple": "",
|
||||
@@ -221,7 +229,9 @@
|
||||
"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": "",
|
||||
@@ -234,6 +244,7 @@
|
||||
"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 tested": "",
|
||||
@@ -244,6 +255,7 @@
|
||||
"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": "",
|
||||
@@ -259,6 +271,8 @@
|
||||
"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.": "",
|
||||
@@ -277,9 +291,11 @@
|
||||
"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 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 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.": "",
|
||||
"This is only for advanced users. If you're not sure what you're doing, please do not attempt it.": "",
|
||||
"This test checks all controller buttons by requiring you to press each button up to three times.": "",
|
||||
@@ -287,10 +303,18 @@
|
||||
"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.": "",
|
||||
"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.": "",
|
||||
"Values": "",
|
||||
"Venom FW Version": "",
|
||||
"Volcanic Red": "",
|
||||
"Watch the controller lights change colors, the player lights animate, and the mute button flash.": "",
|
||||
@@ -299,6 +323,7 @@
|
||||
"White": "",
|
||||
"Wiggle the USB cable to see if the controller disconnects.": "",
|
||||
"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": "",
|
||||
@@ -306,6 +331,7 @@
|
||||
"left module": "",
|
||||
"passed": "",
|
||||
"right module": "",
|
||||
"serial number": "",
|
||||
"skipped": "",
|
||||
"tests completed": "",
|
||||
"to increase the non-circularity.": "",
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
{
|
||||
".authorMsg": "- Traducción al Español realizado por Ruben Martins, Miguel Borja @closesim :)",
|
||||
"DualShock Calibration GUI": "GUI de Calibración DualShock",
|
||||
"Unsupported browser. Please use a web browser with WebHID support (e.g. Chrome).": "Navegador no soportado. Por favor utiliza un explorador con soporte WebHID (ej. Chrome).",
|
||||
"Connect": "Conectar",
|
||||
"Connected to:": "Conectado a:",
|
||||
"Disconnect": "Desconectar",
|
||||
@@ -34,7 +33,7 @@
|
||||
"Recentering the controller sticks.": "Re-centrando los análogos del mando.",
|
||||
"Please do not close this window and do not disconnect your controller. ": "Por favor, no cierre esta ventana y/o desconecte el mando. ",
|
||||
"Range calibration": "Calibración de rango",
|
||||
"<b>The controller is now sampling data!</b>": "<b>El mando ahora esta captando información!</b>",
|
||||
"The controller is now sampling data!": "El mando ahora esta captando información!</b>",
|
||||
"Done": "Listo",
|
||||
"Hi, thank you for using this software.": "Hola, gracias por utilizar este software.",
|
||||
"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",
|
||||
@@ -66,14 +65,12 @@
|
||||
"Sony DualSense Edge": "Sony DualSense Edge",
|
||||
"Connected invalid device": "Dispositivo conectado no válido",
|
||||
"Error": "Error",
|
||||
"My handle on discord is: the_al": "Mi usuario de discord es: the_al",
|
||||
"Initializing...": "Inicializando...",
|
||||
"Storing calibration...": "Guardando Calibración...",
|
||||
"Sampling...": "Captando...",
|
||||
"Calibration in progress": "Calibración en proceso",
|
||||
"Start": "Empezar",
|
||||
"Continue": "Continuar",
|
||||
"You can check the calibration with the": "Puede verificar su calibración con el",
|
||||
"Have a nice day :)": "Que tenga un buen dia! :)",
|
||||
"Welcome to the Calibration GUI": "Bienvenido a la GUI de Calibración",
|
||||
"Just few things to know before you can start:": "Un par de cosas antes de empezar:",
|
||||
@@ -123,8 +120,6 @@
|
||||
", to help more people like you!": ", para que ayude más personas como tu!",
|
||||
"This website uses analytics to improve the service.": "Este sitio web utiliza análisis para mejorar el servicio.",
|
||||
"Board Model": "Modelo de la placa",
|
||||
"This feature is experimental.": "Esta función es experimental.",
|
||||
"Please let me know if the board model of your controller is not detected correctly.": "Por favor, avísame si el modelo de la placa de tu controlador no se detecta correctamente.",
|
||||
"This DualSense controller has outdated firmware.": "Este mando DualSense tiene un firmware desactualizado.",
|
||||
"Please update the firmware and try again.": "Por favor, actualiza el firmware y vuelve a intentarlo.",
|
||||
"Joystick Info": "Información del joystick",
|
||||
@@ -141,18 +136,24 @@
|
||||
"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 reset a permanent calibration to previous calibration?": "",
|
||||
"Can you overwrite a permanent calibration?": "",
|
||||
"Cancel": "",
|
||||
"Cannot copy text to the clipboard:": "",
|
||||
"Cannot lock": "",
|
||||
"Cannot read module barcodes": "",
|
||||
"Cannot store data into": "",
|
||||
"Cannot unlock": "",
|
||||
"Center": "",
|
||||
@@ -163,16 +164,22 @@
|
||||
"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": "",
|
||||
@@ -189,6 +196,7 @@
|
||||
"Failed to set vibration": "",
|
||||
"Feel for vibration in the controller.": "",
|
||||
"Finetune stick calibration": "",
|
||||
"Firefox is supported with the WebHID extension installed.": "",
|
||||
"For more info or help, feel free to reach out on Discord.": "",
|
||||
"Fortnite": "",
|
||||
"Galactic Purple": "",
|
||||
@@ -203,7 +211,9 @@
|
||||
"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": "",
|
||||
@@ -218,6 +228,7 @@
|
||||
"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": "",
|
||||
@@ -231,6 +242,7 @@
|
||||
"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": "",
|
||||
@@ -247,6 +259,8 @@
|
||||
"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.": "",
|
||||
@@ -271,9 +285,11 @@
|
||||
"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 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 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.": "",
|
||||
"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.": "",
|
||||
@@ -283,12 +299,20 @@
|
||||
"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.": "",
|
||||
"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.": "",
|
||||
@@ -299,6 +323,7 @@
|
||||
"Yes. Simply do another permanent calibration.": "",
|
||||
"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": "",
|
||||
@@ -306,6 +331,7 @@
|
||||
"left module": "",
|
||||
"passed": "",
|
||||
"right module": "",
|
||||
"serial number": "",
|
||||
"skipped": "",
|
||||
"tests completed": "",
|
||||
"to increase the non-circularity.": "",
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
{
|
||||
".authorMsg": "گسترش و ترجمه توسط محمد میرحسینی",
|
||||
"DualShock Calibration GUI": "رابط کاربری کالیبراسیون DualShock",
|
||||
"Unsupported browser. Please use a web browser with WebHID support (e.g. Chrome).": "مرورگر پشتیبانی نمیشود. لطفاً از مرورگری با پشتیبانی WebHID استفاده کنید (مثل Chrome).",
|
||||
"Connect": "اتصال",
|
||||
"Connected to:": "متصل به:",
|
||||
"Disconnect": "قطع اتصال",
|
||||
@@ -35,7 +34,7 @@
|
||||
"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>",
|
||||
"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": "اگر این نرمافزار برایتان مفید بود و میخواهید از تلاشهای من حمایت کنید، میتوانید",
|
||||
@@ -67,14 +66,12 @@
|
||||
"Sony DualSense Edge": "سونی DualSense Edge",
|
||||
"Connected invalid device": "دستگاه متصل نامعتبر است",
|
||||
"Error": "خطا",
|
||||
"My handle on discord is: the_al": "شناسه من در دیسکورد: the_al",
|
||||
"Initializing...": "در حال راهاندازی...",
|
||||
"Storing calibration...": "در حال ذخیرهسازی کالیبراسیون...",
|
||||
"Sampling...": "در حال نمونهبرداری...",
|
||||
"Calibration in progress": "کالیبراسیون در حال انجام است",
|
||||
"Start": "شروع",
|
||||
"Continue": "ادامه",
|
||||
"You can check the calibration with the": "میتوانید کالیبراسیون را با",
|
||||
"Have a nice day :)": "روز خوبی داشته باشید :)",
|
||||
"Welcome to the Calibration GUI": "به رابط کاربری کالیبراسیون خوش آمدید",
|
||||
"Just few things to know before you can start:": "چند نکته قبل از شروع:",
|
||||
@@ -141,13 +138,25 @@
|
||||
"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": "",
|
||||
"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": "",
|
||||
@@ -155,11 +164,14 @@
|
||||
"Failed to set speaker tone": "",
|
||||
"Failed to set vibration": "",
|
||||
"Feel for vibration in the controller.": "",
|
||||
"Firefox is supported with the WebHID extension installed.": "",
|
||||
"Haptic Vibration": "",
|
||||
"Headphone Jack": "",
|
||||
"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.": "",
|
||||
@@ -167,11 +179,13 @@
|
||||
"Microphone": "",
|
||||
"Microphone Level:": "",
|
||||
"No controller connected": "",
|
||||
"No saved calibrations found.": "",
|
||||
"No tests completed yet.": "",
|
||||
"Not tested": "",
|
||||
"Pass": "",
|
||||
"Passed": "",
|
||||
"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": "",
|
||||
@@ -185,6 +199,8 @@
|
||||
"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.": "",
|
||||
"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.": "",
|
||||
@@ -194,20 +210,32 @@
|
||||
"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 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 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.": "",
|
||||
"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.": "",
|
||||
"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.": "",
|
||||
"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.": "",
|
||||
"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.": "",
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
{
|
||||
".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",
|
||||
"Unsupported browser. Please use a web browser with WebHID support (e.g. Chrome).": "Navigateur incompatible. Merci d'utiliser un navigateur supportant le WebHID (p. ex. Chrome).",
|
||||
"Connect": "Connecter",
|
||||
"Connected to:": "Connecté à:",
|
||||
"Disconnect": "Déconnecter",
|
||||
@@ -34,7 +33,7 @@
|
||||
"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",
|
||||
"<b>The controller is now sampling data!</b>": "<b>La manette est maintenant en train d'échantillonner les données !</b>",
|
||||
"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 à",
|
||||
@@ -66,14 +65,12 @@
|
||||
"Sony DualSense Edge": "Sony DualSense Edge",
|
||||
"Connected invalid device": "Appareil non valide connecté",
|
||||
"Error": "Erreur",
|
||||
"My handle on discord is: the_al": "Mon ID sur Discord est: the_al",
|
||||
"Initializing...": "Initialisation...",
|
||||
"Storing calibration...": "Sauvegarde du calibrage...",
|
||||
"Sampling...": "Échantillonnage...",
|
||||
"Calibration in progress": "Calibrage en cours",
|
||||
"Start": "Démarrer",
|
||||
"Continue": "Continuer",
|
||||
"You can check the calibration with the": "Vous pouvez vérifier le calibrage avec le:",
|
||||
"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:": "Juste quelques informations à savoir avant que vous ne puissiez commencer:",
|
||||
@@ -123,8 +120,6 @@
|
||||
", to help more people like you!": ", pour aider plus de gens comme vous !",
|
||||
"This website uses analytics to improve the service.": "Ce site utilise des analyses pour améliorer le service.",
|
||||
"Board Model": "Modèle de carte",
|
||||
"This feature is experimental.": "Cette fonctionnalité est expérimentale.",
|
||||
"Please let me know if the board model of your controller is not detected correctly.": "Veuillez me faire savoir si le modèle de la carte de votre manette n'est pas détecté correctement.",
|
||||
"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",
|
||||
@@ -141,18 +136,24 @@
|
||||
"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 reset a permanent calibration to previous calibration?": "",
|
||||
"Can you overwrite a permanent calibration?": "",
|
||||
"Cancel": "",
|
||||
"Cannot copy text to the clipboard:": "",
|
||||
"Cannot lock": "",
|
||||
"Cannot read module barcodes": "",
|
||||
"Cannot store data into": "",
|
||||
"Cannot unlock": "",
|
||||
"Center": "",
|
||||
@@ -163,16 +164,22 @@
|
||||
"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": "",
|
||||
@@ -189,6 +196,7 @@
|
||||
"Failed to set vibration": "",
|
||||
"Feel for vibration in the controller.": "",
|
||||
"Finetune stick calibration": "",
|
||||
"Firefox is supported with the WebHID extension installed.": "",
|
||||
"For more info or help, feel free to reach out on Discord.": "",
|
||||
"Fortnite": "",
|
||||
"Galactic Purple": "",
|
||||
@@ -203,7 +211,9 @@
|
||||
"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": "",
|
||||
@@ -218,6 +228,7 @@
|
||||
"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": "",
|
||||
@@ -231,6 +242,7 @@
|
||||
"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": "",
|
||||
@@ -247,6 +259,8 @@
|
||||
"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.": "",
|
||||
@@ -271,9 +285,11 @@
|
||||
"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 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 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.": "",
|
||||
"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.": "",
|
||||
@@ -283,12 +299,20 @@
|
||||
"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.": "",
|
||||
"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.": "",
|
||||
@@ -299,6 +323,7 @@
|
||||
"Yes. Simply do another permanent calibration.": "",
|
||||
"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": "",
|
||||
@@ -306,6 +331,7 @@
|
||||
"left module": "",
|
||||
"passed": "",
|
||||
"right module": "",
|
||||
"serial number": "",
|
||||
"skipped": "",
|
||||
"tests completed": "",
|
||||
"to increase the non-circularity.": "",
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
{
|
||||
".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": "Csatlakozás",
|
||||
"Connected to:": "Csatlakoztatva:",
|
||||
"Disconnect": "Lecsatlakozás",
|
||||
@@ -35,7 +34,7 @@
|
||||
"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>",
|
||||
"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",
|
||||
@@ -67,14 +66,12 @@
|
||||
"Sony DualSense Edge": "Sony DualSense Edge",
|
||||
"Connected invalid device": "Érvénytelen eszköz csatlakoztatva",
|
||||
"Error": "Hiba",
|
||||
"My handle on discord is: the_al": "Fogjunk kezet a Discordon: the_al",
|
||||
"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",
|
||||
"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:",
|
||||
@@ -124,11 +121,9 @@
|
||||
", 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 feature is experimental.": "Ez egy kisérleti funkció",
|
||||
"Please let me know if the board model of your controller is not detected correctly.": "Kérlek értesítsd a fejlesztőt, ha az alaplap verziója nem egyezik meg a felimert verzióval!",
|
||||
"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ó",
|
||||
"Joystick Info": "Analógkar információ",
|
||||
"Check circularity": "Körkörösség ellenőrzése",
|
||||
"Can I reset a permanent calibration to previous calibration?": "Visszaállíthatok egy végleges kalibrációt az előző kalibrációra?",
|
||||
"No.": "Nem",
|
||||
@@ -150,7 +145,7 @@
|
||||
"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 infomrációk",
|
||||
"Debug Info": "Hibakeresési információk",
|
||||
"Software": "Szoftver",
|
||||
"Hardware": "Hardver",
|
||||
"FW Build Date": "FW kiadásának dátuma",
|
||||
@@ -168,10 +163,10 @@
|
||||
"PCBA ID": "PCBA azonosító",
|
||||
"Battery Barcode": "Akkumulátor vonalkód",
|
||||
"VCM Left Barcode": "Bal VCM vonalkód",
|
||||
"VCM Right Barcode": "Jobb VCM vonalód",
|
||||
"VCM Right Barcode": "Jobb VCM vonalkód",
|
||||
"HW Model": "HW modell",
|
||||
"Touchpad ID": "Tapipad azonosító",
|
||||
"Bluetooth Address": "Bluetooth címzés",
|
||||
"Bluetooth Address": "Bluetooth cím",
|
||||
"Show all": "Mindet megjelenít",
|
||||
"Finetune stick calibration": "Karok finomkalibrálása",
|
||||
"(beta)": "(béta)",
|
||||
@@ -294,13 +289,8 @@
|
||||
"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 activate the controller's vibration motors, first the heavy one, and then the light one.": "Ez a teszt aktiválja a kontroller rezgőmotorjait, először az erőset, majd a gyengét.",
|
||||
"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.",
|
||||
"This test will play a tone through the controller's built-in speaker.": "Ez a teszt egy hangot játszik le a kontroller beépített hangszóróján keresztül.",
|
||||
"This test will monitor the controller's microphone input levels.": "Ez a teszt figyeli a kontroller mikrofonjának bemeneti szintjeit.",
|
||||
"Blow gently into the controller's microphone. You should see the audio level indicator respond.": "Fújj óvatosan a kontroller mikrofonjába. A hangerőszint-jelzőnek reagálnia kell.",
|
||||
"Click \"Test Speaker\" to listen for the tone through the headphones": "Kattints a \"Hangszóró tesztelése\" gombra, hogy a fejhallgatón keresztül halld a hangot.",
|
||||
"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",
|
||||
@@ -312,7 +302,38 @@
|
||||
"skipped": "kihagyva",
|
||||
"tests completed": "befejezett teszt",
|
||||
"to increase the non-circularity.": "a nem-körkörösség növeléséhez.",
|
||||
"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.": "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",
|
||||
"": ""
|
||||
}
|
||||
@@ -1,7 +1,6 @@
|
||||
{
|
||||
".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": "Connetti",
|
||||
"Connected to:": "Connesso a:",
|
||||
"Disconnect": "Disconnetti",
|
||||
@@ -35,7 +34,7 @@
|
||||
"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>",
|
||||
"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",
|
||||
@@ -67,14 +66,12 @@
|
||||
"Sony DualSense Edge": "Sony DualSense Edge",
|
||||
"Connected invalid device": "Connesso dispositivo non valido",
|
||||
"Error": "Errore",
|
||||
"My handle on discord is: the_al": "Il mio handle su discord è: the_al",
|
||||
"Initializing...": "Inizializzo...",
|
||||
"Storing calibration...": "Salvo la calibrazione...",
|
||||
"Sampling...": "Campiono...",
|
||||
"Calibration in progress": "Calibrazione in corso",
|
||||
"Start": "Avvia",
|
||||
"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:",
|
||||
@@ -124,8 +121,6 @@
|
||||
", 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 feature is experimental.": "Questa funzionalità è sperimentale.",
|
||||
"Please let me know if the board model of your controller is not detected correctly.": "Scrivimi se il modello della scheda del tuo controller non viene riconosciuto correttamente.",
|
||||
"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",
|
||||
@@ -309,5 +304,36 @@
|
||||
"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",
|
||||
"": ""
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
{
|
||||
".authorMsg": "- イタリア語への翻訳: <a href='https://chat.openai.com'>ChatGPT</a>",
|
||||
"DualShock Calibration GUI": "DualShock Calibration GUI",
|
||||
"Unsupported browser. Please use a web browser with WebHID support (e.g. Chrome).": "サポートされていないブラウザです。WebHIDサポート付きのウェブブラウザを使用してください(例:Chrome)。 ",
|
||||
"Connect": "接続",
|
||||
"Connected to:": "接続先:",
|
||||
"Disconnect": "切断",
|
||||
@@ -34,7 +33,7 @@
|
||||
"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>",
|
||||
"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": "役立つと思われる場合、または私の取り組みをサポートしたい場合は、お気軽に",
|
||||
@@ -66,14 +65,12 @@
|
||||
"Sony DualSense Edge": "Sony DualSense Edge",
|
||||
"Connected invalid device": "接続された無効なデバイス",
|
||||
"Error": "エラー",
|
||||
"My handle on discord is: the_al": "Discordでの私のハンドルは:the_al",
|
||||
"Initializing...": "初期化中...",
|
||||
"Storing calibration...": "キャリブレーションの保存中...",
|
||||
"Sampling...": "サンプリング...",
|
||||
"Calibration in progress": "キャリブレーション進行中",
|
||||
"Start": "開始",
|
||||
"Continue": "続行",
|
||||
"You can check the calibration with the": "キャリブレーションは次で確認できます",
|
||||
"Have a nice day :)": "良い1日を! :)",
|
||||
"Welcome to the Calibration GUI": "Calibration GUIへようこそ",
|
||||
"Just few things to know before you can start:": "始める前に知っておくべきこと:",
|
||||
@@ -123,8 +120,6 @@
|
||||
", to help more people like you!": "、あなたのような多くの人々を助けるために!",
|
||||
"This website uses analytics to improve the service.": "このウェブサイトはサービスを向上させるためにアナリティクスを使用しています。",
|
||||
"Board Model": "基板モデル",
|
||||
"This feature is experimental.": "この機能は実験的です。",
|
||||
"Please let me know if the board model of your controller is not detected correctly.": "コントローラーの基板モデルが正しく検出されない場合はお知らせください。",
|
||||
"This DualSense controller has outdated firmware.": "このDualSenseコントローラーのファームウェアは古くなっています。",
|
||||
"Please update the firmware and try again.": "ファームウェアを更新してから再試行してください。",
|
||||
"Joystick Info": "ジョイスティック情報",
|
||||
@@ -145,17 +140,23 @@
|
||||
"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 reset a permanent calibration to previous calibration?": "",
|
||||
"Can you overwrite a permanent calibration?": "",
|
||||
"Cannot copy text to the clipboard:": "",
|
||||
"Cannot lock": "",
|
||||
"Cannot read module barcodes": "",
|
||||
"Cannot store data into": "",
|
||||
"Cannot unlock": "",
|
||||
"Center": "",
|
||||
@@ -166,16 +167,22 @@
|
||||
"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": "",
|
||||
@@ -191,6 +198,7 @@
|
||||
"Failed to set speaker tone": "",
|
||||
"Failed to set vibration": "",
|
||||
"Feel for vibration in the controller.": "",
|
||||
"Firefox is supported with the WebHID extension installed.": "",
|
||||
"For more info or help, feel free to reach out on Discord.": "",
|
||||
"Fortnite": "",
|
||||
"Galactic Purple": "",
|
||||
@@ -205,7 +213,9 @@
|
||||
"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": "",
|
||||
@@ -219,6 +229,7 @@
|
||||
"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": "",
|
||||
@@ -232,6 +243,7 @@
|
||||
"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": "",
|
||||
@@ -248,6 +260,8 @@
|
||||
"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.": "",
|
||||
"Run through these tests to verify your controller's functionality.": "",
|
||||
@@ -271,9 +285,11 @@
|
||||
"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 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 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.": "",
|
||||
"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.": "",
|
||||
@@ -283,12 +299,20 @@
|
||||
"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.": "",
|
||||
"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.": "",
|
||||
@@ -299,6 +323,7 @@
|
||||
"Yes. Simply do another permanent calibration.": "",
|
||||
"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": "",
|
||||
@@ -306,6 +331,7 @@
|
||||
"left module": "",
|
||||
"passed": "",
|
||||
"right module": "",
|
||||
"serial number": "",
|
||||
"skipped": "",
|
||||
"tests completed": "",
|
||||
"to increase the non-circularity.": "",
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
{
|
||||
".authorMsg": "한국어 번역 : 제타",
|
||||
"DualShock Calibration GUI": "DualShock 보정 GUI",
|
||||
"Unsupported browser. Please use a web browser with WebHID support (e.g. Chrome).": "지원하지 않는 브라우저입니다. WebHID를 지원하는 웹 브라우저(예: Chrome)를 사용해주세요.",
|
||||
"Connect": "연결",
|
||||
"Connected to:": "연결된 기기:",
|
||||
"Disconnect": "연결 끊기",
|
||||
@@ -35,7 +34,7 @@
|
||||
"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>",
|
||||
"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": "이 프로그램이 도움이 되었고, 개발자를 응원하고 싶으시다면",
|
||||
@@ -67,14 +66,12 @@
|
||||
"Sony DualSense Edge": "Sony DualSense Edge",
|
||||
"Connected invalid device": "잘못된 기기가 연결되었습니다",
|
||||
"Error": "오류",
|
||||
"My handle on discord is: the_al": "제 Discord ID는 the_al 입니다.",
|
||||
"Initializing...": "초기화 중...",
|
||||
"Storing calibration...": "보정 값 저장 중...",
|
||||
"Sampling...": "샘플링 중...",
|
||||
"Calibration in progress": "보정 진행 중",
|
||||
"Start": "시작",
|
||||
"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:": "시작하기 전에 몇 가지 알아둘 사항이 있습니다:",
|
||||
@@ -123,8 +120,6 @@
|
||||
", to help more people like you!": ", 당신과 같은 더 많은 사람들을 돕기 위해!",
|
||||
"This website uses analytics to improve the service.": "이 웹사이트는 서비스 개선을 위해 분석 도구를 사용합니다.",
|
||||
"Board Model": "보드 모델",
|
||||
"This feature is experimental.": "이 기능은 실험적인 기능입니다.",
|
||||
"Please let me know if the board model of your controller is not detected correctly.": "컨트롤러의 보드 모델이 올바르게 감지되지 않으면 알려주세요.",
|
||||
"This DualSense controller has outdated firmware.": "이 DualSense 컨트롤러의 펌웨어가 오래되었습니다.",
|
||||
"Please update the firmware and try again.": "펌웨어를 업데이트한 후 다시 시도해주세요.",
|
||||
"Joystick Info": "조이스틱 정보",
|
||||
@@ -236,13 +231,25 @@
|
||||
"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": "",
|
||||
"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": "",
|
||||
@@ -250,11 +257,14 @@
|
||||
"Failed to set speaker tone": "",
|
||||
"Failed to set vibration": "",
|
||||
"Feel for vibration in the controller.": "",
|
||||
"Firefox is supported with the WebHID extension installed.": "",
|
||||
"Haptic Vibration": "",
|
||||
"Headphone Jack": "",
|
||||
"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.": "",
|
||||
@@ -262,11 +272,13 @@
|
||||
"Microphone": "",
|
||||
"Microphone Level:": "",
|
||||
"No controller connected": "",
|
||||
"No saved calibrations found.": "",
|
||||
"No tests completed yet.": "",
|
||||
"Not tested": "",
|
||||
"Pass": "",
|
||||
"Passed": "",
|
||||
"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": "",
|
||||
@@ -280,6 +292,8 @@
|
||||
"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.": "",
|
||||
"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.": "",
|
||||
@@ -289,23 +303,35 @@
|
||||
"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 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 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.": "",
|
||||
"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.": "",
|
||||
"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.": "",
|
||||
"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.": "",
|
||||
"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.": "",
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
{
|
||||
".authorMsg": "Vertaald door <a href='https://github.com/Notedop'>Notedop</a>",
|
||||
"DualShock Calibration GUI": "DualShock Kalibratie GUI",
|
||||
"Unsupported browser. Please use a web browser with WebHID support (e.g. Chrome).": "Niet ondersteunde browser. Gebruik een webbrowser met WebHID-ondersteuning (bijv. Chrome).",
|
||||
"Connect": "Verbinden",
|
||||
"Connected to:": "Verbonden met:",
|
||||
"Disconnect": "Verbreken",
|
||||
@@ -34,7 +33,7 @@
|
||||
"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",
|
||||
"<b>The controller is now sampling data!</b>": "<b>De controller verzamelt nu gegevens!</b>",
|
||||
"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",
|
||||
@@ -66,14 +65,12 @@
|
||||
"Sony DualSense Edge": "Sony DualSense Edge",
|
||||
"Connected invalid device": "Ongeldig apparaat verbonden",
|
||||
"Error": "Error",
|
||||
"My handle on discord is: the_al": "Mijn handle voor Discord is: the_al",
|
||||
"Initializing...": "Initialiseren...",
|
||||
"Storing calibration...": "Kalibratie opslaan...",
|
||||
"Sampling...": "Data verzamelen...",
|
||||
"Calibration in progress": "Kalibratie wordt uitgevoerd",
|
||||
"Start": "Start",
|
||||
"Continue": "Continue",
|
||||
"You can check the calibration with the": "U kunt de kalibratie controleren met",
|
||||
"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:",
|
||||
@@ -123,8 +120,6 @@
|
||||
", 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 feature is experimental.": "Deze functie is experimenteel.",
|
||||
"Please let me know if the board model of your controller is not detected correctly.": "Laat het me weten als het model van uw controller niet correct wordt gedetecteerd.",
|
||||
"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",
|
||||
@@ -141,18 +136,24 @@
|
||||
"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 reset a permanent calibration to previous calibration?": "",
|
||||
"Can you overwrite a permanent calibration?": "",
|
||||
"Cancel": "",
|
||||
"Cannot copy text to the clipboard:": "",
|
||||
"Cannot lock": "",
|
||||
"Cannot read module barcodes": "",
|
||||
"Cannot store data into": "",
|
||||
"Cannot unlock": "",
|
||||
"Center": "",
|
||||
@@ -163,16 +164,22 @@
|
||||
"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": "",
|
||||
@@ -189,6 +196,7 @@
|
||||
"Failed to set vibration": "",
|
||||
"Feel for vibration in the controller.": "",
|
||||
"Finetune stick calibration": "",
|
||||
"Firefox is supported with the WebHID extension installed.": "",
|
||||
"For more info or help, feel free to reach out on Discord.": "",
|
||||
"Fortnite": "",
|
||||
"Galactic Purple": "",
|
||||
@@ -203,7 +211,9 @@
|
||||
"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": "",
|
||||
@@ -218,6 +228,7 @@
|
||||
"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": "",
|
||||
@@ -231,6 +242,7 @@
|
||||
"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": "",
|
||||
@@ -247,6 +259,8 @@
|
||||
"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.": "",
|
||||
@@ -271,9 +285,11 @@
|
||||
"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 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 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.": "",
|
||||
"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.": "",
|
||||
@@ -283,12 +299,20 @@
|
||||
"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.": "",
|
||||
"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.": "",
|
||||
@@ -299,6 +323,7 @@
|
||||
"Yes. Simply do another permanent calibration.": "",
|
||||
"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": "",
|
||||
@@ -306,6 +331,7 @@
|
||||
"left module": "",
|
||||
"passed": "",
|
||||
"right module": "",
|
||||
"serial number": "",
|
||||
"skipped": "",
|
||||
"tests completed": "",
|
||||
"to increase the non-circularity.": "",
|
||||
|
||||
196
lang/pl_pl.json
196
lang/pl_pl.json
@@ -1,7 +1,6 @@
|
||||
{
|
||||
".authorMsg": "Tłumaczenie na język polski wykonał <a href='https://github.com/Marekk2k'>Marekk</a> update zrobiony przez <a href='https://github.com/GoomisPL'>GoomisPL</a>",
|
||||
".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",
|
||||
"Unsupported browser. Please use a web browser with WebHID support (e.g. Chrome).": "Nie wspierana przeglądarka! Proszę użyć przeglądarki internetowej wpierającą WebHID (np. Chrome).",
|
||||
"Connect": "Połącz",
|
||||
"Connected to:": "Połączono z:",
|
||||
"Disconnect": "Rozłącz kontroler",
|
||||
@@ -35,7 +34,7 @@
|
||||
"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 drążków",
|
||||
"<b>The controller is now sampling data!</b>": "<b>Kontroler zbiera teraz dane!</b>",
|
||||
"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ę",
|
||||
@@ -67,14 +66,12 @@
|
||||
"Sony DualSense Edge": "Sony DualSense Edge",
|
||||
"Connected invalid device": "Podłączono nieznane urządzenie",
|
||||
"Error": "Błąd",
|
||||
"My handle on discord is: the_al": "Mój Discord to: the_al",
|
||||
"Initializing...": "Inicjowanie...",
|
||||
"Storing calibration...": "Zapisywanie kalibracji...",
|
||||
"Sampling...": "Próbowanie...",
|
||||
"Calibration in progress": "Kalibracja w toku",
|
||||
"Start": "Start",
|
||||
"Continue": "Kontynuuj",
|
||||
"You can check the calibration with the": "Możesz sprawdzić kalibrację za pomocą",
|
||||
"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",
|
||||
@@ -124,8 +121,6 @@
|
||||
", 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 feature is experimental.": "Ta funkcja jest eksperymentalna.",
|
||||
"Please let me know if the board model of your controller is not detected correctly.": "Jeżeli model płytki został wykryty błędnie prosimy o kontakt",
|
||||
"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",
|
||||
@@ -226,88 +221,117 @@
|
||||
"Info": "Informacje",
|
||||
"Normal": "Normalne",
|
||||
"Center (L1)": "Centrowanie (L1)",
|
||||
"Circularity (R1)": "Kolistość (R1)",
|
||||
"Circularity (R1)": "Okrężność (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 kierynku którym chcesz ustawić pozycję drążka.",
|
||||
"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 %.": "",
|
||||
"A reboot is needed to continue using this DualSense Edge. Please disconnect and reconnect your controller.": "",
|
||||
"Adaptive Trigger": "",
|
||||
"Adaptive triggers are only supported on DualSense controllers": "",
|
||||
"Add test": "",
|
||||
"Be gentle to avoid damage.": "",
|
||||
"Buttons": "",
|
||||
"Cannot copy text to the clipboard:": "",
|
||||
"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.": "",
|
||||
"Microphone": "",
|
||||
"Microphone Level:": "",
|
||||
"No controller connected": "",
|
||||
"No tests completed yet.": "",
|
||||
"Not tested": "",
|
||||
"Pass": "",
|
||||
"Passed": "",
|
||||
"Please connect a DualShock 4, a DualSense, DualSense Edge or VR2 controller to your computer and press Connect.": "",
|
||||
"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": "",
|
||||
"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.": "",
|
||||
"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 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 item has been copied to the clipboard.": "",
|
||||
"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.": "",
|
||||
"USB Connector": "",
|
||||
"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.": "",
|
||||
"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.": "",
|
||||
"<strong>Average circularity error:</strong> smaller is not always better! Aim for 7-9 %.": "<strong>Błąd średniej okrężności:</strong>mniej nie znaczy lepiej! Celuj w granicach 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 twój kontroler",
|
||||
"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": "Okrężność",
|
||||
"Controller does not support adaptive trigger control": "Kontroler nie wspiera kontroli adaptacyjnych triggerów",
|
||||
"Don't show again": "Nie pokazuj ponownie",
|
||||
"Fail": "Niepowodzenie",
|
||||
"Failed": "Nie powiodło się",
|
||||
"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 nie-okrężność",
|
||||
"Instructions": "Instrukcje",
|
||||
"Keep rotating the sticks even if you see no progress!": "Kontynuuj obracanie drążków nawet jeśli nie widzisz postępów!",
|
||||
"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": "Przejdź",
|
||||
"Passed": "Zdano",
|
||||
"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 pominać.",
|
||||
"Press [square] to begin or [circle] to close": "Naciśnij [square] by zacząć lub [circle] by zamknąć",
|
||||
"Press [triangle] to go back.": "Naciśnij [triangle] by powrócić",
|
||||
"Press each button until they turn green.": "Naciskaj",
|
||||
"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.": "Kontrolery Sony po kalibracji w procesie produkcji posiadają błąd okrężności na poziomie 10%, i tego oczekują gry. Zbyt dobra okrężność może spowodować, że w niektóych grach ruchy i celowanie będą bardziej sztywne, i nie responsywne",
|
||||
"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 świetlnej liście, 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.": "by zwiększyć nie-okrężność",
|
||||
"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ń z gry dąż do uzyskania błędu okrężności na poziomie około 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ążka nie została zapisana.",
|
||||
"Last connected": "Ostatnie połączono z",
|
||||
"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",
|
||||
"": ""
|
||||
}
|
||||
@@ -1,7 +1,6 @@
|
||||
{
|
||||
".authorMsg": "- Tradução para o Português do Brasil realizada por Padula, Diego A, Simão M, ricardo_57 :)",
|
||||
"DualShock Calibration GUI": "GUI de Calibração DualShock",
|
||||
"Unsupported browser. Please use a web browser with WebHID support (e.g. Chrome).": "Navegador não suportado. Por favor, use um navegador da web com suporte ao WebHID (por exemplo, Chrome).",
|
||||
"Connect": "Conectar",
|
||||
"Connected to:": "Conectado a:",
|
||||
"Disconnect": "Desconectar",
|
||||
@@ -34,7 +33,7 @@
|
||||
"Recentering the controller sticks.": "Recentrando 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 do intervalo",
|
||||
"<b>The controller is now sampling data!</b>": "<b>O controlador está agora a amostrar dados!</b>",
|
||||
"The controller is now sampling data!": "O controlador está agora a amostrar 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 você achar útil e quiser apoiar meus esforços, sinta-se à vontade para",
|
||||
@@ -66,14 +65,12 @@
|
||||
"Sony DualSense Edge": "Sony DualSense Edge",
|
||||
"Connected invalid device": "Dispositivo conectado inválido",
|
||||
"Error": "Erro",
|
||||
"My handle on discord is: the_al": "Meu nome de usuário no Discord é: the_al",
|
||||
"Initializing...": "Inicializando...",
|
||||
"Storing calibration...": "Salvando calibração...",
|
||||
"Sampling...": "Amostragem...",
|
||||
"Calibration in progress": "Calibração em progresso",
|
||||
"Start": "Inicio",
|
||||
"Continue": "Continuar",
|
||||
"You can check the calibration with the": "Podes conferir a calibração com",
|
||||
"Have a nice day :)": "Tenha um bom dia :)",
|
||||
"Welcome to the Calibration GUI": "Bem vindo a interface de calibração",
|
||||
"Just few things to know before you can start:": "Somente algumas coisas para saber antes de você começar:",
|
||||
@@ -123,8 +120,6 @@
|
||||
", 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 feature is experimental.": "Esta funcionalidade é experimental.",
|
||||
"Please let me know if the board model of your controller is not detected correctly.": "Por favor, avise-me se o modelo da placa do seu controle não for detectado corretamente.",
|
||||
"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 do Joystick",
|
||||
@@ -158,16 +153,22 @@
|
||||
"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.": "",
|
||||
"Cancel": "",
|
||||
"Cannot copy text to the clipboard:": "",
|
||||
"Cannot lock": "",
|
||||
"Cannot read module barcodes": "",
|
||||
"Cannot store data into": "",
|
||||
"Cannot unlock": "",
|
||||
"Center": "",
|
||||
@@ -177,15 +178,21 @@
|
||||
"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": "",
|
||||
@@ -201,6 +208,7 @@
|
||||
"Failed to set vibration": "",
|
||||
"Feel for vibration in the controller.": "",
|
||||
"Finetune stick calibration": "",
|
||||
"Firefox is supported with the WebHID extension installed.": "",
|
||||
"For more info or help, feel free to reach out on Discord.": "",
|
||||
"Fortnite": "",
|
||||
"Galactic Purple": "",
|
||||
@@ -214,7 +222,9 @@
|
||||
"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": "",
|
||||
@@ -228,6 +238,7 @@
|
||||
"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 tested": "",
|
||||
@@ -238,6 +249,7 @@
|
||||
"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": "",
|
||||
@@ -253,6 +265,8 @@
|
||||
"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.": "",
|
||||
@@ -275,9 +289,11 @@
|
||||
"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 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 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.": "",
|
||||
"This is only for advanced users. If you're not sure what you're doing, please do not attempt it.": "",
|
||||
"This test checks all controller buttons by requiring you to press each button up to three times.": "",
|
||||
@@ -285,12 +301,20 @@
|
||||
"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.": "",
|
||||
"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.": "",
|
||||
@@ -299,6 +323,7 @@
|
||||
"White": "",
|
||||
"Wiggle the USB cable to see if the controller disconnects.": "",
|
||||
"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": "",
|
||||
@@ -306,6 +331,7 @@
|
||||
"left module": "",
|
||||
"passed": "",
|
||||
"right module": "",
|
||||
"serial number": "",
|
||||
"skipped": "",
|
||||
"tests completed": "",
|
||||
"to increase the non-circularity.": "",
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
{
|
||||
".authorMsg": "- Tradução para Português de Portugal realizada por @dualsense_no_drift :)",
|
||||
"DualShock Calibration GUI": "GUI Calibração de DualShock",
|
||||
"Unsupported browser. Please use a web browser with WebHID support (e.g. Chrome).": "Navegador não suportado. Por favor, use um navegador de web com suporte ao WebHID (por exemplo, Chrome).",
|
||||
"Connect": "Conectar",
|
||||
"Connected to:": "Conectado a:",
|
||||
"Disconnect": "Desconectar",
|
||||
@@ -34,7 +33,7 @@
|
||||
"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",
|
||||
"<b>The controller is now sampling data!</b>": "<b>O controlador está agora a recolher dados!</b>",
|
||||
"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",
|
||||
@@ -66,14 +65,12 @@
|
||||
"Sony DualSense Edge": "Sony DualSense Edge",
|
||||
"Connected invalid device": "Dispositivo inválido ligado",
|
||||
"Error": "Erro",
|
||||
"My handle on discord is: the_al": "Meu nome de utilizador no Discord é: the_al",
|
||||
"Initializing...": "Iniciando...",
|
||||
"Storing calibration...": "Armazenando a calibração...",
|
||||
"Sampling...": "Amostragem...",
|
||||
"Calibration in progress": "Calibração em progresso",
|
||||
"Start": "Inicio",
|
||||
"Continue": "Continuar",
|
||||
"You can check the calibration with the": "Pode verificar a calibração com o",
|
||||
"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:",
|
||||
@@ -123,8 +120,6 @@
|
||||
", 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 feature is experimental.": "Esta funcionalidade é experimental.",
|
||||
"Please let me know if the board model of your controller is not detected correctly.": "Por favor, avise-me se o modelo da placa do seu controlador não for detectado corretamente.",
|
||||
"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",
|
||||
@@ -287,27 +282,58 @@
|
||||
"tests completed": "testes concluídos",
|
||||
"to increase the non-circularity.": "para aumentar a não circularidade.",
|
||||
"30th Anniversary": "",
|
||||
"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.": "",
|
||||
"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 copy text to the clipboard:": "",
|
||||
"Cannot read module barcodes": "",
|
||||
"Chroma Indigo": "",
|
||||
"Chroma Pearl": "",
|
||||
"Chroma Teal": "",
|
||||
"Clear All": "",
|
||||
"Cobalt Blue": "",
|
||||
"Cosmic Red": "",
|
||||
"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.": "",
|
||||
"Fortnite": "",
|
||||
"Galactic Purple": "",
|
||||
"God of War Ragnarok": "",
|
||||
"Grey Camouflage": "",
|
||||
"It appears the latest joystick calibration has not been saved.": "",
|
||||
"Last connected": "",
|
||||
"Midnight Black": "",
|
||||
"No saved calibrations found.": "",
|
||||
"Nova Pink": "",
|
||||
"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": "",
|
||||
"Spider-Man 2": "",
|
||||
"Starlight Blue": "",
|
||||
"Sterling Silver": "",
|
||||
"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 item has been copied to the clipboard.": "",
|
||||
"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": "",
|
||||
"Volcanic Red": "",
|
||||
"White": "",
|
||||
"You should save your changes, or reboot the controller to revert back to the previous state.": "",
|
||||
"serial number": "",
|
||||
"": ""
|
||||
}
|
||||
@@ -1,7 +1,6 @@
|
||||
{
|
||||
".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",
|
||||
"Unsupported browser. Please use a web browser with WebHID support (e.g. Chrome).": "Nepodržani pretraživač. Molimo koristite veb pretraživač sa WebHID podrškom (npr. Chrome).",
|
||||
"Connect": "Poveži",
|
||||
"Connected to:": "Povezano sa:",
|
||||
"Disconnect": "Prekini vezu",
|
||||
@@ -35,7 +34,7 @@
|
||||
"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",
|
||||
"<b>The controller is now sampling data!</b>": "<b>Kontroler sada prikuplja podatke!</b>",
|
||||
"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",
|
||||
@@ -67,14 +66,12 @@
|
||||
"Sony DualSense Edge": "Sony DualSense Edge",
|
||||
"Connected invalid device": "Povezan je nevažeći uređaj",
|
||||
"Error": "Greška",
|
||||
"My handle on discord is: the_al": "Moj Discord ID je: the_al",
|
||||
"Initializing...": "Inicijalizacija...",
|
||||
"Storing calibration...": "Čuvanje kalibracije...",
|
||||
"Sampling...": "Uzorak...",
|
||||
"Calibration in progress": "Kalibracija u toku",
|
||||
"Start": "Počni",
|
||||
"Continue": "Nastavi",
|
||||
"You can check the calibration with the": "Možete proveriti kalibraciju sa:",
|
||||
"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:",
|
||||
@@ -124,8 +121,6 @@
|
||||
", 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 feature is experimental.": "Ova funkcionalnost je eksperimentalna.",
|
||||
"Please let me know if the board model of your controller is not detected correctly.": "Molimo vas da mi javite ako model ploče vašeg kontrolera nije tačno detektovan.",
|
||||
"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",
|
||||
@@ -187,13 +182,19 @@
|
||||
"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.": "",
|
||||
"Cannot copy text to the clipboard:": "",
|
||||
"Cannot lock": "",
|
||||
"Cannot read module barcodes": "",
|
||||
"Cannot store data into": "",
|
||||
"Cannot unlock": "",
|
||||
"Center": "",
|
||||
@@ -203,12 +204,18 @@
|
||||
"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": "",
|
||||
@@ -217,6 +224,7 @@
|
||||
"Failed to set speaker tone": "",
|
||||
"Failed to set vibration": "",
|
||||
"Feel for vibration in the controller.": "",
|
||||
"Firefox is supported with the WebHID extension installed.": "",
|
||||
"For more info or help, feel free to reach out on Discord.": "",
|
||||
"Fortnite": "",
|
||||
"Galactic Purple": "",
|
||||
@@ -228,7 +236,9 @@
|
||||
"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": "",
|
||||
@@ -240,6 +250,7 @@
|
||||
"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 tested": "",
|
||||
@@ -249,6 +260,7 @@
|
||||
"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": "",
|
||||
@@ -264,6 +276,8 @@
|
||||
"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.": "",
|
||||
@@ -280,9 +294,11 @@
|
||||
"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 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 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.": "",
|
||||
"This is only for advanced users. If you're not sure what you're doing, please do not attempt it.": "",
|
||||
"This test checks all controller buttons by requiring you to press each button up to three times.": "",
|
||||
@@ -290,8 +306,16 @@
|
||||
"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.": "",
|
||||
"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.": "",
|
||||
@@ -299,6 +323,7 @@
|
||||
"White": "",
|
||||
"Wiggle the USB cable to see if the controller disconnects.": "",
|
||||
"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": "",
|
||||
@@ -306,6 +331,7 @@
|
||||
"left module": "",
|
||||
"passed": "",
|
||||
"right module": "",
|
||||
"serial number": "",
|
||||
"skipped": "",
|
||||
"tests completed": "",
|
||||
"to increase the non-circularity.": "",
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
{
|
||||
".authorMsg": "- Перевод на Русский язык выполнен: <a href='https://www.youtube.com/channel/UC8pzDCIt_CUj8sa7cYgPzHQ'>Tamir-Teknik. Дополнил Amnesia44</a>",
|
||||
"DualShock Calibration GUI": "Интерфейс калибровки DualShock",
|
||||
"Unsupported browser. Please use a web browser with WebHID support (e.g. Chrome).": "Неподдерживаемый браузер. Используйте браузер с поддержкой WebHID (например, Chrome).",
|
||||
"Connect": "Подключить",
|
||||
"Connected to:": "Подключено к:",
|
||||
"Disconnect": "Отключить",
|
||||
@@ -34,7 +33,7 @@
|
||||
"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>",
|
||||
"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": "Если вы находите это полезным и хотите поддержать мои усилия, не стесняйтесь",
|
||||
@@ -66,14 +65,12 @@
|
||||
"Sony DualSense Edge": "Sony DualSense Edge",
|
||||
"Connected invalid device": "Подключено недопустимое устройство",
|
||||
"Error": "Ошибка",
|
||||
"My handle on discord is: the_al": "Мой ник на discord: the_al",
|
||||
"Initializing...": "Инициализация...",
|
||||
"Storing calibration...": "Сохранение калибровки...",
|
||||
"Sampling...": "Выборка...",
|
||||
"Calibration in progress": "Калибровка в процессе",
|
||||
"Start": "Старт",
|
||||
"Continue": "Продолжить",
|
||||
"You can check the calibration with the": "Вы можете проверить калибровку с помощью",
|
||||
"Have a nice day :)": "Хорошего дня! :)",
|
||||
"Welcome to the Calibration GUI": "Добро пожаловать в Calibration GUI",
|
||||
"Just few things to know before you can start:": "Несколько вещей, о которых нужно знать, прежде чем начать:",
|
||||
@@ -123,8 +120,6 @@
|
||||
", to help more people like you!": ", чтобы помочь большему числу людей, подобных вам!",
|
||||
"This website uses analytics to improve the service.": "Этот сайт использует аналитику для улучшения сервиса.",
|
||||
"Board Model": "Модель платы",
|
||||
"This feature is experimental.": "Эта функция экспериментальная.",
|
||||
"Please let me know if the board model of your controller is not detected correctly.": "Пожалуйста, дайте знать, если модель платы вашего контроллера определена неправильно.",
|
||||
"This DualSense controller has outdated firmware.": "Прошивка этого контроллера DualSense устарела.",
|
||||
"Please update the firmware and try again.": "Пожалуйста, обновите прошивку и попробуйте снова.",
|
||||
"Joystick Info": "Информация о джойстике",
|
||||
@@ -208,11 +203,17 @@
|
||||
"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": "",
|
||||
"Cannot copy text to the clipboard:": "",
|
||||
"Cannot read module barcodes": "",
|
||||
"Center": "",
|
||||
"Center (L1)": "",
|
||||
"Chroma Indigo": "",
|
||||
@@ -220,11 +221,17 @@
|
||||
"Chroma Teal": "",
|
||||
"Circularity": "",
|
||||
"Circularity (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": "",
|
||||
@@ -232,6 +239,7 @@
|
||||
"Failed to set speaker tone": "",
|
||||
"Failed to set vibration": "",
|
||||
"Feel for vibration in the controller.": "",
|
||||
"Firefox is supported with the WebHID extension installed.": "",
|
||||
"Fortnite": "",
|
||||
"Galactic Purple": "",
|
||||
"God of War Ragnarok": "",
|
||||
@@ -241,7 +249,9 @@
|
||||
"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.": "",
|
||||
@@ -251,6 +261,7 @@
|
||||
"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.": "",
|
||||
"No controller connected": "",
|
||||
"No saved calibrations found.": "",
|
||||
"No tests completed yet.": "",
|
||||
"Normal": "",
|
||||
"Not tested": "",
|
||||
@@ -259,6 +270,7 @@
|
||||
"Passed": "",
|
||||
"Please connect a DualShock 4, a DualSense, DualSense Edge or VR2 controller to your computer and press Connect.": "",
|
||||
"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": "",
|
||||
@@ -274,6 +286,8 @@
|
||||
"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.": "",
|
||||
"Show raw numbers": "",
|
||||
@@ -288,24 +302,36 @@
|
||||
"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 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 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.": "",
|
||||
"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.": "",
|
||||
"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.": "",
|
||||
"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.": "",
|
||||
"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.": "",
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
{
|
||||
".authorMsg": "- Çeviri: <a href='https://www.youtube.com/channel/UC8pzDCIt_CUj8sa7cYgPzHQ'>Tamir-Teknik</a> ve <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ü",
|
||||
"Unsupported browser. Please use a web browser with WebHID support (e.g. Chrome).": "Desteklenmeyen tarayıcı. Lütfen WebHID desteği olan bir web tarayıcısı kullanın (örneğin, Chrome).",
|
||||
"Connect": "Bağlan",
|
||||
"Connected to:": "Bağlanılan Cihaz:",
|
||||
"Disconnect": "Bağlantıyı Kes",
|
||||
@@ -34,7 +33,7 @@
|
||||
"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",
|
||||
"<b>The controller is now sampling data!</b>": "<b>Denetleyici şu anda veri örnekleme yapıyor!</b>",
|
||||
"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.",
|
||||
@@ -67,14 +66,12 @@
|
||||
"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",
|
||||
"My handle on discord is: the_al": "Discord'daki kullanıcı adım: the_al",
|
||||
"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",
|
||||
"You can check the calibration with the": "Kalibrasyonu şununla kontrol edebilirsiniz:",
|
||||
"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:",
|
||||
@@ -124,8 +121,6 @@
|
||||
", 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 feature is experimental.": "Bu özellik deneysel.",
|
||||
"Please let me know if the board model of your controller is not detected correctly.": "Denetleyicinizin kart modeli doğru tespit edilmezse lütfen bana bildirin.",
|
||||
"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",
|
||||
@@ -230,12 +225,12 @@
|
||||
"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 yön tuşlarına veya yüzey tuşlarına(△, ☐, O, ✕) bası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> daha küçük her zaman daha iyi değildir! %7–9 aralığını hedefleyin.",
|
||||
"<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.",
|
||||
@@ -279,7 +274,7 @@
|
||||
"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.": "Aralık kalibrasyonu başarısız gibi görünüyor. Lütfen yeniden deneyin ve analogları döndürdüğünüzden emin olun.",
|
||||
"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.",
|
||||
@@ -307,7 +302,38 @@
|
||||
"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:": "",
|
||||
"The item has been copied to the clipboard.": "",
|
||||
"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ı",
|
||||
"": ""
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
{
|
||||
".authorMsg": "- Переклав солов'їною: sladk0y",
|
||||
"DualShock Calibration GUI": "Майстер калібрування DualКонтролерів",
|
||||
"Unsupported browser. Please use a web browser with WebHID support (e.g. Chrome).": "Цей браузер не підтримується. Будь ласка, використовуйте веб-браузер із підтримкою WebHID (наприклад, Chrome).",
|
||||
"Connect": "Підключити",
|
||||
"Connected to:": "Підключено до:",
|
||||
"Disconnect": "Від'їднати",
|
||||
@@ -35,7 +34,7 @@
|
||||
"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>",
|
||||
"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": "Якщо вважаєте, що це корисно й хочете підтримати мої зусилля - не соромтесь і",
|
||||
@@ -67,14 +66,12 @@
|
||||
"Sony DualSense Edge": "Sony DualSense Edge",
|
||||
"Connected invalid device": "Підключено неприпустиме пристрій",
|
||||
"Error": "Помилка",
|
||||
"My handle on discord is: the_al": "Мій нік у Discord: the_al",
|
||||
"Initializing...": "Ініціалізація...",
|
||||
"Storing calibration...": "Збереження калібрування...",
|
||||
"Sampling...": "Збір даних...",
|
||||
"Calibration in progress": "Калібрування триває",
|
||||
"Start": "Старт",
|
||||
"Continue": "Продовжити",
|
||||
"You can check the calibration with the": "Ви можете перевірити калібрування за допомогою",
|
||||
"Have a nice day :)": "Гарного дня! :)",
|
||||
"Welcome to the Calibration GUI": "Ласкаво просимо до інтерфейсу калібрування",
|
||||
"Just few things to know before you can start:": "Кілька моментів, які слід врахувати перед початком:",
|
||||
@@ -124,8 +121,6 @@
|
||||
", to help more people like you!": ", щоб допомогти більшій кількості людей, подібних до вас!",
|
||||
"This website uses analytics to improve the service.": "Платформа застосовує аналітику для вдосконалення роботи.",
|
||||
"Board Model": "Модель плати",
|
||||
"This feature is experimental.": "Ця функція є експериментальною.",
|
||||
"Please let me know if the board model of your controller is not detected correctly.": "Будь ласка, повідомте, якщо модель плати вашого контролера визначена неправильно.",
|
||||
"This DualSense controller has outdated firmware.": "Прошивка цього контролера DualSense застаріла.",
|
||||
"Please update the firmware and try again.": "Будь ласка, оновіть прошивку та спробуйте знову.",
|
||||
"Joystick Info": "Інформація про джойстик",
|
||||
@@ -307,7 +302,38 @@
|
||||
"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.": "",
|
||||
"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": "серійний номер",
|
||||
"": ""
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
{
|
||||
".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",
|
||||
"Unsupported browser. Please use a web browser with WebHID support (e.g. Chrome).": "Trình duyệt không được hỗ trợ. Vui lòng sử dụng trình duyệt có hỗ trợ WebHID (ví dụ: Chrome).",
|
||||
"Connect": "Kết nối",
|
||||
"Connected to:": "Đã kết nối với:",
|
||||
"Disconnect": "Ngắt kết nối",
|
||||
@@ -35,7 +34,7 @@
|
||||
"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",
|
||||
"<b>The controller is now sampling data!</b>": "<b>Tay cầm hiện đang lấy mẫu dữ liệu!</b>",
|
||||
"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é!",
|
||||
@@ -68,14 +67,12 @@
|
||||
"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",
|
||||
"My handle on discord is: the_al": "Tên Discord của tao là: the_al",
|
||||
"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",
|
||||
"You can check the calibration with the": "Mày có thể kiểm tra hiệu chỉnh bằng",
|
||||
"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:",
|
||||
@@ -125,8 +122,6 @@
|
||||
", 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 feature is experimental.": "Tính năng này mang tính thử nghiệm.",
|
||||
"Please let me know if the board model of your controller is not detected correctly.": "Nếu mẫu bo mạch của tay cầm không được phát hiện chính xác, vui lòng cho tao biết.",
|
||||
"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",
|
||||
@@ -306,8 +301,39 @@
|
||||
"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.",
|
||||
"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": "",
|
||||
"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.": "",
|
||||
"Firefox is supported with the WebHID extension installed.": "",
|
||||
"It appears the latest joystick calibration has not been saved.": "",
|
||||
"Last connected": "",
|
||||
"No saved calibrations found.": "",
|
||||
"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": "",
|
||||
"The calibration was restored successfully! Remember to save the changes in order not to loose them when the controller is rebooted.": "",
|
||||
"The item has been copied to the clipboard.": "",
|
||||
"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": "",
|
||||
"": ""
|
||||
}
|
||||
@@ -1,7 +1,6 @@
|
||||
{
|
||||
".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> 提供",
|
||||
"DualShock Calibration GUI": "手柄校准界面",
|
||||
"Unsupported browser. Please use a web browser with WebHID support (e.g. Chrome).": "浏览器不支持。请使用支持 WebHID 的浏览器 (例如 Chrome)。",
|
||||
"Connect": "连接",
|
||||
"Connected to:": "连接至:",
|
||||
"Disconnect": "断开连接",
|
||||
@@ -35,7 +34,7 @@
|
||||
"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>",
|
||||
"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": "如果你觉得这些对你有帮助,想支持我的工作,随时欢迎!",
|
||||
@@ -67,14 +66,12 @@
|
||||
"Sony DualSense Edge": "PS5精英手柄/DSE(Sony DualSense Edge)",
|
||||
"Connected invalid device": "连接了无效设备",
|
||||
"Error": "错误",
|
||||
"My handle on discord is: the_al": "我的 Discord 用户名是: the_al",
|
||||
"Initializing...": "初始化...",
|
||||
"Storing calibration...": "正在存储校准...",
|
||||
"Sampling...": "采样中...",
|
||||
"Calibration in progress": "校准进行中",
|
||||
"Start": "开始",
|
||||
"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:": "在开始之前,有几件事情需要了解:",
|
||||
@@ -124,8 +121,6 @@
|
||||
", to help more people like you!": "来帮助更多像您一样的人!",
|
||||
"This website uses analytics to improve the service.": "该网站使用分析工具来提升服务质量。",
|
||||
"Board Model": "主板型号",
|
||||
"This feature is experimental.": "此功能为实验性质。",
|
||||
"Please let me know if the board model of your controller is not detected correctly.": "如果没有正确检测您手柄的主板型号,请告诉我。",
|
||||
"This DualSense controller has outdated firmware.": "该DualSense手柄的固件已过时。",
|
||||
"Please update the firmware and try again.": "请更新固件后重试。",
|
||||
"Joystick Info": "摇杆信息",
|
||||
@@ -305,9 +300,40 @@
|
||||
"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.": "",
|
||||
"The device appears to be a clone. All calibration functionality is disabled.": "",
|
||||
"The item has been copied to the clipboard.": "",
|
||||
"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.": "",
|
||||
"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.": "",
|
||||
"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.": "",
|
||||
"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": "",
|
||||
"": ""
|
||||
}
|
||||
@@ -1,7 +1,6 @@
|
||||
{
|
||||
".authorMsg": "- 中文(繁體)翻譯由 JEFF <a href='https://space.bilibili.com/185181540'>修手柄的小丁</a> 提供",
|
||||
"DualShock Calibration GUI": "手把校準界面",
|
||||
"Unsupported browser. Please use a web browser with WebHID support (e.g. Chrome).": "不支持的瀏覽器。請使用支持 WebHID 的瀏覽器 (例如 Chrome)。",
|
||||
"Connect": "連結",
|
||||
"Connected to:": "連結至:",
|
||||
"Disconnect": "斷開連結",
|
||||
@@ -34,7 +33,7 @@
|
||||
"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>",
|
||||
"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": "如果您覺得有幫助,想支持我的努力,請隨時",
|
||||
@@ -66,14 +65,12 @@
|
||||
"Sony DualSense Edge": "Sony DualSense Edge",
|
||||
"Connected invalid device": "連接了無效設備",
|
||||
"Error": "錯誤",
|
||||
"My handle on discord is: the_al": "我的 Discord 用戶名是: the_al",
|
||||
"Initializing...": "初始化...",
|
||||
"Storing calibration...": "正在儲存校準...",
|
||||
"Sampling...": "採樣中...",
|
||||
"Calibration in progress": "校準進行中",
|
||||
"Start": "開始",
|
||||
"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:": "在開始之前,有幾件事情要了解:",
|
||||
@@ -123,8 +120,6 @@
|
||||
", to help more people like you!": "以幫助更多像您一樣的人!",
|
||||
"This website uses analytics to improve the service.": "該網站使用分析工具來改善服務。",
|
||||
"Board Model": "主機板型號",
|
||||
"This feature is experimental.": "此功能為實驗性質。",
|
||||
"Please let me know if the board model of your controller is not detected correctly.": "如果您的手把的主機板型號沒有被正確檢測,請告訴我。",
|
||||
"This DualSense controller has outdated firmware.": "該DualSense手把的韌體已過時。",
|
||||
"Please update the firmware and try again.": "請更新韌體後重試。",
|
||||
"Joystick Info": "搖桿資訊",
|
||||
@@ -230,15 +225,27 @@
|
||||
"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": "",
|
||||
"Cannot copy text to the clipboard:": "",
|
||||
"Cannot read module barcodes": "",
|
||||
"Center": "",
|
||||
"Center (L1)": "",
|
||||
"Circularity": "",
|
||||
"Circularity (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": "",
|
||||
@@ -246,11 +253,14 @@
|
||||
"Failed to set speaker tone": "",
|
||||
"Failed to set vibration": "",
|
||||
"Feel for vibration in the controller.": "",
|
||||
"Firefox is supported with the WebHID extension installed.": "",
|
||||
"Haptic Vibration": "",
|
||||
"Headphone Jack": "",
|
||||
"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.": "",
|
||||
@@ -259,12 +269,14 @@
|
||||
"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 saved calibrations found.": "",
|
||||
"No tests completed yet.": "",
|
||||
"Not tested": "",
|
||||
"Pass": "",
|
||||
"Passed": "",
|
||||
"Please connect a DualShock 4, a DualSense, DualSense Edge or VR2 controller to your computer and press Connect.": "",
|
||||
"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": "",
|
||||
@@ -280,6 +292,8 @@
|
||||
"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.": "",
|
||||
"Show raw numbers": "",
|
||||
@@ -290,22 +304,34 @@
|
||||
"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 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 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.": "",
|
||||
"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.": "",
|
||||
"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.": "",
|
||||
"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.": "",
|
||||
"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.": "",
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
# 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
|
||||
@@ -31,6 +32,7 @@ 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(".")
|
||||
@@ -48,7 +50,6 @@ EXCLUDE_PATTERNS = [
|
||||
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
|
||||
r'^(hide|show)$', # Common CSS display values
|
||||
]
|
||||
|
||||
# Whitelist of strings that are in language files but should be ignored by unused check
|
||||
@@ -189,7 +190,7 @@ def extract_l_function_strings(js_files):
|
||||
# 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*\)'
|
||||
pattern = r'(?:this\.)?\bl\s*\(\s*["\'`]([^"\'`]+)["\'`]\s*\)'
|
||||
|
||||
for js_file in js_files:
|
||||
try:
|
||||
@@ -235,7 +236,10 @@ def extract_html_strings_from_js(js_files):
|
||||
|
||||
# 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 = 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:
|
||||
@@ -266,18 +270,39 @@ def extract_html_strings_from_js(js_files):
|
||||
# Otherwise, keep the original text with simple formatting tags
|
||||
|
||||
if 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')
|
||||
# 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 text not in strings:
|
||||
strings[text] = []
|
||||
strings[text].append({
|
||||
'file': str(js_file),
|
||||
'line': line_num,
|
||||
'col': col_num
|
||||
})
|
||||
# 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}")
|
||||
@@ -456,16 +481,16 @@ def main():
|
||||
print("-" * 80)
|
||||
for string in sorted(missing_translations):
|
||||
print(f" - \"{string}\"")
|
||||
# Show first location where this string was found
|
||||
if string in used_strings_with_locations:
|
||||
# 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
|
||||
if string in missing_by_language:
|
||||
# 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)})")
|
||||
|
||||
@@ -47,7 +47,6 @@
|
||||
</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>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
19
templates/calibration-history-modal.html
Normal file
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>
|
||||
@@ -8,6 +8,10 @@
|
||||
</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>
|
||||
|
||||
@@ -6,12 +6,30 @@
|
||||
<h1 class="modal-title fs-5 ds-i18n" id="staticBackdropLabel">Range calibration</h1>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p class="ds-i18n"><b>The controller is now sampling data!</b></p>
|
||||
<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 class="progress mt-3" role="progressbar" aria-label="Range calibration progress" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100">
|
||||
|
||||
<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">
|
||||
<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>
|
||||
|
||||
Reference in New Issue
Block a user