Link between front-end and back-end

This commit is contained in:
2025-07-09 12:41:00 +02:00
parent 6735ddb5fd
commit 1b261c08bb
31 changed files with 5507 additions and 40 deletions

210
lib/l10n/app_en.arb Normal file
View File

@ -0,0 +1,210 @@
{
"@@locale": "en",
"appTitle": "Rtime",
"@appTitle": {
"description": "The title of the application"
},
"yourDrones": "Your Drones",
"addDrone": "Add Drone",
"yourBatteries": "Your Batteries",
"addBattery": "Add Battery",
"latestFlights": "Latest Flights",
"newFlight": "New Flight",
"detailsOfDrone": "Details of drone: {droneName}",
"@detailsOfDrone": {
"placeholders": {
"droneName": {
"type": "String",
"example": "Chimera7"
}
}
},
"detailsOfBattery": "Details of battery: {batteryName}",
"@detailsOfBattery": {
"placeholders": {
"batteryName": {
"type": "String",
"example": "GNB 1300mAh"
}
}
},
"detailsOfFlight": "Details of flight: {flightName}",
"@detailsOfFlight": {
"placeholders": {
"flightName": {
"type": "String",
"example": "Flight at the beach - 01/07/2025"
}
}
},
"settingsTitle": "Settings",
"languageSetting": "Language",
"english": "English",
"french": "French",
"languageChangedTo": "Language changed to {languageName}",
"@languageChangedTo": {
"placeholders": {
"languageName": {
"type": "String"
}
}
},
"chooseDrone": "Choose your Drone",
"selectDroneHint": "Select a drone",
"chooseBattery": "Choose your Battery",
"selectBatteryHint": "Select a battery",
"startFlight": "Start Flight",
"stopFlight": "Stop Flight",
"selectDroneBattery": "Please select a drone and a battery.",
"flightStarted": "Flight started!",
"flightStopped": "Flight stopped. Duration: {flightDuration}",
"@flightStopped": {
"placeholders": {
"flightDuration": {
"type": "String",
"example": "00:05:30"
}
}
},
"recordFlightLocation": "Record flight location (GPS)",
"locationServicesDisabled": "Location services are disabled.",
"locationPermissionsDenied": "Location permissions are denied.",
"locationPermissionsDeniedForever": "Location permissions are permanently denied, we cannot request permissions.",
"locationObtained": "Location obtained: Lat {latitude}, Lng {longitude}",
"@locationObtained": {
"placeholders": {
"latitude": {
"type": "double"
},
"longitude": {
"type": "double"
}
}
},
"locationRequiredForFlight": "GPS location is required but could not be obtained. Please check permissions and try again.",
"obtainingLocation": "Obtaining location...",
"failedToGetLocation": "Failed to get location: {error}",
"@failedToGetLocation": {
"placeholders": {
"error": {
"type": "String"
}
}
},
"currentCoordinates": "Current coordinates: Lat {latitude}, Lng {longitude}",
"@currentCoordinates": {
"placeholders": {
"latitude": {
"type": "double"
},
"longitude": {
"type": "double"
}
}
},
"errorLoadingDrones": "Error loading drones",
"errorLoadingBatteries": "Error loading batteries",
"noDronesYet": "No drones added yet. Tap the '+' card to add one!",
"noBatteriesYet": "No batteries added yet. Tap the '+' card to add one!",
"flightSavedSuccessfully": "Flight saved successfully!",
"failedToSaveFlight": "Failed to save flight: {error}",
"@failedToSaveFlight": {
"placeholders": {
"error": {
"type": "String"
}
}
},
"errorLoadingFlights": "Error loading flights",
"noFlightsYet": "No flights recorded yet.",
"droneName": "Drone Name",
"pleaseEnterDroneName": "Please enter a drone name",
"imageUuidOptional": "Image UUID (Optional)",
"saveDrone": "Save Drone",
"droneAddedSuccessfully": "Drone added successfully!",
"failedToAddDrone": "Failed to add drone",
"batteryName": "Battery Name",
"batteryType": "Battery Type",
"batteryVoltage": "Voltage (V)",
"pleaseEnterBatteryName": "Please enter a battery name",
"pleaseEnterBatteryType": "Please enter a battery type",
"pleaseEnterBatteryVoltage": "Please enter battery voltage",
"pleaseEnterValidNumber": "Please enter a valid number",
"saveBattery": "Save Battery",
"batteryAddedSuccessfully": "Battery added successfully!",
"failedToAddBattery": "Failed to add battery",
"droneImage": "Drone Image",
"batteryImage": "Battery Image",
"takePhoto": "Take Photo",
"chooseFromGallery": "Choose from Gallery",
"imageSelected": "Image selected!",
"imageSelectionCancelled": "Image selection cancelled.",
"removeImage": "Remove Image",
"imageDeletedSuccessfully": "Image deleted successfully!",
"droneDetails": "Drone Details",
"editDrone": "Edit Drone",
"saveChanges": "Save Changes",
"droneUpdatedSuccessfully": "Drone updated successfully!",
"failedToUpdateDrone": "Failed to update drone",
"deleteDroneConfirmationTitle": "Delete Drone?",
"deleteDroneConfirmationMessage": "Are you sure you want to delete {droneName}? This action cannot be undone.",
"@deleteDroneConfirmationMessage": {
"placeholders": {
"droneName": {
"type": "String"
}
}
},
"droneDeletedSuccessfully": "Drone deleted successfully!",
"failedToDeleteDrone": "Failed to delete drone",
"batteryDetails": "Battery Details",
"editBattery": "Edit Battery",
"batteryUpdatedSuccessfully": "Battery updated successfully!",
"failedToUpdateBattery": "Failed to update battery",
"deleteBatteryConfirmationTitle": "Delete Battery?",
"deleteBatteryConfirmationMessage": "Are you sure you want to delete {batteryName}? This action cannot be undone.",
"@deleteBatteryConfirmationMessage": {
"placeholders": {
"batteryName": {
"type": "String"
}
}
},
"batteryDeletedSuccessfully": "Battery deleted successfully!",
"failedToDeleteBattery": "Failed to delete battery",
"cancel": "Cancel",
"delete": "Delete",
"flightDetails": "Flight Details",
"startTime": "Start Time",
"endTime": "End Time",
"duration": "Duration",
"flightLocation": "Flight Location",
"noLocationData": "No location data for this flight.",
"unknown": "Unknown",
"errorLoadingData": "Error loading data",
"drone": "Drone",
"battery": "Battery",
"themeSetting": "Theme",
"themeLight": "Light Theme",
"themeDark": "Dark Theme",
"themeSystem": "System Default",
"themeChangedTo": "Theme changed to {themeName}",
"@themeChangedTo": {
"placeholders": {
"themeName": {
"type": "String"
}
}
},
"deleteFlightConfirmationTitle": "Delete Flight?",
"deleteFlightConfirmationMessage": "Are you sure you want to delete {flightName}? This action cannot be undone.",
"@deleteFlightConfirmationMessage": {
"placeholders": {
"flightName": {
"type": "String"
}
}
},
"flightDeletedSuccessfully": "Flight deleted successfully!",
"failedToDeleteFlight": "Failed to delete flight"
}

