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