{ "@@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_done": "Done", "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_undo": "Undo", "messageStatus_sent": "Sent", "messageStatus_delivered": "Delivered", "messageStatus_pending": "Sending", "messageStatus_failed": "Failed to send", "messageStatus_repeated": "Heard repeated", "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" } } }, "common_autoRefresh": "Autorefresh", "common_interval": "Interval", "scanner_title": "MeshCore Open", "connectionChoiceUsbLabel": "USB", "connectionChoiceBluetoothLabel": "Bluetooth", "connectionChoiceTcpLabel": "TCP", "tcpScreenTitle": "Connect over TCP", "tcpHostLabel": "Endpoint", "tcpHostHint": "192.168.40.10 / example.com", "tcpPortLabel": "Port", "tcpPortHint": "5000", "tcpStatus_notConnected": "Enter endpoint and connect", "tcpStatus_connectingTo": "Connecting to {endpoint}...", "@tcpStatus_connectingTo": { "placeholders": { "endpoint": { "type": "String" } } }, "tcpErrorHostRequired": "Host 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", "scanner_bluetoothWebUnsupported": "Bluetooth isn't available in the browser. Connect over USB instead.", "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_regionSettings": "Regions", "settings_regionSettingsSubtitle": "Manage stored regions", "settings_regionManagement_screenTitle": "Region Management", "settings_regionNameHint": "Enter region name", "settings_regionAddRegion": "Add region", "settings_regionFetchRegions": "Fetch regions from repeaters", "settings_regionFetchRegionsFail": "No regions were found", "settings_regionFetchRegionsAlreadyExists": "This region has already been added", "settings_regionName": "Region Name", "settings_regionDeleted": "Region deleted", "settings_deleteRegion": "Delete Region", "settings_deleteRegionConfirm": "Remove \"{region}\" from region list?", "@settings_deleteRegionConfirm": { "placeholders": { "region": { "type": "String" } } }, "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", "settings_telemetryModeUpdated": "Telemetry mode updated", "settings_actions": "Actions", "settings_deleteAllPaths": "Delete All Paths", "settings_deleteAllPathsSubtitle": "Clear all path data from contacts.", "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_companionDebugLog": "Companion Debug Log", "settings_companionDebugLogSubtitle": "BLE/TCP/USB 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", "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_moreOptions": "More options", "contacts_searchOpen": "Search contacts", "contacts_searchClose": "Close search", "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_public": "Public", "channels_via": "via {path}", "@channels_via": { "placeholders": { "path": { "type": "String" } } }, "channels_private": "Private", "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_cyr2latCompression": "Cyr2Lat compression", "channels_cyr2latCompressionDscr": "Replaces some Cyrillic characters with Latin characters when sending.", "channels_cyr2latSettingsHeading": "Cyr2Lat Setup", "channels_cyr2latSettingsSubheading": "List of replacements", "channels_cyr2latSettingsDscr": "Edit the JSON configuration of character replacement", "channels_cyr2latSettingsDialogHint": "JSON replacement map", "channels_cyr2latSettingsDialogWrongJSON": "Invalid JSON: {error}", "@channels_cyr2latSettingsDialogWrongJSON": { "placeholders": { "error": {} } }, "channels_channelUpdated": "Channel \"{name}\" updated", "@channels_channelUpdated": { "placeholders": { "name": { "type": "String" } } }, "settings_cyr2latProfileAdd": "Add Cyr2Lat Profile", "settings_cyr2latProfileName": "Profile Name", "settings_cyr2latProfileNameEmpty": "Profile name cannot be empty", "settings_cyr2latProfileAdded": "Profile added successfully", "settings_cyr2latProfileUpdated": "Profile updated successfully", "settings_cyr2latProfileEdit": "Edit Cyr2Lat Profile", "settings_cyr2latProfileDelete": "Delete Cyr2Lat Profile", "settings_cyr2latProfileDeleted": "Profile deleted successfully", "settings_cyr2latProfileDeleteDscr": "Are you sure you want to delete the profile \"{name}\"?", "@settings_cyr2latProfileDeleteDscr": { "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", "channels_regionSetTo": "Region: {region}", "@channels_regionSetTo": { "placeholders": { "region": { "type": "String", "example": "de-mitte" } } }, "channels_regionNotSet": "Region: none", "channels_regionSelect_Title": "Select a region", "channels_clearRegion": "Clear region", "chat_noMessages": "No messages yet", "chat_sendMessage": "Send message", "chat_sendMessageTo": "Send a message to {contactName}", "@chat_sendMessageTo": { "placeholders": { "contactName": { "type": "String" } } }, "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_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_hopsCount": "{count} {count, plural, =1{hop} other{hops}}", "@chat_hopsCount": { "placeholders": { "count": { "type": "int" } } }, "chat_removePath": "Remove path", "chat_noPathHistoryYet": "No path history yet.\nSend a message to discover paths.", "chat_pathCleared": "Path cleared. Next message will rediscover route.", "chat_fullPath": "Full Path", "routing_title": "Routing", "routing_modeAuto": "Auto", "routing_modeFlood": "Flood", "routing_modeManual": "Manual", "routing_modeAutoHint": "Picks the best known path automatically, flooding when none is known.", "routing_modeFloodHint": "Broadcasts through every repeater. Most reliable, but uses more airtime.", "routing_modeManualHint": "Always sends along the exact path you set.", "routing_currentRoute": "Current route", "routing_directNoHops": "Direct — no repeater hops", "routing_noPathYet": "No path yet. The next message floods until a route is discovered.", "routing_floodBroadcast": "Broadcast through every repeater", "routing_editPath": "Edit path", "routing_forgetPath": "Forget path", "routing_knownPaths": "Known paths", "routing_knownPathsHint": "Tap a path to switch to it.", "routing_inUse": "In use", "routing_qualityStrong": "Strong first hop", "routing_qualityGood": "Good first hop", "routing_qualityFair": "Fair first hop", "routing_qualityWorked": "Has delivered", "routing_qualityFlood": "Heard via flood", "routing_qualityUntested": "Untested", "routing_lastWorked": "worked {when}", "@routing_lastWorked": { "placeholders": { "when": { "type": "String" } } }, "routing_neverWorked": "never confirmed", "routing_deliveryCounts": "{successes} delivered, {failures} failed", "@routing_deliveryCounts": { "placeholders": { "successes": { "type": "int" }, "failures": { "type": "int" } } }, "routing_floodDelivery": "Flood delivery", "pathEditor_title": "Build Path", "pathEditor_hopCounter": "{count} of 64 hops", "@pathEditor_hopCounter": { "placeholders": { "count": { "type": "int" } } }, "pathEditor_noHops": "No hops yet. Tap repeaters below to add them in order, or save with no hops to send direct.", "pathEditor_addHops": "Add hops in order", "pathEditor_searchRepeaters": "Search repeaters", "pathEditor_advancedHex": "Advanced: raw hex path", "pathEditor_hexLabel": "Hex prefixes", "pathEditor_hexHelper": "Two hex characters per hop, separated by commas", "pathEditor_invalidTokens": "Invalid: {tokens}", "@pathEditor_invalidTokens": { "placeholders": { "tokens": { "type": "String" } } }, "pathEditor_tooManyHops": "Maximum 64 hops", "pathEditor_usePath": "Use this path", "pathEditor_removeHop": "Remove hop", "pathEditor_unknownHop": "Unknown repeater", "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_markAsUnread": "Mark as Unread", "chat_newMessages": "New messages", "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_searchHint": "Search node name or ID", "map_activity": "Activity", "map_online": "Online", "map_recent": "Recent", "map_stale": "Stale", "map_visible": "Visible", "map_hidden": "Hidden", "map_centerOnNode": "Center on node", "map_details": "Details", "map_noGps": "No GPS", "map_noResults": "No matching nodes", "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_type": "Type", "map_path": "Path", "map_location": "Location", "map_estLocation": "Est. Location", "map_publicKey": "Public Key", "map_publicKeyPrefixHint": "e.g. ab12", "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_sharedAt": "Shared", "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 for guest or admin access.", "login_roomDescription": "Enter the room password for guest or admin access.", "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_currentPathLabel": "Current path", "path_noRepeatersFound": "No repeaters or room servers found.", "repeater_management": "Repeater Management", "room_management": "Room Server Management", "repeater_guest": "Repeater Information", "room_guest": "Room Server Information", "repeater_managementTools": "Management Tools", "repeater_guestTools": "Guest 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_clockSyncAfterLogin": "Clock sync after login", "@repeater_clockSyncAfterLogin": { "description": "Repeater setting: auto sync device clock after successful login" }, "repeater_clockSyncAfterLoginSubtitle": "Automatically send \"clock sync\" after a successful login", "@repeater_clockSyncAfterLoginSubtitle": { "description": "Repeater setting subtitle: describes the clock sync after login behavior" }, "repeater_statusTitle": "Repeater Status", "repeater_routingMode": "Routing mode", "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_chanUtil": "Channel Utilization", "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_rxGain": "Boosted RX gain", "repeater_rxGainHelper": "Higher sensitivity, more current draw (SX1262/SX1268 only)", "repeater_refreshRxGain": "Refresh boosted RX gain", "repeater_multiAcks": "Multi-ACKs", "repeater_multiAcksSubtitle": "Acknowledge messages over multiple paths for better delivery", "repeater_refreshMultiAcks": "Refresh multi-ACKs", "repeater_networkHealth": "Network health", "repeater_loopDetect": "Loop detection", "repeater_loopDetectHelper": "Drop flood packets that look like routing loops", "repeater_loopDetectOff": "Off", "repeater_loopDetectMinimal": "Minimal", "repeater_loopDetectModerate": "Moderate", "repeater_loopDetectStrict": "Strict", "repeater_dutyCycle": "Duty cycle", "repeater_dutyCycleHelper": "Maximum percentage of airtime", "repeater_dutyCyclePercent": "{percent}%", "@repeater_dutyCyclePercent": { "placeholders": { "percent": { "type": "int" } } }, "repeater_ownerInfo": "Operator info", "repeater_ownerInfoHelper": "Public metadata for this repeater", "repeater_refreshOwnerInfo": "Refresh operator info", "repeater_floodMax": "Flood max hops", "repeater_floodMaxHelper": "Maximum hops a flood packet may travel (0-64)", "repeater_advancedSettings": "Advanced", "repeater_advancedSettingsSubtitle": "Tuning knobs for experienced operators", "repeater_pathHashMode": "Path hash mode", "repeater_pathHashModeHelper": "Bytes used to encode this repeater's ID in flood path/loop-detect tags. 0=1 byte (256 IDs, up to 64 hops), 1=2 bytes (65K IDs, up to 32 hops), 2=3 bytes (16M IDs, up to 21 hops). v1.13 and older firmware drops multi-byte paths — only raise once your network is on v1.14+.", "repeater_txDelay": "Flood TX delay", "repeater_txDelayHelper": "Retransmit spacing for flood traffic, as a multiplier of the packet's airtime (0-2, default 0.5). Higher = fewer collisions but slower delivery.", "repeater_directTxDelay": "Direct TX delay", "repeater_directTxDelayHelper": "Retransmit spacing for direct (non-flood) traffic, as a multiplier of the packet's airtime (0-2, default 0.3).", "repeater_intThresh": "Interference threshold", "repeater_intThreshHelper": "Threshold passed to the radio's noise-floor calibration so it rejects interference above this level. 0 disables — only raise if you see RX errors in a noisy band.", "repeater_agcResetInterval": "AGC reset interval", "repeater_agcResetIntervalHelper": "How often to reset the radio's automatic gain control to recover from a stuck gain state. Seconds, snapped down to a multiple of 4. 0 disables periodic resets.", "repeater_actionsTitle": "Actions", "repeater_sendAdvert": "Send flood advert", "repeater_sendAdvertSubtitle": "Broadcast a flood advert through the network", "repeater_sendAdvertZeroHop": "Send zero-hop advert", "repeater_sendAdvertZeroHopSubtitle": "Broadcast a one-hop advert (no relays)", "repeater_clockSync": "Sync clock now", "repeater_clockSyncSubtitle": "Push your phone's time to the repeater", "repeater_actionSucceeded": "{action} succeeded", "@repeater_actionSucceeded": { "placeholders": { "action": { "type": "String" } } }, "repeater_actionFailed": "{action} failed: {error}", "@repeater_actionFailed": { "placeholders": { "action": { "type": "String" }, "error": { "type": "String" } } }, "repeater_settingsSavedRebootNeeded": "Settings saved — reboot the repeater to apply", "repeater_settingsPartialFailure": "Some settings failed: {failures}", "@repeater_settingsPartialFailure": { "placeholders": { "failures": { "type": "String" } } }, "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_refreshPacketForwarding": "Refresh Packet Forwarding", "repeater_refreshGuestAccess": "Refresh Guest Access", "repeater_refreshPrivacyMode": "Refresh Privacy Mode", "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.", "repeater_getCategory": "Get Values", "repeater_powerMgmt": "Power Management", "repeater_sensors": "Sensors", "repeater_cliHelpPowerOff": "Powers the device off. (no response expected)", "repeater_cliHelpClkReboot": "Resets the clock to a known epoch and reboots the device.", "repeater_cliHelpAdvertZeroHop": "Sends a zero-hop advertisement (immediate neighbors only).", "repeater_cliHelpStartOta": "Starts an over-the-air firmware update on supported boards.", "repeater_cliHelpTime": "Sets the device clock to the given Unix epoch seconds. Clock cannot move backwards.", "repeater_cliHelpBoard": "Shows the board manufacturer / hardware identifier.", "repeater_cliHelpDiscoverNeighbors": "Sends a node-discovery request to nearby neighbors. (Repeater only)", "repeater_cliHelpPowersaving": "Shows whether powersaving mode is on or off.", "repeater_cliHelpPowersavingOnOff": "Enables or disables powersaving mode (where supported).", "repeater_cliHelpErase": "(Serial only) Formats the device file system. Wipes all settings and contacts.", "repeater_cliHelpSetDutyCycle": "Sets the maximum allowed transmit duty cycle as a percentage (1-100). Internally adjusts the airtime factor.", "repeater_cliHelpSetPrvKey": "(Serial only) Replaces the device identity private key. Reboot required to apply. Generates a new public key.", "repeater_cliHelpSetRadioRxGain": "(SX126x only) Toggles boosted RX gain for improved sensitivity at higher current draw.", "repeater_cliHelpSetOwnerInfo": "Sets the owner contact info string included in adverts. Use '|' for newlines.", "repeater_cliHelpSetPathHashMode": "Sets the path-hash mode. 0 = legacy, 1 = standard, 2 = strict. Affects how routing paths are matched.", "repeater_cliHelpSetLoopDetect": "Sets the routing loop-detection sensitivity: off, minimal, moderate, or strict.", "repeater_cliHelpSetFreq": "(Serial only) Quickly sets just the frequency. Reboot required. Prefer \"set radio\" for full radio params.", "repeater_cliHelpSetBridgeChannel": "(ESPNow bridge only) Sets the WiFi channel (1-14) used by the bridge.", "repeater_cliHelpGetName": "Shows the configured node name.", "repeater_cliHelpGetRole": "Shows the firmware role (Repeater, Room Server, etc.).", "repeater_cliHelpGetPublicKey": "Shows the device public key.", "repeater_cliHelpGetPrvKey": "(Serial only) Shows the device private key. Treat as a secret.", "repeater_cliHelpGetRepeat": "Shows whether packet forwarding (repeater role) is on or off.", "repeater_cliHelpGetTx": "Shows the current TX power in dBm.", "repeater_cliHelpGetFreq": "Shows the configured radio frequency in MHz.", "repeater_cliHelpGetRadio": "Shows full radio params: freq, bandwidth, spreading factor, coding rate.", "repeater_cliHelpGetRadioRxGain": "(SX126x only) Shows the RX boosted gain state.", "repeater_cliHelpGetAf": "Shows the current airtime factor.", "repeater_cliHelpGetDutyCycle": "Shows the current allowed duty cycle as a percentage.", "repeater_cliHelpGetIntThresh": "Shows the channel interference threshold in dB.", "repeater_cliHelpGetAgcResetInterval": "Shows the AGC reset interval in seconds.", "repeater_cliHelpGetMultiAcks": "Shows whether double-ACK mode is on (1) or off (0).", "repeater_cliHelpGetAllowReadOnly": "Shows whether guest read-only access is allowed.", "repeater_cliHelpGetAdvertInterval": "Shows the local advertisement interval in minutes.", "repeater_cliHelpGetFloodAdvertInterval": "Shows the flood advertisement interval in hours.", "repeater_cliHelpGetGuestPassword": "Shows the configured guest password.", "repeater_cliHelpGetLat": "Shows the configured latitude.", "repeater_cliHelpGetLon": "Shows the configured longitude.", "repeater_cliHelpGetRxDelay": "Shows the rxdelay base value.", "repeater_cliHelpGetTxDelay": "Shows the flood-mode txdelay factor.", "repeater_cliHelpGetDirectTxDelay": "Shows the direct-mode txdelay factor.", "repeater_cliHelpGetFloodMax": "Shows the maximum flood hop count.", "repeater_cliHelpGetOwnerInfo": "Shows the owner contact info string.", "repeater_cliHelpGetPathHashMode": "Shows the path-hash mode (0/1/2).", "repeater_cliHelpGetLoopDetect": "Shows the loop-detection sensitivity.", "repeater_cliHelpGetAcl": "(Serial only) Lists the access-control entries on a repeater.", "repeater_cliHelpGetBridgeEnabled": "Shows whether the bridge is enabled.", "repeater_cliHelpGetBridgeDelay": "Shows the bridge delay in ms.", "repeater_cliHelpGetBridgeSource": "Shows whether the bridge logs RX or TX packets.", "repeater_cliHelpGetBridgeBaud": "(RS232 bridge only) Shows the bridge baud rate.", "repeater_cliHelpGetBridgeChannel": "(ESPNow bridge only) Shows the bridge WiFi channel.", "repeater_cliHelpGetBridgeSecret": "(ESPNow bridge only) Shows the bridge shared secret.", "repeater_cliHelpGetBootloaderVer": "(NRF52 only) Shows the bootloader version.", "repeater_cliHelpGetAdcMultiplier": "Shows the ADC multiplier (battery-voltage scaling).", "repeater_cliHelpGetPwrMgtSupport": "Reports whether the board has power-management support.", "repeater_cliHelpGetPwrMgtSource": "Shows the current power source: external or battery.", "repeater_cliHelpGetPwrMgtBootReason": "Shows the most recent reset and shutdown reasons.", "repeater_cliHelpGetPwrMgtBootMv": "Shows the boot-time battery voltage in mV.", "repeater_cliHelpSensorGet": "Reads a custom sensor setting by key.", "repeater_cliHelpSensorSet": "Writes a custom sensor setting.", "repeater_cliHelpSensorList": "Lists all custom sensor settings, paginated from optional start index.", "repeater_cliHelpRegionDefault": "Shows the current default region scope.", "repeater_cliHelpRegionDefaultSet": "Sets the default region scope. Use \"\" to clear.", "repeater_cliHelpRegionListAllowed": "Lists regions that allow flood traffic.", "repeater_cliHelpRegionListDenied": "Lists regions that deny flood traffic.", "repeater_cliHelpStatsPackets": "(Serial only) Shows packet-level statistics.", "repeater_cliHelpStatsRadio": "(Serial only) Shows radio statistics.", "repeater_cliHelpStatsCore": "(Serial only) Shows core firmware statistics.", "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" } } }, "telemetry_digitalInputLabel": "Digital Input", "telemetry_digitalOutputLabel": "Digital Output", "telemetry_analogInputLabel": "Analog Input", "telemetry_analogOutputLabel": "Analog Output", "telemetry_genericLabel": "Generic Sensor", "telemetry_luminosityLabel": "Luminosity", "telemetry_presenceLabel": "Presence", "telemetry_humidityLabel": "Humidity", "telemetry_accelerometerLabel": "Accelerometer", "telemetry_pressureLabel": "Pressure", "telemetry_altitudeLabel": "Altitude", "telemetry_frequencyLabel": "Frequency", "telemetry_percentageLabel": "Percentage", "telemetry_concentrationLabel": "Concentration", "telemetry_powerLabel": "Power", "telemetry_distanceLabel": "Distance", "telemetry_energyLabel": "Energy", "telemetry_directionLabel": "Direction", "telemetry_timeLabel": "Time", "telemetry_gyrometerLabel": "Gyrometer", "telemetry_colourLabel": "Colour", "telemetry_gpsLabel": "GPS", "telemetry_switchLabel": "Switch", "telemetry_polylineLabel": "Polyline", "telemetry_altitudeValue": "{meters} m", "@telemetry_altitudeValue": { "placeholders": { "meters": { "type": "String" } } }, "telemetry_frequencyValue": "{hertz} Hz", "@telemetry_frequencyValue": { "placeholders": { "hertz": { "type": "String" } } }, "telemetry_pressureValue": "{hpa} hPa", "@telemetry_pressureValue": { "placeholders": { "hpa": { "type": "String" } } }, "telemetry_luminosityValue": "{lux} lx", "@telemetry_luminosityValue": { "placeholders": { "lux": { "type": "String" } } }, "telemetry_powerValue": "{watts} W", "@telemetry_powerValue": { "placeholders": { "watts": { "type": "String" } } }, "telemetry_distanceValue": "{meters} m", "@telemetry_distanceValue": { "placeholders": { "meters": { "type": "String" } } }, "telemetry_energyValue": "{kilowattHours} kWh", "@telemetry_energyValue": { "placeholders": { "kilowattHours": { "type": "String" } } }, "telemetry_directionValue": "{degrees}°", "@telemetry_directionValue": { "placeholders": { "degrees": { "type": "String" } } }, "telemetry_concentrationValue": "{ppm} ppm", "@telemetry_concentrationValue": { "placeholders": { "ppm": { "type": "String" } } }, "telemetry_percentageValue": "{percent}%", "@telemetry_percentageValue": { "placeholders": { "percent": { "type": "String" } } }, "telemetry_analogValue": "{value}", "@telemetry_analogValue": { "placeholders": { "value": { "type": "String" } } }, "telemetry_autoFetchQuantity": "Requests quantity", "telemetry_error": "Unable to retrieve data", "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", "losBlockedSpotsTitle": "Blocked spots", "losBlockedSpotsHint": "Tap a blocked spot to highlight it on the map.", "losBlockedSpotChip": "{distance} {distanceUnit} • {obstruction} {heightUnit}", "@losBlockedSpotChip": { "placeholders": { "distance": { "type": "String" }, "distanceUnit": { "type": "String" }, "obstruction": { "type": "String" }, "heightUnit": { "type": "String" } } }, "losSelectedObstructionTitle": "Selected obstruction", "losSelectedObstructionDetails": "Blocked by {obstruction} {heightUnit}, {distanceFromA} from A and {distanceFromB} from B ({distanceUnit}).", "@losSelectedObstructionDetails": { "placeholders": { "obstruction": { "type": "String" }, "heightUnit": { "type": "String" }, "distanceFromA": { "type": "String" }, "distanceUnit": { "type": "String" }, "distanceFromB": { "type": "String" } } }, "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", "translation_title": "Translation", "translation_enableTitle": "Enable translation", "translation_enableSubtitle": "Translate incoming messages and allow pre-send translation.", "translation_composerTitle": "Translate before sending", "translation_composerSubtitle": "Controls the default state of the composer translation icon.", "translation_autoIncomingTitle": "Auto-translate incoming messages", "translation_autoIncomingSubtitle": "Translates Messages for notification and for chat or channel automatically.", "translation_translateMessage": "Translate message", "translation_targetLanguage": "Target language", "translation_useAppLanguage": "Use app language", "translation_downloadedModelLabel": "Downloaded model", "translation_presetModelLabel": "Preset Hugging Face model", "translation_manualUrlLabel": "Manual model URL", "translation_downloadModel": "Download model", "translation_downloading": "Downloading...", "translation_working": "Working...", "translation_stop": "Stop", "translation_mergingChunks": "Merging downloaded chunks into final file...", "translation_downloadedModels": "Downloaded models", "translation_deleteModel": "Delete model", "translation_modelDownloaded": "Translation model downloaded.", "translation_downloadStopped": "Download stopped.", "translation_downloadFailed": "Download failed: {error}", "@translation_downloadFailed": { "placeholders": { "error": { "type": "String" } } }, "translation_enterUrlFirst": "Enter a model URL first.", "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" } } }, "translation_messageTranslation": "Message translation", "translation_translateBeforeSending": "Translate before sending", "translation_composerEnabledHint": "Messages will be translated before send.", "translation_composerDisabledHint": "Send messages in the original typed language.", "translation_translateTo": "Translate to {language}", "@translation_translateTo": { "placeholders": { "language": { "type": "String" } } }, "translation_translationOptions": "Translation options", "translation_systemLanguage": "System language", "background_serviceTitle": "MeshCore running", "background_serviceText": "Keeping BLE connected", "appSettings_translationModelDeleted": "Deleted {name}", "@appSettings_translationModelDeleted": { "placeholders": { "name": { "type": "String" } } }, "appSettings_translationModelDeleteFailed": "Failed to delete: {error}", "@appSettings_translationModelDeleteFailed": { "placeholders": { "error": { "type": "String" } } }, "channels_channelUpdateFailed": "Failed to update channel: {error}", "@channels_channelUpdateFailed": { "placeholders": { "error": { "type": "String" } } }, "contact_typeChat": "Chat", "contact_typeRepeater": "Repeater", "contact_typeRoom": "Room", "contact_typeSensor": "Sensor", "contact_typeUnknown": "Unknown", "map_zoomIn": "Zoom in", "map_zoomOut": "Zoom out", "map_centerMap": "Center map", "chrome_bluetoothRequiresChromium": "Web Bluetooth requires a Chromium browser", "channels_communityShortId": "ID: {id}...", "@channels_communityShortId": { "placeholders": { "id": { "type": "String" } } }, "pathTrace_legendGpsConfirmed": "GPS confirmed", "pathTrace_legendInferred": "Inferred position", "pathMap_viewSingle": "Single", "pathMap_viewCombined": "Combined", "pathMap_play": "Play", "pathMap_pause": "Pause", "pathMap_replay": "Replay", "pathMap_stepBack": "Previous hop", "pathMap_stepForward": "Next hop", "pathMap_animationOn": "Show packet animation", "pathMap_animationOff": "Hide packet animation", "pathMap_hopOf": "Hop {current} of {total}", "@pathMap_hopOf": { "placeholders": { "current": { "type": "int" }, "total": { "type": "int" } } }, "pathMap_observedPaths": "Observed paths: {count}", "@pathMap_observedPaths": { "placeholders": { "count": { "type": "int" } } }, "pathMap_primary": "Primary", "pathMap_alternate": "Alt {index}", "@pathMap_alternate": { "placeholders": { "index": { "type": "int" } } }, "pathMap_hopCount": "{count, plural, =1{1 hop} other{{count} hops}}", "@pathMap_hopCount": { "placeholders": { "count": { "type": "int" } } }, "pathMap_gpsCount": "{confirmed}/{total} GPS", "@pathMap_gpsCount": { "placeholders": { "confirmed": { "type": "int" }, "total": { "type": "int" } } }, "pathMap_legendShared": "Shared segment", "pathMap_legendEstimated": "Estimated segment", "pathMap_sharedNodeCount": "Used by {count} paths", "@pathMap_sharedNodeCount": { "placeholders": { "count": { "type": "int" } } }, "pathMap_partialAnimation": "{count, plural, =1{1 hop has no location — the shown path is partial} other{{count} hops have no location — the shown path is partial}}", "@pathMap_partialAnimation": { "placeholders": { "count": { "type": "int" } } }, "pathMap_showAllPaths": "Show all", "pathMap_hidePath": "Hide path", "pathMap_showPath": "Show path", "pathMap_collapsePanel": "Collapse panel", "pathMap_expandPanel": "Expand panel", "pathMap_noLocation": "No location", "pathMap_followPacket": "Lock view to packet", "pathMap_unfollowPacket": "Unlock view from packet" }