1
0
mirror of https://github.com/stonega/tsacdop synced 2025-02-13 10:00:49 +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 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); final messages = _notInlinedMessages(_notInlinedMessages);
static _notInlinedMessages(_) => <String, Function> { static _notInlinedMessages(_) => <String, Function> {
@ -59,6 +77,7 @@ class MessageLookup extends MessageLookupByLibrary {
"addNewEpisodeTooltip" : MessageLookupByLibrary.simpleMessage("Add new episodes to playlist"), "addNewEpisodeTooltip" : MessageLookupByLibrary.simpleMessage("Add new episodes to playlist"),
"addSomeGroups" : MessageLookupByLibrary.simpleMessage("Add some groups"), "addSomeGroups" : MessageLookupByLibrary.simpleMessage("Add some groups"),
"all" : MessageLookupByLibrary.simpleMessage("All"), "all" : MessageLookupByLibrary.simpleMessage("All"),
"autoDownload" : MessageLookupByLibrary.simpleMessage("Auto download"),
"back" : MessageLookupByLibrary.simpleMessage("Back"), "back" : MessageLookupByLibrary.simpleMessage("Back"),
"buffering" : MessageLookupByLibrary.simpleMessage("Buffering"), "buffering" : MessageLookupByLibrary.simpleMessage("Buffering"),
"cancel" : MessageLookupByLibrary.simpleMessage("CANCEL"), "cancel" : MessageLookupByLibrary.simpleMessage("CANCEL"),
@ -69,16 +88,26 @@ class MessageLookup extends MessageLookupByLibrary {
"color" : MessageLookupByLibrary.simpleMessage("color"), "color" : MessageLookupByLibrary.simpleMessage("color"),
"confirm" : MessageLookupByLibrary.simpleMessage("CONFIRM"), "confirm" : MessageLookupByLibrary.simpleMessage("CONFIRM"),
"darkMode" : MessageLookupByLibrary.simpleMessage("Dark mode"), "darkMode" : MessageLookupByLibrary.simpleMessage("Dark mode"),
"daysAgo" : m2,
"daysCount" : m3,
"delete" : MessageLookupByLibrary.simpleMessage("Delete"), "delete" : MessageLookupByLibrary.simpleMessage("Delete"),
"developer" : MessageLookupByLibrary.simpleMessage("Developer"), "developer" : MessageLookupByLibrary.simpleMessage("Developer"),
"dismiss" : MessageLookupByLibrary.simpleMessage("Dismiss"), "dismiss" : MessageLookupByLibrary.simpleMessage("Dismiss"),
"done" : MessageLookupByLibrary.simpleMessage("Done"),
"download" : MessageLookupByLibrary.simpleMessage("Download"), "download" : MessageLookupByLibrary.simpleMessage("Download"),
"downloaded" : MessageLookupByLibrary.simpleMessage("Downloaded"), "downloaded" : MessageLookupByLibrary.simpleMessage("Downloaded"),
"editName" : MessageLookupByLibrary.simpleMessage("Edit name"), "editGroupName" : MessageLookupByLibrary.simpleMessage("Edit group name"),
"endOfEpisode" : MessageLookupByLibrary.simpleMessage("End of Episode"), "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"), "featureDiscoveryEpisode" : MessageLookupByLibrary.simpleMessage("Episode view"),
"featureDiscoveryEpisodeDes" : MessageLookupByLibrary.simpleMessage("You can long tap to play episode or add episode to playlist."), "featureDiscoveryEpisodeDes" : MessageLookupByLibrary.simpleMessage("You can long tap to play episode or add episode to playlist."),
"featureDiscoveryEpisodeTitle" : MessageLookupByLibrary.simpleMessage("Long tap to play episode instantly"), "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"), "featureDiscoveryOMPL" : MessageLookupByLibrary.simpleMessage("Tap to import OMPL"),
"featureDiscoveryOMPLDes" : MessageLookupByLibrary.simpleMessage("You can import OMPL file, open setting or refresh all podcast at once here."), "featureDiscoveryOMPLDes" : MessageLookupByLibrary.simpleMessage("You can import OMPL file, open setting or refresh all podcast at once here."),
"featureDiscoveryPlaylist" : MessageLookupByLibrary.simpleMessage("Tap to open playlist"), "featureDiscoveryPlaylist" : MessageLookupByLibrary.simpleMessage("Tap to open playlist"),
@ -92,23 +121,28 @@ class MessageLookup extends MessageLookupByLibrary {
"feedbackGithub" : MessageLookupByLibrary.simpleMessage("Submit issue"), "feedbackGithub" : MessageLookupByLibrary.simpleMessage("Submit issue"),
"feedbackPlay" : MessageLookupByLibrary.simpleMessage("Rate on Play"), "feedbackPlay" : MessageLookupByLibrary.simpleMessage("Rate on Play"),
"feedbackTelegram" : MessageLookupByLibrary.simpleMessage("Join group"), "feedbackTelegram" : MessageLookupByLibrary.simpleMessage("Join group"),
"from" : MessageLookupByLibrary.simpleMessage("From"), "fonts" : MessageLookupByLibrary.simpleMessage("Fonts"),
"from" : m4,
"goodNight" : MessageLookupByLibrary.simpleMessage("Good Night"), "goodNight" : MessageLookupByLibrary.simpleMessage("Good Night"),
"groupExisted" : MessageLookupByLibrary.simpleMessage("Group existed"),
"groupFilter" : MessageLookupByLibrary.simpleMessage("Group filter"), "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"), "homeGroupsSeeAll" : MessageLookupByLibrary.simpleMessage("See All"),
"homeMenuPlaylist" : MessageLookupByLibrary.simpleMessage("Playlist"), "homeMenuPlaylist" : MessageLookupByLibrary.simpleMessage("Playlist"),
"homeSubMenuLikeData" : MessageLookupByLibrary.simpleMessage("Like Date"),
"homeSubMenuSortBy" : MessageLookupByLibrary.simpleMessage("Sort by"), "homeSubMenuSortBy" : MessageLookupByLibrary.simpleMessage("Sort by"),
"homeSubMenuUpdateDate" : MessageLookupByLibrary.simpleMessage("Update Date"),
"homeTabMenuFavotite" : MessageLookupByLibrary.simpleMessage("Favorite"), "homeTabMenuFavotite" : MessageLookupByLibrary.simpleMessage("Favorite"),
"homeTabMenuRecent" : MessageLookupByLibrary.simpleMessage("Recent"), "homeTabMenuRecent" : MessageLookupByLibrary.simpleMessage("Recent"),
"homeToprightMenuAbout" : MessageLookupByLibrary.simpleMessage("About"), "homeToprightMenuAbout" : MessageLookupByLibrary.simpleMessage("About"),
"homeToprightMenuImportOMPL" : MessageLookupByLibrary.simpleMessage("Import OMPL"), "homeToprightMenuImportOMPL" : MessageLookupByLibrary.simpleMessage("Import OMPL"),
"homeToprightMenuRefreshAll" : MessageLookupByLibrary.simpleMessage("Refresh all"), "homeToprightMenuRefreshAll" : MessageLookupByLibrary.simpleMessage("Refresh all"),
"homeToprightMenuSettings" : MessageLookupByLibrary.simpleMessage("Settings"), "homeToprightMenuSettings" : MessageLookupByLibrary.simpleMessage("Settings"),
"hostedOn" : m2, "hostedOn" : m6,
"hoursCount" : m3, "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"), "later" : MessageLookupByLibrary.simpleMessage("Later"),
"lightMode" : MessageLookupByLibrary.simpleMessage("Light mode"), "lightMode" : MessageLookupByLibrary.simpleMessage("Light mode"),
"like" : MessageLookupByLibrary.simpleMessage("Like"), "like" : MessageLookupByLibrary.simpleMessage("Like"),
@ -117,6 +151,7 @@ class MessageLookup extends MessageLookupByLibrary {
"listen" : MessageLookupByLibrary.simpleMessage("Listen"), "listen" : MessageLookupByLibrary.simpleMessage("Listen"),
"listened" : MessageLookupByLibrary.simpleMessage("Listened"), "listened" : MessageLookupByLibrary.simpleMessage("Listened"),
"loadMore" : MessageLookupByLibrary.simpleMessage("Load more"), "loadMore" : MessageLookupByLibrary.simpleMessage("Load more"),
"mark" : MessageLookupByLibrary.simpleMessage("Mark"),
"markConfirm" : MessageLookupByLibrary.simpleMessage("Mark confirm"), "markConfirm" : MessageLookupByLibrary.simpleMessage("Mark confirm"),
"markConfirmContent" : MessageLookupByLibrary.simpleMessage("Confirm mark all episodes listened?"), "markConfirmContent" : MessageLookupByLibrary.simpleMessage("Confirm mark all episodes listened?"),
"markListened" : MessageLookupByLibrary.simpleMessage("Mark listened"), "markListened" : MessageLookupByLibrary.simpleMessage("Mark listened"),
@ -125,24 +160,28 @@ class MessageLookup extends MessageLookupByLibrary {
"menuMarkAllListened" : MessageLookupByLibrary.simpleMessage("Mark All Listened"), "menuMarkAllListened" : MessageLookupByLibrary.simpleMessage("Mark All Listened"),
"menuViewRSS" : MessageLookupByLibrary.simpleMessage("Visit RSS Feed"), "menuViewRSS" : MessageLookupByLibrary.simpleMessage("Visit RSS Feed"),
"menuVisitSite" : MessageLookupByLibrary.simpleMessage("Visit Site"), "menuVisitSite" : MessageLookupByLibrary.simpleMessage("Visit Site"),
"minsCount" : m4, "minsAgo" : m9,
"minsCount" : m10,
"network" : MessageLookupByLibrary.simpleMessage("Network"), "network" : MessageLookupByLibrary.simpleMessage("Network"),
"newGroup" : MessageLookupByLibrary.simpleMessage("Create new group"), "newGroup" : MessageLookupByLibrary.simpleMessage("Create new group"),
"newestFirst" : MessageLookupByLibrary.simpleMessage("Newest first"), "newestFirst" : MessageLookupByLibrary.simpleMessage("Newest first"),
"next" : MessageLookupByLibrary.simpleMessage("Next"),
"noEpisodeDownload" : MessageLookupByLibrary.simpleMessage("No episode downloaded yet"), "noEpisodeDownload" : MessageLookupByLibrary.simpleMessage("No episode downloaded yet"),
"noEpisodeFavorite" : MessageLookupByLibrary.simpleMessage("No episode collected yet"), "noEpisodeFavorite" : MessageLookupByLibrary.simpleMessage("No episode collected yet"),
"noEpisodeRecent" : MessageLookupByLibrary.simpleMessage("No episode received yet"), "noEpisodeRecent" : MessageLookupByLibrary.simpleMessage("No episode received yet"),
"noPodcastGroup" : MessageLookupByLibrary.simpleMessage("No podcast in this group"), "noPodcastGroup" : MessageLookupByLibrary.simpleMessage("No podcast in this group"),
"notificaitonFatch" : m5, "notificaitonFatch" : m11,
"notificationNetworkError" : m6, "notificationNetworkError" : m12,
"notificationSubscribe" : m7, "notificationSubscribe" : m13,
"notificationSubscribeExisted" : m8, "notificationSubscribeExisted" : m14,
"notificationSuccess" : m9, "notificationSuccess" : m15,
"notificationUpdate" : m10, "notificationUpdate" : m16,
"notificationUpdateError" : m11, "notificationUpdateError" : m17,
"oldestFirst" : MessageLookupByLibrary.simpleMessage("Oldest first"), "oldestFirst" : MessageLookupByLibrary.simpleMessage("Oldest first"),
"play" : MessageLookupByLibrary.simpleMessage("Play"), "play" : MessageLookupByLibrary.simpleMessage("Play"),
"playing" : MessageLookupByLibrary.simpleMessage("Playing"), "playing" : MessageLookupByLibrary.simpleMessage("Playing"),
"plugins" : MessageLookupByLibrary.simpleMessage("Plugins"),
"podcast" : MessageLookupByLibrary.simpleMessage("Podcast"),
"podcastSubscribed" : MessageLookupByLibrary.simpleMessage("Podcast subscribed"), "podcastSubscribed" : MessageLookupByLibrary.simpleMessage("Podcast subscribed"),
"popupMenuDownloadDes" : MessageLookupByLibrary.simpleMessage("Download episode"), "popupMenuDownloadDes" : MessageLookupByLibrary.simpleMessage("Download episode"),
"popupMenuLaterDes" : MessageLookupByLibrary.simpleMessage("Add episode to playlist"), "popupMenuLaterDes" : MessageLookupByLibrary.simpleMessage("Add episode to playlist"),
@ -150,10 +189,15 @@ class MessageLookup extends MessageLookupByLibrary {
"popupMenuMarkDes" : MessageLookupByLibrary.simpleMessage("Mark episode as listened"), "popupMenuMarkDes" : MessageLookupByLibrary.simpleMessage("Mark episode as listened"),
"popupMenuPlayDes" : MessageLookupByLibrary.simpleMessage("Play the episode"), "popupMenuPlayDes" : MessageLookupByLibrary.simpleMessage("Play the episode"),
"privacyPolicy" : MessageLookupByLibrary.simpleMessage("Privacy Policy"), "privacyPolicy" : MessageLookupByLibrary.simpleMessage("Privacy Policy"),
"recoverSubscribe" : MessageLookupByLibrary.simpleMessage("Recover subscribe"),
"remove" : MessageLookupByLibrary.simpleMessage("Remove"), "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"), "schedule" : MessageLookupByLibrary.simpleMessage("Schedule"),
"searchInvalidRss" : MessageLookupByLibrary.simpleMessage("Invalid RSS link"), "searchInvalidRss" : MessageLookupByLibrary.simpleMessage("Invalid RSS link"),
"searchPodcast" : MessageLookupByLibrary.simpleMessage("Search podcast"), "searchPodcast" : MessageLookupByLibrary.simpleMessage("Search podcast"),
"secondsAgo" : m19,
"settingStorage" : MessageLookupByLibrary.simpleMessage("Storage"), "settingStorage" : MessageLookupByLibrary.simpleMessage("Storage"),
"settingsAccentColor" : MessageLookupByLibrary.simpleMessage("Accent color"), "settingsAccentColor" : MessageLookupByLibrary.simpleMessage("Accent color"),
"settingsAccentColorDes" : MessageLookupByLibrary.simpleMessage("Include the ovelay color"), "settingsAccentColorDes" : MessageLookupByLibrary.simpleMessage("Include the ovelay color"),
@ -176,7 +220,7 @@ class MessageLookup extends MessageLookupByLibrary {
"settingsExport" : MessageLookupByLibrary.simpleMessage("Export"), "settingsExport" : MessageLookupByLibrary.simpleMessage("Export"),
"settingsExportDes" : MessageLookupByLibrary.simpleMessage("Export OMPL file of all podcasts"), "settingsExportDes" : MessageLookupByLibrary.simpleMessage("Export OMPL file of all podcasts"),
"settingsFeedback" : MessageLookupByLibrary.simpleMessage("Feedback"), "settingsFeedback" : MessageLookupByLibrary.simpleMessage("Feedback"),
"settingsFeedbackDes" : MessageLookupByLibrary.simpleMessage("Bugs and feature request"), "settingsFeedbackDes" : MessageLookupByLibrary.simpleMessage("Bugs and features request"),
"settingsHistory" : MessageLookupByLibrary.simpleMessage("History"), "settingsHistory" : MessageLookupByLibrary.simpleMessage("History"),
"settingsHistoryDes" : MessageLookupByLibrary.simpleMessage("Listen date"), "settingsHistoryDes" : MessageLookupByLibrary.simpleMessage("Listen date"),
"settingsInfo" : MessageLookupByLibrary.simpleMessage("Info"), "settingsInfo" : MessageLookupByLibrary.simpleMessage("Info"),
@ -210,24 +254,33 @@ class MessageLookup extends MessageLookupByLibrary {
"settingsUpdateInterval" : MessageLookupByLibrary.simpleMessage("Update interval"), "settingsUpdateInterval" : MessageLookupByLibrary.simpleMessage("Update interval"),
"settingsUpdateIntervalDes" : MessageLookupByLibrary.simpleMessage("Default 24 hours"), "settingsUpdateIntervalDes" : MessageLookupByLibrary.simpleMessage("Default 24 hours"),
"size" : MessageLookupByLibrary.simpleMessage("Size"), "size" : MessageLookupByLibrary.simpleMessage("Size"),
"skipSecondsAtStart" : MessageLookupByLibrary.simpleMessage("Skip seconds at start"),
"sleepTimer" : MessageLookupByLibrary.simpleMessage("Sleep timer"), "sleepTimer" : MessageLookupByLibrary.simpleMessage("Sleep timer"),
"subscribe" : MessageLookupByLibrary.simpleMessage("Subscribe"), "subscribe" : MessageLookupByLibrary.simpleMessage("Subscribe"),
"systemDefault" : MessageLookupByLibrary.simpleMessage("System default"), "systemDefault" : MessageLookupByLibrary.simpleMessage("System default"),
"timeLastPlayed" : m12, "timeLastPlayed" : m20,
"timeLeft" : m13, "timeLeft" : m21,
"to" : MessageLookupByLibrary.simpleMessage("To"), "to" : m22,
"toastAddPlaylist" : MessageLookupByLibrary.simpleMessage("Added to playlist"), "toastAddPlaylist" : MessageLookupByLibrary.simpleMessage("Added to playlist"),
"toastDescovery" : MessageLookupByLibrary.simpleMessage("Discovery feature reopened, pleast restart the app"), "toastDiscovery" : MessageLookupByLibrary.simpleMessage("Discovery feature reopened, pleast restart the app"),
"toastFileError" : MessageLookupByLibrary.simpleMessage("File error, Subscribe failed"), "toastFileError" : MessageLookupByLibrary.simpleMessage("File error, subscribe failed"),
"toastFileNotVilid" : MessageLookupByLibrary.simpleMessage("File not vilid"), "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"), "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"), "understood" : MessageLookupByLibrary.simpleMessage("Understood"),
"undo" : MessageLookupByLibrary.simpleMessage("UNDO"),
"unlike" : MessageLookupByLibrary.simpleMessage("Unlike"), "unlike" : MessageLookupByLibrary.simpleMessage("Unlike"),
"unliked" : MessageLookupByLibrary.simpleMessage("Removed from favorite"), "unliked" : MessageLookupByLibrary.simpleMessage("Episode removed from favorite"),
"updateDate" : MessageLookupByLibrary.simpleMessage("Update date"), "updateDate" : MessageLookupByLibrary.simpleMessage("Update date"),
"updateEpisodesCount" : m14, "updateEpisodesCount" : m23,
"updateFailed" : MessageLookupByLibrary.simpleMessage("Update failed, network error"), "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 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); final messages = _notInlinedMessages(_notInlinedMessages);
static _notInlinedMessages(_) => <String, Function> { static _notInlinedMessages(_) => <String, Function> {
@ -59,6 +77,7 @@ class MessageLookup extends MessageLookupByLibrary {
"addNewEpisodeTooltip" : MessageLookupByLibrary.simpleMessage("添加更新节目到播放列表"), "addNewEpisodeTooltip" : MessageLookupByLibrary.simpleMessage("添加更新节目到播放列表"),
"addSomeGroups" : MessageLookupByLibrary.simpleMessage("请添加分组"), "addSomeGroups" : MessageLookupByLibrary.simpleMessage("请添加分组"),
"all" : MessageLookupByLibrary.simpleMessage("全部"), "all" : MessageLookupByLibrary.simpleMessage("全部"),
"autoDownload" : MessageLookupByLibrary.simpleMessage("自动下载"),
"back" : MessageLookupByLibrary.simpleMessage("返回"), "back" : MessageLookupByLibrary.simpleMessage("返回"),
"buffering" : MessageLookupByLibrary.simpleMessage("缓冲"), "buffering" : MessageLookupByLibrary.simpleMessage("缓冲"),
"cancel" : MessageLookupByLibrary.simpleMessage("取消"), "cancel" : MessageLookupByLibrary.simpleMessage("取消"),
@ -69,16 +88,26 @@ class MessageLookup extends MessageLookupByLibrary {
"color" : MessageLookupByLibrary.simpleMessage("颜色"), "color" : MessageLookupByLibrary.simpleMessage("颜色"),
"confirm" : MessageLookupByLibrary.simpleMessage("确认"), "confirm" : MessageLookupByLibrary.simpleMessage("确认"),
"darkMode" : MessageLookupByLibrary.simpleMessage("夜晚模式"), "darkMode" : MessageLookupByLibrary.simpleMessage("夜晚模式"),
"daysAgo" : m2,
"daysCount" : m3,
"delete" : MessageLookupByLibrary.simpleMessage("删除"), "delete" : MessageLookupByLibrary.simpleMessage("删除"),
"developer" : MessageLookupByLibrary.simpleMessage("关于我"), "developer" : MessageLookupByLibrary.simpleMessage("关于我"),
"dismiss" : MessageLookupByLibrary.simpleMessage("忽略"), "dismiss" : MessageLookupByLibrary.simpleMessage("忽略"),
"done" : MessageLookupByLibrary.simpleMessage("完成"),
"download" : MessageLookupByLibrary.simpleMessage("下载"), "download" : MessageLookupByLibrary.simpleMessage("下载"),
"downloaded" : MessageLookupByLibrary.simpleMessage("已下载"), "downloaded" : MessageLookupByLibrary.simpleMessage("已下载"),
"editName" : MessageLookupByLibrary.simpleMessage("修改组名"), "editGroupName" : MessageLookupByLibrary.simpleMessage("修改组名"),
"endOfEpisode" : MessageLookupByLibrary.simpleMessage("节目结束"), "endOfEpisode" : MessageLookupByLibrary.simpleMessage("节目结束"),
"episode" : MessageLookupByLibrary.simpleMessage("节目"),
"featureDiscoveryEditGroup" : MessageLookupByLibrary.simpleMessage("点击修改分组"),
"featureDiscoveryEditGroupDes" : MessageLookupByLibrary.simpleMessage("您可以修改分组名或者删除分组,注意 Home 分组无法修改,也不能被删除。"),
"featureDiscoveryEpisode" : MessageLookupByLibrary.simpleMessage("节目界面"), "featureDiscoveryEpisode" : MessageLookupByLibrary.simpleMessage("节目界面"),
"featureDiscoveryEpisodeDes" : MessageLookupByLibrary.simpleMessage("您可以长按播放节目或者添加节目到播放列表。"), "featureDiscoveryEpisodeDes" : MessageLookupByLibrary.simpleMessage("您可以长按播放节目或者添加节目到播放列表。"),
"featureDiscoveryEpisodeTitle" : MessageLookupByLibrary.simpleMessage("您可以长按快速播放节目"), "featureDiscoveryEpisodeTitle" : MessageLookupByLibrary.simpleMessage("您可以长按快速播放节目"),
"featureDiscoveryGroup" : MessageLookupByLibrary.simpleMessage("点击添加分组"),
"featureDiscoveryGroupDes" : MessageLookupByLibrary.simpleMessage("新订阅播客默认分组为 Home您可以添加新的分组移动播客到新的分组每个播客可以被添加到多个分组。"),
"featureDiscoveryGroupPodcast" : MessageLookupByLibrary.simpleMessage("长按可以移动播客位置"),
"featureDiscoveryGroupPodcastDes" : MessageLookupByLibrary.simpleMessage("您可以点击对播客进行设置,或者长按重新排序。"),
"featureDiscoveryOMPL" : MessageLookupByLibrary.simpleMessage("点击导入 OMPL"), "featureDiscoveryOMPL" : MessageLookupByLibrary.simpleMessage("点击导入 OMPL"),
"featureDiscoveryOMPLDes" : MessageLookupByLibrary.simpleMessage("在这里您可以导入OMPL文件打开设置页面或者刷新所有播客。"), "featureDiscoveryOMPLDes" : MessageLookupByLibrary.simpleMessage("在这里您可以导入OMPL文件打开设置页面或者刷新所有播客。"),
"featureDiscoveryPlaylist" : MessageLookupByLibrary.simpleMessage("点击打开播放列表"), "featureDiscoveryPlaylist" : MessageLookupByLibrary.simpleMessage("点击打开播放列表"),
@ -92,23 +121,28 @@ class MessageLookup extends MessageLookupByLibrary {
"feedbackGithub" : MessageLookupByLibrary.simpleMessage("提交Issue"), "feedbackGithub" : MessageLookupByLibrary.simpleMessage("提交Issue"),
"feedbackPlay" : MessageLookupByLibrary.simpleMessage("Play评价"), "feedbackPlay" : MessageLookupByLibrary.simpleMessage("Play评价"),
"feedbackTelegram" : MessageLookupByLibrary.simpleMessage("加入小组"), "feedbackTelegram" : MessageLookupByLibrary.simpleMessage("加入小组"),
"from" : MessageLookupByLibrary.simpleMessage(""), "fonts" : MessageLookupByLibrary.simpleMessage("字体"),
"from" : m4,
"goodNight" : MessageLookupByLibrary.simpleMessage("晚安"), "goodNight" : MessageLookupByLibrary.simpleMessage("晚安"),
"groupExisted" : MessageLookupByLibrary.simpleMessage("组名已使用"),
"groupFilter" : MessageLookupByLibrary.simpleMessage("分组"), "groupFilter" : MessageLookupByLibrary.simpleMessage("分组"),
"groups" : MessageLookupByLibrary.simpleMessage("分组"), "groupRemoveConfirm" : MessageLookupByLibrary.simpleMessage("您确认要移除该分组吗?播客将被移动到 Home 分组。"),
"groups" : m5,
"homeGroupsSeeAll" : MessageLookupByLibrary.simpleMessage("查看全部"), "homeGroupsSeeAll" : MessageLookupByLibrary.simpleMessage("查看全部"),
"homeMenuPlaylist" : MessageLookupByLibrary.simpleMessage("播放列表"), "homeMenuPlaylist" : MessageLookupByLibrary.simpleMessage("播放列表"),
"homeSubMenuLikeData" : MessageLookupByLibrary.simpleMessage("添加日期"),
"homeSubMenuSortBy" : MessageLookupByLibrary.simpleMessage("排序"), "homeSubMenuSortBy" : MessageLookupByLibrary.simpleMessage("排序"),
"homeSubMenuUpdateDate" : MessageLookupByLibrary.simpleMessage("更新日期"),
"homeTabMenuFavotite" : MessageLookupByLibrary.simpleMessage("收藏"), "homeTabMenuFavotite" : MessageLookupByLibrary.simpleMessage("收藏"),
"homeTabMenuRecent" : MessageLookupByLibrary.simpleMessage("最近更新"), "homeTabMenuRecent" : MessageLookupByLibrary.simpleMessage("最近更新"),
"homeToprightMenuAbout" : MessageLookupByLibrary.simpleMessage("关于"), "homeToprightMenuAbout" : MessageLookupByLibrary.simpleMessage("关于"),
"homeToprightMenuImportOMPL" : MessageLookupByLibrary.simpleMessage("导入OMPL"), "homeToprightMenuImportOMPL" : MessageLookupByLibrary.simpleMessage("导入OMPL"),
"homeToprightMenuRefreshAll" : MessageLookupByLibrary.simpleMessage("全部刷新"), "homeToprightMenuRefreshAll" : MessageLookupByLibrary.simpleMessage("全部刷新"),
"homeToprightMenuSettings" : MessageLookupByLibrary.simpleMessage("设置"), "homeToprightMenuSettings" : MessageLookupByLibrary.simpleMessage("设置"),
"hostedOn" : m2, "hostedOn" : m6,
"hoursCount" : m3, "hoursAgo" : m7,
"hoursCount" : m8,
"introFourthPage" : MessageLookupByLibrary.simpleMessage("长按节目打开快捷菜单。"),
"introSecondPage" : MessageLookupByLibrary.simpleMessage("您可以通过搜索订阅播客也可以直接导入OMPL文件。"),
"introThirdPage" : MessageLookupByLibrary.simpleMessage("您可以创建分组,上下滑动切换分组。"),
"later" : MessageLookupByLibrary.simpleMessage("稍后"), "later" : MessageLookupByLibrary.simpleMessage("稍后"),
"lightMode" : MessageLookupByLibrary.simpleMessage("明亮模式"), "lightMode" : MessageLookupByLibrary.simpleMessage("明亮模式"),
"like" : MessageLookupByLibrary.simpleMessage("喜欢"), "like" : MessageLookupByLibrary.simpleMessage("喜欢"),
@ -117,6 +151,7 @@ class MessageLookup extends MessageLookupByLibrary {
"listen" : MessageLookupByLibrary.simpleMessage("收听"), "listen" : MessageLookupByLibrary.simpleMessage("收听"),
"listened" : MessageLookupByLibrary.simpleMessage("已收听"), "listened" : MessageLookupByLibrary.simpleMessage("已收听"),
"loadMore" : MessageLookupByLibrary.simpleMessage("加载更多"), "loadMore" : MessageLookupByLibrary.simpleMessage("加载更多"),
"mark" : MessageLookupByLibrary.simpleMessage("标记"),
"markConfirm" : MessageLookupByLibrary.simpleMessage("确认标记"), "markConfirm" : MessageLookupByLibrary.simpleMessage("确认标记"),
"markConfirmContent" : MessageLookupByLibrary.simpleMessage("是否确认标记全部节目为已收听?"), "markConfirmContent" : MessageLookupByLibrary.simpleMessage("是否确认标记全部节目为已收听?"),
"markListened" : MessageLookupByLibrary.simpleMessage("标记已收听"), "markListened" : MessageLookupByLibrary.simpleMessage("标记已收听"),
@ -125,24 +160,28 @@ class MessageLookup extends MessageLookupByLibrary {
"menuMarkAllListened" : MessageLookupByLibrary.simpleMessage("标记所有已收听"), "menuMarkAllListened" : MessageLookupByLibrary.simpleMessage("标记所有已收听"),
"menuViewRSS" : MessageLookupByLibrary.simpleMessage("查看 RSS"), "menuViewRSS" : MessageLookupByLibrary.simpleMessage("查看 RSS"),
"menuVisitSite" : MessageLookupByLibrary.simpleMessage("访问网站"), "menuVisitSite" : MessageLookupByLibrary.simpleMessage("访问网站"),
"minsCount" : m4, "minsAgo" : m9,
"minsCount" : m10,
"network" : MessageLookupByLibrary.simpleMessage("网络"), "network" : MessageLookupByLibrary.simpleMessage("网络"),
"newGroup" : MessageLookupByLibrary.simpleMessage("创建分组"), "newGroup" : MessageLookupByLibrary.simpleMessage("创建分组"),
"newestFirst" : MessageLookupByLibrary.simpleMessage("由新到旧"), "newestFirst" : MessageLookupByLibrary.simpleMessage("由新到旧"),
"next" : MessageLookupByLibrary.simpleMessage("下一步"),
"noEpisodeDownload" : MessageLookupByLibrary.simpleMessage("暂无下载节目"), "noEpisodeDownload" : MessageLookupByLibrary.simpleMessage("暂无下载节目"),
"noEpisodeFavorite" : MessageLookupByLibrary.simpleMessage("暂无收藏节目"), "noEpisodeFavorite" : MessageLookupByLibrary.simpleMessage("暂无收藏节目"),
"noEpisodeRecent" : MessageLookupByLibrary.simpleMessage("暂无节目"), "noEpisodeRecent" : MessageLookupByLibrary.simpleMessage("暂无节目"),
"noPodcastGroup" : MessageLookupByLibrary.simpleMessage("分组无播客"), "noPodcastGroup" : MessageLookupByLibrary.simpleMessage("分组无播客"),
"notificaitonFatch" : m5, "notificaitonFatch" : m11,
"notificationNetworkError" : m6, "notificationNetworkError" : m12,
"notificationSubscribe" : m7, "notificationSubscribe" : m13,
"notificationSubscribeExisted" : m8, "notificationSubscribeExisted" : m14,
"notificationSuccess" : m9, "notificationSuccess" : m15,
"notificationUpdate" : m10, "notificationUpdate" : m16,
"notificationUpdateError" : m11, "notificationUpdateError" : m17,
"oldestFirst" : MessageLookupByLibrary.simpleMessage("由旧到新"), "oldestFirst" : MessageLookupByLibrary.simpleMessage("由旧到新"),
"play" : MessageLookupByLibrary.simpleMessage("播放"), "play" : MessageLookupByLibrary.simpleMessage("播放"),
"playing" : MessageLookupByLibrary.simpleMessage("正在播放"), "playing" : MessageLookupByLibrary.simpleMessage("正在播放"),
"plugins" : MessageLookupByLibrary.simpleMessage("插件"),
"podcast" : MessageLookupByLibrary.simpleMessage("播客"),
"podcastSubscribed" : MessageLookupByLibrary.simpleMessage("播客已订阅"), "podcastSubscribed" : MessageLookupByLibrary.simpleMessage("播客已订阅"),
"popupMenuDownloadDes" : MessageLookupByLibrary.simpleMessage("下载节目"), "popupMenuDownloadDes" : MessageLookupByLibrary.simpleMessage("下载节目"),
"popupMenuLaterDes" : MessageLookupByLibrary.simpleMessage("添加到播放列表"), "popupMenuLaterDes" : MessageLookupByLibrary.simpleMessage("添加到播放列表"),
@ -150,10 +189,15 @@ class MessageLookup extends MessageLookupByLibrary {
"popupMenuMarkDes" : MessageLookupByLibrary.simpleMessage("设置为已收听"), "popupMenuMarkDes" : MessageLookupByLibrary.simpleMessage("设置为已收听"),
"popupMenuPlayDes" : MessageLookupByLibrary.simpleMessage("播放节目"), "popupMenuPlayDes" : MessageLookupByLibrary.simpleMessage("播放节目"),
"privacyPolicy" : MessageLookupByLibrary.simpleMessage("隐私条款"), "privacyPolicy" : MessageLookupByLibrary.simpleMessage("隐私条款"),
"recoverSubscribe" : MessageLookupByLibrary.simpleMessage("恢复订阅"),
"remove" : MessageLookupByLibrary.simpleMessage("移除"), "remove" : MessageLookupByLibrary.simpleMessage("移除"),
"removeConfirm" : MessageLookupByLibrary.simpleMessage("取消订阅"),
"removePodcastDes" : MessageLookupByLibrary.simpleMessage("您确认要取消订阅吗?"),
"removedAt" : m18,
"schedule" : MessageLookupByLibrary.simpleMessage("定时"), "schedule" : MessageLookupByLibrary.simpleMessage("定时"),
"searchInvalidRss" : MessageLookupByLibrary.simpleMessage("RSS 链接错误"), "searchInvalidRss" : MessageLookupByLibrary.simpleMessage("RSS 链接错误"),
"searchPodcast" : MessageLookupByLibrary.simpleMessage("搜索播客"), "searchPodcast" : MessageLookupByLibrary.simpleMessage("搜索播客"),
"secondsAgo" : m19,
"settingStorage" : MessageLookupByLibrary.simpleMessage("储存空间"), "settingStorage" : MessageLookupByLibrary.simpleMessage("储存空间"),
"settingsAccentColor" : MessageLookupByLibrary.simpleMessage("次要颜色"), "settingsAccentColor" : MessageLookupByLibrary.simpleMessage("次要颜色"),
"settingsAccentColorDes" : MessageLookupByLibrary.simpleMessage("包括溢出颜色"), "settingsAccentColorDes" : MessageLookupByLibrary.simpleMessage("包括溢出颜色"),
@ -184,7 +228,7 @@ class MessageLookup extends MessageLookupByLibrary {
"settingsLayout" : MessageLookupByLibrary.simpleMessage("布局"), "settingsLayout" : MessageLookupByLibrary.simpleMessage("布局"),
"settingsLayoutDes" : MessageLookupByLibrary.simpleMessage("应用布局"), "settingsLayoutDes" : MessageLookupByLibrary.simpleMessage("应用布局"),
"settingsLibraries" : MessageLookupByLibrary.simpleMessage("开源"), "settingsLibraries" : MessageLookupByLibrary.simpleMessage("开源"),
"settingsLibrariesDes" : MessageLookupByLibrary.simpleMessage("使用开源项目"), "settingsLibrariesDes" : MessageLookupByLibrary.simpleMessage("开源项目使用"),
"settingsManageDownload" : MessageLookupByLibrary.simpleMessage("下载管理"), "settingsManageDownload" : MessageLookupByLibrary.simpleMessage("下载管理"),
"settingsManageDownloadDes" : MessageLookupByLibrary.simpleMessage("管理下载节目文件"), "settingsManageDownloadDes" : MessageLookupByLibrary.simpleMessage("管理下载节目文件"),
"settingsMenuAutoPlay" : MessageLookupByLibrary.simpleMessage("自动播放下一节目"), "settingsMenuAutoPlay" : MessageLookupByLibrary.simpleMessage("自动播放下一节目"),
@ -196,7 +240,7 @@ class MessageLookup extends MessageLookupByLibrary {
"settingsPopupMenu" : MessageLookupByLibrary.simpleMessage("节目弹出菜单"), "settingsPopupMenu" : MessageLookupByLibrary.simpleMessage("节目弹出菜单"),
"settingsPopupMenuDes" : MessageLookupByLibrary.simpleMessage("修改节目弹出菜单"), "settingsPopupMenuDes" : MessageLookupByLibrary.simpleMessage("修改节目弹出菜单"),
"settingsPrefrence" : MessageLookupByLibrary.simpleMessage("首选项"), "settingsPrefrence" : MessageLookupByLibrary.simpleMessage("首选项"),
"settingsRealDark" : MessageLookupByLibrary.simpleMessage("真的"), "settingsRealDark" : MessageLookupByLibrary.simpleMessage(""),
"settingsRealDarkDes" : MessageLookupByLibrary.simpleMessage("如果夜不够黑,请开启"), "settingsRealDarkDes" : MessageLookupByLibrary.simpleMessage("如果夜不够黑,请开启"),
"settingsSTAuto" : MessageLookupByLibrary.simpleMessage("自动睡眠模式"), "settingsSTAuto" : MessageLookupByLibrary.simpleMessage("自动睡眠模式"),
"settingsSTAutoDes" : MessageLookupByLibrary.simpleMessage("定期开启睡眠模式"), "settingsSTAutoDes" : MessageLookupByLibrary.simpleMessage("定期开启睡眠模式"),
@ -210,24 +254,33 @@ class MessageLookup extends MessageLookupByLibrary {
"settingsUpdateInterval" : MessageLookupByLibrary.simpleMessage("更新频率"), "settingsUpdateInterval" : MessageLookupByLibrary.simpleMessage("更新频率"),
"settingsUpdateIntervalDes" : MessageLookupByLibrary.simpleMessage("默认 24 小时"), "settingsUpdateIntervalDes" : MessageLookupByLibrary.simpleMessage("默认 24 小时"),
"size" : MessageLookupByLibrary.simpleMessage("大小"), "size" : MessageLookupByLibrary.simpleMessage("大小"),
"skipSecondsAtStart" : MessageLookupByLibrary.simpleMessage("开头跳过秒数"),
"sleepTimer" : MessageLookupByLibrary.simpleMessage("睡眠模式"), "sleepTimer" : MessageLookupByLibrary.simpleMessage("睡眠模式"),
"subscribe" : MessageLookupByLibrary.simpleMessage("订阅"), "subscribe" : MessageLookupByLibrary.simpleMessage("订阅"),
"systemDefault" : MessageLookupByLibrary.simpleMessage("系统默认"), "systemDefault" : MessageLookupByLibrary.simpleMessage("系统默认"),
"timeLastPlayed" : m12, "timeLastPlayed" : m20,
"timeLeft" : m13, "timeLeft" : m21,
"to" : MessageLookupByLibrary.simpleMessage(""), "to" : m22,
"toastAddPlaylist" : MessageLookupByLibrary.simpleMessage("添加到播放列表"), "toastAddPlaylist" : MessageLookupByLibrary.simpleMessage("添加到播放列表"),
"toastDescovery" : MessageLookupByLibrary.simpleMessage("重启应用后可查看"), "toastDiscovery" : MessageLookupByLibrary.simpleMessage("重启应用后可查看"),
"toastFileError" : MessageLookupByLibrary.simpleMessage("文件错误,导入失败"), "toastFileError" : MessageLookupByLibrary.simpleMessage("文件错误,导入失败"),
"toastFileNotVilid" : MessageLookupByLibrary.simpleMessage("文件错误"), "toastFileNotValid" : MessageLookupByLibrary.simpleMessage("文件错误"),
"toastHomeGroupNotSupport" : MessageLookupByLibrary.simpleMessage("Home 分组不支持此功能"),
"toastOneGroup" : MessageLookupByLibrary.simpleMessage("请至少选择一个分组"),
"toastPodcastRecovering" : MessageLookupByLibrary.simpleMessage("恢复中,请稍后"),
"toastReadFile" : MessageLookupByLibrary.simpleMessage("读取文件成功"), "toastReadFile" : MessageLookupByLibrary.simpleMessage("读取文件成功"),
"toastRecoverFailed" : MessageLookupByLibrary.simpleMessage("恢复订阅失败"),
"toastRemovePlaylist" : MessageLookupByLibrary.simpleMessage("从播放列表移除"), "toastRemovePlaylist" : MessageLookupByLibrary.simpleMessage("从播放列表移除"),
"toastSettingSaved" : MessageLookupByLibrary.simpleMessage("设置已保存"),
"toastTimeEqualEnd" : MessageLookupByLibrary.simpleMessage("与结束时间相同"),
"toastTimeEqualStart" : MessageLookupByLibrary.simpleMessage("与起始时间相同"),
"understood" : MessageLookupByLibrary.simpleMessage("了解"), "understood" : MessageLookupByLibrary.simpleMessage("了解"),
"undo" : MessageLookupByLibrary.simpleMessage("撤销"),
"unlike" : MessageLookupByLibrary.simpleMessage("取消喜欢"), "unlike" : MessageLookupByLibrary.simpleMessage("取消喜欢"),
"unliked" : MessageLookupByLibrary.simpleMessage("从收藏移除"), "unliked" : MessageLookupByLibrary.simpleMessage("从收藏移除"),
"updateDate" : MessageLookupByLibrary.simpleMessage("更新日期"), "updateDate" : MessageLookupByLibrary.simpleMessage("更新日期"),
"updateEpisodesCount" : m14, "updateEpisodesCount" : m23,
"updateFailed" : MessageLookupByLibrary.simpleMessage("更新失败"), "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` /// `Back`
String get back { String get back {
return Intl.message( 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` /// `Delete`
String get delete { String get delete {
return Intl.message( return Intl.message(
@ -214,7 +250,7 @@ class S {
return Intl.message( return Intl.message(
'Developer', 'Developer',
name: 'developer', name: 'developer',
desc: '', desc: 'Can also translate to About me',
args: [], args: [],
); );
} }
@ -229,6 +265,16 @@ class S {
); );
} }
/// `Done`
String get done {
return Intl.message(
'Done',
name: 'done',
desc: '',
args: [],
);
}
/// `Download` /// `Download`
String get download { String get download {
return Intl.message( return Intl.message(
@ -249,11 +295,11 @@ class S {
); );
} }
/// `Edit name` /// `Edit group name`
String get editName { String get editGroupName {
return Intl.message( return Intl.message(
'Edit name', 'Edit group name',
name: 'editName', name: 'editGroupName',
desc: '', desc: '',
args: [], 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` /// `Episode view`
String get featureDiscoveryEpisode { String get featureDiscoveryEpisode {
return Intl.message( 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` /// `Tap to import OMPL`
String get featureDiscoveryOMPL { String get featureDiscoveryOMPL {
return Intl.message( return Intl.message(
@ -429,16 +545,26 @@ class S {
); );
} }
/// `From` /// `Fonts`
String get from { String get fonts {
return Intl.message( return Intl.message(
'From', 'Fonts',
name: 'from', name: 'fonts',
desc: '', desc: '',
args: [], args: [],
); );
} }
/// `From {time}`
String from(Object time) {
return Intl.message(
'From $time',
name: 'from',
desc: '',
args: [time],
);
}
/// `Good Night` /// `Good Night`
String get goodNight { String get goodNight {
return Intl.message( 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` /// `Group filter`
String get groupFilter { String get groupFilter {
return Intl.message( return Intl.message(
@ -459,16 +595,29 @@ class S {
); );
} }
/// `Groups` /// `Are you sure you want to delete this group? Podcasts will be moved to Home group.`
String get groups { String get groupRemoveConfirm {
return Intl.message( return Intl.message(
'Groups', 'Are you sure you want to delete this group? Podcasts will be moved to Home group.',
name: 'groups', name: 'groupRemoveConfirm',
desc: '', desc: '',
args: [], 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` /// `See All`
String get homeGroupsSeeAll { String get homeGroupsSeeAll {
return Intl.message( 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` /// `Sort by`
String get homeSubMenuSortBy { String get homeSubMenuSortBy {
return Intl.message( return Intl.message(
@ -509,16 +648,6 @@ class S {
); );
} }
/// `Update Date`
String get homeSubMenuUpdateDate {
return Intl.message(
'Update Date',
name: 'homeSubMenuUpdateDate',
desc: '',
args: [],
);
}
/// `Favorite` /// `Favorite`
String get homeTabMenuFavotite { String get homeTabMenuFavotite {
return Intl.message( 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}}` /// `{count, plural, zero{} one{{count} hour} other{{count} hours}}`
String hoursCount(num count) { String hoursCount(num count) {
return Intl.plural( 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` /// `Later`
String get later { String get later {
return Intl.message( 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` /// `Mark confirm`
String get markConfirm { String get markConfirm {
return Intl.message( 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}}` /// `{count, plural, zero{} one{{count} min} other{{count} mins}}`
String minsCount(num count) { String minsCount(num count) {
return Intl.plural( 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` /// `No episode downloaded yet`
String get noEpisodeDownload { String get noEpisodeDownload {
return Intl.message( 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` /// `Podcast subscribed`
String get podcastSubscribed { String get podcastSubscribed {
return Intl.message( return Intl.message(
@ -1015,6 +1240,16 @@ class S {
); );
} }
/// `Recover subscribe`
String get recoverSubscribe {
return Intl.message(
'Recover subscribe',
name: 'recoverSubscribe',
desc: '',
args: [],
);
}
/// `Remove` /// `Remove`
String get remove { String get remove {
return Intl.message( 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` /// `Schedule`
String get schedule { String get schedule {
return Intl.message( 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` /// `Accent color`
String get settingsAccentColor { String get settingsAccentColor {
return Intl.message( return Intl.message(
@ -1265,10 +1543,10 @@ class S {
); );
} }
/// `Bugs and feature request` /// `Bugs and features request`
String get settingsFeedbackDes { String get settingsFeedbackDes {
return Intl.message( return Intl.message(
'Bugs and feature request', 'Bugs and features request',
name: 'settingsFeedbackDes', name: 'settingsFeedbackDes',
desc: '', desc: '',
args: [], 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` /// `Sleep timer`
String get sleepTimer { String get sleepTimer {
return Intl.message( return Intl.message(
@ -1665,13 +1953,13 @@ class S {
); );
} }
/// `To` /// `To {time}`
String get to { String to(Object time) {
return Intl.message( return Intl.message(
'To', 'To $time',
name: 'to', name: 'to',
desc: '', desc: '',
args: [], args: [time],
); );
} }
@ -1686,35 +1974,65 @@ class S {
} }
/// `Discovery feature reopened, pleast restart the app` /// `Discovery feature reopened, pleast restart the app`
String get toastDescovery { String get toastDiscovery {
return Intl.message( return Intl.message(
'Discovery feature reopened, pleast restart the app', 'Discovery feature reopened, pleast restart the app',
name: 'toastDescovery', name: 'toastDiscovery',
desc: '', desc: '',
args: [], args: [],
); );
} }
/// `File error, Subscribe failed` /// `File error, subscribe failed`
String get toastFileError { String get toastFileError {
return Intl.message( return Intl.message(
'File error, Subscribe failed', 'File error, subscribe failed',
name: 'toastFileError', name: 'toastFileError',
desc: '', desc: '',
args: [], args: [],
); );
} }
/// `File not vilid` /// `File not valid`
String get toastFileNotVilid { String get toastFileNotValid {
return Intl.message( return Intl.message(
'File not vilid', 'File not valid',
name: 'toastFileNotVilid', name: 'toastFileNotValid',
desc: '', desc: '',
args: [], 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` /// `Read file successfully`
String get toastReadFile { String get toastReadFile {
return Intl.message( 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 { String get toastRemovePlaylist {
return Intl.message( return Intl.message(
'Removed from playlist', 'Episode removed from playlist',
name: 'toastRemovePlaylist', name: 'toastRemovePlaylist',
desc: '', desc: '',
args: [], 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` /// `Understood`
String get understood { String get understood {
return Intl.message( return Intl.message(
@ -1745,6 +2103,16 @@ class S {
); );
} }
/// `UNDO`
String get undo {
return Intl.message(
'UNDO',
name: 'undo',
desc: '',
args: [],
);
}
/// `Unlike` /// `Unlike`
String get unlike { String get unlike {
return Intl.message( return Intl.message(
@ -1755,10 +2123,10 @@ class S {
); );
} }
/// `Removed from favorite` /// `Episode removed from favorite`
String get unliked { String get unliked {
return Intl.message( return Intl.message(
'Removed from favorite', 'Episode removed from favorite',
name: 'unliked', name: 'unliked',
desc: '', desc: '',
args: [], 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) { String updateEpisodesCount(num count) {
return Intl.plural( return Intl.plural(
count, count,
zero: 'No Update', zero: 'No update',
one: 'Updated $count Episode', one: 'Updated $count episode',
other: 'Updated $count Episodes', other: 'Updated $count episodes',
name: 'updateEpisodesCount', name: 'updateEpisodesCount',
desc: '', desc: '',
args: [count], args: [count],

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -20,6 +20,8 @@
}, },
"all": "All", "all": "All",
"@all": {}, "@all": {},
"autoDownload": "Auto download",
"@autoDownload": {},
"back": "Back", "back": "Back",
"@back": {}, "@back": {},
"buffering": "Buffering", "buffering": "Buffering",
@ -40,26 +42,48 @@
"@confirm": {}, "@confirm": {},
"darkMode": "Dark mode", "darkMode": "Dark mode",
"@darkMode": {}, "@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": "Delete",
"@delete": {}, "@delete": {},
"developer": "Developer", "developer": "Developer",
"@developer": {}, "@developer": {
"description": "Can also translate to About me"
},
"dismiss": "Dismiss", "dismiss": "Dismiss",
"@dismiss": {}, "@dismiss": {},
"done": "Done",
"@done": {},
"download": "Download", "download": "Download",
"@download": {}, "@download": {},
"downloaded": "Downloaded", "downloaded": "Downloaded",
"@downloaded": {}, "@downloaded": {},
"editName": "Edit name", "editGroupName": "Edit group name",
"@editName": {}, "@editGroupName": {},
"endOfEpisode": "End of Episode", "endOfEpisode": "End of Episode",
"@endOfEpisode": {}, "@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": "Episode view",
"@featureDiscoveryEpisode": {}, "@featureDiscoveryEpisode": {},
"featureDiscoveryEpisodeDes": "You can long tap to play episode or add episode to playlist.", "featureDiscoveryEpisodeDes": "You can long tap to play episode or add episode to playlist.",
"@featureDiscoveryEpisodeDes": {}, "@featureDiscoveryEpisodeDes": {},
"featureDiscoveryEpisodeTitle": "Long tap to play episode instantly", "featureDiscoveryEpisodeTitle": "Long tap to play episode instantly",
"@featureDiscoveryEpisodeTitle": {}, "@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": "Tap to import OMPL",
"@featureDiscoveryOMPL": {}, "@featureDiscoveryOMPL": {},
"featureDiscoveryOMPLDes": "You can import OMPL file, open setting or refresh all podcast at once here.", "featureDiscoveryOMPLDes": "You can import OMPL file, open setting or refresh all podcast at once here.",
@ -86,24 +110,30 @@
"@feedbackPlay": {}, "@feedbackPlay": {},
"feedbackTelegram": "Join group", "feedbackTelegram": "Join group",
"@feedbackTelegram": {}, "@feedbackTelegram": {},
"from": "From", "fonts": "Fonts",
"@from": {}, "@fonts": {},
"from": "From {time}",
"@from": {
"placeholders": {
"time": {}
}
},
"goodNight": "Good Night", "goodNight": "Good Night",
"@goodNight": {}, "@goodNight": {},
"groupExisted": "Group existed",
"@groupExisted": {},
"groupFilter": "Group filter", "groupFilter": "Group filter",
"@groupFilter": {}, "@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": {}, "@groups": {},
"homeGroupsSeeAll": "See All", "homeGroupsSeeAll": "See All",
"@homeGroupsSeeAll": {}, "@homeGroupsSeeAll": {},
"homeMenuPlaylist": "Playlist", "homeMenuPlaylist": "Playlist",
"@homeMenuPlaylist": {}, "@homeMenuPlaylist": {},
"homeSubMenuLikeData": "Like Date",
"@homeSubMenuLikeData": {},
"homeSubMenuSortBy": "Sort by", "homeSubMenuSortBy": "Sort by",
"@homeSubMenuSortBy": {}, "@homeSubMenuSortBy": {},
"homeSubMenuUpdateDate": "Update Date",
"@homeSubMenuUpdateDate": {},
"homeTabMenuFavotite": "Favorite", "homeTabMenuFavotite": "Favorite",
"@homeTabMenuFavotite": {}, "@homeTabMenuFavotite": {},
"homeTabMenuRecent": "Recent", "homeTabMenuRecent": "Recent",
@ -122,8 +152,16 @@
"host": {} "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": "{count, plural, zero{} one{{count} hour} other{{count} hours}}",
"@hoursCount": {}, "@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": "Later",
"@later": {}, "@later": {},
"lightMode": "Light mode", "lightMode": "Light mode",
@ -140,6 +178,10 @@
"@listened": {}, "@listened": {},
"loadMore": "Load more", "loadMore": "Load more",
"@loadMore": {}, "@loadMore": {},
"mark": "Mark",
"@mark": {
"description": "The short the best"
},
"markConfirm": "Mark confirm", "markConfirm": "Mark confirm",
"@markConfirm": {}, "@markConfirm": {},
"markConfirmContent": "Confirm mark all episodes listened?", "markConfirmContent": "Confirm mark all episodes listened?",
@ -156,6 +198,8 @@
"@menuViewRSS": {}, "@menuViewRSS": {},
"menuVisitSite": "Visit Site", "menuVisitSite": "Visit Site",
"@menuVisitSite": {}, "@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": "{count, plural, zero{} one{{count} min} other{{count} mins}}",
"@minsCount": {}, "@minsCount": {},
"network": "Network", "network": "Network",
@ -164,6 +208,8 @@
"@newestFirst": {}, "@newestFirst": {},
"newGroup": "Create new group", "newGroup": "Create new group",
"@newGroup": {}, "@newGroup": {},
"next": "Next",
"@next": {},
"noEpisodeDownload": "No episode downloaded yet", "noEpisodeDownload": "No episode downloaded yet",
"@noEpisodeDownload": {}, "@noEpisodeDownload": {},
"noEpisodeFavorite": "No episode collected yet", "noEpisodeFavorite": "No episode collected yet",
@ -216,6 +262,10 @@
"@play": {}, "@play": {},
"playing": "Playing", "playing": "Playing",
"@playing": {}, "@playing": {},
"plugins": "Plugins",
"@plugins": {},
"podcast": "Podcast",
"@podcast": {},
"podcastSubscribed": "Podcast subscribed", "podcastSubscribed": "Podcast subscribed",
"@podcastSubscribed": {}, "@podcastSubscribed": {},
"popupMenuDownloadDes": "Download episode", "popupMenuDownloadDes": "Download episode",
@ -230,14 +280,31 @@
"@popupMenuPlayDes": {}, "@popupMenuPlayDes": {},
"privacyPolicy": "Privacy Policy", "privacyPolicy": "Privacy Policy",
"@privacyPolicy": {}, "@privacyPolicy": {},
"recoverSubscribe": "Recover subscribe",
"@recoverSubscribe": {},
"remove": "Remove", "remove": "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": "Schedule",
"@schedule": {}, "@schedule": {},
"searchInvalidRss": "Invalid RSS link", "searchInvalidRss": "Invalid RSS link",
"@searchInvalidRss": {}, "@searchInvalidRss": {},
"searchPodcast": "Search podcast", "searchPodcast": "Search podcast",
"@searchPodcast": {}, "@searchPodcast": {},
"secondsAgo": "{count, plural, zero{} one{{count} second ago} other{{count} seconds ago}}",
"@secondsAgo": {},
"settingsAccentColor": "Accent color", "settingsAccentColor": "Accent color",
"@settingsAccentColor": {}, "@settingsAccentColor": {},
"settingsAccentColorDes": "Include the ovelay color", "settingsAccentColorDes": "Include the ovelay color",
@ -280,7 +347,7 @@
"@settingsExportDes": {}, "@settingsExportDes": {},
"settingsFeedback": "Feedback", "settingsFeedback": "Feedback",
"@settingsFeedback": {}, "@settingsFeedback": {},
"settingsFeedbackDes": "Bugs and feature request", "settingsFeedbackDes": "Bugs and features request",
"@settingsFeedbackDes": {}, "@settingsFeedbackDes": {},
"settingsHistory": "History", "settingsHistory": "History",
"@settingsHistory": {}, "@settingsHistory": {},
@ -350,6 +417,8 @@
"@settingsUpdateIntervalDes": {}, "@settingsUpdateIntervalDes": {},
"size": "Size", "size": "Size",
"@size": {}, "@size": {},
"skipSecondsAtStart": "Skip seconds at start",
"@skipSecondsAtStart": {},
"sleepTimer": "Sleep timer", "sleepTimer": "Sleep timer",
"@sleepTimer": {}, "@sleepTimer": {},
"subscribe": "Subscribe", "subscribe": "Subscribe",
@ -368,29 +437,53 @@
"time": {} "time": {}
} }
}, },
"to": "To", "to": "To {time}",
"@to": {}, "@to": {
"placeholders": {
"time": {}
}
},
"toastAddPlaylist": "Added to playlist", "toastAddPlaylist": "Added to playlist",
"@toastAddPlaylist": {}, "@toastAddPlaylist": {},
"toastDescovery": "Discovery feature reopened, pleast restart the app", "toastDiscovery": "Discovery feature reopened, pleast restart the app",
"@toastDescovery": {}, "@toastDiscovery": {},
"toastFileError": "File error, Subscribe failed", "toastFileError": "File error, subscribe failed",
"@toastFileError": {}, "@toastFileError": {},
"toastFileNotVilid": "File not vilid", "toastFileNotValid": "File not valid",
"@toastFileNotVilid": {}, "@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": "Read file successfully",
"@toastReadFile": {}, "@toastReadFile": {},
"toastRemovePlaylist": "Removed from playlist", "toastRecoverFailed": "Podcast recover failed",
"@toastRecoverFailed": {
"description": "Resubscribe removed podast"
},
"toastRemovePlaylist": "Episode removed from playlist",
"@toastRemovePlaylist": {}, "@toastRemovePlaylist": {},
"toastSettingSaved": "Setting saved",
"@toastSettingSaved": {},
"toastTimeEqualEnd": "Time is equal to end time",
"@toastTimeEqualEnd": {},
"toastTimeEqualStart": "Time is equal to start time",
"@toastTimeEqualStart": {},
"understood": "Understood", "understood": "Understood",
"@understood": {}, "@understood": {},
"undo": "UNDO",
"@undo": {},
"unlike": "Unlike", "unlike": "Unlike",
"@unlike": {}, "@unlike": {},
"unliked": "Removed from favorite", "unliked": "Episode removed from favorite",
"@unliked": {}, "@unliked": {},
"updateDate": "Update date", "updateDate": "Update date",
"@updateDate": {}, "@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": {}, "@updateEpisodesCount": {},
"updateFailed": "Update failed, network error", "updateFailed": "Update failed, network error",
"@updateFailed": {}, "@updateFailed": {},

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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