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

@@ -0,0 +1,224 @@
{
"@@locale": "zh",
"appTitle": "冒牌者",
"subtitle": "社交推理游戏",
"loadingWords": "正在加载词汇...",
"playersRange": "3-20名玩家 • 无需联网",
"createGame": "创建游戏",
"joinGame": "加入游戏",
"howToPlay": "玩法介绍",
"settings": "设置",
"gameMode": "游戏模式",
"singleDevice": "单设备",
"multiDevice": "多设备",
"category": "分类",
"categoryAll": "全部",
"categoryAnimals": "动物",
"categoryFood": "食物",
"categoryCountries": "国家",
"categorySports": "运动",
"categoryProfessions": "职业",
"categoryObjects": "物品",
"categoryPlaces": "地点",
"categoryMovies": "电影",
"categoryMusic": "音乐",
"categoryTechnology": "科技",
"playersCount": "玩家 ({count})",
"@playersCount": {
"placeholders": {
"count": {"type": "int"}
}
},
"playersRangeHint": "3-20",
"playerNameHint": "玩家名称",
"playerAlreadyExists": "已存在同名玩家",
"maxPlayersReached": "最多20名玩家",
"minPlayersRequired": "至少需要3名玩家",
"configuration": "配置",
"impostors": "🎭 冒牌者",
"impostorClue": "🔍 给冒牌者的提示",
"impostorClueDescription": "冒牌者可以知道分类",
"debateTime": "⏱️ 讨论时间",
"noLimit": "不限时",
"oneMin": "1分钟",
"twoMin": "2分钟",
"threeMin": "3分钟",
"fiveMin": "5分钟",
"startGame": "开始游戏",
"seeYourWord": "查看你的词语",
"eachPlayerMustSee": "每位玩家需要秘密查看自己的词语",
"roundNumber": "第 {round} 轮",
"@roundNumber": {
"placeholders": {
"round": {"type": "int"}
}
},
"alreadySeen": "已查看词语",
"tapToSee": "点击查看",
"allSeenStartDebate": "全员已查看 → 开始讨论",
"playersRemaining": "还剩 {count} 位玩家",
"@playersRemaining": {
"placeholders": {
"count": {"type": "int"}
}
},
"youAreImpostor": "你是冒牌者!",
"yourWordIs": "你的词语是:",
"clueCategory": "提示:{category}",
"@clueCategory": {
"placeholders": {
"category": {"type": "String"}
}
},
"holdToSeeWord": "长按查看你的词语",
"makeSureNoOneLooks": "确保没有其他人在看",
"showingWord": "👁️ 显示中...",
"holdToSee": "👆 长按查看",
"seenMyWord": "我已看过词语",
"debateRound": "讨论 - 第 {round} 轮",
"@debateRound": {
"placeholders": {
"round": {"type": "int"}
}
},
"timeUp": "⏰ 时间到!",
"timeRemaining": "⏱️ 剩余时间",
"playersInDebate": "参与讨论的玩家",
"activePlayersInfo": "{active} 名在场 • {impostors} 名冒牌者潜伏中",
"@activePlayersInfo": {
"placeholders": {
"active": {"type": "int"},
"impostors": {"type": "int"}
}
},
"eliminated": "已淘汰",
"notes": "笔记",
"goToVoting": "前往投票",
"voting": "🗳️ 投票",
"turnToVote": "轮到你投票:",
"votesProgress": "投票:{current}/{total}",
"@votesProgress": {
"placeholders": {
"current": {"type": "int"},
"total": {"type": "int"}
}
},
"whoIsImpostor": "你认为谁是冒牌者?",
"confirmVote": "确认投票",
"votingComplete": "🗳️ 投票结束",
"allVoted": "所有人已投票!",
"tapToReveal": "点击揭晓结果",
"revealResult": "揭晓结果",
"result": "结果",
"revealing": "揭晓中...",
"wasImpostor": "是冒牌者! 🎉",
"wasInnocent": "是无辜的 😱",
"votesThisRound": "本轮投票情况",
"seeEndResult": "查看最终结果",
"impostorGuessWord": "冒牌者要猜词吗?",
"nextRound": "下一轮",
"impostorGuessTitle": "🎯 冒牌者猜词",
"impostorCanGuess": "被淘汰的冒牌者可以\n尝试猜出词语",
"ifCorrectImpostorsWin": "如果猜对,冒牌者获胜!",
"guessWordHint": "你认为词语是什么?",
"dontGuess": "不猜",
"guess": "猜词",
"correctGuess": "猜对了!",
"theWordWas": "词语是:{word}",
"@theWordWas": {
"placeholders": {
"word": {"type": "String"}
}
},
"impostorsWin": "冒牌者获胜!",
"wrongGuess": "猜错了!",
"gameContinues": "游戏继续...",
"gameOver": "游戏结束",
"playersWin": "玩家获胜!",
"theSecretWordWas": "🔍 词语是:",
"categoryLabel": "分类:{category}",
"@categoryLabel": {
"placeholders": {
"category": {"type": "String"}
}
},
"theImpostorWas": "🎭 冒牌者是:",
"theImpostorsWere": "🎭 冒牌者们是:",
"votingHistory": "📊 投票历史",
"roundElimination": "第 {round} 轮:{name}",
"@roundElimination": {
"placeholders": {
"round": {"type": "int"},
"name": {"type": "String"}
}
},
"rematch": "再来一局",
"mainMenu": "主菜单",
"notesTitle": "📝 笔记",
"notesSaved": "笔记已保存",
"whoAreYou": "你是谁?",
"selectYourName": "选择你的名字查看个人笔记",
"notesOf": "{name}的笔记",
"@notesOf": {
"placeholders": {
"name": {"type": "String"}
}
},
"notesAboutPlayers": "关于每位玩家的记录",
"playerNoteHint": "他说了什么?可疑吗?",
"freeNote": "自由笔记",
"freeNoteHint": "个人记录...",
"rulesTitle": "📖 玩法介绍",
"rulesWhatIsTitle": "🎭 什么是冒牌者?",
"rulesWhatIsBody": "一款3-20人的社交推理游戏。每个人都会收到一个秘密词语......除了冒牌者!你的任务:找出谁在假装。",
"rulesHowToPlayTitle": "🔍 怎么玩?",
"rulesHowToPlayBody": "1. 分配角色:所有人收到相同的词语,但冒牌者除外。\n\n2. 讨论:轮流发言,每位玩家描述词语但不能直接说出来。冒牌者必须假装知道词语。\n\n3. 投票:讨论结束后,所有人投票选出他们认为的冒牌者。\n\n4. 淘汰:得票最多的玩家被淘汰,并揭晓其是否为冒牌者。\n\n5. 如果是冒牌者,可以尝试猜出词语。猜对则冒牌者获胜!",
"rulesWhoWinsTitle": "🏆 谁能赢?",
"rulesWhoWinsBody": "• 玩家:淘汰所有冒牌者即可获胜。\n• 冒牌者:如果未被识破,坚持到普通玩家人数等于或少于冒牌者人数即可获胜;或者在被淘汰时猜对词语也能获胜。",
"rulesTipsPlayersTitle": "💡 给玩家的建议",
"rulesTipsPlayersBody": "• 给出能证明你知道词语的微妙提示,但不要太明显以至于被冒牌者利用。\n• 留意那些给出模糊或笼统回答的人。\n• 利用笔记记录每个人说的话。\n• 不要直接说出词语,那会帮到冒牌者!",
"rulesTipsImpostorTitle": "🎭 给冒牌者的建议",
"rulesTipsImpostorBody": "• 仔细聆听其他人的提示。\n• 尝试推断词语,以便给出可信的提示。\n• 如果没有把握,不要第一个发言。\n• 如果给了你分类提示,好好利用它。\n• 指控别人来转移注意力。",
"rulesModesTitle": "📱 游戏模式",
"rulesModesBody": "• 单设备:所有人共享一台设备。每位玩家通过长按按钮查看自己的词语。\n\n• 多设备:每位玩家使用自己的设备。通过蓝牙/WiFi Direct连接无需联网。",
"rulesExampleTitle": "✏️ 游戏示例",
"rulesExampleBody": "秘密词语:\"披萨\"\n\n• 小明:\"趁热吃的\" ✓\n• 小红:\"装在盒子里的\" ✓\n• 小丽(冒牌者):\"非常受欢迎\" 🤔\n• 小刚:\"上面有芝士\" ✓\n\n小丽的回答太笼统了......可疑!",
"joinGameTitle": "加入游戏",
"multiDeviceMode": "多设备模式",
"scanQrDescription": "扫描房主显示的二维码,通过蓝牙/WiFi Direct连接到游戏。",
"comingSoon": "即将推出",
"nearbyNotAvailable": "多设备连接的Nearby Connections功能需要实体Android设备。\n\n目前请使用\"单设备\"模式,在一台共享设备上进行游戏。",
"back": "返回",
"yes": "是",
"no": "否",
"cancel": "取消",
"accept": "确定",
"next": "下一步",
"settingsTitle": "设置",
"language": "语言",
"soundVolume": "音效音量",
"vibration": "振动",
"about": "关于",
"version": "版本",
"developer": "开发者",
"licenses": "许可证"
}