From a0477e0524dea68b8665435c674f568014c2966e Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 12:09:09 +0700 Subject: [PATCH 01/30] 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 1c3c7428ffc05c487993e53c7752b5c8866754c7 Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 12:09:10 +0700 Subject: [PATCH 02/30] 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 ee815f2bededc362c70d42cf7c2c0091395aab38 Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 12:09:12 +0700 Subject: [PATCH 03/30] 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 bdf6b949e7ada3850a8bd1145de0c3034c1bf1d6 Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 12:09:13 +0700 Subject: [PATCH 04/30] 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 10617525484a987129686d9484ce6ca5a2c64be1 Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 12:09:14 +0700 Subject: [PATCH 05/30] 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 6b5069081829cf816cdd4ef0356a6c830577bf47 Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 12:09:15 +0700 Subject: [PATCH 06/30] 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 d3d29d5d56a6ad4d0708936a8ed36a05b09aba16 Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 12:09:16 +0700 Subject: [PATCH 07/30] 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 8148c907f125f510575c12c35e51d86379983a3d Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 12:09:17 +0700 Subject: [PATCH 08/30] 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 90f4a617109ff14d4068e11a5b18fb8297629374 Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 12:09:18 +0700 Subject: [PATCH 09/30] 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 5c4804b80db01257a2abf90eabdb3077ca5369c5 Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 12:09:19 +0700 Subject: [PATCH 10/30] 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 cdbddda880e27efe48150bf4f6423fcc142c3bf4 Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 12:09:21 +0700 Subject: [PATCH 11/30] 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 f81a301b1f5aa43bbaa126c39e4df5ebd354c584 Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 12:09:22 +0700 Subject: [PATCH 12/30] 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 8947f0bd6b4ec2324ed49655c52c21652f33e9bc Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 12:09:23 +0700 Subject: [PATCH 13/30] 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 8a1502169876bf50dbe51a9a27ea39ee03d90298 Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 12:09:24 +0700 Subject: [PATCH 14/30] 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 990896caddc5a8671339ebbbdedf80760484adf4 Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 12:09:26 +0700 Subject: [PATCH 15/30] 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 262dd9643e4a93182f660e8ee5f9a3e7a134c997 Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 12:09:27 +0700 Subject: [PATCH 16/30] 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 93864456af8cd9063769b043e5e0f959d0ba8dc0 Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 12:09:28 +0700 Subject: [PATCH 17/30] 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 9c64190069c8378d4a501e54a5dd8521993b85cd Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 12:09:29 +0700 Subject: [PATCH 18/30] 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 5dff6d575533ab3c56f3aa3f5ef161e379d01a55 Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 12:09:30 +0700 Subject: [PATCH 19/30] 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 42cd797e5cdaf4c14ff20bbb96464c75a9565d62 Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 12:09:31 +0700 Subject: [PATCH 20/30] 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 16eff4761a696d9cff120c2f6101588ec154a093 Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 12:09:32 +0700 Subject: [PATCH 21/30] 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 9eaba74e3fcfe0722df06374a25af3d947f6ea74 Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 12:09:33 +0700 Subject: [PATCH 22/30] 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 ec0c5c87723cd733fa1ea15e3ca2fc0117aacf6e Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 12:09:34 +0700 Subject: [PATCH 23/30] 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 7d9e157c23d662312c17fafff75fd5ef39c2c77a Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 12:09:36 +0700 Subject: [PATCH 24/30] 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 ec5f70bc963e98af1c7768a0003c3e80a7469509 Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 12:09:37 +0700 Subject: [PATCH 25/30] 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 d052389d600f3defa4faa51f28f737eb75f22bbd Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 12:09:38 +0700 Subject: [PATCH 26/30] 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 b4d4ef5ab79b84a6c37579f888fc97ae18068b0c Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 12:09:39 +0700 Subject: [PATCH 27/30] 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 a03c0f5c21893b35f8e79f72d420191f526320d1 Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 12:09:40 +0700 Subject: [PATCH 28/30] New translations messages.json (English) [ci skip] chore: sync translations from Crowdin --- addon/_locales/en-US/messages.json | 281 +++++++++++++++++++++++++++++ 1 file changed, 281 insertions(+) create mode 100644 addon/_locales/en-US/messages.json diff --git a/addon/_locales/en-US/messages.json b/addon/_locales/en-US/messages.json new file mode 100644 index 00000000..d602377d --- /dev/null +++ b/addon/_locales/en-US/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 0b98cc6e6f0f780f3a69d35768b4fdaa00823900 Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 12:09:42 +0700 Subject: [PATCH 29/30] 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..d602377d --- /dev/null +++ b/addon/_locales/vi-VN/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 43e9bef0daa6251dc1b532b5fee0af6c12ca2e72 Mon Sep 17 00:00:00 2001 From: Kazoku Date: Tue, 11 Aug 2026 12:09:43 +0700 Subject: [PATCH 30/30] 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." + } +}