import 'dart:async';

import 'package:flutter/foundation.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:intl/intl.dart' as intl;

import 'app_localizations_de.dart';
import 'app_localizations_el.dart';
import 'app_localizations_en.dart';
import 'app_localizations_es.dart';
import 'app_localizations_fr.dart';
import 'app_localizations_hr.dart';
import 'app_localizations_it.dart';
import 'app_localizations_pl.dart';
import 'app_localizations_pt.dart';
import 'app_localizations_ru.dart';
import 'app_localizations_sl.dart';
import 'app_localizations_tr.dart';
import 'app_localizations_uk.dart';
import 'app_localizations_zh.dart';

// ignore_for_file: type=lint

/// Callers can lookup localized strings with an instance of AppLocalizations
/// returned by `AppLocalizations.of(context)`.
///
/// Applications need to include `AppLocalizations.delegate()` in their app's
/// `localizationDelegates` list, and the locales they support in the app's
/// `supportedLocales` list. For example:
///
/// ```dart
/// import 'l10n/app_localizations.dart';
///
/// return MaterialApp(
///   localizationsDelegates: AppLocalizations.localizationsDelegates,
///   supportedLocales: AppLocalizations.supportedLocales,
///   home: MyApplicationHome(),
/// );
/// ```
///
/// ## Update pubspec.yaml
///
/// Please make sure to update your pubspec.yaml to include the following
/// packages:
///
/// ```yaml
/// dependencies:
///   # Internationalization support.
///   flutter_localizations:
///     sdk: flutter
///   intl: any # Use the pinned version from flutter_localizations
///
///   # Rest of dependencies
/// ```
///
/// ## iOS Applications
///
/// iOS applications define key application metadata, including supported
/// locales, in an Info.plist file that is built into the application bundle.
/// To configure the locales supported by your app, you’ll need to edit this
/// file.
///
/// First, open your project’s ios/Runner.xcworkspace Xcode workspace file.
/// Then, in the Project Navigator, open the Info.plist file under the Runner
/// project’s Runner folder.
///
/// Next, select the Information Property List item, select Add Item from the
/// Editor menu, then select Localizations from the pop-up menu.
///
/// Select and expand the newly-created Localizations item then, for each
/// locale your application supports, add a new item and select the locale
/// you wish to add from the pop-up menu in the Value field. This list should
/// be consistent with the languages listed in the AppLocalizations.supportedLocales
/// property.
abstract class AppLocalizations {
  AppLocalizations(String locale)
    : localeName = intl.Intl.canonicalizedLocale(locale.toString());

  final String localeName;

  static AppLocalizations? of(BuildContext context) {
    return Localizations.of<AppLocalizations>(context, AppLocalizations);
  }

  static const LocalizationsDelegate<AppLocalizations> delegate =
      _AppLocalizationsDelegate();

  /// A list of this localizations delegate along with the default localizations
  /// delegates.
  ///
  /// Returns a list of localizations delegates containing this delegate along with
  /// GlobalMaterialLocalizations.delegate, GlobalCupertinoLocalizations.delegate,
  /// and GlobalWidgetsLocalizations.delegate.
  ///
  /// Additional delegates can be added by appending to this list in
  /// MaterialApp. This list does not have to be used at all if a custom list
  /// of delegates is preferred or required.
  static const List<LocalizationsDelegate<dynamic>> localizationsDelegates =
      <LocalizationsDelegate<dynamic>>[
        delegate,
        GlobalMaterialLocalizations.delegate,
        GlobalCupertinoLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
      ];

  /// A list of this localizations delegate's supported locales.
  static const List<Locale> supportedLocales = <Locale>[
    Locale('de'),
    Locale('el'),
    Locale('en'),
    Locale('es'),
    Locale('fr'),
    Locale('hr'),
    Locale('it'),
    Locale('pl'),
    Locale('pt'),
    Locale('ru'),
    Locale('sl'),
    Locale('tr'),
    Locale('uk'),
    Locale('zh'),
  ];

  /// The application title
  ///
  /// In en, this message translates to:
  /// **'MeshCore SAR'**
  String get appTitle;

  /// Messages tab label
  ///
  /// In en, this message translates to:
  /// **'Messages'**
  String get messages;

  /// Contacts tab label
  ///
  /// In en, this message translates to:
  /// **'Contacts'**
  String get contacts;

  /// Map tab label
  ///
  /// In en, this message translates to:
  /// **'Map'**
  String get map;

  /// Settings screen title
  ///
  /// In en, this message translates to:
  /// **'Settings'**
  String get settings;

  /// Connect button label
  ///
  /// In en, this message translates to:
  /// **'Connect'**
  String get connect;

  /// Disconnect button label
  ///
  /// In en, this message translates to:
  /// **'Disconnect'**
  String get disconnect;

  /// Text shown when no BLE devices are found
  ///
  /// In en, this message translates to:
  /// **'No devices found'**
  String get noDevicesFound;

  /// Button to restart BLE scanning
  ///
  /// In en, this message translates to:
  /// **'Scan Again'**
  String get scanAgain;

  /// Subtitle text for device in scan list
  ///
  /// In en, this message translates to:
  /// **'Tap to connect'**
  String get tapToConnect;

  /// Error message when device is not connected
  ///
  /// In en, this message translates to:
  /// **'Device not connected'**
  String get deviceNotConnected;

  /// Error when location permission is denied
  ///
  /// In en, this message translates to:
  /// **'Location permission denied'**
  String get locationPermissionDenied;

  /// Error when location permission is permanently denied
  ///
  /// In en, this message translates to:
  /// **'Location permission permanently denied. Please enable in Settings.'**
  String get locationPermissionPermanentlyDenied;

  /// Message when location permission is needed
  ///
  /// In en, this message translates to:
  /// **'Location permission is required for GPS tracking and team coordination. You can enable it later in Settings.'**
  String get locationPermissionRequired;

  /// Error when location services are disabled
  ///
  /// In en, this message translates to:
  /// **'Location services are disabled. Please enable them in Settings.'**
  String get locationServicesDisabled;

  /// Error when GPS location cannot be obtained
  ///
  /// In en, this message translates to:
  /// **'Failed to get GPS location'**
  String get failedToGetGpsLocation;

  /// Error message for failed advertisement
  ///
  /// In en, this message translates to:
  /// **'Failed to advertise: {error}'**
  String failedToAdvertise(String error);

  /// Tooltip for cancel reconnection button
  ///
  /// In en, this message translates to:
  /// **'Cancel reconnection'**
  String get cancelReconnection;

  /// General settings section header
  ///
  /// In en, this message translates to:
  /// **'General'**
  String get general;

  /// Theme setting label
  ///
  /// In en, this message translates to:
  /// **'Theme'**
  String get theme;

  /// Theme selection dialog title
  ///
  /// In en, this message translates to:
  /// **'Choose Theme'**
  String get chooseTheme;

  /// Light theme option
  ///
  /// In en, this message translates to:
  /// **'Light'**
  String get light;

  /// Dark theme option
  ///
  /// In en, this message translates to:
  /// **'Dark'**
  String get dark;

  /// Description for blue light theme
  ///
  /// In en, this message translates to:
  /// **'Blue light theme'**
  String get blueLightTheme;

  /// Description for blue dark theme
  ///
  /// In en, this message translates to:
  /// **'Blue dark theme'**
  String get blueDarkTheme;

  /// SAR Red theme option
  ///
  /// In en, this message translates to:
  /// **'SAR Red'**
  String get sarRed;

  /// Description for SAR Red theme
  ///
  /// In en, this message translates to:
  /// **'Alert/Emergency mode'**
  String get alertEmergencyMode;

  /// SAR Green theme option
  ///
  /// In en, this message translates to:
  /// **'SAR Green'**
  String get sarGreen;

  /// Description for SAR Green theme
  ///
  /// In en, this message translates to:
  /// **'Safe/All Clear mode'**
  String get safeAllClearMode;

  /// Auto/System theme option
  ///
  /// In en, this message translates to:
  /// **'Auto (System)'**
  String get autoSystem;

  /// Description for system theme
  ///
  /// In en, this message translates to:
  /// **'Follow system theme'**
  String get followSystemTheme;

  /// Setting to show RX/TX indicators
  ///
  /// In en, this message translates to:
  /// **'Show RX/TX Indicators'**
  String get showRxTxIndicators;

  /// Description for RX/TX indicators setting
  ///
  /// In en, this message translates to:
  /// **'Display packet activity indicators in top bar'**
  String get displayPacketActivity;

  /// Setting to disable the map tab
  ///
  /// In en, this message translates to:
  /// **'Disable Map'**
  String get disableMap;

  /// Description for disable map setting
  ///
  /// In en, this message translates to:
  /// **'Hide the map tab to reduce battery usage'**
  String get disableMapDescription;

  /// Language setting label
  ///
  /// In en, this message translates to:
  /// **'Language'**
  String get language;

  /// Language selection dialog title
  ///
  /// In en, this message translates to:
  /// **'Choose Language'**
  String get chooseLanguage;

  /// Save button label
  ///
  /// In en, this message translates to:
  /// **'Save'**
  String get save;

  /// Cancel button label
  ///
  /// In en, this message translates to:
  /// **'Cancel'**
  String get cancel;

  /// Close button label
  ///
  /// In en, this message translates to:
  /// **'Close'**
  String get close;

  /// About section header
  ///
  /// In en, this message translates to:
  /// **'About'**
  String get about;

  /// App version label
  ///
  /// In en, this message translates to:
  /// **'App Version'**
  String get appVersion;

  /// App name label
  ///
  /// In en, this message translates to:
  /// **'App Name'**
  String get appName;

  /// About dialog title
  ///
  /// In en, this message translates to:
  /// **'About MeshCore SAR'**
  String get aboutMeshCoreSar;

  /// About dialog description
  ///
  /// In en, this message translates to:
  /// **'A Search & Rescue application designed for emergency response teams. Features include:\n\n• BLE mesh networking for device-to-device communication\n• Offline maps with multiple layer options\n• Real-time team member tracking\n• SAR tactical markers (found person, fire, staging)\n• Contact management and messaging\n• GPS tracking with compass heading\n• Map tile caching for offline use'**
  String get aboutDescription;

  /// Technologies used section title
  ///
  /// In en, this message translates to:
  /// **'Technologies Used:'**
  String get technologiesUsed;

  /// List of technologies used
  ///
  /// In en, this message translates to:
  /// **'• Flutter for cross-platform development\n• BLE (Bluetooth Low Energy) for mesh networking\n• OpenStreetMap for mapping\n• Provider for state management\n• SharedPreferences for local storage'**
  String get technologiesList;

  /// More info button label
  ///
  /// In en, this message translates to:
  /// **'More Info'**
  String get moreInfo;

  /// Package name label
  ///
  /// In en, this message translates to:
  /// **'Package Name'**
  String get packageName;

  /// Sample data section header
  ///
  /// In en, this message translates to:
  /// **'Sample Data'**
  String get sampleData;

  /// Sample data section description
  ///
  /// In en, this message translates to:
  /// **'Load or clear sample contacts, channel messages, and SAR markers for testing'**
  String get sampleDataDescription;

  /// Load sample data button
  ///
  /// In en, this message translates to:
  /// **'Load Sample Data'**
  String get loadSampleData;

  /// Clear all data button
  ///
  /// In en, this message translates to:
  /// **'Clear All Data'**
  String get clearAllData;

  /// Clear data confirmation dialog title
  ///
  /// In en, this message translates to:
  /// **'Clear All Data'**
  String get clearAllDataConfirmTitle;

  /// Clear data confirmation message
  ///
  /// In en, this message translates to:
  /// **'This will clear all contacts and SAR markers. Are you sure?'**
  String get clearAllDataConfirmMessage;

  /// Clear button label
  ///
  /// In en, this message translates to:
  /// **'Clear'**
  String get clear;

  /// Success message after loading sample data
  ///
  /// In en, this message translates to:
  /// **'Loaded {teamCount} team members, {channelCount} channels, {sarCount} SAR markers, {messageCount} messages'**
  String loadedSampleData(
    int teamCount,
    int channelCount,
    int sarCount,
    int messageCount,
  );

  /// Error message when sample data fails to load
  ///
  /// In en, this message translates to:
  /// **'Failed to load sample data: {error}'**
  String failedToLoadSampleData(String error);

  /// Success message after clearing all data
  ///
  /// In en, this message translates to:
  /// **'All data cleared'**
  String get allDataCleared;

  /// Error message when background tracking fails to start
  ///
  /// In en, this message translates to:
  /// **'Failed to start background tracking. Check permissions and BLE connection.'**
  String get failedToStartBackgroundTracking;

  /// Success message for location broadcast
  ///
  /// In en, this message translates to:
  /// **'Location broadcast: {latitude}, {longitude}'**
  String locationBroadcast(String latitude, String longitude);

  /// Information about default PIN for pairing
  ///
  /// In en, this message translates to:
  /// **'The default pin for devices without a screen is 123456. Trouble pairing? Forget the bluetooth device in system settings.'**
  String get defaultPinInfo;

  /// Empty state message when there are no messages
  ///
  /// In en, this message translates to:
  /// **'No messages yet'**
  String get noMessagesYet;

  /// Instruction to pull down to refresh messages
  ///
  /// In en, this message translates to:
  /// **'Pull down to sync messages'**
  String get pullDownToSync;

  /// Delete contact action label
  ///
  /// In en, this message translates to:
  /// **'Delete Contact'**
  String get deleteContact;

  /// Delete button label
  ///
  /// In en, this message translates to:
  /// **'Delete'**
  String get delete;

  /// Action to view contact location on map
  ///
  /// In en, this message translates to:
  /// **'View on Map'**
  String get viewOnMap;

  /// Refresh button label
  ///
  /// In en, this message translates to:
  /// **'Refresh'**
  String get refresh;

  /// Action to reset contact path for re-routing
  ///
  /// In en, this message translates to:
  /// **'Reset Path (Re-route)'**
  String get resetPath;

  /// Success message when public key is copied
  ///
  /// In en, this message translates to:
  /// **'Public key copied to clipboard'**
  String get publicKeyCopied;

  /// Success message when a value is copied to clipboard
  ///
  /// In en, this message translates to:
  /// **'{label} copied to clipboard'**
  String copiedToClipboard(String label);

  /// Validation message for empty password field
  ///
  /// In en, this message translates to:
  /// **'Please enter a password'**
  String get pleaseEnterPassword;

  /// Error message when contact sync fails
  ///
  /// In en, this message translates to:
  /// **'Failed to sync contacts: {error}'**
  String failedToSyncContacts(String error);

  /// Success message after successful room login
  ///
  /// In en, this message translates to:
  /// **'Logged in successfully! Waiting for room messages...'**
  String get loggedInSuccessfully;

  /// Error message when room login fails
  ///
  /// In en, this message translates to:
  /// **'Login failed - incorrect password'**
  String get loginFailed;

  /// Status message during room login process
  ///
  /// In en, this message translates to:
  /// **'Logging in to {roomName}...'**
  String loggingIn(String roomName);

  /// Error message when login command fails to send
  ///
  /// In en, this message translates to:
  /// **'Failed to send login: {error}'**
  String failedToSendLogin(String error);

  /// Warning title for low GPS accuracy
  ///
  /// In en, this message translates to:
  /// **'Low Location Accuracy'**
  String get lowLocationAccuracy;

  /// Continue button label
  ///
  /// In en, this message translates to:
  /// **'Continue'**
  String get continue_;

  /// Action to send SAR marker
  ///
  /// In en, this message translates to:
  /// **'Send SAR marker'**
  String get sendSarMarker;

  /// Action to delete a map drawing
  ///
  /// In en, this message translates to:
  /// **'Delete Drawing'**
  String get deleteDrawing;

  /// Drawing tools section or menu title
  ///
  /// In en, this message translates to:
  /// **'Drawing Tools'**
  String get drawingTools;

  /// Map drawing mode: line
  ///
  /// In en, this message translates to:
  /// **'Draw Line'**
  String get drawLine;

  /// Description for line drawing mode
  ///
  /// In en, this message translates to:
  /// **'Draw a freehand line on the map'**
  String get drawLineDesc;

