v0.2.0: i18n 18 idiomas + pantalla ajustes + bancos multiidioma

Internacionalización completa:
- 18 ficheros .arb: es, en, fr, pt, de, it, ru, ja, ko, zh, zh_TW, ar, hi, tr, pl, nl, ca, eu
- Todos los strings extraídos de todas las pantallas
- Detección automática de idioma del sistema
- Selector manual en pantalla de ajustes

Pantalla de ajustes nueva:
- Selector de idioma con banderas emoji
- Vibración ON/OFF
- Acerca de (versión, desarrollador)

Bancos de palabras multiidioma:
- palabras.json (castellano, 1000 palabras)
- palabras_en.json (inglés, 1000 palabras)
- palabras_fr.json (francés, 1000 palabras)
- Fallback a castellano si no hay banco del idioma

13138 líneas Dart, 39 ficheros, 0 issues en flutter analyze
This commit is contained in:
ShanaiaBot
2026-04-04 01:18:09 +02:00
parent de2c8ffa18
commit 1bca50af1d
56 changed files with 14389 additions and 201 deletions

224
lib/l10n/app_de.arb Normal file
View File

@@ -0,0 +1,224 @@
{
"@@locale": "de",
"appTitle": "Der Hochstapler",
"subtitle": "Soziales Deduktionsspiel",
"loadingWords": "Wörter werden geladen...",
"playersRange": "3-20 Spieler • Ohne Internet",
"createGame": "Spiel erstellen",
"joinGame": "Spiel beitreten",
"howToPlay": "Spielanleitung",
"settings": "Einstellungen",
"gameMode": "Spielmodus",
"singleDevice": "Ein Gerät",
"multiDevice": "Mehrere Geräte",
"category": "Kategorie",
"categoryAll": "Alle",
"categoryAnimals": "Tiere",
"categoryFood": "Essen",
"categoryCountries": "Länder",
"categorySports": "Sport",
"categoryProfessions": "Berufe",
"categoryObjects": "Gegenstände",
"categoryPlaces": "Orte",
"categoryMovies": "Filme",
"categoryMusic": "Musik",
"categoryTechnology": "Technologie",
"playersCount": "Spieler ({count})",
"@playersCount": {
"placeholders": {
"count": {"type": "int"}
}
},
"playersRangeHint": "3-20",
"playerNameHint": "Name des Spielers",
"playerAlreadyExists": "Ein Spieler mit diesem Namen existiert bereits",
"maxPlayersReached": "Maximal 20 Spieler",
"minPlayersRequired": "Mindestens 3 Spieler erforderlich",
"configuration": "Konfiguration",
"impostors": "🎭 Hochstapler",
"impostorClue": "🔍 Hinweis für den Hochstapler",
"impostorClueDescription": "Der Hochstapler kennt die Kategorie",
"debateTime": "⏱️ Diskussionszeit",
"noLimit": "Kein Limit",
"oneMin": "1 Min",
"twoMin": "2 Min",
"threeMin": "3 Min",
"fiveMin": "5 Min",
"startGame": "Spiel starten",
"seeYourWord": "Dein Wort ansehen",
"eachPlayerMustSee": "Jeder Spieler muss sein Wort im Geheimen ansehen",
"roundNumber": "Runde {round}",
"@roundNumber": {
"placeholders": {
"round": {"type": "int"}
}
},
"alreadySeen": "Hat sein Wort bereits gesehen",
"tapToSee": "Tippen zum Ansehen",
"allSeenStartDebate": "Alle haben gesehen → Diskussion starten",
"playersRemaining": "Noch {count} Spieler übrig",
"@playersRemaining": {
"placeholders": {
"count": {"type": "int"}
}
},
"youAreImpostor": "Du bist der Hochstapler!",
"yourWordIs": "Dein Wort ist:",
"clueCategory": "Hinweis: {category}",
"@clueCategory": {
"placeholders": {
"category": {"type": "String"}
}
},
"holdToSeeWord": "Gedrückt halten, um dein Wort zu sehen",
"makeSureNoOneLooks": "Stelle sicher, dass niemand anderes hinschaut",
"showingWord": "👁️ Wird angezeigt...",
"holdToSee": "👆 Gedrückt halten zum Ansehen",
"seenMyWord": "Ich habe mein Wort gesehen",
"debateRound": "Diskussion - Runde {round}",
"@debateRound": {
"placeholders": {
"round": {"type": "int"}
}
},
"timeUp": "⏰ Zeit abgelaufen!",
"timeRemaining": "⏱️ Verbleibende Zeit",
"playersInDebate": "Spieler in der Diskussion",
"activePlayersInfo": "{active} aktiv • {impostors} versteckte(r) Hochstapler",
"@activePlayersInfo": {
"placeholders": {
"active": {"type": "int"},
"impostors": {"type": "int"}
}
},
"eliminated": "Ausgeschieden",
"notes": "Notizen",
"goToVoting": "Zur Abstimmung",
"voting": "🗳️ Abstimmung",
"turnToVote": "Jetzt abstimmen:",
"votesProgress": "Stimmen: {current}/{total}",
"@votesProgress": {
"placeholders": {
"current": {"type": "int"},
"total": {"type": "int"}
}
},
"whoIsImpostor": "Wer ist deiner Meinung nach der Hochstapler?",
"confirmVote": "Stimme bestätigen",
"votingComplete": "🗳️ Abstimmung abgeschlossen",
"allVoted": "Alle haben abgestimmt!",
"tapToReveal": "Tippen, um das Ergebnis aufzudecken",
"revealResult": "Ergebnis aufdecken",
"result": "Ergebnis",
"revealing": "Wird aufgedeckt...",
"wasImpostor": "War ein HOCHSTAPLER! 🎉",
"wasInnocent": "War UNSCHULDIG 😱",
"votesThisRound": "Stimmen dieser Runde",
"seeEndResult": "Endergebnis anzeigen",
"impostorGuessWord": "Errät der Hochstapler das Wort?",
"nextRound": "Nächste Runde",
"impostorGuessTitle": "🎯 Tipp des Hochstaplers",
"impostorCanGuess": "Der ausgeschiedene Hochstapler kann\nversuchen, das Wort zu erraten",
"ifCorrectImpostorsWin": "Bei richtigem Tipp gewinnen die Hochstapler!",
"guessWordHint": "Was glaubst du, ist das Wort?",
"dontGuess": "Nicht versuchen",
"guess": "Raten",
"correctGuess": "Richtig geraten!",
"theWordWas": "Das Wort war: {word}",
"@theWordWas": {
"placeholders": {
"word": {"type": "String"}
}
},
"impostorsWin": "Die Hochstapler gewinnen!",
"wrongGuess": "Falsch geraten!",
"gameContinues": "Das Spiel geht weiter...",
"gameOver": "Spielende",
"playersWin": "Die Spieler gewinnen!",
"theSecretWordWas": "🔍 Das Wort war:",
"categoryLabel": "Kategorie: {category}",
"@categoryLabel": {
"placeholders": {
"category": {"type": "String"}
}
},
"theImpostorWas": "🎭 Der Hochstapler war:",
"theImpostorsWere": "🎭 Die Hochstapler waren:",
"votingHistory": "📊 Abstimmungsverlauf",
"roundElimination": "Runde {round}: {name}",
"@roundElimination": {
"placeholders": {
"round": {"type": "int"},
"name": {"type": "String"}
}
},
"rematch": "Revanche",
"mainMenu": "Hauptmenü",
"notesTitle": "📝 Notizen",
"notesSaved": "Notizen gespeichert",
"whoAreYou": "Wer bist du?",
"selectYourName": "Wähle deinen Namen, um deine privaten Notizen zu sehen",
"notesOf": "Notizen von {name}",
"@notesOf": {
"placeholders": {
"name": {"type": "String"}
}
},
"notesAboutPlayers": "Notizen zu jedem Spieler",
"playerNoteHint": "Was hat er/sie gesagt? Verdächtig?",
"freeNote": "Freie Notiz",
"freeNoteHint": "Persönliche Notizen...",
"rulesTitle": "📖 Spielanleitung",
"rulesWhatIsTitle": "🎭 Was ist Der Hochstapler?",
"rulesWhatIsBody": "Ein soziales Deduktionsspiel für 3-20 Spieler. Alle erhalten ein geheimes Wort... außer der Hochstapler! Deine Mission: herausfinden, wer blufft.",
"rulesHowToPlayTitle": "🔍 Wie wird gespielt?",
"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!",
"rulesWhoWinsTitle": "🏆 Wer gewinnt?",
"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.",
"rulesTipsPlayersTitle": "💡 Tipps für Spieler",
"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!",
"rulesTipsImpostorTitle": "🎭 Tipps für den Hochstapler",
"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.",
"rulesModesTitle": "📱 Spielmodi",
"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.",
"rulesExampleTitle": "✏️ Beispielrunde",
"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!",
"joinGameTitle": "Spiel beitreten",
"multiDeviceMode": "Mehrere-Geräte-Modus",
"scanQrDescription": "Scanne den QR-Code des Hosts, um der Partie über Bluetooth/WiFi Direct beizutreten.",
"comingSoon": "Demnächst",
"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.",
"back": "Zurück",
"yes": "Ja",
"no": "Nein",
"cancel": "Abbrechen",
"accept": "Akzeptieren",
"next": "Weiter",
"settingsTitle": "Einstellungen",
"language": "Sprache",
"soundVolume": "Effektlautstärke",
"vibration": "Vibration",
"about": "Über",
"version": "Version",
"developer": "Entwickler",
"licenses": "Lizenzen"
}