1
0
mirror of https://github.com/stonega/tsacdop synced 2025-02-09 08:08:46 +01:00

More localization work.

This commit is contained in:
stonegate 2020-07-06 17:50:20 +08:00
parent 400e247134
commit c683eba6c4
22 changed files with 978 additions and 325 deletions

View File

@ -23,33 +23,51 @@ class MessageLookup extends MessageLookupByLibrary {
static m1(count) => "${Intl.plural(count, zero: '', one: '${count} episode added to playlist', other: '${count} episodes added to playlist')}";
static m2(host) => "Hosted on ${host}";
static m2(count) => "${Intl.plural(count, zero: 'Today', one: '${count} day ago', other: '${count} days ago')}";
static m3(count) => "${Intl.plural(count, zero: '', one: '${count} hour', other: '${count} hours')}";
static m3(count) => "${Intl.plural(count, zero: 'Never', one: '${count} day', other: '${count} days')}";
static m4(count) => "${Intl.plural(count, zero: '', one: '${count} min', other: '${count} mins')}";
static m4(time) => "From ${time}";
static m5(title) => "Fetch data ${title}";
static m5(count) => "${Intl.plural(count, zero: 'Group', one: 'Group', other: 'Groups')}";
static m6(title) => "Subscribe failed, network error ${title}";
static m6(host) => "Hosted on ${host}";
static m7(title) => "Subscribe ${title}";
static m7(count) => "${Intl.plural(count, zero: '', one: '${count} hour ago', other: '${count} hours ago')}";
static m8(title) => "Subscribe failed, podcast existed ${title}";
static m8(count) => "${Intl.plural(count, zero: '', one: '${count} hour', other: '${count} hours')}";
static m9(title) => "Subscribe success ${title}";
static m9(count) => "${Intl.plural(count, zero: '', one: '${count} minute ago', other: '${count} minutes ago')}";
static m10(title) => "Update ${title}";
static m10(count) => "${Intl.plural(count, zero: '', one: '${count} min', other: '${count} mins')}";
static m11(title) => "Update error ${title}";
static m11(title) => "Fetch data ${title}";
static m12(time) => "Last time ${time}";
static m12(title) => "Subscribe failed, network error ${title}";
static m13(time) => "${time} Left";
static m13(title) => "Subscribe ${title}";
static m14(count) => "${Intl.plural(count, zero: 'No Update', one: 'Updated ${count} Episode', other: 'Updated ${count} Episodes')}";
static m14(title) => "Subscribe failed, podcast existed ${title}";
static m15(version) => "Version : ${version}";
static m15(title) => "Subscribe success ${title}";
static m16(title) => "Update ${title}";
static m17(title) => "Update error ${title}";
static m18(date) => "Removed at ${date}";
static m19(count) => "${Intl.plural(count, zero: '', one: '${count} second ago', other: '${count} seconds ago')}";
static m20(time) => "Last time ${time}";
static m21(time) => "${time} Left";
static m22(time) => "To ${time}";
static m23(count) => "${Intl.plural(count, zero: 'No update', one: 'Updated ${count} episode', other: 'Updated ${count} episodes')}";
static m24(version) => "Version : ${version}";
final messages = _notInlinedMessages(_notInlinedMessages);
static _notInlinedMessages(_) => <String, Function> {
@ -59,6 +77,7 @@ class MessageLookup extends MessageLookupByLibrary {
"addNewEpisodeTooltip" : MessageLookupByLibrary.simpleMessage("Add new episodes to playlist"),
"addSomeGroups" : MessageLookupByLibrary.simpleMessage("Add some groups"),
"all" : MessageLookupByLibrary.simpleMessage("All"),
"autoDownload" : MessageLookupByLibrary.simpleMessage("Auto download"),
"back" : MessageLookupByLibrary.simpleMessage("Back"),
"buffering" : MessageLookupByLibrary.simpleMessage("Buffering"),
"cancel" : MessageLookupByLibrary.simpleMessage("CANCEL"),
@ -69,16 +88,26 @@ class MessageLookup extends MessageLookupByLibrary {
"color" : MessageLookupByLibrary.simpleMessage("color"),
"confirm" : MessageLookupByLibrary.simpleMessage("CONFIRM"),
"darkMode" : MessageLookupByLibrary.simpleMessage("Dark mode"),
"daysAgo" : m2,
"daysCount" : m3,
"delete" : MessageLookupByLibrary.simpleMessage("Delete"),
"developer" : MessageLookupByLibrary.simpleMessage("Developer"),
"dismiss" : MessageLookupByLibrary.simpleMessage("Dismiss"),
"done" : MessageLookupByLibrary.simpleMessage("Done"),
"download" : MessageLookupByLibrary.simpleMessage("Download"),
"downloaded" : MessageLookupByLibrary.simpleMessage("Downloaded"),
"editName" : MessageLookupByLibrary.simpleMessage("Edit name"),
"editGroupName" : MessageLookupByLibrary.simpleMessage("Edit group name"),
"endOfEpisode" : MessageLookupByLibrary.simpleMessage("End of Episode"),
"episode" : MessageLookupByLibrary.simpleMessage("Episode"),
"featureDiscoveryEditGroup" : MessageLookupByLibrary.simpleMessage("Tap to edit group"),
"featureDiscoveryEditGroupDes" : MessageLookupByLibrary.simpleMessage("You can change group name or delete group here, but home group can not be edited or deleted"),
"featureDiscoveryEpisode" : MessageLookupByLibrary.simpleMessage("Episode view"),
"featureDiscoveryEpisodeDes" : MessageLookupByLibrary.simpleMessage("You can long tap to play episode or add episode to playlist."),
"featureDiscoveryEpisodeTitle" : MessageLookupByLibrary.simpleMessage("Long tap to play episode instantly"),
"featureDiscoveryGroup" : MessageLookupByLibrary.simpleMessage("Tap to add group"),
"featureDiscoveryGroupDes" : MessageLookupByLibrary.simpleMessage("Default group is home for new podcast, you can create new group and move podcast to new group, podcast can be added to multi-groups."),
"featureDiscoveryGroupPodcast" : MessageLookupByLibrary.simpleMessage("Long tap to reorder podcast"),
"featureDiscoveryGroupPodcastDes" : MessageLookupByLibrary.simpleMessage("You can tap to see more options, or long tap to reorder podcast in group."),
"featureDiscoveryOMPL" : MessageLookupByLibrary.simpleMessage("Tap to import OMPL"),
"featureDiscoveryOMPLDes" : MessageLookupByLibrary.simpleMessage("You can import OMPL file, open setting or refresh all podcast at once here."),
"featureDiscoveryPlaylist" : MessageLookupByLibrary.simpleMessage("Tap to open playlist"),
@ -92,23 +121,28 @@ class MessageLookup extends MessageLookupByLibrary {
"feedbackGithub" : MessageLookupByLibrary.simpleMessage("Submit issue"),
"feedbackPlay" : MessageLookupByLibrary.simpleMessage("Rate on Play"),
"feedbackTelegram" : MessageLookupByLibrary.simpleMessage("Join group"),
"from" : MessageLookupByLibrary.simpleMessage("From"),
"fonts" : MessageLookupByLibrary.simpleMessage("Fonts"),
"from" : m4,
"goodNight" : MessageLookupByLibrary.simpleMessage("Good Night"),
"groupExisted" : MessageLookupByLibrary.simpleMessage("Group existed"),
"groupFilter" : MessageLookupByLibrary.simpleMessage("Group filter"),
"groups" : MessageLookupByLibrary.simpleMessage("Groups"),
"groupRemoveConfirm" : MessageLookupByLibrary.simpleMessage("Are you sure you want to delete this group? Podcasts will be moved to Home group."),
"groups" : m5,
"homeGroupsSeeAll" : MessageLookupByLibrary.simpleMessage("See All"),
"homeMenuPlaylist" : MessageLookupByLibrary.simpleMessage("Playlist"),
"homeSubMenuLikeData" : MessageLookupByLibrary.simpleMessage("Like Date"),
"homeSubMenuSortBy" : MessageLookupByLibrary.simpleMessage("Sort by"),
"homeSubMenuUpdateDate" : MessageLookupByLibrary.simpleMessage("Update Date"),
"homeTabMenuFavotite" : MessageLookupByLibrary.simpleMessage("Favorite"),
"homeTabMenuRecent" : MessageLookupByLibrary.simpleMessage("Recent"),
"homeToprightMenuAbout" : MessageLookupByLibrary.simpleMessage("About"),
"homeToprightMenuImportOMPL" : MessageLookupByLibrary.simpleMessage("Import OMPL"),
"homeToprightMenuRefreshAll" : MessageLookupByLibrary.simpleMessage("Refresh all"),
"homeToprightMenuSettings" : MessageLookupByLibrary.simpleMessage("Settings"),
"hostedOn" : m2,
"hoursCount" : m3,
"hostedOn" : m6,
"hoursAgo" : m7,
"hoursCount" : m8,
"introFourthPage" : MessageLookupByLibrary.simpleMessage("Long press on episode card for quick actions."),
"introSecondPage" : MessageLookupByLibrary.simpleMessage("Subscribe podcast via search or import OMPL file."),
"introThirdPage" : MessageLookupByLibrary.simpleMessage("You can create new group for podcasts, swipe on podcast list to change group."),
"later" : MessageLookupByLibrary.simpleMessage("Later"),
"lightMode" : MessageLookupByLibrary.simpleMessage("Light mode"),
"like" : MessageLookupByLibrary.simpleMessage("Like"),
@ -117,6 +151,7 @@ class MessageLookup extends MessageLookupByLibrary {
"listen" : MessageLookupByLibrary.simpleMessage("Listen"),
"listened" : MessageLookupByLibrary.simpleMessage("Listened"),
"loadMore" : MessageLookupByLibrary.simpleMessage("Load more"),
"mark" : MessageLookupByLibrary.simpleMessage("Mark"),
"markConfirm" : MessageLookupByLibrary.simpleMessage("Mark confirm"),
"markConfirmContent" : MessageLookupByLibrary.simpleMessage("Confirm mark all episodes listened?"),
"markListened" : MessageLookupByLibrary.simpleMessage("Mark listened"),
@ -125,24 +160,28 @@ class MessageLookup extends MessageLookupByLibrary {
"menuMarkAllListened" : MessageLookupByLibrary.simpleMessage("Mark All Listened"),
"menuViewRSS" : MessageLookupByLibrary.simpleMessage("Visit RSS Feed"),
"menuVisitSite" : MessageLookupByLibrary.simpleMessage("Visit Site"),
"minsCount" : m4,
"minsAgo" : m9,
"minsCount" : m10,
"network" : MessageLookupByLibrary.simpleMessage("Network"),
"newGroup" : MessageLookupByLibrary.simpleMessage("Create new group"),
"newestFirst" : MessageLookupByLibrary.simpleMessage("Newest first"),
"next" : MessageLookupByLibrary.simpleMessage("Next"),
"noEpisodeDownload" : MessageLookupByLibrary.simpleMessage("No episode downloaded yet"),
"noEpisodeFavorite" : MessageLookupByLibrary.simpleMessage("No episode collected yet"),
"noEpisodeRecent" : MessageLookupByLibrary.simpleMessage("No episode received yet"),
"noPodcastGroup" : MessageLookupByLibrary.simpleMessage("No podcast in this group"),
"notificaitonFatch" : m5,
"notificationNetworkError" : m6,
"notificationSubscribe" : m7,
"notificationSubscribeExisted" : m8,
"notificationSuccess" : m9,
"notificationUpdate" : m10,
"notificationUpdateError" : m11,
"notificaitonFatch" : m11,
"notificationNetworkError" : m12,
"notificationSubscribe" : m13,
"notificationSubscribeExisted" : m14,
"notificationSuccess" : m15,
"notificationUpdate" : m16,
"notificationUpdateError" : m17,
"oldestFirst" : MessageLookupByLibrary.simpleMessage("Oldest first"),
"play" : MessageLookupByLibrary.simpleMessage("Play"),
"playing" : MessageLookupByLibrary.simpleMessage("Playing"),
"plugins" : MessageLookupByLibrary.simpleMessage("Plugins"),
"podcast" : MessageLookupByLibrary.simpleMessage("Podcast"),
"podcastSubscribed" : MessageLookupByLibrary.simpleMessage("Podcast subscribed"),
"popupMenuDownloadDes" : MessageLookupByLibrary.simpleMessage("Download episode"),
"popupMenuLaterDes" : MessageLookupByLibrary.simpleMessage("Add episode to playlist"),
@ -150,10 +189,15 @@ class MessageLookup extends MessageLookupByLibrary {
"popupMenuMarkDes" : MessageLookupByLibrary.simpleMessage("Mark episode as listened"),
"popupMenuPlayDes" : MessageLookupByLibrary.simpleMessage("Play the episode"),
"privacyPolicy" : MessageLookupByLibrary.simpleMessage("Privacy Policy"),
"recoverSubscribe" : MessageLookupByLibrary.simpleMessage("Recover subscribe"),
"remove" : MessageLookupByLibrary.simpleMessage("Remove"),
"removeConfirm" : MessageLookupByLibrary.simpleMessage("Remove confirm"),
"removePodcastDes" : MessageLookupByLibrary.simpleMessage("Are you sure you want to unsubscribe?"),
"removedAt" : m18,
"schedule" : MessageLookupByLibrary.simpleMessage("Schedule"),
"searchInvalidRss" : MessageLookupByLibrary.simpleMessage("Invalid RSS link"),
"searchPodcast" : MessageLookupByLibrary.simpleMessage("Search podcast"),
"secondsAgo" : m19,
"settingStorage" : MessageLookupByLibrary.simpleMessage("Storage"),
"settingsAccentColor" : MessageLookupByLibrary.simpleMessage("Accent color"),
"settingsAccentColorDes" : MessageLookupByLibrary.simpleMessage("Include the ovelay color"),
@ -176,7 +220,7 @@ class MessageLookup extends MessageLookupByLibrary {
"settingsExport" : MessageLookupByLibrary.simpleMessage("Export"),
"settingsExportDes" : MessageLookupByLibrary.simpleMessage("Export OMPL file of all podcasts"),
"settingsFeedback" : MessageLookupByLibrary.simpleMessage("Feedback"),
"settingsFeedbackDes" : MessageLookupByLibrary.simpleMessage("Bugs and feature request"),
"settingsFeedbackDes" : MessageLookupByLibrary.simpleMessage("Bugs and features request"),
"settingsHistory" : MessageLookupByLibrary.simpleMessage("History"),
"settingsHistoryDes" : MessageLookupByLibrary.simpleMessage("Listen date"),
"settingsInfo" : MessageLookupByLibrary.simpleMessage("Info"),
@ -210,24 +254,33 @@ class MessageLookup extends MessageLookupByLibrary {
"settingsUpdateInterval" : MessageLookupByLibrary.simpleMessage("Update interval"),
"settingsUpdateIntervalDes" : MessageLookupByLibrary.simpleMessage("Default 24 hours"),
"size" : MessageLookupByLibrary.simpleMessage("Size"),
"skipSecondsAtStart" : MessageLookupByLibrary.simpleMessage("Skip seconds at start"),
"sleepTimer" : MessageLookupByLibrary.simpleMessage("Sleep timer"),
"subscribe" : MessageLookupByLibrary.simpleMessage("Subscribe"),
"systemDefault" : MessageLookupByLibrary.simpleMessage("System default"),
"timeLastPlayed" : m12,
"timeLeft" : m13,
"to" : MessageLookupByLibrary.simpleMessage("To"),
"timeLastPlayed" : m20,
"timeLeft" : m21,
"to" : m22,
"toastAddPlaylist" : MessageLookupByLibrary.simpleMessage("Added to playlist"),
"toastDescovery" : MessageLookupByLibrary.simpleMessage("Discovery feature reopened, pleast restart the app"),
"toastFileError" : MessageLookupByLibrary.simpleMessage("File error, Subscribe failed"),
"toastFileNotVilid" : MessageLookupByLibrary.simpleMessage("File not vilid"),
"toastDiscovery" : MessageLookupByLibrary.simpleMessage("Discovery feature reopened, pleast restart the app"),
"toastFileError" : MessageLookupByLibrary.simpleMessage("File error, subscribe failed"),
"toastFileNotValid" : MessageLookupByLibrary.simpleMessage("File not valid"),
"toastHomeGroupNotSupport" : MessageLookupByLibrary.simpleMessage("Home group is not supported"),
"toastOneGroup" : MessageLookupByLibrary.simpleMessage("At least select one group"),
"toastPodcastRecovering" : MessageLookupByLibrary.simpleMessage("Recovering, wait for a moment"),
"toastReadFile" : MessageLookupByLibrary.simpleMessage("Read file successfully"),
"toastRemovePlaylist" : MessageLookupByLibrary.simpleMessage("Removed from playlist"),
"toastRecoverFailed" : MessageLookupByLibrary.simpleMessage("Podcast recover failed"),
"toastRemovePlaylist" : MessageLookupByLibrary.simpleMessage("Episode removed from playlist"),
"toastSettingSaved" : MessageLookupByLibrary.simpleMessage("Setting saved"),
"toastTimeEqualEnd" : MessageLookupByLibrary.simpleMessage("Time is equal to end time"),
"toastTimeEqualStart" : MessageLookupByLibrary.simpleMessage("Time is equal to start time"),
"understood" : MessageLookupByLibrary.simpleMessage("Understood"),
"undo" : MessageLookupByLibrary.simpleMessage("UNDO"),
"unlike" : MessageLookupByLibrary.simpleMessage("Unlike"),
"unliked" : MessageLookupByLibrary.simpleMessage("Removed from favorite"),
"unliked" : MessageLookupByLibrary.simpleMessage("Episode removed from favorite"),
"updateDate" : MessageLookupByLibrary.simpleMessage("Update date"),
"updateEpisodesCount" : m14,
"updateEpisodesCount" : m23,
"updateFailed" : MessageLookupByLibrary.simpleMessage("Update failed, network error"),
"version" : m15
"version" : m24
};
}

View File

@ -23,33 +23,51 @@ class MessageLookup extends MessageLookupByLibrary {
static m1(count) => "${Intl.plural(count, zero: '', other: '${count}集节目添加到播放列表')}";
static m2(host) => "平台 ${host}";
static m2(count) => "${Intl.plural(count, zero: '今天', other: '${count}天前')}";
static m3(count) => "${Intl.plural(count, zero: '', other: '${count} 小时')}";
static m3(count) => "${Intl.plural(count, zero: '从不', other: '${count}')}";
static m4(count) => "${Intl.plural(count, zero: '', other: '${count}分钟')}";
static m4(time) => "${time}";
static m5(title) => "获取数据 ${title}";
static m5(count) => "${Intl.plural(count, zero: '分组', other: '分组')}";
static m6(title) => "订阅失败,网络错误 ${title}";
static m6(host) => "平台 ${host}";
static m7(title) => "订阅${title}";
static m7(count) => "${Intl.plural(count, zero: '', other: '${count}小时前')}";
static m8(title) => "订阅失败,播客已存在 ${title}";
static m8(count) => "${Intl.plural(count, zero: '', other: '${count} 小时')}";
static m9(title) => "订阅成功 ${title}";
static m9(count) => "${Intl.plural(count, zero: '', other: '${count}分钟前')}";
static m10(title) => "更新 ${title}";
static m10(count) => "${Intl.plural(count, zero: '', other: '${count}分钟')}";
static m11(title) => "更新失败 ${title}";
static m11(title) => "获取数据 ${title}";
static m12(time) => "上次播放${time}";
static m12(title) => "订阅失败,网络错误 ${title}";
static m13(time) => "剩余 ${time}";
static m13(title) => "订阅${title}";
static m14(count) => "${Intl.plural(count, zero: '未有更新', other: '更新 ${count} 集节目')}";
static m14(title) => "订阅失败,播客已存在 ${title}";
static m15(version) => "版本:${version}";
static m15(title) => "订阅成功 ${title}";
static m16(title) => "更新 ${title}";
static m17(title) => "更新失败 ${title}";
static m18(date) => "${date}移除";
static m19(count) => "${Intl.plural(count, zero: '', other: '${count}秒前')}";
static m20(time) => "上次播放${time}";
static m21(time) => "剩余 ${time}";
static m22(time) => "${time}";
static m23(count) => "${Intl.plural(count, zero: '未有更新', other: '更新 ${count} 集节目')}";
static m24(version) => "版本:${version}";
final messages = _notInlinedMessages(_notInlinedMessages);
static _notInlinedMessages(_) => <String, Function> {
@ -59,6 +77,7 @@ class MessageLookup extends MessageLookupByLibrary {
"addNewEpisodeTooltip" : MessageLookupByLibrary.simpleMessage("添加更新节目到播放列表"),
"addSomeGroups" : MessageLookupByLibrary.simpleMessage("请添加分组"),
"all" : MessageLookupByLibrary.simpleMessage("全部"),
"autoDownload" : MessageLookupByLibrary.simpleMessage("自动下载"),
"back" : MessageLookupByLibrary.simpleMessage("返回"),
"buffering" : MessageLookupByLibrary.simpleMessage("缓冲"),
"cancel" : MessageLookupByLibrary.simpleMessage("取消"),
@ -69,16 +88,26 @@ class MessageLookup extends MessageLookupByLibrary {
"color" : MessageLookupByLibrary.simpleMessage("颜色"),
"confirm" : MessageLookupByLibrary.simpleMessage("确认"),
"darkMode" : MessageLookupByLibrary.simpleMessage("夜晚模式"),
"daysAgo" : m2,
"daysCount" : m3,
"delete" : MessageLookupByLibrary.simpleMessage("删除"),
"developer" : MessageLookupByLibrary.simpleMessage("关于我"),
"dismiss" : MessageLookupByLibrary.simpleMessage("忽略"),
"done" : MessageLookupByLibrary.simpleMessage("完成"),
"download" : MessageLookupByLibrary.simpleMessage("下载"),
"downloaded" : MessageLookupByLibrary.simpleMessage("已下载"),
"editName" : MessageLookupByLibrary.simpleMessage("修改组名"),
"editGroupName" : MessageLookupByLibrary.simpleMessage("修改组名"),
"endOfEpisode" : MessageLookupByLibrary.simpleMessage("节目结束"),
"episode" : MessageLookupByLibrary.simpleMessage("节目"),
"featureDiscoveryEditGroup" : MessageLookupByLibrary.simpleMessage("点击修改分组"),
"featureDiscoveryEditGroupDes" : MessageLookupByLibrary.simpleMessage("您可以修改分组名或者删除分组,注意 Home 分组无法修改,也不能被删除。"),
"featureDiscoveryEpisode" : MessageLookupByLibrary.simpleMessage("节目界面"),
"featureDiscoveryEpisodeDes" : MessageLookupByLibrary.simpleMessage("您可以长按播放节目或者添加节目到播放列表。"),
"featureDiscoveryEpisodeTitle" : MessageLookupByLibrary.simpleMessage("您可以长按快速播放节目"),
"featureDiscoveryGroup" : MessageLookupByLibrary.simpleMessage("点击添加分组"),
"featureDiscoveryGroupDes" : MessageLookupByLibrary.simpleMessage("新订阅播客默认分组为 Home您可以添加新的分组移动播客到新的分组每个播客可以被添加到多个分组。"),
"featureDiscoveryGroupPodcast" : MessageLookupByLibrary.simpleMessage("长按可以移动播客位置"),
"featureDiscoveryGroupPodcastDes" : MessageLookupByLibrary.simpleMessage("您可以点击对播客进行设置,或者长按重新排序。"),
"featureDiscoveryOMPL" : MessageLookupByLibrary.simpleMessage("点击导入 OMPL"),
"featureDiscoveryOMPLDes" : MessageLookupByLibrary.simpleMessage("在这里您可以导入OMPL文件打开设置页面或者刷新所有播客。"),
"featureDiscoveryPlaylist" : MessageLookupByLibrary.simpleMessage("点击打开播放列表"),
@ -92,23 +121,28 @@ class MessageLookup extends MessageLookupByLibrary {
"feedbackGithub" : MessageLookupByLibrary.simpleMessage("提交Issue"),
"feedbackPlay" : MessageLookupByLibrary.simpleMessage("Play评价"),
"feedbackTelegram" : MessageLookupByLibrary.simpleMessage("加入小组"),
"from" : MessageLookupByLibrary.simpleMessage(""),
"fonts" : MessageLookupByLibrary.simpleMessage("字体"),
"from" : m4,
"goodNight" : MessageLookupByLibrary.simpleMessage("晚安"),
"groupExisted" : MessageLookupByLibrary.simpleMessage("组名已使用"),
"groupFilter" : MessageLookupByLibrary.simpleMessage("分组"),
"groups" : MessageLookupByLibrary.simpleMessage("分组"),
"groupRemoveConfirm" : MessageLookupByLibrary.simpleMessage("您确认要移除该分组吗?播客将被移动到 Home 分组。"),
"groups" : m5,
"homeGroupsSeeAll" : MessageLookupByLibrary.simpleMessage("查看全部"),
"homeMenuPlaylist" : MessageLookupByLibrary.simpleMessage("播放列表"),
"homeSubMenuLikeData" : MessageLookupByLibrary.simpleMessage("添加日期"),
"homeSubMenuSortBy" : MessageLookupByLibrary.simpleMessage("排序"),
"homeSubMenuUpdateDate" : MessageLookupByLibrary.simpleMessage("更新日期"),
"homeTabMenuFavotite" : MessageLookupByLibrary.simpleMessage("收藏"),
"homeTabMenuRecent" : MessageLookupByLibrary.simpleMessage("最近更新"),
"homeToprightMenuAbout" : MessageLookupByLibrary.simpleMessage("关于"),
"homeToprightMenuImportOMPL" : MessageLookupByLibrary.simpleMessage("导入OMPL"),
"homeToprightMenuRefreshAll" : MessageLookupByLibrary.simpleMessage("全部刷新"),
"homeToprightMenuSettings" : MessageLookupByLibrary.simpleMessage("设置"),
"hostedOn" : m2,
"hoursCount" : m3,
"hostedOn" : m6,
"hoursAgo" : m7,
"hoursCount" : m8,
"introFourthPage" : MessageLookupByLibrary.simpleMessage("长按节目打开快捷菜单。"),
"introSecondPage" : MessageLookupByLibrary.simpleMessage("您可以通过搜索订阅播客也可以直接导入OMPL文件。"),
"introThirdPage" : MessageLookupByLibrary.simpleMessage("您可以创建分组,上下滑动切换分组。"),
"later" : MessageLookupByLibrary.simpleMessage("稍后"),
"lightMode" : MessageLookupByLibrary.simpleMessage("明亮模式"),
"like" : MessageLookupByLibrary.simpleMessage("喜欢"),
@ -117,6 +151,7 @@ class MessageLookup extends MessageLookupByLibrary {
"listen" : MessageLookupByLibrary.simpleMessage("收听"),
"listened" : MessageLookupByLibrary.simpleMessage("已收听"),
"loadMore" : MessageLookupByLibrary.simpleMessage("加载更多"),
"mark" : MessageLookupByLibrary.simpleMessage("标记"),
"markConfirm" : MessageLookupByLibrary.simpleMessage("确认标记"),
"markConfirmContent" : MessageLookupByLibrary.simpleMessage("是否确认标记全部节目为已收听?"),
"markListened" : MessageLookupByLibrary.simpleMessage("标记已收听"),
@ -125,24 +160,28 @@ class MessageLookup extends MessageLookupByLibrary {
"menuMarkAllListened" : MessageLookupByLibrary.simpleMessage("标记所有已收听"),
"menuViewRSS" : MessageLookupByLibrary.simpleMessage("查看 RSS"),
"menuVisitSite" : MessageLookupByLibrary.simpleMessage("访问网站"),
"minsCount" : m4,
"minsAgo" : m9,
"minsCount" : m10,
"network" : MessageLookupByLibrary.simpleMessage("网络"),
"newGroup" : MessageLookupByLibrary.simpleMessage("创建分组"),
"newestFirst" : MessageLookupByLibrary.simpleMessage("由新到旧"),
"next" : MessageLookupByLibrary.simpleMessage("下一步"),
"noEpisodeDownload" : MessageLookupByLibrary.simpleMessage("暂无下载节目"),
"noEpisodeFavorite" : MessageLookupByLibrary.simpleMessage("暂无收藏节目"),
"noEpisodeRecent" : MessageLookupByLibrary.simpleMessage("暂无节目"),
"noPodcastGroup" : MessageLookupByLibrary.simpleMessage("分组无播客"),
"notificaitonFatch" : m5,
"notificationNetworkError" : m6,
"notificationSubscribe" : m7,
"notificationSubscribeExisted" : m8,
"notificationSuccess" : m9,
"notificationUpdate" : m10,
"notificationUpdateError" : m11,
"notificaitonFatch" : m11,
"notificationNetworkError" : m12,
"notificationSubscribe" : m13,
"notificationSubscribeExisted" : m14,
"notificationSuccess" : m15,
"notificationUpdate" : m16,
"notificationUpdateError" : m17,
"oldestFirst" : MessageLookupByLibrary.simpleMessage("由旧到新"),
"play" : MessageLookupByLibrary.simpleMessage("播放"),
"playing" : MessageLookupByLibrary.simpleMessage("正在播放"),
"plugins" : MessageLookupByLibrary.simpleMessage("插件"),
"podcast" : MessageLookupByLibrary.simpleMessage("播客"),
"podcastSubscribed" : MessageLookupByLibrary.simpleMessage("播客已订阅"),
"popupMenuDownloadDes" : MessageLookupByLibrary.simpleMessage("下载节目"),
"popupMenuLaterDes" : MessageLookupByLibrary.simpleMessage("添加到播放列表"),
@ -150,10 +189,15 @@ class MessageLookup extends MessageLookupByLibrary {
"popupMenuMarkDes" : MessageLookupByLibrary.simpleMessage("设置为已收听"),
"popupMenuPlayDes" : MessageLookupByLibrary.simpleMessage("播放节目"),
"privacyPolicy" : MessageLookupByLibrary.simpleMessage("隐私条款"),
"recoverSubscribe" : MessageLookupByLibrary.simpleMessage("恢复订阅"),
"remove" : MessageLookupByLibrary.simpleMessage("移除"),
"removeConfirm" : MessageLookupByLibrary.simpleMessage("取消订阅"),
"removePodcastDes" : MessageLookupByLibrary.simpleMessage("您确认要取消订阅吗?"),
"removedAt" : m18,
"schedule" : MessageLookupByLibrary.simpleMessage("定时"),
"searchInvalidRss" : MessageLookupByLibrary.simpleMessage("RSS 链接错误"),
"searchPodcast" : MessageLookupByLibrary.simpleMessage("搜索播客"),
"secondsAgo" : m19,
"settingStorage" : MessageLookupByLibrary.simpleMessage("储存空间"),
"settingsAccentColor" : MessageLookupByLibrary.simpleMessage("次要颜色"),
"settingsAccentColorDes" : MessageLookupByLibrary.simpleMessage("包括溢出颜色"),
@ -184,7 +228,7 @@ class MessageLookup extends MessageLookupByLibrary {
"settingsLayout" : MessageLookupByLibrary.simpleMessage("布局"),
"settingsLayoutDes" : MessageLookupByLibrary.simpleMessage("应用布局"),
"settingsLibraries" : MessageLookupByLibrary.simpleMessage("开源"),
"settingsLibrariesDes" : MessageLookupByLibrary.simpleMessage("使用开源项目"),
"settingsLibrariesDes" : MessageLookupByLibrary.simpleMessage("开源项目使用"),
"settingsManageDownload" : MessageLookupByLibrary.simpleMessage("下载管理"),
"settingsManageDownloadDes" : MessageLookupByLibrary.simpleMessage("管理下载节目文件"),
"settingsMenuAutoPlay" : MessageLookupByLibrary.simpleMessage("自动播放下一节目"),
@ -196,7 +240,7 @@ class MessageLookup extends MessageLookupByLibrary {
"settingsPopupMenu" : MessageLookupByLibrary.simpleMessage("节目弹出菜单"),
"settingsPopupMenuDes" : MessageLookupByLibrary.simpleMessage("修改节目弹出菜单"),
"settingsPrefrence" : MessageLookupByLibrary.simpleMessage("首选项"),
"settingsRealDark" : MessageLookupByLibrary.simpleMessage("真的"),
"settingsRealDark" : MessageLookupByLibrary.simpleMessage(""),
"settingsRealDarkDes" : MessageLookupByLibrary.simpleMessage("如果夜不够黑,请开启"),
"settingsSTAuto" : MessageLookupByLibrary.simpleMessage("自动睡眠模式"),
"settingsSTAutoDes" : MessageLookupByLibrary.simpleMessage("定期开启睡眠模式"),
@ -210,24 +254,33 @@ class MessageLookup extends MessageLookupByLibrary {
"settingsUpdateInterval" : MessageLookupByLibrary.simpleMessage("更新频率"),
"settingsUpdateIntervalDes" : MessageLookupByLibrary.simpleMessage("默认 24 小时"),
"size" : MessageLookupByLibrary.simpleMessage("大小"),
"skipSecondsAtStart" : MessageLookupByLibrary.simpleMessage("开头跳过秒数"),
"sleepTimer" : MessageLookupByLibrary.simpleMessage("睡眠模式"),
"subscribe" : MessageLookupByLibrary.simpleMessage("订阅"),
"systemDefault" : MessageLookupByLibrary.simpleMessage("系统默认"),
"timeLastPlayed" : m12,
"timeLeft" : m13,
"to" : MessageLookupByLibrary.simpleMessage(""),
"timeLastPlayed" : m20,
"timeLeft" : m21,
"to" : m22,
"toastAddPlaylist" : MessageLookupByLibrary.simpleMessage("添加到播放列表"),
"toastDescovery" : MessageLookupByLibrary.simpleMessage("重启应用后可查看"),
"toastDiscovery" : MessageLookupByLibrary.simpleMessage("重启应用后可查看"),
"toastFileError" : MessageLookupByLibrary.simpleMessage("文件错误,导入失败"),
"toastFileNotVilid" : MessageLookupByLibrary.simpleMessage("文件错误"),
"toastFileNotValid" : MessageLookupByLibrary.simpleMessage("文件错误"),
"toastHomeGroupNotSupport" : MessageLookupByLibrary.simpleMessage("Home 分组不支持此功能"),
"toastOneGroup" : MessageLookupByLibrary.simpleMessage("请至少选择一个分组"),
"toastPodcastRecovering" : MessageLookupByLibrary.simpleMessage("恢复中,请稍后"),
"toastReadFile" : MessageLookupByLibrary.simpleMessage("读取文件成功"),
"toastRecoverFailed" : MessageLookupByLibrary.simpleMessage("恢复订阅失败"),
"toastRemovePlaylist" : MessageLookupByLibrary.simpleMessage("从播放列表移除"),
"toastSettingSaved" : MessageLookupByLibrary.simpleMessage("设置已保存"),
"toastTimeEqualEnd" : MessageLookupByLibrary.simpleMessage("与结束时间相同"),
"toastTimeEqualStart" : MessageLookupByLibrary.simpleMessage("与起始时间相同"),
"understood" : MessageLookupByLibrary.simpleMessage("了解"),
"undo" : MessageLookupByLibrary.simpleMessage("撤销"),
"unlike" : MessageLookupByLibrary.simpleMessage("取消喜欢"),
"unliked" : MessageLookupByLibrary.simpleMessage("从收藏移除"),
"updateDate" : MessageLookupByLibrary.simpleMessage("更新日期"),
"updateEpisodesCount" : m14,
"updateEpisodesCount" : m23,
"updateFailed" : MessageLookupByLibrary.simpleMessage("更新失败"),
"version" : m15
"version" : m24
};
}

View File

@ -99,6 +99,16 @@ class S {
);
}
/// `Auto download`
String get autoDownload {
return Intl.message(
'Auto download',
name: 'autoDownload',
desc: '',
args: [],
);
}
/// `Back`
String get back {
return Intl.message(
@ -199,6 +209,32 @@ class S {
);
}
/// `{count, plural, zero{Today} one{{count} day ago} other{{count} days ago}}`
String daysAgo(num count) {
return Intl.plural(
count,
zero: 'Today',
one: '$count day ago',
other: '$count days ago',
name: 'daysAgo',
desc: '',
args: [count],
);
}
/// `{count, plural, zero{Never} one{{count} day} other{{count} days}}`
String daysCount(num count) {
return Intl.plural(
count,
zero: 'Never',
one: '$count day',
other: '$count days',
name: 'daysCount',
desc: '',
args: [count],
);
}
/// `Delete`
String get delete {
return Intl.message(
@ -214,7 +250,7 @@ class S {
return Intl.message(
'Developer',
name: 'developer',
desc: '',
desc: 'Can also translate to About me',
args: [],
);
}
@ -229,6 +265,16 @@ class S {
);
}
/// `Done`
String get done {
return Intl.message(
'Done',
name: 'done',
desc: '',
args: [],
);
}
/// `Download`
String get download {
return Intl.message(
@ -249,11 +295,11 @@ class S {
);
}
/// `Edit name`
String get editName {
/// `Edit group name`
String get editGroupName {
return Intl.message(
'Edit name',
name: 'editName',
'Edit group name',
name: 'editGroupName',
desc: '',
args: [],
);
@ -269,6 +315,36 @@ class S {
);
}
/// `Episode`
String get episode {
return Intl.message(
'Episode',
name: 'episode',
desc: '',
args: [],
);
}
/// `Tap to edit group`
String get featureDiscoveryEditGroup {
return Intl.message(
'Tap to edit group',
name: 'featureDiscoveryEditGroup',
desc: '',
args: [],
);
}
/// `You can change group name or delete group here, but home group can not be edited or deleted`
String get featureDiscoveryEditGroupDes {
return Intl.message(
'You can change group name or delete group here, but home group can not be edited or deleted',
name: 'featureDiscoveryEditGroupDes',
desc: '',
args: [],
);
}
/// `Episode view`
String get featureDiscoveryEpisode {
return Intl.message(
@ -299,6 +375,46 @@ class S {
);
}
/// `Tap to add group`
String get featureDiscoveryGroup {
return Intl.message(
'Tap to add group',
name: 'featureDiscoveryGroup',
desc: '',
args: [],
);
}
/// `Default group is home for new podcast, you can create new group and move podcast to new group, podcast can be added to multi-groups.`
String get featureDiscoveryGroupDes {
return Intl.message(
'Default group is home for new podcast, you can create new group and move podcast to new group, podcast can be added to multi-groups.',
name: 'featureDiscoveryGroupDes',
desc: '',
args: [],
);
}
/// `Long tap to reorder podcast`
String get featureDiscoveryGroupPodcast {
return Intl.message(
'Long tap to reorder podcast',
name: 'featureDiscoveryGroupPodcast',
desc: '',
args: [],
);
}
/// `You can tap to see more options, or long tap to reorder podcast in group.`
String get featureDiscoveryGroupPodcastDes {
return Intl.message(
'You can tap to see more options, or long tap to reorder podcast in group.',
name: 'featureDiscoveryGroupPodcastDes',
desc: '',
args: [],
);
}
/// `Tap to import OMPL`
String get featureDiscoveryOMPL {
return Intl.message(
@ -429,16 +545,26 @@ class S {
);
}
/// `From`
String get from {
/// `Fonts`
String get fonts {
return Intl.message(
'From',
name: 'from',
'Fonts',
name: 'fonts',
desc: '',
args: [],
);
}
/// `From {time}`
String from(Object time) {
return Intl.message(
'From $time',
name: 'from',
desc: '',
args: [time],
);
}
/// `Good Night`
String get goodNight {
return Intl.message(
@ -449,6 +575,16 @@ class S {
);
}
/// `Group existed`
String get groupExisted {
return Intl.message(
'Group existed',
name: 'groupExisted',
desc: '',
args: [],
);
}
/// `Group filter`
String get groupFilter {
return Intl.message(
@ -459,16 +595,29 @@ class S {
);
}
/// `Groups`
String get groups {
/// `Are you sure you want to delete this group? Podcasts will be moved to Home group.`
String get groupRemoveConfirm {
return Intl.message(
'Groups',
name: 'groups',
'Are you sure you want to delete this group? Podcasts will be moved to Home group.',
name: 'groupRemoveConfirm',
desc: '',
args: [],
);
}
/// `{count, plural, zero{Group} one{Group} other{Groups}}`
String groups(num count) {
return Intl.plural(
count,
zero: 'Group',
one: 'Group',
other: 'Groups',
name: 'groups',
desc: '',
args: [count],
);
}
/// `See All`
String get homeGroupsSeeAll {
return Intl.message(
@ -489,16 +638,6 @@ class S {
);
}
/// `Like Date`
String get homeSubMenuLikeData {
return Intl.message(
'Like Date',
name: 'homeSubMenuLikeData',
desc: '',
args: [],
);
}
/// `Sort by`
String get homeSubMenuSortBy {
return Intl.message(
@ -509,16 +648,6 @@ class S {
);
}
/// `Update Date`
String get homeSubMenuUpdateDate {
return Intl.message(
'Update Date',
name: 'homeSubMenuUpdateDate',
desc: '',
args: [],
);
}
/// `Favorite`
String get homeTabMenuFavotite {
return Intl.message(
@ -589,6 +718,19 @@ class S {
);
}
/// `{count, plural, zero{} one{{count} hour ago} other{{count} hours ago}}`
String hoursAgo(num count) {
return Intl.plural(
count,
zero: '',
one: '$count hour ago',
other: '$count hours ago',
name: 'hoursAgo',
desc: '',
args: [count],
);
}
/// `{count, plural, zero{} one{{count} hour} other{{count} hours}}`
String hoursCount(num count) {
return Intl.plural(
@ -602,6 +744,36 @@ class S {
);
}
/// `Long press on episode card for quick actions.`
String get introFourthPage {
return Intl.message(
'Long press on episode card for quick actions.',
name: 'introFourthPage',
desc: '',
args: [],
);
}
/// `Subscribe podcast via search or import OMPL file.`
String get introSecondPage {
return Intl.message(
'Subscribe podcast via search or import OMPL file.',
name: 'introSecondPage',
desc: '',
args: [],
);
}
/// `You can create new group for podcasts, swipe on podcast list to change group.`
String get introThirdPage {
return Intl.message(
'You can create new group for podcasts, swipe on podcast list to change group.',
name: 'introThirdPage',
desc: '',
args: [],
);
}
/// `Later`
String get later {
return Intl.message(
@ -682,6 +854,16 @@ class S {
);
}
/// `Mark`
String get mark {
return Intl.message(
'Mark',
name: 'mark',
desc: 'The short the best',
args: [],
);
}
/// `Mark confirm`
String get markConfirm {
return Intl.message(
@ -762,6 +944,19 @@ class S {
);
}
/// `{count, plural, zero{} one{{count} minute ago} other{{count} minutes ago}}`
String minsAgo(num count) {
return Intl.plural(
count,
zero: '',
one: '$count minute ago',
other: '$count minutes ago',
name: 'minsAgo',
desc: '',
args: [count],
);
}
/// `{count, plural, zero{} one{{count} min} other{{count} mins}}`
String minsCount(num count) {
return Intl.plural(
@ -805,6 +1000,16 @@ class S {
);
}
/// `Next`
String get next {
return Intl.message(
'Next',
name: 'next',
desc: '',
args: [],
);
}
/// `No episode downloaded yet`
String get noEpisodeDownload {
return Intl.message(
@ -945,6 +1150,26 @@ class S {
);
}
/// `Plugins`
String get plugins {
return Intl.message(
'Plugins',
name: 'plugins',
desc: '',
args: [],
);
}
/// `Podcast`
String get podcast {
return Intl.message(
'Podcast',
name: 'podcast',
desc: '',
args: [],
);
}
/// `Podcast subscribed`
String get podcastSubscribed {
return Intl.message(
@ -1015,6 +1240,16 @@ class S {
);
}
/// `Recover subscribe`
String get recoverSubscribe {
return Intl.message(
'Recover subscribe',
name: 'recoverSubscribe',
desc: '',
args: [],
);
}
/// `Remove`
String get remove {
return Intl.message(
@ -1025,6 +1260,36 @@ class S {
);
}
/// `Remove confirm`
String get removeConfirm {
return Intl.message(
'Remove confirm',
name: 'removeConfirm',
desc: 'unsubscribe podcast dialog',
args: [],
);
}
/// `Removed at {date}`
String removedAt(Object date) {
return Intl.message(
'Removed at $date',
name: 'removedAt',
desc: 'For example Removed at 2020.10.10',
args: [date],
);
}
/// `Are you sure you want to unsubscribe?`
String get removePodcastDes {
return Intl.message(
'Are you sure you want to unsubscribe?',
name: 'removePodcastDes',
desc: '',
args: [],
);
}
/// `Schedule`
String get schedule {
return Intl.message(
@ -1055,6 +1320,19 @@ class S {
);
}
/// `{count, plural, zero{} one{{count} second ago} other{{count} seconds ago}}`
String secondsAgo(num count) {
return Intl.plural(
count,
zero: '',
one: '$count second ago',
other: '$count seconds ago',
name: 'secondsAgo',
desc: '',
args: [count],
);
}
/// `Accent color`
String get settingsAccentColor {
return Intl.message(
@ -1265,10 +1543,10 @@ class S {
);
}
/// `Bugs and feature request`
/// `Bugs and features request`
String get settingsFeedbackDes {
return Intl.message(
'Bugs and feature request',
'Bugs and features request',
name: 'settingsFeedbackDes',
desc: '',
args: [],
@ -1615,6 +1893,16 @@ class S {
);
}
/// `Skip seconds at start`
String get skipSecondsAtStart {
return Intl.message(
'Skip seconds at start',
name: 'skipSecondsAtStart',
desc: '',
args: [],
);
}
/// `Sleep timer`
String get sleepTimer {
return Intl.message(
@ -1665,13 +1953,13 @@ class S {
);
}
/// `To`
String get to {
/// `To {time}`
String to(Object time) {
return Intl.message(
'To',
'To $time',
name: 'to',
desc: '',
args: [],
args: [time],
);
}
@ -1686,35 +1974,65 @@ class S {
}
/// `Discovery feature reopened, pleast restart the app`
String get toastDescovery {
String get toastDiscovery {
return Intl.message(
'Discovery feature reopened, pleast restart the app',
name: 'toastDescovery',
name: 'toastDiscovery',
desc: '',
args: [],
);
}
/// `File error, Subscribe failed`
/// `File error, subscribe failed`
String get toastFileError {
return Intl.message(
'File error, Subscribe failed',
'File error, subscribe failed',
name: 'toastFileError',
desc: '',
args: [],
);
}
/// `File not vilid`
String get toastFileNotVilid {
/// `File not valid`
String get toastFileNotValid {
return Intl.message(
'File not vilid',
name: 'toastFileNotVilid',
'File not valid',
name: 'toastFileNotValid',
desc: '',
args: [],
);
}
/// `Home group is not supported`
String get toastHomeGroupNotSupport {
return Intl.message(
'Home group is not supported',
name: 'toastHomeGroupNotSupport',
desc: '',
args: [],
);
}
/// `At least select one group`
String get toastOneGroup {
return Intl.message(
'At least select one group',
name: 'toastOneGroup',
desc: '',
args: [],
);
}
/// `Recovering, wait for a moment`
String get toastPodcastRecovering {
return Intl.message(
'Recovering, wait for a moment',
name: 'toastPodcastRecovering',
desc: 'Resubscribe removed podcast',
args: [],
);
}
/// `Read file successfully`
String get toastReadFile {
return Intl.message(
@ -1725,16 +2043,56 @@ class S {
);
}
/// `Removed from playlist`
/// `Podcast recover failed`
String get toastRecoverFailed {
return Intl.message(
'Podcast recover failed',
name: 'toastRecoverFailed',
desc: 'Resubscribe removed podast',
args: [],
);
}
/// `Episode removed from playlist`
String get toastRemovePlaylist {
return Intl.message(
'Removed from playlist',
'Episode removed from playlist',
name: 'toastRemovePlaylist',
desc: '',
args: [],
);
}
/// `Setting saved`
String get toastSettingSaved {
return Intl.message(
'Setting saved',
name: 'toastSettingSaved',
desc: '',
args: [],
);
}
/// `Time is equal to end time`
String get toastTimeEqualEnd {
return Intl.message(
'Time is equal to end time',
name: 'toastTimeEqualEnd',
desc: '',
args: [],
);
}
/// `Time is equal to start time`
String get toastTimeEqualStart {
return Intl.message(
'Time is equal to start time',
name: 'toastTimeEqualStart',
desc: '',
args: [],
);
}
/// `Understood`
String get understood {
return Intl.message(
@ -1745,6 +2103,16 @@ class S {
);
}
/// `UNDO`
String get undo {
return Intl.message(
'UNDO',
name: 'undo',
desc: '',
args: [],
);
}
/// `Unlike`
String get unlike {
return Intl.message(
@ -1755,10 +2123,10 @@ class S {
);
}
/// `Removed from favorite`
/// `Episode removed from favorite`
String get unliked {
return Intl.message(
'Removed from favorite',
'Episode removed from favorite',
name: 'unliked',
desc: '',
args: [],
@ -1775,13 +2143,13 @@ class S {
);
}
/// `{count, plural, zero{No Update} one{Updated {count} Episode} other{Updated {count} Episodes}}`
/// `{count, plural, zero{No update} one{Updated {count} episode} other{Updated {count} episodes}}`
String updateEpisodesCount(num count) {
return Intl.plural(
count,
zero: 'No Update',
one: 'Updated $count Episode',
other: 'Updated $count Episodes',
zero: 'No update',
one: 'Updated $count episode',
other: 'Updated $count episodes',
name: 'updateEpisodesCount',
desc: '',
args: [count],

View File

@ -58,6 +58,7 @@ class _PlaylistPageState extends State<PlaylistPage> {
@override
Widget build(BuildContext context) {
final s = context.s;
var audio = Provider.of<AudioPlayerNotifier>(context, listen: false);
return AnnotatedRegion<SystemUiOverlayStyle>(
value: SystemUiOverlayStyle(
@ -69,7 +70,7 @@ class _PlaylistPageState extends State<PlaylistPage> {
child: Scaffold(
backgroundColor: Theme.of(context).primaryColor,
appBar: AppBar(
title: _topHeight == 60 ? Text('Playlist') : Center(),
title: _topHeight == 60 ? Text(s.homeMenuPlaylist) : Center(),
elevation: 0,
backgroundColor: Theme.of(context).primaryColor,
),
@ -98,7 +99,9 @@ class _PlaylistPageState extends State<PlaylistPage> {
alignment: Alignment.centerLeft,
child: RichText(
text: TextSpan(
text: _topHeight > 90 ? 'Playlist\n' : '',
text: _topHeight > 90
? s.homeMenuPlaylist + '\n'
: '',
style: TextStyle(
color: Theme.of(context)
.textTheme
@ -311,6 +314,7 @@ class _DismissibleContainerState extends State<DismissibleContainer> {
@override
Widget build(BuildContext context) {
var audio = Provider.of<AudioPlayerNotifier>(context, listen: false);
final s = context.s;
Color _c = (Theme.of(context).brightness == Brightness.light)
? widget.episode.primaryColor.colorizedark()
: widget.episode.primaryColor.colorizeLight();
@ -363,17 +367,17 @@ class _DismissibleContainerState extends State<DismissibleContainer> {
int index = await audio.delFromPlaylist(widget.episode);
final episodeRemove = widget.episode;
Fluttertoast.showToast(
msg: 'Removed From Playlist',
msg: s.toastRemovePlaylist,
gravity: ToastGravity.BOTTOM,
);
Scaffold.of(context).showSnackBar(SnackBar(
behavior: SnackBarBehavior.floating,
backgroundColor: Colors.grey[800],
content: Text('Episode removed',
content: Text(s.toastRemovePlaylist,
style: TextStyle(color: Colors.white)),
action: SnackBarAction(
textColor: context.accentColor,
label: 'Undo',
label: s.undo,
onPressed: () {
audio.addToPlaylistAt(episodeRemove, index);
}),
@ -421,8 +425,7 @@ class _DismissibleContainerState extends State<DismissibleContainer> {
: Center(),
widget.episode.duration != 0
? _episodeTag(
(widget.episode.duration ~/ 60).toString() +
'min',
s.minsCount(widget.episode.duration ~/ 60),
Colors.cyan[300])
: Center(),
widget.episode.enclosureLength != null

View File

@ -38,8 +38,9 @@ class PopupMenu extends StatefulWidget {
}
class _PopupMenuState extends State<PopupMenu> {
Future<String> _getRefreshDate() async {
Future<String> _getRefreshDate(BuildContext context) async {
int refreshDate;
final s = context.s;
KeyValueStorage refreshstorage = KeyValueStorage('refreshdate');
int i = await refreshstorage.getInt();
if (i == 0) {
@ -50,17 +51,15 @@ class _PopupMenuState extends State<PopupMenu> {
refreshDate = i;
}
DateTime date = DateTime.fromMillisecondsSinceEpoch(refreshDate);
var diffrence = DateTime.now().difference(date);
if (diffrence.inSeconds < 60) {
return '${diffrence.inSeconds} seconds ago';
} else if (diffrence.inMinutes < 10) {
return '${diffrence.inMinutes} minutes ago';
} else if (diffrence.inHours < 1) {
return 'an hour ago';
} else if (diffrence.inHours <= 24) {
return '${diffrence.inHours} hours ago';
} else if (diffrence.inDays < 7) {
return '${diffrence.inDays} days ago';
var difference = DateTime.now().difference(date);
if (difference.inSeconds < 60) {
return s.secondsAgo(difference.inSeconds);
} else if (difference.inMinutes < 60) {
return s.minsAgo(difference.inMinutes);
} else if (difference.inHours < 24) {
return s.hoursAgo(difference.inHours);
} else if (difference.inDays < 7) {
return s.daysAgo(difference.inDays);
} else {
return DateFormat.yMMMd()
.format(DateTime.fromMillisecondsSinceEpoch(refreshDate));
@ -84,7 +83,7 @@ class _PopupMenuState extends State<PopupMenu> {
.toList();
if (total.length == 0) {
Fluttertoast.showToast(
msg: 'File not valid',
msg: s.toastFileNotValid,
gravity: ToastGravity.BOTTOM,
);
} else {
@ -104,7 +103,7 @@ class _PopupMenuState extends State<PopupMenu> {
} catch (e) {
print(e);
Fluttertoast.showToast(
msg: 'File error, Subscribe failed',
msg: s.toastFileError,
gravity: ToastGravity.TOP,
);
//await Future.delayed(Duration(seconds: 5));
@ -121,7 +120,7 @@ class _PopupMenuState extends State<PopupMenu> {
print('File Path' + filePath);
//importOmpl.importState = ImportState.start;
Fluttertoast.showToast(
msg: 'Read file successfully',
msg: s.toastReadFile,
gravity: ToastGravity.TOP,
);
_saveOmpl(filePath);
@ -134,7 +133,7 @@ class _PopupMenuState extends State<PopupMenu> {
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(10))),
elevation: 1,
tooltip: 'Menu',
tooltip: s.menu,
itemBuilder: (context) => [
PopupMenuItem(
value: 1,
@ -154,7 +153,7 @@ class _PopupMenuState extends State<PopupMenu> {
s.homeToprightMenuRefreshAll,
),
FutureBuilder<String>(
future: _getRefreshDate(),
future: _getRefreshDate(context),
builder: (_, snapshot) {
if (snapshot.hasData)
return Text(

View File

@ -4,6 +4,7 @@ import 'package:provider/provider.dart';
import '../state/settingstate.dart';
import '../home/home.dart';
import '../util/pageroute.dart';
import '../util/context_extension.dart';
import 'fourthpage.dart';
import 'secondpage.dart';
import 'thirdpage.dart';
@ -200,7 +201,7 @@ class _SlideIntroState extends State<SlideIntro> {
height: 40,
width: 80,
child: Center(
child: Text('Next',
child: Text(context.s.next,
style: TextStyle(
color: Colors.black)))))
: InkWell(
@ -221,7 +222,7 @@ class _SlideIntroState extends State<SlideIntro> {
height: 40,
width: 80,
child: Center(
child: Text('Done',
child: Text(context.s.done,
style: TextStyle(
color: Colors.black))))),
),

View File

@ -23,13 +23,13 @@ class _FourthPageState extends State<FourthPage> {
height: 200,
alignment: Alignment.center,
padding: EdgeInsets.all(40),
child: Text('Long press on episode card for quick actions.', style: TextStyle(
fontSize: 30,
color: Colors.white
),),
child: Text(
context.s.introFourthPage,
style: TextStyle(fontSize: 30, color: Colors.white),
),
),
Container(
height: context.width*3/4,
height: context.width * 3 / 4,
// color: Colors.red,
child: FlareActor(
'assets/longtap.flr',

View File

@ -25,7 +25,7 @@ class _SecondPageState extends State<SecondPage> {
padding:
EdgeInsets.only(top: 20, bottom: 20, left: 40, right: 40),
child: Text(
'Subscribe podcast via search or import OMPL file.',
context.s.introSecondPage,
style: TextStyle(fontSize: 30, color: Colors.white),
),
),

View File

@ -24,7 +24,7 @@ class _ThirdPageState extends State<ThirdPage> {
alignment: Alignment.center,
padding: EdgeInsets.all(40),
child: Text(
'Swipe on podcast list to change group.',
context.s.introThirdPage,
style: TextStyle(fontSize: 30, color: Colors.white),
),
),

View File

@ -20,6 +20,8 @@
},
"all": "All",
"@all": {},
"autoDownload": "Auto download",
"@autoDownload": {},
"back": "Back",
"@back": {},
"buffering": "Buffering",
@ -40,26 +42,48 @@
"@confirm": {},
"darkMode": "Dark mode",
"@darkMode": {},
"daysAgo": "{count, plural, zero{Today} one{{count} day ago} other{{count} days ago}}",
"@daysAgo": {},
"daysCount": "{count, plural, zero{Never} one{{count} day} other{{count} days}}",
"@daysCount": {},
"delete": "Delete",
"@delete": {},
"developer": "Developer",
"@developer": {},
"@developer": {
"description": "Can also translate to About me"
},
"dismiss": "Dismiss",
"@dismiss": {},
"done": "Done",
"@done": {},
"download": "Download",
"@download": {},
"downloaded": "Downloaded",
"@downloaded": {},
"editName": "Edit name",
"@editName": {},
"editGroupName": "Edit group name",
"@editGroupName": {},
"endOfEpisode": "End of Episode",
"@endOfEpisode": {},
"episode": "Episode",
"@episode": {},
"featureDiscoveryEditGroup": "Tap to edit group",
"@featureDiscoveryEditGroup": {},
"featureDiscoveryEditGroupDes": "You can change group name or delete group here, but home group can not be edited or deleted",
"@featureDiscoveryEditGroupDes": {},
"featureDiscoveryEpisode": "Episode view",
"@featureDiscoveryEpisode": {},
"featureDiscoveryEpisodeDes": "You can long tap to play episode or add episode to playlist.",
"@featureDiscoveryEpisodeDes": {},
"featureDiscoveryEpisodeTitle": "Long tap to play episode instantly",
"@featureDiscoveryEpisodeTitle": {},
"featureDiscoveryGroup": "Tap to add group",
"@featureDiscoveryGroup": {},
"featureDiscoveryGroupDes": "Default group is home for new podcast, you can create new group and move podcast to new group, podcast can be added to multi-groups.",
"@featureDiscoveryGroupDes": {},
"featureDiscoveryGroupPodcast": "Long tap to reorder podcast",
"@featureDiscoveryGroupPodcast": {},
"featureDiscoveryGroupPodcastDes": "You can tap to see more options, or long tap to reorder podcast in group.",
"@featureDiscoveryGroupPodcastDes": {},
"featureDiscoveryOMPL": "Tap to import OMPL",
"@featureDiscoveryOMPL": {},
"featureDiscoveryOMPLDes": "You can import OMPL file, open setting or refresh all podcast at once here.",
@ -86,24 +110,30 @@
"@feedbackPlay": {},
"feedbackTelegram": "Join group",
"@feedbackTelegram": {},
"from": "From",
"@from": {},
"fonts": "Fonts",
"@fonts": {},
"from": "From {time}",
"@from": {
"placeholders": {
"time": {}
}
},
"goodNight": "Good Night",
"@goodNight": {},
"groupExisted": "Group existed",
"@groupExisted": {},
"groupFilter": "Group filter",
"@groupFilter": {},
"groups": "Groups",
"groupRemoveConfirm": "Are you sure you want to delete this group? Podcasts will be moved to Home group.",
"@groupRemoveConfirm": {},
"groups": "{count, plural, zero{Group} one{Group} other{Groups}}",
"@groups": {},
"homeGroupsSeeAll": "See All",
"@homeGroupsSeeAll": {},
"homeMenuPlaylist": "Playlist",
"@homeMenuPlaylist": {},
"homeSubMenuLikeData": "Like Date",
"@homeSubMenuLikeData": {},
"homeSubMenuSortBy": "Sort by",
"@homeSubMenuSortBy": {},
"homeSubMenuUpdateDate": "Update Date",
"@homeSubMenuUpdateDate": {},
"homeTabMenuFavotite": "Favorite",
"@homeTabMenuFavotite": {},
"homeTabMenuRecent": "Recent",
@ -122,8 +152,16 @@
"host": {}
}
},
"hoursAgo": "{count, plural, zero{} one{{count} hour ago} other{{count} hours ago}}",
"@hoursAgo": {},
"hoursCount": "{count, plural, zero{} one{{count} hour} other{{count} hours}}",
"@hoursCount": {},
"introFourthPage": "Long press on episode card for quick actions.",
"@introFourthPage": {},
"introSecondPage": "Subscribe podcast via search or import OMPL file.",
"@introSecondPage": {},
"introThirdPage": "You can create new group for podcasts, swipe on podcast list to change group.",
"@introThirdPage": {},
"later": "Later",
"@later": {},
"lightMode": "Light mode",
@ -140,6 +178,10 @@
"@listened": {},
"loadMore": "Load more",
"@loadMore": {},
"mark": "Mark",
"@mark": {
"description": "The short the best"
},
"markConfirm": "Mark confirm",
"@markConfirm": {},
"markConfirmContent": "Confirm mark all episodes listened?",
@ -156,6 +198,8 @@
"@menuViewRSS": {},
"menuVisitSite": "Visit Site",
"@menuVisitSite": {},
"minsAgo": "{count, plural, zero{} one{{count} minute ago} other{{count} minutes ago}}",
"@minsAgo": {},
"minsCount": "{count, plural, zero{} one{{count} min} other{{count} mins}}",
"@minsCount": {},
"network": "Network",
@ -164,6 +208,8 @@
"@newestFirst": {},
"newGroup": "Create new group",
"@newGroup": {},
"next": "Next",
"@next": {},
"noEpisodeDownload": "No episode downloaded yet",
"@noEpisodeDownload": {},
"noEpisodeFavorite": "No episode collected yet",
@ -216,6 +262,10 @@
"@play": {},
"playing": "Playing",
"@playing": {},
"plugins": "Plugins",
"@plugins": {},
"podcast": "Podcast",
"@podcast": {},
"podcastSubscribed": "Podcast subscribed",
"@podcastSubscribed": {},
"popupMenuDownloadDes": "Download episode",
@ -230,14 +280,31 @@
"@popupMenuPlayDes": {},
"privacyPolicy": "Privacy Policy",
"@privacyPolicy": {},
"recoverSubscribe": "Recover subscribe",
"@recoverSubscribe": {},
"remove": "Remove",
"@remove": {},
"removeConfirm": "Remove confirm",
"@removeConfirm": {
"description": "unsubscribe podcast dialog"
},
"removedAt": "Removed at {date}",
"@removedAt": {
"description": "For example Removed at 2020.10.10",
"placeholders": {
"date": {}
}
},
"removePodcastDes": "Are you sure you want to unsubscribe?",
"@removePodcastDes": {},
"schedule": "Schedule",
"@schedule": {},
"searchInvalidRss": "Invalid RSS link",
"@searchInvalidRss": {},
"searchPodcast": "Search podcast",
"@searchPodcast": {},
"secondsAgo": "{count, plural, zero{} one{{count} second ago} other{{count} seconds ago}}",
"@secondsAgo": {},
"settingsAccentColor": "Accent color",
"@settingsAccentColor": {},
"settingsAccentColorDes": "Include the ovelay color",
@ -280,7 +347,7 @@
"@settingsExportDes": {},
"settingsFeedback": "Feedback",
"@settingsFeedback": {},
"settingsFeedbackDes": "Bugs and feature request",
"settingsFeedbackDes": "Bugs and features request",
"@settingsFeedbackDes": {},
"settingsHistory": "History",
"@settingsHistory": {},
@ -350,6 +417,8 @@
"@settingsUpdateIntervalDes": {},
"size": "Size",
"@size": {},
"skipSecondsAtStart": "Skip seconds at start",
"@skipSecondsAtStart": {},
"sleepTimer": "Sleep timer",
"@sleepTimer": {},
"subscribe": "Subscribe",
@ -368,29 +437,53 @@
"time": {}
}
},
"to": "To",
"@to": {},
"to": "To {time}",
"@to": {
"placeholders": {
"time": {}
}
},
"toastAddPlaylist": "Added to playlist",
"@toastAddPlaylist": {},
"toastDescovery": "Discovery feature reopened, pleast restart the app",
"@toastDescovery": {},
"toastFileError": "File error, Subscribe failed",
"toastDiscovery": "Discovery feature reopened, pleast restart the app",
"@toastDiscovery": {},
"toastFileError": "File error, subscribe failed",
"@toastFileError": {},
"toastFileNotVilid": "File not vilid",
"@toastFileNotVilid": {},
"toastFileNotValid": "File not valid",
"@toastFileNotValid": {},
"toastHomeGroupNotSupport": "Home group is not supported",
"@toastHomeGroupNotSupport": {},
"toastOneGroup": "At least select one group",
"@toastOneGroup": {},
"toastPodcastRecovering": "Recovering, wait for a moment",
"@toastPodcastRecovering": {
"description": "Resubscribe removed podcast"
},
"toastReadFile": "Read file successfully",
"@toastReadFile": {},
"toastRemovePlaylist": "Removed from playlist",
"toastRecoverFailed": "Podcast recover failed",
"@toastRecoverFailed": {
"description": "Resubscribe removed podast"
},
"toastRemovePlaylist": "Episode removed from playlist",
"@toastRemovePlaylist": {},
"toastSettingSaved": "Setting saved",
"@toastSettingSaved": {},
"toastTimeEqualEnd": "Time is equal to end time",
"@toastTimeEqualEnd": {},
"toastTimeEqualStart": "Time is equal to start time",
"@toastTimeEqualStart": {},
"understood": "Understood",
"@understood": {},
"undo": "UNDO",
"@undo": {},
"unlike": "Unlike",
"@unlike": {},
"unliked": "Removed from favorite",
"unliked": "Episode removed from favorite",
"@unliked": {},
"updateDate": "Update date",
"@updateDate": {},
"updateEpisodesCount": "{count, plural, zero{No Update} one{Updated {count} Episode} other{Updated {count} Episodes}}",
"updateEpisodesCount": "{count, plural, zero{No update} one{Updated {count} episode} other{Updated {count} episodes}}",
"@updateEpisodesCount": {},
"updateFailed": "Update failed, network error",
"@updateFailed": {},

View File

@ -20,6 +20,8 @@
},
"all": "全部",
"@all": {},
"autoDownload": "自动下载",
"@autoDownload": {},
"back": "返回",
"@back": {},
"buffering": "缓冲",
@ -40,26 +42,48 @@
"@confirm": {},
"darkMode": "夜晚模式",
"@darkMode": {},
"daysAgo": "{count, plural, zero{今天} other{{count}天前}}",
"@daysAgo": {},
"daysCount": "{count, plural, zero{从不} other{{count}天}}",
"@daysCount": {},
"delete": "删除",
"@delete": {},
"developer": "关于我",
"@developer": {},
"@developer": {
"description": "Can also translate to About me"
},
"dismiss": "忽略",
"@dismiss": {},
"done": "完成",
"@done": {},
"download": "下载",
"@download": {},
"downloaded": "已下载",
"@downloaded": {},
"editName": "修改组名",
"@editName": {},
"editGroupName": "修改组名",
"@editGroupName": {},
"endOfEpisode": "节目结束",
"@endOfEpisode": {},
"episode": "节目",
"@episode": {},
"featureDiscoveryEditGroup": "点击修改分组",
"@featureDiscoveryEditGroup": {},
"featureDiscoveryEditGroupDes": "您可以修改分组名或者删除分组,注意 Home 分组无法修改,也不能被删除。",
"@featureDiscoveryEditGroupDes": {},
"featureDiscoveryEpisode": "节目界面",
"@featureDiscoveryEpisode": {},
"featureDiscoveryEpisodeDes": "您可以长按播放节目或者添加节目到播放列表。",
"@featureDiscoveryEpisodeDes": {},
"featureDiscoveryEpisodeTitle": "您可以长按快速播放节目",
"@featureDiscoveryEpisodeTitle": {},
"featureDiscoveryGroup": "点击添加分组",
"@featureDiscoveryGroup": {},
"featureDiscoveryGroupDes": "新订阅播客默认分组为 Home您可以添加新的分组移动播客到新的分组每个播客可以被添加到多个分组。",
"@featureDiscoveryGroupDes": {},
"featureDiscoveryGroupPodcast": "长按可以移动播客位置",
"@featureDiscoveryGroupPodcast": {},
"featureDiscoveryGroupPodcastDes": "您可以点击对播客进行设置,或者长按重新排序。",
"@featureDiscoveryGroupPodcastDes": {},
"featureDiscoveryOMPL": "点击导入 OMPL",
"@featureDiscoveryOMPL": {},
"featureDiscoveryOMPLDes": "在这里您可以导入OMPL文件打开设置页面或者刷新所有播客。",
@ -86,24 +110,30 @@
"@feedbackPlay": {},
"feedbackTelegram": "加入小组",
"@feedbackTelegram": {},
"from": "自",
"@from": {},
"fonts": "字体",
"@fonts": {},
"from": "自{time}",
"@from": {
"placeholders": {
"time": {}
}
},
"goodNight": "晚安",
"@goodNight": {},
"groupExisted": "组名已使用",
"@groupExisted": {},
"groupFilter": "分组",
"@groupFilter": {},
"groups": "分组",
"groupRemoveConfirm": "您确认要移除该分组吗?播客将被移动到 Home 分组。",
"@groupRemoveConfirm": {},
"groups": "{count, plural, zero{分组} other{分组}}",
"@groups": {},
"homeGroupsSeeAll": "查看全部",
"@homeGroupsSeeAll": {},
"homeMenuPlaylist": "播放列表",
"@homeMenuPlaylist": {},
"homeSubMenuLikeData": "添加日期",
"@homeSubMenuLikeData": {},
"homeSubMenuSortBy": "排序",
"@homeSubMenuSortBy": {},
"homeSubMenuUpdateDate": "更新日期",
"@homeSubMenuUpdateDate": {},
"homeTabMenuFavotite": "收藏",
"@homeTabMenuFavotite": {},
"homeTabMenuRecent": "最近更新",
@ -122,8 +152,16 @@
"host": {}
}
},
"hoursAgo": "{count, plural, zero{} other{{count}小时前}}",
"@hoursAgo": {},
"hoursCount": "{count, plural, zero{} other{{count} 小时}}",
"@hoursCount": {},
"introFourthPage": "长按节目打开快捷菜单。",
"@introFourthPage": {},
"introSecondPage": "您可以通过搜索订阅播客也可以直接导入OMPL文件。",
"@introSecondPage": {},
"introThirdPage": "您可以创建分组,上下滑动切换分组。",
"@introThirdPage": {},
"later": "稍后",
"@later": {},
"lightMode": "明亮模式",
@ -140,6 +178,10 @@
"@listened": {},
"loadMore": "加载更多",
"@loadMore": {},
"mark": "标记",
"@mark": {
"description": "The short the best"
},
"markConfirm": "确认标记",
"@markConfirm": {},
"markConfirmContent": "是否确认标记全部节目为已收听?",
@ -156,6 +198,8 @@
"@menuViewRSS": {},
"menuVisitSite": "访问网站",
"@menuVisitSite": {},
"minsAgo": "{count, plural, zero{} other{{count}分钟前}}",
"@minsAgo": {},
"minsCount": "{count, plural, zero{} other{{count}分钟}}",
"@minsCount": {},
"network": "网络",
@ -164,6 +208,8 @@
"@newestFirst": {},
"newGroup": "创建分组",
"@newGroup": {},
"next": "下一步",
"@next": {},
"noEpisodeDownload": "暂无下载节目",
"@noEpisodeDownload": {},
"noEpisodeFavorite": "暂无收藏节目",
@ -216,6 +262,10 @@
"@play": {},
"playing": "正在播放",
"@playing": {},
"plugins": "插件",
"@plugins": {},
"podcast": "播客",
"@podcast": {},
"podcastSubscribed": "播客已订阅",
"@podcastSubscribed": {},
"popupMenuDownloadDes": "下载节目",
@ -230,14 +280,31 @@
"@popupMenuPlayDes": {},
"privacyPolicy": "隐私条款",
"@privacyPolicy": {},
"recoverSubscribe": "恢复订阅",
"@recoverSubscribe": {},
"remove": "移除",
"@remove": {},
"removeConfirm": "取消订阅",
"@removeConfirm": {
"description": "unsubscribe podcast dialog"
},
"removedAt": "{date}移除",
"@removedAt": {
"description": "For example Removed at 2020.10.10",
"placeholders": {
"date": {}
}
},
"removePodcastDes": "您确认要取消订阅吗?",
"@removePodcastDes": {},
"schedule": "定时",
"@schedule": {},
"searchInvalidRss": "RSS 链接错误",
"@searchInvalidRss": {},
"searchPodcast": "搜索播客",
"@searchPodcast": {},
"secondsAgo": "{count, plural, zero{} other{{count}秒前}}",
"@secondsAgo": {},
"settingsAccentColor": "次要颜色",
"@settingsAccentColor": {},
"settingsAccentColorDes": "包括溢出颜色",
@ -296,7 +363,7 @@
"@settingsLayoutDes": {},
"settingsLibraries": "开源",
"@settingsLibraries": {},
"settingsLibrariesDes": "使用开源项目",
"settingsLibrariesDes": "开源项目使用",
"@settingsLibrariesDes": {},
"settingsManageDownload": "下载管理",
"@settingsManageDownload": {},
@ -320,7 +387,7 @@
"@settingsPopupMenuDes": {},
"settingsPrefrence": "首选项",
"@settingsPrefrence": {},
"settingsRealDark": "真的黑",
"settingsRealDark": "黑",
"@settingsRealDark": {},
"settingsRealDarkDes": "如果夜不够黑,请开启",
"@settingsRealDarkDes": {},
@ -350,6 +417,8 @@
"@settingsUpdateIntervalDes": {},
"size": "大小",
"@size": {},
"skipSecondsAtStart": "开头跳过秒数",
"@skipSecondsAtStart": {},
"sleepTimer": "睡眠模式",
"@sleepTimer": {},
"subscribe": "订阅",
@ -368,22 +437,46 @@
"time": {}
}
},
"to": "到",
"@to": {},
"to": "到{time}",
"@to": {
"placeholders": {
"time": {}
}
},
"toastAddPlaylist": "添加到播放列表",
"@toastAddPlaylist": {},
"toastDescovery": "重启应用后可查看",
"@toastDescovery": {},
"toastDiscovery": "重启应用后可查看",
"@toastDiscovery": {},
"toastFileError": "文件错误,导入失败",
"@toastFileError": {},
"toastFileNotVilid": "文件错误",
"@toastFileNotVilid": {},
"toastFileNotValid": "文件错误",
"@toastFileNotValid": {},
"toastHomeGroupNotSupport": "Home 分组不支持此功能",
"@toastHomeGroupNotSupport": {},
"toastOneGroup": "请至少选择一个分组",
"@toastOneGroup": {},
"toastPodcastRecovering": "恢复中,请稍后",
"@toastPodcastRecovering": {
"description": "Resubscribe removed podcast"
},
"toastReadFile": "读取文件成功",
"@toastReadFile": {},
"toastRecoverFailed": "恢复订阅失败",
"@toastRecoverFailed": {
"description": "Resubscribe removed podast"
},
"toastRemovePlaylist": "从播放列表移除",
"@toastRemovePlaylist": {},
"toastSettingSaved": "设置已保存",
"@toastSettingSaved": {},
"toastTimeEqualEnd": "与结束时间相同",
"@toastTimeEqualEnd": {},
"toastTimeEqualStart": "与起始时间相同",
"@toastTimeEqualStart": {},
"understood": "了解",
"@understood": {},
"undo": "撤销",
"@undo": {},
"unlike": "取消喜欢",
"@unlike": {},
"unliked": "从收藏移除",

View File

@ -173,7 +173,7 @@ class _PodcastCardState extends State<PodcastCard>
Color _c = (Theme.of(context).brightness == Brightness.light)
? widget.podcastLocal.primaryColor.colorizedark()
: widget.podcastLocal.primaryColor.colorizeLight();
final s = context.s;
double _width = MediaQuery.of(context).size.width;
var groupList = context.watch<GroupList>();
_belongGroups = groupList.getPodcastGroup(widget.podcastLocal.id);
@ -326,12 +326,12 @@ class _PodcastCardState extends State<PodcastCard>
_selectedGroups,
);
Fluttertoast.showToast(
msg: 'Setting Saved',
msg: s.toastSettingSaved,
gravity: ToastGravity.BOTTOM,
);
} else
Fluttertoast.showToast(
msg: 'At least select one group',
msg: s.toastOneGroup,
gravity: ToastGravity.BOTTOM,
);
},
@ -353,7 +353,7 @@ class _PodcastCardState extends State<PodcastCard>
_addGroup = true;
});
},
tooltip: 'Group'),
tooltip: s.groups(0)),
FutureBuilder<bool>(
future:
_getAutoDownload(widget.podcastLocal.id),
@ -382,7 +382,7 @@ class _PodcastCardState extends State<PodcastCard>
? context.accentColor
: null),
),
tooltip: 'Auto Download',
tooltip: s.autoDownload,
onTap: () async {
await _setAutoDownload(
widget.podcastLocal.id,
@ -409,7 +409,7 @@ class _PodcastCardState extends State<PodcastCard>
onTap: () {
generalDialog(
context,
title: Text('Skip seconds at start',
title: Text(s.skipSecondsAtStart,
maxLines: 2),
content: DurationPicker(
duration: Duration(
@ -424,7 +424,7 @@ class _PodcastCardState extends State<PodcastCard>
_seconds = 0;
},
child: Text(
'CANCEL',
s.cancel,
style: TextStyle(
color: Colors.grey[600]),
),
@ -437,7 +437,7 @@ class _PodcastCardState extends State<PodcastCard>
_seconds);
},
child: Text(
'CONFIRM',
s.confirm,
style: TextStyle(
color:
context.accentColor),
@ -453,19 +453,18 @@ class _PodcastCardState extends State<PodcastCard>
color: Colors.red,
size: _value == 0 ? 1 : 20 * _value,
),
tooltip: 'Remove',
tooltip: s.remove,
onTap: () {
generalDialog(
context,
title: Text('Remove confirm'),
content: Text(
'Are you sure you want to unsubscribe?'),
title: Text(s.removeConfirm),
content: Text(s.removePodcastDes),
actions: <Widget>[
FlatButton(
onPressed: () =>
Navigator.of(context).pop(),
child: Text(
'CANCEL',
s.cancel,
style: TextStyle(
color: Colors.grey[600]),
),
@ -477,7 +476,7 @@ class _PodcastCardState extends State<PodcastCard>
Navigator.of(context).pop();
},
child: Text(
'CONFIRM',
s.confirm,
style: TextStyle(color: Colors.red),
),
)
@ -523,6 +522,7 @@ class _RenameGroupState extends State<RenameGroup> {
Widget build(BuildContext context) {
var groupList = Provider.of<GroupList>(context, listen: false);
List list = groupList.groups.map((e) => e.name).toList();
final s = context.s;
return AnnotatedRegion<SystemUiOverlayStyle>(
value: SystemUiOverlayStyle(
statusBarIconBrightness: Brightness.light,
@ -542,7 +542,7 @@ class _RenameGroupState extends State<RenameGroup> {
FlatButton(
onPressed: () => Navigator.of(context).pop(),
child: Text(
'CANCEL',
s.cancel,
style: TextStyle(color: Colors.grey[600]),
),
),
@ -559,12 +559,12 @@ class _RenameGroupState extends State<RenameGroup> {
Navigator.of(context).pop();
}
},
child: Text('DONE',
child: Text(s.confirm,
style: TextStyle(color: Theme.of(context).accentColor)),
)
],
title: SizedBox(
width: context.width - 160, child: Text('Edit group name')),
title:
SizedBox(width: context.width - 160, child: Text(s.editGroupName)),
content: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
@ -595,7 +595,7 @@ class _RenameGroupState extends State<RenameGroup> {
alignment: Alignment.centerLeft,
child: (_error == 1)
? Text(
'Group existed',
s.groupExisted,
style: TextStyle(color: Colors.red[400]),
)
: Center(),

View File

@ -88,6 +88,7 @@ class _PodcastManageState extends State<PodcastManage>
}
Widget _saveButton(BuildContext context) {
final s = context.s;
return Consumer<GroupList>(
builder: (_, groupList, __) {
if (groupList.orderChanged.contains(groupList.groups[_index])) {
@ -100,7 +101,7 @@ class _PodcastManageState extends State<PodcastManage>
tapTarget: Icon(Icons.menu),
title: Padding(
padding: const EdgeInsets.only(top: 20.0),
child: const Text('Tap to edit group'),
child: Text(s.featureDiscoveryEditGroup),
),
overflowMode: OverflowMode.clipContent,
backgroundColor: Colors.cyan[600],
@ -108,12 +109,11 @@ class _PodcastManageState extends State<PodcastManage>
description: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
const Text('You can change group name or delete group here,' +
'but home group can not be edited or deleted.'),
Text(s.featureDiscoveryEditGroupDes),
FlatButton(
color: Colors.cyan[500],
padding: const EdgeInsets.all(0),
child: Text('Understood',
child: Text(s.understood,
style: Theme.of(context)
.textTheme
.button
@ -124,7 +124,7 @@ class _PodcastManageState extends State<PodcastManage>
FlatButton(
color: Colors.cyan[500],
padding: const EdgeInsets.all(0),
child: Text('Dismiss',
child: Text(s.dismiss,
style: Theme.of(context)
.textTheme
.button
@ -176,7 +176,7 @@ class _PodcastManageState extends State<PodcastManage>
groupList
.drlFromOrderChanged(groupList.groups[_index].name);
Fluttertoast.showToast(
msg: 'Setting Saved',
msg: context.s.toastSettingSaved,
gravity: ToastGravity.BOTTOM,
);
_controller.reverse();
@ -191,6 +191,7 @@ class _PodcastManageState extends State<PodcastManage>
}
Widget build(BuildContext context) {
final s = context.s;
return AnnotatedRegion<SystemUiOverlayStyle>(
value: SystemUiOverlayStyle(
statusBarIconBrightness: Theme.of(context).accentColorBrightness,
@ -202,25 +203,23 @@ class _PodcastManageState extends State<PodcastManage>
child: Scaffold(
appBar: AppBar(
centerTitle: true,
title: Text('Groups'),
title: Text(context.s.groups(2)),
actions: <Widget>[
DescribedFeatureOverlay(
featureId: addGroupFeature,
tapTarget: Icon(Icons.add),
title: const Text('Tap to add group'),
title: Text(s.featureDiscoveryGroup),
overflowMode: OverflowMode.clipContent,
backgroundColor: Colors.cyan[600],
onDismiss: () => Future.value(true),
description: Column(
crossAxisAlignment: CrossAxisAlignment.end,
children: <Widget>[
const Text(
'Default group is home for new podcast, you can create new group and move ' +
'podcast to new group, podcast can be added to muilti-groups.'),
Text(s.featureDiscoveryGroupDes),
FlatButton(
color: Colors.cyan[500],
padding: const EdgeInsets.all(0),
child: Text('Understood',
child: Text(context.s.understood,
style: Theme.of(context)
.textTheme
.button
@ -231,7 +230,7 @@ class _PodcastManageState extends State<PodcastManage>
FlatButton(
color: Colors.cyan[500],
padding: const EdgeInsets.all(0),
child: Text('Dismiss',
child: Text(context.s.dismiss,
style: Theme.of(context)
.textTheme
.button
@ -293,8 +292,8 @@ class _PodcastManageState extends State<PodcastManage>
pageBuilder: (context, index) =>
DescribedFeatureOverlay(
featureId: configurePodcast,
tapTarget: Text('Podcast'),
title: const Text('Long tap to reorder podcast'),
tapTarget: Text(s.podcast),
title: Text(s.featureDiscoveryGroupPodcast),
overflowMode: OverflowMode.clipContent,
onDismiss: () => Future.value(true),
enablePulsingAnimation: false,
@ -302,12 +301,11 @@ class _PodcastManageState extends State<PodcastManage>
description: Column(
crossAxisAlignment: CrossAxisAlignment.end,
children: <Widget>[
const Text('You can tap to see more options,' +
' or long tap to reorder podcast in group.'),
Text(s.featureDiscoveryGroupPodcastDes),
FlatButton(
color: Colors.cyan[500],
padding: const EdgeInsets.all(0),
child: Text('Understood',
child: Text(context.s.understood,
style: Theme.of(context)
.textTheme
.button
@ -319,7 +317,7 @@ class _PodcastManageState extends State<PodcastManage>
FlatButton(
color: Colors.cyan[500],
padding: const EdgeInsets.all(0),
child: Text('Dismiss',
child: Text(context.s.dismiss,
style: Theme.of(context)
.textTheme
.button
@ -377,8 +375,8 @@ class _PodcastManageState extends State<PodcastManage>
setState(() => _showSetting = false);
_index == 0
? Fluttertoast.showToast(
msg:
'Home group is not supported',
msg: s
.toastHomeGroupNotSupport,
gravity: ToastGravity.BOTTOM,
)
: showGeneralDialog(
@ -420,7 +418,7 @@ class _PodcastManageState extends State<PodcastManage>
padding: EdgeInsets.symmetric(
horizontal: 5.0),
),
Text('Edit Name',
Text(context.s.editGroupName,
style: TextStyle(
color: Colors.white)),
],
@ -439,23 +437,22 @@ class _PodcastManageState extends State<PodcastManage>
setState(() => _showSetting = false);
_index == 0
? Fluttertoast.showToast(
msg:
'Home group is not supported',
msg: s
.toastHomeGroupNotSupport,
gravity: ToastGravity.BOTTOM,
)
: generalDialog(
context,
title: Text('Delete confirm'),
title: Text(s.removeConfirm),
content: Text(
'Are you sure you want to delete this group?' +
'Podcasts will be moved to Home group.'),
s.groupRemoveConfirm),
actions: <Widget>[
FlatButton(
onPressed: () =>
Navigator.of(context)
.pop(),
child: Text(
'CANCEL',
context.s.cancel,
style: TextStyle(
color: Colors
.grey[600]),
@ -482,7 +479,7 @@ class _PodcastManageState extends State<PodcastManage>
.pop();
},
child: Text(
'CONFIRM',
context.s.confirm,
style: TextStyle(
color: Colors.red),
),
@ -509,7 +506,7 @@ class _PodcastManageState extends State<PodcastManage>
padding: EdgeInsets.symmetric(
horizontal: 5.0),
),
Text('Delete',
Text(s.remove,
style: TextStyle(
color: Colors.red)),
],
@ -534,11 +531,12 @@ class _PodcastManageState extends State<PodcastManage>
class OrderMenu extends StatelessWidget {
@override
Widget build(BuildContext context) {
final s = context.s;
return PopupMenuButton(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(10))),
elevation: 2,
tooltip: 'Menu',
tooltip: s.menu,
itemBuilder: (context) => [
PopupMenuItem(
value: 1,
@ -548,7 +546,7 @@ class OrderMenu extends StatelessWidget {
Padding(
padding: EdgeInsets.symmetric(horizontal: 5.0),
),
Text('All Podcasts'),
Text(s.menuAllPodcasts),
],
),
),
@ -587,6 +585,7 @@ class _AddGroupState extends State<AddGroup> {
@override
Widget build(BuildContext context) {
final s = context.s;
var groupList = Provider.of<GroupList>(context);
List list = groupList.groups.map((e) => e.name).toList();
return AnnotatedRegion<SystemUiOverlayStyle>(
@ -608,7 +607,7 @@ class _AddGroupState extends State<AddGroup> {
FlatButton(
onPressed: () => Navigator.of(context).pop(),
child: Text(
'CANCEL',
s.cancel,
style: TextStyle(color: Colors.grey[600]),
),
),
@ -621,19 +620,18 @@ class _AddGroupState extends State<AddGroup> {
Navigator.of(context).pop();
}
},
child: Text('DONE',
child: Text(s.confirm,
style: TextStyle(color: Theme.of(context).accentColor)),
)
],
title: SizedBox(
width: context.width - 160, child: Text('Create new group')),
title: SizedBox(width: context.width - 160, child: Text(s.newGroup)),
content: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
TextField(
decoration: InputDecoration(
contentPadding: EdgeInsets.symmetric(horizontal: 10),
hintText: 'New Group',
hintText: s.newGroup,
hintStyle: TextStyle(fontSize: 18),
filled: true,
focusedBorder: UnderlineInputBorder(
@ -657,7 +655,7 @@ class _AddGroupState extends State<AddGroup> {
alignment: Alignment.centerLeft,
child: (_error == 1)
? Text(
'Group existed',
s.groupExisted,
style: TextStyle(color: Colors.red[400]),
)
: Center(),

View File

@ -183,7 +183,7 @@ class _DownloadsManageState extends State<DownloadsManage> {
borderRadius: BorderRadius.all(
Radius.circular(10))),
elevation: 1,
tooltip: 'Sort By',
tooltip: s.homeSubMenuSortBy,
child: Container(
height: 40,
padding:
@ -211,15 +211,15 @@ class _DownloadsManageState extends State<DownloadsManage> {
itemBuilder: (context) => [
PopupMenuItem(
value: 0,
child: Text('Newest first'),
child: Text(s.newestFirst),
),
PopupMenuItem(
value: 1,
child: Text('Oldest first'),
child: Text(s.oldestFirst),
),
PopupMenuItem(
value: 2,
child: Text('Size'),
child: Text(s.size),
),
],
onSelected: (value) {
@ -246,7 +246,7 @@ class _DownloadsManageState extends State<DownloadsManage> {
padding:
EdgeInsets.symmetric(horizontal: 5),
),
Text('Listened Only'),
Text(s.listened),
Transform.scale(
scale: 0.8,
child: Checkbox(

View File

@ -67,7 +67,7 @@ class _PlayedHistoryState extends State<PlayedHistory>
Future recoverSub(BuildContext context, String url) async {
Fluttertoast.showToast(
msg: 'Recovering, wait for seconds',
msg: context.s.toastPodcastRecovering,
gravity: ToastGravity.BOTTOM,
);
var subscribeWorker = context.read<SubscribeWorker>();
@ -90,7 +90,7 @@ class _PlayedHistoryState extends State<PlayedHistory>
} on DioError catch (e) {
print(e);
Fluttertoast.showToast(
msg: 'Podcast recover failed',
msg: context.s.toastRecoverFailed,
gravity: ToastGravity.BOTTOM,
);
}
@ -273,7 +273,7 @@ class _PlayedHistoryState extends State<PlayedHistory>
snapshot.data[index]
.seekValue ==
1
? 'Mark'
? s.mark
: _stringForSeconds(
snapshot.data[index]
.seconds),
@ -330,18 +330,15 @@ class _PlayedHistoryState extends State<PlayedHistory>
],
),
subtitle: _status
? Text(DateTime.now()
.difference(snapshot
.data[index].subDate)
.inDays
.toString() +
' day ago')
? Text(s.daysAgo(DateTime.now()
.difference(
snapshot.data[index].subDate)
.inDays))
: Text(
'Removed at ' +
DateFormat.yMd()
.add_jm()
.format(snapshot
.data[index].delDate),
s.removedAt(DateFormat.yMd()
.add_jm()
.format(snapshot
.data[index].delDate)),
style: TextStyle(color: Colors.red),
),
// Text(snapshot.data[index].delDate
@ -355,7 +352,7 @@ class _PlayedHistoryState extends State<PlayedHistory>
? Material(
color: Colors.transparent,
child: IconButton(
tooltip: 'Recover subscribe',
tooltip: s.recoverSubscribe,
icon: Icon(LineIcons
.trash_restore_alt_solid),
onPressed: () => recoverSub(

View File

@ -1,6 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:url_launcher/url_launcher.dart';
import '../util/context_extension.dart';
import 'licenses.dart';
class Libries extends StatelessWidget {
@ -23,7 +24,7 @@ class Libries extends StatelessWidget {
),
child: Scaffold(
appBar: AppBar(
title: Text('Libraies'),
title: Text(context.s.settingsLibraries),
elevation: 0,
backgroundColor: Theme.of(context).primaryColor,
),
@ -63,7 +64,7 @@ class Libries extends StatelessWidget {
height: 30.0,
padding: EdgeInsets.symmetric(horizontal: 70),
alignment: Alignment.centerLeft,
child: Text('Fonts',
child: Text(context.s.fonts,
style: Theme.of(context)
.textTheme
.bodyText1
@ -85,7 +86,7 @@ class Libries extends StatelessWidget {
height: 30.0,
padding: EdgeInsets.symmetric(horizontal: 70),
alignment: Alignment.centerLeft,
child: Text('Plugins',
child: Text(context.s.plugins,
style: Theme.of(context)
.textTheme
.bodyText1

View File

@ -40,7 +40,7 @@ class PlaySetting extends StatelessWidget {
? context.accentColor
: context.primaryColorDark,
padding: const EdgeInsets.all(8.0),
child: Text('End of Episode',
child: Text(context.s.endOfEpisode,
style: TextStyle(
color: data.item1 == 0 ? Colors.white : null)),
),
@ -56,7 +56,7 @@ class PlaySetting extends StatelessWidget {
? context.accentColor
: context.primaryColorDark,
padding: const EdgeInsets.all(8.0),
child: Text(data.item2.toString() + 'mins',
child: Text(context.s.minsCount(data.item2),
style: TextStyle(
color: data.item1 == 1 ? Colors.white : null)),
),
@ -70,6 +70,7 @@ class PlaySetting extends StatelessWidget {
Widget _scheduleWidget(BuildContext context) {
var settings = Provider.of<SettingState>(context, listen: false);
final s = context.s;
return Selector<SettingState, Tuple2<int, int>>(
selector: (_, settings) =>
Tuple2(settings.autoSleepTimerStart, settings.autoSleepTimerEnd),
@ -105,7 +106,7 @@ class PlaySetting extends StatelessWidget {
FlatButton(
onPressed: () => Navigator.of(context).pop(),
child: Text(
'CANCEL',
s.cancel,
style: TextStyle(color: Colors.grey[600]),
),
),
@ -116,13 +117,13 @@ class PlaySetting extends StatelessWidget {
Navigator.of(context).pop();
} else {
Fluttertoast.showToast(
msg: 'Time is equal to end time',
msg: s.toastTimeEqualEnd,
gravity: ToastGravity.BOTTOM,
);
}
},
child: Text(
'CONFIRM',
s.confirm,
style: TextStyle(color: context.accentColor),
),
)
@ -134,7 +135,7 @@ class PlaySetting extends StatelessWidget {
child: Container(
color: context.primaryColorDark,
padding: const EdgeInsets.all(8.0),
child: Text('From ' + stringForMins(data.item1)),
child: Text(s.from(stringForMins(data.item1))),
),
),
),
@ -164,7 +165,7 @@ class PlaySetting extends StatelessWidget {
FlatButton(
onPressed: () => Navigator.of(context).pop(),
child: Text(
'CANCEL',
s.cancel,
style: TextStyle(color: Colors.grey[600]),
),
),
@ -175,13 +176,13 @@ class PlaySetting extends StatelessWidget {
Navigator.of(context).pop();
} else {
Fluttertoast.showToast(
msg: 'Time is equal to start time',
msg: s.toastTimeEqualStart,
gravity: ToastGravity.BOTTOM,
);
}
},
child: Text(
'CONFIRM',
s.confirm,
style: TextStyle(color: context.accentColor),
),
)
@ -193,7 +194,7 @@ class PlaySetting extends StatelessWidget {
child: Container(
padding: const EdgeInsets.all(8.0),
color: Colors.black54,
child: Text('To ' + stringForMins(data.item2),
child: Text(s.to(stringForMins(data.item2)),
style: TextStyle(color: Colors.white)),
),
),
@ -255,7 +256,7 @@ class PlaySetting extends StatelessWidget {
onTap: () => settings.setAutoPlay = !data,
contentPadding:
EdgeInsets.only(left: 80.0, right: 20),
title: Text('Auto play next'),
title: Text(s.settingsMenuAutoPlay),
subtitle: Text(s.settingsAutoPlayDes),
trailing: Transform.scale(
scale: 0.9,
@ -291,7 +292,7 @@ class PlaySetting extends StatelessWidget {
trailing: Selector<SettingState, int>(
selector: (_, settings) => settings.defaultSleepTimer,
builder: (_, data, __) => DropdownButton(
hint: Text(data.toString() + 'mins'),
hint: Text(s.minsCount(data)),
underline: Center(),
elevation: 1,
isDense: true,
@ -301,8 +302,7 @@ class PlaySetting extends StatelessWidget {
items:
minsToSelect.map<DropdownMenuItem<int>>((e) {
return DropdownMenuItem<int>(
value: e,
child: Text(e.toString() + ' mins'));
value: e, child: Text(s.minsCount(e)));
}).toList()),
),
),

View File

@ -76,6 +76,7 @@ class _PopupMenuSettingState extends State<PopupMenuSetting> {
@override
Widget build(BuildContext context) {
final s = context.s;
return AnnotatedRegion<SystemUiOverlayStyle>(
value: SystemUiOverlayStyle(
statusBarIconBrightness: Theme.of(context).accentColorBrightness,
@ -109,7 +110,7 @@ class _PopupMenuSettingState extends State<PopupMenuSetting> {
height: 30.0,
padding: EdgeInsets.symmetric(horizontal: 80),
alignment: Alignment.centerLeft,
child: Text('Episode popup menu',
child: Text(s.settingsPopupMenu,
style: Theme.of(context)
.textTheme
.bodyText1
@ -132,8 +133,8 @@ class _PopupMenuSettingState extends State<PopupMenuSetting> {
LineIcons.play_circle_solid,
color: context.accentColor,
),
text: 'Play',
description: 'Play the episode');
text: s.play,
description: s.popupMenuPlayDes);
break;
case 1:
return _popupMenuItem(menu, e,
@ -141,15 +142,15 @@ class _PopupMenuSettingState extends State<PopupMenuSetting> {
LineIcons.clock_solid,
color: Colors.cyan,
),
text: 'Later',
description: 'Add episode to playlist');
text: s.later,
description: s.popupMenuLaterDes);
break;
case 2:
return _popupMenuItem(menu, e,
icon: Icon(LineIcons.heart,
color: Colors.red, size: 21),
text: 'Like',
description: 'Add episode to favorite');
text: s.like,
description: s.popupMenuLikeDes);
break;
case 3:
return _popupMenuItem(menu, e,
@ -160,8 +161,8 @@ class _PopupMenuSettingState extends State<PopupMenuSetting> {
painter: ListenedAllPainter(Colors.blue,
stroke: 1.5)),
),
text: 'Mark Listened',
description: 'Mark episode as listened');
text: s.markListened,
description: s.popupMenuMarkDes);
break;
case 4:
return _popupMenuItem(menu, e,
@ -169,8 +170,8 @@ class _PopupMenuSettingState extends State<PopupMenuSetting> {
LineIcons.download_solid,
color: Colors.green,
),
text: 'Download',
description: 'Download episode');
text: s.download,
description: s.popupMenuDownloadDes);
break;
default:
return Text('Text');

View File

@ -332,8 +332,7 @@ class _SettingsState extends State<Settings>
podcastFeature
});
Fluttertoast.showToast(
msg:
'Discovery Feature Reopened, pleast restart the app',
msg: s.toastDiscovery,
gravity: ToastGravity.BOTTOM,
);
},

View File

@ -213,22 +213,21 @@ class _StorageSettingState extends State<StorageSetting>
subtitle: Text(s.settingsAutoDeleteDes),
trailing: DropdownButton(
hint: snapshot.data == -1
? Text('Never')
: Text(snapshot.data.toString() + 'days'),
? Text(s.daysCount(0))
: Text(s.daysCount(snapshot.data)),
underline: Center(),
elevation: 1,
value: snapshot.data,
onChanged: (value) async {
await _setAutoDeleteDays(value);
},
//TODO remove 1 before release
items: <int>[-1, 5, 10, 15, 30]
.map<DropdownMenuItem<int>>((e) {
return DropdownMenuItem<int>(
value: e,
child: e == -1
? Text('Never')
: Text(e.toString() + ' days'));
? Text(s.daysCount(0))
: Text(s.daysCount(e)));
}).toList()),
);
},

View File

@ -92,9 +92,7 @@ class SyncingSetting extends StatelessWidget {
title: Text(s.settingsUpdateInterval),
subtitle: Text(s.settingsUpdateIntervalDes),
trailing: DropdownButton(
hint: data.item2 == 1
? Text(data.item2.toString() + ' hour')
: Text(data.item2.toString() + ' hours'),
hint: Text(s.hoursCount(data.item2)),
underline: Center(),
elevation: 1,
value: data.item2,
@ -107,10 +105,7 @@ class SyncingSetting extends StatelessWidget {
items: <int>[1, 2, 4, 8, 24, 48]
.map<DropdownMenuItem<int>>((e) {
return DropdownMenuItem<int>(
value: e,
child: e == 1
? Text(e.toString() + ' hour')
: Text(e.toString() + ' hours'));
value: e, child: Text(s.hoursCount(e)));
}).toList()),
),
Divider(height: 2),

View File

@ -53,10 +53,10 @@ class EpisodeGrid extends StatelessWidget {
Future<Tuple4<int, bool, bool, List<int>>> _initData(
EpisodeBrief episode) async {
List<int> menuList = await _getEpisodeMenu();
int listened = await _isListened(episode);
bool liked = await _isLiked(episode);
bool downloaded = await _isDownloaded(episode);
List<int> menuList = await _getEpisodeMenu();
return Tuple4(listened, liked, downloaded, menuList);
}