  /// Map drawing mode: rectangle
  ///
  /// In en, this message translates to:
  /// **'Draw Rectangle'**
  String get drawRectangle;

  /// Description for rectangle drawing mode
  ///
  /// In en, this message translates to:
  /// **'Draw a rectangular area on the map'**
  String get drawRectangleDesc;

  /// Map drawing mode: measure distance
  ///
  /// In en, this message translates to:
  /// **'Measure Distance'**
  String get measureDistance;

  /// Description for distance measurement mode
  ///
  /// In en, this message translates to:
  /// **'Long press two points to measure'**
  String get measureDistanceDesc;

  /// Tooltip to clear measurement
  ///
  /// In en, this message translates to:
  /// **'Clear Measurement'**
  String get clearMeasurement;

  /// Label showing measured distance
  ///
  /// In en, this message translates to:
  /// **'Distance: {distance}'**
  String distanceLabel(String distance);

  /// Instruction when first measurement point is set
  ///
  /// In en, this message translates to:
  /// **'Long press for second point'**
  String get longPressForSecondPoint;

  /// Instruction to start measurement
  ///
  /// In en, this message translates to:
  /// **'Long press to set first point'**
  String get longPressToStartMeasurement;

  /// Instruction to restart measurement after completion
  ///
  /// In en, this message translates to:
  /// **'Long press to start new measurement'**
  String get longPressToStartNewMeasurement;

  /// Action to share drawings to network
  ///
  /// In en, this message translates to:
  /// **'Share Drawings'**
  String get shareDrawings;

  /// Action to clear all local drawings
  ///
  /// In en, this message translates to:
  /// **'Clear All Drawings'**
  String get clearAllDrawings;

  /// Tooltip to complete drawing a line
  ///
  /// In en, this message translates to:
  /// **'Complete Line'**
  String get completeLine;

  /// Subtitle showing how many drawings will be broadcast
  ///
  /// In en, this message translates to:
  /// **'Broadcast {count} drawing{plural} to team'**
  String broadcastDrawingsToTeam(int count, String plural);

  /// Subtitle for remove all drawings action
  ///
  /// In en, this message translates to:
  /// **'Remove all {count} drawing{plural}'**
  String removeAllDrawings(int count, String plural);

  /// Confirmation dialog message for deleting all drawings
  ///
  /// In en, this message translates to:
  /// **'Delete all {count} drawing{plural} from the map?'**
  String deleteAllDrawingsConfirm(int count, String plural);

  /// Generic drawing label
  ///
  /// In en, this message translates to:
  /// **'Drawing'**
  String get drawing;

  /// Title for share drawings dialog
  ///
  /// In en, this message translates to:
  /// **'Share {count} Drawing{plural}'**
  String shareDrawingsCount(int count, String plural);

  /// Toggle to show/hide received drawings from other team members
  ///
  /// In en, this message translates to:
  /// **'Show Received Drawings'**
  String get showReceivedDrawings;

  /// Subtitle when received drawings are visible
  ///
  /// In en, this message translates to:
  /// **'Showing all drawings'**
  String get showingAllDrawings;

  /// Subtitle when received drawings are hidden
  ///
  /// In en, this message translates to:
  /// **'Showing only your drawings'**
  String get showingOnlyYourDrawings;

  /// Toggle to show/hide SAR markers on map
  ///
  /// In en, this message translates to:
  /// **'Show SAR Markers'**
  String get showSarMarkers;

  /// Subtitle when SAR markers are visible
  ///
  /// In en, this message translates to:
  /// **'Showing SAR markers'**
  String get showingSarMarkers;

  /// Subtitle when SAR markers are hidden
  ///
  /// In en, this message translates to:
  /// **'Hiding SAR markers'**
  String get hidingSarMarkers;

  /// Clear all button label
  ///
  /// In en, this message translates to:
  /// **'Clear All'**
  String get clearAll;

  /// Public channel option for sharing
  ///
  /// In en, this message translates to:
  /// **'Public Channel'**
  String get publicChannel;

  /// Description for public channel broadcast
  ///
  /// In en, this message translates to:
  /// **'Broadcast to all nearby nodes (ephemeral)'**
  String get broadcastToAll;

  /// Description for room storage permanence
  ///
  /// In en, this message translates to:
  /// **'Stored permanently in room'**
  String get storedPermanently;

  /// Error message when device is not connected for direct messaging
  ///
  /// In en, this message translates to:
  /// **'Not connected to device'**
  String get notConnectedToDevice;

  /// Placeholder text for message input field
  ///
  /// In en, this message translates to:
  /// **'Type your message...'**
  String get typeYourMessage;

  /// Subtitle for SAR marker sheet header
  ///
  /// In en, this message translates to:
  /// **'Quick location marker'**
  String get quickLocationMarker;

  /// Label for marker type selection section
  ///
  /// In en, this message translates to:
  /// **'Marker Type'**
  String get markerType;

  /// Label for destination selection section
  ///
  /// In en, this message translates to:
  /// **'Send To'**
  String get sendTo;

  /// Warning when no rooms or channels exist
  ///
  /// In en, this message translates to:
  /// **'No destinations available.'**
  String get noDestinationsAvailable;

  /// Placeholder for destination dropdown
  ///
  /// In en, this message translates to:
  /// **'Select destination...'**
  String get selectDestination;

  /// Information about ephemeral channel broadcasts
  ///
  /// In en, this message translates to:
  /// **'Ephemeral: Broadcast over-the-air only. Not stored - nodes must be online.'**
  String get ephemeralBroadcastInfo;

  /// Information about persistent room storage
  ///
  /// In en, this message translates to:
  /// **'Persistent: Stored immutably in room. Synced automatically and preserved offline.'**
  String get persistentRoomInfo;

  /// Label for location section
  ///
  /// In en, this message translates to:
  /// **'Location'**
  String get location;

  /// Badge showing location is from map tap
  ///
  /// In en, this message translates to:
  /// **'From Map'**
  String get fromMap;

  /// Loading message while fetching GPS location
  ///
  /// In en, this message translates to:
  /// **'Getting location...'**
  String get gettingLocation;

  /// Title for location error messages
  ///
  /// In en, this message translates to:
  /// **'Location Error'**
  String get locationError;

  /// Retry button label
  ///
  /// In en, this message translates to:
  /// **'Retry'**
  String get retry;

  /// Tooltip for refresh location button
  ///
  /// In en, this message translates to:
  /// **'Refresh location'**
  String get refreshLocation;

  /// Display of GPS accuracy in meters
  ///
  /// In en, this message translates to:
  /// **'Accuracy: ±{accuracy}m'**
  String accuracyMeters(int accuracy);

  /// Label for optional notes field
  ///
  /// In en, this message translates to:
  /// **'Notes (optional)'**
  String get notesOptional;

  /// Placeholder for notes field
  ///
  /// In en, this message translates to:
  /// **'Add additional information...'**
  String get addAdditionalInformation;

  /// Warning dialog content for low GPS accuracy
  ///
  /// In en, this message translates to:
  /// **'Location accuracy is ±{accuracy}m. This may not be accurate enough for SAR operations.\n\nContinue anyway?'**
  String lowAccuracyWarning(int accuracy);

  /// Title for room login dialog
  ///
  /// In en, this message translates to:
  /// **'Login to Room'**
  String get loginToRoom;

  /// Information about room password
  ///
  /// In en, this message translates to:
  /// **'Enter the password to access this room. The password will be saved for future use.'**
  String get enterPasswordInfo;

  /// Password field label
  ///
  /// In en, this message translates to:
  /// **'Password'**
  String get password;

  /// Password field hint
  ///
  /// In en, this message translates to:
  /// **'Enter room password'**
  String get enterRoomPassword;

  /// Button text while logging in
  ///
  /// In en, this message translates to:
  /// **'Logging in...'**
  String get loggingInDots;

  /// Login button label
  ///
  /// In en, this message translates to:
  /// **'Login'**
  String get login;

  /// Error message when adding room fails
  ///
  /// In en, this message translates to:
  /// **'Failed to add room to device: {error}\n\nThe room may not have advertised yet.\nTry waiting for the room to broadcast.'**
  String failedToAddRoom(String error);

  /// Direct routing indicator
  ///
  /// In en, this message translates to:
  /// **'Direct'**
  String get direct;

  /// Flood routing indicator
  ///
  /// In en, this message translates to:
  /// **'Flood'**
  String get flood;

  /// Auto send mode - uses current path
  ///
  /// In en, this message translates to:
  /// **'Auto Send'**
  String get autoSend;

  /// Description for auto send mode
  ///
  /// In en, this message translates to:
  /// **'Send via current path.'**
  String get autoSendDescription;

  /// Send direct mode - zero-hop to contact
  ///
  /// In en, this message translates to:
  /// **'Send Direct'**
  String get sendDirect;

  /// Description for send direct mode
  ///
  /// In en, this message translates to:
  /// **'Send directly to this contact.'**
  String get sendDirectDescription;

  /// Send flood mode - via all repeaters
  ///
  /// In en, this message translates to:
  /// **'Send Flood'**
  String get sendFlood;

  /// Description for send flood mode
  ///
  /// In en, this message translates to:
  /// **'Send via all repeaters.'**
  String get sendFloodDescription;

  /// Logged in status badge
  ///
  /// In en, this message translates to:
  /// **'Logged In'**
  String get loggedIn;

  /// Message when GPS data is not available
  ///
  /// In en, this message translates to:
  /// **'No GPS data'**
  String get noGpsData;

  /// Distance label
  ///
  /// In en, this message translates to:
  /// **'Distance'**
  String get distance;

  /// Warning when direct ping times out
  ///
  /// In en, this message translates to:
  /// **'Direct ping timeout - retrying {name} with flooding...'**
  String directPingTimeout(String name);

  /// Error message when ping fails
  ///
  /// In en, this message translates to:
  /// **'Ping failed to {name} - no response received'**
  String pingFailed(String name);

  /// Confirmation message for deleting contact
  ///
  /// In en, this message translates to:
  /// **'Are you sure you want to delete \"{name}\"?\n\nThis will remove the contact from both the app and the companion radio device.'**
  String deleteContactConfirmation(String name);

  /// Error message when contact removal fails
  ///
  /// In en, this message translates to:
  /// **'Failed to remove contact: {error}'**
  String failedToRemoveContact(String error);

  /// Contact type label
  ///
  /// In en, this message translates to:
  /// **'Type'**
  String get type;

  /// Public key label
  ///
  /// In en, this message translates to:
  /// **'Public Key'**
  String get publicKey;

  /// Last seen label
  ///
  /// In en, this message translates to:
  /// **'Last Seen'**
  String get lastSeen;

  /// Room status section header
  ///
  /// In en, this message translates to:
  /// **'Room Status'**
  String get roomStatus;

  /// Login status label
  ///
  /// In en, this message translates to:
  /// **'Login Status'**
  String get loginStatus;

  /// Not logged in status
  ///
  /// In en, this message translates to:
  /// **'Not Logged In'**
  String get notLoggedIn;

  /// Admin access label
  ///
  /// In en, this message translates to:
  /// **'Admin Access'**
  String get adminAccess;

  /// Yes answer
  ///
  /// In en, this message translates to:
  /// **'Yes'**
  String get yes;

  /// No answer
  ///
  /// In en, this message translates to:
  /// **'No'**
  String get no;

  /// Permissions label
  ///
  /// In en, this message translates to:
  /// **'Permissions'**
  String get permissions;

  /// Password saved label
  ///
  /// In en, this message translates to:
  /// **'Password Saved'**
  String get passwordSaved;

  /// Location section header
  ///
  /// In en, this message translates to:
  /// **'Location:'**
  String get locationColon;

  /// Telemetry section header
  ///
  /// In en, this message translates to:
  /// **'Telemetry'**
  String get telemetry;

  /// Voltage label
  ///
  /// In en, this message translates to:
  /// **'Voltage'**
  String get voltage;

  /// Battery label
  ///
  /// In en, this message translates to:
  /// **'Battery'**
  String get battery;

  /// Temperature label
  ///
  /// In en, this message translates to:
  /// **'Temperature'**
  String get temperature;

  /// Humidity label
  ///
  /// In en, this message translates to:
  /// **'Humidity'**
  String get humidity;

  /// Pressure label
  ///
  /// In en, this message translates to:
  /// **'Pressure'**
  String get pressure;

  /// GPS from telemetry label
  ///
  /// In en, this message translates to:
  /// **'GPS (Telemetry)'**
  String get gpsTelemetry;

  /// Updated timestamp label
  ///
  /// In en, this message translates to:
  /// **'Updated'**
  String get updated;

  /// Info message after path reset
  ///
  /// In en, this message translates to:
  /// **'Path reset for {name}. Next message will find a new route.'**
  String pathResetInfo(String name);

  /// Button to re-login to room
  ///
  /// In en, this message translates to:
  /// **'Re-Login to Room'**
  String get reLoginToRoom;

  /// Compass heading label
  ///
  /// In en, this message translates to:
  /// **'Heading'**
  String get heading;

  /// Elevation/altitude label
  ///
  /// In en, this message translates to:
  /// **'Elevation'**
  String get elevation;

  /// GPS accuracy label
  ///
  /// In en, this message translates to:
  /// **'Accuracy'**
  String get accuracy;

  /// Bearing label in compass
  ///
  /// In en, this message translates to:
  /// **'Bearing'**
  String get bearing;

  /// Direction label in compass
  ///
  /// In en, this message translates to:
  /// **'Direction'**
  String get direction;

  /// Title for filter markers dialog
  ///
  /// In en, this message translates to:
  /// **'Filter Markers'**
  String get filterMarkers;

  /// Tooltip for filter button
  ///
  /// In en, this message translates to:
  /// **'Filter markers'**
  String get filterMarkersTooltip;

  /// Filter option for contacts
  ///
  /// In en, this message translates to:
  /// **'Contacts'**
  String get contactsFilter;

  /// Filter option for repeaters
  ///
  /// In en, this message translates to:
  /// **'Repeaters'**
  String get repeatersFilter;

  /// SAR markers section header
  ///
  /// In en, this message translates to:
  /// **'SAR Markers'**
  String get sarMarkers;

  /// Found person SAR marker type
  ///
  /// In en, this message translates to:
  /// **'Found Person'**
  String get foundPerson;

  /// Fire SAR marker type
  ///
  /// In en, this message translates to:
  /// **'Fire'**
  String get fire;

  /// Staging area SAR marker type
  ///
  /// In en, this message translates to:
  /// **'Staging Area'**
  String get stagingArea;

  /// Button to show all filters
  ///
  /// In en, this message translates to:
  /// **'Show All'**
  String get showAll;

  /// Message when GPS location is unavailable
  ///
  /// In en, this message translates to:
  /// **'Location unavailable'**
  String get locationUnavailable;

  /// Relative bearing direction - ahead
  ///
  /// In en, this message translates to:
  /// **'ahead'**
  String get ahead;

  /// Relative bearing direction - right
  ///
  /// In en, this message translates to:
  /// **'{degrees}° right'**
  String degreesRight(int degrees);

  /// Relative bearing direction - left
  ///
  /// In en, this message translates to:
  /// **'{degrees}° left'**
  String degreesLeft(int degrees);

  /// Latitude and longitude display format
  ///
  /// In en, this message translates to:
  /// **'Lat: {latitude} Lon: {longitude}'**
  String latLonFormat(String latitude, String longitude);

  /// Empty state message when there are no contacts
  ///
  /// In en, this message translates to:
  /// **'No contacts yet'**
  String get noContactsYet;

  /// Instruction to connect device to load contacts
  ///
  /// In en, this message translates to:
  /// **'Connect to a device to load contacts'**
  String get connectToDeviceToLoadContacts;

  /// Section header for team members (chat contacts)
  ///
  /// In en, this message translates to:
  /// **'Team Members'**
  String get teamMembers;

  /// Section header for repeater nodes
  ///
  /// In en, this message translates to:
  /// **'Repeaters'**
  String get repeaters;

  /// Section header for rooms
  ///
  /// In en, this message translates to:
  /// **'Rooms'**
  String get rooms;

  /// Section header for broadcast channels
  ///
  /// In en, this message translates to:
  /// **'Channels'**
  String get channels;

