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_ar.dart';
import 'app_localizations_ca.dart';
import 'app_localizations_de.dart';
import 'app_localizations_en.dart';
import 'app_localizations_es.dart';
import 'app_localizations_eu.dart';
import 'app_localizations_fr.dart';
import 'app_localizations_hi.dart';
import 'app_localizations_it.dart';
import 'app_localizations_ja.dart';
import 'app_localizations_ko.dart';
import 'app_localizations_nl.dart';
import 'app_localizations_pl.dart';
import 'app_localizations_pt.dart';
import 'app_localizations_ru.dart';
import 'app_localizations_tr.dart';
import 'app_localizations_zh.dart';

// ignore_for_file: type=lint

/// Callers can lookup localized strings with an instance of AppLocalizations
/// returned by `AppLocalizations.of(context)`.
///
/// Applications need to include `AppLocalizations.delegate()` in their app's
/// `localizationDelegates` list, and the locales they support in the app's
/// `supportedLocales` list. For example:
///
/// ```dart
/// import '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('ar'),
    Locale('ca'),
    Locale('de'),
    Locale('en'),
    Locale('es'),
    Locale('eu'),
    Locale('fr'),
    Locale('hi'),
    Locale('it'),
    Locale('ja'),
    Locale('ko'),
    Locale('nl'),
    Locale('pl'),
    Locale('pt'),
    Locale('ru'),
    Locale('tr'),
    Locale('zh'),
    Locale('zh', 'TW'),
  ];

  /// No description provided for @appTitle.
  ///
  /// In es, this message translates to:
  /// **'Farolero'**
  String get appTitle;

  /// No description provided for @subtitle.
  ///
  /// In es, this message translates to:
  /// **'Juego de deducción social'**
  String get subtitle;

  /// No description provided for @loadingWords.
  ///
  /// In es, this message translates to:
  /// **'Cargando palabras...'**
  String get loadingWords;

  /// No description provided for @playersRange.
  ///
  /// In es, this message translates to:
  /// **'3-20 jugadores  •  Sin internet'**
  String get playersRange;

  /// No description provided for @createGame.
  ///
  /// In es, this message translates to:
  /// **'Crear partida'**
  String get createGame;

  /// No description provided for @joinGame.
  ///
  /// In es, this message translates to:
  /// **'Unirse a partida'**
  String get joinGame;

  /// No description provided for @howToPlay.
  ///
  /// In es, this message translates to:
  /// **'Cómo jugar'**
  String get howToPlay;

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

  /// No description provided for @gameMode.
  ///
  /// In es, this message translates to:
  /// **'Modo de juego'**
  String get gameMode;

  /// No description provided for @singleDevice.
  ///
  /// In es, this message translates to:
  /// **'Un solo móvil'**
  String get singleDevice;

  /// No description provided for @multiDevice.
  ///
  /// In es, this message translates to:
  /// **'Multimóvil'**
  String get multiDevice;

  /// No description provided for @category.
  ///
  /// In es, this message translates to:
  /// **'Categoría'**
  String get category;

  /// No description provided for @categoryAll.
  ///
  /// In es, this message translates to:
  /// **'Todas'**
  String get categoryAll;

  /// No description provided for @categoryAnimals.
  ///
  /// In es, this message translates to:
  /// **'Animales'**
  String get categoryAnimals;

  /// No description provided for @categoryFood.
  ///
  /// In es, this message translates to:
  /// **'Comida'**
  String get categoryFood;

  /// No description provided for @categoryCountries.
  ///
  /// In es, this message translates to:
  /// **'Países'**
  String get categoryCountries;

  /// No description provided for @categorySports.
  ///
  /// In es, this message translates to:
  /// **'Deportes'**
  String get categorySports;

  /// No description provided for @categoryProfessions.
  ///
  /// In es, this message translates to:
  /// **'Profesiones'**
  String get categoryProfessions;

  /// No description provided for @categoryObjects.
  ///
  /// In es, this message translates to:
  /// **'Objetos'**
  String get categoryObjects;

  /// No description provided for @categoryPlaces.
  ///
  /// In es, this message translates to:
  /// **'Lugares'**
  String get categoryPlaces;

  /// No description provided for @categoryMovies.
  ///
  /// In es, this message translates to:
  /// **'Películas'**
  String get categoryMovies;

  /// No description provided for @categoryMusic.
  ///
  /// In es, this message translates to:
  /// **'Música'**
  String get categoryMusic;

  /// No description provided for @categoryTechnology.
  ///
  /// In es, this message translates to:
  /// **'Tecnología'**
  String get categoryTechnology;

  /// No description provided for @playersCount.
  ///
  /// In es, this message translates to:
  /// **'Jugadores ({count})'**
  String playersCount(int count);

  /// No description provided for @playersRangeHint.
  ///
  /// In es, this message translates to:
  /// **'3-20'**
  String get playersRangeHint;

  /// No description provided for @playerNameHint.
  ///
  /// In es, this message translates to:
  /// **'Nombre del jugador'**
  String get playerNameHint;

  /// No description provided for @playerAlreadyExists.
  ///
  /// In es, this message translates to:
  /// **'Ya existe un jugador con ese nombre'**
  String get playerAlreadyExists;

  /// No description provided for @maxPlayersReached.
  ///
  /// In es, this message translates to:
  /// **'Máximo 20 jugadores'**
  String get maxPlayersReached;

  /// No description provided for @minPlayersRequired.
  ///
  /// In es, this message translates to:
  /// **'Se necesitan al menos 3 jugadores'**
  String get minPlayersRequired;

  /// No description provided for @configuration.
  ///
  /// In es, this message translates to:
  /// **'Configuración'**
  String get configuration;

  /// No description provided for @impostors.
  ///
  /// In es, this message translates to:
  /// **'🎭 Impostores'**
  String get impostors;

  /// No description provided for @impostorClue.
  ///
  /// In es, this message translates to:
  /// **'🔍 Pista para impostor'**
  String get impostorClue;

  /// No description provided for @impostorClueDescription.
  ///
  /// In es, this message translates to:
  /// **'El impostor conoce la categoría'**
  String get impostorClueDescription;

  /// No description provided for @debate.
  ///
  /// In es, this message translates to:
  /// **'🗣️ Debate'**
  String get debate;

  /// No description provided for @debateTime.
  ///
  /// In es, this message translates to:
  /// **'⏱️ Tiempo de debate'**
  String get debateTime;

  /// No description provided for @noLimit.
  ///
  /// In es, this message translates to:
  /// **'Sin límite'**
  String get noLimit;

  /// No description provided for @oneMin.
  ///
  /// In es, this message translates to:
  /// **'1 min'**
  String get oneMin;

  /// No description provided for @twoMin.
  ///
  /// In es, this message translates to:
  /// **'2 min'**
  String get twoMin;

  /// No description provided for @threeMin.
  ///
  /// In es, this message translates to:
  /// **'3 min'**
  String get threeMin;

  /// No description provided for @fiveMin.
  ///
  /// In es, this message translates to:
  /// **'5 min'**
  String get fiveMin;

  /// No description provided for @startGame.
  ///
  /// In es, this message translates to:
  /// **'Iniciar partida'**
  String get startGame;

  /// No description provided for @seeYourWord.
  ///
  /// In es, this message translates to:
  /// **'Ver tu palabra'**
  String get seeYourWord;

  /// No description provided for @eachPlayerMustSee.
  ///
  /// In es, this message translates to:
  /// **'Cada jugador debe ver su palabra en secreto'**
  String get eachPlayerMustSee;

  /// No description provided for @roundNumber.
  ///
  /// In es, this message translates to:
  /// **'Ronda {round}'**
  String roundNumber(int round);

  /// No description provided for @alreadySeen.
  ///
  /// In es, this message translates to:
  /// **'Ya ha visto su palabra'**
  String get alreadySeen;

  /// No description provided for @tapToSee.
  ///
  /// In es, this message translates to:
  /// **'Pulsa para ver'**
  String get tapToSee;

  /// No description provided for @allSeenStartDebate.
  ///
  /// In es, this message translates to:
  /// **'Todos han visto → Iniciar debate'**
  String get allSeenStartDebate;

  /// No description provided for @playersRemaining.
  ///
  /// In es, this message translates to:
  /// **'Faltan {count} jugadores'**
  String playersRemaining(int count);

  /// No description provided for @youAreImpostor.
  ///
  /// In es, this message translates to:
  /// **'¡Eres el impostor!'**
  String get youAreImpostor;

  /// No description provided for @yourWordIs.
  ///
  /// In es, this message translates to:
  /// **'Tu palabra es:'**
  String get yourWordIs;

  /// No description provided for @clueCategory.
  ///
  /// In es, this message translates to:
  /// **'Pista: {category}'**
  String clueCategory(String category);

  /// No description provided for @holdToSeeWord.
  ///
  /// In es, this message translates to:
  /// **'Mantén pulsado para ver tu palabra'**
  String get holdToSeeWord;

  /// No description provided for @makeSureNoOneLooks.
  ///
  /// In es, this message translates to:
  /// **'Asegúrate de que nadie más mira'**
  String get makeSureNoOneLooks;

  /// No description provided for @showingWord.
  ///
  /// In es, this message translates to:
  /// **'👁️ Mostrando...'**
  String get showingWord;

  /// No description provided for @holdToSee.
  ///
  /// In es, this message translates to:
  /// **'👆 Mantén pulsado para ver'**
  String get holdToSee;

  /// No description provided for @seenMyWord.
  ///
  /// In es, this message translates to:
  /// **'He visto mi palabra'**
  String get seenMyWord;

  /// No description provided for @debateRound.
  ///
  /// In es, this message translates to:
  /// **'Debate - Ronda {round}'**
  String debateRound(int round);

  /// No description provided for @timeUp.
  ///
  /// In es, this message translates to:
  /// **'⏰ ¡Tiempo agotado!'**
  String get timeUp;

  /// No description provided for @timeRemaining.
  ///
  /// In es, this message translates to:
  /// **'⏱️ Tiempo restante'**
  String get timeRemaining;

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

  /// No description provided for @activePlayersInfo.
  ///
  /// In es, this message translates to:
  /// **'{active} activos • {impostors} impostor(es) ocultos'**
  String activePlayersInfo(int active, int impostors);

  /// No description provided for @eliminated.
  ///
  /// In es, this message translates to:
  /// **'Eliminado'**
  String get eliminated;

  /// No description provided for @notes.
  ///
  /// In es, this message translates to:
  /// **'Notas'**
  String get notes;

  /// No description provided for @goToVoting.
  ///
  /// In es, this message translates to:
  /// **'Ir a votación'**
  String get goToVoting;

  /// No description provided for @voting.
  ///
  /// In es, this message translates to:
  /// **'🗳️ Votación'**
  String get voting;

  /// No description provided for @turnToVote.
  ///
  /// In es, this message translates to:
  /// **'Turno de votar:'**
  String get turnToVote;

  /// No description provided for @votesProgress.
  ///
  /// In es, this message translates to:
  /// **'Votos: {current}/{total}'**
  String votesProgress(int current, int total);

  /// No description provided for @whoIsImpostor.
  ///
  /// In es, this message translates to:
  /// **'¿Quién crees que es el impostor?'**
  String get whoIsImpostor;

  /// No description provided for @confirmVote.
  ///
  /// In es, this message translates to:
  /// **'Confirmar voto'**
  String get confirmVote;

  /// No description provided for @votingComplete.
  ///
  /// In es, this message translates to:
  /// **'🗳️ Votación completa'**
  String get votingComplete;

  /// No description provided for @allVoted.
  ///
  /// In es, this message translates to:
  /// **'¡Todos han votado!'**
  String get allVoted;

  /// No description provided for @tapToReveal.
  ///
  /// In es, this message translates to:
  /// **'Pulsa para revelar el resultado'**
  String get tapToReveal;

  /// No description provided for @revealResult.
  ///
  /// In es, this message translates to:
  /// **'Revelar resultado'**
  String get revealResult;

  /// No description provided for @result.
  ///
  /// In es, this message translates to:
  /// **'Resultado'**
  String get result;

  /// No description provided for @revealing.
  ///
  /// In es, this message translates to:
  /// **'Revelando...'**
  String get revealing;

  /// No description provided for @wasImpostor.
  ///
  /// In es, this message translates to:
  /// **'¡Era IMPOSTOR! 🎉'**
  String get wasImpostor;

  /// No description provided for @wasInnocent.
  ///
  /// In es, this message translates to:
  /// **'Era INOCENTE 😱'**
  String get wasInnocent;

  /// No description provided for @votesThisRound.
  ///
  /// In es, this message translates to:
  /// **'Votos de esta ronda'**
  String get votesThisRound;

  /// No description provided for @seeEndResult.
  ///
  /// In es, this message translates to:
  /// **'Ver resultado final'**
  String get seeEndResult;

  /// No description provided for @impostorGuessWord.
  ///
  /// In es, this message translates to:
  /// **'¿El impostor adivina la palabra?'**
  String get impostorGuessWord;

  /// No description provided for @nextRound.
  ///
  /// In es, this message translates to:
  /// **'Siguiente ronda'**
  String get nextRound;

  /// No description provided for @impostorGuessTitle.
  ///
  /// In es, this message translates to:
  /// **'🎯 Adivinanza del impostor'**
  String get impostorGuessTitle;

  /// No description provided for @impostorCanGuess.
  ///
  /// In es, this message translates to:
  /// **'El impostor eliminado puede\nintentar adivinar la palabra'**
  String get impostorCanGuess;

  /// No description provided for @ifCorrectImpostorsWin.
  ///
  /// In es, this message translates to:
  /// **'Si acierta, ¡los impostores ganan!'**
  String get ifCorrectImpostorsWin;

  /// No description provided for @guessWordHint.
  ///
  /// In es, this message translates to:
  /// **'¿Cuál crees que es la palabra?'**
  String get guessWordHint;

  /// No description provided for @dontGuess.
  ///
  /// In es, this message translates to:
  /// **'No intentar'**
  String get dontGuess;

  /// No description provided for @guess.
  ///
  /// In es, this message translates to:
  /// **'Adivinar'**
  String get guess;

  /// No description provided for @correctGuess.
  ///
  /// In es, this message translates to:
  /// **'¡Ha acertado!'**
  String get correctGuess;

  /// No description provided for @theWordWas.
  ///
  /// In es, this message translates to:
  /// **'La palabra era: {word}'**
  String theWordWas(String word);

  /// No description provided for @impostorsWin.
  ///
  /// In es, this message translates to:
  /// **'¡Los impostores ganan!'**
  String get impostorsWin;

  /// No description provided for @wrongGuess.
  ///
  /// In es, this message translates to:
  /// **'¡No ha acertado!'**
  String get wrongGuess;

  /// No description provided for @gameContinues.
  ///
  /// In es, this message translates to:
  /// **'La partida continúa...'**
  String get gameContinues;

  /// No description provided for @gameOver.
  ///
  /// In es, this message translates to:
  /// **'Fin de partida'**
  String get gameOver;

  /// No description provided for @playersWin.
  ///
  /// In es, this message translates to:
  /// **'¡Los jugadores ganan!'**
  String get playersWin;

  /// No description provided for @theSecretWordWas.
  ///
  /// In es, this message translates to:
  /// **'🔍 La palabra era:'**
  String get theSecretWordWas;

  /// No description provided for @categoryLabel.
  ///
  /// In es, this message translates to:
  /// **'Categoría: {category}'**
  String categoryLabel(String category);

  /// No description provided for @theImpostorWas.
  ///
  /// In es, this message translates to:
  /// **'🎭 El impostor era:'**
  String get theImpostorWas;

  /// No description provided for @theImpostorsWere.
  ///
  /// In es, this message translates to:
  /// **'🎭 Los impostores eran:'**
  String get theImpostorsWere;

  /// No description provided for @votingHistory.
  ///
  /// In es, this message translates to:
  /// **'📊 Historial de votaciones'**
  String get votingHistory;

  /// No description provided for @roundElimination.
  ///
  /// In es, this message translates to:
  /// **'Ronda {round}: {name}'**
  String roundElimination(int round, String name);

  /// No description provided for @rematch.
  ///
  /// In es, this message translates to:
  /// **'Revancha'**
  String get rematch;

  /// No description provided for @mainMenu.
  ///
  /// In es, this message translates to:
  /// **'Menú principal'**
  String get mainMenu;

  /// No description provided for @notesTitle.
  ///
  /// In es, this message translates to:
  /// **'📝 Notas'**
  String get notesTitle;

  /// No description provided for @notesSaved.
  ///
  /// In es, this message translates to:
  /// **'Notas guardadas'**
  String get notesSaved;

  /// No description provided for @whoAreYou.
  ///
  /// In es, this message translates to:
  /// **'¿Quién eres?'**
  String get whoAreYou;

  /// No description provided for @selectYourName.
  ///
  /// In es, this message translates to:
  /// **'Selecciona tu nombre para ver tus notas privadas'**
  String get selectYourName;

  /// No description provided for @notesOf.
  ///
  /// In es, this message translates to:
  /// **'Notas de {name}'**
  String notesOf(String name);

  /// No description provided for @notesAboutPlayers.
  ///
  /// In es, this message translates to:
  /// **'Apuntes sobre cada jugador'**
  String get notesAboutPlayers;

  /// No description provided for @playerNoteHint.
  ///
  /// In es, this message translates to:
  /// **'¿Qué ha dicho? ¿Sospechoso?'**
  String get playerNoteHint;

  /// No description provided for @freeNote.
  ///
  /// In es, this message translates to:
  /// **'Nota libre'**
  String get freeNote;

  /// No description provided for @freeNoteHint.
  ///
  /// In es, this message translates to:
  /// **'Apuntes personales...'**
  String get freeNoteHint;

  /// No description provided for @rulesTitle.
  ///
  /// In es, this message translates to:
  /// **'📖 Cómo jugar'**
  String get rulesTitle;

  /// No description provided for @rulesWhatIsTitle.
  ///
  /// In es, this message translates to:
  /// **'🎭 ¿Qué es Farolero?'**
  String get rulesWhatIsTitle;

  /// No description provided for @rulesWhatIsBody.
  ///
  /// In es, this message translates to:
  /// **'Un juego de deducción social para 3-20 jugadores. Todos reciben una palabra secreta... ¡excepto el impostor! Tu misión: descubrir quién finge.'**
  String get rulesWhatIsBody;

  /// No description provided for @rulesHowToPlayTitle.
  ///
  /// In es, this message translates to:
  /// **'🔍 ¿Cómo se juega?'**
  String get rulesHowToPlayTitle;

  /// No description provided for @rulesHowToPlayBody.
  ///
  /// In es, this message translates to:
  /// **'1. Se reparten los roles: todos reciben la misma palabra, excepto el/los impostores.\n\n2. Debate: por turnos, cada jugador describe la palabra SIN decirla directamente. El impostor debe fingir que la conoce.\n\n3. Votación: al terminar el debate, todos votan a quién creen que es el impostor.\n\n4. Eliminación: el más votado queda eliminado y se revela si era impostor o no.\n\n5. Si era impostor, puede intentar adivinar la palabra. Si acierta, ¡los impostores ganan!'**
  String get rulesHowToPlayBody;

  /// No description provided for @rulesWhoWinsTitle.
  ///
  /// In es, this message translates to:
  /// **'🏆 ¿Quién gana?'**
  String get rulesWhoWinsTitle;

  /// No description provided for @rulesWhoWinsBody.
  ///
  /// In es, this message translates to:
  /// **'• Jugadores: ganan si eliminan a TODOS los impostores.\n• Impostores: ganan si no son descubiertos hasta que queden igual o menos jugadores normales que impostores, o si adivinan la palabra al ser eliminados.'**
  String get rulesWhoWinsBody;

  /// No description provided for @rulesTipsPlayersTitle.
  ///
  /// In es, this message translates to:
  /// **'💡 Consejos para jugadores'**
  String get rulesTipsPlayersTitle;

  /// No description provided for @rulesTipsPlayersBody.
  ///
  /// In es, this message translates to:
  /// **'• Da pistas sutiles que demuestren que conoces la palabra, pero no tan obvias que el impostor las use.\n• Observa quién da respuestas vagas o genéricas.\n• Usa las notas para apuntar lo que dice cada uno.\n• No digas la palabra directamente, ¡eso ayuda al impostor!'**
  String get rulesTipsPlayersBody;

  /// No description provided for @rulesTipsImpostorTitle.
  ///
  /// In es, this message translates to:
  /// **'🎭 Consejos para el impostor'**
  String get rulesTipsImpostorTitle;

  /// No description provided for @rulesTipsImpostorBody.
  ///
  /// In es, this message translates to:
  /// **'• Escucha atentamente las pistas de los demás.\n• Intenta deducir la palabra para dar pistas creíbles.\n• No seas el primero en hablar si no estás seguro.\n• Si te dan la categoría como pista, úsala a tu favor.\n• Acusa a otros para desviar la atención.'**
  String get rulesTipsImpostorBody;

  /// No description provided for @rulesModesTitle.
  ///
  /// In es, this message translates to:
  /// **'📱 Modos de juego'**
  String get rulesModesTitle;

  /// No description provided for @rulesModesBody.
  ///
  /// In es, this message translates to:
  /// **'• Un solo móvil: todos comparten el dispositivo. Cada jugador ve su palabra pulsando y manteniendo un botón.\n\n• Multimóvil: cada jugador usa su propio dispositivo. Se conectan por Bluetooth/WiFi Direct sin necesidad de internet.'**
  String get rulesModesBody;

  /// No description provided for @rulesExampleTitle.
  ///
  /// In es, this message translates to:
  /// **'✏️ Ejemplo de partida'**
  String get rulesExampleTitle;

  /// No description provided for @rulesExampleBody.
  ///
  /// In es, this message translates to:
  /// **'Palabra secreta: \"Pizza\"\n\n• Ana: \"Se come caliente\" ✓\n• Carlos: \"Viene en una caja\" ✓\n• Eva (impostor): \"Es muy popular\" 🤔\n• David: \"Tiene queso\" ✓\n\nEva dio una respuesta muy genérica... ¡Sospechosa!'**
  String get rulesExampleBody;

  /// No description provided for @joinGameTitle.
  ///
  /// In es, this message translates to:
  /// **'Unirse a partida'**
  String get joinGameTitle;

  /// No description provided for @multiDeviceMode.
  ///
  /// In es, this message translates to:
  /// **'Modo multimóvil'**
  String get multiDeviceMode;

  /// No description provided for @scanQrDescription.
  ///
  /// In es, this message translates to:
  /// **'Escanea el código QR que muestra el host para conectarte a la partida vía Bluetooth/WiFi Direct.'**
  String get scanQrDescription;

  /// No description provided for @comingSoon.
  ///
  /// In es, this message translates to:
  /// **'Próximamente'**
  String get comingSoon;

  /// No description provided for @nearbyNotAvailable.
  ///
  /// In es, this message translates to:
  /// **'La conexión multimóvil con Nearby Connections requiere dispositivos Android físicos.\n\nPor ahora, usa el modo \"Un solo móvil\" para jugar en un dispositivo compartido.'**
  String get nearbyNotAvailable;

  /// No description provided for @back.
  ///
  /// In es, this message translates to:
  /// **'Volver'**
  String get back;

  /// No description provided for @yes.
  ///
  /// In es, this message translates to:
  /// **'Sí'**
  String get yes;

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

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

  /// No description provided for @accept.
  ///
  /// In es, this message translates to:
  /// **'Aceptar'**
  String get accept;

  /// No description provided for @next.
  ///
  /// In es, this message translates to:
  /// **'Siguiente'**
  String get next;

  /// No description provided for @settingsTitle.
  ///
  /// In es, this message translates to:
  /// **'Ajustes'**
  String get settingsTitle;

  /// No description provided for @language.
  ///
  /// In es, this message translates to:
  /// **'Idioma'**
  String get language;

  /// No description provided for @soundVolume.
  ///
  /// In es, this message translates to:
  /// **'Volumen de efectos'**
  String get soundVolume;

  /// No description provided for @vibration.
  ///
  /// In es, this message translates to:
  /// **'Vibración'**
  String get vibration;

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

  /// No description provided for @version.
  ///
  /// In es, this message translates to:
  /// **'Versión'**
  String get version;

  /// No description provided for @developer.
  ///
  /// In es, this message translates to:
  /// **'Desarrollador'**
  String get developer;

  /// No description provided for @licenses.
  ///
  /// In es, this message translates to:
  /// **'Licencias'**
  String get licenses;

  /// No description provided for @scanToJoin.
  ///
  /// In es, this message translates to:
  /// **'Escanea el QR para unirte'**
  String get scanToJoin;

  /// No description provided for @connectedPlayers.
  ///
  /// In es, this message translates to:
  /// **'Jugadores conectados'**
  String get connectedPlayers;

  /// No description provided for @hostGame.
  ///
  /// In es, this message translates to:
  /// **'Gestor de partida'**
  String get hostGame;

  /// No description provided for @waitingPlayersSeeWord.
  ///
  /// In es, this message translates to:
  /// **'Esperando que todos vean su palabra...'**
  String get waitingPlayersSeeWord;

  /// No description provided for @activePlayers.
  ///
  /// In es, this message translates to:
  /// **'Jugadores activos'**
  String get activePlayers;

  /// No description provided for @playersVoted.
  ///
  /// In es, this message translates to:
  /// **'Han votado'**
  String get playersVoted;

  /// No description provided for @waitingVoting.
  ///
  /// In es, this message translates to:
  /// **'Esperando que voten...'**
  String get waitingVoting;

  /// No description provided for @waitingForPlayers.
  ///
  /// In es, this message translates to:
  /// **'Esperando jugadores...'**
  String get waitingForPlayers;

  /// No description provided for @needMorePlayers.
  ///
  /// In es, this message translates to:
  /// **'Faltan {count} jugadores más'**
  String needMorePlayers(int count);

  /// No description provided for @starting.
  ///
  /// In es, this message translates to:
  /// **'Iniciando...'**
  String get starting;

  /// No description provided for @enterNameAndScan.
  ///
  /// In es, this message translates to:
  /// **'Escribe tu nombre y escanea el QR del host'**
  String get enterNameAndScan;

  /// No description provided for @yourName.
  ///
  /// In es, this message translates to:
  /// **'Tu nombre'**
  String get yourName;

  /// No description provided for @nameRequired.
  ///
  /// In es, this message translates to:
  /// **'Escribe tu nombre'**
  String get nameRequired;

  /// No description provided for @connectingTo.
  ///
  /// In es, this message translates to:
  /// **'Conectando a'**
  String get connectingTo;

  /// No description provided for @scanQR.
  ///
  /// In es, this message translates to:
  /// **'Escanear QR'**
  String get scanQR;

  /// No description provided for @scanHostQR.
  ///
  /// In es, this message translates to:
  /// **'Apunta al QR del host'**
  String get scanHostQR;

  /// No description provided for @connectedWaiting.
  ///
  /// In es, this message translates to:
  /// **'¡Conectado!'**
  String get connectedWaiting;

  /// No description provided for @waitingForHost.
  ///
  /// In es, this message translates to:
  /// **'Esperando a que el host inicie la partida...'**
  String get waitingForHost;

  /// No description provided for @enterNameToSearch.
  ///
  /// In es, this message translates to:
  /// **'Escribe tu nombre para buscar partidas cercanas'**
  String get enterNameToSearch;

  /// No description provided for @searchGames.
  ///
  /// In es, this message translates to:
  /// **'Buscar partidas'**
  String get searchGames;

  /// No description provided for @searchingGames.
  ///
  /// In es, this message translates to:
  /// **'Buscando partidas cercanas...'**
  String get searchingGames;

  /// No description provided for @noGamesFound.
  ///
  /// In es, this message translates to:
  /// **'No se encontraron partidas'**
  String get noGamesFound;

  /// No description provided for @noGamesFoundHint.
  ///
  /// In es, this message translates to:
  /// **'Asegúrate de que el host tiene la sala abierta y estáis cerca'**
  String get noGamesFoundHint;

  /// No description provided for @orScanQR.
  ///
  /// In es, this message translates to:
  /// **'¿No aparece? Escanea el QR del host'**
  String get orScanQR;

  /// No description provided for @iveSeenIt.
  ///
  /// In es, this message translates to:
  /// **'Ya la he visto'**
  String get iveSeenIt;

  /// No description provided for @clueIs.
  ///
  /// In es, this message translates to:
  /// **'La pista es: {category}'**
  String clueIs(String category);

  /// No description provided for @debatePhaseActive.
  ///
  /// In es, this message translates to:
  /// **'Fase de debate activa'**
  String get debatePhaseActive;

  /// No description provided for @debateInstructions.
  ///
  /// In es, this message translates to:
  /// **'Hablad entre vosotros y decid quién creéis que es el impostor. Cuando estéis listos, solicitad la votación.'**
  String get debateInstructions;

  /// No description provided for @solicitarVotacion.
  ///
  /// In es, this message translates to:
  /// **'Solicitar votación'**
  String get solicitarVotacion;

  /// No description provided for @votacionSolicitada.
  ///
  /// In es, this message translates to:
  /// **'Votación solicitada'**
  String get votacionSolicitada;

  /// No description provided for @whoDoYouThinkIsTheImpostor.
  ///
  /// In es, this message translates to:
  /// **'¿Quién es el impostor?'**
  String get whoDoYouThinkIsTheImpostor;

  /// No description provided for @selectOnePlayer.
  ///
  /// In es, this message translates to:
  /// **'Selecciona a un jugador para votar'**
  String get selectOnePlayer;

  /// No description provided for @votar.
  ///
  /// In es, this message translates to:
  /// **'Votar'**
  String get votar;

  /// No description provided for @selectYourProfile.
  ///
  /// In es, this message translates to:
  /// **'Tu perfil'**
  String get selectYourProfile;

  /// No description provided for @selectProfile.
  ///
  /// In es, this message translates to:
  /// **'Selecciona un perfil'**
  String get selectProfile;

  /// No description provided for @createNewUser.
  ///
  /// In es, this message translates to:
  /// **'Crear nuevo usuario'**
  String get createNewUser;

  /// No description provided for @userNameRequired.
  ///
  /// In es, this message translates to:
  /// **'El nombre no puede estar vacio'**
  String get userNameRequired;

  /// No description provided for @profileSelected.
  ///
  /// In es, this message translates to:
  /// **'Perfil seleccionado'**
  String get profileSelected;

  /// No description provided for @availableProfiles.
  ///
  /// In es, this message translates to:
  /// **'Perfiles disponibles'**
  String get availableProfiles;
}

