Files
meshcore-sar_android/lib/l10n/app_localizations.dart
2026-03-07 20:05:31 +01:00

4272 lines
110 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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_ru.dart';
import 'app_localizations_sl.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, youll need to edit this
/// file.
///
/// First, open your projects ios/Runner.xcworkspace Xcode workspace file.
/// Then, in the Project Navigator, open the Info.plist file under the Runner
/// projects 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('ru'),
Locale('sl'),
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 scanning for BLE devices
///
/// In en, this message translates to:
/// **'Scanning for devices...'**
String get scanningForDevices;
/// 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;
/// Success message showing advertised location
///
/// In en, this message translates to:
/// **'Advertised at {latitude}, {longitude}'**
String advertisedAtLocation(String latitude, String longitude);
/// Error message for failed advertisement
///
/// In en, this message translates to:
/// **'Failed to advertise: {error}'**
String failedToAdvertise(String error);
/// Text shown during reconnection attempts
///
/// In en, this message translates to:
/// **'Reconnecting... ({attempt}/{max})'**
String reconnecting(int attempt, int max);
/// Tooltip for cancel reconnection button
///
/// In en, this message translates to:
/// **'Cancel reconnection'**
String get cancelReconnection;
/// Menu item for map management
///
/// In en, this message translates to:
/// **'Map Management'**
String get mapManagement;
/// 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 enable simple mode
///
/// In en, this message translates to:
/// **'Simple Mode'**
String get simpleMode;
/// Description for simple mode setting
///
/// In en, this message translates to:
/// **'Hide non-essential information in messages and contacts'**
String get simpleModeDescription;
/// 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;
/// English language option
///
/// In en, this message translates to:
/// **'English'**
String get english;
/// Slovenian language option
///
/// In en, this message translates to:
/// **'Slovenian'**
String get slovenian;
/// Croatian language option
///
/// In en, this message translates to:
/// **'Croatian'**
String get croatian;
/// German language option
///
/// In en, this message translates to:
/// **'German'**
String get german;
/// Spanish language option
///
/// In en, this message translates to:
/// **'Spanish'**
String get spanish;
/// French language option
///
/// In en, this message translates to:
/// **'French'**
String get french;
/// Italian language option
///
/// In en, this message translates to:
/// **'Italian'**
String get italian;
/// Location settings section header
///
/// In en, this message translates to:
/// **'Location Broadcasting'**
String get locationBroadcasting;
/// Auto location tracking setting
///
/// In en, this message translates to:
/// **'Auto Location Tracking'**
String get autoLocationTracking;
/// Description for auto location tracking
///
/// In en, this message translates to:
/// **'Automatically broadcast position updates'**
String get automaticallyBroadcastPosition;
/// Configure tracking button label
///
/// In en, this message translates to:
/// **'Configure Tracking'**
String get configureTracking;
/// Description for tracking configuration
///
/// In en, this message translates to:
/// **'Distance and time thresholds'**
String get distanceAndTimeThresholds;
/// Tracking configuration dialog title
///
/// In en, this message translates to:
/// **'Location Tracking Configuration'**
String get locationTrackingConfiguration;
/// Description for tracking configuration dialog
///
/// In en, this message translates to:
/// **'Configure when location broadcasts are sent to the mesh network'**
String get configureWhenLocationBroadcasts;
/// Minimum distance setting label
///
/// In en, this message translates to:
/// **'Minimum Distance'**
String get minimumDistance;
/// Description for minimum distance
///
/// In en, this message translates to:
/// **'Broadcast only after moving {distance} meters'**
String broadcastAfterMoving(String distance);
/// Maximum distance setting label
///
/// In en, this message translates to:
/// **'Maximum Distance'**
String get maximumDistance;
/// Description for maximum distance
///
/// In en, this message translates to:
/// **'Always broadcast after moving {distance} meters'**
String alwaysBroadcastAfterMoving(String distance);
/// Minimum time interval setting label
///
/// In en, this message translates to:
/// **'Minimum Time Interval'**
String get minimumTimeInterval;
/// Description for time interval
///
/// In en, this message translates to:
/// **'Always broadcast every {duration}'**
String alwaysBroadcastEvery(String duration);
/// 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;
/// Learn more link description
///
/// In en, this message translates to:
/// **'Learn more about MeshCore SAR'**
String get learnMoreAbout;
/// Developer section header
///
/// In en, this message translates to:
/// **'Developer'**
String get developer;
/// 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 send direct message to contact
///
/// In en, this message translates to:
/// **'Send'**
String get sendDirectMessage;
/// 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);
/// System message when drawings are sent to room
///
/// In en, this message translates to:
/// **'Sent {count} map drawing{plural} to {roomName}'**
String sentDrawingsToRoom(int count, String plural, String roomName);
/// Snackbar message showing drawings shared to room
///
/// In en, this message translates to:
/// **'Shared {success}/{total} drawing{plural} to {roomName}'**
String sharedDrawingsToRoom(
int success,
int total,
String plural,
String roomName,
);
/// 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;
/// Message when there are no drawings to share
///
/// In en, this message translates to:
/// **'No local drawings to share'**
String get noLocalDrawings;
/// 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;
/// System message when drawings are sent to public channel
///
/// In en, this message translates to:
/// **'Sent {count} map drawing{plural} to Public Channel'**
String drawingsSentToPublicChannel(int count, String plural);
/// Snackbar message showing success count for drawings shared to public channel
///
/// In en, this message translates to:
/// **'Shared {success}/{total} drawings to Public Channel'**
String drawingsSharedToPublicChannel(int success, int total);
/// Error message when device is not connected for direct messaging
///
/// In en, this message translates to:
/// **'Not connected to device'**
String get notConnectedToDevice;
/// Title for direct message sheet
///
/// In en, this message translates to:
/// **'Direct Message'**
String get directMessage;
/// Success message after sending direct message
///
/// In en, this message translates to:
/// **'Direct message sent to {contactName}'**
String directMessageSentTo(String contactName);
/// Error message when sending direct message fails
///
/// In en, this message translates to:
/// **'Failed to send: {error}'**
String failedToSend(String error);
/// Information about direct messaging behavior
///
/// In en, this message translates to:
/// **'This message will be sent directly to {contactName}. It will also appear in the main messages feed.'**
String directMessageInfo(String contactName);
/// 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;
/// Button label to insert current GPS location
///
/// In en, this message translates to:
/// **'My Location'**
String get myLocation;
/// 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;
/// Admin badge label
///
/// In en, this message translates to:
/// **'Admin'**
String get admin;
/// 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;
/// Status message for direct ping
///
/// In en, this message translates to:
/// **'Pinging {name} (direct via path)...'**
String pingingDirect(String name);
/// Status message for flood ping
///
/// In en, this message translates to:
/// **'Pinging {name} (flooding - no path)...'**
String pingingFlood(String name);
/// Warning when direct ping times out
///
/// In en, this message translates to:
/// **'Direct ping timeout - retrying {name} with flooding...'**
String directPingTimeout(String name);
/// Success message for ping
///
/// In en, this message translates to:
/// **'Ping successful to {name}{fallback}'**
String pingSuccessful(String name, String fallback);
/// Suffix for ping success with fallback
///
/// In en, this message translates to:
/// **' (via flooding fallback)'**
String get viaFloodingFallback;
/// 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);
/// Status message while removing contact
///
/// In en, this message translates to:
/// **'Removing {name}...'**
String removingContact(String name);
/// Success message after removing contact
///
/// In en, this message translates to:
/// **'Contact \"{name}\" removed'**
String contactRemoved(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;
/// Status message while requesting telemetry
///
/// In en, this message translates to:
/// **'Requesting telemetry from {name}...'**
String requestingTelemetry(String name);
/// 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;
/// Title for nearby contacts list in compass
///
/// In en, this message translates to:
/// **'Nearby Contacts'**
String get nearbyContacts;
/// 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 cache statistics section
///
/// In en, this message translates to:
/// **'Cache Statistics'**
String get cacheStatistics;
/// Label for total number of cached tiles
///
/// In en, this message translates to:
/// **'Total Tiles'**
String get totalTiles;
/// Label for cache size in MB
///
/// In en, this message translates to:
/// **'Cache Size'**
String get cacheSize;
/// Label for cache store name
///
/// In en, this message translates to:
/// **'Store Name'**
String get storeName;
/// Message when cache statistics are unavailable
///
/// In en, this message translates to:
/// **'No cache statistics available'**
String get noCacheStatistics;
/// Title for download region section
///
/// In en, this message translates to:
/// **'Download Region'**
String get downloadRegion;
/// Label for map layer selection
///
/// In en, this message translates to:
/// **'Map Layer'**
String get mapLayer;
/// Title for region bounds input section
///
/// In en, this message translates to:
/// **'Region Bounds'**
String get regionBounds;
/// Label for north coordinate
///
/// In en, this message translates to:
/// **'North'**
String get north;
/// Label for south coordinate
///
/// In en, this message translates to:
/// **'South'**
String get south;
/// Label for east coordinate
///
/// In en, this message translates to:
/// **'East'**
String get east;
/// Label for west coordinate
///
/// In en, this message translates to:
/// **'West'**
String get west;
/// Title for zoom levels section
///
/// In en, this message translates to:
/// **'Zoom Levels'**
String get zoomLevels;
/// Label for minimum zoom level
///
/// In en, this message translates to:
/// **'Min: {zoom}'**
String minZoom(int zoom);
/// Label for maximum zoom level
///
/// In en, this message translates to:
/// **'Max: {zoom}'**
String maxZoom(int zoom);
/// Status message during download
///
/// In en, this message translates to:
/// **'Downloading...'**
String get downloadingDots;
/// Button to cancel download
///
/// In en, this message translates to:
/// **'Cancel Download'**
String get cancelDownload;
/// Button to start region download
///
/// In en, this message translates to:
/// **'Download Region'**
String get downloadRegionButton;
/// Warning about download size and time
///
/// In en, this message translates to:
/// **'Note: Large regions or high zoom levels may take significant time and storage.'**
String get downloadNote;
/// Title for cache management section
///
/// In en, this message translates to:
/// **'Cache Management'**
String get cacheManagement;
/// Button to clear all cached maps
///
/// In en, this message translates to:
/// **'Clear All Maps'**
String get clearAllMaps;
/// Title for clear maps confirmation dialog
///
/// In en, this message translates to:
/// **'Clear All Maps'**
String get clearMapsConfirmTitle;
/// Confirmation message for clearing maps
///
/// In en, this message translates to:
/// **'Are you sure you want to delete all downloaded maps? This action cannot be undone.'**
String get clearMapsConfirmMessage;
/// Success message after map download
///
/// In en, this message translates to:
/// **'Map download completed!'**
String get mapDownloadCompleted;
/// Success message after clearing cache
///
/// In en, this message translates to:
/// **'Cache cleared successfully!'**
String get cacheClearedSuccessfully;
/// Message when download is cancelled
///
/// In en, this message translates to:
/// **'Download cancelled'**
String get downloadCancelled;
/// Initial status when download begins
///
/// In en, this message translates to:
/// **'Starting download...'**
String get startingDownload;
/// Status during tile download
///
/// In en, this message translates to:
/// **'Downloading map tiles...'**
String get downloadingMapTiles;
/// Status after successful download
///
/// In en, this message translates to:
/// **'Download completed successfully!'**
String get downloadCompletedSuccessfully;
/// Status while cancelling download
///
/// In en, this message translates to:
/// **'Cancelling download...'**
String get cancellingDownload;
/// Error message when loading cache stats fails
///
/// In en, this message translates to:
/// **'Error loading stats: {error}'**
String errorLoadingStats(String error);
/// Error message when download fails
///
/// In en, this message translates to:
/// **'Download failed: {error}'**
String downloadFailed(String error);
/// Error message when cancel fails
///
/// In en, this message translates to:
/// **'Cancel failed: {error}'**
String cancelFailed(String error);
/// Error message when clearing cache fails
///
/// In en, this message translates to:
/// **'Clear cache failed: {error}'**
String clearCacheFailed(String error);
/// Validation error for minimum zoom
///
/// In en, this message translates to:
/// **'Min zoom: {error}'**
String minZoomError(String error);
/// Validation error for maximum zoom
///
/// In en, this message translates to:
/// **'Max zoom: {error}'**
String maxZoomError(String error);
/// Validation error when min zoom > max zoom
///
/// In en, this message translates to:
/// **'Minimum zoom must be less than or equal to maximum zoom'**
String get minZoomGreaterThanMax;
/// Title for map layer selection dialog
///
/// In en, this message translates to:
/// **'Select Map Layer'**
String get selectMapLayer;
/// Title for map options dialog
///
/// In en, this message translates to:
/// **'Map Options'**
String get mapOptions;
/// Toggle for showing map legend
///
/// In en, this message translates to:
/// **'Show Legend'**
String get showLegend;
/// Description for show legend toggle
///
/// In en, this message translates to:
/// **'Display marker type counts'**
String get displayMarkerTypeCounts;
/// Toggle for rotating map with compass heading
///
/// In en, this message translates to:
/// **'Rotate Map with Heading'**
String get rotateMapWithHeading;
/// Description for rotate map toggle
///
/// In en, this message translates to:
/// **'Map follows your direction when moving'**
String get mapFollowsDirection;
/// Button to reset map rotation to north
///
/// In en, this message translates to:
/// **'Reset Rotation'**
String get resetMapRotation;
/// Tooltip for reset rotation button
///
/// In en, this message translates to:
/// **'Reset map to north'**
String get resetMapRotationTooltip;
/// Toggle for showing map debug information
///
/// In en, this message translates to:
/// **'Show Map Debug Info'**
String get showMapDebugInfo;
/// Description for debug info toggle
///
/// In en, this message translates to:
/// **'Display zoom level and bounds'**
String get displayZoomLevelBounds;
/// Toggle for fullscreen map mode
///
/// In en, this message translates to:
/// **'Fullscreen Mode'**
String get fullscreenMode;
/// Description for fullscreen mode toggle
///
/// In en, this message translates to:
/// **'Hide all UI controls for full map view'**
String get hideUiFullMapView;
/// 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;
/// Tooltip for download visible area button
///
/// In en, this message translates to:
/// **'Download visible area'**
String get downloadVisibleArea;
/// Loading message for map initialization
///
/// In en, this message translates to:
/// **'Initializing map...'**
String get initializingMap;
/// 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 message is sent to public channel
///
/// In en, this message translates to:
/// **'Message sent to public channel'**
String get messageSentToPublicChannel;
/// Error when no room is selected for SAR marker
///
/// In en, this message translates to:
/// **'Please select a room to send SAR marker'**
String get pleaseSelectRoomToSendSar;
/// Error message when SAR marker fails to send
///
/// In en, this message translates to:
/// **'Failed to send SAR marker: {error}'**
String failedToSendSarMarker(String error);
/// Success message when SAR marker is sent to room
///
/// In en, this message translates to:
/// **'SAR marker sent to {roomName}'**
String sarMarkerSentTo(String roomName);
/// Warning when trying to sync messages while not connected
///
/// In en, this message translates to:
/// **'Not connected - cannot sync messages'**
String get notConnectedCannotSync;
/// Success message showing number of synced messages
///
/// In en, this message translates to:
/// **'Synced {count} message(s)'**
String syncedMessageCount(int count);
/// Info message when no new messages to sync
///
/// In en, this message translates to:
/// **'No new messages'**
String get noNewMessages;
/// Error message when sync fails
///
/// In en, this message translates to:
/// **'Sync failed: {error}'**
String syncFailed(String error);
/// Error when message retry fails
///
/// In en, this message translates to:
/// **'Failed to resend message'**
String get failedToResendMessage;
/// Info message when retrying a failed message
///
/// In en, this message translates to:
/// **'Retrying message...'**
String get retryingMessage;
/// Error message when retry fails
///
/// In en, this message translates to:
/// **'Retry failed: {error}'**
String retryFailed(String error);
/// 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;
/// Info message when message is deleted
///
/// In en, this message translates to:
/// **'Message deleted'**
String get messageDeleted;
/// 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;
/// Success message when location is shared
///
/// In en, this message translates to:
/// **'Location shared'**
String get locationShared;
/// Success message when contacts are refreshed
///
/// In en, this message translates to:
/// **'Refreshed contacts'**
String get refreshedContacts;
/// 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;
/// Title for offline vector maps section
///
/// In en, this message translates to:
/// **'Offline Vector Maps'**
String get offlineVectorMaps;
/// Description for offline vector maps section
///
/// In en, this message translates to:
/// **'Import and manage offline vector map tiles (MBTiles format) for use without internet connection'**
String get offlineVectorMapsDescription;
/// Button to import MBTiles file
///
/// In en, this message translates to:
/// **'Import MBTiles File'**
String get importMbtiles;
/// Note about supported MBTiles file types
///
/// In en, this message translates to:
/// **'Supports MBTiles files with vector tiles (PBF/MVT format). Geofabrik extracts work great!'**
String get importMbtilesNote;
/// Message when no MBTiles files are available
///
/// In en, this message translates to:
/// **'No offline vector maps found'**
String get noMbtilesFiles;
/// Success message after importing MBTiles file
///
/// In en, this message translates to:
/// **'MBTiles file imported successfully'**
String get mbtilesImportedSuccessfully;
/// Error message when MBTiles import fails
///
/// In en, this message translates to:
/// **'Failed to import MBTiles file'**
String get failedToImportMbtiles;
/// Title for delete MBTiles confirmation dialog
///
/// In en, this message translates to:
/// **'Delete Offline Map'**
String get deleteMbtilesConfirmTitle;
/// Confirmation message for deleting MBTiles file
///
/// In en, this message translates to:
/// **'Are you sure you want to delete \"{name}\"? This will permanently remove the offline map.'**
String deleteMbtilesConfirmMessage(String name);
/// Success message after deleting MBTiles file
///
/// In en, this message translates to:
/// **'Offline map deleted successfully'**
String get mbtilesDeletedSuccessfully;
/// Error message when MBTiles deletion fails
///
/// In en, this message translates to:
/// **'Failed to delete offline map'**
String get failedToDeleteMbtiles;
/// Title for import/export section
///
/// In en, this message translates to:
/// **'Import/Export Cached Tiles'**
String get importExportCachedTiles;
/// Description for import/export functionality
///
/// In en, this message translates to:
/// **'Backup, share, and restore downloaded map tiles between devices'**
String get importExportDescription;
/// Button to export tiles to archive file
///
/// In en, this message translates to:
/// **'Export Tiles to File'**
String get exportTilesToFile;
/// Button to import tiles from archive file
///
/// In en, this message translates to:
/// **'Import Tiles from File'**
String get importTilesFromFile;
/// Title for export file picker
///
/// In en, this message translates to:
/// **'Select Export Location'**
String get selectExportLocation;
/// Title for import file picker
///
/// In en, this message translates to:
/// **'Select Tile Archive'**
String get selectImportFile;
/// Status message during export
///
/// In en, this message translates to:
/// **'Exporting tiles...'**
String get exportingTiles;
/// Status message during import
///
/// In en, this message translates to:
/// **'Importing tiles...'**
String get importingTiles;
/// Success message after export
///
/// In en, this message translates to:
/// **'Exported {count} tiles successfully'**
String exportSuccess(int count);
/// Success message after import
///
/// In en, this message translates to:
/// **'Imported {count} stores successfully'**
String importSuccess(int count);
/// 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);
/// Note about export functionality
///
/// In en, this message translates to:
/// **'Creates a compressed archive (.fmtc) file that can be shared and imported on other devices.'**
String get exportNote;
/// Note about import functionality
///
/// In en, this message translates to:
/// **'Imports map tiles from a previously exported archive file. Tiles will be merged with existing cache.'**
String get importNote;
/// Message when cache is empty
///
/// In en, this message translates to:
/// **'No tiles available to export'**
String get noTilesToExport;
/// Information about archive contents
///
/// In en, this message translates to:
/// **'Archive contains {count} stores'**
String archiveContainsStores(int count);
/// Label for vector tile type
///
/// In en, this message translates to:
/// **'Vector Tiles'**
String get vectorTiles;
/// Label for vector tile schema
///
/// In en, this message translates to:
/// **'Schema'**
String get schema;
/// Unknown value label
///
/// In en, this message translates to:
/// **'Unknown'**
String get unknown;
/// Label for geographic bounds
///
/// In en, this message translates to:
/// **'Bounds'**
String get bounds;
/// Section header for online map layers
///
/// In en, this message translates to:
/// **'Online Layers'**
String get onlineLayers;
/// Section header for offline map layers (MBTiles)
///
/// In en, this message translates to:
/// **'Offline Layers'**
String get offlineLayers;
/// 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;
/// Button label to export trail to GPX file
///
/// In en, this message translates to:
/// **'Export Trail to GPX'**
String get exportTrailToGpx;
/// Button label to import trail from GPX file
///
/// In en, this message translates to:
/// **'Import Trail from GPX'**
String get importTrailFromGpx;
/// Success message when trail is exported
///
/// In en, this message translates to:
/// **'Trail exported successfully!'**
String get trailExportedSuccessfully;
/// Error message when trail export fails
///
/// In en, this message translates to:
/// **'Failed to export trail'**
String get failedToExportTrail;
/// Error message when trail import fails
///
/// In en, this message translates to:
/// **'Failed to import trail: {error}'**
String failedToImportTrail(String error);
/// Import trail dialog title
///
/// In en, this message translates to:
/// **'Import Trail'**
String get importTrail;
/// Import trail confirmation dialog content
///
/// In en, this message translates to:
/// **'Import trail with {pointCount} points?\n\nYou can replace your current trail or view it alongside.'**
String importTrailQuestion(int pointCount);
/// Button to import trail alongside current trail
///
/// In en, this message translates to:
/// **'View Alongside'**
String get viewAlongside;
/// Button to replace current trail with imported trail
///
/// In en, this message translates to:
/// **'Replace Current'**
String get replaceCurrent;
/// Success message when trail is imported
///
/// In en, this message translates to:
/// **'Trail imported! ({pointCount} points)'**
String trailImported(int pointCount);
/// Success message when trail is replaced
///
/// In en, this message translates to:
/// **'Trail replaced! ({pointCount} points)'**
String trailReplaced(int pointCount);
/// 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 contacts or rooms exist
///
/// In en, this message translates to:
/// **'No contacts or rooms available'**
String get noContactsOrRoomsAvailable;
/// 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;
/// Info message when only public channel is available
///
/// In en, this message translates to:
/// **'Messages will be sent to public channel'**
String get messagesWillBeSentToPublicChannel;
/// 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;
/// Success message when coordinates are copied
///
/// In en, this message translates to:
/// **'Coordinates copied to clipboard'**
String get coordinatesCopiedToClipboard;
/// 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;
/// Error message for invalid latitude value
///
/// In en, this message translates to:
/// **'Invalid latitude (-90 to 90)'**
String get invalidLatitude;
/// Error message for invalid longitude value
///
/// In en, this message translates to:
/// **'Invalid longitude (-180 to 180)'**
String get invalidLongitude;
/// Example coordinate format hint
///
/// In en, this message translates to:
/// **'Example: 46.0569, 14.5058'**
String get exampleCoordinates;
/// Label for shared drawing notifications
///
/// In en, this message translates to:
/// **'Map Drawing'**
String get drawingShared;
/// Success message when drawing is hidden
///
/// In en, this message translates to:
/// **'Drawing hidden from map'**
String get drawingHidden;
/// Message showing how many drawings were already shared
///
/// In en, this message translates to:
/// **'{count, plural, =1{1 already shared} other{{count} already shared}}'**
String alreadyShared(int count);
/// Success message after sharing new drawings
///
/// In en, this message translates to:
/// **'Shared {count} new drawing{plural}'**
String newDrawingsShared(int count, String plural);
/// 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;
/// Tooltip for cadastral parcels overlay toggle button
///
/// In en, this message translates to:
/// **'Show Cadastral Parcels'**
String get showCadastralParcels;
/// Tooltip for forest roads overlay toggle button
///
/// In en, this message translates to:
/// **'Show Forest Roads'**
String get showForestRoads;
/// 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);
/// Error when no channel slots available
///
/// In en, this message translates to:
/// **'All channel slots are in use (maximum 39 custom channels)'**
String get allChannelSlotsInUse;
/// 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 simple mode page title
///
/// In en, this message translates to:
/// **'Simple Mode'**
String get wizardSimpleModeTitle;
/// Wizard simple mode page description
///
/// In en, this message translates to:
/// **'New to mesh networking? Enable Simple Mode for a streamlined interface with essential features only.'**
String get wizardSimpleModeDescription;
/// Wizard simple mode feature 1
///
/// In en, this message translates to:
/// **'Beginner-friendly interface with core functions'**
String get wizardSimpleModeFeature1;
/// Wizard simple mode feature 2
///
/// In en, this message translates to:
/// **'Switch to Advanced Mode anytime in Settings'**
String get wizardSimpleModeFeature2;
/// 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;
}
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',
'ru',
'sl',
'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 'ru':
return AppLocalizationsRu();
case 'sl':
return AppLocalizationsSl();
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.',
);
}