  /// Title for map layer selection dialog
  ///
  /// In en, this message translates to:
  /// **'Select Map Layer'**
  String get selectMapLayer;

  /// OpenStreetMap layer name
  ///
  /// In en, this message translates to:
  /// **'OpenStreetMap'**
  String get openStreetMap;

  /// OpenTopoMap layer name
  ///
  /// In en, this message translates to:
  /// **'OpenTopoMap'**
  String get openTopoMap;

  /// ESRI Satellite imagery layer name
  ///
  /// In en, this message translates to:
  /// **'ESRI Satellite'**
  String get esriSatellite;

  /// Google Hybrid layer name (satellite + labels)
  ///
  /// In en, this message translates to:
  /// **'Google Hybrid'**
  String get googleHybrid;

  /// Google Roadmap layer name (street map)
  ///
  /// In en, this message translates to:
  /// **'Google Roadmap'**
  String get googleRoadmap;

  /// Google Terrain layer name (topographic)
  ///
  /// In en, this message translates to:
  /// **'Google Terrain'**
  String get googleTerrain;

  /// Label when dragging a pin on map
  ///
  /// In en, this message translates to:
  /// **'Drag to Position'**
  String get dragToPosition;

  /// Label for creating SAR marker from pin
  ///
  /// In en, this message translates to:
  /// **'Create SAR Marker'**
  String get createSarMarker;

  /// Compass title in detailed compass dialog
  ///
  /// In en, this message translates to:
  /// **'Compass'**
  String get compass;

  /// Subtitle for compass dialog
  ///
  /// In en, this message translates to:
  /// **'Navigation & Contacts'**
  String get navigationAndContacts;

  /// Label for SAR alert badge on messages
  ///
  /// In en, this message translates to:
  /// **'SAR ALERT'**
  String get sarAlert;

  /// Success message when text is copied
  ///
  /// In en, this message translates to:
  /// **'Text copied to clipboard'**
  String get textCopiedToClipboard;

  /// Error when sender info is missing for reply
  ///
  /// In en, this message translates to:
  /// **'Cannot reply: sender information missing'**
  String get cannotReplySenderMissing;

  /// Error when contact not found for reply
  ///
  /// In en, this message translates to:
  /// **'Cannot reply: contact not found'**
  String get cannotReplyContactNotFound;

  /// Option to copy message text to clipboard
  ///
  /// In en, this message translates to:
  /// **'Copy text'**
  String get copyText;

  /// Option to save SAR message as a reusable template
  ///
  /// In en, this message translates to:
  /// **'Save as Template'**
  String get saveAsTemplate;

  /// Success message when SAR template is saved
  ///
  /// In en, this message translates to:
  /// **'Template saved successfully'**
  String get templateSaved;

  /// Error message when trying to save duplicate template
  ///
  /// In en, this message translates to:
  /// **'Template with this emoji already exists'**
  String get templateAlreadyExists;

  /// Dialog title for deleting a message
  ///
  /// In en, this message translates to:
  /// **'Delete message'**
  String get deleteMessage;

  /// Confirmation text for message deletion
  ///
  /// In en, this message translates to:
  /// **'Are you sure you want to delete this message?'**
  String get deleteMessageConfirmation;

  /// Option to share SAR marker location
  ///
  /// In en, this message translates to:
  /// **'Share location'**
  String get shareLocation;

  /// Formatted text for sharing SAR marker location
  ///
  /// In en, this message translates to:
  /// **'{markerInfo}\n\nCoordinates: {lat}, {lon}\n\nGoogle Maps: {url}'**
  String shareLocationText(
    String markerInfo,
    String lat,
    String lon,
    String url,
  );

  /// Subject line when sharing SAR marker location
  ///
  /// In en, this message translates to:
  /// **'SAR Location'**
  String get sarLocationShare;

  /// Time indicator for very recent activity
  ///
  /// In en, this message translates to:
  /// **'Just now'**
  String get justNow;

  /// Time indicator for minutes ago
  ///
  /// In en, this message translates to:
  /// **'{minutes}m ago'**
  String minutesAgo(int minutes);

  /// Time indicator for hours ago
  ///
  /// In en, this message translates to:
  /// **'{hours}h ago'**
  String hoursAgo(int hours);

  /// Time indicator for days ago
  ///
  /// In en, this message translates to:
  /// **'{days}d ago'**
  String daysAgo(int days);

  /// Time indicator for seconds ago
  ///
  /// In en, this message translates to:
  /// **'{seconds}s ago'**
  String secondsAgo(int seconds);

  /// Delivery status: sending
  ///
  /// In en, this message translates to:
  /// **'Sending...'**
  String get sending;

  /// Delivery status: sent
  ///
  /// In en, this message translates to:
  /// **'Sent'**
  String get sent;

  /// Delivery status: delivered
  ///
  /// In en, this message translates to:
  /// **'Delivered'**
  String get delivered;

  /// Delivery status with round-trip time
  ///
  /// In en, this message translates to:
  /// **'Delivered ({time}ms)'**
  String deliveredWithTime(int time);

  /// Delivery status: failed
  ///
  /// In en, this message translates to:
  /// **'Failed'**
  String get failed;

  /// Delivery status for channel messages (no echoes yet)
  ///
  /// In en, this message translates to:
  /// **'Broadcast'**
  String get broadcast;

  /// Grouped message delivery count
  ///
  /// In en, this message translates to:
  /// **'Delivered to {delivered}/{total} contacts'**
  String deliveredToContacts(int delivered, int total);

  /// Status when all recipients received the message
  ///
  /// In en, this message translates to:
  /// **'All delivered'**
  String get allDelivered;

  /// Header for expandable recipient list
  ///
  /// In en, this message translates to:
  /// **'Recipient Details'**
  String get recipientDetails;

  /// Delivery status: pending/waiting
  ///
  /// In en, this message translates to:
  /// **'Pending'**
  String get pending;

  /// SAR marker type: found person
  ///
  /// In en, this message translates to:
  /// **'Found Person'**
  String get sarMarkerFoundPerson;

  /// SAR marker type: fire
  ///
  /// In en, this message translates to:
  /// **'Fire Location'**
  String get sarMarkerFire;

  /// SAR marker type: staging area
  ///
  /// In en, this message translates to:
  /// **'Staging Area'**
  String get sarMarkerStagingArea;

  /// SAR marker type: object
  ///
  /// In en, this message translates to:
  /// **'Object Found'**
  String get sarMarkerObject;

  /// Sender label in notifications
  ///
  /// In en, this message translates to:
  /// **'From'**
  String get from;

  /// Coordinates label
  ///
  /// In en, this message translates to:
  /// **'Coordinates'**
  String get coordinates;

  /// Notification action text
  ///
  /// In en, this message translates to:
  /// **'Tap to view on map'**
  String get tapToViewOnMap;

  /// Section title for radio settings
  ///
  /// In en, this message translates to:
  /// **'Radio Settings'**
  String get radioSettings;

  /// Label for radio frequency field
  ///
  /// In en, this message translates to:
  /// **'Frequency (MHz)'**
  String get frequencyMHz;

  /// Helper text example for frequency
  ///
  /// In en, this message translates to:
  /// **'e.g., 869.618'**
  String get frequencyExample;

  /// Label for bandwidth dropdown
  ///
  /// In en, this message translates to:
  /// **'Bandwidth'**
  String get bandwidth;

  /// Label for spreading factor dropdown
  ///
  /// In en, this message translates to:
  /// **'Spreading Factor'**
  String get spreadingFactor;

  /// Label for coding rate dropdown
  ///
  /// In en, this message translates to:
  /// **'Coding Rate'**
  String get codingRate;

  /// Label for TX power field
  ///
  /// In en, this message translates to:
  /// **'TX Power (dBm)'**
  String get txPowerDbm;

  /// Helper text showing maximum TX power
  ///
  /// In en, this message translates to:
  /// **'Max: {power} dBm'**
  String maxPowerDbm(int power);

  /// Label for the current user in message bubbles
  ///
  /// In en, this message translates to:
  /// **'You'**
  String get you;

  /// Error message when export fails
  ///
  /// In en, this message translates to:
  /// **'Export failed: {error}'**
  String exportFailed(String error);

  /// Error message when import fails
  ///
  /// In en, this message translates to:
  /// **'Import failed: {error}'**
  String importFailed(String error);

  /// Unknown value label
  ///
  /// In en, this message translates to:
  /// **'Unknown'**
  String get unknown;

  /// Section header for online map layers
  ///
  /// In en, this message translates to:
  /// **'Online Layers'**
  String get onlineLayers;

  /// Location trail title
  ///
  /// In en, this message translates to:
  /// **'Location Trail'**
  String get locationTrail;

  /// Toggle to show/hide trail on map
  ///
  /// In en, this message translates to:
  /// **'Show Trail on Map'**
  String get showTrailOnMap;

  /// Trail visibility status - visible
  ///
  /// In en, this message translates to:
  /// **'Trail is visible on the map'**
  String get trailVisible;

  /// Trail visibility status - hidden but recording
  ///
  /// In en, this message translates to:
  /// **'Trail is hidden (still recording)'**
  String get trailHiddenRecording;

  /// Duration label
  ///
  /// In en, this message translates to:
  /// **'Duration'**
  String get duration;

  /// Trail points count label
  ///
  /// In en, this message translates to:
  /// **'Points'**
  String get points;

  /// Button to clear location trail
  ///
  /// In en, this message translates to:
  /// **'Clear Trail'**
  String get clearTrail;

  /// Confirmation dialog title
  ///
  /// In en, this message translates to:
  /// **'Clear Trail?'**
  String get clearTrailQuestion;

  /// Confirmation dialog message
  ///
  /// In en, this message translates to:
  /// **'Are you sure you want to clear the current location trail? This action cannot be undone.'**
  String get clearTrailConfirmation;

  /// Message when no trail exists
  ///
  /// In en, this message translates to:
  /// **'No trail recorded yet'**
  String get noTrailRecorded;

  /// Instructions to start trail recording
  ///
  /// In en, this message translates to:
  /// **'Start location tracking to record your trail'**
  String get startTrackingToRecord;

  /// Trail controls tooltip
  ///
  /// In en, this message translates to:
  /// **'Trail Controls'**
  String get trailControls;

  /// Contact trails section header
  ///
  /// In en, this message translates to:
  /// **'Contact Trails'**
  String get contactTrails;

  /// Toggle label to show all contact trails
  ///
  /// In en, this message translates to:
  /// **'Show All Contact Trails'**
  String get showAllContactTrails;

  /// Subtitle when no contacts have trails
  ///
  /// In en, this message translates to:
  /// **'No contacts with location history'**
  String get noContactsWithLocationHistory;

  /// Subtitle showing number of contacts with trails
  ///
  /// In en, this message translates to:
  /// **'Showing trails for {count} contacts'**
  String showingTrailsForContacts(int count);

  /// Expansion tile title for individual contact trails
  ///
  /// In en, this message translates to:
  /// **'Individual Contact Trails'**
  String get individualContactTrails;

  /// Device information section header
  ///
  /// In en, this message translates to:
  /// **'Device Information'**
  String get deviceInformation;

  /// Bluetooth Low Energy device name label
  ///
  /// In en, this message translates to:
  /// **'BLE Name'**
  String get bleName;

  /// Mesh network name label
  ///
  /// In en, this message translates to:
  /// **'Mesh Name'**
  String get meshName;

  /// Label when a value is not set
  ///
  /// In en, this message translates to:
  /// **'Not set'**
  String get notSet;

  /// Device model label
  ///
  /// In en, this message translates to:
  /// **'Model'**
  String get model;

  /// Version label
  ///
  /// In en, this message translates to:
  /// **'Version'**
  String get version;

  /// Firmware build date label
  ///
  /// In en, this message translates to:
  /// **'Build Date'**
  String get buildDate;

  /// Firmware label
  ///
  /// In en, this message translates to:
  /// **'Firmware'**
  String get firmware;

  /// Maximum contacts capacity label
  ///
  /// In en, this message translates to:
  /// **'Max Contacts'**
  String get maxContacts;

  /// Maximum channels capacity label
  ///
  /// In en, this message translates to:
  /// **'Max Channels'**
  String get maxChannels;

  /// Public information section header
  ///
  /// In en, this message translates to:
  /// **'Public Info'**
  String get publicInfo;

  /// Mesh network name field label
  ///
  /// In en, this message translates to:
  /// **'Mesh Network Name'**
  String get meshNetworkName;

  /// Helper text for mesh network name field
  ///
  /// In en, this message translates to:
  /// **'Name broadcast in mesh advertisements'**
  String get nameBroadcastInMesh;

  /// Telemetry and location sharing toggle label
  ///
  /// In en, this message translates to:
  /// **'Telemetry & Location Sharing'**
  String get telemetryAndLocationSharing;

  /// Latitude field label (short form)
  ///
  /// In en, this message translates to:
  /// **'Lat'**
  String get lat;

  /// Longitude field label (short form)
  ///
  /// In en, this message translates to:
  /// **'Lon'**
  String get lon;

  /// Tooltip for use current location button
  ///
  /// In en, this message translates to:
  /// **'Use current location'**
  String get useCurrentLocation;

  /// Device type: none or unknown
  ///
  /// In en, this message translates to:
  /// **'None/Unknown'**
  String get noneUnknown;

  /// Device type: chat node
  ///
  /// In en, this message translates to:
  /// **'Chat Node'**
  String get chatNode;

  /// Device type: repeater
  ///
  /// In en, this message translates to:
  /// **'Repeater'**
  String get repeater;

  /// Device type: room or channel
  ///
  /// In en, this message translates to:
  /// **'Room/Channel'**
  String get roomChannel;

  /// Generic device type with number
  ///
  /// In en, this message translates to:
  /// **'Type {number}'**
  String typeNumber(int number);

  /// Short success message when copying to clipboard
  ///
  /// In en, this message translates to:
  /// **'Copied {label} to clipboard'**
  String copiedToClipboardShort(String label);

  /// Generic error message for save failures
  ///
  /// In en, this message translates to:
  /// **'Failed to save: {error}'**
  String failedToSave(String error);

  /// Error message when getting location fails
  ///
  /// In en, this message translates to:
  /// **'Failed to get location: {error}'**
  String failedToGetLocation(String error);

  /// SAR templates menu title
  ///
  /// In en, this message translates to:
  /// **'SAR Templates'**
  String get sarTemplates;

  /// Subtitle for SAR templates settings
  ///
  /// In en, this message translates to:
  /// **'Manage cursor on target templates'**
  String get manageSarTemplates;

  /// Button to add new SAR template
  ///
  /// In en, this message translates to:
  /// **'Add Template'**
  String get addTemplate;

  /// Dialog title for editing template
  ///
  /// In en, this message translates to:
  /// **'Edit Template'**
  String get editTemplate;

  /// Action to delete template
  ///
  /// In en, this message translates to:
  /// **'Delete Template'**
  String get deleteTemplate;

  /// Label for template name field
  ///
  /// In en, this message translates to:
  /// **'Template Name'**
  String get templateName;

  /// Hint text for template name
  ///
  /// In en, this message translates to:
  /// **'e.g. Found Person'**
  String get templateNameHint;

  /// Label for template emoji field
  ///
  /// In en, this message translates to:
  /// **'Emoji'**
  String get templateEmoji;

  /// Validation error when emoji field is empty
  ///
  /// In en, this message translates to:
  /// **'Emoji is required'**
  String get emojiRequired;

  /// Validation error when name field is empty
  ///
  /// In en, this message translates to:
  /// **'Name is required'**
  String get nameRequired;

  /// Label for template description field
  ///
  /// In en, this message translates to:
  /// **'Description (Optional)'**
  String get templateDescription;

  /// Hint text for template description
  ///
  /// In en, this message translates to:
  /// **'Add additional context...'**
  String get templateDescriptionHint;

  /// Label for template color picker
  ///
  /// In en, this message translates to:
  /// **'Color'**
  String get templateColor;

  /// Label for format preview
  ///
  /// In en, this message translates to:
  /// **'Preview (SAR Message Format)'**
  String get previewFormat;

  /// Button to import templates from clipboard
  ///
  /// In en, this message translates to:
  /// **'Import'**
  String get importFromClipboard;

