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