210
lib/l10n/app_fr.arb Normal file
View File

@ -0,0 +1,210 @@
{
"@@locale": "fr",
"appTitle": "Rtime",
"@appTitle": {
"description": "Le titre de l'application"
},
"yourDrones": "Vos Drones",
"addDrone": "Ajouter un drone",
"yourBatteries": "Vos Batteries",
"addBattery": "Ajouter une batterie",
"latestFlights": "Derniers Vols",
"newFlight": "Nouveau Vol",
"detailsOfDrone": "Détails du drone : {droneName}",
"@detailsOfDrone": {
"placeholders": {
"droneName": {
"type": "String",
"example": "Chimera7"
}
}
},
"detailsOfBattery": "Détails de la batterie : {batteryName}",
"@detailsOfBattery": {
"placeholders": {
"batteryName": {
"type": "String",
"example": "GNB 1300mAh"
}
}
},
"detailsOfFlight": "Détails du vol : {flightName}",
"@detailsOfFlight": {
"placeholders": {
"flightName": {
"type": "String",
"example": "Vol à la plage - 01/07/2025"
}
}
},
"settingsTitle": "Paramètres",
"languageSetting": "Langue",
"english": "Anglais",
"french": "Français",
"languageChangedTo": "Langue changée en {languageName}",
"@languageChangedTo": {
"placeholders": {
"languageName": {
"type": "String"
}
}
},
"chooseDrone": "Choisissez votre Drone",
"selectDroneHint": "Sélectionnez un drone",
"chooseBattery": "Choisissez votre Batterie",
"selectBatteryHint": "Sélectionnez une batterie",
"startFlight": "Lancer le vol",
"stopFlight": "Arrêter le vol",
"selectDroneBattery": "Veuillez sélectionner un drone et une batterie.",
"flightStarted": "Vol démarré !",
"flightStopped": "Vol arrêté. Durée : {flightDuration}",
"@flightStopped": {
"placeholders": {
"flightDuration": {
"type": "String",
"example": "00:05:30"
}
}
},
"recordFlightLocation": "Enregistrer la localisation du vol (GPS)",
"locationServicesDisabled": "Les services de localisation sont désactivés.",
"locationPermissionsDenied": "Les permissions de localisation sont refusées.",
"locationPermissionsDeniedForever": "Les permissions de localisation sont refusées de manière permanente, nous ne pouvons pas les demander.",
"locationObtained": "Localisation obtenue : Lat {latitude}, Lon {longitude}",
"@locationObtained": {
"placeholders": {
"latitude": {
"type": "double"
},
"longitude": {
"type": "double"
}
}
},
"locationRequiredForFlight": "La localisation GPS est requise mais n'a pu être obtenue. Veuillez vérifier les permissions et réessayer.",
"obtainingLocation": "Obtention de la localisation...",
"failedToGetLocation": "Échec de l'obtention de la localisation : {error}",
"@failedToGetLocation": {
"placeholders": {
"error": {
"type": "String"
}
}
},
"currentCoordinates": "Coordonnées actuelles : Lat {latitude}, Lon {longitude}",
"@currentCoordinates": {
"placeholders": {
"latitude": {
"type": "double"
},
"longitude": {
"type": "double"
}
}
},
"errorLoadingDrones": "Erreur lors du chargement des drones",
"errorLoadingBatteries": "Erreur lors du chargement des batteries",
"noDronesYet": "Aucun drone ajouté pour le moment. Appuyez sur la carte '+' pour en ajouter un !",
"noBatteriesYet": "Aucune batterie ajoutée pour le moment. Appuyez sur la carte '+' pour en ajouter une !",
"flightSavedSuccessfully": "Vol enregistré avec succès !",
"failedToSaveFlight": "Échec de l'enregistrement du vol : {error}",
"@failedToSaveFlight": {
"placeholders": {
"error": {
"type": "String"
}
}
},
"errorLoadingFlights": "Erreur lors du chargement des vols",
"noFlightsYet": "Aucun vol enregistré pour le moment.",
"droneName": "Nom du drone",
"pleaseEnterDroneName": "Veuillez entrer un nom de drone",
"imageUuidOptional": "UUID de l'image (Facultatif)",
"saveDrone": "Enregistrer le drone",
"droneAddedSuccessfully": "Drone ajouté avec succès !",
"failedToAddDrone": "Échec de l'ajout du drone",
"batteryName": "Nom de la batterie",
"batteryType": "Type de batterie",
"batteryVoltage": "Tension (V)",
"pleaseEnterBatteryName": "Veuillez entrer un nom de batterie",
"pleaseEnterBatteryType": "Veuillez entrer un type de batterie",
"pleaseEnterBatteryVoltage": "Veuillez entrer la tension de la batterie",
"pleaseEnterValidNumber": "Veuillez entrer un nombre valide",
"saveBattery": "Enregistrer la batterie",
"batteryAddedSuccessfully": "Batterie ajoutée avec succès !",
"failedToAddBattery": "Échec de l'ajout de la batterie",
"droneImage": "Image du drone",
"batteryImage": "Image de la batterie",
"takePhoto": "Prendre une photo",
"chooseFromGallery": "Choisir de la galerie",
"imageSelected": "Image sélectionnée !",
"imageSelectionCancelled": "Sélection d'image annulée.",
"removeImage": "Supprimer l'image",
"imageDeletedSuccessfully": "Image supprimée avec succès !",
"droneDetails": "Détails du drone",
"editDrone": "Modifier le drone",
"saveChanges": "Enregistrer les modifications",
"droneUpdatedSuccessfully": "Drone mis à jour avec succès !",
"failedToUpdateDrone": "Échec de la mise à jour du drone",
"deleteDroneConfirmationTitle": "Supprimer le drone ?",
"deleteDroneConfirmationMessage": "Êtes-vous sûr de vouloir supprimer {droneName} ? Cette action est irréversible.",
"@deleteDroneConfirmationMessage": {
"placeholders": {
"droneName": {
"type": "String"
}
}
},
"droneDeletedSuccessfully": "Drone supprimé avec succès !",
"failedToDeleteDrone": "Échec de la suppression du drone",
"batteryDetails": "Détails de la batterie",
"editBattery": "Modifier la batterie",
"batteryUpdatedSuccessfully": "Batterie mise à jour avec succès !",
"failedToUpdateBattery": "Échec de la mise à jour de la batterie",
"deleteBatteryConfirmationTitle": "Supprimer la batterie ?",
"deleteBatteryConfirmationMessage": "Êtes-vous sûr de vouloir supprimer {batteryName} ? Cette action est irréversible.",
"@deleteBatteryConfirmationMessage": {
"placeholders": {
"batteryName": {
"type": "String"
}
}
},
"batteryDeletedSuccessfully": "Batterie supprimée avec succès !",
"failedToDeleteBattery": "Échec de la suppression de la batterie",
"cancel": "Annuler",
"delete": "Supprimer",
"flightDetails": "Détails du vol",
"startTime": "Heure de début",
"endTime": "Heure de fin",
"duration": "Durée",
"flightLocation": "Localisation du vol",
"noLocationData": "Pas de données de localisation pour ce vol.",
"unknown": "Inconnu",
"errorLoadingData": "Erreur de chargement des données",
"drone": "Drone",
"battery": "Batterie",
"themeSetting": "Thème",
"themeLight": "Thème Clair",
"themeDark": "Thème Sombre",
"themeSystem": "Par défaut du système",
"themeChangedTo": "Thème changé en {themeName}",
"@themeChangedTo": {
"placeholders": {
"themeName": {
"type": "String"
}
}
},
"deleteFlightConfirmationTitle": "Supprimer le vol ?",
"deleteFlightConfirmationMessage": "Êtes-vous sûr de vouloir supprimer {flightName} ? Cette action est irréversible.",
"@deleteFlightConfirmationMessage": {
"placeholders": {
"flightName": {
"type": "String"
}
}
},
"flightDeletedSuccessfully": "Vol supprimé avec succès !",
"failedToDeleteFlight": "Échec de la suppression du vol"
}