  /// Button to export templates to clipboard
  ///
  /// In en, this message translates to:
  /// **'Export'**
  String get exportToClipboard;

  /// Confirmation message for template deletion
  ///
  /// In en, this message translates to:
  /// **'Delete template \'{name}\'?'**
  String deleteTemplateConfirmation(String name);

  /// Success message when template is added
  ///
  /// In en, this message translates to:
  /// **'Template added'**
  String get templateAdded;

  /// Success message when template is updated
  ///
  /// In en, this message translates to:
  /// **'Template updated'**
  String get templateUpdated;

  /// Success message when template is deleted
  ///
  /// In en, this message translates to:
  /// **'Template deleted'**
  String get templateDeleted;

  /// Success message after importing templates
  ///
  /// In en, this message translates to:
  /// **'{count, plural, =0{No templates imported} =1{Imported 1 template} other{Imported {count} templates}}'**
  String templatesImported(int count);

  /// Success message after exporting templates
  ///
  /// In en, this message translates to:
  /// **'{count, plural, =1{Exported 1 template to clipboard} other{Exported {count} templates to clipboard}}'**
  String templatesExported(int count);

  /// Action to reset templates to defaults
  ///
  /// In en, this message translates to:
  /// **'Reset to Defaults'**
  String get resetToDefaults;

  /// Confirmation message for reset to defaults
  ///
  /// In en, this message translates to:
  /// **'This will delete all custom templates and restore the 4 default templates. Continue?'**
  String get resetToDefaultsConfirmation;

  /// Reset button label
  ///
  /// In en, this message translates to:
  /// **'Reset'**
  String get reset;

  /// Success message after reset
  ///
  /// In en, this message translates to:
  /// **'Templates reset to defaults'**
  String get resetComplete;

  /// Message when no templates exist
  ///
  /// In en, this message translates to:
  /// **'No templates available'**
  String get noTemplates;

  /// Helper text when no templates exist
  ///
  /// In en, this message translates to:
  /// **'Tap + to create your first template'**
  String get tapAddToCreate;

  /// OK button label
  ///
  /// In en, this message translates to:
  /// **'OK'**
  String get ok;

  /// Permissions section header
  ///
  /// In en, this message translates to:
  /// **'Permissions'**
  String get permissionsSection;

  /// Location permission label
  ///
  /// In en, this message translates to:
  /// **'Location Permission'**
  String get locationPermission;

  /// Loading state indicator
  ///
  /// In en, this message translates to:
  /// **'Checking...'**
  String get checking;

  /// Location permission status: granted always
  ///
  /// In en, this message translates to:
  /// **'Granted (Always)'**
  String get locationPermissionGrantedAlways;

  /// Location permission status: granted while in use
  ///
  /// In en, this message translates to:
  /// **'Granted (While In Use)'**
  String get locationPermissionGrantedWhileInUse;

  /// Location permission status: denied, user can request
  ///
  /// In en, this message translates to:
  /// **'Denied - Tap to request'**
  String get locationPermissionDeniedTapToRequest;

  /// Location permission status: permanently denied
  ///
  /// In en, this message translates to:
  /// **'Permanently Denied - Open Settings'**
  String get locationPermissionPermanentlyDeniedOpenSettings;

  /// Content for location permission dialog when permanently denied
  ///
  /// In en, this message translates to:
  /// **'Location permission is permanently denied. Please enable it in your device settings to use GPS tracking and location sharing features.'**
  String get locationPermissionDialogContent;

  /// Button to open device settings
  ///
  /// In en, this message translates to:
  /// **'Open Settings'**
  String get openSettings;

  /// Success message when location permission is granted
  ///
  /// In en, this message translates to:
  /// **'Location permission granted!'**
  String get locationPermissionGranted;

  /// Info message about location permission requirement
  ///
  /// In en, this message translates to:
  /// **'Location permission is required for GPS tracking and location sharing.'**
  String get locationPermissionRequiredForGps;

  /// Info message when permission is already granted
  ///
  /// In en, this message translates to:
  /// **'Location permission is already granted.'**
  String get locationPermissionAlreadyGranted;

  /// SAR Navy Blue theme name
  ///
  /// In en, this message translates to:
  /// **'SAR Navy Blue'**
  String get sarNavyBlue;

  /// Description for SAR Navy Blue theme
  ///
  /// In en, this message translates to:
  /// **'Professional/Operations Mode'**
  String get sarNavyBlueDescription;

  /// Title for recipient selector sheet
  ///
  /// In en, this message translates to:
  /// **'Select Recipient'**
  String get selectRecipient;

  /// Subtitle for public channel option
  ///
  /// In en, this message translates to:
  /// **'Broadcast to all nearby'**
  String get broadcastToAllNearby;

  /// Placeholder text for recipient search field
  ///
  /// In en, this message translates to:
  /// **'Search recipients...'**
  String get searchRecipients;

  /// Message when no contacts match search
  ///
  /// In en, this message translates to:
  /// **'No contacts found'**
  String get noContactsFound;

  /// Message when no rooms match search
  ///
  /// In en, this message translates to:
  /// **'No rooms found'**
  String get noRoomsFound;

  /// Message when no recipients exist (contacts, rooms, or channels)
  ///
  /// In en, this message translates to:
  /// **'No recipients available'**
  String get noRecipientsAvailable;

  /// Message when no channels match the search
  ///
  /// In en, this message translates to:
  /// **'No channels found'**
  String get noChannelsFound;

  /// Notification title for new message
  ///
  /// In en, this message translates to:
  /// **'New message'**
  String get newMessage;

  /// Channel label in notifications
  ///
  /// In en, this message translates to:
  /// **'Channel'**
  String get channel;

  /// Sample team member name
  ///
  /// In en, this message translates to:
  /// **'Police Lead'**
  String get samplePoliceLead;

  /// Sample team member name
  ///
  /// In en, this message translates to:
  /// **'Drone Operator'**
  String get sampleDroneOperator;

  /// Sample team member name
  ///
  /// In en, this message translates to:
  /// **'Firefighter'**
  String get sampleFirefighterAlpha;

  /// Sample team member name
  ///
  /// In en, this message translates to:
  /// **'Medic'**
  String get sampleMedicCharlie;

  /// Sample team member name
  ///
  /// In en, this message translates to:
  /// **'Command'**
  String get sampleCommandDelta;

  /// Sample team member name
  ///
  /// In en, this message translates to:
  /// **'Fire Engine'**
  String get sampleFireEngine;

  /// Sample team member name
  ///
  /// In en, this message translates to:
  /// **'Air Support'**
  String get sampleAirSupport;

  /// Sample team member name
  ///
  /// In en, this message translates to:
  /// **'Base Coordinator'**
  String get sampleBaseCoordinator;

  /// Emergency channel name
  ///
  /// In en, this message translates to:
  /// **'Emergency'**
  String get channelEmergency;

  /// Coordination channel name
  ///
  /// In en, this message translates to:
  /// **'Coordination'**
  String get channelCoordination;

  /// Updates channel name
  ///
  /// In en, this message translates to:
  /// **'Updates'**
  String get channelUpdates;

  /// Sample sender name
  ///
  /// In en, this message translates to:
  /// **'Sample Team Member'**
  String get sampleTeamMember;

  /// Sample sender name
  ///
  /// In en, this message translates to:
  /// **'Sample Scout'**
  String get sampleScout;

  /// Sample sender name
  ///
  /// In en, this message translates to:
  /// **'Sample Base'**
  String get sampleBase;

  /// Sample sender name
  ///
  /// In en, this message translates to:
  /// **'Sample Searcher'**
  String get sampleSearcher;

  /// Sample object note
  ///
  /// In en, this message translates to:
  /// **' Backpack found - blue color'**
  String get sampleObjectBackpack;

  /// Sample object note
  ///
  /// In en, this message translates to:
  /// **' Vehicle abandoned - check for owner'**
  String get sampleObjectVehicle;

  /// Sample object note
  ///
  /// In en, this message translates to:
  /// **' Camping equipment discovered'**
  String get sampleObjectCamping;

  /// Sample object note
  ///
  /// In en, this message translates to:
  /// **' Trail marker found off-path'**
  String get sampleObjectTrailMarker;

  /// Sample channel message
  ///
  /// In en, this message translates to:
  /// **'All teams check in'**
  String get sampleMsgAllTeamsCheckIn;

  /// Sample channel message
  ///
  /// In en, this message translates to:
  /// **'Weather update: Clear skies, temp 18°C'**
  String get sampleMsgWeatherUpdate;

  /// Sample channel message
  ///
  /// In en, this message translates to:
  /// **'Base camp established at staging area'**
  String get sampleMsgBaseCamp;

  /// Sample channel message
  ///
  /// In en, this message translates to:
  /// **'Team moving to sector 2'**
  String get sampleMsgTeamAlpha;

  /// Sample channel message
  ///
  /// In en, this message translates to:
  /// **'Radio check - all stations respond'**
  String get sampleMsgRadioCheck;

  /// Sample channel message
  ///
  /// In en, this message translates to:
  /// **'Water supply available at checkpoint 3'**
  String get sampleMsgWaterSupply;

  /// Sample channel message
  ///
  /// In en, this message translates to:
  /// **'Team reporting: sector 1 clear'**
  String get sampleMsgTeamBravo;

  /// Sample channel message
  ///
  /// In en, this message translates to:
  /// **'ETA to rally point: 15 minutes'**
  String get sampleMsgEtaRallyPoint;

  /// Sample channel message
  ///
  /// In en, this message translates to:
  /// **'Supply drop confirmed for 14:00'**
  String get sampleMsgSupplyDrop;

  /// Sample channel message
  ///
  /// In en, this message translates to:
  /// **'Drone survey completed - no findings'**
  String get sampleMsgDroneSurvey;

  /// Sample channel message
  ///
  /// In en, this message translates to:
  /// **'Team requesting backup'**
  String get sampleMsgTeamCharlie;

  /// Sample channel message
  ///
  /// In en, this message translates to:
  /// **'All units: maintain radio discipline'**
  String get sampleMsgRadioDiscipline;

  /// Sample emergency message
  ///
  /// In en, this message translates to:
  /// **'URGENT: Medical assistance needed at sector 4'**
  String get sampleMsgUrgentMedical;

  /// Sample emergency message note
  ///
  /// In en, this message translates to:
  /// **' Adult male, conscious'**
  String get sampleMsgAdultMale;

  /// Sample emergency message
  ///
  /// In en, this message translates to:
  /// **'Fire spotted - coordinates incoming'**
  String get sampleMsgFireSpotted;

  /// Sample emergency message note
  ///
  /// In en, this message translates to:
  /// **' Spreading rapidly!'**
  String get sampleMsgSpreadingRapidly;

  /// Sample emergency message
  ///
  /// In en, this message translates to:
  /// **'PRIORITY: Need helicopter support'**
  String get sampleMsgPriorityHelicopter;

  /// Sample emergency message
  ///
  /// In en, this message translates to:
  /// **'Medical team en route to your location'**
  String get sampleMsgMedicalTeamEnRoute;

  /// Sample emergency message
  ///
  /// In en, this message translates to:
  /// **'Evac helicopter ETA 10 minutes'**
  String get sampleMsgEvacHelicopter;

  /// Sample emergency message
  ///
  /// In en, this message translates to:
  /// **'Emergency resolved - all clear'**
  String get sampleMsgEmergencyResolved;

  /// Sample emergency message note
  ///
  /// In en, this message translates to:
  /// **' Emergency staging area'**
  String get sampleMsgEmergencyStagingArea;

  /// Sample emergency message
  ///
  /// In en, this message translates to:
  /// **'Emergency services notified and responding'**
  String get sampleMsgEmergencyServices;

  /// Sample team name
  ///
  /// In en, this message translates to:
  /// **'Team Lead'**
  String get sampleAlphaTeamLead;

  /// Sample team name
  ///
  /// In en, this message translates to:
  /// **'Scout'**
  String get sampleBravoScout;

  /// Sample team name
  ///
  /// In en, this message translates to:
  /// **'Medic'**
  String get sampleCharlieMedic;

  /// Sample team name
  ///
  /// In en, this message translates to:
  /// **'Navigator'**
  String get sampleDeltaNavigator;

  /// Sample team name
  ///
  /// In en, this message translates to:
  /// **'Support'**
  String get sampleEchoSupport;

  /// Sample team name
  ///
  /// In en, this message translates to:
  /// **'Base Command'**
  String get sampleBaseCommand;

  /// Sample team name
  ///
  /// In en, this message translates to:
  /// **'Field Coordinator'**
  String get sampleFieldCoordinator;

  /// Sample team name
  ///
  /// In en, this message translates to:
  /// **'Medical Team'**
  String get sampleMedicalTeam;

  /// Label for map drawing messages
  ///
  /// In en, this message translates to:
  /// **'Map Drawing'**
  String get mapDrawing;

  /// Option to navigate to drawing on map
  ///
  /// In en, this message translates to:
  /// **'Navigate to Drawing'**
  String get navigateToDrawing;

  /// Option to copy coordinates to clipboard
  ///
  /// In en, this message translates to:
  /// **'Copy Coordinates'**
  String get copyCoordinates;

  /// Option to hide drawing from map
  ///
  /// In en, this message translates to:
  /// **'Hide from Map'**
  String get hideFromMap;

  /// Label for line type drawings
  ///
  /// In en, this message translates to:
  /// **'Line Drawing'**
  String get lineDrawing;

  /// Label for rectangle type drawings
  ///
  /// In en, this message translates to:
  /// **'Rectangle Drawing'**
  String get rectangleDrawing;

  /// Label for manual coordinate input toggle
  ///
  /// In en, this message translates to:
  /// **'Manual Coordinates'**
  String get manualCoordinates;

  /// Description for manual coordinate input option
  ///
  /// In en, this message translates to:
  /// **'Enter coordinates manually'**
  String get enterCoordinatesManually;

  /// Label for latitude input field
  ///
  /// In en, this message translates to:
  /// **'Latitude'**
  String get latitudeLabel;

  /// Label for longitude input field
  ///
  /// In en, this message translates to:
  /// **'Longitude'**
  String get longitudeLabel;

  /// Example coordinate format hint
  ///
  /// In en, this message translates to:
  /// **'Example: 46.0569, 14.5058'**
  String get exampleCoordinates;

  /// Title for share single drawing dialog
  ///
  /// In en, this message translates to:
  /// **'Share Drawing'**
  String get shareDrawing;

  /// Subtitle for public channel sharing option
  ///
  /// In en, this message translates to:
  /// **'Share with all nearby devices'**
  String get shareWithAllNearbyDevices;

  /// Header for room sharing section
  ///
  /// In en, this message translates to:
  /// **'Share to Room'**
  String get shareToRoom;

  /// Subtitle for room sharing option
  ///
  /// In en, this message translates to:
  /// **'Send to persistent room storage'**
  String get sendToPersistentStorage;

  /// Confirmation message for deleting a single drawing
  ///
  /// In en, this message translates to:
  /// **'Are you sure you want to delete this drawing?'**
  String get deleteDrawingConfirm;

  /// Success message after deleting a drawing
  ///
  /// In en, this message translates to:
  /// **'Drawing deleted'**
  String get drawingDeleted;

  /// Header showing count of user's drawings
  ///
  /// In en, this message translates to:
  /// **'Your Drawings ({count})'**
  String yourDrawingsCount(int count);

  /// Status label for shared drawings
  ///
  /// In en, this message translates to:
  /// **'Shared'**
  String get shared;

  /// Line drawing type label
  ///
  /// In en, this message translates to:
  /// **'Line'**
  String get line;

  /// Rectangle drawing type label
  ///
  /// In en, this message translates to:
  /// **'Rectangle'**
  String get rectangle;

  /// Title for update dialog when new version is available
  ///
  /// In en, this message translates to:
  /// **'Update Available'**
  String get updateAvailable;

  /// Label for current app version
  ///
  /// In en, this message translates to:
  /// **'Current'**
  String get currentVersion;

  /// Label for latest available app version
  ///
  /// In en, this message translates to:
  /// **'Latest'**
  String get latestVersion;

  /// Button to download app update
  ///
  /// In en, this message translates to:
  /// **'Download'**
  String get downloadUpdate;

