feat(recommend): 新增推荐频道页并恢复首页沉浸式信息流
- tab1 推荐页改为接口分类频道:频道导航可横滑,选中频道自动滚动到可视区,内容区左右滑动切换分类 - 精选频道:顶部固定高度 banner 轮播图 + 接口 tag 筛选的上新短剧横滑 + 其余短剧双列网格;其他分类三列网格 - 分类内容支持懒加载、下拉刷新与上拉分页加载 - 卡片角标文案与背景色取自接口 tag/tagColor,短剧标题统一白色 - 恢复 tab0 为沉浸式全屏视频首页及其三 inner-tab 顶导(搜索/礼物入口) - l10n 新增原创出品、立即观看、上新、编辑精选、全N集等多语言文案
This commit is contained in:
1 parent
a3f3481f4f
commit
c027acc91f
22 files changed
+2018
-318
No files matched your search
+25
-1
@@ -55,12 +55,24 @@
|
||||
"viewers": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"watchFullSeries": "Watch full series · {episodes} eps",
|
||||
"watchFullSeries": "Watch full series {episodes} eps",
|
||||
"@watchFullSeries": {
|
||||
"placeholders": {
|
||||
"episodes": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"feedEpisodePrefix": "EP{episode} | ",
|
||||
"@feedEpisodePrefix": {
|
||||
"placeholders": {
|
||||
"episode": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"feedWatchingCount": "{count} watching",
|
||||
"@feedWatchingCount": {
|
||||
"placeholders": {
|
||||
"count": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"feedTabAnime": "Anime",
|
||||
"feedTabReal": "Live-action",
|
||||
"feedTabForYou": "For you",
|
||||
@@ -265,6 +277,18 @@
|
||||
"pictureInPicture": "Picture in picture",
|
||||
"pipUnavailable": "Picture in picture is unavailable on this device",
|
||||
"originalTag": "Original",
|
||||
"originalProduction": "Original",
|
||||
"watchNowAction": "Watch Now",
|
||||
"newArrivalBadge": "NEW",
|
||||
"editorPick": "Editor's Pick",
|
||||
"totalEpisodesShort": "{count} eps",
|
||||
"@totalEpisodesShort": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"dramaTag": "Short drama",
|
||||
"episodeLabel": "Episode {number}",
|
||||
"@episodeLabel": {
|
||||
|
||||
+30
-1
@@ -49,7 +49,24 @@
|
||||
"hotBadge": "Hits",
|
||||
"filterAll": "Semua",
|
||||
"seriesMeta": "Serial · {episodes} eps | {viewers} menonton",
|
||||
"watchFullSeries": "Tonton serial lengkap · {episodes} eps",
|
||||
"watchFullSeries": "Tonton serial lengkap {episodes} eps",
|
||||
"@watchFullSeries": {
|
||||
"placeholders": {
|
||||
"episodes": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"feedEpisodePrefix": "EP{episode} | ",
|
||||
"@feedEpisodePrefix": {
|
||||
"placeholders": {
|
||||
"episode": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"feedWatchingCount": "{count} menonton",
|
||||
"@feedWatchingCount": {
|
||||
"placeholders": {
|
||||
"count": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"feedTabAnime": "Anime",
|
||||
"feedTabReal": "Live-action",
|
||||
"feedTabForYou": "Untukmu",
|
||||
@@ -239,6 +256,18 @@
|
||||
"pictureInPicture": "Gambar dalam gambar",
|
||||
"pipUnavailable": "Gambar dalam gambar tidak tersedia di perangkat ini",
|
||||
"originalTag": "Original",
|
||||
"originalProduction": "Original",
|
||||
"watchNowAction": "Tonton Sekarang",
|
||||
"newArrivalBadge": "BARU",
|
||||
"editorPick": "Pilihan Editor",
|
||||
"totalEpisodesShort": "{count} eps",
|
||||
"@totalEpisodesShort": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"dramaTag": "Drama pendek",
|
||||
"episodeLabel": "Episode {number}",
|
||||
"@episodeLabel": {
|
||||
|
||||
@@ -397,9 +397,21 @@ abstract class AppLocalizations {
|
||||
/// No description provided for @watchFullSeries.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Watch full series · {episodes} eps'**
|
||||
/// **'Watch full series {episodes} eps'**
|
||||
String watchFullSeries(String episodes);
|
||||
|
||||
/// No description provided for @feedEpisodePrefix.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'EP{episode} | '**
|
||||
String feedEpisodePrefix(int episode);
|
||||
|
||||
/// No description provided for @feedWatchingCount.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'{count} watching'**
|
||||
String feedWatchingCount(String count);
|
||||
|
||||
/// No description provided for @feedTabAnime.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
@@ -1198,6 +1210,36 @@ abstract class AppLocalizations {
|
||||
/// **'Original'**
|
||||
String get originalTag;
|
||||
|
||||
/// No description provided for @originalProduction.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Original'**
|
||||
String get originalProduction;
|
||||
|
||||
/// No description provided for @watchNowAction.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Watch Now'**
|
||||
String get watchNowAction;
|
||||
|
||||
/// No description provided for @newArrivalBadge.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'NEW'**
|
||||
String get newArrivalBadge;
|
||||
|
||||
/// No description provided for @editorPick.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Editor\'s Pick'**
|
||||
String get editorPick;
|
||||
|
||||
/// No description provided for @totalEpisodesShort.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'{count} eps'**
|
||||
String totalEpisodesShort(int count);
|
||||
|
||||
/// No description provided for @dramaTag.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
|
||||
@@ -162,7 +162,17 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String watchFullSeries(String episodes) {
|
||||
return 'Watch full series · $episodes eps';
|
||||
return 'Watch full series $episodes eps';
|
||||
}
|
||||
|
||||
@override
|
||||
String feedEpisodePrefix(int episode) {
|
||||
return 'EP$episode | ';
|
||||
}
|
||||
|
||||
@override
|
||||
String feedWatchingCount(String count) {
|
||||
return '$count watching';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -594,6 +604,23 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||
@override
|
||||
String get originalTag => 'Original';
|
||||
|
||||
@override
|
||||
String get originalProduction => 'Original';
|
||||
|
||||
@override
|
||||
String get watchNowAction => 'Watch Now';
|
||||
|
||||
@override
|
||||
String get newArrivalBadge => 'NEW';
|
||||
|
||||
@override
|
||||
String get editorPick => 'Editor\'s Pick';
|
||||
|
||||
@override
|
||||
String totalEpisodesShort(int count) {
|
||||
return '$count eps';
|
||||
}
|
||||
|
||||
@override
|
||||
String get dramaTag => 'Short drama';
|
||||
|
||||
|
||||
@@ -162,7 +162,17 @@ class AppLocalizationsId extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String watchFullSeries(String episodes) {
|
||||
return 'Tonton serial lengkap · $episodes eps';
|
||||
return 'Tonton serial lengkap $episodes eps';
|
||||
}
|
||||
|
||||
@override
|
||||
String feedEpisodePrefix(int episode) {
|
||||
return 'EP$episode | ';
|
||||
}
|
||||
|
||||
@override
|
||||
String feedWatchingCount(String count) {
|
||||
return '$count menonton';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -595,6 +605,23 @@ class AppLocalizationsId extends AppLocalizations {
|
||||
@override
|
||||
String get originalTag => 'Original';
|
||||
|
||||
@override
|
||||
String get originalProduction => 'Original';
|
||||
|
||||
@override
|
||||
String get watchNowAction => 'Tonton Sekarang';
|
||||
|
||||
@override
|
||||
String get newArrivalBadge => 'BARU';
|
||||
|
||||
@override
|
||||
String get editorPick => 'Pilihan Editor';
|
||||
|
||||
@override
|
||||
String totalEpisodesShort(int count) {
|
||||
return '$count eps';
|
||||
}
|
||||
|
||||
@override
|
||||
String get dramaTag => 'Drama pendek';
|
||||
|
||||
|
||||
@@ -159,7 +159,17 @@ class AppLocalizationsZh extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String watchFullSeries(String episodes) {
|
||||
return '观看完整剧集 · 全$episodes集';
|
||||
return '观看完整剧集 全$episodes集';
|
||||
}
|
||||
|
||||
@override
|
||||
String feedEpisodePrefix(int episode) {
|
||||
return '第$episode集|';
|
||||
}
|
||||
|
||||
@override
|
||||
String feedWatchingCount(String count) {
|
||||
return '共$count人在看';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -587,6 +597,23 @@ class AppLocalizationsZh extends AppLocalizations {
|
||||
@override
|
||||
String get originalTag => '原创';
|
||||
|
||||
@override
|
||||
String get originalProduction => '原创出品';
|
||||
|
||||
@override
|
||||
String get watchNowAction => '立即观看';
|
||||
|
||||
@override
|
||||
String get newArrivalBadge => '上新';
|
||||
|
||||
@override
|
||||
String get editorPick => '编辑精选';
|
||||
|
||||
@override
|
||||
String totalEpisodesShort(int count) {
|
||||
return '全$count集';
|
||||
}
|
||||
|
||||
@override
|
||||
String get dramaTag => '短剧';
|
||||
|
||||
|
||||
+30
-1
@@ -49,7 +49,24 @@
|
||||
"hotBadge": "爆剧",
|
||||
"filterAll": "全部",
|
||||
"seriesMeta": "系列剧 · 共{episodes}集 | 共{viewers}人在追",
|
||||
"watchFullSeries": "观看完整剧集 · 全{episodes}集",
|
||||
"watchFullSeries": "观看完整剧集 全{episodes}集",
|
||||
"@watchFullSeries": {
|
||||
"placeholders": {
|
||||
"episodes": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"feedEpisodePrefix": "第{episode}集|",
|
||||
"@feedEpisodePrefix": {
|
||||
"placeholders": {
|
||||
"episode": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"feedWatchingCount": "共{count}人在看",
|
||||
"@feedWatchingCount": {
|
||||
"placeholders": {
|
||||
"count": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"feedTabAnime": "漫剧",
|
||||
"feedTabReal": "真人剧",
|
||||
"feedTabForYou": "推荐",
|
||||
@@ -239,6 +256,18 @@
|
||||
"pictureInPicture": "画中画",
|
||||
"pipUnavailable": "此设备无法使用画中画",
|
||||
"originalTag": "原创",
|
||||
"originalProduction": "原创出品",
|
||||
"watchNowAction": "立即观看",
|
||||
"newArrivalBadge": "上新",
|
||||
"editorPick": "编辑精选",
|
||||
"totalEpisodesShort": "全{count}集",
|
||||
"@totalEpisodesShort": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"dramaTag": "短剧",
|
||||
"episodeLabel": "第 {number} 集",
|
||||
"@episodeLabel": {
|
||||
|
||||
Reference in new issue
Block a user