diff --git a/lib/generated/intl/messages_en.dart b/lib/generated/intl/messages_en.dart index 67255d2..62a72ef 100644 --- a/lib/generated/intl/messages_en.dart +++ b/lib/generated/intl/messages_en.dart @@ -23,33 +23,51 @@ class MessageLookup extends MessageLookupByLibrary { static m1(count) => "${Intl.plural(count, zero: '', one: '${count} episode added to playlist', other: '${count} episodes added to playlist')}"; - static m2(host) => "Hosted on ${host}"; + static m2(count) => "${Intl.plural(count, zero: 'Today', one: '${count} day ago', other: '${count} days ago')}"; - static m3(count) => "${Intl.plural(count, zero: '', one: '${count} hour', other: '${count} hours')}"; + static m3(count) => "${Intl.plural(count, zero: 'Never', one: '${count} day', other: '${count} days')}"; - static m4(count) => "${Intl.plural(count, zero: '', one: '${count} min', other: '${count} mins')}"; + static m4(time) => "From ${time}"; - static m5(title) => "Fetch data ${title}"; + static m5(count) => "${Intl.plural(count, zero: 'Group', one: 'Group', other: 'Groups')}"; - static m6(title) => "Subscribe failed, network error ${title}"; + static m6(host) => "Hosted on ${host}"; - static m7(title) => "Subscribe ${title}"; + static m7(count) => "${Intl.plural(count, zero: '', one: '${count} hour ago', other: '${count} hours ago')}"; - static m8(title) => "Subscribe failed, podcast existed ${title}"; + static m8(count) => "${Intl.plural(count, zero: '', one: '${count} hour', other: '${count} hours')}"; - static m9(title) => "Subscribe success ${title}"; + static m9(count) => "${Intl.plural(count, zero: '', one: '${count} minute ago', other: '${count} minutes ago')}"; - static m10(title) => "Update ${title}"; + static m10(count) => "${Intl.plural(count, zero: '', one: '${count} min', other: '${count} mins')}"; - static m11(title) => "Update error ${title}"; + static m11(title) => "Fetch data ${title}"; - static m12(time) => "Last time ${time}"; + static m12(title) => "Subscribe failed, network error ${title}"; - static m13(time) => "${time} Left"; + static m13(title) => "Subscribe ${title}"; - static m14(count) => "${Intl.plural(count, zero: 'No Update', one: 'Updated ${count} Episode', other: 'Updated ${count} Episodes')}"; + static m14(title) => "Subscribe failed, podcast existed ${title}"; - static m15(version) => "Version : ${version}"; + static m15(title) => "Subscribe success ${title}"; + + static m16(title) => "Update ${title}"; + + static m17(title) => "Update error ${title}"; + + static m18(date) => "Removed at ${date}"; + + static m19(count) => "${Intl.plural(count, zero: '', one: '${count} second ago', other: '${count} seconds ago')}"; + + static m20(time) => "Last time ${time}"; + + static m21(time) => "${time} Left"; + + static m22(time) => "To ${time}"; + + static m23(count) => "${Intl.plural(count, zero: 'No update', one: 'Updated ${count} episode', other: 'Updated ${count} episodes')}"; + + static m24(version) => "Version : ${version}"; final messages = _notInlinedMessages(_notInlinedMessages); static _notInlinedMessages(_) => { @@ -59,6 +77,7 @@ class MessageLookup extends MessageLookupByLibrary { "addNewEpisodeTooltip" : MessageLookupByLibrary.simpleMessage("Add new episodes to playlist"), "addSomeGroups" : MessageLookupByLibrary.simpleMessage("Add some groups"), "all" : MessageLookupByLibrary.simpleMessage("All"), + "autoDownload" : MessageLookupByLibrary.simpleMessage("Auto download"), "back" : MessageLookupByLibrary.simpleMessage("Back"), "buffering" : MessageLookupByLibrary.simpleMessage("Buffering"), "cancel" : MessageLookupByLibrary.simpleMessage("CANCEL"), @@ -69,16 +88,26 @@ class MessageLookup extends MessageLookupByLibrary { "color" : MessageLookupByLibrary.simpleMessage("color"), "confirm" : MessageLookupByLibrary.simpleMessage("CONFIRM"), "darkMode" : MessageLookupByLibrary.simpleMessage("Dark mode"), + "daysAgo" : m2, + "daysCount" : m3, "delete" : MessageLookupByLibrary.simpleMessage("Delete"), "developer" : MessageLookupByLibrary.simpleMessage("Developer"), "dismiss" : MessageLookupByLibrary.simpleMessage("Dismiss"), + "done" : MessageLookupByLibrary.simpleMessage("Done"), "download" : MessageLookupByLibrary.simpleMessage("Download"), "downloaded" : MessageLookupByLibrary.simpleMessage("Downloaded"), - "editName" : MessageLookupByLibrary.simpleMessage("Edit name"), + "editGroupName" : MessageLookupByLibrary.simpleMessage("Edit group name"), "endOfEpisode" : MessageLookupByLibrary.simpleMessage("End of Episode"), + "episode" : MessageLookupByLibrary.simpleMessage("Episode"), + "featureDiscoveryEditGroup" : MessageLookupByLibrary.simpleMessage("Tap to edit group"), + "featureDiscoveryEditGroupDes" : MessageLookupByLibrary.simpleMessage("You can change group name or delete group here, but home group can not be edited or deleted"), "featureDiscoveryEpisode" : MessageLookupByLibrary.simpleMessage("Episode view"), "featureDiscoveryEpisodeDes" : MessageLookupByLibrary.simpleMessage("You can long tap to play episode or add episode to playlist."), "featureDiscoveryEpisodeTitle" : MessageLookupByLibrary.simpleMessage("Long tap to play episode instantly"), + "featureDiscoveryGroup" : MessageLookupByLibrary.simpleMessage("Tap to add group"), + "featureDiscoveryGroupDes" : MessageLookupByLibrary.simpleMessage("Default group is home for new podcast, you can create new group and move podcast to new group, podcast can be added to multi-groups."), + "featureDiscoveryGroupPodcast" : MessageLookupByLibrary.simpleMessage("Long tap to reorder podcast"), + "featureDiscoveryGroupPodcastDes" : MessageLookupByLibrary.simpleMessage("You can tap to see more options, or long tap to reorder podcast in group."), "featureDiscoveryOMPL" : MessageLookupByLibrary.simpleMessage("Tap to import OMPL"), "featureDiscoveryOMPLDes" : MessageLookupByLibrary.simpleMessage("You can import OMPL file, open setting or refresh all podcast at once here."), "featureDiscoveryPlaylist" : MessageLookupByLibrary.simpleMessage("Tap to open playlist"), @@ -92,23 +121,28 @@ class MessageLookup extends MessageLookupByLibrary { "feedbackGithub" : MessageLookupByLibrary.simpleMessage("Submit issue"), "feedbackPlay" : MessageLookupByLibrary.simpleMessage("Rate on Play"), "feedbackTelegram" : MessageLookupByLibrary.simpleMessage("Join group"), - "from" : MessageLookupByLibrary.simpleMessage("From"), + "fonts" : MessageLookupByLibrary.simpleMessage("Fonts"), + "from" : m4, "goodNight" : MessageLookupByLibrary.simpleMessage("Good Night"), + "groupExisted" : MessageLookupByLibrary.simpleMessage("Group existed"), "groupFilter" : MessageLookupByLibrary.simpleMessage("Group filter"), - "groups" : MessageLookupByLibrary.simpleMessage("Groups"), + "groupRemoveConfirm" : MessageLookupByLibrary.simpleMessage("Are you sure you want to delete this group? Podcasts will be moved to Home group."), + "groups" : m5, "homeGroupsSeeAll" : MessageLookupByLibrary.simpleMessage("See All"), "homeMenuPlaylist" : MessageLookupByLibrary.simpleMessage("Playlist"), - "homeSubMenuLikeData" : MessageLookupByLibrary.simpleMessage("Like Date"), "homeSubMenuSortBy" : MessageLookupByLibrary.simpleMessage("Sort by"), - "homeSubMenuUpdateDate" : MessageLookupByLibrary.simpleMessage("Update Date"), "homeTabMenuFavotite" : MessageLookupByLibrary.simpleMessage("Favorite"), "homeTabMenuRecent" : MessageLookupByLibrary.simpleMessage("Recent"), "homeToprightMenuAbout" : MessageLookupByLibrary.simpleMessage("About"), "homeToprightMenuImportOMPL" : MessageLookupByLibrary.simpleMessage("Import OMPL"), "homeToprightMenuRefreshAll" : MessageLookupByLibrary.simpleMessage("Refresh all"), "homeToprightMenuSettings" : MessageLookupByLibrary.simpleMessage("Settings"), - "hostedOn" : m2, - "hoursCount" : m3, + "hostedOn" : m6, + "hoursAgo" : m7, + "hoursCount" : m8, + "introFourthPage" : MessageLookupByLibrary.simpleMessage("Long press on episode card for quick actions."), + "introSecondPage" : MessageLookupByLibrary.simpleMessage("Subscribe podcast via search or import OMPL file."), + "introThirdPage" : MessageLookupByLibrary.simpleMessage("You can create new group for podcasts, swipe on podcast list to change group."), "later" : MessageLookupByLibrary.simpleMessage("Later"), "lightMode" : MessageLookupByLibrary.simpleMessage("Light mode"), "like" : MessageLookupByLibrary.simpleMessage("Like"), @@ -117,6 +151,7 @@ class MessageLookup extends MessageLookupByLibrary { "listen" : MessageLookupByLibrary.simpleMessage("Listen"), "listened" : MessageLookupByLibrary.simpleMessage("Listened"), "loadMore" : MessageLookupByLibrary.simpleMessage("Load more"), + "mark" : MessageLookupByLibrary.simpleMessage("Mark"), "markConfirm" : MessageLookupByLibrary.simpleMessage("Mark confirm"), "markConfirmContent" : MessageLookupByLibrary.simpleMessage("Confirm mark all episodes listened?"), "markListened" : MessageLookupByLibrary.simpleMessage("Mark listened"), @@ -125,24 +160,28 @@ class MessageLookup extends MessageLookupByLibrary { "menuMarkAllListened" : MessageLookupByLibrary.simpleMessage("Mark All Listened"), "menuViewRSS" : MessageLookupByLibrary.simpleMessage("Visit RSS Feed"), "menuVisitSite" : MessageLookupByLibrary.simpleMessage("Visit Site"), - "minsCount" : m4, + "minsAgo" : m9, + "minsCount" : m10, "network" : MessageLookupByLibrary.simpleMessage("Network"), "newGroup" : MessageLookupByLibrary.simpleMessage("Create new group"), "newestFirst" : MessageLookupByLibrary.simpleMessage("Newest first"), + "next" : MessageLookupByLibrary.simpleMessage("Next"), "noEpisodeDownload" : MessageLookupByLibrary.simpleMessage("No episode downloaded yet"), "noEpisodeFavorite" : MessageLookupByLibrary.simpleMessage("No episode collected yet"), "noEpisodeRecent" : MessageLookupByLibrary.simpleMessage("No episode received yet"), "noPodcastGroup" : MessageLookupByLibrary.simpleMessage("No podcast in this group"), - "notificaitonFatch" : m5, - "notificationNetworkError" : m6, - "notificationSubscribe" : m7, - "notificationSubscribeExisted" : m8, - "notificationSuccess" : m9, - "notificationUpdate" : m10, - "notificationUpdateError" : m11, + "notificaitonFatch" : m11, + "notificationNetworkError" : m12, + "notificationSubscribe" : m13, + "notificationSubscribeExisted" : m14, + "notificationSuccess" : m15, + "notificationUpdate" : m16, + "notificationUpdateError" : m17, "oldestFirst" : MessageLookupByLibrary.simpleMessage("Oldest first"), "play" : MessageLookupByLibrary.simpleMessage("Play"), "playing" : MessageLookupByLibrary.simpleMessage("Playing"), + "plugins" : MessageLookupByLibrary.simpleMessage("Plugins"), + "podcast" : MessageLookupByLibrary.simpleMessage("Podcast"), "podcastSubscribed" : MessageLookupByLibrary.simpleMessage("Podcast subscribed"), "popupMenuDownloadDes" : MessageLookupByLibrary.simpleMessage("Download episode"), "popupMenuLaterDes" : MessageLookupByLibrary.simpleMessage("Add episode to playlist"), @@ -150,10 +189,15 @@ class MessageLookup extends MessageLookupByLibrary { "popupMenuMarkDes" : MessageLookupByLibrary.simpleMessage("Mark episode as listened"), "popupMenuPlayDes" : MessageLookupByLibrary.simpleMessage("Play the episode"), "privacyPolicy" : MessageLookupByLibrary.simpleMessage("Privacy Policy"), + "recoverSubscribe" : MessageLookupByLibrary.simpleMessage("Recover subscribe"), "remove" : MessageLookupByLibrary.simpleMessage("Remove"), + "removeConfirm" : MessageLookupByLibrary.simpleMessage("Remove confirm"), + "removePodcastDes" : MessageLookupByLibrary.simpleMessage("Are you sure you want to unsubscribe?"), + "removedAt" : m18, "schedule" : MessageLookupByLibrary.simpleMessage("Schedule"), "searchInvalidRss" : MessageLookupByLibrary.simpleMessage("Invalid RSS link"), "searchPodcast" : MessageLookupByLibrary.simpleMessage("Search podcast"), + "secondsAgo" : m19, "settingStorage" : MessageLookupByLibrary.simpleMessage("Storage"), "settingsAccentColor" : MessageLookupByLibrary.simpleMessage("Accent color"), "settingsAccentColorDes" : MessageLookupByLibrary.simpleMessage("Include the ovelay color"), @@ -176,7 +220,7 @@ class MessageLookup extends MessageLookupByLibrary { "settingsExport" : MessageLookupByLibrary.simpleMessage("Export"), "settingsExportDes" : MessageLookupByLibrary.simpleMessage("Export OMPL file of all podcasts"), "settingsFeedback" : MessageLookupByLibrary.simpleMessage("Feedback"), - "settingsFeedbackDes" : MessageLookupByLibrary.simpleMessage("Bugs and feature request"), + "settingsFeedbackDes" : MessageLookupByLibrary.simpleMessage("Bugs and features request"), "settingsHistory" : MessageLookupByLibrary.simpleMessage("History"), "settingsHistoryDes" : MessageLookupByLibrary.simpleMessage("Listen date"), "settingsInfo" : MessageLookupByLibrary.simpleMessage("Info"), @@ -210,24 +254,33 @@ class MessageLookup extends MessageLookupByLibrary { "settingsUpdateInterval" : MessageLookupByLibrary.simpleMessage("Update interval"), "settingsUpdateIntervalDes" : MessageLookupByLibrary.simpleMessage("Default 24 hours"), "size" : MessageLookupByLibrary.simpleMessage("Size"), + "skipSecondsAtStart" : MessageLookupByLibrary.simpleMessage("Skip seconds at start"), "sleepTimer" : MessageLookupByLibrary.simpleMessage("Sleep timer"), "subscribe" : MessageLookupByLibrary.simpleMessage("Subscribe"), "systemDefault" : MessageLookupByLibrary.simpleMessage("System default"), - "timeLastPlayed" : m12, - "timeLeft" : m13, - "to" : MessageLookupByLibrary.simpleMessage("To"), + "timeLastPlayed" : m20, + "timeLeft" : m21, + "to" : m22, "toastAddPlaylist" : MessageLookupByLibrary.simpleMessage("Added to playlist"), - "toastDescovery" : MessageLookupByLibrary.simpleMessage("Discovery feature reopened, pleast restart the app"), - "toastFileError" : MessageLookupByLibrary.simpleMessage("File error, Subscribe failed"), - "toastFileNotVilid" : MessageLookupByLibrary.simpleMessage("File not vilid"), + "toastDiscovery" : MessageLookupByLibrary.simpleMessage("Discovery feature reopened, pleast restart the app"), + "toastFileError" : MessageLookupByLibrary.simpleMessage("File error, subscribe failed"), + "toastFileNotValid" : MessageLookupByLibrary.simpleMessage("File not valid"), + "toastHomeGroupNotSupport" : MessageLookupByLibrary.simpleMessage("Home group is not supported"), + "toastOneGroup" : MessageLookupByLibrary.simpleMessage("At least select one group"), + "toastPodcastRecovering" : MessageLookupByLibrary.simpleMessage("Recovering, wait for a moment"), "toastReadFile" : MessageLookupByLibrary.simpleMessage("Read file successfully"), - "toastRemovePlaylist" : MessageLookupByLibrary.simpleMessage("Removed from playlist"), + "toastRecoverFailed" : MessageLookupByLibrary.simpleMessage("Podcast recover failed"), + "toastRemovePlaylist" : MessageLookupByLibrary.simpleMessage("Episode removed from playlist"), + "toastSettingSaved" : MessageLookupByLibrary.simpleMessage("Setting saved"), + "toastTimeEqualEnd" : MessageLookupByLibrary.simpleMessage("Time is equal to end time"), + "toastTimeEqualStart" : MessageLookupByLibrary.simpleMessage("Time is equal to start time"), "understood" : MessageLookupByLibrary.simpleMessage("Understood"), + "undo" : MessageLookupByLibrary.simpleMessage("UNDO"), "unlike" : MessageLookupByLibrary.simpleMessage("Unlike"), - "unliked" : MessageLookupByLibrary.simpleMessage("Removed from favorite"), + "unliked" : MessageLookupByLibrary.simpleMessage("Episode removed from favorite"), "updateDate" : MessageLookupByLibrary.simpleMessage("Update date"), - "updateEpisodesCount" : m14, + "updateEpisodesCount" : m23, "updateFailed" : MessageLookupByLibrary.simpleMessage("Update failed, network error"), - "version" : m15 + "version" : m24 }; } diff --git a/lib/generated/intl/messages_zh-Hans.dart b/lib/generated/intl/messages_zh-Hans.dart index 5f95c0b..0f71b27 100644 --- a/lib/generated/intl/messages_zh-Hans.dart +++ b/lib/generated/intl/messages_zh-Hans.dart @@ -23,33 +23,51 @@ class MessageLookup extends MessageLookupByLibrary { static m1(count) => "${Intl.plural(count, zero: '', other: '${count}集节目添加到播放列表')}"; - static m2(host) => "平台 ${host}"; + static m2(count) => "${Intl.plural(count, zero: '今天', other: '${count}天前')}"; - static m3(count) => "${Intl.plural(count, zero: '', other: '${count} 小时')}"; + static m3(count) => "${Intl.plural(count, zero: '从不', other: '${count}天')}"; - static m4(count) => "${Intl.plural(count, zero: '', other: '${count}分钟')}"; + static m4(time) => "自${time}"; - static m5(title) => "获取数据 ${title}"; + static m5(count) => "${Intl.plural(count, zero: '分组', other: '分组')}"; - static m6(title) => "订阅失败,网络错误 ${title}"; + static m6(host) => "平台 ${host}"; - static m7(title) => "订阅${title}"; + static m7(count) => "${Intl.plural(count, zero: '', other: '${count}小时前')}"; - static m8(title) => "订阅失败,播客已存在 ${title}"; + static m8(count) => "${Intl.plural(count, zero: '', other: '${count} 小时')}"; - static m9(title) => "订阅成功 ${title}"; + static m9(count) => "${Intl.plural(count, zero: '', other: '${count}分钟前')}"; - static m10(title) => "更新 ${title}"; + static m10(count) => "${Intl.plural(count, zero: '', other: '${count}分钟')}"; - static m11(title) => "更新失败 ${title}"; + static m11(title) => "获取数据 ${title}"; - static m12(time) => "上次播放${time}"; + static m12(title) => "订阅失败,网络错误 ${title}"; - static m13(time) => "剩余 ${time}"; + static m13(title) => "订阅${title}"; - static m14(count) => "${Intl.plural(count, zero: '未有更新', other: '更新 ${count} 集节目')}"; + static m14(title) => "订阅失败,播客已存在 ${title}"; - static m15(version) => "版本:${version}"; + static m15(title) => "订阅成功 ${title}"; + + static m16(title) => "更新 ${title}"; + + static m17(title) => "更新失败 ${title}"; + + static m18(date) => "${date}移除"; + + static m19(count) => "${Intl.plural(count, zero: '', other: '${count}秒前')}"; + + static m20(time) => "上次播放${time}"; + + static m21(time) => "剩余 ${time}"; + + static m22(time) => "到${time}"; + + static m23(count) => "${Intl.plural(count, zero: '未有更新', other: '更新 ${count} 集节目')}"; + + static m24(version) => "版本:${version}"; final messages = _notInlinedMessages(_notInlinedMessages); static _notInlinedMessages(_) => { @@ -59,6 +77,7 @@ class MessageLookup extends MessageLookupByLibrary { "addNewEpisodeTooltip" : MessageLookupByLibrary.simpleMessage("添加更新节目到播放列表"), "addSomeGroups" : MessageLookupByLibrary.simpleMessage("请添加分组"), "all" : MessageLookupByLibrary.simpleMessage("全部"), + "autoDownload" : MessageLookupByLibrary.simpleMessage("自动下载"), "back" : MessageLookupByLibrary.simpleMessage("返回"), "buffering" : MessageLookupByLibrary.simpleMessage("缓冲"), "cancel" : MessageLookupByLibrary.simpleMessage("取消"), @@ -69,16 +88,26 @@ class MessageLookup extends MessageLookupByLibrary { "color" : MessageLookupByLibrary.simpleMessage("颜色"), "confirm" : MessageLookupByLibrary.simpleMessage("确认"), "darkMode" : MessageLookupByLibrary.simpleMessage("夜晚模式"), + "daysAgo" : m2, + "daysCount" : m3, "delete" : MessageLookupByLibrary.simpleMessage("删除"), "developer" : MessageLookupByLibrary.simpleMessage("关于我"), "dismiss" : MessageLookupByLibrary.simpleMessage("忽略"), + "done" : MessageLookupByLibrary.simpleMessage("完成"), "download" : MessageLookupByLibrary.simpleMessage("下载"), "downloaded" : MessageLookupByLibrary.simpleMessage("已下载"), - "editName" : MessageLookupByLibrary.simpleMessage("修改组名"), + "editGroupName" : MessageLookupByLibrary.simpleMessage("修改组名"), "endOfEpisode" : MessageLookupByLibrary.simpleMessage("节目结束"), + "episode" : MessageLookupByLibrary.simpleMessage("节目"), + "featureDiscoveryEditGroup" : MessageLookupByLibrary.simpleMessage("点击修改分组"), + "featureDiscoveryEditGroupDes" : MessageLookupByLibrary.simpleMessage("您可以修改分组名或者删除分组,注意 Home 分组无法修改,也不能被删除。"), "featureDiscoveryEpisode" : MessageLookupByLibrary.simpleMessage("节目界面"), "featureDiscoveryEpisodeDes" : MessageLookupByLibrary.simpleMessage("您可以长按播放节目或者添加节目到播放列表。"), "featureDiscoveryEpisodeTitle" : MessageLookupByLibrary.simpleMessage("您可以长按快速播放节目"), + "featureDiscoveryGroup" : MessageLookupByLibrary.simpleMessage("点击添加分组"), + "featureDiscoveryGroupDes" : MessageLookupByLibrary.simpleMessage("新订阅播客默认分组为 Home,您可以添加新的分组,移动播客到新的分组,每个播客可以被添加到多个分组。"), + "featureDiscoveryGroupPodcast" : MessageLookupByLibrary.simpleMessage("长按可以移动播客位置"), + "featureDiscoveryGroupPodcastDes" : MessageLookupByLibrary.simpleMessage("您可以点击对播客进行设置,或者长按重新排序。"), "featureDiscoveryOMPL" : MessageLookupByLibrary.simpleMessage("点击导入 OMPL"), "featureDiscoveryOMPLDes" : MessageLookupByLibrary.simpleMessage("在这里您可以导入OMPL文件,打开设置页面,或者刷新所有播客。"), "featureDiscoveryPlaylist" : MessageLookupByLibrary.simpleMessage("点击打开播放列表"), @@ -92,23 +121,28 @@ class MessageLookup extends MessageLookupByLibrary { "feedbackGithub" : MessageLookupByLibrary.simpleMessage("提交Issue"), "feedbackPlay" : MessageLookupByLibrary.simpleMessage("Play评价"), "feedbackTelegram" : MessageLookupByLibrary.simpleMessage("加入小组"), - "from" : MessageLookupByLibrary.simpleMessage("自"), + "fonts" : MessageLookupByLibrary.simpleMessage("字体"), + "from" : m4, "goodNight" : MessageLookupByLibrary.simpleMessage("晚安"), + "groupExisted" : MessageLookupByLibrary.simpleMessage("组名已使用"), "groupFilter" : MessageLookupByLibrary.simpleMessage("分组"), - "groups" : MessageLookupByLibrary.simpleMessage("分组"), + "groupRemoveConfirm" : MessageLookupByLibrary.simpleMessage("您确认要移除该分组吗?播客将被移动到 Home 分组。"), + "groups" : m5, "homeGroupsSeeAll" : MessageLookupByLibrary.simpleMessage("查看全部"), "homeMenuPlaylist" : MessageLookupByLibrary.simpleMessage("播放列表"), - "homeSubMenuLikeData" : MessageLookupByLibrary.simpleMessage("添加日期"), "homeSubMenuSortBy" : MessageLookupByLibrary.simpleMessage("排序"), - "homeSubMenuUpdateDate" : MessageLookupByLibrary.simpleMessage("更新日期"), "homeTabMenuFavotite" : MessageLookupByLibrary.simpleMessage("收藏"), "homeTabMenuRecent" : MessageLookupByLibrary.simpleMessage("最近更新"), "homeToprightMenuAbout" : MessageLookupByLibrary.simpleMessage("关于"), "homeToprightMenuImportOMPL" : MessageLookupByLibrary.simpleMessage("导入OMPL"), "homeToprightMenuRefreshAll" : MessageLookupByLibrary.simpleMessage("全部刷新"), "homeToprightMenuSettings" : MessageLookupByLibrary.simpleMessage("设置"), - "hostedOn" : m2, - "hoursCount" : m3, + "hostedOn" : m6, + "hoursAgo" : m7, + "hoursCount" : m8, + "introFourthPage" : MessageLookupByLibrary.simpleMessage("长按节目打开快捷菜单。"), + "introSecondPage" : MessageLookupByLibrary.simpleMessage("您可以通过搜索订阅播客,也可以直接导入OMPL文件。"), + "introThirdPage" : MessageLookupByLibrary.simpleMessage("您可以创建分组,上下滑动切换分组。"), "later" : MessageLookupByLibrary.simpleMessage("稍后"), "lightMode" : MessageLookupByLibrary.simpleMessage("明亮模式"), "like" : MessageLookupByLibrary.simpleMessage("喜欢"), @@ -117,6 +151,7 @@ class MessageLookup extends MessageLookupByLibrary { "listen" : MessageLookupByLibrary.simpleMessage("收听"), "listened" : MessageLookupByLibrary.simpleMessage("已收听"), "loadMore" : MessageLookupByLibrary.simpleMessage("加载更多"), + "mark" : MessageLookupByLibrary.simpleMessage("标记"), "markConfirm" : MessageLookupByLibrary.simpleMessage("确认标记"), "markConfirmContent" : MessageLookupByLibrary.simpleMessage("是否确认标记全部节目为已收听?"), "markListened" : MessageLookupByLibrary.simpleMessage("标记已收听"), @@ -125,24 +160,28 @@ class MessageLookup extends MessageLookupByLibrary { "menuMarkAllListened" : MessageLookupByLibrary.simpleMessage("标记所有已收听"), "menuViewRSS" : MessageLookupByLibrary.simpleMessage("查看 RSS"), "menuVisitSite" : MessageLookupByLibrary.simpleMessage("访问网站"), - "minsCount" : m4, + "minsAgo" : m9, + "minsCount" : m10, "network" : MessageLookupByLibrary.simpleMessage("网络"), "newGroup" : MessageLookupByLibrary.simpleMessage("创建分组"), "newestFirst" : MessageLookupByLibrary.simpleMessage("由新到旧"), + "next" : MessageLookupByLibrary.simpleMessage("下一步"), "noEpisodeDownload" : MessageLookupByLibrary.simpleMessage("暂无下载节目"), "noEpisodeFavorite" : MessageLookupByLibrary.simpleMessage("暂无收藏节目"), "noEpisodeRecent" : MessageLookupByLibrary.simpleMessage("暂无节目"), "noPodcastGroup" : MessageLookupByLibrary.simpleMessage("分组无播客"), - "notificaitonFatch" : m5, - "notificationNetworkError" : m6, - "notificationSubscribe" : m7, - "notificationSubscribeExisted" : m8, - "notificationSuccess" : m9, - "notificationUpdate" : m10, - "notificationUpdateError" : m11, + "notificaitonFatch" : m11, + "notificationNetworkError" : m12, + "notificationSubscribe" : m13, + "notificationSubscribeExisted" : m14, + "notificationSuccess" : m15, + "notificationUpdate" : m16, + "notificationUpdateError" : m17, "oldestFirst" : MessageLookupByLibrary.simpleMessage("由旧到新"), "play" : MessageLookupByLibrary.simpleMessage("播放"), "playing" : MessageLookupByLibrary.simpleMessage("正在播放"), + "plugins" : MessageLookupByLibrary.simpleMessage("插件"), + "podcast" : MessageLookupByLibrary.simpleMessage("播客"), "podcastSubscribed" : MessageLookupByLibrary.simpleMessage("播客已订阅"), "popupMenuDownloadDes" : MessageLookupByLibrary.simpleMessage("下载节目"), "popupMenuLaterDes" : MessageLookupByLibrary.simpleMessage("添加到播放列表"), @@ -150,10 +189,15 @@ class MessageLookup extends MessageLookupByLibrary { "popupMenuMarkDes" : MessageLookupByLibrary.simpleMessage("设置为已收听"), "popupMenuPlayDes" : MessageLookupByLibrary.simpleMessage("播放节目"), "privacyPolicy" : MessageLookupByLibrary.simpleMessage("隐私条款"), + "recoverSubscribe" : MessageLookupByLibrary.simpleMessage("恢复订阅"), "remove" : MessageLookupByLibrary.simpleMessage("移除"), + "removeConfirm" : MessageLookupByLibrary.simpleMessage("取消订阅"), + "removePodcastDes" : MessageLookupByLibrary.simpleMessage("您确认要取消订阅吗?"), + "removedAt" : m18, "schedule" : MessageLookupByLibrary.simpleMessage("定时"), "searchInvalidRss" : MessageLookupByLibrary.simpleMessage("RSS 链接错误"), "searchPodcast" : MessageLookupByLibrary.simpleMessage("搜索播客"), + "secondsAgo" : m19, "settingStorage" : MessageLookupByLibrary.simpleMessage("储存空间"), "settingsAccentColor" : MessageLookupByLibrary.simpleMessage("次要颜色"), "settingsAccentColorDes" : MessageLookupByLibrary.simpleMessage("包括溢出颜色"), @@ -184,7 +228,7 @@ class MessageLookup extends MessageLookupByLibrary { "settingsLayout" : MessageLookupByLibrary.simpleMessage("布局"), "settingsLayoutDes" : MessageLookupByLibrary.simpleMessage("应用布局"), "settingsLibraries" : MessageLookupByLibrary.simpleMessage("开源"), - "settingsLibrariesDes" : MessageLookupByLibrary.simpleMessage("使用开源项目"), + "settingsLibrariesDes" : MessageLookupByLibrary.simpleMessage("开源项目使用"), "settingsManageDownload" : MessageLookupByLibrary.simpleMessage("下载管理"), "settingsManageDownloadDes" : MessageLookupByLibrary.simpleMessage("管理下载节目文件"), "settingsMenuAutoPlay" : MessageLookupByLibrary.simpleMessage("自动播放下一节目"), @@ -196,7 +240,7 @@ class MessageLookup extends MessageLookupByLibrary { "settingsPopupMenu" : MessageLookupByLibrary.simpleMessage("节目弹出菜单"), "settingsPopupMenuDes" : MessageLookupByLibrary.simpleMessage("修改节目弹出菜单"), "settingsPrefrence" : MessageLookupByLibrary.simpleMessage("首选项"), - "settingsRealDark" : MessageLookupByLibrary.simpleMessage("真的黑"), + "settingsRealDark" : MessageLookupByLibrary.simpleMessage("极黑"), "settingsRealDarkDes" : MessageLookupByLibrary.simpleMessage("如果夜不够黑,请开启"), "settingsSTAuto" : MessageLookupByLibrary.simpleMessage("自动睡眠模式"), "settingsSTAutoDes" : MessageLookupByLibrary.simpleMessage("定期开启睡眠模式"), @@ -210,24 +254,33 @@ class MessageLookup extends MessageLookupByLibrary { "settingsUpdateInterval" : MessageLookupByLibrary.simpleMessage("更新频率"), "settingsUpdateIntervalDes" : MessageLookupByLibrary.simpleMessage("默认 24 小时"), "size" : MessageLookupByLibrary.simpleMessage("大小"), + "skipSecondsAtStart" : MessageLookupByLibrary.simpleMessage("开头跳过秒数"), "sleepTimer" : MessageLookupByLibrary.simpleMessage("睡眠模式"), "subscribe" : MessageLookupByLibrary.simpleMessage("订阅"), "systemDefault" : MessageLookupByLibrary.simpleMessage("系统默认"), - "timeLastPlayed" : m12, - "timeLeft" : m13, - "to" : MessageLookupByLibrary.simpleMessage("到"), + "timeLastPlayed" : m20, + "timeLeft" : m21, + "to" : m22, "toastAddPlaylist" : MessageLookupByLibrary.simpleMessage("添加到播放列表"), - "toastDescovery" : MessageLookupByLibrary.simpleMessage("重启应用后可查看"), + "toastDiscovery" : MessageLookupByLibrary.simpleMessage("重启应用后可查看"), "toastFileError" : MessageLookupByLibrary.simpleMessage("文件错误,导入失败"), - "toastFileNotVilid" : MessageLookupByLibrary.simpleMessage("文件错误"), + "toastFileNotValid" : MessageLookupByLibrary.simpleMessage("文件错误"), + "toastHomeGroupNotSupport" : MessageLookupByLibrary.simpleMessage("Home 分组不支持此功能"), + "toastOneGroup" : MessageLookupByLibrary.simpleMessage("请至少选择一个分组"), + "toastPodcastRecovering" : MessageLookupByLibrary.simpleMessage("恢复中,请稍后"), "toastReadFile" : MessageLookupByLibrary.simpleMessage("读取文件成功"), + "toastRecoverFailed" : MessageLookupByLibrary.simpleMessage("恢复订阅失败"), "toastRemovePlaylist" : MessageLookupByLibrary.simpleMessage("从播放列表移除"), + "toastSettingSaved" : MessageLookupByLibrary.simpleMessage("设置已保存"), + "toastTimeEqualEnd" : MessageLookupByLibrary.simpleMessage("与结束时间相同"), + "toastTimeEqualStart" : MessageLookupByLibrary.simpleMessage("与起始时间相同"), "understood" : MessageLookupByLibrary.simpleMessage("了解"), + "undo" : MessageLookupByLibrary.simpleMessage("撤销"), "unlike" : MessageLookupByLibrary.simpleMessage("取消喜欢"), "unliked" : MessageLookupByLibrary.simpleMessage("从收藏移除"), "updateDate" : MessageLookupByLibrary.simpleMessage("更新日期"), - "updateEpisodesCount" : m14, + "updateEpisodesCount" : m23, "updateFailed" : MessageLookupByLibrary.simpleMessage("更新失败"), - "version" : m15 + "version" : m24 }; } diff --git a/lib/generated/l10n.dart b/lib/generated/l10n.dart index 643066f..1fb3ac3 100644 --- a/lib/generated/l10n.dart +++ b/lib/generated/l10n.dart @@ -99,6 +99,16 @@ class S { ); } + /// `Auto download` + String get autoDownload { + return Intl.message( + 'Auto download', + name: 'autoDownload', + desc: '', + args: [], + ); + } + /// `Back` String get back { return Intl.message( @@ -199,6 +209,32 @@ class S { ); } + /// `{count, plural, zero{Today} one{{count} day ago} other{{count} days ago}}` + String daysAgo(num count) { + return Intl.plural( + count, + zero: 'Today', + one: '$count day ago', + other: '$count days ago', + name: 'daysAgo', + desc: '', + args: [count], + ); + } + + /// `{count, plural, zero{Never} one{{count} day} other{{count} days}}` + String daysCount(num count) { + return Intl.plural( + count, + zero: 'Never', + one: '$count day', + other: '$count days', + name: 'daysCount', + desc: '', + args: [count], + ); + } + /// `Delete` String get delete { return Intl.message( @@ -214,7 +250,7 @@ class S { return Intl.message( 'Developer', name: 'developer', - desc: '', + desc: 'Can also translate to About me', args: [], ); } @@ -229,6 +265,16 @@ class S { ); } + /// `Done` + String get done { + return Intl.message( + 'Done', + name: 'done', + desc: '', + args: [], + ); + } + /// `Download` String get download { return Intl.message( @@ -249,11 +295,11 @@ class S { ); } - /// `Edit name` - String get editName { + /// `Edit group name` + String get editGroupName { return Intl.message( - 'Edit name', - name: 'editName', + 'Edit group name', + name: 'editGroupName', desc: '', args: [], ); @@ -269,6 +315,36 @@ class S { ); } + /// `Episode` + String get episode { + return Intl.message( + 'Episode', + name: 'episode', + desc: '', + args: [], + ); + } + + /// `Tap to edit group` + String get featureDiscoveryEditGroup { + return Intl.message( + 'Tap to edit group', + name: 'featureDiscoveryEditGroup', + desc: '', + args: [], + ); + } + + /// `You can change group name or delete group here, but home group can not be edited or deleted` + String get featureDiscoveryEditGroupDes { + return Intl.message( + 'You can change group name or delete group here, but home group can not be edited or deleted', + name: 'featureDiscoveryEditGroupDes', + desc: '', + args: [], + ); + } + /// `Episode view` String get featureDiscoveryEpisode { return Intl.message( @@ -299,6 +375,46 @@ class S { ); } + /// `Tap to add group` + String get featureDiscoveryGroup { + return Intl.message( + 'Tap to add group', + name: 'featureDiscoveryGroup', + desc: '', + args: [], + ); + } + + /// `Default group is home for new podcast, you can create new group and move podcast to new group, podcast can be added to multi-groups.` + String get featureDiscoveryGroupDes { + return Intl.message( + 'Default group is home for new podcast, you can create new group and move podcast to new group, podcast can be added to multi-groups.', + name: 'featureDiscoveryGroupDes', + desc: '', + args: [], + ); + } + + /// `Long tap to reorder podcast` + String get featureDiscoveryGroupPodcast { + return Intl.message( + 'Long tap to reorder podcast', + name: 'featureDiscoveryGroupPodcast', + desc: '', + args: [], + ); + } + + /// `You can tap to see more options, or long tap to reorder podcast in group.` + String get featureDiscoveryGroupPodcastDes { + return Intl.message( + 'You can tap to see more options, or long tap to reorder podcast in group.', + name: 'featureDiscoveryGroupPodcastDes', + desc: '', + args: [], + ); + } + /// `Tap to import OMPL` String get featureDiscoveryOMPL { return Intl.message( @@ -429,16 +545,26 @@ class S { ); } - /// `From` - String get from { + /// `Fonts` + String get fonts { return Intl.message( - 'From', - name: 'from', + 'Fonts', + name: 'fonts', desc: '', args: [], ); } + /// `From {time}` + String from(Object time) { + return Intl.message( + 'From $time', + name: 'from', + desc: '', + args: [time], + ); + } + /// `Good Night` String get goodNight { return Intl.message( @@ -449,6 +575,16 @@ class S { ); } + /// `Group existed` + String get groupExisted { + return Intl.message( + 'Group existed', + name: 'groupExisted', + desc: '', + args: [], + ); + } + /// `Group filter` String get groupFilter { return Intl.message( @@ -459,16 +595,29 @@ class S { ); } - /// `Groups` - String get groups { + /// `Are you sure you want to delete this group? Podcasts will be moved to Home group.` + String get groupRemoveConfirm { return Intl.message( - 'Groups', - name: 'groups', + 'Are you sure you want to delete this group? Podcasts will be moved to Home group.', + name: 'groupRemoveConfirm', desc: '', args: [], ); } + /// `{count, plural, zero{Group} one{Group} other{Groups}}` + String groups(num count) { + return Intl.plural( + count, + zero: 'Group', + one: 'Group', + other: 'Groups', + name: 'groups', + desc: '', + args: [count], + ); + } + /// `See All` String get homeGroupsSeeAll { return Intl.message( @@ -489,16 +638,6 @@ class S { ); } - /// `Like Date` - String get homeSubMenuLikeData { - return Intl.message( - 'Like Date', - name: 'homeSubMenuLikeData', - desc: '', - args: [], - ); - } - /// `Sort by` String get homeSubMenuSortBy { return Intl.message( @@ -509,16 +648,6 @@ class S { ); } - /// `Update Date` - String get homeSubMenuUpdateDate { - return Intl.message( - 'Update Date', - name: 'homeSubMenuUpdateDate', - desc: '', - args: [], - ); - } - /// `Favorite` String get homeTabMenuFavotite { return Intl.message( @@ -589,6 +718,19 @@ class S { ); } + /// `{count, plural, zero{} one{{count} hour ago} other{{count} hours ago}}` + String hoursAgo(num count) { + return Intl.plural( + count, + zero: '', + one: '$count hour ago', + other: '$count hours ago', + name: 'hoursAgo', + desc: '', + args: [count], + ); + } + /// `{count, plural, zero{} one{{count} hour} other{{count} hours}}` String hoursCount(num count) { return Intl.plural( @@ -602,6 +744,36 @@ class S { ); } + /// `Long press on episode card for quick actions.` + String get introFourthPage { + return Intl.message( + 'Long press on episode card for quick actions.', + name: 'introFourthPage', + desc: '', + args: [], + ); + } + + /// `Subscribe podcast via search or import OMPL file.` + String get introSecondPage { + return Intl.message( + 'Subscribe podcast via search or import OMPL file.', + name: 'introSecondPage', + desc: '', + args: [], + ); + } + + /// `You can create new group for podcasts, swipe on podcast list to change group.` + String get introThirdPage { + return Intl.message( + 'You can create new group for podcasts, swipe on podcast list to change group.', + name: 'introThirdPage', + desc: '', + args: [], + ); + } + /// `Later` String get later { return Intl.message( @@ -682,6 +854,16 @@ class S { ); } + /// `Mark` + String get mark { + return Intl.message( + 'Mark', + name: 'mark', + desc: 'The short the best', + args: [], + ); + } + /// `Mark confirm` String get markConfirm { return Intl.message( @@ -762,6 +944,19 @@ class S { ); } + /// `{count, plural, zero{} one{{count} minute ago} other{{count} minutes ago}}` + String minsAgo(num count) { + return Intl.plural( + count, + zero: '', + one: '$count minute ago', + other: '$count minutes ago', + name: 'minsAgo', + desc: '', + args: [count], + ); + } + /// `{count, plural, zero{} one{{count} min} other{{count} mins}}` String minsCount(num count) { return Intl.plural( @@ -805,6 +1000,16 @@ class S { ); } + /// `Next` + String get next { + return Intl.message( + 'Next', + name: 'next', + desc: '', + args: [], + ); + } + /// `No episode downloaded yet` String get noEpisodeDownload { return Intl.message( @@ -945,6 +1150,26 @@ class S { ); } + /// `Plugins` + String get plugins { + return Intl.message( + 'Plugins', + name: 'plugins', + desc: '', + args: [], + ); + } + + /// `Podcast` + String get podcast { + return Intl.message( + 'Podcast', + name: 'podcast', + desc: '', + args: [], + ); + } + /// `Podcast subscribed` String get podcastSubscribed { return Intl.message( @@ -1015,6 +1240,16 @@ class S { ); } + /// `Recover subscribe` + String get recoverSubscribe { + return Intl.message( + 'Recover subscribe', + name: 'recoverSubscribe', + desc: '', + args: [], + ); + } + /// `Remove` String get remove { return Intl.message( @@ -1025,6 +1260,36 @@ class S { ); } + /// `Remove confirm` + String get removeConfirm { + return Intl.message( + 'Remove confirm', + name: 'removeConfirm', + desc: 'unsubscribe podcast dialog', + args: [], + ); + } + + /// `Removed at {date}` + String removedAt(Object date) { + return Intl.message( + 'Removed at $date', + name: 'removedAt', + desc: 'For example :Removed at 2020.10.10', + args: [date], + ); + } + + /// `Are you sure you want to unsubscribe?` + String get removePodcastDes { + return Intl.message( + 'Are you sure you want to unsubscribe?', + name: 'removePodcastDes', + desc: '', + args: [], + ); + } + /// `Schedule` String get schedule { return Intl.message( @@ -1055,6 +1320,19 @@ class S { ); } + /// `{count, plural, zero{} one{{count} second ago} other{{count} seconds ago}}` + String secondsAgo(num count) { + return Intl.plural( + count, + zero: '', + one: '$count second ago', + other: '$count seconds ago', + name: 'secondsAgo', + desc: '', + args: [count], + ); + } + /// `Accent color` String get settingsAccentColor { return Intl.message( @@ -1265,10 +1543,10 @@ class S { ); } - /// `Bugs and feature request` + /// `Bugs and features request` String get settingsFeedbackDes { return Intl.message( - 'Bugs and feature request', + 'Bugs and features request', name: 'settingsFeedbackDes', desc: '', args: [], @@ -1615,6 +1893,16 @@ class S { ); } + /// `Skip seconds at start` + String get skipSecondsAtStart { + return Intl.message( + 'Skip seconds at start', + name: 'skipSecondsAtStart', + desc: '', + args: [], + ); + } + /// `Sleep timer` String get sleepTimer { return Intl.message( @@ -1665,13 +1953,13 @@ class S { ); } - /// `To` - String get to { + /// `To {time}` + String to(Object time) { return Intl.message( - 'To', + 'To $time', name: 'to', desc: '', - args: [], + args: [time], ); } @@ -1686,35 +1974,65 @@ class S { } /// `Discovery feature reopened, pleast restart the app` - String get toastDescovery { + String get toastDiscovery { return Intl.message( 'Discovery feature reopened, pleast restart the app', - name: 'toastDescovery', + name: 'toastDiscovery', desc: '', args: [], ); } - /// `File error, Subscribe failed` + /// `File error, subscribe failed` String get toastFileError { return Intl.message( - 'File error, Subscribe failed', + 'File error, subscribe failed', name: 'toastFileError', desc: '', args: [], ); } - /// `File not vilid` - String get toastFileNotVilid { + /// `File not valid` + String get toastFileNotValid { return Intl.message( - 'File not vilid', - name: 'toastFileNotVilid', + 'File not valid', + name: 'toastFileNotValid', desc: '', args: [], ); } + /// `Home group is not supported` + String get toastHomeGroupNotSupport { + return Intl.message( + 'Home group is not supported', + name: 'toastHomeGroupNotSupport', + desc: '', + args: [], + ); + } + + /// `At least select one group` + String get toastOneGroup { + return Intl.message( + 'At least select one group', + name: 'toastOneGroup', + desc: '', + args: [], + ); + } + + /// `Recovering, wait for a moment` + String get toastPodcastRecovering { + return Intl.message( + 'Recovering, wait for a moment', + name: 'toastPodcastRecovering', + desc: 'Resubscribe removed podcast', + args: [], + ); + } + /// `Read file successfully` String get toastReadFile { return Intl.message( @@ -1725,16 +2043,56 @@ class S { ); } - /// `Removed from playlist` + /// `Podcast recover failed` + String get toastRecoverFailed { + return Intl.message( + 'Podcast recover failed', + name: 'toastRecoverFailed', + desc: 'Resubscribe removed podast', + args: [], + ); + } + + /// `Episode removed from playlist` String get toastRemovePlaylist { return Intl.message( - 'Removed from playlist', + 'Episode removed from playlist', name: 'toastRemovePlaylist', desc: '', args: [], ); } + /// `Setting saved` + String get toastSettingSaved { + return Intl.message( + 'Setting saved', + name: 'toastSettingSaved', + desc: '', + args: [], + ); + } + + /// `Time is equal to end time` + String get toastTimeEqualEnd { + return Intl.message( + 'Time is equal to end time', + name: 'toastTimeEqualEnd', + desc: '', + args: [], + ); + } + + /// `Time is equal to start time` + String get toastTimeEqualStart { + return Intl.message( + 'Time is equal to start time', + name: 'toastTimeEqualStart', + desc: '', + args: [], + ); + } + /// `Understood` String get understood { return Intl.message( @@ -1745,6 +2103,16 @@ class S { ); } + /// `UNDO` + String get undo { + return Intl.message( + 'UNDO', + name: 'undo', + desc: '', + args: [], + ); + } + /// `Unlike` String get unlike { return Intl.message( @@ -1755,10 +2123,10 @@ class S { ); } - /// `Removed from favorite` + /// `Episode removed from favorite` String get unliked { return Intl.message( - 'Removed from favorite', + 'Episode removed from favorite', name: 'unliked', desc: '', args: [], @@ -1775,13 +2143,13 @@ class S { ); } - /// `{count, plural, zero{No Update} one{Updated {count} Episode} other{Updated {count} Episodes}}` + /// `{count, plural, zero{No update} one{Updated {count} episode} other{Updated {count} episodes}}` String updateEpisodesCount(num count) { return Intl.plural( count, - zero: 'No Update', - one: 'Updated $count Episode', - other: 'Updated $count Episodes', + zero: 'No update', + one: 'Updated $count episode', + other: 'Updated $count episodes', name: 'updateEpisodesCount', desc: '', args: [count], diff --git a/lib/home/playlist.dart b/lib/home/playlist.dart index ccd7f06..5706cc9 100644 --- a/lib/home/playlist.dart +++ b/lib/home/playlist.dart @@ -58,6 +58,7 @@ class _PlaylistPageState extends State { @override Widget build(BuildContext context) { + final s = context.s; var audio = Provider.of(context, listen: false); return AnnotatedRegion( value: SystemUiOverlayStyle( @@ -69,7 +70,7 @@ class _PlaylistPageState extends State { child: Scaffold( backgroundColor: Theme.of(context).primaryColor, appBar: AppBar( - title: _topHeight == 60 ? Text('Playlist') : Center(), + title: _topHeight == 60 ? Text(s.homeMenuPlaylist) : Center(), elevation: 0, backgroundColor: Theme.of(context).primaryColor, ), @@ -98,7 +99,9 @@ class _PlaylistPageState extends State { alignment: Alignment.centerLeft, child: RichText( text: TextSpan( - text: _topHeight > 90 ? 'Playlist\n' : '', + text: _topHeight > 90 + ? s.homeMenuPlaylist + '\n' + : '', style: TextStyle( color: Theme.of(context) .textTheme @@ -311,6 +314,7 @@ class _DismissibleContainerState extends State { @override Widget build(BuildContext context) { var audio = Provider.of(context, listen: false); + final s = context.s; Color _c = (Theme.of(context).brightness == Brightness.light) ? widget.episode.primaryColor.colorizedark() : widget.episode.primaryColor.colorizeLight(); @@ -363,17 +367,17 @@ class _DismissibleContainerState extends State { int index = await audio.delFromPlaylist(widget.episode); final episodeRemove = widget.episode; Fluttertoast.showToast( - msg: 'Removed From Playlist', + msg: s.toastRemovePlaylist, gravity: ToastGravity.BOTTOM, ); Scaffold.of(context).showSnackBar(SnackBar( behavior: SnackBarBehavior.floating, backgroundColor: Colors.grey[800], - content: Text('Episode removed', + content: Text(s.toastRemovePlaylist, style: TextStyle(color: Colors.white)), action: SnackBarAction( textColor: context.accentColor, - label: 'Undo', + label: s.undo, onPressed: () { audio.addToPlaylistAt(episodeRemove, index); }), @@ -421,8 +425,7 @@ class _DismissibleContainerState extends State { : Center(), widget.episode.duration != 0 ? _episodeTag( - (widget.episode.duration ~/ 60).toString() + - 'min', + s.minsCount(widget.episode.duration ~/ 60), Colors.cyan[300]) : Center(), widget.episode.enclosureLength != null diff --git a/lib/home/popupmenu.dart b/lib/home/popupmenu.dart index 28d8588..b4e75db 100644 --- a/lib/home/popupmenu.dart +++ b/lib/home/popupmenu.dart @@ -38,8 +38,9 @@ class PopupMenu extends StatefulWidget { } class _PopupMenuState extends State { - Future _getRefreshDate() async { + Future _getRefreshDate(BuildContext context) async { int refreshDate; + final s = context.s; KeyValueStorage refreshstorage = KeyValueStorage('refreshdate'); int i = await refreshstorage.getInt(); if (i == 0) { @@ -50,17 +51,15 @@ class _PopupMenuState extends State { refreshDate = i; } DateTime date = DateTime.fromMillisecondsSinceEpoch(refreshDate); - var diffrence = DateTime.now().difference(date); - if (diffrence.inSeconds < 60) { - return '${diffrence.inSeconds} seconds ago'; - } else if (diffrence.inMinutes < 10) { - return '${diffrence.inMinutes} minutes ago'; - } else if (diffrence.inHours < 1) { - return 'an hour ago'; - } else if (diffrence.inHours <= 24) { - return '${diffrence.inHours} hours ago'; - } else if (diffrence.inDays < 7) { - return '${diffrence.inDays} days ago'; + var difference = DateTime.now().difference(date); + if (difference.inSeconds < 60) { + return s.secondsAgo(difference.inSeconds); + } else if (difference.inMinutes < 60) { + return s.minsAgo(difference.inMinutes); + } else if (difference.inHours < 24) { + return s.hoursAgo(difference.inHours); + } else if (difference.inDays < 7) { + return s.daysAgo(difference.inDays); } else { return DateFormat.yMMMd() .format(DateTime.fromMillisecondsSinceEpoch(refreshDate)); @@ -84,7 +83,7 @@ class _PopupMenuState extends State { .toList(); if (total.length == 0) { Fluttertoast.showToast( - msg: 'File not valid', + msg: s.toastFileNotValid, gravity: ToastGravity.BOTTOM, ); } else { @@ -104,7 +103,7 @@ class _PopupMenuState extends State { } catch (e) { print(e); Fluttertoast.showToast( - msg: 'File error, Subscribe failed', + msg: s.toastFileError, gravity: ToastGravity.TOP, ); //await Future.delayed(Duration(seconds: 5)); @@ -121,7 +120,7 @@ class _PopupMenuState extends State { print('File Path' + filePath); //importOmpl.importState = ImportState.start; Fluttertoast.showToast( - msg: 'Read file successfully', + msg: s.toastReadFile, gravity: ToastGravity.TOP, ); _saveOmpl(filePath); @@ -134,7 +133,7 @@ class _PopupMenuState extends State { shape: RoundedRectangleBorder( borderRadius: BorderRadius.all(Radius.circular(10))), elevation: 1, - tooltip: 'Menu', + tooltip: s.menu, itemBuilder: (context) => [ PopupMenuItem( value: 1, @@ -154,7 +153,7 @@ class _PopupMenuState extends State { s.homeToprightMenuRefreshAll, ), FutureBuilder( - future: _getRefreshDate(), + future: _getRefreshDate(context), builder: (_, snapshot) { if (snapshot.hasData) return Text( diff --git a/lib/intro_slider/app_intro.dart b/lib/intro_slider/app_intro.dart index 2d1c9c5..59b61ed 100644 --- a/lib/intro_slider/app_intro.dart +++ b/lib/intro_slider/app_intro.dart @@ -4,6 +4,7 @@ import 'package:provider/provider.dart'; import '../state/settingstate.dart'; import '../home/home.dart'; import '../util/pageroute.dart'; +import '../util/context_extension.dart'; import 'fourthpage.dart'; import 'secondpage.dart'; import 'thirdpage.dart'; @@ -200,7 +201,7 @@ class _SlideIntroState extends State { height: 40, width: 80, child: Center( - child: Text('Next', + child: Text(context.s.next, style: TextStyle( color: Colors.black))))) : InkWell( @@ -221,7 +222,7 @@ class _SlideIntroState extends State { height: 40, width: 80, child: Center( - child: Text('Done', + child: Text(context.s.done, style: TextStyle( color: Colors.black))))), ), diff --git a/lib/intro_slider/fourthpage.dart b/lib/intro_slider/fourthpage.dart index 36d4929..29bbafd 100644 --- a/lib/intro_slider/fourthpage.dart +++ b/lib/intro_slider/fourthpage.dart @@ -23,13 +23,13 @@ class _FourthPageState extends State { height: 200, alignment: Alignment.center, padding: EdgeInsets.all(40), - child: Text('Long press on episode card for quick actions.', style: TextStyle( - fontSize: 30, - color: Colors.white - ),), + child: Text( + context.s.introFourthPage, + style: TextStyle(fontSize: 30, color: Colors.white), + ), ), Container( - height: context.width*3/4, + height: context.width * 3 / 4, // color: Colors.red, child: FlareActor( 'assets/longtap.flr', diff --git a/lib/intro_slider/secondpage.dart b/lib/intro_slider/secondpage.dart index 72ab1a7..1c26aea 100644 --- a/lib/intro_slider/secondpage.dart +++ b/lib/intro_slider/secondpage.dart @@ -25,7 +25,7 @@ class _SecondPageState extends State { padding: EdgeInsets.only(top: 20, bottom: 20, left: 40, right: 40), child: Text( - 'Subscribe podcast via search or import OMPL file.', + context.s.introSecondPage, style: TextStyle(fontSize: 30, color: Colors.white), ), ), diff --git a/lib/intro_slider/thirdpage.dart b/lib/intro_slider/thirdpage.dart index 0e31710..cb183db 100644 --- a/lib/intro_slider/thirdpage.dart +++ b/lib/intro_slider/thirdpage.dart @@ -24,7 +24,7 @@ class _ThirdPageState extends State { alignment: Alignment.center, padding: EdgeInsets.all(40), child: Text( - 'Swipe on podcast list to change group.', + context.s.introThirdPage, style: TextStyle(fontSize: 30, color: Colors.white), ), ), diff --git a/lib/l10n/intl_en.arb b/lib/l10n/intl_en.arb index 1d6e73c..45ae2f8 100644 --- a/lib/l10n/intl_en.arb +++ b/lib/l10n/intl_en.arb @@ -20,6 +20,8 @@ }, "all": "All", "@all": {}, + "autoDownload": "Auto download", + "@autoDownload": {}, "back": "Back", "@back": {}, "buffering": "Buffering", @@ -40,26 +42,48 @@ "@confirm": {}, "darkMode": "Dark mode", "@darkMode": {}, + "daysAgo": "{count, plural, zero{Today} one{{count} day ago} other{{count} days ago}}", + "@daysAgo": {}, + "daysCount": "{count, plural, zero{Never} one{{count} day} other{{count} days}}", + "@daysCount": {}, "delete": "Delete", "@delete": {}, "developer": "Developer", - "@developer": {}, + "@developer": { + "description": "Can also translate to About me" + }, "dismiss": "Dismiss", "@dismiss": {}, + "done": "Done", + "@done": {}, "download": "Download", "@download": {}, "downloaded": "Downloaded", "@downloaded": {}, - "editName": "Edit name", - "@editName": {}, + "editGroupName": "Edit group name", + "@editGroupName": {}, "endOfEpisode": "End of Episode", "@endOfEpisode": {}, + "episode": "Episode", + "@episode": {}, + "featureDiscoveryEditGroup": "Tap to edit group", + "@featureDiscoveryEditGroup": {}, + "featureDiscoveryEditGroupDes": "You can change group name or delete group here, but home group can not be edited or deleted", + "@featureDiscoveryEditGroupDes": {}, "featureDiscoveryEpisode": "Episode view", "@featureDiscoveryEpisode": {}, "featureDiscoveryEpisodeDes": "You can long tap to play episode or add episode to playlist.", "@featureDiscoveryEpisodeDes": {}, "featureDiscoveryEpisodeTitle": "Long tap to play episode instantly", "@featureDiscoveryEpisodeTitle": {}, + "featureDiscoveryGroup": "Tap to add group", + "@featureDiscoveryGroup": {}, + "featureDiscoveryGroupDes": "Default group is home for new podcast, you can create new group and move podcast to new group, podcast can be added to multi-groups.", + "@featureDiscoveryGroupDes": {}, + "featureDiscoveryGroupPodcast": "Long tap to reorder podcast", + "@featureDiscoveryGroupPodcast": {}, + "featureDiscoveryGroupPodcastDes": "You can tap to see more options, or long tap to reorder podcast in group.", + "@featureDiscoveryGroupPodcastDes": {}, "featureDiscoveryOMPL": "Tap to import OMPL", "@featureDiscoveryOMPL": {}, "featureDiscoveryOMPLDes": "You can import OMPL file, open setting or refresh all podcast at once here.", @@ -86,24 +110,30 @@ "@feedbackPlay": {}, "feedbackTelegram": "Join group", "@feedbackTelegram": {}, - "from": "From", - "@from": {}, + "fonts": "Fonts", + "@fonts": {}, + "from": "From {time}", + "@from": { + "placeholders": { + "time": {} + } + }, "goodNight": "Good Night", "@goodNight": {}, + "groupExisted": "Group existed", + "@groupExisted": {}, "groupFilter": "Group filter", "@groupFilter": {}, - "groups": "Groups", + "groupRemoveConfirm": "Are you sure you want to delete this group? Podcasts will be moved to Home group.", + "@groupRemoveConfirm": {}, + "groups": "{count, plural, zero{Group} one{Group} other{Groups}}", "@groups": {}, "homeGroupsSeeAll": "See All", "@homeGroupsSeeAll": {}, "homeMenuPlaylist": "Playlist", "@homeMenuPlaylist": {}, - "homeSubMenuLikeData": "Like Date", - "@homeSubMenuLikeData": {}, "homeSubMenuSortBy": "Sort by", "@homeSubMenuSortBy": {}, - "homeSubMenuUpdateDate": "Update Date", - "@homeSubMenuUpdateDate": {}, "homeTabMenuFavotite": "Favorite", "@homeTabMenuFavotite": {}, "homeTabMenuRecent": "Recent", @@ -122,8 +152,16 @@ "host": {} } }, + "hoursAgo": "{count, plural, zero{} one{{count} hour ago} other{{count} hours ago}}", + "@hoursAgo": {}, "hoursCount": "{count, plural, zero{} one{{count} hour} other{{count} hours}}", "@hoursCount": {}, + "introFourthPage": "Long press on episode card for quick actions.", + "@introFourthPage": {}, + "introSecondPage": "Subscribe podcast via search or import OMPL file.", + "@introSecondPage": {}, + "introThirdPage": "You can create new group for podcasts, swipe on podcast list to change group.", + "@introThirdPage": {}, "later": "Later", "@later": {}, "lightMode": "Light mode", @@ -140,6 +178,10 @@ "@listened": {}, "loadMore": "Load more", "@loadMore": {}, + "mark": "Mark", + "@mark": { + "description": "The short the best" + }, "markConfirm": "Mark confirm", "@markConfirm": {}, "markConfirmContent": "Confirm mark all episodes listened?", @@ -156,6 +198,8 @@ "@menuViewRSS": {}, "menuVisitSite": "Visit Site", "@menuVisitSite": {}, + "minsAgo": "{count, plural, zero{} one{{count} minute ago} other{{count} minutes ago}}", + "@minsAgo": {}, "minsCount": "{count, plural, zero{} one{{count} min} other{{count} mins}}", "@minsCount": {}, "network": "Network", @@ -164,6 +208,8 @@ "@newestFirst": {}, "newGroup": "Create new group", "@newGroup": {}, + "next": "Next", + "@next": {}, "noEpisodeDownload": "No episode downloaded yet", "@noEpisodeDownload": {}, "noEpisodeFavorite": "No episode collected yet", @@ -216,6 +262,10 @@ "@play": {}, "playing": "Playing", "@playing": {}, + "plugins": "Plugins", + "@plugins": {}, + "podcast": "Podcast", + "@podcast": {}, "podcastSubscribed": "Podcast subscribed", "@podcastSubscribed": {}, "popupMenuDownloadDes": "Download episode", @@ -230,14 +280,31 @@ "@popupMenuPlayDes": {}, "privacyPolicy": "Privacy Policy", "@privacyPolicy": {}, + "recoverSubscribe": "Recover subscribe", + "@recoverSubscribe": {}, "remove": "Remove", "@remove": {}, + "removeConfirm": "Remove confirm", + "@removeConfirm": { + "description": "unsubscribe podcast dialog" + }, + "removedAt": "Removed at {date}", + "@removedAt": { + "description": "For example :Removed at 2020.10.10", + "placeholders": { + "date": {} + } + }, + "removePodcastDes": "Are you sure you want to unsubscribe?", + "@removePodcastDes": {}, "schedule": "Schedule", "@schedule": {}, "searchInvalidRss": "Invalid RSS link", "@searchInvalidRss": {}, "searchPodcast": "Search podcast", "@searchPodcast": {}, + "secondsAgo": "{count, plural, zero{} one{{count} second ago} other{{count} seconds ago}}", + "@secondsAgo": {}, "settingsAccentColor": "Accent color", "@settingsAccentColor": {}, "settingsAccentColorDes": "Include the ovelay color", @@ -280,7 +347,7 @@ "@settingsExportDes": {}, "settingsFeedback": "Feedback", "@settingsFeedback": {}, - "settingsFeedbackDes": "Bugs and feature request", + "settingsFeedbackDes": "Bugs and features request", "@settingsFeedbackDes": {}, "settingsHistory": "History", "@settingsHistory": {}, @@ -350,6 +417,8 @@ "@settingsUpdateIntervalDes": {}, "size": "Size", "@size": {}, + "skipSecondsAtStart": "Skip seconds at start", + "@skipSecondsAtStart": {}, "sleepTimer": "Sleep timer", "@sleepTimer": {}, "subscribe": "Subscribe", @@ -368,29 +437,53 @@ "time": {} } }, - "to": "To", - "@to": {}, + "to": "To {time}", + "@to": { + "placeholders": { + "time": {} + } + }, "toastAddPlaylist": "Added to playlist", "@toastAddPlaylist": {}, - "toastDescovery": "Discovery feature reopened, pleast restart the app", - "@toastDescovery": {}, - "toastFileError": "File error, Subscribe failed", + "toastDiscovery": "Discovery feature reopened, pleast restart the app", + "@toastDiscovery": {}, + "toastFileError": "File error, subscribe failed", "@toastFileError": {}, - "toastFileNotVilid": "File not vilid", - "@toastFileNotVilid": {}, + "toastFileNotValid": "File not valid", + "@toastFileNotValid": {}, + "toastHomeGroupNotSupport": "Home group is not supported", + "@toastHomeGroupNotSupport": {}, + "toastOneGroup": "At least select one group", + "@toastOneGroup": {}, + "toastPodcastRecovering": "Recovering, wait for a moment", + "@toastPodcastRecovering": { + "description": "Resubscribe removed podcast" + }, "toastReadFile": "Read file successfully", "@toastReadFile": {}, - "toastRemovePlaylist": "Removed from playlist", + "toastRecoverFailed": "Podcast recover failed", + "@toastRecoverFailed": { + "description": "Resubscribe removed podast" + }, + "toastRemovePlaylist": "Episode removed from playlist", "@toastRemovePlaylist": {}, + "toastSettingSaved": "Setting saved", + "@toastSettingSaved": {}, + "toastTimeEqualEnd": "Time is equal to end time", + "@toastTimeEqualEnd": {}, + "toastTimeEqualStart": "Time is equal to start time", + "@toastTimeEqualStart": {}, "understood": "Understood", "@understood": {}, + "undo": "UNDO", + "@undo": {}, "unlike": "Unlike", "@unlike": {}, - "unliked": "Removed from favorite", + "unliked": "Episode removed from favorite", "@unliked": {}, "updateDate": "Update date", "@updateDate": {}, - "updateEpisodesCount": "{count, plural, zero{No Update} one{Updated {count} Episode} other{Updated {count} Episodes}}", + "updateEpisodesCount": "{count, plural, zero{No update} one{Updated {count} episode} other{Updated {count} episodes}}", "@updateEpisodesCount": {}, "updateFailed": "Update failed, network error", "@updateFailed": {}, diff --git a/lib/l10n/intl_zh_Hans.arb b/lib/l10n/intl_zh_Hans.arb index 0f0cdb1..c1a7406 100644 --- a/lib/l10n/intl_zh_Hans.arb +++ b/lib/l10n/intl_zh_Hans.arb @@ -20,6 +20,8 @@ }, "all": "全部", "@all": {}, + "autoDownload": "自动下载", + "@autoDownload": {}, "back": "返回", "@back": {}, "buffering": "缓冲", @@ -40,26 +42,48 @@ "@confirm": {}, "darkMode": "夜晚模式", "@darkMode": {}, + "daysAgo": "{count, plural, zero{今天} other{{count}天前}}", + "@daysAgo": {}, + "daysCount": "{count, plural, zero{从不} other{{count}天}}", + "@daysCount": {}, "delete": "删除", "@delete": {}, "developer": "关于我", - "@developer": {}, + "@developer": { + "description": "Can also translate to About me" + }, "dismiss": "忽略", "@dismiss": {}, + "done": "完成", + "@done": {}, "download": "下载", "@download": {}, "downloaded": "已下载", "@downloaded": {}, - "editName": "修改组名", - "@editName": {}, + "editGroupName": "修改组名", + "@editGroupName": {}, "endOfEpisode": "节目结束", "@endOfEpisode": {}, + "episode": "节目", + "@episode": {}, + "featureDiscoveryEditGroup": "点击修改分组", + "@featureDiscoveryEditGroup": {}, + "featureDiscoveryEditGroupDes": "您可以修改分组名或者删除分组,注意 Home 分组无法修改,也不能被删除。", + "@featureDiscoveryEditGroupDes": {}, "featureDiscoveryEpisode": "节目界面", "@featureDiscoveryEpisode": {}, "featureDiscoveryEpisodeDes": "您可以长按播放节目或者添加节目到播放列表。", "@featureDiscoveryEpisodeDes": {}, "featureDiscoveryEpisodeTitle": "您可以长按快速播放节目", "@featureDiscoveryEpisodeTitle": {}, + "featureDiscoveryGroup": "点击添加分组", + "@featureDiscoveryGroup": {}, + "featureDiscoveryGroupDes": "新订阅播客默认分组为 Home,您可以添加新的分组,移动播客到新的分组,每个播客可以被添加到多个分组。", + "@featureDiscoveryGroupDes": {}, + "featureDiscoveryGroupPodcast": "长按可以移动播客位置", + "@featureDiscoveryGroupPodcast": {}, + "featureDiscoveryGroupPodcastDes": "您可以点击对播客进行设置,或者长按重新排序。", + "@featureDiscoveryGroupPodcastDes": {}, "featureDiscoveryOMPL": "点击导入 OMPL", "@featureDiscoveryOMPL": {}, "featureDiscoveryOMPLDes": "在这里您可以导入OMPL文件,打开设置页面,或者刷新所有播客。", @@ -86,24 +110,30 @@ "@feedbackPlay": {}, "feedbackTelegram": "加入小组", "@feedbackTelegram": {}, - "from": "自", - "@from": {}, + "fonts": "字体", + "@fonts": {}, + "from": "自{time}", + "@from": { + "placeholders": { + "time": {} + } + }, "goodNight": "晚安", "@goodNight": {}, + "groupExisted": "组名已使用", + "@groupExisted": {}, "groupFilter": "分组", "@groupFilter": {}, - "groups": "分组", + "groupRemoveConfirm": "您确认要移除该分组吗?播客将被移动到 Home 分组。", + "@groupRemoveConfirm": {}, + "groups": "{count, plural, zero{分组} other{分组}}", "@groups": {}, "homeGroupsSeeAll": "查看全部", "@homeGroupsSeeAll": {}, "homeMenuPlaylist": "播放列表", "@homeMenuPlaylist": {}, - "homeSubMenuLikeData": "添加日期", - "@homeSubMenuLikeData": {}, "homeSubMenuSortBy": "排序", "@homeSubMenuSortBy": {}, - "homeSubMenuUpdateDate": "更新日期", - "@homeSubMenuUpdateDate": {}, "homeTabMenuFavotite": "收藏", "@homeTabMenuFavotite": {}, "homeTabMenuRecent": "最近更新", @@ -122,8 +152,16 @@ "host": {} } }, + "hoursAgo": "{count, plural, zero{} other{{count}小时前}}", + "@hoursAgo": {}, "hoursCount": "{count, plural, zero{} other{{count} 小时}}", "@hoursCount": {}, + "introFourthPage": "长按节目打开快捷菜单。", + "@introFourthPage": {}, + "introSecondPage": "您可以通过搜索订阅播客,也可以直接导入OMPL文件。", + "@introSecondPage": {}, + "introThirdPage": "您可以创建分组,上下滑动切换分组。", + "@introThirdPage": {}, "later": "稍后", "@later": {}, "lightMode": "明亮模式", @@ -140,6 +178,10 @@ "@listened": {}, "loadMore": "加载更多", "@loadMore": {}, + "mark": "标记", + "@mark": { + "description": "The short the best" + }, "markConfirm": "确认标记", "@markConfirm": {}, "markConfirmContent": "是否确认标记全部节目为已收听?", @@ -156,6 +198,8 @@ "@menuViewRSS": {}, "menuVisitSite": "访问网站", "@menuVisitSite": {}, + "minsAgo": "{count, plural, zero{} other{{count}分钟前}}", + "@minsAgo": {}, "minsCount": "{count, plural, zero{} other{{count}分钟}}", "@minsCount": {}, "network": "网络", @@ -164,6 +208,8 @@ "@newestFirst": {}, "newGroup": "创建分组", "@newGroup": {}, + "next": "下一步", + "@next": {}, "noEpisodeDownload": "暂无下载节目", "@noEpisodeDownload": {}, "noEpisodeFavorite": "暂无收藏节目", @@ -216,6 +262,10 @@ "@play": {}, "playing": "正在播放", "@playing": {}, + "plugins": "插件", + "@plugins": {}, + "podcast": "播客", + "@podcast": {}, "podcastSubscribed": "播客已订阅", "@podcastSubscribed": {}, "popupMenuDownloadDes": "下载节目", @@ -230,14 +280,31 @@ "@popupMenuPlayDes": {}, "privacyPolicy": "隐私条款", "@privacyPolicy": {}, + "recoverSubscribe": "恢复订阅", + "@recoverSubscribe": {}, "remove": "移除", "@remove": {}, + "removeConfirm": "取消订阅", + "@removeConfirm": { + "description": "unsubscribe podcast dialog" + }, + "removedAt": "{date}移除", + "@removedAt": { + "description": "For example :Removed at 2020.10.10", + "placeholders": { + "date": {} + } + }, + "removePodcastDes": "您确认要取消订阅吗?", + "@removePodcastDes": {}, "schedule": "定时", "@schedule": {}, "searchInvalidRss": "RSS 链接错误", "@searchInvalidRss": {}, "searchPodcast": "搜索播客", "@searchPodcast": {}, + "secondsAgo": "{count, plural, zero{} other{{count}秒前}}", + "@secondsAgo": {}, "settingsAccentColor": "次要颜色", "@settingsAccentColor": {}, "settingsAccentColorDes": "包括溢出颜色", @@ -296,7 +363,7 @@ "@settingsLayoutDes": {}, "settingsLibraries": "开源", "@settingsLibraries": {}, - "settingsLibrariesDes": "使用开源项目", + "settingsLibrariesDes": "开源项目使用", "@settingsLibrariesDes": {}, "settingsManageDownload": "下载管理", "@settingsManageDownload": {}, @@ -320,7 +387,7 @@ "@settingsPopupMenuDes": {}, "settingsPrefrence": "首选项", "@settingsPrefrence": {}, - "settingsRealDark": "真的黑", + "settingsRealDark": "极黑", "@settingsRealDark": {}, "settingsRealDarkDes": "如果夜不够黑,请开启", "@settingsRealDarkDes": {}, @@ -350,6 +417,8 @@ "@settingsUpdateIntervalDes": {}, "size": "大小", "@size": {}, + "skipSecondsAtStart": "开头跳过秒数", + "@skipSecondsAtStart": {}, "sleepTimer": "睡眠模式", "@sleepTimer": {}, "subscribe": "订阅", @@ -368,22 +437,46 @@ "time": {} } }, - "to": "到", - "@to": {}, + "to": "到{time}", + "@to": { + "placeholders": { + "time": {} + } + }, "toastAddPlaylist": "添加到播放列表", "@toastAddPlaylist": {}, - "toastDescovery": "重启应用后可查看", - "@toastDescovery": {}, + "toastDiscovery": "重启应用后可查看", + "@toastDiscovery": {}, "toastFileError": "文件错误,导入失败", "@toastFileError": {}, - "toastFileNotVilid": "文件错误", - "@toastFileNotVilid": {}, + "toastFileNotValid": "文件错误", + "@toastFileNotValid": {}, + "toastHomeGroupNotSupport": "Home 分组不支持此功能", + "@toastHomeGroupNotSupport": {}, + "toastOneGroup": "请至少选择一个分组", + "@toastOneGroup": {}, + "toastPodcastRecovering": "恢复中,请稍后", + "@toastPodcastRecovering": { + "description": "Resubscribe removed podcast" + }, "toastReadFile": "读取文件成功", "@toastReadFile": {}, + "toastRecoverFailed": "恢复订阅失败", + "@toastRecoverFailed": { + "description": "Resubscribe removed podast" + }, "toastRemovePlaylist": "从播放列表移除", "@toastRemovePlaylist": {}, + "toastSettingSaved": "设置已保存", + "@toastSettingSaved": {}, + "toastTimeEqualEnd": "与结束时间相同", + "@toastTimeEqualEnd": {}, + "toastTimeEqualStart": "与起始时间相同", + "@toastTimeEqualStart": {}, "understood": "了解", "@understood": {}, + "undo": "撤销", + "@undo": {}, "unlike": "取消喜欢", "@unlike": {}, "unliked": "从收藏移除", diff --git a/lib/podcasts/podcastgroup.dart b/lib/podcasts/podcastgroup.dart index 5fe03dd..6fd1923 100644 --- a/lib/podcasts/podcastgroup.dart +++ b/lib/podcasts/podcastgroup.dart @@ -173,7 +173,7 @@ class _PodcastCardState extends State Color _c = (Theme.of(context).brightness == Brightness.light) ? widget.podcastLocal.primaryColor.colorizedark() : widget.podcastLocal.primaryColor.colorizeLight(); - + final s = context.s; double _width = MediaQuery.of(context).size.width; var groupList = context.watch(); _belongGroups = groupList.getPodcastGroup(widget.podcastLocal.id); @@ -326,12 +326,12 @@ class _PodcastCardState extends State _selectedGroups, ); Fluttertoast.showToast( - msg: 'Setting Saved', + msg: s.toastSettingSaved, gravity: ToastGravity.BOTTOM, ); } else Fluttertoast.showToast( - msg: 'At least select one group', + msg: s.toastOneGroup, gravity: ToastGravity.BOTTOM, ); }, @@ -353,7 +353,7 @@ class _PodcastCardState extends State _addGroup = true; }); }, - tooltip: 'Group'), + tooltip: s.groups(0)), FutureBuilder( future: _getAutoDownload(widget.podcastLocal.id), @@ -382,7 +382,7 @@ class _PodcastCardState extends State ? context.accentColor : null), ), - tooltip: 'Auto Download', + tooltip: s.autoDownload, onTap: () async { await _setAutoDownload( widget.podcastLocal.id, @@ -409,7 +409,7 @@ class _PodcastCardState extends State onTap: () { generalDialog( context, - title: Text('Skip seconds at start', + title: Text(s.skipSecondsAtStart, maxLines: 2), content: DurationPicker( duration: Duration( @@ -424,7 +424,7 @@ class _PodcastCardState extends State _seconds = 0; }, child: Text( - 'CANCEL', + s.cancel, style: TextStyle( color: Colors.grey[600]), ), @@ -437,7 +437,7 @@ class _PodcastCardState extends State _seconds); }, child: Text( - 'CONFIRM', + s.confirm, style: TextStyle( color: context.accentColor), @@ -453,19 +453,18 @@ class _PodcastCardState extends State color: Colors.red, size: _value == 0 ? 1 : 20 * _value, ), - tooltip: 'Remove', + tooltip: s.remove, onTap: () { generalDialog( context, - title: Text('Remove confirm'), - content: Text( - 'Are you sure you want to unsubscribe?'), + title: Text(s.removeConfirm), + content: Text(s.removePodcastDes), actions: [ FlatButton( onPressed: () => Navigator.of(context).pop(), child: Text( - 'CANCEL', + s.cancel, style: TextStyle( color: Colors.grey[600]), ), @@ -477,7 +476,7 @@ class _PodcastCardState extends State Navigator.of(context).pop(); }, child: Text( - 'CONFIRM', + s.confirm, style: TextStyle(color: Colors.red), ), ) @@ -523,6 +522,7 @@ class _RenameGroupState extends State { Widget build(BuildContext context) { var groupList = Provider.of(context, listen: false); List list = groupList.groups.map((e) => e.name).toList(); + final s = context.s; return AnnotatedRegion( value: SystemUiOverlayStyle( statusBarIconBrightness: Brightness.light, @@ -542,7 +542,7 @@ class _RenameGroupState extends State { FlatButton( onPressed: () => Navigator.of(context).pop(), child: Text( - 'CANCEL', + s.cancel, style: TextStyle(color: Colors.grey[600]), ), ), @@ -559,12 +559,12 @@ class _RenameGroupState extends State { Navigator.of(context).pop(); } }, - child: Text('DONE', + child: Text(s.confirm, style: TextStyle(color: Theme.of(context).accentColor)), ) ], - title: SizedBox( - width: context.width - 160, child: Text('Edit group name')), + title: + SizedBox(width: context.width - 160, child: Text(s.editGroupName)), content: Column( mainAxisSize: MainAxisSize.min, children: [ @@ -595,7 +595,7 @@ class _RenameGroupState extends State { alignment: Alignment.centerLeft, child: (_error == 1) ? Text( - 'Group existed', + s.groupExisted, style: TextStyle(color: Colors.red[400]), ) : Center(), diff --git a/lib/podcasts/podcastmanage.dart b/lib/podcasts/podcastmanage.dart index 5611f6d..20370b8 100644 --- a/lib/podcasts/podcastmanage.dart +++ b/lib/podcasts/podcastmanage.dart @@ -88,6 +88,7 @@ class _PodcastManageState extends State } Widget _saveButton(BuildContext context) { + final s = context.s; return Consumer( builder: (_, groupList, __) { if (groupList.orderChanged.contains(groupList.groups[_index])) { @@ -100,7 +101,7 @@ class _PodcastManageState extends State tapTarget: Icon(Icons.menu), title: Padding( padding: const EdgeInsets.only(top: 20.0), - child: const Text('Tap to edit group'), + child: Text(s.featureDiscoveryEditGroup), ), overflowMode: OverflowMode.clipContent, backgroundColor: Colors.cyan[600], @@ -108,12 +109,11 @@ class _PodcastManageState extends State description: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - const Text('You can change group name or delete group here,' + - 'but home group can not be edited or deleted.'), + Text(s.featureDiscoveryEditGroupDes), FlatButton( color: Colors.cyan[500], padding: const EdgeInsets.all(0), - child: Text('Understood', + child: Text(s.understood, style: Theme.of(context) .textTheme .button @@ -124,7 +124,7 @@ class _PodcastManageState extends State FlatButton( color: Colors.cyan[500], padding: const EdgeInsets.all(0), - child: Text('Dismiss', + child: Text(s.dismiss, style: Theme.of(context) .textTheme .button @@ -176,7 +176,7 @@ class _PodcastManageState extends State groupList .drlFromOrderChanged(groupList.groups[_index].name); Fluttertoast.showToast( - msg: 'Setting Saved', + msg: context.s.toastSettingSaved, gravity: ToastGravity.BOTTOM, ); _controller.reverse(); @@ -191,6 +191,7 @@ class _PodcastManageState extends State } Widget build(BuildContext context) { + final s = context.s; return AnnotatedRegion( value: SystemUiOverlayStyle( statusBarIconBrightness: Theme.of(context).accentColorBrightness, @@ -202,25 +203,23 @@ class _PodcastManageState extends State child: Scaffold( appBar: AppBar( centerTitle: true, - title: Text('Groups'), + title: Text(context.s.groups(2)), actions: [ DescribedFeatureOverlay( featureId: addGroupFeature, tapTarget: Icon(Icons.add), - title: const Text('Tap to add group'), + title: Text(s.featureDiscoveryGroup), overflowMode: OverflowMode.clipContent, backgroundColor: Colors.cyan[600], onDismiss: () => Future.value(true), description: Column( crossAxisAlignment: CrossAxisAlignment.end, children: [ - const Text( - 'Default group is home for new podcast, you can create new group and move ' + - 'podcast to new group, podcast can be added to muilti-groups.'), + Text(s.featureDiscoveryGroupDes), FlatButton( color: Colors.cyan[500], padding: const EdgeInsets.all(0), - child: Text('Understood', + child: Text(context.s.understood, style: Theme.of(context) .textTheme .button @@ -231,7 +230,7 @@ class _PodcastManageState extends State FlatButton( color: Colors.cyan[500], padding: const EdgeInsets.all(0), - child: Text('Dismiss', + child: Text(context.s.dismiss, style: Theme.of(context) .textTheme .button @@ -293,8 +292,8 @@ class _PodcastManageState extends State pageBuilder: (context, index) => DescribedFeatureOverlay( featureId: configurePodcast, - tapTarget: Text('Podcast'), - title: const Text('Long tap to reorder podcast'), + tapTarget: Text(s.podcast), + title: Text(s.featureDiscoveryGroupPodcast), overflowMode: OverflowMode.clipContent, onDismiss: () => Future.value(true), enablePulsingAnimation: false, @@ -302,12 +301,11 @@ class _PodcastManageState extends State description: Column( crossAxisAlignment: CrossAxisAlignment.end, children: [ - const Text('You can tap to see more options,' + - ' or long tap to reorder podcast in group.'), + Text(s.featureDiscoveryGroupPodcastDes), FlatButton( color: Colors.cyan[500], padding: const EdgeInsets.all(0), - child: Text('Understood', + child: Text(context.s.understood, style: Theme.of(context) .textTheme .button @@ -319,7 +317,7 @@ class _PodcastManageState extends State FlatButton( color: Colors.cyan[500], padding: const EdgeInsets.all(0), - child: Text('Dismiss', + child: Text(context.s.dismiss, style: Theme.of(context) .textTheme .button @@ -377,8 +375,8 @@ class _PodcastManageState extends State setState(() => _showSetting = false); _index == 0 ? Fluttertoast.showToast( - msg: - 'Home group is not supported', + msg: s + .toastHomeGroupNotSupport, gravity: ToastGravity.BOTTOM, ) : showGeneralDialog( @@ -420,7 +418,7 @@ class _PodcastManageState extends State padding: EdgeInsets.symmetric( horizontal: 5.0), ), - Text('Edit Name', + Text(context.s.editGroupName, style: TextStyle( color: Colors.white)), ], @@ -439,23 +437,22 @@ class _PodcastManageState extends State setState(() => _showSetting = false); _index == 0 ? Fluttertoast.showToast( - msg: - 'Home group is not supported', + msg: s + .toastHomeGroupNotSupport, gravity: ToastGravity.BOTTOM, ) : generalDialog( context, - title: Text('Delete confirm'), + title: Text(s.removeConfirm), content: Text( - 'Are you sure you want to delete this group?' + - 'Podcasts will be moved to Home group.'), + s.groupRemoveConfirm), actions: [ FlatButton( onPressed: () => Navigator.of(context) .pop(), child: Text( - 'CANCEL', + context.s.cancel, style: TextStyle( color: Colors .grey[600]), @@ -482,7 +479,7 @@ class _PodcastManageState extends State .pop(); }, child: Text( - 'CONFIRM', + context.s.confirm, style: TextStyle( color: Colors.red), ), @@ -509,7 +506,7 @@ class _PodcastManageState extends State padding: EdgeInsets.symmetric( horizontal: 5.0), ), - Text('Delete', + Text(s.remove, style: TextStyle( color: Colors.red)), ], @@ -534,11 +531,12 @@ class _PodcastManageState extends State class OrderMenu extends StatelessWidget { @override Widget build(BuildContext context) { + final s = context.s; return PopupMenuButton( shape: RoundedRectangleBorder( borderRadius: BorderRadius.all(Radius.circular(10))), elevation: 2, - tooltip: 'Menu', + tooltip: s.menu, itemBuilder: (context) => [ PopupMenuItem( value: 1, @@ -548,7 +546,7 @@ class OrderMenu extends StatelessWidget { Padding( padding: EdgeInsets.symmetric(horizontal: 5.0), ), - Text('All Podcasts'), + Text(s.menuAllPodcasts), ], ), ), @@ -587,6 +585,7 @@ class _AddGroupState extends State { @override Widget build(BuildContext context) { + final s = context.s; var groupList = Provider.of(context); List list = groupList.groups.map((e) => e.name).toList(); return AnnotatedRegion( @@ -608,7 +607,7 @@ class _AddGroupState extends State { FlatButton( onPressed: () => Navigator.of(context).pop(), child: Text( - 'CANCEL', + s.cancel, style: TextStyle(color: Colors.grey[600]), ), ), @@ -621,19 +620,18 @@ class _AddGroupState extends State { Navigator.of(context).pop(); } }, - child: Text('DONE', + child: Text(s.confirm, style: TextStyle(color: Theme.of(context).accentColor)), ) ], - title: SizedBox( - width: context.width - 160, child: Text('Create new group')), + title: SizedBox(width: context.width - 160, child: Text(s.newGroup)), content: Column( mainAxisSize: MainAxisSize.min, children: [ TextField( decoration: InputDecoration( contentPadding: EdgeInsets.symmetric(horizontal: 10), - hintText: 'New Group', + hintText: s.newGroup, hintStyle: TextStyle(fontSize: 18), filled: true, focusedBorder: UnderlineInputBorder( @@ -657,7 +655,7 @@ class _AddGroupState extends State { alignment: Alignment.centerLeft, child: (_error == 1) ? Text( - 'Group existed', + s.groupExisted, style: TextStyle(color: Colors.red[400]), ) : Center(), diff --git a/lib/settings/downloads_manage.dart b/lib/settings/downloads_manage.dart index 6ad40d8..63b34e0 100644 --- a/lib/settings/downloads_manage.dart +++ b/lib/settings/downloads_manage.dart @@ -183,7 +183,7 @@ class _DownloadsManageState extends State { borderRadius: BorderRadius.all( Radius.circular(10))), elevation: 1, - tooltip: 'Sort By', + tooltip: s.homeSubMenuSortBy, child: Container( height: 40, padding: @@ -211,15 +211,15 @@ class _DownloadsManageState extends State { itemBuilder: (context) => [ PopupMenuItem( value: 0, - child: Text('Newest first'), + child: Text(s.newestFirst), ), PopupMenuItem( value: 1, - child: Text('Oldest first'), + child: Text(s.oldestFirst), ), PopupMenuItem( value: 2, - child: Text('Size'), + child: Text(s.size), ), ], onSelected: (value) { @@ -246,7 +246,7 @@ class _DownloadsManageState extends State { padding: EdgeInsets.symmetric(horizontal: 5), ), - Text('Listened Only'), + Text(s.listened), Transform.scale( scale: 0.8, child: Checkbox( diff --git a/lib/settings/history.dart b/lib/settings/history.dart index 7c1ff65..56a4dad 100644 --- a/lib/settings/history.dart +++ b/lib/settings/history.dart @@ -67,7 +67,7 @@ class _PlayedHistoryState extends State Future recoverSub(BuildContext context, String url) async { Fluttertoast.showToast( - msg: 'Recovering, wait for seconds', + msg: context.s.toastPodcastRecovering, gravity: ToastGravity.BOTTOM, ); var subscribeWorker = context.read(); @@ -90,7 +90,7 @@ class _PlayedHistoryState extends State } on DioError catch (e) { print(e); Fluttertoast.showToast( - msg: 'Podcast recover failed', + msg: context.s.toastRecoverFailed, gravity: ToastGravity.BOTTOM, ); } @@ -273,7 +273,7 @@ class _PlayedHistoryState extends State snapshot.data[index] .seekValue == 1 - ? 'Mark' + ? s.mark : _stringForSeconds( snapshot.data[index] .seconds), @@ -330,18 +330,15 @@ class _PlayedHistoryState extends State ], ), subtitle: _status - ? Text(DateTime.now() - .difference(snapshot - .data[index].subDate) - .inDays - .toString() + - ' day ago') + ? Text(s.daysAgo(DateTime.now() + .difference( + snapshot.data[index].subDate) + .inDays)) : Text( - 'Removed at ' + - DateFormat.yMd() - .add_jm() - .format(snapshot - .data[index].delDate), + s.removedAt(DateFormat.yMd() + .add_jm() + .format(snapshot + .data[index].delDate)), style: TextStyle(color: Colors.red), ), // Text(snapshot.data[index].delDate @@ -355,7 +352,7 @@ class _PlayedHistoryState extends State ? Material( color: Colors.transparent, child: IconButton( - tooltip: 'Recover subscribe', + tooltip: s.recoverSubscribe, icon: Icon(LineIcons .trash_restore_alt_solid), onPressed: () => recoverSub( diff --git a/lib/settings/libries.dart b/lib/settings/libries.dart index 85fe6ac..78bcaed 100644 --- a/lib/settings/libries.dart +++ b/lib/settings/libries.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:url_launcher/url_launcher.dart'; +import '../util/context_extension.dart'; import 'licenses.dart'; class Libries extends StatelessWidget { @@ -23,7 +24,7 @@ class Libries extends StatelessWidget { ), child: Scaffold( appBar: AppBar( - title: Text('Libraies'), + title: Text(context.s.settingsLibraries), elevation: 0, backgroundColor: Theme.of(context).primaryColor, ), @@ -63,7 +64,7 @@ class Libries extends StatelessWidget { height: 30.0, padding: EdgeInsets.symmetric(horizontal: 70), alignment: Alignment.centerLeft, - child: Text('Fonts', + child: Text(context.s.fonts, style: Theme.of(context) .textTheme .bodyText1 @@ -85,7 +86,7 @@ class Libries extends StatelessWidget { height: 30.0, padding: EdgeInsets.symmetric(horizontal: 70), alignment: Alignment.centerLeft, - child: Text('Plugins', + child: Text(context.s.plugins, style: Theme.of(context) .textTheme .bodyText1 diff --git a/lib/settings/play_setting.dart b/lib/settings/play_setting.dart index e6320c1..b075b27 100644 --- a/lib/settings/play_setting.dart +++ b/lib/settings/play_setting.dart @@ -40,7 +40,7 @@ class PlaySetting extends StatelessWidget { ? context.accentColor : context.primaryColorDark, padding: const EdgeInsets.all(8.0), - child: Text('End of Episode', + child: Text(context.s.endOfEpisode, style: TextStyle( color: data.item1 == 0 ? Colors.white : null)), ), @@ -56,7 +56,7 @@ class PlaySetting extends StatelessWidget { ? context.accentColor : context.primaryColorDark, padding: const EdgeInsets.all(8.0), - child: Text(data.item2.toString() + 'mins', + child: Text(context.s.minsCount(data.item2), style: TextStyle( color: data.item1 == 1 ? Colors.white : null)), ), @@ -70,6 +70,7 @@ class PlaySetting extends StatelessWidget { Widget _scheduleWidget(BuildContext context) { var settings = Provider.of(context, listen: false); + final s = context.s; return Selector>( selector: (_, settings) => Tuple2(settings.autoSleepTimerStart, settings.autoSleepTimerEnd), @@ -105,7 +106,7 @@ class PlaySetting extends StatelessWidget { FlatButton( onPressed: () => Navigator.of(context).pop(), child: Text( - 'CANCEL', + s.cancel, style: TextStyle(color: Colors.grey[600]), ), ), @@ -116,13 +117,13 @@ class PlaySetting extends StatelessWidget { Navigator.of(context).pop(); } else { Fluttertoast.showToast( - msg: 'Time is equal to end time', + msg: s.toastTimeEqualEnd, gravity: ToastGravity.BOTTOM, ); } }, child: Text( - 'CONFIRM', + s.confirm, style: TextStyle(color: context.accentColor), ), ) @@ -134,7 +135,7 @@ class PlaySetting extends StatelessWidget { child: Container( color: context.primaryColorDark, padding: const EdgeInsets.all(8.0), - child: Text('From ' + stringForMins(data.item1)), + child: Text(s.from(stringForMins(data.item1))), ), ), ), @@ -164,7 +165,7 @@ class PlaySetting extends StatelessWidget { FlatButton( onPressed: () => Navigator.of(context).pop(), child: Text( - 'CANCEL', + s.cancel, style: TextStyle(color: Colors.grey[600]), ), ), @@ -175,13 +176,13 @@ class PlaySetting extends StatelessWidget { Navigator.of(context).pop(); } else { Fluttertoast.showToast( - msg: 'Time is equal to start time', + msg: s.toastTimeEqualStart, gravity: ToastGravity.BOTTOM, ); } }, child: Text( - 'CONFIRM', + s.confirm, style: TextStyle(color: context.accentColor), ), ) @@ -193,7 +194,7 @@ class PlaySetting extends StatelessWidget { child: Container( padding: const EdgeInsets.all(8.0), color: Colors.black54, - child: Text('To ' + stringForMins(data.item2), + child: Text(s.to(stringForMins(data.item2)), style: TextStyle(color: Colors.white)), ), ), @@ -255,7 +256,7 @@ class PlaySetting extends StatelessWidget { onTap: () => settings.setAutoPlay = !data, contentPadding: EdgeInsets.only(left: 80.0, right: 20), - title: Text('Auto play next'), + title: Text(s.settingsMenuAutoPlay), subtitle: Text(s.settingsAutoPlayDes), trailing: Transform.scale( scale: 0.9, @@ -291,7 +292,7 @@ class PlaySetting extends StatelessWidget { trailing: Selector( selector: (_, settings) => settings.defaultSleepTimer, builder: (_, data, __) => DropdownButton( - hint: Text(data.toString() + 'mins'), + hint: Text(s.minsCount(data)), underline: Center(), elevation: 1, isDense: true, @@ -301,8 +302,7 @@ class PlaySetting extends StatelessWidget { items: minsToSelect.map>((e) { return DropdownMenuItem( - value: e, - child: Text(e.toString() + ' mins')); + value: e, child: Text(s.minsCount(e))); }).toList()), ), ), diff --git a/lib/settings/popup_menu.dart b/lib/settings/popup_menu.dart index b7925b9..f46dacf 100644 --- a/lib/settings/popup_menu.dart +++ b/lib/settings/popup_menu.dart @@ -76,6 +76,7 @@ class _PopupMenuSettingState extends State { @override Widget build(BuildContext context) { + final s = context.s; return AnnotatedRegion( value: SystemUiOverlayStyle( statusBarIconBrightness: Theme.of(context).accentColorBrightness, @@ -109,7 +110,7 @@ class _PopupMenuSettingState extends State { height: 30.0, padding: EdgeInsets.symmetric(horizontal: 80), alignment: Alignment.centerLeft, - child: Text('Episode popup menu', + child: Text(s.settingsPopupMenu, style: Theme.of(context) .textTheme .bodyText1 @@ -132,8 +133,8 @@ class _PopupMenuSettingState extends State { LineIcons.play_circle_solid, color: context.accentColor, ), - text: 'Play', - description: 'Play the episode'); + text: s.play, + description: s.popupMenuPlayDes); break; case 1: return _popupMenuItem(menu, e, @@ -141,15 +142,15 @@ class _PopupMenuSettingState extends State { LineIcons.clock_solid, color: Colors.cyan, ), - text: 'Later', - description: 'Add episode to playlist'); + text: s.later, + description: s.popupMenuLaterDes); break; case 2: return _popupMenuItem(menu, e, icon: Icon(LineIcons.heart, color: Colors.red, size: 21), - text: 'Like', - description: 'Add episode to favorite'); + text: s.like, + description: s.popupMenuLikeDes); break; case 3: return _popupMenuItem(menu, e, @@ -160,8 +161,8 @@ class _PopupMenuSettingState extends State { painter: ListenedAllPainter(Colors.blue, stroke: 1.5)), ), - text: 'Mark Listened', - description: 'Mark episode as listened'); + text: s.markListened, + description: s.popupMenuMarkDes); break; case 4: return _popupMenuItem(menu, e, @@ -169,8 +170,8 @@ class _PopupMenuSettingState extends State { LineIcons.download_solid, color: Colors.green, ), - text: 'Download', - description: 'Download episode'); + text: s.download, + description: s.popupMenuDownloadDes); break; default: return Text('Text'); diff --git a/lib/settings/settting.dart b/lib/settings/settting.dart index aedda0c..1c61c61 100644 --- a/lib/settings/settting.dart +++ b/lib/settings/settting.dart @@ -332,8 +332,7 @@ class _SettingsState extends State podcastFeature }); Fluttertoast.showToast( - msg: - 'Discovery Feature Reopened, pleast restart the app', + msg: s.toastDiscovery, gravity: ToastGravity.BOTTOM, ); }, diff --git a/lib/settings/storage.dart b/lib/settings/storage.dart index a5a35aa..8e36bc6 100644 --- a/lib/settings/storage.dart +++ b/lib/settings/storage.dart @@ -213,22 +213,21 @@ class _StorageSettingState extends State subtitle: Text(s.settingsAutoDeleteDes), trailing: DropdownButton( hint: snapshot.data == -1 - ? Text('Never') - : Text(snapshot.data.toString() + 'days'), + ? Text(s.daysCount(0)) + : Text(s.daysCount(snapshot.data)), underline: Center(), elevation: 1, value: snapshot.data, onChanged: (value) async { await _setAutoDeleteDays(value); }, - //TODO remove 1 before release items: [-1, 5, 10, 15, 30] .map>((e) { return DropdownMenuItem( value: e, child: e == -1 - ? Text('Never') - : Text(e.toString() + ' days')); + ? Text(s.daysCount(0)) + : Text(s.daysCount(e))); }).toList()), ); }, diff --git a/lib/settings/syncing.dart b/lib/settings/syncing.dart index 3e92339..dfba577 100644 --- a/lib/settings/syncing.dart +++ b/lib/settings/syncing.dart @@ -92,9 +92,7 @@ class SyncingSetting extends StatelessWidget { title: Text(s.settingsUpdateInterval), subtitle: Text(s.settingsUpdateIntervalDes), trailing: DropdownButton( - hint: data.item2 == 1 - ? Text(data.item2.toString() + ' hour') - : Text(data.item2.toString() + ' hours'), + hint: Text(s.hoursCount(data.item2)), underline: Center(), elevation: 1, value: data.item2, @@ -107,10 +105,7 @@ class SyncingSetting extends StatelessWidget { items: [1, 2, 4, 8, 24, 48] .map>((e) { return DropdownMenuItem( - value: e, - child: e == 1 - ? Text(e.toString() + ' hour') - : Text(e.toString() + ' hours')); + value: e, child: Text(s.hoursCount(e))); }).toList()), ), Divider(height: 2), diff --git a/lib/util/episodegrid.dart b/lib/util/episodegrid.dart index 69be382..19433b6 100644 --- a/lib/util/episodegrid.dart +++ b/lib/util/episodegrid.dart @@ -53,10 +53,10 @@ class EpisodeGrid extends StatelessWidget { Future>> _initData( EpisodeBrief episode) async { + List menuList = await _getEpisodeMenu(); int listened = await _isListened(episode); bool liked = await _isLiked(episode); bool downloaded = await _isDownloaded(episode); - List menuList = await _getEpisodeMenu(); return Tuple4(listened, liked, downloaded, menuList); }