  /// Button to dismiss update dialog
  ///
  /// In en, this message translates to:
  /// **'Later'**
  String get updateLater;

  /// Label for cadastral parcels WMS overlay layer
  ///
  /// In en, this message translates to:
  /// **'Cadastral Parcels'**
  String get cadastralParcels;

  /// Label for forest roads WMS overlay layer
  ///
  /// In en, this message translates to:
  /// **'Forest Roads'**
  String get forestRoads;

  /// Section header for WMS overlay layers in layer selector
  ///
  /// In en, this message translates to:
  /// **'WMS Overlays'**
  String get wmsOverlays;

  /// Label for hiking/mountain trails WMS overlay layer
  ///
  /// In en, this message translates to:
  /// **'Hiking Trails'**
  String get hikingTrails;

  /// Label for main roads WMS overlay layer
  ///
  /// In en, this message translates to:
  /// **'Main Roads'**
  String get mainRoads;

  /// Label for house numbers WMS overlay layer
  ///
  /// In en, this message translates to:
  /// **'House Numbers'**
  String get houseNumbers;

  /// Label for fire hazard risk zones WMS overlay layer
  ///
  /// In en, this message translates to:
  /// **'Fire Hazard Zones'**
  String get fireHazardZones;

  /// Label for historical forest fires WMS overlay layer
  ///
  /// In en, this message translates to:
  /// **'Historical Fires'**
  String get historicalFires;

  /// Label for firebreaks WMS overlay layer
  ///
  /// In en, this message translates to:
  /// **'Firebreaks'**
  String get firebreaks;

  /// Label for Kras fire zones WMS overlay layer
  ///
  /// In en, this message translates to:
  /// **'Kras Fire Zones'**
  String get krasFireZones;

  /// Label for geographic place names WMS overlay layer
  ///
  /// In en, this message translates to:
  /// **'Place Names'**
  String get placeNames;

  /// Label for municipality borders WMS overlay layer
  ///
  /// In en, this message translates to:
  /// **'Municipality Borders'**
  String get municipalityBorders;

  /// Label for DTK25 topographic base map layer
  ///
  /// In en, this message translates to:
  /// **'Topographic Map 1:25000'**
  String get topographicMap;

  /// Header for recent messages overlay on map in fullscreen mode
  ///
  /// In en, this message translates to:
  /// **'Recent Messages'**
  String get recentMessages;

  /// Button to add a new channel
  ///
  /// In en, this message translates to:
  /// **'Add Channel'**
  String get addChannel;

  /// Label for channel name field
  ///
  /// In en, this message translates to:
  /// **'Channel Name'**
  String get channelName;

  /// Hint for channel name field
  ///
  /// In en, this message translates to:
  /// **'e.g., Rescue Team Alpha'**
  String get channelNameHint;

  /// Label for channel secret field
  ///
  /// In en, this message translates to:
  /// **'Channel Secret'**
  String get channelSecret;

  /// Hint for channel secret field
  ///
  /// In en, this message translates to:
  /// **'Shared password for this channel'**
  String get channelSecretHint;

  /// Help text explaining channel secret
  ///
  /// In en, this message translates to:
  /// **'This secret must be shared with all team members who need access to this channel'**
  String get channelSecretHelp;

  /// Information banner explaining hash and private channel types
  ///
  /// In en, this message translates to:
  /// **'Hash channels (#team): Secret auto-generated from name. Same name = same channel across devices.\n\nPrivate channels: Use explicit secret. Only those with the secret can join.'**
  String get channelTypesInfo;

  /// Help text for hash channels (# prefix)
  ///
  /// In en, this message translates to:
  /// **'Hash channel: Secret will be auto-generated from the channel name. Anyone using the same name will join the same channel.'**
  String get hashChannelInfo;

  /// Validation error for empty channel name
  ///
  /// In en, this message translates to:
  /// **'Channel name is required'**
  String get channelNameRequired;

  /// Validation error for channel name too long
  ///
  /// In en, this message translates to:
  /// **'Channel name must be 31 characters or less'**
  String get channelNameTooLong;

  /// Validation error for empty channel secret
  ///
  /// In en, this message translates to:
  /// **'Channel secret is required'**
  String get channelSecretRequired;

  /// Validation error for channel secret too long
  ///
  /// In en, this message translates to:
  /// **'Channel secret must be 32 characters or less'**
  String get channelSecretTooLong;

  /// Validation error for non-ASCII characters
  ///
  /// In en, this message translates to:
  /// **'Only ASCII characters are allowed'**
  String get invalidAsciiCharacters;

  /// Success message after creating channel
  ///
  /// In en, this message translates to:
  /// **'Channel created successfully'**
  String get channelCreatedSuccessfully;

  /// Error message when channel creation fails
  ///
  /// In en, this message translates to:
  /// **'Failed to create channel: {error}'**
  String channelCreationFailed(String error);

  /// Delete channel button/menu item
  ///
  /// In en, this message translates to:
  /// **'Delete Channel'**
  String get deleteChannel;

  /// Confirmation dialog when deleting a channel
  ///
  /// In en, this message translates to:
  /// **'Are you sure you want to delete channel \"{channelName}\"? This action cannot be undone.'**
  String deleteChannelConfirmation(String channelName);

  /// Success message after deleting channel
  ///
  /// In en, this message translates to:
  /// **'Channel deleted successfully'**
  String get channelDeletedSuccessfully;

  /// Error message when channel deletion fails
  ///
  /// In en, this message translates to:
  /// **'Failed to delete channel: {error}'**
  String channelDeletionFailed(String error);

  /// Button text for creating a channel
  ///
  /// In en, this message translates to:
  /// **'Create Channel'**
  String get createChannel;

  /// Wizard back button text
  ///
  /// In en, this message translates to:
  /// **'Back'**
  String get wizardBack;

  /// Wizard skip button text
  ///
  /// In en, this message translates to:
  /// **'Skip'**
  String get wizardSkip;

  /// Wizard next button text
  ///
  /// In en, this message translates to:
  /// **'Next'**
  String get wizardNext;

  /// Wizard final button text to complete onboarding
  ///
  /// In en, this message translates to:
  /// **'Get Started'**
  String get wizardGetStarted;

  /// Welcome wizard first page title
  ///
  /// In en, this message translates to:
  /// **'Welcome to MeshCore SAR'**
  String get wizardWelcomeTitle;

  /// Welcome wizard first page description
  ///
  /// In en, this message translates to:
  /// **'A powerful off-grid communication tool for search and rescue operations. Connect with your team using mesh radio technology when traditional networks are unavailable.'**
  String get wizardWelcomeDescription;

  /// Wizard connecting page title
  ///
  /// In en, this message translates to:
  /// **'Connecting to Your Radio'**
  String get wizardConnectingTitle;

  /// Wizard connecting page description
  ///
  /// In en, this message translates to:
  /// **'Connect your smartphone to a MeshCore radio device via Bluetooth to start communicating off-grid.'**
  String get wizardConnectingDescription;

  /// Wizard connecting feature 1
  ///
  /// In en, this message translates to:
  /// **'Scan for nearby MeshCore devices'**
  String get wizardConnectingFeature1;

  /// Wizard connecting feature 2
  ///
  /// In en, this message translates to:
  /// **'Pair with your radio via Bluetooth'**
  String get wizardConnectingFeature2;

  /// Wizard connecting feature 3
  ///
  /// In en, this message translates to:
  /// **'Works completely offline - no internet required'**
  String get wizardConnectingFeature3;

  /// Wizard channel page title
  ///
  /// In en, this message translates to:
  /// **'Channels'**
  String get wizardChannelTitle;

  /// Wizard channel page description
  ///
  /// In en, this message translates to:
  /// **'Broadcast messages to everyone on a channel, perfect for team-wide announcements and coordination.'**
  String get wizardChannelDescription;

  /// Wizard channel feature 1
  ///
  /// In en, this message translates to:
  /// **'Public Channel for general team communication'**
  String get wizardChannelFeature1;

  /// Wizard channel feature 2
  ///
  /// In en, this message translates to:
  /// **'Create custom channels for specific groups'**
  String get wizardChannelFeature2;

  /// Wizard channel feature 3
  ///
  /// In en, this message translates to:
  /// **'Messages are automatically relayed by the mesh'**
  String get wizardChannelFeature3;

  /// Wizard contacts page title
  ///
  /// In en, this message translates to:
  /// **'Contacts'**
  String get wizardContactsTitle;

  /// Wizard contacts page description
  ///
  /// In en, this message translates to:
  /// **'Your team members appear automatically as they join the mesh network. Send them direct messages or view their location.'**
  String get wizardContactsDescription;

  /// Wizard contacts feature 1
  ///
  /// In en, this message translates to:
  /// **'Contacts discovered automatically'**
  String get wizardContactsFeature1;

  /// Wizard contacts feature 2
  ///
  /// In en, this message translates to:
  /// **'Send private direct messages'**
  String get wizardContactsFeature2;

  /// Wizard contacts feature 3
  ///
  /// In en, this message translates to:
  /// **'View battery level and last seen time'**
  String get wizardContactsFeature3;

  /// Wizard map page title
  ///
  /// In en, this message translates to:
  /// **'Map & Location'**
  String get wizardMapTitle;

  /// Wizard map page description
  ///
  /// In en, this message translates to:
  /// **'Track your team in real-time and mark important locations for search and rescue operations.'**
  String get wizardMapDescription;

  /// Wizard map feature 1
  ///
  /// In en, this message translates to:
  /// **'SAR markers for found persons, fires, and staging areas'**
  String get wizardMapFeature1;

  /// Wizard map feature 2
  ///
  /// In en, this message translates to:
  /// **'Real-time GPS tracking of team members'**
  String get wizardMapFeature2;

  /// Wizard map feature 3
  ///
  /// In en, this message translates to:
  /// **'Download offline maps for remote areas'**
  String get wizardMapFeature3;

  /// Wizard map feature 4
  ///
  /// In en, this message translates to:
  /// **'Draw shapes and share tactical information'**
  String get wizardMapFeature4;

  /// Settings option to re-show welcome wizard
  ///
  /// In en, this message translates to:
  /// **'View Welcome Tutorial'**
  String get viewWelcomeTutorial;

  /// Destination option to send SAR marker to all team contacts
  ///
  /// In en, this message translates to:
  /// **'All Team Contacts'**
  String get allTeamContacts;

  /// Information about sending to all contacts
  ///
  /// In en, this message translates to:
  /// **'Direct messages with ACKs. Sent to {count} team members.'**
  String directMessagesInfo(int count);

  /// Success message after sending SAR marker to all contacts
  ///
  /// In en, this message translates to:
  /// **'SAR marker sent to {count} contacts'**
  String sarMarkerSentToContacts(int count);

  /// Message when there are no chat contacts to send to
  ///
  /// In en, this message translates to:
  /// **'No team contacts available'**
  String get noContactsAvailable;

  /// No description provided for @reply.
  ///
  /// In en, this message translates to:
  /// **'Reply'**
  String get reply;

  /// No description provided for @technicalDetails.
  ///
  /// In en, this message translates to:
  /// **'Technical details'**
  String get technicalDetails;

  /// No description provided for @messageTechnicalDetails.
  ///
  /// In en, this message translates to:
  /// **'Message technical details'**
  String get messageTechnicalDetails;

  /// No description provided for @linkQuality.
  ///
  /// In en, this message translates to:
  /// **'Link quality'**
  String get linkQuality;

  /// No description provided for @delivery.
  ///
  /// In en, this message translates to:
  /// **'Delivery'**
  String get delivery;

  /// No description provided for @status.
  ///
  /// In en, this message translates to:
  /// **'Status'**
  String get status;

  /// No description provided for @expectedAckTag.
  ///
  /// In en, this message translates to:
  /// **'Expected ACK tag'**
  String get expectedAckTag;

  /// No description provided for @roundTrip.
  ///
  /// In en, this message translates to:
  /// **'Round-trip'**
  String get roundTrip;

  /// No description provided for @retryAttempt.
  ///
  /// In en, this message translates to:
  /// **'Retry attempt'**
  String get retryAttempt;

  /// No description provided for @floodFallback.
  ///
  /// In en, this message translates to:
  /// **'Flood fallback'**
  String get floodFallback;

  /// No description provided for @identity.
  ///
  /// In en, this message translates to:
  /// **'Identity'**
  String get identity;

  /// No description provided for @messageId.
  ///
  /// In en, this message translates to:
  /// **'Message ID'**
  String get messageId;

  /// No description provided for @sender.
  ///
  /// In en, this message translates to:
  /// **'Sender'**
  String get sender;

  /// No description provided for @senderKey.
  ///
  /// In en, this message translates to:
  /// **'Sender key'**
  String get senderKey;

  /// No description provided for @recipient.
  ///
  /// In en, this message translates to:
  /// **'Recipient'**
  String get recipient;

  /// No description provided for @recipientKey.
  ///
  /// In en, this message translates to:
  /// **'Recipient key'**
  String get recipientKey;

  /// No description provided for @voice.
  ///
  /// In en, this message translates to:
  /// **'Voice'**
  String get voice;

  /// No description provided for @voiceId.
  ///
  /// In en, this message translates to:
  /// **'Voice ID'**
  String get voiceId;

  /// No description provided for @envelope.
  ///
  /// In en, this message translates to:
  /// **'Envelope'**
  String get envelope;

  /// No description provided for @sessionProgress.
  ///
  /// In en, this message translates to:
  /// **'Session progress'**
  String get sessionProgress;

  /// No description provided for @complete.
  ///
  /// In en, this message translates to:
  /// **'Complete'**
  String get complete;

  /// No description provided for @rawDump.
  ///
  /// In en, this message translates to:
  /// **'Raw dump'**
  String get rawDump;

  /// No description provided for @cannotRetryMissingRecipient.
  ///
  /// In en, this message translates to:
  /// **'Cannot retry: recipient information missing'**
  String get cannotRetryMissingRecipient;

  /// No description provided for @voiceUnavailable.
  ///
  /// In en, this message translates to:
  /// **'Voice unavailable right now'**
  String get voiceUnavailable;

  /// No description provided for @requestingVoice.
  ///
  /// In en, this message translates to:
  /// **'Requesting voice'**
  String get requestingVoice;

  /// Generic device label
  ///
  /// In en, this message translates to:
  /// **'device'**
  String get device;

  /// Generic change action
  ///
  /// In en, this message translates to:
  /// **'Change'**
  String get change;

  /// Updated onboarding overview description
  ///
  /// In en, this message translates to:
  /// **'This app combines MeshCore messaging, SAR field updates, discovery, mapping, and device tools in one place.'**
  String get wizardOverviewDescription;

  /// Updated onboarding overview feature 1
  ///
  /// In en, this message translates to:
  /// **'Send direct, room, and channel messages from the main Messages tab.'**
  String get wizardOverviewFeature1;

  /// Updated onboarding overview feature 2
  ///
  /// In en, this message translates to:
  /// **'Share SAR markers, map drawings, voice clips, and images over the mesh.'**
  String get wizardOverviewFeature2;

  /// Updated onboarding overview feature 3
  ///
  /// In en, this message translates to:
  /// **'Connect over BLE, WiFi, or Serial, then manage the companion radio from inside the app.'**
  String get wizardOverviewFeature3;

  /// Updated onboarding messaging page title
  ///
  /// In en, this message translates to:
  /// **'Messaging and Field Reports'**
  String get wizardMessagingTitle;

  /// Updated onboarding messaging page description
  ///
  /// In en, this message translates to:
  /// **'Messages are more than plain text here. The app already supports several operational payloads and transfer workflows.'**
  String get wizardMessagingDescription;

  /// Updated onboarding messaging feature 1
  ///
  /// In en, this message translates to:
  /// **'Send direct messages, room posts, and channel traffic from one composer.'**
  String get wizardMessagingFeature1;

  /// Updated onboarding messaging feature 2
  ///
  /// In en, this message translates to:
  /// **'Create SAR updates and reusable SAR templates for common field reports.'**
  String get wizardMessagingFeature2;

  /// Updated onboarding messaging feature 3
  ///
  /// In en, this message translates to:
  /// **'Transfer voice sessions and images, with progress and airtime estimates in the UI.'**
  String get wizardMessagingFeature3;

