- Random.secure() para selección de impostores (no predecible) - Random.secure() también en desempate de votación - Nueva PantallaGestorHost para coordinación multi-device - Navegación: host va a gestor tras iniciar, no a pantalla de palabra - PantallaPalabraCliente: cada jugador ve su palabra en su móvil - PantallaDebateCliente: debate con timer y botón solicitar votación - PantallaVotacionCliente: voto desde el móvil del cliente - PantallaUnirse: listener que reacciona a partidaInicio y cambia de fase - Protocolo: listo/voto/solicitoVotacion via Nearby hacia el host - Nuevas cadenas l10n ES
583 lines
14 KiB
Dart
583 lines
14 KiB
Dart
// ignore: unused_import
|
|
import 'package:intl/intl.dart' as intl;
|
|
import 'app_localizations.dart';
|
|
|
|
// ignore_for_file: type=lint
|
|
|
|
/// The translations for English (`en`).
|
|
class AppLocalizationsEn extends AppLocalizations {
|
|
AppLocalizationsEn([String locale = 'en']) : super(locale);
|
|
|
|
@override
|
|
String get appTitle => 'Farolero';
|
|
|
|
@override
|
|
String get subtitle => 'Social deduction game';
|
|
|
|
@override
|
|
String get loadingWords => 'Loading words...';
|
|
|
|
@override
|
|
String get playersRange => '3-20 players • No internet needed';
|
|
|
|
@override
|
|
String get createGame => 'Create game';
|
|
|
|
@override
|
|
String get joinGame => 'Join game';
|
|
|
|
@override
|
|
String get howToPlay => 'How to play';
|
|
|
|
@override
|
|
String get settings => 'Settings';
|
|
|
|
@override
|
|
String get gameMode => 'Game mode';
|
|
|
|
@override
|
|
String get singleDevice => 'Single device';
|
|
|
|
@override
|
|
String get multiDevice => 'Multi-device';
|
|
|
|
@override
|
|
String get category => 'Category';
|
|
|
|
@override
|
|
String get categoryAll => 'All';
|
|
|
|
@override
|
|
String get categoryAnimals => 'Animals';
|
|
|
|
@override
|
|
String get categoryFood => 'Food';
|
|
|
|
@override
|
|
String get categoryCountries => 'Countries';
|
|
|
|
@override
|
|
String get categorySports => 'Sports';
|
|
|
|
@override
|
|
String get categoryProfessions => 'Professions';
|
|
|
|
@override
|
|
String get categoryObjects => 'Objects';
|
|
|
|
@override
|
|
String get categoryPlaces => 'Places';
|
|
|
|
@override
|
|
String get categoryMovies => 'Movies';
|
|
|
|
@override
|
|
String get categoryMusic => 'Music';
|
|
|
|
@override
|
|
String get categoryTechnology => 'Technology';
|
|
|
|
@override
|
|
String playersCount(int count) {
|
|
return 'Players ($count)';
|
|
}
|
|
|
|
@override
|
|
String get playersRangeHint => '3-20';
|
|
|
|
@override
|
|
String get playerNameHint => 'Player name';
|
|
|
|
@override
|
|
String get playerAlreadyExists => 'A player with that name already exists';
|
|
|
|
@override
|
|
String get maxPlayersReached => 'Maximum 20 players';
|
|
|
|
@override
|
|
String get minPlayersRequired => 'At least 3 players are needed';
|
|
|
|
@override
|
|
String get configuration => 'Configuration';
|
|
|
|
@override
|
|
String get impostors => '🎭 Impostors';
|
|
|
|
@override
|
|
String get impostorClue => '🔍 Clue for impostor';
|
|
|
|
@override
|
|
String get impostorClueDescription => 'The impostor knows the category';
|
|
|
|
@override
|
|
String get debate => '🗣️ Debate';
|
|
|
|
@override
|
|
String get debateTime => '⏱️ Discussion time';
|
|
|
|
@override
|
|
String get noLimit => 'No limit';
|
|
|
|
@override
|
|
String get oneMin => '1 min';
|
|
|
|
@override
|
|
String get twoMin => '2 min';
|
|
|
|
@override
|
|
String get threeMin => '3 min';
|
|
|
|
@override
|
|
String get fiveMin => '5 min';
|
|
|
|
@override
|
|
String get startGame => 'Start game';
|
|
|
|
@override
|
|
String get seeYourWord => 'See your word';
|
|
|
|
@override
|
|
String get eachPlayerMustSee => 'Each player must see their word in secret';
|
|
|
|
@override
|
|
String roundNumber(int round) {
|
|
return 'Round $round';
|
|
}
|
|
|
|
@override
|
|
String get alreadySeen => 'Already seen their word';
|
|
|
|
@override
|
|
String get tapToSee => 'Tap to see';
|
|
|
|
@override
|
|
String get allSeenStartDebate => 'Everyone has seen → Start discussion';
|
|
|
|
@override
|
|
String playersRemaining(int count) {
|
|
return '$count players remaining';
|
|
}
|
|
|
|
@override
|
|
String get youAreImpostor => 'You are the impostor!';
|
|
|
|
@override
|
|
String get yourWordIs => 'Your word is:';
|
|
|
|
@override
|
|
String clueCategory(String category) {
|
|
return 'Clue: $category';
|
|
}
|
|
|
|
@override
|
|
String get holdToSeeWord => 'Hold to see your word';
|
|
|
|
@override
|
|
String get makeSureNoOneLooks => 'Make sure no one else is looking';
|
|
|
|
@override
|
|
String get showingWord => '👁️ Showing...';
|
|
|
|
@override
|
|
String get holdToSee => '👆 Hold to see';
|
|
|
|
@override
|
|
String get seenMyWord => 'I\'ve seen my word';
|
|
|
|
@override
|
|
String debateRound(int round) {
|
|
return 'Discussion - Round $round';
|
|
}
|
|
|
|
@override
|
|
String get timeUp => '⏰ Time\'s up!';
|
|
|
|
@override
|
|
String get timeRemaining => '⏱️ Time remaining';
|
|
|
|
@override
|
|
String get playersInDebate => 'Players in discussion';
|
|
|
|
@override
|
|
String activePlayersInfo(int active, int impostors) {
|
|
return '$active active • $impostors hidden impostor(s)';
|
|
}
|
|
|
|
@override
|
|
String get eliminated => 'Eliminated';
|
|
|
|
@override
|
|
String get notes => 'Notes';
|
|
|
|
@override
|
|
String get goToVoting => 'Go to voting';
|
|
|
|
@override
|
|
String get voting => '🗳️ Voting';
|
|
|
|
@override
|
|
String get turnToVote => 'Your turn to vote:';
|
|
|
|
@override
|
|
String votesProgress(int current, int total) {
|
|
return 'Votes: $current/$total';
|
|
}
|
|
|
|
@override
|
|
String get whoIsImpostor => 'Who do you think is the impostor?';
|
|
|
|
@override
|
|
String get confirmVote => 'Confirm vote';
|
|
|
|
@override
|
|
String get votingComplete => '🗳️ Voting complete';
|
|
|
|
@override
|
|
String get allVoted => 'Everyone has voted!';
|
|
|
|
@override
|
|
String get tapToReveal => 'Tap to reveal the result';
|
|
|
|
@override
|
|
String get revealResult => 'Reveal result';
|
|
|
|
@override
|
|
String get result => 'Result';
|
|
|
|
@override
|
|
String get revealing => 'Revealing...';
|
|
|
|
@override
|
|
String get wasImpostor => 'Was the IMPOSTOR! 🎉';
|
|
|
|
@override
|
|
String get wasInnocent => 'Was INNOCENT 😱';
|
|
|
|
@override
|
|
String get votesThisRound => 'Votes this round';
|
|
|
|
@override
|
|
String get seeEndResult => 'See final result';
|
|
|
|
@override
|
|
String get impostorGuessWord => 'Can the impostor guess the word?';
|
|
|
|
@override
|
|
String get nextRound => 'Next round';
|
|
|
|
@override
|
|
String get impostorGuessTitle => '🎯 Impostor\'s guess';
|
|
|
|
@override
|
|
String get impostorCanGuess =>
|
|
'The eliminated impostor can\ntry to guess the word';
|
|
|
|
@override
|
|
String get ifCorrectImpostorsWin => 'If correct, the impostors win!';
|
|
|
|
@override
|
|
String get guessWordHint => 'What do you think the word is?';
|
|
|
|
@override
|
|
String get dontGuess => 'Don\'t guess';
|
|
|
|
@override
|
|
String get guess => 'Guess';
|
|
|
|
@override
|
|
String get correctGuess => 'Correct guess!';
|
|
|
|
@override
|
|
String theWordWas(String word) {
|
|
return 'The word was: $word';
|
|
}
|
|
|
|
@override
|
|
String get impostorsWin => 'The impostors win!';
|
|
|
|
@override
|
|
String get wrongGuess => 'Wrong guess!';
|
|
|
|
@override
|
|
String get gameContinues => 'The game continues...';
|
|
|
|
@override
|
|
String get gameOver => 'Game over';
|
|
|
|
@override
|
|
String get playersWin => 'The players win!';
|
|
|
|
@override
|
|
String get theSecretWordWas => '🔍 The word was:';
|
|
|
|
@override
|
|
String categoryLabel(String category) {
|
|
return 'Category: $category';
|
|
}
|
|
|
|
@override
|
|
String get theImpostorWas => '🎭 The impostor was:';
|
|
|
|
@override
|
|
String get theImpostorsWere => '🎭 The impostors were:';
|
|
|
|
@override
|
|
String get votingHistory => '📊 Voting history';
|
|
|
|
@override
|
|
String roundElimination(int round, String name) {
|
|
return 'Round $round: $name';
|
|
}
|
|
|
|
@override
|
|
String get rematch => 'Rematch';
|
|
|
|
@override
|
|
String get mainMenu => 'Main menu';
|
|
|
|
@override
|
|
String get notesTitle => '📝 Notes';
|
|
|
|
@override
|
|
String get notesSaved => 'Notes saved';
|
|
|
|
@override
|
|
String get whoAreYou => 'Who are you?';
|
|
|
|
@override
|
|
String get selectYourName => 'Select your name to view your private notes';
|
|
|
|
@override
|
|
String notesOf(String name) {
|
|
return '$name\'s notes';
|
|
}
|
|
|
|
@override
|
|
String get notesAboutPlayers => 'Notes about each player';
|
|
|
|
@override
|
|
String get playerNoteHint => 'What did they say? Suspicious?';
|
|
|
|
@override
|
|
String get freeNote => 'Free note';
|
|
|
|
@override
|
|
String get freeNoteHint => 'Personal notes...';
|
|
|
|
@override
|
|
String get rulesTitle => '📖 How to play';
|
|
|
|
@override
|
|
String get rulesWhatIsTitle => '🎭 What is Farolero?';
|
|
|
|
@override
|
|
String get rulesWhatIsBody =>
|
|
'A social deduction game for 3-20 players. Everyone receives a secret word... except the impostor! Your mission: figure out who\'s faking it.';
|
|
|
|
@override
|
|
String get rulesHowToPlayTitle => '🔍 How do you play?';
|
|
|
|
@override
|
|
String get rulesHowToPlayBody =>
|
|
'1. Roles are dealt: everyone receives the same word, except the impostor(s).\n\n2. Discussion: taking turns, each player describes the word WITHOUT saying it directly. The impostor must pretend they know it.\n\n3. Voting: once the discussion ends, everyone votes on who they think the impostor is.\n\n4. Elimination: the player with the most votes is eliminated and it is revealed whether they were the impostor or not.\n\n5. If they were the impostor, they can try to guess the word. If they get it right, the impostors win!';
|
|
|
|
@override
|
|
String get rulesWhoWinsTitle => '🏆 Who wins?';
|
|
|
|
@override
|
|
String get rulesWhoWinsBody =>
|
|
'• Players: win by eliminating ALL impostors.\n• Impostors: win if they remain undiscovered until there are equal or fewer regular players than impostors, or if they guess the word when eliminated.';
|
|
|
|
@override
|
|
String get rulesTipsPlayersTitle => '💡 Tips for players';
|
|
|
|
@override
|
|
String get rulesTipsPlayersBody =>
|
|
'• Give subtle clues that prove you know the word, but not so obvious that the impostor can use them.\n• Watch for vague or generic answers.\n• Use the notes to jot down what everyone says.\n• Don\'t say the word directly — that helps the impostor!';
|
|
|
|
@override
|
|
String get rulesTipsImpostorTitle => '🎭 Tips for the impostor';
|
|
|
|
@override
|
|
String get rulesTipsImpostorBody =>
|
|
'• Listen carefully to the others\' clues.\n• Try to deduce the word so you can give believable clues.\n• Don\'t be the first to speak if you\'re unsure.\n• If you\'re given the category as a clue, use it to your advantage.\n• Accuse others to divert attention.';
|
|
|
|
@override
|
|
String get rulesModesTitle => '📱 Game modes';
|
|
|
|
@override
|
|
String get rulesModesBody =>
|
|
'• Single device: everyone shares the device. Each player sees their word by pressing and holding a button.\n\n• Multi-device: each player uses their own device. They connect via Bluetooth/WiFi Direct with no internet needed.';
|
|
|
|
@override
|
|
String get rulesExampleTitle => '✏️ Example round';
|
|
|
|
@override
|
|
String get rulesExampleBody =>
|
|
'Secret word: \"Pizza\"\n\n• Anna: \"You eat it hot\" ✓\n• Charles: \"It comes in a box\" ✓\n• Eve (impostor): \"It\'s very popular\" 🤔\n• David: \"It has cheese\" ✓\n\nEve gave a very generic answer... Suspicious!';
|
|
|
|
@override
|
|
String get joinGameTitle => 'Join game';
|
|
|
|
@override
|
|
String get multiDeviceMode => 'Multi-device mode';
|
|
|
|
@override
|
|
String get scanQrDescription =>
|
|
'Scan the QR code shown by the host to connect to the game via Bluetooth/WiFi Direct.';
|
|
|
|
@override
|
|
String get comingSoon => 'Coming soon';
|
|
|
|
@override
|
|
String get nearbyNotAvailable =>
|
|
'Multi-device connection with Nearby Connections requires physical Android devices.\n\nFor now, use the \"Single device\" mode to play on a shared device.';
|
|
|
|
@override
|
|
String get back => 'Back';
|
|
|
|
@override
|
|
String get yes => 'Yes';
|
|
|
|
@override
|
|
String get no => 'No';
|
|
|
|
@override
|
|
String get cancel => 'Cancel';
|
|
|
|
@override
|
|
String get accept => 'Accept';
|
|
|
|
@override
|
|
String get next => 'Next';
|
|
|
|
@override
|
|
String get settingsTitle => 'Settings';
|
|
|
|
@override
|
|
String get language => 'Language';
|
|
|
|
@override
|
|
String get soundVolume => 'Sound effects volume';
|
|
|
|
@override
|
|
String get vibration => 'Vibration';
|
|
|
|
@override
|
|
String get about => 'About';
|
|
|
|
@override
|
|
String get version => 'Version';
|
|
|
|
@override
|
|
String get developer => 'Developer';
|
|
|
|
@override
|
|
String get licenses => 'Licenses';
|
|
|
|
@override
|
|
String get scanToJoin => 'Scan QR to join';
|
|
|
|
@override
|
|
String get connectedPlayers => 'Connected players';
|
|
|
|
@override
|
|
String get hostGame => 'Gestor de partida';
|
|
|
|
@override
|
|
String get waitingPlayersSeeWord => 'Esperando que todos vean su palabra...';
|
|
|
|
@override
|
|
String get activePlayers => 'Jugadores activos';
|
|
|
|
@override
|
|
String get playersVoted => 'Han votado';
|
|
|
|
@override
|
|
String get waitingVoting => 'Esperando que voten...';
|
|
|
|
@override
|
|
String get waitingForPlayers => 'Waiting for players...';
|
|
|
|
@override
|
|
String needMorePlayers(int count) {
|
|
return 'Need $count more players';
|
|
}
|
|
|
|
@override
|
|
String get starting => 'Starting...';
|
|
|
|
@override
|
|
String get enterNameAndScan => 'Enter your name and scan the host\'s QR';
|
|
|
|
@override
|
|
String get yourName => 'Your name';
|
|
|
|
@override
|
|
String get nameRequired => 'Enter your name';
|
|
|
|
@override
|
|
String get connectingTo => 'Connecting to';
|
|
|
|
@override
|
|
String get scanQR => 'Scan QR';
|
|
|
|
@override
|
|
String get scanHostQR => 'Point at the host\'s QR code';
|
|
|
|
@override
|
|
String get connectedWaiting => 'Connected!';
|
|
|
|
@override
|
|
String get waitingForHost => 'Waiting for the host to start the game...';
|
|
|
|
@override
|
|
String get enterNameToSearch => 'Enter your name to search for nearby games';
|
|
|
|
@override
|
|
String get searchGames => 'Search games';
|
|
|
|
@override
|
|
String get searchingGames => 'Searching for nearby games...';
|
|
|
|
@override
|
|
String get noGamesFound => 'No games found';
|
|
|
|
@override
|
|
String get noGamesFoundHint =>
|
|
'Make sure the host has the room open and you are nearby';
|
|
|
|
@override
|
|
String get orScanQR => 'Not showing up? Scan the host\'s QR code';
|
|
|
|
@override
|
|
String get iveSeenIt => 'Ya la he visto';
|
|
|
|
@override
|
|
String clueIs(String category) {
|
|
return 'La pista es: $category';
|
|
}
|
|
|
|
@override
|
|
String get debatePhaseActive => 'Fase de debate activa';
|
|
|
|
@override
|
|
String get debateInstructions =>
|
|
'Hablad entre vosotros y decid quién creéis que es el impostor. Cuando estéis listos, solicitad la votación.';
|
|
|
|
@override
|
|
String get solicitarVotacion => 'Solicitar votación';
|
|
|
|
@override
|
|
String get votacionSolicitada => 'Votación solicitada';
|
|
|
|
@override
|
|
String get whoDoYouThinkIsTheImpostor => '¿Quién es el impostor?';
|
|
|
|
@override
|
|
String get selectOnePlayer => 'Selecciona a un jugador para votar';
|
|
|
|
@override
|
|
String get votar => 'Votar';
|
|
}
|