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(context, AppLocalizations)!; } static const LocalizationsDelegate 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> localizationsDelegates = >[ delegate, GlobalMaterialLocalizations.delegate, GlobalCupertinoLocalizations.delegate, GlobalWidgetsLocalizations.delegate, ]; /// A list of this localizations delegate's supported locales. static const List supportedLocales = [ 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; /// 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 @completedShow. /// /// In en, this message translates to: /// **'Show done tasks'** String get completedShow; /// No description provided for @completedHide. /// /// In en, this message translates to: /// **'Hide done tasks'** String get completedHide; /// 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; /// 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: /// **'New 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); /// 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: /// **'New 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: /// **'What\'s to be done?'** 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; } class _AppLocalizationsDelegate extends LocalizationsDelegate { const _AppLocalizationsDelegate(); @override Future load(Locale locale) { return SynchronousFuture(lookupAppLocalizations(locale)); } @override bool isSupported(Locale locale) => ['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.', ); }