## 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>
277 lines
11 KiB
YAML
277 lines
11 KiB
YAML
_language_name: "Čeština"
|
|
_language_code: "CS"
|
|
_order: "4"
|
|
|
|
STR_CROSSPOINT: "CrossPoint"
|
|
STR_BOOTING: "SPUŠTĚNÍ"
|
|
STR_SLEEPING: "SPÁNEK"
|
|
STR_ENTERING_SLEEP: "Vstup do režimu spánku"
|
|
STR_BROWSE_FILES: "Procházet soubory"
|
|
STR_FILE_TRANSFER: "Přenos souborů"
|
|
STR_SETTINGS_TITLE: "Nastavení"
|
|
STR_CONTINUE_READING: "Pokračovat ve čtení"
|
|
STR_NO_OPEN_BOOK: "Žádná otevřená kniha"
|
|
STR_START_READING: "Začněte číst níže"
|
|
STR_NO_FILES_FOUND: "Nebyly nalezeny žádné soubory"
|
|
STR_SELECT_CHAPTER: "Vybrat kapitolu"
|
|
STR_NO_CHAPTERS: "Žádné kapitoly"
|
|
STR_END_OF_BOOK: "Konec knihy"
|
|
STR_EMPTY_CHAPTER: "Prázdná kapitola"
|
|
STR_INDEXING: "Indexování"
|
|
STR_MEMORY_ERROR: "Chyba paměti"
|
|
STR_PAGE_LOAD_ERROR: "Chyba načítání stránky"
|
|
STR_EMPTY_FILE: "Prázdný soubor"
|
|
STR_OUT_OF_BOUNDS: "Mimo hranice"
|
|
STR_LOADING: "Načítání..."
|
|
STR_LOADING_POPUP: "Načítání"
|
|
STR_WIFI_NETWORKS: "Wi-Fi sítě"
|
|
STR_NO_NETWORKS: "Žádné sítě nenalezeny"
|
|
STR_NETWORKS_FOUND: "Nalezeno %zu sítí"
|
|
STR_SCANNING: "Skenování..."
|
|
STR_CONNECTING: "Připojování..."
|
|
STR_CONNECTED: "Připojeno!"
|
|
STR_CONNECTION_FAILED: "Připojení se nezdařilo"
|
|
STR_FORGET_NETWORK: "Zapomenout síť?"
|
|
STR_SAVE_PASSWORD: "Uložit heslo pro příště?"
|
|
STR_PRESS_OK_SCAN: "Stiskněte OK pro přeskenování"
|
|
STR_JOIN_NETWORK: "Připojit se k síti"
|
|
STR_CREATE_HOTSPOT: "Vytvořit hotspot"
|
|
STR_JOIN_DESC: "Připojit se k existující síti Wi-Fi"
|
|
STR_HOTSPOT_DESC: "Vytvořit síť Wi-Fi, ke které se mohou připojit ostatní"
|
|
STR_STARTING_HOTSPOT: "Spouštění hotspotu..."
|
|
STR_HOTSPOT_MODE: "Režim hotspotu"
|
|
STR_CONNECT_WIFI_HINT: "Připojte své zařízení k této síti Wi-Fi"
|
|
STR_OPEN_URL_HINT: "Otevřete tuto URL ve svém prohlížeči"
|
|
STR_OR_HTTP_PREFIX: "nebo http://"
|
|
STR_SCAN_QR_HINT: "nebo naskenujte QR kód telefonem:"
|
|
STR_CALIBRE_WIRELESS: "Calibre Wireless"
|
|
STR_NETWORK_LEGEND: "* = Šifrováno | + = Uloženo"
|
|
STR_MAC_ADDRESS: "MAC adresa:"
|
|
STR_CHECKING_WIFI: "Kontrola Wi-Fi..."
|
|
STR_ENTER_WIFI_PASSWORD: "Zadejte heslo Wi-Fi"
|
|
STR_TO_PREFIX: "pro"
|
|
STR_CALIBRE_RECEIVING: "Příjem:"
|
|
STR_CALIBRE_RECEIVED: "Přijato:"
|
|
STR_CALIBRE_INSTRUCTION_1: "1) Nainstalujte plugin CrossPoint Reader"
|
|
STR_CALIBRE_INSTRUCTION_2: "2) Buďte ve stejné síti Wi-Fi"
|
|
STR_CALIBRE_INSTRUCTION_3: "3) V Calibre: „Odeslat do zařízení“"
|
|
STR_CALIBRE_INSTRUCTION_4: "„Při odesílání ponechat tuto obrazovku otevřenou“"
|
|
STR_CAT_DISPLAY: "Displej"
|
|
STR_CAT_READER: "Čtečka"
|
|
STR_CAT_CONTROLS: "Ovládací prvky"
|
|
STR_CAT_SYSTEM: "Systém"
|
|
STR_SLEEP_SCREEN: "Obrazovka spánku"
|
|
STR_SLEEP_COVER_MODE: "Obrazovka spánku Režim krytu"
|
|
STR_HIDE_BATTERY: "Skrýt baterii %"
|
|
STR_EXTRA_SPACING: "Extra mezery mezi odstavci"
|
|
STR_TEXT_AA: "Vyhlazování textu"
|
|
STR_SHORT_PWR_BTN: "Krátké stisknutí tlačítka napájení"
|
|
STR_ORIENTATION: "Orientace čtení"
|
|
STR_SIDE_BTN_LAYOUT: "Rozvržení bočních tlačítek (čtečka)"
|
|
STR_FRONT_BTN_FOLLOW_ORIENTATION: "Orientovat přední tlačítka"
|
|
STR_LONG_PRESS_BEHAVIOR: "Chování při dlouhém stisknutí tlačítka"
|
|
STR_LONG_PRESS_BEHAVIOR_OFF: "VYP"
|
|
STR_LONG_PRESS_BEHAVIOR_SKIP: "Přeskočení kapitoly"
|
|
STR_LONG_PRESS_BEHAVIOR_ORIENTATION: "Změna orientace"
|
|
STR_FONT_PREVIEW_TEXT: "Příliš žluťoučký kůň úpěl ďábelské ódy"
|
|
STR_FONT_FAMILY: "Rodina písem čtečky"
|
|
STR_FONT_SIZE: "Velikost písma rozhraní"
|
|
STR_LINE_SPACING: "Řádkování čtečky"
|
|
STR_SCREEN_MARGIN: "Okraj obrazovky čtečky"
|
|
STR_PARA_ALIGNMENT: "Zarovnání odstavců čtečky"
|
|
STR_HYPHENATION: "Dělení slov"
|
|
STR_TIME_TO_SLEEP: "Čas do uspání"
|
|
STR_REMOVE_READ_FROM_RECENTS: "Vymazat přečtené knihy ze seznamu nedávných"
|
|
STR_MOVE_FINISHED_TO_READ: "Přesunout přečtené knihy do složky Read"
|
|
STR_REFRESH_FREQ: "Frekvence obnovení"
|
|
STR_KOREADER_SYNC: "KOReaderu Sync"
|
|
STR_CHECK_UPDATES: "Zkontrolovat aktualizace"
|
|
STR_LANGUAGE: "Jazyk"
|
|
STR_CLEAR_READING_CACHE: "Vymazat mezipaměť čtení"
|
|
STR_USERNAME: "Uživatelské jméno"
|
|
STR_PASSWORD: "Heslo"
|
|
STR_SYNC_SERVER_URL: "URL synch. serveru"
|
|
STR_DOCUMENT_MATCHING: "Párování dokumentů"
|
|
STR_AUTHENTICATE: "Ověření"
|
|
STR_KOREADER_USERNAME: "Uživ. jméno KOReaderu"
|
|
STR_KOREADER_PASSWORD: "Heslo KOReaderu"
|
|
STR_FILENAME: "Název souboru"
|
|
STR_BINARY: "Binární"
|
|
STR_SET_CREDENTIALS_FIRST: "Nastavte přihlašovací údaje"
|
|
STR_WIFI_CONN_FAILED: "Připojení k Wi-Fi selhalo"
|
|
STR_AUTHENTICATING: "Ověřování..."
|
|
STR_AUTH_SUCCESS: "Úspěšné ověření!"
|
|
STR_KOREADER_AUTH: "Ověření KOReaderu"
|
|
STR_SYNC_READY: "Synchronizace KOReaderu je připravena k použití"
|
|
STR_AUTH_FAILED: "Ověření selhalo"
|
|
STR_DONE: "Hotovo"
|
|
STR_CLEAR_CACHE_WARNING_1: "Tímto vymažete všechna data knih v mezipaměti."
|
|
STR_CLEAR_CACHE_WARNING_2: "Veškerý průběh čtení bude ztracen!"
|
|
STR_CLEAR_CACHE_WARNING_3: "Knihy bude nutné znovu indexovat"
|
|
STR_CLEAR_CACHE_WARNING_4: "při opětovném otevření."
|
|
STR_CLEARING_CACHE: "Mazání mezipaměti..."
|
|
STR_CACHE_CLEARED: "Mezipaměť vymazána"
|
|
STR_ITEMS_REMOVED: "položky odstraněny"
|
|
STR_FAILED_LOWER: "selhalo"
|
|
STR_CLEAR_CACHE_FAILED: "Vymazání mezipaměti se nezdařilo"
|
|
STR_CHECK_SERIAL_OUTPUT: "Podrobnosti naleznete v sériovém výstupu"
|
|
STR_DARK: "Tmavý"
|
|
STR_LIGHT: "Světlý"
|
|
STR_CUSTOM: "Vlastní"
|
|
STR_COVER: "Obálka"
|
|
STR_NONE_OPT: "Žádný"
|
|
STR_FIT: "Přizpůsobit"
|
|
STR_CROP: "Oříznout"
|
|
STR_NEVER: "Nikdy"
|
|
STR_IN_READER: "Ve čtečce"
|
|
STR_ALWAYS: "Vždy"
|
|
STR_IGNORE: "Ignorovat"
|
|
STR_SLEEP: "Spánek"
|
|
STR_PAGE_TURN: "Otáčení stránek"
|
|
STR_PORTRAIT: "Na výšku"
|
|
STR_LANDSCAPE_CW: "Na šířku po směru hod. ručiček"
|
|
STR_INVERTED: "Invertovaný"
|
|
STR_LANDSCAPE_CCW: "Na šířku proti směru hod. ručiček"
|
|
STR_PREV_NEXT: "Předchozí/Další"
|
|
STR_NEXT_PREV: "Další/Předchozí"
|
|
STR_NOTO_SERIF: "Noto Serif"
|
|
STR_NOTO_SANS: "Noto Sans"
|
|
STR_SMALL: "Malý"
|
|
STR_MEDIUM: "Střední"
|
|
STR_LARGE: "Velký"
|
|
STR_X_LARGE: "Obří"
|
|
STR_TIGHT: "Těsný"
|
|
STR_NORMAL: "Normální"
|
|
STR_WIDE: "Široký"
|
|
STR_JUSTIFY: "Zarovnat do bloku"
|
|
STR_ALIGN_LEFT: "Vlevo"
|
|
STR_CENTER: "Na střed"
|
|
STR_ALIGN_RIGHT: "Vpravo"
|
|
STR_PAGES_1: "1 stránka"
|
|
STR_PAGES_5: "5 stránek"
|
|
STR_PAGES_10: "10 stránek"
|
|
STR_PAGES_15: "15 stránek"
|
|
STR_PAGES_30: "30 stránek"
|
|
STR_UPDATE: "Aktualizace"
|
|
STR_CHECKING_UPDATE: "Kontrola aktualizací…"
|
|
STR_NEW_UPDATE: "Nová aktualizace k dispozici!"
|
|
STR_CURRENT_VERSION: "Aktuální verze:"
|
|
STR_NEW_VERSION: "Nová verze:"
|
|
STR_UPDATING: "Aktualizace..."
|
|
STR_NO_UPDATE: "Žádná aktualizace k dispozici"
|
|
STR_UPDATE_FAILED: "Aktualizace selhala"
|
|
STR_UPDATE_COMPLETE: "Aktualizace dokončena"
|
|
STR_POWER_ON_HINT: "Stiskněte a podržte tlačítko napájení pro opětovné zapnutí"
|
|
STR_NO_ENTRIES: "Žádné položky nenalezeny"
|
|
STR_DOWNLOADING: "Stahování..."
|
|
STR_DOWNLOAD_FAILED: "Stahování selhalo"
|
|
STR_ERROR_MSG: "Chyba:"
|
|
STR_UNNAMED: "Nepojmenované"
|
|
STR_NO_SERVER_URL: "Není nakonfigurována adresa URL serveru"
|
|
STR_FETCH_FEED_FAILED: "Načtení kanálu se nezdařilo"
|
|
STR_PARSE_FEED_FAILED: "Analyzování kanálu se nezdařilo"
|
|
STR_NETWORK_PREFIX: "Síť:"
|
|
STR_IP_ADDRESS_PREFIX: "IP adresa:"
|
|
STR_ERROR_GENERAL_FAILURE: "Chyba: Obecná chyba"
|
|
STR_ERROR_NETWORK_NOT_FOUND: "Chyba: Síť nenalezena"
|
|
STR_ERROR_CONNECTION_TIMEOUT: "Chyba: Časový limit připojení"
|
|
STR_SD_CARD: "SD karta"
|
|
STR_BACK: "« Zpět"
|
|
STR_EXIT: "« Konec"
|
|
STR_HOME: "« Domů"
|
|
STR_SELECT: "Vybrat"
|
|
STR_TOGGLE: "Přepnout"
|
|
STR_TOGGLE_BOOKMARK: "Přepnout záložku"
|
|
STR_BOOKMARK_REMOVED: "Záložka odstraněna."
|
|
STR_HOLD_OPEN_TO_DELETE: "Podržte Otevřít pro smazání"
|
|
STR_CONFIRM: "Potvrdit"
|
|
STR_CANCEL: "Zrušit"
|
|
STR_CONNECT: "Připojit"
|
|
STR_OPEN: "Otevřít"
|
|
STR_DOWNLOAD: "Stáhnout"
|
|
STR_RETRY: "Zkusit znovu"
|
|
STR_YES: "Ano"
|
|
STR_NO: "Ne"
|
|
STR_STATE_ON: "ZAP"
|
|
STR_STATE_OFF: "VYP"
|
|
STR_NOT_SET: "Nenastaveno"
|
|
STR_DIR_LEFT: "Vlevo"
|
|
STR_DIR_RIGHT: "Vpravo"
|
|
STR_DIR_UP: "Nahoru"
|
|
STR_DIR_DOWN: "Dolů"
|
|
STR_OK_BUTTON: "OK"
|
|
STR_SLEEP_COVER_FILTER: "Filtr obrazovky spánku"
|
|
STR_FILTER_CONTRAST: "Kontrast"
|
|
STR_UI_THEME: "Šablona rozhraní"
|
|
STR_THEME_CLASSIC: "Klasická"
|
|
STR_THEME_LYRA: "Lyra"
|
|
STR_THEME_ROUNDEDRAFF: "RoundedRaff"
|
|
STR_THEME_LYRA_EXTENDED: "Lyra Extended"
|
|
STR_SUNLIGHT_FADING_FIX: "Oprava blednutí na slunci"
|
|
STR_QUICK_RESUME_TIMEOUT: "Rychlé navázání po vypršení"
|
|
STR_REMAP_FRONT_BUTTONS: "Přemapovat přední tlačítka"
|
|
STR_OPDS_BROWSER: "Prohlížeč OPDS"
|
|
STR_COVER_CUSTOM: "Obálka + Vlastní"
|
|
STR_QUICK_RESUME: "Rychlé navázání"
|
|
STR_MENU_RECENT_BOOKS: "Nedávné knihy"
|
|
STR_REMOVE_FROM_RECENTS: "Odebrat z nedávných knih?"
|
|
STR_NO_RECENT_BOOKS: "Žádné nedávné knihy"
|
|
STR_CALIBRE_DESC: "Používat přenosy bezdrátových zařízení Calibre"
|
|
STR_FORGET_AND_REMOVE: "Zapomenout síť a odstranit uložené heslo?"
|
|
STR_FORGET_BUTTON: "Zapomenout"
|
|
STR_CALIBRE_STARTING: "Spuštění Calibre..."
|
|
STR_CALIBRE_SETUP: "Nastavení"
|
|
STR_CALIBRE_STATUS: "Stav"
|
|
STR_CLEAR_BUTTON: "Vymazat"
|
|
STR_DEFAULT_VALUE: "Výchozí"
|
|
STR_REMAP_PROMPT: "Stiskněte přední tlačítko pro každou roli"
|
|
STR_UNASSIGNED: "Nepřiřazeno"
|
|
STR_ALREADY_ASSIGNED: "Již přiřazeno"
|
|
STR_REMAP_RESET_HINT: "Boční tlačítko Nahoru: Obnovit výchozí rozvržení"
|
|
STR_REMAP_CANCEL_HINT: "Boční tlačítko Dolů: Zrušit přemapování"
|
|
STR_HW_BACK_LABEL: "Zpět (1. tlačítko)"
|
|
STR_HW_CONFIRM_LABEL: "Potvrdit (2. tlačítko)"
|
|
STR_HW_LEFT_LABEL: "Vlevo (3. tlačítko)"
|
|
STR_HW_RIGHT_LABEL: "Vpravo (4. tlačítko)"
|
|
STR_GO_TO_PERCENT: "Přejít na %"
|
|
STR_GO_HOME_BUTTON: "Přejít Domů"
|
|
STR_SYNC_PROGRESS: "Průběh synchronizace"
|
|
STR_DELETE_CACHE: "Smazat mezipaměť knihy"
|
|
STR_DELETE: "Smazat"
|
|
STR_CHAPTER_PREFIX: "Kapitola:"
|
|
STR_PAGES_SEPARATOR: "stránek |"
|
|
STR_BOOK_PREFIX: "Kniha:"
|
|
STR_CALIBRE_URL_HINT: "Pro Calibre přidejte /opds do URL adresy"
|
|
STR_PERCENT_STEP_HINT: "Vlevo/Vpravo: 1 % Nahoru/Dolů: 10 %"
|
|
STR_SYNCING_TIME: "Čas synchronizace..."
|
|
STR_CALC_HASH: "Výpočet hashe dokumentu..."
|
|
STR_HASH_FAILED: "Nepodařilo se vypočítat hash dokumentu"
|
|
STR_FETCH_PROGRESS: "Načítání vzdáleného průběhu..."
|
|
STR_UPLOAD_PROGRESS: "Průběh nahrávání..."
|
|
STR_NO_CREDENTIALS_MSG: "Přihlašovací údaje nejsou nakonfigurovány"
|
|
STR_KOREADER_SETUP_HINT: "Nastavit účet KOReader v Nastavení"
|
|
STR_PROGRESS_FOUND: "Nalezen průběh!"
|
|
STR_REMOTE_LABEL: "Vzdálené:"
|
|
STR_LOCAL_LABEL: "Lokální:"
|
|
STR_PAGE_OVERALL_FORMAT: "Stránka %d, celkově %.2f%%"
|
|
STR_PAGE_TOTAL_OVERALL_FORMAT: "Stránka %d/%d, celkově %.2f%%"
|
|
STR_DEVICE_FROM_FORMAT: " Od: %s"
|
|
STR_APPLY_REMOTE: "Použít vzdálený postup"
|
|
STR_UPLOAD_LOCAL: "Nahrát lokální postup"
|
|
STR_NO_REMOTE_MSG: "Nenalezen žádný vzdálený postup"
|
|
STR_UPLOAD_PROMPT: "Nahrát aktuální pozici?"
|
|
STR_UPLOAD_SUCCESS: "Postup nahrán!"
|
|
STR_SYNC_FAILED_MSG: "Synchronizace se nezdařila"
|
|
STR_SAVE_PROGRESS_FAILED: "Nepodařilo se uložit pokrok"
|
|
STR_SECTION_PREFIX: "Sekce"
|
|
STR_UPLOAD: "Nahrát"
|
|
STR_BOOK_S_STYLE: "Styl knihy"
|
|
STR_EMBEDDED_STYLE: "Vložený styl"
|
|
STR_FOCUS_READING: "Soustředěné čtení"
|
|
STR_OPDS_SERVER_URL: "URL serveru OPDS"
|
|
STR_SCREENSHOT_BUTTON: "Udělat snímek obrazovky"
|
|
STR_SLEEP_TIMER_VALUE_FORMAT: "%u min"
|
|
STR_SLEEP_NEVER: "Nikdy"
|
|
STR_SLEEP_TIMER_STEP_HINT: "Vlevo/Vpravo: 1 min Nahoru/Dolů: 5 min"
|
|
STR_TILT_PAGE_TURN: "Otáčení stránek nakloněním"
|