Files
ReelShort/lib/l10n/app_zh.arb
T
Vicky e1b98df509 feat(client): C 端 1-2 账号链路(邮箱登录/注册 + 令牌与 401 + 匿名/登录分叉)
为什么:客户端此前完全没有账号概念(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 全过。
2026-10-15 17:53:35 +08:00

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": "暂不"
}