feat: modo multidispositivo con Nearby Connections
All checks were successful
Build & Deploy Farolero / Análisis de código (push) Successful in 9s
Build & Deploy Farolero / Build APK + AAB release (push) Successful in 1m10s

- ServicioNearby completo: P2P_STAR, auto-accept, protocolo mensajes
- PantallaLobbyHost: QR code + lista jugadores tiempo real
- PantallaUnirse: escaneo QR + conexión + sala espera
- Protocolo MensajeP2P: salaInfo, partidaInicio, fase, voto, resultado, fin
- Manejo desconexiones jugador/host
- l10n: nuevas keys es/en
- Version bump 1.1.0+5
This commit is contained in:
ShanaiaBot
2026-04-04 03:09:51 +02:00
parent f453ce6e0d
commit 23472707ad
25 changed files with 1799 additions and 165 deletions

View File

@@ -24,7 +24,13 @@
"categoryMusic": "Music",
"categoryTechnology": "Technology",
"playersCount": "Players ({count})",
"@playersCount": {"placeholders": {"count": {"type": "int"}}},
"@playersCount": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"playersRangeHint": "3-20",
"playerNameHint": "Player name",
"playerAlreadyExists": "A player with that name already exists",
@@ -44,35 +50,77 @@
"seeYourWord": "See your word",
"eachPlayerMustSee": "Each player must see their word in secret",
"roundNumber": "Round {round}",
"@roundNumber": {"placeholders": {"round": {"type": "int"}}},
"@roundNumber": {
"placeholders": {
"round": {
"type": "int"
}
}
},
"alreadySeen": "Already seen their word",
"tapToSee": "Tap to see",
"allSeenStartDebate": "Everyone has seen → Start discussion",
"playersRemaining": "{count} players remaining",
"@playersRemaining": {"placeholders": {"count": {"type": "int"}}},
"@playersRemaining": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"youAreImpostor": "You are the impostor!",
"yourWordIs": "Your word is:",
"clueCategory": "Clue: {category}",
"@clueCategory": {"placeholders": {"category": {"type": "String"}}},
"@clueCategory": {
"placeholders": {
"category": {
"type": "String"
}
}
},
"holdToSeeWord": "Hold to see your word",
"makeSureNoOneLooks": "Make sure no one else is looking",
"showingWord": "👁️ Showing...",
"holdToSee": "👆 Hold to see",
"seenMyWord": "I've seen my word",
"debateRound": "Discussion - Round {round}",
"@debateRound": {"placeholders": {"round": {"type": "int"}}},
"@debateRound": {
"placeholders": {
"round": {
"type": "int"
}
}
},
"timeUp": "⏰ Time's up!",
"timeRemaining": "⏱️ Time remaining",
"playersInDebate": "Players in discussion",
"activePlayersInfo": "{active} active • {impostors} hidden impostor(s)",
"@activePlayersInfo": {"placeholders": {"active": {"type": "int"}, "impostors": {"type": "int"}}},
"@activePlayersInfo": {
"placeholders": {
"active": {
"type": "int"
},
"impostors": {
"type": "int"
}
}
},
"eliminated": "Eliminated",
"notes": "Notes",
"goToVoting": "Go to voting",
"voting": "🗳️ Voting",
"turnToVote": "Your turn to vote:",
"votesProgress": "Votes: {current}/{total}",
"@votesProgress": {"placeholders": {"current": {"type": "int"}, "total": {"type": "int"}}},
"@votesProgress": {
"placeholders": {
"current": {
"type": "int"
},
"total": {
"type": "int"
}
}
},
"whoIsImpostor": "Who do you think is the impostor?",
"confirmVote": "Confirm vote",
"votingComplete": "🗳️ Voting complete",
@@ -95,7 +143,13 @@
"guess": "Guess",
"correctGuess": "Correct guess!",
"theWordWas": "The word was: {word}",
"@theWordWas": {"placeholders": {"word": {"type": "String"}}},
"@theWordWas": {
"placeholders": {
"word": {
"type": "String"
}
}
},
"impostorsWin": "The impostors win!",
"wrongGuess": "Wrong guess!",
"gameContinues": "The game continues...",
@@ -103,12 +157,27 @@
"playersWin": "The players win!",
"theSecretWordWas": "🔍 The word was:",
"categoryLabel": "Category: {category}",
"@categoryLabel": {"placeholders": {"category": {"type": "String"}}},
"@categoryLabel": {
"placeholders": {
"category": {
"type": "String"
}
}
},
"theImpostorWas": "🎭 The impostor was:",
"theImpostorsWere": "🎭 The impostors were:",
"votingHistory": "📊 Voting history",
"roundElimination": "Round {round}: {name}",
"@roundElimination": {"placeholders": {"round": {"type": "int"}, "name": {"type": "String"}}},
"@roundElimination": {
"placeholders": {
"round": {
"type": "int"
},
"name": {
"type": "String"
}
}
},
"rematch": "Rematch",
"mainMenu": "Main menu",
"notesTitle": "📝 Notes",
@@ -116,7 +185,13 @@
"whoAreYou": "Who are you?",
"selectYourName": "Select your name to view your private notes",
"notesOf": "{name}'s notes",
"@notesOf": {"placeholders": {"name": {"type": "String"}}},
"@notesOf": {
"placeholders": {
"name": {
"type": "String"
}
}
},
"notesAboutPlayers": "Notes about each player",
"playerNoteHint": "What did they say? Suspicious?",
"freeNote": "Free note",
@@ -154,5 +229,25 @@
"about": "About",
"version": "Version",
"developer": "Developer",
"licenses": "Licenses"
}
"licenses": "Licenses",
"scanToJoin": "Scan QR to join",
"connectedPlayers": "Connected players",
"waitingForPlayers": "Waiting for players...",
"needMorePlayers": "Need {count} more players",
"@needMorePlayers": {
"placeholders": {
"count": {
"type": "int"
}
}
},
"starting": "Starting...",
"enterNameAndScan": "Enter your name and scan the host's QR",
"yourName": "Your name",
"nameRequired": "Enter your name",
"connectingTo": "Connecting to",
"scanQR": "Scan QR",
"scanHostQR": "Point at the host's QR code",
"connectedWaiting": "Connected!",
"waitingForHost": "Waiting for the host to start the game..."
}