View File

@ -0,0 +1,747 @@
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_en.dart';
import 'app_localizations_fr.dart';
// ignore_for_file: type=lint
/// Callers can lookup localized strings with an instance of AppLocalizations
/// returned by `AppLocalizations.of(context)`.
///
/// Applications need to include `AppLocalizations.delegate()` in their app's
/// `localizationDelegates` list, and the locales they support in the app's
/// `supportedLocales` list. For example:
///
/// ```dart
/// import 'l10n/app_localizations.dart';
///
/// return MaterialApp(
/// localizationsDelegates: AppLocalizations.localizationsDelegates,
/// supportedLocales: AppLocalizations.supportedLocales,
/// home: MyApplicationHome(),
/// );
/// ```
///
/// ## Update pubspec.yaml
///
/// Please make sure to update your pubspec.yaml to include the following
/// packages:
///
/// ```yaml
/// dependencies:
/// # Internationalization support.
/// flutter_localizations:
/// sdk: flutter
/// intl: any # Use the pinned version from flutter_localizations
///
/// # Rest of dependencies
/// ```
///
/// ## iOS Applications
///
/// iOS applications define key application metadata, including supported
/// locales, in an Info.plist file that is built into the application bundle.
/// To configure the locales supported by your app, youll need to edit this
/// file.
///
/// First, open your projects ios/Runner.xcworkspace Xcode workspace file.
/// Then, in the Project Navigator, open the Info.plist file under the Runner
/// projects Runner folder.
///
/// Next, select the Information Property List item, select Add Item from the
/// Editor menu, then select Localizations from the pop-up menu.
///
/// Select and expand the newly-created Localizations item then, for each
/// locale your application supports, add a new item and select the locale
/// you wish to add from the pop-up menu in the Value field. This list should
/// be consistent with the languages listed in the AppLocalizations.supportedLocales
/// property.
abstract class AppLocalizations {
AppLocalizations(String locale) : localeName = intl.Intl.canonicalizedLocale(locale.toString());
final String localeName;
static AppLocalizations? of(BuildContext context) {
return Localizations.of<AppLocalizations>(context, AppLocalizations);
}
static const LocalizationsDelegate<AppLocalizations> delegate = _AppLocalizationsDelegate();
/// A list of this localizations delegate along with the default localizations
/// delegates.
///
/// Returns a list of localizations delegates containing this delegate along with
/// GlobalMaterialLocalizations.delegate, GlobalCupertinoLocalizations.delegate,
/// and GlobalWidgetsLocalizations.delegate.
///
/// Additional delegates can be added by appending to this list in
/// MaterialApp. This list does not have to be used at all if a custom list
/// of delegates is preferred or required.
static const List<LocalizationsDelegate<dynamic>> localizationsDelegates = <LocalizationsDelegate<dynamic>>[
delegate,
GlobalMaterialLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
];
/// A list of this localizations delegate's supported locales.
static const List<Locale> supportedLocales = <Locale>[
Locale('en'),
Locale('fr')
];
/// The title of the application
///
/// In en, this message translates to:
/// **'Rtime'**
String get appTitle;
/// No description provided for @yourDrones.
///
/// In en, this message translates to:
/// **'Your Drones'**
String get yourDrones;
/// No description provided for @addDrone.
///
/// In en, this message translates to:
/// **'Add Drone'**
String get addDrone;
/// No description provided for @yourBatteries.
///
/// In en, this message translates to:
/// **'Your Batteries'**
String get yourBatteries;
/// No description provided for @addBattery.
///
/// In en, this message translates to:
/// **'Add Battery'**
String get addBattery;
/// No description provided for @latestFlights.
///
/// In en, this message translates to:
/// **'Latest Flights'**
String get latestFlights;
/// No description provided for @newFlight.
///
/// In en, this message translates to:
/// **'New Flight'**
String get newFlight;
/// No description provided for @detailsOfDrone.
///
/// In en, this message translates to:
/// **'Details of drone: {droneName}'**
String detailsOfDrone(String droneName);
/// No description provided for @detailsOfBattery.
///
/// In en, this message translates to:
/// **'Details of battery: {batteryName}'**
String detailsOfBattery(String batteryName);
/// No description provided for @detailsOfFlight.
///
/// In en, this message translates to:
/// **'Details of flight: {flightName}'**
String detailsOfFlight(String flightName);
/// No description provided for @settingsTitle.
///
/// In en, this message translates to:
/// **'Settings'**
String get settingsTitle;
/// No description provided for @languageSetting.
///
/// In en, this message translates to:
/// **'Language'**
String get languageSetting;
/// No description provided for @english.
///
/// In en, this message translates to:
/// **'English'**
String get english;
/// No description provided for @french.
///
/// In en, this message translates to:
/// **'French'**
String get french;
/// No description provided for @languageChangedTo.
///
/// In en, this message translates to:
/// **'Language changed to {languageName}'**
String languageChangedTo(String languageName);
/// No description provided for @chooseDrone.
///
/// In en, this message translates to:
/// **'Choose your Drone'**
String get chooseDrone;
/// No description provided for @selectDroneHint.
///
/// In en, this message translates to:
/// **'Select a drone'**
String get selectDroneHint;
/// No description provided for @chooseBattery.
///
/// In en, this message translates to:
/// **'Choose your Battery'**
String get chooseBattery;
/// No description provided for @selectBatteryHint.
///
/// In en, this message translates to:
/// **'Select a battery'**
String get selectBatteryHint;
/// No description provided for @startFlight.
///
/// In en, this message translates to:
/// **'Start Flight'**
String get startFlight;
/// No description provided for @stopFlight.
///
/// In en, this message translates to:
/// **'Stop Flight'**
String get stopFlight;
/// No description provided for @selectDroneBattery.
///
/// In en, this message translates to:
/// **'Please select a drone and a battery.'**
String get selectDroneBattery;
/// No description provided for @flightStarted.
///
/// In en, this message translates to:
/// **'Flight started!'**
String get flightStarted;
/// No description provided for @flightStopped.
///
/// In en, this message translates to:
/// **'Flight stopped. Duration: {flightDuration}'**
String flightStopped(String flightDuration);
/// No description provided for @recordFlightLocation.
///
/// In en, this message translates to:
/// **'Record flight location (GPS)'**
String get recordFlightLocation;
/// No description provided for @locationServicesDisabled.
///
/// In en, this message translates to:
/// **'Location services are disabled.'**
String get locationServicesDisabled;
/// No description provided for @locationPermissionsDenied.
///
/// In en, this message translates to:
/// **'Location permissions are denied.'**
String get locationPermissionsDenied;
/// No description provided for @locationPermissionsDeniedForever.
///
/// In en, this message translates to:
/// **'Location permissions are permanently denied, we cannot request permissions.'**
String get locationPermissionsDeniedForever;
/// No description provided for @locationObtained.
///
/// In en, this message translates to:
/// **'Location obtained: Lat {latitude}, Lng {longitude}'**
String locationObtained(double latitude, double longitude);
/// No description provided for @locationRequiredForFlight.
///
/// In en, this message translates to:
/// **'GPS location is required but could not be obtained. Please check permissions and try again.'**
String get locationRequiredForFlight;
/// No description provided for @obtainingLocation.
///
/// In en, this message translates to:
/// **'Obtaining location...'**
String get obtainingLocation;
/// No description provided for @failedToGetLocation.
///
/// In en, this message translates to:
/// **'Failed to get location: {error}'**
String failedToGetLocation(String error);
/// No description provided for @currentCoordinates.
///
/// In en, this message translates to:
/// **'Current coordinates: Lat {latitude}, Lng {longitude}'**
String currentCoordinates(double latitude, double longitude);
/// No description provided for @errorLoadingDrones.
///
/// In en, this message translates to:
/// **'Error loading drones'**
String get errorLoadingDrones;
/// No description provided for @errorLoadingBatteries.
///
/// In en, this message translates to:
/// **'Error loading batteries'**
String get errorLoadingBatteries;
/// No description provided for @noDronesYet.
///
/// In en, this message translates to:
/// **'No drones added yet. Tap the \'+\' card to add one!'**
String get noDronesYet;
/// No description provided for @noBatteriesYet.
///
/// In en, this message translates to:
/// **'No batteries added yet. Tap the \'+\' card to add one!'**
String get noBatteriesYet;
/// No description provided for @flightSavedSuccessfully.
///
/// In en, this message translates to:
/// **'Flight saved successfully!'**
String get flightSavedSuccessfully;
/// No description provided for @failedToSaveFlight.
///
/// In en, this message translates to:
/// **'Failed to save flight: {error}'**
String failedToSaveFlight(String error);
/// No description provided for @errorLoadingFlights.
///
/// In en, this message translates to:
/// **'Error loading flights'**
String get errorLoadingFlights;
/// No description provided for @noFlightsYet.
///
/// In en, this message translates to:
/// **'No flights recorded yet.'**
String get noFlightsYet;
/// No description provided for @droneName.
///
/// In en, this message translates to:
/// **'Drone Name'**
String get droneName;
/// No description provided for @pleaseEnterDroneName.
///
/// In en, this message translates to:
/// **'Please enter a drone name'**
String get pleaseEnterDroneName;
/// No description provided for @imageUuidOptional.
///
/// In en, this message translates to:
/// **'Image UUID (Optional)'**
String get imageUuidOptional;
/// No description provided for @saveDrone.
///
/// In en, this message translates to:
/// **'Save Drone'**
String get saveDrone;
/// No description provided for @droneAddedSuccessfully.
///
/// In en, this message translates to:
/// **'Drone added successfully!'**
String get droneAddedSuccessfully;
/// No description provided for @failedToAddDrone.
///
/// In en, this message translates to:
/// **'Failed to add drone'**
String get failedToAddDrone;
/// No description provided for @batteryName.
///
/// In en, this message translates to:
/// **'Battery Name'**
String get batteryName;
/// No description provided for @batteryType.
///
/// In en, this message translates to:
/// **'Battery Type'**
String get batteryType;
/// No description provided for @batteryVoltage.
///
/// In en, this message translates to:
/// **'Voltage (V)'**
String get batteryVoltage;
/// No description provided for @pleaseEnterBatteryName.
///
/// In en, this message translates to:
/// **'Please enter a battery name'**
String get pleaseEnterBatteryName;
/// No description provided for @pleaseEnterBatteryType.
///
/// In en, this message translates to:
/// **'Please enter a battery type'**
String get pleaseEnterBatteryType;
/// No description provided for @pleaseEnterBatteryVoltage.
///
/// In en, this message translates to:
/// **'Please enter battery voltage'**
String get pleaseEnterBatteryVoltage;
/// No description provided for @pleaseEnterValidNumber.
///
/// In en, this message translates to:
/// **'Please enter a valid number'**
String get pleaseEnterValidNumber;
/// No description provided for @saveBattery.
///
/// In en, this message translates to:
/// **'Save Battery'**
String get saveBattery;
/// No description provided for @batteryAddedSuccessfully.
///
/// In en, this message translates to:
/// **'Battery added successfully!'**
String get batteryAddedSuccessfully;
/// No description provided for @failedToAddBattery.
///
/// In en, this message translates to:
/// **'Failed to add battery'**
String get failedToAddBattery;
/// No description provided for @droneImage.
///
/// In en, this message translates to:
/// **'Drone Image'**
String get droneImage;
/// No description provided for @batteryImage.
///
/// In en, this message translates to:
/// **'Battery Image'**
String get batteryImage;
/// No description provided for @takePhoto.
///
/// In en, this message translates to:
/// **'Take Photo'**
String get takePhoto;
/// No description provided for @chooseFromGallery.
///
/// In en, this message translates to:
/// **'Choose from Gallery'**
String get chooseFromGallery;
/// No description provided for @imageSelected.
///
/// In en, this message translates to:
/// **'Image selected!'**
String get imageSelected;
/// No description provided for @imageSelectionCancelled.
///
/// In en, this message translates to:
/// **'Image selection cancelled.'**
String get imageSelectionCancelled;
/// No description provided for @removeImage.
///
/// In en, this message translates to:
/// **'Remove Image'**
String get removeImage;
/// No description provided for @imageDeletedSuccessfully.
///
/// In en, this message translates to:
/// **'Image deleted successfully!'**
String get imageDeletedSuccessfully;
/// No description provided for @droneDetails.
///
/// In en, this message translates to:
/// **'Drone Details'**
String get droneDetails;
/// No description provided for @editDrone.
///
/// In en, this message translates to:
/// **'Edit Drone'**
String get editDrone;
/// No description provided for @saveChanges.
///
/// In en, this message translates to:
/// **'Save Changes'**
String get saveChanges;
/// No description provided for @droneUpdatedSuccessfully.
///
/// In en, this message translates to:
/// **'Drone updated successfully!'**
String get droneUpdatedSuccessfully;
/// No description provided for @failedToUpdateDrone.
///
/// In en, this message translates to:
/// **'Failed to update drone'**
String get failedToUpdateDrone;
/// No description provided for @deleteDroneConfirmationTitle.
///
/// In en, this message translates to:
/// **'Delete Drone?'**
String get deleteDroneConfirmationTitle;
/// No description provided for @deleteDroneConfirmationMessage.
///
/// In en, this message translates to:
/// **'Are you sure you want to delete {droneName}? This action cannot be undone.'**
String deleteDroneConfirmationMessage(String droneName);
/// No description provided for @droneDeletedSuccessfully.
///
/// In en, this message translates to:
/// **'Drone deleted successfully!'**
String get droneDeletedSuccessfully;
/// No description provided for @failedToDeleteDrone.
///
/// In en, this message translates to:
/// **'Failed to delete drone'**
String get failedToDeleteDrone;
/// No description provided for @batteryDetails.
///
/// In en, this message translates to:
/// **'Battery Details'**
String get batteryDetails;
/// No description provided for @editBattery.
///
/// In en, this message translates to:
/// **'Edit Battery'**
String get editBattery;
/// No description provided for @batteryUpdatedSuccessfully.
///
/// In en, this message translates to:
/// **'Battery updated successfully!'**
String get batteryUpdatedSuccessfully;
/// No description provided for @failedToUpdateBattery.
///
/// In en, this message translates to:
/// **'Failed to update battery'**
String get failedToUpdateBattery;
/// No description provided for @deleteBatteryConfirmationTitle.
///
/// In en, this message translates to:
/// **'Delete Battery?'**
String get deleteBatteryConfirmationTitle;
/// No description provided for @deleteBatteryConfirmationMessage.
///
/// In en, this message translates to:
/// **'Are you sure you want to delete {batteryName}? This action cannot be undone.'**
String deleteBatteryConfirmationMessage(String batteryName);
/// No description provided for @batteryDeletedSuccessfully.
///
/// In en, this message translates to:
/// **'Battery deleted successfully!'**
String get batteryDeletedSuccessfully;
/// No description provided for @failedToDeleteBattery.
///
/// In en, this message translates to:
/// **'Failed to delete battery'**
String get failedToDeleteBattery;
/// No description provided for @cancel.
///
/// In en, this message translates to:
/// **'Cancel'**
String get cancel;
/// No description provided for @delete.
///
/// In en, this message translates to:
/// **'Delete'**
String get delete;
/// No description provided for @flightDetails.
///
/// In en, this message translates to:
/// **'Flight Details'**
String get flightDetails;
/// No description provided for @startTime.
///
/// In en, this message translates to:
/// **'Start Time'**
String get startTime;
/// No description provided for @endTime.
///
/// In en, this message translates to:
/// **'End Time'**
String get endTime;
/// No description provided for @duration.
///
/// In en, this message translates to:
/// **'Duration'**
String get duration;
/// No description provided for @flightLocation.
///
/// In en, this message translates to:
/// **'Flight Location'**
String get flightLocation;
/// No description provided for @noLocationData.
///
/// In en, this message translates to:
/// **'No location data for this flight.'**
String get noLocationData;
/// No description provided for @unknown.
///
/// In en, this message translates to:
/// **'Unknown'**
String get unknown;
/// No description provided for @errorLoadingData.
///
/// In en, this message translates to:
/// **'Error loading data'**
String get errorLoadingData;
/// No description provided for @drone.
///
/// In en, this message translates to:
/// **'Drone'**
String get drone;
/// No description provided for @battery.
///
/// In en, this message translates to:
/// **'Battery'**
String get battery;
/// No description provided for @themeSetting.
///
/// In en, this message translates to:
/// **'Theme'**
String get themeSetting;
/// No description provided for @themeLight.
///
/// In en, this message translates to:
/// **'Light Theme'**
String get themeLight;
/// No description provided for @themeDark.
///
/// In en, this message translates to:
/// **'Dark Theme'**
String get themeDark;
/// No description provided for @themeSystem.
///
/// In en, this message translates to:
/// **'System Default'**
String get themeSystem;
/// No description provided for @themeChangedTo.
///
/// In en, this message translates to:
/// **'Theme changed to {themeName}'**
String themeChangedTo(String themeName);
/// No description provided for @deleteFlightConfirmationTitle.
///
/// In en, this message translates to:
/// **'Delete Flight?'**
String get deleteFlightConfirmationTitle;
/// No description provided for @deleteFlightConfirmationMessage.
///
/// In en, this message translates to:
/// **'Are you sure you want to delete {flightName}? This action cannot be undone.'**
String deleteFlightConfirmationMessage(String flightName);
/// No description provided for @flightDeletedSuccessfully.
///
/// In en, this message translates to:
/// **'Flight deleted successfully!'**
String get flightDeletedSuccessfully;
/// No description provided for @failedToDeleteFlight.
///
/// In en, this message translates to:
/// **'Failed to delete flight'**
String get failedToDeleteFlight;
}
class _AppLocalizationsDelegate extends LocalizationsDelegate<AppLocalizations> {
const _AppLocalizationsDelegate();
@override
Future<AppLocalizations> load(Locale locale) {
return SynchronousFuture<AppLocalizations>(lookupAppLocalizations(locale));
}
@override
bool isSupported(Locale locale) => <String>['en', 'fr'].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 'en': return AppLocalizationsEn();
case 'fr': return AppLocalizationsFr();
}
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.'
);
}

