diff --git a/_redirects b/_redirects index beec171..0239042 100644 --- a/_redirects +++ b/_redirects @@ -1 +1,2 @@ -* /index.html +/ /en-US/index.html +/:lang/* /:lang/index.html diff --git a/angular.json b/angular.json index 00bf12e..6f0f29d 100644 --- a/angular.json +++ b/angular.json @@ -10,6 +10,15 @@ "projects": { "ctrl": { "projectType": "application", + "i18n": { + "sourceLocale": "en-US", + "locales": { + "zh-CN": { + "translation": "src/locale/messages.zh-CN.xlf", + "baseHref": "/zh-CN/" + } + } + }, "schematics": { "@schematics/angular:component": { "style": "sass", diff --git a/package.json b/package.json index 6fa49d2..ec4affe 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,8 @@ "ng": "ng", "start": "ng serve", "build": "ng build", + "build:i18n": "ng build --localize", + "extract-i18n": "ng extract-i18n --output-path src/locale", "watch": "ng build --watch --configuration development", "test": "ng test" }, @@ -15,6 +17,7 @@ "@angular/compiler": "^16.2.12", "@angular/core": "^16.2.12", "@angular/forms": "^16.2.12", + "@angular/localize": "^16.2.12", "@angular/platform-browser": "^16.2.12", "@angular/platform-browser-dynamic": "^16.2.12", "@angular/router": "^16.2.12", @@ -25,7 +28,7 @@ }, "devDependencies": { "@angular-devkit/build-angular": "^16.2.12", - "@angular/cli": "~16.2.12", + "@angular/cli": "^16.2.12", "@angular/compiler-cli": "^16.2.12", "@types/jasmine": "~4.3.0", "@types/w3c-web-usb": "^1.0.6", diff --git a/src/components/central/central.html b/src/components/central/central.html index a82b5cb..9996028 100644 --- a/src/components/central/central.html +++ b/src/components/central/central.html @@ -16,8 +16,8 @@
stadia_controller
-
Controller not found
- +
Controller not found
+ @@ -29,10 +29,10 @@
heart_broken
-
There was a problem
+
There was a problem
{{webusb.getFailedError()}}
{{webusb.getFailedHint()}}
- + @@ -45,8 +45,8 @@ report
 
-
Browser not compatible
-
+
Browser not compatible
+
This browser do not support WebUSB
diff --git a/src/components/header/header.html b/src/components/header/header.html index 154f808..66ad847 100644 --- a/src/components/header/header.html +++ b/src/components/header/header.html @@ -13,6 +13,7 @@ Settings @@ -21,6 +22,7 @@ Profiles @@ -29,6 +31,7 @@ Help @@ -57,15 +60,15 @@
- Add device + Add device add
-

Firmware update required

-
+

Firmware update required

+
{{webusb.selectedDevice!.getConnectorName()}} firmware is outdated, the Ctrl app won't work correctly.

Current {{webusb.selectedDevice!.getConnectorName()}} @@ -74,19 +77,19 @@

Firmware update required

Check latest firmware releases
- +
-

Controller model undefined

-
+

Controller model undefined

+
The identifier for the controller model cannot be read. The app functionality is limited without this piece of information.

A privacy protector (for example Brave Shields) could be blocking the access to it.
- +
diff --git a/src/components/help/help_deck.html b/src/components/help/help_deck.html index 3a3877d..93352f7 100644 --- a/src/components/help/help_deck.html +++ b/src/components/help/help_deck.html @@ -3,28 +3,28 @@ Copyright (C) 2023, Input Labs Oy. --> -

Setup in Steam Deck / Arch Linux

+

Setup in Steam Deck / Arch Linux


-

Compatible browsers

+

Compatible browsers

-(Install with Discover) +(Install with Discover)
-

Protocol mode

+

Protocol mode


-

Pair controller

+

Pair controller

diff --git a/src/components/help/help_linux.html b/src/components/help/help_linux.html index 47de130..3fad3cb 100644 --- a/src/components/help/help_linux.html +++ b/src/components/help/help_linux.html @@ -3,43 +3,43 @@ Copyright (C) 2023, Input Labs Oy. --> -

Setup in Debian / Ubuntu

+

Setup in Debian / Ubuntu


-

Compatible browsers

+

Compatible browsers


-

Protocol mode

+

Protocol mode


-

Pair controller

+

Pair controller


-

Known issues

-

The controller may have to be unplugged and plugged at least once after opening the browser.

+

Known issues

+

The controller may have to be unplugged and plugged at least once after opening the browser.


-

Additional OS configuration

-

Some distros may require additional Udev rules to allow access to USB devices.

-

Create a file with udev rules:

+

Additional OS configuration

+

Some distros may require additional Udev rules to allow access to USB devices.

+

Create a file with udev rules:

sudo nano /etc/udev/rules.d/99-alpakka.rules

 {{'SUBSYSTEMS=="usb", ATTRS{idVendor}=="045e", MODE="0660", GROUP="plugdev", SYMLINK+="webusb"'}}
 {{'SUBSYSTEMS=="usb", ATTRS{idVendor}=="0170", MODE="0660", GROUP="plugdev", SYMLINK+="webusb"'}}
-

Reconnect the controller and verify the rule has been loaded by checking if /dev/webusb exist.

-

If Chromium was installed using Snap, it may require additional permissions to access USB devices:

+

Reconnect the controller and verify the rule has been loaded by checking if /dev/webusb exist.

+

If Chromium was installed using Snap, it may require additional permissions to access USB devices:

snap connect chromium:raw-usb diff --git a/src/components/help/help_privacy.html b/src/components/help/help_privacy.html index 05d486f..361645f 100644 --- a/src/components/help/help_privacy.html +++ b/src/components/help/help_privacy.html @@ -3,90 +3,90 @@ Copyright (C) 2023, Input Labs Oy. --> -

Privacy policy

-

This Privacy Policy describes how ctrl.inputlabs.io (the "Site" or "we") collects, uses, and discloses your Personal Information when you visit the Site.

+

Privacy policy

+

This Privacy Policy describes how ctrl.inputlabs.io (the "Site" or "we") collects, uses, and discloses your Personal Information when you visit the Site.


-

Contact

-

After reviewing this policy, if you have additional questions, want more information about our privacy practices, or would like to make a complaint, please contact us by e-mail at or by mail using the details provided below: -

Lapinlahdenkatu 16, 00180 Helsinki, Finland.

+

Contact

+

After reviewing this policy, if you have additional questions, want more information about our privacy practices, or would like to make a complaint, please contact us by e-mail at or by mail using the details provided below: +

Lapinlahdenkatu 16, 00180 Helsinki, Finland.


-

Collecting Personal Information

-

When you visit the Site, we collect certain information about your device and your interaction with the Site. In this Privacy Policy, we refer to any information about an identifiable individual (including the information below) as "Personal Information". See the list below for more information about what Personal Information we collect and why.

+

Collecting Personal Information

+

When you visit the Site, we collect certain information about your device and your interaction with the Site. In this Privacy Policy, we refer to any information about an identifiable individual (including the information below) as "Personal Information". See the list below for more information about what Personal Information we collect and why.


-

Sharing Personal Information

-

We share your Personal Information with service providers to help us provide our services, as described above.

+

Sharing Personal Information

+

We share your Personal Information with service providers to help us provide our services, as described above.


-

Using Personal Information

-

We do not directly use Personally Identifiable Information on the Site for any purpose.

+

Using Personal Information

+

We do not directly use Personally Identifiable Information on the Site for any purpose.

-

Lawful basis

-

Pursuant to the General Data Protection Regulation ("GDPR"), if you are a resident of the European Economic Area ("EEA"), we process your personal information under the following lawful bases:

+

Lawful basis

+

Pursuant to the General Data Protection Regulation ("GDPR"), if you are a resident of the European Economic Area ("EEA"), we process your personal information under the following lawful bases:

-

Retention

-

When You visit the Site, our providers could retain your Personal Information for their operations (as described above) temporally unless you ask to erase this information. For more information on your right of erasure, please see the 'Your rights' section below.

+

Retention

+

When You visit the Site, our providers could retain your Personal Information for their operations (as described above) temporally unless you ask to erase this information. For more information on your right of erasure, please see the 'Your rights' section below.

-

Automatic decision-making

-

If you are a resident of the EEA, you have the right to object to processing based solely on automated decision-making (which includes profiling), when that decision-making has a legal effect on you or otherwise significantly affects you.

-

We DO NOT engage in fully automated decision-making that has a legal or otherwise significant effect using customer data.

-

Our provider Cloudflare may use limited automated decision-making to prevent abuse, that does not have a legal or otherwise significant effect on you.

+

Automatic decision-making

+

If you are a resident of the EEA, you have the right to object to processing based solely on automated decision-making (which includes profiling), when that decision-making has a legal effect on you or otherwise significantly affects you.

+

We DO NOT engage in fully automated decision-making that has a legal or otherwise significant effect using customer data.

+

Our provider Cloudflare may use limited automated decision-making to prevent abuse, that does not have a legal or otherwise significant effect on you.


-

Your rights

+

Your rights

-

GDPR

-

If you are a resident of the EEA, you have the right to access the Personal Information we hold about you, to port it to a new service, and to ask that your Personal Information be corrected, updated, or erased. If you would like to exercise these rights, please contact us through the contact information above.

+

GDPR

+

If you are a resident of the EEA, you have the right to access the Personal Information we hold about you, to port it to a new service, and to ask that your Personal Information be corrected, updated, or erased. If you would like to exercise these rights, please contact us through the contact information above.


-

Local data

+

Local data

-

Cookies

-

The Site do NOT use cookies.

+

Cookies

+

The Site do NOT use cookies.

-

LocalStorage

-

The Site stores data locally in your browser to remember configurable website settings, that do NOT contain Personally Identifiable Information, are not unique, and are NOT transmitted outside your device.

+

LocalStorage

+

The Site stores data locally in your browser to remember configurable website settings, that do NOT contain Personally Identifiable Information, are not unique, and are NOT transmitted outside your device.


-

Do Not Track

-

Please note that because there is no consistent industry understanding of how to respond to "Do Not Track" signals, we do not alter our data collection and usage practices when we detect such a signal from your browser.

+

Do Not Track

+

Please note that because there is no consistent industry understanding of how to respond to "Do Not Track" signals, we do not alter our data collection and usage practices when we detect such a signal from your browser.


-

Changes

-

We may update this Privacy Policy from time to time in order to reflect, for example, changes to our practices or for other operational, legal, or regulatory reasons.

+

Changes

+

We may update this Privacy Policy from time to time in order to reflect, for example, changes to our practices or for other operational, legal, or regulatory reasons.


-

Complaints

-

As noted above, if you would like to make a complaint, please contact us by e-mail or by mail using the details provided under "Contact" above.

-

If you are not satisfied with our response to your complaint, you have the right to lodge your complaint with the relevant data protection authority.

+

Complaints

+

As noted above, if you would like to make a complaint, please contact us by e-mail or by mail using the details provided under "Contact" above.

+

If you are not satisfied with our response to your complaint, you have the right to lodge your complaint with the relevant data protection authority.

diff --git a/src/components/help/help_pwa.html b/src/components/help/help_pwa.html index b80044b..a646b99 100644 --- a/src/components/help/help_pwa.html +++ b/src/components/help/help_pwa.html @@ -3,21 +3,21 @@ Copyright (C) 2023, Input Labs Oy. --> -

Install Ctrl app

+

Install Ctrl app


-

Progressive Web App

-

The Ctrl app is a PWA that can be installed like a native OS app, and get many benefits:

+

Progressive Web App

+

The Ctrl app is a PWA that can be installed like a native OS app, and get many benefits:


-

How to install

-

In Chrome / Edge / Brave, an Install app icon shows up on the right side of the URL bar.

+

How to install

+

In Chrome / Edge / Brave, an Install app icon shows up on the right side of the URL bar.

diff --git a/src/components/help/help_windows.html b/src/components/help/help_windows.html index 64ca4f9..af5fe8d 100644 --- a/src/components/help/help_windows.html +++ b/src/components/help/help_windows.html @@ -3,33 +3,33 @@ Copyright (C) 2023, Input Labs Oy. --> -

Setup in Windows

+

Setup in Windows


-

Compatible browsers

+

Compatible browsers


-

Protocol mode

+

Protocol mode


-

Pair controller

+

Pair controller


-

Known issues

-

The controller may have to be unplugged and plugged at least once after opening the browser.

+

Known issues

+

The controller may have to be unplugged and plugged at least once after opening the browser.

diff --git a/src/components/logs/logs.html b/src/components/logs/logs.html index ab86a09..cd4ec6f 100644 --- a/src/components/logs/logs.html +++ b/src/components/logs/logs.html @@ -4,10 +4,11 @@ -->
-

Firmware logs

+

Firmware logs

         
- Try using the restart button - No logs in here + Try using the restart button + No logs in here {{line}}
-

Commands

- - - - - - - +

Commands

+ + + + + + +
-

Controller calibration

-
+

Controller calibration

+
The gyroscopes, accelerometers, and thumbstick will be calibrated, leave the controller on a flat surface and wait until the procedure is completed.
- - + +
-

Reset config values

-
+

Reset config values

+
All config values will be discarded (calibration, protocol mode, sensitivities, etc). Profiles won't be affected.

The controller will restart in default Windows mode.
- - + +
-

Reset all profiles

-
+

Reset all profiles

+
All profiles will be restored to default built-in profiles (as defined in the manual).

Current profiles will be lost forever.
- - + +
-

Reset to factory defaults

-
+

Reset to factory defaults

+
All config values will be discarded (calibration, protocol mode, sensitivities, etc). Profiles will be restored to built-in defaults.

The controller will restart in default Windows mode.
- - + +
-

Unpair controller

-
+

Unpair controller

+
The current device ({{webusb.getManufacturerName()}} {{webusb.getProductName()}}) will be disconnected and removed from the list of paired devices.
- - + +
diff --git a/src/components/profile/action_selector.html b/src/components/profile/action_selector.html index 0e836e7..0f3a1a3 100644 --- a/src/components/profile/action_selector.html +++ b/src/components/profile/action_selector.html @@ -9,6 +9,7 @@
Add actions
@@ -35,6 +36,7 @@
settings_remote
-
The dongle does not store profiles.
-
Select a controller in the top-right corner
+
The dongle does not store profiles.
+
Select a controller in the top-right corner
diff --git a/src/components/profile/section.html b/src/components/profile/section.html index 670c7e0..85841a7 100644 --- a/src/components/profile/section.html +++ b/src/components/profile/section.html @@ -5,9 +5,9 @@
-

Profile

+

Profile

-
Name:
+
Name:
Profile />
-
Copy profile from:
+
Copy profile from:
-
Import / export:
+
Import / export:
- +
-

Home button

-

Home button mappings are not configurable yet.

-

Holding (pink) the Home button, enables the shortcuts from the Home profile. These can be modified in the Home profile page.

-

Double-clicking (purple) the Home button, emulates the native gamepad home/guide button.

-

Double-clicking and holding the Home button allows for shortcuts such as "Guide+X" when pressing other buttons.

+

Home button

+

Home button mappings are not configurable yet.

+

Holding (pink) the Home button, enables the shortcuts from the Home profile. These can be modified in the Home profile page.

+

Double-clicking (purple) the Home button, emulates the native gamepad home/guide button.

+

Double-clicking and holding the Home button allows for shortcuts such as "Guide+X" when pressing other buttons.

@@ -83,7 +83,7 @@

{{getSectionTitle()}}

class='iconaction' *ngIf='!button.sticky' > - Long press + Long press {{button.hold ? 'check_box' : 'check_box_outline_blank'}} @@ -92,7 +92,7 @@

{{getSectionTitle()}}

class='iconaction' *ngIf='!button.sticky' > - Double press + Double press {{button.double ? 'check_box' : 'check_box_outline_blank'}} @@ -101,7 +101,7 @@

{{getSectionTitle()}}

class='iconaction' *ngIf='(button.hold || button.double) && !button.sticky' > - Immediate / trigger both + Immediate / trigger both {{button.immediate ? 'check_box' : 'check_box_outline_blank'}} @@ -110,7 +110,7 @@

{{getSectionTitle()}}

class='iconaction' *ngIf='button.hold && !button.sticky' > - Very long press + Very long press {{button.long ? 'check_box' : 'check_box_outline_blank'}} @@ -119,7 +119,7 @@

{{getSectionTitle()}}

class='iconaction' *ngIf='profileIndex===0 && !button.hold' > - Home cycle + Home cycle {{button.sticky ? 'check_box' : 'check_box_outline_blank'}} @@ -148,8 +148,8 @@

{{getSectionTitle()}}

{{getSectionTitle()}}

-
On scroll up:
-
On scroll down:
+
On scroll up:
+
On scroll down:
{{getSectionTitle()}}

{{getSectionTitle()}}

-
Mode:
+
Mode:
-
Analog distance calculation:
+
Analog distance calculation:
-
Saturation:
+
Saturation:
{{getSectionTitle()}}
-
Axis overlap:
+
Axis overlap:
{{getSectionTitle()}}
-
Deadzone:
+
Deadzone:
- Override global deadzone + Override global deadzone {{getSectionTitle()}}
-
Anti-deadzone:
+
Anti-deadzone:
{{getSectionTitle()}}

{{getSectionTitle()}}

-
Mode:
+
Mode:
-
Engage surface/button:
+
Engage surface/button:
@@ -303,7 +303,7 @@

{{getSectionTitle()}}

{{getSectionTitle()}}

-
On axis rotation (negative):
+
On axis rotation (negative):
{{getSectionTitle()}} />
-
On axis rotation (positive):
+
On axis rotation (positive):
{{getSectionTitle()}} />
-
Min Angle:
+
Min Angle:
{{getSectionTitle()}}
-
Max Angle:
+
Max Angle:
{{getSectionTitle()}}
- SET PROFILE {{pickerProfile}} + SET PROFILE {{pickerProfile}}
- MACRO {{pickerMacro}} + MACRO {{pickerMacro}}
- settingsPROTOCOL - settingsMOUSE SENS - settingsTOUCH SENS - settingsTS DEADZONE + settingsPROTOCOL + settingsMOUSE SENS + settingsTOUCH SENS + settingsTS DEADZONE
settingsremove
settingsadd
-
CALIBRATE
-
BOOTSEL
-
PAIR
-
SLEEP
+
CALIBRATE
+
BOOTSEL
+
PAIR
+
SLEEP
@@ -627,6 +627,6 @@

{{getSectionTitle()}}

- +
diff --git a/src/components/profile/section.ts b/src/components/profile/section.ts index 5172f50..bed8fa7 100644 --- a/src/components/profile/section.ts +++ b/src/components/profile/section.ts @@ -97,23 +97,23 @@ export class SectionComponent { getButtonBlockSubtitle(group: number) { const button = this.getSectionAsButton() if (group == 0) { - if (button.sticky) return 'On the first press, until home is released:' - if (!button.hold && !button.double && !button.immediate) return 'On button press:' - if (button.hold && !button.immediate) return 'On short press:' - if (button.hold && button.immediate) return 'On press (always):' - if (!button.hold && button.double && !button.immediate) return 'On single press:' - if (!button.hold && button.double && button.immediate) return 'On first press (always):' + if (button.sticky) return $localize`On the first press, until home is released:` + if (!button.hold && !button.double && !button.immediate) return $localize`On button press:` + if (button.hold && !button.immediate) return $localize`On short press:` + if (button.hold && button.immediate) return $localize`On press (always):` + if (!button.hold && button.double && !button.immediate) return $localize`On single press:` + if (!button.hold && button.double && button.immediate) return $localize`On first press (always):` } if (group == 1) { - if (button.sticky) return 'On every press:' - if (button.hold && !button.double && !button.immediate) return 'Otherwise on long press:' - if (button.hold && button.double && !button.immediate) return 'On long press:' - if (button.hold && button.immediate) return 'Additionally on long press:' - if (!button.hold && button.double && !button.immediate) return 'On single press:' - if (!button.hold && button.double && button.immediate) return 'On first press (always):' + if (button.sticky) return $localize`On every press:` + if (button.hold && !button.double && !button.immediate) return $localize`Otherwise on long press:` + if (button.hold && button.double && !button.immediate) return $localize`On long press:` + if (button.hold && button.immediate) return $localize`Additionally on long press:` + if (!button.hold && button.double && !button.immediate) return $localize`On single press:` + if (!button.hold && button.double && button.immediate) return $localize`On first press (always):` } if (group == 2) { - return 'On double press:' + return $localize`On double press:` } return '' } @@ -309,50 +309,50 @@ interface SectionTitles { [index: number]: string } const sectionTitles: SectionTitles = { - [SectionIndex.A]: 'Button A', - [SectionIndex.B]: 'Button B', - [SectionIndex.X]: 'Button X', - [SectionIndex.Y]: 'Button Y', - [SectionIndex.DPAD_LEFT]: 'DPad Left', - [SectionIndex.DPAD_RIGHT]: 'DPad Right', - [SectionIndex.DPAD_UP]: 'DPad Up', - [SectionIndex.DPAD_DOWN]: 'DPad Down', - [SectionIndex.SELECT_1]: 'Select', - [SectionIndex.SELECT_2]: 'Select (2)', - [SectionIndex.START_1]: 'Start', - [SectionIndex.START_2]: 'Start (2)', - [SectionIndex.L1]: 'Trigger L1', - [SectionIndex.L2]: 'Trigger L2', - [SectionIndex.L4]: 'Trigger L4', - [SectionIndex.R1]: 'Trigger R1', - [SectionIndex.R2]: 'Trigger R2', - [SectionIndex.R4]: 'Trigger R4', - [SectionIndex.LSTICK_SETTINGS]: 'LStick Settings', - [SectionIndex.LSTICK_LEFT]: 'LStick Left', - [SectionIndex.LSTICK_RIGHT]: 'LStick Right', - [SectionIndex.LSTICK_UP]: 'LStick Up', - [SectionIndex.LSTICK_DOWN]: 'LStick Down', - [SectionIndex.LSTICK_UL]: 'LStick Up-Left', - [SectionIndex.LSTICK_UR]: 'LStick Up-Right', - [SectionIndex.LSTICK_DL]: 'LStick Down-Left', - [SectionIndex.LSTICK_DR]: 'LStick Down-Right', - [SectionIndex.LSTICK_PUSH]: 'LStick Push', - [SectionIndex.LSTICK_INNER]: 'LStick Inner', - [SectionIndex.LSTICK_OUTER]: 'LStick Outer', - [SectionIndex.RSTICK_SETTINGS]: 'RStick Settings', - [SectionIndex.RSTICK_LEFT]: 'RStick Left', - [SectionIndex.RSTICK_RIGHT]: 'RStick Right', - [SectionIndex.RSTICK_UP]: 'RStick Up', - [SectionIndex.RSTICK_DOWN]: 'RStick Down', - [SectionIndex.RSTICK_UL]: 'RStick Up-Left', - [SectionIndex.RSTICK_UR]: 'RStick Up-Right', - [SectionIndex.RSTICK_DL]: 'RStick Down-Left', - [SectionIndex.RSTICK_DR]: 'RStick Down-Right', - [SectionIndex.RSTICK_PUSH]: 'RStick Push', - [SectionIndex.ROTARY_UP]: 'Rotary up', - [SectionIndex.ROTARY_DOWN]: 'Rotary down', - [SectionIndex.GYRO_SETTINGS]: 'Gyro settings', - [SectionIndex.GYRO_X]: 'Gyro Axis X', - [SectionIndex.GYRO_Y]: 'Gyro Axis Y', - [SectionIndex.GYRO_Z]: 'Gyro Axis Z', + [SectionIndex.A]: $localize`Button A`, + [SectionIndex.B]: $localize`Button B`, + [SectionIndex.X]: $localize`Button X`, + [SectionIndex.Y]: $localize`Button Y`, + [SectionIndex.DPAD_LEFT]: $localize`DPad Left`, + [SectionIndex.DPAD_RIGHT]: $localize`DPad Right`, + [SectionIndex.DPAD_UP]: $localize`DPad Up`, + [SectionIndex.DPAD_DOWN]: $localize`DPad Down`, + [SectionIndex.SELECT_1]: $localize`Select`, + [SectionIndex.SELECT_2]: $localize`Select (2)`, + [SectionIndex.START_1]: $localize`Start`, + [SectionIndex.START_2]: $localize`Start (2)`, + [SectionIndex.L1]: $localize`Trigger L1`, + [SectionIndex.L2]: $localize`Trigger L2`, + [SectionIndex.L4]: $localize`Trigger L4`, + [SectionIndex.R1]: $localize`Trigger R1`, + [SectionIndex.R2]: $localize`Trigger R2`, + [SectionIndex.R4]: $localize`Trigger R4`, + [SectionIndex.LSTICK_SETTINGS]: $localize`LStick Settings`, + [SectionIndex.LSTICK_LEFT]: $localize`LStick Left`, + [SectionIndex.LSTICK_RIGHT]: $localize`LStick Right`, + [SectionIndex.LSTICK_UP]: $localize`LStick Up`, + [SectionIndex.LSTICK_DOWN]: $localize`LStick Down`, + [SectionIndex.LSTICK_UL]: $localize`LStick Up-Left`, + [SectionIndex.LSTICK_UR]: $localize`LStick Up-Right`, + [SectionIndex.LSTICK_DL]: $localize`LStick Down-Left`, + [SectionIndex.LSTICK_DR]: $localize`LStick Down-Right`, + [SectionIndex.LSTICK_PUSH]: $localize`LStick Push`, + [SectionIndex.LSTICK_INNER]: $localize`LStick Inner`, + [SectionIndex.LSTICK_OUTER]: $localize`LStick Outer`, + [SectionIndex.RSTICK_SETTINGS]: $localize`RStick Settings`, + [SectionIndex.RSTICK_LEFT]: $localize`RStick Left`, + [SectionIndex.RSTICK_RIGHT]: $localize`RStick Right`, + [SectionIndex.RSTICK_UP]: $localize`RStick Up`, + [SectionIndex.RSTICK_DOWN]: $localize`RStick Down`, + [SectionIndex.RSTICK_UL]: $localize`RStick Up-Left`, + [SectionIndex.RSTICK_UR]: $localize`RStick Up-Right`, + [SectionIndex.RSTICK_DL]: $localize`RStick Down-Left`, + [SectionIndex.RSTICK_DR]: $localize`RStick Down-Right`, + [SectionIndex.RSTICK_PUSH]: $localize`RStick Push`, + [SectionIndex.ROTARY_UP]: $localize`Rotary up`, + [SectionIndex.ROTARY_DOWN]: $localize`Rotary down`, + [SectionIndex.GYRO_SETTINGS]: $localize`Gyro settings`, + [SectionIndex.GYRO_X]: $localize`Gyro Axis X`, + [SectionIndex.GYRO_Y]: $localize`Gyro Axis Y`, + [SectionIndex.GYRO_Z]: $localize`Gyro Axis Z`, } diff --git a/src/components/settings/settings.html b/src/components/settings/settings.html index f5c730d..439ee63 100644 --- a/src/components/settings/settings.html +++ b/src/components/settings/settings.html @@ -4,12 +4,12 @@ -->
-

Advanced settings

+

Advanced settings

-
Long calibration
-
4x longer
+
Long calibration
+
4x longer
help
Advanced settings
-
Swap gyros
-
Left<->Right
+
Swap gyros
+
Left<->Right
help
Advanced settings
-
Invert touch polarity
-
Charge vs Discharge
+
Invert touch polarity
+
Charge vs Discharge
help
Advanced settings
-
Gyro calibration tweak
-
X axis
+
Gyro calibration tweak
+
X axis
help
Advanced settings
-
Gyro calibration tweak
-
Y axis
+
Gyro calibration tweak
+
Y axis
help
Advanced settings
-
Gyro calibration tweak
-
Z axis
+
Gyro calibration tweak
+
Z axis
help
Advanced settings
-
Thumbstick smoothing
-
Samples
+
Thumbstick smoothing
+
Samples
help
Advanced settings

{{helpTitle}}

- +
diff --git a/src/components/settings/settings.ts b/src/components/settings/settings.ts index d0c3fff..58124ad 100644 --- a/src/components/settings/settings.ts +++ b/src/components/settings/settings.ts @@ -85,36 +85,36 @@ export class SettingsComponent { showDialogHelp(key: string) { const titles: {[key: string]: string} = { - longCalibration: "Long calibration", - swapGyros: "Swap gyros", - invertTouchPolarity: "Invert touch polarity", - gyroUserOffset: "Gyro calibration tweak", + longCalibration: $localize`Long calibration`, + swapGyros: $localize`Swap gyros`, + invertTouchPolarity: $localize`Invert touch polarity`, + gyroUserOffset: $localize`Gyro calibration tweak`, } const texts: {[key: string]: string} = { longCalibration: - `In some cases the drift could be changing direction so slowly that a normal calibration is + $localize`In some cases the drift could be changing direction so slowly that a normal calibration is not able to capture it completely. A longer calibration will do a better job averaging the drift.

After enabling this setting, any new calibration procedure will take 4x times longer.`, swapGyros: - `In some cases one of the IMU sensors could be more sensitive to temperature-induced drift, + $localize`In some cases one of the IMU sensors could be more sensitive to temperature-induced drift, since each gyroscope sensor is configured in a slightly different way, swapping their roles could help preventing this issue.

A re-calibration is required after enabling this feature.`, invertTouchPolarity: - `The touch sensor works by measuring how long it takes to charge up or charge down the touch + $localize`The touch sensor works by measuring how long it takes to charge up or charge down the touch plate (and anything that touches it). This polarity setting controls which one it is (up or down).

If you are having problems with the touch sensor, this feature could help making the measurements more stable.`, gyroUserOffset: - `Since the calibration has to be performed with the controller on a flat surface, it is + $localize`Since the calibration has to be performed with the controller on a flat surface, it is possible that the piezoelectric sensor has slightly different zero readings while tilted back and held in a normal gaming position.

If this problem is noticeable, it can be solved by manually adding additional offsets into the calibration values.`, thumbstickSmoothing: - `How many additional samples are used to calculate the final value of the thumbstick. + $localize`How many additional samples are used to calculate the final value of the thumbstick. More samples provide a more stable output but also increase the perceived latency.

Smoothing is disabled when the number of additional samples is set to zero (only the current sample is used).`, diff --git a/src/components/sidebar/sidebar.html b/src/components/sidebar/sidebar.html index 6663f54..2d56923 100644 --- a/src/components/sidebar/sidebar.html +++ b/src/components/sidebar/sidebar.html @@ -10,31 +10,31 @@ [routerLinkActiveOptions]='{exact: true}' > terminal -
Logs and commands
+
Logs and commands
usb -
Protocol
+
Protocol
touch_app -
Touch sensitivity
+
Touch sensitivity
mouse -
Mouse sensitivity
+
Mouse sensitivity
adjust -
Thumbstick deadzone
+
Thumbstick deadzone
tune -
Advanced
+
Advanced
screenshot_monitor -
App settings
+
App settings
-

Work in progress

-This feature is not implemented yet +

Work in progress

+This feature is not implemented yet diff --git a/src/locale/messages.xlf b/src/locale/messages.xlf new file mode 100644 index 0000000..bb4ff35 --- /dev/null +++ b/src/locale/messages.xlf @@ -0,0 +1,2402 @@ + + + + + + Controller not found + + src/components/central/central.html + 19 + + + + How to setup + + src/components/central/central.html + 20 + + + src/components/central/central.html + 35 + + + + There was a problem + + src/components/central/central.html + 32 + + + + Browser not compatible + + src/components/central/central.html + 48 + + + + This browser do not support WebUSB + + src/components/central/central.html + 49,51 + + + + Settings + + src/components/header/header.html + 17,19 + + + + Profiles + + src/components/header/header.html + 26,28 + + + + Help + + src/components/header/header.html + 35,37 + + + + Add device + + src/components/header/header.html + 63 + + + + Firmware update required + + src/components/header/header.html + 70 + + + + firmware is outdated, the Ctrl app won't work correctly. Current firmware: Minimum recommended firmware: +Check latest firmware releases + + src/components/header/header.html + 71,77 + + + + Got it! + + src/components/header/header.html + 80 + + + + Controller model undefined + + src/components/header/header.html + 85 + + + + The identifier for the controller model cannot be read. The app functionality is limited without this piece of information. A privacy protector (for example Brave Shields) could be blocking the access to it. + + src/components/header/header.html + 86,91 + + + + Close + + src/components/header/header.html + 93 + + + src/components/profile/section.html + 630 + + + + Setup in Steam Deck / Arch Linux + + src/components/help/help_deck.html + 6 + + + + Compatible browsers + + src/components/help/help_deck.html + 9 + + + src/components/help/help_linux.html + 9 + + + src/components/help/help_windows.html + 9 + + + + Chrome / Chromium. + + src/components/help/help_deck.html + 11 + + + src/components/help/help_linux.html + 11 + + + src/components/help/help_windows.html + 11 + + + + Brave. + + src/components/help/help_deck.html + 12 + + + src/components/help/help_linux.html + 12 + + + src/components/help/help_windows.html + 13 + + + + (Install with Discover) + + src/components/help/help_deck.html + 14 + + + + Protocol mode + + src/components/help/help_deck.html + 17 + + + src/components/help/help_linux.html + 16 + + + src/components/help/help_windows.html + 17 + + + + Controller must be either in Linux XInput mode, or in Generic mode. + + src/components/help/help_deck.html + 19 + + + src/components/help/help_linux.html + 18 + + + + Each mode have to be paired individually. + + src/components/help/help_deck.html + 20 + + + src/components/help/help_linux.html + 19 + + + src/components/help/help_windows.html + 20 + + + + Pair controller + + src/components/help/help_deck.html + 24 + + + src/components/help/help_linux.html + 23 + + + src/components/help/help_windows.html + 24 + + + + Click the Add device + button on the top right corner. + + src/components/help/help_deck.html + 26 + + + src/components/help/help_linux.html + 25 + + + src/components/help/help_windows.html + 26 + + + + Select Alpakka, Kapybara, or Dongle from the list. + + src/components/help/help_deck.html + 27 + + + src/components/help/help_linux.html + 26 + + + src/components/help/help_windows.html + 27 + + + + Setup in Debian / Ubuntu + + src/components/help/help_linux.html + 6 + + + + Known issues + + src/components/help/help_linux.html + 30 + + + src/components/help/help_windows.html + 31 + + + + The controller may have to be unplugged and plugged at least once after opening the browser. + + src/components/help/help_linux.html + 31 + + + src/components/help/help_windows.html + 32 + + + + Additional OS configuration + + src/components/help/help_linux.html + 34 + + + + Some distros may require additional Udev rules to allow access to USB devices. + + src/components/help/help_linux.html + 35 + + + + Create a file with udev rules: + + src/components/help/help_linux.html + 36 + + + + Reconnect the controller and verify the rule has been loaded by checking if /dev/webusb exist. + + src/components/help/help_linux.html + 43 + + + + If Chromium was installed using Snap, it may require additional permissions to access USB devices: + + src/components/help/help_linux.html + 44 + + + + Privacy policy + + src/components/help/help_privacy.html + 6 + + + src/components/sidebar/sidebar.html + 123 + + + + This Privacy Policy describes how ctrl.inputlabs.io (the "Site" or "we") collects, uses, and discloses your Personal Information when you visit the Site. + + src/components/help/help_privacy.html + 7 + + + + Contact + + src/components/help/help_privacy.html + 10 + + + + After reviewing this policy, if you have additional questions, want more information about our privacy practices, or would like to make a complaint, please contact us by e-mail at or by mail using the details provided below: + + + src/components/help/help_privacy.html + 11,12 + + + + Lapinlahdenkatu 16, 00180 Helsinki, Finland. + + src/components/help/help_privacy.html + 12 + + + + Collecting Personal Information + + src/components/help/help_privacy.html + 15 + + + + When you visit the Site, we collect certain information about your device and your interaction with the Site. In this Privacy Policy, we refer to any information about an identifiable individual (including the information below) as "Personal Information". See the list below for more information about what Personal Information we collect and why. + + src/components/help/help_privacy.html + 16 + + + + Website aggregated usage data (NOT personally identifiable) + + src/components/help/help_privacy.html + 19 + + + + Purpose of collection: Determine if the website is working and serving everyone correctly, determine overall interest of website content. + + src/components/help/help_privacy.html + 21 + + + + Source of collection: collected automatically when you access our Site. + + src/components/help/help_privacy.html + 22 + + + + Disclosure for a business purpose: data kept by Plausible, then shared with Us. + + src/components/help/help_privacy.html + 23 + + + + Personal Information collected: version and agent of the web browser, approximate location, what pages are visited, referral link, outbound links, and how the users interact with the Site. + + src/components/help/help_privacy.html + 24 + + + + More details at: https://plausible.io/data-policy. + + src/components/help/help_privacy.html + 25 + + + + Logs on Content Delivery Network service + + src/components/help/help_privacy.html + 28 + + + + Purpose of collection: Cloudflare uses data of incoming requests to detect abuse and provide customers with usage metrics. + + src/components/help/help_privacy.html + 30 + + + + Source of collection: collected automatically when data is transferred to you. + + src/components/help/help_privacy.html + 31 + + + + Disclosure for a business purpose: data kept by Cloudflare, only shared with Us if manually requested. + + src/components/help/help_privacy.html + 32 + + + + Personal Information collected: may include but is not limited to IP addresses, traffic routing data, system configuration information, and other information about traffic to and from Customers’ websites, devices, applications, and/or networks. + + src/components/help/help_privacy.html + 33 + + + + More details at: https://www.cloudflare.com/en-gb/privacypolicy. + + src/components/help/help_privacy.html + 34 + + + + Sharing Personal Information + + src/components/help/help_privacy.html + 40 + + + + We share your Personal Information with service providers to help us provide our services, as described above. + + src/components/help/help_privacy.html + 41 + + + + Using Personal Information + + src/components/help/help_privacy.html + 44 + + + + We do not directly use Personally Identifiable Information on the Site for any purpose. + + src/components/help/help_privacy.html + 45 + + + + Lawful basis + + src/components/help/help_privacy.html + 47 + + + + Pursuant to the General Data Protection Regulation ("GDPR"), if you are a resident of the European Economic Area ("EEA"), we process your personal information under the following lawful bases: + + src/components/help/help_privacy.html + 48 + + + + Your consent; + + src/components/help/help_privacy.html + 50 + + + + The performance of the contract between you and the Site; + + src/components/help/help_privacy.html + 51 + + + + Compliance with our legal obligations; + + src/components/help/help_privacy.html + 52 + + + + To protect your vital interests; + + src/components/help/help_privacy.html + 53 + + + + To perform a task carried out in the public interest; + + src/components/help/help_privacy.html + 54 + + + + For our legitimate interests, which do not override your fundamental rights and freedoms. + + src/components/help/help_privacy.html + 55 + + + + Retention + + src/components/help/help_privacy.html + 58 + + + + When You visit the Site, our providers could retain your Personal Information for their operations (as described above) temporally unless you ask to erase this information. For more information on your right of erasure, please see the 'Your rights' section below. + + src/components/help/help_privacy.html + 59 + + + + Automatic decision-making + + src/components/help/help_privacy.html + 61 + + + + If you are a resident of the EEA, you have the right to object to processing based solely on automated decision-making (which includes profiling), when that decision-making has a legal effect on you or otherwise significantly affects you. + + src/components/help/help_privacy.html + 62 + + + + We DO NOT engage in fully automated decision-making that has a legal or otherwise significant effect using customer data. + + src/components/help/help_privacy.html + 63 + + + + Our provider Cloudflare may use limited automated decision-making to prevent abuse, that does not have a legal or otherwise significant effect on you. + + src/components/help/help_privacy.html + 64 + + + + Your rights + + src/components/help/help_privacy.html + 67 + + + + GDPR + + src/components/help/help_privacy.html + 69 + + + + If you are a resident of the EEA, you have the right to access the Personal Information we hold about you, to port it to a new service, and to ask that your Personal Information be corrected, updated, or erased. If you would like to exercise these rights, please contact us through the contact information above. + + src/components/help/help_privacy.html + 70 + + + + Local data + + src/components/help/help_privacy.html + 73 + + + + Cookies + + src/components/help/help_privacy.html + 75 + + + + The Site do NOT use cookies. + + src/components/help/help_privacy.html + 76 + + + + LocalStorage + + src/components/help/help_privacy.html + 78 + + + + The Site stores data locally in your browser to remember configurable website settings, that do NOT contain Personally Identifiable Information, are not unique, and are NOT transmitted outside your device. + + src/components/help/help_privacy.html + 79 + + + + Do Not Track + + src/components/help/help_privacy.html + 82 + + + + Please note that because there is no consistent industry understanding of how to respond to "Do Not Track" signals, we do not alter our data collection and usage practices when we detect such a signal from your browser. + + src/components/help/help_privacy.html + 83 + + + + Changes + + src/components/help/help_privacy.html + 86 + + + + We may update this Privacy Policy from time to time in order to reflect, for example, changes to our practices or for other operational, legal, or regulatory reasons. + + src/components/help/help_privacy.html + 87 + + + + Complaints + + src/components/help/help_privacy.html + 90 + + + + As noted above, if you would like to make a complaint, please contact us by e-mail or by mail using the details provided under "Contact" above. + + src/components/help/help_privacy.html + 91 + + + + If you are not satisfied with our response to your complaint, you have the right to lodge your complaint with the relevant data protection authority. + + src/components/help/help_privacy.html + 92 + + + + Install Ctrl app + + src/components/help/help_pwa.html + 6 + + + + Progressive Web App + + src/components/help/help_pwa.html + 9 + + + + The Ctrl app is a PWA that can be installed like a native OS app, and get many benefits: + + src/components/help/help_pwa.html + 10 + + + + Full operating system integration with launcher icon, taskbar icon, etc. + + src/components/help/help_pwa.html + 12 + + + + Clean window without browser tabs nor borders. + + src/components/help/help_pwa.html + 13 + + + + Offline support. + + src/components/help/help_pwa.html + 14 + + + + Guaranteed cache / faster loading times. + + src/components/help/help_pwa.html + 15 + + + + How to install + + src/components/help/help_pwa.html + 19 + + + + In Chrome / Edge / Brave, an Install app icon shows up on the right side of the URL bar. + + src/components/help/help_pwa.html + 20 + + + + Setup in Windows + + src/components/help/help_windows.html + 6 + + + src/components/sidebar/sidebar.html + 107 + + + + Edge. + + src/components/help/help_windows.html + 12 + + + + Controller must be either in Windows XInput mode, or in Generic mode. + + src/components/help/help_windows.html + 19 + + + + Firmware logs + + src/components/logs/logs.html + 7 + + + + Enable USB logs + + src/components/logs/logs.html + 12 + + + + Enable wireless logs + + src/components/logs/logs.html + 21 + + + + Enable touch sensor logs + + src/components/logs/logs.html + 30 + + + + Download logs + + src/components/logs/logs.html + 39 + + + + Clear logs + + src/components/logs/logs.html + 47 + + + + Try using the restart button + + src/components/logs/logs.html + 55 + + + + No logs in here + + src/components/logs/logs.html + 56 + + + + Commands + + src/components/logs/logs.html + 62 + + + + Restart + + src/components/logs/logs.html + 63 + + + + Restart in bootsel mode + + src/components/logs/logs.html + 64 + + + + Calibrate + + src/components/logs/logs.html + 65 + + + + Reset config + + src/components/logs/logs.html + 66 + + + src/components/logs/logs.html + 94 + + + + Reset all profiles + + src/components/logs/logs.html + 67 + + + src/components/logs/logs.html + 99 + + + + Reset to factory settings + + src/components/logs/logs.html + 68 + + + + Unpair + + src/components/logs/logs.html + 69 + + + src/components/logs/logs.html + 133 + + + + Controller calibration + + src/components/logs/logs.html + 73 + + + + The gyroscopes, accelerometers, and thumbstick will be calibrated, leave the controller on a flat surface and wait until the procedure is completed. + + src/components/logs/logs.html + 74,78 + + + + Cancel + + src/components/logs/logs.html + 80 + + + src/components/logs/logs.html + 93 + + + src/components/logs/logs.html + 106 + + + src/components/logs/logs.html + 120 + + + src/components/logs/logs.html + 132 + + + src/components/tune/tune.html + 54 + + + + Start + + src/components/logs/logs.html + 81 + + + src/components/profile/section.html + 296 + + + src/components/profile/section.ts + 322 + + + + Reset config values + + src/components/logs/logs.html + 86 + + + + All config values will be discarded (calibration, protocol mode, sensitivities, etc). Profiles won't be affected. The controller will restart in default Windows mode. + + src/components/logs/logs.html + 87,91 + + + + All profiles will be restored to default built-in profiles (as defined in the manual). Current profiles will be lost forever. + + src/components/logs/logs.html + 100,104 + + + + Reset profiles + + src/components/logs/logs.html + 107 + + + + Reset to factory defaults + + src/components/logs/logs.html + 112 + + + + All config values will be discarded (calibration, protocol mode, sensitivities, etc). Profiles will be restored to built-in defaults. The controller will restart in default Windows mode. + + src/components/logs/logs.html + 113,118 + + + + Reset to factory + + src/components/logs/logs.html + 121 + + + + Unpair controller + + src/components/logs/logs.html + 126 + + + + The current device ( ) will be disconnected and removed from the list of paired devices. + + src/components/logs/logs.html + 127,130 + + + + Add actions + + src/components/profile/action_selector.html + 13,15 + + + + Add label + + src/components/profile/action_selector.html + 40 + + + + The dongle does not store profiles. + + src/components/profile/profile.html + 10 + + + + Select a controller in the top-right corner + + src/components/profile/profile.html + 11 + + + + Profile + + src/components/profile/section.html + 8 + + + + Name: + + src/components/profile/section.html + 10 + + + + Copy profile from: + + src/components/profile/section.html + 21 + + + + Select a profile + + src/components/profile/section.html + 26 + + + + Default - FPS Fusion + + src/components/profile/section.html + 39 + + + + Default - FPS WASD + + src/components/profile/section.html + 40 + + + + Default - Racing + + src/components/profile/section.html + 41 + + + + Default - Flight + + src/components/profile/section.html + 42 + + + + Default - Console + + src/components/profile/section.html + 43 + + + + Default - Console Legacy + + src/components/profile/section.html + 44 + + + + Default - Desktop + + src/components/profile/section.html + 45 + + + + Default - RTS + + src/components/profile/section.html + 46 + + + + Default - Custom (empty) + + src/components/profile/section.html + 47 + + + + Import / export: + + src/components/profile/section.html + 51 + + + + Load from file + + src/components/profile/section.html + 53,60 + + + + Save to file + + src/components/profile/section.html + 62 + + + + Home button + + src/components/profile/section.html + 68 + + + + Home button mappings are not configurable yet. + + src/components/profile/section.html + 69 + + + + Holding (pink) the Home button, enables the shortcuts from the Home profile. These can be modified in the Home profile page. + + src/components/profile/section.html + 70 + + + + Double-clicking (purple) the Home button, emulates the native gamepad home/guide button. + + src/components/profile/section.html + 71 + + + + Double-clicking and holding the Home button allows for shortcuts such as "Guide+X" when pressing other buttons. + + src/components/profile/section.html + 72 + + + + Long press + + src/components/profile/section.html + 86 + + + + Double press + + src/components/profile/section.html + 95 + + + + Immediate / trigger both + + src/components/profile/section.html + 104 + + + + Very long press + + src/components/profile/section.html + 113 + + + + Home cycle + + src/components/profile/section.html + 122 + + + + On scroll up: + + src/components/profile/section.html + 151 + + + + On scroll down: + + src/components/profile/section.html + 152 + + + + Mode: + + src/components/profile/section.html + 168 + + + src/components/profile/section.html + 257 + + + + Off + + src/components/profile/section.html + 173 + + + src/components/profile/section.html + 262 + + + + 4 directions + + src/components/profile/section.html + 174 + + + + 8 directions (only digital) + + src/components/profile/section.html + 175 + + + + Alphanumeric + + src/components/profile/section.html + 176 + + + + Analog distance calculation: + + src/components/profile/section.html + 180 + + + + Axial + + src/components/profile/section.html + 185 + + + + Radial + + src/components/profile/section.html + 186 + + + + Saturation: + + src/components/profile/section.html + 190 + + + + Axis overlap: + + src/components/profile/section.html + 203 + + + + Deadzone: + + src/components/profile/section.html + 216 + + + + Override global deadzone + + src/components/profile/section.html + 219 + + + + Anti-deadzone: + + src/components/profile/section.html + 239 + + + + Always On + + src/components/profile/section.html + 263 + + + + Touch Off + + src/components/profile/section.html + 264 + + + + Touch On + + src/components/profile/section.html + 265 + + + + As absolute axis + + src/components/profile/section.html + 266 + + + + Engage surface/button: + + src/components/profile/section.html + 270 + + + + None + + src/components/profile/section.html + 275 + + + + Hexagon surface (rc) + + src/components/profile/section.html + 276 + + + + Hexagon surface + + src/components/profile/section.html + 277 + + + + DPad Left + + src/components/profile/section.html + 282 + + + src/components/profile/section.ts + 316 + + + + DPad Right + + src/components/profile/section.html + 283 + + + src/components/profile/section.ts + 317 + + + + DPad Up + + src/components/profile/section.html + 284 + + + src/components/profile/section.ts + 318 + + + + DPad Down + + src/components/profile/section.html + 285 + + + src/components/profile/section.ts + 319 + + + + Select + + src/components/profile/section.html + 294 + + + src/components/profile/section.ts + 320 + + + + Select (2) + + src/components/profile/section.html + 295 + + + src/components/profile/section.ts + 321 + + + + Start (2) + + src/components/profile/section.html + 297 + + + src/components/profile/section.ts + 323 + + + + On axis rotation (negative): + + src/components/profile/section.html + 306 + + + + On axis rotation (positive): + + src/components/profile/section.html + 317 + + + + Min Angle: + + src/components/profile/section.html + 328 + + + + Max Angle: + + src/components/profile/section.html + 341 + + + + SET PROFILE + + src/components/profile/section.html + 504,505 + + + + MACRO + + src/components/profile/section.html + 514,515 + + + + settingsPROTOCOL + + src/components/profile/section.html + 519 + + + + settingsMOUSE SENS + + src/components/profile/section.html + 520 + + + + settingsTOUCH SENS + + src/components/profile/section.html + 521 + + + + settingsTS DEADZONE + + src/components/profile/section.html + 522 + + + + CALIBRATE + + src/components/profile/section.html + 529 + + + + BOOTSEL + + src/components/profile/section.html + 530 + + + + PAIR + + src/components/profile/section.html + 531 + + + + SLEEP + + src/components/profile/section.html + 532 + + + + On the first press, until home is released: + + src/components/profile/section.ts + 100 + + + + On button press: + + src/components/profile/section.ts + 101 + + + + On short press: + + src/components/profile/section.ts + 102 + + + + On press (always): + + src/components/profile/section.ts + 103 + + + + On single press: + + src/components/profile/section.ts + 104 + + + src/components/profile/section.ts + 112 + + + + On first press (always): + + src/components/profile/section.ts + 105 + + + src/components/profile/section.ts + 113 + + + + On every press: + + src/components/profile/section.ts + 108 + + + + Otherwise on long press: + + src/components/profile/section.ts + 109 + + + + On long press: + + src/components/profile/section.ts + 110 + + + + Additionally on long press: + + src/components/profile/section.ts + 111 + + + + On double press: + + src/components/profile/section.ts + 116 + + + + Button A + + src/components/profile/section.ts + 312 + + + + Button B + + src/components/profile/section.ts + 313 + + + + Button X + + src/components/profile/section.ts + 314 + + + + Button Y + + src/components/profile/section.ts + 315 + + + + Trigger L1 + + src/components/profile/section.ts + 324 + + + + Trigger L2 + + src/components/profile/section.ts + 325 + + + + Trigger L4 + + src/components/profile/section.ts + 326 + + + + Trigger R1 + + src/components/profile/section.ts + 327 + + + + Trigger R2 + + src/components/profile/section.ts + 328 + + + + Trigger R4 + + src/components/profile/section.ts + 329 + + + + LStick Settings + + src/components/profile/section.ts + 330 + + + + LStick Left + + src/components/profile/section.ts + 331 + + + + LStick Right + + src/components/profile/section.ts + 332 + + + + LStick Up + + src/components/profile/section.ts + 333 + + + + LStick Down + + src/components/profile/section.ts + 334 + + + + LStick Up-Left + + src/components/profile/section.ts + 335 + + + + LStick Up-Right + + src/components/profile/section.ts + 336 + + + + LStick Down-Left + + src/components/profile/section.ts + 337 + + + + LStick Down-Right + + src/components/profile/section.ts + 338 + + + + LStick Push + + src/components/profile/section.ts + 339 + + + + LStick Inner + + src/components/profile/section.ts + 340 + + + + LStick Outer + + src/components/profile/section.ts + 341 + + + + RStick Settings + + src/components/profile/section.ts + 342 + + + + RStick Left + + src/components/profile/section.ts + 343 + + + + RStick Right + + src/components/profile/section.ts + 344 + + + + RStick Up + + src/components/profile/section.ts + 345 + + + + RStick Down + + src/components/profile/section.ts + 346 + + + + RStick Up-Left + + src/components/profile/section.ts + 347 + + + + RStick Up-Right + + src/components/profile/section.ts + 348 + + + + RStick Down-Left + + src/components/profile/section.ts + 349 + + + + RStick Down-Right + + src/components/profile/section.ts + 350 + + + + RStick Push + + src/components/profile/section.ts + 351 + + + + Rotary up + + src/components/profile/section.ts + 352 + + + + Rotary down + + src/components/profile/section.ts + 353 + + + + Gyro settings + + src/components/profile/section.ts + 354 + + + + Gyro Axis X + + src/components/profile/section.ts + 355 + + + + Gyro Axis Y + + src/components/profile/section.ts + 356 + + + + Gyro Axis Z + + src/components/profile/section.ts + 357 + + + + Advanced settings + + src/components/settings/settings.html + 7 + + + + Long calibration + + src/components/settings/settings.html + 11 + + + src/components/settings/settings.ts + 88 + + + + 4x longer + + src/components/settings/settings.html + 12 + + + + Swap gyros + + src/components/settings/settings.html + 23 + + + src/components/settings/settings.ts + 89 + + + + Left<->Right + + src/components/settings/settings.html + 24 + + + + Invert touch polarity + + src/components/settings/settings.html + 35 + + + src/components/settings/settings.ts + 90 + + + + Charge vs Discharge + + src/components/settings/settings.html + 36 + + + + Gyro calibration tweak + + src/components/settings/settings.html + 47 + + + src/components/settings/settings.html + 65 + + + src/components/settings/settings.html + 83 + + + src/components/settings/settings.ts + 91 + + + + X axis + + src/components/settings/settings.html + 48 + + + + Y axis + + src/components/settings/settings.html + 66 + + + + Z axis + + src/components/settings/settings.html + 84 + + + + Thumbstick smoothing + + src/components/settings/settings.html + 101 + + + + Samples + + src/components/settings/settings.html + 102 + + + + Makes sense + + src/components/settings/settings.html + 123 + + + + In some cases the drift could be changing direction so slowly that a normal calibration is + not able to capture it completely. A longer calibration will do a better job + averaging the drift.<br><br> + After enabling this setting, any new calibration procedure will take 4x times longer. + + src/components/settings/settings.ts + 95,98 + + + + In some cases one of the IMU sensors could be more sensitive to temperature-induced drift, + since each gyroscope sensor is configured in a slightly different way, swapping their roles + could help preventing this issue.<br><br> + A re-calibration is required after enabling this feature. + + src/components/settings/settings.ts + 100,103 + + + + The touch sensor works by measuring how long it takes to charge up or charge down the touch + plate (and anything that touches it). This polarity setting controls which one it is + (up or down).<br><br> + If you are having problems with the touch sensor, this feature could help making the + measurements more stable. + + src/components/settings/settings.ts + 105,109 + + + + Since the calibration has to be performed with the controller on a flat surface, it is + possible that the piezoelectric sensor has slightly different zero readings while tilted + back and held in a normal gaming position.<br><br> + If this problem is noticeable, it can be solved by manually adding additional offsets into + the calibration values. + + src/components/settings/settings.ts + 111,115 + + + + How many additional samples are used to calculate the final value of the thumbstick. + More samples provide a more stable output but also increase the perceived latency.<br><br> + Smoothing is disabled when the number of additional samples is set to zero (only + the current sample is used). + + src/components/settings/settings.ts + 117,120 + + + + Logs and commands + + src/components/sidebar/sidebar.html + 13 + + + + Protocol + + src/components/sidebar/sidebar.html + 17 + + + + Touch sensitivity + + src/components/sidebar/sidebar.html + 21 + + + src/components/tune/tune.ts + 177 + + + + Mouse sensitivity + + src/components/sidebar/sidebar.html + 25 + + + src/components/tune/tune.ts + 196 + + + + Thumbstick deadzone + + src/components/sidebar/sidebar.html + 29 + + + src/components/tune/tune.ts + 213 + + + + Advanced + + src/components/sidebar/sidebar.html + 33 + + + + App settings + + src/components/sidebar/sidebar.html + 37 + + + + Setup in Steam Deck + + src/components/sidebar/sidebar.html + 111 + + + + Setup in Linux + + src/components/sidebar/sidebar.html + 115 + + + + Install as an App + + src/components/sidebar/sidebar.html + 119 + + + + LED animation when using button shortcuts + + src/components/tune/tune.html + 15 + + + + Protocol change + + src/components/tune/tune.html + 49 + + + + The device will restart using a different protocol, you may have to pair the device again. + + src/components/tune/tune.html + 50,52 + + + + Change + + src/components/tune/tune.html + 55 + + + + Communication protocol + + src/components/tune/tune.ts + 162 + + + + and Steam Deck + + src/components/tune/tune.ts + 170 + + + + Generic + + src/components/tune/tune.ts + 171 + + + + aka DirectInput + + src/components/tune/tune.ts + 171 + + + + Auto low + + src/components/tune/tune.ts + 186 + + + + More stable + + src/components/tune/tune.ts + 186 + + + + Auto mid + + src/components/tune/tune.ts + 187 + + + + Default + + src/components/tune/tune.ts + 187 + + + + Auto high + + src/components/tune/tune.ts + 188 + + + + More responsive + + src/components/tune/tune.ts + 188 + + + + Custom 2 + + src/components/tune/tune.ts + 189 + + + + Custom 1 + + src/components/tune/tune.ts + 190 + + + + Low + + src/components/tune/tune.ts + 205 + + + src/components/tune/tune.ts + 220 + + + + Recommended for 1080p + + src/components/tune/tune.ts + 205 + + + + Mid + + src/components/tune/tune.ts + 206 + + + src/components/tune/tune.ts + 221 + + + + Recommended for 1440p + + src/components/tune/tune.ts + 206 + + + + High + + src/components/tune/tune.ts + 207 + + + src/components/tune/tune.ts + 222 + + + + Recommended for 4K + + src/components/tune/tune.ts + 207 + + + + Smaller center radius + + src/components/tune/tune.ts + 220 + + + + Bigger center radius + + src/components/tune/tune.ts + 222 + + + + Work in progress + + src/components/wip/wip.html + 6 + + + + This feature is not implemented yet + + src/components/wip/wip.html + 7 + + + + Missing Udev rules? + + src/services/webusb.ts + 83 + + + + Try re-plugging the controller. + + src/services/webusb.ts + 85 + + + + + diff --git a/src/locale/messages.zh-CN.xlf b/src/locale/messages.zh-CN.xlf new file mode 100644 index 0000000..33a3a99 --- /dev/null +++ b/src/locale/messages.zh-CN.xlf @@ -0,0 +1,2662 @@ + + + + + + Controller not found + 控制器未找到 + + src/components/central/central.html + 19 + + + + How to setup + 如何设置? + + src/components/central/central.html + 20 + + + src/components/central/central.html + 35 + + + + There was a problem + 发生问题了 + + src/components/central/central.html + 32 + + + + Browser not compatible + 浏览器不兼容 + + src/components/central/central.html + 48 + + + + This browser do not support WebUSB + 该浏览器不支持 WebUSB + + src/components/central/central.html + 49,51 + + + + Settings + 设置 + + src/components/header/header.html + 17,19 + + + + Profiles + 配置 + + src/components/header/header.html + 26,28 + + + + Help + 帮助 + + src/components/header/header.html + 35,37 + + + + Add device + 添加设备 + + src/components/header/header.html + 63 + + + + Firmware update required + 需要更新固件 + + src/components/header/header.html + 70 + + + + firmware is outdated, the Ctrl app won't work correctly. Current firmware: Minimum recommended firmware: +Check latest firmware releases + 固件已过时,Ctrl 应用程序将无法正常工作。 当前 固件: 建议最低固件:+查看最新固件版本 + + src/components/header/header.html + 71,77 + + + + Got it! + 知道了! + + src/components/header/header.html + 80 + + + + Controller model undefined + 控制器型号未定义 + + src/components/header/header.html + 85 + + + + The identifier for the controller model cannot be read. The app functionality is limited without this piece of information. A privacy protector (for example Brave Shields) could be blocking the access to it. + 无法读取控制器型号的标识符。如果没有此信息,应用功能将受到限制。隐私保护程序(例如 Brave Shields)可能阻止了对它的访问。 + + src/components/header/header.html + 86,91 + + + + Close + 关闭 + + src/components/header/header.html + 93 + + + src/components/profile/section.html + 630 + + + + Setup in Steam Deck / Arch Linux + 在 Steam Deck / Arch Linux 设置 + + src/components/help/help_deck.html + 6 + + + + Compatible browsers + 兼容的浏览器 + + src/components/help/help_deck.html + 9 + + + src/components/help/help_linux.html + 9 + + + src/components/help/help_windows.html + 9 + + + + Chrome / Chromium. + Chrome / Chromium + + src/components/help/help_deck.html + 11 + + + src/components/help/help_linux.html + 11 + + + src/components/help/help_windows.html + 11 + + + + Brave. + Brave + + src/components/help/help_deck.html + 12 + + + src/components/help/help_linux.html + 12 + + + src/components/help/help_windows.html + 13 + + + + (Install with Discover) + (通过 Discover 安装) + + src/components/help/help_deck.html + 14 + + + + Protocol mode + 协议模式 + + src/components/help/help_deck.html + 17 + + + src/components/help/help_linux.html + 16 + + + src/components/help/help_windows.html + 17 + + + + Controller must be either in Linux XInput mode, or in Generic mode. + 控制器必须处于Linux XInput模式,或者通用模式。 + + src/components/help/help_deck.html + 19 + + + src/components/help/help_linux.html + 18 + + + + Each mode have to be paired individually. + 每种模式都必须单独配对。 + + src/components/help/help_deck.html + 20 + + + src/components/help/help_linux.html + 19 + + + src/components/help/help_windows.html + 20 + + + + Pair controller + 配对控制器 + + src/components/help/help_deck.html + 24 + + + src/components/help/help_linux.html + 23 + + + src/components/help/help_windows.html + 24 + + + + Click the Add device + button on the top right corner. + 点击右上角的添加设备 +按钮添加。 + + src/components/help/help_deck.html + 26 + + + src/components/help/help_linux.html + 25 + + + src/components/help/help_windows.html + 26 + + + + Select Alpakka, Kapybara, or Dongle from the list. + 从列表中选择AlpakkaKapybara,或Dongle + + src/components/help/help_deck.html + 27 + + + src/components/help/help_linux.html + 26 + + + src/components/help/help_windows.html + 27 + + + + Setup in Debian / Ubuntu + 在 Debian / Ubuntu 设置 + + src/components/help/help_linux.html + 6 + + + + Known issues + 已知问题 + + src/components/help/help_linux.html + 30 + + + src/components/help/help_windows.html + 31 + + + + The controller may have to be unplugged and plugged at least once after opening the browser. + 打开浏览器后,可能需要至少插拔一次控制器。 + + src/components/help/help_linux.html + 31 + + + src/components/help/help_windows.html + 32 + + + + Additional OS configuration + 额外的操作系统配置 + + src/components/help/help_linux.html + 34 + + + + Some distros may require additional Udev rules to allow access to USB devices. + 一些系统发行版可能需要额外的 Udev 规则来允许访问 USB 设备。 + + src/components/help/help_linux.html + 35 + + + + Create a file with udev rules: + 创建包含 udev 规则的文件: + + src/components/help/help_linux.html + 36 + + + + Reconnect the controller and verify the rule has been loaded by checking if /dev/webusb exist. + 重新连接控制器并检查/dev/webusb文件是否存在以验证规则是否正常加载。 + + src/components/help/help_linux.html + 43 + + + + If Chromium was installed using Snap, it may require additional permissions to access USB devices: + 如果使用Snap安装的 Chromium 浏览器,则可能需要额外的权限才能访问 USB 设备: + + src/components/help/help_linux.html + 44 + + + + Privacy policy + 隐私政策 + + src/components/help/help_privacy.html + 6 + + + src/components/sidebar/sidebar.html + 123 + + + + This Privacy Policy describes how ctrl.inputlabs.io (the "Site" or "we") collects, uses, and discloses your Personal Information when you visit the Site. + 本隐私政策描述了 ctrl.inputlabs.io(“网站”或“我们”)在您访问网站时如何收集、使用和披露您的个人信息。 + + src/components/help/help_privacy.html + 7 + + + + Contact + + src/components/help/help_privacy.html + 10 + + + + After reviewing this policy, if you have additional questions, want more information about our privacy practices, or would like to make a complaint, please contact us by e-mail at or by mail using the details provided below: + + + src/components/help/help_privacy.html + 11,12 + + + + Lapinlahdenkatu 16, 00180 Helsinki, Finland. + + src/components/help/help_privacy.html + 12 + + + + Collecting Personal Information + + src/components/help/help_privacy.html + 15 + + + + When you visit the Site, we collect certain information about your device and your interaction with the Site. In this Privacy Policy, we refer to any information about an identifiable individual (including the information below) as "Personal Information". See the list below for more information about what Personal Information we collect and why. + + src/components/help/help_privacy.html + 16 + + + + Website aggregated usage data (NOT personally identifiable) + + src/components/help/help_privacy.html + 19 + + + + Purpose of collection: Determine if the website is working and serving everyone correctly, determine overall interest of website content. + + src/components/help/help_privacy.html + 21 + + + + Source of collection: collected automatically when you access our Site. + + src/components/help/help_privacy.html + 22 + + + + Disclosure for a business purpose: data kept by Plausible, then shared with Us. + + src/components/help/help_privacy.html + 23 + + + + Personal Information collected: version and agent of the web browser, approximate location, what pages are visited, referral link, outbound links, and how the users interact with the Site. + + src/components/help/help_privacy.html + 24 + + + + More details at: https://plausible.io/data-policy. + + src/components/help/help_privacy.html + 25 + + + + Logs on Content Delivery Network service + + src/components/help/help_privacy.html + 28 + + + + Purpose of collection: Cloudflare uses data of incoming requests to detect abuse and provide customers with usage metrics. + + src/components/help/help_privacy.html + 30 + + + + Source of collection: collected automatically when data is transferred to you. + + src/components/help/help_privacy.html + 31 + + + + Disclosure for a business purpose: data kept by Cloudflare, only shared with Us if manually requested. + + src/components/help/help_privacy.html + 32 + + + + Personal Information collected: may include but is not limited to IP addresses, traffic routing data, system configuration information, and other information about traffic to and from Customers’ websites, devices, applications, and/or networks. + + src/components/help/help_privacy.html + 33 + + + + More details at: https://www.cloudflare.com/en-gb/privacypolicy. + + src/components/help/help_privacy.html + 34 + + + + Sharing Personal Information + + src/components/help/help_privacy.html + 40 + + + + We share your Personal Information with service providers to help us provide our services, as described above. + + src/components/help/help_privacy.html + 41 + + + + Using Personal Information + + src/components/help/help_privacy.html + 44 + + + + We do not directly use Personally Identifiable Information on the Site for any purpose. + + src/components/help/help_privacy.html + 45 + + + + Lawful basis + + src/components/help/help_privacy.html + 47 + + + + Pursuant to the General Data Protection Regulation ("GDPR"), if you are a resident of the European Economic Area ("EEA"), we process your personal information under the following lawful bases: + + src/components/help/help_privacy.html + 48 + + + + Your consent; + + src/components/help/help_privacy.html + 50 + + + + The performance of the contract between you and the Site; + + src/components/help/help_privacy.html + 51 + + + + Compliance with our legal obligations; + + src/components/help/help_privacy.html + 52 + + + + To protect your vital interests; + + src/components/help/help_privacy.html + 53 + + + + To perform a task carried out in the public interest; + + src/components/help/help_privacy.html + 54 + + + + For our legitimate interests, which do not override your fundamental rights and freedoms. + + src/components/help/help_privacy.html + 55 + + + + Retention + + src/components/help/help_privacy.html + 58 + + + + When You visit the Site, our providers could retain your Personal Information for their operations (as described above) temporally unless you ask to erase this information. For more information on your right of erasure, please see the 'Your rights' section below. + + src/components/help/help_privacy.html + 59 + + + + Automatic decision-making + + src/components/help/help_privacy.html + 61 + + + + If you are a resident of the EEA, you have the right to object to processing based solely on automated decision-making (which includes profiling), when that decision-making has a legal effect on you or otherwise significantly affects you. + + src/components/help/help_privacy.html + 62 + + + + We DO NOT engage in fully automated decision-making that has a legal or otherwise significant effect using customer data. + + src/components/help/help_privacy.html + 63 + + + + Our provider Cloudflare may use limited automated decision-making to prevent abuse, that does not have a legal or otherwise significant effect on you. + + src/components/help/help_privacy.html + 64 + + + + Your rights + + src/components/help/help_privacy.html + 67 + + + + GDPR + + src/components/help/help_privacy.html + 69 + + + + If you are a resident of the EEA, you have the right to access the Personal Information we hold about you, to port it to a new service, and to ask that your Personal Information be corrected, updated, or erased. If you would like to exercise these rights, please contact us through the contact information above. + + src/components/help/help_privacy.html + 70 + + + + Local data + + src/components/help/help_privacy.html + 73 + + + + Cookies + + src/components/help/help_privacy.html + 75 + + + + The Site do NOT use cookies. + + src/components/help/help_privacy.html + 76 + + + + LocalStorage + + src/components/help/help_privacy.html + 78 + + + + The Site stores data locally in your browser to remember configurable website settings, that do NOT contain Personally Identifiable Information, are not unique, and are NOT transmitted outside your device. + + src/components/help/help_privacy.html + 79 + + + + Do Not Track + + src/components/help/help_privacy.html + 82 + + + + Please note that because there is no consistent industry understanding of how to respond to "Do Not Track" signals, we do not alter our data collection and usage practices when we detect such a signal from your browser. + + src/components/help/help_privacy.html + 83 + + + + Changes + + src/components/help/help_privacy.html + 86 + + + + We may update this Privacy Policy from time to time in order to reflect, for example, changes to our practices or for other operational, legal, or regulatory reasons. + + src/components/help/help_privacy.html + 87 + + + + Complaints + + src/components/help/help_privacy.html + 90 + + + + As noted above, if you would like to make a complaint, please contact us by e-mail or by mail using the details provided under "Contact" above. + + src/components/help/help_privacy.html + 91 + + + + If you are not satisfied with our response to your complaint, you have the right to lodge your complaint with the relevant data protection authority. + + src/components/help/help_privacy.html + 92 + + + + Install Ctrl app + 安装 Ctrl app 应用 + + src/components/help/help_pwa.html + 6 + + + + Progressive Web App + 渐进式 Web 应用 + + src/components/help/help_pwa.html + 9 + + + + The Ctrl app is a PWA that can be installed like a native OS app, and get many benefits: + Ctrl app 现在是一个 PWA(渐进式 Web 应用),可以像本机系统应用程序一样安装,并获得许多好处: + + src/components/help/help_pwa.html + 10 + + + + Full operating system integration with launcher icon, taskbar icon, etc. + 与启动器图标、任务栏图标等完全集成的操作系统。 + + src/components/help/help_pwa.html + 12 + + + + Clean window without browser tabs nor borders. + 干净的窗口,没有浏览器标签或边框。 + + src/components/help/help_pwa.html + 13 + + + + Offline support. + 支持离线使用。 + + src/components/help/help_pwa.html + 14 + + + + Guaranteed cache / faster loading times. + 保证缓存/更快的加载时间。 + + src/components/help/help_pwa.html + 15 + + + + How to install + 如何安装 + + src/components/help/help_pwa.html + 19 + + + + In Chrome / Edge / Brave, an Install app icon shows up on the right side of the URL bar. + 在 Chrome / Edge / Brave 中,地址栏右侧会显示一个安装应用图标。 + + src/components/help/help_pwa.html + 20 + + + + Setup in Windows + 在 Windows 设置 + + src/components/help/help_windows.html + 6 + + + src/components/sidebar/sidebar.html + 107 + + + + Edge. + Edge + + src/components/help/help_windows.html + 12 + + + + Controller must be either in Windows XInput mode, or in Generic mode. + 控制器必须处于Windows XInput模式,或者处于通用模式。 + + src/components/help/help_windows.html + 19 + + + + Firmware logs + 固件日志 + + src/components/logs/logs.html + 7 + + + + Enable USB logs + 启用 USB 日志 + + src/components/logs/logs.html + 12 + + + + Enable wireless logs + 启用无线日志 + + src/components/logs/logs.html + 21 + + + + Enable touch sensor logs + 启用触摸传感器日志 + + src/components/logs/logs.html + 30 + + + + Download logs + 下载日志 + + src/components/logs/logs.html + 39 + + + + Clear logs + 清除日志 + + src/components/logs/logs.html + 47 + + + + Try using the restart button + 尝试使用重启按钮 + + src/components/logs/logs.html + 55 + + + + No logs in here + 这里没有任何日志 + + src/components/logs/logs.html + 56 + + + + Commands + 命令 + + src/components/logs/logs.html + 62 + + + + Restart + 重启 + + src/components/logs/logs.html + 63 + + + + Restart in bootsel mode + 重启到 bootsel 模式 + + src/components/logs/logs.html + 64 + + + + Calibrate + 校准 + + src/components/logs/logs.html + 65 + + + + Reset config + 重置设置 + + src/components/logs/logs.html + 66 + + + src/components/logs/logs.html + 94 + + + + Reset all profiles + 重置所有配置 + + src/components/logs/logs.html + 67 + + + src/components/logs/logs.html + 99 + + + + Reset to factory settings + 重置为出厂设置 + + src/components/logs/logs.html + 68 + + + + Unpair + 取消配对 + + src/components/logs/logs.html + 69 + + + src/components/logs/logs.html + 133 + + + + Controller calibration + 控制器校准 + + src/components/logs/logs.html + 73 + + + + The gyroscopes, accelerometers, and thumbstick will be calibrated, leave the controller on a flat surface and wait until the procedure is completed. + 陀螺仪、加速度传感器和摇杆将被校准,请将控制器放在平坦的表面上并等待该校准过程完成。 + + src/components/logs/logs.html + 74,78 + + + + Cancel + 撤销 + + src/components/logs/logs.html + 80 + + + src/components/logs/logs.html + 93 + + + src/components/logs/logs.html + 106 + + + src/components/logs/logs.html + 120 + + + src/components/logs/logs.html + 132 + + + src/components/tune/tune.html + 54 + + + + Start + 开始 + + src/components/logs/logs.html + 81 + + + src/components/profile/section.html + 296 + + + src/components/profile/section.ts + 322 + + + + Reset config values + 重置设置值 + + src/components/logs/logs.html + 86 + + + + All config values will be discarded (calibration, protocol mode, sensitivities, etc). Profiles won't be affected. The controller will restart in default Windows mode. + 所有设置值都将被丢弃(校准、协议模式、灵敏度等)。配置文件不会受到影响。控制器将在默认 Windows 模式下重新启动。 + + src/components/logs/logs.html + 87,91 + + + + All profiles will be restored to default built-in profiles (as defined in the manual). Current profiles will be lost forever. + 所有配置文件都将恢复为默认内置配置文件(如手册中所定义)。当前配置文件将永远丢失。 + + src/components/logs/logs.html + 100,104 + + + + Reset profiles + 重置配置 + + src/components/logs/logs.html + 107 + + + + Reset to factory defaults + 重置为出厂默认设置 + + src/components/logs/logs.html + 112 + + + + All config values will be discarded (calibration, protocol mode, sensitivities, etc). Profiles will be restored to built-in defaults. The controller will restart in default Windows mode. + 所有设置值将被丢弃(校准、协议模式、灵敏度等)。配置文件将恢复为内置默认值。控制器将在默认 Windows 模式下重新启动。 + + src/components/logs/logs.html + 113,118 + + + + Reset to factory + 恢复出厂设置 + + src/components/logs/logs.html + 121 + + + + Unpair controller + 取消配对控制器 + + src/components/logs/logs.html + 126 + + + + The current device ( ) will be disconnected and removed from the list of paired devices. + 当前设备( )将断开连接并从配对设备列表中删除。 + + src/components/logs/logs.html + 127,130 + + + + Add actions + 添加操作 + + src/components/profile/action_selector.html + 13,15 + + + + Add label + 添加标签 + + src/components/profile/action_selector.html + 40 + + + + The dongle does not store profiles. + 加密狗接收器不存储配置文件。 + + src/components/profile/profile.html + 10 + + + + Select a controller in the top-right corner + 在右上角选择一个控制器 + + src/components/profile/profile.html + 11 + + + + Profile + 配置 + + src/components/profile/section.html + 8 + + + + Name: + 名称: + + src/components/profile/section.html + 10 + + + + Copy profile from: + 从以下配置复制: + + src/components/profile/section.html + 21 + + + + Select a profile + 选择一个配置 + + src/components/profile/section.html + 26 + + + + Default - FPS Fusion + 默认 - FPS 融合 + + src/components/profile/section.html + 39 + + + + Default - FPS WASD + 默认 - FPS WASD + + src/components/profile/section.html + 40 + + + + Default - Racing + 默认 - 赛车 + + src/components/profile/section.html + 41 + + + + Default - Flight + 默认 - 飞行 + + src/components/profile/section.html + 42 + + + + Default - Console + 默认 - 主机游戏 + + src/components/profile/section.html + 43 + + + + Default - Console Legacy + 默认 - 传统主机游戏 + + src/components/profile/section.html + 44 + + + + Default - Desktop + 默认 - 桌面 + + src/components/profile/section.html + 45 + + + + Default - RTS + 默认 - RTS + + src/components/profile/section.html + 46 + + + + Default - Custom (empty) + 默认 - 自定义(空) + + src/components/profile/section.html + 47 + + + + Import / export: + 导入 / 导出: + + src/components/profile/section.html + 51 + + + + Load from file + 从配置文件加载 + + src/components/profile/section.html + 53,60 + + + + Save to file + 保存为文件 + + src/components/profile/section.html + 62 + + + + Home button + Home 键 + + src/components/profile/section.html + 68 + + + + Home button mappings are not configurable yet. + Home 键映射尚未配置。 + + src/components/profile/section.html + 69 + + + + Holding (pink) the Home button, enables the shortcuts from the Home profile. These can be modified in the Home profile page. + 按住(粉色)Home 键,即可启用主页配置中的快捷键。这些快捷键可在主页配置页中进行修改。 + + src/components/profile/section.html + 70 + + + + Double-clicking (purple) the Home button, emulates the native gamepad home/guide button. + 双击(紫色)Home 键,模拟原生游戏手柄的 Home/Guide 键。 + + src/components/profile/section.html + 71 + + + + Double-clicking and holding the Home button allows for shortcuts such as "Guide+X" when pressing other buttons. + 双击并按住 Home 键可在按下其他按钮时使用诸如“Guide+X”之类的快捷键。 + + src/components/profile/section.html + 72 + + + + Long press + 短按 + + src/components/profile/section.html + 86 + + + + Double press + 双击 + + src/components/profile/section.html + 95 + + + + Immediate / trigger both + 立即 / 触发两者 + + src/components/profile/section.html + 104 + + + + Very long press + 长按 + + src/components/profile/section.html + 113 + + + + Home cycle + + src/components/profile/section.html + 122 + + + + On scroll up: + 向上滚动时: + + src/components/profile/section.html + 151 + + + + On scroll down: + 向下滚动时: + + src/components/profile/section.html + 152 + + + + Mode: + 模式: + + src/components/profile/section.html + 168 + + + src/components/profile/section.html + 257 + + + + Off + + + src/components/profile/section.html + 173 + + + src/components/profile/section.html + 262 + + + + 4 directions + 4 向 + + src/components/profile/section.html + 174 + + + + 8 directions (only digital) + 8 向(仅限 digital) + + src/components/profile/section.html + 175 + + + + Alphanumeric + Alphanumeric + + src/components/profile/section.html + 176 + + + + Analog distance calculation: + 模拟距离计算: + + src/components/profile/section.html + 180 + + + + Axial + 轴向 + + src/components/profile/section.html + 185 + + + + Radial + 径向 + + src/components/profile/section.html + 186 + + + + Saturation: + + src/components/profile/section.html + 190 + + + + Axis overlap: + 轴重叠: + + src/components/profile/section.html + 203 + + + + Deadzone: + 死区: + + src/components/profile/section.html + 216 + + + + Override global deadzone + 覆盖全局死区 + + src/components/profile/section.html + 219 + + + + Anti-deadzone: + 防死区: + + src/components/profile/section.html + 239 + + + + Always On + 保持开启 + + src/components/profile/section.html + 263 + + + + Touch Off + 触摸关闭 + + src/components/profile/section.html + 264 + + + + Touch On + 触摸开启 + + src/components/profile/section.html + 265 + + + + As absolute axis + 作为绝对轴 + + src/components/profile/section.html + 266 + + + + Engage surface/button: + + src/components/profile/section.html + 270 + + + + None + + + src/components/profile/section.html + 275 + + + + Hexagon surface (rc) + + src/components/profile/section.html + 276 + + + + Hexagon surface + + src/components/profile/section.html + 277 + + + + DPad Left + 方向键左 + + src/components/profile/section.html + 282 + + + src/components/profile/section.ts + 316 + + + + DPad Right + 方向键右 + + src/components/profile/section.html + 283 + + + src/components/profile/section.ts + 317 + + + + DPad Up + 方向键上 + + src/components/profile/section.html + 284 + + + src/components/profile/section.ts + 318 + + + + DPad Down + 方向键下 + + src/components/profile/section.html + 285 + + + src/components/profile/section.ts + 319 + + + + Select + 选择 + + src/components/profile/section.html + 294 + + + src/components/profile/section.ts + 320 + + + + Select (2) + 选择(2) + + src/components/profile/section.html + 295 + + + src/components/profile/section.ts + 321 + + + + Start (2) + 开始(2) + + src/components/profile/section.html + 297 + + + src/components/profile/section.ts + 323 + + + + On axis rotation (negative): + 当轴旋转(负): + + src/components/profile/section.html + 306 + + + + On axis rotation (positive): + 当轴旋转(正): + + src/components/profile/section.html + 317 + + + + Min Angle: + 最小角度: + + src/components/profile/section.html + 328 + + + + Max Angle: + 最大角度: + + src/components/profile/section.html + 341 + + + + SET PROFILE + 配置 + + src/components/profile/section.html + 504,505 + + + + MACRO + + + src/components/profile/section.html + 514,515 + + + + settingsPROTOCOL + settings输入协议 + + src/components/profile/section.html + 519 + + + + settingsMOUSE SENS + settings鼠标灵敏度 + + src/components/profile/section.html + 520 + + + + settingsTOUCH SENS + settings触摸灵敏度 + + src/components/profile/section.html + 521 + + + + settingsTS DEADZONE + settings摇杆死区 + + src/components/profile/section.html + 522 + + + + CALIBRATE + 校准 + + src/components/profile/section.html + 529 + + + + BOOTSEL + + src/components/profile/section.html + 530 + + + + PAIR + 配对 + + src/components/profile/section.html + 531 + + + + SLEEP + 休眠 + + src/components/profile/section.html + 532 + + + + On the first press, until home is released: + 当第一次按下,直到释放 Home 键: + + src/components/profile/section.ts + 100 + + + + On button press: + 按下按钮时: + + src/components/profile/section.ts + 101 + + + + On short press: + 短按时: + + src/components/profile/section.ts + 102 + + + + On press (always): + 按住时: + + src/components/profile/section.ts + 103 + + + + On single press: + 单击一次时: + + src/components/profile/section.ts + 104 + + + src/components/profile/section.ts + 112 + + + + On first press (always): + 第一次按住时: + + src/components/profile/section.ts + 105 + + + src/components/profile/section.ts + 113 + + + + On every press: + 每次按下时: + + src/components/profile/section.ts + 108 + + + + Otherwise on long press: + + src/components/profile/section.ts + 109 + + + + On long press: + 长按时: + + src/components/profile/section.ts + 110 + + + + Additionally on long press: + 当继续长按时: + + src/components/profile/section.ts + 111 + + + + On double press: + 双击时: + + src/components/profile/section.ts + 116 + + + + Button A + 按键 A + + src/components/profile/section.ts + 312 + + + + Button B + 按键 B + + src/components/profile/section.ts + 313 + + + + Button X + 按键 X + + src/components/profile/section.ts + 314 + + + + Button Y + 按键 Y + + src/components/profile/section.ts + 315 + + + + Trigger L1 + 按键 L1 + + src/components/profile/section.ts + 324 + + + + Trigger L2 + 扳机 L2 + + src/components/profile/section.ts + 325 + + + + Trigger L4 + 按键 L4 + + src/components/profile/section.ts + 326 + + + + Trigger R1 + 按键 R1 + + src/components/profile/section.ts + 327 + + + + Trigger R2 + 扳机 R2 + + src/components/profile/section.ts + 328 + + + + Trigger R4 + 按键 R4 + + src/components/profile/section.ts + 329 + + + + LStick Settings + 左摇杆设置 + + src/components/profile/section.ts + 330 + + + + LStick Left + 左摇杆左 + + src/components/profile/section.ts + 331 + + + + LStick Right + 左摇杆右 + + src/components/profile/section.ts + 332 + + + + LStick Up + 左摇杆上 + + src/components/profile/section.ts + 333 + + + + LStick Down + 左摇杆下 + + src/components/profile/section.ts + 334 + + + + LStick Up-Left + 左摇杆上左 + + src/components/profile/section.ts + 335 + + + + LStick Up-Right + 左摇杆上右 + + src/components/profile/section.ts + 336 + + + + LStick Down-Left + 左摇杆下左 + + src/components/profile/section.ts + 337 + + + + LStick Down-Right + 左摇杆下右 + + src/components/profile/section.ts + 338 + + + + LStick Push + 左摇杆按下 + + src/components/profile/section.ts + 339 + + + + LStick Inner + 左摇杆内层 + + src/components/profile/section.ts + 340 + + + + LStick Outer + 左摇杆外层 + + src/components/profile/section.ts + 341 + + + + RStick Settings + 右摇杆设置 + + src/components/profile/section.ts + 342 + + + + RStick Left + 右摇杆左 + + src/components/profile/section.ts + 343 + + + + RStick Right + 右摇杆右 + + src/components/profile/section.ts + 344 + + + + RStick Up + 右摇杆上 + + src/components/profile/section.ts + 345 + + + + RStick Down + 右摇杆下 + + src/components/profile/section.ts + 346 + + + + RStick Up-Left + 右摇杆上左 + + src/components/profile/section.ts + 347 + + + + RStick Up-Right + 右摇杆上右 + + src/components/profile/section.ts + 348 + + + + RStick Down-Left + 右摇杆下左 + + src/components/profile/section.ts + 349 + + + + RStick Down-Right + 右摇杆下右 + + src/components/profile/section.ts + 350 + + + + RStick Push + 右摇杆按下 + + src/components/profile/section.ts + 351 + + + + Rotary up + 向上旋转 + + src/components/profile/section.ts + 352 + + + + Rotary down + 向下旋转 + + src/components/profile/section.ts + 353 + + + + Gyro settings + 陀螺仪设置 + + src/components/profile/section.ts + 354 + + + + Gyro Axis X + 陀螺仪 X 轴 + + src/components/profile/section.ts + 355 + + + + Gyro Axis Y + 陀螺仪 Y 轴 + + src/components/profile/section.ts + 356 + + + + Gyro Axis Z + 陀螺仪 Z 轴 + + src/components/profile/section.ts + 357 + + + + Advanced settings + 高级设置 + + src/components/settings/settings.html + 7 + + + + Long calibration + 长校准 + + src/components/settings/settings.html + 11 + + + src/components/settings/settings.ts + 88 + + + + 4x longer + 4 倍校准时间 + + src/components/settings/settings.html + 12 + + + + Swap gyros + 交换陀螺仪 + + src/components/settings/settings.html + 23 + + + src/components/settings/settings.ts + 89 + + + + Left<->Right + 左右互换 + + src/components/settings/settings.html + 24 + + + + Invert touch polarity + 反转触摸极性 + + src/components/settings/settings.html + 35 + + + src/components/settings/settings.ts + 90 + + + + Charge vs Discharge + 充电与放电 + + src/components/settings/settings.html + 36 + + + + Gyro calibration tweak + 陀螺仪校准调整 + + src/components/settings/settings.html + 47 + + + src/components/settings/settings.html + 65 + + + src/components/settings/settings.html + 83 + + + src/components/settings/settings.ts + 91 + + + + X axis + X 轴 + + src/components/settings/settings.html + 48 + + + + Y axis + Y 轴 + + src/components/settings/settings.html + 66 + + + + Z axis + Z 轴 + + src/components/settings/settings.html + 84 + + + + Thumbstick smoothing + 摇杆平滑 + + src/components/settings/settings.html + 101 + + + + Samples + 示例 + + src/components/settings/settings.html + 102 + + + + Makes sense + 说的道理 + + src/components/settings/settings.html + 123 + + + + In some cases the drift could be changing direction so slowly that a normal calibration is + not able to capture it completely. A longer calibration will do a better job + averaging the drift.<br><br> + After enabling this setting, any new calibration procedure will take 4x times longer. + 在某些情况下,漂移方向的变化速度可能非常缓慢,以至于常规校准无法完全捕捉到它。较长的校准时间可以更好地平均漂移。<br><br> + 启用此设置后,任何新的校准过程都将花费 4 倍的时间。 + + src/components/settings/settings.ts + 95,98 + + + + In some cases one of the IMU sensors could be more sensitive to temperature-induced drift, + since each gyroscope sensor is configured in a slightly different way, swapping their roles + could help preventing this issue.<br><br> + A re-calibration is required after enabling this feature. + 在某些情况下,其中一个 IMU 传感器可能对温度引起的漂移更敏感,因为每个陀螺仪传感器的配置方式略有不同,互换它们可以帮助防止出现此问题。<br><br> + 启用此功能后需要重新校准。 + + src/components/settings/settings.ts + 100,103 + + + + The touch sensor works by measuring how long it takes to charge up or charge down the touch + plate (and anything that touches it). This polarity setting controls which one it is + (up or down).<br><br> + If you are having problems with the touch sensor, this feature could help making the + measurements more stable. + 触摸传感器的工作原理是测量触摸板(以及任何接触触摸板的东西)充电或放电所需的时间。此极性设置控制其极性向上或向下。<br><br> + 如果您在使用触摸传感器时遇到问题,此功能可以帮助使测量结果更稳定。 + + src/components/settings/settings.ts + 105,109 + + + + Since the calibration has to be performed with the controller on a flat surface, it is + possible that the piezoelectric sensor has slightly different zero readings while tilted + back and held in a normal gaming position.<br><br> + If this problem is noticeable, it can be solved by manually adding additional offsets into + the calibration values. + 由于必须在平坦表面上对控制器进行校准,因此压电传感器在向后倾斜并保持在正常游戏位置时可能出现略微不同的零读数。<br><br> + 如果此问题很明显,可以通过手动将额外的偏移量添加到校准值中来解决。 + + src/components/settings/settings.ts + 111,115 + + + + How many additional samples are used to calculate the final value of the thumbstick. + More samples provide a more stable output but also increase the perceived latency.<br><br> + Smoothing is disabled when the number of additional samples is set to zero (only + the current sample is used). + 用于计算摇杆最终值的额外采样数量。 + 采样数量越多,输出越稳定,但感知延迟也会增加。 + 当额外采样数量设置为零(仅使用当前采样)时,平滑功能将被禁用。 + + src/components/settings/settings.ts + 117,120 + + + + Logs and commands + 命令与日志 + + src/components/sidebar/sidebar.html + 13 + + + + Protocol + 协议 + + src/components/sidebar/sidebar.html + 17 + + + + Touch sensitivity + 触摸灵敏度 + + src/components/sidebar/sidebar.html + 21 + + + src/components/tune/tune.ts + 177 + + + + Mouse sensitivity + 鼠标灵敏度 + + src/components/sidebar/sidebar.html + 25 + + + src/components/tune/tune.ts + 196 + + + + Thumbstick deadzone + 摇杆死区 + + src/components/sidebar/sidebar.html + 29 + + + src/components/tune/tune.ts + 213 + + + + Advanced + 高级设置 + + src/components/sidebar/sidebar.html + 33 + + + + App settings + 应用设置 + + src/components/sidebar/sidebar.html + 37 + + + + Setup in Steam Deck + 在 Steam Deck 设置 + + src/components/sidebar/sidebar.html + 111 + + + + Setup in Linux + 在 Linux 设置 + + src/components/sidebar/sidebar.html + 115 + + + + Install as an App + 安装为 App + + src/components/sidebar/sidebar.html + 119 + + + + LED animation when using button shortcuts + 使用按钮快捷键时的 LED 动画 + + src/components/tune/tune.html + 15 + + + + Protocol change + 协议更改 + + src/components/tune/tune.html + 49 + + + + The device will restart using a different protocol, you may have to pair the device again. + 该设备将使用不同的协议重新启动,您可能需要再次配对该设备。 + + src/components/tune/tune.html + 50,52 + + + + Change + 更改 + + src/components/tune/tune.html + 55 + + + + Communication protocol + 输入协议 + + src/components/tune/tune.ts + 162 + + + + and Steam Deck + 以及 Steam Deck + + src/components/tune/tune.ts + 170 + + + + Generic + 通用 + + src/components/tune/tune.ts + 171 + + + + aka DirectInput + 又名 DirectInput + + src/components/tune/tune.ts + 171 + + + + Auto low + 自动低 + + src/components/tune/tune.ts + 186 + + + + More stable + 更稳定 + + src/components/tune/tune.ts + 186 + + + + Auto mid + 自动中 + + src/components/tune/tune.ts + 187 + + + + Default + 默认 + + src/components/tune/tune.ts + 187 + + + + Auto high + 自动高 + + src/components/tune/tune.ts + 188 + + + + More responsive + 响应速度更快 + + src/components/tune/tune.ts + 188 + + + + Custom 2 + 自定义2 + + src/components/tune/tune.ts + 189 + + + + Custom 1 + 自定义1 + + src/components/tune/tune.ts + 190 + + + + Low + + + src/components/tune/tune.ts + 205 + + + src/components/tune/tune.ts + 220 + + + + Recommended for 1080p + 推荐用于 1080p + + src/components/tune/tune.ts + 205 + + + + Mid + + + src/components/tune/tune.ts + 206 + + + src/components/tune/tune.ts + 221 + + + + Recommended for 1440p + 推荐用于 1440p + + src/components/tune/tune.ts + 206 + + + + High + + + src/components/tune/tune.ts + 207 + + + src/components/tune/tune.ts + 222 + + + + Recommended for 4K + 推荐用于 4K + + src/components/tune/tune.ts + 207 + + + + Smaller center radius + 更小的中心半径 + + src/components/tune/tune.ts + 220 + + + + Bigger center radius + 更大的中心半径 + + src/components/tune/tune.ts + 222 + + + + Work in progress + 正在开发中 + + src/components/wip/wip.html + 6 + + + + This feature is not implemented yet + 此功能尚未实现 + + src/components/wip/wip.html + 7 + + + + Missing Udev rules? + 缺少 Udev 规则? + + src/services/webusb.ts + 83 + + + + Try re-plugging the controller. + 尝试重新插入控制器。 + + src/services/webusb.ts + 85 + + + + + diff --git a/src/main.ts b/src/main.ts index b8c114f..c0f482b 100644 --- a/src/main.ts +++ b/src/main.ts @@ -3,6 +3,7 @@ import { bootstrapApplication } from '@angular/platform-browser' import { AppComponent, appConfig } from 'components/app/app' +import '@angular/localize/init' bootstrapApplication(AppComponent, appConfig) .catch((err) => console.error(err)); diff --git a/src/services/webusb.ts b/src/services/webusb.ts index 8d37eaf..fdf70ac 100644 --- a/src/services/webusb.ts +++ b/src/services/webusb.ts @@ -80,9 +80,9 @@ export class WebusbService { getFailedHint() { if (this.selectedDevice!.failedError?.message.includes('Access')) { - return 'Missing Udev rules?' + return $localize`Missing Udev rules?` } else { - return 'Try re-plugging the controller.' + return $localize`Try re-plugging the controller.` } }