后端接口从 6 个扩到 13 个,全部走真数据:
- 新增 api:playback_api(/app/episodes/{id}/play)、watch_api(/app/watch/*)、
library_api(/app/favorites*);票据从 CatalogApi 搬到 PlaybackApi
- 新增 repository:PlaybackRepository(含票据 TTL 缓存,默认 10 分钟,时钟可注入)、
FavoriteRepository、WatchHistoryRepository 换成服务端模型(每剧一条续看记录,删掉 demoProfileId)
- PlayerLogic:起播前取票(拿不到给三态 UI,失败可重试);accessType 驱动锁定文案,
不在前端猜;签名地址原样交给播放器(只补 host,不动 path/query);
进度上报节流 5s → 10s,切集/退出/切后台各补一次,播完带 finished
- 续看定位:服务端记录里的那一集才 seek(其它集从头播),续看位置进详情/播放页时读一次
- FavoriteController:收藏以服务端为准,乐观更新 + 失败回滚;退出登录清空
- UI 三态:详情页(加载/失败可重试/空剧集 + 续看进度条 + 收藏按钮)、
播放页(票据加载中/失败可重试/后端判定不可播)、我的页(续看失败可重试、收藏三态、最近观看)
- l10n 新增 8 个键(en/zh/id 三份):网络/进度/收藏失败、锁定提示、续看文案等
测试:flutter test 188 全过(存量 27 个测试文件未跑红);新增票据过期重取、进度节流、
续看定位、收藏回滚、签名 query 原样保留、真实后端端到端联调(live_watch_flow)
206 lines
7.2 KiB
Plaintext
206 lines
7.2 KiB
Plaintext
{
|
|
"@@locale": "zh",
|
|
"appName": "FruitShorts",
|
|
"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": "FRUITSHORTS",
|
|
"shareFooter": "FruitShorts",
|
|
"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": "暂不",
|
|
"noEpisodesYet": "还没有可播放的剧集。",
|
|
"networkError": "网络异常,请检查网络后重试。",
|
|
"progressError": "续看进度加载失败。",
|
|
"favoritesError": "收藏列表加载失败。",
|
|
"favoriteToggleFailed": "收藏操作失败,请重试。",
|
|
"remove": "移除",
|
|
"unlockComingSoon": "金币解锁功能即将开放。",
|
|
"resumeProgress": "续看至 {position} / {total}",
|
|
"@resumeProgress": {
|
|
"placeholders": {
|
|
"position": {},
|
|
"total": {}
|
|
}
|
|
}
|
|
}
|