Letzter Roadmap-Punkt von V3. Foto-basierte Lichtverhältnis-Analyse pro Stellplatz (Cloud Function analyzeLocation) und darauf aufbauende, rein textbasierte Eignungs-Bewertung einer Pflanze (assessPlantFit) — beides ausschließlich auf Abruf, nicht automatisch (Kostenkontrolle, eigener Anthropic-Key). Neue Stellplatz-Detailseite, Verlinkung im Pflanzen-Detail, Erkennung veralteter Bewertungen bei Umzug/Neuanalyse. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
1064 lines
31 KiB
Dart
1064 lines
31 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';
|
||
|
||
// 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 'generated/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')];
|
||
|
||
/// No description provided for @appTitle.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'LeafItToMe'**
|
||
String get appTitle;
|
||
|
||
/// No description provided for @menuToday.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Heute'**
|
||
String get menuToday;
|
||
|
||
/// No description provided for @menuPlants.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Meine Pflanzen'**
|
||
String get menuPlants;
|
||
|
||
/// No description provided for @menuLocations.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Stellplätze'**
|
||
String get menuLocations;
|
||
|
||
/// No description provided for @menuHousehold.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Haushalt'**
|
||
String get menuHousehold;
|
||
|
||
/// No description provided for @menuSettings.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Einstellungen'**
|
||
String get menuSettings;
|
||
|
||
/// No description provided for @todayTitle.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Heute'**
|
||
String get todayTitle;
|
||
|
||
/// No description provided for @todayAllDone.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Alles versorgt!'**
|
||
String get todayAllDone;
|
||
|
||
/// No description provided for @todayEmptyHint.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Heute stehen keine Aufgaben an.'**
|
||
String get todayEmptyHint;
|
||
|
||
/// No description provided for @todayNextTask.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Nächste Aufgabe: {date}'**
|
||
String todayNextTask(String date);
|
||
|
||
/// No description provided for @todayOpenTasks.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'{count, plural, one{1 offene Aufgabe} other{{count} offene Aufgaben}}'**
|
||
String todayOpenTasks(int count);
|
||
|
||
/// No description provided for @taskWaterTitle.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'{name} gießen'**
|
||
String taskWaterTitle(String name);
|
||
|
||
/// No description provided for @taskFertilizeTitle.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'{name} düngen'**
|
||
String taskFertilizeTitle(String name);
|
||
|
||
/// No description provided for @taskDueToday.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Heute fällig'**
|
||
String get taskDueToday;
|
||
|
||
/// No description provided for @taskOverdue.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'{days, plural, one{Seit gestern überfällig} other{Seit {days} Tagen überfällig}}'**
|
||
String taskOverdue(int days);
|
||
|
||
/// No description provided for @taskDone.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Erledigt'**
|
||
String get taskDone;
|
||
|
||
/// No description provided for @taskDoneConfirmation.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'{name} als erledigt markiert.'**
|
||
String taskDoneConfirmation(String name);
|
||
|
||
/// No description provided for @addPlant.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Pflanze hinzufügen'**
|
||
String get addPlant;
|
||
|
||
/// No description provided for @plantsTitle.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Meine Pflanzen'**
|
||
String get plantsTitle;
|
||
|
||
/// No description provided for @plantsEmpty.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Noch keine Pflanzen angelegt.'**
|
||
String get plantsEmpty;
|
||
|
||
/// No description provided for @plantsEmptyHint.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Lege deine erste Pflanze über den Button unten an.'**
|
||
String get plantsEmptyHint;
|
||
|
||
/// No description provided for @plantDetailTitle.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Pflanzenprofil'**
|
||
String get plantDetailTitle;
|
||
|
||
/// No description provided for @nicknameLabel.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Spitzname'**
|
||
String get nicknameLabel;
|
||
|
||
/// No description provided for @speciesLabel.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Pflanzenart'**
|
||
String get speciesLabel;
|
||
|
||
/// No description provided for @locationLabel.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Stellplatz'**
|
||
String get locationLabel;
|
||
|
||
/// No description provided for @locationNone.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Kein Stellplatz'**
|
||
String get locationNone;
|
||
|
||
/// No description provided for @wateringEvery.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Gießen: alle {days} Tage'**
|
||
String wateringEvery(int days);
|
||
|
||
/// No description provided for @fertilizingEvery.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Düngen: alle {days} Tage'**
|
||
String fertilizingEvery(int days);
|
||
|
||
/// No description provided for @wateringIntervalLabel.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Gieß-Intervall (Tage)'**
|
||
String get wateringIntervalLabel;
|
||
|
||
/// No description provided for @fertilizingIntervalLabel.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Dünge-Intervall (Tage)'**
|
||
String get fertilizingIntervalLabel;
|
||
|
||
/// No description provided for @repottingIntervalLabel.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Umtopf-Intervall (Monate)'**
|
||
String get repottingIntervalLabel;
|
||
|
||
/// No description provided for @repottingIntervalHelper.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Leer lassen, wenn du keine Umtopf-Erinnerung möchtest.'**
|
||
String get repottingIntervalHelper;
|
||
|
||
/// No description provided for @lastRepottedLabel.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Zuletzt umgetopft'**
|
||
String get lastRepottedLabel;
|
||
|
||
/// No description provided for @pickDate.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Datum wählen'**
|
||
String get pickDate;
|
||
|
||
/// No description provided for @taskRepotTitle.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'{name} umtopfen'**
|
||
String taskRepotTitle(String name);
|
||
|
||
/// No description provided for @repottingEvery.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Umtopfen: alle {months} Monate'**
|
||
String repottingEvery(int months);
|
||
|
||
/// No description provided for @lastRepotted.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Zuletzt umgetopft: {date}'**
|
||
String lastRepotted(String date);
|
||
|
||
/// No description provided for @lastWatered.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Zuletzt gegossen: {date}'**
|
||
String lastWatered(String date);
|
||
|
||
/// No description provided for @lastFertilized.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Zuletzt gedüngt: {date}'**
|
||
String lastFertilized(String date);
|
||
|
||
/// No description provided for @never.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'noch nie'**
|
||
String get never;
|
||
|
||
/// No description provided for @save.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Speichern'**
|
||
String get save;
|
||
|
||
/// No description provided for @cancel.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Abbrechen'**
|
||
String get cancel;
|
||
|
||
/// No description provided for @delete.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Löschen'**
|
||
String get delete;
|
||
|
||
/// No description provided for @deletePlantQuestion.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'{name} wirklich löschen?'**
|
||
String deletePlantQuestion(String name);
|
||
|
||
/// No description provided for @requiredField.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Bitte ausfüllen'**
|
||
String get requiredField;
|
||
|
||
/// No description provided for @invalidNumber.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Bitte eine Zahl größer 0 eingeben'**
|
||
String get invalidNumber;
|
||
|
||
/// No description provided for @locationsTitle.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Stellplätze'**
|
||
String get locationsTitle;
|
||
|
||
/// No description provided for @locationsEmpty.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Noch keine Stellplätze angelegt.'**
|
||
String get locationsEmpty;
|
||
|
||
/// No description provided for @addLocation.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Stellplatz hinzufügen'**
|
||
String get addLocation;
|
||
|
||
/// No description provided for @locationNameLabel.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Name des Stellplatzes'**
|
||
String get locationNameLabel;
|
||
|
||
/// No description provided for @locationPlantCount.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'{count, plural, =0{Keine Pflanzen} one{1 Pflanze} other{{count} Pflanzen}}'**
|
||
String locationPlantCount(int count);
|
||
|
||
/// No description provided for @locationAnalysisButton.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Standort analysieren'**
|
||
String get locationAnalysisButton;
|
||
|
||
/// No description provided for @locationAnalyzing.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Standort wird analysiert …'**
|
||
String get locationAnalyzing;
|
||
|
||
/// No description provided for @locationAnalysisEmpty.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Noch keine Analyse. Foto aufnehmen, damit die KI die Lichtverhältnisse einschätzen kann.'**
|
||
String get locationAnalysisEmpty;
|
||
|
||
/// No description provided for @locationAnalysisFailed.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Die Analyse hat nicht geklappt. Bitte versuche es erneut.'**
|
||
String get locationAnalysisFailed;
|
||
|
||
/// No description provided for @locationAssignedPlants.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Zugeordnete Pflanzen'**
|
||
String get locationAssignedPlants;
|
||
|
||
/// No description provided for @locationNoPlantsAssigned.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Diesem Stellplatz ist noch keine Pflanze zugeordnet.'**
|
||
String get locationNoPlantsAssigned;
|
||
|
||
/// No description provided for @householdTitle.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Haushalt'**
|
||
String get householdTitle;
|
||
|
||
/// No description provided for @myHouseholds.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Meine Haushalte'**
|
||
String get myHouseholds;
|
||
|
||
/// No description provided for @activeHouseholdLabel.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Aktiv'**
|
||
String get activeHouseholdLabel;
|
||
|
||
/// No description provided for @switchHouseholdSuccess.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Du bist jetzt im Haushalt „{name}“.'**
|
||
String switchHouseholdSuccess(String name);
|
||
|
||
/// No description provided for @householdMembers.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Mitglieder'**
|
||
String get householdMembers;
|
||
|
||
/// No description provided for @roleMember.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Mitglied'**
|
||
String get roleMember;
|
||
|
||
/// No description provided for @roleSitter.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Pflanzen-Sitter'**
|
||
String get roleSitter;
|
||
|
||
/// No description provided for @ownerLabel.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Besitzer'**
|
||
String get ownerLabel;
|
||
|
||
/// No description provided for @ownerIsMe.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Dein Haushalt'**
|
||
String get ownerIsMe;
|
||
|
||
/// No description provided for @ownerIs.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Besitzer: {name}'**
|
||
String ownerIs(String name);
|
||
|
||
/// No description provided for @renameHousehold.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Haushalt umbenennen'**
|
||
String get renameHousehold;
|
||
|
||
/// No description provided for @householdNameLabel.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Name des Haushalts'**
|
||
String get householdNameLabel;
|
||
|
||
/// No description provided for @saveButton.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Speichern'**
|
||
String get saveButton;
|
||
|
||
/// No description provided for @leaveHousehold.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Haushalt verlassen'**
|
||
String get leaveHousehold;
|
||
|
||
/// No description provided for @leaveHouseholdConfirmTitle.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Haushalt verlassen?'**
|
||
String get leaveHouseholdConfirmTitle;
|
||
|
||
/// No description provided for @leaveHouseholdConfirmBody.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Du verlierst den Zugriff auf „{name}“ und alle Pflanzen darin. Ein neuer Beitritt ist nur mit einem neuen Einladungscode möglich.'**
|
||
String leaveHouseholdConfirmBody(String name);
|
||
|
||
/// No description provided for @leftHousehold.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Du hast den Haushalt „{name}“ verlassen.'**
|
||
String leftHousehold(String name);
|
||
|
||
/// No description provided for @removeMemberConfirmTitle.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Mitglied entfernen?'**
|
||
String get removeMemberConfirmTitle;
|
||
|
||
/// No description provided for @removeMemberConfirmBody.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'{name} verliert sofort den Zugriff auf diesen Haushalt und alle Pflanzen darin.'**
|
||
String removeMemberConfirmBody(String name);
|
||
|
||
/// No description provided for @removeMemberAction.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Entfernen'**
|
||
String get removeMemberAction;
|
||
|
||
/// No description provided for @memberRemoved.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'{name} wurde aus dem Haushalt entfernt.'**
|
||
String memberRemoved(String name);
|
||
|
||
/// No description provided for @meLabel.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Ich'**
|
||
String get meLabel;
|
||
|
||
/// No description provided for @inviteTitle.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Einladen'**
|
||
String get inviteTitle;
|
||
|
||
/// No description provided for @inviteMember.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Mitglied einladen'**
|
||
String get inviteMember;
|
||
|
||
/// No description provided for @inviteSitter.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Pflanzen-Sitter einladen'**
|
||
String get inviteSitter;
|
||
|
||
/// No description provided for @inviteExplanation.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Mitglieder haben volle Rechte. Pflanzen-Sitter sehen die Pläne und können Aufgaben abhaken, aber nichts ändern.'**
|
||
String get inviteExplanation;
|
||
|
||
/// No description provided for @inviteCodeTitle.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Einladungscode'**
|
||
String get inviteCodeTitle;
|
||
|
||
/// No description provided for @inviteCodeHint.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Gib diesen Code an die Person weiter. Sie trägt ihn in ihrer App unter „Haushalt“ ein. Der Code ist 7 Tage gültig und einmal verwendbar.'**
|
||
String get inviteCodeHint;
|
||
|
||
/// No description provided for @copyCode.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Code kopieren'**
|
||
String get copyCode;
|
||
|
||
/// No description provided for @codeCopied.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Code kopiert.'**
|
||
String get codeCopied;
|
||
|
||
/// No description provided for @joinTitle.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Haushalt beitreten'**
|
||
String get joinTitle;
|
||
|
||
/// No description provided for @joinCodeLabel.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Einladungscode eingeben'**
|
||
String get joinCodeLabel;
|
||
|
||
/// No description provided for @joinButton.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Beitreten'**
|
||
String get joinButton;
|
||
|
||
/// No description provided for @joinWarningTitle.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Haushalt beitreten?'**
|
||
String get joinWarningTitle;
|
||
|
||
/// No description provided for @joinWarningBody.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Du trittst dem Haushalt bei und wechselst direkt dorthin. Deine bisherigen Haushalte bleiben erhalten – unter „Meine Haushalte“ kannst du jederzeit zurückwechseln.'**
|
||
String get joinWarningBody;
|
||
|
||
/// No description provided for @joinSuccess.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Willkommen im Haushalt „{name}“!'**
|
||
String joinSuccess(String name);
|
||
|
||
/// No description provided for @joinErrorInvalid.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Dieser Code ist ungültig oder abgelaufen.'**
|
||
String get joinErrorInvalid;
|
||
|
||
/// No description provided for @joinErrorUsed.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Dieser Code wurde bereits verwendet.'**
|
||
String get joinErrorUsed;
|
||
|
||
/// No description provided for @doneBy.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **' · von {name}'**
|
||
String doneBy(String name);
|
||
|
||
/// No description provided for @settingsTitle.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Einstellungen'**
|
||
String get settingsTitle;
|
||
|
||
/// No description provided for @settingsAppearance.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Erscheinungsbild'**
|
||
String get settingsAppearance;
|
||
|
||
/// No description provided for @themeSystem.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'System'**
|
||
String get themeSystem;
|
||
|
||
/// No description provided for @themeLight.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Hell'**
|
||
String get themeLight;
|
||
|
||
/// No description provided for @themeDark.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Dunkel'**
|
||
String get themeDark;
|
||
|
||
/// No description provided for @settingsTextSize.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Schriftgröße'**
|
||
String get settingsTextSize;
|
||
|
||
/// No description provided for @textSizeNormal.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Normal'**
|
||
String get textSizeNormal;
|
||
|
||
/// No description provided for @textSizeLarge.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Groß'**
|
||
String get textSizeLarge;
|
||
|
||
/// No description provided for @textSizeXLarge.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Sehr groß'**
|
||
String get textSizeXLarge;
|
||
|
||
/// No description provided for @settingsHighContrast.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Hoher Kontrast'**
|
||
String get settingsHighContrast;
|
||
|
||
/// No description provided for @settingsReminderTime.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Erinnerungszeit'**
|
||
String get settingsReminderTime;
|
||
|
||
/// No description provided for @settingsReminderTimeHint.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Zu dieser Uhrzeit erinnert dich LeafItToMe an offene Aufgaben.'**
|
||
String get settingsReminderTimeHint;
|
||
|
||
/// No description provided for @settingsAccount.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Konto'**
|
||
String get settingsAccount;
|
||
|
||
/// No description provided for @logout.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Abmelden'**
|
||
String get logout;
|
||
|
||
/// No description provided for @loginSubtitle.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Melde dich an, um deine Pflanzen zu versorgen.'**
|
||
String get loginSubtitle;
|
||
|
||
/// No description provided for @emailLabel.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'E-Mail-Adresse'**
|
||
String get emailLabel;
|
||
|
||
/// No description provided for @passwordLabel.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Passwort'**
|
||
String get passwordLabel;
|
||
|
||
/// No description provided for @signInButton.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Anmelden'**
|
||
String get signInButton;
|
||
|
||
/// No description provided for @signUpButton.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Konto erstellen'**
|
||
String get signUpButton;
|
||
|
||
/// No description provided for @switchToSignUp.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Neu hier? Konto erstellen'**
|
||
String get switchToSignUp;
|
||
|
||
/// No description provided for @switchToSignIn.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Du hast schon ein Konto? Anmelden'**
|
||
String get switchToSignIn;
|
||
|
||
/// No description provided for @orDivider.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'oder'**
|
||
String get orDivider;
|
||
|
||
/// No description provided for @signInWithApple.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Mit Apple anmelden'**
|
||
String get signInWithApple;
|
||
|
||
/// No description provided for @signInWithGoogle.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Mit Google anmelden'**
|
||
String get signInWithGoogle;
|
||
|
||
/// No description provided for @authErrorAppleFailed.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Die Anmeldung mit Apple hat nicht geklappt. Bitte versuche es erneut.'**
|
||
String get authErrorAppleFailed;
|
||
|
||
/// No description provided for @authErrorGoogleFailed.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Die Anmeldung mit Google hat nicht geklappt. Bitte versuche es erneut.'**
|
||
String get authErrorGoogleFailed;
|
||
|
||
/// No description provided for @authErrorInvalidCredential.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'E-Mail-Adresse oder Passwort ist falsch.'**
|
||
String get authErrorInvalidCredential;
|
||
|
||
/// No description provided for @authErrorEmailInUse.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Mit dieser E-Mail-Adresse gibt es bereits ein Konto.'**
|
||
String get authErrorEmailInUse;
|
||
|
||
/// No description provided for @authErrorWeakPassword.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Das Passwort muss mindestens 6 Zeichen lang sein.'**
|
||
String get authErrorWeakPassword;
|
||
|
||
/// No description provided for @authErrorInvalidEmail.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Bitte gib eine gültige E-Mail-Adresse ein.'**
|
||
String get authErrorInvalidEmail;
|
||
|
||
/// No description provided for @authErrorGeneric.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Das hat leider nicht geklappt. Bitte versuche es erneut.'**
|
||
String get authErrorGeneric;
|
||
|
||
/// No description provided for @bootstrapPreparing.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Dein Haushalt wird eingerichtet …'**
|
||
String get bootstrapPreparing;
|
||
|
||
/// No description provided for @bootstrapFailed.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Dein Haushalt konnte nicht eingerichtet werden. Bitte prüfe deine Internetverbindung und versuche es erneut.'**
|
||
String get bootstrapFailed;
|
||
|
||
/// No description provided for @bootstrapRetry.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Erneut versuchen'**
|
||
String get bootstrapRetry;
|
||
|
||
/// No description provided for @takePhoto.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Foto aufnehmen'**
|
||
String get takePhoto;
|
||
|
||
/// No description provided for @fromGallery.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Aus der Galerie'**
|
||
String get fromGallery;
|
||
|
||
/// No description provided for @recognizing.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Pflanze wird erkannt …'**
|
||
String get recognizing;
|
||
|
||
/// No description provided for @recognitionSuccess.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Erkannt: {name}'**
|
||
String recognitionSuccess(String name);
|
||
|
||
/// No description provided for @recognitionFailed.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Die Erkennung hat nicht geklappt – du kannst die Angaben auch von Hand eintragen.'**
|
||
String get recognitionFailed;
|
||
|
||
/// No description provided for @diagnoseButton.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Pflanze untersuchen'**
|
||
String get diagnoseButton;
|
||
|
||
/// No description provided for @diagnoseHint.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Foto von kranken Blättern oder Stellen aufnehmen – die KI beurteilt den Zustand und gibt Behandlungstipps.'**
|
||
String get diagnoseHint;
|
||
|
||
/// No description provided for @diagnosing.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Foto wird untersucht …'**
|
||
String get diagnosing;
|
||
|
||
/// No description provided for @diagnosisTreatmentTitle.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Was du tun kannst'**
|
||
String get diagnosisTreatmentTitle;
|
||
|
||
/// No description provided for @diagnosisPreventionTitle.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'So beugst du vor'**
|
||
String get diagnosisPreventionTitle;
|
||
|
||
/// No description provided for @diagnosisDisclaimer.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Die Einschätzung kommt von einer KI und kann falsch liegen. Bei wertvollen Pflanzen im Zweifel eine Gärtnerei fragen.'**
|
||
String get diagnosisDisclaimer;
|
||
|
||
/// No description provided for @diagnosisSpeciesMismatch.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Das Foto zeigt offenbar eine andere Pflanze als „{name}“. Die Einschätzung unten bezieht sich auf die Pflanze im Bild.'**
|
||
String diagnosisSpeciesMismatch(String name);
|
||
|
||
/// No description provided for @diagnosisFailed.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Die Untersuchung hat nicht geklappt. Bitte versuche es erneut.'**
|
||
String get diagnosisFailed;
|
||
|
||
/// No description provided for @diagnosisHistoryTitle.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Untersuchungen'**
|
||
String get diagnosisHistoryTitle;
|
||
|
||
/// No description provided for @diagnosisHistoryButton.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Frühere Untersuchungen'**
|
||
String get diagnosisHistoryButton;
|
||
|
||
/// No description provided for @diagnosisHistoryEmpty.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Noch keine Untersuchungen gespeichert.'**
|
||
String get diagnosisHistoryEmpty;
|
||
|
||
/// No description provided for @diagnosisDate.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Untersucht am {date}'**
|
||
String diagnosisDate(String date);
|
||
|
||
/// No description provided for @deleteDiagnosisQuestion.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Untersuchung vom {date} löschen?'**
|
||
String deleteDiagnosisQuestion(String date);
|
||
|
||
/// No description provided for @fitCheckButton.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Eignung prüfen'**
|
||
String get fitCheckButton;
|
||
|
||
/// No description provided for @fitChecking.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Wird geprüft …'**
|
||
String get fitChecking;
|
||
|
||
/// No description provided for @fitCheckNeedsAnalysis.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Erst den Stellplatz analysieren (Foto oben)'**
|
||
String get fitCheckNeedsAnalysis;
|
||
|
||
/// No description provided for @fitCheckStale.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Stellplatz hat sich geändert – neu prüfen'**
|
||
String get fitCheckStale;
|
||
|
||
/// No description provided for @fitCheckFailed.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Die Prüfung hat nicht geklappt. Bitte versuche es erneut.'**
|
||
String get fitCheckFailed;
|
||
|
||
/// No description provided for @fitCheckNotDone.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Eignung noch nicht geprüft'**
|
||
String get fitCheckNotDone;
|
||
|
||
/// No description provided for @saveError.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Speichern fehlgeschlagen. Bitte versuche es erneut.'**
|
||
String get saveError;
|
||
|
||
/// No description provided for @saveErrorDetail.
|
||
///
|
||
/// In de, this message translates to:
|
||
/// **'Speichern fehlgeschlagen ({detail}). Bitte versuche es erneut.'**
|
||
String saveErrorDetail(String detail);
|
||
}
|
||
|
||
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'].contains(locale.languageCode);
|
||
|
||
@override
|
||
bool shouldReload(_AppLocalizationsDelegate old) => false;
|
||
}
|
||
|
||
AppLocalizations lookupAppLocalizations(Locale locale) {
|
||
// Lookup logic when only language code is specified.
|
||
switch (locale.languageCode) {
|
||
case 'de':
|
||
return AppLocalizationsDe();
|
||
}
|
||
|
||
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.',
|
||
);
|
||
}
|