Halkyon's ADR 0043, D1, D3, D5 and D8: any file up to 100 MB, attached to a task's description or to a comment, sealed as everything of Todo's. Server: the attachment table, synced and sealed as the others, with the sealed file's hash readable for the store; todoFiles hands halkyon_base its rows, readable by their space's members, and takes sealed files alone; the files no attachment names go daily. Its tests hold downloads to the row's space, refuse a readable file and prune what no live row names. Migration attachments: CREATE TABLE "attachment" with its indexes and the foreign key to its space, cascading as every synced table's. App: AttachmentRepository seals each file for its row, keeps it sealed and opened in the person's folder, uploads it after each sync and fetches it as it shows, both held back by Without files on mobile data but for a file tapped. Under the description and a comment's text, a row of them: pictures as thumbnails opening full-size, other files as chips opening in the system's app, else saved; the paperclip beside the description and in the comment's composer adds them, the composer holding them until it is sent. A task deleted takes its files and its comments' along, a comment its own. halkyon_app opens a file in the system's app (FileOpener): on Android through its plugin and a FileProvider of its own class, sharing the cache's halkyon_opened/ folder alone; on the desktop as a file: URI. Whats-New: Attach files to a task's description or a comment with the paperclip: pictures show as thumbnails, other files open in their app. Whats-New-De: Hänge mit der Büroklammer Dateien an die Beschreibung einer Aufgabe oder an einen Kommentar: Bilder erscheinen als Vorschau, andere Dateien öffnen sich in ihrer App. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2862 lines
80 KiB
Dart
2862 lines
80 KiB
Dart
import 'dart:async';
|
||
|
||
import 'package:flutter/foundation.dart';
|
||
import 'package:flutter/widgets.dart';
|
||
import 'package:flutter_localizations/flutter_localizations.dart';
|
||
import 'package:intl/intl.dart' as intl;
|
||
|
||
import 'app_localizations_de.dart';
|
||
import 'app_localizations_en.dart';
|
||
|
||
// ignore_for_file: type=lint
|
||
|
||
/// Callers can lookup localized strings with an instance of AppLocalizations
|
||
/// returned by `AppLocalizations.of(context)`.
|
||
///
|
||
/// Applications need to include `AppLocalizations.delegate()` in their app's
|
||
/// `localizationDelegates` list, and the locales they support in the app's
|
||
/// `supportedLocales` list. For example:
|
||
///
|
||
/// ```dart
|
||
/// import 'l10n/app_localizations.dart';
|
||
///
|
||
/// return MaterialApp(
|
||
/// localizationsDelegates: AppLocalizations.localizationsDelegates,
|
||
/// supportedLocales: AppLocalizations.supportedLocales,
|
||
/// home: MyApplicationHome(),
|
||
/// );
|
||
/// ```
|
||
///
|
||
/// ## Update pubspec.yaml
|
||
///
|
||
/// Please make sure to update your pubspec.yaml to include the following
|
||
/// packages:
|
||
///
|
||
/// ```yaml
|
||
/// dependencies:
|
||
/// # Internationalization support.
|
||
/// flutter_localizations:
|
||
/// sdk: flutter
|
||
/// intl: any # Use the pinned version from flutter_localizations
|
||
///
|
||
/// # Rest of dependencies
|
||
/// ```
|
||
///
|
||
/// ## iOS Applications
|
||
///
|
||
/// iOS applications define key application metadata, including supported
|
||
/// locales, in an Info.plist file that is built into the application bundle.
|
||
/// To configure the locales supported by your app, you’ll need to edit this
|
||
/// file.
|
||
///
|
||
/// First, open your project’s ios/Runner.xcworkspace Xcode workspace file.
|
||
/// Then, in the Project Navigator, open the Info.plist file under the Runner
|
||
/// project’s Runner folder.
|
||
///
|
||
/// Next, select the Information Property List item, select Add Item from the
|
||
/// Editor menu, then select Localizations from the pop-up menu.
|
||
///
|
||
/// Select and expand the newly-created Localizations item then, for each
|
||
/// locale your application supports, add a new item and select the locale
|
||
/// you wish to add from the pop-up menu in the Value field. This list should
|
||
/// be consistent with the languages listed in the AppLocalizations.supportedLocales
|
||
/// property.
|
||
abstract class AppLocalizations {
|
||
AppLocalizations(String locale)
|
||
: localeName = intl.Intl.canonicalizedLocale(locale.toString());
|
||
|
||
final String localeName;
|
||
|
||
static AppLocalizations of(BuildContext context) {
|
||
return Localizations.of<AppLocalizations>(context, AppLocalizations)!;
|
||
}
|
||
|
||
static const LocalizationsDelegate<AppLocalizations> delegate =
|
||
_AppLocalizationsDelegate();
|
||
|
||
/// A list of this localizations delegate along with the default localizations
|
||
/// delegates.
|
||
///
|
||
/// Returns a list of localizations delegates containing this delegate along with
|
||
/// GlobalMaterialLocalizations.delegate, GlobalCupertinoLocalizations.delegate,
|
||
/// and GlobalWidgetsLocalizations.delegate.
|
||
///
|
||
/// Additional delegates can be added by appending to this list in
|
||
/// MaterialApp. This list does not have to be used at all if a custom list
|
||
/// of delegates is preferred or required.
|
||
static const List<LocalizationsDelegate<dynamic>> localizationsDelegates =
|
||
<LocalizationsDelegate<dynamic>>[
|
||
delegate,
|
||
GlobalMaterialLocalizations.delegate,
|
||
GlobalCupertinoLocalizations.delegate,
|
||
GlobalWidgetsLocalizations.delegate,
|
||
];
|
||
|
||
/// A list of this localizations delegate's supported locales.
|
||
static const List<Locale> supportedLocales = <Locale>[
|
||
Locale('de'),
|
||
Locale('en'),
|
||
Locale('en', 'GB'),
|
||
Locale('en', 'US'),
|
||
];
|
||
|
||
/// The app's name: the window's title, and where halkyon_app's texts name the app.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Halkyon Todo'**
|
||
String get appTitle;
|
||
|
||
/// The app's word in its wordmark, under "Halkyon".
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Todo'**
|
||
String get launchProduct;
|
||
|
||
/// No description provided for @instanceFirstStartSubtitle.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Choose the instance to keep your tasks on. Someone runs each one; you can add others later.'**
|
||
String get instanceFirstStartSubtitle;
|
||
|
||
/// No description provided for @accountTitle.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Account'**
|
||
String get accountTitle;
|
||
|
||
/// No description provided for @accountDeleteMessage.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Your account is deleted on the server and on all your devices. This can\'t be undone.'**
|
||
String get accountDeleteMessage;
|
||
|
||
/// No description provided for @aboutTitle.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'About Halkyon Todo'**
|
||
String get aboutTitle;
|
||
|
||
/// No description provided for @shellTabToday.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Today'**
|
||
String get shellTabToday;
|
||
|
||
/// No description provided for @shellTabUpcoming.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Upcoming'**
|
||
String get shellTabUpcoming;
|
||
|
||
/// No description provided for @shellTabInbox.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Inbox'**
|
||
String get shellTabInbox;
|
||
|
||
/// Under Today's title: how many tasks are overdue or due today.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{count, plural, =1{1 task} other{{count} tasks}}'**
|
||
String todayCount(int count);
|
||
|
||
/// No description provided for @browseProfile.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Profile'**
|
||
String get browseProfile;
|
||
|
||
/// No description provided for @browseProfileHint.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Your account, how you sign in and your public profile'**
|
||
String get browseProfileHint;
|
||
|
||
/// No description provided for @shellTabBrowse.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Browse'**
|
||
String get shellTabBrowse;
|
||
|
||
/// No description provided for @settingsTitle.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Settings'**
|
||
String get settingsTitle;
|
||
|
||
/// No description provided for @settingsVersion.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Version {version} (build {build})'**
|
||
String settingsVersion(String version, String build);
|
||
|
||
/// No description provided for @clear.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Clear'**
|
||
String get clear;
|
||
|
||
/// No description provided for @colorLabel.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Colour'**
|
||
String get colorLabel;
|
||
|
||
/// No description provided for @dateTitle.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Date'**
|
||
String get dateTitle;
|
||
|
||
/// No description provided for @dateNextWeek.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Next week'**
|
||
String get dateNextWeek;
|
||
|
||
/// No description provided for @dateWeekend.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'This weekend'**
|
||
String get dateWeekend;
|
||
|
||
/// No description provided for @datePick.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Pick a day'**
|
||
String get datePick;
|
||
|
||
/// No description provided for @dateTime.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Time'**
|
||
String get dateTime;
|
||
|
||
/// No description provided for @dateNone.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'No date'**
|
||
String get dateNone;
|
||
|
||
/// No description provided for @dateNoneYet.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'No date'**
|
||
String get dateNoneYet;
|
||
|
||
/// No description provided for @dayToday.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Today'**
|
||
String get dayToday;
|
||
|
||
/// No description provided for @dayTomorrow.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Tomorrow'**
|
||
String get dayTomorrow;
|
||
|
||
/// No description provided for @dayYesterday.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Yesterday'**
|
||
String get dayYesterday;
|
||
|
||
/// No description provided for @dayHeadingNamed.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{date} · {name}'**
|
||
String dayHeadingNamed(String date, String name);
|
||
|
||
/// No description provided for @deadlineOn.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Deadline {day}'**
|
||
String deadlineOn(String day);
|
||
|
||
/// No description provided for @deadlineNone.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'No deadline'**
|
||
String get deadlineNone;
|
||
|
||
/// No description provided for @keysMissing.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'This device can\'t save: it doesn\'t hold your account\'s keys. Sign in with your password or recovery phrase to add them.'**
|
||
String get keysMissing;
|
||
|
||
/// A snack bar after a change to tasks, shown at once, could not be kept on the device and was taken back.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'That wasn\'t saved, so your tasks are as they were. Try again.'**
|
||
String get tasksNotSaved;
|
||
|
||
/// No description provided for @filtersLabelsTitle.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Filters & labels'**
|
||
String get filtersLabelsTitle;
|
||
|
||
/// No description provided for @filtersLabelsHint.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Views of your tasks, kept'**
|
||
String get filtersLabelsHint;
|
||
|
||
/// No description provided for @filtersTitle.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'My filters'**
|
||
String get filtersTitle;
|
||
|
||
/// No description provided for @filtersNone.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'No filters yet.'**
|
||
String get filtersNone;
|
||
|
||
/// No description provided for @filterAdd.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'New filter'**
|
||
String get filterAdd;
|
||
|
||
/// No description provided for @filterEdit.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Edit filter'**
|
||
String get filterEdit;
|
||
|
||
/// No description provided for @filterDelete.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Delete filter'**
|
||
String get filterDelete;
|
||
|
||
/// No description provided for @filterDeleteTitle.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Delete the filter?'**
|
||
String get filterDeleteTitle;
|
||
|
||
/// No description provided for @filterName.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Name'**
|
||
String get filterName;
|
||
|
||
/// No description provided for @filterDescription.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Description'**
|
||
String get filterDescription;
|
||
|
||
/// No description provided for @filterQuery.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Query'**
|
||
String get filterQuery;
|
||
|
||
/// No description provided for @filterQueryHint.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'today & p1'**
|
||
String get filterQueryHint;
|
||
|
||
/// No description provided for @filterFavorite.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Add to favourites'**
|
||
String get filterFavorite;
|
||
|
||
/// No description provided for @filterUnfavorite.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Remove from favourites'**
|
||
String get filterUnfavorite;
|
||
|
||
/// No description provided for @filterPreviewEmpty.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Nothing matches yet.'**
|
||
String get filterPreviewEmpty;
|
||
|
||
/// No description provided for @filterNothing.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'No tasks in this filter at the moment.'**
|
||
String get filterNothing;
|
||
|
||
/// No description provided for @filterHelp.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'today, tomorrow, overdue, no date, 7 days, p1 to p4, #Project, ##Project with its sub-projects, /Section, @label, search: word. Combine them with & (and), | (or), ! (not) and parentheses; * stands for anything in a name.'**
|
||
String get filterHelp;
|
||
|
||
/// No description provided for @filterMenu.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Filter menu'**
|
||
String get filterMenu;
|
||
|
||
/// No description provided for @labelMenu.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Label menu'**
|
||
String get labelMenu;
|
||
|
||
/// No description provided for @labelNothing.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'No open tasks have this label.'**
|
||
String get labelNothing;
|
||
|
||
/// No description provided for @labelEditEntry.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Edit label'**
|
||
String get labelEditEntry;
|
||
|
||
/// The filter editor's preview.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{count, plural, =1{1 task matches} other{{count} tasks match}}'**
|
||
String filterMatches(int count);
|
||
|
||
/// The filter editor when its query cannot be read.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Not understood near “{near}”'**
|
||
String filterNotRead(String near);
|
||
|
||
/// The filter editor when its query stops before it is complete.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'This query ends too soon'**
|
||
String get filterNotReadEnd;
|
||
|
||
/// No description provided for @commentShowAll.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Show all'**
|
||
String get commentShowAll;
|
||
|
||
/// No description provided for @commentReact.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Add a reaction'**
|
||
String get commentReact;
|
||
|
||
/// No description provided for @commentReactionRemove.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Remove {emoji}'**
|
||
String commentReactionRemove(String emoji);
|
||
|
||
/// No description provided for @commentNone.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Add relevant notes, links or anything else here.'**
|
||
String get commentNone;
|
||
|
||
/// No description provided for @emojiSearch.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Search emoji'**
|
||
String get emojiSearch;
|
||
|
||
/// No description provided for @emojiNone.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'No emoji found'**
|
||
String get emojiNone;
|
||
|
||
/// No description provided for @emojiRecent.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Recently used'**
|
||
String get emojiRecent;
|
||
|
||
/// No description provided for @emojiSmileys.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Smileys & people'**
|
||
String get emojiSmileys;
|
||
|
||
/// No description provided for @emojiAnimals.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Animals & nature'**
|
||
String get emojiAnimals;
|
||
|
||
/// No description provided for @emojiFoods.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Food & drink'**
|
||
String get emojiFoods;
|
||
|
||
/// No description provided for @emojiActivities.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Activities'**
|
||
String get emojiActivities;
|
||
|
||
/// No description provided for @emojiTravel.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Travel & places'**
|
||
String get emojiTravel;
|
||
|
||
/// No description provided for @emojiObjects.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Objects'**
|
||
String get emojiObjects;
|
||
|
||
/// No description provided for @emojiSymbols.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Symbols'**
|
||
String get emojiSymbols;
|
||
|
||
/// No description provided for @emojiFlags.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Flags'**
|
||
String get emojiFlags;
|
||
|
||
/// No description provided for @commentsTitle.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Comments'**
|
||
String get commentsTitle;
|
||
|
||
/// No description provided for @commentAdd.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Add a comment'**
|
||
String get commentAdd;
|
||
|
||
/// No description provided for @commentSend.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Send comment'**
|
||
String get commentSend;
|
||
|
||
/// No description provided for @commentMenu.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Comment menu'**
|
||
String get commentMenu;
|
||
|
||
/// No description provided for @commentEdit.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Edit comment'**
|
||
String get commentEdit;
|
||
|
||
/// No description provided for @commentCopy.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Copy text'**
|
||
String get commentCopy;
|
||
|
||
/// No description provided for @commentDelete.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Delete comment'**
|
||
String get commentDelete;
|
||
|
||
/// No description provided for @commentDeleteTitle.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Delete the comment?'**
|
||
String get commentDeleteTitle;
|
||
|
||
/// When a comment was written, once it was changed.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{when}, edited'**
|
||
String commentEdited(String when);
|
||
|
||
/// No description provided for @reportingTitle.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Reporting'**
|
||
String get reportingTitle;
|
||
|
||
/// No description provided for @reportingHint.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Goals, streaks and what you\'ve done'**
|
||
String get reportingHint;
|
||
|
||
/// No description provided for @reportingDaily.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Daily'**
|
||
String get reportingDaily;
|
||
|
||
/// No description provided for @reportingWeekly.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Weekly'**
|
||
String get reportingWeekly;
|
||
|
||
/// No description provided for @reportingHistory.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'History'**
|
||
String get reportingHistory;
|
||
|
||
/// No description provided for @reportingLast7Days.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Done in the last 7 days'**
|
||
String get reportingLast7Days;
|
||
|
||
/// No description provided for @reportingLast4Weeks.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Done in the last 4 weeks'**
|
||
String get reportingLast4Weeks;
|
||
|
||
/// No description provided for @historyProject.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Project'**
|
||
String get historyProject;
|
||
|
||
/// No description provided for @historyAllProjects.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'All projects'**
|
||
String get historyAllProjects;
|
||
|
||
/// No description provided for @historyNothing.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Nothing done yet.'**
|
||
String get historyNothing;
|
||
|
||
/// No description provided for @goalsDaily.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Tasks a day'**
|
||
String get goalsDaily;
|
||
|
||
/// No description provided for @goalsWeekly.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Tasks a week'**
|
||
String get goalsWeekly;
|
||
|
||
/// No description provided for @goalsDaysOff.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Days off'**
|
||
String get goalsDaysOff;
|
||
|
||
/// No description provided for @goalsVacation.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Vacation'**
|
||
String get goalsVacation;
|
||
|
||
/// No description provided for @goalsVacationHint.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Streaks wait until you\'re back'**
|
||
String get goalsVacationHint;
|
||
|
||
/// No description provided for @goalsEdit.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Edit goals'**
|
||
String get goalsEdit;
|
||
|
||
/// No description provided for @goalsDailyTitle.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Daily goal'**
|
||
String get goalsDailyTitle;
|
||
|
||
/// No description provided for @goalsWeeklyTitle.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Weekly goal'**
|
||
String get goalsWeeklyTitle;
|
||
|
||
/// No description provided for @goalsDailyStreak.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Daily streak'**
|
||
String get goalsDailyStreak;
|
||
|
||
/// No description provided for @goalsWeeklyStreak.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Weekly streak'**
|
||
String get goalsWeeklyStreak;
|
||
|
||
/// No description provided for @goalsOnVacation.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'On vacation'**
|
||
String get goalsOnVacation;
|
||
|
||
/// No description provided for @goalsProgress.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{done} of {goal} tasks'**
|
||
String goalsProgress(int done, int goal);
|
||
|
||
/// No description provided for @goalsLongest.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Longest: {length} ({from} to {to})'**
|
||
String goalsLongest(String length, String from, String to);
|
||
|
||
/// No description provided for @goalsDays.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{count, plural, =1{1 day} other{{count} days}}'**
|
||
String goalsDays(int count);
|
||
|
||
/// No description provided for @goalsWeeks.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{count, plural, =1{1 week} other{{count} weeks}}'**
|
||
String goalsWeeks(int count);
|
||
|
||
/// No description provided for @reportingTasks.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{count, plural, =1{1 task} other{{count} tasks}}'**
|
||
String reportingTasks(int count);
|
||
|
||
/// No description provided for @goalsReached.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Daily goal reached: {count, plural, =1{1 task} other{{count} tasks}} done today.'**
|
||
String goalsReached(int count);
|
||
|
||
/// No description provided for @labelsTitle.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Labels'**
|
||
String get labelsTitle;
|
||
|
||
/// No description provided for @labelsNone.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'No labels yet.'**
|
||
String get labelsNone;
|
||
|
||
/// No description provided for @labelsNoneSet.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'No labels'**
|
||
String get labelsNoneSet;
|
||
|
||
/// No description provided for @labelsCount.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{count, plural, =1{1 label} other{{count} labels}}'**
|
||
String labelsCount(int count);
|
||
|
||
/// No description provided for @labelAdd.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'New label'**
|
||
String get labelAdd;
|
||
|
||
/// No description provided for @labelEdit.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Edit label'**
|
||
String get labelEdit;
|
||
|
||
/// No description provided for @labelDelete.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Delete label'**
|
||
String get labelDelete;
|
||
|
||
/// No description provided for @labelDeleteTitle.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Delete the label?'**
|
||
String get labelDeleteTitle;
|
||
|
||
/// No description provided for @labelDeleteMessage.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'\"{name}\" is taken off every task that has it.'**
|
||
String labelDeleteMessage(String name);
|
||
|
||
/// No description provided for @nameLabel.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Name'**
|
||
String get nameLabel;
|
||
|
||
/// No description provided for @save.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Save'**
|
||
String get save;
|
||
|
||
/// No description provided for @overdue.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Overdue'**
|
||
String get overdue;
|
||
|
||
/// No description provided for @reschedule.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Reschedule'**
|
||
String get reschedule;
|
||
|
||
/// No description provided for @priorityTitle.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Priority'**
|
||
String get priorityTitle;
|
||
|
||
/// No description provided for @priority1.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Priority 1'**
|
||
String get priority1;
|
||
|
||
/// No description provided for @priority2.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Priority 2'**
|
||
String get priority2;
|
||
|
||
/// No description provided for @priority3.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Priority 3'**
|
||
String get priority3;
|
||
|
||
/// No description provided for @priority4.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'No priority'**
|
||
String get priority4;
|
||
|
||
/// No description provided for @projectsTitle.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Projects'**
|
||
String get projectsTitle;
|
||
|
||
/// No description provided for @projectsNone.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'No projects of your own yet.'**
|
||
String get projectsNone;
|
||
|
||
/// No description provided for @projectAdd.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Add project'**
|
||
String get projectAdd;
|
||
|
||
/// No description provided for @projectEdit.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Edit project'**
|
||
String get projectEdit;
|
||
|
||
/// No description provided for @projectDelete.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Delete project'**
|
||
String get projectDelete;
|
||
|
||
/// No description provided for @projectDeleteTitle.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Delete the project?'**
|
||
String get projectDeleteTitle;
|
||
|
||
/// No description provided for @projectDeleteMessage.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'\"{name}\" is deleted with its sections and tasks, on all your devices.'**
|
||
String projectDeleteMessage(String name);
|
||
|
||
/// In a sub-project's editor: whether it shows in its parent's colour rather than one of its own (the developer's review, 9 Nov 2026).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Same colour as its parent'**
|
||
String get projectInheritColor;
|
||
|
||
/// A project's editor (ADR 0033, D28), as Todoist's Add project.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Parent project'**
|
||
String get projectParent;
|
||
|
||
/// No description provided for @projectNoParent.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'No parent'**
|
||
String get projectNoParent;
|
||
|
||
/// No description provided for @projectFavorite.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Favourite'**
|
||
String get projectFavorite;
|
||
|
||
/// No description provided for @favoritesTitle.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Favourites'**
|
||
String get favoritesTitle;
|
||
|
||
/// No description provided for @projectSubProjectsHide.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Hide sub-projects'**
|
||
String get projectSubProjectsHide;
|
||
|
||
/// No description provided for @projectSubProjectsShow.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Show sub-projects'**
|
||
String get projectSubProjectsShow;
|
||
|
||
/// Deleting a project with sub-projects (ADR 0033, D28): subProjects their names, separated by commas.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'\"{name}\" is deleted with its sub-projects {subProjects}, and their sections and tasks, on all your devices.'**
|
||
String projectDeleteWithSubProjects(String name, String subProjects);
|
||
|
||
/// No description provided for @projectEmptyTitle.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Nothing to do here'**
|
||
String get projectEmptyTitle;
|
||
|
||
/// No description provided for @projectEmptyHint.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Add a task with the + button.'**
|
||
String get projectEmptyHint;
|
||
|
||
/// No description provided for @projectGone.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'This project was deleted.'**
|
||
String get projectGone;
|
||
|
||
/// No description provided for @projectMenu.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'More'**
|
||
String get projectMenu;
|
||
|
||
/// No description provided for @projectPickTitle.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Project'**
|
||
String get projectPickTitle;
|
||
|
||
/// No description provided for @sectionAdd.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Add section'**
|
||
String get sectionAdd;
|
||
|
||
/// No description provided for @sectionEdit.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Rename section'**
|
||
String get sectionEdit;
|
||
|
||
/// No description provided for @sectionDelete.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Delete section'**
|
||
String get sectionDelete;
|
||
|
||
/// No description provided for @sectionDeleteTitle.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Delete the section?'**
|
||
String get sectionDeleteTitle;
|
||
|
||
/// No description provided for @sectionDeleteMessage.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'\"{name}\" is deleted with its tasks.'**
|
||
String sectionDeleteMessage(String name);
|
||
|
||
/// No description provided for @sectionMenu.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Section'**
|
||
String get sectionMenu;
|
||
|
||
/// No description provided for @subTasks.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Sub-tasks'**
|
||
String get subTasks;
|
||
|
||
/// No description provided for @subTasksDone.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Sub-tasks {done}/{count}'**
|
||
String subTasksDone(int done, int count);
|
||
|
||
/// No description provided for @subTaskAdd.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Add sub-task'**
|
||
String get subTaskAdd;
|
||
|
||
/// No description provided for @taskTitle.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Task'**
|
||
String get taskTitle;
|
||
|
||
/// No description provided for @taskAddTitle.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Add task'**
|
||
String get taskAddTitle;
|
||
|
||
/// No description provided for @taskAdd.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Add'**
|
||
String get taskAdd;
|
||
|
||
/// No description provided for @taskAddOn.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Add a task on {day}'**
|
||
String taskAddOn(String day);
|
||
|
||
/// No description provided for @taskTitleHint.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Task name'**
|
||
String get taskTitleHint;
|
||
|
||
/// No description provided for @taskDescription.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Description'**
|
||
String get taskDescription;
|
||
|
||
/// No description provided for @taskDescriptionHint.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Description'**
|
||
String get taskDescriptionHint;
|
||
|
||
/// No description provided for @taskComplete.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Mark as done'**
|
||
String get taskComplete;
|
||
|
||
/// No description provided for @taskReopen.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Mark as not done'**
|
||
String get taskReopen;
|
||
|
||
/// No description provided for @taskCompleted.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Task done'**
|
||
String get taskCompleted;
|
||
|
||
/// No description provided for @taskDelete.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Delete task'**
|
||
String get taskDelete;
|
||
|
||
/// No description provided for @taskDeleteTitle.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Delete the task?'**
|
||
String get taskDeleteTitle;
|
||
|
||
/// No description provided for @taskDeleteMessage.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'\"{title}\" is deleted on all your devices.'**
|
||
String taskDeleteMessage(String title);
|
||
|
||
/// No description provided for @taskDeleteWithSubTasks.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'\"{title}\" is deleted with its {count, plural, =1{sub-task} other{{count} sub-tasks}}, on all your devices.'**
|
||
String taskDeleteWithSubTasks(String title, int count);
|
||
|
||
/// No description provided for @taskGone.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'This task was deleted.'**
|
||
String get taskGone;
|
||
|
||
/// No description provided for @todayEmptyTitle.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Nothing due today'**
|
||
String get todayEmptyTitle;
|
||
|
||
/// No description provided for @todayEmptyHint.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Tasks dated today, and those overdue, show here.'**
|
||
String get todayEmptyHint;
|
||
|
||
/// No description provided for @lockedRows.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{count, plural, =1{1 item doesn\'t open on this device.} other{{count} items don\'t open on this device.}}'**
|
||
String lockedRows(int count);
|
||
|
||
/// No description provided for @inboxMissingTitle.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'No Inbox yet'**
|
||
String get inboxMissingTitle;
|
||
|
||
/// No description provided for @inboxMissingHint.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Your Inbox comes with the next sync, or once this device holds your account\'s keys.'**
|
||
String get inboxMissingHint;
|
||
|
||
/// No description provided for @repeatTitle.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Repeat'**
|
||
String get repeatTitle;
|
||
|
||
/// No description provided for @repeatNone.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Doesn\'t repeat'**
|
||
String get repeatNone;
|
||
|
||
/// No description provided for @repeatCustom.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Custom'**
|
||
String get repeatCustom;
|
||
|
||
/// No description provided for @repeatEveryDay.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{count, plural, =1{Every day} other{Every {count} days}}'**
|
||
String repeatEveryDay(int count);
|
||
|
||
/// No description provided for @repeatEveryWeek.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{count, plural, =1{Every week} other{Every {count} weeks}}'**
|
||
String repeatEveryWeek(int count);
|
||
|
||
/// No description provided for @repeatEveryMonth.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{count, plural, =1{Every month} other{Every {count} months}}'**
|
||
String repeatEveryMonth(int count);
|
||
|
||
/// No description provided for @repeatEveryYear.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{count, plural, =1{Every year} other{Every {count} years}}'**
|
||
String repeatEveryYear(int count);
|
||
|
||
/// No description provided for @repeatWeekdays.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Every weekday'**
|
||
String get repeatWeekdays;
|
||
|
||
/// No description provided for @repeatOn.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{rule} on {on}'**
|
||
String repeatOn(String rule, String on);
|
||
|
||
/// No description provided for @repeatMonthDay.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'day {day}'**
|
||
String repeatMonthDay(int day);
|
||
|
||
/// No description provided for @repeatMonthWeek.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'the {nth, select, 1{first} 2{second} 3{third} 4{fourth} other{last}} {weekday}'**
|
||
String repeatMonthWeek(String nth, String weekday);
|
||
|
||
/// No description provided for @repeatFromCompletion.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{rule}, from when it\'s done'**
|
||
String repeatFromCompletion(String rule);
|
||
|
||
/// No description provided for @repeatUntil.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{rule}, until {day}'**
|
||
String repeatUntil(String rule, String day);
|
||
|
||
/// No description provided for @repeatLeft.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{rule}, {count, plural, =0{this time only} =1{once more} other{{count} more times}}'**
|
||
String repeatLeft(String rule, int count);
|
||
|
||
/// No description provided for @repeatEvery.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Every'**
|
||
String get repeatEvery;
|
||
|
||
/// No description provided for @repeatUnitDays.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Days'**
|
||
String get repeatUnitDays;
|
||
|
||
/// No description provided for @repeatUnitWeeks.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Weeks'**
|
||
String get repeatUnitWeeks;
|
||
|
||
/// No description provided for @repeatUnitMonths.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Months'**
|
||
String get repeatUnitMonths;
|
||
|
||
/// No description provided for @repeatUnitYears.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Years'**
|
||
String get repeatUnitYears;
|
||
|
||
/// No description provided for @repeatCountFromCompletion.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Count from when it\'s done'**
|
||
String get repeatCountFromCompletion;
|
||
|
||
/// No description provided for @repeatCountFromCompletionHint.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Not from its date: done late, it comes again as long after.'**
|
||
String get repeatCountFromCompletionHint;
|
||
|
||
/// No description provided for @repeatEnds.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Ends'**
|
||
String get repeatEnds;
|
||
|
||
/// No description provided for @repeatEndsNever.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Never'**
|
||
String get repeatEndsNever;
|
||
|
||
/// No description provided for @repeatEndsOn.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'On a day'**
|
||
String get repeatEndsOn;
|
||
|
||
/// No description provided for @repeatEndsAfter.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{count, plural, =1{After once} other{After {count} times}}'**
|
||
String repeatEndsAfter(int count);
|
||
|
||
/// No description provided for @remindersTitle.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Reminders'**
|
||
String get remindersTitle;
|
||
|
||
/// No description provided for @remindersNone.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'No reminders'**
|
||
String get remindersNone;
|
||
|
||
/// No description provided for @reminderAtTime.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'At its time'**
|
||
String get reminderAtTime;
|
||
|
||
/// No description provided for @reminderMinutesBefore.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{count, plural, =1{1 minute before} other{{count} minutes before}}'**
|
||
String reminderMinutesBefore(int count);
|
||
|
||
/// No description provided for @reminderHoursBefore.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{count, plural, =1{1 hour before} other{{count} hours before}}'**
|
||
String reminderHoursBefore(int count);
|
||
|
||
/// No description provided for @reminderDaysBefore.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{count, plural, =1{1 day before} other{{count} days before}}'**
|
||
String reminderDaysBefore(int count);
|
||
|
||
/// No description provided for @reminderDue.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Due at {time}'**
|
||
String reminderDue(String time);
|
||
|
||
/// No description provided for @remindersChannel.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Task reminders'**
|
||
String get remindersChannel;
|
||
|
||
/// No description provided for @remindersNotAllowed.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Notifications are off for Halkyon Todo: reminders show once you allow them in the system\'s settings.'**
|
||
String get remindersNotAllowed;
|
||
|
||
/// No description provided for @remindersOnThisDevice.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Reminders come on each of your devices that opens your tasks.'**
|
||
String get remindersOnThisDevice;
|
||
|
||
/// No description provided for @reminderBody.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Reminder'**
|
||
String get reminderBody;
|
||
|
||
/// No description provided for @remindersAtTimes.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'At a time of their own'**
|
||
String get remindersAtTimes;
|
||
|
||
/// No description provided for @reminderAddTime.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Remind at a time'**
|
||
String get reminderAddTime;
|
||
|
||
/// No description provided for @reminderRemove.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Remove the reminder'**
|
||
String get reminderRemove;
|
||
|
||
/// No description provided for @durationTitle.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Duration'**
|
||
String get durationTitle;
|
||
|
||
/// No description provided for @durationNone.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'No duration'**
|
||
String get durationNone;
|
||
|
||
/// No description provided for @durationHours.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{hours} h'**
|
||
String durationHours(int hours);
|
||
|
||
/// No description provided for @durationMinutes.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{minutes} min'**
|
||
String durationMinutes(int minutes);
|
||
|
||
/// No description provided for @durationHoursMinutes.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{hours} h {minutes} min'**
|
||
String durationHoursMinutes(int hours, int minutes);
|
||
|
||
/// No description provided for @weekPrevious.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Previous week'**
|
||
String get weekPrevious;
|
||
|
||
/// No description provided for @weekNext.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Following week'**
|
||
String get weekNext;
|
||
|
||
/// No description provided for @searchTitle.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Search'**
|
||
String get searchTitle;
|
||
|
||
/// No description provided for @searchHint.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Search tasks and projects'**
|
||
String get searchHint;
|
||
|
||
/// No description provided for @searchEmpty.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Find a task by the words in its title, its description or its labels. Search runs on this device: your instance can\'t read your tasks.'**
|
||
String get searchEmpty;
|
||
|
||
/// No description provided for @searchNone.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Nothing found for “{query}”.'**
|
||
String searchNone(String query);
|
||
|
||
/// No description provided for @searchProjects.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Projects'**
|
||
String get searchProjects;
|
||
|
||
/// No description provided for @searchTasks.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Tasks'**
|
||
String get searchTasks;
|
||
|
||
/// No description provided for @taskMore.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Task options'**
|
||
String get taskMore;
|
||
|
||
/// No description provided for @taskAddedOn.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Added on {when}'**
|
||
String taskAddedOn(String when);
|
||
|
||
/// No description provided for @taskDuplicate.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Duplicate'**
|
||
String get taskDuplicate;
|
||
|
||
/// No description provided for @taskDuplicated.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Task duplicated'**
|
||
String get taskDuplicated;
|
||
|
||
/// No description provided for @subTasksHideDone.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Hide done sub-tasks'**
|
||
String get subTasksHideDone;
|
||
|
||
/// No description provided for @subTasksShowDone.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Show done sub-tasks'**
|
||
String get subTasksShowDone;
|
||
|
||
/// No description provided for @taskPath.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Where the task is'**
|
||
String get taskPath;
|
||
|
||
/// No description provided for @weekToday.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Back to today'**
|
||
String get weekToday;
|
||
|
||
/// No description provided for @monthPrevious.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Previous month'**
|
||
String get monthPrevious;
|
||
|
||
/// No description provided for @monthNext.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Following month'**
|
||
String get monthNext;
|
||
|
||
/// No description provided for @monthShow.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Show the whole month'**
|
||
String get monthShow;
|
||
|
||
/// No description provided for @monthHide.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Show one week'**
|
||
String get monthHide;
|
||
|
||
/// No description provided for @selectTasks.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Select tasks'**
|
||
String get selectTasks;
|
||
|
||
/// No description provided for @selectionCount.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{count, plural, =0{Select tasks} =1{1 task selected} other{{count} tasks selected}}'**
|
||
String selectionCount(int count);
|
||
|
||
/// No description provided for @selectionEnd.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Stop selecting'**
|
||
String get selectionEnd;
|
||
|
||
/// No description provided for @selectionDate.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Date'**
|
||
String get selectionDate;
|
||
|
||
/// No description provided for @selectionMove.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Move to'**
|
||
String get selectionMove;
|
||
|
||
/// No description provided for @selectionLabels.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Labels'**
|
||
String get selectionLabels;
|
||
|
||
/// No description provided for @selectionPriority.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Priority'**
|
||
String get selectionPriority;
|
||
|
||
/// No description provided for @selectionMore.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'More'**
|
||
String get selectionMore;
|
||
|
||
/// No description provided for @selectionDelete.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{count, plural, =1{Delete 1 task} other{Delete {count} tasks}}'**
|
||
String selectionDelete(int count);
|
||
|
||
/// No description provided for @selectionDeleteTitle.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Delete the tasks?'**
|
||
String get selectionDeleteTitle;
|
||
|
||
/// No description provided for @selectionDeleteMessage.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{count, plural, =1{1 task is deleted with its sub-tasks, on all your devices.} other{{count} tasks are deleted with their sub-tasks, on all your devices.}}'**
|
||
String selectionDeleteMessage(int count);
|
||
|
||
/// No description provided for @selectionDuplicate.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{count, plural, =1{Duplicate 1 task} other{Duplicate {count} tasks}}'**
|
||
String selectionDuplicate(int count);
|
||
|
||
/// No description provided for @selectionComplete.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{count, plural, =1{Complete 1 task} other{Complete {count} tasks}}'**
|
||
String selectionComplete(int count);
|
||
|
||
/// No description provided for @selectionDeadline.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Deadline'**
|
||
String get selectionDeadline;
|
||
|
||
/// No description provided for @tasksCompleted.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{count, plural, =1{Task done} other{{count} tasks done}}'**
|
||
String tasksCompleted(int count);
|
||
|
||
/// No description provided for @swipeSelect.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Select'**
|
||
String get swipeSelect;
|
||
|
||
/// No description provided for @swipeDate.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Date'**
|
||
String get swipeDate;
|
||
|
||
/// No description provided for @tasksMenu.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'More'**
|
||
String get tasksMenu;
|
||
|
||
/// Quick add's + menu, holding Description and Deadline (ADR 0033, D15).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'More'**
|
||
String get quickAddMore;
|
||
|
||
/// Below quick add's title while it has tokens recognised (D15).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Tap a highlighted word, or press Backspace right after it, to keep it as text.'**
|
||
String get quickAddTokenHint;
|
||
|
||
/// Tooltip of quick add's microphone, shown while the title is empty (D29).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Dictate the task'**
|
||
String get quickAddSpeak;
|
||
|
||
/// Tooltip of quick add's microphone while it listens (D29).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Stop listening'**
|
||
String get quickAddStopListening;
|
||
|
||
/// Shown when quick add's microphone can't listen, as with the microphone refused (D29).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'This device can\'t listen now. Check that the app may use the microphone and that speech recognition is on.'**
|
||
String get quickAddSpeechUnavailable;
|
||
|
||
/// Quick add's deadline chip and menu entry (D15).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Deadline'**
|
||
String get deadlineTitle;
|
||
|
||
/// Snack bar after a task was dragged into another place (ADR 0033, D16).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Order changed'**
|
||
String get orderChanged;
|
||
|
||
/// The × left in the add button's place while it is dragged (D16).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Drop here to cancel'**
|
||
String get addTaskCancel;
|
||
|
||
/// Snack bar after a task was dragged onto another day in Upcoming (ADR 0033, D16).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Moved to {day}'**
|
||
String taskMovedTo(String day);
|
||
|
||
/// A project's Display sheet and what it shows (ADR 0033, D17).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Display'**
|
||
String get display;
|
||
|
||
/// A project's Display sheet and what it shows (ADR 0033, D17).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Completed tasks'**
|
||
String get displayCompleted;
|
||
|
||
/// A project's Display sheet and what it shows (ADR 0033, D17).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Sort'**
|
||
String get displaySort;
|
||
|
||
/// A project's Display sheet and what it shows (ADR 0033, D17).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Grouping'**
|
||
String get displayGrouping;
|
||
|
||
/// A project's Display sheet and what it shows (ADR 0033, D17).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Sorting'**
|
||
String get displaySorting;
|
||
|
||
/// A project's Display sheet and what it shows (ADR 0033, D17).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Filter'**
|
||
String get displayFilter;
|
||
|
||
/// A project's Display sheet and what it shows (ADR 0033, D17).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Deadline'**
|
||
String get displayDeadline;
|
||
|
||
/// A project's Display sheet and what it shows (ADR 0033, D17).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Label'**
|
||
String get displayLabel;
|
||
|
||
/// A project's Display sheet and what it shows (ADR 0033, D17).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Reset all'**
|
||
String get displayReset;
|
||
|
||
/// A project's Display sheet and what it shows (ADR 0033, D17).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Done'**
|
||
String get displayDone;
|
||
|
||
/// A project's Display sheet and what it shows (ADR 0033, D17).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'All'**
|
||
String get displayAll;
|
||
|
||
/// A project's Display sheet and what it shows (ADR 0033, D17).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Any'**
|
||
String get displayAny;
|
||
|
||
/// A project's Display sheet and what it shows (ADR 0033, D17).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'None'**
|
||
String get groupingNone;
|
||
|
||
/// A project's Display sheet and what it shows (ADR 0033, D17).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Date'**
|
||
String get groupingDate;
|
||
|
||
/// A project's Display sheet and what it shows (ADR 0033, D17).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Deadline'**
|
||
String get groupingDeadline;
|
||
|
||
/// A project's Display sheet and what it shows (ADR 0033, D17).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Added date'**
|
||
String get groupingAdded;
|
||
|
||
/// A project's Display sheet and what it shows (ADR 0033, D17).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Priority'**
|
||
String get groupingPriority;
|
||
|
||
/// A project's Display sheet and what it shows (ADR 0033, D17).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Label'**
|
||
String get groupingLabel;
|
||
|
||
/// A project's Display sheet and what it shows (ADR 0033, D17).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Manual'**
|
||
String get sortingManual;
|
||
|
||
/// A project's Display sheet and what it shows (ADR 0033, D17).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Name'**
|
||
String get sortingName;
|
||
|
||
/// A project's Display sheet and what it shows (ADR 0033, D17).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Date'**
|
||
String get sortingDate;
|
||
|
||
/// A project's Display sheet and what it shows (ADR 0033, D17).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Deadline'**
|
||
String get sortingDeadline;
|
||
|
||
/// A project's Display sheet and what it shows (ADR 0033, D17).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Added date'**
|
||
String get sortingAdded;
|
||
|
||
/// A project's Display sheet and what it shows (ADR 0033, D17).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Priority'**
|
||
String get sortingPriority;
|
||
|
||
/// A project's Display sheet and what it shows (ADR 0033, D17).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Today'**
|
||
String get rangeToday;
|
||
|
||
/// A project's Display sheet and what it shows (ADR 0033, D17).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'This week'**
|
||
String get rangeThisWeek;
|
||
|
||
/// A project's Display sheet and what it shows (ADR 0033, D17).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Next 7 days'**
|
||
String get rangeNext7;
|
||
|
||
/// A project's Display sheet and what it shows (ADR 0033, D17).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'This month'**
|
||
String get rangeThisMonth;
|
||
|
||
/// A project's Display sheet and what it shows (ADR 0033, D17).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Next 30 days'**
|
||
String get rangeNext30;
|
||
|
||
/// A project's Display sheet and what it shows (ADR 0033, D17).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'No date'**
|
||
String get rangeNoDate;
|
||
|
||
/// A project's Display sheet and what it shows (ADR 0033, D17).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'No deadline'**
|
||
String get rangeNoDeadline;
|
||
|
||
/// A project's Display sheet and what it shows (ADR 0033, D17).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Nothing matches'**
|
||
String get viewNothingTitle;
|
||
|
||
/// A project's Display sheet and what it shows (ADR 0033, D17).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'This view\'s filters leave out every task here. Display changes them.'**
|
||
String get viewNothingHint;
|
||
|
||
/// A project's Display sheet and what it shows (ADR 0033, D17).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Save'**
|
||
String get displaySave;
|
||
|
||
/// A project's Display sheet and what it shows (ADR 0033, D17).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Cancel'**
|
||
String get displayCancel;
|
||
|
||
/// A project's group of tasks without a label (ADR 0033, D17).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'No label'**
|
||
String get groupNoLabel;
|
||
|
||
/// A project's layout in its Display, and its board's columns (ADR 0033, D17).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Layout'**
|
||
String get layoutTitle;
|
||
|
||
/// A project's layout in its Display, and its board's columns (ADR 0033, D17).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'List'**
|
||
String get layoutList;
|
||
|
||
/// No description provided for @taskColumnDescription.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Description'**
|
||
String get taskColumnDescription;
|
||
|
||
/// No description provided for @taskColumnCreated.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Created'**
|
||
String get taskColumnCreated;
|
||
|
||
/// No description provided for @tableColumns.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Columns'**
|
||
String get tableColumns;
|
||
|
||
/// No description provided for @tableDetails.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Task details'**
|
||
String get tableDetails;
|
||
|
||
/// No description provided for @tableSubTasks.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Sub-tasks'**
|
||
String get tableSubTasks;
|
||
|
||
/// No description provided for @tableReminders.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Reminders'**
|
||
String get tableReminders;
|
||
|
||
/// No description provided for @tableFilter.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Filter'**
|
||
String get tableFilter;
|
||
|
||
/// No description provided for @tableSortUp.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Sort ascending'**
|
||
String get tableSortUp;
|
||
|
||
/// No description provided for @tableSortDown.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Sort descending'**
|
||
String get tableSortDown;
|
||
|
||
/// No description provided for @tableMoveLeft.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Move left'**
|
||
String get tableMoveLeft;
|
||
|
||
/// No description provided for @tableMoveRight.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Move right'**
|
||
String get tableMoveRight;
|
||
|
||
/// No description provided for @tableHide.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Hide column'**
|
||
String get tableHide;
|
||
|
||
/// No description provided for @layoutTable.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Table'**
|
||
String get layoutTable;
|
||
|
||
/// No description provided for @taskColumnTask.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Task'**
|
||
String get taskColumnTask;
|
||
|
||
/// No description provided for @taskColumnDate.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Date'**
|
||
String get taskColumnDate;
|
||
|
||
/// No description provided for @taskColumnDeadline.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Deadline'**
|
||
String get taskColumnDeadline;
|
||
|
||
/// A project's layout in its Display, and its board's columns (ADR 0033, D17).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Board'**
|
||
String get layoutBoard;
|
||
|
||
/// A project's layout in its Display, and its board's columns (ADR 0033, D17).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'(No section)'**
|
||
String get boardNoSection;
|
||
|
||
/// A project's Calendar layout and its Display (ADR 0033, D17).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Calendar'**
|
||
String get layoutCalendar;
|
||
|
||
/// A project's Calendar layout and its Display (ADR 0033, D17).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Future occurrences'**
|
||
String get displayOccurrences;
|
||
|
||
/// A project's Calendar layout and its Display (ADR 0033, D17).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'No date'**
|
||
String get calendarNoDate;
|
||
|
||
/// A project's Calendar layout and its Display (ADR 0033, D17).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Every task here has a date'**
|
||
String get calendarNoDateEmpty;
|
||
|
||
/// A project's Calendar layout and its Display (ADR 0033, D17).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Tasks of this project without a date show here.'**
|
||
String get calendarNoDateHint;
|
||
|
||
/// A project's Calendar layout and its Display (ADR 0033, D17).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'A later time of a repeating task'**
|
||
String get taskLater;
|
||
|
||
/// Upcoming's Display and its 3-day grid (ADR 0033, D17).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Smart'**
|
||
String get sortingSmart;
|
||
|
||
/// Upcoming's Display and its 3-day grid (ADR 0033, D17).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Agenda'**
|
||
String get layoutAgenda;
|
||
|
||
/// Upcoming's Display and its 3-day grid (ADR 0033, D17).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'3-day'**
|
||
String get layoutThreeDay;
|
||
|
||
/// Upcoming's Display and its 3-day grid (ADR 0033, D17).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Colouring'**
|
||
String get displayColoring;
|
||
|
||
/// Upcoming's Display and its 3-day grid (ADR 0033, D17).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Project'**
|
||
String get coloringProject;
|
||
|
||
/// Upcoming's Display and its 3-day grid (ADR 0033, D17).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'All day'**
|
||
String get allDay;
|
||
|
||
/// Upcoming's Display and its 3-day grid (ADR 0033, D17).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Earlier days'**
|
||
String get daysPrevious;
|
||
|
||
/// Upcoming's Display and its 3-day grid (ADR 0033, D17).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Later days'**
|
||
String get daysNext;
|
||
|
||
/// Settings of tasks and reminders (ADR 0033, D4).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Tasks'**
|
||
String get settingsTasks;
|
||
|
||
/// Settings of tasks and reminders (ADR 0033, D4).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Start the week on'**
|
||
String get weekStartTitle;
|
||
|
||
/// Settings of tasks and reminders (ADR 0033, D4).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'As the language has it'**
|
||
String get weekStartLanguage;
|
||
|
||
/// Settings of tasks and reminders (ADR 0033, D4).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Reset sub-tasks'**
|
||
String get resetSubTasksTitle;
|
||
|
||
/// Settings of tasks and reminders (ADR 0033, D4).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Open them again when a recurring task is done'**
|
||
String get resetSubTasksHint;
|
||
|
||
/// Settings of tasks, on a desktop alone: whether a short chime plays as a task is marked done (decided 10 Nov 2026).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Sound when done'**
|
||
String get completionSoundTitle;
|
||
|
||
/// Explains completionSoundTitle.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'A short chime as a task is marked done'**
|
||
String get completionSoundHint;
|
||
|
||
/// Settings of tasks and reminders (ADR 0033, D4).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Automatic reminder'**
|
||
String get automaticReminderTitle;
|
||
|
||
/// Settings of tasks and reminders (ADR 0033, D4).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'For a task given a time, unless it has reminders of its own'**
|
||
String get automaticReminderHint;
|
||
|
||
/// Settings of tasks and reminders (ADR 0033, D4).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'None'**
|
||
String get automaticReminderNone;
|
||
|
||
/// Settings of tasks and reminders (ADR 0033, D4).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'When snoozed'**
|
||
String get snoozeTitle;
|
||
|
||
/// Settings of tasks and reminders (ADR 0033, D4).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{count, plural, =1{1 minute} other{{count} minutes}}'**
|
||
String snoozeMinutes(int count);
|
||
|
||
/// Settings of tasks and reminders (ADR 0033, D4).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Snooze {count} min'**
|
||
String reminderSnooze(int count);
|
||
|
||
/// Settings' Reminders while notifications are off and reminders are planned (ADR 0033, D31).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Notifications are off'**
|
||
String get notificationsOffTitle;
|
||
|
||
/// Settings' Reminders while notifications are off and reminders are planned (ADR 0033, D31).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Reminders can\'t show until Halkyon Todo may notify you.'**
|
||
String get notificationsOffHint;
|
||
|
||
/// Settings' Reminders while notifications are off and reminders are planned (ADR 0033, D31).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Turn on'**
|
||
String get notificationsTurnOn;
|
||
|
||
/// A project's Calendar as a month on wide windows (ADR 0033, D17): a day's tasks that don't fit.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{count} more'**
|
||
String monthMore(int count);
|
||
|
||
/// intl's DateFormat pattern of a day's heading in Today and Upcoming, as Todoist's ("Tuesday, 3 Nov"): EEEE the weekday, d the day, MMM the short month.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'EEEE, d MMM'**
|
||
String get dayHeadingPattern;
|
||
|
||
/// No description provided for @overdueHide.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Hide what is overdue'**
|
||
String get overdueHide;
|
||
|
||
/// No description provided for @overdueShow.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Show what is overdue'**
|
||
String get overdueShow;
|
||
|
||
/// No description provided for @paneResize.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Resize'**
|
||
String get paneResize;
|
||
|
||
/// Today's app bar in its Calendar layout (ADR 0033, D30, as Todoist's): shows or hides the Plan, counting the tasks it holds.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Plan: {count}'**
|
||
String planButton(int count);
|
||
|
||
/// Today's Plan beside or below its day of hours (ADR 0033, D30).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Plan'**
|
||
String get planTitle;
|
||
|
||
/// Tooltip of Today's Plan button while the Plan is hidden (ADR 0033, D30).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Show the Plan'**
|
||
String get planShow;
|
||
|
||
/// Tooltip of Today's Plan button and the Plan's close button while it shows (ADR 0033, D30).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Hide the Plan'**
|
||
String get planHide;
|
||
|
||
/// No description provided for @planNoDate.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'No date'**
|
||
String get planNoDate;
|
||
|
||
/// Today's Plan (ADR 0033, D30): the group of today's tasks without a time, to be given one.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'To plan'**
|
||
String get planToPlan;
|
||
|
||
/// Today's Plan (ADR 0033, D30, Todoist's word): the group of today's tasks with a time.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Time-blocked'**
|
||
String get planTimeBlocked;
|
||
|
||
/// Today's Plan (ADR 0033, D30) while it holds no task.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Nothing to plan'**
|
||
String get planEmpty;
|
||
|
||
/// Today's Plan (ADR 0033, D30) while a block of the day is dragged over it.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Drop here to take its time away'**
|
||
String get planDropHint;
|
||
|
||
/// Tooltip folding a group of Today's Plan (ADR 0033, D30).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Hide {group}'**
|
||
String planGroupHide(String group);
|
||
|
||
/// Tooltip unfolding a group of Today's Plan (ADR 0033, D30).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Show {group}'**
|
||
String planGroupShow(String group);
|
||
|
||
/// Today's Plan's project filter (ADR 0033, D30) while it keeps every project, and the button putting it back.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'All projects'**
|
||
String get planAllProjects;
|
||
|
||
/// Today's Plan's project filter (ADR 0033, D30) while it keeps several projects.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{count, plural, =1{1 project} other{{count} projects}}'**
|
||
String planProjectsCount(int count);
|
||
|
||
/// Today's Plan's project filter (ADR 0033, D30): its search field's hint and its name.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Filter by project'**
|
||
String get planFilterTitle;
|
||
|
||
/// Quick add's + menu and its button (ADR 0033, D32).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Location'**
|
||
String get locationTitle;
|
||
|
||
/// A task's Where, and the picker's button.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Add location'**
|
||
String get locationAdd;
|
||
|
||
/// The heading of a task's places.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Where'**
|
||
String get locationWhere;
|
||
|
||
/// Under a task's Where, with several places: they are alternatives.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Any of these'**
|
||
String get locationAnyOf;
|
||
|
||
/// The location picker's search field.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'City or district, then the name'**
|
||
String get locationSearchHint;
|
||
|
||
/// Quick add, as + is typed.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Search for a place'**
|
||
String get locationSearchAny;
|
||
|
||
/// Quick add, as +something is typed.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Search for “{query}”'**
|
||
String locationSearchFor(String query);
|
||
|
||
/// The location picker without a place search.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Search isn\'t available here. Move the map and tap to place a pin.'**
|
||
String get locationSearchUnavailable;
|
||
|
||
/// The location picker after a failed search.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'The search didn\'t work. Try again.'**
|
||
String get locationSearchFailed;
|
||
|
||
/// The location picker, a search without results.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Nothing found'**
|
||
String get locationNoResults;
|
||
|
||
/// The location picker's places of the person's tasks.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Recent'**
|
||
String get locationRecent;
|
||
|
||
/// Above the places around the pin in the location picker.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Or choose a nearby place'**
|
||
String get locationNearby;
|
||
|
||
/// The location picker when asking what is around the pin failed.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Couldn\'t look up what\'s around here'**
|
||
String get locationNearbyFailed;
|
||
|
||
/// Beside the location picker's message that asking what is around the pin failed.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Try again'**
|
||
String get locationTryAgain;
|
||
|
||
/// The location picker's sheet while the map is too far out for a spot.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Zoom in and move the map to a spot'**
|
||
String get locationPickHint;
|
||
|
||
/// The location picker's compass, turning the map back to north.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Point north'**
|
||
String get locationNorth;
|
||
|
||
/// What a place found is, from OpenStreetMap's value; empty for any other.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{kind, select, city{City} town{Town} village{Village} hamlet{Hamlet} isolated_dwelling{Isolated dwelling} locality{Locality} suburb{District} neighbourhood{Neighbourhood} residential{Street} house{Address} supermarket{Supermarket} convenience{Shop} bakery{Bakery} butcher{Butcher} chemist{Chemist} pharmacy{Pharmacy} doctors{Doctor} dentist{Dentist} hospital{Hospital} restaurant{Restaurant} cafe{Café} fast_food{Fast food} bar{Bar} pub{Pub} fuel{Petrol station} bank{Bank} post_office{Post office} school{School} kindergarten{Nursery} library{Library} station{Station} bus_stop{Bus stop} hotel{Hotel} park{Park} other{}}'**
|
||
String locationKind(String kind);
|
||
|
||
/// The location picker's button zooming the map in.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Zoom in'**
|
||
String get locationZoomIn;
|
||
|
||
/// The location picker's button zooming the map out.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Zoom out'**
|
||
String get locationZoomOut;
|
||
|
||
/// The name of a pin placed by hand where nothing names the spot.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Pinned place'**
|
||
String get locationPin;
|
||
|
||
/// The name field of a pin placed by hand.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Name'**
|
||
String get locationName;
|
||
|
||
/// The map's button.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'My position'**
|
||
String get locationMine;
|
||
|
||
/// A location's reminder.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'No reminder'**
|
||
String get locationRemindNone;
|
||
|
||
/// A location's reminder.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'On arriving'**
|
||
String get locationRemindArrive;
|
||
|
||
/// A location's reminder.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'On leaving'**
|
||
String get locationRemindLeave;
|
||
|
||
/// A task's location's menu.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Remove'**
|
||
String get locationRemove;
|
||
|
||
/// No description provided for @locationWatching.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Watching your places'**
|
||
String get locationWatching;
|
||
|
||
/// No description provided for @locationWatchingChannel.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Places watched'**
|
||
String get locationWatchingChannel;
|
||
|
||
/// Before asking for the position in the background.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Allow location all the time'**
|
||
String get locationAccessTitle;
|
||
|
||
/// Before asking for the position in the background.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'To remind you when you arrive or leave, Halkyon Todo needs your position while it is closed too. It stays on this device. Next, choose “Allow all the time”.'**
|
||
String get locationAccessHint;
|
||
|
||
/// Before asking for the position in the background.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Continue'**
|
||
String get locationAccessGo;
|
||
|
||
/// Settings' Reminders while places are planned and may not be watched.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Location is off for reminders'**
|
||
String get locationOffTitle;
|
||
|
||
/// Settings' Reminders while places are planned and may not be watched.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Reminders at a place need “Allow all the time”.'**
|
||
String get locationOffHint;
|
||
|
||
/// A reminder on arriving, below the task's title.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'You\'re at {name}'**
|
||
String locationArrived(String name);
|
||
|
||
/// A reminder on leaving, below the task's title.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'You\'ve left {name}'**
|
||
String locationLeft(String name);
|
||
|
||
/// A list's menu: deletes its done tasks, with an Undo (the developer's review, 9 Nov 2026).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Delete completed tasks'**
|
||
String get tasksDeleteCompleted;
|
||
|
||
/// The snack bar after Delete completed tasks, with its Undo.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{count, plural, =1{1 completed task deleted} other{{count} completed tasks deleted}}'**
|
||
String tasksCompletedDeleted(int count);
|
||
|
||
/// The project's editor: the calendar linked to it, whose events show beside its tasks (ADR 0033, D39).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Linked calendar'**
|
||
String get projectCalendarTitle;
|
||
|
||
/// The project's editor: the field for the calendar's feed address (ADR 0033, D39).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Calendar address (iCal)'**
|
||
String get projectCalendarAddress;
|
||
|
||
/// The project's editor, below the calendar's address (ADR 0033, D39).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Its events show beside this project\'s tasks, read-only. Each of your devices fetches it itself.'**
|
||
String get projectCalendarHelp;
|
||
|
||
/// The project's editor: an address no feed can be fetched from (ADR 0033, D39).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'An address starting with https:// or webcal://'**
|
||
String get projectCalendarInvalid;
|
||
|
||
/// An event's details: which project's calendar it comes from (ADR 0033, D39).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'From {project}\'s calendar'**
|
||
String eventFromCalendar(String project);
|
||
|
||
/// A task's weather it needs, in its details and the sheet choosing it (ADR 0033, D40).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Weather'**
|
||
String get weatherTitle;
|
||
|
||
/// A task needs no rain or snow over its hours (D40).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Dry'**
|
||
String get weatherNeedDry;
|
||
|
||
/// A task needs a clear or partly cloudy sky (D40).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Sunny'**
|
||
String get weatherNeedSunny;
|
||
|
||
/// A task needs little wind (D40).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Calm'**
|
||
String get weatherNeedCalm;
|
||
|
||
/// The temperatures a task needs (D40).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Temperature'**
|
||
String get weatherTemperature;
|
||
|
||
/// No temperature needed (D40).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Any'**
|
||
String get weatherAnyTemperature;
|
||
|
||
/// From 1 °C on (D40).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Not freezing'**
|
||
String get weatherNotFreezing;
|
||
|
||
/// From 18 °C on (D40).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Warm'**
|
||
String get weatherWarm;
|
||
|
||
/// Temperatures typed (D40).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'From … to …'**
|
||
String get weatherOwnRange;
|
||
|
||
/// The lowest temperature typed, in °C (D40).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'From'**
|
||
String get weatherFromLabel;
|
||
|
||
/// The highest temperature typed, in °C (D40).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'To'**
|
||
String get weatherToLabel;
|
||
|
||
/// A task needs at least this temperature (D40).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'from {degrees} °C'**
|
||
String weatherFrom(String degrees);
|
||
|
||
/// A task needs at most this temperature (D40).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'up to {degrees} °C'**
|
||
String weatherUpTo(String degrees);
|
||
|
||
/// A range of temperatures (D40).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{low}–{high} °C'**
|
||
String weatherBetween(String low, String high);
|
||
|
||
/// Closes the sheet of a task's weather, keeping what was chosen (D40).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Done'**
|
||
String get weatherDone;
|
||
|
||
/// Under a task's weather where its day's forecast gives what it needs (D40).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'The forecast fits'**
|
||
String get weatherFits;
|
||
|
||
/// Under a task's weather, and its row's mark, where its day's forecast doesn't give what it needs (D40).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'The forecast doesn\'t fit: {missed}'**
|
||
String weatherDoesNotFit(String missed);
|
||
|
||
/// What of the weather a task needs its forecast misses (D40).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{need, select, dry{rain} sunny{clouds} temperature{temperature} calm{wind} other{weather}}'**
|
||
String weatherMiss(String need);
|
||
|
||
/// A day's sky by its forecast, from Open-Meteo's weather code (D40).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{conditions, select, clear{Clear} partlyCloudy{Partly cloudy} cloudy{Overcast} fog{Fog} drizzle{Drizzle} rain{Rain} freezingRain{Freezing rain} snow{Snow} rainShowers{Showers} snowShowers{Snow showers} thunderstorm{Thunderstorm} other{Weather}}'**
|
||
String weatherConditions(String conditions);
|
||
|
||
/// The date picker's days whose forecast gives what the task needs (D40).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Days the weather fits'**
|
||
String get weatherFittingDays;
|
||
|
||
/// The date picker, where no day of the forecast fits (D40).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'No day of the forecast fits'**
|
||
String get weatherNoFittingDay;
|
||
|
||
/// Settings' group of the forecast (D40).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Weather'**
|
||
String get weatherSettings;
|
||
|
||
/// Settings: the place days' forecasts and tasks' weather are for (D40).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Place of the forecast'**
|
||
String get weatherPlace;
|
||
|
||
/// Settings, where no place is set (D40).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'None: each task\'s own place'**
|
||
String get weatherPlaceNone;
|
||
|
||
/// Settings, below the place of the forecast (D40).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Days show this place\'s forecast, and tasks tied to the weather are judged by it. Your device\'s location is never used for it.'**
|
||
String get weatherPlaceHelp;
|
||
|
||
/// Settings: takes the place of the forecast away (D40).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Remove the place'**
|
||
String get weatherPlaceRemove;
|
||
|
||
/// Settings, where the instance's operator switched the weather off (D40).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'This instance gives no forecasts.'**
|
||
String get weatherOff;
|
||
|
||
/// The credit Open-Meteo's licence asks for next to its data (D40).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Weather data by Open-Meteo.com'**
|
||
String get weatherBy;
|
||
|
||
/// The paperclip button adding files to a task's description or a comment.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Attach files'**
|
||
String get attachmentAdd;
|
||
|
||
/// The file type offered in the dialog picking files to attach.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Any file'**
|
||
String get attachmentAnyFile;
|
||
|
||
/// Said when a file picked to attach is too large.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{name} is larger than 100 MB.'**
|
||
String attachmentTooLarge(String name);
|
||
|
||
/// Said when a file couldn't be attached (no keys on this device, or it failed).
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{name} wasn\'t attached.'**
|
||
String attachmentNotAdded(String name);
|
||
|
||
/// The tooltip of an attachment not on this device yet, fetched when tapped.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Download'**
|
||
String get attachmentDownload;
|
||
|
||
/// Said when an attachment couldn't be downloaded.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'This file can\'t be fetched right now. Are you online?'**
|
||
String get attachmentUnavailable;
|
||
|
||
/// The menu entry saving an attachment where the person chooses.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Save a copy'**
|
||
String get attachmentSave;
|
||
|
||
/// The menu entry removing an attachment, and the button removing a file picked for a comment before it is sent.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Remove'**
|
||
String get attachmentRemove;
|
||
|
||
/// The title of the question before an attachment is removed.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'Remove this file?'**
|
||
String get attachmentRemoveTitle;
|
||
|
||
/// The tooltip of an attachment's menu.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'File options'**
|
||
String get attachmentMenu;
|
||
|
||
/// An attachment's size in kilobytes.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{size} KB'**
|
||
String attachmentSizeKb(int size);
|
||
|
||
/// An attachment's size in megabytes, with one decimal.
|
||
///
|
||
/// In en, this message translates to:
|
||
/// **'{size} MB'**
|
||
String attachmentSizeMb(String size);
|
||
}
|
||
|
||
class _AppLocalizationsDelegate
|
||
extends LocalizationsDelegate<AppLocalizations> {
|
||
const _AppLocalizationsDelegate();
|
||
|
||
@override
|
||
Future<AppLocalizations> load(Locale locale) {
|
||
return SynchronousFuture<AppLocalizations>(lookupAppLocalizations(locale));
|
||
}
|
||
|
||
@override
|
||
bool isSupported(Locale locale) =>
|
||
<String>['de', 'en'].contains(locale.languageCode);
|
||
|
||
@override
|
||
bool shouldReload(_AppLocalizationsDelegate old) => false;
|
||
}
|
||
|
||
AppLocalizations lookupAppLocalizations(Locale locale) {
|
||
// Lookup logic when language+country codes are specified.
|
||
switch (locale.languageCode) {
|
||
case 'en':
|
||
{
|
||
switch (locale.countryCode) {
|
||
case 'GB':
|
||
return AppLocalizationsEnGb();
|
||
case 'US':
|
||
return AppLocalizationsEnUs();
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
|
||
// Lookup logic when only language code is specified.
|
||
switch (locale.languageCode) {
|
||
case 'de':
|
||
return AppLocalizationsDe();
|
||
case 'en':
|
||
return AppLocalizationsEn();
|
||
}
|
||
|
||
throw FlutterError(
|
||
'AppLocalizations.delegate failed to load unsupported locale "$locale". This is likely '
|
||
'an issue with the localizations generation tool. Please file an issue '
|
||
'on GitHub with a reproducible sample app and the gen-l10n configuration '
|
||
'that was used.',
|
||
);
|
||
}
|