## Summary This PR enhances the EPUB reader's bookmark system with two complementary improvements: a per-page bookmark indicator icon and toggle behavior on the existing long-press action. --- ### What Changed **Bookmark Toggle (was: add-only)** The long-press Confirm action now toggles bookmarks rather than always adding. `addBookmark()` checks whether a bookmark with the same xpath already exists in the in-memory cache: - If found → removes it and shows "Bookmark removed." - If not found → adds it and shows "Bookmark added." A new `STR_BOOKMARK_REMOVED` translation string was added to support the removal message. **Bookmark Icon Indicator** A `BookmarkIcon` is now drawn at the top-right corner of the page whenever the current page has a bookmark. `updateBookmarkFlag()` is called at render time to determine whether the current page is bookmarked. **In-Memory Bookmark Cache** Bookmarks are now loaded into `cachedBookmarks` on `onEnter()` rather than being re-read from disk on every toggle. All subsequent add/remove operations work against this cache and flush to disk, avoiding redundant file reads on each bookmark action. **Faster bookmarks list** Previously, calculating "page X/Y" for each entry required decompressing the entire spine item. We now persist `si`/`pc`/`pp` (spine index, page count, and page progress) in the bookmark JSON when saving, and restore them when loading. This avoids the expensive `toCrossPoint()` loop in `onEnter()`, significantly reducing the cost of initializing the bookmarks list. --- ### Files Changed - `EpubReaderActivity.cpp` — `addBookmark()` toggle logic, `updateBookmarkFlag()` (new), icon rendering in `renderContents()`, cache initialization in `onEnter()` - `EpubReaderActivity.h` — new fields: `currentPageBookmarked`, `bookmarkRemoved`, `cachedBookmarks`; new method declaration `updateBookmarkFlag()` --- ### 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? _**< PARTIALLY >**_ --------- Co-authored-by: Julia Nguyen <julia@uxj.io>
305 lines
11 KiB
YAML
305 lines
11 KiB
YAML
_language_name: "Nederlands"
|
|
_language_code: "NL"
|
|
_order: "16"
|
|
|
|
STR_CROSSPOINT: "CrossPoint"
|
|
STR_BOOTING: "OPSTARTEN"
|
|
STR_SLEEPING: "SLAAPSTAND"
|
|
STR_ENTERING_SLEEP: "Gaat in slaapstand"
|
|
STR_BROWSE_FILES: "Bestanden bladeren"
|
|
STR_FILE_TRANSFER: "Bestandsoverdracht"
|
|
STR_SETTINGS_TITLE: "Instellingen"
|
|
STR_CONTINUE_READING: "Verder lezen"
|
|
STR_NO_OPEN_BOOK: "Geen geopend boek"
|
|
STR_START_READING: "Begin hieronder met lezen"
|
|
STR_NO_FILES_FOUND: "Geen bestanden gevonden"
|
|
STR_SELECT_CHAPTER: "Selecteer hoofdstuk"
|
|
STR_NO_CHAPTERS: "Geen hoofdstukken"
|
|
STR_END_OF_BOOK: "Einde van boek"
|
|
STR_EMPTY_CHAPTER: "Leeg hoofdstuk"
|
|
STR_INDEXING: "Indexeren"
|
|
STR_MEMORY_ERROR: "Geheugenfout"
|
|
STR_PAGE_LOAD_ERROR: "Fout bij laden pagina"
|
|
STR_EMPTY_FILE: "Leeg bestand"
|
|
STR_OUT_OF_BOUNDS: "Buiten bereik"
|
|
STR_LOADING: "Laden..."
|
|
STR_LOADING_POPUP: "Laden"
|
|
STR_WIFI_NETWORKS: "Wi-Fi-netwerken"
|
|
STR_NO_NETWORKS: "Geen netwerken gevonden"
|
|
STR_NETWORKS_FOUND: "%zu netwerken gevonden"
|
|
STR_SCANNING: "Scannen..."
|
|
STR_CONNECTING: "Verbinden..."
|
|
STR_CONNECTED: "Verbonden!"
|
|
STR_CONNECTION_FAILED: "Verbinding mislukt"
|
|
STR_FORGET_NETWORK: "Netwerk vergeten?"
|
|
STR_SAVE_PASSWORD: "Wachtwoord opslaan voor volgende keer?"
|
|
STR_PRESS_OK_SCAN: "Druk op OK om opnieuw te scannen"
|
|
STR_JOIN_NETWORK: "Verbind met netwerk"
|
|
STR_CREATE_HOTSPOT: "Hotspot maken"
|
|
STR_JOIN_DESC: "Verbind met een bestaand Wi-Fi-netwerk"
|
|
STR_HOTSPOT_DESC: "Maak een Wi-Fi-netwerk waar anderen mee kunnen verbinden"
|
|
STR_STARTING_HOTSPOT: "Hotspot starten..."
|
|
STR_HOTSPOT_MODE: "Hotspot-modus"
|
|
STR_CONNECT_WIFI_HINT: "Verbind je apparaat met dit Wi-Fi-netwerk"
|
|
STR_OPEN_URL_HINT: "Open deze URL in je browser"
|
|
STR_OR_HTTP_PREFIX: "of http://"
|
|
STR_SCAN_QR_HINT: "of scan de QR-code met je telefoon:"
|
|
STR_CALIBRE_WIRELESS: "Calibre Wireless"
|
|
STR_NETWORK_LEGEND: "* = Beveiligd | + = Opgeslagen"
|
|
STR_MAC_ADDRESS: "MAC-adres:"
|
|
STR_CHECKING_WIFI: "Wi-Fi controleren..."
|
|
STR_ENTER_WIFI_PASSWORD: "Voer Wi-Fi-wachtwoord in"
|
|
STR_TO_PREFIX: "met "
|
|
STR_CALIBRE_RECEIVING: "Bezig met ontvangen: "
|
|
STR_CALIBRE_RECEIVED: "Ontvangen: "
|
|
STR_CALIBRE_INSTRUCTION_1: "1) Installeer CrossPoint Reader plugin"
|
|
STR_CALIBRE_INSTRUCTION_2: "2) Gebruik hetzelfde Wi-Fi-netwerk"
|
|
STR_CALIBRE_INSTRUCTION_3: "3) In Calibre: \"Send to device\""
|
|
STR_CALIBRE_INSTRUCTION_4: "\"Houd dit scherm open tijdens verzenden\""
|
|
STR_CAT_DISPLAY: "Scherm"
|
|
STR_CAT_READER: "Lezer"
|
|
STR_CAT_CONTROLS: "Bediening"
|
|
STR_CAT_SYSTEM: "Systeem"
|
|
STR_SLEEP_SCREEN: "Slaapscherm"
|
|
STR_SLEEP_COVER_MODE: "Slaapscherm omslag-modus"
|
|
STR_HIDE_BATTERY: "Batterij % verbergen"
|
|
STR_EXTRA_SPACING: "Extra regelafstand alinea"
|
|
STR_TEXT_AA: "Tekst Anti-Aliasing"
|
|
STR_IMAGES: "Afbeeldingen"
|
|
STR_IMAGES_DISPLAY: "Weergave"
|
|
STR_IMAGES_PLACEHOLDER: "Placeholder"
|
|
STR_IMAGES_SUPPRESS: "Verbergen"
|
|
STR_SHORT_PWR_BTN: "Korte klik aan/uit-knop"
|
|
STR_ORIENTATION: "Leesstand"
|
|
STR_SIDE_BTN_LAYOUT: "Indeling zijknoppen (lezer)"
|
|
STR_FRONT_BTN_FOLLOW_ORIENTATION: "Richt voorste knoppen"
|
|
STR_LONG_PRESS_BEHAVIOR: "Long-press button behavior"
|
|
STR_LONG_PRESS_BEHAVIOR_OFF: "OFF"
|
|
STR_LONG_PRESS_BEHAVIOR_SKIP: "Chapter skip"
|
|
STR_LONG_PRESS_BEHAVIOR_ORIENTATION: "Orientation change"
|
|
STR_FONT_PREVIEW_TEXT: "Pa's wijze lynx bezag vroom het fikse aquaduct"
|
|
STR_FONT_FAMILY: "Lettertype lezer"
|
|
STR_FONT_SIZE: "Lettergrootte lezer"
|
|
STR_LINE_SPACING: "Regelafstand lezer"
|
|
STR_SCREEN_MARGIN: "Schermmarge lezer"
|
|
STR_PARA_ALIGNMENT: "Uitlijning alinea lezer"
|
|
STR_HYPHENATION: "Woordafbreking"
|
|
STR_TIME_TO_SLEEP: "Tijd tot slaapstand"
|
|
STR_SHOW_HIDDEN_FILES: "Toon verborgen bestanden"
|
|
STR_REMOVE_READ_FROM_RECENTS: "Gelezen boeken wissen uit de lijst Recent"
|
|
STR_MOVE_FINISHED_TO_READ: "Voltooide boeken naar de Read-map verplaatsen"
|
|
STR_REFRESH_FREQ: "Verversingsfrequentie"
|
|
STR_KOREADER_SYNC: "KOReader Sync"
|
|
STR_CHECK_UPDATES: "Controleren op updates"
|
|
STR_LANGUAGE: "Taal"
|
|
STR_CLEAR_READING_CACHE: "Leescache wissen"
|
|
STR_USERNAME: "Gebruikersnaam"
|
|
STR_PASSWORD: "Wachtwoord"
|
|
STR_SYNC_SERVER_URL: "Sync-server URL"
|
|
STR_DOCUMENT_MATCHING: "Documentkoppeling"
|
|
STR_AUTHENTICATE: "Authenticatie"
|
|
STR_KOREADER_USERNAME: "KOReader gebruikersnaam"
|
|
STR_KOREADER_PASSWORD: "KOReader wachtwoord"
|
|
STR_FILENAME: "Bestandsnaam"
|
|
STR_BINARY: "Binair"
|
|
STR_SET_CREDENTIALS_FIRST: "Stel eerst inloggegevens in"
|
|
STR_WIFI_CONN_FAILED: "Wi-Fi-verbinding mislukt"
|
|
STR_AUTHENTICATING: "Authenticeren..."
|
|
STR_AUTH_SUCCESS: "Authenticatie geslaagd!"
|
|
STR_KOREADER_AUTH: "KOReader-authenticatie"
|
|
STR_SYNC_READY: "KOReader sync is klaar voor gebruik"
|
|
STR_AUTH_FAILED: "Authenticatie mislukt"
|
|
STR_DONE: "Klaar"
|
|
STR_CLEAR_CACHE_WARNING_1: "Dit wist alle gecachte boekgegevens."
|
|
STR_CLEAR_CACHE_WARNING_2: "Alle leesvoortgang gaat verloren!"
|
|
STR_CLEAR_CACHE_WARNING_3: "Boeken moeten opnieuw worden geïndexeerd"
|
|
STR_CLEAR_CACHE_WARNING_4: "wanneer ze weer worden geopend."
|
|
STR_CLEARING_CACHE: "Cache wissen..."
|
|
STR_CACHE_CLEARED: "Cache gewist"
|
|
STR_ITEMS_REMOVED: "items verwijderd"
|
|
STR_FAILED_LOWER: "mislukt"
|
|
STR_CLEAR_CACHE_FAILED: "Cache wissen mislukt"
|
|
STR_CHECK_SERIAL_OUTPUT: "Check seriële output voor details"
|
|
STR_DARK: "Donker"
|
|
STR_LIGHT: "Licht"
|
|
STR_CUSTOM: "Aangepast"
|
|
STR_COVER: "Omslag"
|
|
STR_NONE_OPT: "Geen"
|
|
STR_FIT: "Passend"
|
|
STR_CROP: "Bijsnijden"
|
|
STR_NEVER: "Nooit"
|
|
STR_IN_READER: "In lezer"
|
|
STR_ALWAYS: "Altijd"
|
|
STR_IGNORE: "Negeren"
|
|
STR_SLEEP: "Slaap"
|
|
STR_PAGE_TURN: "Pagina omslaan"
|
|
STR_PORTRAIT: "Staand"
|
|
STR_LANDSCAPE_CW: "Liggend (rechtsom)"
|
|
STR_INVERTED: "Omgekeerd"
|
|
STR_LANDSCAPE_CCW: "Liggend (linksom)"
|
|
STR_PREV_NEXT: "Vorige/Volgende"
|
|
STR_NEXT_PREV: "Volgende/Vorige"
|
|
STR_NOTO_SERIF: "Noto Serif"
|
|
STR_NOTO_SANS: "Noto Sans"
|
|
STR_SMALL: "Klein"
|
|
STR_MEDIUM: "Gemiddeld"
|
|
STR_LARGE: "Groot"
|
|
STR_X_LARGE: "Extra groot"
|
|
STR_TIGHT: "Smal"
|
|
STR_NORMAL: "Normaal"
|
|
STR_WIDE: "Breed"
|
|
STR_JUSTIFY: "Uitvullen"
|
|
STR_ALIGN_LEFT: "Links"
|
|
STR_CENTER: "Centreren"
|
|
STR_ALIGN_RIGHT: "Rechts"
|
|
STR_PAGES_1: "1 pagina"
|
|
STR_PAGES_5: "5 pagina's"
|
|
STR_PAGES_10: "10 pagina's"
|
|
STR_PAGES_15: "15 pagina's"
|
|
STR_PAGES_30: "30 pagina's"
|
|
STR_UPDATE: "Update"
|
|
STR_CHECKING_UPDATE: "Controleren op update..."
|
|
STR_NEW_UPDATE: "Nieuwe update beschikbaar!"
|
|
STR_CURRENT_VERSION: "Huidige versie: "
|
|
STR_NEW_VERSION: "Nieuwe versie: "
|
|
STR_UPDATING: "Updaten..."
|
|
STR_NO_UPDATE: "Geen update beschikbaar"
|
|
STR_UPDATE_FAILED: "Update mislukt"
|
|
STR_UPDATE_COMPLETE: "Update voltooid"
|
|
STR_POWER_ON_HINT: "Houd de aan/uit-knop ingedrukt om in te schakelen"
|
|
STR_NO_ENTRIES: "Geen items gevonden"
|
|
STR_DOWNLOADING: "Downloaden..."
|
|
STR_DOWNLOAD_FAILED: "Download mislukt"
|
|
STR_ERROR_MSG: "Fout:"
|
|
STR_UNNAMED: "Naamloos"
|
|
STR_NO_SERVER_URL: "Geen server-URL ingesteld"
|
|
STR_FETCH_FEED_FAILED: "Ophalen feed mislukt"
|
|
STR_PARSE_FEED_FAILED: "Verwerken feed mislukt"
|
|
STR_NETWORK_PREFIX: "Netwerk: "
|
|
STR_IP_ADDRESS_PREFIX: "IP-adres: "
|
|
STR_ERROR_GENERAL_FAILURE: "Fout: Algemene fout"
|
|
STR_ERROR_NETWORK_NOT_FOUND: "Fout: Netwerk niet gevonden"
|
|
STR_ERROR_CONNECTION_TIMEOUT: "Fout: Verbindingstime-out"
|
|
STR_SD_CARD: "SD-kaart"
|
|
STR_BACK: "« Terug"
|
|
STR_EXIT: "« Sluit"
|
|
STR_HOME: "« Home"
|
|
STR_SELECT: "Kies"
|
|
STR_SELECTED: "Geselecteerd"
|
|
STR_TOGGLE: "Wissel"
|
|
STR_TOGGLE_BOOKMARK: "Bladwijzer wisselen"
|
|
STR_BOOKMARK_REMOVED: "Bladwijzer verwijderd."
|
|
STR_HOLD_OPEN_TO_DELETE: "Houd Openen ingedrukt om te verwijderen"
|
|
STR_CONFIRM: "Bevestig"
|
|
STR_CANCEL: "Annuleer"
|
|
STR_CONNECT: "Verbind"
|
|
STR_OPEN: "Open"
|
|
STR_DOWNLOAD: "Download"
|
|
STR_RETRY: "Opnieuw"
|
|
STR_YES: "Ja"
|
|
STR_NO: "Nee"
|
|
STR_SHOW: "Toon"
|
|
STR_HIDE: "Verberg"
|
|
STR_STATE_ON: "AAN"
|
|
STR_STATE_OFF: "UIT"
|
|
STR_NOT_SET: "Niet ingesteld"
|
|
STR_DIR_LEFT: "Links"
|
|
STR_DIR_RIGHT: "Rechts"
|
|
STR_DIR_UP: "Omhoog"
|
|
STR_DIR_DOWN: "Omlaag"
|
|
STR_OK_BUTTON: "OK"
|
|
STR_SLEEP_COVER_FILTER: "Slaapscherm omslag-filter"
|
|
STR_FILTER_CONTRAST: "Contrast"
|
|
STR_CUSTOMISE_STATUS_BAR: "Statusbalk aanpassen"
|
|
STR_CHAPTER_PAGE_COUNT: "Paginanummering hoofdstuk"
|
|
STR_BOOK_PROGRESS_PERCENTAGE: "Percentage voortgang boek"
|
|
STR_PROGRESS_BAR: "Voortgangsbalk"
|
|
STR_PROGRESS_BAR_THICKNESS: "Dikte voortgangsbalk"
|
|
STR_PROGRESS_BAR_THIN: "Dun"
|
|
STR_PROGRESS_BAR_MEDIUM: "Gemiddeld"
|
|
STR_PROGRESS_BAR_THICK: "Dik"
|
|
STR_BOOK: "Boek"
|
|
STR_CHAPTER: "Hoofdstuk"
|
|
STR_EXAMPLE_CHAPTER: "Hoofdstuk 21"
|
|
STR_EXAMPLE_BOOK: "Boektitel"
|
|
STR_PREVIEW: "Voorbeeld"
|
|
STR_TITLE: "Titel"
|
|
STR_BATTERY: "Batterij"
|
|
STR_UI_THEME: "UI Thema"
|
|
STR_THEME_CLASSIC: "Klassiek"
|
|
STR_THEME_LYRA: "Lyra"
|
|
STR_THEME_LYRA_EXTENDED: "Lyra Uitgebreid"
|
|
STR_SUNLIGHT_FADING_FIX: "Zonlicht vervaging fix"
|
|
STR_QUICK_RESUME_TIMEOUT: "Snel hervatten bij timeout"
|
|
STR_REMAP_FRONT_BUTTONS: "Knoppen voorzijde wijzigen"
|
|
STR_OPDS_BROWSER: "OPDS-browser"
|
|
STR_COVER_CUSTOM: "Omslag + Aangepast"
|
|
STR_QUICK_RESUME: "Snel hervatten"
|
|
STR_MENU_RECENT_BOOKS: "Recente boeken"
|
|
STR_REMOVE_FROM_RECENTS: "Verwijderen uit Recente boeken?"
|
|
STR_NO_RECENT_BOOKS: "Geen recente boeken"
|
|
STR_CALIBRE_DESC: "Gebruik Calibre draadloze overdracht"
|
|
STR_FORGET_AND_REMOVE: "Netwerk vergeten en wachtwoord verwijderen?"
|
|
STR_FORGET_BUTTON: "Vergeet"
|
|
STR_CALIBRE_STARTING: "Calibre starten..."
|
|
STR_CALIBRE_SETUP: "Installatie"
|
|
STR_CALIBRE_STATUS: "Status"
|
|
STR_CLEAR_BUTTON: "Wis"
|
|
STR_DEFAULT_VALUE: "Standaard"
|
|
STR_REMAP_PROMPT: "Druk op een knop voorop voor elke functie"
|
|
STR_UNASSIGNED: "Niet toegewezen"
|
|
STR_ALREADY_ASSIGNED: "Al toegewezen"
|
|
STR_REMAP_RESET_HINT: "Zijknop Omhoog: Standaardindeling herstellen"
|
|
STR_REMAP_CANCEL_HINT: "Zijknop Omlaag: Toewijzen annuleren"
|
|
STR_HW_BACK_LABEL: "Terug (1e knop)"
|
|
STR_HW_CONFIRM_LABEL: "Bevestig (2e knop)"
|
|
STR_HW_LEFT_LABEL: "Links (3e knop)"
|
|
STR_HW_RIGHT_LABEL: "Rechts (4e knop)"
|
|
STR_GO_TO_PERCENT: "Ga naar %"
|
|
STR_GO_HOME_BUTTON: "Naar Home"
|
|
STR_SYNC_PROGRESS: "Voortgang synchroniseren"
|
|
STR_DELETE_CACHE: "Boekcache verwijderen"
|
|
STR_DELETE: "Verwijder"
|
|
STR_DISPLAY_QR: "Pagina als QR tonen"
|
|
STR_CHAPTER_PREFIX: "Hoofdstuk: "
|
|
STR_PAGES_SEPARATOR: " pagina's | "
|
|
STR_BOOK_PREFIX: "Boek: "
|
|
STR_CALIBRE_URL_HINT: "Voeg voor Calibre /opds toe aan de URL"
|
|
STR_PERCENT_STEP_HINT: "Links/Rechts: 1% Omhoog/Omlaag: 10%"
|
|
STR_SYNCING_TIME: "Tijd synchroniseren..."
|
|
STR_CALC_HASH: "Document-hash berekenen..."
|
|
STR_HASH_FAILED: "Document-hash berekenen mislukt"
|
|
STR_FETCH_PROGRESS: "Voortgang ophalen..."
|
|
STR_UPLOAD_PROGRESS: "Voortgang uploaden..."
|
|
STR_NO_CREDENTIALS_MSG: "Geen inloggegevens ingesteld"
|
|
STR_KOREADER_SETUP_HINT: "Stel KOReader-account in bij Instellingen"
|
|
STR_PROGRESS_FOUND: "Voortgang gevonden!"
|
|
STR_REMOTE_LABEL: "Extern:"
|
|
STR_LOCAL_LABEL: "Lokaal:"
|
|
STR_PAGE_OVERALL_FORMAT: "Pagina %d, %.2f%% totaal"
|
|
STR_PAGE_TOTAL_OVERALL_FORMAT: "Pagina %d/%d, %.2f%% totaal"
|
|
STR_DEVICE_FROM_FORMAT: " Van: %s"
|
|
STR_APPLY_REMOTE: "Externe voortgang toepassen"
|
|
STR_UPLOAD_LOCAL: "Lokale voortgang uploaden"
|
|
STR_NO_REMOTE_MSG: "Geen externe voortgang gevonden"
|
|
STR_UPLOAD_PROMPT: "Huidige positie uploaden?"
|
|
STR_UPLOAD_SUCCESS: "Voortgang geüpload!"
|
|
STR_SYNC_FAILED_MSG: "Sync mislukt"
|
|
STR_SAVE_PROGRESS_FAILED: "Voortgang opslaan mislukt"
|
|
STR_SECTION_PREFIX: "Sectie "
|
|
STR_UPLOAD: "Uploaden"
|
|
STR_BOOK_S_STYLE: "Stijl van boek"
|
|
STR_EMBEDDED_STYLE: "Ingebedde stijl"
|
|
STR_FOCUS_READING: "Gefocust lezen"
|
|
STR_OPDS_SERVER_URL: "OPDS-server URL"
|
|
STR_FOOTNOTES: "Voetnoten"
|
|
STR_NO_FOOTNOTES: "Geen voetnoten op deze pagina"
|
|
STR_LINK: "[link]"
|
|
STR_SLEEP_TIMER_VALUE_FORMAT: "%u min"
|
|
STR_SLEEP_NEVER: "Nooit"
|
|
STR_SLEEP_TIMER_STEP_HINT: "Links/Rechts: 1 min Omhoog/Omlaag: 5 min"
|
|
STR_SCREENSHOT_BUTTON: "Screenshot maken"
|
|
STR_AUTO_TURN_ENABLED: "Automatisch omslaan ingeschakeld: "
|
|
STR_AUTO_TURN_PAGES_PER_MIN: "Autom. omslaan (pagina's per minuut)"
|
|
STR_TILT_PAGE_TURN: "Kantel om te bladeren"
|