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_ru.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('en'),
    Locale('ru'),
  ];

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

  /// No description provided for @loginSubtitle.
  ///
  /// In en, this message translates to:
  /// **'Check your country code and enter your\nphone number.'**
  String get loginSubtitle;

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

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

  /// No description provided for @loginOtherSignInMethods.
  ///
  /// In en, this message translates to:
  /// **'Other sign-in methods'**
  String get loginOtherSignInMethods;

  /// No description provided for @loginTermsIntro.
  ///
  /// In en, this message translates to:
  /// **'By continuing, you agree to \n'**
  String get loginTermsIntro;

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

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

  /// No description provided for @loginConfirmPhoneTitle.
  ///
  /// In en, this message translates to:
  /// **'Is this the correct number?'**
  String get loginConfirmPhoneTitle;

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

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

  /// No description provided for @loginReadTermsNotification.
  ///
  /// In en, this message translates to:
  /// **'Please read the terms of use first'**
  String get loginReadTermsNotification;

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

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

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

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

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

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

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

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

  /// No description provided for @serverInvalidHostOrPort.
  ///
  /// In en, this message translates to:
  /// **'Enter a valid host and port (1–65535)'**
  String get serverInvalidHostOrPort;

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

  /// No description provided for @serverReconnectFailed.
  ///
  /// In en, this message translates to:
  /// **'Could not connect to the server'**
  String get serverReconnectFailed;

  /// No description provided for @loginSignInWithQr.
  ///
  /// In en, this message translates to:
  /// **'Sign in with QR code'**
  String get loginSignInWithQr;

  /// No description provided for @loginSignInWithToken.
  ///
  /// In en, this message translates to:
  /// **'Sign in with token'**
  String get loginSignInWithToken;

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

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

  /// No description provided for @tokenLoginNote.
  ///
  /// In en, this message translates to:
  /// **'Token login only works with spoofing. Enter the data of the device the token belongs to, otherwise the account may be banned.'**
  String get tokenLoginNote;

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

  /// No description provided for @tokenLoginError.
  ///
  /// In en, this message translates to:
  /// **'Fill in the token, device name, OS version and Device ID'**
  String get tokenLoginError;

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

  /// No description provided for @loginSignInWithSessionFile.
  ///
  /// In en, this message translates to:
  /// **'Sign in with session file'**
  String get loginSignInWithSessionFile;

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

  /// No description provided for @languageNameRu.
  ///
  /// In en, this message translates to:
  /// **'Русский'**
  String get languageNameRu;

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

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

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

  /// No description provided for @codeConfirmationSmsSent.
  ///
  /// In en, this message translates to:
  /// **'We sent an SMS with a verification code to your phone number.'**
  String get codeConfirmationSmsSent;

  /// No description provided for @codeResendInSeconds.
  ///
  /// In en, this message translates to:
  /// **'Resend in {seconds} s.'**
  String codeResendInSeconds(int seconds);

  /// No description provided for @codeResendSms.
  ///
  /// In en, this message translates to:
  /// **'Resend code via SMS'**
  String get codeResendSms;

  /// No description provided for @codeError2faMissing.
  ///
  /// In en, this message translates to:
  /// **'Error: missing data for 2FA'**
  String get codeError2faMissing;

  /// No description provided for @codeConfirmation2faWarning.
  ///
  /// In en, this message translates to:
  /// **'MAX may require 2FA on your account to sign in. If you didn\'t receive the code, set up 2FA from a client where you\'re already signed in.'**
  String get codeConfirmation2faWarning;

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

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

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

  /// No description provided for @proxyTypeHttp.
  ///
  /// In en, this message translates to:
  /// **'HTTP(S)'**
  String get proxyTypeHttp;

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

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

  /// No description provided for @proxyUsernameLabel.
  ///
  /// In en, this message translates to:
  /// **'Username (optional)'**
  String get proxyUsernameLabel;

  /// No description provided for @proxyPasswordLabel.
  ///
  /// In en, this message translates to:
  /// **'Password (optional)'**
  String get proxyPasswordLabel;

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

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

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

  /// No description provided for @proxyInvalidHostOrPort.
  ///
  /// In en, this message translates to:
  /// **'Enter a valid proxy host and port (1–65535)'**
  String get proxyInvalidHostOrPort;

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

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

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

  /// No description provided for @spoofEnableSubtitleOff.
  ///
  /// In en, this message translates to:
  /// **'Disabled — using the real device'**
  String get spoofEnableSubtitleOff;

  /// No description provided for @spoofInfoHint.
  ///
  /// In en, this message translates to:
  /// **'Tap \"Generate\":\n• Short tap: random preset.\n• Long press: real device data.'**
  String get spoofInfoHint;

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

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

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

  /// No description provided for @spoofMethodPartialDescription.
  ///
  /// In en, this message translates to:
  /// **'Recommended method. Random data is used, but your real timezone and locale are kept for plausibility.'**
  String get spoofMethodPartialDescription;

  /// No description provided for @spoofMethodFullDescription.
  ///
  /// In en, this message translates to:
  /// **'All data including timezone and locale is generated randomly. Use this method at your own risk!'**
  String get spoofMethodFullDescription;

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

  /// No description provided for @spoofDeviceTypeDescription.
  ///
  /// In en, this message translates to:
  /// **'Controls which devices are generated: Android or iOS'**
  String get spoofDeviceTypeDescription;

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

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

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

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

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

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

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

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

  /// No description provided for @spoofFieldDeviceLocale.
  ///
  /// In en, this message translates to:
  /// **'Device locale (derived)'**
  String get spoofFieldDeviceLocale;

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

  /// No description provided for @spoofIdentifiersDescription.
  ///
  /// In en, this message translates to:
  /// **'mt_instanceid and clientSessionId are generated automatically on every app launch. Only the Device ID can be changed.'**
  String get spoofIdentifiersDescription;

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

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

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

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

  /// No description provided for @spoofRegenerateIdTooltip.
  ///
  /// In en, this message translates to:
  /// **'Generate a new ID'**
  String get spoofRegenerateIdTooltip;

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

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

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

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

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

  /// No description provided for @spoofDialogUnsureTitle.
  ///
  /// In en, this message translates to:
  /// **'Are you sure?'**
  String get spoofDialogUnsureTitle;

  /// No description provided for @spoofDialogUnsureContent.
  ///
  /// In en, this message translates to:
  /// **'The app may become unstable due to API incompatibility'**
  String get spoofDialogUnsureContent;

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

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

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

  /// No description provided for @spoofDialogApplyContent.
  ///
  /// In en, this message translates to:
  /// **'Need to reconnect the app, ok?'**
  String get spoofDialogApplyContent;

  /// No description provided for @spoofDialogApplyWarning.
  ///
  /// In en, this message translates to:
  /// **'Your spoof will change immediately. But due to MAX specifics, you must re-login to the account for it to become visible'**
  String get spoofDialogApplyWarning;

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

  /// No description provided for @spoofDialogReloginContent.
  ///
  /// In en, this message translates to:
  /// **'Due to MAX specifics, your spoof is changed, but changes will be visible only after re-login.'**
  String get spoofDialogReloginContent;

  /// No description provided for @spoofDialogReloginWarning.
  ///
  /// In en, this message translates to:
  /// **'Re-login now?'**
  String get spoofDialogReloginWarning;

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

  /// No description provided for @spoofDialogReloginConfirm.
  ///
  /// In en, this message translates to:
  /// **'Re-login now'**
  String get spoofDialogReloginConfirm;

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

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

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

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

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

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

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

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

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

  /// No description provided for @infoFileUploadTypes.
  ///
  /// In en, this message translates to:
  /// **'file-upload-unsupported-types'**
  String get infoFileUploadTypes;

  /// No description provided for @infoWhiteListLinks.
  ///
  /// In en, this message translates to:
  /// **'white-list-links'**
  String get infoWhiteListLinks;

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

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

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

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

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

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

  /// No description provided for @infoAccountRemovalEnabled.
  ///
  /// In en, this message translates to:
  /// **'account-removal-enabled'**
  String get infoAccountRemovalEnabled;

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

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

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

  /// No description provided for @infoMaxMsgLength.
  ///
  /// In en, this message translates to:
  /// **'max-msg-length'**
  String get infoMaxMsgLength;

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

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

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

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

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

  /// No description provided for @infoVideoMsgEnabled.
  ///
  /// In en, this message translates to:
  /// **'video-msg-enabled'**
  String get infoVideoMsgEnabled;

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

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

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

  /// No description provided for @infoUnsafeFilesAlert.
  ///
  /// In en, this message translates to:
  /// **'unsafe-files-alert'**
  String get infoUnsafeFilesAlert;

  /// No description provided for @infoAccountNicknameEnabled.
  ///
  /// In en, this message translates to:
  /// **'account-nickname-enabled'**
  String get infoAccountNicknameEnabled;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  /// No description provided for @registrationSubtitle.
  ///
  /// In en, this message translates to:
  /// **'Add your name and pick an avatar'**
  String get registrationSubtitle;

  /// No description provided for @registrationChooseAvatar.
  ///
  /// In en, this message translates to:
  /// **'Choose an avatar'**
  String get registrationChooseAvatar;
}

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', 'ru'].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 'ru':
      return AppLocalizationsRu();
  }

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