View File

@ -0,0 +1,345 @@
// ignore: unused_import
import 'package:intl/intl.dart' as intl;
import 'app_localizations.dart';
// ignore_for_file: type=lint
/// The translations for English (`en`).
class AppLocalizationsEn extends AppLocalizations {
AppLocalizationsEn([String locale = 'en']) : super(locale);
@override
String get appTitle => 'Rtime';
@override
String get yourDrones => 'Your Drones';
@override
String get addDrone => 'Add Drone';
@override
String get yourBatteries => 'Your Batteries';
@override
String get addBattery => 'Add Battery';
@override
String get latestFlights => 'Latest Flights';
@override
String get newFlight => 'New Flight';
@override
String detailsOfDrone(String droneName) {
return 'Details of drone: $droneName';
}
@override
String detailsOfBattery(String batteryName) {
return 'Details of battery: $batteryName';
}
@override
String detailsOfFlight(String flightName) {
return 'Details of flight: $flightName';
}
@override
String get settingsTitle => 'Settings';
@override
String get languageSetting => 'Language';
@override
String get english => 'English';
@override
String get french => 'French';
@override
String languageChangedTo(String languageName) {
return 'Language changed to $languageName';
}
@override
String get chooseDrone => 'Choose your Drone';
@override
String get selectDroneHint => 'Select a drone';
@override
String get chooseBattery => 'Choose your Battery';
@override
String get selectBatteryHint => 'Select a battery';
@override
String get startFlight => 'Start Flight';
@override
String get stopFlight => 'Stop Flight';
@override
String get selectDroneBattery => 'Please select a drone and a battery.';
@override
String get flightStarted => 'Flight started!';
@override
String flightStopped(String flightDuration) {
return 'Flight stopped. Duration: $flightDuration';
}
@override
String get recordFlightLocation => 'Record flight location (GPS)';
@override
String get locationServicesDisabled => 'Location services are disabled.';
@override
String get locationPermissionsDenied => 'Location permissions are denied.';
@override
String get locationPermissionsDeniedForever => 'Location permissions are permanently denied, we cannot request permissions.';
@override
String locationObtained(double latitude, double longitude) {
return 'Location obtained: Lat $latitude, Lng $longitude';
}
@override
String get locationRequiredForFlight => 'GPS location is required but could not be obtained. Please check permissions and try again.';
@override
String get obtainingLocation => 'Obtaining location...';
@override
String failedToGetLocation(String error) {
return 'Failed to get location: $error';
}
@override
String currentCoordinates(double latitude, double longitude) {
return 'Current coordinates: Lat $latitude, Lng $longitude';
}
@override
String get errorLoadingDrones => 'Error loading drones';
@override
String get errorLoadingBatteries => 'Error loading batteries';
@override
String get noDronesYet => 'No drones added yet. Tap the \'+\' card to add one!';
@override
String get noBatteriesYet => 'No batteries added yet. Tap the \'+\' card to add one!';
@override
String get flightSavedSuccessfully => 'Flight saved successfully!';
@override
String failedToSaveFlight(String error) {
return 'Failed to save flight: $error';
}
@override
String get errorLoadingFlights => 'Error loading flights';
@override
String get noFlightsYet => 'No flights recorded yet.';
@override
String get droneName => 'Drone Name';
@override
String get pleaseEnterDroneName => 'Please enter a drone name';
@override
String get imageUuidOptional => 'Image UUID (Optional)';
@override
String get saveDrone => 'Save Drone';
@override
String get droneAddedSuccessfully => 'Drone added successfully!';
@override
String get failedToAddDrone => 'Failed to add drone';
@override
String get batteryName => 'Battery Name';
@override
String get batteryType => 'Battery Type';
@override
String get batteryVoltage => 'Voltage (V)';
@override
String get pleaseEnterBatteryName => 'Please enter a battery name';
@override
String get pleaseEnterBatteryType => 'Please enter a battery type';
@override
String get pleaseEnterBatteryVoltage => 'Please enter battery voltage';
@override
String get pleaseEnterValidNumber => 'Please enter a valid number';
@override
String get saveBattery => 'Save Battery';
@override
String get batteryAddedSuccessfully => 'Battery added successfully!';
@override
String get failedToAddBattery => 'Failed to add battery';
@override
String get droneImage => 'Drone Image';
@override
String get batteryImage => 'Battery Image';
@override
String get takePhoto => 'Take Photo';
@override
String get chooseFromGallery => 'Choose from Gallery';
@override
String get imageSelected => 'Image selected!';
@override
String get imageSelectionCancelled => 'Image selection cancelled.';
@override
String get removeImage => 'Remove Image';
@override
String get imageDeletedSuccessfully => 'Image deleted successfully!';
@override
String get droneDetails => 'Drone Details';
@override
String get editDrone => 'Edit Drone';
@override
String get saveChanges => 'Save Changes';
@override
String get droneUpdatedSuccessfully => 'Drone updated successfully!';
@override
String get failedToUpdateDrone => 'Failed to update drone';
@override
String get deleteDroneConfirmationTitle => 'Delete Drone?';
@override
String deleteDroneConfirmationMessage(String droneName) {
return 'Are you sure you want to delete $droneName? This action cannot be undone.';
}
@override
String get droneDeletedSuccessfully => 'Drone deleted successfully!';
@override
String get failedToDeleteDrone => 'Failed to delete drone';
@override
String get batteryDetails => 'Battery Details';
@override
String get editBattery => 'Edit Battery';
@override
String get batteryUpdatedSuccessfully => 'Battery updated successfully!';
@override
String get failedToUpdateBattery => 'Failed to update battery';
@override
String get deleteBatteryConfirmationTitle => 'Delete Battery?';
@override
String deleteBatteryConfirmationMessage(String batteryName) {
return 'Are you sure you want to delete $batteryName? This action cannot be undone.';
}
@override
String get batteryDeletedSuccessfully => 'Battery deleted successfully!';
@override
String get failedToDeleteBattery => 'Failed to delete battery';
@override
String get cancel => 'Cancel';
@override
String get delete => 'Delete';
@override
String get flightDetails => 'Flight Details';
@override
String get startTime => 'Start Time';
@override
String get endTime => 'End Time';
@override
String get duration => 'Duration';
@override
String get flightLocation => 'Flight Location';
@override
String get noLocationData => 'No location data for this flight.';
@override
String get unknown => 'Unknown';
@override
String get errorLoadingData => 'Error loading data';
@override
String get drone => 'Drone';
@override
String get battery => 'Battery';
@override
String get themeSetting => 'Theme';
@override
String get themeLight => 'Light Theme';
@override
String get themeDark => 'Dark Theme';
@override
String get themeSystem => 'System Default';
@override
String themeChangedTo(String themeName) {
return 'Theme changed to $themeName';
}
@override
String get deleteFlightConfirmationTitle => 'Delete Flight?';
@override
String deleteFlightConfirmationMessage(String flightName) {
return 'Are you sure you want to delete $flightName? This action cannot be undone.';
}
@override
String get flightDeletedSuccessfully => 'Flight deleted successfully!';
@override
String get failedToDeleteFlight => 'Failed to delete flight';
}

