## Summary **What is the goal of this PR?** Adds OPDS search support, allowing users to search a catalog directly from the book browser when the server exposes an OpenSearch template. **What changes are included?** - `OpdsParser`: parses the OpenSearch template URL from feed-level `<link rel="search">` elements and exposes it via `getSearchTemplate()` - `OpdsBookBrowserActivity`: fetches and stores the search template after each feed load; shows a Search hint on the Left button when a template is available; launches the existing `KeyboardEntryActivity` for query input; URL-encodes the query and fetches the result feed - Absolute search result URLs are handled correctly in `fetchFeed` (skips prepending the server base URL) - A `consumeConfirm` guard prevents the Confirm release that submits the keyboard from immediately triggering a book download on the first browsing frame after search results load ## Additional Context - Search is silently unavailable if the server does not advertise an OpenSearch template — no UI change in that case - Tested against a Calibre-Web OPDS endpoint which exposes `<link rel="search" type="application/opensearchdescription+xml">` - The inline URL encoder in `performSearch` was necessary as `StringUtils` has no such utility; worth considering extracting to `StringUtils` in a follow-up - No new dependencies introduced --- ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? _**NO**_ --------- Co-authored-by: kira <rammah@tuta.io> Co-authored-by: Justin Mitchell <justin@jmitch.com>
323 lines
11 KiB
YAML
323 lines
11 KiB
YAML
_language_name: "Deutsch"
|
|
_language_code: "DE"
|
|
_order: "3"
|
|
|
|
STR_CROSSPOINT: "CrossPoint"
|
|
STR_BOOTING: "STARTEN"
|
|
STR_SLEEPING: "STANDBY"
|
|
STR_ENTERING_SLEEP: "Standby"
|
|
STR_BROWSE_FILES: "Durchsuchen"
|
|
STR_FILE_TRANSFER: "Datentransfer"
|
|
STR_SETTINGS_TITLE: "Einstellungen"
|
|
STR_CONTINUE_READING: "Weiterlesen"
|
|
STR_NO_OPEN_BOOK: "Aktuell kein Buch"
|
|
STR_START_READING: "Lesen beginnen"
|
|
STR_NO_FILES_FOUND: "Keine Dateien gefunden"
|
|
STR_SELECT_CHAPTER: "Kapitel auswählen"
|
|
STR_NO_CHAPTERS: "Keine Kapitel"
|
|
STR_END_OF_BOOK: "Buchende"
|
|
STR_EMPTY_CHAPTER: "Kapitelende"
|
|
STR_INDEXING: "Indexieren"
|
|
STR_MEMORY_ERROR: "Speicherfehler"
|
|
STR_PAGE_LOAD_ERROR: "Seitenladefehler"
|
|
STR_EMPTY_FILE: "Leere Datei"
|
|
STR_OUT_OF_BOUNDS: "Zu groß"
|
|
STR_LOADING: "Laden…"
|
|
STR_LOADING_POPUP: "Laden"
|
|
STR_WIFI_NETWORKS: "WLAN-Netzwerke"
|
|
STR_NO_NETWORKS: "Kein WLAN gefunden"
|
|
STR_NETWORKS_FOUND: "%zu WLAN-Netzwerke gefunden"
|
|
STR_SCANNING: "Suchen..."
|
|
STR_CONNECTING: "Verbinden..."
|
|
STR_CONNECTED: "Verbunden!"
|
|
STR_CONNECTION_FAILED: "Verbindungsfehler"
|
|
STR_FORGET_NETWORK: "WLAN vergessen?"
|
|
STR_SAVE_PASSWORD: "Passwort speichern?"
|
|
STR_PRESS_OK_SCAN: "OK für neue Suche"
|
|
STR_JOIN_NETWORK: "Netzwerk beitreten"
|
|
STR_CREATE_HOTSPOT: "Hotspot erstellen"
|
|
STR_JOIN_DESC: "Mit einem bestehenden WLAN verbinden"
|
|
STR_HOTSPOT_DESC: "WLAN für andere erstellen"
|
|
STR_STARTING_HOTSPOT: "Hotspot starten…"
|
|
STR_HOTSPOT_MODE: "Hotspot-Modus"
|
|
STR_CONNECT_WIFI_HINT: "Gerät mit diesem WLAN verbinden"
|
|
STR_OPEN_URL_HINT: "Diese URL im Browser öffnen"
|
|
STR_OR_HTTP_PREFIX: "oder http://"
|
|
STR_SCAN_QR_HINT: "oder QR-Code mit dem Handy scannen:"
|
|
STR_CALIBRE_WIRELESS: "Calibre Wireless"
|
|
STR_CALIBRE_WEB_URL: "OPDS URL"
|
|
STR_NETWORK_LEGEND: "* = Verschlüsselt | + = Gespeichert"
|
|
STR_MAC_ADDRESS: "MAC-Adresse:"
|
|
STR_CHECKING_WIFI: "WLAN prüfen…"
|
|
STR_ENTER_WIFI_PASSWORD: "WLAN-Passwort eingeben"
|
|
STR_TO_PREFIX: "mit "
|
|
STR_CALIBRE_RECEIVING: "Empfange:"
|
|
STR_CALIBRE_RECEIVED: "Empfangen:"
|
|
STR_CALIBRE_INSTRUCTION_1: "1) CrossPoint Reader-Plugin installieren"
|
|
STR_CALIBRE_INSTRUCTION_2: "2) Mit selbem WLAN verbinden"
|
|
STR_CALIBRE_INSTRUCTION_3: "3) In Calibre: \"An Gerät senden\""
|
|
STR_CALIBRE_INSTRUCTION_4: "Bildschirm beim Senden offenlassen"
|
|
STR_CAT_DISPLAY: "Anzeige"
|
|
STR_CAT_READER: "Lesen"
|
|
STR_CAT_CONTROLS: "Bedienung"
|
|
STR_CAT_SYSTEM: "System"
|
|
STR_SLEEP_SCREEN: "Standby-Bild"
|
|
STR_SLEEP_COVER_MODE: "Standby-Bildmodus"
|
|
STR_HIDE_BATTERY: "Batterie % ausblenden"
|
|
STR_EXTRA_SPACING: "Absatzabstand"
|
|
STR_TEXT_AA: "Schriftglättung"
|
|
STR_SHORT_PWR_BTN: "An-Taste kurz drücken"
|
|
STR_ORIENTATION: "Leseausrichtung"
|
|
STR_SIDE_BTN_LAYOUT: "Seitliche Tasten (Lesen)"
|
|
STR_LONG_PRESS_SKIP: "Langes Drücken springt Kap."
|
|
STR_FONT_FAMILY: "Lese-Schriftfamilie"
|
|
STR_FONT_SIZE: "Schriftgröße"
|
|
STR_LINE_SPACING: "Lese-Zeilenabstand"
|
|
STR_SCREEN_MARGIN: "Lese-Seitenränder"
|
|
STR_PARA_ALIGNMENT: "Lese-Absatzausrichtung"
|
|
STR_HYPHENATION: "Silbentrennung"
|
|
STR_TIME_TO_SLEEP: "Standby nach"
|
|
STR_REFRESH_FREQ: "Anti-Ghosting nach"
|
|
STR_KOREADER_SYNC: "KOReader-Synchr."
|
|
STR_CHECK_UPDATES: "Nach Updates suchen"
|
|
STR_LANGUAGE: "Sprache"
|
|
STR_CLEAR_READING_CACHE: "Lese-Cache leeren"
|
|
STR_USERNAME: "Benutzername"
|
|
STR_PASSWORD: "Passwort"
|
|
STR_SYNC_SERVER_URL: "Sync-Server-URL"
|
|
STR_DOCUMENT_MATCHING: "Dateizuordnung"
|
|
STR_AUTHENTICATE: "Authentifizieren"
|
|
STR_KOREADER_USERNAME: "KOReader-Benutzername"
|
|
STR_KOREADER_PASSWORD: "KOReader-Passwort"
|
|
STR_FILENAME: "Dateiname"
|
|
STR_BINARY: "Binärdatei"
|
|
STR_SET_CREDENTIALS_FIRST: "Zuerst anmelden"
|
|
STR_WIFI_CONN_FAILED: "WLAN-Verbindung fehlgeschlagen"
|
|
STR_AUTHENTICATING: "Authentifizieren…"
|
|
STR_AUTH_SUCCESS: "Erfolgreich authentifiziert!"
|
|
STR_KOREADER_AUTH: "KOReader-Auth"
|
|
STR_SYNC_READY: "KOReader-Synchronisierung bereit"
|
|
STR_AUTH_FAILED: "Authentifizierung fehlg."
|
|
STR_REGISTER: "Registrieren"
|
|
STR_REGISTERING: "Registrierung..."
|
|
STR_REGISTER_SUCCESS: "Konto erfolgreich erstellt!"
|
|
STR_REGISTER_FAILED: "Registrierung fehlgeschlagen"
|
|
STR_USERNAME_TAKEN: "Benutzername bereits vergeben"
|
|
STR_DONE: "Erledigt"
|
|
STR_CLEAR_CACHE_WARNING_1: "Alle Buch-Caches werden geleert."
|
|
STR_CLEAR_CACHE_WARNING_2: "Lesefortschritt wird gelöscht!"
|
|
STR_CLEAR_CACHE_WARNING_3: "Bücher müssen beim Öffnen"
|
|
STR_CLEAR_CACHE_WARNING_4: "neu eingelesen werden."
|
|
STR_CLEARING_CACHE: "Cache leeren…"
|
|
STR_CACHE_CLEARED: "Cache geleert"
|
|
STR_ITEMS_REMOVED: "Einträge entfernt"
|
|
STR_FAILED_LOWER: "fehlgeschlagen"
|
|
STR_CLEAR_CACHE_FAILED: "Fehler beim Cache-Leeren"
|
|
STR_CHECK_SERIAL_OUTPUT: "Serielle Ausgabe prüfen"
|
|
STR_DARK: "Dunkel"
|
|
STR_LIGHT: "Hell"
|
|
STR_CUSTOM: "Eigenes"
|
|
STR_COVER: "Umschlag"
|
|
STR_NONE_OPT: "Leer"
|
|
STR_FIT: "Anpassen"
|
|
STR_CROP: "Zuschnitt"
|
|
STR_NEVER: "Nie"
|
|
STR_IN_READER: "Beim Lesen"
|
|
STR_ALWAYS: "Immer"
|
|
STR_IGNORE: "Ignorieren"
|
|
STR_SLEEP: "Standby"
|
|
STR_PAGE_TURN: "Umblättern"
|
|
STR_PORTRAIT: "Hochformat"
|
|
STR_LANDSCAPE_CW: "Querformat rechts"
|
|
STR_INVERTED: "Invertiert"
|
|
STR_LANDSCAPE_CCW: "Querformat links"
|
|
STR_PREV_NEXT: "Zurück/Weiter"
|
|
STR_NEXT_PREV: "Weiter/Zurück"
|
|
STR_BOOKERLY: "Bookerly"
|
|
STR_NOTO_SANS: "Noto Sans"
|
|
STR_OPEN_DYSLEXIC: "Open Dyslexic"
|
|
STR_SMALL: "Klein"
|
|
STR_MEDIUM: "Mittel"
|
|
STR_LARGE: "Groß"
|
|
STR_X_LARGE: "Extragroß"
|
|
STR_TIGHT: "Eng"
|
|
STR_NORMAL: "Normal"
|
|
STR_WIDE: "Breit"
|
|
STR_JUSTIFY: "Blocksatz"
|
|
STR_ALIGN_LEFT: "Links"
|
|
STR_CENTER: "Zentriert"
|
|
STR_ALIGN_RIGHT: "Rechts"
|
|
STR_MIN_1: "1 Min"
|
|
STR_MIN_5: "5 Min"
|
|
STR_MIN_10: "10 Min"
|
|
STR_MIN_15: "15 Min"
|
|
STR_MIN_30: "30 Min"
|
|
STR_PAGES_1: "1 Seite"
|
|
STR_PAGES_5: "5 Seiten"
|
|
STR_PAGES_10: "10 Seiten"
|
|
STR_PAGES_15: "15 Seiten"
|
|
STR_PAGES_30: "30 Seiten"
|
|
STR_UPDATE: "Update"
|
|
STR_CHECKING_UPDATE: "Update suchen…"
|
|
STR_NEW_UPDATE: "Neues Update verfügbar!"
|
|
STR_CURRENT_VERSION: "Aktuelle Version:"
|
|
STR_NEW_VERSION: "Neue Version:"
|
|
STR_UPDATING: "Aktualisiere…"
|
|
STR_NO_UPDATE: "Kein Update verfügbar"
|
|
STR_UPDATE_FAILED: "Updatefehler"
|
|
STR_UPDATE_COMPLETE: "Update fertig"
|
|
STR_POWER_ON_HINT: "An-Knopf lang drücken, um neuzustarten"
|
|
STR_NO_ENTRIES: "Keine Einträge"
|
|
STR_DOWNLOADING: "Herunterladen…"
|
|
STR_DOWNLOAD_FAILED: "Ladefehler"
|
|
STR_ERROR_MSG: "Fehler:"
|
|
STR_UNNAMED: "Unbenannt"
|
|
STR_NO_SERVER_URL: "Keine Server-URL konfiguriert"
|
|
STR_FETCH_FEED_FAILED: "Feedfehler"
|
|
STR_PARSE_FEED_FAILED: "Feed-Format ungültig"
|
|
STR_NETWORK_PREFIX: "Netzwerk:"
|
|
STR_IP_ADDRESS_PREFIX: "IP-Adresse:"
|
|
STR_ERROR_GENERAL_FAILURE: "Fehler: Allgemeiner Fehler"
|
|
STR_ERROR_NETWORK_NOT_FOUND: "Fehler: Kein Netzwerk"
|
|
STR_ERROR_CONNECTION_TIMEOUT: "Fehler: Zeitüberschreitung"
|
|
STR_SD_CARD: "SD-Karte"
|
|
STR_BACK: "« Zurück"
|
|
STR_EXIT: "« Verlassen"
|
|
STR_HOME: "« Start"
|
|
STR_SELECT: "Auswahl"
|
|
STR_SELECTED: "Ausgewählt"
|
|
STR_TOGGLE: "Ändern"
|
|
STR_CONFIRM: "Bestätigen"
|
|
STR_CANCEL: "Abbrechen"
|
|
STR_CONNECT: "Verbinden"
|
|
STR_OPEN: "Öffnen"
|
|
STR_DOWNLOAD: "Herunterladen"
|
|
STR_RETRY: "Wiederh."
|
|
STR_YES: "Ja"
|
|
STR_NO: "Nein"
|
|
STR_SHOW: "Zeigen"
|
|
STR_HIDE: "Ausblenden"
|
|
STR_STATE_ON: "An"
|
|
STR_STATE_OFF: "Aus"
|
|
STR_NOT_SET: "Leer"
|
|
STR_DIR_LEFT: "Links"
|
|
STR_DIR_RIGHT: "Rechts"
|
|
STR_DIR_UP: "Hoch"
|
|
STR_DIR_DOWN: "Runter"
|
|
STR_OK_BUTTON: "OK"
|
|
STR_SLEEP_COVER_FILTER: "Standby-Coverfilter"
|
|
STR_FILTER_CONTRAST: "Kontrast"
|
|
STR_CUSTOMISE_STATUS_BAR: "Statusleiste anpassen"
|
|
STR_CHAPTER_PAGE_COUNT: "Kapitel-Seitenanzahl"
|
|
STR_BOOK_PROGRESS_PERCENTAGE: "Buchfortschritt in %"
|
|
STR_PROGRESS_BAR: "Fortschrittsbalken"
|
|
STR_PROGRESS_BAR_THICKNESS: "Balkenstärke"
|
|
STR_PROGRESS_BAR_THIN: "Dünn"
|
|
STR_PROGRESS_BAR_MEDIUM: "Mittel"
|
|
STR_PROGRESS_BAR_THICK: "Dick"
|
|
STR_BOOK: "Buch"
|
|
STR_CHAPTER: "Kapitel"
|
|
STR_EXAMPLE_CHAPTER: "Kapitel 21"
|
|
STR_EXAMPLE_BOOK: "Buchtitel"
|
|
STR_PREVIEW: "Vorschau"
|
|
STR_TITLE: "Titel"
|
|
STR_BATTERY: "Batterie"
|
|
STR_UI_THEME: "System-Design"
|
|
STR_THEME_CLASSIC: "Klassisch"
|
|
STR_THEME_LYRA: "Lyra"
|
|
STR_THEME_LYRA_EXTENDED: "Lyra Extended"
|
|
STR_SUNLIGHT_FADING_FIX: "Anti-Verblassen"
|
|
STR_REMAP_FRONT_BUTTONS: "Vordere Tasten belegen"
|
|
STR_OPDS_BROWSER: "OPDS-Browser"
|
|
STR_COVER_CUSTOM: "Umschlag + Eigenes"
|
|
STR_MENU_RECENT_BOOKS: "Zuletzt gelesen"
|
|
STR_NO_RECENT_BOOKS: "Keine Bücher"
|
|
STR_CALIBRE_DESC: "Calibre-Übertragung (WLAN)"
|
|
STR_FORGET_AND_REMOVE: "WLAN entfernen & Passwort löschen?"
|
|
STR_FORGET_BUTTON: "Entfernen"
|
|
STR_CALIBRE_STARTING: "Calibre starten…"
|
|
STR_CALIBRE_SETUP: "Installation"
|
|
STR_CALIBRE_STATUS: "Status"
|
|
STR_CLEAR_BUTTON: "Leeren"
|
|
STR_DEFAULT_VALUE: "Standard"
|
|
STR_REMAP_PROMPT: "Entsprechende Vordertaste drücken"
|
|
STR_UNASSIGNED: "Leer"
|
|
STR_ALREADY_ASSIGNED: "Bereits zugeordnet"
|
|
STR_REMAP_RESET_HINT: "Seitentaste hoch: Standard"
|
|
STR_REMAP_CANCEL_HINT: "Seitentaste runter: Abbrechen"
|
|
STR_HW_BACK_LABEL: "Zurück (1. Taste)"
|
|
STR_HW_CONFIRM_LABEL: "Bestätigen (2. Taste)"
|
|
STR_HW_LEFT_LABEL: "Links (3. Taste)"
|
|
STR_HW_RIGHT_LABEL: "Rechts (4. Taste)"
|
|
STR_GO_TO_PERCENT: "Gehe zu %"
|
|
STR_GO_HOME_BUTTON: "Zum Anfang"
|
|
STR_SYNC_PROGRESS: "Fortschritt synchronisieren"
|
|
STR_DELETE_CACHE: "Buch-Cache leeren"
|
|
STR_DISPLAY_QR: "Seite als QR anzeigen"
|
|
STR_DELETE: "Löschen"
|
|
STR_REMOVE: "Entfernen"
|
|
STR_CHAPTER_PREFIX: "Kapitel:"
|
|
STR_PAGES_SEPARATOR: " Seiten | "
|
|
STR_BOOK_PREFIX: "Buch: "
|
|
STR_CALIBRE_URL_HINT: "Calibre: URL um /opds ergänzen"
|
|
STR_PERCENT_STEP_HINT: "links/rechts: 1% hoch/runter: 10%"
|
|
STR_SYNCING_TIME: "Zeit synchronisieren…"
|
|
STR_CALC_HASH: "Dokument-Hash berechnen…"
|
|
STR_HASH_FAILED: "Dokument-Hash fehlgeschlagen"
|
|
STR_FETCH_PROGRESS: "Externen Fortschritt abrufen..."
|
|
STR_UPLOAD_PROGRESS: "Fortschritt hochladen…"
|
|
STR_NO_CREDENTIALS_MSG: "Zugangsdaten fehlen"
|
|
STR_KOREADER_SETUP_HINT: "KOReader-Konto unter Einst. anlegen"
|
|
STR_PROGRESS_FOUND: "Gefunden!"
|
|
STR_REMOTE_LABEL: "Extern:"
|
|
STR_LOCAL_LABEL: "Lokal:"
|
|
STR_PAGE_OVERALL_FORMAT: " Seite %d, %.2f%% insgesamt"
|
|
STR_PAGE_TOTAL_OVERALL_FORMAT: " Seite %d/%d, %.2f%% insgesamt"
|
|
STR_DEVICE_FROM_FORMAT: " Von: %s"
|
|
STR_APPLY_REMOTE: "Externen Fortschritt übernehmen"
|
|
STR_UPLOAD_LOCAL: "Lokalen Fortschritt hochladen"
|
|
STR_NO_REMOTE_MSG: "Kein externer Fortschritt"
|
|
STR_UPLOAD_PROMPT: "Aktuelle Position hochladen?"
|
|
STR_UPLOAD_SUCCESS: "Hochgeladen!"
|
|
STR_SYNC_FAILED_MSG: "Fehlgeschlagen"
|
|
STR_SECTION_PREFIX: "Abschnitt"
|
|
STR_UPLOAD: "Hochladen"
|
|
STR_BOOK_S_STYLE: "Buch-Stil"
|
|
STR_EMBEDDED_STYLE: "Eingebetteter Stil"
|
|
STR_OPDS_SERVER_URL: "OPDS-Server-URL"
|
|
STR_SCREENSHOT_BUTTON: "Screenshot aufnehmen"
|
|
STR_FOOTNOTES: "Fußnoten"
|
|
STR_NO_FOOTNOTES: "Keine Fußnoten auf dieser Seite"
|
|
STR_LINK: "[Link]"
|
|
STR_AUTO_TURN_ENABLED: "Auto-Umblättern aktiv: "
|
|
STR_AUTO_TURN_PAGES_PER_MIN: "Auto-Umblättern (Seiten/Min.)"
|
|
STR_IMAGES: "Bilder"
|
|
STR_IMAGES_DISPLAY: "Darstellung"
|
|
STR_IMAGES_PLACEHOLDER: "Platzhalter"
|
|
STR_IMAGES_SUPPRESS: "Unterdrücken"
|
|
STR_SHOW_HIDDEN_FILES: "Versteckte Dateien anzeigen"
|
|
STR_PAGE_OVERLAY: "Seiten-Overlay"
|
|
STR_RECENTS: "Zuletzt"
|
|
STR_MAPPING_REMOTE: "Externe Position zuordnen..."
|
|
STR_MAPPING_LOCAL: "Lokale Position berechnen..."
|
|
STR_INFO: "Info"
|
|
STR_AUTHOR: "Autor"
|
|
STR_SERIES: "Reihe"
|
|
STR_FILE_SIZE: "Größe"
|
|
STR_SLEEP_COVER_OVERLAY: "Standby-Info-Overlay"
|
|
STR_SYSTEM_INFO: "Systeminformationen"
|
|
STR_LOAD_XTC_FAILED: "XTC-Datei konnte nicht geladen werden"
|
|
STR_LOAD_EPUB_FAILED: "EPUB-Datei konnte nicht geladen werden"
|
|
STR_FW_VERSION: "FW-Version"
|
|
STR_CHIP: "Chip"
|
|
STR_CPU: "CPU"
|
|
STR_MHZ: "MHz"
|
|
STR_FREE_RAM: "Freier RAM"
|
|
STR_MIN_FREE: "Min. frei"
|
|
STR_MAX_BLOCK: "Max. Block"
|
|
STR_FLASH_USED: "Flash belegt"
|
|
STR_UPTIME: "Laufzeit"
|
|
STR_CHARGING: "Lädt"
|
|
STR_GATHERING_DATA: "Daten werden gesammelt..."
|
|
STR_READING: "Lese..."
|