meshcore-open/lib/l10n/app_en.arb

2062 lines
No EOL
72 KiB
Text

{
"@@locale": "en",
"appTitle": "MeshCore Open",
"nav_contacts": "Contacts",
"nav_channels": "Channels",
"nav_map": "Map",
"common_cancel": "Cancel",
"common_ok": "OK",
"common_connect": "Connect",
"common_unknownDevice": "Unknown Device",
"common_save": "Save",
"common_delete": "Delete",
"common_deleteAll": "Delete All",
"common_close": "Close",
"common_edit": "Edit",
"common_add": "Add",
"common_settings": "Settings",
"common_disconnect": "Disconnect",
"common_connected": "Connected",
"common_disconnected": "Disconnected",
"common_create": "Create",
"common_continue": "Continue",
"common_share": "Share",
"common_copy": "Copy",
"common_retry": "Retry",
"common_hide": "Hide",
"common_remove": "Remove",
"common_enable": "Enable",
"common_disable": "Disable",
"common_reboot": "Reboot",
"common_loading": "Loading...",
"common_notAvailable": "—",
"common_voltageValue": "{volts} V",
"@common_voltageValue": {
"placeholders": {
"volts": {
"type": "String"
}
}
},
"common_percentValue": "{percent}%",
"@common_percentValue": {
"placeholders": {
"percent": {
"type": "int"
}
}
},
"scanner_title": "MeshCore Open",
"connectionChoiceUsbLabel": "USB",
"connectionChoiceBluetoothLabel": "Bluetooth",
"connectionChoiceTcpLabel": "TCP",
"tcpScreenTitle": "Connect over TCP",
"tcpHostLabel": "IP Address",
"tcpHostHint": "192.168.40.10",
"tcpPortLabel": "Port",
"tcpPortHint": "5000",
"tcpStatus_notConnected": "Enter endpoint and connect",
"tcpStatus_connectingTo": "Connecting to {endpoint}...",
"@tcpStatus_connectingTo": {
"placeholders": {
"endpoint": {
"type": "String"
}
}
},
"tcpErrorHostRequired": "IP address is required.",
"tcpErrorPortInvalid": "Port must be between 1 and 65535.",
"tcpErrorUnsupported": "TCP transport is not supported on this platform.",
"tcpErrorTimedOut": "TCP connection timed out.",
"tcpConnectionFailed": "TCP connection failed: {error}",
"@tcpConnectionFailed": {
"placeholders": {
"error": {
"type": "String"
}
}
},
"usbScreenTitle": "Connect over USB",
"usbScreenSubtitle": "Choose a detected serial device and connect directly to your MeshCore node.",
"usbScreenStatus": "Select a USB device",
"usbScreenNote": "USB serial is active on supported Android devices and desktop platforms.",
"usbScreenEmptyState": "No USB devices found. Plug one in and refresh.",
"usbErrorPermissionDenied": "USB permission was denied.",
"usbErrorDeviceMissing": "The selected USB device is no longer available.",
"usbErrorInvalidPort": "Select a valid USB device.",
"usbErrorBusy": "Another USB connection request is already in progress.",
"usbErrorNotConnected": "No USB device is connected.",
"usbErrorOpenFailed": "Failed to open the selected USB device.",
"usbErrorConnectFailed": "Failed to connect to the selected USB device.",
"usbErrorUnsupported": "USB serial is not supported on this platform.",
"usbErrorAlreadyActive": "A USB connection is already active.",
"usbErrorNoDeviceSelected": "No USB device was selected.",
"usbErrorPortClosed": "The USB connection is not open.",
"usbErrorConnectTimedOut": "Connection timed out. Make sure the device has USB Companion firmware.",
"usbFallbackDeviceName": "Web Serial Device",
"usbStatus_notConnected": "Select a USB device",
"usbStatus_connecting": "Connecting to USB device...",
"usbStatus_searching": "Searching for USB devices...",
"usbConnectionFailed": "USB connection failed: {error}",
"@usbConnectionFailed": {
"placeholders": {
"error": {
"type": "String"
}
}
},
"scanner_scanning": "Scanning for devices...",
"scanner_connecting": "Connecting...",
"scanner_disconnecting": "Disconnecting...",
"scanner_notConnected": "Not connected",
"scanner_connectedTo": "Connected to {deviceName}",
"@scanner_connectedTo": {
"placeholders": {
"deviceName": {
"type": "String"
}
}
},
"scanner_searchingDevices": "Searching for MeshCore devices...",
"scanner_tapToScan": "Tap Scan to find MeshCore devices",
"scanner_connectionFailed": "Connection failed: {error}",
"@scanner_connectionFailed": {
"placeholders": {
"error": {
"type": "String"
}
}
},
"scanner_stop": "Stop",
"scanner_scan": "Scan",
"scanner_bluetoothOff": "Bluetooth is off",
"scanner_bluetoothOffMessage": "Please turn on Bluetooth to scan for devices",
"scanner_chromeRequired": "Chrome Browser Required",
"scanner_chromeRequiredMessage": "This web application requires Google Chrome or a Chromium-based browser for Bluetooth support.",
"scanner_enableBluetooth": "Enable Bluetooth",
"device_quickSwitch": "Quick switch",
"device_meshcore": "MeshCore",
"settings_title": "Settings",
"settings_deviceInfo": "Device Info",
"settings_appSettings": "App Settings",
"settings_appSettingsSubtitle": "Notifications, messaging, and map preferences",
"settings_nodeSettings": "Node Settings",
"settings_nodeName": "Node Name",
"settings_nodeNameNotSet": "Not set",
"settings_nodeNameHint": "Enter node name",
"settings_nodeNameUpdated": "Name updated",
"settings_radioSettings": "Radio Settings",
"settings_radioSettingsSubtitle": "Frequency, power, spreading factor",
"settings_radioSettingsUpdated": "Radio settings updated",
"settings_location": "Location",
"settings_locationSubtitle": "GPS coordinates",
"settings_locationUpdated": "Location and GPS settings updated",
"settings_locationBothRequired": "Enter both latitude and longitude.",
"settings_locationInvalid": "Invalid latitude or longitude.",
"settings_locationGPSEnable": "GPS Enable",
"settings_locationGPSEnableSubtitle": "Enables GPS to automatically update location.",
"settings_locationIntervalSec": "Interval for GPS (Seconds)",
"settings_locationIntervalInvalid": "Interval must be at least 60 seconds, and less than 86400 seconds.",
"settings_latitude": "Latitude",
"settings_longitude": "Longitude",
"settings_contactSettings": "Contact Settings",
"settings_contactSettingsSubtitle": "Settings for how contacts are added.",
"settings_privacyMode": "Privacy Mode",
"settings_privacyModeSubtitle": "Hide name/location in advertisements",
"settings_privacyModeToggle": "Toggle privacy mode to hide your name and location in advertisements.",
"settings_privacyModeEnabled": "Privacy mode enabled",
"settings_privacyModeDisabled": "Privacy mode disabled",
"settings_privacy": "Privacy Settings",
"settings_privacySubtitle": "Control what information is shared.",
"settings_privacySettingsDescription": "Choose what information your device shares with others.",
"settings_denyAll": "Deny all",
"settings_allowByContact": "Allow by contact flags",
"settings_allowAll": "Allow all",
"settings_telemetryBaseMode": "Telemetry Base Mode",
"settings_telemetryLocationMode": "Telemetry Location Mode",
"settings_telemetryEnvironmentMode": "Telemetry Environment Mode",
"settings_advertLocation": "Advert Location",
"settings_advertLocationSubtitle": "Include location in advert.",
"settings_multiAck": "Multi-ACKs: {value}",
"@settings_multiAck": {
"placeholders": {
"value": {
"type": "String"
}
}
},
"settings_telemetryModeUpdated": "Telemetry mode updated",
"settings_actions": "Actions",
"settings_sendAdvertisement": "Send Advertisement",
"settings_sendAdvertisementSubtitle": "Broadcast presence now",
"settings_advertisementSent": "Advertisement sent",
"settings_syncTime": "Sync Time",
"settings_syncTimeSubtitle": "Set device clock to phone time",
"settings_timeSynchronized": "Time synchronized",
"settings_refreshContacts": "Refresh Contacts",
"settings_refreshContactsSubtitle": "Reload contact list from device",
"settings_rebootDevice": "Reboot Device",
"settings_rebootDeviceSubtitle": "Restart the MeshCore device",
"settings_rebootDeviceConfirm": "Are you sure you want to reboot the device? You will be disconnected.",
"settings_debug": "Debug",
"settings_bleDebugLog": "BLE Debug Log",
"settings_bleDebugLogSubtitle": "BLE commands, responses, and raw data",
"settings_appDebugLog": "App Debug Log",
"settings_appDebugLogSubtitle": "Application debug messages",
"settings_about": "About",
"settings_aboutVersion": "MeshCore Open v{version}",
"@settings_aboutVersion": {
"placeholders": {
"version": {
"type": "String"
}
}
},
"settings_aboutLegalese": "2026 MeshCore Open Source Project",
"settings_aboutDescription": "An open-source Flutter client for MeshCore LoRa mesh networking devices.",
"settings_aboutOpenMeteoAttribution": "LOS elevation data: Open-Meteo (CC BY 4.0)",
"settings_infoName": "Name",
"settings_infoId": "ID",
"settings_infoStatus": "Status",
"settings_infoBattery": "Battery",
"settings_infoPublicKey": "Public Key",
"settings_infoContactsCount": "Contacts Count",
"settings_infoChannelCount": "Channel Count",
"settings_presets": "Presets",
"settings_frequency": "Frequency (MHz)",
"settings_frequencyHelper": "300.0 - 2500.0",
"settings_frequencyInvalid": "Invalid frequency (300-2500 MHz)",
"settings_bandwidth": "Bandwidth",
"settings_spreadingFactor": "Spreading Factor",
"settings_codingRate": "Coding Rate",
"settings_txPower": "TX Power (dBm)",
"settings_txPowerHelper": "0 - 22",
"settings_txPowerInvalid": "Invalid TX power (0-22 dBm)",
"settings_clientRepeat": "Off-Grid Repeat",
"settings_clientRepeatSubtitle": "Allow this device to repeat mesh packets for others",
"settings_clientRepeatFreqWarning": "Off-grid repeat requires 433, 869, or 918 MHz frequency",
"settings_error": "Error: {message}",
"@settings_error": {
"placeholders": {
"message": {
"type": "String"
}
}
},
"appSettings_title": "App Settings",
"appSettings_appearance": "Appearance",
"appSettings_theme": "Theme",
"appSettings_themeSystem": "System default",
"appSettings_themeLight": "Light",
"appSettings_themeDark": "Dark",
"appSettings_language": "Language",
"appSettings_languageSystem": "System default",
"appSettings_languageEn": "English",
"appSettings_languageFr": "Français",
"appSettings_languageEs": "Español",
"appSettings_languageDe": "Deutsch",
"appSettings_languagePl": "Polski",
"appSettings_languageSl": "Slovenščina",
"appSettings_languagePt": "Português",
"appSettings_languageIt": "Italiano",
"appSettings_languageZh": "中文",
"appSettings_languageSv": "Svenska",
"appSettings_languageNl": "Nederlands",
"appSettings_languageSk": "Slovenčina",
"appSettings_languageBg": "Български",
"appSettings_languageRu": "Русский",
"appSettings_languageUk": "Українська",
"appSettings_enableMessageTracing": "Enable Message Tracing",
"appSettings_enableMessageTracingSubtitle": "Show detailed routing and timing metadata for messages",
"appSettings_notifications": "Notifications",
"appSettings_enableNotifications": "Enable Notifications",
"appSettings_enableNotificationsSubtitle": "Receive notifications for messages and adverts",
"appSettings_notificationPermissionDenied": "Notification permission denied",
"appSettings_notificationsEnabled": "Notifications enabled",
"appSettings_notificationsDisabled": "Notifications disabled",
"appSettings_messageNotifications": "Message Notifications",
"appSettings_messageNotificationsSubtitle": "Show notification when receiving new messages",
"appSettings_channelMessageNotifications": "Channel Message Notifications",
"appSettings_channelMessageNotificationsSubtitle": "Show notification when receiving channel messages",
"appSettings_advertisementNotifications": "Advertisement Notifications",
"appSettings_advertisementNotificationsSubtitle": "Show notification when new nodes are discovered",
"appSettings_messaging": "Messaging",
"appSettings_clearPathOnMaxRetry": "Clear Path on Max Retry",
"appSettings_clearPathOnMaxRetrySubtitle": "Reset contact path after 5 failed send attempts",
"appSettings_pathsWillBeCleared": "Paths will be cleared after 5 failed retries",
"appSettings_pathsWillNotBeCleared": "Paths will not be auto-cleared",
"appSettings_autoRouteRotation": "Auto Route Rotation",
"appSettings_autoRouteRotationSubtitle": "Cycle between best paths and flood mode",
"appSettings_autoRouteRotationEnabled": "Auto route rotation enabled",
"appSettings_autoRouteRotationDisabled": "Auto route rotation disabled",
"appSettings_maxRouteWeight": "Max Route Weight",
"appSettings_maxRouteWeightSubtitle": "Maximum weight a path can accumulate from successful deliveries",
"appSettings_initialRouteWeight": "Initial Route Weight",
"appSettings_initialRouteWeightSubtitle": "Starting weight for newly discovered paths",
"appSettings_routeWeightSuccessIncrement": "Success Weight Increment",
"appSettings_routeWeightSuccessIncrementSubtitle": "Weight added to a path after successful delivery",
"appSettings_routeWeightFailureDecrement": "Failure Weight Decrement",
"appSettings_routeWeightFailureDecrementSubtitle": "Weight removed from a path after failed delivery",
"appSettings_maxMessageRetries": "Max Message Retries",
"appSettings_maxMessageRetriesSubtitle": "Number of retry attempts before marking a message as failed",
"path_routeWeight": "{weight}/{max}",
"@path_routeWeight": {
"placeholders": {
"weight": {
"type": "String"
},
"max": {
"type": "String"
}
}
},
"appSettings_battery": "Battery",
"appSettings_batteryChemistry": "Battery Chemistry",
"appSettings_batteryChemistryPerDevice": "Set per device ({deviceName})",
"@appSettings_batteryChemistryPerDevice": {
"placeholders": {
"deviceName": {
"type": "String"
}
}
},
"appSettings_batteryChemistryConnectFirst": "Connect to a device to choose",
"appSettings_batteryNmc": "18650 NMC (3.0-4.2V)",
"appSettings_batteryLifepo4": "LiFePO4 (2.6-3.65V)",
"appSettings_batteryLipo": "LiPo (3.0-4.2V)",
"appSettings_mapDisplay": "Map Display",
"appSettings_showRepeaters": "Show Repeaters",
"appSettings_showRepeatersSubtitle": "Display repeater nodes on the map",
"appSettings_showChatNodes": "Show Chat Nodes",
"appSettings_showChatNodesSubtitle": "Display chat nodes on the map",
"appSettings_showOtherNodes": "Show Other Nodes",
"appSettings_showOtherNodesSubtitle": "Display other node types on the map",
"appSettings_timeFilter": "Time Filter",
"appSettings_timeFilterShowAll": "Show all nodes",
"appSettings_timeFilterShowLast": "Show nodes from last {hours} hours",
"@appSettings_timeFilterShowLast": {
"placeholders": {
"hours": {
"type": "int"
}
}
},
"appSettings_mapTimeFilter": "Map Time Filter",
"appSettings_showNodesDiscoveredWithin": "Show nodes discovered within:",
"appSettings_allTime": "All time",
"appSettings_lastHour": "Last hour",
"appSettings_last6Hours": "Last 6 hours",
"appSettings_last24Hours": "Last 24 hours",
"appSettings_lastWeek": "Last week",
"appSettings_offlineMapCache": "Offline Map Cache",
"appSettings_unitsTitle": "Units",
"appSettings_unitsMetric": "Metric (m / km)",
"appSettings_unitsImperial": "Imperial (ft / mi)",
"appSettings_noAreaSelected": "No area selected",
"appSettings_areaSelectedZoom": "Area selected (zoom {minZoom}-{maxZoom})",
"@appSettings_areaSelectedZoom": {
"placeholders": {
"minZoom": {
"type": "int"
},
"maxZoom": {
"type": "int"
}
}
},
"appSettings_debugCard": "Debug",
"appSettings_appDebugLogging": "App Debug Logging",
"appSettings_appDebugLoggingSubtitle": "Log app debug messages for troubleshooting",
"appSettings_appDebugLoggingEnabled": "App debug logging enabled",
"appSettings_appDebugLoggingDisabled": "App debug logging disabled",
"contacts_title": "Contacts",
"contacts_noContacts": "No contacts yet",
"contacts_contactsWillAppear": "Contacts will appear when devices advertise",
"contacts_unread": "Unread",
"contacts_searchContactsNoNumber": "Search Contacts...",
"contacts_searchContacts": "Search {number}{str} Contacts...",
"@contacts_searchContacts": {
"placeholders": {
"number": {
"type": "int"
},
"str": {
"type": "String"
}
}
},
"contacts_searchFavorites": "Search {number}{str} Favorites...",
"@contacts_searchFavorites": {
"placeholders": {
"number": {
"type": "int"
},
"str": {
"type": "String"
}
}
},
"contacts_searchUsers": "Search {number}{str} Users...",
"@contacts_searchUsers": {
"placeholders": {
"number": {
"type": "int"
},
"str": {
"type": "String"
}
}
},
"contacts_searchRepeaters": "Search {number}{str} Repeaters...",
"@contacts_searchRepeaters": {
"placeholders": {
"number": {
"type": "int"
},
"str": {
"type": "String"
}
}
},
"contacts_searchRoomServers": "Search {number}{str} Room servers...",
"@contacts_searchRoomServers": {
"placeholders": {
"number": {
"type": "int"
},
"str": {
"type": "String"
}
}
},
"contacts_noUnreadContacts": "No unread contacts",
"contacts_noContactsFound": "No contacts or groups found",
"contacts_deleteContact": "Delete Contact",
"contacts_removeConfirm": "Remove {contactName} from contacts?",
"@contacts_removeConfirm": {
"placeholders": {
"contactName": {
"type": "String"
}
}
},
"contacts_manageRepeater": "Manage Repeater",
"contacts_manageRoom": "Manage Room Server",
"contacts_roomLogin": "Room Server Login",
"contacts_openChat": "Open Chat",
"contacts_editGroup": "Edit Group",
"contacts_deleteGroup": "Delete Group",
"contacts_deleteGroupConfirm": "Remove \"{groupName}\"?",
"@contacts_deleteGroupConfirm": {
"placeholders": {
"groupName": {
"type": "String"
}
}
},
"contacts_newGroup": "New Group",
"contacts_groupName": "Group name",
"contacts_groupNameRequired": "Group name is required",
"contacts_groupNameReserved": "This group name is reserved",
"contacts_groupAlreadyExists": "Group \"{name}\" already exists",
"@contacts_groupAlreadyExists": {
"placeholders": {
"name": {
"type": "String"
}
}
},
"contacts_filterContacts": "Filter contacts...",
"contacts_noContactsMatchFilter": "No contacts match your filter",
"contacts_noMembers": "No members",
"contacts_lastSeenNow": "recently",
"contacts_lastSeenMinsAgo": "~ {minutes} min.",
"@contacts_lastSeenMinsAgo": {
"placeholders": {
"minutes": {
"type": "int"
}
}
},
"contacts_lastSeenHourAgo": "~ 1 hour",
"contacts_lastSeenHoursAgo": "~ {hours} hours",
"@contacts_lastSeenHoursAgo": {
"placeholders": {
"hours": {
"type": "int"
}
}
},
"contacts_lastSeenDayAgo": "~ 1 day",
"contacts_lastSeenDaysAgo": "~ {days} days",
"@contacts_lastSeenDaysAgo": {
"placeholders": {
"days": {
"type": "int"
}
}
},
"contact_info": "Contact Info",
"contact_settings": "Contact Settings",
"contact_telemetry": "Telemetry",
"contact_lastSeen": "Last seen",
"contact_clearChat": "Clear Chat",
"contact_teleBase": "Telemetry Base",
"contact_teleBaseSubtitle": "Allow sharing battery level and basic telemetry",
"contact_teleLoc": "Telemetry Location",
"contact_teleLocSubtitle": "Allow sharing location data",
"contact_teleEnv": "Telemetry Environment",
"contact_teleEnvSubtitle": "Allow sharing environment sensor data",
"channels_title": "Channels",
"channels_noChannelsConfigured": "No channels configured",
"channels_addPublicChannel": "Add Public Channel",
"channels_searchChannels": "Search channels...",
"channels_noChannelsFound": "No channels found",
"channels_channelIndex": "Channel {index}",
"@channels_channelIndex": {
"placeholders": {
"index": {
"type": "int"
}
}
},
"channels_hashtagChannel": "Hashtag channel",
"channels_public": "Public",
"channels_private": "Private",
"channels_publicChannel": "Public channel",
"channels_privateChannel": "Private channel",
"channels_editChannel": "Edit channel",
"channels_muteChannel": "Mute channel",
"channels_unmuteChannel": "Unmute channel",
"channels_deleteChannel": "Delete channel",
"channels_deleteChannelConfirm": "Delete \"{name}\"? This cannot be undone.",
"@channels_deleteChannelConfirm": {
"placeholders": {
"name": {
"type": "String"
}
}
},
"channels_channelDeleteFailed": "Failed to delete channel \"{name}\"",
"@channels_channelDeleteFailed": {
"placeholders": {
"name": {
"type": "String"
}
}
},
"channels_channelDeleted": "Channel \"{name}\" deleted",
"@channels_channelDeleted": {
"placeholders": {
"name": {
"type": "String"
}
}
},
"channels_addChannel": "Add Channel",
"channels_channelIndexLabel": "Channel Index",
"channels_channelName": "Channel Name",
"channels_usePublicChannel": "Use Public Channel",
"channels_standardPublicPsk": "Standard public PSK",
"channels_pskHex": "PSK (Hex)",
"channels_generateRandomPsk": "Generate random PSK",
"channels_enterChannelName": "Please enter a channel name",
"channels_pskMustBe32Hex": "PSK must be 32 hex characters",
"channels_channelAdded": "Channel \"{name}\" added",
"@channels_channelAdded": {
"placeholders": {
"name": {
"type": "String"
}
}
},
"channels_editChannelTitle": "Edit Channel {index}",
"@channels_editChannelTitle": {
"placeholders": {
"index": {
"type": "int"
}
}
},
"channels_smazCompression": "SMAZ compression",
"channels_channelUpdated": "Channel \"{name}\" updated",
"@channels_channelUpdated": {
"placeholders": {
"name": {
"type": "String"
}
}
},
"channels_publicChannelAdded": "Public channel added",
"channels_sortBy": "Sort by",
"channels_sortManual": "Manual",
"channels_sortAZ": "A-Z",
"channels_sortLatestMessages": "Latest messages",
"channels_sortUnread": "Unread",
"channels_createPrivateChannel": "Create a Private Channel",
"channels_createPrivateChannelDesc": "Secured with a secret key.",
"channels_joinPrivateChannel": "Join a Private Channel",
"channels_joinPrivateChannelDesc": "Manually enter a secret key.",
"channels_joinPublicChannel": "Join the Public Channel",
"channels_joinPublicChannelDesc": "Anyone can join this channel.",
"channels_joinHashtagChannel": "Join a Hashtag Channel",
"channels_joinHashtagChannelDesc": "Anyone can join hashtag channels.",
"channels_scanQrCode": "Scan a QR Code",
"channels_scanQrCodeComingSoon": "Coming soon",
"channels_enterHashtag": "Enter hashtag",
"channels_hashtagHint": "e.g. #team",
"chat_noMessages": "No messages yet",
"chat_sendMessageToStart": "Send a message to get started",
"chat_originalMessageNotFound": "Original message not found",
"chat_replyingTo": "Replying to {name}",
"@chat_replyingTo": {
"placeholders": {
"name": {
"type": "String"
}
}
},
"chat_replyTo": "Reply to {name}",
"@chat_replyTo": {
"placeholders": {
"name": {
"type": "String"
}
}
},
"chat_location": "Location",
"chat_sendMessageTo": "Send a message to {contactName}",
"@chat_sendMessageTo": {
"placeholders": {
"contactName": {
"type": "String"
}
}
},
"chat_typeMessage": "Type a message...",
"chat_messageTooLong": "Message too long (max {maxBytes} bytes).",
"@chat_messageTooLong": {
"placeholders": {
"maxBytes": {
"type": "int"
}
}
},
"chat_messageCopied": "Message copied",
"chat_messageDeleted": "Message deleted",
"chat_retryingMessage": "Retrying message",
"chat_retryCount": "Retry {current}/{max}",
"@chat_retryCount": {
"placeholders": {
"current": {
"type": "int"
},
"max": {
"type": "int"
}
}
},
"chat_sendGif": "Send GIF",
"chat_reply": "Reply",
"chat_addReaction": "Add Reaction",
"chat_me": "Me",
"emojiCategorySmileys": "Smileys",
"emojiCategoryGestures": "Gestures",
"emojiCategoryHearts": "Hearts",
"emojiCategoryObjects": "Objects",
"gifPicker_title": "Choose a GIF",
"gifPicker_searchHint": "Search GIFs...",
"gifPicker_poweredBy": "Powered by GIPHY",
"gifPicker_noGifsFound": "No GIFs found",
"gifPicker_failedLoad": "Failed to load GIFs",
"gifPicker_failedSearch": "Failed to search GIFs",
"gifPicker_noInternet": "No internet connection",
"debugLog_appTitle": "App Debug Log",
"debugLog_bleTitle": "BLE Debug Log",
"debugLog_copyLog": "Copy log",
"debugLog_clearLog": "Clear log",
"debugLog_copied": "Debug log copied",
"debugLog_bleCopied": "BLE log copied",
"debugLog_noEntries": "No debug logs yet",
"debugLog_enableInSettings": "Enable app debug logging in settings",
"debugLog_frames": "Frames",
"debugLog_rawLogRx": "Raw Log-RX",
"debugLog_noBleActivity": "No BLE activity yet",
"debugFrame_length": "Frame Length: {count} bytes",
"@debugFrame_length": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"debugFrame_command": "Command: 0x{value}",
"@debugFrame_command": {
"placeholders": {
"value": {
"type": "String"
}
}
},
"debugFrame_textMessageHeader": "Text Message Frame:",
"debugFrame_destinationPubKey": "- Destination PubKey: {pubKey}",
"@debugFrame_destinationPubKey": {
"placeholders": {
"pubKey": {
"type": "String"
}
}
},
"debugFrame_timestamp": "- Timestamp: {timestamp}",
"@debugFrame_timestamp": {
"placeholders": {
"timestamp": {
"type": "int"
}
}
},
"debugFrame_flags": "- Flags: 0x{value}",
"@debugFrame_flags": {
"placeholders": {
"value": {
"type": "String"
}
}
},
"debugFrame_textType": "- Text Type: {type} ({label})",
"@debugFrame_textType": {
"placeholders": {
"type": {
"type": "int"
},
"label": {
"type": "String"
}
}
},
"debugFrame_textTypeCli": "CLI",
"debugFrame_textTypePlain": "Plain",
"debugFrame_text": "- Text: \"{text}\"",
"@debugFrame_text": {
"placeholders": {
"text": {
"type": "String"
}
}
},
"debugFrame_hexDump": "Hex Dump:",
"chat_pathManagement": "Path Management",
"chat_ShowAllPaths": "Show all paths",
"chat_routingMode": "Routing mode",
"chat_autoUseSavedPath": "Auto (use saved path)",
"chat_forceFloodMode": "Force Flood Mode",
"chat_recentAckPaths": "Recent ACK Paths (tap to use):",
"chat_pathHistoryFull": "Path history is full. Remove entries to add new ones.",
"chat_hopSingular": "hop",
"chat_hopPlural": "hops",
"chat_hopsCount": "{count} {count, plural, =1{hop} other{hops}}",
"@chat_hopsCount": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"chat_successes": "successes",
"chat_removePath": "Remove path",
"chat_noPathHistoryYet": "No path history yet.\nSend a message to discover paths.",
"chat_pathActions": "Path Actions:",
"chat_setCustomPath": "Set Custom Path",
"chat_setCustomPathSubtitle": "Manually specify routing path",
"chat_clearPath": "Clear Path",
"chat_clearPathSubtitle": "Force rediscovery on next send",
"chat_pathCleared": "Path cleared. Next message will rediscover route.",
"chat_floodModeSubtitle": "Use routing toggle in app bar",
"chat_floodModeEnabled": "Flood mode enabled. Toggle back via routing icon in app bar.",
"chat_fullPath": "Full Path",
"chat_pathDetailsNotAvailable": "Path details not available yet. Try sending a message to refresh.",
"chat_pathSetHops": "Path set: {hopCount} {hopCount, plural, =1{hop} other{hops}} - {status}",
"@chat_pathSetHops": {
"placeholders": {
"hopCount": {
"type": "int"
},
"status": {
"type": "String"
}
}
},
"chat_pathSavedLocally": "Saved locally. Connect to sync.",
"chat_pathDeviceConfirmed": "Device confirmed.",
"chat_pathDeviceNotConfirmed": "Device not confirmed yet.",
"chat_type": "Type",
"chat_path": "Path",
"chat_publicKey": "Public Key",
"chat_compressOutgoingMessages": "Compress outgoing messages",
"chat_floodForced": "Flood (forced)",
"chat_directForced": "Direct (forced)",
"chat_hopsForced": "{count} hops (forced)",
"@chat_hopsForced": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"chat_floodAuto": "Flood (auto)",
"chat_direct": "Direct",
"chat_poiShared": "POI Shared",
"chat_unread": "Unread: {count}",
"@chat_unread": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"chat_openLink": "Open Link?",
"chat_openLinkConfirmation": "Do you want to open this link in your browser?",
"chat_open": "Open",
"chat_couldNotOpenLink": "Could not open link: {url}",
"@chat_couldNotOpenLink": {
"placeholders": {
"url": {
"type": "String"
}
}
},
"chat_invalidLink": "Invalid link format",
"map_title": "Node Map",
"map_lineOfSight": "Line of Sight",
"map_losScreenTitle": "Line of Sight",
"map_noNodesWithLocation": "No nodes with location data",
"map_nodesNeedGps": "Nodes need to share their GPS coordinates\nto appear on the map",
"map_nodesCount": "Nodes: {count}",
"@map_nodesCount": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"map_pinsCount": "Pins: {count}",
"@map_pinsCount": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"map_chat": "Chat",
"map_repeater": "Repeater",
"map_room": "Room",
"map_sensor": "Sensor",
"map_pinDm": "Pin (DM)",
"map_pinPrivate": "Pin (Private)",
"map_pinPublic": "Pin (Public)",
"map_lastSeen": "Last Seen",
"map_disconnectConfirm": "Are you sure you want to disconnect from this device?",
"map_from": "From",
"map_source": "Source",
"map_flags": "Flags",
"map_shareMarkerHere": "Share marker here",
"map_setAsMyLocation": "Set as my location",
"map_pinLabel": "Pin label",
"map_label": "Label",
"map_pointOfInterest": "Point of interest",
"map_sendToContact": "Send to contact",
"map_sendToChannel": "Send to channel",
"map_noChannelsAvailable": "No channels available",
"map_publicLocationShare": "Public location share",
"map_publicLocationShareConfirm": "You are about to share a location in {channelLabel}. This channel is public and anyone with the PSK can see it.",
"@map_publicLocationShareConfirm": {
"placeholders": {
"channelLabel": {
"type": "String"
}
}
},
"map_connectToShareMarkers": "Connect to a device to share markers",
"map_filterNodes": "Filter Nodes",
"map_nodeTypes": "Node Types",
"map_chatNodes": "Chat Nodes",
"map_repeaters": "Repeaters",
"map_otherNodes": "Other Nodes",
"map_showOverlaps": "Repeater Key Overlaps",
"map_keyPrefix": "Key Prefix",
"map_filterByKeyPrefix": "Filter by key prefix",
"map_publicKeyPrefix": "Public key prefix",
"map_markers": "Markers",
"map_showSharedMarkers": "Show shared markers",
"map_showGuessedLocations": "Show guessed node locations",
"map_showDiscoveryContacts": "Show Discovery Contacts",
"map_guessedLocation": "Guessed location",
"map_lastSeenTime": "Last Seen Time",
"map_sharedPin": "Shared pin",
"map_joinRoom": "Join Room",
"map_manageRepeater": "Manage Repeater",
"map_tapToAdd": "Tap on nodes to add them to the path.",
"map_runTrace": "Run path trace",
"map_runTraceWithReturnPath": "Return back on the same path.",
"map_removeLast": "Remove Last",
"map_pathTraceCancelled": "Path trace cancelled.",
"mapCache_title": "Offline Map Cache",
"mapCache_selectAreaFirst": "Select an area to cache first",
"mapCache_noTilesToDownload": "No tiles to download for this area",
"mapCache_downloadTilesTitle": "Download tiles",
"mapCache_downloadTilesPrompt": "Download {count} tiles for offline use?",
"@mapCache_downloadTilesPrompt": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"mapCache_downloadAction": "Download",
"mapCache_cachedTiles": "Cached {count} tiles",
"@mapCache_cachedTiles": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"mapCache_cachedTilesWithFailed": "Cached {downloaded} tiles ({failed} failed)",
"@mapCache_cachedTilesWithFailed": {
"placeholders": {
"downloaded": {
"type": "int"
},
"failed": {
"type": "int"
}
}
},
"mapCache_clearOfflineCacheTitle": "Clear offline cache",
"mapCache_clearOfflineCachePrompt": "Remove all cached map tiles?",
"mapCache_offlineCacheCleared": "Offline cache cleared",
"mapCache_noAreaSelected": "No area selected",
"mapCache_cacheArea": "Cache Area",
"mapCache_useCurrentView": "Use Current View",
"mapCache_zoomRange": "Zoom Range",
"mapCache_estimatedTiles": "Estimated tiles: {count}",
"@mapCache_estimatedTiles": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"mapCache_downloadedTiles": "Downloaded {completed} / {total}",
"@mapCache_downloadedTiles": {
"placeholders": {
"completed": {
"type": "int"
},
"total": {
"type": "int"
}
}
},
"mapCache_downloadTilesButton": "Download Tiles",
"mapCache_clearCacheButton": "Clear Cache",
"mapCache_failedDownloads": "Failed downloads: {count}",
"@mapCache_failedDownloads": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"mapCache_boundsLabel": "N {north}, S {south}, E {east}, W {west}",
"@mapCache_boundsLabel": {
"placeholders": {
"north": {
"type": "String"
},
"south": {
"type": "String"
},
"east": {
"type": "String"
},
"west": {
"type": "String"
}
}
},
"time_justNow": "Just now",
"time_minutesAgo": "{minutes}m ago",
"@time_minutesAgo": {
"placeholders": {
"minutes": {
"type": "int"
}
}
},
"time_hoursAgo": "{hours}h ago",
"@time_hoursAgo": {
"placeholders": {
"hours": {
"type": "int"
}
}
},
"time_daysAgo": "{days}d ago",
"@time_daysAgo": {
"placeholders": {
"days": {
"type": "int"
}
}
},
"time_hour": "hour",
"time_hours": "hours",
"time_day": "day",
"time_days": "days",
"time_week": "week",
"time_weeks": "weeks",
"time_month": "month",
"time_months": "months",
"time_minutes": "minutes",
"time_allTime": "All Time",
"dialog_disconnect": "Disconnect",
"dialog_disconnectConfirm": "Are you sure you want to disconnect from this device?",
"login_repeaterLogin": "Repeater Login",
"login_roomLogin": "Room Server Login",
"login_password": "Password",
"login_enterPassword": "Enter password",
"login_savePassword": "Save password",
"login_savePasswordSubtitle": "Password will be stored securely on this device",
"login_repeaterDescription": "Enter the repeater password to access settings and status.",
"login_roomDescription": "Enter the room password to access settings and status.",
"login_routing": "Routing",
"login_routingMode": "Routing mode",
"login_autoUseSavedPath": "Auto (use saved path)",
"login_forceFloodMode": "Force Flood Mode",
"login_managePaths": "Manage Paths",
"login_login": "Login",
"login_attempt": "Attempt {current}/{max}",
"@login_attempt": {
"placeholders": {
"current": {
"type": "int"
},
"max": {
"type": "int"
}
}
},
"login_failed": "Login failed: {error}",
"@login_failed": {
"placeholders": {
"error": {
"type": "String"
}
}
},
"login_failedMessage": "Login failed. Either the password is incorrect or the repeater is unreachable.",
"common_reload": "Reload",
"common_clear": "Clear",
"path_currentPath": "Current path: {path}",
"@path_currentPath": {
"placeholders": {
"path": {
"type": "String"
}
}
},
"path_usingHopsPath": "Using {count} {count, plural, =1{hop} other{hops}} path",
"@path_usingHopsPath": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"path_enterCustomPath": "Enter Custom Path",
"path_currentPathLabel": "Current path",
"path_hexPrefixInstructions": "Enter 2-character hex prefixes for each hop, separated by commas.",
"path_hexPrefixExample": "Example: A1,F2,3C (each node uses first byte of its public key)",
"path_labelHexPrefixes": "Path (hex prefixes)",
"path_helperMaxHops": "Max 64 hops. Each prefix is 2 hex characters (1 byte)",
"path_selectFromContacts": "Or select from contacts:",
"path_noRepeatersFound": "No repeaters or room servers found.",
"path_customPathsRequire": "Custom paths require intermediate hops that can relay messages.",
"path_invalidHexPrefixes": "Invalid hex prefixes: {prefixes}",
"@path_invalidHexPrefixes": {
"placeholders": {
"prefixes": {
"type": "String"
}
}
},
"path_tooLong": "Path too long. Maximum 64 hops allowed.",
"path_setPath": "Set Path",
"repeater_management": "Repeater Management",
"room_management": "Room Server Management",
"repeater_managementTools": "Management Tools",
"repeater_status": "Status",
"repeater_statusSubtitle": "View repeater status, stats, and neighbors",
"repeater_telemetry": "Telemetry",
"repeater_telemetrySubtitle": "View telemetry of sensors and system stats",
"repeater_cli": "CLI",
"repeater_cliSubtitle": "Send commands to the repeater",
"repeater_neighbors": "Neighbors",
"repeater_neighborsSubtitle": "View zero hop neighbors.",
"repeater_settings": "Settings",
"repeater_settingsSubtitle": "Configure repeater parameters",
"repeater_statusTitle": "Repeater Status",
"repeater_routingMode": "Routing mode",
"repeater_autoUseSavedPath": "Auto (use saved path)",
"repeater_forceFloodMode": "Force Flood Mode",
"repeater_pathManagement": "Path management",
"repeater_refresh": "Refresh",
"repeater_statusRequestTimeout": "Status request timed out.",
"repeater_errorLoadingStatus": "Error loading status: {error}",
"@repeater_errorLoadingStatus": {
"placeholders": {
"error": {
"type": "String"
}
}
},
"repeater_systemInformation": "System Information",
"repeater_battery": "Battery",
"repeater_clockAtLogin": "Clock (at login)",
"repeater_uptime": "Uptime",
"repeater_queueLength": "Queue Length",
"repeater_debugFlags": "Debug Flags",
"repeater_radioStatistics": "Radio Statistics",
"repeater_lastRssi": "Last RSSI",
"repeater_lastSnr": "Last SNR",
"repeater_noiseFloor": "Noise Floor",
"repeater_txAirtime": "TX Airtime",
"repeater_rxAirtime": "RX Airtime",
"repeater_packetStatistics": "Packet Statistics",
"repeater_sent": "Sent",
"repeater_received": "Received",
"repeater_duplicates": "Duplicates",
"repeater_daysHoursMinsSecs": "{days} days {hours}h {minutes}m {seconds}s",
"@repeater_daysHoursMinsSecs": {
"placeholders": {
"days": {
"type": "int"
},
"hours": {
"type": "int"
},
"minutes": {
"type": "int"
},
"seconds": {
"type": "int"
}
}
},
"repeater_packetTxTotal": "Total: {total}, Flood: {flood}, Direct: {direct}",
"@repeater_packetTxTotal": {
"placeholders": {
"total": {
"type": "int"
},
"flood": {
"type": "String"
},
"direct": {
"type": "String"
}
}
},
"repeater_packetRxTotal": "Total: {total}, Flood: {flood}, Direct: {direct}",
"@repeater_packetRxTotal": {
"placeholders": {
"total": {
"type": "int"
},
"flood": {
"type": "String"
},
"direct": {
"type": "String"
}
}
},
"repeater_duplicatesFloodDirect": "Flood: {flood}, Direct: {direct}",
"@repeater_duplicatesFloodDirect": {
"placeholders": {
"flood": {
"type": "String"
},
"direct": {
"type": "String"
}
}
},
"repeater_duplicatesTotal": "Total: {total}",
"@repeater_duplicatesTotal": {
"placeholders": {
"total": {
"type": "int"
}
}
},
"repeater_settingsTitle": "Repeater Settings",
"repeater_basicSettings": "Basic Settings",
"repeater_repeaterName": "Repeater Name",
"repeater_repeaterNameHelper": "Display name for this repeater",
"repeater_adminPassword": "Admin Password",
"repeater_adminPasswordHelper": "Full access password",
"repeater_guestPassword": "Guest Password",
"repeater_guestPasswordHelper": "Read-only access password",
"repeater_radioSettings": "Radio Settings",
"repeater_frequencyMhz": "Frequency (MHz)",
"repeater_frequencyHelper": "300-2500 MHz",
"repeater_txPower": "TX Power",
"repeater_txPowerHelper": "1-30 dBm",
"repeater_bandwidth": "Bandwidth",
"repeater_spreadingFactor": "Spreading Factor",
"repeater_codingRate": "Coding Rate",
"repeater_locationSettings": "Location Settings",
"repeater_latitude": "Latitude",
"repeater_latitudeHelper": "Decimal degrees (e.g., 37.7749)",
"repeater_longitude": "Longitude",
"repeater_longitudeHelper": "Decimal degrees (e.g., -122.4194)",
"repeater_features": "Features",
"repeater_packetForwarding": "Packet Forwarding",
"repeater_packetForwardingSubtitle": "Enable repeater to forward packets",
"repeater_guestAccess": "Guest Access",
"repeater_guestAccessSubtitle": "Allow read-only guest access",
"repeater_privacyMode": "Privacy Mode",
"repeater_privacyModeSubtitle": "Hide name/location in advertisements",
"repeater_advertisementSettings": "Advertisement Settings",
"repeater_localAdvertInterval": "Local Advertisement Interval",
"repeater_localAdvertIntervalMinutes": "{minutes} minutes",
"@repeater_localAdvertIntervalMinutes": {
"placeholders": {
"minutes": {
"type": "int"
}
}
},
"repeater_floodAdvertInterval": "Flood Advertisement Interval",
"repeater_floodAdvertIntervalHours": "{hours} hours",
"@repeater_floodAdvertIntervalHours": {
"placeholders": {
"hours": {
"type": "int"
}
}
},
"repeater_encryptedAdvertInterval": "Encrypted Advertisement Interval",
"repeater_dangerZone": "Danger Zone",
"repeater_rebootRepeater": "Reboot Repeater",
"repeater_rebootRepeaterSubtitle": "Restart the repeater device",
"repeater_rebootRepeaterConfirm": "Are you sure you want to reboot this repeater?",
"repeater_regenerateIdentityKey": "Regenerate Identity Key",
"repeater_regenerateIdentityKeySubtitle": "Generate new public/private key pair",
"repeater_regenerateIdentityKeyConfirm": "This will generate a new identity for the repeater. Continue?",
"repeater_eraseFileSystem": "Erase File System",
"repeater_eraseFileSystemSubtitle": "Format the repeater file system",
"repeater_eraseFileSystemConfirm": "WARNING: This will erase all data on the repeater. This cannot be undone!",
"repeater_eraseSerialOnly": "Erase is only available over serial console.",
"repeater_commandSent": "Command sent: {command}",
"@repeater_commandSent": {
"placeholders": {
"command": {
"type": "String"
}
}
},
"repeater_errorSendingCommand": "Error sending command: {error}",
"@repeater_errorSendingCommand": {
"placeholders": {
"error": {
"type": "String"
}
}
},
"repeater_confirm": "Confirm",
"repeater_settingsSaved": "Settings saved successfully",
"repeater_errorSavingSettings": "Error saving settings: {error}",
"@repeater_errorSavingSettings": {
"placeholders": {
"error": {
"type": "String"
}
}
},
"repeater_refreshBasicSettings": "Refresh Basic Settings",
"repeater_refreshRadioSettings": "Refresh Radio Settings",
"repeater_refreshTxPower": "Refresh TX power",
"repeater_refreshLocationSettings": "Refresh Location Settings",
"repeater_refreshPacketForwarding": "Refresh Packet Forwarding",
"repeater_refreshGuestAccess": "Refresh Guest Access",
"repeater_refreshPrivacyMode": "Refresh Privacy Mode",
"repeater_refreshAdvertisementSettings": "Refresh Advertisement Settings",
"repeater_refreshed": "{label} refreshed",
"@repeater_refreshed": {
"placeholders": {
"label": {
"type": "String"
}
}
},
"repeater_errorRefreshing": "Error refreshing {label}",
"@repeater_errorRefreshing": {
"placeholders": {
"label": {
"type": "String"
}
}
},
"repeater_cliTitle": "Repeater CLI",
"repeater_debugNextCommand": "Debug Next Command",
"repeater_commandHelp": "Command Help",
"repeater_clearHistory": "Clear History",
"repeater_noCommandsSent": "No commands sent yet",
"repeater_typeCommandOrUseQuick": "Type a command below or use quick commands",
"repeater_enterCommandHint": "Enter command...",
"repeater_previousCommand": "Previous command",
"repeater_nextCommand": "Next command",
"repeater_enterCommandFirst": "Enter a command first",
"repeater_cliCommandFrameTitle": "CLI Command Frame",
"repeater_cliCommandError": "Error: {error}",
"@repeater_cliCommandError": {
"placeholders": {
"error": {
"type": "String"
}
}
},
"repeater_cliQuickGetName": "Get Name",
"repeater_cliQuickGetRadio": "Get Radio",
"repeater_cliQuickGetTx": "Get TX",
"repeater_cliQuickNeighbors": "Neighbors",
"repeater_cliQuickVersion": "Version",
"repeater_cliQuickAdvertise": "Advertise",
"repeater_cliQuickClock": "Clock",
"repeater_cliQuickClockSync": "Clock Sync",
"repeater_cliQuickDiscovery": "Discover Neighbors",
"repeater_cliHelpAdvert": "Sends an advertisement packet",
"repeater_cliHelpReboot": "Reboots the device. (note, you'll prob get 'Timeout' which is normal)",
"repeater_cliHelpClock": "Displays current time per device's clock.",
"repeater_cliHelpPassword": "Sets a new admin password for the device.",
"repeater_cliHelpVersion": "Shows the device version and firmware build date.",
"repeater_cliHelpClearStats": "Resets various stats counters to zero.",
"repeater_cliHelpSetAf": "Sets the air-time-factor.",
"repeater_cliHelpSetTx": "Sets LoRa transmit power in dBm. (reboot to apply)",
"repeater_cliHelpSetRepeat": "Enables or disables the repeater role for this node.",
"repeater_cliHelpSetAllowReadOnly": "(Room server) If 'on', then login in blank password will be allowed, but cannot Post to room. (just read only)",
"repeater_cliHelpSetFloodMax": "Sets the maximum number of hops of inbound flood packet (if >= max, packet is not forwarded)",
"repeater_cliHelpSetIntThresh": "Sets the Interference Threshold (in DB). Default is 14. Set to 0 to disable channel interference detection.",
"repeater_cliHelpSetAgcResetInterval": "Sets the interval to reset the Auto Gain Controller. Set to 0 to disable.",
"repeater_cliHelpSetMultiAcks": "Enables or disables the 'double ACKs' feature.",
"repeater_cliHelpSetAdvertInterval": "Sets the timer interval in minutes to send a local (zero-hop) advertisement packet. Set to 0 to disable.",
"repeater_cliHelpSetFloodAdvertInterval": "Sets the timer interval in hours to send a flood advertisement packet. Set to 0 to disable.",
"repeater_cliHelpSetGuestPassword": "Sets/updates the guest password. (for repeaters, guest logins can send the \"Get Stats\" request)",
"repeater_cliHelpSetName": "Sets the advertisement name.",
"repeater_cliHelpSetLat": "Sets the advertisement map latitude. (decimal degrees)",
"repeater_cliHelpSetLon": "Sets the advertisement map longitude. (decimal degrees)",
"repeater_cliHelpSetRadio": "Sets completely new radio params, and saves to preferences. Requires a \"reboot\" command to apply.",
"repeater_cliHelpSetRxDelay": "Sets (experimental) base (must be > 1 for effect) for applying slight delay to received packets, based on signal strength/score. Set to 0 to disable.",
"repeater_cliHelpSetTxDelay": "Sets a factor multiplied with time-on-air for a flood-mode packet and with a randomized slot system, to delay its forwarding. (to decrease likelihood of collisions)",
"repeater_cliHelpSetDirectTxDelay": "Same as txdelay, but for applying a random delay to the forwarding of direct-mode packets.",
"repeater_cliHelpSetBridgeEnabled": "Enable/Disable bridge.",
"repeater_cliHelpSetBridgeDelay": "Set delay before retransmitting packets.",
"repeater_cliHelpSetBridgeSource": "Choose wether the bridge will retransmit received packets or transmitted packets.",
"repeater_cliHelpSetBridgeBaud": "Set serial link baudrate for rs232 bridges.",
"repeater_cliHelpSetBridgeSecret": "Set bridge secret for espnow bridges.",
"repeater_cliHelpSetAdcMultiplier": "Sets custom factor to adjust reported battery voltage (only supported on select boards).",
"repeater_cliHelpTempRadio": "Sets temporary radio params for the given number of minutes, reverting to original radio params afterward. (does NOT save to preferences).",
"repeater_cliHelpSetPerm": "Modifies the ACL. Removes matching entry (by pubkey prefix) if \"permissions\" is zero. Adds new entry if pubkey-hex is full length and is not currently in ACL. Updates entry by matching pubkey prefix. Permission bits vary per firmware role, but low 2 bits are: 0 (Guest), 1 (Read only), 2 (Read write), 3 (Admin)",
"repeater_cliHelpGetBridgeType": "Gets bridge type none, rs232, espnow",
"repeater_cliHelpLogStart": "Starts packet logging to file system.",
"repeater_cliHelpLogStop": "Stops packet logging to file system.",
"repeater_cliHelpLogErase": "Erases the packet logs from file system.",
"repeater_cliHelpNeighbors": "Shows a list of other repeater nodes heard via zero-hop adverts. Each line is id-prefix-hex:timestamp:snr-times-4",
"repeater_cliHelpNeighborRemove": "Removes first matching entry (by pubkey prefix (hex)), from neighbors list.",
"repeater_cliHelpRegion": "(serial only) Lists all defined regions and current flood permissions.",
"repeater_cliHelpRegionLoad": "NOTE: this is a special multi-command invocation. Each subsequent command is a region name (indented with spaces to indicate parent hierarchy, with one space at minimum). Terminated by sending a blank line/command.",
"repeater_cliHelpRegionGet": "Searches for region with given name prefix (or \"*\" for the global scope). Replies with \"-> region-name (parent-name) 'F'\"",
"repeater_cliHelpRegionPut": "Adds or updates a region definition with given name.",
"repeater_cliHelpRegionRemove": "Removes a region definition with given name. (must match exactly, and have no child regions)",
"repeater_cliHelpRegionAllowf": "Sets the 'F'lood permission for the given region. ('*' for the global/legacy scope)",
"repeater_cliHelpRegionDenyf": "Removes the 'F'lood permission for the given region. (NOTE: at this stage NOT advised to use this on the global/legacy scope!!)",
"repeater_cliHelpRegionHome": "Replies with the current 'home' region. (Note applied anywhere yet, reserved for future)",
"repeater_cliHelpRegionHomeSet": "Sets the 'home' region.",
"repeater_cliHelpRegionSave": "Persists the region list/map to storage.",
"repeater_cliHelpGps": "Gives status of gps. When gps is off, it replies only off, if on it replies with on, status, fix, sat count",
"repeater_cliHelpGpsOnOff": "Toggles gps power state.",
"repeater_cliHelpGpsSync": "Syncs node time with gps clock.",
"repeater_cliHelpGpsSetLoc": "Sets node's position to gps coordinates and save preferences.",
"repeater_cliHelpGpsAdvert": "Gives location advert configuration of the node:\n- none: don't include location in adverts\n- share: share gps location (from SensorManager)\n- prefs: advert the location stored in preferences",
"repeater_cliHelpGpsAdvertSet": "Sets location advert configuration.",
"repeater_commandsListTitle": "Commands List",
"repeater_commandsListNote": "NOTE: for the various \"set ...\" commands, there is also a \"get ...\" command.",
"repeater_general": "General",
"repeater_settingsCategory": "Settings",
"repeater_bridge": "Bridge",
"repeater_logging": "Logging",
"repeater_neighborsRepeaterOnly": "Neighbors (Repeater only)",
"repeater_regionManagementRepeaterOnly": "Region Management (Repeater only)",
"repeater_regionNote": "Region commands have been introduced to manage region definitions and permissions.",
"repeater_gpsManagement": "GPS Management",
"repeater_gpsNote": "gps command has been introduced to manage location related topics.",
"telemetry_receivedData": "Received Telemetry Data",
"telemetry_requestTimeout": "Telemetry request timed out.",
"telemetry_errorLoading": "Error loading telemetry: {error}",
"@telemetry_errorLoading": {
"placeholders": {
"error": {
"type": "String"
}
}
},
"telemetry_noData": "No telemetry data available.",
"telemetry_channelTitle": "Channel {channel}",
"@telemetry_channelTitle": {
"placeholders": {
"channel": {
"type": "int"
}
}
},
"telemetry_batteryLabel": "Battery",
"telemetry_voltageLabel": "Voltage",
"telemetry_mcuTemperatureLabel": "MCU Temperature",
"telemetry_temperatureLabel": "Temperature",
"telemetry_currentLabel": "Current",
"telemetry_batteryValue": "{percent}% / {volts}V",
"@telemetry_batteryValue": {
"placeholders": {
"percent": {
"type": "int"
},
"volts": {
"type": "String"
}
}
},
"telemetry_voltageValue": "{volts}V",
"@telemetry_voltageValue": {
"placeholders": {
"volts": {
"type": "String"
}
}
},
"telemetry_currentValue": "{amps}A",
"@telemetry_currentValue": {
"placeholders": {
"amps": {
"type": "String"
}
}
},
"telemetry_temperatureValue": "{celsius}°C / {fahrenheit}°F",
"@telemetry_temperatureValue": {
"placeholders": {
"celsius": {
"type": "String"
},
"fahrenheit": {
"type": "String"
}
}
},
"neighbors_receivedData": "Received Neighbors Data",
"neighbors_requestTimedOut": "Neighbors request timed out.",
"neighbors_errorLoading": "Error loading neighbors: {error}",
"@neighbors_errorLoading": {
"placeholders": {
"error": {
"type": "String"
}
}
},
"neighbors_repeatersNeighbors": "Repeaters Neighbors",
"neighbors_noData": "No neighbors data available.",
"neighbors_unknownContact": "Unknown {pubkey}",
"@neighbors_unknownContact": {
"placeholders": {
"pubkey": {
"type": "String"
}
}
},
"neighbors_heardAgo": "Heard: {time} ago",
"@neighbors_heardAgo": {
"placeholders": {
"time": {
"type": "String"
}
}
},
"channelPath_title": "Packet Path",
"channelPath_viewMap": "View map",
"channelPath_otherObservedPaths": "Other Observed Paths",
"channelPath_repeaterHops": "Repeater Hops",
"channelPath_noHopDetails": "Hop details are not provided for this packet.",
"channelPath_messageDetails": "Message Details",
"channelPath_senderLabel": "Sender",
"channelPath_timeLabel": "Time",
"channelPath_repeatsLabel": "Repeats",
"channelPath_pathLabel": "Path {index}",
"channelPath_observedLabel": "Observed",
"channelPath_observedPathTitle": "Observed path {index} • {hops}",
"@channelPath_observedPathTitle": {
"placeholders": {
"index": {
"type": "int"
},
"hops": {
"type": "String"
}
}
},
"channelPath_noLocationData": "No location data",
"channelPath_timeWithDate": "{day}/{month} {time}",
"@channelPath_timeWithDate": {
"placeholders": {
"day": {
"type": "int"
},
"month": {
"type": "int"
},
"time": {
"type": "String"
}
}
},
"channelPath_timeOnly": "{time}",
"@channelPath_timeOnly": {
"placeholders": {
"time": {
"type": "String"
}
}
},
"channelPath_unknownPath": "Unknown",
"channelPath_floodPath": "Flood",
"channelPath_directPath": "Direct",
"channelPath_observedZeroOf": "0 of {total} hops",
"@channelPath_observedZeroOf": {
"placeholders": {
"total": {
"type": "int"
}
}
},
"channelPath_observedSomeOf": "{observed} of {total} hops",
"@channelPath_observedSomeOf": {
"placeholders": {
"observed": {
"type": "int"
},
"total": {
"type": "int"
}
}
},
"channelPath_mapTitle": "Path Map",
"channelPath_noRepeaterLocations": "No repeater locations available for this path.",
"channelPath_primaryPath": "Path {index} (Primary)",
"@channelPath_primaryPath": {
"placeholders": {
"index": {
"type": "int"
}
}
},
"@channelPath_pathLabel": {
"placeholders": {
"index": {
"type": "int"
}
}
},
"channelPath_pathLabelTitle": "Path",
"channelPath_observedPathHeader": "Observed Path",
"channelPath_selectedPathLabel": "{label} • {prefixes}",
"@channelPath_selectedPathLabel": {
"placeholders": {
"label": {
"type": "String"
},
"prefixes": {
"type": "String"
}
}
},
"channelPath_noHopDetailsAvailable": "No hop details available for this packet.",
"channelPath_unknownRepeater": "Unknown Repeater",
"community_title": "Community",
"community_create": "Create Community",
"community_createDesc": "Create a new community and share via QR code.",
"community_join": "Join",
"community_joinTitle": "Join Community",
"community_joinConfirmation": "Do you want to join the community \"{name}\"?",
"@community_joinConfirmation": {
"placeholders": {
"name": {
"type": "String"
}
}
},
"community_scanQr": "Scan Community QR",
"community_scanInstructions": "Point the camera at a community QR code",
"community_showQr": "Show QR Code",
"community_publicChannel": "Community Public",
"community_hashtagChannel": "Community Hashtag",
"community_name": "Community Name",
"community_enterName": "Enter community name",
"community_created": "Community \"{name}\" created",
"@community_created": {
"placeholders": {
"name": {
"type": "String"
}
}
},
"community_joined": "Joined community \"{name}\"",
"@community_joined": {
"placeholders": {
"name": {
"type": "String"
}
}
},
"community_qrTitle": "Share Community",
"community_qrInstructions": "Scan this QR code to join \"{name}\"",
"@community_qrInstructions": {
"placeholders": {
"name": {
"type": "String"
}
}
},
"community_hashtagPrivacyHint": "Community hashtag channels are only joinable by members of the community",
"community_invalidQrCode": "Invalid community QR code",
"community_alreadyMember": "Already a Member",
"community_alreadyMemberMessage": "You are already a member of \"{name}\".",
"@community_alreadyMemberMessage": {
"placeholders": {
"name": {
"type": "String"
}
}
},
"community_addPublicChannel": "Add Community Public Channel",
"community_addPublicChannelHint": "Automatically add the public channel for this community",
"community_noCommunities": "No communities joined yet",
"community_scanOrCreate": "Scan a QR code or create a community to get started",
"community_manageCommunities": "Manage Communities",
"community_delete": "Leave Community",
"community_deleteConfirm": "Leave \"{name}\"?",
"@community_deleteConfirm": {
"placeholders": {
"name": {
"type": "String"
}
}
},
"community_deleteChannelsWarning": "This will also delete {count} channel(s) and their messages.",
"@community_deleteChannelsWarning": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"community_deleted": "Left community \"{name}\"",
"@community_deleted": {
"placeholders": {
"name": {
"type": "String"
}
}
},
"community_regenerateSecret": "Regenerate Secret",
"community_regenerateSecretConfirm": "Regenerate the secret key for \"{name}\"? All members will need to scan the new QR code to continue communicating.",
"@community_regenerateSecretConfirm": {
"placeholders": {
"name": {
"type": "String"
}
}
},
"community_regenerate": "Regenerate",
"community_secretRegenerated": "Secret regenerated for \"{name}\"",
"@community_secretRegenerated": {
"placeholders": {
"name": {
"type": "String"
}
}
},
"community_updateSecret": "Update Secret",
"community_secretUpdated": "Secret updated for \"{name}\"",
"@community_secretUpdated": {
"placeholders": {
"name": {
"type": "String"
}
}
},
"community_scanToUpdateSecret": "Scan the new QR code to update the secret for \"{name}\"",
"@community_scanToUpdateSecret": {
"placeholders": {
"name": {
"type": "String"
}
}
},
"community_addHashtagChannel": "Add Community Hashtag",
"community_addHashtagChannelDesc": "Add a hashtag channel for this community",
"community_selectCommunity": "Select Community",
"community_regularHashtag": "Regular Hashtag",
"community_regularHashtagDesc": "Public hashtag (anyone can join)",
"community_communityHashtag": "Community Hashtag",
"community_communityHashtagDesc": "Private to community members",
"community_forCommunity": "For {name}",
"@community_forCommunity": {
"placeholders": {
"name": {
"type": "String"
}
}
},
"listFilter_tooltip": "Filter and sort",
"listFilter_sortBy": "Sort by",
"listFilter_latestMessages": "Latest messages",
"listFilter_heardRecently": "Heard recently",
"listFilter_az": "A-Z",
"listFilter_filters": "Filters",
"listFilter_all": "All",
"listFilter_favorites": "Favorites",
"listFilter_addToFavorites": "Add to favorites",
"listFilter_removeFromFavorites": "Remove from favorites",
"listFilter_users": "Users",
"listFilter_repeaters": "Repeaters",
"listFilter_roomServers": "Room servers",
"listFilter_unreadOnly": "Unread only",
"listFilter_newGroup": "New group",
"pathTrace_you": "You",
"pathTrace_failed": "Path trace failed.",
"pathTrace_notAvailable": "Path trace not available.",
"pathTrace_refreshTooltip": "Refresh Path Trace.",
"pathTrace_someHopsNoLocation": "One or more of the hops is missing a location!",
"pathTrace_clearTooltip": "Clear path.",
"losSelectStartEnd": "Select start and end nodes for LOS.",
"losRunFailed": "Line-of-sight check failed: {error}",
"@losRunFailed": {
"placeholders": {
"error": {
"type": "String"
}
}
},
"losClearAllPoints": "Clear all points",
"losRunToViewElevationProfile": "Run LOS to view elevation profile",
"losMenuTitle": "LOS Menu",
"losMenuSubtitle": "Tap nodes or long-press map for custom points",
"losShowDisplayNodes": "Show display nodes",
"losCustomPoints": "Custom points",
"losCustomPointLabel": "Custom {index}",
"@losCustomPointLabel": {
"placeholders": {
"index": {
"type": "int"
}
}
},
"losPointA": "Point A",
"losPointB": "Point B",
"losAntennaA": "Antenna A: {value} {unit}",
"@losAntennaA": {
"placeholders": {
"value": {
"type": "String"
},
"unit": {
"type": "String"
}
}
},
"losAntennaB": "Antenna B: {value} {unit}",
"@losAntennaB": {
"placeholders": {
"value": {
"type": "String"
},
"unit": {
"type": "String"
}
}
},
"losRun": "Run LOS",
"losNoElevationData": "No elevation data",
"losProfileClear": "{distance} {distanceUnit}, clear LOS, min clearance {clearance} {heightUnit}",
"@losProfileClear": {
"placeholders": {
"distance": {
"type": "String"
},
"distanceUnit": {
"type": "String"
},
"clearance": {
"type": "String"
},
"heightUnit": {
"type": "String"
}
}
},
"losProfileBlocked": "{distance} {distanceUnit}, blocked by {obstruction} {heightUnit}",
"@losProfileBlocked": {
"placeholders": {
"distance": {
"type": "String"
},
"distanceUnit": {
"type": "String"
},
"obstruction": {
"type": "String"
},
"heightUnit": {
"type": "String"
}
}
},
"losStatusChecking": "LOS: checking...",
"losStatusNoData": "LOS: no data",
"losStatusSummary": "LOS: {clear}/{total} clear, {blocked} blocked, {unknown} unknown",
"@losStatusSummary": {
"placeholders": {
"clear": {
"type": "int"
},
"total": {
"type": "int"
},
"blocked": {
"type": "int"
},
"unknown": {
"type": "int"
}
}
},
"losErrorElevationUnavailable": "Elevation data unavailable for one or more samples.",
"losErrorInvalidInput": "Invalid points/elevation data for LOS calculation.",
"losRenameCustomPoint": "Rename custom point",
"losPointName": "Point name",
"losShowPanelTooltip": "Show LOS panel",
"losHidePanelTooltip": "Hide LOS panel",
"losElevationAttribution": "Elevation data: Open-Meteo (CC BY 4.0)",
"losLegendRadioHorizon": "Radio horizon",
"losLegendLosBeam": "LOS beam",
"losLegendTerrain": "Terrain",
"losFrequencyLabel": "Frequency",
"losFrequencyInfoTooltip": "View calculation details",
"losFrequencyDialogTitle": "Radio horizon calculation",
"losFrequencyDialogDescription": "Starting from k={baselineK} at {baselineFreq} MHz, the calculation adjusts the k-factor for the current {frequencyMHz} MHz band, which defines the curved radio horizon cap.",
"@losFrequencyDialogDescription": {
"description": "Explain how the calculation uses the baseline frequency and derived k-factor.",
"placeholders": {
"baselineK": {
"type": "double"
},
"baselineFreq": {
"type": "double"
},
"frequencyMHz": {
"type": "double"
},
"kFactor": {
"type": "double"
}
}
},
"contacts_pathTrace": "Path Trace",
"contacts_ping": "Ping",
"contacts_repeaterPathTrace": "Path trace to repeater",
"contacts_repeaterPing": "Ping repeater",
"contacts_roomPathTrace": "Path trace to room server",
"contacts_roomPing": "Ping room server",
"contacts_chatTraceRoute": "Path trace route",
"contacts_pathTraceTo": "Trace route to {name}",
"@contacts_pathTraceTo": {
"placeholders": {
"name": {
"type": "String"
}
}
},
"contacts_clipboardEmpty": "Clipboard is empty.",
"contacts_invalidAdvertFormat": "Invalid contact data",
"contacts_contactImported": "Contact has been imported.",
"contacts_contactImportFailed": "Failed to import contact.",
"contacts_zeroHopAdvert": "Zero Hop Advert",
"contacts_floodAdvert": "Flood Advert",
"contacts_copyAdvertToClipboard": "Copy Advert to Clipboard",
"contacts_addContactFromClipboard": "Add Contact from Clipboard",
"contacts_ShareContact": "Copy contact to Clipboard",
"contacts_ShareContactZeroHop": "Share contact by advert",
"contacts_zeroHopContactAdvertSent": "Sent contact by advert.",
"contacts_zeroHopContactAdvertFailed": "Failed to send contact.",
"contacts_contactAdvertCopied": "Advert copied to Clipboard.",
"contacts_contactAdvertCopyFailed": "Copying advert to Clipboard failed.",
"notification_activityTitle": "MeshCore Activity",
"notification_messagesCount": "{count} {count, plural, =1{message} other{messages}}",
"@notification_messagesCount": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"notification_channelMessagesCount": "{count} {count, plural, =1{channel message} other{channel messages}}",
"@notification_channelMessagesCount": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"notification_newNodesCount": "{count} {count, plural, =1{new node} other{new nodes}}",
"@notification_newNodesCount": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"notification_newTypeDiscovered": "New {contactType} discovered",
"@notification_newTypeDiscovered": {
"placeholders": {
"contactType": {
"type": "String"
}
}
},
"notification_receivedNewMessage": "Received new message",
"settings_gpxExportRepeaters": "Export repeaters / room server to GPX",
"settings_gpxExportRepeatersSubtitle": "Exports repeaters / roomserver with a location to GPX file.",
"settings_gpxExportContacts": "Export companions to GPX",
"settings_gpxExportContactsSubtitle": "Exports companions with a location to GPX file.",
"settings_gpxExportAll": "Export all contacts to GPX",
"settings_gpxExportAllSubtitle": "Exports all contacts with a location to GPX file.",
"settings_gpxExportSuccess": "Successfully exported GPX file.",
"settings_gpxExportNoContacts": "No contacts to export.",
"settings_gpxExportNotAvailable": "Not supported on your device/OS",
"settings_gpxExportError": "There was an error when exporting.",
"settings_gpxExportRepeatersRoom": "Repeater & room server locations",
"settings_gpxExportChat": "Companion locations",
"settings_gpxExportAllContacts": "All contacts locations",
"settings_gpxExportShareText": "Map data exported from meshcore-open",
"settings_gpxExportShareSubject": "meshcore-open GPX map data export",
"snrIndicator_nearByRepeaters": "Nearby Repeaters",
"snrIndicator_lastSeen": "Last seen",
"contactsSettings_title": "Contacts settings",
"contactsSettings_autoAddTitle": "Automatic Discovery",
"contactsSettings_otherTitle": "Other contact related settings",
"contactsSettings_autoAddUsersTitle": "Auto-add users",
"contactsSettings_autoAddUsersSubtitle": "Allow the companion to automatically add discovered users.",
"contactsSettings_autoAddRepeatersTitle": "Auto-add repeaters",
"contactsSettings_autoAddRepeatersSubtitle": "Allow the companion to automatically add discovered repeaters.",
"contactsSettings_autoAddRoomServersTitle": "Auto-add room servers",
"contactsSettings_autoAddRoomServersSubtitle": "Allow the companion to automatically add discovered room servers.",
"contactsSettings_autoAddSensorsTitle": "Auto-add sensors",
"contactsSettings_autoAddSensorsSubtitle": "Allow the companion to automatically add discovered sensors.",
"contactsSettings_overwriteOldestTitle": "Overwrite Oldest",
"contactsSettings_overwriteOldestSubtitle": "When the contact list is full, the oldest non-favorited contact will be replaced.",
"discoveredContacts_Title": "Discovered Contacts",
"discoveredContacts_noMatching": "No matching contacts",
"discoveredContacts_searchHint": "Search discovered contacts",
"discoveredContacts_contactAdded": "Contact added",
"discoveredContacts_addContact": "Add Contact",
"discoveredContacts_copyContact": "Copy Contact to clipboard",
"discoveredContacts_deleteContact": "Delete Discovered Contact",
"discoveredContacts_deleteContactAll": "Delete All Discovered Contacts",
"discoveredContacts_deleteContactAllContent": "Are you sure you want to delete all discovered contacts?",
"chat_sendCooldown": "Please wait a moment before sending again.",
"appSettings_jumpToOldestUnread": "Jump to oldest unread",
"appSettings_jumpToOldestUnreadSubtitle": "When opening a chat with unread messages, scroll to the first unread instead of the latest.",
"appSettings_languageHu": "Hungarian",
"appSettings_languageJa": "Japanese",
"appSettings_languageKo": "Korean",
"radioStats_tooltip": "Radio & mesh stats",
"radioStats_screenTitle": "Radio stats",
"radioStats_notConnected": "Connect to a device to view radio statistics.",
"radioStats_firmwareTooOld": "Radio statistics require companion firmware v8 or newer.",
"radioStats_waiting": "Waiting for data…",
"radioStats_noiseFloor": "Noise floor: {noiseDbm} dBm",
"@radioStats_noiseFloor": {
"placeholders": {
"noiseDbm": {
"type": "int"
}
}
},
"radioStats_lastRssi": "Last RSSI: {rssiDbm} dBm",
"@radioStats_lastRssi": {
"placeholders": {
"rssiDbm": {
"type": "int"
}
}
},
"radioStats_lastSnr": "Last SNR: {snr} dB",
"@radioStats_lastSnr": {
"placeholders": {
"snr": {
"type": "String"
}
}
},
"radioStats_txAir": "TX airtime (total): {seconds} s",
"@radioStats_txAir": {
"placeholders": {
"seconds": {
"type": "int"
}
}
},
"radioStats_rxAir": "RX airtime (total): {seconds} s",
"@radioStats_rxAir": {
"placeholders": {
"seconds": {
"type": "int"
}
}
},
"radioStats_chartCaption": "Noise floor (dBm) over recent samples.",
"radioStats_stripNoise": "Noise floor: {noiseDbm} dBm",
"@radioStats_stripNoise": {
"placeholders": {
"noiseDbm": {
"type": "int"
}
}
},
"radioStats_stripWaiting": "Fetching radio stats…",
"radioStats_settingsTile": "Radio stats",
"radioStats_settingsSubtitle": "Noise floor, RSSI, SNR, and airtime",
"scanner_linuxPairingShowPin": "Show PIN",
"scanner_linuxPairingHidePin": "Hide PIN",
"scanner_linuxPairingPinTitle": "Bluetooth Pairing PIN",
"scanner_linuxPairingPinPrompt": "Enter PIN for {deviceName} (leave blank if none).",
"@scanner_linuxPairingPinPrompt": {
"placeholders": {
"deviceName": {
"type": "String"
}
}
}
}