mirror of
https://github.com/dz0ny/meshcore-sar.git
synced 2026-08-11 16:30:28 +00:00
3279 lines
83 KiB
Dart
3279 lines
83 KiB
Dart
import 'dart:async';
|
||
|
||
import 'package:flutter/foundation.dart';
|
||
import 'package:flutter/widgets.dart';
|
||
import 'package:flutter_localizations/flutter_localizations.dart';
|
||
import 'package:intl/intl.dart' as intl;
|
||
|
||
import 'app_localizations_de.dart';
|
||
import 'app_localizations_el.dart';
|
||
import 'app_localizations_en.dart';
|
||
import 'app_localizations_es.dart';
|
||
import 'app_localizations_fr.dart';
|
||
import 'app_localizations_hr.dart';
|
||
import 'app_localizations_it.dart';
|
||
import 'app_localizations_pl.dart';
|
||
import 'app_localizations_pt.dart';
|
||
import 'app_localizations_ru.dart';
|
||
import 'app_localizations_sl.dart';
|
||
import 'app_localizations_tr.dart';
|
||
import 'app_localizations_uk.dart';
|
||
import 'app_localizations_zh.dart';
|
||
|
||
// ignore_for_file: type=lint
|
||
|
||
/// Callers can lookup localized strings with an instance of AppLocalizations
|
||
/// returned by `AppLocalizations.of(context)`.
|
||
///
|
||
/// Applications need to include `AppLocalizations.delegate()` in their app's
|
||
/// `localizationDelegates` list, and the locales they support in the app's
|
||
/// `supportedLocales` list. For example:
|
||
///
|
||
/// ```dart
|
||
/// import 'l10n/app_localizations.dart';
|
||
///
|
||
/// return MaterialApp(
|
||
/// localizationsDelegates: AppLocalizations.localizationsDelegates,
|
||
/// supportedLocales: AppLocalizations.supportedLocales,
|
||
/// home: MyApplicationHome(),
|
||
/// );
|
||
/// ```
|
||
///
|
||
/// ## Update pubspec.yaml
|
||
///
|
||
/// Please make sure to update your pubspec.yaml to include the following
|
||
/// packages:
|
||
///
|
||
/// ```yaml
|
||
/// dependencies:
|
||
/// # Internationalization support.
|
||
/// flutter_localizations:
|
||
/// sdk: flutter
|
||
/// intl: any # Use the pinned version from flutter_localizations
|
||
///
|
||
/// # Rest of dependencies
|
||
/// ```
|
||
///
|
||
/// ## iOS Applications
|
||
///
|
||
/// iOS applications define key application metadata, including supported
|
||
/// locales, in an Info.plist file that is built into the application bundle.
|
||
/// To configure the locales supported by your app, you’ll need to edit this
|
||
/// file.
|
||
///
|
||
/// First, open your project’s ios/Runner.xcworkspace Xcode workspace file.
|
||
/// Then, in the Project Navigator, open the Info.plist file under the Runner
|
||
/// project’s Runner folder.
|
||
///
|
||
/// Next, select the Information Property List item, select Add Item from the
|
||
/// Editor menu, then select Localizations from the pop-up menu.
|
||
///
|
||
/// Select and expand the newly-created Localizations item then, for each
|
||
/// locale your application supports, add a new item and select the locale
|
||
/// you wish to add from the pop-up menu in the Value field. This list should
|
||
/// be consistent with the languages listed in the AppLocalizations.supportedLocales
|
||
/// property.
|
||
abstract class AppLocalizations {
|
||
AppLocalizations(String locale)
|
||
: localeName = intl.Intl.canonicalizedLocale(locale.toString());
|
||
|
||
final String localeName;
|
||
|
||
static AppLocalizations? of(BuildContext context) {
|
||
return Localizations.of<AppLocalizations>(context, AppLocalizations);
|
||
}
|
||
|
||
static const LocalizationsDelegate<AppLocalizations> delegate =
|
||
_AppLocalizationsDelegate();
|
||
|
||
/// A list of this localizations delegate along with the default localizations
|
||
/// delegates.
|
||
///
|
||
/// Returns a list of localizations delegates containing this delegate along with
|
||
/// GlobalMaterialLocalizations.delegate, GlobalCupertinoLocalizations.delegate,
|
||
/// and GlobalWidgetsLocalizations.delegate.
|
||
///
|
||
/// Additional delegates can be added by appending to this list in
|
||
/// MaterialApp. This list does not have to be used at all if a custom list
|
||
/// of delegates is preferred or required.
|
||
static const List<LocalizationsDelegate<dynamic>> localizationsDelegates =
|
||
<LocalizationsDelegate<dynamic>>[
|
||
delegate,
|
||
GlobalMaterialLocalizations.delegate,
|
||
GlobalCupertinoLocalizations.delegate,
|
||
GlobalWidgetsLocalizations.delegate,
|
||
];
|
||
|
||
/// A list of this localizations delegate's supported locales.
|
||
static const List<Locale> supportedLocales = <Locale>[
|
||
Locale('de'),
|
||
Locale('el'),
|
||
Locale('en'),
|
||
Locale('es'),
|
||
Locale('fr'),
|
||
Locale('hr'),
|
||
Locale('it'),
|
||
Locale('pl'),
|
||
Locale('pt'),
|
||
Locale('ru'),
|
||
Locale('sl'),
|
||
Locale('tr'),
|
||
Locale('uk'),
|
||
Locale('zh'),
|
||
];
|
||
|
||
/// The application title
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'MeshCore SAR'**
|
||
String get appTitle;
|
||
|
||
/// Messages tab label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Messages'**
|
||
String get messages;
|
||
|
||
/// Contacts tab label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Contacts'**
|
||
String get contacts;
|
||
|
||
/// Map tab label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Map'**
|
||
String get map;
|
||
|
||
/// Settings screen title
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Settings'**
|
||
String get settings;
|
||
|
||
/// Connect button label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Connect'**
|
||
String get connect;
|
||
|
||
/// Disconnect button label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Disconnect'**
|
||
String get disconnect;
|
||
|
||
/// Text shown when no BLE devices are found
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'No devices found'**
|
||
String get noDevicesFound;
|
||
|
||
/// Button to restart BLE scanning
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Scan Again'**
|
||
String get scanAgain;
|
||
|
||
/// Subtitle text for device in scan list
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Tap to connect'**
|
||
String get tapToConnect;
|
||
|
||
/// Error message when device is not connected
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Device not connected'**
|
||
String get deviceNotConnected;
|
||
|
||
/// Error when location permission is denied
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Location permission denied'**
|
||
String get locationPermissionDenied;
|
||
|
||
/// Error when location permission is permanently denied
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Location permission permanently denied. Please enable in Settings.'**
|
||
String get locationPermissionPermanentlyDenied;
|
||
|
||
/// Message when location permission is needed
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Location permission is required for GPS tracking and team coordination. You can enable it later in Settings.'**
|
||
String get locationPermissionRequired;
|
||
|
||
/// Error when location services are disabled
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Location services are disabled. Please enable them in Settings.'**
|
||
String get locationServicesDisabled;
|
||
|
||
/// Error when GPS location cannot be obtained
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Failed to get GPS location'**
|
||
String get failedToGetGpsLocation;
|
||
|
||
/// Error message for failed advertisement
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Failed to advertise: {error}'**
|
||
String failedToAdvertise(String error);
|
||
|
||
/// Tooltip for cancel reconnection button
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Cancel reconnection'**
|
||
String get cancelReconnection;
|
||
|
||
/// General settings section header
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'General'**
|
||
String get general;
|
||
|
||
/// Theme setting label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Theme'**
|
||
String get theme;
|
||
|
||
/// Theme selection dialog title
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Choose Theme'**
|
||
String get chooseTheme;
|
||
|
||
/// Light theme option
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Light'**
|
||
String get light;
|
||
|
||
/// Dark theme option
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Dark'**
|
||
String get dark;
|
||
|
||
/// Description for blue light theme
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Blue light theme'**
|
||
String get blueLightTheme;
|
||
|
||
/// Description for blue dark theme
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Blue dark theme'**
|
||
String get blueDarkTheme;
|
||
|
||
/// SAR Red theme option
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'SAR Red'**
|
||
String get sarRed;
|
||
|
||
/// Description for SAR Red theme
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Alert/Emergency mode'**
|
||
String get alertEmergencyMode;
|
||
|
||
/// SAR Green theme option
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'SAR Green'**
|
||
String get sarGreen;
|
||
|
||
/// Description for SAR Green theme
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Safe/All Clear mode'**
|
||
String get safeAllClearMode;
|
||
|
||
/// Auto/System theme option
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Auto (System)'**
|
||
String get autoSystem;
|
||
|
||
/// Description for system theme
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Follow system theme'**
|
||
String get followSystemTheme;
|
||
|
||
/// Setting to show RX/TX indicators
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Show RX/TX Indicators'**
|
||
String get showRxTxIndicators;
|
||
|
||
/// Description for RX/TX indicators setting
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Display packet activity indicators in top bar'**
|
||
String get displayPacketActivity;
|
||
|
||
/// Setting to disable the map tab
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Disable Map'**
|
||
String get disableMap;
|
||
|
||
/// Description for disable map setting
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Hide the map tab to reduce battery usage'**
|
||
String get disableMapDescription;
|
||
|
||
/// Language setting label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Language'**
|
||
String get language;
|
||
|
||
/// Language selection dialog title
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Choose Language'**
|
||
String get chooseLanguage;
|
||
|
||
/// Save button label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Save'**
|
||
String get save;
|
||
|
||
/// Cancel button label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Cancel'**
|
||
String get cancel;
|
||
|
||
/// Close button label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Close'**
|
||
String get close;
|
||
|
||
/// About section header
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'About'**
|
||
String get about;
|
||
|
||
/// App version label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'App Version'**
|
||
String get appVersion;
|
||
|
||
/// App name label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'App Name'**
|
||
String get appName;
|
||
|
||
/// About dialog title
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'About MeshCore SAR'**
|
||
String get aboutMeshCoreSar;
|
||
|
||
/// About dialog description
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'A Search & Rescue application designed for emergency response teams. Features include:\n\n• BLE mesh networking for device-to-device communication\n• Offline maps with multiple layer options\n• Real-time team member tracking\n• SAR tactical markers (found person, fire, staging)\n• Contact management and messaging\n• GPS tracking with compass heading\n• Map tile caching for offline use'**
|
||
String get aboutDescription;
|
||
|
||
/// Technologies used section title
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Technologies Used:'**
|
||
String get technologiesUsed;
|
||
|
||
/// List of technologies used
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'• Flutter for cross-platform development\n• BLE (Bluetooth Low Energy) for mesh networking\n• OpenStreetMap for mapping\n• Provider for state management\n• SharedPreferences for local storage'**
|
||
String get technologiesList;
|
||
|
||
/// More info button label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'More Info'**
|
||
String get moreInfo;
|
||
|
||
/// Package name label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Package Name'**
|
||
String get packageName;
|
||
|
||
/// Sample data section header
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Sample Data'**
|
||
String get sampleData;
|
||
|
||
/// Sample data section description
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Load or clear sample contacts, channel messages, and SAR markers for testing'**
|
||
String get sampleDataDescription;
|
||
|
||
/// Load sample data button
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Load Sample Data'**
|
||
String get loadSampleData;
|
||
|
||
/// Clear all data button
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Clear All Data'**
|
||
String get clearAllData;
|
||
|
||
/// Clear data confirmation dialog title
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Clear All Data'**
|
||
String get clearAllDataConfirmTitle;
|
||
|
||
/// Clear data confirmation message
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'This will clear all contacts and SAR markers. Are you sure?'**
|
||
String get clearAllDataConfirmMessage;
|
||
|
||
/// Clear button label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Clear'**
|
||
String get clear;
|
||
|
||
/// Success message after loading sample data
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Loaded {teamCount} team members, {channelCount} channels, {sarCount} SAR markers, {messageCount} messages'**
|
||
String loadedSampleData(
|
||
int teamCount,
|
||
int channelCount,
|
||
int sarCount,
|
||
int messageCount,
|
||
);
|
||
|
||
/// Error message when sample data fails to load
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Failed to load sample data: {error}'**
|
||
String failedToLoadSampleData(String error);
|
||
|
||
/// Success message after clearing all data
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'All data cleared'**
|
||
String get allDataCleared;
|
||
|
||
/// Error message when background tracking fails to start
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Failed to start background tracking. Check permissions and BLE connection.'**
|
||
String get failedToStartBackgroundTracking;
|
||
|
||
/// Success message for location broadcast
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Location broadcast: {latitude}, {longitude}'**
|
||
String locationBroadcast(String latitude, String longitude);
|
||
|
||
/// Information about default PIN for pairing
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'The default pin for devices without a screen is 123456. Trouble pairing? Forget the bluetooth device in system settings.'**
|
||
String get defaultPinInfo;
|
||
|
||
/// Empty state message when there are no messages
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'No messages yet'**
|
||
String get noMessagesYet;
|
||
|
||
/// Instruction to pull down to refresh messages
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Pull down to sync messages'**
|
||
String get pullDownToSync;
|
||
|
||
/// Delete contact action label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Delete Contact'**
|
||
String get deleteContact;
|
||
|
||
/// Delete button label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Delete'**
|
||
String get delete;
|
||
|
||
/// Action to view contact location on map
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'View on Map'**
|
||
String get viewOnMap;
|
||
|
||
/// Refresh button label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Refresh'**
|
||
String get refresh;
|
||
|
||
/// Action to reset contact path for re-routing
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Reset Path (Re-route)'**
|
||
String get resetPath;
|
||
|
||
/// Success message when public key is copied
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Public key copied to clipboard'**
|
||
String get publicKeyCopied;
|
||
|
||
/// Success message when a value is copied to clipboard
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{label} copied to clipboard'**
|
||
String copiedToClipboard(String label);
|
||
|
||
/// Validation message for empty password field
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Please enter a password'**
|
||
String get pleaseEnterPassword;
|
||
|
||
/// Error message when contact sync fails
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Failed to sync contacts: {error}'**
|
||
String failedToSyncContacts(String error);
|
||
|
||
/// Success message after successful room login
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Logged in successfully! Waiting for room messages...'**
|
||
String get loggedInSuccessfully;
|
||
|
||
/// Error message when room login fails
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Login failed - incorrect password'**
|
||
String get loginFailed;
|
||
|
||
/// Status message during room login process
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Logging in to {roomName}...'**
|
||
String loggingIn(String roomName);
|
||
|
||
/// Error message when login command fails to send
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Failed to send login: {error}'**
|
||
String failedToSendLogin(String error);
|
||
|
||
/// Warning title for low GPS accuracy
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Low Location Accuracy'**
|
||
String get lowLocationAccuracy;
|
||
|
||
/// Continue button label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Continue'**
|
||
String get continue_;
|
||
|
||
/// Action to send SAR marker
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Send SAR marker'**
|
||
String get sendSarMarker;
|
||
|
||
/// Action to delete a map drawing
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Delete Drawing'**
|
||
String get deleteDrawing;
|
||
|
||
/// Drawing tools section or menu title
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Drawing Tools'**
|
||
String get drawingTools;
|
||
|
||
/// Map drawing mode: line
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Draw Line'**
|
||
String get drawLine;
|
||
|
||
/// Description for line drawing mode
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Draw a freehand line on the map'**
|
||
String get drawLineDesc;
|
||
|
||
/// Map drawing mode: rectangle
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Draw Rectangle'**
|
||
String get drawRectangle;
|
||
|
||
/// Description for rectangle drawing mode
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Draw a rectangular area on the map'**
|
||
String get drawRectangleDesc;
|
||
|
||
/// Map drawing mode: measure distance
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Measure Distance'**
|
||
String get measureDistance;
|
||
|
||
/// Description for distance measurement mode
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Long press two points to measure'**
|
||
String get measureDistanceDesc;
|
||
|
||
/// Tooltip to clear measurement
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Clear Measurement'**
|
||
String get clearMeasurement;
|
||
|
||
/// Label showing measured distance
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Distance: {distance}'**
|
||
String distanceLabel(String distance);
|
||
|
||
/// Instruction when first measurement point is set
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Long press for second point'**
|
||
String get longPressForSecondPoint;
|
||
|
||
/// Instruction to start measurement
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Long press to set first point'**
|
||
String get longPressToStartMeasurement;
|
||
|
||
/// Instruction to restart measurement after completion
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Long press to start new measurement'**
|
||
String get longPressToStartNewMeasurement;
|
||
|
||
/// Action to share drawings to network
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Share Drawings'**
|
||
String get shareDrawings;
|
||
|
||
/// Action to clear all local drawings
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Clear All Drawings'**
|
||
String get clearAllDrawings;
|
||
|
||
/// Tooltip to complete drawing a line
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Complete Line'**
|
||
String get completeLine;
|
||
|
||
/// Subtitle showing how many drawings will be broadcast
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Broadcast {count} drawing{plural} to team'**
|
||
String broadcastDrawingsToTeam(int count, String plural);
|
||
|
||
/// Subtitle for remove all drawings action
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Remove all {count} drawing{plural}'**
|
||
String removeAllDrawings(int count, String plural);
|
||
|
||
/// Confirmation dialog message for deleting all drawings
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Delete all {count} drawing{plural} from the map?'**
|
||
String deleteAllDrawingsConfirm(int count, String plural);
|
||
|
||
/// Generic drawing label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Drawing'**
|
||
String get drawing;
|
||
|
||
/// Title for share drawings dialog
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Share {count} Drawing{plural}'**
|
||
String shareDrawingsCount(int count, String plural);
|
||
|
||
/// Toggle to show/hide received drawings from other team members
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Show Received Drawings'**
|
||
String get showReceivedDrawings;
|
||
|
||
/// Subtitle when received drawings are visible
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Showing all drawings'**
|
||
String get showingAllDrawings;
|
||
|
||
/// Subtitle when received drawings are hidden
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Showing only your drawings'**
|
||
String get showingOnlyYourDrawings;
|
||
|
||
/// Toggle to show/hide SAR markers on map
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Show SAR Markers'**
|
||
String get showSarMarkers;
|
||
|
||
/// Subtitle when SAR markers are visible
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Showing SAR markers'**
|
||
String get showingSarMarkers;
|
||
|
||
/// Subtitle when SAR markers are hidden
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Hiding SAR markers'**
|
||
String get hidingSarMarkers;
|
||
|
||
/// Clear all button label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Clear All'**
|
||
String get clearAll;
|
||
|
||
/// Public channel option for sharing
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Public Channel'**
|
||
String get publicChannel;
|
||
|
||
/// Description for public channel broadcast
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Broadcast to all nearby nodes (ephemeral)'**
|
||
String get broadcastToAll;
|
||
|
||
/// Description for room storage permanence
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Stored permanently in room'**
|
||
String get storedPermanently;
|
||
|
||
/// Error message when device is not connected for direct messaging
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Not connected to device'**
|
||
String get notConnectedToDevice;
|
||
|
||
/// Placeholder text for message input field
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Type your message...'**
|
||
String get typeYourMessage;
|
||
|
||
/// Subtitle for SAR marker sheet header
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Quick location marker'**
|
||
String get quickLocationMarker;
|
||
|
||
/// Label for marker type selection section
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Marker Type'**
|
||
String get markerType;
|
||
|
||
/// Label for destination selection section
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Send To'**
|
||
String get sendTo;
|
||
|
||
/// Warning when no rooms or channels exist
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'No destinations available.'**
|
||
String get noDestinationsAvailable;
|
||
|
||
/// Placeholder for destination dropdown
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Select destination...'**
|
||
String get selectDestination;
|
||
|
||
/// Information about ephemeral channel broadcasts
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Ephemeral: Broadcast over-the-air only. Not stored - nodes must be online.'**
|
||
String get ephemeralBroadcastInfo;
|
||
|
||
/// Information about persistent room storage
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Persistent: Stored immutably in room. Synced automatically and preserved offline.'**
|
||
String get persistentRoomInfo;
|
||
|
||
/// Label for location section
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Location'**
|
||
String get location;
|
||
|
||
/// Badge showing location is from map tap
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'From Map'**
|
||
String get fromMap;
|
||
|
||
/// Loading message while fetching GPS location
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Getting location...'**
|
||
String get gettingLocation;
|
||
|
||
/// Title for location error messages
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Location Error'**
|
||
String get locationError;
|
||
|
||
/// Retry button label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Retry'**
|
||
String get retry;
|
||
|
||
/// Tooltip for refresh location button
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Refresh location'**
|
||
String get refreshLocation;
|
||
|
||
/// Display of GPS accuracy in meters
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Accuracy: ±{accuracy}m'**
|
||
String accuracyMeters(int accuracy);
|
||
|
||
/// Label for optional notes field
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Notes (optional)'**
|
||
String get notesOptional;
|
||
|
||
/// Placeholder for notes field
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Add additional information...'**
|
||
String get addAdditionalInformation;
|
||
|
||
/// Warning dialog content for low GPS accuracy
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Location accuracy is ±{accuracy}m. This may not be accurate enough for SAR operations.\n\nContinue anyway?'**
|
||
String lowAccuracyWarning(int accuracy);
|
||
|
||
/// Title for room login dialog
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Login to Room'**
|
||
String get loginToRoom;
|
||
|
||
/// Information about room password
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Enter the password to access this room. The password will be saved for future use.'**
|
||
String get enterPasswordInfo;
|
||
|
||
/// Password field label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Password'**
|
||
String get password;
|
||
|
||
/// Password field hint
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Enter room password'**
|
||
String get enterRoomPassword;
|
||
|
||
/// Button text while logging in
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Logging in...'**
|
||
String get loggingInDots;
|
||
|
||
/// Login button label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Login'**
|
||
String get login;
|
||
|
||
/// Error message when adding room fails
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Failed to add room to device: {error}\n\nThe room may not have advertised yet.\nTry waiting for the room to broadcast.'**
|
||
String failedToAddRoom(String error);
|
||
|
||
/// Direct routing indicator
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Direct'**
|
||
String get direct;
|
||
|
||
/// Flood routing indicator
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Flood'**
|
||
String get flood;
|
||
|
||
/// Logged in status badge
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Logged In'**
|
||
String get loggedIn;
|
||
|
||
/// Message when GPS data is not available
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'No GPS data'**
|
||
String get noGpsData;
|
||
|
||
/// Distance label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Distance'**
|
||
String get distance;
|
||
|
||
/// Warning when direct ping times out
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Direct ping timeout - retrying {name} with flooding...'**
|
||
String directPingTimeout(String name);
|
||
|
||
/// Error message when ping fails
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Ping failed to {name} - no response received'**
|
||
String pingFailed(String name);
|
||
|
||
/// Confirmation message for deleting contact
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Are you sure you want to delete \"{name}\"?\n\nThis will remove the contact from both the app and the companion radio device.'**
|
||
String deleteContactConfirmation(String name);
|
||
|
||
/// Error message when contact removal fails
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Failed to remove contact: {error}'**
|
||
String failedToRemoveContact(String error);
|
||
|
||
/// Contact type label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Type'**
|
||
String get type;
|
||
|
||
/// Public key label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Public Key'**
|
||
String get publicKey;
|
||
|
||
/// Last seen label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Last Seen'**
|
||
String get lastSeen;
|
||
|
||
/// Room status section header
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Room Status'**
|
||
String get roomStatus;
|
||
|
||
/// Login status label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Login Status'**
|
||
String get loginStatus;
|
||
|
||
/// Not logged in status
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Not Logged In'**
|
||
String get notLoggedIn;
|
||
|
||
/// Admin access label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Admin Access'**
|
||
String get adminAccess;
|
||
|
||
/// Yes answer
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Yes'**
|
||
String get yes;
|
||
|
||
/// No answer
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'No'**
|
||
String get no;
|
||
|
||
/// Permissions label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Permissions'**
|
||
String get permissions;
|
||
|
||
/// Password saved label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Password Saved'**
|
||
String get passwordSaved;
|
||
|
||
/// Location section header
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Location:'**
|
||
String get locationColon;
|
||
|
||
/// Telemetry section header
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Telemetry'**
|
||
String get telemetry;
|
||
|
||
/// Voltage label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Voltage'**
|
||
String get voltage;
|
||
|
||
/// Battery label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Battery'**
|
||
String get battery;
|
||
|
||
/// Temperature label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Temperature'**
|
||
String get temperature;
|
||
|
||
/// Humidity label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Humidity'**
|
||
String get humidity;
|
||
|
||
/// Pressure label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Pressure'**
|
||
String get pressure;
|
||
|
||
/// GPS from telemetry label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'GPS (Telemetry)'**
|
||
String get gpsTelemetry;
|
||
|
||
/// Updated timestamp label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Updated'**
|
||
String get updated;
|
||
|
||
/// Info message after path reset
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Path reset for {name}. Next message will find a new route.'**
|
||
String pathResetInfo(String name);
|
||
|
||
/// Button to re-login to room
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Re-Login to Room'**
|
||
String get reLoginToRoom;
|
||
|
||
/// Compass heading label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Heading'**
|
||
String get heading;
|
||
|
||
/// Elevation/altitude label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Elevation'**
|
||
String get elevation;
|
||
|
||
/// GPS accuracy label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Accuracy'**
|
||
String get accuracy;
|
||
|
||
/// Bearing label in compass
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Bearing'**
|
||
String get bearing;
|
||
|
||
/// Direction label in compass
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Direction'**
|
||
String get direction;
|
||
|
||
/// Title for filter markers dialog
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Filter Markers'**
|
||
String get filterMarkers;
|
||
|
||
/// Tooltip for filter button
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Filter markers'**
|
||
String get filterMarkersTooltip;
|
||
|
||
/// Filter option for contacts
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Contacts'**
|
||
String get contactsFilter;
|
||
|
||
/// Filter option for repeaters
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Repeaters'**
|
||
String get repeatersFilter;
|
||
|
||
/// SAR markers section header
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'SAR Markers'**
|
||
String get sarMarkers;
|
||
|
||
/// Found person SAR marker type
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Found Person'**
|
||
String get foundPerson;
|
||
|
||
/// Fire SAR marker type
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Fire'**
|
||
String get fire;
|
||
|
||
/// Staging area SAR marker type
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Staging Area'**
|
||
String get stagingArea;
|
||
|
||
/// Button to show all filters
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Show All'**
|
||
String get showAll;
|
||
|
||
/// Message when GPS location is unavailable
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Location unavailable'**
|
||
String get locationUnavailable;
|
||
|
||
/// Relative bearing direction - ahead
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'ahead'**
|
||
String get ahead;
|
||
|
||
/// Relative bearing direction - right
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{degrees}° right'**
|
||
String degreesRight(int degrees);
|
||
|
||
/// Relative bearing direction - left
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{degrees}° left'**
|
||
String degreesLeft(int degrees);
|
||
|
||
/// Latitude and longitude display format
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Lat: {latitude} Lon: {longitude}'**
|
||
String latLonFormat(String latitude, String longitude);
|
||
|
||
/// Empty state message when there are no contacts
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'No contacts yet'**
|
||
String get noContactsYet;
|
||
|
||
/// Instruction to connect device to load contacts
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Connect to a device to load contacts'**
|
||
String get connectToDeviceToLoadContacts;
|
||
|
||
/// Section header for team members (chat contacts)
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Team Members'**
|
||
String get teamMembers;
|
||
|
||
/// Section header for repeater nodes
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Repeaters'**
|
||
String get repeaters;
|
||
|
||
/// Section header for rooms
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Rooms'**
|
||
String get rooms;
|
||
|
||
/// Section header for broadcast channels
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Channels'**
|
||
String get channels;
|
||
|
||
/// Title for map layer selection dialog
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Select Map Layer'**
|
||
String get selectMapLayer;
|
||
|
||
/// OpenStreetMap layer name
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'OpenStreetMap'**
|
||
String get openStreetMap;
|
||
|
||
/// OpenTopoMap layer name
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'OpenTopoMap'**
|
||
String get openTopoMap;
|
||
|
||
/// ESRI Satellite imagery layer name
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'ESRI Satellite'**
|
||
String get esriSatellite;
|
||
|
||
/// Google Hybrid layer name (satellite + labels)
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Google Hybrid'**
|
||
String get googleHybrid;
|
||
|
||
/// Google Roadmap layer name (street map)
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Google Roadmap'**
|
||
String get googleRoadmap;
|
||
|
||
/// Google Terrain layer name (topographic)
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Google Terrain'**
|
||
String get googleTerrain;
|
||
|
||
/// Label when dragging a pin on map
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Drag to Position'**
|
||
String get dragToPosition;
|
||
|
||
/// Label for creating SAR marker from pin
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Create SAR Marker'**
|
||
String get createSarMarker;
|
||
|
||
/// Compass title in detailed compass dialog
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Compass'**
|
||
String get compass;
|
||
|
||
/// Subtitle for compass dialog
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Navigation & Contacts'**
|
||
String get navigationAndContacts;
|
||
|
||
/// Label for SAR alert badge on messages
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'SAR ALERT'**
|
||
String get sarAlert;
|
||
|
||
/// Success message when text is copied
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Text copied to clipboard'**
|
||
String get textCopiedToClipboard;
|
||
|
||
/// Error when sender info is missing for reply
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Cannot reply: sender information missing'**
|
||
String get cannotReplySenderMissing;
|
||
|
||
/// Error when contact not found for reply
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Cannot reply: contact not found'**
|
||
String get cannotReplyContactNotFound;
|
||
|
||
/// Option to copy message text to clipboard
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Copy text'**
|
||
String get copyText;
|
||
|
||
/// Option to save SAR message as a reusable template
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Save as Template'**
|
||
String get saveAsTemplate;
|
||
|
||
/// Success message when SAR template is saved
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Template saved successfully'**
|
||
String get templateSaved;
|
||
|
||
/// Error message when trying to save duplicate template
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Template with this emoji already exists'**
|
||
String get templateAlreadyExists;
|
||
|
||
/// Dialog title for deleting a message
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Delete message'**
|
||
String get deleteMessage;
|
||
|
||
/// Confirmation text for message deletion
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Are you sure you want to delete this message?'**
|
||
String get deleteMessageConfirmation;
|
||
|
||
/// Option to share SAR marker location
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Share location'**
|
||
String get shareLocation;
|
||
|
||
/// Formatted text for sharing SAR marker location
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{markerInfo}\n\nCoordinates: {lat}, {lon}\n\nGoogle Maps: {url}'**
|
||
String shareLocationText(
|
||
String markerInfo,
|
||
String lat,
|
||
String lon,
|
||
String url,
|
||
);
|
||
|
||
/// Subject line when sharing SAR marker location
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'SAR Location'**
|
||
String get sarLocationShare;
|
||
|
||
/// Time indicator for very recent activity
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Just now'**
|
||
String get justNow;
|
||
|
||
/// Time indicator for minutes ago
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{minutes}m ago'**
|
||
String minutesAgo(int minutes);
|
||
|
||
/// Time indicator for hours ago
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{hours}h ago'**
|
||
String hoursAgo(int hours);
|
||
|
||
/// Time indicator for days ago
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{days}d ago'**
|
||
String daysAgo(int days);
|
||
|
||
/// Time indicator for seconds ago
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{seconds}s ago'**
|
||
String secondsAgo(int seconds);
|
||
|
||
/// Delivery status: sending
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Sending...'**
|
||
String get sending;
|
||
|
||
/// Delivery status: sent
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Sent'**
|
||
String get sent;
|
||
|
||
/// Delivery status: delivered
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Delivered'**
|
||
String get delivered;
|
||
|
||
/// Delivery status with round-trip time
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Delivered ({time}ms)'**
|
||
String deliveredWithTime(int time);
|
||
|
||
/// Delivery status: failed
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Failed'**
|
||
String get failed;
|
||
|
||
/// Delivery status for channel messages (no echoes yet)
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Broadcast'**
|
||
String get broadcast;
|
||
|
||
/// Grouped message delivery count
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Delivered to {delivered}/{total} contacts'**
|
||
String deliveredToContacts(int delivered, int total);
|
||
|
||
/// Status when all recipients received the message
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'All delivered'**
|
||
String get allDelivered;
|
||
|
||
/// Header for expandable recipient list
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Recipient Details'**
|
||
String get recipientDetails;
|
||
|
||
/// Delivery status: pending/waiting
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Pending'**
|
||
String get pending;
|
||
|
||
/// SAR marker type: found person
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Found Person'**
|
||
String get sarMarkerFoundPerson;
|
||
|
||
/// SAR marker type: fire
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Fire Location'**
|
||
String get sarMarkerFire;
|
||
|
||
/// SAR marker type: staging area
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Staging Area'**
|
||
String get sarMarkerStagingArea;
|
||
|
||
/// SAR marker type: object
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Object Found'**
|
||
String get sarMarkerObject;
|
||
|
||
/// Sender label in notifications
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'From'**
|
||
String get from;
|
||
|
||
/// Coordinates label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Coordinates'**
|
||
String get coordinates;
|
||
|
||
/// Notification action text
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Tap to view on map'**
|
||
String get tapToViewOnMap;
|
||
|
||
/// Section title for radio settings
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Radio Settings'**
|
||
String get radioSettings;
|
||
|
||
/// Label for radio frequency field
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Frequency (MHz)'**
|
||
String get frequencyMHz;
|
||
|
||
/// Helper text example for frequency
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'e.g., 869.618'**
|
||
String get frequencyExample;
|
||
|
||
/// Label for bandwidth dropdown
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Bandwidth'**
|
||
String get bandwidth;
|
||
|
||
/// Label for spreading factor dropdown
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Spreading Factor'**
|
||
String get spreadingFactor;
|
||
|
||
/// Label for coding rate dropdown
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Coding Rate'**
|
||
String get codingRate;
|
||
|
||
/// Label for TX power field
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'TX Power (dBm)'**
|
||
String get txPowerDbm;
|
||
|
||
/// Helper text showing maximum TX power
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Max: {power} dBm'**
|
||
String maxPowerDbm(int power);
|
||
|
||
/// Label for the current user in message bubbles
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'You'**
|
||
String get you;
|
||
|
||
/// Error message when export fails
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Export failed: {error}'**
|
||
String exportFailed(String error);
|
||
|
||
/// Error message when import fails
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Import failed: {error}'**
|
||
String importFailed(String error);
|
||
|
||
/// Unknown value label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Unknown'**
|
||
String get unknown;
|
||
|
||
/// Section header for online map layers
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Online Layers'**
|
||
String get onlineLayers;
|
||
|
||
/// Location trail title
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Location Trail'**
|
||
String get locationTrail;
|
||
|
||
/// Toggle to show/hide trail on map
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Show Trail on Map'**
|
||
String get showTrailOnMap;
|
||
|
||
/// Trail visibility status - visible
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Trail is visible on the map'**
|
||
String get trailVisible;
|
||
|
||
/// Trail visibility status - hidden but recording
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Trail is hidden (still recording)'**
|
||
String get trailHiddenRecording;
|
||
|
||
/// Duration label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Duration'**
|
||
String get duration;
|
||
|
||
/// Trail points count label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Points'**
|
||
String get points;
|
||
|
||
/// Button to clear location trail
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Clear Trail'**
|
||
String get clearTrail;
|
||
|
||
/// Confirmation dialog title
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Clear Trail?'**
|
||
String get clearTrailQuestion;
|
||
|
||
/// Confirmation dialog message
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Are you sure you want to clear the current location trail? This action cannot be undone.'**
|
||
String get clearTrailConfirmation;
|
||
|
||
/// Message when no trail exists
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'No trail recorded yet'**
|
||
String get noTrailRecorded;
|
||
|
||
/// Instructions to start trail recording
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Start location tracking to record your trail'**
|
||
String get startTrackingToRecord;
|
||
|
||
/// Trail controls tooltip
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Trail Controls'**
|
||
String get trailControls;
|
||
|
||
/// Contact trails section header
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Contact Trails'**
|
||
String get contactTrails;
|
||
|
||
/// Toggle label to show all contact trails
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Show All Contact Trails'**
|
||
String get showAllContactTrails;
|
||
|
||
/// Subtitle when no contacts have trails
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'No contacts with location history'**
|
||
String get noContactsWithLocationHistory;
|
||
|
||
/// Subtitle showing number of contacts with trails
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Showing trails for {count} contacts'**
|
||
String showingTrailsForContacts(int count);
|
||
|
||
/// Expansion tile title for individual contact trails
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Individual Contact Trails'**
|
||
String get individualContactTrails;
|
||
|
||
/// Device information section header
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Device Information'**
|
||
String get deviceInformation;
|
||
|
||
/// Bluetooth Low Energy device name label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'BLE Name'**
|
||
String get bleName;
|
||
|
||
/// Mesh network name label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Mesh Name'**
|
||
String get meshName;
|
||
|
||
/// Label when a value is not set
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Not set'**
|
||
String get notSet;
|
||
|
||
/// Device model label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Model'**
|
||
String get model;
|
||
|
||
/// Version label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Version'**
|
||
String get version;
|
||
|
||
/// Firmware build date label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Build Date'**
|
||
String get buildDate;
|
||
|
||
/// Firmware label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Firmware'**
|
||
String get firmware;
|
||
|
||
/// Maximum contacts capacity label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Max Contacts'**
|
||
String get maxContacts;
|
||
|
||
/// Maximum channels capacity label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Max Channels'**
|
||
String get maxChannels;
|
||
|
||
/// Public information section header
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Public Info'**
|
||
String get publicInfo;
|
||
|
||
/// Mesh network name field label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Mesh Network Name'**
|
||
String get meshNetworkName;
|
||
|
||
/// Helper text for mesh network name field
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Name broadcast in mesh advertisements'**
|
||
String get nameBroadcastInMesh;
|
||
|
||
/// Telemetry and location sharing toggle label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Telemetry & Location Sharing'**
|
||
String get telemetryAndLocationSharing;
|
||
|
||
/// Latitude field label (short form)
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Lat'**
|
||
String get lat;
|
||
|
||
/// Longitude field label (short form)
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Lon'**
|
||
String get lon;
|
||
|
||
/// Tooltip for use current location button
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Use current location'**
|
||
String get useCurrentLocation;
|
||
|
||
/// Device type: none or unknown
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'None/Unknown'**
|
||
String get noneUnknown;
|
||
|
||
/// Device type: chat node
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Chat Node'**
|
||
String get chatNode;
|
||
|
||
/// Device type: repeater
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Repeater'**
|
||
String get repeater;
|
||
|
||
/// Device type: room or channel
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Room/Channel'**
|
||
String get roomChannel;
|
||
|
||
/// Generic device type with number
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Type {number}'**
|
||
String typeNumber(int number);
|
||
|
||
/// Short success message when copying to clipboard
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Copied {label} to clipboard'**
|
||
String copiedToClipboardShort(String label);
|
||
|
||
/// Generic error message for save failures
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Failed to save: {error}'**
|
||
String failedToSave(String error);
|
||
|
||
/// Error message when getting location fails
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Failed to get location: {error}'**
|
||
String failedToGetLocation(String error);
|
||
|
||
/// SAR templates menu title
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'SAR Templates'**
|
||
String get sarTemplates;
|
||
|
||
/// Subtitle for SAR templates settings
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Manage cursor on target templates'**
|
||
String get manageSarTemplates;
|
||
|
||
/// Button to add new SAR template
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Add Template'**
|
||
String get addTemplate;
|
||
|
||
/// Dialog title for editing template
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Edit Template'**
|
||
String get editTemplate;
|
||
|
||
/// Action to delete template
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Delete Template'**
|
||
String get deleteTemplate;
|
||
|
||
/// Label for template name field
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Template Name'**
|
||
String get templateName;
|
||
|
||
/// Hint text for template name
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'e.g. Found Person'**
|
||
String get templateNameHint;
|
||
|
||
/// Label for template emoji field
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Emoji'**
|
||
String get templateEmoji;
|
||
|
||
/// Validation error when emoji field is empty
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Emoji is required'**
|
||
String get emojiRequired;
|
||
|
||
/// Validation error when name field is empty
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Name is required'**
|
||
String get nameRequired;
|
||
|
||
/// Label for template description field
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Description (Optional)'**
|
||
String get templateDescription;
|
||
|
||
/// Hint text for template description
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Add additional context...'**
|
||
String get templateDescriptionHint;
|
||
|
||
/// Label for template color picker
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Color'**
|
||
String get templateColor;
|
||
|
||
/// Label for format preview
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Preview (SAR Message Format)'**
|
||
String get previewFormat;
|
||
|
||
/// Button to import templates from clipboard
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Import'**
|
||
String get importFromClipboard;
|
||
|
||
/// Button to export templates to clipboard
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Export'**
|
||
String get exportToClipboard;
|
||
|
||
/// Confirmation message for template deletion
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Delete template \'{name}\'?'**
|
||
String deleteTemplateConfirmation(String name);
|
||
|
||
/// Success message when template is added
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Template added'**
|
||
String get templateAdded;
|
||
|
||
/// Success message when template is updated
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Template updated'**
|
||
String get templateUpdated;
|
||
|
||
/// Success message when template is deleted
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Template deleted'**
|
||
String get templateDeleted;
|
||
|
||
/// Success message after importing templates
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{count, plural, =0{No templates imported} =1{Imported 1 template} other{Imported {count} templates}}'**
|
||
String templatesImported(int count);
|
||
|
||
/// Success message after exporting templates
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{count, plural, =1{Exported 1 template to clipboard} other{Exported {count} templates to clipboard}}'**
|
||
String templatesExported(int count);
|
||
|
||
/// Action to reset templates to defaults
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Reset to Defaults'**
|
||
String get resetToDefaults;
|
||
|
||
/// Confirmation message for reset to defaults
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'This will delete all custom templates and restore the 4 default templates. Continue?'**
|
||
String get resetToDefaultsConfirmation;
|
||
|
||
/// Reset button label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Reset'**
|
||
String get reset;
|
||
|
||
/// Success message after reset
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Templates reset to defaults'**
|
||
String get resetComplete;
|
||
|
||
/// Message when no templates exist
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'No templates available'**
|
||
String get noTemplates;
|
||
|
||
/// Helper text when no templates exist
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Tap + to create your first template'**
|
||
String get tapAddToCreate;
|
||
|
||
/// OK button label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'OK'**
|
||
String get ok;
|
||
|
||
/// Permissions section header
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Permissions'**
|
||
String get permissionsSection;
|
||
|
||
/// Location permission label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Location Permission'**
|
||
String get locationPermission;
|
||
|
||
/// Loading state indicator
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Checking...'**
|
||
String get checking;
|
||
|
||
/// Location permission status: granted always
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Granted (Always)'**
|
||
String get locationPermissionGrantedAlways;
|
||
|
||
/// Location permission status: granted while in use
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Granted (While In Use)'**
|
||
String get locationPermissionGrantedWhileInUse;
|
||
|
||
/// Location permission status: denied, user can request
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Denied - Tap to request'**
|
||
String get locationPermissionDeniedTapToRequest;
|
||
|
||
/// Location permission status: permanently denied
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Permanently Denied - Open Settings'**
|
||
String get locationPermissionPermanentlyDeniedOpenSettings;
|
||
|
||
/// Content for location permission dialog when permanently denied
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Location permission is permanently denied. Please enable it in your device settings to use GPS tracking and location sharing features.'**
|
||
String get locationPermissionDialogContent;
|
||
|
||
/// Button to open device settings
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Open Settings'**
|
||
String get openSettings;
|
||
|
||
/// Success message when location permission is granted
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Location permission granted!'**
|
||
String get locationPermissionGranted;
|
||
|
||
/// Info message about location permission requirement
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Location permission is required for GPS tracking and location sharing.'**
|
||
String get locationPermissionRequiredForGps;
|
||
|
||
/// Info message when permission is already granted
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Location permission is already granted.'**
|
||
String get locationPermissionAlreadyGranted;
|
||
|
||
/// SAR Navy Blue theme name
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'SAR Navy Blue'**
|
||
String get sarNavyBlue;
|
||
|
||
/// Description for SAR Navy Blue theme
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Professional/Operations Mode'**
|
||
String get sarNavyBlueDescription;
|
||
|
||
/// Title for recipient selector sheet
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Select Recipient'**
|
||
String get selectRecipient;
|
||
|
||
/// Subtitle for public channel option
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Broadcast to all nearby'**
|
||
String get broadcastToAllNearby;
|
||
|
||
/// Placeholder text for recipient search field
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Search recipients...'**
|
||
String get searchRecipients;
|
||
|
||
/// Message when no contacts match search
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'No contacts found'**
|
||
String get noContactsFound;
|
||
|
||
/// Message when no rooms match search
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'No rooms found'**
|
||
String get noRoomsFound;
|
||
|
||
/// Message when no recipients exist (contacts, rooms, or channels)
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'No recipients available'**
|
||
String get noRecipientsAvailable;
|
||
|
||
/// Message when no channels match the search
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'No channels found'**
|
||
String get noChannelsFound;
|
||
|
||
/// Notification title for new message
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'New message'**
|
||
String get newMessage;
|
||
|
||
/// Channel label in notifications
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Channel'**
|
||
String get channel;
|
||
|
||
/// Sample team member name
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Police Lead'**
|
||
String get samplePoliceLead;
|
||
|
||
/// Sample team member name
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Drone Operator'**
|
||
String get sampleDroneOperator;
|
||
|
||
/// Sample team member name
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Firefighter'**
|
||
String get sampleFirefighterAlpha;
|
||
|
||
/// Sample team member name
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Medic'**
|
||
String get sampleMedicCharlie;
|
||
|
||
/// Sample team member name
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Command'**
|
||
String get sampleCommandDelta;
|
||
|
||
/// Sample team member name
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Fire Engine'**
|
||
String get sampleFireEngine;
|
||
|
||
/// Sample team member name
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Air Support'**
|
||
String get sampleAirSupport;
|
||
|
||
/// Sample team member name
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Base Coordinator'**
|
||
String get sampleBaseCoordinator;
|
||
|
||
/// Emergency channel name
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Emergency'**
|
||
String get channelEmergency;
|
||
|
||
/// Coordination channel name
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Coordination'**
|
||
String get channelCoordination;
|
||
|
||
/// Updates channel name
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Updates'**
|
||
String get channelUpdates;
|
||
|
||
/// Sample sender name
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Sample Team Member'**
|
||
String get sampleTeamMember;
|
||
|
||
/// Sample sender name
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Sample Scout'**
|
||
String get sampleScout;
|
||
|
||
/// Sample sender name
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Sample Base'**
|
||
String get sampleBase;
|
||
|
||
/// Sample sender name
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Sample Searcher'**
|
||
String get sampleSearcher;
|
||
|
||
/// Sample object note
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **' Backpack found - blue color'**
|
||
String get sampleObjectBackpack;
|
||
|
||
/// Sample object note
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **' Vehicle abandoned - check for owner'**
|
||
String get sampleObjectVehicle;
|
||
|
||
/// Sample object note
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **' Camping equipment discovered'**
|
||
String get sampleObjectCamping;
|
||
|
||
/// Sample object note
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **' Trail marker found off-path'**
|
||
String get sampleObjectTrailMarker;
|
||
|
||
/// Sample channel message
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'All teams check in'**
|
||
String get sampleMsgAllTeamsCheckIn;
|
||
|
||
/// Sample channel message
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Weather update: Clear skies, temp 18°C'**
|
||
String get sampleMsgWeatherUpdate;
|
||
|
||
/// Sample channel message
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Base camp established at staging area'**
|
||
String get sampleMsgBaseCamp;
|
||
|
||
/// Sample channel message
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Team moving to sector 2'**
|
||
String get sampleMsgTeamAlpha;
|
||
|
||
/// Sample channel message
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Radio check - all stations respond'**
|
||
String get sampleMsgRadioCheck;
|
||
|
||
/// Sample channel message
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Water supply available at checkpoint 3'**
|
||
String get sampleMsgWaterSupply;
|
||
|
||
/// Sample channel message
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Team reporting: sector 1 clear'**
|
||
String get sampleMsgTeamBravo;
|
||
|
||
/// Sample channel message
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'ETA to rally point: 15 minutes'**
|
||
String get sampleMsgEtaRallyPoint;
|
||
|
||
/// Sample channel message
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Supply drop confirmed for 14:00'**
|
||
String get sampleMsgSupplyDrop;
|
||
|
||
/// Sample channel message
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Drone survey completed - no findings'**
|
||
String get sampleMsgDroneSurvey;
|
||
|
||
/// Sample channel message
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Team requesting backup'**
|
||
String get sampleMsgTeamCharlie;
|
||
|
||
/// Sample channel message
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'All units: maintain radio discipline'**
|
||
String get sampleMsgRadioDiscipline;
|
||
|
||
/// Sample emergency message
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'URGENT: Medical assistance needed at sector 4'**
|
||
String get sampleMsgUrgentMedical;
|
||
|
||
/// Sample emergency message note
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **' Adult male, conscious'**
|
||
String get sampleMsgAdultMale;
|
||
|
||
/// Sample emergency message
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Fire spotted - coordinates incoming'**
|
||
String get sampleMsgFireSpotted;
|
||
|
||
/// Sample emergency message note
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **' Spreading rapidly!'**
|
||
String get sampleMsgSpreadingRapidly;
|
||
|
||
/// Sample emergency message
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'PRIORITY: Need helicopter support'**
|
||
String get sampleMsgPriorityHelicopter;
|
||
|
||
/// Sample emergency message
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Medical team en route to your location'**
|
||
String get sampleMsgMedicalTeamEnRoute;
|
||
|
||
/// Sample emergency message
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Evac helicopter ETA 10 minutes'**
|
||
String get sampleMsgEvacHelicopter;
|
||
|
||
/// Sample emergency message
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Emergency resolved - all clear'**
|
||
String get sampleMsgEmergencyResolved;
|
||
|
||
/// Sample emergency message note
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **' Emergency staging area'**
|
||
String get sampleMsgEmergencyStagingArea;
|
||
|
||
/// Sample emergency message
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Emergency services notified and responding'**
|
||
String get sampleMsgEmergencyServices;
|
||
|
||
/// Sample team name
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Team Lead'**
|
||
String get sampleAlphaTeamLead;
|
||
|
||
/// Sample team name
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Scout'**
|
||
String get sampleBravoScout;
|
||
|
||
/// Sample team name
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Medic'**
|
||
String get sampleCharlieMedic;
|
||
|
||
/// Sample team name
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Navigator'**
|
||
String get sampleDeltaNavigator;
|
||
|
||
/// Sample team name
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Support'**
|
||
String get sampleEchoSupport;
|
||
|
||
/// Sample team name
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Base Command'**
|
||
String get sampleBaseCommand;
|
||
|
||
/// Sample team name
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Field Coordinator'**
|
||
String get sampleFieldCoordinator;
|
||
|
||
/// Sample team name
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Medical Team'**
|
||
String get sampleMedicalTeam;
|
||
|
||
/// Label for map drawing messages
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Map Drawing'**
|
||
String get mapDrawing;
|
||
|
||
/// Option to navigate to drawing on map
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Navigate to Drawing'**
|
||
String get navigateToDrawing;
|
||
|
||
/// Option to copy coordinates to clipboard
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Copy Coordinates'**
|
||
String get copyCoordinates;
|
||
|
||
/// Option to hide drawing from map
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Hide from Map'**
|
||
String get hideFromMap;
|
||
|
||
/// Label for line type drawings
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Line Drawing'**
|
||
String get lineDrawing;
|
||
|
||
/// Label for rectangle type drawings
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Rectangle Drawing'**
|
||
String get rectangleDrawing;
|
||
|
||
/// Label for manual coordinate input toggle
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Manual Coordinates'**
|
||
String get manualCoordinates;
|
||
|
||
/// Description for manual coordinate input option
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Enter coordinates manually'**
|
||
String get enterCoordinatesManually;
|
||
|
||
/// Label for latitude input field
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Latitude'**
|
||
String get latitudeLabel;
|
||
|
||
/// Label for longitude input field
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Longitude'**
|
||
String get longitudeLabel;
|
||
|
||
/// Example coordinate format hint
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Example: 46.0569, 14.5058'**
|
||
String get exampleCoordinates;
|
||
|
||
/// Title for share single drawing dialog
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Share Drawing'**
|
||
String get shareDrawing;
|
||
|
||
/// Subtitle for public channel sharing option
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Share with all nearby devices'**
|
||
String get shareWithAllNearbyDevices;
|
||
|
||
/// Header for room sharing section
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Share to Room'**
|
||
String get shareToRoom;
|
||
|
||
/// Subtitle for room sharing option
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Send to persistent room storage'**
|
||
String get sendToPersistentStorage;
|
||
|
||
/// Confirmation message for deleting a single drawing
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Are you sure you want to delete this drawing?'**
|
||
String get deleteDrawingConfirm;
|
||
|
||
/// Success message after deleting a drawing
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Drawing deleted'**
|
||
String get drawingDeleted;
|
||
|
||
/// Header showing count of user's drawings
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Your Drawings ({count})'**
|
||
String yourDrawingsCount(int count);
|
||
|
||
/// Status label for shared drawings
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Shared'**
|
||
String get shared;
|
||
|
||
/// Line drawing type label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Line'**
|
||
String get line;
|
||
|
||
/// Rectangle drawing type label
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Rectangle'**
|
||
String get rectangle;
|
||
|
||
/// Title for update dialog when new version is available
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Update Available'**
|
||
String get updateAvailable;
|
||
|
||
/// Label for current app version
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Current'**
|
||
String get currentVersion;
|
||
|
||
/// Label for latest available app version
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Latest'**
|
||
String get latestVersion;
|
||
|
||
/// Button to download app update
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Download'**
|
||
String get downloadUpdate;
|
||
|
||
/// Button to dismiss update dialog
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Later'**
|
||
String get updateLater;
|
||
|
||
/// Label for cadastral parcels WMS overlay layer
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Cadastral Parcels'**
|
||
String get cadastralParcels;
|
||
|
||
/// Label for forest roads WMS overlay layer
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Forest Roads'**
|
||
String get forestRoads;
|
||
|
||
/// Section header for WMS overlay layers in layer selector
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'WMS Overlays'**
|
||
String get wmsOverlays;
|
||
|
||
/// Label for hiking/mountain trails WMS overlay layer
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Hiking Trails'**
|
||
String get hikingTrails;
|
||
|
||
/// Label for main roads WMS overlay layer
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Main Roads'**
|
||
String get mainRoads;
|
||
|
||
/// Label for house numbers WMS overlay layer
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'House Numbers'**
|
||
String get houseNumbers;
|
||
|
||
/// Label for fire hazard risk zones WMS overlay layer
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Fire Hazard Zones'**
|
||
String get fireHazardZones;
|
||
|
||
/// Label for historical forest fires WMS overlay layer
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Historical Fires'**
|
||
String get historicalFires;
|
||
|
||
/// Label for firebreaks WMS overlay layer
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Firebreaks'**
|
||
String get firebreaks;
|
||
|
||
/// Label for Kras fire zones WMS overlay layer
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Kras Fire Zones'**
|
||
String get krasFireZones;
|
||
|
||
/// Label for geographic place names WMS overlay layer
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Place Names'**
|
||
String get placeNames;
|
||
|
||
/// Label for municipality borders WMS overlay layer
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Municipality Borders'**
|
||
String get municipalityBorders;
|
||
|
||
/// Label for DTK25 topographic base map layer
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Topographic Map 1:25000'**
|
||
String get topographicMap;
|
||
|
||
/// Header for recent messages overlay on map in fullscreen mode
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Recent Messages'**
|
||
String get recentMessages;
|
||
|
||
/// Button to add a new channel
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Add Channel'**
|
||
String get addChannel;
|
||
|
||
/// Label for channel name field
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Channel Name'**
|
||
String get channelName;
|
||
|
||
/// Hint for channel name field
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'e.g., Rescue Team Alpha'**
|
||
String get channelNameHint;
|
||
|
||
/// Label for channel secret field
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Channel Secret'**
|
||
String get channelSecret;
|
||
|
||
/// Hint for channel secret field
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Shared password for this channel'**
|
||
String get channelSecretHint;
|
||
|
||
/// Help text explaining channel secret
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'This secret must be shared with all team members who need access to this channel'**
|
||
String get channelSecretHelp;
|
||
|
||
/// Information banner explaining hash and private channel types
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Hash channels (#team): Secret auto-generated from name. Same name = same channel across devices.\n\nPrivate channels: Use explicit secret. Only those with the secret can join.'**
|
||
String get channelTypesInfo;
|
||
|
||
/// Help text for hash channels (# prefix)
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Hash channel: Secret will be auto-generated from the channel name. Anyone using the same name will join the same channel.'**
|
||
String get hashChannelInfo;
|
||
|
||
/// Validation error for empty channel name
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Channel name is required'**
|
||
String get channelNameRequired;
|
||
|
||
/// Validation error for channel name too long
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Channel name must be 31 characters or less'**
|
||
String get channelNameTooLong;
|
||
|
||
/// Validation error for empty channel secret
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Channel secret is required'**
|
||
String get channelSecretRequired;
|
||
|
||
/// Validation error for channel secret too long
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Channel secret must be 32 characters or less'**
|
||
String get channelSecretTooLong;
|
||
|
||
/// Validation error for non-ASCII characters
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Only ASCII characters are allowed'**
|
||
String get invalidAsciiCharacters;
|
||
|
||
/// Success message after creating channel
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Channel created successfully'**
|
||
String get channelCreatedSuccessfully;
|
||
|
||
/// Error message when channel creation fails
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Failed to create channel: {error}'**
|
||
String channelCreationFailed(String error);
|
||
|
||
/// Delete channel button/menu item
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Delete Channel'**
|
||
String get deleteChannel;
|
||
|
||
/// Confirmation dialog when deleting a channel
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Are you sure you want to delete channel \"{channelName}\"? This action cannot be undone.'**
|
||
String deleteChannelConfirmation(String channelName);
|
||
|
||
/// Success message after deleting channel
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Channel deleted successfully'**
|
||
String get channelDeletedSuccessfully;
|
||
|
||
/// Error message when channel deletion fails
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Failed to delete channel: {error}'**
|
||
String channelDeletionFailed(String error);
|
||
|
||
/// Button text for creating a channel
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Create Channel'**
|
||
String get createChannel;
|
||
|
||
/// Wizard back button text
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Back'**
|
||
String get wizardBack;
|
||
|
||
/// Wizard skip button text
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Skip'**
|
||
String get wizardSkip;
|
||
|
||
/// Wizard next button text
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Next'**
|
||
String get wizardNext;
|
||
|
||
/// Wizard final button text to complete onboarding
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Get Started'**
|
||
String get wizardGetStarted;
|
||
|
||
/// Welcome wizard first page title
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Welcome to MeshCore SAR'**
|
||
String get wizardWelcomeTitle;
|
||
|
||
/// Welcome wizard first page description
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'A powerful off-grid communication tool for search and rescue operations. Connect with your team using mesh radio technology when traditional networks are unavailable.'**
|
||
String get wizardWelcomeDescription;
|
||
|
||
/// Wizard connecting page title
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Connecting to Your Radio'**
|
||
String get wizardConnectingTitle;
|
||
|
||
/// Wizard connecting page description
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Connect your smartphone to a MeshCore radio device via Bluetooth to start communicating off-grid.'**
|
||
String get wizardConnectingDescription;
|
||
|
||
/// Wizard connecting feature 1
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Scan for nearby MeshCore devices'**
|
||
String get wizardConnectingFeature1;
|
||
|
||
/// Wizard connecting feature 2
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Pair with your radio via Bluetooth'**
|
||
String get wizardConnectingFeature2;
|
||
|
||
/// Wizard connecting feature 3
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Works completely offline - no internet required'**
|
||
String get wizardConnectingFeature3;
|
||
|
||
/// Wizard channel page title
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Channels'**
|
||
String get wizardChannelTitle;
|
||
|
||
/// Wizard channel page description
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Broadcast messages to everyone on a channel, perfect for team-wide announcements and coordination.'**
|
||
String get wizardChannelDescription;
|
||
|
||
/// Wizard channel feature 1
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Public Channel for general team communication'**
|
||
String get wizardChannelFeature1;
|
||
|
||
/// Wizard channel feature 2
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Create custom channels for specific groups'**
|
||
String get wizardChannelFeature2;
|
||
|
||
/// Wizard channel feature 3
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Messages are automatically relayed by the mesh'**
|
||
String get wizardChannelFeature3;
|
||
|
||
/// Wizard contacts page title
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Contacts'**
|
||
String get wizardContactsTitle;
|
||
|
||
/// Wizard contacts page description
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Your team members appear automatically as they join the mesh network. Send them direct messages or view their location.'**
|
||
String get wizardContactsDescription;
|
||
|
||
/// Wizard contacts feature 1
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Contacts discovered automatically'**
|
||
String get wizardContactsFeature1;
|
||
|
||
/// Wizard contacts feature 2
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Send private direct messages'**
|
||
String get wizardContactsFeature2;
|
||
|
||
/// Wizard contacts feature 3
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'View battery level and last seen time'**
|
||
String get wizardContactsFeature3;
|
||
|
||
/// Wizard map page title
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Map & Location'**
|
||
String get wizardMapTitle;
|
||
|
||
/// Wizard map page description
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Track your team in real-time and mark important locations for search and rescue operations.'**
|
||
String get wizardMapDescription;
|
||
|
||
/// Wizard map feature 1
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'SAR markers for found persons, fires, and staging areas'**
|
||
String get wizardMapFeature1;
|
||
|
||
/// Wizard map feature 2
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Real-time GPS tracking of team members'**
|
||
String get wizardMapFeature2;
|
||
|
||
/// Wizard map feature 3
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Download offline maps for remote areas'**
|
||
String get wizardMapFeature3;
|
||
|
||
/// Wizard map feature 4
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Draw shapes and share tactical information'**
|
||
String get wizardMapFeature4;
|
||
|
||
/// Settings option to re-show welcome wizard
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'View Welcome Tutorial'**
|
||
String get viewWelcomeTutorial;
|
||
|
||
/// Destination option to send SAR marker to all team contacts
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'All Team Contacts'**
|
||
String get allTeamContacts;
|
||
|
||
/// Information about sending to all contacts
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Direct messages with ACKs. Sent to {count} team members.'**
|
||
String directMessagesInfo(int count);
|
||
|
||
/// Success message after sending SAR marker to all contacts
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'SAR marker sent to {count} contacts'**
|
||
String sarMarkerSentToContacts(int count);
|
||
|
||
/// Message when there are no chat contacts to send to
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'No team contacts available'**
|
||
String get noContactsAvailable;
|
||
|
||
/// No description provided for @reply.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Reply'**
|
||
String get reply;
|
||
|
||
/// No description provided for @technicalDetails.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Technical details'**
|
||
String get technicalDetails;
|
||
|
||
/// No description provided for @messageTechnicalDetails.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Message technical details'**
|
||
String get messageTechnicalDetails;
|
||
|
||
/// No description provided for @linkQuality.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Link quality'**
|
||
String get linkQuality;
|
||
|
||
/// No description provided for @delivery.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Delivery'**
|
||
String get delivery;
|
||
|
||
/// No description provided for @status.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Status'**
|
||
String get status;
|
||
|
||
/// No description provided for @expectedAckTag.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Expected ACK tag'**
|
||
String get expectedAckTag;
|
||
|
||
/// No description provided for @roundTrip.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Round-trip'**
|
||
String get roundTrip;
|
||
|
||
/// No description provided for @retryAttempt.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Retry attempt'**
|
||
String get retryAttempt;
|
||
|
||
/// No description provided for @floodFallback.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Flood fallback'**
|
||
String get floodFallback;
|
||
|
||
/// No description provided for @identity.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Identity'**
|
||
String get identity;
|
||
|
||
/// No description provided for @messageId.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Message ID'**
|
||
String get messageId;
|
||
|
||
/// No description provided for @sender.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Sender'**
|
||
String get sender;
|
||
|
||
/// No description provided for @senderKey.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Sender key'**
|
||
String get senderKey;
|
||
|
||
/// No description provided for @recipient.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Recipient'**
|
||
String get recipient;
|
||
|
||
/// No description provided for @recipientKey.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Recipient key'**
|
||
String get recipientKey;
|
||
|
||
/// No description provided for @voice.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Voice'**
|
||
String get voice;
|
||
|
||
/// No description provided for @voiceId.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Voice ID'**
|
||
String get voiceId;
|
||
|
||
/// No description provided for @envelope.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Envelope'**
|
||
String get envelope;
|
||
|
||
/// No description provided for @sessionProgress.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Session progress'**
|
||
String get sessionProgress;
|
||
|
||
/// No description provided for @complete.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Complete'**
|
||
String get complete;
|
||
|
||
/// No description provided for @rawDump.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Raw dump'**
|
||
String get rawDump;
|
||
|
||
/// No description provided for @cannotRetryMissingRecipient.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Cannot retry: recipient information missing'**
|
||
String get cannotRetryMissingRecipient;
|
||
|
||
/// No description provided for @voiceUnavailable.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Voice unavailable right now'**
|
||
String get voiceUnavailable;
|
||
|
||
/// No description provided for @requestingVoice.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Requesting voice'**
|
||
String get requestingVoice;
|
||
}
|
||
|
||
class _AppLocalizationsDelegate
|
||
extends LocalizationsDelegate<AppLocalizations> {
|
||
const _AppLocalizationsDelegate();
|
||
|
||
@override
|
||
Future<AppLocalizations> load(Locale locale) {
|
||
return SynchronousFuture<AppLocalizations>(lookupAppLocalizations(locale));
|
||
}
|
||
|
||
@override
|
||
bool isSupported(Locale locale) => <String>[
|
||
'de',
|
||
'el',
|
||
'en',
|
||
'es',
|
||
'fr',
|
||
'hr',
|
||
'it',
|
||
'pl',
|
||
'pt',
|
||
'ru',
|
||
'sl',
|
||
'tr',
|
||
'uk',
|
||
'zh',
|
||
].contains(locale.languageCode);
|
||
|
||
@override
|
||
bool shouldReload(_AppLocalizationsDelegate old) => false;
|
||
}
|
||
|
||
AppLocalizations lookupAppLocalizations(Locale locale) {
|
||
// Lookup logic when only language code is specified.
|
||
switch (locale.languageCode) {
|
||
case 'de':
|
||
return AppLocalizationsDe();
|
||
case 'el':
|
||
return AppLocalizationsEl();
|
||
case 'en':
|
||
return AppLocalizationsEn();
|
||
case 'es':
|
||
return AppLocalizationsEs();
|
||
case 'fr':
|
||
return AppLocalizationsFr();
|
||
case 'hr':
|
||
return AppLocalizationsHr();
|
||
case 'it':
|
||
return AppLocalizationsIt();
|
||
case 'pl':
|
||
return AppLocalizationsPl();
|
||
case 'pt':
|
||
return AppLocalizationsPt();
|
||
case 'ru':
|
||
return AppLocalizationsRu();
|
||
case 'sl':
|
||
return AppLocalizationsSl();
|
||
case 'tr':
|
||
return AppLocalizationsTr();
|
||
case 'uk':
|
||
return AppLocalizationsUk();
|
||
case 'zh':
|
||
return AppLocalizationsZh();
|
||
}
|
||
|
||
throw FlutterError(
|
||
'AppLocalizations.delegate failed to load unsupported locale "$locale". This is likely '
|
||
'an issue with the localizations generation tool. Please file an issue '
|
||
'on GitHub with a reproducible sample app and the gen-l10n configuration '
|
||
'that was used.',
|
||
);
|
||
}
|