View File

@ -0,0 +1,345 @@
// ignore: unused_import
import 'package:intl/intl.dart' as intl;
import 'app_localizations.dart';
// ignore_for_file: type=lint
/// The translations for French (`fr`).
class AppLocalizationsFr extends AppLocalizations {
AppLocalizationsFr([String locale = 'fr']) : super(locale);
@override
String get appTitle => 'Rtime';
@override
String get yourDrones => 'Vos Drones';
@override
String get addDrone => 'Ajouter un drone';
@override
String get yourBatteries => 'Vos Batteries';
@override
String get addBattery => 'Ajouter une batterie';
@override
String get latestFlights => 'Derniers Vols';
@override
String get newFlight => 'Nouveau Vol';
@override
String detailsOfDrone(String droneName) {
return 'Détails du drone : $droneName';
}
@override
String detailsOfBattery(String batteryName) {
return 'Détails de la batterie : $batteryName';
}
@override
String detailsOfFlight(String flightName) {
return 'Détails du vol : $flightName';
}
@override
String get settingsTitle => 'Paramètres';
@override
String get languageSetting => 'Langue';
@override
String get english => 'Anglais';
@override
String get french => 'Français';
@override
String languageChangedTo(String languageName) {
return 'Langue changée en $languageName';
}
@override
String get chooseDrone => 'Choisissez votre Drone';
@override
String get selectDroneHint => 'Sélectionnez un drone';
@override
String get chooseBattery => 'Choisissez votre Batterie';
@override
String get selectBatteryHint => 'Sélectionnez une batterie';
@override
String get startFlight => 'Lancer le vol';
@override
String get stopFlight => 'Arrêter le vol';
@override
String get selectDroneBattery => 'Veuillez sélectionner un drone et une batterie.';
@override
String get flightStarted => 'Vol démarré !';
@override
String flightStopped(String flightDuration) {
return 'Vol arrêté. Durée : $flightDuration';
}
@override
String get recordFlightLocation => 'Enregistrer la localisation du vol (GPS)';
@override
String get locationServicesDisabled => 'Les services de localisation sont désactivés.';
@override
String get locationPermissionsDenied => 'Les permissions de localisation sont refusées.';
@override
String get locationPermissionsDeniedForever => 'Les permissions de localisation sont refusées de manière permanente, nous ne pouvons pas les demander.';
@override
String locationObtained(double latitude, double longitude) {
return 'Localisation obtenue : Lat $latitude, Lon $longitude';
}
@override
String get locationRequiredForFlight => 'La localisation GPS est requise mais n\'a pu être obtenue. Veuillez vérifier les permissions et réessayer.';
@override
String get obtainingLocation => 'Obtention de la localisation...';
@override
String failedToGetLocation(String error) {
return 'Échec de l\'obtention de la localisation : $error';
}
@override
String currentCoordinates(double latitude, double longitude) {
return 'Coordonnées actuelles : Lat $latitude, Lon $longitude';
}
@override
String get errorLoadingDrones => 'Erreur lors du chargement des drones';
@override
String get errorLoadingBatteries => 'Erreur lors du chargement des batteries';
@override
String get noDronesYet => 'Aucun drone ajouté pour le moment. Appuyez sur la carte \'+\' pour en ajouter un !';
@override
String get noBatteriesYet => 'Aucune batterie ajoutée pour le moment. Appuyez sur la carte \'+\' pour en ajouter une !';
@override
String get flightSavedSuccessfully => 'Vol enregistré avec succès !';
@override
String failedToSaveFlight(String error) {
return 'Échec de l\'enregistrement du vol : $error';
}
@override
String get errorLoadingFlights => 'Erreur lors du chargement des vols';
@override
String get noFlightsYet => 'Aucun vol enregistré pour le moment.';
@override
String get droneName => 'Nom du drone';
@override
String get pleaseEnterDroneName => 'Veuillez entrer un nom de drone';
@override
String get imageUuidOptional => 'UUID de l\'image (Facultatif)';
@override
String get saveDrone => 'Enregistrer le drone';
@override
String get droneAddedSuccessfully => 'Drone ajouté avec succès !';
@override
String get failedToAddDrone => 'Échec de l\'ajout du drone';
@override
String get batteryName => 'Nom de la batterie';
@override
String get batteryType => 'Type de batterie';
@override
String get batteryVoltage => 'Tension (V)';
@override
String get pleaseEnterBatteryName => 'Veuillez entrer un nom de batterie';
@override
String get pleaseEnterBatteryType => 'Veuillez entrer un type de batterie';
@override
String get pleaseEnterBatteryVoltage => 'Veuillez entrer la tension de la batterie';
@override
String get pleaseEnterValidNumber => 'Veuillez entrer un nombre valide';
@override
String get saveBattery => 'Enregistrer la batterie';
@override
String get batteryAddedSuccessfully => 'Batterie ajoutée avec succès !';
@override
String get failedToAddBattery => 'Échec de l\'ajout de la batterie';
@override
String get droneImage => 'Image du drone';
@override
String get batteryImage => 'Image de la batterie';
@override
String get takePhoto => 'Prendre une photo';
@override
String get chooseFromGallery => 'Choisir de la galerie';
@override
String get imageSelected => 'Image sélectionnée !';
@override
String get imageSelectionCancelled => 'Sélection d\'image annulée.';
@override
String get removeImage => 'Supprimer l\'image';
@override
String get imageDeletedSuccessfully => 'Image supprimée avec succès !';
@override
String get droneDetails => 'Détails du drone';
@override
String get editDrone => 'Modifier le drone';
@override
String get saveChanges => 'Enregistrer les modifications';
@override
String get droneUpdatedSuccessfully => 'Drone mis à jour avec succès !';
@override
String get failedToUpdateDrone => 'Échec de la mise à jour du drone';
@override
String get deleteDroneConfirmationTitle => 'Supprimer le drone ?';
@override
String deleteDroneConfirmationMessage(String droneName) {
return 'Êtes-vous sûr de vouloir supprimer $droneName ? Cette action est irréversible.';
}
@override
String get droneDeletedSuccessfully => 'Drone supprimé avec succès !';
@override
String get failedToDeleteDrone => 'Échec de la suppression du drone';
@override
String get batteryDetails => 'Détails de la batterie';
@override
String get editBattery => 'Modifier la batterie';
@override
String get batteryUpdatedSuccessfully => 'Batterie mise à jour avec succès !';
@override
String get failedToUpdateBattery => 'Échec de la mise à jour de la batterie';
@override
String get deleteBatteryConfirmationTitle => 'Supprimer la batterie ?';
@override
String deleteBatteryConfirmationMessage(String batteryName) {
return 'Êtes-vous sûr de vouloir supprimer $batteryName ? Cette action est irréversible.';
}
@override
String get batteryDeletedSuccessfully => 'Batterie supprimée avec succès !';
@override
String get failedToDeleteBattery => 'Échec de la suppression de la batterie';
@override
String get cancel => 'Annuler';
@override
String get delete => 'Supprimer';
@override
String get flightDetails => 'Détails du vol';
@override
String get startTime => 'Heure de début';
@override
String get endTime => 'Heure de fin';
@override
String get duration => 'Durée';
@override
String get flightLocation => 'Localisation du vol';
@override
String get noLocationData => 'Pas de données de localisation pour ce vol.';
@override
String get unknown => 'Inconnu';
@override
String get errorLoadingData => 'Erreur de chargement des données';
@override
String get drone => 'Drone';
@override
String get battery => 'Batterie';
@override
String get themeSetting => 'Thème';
@override
String get themeLight => 'Thème Clair';
@override
String get themeDark => 'Thème Sombre';
@override
String get themeSystem => 'Par défaut du système';
@override
String themeChangedTo(String themeName) {
return 'Thème changé en $themeName';
}
@override
String get deleteFlightConfirmationTitle => 'Supprimer le vol ?';
@override
String deleteFlightConfirmationMessage(String flightName) {
return 'Êtes-vous sûr de vouloir supprimer $flightName ? Cette action est irréversible.';
}
@override
String get flightDeletedSuccessfully => 'Vol supprimé avec succès !';
@override
String get failedToDeleteFlight => 'Échec de la suppression du vol';
}