{ "@@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" } } } }