为什么:客户端此前完全没有账号概念(mine 页的"登录"只是本地 demo 开关), 而受限动作(收藏/评论)要对到具体账号。本批把账号链路接上,为后续互动、进度同步、下载打底。 - AuthApi + AuthController + AuthSessionStore:注册/登录/登出/刷新,令牌与设备号存 shared_preferences (用 SharedPreferencesAsync,与 engagement 仓库同一套 API) - ApiClient:统一带 Authorization 与 X-Device-Id;401 自动刷新一次并重试,刷新失败清登录态走 onUnauthorized - 登录/注册页(pages/auth,沿用 binding/logic/view 与现有视觉):邮箱格式、密码 8-64 位含字母数字本地先校验, 错误提示走 l10n;登录/注册一键切换 - 匿名/登录分叉:首页、发现、详情保持匿名可看;收藏/点赞等受限动作走 ensureSignedIn() 弹底部提示引导登录 - mine 页展示真实账号(昵称 + uid),拿不到才回落到演示文案 - 测试:新增 auth 控制器(注册落盘/401 刷新重试/刷新失败清会话/登出)与登录页(校验/切换)用例; widget_test 改为预置本地会话(账号不再是本地开关);修掉 playback 用例对 host 大小写的环境依赖断言 门禁:flutter analyze 0 问题;flutter test 148 全过。
180 lines
6.6 KiB
Plaintext
180 lines
6.6 KiB
Plaintext
{
|
|
"@@locale": "zh",
|
|
"appName": "Nontonki",
|
|
"demo": "演示",
|
|
"homeHeadline": "即刻观看",
|
|
"homeSubtitle": "免费短剧预览。",
|
|
"mediaNotice": "用户提供的本地演示视频 · 免费观看",
|
|
"featuredDemo": "精选 · 技术演示",
|
|
"demoTitle": "信号",
|
|
"demoSynopsis": "使用本地视频进行播放预览,后续有素材再增加剧集。",
|
|
"homeTab": "首页",
|
|
"openQuickMenu": "打开快捷菜单",
|
|
"quickAccess": "快捷入口",
|
|
"currentSeries": "当前短剧",
|
|
"discoverTab": "找剧",
|
|
"searchDiscover": "搜索短剧、演员、类型…",
|
|
"featured": "精选",
|
|
"suspense": "悬疑",
|
|
"romance": "都市爱情",
|
|
"actionGenre": "动作",
|
|
"filter": "筛选",
|
|
"topCharts": "排行榜",
|
|
"newReleases": "新剧",
|
|
"trendingMicroDramas": "热门短剧",
|
|
"seeAll": "查看全部",
|
|
"artworkOnly": "海报展示",
|
|
"artworkOnlyNotice": "这张海报仅用于目录展示,暂时没有可播放视频。",
|
|
"videoPending": "视频待提供",
|
|
"watchNow": "免费观看",
|
|
"noSearchResults": "没有匹配的短剧。",
|
|
"demoCatalogNotice": "三部演示短剧共用同一条本地视频。",
|
|
"myTab": "我的",
|
|
"localViewer": "本地观众",
|
|
"localDemoProfile": "本地演示档案",
|
|
"continueWatching": "继续观看",
|
|
"watchedPercent": "已观看 {percent}%",
|
|
"@watchedPercent": {"placeholders": {"percent": {"type": "int"}}},
|
|
"resume": "继续播放",
|
|
"history": "历史",
|
|
"watchlist": "追剧",
|
|
"likedTab": "喜欢",
|
|
"all": "全部",
|
|
"inProgress": "未看完",
|
|
"completed": "已看完",
|
|
"noSavedShows": "这里还没有剧集。",
|
|
"preferences": "偏好设置",
|
|
"appLanguage": "应用语言",
|
|
"followingTab": "关注",
|
|
"animatedTab": "漫剧",
|
|
"recommendedTab": "推荐",
|
|
"noCategoryDramas": "这个分类暂时没有剧集。",
|
|
"trendingTab": "热门",
|
|
"liveActionTab": "真人剧",
|
|
"search": "搜索",
|
|
"free": "免费",
|
|
"mute": "静音",
|
|
"unmute": "取消静音",
|
|
"like": "喜欢",
|
|
"save": "收藏",
|
|
"comments": "评论",
|
|
"share": "分享",
|
|
"localOnlyComments": "仅在本机可见",
|
|
"noComments": "还没有评论。",
|
|
"writeComment": "写评论",
|
|
"postComment": "发布",
|
|
"shareFailed": "无法打开系统分享面板。",
|
|
"nowPlaying": "正在播放",
|
|
"watchFullscreen": "横屏全屏观看",
|
|
"exitFullscreen": "退出全屏",
|
|
"pictureInPicture": "画中画",
|
|
"pipUnavailable": "此设备无法使用画中画",
|
|
"originalTag": "原创",
|
|
"dramaTag": "短剧",
|
|
"episodeLabel": "第 {number} 集",
|
|
"@episodeLabel": {"placeholders": {"number": {"type": "int"}}},
|
|
"exploreSeries": "查看剧集",
|
|
"episodeCount": "{count} 集",
|
|
"technicalDemoCount": "免费试看 · {count} 集",
|
|
"episodes": "选集",
|
|
"watchEpisodeOne": "观看第 1 集",
|
|
"continueEpisode": "续看第 {number} 集",
|
|
"freeTestMedia": "复用同一演示视频 · 免费",
|
|
"lockedStoreUnavailable": "已锁定 · 商店未配置",
|
|
"freeTestClip": "免费测试片",
|
|
"locked": "已锁定",
|
|
"freeSamplesNotice": "前两集免费 · 商店配置待完成",
|
|
"demoTestMedia": "免费 · 同一演示视频",
|
|
"episodeProgress": "第 {number} / {total} 集",
|
|
"testVideoNotice": "自行生成的技术测试视频",
|
|
"lockedTitle": "第 {number} 集已锁定",
|
|
"lockedBody": "完成商店与服务端验单配置后才能解锁。本演示目前不处理付款。",
|
|
"playbackError": "此视频暂时无法播放。",
|
|
"catalogError": "剧目列表加载失败。",
|
|
"detailError": "剧集信息加载失败。",
|
|
"noMediaNotice": "该剧集还没有可播放的片源。",
|
|
"noStories": "暂无剧目。",
|
|
"retry": "重试",
|
|
"backToSeries": "返回剧集详情",
|
|
"nextEpisode": "下一集",
|
|
"pause": "暂停",
|
|
"play": "播放",
|
|
"seekVideo": "拖动播放进度",
|
|
"seekFailed": "无法调整播放进度。",
|
|
"captions": "字幕",
|
|
"captionsOff": "关闭字幕",
|
|
"englishCaptions": "英文字幕",
|
|
"chineseCaptions": "简体中文字幕",
|
|
"language": "界面语言",
|
|
"systemLanguage": "跟随系统",
|
|
"english": "English",
|
|
"simplifiedChinese": "简体中文",
|
|
"episodeOneTitle": "初见微光",
|
|
"episodeTwoTitle": "新的频率",
|
|
"episodeThreeTitle": "越过边界",
|
|
"episodeFourTitle": "回声之后",
|
|
"dramaSignalTitle": "信号",
|
|
"dramaSignalSynopsis": "一部竖屏连播的演示短剧,每一集都使用同一段本地视频。",
|
|
"dramaCityTitle": "都市灯火与丝绒夜",
|
|
"dramaCitySynopsis": "一部都市爱情演示短剧,用同一段本地视频体验切换和续看。",
|
|
"dramaVengeanceTitle": "复仇崛起",
|
|
"dramaVengeanceSynopsis": "一部动作演示短剧,用同一段本地视频体验切换和续看。",
|
|
"dramaEchoesTitle": "命运回声",
|
|
"genreSuspenseMystery": "悬疑 · 推理",
|
|
"genreUrbanRomance": "都市爱情",
|
|
"genreActionThriller": "动作 · 惊悚",
|
|
"genreDramaMystery": "剧情 · 悬疑",
|
|
"continueWatchingHeading": "继续观看",
|
|
"preferencesHeading": "偏好设置",
|
|
"brandMark": "NONTONKI · 演示",
|
|
"shareFooter": "Nontonki 演示",
|
|
"shortsTab": "短剧",
|
|
"myListTab": "片单",
|
|
"watchFull": "看全集",
|
|
"swipeForNext": "上滑看下一部",
|
|
"clearScreen": "清屏",
|
|
"exitClearScreen": "退出清屏",
|
|
"logIn": "登录",
|
|
"logInHint": "登录后保存金币和片单",
|
|
"rewards": "奖励",
|
|
"forYou": "为你推荐",
|
|
"hot": "热门",
|
|
"newest": "最新",
|
|
"favorite": "收藏",
|
|
"myAccount": "我的账户",
|
|
"coins": "金币",
|
|
"topUpWallet": "充值",
|
|
"vipMembership": "会员",
|
|
"notActive": "未开通",
|
|
"joinVip": "开通会员",
|
|
"earnRewards": "赚奖励",
|
|
"freeBonus": "领免费奖励",
|
|
"watchHistory": "观看历史",
|
|
"settings": "设置",
|
|
"signOut": "退出登录",
|
|
"mockUserName": "Vicky sheng",
|
|
"mockUserId": "ID: M1CZWVYE",
|
|
"mockNotice": "当前是示例数据。",
|
|
"topBadge": "TOP 1",
|
|
"signIn": "登录",
|
|
"signUp": "注册",
|
|
"authSignInTitle": "欢迎回来",
|
|
"authSignUpTitle": "创建账号",
|
|
"authSubtitle": "用邮箱和密码登录。",
|
|
"authEmailLabel": "邮箱",
|
|
"authPasswordLabel": "密码",
|
|
"authPasswordHint": "至少 8 位,需包含字母和数字",
|
|
"authEmailRequired": "请输入邮箱",
|
|
"authEmailInvalid": "邮箱格式不正确",
|
|
"authPasswordRequired": "请输入密码",
|
|
"authPasswordLength": "密码长度需在 8-64 位之间",
|
|
"authPasswordWeak": "密码需同时包含字母和数字",
|
|
"authNetworkError": "网络异常,请稍后重试",
|
|
"authSwitchToSignUp": "还没有账号?去注册",
|
|
"authSwitchToSignIn": "已有账号?去登录",
|
|
"authGateTitle": "登录后可继续",
|
|
"authGateMessage": "收藏、评论等操作需要登录。",
|
|
"authGateAction": "去登录",
|
|
"cancel": "暂不"
|
|
}
|