class _AppLocalizationsDelegate
    extends LocalizationsDelegate<AppLocalizations> {
  const _AppLocalizationsDelegate();

  @override
  Future<AppLocalizations> load(Locale locale) {
    return SynchronousFuture<AppLocalizations>(lookupAppLocalizations(locale));
  }

  @override
  bool isSupported(Locale locale) => <String>[
    'ar',
    'ca',
    'de',
    'en',
    'es',
    'eu',
    'fr',
    'hi',
    'it',
    'ja',
    'ko',
    'nl',
    'pl',
    'pt',
    'ru',
    'tr',
    'zh',
  ].contains(locale.languageCode);

  @override
  bool shouldReload(_AppLocalizationsDelegate old) => false;
}

AppLocalizations lookupAppLocalizations(Locale locale) {
  // Lookup logic when language+country codes are specified.
  switch (locale.languageCode) {
    case 'zh':
      {
        switch (locale.countryCode) {
          case 'TW':
            return AppLocalizationsZhTw();
        }
        break;
      }
  }

  // Lookup logic when only language code is specified.
  switch (locale.languageCode) {
    case 'ar':
      return AppLocalizationsAr();
    case 'ca':
      return AppLocalizationsCa();
    case 'de':
      return AppLocalizationsDe();
    case 'en':
      return AppLocalizationsEn();
    case 'es':
      return AppLocalizationsEs();
    case 'eu':
      return AppLocalizationsEu();
    case 'fr':
      return AppLocalizationsFr();
    case 'hi':
      return AppLocalizationsHi();
    case 'it':
      return AppLocalizationsIt();
    case 'ja':
      return AppLocalizationsJa();
    case 'ko':
      return AppLocalizationsKo();
    case 'nl':
      return AppLocalizationsNl();
    case 'pl':
      return AppLocalizationsPl();
    case 'pt':
      return AppLocalizationsPt();
    case 'ru':
      return AppLocalizationsRu();
    case 'tr':
      return AppLocalizationsTr();
    case 'zh':
      return AppLocalizationsZh();
  }

  throw FlutterError(
    'AppLocalizations.delegate failed to load unsupported locale "$locale". This is likely '
    'an issue with the localizations generation tool. Please file an issue '
    'on GitHub with a reproducible sample app and the gen-l10n configuration '
    'that was used.',
  );
}
