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';

// 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 'generated/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('en')];

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

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

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

  /// No description provided for @noDataAboutHabits.
  ///
  /// In en, this message translates to:
  /// **'There is no data about habits.'**
  String get noDataAboutHabits;

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

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

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

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

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

  /// No description provided for @allHabitsWillBeReplaced.
  ///
  /// In en, this message translates to:
  /// **'All habits will be replaced with habits from backup.'**
  String get allHabitsWillBeReplaced;

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

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

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

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

  /// No description provided for @firstDayOfWeek.
  ///
  /// In en, this message translates to:
  /// **'First day of the week'**
  String get firstDayOfWeek;

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

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

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

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

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

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

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

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

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

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

  /// No description provided for @copyright.
  ///
  /// In en, this message translates to:
  /// **'©2023 Habo'**
  String get copyright;

  /// No description provided for @termsAndConditions.
  ///
  /// In en, this message translates to:
  /// **'Terms and Conditions'**
  String get termsAndConditions;

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

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

  /// No description provided for @sourceCode.
  ///
  /// In en, this message translates to:
  /// **'Source code (GitHub)'**
  String get sourceCode;

  /// No description provided for @ifYouWantToSupport.
  ///
  /// In en, this message translates to:
  /// **'If you want to support Habo you can:'**
  String get ifYouWantToSupport;

  /// No description provided for @buyMeACoffee.
  ///
  /// In en, this message translates to:
  /// **'Buy me a coffee'**
  String get buyMeACoffee;

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

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

  /// No description provided for @congratulationsReward.
  ///
  /// In en, this message translates to:
  /// **'Congratulations! Your reward:'**
  String get congratulationsReward;

  /// No description provided for @ohNoSanction.
  ///
  /// In en, this message translates to:
  /// **'Oh no! Your sanction:'**
  String get ohNoSanction;

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

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

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

  /// No description provided for @habitLoopDescription.
  ///
  /// In en, this message translates to:
  /// **'Habit Loop is a psychological model describing the process of habit formation. It consists of three components: Cue, Routine, and Reward. The Cue triggers the Routine (habitual action), which is then reinforced by the Reward, creating a loop that makes the habit more ingrained and likely to be repeated.'**
  String get habitLoopDescription;

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

  /// No description provided for @cueDescription.
  ///
  /// In en, this message translates to:
  /// **'is the trigger that initiates your habit. It could be a specific time, location, feeling, or an event.'**
  String get cueDescription;

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

  /// No description provided for @routineDescription.
  ///
  /// In en, this message translates to:
  /// **'is the action you take in response to the cue. This is the habit itself.'**
  String get routineDescription;

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

  /// No description provided for @rewardDescription.
  ///
  /// In en, this message translates to:
  /// **'is the benefit or positive feeling you experience after performing the routine. It reinforces the habit.'**
  String get rewardDescription;

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

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

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

  /// No description provided for @habitTitleEmptyError.
  ///
  /// In en, this message translates to:
  /// **'The habit title can not be empty.'**
  String get habitTitleEmptyError;

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

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

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

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

  /// No description provided for @twoDayRule.
  ///
  /// In en, this message translates to:
  /// **'Two day rule'**
  String get twoDayRule;

  /// No description provided for @twoDayRuleDescription.
  ///
  /// In en, this message translates to:
  /// **'With two day rule, you can miss one day and do not lose a streak if the next day is successful.'**
  String get twoDayRuleDescription;

  /// No description provided for @advancedHabitBuilding.
  ///
  /// In en, this message translates to:
  /// **'Advanced habit building'**
  String get advancedHabitBuilding;

  /// No description provided for @advancedHabitBuildingDescription.
  ///
  /// In en, this message translates to:
  /// **'This section helps you better define your habits utilizing the Habit loop. You should define cues, routines, and rewards for every habit.'**
  String get advancedHabitBuildingDescription;

  /// No description provided for @at7AM.
  ///
  /// In en, this message translates to:
  /// **'At 7:00AM'**
  String get at7AM;

  /// No description provided for @do50PushUps.
  ///
  /// In en, this message translates to:
  /// **'Do 50 push ups'**
  String get do50PushUps;

  /// No description provided for @fifteenMinOfVideoGames.
  ///
  /// In en, this message translates to:
  /// **'15 min. of video games'**
  String get fifteenMinOfVideoGames;

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

  /// No description provided for @remainderOfReward.
  ///
  /// In en, this message translates to:
  /// **'The reminder of the reward after a successful routine.'**
  String get remainderOfReward;

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

  /// No description provided for @habitContractDescription.
  ///
  /// In en, this message translates to:
  /// **'While positive reinforcement is recommended, some people may opt for a habit contract. A habit contract allows you to specify a sanction that will be imposed if you miss your habit, and may involve an accountability partner who helps supervise your goals.'**
  String get habitContractDescription;

  /// No description provided for @donateToCharity.
  ///
  /// In en, this message translates to:
  /// **'Donate 10\$ to charity'**
  String get donateToCharity;

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

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

  /// No description provided for @remainderOfSanction.
  ///
  /// In en, this message translates to:
  /// **'The reminder of the sanction after a unsuccessful routine.'**
  String get remainderOfSanction;

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

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

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

  /// No description provided for @haboNeedsPermission.
  ///
  /// In en, this message translates to:
  /// **'Habo needs permission to send notifications to work properly.'**
  String get haboNeedsPermission;

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

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

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

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

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

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

  /// No description provided for @yourCommentHere.
  ///
  /// In en, this message translates to:
  /// **'Your note here'**
  String get yourCommentHere;

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

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

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

  /// No description provided for @backupFailedError.
  ///
  /// In en, this message translates to:
  /// **'ERROR: Creating backup failed.'**
  String get backupFailedError;

  /// No description provided for @restoreFailedError.
  ///
  /// In en, this message translates to:
  /// **'ERROR: Restoring backup failed.'**
  String get restoreFailedError;

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

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

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

  /// No description provided for @appNotificationsChannel.
  ///
  /// In en, this message translates to:
  /// **'Notification channel for application notifications'**
  String get appNotificationsChannel;

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

  /// No description provided for @habitNotificationsChannel.
  ///
  /// In en, this message translates to:
  /// **'Notification channel for habit notifications'**
  String get habitNotificationsChannel;

  /// No description provided for @doNotForgetToCheckYourHabits.
  ///
  /// In en, this message translates to:
  /// **'Do not forget to check your habits.'**
  String get doNotForgetToCheckYourHabits;

  /// No description provided for @themeSelect.
  ///
  /// In en, this message translates to:
  /// **'{theme, select, device {Device} light {Light} dark {Dark} oled {OLED black} materialYou {Material You} other{Device}}'**
  String themeSelect(String theme);

  /// No description provided for @defineYourHabits.
  ///
  /// In en, this message translates to:
  /// **'Define your habits'**
  String get defineYourHabits;

  /// No description provided for @defineYourHabitsDescription.
  ///
  /// In en, this message translates to:
  /// **'To better stick to your habits, you can define:'**
  String get defineYourHabitsDescription;

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

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

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

  /// No description provided for @logYourDays.
  ///
  /// In en, this message translates to:
  /// **'Log your days'**
  String get logYourDays;

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

  /// No description provided for @notSoSuccessful.
  ///
  /// In en, this message translates to:
  /// **'Not so successful'**
  String get notSoSuccessful;

  /// No description provided for @skipDoesNotAffectStreaks.
  ///
  /// In en, this message translates to:
  /// **'Skip (does not affect streaks)'**
  String get skipDoesNotAffectStreaks;

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

  /// No description provided for @trackYourProgress.
  ///
  /// In en, this message translates to:
  /// **'You can track your progress through the calendar view in every habit or on the statistics page.'**
  String get trackYourProgress;

  /// No description provided for @backupCreatedSuccessfully.
  ///
  /// In en, this message translates to:
  /// **'Backup created successfully!'**
  String get backupCreatedSuccessfully;

  /// No description provided for @backupFailed.
  ///
  /// In en, this message translates to:
  /// **'Backup failed!'**
  String get backupFailed;

  /// No description provided for @restoreCompletedSuccessfully.
  ///
  /// In en, this message translates to:
  /// **'Restore completed successfully!'**
  String get restoreCompletedSuccessfully;

  /// No description provided for @restoreFailed.
  ///
  /// In en, this message translates to:
  /// **'Restore failed!'**
  String get restoreFailed;

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

  /// No description provided for @fileTooLarge.
  ///
  /// In en, this message translates to:
  /// **'File too large (max 10MB)'**
  String get fileTooLarge;

  /// No description provided for @invalidBackupFile.
  ///
  /// In en, this message translates to:
  /// **'Invalid backup file'**
  String get invalidBackupFile;

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

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

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

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

  /// No description provided for @currentProgress.
  ///
  /// In en, this message translates to:
  /// **'Current: {current} {unit}'**
  String currentProgress(String current, String unit);

  /// No description provided for @targetProgress.
  ///
  /// In en, this message translates to:
  /// **'Target: {target} {unit}'**
  String targetProgress(String target, String unit);

  /// No description provided for @progressOf.
  ///
  /// In en, this message translates to:
  /// **'{current} / {target} {unit}'**
  String progressOf(String current, String target, String unit);

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

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

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

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

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

  /// No description provided for @booleanHabit.
  ///
  /// In en, this message translates to:
  /// **'Checkable (Yes/No)'**
  String get booleanHabit;

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

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

  /// No description provided for @numericHabitDescription.
  ///
  /// In en, this message translates to:
  /// **'Numeric habits let you track progress in increments throughout the day.'**
  String get numericHabitDescription;

  /// No description provided for @partialValueDescription.
  ///
  /// In en, this message translates to:
  /// **'To track progress in smaller increments'**
  String get partialValueDescription;

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

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

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

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

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

  /// No description provided for @createFirstCategory.
  ///
  /// In en, this message translates to:
  /// **'Create your first category to organize your habits'**
  String get createFirstCategory;

  /// No description provided for @pleaseEnterCategoryTitle.
  ///
  /// In en, this message translates to:
  /// **'Please enter a category title'**
  String get pleaseEnterCategoryTitle;

  /// No description provided for @categoryAlreadyExists.
  ///
  /// In en, this message translates to:
  /// **'Category \"{title}\" already exists'**
  String categoryAlreadyExists(String title);

  /// No description provided for @categoryCreatedSuccessfully.
  ///
  /// In en, this message translates to:
  /// **'Category \"{title}\" created successfully'**
  String categoryCreatedSuccessfully(String title);

  /// No description provided for @categoryUpdatedSuccessfully.
  ///
  /// In en, this message translates to:
  /// **'Category \"{title}\" updated successfully'**
  String categoryUpdatedSuccessfully(String title);

  /// No description provided for @categoryDeletedSuccessfully.
  ///
  /// In en, this message translates to:
  /// **'Category \"{title}\" deleted successfully'**
  String categoryDeletedSuccessfully(String title);

  /// No description provided for @failedToSaveCategory.
  ///
  /// In en, this message translates to:
  /// **'Failed to save category: {error}'**
  String failedToSaveCategory(String error);

  /// No description provided for @failedToDeleteCategory.
  ///
  /// In en, this message translates to:
  /// **'Failed to delete category: {error}'**
  String failedToDeleteCategory(String error);

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

  /// No description provided for @selectedCategories.
  ///
  /// In en, this message translates to:
  /// **'Selected Categories ({count})'**
  String selectedCategories(int count);

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

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

  /// No description provided for @deleteCategoryConfirmation.
  ///
  /// In en, this message translates to:
  /// **'Are you sure you want to delete \"{title}\"?\n\nThis will remove the category from all habits that use it.'**
  String deleteCategoryConfirmation(String title);

  /// No description provided for @noHabitsInCategory.
  ///
  /// In en, this message translates to:
  /// **'No habits in \"{title}\"'**
  String noHabitsInCategory(String title);

  /// No description provided for @createHabitForCategory.
  ///
  /// In en, this message translates to:
  /// **'Create a habit and assign it to this category'**
  String get createHabitForCategory;

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

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

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

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

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

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

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

  /// No description provided for @viewArchivedHabits.
  ///
  /// In en, this message translates to:
  /// **'View archived habits'**
  String get viewArchivedHabits;

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

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

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

  /// No description provided for @biometricLockEnabled.
  ///
  /// In en, this message translates to:
  /// **'Biometric lock enabled'**
  String get biometricLockEnabled;

  /// No description provided for @biometricLockDisabled.
  ///
  /// In en, this message translates to:
  /// **'Biometric lock disabled'**
  String get biometricLockDisabled;

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

  /// No description provided for @biometricAuthenticationRequired.
  ///
  /// In en, this message translates to:
  /// **'Biometric authentication required'**
  String get biometricAuthenticationRequired;

  /// No description provided for @setupFingerprintFaceUnlock.
  ///
  /// In en, this message translates to:
  /// **'Please set up your fingerprint or face unlock in device settings'**
  String get setupFingerprintFaceUnlock;

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

  /// No description provided for @biometricNotRecognized.
  ///
  /// In en, this message translates to:
  /// **'Biometric not recognized, try again'**
  String get biometricNotRecognized;

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

  /// No description provided for @biometricAuthenticationSucceeded.
  ///
  /// In en, this message translates to:
  /// **'Biometric authentication succeeded'**
  String get biometricAuthenticationSucceeded;

  /// No description provided for @deviceCredentialsRequired.
  ///
  /// In en, this message translates to:
  /// **'Device credentials required'**
  String get deviceCredentialsRequired;

  /// No description provided for @setupDeviceCredentials.
  ///
  /// In en, this message translates to:
  /// **'Please set up device credentials in settings'**
  String get setupDeviceCredentials;

  /// No description provided for @setupTouchIdFaceId.
  ///
  /// In en, this message translates to:
  /// **'Please set up your Touch ID or Face ID in device settings'**
  String get setupTouchIdFaceId;

  /// No description provided for @reenableTouchIdFaceId.
  ///
  /// In en, this message translates to:
  /// **'Please reenable your Touch ID or Face ID'**
  String get reenableTouchIdFaceId;

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

  /// No description provided for @biometricLockDescription.
  ///
  /// In en, this message translates to:
  /// **'Secure app with {authMethod}'**
  String biometricLockDescription(String authMethod);

  /// No description provided for @authenticateToEnable.
  ///
  /// In en, this message translates to:
  /// **'Authenticate to enable biometric lock'**
  String get authenticateToEnable;

  /// No description provided for @authenticateToAccess.
  ///
  /// In en, this message translates to:
  /// **'Please authenticate to access Habo'**
  String get authenticateToAccess;

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

  /// No description provided for @authenticationFailedMessage.
  ///
  /// In en, this message translates to:
  /// **'Please authenticate to access Habo using {authMethod}'**
  String authenticationFailedMessage(String authMethod);

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

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

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

  /// No description provided for @buildingBetterHabits.
  ///
  /// In en, this message translates to:
  /// **'Building Better Habits'**
  String get buildingBetterHabits;

  /// No description provided for @authenticationPrompt.
  ///
  /// In en, this message translates to:
  /// **'Please authenticate using {authMethod} to access your habits'**
  String authenticationPrompt(String authMethod);

  /// No description provided for @devicePinPatternPassword.
  ///
  /// In en, this message translates to:
  /// **'Device PIN, Pattern, or Password'**
  String get devicePinPatternPassword;

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

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

  /// No description provided for @whatsNewTitle.
  ///
  /// In en, this message translates to:
  /// **'What\'s New'**
  String get whatsNewTitle;

  /// No description provided for @whatsNewVersion.
  ///
  /// In en, this message translates to:
  /// **'Version {version}'**
  String whatsNewVersion(String version);

  /// No description provided for @featureNumericTitle.
  ///
  /// In en, this message translates to:
  /// **'Numeric values in habits'**
  String get featureNumericTitle;

  /// No description provided for @featureNumericDesc.
  ///
  /// In en, this message translates to:
  /// **'Track counts like glasses of water or pages read'**
  String get featureNumericDesc;

  /// No description provided for @featureDeepLinksTitle.
  ///
  /// In en, this message translates to:
  /// **'URL scheme (deep links)'**
  String get featureDeepLinksTitle;

  /// No description provided for @featureDeepLinksDesc.
  ///
  /// In en, this message translates to:
  /// **'Open Habo directly to screens like settings or create'**
  String get featureDeepLinksDesc;

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

  /// No description provided for @featureCategoriesDesc.
  ///
  /// In en, this message translates to:
  /// **'Organize habits with category filters'**
  String get featureCategoriesDesc;

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

  /// No description provided for @featureArchiveDesc.
  ///
  /// In en, this message translates to:
  /// **'Hide habits you no longer track without deleting'**
  String get featureArchiveDesc;

  /// No description provided for @featureMaterialYouTitle.
  ///
  /// In en, this message translates to:
  /// **'Material You theme (Android)'**
  String get featureMaterialYouTitle;

  /// No description provided for @featureMaterialYouDesc.
  ///
  /// In en, this message translates to:
  /// **'Dynamic colors that match your wallpaper'**
  String get featureMaterialYouDesc;

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

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

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

  /// No description provided for @featureLockDesc.
  ///
  /// In en, this message translates to:
  /// **'Secure the app with Face ID / Touch ID / biometrics'**
  String get featureLockDesc;

  /// No description provided for @featureIosSoundMixingTitle.
  ///
  /// In en, this message translates to:
  /// **'Fixed sound mixing'**
  String get featureIosSoundMixingTitle;

  /// No description provided for @featureIosSoundMixingDesc.
  ///
  /// In en, this message translates to:
  /// **'Habo sounds no longer interrupt your music or podcasts'**
  String get featureIosSoundMixingDesc;

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

  /// No description provided for @featureHomescreenWidgetDesc.
  ///
  /// In en, this message translates to:
  /// **'View your habit progress at a glance from your home screen (experimental)'**
  String get featureHomescreenWidgetDesc;

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

  /// No description provided for @featureLongpressCheckDesc.
  ///
  /// In en, this message translates to:
  /// **'Longpress on habit buttons to quickly change status'**
  String get featureLongpressCheckDesc;

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

  /// No description provided for @haboSyncDescription.
  ///
  /// In en, this message translates to:
  /// **'Sync your habits across all your devices with Habo\'s end-to-end encrypted cloud service.'**
  String get haboSyncDescription;

  /// No description provided for @haboSyncLearnMore.
  ///
  /// In en, this message translates to:
  /// **'Learn more at habo.space/sync'**
  String get haboSyncLearnMore;

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

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

  /// No description provided for @oneTapCheck.
  ///
  /// In en, this message translates to:
  /// **'Single tap to check'**
  String get oneTapCheck;

  /// No description provided for @tapCheckLongPressMenu.
  ///
  /// In en, this message translates to:
  /// **'Tap to check, long press for menu'**
  String get tapCheckLongPressMenu;

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

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

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

  /// No description provided for @selectIcon.
  ///
  /// In en, this message translates to:
  /// **'Pick an icon'**
  String get selectIcon;

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

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

  /// No description provided for @habitUnarchivedSuccess.
  ///
  /// In en, this message translates to:
  /// **'Habit unarchived'**
  String get habitUnarchivedSuccess;
}

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'].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();
  }

  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.',
  );
}
