Files
farolero/lib/l10n/generated/app_localizations_de.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

896 lines
22 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 German (`de`).
class AppLocalizationsDe extends AppLocalizations {
AppLocalizationsDe([String locale = 'de']) : super(locale);
@override
String get appTitle => 'Farolero';
@override
String get subtitle => 'Soziales Deduktionsspiel';
@override
String get loadingWords => 'Wörter werden geladen...';
@override
String get matchRewards => 'Spielbelohnungen';
@override
String get newMedals => 'Neue Medaillen';
@override
String get noNewMedalsKeepFire =>
'Diesmal keine neuen Medaillen. Baue dein Feuer weiter aus.';
@override
String get calculatingRewards => 'Belohnungen werden berechnet...';
@override
String get fireLabel => 'Feuer';
@override
String get playersRange => '3-20 Spieler • Ohne Internet';
@override
String get createGame => 'Spiel erstellen';
@override
String get joinGame => 'Spiel beitreten';
@override
String get howToPlay => 'Spielanleitung';
@override
String get settings => 'Einstellungen';
@override
String get gameMode => 'Spielmodus';
@override
String get singleDevice => 'Ein Gerät';
@override
String get multiDevice => 'Mehrere Geräte';
@override
String get category => 'Kategorie';
@override
String get categoryAll => 'Alle';
@override
String get categoryAnimals => 'Tiere';
@override
String get categoryFood => 'Essen';
@override
String get categoryCountries => 'Länder';
@override
String get categorySports => 'Sport';
@override
String get categoryProfessions => 'Berufe';
@override
String get categoryObjects => 'Gegenstände';
@override
String get categoryPlaces => 'Orte';
@override
String get categoryMovies => 'Filme';
@override
String get categoryMusic => 'Musik';
@override
String get categoryTechnology => 'Technologie';
@override
String playersCount(int count) {
return 'Spieler ($count)';
}
@override
String get playersRangeHint => '3-20';
@override
String get playerNameHint => 'Name des Spielers';
@override
String get playerAlreadyExists =>
'Ein Spieler mit diesem Namen existiert bereits';
@override
String get maxPlayersReached => 'Maximal 20 Spieler';
@override
String get minPlayersRequired => 'Mindestens 3 Spieler erforderlich';
@override
String get configuration => 'Konfiguration';
@override
String get impostors => '🎭 Hochstapler';
@override
String get impostorClue => '🔍 Hinweis für den Hochstapler';
@override
String get impostorClueDescription => 'Der Hochstapler kennt die Kategorie';
@override
String get debate => '🗣️ Diskussion';
@override
String get debateTime => '⏱️ Diskussionszeit';
@override
String get noLimit => 'Kein 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 => 'Spiel starten';
@override
String get seeYourWord => 'Dein Wort ansehen';
@override
String get eachPlayerMustSee =>
'Jeder Spieler muss sein Wort im Geheimen ansehen';
@override
String roundNumber(int round) {
return 'Runde $round';
}
@override
String get alreadySeen => 'Hat sein Wort bereits gesehen';
@override
String get tapToSee => 'Tippen zum Ansehen';
@override
String get allSeenStartDebate => 'Alle haben gesehen → Diskussion starten';
@override
String playersRemaining(int count) {
return 'Noch $count Spieler übrig';
}
@override
String get youAreImpostor => 'Du bist der Hochstapler!';
@override
String get yourWordIs => 'Dein Wort ist:';
@override
String clueCategory(String category) {
return 'Hinweis: $category';
}
@override
String get holdToSeeWord => 'Gedrückt halten, um dein Wort zu sehen';
@override
String get makeSureNoOneLooks =>
'Stelle sicher, dass niemand anderes hinschaut';
@override
String get showingWord => '👁️ Wird angezeigt...';
@override
String get holdToSee => '👆 Gedrückt halten zum Ansehen';
@override
String get seenMyWord => 'Ich habe mein Wort gesehen';
@override
String debateRound(int round) {
return 'Diskussion - Runde $round';
}
@override
String get timeUp => '⏰ Zeit abgelaufen!';
@override
String get timeRemaining => '⏱️ Verbleibende Zeit';
@override
String get playersInDebate => 'Spieler in der Diskussion';
@override
String activePlayersInfo(int active, int impostors) {
return '$active aktiv • $impostors versteckte(r) Hochstapler';
}
@override
String get eliminated => 'Ausgeschieden';
@override
String get notes => 'Notizen';
@override
String get goToVoting => 'Zur Abstimmung';
@override
String get voting => '🗳️ Abstimmung';
@override
String get turnToVote => 'Jetzt abstimmen:';
@override
String votesProgress(int current, int total) {
return 'Stimmen: $current/$total';
}
@override
String get whoIsImpostor => 'Wer ist deiner Meinung nach der Hochstapler?';
@override
String get confirmVote => 'Stimme bestätigen';
@override
String get votingComplete => '🗳️ Abstimmung abgeschlossen';
@override
String get allVoted => 'Alle haben abgestimmt!';
@override
String get tapToReveal => 'Tippen, um das Ergebnis aufzudecken';
@override
String get revealResult => 'Ergebnis aufdecken';
@override
String get result => 'Ergebnis';
@override
String get revealing => 'Wird aufgedeckt...';
@override
String get wasImpostor => 'War ein HOCHSTAPLER! 🎉';
@override
String get wasInnocent => 'War UNSCHULDIG 😱';
@override
String get votesThisRound => 'Stimmen dieser Runde';
@override
String get seeEndResult => 'Endergebnis anzeigen';
@override
String get impostorGuessWord => 'Errät der Hochstapler das Wort?';
@override
String get nextRound => 'Nächste Runde';
@override
String get impostorGuessTitle => '🎯 Tipp des Hochstaplers';
@override
String get impostorCanGuess =>
'Der ausgeschiedene Hochstapler kann\nversuchen, das Wort zu erraten';
@override
String get ifCorrectImpostorsWin =>
'Bei richtigem Tipp gewinnen die Hochstapler!';
@override
String get guessWordHint => 'Was glaubst du, ist das Wort?';
@override
String get dontGuess => 'Nicht versuchen';
@override
String get guess => 'Raten';
@override
String get correctGuess => 'Richtig geraten!';
@override
String theWordWas(String word) {
return 'Das Wort war: $word';
}
@override
String get impostorsWin => 'Die Hochstapler gewinnen!';
@override
String get wrongGuess => 'Falsch geraten!';
@override
String get gameContinues => 'Das Spiel geht weiter...';
@override
String get gameOver => 'Spielende';
@override
String get playersWin => 'Die Spieler gewinnen!';
@override
String get theSecretWordWas => '🔍 Das Wort war:';
@override
String categoryLabel(String category) {
return 'Kategorie: $category';
}
@override
String get theImpostorWas => '🎭 Der Hochstapler war:';
@override
String get theImpostorsWere => '🎭 Die Hochstapler waren:';
@override
String get votingHistory => '📊 Abstimmungsverlauf';
@override
String roundElimination(int round, String name) {
return 'Runde $round: $name';
}
@override
String get rematch => 'Revanche';
@override
String get mainMenu => 'Hauptmenü';
@override
String get notesTitle => '📝 Notizen';
@override
String get notesSaved => 'Notizen gespeichert';
@override
String get whoAreYou => 'Wer bist du?';
@override
String get selectYourName =>
'Wähle deinen Namen, um deine privaten Notizen zu sehen';
@override
String notesOf(String name) {
return 'Notizen von $name';
}
@override
String get notesAboutPlayers => 'Notizen zu jedem Spieler';
@override
String get playerNoteHint => 'Was hat er/sie gesagt? Verdächtig?';
@override
String get freeNote => 'Freie Notiz';
@override
String get freeNoteHint => 'Persönliche Notizen...';
@override
String get rulesTitle => '📖 Spielanleitung';
@override
String get rulesWhatIsTitle => '🎭 Was ist Der Hochstapler?';
@override
String get rulesWhatIsBody =>
'Ein soziales Deduktionsspiel für 3-20 Spieler. Alle erhalten ein geheimes Wort... außer der Hochstapler! Deine Mission: herausfinden, wer blufft.';
@override
String get rulesHowToPlayTitle => '🔍 Wie wird gespielt?';
@override
String get rulesHowToPlayBody =>
'1. Die Rollen werden verteilt: Alle erhalten dasselbe Wort, außer der/die Hochstapler.\n\n2. Diskussion: Reihum beschreibt jeder Spieler das Wort, OHNE es direkt zu sagen. Der Hochstapler muss so tun, als ob er es kennt.\n\n3. Abstimmung: Nach der Diskussion stimmen alle ab, wer ihrer Meinung nach der Hochstapler ist.\n\n4. Ausscheiden: Der Spieler mit den meisten Stimmen scheidet aus und es wird aufgedeckt, ob er der Hochstapler war oder nicht.\n\n5. War es der Hochstapler, darf er versuchen, das Wort zu erraten. Bei richtigem Tipp gewinnen die Hochstapler!';
@override
String get rulesWhoWinsTitle => '🏆 Wer gewinnt?';
@override
String get rulesWhoWinsBody =>
'• Spieler: gewinnen, wenn sie ALLE Hochstapler entlarven.\n• Hochstapler: gewinnen, wenn sie nicht entdeckt werden, bis gleich viele oder weniger normale Spieler als Hochstapler übrig sind, oder wenn sie beim Ausscheiden das Wort erraten.';
@override
String get rulesTipsPlayersTitle => '💡 Tipps für Spieler';
@override
String get rulesTipsPlayersBody =>
'• Gib subtile Hinweise, die zeigen, dass du das Wort kennst, aber nicht so offensichtlich, dass der Hochstapler sie nutzen kann.\n• Achte darauf, wer vage oder allgemeine Antworten gibt.\n• Nutze die Notizen, um aufzuschreiben, was jeder sagt.\n• Sage das Wort nicht direkt, das hilft dem Hochstapler!';
@override
String get rulesTipsImpostorTitle => '🎭 Tipps für den Hochstapler';
@override
String get rulesTipsImpostorBody =>
'• Höre aufmerksam auf die Hinweise der anderen.\n• Versuche das Wort zu erraten, um glaubwürdige Hinweise zu geben.\n• Sprich nicht als Erster, wenn du dir unsicher bist.\n• Wenn du die Kategorie als Hinweis bekommst, nutze sie zu deinem Vorteil.\n• Beschuldige andere, um die Aufmerksamkeit abzulenken.';
@override
String get rulesModesTitle => '📱 Spielmodi';
@override
String get rulesModesBody =>
'• Ein Gerät: Alle teilen sich das Gerät. Jeder Spieler sieht sein Wort, indem er einen Button gedrückt hält.\n\n• Mehrere Geräte: Jeder Spieler nutzt sein eigenes Gerät. Die Verbindung erfolgt über Bluetooth/WiFi Direct ohne Internetzugang.';
@override
String get rulesExampleTitle => '✏️ Beispielrunde';
@override
String get rulesExampleBody =>
'Geheimes Wort: \"Pizza\"\n\n• Lisa: \"Man isst es warm\"\n• Max: \"Kommt in einer Schachtel\"\n• Nina (Hochstapler): \"Ist sehr beliebt\" 🤔\n• Felix: \"Hat Käse drauf\"\n\nNina gab eine sehr allgemeine Antwort... Verdächtig!';
@override
String get joinGameTitle => 'Spiel beitreten';
@override
String get multiDeviceMode => 'Mehrere-Geräte-Modus';
@override
String get scanQrDescription =>
'Scanne den QR-Code des Hosts, um der Partie über Bluetooth/WiFi Direct beizutreten.';
@override
String get comingSoon => 'Demnächst';
@override
String get nearbyNotAvailable =>
'Die Mehrgeräte-Verbindung mit Nearby Connections erfordert physische Android-Geräte.\n\nVerwende vorerst den Modus \"Ein Gerät\", um auf einem gemeinsamen Gerät zu spielen.';
@override
String get back => 'Zurück';
@override
String get yes => 'Ja';
@override
String get no => 'Nein';
@override
String get cancel => 'Abbrechen';
@override
String get accept => 'Akzeptieren';
@override
String get next => 'Weiter';
@override
String get settingsTitle => 'Einstellungen';
@override
String get language => 'Sprache';
@override
String get soundVolume => 'Effektlautstärke';
@override
String get vibration => 'Vibration';
@override
String get about => 'Über';
@override
String get version => 'Version';
@override
String get developer => 'Entwickler';
@override
String get licenses => 'Lizenzen';
@override
String get scanToJoin => 'Scanne den QR-Code zum Beitreten';
@override
String get connectedPlayers => 'Verbundene Spieler';
@override
String get hostGame => 'Spielleitung';
@override
String get waitingPlayersSeeWord =>
'Warten, bis alle ihr Wort gesehen haben ...';
@override
String get activePlayers => 'Aktive Spieler';
@override
String get playersVoted => 'Haben abgestimmt';
@override
String get waitingVoting => 'Warten auf die Stimmen ...';
@override
String get waitingForPlayers => 'Warten auf Spieler ...';
@override
String needMorePlayers(int count) {
return 'Es fehlen noch $count Spieler';
}
@override
String get starting => 'Wird gestartet ...';
@override
String get enterNameAndScan =>
'Gib deinen Namen ein und scanne den QR-Code des Hosts';
@override
String get yourName => 'Dein Name';
@override
String get nameRequired => 'Gib deinen Namen ein';
@override
String get connectingTo => 'Verbinde mit';
@override
String get scanQR => 'QR-Code scannen';
@override
String get scanHostQR => 'Richte die Kamera auf den QR-Code des Hosts';
@override
String get connectedWaiting => 'Verbunden!';
@override
String get waitingForHost => 'Warten, bis der Host das Spiel startet ...';
@override
String get enterNameToSearch =>
'Gib deinen Namen ein, um Spiele in der Nähe zu finden';
@override
String get searchGames => 'Spiele suchen';
@override
String get searchingGames => 'Suche nach Spielen in der Nähe ...';
@override
String get noGamesFound => 'Keine Spiele gefunden';
@override
String get noGamesFoundHint =>
'Stelle sicher, dass der Host den Raum geöffnet hat und ihr in der Nähe seid';
@override
String get orScanQR => 'Wird nicht angezeigt? Scanne den QR-Code des Hosts';
@override
String get iveSeenIt => 'Ich habe es gesehen';
@override
String clueIs(String category) {
return 'Der Hinweis lautet: $category';
}
@override
String get debatePhaseActive => 'Diskussionsphase läuft';
@override
String get debateInstructions =>
'Sprecht miteinander und sagt, wen ihr für den Betrüger haltet. Wenn ihr bereit seid, fordert die Abstimmung an.';
@override
String get solicitarVotacion => 'Abstimmung anfordern';
@override
String get votacionSolicitada => 'Abstimmung angefordert';
@override
String get whoDoYouThinkIsTheImpostor => 'Wer ist der Betrüger?';
@override
String get selectOnePlayer => 'Wähle einen Spieler zum Abstimmen';
@override
String get votar => 'Abstimmen';
@override
String get selectYourProfile => 'Dein Profil';
@override
String get selectProfile => 'Wähle ein Profil';
@override
String get createNewUser => 'Neuen Benutzer erstellen';
@override
String get userNameRequired => 'Der Name darf nicht leer sein';
@override
String get profileSelected => 'Profil ausgewählt';
@override
String get availableProfiles => 'Verfügbare Profile';
@override
String get scanThisCodeFromAnotherPhone =>
'Scanne diesen Code mit einem anderen Handy';
@override
String get gameUsers => 'Spielbenutzer';
@override
String get selectedPlayers => 'Ausgewählte Spieler';
@override
String get connectedPhones => 'Verbundene Handys';
@override
String get selectedOnThisPhone => 'Auf diesem Handy ausgewählt';
@override
String get selectedByAnotherDevice => 'Auf einem anderen Gerät ausgewählt';
@override
String get available => 'Verfügbar';
@override
String get notAvailable => 'Nicht verfügbar';
@override
String get release => 'Freigeben';
@override
String get select => 'Auswählen';
@override
String get delete => 'Löschen';
@override
String get selectAtLeastThreeUsersToStart =>
'Wähle mindestens 3 Benutzer aus, um zu starten.';
@override
String get hostPhoneMustSelectUser =>
'Das Host-Handy muss mindestens einen Benutzer auswählen.';
@override
String get roomNoLongerInLobby => 'Der Raum ist nicht mehr in der Lobby.';
@override
String get completeUserSelectionToStart =>
'Schließe die Benutzerauswahl ab, um zu starten.';
@override
String get preparingSecureRoom => 'Sicherer Raum wird vorbereitet';
@override
String get searchingNearbyBluetoothGames =>
'Suche nach Spielen in der Nähe per Bluetooth';
@override
String get tapToJoin => 'Tippen zum Beitreten';
@override
String get bluetoothLocationPermissionsRequired =>
'Bluetooth- und Standortberechtigungen sind erforderlich, um Spiele zu suchen.';
@override
String get bluetoothLocationPermissionsShort =>
'Bluetooth- und Standortberechtigungen sind erforderlich';
@override
String get couldNotStartSearch =>
'Suche konnte nicht gestartet werden. Prüfe Bluetooth und Standort.';
@override
String couldNotConnectToHost(String host) {
return 'Verbindung zu $host nicht möglich';
}
@override
String get room => 'Raum';
@override
String get singleDeviceSubtitle => 'Spiel auf diesem Gerät';
@override
String get singleDeviceDescription =>
'Ideal, um gemeinsam zu spielen, indem das Handy weitergegeben wird. Schnelle, direkte Einrichtung.';
@override
String get multiDeviceSubtitle => 'Jeder Spieler auf seinem Handy';
@override
String get multiDeviceDescription =>
'Erstelle einen Premium-Raum, teile den QR-Code und verwalte Benutzer in der Lobby.';
@override
String get singleDeviceGameLabel => 'Spiel auf diesem Gerät';
@override
String get multiDeviceGameLabel => 'Mehrgeräte-Spiel';
@override
String get mainDeviceUser => 'Hauptbenutzer des Geräts';
@override
String get couldNotCreateRoom =>
'Raum konnte nicht erstellt werden. Prüfe Bluetooth.';
@override
String cannotStartWithReason(String reason) {
return 'Start nicht möglich: $reason';
}
@override
String get invalidRoom => 'ungültiger Raum';
@override
String get defaultPlayerName => 'Spieler';
@override
String get play => 'Spielen';
@override
String get history => 'Verlauf';
@override
String get mainTagline => 'Finde den Hochstapler, bevor es zu spät ist';
@override
String get deviceProfile => 'Geräteprofil';
@override
String get profileName => 'Name';
@override
String get profileNick => 'Nickname';
@override
String get save => 'Speichern';
@override
String get automaticLanguage => 'Automatisch';
@override
String get noSavedGames => 'Es gibt noch keine gespeicherten Partien.';
@override
String get errorNoGame => 'Fehler: Keine Partie';
@override
String get disconnectedPlayersWarning =>
'Einige Spieler haben ein getrenntes Gerät.';
@override
String get assumeOnThisPhone => 'Auf diesem Handy übernehmen';
@override
String get noResult => 'Kein Ergebnis';
@override
String historyGameSummary(
int players,
int impostors,
int rounds,
String word,
String category,
) {
return '\$players Spieler • \$impostors Verräter • \$rounds Runden\n\$word • \$category';
}
@override
String voteOf(String name) {
return 'Stimme von $name';
}
@override
String firstTurnInstruction(String name) {
return '$name beginnt und sagt sein/ihr Wort.';
}
@override
String get impostorsKnowEachOther => '🎭 Betrüger kennen einander';
@override
String get impostorsKnowEachOtherDescription =>
'Jeder Betrüger sieht die Namen der anderen';
@override
String get impostorsKnowEachOtherNeedsTwo => 'Gilt nur ab 2 Betrügern';
@override
String otherImpostorsTitle(num count) {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
other: 'Die anderen Betrüger',
one: 'Der andere Betrüger',
);
return '$_temp0';
}
@override
String get youAreTheOnlyImpostor => 'Du bist der einzige Betrüger';
@override
String impostorsAdjusted(int count) {
return 'Betrüger auf $count angepasst — abhängig von der Spielerzahl';
}
@override
String get eliminatedCannotVote =>
'Du bist ausgeschieden du stimmst nicht mehr ab';
@override
String get reconnecting => 'Verbindung wird wiederhergestellt ...';
@override
String get reconnectingHint =>
'Verbindung zum Host verloren. Dein Platz im Spiel bleibt reserviert.';
@override
String get leaveGame => 'Spiel verlassen';
@override
String playerRejoined(String name) {
return '$name ist zurück im Spiel';
}
@override
String get leaveGameTitle => 'Spiel wirklich verlassen?';
@override
String get leaveGameSingleDevice =>
'Das laufende Spiel geht verloren und lässt sich nicht wiederherstellen.';
@override
String get leaveGameHost =>
'Du bist der Host: Wenn du gehst, endet das Spiel für alle.';
@override
String get leaveGameClient =>
'Du verlässt das Spiel. Du kannst zurückkommen, solange der Host es offen hält.';
@override
String get stayInGame => 'Weiterspielen';
@override
String get permissionsNeededTitle => 'Berechtigungen erforderlich';
@override
String get permissionsNeededBody => 'Für den Mehrspielermodus brauchen wir:';
@override
String get openAppSettingsQuestion => 'Die App-Einstellungen öffnen?';
@override
String get openSettings => 'Einstellungen öffnen';
@override
String get permissionLocation => 'Standort';
@override
String get permissionBluetoothAdvertise => 'Bluetooth (sichtbar machen)';
@override
String get permissionBluetoothConnect => 'Bluetooth (verbinden)';
@override
String get permissionBluetoothScan => 'Bluetooth (suchen)';
@override
String get permissionNearbyWifi => 'Wi-Fi in der Nähe';
}