From 11f4fe124f7831d60c5bcfcaab3ed468364f32b0 Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 13:49:35 +0700 Subject: [PATCH 01/29] New translations messages.json (Romanian) [ci skip] chore: sync translations from Crowdin --- addon/_locales/ro_RO/messages.json | 281 +++++++++++++++++++++++++++++ 1 file changed, 281 insertions(+) create mode 100644 addon/_locales/ro_RO/messages.json diff --git a/addon/_locales/ro_RO/messages.json b/addon/_locales/ro_RO/messages.json new file mode 100644 index 00000000..d602377d --- /dev/null +++ b/addon/_locales/ro_RO/messages.json @@ -0,0 +1,281 @@ +{ + "extensionName": { + "message": "WebHID" + }, + "extensionDescription": { + "message": "WebHID API implementation for Firefox" + }, + "popupTitle": { + "message": "WebHID" + }, + "popupBack": { + "message": "Back" + }, + "popupPairedDevices": { + "message": "Paired Devices" + }, + "popupNoDevices": { + "message": "No devices paired for this site." + }, + "popupSettings": { + "message": "Settings" + }, + "popupDataPlane": { + "message": "Data Plane" + }, + "popupDataPlaneDesc": { + "message": "WebTransport (in a worker), WebTransport (in the page), WebSocket, or Native Messaging" + }, + "popupDataPlaneWs": { + "message": "WebSocket" + }, + "popupDataPlaneWt": { + "message": "WebTransport" + }, + "popupDataPlaneNm": { + "message": "Native Messaging" + }, + "popupDevicePickerMode": { + "message": "Device Picker Mode" + }, + "popupDevicePickerModeDesc": { + "message": "How the device chooser is presented on this site" + }, + "popupWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "popupWorkerPolyfillDesc": { + "message": "Inject WebHID API into Worker scripts on this site" + }, + "popupAllowActivationless": { + "message": "Allow requestDevice() without user gesture" + }, + "popupAllowActivationlessDesc": { + "message": "Skip the user-activation check when this site calls requestDevice(). Spec workaround for sites that call it asynchronously; the device chooser still requires explicit user selection." + }, + "popupWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "popupWorkerSpawnModeDesc": { + "message": "How the data worker is created on this site" + }, + "popupLogLevel": { + "message": "Log Level" + }, + "popupLogLevelDesc": { + "message": "Console output verbosity for this site" + }, + "logLevelError": { + "message": "Error" + }, + "logLevelWarn": { + "message": "Warn" + }, + "logLevelInfo": { + "message": "Info" + }, + "logLevelDebug": { + "message": "Debug" + }, + "popupDefaultNote": { + "message": "Changes here override defaults for this site." + }, + "popupGlobalSettings": { + "message": "Global settings →" + }, + "popupManageDevices": { + "message": "Manage all paired devices →" + }, + "popupNoSite": { + "message": "(no site)" + }, + "popupSiteOrigin": { + "message": "Site origin" + }, + "popupOriginList": { + "message": "Origins in this tab" + }, + "popupUnknown": { + "message": "Unknown" + }, + "popupPairedDevice": { + "message": "Paired device" + }, + "popupRevoke": { + "message": "Revoke" + }, + "popupDeviceCount": { + "message": "($1/$2)" + }, + "popupInPageWtWarning": { + "message": "In-page WebTransport may trigger a Firefox local-network permission prompt (\"wants to access other apps and services on this device\"). Tick \"Remember my choice for this site\" before clicking Allow, otherwise you will be asked again on every page load." + }, + "statusReady": { + "message": "Ready" + }, + "statusFallback": { + "message": "Fallback: $1" + }, + "statusOffline": { + "message": "Daemon offline" + }, + "statusOfflineGuidance": { + "message": "Check that the daemon is running (systemctl status webhid-daemon), that your user is in the webhid group, and that the udev rules are installed." + }, + "planeNameWS": { + "message": "WebSocket" + }, + "planeNameWT": { + "message": "WebTransport" + }, + "planeNameNM": { + "message": "Native Messaging" + }, + "infoPopoverMore": { + "message": "More info" + }, + "macPrivacyTitle": { + "message": "macOS Input Monitoring" + }, + "macPrivacyDesc": { + "message": "Allow the daemon to read HID devices: System Settings → Privacy & Security → Input Monitoring. If the link does not open the right tab, find it manually and enable the daemon." + }, + "macPrivacyOpen": { + "message": "Open Privacy Settings" + }, + "settingsTitle": { + "message": "WebHID Settings" + }, + "settingsDaemonAsNmHost": { + "message": "Daemon as NM host" + }, + "settingsDaemonAsNmHostDesc": { + "message": "Talk to the daemon directly over native messaging, skipping the forwarder and Unix socket. Requires the daemon_nm_host manifest and the daemon running as your user (with the udev rule). Lower latency, no root-daemon fallback. Reconnects automatically." + }, + "settingsDataPlane": { + "message": "Data Plane" + }, + "settingsDataPlaneDesc": { + "message": "**WebTransport** (default): the fastest option; runs in a background worker so pages stay smooth.\n**WebTransport (in-page)**: connects directly in the page; fine at normal report rates, uses more page CPU. Use it when the site blocks background workers (CSP) but still allows the connection; the worker-based options would fall back to Native Messaging there. Firefox asks a one-time local-network permission (\"Allow\") before the first in-page connection; tick \"Remember my choice for this site\". Reload pages after changing.\n**WebSocket**: fallback when WebTransport is not available (older Firefox).\n**Native Messaging**: the slowest but most compatible option; use when a site's security policy blocks the others." + }, + "settingsDataPlaneWs": { + "message": "WebSocket" + }, + "settingsDataPlaneWt": { + "message": "WebTransport" + }, + "settingsDataPlaneWtInpage": { + "message": "WebTransport (in-page)" + }, + "settingsDataPlaneNm": { + "message": "Native Messaging" + }, + "settingsDevicePickerMode": { + "message": "Device Picker Mode" + }, + "settingsDevicePickerModeDesc": { + "message": "**Modal**: shadow-DOM overlay on the page when requestDevice() is called (default).\n**Page Action**: URL-bar popup picker; the user clicks the icon to open it. Firefox only, Chromium falls back to modal.\n**Window**: separate popup window." + }, + "settingsDevicePickerModal": { + "message": "Modal (overlay)" + }, + "settingsDevicePickerPageAction": { + "message": "Page Action (URL bar popup)" + }, + "settingsDevicePickerWindow": { + "message": "Window (separate popup window)" + }, + "settingsWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "settingsWorkerPolyfillDesc": { + "message": "Injects the full WebHID API into Worker scripts (new Worker()). requestDevice() stays page-only, as the spec requires. Reload pages after changing." + }, + "settingsAllowActivationless": { + "message": "Allow activation-less requestDevice()" + }, + "settingsAllowActivationlessDesc": { + "message": "Skip the user-activation requirement for requestDevice() on this site. Spec deviation; workaround for sites that call it from an async handler. The chooser still requires explicit user selection. Reload pages after changing." + }, + "settingsLogLevel": { + "message": "Log Level" + }, + "settingsLogLevelDesc": { + "message": "Console verbosity: Error = errors only, Warn = +warnings, Info = +info, Debug = +debug (includes timing). Reload pages after changing." + }, + "pickerTitle": { + "message": "Select a HID Device" + }, + "pickerCancel": { + "message": "Cancel" + }, + "pickerConnect": { + "message": "Connect" + }, + "pickerNoDevices": { + "message": "No HID devices found" + }, + "pickerNoDaemon": { + "message": "Cannot reach the WebHID daemon. Check that it is installed and running, then try again." + }, + "pickerParseFailed": { + "message": "This device's report descriptor could not be parsed. Connecting and sending reports still works." + }, + "pickerNoMatch": { + "message": "No devices match the specified filters" + }, + "pickerNoPending": { + "message": "No pending device request" + }, + "pickerLoading": { + "message": "Loading devices..." + }, + "pickerInterfaces": { + "message": "$1 interfaces" + }, + "settingsWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "settingsWorkerSpawnModeDesc": { + "message": "**Shadow URL** (default on MV3): spawns the data worker via new Worker(location.href) with a StreamFilter intercepting the synthetic self-request; respects the page's security settings and changes nothing about the page. Fails if the server rejects it or if require-trusted-types-for is restrictive.\n**Blob + CSP rewrite** (default on MV2): spawns the worker from a blob: URL; relaxes the page's worker-src and connect-src directives. Works fully on MV2; on MV3 only a meta-tag CSP can be rewritten, so header-based policies still block it." + }, + "settingsWorkerSpawnShadow": { + "message": "Shadow URL" + }, + "settingsWorkerSpawnBlob": { + "message": "Blob + CSP rewrite" + }, + "segDataPlaneWs": { + "message": "WS" + }, + "segDataPlaneWt": { + "message": "WT" + }, + "segDataPlaneWtInpage": { + "message": "WTI" + }, + "segDataPlaneNm": { + "message": "NM" + }, + "segPickerModal": { + "message": "Modal" + }, + "segPickerPageAction": { + "message": "Page Action" + }, + "segPickerWindow": { + "message": "Window" + }, + "segSpawnShadow": { + "message": "Shadow" + }, + "segSpawnBlob": { + "message": "Blob" + }, + "devicesTitle": { + "message": "Paired Devices (all sites)" + }, + "devicesNone": { + "message": "No devices paired on any site." + } +} From fa426de036779c243a1a9995040aa28b1ca787f6 Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 13:49:36 +0700 Subject: [PATCH 02/29] New translations messages.json (French) [ci skip] chore: sync translations from Crowdin --- addon/_locales/fr_FR/messages.json | 281 +++++++++++++++++++++++++++++ 1 file changed, 281 insertions(+) create mode 100644 addon/_locales/fr_FR/messages.json diff --git a/addon/_locales/fr_FR/messages.json b/addon/_locales/fr_FR/messages.json new file mode 100644 index 00000000..d602377d --- /dev/null +++ b/addon/_locales/fr_FR/messages.json @@ -0,0 +1,281 @@ +{ + "extensionName": { + "message": "WebHID" + }, + "extensionDescription": { + "message": "WebHID API implementation for Firefox" + }, + "popupTitle": { + "message": "WebHID" + }, + "popupBack": { + "message": "Back" + }, + "popupPairedDevices": { + "message": "Paired Devices" + }, + "popupNoDevices": { + "message": "No devices paired for this site." + }, + "popupSettings": { + "message": "Settings" + }, + "popupDataPlane": { + "message": "Data Plane" + }, + "popupDataPlaneDesc": { + "message": "WebTransport (in a worker), WebTransport (in the page), WebSocket, or Native Messaging" + }, + "popupDataPlaneWs": { + "message": "WebSocket" + }, + "popupDataPlaneWt": { + "message": "WebTransport" + }, + "popupDataPlaneNm": { + "message": "Native Messaging" + }, + "popupDevicePickerMode": { + "message": "Device Picker Mode" + }, + "popupDevicePickerModeDesc": { + "message": "How the device chooser is presented on this site" + }, + "popupWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "popupWorkerPolyfillDesc": { + "message": "Inject WebHID API into Worker scripts on this site" + }, + "popupAllowActivationless": { + "message": "Allow requestDevice() without user gesture" + }, + "popupAllowActivationlessDesc": { + "message": "Skip the user-activation check when this site calls requestDevice(). Spec workaround for sites that call it asynchronously; the device chooser still requires explicit user selection." + }, + "popupWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "popupWorkerSpawnModeDesc": { + "message": "How the data worker is created on this site" + }, + "popupLogLevel": { + "message": "Log Level" + }, + "popupLogLevelDesc": { + "message": "Console output verbosity for this site" + }, + "logLevelError": { + "message": "Error" + }, + "logLevelWarn": { + "message": "Warn" + }, + "logLevelInfo": { + "message": "Info" + }, + "logLevelDebug": { + "message": "Debug" + }, + "popupDefaultNote": { + "message": "Changes here override defaults for this site." + }, + "popupGlobalSettings": { + "message": "Global settings →" + }, + "popupManageDevices": { + "message": "Manage all paired devices →" + }, + "popupNoSite": { + "message": "(no site)" + }, + "popupSiteOrigin": { + "message": "Site origin" + }, + "popupOriginList": { + "message": "Origins in this tab" + }, + "popupUnknown": { + "message": "Unknown" + }, + "popupPairedDevice": { + "message": "Paired device" + }, + "popupRevoke": { + "message": "Revoke" + }, + "popupDeviceCount": { + "message": "($1/$2)" + }, + "popupInPageWtWarning": { + "message": "In-page WebTransport may trigger a Firefox local-network permission prompt (\"wants to access other apps and services on this device\"). Tick \"Remember my choice for this site\" before clicking Allow, otherwise you will be asked again on every page load." + }, + "statusReady": { + "message": "Ready" + }, + "statusFallback": { + "message": "Fallback: $1" + }, + "statusOffline": { + "message": "Daemon offline" + }, + "statusOfflineGuidance": { + "message": "Check that the daemon is running (systemctl status webhid-daemon), that your user is in the webhid group, and that the udev rules are installed." + }, + "planeNameWS": { + "message": "WebSocket" + }, + "planeNameWT": { + "message": "WebTransport" + }, + "planeNameNM": { + "message": "Native Messaging" + }, + "infoPopoverMore": { + "message": "More info" + }, + "macPrivacyTitle": { + "message": "macOS Input Monitoring" + }, + "macPrivacyDesc": { + "message": "Allow the daemon to read HID devices: System Settings → Privacy & Security → Input Monitoring. If the link does not open the right tab, find it manually and enable the daemon." + }, + "macPrivacyOpen": { + "message": "Open Privacy Settings" + }, + "settingsTitle": { + "message": "WebHID Settings" + }, + "settingsDaemonAsNmHost": { + "message": "Daemon as NM host" + }, + "settingsDaemonAsNmHostDesc": { + "message": "Talk to the daemon directly over native messaging, skipping the forwarder and Unix socket. Requires the daemon_nm_host manifest and the daemon running as your user (with the udev rule). Lower latency, no root-daemon fallback. Reconnects automatically." + }, + "settingsDataPlane": { + "message": "Data Plane" + }, + "settingsDataPlaneDesc": { + "message": "**WebTransport** (default): the fastest option; runs in a background worker so pages stay smooth.\n**WebTransport (in-page)**: connects directly in the page; fine at normal report rates, uses more page CPU. Use it when the site blocks background workers (CSP) but still allows the connection; the worker-based options would fall back to Native Messaging there. Firefox asks a one-time local-network permission (\"Allow\") before the first in-page connection; tick \"Remember my choice for this site\". Reload pages after changing.\n**WebSocket**: fallback when WebTransport is not available (older Firefox).\n**Native Messaging**: the slowest but most compatible option; use when a site's security policy blocks the others." + }, + "settingsDataPlaneWs": { + "message": "WebSocket" + }, + "settingsDataPlaneWt": { + "message": "WebTransport" + }, + "settingsDataPlaneWtInpage": { + "message": "WebTransport (in-page)" + }, + "settingsDataPlaneNm": { + "message": "Native Messaging" + }, + "settingsDevicePickerMode": { + "message": "Device Picker Mode" + }, + "settingsDevicePickerModeDesc": { + "message": "**Modal**: shadow-DOM overlay on the page when requestDevice() is called (default).\n**Page Action**: URL-bar popup picker; the user clicks the icon to open it. Firefox only, Chromium falls back to modal.\n**Window**: separate popup window." + }, + "settingsDevicePickerModal": { + "message": "Modal (overlay)" + }, + "settingsDevicePickerPageAction": { + "message": "Page Action (URL bar popup)" + }, + "settingsDevicePickerWindow": { + "message": "Window (separate popup window)" + }, + "settingsWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "settingsWorkerPolyfillDesc": { + "message": "Injects the full WebHID API into Worker scripts (new Worker()). requestDevice() stays page-only, as the spec requires. Reload pages after changing." + }, + "settingsAllowActivationless": { + "message": "Allow activation-less requestDevice()" + }, + "settingsAllowActivationlessDesc": { + "message": "Skip the user-activation requirement for requestDevice() on this site. Spec deviation; workaround for sites that call it from an async handler. The chooser still requires explicit user selection. Reload pages after changing." + }, + "settingsLogLevel": { + "message": "Log Level" + }, + "settingsLogLevelDesc": { + "message": "Console verbosity: Error = errors only, Warn = +warnings, Info = +info, Debug = +debug (includes timing). Reload pages after changing." + }, + "pickerTitle": { + "message": "Select a HID Device" + }, + "pickerCancel": { + "message": "Cancel" + }, + "pickerConnect": { + "message": "Connect" + }, + "pickerNoDevices": { + "message": "No HID devices found" + }, + "pickerNoDaemon": { + "message": "Cannot reach the WebHID daemon. Check that it is installed and running, then try again." + }, + "pickerParseFailed": { + "message": "This device's report descriptor could not be parsed. Connecting and sending reports still works." + }, + "pickerNoMatch": { + "message": "No devices match the specified filters" + }, + "pickerNoPending": { + "message": "No pending device request" + }, + "pickerLoading": { + "message": "Loading devices..." + }, + "pickerInterfaces": { + "message": "$1 interfaces" + }, + "settingsWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "settingsWorkerSpawnModeDesc": { + "message": "**Shadow URL** (default on MV3): spawns the data worker via new Worker(location.href) with a StreamFilter intercepting the synthetic self-request; respects the page's security settings and changes nothing about the page. Fails if the server rejects it or if require-trusted-types-for is restrictive.\n**Blob + CSP rewrite** (default on MV2): spawns the worker from a blob: URL; relaxes the page's worker-src and connect-src directives. Works fully on MV2; on MV3 only a meta-tag CSP can be rewritten, so header-based policies still block it." + }, + "settingsWorkerSpawnShadow": { + "message": "Shadow URL" + }, + "settingsWorkerSpawnBlob": { + "message": "Blob + CSP rewrite" + }, + "segDataPlaneWs": { + "message": "WS" + }, + "segDataPlaneWt": { + "message": "WT" + }, + "segDataPlaneWtInpage": { + "message": "WTI" + }, + "segDataPlaneNm": { + "message": "NM" + }, + "segPickerModal": { + "message": "Modal" + }, + "segPickerPageAction": { + "message": "Page Action" + }, + "segPickerWindow": { + "message": "Window" + }, + "segSpawnShadow": { + "message": "Shadow" + }, + "segSpawnBlob": { + "message": "Blob" + }, + "devicesTitle": { + "message": "Paired Devices (all sites)" + }, + "devicesNone": { + "message": "No devices paired on any site." + } +} From d349314e354899b4159caa2a3d79e0b939a12c25 Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 13:49:37 +0700 Subject: [PATCH 03/29] New translations messages.json (Spanish) [ci skip] chore: sync translations from Crowdin --- addon/_locales/es_ES/messages.json | 281 +++++++++++++++++++++++++++++ 1 file changed, 281 insertions(+) create mode 100644 addon/_locales/es_ES/messages.json diff --git a/addon/_locales/es_ES/messages.json b/addon/_locales/es_ES/messages.json new file mode 100644 index 00000000..d602377d --- /dev/null +++ b/addon/_locales/es_ES/messages.json @@ -0,0 +1,281 @@ +{ + "extensionName": { + "message": "WebHID" + }, + "extensionDescription": { + "message": "WebHID API implementation for Firefox" + }, + "popupTitle": { + "message": "WebHID" + }, + "popupBack": { + "message": "Back" + }, + "popupPairedDevices": { + "message": "Paired Devices" + }, + "popupNoDevices": { + "message": "No devices paired for this site." + }, + "popupSettings": { + "message": "Settings" + }, + "popupDataPlane": { + "message": "Data Plane" + }, + "popupDataPlaneDesc": { + "message": "WebTransport (in a worker), WebTransport (in the page), WebSocket, or Native Messaging" + }, + "popupDataPlaneWs": { + "message": "WebSocket" + }, + "popupDataPlaneWt": { + "message": "WebTransport" + }, + "popupDataPlaneNm": { + "message": "Native Messaging" + }, + "popupDevicePickerMode": { + "message": "Device Picker Mode" + }, + "popupDevicePickerModeDesc": { + "message": "How the device chooser is presented on this site" + }, + "popupWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "popupWorkerPolyfillDesc": { + "message": "Inject WebHID API into Worker scripts on this site" + }, + "popupAllowActivationless": { + "message": "Allow requestDevice() without user gesture" + }, + "popupAllowActivationlessDesc": { + "message": "Skip the user-activation check when this site calls requestDevice(). Spec workaround for sites that call it asynchronously; the device chooser still requires explicit user selection." + }, + "popupWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "popupWorkerSpawnModeDesc": { + "message": "How the data worker is created on this site" + }, + "popupLogLevel": { + "message": "Log Level" + }, + "popupLogLevelDesc": { + "message": "Console output verbosity for this site" + }, + "logLevelError": { + "message": "Error" + }, + "logLevelWarn": { + "message": "Warn" + }, + "logLevelInfo": { + "message": "Info" + }, + "logLevelDebug": { + "message": "Debug" + }, + "popupDefaultNote": { + "message": "Changes here override defaults for this site." + }, + "popupGlobalSettings": { + "message": "Global settings →" + }, + "popupManageDevices": { + "message": "Manage all paired devices →" + }, + "popupNoSite": { + "message": "(no site)" + }, + "popupSiteOrigin": { + "message": "Site origin" + }, + "popupOriginList": { + "message": "Origins in this tab" + }, + "popupUnknown": { + "message": "Unknown" + }, + "popupPairedDevice": { + "message": "Paired device" + }, + "popupRevoke": { + "message": "Revoke" + }, + "popupDeviceCount": { + "message": "($1/$2)" + }, + "popupInPageWtWarning": { + "message": "In-page WebTransport may trigger a Firefox local-network permission prompt (\"wants to access other apps and services on this device\"). Tick \"Remember my choice for this site\" before clicking Allow, otherwise you will be asked again on every page load." + }, + "statusReady": { + "message": "Ready" + }, + "statusFallback": { + "message": "Fallback: $1" + }, + "statusOffline": { + "message": "Daemon offline" + }, + "statusOfflineGuidance": { + "message": "Check that the daemon is running (systemctl status webhid-daemon), that your user is in the webhid group, and that the udev rules are installed." + }, + "planeNameWS": { + "message": "WebSocket" + }, + "planeNameWT": { + "message": "WebTransport" + }, + "planeNameNM": { + "message": "Native Messaging" + }, + "infoPopoverMore": { + "message": "More info" + }, + "macPrivacyTitle": { + "message": "macOS Input Monitoring" + }, + "macPrivacyDesc": { + "message": "Allow the daemon to read HID devices: System Settings → Privacy & Security → Input Monitoring. If the link does not open the right tab, find it manually and enable the daemon." + }, + "macPrivacyOpen": { + "message": "Open Privacy Settings" + }, + "settingsTitle": { + "message": "WebHID Settings" + }, + "settingsDaemonAsNmHost": { + "message": "Daemon as NM host" + }, + "settingsDaemonAsNmHostDesc": { + "message": "Talk to the daemon directly over native messaging, skipping the forwarder and Unix socket. Requires the daemon_nm_host manifest and the daemon running as your user (with the udev rule). Lower latency, no root-daemon fallback. Reconnects automatically." + }, + "settingsDataPlane": { + "message": "Data Plane" + }, + "settingsDataPlaneDesc": { + "message": "**WebTransport** (default): the fastest option; runs in a background worker so pages stay smooth.\n**WebTransport (in-page)**: connects directly in the page; fine at normal report rates, uses more page CPU. Use it when the site blocks background workers (CSP) but still allows the connection; the worker-based options would fall back to Native Messaging there. Firefox asks a one-time local-network permission (\"Allow\") before the first in-page connection; tick \"Remember my choice for this site\". Reload pages after changing.\n**WebSocket**: fallback when WebTransport is not available (older Firefox).\n**Native Messaging**: the slowest but most compatible option; use when a site's security policy blocks the others." + }, + "settingsDataPlaneWs": { + "message": "WebSocket" + }, + "settingsDataPlaneWt": { + "message": "WebTransport" + }, + "settingsDataPlaneWtInpage": { + "message": "WebTransport (in-page)" + }, + "settingsDataPlaneNm": { + "message": "Native Messaging" + }, + "settingsDevicePickerMode": { + "message": "Device Picker Mode" + }, + "settingsDevicePickerModeDesc": { + "message": "**Modal**: shadow-DOM overlay on the page when requestDevice() is called (default).\n**Page Action**: URL-bar popup picker; the user clicks the icon to open it. Firefox only, Chromium falls back to modal.\n**Window**: separate popup window." + }, + "settingsDevicePickerModal": { + "message": "Modal (overlay)" + }, + "settingsDevicePickerPageAction": { + "message": "Page Action (URL bar popup)" + }, + "settingsDevicePickerWindow": { + "message": "Window (separate popup window)" + }, + "settingsWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "settingsWorkerPolyfillDesc": { + "message": "Injects the full WebHID API into Worker scripts (new Worker()). requestDevice() stays page-only, as the spec requires. Reload pages after changing." + }, + "settingsAllowActivationless": { + "message": "Allow activation-less requestDevice()" + }, + "settingsAllowActivationlessDesc": { + "message": "Skip the user-activation requirement for requestDevice() on this site. Spec deviation; workaround for sites that call it from an async handler. The chooser still requires explicit user selection. Reload pages after changing." + }, + "settingsLogLevel": { + "message": "Log Level" + }, + "settingsLogLevelDesc": { + "message": "Console verbosity: Error = errors only, Warn = +warnings, Info = +info, Debug = +debug (includes timing). Reload pages after changing." + }, + "pickerTitle": { + "message": "Select a HID Device" + }, + "pickerCancel": { + "message": "Cancel" + }, + "pickerConnect": { + "message": "Connect" + }, + "pickerNoDevices": { + "message": "No HID devices found" + }, + "pickerNoDaemon": { + "message": "Cannot reach the WebHID daemon. Check that it is installed and running, then try again." + }, + "pickerParseFailed": { + "message": "This device's report descriptor could not be parsed. Connecting and sending reports still works." + }, + "pickerNoMatch": { + "message": "No devices match the specified filters" + }, + "pickerNoPending": { + "message": "No pending device request" + }, + "pickerLoading": { + "message": "Loading devices..." + }, + "pickerInterfaces": { + "message": "$1 interfaces" + }, + "settingsWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "settingsWorkerSpawnModeDesc": { + "message": "**Shadow URL** (default on MV3): spawns the data worker via new Worker(location.href) with a StreamFilter intercepting the synthetic self-request; respects the page's security settings and changes nothing about the page. Fails if the server rejects it or if require-trusted-types-for is restrictive.\n**Blob + CSP rewrite** (default on MV2): spawns the worker from a blob: URL; relaxes the page's worker-src and connect-src directives. Works fully on MV2; on MV3 only a meta-tag CSP can be rewritten, so header-based policies still block it." + }, + "settingsWorkerSpawnShadow": { + "message": "Shadow URL" + }, + "settingsWorkerSpawnBlob": { + "message": "Blob + CSP rewrite" + }, + "segDataPlaneWs": { + "message": "WS" + }, + "segDataPlaneWt": { + "message": "WT" + }, + "segDataPlaneWtInpage": { + "message": "WTI" + }, + "segDataPlaneNm": { + "message": "NM" + }, + "segPickerModal": { + "message": "Modal" + }, + "segPickerPageAction": { + "message": "Page Action" + }, + "segPickerWindow": { + "message": "Window" + }, + "segSpawnShadow": { + "message": "Shadow" + }, + "segSpawnBlob": { + "message": "Blob" + }, + "devicesTitle": { + "message": "Paired Devices (all sites)" + }, + "devicesNone": { + "message": "No devices paired on any site." + } +} From cd13dc4d340a6e789ed5590d67d2e14b8ae7ff6c Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 13:49:38 +0700 Subject: [PATCH 04/29] New translations messages.json (Afrikaans) [ci skip] chore: sync translations from Crowdin --- addon/_locales/af_ZA/messages.json | 281 +++++++++++++++++++++++++++++ 1 file changed, 281 insertions(+) create mode 100644 addon/_locales/af_ZA/messages.json diff --git a/addon/_locales/af_ZA/messages.json b/addon/_locales/af_ZA/messages.json new file mode 100644 index 00000000..d602377d --- /dev/null +++ b/addon/_locales/af_ZA/messages.json @@ -0,0 +1,281 @@ +{ + "extensionName": { + "message": "WebHID" + }, + "extensionDescription": { + "message": "WebHID API implementation for Firefox" + }, + "popupTitle": { + "message": "WebHID" + }, + "popupBack": { + "message": "Back" + }, + "popupPairedDevices": { + "message": "Paired Devices" + }, + "popupNoDevices": { + "message": "No devices paired for this site." + }, + "popupSettings": { + "message": "Settings" + }, + "popupDataPlane": { + "message": "Data Plane" + }, + "popupDataPlaneDesc": { + "message": "WebTransport (in a worker), WebTransport (in the page), WebSocket, or Native Messaging" + }, + "popupDataPlaneWs": { + "message": "WebSocket" + }, + "popupDataPlaneWt": { + "message": "WebTransport" + }, + "popupDataPlaneNm": { + "message": "Native Messaging" + }, + "popupDevicePickerMode": { + "message": "Device Picker Mode" + }, + "popupDevicePickerModeDesc": { + "message": "How the device chooser is presented on this site" + }, + "popupWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "popupWorkerPolyfillDesc": { + "message": "Inject WebHID API into Worker scripts on this site" + }, + "popupAllowActivationless": { + "message": "Allow requestDevice() without user gesture" + }, + "popupAllowActivationlessDesc": { + "message": "Skip the user-activation check when this site calls requestDevice(). Spec workaround for sites that call it asynchronously; the device chooser still requires explicit user selection." + }, + "popupWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "popupWorkerSpawnModeDesc": { + "message": "How the data worker is created on this site" + }, + "popupLogLevel": { + "message": "Log Level" + }, + "popupLogLevelDesc": { + "message": "Console output verbosity for this site" + }, + "logLevelError": { + "message": "Error" + }, + "logLevelWarn": { + "message": "Warn" + }, + "logLevelInfo": { + "message": "Info" + }, + "logLevelDebug": { + "message": "Debug" + }, + "popupDefaultNote": { + "message": "Changes here override defaults for this site." + }, + "popupGlobalSettings": { + "message": "Global settings →" + }, + "popupManageDevices": { + "message": "Manage all paired devices →" + }, + "popupNoSite": { + "message": "(no site)" + }, + "popupSiteOrigin": { + "message": "Site origin" + }, + "popupOriginList": { + "message": "Origins in this tab" + }, + "popupUnknown": { + "message": "Unknown" + }, + "popupPairedDevice": { + "message": "Paired device" + }, + "popupRevoke": { + "message": "Revoke" + }, + "popupDeviceCount": { + "message": "($1/$2)" + }, + "popupInPageWtWarning": { + "message": "In-page WebTransport may trigger a Firefox local-network permission prompt (\"wants to access other apps and services on this device\"). Tick \"Remember my choice for this site\" before clicking Allow, otherwise you will be asked again on every page load." + }, + "statusReady": { + "message": "Ready" + }, + "statusFallback": { + "message": "Fallback: $1" + }, + "statusOffline": { + "message": "Daemon offline" + }, + "statusOfflineGuidance": { + "message": "Check that the daemon is running (systemctl status webhid-daemon), that your user is in the webhid group, and that the udev rules are installed." + }, + "planeNameWS": { + "message": "WebSocket" + }, + "planeNameWT": { + "message": "WebTransport" + }, + "planeNameNM": { + "message": "Native Messaging" + }, + "infoPopoverMore": { + "message": "More info" + }, + "macPrivacyTitle": { + "message": "macOS Input Monitoring" + }, + "macPrivacyDesc": { + "message": "Allow the daemon to read HID devices: System Settings → Privacy & Security → Input Monitoring. If the link does not open the right tab, find it manually and enable the daemon." + }, + "macPrivacyOpen": { + "message": "Open Privacy Settings" + }, + "settingsTitle": { + "message": "WebHID Settings" + }, + "settingsDaemonAsNmHost": { + "message": "Daemon as NM host" + }, + "settingsDaemonAsNmHostDesc": { + "message": "Talk to the daemon directly over native messaging, skipping the forwarder and Unix socket. Requires the daemon_nm_host manifest and the daemon running as your user (with the udev rule). Lower latency, no root-daemon fallback. Reconnects automatically." + }, + "settingsDataPlane": { + "message": "Data Plane" + }, + "settingsDataPlaneDesc": { + "message": "**WebTransport** (default): the fastest option; runs in a background worker so pages stay smooth.\n**WebTransport (in-page)**: connects directly in the page; fine at normal report rates, uses more page CPU. Use it when the site blocks background workers (CSP) but still allows the connection; the worker-based options would fall back to Native Messaging there. Firefox asks a one-time local-network permission (\"Allow\") before the first in-page connection; tick \"Remember my choice for this site\". Reload pages after changing.\n**WebSocket**: fallback when WebTransport is not available (older Firefox).\n**Native Messaging**: the slowest but most compatible option; use when a site's security policy blocks the others." + }, + "settingsDataPlaneWs": { + "message": "WebSocket" + }, + "settingsDataPlaneWt": { + "message": "WebTransport" + }, + "settingsDataPlaneWtInpage": { + "message": "WebTransport (in-page)" + }, + "settingsDataPlaneNm": { + "message": "Native Messaging" + }, + "settingsDevicePickerMode": { + "message": "Device Picker Mode" + }, + "settingsDevicePickerModeDesc": { + "message": "**Modal**: shadow-DOM overlay on the page when requestDevice() is called (default).\n**Page Action**: URL-bar popup picker; the user clicks the icon to open it. Firefox only, Chromium falls back to modal.\n**Window**: separate popup window." + }, + "settingsDevicePickerModal": { + "message": "Modal (overlay)" + }, + "settingsDevicePickerPageAction": { + "message": "Page Action (URL bar popup)" + }, + "settingsDevicePickerWindow": { + "message": "Window (separate popup window)" + }, + "settingsWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "settingsWorkerPolyfillDesc": { + "message": "Injects the full WebHID API into Worker scripts (new Worker()). requestDevice() stays page-only, as the spec requires. Reload pages after changing." + }, + "settingsAllowActivationless": { + "message": "Allow activation-less requestDevice()" + }, + "settingsAllowActivationlessDesc": { + "message": "Skip the user-activation requirement for requestDevice() on this site. Spec deviation; workaround for sites that call it from an async handler. The chooser still requires explicit user selection. Reload pages after changing." + }, + "settingsLogLevel": { + "message": "Log Level" + }, + "settingsLogLevelDesc": { + "message": "Console verbosity: Error = errors only, Warn = +warnings, Info = +info, Debug = +debug (includes timing). Reload pages after changing." + }, + "pickerTitle": { + "message": "Select a HID Device" + }, + "pickerCancel": { + "message": "Cancel" + }, + "pickerConnect": { + "message": "Connect" + }, + "pickerNoDevices": { + "message": "No HID devices found" + }, + "pickerNoDaemon": { + "message": "Cannot reach the WebHID daemon. Check that it is installed and running, then try again." + }, + "pickerParseFailed": { + "message": "This device's report descriptor could not be parsed. Connecting and sending reports still works." + }, + "pickerNoMatch": { + "message": "No devices match the specified filters" + }, + "pickerNoPending": { + "message": "No pending device request" + }, + "pickerLoading": { + "message": "Loading devices..." + }, + "pickerInterfaces": { + "message": "$1 interfaces" + }, + "settingsWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "settingsWorkerSpawnModeDesc": { + "message": "**Shadow URL** (default on MV3): spawns the data worker via new Worker(location.href) with a StreamFilter intercepting the synthetic self-request; respects the page's security settings and changes nothing about the page. Fails if the server rejects it or if require-trusted-types-for is restrictive.\n**Blob + CSP rewrite** (default on MV2): spawns the worker from a blob: URL; relaxes the page's worker-src and connect-src directives. Works fully on MV2; on MV3 only a meta-tag CSP can be rewritten, so header-based policies still block it." + }, + "settingsWorkerSpawnShadow": { + "message": "Shadow URL" + }, + "settingsWorkerSpawnBlob": { + "message": "Blob + CSP rewrite" + }, + "segDataPlaneWs": { + "message": "WS" + }, + "segDataPlaneWt": { + "message": "WT" + }, + "segDataPlaneWtInpage": { + "message": "WTI" + }, + "segDataPlaneNm": { + "message": "NM" + }, + "segPickerModal": { + "message": "Modal" + }, + "segPickerPageAction": { + "message": "Page Action" + }, + "segPickerWindow": { + "message": "Window" + }, + "segSpawnShadow": { + "message": "Shadow" + }, + "segSpawnBlob": { + "message": "Blob" + }, + "devicesTitle": { + "message": "Paired Devices (all sites)" + }, + "devicesNone": { + "message": "No devices paired on any site." + } +} From f8686eba611a145484e8a92e7650bfab8e3fa640 Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 13:49:39 +0700 Subject: [PATCH 05/29] New translations messages.json (Arabic) [ci skip] chore: sync translations from Crowdin --- addon/_locales/ar_SA/messages.json | 281 +++++++++++++++++++++++++++++ 1 file changed, 281 insertions(+) create mode 100644 addon/_locales/ar_SA/messages.json diff --git a/addon/_locales/ar_SA/messages.json b/addon/_locales/ar_SA/messages.json new file mode 100644 index 00000000..d602377d --- /dev/null +++ b/addon/_locales/ar_SA/messages.json @@ -0,0 +1,281 @@ +{ + "extensionName": { + "message": "WebHID" + }, + "extensionDescription": { + "message": "WebHID API implementation for Firefox" + }, + "popupTitle": { + "message": "WebHID" + }, + "popupBack": { + "message": "Back" + }, + "popupPairedDevices": { + "message": "Paired Devices" + }, + "popupNoDevices": { + "message": "No devices paired for this site." + }, + "popupSettings": { + "message": "Settings" + }, + "popupDataPlane": { + "message": "Data Plane" + }, + "popupDataPlaneDesc": { + "message": "WebTransport (in a worker), WebTransport (in the page), WebSocket, or Native Messaging" + }, + "popupDataPlaneWs": { + "message": "WebSocket" + }, + "popupDataPlaneWt": { + "message": "WebTransport" + }, + "popupDataPlaneNm": { + "message": "Native Messaging" + }, + "popupDevicePickerMode": { + "message": "Device Picker Mode" + }, + "popupDevicePickerModeDesc": { + "message": "How the device chooser is presented on this site" + }, + "popupWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "popupWorkerPolyfillDesc": { + "message": "Inject WebHID API into Worker scripts on this site" + }, + "popupAllowActivationless": { + "message": "Allow requestDevice() without user gesture" + }, + "popupAllowActivationlessDesc": { + "message": "Skip the user-activation check when this site calls requestDevice(). Spec workaround for sites that call it asynchronously; the device chooser still requires explicit user selection." + }, + "popupWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "popupWorkerSpawnModeDesc": { + "message": "How the data worker is created on this site" + }, + "popupLogLevel": { + "message": "Log Level" + }, + "popupLogLevelDesc": { + "message": "Console output verbosity for this site" + }, + "logLevelError": { + "message": "Error" + }, + "logLevelWarn": { + "message": "Warn" + }, + "logLevelInfo": { + "message": "Info" + }, + "logLevelDebug": { + "message": "Debug" + }, + "popupDefaultNote": { + "message": "Changes here override defaults for this site." + }, + "popupGlobalSettings": { + "message": "Global settings →" + }, + "popupManageDevices": { + "message": "Manage all paired devices →" + }, + "popupNoSite": { + "message": "(no site)" + }, + "popupSiteOrigin": { + "message": "Site origin" + }, + "popupOriginList": { + "message": "Origins in this tab" + }, + "popupUnknown": { + "message": "Unknown" + }, + "popupPairedDevice": { + "message": "Paired device" + }, + "popupRevoke": { + "message": "Revoke" + }, + "popupDeviceCount": { + "message": "($1/$2)" + }, + "popupInPageWtWarning": { + "message": "In-page WebTransport may trigger a Firefox local-network permission prompt (\"wants to access other apps and services on this device\"). Tick \"Remember my choice for this site\" before clicking Allow, otherwise you will be asked again on every page load." + }, + "statusReady": { + "message": "Ready" + }, + "statusFallback": { + "message": "Fallback: $1" + }, + "statusOffline": { + "message": "Daemon offline" + }, + "statusOfflineGuidance": { + "message": "Check that the daemon is running (systemctl status webhid-daemon), that your user is in the webhid group, and that the udev rules are installed." + }, + "planeNameWS": { + "message": "WebSocket" + }, + "planeNameWT": { + "message": "WebTransport" + }, + "planeNameNM": { + "message": "Native Messaging" + }, + "infoPopoverMore": { + "message": "More info" + }, + "macPrivacyTitle": { + "message": "macOS Input Monitoring" + }, + "macPrivacyDesc": { + "message": "Allow the daemon to read HID devices: System Settings → Privacy & Security → Input Monitoring. If the link does not open the right tab, find it manually and enable the daemon." + }, + "macPrivacyOpen": { + "message": "Open Privacy Settings" + }, + "settingsTitle": { + "message": "WebHID Settings" + }, + "settingsDaemonAsNmHost": { + "message": "Daemon as NM host" + }, + "settingsDaemonAsNmHostDesc": { + "message": "Talk to the daemon directly over native messaging, skipping the forwarder and Unix socket. Requires the daemon_nm_host manifest and the daemon running as your user (with the udev rule). Lower latency, no root-daemon fallback. Reconnects automatically." + }, + "settingsDataPlane": { + "message": "Data Plane" + }, + "settingsDataPlaneDesc": { + "message": "**WebTransport** (default): the fastest option; runs in a background worker so pages stay smooth.\n**WebTransport (in-page)**: connects directly in the page; fine at normal report rates, uses more page CPU. Use it when the site blocks background workers (CSP) but still allows the connection; the worker-based options would fall back to Native Messaging there. Firefox asks a one-time local-network permission (\"Allow\") before the first in-page connection; tick \"Remember my choice for this site\". Reload pages after changing.\n**WebSocket**: fallback when WebTransport is not available (older Firefox).\n**Native Messaging**: the slowest but most compatible option; use when a site's security policy blocks the others." + }, + "settingsDataPlaneWs": { + "message": "WebSocket" + }, + "settingsDataPlaneWt": { + "message": "WebTransport" + }, + "settingsDataPlaneWtInpage": { + "message": "WebTransport (in-page)" + }, + "settingsDataPlaneNm": { + "message": "Native Messaging" + }, + "settingsDevicePickerMode": { + "message": "Device Picker Mode" + }, + "settingsDevicePickerModeDesc": { + "message": "**Modal**: shadow-DOM overlay on the page when requestDevice() is called (default).\n**Page Action**: URL-bar popup picker; the user clicks the icon to open it. Firefox only, Chromium falls back to modal.\n**Window**: separate popup window." + }, + "settingsDevicePickerModal": { + "message": "Modal (overlay)" + }, + "settingsDevicePickerPageAction": { + "message": "Page Action (URL bar popup)" + }, + "settingsDevicePickerWindow": { + "message": "Window (separate popup window)" + }, + "settingsWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "settingsWorkerPolyfillDesc": { + "message": "Injects the full WebHID API into Worker scripts (new Worker()). requestDevice() stays page-only, as the spec requires. Reload pages after changing." + }, + "settingsAllowActivationless": { + "message": "Allow activation-less requestDevice()" + }, + "settingsAllowActivationlessDesc": { + "message": "Skip the user-activation requirement for requestDevice() on this site. Spec deviation; workaround for sites that call it from an async handler. The chooser still requires explicit user selection. Reload pages after changing." + }, + "settingsLogLevel": { + "message": "Log Level" + }, + "settingsLogLevelDesc": { + "message": "Console verbosity: Error = errors only, Warn = +warnings, Info = +info, Debug = +debug (includes timing). Reload pages after changing." + }, + "pickerTitle": { + "message": "Select a HID Device" + }, + "pickerCancel": { + "message": "Cancel" + }, + "pickerConnect": { + "message": "Connect" + }, + "pickerNoDevices": { + "message": "No HID devices found" + }, + "pickerNoDaemon": { + "message": "Cannot reach the WebHID daemon. Check that it is installed and running, then try again." + }, + "pickerParseFailed": { + "message": "This device's report descriptor could not be parsed. Connecting and sending reports still works." + }, + "pickerNoMatch": { + "message": "No devices match the specified filters" + }, + "pickerNoPending": { + "message": "No pending device request" + }, + "pickerLoading": { + "message": "Loading devices..." + }, + "pickerInterfaces": { + "message": "$1 interfaces" + }, + "settingsWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "settingsWorkerSpawnModeDesc": { + "message": "**Shadow URL** (default on MV3): spawns the data worker via new Worker(location.href) with a StreamFilter intercepting the synthetic self-request; respects the page's security settings and changes nothing about the page. Fails if the server rejects it or if require-trusted-types-for is restrictive.\n**Blob + CSP rewrite** (default on MV2): spawns the worker from a blob: URL; relaxes the page's worker-src and connect-src directives. Works fully on MV2; on MV3 only a meta-tag CSP can be rewritten, so header-based policies still block it." + }, + "settingsWorkerSpawnShadow": { + "message": "Shadow URL" + }, + "settingsWorkerSpawnBlob": { + "message": "Blob + CSP rewrite" + }, + "segDataPlaneWs": { + "message": "WS" + }, + "segDataPlaneWt": { + "message": "WT" + }, + "segDataPlaneWtInpage": { + "message": "WTI" + }, + "segDataPlaneNm": { + "message": "NM" + }, + "segPickerModal": { + "message": "Modal" + }, + "segPickerPageAction": { + "message": "Page Action" + }, + "segPickerWindow": { + "message": "Window" + }, + "segSpawnShadow": { + "message": "Shadow" + }, + "segSpawnBlob": { + "message": "Blob" + }, + "devicesTitle": { + "message": "Paired Devices (all sites)" + }, + "devicesNone": { + "message": "No devices paired on any site." + } +} From 3af5e2357f0cc10c20a1b1dd09a56f9051a102a0 Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 13:49:40 +0700 Subject: [PATCH 06/29] New translations messages.json (Catalan) [ci skip] chore: sync translations from Crowdin --- addon/_locales/ca_ES/messages.json | 281 +++++++++++++++++++++++++++++ 1 file changed, 281 insertions(+) create mode 100644 addon/_locales/ca_ES/messages.json diff --git a/addon/_locales/ca_ES/messages.json b/addon/_locales/ca_ES/messages.json new file mode 100644 index 00000000..d602377d --- /dev/null +++ b/addon/_locales/ca_ES/messages.json @@ -0,0 +1,281 @@ +{ + "extensionName": { + "message": "WebHID" + }, + "extensionDescription": { + "message": "WebHID API implementation for Firefox" + }, + "popupTitle": { + "message": "WebHID" + }, + "popupBack": { + "message": "Back" + }, + "popupPairedDevices": { + "message": "Paired Devices" + }, + "popupNoDevices": { + "message": "No devices paired for this site." + }, + "popupSettings": { + "message": "Settings" + }, + "popupDataPlane": { + "message": "Data Plane" + }, + "popupDataPlaneDesc": { + "message": "WebTransport (in a worker), WebTransport (in the page), WebSocket, or Native Messaging" + }, + "popupDataPlaneWs": { + "message": "WebSocket" + }, + "popupDataPlaneWt": { + "message": "WebTransport" + }, + "popupDataPlaneNm": { + "message": "Native Messaging" + }, + "popupDevicePickerMode": { + "message": "Device Picker Mode" + }, + "popupDevicePickerModeDesc": { + "message": "How the device chooser is presented on this site" + }, + "popupWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "popupWorkerPolyfillDesc": { + "message": "Inject WebHID API into Worker scripts on this site" + }, + "popupAllowActivationless": { + "message": "Allow requestDevice() without user gesture" + }, + "popupAllowActivationlessDesc": { + "message": "Skip the user-activation check when this site calls requestDevice(). Spec workaround for sites that call it asynchronously; the device chooser still requires explicit user selection." + }, + "popupWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "popupWorkerSpawnModeDesc": { + "message": "How the data worker is created on this site" + }, + "popupLogLevel": { + "message": "Log Level" + }, + "popupLogLevelDesc": { + "message": "Console output verbosity for this site" + }, + "logLevelError": { + "message": "Error" + }, + "logLevelWarn": { + "message": "Warn" + }, + "logLevelInfo": { + "message": "Info" + }, + "logLevelDebug": { + "message": "Debug" + }, + "popupDefaultNote": { + "message": "Changes here override defaults for this site." + }, + "popupGlobalSettings": { + "message": "Global settings →" + }, + "popupManageDevices": { + "message": "Manage all paired devices →" + }, + "popupNoSite": { + "message": "(no site)" + }, + "popupSiteOrigin": { + "message": "Site origin" + }, + "popupOriginList": { + "message": "Origins in this tab" + }, + "popupUnknown": { + "message": "Unknown" + }, + "popupPairedDevice": { + "message": "Paired device" + }, + "popupRevoke": { + "message": "Revoke" + }, + "popupDeviceCount": { + "message": "($1/$2)" + }, + "popupInPageWtWarning": { + "message": "In-page WebTransport may trigger a Firefox local-network permission prompt (\"wants to access other apps and services on this device\"). Tick \"Remember my choice for this site\" before clicking Allow, otherwise you will be asked again on every page load." + }, + "statusReady": { + "message": "Ready" + }, + "statusFallback": { + "message": "Fallback: $1" + }, + "statusOffline": { + "message": "Daemon offline" + }, + "statusOfflineGuidance": { + "message": "Check that the daemon is running (systemctl status webhid-daemon), that your user is in the webhid group, and that the udev rules are installed." + }, + "planeNameWS": { + "message": "WebSocket" + }, + "planeNameWT": { + "message": "WebTransport" + }, + "planeNameNM": { + "message": "Native Messaging" + }, + "infoPopoverMore": { + "message": "More info" + }, + "macPrivacyTitle": { + "message": "macOS Input Monitoring" + }, + "macPrivacyDesc": { + "message": "Allow the daemon to read HID devices: System Settings → Privacy & Security → Input Monitoring. If the link does not open the right tab, find it manually and enable the daemon." + }, + "macPrivacyOpen": { + "message": "Open Privacy Settings" + }, + "settingsTitle": { + "message": "WebHID Settings" + }, + "settingsDaemonAsNmHost": { + "message": "Daemon as NM host" + }, + "settingsDaemonAsNmHostDesc": { + "message": "Talk to the daemon directly over native messaging, skipping the forwarder and Unix socket. Requires the daemon_nm_host manifest and the daemon running as your user (with the udev rule). Lower latency, no root-daemon fallback. Reconnects automatically." + }, + "settingsDataPlane": { + "message": "Data Plane" + }, + "settingsDataPlaneDesc": { + "message": "**WebTransport** (default): the fastest option; runs in a background worker so pages stay smooth.\n**WebTransport (in-page)**: connects directly in the page; fine at normal report rates, uses more page CPU. Use it when the site blocks background workers (CSP) but still allows the connection; the worker-based options would fall back to Native Messaging there. Firefox asks a one-time local-network permission (\"Allow\") before the first in-page connection; tick \"Remember my choice for this site\". Reload pages after changing.\n**WebSocket**: fallback when WebTransport is not available (older Firefox).\n**Native Messaging**: the slowest but most compatible option; use when a site's security policy blocks the others." + }, + "settingsDataPlaneWs": { + "message": "WebSocket" + }, + "settingsDataPlaneWt": { + "message": "WebTransport" + }, + "settingsDataPlaneWtInpage": { + "message": "WebTransport (in-page)" + }, + "settingsDataPlaneNm": { + "message": "Native Messaging" + }, + "settingsDevicePickerMode": { + "message": "Device Picker Mode" + }, + "settingsDevicePickerModeDesc": { + "message": "**Modal**: shadow-DOM overlay on the page when requestDevice() is called (default).\n**Page Action**: URL-bar popup picker; the user clicks the icon to open it. Firefox only, Chromium falls back to modal.\n**Window**: separate popup window." + }, + "settingsDevicePickerModal": { + "message": "Modal (overlay)" + }, + "settingsDevicePickerPageAction": { + "message": "Page Action (URL bar popup)" + }, + "settingsDevicePickerWindow": { + "message": "Window (separate popup window)" + }, + "settingsWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "settingsWorkerPolyfillDesc": { + "message": "Injects the full WebHID API into Worker scripts (new Worker()). requestDevice() stays page-only, as the spec requires. Reload pages after changing." + }, + "settingsAllowActivationless": { + "message": "Allow activation-less requestDevice()" + }, + "settingsAllowActivationlessDesc": { + "message": "Skip the user-activation requirement for requestDevice() on this site. Spec deviation; workaround for sites that call it from an async handler. The chooser still requires explicit user selection. Reload pages after changing." + }, + "settingsLogLevel": { + "message": "Log Level" + }, + "settingsLogLevelDesc": { + "message": "Console verbosity: Error = errors only, Warn = +warnings, Info = +info, Debug = +debug (includes timing). Reload pages after changing." + }, + "pickerTitle": { + "message": "Select a HID Device" + }, + "pickerCancel": { + "message": "Cancel" + }, + "pickerConnect": { + "message": "Connect" + }, + "pickerNoDevices": { + "message": "No HID devices found" + }, + "pickerNoDaemon": { + "message": "Cannot reach the WebHID daemon. Check that it is installed and running, then try again." + }, + "pickerParseFailed": { + "message": "This device's report descriptor could not be parsed. Connecting and sending reports still works." + }, + "pickerNoMatch": { + "message": "No devices match the specified filters" + }, + "pickerNoPending": { + "message": "No pending device request" + }, + "pickerLoading": { + "message": "Loading devices..." + }, + "pickerInterfaces": { + "message": "$1 interfaces" + }, + "settingsWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "settingsWorkerSpawnModeDesc": { + "message": "**Shadow URL** (default on MV3): spawns the data worker via new Worker(location.href) with a StreamFilter intercepting the synthetic self-request; respects the page's security settings and changes nothing about the page. Fails if the server rejects it or if require-trusted-types-for is restrictive.\n**Blob + CSP rewrite** (default on MV2): spawns the worker from a blob: URL; relaxes the page's worker-src and connect-src directives. Works fully on MV2; on MV3 only a meta-tag CSP can be rewritten, so header-based policies still block it." + }, + "settingsWorkerSpawnShadow": { + "message": "Shadow URL" + }, + "settingsWorkerSpawnBlob": { + "message": "Blob + CSP rewrite" + }, + "segDataPlaneWs": { + "message": "WS" + }, + "segDataPlaneWt": { + "message": "WT" + }, + "segDataPlaneWtInpage": { + "message": "WTI" + }, + "segDataPlaneNm": { + "message": "NM" + }, + "segPickerModal": { + "message": "Modal" + }, + "segPickerPageAction": { + "message": "Page Action" + }, + "segPickerWindow": { + "message": "Window" + }, + "segSpawnShadow": { + "message": "Shadow" + }, + "segSpawnBlob": { + "message": "Blob" + }, + "devicesTitle": { + "message": "Paired Devices (all sites)" + }, + "devicesNone": { + "message": "No devices paired on any site." + } +} From 2541c3d1bfc2e1a8f4fac61e42c7b912397f7297 Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 13:49:41 +0700 Subject: [PATCH 07/29] New translations messages.json (Czech) [ci skip] chore: sync translations from Crowdin --- addon/_locales/cs_CZ/messages.json | 281 +++++++++++++++++++++++++++++ 1 file changed, 281 insertions(+) create mode 100644 addon/_locales/cs_CZ/messages.json diff --git a/addon/_locales/cs_CZ/messages.json b/addon/_locales/cs_CZ/messages.json new file mode 100644 index 00000000..d602377d --- /dev/null +++ b/addon/_locales/cs_CZ/messages.json @@ -0,0 +1,281 @@ +{ + "extensionName": { + "message": "WebHID" + }, + "extensionDescription": { + "message": "WebHID API implementation for Firefox" + }, + "popupTitle": { + "message": "WebHID" + }, + "popupBack": { + "message": "Back" + }, + "popupPairedDevices": { + "message": "Paired Devices" + }, + "popupNoDevices": { + "message": "No devices paired for this site." + }, + "popupSettings": { + "message": "Settings" + }, + "popupDataPlane": { + "message": "Data Plane" + }, + "popupDataPlaneDesc": { + "message": "WebTransport (in a worker), WebTransport (in the page), WebSocket, or Native Messaging" + }, + "popupDataPlaneWs": { + "message": "WebSocket" + }, + "popupDataPlaneWt": { + "message": "WebTransport" + }, + "popupDataPlaneNm": { + "message": "Native Messaging" + }, + "popupDevicePickerMode": { + "message": "Device Picker Mode" + }, + "popupDevicePickerModeDesc": { + "message": "How the device chooser is presented on this site" + }, + "popupWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "popupWorkerPolyfillDesc": { + "message": "Inject WebHID API into Worker scripts on this site" + }, + "popupAllowActivationless": { + "message": "Allow requestDevice() without user gesture" + }, + "popupAllowActivationlessDesc": { + "message": "Skip the user-activation check when this site calls requestDevice(). Spec workaround for sites that call it asynchronously; the device chooser still requires explicit user selection." + }, + "popupWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "popupWorkerSpawnModeDesc": { + "message": "How the data worker is created on this site" + }, + "popupLogLevel": { + "message": "Log Level" + }, + "popupLogLevelDesc": { + "message": "Console output verbosity for this site" + }, + "logLevelError": { + "message": "Error" + }, + "logLevelWarn": { + "message": "Warn" + }, + "logLevelInfo": { + "message": "Info" + }, + "logLevelDebug": { + "message": "Debug" + }, + "popupDefaultNote": { + "message": "Changes here override defaults for this site." + }, + "popupGlobalSettings": { + "message": "Global settings →" + }, + "popupManageDevices": { + "message": "Manage all paired devices →" + }, + "popupNoSite": { + "message": "(no site)" + }, + "popupSiteOrigin": { + "message": "Site origin" + }, + "popupOriginList": { + "message": "Origins in this tab" + }, + "popupUnknown": { + "message": "Unknown" + }, + "popupPairedDevice": { + "message": "Paired device" + }, + "popupRevoke": { + "message": "Revoke" + }, + "popupDeviceCount": { + "message": "($1/$2)" + }, + "popupInPageWtWarning": { + "message": "In-page WebTransport may trigger a Firefox local-network permission prompt (\"wants to access other apps and services on this device\"). Tick \"Remember my choice for this site\" before clicking Allow, otherwise you will be asked again on every page load." + }, + "statusReady": { + "message": "Ready" + }, + "statusFallback": { + "message": "Fallback: $1" + }, + "statusOffline": { + "message": "Daemon offline" + }, + "statusOfflineGuidance": { + "message": "Check that the daemon is running (systemctl status webhid-daemon), that your user is in the webhid group, and that the udev rules are installed." + }, + "planeNameWS": { + "message": "WebSocket" + }, + "planeNameWT": { + "message": "WebTransport" + }, + "planeNameNM": { + "message": "Native Messaging" + }, + "infoPopoverMore": { + "message": "More info" + }, + "macPrivacyTitle": { + "message": "macOS Input Monitoring" + }, + "macPrivacyDesc": { + "message": "Allow the daemon to read HID devices: System Settings → Privacy & Security → Input Monitoring. If the link does not open the right tab, find it manually and enable the daemon." + }, + "macPrivacyOpen": { + "message": "Open Privacy Settings" + }, + "settingsTitle": { + "message": "WebHID Settings" + }, + "settingsDaemonAsNmHost": { + "message": "Daemon as NM host" + }, + "settingsDaemonAsNmHostDesc": { + "message": "Talk to the daemon directly over native messaging, skipping the forwarder and Unix socket. Requires the daemon_nm_host manifest and the daemon running as your user (with the udev rule). Lower latency, no root-daemon fallback. Reconnects automatically." + }, + "settingsDataPlane": { + "message": "Data Plane" + }, + "settingsDataPlaneDesc": { + "message": "**WebTransport** (default): the fastest option; runs in a background worker so pages stay smooth.\n**WebTransport (in-page)**: connects directly in the page; fine at normal report rates, uses more page CPU. Use it when the site blocks background workers (CSP) but still allows the connection; the worker-based options would fall back to Native Messaging there. Firefox asks a one-time local-network permission (\"Allow\") before the first in-page connection; tick \"Remember my choice for this site\". Reload pages after changing.\n**WebSocket**: fallback when WebTransport is not available (older Firefox).\n**Native Messaging**: the slowest but most compatible option; use when a site's security policy blocks the others." + }, + "settingsDataPlaneWs": { + "message": "WebSocket" + }, + "settingsDataPlaneWt": { + "message": "WebTransport" + }, + "settingsDataPlaneWtInpage": { + "message": "WebTransport (in-page)" + }, + "settingsDataPlaneNm": { + "message": "Native Messaging" + }, + "settingsDevicePickerMode": { + "message": "Device Picker Mode" + }, + "settingsDevicePickerModeDesc": { + "message": "**Modal**: shadow-DOM overlay on the page when requestDevice() is called (default).\n**Page Action**: URL-bar popup picker; the user clicks the icon to open it. Firefox only, Chromium falls back to modal.\n**Window**: separate popup window." + }, + "settingsDevicePickerModal": { + "message": "Modal (overlay)" + }, + "settingsDevicePickerPageAction": { + "message": "Page Action (URL bar popup)" + }, + "settingsDevicePickerWindow": { + "message": "Window (separate popup window)" + }, + "settingsWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "settingsWorkerPolyfillDesc": { + "message": "Injects the full WebHID API into Worker scripts (new Worker()). requestDevice() stays page-only, as the spec requires. Reload pages after changing." + }, + "settingsAllowActivationless": { + "message": "Allow activation-less requestDevice()" + }, + "settingsAllowActivationlessDesc": { + "message": "Skip the user-activation requirement for requestDevice() on this site. Spec deviation; workaround for sites that call it from an async handler. The chooser still requires explicit user selection. Reload pages after changing." + }, + "settingsLogLevel": { + "message": "Log Level" + }, + "settingsLogLevelDesc": { + "message": "Console verbosity: Error = errors only, Warn = +warnings, Info = +info, Debug = +debug (includes timing). Reload pages after changing." + }, + "pickerTitle": { + "message": "Select a HID Device" + }, + "pickerCancel": { + "message": "Cancel" + }, + "pickerConnect": { + "message": "Connect" + }, + "pickerNoDevices": { + "message": "No HID devices found" + }, + "pickerNoDaemon": { + "message": "Cannot reach the WebHID daemon. Check that it is installed and running, then try again." + }, + "pickerParseFailed": { + "message": "This device's report descriptor could not be parsed. Connecting and sending reports still works." + }, + "pickerNoMatch": { + "message": "No devices match the specified filters" + }, + "pickerNoPending": { + "message": "No pending device request" + }, + "pickerLoading": { + "message": "Loading devices..." + }, + "pickerInterfaces": { + "message": "$1 interfaces" + }, + "settingsWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "settingsWorkerSpawnModeDesc": { + "message": "**Shadow URL** (default on MV3): spawns the data worker via new Worker(location.href) with a StreamFilter intercepting the synthetic self-request; respects the page's security settings and changes nothing about the page. Fails if the server rejects it or if require-trusted-types-for is restrictive.\n**Blob + CSP rewrite** (default on MV2): spawns the worker from a blob: URL; relaxes the page's worker-src and connect-src directives. Works fully on MV2; on MV3 only a meta-tag CSP can be rewritten, so header-based policies still block it." + }, + "settingsWorkerSpawnShadow": { + "message": "Shadow URL" + }, + "settingsWorkerSpawnBlob": { + "message": "Blob + CSP rewrite" + }, + "segDataPlaneWs": { + "message": "WS" + }, + "segDataPlaneWt": { + "message": "WT" + }, + "segDataPlaneWtInpage": { + "message": "WTI" + }, + "segDataPlaneNm": { + "message": "NM" + }, + "segPickerModal": { + "message": "Modal" + }, + "segPickerPageAction": { + "message": "Page Action" + }, + "segPickerWindow": { + "message": "Window" + }, + "segSpawnShadow": { + "message": "Shadow" + }, + "segSpawnBlob": { + "message": "Blob" + }, + "devicesTitle": { + "message": "Paired Devices (all sites)" + }, + "devicesNone": { + "message": "No devices paired on any site." + } +} From 9d3dc63ca77776596d7cf90fd04f82104e82bc67 Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 13:49:42 +0700 Subject: [PATCH 08/29] New translations messages.json (Danish) [ci skip] chore: sync translations from Crowdin --- addon/_locales/da_DK/messages.json | 281 +++++++++++++++++++++++++++++ 1 file changed, 281 insertions(+) create mode 100644 addon/_locales/da_DK/messages.json diff --git a/addon/_locales/da_DK/messages.json b/addon/_locales/da_DK/messages.json new file mode 100644 index 00000000..d602377d --- /dev/null +++ b/addon/_locales/da_DK/messages.json @@ -0,0 +1,281 @@ +{ + "extensionName": { + "message": "WebHID" + }, + "extensionDescription": { + "message": "WebHID API implementation for Firefox" + }, + "popupTitle": { + "message": "WebHID" + }, + "popupBack": { + "message": "Back" + }, + "popupPairedDevices": { + "message": "Paired Devices" + }, + "popupNoDevices": { + "message": "No devices paired for this site." + }, + "popupSettings": { + "message": "Settings" + }, + "popupDataPlane": { + "message": "Data Plane" + }, + "popupDataPlaneDesc": { + "message": "WebTransport (in a worker), WebTransport (in the page), WebSocket, or Native Messaging" + }, + "popupDataPlaneWs": { + "message": "WebSocket" + }, + "popupDataPlaneWt": { + "message": "WebTransport" + }, + "popupDataPlaneNm": { + "message": "Native Messaging" + }, + "popupDevicePickerMode": { + "message": "Device Picker Mode" + }, + "popupDevicePickerModeDesc": { + "message": "How the device chooser is presented on this site" + }, + "popupWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "popupWorkerPolyfillDesc": { + "message": "Inject WebHID API into Worker scripts on this site" + }, + "popupAllowActivationless": { + "message": "Allow requestDevice() without user gesture" + }, + "popupAllowActivationlessDesc": { + "message": "Skip the user-activation check when this site calls requestDevice(). Spec workaround for sites that call it asynchronously; the device chooser still requires explicit user selection." + }, + "popupWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "popupWorkerSpawnModeDesc": { + "message": "How the data worker is created on this site" + }, + "popupLogLevel": { + "message": "Log Level" + }, + "popupLogLevelDesc": { + "message": "Console output verbosity for this site" + }, + "logLevelError": { + "message": "Error" + }, + "logLevelWarn": { + "message": "Warn" + }, + "logLevelInfo": { + "message": "Info" + }, + "logLevelDebug": { + "message": "Debug" + }, + "popupDefaultNote": { + "message": "Changes here override defaults for this site." + }, + "popupGlobalSettings": { + "message": "Global settings →" + }, + "popupManageDevices": { + "message": "Manage all paired devices →" + }, + "popupNoSite": { + "message": "(no site)" + }, + "popupSiteOrigin": { + "message": "Site origin" + }, + "popupOriginList": { + "message": "Origins in this tab" + }, + "popupUnknown": { + "message": "Unknown" + }, + "popupPairedDevice": { + "message": "Paired device" + }, + "popupRevoke": { + "message": "Revoke" + }, + "popupDeviceCount": { + "message": "($1/$2)" + }, + "popupInPageWtWarning": { + "message": "In-page WebTransport may trigger a Firefox local-network permission prompt (\"wants to access other apps and services on this device\"). Tick \"Remember my choice for this site\" before clicking Allow, otherwise you will be asked again on every page load." + }, + "statusReady": { + "message": "Ready" + }, + "statusFallback": { + "message": "Fallback: $1" + }, + "statusOffline": { + "message": "Daemon offline" + }, + "statusOfflineGuidance": { + "message": "Check that the daemon is running (systemctl status webhid-daemon), that your user is in the webhid group, and that the udev rules are installed." + }, + "planeNameWS": { + "message": "WebSocket" + }, + "planeNameWT": { + "message": "WebTransport" + }, + "planeNameNM": { + "message": "Native Messaging" + }, + "infoPopoverMore": { + "message": "More info" + }, + "macPrivacyTitle": { + "message": "macOS Input Monitoring" + }, + "macPrivacyDesc": { + "message": "Allow the daemon to read HID devices: System Settings → Privacy & Security → Input Monitoring. If the link does not open the right tab, find it manually and enable the daemon." + }, + "macPrivacyOpen": { + "message": "Open Privacy Settings" + }, + "settingsTitle": { + "message": "WebHID Settings" + }, + "settingsDaemonAsNmHost": { + "message": "Daemon as NM host" + }, + "settingsDaemonAsNmHostDesc": { + "message": "Talk to the daemon directly over native messaging, skipping the forwarder and Unix socket. Requires the daemon_nm_host manifest and the daemon running as your user (with the udev rule). Lower latency, no root-daemon fallback. Reconnects automatically." + }, + "settingsDataPlane": { + "message": "Data Plane" + }, + "settingsDataPlaneDesc": { + "message": "**WebTransport** (default): the fastest option; runs in a background worker so pages stay smooth.\n**WebTransport (in-page)**: connects directly in the page; fine at normal report rates, uses more page CPU. Use it when the site blocks background workers (CSP) but still allows the connection; the worker-based options would fall back to Native Messaging there. Firefox asks a one-time local-network permission (\"Allow\") before the first in-page connection; tick \"Remember my choice for this site\". Reload pages after changing.\n**WebSocket**: fallback when WebTransport is not available (older Firefox).\n**Native Messaging**: the slowest but most compatible option; use when a site's security policy blocks the others." + }, + "settingsDataPlaneWs": { + "message": "WebSocket" + }, + "settingsDataPlaneWt": { + "message": "WebTransport" + }, + "settingsDataPlaneWtInpage": { + "message": "WebTransport (in-page)" + }, + "settingsDataPlaneNm": { + "message": "Native Messaging" + }, + "settingsDevicePickerMode": { + "message": "Device Picker Mode" + }, + "settingsDevicePickerModeDesc": { + "message": "**Modal**: shadow-DOM overlay on the page when requestDevice() is called (default).\n**Page Action**: URL-bar popup picker; the user clicks the icon to open it. Firefox only, Chromium falls back to modal.\n**Window**: separate popup window." + }, + "settingsDevicePickerModal": { + "message": "Modal (overlay)" + }, + "settingsDevicePickerPageAction": { + "message": "Page Action (URL bar popup)" + }, + "settingsDevicePickerWindow": { + "message": "Window (separate popup window)" + }, + "settingsWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "settingsWorkerPolyfillDesc": { + "message": "Injects the full WebHID API into Worker scripts (new Worker()). requestDevice() stays page-only, as the spec requires. Reload pages after changing." + }, + "settingsAllowActivationless": { + "message": "Allow activation-less requestDevice()" + }, + "settingsAllowActivationlessDesc": { + "message": "Skip the user-activation requirement for requestDevice() on this site. Spec deviation; workaround for sites that call it from an async handler. The chooser still requires explicit user selection. Reload pages after changing." + }, + "settingsLogLevel": { + "message": "Log Level" + }, + "settingsLogLevelDesc": { + "message": "Console verbosity: Error = errors only, Warn = +warnings, Info = +info, Debug = +debug (includes timing). Reload pages after changing." + }, + "pickerTitle": { + "message": "Select a HID Device" + }, + "pickerCancel": { + "message": "Cancel" + }, + "pickerConnect": { + "message": "Connect" + }, + "pickerNoDevices": { + "message": "No HID devices found" + }, + "pickerNoDaemon": { + "message": "Cannot reach the WebHID daemon. Check that it is installed and running, then try again." + }, + "pickerParseFailed": { + "message": "This device's report descriptor could not be parsed. Connecting and sending reports still works." + }, + "pickerNoMatch": { + "message": "No devices match the specified filters" + }, + "pickerNoPending": { + "message": "No pending device request" + }, + "pickerLoading": { + "message": "Loading devices..." + }, + "pickerInterfaces": { + "message": "$1 interfaces" + }, + "settingsWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "settingsWorkerSpawnModeDesc": { + "message": "**Shadow URL** (default on MV3): spawns the data worker via new Worker(location.href) with a StreamFilter intercepting the synthetic self-request; respects the page's security settings and changes nothing about the page. Fails if the server rejects it or if require-trusted-types-for is restrictive.\n**Blob + CSP rewrite** (default on MV2): spawns the worker from a blob: URL; relaxes the page's worker-src and connect-src directives. Works fully on MV2; on MV3 only a meta-tag CSP can be rewritten, so header-based policies still block it." + }, + "settingsWorkerSpawnShadow": { + "message": "Shadow URL" + }, + "settingsWorkerSpawnBlob": { + "message": "Blob + CSP rewrite" + }, + "segDataPlaneWs": { + "message": "WS" + }, + "segDataPlaneWt": { + "message": "WT" + }, + "segDataPlaneWtInpage": { + "message": "WTI" + }, + "segDataPlaneNm": { + "message": "NM" + }, + "segPickerModal": { + "message": "Modal" + }, + "segPickerPageAction": { + "message": "Page Action" + }, + "segPickerWindow": { + "message": "Window" + }, + "segSpawnShadow": { + "message": "Shadow" + }, + "segSpawnBlob": { + "message": "Blob" + }, + "devicesTitle": { + "message": "Paired Devices (all sites)" + }, + "devicesNone": { + "message": "No devices paired on any site." + } +} From dd3982f5bd59c2b705c5f138b3439a97c2e837e6 Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 13:49:43 +0700 Subject: [PATCH 09/29] New translations messages.json (German) [ci skip] chore: sync translations from Crowdin --- addon/_locales/de_DE/messages.json | 281 +++++++++++++++++++++++++++++ 1 file changed, 281 insertions(+) create mode 100644 addon/_locales/de_DE/messages.json diff --git a/addon/_locales/de_DE/messages.json b/addon/_locales/de_DE/messages.json new file mode 100644 index 00000000..d602377d --- /dev/null +++ b/addon/_locales/de_DE/messages.json @@ -0,0 +1,281 @@ +{ + "extensionName": { + "message": "WebHID" + }, + "extensionDescription": { + "message": "WebHID API implementation for Firefox" + }, + "popupTitle": { + "message": "WebHID" + }, + "popupBack": { + "message": "Back" + }, + "popupPairedDevices": { + "message": "Paired Devices" + }, + "popupNoDevices": { + "message": "No devices paired for this site." + }, + "popupSettings": { + "message": "Settings" + }, + "popupDataPlane": { + "message": "Data Plane" + }, + "popupDataPlaneDesc": { + "message": "WebTransport (in a worker), WebTransport (in the page), WebSocket, or Native Messaging" + }, + "popupDataPlaneWs": { + "message": "WebSocket" + }, + "popupDataPlaneWt": { + "message": "WebTransport" + }, + "popupDataPlaneNm": { + "message": "Native Messaging" + }, + "popupDevicePickerMode": { + "message": "Device Picker Mode" + }, + "popupDevicePickerModeDesc": { + "message": "How the device chooser is presented on this site" + }, + "popupWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "popupWorkerPolyfillDesc": { + "message": "Inject WebHID API into Worker scripts on this site" + }, + "popupAllowActivationless": { + "message": "Allow requestDevice() without user gesture" + }, + "popupAllowActivationlessDesc": { + "message": "Skip the user-activation check when this site calls requestDevice(). Spec workaround for sites that call it asynchronously; the device chooser still requires explicit user selection." + }, + "popupWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "popupWorkerSpawnModeDesc": { + "message": "How the data worker is created on this site" + }, + "popupLogLevel": { + "message": "Log Level" + }, + "popupLogLevelDesc": { + "message": "Console output verbosity for this site" + }, + "logLevelError": { + "message": "Error" + }, + "logLevelWarn": { + "message": "Warn" + }, + "logLevelInfo": { + "message": "Info" + }, + "logLevelDebug": { + "message": "Debug" + }, + "popupDefaultNote": { + "message": "Changes here override defaults for this site." + }, + "popupGlobalSettings": { + "message": "Global settings →" + }, + "popupManageDevices": { + "message": "Manage all paired devices →" + }, + "popupNoSite": { + "message": "(no site)" + }, + "popupSiteOrigin": { + "message": "Site origin" + }, + "popupOriginList": { + "message": "Origins in this tab" + }, + "popupUnknown": { + "message": "Unknown" + }, + "popupPairedDevice": { + "message": "Paired device" + }, + "popupRevoke": { + "message": "Revoke" + }, + "popupDeviceCount": { + "message": "($1/$2)" + }, + "popupInPageWtWarning": { + "message": "In-page WebTransport may trigger a Firefox local-network permission prompt (\"wants to access other apps and services on this device\"). Tick \"Remember my choice for this site\" before clicking Allow, otherwise you will be asked again on every page load." + }, + "statusReady": { + "message": "Ready" + }, + "statusFallback": { + "message": "Fallback: $1" + }, + "statusOffline": { + "message": "Daemon offline" + }, + "statusOfflineGuidance": { + "message": "Check that the daemon is running (systemctl status webhid-daemon), that your user is in the webhid group, and that the udev rules are installed." + }, + "planeNameWS": { + "message": "WebSocket" + }, + "planeNameWT": { + "message": "WebTransport" + }, + "planeNameNM": { + "message": "Native Messaging" + }, + "infoPopoverMore": { + "message": "More info" + }, + "macPrivacyTitle": { + "message": "macOS Input Monitoring" + }, + "macPrivacyDesc": { + "message": "Allow the daemon to read HID devices: System Settings → Privacy & Security → Input Monitoring. If the link does not open the right tab, find it manually and enable the daemon." + }, + "macPrivacyOpen": { + "message": "Open Privacy Settings" + }, + "settingsTitle": { + "message": "WebHID Settings" + }, + "settingsDaemonAsNmHost": { + "message": "Daemon as NM host" + }, + "settingsDaemonAsNmHostDesc": { + "message": "Talk to the daemon directly over native messaging, skipping the forwarder and Unix socket. Requires the daemon_nm_host manifest and the daemon running as your user (with the udev rule). Lower latency, no root-daemon fallback. Reconnects automatically." + }, + "settingsDataPlane": { + "message": "Data Plane" + }, + "settingsDataPlaneDesc": { + "message": "**WebTransport** (default): the fastest option; runs in a background worker so pages stay smooth.\n**WebTransport (in-page)**: connects directly in the page; fine at normal report rates, uses more page CPU. Use it when the site blocks background workers (CSP) but still allows the connection; the worker-based options would fall back to Native Messaging there. Firefox asks a one-time local-network permission (\"Allow\") before the first in-page connection; tick \"Remember my choice for this site\". Reload pages after changing.\n**WebSocket**: fallback when WebTransport is not available (older Firefox).\n**Native Messaging**: the slowest but most compatible option; use when a site's security policy blocks the others." + }, + "settingsDataPlaneWs": { + "message": "WebSocket" + }, + "settingsDataPlaneWt": { + "message": "WebTransport" + }, + "settingsDataPlaneWtInpage": { + "message": "WebTransport (in-page)" + }, + "settingsDataPlaneNm": { + "message": "Native Messaging" + }, + "settingsDevicePickerMode": { + "message": "Device Picker Mode" + }, + "settingsDevicePickerModeDesc": { + "message": "**Modal**: shadow-DOM overlay on the page when requestDevice() is called (default).\n**Page Action**: URL-bar popup picker; the user clicks the icon to open it. Firefox only, Chromium falls back to modal.\n**Window**: separate popup window." + }, + "settingsDevicePickerModal": { + "message": "Modal (overlay)" + }, + "settingsDevicePickerPageAction": { + "message": "Page Action (URL bar popup)" + }, + "settingsDevicePickerWindow": { + "message": "Window (separate popup window)" + }, + "settingsWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "settingsWorkerPolyfillDesc": { + "message": "Injects the full WebHID API into Worker scripts (new Worker()). requestDevice() stays page-only, as the spec requires. Reload pages after changing." + }, + "settingsAllowActivationless": { + "message": "Allow activation-less requestDevice()" + }, + "settingsAllowActivationlessDesc": { + "message": "Skip the user-activation requirement for requestDevice() on this site. Spec deviation; workaround for sites that call it from an async handler. The chooser still requires explicit user selection. Reload pages after changing." + }, + "settingsLogLevel": { + "message": "Log Level" + }, + "settingsLogLevelDesc": { + "message": "Console verbosity: Error = errors only, Warn = +warnings, Info = +info, Debug = +debug (includes timing). Reload pages after changing." + }, + "pickerTitle": { + "message": "Select a HID Device" + }, + "pickerCancel": { + "message": "Cancel" + }, + "pickerConnect": { + "message": "Connect" + }, + "pickerNoDevices": { + "message": "No HID devices found" + }, + "pickerNoDaemon": { + "message": "Cannot reach the WebHID daemon. Check that it is installed and running, then try again." + }, + "pickerParseFailed": { + "message": "This device's report descriptor could not be parsed. Connecting and sending reports still works." + }, + "pickerNoMatch": { + "message": "No devices match the specified filters" + }, + "pickerNoPending": { + "message": "No pending device request" + }, + "pickerLoading": { + "message": "Loading devices..." + }, + "pickerInterfaces": { + "message": "$1 interfaces" + }, + "settingsWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "settingsWorkerSpawnModeDesc": { + "message": "**Shadow URL** (default on MV3): spawns the data worker via new Worker(location.href) with a StreamFilter intercepting the synthetic self-request; respects the page's security settings and changes nothing about the page. Fails if the server rejects it or if require-trusted-types-for is restrictive.\n**Blob + CSP rewrite** (default on MV2): spawns the worker from a blob: URL; relaxes the page's worker-src and connect-src directives. Works fully on MV2; on MV3 only a meta-tag CSP can be rewritten, so header-based policies still block it." + }, + "settingsWorkerSpawnShadow": { + "message": "Shadow URL" + }, + "settingsWorkerSpawnBlob": { + "message": "Blob + CSP rewrite" + }, + "segDataPlaneWs": { + "message": "WS" + }, + "segDataPlaneWt": { + "message": "WT" + }, + "segDataPlaneWtInpage": { + "message": "WTI" + }, + "segDataPlaneNm": { + "message": "NM" + }, + "segPickerModal": { + "message": "Modal" + }, + "segPickerPageAction": { + "message": "Page Action" + }, + "segPickerWindow": { + "message": "Window" + }, + "segSpawnShadow": { + "message": "Shadow" + }, + "segSpawnBlob": { + "message": "Blob" + }, + "devicesTitle": { + "message": "Paired Devices (all sites)" + }, + "devicesNone": { + "message": "No devices paired on any site." + } +} From c88e7753d68f0e92b2fb81bd6c4ad905a53ae7d5 Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 13:49:44 +0700 Subject: [PATCH 10/29] New translations messages.json (Greek) [ci skip] chore: sync translations from Crowdin --- addon/_locales/el_GR/messages.json | 281 +++++++++++++++++++++++++++++ 1 file changed, 281 insertions(+) create mode 100644 addon/_locales/el_GR/messages.json diff --git a/addon/_locales/el_GR/messages.json b/addon/_locales/el_GR/messages.json new file mode 100644 index 00000000..d602377d --- /dev/null +++ b/addon/_locales/el_GR/messages.json @@ -0,0 +1,281 @@ +{ + "extensionName": { + "message": "WebHID" + }, + "extensionDescription": { + "message": "WebHID API implementation for Firefox" + }, + "popupTitle": { + "message": "WebHID" + }, + "popupBack": { + "message": "Back" + }, + "popupPairedDevices": { + "message": "Paired Devices" + }, + "popupNoDevices": { + "message": "No devices paired for this site." + }, + "popupSettings": { + "message": "Settings" + }, + "popupDataPlane": { + "message": "Data Plane" + }, + "popupDataPlaneDesc": { + "message": "WebTransport (in a worker), WebTransport (in the page), WebSocket, or Native Messaging" + }, + "popupDataPlaneWs": { + "message": "WebSocket" + }, + "popupDataPlaneWt": { + "message": "WebTransport" + }, + "popupDataPlaneNm": { + "message": "Native Messaging" + }, + "popupDevicePickerMode": { + "message": "Device Picker Mode" + }, + "popupDevicePickerModeDesc": { + "message": "How the device chooser is presented on this site" + }, + "popupWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "popupWorkerPolyfillDesc": { + "message": "Inject WebHID API into Worker scripts on this site" + }, + "popupAllowActivationless": { + "message": "Allow requestDevice() without user gesture" + }, + "popupAllowActivationlessDesc": { + "message": "Skip the user-activation check when this site calls requestDevice(). Spec workaround for sites that call it asynchronously; the device chooser still requires explicit user selection." + }, + "popupWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "popupWorkerSpawnModeDesc": { + "message": "How the data worker is created on this site" + }, + "popupLogLevel": { + "message": "Log Level" + }, + "popupLogLevelDesc": { + "message": "Console output verbosity for this site" + }, + "logLevelError": { + "message": "Error" + }, + "logLevelWarn": { + "message": "Warn" + }, + "logLevelInfo": { + "message": "Info" + }, + "logLevelDebug": { + "message": "Debug" + }, + "popupDefaultNote": { + "message": "Changes here override defaults for this site." + }, + "popupGlobalSettings": { + "message": "Global settings →" + }, + "popupManageDevices": { + "message": "Manage all paired devices →" + }, + "popupNoSite": { + "message": "(no site)" + }, + "popupSiteOrigin": { + "message": "Site origin" + }, + "popupOriginList": { + "message": "Origins in this tab" + }, + "popupUnknown": { + "message": "Unknown" + }, + "popupPairedDevice": { + "message": "Paired device" + }, + "popupRevoke": { + "message": "Revoke" + }, + "popupDeviceCount": { + "message": "($1/$2)" + }, + "popupInPageWtWarning": { + "message": "In-page WebTransport may trigger a Firefox local-network permission prompt (\"wants to access other apps and services on this device\"). Tick \"Remember my choice for this site\" before clicking Allow, otherwise you will be asked again on every page load." + }, + "statusReady": { + "message": "Ready" + }, + "statusFallback": { + "message": "Fallback: $1" + }, + "statusOffline": { + "message": "Daemon offline" + }, + "statusOfflineGuidance": { + "message": "Check that the daemon is running (systemctl status webhid-daemon), that your user is in the webhid group, and that the udev rules are installed." + }, + "planeNameWS": { + "message": "WebSocket" + }, + "planeNameWT": { + "message": "WebTransport" + }, + "planeNameNM": { + "message": "Native Messaging" + }, + "infoPopoverMore": { + "message": "More info" + }, + "macPrivacyTitle": { + "message": "macOS Input Monitoring" + }, + "macPrivacyDesc": { + "message": "Allow the daemon to read HID devices: System Settings → Privacy & Security → Input Monitoring. If the link does not open the right tab, find it manually and enable the daemon." + }, + "macPrivacyOpen": { + "message": "Open Privacy Settings" + }, + "settingsTitle": { + "message": "WebHID Settings" + }, + "settingsDaemonAsNmHost": { + "message": "Daemon as NM host" + }, + "settingsDaemonAsNmHostDesc": { + "message": "Talk to the daemon directly over native messaging, skipping the forwarder and Unix socket. Requires the daemon_nm_host manifest and the daemon running as your user (with the udev rule). Lower latency, no root-daemon fallback. Reconnects automatically." + }, + "settingsDataPlane": { + "message": "Data Plane" + }, + "settingsDataPlaneDesc": { + "message": "**WebTransport** (default): the fastest option; runs in a background worker so pages stay smooth.\n**WebTransport (in-page)**: connects directly in the page; fine at normal report rates, uses more page CPU. Use it when the site blocks background workers (CSP) but still allows the connection; the worker-based options would fall back to Native Messaging there. Firefox asks a one-time local-network permission (\"Allow\") before the first in-page connection; tick \"Remember my choice for this site\". Reload pages after changing.\n**WebSocket**: fallback when WebTransport is not available (older Firefox).\n**Native Messaging**: the slowest but most compatible option; use when a site's security policy blocks the others." + }, + "settingsDataPlaneWs": { + "message": "WebSocket" + }, + "settingsDataPlaneWt": { + "message": "WebTransport" + }, + "settingsDataPlaneWtInpage": { + "message": "WebTransport (in-page)" + }, + "settingsDataPlaneNm": { + "message": "Native Messaging" + }, + "settingsDevicePickerMode": { + "message": "Device Picker Mode" + }, + "settingsDevicePickerModeDesc": { + "message": "**Modal**: shadow-DOM overlay on the page when requestDevice() is called (default).\n**Page Action**: URL-bar popup picker; the user clicks the icon to open it. Firefox only, Chromium falls back to modal.\n**Window**: separate popup window." + }, + "settingsDevicePickerModal": { + "message": "Modal (overlay)" + }, + "settingsDevicePickerPageAction": { + "message": "Page Action (URL bar popup)" + }, + "settingsDevicePickerWindow": { + "message": "Window (separate popup window)" + }, + "settingsWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "settingsWorkerPolyfillDesc": { + "message": "Injects the full WebHID API into Worker scripts (new Worker()). requestDevice() stays page-only, as the spec requires. Reload pages after changing." + }, + "settingsAllowActivationless": { + "message": "Allow activation-less requestDevice()" + }, + "settingsAllowActivationlessDesc": { + "message": "Skip the user-activation requirement for requestDevice() on this site. Spec deviation; workaround for sites that call it from an async handler. The chooser still requires explicit user selection. Reload pages after changing." + }, + "settingsLogLevel": { + "message": "Log Level" + }, + "settingsLogLevelDesc": { + "message": "Console verbosity: Error = errors only, Warn = +warnings, Info = +info, Debug = +debug (includes timing). Reload pages after changing." + }, + "pickerTitle": { + "message": "Select a HID Device" + }, + "pickerCancel": { + "message": "Cancel" + }, + "pickerConnect": { + "message": "Connect" + }, + "pickerNoDevices": { + "message": "No HID devices found" + }, + "pickerNoDaemon": { + "message": "Cannot reach the WebHID daemon. Check that it is installed and running, then try again." + }, + "pickerParseFailed": { + "message": "This device's report descriptor could not be parsed. Connecting and sending reports still works." + }, + "pickerNoMatch": { + "message": "No devices match the specified filters" + }, + "pickerNoPending": { + "message": "No pending device request" + }, + "pickerLoading": { + "message": "Loading devices..." + }, + "pickerInterfaces": { + "message": "$1 interfaces" + }, + "settingsWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "settingsWorkerSpawnModeDesc": { + "message": "**Shadow URL** (default on MV3): spawns the data worker via new Worker(location.href) with a StreamFilter intercepting the synthetic self-request; respects the page's security settings and changes nothing about the page. Fails if the server rejects it or if require-trusted-types-for is restrictive.\n**Blob + CSP rewrite** (default on MV2): spawns the worker from a blob: URL; relaxes the page's worker-src and connect-src directives. Works fully on MV2; on MV3 only a meta-tag CSP can be rewritten, so header-based policies still block it." + }, + "settingsWorkerSpawnShadow": { + "message": "Shadow URL" + }, + "settingsWorkerSpawnBlob": { + "message": "Blob + CSP rewrite" + }, + "segDataPlaneWs": { + "message": "WS" + }, + "segDataPlaneWt": { + "message": "WT" + }, + "segDataPlaneWtInpage": { + "message": "WTI" + }, + "segDataPlaneNm": { + "message": "NM" + }, + "segPickerModal": { + "message": "Modal" + }, + "segPickerPageAction": { + "message": "Page Action" + }, + "segPickerWindow": { + "message": "Window" + }, + "segSpawnShadow": { + "message": "Shadow" + }, + "segSpawnBlob": { + "message": "Blob" + }, + "devicesTitle": { + "message": "Paired Devices (all sites)" + }, + "devicesNone": { + "message": "No devices paired on any site." + } +} From 0e310097e1eb32ac49f8c3b071c79927fdbfe05e Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 13:49:45 +0700 Subject: [PATCH 11/29] New translations messages.json (Finnish) [ci skip] chore: sync translations from Crowdin --- addon/_locales/fi_FI/messages.json | 281 +++++++++++++++++++++++++++++ 1 file changed, 281 insertions(+) create mode 100644 addon/_locales/fi_FI/messages.json diff --git a/addon/_locales/fi_FI/messages.json b/addon/_locales/fi_FI/messages.json new file mode 100644 index 00000000..d602377d --- /dev/null +++ b/addon/_locales/fi_FI/messages.json @@ -0,0 +1,281 @@ +{ + "extensionName": { + "message": "WebHID" + }, + "extensionDescription": { + "message": "WebHID API implementation for Firefox" + }, + "popupTitle": { + "message": "WebHID" + }, + "popupBack": { + "message": "Back" + }, + "popupPairedDevices": { + "message": "Paired Devices" + }, + "popupNoDevices": { + "message": "No devices paired for this site." + }, + "popupSettings": { + "message": "Settings" + }, + "popupDataPlane": { + "message": "Data Plane" + }, + "popupDataPlaneDesc": { + "message": "WebTransport (in a worker), WebTransport (in the page), WebSocket, or Native Messaging" + }, + "popupDataPlaneWs": { + "message": "WebSocket" + }, + "popupDataPlaneWt": { + "message": "WebTransport" + }, + "popupDataPlaneNm": { + "message": "Native Messaging" + }, + "popupDevicePickerMode": { + "message": "Device Picker Mode" + }, + "popupDevicePickerModeDesc": { + "message": "How the device chooser is presented on this site" + }, + "popupWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "popupWorkerPolyfillDesc": { + "message": "Inject WebHID API into Worker scripts on this site" + }, + "popupAllowActivationless": { + "message": "Allow requestDevice() without user gesture" + }, + "popupAllowActivationlessDesc": { + "message": "Skip the user-activation check when this site calls requestDevice(). Spec workaround for sites that call it asynchronously; the device chooser still requires explicit user selection." + }, + "popupWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "popupWorkerSpawnModeDesc": { + "message": "How the data worker is created on this site" + }, + "popupLogLevel": { + "message": "Log Level" + }, + "popupLogLevelDesc": { + "message": "Console output verbosity for this site" + }, + "logLevelError": { + "message": "Error" + }, + "logLevelWarn": { + "message": "Warn" + }, + "logLevelInfo": { + "message": "Info" + }, + "logLevelDebug": { + "message": "Debug" + }, + "popupDefaultNote": { + "message": "Changes here override defaults for this site." + }, + "popupGlobalSettings": { + "message": "Global settings →" + }, + "popupManageDevices": { + "message": "Manage all paired devices →" + }, + "popupNoSite": { + "message": "(no site)" + }, + "popupSiteOrigin": { + "message": "Site origin" + }, + "popupOriginList": { + "message": "Origins in this tab" + }, + "popupUnknown": { + "message": "Unknown" + }, + "popupPairedDevice": { + "message": "Paired device" + }, + "popupRevoke": { + "message": "Revoke" + }, + "popupDeviceCount": { + "message": "($1/$2)" + }, + "popupInPageWtWarning": { + "message": "In-page WebTransport may trigger a Firefox local-network permission prompt (\"wants to access other apps and services on this device\"). Tick \"Remember my choice for this site\" before clicking Allow, otherwise you will be asked again on every page load." + }, + "statusReady": { + "message": "Ready" + }, + "statusFallback": { + "message": "Fallback: $1" + }, + "statusOffline": { + "message": "Daemon offline" + }, + "statusOfflineGuidance": { + "message": "Check that the daemon is running (systemctl status webhid-daemon), that your user is in the webhid group, and that the udev rules are installed." + }, + "planeNameWS": { + "message": "WebSocket" + }, + "planeNameWT": { + "message": "WebTransport" + }, + "planeNameNM": { + "message": "Native Messaging" + }, + "infoPopoverMore": { + "message": "More info" + }, + "macPrivacyTitle": { + "message": "macOS Input Monitoring" + }, + "macPrivacyDesc": { + "message": "Allow the daemon to read HID devices: System Settings → Privacy & Security → Input Monitoring. If the link does not open the right tab, find it manually and enable the daemon." + }, + "macPrivacyOpen": { + "message": "Open Privacy Settings" + }, + "settingsTitle": { + "message": "WebHID Settings" + }, + "settingsDaemonAsNmHost": { + "message": "Daemon as NM host" + }, + "settingsDaemonAsNmHostDesc": { + "message": "Talk to the daemon directly over native messaging, skipping the forwarder and Unix socket. Requires the daemon_nm_host manifest and the daemon running as your user (with the udev rule). Lower latency, no root-daemon fallback. Reconnects automatically." + }, + "settingsDataPlane": { + "message": "Data Plane" + }, + "settingsDataPlaneDesc": { + "message": "**WebTransport** (default): the fastest option; runs in a background worker so pages stay smooth.\n**WebTransport (in-page)**: connects directly in the page; fine at normal report rates, uses more page CPU. Use it when the site blocks background workers (CSP) but still allows the connection; the worker-based options would fall back to Native Messaging there. Firefox asks a one-time local-network permission (\"Allow\") before the first in-page connection; tick \"Remember my choice for this site\". Reload pages after changing.\n**WebSocket**: fallback when WebTransport is not available (older Firefox).\n**Native Messaging**: the slowest but most compatible option; use when a site's security policy blocks the others." + }, + "settingsDataPlaneWs": { + "message": "WebSocket" + }, + "settingsDataPlaneWt": { + "message": "WebTransport" + }, + "settingsDataPlaneWtInpage": { + "message": "WebTransport (in-page)" + }, + "settingsDataPlaneNm": { + "message": "Native Messaging" + }, + "settingsDevicePickerMode": { + "message": "Device Picker Mode" + }, + "settingsDevicePickerModeDesc": { + "message": "**Modal**: shadow-DOM overlay on the page when requestDevice() is called (default).\n**Page Action**: URL-bar popup picker; the user clicks the icon to open it. Firefox only, Chromium falls back to modal.\n**Window**: separate popup window." + }, + "settingsDevicePickerModal": { + "message": "Modal (overlay)" + }, + "settingsDevicePickerPageAction": { + "message": "Page Action (URL bar popup)" + }, + "settingsDevicePickerWindow": { + "message": "Window (separate popup window)" + }, + "settingsWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "settingsWorkerPolyfillDesc": { + "message": "Injects the full WebHID API into Worker scripts (new Worker()). requestDevice() stays page-only, as the spec requires. Reload pages after changing." + }, + "settingsAllowActivationless": { + "message": "Allow activation-less requestDevice()" + }, + "settingsAllowActivationlessDesc": { + "message": "Skip the user-activation requirement for requestDevice() on this site. Spec deviation; workaround for sites that call it from an async handler. The chooser still requires explicit user selection. Reload pages after changing." + }, + "settingsLogLevel": { + "message": "Log Level" + }, + "settingsLogLevelDesc": { + "message": "Console verbosity: Error = errors only, Warn = +warnings, Info = +info, Debug = +debug (includes timing). Reload pages after changing." + }, + "pickerTitle": { + "message": "Select a HID Device" + }, + "pickerCancel": { + "message": "Cancel" + }, + "pickerConnect": { + "message": "Connect" + }, + "pickerNoDevices": { + "message": "No HID devices found" + }, + "pickerNoDaemon": { + "message": "Cannot reach the WebHID daemon. Check that it is installed and running, then try again." + }, + "pickerParseFailed": { + "message": "This device's report descriptor could not be parsed. Connecting and sending reports still works." + }, + "pickerNoMatch": { + "message": "No devices match the specified filters" + }, + "pickerNoPending": { + "message": "No pending device request" + }, + "pickerLoading": { + "message": "Loading devices..." + }, + "pickerInterfaces": { + "message": "$1 interfaces" + }, + "settingsWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "settingsWorkerSpawnModeDesc": { + "message": "**Shadow URL** (default on MV3): spawns the data worker via new Worker(location.href) with a StreamFilter intercepting the synthetic self-request; respects the page's security settings and changes nothing about the page. Fails if the server rejects it or if require-trusted-types-for is restrictive.\n**Blob + CSP rewrite** (default on MV2): spawns the worker from a blob: URL; relaxes the page's worker-src and connect-src directives. Works fully on MV2; on MV3 only a meta-tag CSP can be rewritten, so header-based policies still block it." + }, + "settingsWorkerSpawnShadow": { + "message": "Shadow URL" + }, + "settingsWorkerSpawnBlob": { + "message": "Blob + CSP rewrite" + }, + "segDataPlaneWs": { + "message": "WS" + }, + "segDataPlaneWt": { + "message": "WT" + }, + "segDataPlaneWtInpage": { + "message": "WTI" + }, + "segDataPlaneNm": { + "message": "NM" + }, + "segPickerModal": { + "message": "Modal" + }, + "segPickerPageAction": { + "message": "Page Action" + }, + "segPickerWindow": { + "message": "Window" + }, + "segSpawnShadow": { + "message": "Shadow" + }, + "segSpawnBlob": { + "message": "Blob" + }, + "devicesTitle": { + "message": "Paired Devices (all sites)" + }, + "devicesNone": { + "message": "No devices paired on any site." + } +} From 76d529a501a44951a3e6161f1d5ba64c506ac491 Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 13:49:46 +0700 Subject: [PATCH 12/29] New translations messages.json (Hebrew) [ci skip] chore: sync translations from Crowdin --- addon/_locales/he_IL/messages.json | 281 +++++++++++++++++++++++++++++ 1 file changed, 281 insertions(+) create mode 100644 addon/_locales/he_IL/messages.json diff --git a/addon/_locales/he_IL/messages.json b/addon/_locales/he_IL/messages.json new file mode 100644 index 00000000..d602377d --- /dev/null +++ b/addon/_locales/he_IL/messages.json @@ -0,0 +1,281 @@ +{ + "extensionName": { + "message": "WebHID" + }, + "extensionDescription": { + "message": "WebHID API implementation for Firefox" + }, + "popupTitle": { + "message": "WebHID" + }, + "popupBack": { + "message": "Back" + }, + "popupPairedDevices": { + "message": "Paired Devices" + }, + "popupNoDevices": { + "message": "No devices paired for this site." + }, + "popupSettings": { + "message": "Settings" + }, + "popupDataPlane": { + "message": "Data Plane" + }, + "popupDataPlaneDesc": { + "message": "WebTransport (in a worker), WebTransport (in the page), WebSocket, or Native Messaging" + }, + "popupDataPlaneWs": { + "message": "WebSocket" + }, + "popupDataPlaneWt": { + "message": "WebTransport" + }, + "popupDataPlaneNm": { + "message": "Native Messaging" + }, + "popupDevicePickerMode": { + "message": "Device Picker Mode" + }, + "popupDevicePickerModeDesc": { + "message": "How the device chooser is presented on this site" + }, + "popupWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "popupWorkerPolyfillDesc": { + "message": "Inject WebHID API into Worker scripts on this site" + }, + "popupAllowActivationless": { + "message": "Allow requestDevice() without user gesture" + }, + "popupAllowActivationlessDesc": { + "message": "Skip the user-activation check when this site calls requestDevice(). Spec workaround for sites that call it asynchronously; the device chooser still requires explicit user selection." + }, + "popupWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "popupWorkerSpawnModeDesc": { + "message": "How the data worker is created on this site" + }, + "popupLogLevel": { + "message": "Log Level" + }, + "popupLogLevelDesc": { + "message": "Console output verbosity for this site" + }, + "logLevelError": { + "message": "Error" + }, + "logLevelWarn": { + "message": "Warn" + }, + "logLevelInfo": { + "message": "Info" + }, + "logLevelDebug": { + "message": "Debug" + }, + "popupDefaultNote": { + "message": "Changes here override defaults for this site." + }, + "popupGlobalSettings": { + "message": "Global settings →" + }, + "popupManageDevices": { + "message": "Manage all paired devices →" + }, + "popupNoSite": { + "message": "(no site)" + }, + "popupSiteOrigin": { + "message": "Site origin" + }, + "popupOriginList": { + "message": "Origins in this tab" + }, + "popupUnknown": { + "message": "Unknown" + }, + "popupPairedDevice": { + "message": "Paired device" + }, + "popupRevoke": { + "message": "Revoke" + }, + "popupDeviceCount": { + "message": "($1/$2)" + }, + "popupInPageWtWarning": { + "message": "In-page WebTransport may trigger a Firefox local-network permission prompt (\"wants to access other apps and services on this device\"). Tick \"Remember my choice for this site\" before clicking Allow, otherwise you will be asked again on every page load." + }, + "statusReady": { + "message": "Ready" + }, + "statusFallback": { + "message": "Fallback: $1" + }, + "statusOffline": { + "message": "Daemon offline" + }, + "statusOfflineGuidance": { + "message": "Check that the daemon is running (systemctl status webhid-daemon), that your user is in the webhid group, and that the udev rules are installed." + }, + "planeNameWS": { + "message": "WebSocket" + }, + "planeNameWT": { + "message": "WebTransport" + }, + "planeNameNM": { + "message": "Native Messaging" + }, + "infoPopoverMore": { + "message": "More info" + }, + "macPrivacyTitle": { + "message": "macOS Input Monitoring" + }, + "macPrivacyDesc": { + "message": "Allow the daemon to read HID devices: System Settings → Privacy & Security → Input Monitoring. If the link does not open the right tab, find it manually and enable the daemon." + }, + "macPrivacyOpen": { + "message": "Open Privacy Settings" + }, + "settingsTitle": { + "message": "WebHID Settings" + }, + "settingsDaemonAsNmHost": { + "message": "Daemon as NM host" + }, + "settingsDaemonAsNmHostDesc": { + "message": "Talk to the daemon directly over native messaging, skipping the forwarder and Unix socket. Requires the daemon_nm_host manifest and the daemon running as your user (with the udev rule). Lower latency, no root-daemon fallback. Reconnects automatically." + }, + "settingsDataPlane": { + "message": "Data Plane" + }, + "settingsDataPlaneDesc": { + "message": "**WebTransport** (default): the fastest option; runs in a background worker so pages stay smooth.\n**WebTransport (in-page)**: connects directly in the page; fine at normal report rates, uses more page CPU. Use it when the site blocks background workers (CSP) but still allows the connection; the worker-based options would fall back to Native Messaging there. Firefox asks a one-time local-network permission (\"Allow\") before the first in-page connection; tick \"Remember my choice for this site\". Reload pages after changing.\n**WebSocket**: fallback when WebTransport is not available (older Firefox).\n**Native Messaging**: the slowest but most compatible option; use when a site's security policy blocks the others." + }, + "settingsDataPlaneWs": { + "message": "WebSocket" + }, + "settingsDataPlaneWt": { + "message": "WebTransport" + }, + "settingsDataPlaneWtInpage": { + "message": "WebTransport (in-page)" + }, + "settingsDataPlaneNm": { + "message": "Native Messaging" + }, + "settingsDevicePickerMode": { + "message": "Device Picker Mode" + }, + "settingsDevicePickerModeDesc": { + "message": "**Modal**: shadow-DOM overlay on the page when requestDevice() is called (default).\n**Page Action**: URL-bar popup picker; the user clicks the icon to open it. Firefox only, Chromium falls back to modal.\n**Window**: separate popup window." + }, + "settingsDevicePickerModal": { + "message": "Modal (overlay)" + }, + "settingsDevicePickerPageAction": { + "message": "Page Action (URL bar popup)" + }, + "settingsDevicePickerWindow": { + "message": "Window (separate popup window)" + }, + "settingsWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "settingsWorkerPolyfillDesc": { + "message": "Injects the full WebHID API into Worker scripts (new Worker()). requestDevice() stays page-only, as the spec requires. Reload pages after changing." + }, + "settingsAllowActivationless": { + "message": "Allow activation-less requestDevice()" + }, + "settingsAllowActivationlessDesc": { + "message": "Skip the user-activation requirement for requestDevice() on this site. Spec deviation; workaround for sites that call it from an async handler. The chooser still requires explicit user selection. Reload pages after changing." + }, + "settingsLogLevel": { + "message": "Log Level" + }, + "settingsLogLevelDesc": { + "message": "Console verbosity: Error = errors only, Warn = +warnings, Info = +info, Debug = +debug (includes timing). Reload pages after changing." + }, + "pickerTitle": { + "message": "Select a HID Device" + }, + "pickerCancel": { + "message": "Cancel" + }, + "pickerConnect": { + "message": "Connect" + }, + "pickerNoDevices": { + "message": "No HID devices found" + }, + "pickerNoDaemon": { + "message": "Cannot reach the WebHID daemon. Check that it is installed and running, then try again." + }, + "pickerParseFailed": { + "message": "This device's report descriptor could not be parsed. Connecting and sending reports still works." + }, + "pickerNoMatch": { + "message": "No devices match the specified filters" + }, + "pickerNoPending": { + "message": "No pending device request" + }, + "pickerLoading": { + "message": "Loading devices..." + }, + "pickerInterfaces": { + "message": "$1 interfaces" + }, + "settingsWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "settingsWorkerSpawnModeDesc": { + "message": "**Shadow URL** (default on MV3): spawns the data worker via new Worker(location.href) with a StreamFilter intercepting the synthetic self-request; respects the page's security settings and changes nothing about the page. Fails if the server rejects it or if require-trusted-types-for is restrictive.\n**Blob + CSP rewrite** (default on MV2): spawns the worker from a blob: URL; relaxes the page's worker-src and connect-src directives. Works fully on MV2; on MV3 only a meta-tag CSP can be rewritten, so header-based policies still block it." + }, + "settingsWorkerSpawnShadow": { + "message": "Shadow URL" + }, + "settingsWorkerSpawnBlob": { + "message": "Blob + CSP rewrite" + }, + "segDataPlaneWs": { + "message": "WS" + }, + "segDataPlaneWt": { + "message": "WT" + }, + "segDataPlaneWtInpage": { + "message": "WTI" + }, + "segDataPlaneNm": { + "message": "NM" + }, + "segPickerModal": { + "message": "Modal" + }, + "segPickerPageAction": { + "message": "Page Action" + }, + "segPickerWindow": { + "message": "Window" + }, + "segSpawnShadow": { + "message": "Shadow" + }, + "segSpawnBlob": { + "message": "Blob" + }, + "devicesTitle": { + "message": "Paired Devices (all sites)" + }, + "devicesNone": { + "message": "No devices paired on any site." + } +} From ccf6b6cd82f22bb221cb609800315dc0686e37c1 Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 13:49:47 +0700 Subject: [PATCH 13/29] New translations messages.json (Hungarian) [ci skip] chore: sync translations from Crowdin --- addon/_locales/hu_HU/messages.json | 281 +++++++++++++++++++++++++++++ 1 file changed, 281 insertions(+) create mode 100644 addon/_locales/hu_HU/messages.json diff --git a/addon/_locales/hu_HU/messages.json b/addon/_locales/hu_HU/messages.json new file mode 100644 index 00000000..d602377d --- /dev/null +++ b/addon/_locales/hu_HU/messages.json @@ -0,0 +1,281 @@ +{ + "extensionName": { + "message": "WebHID" + }, + "extensionDescription": { + "message": "WebHID API implementation for Firefox" + }, + "popupTitle": { + "message": "WebHID" + }, + "popupBack": { + "message": "Back" + }, + "popupPairedDevices": { + "message": "Paired Devices" + }, + "popupNoDevices": { + "message": "No devices paired for this site." + }, + "popupSettings": { + "message": "Settings" + }, + "popupDataPlane": { + "message": "Data Plane" + }, + "popupDataPlaneDesc": { + "message": "WebTransport (in a worker), WebTransport (in the page), WebSocket, or Native Messaging" + }, + "popupDataPlaneWs": { + "message": "WebSocket" + }, + "popupDataPlaneWt": { + "message": "WebTransport" + }, + "popupDataPlaneNm": { + "message": "Native Messaging" + }, + "popupDevicePickerMode": { + "message": "Device Picker Mode" + }, + "popupDevicePickerModeDesc": { + "message": "How the device chooser is presented on this site" + }, + "popupWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "popupWorkerPolyfillDesc": { + "message": "Inject WebHID API into Worker scripts on this site" + }, + "popupAllowActivationless": { + "message": "Allow requestDevice() without user gesture" + }, + "popupAllowActivationlessDesc": { + "message": "Skip the user-activation check when this site calls requestDevice(). Spec workaround for sites that call it asynchronously; the device chooser still requires explicit user selection." + }, + "popupWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "popupWorkerSpawnModeDesc": { + "message": "How the data worker is created on this site" + }, + "popupLogLevel": { + "message": "Log Level" + }, + "popupLogLevelDesc": { + "message": "Console output verbosity for this site" + }, + "logLevelError": { + "message": "Error" + }, + "logLevelWarn": { + "message": "Warn" + }, + "logLevelInfo": { + "message": "Info" + }, + "logLevelDebug": { + "message": "Debug" + }, + "popupDefaultNote": { + "message": "Changes here override defaults for this site." + }, + "popupGlobalSettings": { + "message": "Global settings →" + }, + "popupManageDevices": { + "message": "Manage all paired devices →" + }, + "popupNoSite": { + "message": "(no site)" + }, + "popupSiteOrigin": { + "message": "Site origin" + }, + "popupOriginList": { + "message": "Origins in this tab" + }, + "popupUnknown": { + "message": "Unknown" + }, + "popupPairedDevice": { + "message": "Paired device" + }, + "popupRevoke": { + "message": "Revoke" + }, + "popupDeviceCount": { + "message": "($1/$2)" + }, + "popupInPageWtWarning": { + "message": "In-page WebTransport may trigger a Firefox local-network permission prompt (\"wants to access other apps and services on this device\"). Tick \"Remember my choice for this site\" before clicking Allow, otherwise you will be asked again on every page load." + }, + "statusReady": { + "message": "Ready" + }, + "statusFallback": { + "message": "Fallback: $1" + }, + "statusOffline": { + "message": "Daemon offline" + }, + "statusOfflineGuidance": { + "message": "Check that the daemon is running (systemctl status webhid-daemon), that your user is in the webhid group, and that the udev rules are installed." + }, + "planeNameWS": { + "message": "WebSocket" + }, + "planeNameWT": { + "message": "WebTransport" + }, + "planeNameNM": { + "message": "Native Messaging" + }, + "infoPopoverMore": { + "message": "More info" + }, + "macPrivacyTitle": { + "message": "macOS Input Monitoring" + }, + "macPrivacyDesc": { + "message": "Allow the daemon to read HID devices: System Settings → Privacy & Security → Input Monitoring. If the link does not open the right tab, find it manually and enable the daemon." + }, + "macPrivacyOpen": { + "message": "Open Privacy Settings" + }, + "settingsTitle": { + "message": "WebHID Settings" + }, + "settingsDaemonAsNmHost": { + "message": "Daemon as NM host" + }, + "settingsDaemonAsNmHostDesc": { + "message": "Talk to the daemon directly over native messaging, skipping the forwarder and Unix socket. Requires the daemon_nm_host manifest and the daemon running as your user (with the udev rule). Lower latency, no root-daemon fallback. Reconnects automatically." + }, + "settingsDataPlane": { + "message": "Data Plane" + }, + "settingsDataPlaneDesc": { + "message": "**WebTransport** (default): the fastest option; runs in a background worker so pages stay smooth.\n**WebTransport (in-page)**: connects directly in the page; fine at normal report rates, uses more page CPU. Use it when the site blocks background workers (CSP) but still allows the connection; the worker-based options would fall back to Native Messaging there. Firefox asks a one-time local-network permission (\"Allow\") before the first in-page connection; tick \"Remember my choice for this site\". Reload pages after changing.\n**WebSocket**: fallback when WebTransport is not available (older Firefox).\n**Native Messaging**: the slowest but most compatible option; use when a site's security policy blocks the others." + }, + "settingsDataPlaneWs": { + "message": "WebSocket" + }, + "settingsDataPlaneWt": { + "message": "WebTransport" + }, + "settingsDataPlaneWtInpage": { + "message": "WebTransport (in-page)" + }, + "settingsDataPlaneNm": { + "message": "Native Messaging" + }, + "settingsDevicePickerMode": { + "message": "Device Picker Mode" + }, + "settingsDevicePickerModeDesc": { + "message": "**Modal**: shadow-DOM overlay on the page when requestDevice() is called (default).\n**Page Action**: URL-bar popup picker; the user clicks the icon to open it. Firefox only, Chromium falls back to modal.\n**Window**: separate popup window." + }, + "settingsDevicePickerModal": { + "message": "Modal (overlay)" + }, + "settingsDevicePickerPageAction": { + "message": "Page Action (URL bar popup)" + }, + "settingsDevicePickerWindow": { + "message": "Window (separate popup window)" + }, + "settingsWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "settingsWorkerPolyfillDesc": { + "message": "Injects the full WebHID API into Worker scripts (new Worker()). requestDevice() stays page-only, as the spec requires. Reload pages after changing." + }, + "settingsAllowActivationless": { + "message": "Allow activation-less requestDevice()" + }, + "settingsAllowActivationlessDesc": { + "message": "Skip the user-activation requirement for requestDevice() on this site. Spec deviation; workaround for sites that call it from an async handler. The chooser still requires explicit user selection. Reload pages after changing." + }, + "settingsLogLevel": { + "message": "Log Level" + }, + "settingsLogLevelDesc": { + "message": "Console verbosity: Error = errors only, Warn = +warnings, Info = +info, Debug = +debug (includes timing). Reload pages after changing." + }, + "pickerTitle": { + "message": "Select a HID Device" + }, + "pickerCancel": { + "message": "Cancel" + }, + "pickerConnect": { + "message": "Connect" + }, + "pickerNoDevices": { + "message": "No HID devices found" + }, + "pickerNoDaemon": { + "message": "Cannot reach the WebHID daemon. Check that it is installed and running, then try again." + }, + "pickerParseFailed": { + "message": "This device's report descriptor could not be parsed. Connecting and sending reports still works." + }, + "pickerNoMatch": { + "message": "No devices match the specified filters" + }, + "pickerNoPending": { + "message": "No pending device request" + }, + "pickerLoading": { + "message": "Loading devices..." + }, + "pickerInterfaces": { + "message": "$1 interfaces" + }, + "settingsWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "settingsWorkerSpawnModeDesc": { + "message": "**Shadow URL** (default on MV3): spawns the data worker via new Worker(location.href) with a StreamFilter intercepting the synthetic self-request; respects the page's security settings and changes nothing about the page. Fails if the server rejects it or if require-trusted-types-for is restrictive.\n**Blob + CSP rewrite** (default on MV2): spawns the worker from a blob: URL; relaxes the page's worker-src and connect-src directives. Works fully on MV2; on MV3 only a meta-tag CSP can be rewritten, so header-based policies still block it." + }, + "settingsWorkerSpawnShadow": { + "message": "Shadow URL" + }, + "settingsWorkerSpawnBlob": { + "message": "Blob + CSP rewrite" + }, + "segDataPlaneWs": { + "message": "WS" + }, + "segDataPlaneWt": { + "message": "WT" + }, + "segDataPlaneWtInpage": { + "message": "WTI" + }, + "segDataPlaneNm": { + "message": "NM" + }, + "segPickerModal": { + "message": "Modal" + }, + "segPickerPageAction": { + "message": "Page Action" + }, + "segPickerWindow": { + "message": "Window" + }, + "segSpawnShadow": { + "message": "Shadow" + }, + "segSpawnBlob": { + "message": "Blob" + }, + "devicesTitle": { + "message": "Paired Devices (all sites)" + }, + "devicesNone": { + "message": "No devices paired on any site." + } +} From d6c46972fb4ea7d2d56c9326ebfd848196d04b0d Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 13:49:48 +0700 Subject: [PATCH 14/29] New translations messages.json (Italian) [ci skip] chore: sync translations from Crowdin --- addon/_locales/it_IT/messages.json | 281 +++++++++++++++++++++++++++++ 1 file changed, 281 insertions(+) create mode 100644 addon/_locales/it_IT/messages.json diff --git a/addon/_locales/it_IT/messages.json b/addon/_locales/it_IT/messages.json new file mode 100644 index 00000000..d602377d --- /dev/null +++ b/addon/_locales/it_IT/messages.json @@ -0,0 +1,281 @@ +{ + "extensionName": { + "message": "WebHID" + }, + "extensionDescription": { + "message": "WebHID API implementation for Firefox" + }, + "popupTitle": { + "message": "WebHID" + }, + "popupBack": { + "message": "Back" + }, + "popupPairedDevices": { + "message": "Paired Devices" + }, + "popupNoDevices": { + "message": "No devices paired for this site." + }, + "popupSettings": { + "message": "Settings" + }, + "popupDataPlane": { + "message": "Data Plane" + }, + "popupDataPlaneDesc": { + "message": "WebTransport (in a worker), WebTransport (in the page), WebSocket, or Native Messaging" + }, + "popupDataPlaneWs": { + "message": "WebSocket" + }, + "popupDataPlaneWt": { + "message": "WebTransport" + }, + "popupDataPlaneNm": { + "message": "Native Messaging" + }, + "popupDevicePickerMode": { + "message": "Device Picker Mode" + }, + "popupDevicePickerModeDesc": { + "message": "How the device chooser is presented on this site" + }, + "popupWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "popupWorkerPolyfillDesc": { + "message": "Inject WebHID API into Worker scripts on this site" + }, + "popupAllowActivationless": { + "message": "Allow requestDevice() without user gesture" + }, + "popupAllowActivationlessDesc": { + "message": "Skip the user-activation check when this site calls requestDevice(). Spec workaround for sites that call it asynchronously; the device chooser still requires explicit user selection." + }, + "popupWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "popupWorkerSpawnModeDesc": { + "message": "How the data worker is created on this site" + }, + "popupLogLevel": { + "message": "Log Level" + }, + "popupLogLevelDesc": { + "message": "Console output verbosity for this site" + }, + "logLevelError": { + "message": "Error" + }, + "logLevelWarn": { + "message": "Warn" + }, + "logLevelInfo": { + "message": "Info" + }, + "logLevelDebug": { + "message": "Debug" + }, + "popupDefaultNote": { + "message": "Changes here override defaults for this site." + }, + "popupGlobalSettings": { + "message": "Global settings →" + }, + "popupManageDevices": { + "message": "Manage all paired devices →" + }, + "popupNoSite": { + "message": "(no site)" + }, + "popupSiteOrigin": { + "message": "Site origin" + }, + "popupOriginList": { + "message": "Origins in this tab" + }, + "popupUnknown": { + "message": "Unknown" + }, + "popupPairedDevice": { + "message": "Paired device" + }, + "popupRevoke": { + "message": "Revoke" + }, + "popupDeviceCount": { + "message": "($1/$2)" + }, + "popupInPageWtWarning": { + "message": "In-page WebTransport may trigger a Firefox local-network permission prompt (\"wants to access other apps and services on this device\"). Tick \"Remember my choice for this site\" before clicking Allow, otherwise you will be asked again on every page load." + }, + "statusReady": { + "message": "Ready" + }, + "statusFallback": { + "message": "Fallback: $1" + }, + "statusOffline": { + "message": "Daemon offline" + }, + "statusOfflineGuidance": { + "message": "Check that the daemon is running (systemctl status webhid-daemon), that your user is in the webhid group, and that the udev rules are installed." + }, + "planeNameWS": { + "message": "WebSocket" + }, + "planeNameWT": { + "message": "WebTransport" + }, + "planeNameNM": { + "message": "Native Messaging" + }, + "infoPopoverMore": { + "message": "More info" + }, + "macPrivacyTitle": { + "message": "macOS Input Monitoring" + }, + "macPrivacyDesc": { + "message": "Allow the daemon to read HID devices: System Settings → Privacy & Security → Input Monitoring. If the link does not open the right tab, find it manually and enable the daemon." + }, + "macPrivacyOpen": { + "message": "Open Privacy Settings" + }, + "settingsTitle": { + "message": "WebHID Settings" + }, + "settingsDaemonAsNmHost": { + "message": "Daemon as NM host" + }, + "settingsDaemonAsNmHostDesc": { + "message": "Talk to the daemon directly over native messaging, skipping the forwarder and Unix socket. Requires the daemon_nm_host manifest and the daemon running as your user (with the udev rule). Lower latency, no root-daemon fallback. Reconnects automatically." + }, + "settingsDataPlane": { + "message": "Data Plane" + }, + "settingsDataPlaneDesc": { + "message": "**WebTransport** (default): the fastest option; runs in a background worker so pages stay smooth.\n**WebTransport (in-page)**: connects directly in the page; fine at normal report rates, uses more page CPU. Use it when the site blocks background workers (CSP) but still allows the connection; the worker-based options would fall back to Native Messaging there. Firefox asks a one-time local-network permission (\"Allow\") before the first in-page connection; tick \"Remember my choice for this site\". Reload pages after changing.\n**WebSocket**: fallback when WebTransport is not available (older Firefox).\n**Native Messaging**: the slowest but most compatible option; use when a site's security policy blocks the others." + }, + "settingsDataPlaneWs": { + "message": "WebSocket" + }, + "settingsDataPlaneWt": { + "message": "WebTransport" + }, + "settingsDataPlaneWtInpage": { + "message": "WebTransport (in-page)" + }, + "settingsDataPlaneNm": { + "message": "Native Messaging" + }, + "settingsDevicePickerMode": { + "message": "Device Picker Mode" + }, + "settingsDevicePickerModeDesc": { + "message": "**Modal**: shadow-DOM overlay on the page when requestDevice() is called (default).\n**Page Action**: URL-bar popup picker; the user clicks the icon to open it. Firefox only, Chromium falls back to modal.\n**Window**: separate popup window." + }, + "settingsDevicePickerModal": { + "message": "Modal (overlay)" + }, + "settingsDevicePickerPageAction": { + "message": "Page Action (URL bar popup)" + }, + "settingsDevicePickerWindow": { + "message": "Window (separate popup window)" + }, + "settingsWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "settingsWorkerPolyfillDesc": { + "message": "Injects the full WebHID API into Worker scripts (new Worker()). requestDevice() stays page-only, as the spec requires. Reload pages after changing." + }, + "settingsAllowActivationless": { + "message": "Allow activation-less requestDevice()" + }, + "settingsAllowActivationlessDesc": { + "message": "Skip the user-activation requirement for requestDevice() on this site. Spec deviation; workaround for sites that call it from an async handler. The chooser still requires explicit user selection. Reload pages after changing." + }, + "settingsLogLevel": { + "message": "Log Level" + }, + "settingsLogLevelDesc": { + "message": "Console verbosity: Error = errors only, Warn = +warnings, Info = +info, Debug = +debug (includes timing). Reload pages after changing." + }, + "pickerTitle": { + "message": "Select a HID Device" + }, + "pickerCancel": { + "message": "Cancel" + }, + "pickerConnect": { + "message": "Connect" + }, + "pickerNoDevices": { + "message": "No HID devices found" + }, + "pickerNoDaemon": { + "message": "Cannot reach the WebHID daemon. Check that it is installed and running, then try again." + }, + "pickerParseFailed": { + "message": "This device's report descriptor could not be parsed. Connecting and sending reports still works." + }, + "pickerNoMatch": { + "message": "No devices match the specified filters" + }, + "pickerNoPending": { + "message": "No pending device request" + }, + "pickerLoading": { + "message": "Loading devices..." + }, + "pickerInterfaces": { + "message": "$1 interfaces" + }, + "settingsWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "settingsWorkerSpawnModeDesc": { + "message": "**Shadow URL** (default on MV3): spawns the data worker via new Worker(location.href) with a StreamFilter intercepting the synthetic self-request; respects the page's security settings and changes nothing about the page. Fails if the server rejects it or if require-trusted-types-for is restrictive.\n**Blob + CSP rewrite** (default on MV2): spawns the worker from a blob: URL; relaxes the page's worker-src and connect-src directives. Works fully on MV2; on MV3 only a meta-tag CSP can be rewritten, so header-based policies still block it." + }, + "settingsWorkerSpawnShadow": { + "message": "Shadow URL" + }, + "settingsWorkerSpawnBlob": { + "message": "Blob + CSP rewrite" + }, + "segDataPlaneWs": { + "message": "WS" + }, + "segDataPlaneWt": { + "message": "WT" + }, + "segDataPlaneWtInpage": { + "message": "WTI" + }, + "segDataPlaneNm": { + "message": "NM" + }, + "segPickerModal": { + "message": "Modal" + }, + "segPickerPageAction": { + "message": "Page Action" + }, + "segPickerWindow": { + "message": "Window" + }, + "segSpawnShadow": { + "message": "Shadow" + }, + "segSpawnBlob": { + "message": "Blob" + }, + "devicesTitle": { + "message": "Paired Devices (all sites)" + }, + "devicesNone": { + "message": "No devices paired on any site." + } +} From 3085920e330b04e804a4a12edd802c1e3a6d7e97 Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 13:49:49 +0700 Subject: [PATCH 15/29] New translations messages.json (Japanese) [ci skip] chore: sync translations from Crowdin --- addon/_locales/ja_JP/messages.json | 281 +++++++++++++++++++++++++++++ 1 file changed, 281 insertions(+) create mode 100644 addon/_locales/ja_JP/messages.json diff --git a/addon/_locales/ja_JP/messages.json b/addon/_locales/ja_JP/messages.json new file mode 100644 index 00000000..d602377d --- /dev/null +++ b/addon/_locales/ja_JP/messages.json @@ -0,0 +1,281 @@ +{ + "extensionName": { + "message": "WebHID" + }, + "extensionDescription": { + "message": "WebHID API implementation for Firefox" + }, + "popupTitle": { + "message": "WebHID" + }, + "popupBack": { + "message": "Back" + }, + "popupPairedDevices": { + "message": "Paired Devices" + }, + "popupNoDevices": { + "message": "No devices paired for this site." + }, + "popupSettings": { + "message": "Settings" + }, + "popupDataPlane": { + "message": "Data Plane" + }, + "popupDataPlaneDesc": { + "message": "WebTransport (in a worker), WebTransport (in the page), WebSocket, or Native Messaging" + }, + "popupDataPlaneWs": { + "message": "WebSocket" + }, + "popupDataPlaneWt": { + "message": "WebTransport" + }, + "popupDataPlaneNm": { + "message": "Native Messaging" + }, + "popupDevicePickerMode": { + "message": "Device Picker Mode" + }, + "popupDevicePickerModeDesc": { + "message": "How the device chooser is presented on this site" + }, + "popupWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "popupWorkerPolyfillDesc": { + "message": "Inject WebHID API into Worker scripts on this site" + }, + "popupAllowActivationless": { + "message": "Allow requestDevice() without user gesture" + }, + "popupAllowActivationlessDesc": { + "message": "Skip the user-activation check when this site calls requestDevice(). Spec workaround for sites that call it asynchronously; the device chooser still requires explicit user selection." + }, + "popupWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "popupWorkerSpawnModeDesc": { + "message": "How the data worker is created on this site" + }, + "popupLogLevel": { + "message": "Log Level" + }, + "popupLogLevelDesc": { + "message": "Console output verbosity for this site" + }, + "logLevelError": { + "message": "Error" + }, + "logLevelWarn": { + "message": "Warn" + }, + "logLevelInfo": { + "message": "Info" + }, + "logLevelDebug": { + "message": "Debug" + }, + "popupDefaultNote": { + "message": "Changes here override defaults for this site." + }, + "popupGlobalSettings": { + "message": "Global settings →" + }, + "popupManageDevices": { + "message": "Manage all paired devices →" + }, + "popupNoSite": { + "message": "(no site)" + }, + "popupSiteOrigin": { + "message": "Site origin" + }, + "popupOriginList": { + "message": "Origins in this tab" + }, + "popupUnknown": { + "message": "Unknown" + }, + "popupPairedDevice": { + "message": "Paired device" + }, + "popupRevoke": { + "message": "Revoke" + }, + "popupDeviceCount": { + "message": "($1/$2)" + }, + "popupInPageWtWarning": { + "message": "In-page WebTransport may trigger a Firefox local-network permission prompt (\"wants to access other apps and services on this device\"). Tick \"Remember my choice for this site\" before clicking Allow, otherwise you will be asked again on every page load." + }, + "statusReady": { + "message": "Ready" + }, + "statusFallback": { + "message": "Fallback: $1" + }, + "statusOffline": { + "message": "Daemon offline" + }, + "statusOfflineGuidance": { + "message": "Check that the daemon is running (systemctl status webhid-daemon), that your user is in the webhid group, and that the udev rules are installed." + }, + "planeNameWS": { + "message": "WebSocket" + }, + "planeNameWT": { + "message": "WebTransport" + }, + "planeNameNM": { + "message": "Native Messaging" + }, + "infoPopoverMore": { + "message": "More info" + }, + "macPrivacyTitle": { + "message": "macOS Input Monitoring" + }, + "macPrivacyDesc": { + "message": "Allow the daemon to read HID devices: System Settings → Privacy & Security → Input Monitoring. If the link does not open the right tab, find it manually and enable the daemon." + }, + "macPrivacyOpen": { + "message": "Open Privacy Settings" + }, + "settingsTitle": { + "message": "WebHID Settings" + }, + "settingsDaemonAsNmHost": { + "message": "Daemon as NM host" + }, + "settingsDaemonAsNmHostDesc": { + "message": "Talk to the daemon directly over native messaging, skipping the forwarder and Unix socket. Requires the daemon_nm_host manifest and the daemon running as your user (with the udev rule). Lower latency, no root-daemon fallback. Reconnects automatically." + }, + "settingsDataPlane": { + "message": "Data Plane" + }, + "settingsDataPlaneDesc": { + "message": "**WebTransport** (default): the fastest option; runs in a background worker so pages stay smooth.\n**WebTransport (in-page)**: connects directly in the page; fine at normal report rates, uses more page CPU. Use it when the site blocks background workers (CSP) but still allows the connection; the worker-based options would fall back to Native Messaging there. Firefox asks a one-time local-network permission (\"Allow\") before the first in-page connection; tick \"Remember my choice for this site\". Reload pages after changing.\n**WebSocket**: fallback when WebTransport is not available (older Firefox).\n**Native Messaging**: the slowest but most compatible option; use when a site's security policy blocks the others." + }, + "settingsDataPlaneWs": { + "message": "WebSocket" + }, + "settingsDataPlaneWt": { + "message": "WebTransport" + }, + "settingsDataPlaneWtInpage": { + "message": "WebTransport (in-page)" + }, + "settingsDataPlaneNm": { + "message": "Native Messaging" + }, + "settingsDevicePickerMode": { + "message": "Device Picker Mode" + }, + "settingsDevicePickerModeDesc": { + "message": "**Modal**: shadow-DOM overlay on the page when requestDevice() is called (default).\n**Page Action**: URL-bar popup picker; the user clicks the icon to open it. Firefox only, Chromium falls back to modal.\n**Window**: separate popup window." + }, + "settingsDevicePickerModal": { + "message": "Modal (overlay)" + }, + "settingsDevicePickerPageAction": { + "message": "Page Action (URL bar popup)" + }, + "settingsDevicePickerWindow": { + "message": "Window (separate popup window)" + }, + "settingsWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "settingsWorkerPolyfillDesc": { + "message": "Injects the full WebHID API into Worker scripts (new Worker()). requestDevice() stays page-only, as the spec requires. Reload pages after changing." + }, + "settingsAllowActivationless": { + "message": "Allow activation-less requestDevice()" + }, + "settingsAllowActivationlessDesc": { + "message": "Skip the user-activation requirement for requestDevice() on this site. Spec deviation; workaround for sites that call it from an async handler. The chooser still requires explicit user selection. Reload pages after changing." + }, + "settingsLogLevel": { + "message": "Log Level" + }, + "settingsLogLevelDesc": { + "message": "Console verbosity: Error = errors only, Warn = +warnings, Info = +info, Debug = +debug (includes timing). Reload pages after changing." + }, + "pickerTitle": { + "message": "Select a HID Device" + }, + "pickerCancel": { + "message": "Cancel" + }, + "pickerConnect": { + "message": "Connect" + }, + "pickerNoDevices": { + "message": "No HID devices found" + }, + "pickerNoDaemon": { + "message": "Cannot reach the WebHID daemon. Check that it is installed and running, then try again." + }, + "pickerParseFailed": { + "message": "This device's report descriptor could not be parsed. Connecting and sending reports still works." + }, + "pickerNoMatch": { + "message": "No devices match the specified filters" + }, + "pickerNoPending": { + "message": "No pending device request" + }, + "pickerLoading": { + "message": "Loading devices..." + }, + "pickerInterfaces": { + "message": "$1 interfaces" + }, + "settingsWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "settingsWorkerSpawnModeDesc": { + "message": "**Shadow URL** (default on MV3): spawns the data worker via new Worker(location.href) with a StreamFilter intercepting the synthetic self-request; respects the page's security settings and changes nothing about the page. Fails if the server rejects it or if require-trusted-types-for is restrictive.\n**Blob + CSP rewrite** (default on MV2): spawns the worker from a blob: URL; relaxes the page's worker-src and connect-src directives. Works fully on MV2; on MV3 only a meta-tag CSP can be rewritten, so header-based policies still block it." + }, + "settingsWorkerSpawnShadow": { + "message": "Shadow URL" + }, + "settingsWorkerSpawnBlob": { + "message": "Blob + CSP rewrite" + }, + "segDataPlaneWs": { + "message": "WS" + }, + "segDataPlaneWt": { + "message": "WT" + }, + "segDataPlaneWtInpage": { + "message": "WTI" + }, + "segDataPlaneNm": { + "message": "NM" + }, + "segPickerModal": { + "message": "Modal" + }, + "segPickerPageAction": { + "message": "Page Action" + }, + "segPickerWindow": { + "message": "Window" + }, + "segSpawnShadow": { + "message": "Shadow" + }, + "segSpawnBlob": { + "message": "Blob" + }, + "devicesTitle": { + "message": "Paired Devices (all sites)" + }, + "devicesNone": { + "message": "No devices paired on any site." + } +} From 83a8f8a332ea3a0a71de901574f506e507404ab9 Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 13:49:50 +0700 Subject: [PATCH 16/29] New translations messages.json (Korean) [ci skip] chore: sync translations from Crowdin --- addon/_locales/ko_KR/messages.json | 281 +++++++++++++++++++++++++++++ 1 file changed, 281 insertions(+) create mode 100644 addon/_locales/ko_KR/messages.json diff --git a/addon/_locales/ko_KR/messages.json b/addon/_locales/ko_KR/messages.json new file mode 100644 index 00000000..d602377d --- /dev/null +++ b/addon/_locales/ko_KR/messages.json @@ -0,0 +1,281 @@ +{ + "extensionName": { + "message": "WebHID" + }, + "extensionDescription": { + "message": "WebHID API implementation for Firefox" + }, + "popupTitle": { + "message": "WebHID" + }, + "popupBack": { + "message": "Back" + }, + "popupPairedDevices": { + "message": "Paired Devices" + }, + "popupNoDevices": { + "message": "No devices paired for this site." + }, + "popupSettings": { + "message": "Settings" + }, + "popupDataPlane": { + "message": "Data Plane" + }, + "popupDataPlaneDesc": { + "message": "WebTransport (in a worker), WebTransport (in the page), WebSocket, or Native Messaging" + }, + "popupDataPlaneWs": { + "message": "WebSocket" + }, + "popupDataPlaneWt": { + "message": "WebTransport" + }, + "popupDataPlaneNm": { + "message": "Native Messaging" + }, + "popupDevicePickerMode": { + "message": "Device Picker Mode" + }, + "popupDevicePickerModeDesc": { + "message": "How the device chooser is presented on this site" + }, + "popupWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "popupWorkerPolyfillDesc": { + "message": "Inject WebHID API into Worker scripts on this site" + }, + "popupAllowActivationless": { + "message": "Allow requestDevice() without user gesture" + }, + "popupAllowActivationlessDesc": { + "message": "Skip the user-activation check when this site calls requestDevice(). Spec workaround for sites that call it asynchronously; the device chooser still requires explicit user selection." + }, + "popupWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "popupWorkerSpawnModeDesc": { + "message": "How the data worker is created on this site" + }, + "popupLogLevel": { + "message": "Log Level" + }, + "popupLogLevelDesc": { + "message": "Console output verbosity for this site" + }, + "logLevelError": { + "message": "Error" + }, + "logLevelWarn": { + "message": "Warn" + }, + "logLevelInfo": { + "message": "Info" + }, + "logLevelDebug": { + "message": "Debug" + }, + "popupDefaultNote": { + "message": "Changes here override defaults for this site." + }, + "popupGlobalSettings": { + "message": "Global settings →" + }, + "popupManageDevices": { + "message": "Manage all paired devices →" + }, + "popupNoSite": { + "message": "(no site)" + }, + "popupSiteOrigin": { + "message": "Site origin" + }, + "popupOriginList": { + "message": "Origins in this tab" + }, + "popupUnknown": { + "message": "Unknown" + }, + "popupPairedDevice": { + "message": "Paired device" + }, + "popupRevoke": { + "message": "Revoke" + }, + "popupDeviceCount": { + "message": "($1/$2)" + }, + "popupInPageWtWarning": { + "message": "In-page WebTransport may trigger a Firefox local-network permission prompt (\"wants to access other apps and services on this device\"). Tick \"Remember my choice for this site\" before clicking Allow, otherwise you will be asked again on every page load." + }, + "statusReady": { + "message": "Ready" + }, + "statusFallback": { + "message": "Fallback: $1" + }, + "statusOffline": { + "message": "Daemon offline" + }, + "statusOfflineGuidance": { + "message": "Check that the daemon is running (systemctl status webhid-daemon), that your user is in the webhid group, and that the udev rules are installed." + }, + "planeNameWS": { + "message": "WebSocket" + }, + "planeNameWT": { + "message": "WebTransport" + }, + "planeNameNM": { + "message": "Native Messaging" + }, + "infoPopoverMore": { + "message": "More info" + }, + "macPrivacyTitle": { + "message": "macOS Input Monitoring" + }, + "macPrivacyDesc": { + "message": "Allow the daemon to read HID devices: System Settings → Privacy & Security → Input Monitoring. If the link does not open the right tab, find it manually and enable the daemon." + }, + "macPrivacyOpen": { + "message": "Open Privacy Settings" + }, + "settingsTitle": { + "message": "WebHID Settings" + }, + "settingsDaemonAsNmHost": { + "message": "Daemon as NM host" + }, + "settingsDaemonAsNmHostDesc": { + "message": "Talk to the daemon directly over native messaging, skipping the forwarder and Unix socket. Requires the daemon_nm_host manifest and the daemon running as your user (with the udev rule). Lower latency, no root-daemon fallback. Reconnects automatically." + }, + "settingsDataPlane": { + "message": "Data Plane" + }, + "settingsDataPlaneDesc": { + "message": "**WebTransport** (default): the fastest option; runs in a background worker so pages stay smooth.\n**WebTransport (in-page)**: connects directly in the page; fine at normal report rates, uses more page CPU. Use it when the site blocks background workers (CSP) but still allows the connection; the worker-based options would fall back to Native Messaging there. Firefox asks a one-time local-network permission (\"Allow\") before the first in-page connection; tick \"Remember my choice for this site\". Reload pages after changing.\n**WebSocket**: fallback when WebTransport is not available (older Firefox).\n**Native Messaging**: the slowest but most compatible option; use when a site's security policy blocks the others." + }, + "settingsDataPlaneWs": { + "message": "WebSocket" + }, + "settingsDataPlaneWt": { + "message": "WebTransport" + }, + "settingsDataPlaneWtInpage": { + "message": "WebTransport (in-page)" + }, + "settingsDataPlaneNm": { + "message": "Native Messaging" + }, + "settingsDevicePickerMode": { + "message": "Device Picker Mode" + }, + "settingsDevicePickerModeDesc": { + "message": "**Modal**: shadow-DOM overlay on the page when requestDevice() is called (default).\n**Page Action**: URL-bar popup picker; the user clicks the icon to open it. Firefox only, Chromium falls back to modal.\n**Window**: separate popup window." + }, + "settingsDevicePickerModal": { + "message": "Modal (overlay)" + }, + "settingsDevicePickerPageAction": { + "message": "Page Action (URL bar popup)" + }, + "settingsDevicePickerWindow": { + "message": "Window (separate popup window)" + }, + "settingsWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "settingsWorkerPolyfillDesc": { + "message": "Injects the full WebHID API into Worker scripts (new Worker()). requestDevice() stays page-only, as the spec requires. Reload pages after changing." + }, + "settingsAllowActivationless": { + "message": "Allow activation-less requestDevice()" + }, + "settingsAllowActivationlessDesc": { + "message": "Skip the user-activation requirement for requestDevice() on this site. Spec deviation; workaround for sites that call it from an async handler. The chooser still requires explicit user selection. Reload pages after changing." + }, + "settingsLogLevel": { + "message": "Log Level" + }, + "settingsLogLevelDesc": { + "message": "Console verbosity: Error = errors only, Warn = +warnings, Info = +info, Debug = +debug (includes timing). Reload pages after changing." + }, + "pickerTitle": { + "message": "Select a HID Device" + }, + "pickerCancel": { + "message": "Cancel" + }, + "pickerConnect": { + "message": "Connect" + }, + "pickerNoDevices": { + "message": "No HID devices found" + }, + "pickerNoDaemon": { + "message": "Cannot reach the WebHID daemon. Check that it is installed and running, then try again." + }, + "pickerParseFailed": { + "message": "This device's report descriptor could not be parsed. Connecting and sending reports still works." + }, + "pickerNoMatch": { + "message": "No devices match the specified filters" + }, + "pickerNoPending": { + "message": "No pending device request" + }, + "pickerLoading": { + "message": "Loading devices..." + }, + "pickerInterfaces": { + "message": "$1 interfaces" + }, + "settingsWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "settingsWorkerSpawnModeDesc": { + "message": "**Shadow URL** (default on MV3): spawns the data worker via new Worker(location.href) with a StreamFilter intercepting the synthetic self-request; respects the page's security settings and changes nothing about the page. Fails if the server rejects it or if require-trusted-types-for is restrictive.\n**Blob + CSP rewrite** (default on MV2): spawns the worker from a blob: URL; relaxes the page's worker-src and connect-src directives. Works fully on MV2; on MV3 only a meta-tag CSP can be rewritten, so header-based policies still block it." + }, + "settingsWorkerSpawnShadow": { + "message": "Shadow URL" + }, + "settingsWorkerSpawnBlob": { + "message": "Blob + CSP rewrite" + }, + "segDataPlaneWs": { + "message": "WS" + }, + "segDataPlaneWt": { + "message": "WT" + }, + "segDataPlaneWtInpage": { + "message": "WTI" + }, + "segDataPlaneNm": { + "message": "NM" + }, + "segPickerModal": { + "message": "Modal" + }, + "segPickerPageAction": { + "message": "Page Action" + }, + "segPickerWindow": { + "message": "Window" + }, + "segSpawnShadow": { + "message": "Shadow" + }, + "segSpawnBlob": { + "message": "Blob" + }, + "devicesTitle": { + "message": "Paired Devices (all sites)" + }, + "devicesNone": { + "message": "No devices paired on any site." + } +} From 891fde2ac7c910968c5635744da94d47c869f7da Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 13:49:51 +0700 Subject: [PATCH 17/29] New translations messages.json (Dutch) [ci skip] chore: sync translations from Crowdin --- addon/_locales/nl_NL/messages.json | 281 +++++++++++++++++++++++++++++ 1 file changed, 281 insertions(+) create mode 100644 addon/_locales/nl_NL/messages.json diff --git a/addon/_locales/nl_NL/messages.json b/addon/_locales/nl_NL/messages.json new file mode 100644 index 00000000..d602377d --- /dev/null +++ b/addon/_locales/nl_NL/messages.json @@ -0,0 +1,281 @@ +{ + "extensionName": { + "message": "WebHID" + }, + "extensionDescription": { + "message": "WebHID API implementation for Firefox" + }, + "popupTitle": { + "message": "WebHID" + }, + "popupBack": { + "message": "Back" + }, + "popupPairedDevices": { + "message": "Paired Devices" + }, + "popupNoDevices": { + "message": "No devices paired for this site." + }, + "popupSettings": { + "message": "Settings" + }, + "popupDataPlane": { + "message": "Data Plane" + }, + "popupDataPlaneDesc": { + "message": "WebTransport (in a worker), WebTransport (in the page), WebSocket, or Native Messaging" + }, + "popupDataPlaneWs": { + "message": "WebSocket" + }, + "popupDataPlaneWt": { + "message": "WebTransport" + }, + "popupDataPlaneNm": { + "message": "Native Messaging" + }, + "popupDevicePickerMode": { + "message": "Device Picker Mode" + }, + "popupDevicePickerModeDesc": { + "message": "How the device chooser is presented on this site" + }, + "popupWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "popupWorkerPolyfillDesc": { + "message": "Inject WebHID API into Worker scripts on this site" + }, + "popupAllowActivationless": { + "message": "Allow requestDevice() without user gesture" + }, + "popupAllowActivationlessDesc": { + "message": "Skip the user-activation check when this site calls requestDevice(). Spec workaround for sites that call it asynchronously; the device chooser still requires explicit user selection." + }, + "popupWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "popupWorkerSpawnModeDesc": { + "message": "How the data worker is created on this site" + }, + "popupLogLevel": { + "message": "Log Level" + }, + "popupLogLevelDesc": { + "message": "Console output verbosity for this site" + }, + "logLevelError": { + "message": "Error" + }, + "logLevelWarn": { + "message": "Warn" + }, + "logLevelInfo": { + "message": "Info" + }, + "logLevelDebug": { + "message": "Debug" + }, + "popupDefaultNote": { + "message": "Changes here override defaults for this site." + }, + "popupGlobalSettings": { + "message": "Global settings →" + }, + "popupManageDevices": { + "message": "Manage all paired devices →" + }, + "popupNoSite": { + "message": "(no site)" + }, + "popupSiteOrigin": { + "message": "Site origin" + }, + "popupOriginList": { + "message": "Origins in this tab" + }, + "popupUnknown": { + "message": "Unknown" + }, + "popupPairedDevice": { + "message": "Paired device" + }, + "popupRevoke": { + "message": "Revoke" + }, + "popupDeviceCount": { + "message": "($1/$2)" + }, + "popupInPageWtWarning": { + "message": "In-page WebTransport may trigger a Firefox local-network permission prompt (\"wants to access other apps and services on this device\"). Tick \"Remember my choice for this site\" before clicking Allow, otherwise you will be asked again on every page load." + }, + "statusReady": { + "message": "Ready" + }, + "statusFallback": { + "message": "Fallback: $1" + }, + "statusOffline": { + "message": "Daemon offline" + }, + "statusOfflineGuidance": { + "message": "Check that the daemon is running (systemctl status webhid-daemon), that your user is in the webhid group, and that the udev rules are installed." + }, + "planeNameWS": { + "message": "WebSocket" + }, + "planeNameWT": { + "message": "WebTransport" + }, + "planeNameNM": { + "message": "Native Messaging" + }, + "infoPopoverMore": { + "message": "More info" + }, + "macPrivacyTitle": { + "message": "macOS Input Monitoring" + }, + "macPrivacyDesc": { + "message": "Allow the daemon to read HID devices: System Settings → Privacy & Security → Input Monitoring. If the link does not open the right tab, find it manually and enable the daemon." + }, + "macPrivacyOpen": { + "message": "Open Privacy Settings" + }, + "settingsTitle": { + "message": "WebHID Settings" + }, + "settingsDaemonAsNmHost": { + "message": "Daemon as NM host" + }, + "settingsDaemonAsNmHostDesc": { + "message": "Talk to the daemon directly over native messaging, skipping the forwarder and Unix socket. Requires the daemon_nm_host manifest and the daemon running as your user (with the udev rule). Lower latency, no root-daemon fallback. Reconnects automatically." + }, + "settingsDataPlane": { + "message": "Data Plane" + }, + "settingsDataPlaneDesc": { + "message": "**WebTransport** (default): the fastest option; runs in a background worker so pages stay smooth.\n**WebTransport (in-page)**: connects directly in the page; fine at normal report rates, uses more page CPU. Use it when the site blocks background workers (CSP) but still allows the connection; the worker-based options would fall back to Native Messaging there. Firefox asks a one-time local-network permission (\"Allow\") before the first in-page connection; tick \"Remember my choice for this site\". Reload pages after changing.\n**WebSocket**: fallback when WebTransport is not available (older Firefox).\n**Native Messaging**: the slowest but most compatible option; use when a site's security policy blocks the others." + }, + "settingsDataPlaneWs": { + "message": "WebSocket" + }, + "settingsDataPlaneWt": { + "message": "WebTransport" + }, + "settingsDataPlaneWtInpage": { + "message": "WebTransport (in-page)" + }, + "settingsDataPlaneNm": { + "message": "Native Messaging" + }, + "settingsDevicePickerMode": { + "message": "Device Picker Mode" + }, + "settingsDevicePickerModeDesc": { + "message": "**Modal**: shadow-DOM overlay on the page when requestDevice() is called (default).\n**Page Action**: URL-bar popup picker; the user clicks the icon to open it. Firefox only, Chromium falls back to modal.\n**Window**: separate popup window." + }, + "settingsDevicePickerModal": { + "message": "Modal (overlay)" + }, + "settingsDevicePickerPageAction": { + "message": "Page Action (URL bar popup)" + }, + "settingsDevicePickerWindow": { + "message": "Window (separate popup window)" + }, + "settingsWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "settingsWorkerPolyfillDesc": { + "message": "Injects the full WebHID API into Worker scripts (new Worker()). requestDevice() stays page-only, as the spec requires. Reload pages after changing." + }, + "settingsAllowActivationless": { + "message": "Allow activation-less requestDevice()" + }, + "settingsAllowActivationlessDesc": { + "message": "Skip the user-activation requirement for requestDevice() on this site. Spec deviation; workaround for sites that call it from an async handler. The chooser still requires explicit user selection. Reload pages after changing." + }, + "settingsLogLevel": { + "message": "Log Level" + }, + "settingsLogLevelDesc": { + "message": "Console verbosity: Error = errors only, Warn = +warnings, Info = +info, Debug = +debug (includes timing). Reload pages after changing." + }, + "pickerTitle": { + "message": "Select a HID Device" + }, + "pickerCancel": { + "message": "Cancel" + }, + "pickerConnect": { + "message": "Connect" + }, + "pickerNoDevices": { + "message": "No HID devices found" + }, + "pickerNoDaemon": { + "message": "Cannot reach the WebHID daemon. Check that it is installed and running, then try again." + }, + "pickerParseFailed": { + "message": "This device's report descriptor could not be parsed. Connecting and sending reports still works." + }, + "pickerNoMatch": { + "message": "No devices match the specified filters" + }, + "pickerNoPending": { + "message": "No pending device request" + }, + "pickerLoading": { + "message": "Loading devices..." + }, + "pickerInterfaces": { + "message": "$1 interfaces" + }, + "settingsWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "settingsWorkerSpawnModeDesc": { + "message": "**Shadow URL** (default on MV3): spawns the data worker via new Worker(location.href) with a StreamFilter intercepting the synthetic self-request; respects the page's security settings and changes nothing about the page. Fails if the server rejects it or if require-trusted-types-for is restrictive.\n**Blob + CSP rewrite** (default on MV2): spawns the worker from a blob: URL; relaxes the page's worker-src and connect-src directives. Works fully on MV2; on MV3 only a meta-tag CSP can be rewritten, so header-based policies still block it." + }, + "settingsWorkerSpawnShadow": { + "message": "Shadow URL" + }, + "settingsWorkerSpawnBlob": { + "message": "Blob + CSP rewrite" + }, + "segDataPlaneWs": { + "message": "WS" + }, + "segDataPlaneWt": { + "message": "WT" + }, + "segDataPlaneWtInpage": { + "message": "WTI" + }, + "segDataPlaneNm": { + "message": "NM" + }, + "segPickerModal": { + "message": "Modal" + }, + "segPickerPageAction": { + "message": "Page Action" + }, + "segPickerWindow": { + "message": "Window" + }, + "segSpawnShadow": { + "message": "Shadow" + }, + "segSpawnBlob": { + "message": "Blob" + }, + "devicesTitle": { + "message": "Paired Devices (all sites)" + }, + "devicesNone": { + "message": "No devices paired on any site." + } +} From 2fc7eee57e9dd71cc35c83e6aab56b69f0760c77 Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 13:49:53 +0700 Subject: [PATCH 18/29] New translations messages.json (Norwegian) [ci skip] chore: sync translations from Crowdin --- addon/_locales/no_NO/messages.json | 281 +++++++++++++++++++++++++++++ 1 file changed, 281 insertions(+) create mode 100644 addon/_locales/no_NO/messages.json diff --git a/addon/_locales/no_NO/messages.json b/addon/_locales/no_NO/messages.json new file mode 100644 index 00000000..d602377d --- /dev/null +++ b/addon/_locales/no_NO/messages.json @@ -0,0 +1,281 @@ +{ + "extensionName": { + "message": "WebHID" + }, + "extensionDescription": { + "message": "WebHID API implementation for Firefox" + }, + "popupTitle": { + "message": "WebHID" + }, + "popupBack": { + "message": "Back" + }, + "popupPairedDevices": { + "message": "Paired Devices" + }, + "popupNoDevices": { + "message": "No devices paired for this site." + }, + "popupSettings": { + "message": "Settings" + }, + "popupDataPlane": { + "message": "Data Plane" + }, + "popupDataPlaneDesc": { + "message": "WebTransport (in a worker), WebTransport (in the page), WebSocket, or Native Messaging" + }, + "popupDataPlaneWs": { + "message": "WebSocket" + }, + "popupDataPlaneWt": { + "message": "WebTransport" + }, + "popupDataPlaneNm": { + "message": "Native Messaging" + }, + "popupDevicePickerMode": { + "message": "Device Picker Mode" + }, + "popupDevicePickerModeDesc": { + "message": "How the device chooser is presented on this site" + }, + "popupWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "popupWorkerPolyfillDesc": { + "message": "Inject WebHID API into Worker scripts on this site" + }, + "popupAllowActivationless": { + "message": "Allow requestDevice() without user gesture" + }, + "popupAllowActivationlessDesc": { + "message": "Skip the user-activation check when this site calls requestDevice(). Spec workaround for sites that call it asynchronously; the device chooser still requires explicit user selection." + }, + "popupWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "popupWorkerSpawnModeDesc": { + "message": "How the data worker is created on this site" + }, + "popupLogLevel": { + "message": "Log Level" + }, + "popupLogLevelDesc": { + "message": "Console output verbosity for this site" + }, + "logLevelError": { + "message": "Error" + }, + "logLevelWarn": { + "message": "Warn" + }, + "logLevelInfo": { + "message": "Info" + }, + "logLevelDebug": { + "message": "Debug" + }, + "popupDefaultNote": { + "message": "Changes here override defaults for this site." + }, + "popupGlobalSettings": { + "message": "Global settings →" + }, + "popupManageDevices": { + "message": "Manage all paired devices →" + }, + "popupNoSite": { + "message": "(no site)" + }, + "popupSiteOrigin": { + "message": "Site origin" + }, + "popupOriginList": { + "message": "Origins in this tab" + }, + "popupUnknown": { + "message": "Unknown" + }, + "popupPairedDevice": { + "message": "Paired device" + }, + "popupRevoke": { + "message": "Revoke" + }, + "popupDeviceCount": { + "message": "($1/$2)" + }, + "popupInPageWtWarning": { + "message": "In-page WebTransport may trigger a Firefox local-network permission prompt (\"wants to access other apps and services on this device\"). Tick \"Remember my choice for this site\" before clicking Allow, otherwise you will be asked again on every page load." + }, + "statusReady": { + "message": "Ready" + }, + "statusFallback": { + "message": "Fallback: $1" + }, + "statusOffline": { + "message": "Daemon offline" + }, + "statusOfflineGuidance": { + "message": "Check that the daemon is running (systemctl status webhid-daemon), that your user is in the webhid group, and that the udev rules are installed." + }, + "planeNameWS": { + "message": "WebSocket" + }, + "planeNameWT": { + "message": "WebTransport" + }, + "planeNameNM": { + "message": "Native Messaging" + }, + "infoPopoverMore": { + "message": "More info" + }, + "macPrivacyTitle": { + "message": "macOS Input Monitoring" + }, + "macPrivacyDesc": { + "message": "Allow the daemon to read HID devices: System Settings → Privacy & Security → Input Monitoring. If the link does not open the right tab, find it manually and enable the daemon." + }, + "macPrivacyOpen": { + "message": "Open Privacy Settings" + }, + "settingsTitle": { + "message": "WebHID Settings" + }, + "settingsDaemonAsNmHost": { + "message": "Daemon as NM host" + }, + "settingsDaemonAsNmHostDesc": { + "message": "Talk to the daemon directly over native messaging, skipping the forwarder and Unix socket. Requires the daemon_nm_host manifest and the daemon running as your user (with the udev rule). Lower latency, no root-daemon fallback. Reconnects automatically." + }, + "settingsDataPlane": { + "message": "Data Plane" + }, + "settingsDataPlaneDesc": { + "message": "**WebTransport** (default): the fastest option; runs in a background worker so pages stay smooth.\n**WebTransport (in-page)**: connects directly in the page; fine at normal report rates, uses more page CPU. Use it when the site blocks background workers (CSP) but still allows the connection; the worker-based options would fall back to Native Messaging there. Firefox asks a one-time local-network permission (\"Allow\") before the first in-page connection; tick \"Remember my choice for this site\". Reload pages after changing.\n**WebSocket**: fallback when WebTransport is not available (older Firefox).\n**Native Messaging**: the slowest but most compatible option; use when a site's security policy blocks the others." + }, + "settingsDataPlaneWs": { + "message": "WebSocket" + }, + "settingsDataPlaneWt": { + "message": "WebTransport" + }, + "settingsDataPlaneWtInpage": { + "message": "WebTransport (in-page)" + }, + "settingsDataPlaneNm": { + "message": "Native Messaging" + }, + "settingsDevicePickerMode": { + "message": "Device Picker Mode" + }, + "settingsDevicePickerModeDesc": { + "message": "**Modal**: shadow-DOM overlay on the page when requestDevice() is called (default).\n**Page Action**: URL-bar popup picker; the user clicks the icon to open it. Firefox only, Chromium falls back to modal.\n**Window**: separate popup window." + }, + "settingsDevicePickerModal": { + "message": "Modal (overlay)" + }, + "settingsDevicePickerPageAction": { + "message": "Page Action (URL bar popup)" + }, + "settingsDevicePickerWindow": { + "message": "Window (separate popup window)" + }, + "settingsWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "settingsWorkerPolyfillDesc": { + "message": "Injects the full WebHID API into Worker scripts (new Worker()). requestDevice() stays page-only, as the spec requires. Reload pages after changing." + }, + "settingsAllowActivationless": { + "message": "Allow activation-less requestDevice()" + }, + "settingsAllowActivationlessDesc": { + "message": "Skip the user-activation requirement for requestDevice() on this site. Spec deviation; workaround for sites that call it from an async handler. The chooser still requires explicit user selection. Reload pages after changing." + }, + "settingsLogLevel": { + "message": "Log Level" + }, + "settingsLogLevelDesc": { + "message": "Console verbosity: Error = errors only, Warn = +warnings, Info = +info, Debug = +debug (includes timing). Reload pages after changing." + }, + "pickerTitle": { + "message": "Select a HID Device" + }, + "pickerCancel": { + "message": "Cancel" + }, + "pickerConnect": { + "message": "Connect" + }, + "pickerNoDevices": { + "message": "No HID devices found" + }, + "pickerNoDaemon": { + "message": "Cannot reach the WebHID daemon. Check that it is installed and running, then try again." + }, + "pickerParseFailed": { + "message": "This device's report descriptor could not be parsed. Connecting and sending reports still works." + }, + "pickerNoMatch": { + "message": "No devices match the specified filters" + }, + "pickerNoPending": { + "message": "No pending device request" + }, + "pickerLoading": { + "message": "Loading devices..." + }, + "pickerInterfaces": { + "message": "$1 interfaces" + }, + "settingsWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "settingsWorkerSpawnModeDesc": { + "message": "**Shadow URL** (default on MV3): spawns the data worker via new Worker(location.href) with a StreamFilter intercepting the synthetic self-request; respects the page's security settings and changes nothing about the page. Fails if the server rejects it or if require-trusted-types-for is restrictive.\n**Blob + CSP rewrite** (default on MV2): spawns the worker from a blob: URL; relaxes the page's worker-src and connect-src directives. Works fully on MV2; on MV3 only a meta-tag CSP can be rewritten, so header-based policies still block it." + }, + "settingsWorkerSpawnShadow": { + "message": "Shadow URL" + }, + "settingsWorkerSpawnBlob": { + "message": "Blob + CSP rewrite" + }, + "segDataPlaneWs": { + "message": "WS" + }, + "segDataPlaneWt": { + "message": "WT" + }, + "segDataPlaneWtInpage": { + "message": "WTI" + }, + "segDataPlaneNm": { + "message": "NM" + }, + "segPickerModal": { + "message": "Modal" + }, + "segPickerPageAction": { + "message": "Page Action" + }, + "segPickerWindow": { + "message": "Window" + }, + "segSpawnShadow": { + "message": "Shadow" + }, + "segSpawnBlob": { + "message": "Blob" + }, + "devicesTitle": { + "message": "Paired Devices (all sites)" + }, + "devicesNone": { + "message": "No devices paired on any site." + } +} From 447c06cf6c7aa1a0b0ea56db33fd878f56586c54 Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 13:49:54 +0700 Subject: [PATCH 19/29] New translations messages.json (Polish) [ci skip] chore: sync translations from Crowdin --- addon/_locales/pl_PL/messages.json | 281 +++++++++++++++++++++++++++++ 1 file changed, 281 insertions(+) create mode 100644 addon/_locales/pl_PL/messages.json diff --git a/addon/_locales/pl_PL/messages.json b/addon/_locales/pl_PL/messages.json new file mode 100644 index 00000000..d602377d --- /dev/null +++ b/addon/_locales/pl_PL/messages.json @@ -0,0 +1,281 @@ +{ + "extensionName": { + "message": "WebHID" + }, + "extensionDescription": { + "message": "WebHID API implementation for Firefox" + }, + "popupTitle": { + "message": "WebHID" + }, + "popupBack": { + "message": "Back" + }, + "popupPairedDevices": { + "message": "Paired Devices" + }, + "popupNoDevices": { + "message": "No devices paired for this site." + }, + "popupSettings": { + "message": "Settings" + }, + "popupDataPlane": { + "message": "Data Plane" + }, + "popupDataPlaneDesc": { + "message": "WebTransport (in a worker), WebTransport (in the page), WebSocket, or Native Messaging" + }, + "popupDataPlaneWs": { + "message": "WebSocket" + }, + "popupDataPlaneWt": { + "message": "WebTransport" + }, + "popupDataPlaneNm": { + "message": "Native Messaging" + }, + "popupDevicePickerMode": { + "message": "Device Picker Mode" + }, + "popupDevicePickerModeDesc": { + "message": "How the device chooser is presented on this site" + }, + "popupWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "popupWorkerPolyfillDesc": { + "message": "Inject WebHID API into Worker scripts on this site" + }, + "popupAllowActivationless": { + "message": "Allow requestDevice() without user gesture" + }, + "popupAllowActivationlessDesc": { + "message": "Skip the user-activation check when this site calls requestDevice(). Spec workaround for sites that call it asynchronously; the device chooser still requires explicit user selection." + }, + "popupWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "popupWorkerSpawnModeDesc": { + "message": "How the data worker is created on this site" + }, + "popupLogLevel": { + "message": "Log Level" + }, + "popupLogLevelDesc": { + "message": "Console output verbosity for this site" + }, + "logLevelError": { + "message": "Error" + }, + "logLevelWarn": { + "message": "Warn" + }, + "logLevelInfo": { + "message": "Info" + }, + "logLevelDebug": { + "message": "Debug" + }, + "popupDefaultNote": { + "message": "Changes here override defaults for this site." + }, + "popupGlobalSettings": { + "message": "Global settings →" + }, + "popupManageDevices": { + "message": "Manage all paired devices →" + }, + "popupNoSite": { + "message": "(no site)" + }, + "popupSiteOrigin": { + "message": "Site origin" + }, + "popupOriginList": { + "message": "Origins in this tab" + }, + "popupUnknown": { + "message": "Unknown" + }, + "popupPairedDevice": { + "message": "Paired device" + }, + "popupRevoke": { + "message": "Revoke" + }, + "popupDeviceCount": { + "message": "($1/$2)" + }, + "popupInPageWtWarning": { + "message": "In-page WebTransport may trigger a Firefox local-network permission prompt (\"wants to access other apps and services on this device\"). Tick \"Remember my choice for this site\" before clicking Allow, otherwise you will be asked again on every page load." + }, + "statusReady": { + "message": "Ready" + }, + "statusFallback": { + "message": "Fallback: $1" + }, + "statusOffline": { + "message": "Daemon offline" + }, + "statusOfflineGuidance": { + "message": "Check that the daemon is running (systemctl status webhid-daemon), that your user is in the webhid group, and that the udev rules are installed." + }, + "planeNameWS": { + "message": "WebSocket" + }, + "planeNameWT": { + "message": "WebTransport" + }, + "planeNameNM": { + "message": "Native Messaging" + }, + "infoPopoverMore": { + "message": "More info" + }, + "macPrivacyTitle": { + "message": "macOS Input Monitoring" + }, + "macPrivacyDesc": { + "message": "Allow the daemon to read HID devices: System Settings → Privacy & Security → Input Monitoring. If the link does not open the right tab, find it manually and enable the daemon." + }, + "macPrivacyOpen": { + "message": "Open Privacy Settings" + }, + "settingsTitle": { + "message": "WebHID Settings" + }, + "settingsDaemonAsNmHost": { + "message": "Daemon as NM host" + }, + "settingsDaemonAsNmHostDesc": { + "message": "Talk to the daemon directly over native messaging, skipping the forwarder and Unix socket. Requires the daemon_nm_host manifest and the daemon running as your user (with the udev rule). Lower latency, no root-daemon fallback. Reconnects automatically." + }, + "settingsDataPlane": { + "message": "Data Plane" + }, + "settingsDataPlaneDesc": { + "message": "**WebTransport** (default): the fastest option; runs in a background worker so pages stay smooth.\n**WebTransport (in-page)**: connects directly in the page; fine at normal report rates, uses more page CPU. Use it when the site blocks background workers (CSP) but still allows the connection; the worker-based options would fall back to Native Messaging there. Firefox asks a one-time local-network permission (\"Allow\") before the first in-page connection; tick \"Remember my choice for this site\". Reload pages after changing.\n**WebSocket**: fallback when WebTransport is not available (older Firefox).\n**Native Messaging**: the slowest but most compatible option; use when a site's security policy blocks the others." + }, + "settingsDataPlaneWs": { + "message": "WebSocket" + }, + "settingsDataPlaneWt": { + "message": "WebTransport" + }, + "settingsDataPlaneWtInpage": { + "message": "WebTransport (in-page)" + }, + "settingsDataPlaneNm": { + "message": "Native Messaging" + }, + "settingsDevicePickerMode": { + "message": "Device Picker Mode" + }, + "settingsDevicePickerModeDesc": { + "message": "**Modal**: shadow-DOM overlay on the page when requestDevice() is called (default).\n**Page Action**: URL-bar popup picker; the user clicks the icon to open it. Firefox only, Chromium falls back to modal.\n**Window**: separate popup window." + }, + "settingsDevicePickerModal": { + "message": "Modal (overlay)" + }, + "settingsDevicePickerPageAction": { + "message": "Page Action (URL bar popup)" + }, + "settingsDevicePickerWindow": { + "message": "Window (separate popup window)" + }, + "settingsWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "settingsWorkerPolyfillDesc": { + "message": "Injects the full WebHID API into Worker scripts (new Worker()). requestDevice() stays page-only, as the spec requires. Reload pages after changing." + }, + "settingsAllowActivationless": { + "message": "Allow activation-less requestDevice()" + }, + "settingsAllowActivationlessDesc": { + "message": "Skip the user-activation requirement for requestDevice() on this site. Spec deviation; workaround for sites that call it from an async handler. The chooser still requires explicit user selection. Reload pages after changing." + }, + "settingsLogLevel": { + "message": "Log Level" + }, + "settingsLogLevelDesc": { + "message": "Console verbosity: Error = errors only, Warn = +warnings, Info = +info, Debug = +debug (includes timing). Reload pages after changing." + }, + "pickerTitle": { + "message": "Select a HID Device" + }, + "pickerCancel": { + "message": "Cancel" + }, + "pickerConnect": { + "message": "Connect" + }, + "pickerNoDevices": { + "message": "No HID devices found" + }, + "pickerNoDaemon": { + "message": "Cannot reach the WebHID daemon. Check that it is installed and running, then try again." + }, + "pickerParseFailed": { + "message": "This device's report descriptor could not be parsed. Connecting and sending reports still works." + }, + "pickerNoMatch": { + "message": "No devices match the specified filters" + }, + "pickerNoPending": { + "message": "No pending device request" + }, + "pickerLoading": { + "message": "Loading devices..." + }, + "pickerInterfaces": { + "message": "$1 interfaces" + }, + "settingsWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "settingsWorkerSpawnModeDesc": { + "message": "**Shadow URL** (default on MV3): spawns the data worker via new Worker(location.href) with a StreamFilter intercepting the synthetic self-request; respects the page's security settings and changes nothing about the page. Fails if the server rejects it or if require-trusted-types-for is restrictive.\n**Blob + CSP rewrite** (default on MV2): spawns the worker from a blob: URL; relaxes the page's worker-src and connect-src directives. Works fully on MV2; on MV3 only a meta-tag CSP can be rewritten, so header-based policies still block it." + }, + "settingsWorkerSpawnShadow": { + "message": "Shadow URL" + }, + "settingsWorkerSpawnBlob": { + "message": "Blob + CSP rewrite" + }, + "segDataPlaneWs": { + "message": "WS" + }, + "segDataPlaneWt": { + "message": "WT" + }, + "segDataPlaneWtInpage": { + "message": "WTI" + }, + "segDataPlaneNm": { + "message": "NM" + }, + "segPickerModal": { + "message": "Modal" + }, + "segPickerPageAction": { + "message": "Page Action" + }, + "segPickerWindow": { + "message": "Window" + }, + "segSpawnShadow": { + "message": "Shadow" + }, + "segSpawnBlob": { + "message": "Blob" + }, + "devicesTitle": { + "message": "Paired Devices (all sites)" + }, + "devicesNone": { + "message": "No devices paired on any site." + } +} From bb5b2774690a91afd25d2c914e321c208201c9c5 Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 13:49:55 +0700 Subject: [PATCH 20/29] New translations messages.json (Portuguese) [ci skip] chore: sync translations from Crowdin --- addon/_locales/pt_PT/messages.json | 281 +++++++++++++++++++++++++++++ 1 file changed, 281 insertions(+) create mode 100644 addon/_locales/pt_PT/messages.json diff --git a/addon/_locales/pt_PT/messages.json b/addon/_locales/pt_PT/messages.json new file mode 100644 index 00000000..d602377d --- /dev/null +++ b/addon/_locales/pt_PT/messages.json @@ -0,0 +1,281 @@ +{ + "extensionName": { + "message": "WebHID" + }, + "extensionDescription": { + "message": "WebHID API implementation for Firefox" + }, + "popupTitle": { + "message": "WebHID" + }, + "popupBack": { + "message": "Back" + }, + "popupPairedDevices": { + "message": "Paired Devices" + }, + "popupNoDevices": { + "message": "No devices paired for this site." + }, + "popupSettings": { + "message": "Settings" + }, + "popupDataPlane": { + "message": "Data Plane" + }, + "popupDataPlaneDesc": { + "message": "WebTransport (in a worker), WebTransport (in the page), WebSocket, or Native Messaging" + }, + "popupDataPlaneWs": { + "message": "WebSocket" + }, + "popupDataPlaneWt": { + "message": "WebTransport" + }, + "popupDataPlaneNm": { + "message": "Native Messaging" + }, + "popupDevicePickerMode": { + "message": "Device Picker Mode" + }, + "popupDevicePickerModeDesc": { + "message": "How the device chooser is presented on this site" + }, + "popupWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "popupWorkerPolyfillDesc": { + "message": "Inject WebHID API into Worker scripts on this site" + }, + "popupAllowActivationless": { + "message": "Allow requestDevice() without user gesture" + }, + "popupAllowActivationlessDesc": { + "message": "Skip the user-activation check when this site calls requestDevice(). Spec workaround for sites that call it asynchronously; the device chooser still requires explicit user selection." + }, + "popupWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "popupWorkerSpawnModeDesc": { + "message": "How the data worker is created on this site" + }, + "popupLogLevel": { + "message": "Log Level" + }, + "popupLogLevelDesc": { + "message": "Console output verbosity for this site" + }, + "logLevelError": { + "message": "Error" + }, + "logLevelWarn": { + "message": "Warn" + }, + "logLevelInfo": { + "message": "Info" + }, + "logLevelDebug": { + "message": "Debug" + }, + "popupDefaultNote": { + "message": "Changes here override defaults for this site." + }, + "popupGlobalSettings": { + "message": "Global settings →" + }, + "popupManageDevices": { + "message": "Manage all paired devices →" + }, + "popupNoSite": { + "message": "(no site)" + }, + "popupSiteOrigin": { + "message": "Site origin" + }, + "popupOriginList": { + "message": "Origins in this tab" + }, + "popupUnknown": { + "message": "Unknown" + }, + "popupPairedDevice": { + "message": "Paired device" + }, + "popupRevoke": { + "message": "Revoke" + }, + "popupDeviceCount": { + "message": "($1/$2)" + }, + "popupInPageWtWarning": { + "message": "In-page WebTransport may trigger a Firefox local-network permission prompt (\"wants to access other apps and services on this device\"). Tick \"Remember my choice for this site\" before clicking Allow, otherwise you will be asked again on every page load." + }, + "statusReady": { + "message": "Ready" + }, + "statusFallback": { + "message": "Fallback: $1" + }, + "statusOffline": { + "message": "Daemon offline" + }, + "statusOfflineGuidance": { + "message": "Check that the daemon is running (systemctl status webhid-daemon), that your user is in the webhid group, and that the udev rules are installed." + }, + "planeNameWS": { + "message": "WebSocket" + }, + "planeNameWT": { + "message": "WebTransport" + }, + "planeNameNM": { + "message": "Native Messaging" + }, + "infoPopoverMore": { + "message": "More info" + }, + "macPrivacyTitle": { + "message": "macOS Input Monitoring" + }, + "macPrivacyDesc": { + "message": "Allow the daemon to read HID devices: System Settings → Privacy & Security → Input Monitoring. If the link does not open the right tab, find it manually and enable the daemon." + }, + "macPrivacyOpen": { + "message": "Open Privacy Settings" + }, + "settingsTitle": { + "message": "WebHID Settings" + }, + "settingsDaemonAsNmHost": { + "message": "Daemon as NM host" + }, + "settingsDaemonAsNmHostDesc": { + "message": "Talk to the daemon directly over native messaging, skipping the forwarder and Unix socket. Requires the daemon_nm_host manifest and the daemon running as your user (with the udev rule). Lower latency, no root-daemon fallback. Reconnects automatically." + }, + "settingsDataPlane": { + "message": "Data Plane" + }, + "settingsDataPlaneDesc": { + "message": "**WebTransport** (default): the fastest option; runs in a background worker so pages stay smooth.\n**WebTransport (in-page)**: connects directly in the page; fine at normal report rates, uses more page CPU. Use it when the site blocks background workers (CSP) but still allows the connection; the worker-based options would fall back to Native Messaging there. Firefox asks a one-time local-network permission (\"Allow\") before the first in-page connection; tick \"Remember my choice for this site\". Reload pages after changing.\n**WebSocket**: fallback when WebTransport is not available (older Firefox).\n**Native Messaging**: the slowest but most compatible option; use when a site's security policy blocks the others." + }, + "settingsDataPlaneWs": { + "message": "WebSocket" + }, + "settingsDataPlaneWt": { + "message": "WebTransport" + }, + "settingsDataPlaneWtInpage": { + "message": "WebTransport (in-page)" + }, + "settingsDataPlaneNm": { + "message": "Native Messaging" + }, + "settingsDevicePickerMode": { + "message": "Device Picker Mode" + }, + "settingsDevicePickerModeDesc": { + "message": "**Modal**: shadow-DOM overlay on the page when requestDevice() is called (default).\n**Page Action**: URL-bar popup picker; the user clicks the icon to open it. Firefox only, Chromium falls back to modal.\n**Window**: separate popup window." + }, + "settingsDevicePickerModal": { + "message": "Modal (overlay)" + }, + "settingsDevicePickerPageAction": { + "message": "Page Action (URL bar popup)" + }, + "settingsDevicePickerWindow": { + "message": "Window (separate popup window)" + }, + "settingsWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "settingsWorkerPolyfillDesc": { + "message": "Injects the full WebHID API into Worker scripts (new Worker()). requestDevice() stays page-only, as the spec requires. Reload pages after changing." + }, + "settingsAllowActivationless": { + "message": "Allow activation-less requestDevice()" + }, + "settingsAllowActivationlessDesc": { + "message": "Skip the user-activation requirement for requestDevice() on this site. Spec deviation; workaround for sites that call it from an async handler. The chooser still requires explicit user selection. Reload pages after changing." + }, + "settingsLogLevel": { + "message": "Log Level" + }, + "settingsLogLevelDesc": { + "message": "Console verbosity: Error = errors only, Warn = +warnings, Info = +info, Debug = +debug (includes timing). Reload pages after changing." + }, + "pickerTitle": { + "message": "Select a HID Device" + }, + "pickerCancel": { + "message": "Cancel" + }, + "pickerConnect": { + "message": "Connect" + }, + "pickerNoDevices": { + "message": "No HID devices found" + }, + "pickerNoDaemon": { + "message": "Cannot reach the WebHID daemon. Check that it is installed and running, then try again." + }, + "pickerParseFailed": { + "message": "This device's report descriptor could not be parsed. Connecting and sending reports still works." + }, + "pickerNoMatch": { + "message": "No devices match the specified filters" + }, + "pickerNoPending": { + "message": "No pending device request" + }, + "pickerLoading": { + "message": "Loading devices..." + }, + "pickerInterfaces": { + "message": "$1 interfaces" + }, + "settingsWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "settingsWorkerSpawnModeDesc": { + "message": "**Shadow URL** (default on MV3): spawns the data worker via new Worker(location.href) with a StreamFilter intercepting the synthetic self-request; respects the page's security settings and changes nothing about the page. Fails if the server rejects it or if require-trusted-types-for is restrictive.\n**Blob + CSP rewrite** (default on MV2): spawns the worker from a blob: URL; relaxes the page's worker-src and connect-src directives. Works fully on MV2; on MV3 only a meta-tag CSP can be rewritten, so header-based policies still block it." + }, + "settingsWorkerSpawnShadow": { + "message": "Shadow URL" + }, + "settingsWorkerSpawnBlob": { + "message": "Blob + CSP rewrite" + }, + "segDataPlaneWs": { + "message": "WS" + }, + "segDataPlaneWt": { + "message": "WT" + }, + "segDataPlaneWtInpage": { + "message": "WTI" + }, + "segDataPlaneNm": { + "message": "NM" + }, + "segPickerModal": { + "message": "Modal" + }, + "segPickerPageAction": { + "message": "Page Action" + }, + "segPickerWindow": { + "message": "Window" + }, + "segSpawnShadow": { + "message": "Shadow" + }, + "segSpawnBlob": { + "message": "Blob" + }, + "devicesTitle": { + "message": "Paired Devices (all sites)" + }, + "devicesNone": { + "message": "No devices paired on any site." + } +} From fa161ebb591b3cf357fa5b9c21eb0a143ad5d584 Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 13:49:56 +0700 Subject: [PATCH 21/29] New translations messages.json (Russian) [ci skip] chore: sync translations from Crowdin --- addon/_locales/ru_RU/messages.json | 281 +++++++++++++++++++++++++++++ 1 file changed, 281 insertions(+) create mode 100644 addon/_locales/ru_RU/messages.json diff --git a/addon/_locales/ru_RU/messages.json b/addon/_locales/ru_RU/messages.json new file mode 100644 index 00000000..d602377d --- /dev/null +++ b/addon/_locales/ru_RU/messages.json @@ -0,0 +1,281 @@ +{ + "extensionName": { + "message": "WebHID" + }, + "extensionDescription": { + "message": "WebHID API implementation for Firefox" + }, + "popupTitle": { + "message": "WebHID" + }, + "popupBack": { + "message": "Back" + }, + "popupPairedDevices": { + "message": "Paired Devices" + }, + "popupNoDevices": { + "message": "No devices paired for this site." + }, + "popupSettings": { + "message": "Settings" + }, + "popupDataPlane": { + "message": "Data Plane" + }, + "popupDataPlaneDesc": { + "message": "WebTransport (in a worker), WebTransport (in the page), WebSocket, or Native Messaging" + }, + "popupDataPlaneWs": { + "message": "WebSocket" + }, + "popupDataPlaneWt": { + "message": "WebTransport" + }, + "popupDataPlaneNm": { + "message": "Native Messaging" + }, + "popupDevicePickerMode": { + "message": "Device Picker Mode" + }, + "popupDevicePickerModeDesc": { + "message": "How the device chooser is presented on this site" + }, + "popupWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "popupWorkerPolyfillDesc": { + "message": "Inject WebHID API into Worker scripts on this site" + }, + "popupAllowActivationless": { + "message": "Allow requestDevice() without user gesture" + }, + "popupAllowActivationlessDesc": { + "message": "Skip the user-activation check when this site calls requestDevice(). Spec workaround for sites that call it asynchronously; the device chooser still requires explicit user selection." + }, + "popupWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "popupWorkerSpawnModeDesc": { + "message": "How the data worker is created on this site" + }, + "popupLogLevel": { + "message": "Log Level" + }, + "popupLogLevelDesc": { + "message": "Console output verbosity for this site" + }, + "logLevelError": { + "message": "Error" + }, + "logLevelWarn": { + "message": "Warn" + }, + "logLevelInfo": { + "message": "Info" + }, + "logLevelDebug": { + "message": "Debug" + }, + "popupDefaultNote": { + "message": "Changes here override defaults for this site." + }, + "popupGlobalSettings": { + "message": "Global settings →" + }, + "popupManageDevices": { + "message": "Manage all paired devices →" + }, + "popupNoSite": { + "message": "(no site)" + }, + "popupSiteOrigin": { + "message": "Site origin" + }, + "popupOriginList": { + "message": "Origins in this tab" + }, + "popupUnknown": { + "message": "Unknown" + }, + "popupPairedDevice": { + "message": "Paired device" + }, + "popupRevoke": { + "message": "Revoke" + }, + "popupDeviceCount": { + "message": "($1/$2)" + }, + "popupInPageWtWarning": { + "message": "In-page WebTransport may trigger a Firefox local-network permission prompt (\"wants to access other apps and services on this device\"). Tick \"Remember my choice for this site\" before clicking Allow, otherwise you will be asked again on every page load." + }, + "statusReady": { + "message": "Ready" + }, + "statusFallback": { + "message": "Fallback: $1" + }, + "statusOffline": { + "message": "Daemon offline" + }, + "statusOfflineGuidance": { + "message": "Check that the daemon is running (systemctl status webhid-daemon), that your user is in the webhid group, and that the udev rules are installed." + }, + "planeNameWS": { + "message": "WebSocket" + }, + "planeNameWT": { + "message": "WebTransport" + }, + "planeNameNM": { + "message": "Native Messaging" + }, + "infoPopoverMore": { + "message": "More info" + }, + "macPrivacyTitle": { + "message": "macOS Input Monitoring" + }, + "macPrivacyDesc": { + "message": "Allow the daemon to read HID devices: System Settings → Privacy & Security → Input Monitoring. If the link does not open the right tab, find it manually and enable the daemon." + }, + "macPrivacyOpen": { + "message": "Open Privacy Settings" + }, + "settingsTitle": { + "message": "WebHID Settings" + }, + "settingsDaemonAsNmHost": { + "message": "Daemon as NM host" + }, + "settingsDaemonAsNmHostDesc": { + "message": "Talk to the daemon directly over native messaging, skipping the forwarder and Unix socket. Requires the daemon_nm_host manifest and the daemon running as your user (with the udev rule). Lower latency, no root-daemon fallback. Reconnects automatically." + }, + "settingsDataPlane": { + "message": "Data Plane" + }, + "settingsDataPlaneDesc": { + "message": "**WebTransport** (default): the fastest option; runs in a background worker so pages stay smooth.\n**WebTransport (in-page)**: connects directly in the page; fine at normal report rates, uses more page CPU. Use it when the site blocks background workers (CSP) but still allows the connection; the worker-based options would fall back to Native Messaging there. Firefox asks a one-time local-network permission (\"Allow\") before the first in-page connection; tick \"Remember my choice for this site\". Reload pages after changing.\n**WebSocket**: fallback when WebTransport is not available (older Firefox).\n**Native Messaging**: the slowest but most compatible option; use when a site's security policy blocks the others." + }, + "settingsDataPlaneWs": { + "message": "WebSocket" + }, + "settingsDataPlaneWt": { + "message": "WebTransport" + }, + "settingsDataPlaneWtInpage": { + "message": "WebTransport (in-page)" + }, + "settingsDataPlaneNm": { + "message": "Native Messaging" + }, + "settingsDevicePickerMode": { + "message": "Device Picker Mode" + }, + "settingsDevicePickerModeDesc": { + "message": "**Modal**: shadow-DOM overlay on the page when requestDevice() is called (default).\n**Page Action**: URL-bar popup picker; the user clicks the icon to open it. Firefox only, Chromium falls back to modal.\n**Window**: separate popup window." + }, + "settingsDevicePickerModal": { + "message": "Modal (overlay)" + }, + "settingsDevicePickerPageAction": { + "message": "Page Action (URL bar popup)" + }, + "settingsDevicePickerWindow": { + "message": "Window (separate popup window)" + }, + "settingsWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "settingsWorkerPolyfillDesc": { + "message": "Injects the full WebHID API into Worker scripts (new Worker()). requestDevice() stays page-only, as the spec requires. Reload pages after changing." + }, + "settingsAllowActivationless": { + "message": "Allow activation-less requestDevice()" + }, + "settingsAllowActivationlessDesc": { + "message": "Skip the user-activation requirement for requestDevice() on this site. Spec deviation; workaround for sites that call it from an async handler. The chooser still requires explicit user selection. Reload pages after changing." + }, + "settingsLogLevel": { + "message": "Log Level" + }, + "settingsLogLevelDesc": { + "message": "Console verbosity: Error = errors only, Warn = +warnings, Info = +info, Debug = +debug (includes timing). Reload pages after changing." + }, + "pickerTitle": { + "message": "Select a HID Device" + }, + "pickerCancel": { + "message": "Cancel" + }, + "pickerConnect": { + "message": "Connect" + }, + "pickerNoDevices": { + "message": "No HID devices found" + }, + "pickerNoDaemon": { + "message": "Cannot reach the WebHID daemon. Check that it is installed and running, then try again." + }, + "pickerParseFailed": { + "message": "This device's report descriptor could not be parsed. Connecting and sending reports still works." + }, + "pickerNoMatch": { + "message": "No devices match the specified filters" + }, + "pickerNoPending": { + "message": "No pending device request" + }, + "pickerLoading": { + "message": "Loading devices..." + }, + "pickerInterfaces": { + "message": "$1 interfaces" + }, + "settingsWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "settingsWorkerSpawnModeDesc": { + "message": "**Shadow URL** (default on MV3): spawns the data worker via new Worker(location.href) with a StreamFilter intercepting the synthetic self-request; respects the page's security settings and changes nothing about the page. Fails if the server rejects it or if require-trusted-types-for is restrictive.\n**Blob + CSP rewrite** (default on MV2): spawns the worker from a blob: URL; relaxes the page's worker-src and connect-src directives. Works fully on MV2; on MV3 only a meta-tag CSP can be rewritten, so header-based policies still block it." + }, + "settingsWorkerSpawnShadow": { + "message": "Shadow URL" + }, + "settingsWorkerSpawnBlob": { + "message": "Blob + CSP rewrite" + }, + "segDataPlaneWs": { + "message": "WS" + }, + "segDataPlaneWt": { + "message": "WT" + }, + "segDataPlaneWtInpage": { + "message": "WTI" + }, + "segDataPlaneNm": { + "message": "NM" + }, + "segPickerModal": { + "message": "Modal" + }, + "segPickerPageAction": { + "message": "Page Action" + }, + "segPickerWindow": { + "message": "Window" + }, + "segSpawnShadow": { + "message": "Shadow" + }, + "segSpawnBlob": { + "message": "Blob" + }, + "devicesTitle": { + "message": "Paired Devices (all sites)" + }, + "devicesNone": { + "message": "No devices paired on any site." + } +} From 1acb8aea853885b4492fbe8b0f9ed6eef3fb37ea Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 13:49:57 +0700 Subject: [PATCH 22/29] New translations messages.json (Serbian (Cyrillic)) [ci skip] chore: sync translations from Crowdin --- addon/_locales/sr_SP/messages.json | 281 +++++++++++++++++++++++++++++ 1 file changed, 281 insertions(+) create mode 100644 addon/_locales/sr_SP/messages.json diff --git a/addon/_locales/sr_SP/messages.json b/addon/_locales/sr_SP/messages.json new file mode 100644 index 00000000..d602377d --- /dev/null +++ b/addon/_locales/sr_SP/messages.json @@ -0,0 +1,281 @@ +{ + "extensionName": { + "message": "WebHID" + }, + "extensionDescription": { + "message": "WebHID API implementation for Firefox" + }, + "popupTitle": { + "message": "WebHID" + }, + "popupBack": { + "message": "Back" + }, + "popupPairedDevices": { + "message": "Paired Devices" + }, + "popupNoDevices": { + "message": "No devices paired for this site." + }, + "popupSettings": { + "message": "Settings" + }, + "popupDataPlane": { + "message": "Data Plane" + }, + "popupDataPlaneDesc": { + "message": "WebTransport (in a worker), WebTransport (in the page), WebSocket, or Native Messaging" + }, + "popupDataPlaneWs": { + "message": "WebSocket" + }, + "popupDataPlaneWt": { + "message": "WebTransport" + }, + "popupDataPlaneNm": { + "message": "Native Messaging" + }, + "popupDevicePickerMode": { + "message": "Device Picker Mode" + }, + "popupDevicePickerModeDesc": { + "message": "How the device chooser is presented on this site" + }, + "popupWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "popupWorkerPolyfillDesc": { + "message": "Inject WebHID API into Worker scripts on this site" + }, + "popupAllowActivationless": { + "message": "Allow requestDevice() without user gesture" + }, + "popupAllowActivationlessDesc": { + "message": "Skip the user-activation check when this site calls requestDevice(). Spec workaround for sites that call it asynchronously; the device chooser still requires explicit user selection." + }, + "popupWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "popupWorkerSpawnModeDesc": { + "message": "How the data worker is created on this site" + }, + "popupLogLevel": { + "message": "Log Level" + }, + "popupLogLevelDesc": { + "message": "Console output verbosity for this site" + }, + "logLevelError": { + "message": "Error" + }, + "logLevelWarn": { + "message": "Warn" + }, + "logLevelInfo": { + "message": "Info" + }, + "logLevelDebug": { + "message": "Debug" + }, + "popupDefaultNote": { + "message": "Changes here override defaults for this site." + }, + "popupGlobalSettings": { + "message": "Global settings →" + }, + "popupManageDevices": { + "message": "Manage all paired devices →" + }, + "popupNoSite": { + "message": "(no site)" + }, + "popupSiteOrigin": { + "message": "Site origin" + }, + "popupOriginList": { + "message": "Origins in this tab" + }, + "popupUnknown": { + "message": "Unknown" + }, + "popupPairedDevice": { + "message": "Paired device" + }, + "popupRevoke": { + "message": "Revoke" + }, + "popupDeviceCount": { + "message": "($1/$2)" + }, + "popupInPageWtWarning": { + "message": "In-page WebTransport may trigger a Firefox local-network permission prompt (\"wants to access other apps and services on this device\"). Tick \"Remember my choice for this site\" before clicking Allow, otherwise you will be asked again on every page load." + }, + "statusReady": { + "message": "Ready" + }, + "statusFallback": { + "message": "Fallback: $1" + }, + "statusOffline": { + "message": "Daemon offline" + }, + "statusOfflineGuidance": { + "message": "Check that the daemon is running (systemctl status webhid-daemon), that your user is in the webhid group, and that the udev rules are installed." + }, + "planeNameWS": { + "message": "WebSocket" + }, + "planeNameWT": { + "message": "WebTransport" + }, + "planeNameNM": { + "message": "Native Messaging" + }, + "infoPopoverMore": { + "message": "More info" + }, + "macPrivacyTitle": { + "message": "macOS Input Monitoring" + }, + "macPrivacyDesc": { + "message": "Allow the daemon to read HID devices: System Settings → Privacy & Security → Input Monitoring. If the link does not open the right tab, find it manually and enable the daemon." + }, + "macPrivacyOpen": { + "message": "Open Privacy Settings" + }, + "settingsTitle": { + "message": "WebHID Settings" + }, + "settingsDaemonAsNmHost": { + "message": "Daemon as NM host" + }, + "settingsDaemonAsNmHostDesc": { + "message": "Talk to the daemon directly over native messaging, skipping the forwarder and Unix socket. Requires the daemon_nm_host manifest and the daemon running as your user (with the udev rule). Lower latency, no root-daemon fallback. Reconnects automatically." + }, + "settingsDataPlane": { + "message": "Data Plane" + }, + "settingsDataPlaneDesc": { + "message": "**WebTransport** (default): the fastest option; runs in a background worker so pages stay smooth.\n**WebTransport (in-page)**: connects directly in the page; fine at normal report rates, uses more page CPU. Use it when the site blocks background workers (CSP) but still allows the connection; the worker-based options would fall back to Native Messaging there. Firefox asks a one-time local-network permission (\"Allow\") before the first in-page connection; tick \"Remember my choice for this site\". Reload pages after changing.\n**WebSocket**: fallback when WebTransport is not available (older Firefox).\n**Native Messaging**: the slowest but most compatible option; use when a site's security policy blocks the others." + }, + "settingsDataPlaneWs": { + "message": "WebSocket" + }, + "settingsDataPlaneWt": { + "message": "WebTransport" + }, + "settingsDataPlaneWtInpage": { + "message": "WebTransport (in-page)" + }, + "settingsDataPlaneNm": { + "message": "Native Messaging" + }, + "settingsDevicePickerMode": { + "message": "Device Picker Mode" + }, + "settingsDevicePickerModeDesc": { + "message": "**Modal**: shadow-DOM overlay on the page when requestDevice() is called (default).\n**Page Action**: URL-bar popup picker; the user clicks the icon to open it. Firefox only, Chromium falls back to modal.\n**Window**: separate popup window." + }, + "settingsDevicePickerModal": { + "message": "Modal (overlay)" + }, + "settingsDevicePickerPageAction": { + "message": "Page Action (URL bar popup)" + }, + "settingsDevicePickerWindow": { + "message": "Window (separate popup window)" + }, + "settingsWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "settingsWorkerPolyfillDesc": { + "message": "Injects the full WebHID API into Worker scripts (new Worker()). requestDevice() stays page-only, as the spec requires. Reload pages after changing." + }, + "settingsAllowActivationless": { + "message": "Allow activation-less requestDevice()" + }, + "settingsAllowActivationlessDesc": { + "message": "Skip the user-activation requirement for requestDevice() on this site. Spec deviation; workaround for sites that call it from an async handler. The chooser still requires explicit user selection. Reload pages after changing." + }, + "settingsLogLevel": { + "message": "Log Level" + }, + "settingsLogLevelDesc": { + "message": "Console verbosity: Error = errors only, Warn = +warnings, Info = +info, Debug = +debug (includes timing). Reload pages after changing." + }, + "pickerTitle": { + "message": "Select a HID Device" + }, + "pickerCancel": { + "message": "Cancel" + }, + "pickerConnect": { + "message": "Connect" + }, + "pickerNoDevices": { + "message": "No HID devices found" + }, + "pickerNoDaemon": { + "message": "Cannot reach the WebHID daemon. Check that it is installed and running, then try again." + }, + "pickerParseFailed": { + "message": "This device's report descriptor could not be parsed. Connecting and sending reports still works." + }, + "pickerNoMatch": { + "message": "No devices match the specified filters" + }, + "pickerNoPending": { + "message": "No pending device request" + }, + "pickerLoading": { + "message": "Loading devices..." + }, + "pickerInterfaces": { + "message": "$1 interfaces" + }, + "settingsWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "settingsWorkerSpawnModeDesc": { + "message": "**Shadow URL** (default on MV3): spawns the data worker via new Worker(location.href) with a StreamFilter intercepting the synthetic self-request; respects the page's security settings and changes nothing about the page. Fails if the server rejects it or if require-trusted-types-for is restrictive.\n**Blob + CSP rewrite** (default on MV2): spawns the worker from a blob: URL; relaxes the page's worker-src and connect-src directives. Works fully on MV2; on MV3 only a meta-tag CSP can be rewritten, so header-based policies still block it." + }, + "settingsWorkerSpawnShadow": { + "message": "Shadow URL" + }, + "settingsWorkerSpawnBlob": { + "message": "Blob + CSP rewrite" + }, + "segDataPlaneWs": { + "message": "WS" + }, + "segDataPlaneWt": { + "message": "WT" + }, + "segDataPlaneWtInpage": { + "message": "WTI" + }, + "segDataPlaneNm": { + "message": "NM" + }, + "segPickerModal": { + "message": "Modal" + }, + "segPickerPageAction": { + "message": "Page Action" + }, + "segPickerWindow": { + "message": "Window" + }, + "segSpawnShadow": { + "message": "Shadow" + }, + "segSpawnBlob": { + "message": "Blob" + }, + "devicesTitle": { + "message": "Paired Devices (all sites)" + }, + "devicesNone": { + "message": "No devices paired on any site." + } +} From df2eb84c19a67d985a3df81eaab9cda655e5ca3d Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 13:49:58 +0700 Subject: [PATCH 23/29] New translations messages.json (Swedish) [ci skip] chore: sync translations from Crowdin --- addon/_locales/sv_SE/messages.json | 281 +++++++++++++++++++++++++++++ 1 file changed, 281 insertions(+) create mode 100644 addon/_locales/sv_SE/messages.json diff --git a/addon/_locales/sv_SE/messages.json b/addon/_locales/sv_SE/messages.json new file mode 100644 index 00000000..d602377d --- /dev/null +++ b/addon/_locales/sv_SE/messages.json @@ -0,0 +1,281 @@ +{ + "extensionName": { + "message": "WebHID" + }, + "extensionDescription": { + "message": "WebHID API implementation for Firefox" + }, + "popupTitle": { + "message": "WebHID" + }, + "popupBack": { + "message": "Back" + }, + "popupPairedDevices": { + "message": "Paired Devices" + }, + "popupNoDevices": { + "message": "No devices paired for this site." + }, + "popupSettings": { + "message": "Settings" + }, + "popupDataPlane": { + "message": "Data Plane" + }, + "popupDataPlaneDesc": { + "message": "WebTransport (in a worker), WebTransport (in the page), WebSocket, or Native Messaging" + }, + "popupDataPlaneWs": { + "message": "WebSocket" + }, + "popupDataPlaneWt": { + "message": "WebTransport" + }, + "popupDataPlaneNm": { + "message": "Native Messaging" + }, + "popupDevicePickerMode": { + "message": "Device Picker Mode" + }, + "popupDevicePickerModeDesc": { + "message": "How the device chooser is presented on this site" + }, + "popupWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "popupWorkerPolyfillDesc": { + "message": "Inject WebHID API into Worker scripts on this site" + }, + "popupAllowActivationless": { + "message": "Allow requestDevice() without user gesture" + }, + "popupAllowActivationlessDesc": { + "message": "Skip the user-activation check when this site calls requestDevice(). Spec workaround for sites that call it asynchronously; the device chooser still requires explicit user selection." + }, + "popupWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "popupWorkerSpawnModeDesc": { + "message": "How the data worker is created on this site" + }, + "popupLogLevel": { + "message": "Log Level" + }, + "popupLogLevelDesc": { + "message": "Console output verbosity for this site" + }, + "logLevelError": { + "message": "Error" + }, + "logLevelWarn": { + "message": "Warn" + }, + "logLevelInfo": { + "message": "Info" + }, + "logLevelDebug": { + "message": "Debug" + }, + "popupDefaultNote": { + "message": "Changes here override defaults for this site." + }, + "popupGlobalSettings": { + "message": "Global settings →" + }, + "popupManageDevices": { + "message": "Manage all paired devices →" + }, + "popupNoSite": { + "message": "(no site)" + }, + "popupSiteOrigin": { + "message": "Site origin" + }, + "popupOriginList": { + "message": "Origins in this tab" + }, + "popupUnknown": { + "message": "Unknown" + }, + "popupPairedDevice": { + "message": "Paired device" + }, + "popupRevoke": { + "message": "Revoke" + }, + "popupDeviceCount": { + "message": "($1/$2)" + }, + "popupInPageWtWarning": { + "message": "In-page WebTransport may trigger a Firefox local-network permission prompt (\"wants to access other apps and services on this device\"). Tick \"Remember my choice for this site\" before clicking Allow, otherwise you will be asked again on every page load." + }, + "statusReady": { + "message": "Ready" + }, + "statusFallback": { + "message": "Fallback: $1" + }, + "statusOffline": { + "message": "Daemon offline" + }, + "statusOfflineGuidance": { + "message": "Check that the daemon is running (systemctl status webhid-daemon), that your user is in the webhid group, and that the udev rules are installed." + }, + "planeNameWS": { + "message": "WebSocket" + }, + "planeNameWT": { + "message": "WebTransport" + }, + "planeNameNM": { + "message": "Native Messaging" + }, + "infoPopoverMore": { + "message": "More info" + }, + "macPrivacyTitle": { + "message": "macOS Input Monitoring" + }, + "macPrivacyDesc": { + "message": "Allow the daemon to read HID devices: System Settings → Privacy & Security → Input Monitoring. If the link does not open the right tab, find it manually and enable the daemon." + }, + "macPrivacyOpen": { + "message": "Open Privacy Settings" + }, + "settingsTitle": { + "message": "WebHID Settings" + }, + "settingsDaemonAsNmHost": { + "message": "Daemon as NM host" + }, + "settingsDaemonAsNmHostDesc": { + "message": "Talk to the daemon directly over native messaging, skipping the forwarder and Unix socket. Requires the daemon_nm_host manifest and the daemon running as your user (with the udev rule). Lower latency, no root-daemon fallback. Reconnects automatically." + }, + "settingsDataPlane": { + "message": "Data Plane" + }, + "settingsDataPlaneDesc": { + "message": "**WebTransport** (default): the fastest option; runs in a background worker so pages stay smooth.\n**WebTransport (in-page)**: connects directly in the page; fine at normal report rates, uses more page CPU. Use it when the site blocks background workers (CSP) but still allows the connection; the worker-based options would fall back to Native Messaging there. Firefox asks a one-time local-network permission (\"Allow\") before the first in-page connection; tick \"Remember my choice for this site\". Reload pages after changing.\n**WebSocket**: fallback when WebTransport is not available (older Firefox).\n**Native Messaging**: the slowest but most compatible option; use when a site's security policy blocks the others." + }, + "settingsDataPlaneWs": { + "message": "WebSocket" + }, + "settingsDataPlaneWt": { + "message": "WebTransport" + }, + "settingsDataPlaneWtInpage": { + "message": "WebTransport (in-page)" + }, + "settingsDataPlaneNm": { + "message": "Native Messaging" + }, + "settingsDevicePickerMode": { + "message": "Device Picker Mode" + }, + "settingsDevicePickerModeDesc": { + "message": "**Modal**: shadow-DOM overlay on the page when requestDevice() is called (default).\n**Page Action**: URL-bar popup picker; the user clicks the icon to open it. Firefox only, Chromium falls back to modal.\n**Window**: separate popup window." + }, + "settingsDevicePickerModal": { + "message": "Modal (overlay)" + }, + "settingsDevicePickerPageAction": { + "message": "Page Action (URL bar popup)" + }, + "settingsDevicePickerWindow": { + "message": "Window (separate popup window)" + }, + "settingsWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "settingsWorkerPolyfillDesc": { + "message": "Injects the full WebHID API into Worker scripts (new Worker()). requestDevice() stays page-only, as the spec requires. Reload pages after changing." + }, + "settingsAllowActivationless": { + "message": "Allow activation-less requestDevice()" + }, + "settingsAllowActivationlessDesc": { + "message": "Skip the user-activation requirement for requestDevice() on this site. Spec deviation; workaround for sites that call it from an async handler. The chooser still requires explicit user selection. Reload pages after changing." + }, + "settingsLogLevel": { + "message": "Log Level" + }, + "settingsLogLevelDesc": { + "message": "Console verbosity: Error = errors only, Warn = +warnings, Info = +info, Debug = +debug (includes timing). Reload pages after changing." + }, + "pickerTitle": { + "message": "Select a HID Device" + }, + "pickerCancel": { + "message": "Cancel" + }, + "pickerConnect": { + "message": "Connect" + }, + "pickerNoDevices": { + "message": "No HID devices found" + }, + "pickerNoDaemon": { + "message": "Cannot reach the WebHID daemon. Check that it is installed and running, then try again." + }, + "pickerParseFailed": { + "message": "This device's report descriptor could not be parsed. Connecting and sending reports still works." + }, + "pickerNoMatch": { + "message": "No devices match the specified filters" + }, + "pickerNoPending": { + "message": "No pending device request" + }, + "pickerLoading": { + "message": "Loading devices..." + }, + "pickerInterfaces": { + "message": "$1 interfaces" + }, + "settingsWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "settingsWorkerSpawnModeDesc": { + "message": "**Shadow URL** (default on MV3): spawns the data worker via new Worker(location.href) with a StreamFilter intercepting the synthetic self-request; respects the page's security settings and changes nothing about the page. Fails if the server rejects it or if require-trusted-types-for is restrictive.\n**Blob + CSP rewrite** (default on MV2): spawns the worker from a blob: URL; relaxes the page's worker-src and connect-src directives. Works fully on MV2; on MV3 only a meta-tag CSP can be rewritten, so header-based policies still block it." + }, + "settingsWorkerSpawnShadow": { + "message": "Shadow URL" + }, + "settingsWorkerSpawnBlob": { + "message": "Blob + CSP rewrite" + }, + "segDataPlaneWs": { + "message": "WS" + }, + "segDataPlaneWt": { + "message": "WT" + }, + "segDataPlaneWtInpage": { + "message": "WTI" + }, + "segDataPlaneNm": { + "message": "NM" + }, + "segPickerModal": { + "message": "Modal" + }, + "segPickerPageAction": { + "message": "Page Action" + }, + "segPickerWindow": { + "message": "Window" + }, + "segSpawnShadow": { + "message": "Shadow" + }, + "segSpawnBlob": { + "message": "Blob" + }, + "devicesTitle": { + "message": "Paired Devices (all sites)" + }, + "devicesNone": { + "message": "No devices paired on any site." + } +} From 6cd565bc10a6384036a85df3473c679c87681d28 Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 13:49:59 +0700 Subject: [PATCH 24/29] New translations messages.json (Turkish) [ci skip] chore: sync translations from Crowdin --- addon/_locales/tr_TR/messages.json | 281 +++++++++++++++++++++++++++++ 1 file changed, 281 insertions(+) create mode 100644 addon/_locales/tr_TR/messages.json diff --git a/addon/_locales/tr_TR/messages.json b/addon/_locales/tr_TR/messages.json new file mode 100644 index 00000000..d602377d --- /dev/null +++ b/addon/_locales/tr_TR/messages.json @@ -0,0 +1,281 @@ +{ + "extensionName": { + "message": "WebHID" + }, + "extensionDescription": { + "message": "WebHID API implementation for Firefox" + }, + "popupTitle": { + "message": "WebHID" + }, + "popupBack": { + "message": "Back" + }, + "popupPairedDevices": { + "message": "Paired Devices" + }, + "popupNoDevices": { + "message": "No devices paired for this site." + }, + "popupSettings": { + "message": "Settings" + }, + "popupDataPlane": { + "message": "Data Plane" + }, + "popupDataPlaneDesc": { + "message": "WebTransport (in a worker), WebTransport (in the page), WebSocket, or Native Messaging" + }, + "popupDataPlaneWs": { + "message": "WebSocket" + }, + "popupDataPlaneWt": { + "message": "WebTransport" + }, + "popupDataPlaneNm": { + "message": "Native Messaging" + }, + "popupDevicePickerMode": { + "message": "Device Picker Mode" + }, + "popupDevicePickerModeDesc": { + "message": "How the device chooser is presented on this site" + }, + "popupWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "popupWorkerPolyfillDesc": { + "message": "Inject WebHID API into Worker scripts on this site" + }, + "popupAllowActivationless": { + "message": "Allow requestDevice() without user gesture" + }, + "popupAllowActivationlessDesc": { + "message": "Skip the user-activation check when this site calls requestDevice(). Spec workaround for sites that call it asynchronously; the device chooser still requires explicit user selection." + }, + "popupWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "popupWorkerSpawnModeDesc": { + "message": "How the data worker is created on this site" + }, + "popupLogLevel": { + "message": "Log Level" + }, + "popupLogLevelDesc": { + "message": "Console output verbosity for this site" + }, + "logLevelError": { + "message": "Error" + }, + "logLevelWarn": { + "message": "Warn" + }, + "logLevelInfo": { + "message": "Info" + }, + "logLevelDebug": { + "message": "Debug" + }, + "popupDefaultNote": { + "message": "Changes here override defaults for this site." + }, + "popupGlobalSettings": { + "message": "Global settings →" + }, + "popupManageDevices": { + "message": "Manage all paired devices →" + }, + "popupNoSite": { + "message": "(no site)" + }, + "popupSiteOrigin": { + "message": "Site origin" + }, + "popupOriginList": { + "message": "Origins in this tab" + }, + "popupUnknown": { + "message": "Unknown" + }, + "popupPairedDevice": { + "message": "Paired device" + }, + "popupRevoke": { + "message": "Revoke" + }, + "popupDeviceCount": { + "message": "($1/$2)" + }, + "popupInPageWtWarning": { + "message": "In-page WebTransport may trigger a Firefox local-network permission prompt (\"wants to access other apps and services on this device\"). Tick \"Remember my choice for this site\" before clicking Allow, otherwise you will be asked again on every page load." + }, + "statusReady": { + "message": "Ready" + }, + "statusFallback": { + "message": "Fallback: $1" + }, + "statusOffline": { + "message": "Daemon offline" + }, + "statusOfflineGuidance": { + "message": "Check that the daemon is running (systemctl status webhid-daemon), that your user is in the webhid group, and that the udev rules are installed." + }, + "planeNameWS": { + "message": "WebSocket" + }, + "planeNameWT": { + "message": "WebTransport" + }, + "planeNameNM": { + "message": "Native Messaging" + }, + "infoPopoverMore": { + "message": "More info" + }, + "macPrivacyTitle": { + "message": "macOS Input Monitoring" + }, + "macPrivacyDesc": { + "message": "Allow the daemon to read HID devices: System Settings → Privacy & Security → Input Monitoring. If the link does not open the right tab, find it manually and enable the daemon." + }, + "macPrivacyOpen": { + "message": "Open Privacy Settings" + }, + "settingsTitle": { + "message": "WebHID Settings" + }, + "settingsDaemonAsNmHost": { + "message": "Daemon as NM host" + }, + "settingsDaemonAsNmHostDesc": { + "message": "Talk to the daemon directly over native messaging, skipping the forwarder and Unix socket. Requires the daemon_nm_host manifest and the daemon running as your user (with the udev rule). Lower latency, no root-daemon fallback. Reconnects automatically." + }, + "settingsDataPlane": { + "message": "Data Plane" + }, + "settingsDataPlaneDesc": { + "message": "**WebTransport** (default): the fastest option; runs in a background worker so pages stay smooth.\n**WebTransport (in-page)**: connects directly in the page; fine at normal report rates, uses more page CPU. Use it when the site blocks background workers (CSP) but still allows the connection; the worker-based options would fall back to Native Messaging there. Firefox asks a one-time local-network permission (\"Allow\") before the first in-page connection; tick \"Remember my choice for this site\". Reload pages after changing.\n**WebSocket**: fallback when WebTransport is not available (older Firefox).\n**Native Messaging**: the slowest but most compatible option; use when a site's security policy blocks the others." + }, + "settingsDataPlaneWs": { + "message": "WebSocket" + }, + "settingsDataPlaneWt": { + "message": "WebTransport" + }, + "settingsDataPlaneWtInpage": { + "message": "WebTransport (in-page)" + }, + "settingsDataPlaneNm": { + "message": "Native Messaging" + }, + "settingsDevicePickerMode": { + "message": "Device Picker Mode" + }, + "settingsDevicePickerModeDesc": { + "message": "**Modal**: shadow-DOM overlay on the page when requestDevice() is called (default).\n**Page Action**: URL-bar popup picker; the user clicks the icon to open it. Firefox only, Chromium falls back to modal.\n**Window**: separate popup window." + }, + "settingsDevicePickerModal": { + "message": "Modal (overlay)" + }, + "settingsDevicePickerPageAction": { + "message": "Page Action (URL bar popup)" + }, + "settingsDevicePickerWindow": { + "message": "Window (separate popup window)" + }, + "settingsWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "settingsWorkerPolyfillDesc": { + "message": "Injects the full WebHID API into Worker scripts (new Worker()). requestDevice() stays page-only, as the spec requires. Reload pages after changing." + }, + "settingsAllowActivationless": { + "message": "Allow activation-less requestDevice()" + }, + "settingsAllowActivationlessDesc": { + "message": "Skip the user-activation requirement for requestDevice() on this site. Spec deviation; workaround for sites that call it from an async handler. The chooser still requires explicit user selection. Reload pages after changing." + }, + "settingsLogLevel": { + "message": "Log Level" + }, + "settingsLogLevelDesc": { + "message": "Console verbosity: Error = errors only, Warn = +warnings, Info = +info, Debug = +debug (includes timing). Reload pages after changing." + }, + "pickerTitle": { + "message": "Select a HID Device" + }, + "pickerCancel": { + "message": "Cancel" + }, + "pickerConnect": { + "message": "Connect" + }, + "pickerNoDevices": { + "message": "No HID devices found" + }, + "pickerNoDaemon": { + "message": "Cannot reach the WebHID daemon. Check that it is installed and running, then try again." + }, + "pickerParseFailed": { + "message": "This device's report descriptor could not be parsed. Connecting and sending reports still works." + }, + "pickerNoMatch": { + "message": "No devices match the specified filters" + }, + "pickerNoPending": { + "message": "No pending device request" + }, + "pickerLoading": { + "message": "Loading devices..." + }, + "pickerInterfaces": { + "message": "$1 interfaces" + }, + "settingsWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "settingsWorkerSpawnModeDesc": { + "message": "**Shadow URL** (default on MV3): spawns the data worker via new Worker(location.href) with a StreamFilter intercepting the synthetic self-request; respects the page's security settings and changes nothing about the page. Fails if the server rejects it or if require-trusted-types-for is restrictive.\n**Blob + CSP rewrite** (default on MV2): spawns the worker from a blob: URL; relaxes the page's worker-src and connect-src directives. Works fully on MV2; on MV3 only a meta-tag CSP can be rewritten, so header-based policies still block it." + }, + "settingsWorkerSpawnShadow": { + "message": "Shadow URL" + }, + "settingsWorkerSpawnBlob": { + "message": "Blob + CSP rewrite" + }, + "segDataPlaneWs": { + "message": "WS" + }, + "segDataPlaneWt": { + "message": "WT" + }, + "segDataPlaneWtInpage": { + "message": "WTI" + }, + "segDataPlaneNm": { + "message": "NM" + }, + "segPickerModal": { + "message": "Modal" + }, + "segPickerPageAction": { + "message": "Page Action" + }, + "segPickerWindow": { + "message": "Window" + }, + "segSpawnShadow": { + "message": "Shadow" + }, + "segSpawnBlob": { + "message": "Blob" + }, + "devicesTitle": { + "message": "Paired Devices (all sites)" + }, + "devicesNone": { + "message": "No devices paired on any site." + } +} From 71d05333af1a1053520474ab7e030026356b0de2 Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 13:50:00 +0700 Subject: [PATCH 25/29] New translations messages.json (Ukrainian) [ci skip] chore: sync translations from Crowdin --- addon/_locales/uk_UA/messages.json | 281 +++++++++++++++++++++++++++++ 1 file changed, 281 insertions(+) create mode 100644 addon/_locales/uk_UA/messages.json diff --git a/addon/_locales/uk_UA/messages.json b/addon/_locales/uk_UA/messages.json new file mode 100644 index 00000000..d602377d --- /dev/null +++ b/addon/_locales/uk_UA/messages.json @@ -0,0 +1,281 @@ +{ + "extensionName": { + "message": "WebHID" + }, + "extensionDescription": { + "message": "WebHID API implementation for Firefox" + }, + "popupTitle": { + "message": "WebHID" + }, + "popupBack": { + "message": "Back" + }, + "popupPairedDevices": { + "message": "Paired Devices" + }, + "popupNoDevices": { + "message": "No devices paired for this site." + }, + "popupSettings": { + "message": "Settings" + }, + "popupDataPlane": { + "message": "Data Plane" + }, + "popupDataPlaneDesc": { + "message": "WebTransport (in a worker), WebTransport (in the page), WebSocket, or Native Messaging" + }, + "popupDataPlaneWs": { + "message": "WebSocket" + }, + "popupDataPlaneWt": { + "message": "WebTransport" + }, + "popupDataPlaneNm": { + "message": "Native Messaging" + }, + "popupDevicePickerMode": { + "message": "Device Picker Mode" + }, + "popupDevicePickerModeDesc": { + "message": "How the device chooser is presented on this site" + }, + "popupWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "popupWorkerPolyfillDesc": { + "message": "Inject WebHID API into Worker scripts on this site" + }, + "popupAllowActivationless": { + "message": "Allow requestDevice() without user gesture" + }, + "popupAllowActivationlessDesc": { + "message": "Skip the user-activation check when this site calls requestDevice(). Spec workaround for sites that call it asynchronously; the device chooser still requires explicit user selection." + }, + "popupWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "popupWorkerSpawnModeDesc": { + "message": "How the data worker is created on this site" + }, + "popupLogLevel": { + "message": "Log Level" + }, + "popupLogLevelDesc": { + "message": "Console output verbosity for this site" + }, + "logLevelError": { + "message": "Error" + }, + "logLevelWarn": { + "message": "Warn" + }, + "logLevelInfo": { + "message": "Info" + }, + "logLevelDebug": { + "message": "Debug" + }, + "popupDefaultNote": { + "message": "Changes here override defaults for this site." + }, + "popupGlobalSettings": { + "message": "Global settings →" + }, + "popupManageDevices": { + "message": "Manage all paired devices →" + }, + "popupNoSite": { + "message": "(no site)" + }, + "popupSiteOrigin": { + "message": "Site origin" + }, + "popupOriginList": { + "message": "Origins in this tab" + }, + "popupUnknown": { + "message": "Unknown" + }, + "popupPairedDevice": { + "message": "Paired device" + }, + "popupRevoke": { + "message": "Revoke" + }, + "popupDeviceCount": { + "message": "($1/$2)" + }, + "popupInPageWtWarning": { + "message": "In-page WebTransport may trigger a Firefox local-network permission prompt (\"wants to access other apps and services on this device\"). Tick \"Remember my choice for this site\" before clicking Allow, otherwise you will be asked again on every page load." + }, + "statusReady": { + "message": "Ready" + }, + "statusFallback": { + "message": "Fallback: $1" + }, + "statusOffline": { + "message": "Daemon offline" + }, + "statusOfflineGuidance": { + "message": "Check that the daemon is running (systemctl status webhid-daemon), that your user is in the webhid group, and that the udev rules are installed." + }, + "planeNameWS": { + "message": "WebSocket" + }, + "planeNameWT": { + "message": "WebTransport" + }, + "planeNameNM": { + "message": "Native Messaging" + }, + "infoPopoverMore": { + "message": "More info" + }, + "macPrivacyTitle": { + "message": "macOS Input Monitoring" + }, + "macPrivacyDesc": { + "message": "Allow the daemon to read HID devices: System Settings → Privacy & Security → Input Monitoring. If the link does not open the right tab, find it manually and enable the daemon." + }, + "macPrivacyOpen": { + "message": "Open Privacy Settings" + }, + "settingsTitle": { + "message": "WebHID Settings" + }, + "settingsDaemonAsNmHost": { + "message": "Daemon as NM host" + }, + "settingsDaemonAsNmHostDesc": { + "message": "Talk to the daemon directly over native messaging, skipping the forwarder and Unix socket. Requires the daemon_nm_host manifest and the daemon running as your user (with the udev rule). Lower latency, no root-daemon fallback. Reconnects automatically." + }, + "settingsDataPlane": { + "message": "Data Plane" + }, + "settingsDataPlaneDesc": { + "message": "**WebTransport** (default): the fastest option; runs in a background worker so pages stay smooth.\n**WebTransport (in-page)**: connects directly in the page; fine at normal report rates, uses more page CPU. Use it when the site blocks background workers (CSP) but still allows the connection; the worker-based options would fall back to Native Messaging there. Firefox asks a one-time local-network permission (\"Allow\") before the first in-page connection; tick \"Remember my choice for this site\". Reload pages after changing.\n**WebSocket**: fallback when WebTransport is not available (older Firefox).\n**Native Messaging**: the slowest but most compatible option; use when a site's security policy blocks the others." + }, + "settingsDataPlaneWs": { + "message": "WebSocket" + }, + "settingsDataPlaneWt": { + "message": "WebTransport" + }, + "settingsDataPlaneWtInpage": { + "message": "WebTransport (in-page)" + }, + "settingsDataPlaneNm": { + "message": "Native Messaging" + }, + "settingsDevicePickerMode": { + "message": "Device Picker Mode" + }, + "settingsDevicePickerModeDesc": { + "message": "**Modal**: shadow-DOM overlay on the page when requestDevice() is called (default).\n**Page Action**: URL-bar popup picker; the user clicks the icon to open it. Firefox only, Chromium falls back to modal.\n**Window**: separate popup window." + }, + "settingsDevicePickerModal": { + "message": "Modal (overlay)" + }, + "settingsDevicePickerPageAction": { + "message": "Page Action (URL bar popup)" + }, + "settingsDevicePickerWindow": { + "message": "Window (separate popup window)" + }, + "settingsWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "settingsWorkerPolyfillDesc": { + "message": "Injects the full WebHID API into Worker scripts (new Worker()). requestDevice() stays page-only, as the spec requires. Reload pages after changing." + }, + "settingsAllowActivationless": { + "message": "Allow activation-less requestDevice()" + }, + "settingsAllowActivationlessDesc": { + "message": "Skip the user-activation requirement for requestDevice() on this site. Spec deviation; workaround for sites that call it from an async handler. The chooser still requires explicit user selection. Reload pages after changing." + }, + "settingsLogLevel": { + "message": "Log Level" + }, + "settingsLogLevelDesc": { + "message": "Console verbosity: Error = errors only, Warn = +warnings, Info = +info, Debug = +debug (includes timing). Reload pages after changing." + }, + "pickerTitle": { + "message": "Select a HID Device" + }, + "pickerCancel": { + "message": "Cancel" + }, + "pickerConnect": { + "message": "Connect" + }, + "pickerNoDevices": { + "message": "No HID devices found" + }, + "pickerNoDaemon": { + "message": "Cannot reach the WebHID daemon. Check that it is installed and running, then try again." + }, + "pickerParseFailed": { + "message": "This device's report descriptor could not be parsed. Connecting and sending reports still works." + }, + "pickerNoMatch": { + "message": "No devices match the specified filters" + }, + "pickerNoPending": { + "message": "No pending device request" + }, + "pickerLoading": { + "message": "Loading devices..." + }, + "pickerInterfaces": { + "message": "$1 interfaces" + }, + "settingsWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "settingsWorkerSpawnModeDesc": { + "message": "**Shadow URL** (default on MV3): spawns the data worker via new Worker(location.href) with a StreamFilter intercepting the synthetic self-request; respects the page's security settings and changes nothing about the page. Fails if the server rejects it or if require-trusted-types-for is restrictive.\n**Blob + CSP rewrite** (default on MV2): spawns the worker from a blob: URL; relaxes the page's worker-src and connect-src directives. Works fully on MV2; on MV3 only a meta-tag CSP can be rewritten, so header-based policies still block it." + }, + "settingsWorkerSpawnShadow": { + "message": "Shadow URL" + }, + "settingsWorkerSpawnBlob": { + "message": "Blob + CSP rewrite" + }, + "segDataPlaneWs": { + "message": "WS" + }, + "segDataPlaneWt": { + "message": "WT" + }, + "segDataPlaneWtInpage": { + "message": "WTI" + }, + "segDataPlaneNm": { + "message": "NM" + }, + "segPickerModal": { + "message": "Modal" + }, + "segPickerPageAction": { + "message": "Page Action" + }, + "segPickerWindow": { + "message": "Window" + }, + "segSpawnShadow": { + "message": "Shadow" + }, + "segSpawnBlob": { + "message": "Blob" + }, + "devicesTitle": { + "message": "Paired Devices (all sites)" + }, + "devicesNone": { + "message": "No devices paired on any site." + } +} From a71207c92bece1016f0174e4cdfe53b26cc3279d Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 13:50:01 +0700 Subject: [PATCH 26/29] New translations messages.json (Chinese Simplified) [ci skip] chore: sync translations from Crowdin --- addon/_locales/zh_CN/messages.json | 281 +++++++++++++++++++++++++++++ 1 file changed, 281 insertions(+) create mode 100644 addon/_locales/zh_CN/messages.json diff --git a/addon/_locales/zh_CN/messages.json b/addon/_locales/zh_CN/messages.json new file mode 100644 index 00000000..d602377d --- /dev/null +++ b/addon/_locales/zh_CN/messages.json @@ -0,0 +1,281 @@ +{ + "extensionName": { + "message": "WebHID" + }, + "extensionDescription": { + "message": "WebHID API implementation for Firefox" + }, + "popupTitle": { + "message": "WebHID" + }, + "popupBack": { + "message": "Back" + }, + "popupPairedDevices": { + "message": "Paired Devices" + }, + "popupNoDevices": { + "message": "No devices paired for this site." + }, + "popupSettings": { + "message": "Settings" + }, + "popupDataPlane": { + "message": "Data Plane" + }, + "popupDataPlaneDesc": { + "message": "WebTransport (in a worker), WebTransport (in the page), WebSocket, or Native Messaging" + }, + "popupDataPlaneWs": { + "message": "WebSocket" + }, + "popupDataPlaneWt": { + "message": "WebTransport" + }, + "popupDataPlaneNm": { + "message": "Native Messaging" + }, + "popupDevicePickerMode": { + "message": "Device Picker Mode" + }, + "popupDevicePickerModeDesc": { + "message": "How the device chooser is presented on this site" + }, + "popupWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "popupWorkerPolyfillDesc": { + "message": "Inject WebHID API into Worker scripts on this site" + }, + "popupAllowActivationless": { + "message": "Allow requestDevice() without user gesture" + }, + "popupAllowActivationlessDesc": { + "message": "Skip the user-activation check when this site calls requestDevice(). Spec workaround for sites that call it asynchronously; the device chooser still requires explicit user selection." + }, + "popupWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "popupWorkerSpawnModeDesc": { + "message": "How the data worker is created on this site" + }, + "popupLogLevel": { + "message": "Log Level" + }, + "popupLogLevelDesc": { + "message": "Console output verbosity for this site" + }, + "logLevelError": { + "message": "Error" + }, + "logLevelWarn": { + "message": "Warn" + }, + "logLevelInfo": { + "message": "Info" + }, + "logLevelDebug": { + "message": "Debug" + }, + "popupDefaultNote": { + "message": "Changes here override defaults for this site." + }, + "popupGlobalSettings": { + "message": "Global settings →" + }, + "popupManageDevices": { + "message": "Manage all paired devices →" + }, + "popupNoSite": { + "message": "(no site)" + }, + "popupSiteOrigin": { + "message": "Site origin" + }, + "popupOriginList": { + "message": "Origins in this tab" + }, + "popupUnknown": { + "message": "Unknown" + }, + "popupPairedDevice": { + "message": "Paired device" + }, + "popupRevoke": { + "message": "Revoke" + }, + "popupDeviceCount": { + "message": "($1/$2)" + }, + "popupInPageWtWarning": { + "message": "In-page WebTransport may trigger a Firefox local-network permission prompt (\"wants to access other apps and services on this device\"). Tick \"Remember my choice for this site\" before clicking Allow, otherwise you will be asked again on every page load." + }, + "statusReady": { + "message": "Ready" + }, + "statusFallback": { + "message": "Fallback: $1" + }, + "statusOffline": { + "message": "Daemon offline" + }, + "statusOfflineGuidance": { + "message": "Check that the daemon is running (systemctl status webhid-daemon), that your user is in the webhid group, and that the udev rules are installed." + }, + "planeNameWS": { + "message": "WebSocket" + }, + "planeNameWT": { + "message": "WebTransport" + }, + "planeNameNM": { + "message": "Native Messaging" + }, + "infoPopoverMore": { + "message": "More info" + }, + "macPrivacyTitle": { + "message": "macOS Input Monitoring" + }, + "macPrivacyDesc": { + "message": "Allow the daemon to read HID devices: System Settings → Privacy & Security → Input Monitoring. If the link does not open the right tab, find it manually and enable the daemon." + }, + "macPrivacyOpen": { + "message": "Open Privacy Settings" + }, + "settingsTitle": { + "message": "WebHID Settings" + }, + "settingsDaemonAsNmHost": { + "message": "Daemon as NM host" + }, + "settingsDaemonAsNmHostDesc": { + "message": "Talk to the daemon directly over native messaging, skipping the forwarder and Unix socket. Requires the daemon_nm_host manifest and the daemon running as your user (with the udev rule). Lower latency, no root-daemon fallback. Reconnects automatically." + }, + "settingsDataPlane": { + "message": "Data Plane" + }, + "settingsDataPlaneDesc": { + "message": "**WebTransport** (default): the fastest option; runs in a background worker so pages stay smooth.\n**WebTransport (in-page)**: connects directly in the page; fine at normal report rates, uses more page CPU. Use it when the site blocks background workers (CSP) but still allows the connection; the worker-based options would fall back to Native Messaging there. Firefox asks a one-time local-network permission (\"Allow\") before the first in-page connection; tick \"Remember my choice for this site\". Reload pages after changing.\n**WebSocket**: fallback when WebTransport is not available (older Firefox).\n**Native Messaging**: the slowest but most compatible option; use when a site's security policy blocks the others." + }, + "settingsDataPlaneWs": { + "message": "WebSocket" + }, + "settingsDataPlaneWt": { + "message": "WebTransport" + }, + "settingsDataPlaneWtInpage": { + "message": "WebTransport (in-page)" + }, + "settingsDataPlaneNm": { + "message": "Native Messaging" + }, + "settingsDevicePickerMode": { + "message": "Device Picker Mode" + }, + "settingsDevicePickerModeDesc": { + "message": "**Modal**: shadow-DOM overlay on the page when requestDevice() is called (default).\n**Page Action**: URL-bar popup picker; the user clicks the icon to open it. Firefox only, Chromium falls back to modal.\n**Window**: separate popup window." + }, + "settingsDevicePickerModal": { + "message": "Modal (overlay)" + }, + "settingsDevicePickerPageAction": { + "message": "Page Action (URL bar popup)" + }, + "settingsDevicePickerWindow": { + "message": "Window (separate popup window)" + }, + "settingsWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "settingsWorkerPolyfillDesc": { + "message": "Injects the full WebHID API into Worker scripts (new Worker()). requestDevice() stays page-only, as the spec requires. Reload pages after changing." + }, + "settingsAllowActivationless": { + "message": "Allow activation-less requestDevice()" + }, + "settingsAllowActivationlessDesc": { + "message": "Skip the user-activation requirement for requestDevice() on this site. Spec deviation; workaround for sites that call it from an async handler. The chooser still requires explicit user selection. Reload pages after changing." + }, + "settingsLogLevel": { + "message": "Log Level" + }, + "settingsLogLevelDesc": { + "message": "Console verbosity: Error = errors only, Warn = +warnings, Info = +info, Debug = +debug (includes timing). Reload pages after changing." + }, + "pickerTitle": { + "message": "Select a HID Device" + }, + "pickerCancel": { + "message": "Cancel" + }, + "pickerConnect": { + "message": "Connect" + }, + "pickerNoDevices": { + "message": "No HID devices found" + }, + "pickerNoDaemon": { + "message": "Cannot reach the WebHID daemon. Check that it is installed and running, then try again." + }, + "pickerParseFailed": { + "message": "This device's report descriptor could not be parsed. Connecting and sending reports still works." + }, + "pickerNoMatch": { + "message": "No devices match the specified filters" + }, + "pickerNoPending": { + "message": "No pending device request" + }, + "pickerLoading": { + "message": "Loading devices..." + }, + "pickerInterfaces": { + "message": "$1 interfaces" + }, + "settingsWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "settingsWorkerSpawnModeDesc": { + "message": "**Shadow URL** (default on MV3): spawns the data worker via new Worker(location.href) with a StreamFilter intercepting the synthetic self-request; respects the page's security settings and changes nothing about the page. Fails if the server rejects it or if require-trusted-types-for is restrictive.\n**Blob + CSP rewrite** (default on MV2): spawns the worker from a blob: URL; relaxes the page's worker-src and connect-src directives. Works fully on MV2; on MV3 only a meta-tag CSP can be rewritten, so header-based policies still block it." + }, + "settingsWorkerSpawnShadow": { + "message": "Shadow URL" + }, + "settingsWorkerSpawnBlob": { + "message": "Blob + CSP rewrite" + }, + "segDataPlaneWs": { + "message": "WS" + }, + "segDataPlaneWt": { + "message": "WT" + }, + "segDataPlaneWtInpage": { + "message": "WTI" + }, + "segDataPlaneNm": { + "message": "NM" + }, + "segPickerModal": { + "message": "Modal" + }, + "segPickerPageAction": { + "message": "Page Action" + }, + "segPickerWindow": { + "message": "Window" + }, + "segSpawnShadow": { + "message": "Shadow" + }, + "segSpawnBlob": { + "message": "Blob" + }, + "devicesTitle": { + "message": "Paired Devices (all sites)" + }, + "devicesNone": { + "message": "No devices paired on any site." + } +} From d915b8198be81f1b28cc5c1099332d010024ed3f Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 13:50:02 +0700 Subject: [PATCH 27/29] New translations messages.json (Chinese Traditional) [ci skip] chore: sync translations from Crowdin --- addon/_locales/zh_TW/messages.json | 281 +++++++++++++++++++++++++++++ 1 file changed, 281 insertions(+) create mode 100644 addon/_locales/zh_TW/messages.json diff --git a/addon/_locales/zh_TW/messages.json b/addon/_locales/zh_TW/messages.json new file mode 100644 index 00000000..d602377d --- /dev/null +++ b/addon/_locales/zh_TW/messages.json @@ -0,0 +1,281 @@ +{ + "extensionName": { + "message": "WebHID" + }, + "extensionDescription": { + "message": "WebHID API implementation for Firefox" + }, + "popupTitle": { + "message": "WebHID" + }, + "popupBack": { + "message": "Back" + }, + "popupPairedDevices": { + "message": "Paired Devices" + }, + "popupNoDevices": { + "message": "No devices paired for this site." + }, + "popupSettings": { + "message": "Settings" + }, + "popupDataPlane": { + "message": "Data Plane" + }, + "popupDataPlaneDesc": { + "message": "WebTransport (in a worker), WebTransport (in the page), WebSocket, or Native Messaging" + }, + "popupDataPlaneWs": { + "message": "WebSocket" + }, + "popupDataPlaneWt": { + "message": "WebTransport" + }, + "popupDataPlaneNm": { + "message": "Native Messaging" + }, + "popupDevicePickerMode": { + "message": "Device Picker Mode" + }, + "popupDevicePickerModeDesc": { + "message": "How the device chooser is presented on this site" + }, + "popupWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "popupWorkerPolyfillDesc": { + "message": "Inject WebHID API into Worker scripts on this site" + }, + "popupAllowActivationless": { + "message": "Allow requestDevice() without user gesture" + }, + "popupAllowActivationlessDesc": { + "message": "Skip the user-activation check when this site calls requestDevice(). Spec workaround for sites that call it asynchronously; the device chooser still requires explicit user selection." + }, + "popupWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "popupWorkerSpawnModeDesc": { + "message": "How the data worker is created on this site" + }, + "popupLogLevel": { + "message": "Log Level" + }, + "popupLogLevelDesc": { + "message": "Console output verbosity for this site" + }, + "logLevelError": { + "message": "Error" + }, + "logLevelWarn": { + "message": "Warn" + }, + "logLevelInfo": { + "message": "Info" + }, + "logLevelDebug": { + "message": "Debug" + }, + "popupDefaultNote": { + "message": "Changes here override defaults for this site." + }, + "popupGlobalSettings": { + "message": "Global settings →" + }, + "popupManageDevices": { + "message": "Manage all paired devices →" + }, + "popupNoSite": { + "message": "(no site)" + }, + "popupSiteOrigin": { + "message": "Site origin" + }, + "popupOriginList": { + "message": "Origins in this tab" + }, + "popupUnknown": { + "message": "Unknown" + }, + "popupPairedDevice": { + "message": "Paired device" + }, + "popupRevoke": { + "message": "Revoke" + }, + "popupDeviceCount": { + "message": "($1/$2)" + }, + "popupInPageWtWarning": { + "message": "In-page WebTransport may trigger a Firefox local-network permission prompt (\"wants to access other apps and services on this device\"). Tick \"Remember my choice for this site\" before clicking Allow, otherwise you will be asked again on every page load." + }, + "statusReady": { + "message": "Ready" + }, + "statusFallback": { + "message": "Fallback: $1" + }, + "statusOffline": { + "message": "Daemon offline" + }, + "statusOfflineGuidance": { + "message": "Check that the daemon is running (systemctl status webhid-daemon), that your user is in the webhid group, and that the udev rules are installed." + }, + "planeNameWS": { + "message": "WebSocket" + }, + "planeNameWT": { + "message": "WebTransport" + }, + "planeNameNM": { + "message": "Native Messaging" + }, + "infoPopoverMore": { + "message": "More info" + }, + "macPrivacyTitle": { + "message": "macOS Input Monitoring" + }, + "macPrivacyDesc": { + "message": "Allow the daemon to read HID devices: System Settings → Privacy & Security → Input Monitoring. If the link does not open the right tab, find it manually and enable the daemon." + }, + "macPrivacyOpen": { + "message": "Open Privacy Settings" + }, + "settingsTitle": { + "message": "WebHID Settings" + }, + "settingsDaemonAsNmHost": { + "message": "Daemon as NM host" + }, + "settingsDaemonAsNmHostDesc": { + "message": "Talk to the daemon directly over native messaging, skipping the forwarder and Unix socket. Requires the daemon_nm_host manifest and the daemon running as your user (with the udev rule). Lower latency, no root-daemon fallback. Reconnects automatically." + }, + "settingsDataPlane": { + "message": "Data Plane" + }, + "settingsDataPlaneDesc": { + "message": "**WebTransport** (default): the fastest option; runs in a background worker so pages stay smooth.\n**WebTransport (in-page)**: connects directly in the page; fine at normal report rates, uses more page CPU. Use it when the site blocks background workers (CSP) but still allows the connection; the worker-based options would fall back to Native Messaging there. Firefox asks a one-time local-network permission (\"Allow\") before the first in-page connection; tick \"Remember my choice for this site\". Reload pages after changing.\n**WebSocket**: fallback when WebTransport is not available (older Firefox).\n**Native Messaging**: the slowest but most compatible option; use when a site's security policy blocks the others." + }, + "settingsDataPlaneWs": { + "message": "WebSocket" + }, + "settingsDataPlaneWt": { + "message": "WebTransport" + }, + "settingsDataPlaneWtInpage": { + "message": "WebTransport (in-page)" + }, + "settingsDataPlaneNm": { + "message": "Native Messaging" + }, + "settingsDevicePickerMode": { + "message": "Device Picker Mode" + }, + "settingsDevicePickerModeDesc": { + "message": "**Modal**: shadow-DOM overlay on the page when requestDevice() is called (default).\n**Page Action**: URL-bar popup picker; the user clicks the icon to open it. Firefox only, Chromium falls back to modal.\n**Window**: separate popup window." + }, + "settingsDevicePickerModal": { + "message": "Modal (overlay)" + }, + "settingsDevicePickerPageAction": { + "message": "Page Action (URL bar popup)" + }, + "settingsDevicePickerWindow": { + "message": "Window (separate popup window)" + }, + "settingsWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "settingsWorkerPolyfillDesc": { + "message": "Injects the full WebHID API into Worker scripts (new Worker()). requestDevice() stays page-only, as the spec requires. Reload pages after changing." + }, + "settingsAllowActivationless": { + "message": "Allow activation-less requestDevice()" + }, + "settingsAllowActivationlessDesc": { + "message": "Skip the user-activation requirement for requestDevice() on this site. Spec deviation; workaround for sites that call it from an async handler. The chooser still requires explicit user selection. Reload pages after changing." + }, + "settingsLogLevel": { + "message": "Log Level" + }, + "settingsLogLevelDesc": { + "message": "Console verbosity: Error = errors only, Warn = +warnings, Info = +info, Debug = +debug (includes timing). Reload pages after changing." + }, + "pickerTitle": { + "message": "Select a HID Device" + }, + "pickerCancel": { + "message": "Cancel" + }, + "pickerConnect": { + "message": "Connect" + }, + "pickerNoDevices": { + "message": "No HID devices found" + }, + "pickerNoDaemon": { + "message": "Cannot reach the WebHID daemon. Check that it is installed and running, then try again." + }, + "pickerParseFailed": { + "message": "This device's report descriptor could not be parsed. Connecting and sending reports still works." + }, + "pickerNoMatch": { + "message": "No devices match the specified filters" + }, + "pickerNoPending": { + "message": "No pending device request" + }, + "pickerLoading": { + "message": "Loading devices..." + }, + "pickerInterfaces": { + "message": "$1 interfaces" + }, + "settingsWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "settingsWorkerSpawnModeDesc": { + "message": "**Shadow URL** (default on MV3): spawns the data worker via new Worker(location.href) with a StreamFilter intercepting the synthetic self-request; respects the page's security settings and changes nothing about the page. Fails if the server rejects it or if require-trusted-types-for is restrictive.\n**Blob + CSP rewrite** (default on MV2): spawns the worker from a blob: URL; relaxes the page's worker-src and connect-src directives. Works fully on MV2; on MV3 only a meta-tag CSP can be rewritten, so header-based policies still block it." + }, + "settingsWorkerSpawnShadow": { + "message": "Shadow URL" + }, + "settingsWorkerSpawnBlob": { + "message": "Blob + CSP rewrite" + }, + "segDataPlaneWs": { + "message": "WS" + }, + "segDataPlaneWt": { + "message": "WT" + }, + "segDataPlaneWtInpage": { + "message": "WTI" + }, + "segDataPlaneNm": { + "message": "NM" + }, + "segPickerModal": { + "message": "Modal" + }, + "segPickerPageAction": { + "message": "Page Action" + }, + "segPickerWindow": { + "message": "Window" + }, + "segSpawnShadow": { + "message": "Shadow" + }, + "segSpawnBlob": { + "message": "Blob" + }, + "devicesTitle": { + "message": "Paired Devices (all sites)" + }, + "devicesNone": { + "message": "No devices paired on any site." + } +} From 96fa071675f8ecae09508d3e969008d03745397b Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 13:50:04 +0700 Subject: [PATCH 28/29] New translations messages.json (Vietnamese) [ci skip] chore: sync translations from Crowdin --- addon/_locales/vi_VN/messages.json | 281 +++++++++++++++++++++++++++++ 1 file changed, 281 insertions(+) create mode 100644 addon/_locales/vi_VN/messages.json diff --git a/addon/_locales/vi_VN/messages.json b/addon/_locales/vi_VN/messages.json new file mode 100644 index 00000000..eb1730d8 --- /dev/null +++ b/addon/_locales/vi_VN/messages.json @@ -0,0 +1,281 @@ +{ + "extensionName": { + "message": "WebHID" + }, + "extensionDescription": { + "message": "WebHID API đầy đủ nhất dành cho Firefox" + }, + "popupTitle": { + "message": "WebHID" + }, + "popupBack": { + "message": "Quay lại" + }, + "popupPairedDevices": { + "message": "Thiết bị đã cho phép" + }, + "popupNoDevices": { + "message": "Chưa có thiết bị nào được cho phép trên trang này." + }, + "popupSettings": { + "message": "Cài đặt" + }, + "popupDataPlane": { + "message": "Kênh dữ liệu" + }, + "popupDataPlaneDesc": { + "message": "WebTransport (trong worker), WebTransport (trong trang), WebSocket, hoặc Native Messaging" + }, + "popupDataPlaneWs": { + "message": "WebSocket" + }, + "popupDataPlaneWt": { + "message": "WebTransport" + }, + "popupDataPlaneNm": { + "message": "Native Messaging" + }, + "popupDevicePickerMode": { + "message": "Chế độ chọn thiết bị" + }, + "popupDevicePickerModeDesc": { + "message": "Cách hiển thị bộ chọn thiết bị trên trang này" + }, + "popupWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "popupWorkerPolyfillDesc": { + "message": "Cho phép WebHID API dùng được trên Worker scripts của trang này" + }, + "popupAllowActivationless": { + "message": "Cho phép requestDevice() không cần thao tác người dùng" + }, + "popupAllowActivationlessDesc": { + "message": "Bỏ qua kiểm tra user activation khi trang này gọi requestDevice(). Workaround cho trang gọi bất đồng bộ; bộ chọn thiết bị vẫn yêu cầu người dùng chọn rõ ràng." + }, + "popupWorkerSpawnMode": { + "message": "Chế độ tạo Worker" + }, + "popupWorkerSpawnModeDesc": { + "message": "Cách tạo data worker trên trang này" + }, + "popupLogLevel": { + "message": "Mức độ log" + }, + "popupLogLevelDesc": { + "message": "Độ chi tiết console output cho trang này" + }, + "logLevelError": { + "message": "Lỗi" + }, + "logLevelWarn": { + "message": "Cảnh báo" + }, + "logLevelInfo": { + "message": "Thông tin" + }, + "logLevelDebug": { + "message": "Gỡ lỗi" + }, + "popupDefaultNote": { + "message": "Thay đổi ở đây ghi đè mặc định cho trang này." + }, + "popupGlobalSettings": { + "message": "Cài đặt chung →" + }, + "popupManageDevices": { + "message": "Quản lý tất cả thiết bị đã ghép →" + }, + "popupNoSite": { + "message": "(không có trang)" + }, + "popupSiteOrigin": { + "message": "Origin của trang" + }, + "popupOriginList": { + "message": "Các origin trong tab này" + }, + "popupUnknown": { + "message": "Không rõ" + }, + "popupPairedDevice": { + "message": "Thiết bị đã cho phép" + }, + "popupRevoke": { + "message": "Thu hồi" + }, + "popupDeviceCount": { + "message": "($1/$2)" + }, + "popupInPageWtWarning": { + "message": "WebTransport trong trang có thể hiện cảnh báo quyền mạng cục bộ của Firefox (\"wants to access other apps and services on this device\"). Hãy tick \"Remember my choice for this site\" trước khi bấm Allow, nếu không sẽ bị hỏi lại mỗi lần tải trang." + }, + "statusReady": { + "message": "Sẵn sàng" + }, + "statusFallback": { + "message": "Fallback: $1" + }, + "statusOffline": { + "message": "Daemon ngoại tuyến" + }, + "statusOfflineGuidance": { + "message": "Kiểm tra daemon đang chạy (systemctl status webhid-daemon), user của bạn nằm trong nhóm webhid, và udev rules đã cài." + }, + "planeNameWS": { + "message": "WebSocket" + }, + "planeNameWT": { + "message": "WebTransport" + }, + "planeNameNM": { + "message": "Native Messaging" + }, + "infoPopoverMore": { + "message": "Thông tin thêm" + }, + "macPrivacyTitle": { + "message": "Input Monitoring trên macOS" + }, + "macPrivacyDesc": { + "message": "Cho phép daemon đọc thiết bị HID: System Settings → Privacy & Security → Input Monitoring. Nếu link không mở đúng tab, hãy tìm thủ công và bật cho daemon." + }, + "macPrivacyOpen": { + "message": "Mở Privacy Settings" + }, + "settingsTitle": { + "message": "Cài đặt WebHID" + }, + "settingsDaemonAsNmHost": { + "message": "Daemon as NM host" + }, + "settingsDaemonAsNmHostDesc": { + "message": "Nói chuyện trực tiếp với daemon qua native messaging, bỏ qua forwarder và Unix socket. Yêu cầu manifest daemon_nm_host và daemon chạy dưới user của bạn (kèm udev rule). Độ trễ thấp hơn, không có fallback daemon root. Tự kết nối lại." + }, + "settingsDataPlane": { + "message": "Kênh dữ liệu" + }, + "settingsDataPlaneDesc": { + "message": "**WebTransport** (mặc định): tùy chọn nhanh nhất; chạy trong background worker nên trang mượt hơn.\n**WebTransport (in-page)**: kết nối trực tiếp trong trang; ổn ở tốc độ report thường, dùng nhiều CPU trang hơn. Dùng khi site chặn background worker (CSP) nhưng vẫn cho phép kết nối; các tùy chọn dùng worker sẽ fallback sang Native Messaging. Firefox hỏi quyền local-network (\"Allow\") một lần trước kết nối in-page đầu tiên; tick \"Remember my choice for this site\". Reload trang sau khi thay đổi.\n**WebSocket**: fallback khi không có WebTransport (Firefox cũ).\n**Native Messaging**: tùy chọn chậm nhất nhưng tương thích nhất; dùng khi chính sách bảo mật của site chặn các tùy chọn khác." + }, + "settingsDataPlaneWs": { + "message": "WebSocket" + }, + "settingsDataPlaneWt": { + "message": "WebTransport" + }, + "settingsDataPlaneWtInpage": { + "message": "WebTransport (in-page)" + }, + "settingsDataPlaneNm": { + "message": "Native Messaging" + }, + "settingsDevicePickerMode": { + "message": "Chế độ chọn thiết bị" + }, + "settingsDevicePickerModeDesc": { + "message": "**Modal**: overlay shadow DOM trên trang khi gọi requestDevice() (mặc định).\n**Page Action**: picker dạng popup ở thanh URL; người dùng bấm icon để mở. Chỉ Firefox, Chromium fallback về modal.\n**Window**: cửa sổ popup riêng." + }, + "settingsDevicePickerModal": { + "message": "Modal (overlay)" + }, + "settingsDevicePickerPageAction": { + "message": "Page Action (popup icon trên thanh URL)" + }, + "settingsDevicePickerWindow": { + "message": "Cửa sổ (popup riêng)" + }, + "settingsWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "settingsWorkerPolyfillDesc": { + "message": "Chèn đầy đủ WebHID API vào Worker scripts (new Worker()). requestDevice() chỉ khả dụng trên trang, đúng theo spec. Reload trang sau khi thay đổi." + }, + "settingsAllowActivationless": { + "message": "Cho phép requestDevice() không cần user activation" + }, + "settingsAllowActivationlessDesc": { + "message": "Bỏ qua yêu cầu user activation cho requestDevice() trên trang này. Sai lệch spec; workaround cho trang gọi từ handler bất đồng bộ. Bộ chọn vẫn yêu cầu người dùng chọn rõ ràng. Reload trang sau khi thay đổi." + }, + "settingsLogLevel": { + "message": "Mức độ log" + }, + "settingsLogLevelDesc": { + "message": "Độ chi tiết console: Error = chỉ lỗi, Warn = +cảnh báo, Info = +thông tin, Debug = +debug (bao gồm timing). Reload trang sau khi thay đổi." + }, + "pickerTitle": { + "message": "Chọn thiết bị" + }, + "pickerCancel": { + "message": "Hủy" + }, + "pickerConnect": { + "message": "Kết nối" + }, + "pickerNoDevices": { + "message": "Không tìm thấy thiết bị" + }, + "pickerNoDaemon": { + "message": "Không thể kết nối tới daemon WebHID. Kiểm tra daemon đã được cài đặt và đang chạy, rồi thử lại." + }, + "pickerParseFailed": { + "message": "Không thể phân tích report descriptor của thiết bị này. Kết nối và gửi report vẫn hoạt động bình thường." + }, + "pickerNoMatch": { + "message": "Không có thiết bị khớp với bộ lọc" + }, + "pickerNoPending": { + "message": "Không có yêu cầu thiết bị đang chờ" + }, + "pickerLoading": { + "message": "Đang tải thiết bị..." + }, + "pickerInterfaces": { + "message": "$1 giao diện" + }, + "settingsWorkerSpawnMode": { + "message": "Chế độ tạo Worker" + }, + "settingsWorkerSpawnModeDesc": { + "message": "**Shadow URL** (mặc định trên MV3): tạo data worker qua new Worker(location.href) với StreamFilter chặn request tự tham chiếu; tôn trọng cài đặt bảo mật của trang và không thay đổi gì trên trang. Thất bại nếu server từ chối hoặc require-trusted-types-for hạn chế.\n**Blob + CSP rewrite** (mặc định trên MV2): tạo worker từ URL blob:; nới lỏng directive worker-src và connect-src của trang. Hoạt động đầy đủ trên MV2; trên MV3 chỉ rewrite được CSP khai báo trong meta tag, nên CSP qua header vẫn chặn." + }, + "settingsWorkerSpawnShadow": { + "message": "Shadow URL" + }, + "settingsWorkerSpawnBlob": { + "message": "Blob + ghi đè CSP" + }, + "segDataPlaneWs": { + "message": "WS" + }, + "segDataPlaneWt": { + "message": "WT" + }, + "segDataPlaneWtInpage": { + "message": "WTI" + }, + "segDataPlaneNm": { + "message": "NM" + }, + "segPickerModal": { + "message": "Modal" + }, + "segPickerPageAction": { + "message": "Page Action" + }, + "segPickerWindow": { + "message": "Window" + }, + "segSpawnShadow": { + "message": "Shadow" + }, + "segSpawnBlob": { + "message": "Blob" + }, + "devicesTitle": { + "message": "Thiết bị đã ghép (mọi trang)" + }, + "devicesNone": { + "message": "Chưa có thiết bị nào được ghép." + } +} From 9b063554e25c85b9aebd1a2b52d52b7eacf29566 Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 13:50:05 +0700 Subject: [PATCH 29/29] New translations messages.json (Portuguese, Brazilian) [ci skip] chore: sync translations from Crowdin --- addon/_locales/pt_BR/messages.json | 281 +++++++++++++++++++++++++++++ 1 file changed, 281 insertions(+) create mode 100644 addon/_locales/pt_BR/messages.json diff --git a/addon/_locales/pt_BR/messages.json b/addon/_locales/pt_BR/messages.json new file mode 100644 index 00000000..d602377d --- /dev/null +++ b/addon/_locales/pt_BR/messages.json @@ -0,0 +1,281 @@ +{ + "extensionName": { + "message": "WebHID" + }, + "extensionDescription": { + "message": "WebHID API implementation for Firefox" + }, + "popupTitle": { + "message": "WebHID" + }, + "popupBack": { + "message": "Back" + }, + "popupPairedDevices": { + "message": "Paired Devices" + }, + "popupNoDevices": { + "message": "No devices paired for this site." + }, + "popupSettings": { + "message": "Settings" + }, + "popupDataPlane": { + "message": "Data Plane" + }, + "popupDataPlaneDesc": { + "message": "WebTransport (in a worker), WebTransport (in the page), WebSocket, or Native Messaging" + }, + "popupDataPlaneWs": { + "message": "WebSocket" + }, + "popupDataPlaneWt": { + "message": "WebTransport" + }, + "popupDataPlaneNm": { + "message": "Native Messaging" + }, + "popupDevicePickerMode": { + "message": "Device Picker Mode" + }, + "popupDevicePickerModeDesc": { + "message": "How the device chooser is presented on this site" + }, + "popupWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "popupWorkerPolyfillDesc": { + "message": "Inject WebHID API into Worker scripts on this site" + }, + "popupAllowActivationless": { + "message": "Allow requestDevice() without user gesture" + }, + "popupAllowActivationlessDesc": { + "message": "Skip the user-activation check when this site calls requestDevice(). Spec workaround for sites that call it asynchronously; the device chooser still requires explicit user selection." + }, + "popupWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "popupWorkerSpawnModeDesc": { + "message": "How the data worker is created on this site" + }, + "popupLogLevel": { + "message": "Log Level" + }, + "popupLogLevelDesc": { + "message": "Console output verbosity for this site" + }, + "logLevelError": { + "message": "Error" + }, + "logLevelWarn": { + "message": "Warn" + }, + "logLevelInfo": { + "message": "Info" + }, + "logLevelDebug": { + "message": "Debug" + }, + "popupDefaultNote": { + "message": "Changes here override defaults for this site." + }, + "popupGlobalSettings": { + "message": "Global settings →" + }, + "popupManageDevices": { + "message": "Manage all paired devices →" + }, + "popupNoSite": { + "message": "(no site)" + }, + "popupSiteOrigin": { + "message": "Site origin" + }, + "popupOriginList": { + "message": "Origins in this tab" + }, + "popupUnknown": { + "message": "Unknown" + }, + "popupPairedDevice": { + "message": "Paired device" + }, + "popupRevoke": { + "message": "Revoke" + }, + "popupDeviceCount": { + "message": "($1/$2)" + }, + "popupInPageWtWarning": { + "message": "In-page WebTransport may trigger a Firefox local-network permission prompt (\"wants to access other apps and services on this device\"). Tick \"Remember my choice for this site\" before clicking Allow, otherwise you will be asked again on every page load." + }, + "statusReady": { + "message": "Ready" + }, + "statusFallback": { + "message": "Fallback: $1" + }, + "statusOffline": { + "message": "Daemon offline" + }, + "statusOfflineGuidance": { + "message": "Check that the daemon is running (systemctl status webhid-daemon), that your user is in the webhid group, and that the udev rules are installed." + }, + "planeNameWS": { + "message": "WebSocket" + }, + "planeNameWT": { + "message": "WebTransport" + }, + "planeNameNM": { + "message": "Native Messaging" + }, + "infoPopoverMore": { + "message": "More info" + }, + "macPrivacyTitle": { + "message": "macOS Input Monitoring" + }, + "macPrivacyDesc": { + "message": "Allow the daemon to read HID devices: System Settings → Privacy & Security → Input Monitoring. If the link does not open the right tab, find it manually and enable the daemon." + }, + "macPrivacyOpen": { + "message": "Open Privacy Settings" + }, + "settingsTitle": { + "message": "WebHID Settings" + }, + "settingsDaemonAsNmHost": { + "message": "Daemon as NM host" + }, + "settingsDaemonAsNmHostDesc": { + "message": "Talk to the daemon directly over native messaging, skipping the forwarder and Unix socket. Requires the daemon_nm_host manifest and the daemon running as your user (with the udev rule). Lower latency, no root-daemon fallback. Reconnects automatically." + }, + "settingsDataPlane": { + "message": "Data Plane" + }, + "settingsDataPlaneDesc": { + "message": "**WebTransport** (default): the fastest option; runs in a background worker so pages stay smooth.\n**WebTransport (in-page)**: connects directly in the page; fine at normal report rates, uses more page CPU. Use it when the site blocks background workers (CSP) but still allows the connection; the worker-based options would fall back to Native Messaging there. Firefox asks a one-time local-network permission (\"Allow\") before the first in-page connection; tick \"Remember my choice for this site\". Reload pages after changing.\n**WebSocket**: fallback when WebTransport is not available (older Firefox).\n**Native Messaging**: the slowest but most compatible option; use when a site's security policy blocks the others." + }, + "settingsDataPlaneWs": { + "message": "WebSocket" + }, + "settingsDataPlaneWt": { + "message": "WebTransport" + }, + "settingsDataPlaneWtInpage": { + "message": "WebTransport (in-page)" + }, + "settingsDataPlaneNm": { + "message": "Native Messaging" + }, + "settingsDevicePickerMode": { + "message": "Device Picker Mode" + }, + "settingsDevicePickerModeDesc": { + "message": "**Modal**: shadow-DOM overlay on the page when requestDevice() is called (default).\n**Page Action**: URL-bar popup picker; the user clicks the icon to open it. Firefox only, Chromium falls back to modal.\n**Window**: separate popup window." + }, + "settingsDevicePickerModal": { + "message": "Modal (overlay)" + }, + "settingsDevicePickerPageAction": { + "message": "Page Action (URL bar popup)" + }, + "settingsDevicePickerWindow": { + "message": "Window (separate popup window)" + }, + "settingsWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "settingsWorkerPolyfillDesc": { + "message": "Injects the full WebHID API into Worker scripts (new Worker()). requestDevice() stays page-only, as the spec requires. Reload pages after changing." + }, + "settingsAllowActivationless": { + "message": "Allow activation-less requestDevice()" + }, + "settingsAllowActivationlessDesc": { + "message": "Skip the user-activation requirement for requestDevice() on this site. Spec deviation; workaround for sites that call it from an async handler. The chooser still requires explicit user selection. Reload pages after changing." + }, + "settingsLogLevel": { + "message": "Log Level" + }, + "settingsLogLevelDesc": { + "message": "Console verbosity: Error = errors only, Warn = +warnings, Info = +info, Debug = +debug (includes timing). Reload pages after changing." + }, + "pickerTitle": { + "message": "Select a HID Device" + }, + "pickerCancel": { + "message": "Cancel" + }, + "pickerConnect": { + "message": "Connect" + }, + "pickerNoDevices": { + "message": "No HID devices found" + }, + "pickerNoDaemon": { + "message": "Cannot reach the WebHID daemon. Check that it is installed and running, then try again." + }, + "pickerParseFailed": { + "message": "This device's report descriptor could not be parsed. Connecting and sending reports still works." + }, + "pickerNoMatch": { + "message": "No devices match the specified filters" + }, + "pickerNoPending": { + "message": "No pending device request" + }, + "pickerLoading": { + "message": "Loading devices..." + }, + "pickerInterfaces": { + "message": "$1 interfaces" + }, + "settingsWorkerSpawnMode": { + "message": "Worker Spawn Mode" + }, + "settingsWorkerSpawnModeDesc": { + "message": "**Shadow URL** (default on MV3): spawns the data worker via new Worker(location.href) with a StreamFilter intercepting the synthetic self-request; respects the page's security settings and changes nothing about the page. Fails if the server rejects it or if require-trusted-types-for is restrictive.\n**Blob + CSP rewrite** (default on MV2): spawns the worker from a blob: URL; relaxes the page's worker-src and connect-src directives. Works fully on MV2; on MV3 only a meta-tag CSP can be rewritten, so header-based policies still block it." + }, + "settingsWorkerSpawnShadow": { + "message": "Shadow URL" + }, + "settingsWorkerSpawnBlob": { + "message": "Blob + CSP rewrite" + }, + "segDataPlaneWs": { + "message": "WS" + }, + "segDataPlaneWt": { + "message": "WT" + }, + "segDataPlaneWtInpage": { + "message": "WTI" + }, + "segDataPlaneNm": { + "message": "NM" + }, + "segPickerModal": { + "message": "Modal" + }, + "segPickerPageAction": { + "message": "Page Action" + }, + "segPickerWindow": { + "message": "Window" + }, + "segSpawnShadow": { + "message": "Shadow" + }, + "segSpawnBlob": { + "message": "Blob" + }, + "devicesTitle": { + "message": "Paired Devices (all sites)" + }, + "devicesNone": { + "message": "No devices paired on any site." + } +}