  /// Onboarding connect device page title
  ///
  /// In en, this message translates to:
  /// **'Connect device'**
  String get wizardConnectDeviceTitle;

  /// Onboarding connect device page description
  ///
  /// In en, this message translates to:
  /// **'Connect your MeshCore radio, choose a name, and apply a radio preset before continuing.'**
  String get wizardConnectDeviceDescription;

  /// Onboarding setup badge label
  ///
  /// In en, this message translates to:
  /// **'Setup'**
  String get wizardSetupBadge;

  /// Onboarding overview badge label
  ///
  /// In en, this message translates to:
  /// **'Overview'**
  String get wizardOverviewBadge;

  /// Onboarding connection status when connected
  ///
  /// In en, this message translates to:
  /// **'Connected to {deviceName}'**
  String wizardConnectedToDevice(String deviceName);

  /// Onboarding connection status when disconnected
  ///
  /// In en, this message translates to:
  /// **'No device connected yet'**
  String get wizardNoDeviceConnected;

  /// Onboarding skip current setup step action
  ///
  /// In en, this message translates to:
  /// **'Skip for now'**
  String get wizardSkipForNow;

  /// Onboarding device name field label
  ///
  /// In en, this message translates to:
  /// **'Device name'**
  String get wizardDeviceNameLabel;

  /// Onboarding device name field helper text
  ///
  /// In en, this message translates to:
  /// **'This name is advertised to other MeshCore users.'**
  String get wizardDeviceNameHelp;

  /// Onboarding config region field label
  ///
  /// In en, this message translates to:
  /// **'Config region'**
  String get wizardConfigRegionLabel;

  /// Onboarding config region helper text
  ///
  /// In en, this message translates to:
  /// **'Uses the full official MeshCore preset list. Default is EU/UK (Narrow).'**
  String get wizardConfigRegionHelp;

  /// Onboarding preset note 1
  ///
  /// In en, this message translates to:
  /// **'Make sure the selected preset matches your local radio regulations.'**
  String get wizardPresetNote1;

  /// Onboarding preset note 2
  ///
  /// In en, this message translates to:
  /// **'The list matches the official MeshCore config tool preset feed.'**
  String get wizardPresetNote2;

  /// Onboarding preset note 3
  ///
  /// In en, this message translates to:
  /// **'EU/UK (Narrow) stays selected by default for onboarding.'**
  String get wizardPresetNote3;

  /// Onboarding saving button label
  ///
  /// In en, this message translates to:
  /// **'Saving...'**
  String get wizardSaving;

  /// Onboarding save and continue button label
  ///
  /// In en, this message translates to:
  /// **'Save and continue'**
  String get wizardSaveAndContinue;

  /// Onboarding validation when device name is missing
  ///
  /// In en, this message translates to:
  /// **'Enter a device name before continuing.'**
  String get wizardEnterDeviceName;

  /// Onboarding success message after saving device setup
  ///
  /// In en, this message translates to:
  /// **'Saved {deviceName} with {presetName}.'**
  String wizardDeviceSetupSaved(String deviceName, String presetName);

  /// Updated onboarding network page title
  ///
  /// In en, this message translates to:
  /// **'Contacts, Rooms, and Repeaters'**
  String get wizardNetworkTitle;

  /// Updated onboarding network page description
  ///
  /// In en, this message translates to:
  /// **'The Contacts and Discovery flows help you find nearby nodes, store repeaters, and manage the routes you learn over time.'**
  String get wizardNetworkDescription;

  /// Updated onboarding network feature 1
  ///
  /// In en, this message translates to:
  /// **'Discover repeaters and sensors, then review team members, rooms, channels, and pending adverts in one list.'**
  String get wizardNetworkFeature1;

  /// Updated onboarding network feature 2
  ///
  /// In en, this message translates to:
  /// **'Use smart ping, room login, learned paths, and route reset tools when connectivity gets messy.'**
  String get wizardNetworkFeature2;

  /// Updated onboarding network feature 3
  ///
  /// In en, this message translates to:
  /// **'Add new repeaters right after you connect, then create channels and manage network destinations without leaving the app.'**
  String get wizardNetworkFeature3;

  /// Updated onboarding map page title
  ///
  /// In en, this message translates to:
  /// **'Map, Trails, and Shared Geometry'**
  String get wizardMapOpsTitle;

  /// Updated onboarding map page description
  ///
  /// In en, this message translates to:
  /// **'The app map is tied directly into messaging, tracking, and SAR overlays instead of being a separate viewer.'**
  String get wizardMapOpsDescription;

  /// Updated onboarding map feature 1
  ///
  /// In en, this message translates to:
  /// **'Track your own position, teammate locations, and movement trails on the map.'**
  String get wizardMapOpsFeature1;

  /// Updated onboarding map feature 2
  ///
  /// In en, this message translates to:
  /// **'Open drawings from messages, preview them inline, and remove them from the map when needed.'**
  String get wizardMapOpsFeature2;

  /// Updated onboarding map feature 3
  ///
  /// In en, this message translates to:
  /// **'Use repeater map views and shared overlays to understand network reach in the field.'**
  String get wizardMapOpsFeature3;

  /// Updated onboarding tools page title
  ///
  /// In en, this message translates to:
  /// **'Tools Beyond Messaging'**
  String get wizardToolsTitle;

  /// Updated onboarding tools page description
  ///
  /// In en, this message translates to:
  /// **'There is more here than the four main tabs. The app also includes configuration, diagnostics, and optional sensor workflows.'**
  String get wizardToolsDescription;

  /// Updated onboarding tools feature 1
  ///
  /// In en, this message translates to:
  /// **'Open device config to change radio settings, telemetry, TX power, and companion details.'**
  String get wizardToolsFeature1;

  /// Updated onboarding tools feature 2
  ///
  /// In en, this message translates to:
  /// **'Enable the Sensors tab when you want watched sensor dashboards and quick refresh actions.'**
  String get wizardToolsFeature2;

  /// Updated onboarding tools feature 3
  ///
  /// In en, this message translates to:
  /// **'Use live traffic, packet logs, spectrum scan, and developer diagnostics when troubleshooting the mesh.'**
  String get wizardToolsFeature3;

  /// Title for the prompt shown after a successful device connection
  ///
  /// In en, this message translates to:
  /// **'Discover repeaters now?'**
  String get postConnectDiscoveryTitle;

  /// Body text for the prompt shown after a successful device connection
  ///
  /// In en, this message translates to:
  /// **'Run repeater discovery right after connecting so you can see nearby MeshCore nodes and add them to your network faster.'**
  String get postConnectDiscoveryDescription;

  /// Contact actions label when already in sensors
  ///
  /// In en, this message translates to:
  /// **'In Sensors'**
  String get contactInSensors;

  /// Contact actions label to add to sensors
  ///
  /// In en, this message translates to:
  /// **'Add to Sensors'**
  String get contactAddToSensors;

  /// Contact actions label to set route path
  ///
  /// In en, this message translates to:
  /// **'Set path'**
  String get contactSetPath;

  /// Snackbar after adding contact to sensors
  ///
  /// In en, this message translates to:
  /// **'{contactName} added to Sensors'**
  String contactAddedToSensors(String contactName);

  /// Error when clearing a contact route fails
  ///
  /// In en, this message translates to:
  /// **'Failed to clear route: {error}'**
  String contactFailedToClearRoute(String error);

  /// Snackbar after route is cleared
  ///
  /// In en, this message translates to:
  /// **'Route cleared'**
  String get contactRouteCleared;

  /// Snackbar after route is set
  ///
  /// In en, this message translates to:
  /// **'Route set: {route}'**
  String contactRouteSet(String route);

  /// Error when setting a contact route fails
  ///
  /// In en, this message translates to:
  /// **'Failed to set route: {error}'**
  String contactFailedToSetRoute(String error);

  /// Received signal strength indicator
  ///
  /// In en, this message translates to:
  /// **'RSSI'**
  String get rssi;

  /// Signal-to-noise ratio
  ///
  /// In en, this message translates to:
  /// **'SNR'**
  String get snr;

  /// No description provided for @ackTimeout.
  ///
  /// In en, this message translates to:
  /// **'ACK timeout'**
  String get ackTimeout;

  /// No description provided for @opcode.
  ///
  /// In en, this message translates to:
  /// **'Opcode'**
  String get opcode;

  /// No description provided for @payload.
  ///
  /// In en, this message translates to:
  /// **'Payload'**
  String get payload;

  /// No description provided for @hops.
  ///
  /// In en, this message translates to:
  /// **'Hops'**
  String get hops;

  /// No description provided for @hashSize.
  ///
  /// In en, this message translates to:
  /// **'Hash size'**
  String get hashSize;

  /// No description provided for @pathBytes.
  ///
  /// In en, this message translates to:
  /// **'Path bytes'**
  String get pathBytes;

  /// No description provided for @selectedPath.
  ///
  /// In en, this message translates to:
  /// **'Selected path'**
  String get selectedPath;

  /// No description provided for @estimatedTx.
  ///
  /// In en, this message translates to:
  /// **'Estimated tx'**
  String get estimatedTx;

  /// No description provided for @senderToReceipt.
  ///
  /// In en, this message translates to:
  /// **'Sender to receipt'**
  String get senderToReceipt;

  /// No description provided for @receivedCopies.
  ///
  /// In en, this message translates to:
  /// **'Received copies'**
  String get receivedCopies;

  /// No description provided for @retryCause.
  ///
  /// In en, this message translates to:
  /// **'Retry cause'**
  String get retryCause;

  /// No description provided for @retryMode.
  ///
  /// In en, this message translates to:
  /// **'Retry mode'**
  String get retryMode;

  /// No description provided for @retryResult.
  ///
  /// In en, this message translates to:
  /// **'Retry result'**
  String get retryResult;

  /// No description provided for @lastRetry.
  ///
  /// In en, this message translates to:
  /// **'Last retry'**
  String get lastRetry;

  /// No description provided for @rxPackets.
  ///
  /// In en, this message translates to:
  /// **'RX packets'**
  String get rxPackets;

  /// No description provided for @mesh.
  ///
  /// In en, this message translates to:
  /// **'Mesh'**
  String get mesh;

  /// No description provided for @rate.
  ///
  /// In en, this message translates to:
  /// **'Rate'**
  String get rate;

  /// No description provided for @window.
  ///
  /// In en, this message translates to:
  /// **'Window'**
  String get window;

  /// No description provided for @posttxDelay.
  ///
  /// In en, this message translates to:
  /// **'Post-tx delay'**
  String get posttxDelay;

  /// No description provided for @bandpass.
  ///
  /// In en, this message translates to:
  /// **'Band-pass'**
  String get bandpass;

  /// No description provided for @bandpassFilterVoice.
  ///
  /// In en, this message translates to:
  /// **'Band-pass filter voice'**
  String get bandpassFilterVoice;

  /// No description provided for @frequency.
  ///
  /// In en, this message translates to:
  /// **'Frequency'**
  String get frequency;

  /// No description provided for @australia.
  ///
  /// In en, this message translates to:
  /// **'Australia'**
  String get australia;

  /// No description provided for @australiaNarrow.
  ///
  /// In en, this message translates to:
  /// **'Australia (Narrow)'**
  String get australiaNarrow;

  /// No description provided for @australiaQld.
  ///
  /// In en, this message translates to:
  /// **'Australia: QLD'**
  String get australiaQld;

  /// No description provided for @australiaSaWa.
  ///
  /// In en, this message translates to:
  /// **'Australia: SA, WA'**
  String get australiaSaWa;

  /// No description provided for @newZealand.
  ///
  /// In en, this message translates to:
  /// **'New Zealand'**
  String get newZealand;

  /// No description provided for @newZealandNarrow.
  ///
  /// In en, this message translates to:
  /// **'New Zealand (Narrow)'**
  String get newZealandNarrow;

  /// No description provided for @switzerland.
  ///
  /// In en, this message translates to:
  /// **'Switzerland'**
  String get switzerland;

  /// No description provided for @portugal433.
  ///
  /// In en, this message translates to:
  /// **'Portugal 433'**
  String get portugal433;

  /// No description provided for @portugal868.
  ///
  /// In en, this message translates to:
  /// **'Portugal 868'**
  String get portugal868;

  /// No description provided for @czechRepublicNarrow.
  ///
  /// In en, this message translates to:
  /// **'Czech Republic (Narrow)'**
  String get czechRepublicNarrow;

  /// No description provided for @eu433mhzLongRange.
  ///
  /// In en, this message translates to:
  /// **'EU 433MHz (Long Range)'**
  String get eu433mhzLongRange;

  /// No description provided for @euukDeprecated.
  ///
  /// In en, this message translates to:
  /// **'EU/UK (Deprecated)'**
  String get euukDeprecated;

  /// No description provided for @euukNarrow.
  ///
  /// In en, this message translates to:
  /// **'EU/UK (Narrow)'**
  String get euukNarrow;

  /// No description provided for @usacanadaRecommended.
  ///
  /// In en, this message translates to:
  /// **'USA/Canada (Recommended)'**
  String get usacanadaRecommended;

  /// No description provided for @vietnamDeprecated.
  ///
  /// In en, this message translates to:
  /// **'Vietnam (Deprecated)'**
  String get vietnamDeprecated;

  /// No description provided for @vietnamNarrow.
  ///
  /// In en, this message translates to:
  /// **'Vietnam (Narrow)'**
  String get vietnamNarrow;

  /// No description provided for @active.
  ///
  /// In en, this message translates to:
  /// **'Active'**
  String get active;

  /// No description provided for @addContact.
  ///
  /// In en, this message translates to:
  /// **'Add Contact'**
  String get addContact;

  /// No description provided for @all.
  ///
  /// In en, this message translates to:
  /// **'All'**
  String get all;

  /// No description provided for @autoResolve.
  ///
  /// In en, this message translates to:
  /// **'Auto resolve'**
  String get autoResolve;

  /// No description provided for @clearAllLabel.
  ///
  /// In en, this message translates to:
  /// **'Clear all'**
  String get clearAllLabel;

  /// No description provided for @clearRelays.
  ///
  /// In en, this message translates to:
  /// **'Clear relays'**
  String get clearRelays;

  /// No description provided for @clearFilters.
  ///
  /// In en, this message translates to:
  /// **'Clear filters'**
  String get clearFilters;

  /// No description provided for @clearRoute.
  ///
  /// In en, this message translates to:
  /// **'Clear Route'**
  String get clearRoute;

  /// No description provided for @clearMessages.
  ///
  /// In en, this message translates to:
  /// **'Clear Messages'**
  String get clearMessages;

  /// No description provided for @clearScale.
  ///
  /// In en, this message translates to:
  /// **'Clear scale'**
  String get clearScale;

  /// No description provided for @clearDiscoveries.
  ///
  /// In en, this message translates to:
  /// **'Clear discoveries'**
  String get clearDiscoveries;

  /// No description provided for @clearOnlineTraceDatabase.
  ///
  /// In en, this message translates to:
  /// **'Clear online trace database'**
  String get clearOnlineTraceDatabase;

  /// No description provided for @clearAllChannels.
  ///
  /// In en, this message translates to:
  /// **'Clear all channels'**
  String get clearAllChannels;

  /// No description provided for @clearAllContacts.
  ///
  /// In en, this message translates to:
  /// **'Clear all contacts'**
  String get clearAllContacts;

  /// No description provided for @clearChannels.
  ///
  /// In en, this message translates to:
  /// **'Clear channels'**
  String get clearChannels;

  /// No description provided for @clearContacts.
  ///
  /// In en, this message translates to:
  /// **'Clear contacts'**
  String get clearContacts;

  /// No description provided for @clearPathOnMaxRetry.
  ///
  /// In en, this message translates to:
  /// **'Clear path on max retry'**
  String get clearPathOnMaxRetry;

  /// No description provided for @create.
  ///
  /// In en, this message translates to:
  /// **'Create'**
  String get create;

  /// No description provided for @custom.
  ///
  /// In en, this message translates to:
  /// **'Custom'**
  String get custom;

  /// No description provided for @defaultValue.
  ///
  /// In en, this message translates to:
  /// **'Default'**
  String get defaultValue;

