mirror of
https://github.com/Second-Hand-Friends/kleinanzeigen-bot.git
synced 2026-03-12 02:31:45 +01:00
697 lines
54 KiB
YAML
697 lines
54 KiB
YAML
#################################################
|
||
getopt.py:
|
||
#################################################
|
||
do_longs:
|
||
"option --%s requires argument": "Option --%s benötigt ein Argument"
|
||
"option --%s must not have an argument": "Option --%s darf kein Argument haben"
|
||
long_has_args:
|
||
"option --%s not recognized": "Option --%s unbekannt"
|
||
"option --%s not a unique prefix": "Option --%s ist kein eindeutiger Prefix"
|
||
do_shorts:
|
||
"option -%s requires argument": "Option -%s benötigt ein Argument"
|
||
short_has_arg:
|
||
"option -%s not recognized": "Option -%s unbekannt"
|
||
|
||
#################################################
|
||
kleinanzeigen_bot/__main__.py:
|
||
#################################################
|
||
module:
|
||
"[INFO] Captcha detected. Sleeping %s before restart...": "[INFO] Captcha erkannt. Warte %s h bis zum Neustart..."
|
||
|
||
#################################################
|
||
kleinanzeigen_bot/__init__.py:
|
||
#################################################
|
||
module:
|
||
"Direct execution not supported. Use 'pdm run app'": "Direkte Ausführung nicht unterstützt. Bitte 'pdm run app' verwenden"
|
||
create_default_config:
|
||
"Config file %s already exists. Aborting creation.": "Konfigurationsdatei %s existiert bereits. Erstellung abgebrochen."
|
||
|
||
configure_file_logging:
|
||
"Logging to [%s]...": "Protokollierung in [%s]..."
|
||
"App version: %s": "App Version: %s"
|
||
"Python version: %s": "Python Version: %s"
|
||
|
||
_fetch_published_ads:
|
||
"Empty JSON response content on page %s": "Leerer JSON-Antwortinhalt auf Seite %s"
|
||
"Failed to parse JSON response on page %s: %s (content: %s)": "Fehler beim Parsen der JSON-Antwort auf Seite %s: %s (Inhalt: %s)"
|
||
"Stopping pagination after %s pages to avoid infinite loop": "Stoppe die Seitenaufschaltung nach %s Seiten, um eine Endlosschleife zu vermeiden"
|
||
"Pagination request timed out on page %s: %s": "Zeitueberschreitung bei der Seitenabfrage auf Seite %s: %s"
|
||
"Unexpected JSON payload on page %s (content: %s)": "Unerwartete JSON-Antwort auf Seite %s (Inhalt: %s)"
|
||
"Unexpected 'ads' type on page %s: %s value: %s": "Unerwarteter 'ads'-Typ auf Seite %s: %s Wert: %s"
|
||
"Reached last page %s of %s, stopping pagination": "Letzte Seite %s von %s erreicht, beende Paginierung"
|
||
"No ads found on page %s, stopping pagination": "Keine Anzeigen auf Seite %s gefunden, beende Paginierung"
|
||
"Invalid 'next' page value in paging info: %s, stopping pagination": "Ungültiger 'next'-Seitenwert in Paginierungsinfo: %s, beende Paginierung"
|
||
"Invalid 'pageNum' in paging info: %s, stopping pagination": "Ungültiger 'pageNum'-Wert in Paginierungsinfo: %s, beende Paginierung"
|
||
|
||
__check_ad_changed:
|
||
"Hash comparison for [%s]:": "Hash-Vergleich für [%s]:"
|
||
" Stored hash: %s": " Gespeicherter Hash: %s"
|
||
" Current hash: %s": " Aktueller Hash: %s"
|
||
"Changes detected in ad [%s], will republish": "Änderungen in Anzeige [%s] erkannt, wird erneut veröffentlicht"
|
||
|
||
load_ads:
|
||
"Searching for ad config files...": "Suche nach Anzeigendateien..."
|
||
" -> found %s": "-> %s gefunden"
|
||
"ad config file": "Anzeigendatei"
|
||
"Start fetch task for the ad(s) with id(s):": "Starte Abrufaufgabe für die Anzeige(n) mit ID(s):"
|
||
" -> SKIPPED: inactive ad [%s]": " -> ÜBERSPRUNGEN: inaktive Anzeige [%s]"
|
||
" -> SKIPPED: ad [%s] is not in list of given ids.": " -> ÜBERSPRUNGEN: Anzeige [%s] ist nicht in der Liste der angegebenen IDs."
|
||
" -> SKIPPED: ad [%s] is not new. already has an id assigned.": " -> ÜBERSPRUNGEN: Anzeige [%s] ist nicht neu. Eine ID wurde bereits zugewiesen."
|
||
"Category [%s] unknown. Using category [%s] with ID [%s] instead.": "Kategorie [%s] unbekannt. Verwende stattdessen Kategorie [%s] mit ID [%s]."
|
||
"Loaded %s": "%s geladen"
|
||
"ad": "Anzeige"
|
||
|
||
load_config:
|
||
"config": "Konfiguration"
|
||
" -> found %s": "-> %s gefunden"
|
||
"category": "Kategorie"
|
||
|
||
check_and_wait_for_captcha:
|
||
"# Captcha present! Please solve the captcha.": "# Captcha vorhanden! Bitte lösen Sie das Captcha."
|
||
"Captcha recognized - auto-restart enabled, abort run...": "Captcha erkannt - Auto-Neustart aktiviert, Durchlauf wird beendet..."
|
||
"Press a key to continue...": "Eine Taste drücken, um fortzufahren..."
|
||
|
||
_capture_login_detection_diagnostics_if_enabled:
|
||
"# Login detection returned UNKNOWN. Browser is paused for manual inspection.": "# Login-Erkennung ergab UNKNOWN. Browser ist zur manuellen Prüfung angehalten."
|
||
"Press a key to continue...": "Eine Taste drücken, um fortzufahren..."
|
||
|
||
_capture_publish_error_diagnostics_if_enabled:
|
||
"Diagnostics capture failed during publish error handling: %s": "Diagnose-Erfassung fehlgeschlagen während der Veröffentlichung-Fehlerbehandlung: %s"
|
||
|
||
login:
|
||
"Checking if already logged in...": "Überprüfe, ob bereits eingeloggt..."
|
||
"Current page URL after opening homepage: %s": "Aktuelle Seiten-URL nach dem Öffnen der Startseite: %s"
|
||
"Already logged in as [%s]. Skipping login.": "Bereits eingeloggt als [%s]. Überspringe Anmeldung."
|
||
"Opening login page...": "Öffne Anmeldeseite..."
|
||
"Login state is UNKNOWN - cannot determine if already logged in. Skipping login attempt.": "Login-Status ist UNKNOWN - kann nicht bestimmt werden, ob bereits eingeloggt ist. Überspringe Anmeldeversuch."
|
||
"Login state is UNKNOWN after first login attempt - cannot determine login status. Aborting login process.": "Login-Status ist UNKNOWN nach dem ersten Anmeldeversuch - kann Login-Status nicht bestimmen. Breche Anmeldeprozess ab."
|
||
"First login attempt did not succeed, trying second login attempt": "Erster Anmeldeversuch war nicht erfolgreich, versuche zweiten Anmeldeversuch"
|
||
"Second login attempt succeeded": "Zweiter Anmeldeversuch erfolgreich"
|
||
"Second login attempt also failed - login may not have succeeded": "Zweiter Anmeldeversuch ebenfalls fehlgeschlagen - Anmeldung möglicherweise nicht erfolgreich"
|
||
|
||
is_logged_in:
|
||
"Starting login detection (timeout: %.1fs base, %.1fs effective with multiplier/backoff)": "Starte Login-Erkennung (Timeout: %.1fs Basis, %.1fs effektiv mit Multiplikator/Backoff)"
|
||
"Login detected via .mr-medium element": "Login erkannt über .mr-medium Element"
|
||
"Timeout waiting for .mr-medium element after %.1fs": "Timeout beim Warten auf .mr-medium Element nach %.1fs"
|
||
"Login detected via #user-email element": "Login erkannt über #user-email Element"
|
||
"Timeout waiting for #user-email element after %.1fs": "Timeout beim Warten auf #user-email Element nach %.1fs"
|
||
"No login detected - neither .mr-medium nor #user-email found with username": "Kein Login erkannt - weder .mr-medium noch #user-email mit Benutzername gefunden"
|
||
"No login detected - DOM elements not found and server probe returned %s": "Kein Login erkannt - DOM-Elemente nicht gefunden und Server-Probe ergab %s"
|
||
|
||
handle_after_login_logic:
|
||
"# Device verification message detected. Please follow the instruction displayed in the Browser.": "# Nachricht zur Geräteverifizierung erkannt. Bitte den Anweisungen im Browser folgen."
|
||
"Press ENTER when done...": "EINGABETASTE drücken, wenn erledigt..."
|
||
"Handling GDPR disclaimer...": "Verarbeite DSGVO-Hinweis..."
|
||
|
||
delete_ads:
|
||
"Processing %s/%s: '%s' from [%s]...": "Verarbeite %s/%s: '%s' von [%s]..."
|
||
"DONE: Deleted %s": "FERTIG: %s gelöscht"
|
||
"ad": "Anzeige"
|
||
|
||
delete_ad:
|
||
"Deleting ad '%s' if already present...": "Lösche Anzeige '%s', falls bereits vorhanden..."
|
||
"Expected CSRF Token not found in HTML content!": "Erwartetes CSRF-Token wurde im HTML-Inhalt nicht gefunden!"
|
||
" -> deleting %s '%s'...": " -> lösche %s '%s'..."
|
||
|
||
extend_ads:
|
||
"No ads need extension at this time.": "Keine Anzeigen müssen derzeit verlängert werden."
|
||
"DONE: No ads extended.": "FERTIG: Keine Anzeigen verlängert."
|
||
"DONE: Extended %s": "FERTIG: %s verlängert"
|
||
"ad": "Anzeige"
|
||
" -> SKIPPED: ad '%s' is not published yet": " -> ÜBERSPRUNGEN: Anzeige '%s' ist noch nicht veröffentlicht"
|
||
" -> SKIPPED: ad '%s' (ID: %s) not found in published ads": " -> ÜBERSPRUNGEN: Anzeige '%s' (ID: %s) nicht gefunden"
|
||
" -> SKIPPED: ad '%s' is not active (state: %s)": " -> ÜBERSPRUNGEN: Anzeige '%s' ist nicht aktiv (Status: %s)"
|
||
" -> SKIPPED: ad '%s' has no endDate in API response": " -> ÜBERSPRUNGEN: Anzeige '%s' hat kein Ablaufdatum in API-Antwort"
|
||
" -> ad '%s' expires in %d days, will extend": " -> Anzeige '%s' läuft in %d Tagen ab, wird verlängert"
|
||
" -> SKIPPED: ad '%s' expires in %d days (can only extend within 8 days)": " -> ÜBERSPRUNGEN: Anzeige '%s' läuft in %d Tagen ab (Verlängern nur innerhalb von 8 Tagen möglich)"
|
||
"Processing %s/%s: '%s' from [%s]...": "Verarbeite %s/%s: '%s' aus [%s]..."
|
||
|
||
extend_ad:
|
||
"Extending ad '%s' (ID: %s)...": "Verlängere Anzeige '%s' (ID: %s)..."
|
||
" -> FAILED: Could not find extend button for ad ID %s": " -> FEHLER: 'Verlängern'-Button für Anzeigen-ID %s nicht gefunden"
|
||
" -> No confirmation dialog found, extension may have completed directly": " -> Kein Bestätigungsdialog gefunden"
|
||
" -> SUCCESS: ad extended with ID %s": " -> ERFOLG: Anzeige mit ID %s verlängert"
|
||
" -> FAILED: Timeout while extending ad '%s': %s": " -> FEHLER: Zeitüberschreitung beim Verlängern der Anzeige '%s': %s"
|
||
" -> FAILED: Could not persist extension for ad '%s': %s": " -> FEHLER: Verlängerung der Anzeige '%s' konnte nicht gespeichert werden: %s"
|
||
|
||
find_and_click_extend_button:
|
||
"Found extend button on page %s": "'Verlängern'-Button auf Seite %s gefunden"
|
||
|
||
finalize_installation_mode:
|
||
"Config file: %s": "Konfigurationsdatei: %s"
|
||
"First run detected, prompting user for installation mode": "Erster Start erkannt, frage Benutzer nach Installationsmodus"
|
||
"Installation mode: %s": "Installationsmodus: %s"
|
||
|
||
publish_ads:
|
||
"Processing %s/%s: '%s' from [%s]...": "Verarbeite %s/%s: '%s' von [%s]..."
|
||
"Skipping because ad is reserved": "Überspringen, da Anzeige reserviert ist"
|
||
" -> Could not confirm publishing for '%s', but ad may be online": " -> Veröffentlichung für '%s' konnte nicht bestätigt werden, aber Anzeige ist möglicherweise online"
|
||
"Attempt %s/%s failed for '%s': %s. Retrying...": "Versuch %s/%s fehlgeschlagen für '%s': %s. Erneuter Versuch..."
|
||
"All %s attempts failed for '%s': %s. Skipping ad.": "Alle %s Versuche fehlgeschlagen für '%s': %s. Überspringe Anzeige."
|
||
"DONE: (Re-)published %s (%s failed after retries)": "FERTIG: %s (erneut) veröffentlicht (%s fehlgeschlagen nach Wiederholungen)"
|
||
"DONE: (Re-)published %s": "FERTIG: %s (erneut) veröffentlicht"
|
||
"ad": "Anzeige"
|
||
apply_auto_price_reduction:
|
||
"Auto price reduction is enabled for [%s] but no price is configured.": "Automatische Preisreduzierung ist für [%s] aktiviert, aber es wurde kein Preis konfiguriert."
|
||
"Auto price reduction is enabled for [%s] but min_price equals price (%s) - no reductions will occur.": "Automatische Preisreduzierung ist für [%s] aktiviert, aber min_price entspricht dem Preis (%s) - es werden keine Reduktionen auftreten."
|
||
"Auto price reduction applied: %s -> %s after %s reduction cycles": "Automatische Preisreduzierung angewendet: %s -> %s nach %s Reduktionszyklen"
|
||
"Auto price reduction kept price %s after attempting %s reduction cycles": "Automatische Preisreduzierung hat Preis %s beibehalten nach dem Versuch von %s Reduktionszyklen"
|
||
_repost_cycle_ready:
|
||
"Auto price reduction delayed for [%s]: waiting %s more reposts (completed %s, applied %s reductions)": "Automatische Preisreduzierung für [%s] verzögert: Warte %s weitere erneute Veröffentlichungen (abgeschlossen %s, angewendet %s Reduktionen)"
|
||
"Auto price reduction already applied for [%s]: %s reductions match %s eligible reposts": "Automatische Preisreduzierung für [%s] bereits angewendet: %s Reduktionen entsprechen %s berechtigten erneuten Veröffentlichungen"
|
||
_day_delay_elapsed:
|
||
"Auto price reduction delayed for [%s]: waiting %s days (elapsed %s)": "Automatische Preisreduzierung für [%s] verzögert: Warte %s Tage (vergangen %s)"
|
||
"Auto price reduction delayed for [%s]: waiting %s days but publish timestamp missing": "Automatische Preisreduzierung für [%s] verzögert: Warte %s Tage, aber Zeitstempel der Veröffentlichung fehlt"
|
||
|
||
publish_ad:
|
||
"Publishing ad '%s'...": "Veröffentliche Anzeige '%s'..."
|
||
"Updating ad '%s'...": "Aktualisiere Anzeige '%s'..."
|
||
"Failed to set shipping attribute for type '%s'!": "Fehler beim setzen des Versandattributs für den Typ '%s'!"
|
||
"Shipping step skipped - reason: NOT_APPLICABLE": "Versandschritt übersprungen: Versand nicht anwendbar (Status = NOT_APPLICABLE)"
|
||
"# Payment form detected! Please proceed with payment.": "# Bestellformular gefunden! Bitte mit der Bezahlung fortfahren."
|
||
" -> SUCCESS: ad published with ID %s": " -> ERFOLG: Anzeige mit ID %s veröffentlicht"
|
||
" -> SUCCESS: ad updated with ID %s": " -> ERFOLG: Anzeige mit ID %s aktualisiert"
|
||
" -> effective ad meta:": " -> effektive Anzeigen-Metadaten:"
|
||
"Press a key to continue...": "Eine Taste drücken, um fortzufahren..."
|
||
|
||
update_ads:
|
||
"Processing %s/%s: '%s' from [%s]...": "Verarbeite %s/%s: '%s' von [%s]..."
|
||
"Skipping because ad is reserved": "Überspringen, da Anzeige reserviert ist"
|
||
" -> SKIPPED: ad '%s' (ID: %s) not found in published ads": " -> ÜBERSPRUNGEN: Anzeige '%s' (ID: %s) nicht in veröffentlichten Anzeigen gefunden"
|
||
"DONE: updated %s": "FERTIG: %s aktualisiert"
|
||
"ad": "Anzeige"
|
||
|
||
__set_condition:
|
||
"Unable to close condition dialog!": "Kann den Dialog für Artikelzustand nicht schließen!"
|
||
"Unable to open condition dialog and select condition [%s]": "Zustandsdialog konnte nicht geöffnet und Zustand [%s] nicht ausgewählt werden"
|
||
"Unable to select condition [%s]": "Zustand [%s] konnte nicht ausgewählt werden"
|
||
|
||
__set_contact_fields:
|
||
"Could not set contact street.": "Kontaktstraße konnte nicht gesetzt werden."
|
||
"Could not set contact name.": "Kontaktname konnte nicht gesetzt werden."
|
||
"Could not set contact location: %s": "Kontaktort konnte nicht gesetzt werden: %s"
|
||
"Could not set contact zipcode: %s": "Kontakt-PLZ konnte nicht gesetzt werden: %s"
|
||
"No city dropdown option matched location: %s": "Kein Eintrag im Orts-Dropdown passte zum Ort: %s"
|
||
? "Phone number field not present on page. This is expected for many private accounts; commercial accounts may still support phone numbers."
|
||
: "Telefonnummernfeld auf der Seite nicht vorhanden. Dies ist bei vielen privaten Konten zu erwarten; gewerbliche Konten unterstützen Telefonnummern möglicherweise weiterhin."
|
||
|
||
__upload_images:
|
||
" -> found %s": "-> %s gefunden"
|
||
"image": "Bild"
|
||
" -> uploading image [%s]": " -> Lade Bild [%s] hoch"
|
||
" -> waiting for %s to be processed...": " -> Warte auf Verarbeitung von %s..."
|
||
" -> all images uploaded successfully": " -> Alle Bilder erfolgreich hochgeladen"
|
||
"Image upload timeout exceeded": "Zeitüberschreitung beim Hochladen der Bilder"
|
||
"Not all images were uploaded within timeout. Expected %(expected)d, found %(found)d thumbnails.": "Nicht alle Bilder wurden innerhalb der Zeitüberschreitung hochgeladen. Erwartet: %(expected)d, gefunden: %(found)d Miniaturansichten."
|
||
|
||
check_thumbnails_uploaded:
|
||
" -> %d of %d images processed": " -> %d von %d Bildern verarbeitet"
|
||
|
||
__check_ad_republication:
|
||
" -> SKIPPED: ad [%s] was last published %d days ago. republication is only required every %s days": " -> ÜBERSPRUNGEN: Anzeige [%s] wurde zuletzt vor %d Tagen veröffentlicht. Erneute Veröffentlichung ist erst nach %s Tagen erforderlich"
|
||
|
||
__set_special_attributes:
|
||
"Found %i special attributes": "%i spezielle Attribute gefunden"
|
||
"Setting special attribute [%s] to [%s]...": "Setze spezielles Attribut [%s] auf [%s]..."
|
||
"Successfully set attribute field [%s] to [%s]...": "Attributfeld [%s] erfolgreich auf [%s] gesetzt..."
|
||
"Attribute field '%s' could not be found.": "Attributfeld '%s' konnte nicht gefunden werden."
|
||
"Failed to set attribute '%s'": "Fehler beim Setzen des Attributs '%s'"
|
||
"Attribute field '%s' seems to be a select...": "Attributfeld '%s' scheint ein Auswahlfeld zu sein..."
|
||
"Failed to set attribute field '%s' via known input types.": "Fehler beim Setzen des Attributfelds '%s' über bekannte Eingabetypen."
|
||
"Attribute field '%s' seems to be a checkbox...": "Attributfeld '%s' scheint eine Checkbox zu sein..."
|
||
"Attribute field '%s' seems to be a text input...": "Attributfeld '%s' scheint ein Texteingabefeld zu sein..."
|
||
"Attribute field '%s' seems to be a Combobox (i.e. text input with filtering dropdown)...": "Attributfeld '%s' scheint eine Combobox zu sein (d.h. Texteingabefeld mit Dropdown-Filter)..."
|
||
|
||
download_ads:
|
||
"Scanning your ad overview...": "Scanne Anzeigenübersicht..."
|
||
"%s found.": "%s gefunden."
|
||
"ad": "Anzeige"
|
||
"Starting download of all ads...": "Starte den Download aller Anzeigen..."
|
||
"%d of %d ads were downloaded from your profile.": "%d von %d Anzeigen wurden aus Ihrem Profil heruntergeladen."
|
||
"Starting download of not yet downloaded ads...": "Starte den Download noch nicht heruntergeladener Anzeigen..."
|
||
"The ad with id %d has already been saved.": "Die Anzeige mit der ID %d wurde bereits gespeichert."
|
||
"%s were downloaded from your profile.": "%s wurden aus Ihrem Profil heruntergeladen."
|
||
"new ad": "neue Anzeige"
|
||
"Starting download of ad(s) with the id(s):": "Starte Download der Anzeige(n) mit den ID(s):"
|
||
"Downloaded ad with id %d": "Anzeige mit der ID %d heruntergeladen"
|
||
"The page with the id %d does not exist!": "Die Seite mit der ID %d existiert nicht!"
|
||
|
||
parse_args:
|
||
"Use --help to display available options.": "Mit --help können die verfügbaren Optionen angezeigt werden."
|
||
"More than one command given: %s": "Mehr als ein Befehl angegeben: %s"
|
||
|
||
run:
|
||
"DONE: No configuration errors found.": "FERTIG: Keine Konfigurationsfehler gefunden."
|
||
"DONE: No active ads found.": "FERTIG: Keine aktiven Anzeigen gefunden."
|
||
"You provided no ads selector. Defaulting to \"due\".": "Es wurden keine Anzeigen-Selektor angegeben. Es wird \"due\" verwendet."
|
||
"DONE: No new/outdated ads found.": "FERTIG: Keine neuen/veralteten Anzeigen gefunden."
|
||
"DONE: No ads to delete found.": "FERTIG: Keine zu löschenden Anzeigen gefunden."
|
||
"DONE: No changed ads found.": "FERTIG: Keine geänderten Anzeigen gefunden."
|
||
"Extending all ads within 8-day window...": "Verlängere alle Anzeigen innerhalb des 8-Tage-Zeitfensters..."
|
||
"DONE: No ads found to extend.": "FERTIG: Keine Anzeigen zum Verlängern gefunden."
|
||
"You provided no ads selector. Defaulting to \"new\".": "Es wurden keine Anzeigen-Selektor angegeben. Es wird \"new\" verwendet."
|
||
"You provided no ads selector. Defaulting to \"changed\".": "Es wurden keine Anzeigen-Selektor angegeben. Es wird \"changed\" verwendet."
|
||
"Unknown command: %s": "Unbekannter Befehl: %s"
|
||
|
||
fill_login_data_and_send:
|
||
"Logging in as [%s]...": "Anmeldung als [%s]..."
|
||
|
||
__set_shipping:
|
||
"Unable to close shipping dialog!": "Versanddialog konnte nicht geschlossen werden!"
|
||
|
||
__set_shipping_options:
|
||
"Unable to close shipping dialog!": "Versanddialog konnte nicht geschlossen werden!"
|
||
|
||
update_content_hashes:
|
||
"DONE: Updated [content_hash] in %s": "FERTIG: [content_hash] in %s aktualisiert."
|
||
"Processing %s/%s: '%s' from [%s]...": "Verarbeite %s/%s: '%s' von [%s]..."
|
||
"ad": "Anzeige"
|
||
|
||
#################################################
|
||
kleinanzeigen_bot/extract.py:
|
||
#################################################
|
||
download_ad:
|
||
"Using download directory: %s": "Verwende Download-Verzeichnis: %s"
|
||
|
||
_download_and_save_image_sync:
|
||
"Failed to download image %s: %s": "Fehler beim Herunterladen des Bildes %s: %s"
|
||
|
||
_download_images_from_ad_page:
|
||
"Found %s.": "%s gefunden."
|
||
"Downloaded %s.": "%s heruntergeladen."
|
||
"No image area found. Continuing without downloading images.": "Keine Bildbereiche gefunden. Fahre ohne Bilder-Download fort."
|
||
|
||
extract_ad_id_from_ad_url:
|
||
"Failed to extract ad ID from URL '%s': %s": "Fehler beim Extrahieren der Anzeigen-ID aus der URL '%s': %s"
|
||
|
||
extract_own_ads_urls:
|
||
"No ad URLs were extracted.": "Es wurden keine Anzeigen-URLs extrahiert."
|
||
|
||
extract_page_refs:
|
||
"Could not find ad list container or items on page %s.": "Anzeigenlistencontainer oder Elemente auf Seite %s nicht gefunden."
|
||
"Error extracting refs on page %s: %s": "Fehler beim Extrahieren der Referenzen auf Seite %s: %s"
|
||
"Found %s ad items on page %s.": "%s Anzeigen-Elemente auf Seite %s gefunden."
|
||
"Successfully extracted %s refs from page %s.": "%s Referenzen von Seite %s erfolgreich extrahiert."
|
||
|
||
navigate_to_ad_page:
|
||
"There is no ad under the given ID.": "Es gibt keine Anzeige unter der angegebenen ID."
|
||
"A popup appeared!": "Ein Popup ist erschienen!"
|
||
|
||
_extract_ad_page_info_with_directory_handling:
|
||
"Extracting title from ad %s: \"%s\"": "Extrahiere Titel aus Anzeige %s: \"%s\""
|
||
"Deleting current folder of ad %s...": "Lösche aktuellen Ordner der Anzeige %s..."
|
||
"New directory for ad created at %s.": "Neues Verzeichnis für Anzeige erstellt unter %s."
|
||
"Renaming folder from %s to %s for ad %s...": "Benenne Ordner von %s zu %s für Anzeige %s um..."
|
||
"Using existing folder for ad %s at %s.": "Verwende bestehenden Ordner für Anzeige %s unter %s."
|
||
|
||
_extract_contact_from_ad_page:
|
||
"No street given in the contact.": "Keine Straße in den Kontaktdaten angegeben."
|
||
|
||
_extract_category_from_ad_page:
|
||
"Breadcrumb container 'vap-brdcrmb' not found; cannot extract ad category: %s": "Breadcrumb-Container 'vap-brdcrmb' nicht gefunden; kann Anzeigenkategorie nicht extrahieren: %s"
|
||
"Falling back to legacy breadcrumb selectors; collected ids: %s": "Weiche auf ältere Breadcrumb-Selektoren aus; gesammelte IDs: %s"
|
||
"Legacy breadcrumb selectors not found within %.1f seconds (collected ids: %s)": "Ältere Breadcrumb-Selektoren nicht innerhalb von %.1f Sekunden gefunden (gesammelte IDs: %s)"
|
||
"Unable to locate breadcrumb fallback selectors within %(seconds).1f seconds.": "Ältere Breadcrumb-Selektoren konnten nicht innerhalb von %(seconds).1f Sekunden gefunden werden."
|
||
|
||
_extract_sell_directly_from_ad_page:
|
||
"Could not extract ad ID from URL: %s": "Konnte Anzeigen-ID nicht aus der URL extrahieren: %s"
|
||
"Stopping pagination after %s pages to avoid infinite loop": "Stoppe die Seitenaufschaltung nach %s Seiten, um eine Endlosschleife zu vermeiden"
|
||
"Invalid 'next' page value in paging info: %s, stopping pagination": "Ungültiger 'next'-Seitenwert in Paginierungsinfo: %s, beende Paginierung"
|
||
"Invalid 'pageNum' in paging info: %s, stopping pagination": "Ungültiger 'pageNum'-Wert in Paginierungsinfo: %s, beende Paginierung"
|
||
|
||
#################################################
|
||
kleinanzeigen_bot/utils/i18n.py:
|
||
#################################################
|
||
_detect_locale:
|
||
"Error detecting language on Windows": "Fehler bei der Spracherkennung unter Windows"
|
||
|
||
#################################################
|
||
kleinanzeigen_bot/utils/error_handlers.py:
|
||
#################################################
|
||
on_sigint:
|
||
"Aborted on user request.": "Auf Benutzeranfrage abgebrochen."
|
||
on_exception:
|
||
"%s: %s": "%s: %s"
|
||
"Unknown exception occurred (missing exception info): ex_type=%s, ex=%s": "Unbekannter Fehler aufgetreten (fehlende Fehlerinformation): ex_type=%s, ex_value=%s"
|
||
|
||
#################################################
|
||
kleinanzeigen_bot/utils/loggers.py:
|
||
#################################################
|
||
format:
|
||
"CRITICAL": "KRITISCH"
|
||
"ERROR": "FEHLER"
|
||
"WARNING": "WARNUNG"
|
||
|
||
#################################################
|
||
kleinanzeigen_bot/utils/dicts.py:
|
||
#################################################
|
||
load_dict_if_exists:
|
||
"Loading %s[%s]...": "Lade %s[%s]..."
|
||
"Unsupported file type. The filename \"%s\" must end with *.json, *.yaml, or *.yml": "Nicht unterstützter Dateityp. Der Dateiname \"%s\" muss mit *.json, *.yaml oder *.yml enden"
|
||
save_dict:
|
||
"Saving [%s]...": "Speichere [%s]..."
|
||
load_dict_from_module:
|
||
"Loading %s[%s.%s]...": "Lade %s[%s.%s]..."
|
||
|
||
#################################################
|
||
kleinanzeigen_bot/utils/pydantics.py:
|
||
#################################################
|
||
__get_message_template:
|
||
"Object has no attribute '{attribute}'": "Objekt hat kein Attribut '{attribute}'"
|
||
"Invalid JSON: {error}": "Ungültiges JSON: {error}"
|
||
"JSON input should be string, bytes or bytearray": "JSON-Eingabe sollte eine Zeichenkette, Bytes oder Bytearray sein"
|
||
"Cannot check `{method_name}` when validating from json, use a JsonOrPython validator instead": "Kann `{method_name}` beim Validieren von JSON nicht prüfen, verwende stattdessen einen JsonOrPython-Validator"
|
||
"Recursion error - cyclic reference detected": "Rekursionsfehler – zirkuläre Referenz erkannt"
|
||
"Field required": "Feld erforderlich"
|
||
"Field is frozen": "Feld ist gesperrt"
|
||
"Instance is frozen": "Instanz ist gesperrt"
|
||
"Extra inputs are not permitted": "Zusätzliche Eingaben sind nicht erlaubt"
|
||
"Keys should be strings": "Schlüssel sollten Zeichenketten sein"
|
||
"Error extracting attribute: {error}": "Fehler beim Extrahieren des Attributs: {error}"
|
||
"Input should be a valid dictionary or instance of {class_name}": "Eingabe sollte ein gültiges Wörterbuch oder eine Instanz von {class_name} sein"
|
||
"Input should be a valid dictionary or object to extract fields from": "Eingabe sollte ein gültiges Wörterbuch oder Objekt sein, um Felder daraus zu extrahieren"
|
||
"Input should be a dictionary or an instance of {class_name}": "Eingabe sollte ein Wörterbuch oder eine Instanz von {class_name} sein"
|
||
"Input should be an instance of {class_name}": "Eingabe sollte eine Instanz von {class_name} sein"
|
||
"Input should be None": "Eingabe sollte None sein"
|
||
"Input should be greater than {gt}": "Eingabe sollte größer als {gt} sein"
|
||
"Input should be greater than or equal to {ge}": "Eingabe sollte größer oder gleich {ge} sein"
|
||
"Input should be less than {lt}": "Eingabe sollte kleiner als {lt} sein"
|
||
"Input should be less than or equal to {le}": "Eingabe sollte kleiner oder gleich {le} sein"
|
||
"Input should be a multiple of {multiple_of}": "Eingabe sollte ein Vielfaches von {multiple_of} sein"
|
||
"Input should be a finite number": "Eingabe sollte eine endliche Zahl sein"
|
||
"{field_type} should have at least {min_length} item{expected_plural} after validation, not {actual_length}": "{field_type} sollte nach der Validierung mindestens {min_length} Element{expected_plural} haben, nicht {actual_length}"
|
||
"{field_type} should have at most {max_length} item{expected_plural} after validation, not {actual_length}": "{field_type} sollte nach der Validierung höchstens {max_length} Element{expected_plural} haben, nicht {actual_length}"
|
||
"Input should be iterable": "Eingabe sollte iterierbar sein"
|
||
"Error iterating over object, error: {error}": "Fehler beim Iterieren des Objekts: {error}"
|
||
"Input should be a valid string": "Eingabe sollte eine gültige Zeichenkette sein"
|
||
"Input should be a string, not an instance of a subclass of str": "Eingabe sollte ein String sein, keine Instanz einer Unterklasse von str"
|
||
"Input should be a valid string, unable to parse raw data as a unicode string": "Eingabe sollte eine gültige Zeichenkette sein, Rohdaten können nicht als Unicode-String geparst werden"
|
||
"String should have at least {min_length} character{expected_plural}": "String sollte mindestens {min_length} Zeichen{expected_plural} haben"
|
||
"String should have at most {max_length} character{expected_plural}": "String sollte höchstens {max_length} Zeichen{expected_plural} haben"
|
||
"String should match pattern '{pattern}'": "String sollte dem Muster '{pattern}' entsprechen"
|
||
"Input should be {expected}": "Eingabe sollte {expected} sein"
|
||
"Input should be a valid dictionary": "Eingabe sollte ein gültiges Wörterbuch sein"
|
||
"Input should be a valid mapping, error: {error}": "Eingabe sollte eine gültige Zuordnung sein, Fehler: {error}"
|
||
"Input should be a valid list": "Eingabe sollte eine gültige Liste sein"
|
||
"Input should be a valid tuple": "Eingabe sollte ein gültiges Tupel sein"
|
||
"Input should be a valid set": "Eingabe sollte eine gültige Menge sein"
|
||
"Set items should be hashable": "Elemente einer Menge sollten hashbar sein"
|
||
"Input should be a valid boolean": "Eingabe sollte ein gültiger Boolescher Wert sein"
|
||
"Input should be a valid boolean, unable to interpret input": "Eingabe sollte ein gültiger Boolescher Wert sein, Eingabe kann nicht interpretiert werden"
|
||
"Input should be a valid integer": "Eingabe sollte eine gültige Ganzzahl sein"
|
||
"Input should be a valid integer, unable to parse string as an integer": "Eingabe sollte eine gültige Ganzzahl sein, Zeichenkette konnte nicht als Ganzzahl geparst werden"
|
||
"Input should be a valid integer, got a number with a fractional part": "Eingabe sollte eine gültige Ganzzahl sein, Zahl hat einen Dezimalteil"
|
||
"Unable to parse input string as an integer, exceeded maximum size": "Zeichenkette konnte nicht als Ganzzahl geparst werden, maximale Größe überschritten"
|
||
"Input should be a valid number": "Eingabe sollte eine gültige Zahl sein"
|
||
"Input should be a valid number, unable to parse string as a number": "Eingabe sollte eine gültige Zahl sein, Zeichenkette kann nicht als Zahl geparst werden"
|
||
"Input should be a valid bytes": "Eingabe sollte gültige Bytes sein"
|
||
"Data should have at least {min_length} byte{expected_plural}": "Daten sollten mindestens {min_length} Byte{expected_plural} enthalten"
|
||
"Data should have at most {max_length} byte{expected_plural}": "Daten sollten höchstens {max_length} Byte{expected_plural} enthalten"
|
||
"Data should be valid {encoding}: {encoding_error}": "Daten sollten gültiges {encoding} sein: {encoding_error}"
|
||
"Value error, {error}": "Wertfehler: {error}"
|
||
"Assertion failed, {error}": "Assertion fehlgeschlagen: {error}"
|
||
"Input should be a valid date": "Eingabe sollte ein gültiges Datum sein"
|
||
"Input should be a valid date in the format YYYY-MM-DD, {error}": "Eingabe sollte ein gültiges Datum im Format YYYY-MM-DD sein: {error}"
|
||
"Input should be a valid date or datetime, {error}": "Eingabe sollte ein gültiges Datum oder eine gültige Datums-Uhrzeit sein: {error}"
|
||
"Datetimes provided to dates should have zero time - e.g. be exact dates": "Datetime-Werte für Datum sollten keine Uhrzeit enthalten – also exakte Daten sein"
|
||
"Date should be in the past": "Datum sollte in der Vergangenheit liegen"
|
||
"Date should be in the future": "Datum sollte in der Zukunft liegen"
|
||
"Input should be a valid time": "Eingabe sollte eine gültige Uhrzeit sein"
|
||
"Input should be in a valid time format, {error}": "Eingabe sollte in einem gültigen Zeitformat sein: {error}"
|
||
"Input should be a valid datetime": "Eingabe sollte ein gültiges Datum mit Uhrzeit sein"
|
||
"Input should be a valid datetime, {error}": "Eingabe sollte ein gültiges Datum mit Uhrzeit sein: {error}"
|
||
"Invalid datetime object, got {error}": "Ungültiges Datetime-Objekt: {error}"
|
||
"Input should be a valid datetime or date, {error}": "Eingabe sollte ein gültiges Datum oder Datum mit Uhrzeit sein: {error}"
|
||
"Input should be in the past": "Eingabe sollte in der Vergangenheit liegen"
|
||
"Input should be in the future": "Eingabe sollte in der Zukunft liegen"
|
||
"Input should not have timezone info": "Eingabe sollte keine Zeitzonen-Information enthalten"
|
||
"Input should have timezone info": "Eingabe sollte Zeitzonen-Information enthalten"
|
||
"Timezone offset of {tz_expected} required, got {tz_actual}": "Zeitzonen-Offset von {tz_expected} erforderlich, erhalten: {tz_actual}"
|
||
"Input should be a valid timedelta": "Eingabe sollte ein gültiges Zeitdelta sein"
|
||
"Input should be a valid timedelta, {error}": "Eingabe sollte ein gültiges Zeitdelta sein: {error}"
|
||
"Input should be a valid frozenset": "Eingabe sollte ein gültiges Frozenset sein"
|
||
"Input should be an instance of {class}": "Eingabe sollte eine Instanz von {class} sein"
|
||
"Input should be a subclass of {class}": "Eingabe sollte eine Unterklasse von {class} sein"
|
||
"Input should be callable": "Eingabe sollte aufrufbar sein"
|
||
"Input tag '{tag}' found using {discriminator} does not match any of the expected tags: {expected_tags}": "Eingabe-Tag '{tag}', ermittelt durch {discriminator}, stimmt mit keinem der erwarteten Tags überein: {expected_tags}"
|
||
"Unable to extract tag using discriminator {discriminator}": "Tag kann mit {discriminator} nicht extrahiert werden"
|
||
"Arguments must be a tuple, list or a dictionary": "Argumente müssen ein Tupel, eine Liste oder ein Wörterbuch sein"
|
||
"Missing required argument": "Erforderliches Argument fehlt"
|
||
"Unexpected keyword argument": "Unerwartetes Schlüsselwort-Argument"
|
||
"Missing required keyword only argument": "Erforderliches keyword-only-Argument fehlt"
|
||
"Unexpected positional argument": "Unerwartetes Positionsargument"
|
||
"Missing required positional only argument": "Erforderliches positional-only-Argument fehlt"
|
||
"Got multiple values for argument": "Mehrere Werte für Argument erhalten"
|
||
"URL input should be a string or URL": "URL-Eingabe sollte eine Zeichenkette oder URL sein"
|
||
"Input should be a valid URL, {error}": "Eingabe sollte eine gültige URL sein: {error}"
|
||
"Input violated strict URL syntax rules, {error}": "Eingabe hat strikte URL-Syntaxregeln verletzt: {error}"
|
||
"URL should have at most {max_length} character{expected_plural}": "URL sollte höchstens {max_length} Zeichen{expected_plural} haben"
|
||
"URL scheme should be {expected_schemes}": "URL-Schema sollte {expected_schemes} sein"
|
||
"UUID input should be a string, bytes or UUID object": "UUID-Eingabe sollte eine Zeichenkette, Bytes oder ein UUID-Objekt sein"
|
||
"Input should be a valid UUID, {error}": "Eingabe sollte eine gültige UUID sein: {error}"
|
||
"UUID version {expected_version} expected": "UUID-Version {expected_version} erwartet"
|
||
"Decimal input should be an integer, float, string or Decimal object": "Decimal-Eingabe sollte eine Ganzzahl, Gleitkommazahl, Zeichenkette oder ein Decimal-Objekt sein"
|
||
"Input should be a valid decimal": "Eingabe sollte ein gültiges Decimal sein"
|
||
"Decimal input should have no more than {max_digits} digit{expected_plural} in total": "Decimal-Eingabe sollte insgesamt nicht mehr als {max_digits} Ziffer{expected_plural} haben"
|
||
"Decimal input should have no more than {decimal_places} decimal place{expected_plural}": "Decimal-Eingabe sollte nicht mehr als {decimal_places} Dezimalstelle{expected_plural} haben"
|
||
"Decimal input should have no more than {whole_digits} digit{expected_plural} before the decimal point": "Decimal-Eingabe sollte vor dem Dezimalpunkt nicht mehr als {whole_digits} Ziffer{expected_plural} haben"
|
||
? "Input should be a valid python complex object, a number, or a valid complex string following the rules at https://docs.python.org/3/library/functions.html#complex"
|
||
: "Eingabe sollte ein gültiges Python-komplexes Objekt, eine Zahl oder eine gültige komplexe Zeichenkette sein, gemäß https://docs.python.org/3/library/functions.html#complex"
|
||
"Input should be a valid complex string following the rules at https://docs.python.org/3/library/functions.html#complex": "Eingabe sollte eine gültige komplexe Zeichenkette sein, gemäß https://docs.python.org/3/library/functions.html#complex"
|
||
|
||
format_validation_error:
|
||
"validation error": "Validationsfehler"
|
||
"%s for [%s]:": "%s für %s"
|
||
"' or '": "' oder '"
|
||
|
||
#################################################
|
||
kleinanzeigen_bot/utils/web_scraping_mixin.py:
|
||
#################################################
|
||
create_browser_session:
|
||
"Creating Browser session...": "Erstelle Browser-Sitzung..."
|
||
"Using existing browser process at %s:%s": "Verwende existierenden Browser-Prozess unter %s:%s"
|
||
"New Browser session is %s": "Neue Browser-Sitzung ist %s"
|
||
" -> Browser binary location: %s": " -> Browser-Programmpfad: %s"
|
||
" -> Browser profile name: %s": " -> Browser-Profilname: %s"
|
||
" -> Browser user data dir: %s": " -> Browser-Benutzerdatenverzeichnis: %s"
|
||
" -> Custom Browser argument: %s": " -> Benutzerdefiniertes Browser-Argument: %s"
|
||
"Ignoring empty --user-data-dir= argument; falling back to configured user_data_dir.": "Ignoriere leeres --user-data-dir= Argument; verwende konfiguriertes user_data_dir."
|
||
"Configured browser.user_data_dir (%s) does not match --user-data-dir argument (%s); using the argument value.": "Konfiguriertes browser.user_data_dir (%s) stimmt nicht mit --user-data-dir Argument (%s) überein; verwende Argument-Wert."
|
||
"Remote debugging detected, but browser configuration looks invalid: %s": "Remote-Debugging erkannt, aber Browser-Konfiguration scheint ungültig: %s"
|
||
" -> Setting chrome prefs [%s]...": " -> Setze Chrome-Einstellungen [%s]..."
|
||
" -> Adding Browser extension: [%s]": " -> Füge Browser-Erweiterung hinzu: [%s]"
|
||
"Failed to connect to browser. This error often occurs when:": "Fehler beim Verbinden mit dem Browser. Dieser Fehler tritt häufig auf, wenn:"
|
||
"Failed to start browser. This error often occurs when:": "Fehler beim Starten des Browsers. Dieser Fehler tritt häufig auf, wenn:"
|
||
"1. Running as root user (try running as regular user)": "1. Als Root-Benutzer ausgeführt wird (versuchen Sie es als normaler Benutzer)"
|
||
"2. Browser profile is locked or in use by another process": "2. Das Browser-Profil gesperrt oder von einem anderen Prozess verwendet wird"
|
||
"3. Insufficient permissions to access the browser profile": "3. Unzureichende Berechtigungen für den Zugriff auf das Browser-Profil"
|
||
"4. Browser is not properly started with remote debugging enabled": "4. Der Browser nicht ordnungsgemäß mit aktiviertem Remote-Debugging gestartet wurde"
|
||
"4. Browser binary is not executable or missing": "4. Die Browser-Binärdatei nicht ausführbar oder fehlend ist"
|
||
"5. Check if any antivirus or security software is blocking the browser": "5. Überprüfen Sie, ob Antiviren- oder Sicherheitssoftware den Browser blockiert"
|
||
"Troubleshooting steps:": "Schritte zur Fehlerbehebung:"
|
||
"1. Close all browser instances and try again": "1. Schließen Sie alle Browser-Instanzen und versuchen Sie es erneut"
|
||
"2. Remove the user_data_dir configuration temporarily": "2. Entfernen Sie die user_data_dir-Konfiguration vorübergehend"
|
||
"3. Start browser manually with: %s --remote-debugging-port=%d": "3. Starten Sie den Browser manuell mit: %s --remote-debugging-port=%d"
|
||
"3. Try running without profile configuration": "3. Versuchen Sie es ohne Profil-Konfiguration"
|
||
"4. Check browser binary permissions: %s": "4. Überprüfen Sie die Browser-Binärdatei-Berechtigungen: %s"
|
||
"4. Check if any antivirus or security software is blocking the connection": "4. Überprüfen Sie, ob Antiviren- oder Sicherheitssoftware die Verbindung blockiert"
|
||
|
||
web_check:
|
||
"Unsupported attribute: %s": "Nicht unterstütztes Attribut: %s"
|
||
|
||
web_select:
|
||
"Option not found by value or displayed text: %s": "Option nicht gefunden nach Wert oder angezeigtem Text: %s"
|
||
|
||
web_select_combobox:
|
||
"Combobox input field does not have 'aria-controls' attribute.": "Das Eingabefeld der Combobox hat kein 'aria-controls'-Attribut."
|
||
"Combobox missing aria-controls attribute": "Combobox fehlt aria-controls Attribut"
|
||
"No matching option found in combobox: '%s'": "Keine passende Option in Combobox gefunden: '%s'"
|
||
|
||
_navigate_paginated_ad_overview:
|
||
"Failed to open ad overview page at %s: timeout": "Fehler beim Öffnen der Anzeigenübersichtsseite unter %s: Zeitüberschreitung"
|
||
"Scroll timeout on page %s (non-critical, continuing)": "Zeitüberschreitung beim Scrollen auf Seite %s (nicht kritisch, wird fortgesetzt)"
|
||
"Page action timed out on page %s": "Seitenaktion hat auf Seite %s eine Zeitüberschreitung erreicht"
|
||
"Ad list container not found. Maybe no ads present?": "Anzeigenlistencontainer nicht gefunden. Vielleicht sind keine Anzeigen vorhanden?"
|
||
"Multiple ad pages detected.": "Mehrere Anzeigenseiten erkannt."
|
||
"No pagination controls found. Assuming single page.": "Keine Paginierungssteuerung gefunden. Es wird von einer einzelnen Seite ausgegangen."
|
||
"Processing page %s...": "Verarbeite Seite %s..."
|
||
"Navigating to page %s...": "Navigiere zu Seite %s..."
|
||
"Last page reached (no enabled 'Naechste' button found).": "Letzte Seite erreicht (kein aktivierter 'Naechste'-Button gefunden)."
|
||
"No pagination controls found. Assuming last page.": "Keine Paginierungssteuerung gefunden. Es wird von der letzten Seite ausgegangen."
|
||
|
||
close_browser_session:
|
||
"Closing Browser session...": "Schließe Browser-Sitzung..."
|
||
|
||
get_compatible_browser:
|
||
"Installed browser could not be detected": "Installierter Browser konnte nicht erkannt werden"
|
||
"Installed browser for OS %s could not be detected": "Installierter Browser für Betriebssystem %s konnte nicht erkannt werden"
|
||
|
||
web_open:
|
||
" => skipping, [%s] is already open": " => überspringe, [%s] ist bereits geöffnet"
|
||
" -> Opening [%s]...": " -> Öffne [%s]..."
|
||
|
||
web_request:
|
||
" -> HTTP %s [%s]...": " -> HTTP %s [%s]..."
|
||
|
||
_web_find_once:
|
||
"Unsupported selector type: %s": "Nicht unterstützter Selektor-Typ: %s"
|
||
|
||
_web_find_all_once:
|
||
"Unsupported selector type: %s": "Nicht unterstützter Selektor-Typ: %s"
|
||
|
||
diagnose_browser_issues:
|
||
"=== Browser Connection Diagnostics ===": "=== Browser-Verbindungsdiagnose ==="
|
||
"=== End Diagnostics ===": "=== Ende der Diagnose ==="
|
||
"(ok) Browser binary exists: %s": "(Ok) Browser-Binärdatei existiert: %s"
|
||
"(ok) Browser binary is executable": "(Ok) Browser-Binärdatei ist ausführbar"
|
||
"(ok) Auto-detected browser: %s": "(Ok) Automatisch erkannter Browser: %s"
|
||
"(ok) User data directory exists: %s": "(Ok) Benutzerdatenverzeichnis existiert: %s"
|
||
"(ok) User data directory is readable and writable": "(Ok) Benutzerdatenverzeichnis ist lesbar und beschreibbar"
|
||
"(ok) Remote debugging port is open": "(Ok) Remote-Debugging-Port ist offen"
|
||
"(fail) Browser binary not found: %s": "(Fehler) Browser-Binärdatei nicht gefunden: %s"
|
||
"(fail) Browser binary is not executable": "(Fehler) Browser-Binärdatei ist nicht ausführbar"
|
||
"(fail) No compatible browser found": "(Fehler) Kein kompatibler Browser gefunden"
|
||
"(fail) User data directory permissions issue": "(Fehler) Benutzerdatenverzeichnis-Berechtigungsproblem"
|
||
"(info) User data directory does not exist (will be created): %s": "(Info) Benutzerdatenverzeichnis existiert nicht (wird erstellt): %s"
|
||
"(info) Remote debugging port configured: %d": "(Info) Remote-Debugging-Port konfiguriert: %d"
|
||
"(info) Remote debugging port is not open": "(Info) Remote-Debugging-Port ist nicht offen"
|
||
|
||
"(warn) Unable to inspect browser processes: %s": "(Warnung) Browser-Prozesse konnten nicht überprüft werden: %s"
|
||
|
||
"(info) No browser processes currently running": "(Info) Derzeit keine Browser-Prozesse aktiv"
|
||
"(fail) Running as root - this can cause browser issues": "(Fehler) Läuft als Root - dies kann Browser-Probleme verursachen"
|
||
|
||
"(info) Found %d browser processes running": "(Info) %d Browser-Prozesse aktiv gefunden"
|
||
" - PID %d: %s (remote debugging enabled)": " - PID %d: %s (Remote-Debugging aktiviert)"
|
||
" - PID %d: %s (remote debugging NOT enabled)": " - PID %d: %s (Remote-Debugging NICHT aktiviert)"
|
||
"(ok) Remote debugging API accessible - Browser: %s": "(ok) Remote-Debugging-API zugänglich - Browser: %s"
|
||
"(fail) Remote debugging port is open but API not accessible: %s": "(Fehler) Remote-Debugging-Port ist offen, aber API nicht zugänglich: %s"
|
||
" This might indicate a browser update issue or configuration problem": " Dies könnte auf ein Browser-Update-Problem oder Konfigurationsproblem hinweisen"
|
||
|
||
_validate_chrome_136_configuration:
|
||
" -> %s 136+ configuration validation failed: %s": " -> %s 136+ Konfigurationsvalidierung fehlgeschlagen: %s"
|
||
" -> %s 136+ configuration validation passed": " -> %s 136+ Konfigurationsvalidierung bestanden"
|
||
|
||
_validate_chrome_version_configuration:
|
||
" -> %s 136+ detected: %s": " -> %s 136+ erkannt: %s"
|
||
" -> %s version detected: %s (pre-136, no special validation required)": " -> %s-Version erkannt: %s (vor 136, keine besondere Validierung erforderlich)"
|
||
" -> Browser version detection failed, skipping validation: %s": " -> Browser-Versionserkennung fehlgeschlagen, Validierung wird übersprungen: %s"
|
||
" -> Unexpected error during browser version validation, skipping: %s": " -> Unerwarteter Fehler bei Browser-Versionsvalidierung, wird übersprungen: %s"
|
||
|
||
_diagnose_chrome_version_issues:
|
||
"(info) %s version from binary: %s (major: %d)": "(Info) %s-Version von Binärdatei: %s (Hauptversion: %d)"
|
||
"(info) %s version from remote debugging: %s (major: %d)": "(Info) %s-Version von Remote-Debugging: %s (Hauptversion: %d)"
|
||
"(info) %s 136+ detected - security validation required": "(Info) %s 136+ erkannt - Sicherheitsvalidierung erforderlich"
|
||
"(info) %s pre-136 detected - no special security requirements": "(Info) %s vor 136 erkannt - keine besonderen Sicherheitsanforderungen"
|
||
"(info) Remote %s 136+ detected - validating configuration": "(Info) Remote %s 136+ erkannt - validiere Konfiguration"
|
||
"(fail) %s 136+ configuration validation failed: %s": "(Fehler) %s 136+ Konfigurationsvalidierung fehlgeschlagen: %s"
|
||
"(ok) %s 136+ configuration validation passed": "(Ok) %s 136+ Konfigurationsvalidierung bestanden"
|
||
"(info) Chrome/Edge 136+ security changes require --user-data-dir for remote debugging": "(Info) Chrome/Edge 136+ Sicherheitsänderungen erfordern --user-data-dir für Remote-Debugging"
|
||
" See: https://developer.chrome.com/blog/remote-debugging-port": " Siehe: https://developer.chrome.com/blog/remote-debugging-port"
|
||
" -> Browser version diagnostics failed: %s": " -> Browser-Versionsdiagnose fehlgeschlagen: %s"
|
||
" -> Unexpected error during browser version diagnostics: %s": " -> Unerwarteter Fehler bei Browser-Versionsdiagnose: %s"
|
||
" Solution: Add --user-data-dir=/path/to/directory to browser arguments": " Lösung: Fügen Sie --user-data-dir=/pfad/zum/verzeichnis zu Browser-Argumenten hinzu"
|
||
" And user_data_dir: \"/path/to/directory\" to your configuration": " Und user_data_dir: \"/pfad/zum/verzeichnis\" zu Ihrer Konfiguration"
|
||
|
||
#################################################
|
||
kleinanzeigen_bot/update_checker.py:
|
||
#################################################
|
||
_resolve_commitish:
|
||
"Could not resolve commit '%s': %s": "Konnte Commit '%s' nicht aufloesen: %s"
|
||
check_for_updates:
|
||
"A new version is available: %s from %s UTC (current: %s from %s UTC, channel: %s)": "Eine neue Version ist verfügbar: %s vom %s UTC (aktuell: %s vom %s UTC, Kanal: %s)"
|
||
"Could not determine commit dates for comparison.": "Konnte Commit-Daten für den Vergleich nicht ermitteln."
|
||
"Could not determine local commit hash.": "Konnte lokalen Commit-Hash nicht ermitteln."
|
||
"Could not determine local version.": "Konnte lokale Version nicht ermitteln."
|
||
"Could not determine release commit hash.": "Konnte Release-Commit-Hash nicht ermitteln."
|
||
"Could not get releases: %s": "Konnte Releases nicht abrufen: %s"
|
||
? "Release notes:\n%s"
|
||
: "Release-Notizen:\n%s"
|
||
"You are on the latest version: %s (compared to %s in channel %s)": "Sie verwenden die neueste Version: %s (verglichen mit %s im Kanal %s)"
|
||
"Latest release from GitHub is a prerelease, but 'latest' channel expects a stable release.": "Die neueste GitHub-Version ist eine Vorabversion, aber der 'latest'-Kanal erwartet eine stabile Version."
|
||
"No prerelease found for 'preview' channel.": "Keine Vorabversion für den 'preview'-Kanal gefunden."
|
||
"Unknown update channel: %s": "Unbekannter Update-Kanal: %s"
|
||
? "You are on a different commit than the release for channel '%s' (tag: %s). This may mean you are ahead, behind, or on a different branch. Local commit: %s (%s UTC), Release commit: %s (%s UTC)"
|
||
: "Sie befinden sich auf einem anderen Commit als das Release für Kanal '%s' (Tag: %s). Dies kann bedeuten, dass Sie voraus, hinterher oder auf einem anderen Branch sind. Lokaler Commit: %s (%s UTC), Release-Commit: %s (%s UTC)"
|
||
|
||
#################################################
|
||
kleinanzeigen_bot/model/config_model.py:
|
||
#################################################
|
||
_validate_config:
|
||
"strategy must be specified when auto_price_reduction is enabled": "strategy muss angegeben werden, wenn auto_price_reduction aktiviert ist"
|
||
"amount must be specified when auto_price_reduction is enabled": "amount muss angegeben werden, wenn auto_price_reduction aktiviert ist"
|
||
"min_price must be specified when auto_price_reduction is enabled": "min_price muss angegeben werden, wenn auto_price_reduction aktiviert ist"
|
||
"Percentage reduction amount must not exceed %s": "Prozentuale Reduktionsmenge darf %s nicht überschreiten"
|
||
migrate_legacy_diagnostics_keys:
|
||
"Deprecated: 'login_detection_capture' is replaced by 'capture_on.login_detection'. Please update your config.": "Veraltet: 'login_detection_capture' wurde durch 'capture_on.login_detection' ersetzt. Bitte aktualisieren Sie Ihre Konfiguration."
|
||
"Deprecated: 'publish_error_capture' is replaced by 'capture_on.publish'. Please update your config.": "Veraltet: 'publish_error_capture' wurde durch 'capture_on.publish' ersetzt. Bitte aktualisieren Sie Ihre Konfiguration."
|
||
_validate_glob_pattern:
|
||
"must be a non-empty, non-blank glob pattern": "muss ein nicht-leeres Glob-Muster sein"
|
||
_validate_pause_requires_capture:
|
||
"pause_on_login_detection_failure requires capture_on.login_detection to be enabled": "pause_on_login_detection_failure erfordert, dass capture_on.login_detection aktiviert ist"
|
||
|
||
#################################################
|
||
kleinanzeigen_bot/model/ad_model.py:
|
||
#################################################
|
||
_validate_auto_price_reduction_constraints:
|
||
"price must be specified when auto_price_reduction is enabled": "price muss angegeben werden, wenn auto_price_reduction aktiviert ist"
|
||
"min_price must not exceed price": "min_price darf price nicht überschreiten"
|
||
calculate_auto_price:
|
||
"min_price must be specified when auto_price_reduction is enabled": "min_price muss angegeben werden, wenn auto_price_reduction aktiviert ist"
|
||
|
||
#################################################
|
||
kleinanzeigen_bot/model/update_check_state.py:
|
||
#################################################
|
||
_parse_timestamp:
|
||
"Invalid timestamp format in state file: %s": "Ungültiges Zeitstempel-Format in der Statusdatei: %s"
|
||
|
||
load:
|
||
"Failed to load update check state: %s": "Fehler beim Laden des Update-Prüfstatus: %s"
|
||
"Migrating update check state from version %d to %d": "Migriere Update-Prüfstatus von Version %d zu %d"
|
||
|
||
save:
|
||
"Failed to save update check state: %s": "Fehler beim Speichern des Update-Prüfstatus: %s"
|
||
"Permission denied when saving update check state to %s": "Keine Berechtigung zum Speichern des Update-Prüfstatus in %s"
|
||
|
||
should_check:
|
||
"Falling back to default interval: 1d (preview channel). Please fix your config to avoid this warning.": "Falle auf das Standardintervall zurück: 1 Tag (Vorschaukanal). Bitte korrigieren Sie Ihre Konfiguration, um diese Warnung zu vermeiden."
|
||
"Falling back to default interval: 7d (latest channel). Please fix your config to avoid this warning.": "Falle auf das Standardintervall zurück: 7 Tage (Stabiler Kanal). Bitte korrigieren Sie Ihre Konfiguration, um diese Warnung zu vermeiden."
|
||
"Interval is zero: %s. Minimum interval is 1d. Using default interval for this run.": "Intervall ist null: %s. Das Mindestintervall beträgt 1 Tag. Es wird das Standardintervall für diesen Durchlauf verwendet."
|
||
"Interval too long: %s. Maximum interval is 30d. Using default interval for this run.": "Intervall zu lang: %s. Das maximale Intervall beträgt 30 Tage. Es wird das Standardintervall für diesen Durchlauf verwendet."
|
||
"Interval too short: %s. Minimum interval is 1d. Using default interval for this run.": "Intervall zu kurz: %s. Das Mindestintervall beträgt 1 Tag. Es wird das Standardintervall für diesen Durchlauf verwendet."
|
||
"Invalid interval format or unsupported unit: %s. Using default interval for this run.": "Ungültiges Intervallformat oder nicht unterstützte Einheit: %s. Es wird das Standardintervall für diesen Durchlauf verwendet."
|
||
"Negative interval: %s. Minimum interval is 1d. Using default interval for this run.": "Negatives Intervall: %s. Das Mindestintervall beträgt 1 Tag. Es wird das Standardintervall für diesen Durchlauf verwendet."
|
||
|
||
#################################################
|
||
kleinanzeigen_bot/utils/diagnostics.py:
|
||
#################################################
|
||
_copy_log_sync:
|
||
"Log file not found for diagnostics copy: %s": "Logdatei nicht gefunden für Diagnosekopie: %s"
|
||
|
||
capture_diagnostics:
|
||
"Diagnostics screenshot capture failed: %s": "Diagnose-Screenshot-Erfassung fehlgeschlagen: %s"
|
||
"Diagnostics HTML capture failed: %s": "Diagnose-HTML-Erfassung fehlgeschlagen: %s"
|
||
"Diagnostics JSON capture failed: %s": "Diagnose-JSON-Erfassung fehlgeschlagen: %s"
|
||
"Diagnostics log copy failed: %s": "Diagnose-Log-Kopie fehlgeschlagen: %s"
|
||
"Diagnostics saved: %s": "Diagnosedaten gespeichert: %s"
|
||
"Diagnostics capture attempted but no artifacts were saved (all captures failed)": "Diagnoseerfassung versucht, aber keine Artefakte gespeichert (alle Erfassungen fehlgeschlagen)"
|
||
"Diagnostics capture failed: %s": "Diagnoseerfassung fehlgeschlagen: %s"
|
||
|
||
#################################################
|
||
kleinanzeigen_bot/utils/xdg_paths.py:
|
||
#################################################
|
||
_ensure_directory:
|
||
"Failed to create %s %s: %s": "Fehler beim Erstellen von %s %s: %s"
|
||
detect_installation_mode:
|
||
"Detected installation mode: %s": "Erkannter Installationsmodus: %s"
|
||
"No existing installation found": "Keine bestehende Installation gefunden"
|
||
prompt_installation_mode:
|
||
"Non-interactive mode detected, defaulting to portable installation": "Nicht-interaktiver Modus erkannt, Standard-Installation: portabel"
|
||
"Choose installation type:": "Installationstyp wählen:"
|
||
"[1] Portable (current directory)": "[1] Portabel (aktuelles Verzeichnis)"
|
||
"[2] System-wide (XDG directories)": "[2] Systemweit (XDG-Verzeichnisse)"
|
||
"Enter 1 or 2: ": "1 oder 2 eingeben: "
|
||
"Defaulting to portable installation mode": "Standard-Installationsmodus: portabel"
|
||
"User selected installation mode: %s": "Benutzer hat Installationsmodus gewählt: %s"
|
||
"Invalid choice. Please enter 1 or 2.": "Ungültige Auswahl. Bitte 1 oder 2 eingeben."
|