You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2734 lines
100 KiB
2734 lines
100 KiB
{
|
|
"@@locale": "en",
|
|
"appTitle": "Offband Meshcore",
|
|
"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_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": "Offband Meshcore",
|
|
"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",
|
|
"device_quickSwitch": "Quick switch",
|
|
"device_meshcore": "MeshCore",
|
|
"settings_title": "Settings",
|
|
"settings_deviceInfo": "Device Info",
|
|
"settings_appSettings": "App Settings",
|
|
"settings_appSettingsSubtitle": "Appearance, translation, and map preferences",
|
|
"settings_messageSettings": "Message Settings",
|
|
"@settings_messageSettings": {
|
|
"description": "Settings category title for notification and message-handling preferences"
|
|
},
|
|
"settings_messageSettingsSubtitle": "Notifications and message handling",
|
|
"@settings_messageSettingsSubtitle": {
|
|
"description": "Settings category subtitle for the message settings pane"
|
|
},
|
|
"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_gpsStatusTitle": "GPS status",
|
|
"settings_gpsStatusRefresh": "Query GPS",
|
|
"settings_gpsStatusLiveFix": "Live GPS fix",
|
|
"settings_gpsStatusNoFix": "No fix: using stored/last position",
|
|
"settings_gpsStatusCoords": "Coordinates",
|
|
"settings_gpsStatusSats": "Satellites",
|
|
"settings_gpsStatusAltitude": "Altitude",
|
|
"settings_gpsStatusTime": "Fix time",
|
|
"settings_gpsStatusTapRefresh": "Tap Query GPS to read the current GPS state",
|
|
"settings_gpsStatusNoResponse": "No response: device may need the GPS-query firmware build",
|
|
"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_experimental": "Experimental",
|
|
"settings_experimentalSubtitle": "Advanced and in-development features",
|
|
"settings_experimentalDescription": "These features are experimental and may change or be removed at any time. They default to off.",
|
|
"settings_coreScopeObserverCount": "CoreScope observer counts",
|
|
"settings_coreScopeObserverCountSubtitle": "On outgoing channel messages, show how many CoreScope observers heard the packet, alongside radio-heard repeats. Needs internet.",
|
|
"settings_coreScopeObserverCountUnsupported": "Requires a firmware build with packet-hash support (v22+).",
|
|
"settings_experimentalDisable": "Disable experimental features",
|
|
"settings_experimentalDisableSubtitle": "Turns off all experimental features and hides this section. Unlock again with 7 taps on the Build row.",
|
|
"settings_experimentalUnlocked": "Experimental features unlocked",
|
|
"settings_experimentalAlreadyUnlocked": "Experimental features are already unlocked",
|
|
"settings_experimentalCountdown": "{count} more taps to unlock experimental features",
|
|
"@settings_experimentalCountdown": {
|
|
"placeholders": {
|
|
"count": {
|
|
"type": "int"
|
|
}
|
|
}
|
|
},
|
|
"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": "Offband Meshcore v{version}",
|
|
"@settings_aboutVersion": {
|
|
"placeholders": {
|
|
"version": {
|
|
"type": "String"
|
|
}
|
|
}
|
|
},
|
|
"settings_aboutLegalese": "© 2026 Offband. Based on MeshCore Open by zjs81, MIT licensed.",
|
|
"settings_aboutDescription": "Offband Meshcore is an open-source client for MeshCore LoRa mesh networking devices.",
|
|
"settings_aboutLicenses": "View licenses",
|
|
"settings_aboutOpenMeteoAttribution": "LOS elevation data: Open-Meteo (CC BY 4.0)",
|
|
"settings_infoName": "Name",
|
|
"settings_infoId": "ID",
|
|
"settings_infoStatus": "Status",
|
|
"settings_infoFirmware": "Firmware",
|
|
"settings_infoModel": "Model",
|
|
"settings_infoOffbandCaps": "Offband capabilities",
|
|
"settings_infoBattery": "Battery",
|
|
"settings_infoPublicKey": "Public Key",
|
|
"settings_infoBuild": "Build",
|
|
"settings_infoDataScope": "Data scope",
|
|
"settings_infoDataScopeSubtitle": "Messages, contacts, and channels are stored per radio under this key",
|
|
"settings_publicKeyCopied": "Public key copied",
|
|
"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_femLna": "Receive amplifier (FEM LNA)",
|
|
"settings_femLnaSubtitle": "Boosts receive sensitivity. Leave on unless you are troubleshooting a strong nearby signal.",
|
|
"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_clock": "Clock",
|
|
"appSettings_clockSystem": "System default",
|
|
"appSettings_clock12h": "12-hour",
|
|
"appSettings_clock24h": "24-hour",
|
|
"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": "New node discovered",
|
|
"appSettings_advertisementNotificationsSubtitle": "Notify when new repeaters or contacts are heard",
|
|
"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_keepScreenAwake": "Keep screen awake",
|
|
"appSettings_keepScreenAwakeSubtitle": "Prevent the display from sleeping while the app is open. Uses more battery.",
|
|
"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_searchSensors": "Search {number}{str} Sensors...",
|
|
"@contacts_searchSensors": {
|
|
"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_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_notifications": "Notifications",
|
|
"channels_notifyAll": "All messages",
|
|
"channels_notifyMentionsOnly": "Mentions only",
|
|
"channels_notifyOff": "Off",
|
|
"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_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",
|
|
"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_sendingAgain": "Sending again",
|
|
"message_sendAgain": "Send Again",
|
|
"chat_retryCount": "Retry {current}/{max}",
|
|
"@chat_retryCount": {
|
|
"placeholders": {
|
|
"current": {
|
|
"type": "int"
|
|
},
|
|
"max": {
|
|
"type": "int"
|
|
}
|
|
}
|
|
},
|
|
"chat_sendGif": "Send GIF",
|
|
"chat_reply": "Reply",
|
|
"chat_replyWithRoute": "Reply with route",
|
|
"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_shareLog": "Share logs",
|
|
"debugLog_saveLog": "Save logs",
|
|
"debugLog_downloadLog": "Download logs",
|
|
"debugLog_shareSubject": "Offband Meshcore logs",
|
|
"debugLog_logSaved": "Log saved",
|
|
"debugLog_logUnavailable": "No log available to export",
|
|
"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"
|
|
}
|
|
}
|
|
},
|
|
"channel_heardTooltip": "Heard {count, plural, =1{1 repeat} other{{count} repeats}}",
|
|
"@channel_heardTooltip": {
|
|
"placeholders": {
|
|
"count": {
|
|
"type": "int"
|
|
}
|
|
}
|
|
},
|
|
"channel_coreScopeTooltip": "Seen by {count, plural, =1{1 CoreScope observer} other{{count} CoreScope observers}}",
|
|
"@channel_coreScopeTooltip": {
|
|
"placeholders": {
|
|
"count": {
|
|
"type": "int"
|
|
}
|
|
}
|
|
},
|
|
"channel_coreScopeRefresh": "Refresh CoreScope observers",
|
|
"channel_coreScopeRefreshFailed": "CoreScope unreachable",
|
|
"channel_coreScopeCounts": "{observers, plural, =1{1 observer} other{{observers} observers}} · {observations} observations",
|
|
"@channel_coreScopeCounts": {
|
|
"placeholders": {
|
|
"observers": {
|
|
"type": "int"
|
|
},
|
|
"observations": {
|
|
"type": "int"
|
|
}
|
|
}
|
|
},
|
|
"chat_successes": "successes",
|
|
"chat_score": "Score",
|
|
"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_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_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_alwaysShowNames": "Always show names",
|
|
"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_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_suggestedRoute": "Suggested route (shortest heard)",
|
|
"path_searchRepeaters": "Search repeaters",
|
|
"path_hexPrefixInstructions": "Enter each hop's hex prefix, separated by commas.",
|
|
"path_hexPrefixExample": "Tap nodes below, or enter each hop's hex prefix, comma-separated.",
|
|
"path_labelHexPrefixes": "Path (hex prefixes)",
|
|
"path_helperMaxHops": "Max 64 hops.",
|
|
"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_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_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_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 \"<null>\" 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_routeDirect": "direct (routed)",
|
|
"channelPath_routeFlood": "flood, {hops} hops",
|
|
"@channelPath_routeFlood": {
|
|
"placeholders": {
|
|
"hops": {
|
|
"type": "int"
|
|
}
|
|
}
|
|
},
|
|
"channelPath_snrLabel": "SNR",
|
|
"channelPath_snrValue": "{db} dB",
|
|
"@channelPath_snrValue": {
|
|
"placeholders": {
|
|
"db": {
|
|
"type": "String"
|
|
}
|
|
}
|
|
},
|
|
"channelPath_rssiLabel": "RSSI",
|
|
"channelPath_rssiValue": "{dbm} dBm",
|
|
"@channelPath_rssiValue": {
|
|
"placeholders": {
|
|
"dbm": {
|
|
"type": "int"
|
|
}
|
|
}
|
|
},
|
|
"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"
|
|
}
|
|
}
|
|
},
|
|
"channels_shareQr": "Share QR Code",
|
|
"channels_shareQrTitle": "Share Channel",
|
|
"channels_shareQrInstructions": "Scan to add \"{name}\".",
|
|
"@channels_shareQrInstructions": {
|
|
"placeholders": {
|
|
"name": {
|
|
"type": "String"
|
|
}
|
|
}
|
|
},
|
|
"channels_scanQr": "Scan QR Code",
|
|
"channels_scanQrDesc": "Add a community or channel from a QR code",
|
|
"channels_scanQrInstructions": "Point at a MeshCore QR code",
|
|
"channels_invalidQr": "Invalid QR code",
|
|
"channels_noFreeSlot": "No free channel slot",
|
|
"channels_qrAddConfirm": "Add channel \"{name}\"?",
|
|
"@channels_qrAddConfirm": {
|
|
"placeholders": {
|
|
"name": {
|
|
"type": "String"
|
|
}
|
|
}
|
|
},
|
|
"channels_qrAdded": "Added \"{name}\".",
|
|
"@channels_qrAdded": {
|
|
"placeholders": {
|
|
"name": {
|
|
"type": "String"
|
|
}
|
|
}
|
|
},
|
|
"channels_qrExists": "\"{name}\" is already added.",
|
|
"@channels_qrExists": {
|
|
"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_sensors": "Sensors",
|
|
"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_repeaterPathTraceVia": "Path trace via {prefix}",
|
|
"@contacts_repeaterPathTraceVia": {
|
|
"placeholders": {
|
|
"prefix": { "type": "String" }
|
|
}
|
|
},
|
|
"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_noNeighbors": "No neighbors heard currently. Messages still broadcast and route.",
|
|
"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",
|
|
"block_block": "Block",
|
|
"block_unblock": "Unblock",
|
|
"block_sender": "Block sender",
|
|
"block_blocked": "Blocked {name}",
|
|
"@block_blocked": {
|
|
"placeholders": {
|
|
"name": {
|
|
"type": "String"
|
|
}
|
|
}
|
|
},
|
|
"block_unblocked": "Unblocked {name}",
|
|
"@block_unblocked": {
|
|
"placeholders": {
|
|
"name": {
|
|
"type": "String"
|
|
}
|
|
}
|
|
},
|
|
"block_blockedNameOnly": "Blocked \"{name}\" across all channels. Name only until we learn their key",
|
|
"@block_blockedNameOnly": {
|
|
"placeholders": {
|
|
"name": {
|
|
"type": "String"
|
|
}
|
|
}
|
|
},
|
|
"block_settingsTitle": "Blocked",
|
|
"block_settingsSubtitle": "Users you've blocked",
|
|
"block_none": "No blocked users",
|
|
"block_keysSection": "Blocked contacts",
|
|
"block_namesSection": "Blocked names",
|
|
"block_namesHint": "Name-only blocks (channel senders). Each upgrades to a full block once we learn their key.",
|
|
"block_offloadActive": "Firmware offload active: blocks sync to this radio",
|
|
"block_offloadStoreFull": "Radio block list full (32): extra blocks stay app-only",
|
|
"block_composerNotice": "You've blocked this contact",
|
|
"storageUnavailableTitle": "Message storage unavailable",
|
|
"storageUnavailableBody": "Your history is not lost, but the app can't open its database, so new messages are NOT being saved. Restart the app after fixing the problem. See the app log for details.",
|
|
"@storageUnavailableTitle": {
|
|
"description": "Persistent banner title shown when the storage/database layer fails to open (#385)."
|
|
},
|
|
"@storageUnavailableBody": {
|
|
"description": "Persistent banner body explaining that storage is unavailable and messages are not being saved (#385)."
|
|
},
|
|
"batteryOptimizationTitle": "Battery optimization is on",
|
|
"@batteryOptimizationTitle": {
|
|
"description": "Title of the persistent banner warning that Android battery optimization may drop the background radio connection (#443)."
|
|
},
|
|
"batteryOptimizationBody": "Android may sleep the app when the screen is off and drop the radio connection. Set this app's battery usage to Unrestricted for a reliable background connection.",
|
|
"@batteryOptimizationBody": {
|
|
"description": "Body of the battery-optimization warning banner (#443)."
|
|
},
|
|
"batteryOptimizationOpenSettings": "Open battery settings",
|
|
"@batteryOptimizationOpenSettings": {
|
|
"description": "Button that opens the Android battery-optimization settings screen (#443)."
|
|
},
|
|
"batteryOptimizationDismiss": "Dismiss",
|
|
"@batteryOptimizationDismiss": {
|
|
"description": "Tooltip for the button that hides the battery-optimization banner for this session (#443)."
|
|
},
|
|
"batteryOptimizationOpenFailed": "Couldn't open battery settings",
|
|
"@batteryOptimizationOpenFailed": {
|
|
"description": "Snackbar shown when the battery-optimization settings screen could not be opened (#443)."
|
|
}
|
|
}
|