  /// No description provided for @duplicate.
  ///
  /// In en, this message translates to:
  /// **'Duplicate'**
  String get duplicate;

  /// No description provided for @editName.
  ///
  /// In en, this message translates to:
  /// **'Edit name'**
  String get editName;

  /// No description provided for @open.
  ///
  /// In en, this message translates to:
  /// **'Open'**
  String get open;

  /// No description provided for @paste.
  ///
  /// In en, this message translates to:
  /// **'Paste'**
  String get paste;

  /// No description provided for @preview.
  ///
  /// In en, this message translates to:
  /// **'Preview'**
  String get preview;

  /// No description provided for @remove.
  ///
  /// In en, this message translates to:
  /// **'Remove'**
  String get remove;

  /// No description provided for @rename.
  ///
  /// In en, this message translates to:
  /// **'Rename'**
  String get rename;

  /// No description provided for @resolveAll.
  ///
  /// In en, this message translates to:
  /// **'Resolve all'**
  String get resolveAll;

  /// No description provided for @send.
  ///
  /// In en, this message translates to:
  /// **'Send'**
  String get send;

  /// No description provided for @sendAnyway.
  ///
  /// In en, this message translates to:
  /// **'Send anyway'**
  String get sendAnyway;

  /// No description provided for @share.
  ///
  /// In en, this message translates to:
  /// **'Share'**
  String get share;

  /// No description provided for @shareContact.
  ///
  /// In en, this message translates to:
  /// **'Share Contact'**
  String get shareContact;

  /// No description provided for @trace.
  ///
  /// In en, this message translates to:
  /// **'Trace'**
  String get trace;

  /// No description provided for @use.
  ///
  /// In en, this message translates to:
  /// **'Use'**
  String get use;

  /// No description provided for @useSelectedFrequency.
  ///
  /// In en, this message translates to:
  /// **'Use selected frequency'**
  String get useSelectedFrequency;

  /// No description provided for @discovery.
  ///
  /// In en, this message translates to:
  /// **'Discovery'**
  String get discovery;

  /// No description provided for @discoverRepeaters.
  ///
  /// In en, this message translates to:
  /// **'Discover repeaters'**
  String get discoverRepeaters;

  /// No description provided for @discoverSensors.
  ///
  /// In en, this message translates to:
  /// **'Discover sensors'**
  String get discoverSensors;

  /// No description provided for @repeaterDiscoverySent.
  ///
  /// In en, this message translates to:
  /// **'Repeater discovery sent'**
  String get repeaterDiscoverySent;

  /// No description provided for @sensorDiscoverySent.
  ///
  /// In en, this message translates to:
  /// **'Sensor discovery sent'**
  String get sensorDiscoverySent;

  /// No description provided for @clearedPendingDiscoveries.
  ///
  /// In en, this message translates to:
  /// **'Cleared pending discoveries.'**
  String get clearedPendingDiscoveries;

  /// No description provided for @autoDiscovery.
  ///
  /// In en, this message translates to:
  /// **'Auto discovery'**
  String get autoDiscovery;

  /// No description provided for @enableAutomaticAdding.
  ///
  /// In en, this message translates to:
  /// **'Enable automatic adding'**
  String get enableAutomaticAdding;

  /// No description provided for @autoaddRepeaters.
  ///
  /// In en, this message translates to:
  /// **'Auto-add repeaters'**
  String get autoaddRepeaters;

  /// No description provided for @autoaddRoomServers.
  ///
  /// In en, this message translates to:
  /// **'Auto-add room servers'**
  String get autoaddRoomServers;

  /// No description provided for @autoaddSensors.
  ///
  /// In en, this message translates to:
  /// **'Auto-add sensors'**
  String get autoaddSensors;

  /// No description provided for @autoaddUsers.
  ///
  /// In en, this message translates to:
  /// **'Auto-add users'**
  String get autoaddUsers;

  /// No description provided for @overwriteOldestWhenFull.
  ///
  /// In en, this message translates to:
  /// **'Overwrite oldest when full'**
  String get overwriteOldestWhenFull;

  /// No description provided for @storage.
  ///
  /// In en, this message translates to:
  /// **'Storage'**
  String get storage;

  /// No description provided for @dangerZone.
  ///
  /// In en, this message translates to:
  /// **'Danger zone'**
  String get dangerZone;

  /// No description provided for @profiles.
  ///
  /// In en, this message translates to:
  /// **'Profiles'**
  String get profiles;

  /// No description provided for @favourites.
  ///
  /// In en, this message translates to:
  /// **'Favourites'**
  String get favourites;

  /// No description provided for @sensors.
  ///
  /// In en, this message translates to:
  /// **'Sensors'**
  String get sensors;

  /// No description provided for @others.
  ///
  /// In en, this message translates to:
  /// **'Others'**
  String get others;

  /// No description provided for @gpsModule.
  ///
  /// In en, this message translates to:
  /// **'GPS Module'**
  String get gpsModule;

  /// No description provided for @liveTraffic.
  ///
  /// In en, this message translates to:
  /// **'Live Traffic'**
  String get liveTraffic;

  /// No description provided for @repeatersMap.
  ///
  /// In en, this message translates to:
  /// **'Repeaters Map'**
  String get repeatersMap;

  /// No description provided for @spectrumScan.
  ///
  /// In en, this message translates to:
  /// **'Spectrum Scan'**
  String get spectrumScan;

  /// No description provided for @blePacketLogs.
  ///
  /// In en, this message translates to:
  /// **'BLE Packet Logs'**
  String get blePacketLogs;

  /// No description provided for @onlineTraceDatabase.
  ///
  /// In en, this message translates to:
  /// **'Online trace database'**
  String get onlineTraceDatabase;

  /// No description provided for @routePathByteSize.
  ///
  /// In en, this message translates to:
  /// **'Route path byte size'**
  String get routePathByteSize;

  /// No description provided for @messageNotifications.
  ///
  /// In en, this message translates to:
  /// **'Message notifications'**
  String get messageNotifications;

  /// No description provided for @sarAlerts.
  ///
  /// In en, this message translates to:
  /// **'SAR alerts'**
  String get sarAlerts;

  /// No description provided for @discoveryNotifications.
  ///
  /// In en, this message translates to:
  /// **'Discovery notifications'**
  String get discoveryNotifications;

  /// No description provided for @updateNotifications.
  ///
  /// In en, this message translates to:
  /// **'Update notifications'**
  String get updateNotifications;

  /// No description provided for @muteWhileAppIsOpen.
  ///
  /// In en, this message translates to:
  /// **'Mute while app is open'**
  String get muteWhileAppIsOpen;

  /// No description provided for @disableContacts.
  ///
  /// In en, this message translates to:
  /// **'Disable Contacts'**
  String get disableContacts;

  /// No description provided for @enableSensorsTab.
  ///
  /// In en, this message translates to:
  /// **'Enable Sensors tab'**
  String get enableSensorsTab;

  /// No description provided for @enableProfiles.
  ///
  /// In en, this message translates to:
  /// **'Enable Profiles'**
  String get enableProfiles;

  /// No description provided for @autoRouteRotation.
  ///
  /// In en, this message translates to:
  /// **'Auto route rotation'**
  String get autoRouteRotation;

  /// No description provided for @nearestRepeaterFallback.
  ///
  /// In en, this message translates to:
  /// **'Nearest repeater fallback'**
  String get nearestRepeaterFallback;

  /// No description provided for @deleteAllStoredMessageHistory.
  ///
  /// In en, this message translates to:
  /// **'Delete all stored message history'**
  String get deleteAllStoredMessageHistory;

  /// No description provided for @messageFontSize.
  ///
  /// In en, this message translates to:
  /// **'Message font size'**
  String get messageFontSize;

  /// No description provided for @rotateMapWithHeading.
  ///
  /// In en, this message translates to:
  /// **'Rotate map with heading'**
  String get rotateMapWithHeading;

  /// No description provided for @showMapDebugInfo.
  ///
  /// In en, this message translates to:
  /// **'Show map debug info'**
  String get showMapDebugInfo;

  /// No description provided for @openMapInFullscreen.
  ///
  /// In en, this message translates to:
  /// **'Open map in fullscreen'**
  String get openMapInFullscreen;

  /// No description provided for @showSarMarkersLabel.
  ///
  /// In en, this message translates to:
  /// **'Show SAR markers'**
  String get showSarMarkersLabel;

  /// No description provided for @displaySarMarkersOnTheMainMap.
  ///
  /// In en, this message translates to:
  /// **'Display SAR markers on the main map'**
  String get displaySarMarkersOnTheMainMap;

  /// No description provided for @showAllContactTrailsLabel.
  ///
  /// In en, this message translates to:
  /// **'Show all contact trails'**
  String get showAllContactTrailsLabel;

  /// No description provided for @hideRepeatersOnMap.
  ///
  /// In en, this message translates to:
  /// **'Hide repeaters on map'**
  String get hideRepeatersOnMap;

  /// No description provided for @setMapScale.
  ///
  /// In en, this message translates to:
  /// **'Set map scale'**
  String get setMapScale;

  /// No description provided for @customMapScaleSaved.
  ///
  /// In en, this message translates to:
  /// **'Custom map scale saved'**
  String get customMapScaleSaved;

  /// No description provided for @voiceBitrate.
  ///
  /// In en, this message translates to:
  /// **'Voice bitrate'**
  String get voiceBitrate;

  /// No description provided for @voiceCompressor.
  ///
  /// In en, this message translates to:
  /// **'Voice compressor'**
  String get voiceCompressor;

  /// No description provided for @balancesQuietAndLoudSpeechLevels.
  ///
  /// In en, this message translates to:
  /// **'Balances quiet and loud speech levels'**
  String get balancesQuietAndLoudSpeechLevels;

  /// No description provided for @voiceLimiter.
  ///
  /// In en, this message translates to:
  /// **'Voice limiter'**
  String get voiceLimiter;

  /// No description provided for @preventsClippingPeaksBeforeEncoding.
  ///
  /// In en, this message translates to:
  /// **'Prevents clipping peaks before encoding'**
  String get preventsClippingPeaksBeforeEncoding;

  /// No description provided for @micAutoGain.
  ///
  /// In en, this message translates to:
  /// **'Mic auto gain'**
  String get micAutoGain;

  /// No description provided for @letsTheRecorderAdjustInputLevel.
  ///
  /// In en, this message translates to:
  /// **'Lets the recorder adjust input level'**
  String get letsTheRecorderAdjustInputLevel;

  /// No description provided for @echoCancellation.
  ///
  /// In en, this message translates to:
  /// **'Echo cancellation'**
  String get echoCancellation;

  /// No description provided for @noiseSuppression.
  ///
  /// In en, this message translates to:
  /// **'Noise suppression'**
  String get noiseSuppression;

  /// No description provided for @trimSilenceInVoiceMessages.
  ///
  /// In en, this message translates to:
  /// **'Trim silence in voice messages'**
  String get trimSilenceInVoiceMessages;

  /// No description provided for @compressor.
  ///
  /// In en, this message translates to:
  /// **'Compressor'**
  String get compressor;

  /// No description provided for @limiter.
  ///
  /// In en, this message translates to:
  /// **'Limiter'**
  String get limiter;

  /// No description provided for @autoGain.
  ///
  /// In en, this message translates to:
  /// **'Auto gain'**
  String get autoGain;

  /// No description provided for @echoCancel.
  ///
  /// In en, this message translates to:
  /// **'Echo cancel'**
  String get echoCancel;

  /// No description provided for @noiseSuppress.
  ///
  /// In en, this message translates to:
  /// **'Noise suppress'**
  String get noiseSuppress;

  /// No description provided for @silenceTrim.
  ///
  /// In en, this message translates to:
  /// **'Silence trim'**
  String get silenceTrim;

  /// No description provided for @maxImageSize.
  ///
  /// In en, this message translates to:
  /// **'Max image size'**
  String get maxImageSize;

  /// No description provided for @imageCompression.
  ///
  /// In en, this message translates to:
  /// **'Image compression'**
  String get imageCompression;

  /// No description provided for @grayscale.
  ///
  /// In en, this message translates to:
  /// **'Grayscale'**
  String get grayscale;

  /// No description provided for @ultraMode.
  ///
  /// In en, this message translates to:
  /// **'Ultra mode'**
  String get ultraMode;

  /// No description provided for @fastPrivateGpsUpdates.
  ///
  /// In en, this message translates to:
  /// **'Fast private GPS updates'**
  String get fastPrivateGpsUpdates;

  /// No description provided for @movementThreshold.
  ///
  /// In en, this message translates to:
  /// **'Movement threshold'**
  String get movementThreshold;

  /// No description provided for @fastGpsMovementThreshold.
  ///
  /// In en, this message translates to:
  /// **'Fast GPS movement threshold'**
  String get fastGpsMovementThreshold;

  /// No description provided for @fastGpsActiveuseInterval.
  ///
  /// In en, this message translates to:
  /// **'Fast GPS active-use interval'**
  String get fastGpsActiveuseInterval;

  /// No description provided for @activeuseUpdateInterval.
  ///
  /// In en, this message translates to:
  /// **'Active-use update interval'**
  String get activeuseUpdateInterval;

  /// No description provided for @repeatNearbyTraffic.
  ///
  /// In en, this message translates to:
  /// **'Repeat nearby traffic'**
  String get repeatNearbyTraffic;

  /// No description provided for @relayThroughRepeatersAcrossTheMesh.
  ///
  /// In en, this message translates to:
  /// **'Relay through repeaters across the mesh'**
  String get relayThroughRepeatersAcrossTheMesh;

  /// No description provided for @nearbyOnlyWithoutRepeaterFlooding.
  ///
  /// In en, this message translates to:
  /// **'Nearby only, without repeater flooding'**
  String get nearbyOnlyWithoutRepeaterFlooding;

  /// No description provided for @multihop.
  ///
  /// In en, this message translates to:
  /// **'Multi-hop'**
  String get multihop;

  /// No description provided for @createProfile.
  ///
  /// In en, this message translates to:
  /// **'Create Profile'**
  String get createProfile;

  /// No description provided for @renameProfile.
  ///
  /// In en, this message translates to:
  /// **'Rename Profile'**
  String get renameProfile;

  /// No description provided for @newProfile.
  ///
  /// In en, this message translates to:
  /// **'New Profile'**
  String get newProfile;

  /// No description provided for @manageProfiles.
  ///
  /// In en, this message translates to:
  /// **'Manage profiles'**
  String get manageProfiles;

  /// No description provided for @enableProfilesToStartManagingThem.
  ///
  /// In en, this message translates to:
  /// **'Enable profiles to start managing them.'**
  String get enableProfilesToStartManagingThem;

  /// No description provided for @openMessage.
  ///
  /// In en, this message translates to:
  /// **'Open message'**
  String get openMessage;

  /// No description provided for @jumpToTheRelatedSarMessage.
  ///
  /// In en, this message translates to:
  /// **'Jump to the related SAR message'**
  String get jumpToTheRelatedSarMessage;

  /// No description provided for @removeSarMarker.
  ///
  /// In en, this message translates to:
  /// **'Remove SAR marker'**
  String get removeSarMarker;

  /// No description provided for @pleaseSelectADestinationToSendSarMarker.
  ///
  /// In en, this message translates to:
  /// **'Please select a destination to send SAR marker'**
  String get pleaseSelectADestinationToSendSarMarker;

  /// No description provided for @sarMarkerBroadcastToPublicChannel.
  ///
  /// In en, this message translates to:
  /// **'SAR marker broadcast to public channel'**
  String get sarMarkerBroadcastToPublicChannel;

  /// No description provided for @sarMarkerSentToRoom.
  ///
  /// In en, this message translates to:
  /// **'SAR marker sent to room'**
  String get sarMarkerSentToRoom;

  /// No description provided for @loadFromGallery.
  ///
  /// In en, this message translates to:
  /// **'Load from gallery'**
  String get loadFromGallery;

  /// No description provided for @replaceImage.
  ///
  /// In en, this message translates to:
  /// **'Replace image'**
  String get replaceImage;

  /// No description provided for @selectFromGallery.
  ///
  /// In en, this message translates to:
  /// **'Select from gallery'**
  String get selectFromGallery;

