Files
farolero/lib/l10n/app_zh.arb
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

387 lines
15 KiB
Plaintext

{
"@@locale": "zh",
"appTitle": "冒牌者",
"subtitle": "社交推理游戏",
"loadingWords": "正在加载词汇...",
"matchRewards": "游戏奖励",
"newMedals": "新奖牌",
"noNewMedalsKeepFire": "这次没有新奖牌。继续积累火焰。",
"calculatingRewards": "正在计算奖励...",
"fireLabel": "火焰",
"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": "许可证",
"scanThisCodeFromAnotherPhone": "用另一部手机扫描此代码",
"gameUsers": "游戏用户",
"selectedPlayers": "已选择的玩家",
"connectedPhones": "已连接的手机",
"selectedOnThisPhone": "已在此手机上选择",
"selectedByAnotherDevice": "已在另一台设备上选择",
"available": "可用",
"notAvailable": "不可用",
"release": "释放",
"select": "选择",
"delete": "删除",
"selectAtLeastThreeUsersToStart": "至少选择 3 名用户才能开始。",
"hostPhoneMustSelectUser": "房主的手机必须至少选择一名用户。",
"roomNoLongerInLobby": "房间已不在等候大厅。",
"completeUserSelectionToStart": "完成用户选择后才能开始。",
"preparingSecureRoom": "正在准备安全房间",
"searchingNearbyBluetoothGames": "正在通过蓝牙搜索附近的游戏",
"tapToJoin": "点击加入",
"bluetoothLocationPermissionsRequired": "搜索游戏需要蓝牙和定位权限。",
"bluetoothLocationPermissionsShort": "需要蓝牙和定位权限",
"couldNotStartSearch": "无法开始搜索。请检查蓝牙和定位。",
"couldNotConnectToHost": "无法连接到 {host}",
"room": "房间",
"singleDeviceSubtitle": "在这台设备上游戏",
"singleDeviceDescription": "适合大家传着手机一起玩。设置快速直接。",
"multiDeviceSubtitle": "每位玩家用自己的手机",
"multiDeviceDescription": "创建高级房间,分享二维码,并在大厅管理用户。",
"singleDeviceGameLabel": "本机游戏",
"multiDeviceGameLabel": "多设备游戏",
"mainDeviceUser": "本机主用户",
"couldNotCreateRoom": "无法创建房间。请检查蓝牙。",
"cannotStartWithReason": "无法开始:{reason}",
"invalidRoom": "无效的房间",
"defaultPlayerName": "玩家",
"play": "开始",
"history": "历史",
"mainTagline": "在太晚之前找出冒牌者",
"deviceProfile": "设备档案",
"profileName": "名称",
"profileNick": "昵称",
"save": "保存",
"automaticLanguage": "自动",
"noSavedGames": "还没有保存的游戏。",
"errorNoGame": "错误:没有游戏",
"disconnectedPlayersWarning": "有玩家的设备已断开连接。",
"assumeOnThisPhone": "在此手机上接管",
"noResult": "无结果",
"historyGameSummary": "$players 名玩家 • $impostors 名冒牌者 • $rounds 回合\n$word • $category",
"@historyGameSummary": {
"placeholders": {
"players": {
"type": "int"
},
"impostors": {
"type": "int"
},
"rounds": {
"type": "int"
},
"word": {
"type": "String"
},
"category": {
"type": "String"
}
}
},
"voteOf": "{name} 的投票",
"@voteOf": {
"placeholders": {
"name": {
"type": "String"
}
}
},
"firstTurnInstruction": "{name} 先说出自己的词。",
"@firstTurnInstruction": {
"placeholders": {
"name": {
"type": "String"
}
}
},
"debate": "🗣️ 讨论",
"scanToJoin": "扫描二维码加入",
"connectedPlayers": "已连接的玩家",
"hostGame": "游戏管理",
"waitingPlayersSeeWord": "等待所有人查看自己的词语…",
"activePlayers": "在场玩家",
"playersVoted": "已投票",
"waitingVoting": "等待投票…",
"waitingForPlayers": "等待玩家…",
"needMorePlayers": "还需要 {count} 名玩家",
"starting": "正在开始…",
"enterNameAndScan": "输入你的名字并扫描房主的二维码",
"yourName": "你的名字",
"nameRequired": "请输入你的名字",
"connectingTo": "正在连接",
"scanQR": "扫描二维码",
"scanHostQR": "对准房主的二维码",
"connectedWaiting": "已连接!",
"waitingForHost": "等待房主开始游戏…",
"enterNameToSearch": "输入你的名字以搜索附近的游戏",
"searchGames": "搜索游戏",
"searchingGames": "正在搜索附近的游戏…",
"noGamesFound": "未找到游戏",
"noGamesFoundHint": "请确认房主已开启房间,且你们距离较近",
"orScanQR": "没有显示?扫描房主的二维码",
"iveSeenIt": "我看过了",
"clueIs": "提示:{category}",
"debatePhaseActive": "讨论阶段进行中",
"debateInstructions": "互相讨论,说出你认为谁是卧底。准备好后请求投票。",
"solicitarVotacion": "请求投票",
"votacionSolicitada": "已请求投票",
"whoDoYouThinkIsTheImpostor": "谁是卧底?",
"selectOnePlayer": "选择要投票的玩家",
"votar": "投票",
"selectYourProfile": "你的资料",
"selectProfile": "选择一个资料",
"createNewUser": "创建新用户",
"userNameRequired": "名字不能为空",
"profileSelected": "已选择资料",
"availableProfiles": "可用资料",
"impostorsKnowEachOther": "🎭 卧底互相知晓",
"impostorsKnowEachOtherDescription": "每个卧底都会看到其他卧底的名字",
"impostorsKnowEachOtherNeedsTwo": "仅在 2 名或以上卧底时生效",
"otherImpostorsTitle": "{count, plural, =1{另一名卧底} other{其他卧底}}",
"youAreTheOnlyImpostor": "你是唯一的卧底",
"impostorsAdjusted": "已根据玩家人数将卧底调整为 {count} 名",
"eliminatedCannotVote": "你已出局,不能再投票",
"reconnecting": "正在重新连接…",
"reconnectingHint": "与房主的连接已断开。你在游戏中的位置仍为你保留。",
"leaveGame": "退出游戏",
"playerRejoined": "{name} 已重新加入游戏",
"leaveGameTitle": "要退出游戏吗?",
"leaveGameSingleDevice": "正在进行的游戏将会丢失,且无法恢复。",
"leaveGameHost": "你是房主:一旦退出,所有玩家的游戏都会结束。",
"leaveGameClient": "你将退出这局游戏。只要房主还开着,你随时可以回来。",
"stayInGame": "继续游戏",
"permissionsNeededTitle": "需要权限",
"permissionsNeededBody": "多人游戏模式需要以下权限:",
"openAppSettingsQuestion": "要打开应用设置吗?",
"openSettings": "打开设置",
"permissionLocation": "定位",
"permissionBluetoothAdvertise": "蓝牙(广播)",
"permissionBluetoothConnect": "蓝牙(连接)",
"permissionBluetoothScan": "蓝牙(扫描)",
"permissionNearbyWifi": "附近的 Wi-Fi"
}