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_nl.arb Normal file
View File

@@ -0,0 +1,224 @@
{
"@@locale": "nl",
"appTitle": "De Bedrieger",
"subtitle": "Sociaal deductiespel",
"loadingWords": "Woorden laden...",
"playersRange": "3-20 spelers • Zonder internet",
"createGame": "Spel aanmaken",
"joinGame": "Deelnemen aan spel",
"howToPlay": "Hoe te spelen",
"settings": "Instellingen",
"gameMode": "Spelmodus",
"singleDevice": "Eén toestel",
"multiDevice": "Meerdere toestellen",
"category": "Categorie",
"categoryAll": "Alle",
"categoryAnimals": "Dieren",
"categoryFood": "Eten",
"categoryCountries": "Landen",
"categorySports": "Sport",
"categoryProfessions": "Beroepen",
"categoryObjects": "Voorwerpen",
"categoryPlaces": "Plaatsen",
"categoryMovies": "Films",
"categoryMusic": "Muziek",
"categoryTechnology": "Technologie",
"playersCount": "Spelers ({count})",
"@playersCount": {
"placeholders": {
"count": {"type": "int"}
}
},
"playersRangeHint": "3-20",
"playerNameHint": "Naam van de speler",
"playerAlreadyExists": "Er bestaat al een speler met die naam",
"maxPlayersReached": "Maximaal 20 spelers",
"minPlayersRequired": "Er zijn minstens 3 spelers nodig",
"configuration": "Configuratie",
"impostors": "🎭 Bedriegers",
"impostorClue": "🔍 Aanwijzing voor bedrieger",
"impostorClueDescription": "De bedrieger kent de categorie",
"debateTime": "⏱️ Debattijd",
"noLimit": "Geen limiet",
"oneMin": "1 min",
"twoMin": "2 min",
"threeMin": "3 min",
"fiveMin": "5 min",
"startGame": "Spel starten",
"seeYourWord": "Bekijk je woord",
"eachPlayerMustSee": "Elke speler moet zijn woord in het geheim bekijken",
"roundNumber": "Ronde {round}",
"@roundNumber": {
"placeholders": {
"round": {"type": "int"}
}
},
"alreadySeen": "Heeft zijn woord al gezien",
"tapToSee": "Tik om te bekijken",
"allSeenStartDebate": "Iedereen heeft gezien → Start debat",
"playersRemaining": "Nog {count} spelers",
"@playersRemaining": {
"placeholders": {
"count": {"type": "int"}
}
},
"youAreImpostor": "Jij bent de bedrieger!",
"yourWordIs": "Jouw woord is:",
"clueCategory": "Aanwijzing: {category}",
"@clueCategory": {
"placeholders": {
"category": {"type": "String"}
}
},
"holdToSeeWord": "Houd ingedrukt om je woord te zien",
"makeSureNoOneLooks": "Zorg dat niemand anders kijkt",
"showingWord": "👁️ Wordt getoond...",
"holdToSee": "👆 Houd ingedrukt om te zien",
"seenMyWord": "Ik heb mijn woord gezien",
"debateRound": "Debat - Ronde {round}",
"@debateRound": {
"placeholders": {
"round": {"type": "int"}
}
},
"timeUp": "⏰ Tijd is om!",
"timeRemaining": "⏱️ Resterende tijd",
"playersInDebate": "Spelers in debat",
"activePlayersInfo": "{active} actief • {impostors} verborgen bedrieger(s)",
"@activePlayersInfo": {
"placeholders": {
"active": {"type": "int"},
"impostors": {"type": "int"}
}
},
"eliminated": "Geëlimineerd",
"notes": "Notities",
"goToVoting": "Naar stemming",
"voting": "🗳️ Stemming",
"turnToVote": "Beurt om te stemmen:",
"votesProgress": "Stemmen: {current}/{total}",
"@votesProgress": {
"placeholders": {
"current": {"type": "int"},
"total": {"type": "int"}
}
},
"whoIsImpostor": "Wie is volgens jou de bedrieger?",
"confirmVote": "Stem bevestigen",
"votingComplete": "🗳️ Stemming voltooid",
"allVoted": "Iedereen heeft gestemd!",
"tapToReveal": "Tik om het resultaat te onthullen",
"revealResult": "Resultaat onthullen",
"result": "Resultaat",
"revealing": "Onthullen...",
"wasImpostor": "Was de BEDRIEGER! 🎉",
"wasInnocent": "Was ONSCHULDIG 😱",
"votesThisRound": "Stemmen deze ronde",
"seeEndResult": "Eindresultaat bekijken",
"impostorGuessWord": "Raadt de bedrieger het woord?",
"nextRound": "Volgende ronde",
"impostorGuessTitle": "🎯 Gok van de bedrieger",
"impostorCanGuess": "De geëlimineerde bedrieger mag\nproberen het woord te raden",
"ifCorrectImpostorsWin": "Als het klopt, winnen de bedriegers!",
"guessWordHint": "Wat denk je dat het woord is?",
"dontGuess": "Niet proberen",
"guess": "Raden",
"correctGuess": "Goed geraden!",
"theWordWas": "Het woord was: {word}",
"@theWordWas": {
"placeholders": {
"word": {"type": "String"}
}
},
"impostorsWin": "De bedriegers winnen!",
"wrongGuess": "Fout geraden!",
"gameContinues": "Het spel gaat verder...",
"gameOver": "Einde van het spel",
"playersWin": "De spelers winnen!",
"theSecretWordWas": "🔍 Het woord was:",
"categoryLabel": "Categorie: {category}",
"@categoryLabel": {
"placeholders": {
"category": {"type": "String"}
}
},
"theImpostorWas": "🎭 De bedrieger was:",
"theImpostorsWere": "🎭 De bedriegers waren:",
"votingHistory": "📊 Stemgeschiedenis",
"roundElimination": "Ronde {round}: {name}",
"@roundElimination": {
"placeholders": {
"round": {"type": "int"},
"name": {"type": "String"}
}
},
"rematch": "Herkansing",
"mainMenu": "Hoofdmenu",
"notesTitle": "📝 Notities",
"notesSaved": "Notities opgeslagen",
"whoAreYou": "Wie ben je?",
"selectYourName": "Selecteer je naam om je privénotities te bekijken",
"notesOf": "Notities van {name}",
"@notesOf": {
"placeholders": {
"name": {"type": "String"}
}
},
"notesAboutPlayers": "Aantekeningen over elke speler",
"playerNoteHint": "Wat heeft hij gezegd? Verdacht?",
"freeNote": "Vrije notitie",
"freeNoteHint": "Persoonlijke aantekeningen...",
"rulesTitle": "📖 Hoe te spelen",
"rulesWhatIsTitle": "🎭 Wat is De Bedrieger?",
"rulesWhatIsBody": "Een sociaal deductiespel voor 3-20 spelers. Iedereen krijgt een geheim woord... behalve de bedrieger! Jouw missie: ontdek wie doet alsof.",
"rulesHowToPlayTitle": "🔍 Hoe speel je?",
"rulesHowToPlayBody": "1. Rollen worden verdeeld: iedereen krijgt hetzelfde woord, behalve de bedrieger(s).\n\n2. Debat: om de beurt beschrijft elke speler het woord ZONDER het direct te zeggen. De bedrieger moet doen alsof hij het kent.\n\n3. Stemming: na het debat stemt iedereen op wie volgens hen de bedrieger is.\n\n4. Eliminatie: de speler met de meeste stemmen wordt geëlimineerd en het wordt onthuld of het de bedrieger was of niet.\n\n5. Als het de bedrieger was, mag hij proberen het woord te raden. Als het klopt, winnen de bedriegers!",
"rulesWhoWinsTitle": "🏆 Wie wint?",
"rulesWhoWinsBody": "• Spelers: winnen als ze ALLE bedriegers elimineren.\n• Bedriegers: winnen als ze niet ontdekt worden totdat er evenveel of minder gewone spelers dan bedriegers over zijn, of als ze het woord raden na eliminatie.",
"rulesTipsPlayersTitle": "💡 Tips voor spelers",
"rulesTipsPlayersBody": "• Geef subtiele hints die laten zien dat je het woord kent, maar niet zo duidelijk dat de bedrieger ze kan gebruiken.\n• Let op wie vage of algemene antwoorden geeft.\n• Gebruik de notities om op te schrijven wat iedereen zegt.\n• Zeg het woord niet direct — dat helpt de bedrieger!",
"rulesTipsImpostorTitle": "🎭 Tips voor de bedrieger",
"rulesTipsImpostorBody": "• Luister goed naar de hints van anderen.\n• Probeer het woord af te leiden om geloofwaardige hints te geven.\n• Spreek niet als eerste als je niet zeker bent.\n• Als je de categorie als hint krijgt, gebruik die in je voordeel.\n• Beschuldig anderen om de aandacht af te leiden.",
"rulesModesTitle": "📱 Spelmodi",
"rulesModesBody": "• Eén toestel: iedereen deelt hetzelfde apparaat. Elke speler ziet zijn woord door een knop ingedrukt te houden.\n\n• Meerdere toestellen: elke speler gebruikt zijn eigen apparaat. Ze verbinden via Bluetooth/WiFi Direct zonder internet.",
"rulesExampleTitle": "✏️ Voorbeeldspel",
"rulesExampleBody": "Geheim woord: \"Pizza\"\n\n• Jan: \"Je eet het warm\" ✓\n• Sanne: \"Het komt in een doos\" ✓\n• Bram (bedrieger): \"Het is heel populair\" 🤔\n• Lisa: \"Het heeft kaas\" ✓\n\nBram gaf een heel vaag antwoord... Verdacht!",
"joinGameTitle": "Deelnemen aan spel",
"multiDeviceMode": "Modus meerdere toestellen",
"scanQrDescription": "Scan de QR-code die de host toont om verbinding te maken met het spel via Bluetooth/WiFi Direct.",
"comingSoon": "Binnenkort",
"nearbyNotAvailable": "De multitoestelverbinding met Nearby Connections vereist fysieke Android-apparaten.\n\nGebruik voorlopig de modus \"Eén toestel\" om op een gedeeld apparaat te spelen.",
"back": "Terug",
"yes": "Ja",
"no": "Nee",
"cancel": "Annuleren",
"accept": "Accepteren",
"next": "Volgende",
"settingsTitle": "Instellingen",
"language": "Taal",
"soundVolume": "Effectvolume",
"vibration": "Trillen",
"about": "Over",
"version": "Versie",
"developer": "Ontwikkelaar",
"licenses": "Licenties"
}