  /// No description provided for @team.
  ///
  /// In en, this message translates to:
  /// **'Team'**
  String get team;

  /// No description provided for @found.
  ///
  /// In en, this message translates to:
  /// **'Found'**
  String get found;

  /// No description provided for @staging.
  ///
  /// In en, this message translates to:
  /// **'Staging'**
  String get staging;

  /// No description provided for @object.
  ///
  /// In en, this message translates to:
  /// **'Object'**
  String get object;

  /// No description provided for @quiet.
  ///
  /// In en, this message translates to:
  /// **'Quiet'**
  String get quiet;

  /// No description provided for @moderate.
  ///
  /// In en, this message translates to:
  /// **'Moderate'**
  String get moderate;

  /// No description provided for @busy.
  ///
  /// In en, this message translates to:
  /// **'Busy'**
  String get busy;

  /// No description provided for @spectrumScanReturnedNoCandidateFrequencies.
  ///
  /// In en, this message translates to:
  /// **'Spectrum scan returned no candidate frequencies'**
  String get spectrumScanReturnedNoCandidateFrequencies;

  /// No description provided for @searchMessages.
  ///
  /// In en, this message translates to:
  /// **'Search messages'**
  String get searchMessages;

  /// No description provided for @sendImageFromGallery.
  ///
  /// In en, this message translates to:
  /// **'Send image from gallery'**
  String get sendImageFromGallery;

  /// No description provided for @takePhoto.
  ///
  /// In en, this message translates to:
  /// **'Take photo'**
  String get takePhoto;

  /// No description provided for @dmOnly.
  ///
  /// In en, this message translates to:
  /// **'DM only'**
  String get dmOnly;

  /// No description provided for @allMessages.
  ///
  /// In en, this message translates to:
  /// **'All messages'**
  String get allMessages;

  /// No description provided for @sendToPublicChannel.
  ///
  /// In en, this message translates to:
  /// **'Send to Public Channel?'**
  String get sendToPublicChannel;

  /// No description provided for @selectMarkerTypeAndDestination.
  ///
  /// In en, this message translates to:
  /// **'Select marker type and destination'**
  String get selectMarkerTypeAndDestination;

  /// No description provided for @noDestinationsAvailableLabel.
  ///
  /// In en, this message translates to:
  /// **'No destinations available'**
  String get noDestinationsAvailableLabel;

  /// No description provided for @image.
  ///
  /// In en, this message translates to:
  /// **'Image'**
  String get image;

  /// No description provided for @format.
  ///
  /// In en, this message translates to:
  /// **'Format'**
  String get format;

  /// No description provided for @dimensions.
  ///
  /// In en, this message translates to:
  /// **'Dimensions'**
  String get dimensions;

  /// No description provided for @segments.
  ///
  /// In en, this message translates to:
  /// **'Segments'**
  String get segments;

  /// No description provided for @transfers.
  ///
  /// In en, this message translates to:
  /// **'Transfers'**
  String get transfers;

  /// No description provided for @downloadedBy.
  ///
  /// In en, this message translates to:
  /// **'Downloaded by'**
  String get downloadedBy;

  /// No description provided for @saveDiscoverySettings.
  ///
  /// In en, this message translates to:
  /// **'Save discovery settings'**
  String get saveDiscoverySettings;

  /// No description provided for @savePublicInfo.
  ///
  /// In en, this message translates to:
  /// **'Save public info'**
  String get savePublicInfo;

  /// No description provided for @saveRadioSettings.
  ///
  /// In en, this message translates to:
  /// **'Save radio settings'**
  String get saveRadioSettings;

  /// No description provided for @savePath.
  ///
  /// In en, this message translates to:
  /// **'Save Path'**
  String get savePath;

  /// No description provided for @wipeDeviceData.
  ///
  /// In en, this message translates to:
  /// **'Wipe device data'**
  String get wipeDeviceData;

  /// No description provided for @wipeDevice.
  ///
  /// In en, this message translates to:
  /// **'Wipe device'**
  String get wipeDevice;

  /// No description provided for @destructiveDeviceActions.
  ///
  /// In en, this message translates to:
  /// **'Destructive device actions.'**
  String get destructiveDeviceActions;

  /// No description provided for @chooseAPresetOrFinetuneCustomRadioSettings.
  ///
  /// In en, this message translates to:
  /// **'Choose a preset or fine-tune custom radio settings.'**
  String get chooseAPresetOrFinetuneCustomRadioSettings;

  /// No description provided for @chooseTheNameAndLocationThisDeviceShares.
  ///
  /// In en, this message translates to:
  /// **'Choose the name and location this device shares.'**
  String get chooseTheNameAndLocationThisDeviceShares;

  /// No description provided for @availableSpaceOnThisDevice.
  ///
  /// In en, this message translates to:
  /// **'Available space on this device.'**
  String get availableSpaceOnThisDevice;

  /// No description provided for @used.
  ///
  /// In en, this message translates to:
  /// **'Used'**
  String get used;

  /// No description provided for @total.
  ///
  /// In en, this message translates to:
  /// **'Total'**
  String get total;

  /// No description provided for @renameValue.
  ///
  /// In en, this message translates to:
  /// **'Rename value'**
  String get renameValue;

  /// No description provided for @customizeFields.
  ///
  /// In en, this message translates to:
  /// **'Customize fields'**
  String get customizeFields;

  /// No description provided for @livePreview.
  ///
  /// In en, this message translates to:
  /// **'Live preview'**
  String get livePreview;

  /// No description provided for @refreshSchedule.
  ///
  /// In en, this message translates to:
  /// **'Refresh schedule'**
  String get refreshSchedule;

  /// No description provided for @noResponse.
  ///
  /// In en, this message translates to:
  /// **'No response'**
  String get noResponse;

  /// No description provided for @refreshing.
  ///
  /// In en, this message translates to:
  /// **'Refreshing'**
  String get refreshing;

  /// No description provided for @unavailable.
  ///
  /// In en, this message translates to:
  /// **'Unavailable'**
  String get unavailable;

  /// No description provided for @pickARelayOrNodeToWatchInSensors.
  ///
  /// In en, this message translates to:
  /// **'Pick a relay or node to watch in Sensors.'**
  String get pickARelayOrNodeToWatchInSensors;

  /// No description provided for @publicKeyLabel.
  ///
  /// In en, this message translates to:
  /// **'Public key'**
  String get publicKeyLabel;

  /// No description provided for @alreadyInContacts.
  ///
  /// In en, this message translates to:
  /// **'Already in contacts'**
  String get alreadyInContacts;

  /// No description provided for @connectToADeviceBeforeAddingContacts.
  ///
  /// In en, this message translates to:
  /// **'Connect to a device before adding contacts'**
  String get connectToADeviceBeforeAddingContacts;

  /// No description provided for @fromContacts.
  ///
  /// In en, this message translates to:
  /// **'From contacts'**
  String get fromContacts;

  /// No description provided for @onlineOnly.
  ///
  /// In en, this message translates to:
  /// **'Online only'**
  String get onlineOnly;

  /// No description provided for @inBoth.
  ///
  /// In en, this message translates to:
  /// **'In both'**
  String get inBoth;

  /// No description provided for @source.
  ///
  /// In en, this message translates to:
  /// **'Source'**
  String get source;

  /// No description provided for @manualRouteEdit.
  ///
  /// In en, this message translates to:
  /// **'Manual route edit'**
  String get manualRouteEdit;

  /// No description provided for @observedMeshRoute.
  ///
  /// In en, this message translates to:
  /// **'Observed mesh route'**
  String get observedMeshRoute;

  /// No description provided for @allMessagesCleared.
  ///
  /// In en, this message translates to:
  /// **'All messages cleared'**
  String get allMessagesCleared;

  /// No description provided for @onlineTraceDatabaseCleared.
  ///
  /// In en, this message translates to:
  /// **'Online trace database cleared'**
  String get onlineTraceDatabaseCleared;

  /// No description provided for @packetLogsCleared.
  ///
  /// In en, this message translates to:
  /// **'Packet logs cleared'**
  String get packetLogsCleared;

  /// No description provided for @hexDataCopiedToClipboard.
  ///
  /// In en, this message translates to:
  /// **'Hex data copied to clipboard'**
  String get hexDataCopiedToClipboard;

  /// No description provided for @developerModeEnabled.
  ///
  /// In en, this message translates to:
  /// **'Developer mode enabled'**
  String get developerModeEnabled;

  /// No description provided for @developerModeDisabled.
  ///
  /// In en, this message translates to:
  /// **'Developer mode disabled'**
  String get developerModeDisabled;

  /// No description provided for @clipboardIsEmpty.
  ///
  /// In en, this message translates to:
  /// **'Clipboard is empty'**
  String get clipboardIsEmpty;

  /// No description provided for @contactImported.
  ///
  /// In en, this message translates to:
  /// **'Contact imported'**
  String get contactImported;

  /// No description provided for @contactLinkCopiedToClipboard.
  ///
  /// In en, this message translates to:
  /// **'Contact link copied to clipboard'**
  String get contactLinkCopiedToClipboard;

  /// No description provided for @failedToExportContact.
  ///
  /// In en, this message translates to:
  /// **'Failed to export contact'**
  String get failedToExportContact;

  /// No description provided for @noLogsToExport.
  ///
  /// In en, this message translates to:
  /// **'No logs to export'**
  String get noLogsToExport;

  /// No description provided for @exportAsCsv.
  ///
  /// In en, this message translates to:
  /// **'Export as CSV'**
  String get exportAsCsv;

  /// No description provided for @exportAsText.
  ///
  /// In en, this message translates to:
  /// **'Export as Text'**
  String get exportAsText;

  /// No description provided for @receivedRfc3339.
  ///
  /// In en, this message translates to:
  /// **'Received (RFC3339)'**
  String get receivedRfc3339;

  /// No description provided for @buildTime.
  ///
  /// In en, this message translates to:
  /// **'Build Time'**
  String get buildTime;

  /// No description provided for @downloadUrlNotAvailable.
  ///
  /// In en, this message translates to:
  /// **'Download URL not available'**
  String get downloadUrlNotAvailable;

  /// No description provided for @cannotOpenDownloadUrl.
  ///
  /// In en, this message translates to:
  /// **'Cannot open download URL'**
  String get cannotOpenDownloadUrl;

  /// No description provided for @updateCheckIsOnlyAvailableOnAndroid.
  ///
  /// In en, this message translates to:
  /// **'Update check is only available on Android'**
  String get updateCheckIsOnlyAvailableOnAndroid;

  /// No description provided for @youAreRunningTheLatestVersion.
  ///
  /// In en, this message translates to:
  /// **'You are running the latest version'**
  String get youAreRunningTheLatestVersion;

  /// No description provided for @updateAvailableButDownloadUrlNotFound.
  ///
  /// In en, this message translates to:
  /// **'Update available but download URL not found'**
  String get updateAvailableButDownloadUrlNotFound;

  /// No description provided for @startTictactoe.
  ///
  /// In en, this message translates to:
  /// **'Start Tic-Tac-Toe'**
  String get startTictactoe;

  /// No description provided for @tictactoeUnavailable.
  ///
  /// In en, this message translates to:
  /// **'Tic-Tac-Toe unavailable'**
  String get tictactoeUnavailable;

  /// No description provided for @tictactoeOpponentUnknown.
  ///
  /// In en, this message translates to:
  /// **'Tic-Tac-Toe: opponent unknown'**
  String get tictactoeOpponentUnknown;

  /// No description provided for @tictactoeWaitingForStart.
  ///
  /// In en, this message translates to:
  /// **'Tic-Tac-Toe: waiting for start'**
  String get tictactoeWaitingForStart;

  /// No description provided for @acceptsShareLinks.
  ///
  /// In en, this message translates to:
  /// **'Accepts share links'**
  String get acceptsShareLinks;

  /// No description provided for @supportsRawHex.
  ///
  /// In en, this message translates to:
  /// **'Supports raw hex'**
  String get supportsRawHex;

  /// No description provided for @clipboardfriendly.
  ///
  /// In en, this message translates to:
  /// **'Clipboard-friendly'**
  String get clipboardfriendly;

  /// No description provided for @captured.
  ///
  /// In en, this message translates to:
  /// **'Captured'**
  String get captured;

  /// No description provided for @size.
  ///
  /// In en, this message translates to:
  /// **'Size'**
  String get size;

  /// No description provided for @noCustomChannelsToClear.
  ///
  /// In en, this message translates to:
  /// **'No custom channels to clear.'**
  String get noCustomChannelsToClear;

  /// No description provided for @noDeviceContactsToClear.
  ///
  /// In en, this message translates to:
  /// **'No device contacts to clear.'**
  String get noDeviceContactsToClear;

  /// No description provided for @setRegionScope.
  ///
  /// In en, this message translates to:
  /// **'Set region scope'**
  String get setRegionScope;

  /// No description provided for @regionScope.
  ///
  /// In en, this message translates to:
  /// **'Region scope'**
  String get regionScope;

  /// No description provided for @regionScopeNone.
  ///
  /// In en, this message translates to:
  /// **'None (global)'**
  String get regionScopeNone;

  /// No description provided for @clearRegionScope.
  ///
  /// In en, this message translates to:
  /// **'Clear scope'**
  String get clearRegionScope;

  /// No description provided for @regionScopeWarning.
  ///
  /// In en, this message translates to:
  /// **'Only repeaters allowing this region will forward.'**
  String get regionScopeWarning;

  /// No description provided for @discoverRegions.
  ///
  /// In en, this message translates to:
  /// **'Discover from repeaters'**
  String get discoverRegions;

  /// No description provided for @discoveringRegions.
  ///
  /// In en, this message translates to:
  /// **'Discovering regions...'**
  String get discoveringRegions;

  /// No description provided for @enterRegionName.
  ///
  /// In en, this message translates to:
  /// **'Region name (e.g. auckland)'**
  String get enterRegionName;

  /// No description provided for @noRegionsFound.
  ///
  /// In en, this message translates to:
  /// **'No regions found on this repeater.'**
  String get noRegionsFound;

  /// No description provided for @regionScopeSet.
  ///
  /// In en, this message translates to:
  /// **'Region scope set to {name}'**
  String regionScopeSet(String name);

  /// No description provided for @regionScopeCleared.
  ///
  /// In en, this message translates to:
  /// **'Region scope cleared'**
  String get regionScopeCleared;
}

class _AppLocalizationsDelegate
    extends LocalizationsDelegate<AppLocalizations> {
  const _AppLocalizationsDelegate();

  @override
  Future<AppLocalizations> load(Locale locale) {
    return SynchronousFuture<AppLocalizations>(lookupAppLocalizations(locale));
  }

  @override
  bool isSupported(Locale locale) => <String>[
    'de',
    'el',
    'en',
    'es',
    'fr',
    'hr',
    'it',
    'pl',
    'pt',
    'ru',
    'sl',
    'tr',
    'uk',
    'zh',
  ].contains(locale.languageCode);

  @override
  bool shouldReload(_AppLocalizationsDelegate old) => false;
}

AppLocalizations lookupAppLocalizations(Locale locale) {
  // Lookup logic when only language code is specified.
  switch (locale.languageCode) {
    case 'de':
      return AppLocalizationsDe();
    case 'el':
      return AppLocalizationsEl();
    case 'en':
      return AppLocalizationsEn();
    case 'es':
      return AppLocalizationsEs();
    case 'fr':
      return AppLocalizationsFr();
    case 'hr':
      return AppLocalizationsHr();
    case 'it':
      return AppLocalizationsIt();
    case 'pl':
      return AppLocalizationsPl();
    case 'pt':
      return AppLocalizationsPt();
    case 'ru':
      return AppLocalizationsRu();
    case 'sl':
      return AppLocalizationsSl();
    case 'tr':
      return AppLocalizationsTr();
    case 'uk':
      return AppLocalizationsUk();
    case 'zh':
      return AppLocalizationsZh();
  }

  throw FlutterError(
    'AppLocalizations.delegate failed to load unsupported locale "$locale". This is likely '
    'an issue with the localizations generation tool. Please file an issue '
    'on GitHub with a reproducible sample app and the gen-l10n configuration '
    'that was used.',
  );
}
