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." + } +} 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." + } +} 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." + } +} 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." + } +} 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." + } +} 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." + } +} 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." + } +} 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." + } +} 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." + } +} 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." + } +} 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." + } +} 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." + } +} 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." + } +} 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." + } +} 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." + } +} 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." + } +} 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." + } +} 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." + } +} 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." + } +} 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." + } +} 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." + } +} 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." + } +} 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." + } +} 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." + } +} 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." + } +} 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." + } +} diff --git a/addon/_locales/vi_VN/messages.json b/addon/_locales/vi_VN/messages.json new file mode 100644 index 00000000..eb1730d8 --- /dev/null +++ b/addon/_locales/vi_VN/messages.json @@ -0,0 +1,281 @@ +{ + "extensionName": { + "message": "WebHID" + }, + "extensionDescription": { + "message": "WebHID API đầy đủ nhất dành cho Firefox" + }, + "popupTitle": { + "message": "WebHID" + }, + "popupBack": { + "message": "Quay lại" + }, + "popupPairedDevices": { + "message": "Thiết bị đã cho phép" + }, + "popupNoDevices": { + "message": "Chưa có thiết bị nào được cho phép trên trang này." + }, + "popupSettings": { + "message": "Cài đặt" + }, + "popupDataPlane": { + "message": "Kênh dữ liệu" + }, + "popupDataPlaneDesc": { + "message": "WebTransport (trong worker), WebTransport (trong trang), WebSocket, hoặc Native Messaging" + }, + "popupDataPlaneWs": { + "message": "WebSocket" + }, + "popupDataPlaneWt": { + "message": "WebTransport" + }, + "popupDataPlaneNm": { + "message": "Native Messaging" + }, + "popupDevicePickerMode": { + "message": "Chế độ chọn thiết bị" + }, + "popupDevicePickerModeDesc": { + "message": "Cách hiển thị bộ chọn thiết bị trên trang này" + }, + "popupWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "popupWorkerPolyfillDesc": { + "message": "Cho phép WebHID API dùng được trên Worker scripts của trang này" + }, + "popupAllowActivationless": { + "message": "Cho phép requestDevice() không cần thao tác người dùng" + }, + "popupAllowActivationlessDesc": { + "message": "Bỏ qua kiểm tra user activation khi trang này gọi requestDevice(). Workaround cho trang gọi bất đồng bộ; bộ chọn thiết bị vẫn yêu cầu người dùng chọn rõ ràng." + }, + "popupWorkerSpawnMode": { + "message": "Chế độ tạo Worker" + }, + "popupWorkerSpawnModeDesc": { + "message": "Cách tạo data worker trên trang này" + }, + "popupLogLevel": { + "message": "Mức độ log" + }, + "popupLogLevelDesc": { + "message": "Độ chi tiết console output cho trang này" + }, + "logLevelError": { + "message": "Lỗi" + }, + "logLevelWarn": { + "message": "Cảnh báo" + }, + "logLevelInfo": { + "message": "Thông tin" + }, + "logLevelDebug": { + "message": "Gỡ lỗi" + }, + "popupDefaultNote": { + "message": "Thay đổi ở đây ghi đè mặc định cho trang này." + }, + "popupGlobalSettings": { + "message": "Cài đặt chung →" + }, + "popupManageDevices": { + "message": "Quản lý tất cả thiết bị đã ghép →" + }, + "popupNoSite": { + "message": "(không có trang)" + }, + "popupSiteOrigin": { + "message": "Origin của trang" + }, + "popupOriginList": { + "message": "Các origin trong tab này" + }, + "popupUnknown": { + "message": "Không rõ" + }, + "popupPairedDevice": { + "message": "Thiết bị đã cho phép" + }, + "popupRevoke": { + "message": "Thu hồi" + }, + "popupDeviceCount": { + "message": "($1/$2)" + }, + "popupInPageWtWarning": { + "message": "WebTransport trong trang có thể hiện cảnh báo quyền mạng cục bộ của Firefox (\"wants to access other apps and services on this device\"). Hãy tick \"Remember my choice for this site\" trước khi bấm Allow, nếu không sẽ bị hỏi lại mỗi lần tải trang." + }, + "statusReady": { + "message": "Sẵn sàng" + }, + "statusFallback": { + "message": "Fallback: $1" + }, + "statusOffline": { + "message": "Daemon ngoại tuyến" + }, + "statusOfflineGuidance": { + "message": "Kiểm tra daemon đang chạy (systemctl status webhid-daemon), user của bạn nằm trong nhóm webhid, và udev rules đã cài." + }, + "planeNameWS": { + "message": "WebSocket" + }, + "planeNameWT": { + "message": "WebTransport" + }, + "planeNameNM": { + "message": "Native Messaging" + }, + "infoPopoverMore": { + "message": "Thông tin thêm" + }, + "macPrivacyTitle": { + "message": "Input Monitoring trên macOS" + }, + "macPrivacyDesc": { + "message": "Cho phép daemon đọc thiết bị HID: System Settings → Privacy & Security → Input Monitoring. Nếu link không mở đúng tab, hãy tìm thủ công và bật cho daemon." + }, + "macPrivacyOpen": { + "message": "Mở Privacy Settings" + }, + "settingsTitle": { + "message": "Cài đặt WebHID" + }, + "settingsDaemonAsNmHost": { + "message": "Daemon as NM host" + }, + "settingsDaemonAsNmHostDesc": { + "message": "Nói chuyện trực tiếp với daemon qua native messaging, bỏ qua forwarder và Unix socket. Yêu cầu manifest daemon_nm_host và daemon chạy dưới user của bạn (kèm udev rule). Độ trễ thấp hơn, không có fallback daemon root. Tự kết nối lại." + }, + "settingsDataPlane": { + "message": "Kênh dữ liệu" + }, + "settingsDataPlaneDesc": { + "message": "**WebTransport** (mặc định): tùy chọn nhanh nhất; chạy trong background worker nên trang mượt hơn.\n**WebTransport (in-page)**: kết nối trực tiếp trong trang; ổn ở tốc độ report thường, dùng nhiều CPU trang hơn. Dùng khi site chặn background worker (CSP) nhưng vẫn cho phép kết nối; các tùy chọn dùng worker sẽ fallback sang Native Messaging. Firefox hỏi quyền local-network (\"Allow\") một lần trước kết nối in-page đầu tiên; tick \"Remember my choice for this site\". Reload trang sau khi thay đổi.\n**WebSocket**: fallback khi không có WebTransport (Firefox cũ).\n**Native Messaging**: tùy chọn chậm nhất nhưng tương thích nhất; dùng khi chính sách bảo mật của site chặn các tùy chọn khác." + }, + "settingsDataPlaneWs": { + "message": "WebSocket" + }, + "settingsDataPlaneWt": { + "message": "WebTransport" + }, + "settingsDataPlaneWtInpage": { + "message": "WebTransport (in-page)" + }, + "settingsDataPlaneNm": { + "message": "Native Messaging" + }, + "settingsDevicePickerMode": { + "message": "Chế độ chọn thiết bị" + }, + "settingsDevicePickerModeDesc": { + "message": "**Modal**: overlay shadow DOM trên trang khi gọi requestDevice() (mặc định).\n**Page Action**: picker dạng popup ở thanh URL; người dùng bấm icon để mở. Chỉ Firefox, Chromium fallback về modal.\n**Window**: cửa sổ popup riêng." + }, + "settingsDevicePickerModal": { + "message": "Modal (overlay)" + }, + "settingsDevicePickerPageAction": { + "message": "Page Action (popup icon trên thanh URL)" + }, + "settingsDevicePickerWindow": { + "message": "Cửa sổ (popup riêng)" + }, + "settingsWorkerPolyfill": { + "message": "Worker Polyfill" + }, + "settingsWorkerPolyfillDesc": { + "message": "Chèn đầy đủ WebHID API vào Worker scripts (new Worker()). requestDevice() chỉ khả dụng trên trang, đúng theo spec. Reload trang sau khi thay đổi." + }, + "settingsAllowActivationless": { + "message": "Cho phép requestDevice() không cần user activation" + }, + "settingsAllowActivationlessDesc": { + "message": "Bỏ qua yêu cầu user activation cho requestDevice() trên trang này. Sai lệch spec; workaround cho trang gọi từ handler bất đồng bộ. Bộ chọn vẫn yêu cầu người dùng chọn rõ ràng. Reload trang sau khi thay đổi." + }, + "settingsLogLevel": { + "message": "Mức độ log" + }, + "settingsLogLevelDesc": { + "message": "Độ chi tiết console: Error = chỉ lỗi, Warn = +cảnh báo, Info = +thông tin, Debug = +debug (bao gồm timing). Reload trang sau khi thay đổi." + }, + "pickerTitle": { + "message": "Chọn thiết bị" + }, + "pickerCancel": { + "message": "Hủy" + }, + "pickerConnect": { + "message": "Kết nối" + }, + "pickerNoDevices": { + "message": "Không tìm thấy thiết bị" + }, + "pickerNoDaemon": { + "message": "Không thể kết nối tới daemon WebHID. Kiểm tra daemon đã được cài đặt và đang chạy, rồi thử lại." + }, + "pickerParseFailed": { + "message": "Không thể phân tích report descriptor của thiết bị này. Kết nối và gửi report vẫn hoạt động bình thường." + }, + "pickerNoMatch": { + "message": "Không có thiết bị khớp với bộ lọc" + }, + "pickerNoPending": { + "message": "Không có yêu cầu thiết bị đang chờ" + }, + "pickerLoading": { + "message": "Đang tải thiết bị..." + }, + "pickerInterfaces": { + "message": "$1 giao diện" + }, + "settingsWorkerSpawnMode": { + "message": "Chế độ tạo Worker" + }, + "settingsWorkerSpawnModeDesc": { + "message": "**Shadow URL** (mặc định trên MV3): tạo data worker qua new Worker(location.href) với StreamFilter chặn request tự tham chiếu; tôn trọng cài đặt bảo mật của trang và không thay đổi gì trên trang. Thất bại nếu server từ chối hoặc require-trusted-types-for hạn chế.\n**Blob + CSP rewrite** (mặc định trên MV2): tạo worker từ URL blob:; nới lỏng directive worker-src và connect-src của trang. Hoạt động đầy đủ trên MV2; trên MV3 chỉ rewrite được CSP khai báo trong meta tag, nên CSP qua header vẫn chặn." + }, + "settingsWorkerSpawnShadow": { + "message": "Shadow URL" + }, + "settingsWorkerSpawnBlob": { + "message": "Blob + ghi đè CSP" + }, + "segDataPlaneWs": { + "message": "WS" + }, + "segDataPlaneWt": { + "message": "WT" + }, + "segDataPlaneWtInpage": { + "message": "WTI" + }, + "segDataPlaneNm": { + "message": "NM" + }, + "segPickerModal": { + "message": "Modal" + }, + "segPickerPageAction": { + "message": "Page Action" + }, + "segPickerWindow": { + "message": "Window" + }, + "segSpawnShadow": { + "message": "Shadow" + }, + "segSpawnBlob": { + "message": "Blob" + }, + "devicesTitle": { + "message": "Thiết bị đã ghép (mọi trang)" + }, + "devicesNone": { + "message": "Chưa có thiết bị nào được ghép." + } +} 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." + } +} 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." + } +}