Files
farolero/lib/l10n/generated/app_localizations_ca.dart
T
FreeTLab 56f07364c2
Build & Deploy Farolero / Análisis de código (push) Successful in 13s
Build & Deploy Farolero / Build APK + AAB release (push) Successful in 1m22s
feat: confirm before leaving a game, and fix untranslated strings
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.
2026-07-25 23:59:57 +02:00

894 lines
21 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// ignore: unused_import
import 'package:intl/intl.dart' as intl;
import 'app_localizations.dart';
// ignore_for_file: type=lint
/// The translations for Catalan Valencian (`ca`).
class AppLocalizationsCa extends AppLocalizations {
AppLocalizationsCa([String locale = 'ca']) : super(locale);
@override
String get appTitle => 'L\'Impostor';
@override
String get subtitle => 'Joc de deducció social';
@override
String get loadingWords => 'Carregant paraules...';
@override
String get matchRewards => 'Recompenses de partida';
@override
String get newMedals => 'Noves medalles';
@override
String get noNewMedalsKeepFire =>
'Sense medalles noves aquesta vegada. Continua acumulant foc.';
@override
String get calculatingRewards => 'Calculant recompenses...';
@override
String get fireLabel => 'Foc';
@override
String get playersRange => '3-20 jugadors • Sense internet';
@override
String get createGame => 'Crear partida';
@override
String get joinGame => 'Unir-se a partida';
@override
String get howToPlay => 'Com jugar';
@override
String get settings => 'Configuració';
@override
String get gameMode => 'Mode de joc';
@override
String get singleDevice => 'Un sol mòbil';
@override
String get multiDevice => 'Multimòbil';
@override
String get category => 'Categoria';
@override
String get categoryAll => 'Totes';
@override
String get categoryAnimals => 'Animals';
@override
String get categoryFood => 'Menjar';
@override
String get categoryCountries => 'Països';
@override
String get categorySports => 'Esports';
@override
String get categoryProfessions => 'Professions';
@override
String get categoryObjects => 'Objectes';
@override
String get categoryPlaces => 'Llocs';
@override
String get categoryMovies => 'Pel·lícules';
@override
String get categoryMusic => 'Música';
@override
String get categoryTechnology => 'Tecnologia';
@override
String playersCount(int count) {
return 'Jugadors ($count)';
}
@override
String get playersRangeHint => '3-20';
@override
String get playerNameHint => 'Nom del jugador';
@override
String get playerAlreadyExists => 'Ja existeix un jugador amb aquest nom';
@override
String get maxPlayersReached => 'Màxim 20 jugadors';
@override
String get minPlayersRequired => 'Calen almenys 3 jugadors';
@override
String get configuration => 'Configuració';
@override
String get impostors => '🎭 Impostors';
@override
String get impostorClue => '🔍 Pista per a l\'impostor';
@override
String get impostorClueDescription => 'L\'impostor coneix la categoria';
@override
String get debate => '🗣️ Debat';
@override
String get debateTime => '⏱️ Temps de debat';
@override
String get noLimit => 'Sense límit';
@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 => 'Iniciar partida';
@override
String get seeYourWord => 'Veure la teva paraula';
@override
String get eachPlayerMustSee =>
'Cada jugador ha de veure la seva paraula en secret';
@override
String roundNumber(int round) {
return 'Ronda $round';
}
@override
String get alreadySeen => 'Ja ha vist la seva paraula';
@override
String get tapToSee => 'Toca per veure';
@override
String get allSeenStartDebate => 'Tots han vist → Iniciar debat';
@override
String playersRemaining(int count) {
return 'Falten $count jugadors';
}
@override
String get youAreImpostor => 'Ets l\'impostor!';
@override
String get yourWordIs => 'La teva paraula és:';
@override
String clueCategory(String category) {
return 'Pista: $category';
}
@override
String get holdToSeeWord => 'Mantén premut per veure la teva paraula';
@override
String get makeSureNoOneLooks => 'Assegura\'t que ningú més mira';
@override
String get showingWord => '👁️ Mostrant...';
@override
String get holdToSee => '👆 Mantén premut per veure';
@override
String get seenMyWord => 'He vist la meva paraula';
@override
String debateRound(int round) {
return 'Debat - Ronda $round';
}
@override
String get timeUp => '⏰ Temps esgotat!';
@override
String get timeRemaining => '⏱️ Temps restant';
@override
String get playersInDebate => 'Jugadors en debat';
@override
String activePlayersInfo(int active, int impostors) {
return '$active actius • $impostors impostor(s) ocults';
}
@override
String get eliminated => 'Eliminat';
@override
String get notes => 'Notes';
@override
String get goToVoting => 'Anar a votació';
@override
String get voting => '🗳️ Votació';
@override
String get turnToVote => 'Torn de votar:';
@override
String votesProgress(int current, int total) {
return 'Vots: $current/$total';
}
@override
String get whoIsImpostor => 'Qui creus que és l\'impostor?';
@override
String get confirmVote => 'Confirmar vot';
@override
String get votingComplete => '🗳️ Votació completa';
@override
String get allVoted => 'Tots han votat!';
@override
String get tapToReveal => 'Toca per revelar el resultat';
@override
String get revealResult => 'Revelar resultat';
@override
String get result => 'Resultat';
@override
String get revealing => 'Revelant...';
@override
String get wasImpostor => 'Era IMPOSTOR! 🎉';
@override
String get wasInnocent => 'Era INNOCENT 😱';
@override
String get votesThisRound => 'Vots d\'aquesta ronda';
@override
String get seeEndResult => 'Veure resultat final';
@override
String get impostorGuessWord => 'L\'impostor endevina la paraula?';
@override
String get nextRound => 'Següent ronda';
@override
String get impostorGuessTitle => '🎯 Endevinalla de l\'impostor';
@override
String get impostorCanGuess =>
'L\'impostor eliminat pot\nintentar endevinar la paraula';
@override
String get ifCorrectImpostorsWin => 'Si encerta, els impostors guanyen!';
@override
String get guessWordHint => 'Quina creus que és la paraula?';
@override
String get dontGuess => 'No intentar';
@override
String get guess => 'Endevinar';
@override
String get correctGuess => 'Ha encertat!';
@override
String theWordWas(String word) {
return 'La paraula era: $word';
}
@override
String get impostorsWin => 'Els impostors guanyen!';
@override
String get wrongGuess => 'No ha encertat!';
@override
String get gameContinues => 'La partida continua...';
@override
String get gameOver => 'Fi de partida';
@override
String get playersWin => 'Els jugadors guanyen!';
@override
String get theSecretWordWas => '🔍 La paraula era:';
@override
String categoryLabel(String category) {
return 'Categoria: $category';
}
@override
String get theImpostorWas => '🎭 L\'impostor era:';
@override
String get theImpostorsWere => '🎭 Els impostors eren:';
@override
String get votingHistory => '📊 Historial de votacions';
@override
String roundElimination(int round, String name) {
return 'Ronda $round: $name';
}
@override
String get rematch => 'Revenja';
@override
String get mainMenu => 'Menú principal';
@override
String get notesTitle => '📝 Notes';
@override
String get notesSaved => 'Notes desades';
@override
String get whoAreYou => 'Qui ets?';
@override
String get selectYourName =>
'Selecciona el teu nom per veure les teves notes privades';
@override
String notesOf(String name) {
return 'Notes de $name';
}
@override
String get notesAboutPlayers => 'Apunts sobre cada jugador';
@override
String get playerNoteHint => 'Què ha dit? Sospitós?';
@override
String get freeNote => 'Nota lliure';
@override
String get freeNoteHint => 'Apunts personals...';
@override
String get rulesTitle => '📖 Com jugar';
@override
String get rulesWhatIsTitle => '🎭 Què és L\'Impostor?';
@override
String get rulesWhatIsBody =>
'Un joc de deducció social per a 3-20 jugadors. Tots reben una paraula secreta... excepte l\'impostor! La teva missió: descobrir qui fingeix.';
@override
String get rulesHowToPlayTitle => '🔍 Com es juga?';
@override
String get rulesHowToPlayBody =>
'1. Es reparteixen els rols: tots reben la mateixa paraula, excepte l\'impostor/els impostors.\n\n2. Debat: per torns, cada jugador descriu la paraula SENSE dir-la directament. L\'impostor ha de fingir que la coneix.\n\n3. Votació: en acabar el debat, tots voten qui creuen que és l\'impostor.\n\n4. Eliminació: el més votat queda eliminat i es revela si era impostor o no.\n\n5. Si era impostor, pot intentar endevinar la paraula. Si encerta, els impostors guanyen!';
@override
String get rulesWhoWinsTitle => '🏆 Qui guanya?';
@override
String get rulesWhoWinsBody =>
'• Jugadors: guanyen si eliminen TOTS els impostors.\n• Impostors: guanyen si no són descoberts fins que quedin igual o menys jugadors normals que impostors, o si endevinen la paraula en ser eliminats.';
@override
String get rulesTipsPlayersTitle => '💡 Consells per als jugadors';
@override
String get rulesTipsPlayersBody =>
'• Dona pistes subtils que demostrin que coneixes la paraula, però no tan evidents que l\'impostor les pugui fer servir.\n• Observa qui dona respostes vagues o genèriques.\n• Fes servir les notes per apuntar el que diu cadascú.\n• No diguis la paraula directament, això ajuda l\'impostor!';
@override
String get rulesTipsImpostorTitle => '🎭 Consells per a l\'impostor';
@override
String get rulesTipsImpostorBody =>
'• Escolta atentament les pistes dels altres.\n• Intenta deduir la paraula per donar pistes creïbles.\n• No siguis el primer a parlar si no n\'estàs segur.\n• Si et donen la categoria com a pista, aprofita-la.\n• Acusa els altres per desviar l\'atenció.';
@override
String get rulesModesTitle => '📱 Modes de joc';
@override
String get rulesModesBody =>
'• Un sol mòbil: tots comparteixen el dispositiu. Cada jugador veu la seva paraula prement i mantenint un botó.\n\n• Multimòbil: cada jugador fa servir el seu propi dispositiu. Es connecten per Bluetooth/WiFi Direct sense necessitat d\'internet.';
@override
String get rulesExampleTitle => '✏️ Exemple de partida';
@override
String get rulesExampleBody =>
'Paraula secreta: \"Pizza\"\n\n• Laia: \"Es menja calenta\"\n• Jordi: \"Ve en una capsa\"\n• Marta (impostor): \"És molt popular\" 🤔\n• Pau: \"Té formatge\"\n\nLa Marta va donar una resposta molt genèrica... Sospitosa!';
@override
String get joinGameTitle => 'Unir-se a partida';
@override
String get multiDeviceMode => 'Mode multimòbil';
@override
String get scanQrDescription =>
'Escaneja el codi QR que mostra l\'amfitrió per connectar-te a la partida via Bluetooth/WiFi Direct.';
@override
String get comingSoon => 'Properament';
@override
String get nearbyNotAvailable =>
'La connexió multimòbil amb Nearby Connections requereix dispositius Android físics.\n\nDe moment, fes servir el mode \"Un sol mòbil\" per jugar en un dispositiu compartit.';
@override
String get back => 'Tornar';
@override
String get yes => 'Sí';
@override
String get no => 'No';
@override
String get cancel => 'Cancel·lar';
@override
String get accept => 'Acceptar';
@override
String get next => 'Següent';
@override
String get settingsTitle => 'Configuració';
@override
String get language => 'Idioma';
@override
String get soundVolume => 'Volum d\'efectes';
@override
String get vibration => 'Vibració';
@override
String get about => 'Quant a';
@override
String get version => 'Versió';
@override
String get developer => 'Desenvolupador';
@override
String get licenses => 'Llicències';
@override
String get scanToJoin => 'Escaneja el QR per unir-te';
@override
String get connectedPlayers => 'Jugadors connectats';
@override
String get hostGame => 'Gestor de partida';
@override
String get waitingPlayersSeeWord =>
'Esperant que tothom vegi la seva paraula...';
@override
String get activePlayers => 'Jugadors actius';
@override
String get playersVoted => 'Han votat';
@override
String get waitingVoting => 'Esperant els vots...';
@override
String get waitingForPlayers => 'Esperant jugadors...';
@override
String needMorePlayers(int count) {
return 'Falten $count jugadors més';
}
@override
String get starting => 'Iniciant...';
@override
String get enterNameAndScan =>
'Escriu el teu nom i escaneja el QR de l\'amfitrió';
@override
String get yourName => 'El teu nom';
@override
String get nameRequired => 'Escriu el teu nom';
@override
String get connectingTo => 'Connectant a';
@override
String get scanQR => 'Escanejar QR';
@override
String get scanHostQR => 'Apunta al QR de l\'amfitrió';
@override
String get connectedWaiting => 'Connectat!';
@override
String get waitingForHost => 'Esperant que l\'amfitrió iniciï la partida...';
@override
String get enterNameToSearch =>
'Escriu el teu nom per buscar partides properes';
@override
String get searchGames => 'Buscar partides';
@override
String get searchingGames => 'Buscant partides properes...';
@override
String get noGamesFound => 'No s\'han trobat partides';
@override
String get noGamesFoundHint =>
'Assegura\'t que l\'amfitrió té la sala oberta i que sou a prop';
@override
String get orScanQR => 'No apareix? Escaneja el QR de l\'amfitrió';
@override
String get iveSeenIt => 'Ja l\'he vista';
@override
String clueIs(String category) {
return 'La pista és: $category';
}
@override
String get debatePhaseActive => 'Fase de debat activa';
@override
String get debateInstructions =>
'Parleu entre vosaltres i digueu qui creieu que és l\'impostor. Quan estigueu llestos, demaneu la votació.';
@override
String get solicitarVotacion => 'Demanar votació';
@override
String get votacionSolicitada => 'Votació demanada';
@override
String get whoDoYouThinkIsTheImpostor => 'Qui és l\'impostor?';
@override
String get selectOnePlayer => 'Selecciona un jugador per votar';
@override
String get votar => 'Votar';
@override
String get selectYourProfile => 'El teu perfil';
@override
String get selectProfile => 'Selecciona un perfil';
@override
String get createNewUser => 'Crear nou usuari';
@override
String get userNameRequired => 'El nom no pot estar buit';
@override
String get profileSelected => 'Perfil seleccionat';
@override
String get availableProfiles => 'Perfils disponibles';
@override
String get scanThisCodeFromAnotherPhone =>
'Escaneja aquest codi des dun altre mòbil';
@override
String get gameUsers => 'Usuaris de la partida';
@override
String get selectedPlayers => 'Jugadors seleccionats';
@override
String get connectedPhones => 'Mòbils connectats';
@override
String get selectedOnThisPhone => 'Seleccionat en aquest mòbil';
@override
String get selectedByAnotherDevice => 'Seleccionat en un altre dispositiu';
@override
String get available => 'Disponible';
@override
String get notAvailable => 'No disponible';
@override
String get release => 'Allibera';
@override
String get select => 'Selecciona';
@override
String get delete => 'Elimina';
@override
String get selectAtLeastThreeUsersToStart =>
'Selecciona almenys 3 usuaris per començar.';
@override
String get hostPhoneMustSelectUser =>
'El mòbil servidor ha de seleccionar almenys un usuari.';
@override
String get roomNoLongerInLobby => 'La sala ja no és al lobby.';
@override
String get completeUserSelectionToStart =>
'Completa la selecció dusuaris per començar.';
@override
String get preparingSecureRoom => 'Preparant la sala segura';
@override
String get searchingNearbyBluetoothGames =>
'Cercant partides properes per Bluetooth';
@override
String get tapToJoin => 'Toca per unir-thi';
@override
String get bluetoothLocationPermissionsRequired =>
'Calen permisos de Bluetooth i ubicació per cercar partides.';
@override
String get bluetoothLocationPermissionsShort =>
'Calen permisos de Bluetooth i ubicació';
@override
String get couldNotStartSearch =>
'No sha pogut iniciar la cerca. Verifica el Bluetooth i la ubicació.';
@override
String couldNotConnectToHost(String host) {
return 'No sha pogut connectar a $host';
}
@override
String get room => 'Sala';
@override
String get singleDeviceSubtitle => 'Partida en aquest dispositiu';
@override
String get singleDeviceDescription =>
'Ideal per jugar tots junts passant el mòbil. Configuració ràpida i directa.';
@override
String get multiDeviceSubtitle => 'Cada jugador al seu mòbil';
@override
String get multiDeviceDescription =>
'Crea una sala premium, comparteix el QR i gestiona usuaris des del lobby.';
@override
String get singleDeviceGameLabel => 'Partida en aquest dispositiu';
@override
String get multiDeviceGameLabel => 'Partida multidispositiu';
@override
String get mainDeviceUser => 'Usuari principal del dispositiu';
@override
String get couldNotCreateRoom =>
'No sha pogut crear la sala. Verifica el Bluetooth.';
@override
String cannotStartWithReason(String reason) {
return 'No es pot iniciar: $reason';
}
@override
String get invalidRoom => 'sala invàlida';
@override
String get defaultPlayerName => 'Jugador';
@override
String get play => 'Jugar';
@override
String get history => 'Historial';
@override
String get mainTagline => 'Descobreix limpostor abans que siga massa tard';
@override
String get deviceProfile => 'Perfil del dispositiu';
@override
String get profileName => 'Nom';
@override
String get profileNick => 'Àlies';
@override
String get save => 'Desa';
@override
String get automaticLanguage => 'Automàtic';
@override
String get noSavedGames => 'Encara no hi ha partides desades.';
@override
String get errorNoGame => 'Error: no hi ha partida';
@override
String get disconnectedPlayersWarning =>
'Hi ha jugadors amb el dispositiu desconnectat.';
@override
String get assumeOnThisPhone => 'Assumir en aquest mòbil';
@override
String get noResult => 'Sense resultat';
@override
String historyGameSummary(
int players,
int impostors,
int rounds,
String word,
String category,
) {
return '\$players jugadors • \$impostors impostor(s) • \$rounds ronda(es)\n\$word • \$category';
}
@override
String voteOf(String name) {
return 'Vot de $name';
}
@override
String firstTurnInstruction(String name) {
return 'Comença $name dient la seva paraula.';
}
@override
String get impostorsKnowEachOther => '🎭 Els impostors es coneixen';
@override
String get impostorsKnowEachOtherDescription =>
'Cada impostor veurà els noms de la resta';
@override
String get impostorsKnowEachOtherNeedsTwo =>
'Només s\'aplica amb 2 o més impostors';
@override
String otherImpostorsTitle(num count) {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
other: 'Els altres impostors',
one: 'L\'altre impostor',
);
return '$_temp0';
}
@override
String get youAreTheOnlyImpostor => 'Ets l\'únic impostor';
@override
String impostorsAdjusted(int count) {
return 'Impostors ajustats a $count pel nombre de jugadors';
}
@override
String get eliminatedCannotVote => 'Estàs eliminat: ja no votes';
@override
String get reconnecting => 'Reconnectant...';
@override
String get reconnectingHint =>
'S\'ha perdut la connexió amb l\'amfitrió. El teu lloc a la partida es manté.';
@override
String get leaveGame => 'Sortir de la partida';
@override
String playerRejoined(String name) {
return '$name ha tornat a la partida';
}
@override
String get leaveGameTitle => 'Vols sortir de la partida?';
@override
String get leaveGameSingleDevice =>
'Es perdrà la partida en curs i no la podràs recuperar.';
@override
String get leaveGameHost =>
'Ets l\'amfitrió: si surts, la partida s\'acaba per a tots els jugadors.';
@override
String get leaveGameClient =>
'Sortiràs de la partida. Hi podràs tornar mentre l\'amfitrió la mantingui oberta.';
@override
String get stayInGame => 'Continuar jugant';
@override
String get permissionsNeededTitle => 'Permisos necessaris';
@override
String get permissionsNeededBody => 'Per al mode multijugador necessitem:';
@override
String get openAppSettingsQuestion =>
'Vols obrir la configuració de l\'aplicació?';
@override
String get openSettings => 'Obrir configuració';
@override
String get permissionLocation => 'Ubicació';
@override
String get permissionBluetoothAdvertise => 'Bluetooth (anunciar)';
@override
String get permissionBluetoothConnect => 'Bluetooth (connectar)';
@override
String get permissionBluetoothScan => 'Bluetooth (escanejar)';
@override
String get permissionNearbyWifi => 'Wi-Fi proper';
}