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