feat: confirm before leaving a game, and fix untranslated strings
Build & Deploy Farolero / Análisis de código (push) Successful in 13s
Build & Deploy Farolero / Build APK + AAB release (push) Successful in 1m22s

Exit confirmation
- A dialog in the app's own style now guards every in-game screen. The safe
  action is the prominent one, so a stray tap keeps you in the game.
- Eleven screens covered, against both the system back gesture and the close
  buttons. The message adapts: a single-device game is lost, a host ends it
  for everyone, a client can rejoin.
- The two screens the host also opens from the manager take a flag so that
  back there just closes them instead of offering to quit.

Translations
- 21 keys were still holding the English text in Arabic, Basque, Hindi,
  Japanese, Korean, Dutch, Polish, Russian, Turkish and both Chinese
  variants: 231 strings, covering the whole multi-device flow, permissions
  and the mode picker. Nothing failed, the app just showed English.
- The permissions dialog was hardcoded in Spanish; it is localized now.
- Portuguese used Spanish gerunds where pt-PT takes "a + infinitive".

Checked what looked untranslated but is not: Animals and Notes are correct
Catalan, Configuration and Vibration correct French, Version correct German.
Those are whitelisted in the new test rather than silently rewritten.

l10n_cobertura_test guards all of it: no missing or orphan keys, no empty
values, no English left outside the whitelist, and placeholders preserved.
This commit is contained in:
2026-07-25 23:59:57 +02:00
parent d98ca66793
commit 56f07364c2
50 changed files with 2313 additions and 853 deletions
+18 -4
View File
@@ -6,7 +6,7 @@
"matchRewards": "Recompensas da partida",
"newMedals": "Novas medalhas",
"noNewMedalsKeepFire": "Sem medalhas novas desta vez. Continua a acumular fogo.",
"calculatingRewards": "Calculando recompensas...",
"calculatingRewards": "A calcular recompensas...",
"fireLabel": "Fogo",
"playersRange": "3-20 jogadores • Sem internet",
"createGame": "Criar partida",
@@ -85,7 +85,7 @@
},
"holdToSeeWord": "Mantenha pressionado para ver sua palavra",
"makeSureNoOneLooks": "Certifique-se de que ninguém mais está olhando",
"showingWord": "👁️ Mostrando...",
"showingWord": "👁️ A mostrar...",
"holdToSee": "👆 Mantenha pressionado para ver",
"seenMyWord": "Já vi minha palavra",
"debateRound": "Debate - Rodada {round}",
@@ -133,7 +133,7 @@
"tapToReveal": "Toque para revelar o resultado",
"revealResult": "Revelar resultado",
"result": "Resultado",
"revealing": "Revelando...",
"revealing": "A revelar...",
"wasImpostor": "Era IMPOSTOR! 🎉",
"wasInnocent": "Era INOCENTE 😱",
"votesThisRound": "Votos desta rodada",
@@ -368,5 +368,19 @@
"reconnecting": "A religar...",
"reconnectingHint": "Perdeu-se a ligação ao anfitrião. O teu lugar no jogo mantém-se.",
"leaveGame": "Sair do jogo",
"playerRejoined": "{name} voltou ao jogo"
"playerRejoined": "{name} voltou ao jogo",
"leaveGameTitle": "Sair do jogo?",
"leaveGameSingleDevice": "O jogo em curso perde-se e não poderá ser recuperado.",
"leaveGameHost": "És o anfitrião: se saíres, o jogo termina para todos os jogadores.",
"leaveGameClient": "Vais sair do jogo. Podes voltar enquanto o anfitrião o mantiver aberto.",
"stayInGame": "Continuar a jogar",
"permissionsNeededTitle": "Permissões necessárias",
"permissionsNeededBody": "Para o modo multijogador precisamos de:",
"openAppSettingsQuestion": "Abrir as definições da aplicação?",
"openSettings": "Abrir definições",
"permissionLocation": "Localização",
"permissionBluetoothAdvertise": "Bluetooth (anunciar)",
"permissionBluetoothConnect": "Bluetooth (ligar)",
"permissionBluetoothScan": "Bluetooth (procurar)",
"permissionNearbyWifi": "Wi-Fi por perto"
}