1811 lines
37 KiB
Dart
1811 lines
37 KiB
Dart
// ignore: unused_import
|
|
import 'package:intl/intl.dart' as intl;
|
|
import 'app_localizations.dart';
|
|
|
|
// ignore_for_file: type=lint
|
|
|
|
/// The translations for English (`en`).
|
|
class AppLocalizationsEn extends AppLocalizations {
|
|
AppLocalizationsEn([String locale = 'en']) : super(locale);
|
|
|
|
@override
|
|
String get appName => 'FruitShorts';
|
|
|
|
@override
|
|
String get demo => 'DEMO';
|
|
|
|
@override
|
|
String get homeHeadline => 'Watch now';
|
|
|
|
@override
|
|
String get homeSubtitle => 'Free short drama preview.';
|
|
|
|
@override
|
|
String get mediaNotice => 'User-provided local demo video · Free preview';
|
|
|
|
@override
|
|
String get featuredDemo => 'FEATURED · TECHNICAL DEMO';
|
|
|
|
@override
|
|
String get demoTitle => 'The Signal';
|
|
|
|
@override
|
|
String get demoSynopsis =>
|
|
'A short local video preview. More episodes can be added when media is available.';
|
|
|
|
@override
|
|
String get homeTab => 'Home';
|
|
|
|
@override
|
|
String get theaterTab => 'Theater';
|
|
|
|
@override
|
|
String get createTab => 'Create';
|
|
|
|
@override
|
|
String get openQuickMenu => 'Open quick menu';
|
|
|
|
@override
|
|
String get quickAccess => 'Quick access';
|
|
|
|
@override
|
|
String get currentSeries => 'Current series';
|
|
|
|
@override
|
|
String get discoverTab => 'Theater';
|
|
|
|
@override
|
|
String get searchDiscover => 'Search dramas, actors, genres...';
|
|
|
|
@override
|
|
String get searchCancel => 'Cancel';
|
|
|
|
@override
|
|
String get featured => 'Featured';
|
|
|
|
@override
|
|
String get recommended => 'Recommended';
|
|
|
|
@override
|
|
String get fruitShortsBrand => 'FruitShorts';
|
|
|
|
@override
|
|
String get authLandingSubtitle =>
|
|
'Sign in to sync progress, favorites and coins';
|
|
|
|
@override
|
|
String get comingSoon => 'Coming soon';
|
|
|
|
@override
|
|
String get authLegal =>
|
|
'By continuing, you agree to the Terms of Service and Privacy Policy.';
|
|
|
|
@override
|
|
String get authLegalLead => 'By continuing, you agree to the';
|
|
|
|
@override
|
|
String get authTerms => 'Terms of Service';
|
|
|
|
@override
|
|
String get authLegalJoin => 'and';
|
|
|
|
@override
|
|
String get authPrivacy => 'Privacy Policy';
|
|
|
|
@override
|
|
String get legalTerms => 'Terms of Service';
|
|
|
|
@override
|
|
String get legalPrivacy => 'Privacy Policy';
|
|
|
|
@override
|
|
String get legalOpenFailed => 'Can\'t open this page right now';
|
|
|
|
@override
|
|
String get authContinueGoogle => 'Continue with Google';
|
|
|
|
@override
|
|
String get authPhoneSignIn => 'Phone sign in';
|
|
|
|
@override
|
|
String get authEmailSignIn => 'Email sign in';
|
|
|
|
@override
|
|
String get suspense => 'Suspense';
|
|
|
|
@override
|
|
String get romance => 'Romance';
|
|
|
|
@override
|
|
String get actionGenre => 'Action';
|
|
|
|
@override
|
|
String get filter => 'Filter';
|
|
|
|
@override
|
|
String get filterGroupCategory => 'All genres';
|
|
|
|
@override
|
|
String get filterGroupTheme => 'All themes';
|
|
|
|
@override
|
|
String get filterGroupLanguage => 'All languages';
|
|
|
|
@override
|
|
String get filterGroupSort => 'All recommendations';
|
|
|
|
@override
|
|
String get sortNewest => 'Newest';
|
|
|
|
@override
|
|
String get sortHottest => 'Hottest';
|
|
|
|
@override
|
|
String get expandFilters => 'Expand';
|
|
|
|
@override
|
|
String get collapseFilters => 'Collapse';
|
|
|
|
@override
|
|
String get filterEmpty => 'No dramas match these filters';
|
|
|
|
@override
|
|
String get hotBadge => 'Hit';
|
|
|
|
@override
|
|
String get filterAll => 'All';
|
|
|
|
@override
|
|
String seriesMeta(String episodes, String viewers) {
|
|
return 'Series · $episodes eps | $viewers watching';
|
|
}
|
|
|
|
@override
|
|
String watchFullSeries(String episodes) {
|
|
return 'Watch full series · $episodes eps';
|
|
}
|
|
|
|
@override
|
|
String get feedTabAnime => 'Anime';
|
|
|
|
@override
|
|
String get feedTabReal => 'Live-action';
|
|
|
|
@override
|
|
String get feedTabForYou => 'For you';
|
|
|
|
@override
|
|
String get authorNoteLabel => 'Author note';
|
|
|
|
@override
|
|
String get reserve => 'Reserve';
|
|
|
|
@override
|
|
String heatLabel(String count) {
|
|
return '$count heat';
|
|
}
|
|
|
|
@override
|
|
String get topCharts => 'Hot Ranking';
|
|
|
|
@override
|
|
String get newReleases => 'New Releases';
|
|
|
|
@override
|
|
String get newDramas => 'New';
|
|
|
|
@override
|
|
String get trendingMicroDramas => 'Trending Micro-Dramas';
|
|
|
|
@override
|
|
String get seeAll => 'See All';
|
|
|
|
@override
|
|
String get trendingSubtitle => 'Most binge-watched this week';
|
|
|
|
@override
|
|
String get verticalMiniSeries => 'VERTICAL MINI-SERIES';
|
|
|
|
@override
|
|
String get followSeries => 'Follow Series';
|
|
|
|
@override
|
|
String get seasonOneVerticalCinema => 'Season 1 • Vertical Cinema';
|
|
|
|
@override
|
|
String get seasonOneOriginalRelease => 'Season 1 • Original Release';
|
|
|
|
@override
|
|
String get startWatching => 'Start Watching';
|
|
|
|
@override
|
|
String get showLess => 'Less';
|
|
|
|
@override
|
|
String get expandSynopsis => 'More';
|
|
|
|
@override
|
|
String get views => 'views';
|
|
|
|
@override
|
|
String episodeOfTotal(int current, int total) {
|
|
return 'Episode $current / $total';
|
|
}
|
|
|
|
@override
|
|
String get clearScreen => 'Clear screen';
|
|
|
|
@override
|
|
String get exitClearScreen => 'Exit clear screen';
|
|
|
|
@override
|
|
String get playbackSpeed => 'Playback speed';
|
|
|
|
@override
|
|
String speedBoosting(String speed) {
|
|
return '${speed}x speed';
|
|
}
|
|
|
|
@override
|
|
String minutesAgo(int count) {
|
|
return '$count min ago';
|
|
}
|
|
|
|
@override
|
|
String get justNow => 'Just now';
|
|
|
|
@override
|
|
String hoursAgo(int count) {
|
|
return '$count hours ago';
|
|
}
|
|
|
|
@override
|
|
String get artworkOnly => 'Artwork';
|
|
|
|
@override
|
|
String get artworkOnlyNotice =>
|
|
'This is a visual catalog item. No video is available yet.';
|
|
|
|
@override
|
|
String get videoPending => 'Video pending';
|
|
|
|
@override
|
|
String get watchNow => 'Watch free';
|
|
|
|
@override
|
|
String get noSearchResults => 'No matching dramas.';
|
|
|
|
@override
|
|
String get emptyHint => 'New content will appear here.';
|
|
|
|
@override
|
|
String get demoCatalogNotice =>
|
|
'Three demo dramas share the same local video.';
|
|
|
|
@override
|
|
String get myTab => 'My';
|
|
|
|
@override
|
|
String get localDemoProfile => 'Local demo profile';
|
|
|
|
@override
|
|
String get continueWatching => 'Continue Watching';
|
|
|
|
@override
|
|
String episodeRemaining(int episode, int minutes) {
|
|
return 'Episode $episode · $minutes min left';
|
|
}
|
|
|
|
@override
|
|
String viewCountLabel(int count) {
|
|
return '$count views';
|
|
}
|
|
|
|
@override
|
|
String allEpisodesBadge(int count) {
|
|
return 'All $count';
|
|
}
|
|
|
|
@override
|
|
String lockedEpisodeCount(int count) {
|
|
return '$count locked';
|
|
}
|
|
|
|
@override
|
|
String watchedPercent(int percent) {
|
|
return 'Watched $percent%';
|
|
}
|
|
|
|
@override
|
|
String get resume => 'Resume';
|
|
|
|
@override
|
|
String get history => 'History';
|
|
|
|
@override
|
|
String get likedTab => 'Liked';
|
|
|
|
@override
|
|
String get all => 'All';
|
|
|
|
@override
|
|
String get inProgress => 'In Progress';
|
|
|
|
@override
|
|
String get completed => 'Completed';
|
|
|
|
@override
|
|
String get noSavedShows => 'No shows here yet.';
|
|
|
|
@override
|
|
String get preferences => 'Preferences';
|
|
|
|
@override
|
|
String get followingTab => 'Following';
|
|
|
|
@override
|
|
String get animatedTab => 'Animated';
|
|
|
|
@override
|
|
String get recommendedTab => 'Recommend';
|
|
|
|
@override
|
|
String get noCategoryDramas => 'No dramas in this category yet.';
|
|
|
|
@override
|
|
String get allDramas => 'All Dramas';
|
|
|
|
@override
|
|
String get allLanguages => 'All languages';
|
|
|
|
@override
|
|
String get bahasaMelayu => 'Malay';
|
|
|
|
@override
|
|
String get createSubtitle => 'Stories become short dramas';
|
|
|
|
@override
|
|
String get createAiTitle => 'AI production';
|
|
|
|
@override
|
|
String get createAiSubtitle => 'Start from a story or an idea';
|
|
|
|
@override
|
|
String get createUploadTitle => 'Upload and publish';
|
|
|
|
@override
|
|
String get createUploadSubtitle => 'Publish a finished short drama';
|
|
|
|
@override
|
|
String get createMottoPrimary => 'Your imagination';
|
|
|
|
@override
|
|
String get createMottoSecondary => 'Can be seen by more people';
|
|
|
|
@override
|
|
String get newReleasesTitle => 'New premieres';
|
|
|
|
@override
|
|
String newReleasesCount(int count) {
|
|
return '$count new this week';
|
|
}
|
|
|
|
@override
|
|
String get premiereToday => 'Today\'s premiere';
|
|
|
|
@override
|
|
String get newBadge => 'NEW';
|
|
|
|
@override
|
|
String get reserveTitle => 'Schedule booking';
|
|
|
|
@override
|
|
String get goNewReleases => 'Browse new releases';
|
|
|
|
@override
|
|
String get reserveStepsTitle => 'What you get after reserving';
|
|
|
|
@override
|
|
String get reserveStep1 => 'One-tap reserve';
|
|
|
|
@override
|
|
String get reserveStep2 => 'Premiere reminder';
|
|
|
|
@override
|
|
String get reserveStep3 => 'Watch right away';
|
|
|
|
@override
|
|
String get reserveWeek => 'This week';
|
|
|
|
@override
|
|
String get weekdayMon => 'Mon';
|
|
|
|
@override
|
|
String get weekdayTue => 'Tue';
|
|
|
|
@override
|
|
String get weekdayWed => 'Wed';
|
|
|
|
@override
|
|
String get weekdayThu => 'Thu';
|
|
|
|
@override
|
|
String get weekdayFri => 'Fri';
|
|
|
|
@override
|
|
String get weekdaySat => 'Sat';
|
|
|
|
@override
|
|
String get weekdaySun => 'Sun';
|
|
|
|
@override
|
|
String get trendingTab => 'Trending';
|
|
|
|
@override
|
|
String get liveActionTab => 'Live Action';
|
|
|
|
@override
|
|
String get search => 'Search';
|
|
|
|
@override
|
|
String get free => 'Free';
|
|
|
|
@override
|
|
String get mute => 'Mute';
|
|
|
|
@override
|
|
String get unmute => 'Unmute';
|
|
|
|
@override
|
|
String get like => 'Like';
|
|
|
|
@override
|
|
String get save => 'Save';
|
|
|
|
@override
|
|
String get comments => 'Comments';
|
|
|
|
@override
|
|
String get share => 'Share';
|
|
|
|
@override
|
|
String get noComments => 'No comments yet.';
|
|
|
|
@override
|
|
String get writeComment => 'Write a comment';
|
|
|
|
@override
|
|
String get commentLoginHint => 'Sign in to comment';
|
|
|
|
@override
|
|
String get postComment => 'Post';
|
|
|
|
@override
|
|
String get commentPostSuccess => 'Comment posted';
|
|
|
|
@override
|
|
String get loadMore => 'Load more';
|
|
|
|
@override
|
|
String get noMoreItems => 'No more';
|
|
|
|
@override
|
|
String get commentsLoadFailed => 'Comments could not be loaded.';
|
|
|
|
@override
|
|
String get commentPostFailed => 'Could not post your comment.';
|
|
|
|
@override
|
|
String get delete => 'Delete';
|
|
|
|
@override
|
|
String get deleteComment => 'Delete comment';
|
|
|
|
@override
|
|
String get deleteCommentTitle => 'Delete this comment?';
|
|
|
|
@override
|
|
String get deleteCommentMessage =>
|
|
'This removes your comment from the conversation.';
|
|
|
|
@override
|
|
String get commentDeleteFailed => 'Could not delete this comment.';
|
|
|
|
@override
|
|
String get underReview => 'Under review';
|
|
|
|
@override
|
|
String get reply => 'Reply';
|
|
|
|
@override
|
|
String replyingTo(Object name) {
|
|
return 'Replying to $name';
|
|
}
|
|
|
|
@override
|
|
String get cancelReply => 'Cancel reply';
|
|
|
|
@override
|
|
String viewReplies(int count) {
|
|
return 'View replies ($count)';
|
|
}
|
|
|
|
@override
|
|
String get hideReplies => 'Hide replies';
|
|
|
|
@override
|
|
String get anonymousUser => 'Viewer';
|
|
|
|
@override
|
|
String get more => 'More';
|
|
|
|
@override
|
|
String get likeFailed => 'Could not update like. Please retry.';
|
|
|
|
@override
|
|
String get reportComment => 'Report comment';
|
|
|
|
@override
|
|
String get reportDrama => 'Report drama';
|
|
|
|
@override
|
|
String get reportReason => 'Reason';
|
|
|
|
@override
|
|
String get reportReasonSpam => 'Spam';
|
|
|
|
@override
|
|
String get reportReasonAbuse => 'Harassment';
|
|
|
|
@override
|
|
String get reportReasonPorn => 'Sexual content';
|
|
|
|
@override
|
|
String get reportReasonAd => 'Advertising';
|
|
|
|
@override
|
|
String get reportReasonOther => 'Other';
|
|
|
|
@override
|
|
String get reportDescriptionHint => 'Describe the issue (optional)';
|
|
|
|
@override
|
|
String get reportSubmit => 'Submit report';
|
|
|
|
@override
|
|
String get reportSubmitted => 'Report submitted. Thank you.';
|
|
|
|
@override
|
|
String get reportFailed => 'Could not submit report.';
|
|
|
|
@override
|
|
String get shareFailed => 'Could not open the share sheet.';
|
|
|
|
@override
|
|
String get nowPlaying => 'Playing now';
|
|
|
|
@override
|
|
String get pictureInPicture => 'Picture in picture';
|
|
|
|
@override
|
|
String get pipUnavailable =>
|
|
'Picture in picture is unavailable on this device';
|
|
|
|
@override
|
|
String get originalTag => 'Original';
|
|
|
|
@override
|
|
String get dramaTag => 'Short drama';
|
|
|
|
@override
|
|
String episodeLabel(int number) {
|
|
return 'Episode $number';
|
|
}
|
|
|
|
@override
|
|
String get exploreSeries => 'Explore series';
|
|
|
|
@override
|
|
String episodeCount(int count) {
|
|
return '$count EPISODES';
|
|
}
|
|
|
|
@override
|
|
String technicalDemoCount(int count) {
|
|
return 'FREE PREVIEW · $count EPISODES';
|
|
}
|
|
|
|
@override
|
|
String get episodes => 'Episodes';
|
|
|
|
@override
|
|
String get synopsisTitle => 'Synopsis';
|
|
|
|
@override
|
|
String get watchEpisodeOne => 'Watch episode 1';
|
|
|
|
@override
|
|
String continueEpisode(int number) {
|
|
return 'Continue episode $number';
|
|
}
|
|
|
|
@override
|
|
String get freeTestMedia => 'Same demo clip · free';
|
|
|
|
@override
|
|
String get lockedStoreUnavailable => 'Locked · store unavailable';
|
|
|
|
@override
|
|
String get freeTestClip => 'Free test clip';
|
|
|
|
@override
|
|
String get locked => 'Locked';
|
|
|
|
@override
|
|
String get freeSamplesNotice => 'Two free samples · store setup pending';
|
|
|
|
@override
|
|
String get demoTestMedia => 'FREE · SAME DEMO CLIP';
|
|
|
|
@override
|
|
String episodeProgress(int number, int total) {
|
|
return 'EPISODE $number / $total';
|
|
}
|
|
|
|
@override
|
|
String get testVideoNotice => 'Self-generated technical test video';
|
|
|
|
@override
|
|
String lockedTitle(int number) {
|
|
return 'Episode $number is locked';
|
|
}
|
|
|
|
@override
|
|
String get lockedBody =>
|
|
'Unlocking will be available after store and verification setup. This demo does not process payments.';
|
|
|
|
@override
|
|
String get playbackError => 'This clip could not be played.';
|
|
|
|
@override
|
|
String get catalogError => 'The catalog could not be loaded.';
|
|
|
|
@override
|
|
String get categoriesError => 'Categories could not be loaded.';
|
|
|
|
@override
|
|
String get detailError => 'The episode list could not be loaded.';
|
|
|
|
@override
|
|
String get noMediaNotice => 'This episode has no playable media yet.';
|
|
|
|
@override
|
|
String get noStories => 'No stories available yet.';
|
|
|
|
@override
|
|
String get notices => 'Notices';
|
|
|
|
@override
|
|
String get noNotices => 'No notices yet.';
|
|
|
|
@override
|
|
String get noticesLoadFailed => 'Notices could not be loaded.';
|
|
|
|
@override
|
|
String get noticeDetails => 'Notice details';
|
|
|
|
@override
|
|
String get noticeAnnouncement => 'Notice';
|
|
|
|
@override
|
|
String get close => 'Close';
|
|
|
|
@override
|
|
String carouselSemantics(int current, int total) {
|
|
return 'Banner $current of $total';
|
|
}
|
|
|
|
@override
|
|
String get retry => 'Retry';
|
|
|
|
@override
|
|
String get backToSeries => 'Back to series';
|
|
|
|
@override
|
|
String get nextEpisode => 'Next episode';
|
|
|
|
@override
|
|
String get pause => 'Pause';
|
|
|
|
@override
|
|
String get play => 'Play';
|
|
|
|
@override
|
|
String get seekVideo => 'Seek video';
|
|
|
|
@override
|
|
String get seekFailed => 'Could not change playback position.';
|
|
|
|
@override
|
|
String get captions => 'Captions';
|
|
|
|
@override
|
|
String get captionsOff => 'Captions off';
|
|
|
|
@override
|
|
String get englishCaptions => 'English captions';
|
|
|
|
@override
|
|
String get chineseCaptions => 'Chinese captions';
|
|
|
|
@override
|
|
String get english => 'English';
|
|
|
|
@override
|
|
String get simplifiedChinese => '简体中文';
|
|
|
|
@override
|
|
String get bahasaIndonesia => 'Bahasa Indonesia';
|
|
|
|
@override
|
|
String get episodeOneTitle => 'First Light';
|
|
|
|
@override
|
|
String get episodeTwoTitle => 'A New Frequency';
|
|
|
|
@override
|
|
String get episodeThreeTitle => 'Crossing Over';
|
|
|
|
@override
|
|
String get episodeFourTitle => 'After the Echo';
|
|
|
|
@override
|
|
String get dramaSignalTitle => 'The Signal';
|
|
|
|
@override
|
|
String get dramaSignalSynopsis =>
|
|
'A demo series for vertical playback. Every episode reuses one local clip.';
|
|
|
|
@override
|
|
String get dramaCityTitle => 'City Lights & Velvet Nights';
|
|
|
|
@override
|
|
String get dramaCitySynopsis =>
|
|
'A demo romance series. The same local video is used to try switching and resume.';
|
|
|
|
@override
|
|
String get dramaVengeanceTitle => 'Vengeance Rising';
|
|
|
|
@override
|
|
String get dramaVengeanceSynopsis =>
|
|
'A demo action series. The same local video is used to try switching and resume.';
|
|
|
|
@override
|
|
String get dramaEchoesTitle => 'Echoes of Fate';
|
|
|
|
@override
|
|
String get genreSuspenseMystery => 'Suspense · Mystery';
|
|
|
|
@override
|
|
String get genreUrbanRomance => 'Urban Romance';
|
|
|
|
@override
|
|
String get genreActionThriller => 'Action · Thriller';
|
|
|
|
@override
|
|
String get genreDramaMystery => 'Drama · Mystery';
|
|
|
|
@override
|
|
String get continueWatchingHeading => 'CONTINUE WATCHING';
|
|
|
|
@override
|
|
String get preferencesHeading => 'PREFERENCES';
|
|
|
|
@override
|
|
String get brandMark => 'FRUITSHORTS';
|
|
|
|
@override
|
|
String get shareFooter => 'FruitShorts';
|
|
|
|
@override
|
|
String get shortsTab => 'Shorts';
|
|
|
|
@override
|
|
String get myListTab => 'My List';
|
|
|
|
@override
|
|
String get watchFull => 'Watch Full';
|
|
|
|
@override
|
|
String get swipeForNext => 'Swipe up for next';
|
|
|
|
@override
|
|
String get logIn => 'Log in';
|
|
|
|
@override
|
|
String get logInHint => 'Keep your coins and list';
|
|
|
|
@override
|
|
String get rewards => 'Rewards';
|
|
|
|
@override
|
|
String get forYou => 'For You';
|
|
|
|
@override
|
|
String get hot => 'Hot';
|
|
|
|
@override
|
|
String get newest => 'New';
|
|
|
|
@override
|
|
String get favorite => 'Favorite';
|
|
|
|
@override
|
|
String get myAccount => 'My account';
|
|
|
|
@override
|
|
String get myWorks => 'My works';
|
|
|
|
@override
|
|
String get creatorCenter => 'Creator center';
|
|
|
|
@override
|
|
String get helpFeedback => 'Help & feedback';
|
|
|
|
@override
|
|
String get vipUnlockMessage => 'Unlock more with membership';
|
|
|
|
@override
|
|
String get coins => 'Coins';
|
|
|
|
@override
|
|
String get topUpWallet => 'Top Up Wallet';
|
|
|
|
@override
|
|
String get vipMembership => 'VIP Membership';
|
|
|
|
@override
|
|
String get notActive => 'Not Active';
|
|
|
|
@override
|
|
String get joinVip => 'Join VIP';
|
|
|
|
@override
|
|
String get earnRewards => 'Earn Rewards';
|
|
|
|
@override
|
|
String get freeBonus => 'Get Free Bonus';
|
|
|
|
@override
|
|
String get watchHistory => 'Watch History';
|
|
|
|
@override
|
|
String get settings => 'Settings';
|
|
|
|
@override
|
|
String get serverAddress => 'Server address';
|
|
|
|
@override
|
|
String get serverSettings => 'Server settings';
|
|
|
|
@override
|
|
String get serverAddressHint => 'http(s)://host:port';
|
|
|
|
@override
|
|
String get saveAddress => 'Save address';
|
|
|
|
@override
|
|
String get restartToApply => 'Restart the app to apply.';
|
|
|
|
@override
|
|
String get restoreDefault => 'Restore default';
|
|
|
|
@override
|
|
String get invalidServerAddress => 'Enter a valid http(s) server address.';
|
|
|
|
@override
|
|
String get signOut => 'Sign Out';
|
|
|
|
@override
|
|
String get mockUserName => 'Vicky sheng';
|
|
|
|
@override
|
|
String get mockUserId => 'ID: M1CZWVYE';
|
|
|
|
@override
|
|
String get mockNotice => 'Sample data only.';
|
|
|
|
@override
|
|
String get topBadge => 'TOP 1';
|
|
|
|
@override
|
|
String get signIn => 'Sign In';
|
|
|
|
@override
|
|
String get signUp => 'Sign Up';
|
|
|
|
@override
|
|
String get authSignInTitle => 'Welcome back';
|
|
|
|
@override
|
|
String get authSignUpTitle => 'Create your account';
|
|
|
|
@override
|
|
String get authSubtitle => 'Sign in with your email and password.';
|
|
|
|
@override
|
|
String get authSignUpSubtitle =>
|
|
'Create an account to keep your list, history, and progress.';
|
|
|
|
@override
|
|
String get authBrandTagline => 'Short dramas made for Indonesia';
|
|
|
|
@override
|
|
String get authEmailLabel => 'Email';
|
|
|
|
@override
|
|
String get authPasswordLabel => 'Password';
|
|
|
|
@override
|
|
String get authPasswordHint => 'At least 8 characters, letters and numbers';
|
|
|
|
@override
|
|
String get authEmailRequired => 'Enter your email';
|
|
|
|
@override
|
|
String get authEmailInvalid => 'That email doesn\'t look right';
|
|
|
|
@override
|
|
String get authPasswordRequired => 'Enter your password';
|
|
|
|
@override
|
|
String get authPasswordLength => 'Password must be 8-64 characters';
|
|
|
|
@override
|
|
String get authPasswordWeak => 'Password needs both letters and numbers';
|
|
|
|
@override
|
|
String get authNetworkError => 'Network error, please try again';
|
|
|
|
@override
|
|
String get authServerError =>
|
|
'The service is busy. Please try again shortly.';
|
|
|
|
@override
|
|
String get apiErrorBadRequest => 'Invalid request';
|
|
|
|
@override
|
|
String get apiErrorUnauthorized => 'Sign in to continue';
|
|
|
|
@override
|
|
String get apiErrorForbidden => 'You don\'t have permission';
|
|
|
|
@override
|
|
String get apiErrorNotFound => 'Not found';
|
|
|
|
@override
|
|
String get apiErrorTooManyRequests =>
|
|
'Too many requests. Please try again later.';
|
|
|
|
@override
|
|
String get apiErrorLoginFailed => 'Incorrect account or password';
|
|
|
|
@override
|
|
String get apiErrorAccountDisabled => 'This account has been disabled';
|
|
|
|
@override
|
|
String get apiErrorCoinNotEnough => 'Not enough coins';
|
|
|
|
@override
|
|
String get apiErrorEpisodeUnavailable => 'This episode is unavailable';
|
|
|
|
@override
|
|
String get apiErrorEpisodeUnlocked => 'This episode is already unlocked';
|
|
|
|
@override
|
|
String get apiErrorOrderInvalid => 'This order is already paid or closed';
|
|
|
|
@override
|
|
String get apiErrorVipExpired => 'Membership has expired';
|
|
|
|
@override
|
|
String get apiErrorDataExists => 'This record already exists';
|
|
|
|
@override
|
|
String get apiErrorDataNotFound => 'Not found';
|
|
|
|
@override
|
|
String get apiErrorNotAllowed => 'This action isn\'t available right now';
|
|
|
|
@override
|
|
String get authSwitchToSignUp => 'New here? Create an account';
|
|
|
|
@override
|
|
String get authSwitchToSignIn => 'Already have an account? Sign in';
|
|
|
|
@override
|
|
String get authGateTitle => 'Sign in to continue';
|
|
|
|
@override
|
|
String get authGateMessage =>
|
|
'Watch history, favorites, comments and downloads need an account.';
|
|
|
|
@override
|
|
String get authGateAction => 'Sign In';
|
|
|
|
@override
|
|
String get showPassword => 'Show password';
|
|
|
|
@override
|
|
String get hidePassword => 'Hide password';
|
|
|
|
@override
|
|
String get cancel => 'Not now';
|
|
|
|
@override
|
|
String get noEpisodesYet => 'No playable episodes yet.';
|
|
|
|
@override
|
|
String get networkError =>
|
|
'Network is unreachable. Please check your connection and retry.';
|
|
|
|
@override
|
|
String get progressError => 'Your watch position could not be loaded.';
|
|
|
|
@override
|
|
String get favoritesError => 'Your favorites could not be loaded.';
|
|
|
|
@override
|
|
String get favoriteToggleFailed =>
|
|
'Could not update favorites. Please retry.';
|
|
|
|
@override
|
|
String get myFavorites => 'My favorites';
|
|
|
|
@override
|
|
String get noFavorites => 'No favorites yet.';
|
|
|
|
@override
|
|
String get downloads => 'Downloads';
|
|
|
|
@override
|
|
String get downloadsError => 'Download settings could not be loaded.';
|
|
|
|
@override
|
|
String get noDownloads => 'No download authorizations yet.';
|
|
|
|
@override
|
|
String get downloadedItems => 'Download authorizations';
|
|
|
|
@override
|
|
String downloadQuota(int remaining, int max) {
|
|
return '$remaining of $max authorizations available';
|
|
}
|
|
|
|
@override
|
|
String downloadLicenseDays(int days) {
|
|
return 'Authorization valid for $days days';
|
|
}
|
|
|
|
@override
|
|
String get downloadWifiOnly => 'Wi-Fi only';
|
|
|
|
@override
|
|
String get downloadQuality => 'Maximum quality';
|
|
|
|
@override
|
|
String downloadStatus(Object status) {
|
|
return 'Authorization: $status';
|
|
}
|
|
|
|
@override
|
|
String downloadTaskStatus(Object status) {
|
|
return 'Task: $status';
|
|
}
|
|
|
|
@override
|
|
String downloadProgress(int progress) {
|
|
return '$progress%';
|
|
}
|
|
|
|
@override
|
|
String downloadExpiresAt(Object time) {
|
|
return 'Expires $time';
|
|
}
|
|
|
|
@override
|
|
String get clearDownloadsTitle => 'Clear download authorizations?';
|
|
|
|
@override
|
|
String get clearDownloadsMessage =>
|
|
'This revokes every download authorization for this device.';
|
|
|
|
@override
|
|
String get downloadSettingsFailed => 'Could not update download settings.';
|
|
|
|
@override
|
|
String get downloadDeleteFailed =>
|
|
'Could not remove this download authorization.';
|
|
|
|
@override
|
|
String get downloadClearFailed => 'Could not clear download authorizations.';
|
|
|
|
@override
|
|
String get downloadGrantFailed => 'Could not request this download.';
|
|
|
|
@override
|
|
String get downloadGranted => 'Download authorization is ready.';
|
|
|
|
@override
|
|
String get noWatchRecords => 'No watch history yet.';
|
|
|
|
@override
|
|
String get recordDeleteFailed =>
|
|
'Could not delete this record. Please retry.';
|
|
|
|
@override
|
|
String get recordClearFailed =>
|
|
'Could not clear watch history. Please retry.';
|
|
|
|
@override
|
|
String get clearAll => 'Clear all';
|
|
|
|
@override
|
|
String watchRecordsCount(int count) {
|
|
return '$count records';
|
|
}
|
|
|
|
@override
|
|
String favoritesCount(int count) {
|
|
return '$count favorites';
|
|
}
|
|
|
|
@override
|
|
String get clearWatchHistoryTitle => 'Clear watch history?';
|
|
|
|
@override
|
|
String get clearWatchHistoryMessage =>
|
|
'This removes the watch history from your account.';
|
|
|
|
@override
|
|
String get confirmClear => 'Clear';
|
|
|
|
@override
|
|
String get detailLoadFailed => 'Details failed to load';
|
|
|
|
@override
|
|
String get retryDetail => 'Retry';
|
|
|
|
@override
|
|
String get episodeUnavailable => 'Episode unavailable';
|
|
|
|
@override
|
|
String updatedAtLabel(Object time) {
|
|
return 'Updated $time';
|
|
}
|
|
|
|
@override
|
|
String get remove => 'Remove';
|
|
|
|
@override
|
|
String get unlockComingSoon => 'Unlocking with coins is coming soon.';
|
|
|
|
@override
|
|
String resumeProgress(Object position, Object total) {
|
|
return 'Resume at $position / $total';
|
|
}
|
|
|
|
@override
|
|
String get accountCenter => 'Account';
|
|
|
|
@override
|
|
String get accountProfile => 'Profile';
|
|
|
|
@override
|
|
String get accountDevices => 'Login devices';
|
|
|
|
@override
|
|
String get accountDataExport => 'Data export';
|
|
|
|
@override
|
|
String get accountDeactivate => 'Delete account';
|
|
|
|
@override
|
|
String get accountProfileLoadFailed => 'Could not load your profile.';
|
|
|
|
@override
|
|
String get accountProfileSaveFailed => 'Could not save your profile.';
|
|
|
|
@override
|
|
String get accountNickname => 'Nickname';
|
|
|
|
@override
|
|
String get accountNicknameInvalid => 'Enter 1 to 30 characters.';
|
|
|
|
@override
|
|
String get accountGender => 'Gender';
|
|
|
|
@override
|
|
String get accountMale => 'Male';
|
|
|
|
@override
|
|
String get accountFemale => 'Female';
|
|
|
|
@override
|
|
String get accountUnknownGender => 'Prefer not to say';
|
|
|
|
@override
|
|
String get accountSelectBirthday => 'Set birthday';
|
|
|
|
@override
|
|
String get accountBirthdayHint =>
|
|
'Birthday can be set but not cleared in this version.';
|
|
|
|
@override
|
|
String get accountSaved => 'Profile saved.';
|
|
|
|
@override
|
|
String get accountReadOnlyInfo => 'Account information';
|
|
|
|
@override
|
|
String get accountUid => 'UID';
|
|
|
|
@override
|
|
String get accountMaskedAccount => 'Account';
|
|
|
|
@override
|
|
String get accountCountry => 'Country';
|
|
|
|
@override
|
|
String get accountCurrency => 'Currency';
|
|
|
|
@override
|
|
String get accountStatus => 'Status';
|
|
|
|
@override
|
|
String get accountLanguage => 'Language';
|
|
|
|
@override
|
|
String get accountTimezone => 'Time zone';
|
|
|
|
@override
|
|
String get accountRegion => 'Region';
|
|
|
|
@override
|
|
String get accountVipLevel => 'VIP level';
|
|
|
|
@override
|
|
String get accountCreatedAt => 'Registered';
|
|
|
|
@override
|
|
String get accountLastLogin => 'Last login';
|
|
|
|
@override
|
|
String get accountDevicesEmpty => 'No login devices found.';
|
|
|
|
@override
|
|
String get accountDevicesLoadFailed => 'Could not load devices.';
|
|
|
|
@override
|
|
String get accountPlatform => 'Platform';
|
|
|
|
@override
|
|
String get accountDeviceId => 'Device ID';
|
|
|
|
@override
|
|
String get accountFirstSeen => 'First seen';
|
|
|
|
@override
|
|
String get accountLastActive => 'Last active';
|
|
|
|
@override
|
|
String get accountDeviceActive => 'Active';
|
|
|
|
@override
|
|
String get accountDeviceInactive => 'Inactive';
|
|
|
|
@override
|
|
String get accountExportLoadFailed => 'Could not export account data.';
|
|
|
|
@override
|
|
String get accountCredentials => 'Sign-in credentials';
|
|
|
|
@override
|
|
String get accountConsentRecords => 'Consent records';
|
|
|
|
@override
|
|
String get accountDeviceCount => 'Devices';
|
|
|
|
@override
|
|
String get accountCopyJson => 'Copy full JSON';
|
|
|
|
@override
|
|
String get accountCopied => 'Account data copied.';
|
|
|
|
@override
|
|
String get accountVerified => 'Verified';
|
|
|
|
@override
|
|
String get accountUnverified => 'Unverified';
|
|
|
|
@override
|
|
String get accountDeactivateWarning =>
|
|
'Requests enter a 15-day cooling-off period. All devices are signed out immediately.';
|
|
|
|
@override
|
|
String get accountDeactivateReason => 'Reason (optional)';
|
|
|
|
@override
|
|
String get accountDeactivateReasonHint => 'Add more detail here';
|
|
|
|
@override
|
|
String get accountRequestDeactivate => 'Request account deletion';
|
|
|
|
@override
|
|
String get accountConfirmDeactivateTitle => 'Request account deletion?';
|
|
|
|
@override
|
|
String get accountConfirmDeactivateMessage =>
|
|
'All devices will be signed out immediately. You can cancel during the 15-day cooling-off period after signing in again.';
|
|
|
|
@override
|
|
String get accountConfirmDeactivate => 'Confirm';
|
|
|
|
@override
|
|
String accountScheduledFor(Object time) {
|
|
return 'Deletion scheduled for $time';
|
|
}
|
|
|
|
@override
|
|
String get accountCancelDeactivation => 'Cancel deletion request';
|
|
|
|
@override
|
|
String get accountCancelSucceeded => 'Deletion request cancelled.';
|
|
|
|
@override
|
|
String get accountDeactivateFailed => 'Could not request account deletion.';
|
|
|
|
@override
|
|
String get accountCancelFailed => 'Could not cancel the deletion request.';
|
|
|
|
@override
|
|
String get authPhoneTitle => 'Continue with phone';
|
|
|
|
@override
|
|
String get authPhoneSignUp => 'Create an account with phone';
|
|
|
|
@override
|
|
String get authPhoneLabel => 'Phone number';
|
|
|
|
@override
|
|
String get authPhoneHint => '0812 3456 7890';
|
|
|
|
@override
|
|
String get authPhoneInvalid => 'Enter a valid phone number';
|
|
|
|
@override
|
|
String get authCodeLabel => 'Verification code';
|
|
|
|
@override
|
|
String get authCodeHint => '6-digit code';
|
|
|
|
@override
|
|
String get authCodeRequired => 'Enter the verification code';
|
|
|
|
@override
|
|
String get authSendCode => 'Send code';
|
|
|
|
@override
|
|
String authResendCode(int seconds) {
|
|
return 'Resend in ${seconds}s';
|
|
}
|
|
|
|
@override
|
|
String get authCodeSent => 'Verification code sent.';
|
|
|
|
@override
|
|
String get authPhoneSignInAction => 'Sign in';
|
|
|
|
@override
|
|
String get authPhoneSignUpAction => 'Create account';
|
|
|
|
@override
|
|
String get unlockWithCoins => 'Unlock with coins';
|
|
|
|
@override
|
|
String get unlockFailed => 'Could not unlock this episode.';
|
|
|
|
@override
|
|
String get wallet => 'Wallet';
|
|
|
|
@override
|
|
String get coinBalance => 'Coin balance';
|
|
|
|
@override
|
|
String get coinLedger => 'Coin activity';
|
|
|
|
@override
|
|
String get noCoinLedger => 'No coin activity yet.';
|
|
|
|
@override
|
|
String get walletLoadFailed => 'Could not load your wallet.';
|
|
|
|
@override
|
|
String walletBalanceShort(int coins) {
|
|
return '$coins coins';
|
|
}
|
|
|
|
@override
|
|
String get insufficientCoins => 'Not enough coins.';
|
|
|
|
@override
|
|
String get rechargeUnavailable => 'Top-up is not available yet.';
|
|
|
|
@override
|
|
String get totalRecharged => 'Total recharged';
|
|
|
|
@override
|
|
String get totalConsumed => 'Total spent';
|
|
|
|
@override
|
|
String get ledgerUnlock => 'Episode unlock';
|
|
|
|
@override
|
|
String get ledgerRecharge => 'Coin top-up';
|
|
|
|
@override
|
|
String get ledgerRefund => 'Refund';
|
|
|
|
@override
|
|
String get ledgerAdjustment => 'Adjustment';
|
|
|
|
@override
|
|
String get rankingTab => 'Charts';
|
|
|
|
@override
|
|
String get rankingTitle => 'Top Charts';
|
|
|
|
@override
|
|
String get rankingSubtitle => 'Ranked live by play heat';
|
|
|
|
@override
|
|
String get rankingHot => 'Trending';
|
|
|
|
@override
|
|
String get rankingNew => 'New releases';
|
|
|
|
@override
|
|
String get newReleasesAll => 'All new releases';
|
|
|
|
@override
|
|
String get newReleasesSubtitle => 'Newest arrivals';
|
|
|
|
@override
|
|
String get reserveSubtitle => 'Reserve before launch';
|
|
|
|
@override
|
|
String get reserveEmptyTitle => 'No reservations yet';
|
|
|
|
@override
|
|
String get reserveEmptyHint => 'Reserve new dramas here once announced';
|
|
|
|
@override
|
|
String topLabel(int n) {
|
|
return 'TOP $n';
|
|
}
|
|
|
|
@override
|
|
String get rankingEmptyTitle => 'No ranked stories yet';
|
|
|
|
@override
|
|
String get rankingEmptyBody =>
|
|
'Titles appear here as soon as they are published.';
|
|
|
|
@override
|
|
String get rankingTopPick => 'TOP PICK';
|
|
|
|
@override
|
|
String get rechargeTitle => 'Top Up Coins';
|
|
|
|
@override
|
|
String get vipTitle => 'VIP Membership';
|
|
|
|
@override
|
|
String get buy => 'Buy';
|
|
|
|
@override
|
|
String bonusCoin(int bonus) {
|
|
return '+$bonus bonus';
|
|
}
|
|
|
|
@override
|
|
String vipDuration(int days) {
|
|
return '$days-day VIP';
|
|
}
|
|
|
|
@override
|
|
String get noCoinPacks => 'No coin packs available right now.';
|
|
|
|
@override
|
|
String get noVipPlans => 'No VIP plans available right now.';
|
|
|
|
@override
|
|
String get productsLoadFailed => 'Could not load products.';
|
|
|
|
@override
|
|
String orderCreated(String orderNo) {
|
|
return 'Order $orderNo created.';
|
|
}
|
|
|
|
@override
|
|
String get paymentPending => 'Waiting for payment.';
|
|
|
|
@override
|
|
String get orderCreateFailed => 'Could not create the order.';
|
|
|
|
@override
|
|
String get playbackQuality => 'Quality';
|
|
|
|
@override
|
|
String qualitySwitched(String quality) {
|
|
return 'Switched to $quality';
|
|
}
|
|
|
|
@override
|
|
String get qualityAuto => 'Auto';
|
|
|
|
@override
|
|
String get qualityAutoHint =>
|
|
'HLS adjusts the bitrate automatically for your connection.';
|
|
|
|
@override
|
|
String get searchFailed => 'Search failed. Please try again.';
|
|
|
|
@override
|
|
String searchResultCount(int count) {
|
|
return '$count results';
|
|
}
|
|
|
|
@override
|
|
String episodeCountLabel(int count) {
|
|
return '$count episodes';
|
|
}
|
|
|
|
@override
|
|
String commentsWithCount(int count) {
|
|
return '$count comments';
|
|
}
|
|
|
|
@override
|
|
String get textSize => 'Text size';
|
|
|
|
@override
|
|
String get textSizeSmall => 'Small';
|
|
|
|
@override
|
|
String get textSizeStandard => 'Standard';
|
|
|
|
@override
|
|
String get textSizeLarge => 'Large';
|
|
|
|
@override
|
|
String get watchAdToUnlock => 'Watch an ad to unlock';
|
|
|
|
@override
|
|
String get unlockWithVip => 'Unlock with VIP';
|
|
|
|
@override
|
|
String get unlockMethodsVary => 'Available unlock methods vary by title.';
|
|
|
|
@override
|
|
String get unlockEpisode => 'Unlock this episode';
|
|
|
|
@override
|
|
String get language => 'Language';
|
|
|
|
@override
|
|
String get freeWatch => 'Free watch';
|
|
|
|
@override
|
|
String get qualityUnavailable => 'Unavailable';
|
|
|
|
@override
|
|
String get notInterested => 'Not interested';
|
|
|
|
@override
|
|
String get clearPlayback => 'Clear-screen playback';
|
|
|
|
@override
|
|
String get danmakuUnavailable => 'Coming soon';
|
|
|
|
@override
|
|
String get danmakuSettings => 'Danmaku settings';
|
|
|
|
@override
|
|
String get offlineCache => 'Offline cache';
|
|
|
|
@override
|
|
String get screenCast => 'Cast';
|
|
|
|
@override
|
|
String get sleepTimer => 'Sleep timer';
|
|
|
|
@override
|
|
String get homeSearchHint => 'Search dramas, actors, genres...';
|
|
|
|
@override
|
|
String get homeSectionFeatured => 'Featured';
|
|
|
|
@override
|
|
String get homeSectionNew => 'New';
|
|
|
|
@override
|
|
String get homeSectionCategories => 'Categories';
|
|
|
|
@override
|
|
String get homeSectionRanking => 'Charts';
|
|
|
|
@override
|
|
String get homeSectionCostume => 'Costume';
|
|
|
|
@override
|
|
String get homeSectionCommunity => 'Community';
|
|
|
|
@override
|
|
String get homeTagHot => 'Hot';
|
|
|
|
@override
|
|
String get homeTagUplifting => 'Thrilling';
|
|
|
|
@override
|
|
String get homeTagSweet => 'Sweet';
|
|
|
|
@override
|
|
String get homeTagFaceSlap => 'Revenge';
|
|
|
|
@override
|
|
String get homeTagAngst => 'Angst';
|
|
|
|
@override
|
|
String get homeBadgeHot => 'Hot';
|
|
|
|
@override
|
|
String get homeBadgeNew => 'New';
|
|
|
|
@override
|
|
String get homeBadgeAnime => 'Anime';
|
|
|
|
@override
|
|
String get emptyContent => 'No content yet';
|
|
|
|
@override
|
|
String get recommendTopTab => 'Recommend';
|
|
|
|
@override
|
|
String get playlistTopTab => 'Playlists';
|
|
|
|
@override
|
|
String get allDramasTopTab => 'All Dramas';
|
|
|
|
@override
|
|
String get weeklyHitsTitle => 'This Week\'s Hits';
|
|
|
|
@override
|
|
String get weeklyHitsSubtitle => 'Binge the hottest stories of the week!';
|
|
|
|
@override
|
|
String get weeklyNewTitle => 'New This Week';
|
|
|
|
@override
|
|
String get weeklyNewSubtitle => 'Fresh releases to start your next binge';
|
|
|
|
@override
|
|
String get costumeAwardsTitle => 'Costume Drama Awards';
|
|
|
|
@override
|
|
String get costumeAwardsSubtitle => 'Top-rated picks every costume fan needs';
|
|
|
|
@override
|
|
String get localFilter => 'Local';
|
|
|
|
@override
|
|
String get asiaFilter => 'Asia';
|
|
|
|
@override
|
|
String get westernFilter => 'Western';
|
|
|
|
@override
|
|
String get subtitlesOnlyFilter => 'Subtitles';
|
|
|
|
@override
|
|
String get dubbedFilter => 'Dubbed';
|
|
|
|
@override
|
|
String get reversalFilter => 'Comeback';
|
|
|
|
@override
|
|
String get modernFilter => 'Modern';
|
|
|
|
@override
|
|
String get edit => 'Edit';
|
|
|
|
@override
|
|
String get done => 'Done';
|
|
|
|
@override
|
|
String get selectAll => 'Select all';
|
|
|
|
@override
|
|
String get deselectAll => 'Deselect all';
|
|
|
|
@override
|
|
String get cancelFollowing => 'Unfollow';
|
|
|
|
@override
|
|
String get confirmCancelFollowing => 'Unfollow the selected dramas?';
|
|
|
|
@override
|
|
String get visitor => 'Visitor';
|
|
|
|
@override
|
|
String get copyUid => 'Copy UID';
|
|
|
|
@override
|
|
String get uidCopied => 'UID copied';
|
|
|
|
@override
|
|
String get offlineDownloads => 'Offline downloads';
|
|
|
|
@override
|
|
String get watchPreferences => 'Watch preferences';
|
|
|
|
@override
|
|
String get contactSupport => 'Contact support';
|
|
|
|
@override
|
|
String get vipBrandName => 'Netshort VIP';
|
|
|
|
@override
|
|
String get mineVipSubtitle => 'Enjoy exclusive benefits';
|
|
|
|
@override
|
|
String favoriteEpisodeProgress(int episode, int total) {
|
|
return 'Episode $episode / $total total';
|
|
}
|
|
|
|
@override
|
|
String watchedToEpisode(int episode) {
|
|
return 'Watched to Episode $episode';
|
|
}
|
|
|
|
@override
|
|
String get homeWatchAll => 'Watch all';
|
|
|
|
@override
|
|
String get confirmRemove => 'Remove this watch history?';
|
|
|
|
@override
|
|
String get followingCountLabel => 'Following';
|
|
|
|
@override
|
|
String get watchRecordsCountLabel => 'Watch records';
|
|
|
|
@override
|
|
String get dataUnavailable => '—';
|
|
|
|
@override
|
|
String get commonQuestions => 'Common questions';
|
|
|
|
@override
|
|
String get aboutUs => 'About us';
|
|
|
|
@override
|
|
String get aboutDescription =>
|
|
'A focused, immersive place to watch short dramas.';
|
|
|
|
@override
|
|
String versionLabel(String version) {
|
|
return 'Version $version';
|
|
}
|
|
}
|