feat(flutter): 接入分类记录收藏与下载授权

This commit is contained in:
Zhou Weidong committed 2026-10-17 14:49:16 +08:00
1 parent 00280ca0da
commit cc4d7c5a9d
52 files changed
+4440 -171

No files matched your search

+78 -1
View File
@@ -141,6 +141,7 @@
"lockedBody": "Unlocking will be available after store and verification setup. This demo does not process payments.",
"playbackError": "This clip could not be played.",
"catalogError": "The catalog could not be loaded.",
"categoriesError": "Categories could not be loaded.",
"detailError": "The episode list could not be loaded.",
"noMediaNotice": "This episode has no playable media yet.",
"noStories": "No stories available yet.",
@@ -223,7 +224,7 @@
"authSwitchToSignUp": "New here? Create an account",
"authSwitchToSignIn": "Already have an account? Sign in",
"authGateTitle": "Sign in to continue",
"authGateMessage": "Favorites and comments need an account.",
"authGateMessage": "Watch history, favorites, comments and downloads need an account.",
"authGateAction": "Sign In",
"cancel": "Not now",
"noEpisodesYet": "No playable episodes yet.",
@@ -231,6 +232,82 @@
"progressError": "Your watch position could not be loaded.",
"favoritesError": "Your favorites could not be loaded.",
"favoriteToggleFailed": "Could not update favorites. Please retry.",
"myFavorites": "My favorites",
"noFavorites": "No favorites yet.",
"downloads": "Downloads",
"downloadsError": "Download settings could not be loaded.",
"noDownloads": "No download authorizations yet.",
"downloadedItems": "Download authorizations",
"downloadQuota": "{remaining} of {max} authorizations available",
"@downloadQuota": {
"placeholders": {
"remaining": {
"type": "int"
},
"max": {
"type": "int"
}
}
},
"downloadLicenseDays": "Authorization valid for {days} days",
"@downloadLicenseDays": {
"placeholders": {
"days": {
"type": "int"
}
}
},
"downloadWifiOnly": "Wi-Fi only",
"downloadQuality": "Maximum quality",
"downloadStatus": "Authorization: {status}",
"@downloadStatus": {
"placeholders": {
"status": {}
}
},
"downloadTaskStatus": "Task: {status}",
"@downloadTaskStatus": {
"placeholders": {
"status": {}
}
},
"downloadProgress": "{progress}%",
"@downloadProgress": {
"placeholders": {
"progress": {
"type": "int"
}
}
},
"downloadExpiresAt": "Expires {time}",
"@downloadExpiresAt": {
"placeholders": {
"time": {}
}
},
"clearDownloadsTitle": "Clear download authorizations?",
"clearDownloadsMessage": "This revokes every download authorization for this device.",
"downloadSettingsFailed": "Could not update download settings.",
"downloadDeleteFailed": "Could not remove this download authorization.",
"downloadClearFailed": "Could not clear download authorizations.",
"downloadGrantFailed": "Could not request this download.",
"downloadGranted": "Download authorization is ready.",
"noWatchRecords": "No watch history yet.",
"recordDeleteFailed": "Could not delete this record. Please retry.",
"recordClearFailed": "Could not clear watch history. Please retry.",
"clearAll": "Clear all",
"clearWatchHistoryTitle": "Clear watch history?",
"clearWatchHistoryMessage": "This removes the watch history from your account.",
"confirmClear": "Clear",
"detailLoadFailed": "Details failed to load",
"retryDetail": "Retry",
"episodeUnavailable": "Episode unavailable",
"updatedAtLabel": "Updated {time}",
"@updatedAtLabel": {
"placeholders": {
"time": {}
}
},
"remove": "Remove",
"unlockComingSoon": "Unlocking with coins is coming soon.",
"resumeProgress": "Resume at {position} / {total}",
+78 -1
View File
@@ -141,6 +141,7 @@
"lockedBody": "Pembukaan kunci tersedia setelah toko dan verifikasi disiapkan. Demo ini tidak memproses pembayaran.",
"playbackError": "Klip ini tidak bisa diputar.",
"catalogError": "Katalog gagal dimuat.",
"categoriesError": "Kategori gagal dimuat.",
"detailError": "Daftar episode gagal dimuat.",
"noMediaNotice": "Episode ini belum punya media yang bisa diputar.",
"noStories": "Belum ada cerita.",
@@ -223,7 +224,7 @@
"authSwitchToSignUp": "Baru di sini? Buat akun",
"authSwitchToSignIn": "Sudah punya akun? Masuk",
"authGateTitle": "Masuk untuk melanjutkan",
"authGateMessage": "Favorit dan komentar perlu akun.",
"authGateMessage": "Riwayat tontonan, favorit, komentar, dan unduhan perlu akun.",
"authGateAction": "Masuk",
"cancel": "Nanti saja",
"noEpisodesYet": "Belum ada episode yang bisa diputar.",
@@ -231,6 +232,82 @@
"progressError": "Posisi tonton gagal dimuat.",
"favoritesError": "Daftar favorit gagal dimuat.",
"favoriteToggleFailed": "Gagal memperbarui favorit. Coba lagi.",
"myFavorites": "Favorit saya",
"noFavorites": "Belum ada favorit.",
"downloads": "Unduhan",
"downloadsError": "Pengaturan unduhan gagal dimuat.",
"noDownloads": "Belum ada izin unduhan.",
"downloadedItems": "Izin unduhan",
"downloadQuota": "{remaining} dari {max} izin tersedia",
"@downloadQuota": {
"placeholders": {
"remaining": {
"type": "int"
},
"max": {
"type": "int"
}
}
},
"downloadLicenseDays": "Izin berlaku {days} hari",
"@downloadLicenseDays": {
"placeholders": {
"days": {
"type": "int"
}
}
},
"downloadWifiOnly": "Hanya Wi-Fi",
"downloadQuality": "Kualitas maksimum",
"downloadStatus": "Izin: {status}",
"@downloadStatus": {
"placeholders": {
"status": {}
}
},
"downloadTaskStatus": "Tugas: {status}",
"@downloadTaskStatus": {
"placeholders": {
"status": {}
}
},
"downloadProgress": "{progress}%",
"@downloadProgress": {
"placeholders": {
"progress": {
"type": "int"
}
}
},
"downloadExpiresAt": "Berakhir {time}",
"@downloadExpiresAt": {
"placeholders": {
"time": {}
}
},
"clearDownloadsTitle": "Hapus izin unduhan?",
"clearDownloadsMessage": "Semua izin unduhan untuk perangkat ini akan dicabut.",
"downloadSettingsFailed": "Gagal memperbarui pengaturan unduhan.",
"downloadDeleteFailed": "Gagal menghapus izin unduhan ini.",
"downloadClearFailed": "Gagal menghapus semua izin unduhan.",
"downloadGrantFailed": "Gagal meminta unduhan ini.",
"downloadGranted": "Izin unduhan sudah siap.",
"noWatchRecords": "Belum ada riwayat tontonan.",
"recordDeleteFailed": "Gagal menghapus riwayat ini. Coba lagi.",
"recordClearFailed": "Gagal menghapus semua riwayat. Coba lagi.",
"clearAll": "Hapus semua",
"clearWatchHistoryTitle": "Hapus riwayat tontonan?",
"clearWatchHistoryMessage": "Semua riwayat akan dihapus dari akun kamu.",
"confirmClear": "Hapus",
"detailLoadFailed": "Detail drama gagal dimuat",
"retryDetail": "Coba lagi",
"episodeUnavailable": "Episode tidak tersedia",
"updatedAtLabel": "Diperbarui {time}",
"@updatedAtLabel": {
"placeholders": {
"time": {}
}
},
"remove": "Hapus",
"unlockComingSoon": "Pembukaan dengan koin segera hadir.",
"resumeProgress": "Lanjut di {position} / {total}",
+199 -3
View File
@@ -1,5 +1,3 @@
// Author: fruit.com.cn
import 'dart:async';
import 'package:flutter/foundation.dart';
@@ -636,6 +634,12 @@ abstract class AppLocalizations {
/// **'The catalog could not be loaded.'**
String get catalogError;
/// No description provided for @categoriesError.
///
/// In en, this message translates to:
/// **'Categories could not be loaded.'**
String get categoriesError;
/// No description provided for @detailError.
///
/// In en, this message translates to:
@@ -1131,7 +1135,7 @@ abstract class AppLocalizations {
/// No description provided for @authGateMessage.
///
/// In en, this message translates to:
/// **'Favorites and comments need an account.'**
/// **'Watch history, favorites, comments and downloads need an account.'**
String get authGateMessage;
/// No description provided for @authGateAction.
@@ -1176,6 +1180,198 @@ abstract class AppLocalizations {
/// **'Could not update favorites. Please retry.'**
String get favoriteToggleFailed;
/// No description provided for @myFavorites.
///
/// In en, this message translates to:
/// **'My favorites'**
String get myFavorites;
/// No description provided for @noFavorites.
///
/// In en, this message translates to:
/// **'No favorites yet.'**
String get noFavorites;
/// No description provided for @downloads.
///
/// In en, this message translates to:
/// **'Downloads'**
String get downloads;
/// No description provided for @downloadsError.
///
/// In en, this message translates to:
/// **'Download settings could not be loaded.'**
String get downloadsError;
/// No description provided for @noDownloads.
///
/// In en, this message translates to:
/// **'No download authorizations yet.'**
String get noDownloads;
/// No description provided for @downloadedItems.
///
/// In en, this message translates to:
/// **'Download authorizations'**
String get downloadedItems;
/// No description provided for @downloadQuota.
///
/// In en, this message translates to:
/// **'{remaining} of {max} authorizations available'**
String downloadQuota(int remaining, int max);
/// No description provided for @downloadLicenseDays.
///
/// In en, this message translates to:
/// **'Authorization valid for {days} days'**
String downloadLicenseDays(int days);
/// No description provided for @downloadWifiOnly.
///
/// In en, this message translates to:
/// **'Wi-Fi only'**
String get downloadWifiOnly;
/// No description provided for @downloadQuality.
///
/// In en, this message translates to:
/// **'Maximum quality'**
String get downloadQuality;
/// No description provided for @downloadStatus.
///
/// In en, this message translates to:
/// **'Authorization: {status}'**
String downloadStatus(Object status);
/// No description provided for @downloadTaskStatus.
///
/// In en, this message translates to:
/// **'Task: {status}'**
String downloadTaskStatus(Object status);
/// No description provided for @downloadProgress.
///
/// In en, this message translates to:
/// **'{progress}%'**
String downloadProgress(int progress);
/// No description provided for @downloadExpiresAt.
///
/// In en, this message translates to:
/// **'Expires {time}'**
String downloadExpiresAt(Object time);
/// No description provided for @clearDownloadsTitle.
///
/// In en, this message translates to:
/// **'Clear download authorizations?'**
String get clearDownloadsTitle;
/// No description provided for @clearDownloadsMessage.
///
/// In en, this message translates to:
/// **'This revokes every download authorization for this device.'**
String get clearDownloadsMessage;
/// No description provided for @downloadSettingsFailed.
///
/// In en, this message translates to:
/// **'Could not update download settings.'**
String get downloadSettingsFailed;
/// No description provided for @downloadDeleteFailed.
///
/// In en, this message translates to:
/// **'Could not remove this download authorization.'**
String get downloadDeleteFailed;
/// No description provided for @downloadClearFailed.
///
/// In en, this message translates to:
/// **'Could not clear download authorizations.'**
String get downloadClearFailed;
/// No description provided for @downloadGrantFailed.
///
/// In en, this message translates to:
/// **'Could not request this download.'**
String get downloadGrantFailed;
/// No description provided for @downloadGranted.
///
/// In en, this message translates to:
/// **'Download authorization is ready.'**
String get downloadGranted;
/// No description provided for @noWatchRecords.
///
/// In en, this message translates to:
/// **'No watch history yet.'**
String get noWatchRecords;
/// No description provided for @recordDeleteFailed.
///
/// In en, this message translates to:
/// **'Could not delete this record. Please retry.'**
String get recordDeleteFailed;
/// No description provided for @recordClearFailed.
///
/// In en, this message translates to:
/// **'Could not clear watch history. Please retry.'**
String get recordClearFailed;
/// No description provided for @clearAll.
///
/// In en, this message translates to:
/// **'Clear all'**
String get clearAll;
/// No description provided for @clearWatchHistoryTitle.
///
/// In en, this message translates to:
/// **'Clear watch history?'**
String get clearWatchHistoryTitle;
/// No description provided for @clearWatchHistoryMessage.
///
/// In en, this message translates to:
/// **'This removes the watch history from your account.'**
String get clearWatchHistoryMessage;
/// No description provided for @confirmClear.
///
/// In en, this message translates to:
/// **'Clear'**
String get confirmClear;
/// No description provided for @detailLoadFailed.
///
/// In en, this message translates to:
/// **'Details failed to load'**
String get detailLoadFailed;
/// No description provided for @retryDetail.
///
/// In en, this message translates to:
/// **'Retry'**
String get retryDetail;
/// No description provided for @episodeUnavailable.
///
/// In en, this message translates to:
/// **'Episode unavailable'**
String get episodeUnavailable;
/// No description provided for @updatedAtLabel.
///
/// In en, this message translates to:
/// **'Updated {time}'**
String updatedAtLabel(Object time);
/// No description provided for @remove.
///
/// In en, this message translates to:
+120 -3
View File
@@ -1,5 +1,3 @@
// Author: fruit.com.cn
// ignore: unused_import
import 'package:intl/intl.dart' as intl;
import 'app_localizations.dart';
@@ -296,6 +294,9 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get catalogError => 'The catalog could not be loaded.';
@override
String get categoriesError => 'Categories could not be loaded.';
@override
String get detailError => 'The episode list could not be loaded.';
@@ -546,7 +547,8 @@ class AppLocalizationsEn extends AppLocalizations {
String get authGateTitle => 'Sign in to continue';
@override
String get authGateMessage => 'Favorites and comments need an account.';
String get authGateMessage =>
'Watch history, favorites, comments and downloads need an account.';
@override
String get authGateAction => 'Sign In';
@@ -571,6 +573,121 @@ class AppLocalizationsEn extends AppLocalizations {
String get favoriteToggleFailed =>
'Could not update favorites. Please retry.';
@override
String get myFavorites => 'My favorites';
@override
String get noFavorites => 'No favorites yet.';
@override
String get downloads => 'Downloads';
@override
String get downloadsError => 'Download settings could not be loaded.';
@override
String get noDownloads => 'No download authorizations yet.';
@override
String get downloadedItems => 'Download authorizations';
@override
String downloadQuota(int remaining, int max) {
return '$remaining of $max authorizations available';
}
@override
String downloadLicenseDays(int days) {
return 'Authorization valid for $days days';
}
@override
String get downloadWifiOnly => 'Wi-Fi only';
@override
String get downloadQuality => 'Maximum quality';
@override
String downloadStatus(Object status) {
return 'Authorization: $status';
}
@override
String downloadTaskStatus(Object status) {
return 'Task: $status';
}
@override
String downloadProgress(int progress) {
return '$progress%';
}
@override
String downloadExpiresAt(Object time) {
return 'Expires $time';
}
@override
String get clearDownloadsTitle => 'Clear download authorizations?';
@override
String get clearDownloadsMessage =>
'This revokes every download authorization for this device.';
@override
String get downloadSettingsFailed => 'Could not update download settings.';
@override
String get downloadDeleteFailed =>
'Could not remove this download authorization.';
@override
String get downloadClearFailed => 'Could not clear download authorizations.';
@override
String get downloadGrantFailed => 'Could not request this download.';
@override
String get downloadGranted => 'Download authorization is ready.';
@override
String get noWatchRecords => 'No watch history yet.';
@override
String get recordDeleteFailed =>
'Could not delete this record. Please retry.';
@override
String get recordClearFailed =>
'Could not clear watch history. Please retry.';
@override
String get clearAll => 'Clear all';
@override
String get clearWatchHistoryTitle => 'Clear watch history?';
@override
String get clearWatchHistoryMessage =>
'This removes the watch history from your account.';
@override
String get confirmClear => 'Clear';
@override
String get detailLoadFailed => 'Details failed to load';
@override
String get retryDetail => 'Retry';
@override
String get episodeUnavailable => 'Episode unavailable';
@override
String updatedAtLabel(Object time) {
return 'Updated $time';
}
@override
String get remove => 'Remove';
+117 -1
View File
@@ -295,6 +295,9 @@ class AppLocalizationsId extends AppLocalizations {
@override
String get catalogError => 'Katalog gagal dimuat.';
@override
String get categoriesError => 'Kategori gagal dimuat.';
@override
String get detailError => 'Daftar episode gagal dimuat.';
@@ -546,7 +549,8 @@ class AppLocalizationsId extends AppLocalizations {
String get authGateTitle => 'Masuk untuk melanjutkan';
@override
String get authGateMessage => 'Favorit dan komentar perlu akun.';
String get authGateMessage =>
'Riwayat tontonan, favorit, komentar, dan unduhan perlu akun.';
@override
String get authGateAction => 'Masuk';
@@ -570,6 +574,118 @@ class AppLocalizationsId extends AppLocalizations {
@override
String get favoriteToggleFailed => 'Gagal memperbarui favorit. Coba lagi.';
@override
String get myFavorites => 'Favorit saya';
@override
String get noFavorites => 'Belum ada favorit.';
@override
String get downloads => 'Unduhan';
@override
String get downloadsError => 'Pengaturan unduhan gagal dimuat.';
@override
String get noDownloads => 'Belum ada izin unduhan.';
@override
String get downloadedItems => 'Izin unduhan';
@override
String downloadQuota(int remaining, int max) {
return '$remaining dari $max izin tersedia';
}
@override
String downloadLicenseDays(int days) {
return 'Izin berlaku $days hari';
}
@override
String get downloadWifiOnly => 'Hanya Wi-Fi';
@override
String get downloadQuality => 'Kualitas maksimum';
@override
String downloadStatus(Object status) {
return 'Izin: $status';
}
@override
String downloadTaskStatus(Object status) {
return 'Tugas: $status';
}
@override
String downloadProgress(int progress) {
return '$progress%';
}
@override
String downloadExpiresAt(Object time) {
return 'Berakhir $time';
}
@override
String get clearDownloadsTitle => 'Hapus izin unduhan?';
@override
String get clearDownloadsMessage =>
'Semua izin unduhan untuk perangkat ini akan dicabut.';
@override
String get downloadSettingsFailed => 'Gagal memperbarui pengaturan unduhan.';
@override
String get downloadDeleteFailed => 'Gagal menghapus izin unduhan ini.';
@override
String get downloadClearFailed => 'Gagal menghapus semua izin unduhan.';
@override
String get downloadGrantFailed => 'Gagal meminta unduhan ini.';
@override
String get downloadGranted => 'Izin unduhan sudah siap.';
@override
String get noWatchRecords => 'Belum ada riwayat tontonan.';
@override
String get recordDeleteFailed => 'Gagal menghapus riwayat ini. Coba lagi.';
@override
String get recordClearFailed => 'Gagal menghapus semua riwayat. Coba lagi.';
@override
String get clearAll => 'Hapus semua';
@override
String get clearWatchHistoryTitle => 'Hapus riwayat tontonan?';
@override
String get clearWatchHistoryMessage =>
'Semua riwayat akan dihapus dari akun kamu.';
@override
String get confirmClear => 'Hapus';
@override
String get detailLoadFailed => 'Detail drama gagal dimuat';
@override
String get retryDetail => 'Coba lagi';
@override
String get episodeUnavailable => 'Episode tidak tersedia';
@override
String updatedAtLabel(Object time) {
return 'Diperbarui $time';
}
@override
String get remove => 'Hapus';
+114 -3
View File
@@ -1,5 +1,3 @@
// Author: fruit.com.cn
// ignore: unused_import
import 'package:intl/intl.dart' as intl;
import 'app_localizations.dart';
@@ -291,6 +289,9 @@ class AppLocalizationsZh extends AppLocalizations {
@override
String get catalogError => '剧目列表加载失败。';
@override
String get categoriesError => '分类加载失败。';
@override
String get detailError => '剧集信息加载失败。';
@@ -538,7 +539,7 @@ class AppLocalizationsZh extends AppLocalizations {
String get authGateTitle => '登录后可继续';
@override
String get authGateMessage => '收藏、评论等操作需要登录。';
String get authGateMessage => '观看记录、收藏、评论和下载需要登录。';
@override
String get authGateAction => '去登录';
@@ -561,6 +562,116 @@ class AppLocalizationsZh extends AppLocalizations {
@override
String get favoriteToggleFailed => '收藏操作失败,请重试。';
@override
String get myFavorites => '我的收藏';
@override
String get noFavorites => '还没有收藏。';
@override
String get downloads => '下载';
@override
String get downloadsError => '下载设置加载失败。';
@override
String get noDownloads => '还没有下载授权。';
@override
String get downloadedItems => '下载授权';
@override
String downloadQuota(int remaining, int max) {
return '剩余 $remaining / $max 个授权';
}
@override
String downloadLicenseDays(int days) {
return '授权有效期 $days 天';
}
@override
String get downloadWifiOnly => '仅 Wi-Fi 下载';
@override
String get downloadQuality => '最高清晰度';
@override
String downloadStatus(Object status) {
return '授权:$status';
}
@override
String downloadTaskStatus(Object status) {
return '任务:$status';
}
@override
String downloadProgress(int progress) {
return '$progress%';
}
@override
String downloadExpiresAt(Object time) {
return '到期时间 $time';
}
@override
String get clearDownloadsTitle => '清空下载授权?';
@override
String get clearDownloadsMessage => '这会吊销当前设备的全部下载授权。';
@override
String get downloadSettingsFailed => '下载设置更新失败。';
@override
String get downloadDeleteFailed => '删除下载授权失败。';
@override
String get downloadClearFailed => '清空下载授权失败。';
@override
String get downloadGrantFailed => '申请下载失败。';
@override
String get downloadGranted => '下载授权已就绪。';
@override
String get noWatchRecords => '还没有观看记录。';
@override
String get recordDeleteFailed => '删除记录失败,请重试。';
@override
String get recordClearFailed => '清空观看记录失败,请重试。';
@override
String get clearAll => '清空';
@override
String get clearWatchHistoryTitle => '清空观看记录?';
@override
String get clearWatchHistoryMessage => '这会从当前账号移除全部观看记录。';
@override
String get confirmClear => '清空';
@override
String get detailLoadFailed => '剧集信息加载失败';
@override
String get retryDetail => '重试';
@override
String get episodeUnavailable => '集数未知';
@override
String updatedAtLabel(Object time) {
return '更新于 $time';
}
@override
String get remove => '移除';
+78 -1
View File
@@ -103,6 +103,7 @@
"lockedBody": "完成商店与服务端验单配置后才能解锁。本演示目前不处理付款。",
"playbackError": "此视频暂时无法播放。",
"catalogError": "剧目列表加载失败。",
"categoriesError": "分类加载失败。",
"detailError": "剧集信息加载失败。",
"noMediaNotice": "该剧集还没有可播放的片源。",
"noStories": "暂无剧目。",
@@ -185,7 +186,7 @@
"authSwitchToSignUp": "还没有账号?去注册",
"authSwitchToSignIn": "已有账号?去登录",
"authGateTitle": "登录后可继续",
"authGateMessage": "收藏、评论等操作需要登录。",
"authGateMessage": "观看记录、收藏、评论和下载需要登录。",
"authGateAction": "去登录",
"cancel": "暂不",
"noEpisodesYet": "还没有可播放的剧集。",
@@ -193,6 +194,82 @@
"progressError": "续看进度加载失败。",
"favoritesError": "收藏列表加载失败。",
"favoriteToggleFailed": "收藏操作失败,请重试。",
"myFavorites": "我的收藏",
"noFavorites": "还没有收藏。",
"downloads": "下载",
"downloadsError": "下载设置加载失败。",
"noDownloads": "还没有下载授权。",
"downloadedItems": "下载授权",
"downloadQuota": "剩余 {remaining} / {max} 个授权",
"@downloadQuota": {
"placeholders": {
"remaining": {
"type": "int"
},
"max": {
"type": "int"
}
}
},
"downloadLicenseDays": "授权有效期 {days} 天",
"@downloadLicenseDays": {
"placeholders": {
"days": {
"type": "int"
}
}
},
"downloadWifiOnly": "仅 Wi-Fi 下载",
"downloadQuality": "最高清晰度",
"downloadStatus": "授权:{status}",
"@downloadStatus": {
"placeholders": {
"status": {}
}
},
"downloadTaskStatus": "任务:{status}",
"@downloadTaskStatus": {
"placeholders": {
"status": {}
}
},
"downloadProgress": "{progress}%",
"@downloadProgress": {
"placeholders": {
"progress": {
"type": "int"
}
}
},
"downloadExpiresAt": "到期时间 {time}",
"@downloadExpiresAt": {
"placeholders": {
"time": {}
}
},
"clearDownloadsTitle": "清空下载授权?",
"clearDownloadsMessage": "这会吊销当前设备的全部下载授权。",
"downloadSettingsFailed": "下载设置更新失败。",
"downloadDeleteFailed": "删除下载授权失败。",
"downloadClearFailed": "清空下载授权失败。",
"downloadGrantFailed": "申请下载失败。",
"downloadGranted": "下载授权已就绪。",
"noWatchRecords": "还没有观看记录。",
"recordDeleteFailed": "删除记录失败,请重试。",
"recordClearFailed": "清空观看记录失败,请重试。",
"clearAll": "清空",
"clearWatchHistoryTitle": "清空观看记录?",
"clearWatchHistoryMessage": "这会从当前账号移除全部观看记录。",
"confirmClear": "清空",
"detailLoadFailed": "剧集信息加载失败",
"retryDetail": "重试",
"episodeUnavailable": "集数未知",
"updatedAtLabel": "更新于 {time}",
"@updatedAtLabel": {
"placeholders": {
"time": {}
}
},
"remove": "移除",
"unlockComingSoon": "金币解锁功能即将开放。",
"resumeProgress": "续看至 {position} / {total}",