diff --git a/lib/I18n/I18nKeys.h b/lib/I18n/I18nKeys.h index af10f522..b6b77c58 100644 --- a/lib/I18n/I18nKeys.h +++ b/lib/I18n/I18nKeys.h @@ -3,27 +3,48 @@ // THIS FILE IS AUTO-GENERATED BY gen_i18n.py. DO NOT EDIT. -// Forward declaration for string arrays +// Forward declarations for flat string data blobs and offset tables namespace i18n_strings { -extern const char* const STRINGS_EN[]; -extern const char* const STRINGS_ES[]; -extern const char* const STRINGS_FR[]; -extern const char* const STRINGS_DE[]; -extern const char* const STRINGS_CS[]; -extern const char* const STRINGS_PO[]; -extern const char* const STRINGS_RU[]; -extern const char* const STRINGS_SV[]; -extern const char* const STRINGS_RO[]; -extern const char* const STRINGS_CA[]; -extern const char* const STRINGS_UK[]; -extern const char* const STRINGS_BE[]; -extern const char* const STRINGS_IT[]; -extern const char* const STRINGS_PL[]; -extern const char* const STRINGS_FI[]; -extern const char* const STRINGS_DA[]; -extern const char* const STRINGS_NL[]; -extern const char* const STRINGS_TR[]; -extern const char* const STRINGS_KK[]; +extern const char STRINGS_EN_DATA[]; +extern const uint16_t OFFSETS_EN[]; +extern const char STRINGS_ES_DATA[]; +extern const uint16_t OFFSETS_ES[]; +extern const char STRINGS_FR_DATA[]; +extern const uint16_t OFFSETS_FR[]; +extern const char STRINGS_DE_DATA[]; +extern const uint16_t OFFSETS_DE[]; +extern const char STRINGS_CS_DATA[]; +extern const uint16_t OFFSETS_CS[]; +extern const char STRINGS_PO_DATA[]; +extern const uint16_t OFFSETS_PO[]; +extern const char STRINGS_RU_DATA[]; +extern const uint16_t OFFSETS_RU[]; +extern const char STRINGS_SV_DATA[]; +extern const uint16_t OFFSETS_SV[]; +extern const char STRINGS_RO_DATA[]; +extern const uint16_t OFFSETS_RO[]; +extern const char STRINGS_CA_DATA[]; +extern const uint16_t OFFSETS_CA[]; +extern const char STRINGS_UK_DATA[]; +extern const uint16_t OFFSETS_UK[]; +extern const char STRINGS_BE_DATA[]; +extern const uint16_t OFFSETS_BE[]; +extern const char STRINGS_IT_DATA[]; +extern const uint16_t OFFSETS_IT[]; +extern const char STRINGS_PL_DATA[]; +extern const uint16_t OFFSETS_PL[]; +extern const char STRINGS_FI_DATA[]; +extern const uint16_t OFFSETS_FI[]; +extern const char STRINGS_DA_DATA[]; +extern const uint16_t OFFSETS_DA[]; +extern const char STRINGS_NL_DATA[]; +extern const uint16_t OFFSETS_NL[]; +extern const char STRINGS_TR_DATA[]; +extern const uint16_t OFFSETS_TR[]; +extern const char STRINGS_KK_DATA[]; +extern const uint16_t OFFSETS_KK[]; +extern const char STRINGS_PT_DATA[]; +extern const uint16_t OFFSETS_PT[]; } // namespace i18n_strings // Language enum @@ -33,7 +54,7 @@ enum class Language : uint8_t { FR = 2, DE = 3, CS = 4, - PT = 5, + PO = 5, RU = 6, SV = 7, RO = 8, @@ -47,6 +68,7 @@ enum class Language : uint8_t { NL = 16, TR = 17, KK = 18, + PT = 19, _COUNT }; @@ -126,6 +148,7 @@ enum class StrId : uint16_t { STR_IMAGES_DISPLAY, STR_IMAGES_PLACEHOLDER, STR_IMAGES_SUPPRESS, + STR_CREATE_FALLBACK_FOR_INVALID_TOC, STR_SHORT_PWR_BTN, STR_ORIENTATION, STR_SIDE_BTN_LAYOUT, @@ -138,6 +161,43 @@ enum class StrId : uint16_t { STR_HYPHENATION, STR_TIME_TO_SLEEP, STR_SHOW_HIDDEN_FILES, + STR_USE_CLOCK, + STR_CLOCK_SETTINGS, + STR_CLOCK_SETTINGS_WARNING, + STR_CLOCK, + STR_CLOCK_FORMAT, + STR_TIMEZONE, + STR_24H, + STR_12H, + STR_TZ_UTC, + STR_TZ_CET, + STR_TZ_EET, + STR_TZ_EST, + STR_TZ_CST, + STR_TZ_MST, + STR_TZ_PST, + STR_TZ_AEST, + STR_TZ_NZST, + STR_TZ_MSK, + STR_TZ_UTC_MINUS3, + STR_TZ_UTC_PLUS4, + STR_TZ_IST, + STR_TZ_UTC_PLUS7, + STR_TZ_UTC_PLUS8, + STR_TZ_UTC_PLUS9, + STR_SYNC_TIME, + STR_DETECT_TIMEZONE, + STR_SYNCING_CLOCK, + STR_DETECTING_TIMEZONE, + STR_TIME_SYNCED, + STR_TIME_SYNC_FAILED, + STR_CLOCK_DRIFT, + STR_LAST_NTP_SYNC, + STR_TIMEZONE_DETECTED, + STR_TIMEZONE_DETECT_FAILED, + STR_DST_ACTIVE, + STR_DST_INACTIVE, + STR_DST_UNKNOWN, STR_REFRESH_FREQ, STR_KOREADER_SYNC, STR_CHECK_UPDATES, @@ -159,6 +219,11 @@ enum class StrId : uint16_t { STR_KOREADER_AUTH, STR_SYNC_READY, STR_AUTH_FAILED, + STR_REGISTER, + STR_REGISTERING, + STR_REGISTER_SUCCESS, + STR_REGISTER_FAILED, + STR_USERNAME_TAKEN, STR_DONE, STR_CLEAR_CACHE_WARNING_1, STR_CLEAR_CACHE_WARNING_2, @@ -286,6 +351,8 @@ enum class StrId : uint16_t { STR_REMAP_FRONT_BUTTONS, STR_OPDS_BROWSER, STR_COVER_CUSTOM, + STR_PAGE_OVERLAY, + STR_RECENTS, STR_MENU_RECENT_BOOKS, STR_NO_RECENT_BOOKS, STR_CALIBRE_DESC, @@ -310,6 +377,7 @@ enum class StrId : uint16_t { STR_SYNC_PROGRESS, STR_DELETE_CACHE, STR_DELETE, + STR_REMOVE, STR_DISPLAY_QR, STR_CHAPTER_PREFIX, STR_PAGES_SEPARATOR, @@ -320,6 +388,8 @@ enum class StrId : uint16_t { STR_CALC_HASH, STR_HASH_FAILED, STR_FETCH_PROGRESS, + STR_MAPPING_REMOTE, + STR_MAPPING_LOCAL, STR_UPLOAD_PROGRESS, STR_NO_CREDENTIALS_MSG, STR_KOREADER_SETUP_HINT, @@ -346,6 +416,10 @@ enum class StrId : uint16_t { STR_SCREENSHOT_BUTTON, STR_AUTO_TURN_ENABLED, STR_AUTO_TURN_PAGES_PER_MIN, + STR_INFO, + STR_AUTHOR, + STR_SERIES, + STR_FILE_SIZE, STR_SLEEP_COVER_OVERLAY, STR_OVERLAY_WHITE, STR_OVERLAY_GRAY, @@ -354,53 +428,76 @@ enum class StrId : uint16_t { STR_OVERLAY_READING_PROGRESS, STR_OVERLAY_READING_PROGRESS_NO_TOTAL, STR_OVERLAY_CHAPTER_PAGE_SUFFIX, + STR_SYSTEM_INFO, + STR_LOAD_XTC_FAILED, + STR_LOAD_EPUB_FAILED, + STR_FW_VERSION, + STR_CHIP, + STR_CPU, + STR_MHZ, + STR_FREE_RAM, + STR_MIN_FREE, + STR_MAX_BLOCK, + STR_FLASH_USED, + STR_UPTIME, + STR_CHARGING, + STR_GATHERING_DATA, + STR_READING, // Sentinel - must be last _COUNT }; -// Helper function to get string array for a language -inline const char* const* getStringArray(Language lang) { +// Holds a flat string blob and its offset table for one language +struct LangStrings { + const char* data; + const uint16_t* offsets; +}; + +// Helper function to get string data for a language +inline LangStrings getLanguageStrings(Language lang) { switch (lang) { case Language::EN: - return i18n_strings::STRINGS_EN; + return {i18n_strings::STRINGS_EN_DATA, i18n_strings::OFFSETS_EN}; case Language::ES: - return i18n_strings::STRINGS_ES; + return {i18n_strings::STRINGS_ES_DATA, i18n_strings::OFFSETS_ES}; case Language::FR: - return i18n_strings::STRINGS_FR; + return {i18n_strings::STRINGS_FR_DATA, i18n_strings::OFFSETS_FR}; case Language::DE: - return i18n_strings::STRINGS_DE; + return {i18n_strings::STRINGS_DE_DATA, i18n_strings::OFFSETS_DE}; case Language::CS: - return i18n_strings::STRINGS_CS; - case Language::PT: - return i18n_strings::STRINGS_PO; + return {i18n_strings::STRINGS_CS_DATA, i18n_strings::OFFSETS_CS}; + case Language::PO: + return {i18n_strings::STRINGS_PO_DATA, i18n_strings::OFFSETS_PO}; case Language::RU: - return i18n_strings::STRINGS_RU; + return {i18n_strings::STRINGS_RU_DATA, i18n_strings::OFFSETS_RU}; case Language::SV: - return i18n_strings::STRINGS_SV; + return {i18n_strings::STRINGS_SV_DATA, i18n_strings::OFFSETS_SV}; case Language::RO: - return i18n_strings::STRINGS_RO; + return {i18n_strings::STRINGS_RO_DATA, i18n_strings::OFFSETS_RO}; case Language::CA: - return i18n_strings::STRINGS_CA; + return {i18n_strings::STRINGS_CA_DATA, i18n_strings::OFFSETS_CA}; case Language::UK: - return i18n_strings::STRINGS_UK; + return {i18n_strings::STRINGS_UK_DATA, i18n_strings::OFFSETS_UK}; case Language::BE: - return i18n_strings::STRINGS_BE; + return {i18n_strings::STRINGS_BE_DATA, i18n_strings::OFFSETS_BE}; case Language::IT: - return i18n_strings::STRINGS_IT; + return {i18n_strings::STRINGS_IT_DATA, i18n_strings::OFFSETS_IT}; case Language::PL: - return i18n_strings::STRINGS_PL; + return {i18n_strings::STRINGS_PL_DATA, i18n_strings::OFFSETS_PL}; case Language::FI: - return i18n_strings::STRINGS_FI; + return {i18n_strings::STRINGS_FI_DATA, i18n_strings::OFFSETS_FI}; case Language::DA: - return i18n_strings::STRINGS_DA; + return {i18n_strings::STRINGS_DA_DATA, i18n_strings::OFFSETS_DA}; case Language::NL: - return i18n_strings::STRINGS_NL; + return {i18n_strings::STRINGS_NL_DATA, i18n_strings::OFFSETS_NL}; case Language::TR: - return i18n_strings::STRINGS_TR; + return {i18n_strings::STRINGS_TR_DATA, i18n_strings::OFFSETS_TR}; case Language::KK: - return i18n_strings::STRINGS_KK; + return {i18n_strings::STRINGS_KK_DATA, i18n_strings::OFFSETS_KK}; + case Language::PT: + return {i18n_strings::STRINGS_PT_DATA, i18n_strings::OFFSETS_PT}; default: - return i18n_strings::STRINGS_EN; + return {i18n_strings::STRINGS_EN_DATA, i18n_strings::OFFSETS_EN}; } } @@ -408,9 +505,8 @@ inline const char* const* getStringArray(Language lang) { constexpr uint8_t getLanguageCount() { return static_cast(Language::_COUNT); } // Sorted language indices by code (auto-generated by gen_i18n.py) -// Order: English, Беларуская, Català, Čeština, Dansk, Deutsch, Español, Suomi, Français, Italiano -// Қазақша, Nederlands, Polski, Português (Brasil), Română, Русский, Svenska, Türkçe, Українська -constexpr uint8_t SORTED_LANGUAGE_INDICES[] = {0, 11, 9, 4, 15, 3, 1, 14, 2, 12, 18, 16, 13, 5, 8, 6, 7, 17, 10}; +// Order: English, Беларуская, Català, Čeština, Dansk, Deutsch, Español, Suomi, Français, Italiano, Қазақша, Nederlands, Polski, Português (Brasil), Português (Portugal), Română, Русский, Svenska, Türkçe, Українська +constexpr uint8_t SORTED_LANGUAGE_INDICES[] = {0, 11, 9, 4, 15, 3, 1, 14, 2, 12, 18, 16, 13, 5, 19, 8, 6, 7, 17, 10}; static_assert(sizeof(SORTED_LANGUAGE_INDICES) / sizeof(SORTED_LANGUAGE_INDICES[0]) == getLanguageCount(), "SORTED_LANGUAGE_INDICES size mismatch"); diff --git a/lib/I18n/I18nStrings.cpp b/lib/I18n/I18nStrings.cpp index 63c031c4..a1da8be1 100644 --- a/lib/I18n/I18nStrings.cpp +++ b/lib/I18n/I18nStrings.cpp @@ -1,4 +1,5 @@ #include "I18nStrings.h" +#include // THIS FILE IS AUTO-GENERATED BY gen_i18n.py. DO NOT EDIT. @@ -111,14 +112,17 @@ const char* const LANGUAGE_NAMES[] = { "\xD0" "\xB0" "", + "Portugu\xC3" + "\xAA" + "s (Portugal)", }; // Character sets for each language const char* const CHARACTER_SETS[] = { - " !\"%'()*+,-./012345:=?ABCDEFGHIJKLMNOPQRSTUVWXY[]abcdefghijklmnopqrstuvwxyz|\xC2" + " !\"%'()*+,-./012345789:;=?ABCDEFGHIJKLMNOPQRSTUVWXYZ[]abcdefghijklmnopqrstuvwxyz|\xC2" "\xAB" "", // English - " !\"%()*+,-./01235:?ABCDEFGHIJKLMNOPQRSTUVWY[]abcdefghijklmnopqrstuvwxyz|\xC2" + " !\"%()*+,-./012345789:;?ABCDEFGHIJKLMNOPQRSTUVWXYZ[]abcdefghijklmnopqrstuvwxyz|\xC2" "\xA1" "\xC2" "\xAB" @@ -137,7 +141,7 @@ const char* const CHARACTER_SETS[] = { "\xC3" "\xBA" "", // Español - " !%'()*+,-./012345:=?ABCDEFGHIJKLMNOPQRSTUVW[]abcdefghijklmnopqrstuvwxyz|\xC2" + " !%'()*+,-./012345789:;=?ABCDEFGHIJKLMNOPQRSTUVWXZ[]abcdefghijklmnopqrstuvwxyz|\xC2" "\xAB" "\xC3" "\x89" @@ -165,7 +169,7 @@ const char* const CHARACTER_SETS[] = { "\x80" "\xA6" "", // Français - " !\"%&()*+,-./012345:=?ABCDEFGHIJKLMNOPQRSTUVWYZ[]abcdefghiklmnoprstuvwxyz|\xC2" + " !\"%&()*+,-./012345789:;=?ABCDEFGHIJKLMNOPQRSTUVWXYZ[]abcdefghiklmnoprstuvwxyz|\xC2" "\xAB" "\xC3" "\x84" @@ -185,7 +189,7 @@ const char* const CHARACTER_SETS[] = { "\x80" "\xA6" "", // Deutsch - " !%()*+,-./012345:=?ABCDEFGHIJKLMNOPQRSTUVWYZ[]abcdefghijklmnoprstuvwxyz|\xC2" + " !%()*+,-./012345789:;=?ABCDEFGHIJKLMNOPQRSTUVWXYZ[]abcdefghijklmnoprstuvwxyz|\xC2" "\xAB" "\xC3" "\x81" @@ -241,11 +245,13 @@ const char* const CHARACTER_SETS[] = { "\x80" "\xA6" "", // Čeština - " !\"%()*+,-./012345:=?ABCDEFGHIJKLMNOPQRSTUVW[]abcdefghijklmnopqrstuvwxyz|\xC2" + " !\"%()*+,-./012345789:;=?ABCDEFGHIJKLMNOPQRSTUVWXZ[]abcdefghijklmnopqrstuvwxyz|\xC2" "\xAB" "\xC2" "\xBA" "\xC3" + "\xA0" + "\xC3" "\xA1" "\xC3" "\xA3" @@ -265,7 +271,7 @@ const char* const CHARACTER_SETS[] = { "\x80" "\x91" "", // Português (Brasil) - " !%()*+,-./012345:=?ABCDEFGHIKLMNOPQRSTUW[]abcdefghiklmnoprstuvwxyz|\xC2" + " !%()*+,-./012345789:;=?ABCDEFGHIJKLMNOPQRSTUWXZ[]abcdefghiklmnoprstuvwxyz|\xC2" "\xAB" "\xC2" "\xBB" @@ -380,7 +386,7 @@ const char* const CHARACTER_SETS[] = { "\xD1" "\x91" "", // Русский - " !%()*+,-./01235:;=?ABCDEFGHIJKLMNOPQRSTUVW[]abcdefghijklmnoprstuvwxyz|\xC2" + " !%()*+,-./012345789:;=?ABCDEFGHIJKLMNOPQRSTUVWXZ[]abcdefghijklmnoprstuvwxyz|\xC2" "\xAB" "\xC3" "\x84" @@ -401,7 +407,7 @@ const char* const CHARACTER_SETS[] = { "\x80" "\xA6" "", // Svenska - " !\"%()*+,-./012345:=?ABCDEFGHIJKLMNOPQRSTUVW[]abcdefghijklmnoprstuvwxyz|\xC2" + " !\"%()*+,-./012345789:;=?ABCDEFGHIJKLMNOPQRSTUVWXZ[]abcdefghijklmnoprstuvwxyz|\xC2" "\xAB" "\xC3" "\x8E" @@ -418,11 +424,9 @@ const char* const CHARACTER_SETS[] = { "\xC5" "\xA3" "\xC8" - "\x99" - "\xC8" "\x9B" "", // Română - " !\"%'()*+,-./012345:=?ABCDEFGHIJKLMNOPQRSTUVWX[]abcdefghijklmnopqrstuvwxyz|\xC2" + " !\"%'()*+,-./012345789:;=?ABCDEFGHIJKLMNOPQRSTUVWXZ[]abcdefghijklmnopqrstuvwxyz|\xC2" "\xAB" "\xC2" "\xB7" @@ -447,7 +451,7 @@ const char* const CHARACTER_SETS[] = { "\xC3" "\xBC" "", // Català - " !\"%'()*+,-./012345:=?ABCDEFGHIKLMNOPQRSUW[]abcdefghiklmnoprstuvwxyz|\xC2" + " !\"%'()*+,-./012345789:;=?ABCDEFGHIJKLMNOPQRSTUWXZ[]abcdefghiklmnoprstuvwxyz|\xC2" "\xAB" "\xD0" "\x86" @@ -568,7 +572,7 @@ const char* const CHARACTER_SETS[] = { "\xD1" "\x97" "", // Українська - " !%()*+,-./012345:=?ABCDEFGHIKLMNOPQRSTUW[]abcdefghiklmnoprstuvwxyz|\xC2" + " !%()*+,-./012345789:;=?ABCDEFGHIJKLMNOPQRSTUWXZ[]abcdefghiklmnoprstuvwxyz|\xC2" "\xAB" "\xC2" "\xBB" @@ -681,7 +685,7 @@ const char* const CHARACTER_SETS[] = { "\xD1" "\x9E" "", // Беларуская - " !\"%'()*+,-./012345:=?ABCDEFGHIKLMNOPQRSTUVWX[]abcdefghiklmnopqrstuvwxyz|\xC2" + " !\"%'()*+,-./012345789:;=?ABCDEFGHIJKLMNOPQRSTUVWXZ[]abcdefghiklmnopqrstuvwxyz|\xC2" "\xAB" "\xC2" "\xB0" @@ -702,7 +706,7 @@ const char* const CHARACTER_SETS[] = { "\x86" "\xBB" "", // Italiano - " !\"%'()*+,-./012345:=?ABCDEFGHIJKLMNOPQRSTUWZ[]abcdefghijklmnoprstuvwxyz|\xC2" + " !\"%'()*+,-./012345789:;=?ABCDEFGHIJKLMNOPQRSTUWXZ[]abcdefghijklmnoprstuvwxyz|\xC2" "\xAB" "\xC3" "\xB3" @@ -727,7 +731,7 @@ const char* const CHARACTER_SETS[] = { "\xC5" "\xBC" "", // Polski - " !\"%()*+,-./012345:=?ABCDEFGHIJKLMNOPQRSTUVWY[]abcdefghijklmnoprstuvwxyz|\xC2" + " !\"%()*+,-./012345789:;=?ABCDEFGHIJKLMNOPQRSTUVWXYZ[]abcdefghijklmnoprstuvwxyz|\xC2" "\xAB" "\xC3" "\x84" @@ -736,7 +740,7 @@ const char* const CHARACTER_SETS[] = { "\xC3" "\xB6" "", // Suomi - " !\"%()*+,-./012345:=?ABCDEFGHIJKLMNOPQRSTUVW[]abcdefghijklmnoprstuvwxyz|\xC2" + " !\"%()*+,-./012345789:;=?ABCDEFGHIJKLMNOPQRSTUVWXZ[]abcdefghijklmnoprstuvwxyz|\xC2" "\xAB" "\xC3" "\x85" @@ -749,7 +753,7 @@ const char* const CHARACTER_SETS[] = { "\xC3" "\xB8" "", // Dansk - " !\"%'()*+,-./012345:=?ABCDEFGHIJKLMNOPQRSTUVWZ[]abcdefghijklmnopqrstuvwxyz|\xC2" + " !\"%'()*+,-./012345789:;=?ABCDEFGHIJKLMNOPQRSTUVWXZ[]abcdefghijklmnopqrstuvwxyz|\xC2" "\xAB" "\xC3" "\xAB" @@ -758,7 +762,7 @@ const char* const CHARACTER_SETS[] = { "\xC3" "\xBC" "", // Nederlands - " !\"%'()*+,-./012345:=?ABCDEFGHIKLMNOPQRSTUVWYZ[]abcdefghiklmnoprstuvwxyz|\xC2" + " !\"%'()*+,-./012345789:;=?ABCDEFGHIJKLMNOPQRSTUVWXYZ[]abcdefghiklmnoprstuvwxyz|\xC2" "\xAB" "\xC3" "\x87" @@ -781,7 +785,7 @@ const char* const CHARACTER_SETS[] = { "\xC5" "\x9F" "", // Türkçe - " !\"%()*+,-./012345:=?ABCDFGHIKLMNOPQRSUW[]abcdefghiklnoprstuvwxyz|\xC2" + " !\"%()*+,-./012345789:;=?ABCDEFGHIJKLMNOPQRSTUWXZ[]abcdefghiklmnoprstuvwxyz|\xC2" "\xAB" "\xD0" "\x86" @@ -910,919 +914,1152 @@ const char* const CHARACTER_SETS[] = { "\xD3" "\xA9" "", // Қазақша + " !\"%()*+,-./012345789:;=?ABCDEFGHIJKLMNOPQRSTUVWXZ[]abcdefghijklmnopqrstuvwxyz|\xC2" + "\xAB" + "\xC2" + "\xBA" + "\xC3" + "\xA0" + "\xC3" + "\xA1" + "\xC3" + "\xA3" + "\xC3" + "\xA7" + "\xC3" + "\xA9" + "\xC3" + "\xAA" + "\xC3" + "\xAD" + "\xC3" + "\xB3" + "\xC3" + "\xB5" + "\xE2" + "\x80" + "\x91" + "", // Português (Portugal) }; namespace i18n_strings { -const char* const STRINGS_EN[] = { - "CrossPoint", - "BOOTING", - "SLEEPING", - "Going to sleep", - "Browse Files", - "File Transfer", - "Settings", - "Continue Reading", - "No open book", - "Start reading below", - "No files found", - "Select Chapter", - "No chapters", - "End of book", - "Empty chapter", - "Indexing", - "Memory error", - "Page load error", - "Empty file", - "Out of bounds", - "Loading...", - "Loading", - "WiFi Networks", - "No networks found", - "%zu networks found", - "Scanning...", - "Connecting...", - "Connected!", - "Connection Failed", - "Forget Network?", - "Save password for next time?", - "Press OK to scan again", - "Join a Network", - "Create Hotspot", - "Connect to an existing WiFi network", - "Create a WiFi network others can join", - "Starting Hotspot...", - "Hotspot Mode", - "Connect your device to this WiFi network", - "Open this URL in your browser", - "or http://", - "or scan QR code with your phone:", - "Calibre Wireless", - "Calibre Web URL", - "* = Encrypted | + = Saved", - "MAC address:", - "Checking WiFi...", - "Enter WiFi Password", - "to ", - "Receiving: ", - "Received: ", - "1) Install CrossPoint Reader plugin", - "2) Be on the same WiFi network", - "3) In Calibre: \"Send to device\"", - "\"Keep this screen open while sending\"", - "Display", - "Reader", - "Controls", - "System", - "Sleep Screen", - "Sleep Screen Cover Mode", - "Hide Battery %", - "Extra Paragraph Spacing", - "Text Anti-Aliasing", - "Images", - "Display", - "Placeholder", - "Suppress", - "Short Power Button Click", - "Reading Orientation", - "Side Button Layout (reader)", - "Long-press Chapter Skip", - "Reader Font Family", - "Reader Font Size", - "Reader Line Spacing", - "Reader Screen Margin", - "Reader Paragraph Alignment", - "Hyphenation", - "Time to Sleep", - "Show Hidden Files", - "Refresh Frequency", - "KOReader Sync", - "Check for updates", - "Language", - "Clear Reading Cache", - "Username", - "Password", - "Sync Server URL", - "Document Matching", - "Authenticate", - "KOReader Username", - "KOReader Password", - "Filename", - "Binary", - "Set credentials first", - "WiFi connection failed", - "Authenticating...", - "Successfully authenticated!", - "KOReader Auth", - "KOReader sync is ready to use", - "Authentication Failed", - "Done", - "This will clear all cached book data.", - "All reading progress will be lost!", - "Books will need to be re-indexed", - "when opened again.", - "Clearing cache...", - "Cache Cleared", - "items removed", - "failed", - "Failed to clear cache", - "Check serial output for details", - "Dark", - "Light", - "Custom", - "Cover", - "None", - "Fit", - "Crop", - "Never", - "In Reader", - "Always", - "Ignore", - "Sleep", - "Page Turn", - "Portrait", - "Landscape CW", - "Inverted", - "Landscape CCW", - "Prev/Next", - "Next/Prev", - "Bookerly", - "Noto Sans", - "Open Dyslexic", - "Small", - "Medium", - "Large", - "X Large", - "Tight", - "Normal", - "Wide", - "Justify", - "Left", - "Center", - "Right", - "1 min", - "5 min", - "10 min", - "15 min", - "30 min", - "1 page", - "5 pages", - "10 pages", - "15 pages", - "30 pages", - "Update", - "Checking for update...", - "New update available!", - "Current Version: ", - "New Version: ", - "Updating...", - "No update available", - "Update failed", - "Update complete", - "Press and hold power button to turn back on", - "No entries found", - "Downloading...", - "Download failed", - "Error:", - "Unnamed", - "No server URL configured", - "Failed to fetch feed", - "Failed to parse feed", - "Network: ", - "IP Address: ", - "Error: General failure", - "Error: Network not found", - "Error: Connection timeout", - "SD card", +// clang-format off +const char STRINGS_EN_DATA[] = + "CrossPoint\0" + "BOOTING\0" + "SLEEPING\0" + "Going to sleep\0" + "Browse Files\0" + "File Transfer\0" + "Settings\0" + "Continue Reading\0" + "No open book\0" + "Start reading below\0" + "No files found\0" + "Select Chapter\0" + "No chapters\0" + "End of book\0" + "Empty chapter\0" + "Indexing\0" + "Memory error\0" + "Page load error\0" + "Empty file\0" + "Out of bounds\0" + "Loading...\0" + "Loading\0" + "WiFi Networks\0" + "No networks found\0" + "%zu networks found\0" + "Scanning...\0" + "Connecting...\0" + "Connected!\0" + "Connection Failed\0" + "Forget Network?\0" + "Save password for next time?\0" + "Press OK to scan again\0" + "Join a Network\0" + "Create Hotspot\0" + "Connect to an existing WiFi network\0" + "Create a WiFi network others can join\0" + "Starting Hotspot...\0" + "Hotspot Mode\0" + "Connect your device to this WiFi network\0" + "Open this URL in your browser\0" + "or http://\0" + "or scan QR code with your phone:\0" + "Calibre Wireless\0" + "Calibre Web URL\0" + "* = Encrypted | + = Saved\0" + "MAC address:\0" + "Checking WiFi...\0" + "Enter WiFi Password\0" + "to \0" + "Receiving: \0" + "Received: \0" + "1) Install CrossPoint Reader plugin\0" + "2) Be on the same WiFi network\0" + "3) In Calibre: \"Send to device\"\0" + "\"Keep this screen open while sending\"\0" + "Display\0" + "Reader\0" + "Controls\0" + "System\0" + "Sleep Screen\0" + "Sleep Screen Cover Mode\0" + "Hide Battery %\0" + "Extra Paragraph Spacing\0" + "Text Anti-Aliasing\0" + "Images\0" + "Display\0" + "Placeholder\0" + "Suppress\0" + "Create fallback for invalid TOC\0" + "Short Power Button Click\0" + "Reading Orientation\0" + "Side Button Layout (reader)\0" + "Long-press Chapter Skip\0" + "Reader Font Family\0" + "Reader Font Size\0" + "Reader Line Spacing\0" + "Reader Screen Margin\0" + "Reader Paragraph Alignment\0" + "Hyphenation\0" + "Time to Sleep\0" + "Show Hidden Files\0" + "Use Clock\0" + "Clock Settings\0" + "Uses more battery; clock may drift\0" + "Clock\0" + "Clock Format\0" + "Timezone\0" + "24h\0" + "12h\0" + "UTC (GMT/BST)\0" + "Central Europe (CET/CEST)\0" + "Eastern Europe (EET/EEST)\0" + "US Eastern (EST/EDT)\0" + "US Central (CST/CDT)\0" + "US Mountain (MST/MDT)\0" + "US Pacific (PST/PDT)\0" + "Australia Eastern (AEST/AEDT)\0" + "New Zealand (NZST/NZDT)\0" + "Russia (MSK)\0" + "South America (UTC-3)\0" + "Gulf (UTC+4)\0" + "India (UTC+5:30)\0" + "SE Asia (UTC+7)\0" + "China/SE Asia (UTC+8)\0" + "Japan/Korea (UTC+9)\0" + "Sync Time\0" + "Detect Timezone\0" + "Syncing clock...\0" + "Detecting timezone...\0" + "Time synced\0" + "Time sync failed\0" + "Drift: %s\0" + "Last sync: %s\0" + "Timezone detected\0" + "Timezone detect failed\0" + "DST: active\0" + "DST: inactive\0" + "DST: unknown\0" + "Refresh Frequency\0" + "KOReader Sync\0" + "Check for updates\0" + "Language\0" + "Clear Reading Cache\0" + "Username\0" + "Password\0" + "Sync Server URL\0" + "Document Matching\0" + "Authenticate\0" + "KOReader Username\0" + "KOReader Password\0" + "Filename\0" + "Binary\0" + "Set credentials first\0" + "WiFi connection failed\0" + "Authenticating...\0" + "Successfully authenticated!\0" + "KOReader Auth\0" + "KOReader sync is ready to use\0" + "Authentication failed\0" + "Register\0" + "Registering...\0" + "Account created successfully!\0" + "Registration failed\0" + "Username already taken\0" + "Done\0" + "This will clear all cached book data.\0" + "All reading progress will be lost!\0" + "Books will need to be re-indexed\0" + "when opened again.\0" + "Clearing cache...\0" + "Cache cleared\0" + "items removed\0" + "failed\0" + "Failed to clear cache\0" + "Check serial output for details\0" + "Dark\0" + "Light\0" + "Custom\0" + "Cover\0" + "None\0" + "Fit\0" + "Crop\0" + "Never\0" + "In Reader\0" + "Always\0" + "Ignore\0" + "Sleep\0" + "Page Turn\0" + "Portrait\0" + "Landscape CW\0" + "Inverted\0" + "Landscape CCW\0" + "Prev/Next\0" + "Next/Prev\0" + "Bookerly\0" + "Noto Sans\0" + "Open Dyslexic\0" + "Small\0" + "Medium\0" + "Large\0" + "X Large\0" + "Tight\0" + "Normal\0" + "Wide\0" + "Justify\0" + "Left\0" + "Center\0" + "Right\0" + "1 min\0" + "5 min\0" + "10 min\0" + "15 min\0" + "30 min\0" + "1 page\0" + "5 pages\0" + "10 pages\0" + "15 pages\0" + "30 pages\0" + "Update\0" + "Checking for update...\0" + "New update available!\0" + "Current Version: \0" + "New Version: \0" + "Updating...\0" + "No update available\0" + "Update failed\0" + "Update complete\0" + "Press and hold power button to turn back on\0" + "No entries found\0" + "Downloading...\0" + "Download failed\0" + "Error:\0" + "Unnamed\0" + "No server URL configured\0" + "Failed to fetch feed\0" + "Failed to parse feed\0" + "Network: \0" + "IP Address: \0" + "Error: General failure\0" + "Error: Network not found\0" + "Error: Connection timeout\0" + "SD card\0" "\xC2" "\xAB" - " Back", + " Back\0" "\xC2" "\xAB" - " Exit", + " Exit\0" "\xC2" "\xAB" - " Home", - "Select", - "Selected", - "Toggle", - "Confirm", - "Cancel", - "Connect", - "Open", - "Download", - "Retry", - "Yes", - "No", - "Show", - "Hide", - "ON", - "OFF", - "Not Set", - "Left", - "Right", - "Up", - "Down", - "OK", - "Sleep Screen Cover Filter", - "Contrast", - "Customise Status Bar", - "Chapter Page Count", - "Book Progress Percentage", - "Progress Bar", - "Progress Bar Thickness", - "Thin", - "Medium", - "Thick", - "Book", - "Chapter", - "Chapter 21", - "Book Title", - "Preview", - "Title", - "Battery", - "UI Theme", - "Classic", - "Lyra", - "Lyra Extended", - "Sunlight Fading Fix", - "Remap Front Buttons", - "OPDS Browser", - "Cover + Custom", - "Recent Books", - "No recent books", - "Use Calibre wireless device transfers", - "Forget network and remove saved password?", - "Forget", - "Starting Calibre...", - "Setup", - "Status", - "Clear", - "Default", - "Press a front button for each role", - "Unassigned", - "Already assigned", - "Side button Up: Reset to default layout", - "Side button Down: Cancel remapping", - "Back (1st button)", - "Confirm (2nd button)", - "Left (3rd button)", - "Right (4th button)", - "Go to %", - "Go Home", - "Sync Progress", - "Delete Book Cache", - "Delete", - "Show page as QR", - "Chapter: ", - " pages | ", - "Book: ", - "For Calibre, add /opds to your URL", - "Left/Right: 1% Up/Down: 10%", - "Syncing time...", - "Calculating document hash...", - "Failed to calculate document hash", - "Fetching remote progress...", - "Uploading progress...", - "No credentials configured", - "Set up KOReader account in Settings", - "Progress found!", - "Remote:", - "Local:", - "Page %d, %.2f%% overall", - "Page %d/%d, %.2f%% overall", - " From: %s", - "Apply remote progress", - "Upload local progress", - "No remote progress found", - "Upload current position?", - "Progress uploaded!", - "Sync failed", - "Section ", - "Upload", - "Book's Style", - "Embedded Style", - "OPDS Server URL", - "Footnotes", - "No footnotes on this page", - "[link]", - "Take screenshot", - "Auto Turn Enabled: ", - "Auto Turn (Pages Per Minute)", - "Sleep Screen Info Overlay", - "White", - "Gray", - "Black", - "Off", - "Reading progress: Page %lu/%u - %.0f%%", - "Reading progress: Page %lu", - " - Page %d/%d - %.0f%% read", + " Home\0" + "Select\0" + "Selected\0" + "Toggle\0" + "Confirm\0" + "Cancel\0" + "Connect\0" + "Open\0" + "Download\0" + "Retry\0" + "Yes\0" + "No\0" + "Show\0" + "Hide\0" + "ON\0" + "OFF\0" + "Not Set\0" + "Left\0" + "Right\0" + "Up\0" + "Down\0" + "OK\0" + "Sleep Screen Cover Filter\0" + "Contrast\0" + "Customise Status Bar\0" + "Chapter Page Count\0" + "Book Progress Percentage\0" + "Progress Bar\0" + "Progress Bar Thickness\0" + "Thin\0" + "Medium\0" + "Thick\0" + "Book\0" + "Chapter\0" + "Chapter 21\0" + "Book Title\0" + "Preview\0" + "Title\0" + "Battery\0" + "UI Theme\0" + "Classic\0" + "Lyra\0" + "Lyra Extended\0" + "Sunlight Fading Fix\0" + "Remap Front Buttons\0" + "OPDS Browser\0" + "Cover + Custom\0" + "Page overlay\0" + "Recents\0" + "Recent Books\0" + "No recent books\0" + "Use Calibre wireless device transfers\0" + "Forget network and remove saved password?\0" + "Forget\0" + "Starting Calibre...\0" + "Setup\0" + "Status\0" + "Clear\0" + "Default\0" + "Press a front button for each role\0" + "Unassigned\0" + "Already assigned\0" + "Side button Up: Reset to default layout\0" + "Side button Down: Cancel remapping\0" + "Back (1st button)\0" + "Confirm (2nd button)\0" + "Left (3rd button)\0" + "Right (4th button)\0" + "Go to %\0" + "Go Home\0" + "Sync Progress\0" + "Delete Book Cache\0" + "Delete\0" + "Remove\0" + "Show page as QR\0" + "Chapter: \0" + " pages | \0" + "Book: \0" + "For Calibre, add /opds to your URL\0" + "Left/Right: 1% Up/Down: 10%\0" + "Syncing time...\0" + "Calculating document hash...\0" + "Failed to calculate document hash\0" + "Fetching remote progress...\0" + "Mapping remote position...\0" + "Calculating local position...\0" + "Uploading progress...\0" + "No credentials configured\0" + "Set up KOReader account in Settings\0" + "Progress found!\0" + "Remote:\0" + "Local:\0" + "Page %d, %.2f%% overall\0" + "Page %d/%d, %.2f%% overall\0" + " From: %s\0" + "Apply remote progress\0" + "Upload local progress\0" + "No remote progress found\0" + "Upload current position?\0" + "Progress uploaded!\0" + "Sync failed\0" + "Section \0" + "Upload\0" + "Book's Style\0" + "Embedded Style\0" + "OPDS Server URL\0" + "Footnotes\0" + "No footnotes on this page\0" + "[link]\0" + "Take screenshot\0" + "Auto Turn Enabled: \0" + "Auto Turn (Pages Per Minute)\0" + "Info\0" + "Author\0" + "Series\0" + "Size\0" + "Sleep Screen Info Overlay\0" + "White\0" + "Gray\0" + "Black\0" + "Off\0" + "Reading progress: Page %lu/%u - %.0f%%\0" + "Reading progress: Page %lu\0" + " - Page %d/%d - %.0f%% read\0" + "System Information\0" + "Failed to load XTC file\0" + "Failed to load EPUB file\0" + "FW version\0" + "Chip\0" + "CPU\0" + "MHz\0" + "Free RAM\0" + "Min free\0" + "Max block\0" + "Flash used\0" + "Uptime\0" + "Charging\0" + "Gathering data...\0" + "Reading...\0" +; +// clang-format on + +const uint16_t OFFSETS_EN[] = { + 0, 11, 19, 28, 43, 56, 70, 79, 96, 109, 129, 144, + 159, 171, 183, 197, 206, 219, 235, 246, 260, 271, 279, 293, + 311, 330, 342, 356, 367, 385, 401, 430, 453, 468, 483, 519, + 557, 577, 590, 631, 661, 672, 705, 722, 738, 764, 777, 794, + 814, 818, 830, 841, 877, 908, 940, 978, 986, 993, 1002, 1009, + 1022, 1046, 1061, 1085, 1104, 1111, 1119, 1131, 1140, 1172, 1197, 1217, + 1245, 1269, 1288, 1305, 1325, 1346, 1373, 1385, 1399, 1417, 1427, 1442, + 1477, 1483, 1496, 1505, 1509, 1513, 1527, 1553, 1579, 1600, 1621, 1643, + 1664, 1694, 1718, 1731, 1753, 1766, 1783, 1799, 1821, 1841, 1851, 1867, + 1884, 1906, 1918, 1935, 1945, 1959, 1977, 2000, 2012, 2026, 2039, 2057, + 2071, 2089, 2098, 2118, 2127, 2136, 2152, 2170, 2183, 2201, 2219, 2228, + 2235, 2257, 2280, 2298, 2326, 2340, 2370, 2392, 2401, 2416, 2446, 2466, + 2489, 2494, 2532, 2567, 2600, 2619, 2637, 2651, 2665, 2672, 2694, 2726, + 2731, 2737, 2744, 2750, 2755, 2759, 2764, 2770, 2780, 2787, 2794, 2800, + 2810, 2819, 2832, 2841, 2855, 2865, 2875, 2884, 2894, 2908, 2914, 2921, + 2927, 2935, 2941, 2948, 2953, 2961, 2966, 2973, 2979, 2985, 2991, 2998, + 3005, 3012, 3019, 3027, 3036, 3045, 3054, 3061, 3084, 3106, 3124, 3138, + 3150, 3170, 3184, 3200, 3244, 3261, 3276, 3292, 3299, 3307, 3332, 3353, + 3374, 3384, 3397, 3420, 3445, 3471, 3479, 3487, 3495, 3503, 3510, 3519, + 3526, 3534, 3541, 3549, 3554, 3563, 3569, 3573, 3576, 3581, 3586, 3589, + 3593, 3601, 3606, 3612, 3615, 3620, 3623, 3649, 3658, 3679, 3698, 3723, + 3736, 3759, 3764, 3771, 3777, 3782, 3790, 3801, 3812, 3820, 3826, 3834, + 3843, 3851, 3856, 3870, 3890, 3910, 3923, 3938, 3951, 3959, 3972, 3988, + 4026, 4068, 4075, 4095, 4101, 4108, 4114, 4122, 4157, 4168, 4185, 4225, + 4260, 4278, 4299, 4317, 4336, 4344, 4352, 4366, 4384, 4391, 4398, 4414, + 4424, 4436, 4443, 4478, 4507, 4523, 4552, 4586, 4614, 4641, 4671, 4693, + 4719, 4755, 4771, 4779, 4786, 4810, 4837, 4848, 4870, 4892, 4917, 4942, + 4961, 4973, 4982, 4989, 5002, 5017, 5033, 5043, 5069, 5076, 5092, 5112, + 5141, 5146, 5153, 5160, 5165, 5191, 5197, 5202, 5208, 5212, 5251, 5278, + 5306, 5325, 5349, 5374, 5385, 5390, 5394, 5398, 5407, 5416, 5426, 5437, + 5444, 5453, 5471, }; -const char* const STRINGS_ES[] = { - "CrossPoint", - "Iniciando...", - "Suspendido", +// clang-format off +const char STRINGS_ES_DATA[] = + "CrossPoint\0" + "Iniciando...\0" + "Suspendido\0" "Entrando en suspensi\xC3" "\xB3" - "n", - "Explorador de archivos", - "Transferir archivos", - "Ajustes", - "Continuar leyendo", - "No hay libros abiertos", - "Comenzar a leer", - "No se encontraron archivos", + "n\0" + "Explorador de archivos\0" + "Transferir archivos\0" + "Ajustes\0" + "Continuar leyendo\0" + "No hay libros abiertos\0" + "Comenzar a leer\0" + "No se encontraron archivos\0" "Seleccionar cap\xC3" "\xAD" - "tulo", + "tulo\0" "Sin cap\xC3" "\xAD" - "tulos", - "Fin del libro", + "tulos\0" + "Fin del libro\0" "Cap\xC3" "\xAD" "tulo vac\xC3" "\xAD" - "o", - "Indexando", - "Error de memoria", + "o\0" + "Indexando\0" + "Error de memoria\0" "Error al cargar la p\xC3" "\xA1" - "gina", + "gina\0" "Archivo vac\xC3" "\xAD" - "o", - "Fuera de rango", - "Cargando...", - "Cargando", - "Redes Wi-Fi", - "No hay redes disponibles", - "%zu redes encontradas", - "Buscando...", - "Conectando...", + "o\0" + "Fuera de rango\0" + "Cargando...\0" + "Cargando\0" + "Redes Wi-Fi\0" + "No hay redes disponibles\0" + "%zu redes encontradas\0" + "Buscando...\0" + "Conectando...\0" "\xC2" "\xA1" - "Conectado!", + "Conectado!\0" "Error de conexi\xC3" "\xB3" - "n", + "n\0" "\xC2" "\xBF" - "Olvidar la red?", + "Olvidar la red?\0" "\xC2" "\xBF" "Guardar contrase\xC3" "\xB1" - "a?", - "Pulse OK para buscar de nuevo", - "Unirse a una red", - "Crear punto de acceso", - "Conectarse a una red Wi-Fi existente", - "Conectarse a este dispositivo", - "Iniciando punto de acceso...", - "Modo punto de acceso", - "Conecte su dispositivo a esta red Wi-Fi", + "a?\0" + "Pulse OK para buscar de nuevo\0" + "Unirse a una red\0" + "Crear punto de acceso\0" + "Conectarse a una red Wi-Fi existente\0" + "Conectarse a este dispositivo\0" + "Iniciando punto de acceso...\0" + "Modo punto de acceso\0" + "Conecte su dispositivo a esta red Wi-Fi\0" "Abra esta direcci\xC3" "\xB3" - "n en su navegador", - "o http://", + "n en su navegador\0" + "o http://\0" "o escanee el c\xC3" "\xB3" "digo QR con su m\xC3" "\xB3" - "vil:", + "vil:\0" "Calibre inal\xC3" "\xA1" - "mbrico", - "URL del sitio web de Calibre", - "* (Cifrado) | + (Guardado)", - "MAC Address:", - "Verificando Wi-Fi...", + "mbrico\0" + "URL del sitio web de Calibre\0" + "* (Cifrado) | + (Guardado)\0" + "MAC Address:\0" + "Verificando Wi-Fi...\0" "Introduzca la contrase\xC3" "\xB1" - "a del Wi-Fi", - "a ", - "Recibiendo: ", - "Recibido: ", - "1) Instale el complemento CrossPoint Reader", + "a del Wi-Fi\0" + "a \0" + "Recibiendo: \0" + "Recibido: \0" + "1) Instale el complemento CrossPoint Reader\0" "2) Con\xC3" "\xA9" - "ctese a la misma red Wi-Fi", - "3) Desde Calibre, seleccione \"Enviar a dispositivo\"", + "ctese a la misma red Wi-Fi\0" + "3) Desde Calibre, seleccione \"Enviar a dispositivo\"\0" "\"Permanezca en esta pantalla mientras se env\xC3" "\xAD" - "a\"", - "Pantalla", - "Lector", - "Controles", - "Sistema", + "a\"\0" + "Pantalla\0" + "Lector\0" + "Controles\0" + "Sistema\0" "Pantalla de suspensi\xC3" "\xB3" - "n", + "n\0" "Modo de pantalla de suspensi\xC3" "\xB3" - "n", + "n\0" "Ocultar % de bater\xC3" "\xAD" - "a", + "a\0" "Espaciado entre p\xC3" "\xA1" - "rrafos", - "Suavizado de texto", + "rrafos\0" + "Suavizado de texto\0" "Im\xC3" "\xA1" - "genes", - "Mostrar", - "Reemplazar", - "Ocultar", + "genes\0" + "Mostrar\0" + "Reemplazar\0" + "Ocultar\0" + "Create fallback for invalid TOC\0" "Toque corto bot\xC3" "\xB3" - "n encendido", + "n encendido\0" "Orientaci\xC3" "\xB3" - "n", + "n\0" "Funci\xC3" "\xB3" - "n botones laterales (lector)", + "n botones laterales (lector)\0" "Saltar cap\xC3" "\xAD" "tulo (pulsaci\xC3" "\xB3" - "n larga)", + "n larga)\0" "Tipograf\xC3" "\xAD" - "a", + "a\0" "Tama\xC3" "\xB1" - "o", - "Interlineado", - "Margen de lectura", + "o\0" + "Interlineado\0" + "Margen de lectura\0" "Ajuste de p\xC3" "\xA1" - "rrafo", + "rrafo\0" "Divisi\xC3" "\xB3" - "n de palabras", + "n de palabras\0" "Auto suspensi\xC3" "\xB3" - "n", - "Show Hidden Files", - "Frecuencia de refresco", + "n\0" + "Mostrar archivos ocultos\0" + "Use Clock\0" + "Clock Settings\0" + "Uses more battery; clock may drift\0" + "Clock\0" + "Clock Format\0" + "Timezone\0" + "24h\0" + "12h\0" + "UTC (GMT/BST)\0" + "Central Europe (CET/CEST)\0" + "Eastern Europe (EET/EEST)\0" + "US Eastern (EST/EDT)\0" + "US Central (CST/CDT)\0" + "US Mountain (MST/MDT)\0" + "US Pacific (PST/PDT)\0" + "Australia Eastern (AEST/AEDT)\0" + "New Zealand (NZST/NZDT)\0" + "Russia (MSK)\0" + "South America (UTC-3)\0" + "Gulf (UTC+4)\0" + "India (UTC+5:30)\0" + "SE Asia (UTC+7)\0" + "China/SE Asia (UTC+8)\0" + "Japan/Korea (UTC+9)\0" + "Sync Time\0" + "Detect Timezone\0" + "Syncing clock...\0" + "Detecting timezone...\0" + "Time synced\0" + "Time sync failed\0" + "Drift: %s\0" + "Last sync: %s\0" + "Timezone detected\0" + "Timezone detect failed\0" + "DST: active\0" + "DST: inactive\0" + "DST: unknown\0" + "Frecuencia de refresco\0" "Sincronizaci\xC3" "\xB3" - "n de KOReader", - "Verificar actualizaciones", - "Idioma", + "n de KOReader\0" + "Verificar actualizaciones\0" + "Idioma\0" "Borrar cach\xC3" "\xA9" - " de lectura", - "Usuario", + " de lectura\0" + "Usuario\0" "Contrase\xC3" "\xB1" - "a", - "URL del servidor de sinc.", - "Coincidencia de doc.", - "Autenticar", - "Usuario de KOReader", + "a\0" + "URL del servidor de sinc.\0" + "Coincidencia de doc.\0" + "Autenticar\0" + "Usuario de KOReader\0" "Contrase\xC3" "\xB1" - "a de KOReader", - "Nombre de archivo", - "Binario", - "Configurar credenciales", + "a de KOReader\0" + "Nombre de archivo\0" + "Binario\0" + "Configurar credenciales\0" "Fallo de conexi\xC3" "\xB3" - "n Wi-Fi", - "Autenticando...", + "n Wi-Fi\0" + "Autenticando...\0" "\xC2" "\xA1" "Autenticaci\xC3" "\xB3" - "n exitosa!", + "n exitosa!\0" "Autenticaci\xC3" "\xB3" - "n KOReader", + "n KOReader\0" "La sincronizaci\xC3" "\xB3" "n de KOReader est\xC3" "\xA1" - " lista para usarse", + " lista para usarse\0" "Error de autenticaci\xC3" "\xB3" - "n", - "Hecho", + "n\0" + "Register\0" + "Registering...\0" + "Account created successfully!\0" + "Registration failed\0" + "Username already taken\0" + "Hecho\0" "Esto borrar\xC3" "\xA1" " todos los datos del libro en cach\xC3" "\xA9" - ".", + ".\0" "\xC2" "\xA1" "Se perder\xC3" "\xA1" - " todo el progreso de lectura!", + " todo el progreso de lectura!\0" "Los libros deber\xC3" "\xA1" - "n ser reindexados", - "cuando se vuelvan a abrir.", + "n ser reindexados\0" + "cuando se vuelvan a abrir.\0" "Borrando cach\xC3" "\xA9" - "...", + "...\0" "Cach\xC3" "\xA9" - " borrada", - "elementos eliminados", + " borrada\0" + "elementos eliminados\0" "fall\xC3" "\xB3" - "", + "\0" "No se pudo borrar la cach\xC3" "\xA9" - "", - "Consulte los registros del puerto serie", - "Oscuro", - "Claro", - "Personalizado", - "Portada", - "Ninguno", - "Ajustar", - "Recortar", - "Nunca", - "En el lector", - "Siempre", - "Ignorar", - "Suspender", + "\0" + "Consulte los registros del puerto serie\0" + "Oscuro\0" + "Claro\0" + "Personalizado\0" + "Portada\0" + "Ninguno\0" + "Ajustar\0" + "Recortar\0" + "Nunca\0" + "En el lector\0" + "Siempre\0" + "Ignorar\0" + "Suspender\0" "Pasar p\xC3" "\xA1" - "gina", - "Vertical", - "Horizontal (horario)", - "Invertido", - "Horizontal (antihorario)", - "Ant./Sig.", - "Sig./Ant.", - "Bookerly", - "Noto Sans", - "Open Dyslexic", + "gina\0" + "Vertical\0" + "Horizontal (horario)\0" + "Invertido\0" + "Horizontal (antihorario)\0" + "Ant./Sig.\0" + "Sig./Ant.\0" + "Bookerly\0" + "Noto Sans\0" + "Open Dyslexic\0" "Peque\xC3" "\xB1" - "o", - "Mediano", - "Grande", - "Extra grande", - "Estrecho", - "Normal", - "Amplio", - "Justificado", - "Izquierda", - "Centro", - "Derecha", - "1 min.", - "5 min.", - "10 min.", - "15 min.", - "30 min.", + "o\0" + "Mediano\0" + "Grande\0" + "Extra grande\0" + "Estrecho\0" + "Normal\0" + "Amplio\0" + "Justificado\0" + "Izquierda\0" + "Centro\0" + "Derecha\0" + "1 min.\0" + "5 min.\0" + "10 min.\0" + "15 min.\0" + "30 min.\0" "1 p\xC3" "\xA1" - "g.", + "g.\0" "5 p\xC3" "\xA1" - "g.", + "g.\0" "10 p\xC3" "\xA1" - "g.", + "g.\0" "15 p\xC3" "\xA1" - "g.", + "g.\0" "30 p\xC3" "\xA1" - "g.", - "Actualizar", + "g.\0" + "Actualizar\0" "Verificando actualizaci\xC3" "\xB3" - "n...", + "n...\0" "\xC2" "\xA1" "Nueva actualizaci\xC3" "\xB3" - "n disponible!", + "n disponible!\0" "Versi\xC3" "\xB3" - "n actual:", + "n actual:\0" "Nueva versi\xC3" "\xB3" - "n:", - "Actualizando...", - "No hay actualizaciones disponibles", + "n:\0" + "Actualizando...\0" + "No hay actualizaciones disponibles\0" "Fallo de actualizaci\xC3" "\xB3" - "n", + "n\0" "Actualizaci\xC3" "\xB3" - "n completada", + "n completada\0" "Reinicie manteniendo pulsado bot\xC3" "\xB3" - "n de encendido", - "No se encontraron elementos", - "Descargando...", - "Fallo de descarga", - "Error:", - "Sin nombre", + "n de encendido\0" + "No se encontraron elementos\0" + "Descargando...\0" + "Fallo de descarga\0" + "Error:\0" + "Sin nombre\0" "No se configur\xC3" "\xB3" - " URL de servidor", - "Fallo al obtener el feed", - "Fallo al procesar el feed", - "Red: ", - "IP: ", - "Error: Fallo general", - "Error: Red no encontrada", + " URL de servidor\0" + "Fallo al obtener el feed\0" + "Fallo al procesar el feed\0" + "Red: \0" + "IP: \0" + "Error: Fallo general\0" + "Error: Red no encontrada\0" "Error: Tiempo de conexi\xC3" "\xB3" - "n agotado", - "Tarjeta microSD", + "n agotado\0" + "Tarjeta microSD\0" "\xC2" "\xAB" " Atr\xC3" "\xA1" - "s", + "s\0" "\xC2" "\xAB" - " Salir", + " Salir\0" "\xC2" "\xAB" - " Inicio", - "Selecc.", - "Seleccionado", - "Cambiar", - "Confirmar", - "Cancelar", - "Conectar", - "Abrir", - "Descargar", - "Reintentar", + " Inicio\0" + "Selecc.\0" + "Seleccionado\0" + "Cambiar\0" + "Confirmar\0" + "Cancelar\0" + "Conectar\0" + "Abrir\0" + "Descargar\0" + "Reintentar\0" "S\xC3" "\xAD" - "", - "No", - "Mostrar", - "Ocultar", - "Activado", - "Desactivado", - "No configurado", - "Izq.", - "Dcha.", - "Subir", - "Bajar", - "OK", + "\0" + "No\0" + "Mostrar\0" + "Ocultar\0" + "Activado\0" + "Desactivado\0" + "No configurado\0" + "Izq.\0" + "Dcha.\0" + "Subir\0" + "Bajar\0" + "OK\0" "Filtro de pantalla de suspensi\xC3" "\xB3" - "n", - "Contraste", - "Personalizar barra de estado", + "n\0" + "Contraste\0" + "Personalizar barra de estado\0" "Contador de p\xC3" "\xA1" - "g. por cap.", - "Porcentaje progreso libro", - "Barra de progreso", - "Grosor de barra de progreso", - "Fino", - "Medio", - "Ancho", - "Libro", + "g. por cap.\0" + "Porcentaje progreso libro\0" + "Barra de progreso\0" + "Grosor de barra de progreso\0" + "Fino\0" + "Medio\0" + "Ancho\0" + "Libro\0" "Cap\xC3" "\xAD" - "tulo", + "tulo\0" "Cap\xC3" "\xAD" - "tulo 21", + "tulo 21\0" "T\xC3" "\xAD" - "tulo del libro", + "tulo del libro\0" "Previsualizaci\xC3" "\xB3" - "n", + "n\0" "T\xC3" "\xAD" - "tulo", + "tulo\0" "Bater\xC3" "\xAD" - "a", - "Interfaz", + "a\0" + "Interfaz\0" "Cl\xC3" "\xA1" - "sico", - "Lyra", - "Lyra Extendido", + "sico\0" + "Lyra\0" + "Lyra Extendido\0" "Correcci\xC3" "\xB3" - "n de desvanecimiento", - "Reconfigurar botones frontales", - "Navegador OPDS", - "Portada + Pers.", - "Libros recientes", - "No hay libros recientes", - "Transferir contenido a este dispositivo", + "n de desvanecimiento\0" + "Reconfigurar botones frontales\0" + "Navegador OPDS\0" + "Portada + Pers.\0" + "Page overlay\0" + "Recents\0" + "Libros recientes\0" + "No hay libros recientes\0" + "Transferir contenido a este dispositivo\0" "\xC2" "\xBF" "Desea olvidar la red y la contrase\xC3" "\xB1" - "a guardada?", - "Olvidar", - "Iniciando Calibre...", + "a guardada?\0" + "Olvidar\0" + "Iniciando Calibre...\0" "Configuraci\xC3" "\xB3" - "n", - "Estado", - "Borrar", - "Predeterminado", + "n\0" + "Estado\0" + "Borrar\0" + "Predeterminado\0" "Pulse un bot\xC3" "\xB3" "n frontal para cada funci\xC3" "\xB3" - "n", - "Sin asignar", - "Ya asignado", + "n\0" + "Sin asignar\0" + "Ya asignado\0" "Bot\xC3" "\xB3" "n lateral arriba: restablecer configuraci\xC3" "\xB3" - "n", + "n\0" "Bot\xC3" "\xB3" "n lateral abajo: anular reconfiguraci\xC3" "\xB3" - "n", + "n\0" "Atr\xC3" "\xA1" "s (primer bot\xC3" "\xB3" - "n)", + "n)\0" "Confirmar (segundo bot\xC3" "\xB3" - "n)", + "n)\0" "Izq. (tercer bot\xC3" "\xB3" - "n)", + "n)\0" "Dcha. (cuarto bot\xC3" "\xB3" - "n)", - "Ir a %", + "n)\0" + "Ir a %\0" "Volver al men\xC3" "\xBA" - " Inicio", - "Sincronizar progreso de lectura", + " Inicio\0" + "Sincronizar progreso de lectura\0" "Borrar cach\xC3" "\xA9" - " del libro", - "Borrar", + " del libro\0" + "Borrar\0" + "Remove\0" "Mostrar p\xC3" "\xA1" - "gina como QR", - "Cap.: ", + "gina como QR\0" + "Cap.: \0" " p\xC3" "\xA1" - "g. | ", - "Libro: ", - "Para Calibre, agregue /opds a su URL", - "Izq./Dcha.: 1% | Subir/Bajar: 10%", + "g. | \0" + "Libro: \0" + "Para Calibre, agregue /opds a su URL\0" + "Izq./Dcha.: 1% | Subir/Bajar: 10%\0" "Tiempo de sincronizaci\xC3" "\xB3" - "n...", - "Calculando hash del documento...", - "No se pudo calcular el hash del documento", - "Recuperando progreso remoto...", - "Subiendo progreso...", - "No se han configurado credenciales", + "n...\0" + "Calculando hash del documento...\0" + "No se pudo calcular el hash del documento\0" + "Recuperando progreso remoto...\0" + "Mapping remote position...\0" + "Calculating local position...\0" + "Subiendo progreso...\0" + "No se han configurado credenciales\0" "Configure una cuenta de KOReader en la configuraci\xC3" "\xB3" - "n", + "n\0" "\xC2" "\xA1" - "Progreso encontrado!", - "Remoto:", - "Local:", + "Progreso encontrado!\0" + "Remoto:\0" + "Local:\0" "P\xC3" "\xA1" - "gina %d, %.2f%% completado", + "gina %d, %.2f%% completado\0" "P\xC3" "\xA1" - "gina %d / %d, %.2f%% completado", - " De: %s", - "Aplicar progreso remoto", - "Subir progreso local", + "gina %d / %d, %.2f%% completado\0" + " De: %s\0" + "Aplicar progreso remoto\0" + "Subir progreso local\0" "No se encontr\xC3" "\xB3" - " progreso remoto", + " progreso remoto\0" "\xC2" "\xBF" "Subir posici\xC3" "\xB3" - "n actual?", + "n actual?\0" "\xC2" "\xA1" - "Progreso subido!", + "Progreso subido!\0" "Fallo de sincronizaci\xC3" "\xB3" - "n", - "Secc.:", - "Subir", - "Estilo del libro", - "Estilo integrado", - "URL del servidor OPDS", + "n\0" + "Secc.:\0" + "Subir\0" + "Estilo del libro\0" + "Estilo integrado\0" + "URL del servidor OPDS\0" "Pie de p\xC3" "\xA1" - "gina", + "gina\0" "No hay notas al pie de esta p\xC3" "\xA1" - "gina", - "[enlace]", - "Tomar captura de pantalla", + "gina\0" + "[enlace]\0" + "Tomar captura de pantalla\0" "P\xC3" "\xA1" - "ginas por minuto: ", + "ginas por minuto: \0" "Leer p\xC3" "\xA1" - "ginas por minuto", - "Sleep Screen Info Overlay", - "White", - "Gray", - "Black", - "Off", - "Reading progress: Page %lu/%u - %.0f%%", - "Reading progress: Page %lu", - " - Page %d/%d - %.0f%% read", + "ginas por minuto\0" + "Info\0" + "Author\0" + "Series\0" + "Size\0" + "Sleep Screen Info Overlay\0" + "White\0" + "Gray\0" + "Black\0" + "Off\0" + "Reading progress: Page %lu/%u - %.0f%%\0" + "Reading progress: Page %lu\0" + " - Page %d/%d - %.0f%% read\0" + "System Information\0" + "Failed to load XTC file\0" + "Failed to load EPUB file\0" + "FW version\0" + "Chip\0" + "CPU\0" + "MHz\0" + "Free RAM\0" + "Min free\0" + "Max block\0" + "Flash used\0" + "Uptime\0" + "Charging\0" + "Gathering data...\0" + "Reading...\0" +; +// clang-format on + +const uint16_t OFFSETS_ES[] = { + 0, 11, 24, 35, 59, 82, 102, 110, 128, 151, 167, 194, + 216, 231, 245, 262, 272, 289, 316, 331, 346, 358, 367, 379, + 404, 426, 438, 452, 465, 484, 502, 525, 555, 572, 594, 631, + 661, 690, 711, 751, 788, 798, 837, 858, 887, 914, 927, 948, + 984, 987, 1000, 1011, 1055, 1090, 1142, 1191, 1200, 1207, 1217, 1225, + 1249, 1281, 1303, 1329, 1348, 1358, 1366, 1377, 1385, 1417, 1446, 1459, + 1495, 1531, 1543, 1551, 1564, 1582, 1601, 1623, 1640, 1665, 1675, 1690, + 1725, 1731, 1744, 1753, 1757, 1761, 1775, 1801, 1827, 1848, 1869, 1891, + 1912, 1942, 1966, 1979, 2001, 2014, 2031, 2047, 2069, 2089, 2099, 2115, + 2132, 2154, 2166, 2183, 2193, 2207, 2225, 2248, 2260, 2274, 2287, 2310, + 2338, 2364, 2371, 2396, 2404, 2416, 2442, 2463, 2474, 2494, 2518, 2536, + 2544, 2568, 2593, 2609, 2635, 2659, 2714, 2738, 2747, 2762, 2792, 2812, + 2835, 2841, 2892, 2935, 2971, 2998, 3017, 3032, 3053, 3060, 3088, 3128, + 3135, 3141, 3155, 3163, 3171, 3179, 3188, 3194, 3207, 3215, 3223, 3233, + 3247, 3256, 3277, 3287, 3312, 3322, 3332, 3341, 3351, 3365, 3374, 3382, + 3389, 3402, 3411, 3418, 3425, 3437, 3447, 3454, 3462, 3469, 3476, 3484, + 3492, 3500, 3508, 3516, 3525, 3534, 3543, 3554, 3584, 3619, 3636, 3652, + 3668, 3703, 3727, 3753, 3802, 3830, 3845, 3863, 3870, 3881, 3914, 3939, + 3965, 3971, 3976, 3997, 4022, 4057, 4073, 4083, 4092, 4102, 4110, 4123, + 4131, 4141, 4150, 4159, 4165, 4175, 4186, 4190, 4193, 4201, 4209, 4218, + 4230, 4245, 4250, 4256, 4262, 4268, 4271, 4305, 4315, 4344, 4371, 4397, + 4415, 4443, 4448, 4454, 4460, 4466, 4476, 4489, 4507, 4525, 4533, 4542, + 4551, 4560, 4565, 4580, 4611, 4642, 4657, 4673, 4686, 4694, 4711, 4735, + 4775, 4825, 4833, 4854, 4869, 4876, 4883, 4898, 4941, 4953, 4965, 5015, + 5061, 5084, 5111, 5132, 5154, 5161, 5184, 5216, 5240, 5247, 5254, 5278, + 5285, 5297, 5305, 5342, 5378, 5407, 5440, 5482, 5513, 5540, 5570, 5591, + 5626, 5680, 5703, 5711, 5718, 5748, 5783, 5792, 5816, 5837, 5869, 5895, + 5914, 5939, 5946, 5952, 5969, 5986, 6008, 6023, 6059, 6068, 6094, 6116, + 6141, 6146, 6153, 6160, 6165, 6191, 6197, 6202, 6208, 6212, 6251, 6278, + 6306, 6325, 6349, 6374, 6385, 6390, 6394, 6398, 6407, 6416, 6426, 6437, + 6444, 6453, 6471, }; -const char* const STRINGS_FR[] = { - "CrossPoint", +// clang-format off +const char STRINGS_FR_DATA[] = + "CrossPoint\0" "D\xC3" "\x89" - "MARRAGE EN COURS", - "VEILLE", - "Mise en veille", - "Parcourir les fichiers", - "Transfert de fichiers", + "MARRAGE EN COURS\0" + "VEILLE\0" + "Mise en veille\0" + "Parcourir les fichiers\0" + "Transfert de fichiers\0" "R\xC3" "\xA9" - "glages", - "Reprendre la lecture", - "Aucun livre ouvert", - "Commencer la lecture", + "glages\0" + "Reprendre la lecture\0" + "Aucun livre ouvert\0" + "Commencer la lecture\0" "Aucun fichier trouv\xC3" "\xA9" - "", - "Choix du chapitre", - "Aucun chapitre", - "Fin du livre", - "Chapitre vide", - "Indexation en cours", + "\0" + "Choix du chapitre\0" + "Aucun chapitre\0" + "Fin du livre\0" + "Chapitre vide\0" + "Indexation en cours\0" "Erreur de m\xC3" "\xA9" - "moire", - "Erreur de chargement", - "Fichier vide", + "moire\0" + "Erreur de chargement\0" + "Fichier vide\0" "D\xC3" "\xA9" "passement de m\xC3" "\xA9" - "moire", + "moire\0" "Chargement\xE2" "\x80" "\xA6" - "", - "Chargement", + "\0" + "Chargement\0" "R\xC3" "\xA9" - "seaux WiFi", + "seaux WiFi\0" "Aucun r\xC3" "\xA9" - "seau", + "seau\0" "%zu r\xC3" "\xA9" - "seaux", + "seaux\0" "Recherche en cours\xE2" "\x80" "\xA6" - "", + "\0" "Connexion en cours\xE2" "\x80" "\xA6" - "", + "\0" "Connect\xC3" "\xA9" - " !", + " !\0" "\xC3" "\x89" - "chec de la connexion", + "chec de la connexion\0" "Oublier ce r\xC3" "\xA9" - "seau ?", - "Enregistrer le mot de passe ?", - "Appuyez sur OK pour scanner", + "seau ?\0" + "Enregistrer le mot de passe ?\0" + "Appuyez sur OK pour scanner\0" "Rejoindre un r\xC3" "\xA9" - "seau", + "seau\0" "Cr\xC3" "\xA9" "er un point d\xE2" @@ -1830,13 +2067,13 @@ const char* const STRINGS_FR[] = { "\x99" "acc\xC3" "\xA8" - "s", + "s\0" "Se connecter \xC3" "\xA0" - " un WiFi existant", + " un WiFi existant\0" "Cr\xC3" "\xA9" - "er un WiFi pour d'autres appareils", + "er un WiFi pour d'autres appareils\0" "Cr\xC3" "\xA9" "ation du point d\xE2" @@ -1847,51 +2084,51 @@ const char* const STRINGS_FR[] = { "s\xE2" "\x80" "\xA6" - "", + "\0" "Mode point d\xE2" "\x80" "\x99" "acc\xC3" "\xA8" - "s", + "s\0" "Connectez un appareil \xC3" "\xA0" - " ce WiFi", - "Ouvrez cette URL dans un navigateur", - "ou http://", - "ou scannez le QR code :", - "Connexion Calibre sans fil", - "URL Web Calibre", + " ce WiFi\0" + "Ouvrez cette URL dans un navigateur\0" + "ou http://\0" + "ou scannez le QR code :\0" + "Connexion Calibre sans fil\0" + "URL Web Calibre\0" "* = S\xC3" "\xA9" "curis\xC3" "\xA9" " | + = Sauvegard\xC3" "\xA9" - "", - "Adresse MAC :", + "\0" + "Adresse MAC :\0" "V\xC3" "\xA9" "rification du WiFi\xE2" "\x80" "\xA6" - "", - "Entrez le mot de passe WiFi", - "vers ", + "\0" + "Entrez le mot de passe WiFi\0" + "vers \0" "R\xC3" "\xA9" - "ception : ", + "ception : \0" "Re\xC3" "\xA7" - "u : ", - "1) Installer plugin CrossPoint Reader", + "u : \0" + "1) Installer plugin CrossPoint Reader\0" "2) \xC3" "\x8A" "tre sur le m\xC3" "\xAA" "me r\xC3" "\xA9" - "seau WiFi", + "seau WiFi\0" "3) Calibre : \xE2" "\x80" "\x98" @@ -1901,234 +2138,283 @@ const char* const STRINGS_FR[] = { "appareil\xE2" "\x80" "\x99" - "", + "\0" "4) Gardez cet \xC3" "\xA9" - "cran ouvert", - "Affichage", - "Lecteur", - "Commandes", + "cran ouvert\0" + "Affichage\0" + "Lecteur\0" + "Commandes\0" "Syst\xC3" "\xA8" - "me", + "me\0" "\xC3" "\x89" - "cran de veille", + "cran de veille\0" "Mode \xC3" "\xA9" - "cran de veille", - "Masquer % batterie", - "Espacement paragraphes", - "Lissage du texte", - "Images", - "Display", - "Placeholder", - "Suppress", - "Appui court alim.", - "Orientation de lecture", + "cran de veille\0" + "Masquer % batterie\0" + "Espacement paragraphes\0" + "Lissage du texte\0" + "Images\0" + "Affichage\0" + "Espace r\xC3" + "\xA9" + "serv\xC3" + "\xA9" + "\0" + "Masquer\0" + "Create fallback for invalid TOC\0" + "Appui court alim.\0" + "Orientation de lecture\0" "Boutons lat\xC3" "\xA9" - "raux", - "Appui long saut de chapitre", + "raux\0" + "Appui long saut de chapitre\0" "Police de caract\xC3" "\xA8" - "res du lecteur", - "Taille texte interface", - "Interligne", - "Marges du lecteur", - "Alignement du texte", + "res du lecteur\0" + "Taille texte interface\0" + "Interligne\0" + "Marges du lecteur\0" + "Alignement du texte\0" "C\xC3" "\xA9" - "sure", - "Mise en veille auto", - "Show Hidden Files", + "sure\0" + "Mise en veille auto\0" + "Afficher les fichiers cach\xC3" + "\xA9" + "s\0" + "Use Clock\0" + "Clock Settings\0" + "Uses more battery; clock may drift\0" + "Clock\0" + "Clock Format\0" + "Timezone\0" + "24h\0" + "12h\0" + "UTC (GMT/BST)\0" + "Central Europe (CET/CEST)\0" + "Eastern Europe (EET/EEST)\0" + "US Eastern (EST/EDT)\0" + "US Central (CST/CDT)\0" + "US Mountain (MST/MDT)\0" + "US Pacific (PST/PDT)\0" + "Australia Eastern (AEST/AEDT)\0" + "New Zealand (NZST/NZDT)\0" + "Russia (MSK)\0" + "South America (UTC-3)\0" + "Gulf (UTC+4)\0" + "India (UTC+5:30)\0" + "SE Asia (UTC+7)\0" + "China/SE Asia (UTC+8)\0" + "Japan/Korea (UTC+9)\0" + "Sync Time\0" + "Detect Timezone\0" + "Syncing clock...\0" + "Detecting timezone...\0" + "Time synced\0" + "Time sync failed\0" + "Drift: %s\0" + "Last sync: %s\0" + "Timezone detected\0" + "Timezone detect failed\0" + "DST: active\0" + "DST: inactive\0" + "DST: unknown\0" "Fr\xC3" "\xA9" "quence rafra\xC3" "\xAE" - "chissement", - "Synchro KOReader", + "chissement\0" + "Synchro KOReader\0" "Mise \xC3" "\xA0" - " jour", - "Langue", - "Vider le cache de lecture", + " jour\0" + "Langue\0" + "Vider le cache de lecture\0" "Nom d\xE2" "\x80" "\x99" - "utilisateur", - "Mot de passe", - "URL du serveur", - "Correspondance", - "Connexion", - "Utilisateur", - "Mot de passe", - "Nom de fichier", - "Binaire", - "Identifiants manquants", + "utilisateur\0" + "Mot de passe\0" + "URL du serveur\0" + "Correspondance\0" + "Connexion\0" + "Utilisateur\0" + "Mot de passe\0" + "Nom de fichier\0" + "Binaire\0" + "Identifiants manquants\0" "\xC3" "\x89" - "chec connexion WiFi", + "chec connexion WiFi\0" "Authentification\xE2" "\x80" "\xA6" - "", + "\0" "Authentifi\xC3" "\xA9" - " !", - "Auth KOReader", + " !\0" + "Auth KOReader\0" "Synchro KOReader pr\xC3" "\xAA" - "te", + "te\0" "\xC3" "\x89" - "chec authentification", - "Fait", + "chec authentification\0" + "Register\0" + "Registering...\0" + "Account created successfully!\0" + "Registration failed\0" + "Username already taken\0" + "Fait\0" "Le cache de la biblioth\xC3" "\xA8" "que sera vid\xC3" "\xA9" - ".", - "Votre progression sera perdue !", + ".\0" + "Votre progression sera perdue !\0" "Les livres devront \xC3" "\xAA" "tre r\xC3" "\xA9" "index\xC3" "\xA9" - "s", + "s\0" "\xC3" "\xA0" - " la prochaine ouverture.", + " la prochaine ouverture.\0" "Nettoyage du cache\xE2" "\x80" "\xA6" - "", + "\0" "Cache vid\xC3" "\xA9" - "", + "\0" "\xC3" "\xA9" "l\xC3" "\xA9" "ments supprim\xC3" "\xA9" - "s", + "s\0" "ont \xC3" "\xA9" "chou\xC3" "\xA9" - "", + "\0" "\xC3" "\x89" - "chec nettoyage cache", + "chec nettoyage cache\0" "Voir console pour d\xC3" "\xA9" - "tails", - "Sombre", - "Clair", + "tails\0" + "Sombre\0" + "Clair\0" "Personnalis\xC3" "\xA9" - "", - "Couverture", - "Aucun", + "\0" + "Couverture\0" + "Aucun\0" "Ajust\xC3" "\xA9" - "", + "\0" "Rogn\xC3" "\xA9" - "", - "Jamais", - "Dans le lecteur", - "Toujours", - "Ignorer", - "Mise en veille", - "Page suivante", - "Portrait", - "Paysage", + "\0" + "Jamais\0" + "Dans le lecteur\0" + "Toujours\0" + "Ignorer\0" + "Mise en veille\0" + "Page suivante\0" + "Portrait\0" + "Paysage\0" "Invers\xC3" "\xA9" - "", + "\0" "Paysage invers\xC3" "\xA9" - "", + "\0" "Pr\xC3" "\xA9" - "c/Suiv", + "c/Suiv\0" "Suiv/Pr\xC3" "\xA9" - "c", - "Bookerly", - "Noto Sans", - "Open Dyslexic", - "Petit", - "Moyen", - "Grand", + "c\0" + "Bookerly\0" + "Noto Sans\0" + "Open Dyslexic\0" + "Petit\0" + "Moyen\0" + "Grand\0" "Tr\xC3" "\xA8" - "s grand", + "s grand\0" "Serr\xC3" "\xA9" - "", - "Normal", - "Large", + "\0" + "Normal\0" + "Large\0" "Justifi\xC3" "\xA9" - "", - "Gauche", + "\0" + "Gauche\0" "Centr\xC3" "\xA9" - "", - "Droite", - "1 min", - "5 min", - "10 min", - "15 min", - "30 min", - "1 page", - "5 pages", - "10 pages", - "15 pages", - "30 pages", + "\0" + "Droite\0" + "1 min\0" + "5 min\0" + "10 min\0" + "15 min\0" + "30 min\0" + "1 page\0" + "5 pages\0" + "10 pages\0" + "15 pages\0" + "30 pages\0" "Mise \xC3" "\xA0" - " jour", + " jour\0" "Recherche de mise \xC3" "\xA0" " jour\xE2" "\x80" "\xA6" - "", + "\0" "Mise \xC3" "\xA0" - " jour disponible !", - "Version actuelle :", - "Nouvelle version : ", + " jour disponible !\0" + "Version actuelle :\0" + "Nouvelle version : \0" "Mise \xC3" "\xA0" " jour en cours\xE2" "\x80" "\xA6" - "", + "\0" "Aucune mise \xC3" "\xA0" - " jour", + " jour\0" "\xC3" "\x89" "chec de la mise \xC3" "\xA0" - " jour", + " jour\0" "Mise \xC3" "\xA0" " jour effectu\xC3" "\xA9" - "e", + "e\0" "Maintenir Power pour red\xC3" "\xA9" - "marrer", + "marrer\0" "Aucune entr\xC3" "\xA9" - "e", + "e\0" "T\xC3" "\xA9" "l\xC3" @@ -2136,202 +2422,217 @@ const char* const STRINGS_FR[] = { "chargement\xE2" "\x80" "\xA6" - "", + "\0" "\xC3" "\x89" "chec du t\xC3" "\xA9" "l\xC3" "\xA9" - "chargement", - "Erreur : ", - "Sans titre", + "chargement\0" + "Erreur : \0" + "Sans titre\0" "URL serveur non configur\xC3" "\xA9" - "e", + "e\0" "\xC3" "\x89" "chec r\xC3" "\xA9" "cup\xC3" "\xA9" - "ration flux", + "ration flux\0" "\xC3" "\x89" - "chec analyse flux", + "chec analyse flux\0" "R\xC3" "\xA9" - "seau : ", - "IP : ", + "seau : \0" + "IP : \0" "Erreur : \xC3" "\x89" "chec g\xC3" "\xA9" "n\xC3" "\xA9" - "ral", + "ral\0" "Erreur : R\xC3" "\xA9" - "seau introuvable", + "seau introuvable\0" "Erreur : D\xC3" "\xA9" "lai d\xC3" "\xA9" "pass\xC3" "\xA9" - "", - "Carte SD", + "\0" + "Carte SD\0" "\xC2" "\xAB" - " Retour", + " Retour\0" "\xC2" "\xAB" - " Quitter", + " Quitter\0" "\xC2" "\xAB" - " Accueil", - "OK", - "Selected", - "Modifier", - "Confirmer", - "Annuler", - "Connecter", - "Ouvrir", + " Accueil\0" + "OK\0" + "S\xC3" + "\xA9" + "lectionn\xC3" + "\xA9" + "\0" + "Modifier\0" + "Confirmer\0" + "Annuler\0" + "Connecter\0" + "Ouvrir\0" "T\xC3" "\xA9" "l\xC3" "\xA9" - "charger", + "charger\0" "R\xC3" "\xA9" - "essayer", - "Oui", - "Non", - "Show", - "Hide", - "ON", - "OFF", + "essayer\0" + "Oui\0" + "Non\0" + "Afficher\0" + "Masquer\0" + "ON\0" + "OFF\0" "Non d\xC3" "\xA9" - "fini", - "Gauche", - "Droite", - "Haut", - "Bas", - "OK", + "fini\0" + "Gauche\0" + "Droite\0" + "Haut\0" + "Bas\0" + "OK\0" "Filtre \xC3" "\xA9" - "cran de veille", - "Contraste", - "Customise Status Bar", - "Chapter Page Count", - "Book Progress Percentage", - "Progress Bar", - "Progress Bar Thickness", - "Thin", - "Medium", - "Thick", - "Book", - "Chapter", - "Chapter 21", - "Book Title", - "Preview", - "Title", - "Battery", + "cran de veille\0" + "Contraste\0" + "Personnaliser la barre d'\xC3" + "\xA9" + "tat\0" + "Nombre de pages du chapitre\0" + "Pourcentage de progression\0" + "Barre de progression\0" + "\xC3" + "\x89" + "paisseur de la barre\0" + "Fine\0" + "Moyenne\0" + "\xC3" + "\x89" + "paisse\0" + "Livre\0" + "Chapitre\0" + "Chapitre 21\0" + "Titre du livre\0" + "Aper\xC3" + "\xA7" + "u\0" + "Titre\0" + "Batterie\0" "Th\xC3" "\xA8" - "me interface", - "Classique", - "Lyra", - "Lyra Extended", + "me interface\0" + "Classique\0" + "Lyra\0" + "Lyra Extended\0" "Correction lisibilit\xC3" "\xA9" - " au soleil", + " au soleil\0" "Configurer boutons fa\xC3" "\xA7" - "ade", - "Navigateur OPDS", - "Couverture + Perso", + "ade\0" + "Navigateur OPDS\0" + "Couverture + Perso\0" + "Page overlay\0" + "Recents\0" "Livres r\xC3" "\xA9" - "cents", + "cents\0" "Aucun livre r\xC3" "\xA9" - "cent", - "Utiliser transfert sans fil Calibre", + "cent\0" + "Utiliser transfert sans fil Calibre\0" "Oublier le r\xC3" "\xA9" - "seau et le mot de passe ?", - "Oublier", + "seau et le mot de passe ?\0" + "Oublier\0" "D\xC3" "\xA9" "marrage Calibre\xE2" "\x80" "\xA6" - "", - "Configuration", - "Statut", - "Effacer", + "\0" + "Configuration\0" + "Statut\0" + "Effacer\0" "D\xC3" "\xA9" - "faut", + "faut\0" "Appuyez sur un bouton fa\xC3" "\xA7" - "ade", + "ade\0" "Non assign\xC3" "\xA9" - "", + "\0" "D\xC3" "\xA9" "j\xC3" "\xA0" " assign\xC3" "\xA9" - "", + "\0" "Lat\xC3" "\xA9" "ral haut : R\xC3" "\xA9" - "initialiser", + "initialiser\0" "Lat\xC3" "\xA9" - "ral bas : Annuler", - "Retour (Bouton 1)", - "OK (Bouton 2)", - "Gauche (Bouton 3)", - "Droite (Bouton 4)", + "ral bas : Annuler\0" + "Retour (Bouton 1)\0" + "OK (Bouton 2)\0" + "Gauche (Bouton 3)\0" + "Droite (Bouton 4)\0" "Aller \xC3" "\xA0" - " %", - "Retour Accueil", - "Synchro progression", - "Supprimer cache livre", - "Supprimer", - "Show page as QR", - "Chapitre : ", - " pages | ", - "Livre : ", + " %\0" + "Retour Accueil\0" + "Synchro progression\0" + "Supprimer cache livre\0" + "Supprimer\0" + "Remove\0" + "Afficher la page en QR\0" + "Chapitre : \0" + " pages | \0" + "Livre : \0" "Pour Calibre, ajoutez /opds \xC3" "\xA0" " l\xE2" "\x80" "\x99" - "URL", - "Gauche/Droite : 1% Haut/Bas : 10%", + "URL\0" + "Gauche/Droite : 1% Haut/Bas : 10%\0" "Synchro de l\xE2" "\x80" "\x99" "heure\xE2" "\x80" "\xA6" - "", + "\0" "Calcul hash doc\xE2" "\x80" "\xA6" - "", + "\0" "\xC3" "\x89" - "chec calcul hash", + "chec calcul hash\0" "T\xC3" "\xA9" "l\xC3" @@ -2339,542 +2640,710 @@ const char* const STRINGS_FR[] = { "chargement progression\xE2" "\x80" "\xA6" - "", + "\0" + "Mapping remote position...\0" + "Calculating local position...\0" "Envoi progression\xE2" "\x80" "\xA6" - "", - "Aucun identifiant", + "\0" + "Aucun identifiant\0" "Configurer compte KOReader dans r\xC3" "\xA9" - "glages", + "glages\0" "Progression trouv\xC3" "\xA9" - "e !", - "En ligne :", - "Local :", - "Page %d, %.2f%% total", - "Page %d/%d, %.2f%% total", - " De : %s", - "Appliquer progression en ligne", - "Envoyer progression locale", - "Aucune progression en ligne", - "Envoyer position actuelle ?", + "e !\0" + "En ligne :\0" + "Local :\0" + "Page %d, %.2f%% total\0" + "Page %d/%d, %.2f%% total\0" + " De : %s\0" + "Appliquer progression en ligne\0" + "Envoyer progression locale\0" + "Aucune progression en ligne\0" + "Envoyer position actuelle ?\0" "Progression envoy\xC3" "\xA9" - "e !", + "e !\0" "\xC3" "\x89" - "chec de la synchro", - "Section ", - "Envoyer", - "Style du livre", + "chec de la synchro\0" + "Section \0" + "Envoyer\0" + "Style du livre\0" "Style int\xC3" "\xA9" "gr\xC3" "\xA9" - "", - "URL serveur OPDS", - "Footnotes", - "No footnotes on this page", - "[link]", + "\0" + "URL serveur OPDS\0" + "Notes de bas de page\0" + "Aucune note sur cette page\0" + "[lien]\0" "Capture d'\xC3" "\xA9" - "cran", - "Auto Turn Enabled: ", - "Auto Turn (Pages Per Minute)", - "Sleep Screen Info Overlay", - "White", - "Gray", - "Black", - "Off", - "Reading progress: Page %lu/%u - %.0f%%", - "Reading progress: Page %lu", - " - Page %d/%d - %.0f%% read", + "cran\0" + "Tourne-page auto : \0" + "Tourne-page auto (pages par minute)\0" + "Info\0" + "Author\0" + "Series\0" + "Size\0" + "Sleep Screen Info Overlay\0" + "White\0" + "Gray\0" + "Black\0" + "Off\0" + "Reading progress: Page %lu/%u - %.0f%%\0" + "Reading progress: Page %lu\0" + " - Page %d/%d - %.0f%% read\0" + "System Information\0" + "Failed to load XTC file\0" + "Failed to load EPUB file\0" + "FW version\0" + "Chip\0" + "CPU\0" + "MHz\0" + "Free RAM\0" + "Min free\0" + "Max block\0" + "Flash used\0" + "Uptime\0" + "Charging\0" + "Gathering data...\0" + "Reading...\0" +; +// clang-format on + +const uint16_t OFFSETS_FR[] = { + 0, 11, 31, 38, 53, 76, 98, 108, 129, 148, 169, 191, + 209, 224, 237, 251, 271, 290, 311, 324, 349, 363, 374, 388, + 402, 415, 437, 459, 471, 494, 515, 545, 573, 594, 621, 654, + 693, 726, 748, 781, 817, 828, 852, 879, 895, 928, 942, 967, + 995, 1001, 1015, 1024, 1062, 1097, 1142, 1170, 1180, 1188, 1198, 1207, + 1224, 1246, 1265, 1288, 1305, 1312, 1322, 1339, 1347, 1379, 1397, 1420, + 1438, 1466, 1499, 1522, 1533, 1551, 1571, 1579, 1599, 1629, 1639, 1654, + 1689, 1695, 1708, 1717, 1721, 1725, 1739, 1765, 1791, 1812, 1833, 1855, + 1876, 1906, 1930, 1943, 1965, 1978, 1995, 2011, 2033, 2053, 2063, 2079, + 2096, 2118, 2130, 2147, 2157, 2171, 2189, 2212, 2224, 2238, 2251, 2280, + 2297, 2310, 2317, 2343, 2363, 2376, 2391, 2406, 2416, 2428, 2441, 2456, + 2464, 2487, 2509, 2529, 2544, 2558, 2582, 2606, 2615, 2630, 2660, 2680, + 2703, 2708, 2749, 2781, 2818, 2845, 2867, 2879, 2901, 2914, 2937, 2964, + 2971, 2977, 2991, 3002, 3008, 3016, 3023, 3030, 3046, 3055, 3063, 3078, + 3092, 3101, 3109, 3118, 3135, 3146, 3157, 3166, 3176, 3190, 3196, 3202, + 3208, 3220, 3227, 3234, 3240, 3250, 3257, 3265, 3272, 3278, 3284, 3291, + 3298, 3305, 3312, 3320, 3329, 3338, 3347, 3360, 3389, 3415, 3434, 3454, + 3479, 3499, 3525, 3549, 3582, 3597, 3617, 3644, 3654, 3665, 3693, 3720, + 3740, 3751, 3757, 3783, 3812, 3838, 3847, 3857, 3868, 3879, 3882, 3896, + 3905, 3915, 3923, 3933, 3940, 3954, 3965, 3969, 3973, 3982, 3990, 3993, + 3997, 4009, 4016, 4023, 4028, 4032, 4035, 4059, 4069, 4100, 4128, 4155, + 4176, 4199, 4204, 4212, 4221, 4227, 4236, 4248, 4263, 4271, 4277, 4286, + 4303, 4313, 4318, 4332, 4365, 4392, 4408, 4427, 4440, 4448, 4464, 4484, + 4520, 4560, 4568, 4590, 4604, 4611, 4619, 4627, 4657, 4670, 4686, 4717, + 4740, 4758, 4772, 4790, 4808, 4819, 4834, 4854, 4876, 4886, 4893, 4916, + 4928, 4940, 4949, 4988, 5023, 5047, 5066, 5085, 5117, 5144, 5174, 5195, + 5213, 5255, 5278, 5289, 5297, 5319, 5344, 5354, 5385, 5412, 5440, 5468, + 5491, 5512, 5521, 5529, 5544, 5560, 5577, 5598, 5625, 5632, 5649, 5669, + 5705, 5710, 5717, 5724, 5729, 5755, 5761, 5766, 5772, 5776, 5815, 5842, + 5870, 5889, 5913, 5938, 5949, 5954, 5958, 5962, 5971, 5980, 5990, 6001, + 6008, 6017, 6035, }; -const char* const STRINGS_DE[] = { - "CrossPoint", - "STARTEN", - "STANDBY", - "Standby", - "Durchsuchen", - "Datentransfer", - "Einstellungen", - "Weiterlesen", - "Aktuell kein Buch", - "Lesen beginnen", - "Keine Dateien gefunden", +// clang-format off +const char STRINGS_DE_DATA[] = + "CrossPoint\0" + "STARTEN\0" + "STANDBY\0" + "Standby\0" + "Durchsuchen\0" + "Datentransfer\0" + "Einstellungen\0" + "Weiterlesen\0" + "Aktuell kein Buch\0" + "Lesen beginnen\0" + "Keine Dateien gefunden\0" "Kapitel ausw\xC3" "\xA4" - "hlen", - "Keine Kapitel", - "Buchende", - "Kapitelende", - "Indexieren", - "Speicherfehler", - "Seitenladefehler", - "Leere Datei", + "hlen\0" + "Keine Kapitel\0" + "Buchende\0" + "Kapitelende\0" + "Indexieren\0" + "Speicherfehler\0" + "Seitenladefehler\0" + "Leere Datei\0" "Zu gro\xC3" "\x9F" - "", + "\0" "Laden\xE2" "\x80" "\xA6" - "", - "Laden", - "WLAN-Netzwerke", - "Kein WLAN gefunden", - "%zu WLAN-Netzwerke gefunden", - "Suchen...", - "Verbinden...", - "Verbunden!", - "Verbindungsfehler", - "WLAN vergessen?", - "Passwort speichern?", + "\0" + "Laden\0" + "WLAN-Netzwerke\0" + "Kein WLAN gefunden\0" + "%zu WLAN-Netzwerke gefunden\0" + "Suchen...\0" + "Verbinden...\0" + "Verbunden!\0" + "Verbindungsfehler\0" + "WLAN vergessen?\0" + "Passwort speichern?\0" "OK f\xC3" "\xBC" - "r neue Suche", - "Netzwerk beitreten", - "Hotspot erstellen", - "Mit einem bestehenden WLAN verbinden", + "r neue Suche\0" + "Netzwerk beitreten\0" + "Hotspot erstellen\0" + "Mit einem bestehenden WLAN verbinden\0" "WLAN f\xC3" "\xBC" - "r andere erstellen", + "r andere erstellen\0" "Hotspot starten\xE2" "\x80" "\xA6" - "", - "Hotspot-Modus", + "\0" + "Hotspot-Modus\0" "Ger\xC3" "\xA4" - "t mit diesem WLAN verbinden", + "t mit diesem WLAN verbinden\0" "Diese URL im Browser \xC3" "\xB6" - "ffnen", - "oder http://", - "oder QR-Code mit dem Handy scannen:", - "Calibre Wireless", - "Calibre-Web-URL", + "ffnen\0" + "oder http://\0" + "oder QR-Code mit dem Handy scannen:\0" + "Calibre Wireless\0" + "Calibre-Web-URL\0" "* = Verschl\xC3" "\xBC" - "sselt | + = Gespeichert", - "MAC-Adresse:", + "sselt | + = Gespeichert\0" + "MAC-Adresse:\0" "WLAN pr\xC3" "\xBC" "fen\xE2" "\x80" "\xA6" - "", - "WLAN-Passwort eingeben", - "mit ", - "Empfange:", - "Empfangen:", - "1) CrossPoint Reader-Plugin installieren", - "2) Mit selbem WLAN verbinden", + "\0" + "WLAN-Passwort eingeben\0" + "mit \0" + "Empfange:\0" + "Empfangen:\0" + "1) CrossPoint Reader-Plugin installieren\0" + "2) Mit selbem WLAN verbinden\0" "3) In Calibre: \"An Ger\xC3" "\xA4" - "t senden\"", - "Bildschirm beim Senden offenlassen", - "Anzeige", - "Lesen", - "Bedienung", - "System", - "Standby-Bild", - "Standby-Bildmodus", - "Batterie % ausblenden", - "Absatzabstand", + "t senden\"\0" + "Bildschirm beim Senden offenlassen\0" + "Anzeige\0" + "Lesen\0" + "Bedienung\0" + "System\0" + "Standby-Bild\0" + "Standby-Bildmodus\0" + "Batterie % ausblenden\0" + "Absatzabstand\0" "Schriftgl\xC3" "\xA4" - "ttung", - "Images", - "Display", - "Placeholder", - "Suppress", + "ttung\0" + "Bilder\0" + "Darstellung\0" + "Platzhalter\0" + "Unterdr\xC3" + "\xBC" + "cken\0" + "Create fallback for invalid TOC\0" "An-Taste kurz dr\xC3" "\xBC" - "cken", - "Leseausrichtung", - "Seitliche Tasten (Lesen)", + "cken\0" + "Leseausrichtung\0" + "Seitliche Tasten (Lesen)\0" "Langes Dr\xC3" "\xBC" - "cken springt Kap.", - "Lese-Schriftfamilie", + "cken springt Kap.\0" + "Lese-Schriftfamilie\0" "Schriftgr\xC3" "\xB6" "\xC3" "\x9F" - "e", - "Lese-Zeilenabstand", + "e\0" + "Lese-Zeilenabstand\0" "Lese-Seitenr\xC3" "\xA4" - "nder", - "Lese-Absatzausrichtung", - "Silbentrennung", - "Standby nach", - "Show Hidden Files", - "Anti-Ghosting nach", - "KOReader-Synchr.", - "Nach Updates suchen", - "Sprache", - "Lese-Cache leeren", - "Benutzername", - "Passwort", - "Sync-Server-URL", - "Dateizuordnung", - "Authentifizieren", - "KOReader-Benutzername", - "KOReader-Passwort", - "Dateiname", + "nder\0" + "Lese-Absatzausrichtung\0" + "Silbentrennung\0" + "Standby nach\0" + "Versteckte Dateien anzeigen\0" + "Use Clock\0" + "Clock Settings\0" + "Uses more battery; clock may drift\0" + "Clock\0" + "Clock Format\0" + "Timezone\0" + "24h\0" + "12h\0" + "UTC (GMT/BST)\0" + "Central Europe (CET/CEST)\0" + "Eastern Europe (EET/EEST)\0" + "US Eastern (EST/EDT)\0" + "US Central (CST/CDT)\0" + "US Mountain (MST/MDT)\0" + "US Pacific (PST/PDT)\0" + "Australia Eastern (AEST/AEDT)\0" + "New Zealand (NZST/NZDT)\0" + "Russia (MSK)\0" + "South America (UTC-3)\0" + "Gulf (UTC+4)\0" + "India (UTC+5:30)\0" + "SE Asia (UTC+7)\0" + "China/SE Asia (UTC+8)\0" + "Japan/Korea (UTC+9)\0" + "Sync Time\0" + "Detect Timezone\0" + "Syncing clock...\0" + "Detecting timezone...\0" + "Time synced\0" + "Time sync failed\0" + "Drift: %s\0" + "Last sync: %s\0" + "Timezone detected\0" + "Timezone detect failed\0" + "DST: active\0" + "DST: inactive\0" + "DST: unknown\0" + "Anti-Ghosting nach\0" + "KOReader-Synchr.\0" + "Nach Updates suchen\0" + "Sprache\0" + "Lese-Cache leeren\0" + "Benutzername\0" + "Passwort\0" + "Sync-Server-URL\0" + "Dateizuordnung\0" + "Authentifizieren\0" + "KOReader-Benutzername\0" + "KOReader-Passwort\0" + "Dateiname\0" "Bin\xC3" "\xA4" - "rdatei", - "Zuerst anmelden", - "WLAN-Verbindung fehlgeschlagen", + "rdatei\0" + "Zuerst anmelden\0" + "WLAN-Verbindung fehlgeschlagen\0" "Authentifizieren\xE2" "\x80" "\xA6" - "", - "Erfolgreich authentifiziert!", - "KOReader-Auth", - "KOReader-Synchronisierung bereit", - "Authentifizierung fehlg.", - "Erledigt", - "Alle Buch-Caches werden geleert.", + "\0" + "Erfolgreich authentifiziert!\0" + "KOReader-Auth\0" + "KOReader-Synchronisierung bereit\0" + "Authentifizierung fehlg.\0" + "Registrieren\0" + "Registrierung...\0" + "Konto erfolgreich erstellt!\0" + "Registrierung fehlgeschlagen\0" + "Benutzername bereits vergeben\0" + "Erledigt\0" + "Alle Buch-Caches werden geleert.\0" "Lesefortschritt wird gel\xC3" "\xB6" - "scht!", + "scht!\0" "B\xC3" "\xBC" "cher m\xC3" "\xBC" "ssen beim \xC3" "\x96" - "ffnen", - "neu eingelesen werden.", + "ffnen\0" + "neu eingelesen werden.\0" "Cache leeren\xE2" "\x80" "\xA6" - "", - "Cache geleert", + "\0" + "Cache geleert\0" "Eintr\xC3" "\xA4" - "ge entfernt", - "fehlgeschlagen", - "Fehler beim Cache-Leeren", + "ge entfernt\0" + "fehlgeschlagen\0" + "Fehler beim Cache-Leeren\0" "Serielle Ausgabe pr\xC3" "\xBC" - "fen", - "Dunkel", - "Hell", - "Eigenes", - "Umschlag", - "Leer", - "Anpassen", - "Zuschnitt", - "Nie", - "Beim Lesen", - "Immer", - "Ignorieren", - "Standby", + "fen\0" + "Dunkel\0" + "Hell\0" + "Eigenes\0" + "Umschlag\0" + "Leer\0" + "Anpassen\0" + "Zuschnitt\0" + "Nie\0" + "Beim Lesen\0" + "Immer\0" + "Ignorieren\0" + "Standby\0" "Umbl\xC3" "\xA4" - "ttern", - "Hochformat", - "Querformat rechts", - "Invertiert", - "Querformat links", + "ttern\0" + "Hochformat\0" + "Querformat rechts\0" + "Invertiert\0" + "Querformat links\0" "Zur\xC3" "\xBC" - "ck/Weiter", + "ck/Weiter\0" "Weiter/Zur\xC3" "\xBC" - "ck", - "Bookerly", - "Noto Sans", - "Open Dyslexic", - "Klein", - "Mittel", + "ck\0" + "Bookerly\0" + "Noto Sans\0" + "Open Dyslexic\0" + "Klein\0" + "Mittel\0" "Gro\xC3" "\x9F" - "", + "\0" "Extragro\xC3" "\x9F" - "", - "Eng", - "Normal", - "Breit", - "Blocksatz", - "Links", - "Zentriert", - "Rechts", - "1 Min", - "5 Min", - "10 Min", - "15 Min", - "30 Min", - "1 Seite", - "5 Seiten", - "10 Seiten", - "15 Seiten", - "30 Seiten", - "Update", + "\0" + "Eng\0" + "Normal\0" + "Breit\0" + "Blocksatz\0" + "Links\0" + "Zentriert\0" + "Rechts\0" + "1 Min\0" + "5 Min\0" + "10 Min\0" + "15 Min\0" + "30 Min\0" + "1 Seite\0" + "5 Seiten\0" + "10 Seiten\0" + "15 Seiten\0" + "30 Seiten\0" + "Update\0" "Update suchen\xE2" "\x80" "\xA6" - "", + "\0" "Neues Update verf\xC3" "\xBC" - "gbar!", - "Aktuelle Version:", - "Neue Version:", + "gbar!\0" + "Aktuelle Version:\0" + "Neue Version:\0" "Aktualisiere\xE2" "\x80" "\xA6" - "", + "\0" "Kein Update verf\xC3" "\xBC" - "gbar", - "Updatefehler", - "Update fertig", + "gbar\0" + "Updatefehler\0" + "Update fertig\0" "An-Knopf lang dr\xC3" "\xBC" - "cken, um neuzustarten", + "cken, um neuzustarten\0" "Keine Eintr\xC3" "\xA4" - "ge", + "ge\0" "Herunterladen\xE2" "\x80" "\xA6" - "", - "Ladefehler", - "Fehler:", - "Unbenannt", - "Keine Server-URL konfiguriert", - "Feedfehler", + "\0" + "Ladefehler\0" + "Fehler:\0" + "Unbenannt\0" + "Keine Server-URL konfiguriert\0" + "Feedfehler\0" "Feed-Format ung\xC3" "\xBC" - "ltig", - "Netzwerk:", - "IP-Adresse:", - "Fehler: Allgemeiner Fehler", - "Fehler: Kein Netzwerk", + "ltig\0" + "Netzwerk:\0" + "IP-Adresse:\0" + "Fehler: Allgemeiner Fehler\0" + "Fehler: Kein Netzwerk\0" "Fehler: Zeit\xC3" "\xBC" - "berschreitung", - "SD-Karte", + "berschreitung\0" + "SD-Karte\0" "\xC2" "\xAB" " Zur\xC3" "\xBC" - "ck", + "ck\0" "\xC2" "\xAB" - " Verlassen", + " Verlassen\0" "\xC2" "\xAB" - " Start", - "Auswahl", + " Start\0" + "Auswahl\0" "Ausgew\xC3" "\xA4" - "hlt", + "hlt\0" "\xC3" "\x84" - "ndern", + "ndern\0" "Best\xC3" "\xA4" - "tigen", - "Abbrechen", - "Verbinden", + "tigen\0" + "Abbrechen\0" + "Verbinden\0" "\xC3" "\x96" - "ffnen", - "Herunterladen", - "Wiederh.", - "Ja", - "Nein", - "Zeigen", - "Ausblenden", - "An", - "Aus", - "Leer", - "Links", - "Rechts", - "Hoch", - "Runter", - "OK", - "Standby-Coverfilter", - "Kontrast", - "Statusleiste anpassen", - "Kapitel-Seitenanzahl", - "Buchfortschritt in %", - "Fortschrittsbalken", + "ffnen\0" + "Herunterladen\0" + "Wiederh.\0" + "Ja\0" + "Nein\0" + "Zeigen\0" + "Ausblenden\0" + "An\0" + "Aus\0" + "Leer\0" + "Links\0" + "Rechts\0" + "Hoch\0" + "Runter\0" + "OK\0" + "Standby-Coverfilter\0" + "Kontrast\0" + "Statusleiste anpassen\0" + "Kapitel-Seitenanzahl\0" + "Buchfortschritt in %\0" + "Fortschrittsbalken\0" "Balkenst\xC3" "\xA4" - "rke", + "rke\0" "D\xC3" "\xBC" - "nn", - "Mittel", - "Dick", - "Buch", - "Kapitel", - "Kapitel 21", - "Buchtitel", - "Vorschau", - "Titel", - "Batterie", - "System-Design", - "Klassisch", - "Lyra", - "Lyra Extended", - "Anti-Verblassen", - "Vordere Tasten belegen", - "OPDS-Browser", - "Umschlag + Eigenes", - "Zuletzt gelesen", + "nn\0" + "Mittel\0" + "Dick\0" + "Buch\0" + "Kapitel\0" + "Kapitel 21\0" + "Buchtitel\0" + "Vorschau\0" + "Titel\0" + "Batterie\0" + "System-Design\0" + "Klassisch\0" + "Lyra\0" + "Lyra Extended\0" + "Anti-Verblassen\0" + "Vordere Tasten belegen\0" + "OPDS-Browser\0" + "Umschlag + Eigenes\0" + "Seiten-Overlay\0" + "Zuletzt\0" + "Zuletzt gelesen\0" "Keine B\xC3" "\xBC" - "cher", + "cher\0" "Calibre-\xC3" "\x9C" - "bertragung (WLAN)", + "bertragung (WLAN)\0" "WLAN entfernen & Passwort l\xC3" "\xB6" - "schen?", - "Entfernen", + "schen?\0" + "Entfernen\0" "Calibre starten\xE2" "\x80" "\xA6" - "", - "Installation", - "Status", - "Leeren", - "Standard", + "\0" + "Installation\0" + "Status\0" + "Leeren\0" + "Standard\0" "Entsprechende Vordertaste dr\xC3" "\xBC" - "cken", - "Leer", - "Bereits zugeordnet", - "Seitentaste hoch: Standard", - "Seitentaste runter: Abbrechen", + "cken\0" + "Leer\0" + "Bereits zugeordnet\0" + "Seitentaste hoch: Standard\0" + "Seitentaste runter: Abbrechen\0" "Zur\xC3" "\xBC" - "ck (1. Taste)", + "ck (1. Taste)\0" "Best\xC3" "\xA4" - "tigen (2. Taste)", - "Links (3. Taste)", - "Rechts (4. Taste)", - "Gehe zu %", - "Zum Anfang", - "Fortschritt synchronisieren", - "Buch-Cache leeren", + "tigen (2. Taste)\0" + "Links (3. Taste)\0" + "Rechts (4. Taste)\0" + "Gehe zu %\0" + "Zum Anfang\0" + "Fortschritt synchronisieren\0" + "Buch-Cache leeren\0" "L\xC3" "\xB6" - "schen", - "Seite als QR anzeigen", - "Kapitel:", - " Seiten | ", - "Buch: ", + "schen\0" + "Entfernen\0" + "Seite als QR anzeigen\0" + "Kapitel:\0" + " Seiten | \0" + "Buch: \0" "Calibre: URL um /opds erg\xC3" "\xA4" - "nzen", - "links/rechts: 1% hoch/runter: 10%", + "nzen\0" + "links/rechts: 1% hoch/runter: 10%\0" "Zeit synchronisieren\xE2" "\x80" "\xA6" - "", + "\0" "Dokument-Hash berechnen\xE2" "\x80" "\xA6" - "", - "Dokument-Hash fehlgeschlagen", - "Externen Fortschritt abrufen...", + "\0" + "Dokument-Hash fehlgeschlagen\0" + "Externen Fortschritt abrufen...\0" + "Externe Position zuordnen...\0" + "Lokale Position berechnen...\0" "Fortschritt hochladen\xE2" "\x80" "\xA6" - "", - "Zugangsdaten fehlen", - "KOReader-Konto unter Einst. anlegen", - "Gefunden!", - "Extern:", - "Lokal:", - " Seite %d, %.2f%% insgesamt", - " Seite %d/%d, %.2f%% insgesamt", - " Von: %s", + "\0" + "Zugangsdaten fehlen\0" + "KOReader-Konto unter Einst. anlegen\0" + "Gefunden!\0" + "Extern:\0" + "Lokal:\0" + " Seite %d, %.2f%% insgesamt\0" + " Seite %d/%d, %.2f%% insgesamt\0" + " Von: %s\0" "Externen Fortschritt \xC3" "\xBC" - "bernehmen", - "Lokalen Fortschritt hochladen", - "Kein externer Fortschritt", - "Aktuelle Position hochladen?", - "Hochgeladen!", - "Fehlgeschlagen", - "Abschnitt", - "Hochladen", - "Buch-Stil", - "Eingebetteter Stil", - "OPDS-Server-URL", + "bernehmen\0" + "Lokalen Fortschritt hochladen\0" + "Kein externer Fortschritt\0" + "Aktuelle Position hochladen?\0" + "Hochgeladen!\0" + "Fehlgeschlagen\0" + "Abschnitt\0" + "Hochladen\0" + "Buch-Stil\0" + "Eingebetteter Stil\0" + "OPDS-Server-URL\0" "Fu\xC3" "\x9F" - "noten", + "noten\0" "Keine Fu\xC3" "\x9F" - "noten auf dieser Seite", - "[Link]", - "Screenshot aufnehmen", + "noten auf dieser Seite\0" + "[Link]\0" + "Screenshot aufnehmen\0" "Auto-Umbl\xC3" "\xA4" - "ttern aktiv: ", + "ttern aktiv: \0" "Auto-Umbl\xC3" "\xA4" - "ttern (Seiten/Min.)", - "Sleep Screen Info Overlay", - "White", - "Gray", - "Black", - "Off", - "Reading progress: Page %lu/%u - %.0f%%", - "Reading progress: Page %lu", - " - Page %d/%d - %.0f%% read", + "ttern (Seiten/Min.)\0" + "Info\0" + "Autor\0" + "Reihe\0" + "Gr\xC3" + "\xB6" + "\xC3" + "\x9F" + "e\0" + "Standby-Info-Overlay\0" + "White\0" + "Gray\0" + "Black\0" + "Off\0" + "Reading progress: Page %lu/%u - %.0f%%\0" + "Reading progress: Page %lu\0" + " - Page %d/%d - %.0f%% read\0" + "Systeminformationen\0" + "XTC-Datei konnte nicht geladen werden\0" + "EPUB-Datei konnte nicht geladen werden\0" + "FW-Version\0" + "Chip\0" + "CPU\0" + "MHz\0" + "Freier RAM\0" + "Min. frei\0" + "Max. Block\0" + "Flash belegt\0" + "Laufzeit\0" + "L\xC3" + "\xA4" + "dt\0" + "Daten werden gesammelt...\0" + "Lese...\0" +; +// clang-format on + +const uint16_t OFFSETS_DE[] = { + 0, 11, 19, 27, 35, 47, 61, 75, 87, 105, 120, 143, + 162, 176, 185, 197, 208, 223, 240, 252, 261, 270, 276, 291, + 310, 338, 348, 361, 372, 390, 406, 426, 445, 464, 482, 519, + 546, 565, 579, 612, 641, 654, 690, 707, 723, 760, 773, 789, + 812, 817, 827, 838, 879, 908, 942, 977, 985, 991, 1001, 1008, + 1021, 1039, 1061, 1075, 1092, 1099, 1111, 1123, 1137, 1169, 1192, 1208, + 1233, 1262, 1282, 1297, 1316, 1335, 1358, 1373, 1386, 1414, 1424, 1439, + 1474, 1480, 1493, 1502, 1506, 1510, 1524, 1550, 1576, 1597, 1618, 1640, + 1661, 1691, 1715, 1728, 1750, 1763, 1780, 1796, 1818, 1838, 1848, 1864, + 1881, 1903, 1915, 1932, 1942, 1956, 1974, 1997, 2009, 2023, 2036, 2055, + 2072, 2092, 2100, 2118, 2131, 2140, 2156, 2171, 2188, 2210, 2228, 2238, + 2250, 2266, 2297, 2317, 2346, 2360, 2393, 2418, 2431, 2448, 2476, 2505, + 2535, 2544, 2577, 2609, 2638, 2661, 2677, 2691, 2710, 2725, 2750, 2775, + 2782, 2787, 2795, 2804, 2809, 2818, 2828, 2832, 2843, 2849, 2860, 2868, + 2880, 2891, 2909, 2920, 2937, 2952, 2967, 2976, 2986, 3000, 3006, 3013, + 3019, 3030, 3034, 3041, 3047, 3057, 3063, 3073, 3080, 3086, 3092, 3099, + 3106, 3113, 3121, 3130, 3140, 3150, 3160, 3167, 3184, 3209, 3227, 3241, + 3257, 3280, 3293, 3307, 3347, 3363, 3380, 3391, 3399, 3409, 3439, 3450, + 3472, 3482, 3494, 3521, 3543, 3571, 3580, 3591, 3604, 3613, 3621, 3633, + 3641, 3653, 3663, 3673, 3681, 3695, 3704, 3707, 3712, 3719, 3730, 3733, + 3737, 3742, 3748, 3755, 3760, 3767, 3770, 3790, 3799, 3821, 3842, 3863, + 3882, 3896, 3902, 3909, 3914, 3919, 3927, 3938, 3948, 3957, 3963, 3972, + 3986, 3996, 4001, 4015, 4031, 4054, 4067, 4086, 4101, 4109, 4125, 4139, + 4167, 4203, 4213, 4232, 4245, 4252, 4259, 4268, 4303, 4308, 4327, 4354, + 4384, 4403, 4426, 4443, 4461, 4471, 4482, 4510, 4528, 4537, 4547, 4569, + 4578, 4591, 4598, 4630, 4664, 4688, 4715, 4744, 4776, 4805, 4834, 4859, + 4879, 4915, 4925, 4933, 4940, 4969, 5001, 5011, 5044, 5074, 5100, 5129, + 5142, 5157, 5167, 5177, 5187, 5206, 5222, 5232, 5265, 5272, 5293, 5318, + 5349, 5354, 5360, 5366, 5374, 5395, 5401, 5406, 5412, 5416, 5455, 5482, + 5510, 5530, 5568, 5607, 5618, 5623, 5627, 5631, 5642, 5652, 5663, 5676, + 5685, 5691, 5717, }; -const char* const STRINGS_CS[] = { - "CrossPoint", +// clang-format off +const char STRINGS_CS_DATA[] = + "CrossPoint\0" "SPU\xC5" "\xA0" "T\xC4" "\x9A" "N\xC3" "\x8D" - "", + "\0" "SP\xC3" "\x81" - "NEK", + "NEK\0" "Vstup do re\xC5" "\xBE" "imu sp\xC3" "\xA1" - "nku", + "nku\0" "Proch\xC3" "\xA1" - "zet soubory", + "zet soubory\0" "P\xC5" "\x99" "enos soubor\xC5" "\xAF" - "", + "\0" "Nastaven\xC3" "\xAD" - "", + "\0" "Pokra\xC4" "\x8D" "ovat ve \xC4" "\x8D" "ten\xC3" "\xAD" - "", + "\0" "\xC5" "\xBD" "\xC3" @@ -2885,7 +3354,7 @@ const char* const STRINGS_CS[] = { "\x99" "en\xC3" "\xA1" - " kniha", + " kniha\0" "Za\xC4" "\x8D" "n\xC4" @@ -2898,36 +3367,36 @@ const char* const STRINGS_CS[] = { "\xAD" "\xC5" "\xBE" - "e", + "e\0" "Nebyly nalezeny \xC5" "\xBE" "\xC3" "\xA1" "dn\xC3" "\xA9" - " soubory", - "Vybrat kapitolu", + " soubory\0" + "Vybrat kapitolu\0" "\xC5" "\xBD" "\xC3" "\xA1" "dn\xC3" "\xA9" - " kapitoly", - "Konec knihy", + " kapitoly\0" + "Konec knihy\0" "Pr\xC3" "\xA1" "zdn\xC3" "\xA1" - " kapitola", + " kapitola\0" "Indexov\xC3" "\xA1" "n\xC3" "\xAD" - "", + "\0" "Chyba pam\xC4" "\x9B" - "ti", + "ti\0" "Chyba na\xC4" "\x8D" "\xC3" @@ -2938,13 +3407,13 @@ const char* const STRINGS_CS[] = { "\xAD" " str\xC3" "\xA1" - "nky", + "nky\0" "Pr\xC3" "\xA1" "zdn\xC3" "\xBD" - " soubor", - "Mimo hranice", + " soubor\0" + "Mimo hranice\0" "Na\xC4" "\x8D" "\xC3" @@ -2953,7 +3422,7 @@ const char* const STRINGS_CS[] = { "\xA1" "n\xC3" "\xAD" - "...", + "...\0" "Na\xC4" "\x8D" "\xC3" @@ -2962,12 +3431,12 @@ const char* const STRINGS_CS[] = { "\xA1" "n\xC3" "\xAD" - "", + "\0" "WiFi s\xC3" "\xAD" "t\xC4" "\x9B" - "", + "\0" "\xC5" "\xBD" "\xC3" @@ -2978,39 +3447,39 @@ const char* const STRINGS_CS[] = { "\xAD" "t\xC4" "\x9B" - " nenalezeny", + " nenalezeny\0" "Nalezeno %zu s\xC3" "\xAD" "t\xC3" "\xAD" - "", + "\0" "Skenov\xC3" "\xA1" "n\xC3" "\xAD" - "...", + "...\0" "P\xC5" "\x99" "ipojov\xC3" "\xA1" "n\xC3" "\xAD" - "...", + "...\0" "P\xC5" "\x99" - "ipojeno!", + "ipojeno!\0" "P\xC5" "\x99" "ipojen\xC3" "\xAD" " se nezda\xC5" "\x99" - "ilo", + "ilo\0" "Zapomenout s\xC3" "\xAD" "\xC5" "\xA5" - "?", + "?\0" "Ulo\xC5" "\xBE" "it heslo pro p\xC5" @@ -3021,7 +3490,7 @@ const char* const STRINGS_CS[] = { "\xA1" "t\xC4" "\x9B" - "?", + "?\0" "Stiskn\xC4" "\x9B" "te OK pro p\xC5" @@ -3030,15 +3499,15 @@ const char* const STRINGS_CS[] = { "\xA1" "n\xC3" "\xAD" - "", + "\0" "P\xC5" "\x99" "ipojit se k s\xC3" "\xAD" - "ti", + "ti\0" "Vytvo\xC5" "\x99" - "it hotspot", + "it hotspot\0" "P\xC5" "\x99" "ipojit se k existuj\xC3" @@ -3047,7 +3516,7 @@ const char* const STRINGS_CS[] = { "\xAD" " s\xC3" "\xAD" - "ti WiFi", + "ti WiFi\0" "Vytvo\xC5" "\x99" "it s\xC3" @@ -3060,17 +3529,17 @@ const char* const STRINGS_CS[] = { "\x99" "ipojit ostatn\xC3" "\xAD" - "", + "\0" "Spou\xC5" "\xA1" "t\xC4" "\x9B" "n\xC3" "\xAD" - " hotspotu...", + " hotspotu...\0" "Re\xC5" "\xBE" - "im hotspotu", + "im hotspotu\0" "P\xC5" "\x99" "ipojte sv\xC3" @@ -3085,7 +3554,7 @@ const char* const STRINGS_CS[] = { "\xA9" "to s\xC3" "\xAD" - "ti WiFi", + "ti WiFi\0" "Otev\xC5" "\x99" "ete tuto URL ve sv\xC3" @@ -3096,40 +3565,40 @@ const char* const STRINGS_CS[] = { "\xBE" "e\xC4" "\x8D" - "i", - "nebo http://", + "i\0" + "nebo http://\0" "nebo naskenujte QR k\xC3" "\xB3" - "d telefonem:", - "Calibre Wireless", - "URL webu Calibre", + "d telefonem:\0" + "Calibre Wireless\0" + "URL webu Calibre\0" "* = \xC5" "\xA0" "ifrov\xC3" "\xA1" "no | + = Ulo\xC5" "\xBE" - "eno", - "MAC adresa:", - "Kontrola WiFi...", - "Zadejte heslo WiFi", - "pro", + "eno\0" + "MAC adresa:\0" + "Kontrola WiFi...\0" + "Zadejte heslo WiFi\0" + "pro\0" "P\xC5" "\x99" "\xC3" "\xAD" - "jem:", + "jem:\0" "P\xC5" "\x99" - "ijato:", - "1) Nainstalujte plugin CrossPoint Reader", + "ijato:\0" + "1) Nainstalujte plugin CrossPoint Reader\0" "2) Bu\xC4" "\x8F" "te ve stejn\xC3" "\xA9" " s\xC3" "\xAD" - "ti WiFi", + "ti WiFi\0" "3) V Calibre: \xE2" "\x80" "\x9E" @@ -3142,7 +3611,7 @@ const char* const STRINGS_CS[] = { "\xE2" "\x80" "\x9C" - "", + "\0" "\xE2" "\x80" "\x9E" @@ -3159,42 +3628,43 @@ const char* const STRINGS_CS[] = { "enou\xE2" "\x80" "\x9C" - "", - "Displej", + "\0" + "Displej\0" "\xC4" "\x8C" "te\xC4" "\x8D" - "ka", + "ka\0" "Ovl\xC3" "\xA1" "dac\xC3" "\xAD" - " prvky", + " prvky\0" "Syst\xC3" "\xA9" - "m", + "m\0" "Obrazovka sp\xC3" "\xA1" - "nku", + "nku\0" "Obrazovka sp\xC3" "\xA1" "nku Re\xC5" "\xBE" - "im krytu", + "im krytu\0" "Skr\xC3" "\xBD" - "t baterii %", - "Extra mezery mezi odstavci", + "t baterii %\0" + "Extra mezery mezi odstavci\0" "Vyhlazov\xC3" "\xA1" "n\xC3" "\xAD" - " textu", - "Images", - "Display", - "Placeholder", - "Suppress", + " textu\0" + "Images\0" + "Display\0" + "Placeholder\0" + "Suppress\0" + "Create fallback for invalid TOC\0" "Kr\xC3" "\xA1" "tk\xC3" @@ -3209,12 +3679,12 @@ const char* const STRINGS_CS[] = { "\xA1" "jen\xC3" "\xAD" - "", + "\0" "Orientace \xC4" "\x8D" "ten\xC3" "\xAD" - "", + "\0" "Rozvr\xC5" "\xBE" "en\xC3" @@ -3231,7 +3701,7 @@ const char* const STRINGS_CS[] = { "\x8D" "te\xC4" "\x8D" - "ka)", + "ka)\0" "Dlouh\xC3" "\xA9" " stisknut\xC3" @@ -3240,19 +3710,19 @@ const char* const STRINGS_CS[] = { "\x99" "esko\xC4" "\x8D" - "it kapitolu", + "it kapitolu\0" "Rodina p\xC3" "\xAD" "sem \xC4" "\x8D" "te\xC4" "\x8D" - "ky", + "ky\0" "Velikost p\xC3" "\xAD" "sma rozhran\xC3" "\xAD" - "", + "\0" "\xC5" "\x98" "\xC3" @@ -3265,12 +3735,12 @@ const char* const STRINGS_CS[] = { "\x8D" "te\xC4" "\x8D" - "ky", + "ky\0" "Okraj obrazovky \xC4" "\x8D" "te\xC4" "\x8D" - "ky", + "ky\0" "Zarovn\xC3" "\xA1" "n\xC3" @@ -3281,26 +3751,63 @@ const char* const STRINGS_CS[] = { "\x8D" "te\xC4" "\x8D" - "ky", + "ky\0" "D\xC4" "\x9B" "len\xC3" "\xAD" - " slov", + " slov\0" "\xC4" "\x8C" "as do usp\xC3" "\xA1" "n\xC3" "\xAD" - "", - "Show Hidden Files", + "\0" + "Show Hidden Files\0" + "Use Clock\0" + "Clock Settings\0" + "Uses more battery; clock may drift\0" + "Clock\0" + "Clock Format\0" + "Timezone\0" + "24h\0" + "12h\0" + "UTC (GMT/BST)\0" + "Central Europe (CET/CEST)\0" + "Eastern Europe (EET/EEST)\0" + "US Eastern (EST/EDT)\0" + "US Central (CST/CDT)\0" + "US Mountain (MST/MDT)\0" + "US Pacific (PST/PDT)\0" + "Australia Eastern (AEST/AEDT)\0" + "New Zealand (NZST/NZDT)\0" + "Russia (MSK)\0" + "South America (UTC-3)\0" + "Gulf (UTC+4)\0" + "India (UTC+5:30)\0" + "SE Asia (UTC+7)\0" + "China/SE Asia (UTC+8)\0" + "Japan/Korea (UTC+9)\0" + "Sync Time\0" + "Detect Timezone\0" + "Syncing clock...\0" + "Detecting timezone...\0" + "Time synced\0" + "Time sync failed\0" + "Drift: %s\0" + "Last sync: %s\0" + "Timezone detected\0" + "Timezone detect failed\0" + "DST: active\0" + "DST: inactive\0" + "DST: unknown\0" "Frekvence obnoven\xC3" "\xAD" - "", - "KOReaderu Sync", - "Zkontrolovat aktualizace", - "Jazyk", + "\0" + "KOReaderu Sync\0" + "Zkontrolovat aktualizace\0" + "Jazyk\0" "Vymazat mezipam\xC4" "\x9B" "\xC5" @@ -3309,16 +3816,16 @@ const char* const STRINGS_CS[] = { "\x8D" "ten\xC3" "\xAD" - "", + "\0" "U\xC5" "\xBE" "ivatelsk\xC3" "\xA9" " jm\xC3" "\xA9" - "no", - "Heslo", - "URL synch. serveru", + "no\0" + "Heslo\0" + "URL synch. serveru\0" "P\xC3" "\xA1" "rov\xC3" @@ -3327,28 +3834,28 @@ const char* const STRINGS_CS[] = { "\xAD" " dokument\xC5" "\xAF" - "", + "\0" "Ov\xC4" "\x9B" "\xC5" "\x99" "en\xC3" "\xAD" - "", + "\0" "U\xC5" "\xBE" "iv. jm\xC3" "\xA9" - "no KOReaderu", - "Heslo KOReaderu", + "no KOReaderu\0" + "Heslo KOReaderu\0" "N\xC3" "\xA1" - "zev souboru", + "zev souboru\0" "Bin\xC3" "\xA1" "rn\xC3" "\xAD" - "", + "\0" "Nastavte p\xC5" "\x99" "ihla\xC5" @@ -3357,12 +3864,12 @@ const char* const STRINGS_CS[] = { "\xAD" " \xC3" "\xBA" - "daje", + "daje\0" "P\xC5" "\x99" "ipojen\xC3" "\xAD" - " k WiFi selhalo", + " k WiFi selhalo\0" "Ov\xC4" "\x9B" "\xC5" @@ -3371,7 +3878,7 @@ const char* const STRINGS_CS[] = { "\xA1" "n\xC3" "\xAD" - "...", + "...\0" "\xC3" "\x9A" "sp\xC4" @@ -3386,29 +3893,34 @@ const char* const STRINGS_CS[] = { "\x99" "en\xC3" "\xAD" - "!", + "!\0" "Ov\xC4" "\x9B" "\xC5" "\x99" "en\xC3" "\xAD" - " KOReaderu", + " KOReaderu\0" "Synchronizace KOReaderu je p\xC5" "\x99" "ipravena k pou\xC5" "\xBE" "it\xC3" "\xAD" - "", + "\0" "Ov\xC4" "\x9B" "\xC5" "\x99" "en\xC3" "\xAD" - " selhalo", - "Hotovo", + " selhalo\0" + "Register\0" + "Registering...\0" + "Account created successfully!\0" + "Registration failed\0" + "Username already taken\0" + "Hotovo\0" "T\xC3" "\xAD" "mto vyma\xC5" @@ -3417,7 +3929,7 @@ const char* const STRINGS_CS[] = { "\xA1" "echna data knih v mezipam\xC4" "\x9B" - "ti.", + "ti.\0" "Ve\xC5" "\xA1" "ker\xC3" @@ -3430,10 +3942,10 @@ const char* const STRINGS_CS[] = { "\x8D" "ten\xC3" "\xAD" - " bude ztracen!", + " bude ztracen!\0" "Knihy bude nutn\xC3" "\xA9" - " znovu indexovat", + " znovu indexovat\0" "p\xC5" "\x99" "i op\xC4" @@ -3444,27 +3956,27 @@ const char* const STRINGS_CS[] = { "\x99" "en\xC3" "\xAD" - ".", + ".\0" "Maz\xC3" "\xA1" "n\xC3" "\xAD" " mezipam\xC4" "\x9B" - "ti...", + "ti...\0" "Mezipam\xC4" "\x9B" "\xC5" "\xA5" " vymaz\xC3" "\xA1" - "na", + "na\0" "polo\xC5" "\xBE" "ky odstran\xC4" "\x9B" - "ny", - "selhalo", + "ny\0" + "selhalo\0" "Vymaz\xC3" "\xA1" "n\xC3" @@ -3473,58 +3985,58 @@ const char* const STRINGS_CS[] = { "\x9B" "ti se nezda\xC5" "\x99" - "ilo", + "ilo\0" "Podrobnosti naleznete v s\xC3" "\xA9" "riov\xC3" "\xA9" "m v\xC3" "\xBD" - "stupu", + "stupu\0" "Tmav\xC3" "\xBD" - "", + "\0" "Sv\xC4" "\x9B" "tl\xC3" "\xBD" - "", + "\0" "Vlastn\xC3" "\xAD" - "", + "\0" "Ob\xC3" "\xA1" - "lka", + "lka\0" "\xC5" "\xBD" "\xC3" "\xA1" "dn\xC3" "\xBD" - "", + "\0" "P\xC5" "\x99" "izp\xC5" "\xAF" - "sobit", + "sobit\0" "O\xC5" "\x99" "\xC3" "\xAD" - "znout", - "Nikdy", + "znout\0" + "Nikdy\0" "Ve \xC4" "\x8D" "te\xC4" "\x8D" - "ce", + "ce\0" "V\xC5" "\xBE" - "dy", - "Ignorovat", + "dy\0" + "Ignorovat\0" "Sp\xC3" "\xA1" - "nek", + "nek\0" "Ot\xC3" "\xA1" "\xC4" @@ -3533,12 +4045,12 @@ const char* const STRINGS_CS[] = { "\xAD" " str\xC3" "\xA1" - "nek", + "nek\0" "Na v\xC3" "\xBD" "\xC5" "\xA1" - "ku", + "ku\0" "Na \xC5" "\xA1" "\xC3" @@ -3551,10 +4063,10 @@ const char* const STRINGS_CS[] = { "\x8D" "i\xC4" "\x8D" - "ek", + "ek\0" "Invertovan\xC3" "\xBD" - "", + "\0" "Na \xC5" "\xA1" "\xC3" @@ -3567,7 +4079,7 @@ const char* const STRINGS_CS[] = { "\x8D" "i\xC4" "\x8D" - "ek", + "ek\0" "P\xC5" "\x99" "edchoz\xC3" @@ -3576,7 +4088,7 @@ const char* const STRINGS_CS[] = { "\xA1" "\xC3" "\xAD" - "", + "\0" "Dal\xC5" "\xA1" "\xC3" @@ -3585,97 +4097,97 @@ const char* const STRINGS_CS[] = { "\x99" "edchoz\xC3" "\xAD" - "", - "Bookerly", - "Noto Sans", - "Open Dyslexic", + "\0" + "Bookerly\0" + "Noto Sans\0" + "Open Dyslexic\0" "Mal\xC3" "\xBD" - "", + "\0" "St\xC5" "\x99" "edn\xC3" "\xAD" - "", + "\0" "Velk\xC3" "\xBD" - "", + "\0" "Ob\xC5" "\x99" "\xC3" "\xAD" - "", + "\0" "T\xC4" "\x9B" "sn\xC3" "\xBD" - "", + "\0" "Norm\xC3" "\xA1" "ln\xC3" "\xAD" - "", + "\0" "\xC5" "\xA0" "irok\xC3" "\xBD" - "", - "Zarovnat do bloku", - "Vlevo", + "\0" + "Zarovnat do bloku\0" + "Vlevo\0" "Na st\xC5" "\x99" - "ed", - "Vpravo", - "1 min", - "5 min", - "10 min", - "15 min", - "30 min", + "ed\0" + "Vpravo\0" + "1 min\0" + "5 min\0" + "10 min\0" + "15 min\0" + "30 min\0" "1 str\xC3" "\xA1" - "nka", + "nka\0" "5 str\xC3" "\xA1" - "nek", + "nek\0" "10 str\xC3" "\xA1" - "nek", + "nek\0" "15 str\xC3" "\xA1" - "nek", + "nek\0" "30 str\xC3" "\xA1" - "nek", - "Aktualizace", + "nek\0" + "Aktualizace\0" "Kontrola aktualizac\xC3" "\xAD" "\xE2" "\x80" "\xA6" - "", + "\0" "Nov\xC3" "\xA1" - " aktualizace k dispozici!", + " aktualizace k dispozici!\0" "Aktu\xC3" "\xA1" "ln\xC3" "\xAD" - " verze:", + " verze:\0" "Nov\xC3" "\xA1" - " verze:", - "Aktualizace...", + " verze:\0" + "Aktualizace...\0" "\xC5" "\xBD" "\xC3" "\xA1" "dn\xC3" "\xA1" - " aktualizace k dispozici", - "Aktualizace selhala", + " aktualizace k dispozici\0" + "Aktualizace selhala\0" "Aktualizace dokon\xC4" "\x8D" - "ena", + "ena\0" "Stiskn\xC4" "\x9B" "te a podr\xC5" @@ -3694,7 +4206,7 @@ const char* const STRINGS_CS[] = { "\xA9" " zapnut\xC3" "\xAD" - "", + "\0" "\xC5" "\xBD" "\xC3" @@ -3703,26 +4215,26 @@ const char* const STRINGS_CS[] = { "\xA9" " polo\xC5" "\xBE" - "ky nenalezeny", + "ky nenalezeny\0" "Stahov\xC3" "\xA1" "n\xC3" "\xAD" - "...", + "...\0" "Stahov\xC3" "\xA1" "n\xC3" "\xAD" - " selhalo", - "Chyba:", + " selhalo\0" + "Chyba:\0" "Nepojmenovan\xC3" "\xA9" - "", + "\0" "Nen\xC3" "\xAD" " nakonfigurov\xC3" "\xA1" - "na adresa URL serveru", + "na adresa URL serveru\0" "Na\xC4" "\x8D" "ten\xC3" @@ -3731,7 +4243,7 @@ const char* const STRINGS_CS[] = { "\xA1" "lu se nezda\xC5" "\x99" - "ilo", + "ilo\0" "Analyzov\xC3" "\xA1" "n\xC3" @@ -3740,21 +4252,21 @@ const char* const STRINGS_CS[] = { "\xA1" "lu se nezda\xC5" "\x99" - "ilo", + "ilo\0" "S\xC3" "\xAD" "\xC5" "\xA5" - ":", - "IP adresa:", + ":\0" + "IP adresa:\0" "Chyba: Obecn\xC3" "\xA1" - " chyba", + " chyba\0" "Chyba: S\xC3" "\xAD" "\xC5" "\xA5" - " nenalezena", + " nenalezena\0" "Chyba: \xC4" "\x8C" "asov\xC3" @@ -3763,88 +4275,88 @@ const char* const STRINGS_CS[] = { "\x99" "ipojen\xC3" "\xAD" - "", - "SD karta", + "\0" + "SD karta\0" "\xC2" "\xAB" " Zp\xC4" "\x9B" - "t", + "t\0" "\xC2" "\xAB" - " Konec", + " Konec\0" "\xC2" "\xAB" " Dom\xC5" "\xAF" - "", - "Vybrat", - "Selected", + "\0" + "Vybrat\0" + "Selected\0" "P\xC5" "\x99" - "epnout", - "Potvrdit", + "epnout\0" + "Potvrdit\0" "Zru\xC5" "\xA1" - "it", + "it\0" "P\xC5" "\x99" - "ipojit", + "ipojit\0" "Otev\xC5" "\x99" "\xC3" "\xAD" - "t", + "t\0" "St\xC3" "\xA1" - "hnout", - "Zkusit znovu", - "Ano", - "Ne", - "Show", - "Hide", - "ZAP", - "VYP", - "Nenastaveno", - "Vlevo", - "Vpravo", - "Nahoru", + "hnout\0" + "Zkusit znovu\0" + "Ano\0" + "Ne\0" + "Show\0" + "Hide\0" + "ZAP\0" + "VYP\0" + "Nenastaveno\0" + "Vlevo\0" + "Vpravo\0" + "Nahoru\0" "Dol\xC5" "\xAF" - "", - "OK", + "\0" + "OK\0" "Filtr obrazovky sp\xC3" "\xA1" - "nku", - "Kontrast", - "Customise Status Bar", - "Chapter Page Count", - "Book Progress Percentage", - "Progress Bar", - "Progress Bar Thickness", - "Thin", - "Medium", - "Thick", - "Book", - "Chapter", - "Chapter 21", - "Book Title", - "Preview", - "Title", - "Battery", + "nku\0" + "Kontrast\0" + "Customise Status Bar\0" + "Chapter Page Count\0" + "Book Progress Percentage\0" + "Progress Bar\0" + "Progress Bar Thickness\0" + "Thin\0" + "Medium\0" + "Thick\0" + "Book\0" + "Chapter\0" + "Chapter 21\0" + "Book Title\0" + "Preview\0" + "Title\0" + "Battery\0" "\xC5" "\xA0" "ablona rozhran\xC3" "\xAD" - "", + "\0" "Klasick\xC3" "\xA1" - "", - "Lyra", - "Lyra Extended", + "\0" + "Lyra\0" + "Lyra Extended\0" "Oprava blednut\xC3" "\xAD" - " na slunci", + " na slunci\0" "P\xC5" "\x99" "emapovat p\xC5" @@ -3855,24 +4367,26 @@ const char* const STRINGS_CS[] = { "\x8D" "\xC3" "\xAD" - "tka", + "tka\0" "Prohl\xC3" "\xAD" "\xC5" "\xBE" "e\xC4" "\x8D" - " OPDS", + " OPDS\0" "Ob\xC3" "\xA1" "lka + Vlastn\xC3" "\xAD" - "", + "\0" + "Page overlay\0" + "Recents\0" "Ned\xC3" "\xA1" "vn\xC3" "\xA9" - " knihy", + " knihy\0" "\xC5" "\xBD" "\xC3" @@ -3883,7 +4397,7 @@ const char* const STRINGS_CS[] = { "\xA1" "vn\xC3" "\xA9" - " knihy", + " knihy\0" "Pou\xC5" "\xBE" "\xC3" @@ -3900,7 +4414,7 @@ const char* const STRINGS_CS[] = { "\xAD" "zen\xC3" "\xAD" - " Calibre", + " Calibre\0" "Zapomenout s\xC3" "\xAD" "\xC5" @@ -3909,25 +4423,25 @@ const char* const STRINGS_CS[] = { "\xBE" "en\xC3" "\xA9" - " heslo?", - "Zapomenout", + " heslo?\0" + "Zapomenout\0" "Spu\xC5" "\xA1" "t\xC4" "\x9B" "n\xC3" "\xAD" - " Calibre...", + " Calibre...\0" "Nastaven\xC3" "\xAD" - "", - "Stav", - "Vymazat", + "\0" + "Stav\0" + "Vymazat\0" "V\xC3" "\xBD" "choz\xC3" "\xAD" - "", + "\0" "Stiskn\xC4" "\x9B" "te p\xC5" @@ -3940,19 +4454,19 @@ const char* const STRINGS_CS[] = { "\xAD" "tko pro ka\xC5" "\xBE" - "dou roli", + "dou roli\0" "Nep\xC5" "\x99" "i\xC5" "\x99" - "azeno", + "azeno\0" "Ji\xC5" "\xBE" " p\xC5" "\x99" "i\xC5" "\x99" - "azeno", + "azeno\0" "Bo\xC4" "\x8D" "n\xC3" @@ -3969,7 +4483,7 @@ const char* const STRINGS_CS[] = { "\xBE" "en\xC3" "\xAD" - "", + "\0" "Bo\xC4" "\x8D" "n\xC3" @@ -3988,79 +4502,80 @@ const char* const STRINGS_CS[] = { "\xA1" "n\xC3" "\xAD" - "", + "\0" "Zp\xC4" "\x9B" "t (1. tla\xC4" "\x8D" "\xC3" "\xAD" - "tko)", + "tko)\0" "Potvrdit (2. tla\xC4" "\x8D" "\xC3" "\xAD" - "tko)", + "tko)\0" "Vlevo (3. tla\xC4" "\x8D" "\xC3" "\xAD" - "tko)", + "tko)\0" "Vpravo (4. tla\xC4" "\x8D" "\xC3" "\xAD" - "tko)", + "tko)\0" "P\xC5" "\x99" "ej\xC3" "\xAD" - "t na %", + "t na %\0" "P\xC5" "\x99" "ej\xC3" "\xAD" "t Dom\xC5" "\xAF" - "", + "\0" "Pr\xC5" "\xAF" "b\xC4" "\x9B" - "h synchronizace", + "h synchronizace\0" "Smazat mezipam\xC4" "\x9B" "\xC5" "\xA5" - " knihy", - "Smazat", - "Show page as QR", - "Kapitola:", + " knihy\0" + "Smazat\0" + "Remove\0" + "Show page as QR\0" + "Kapitola:\0" "str\xC3" "\xA1" - "nek |", - "Kniha:", + "nek |\0" + "Kniha:\0" "Pro Calibre p\xC5" "\x99" - "idejte /opds do URL adresy", + "idejte /opds do URL adresy\0" "Vlevo/Vpravo: 1 % Nahoru/Dol\xC5" "\xAF" - ": 10 %", + ": 10 %\0" "\xC4" "\x8C" - "as synchronizace...", + "as synchronizace...\0" "V\xC3" "\xBD" "po\xC4" "\x8D" - "et hashe dokumentu...", + "et hashe dokumentu...\0" "Nepoda\xC5" "\x99" "ilo se vypo\xC4" "\x8D" "\xC3" "\xAD" - "tat hash dokumentu", + "tat hash dokumentu\0" "Na\xC4" "\x8D" "\xC3" @@ -4077,7 +4592,9 @@ const char* const STRINGS_CS[] = { "\xAF" "b\xC4" "\x9B" - "hu...", + "hu...\0" + "Mapping remote position...\0" + "Calculating local position...\0" "Pr\xC5" "\xAF" "b\xC4" @@ -4088,7 +4605,7 @@ const char* const STRINGS_CS[] = { "\xA1" "n\xC3" "\xAD" - "...", + "...\0" "P\xC5" "\x99" "ihla\xC5" @@ -4099,40 +4616,40 @@ const char* const STRINGS_CS[] = { "\xBA" "daje nejsou nakonfigurov\xC3" "\xA1" - "ny", + "ny\0" "Nastavit \xC3" "\xBA" "\xC4" "\x8D" "et KOReader v Nastaven\xC3" "\xAD" - "", + "\0" "Nalezen pr\xC5" "\xAF" "b\xC4" "\x9B" - "h!", + "h!\0" "Vzd\xC3" "\xA1" "len\xC3" "\xA9" - ":", + ":\0" "Lok\xC3" "\xA1" "ln\xC3" "\xAD" - ":", + ":\0" "Str\xC3" "\xA1" "nka %d, celkov\xC4" "\x9B" - " %.2f%%", + " %.2f%%\0" "Str\xC3" "\xA1" "nka %d/%d, celkov\xC4" "\x9B" - " %.2f%%", - " Od: %s", + " %.2f%%\0" + " Od: %s\0" "Pou\xC5" "\xBE" "\xC3" @@ -4141,14 +4658,14 @@ const char* const STRINGS_CS[] = { "\xA1" "len\xC3" "\xBD" - " postup", + " postup\0" "Nahr\xC3" "\xA1" "t lok\xC3" "\xA1" "ln\xC3" "\xAD" - " postup", + " postup\0" "Nenalezen \xC5" "\xBE" "\xC3" @@ -4159,622 +4676,786 @@ const char* const STRINGS_CS[] = { "\xA1" "len\xC3" "\xBD" - " postup", + " postup\0" "Nahr\xC3" "\xA1" "t aktu\xC3" "\xA1" "ln\xC3" "\xAD" - " pozici?", + " pozici?\0" "Postup nahr\xC3" "\xA1" - "n!", + "n!\0" "Synchronizace se nezda\xC5" "\x99" - "ila", - "Sekce", + "ila\0" + "Sekce\0" "Nahr\xC3" "\xA1" - "t", - "Styl knihy", + "t\0" + "Styl knihy\0" "Vlo\xC5" "\xBE" "en\xC3" "\xBD" - " styl", - "URL serveru OPDS", - "Footnotes", - "No footnotes on this page", - "[link]", + " styl\0" + "URL serveru OPDS\0" + "Footnotes\0" + "No footnotes on this page\0" + "[link]\0" "Ud\xC4" "\x9B" "lat sn\xC3" "\xAD" - "mek obrazovky", - "Auto Turn Enabled: ", - "Auto Turn (Pages Per Minute)", - "Sleep Screen Info Overlay", - "White", - "Gray", - "Black", - "Off", - "Reading progress: Page %lu/%u - %.0f%%", - "Reading progress: Page %lu", - " - Page %d/%d - %.0f%% read", + "mek obrazovky\0" + "Auto Turn Enabled: \0" + "Auto Turn (Pages Per Minute)\0" + "Info\0" + "Author\0" + "Series\0" + "Size\0" + "Sleep Screen Info Overlay\0" + "White\0" + "Gray\0" + "Black\0" + "Off\0" + "Reading progress: Page %lu/%u - %.0f%%\0" + "Reading progress: Page %lu\0" + " - Page %d/%d - %.0f%% read\0" + "System Information\0" + "Failed to load XTC file\0" + "Failed to load EPUB file\0" + "FW version\0" + "Chip\0" + "CPU\0" + "MHz\0" + "Free RAM\0" + "Min free\0" + "Max block\0" + "Flash used\0" + "Uptime\0" + "Charging\0" + "Gathering data...\0" + "Reading...\0" +; +// clang-format on + +const uint16_t OFFSETS_CS[] = { + 0, 11, 23, 31, 56, 75, 92, 103, 126, 152, 176, 209, + 225, 243, 255, 274, 287, 301, 329, 346, 359, 375, 388, 400, + 427, 447, 462, 480, 492, 518, 536, 566, 600, 621, 639, 678, + 738, 763, 779, 825, 867, 880, 915, 932, 949, 980, 992, 1009, + 1028, 1032, 1042, 1052, 1093, 1125, 1168, 1227, 1235, 1244, 1261, 1269, + 1287, 1318, 1335, 1362, 1382, 1389, 1397, 1409, 1418, 1450, 1492, 1510, + 1554, 1594, 1617, 1643, 1666, 1691, 1722, 1736, 1753, 1771, 1781, 1796, + 1831, 1837, 1850, 1859, 1863, 1867, 1881, 1907, 1933, 1954, 1975, 1997, + 2018, 2048, 2072, 2085, 2107, 2120, 2137, 2153, 2175, 2195, 2205, 2221, + 2238, 2260, 2272, 2289, 2299, 2313, 2331, 2354, 2366, 2380, 2393, 2413, + 2428, 2453, 2459, 2487, 2508, 2514, 2533, 2556, 2567, 2591, 2607, 2622, + 2632, 2664, 2691, 2708, 2732, 2753, 2804, 2823, 2832, 2847, 2877, 2897, + 2920, 2927, 2978, 3019, 3053, 3082, 3106, 3128, 3149, 3157, 3194, 3238, + 3245, 3254, 3263, 3271, 3280, 3294, 3305, 3311, 3323, 3329, 3339, 3347, + 3367, 3378, 3415, 3428, 3468, 3488, 3508, 3517, 3527, 3541, 3547, 3557, + 3564, 3571, 3579, 3590, 3599, 3617, 3623, 3633, 3640, 3646, 3652, 3659, + 3666, 3673, 3684, 3695, 3707, 3719, 3731, 3743, 3768, 3799, 3817, 3830, + 3845, 3878, 3898, 3921, 3989, 4018, 4033, 4053, 4060, 4075, 4117, 4149, + 4185, 4192, 4203, 4224, 4248, 4282, 4291, 4300, 4309, 4318, 4325, 4334, + 4344, 4353, 4361, 4371, 4381, 4391, 4404, 4408, 4411, 4416, 4421, 4425, + 4429, 4441, 4447, 4454, 4461, 4467, 4470, 4494, 4503, 4524, 4543, 4568, + 4581, 4604, 4609, 4616, 4622, 4627, 4635, 4646, 4657, 4665, 4671, 4679, + 4698, 4708, 4713, 4727, 4754, 4786, 4804, 4823, 4836, 4844, 4860, 4885, + 4940, 4986, 4997, 5020, 5031, 5036, 5044, 5054, 5102, 5116, 5133, 5190, + 5239, 5261, 5286, 5308, 5331, 5345, 5360, 5383, 5408, 5415, 5422, 5438, + 5448, 5459, 5466, 5508, 5545, 5567, 5596, 5638, 5677, 5704, 5734, 5759, + 5806, 5844, 5862, 5874, 5885, 5914, 5946, 5955, 5982, 6007, 6044, 6071, + 6087, 6115, 6121, 6129, 6140, 6155, 6172, 6182, 6208, 6215, 6241, 6261, + 6290, 6295, 6302, 6309, 6314, 6340, 6346, 6351, 6357, 6361, 6400, 6427, + 6455, 6474, 6498, 6523, 6534, 6539, 6543, 6547, 6556, 6565, 6575, 6586, + 6593, 6602, 6620, }; -const char* const STRINGS_PO[] = { - "CrossPoint", - "INICIANDO", - "EM REPOUSO", - "Entrando em repouso", - "Arquivos", +// clang-format off +const char STRINGS_PO_DATA[] = + "CrossPoint\0" + "INICIANDO\0" + "EM REPOUSO\0" + "Entrando em repouso\0" + "Arquivos\0" "Transfer\xC3" "\xAA" - "ncia", + "ncia\0" "Configura\xC3" "\xA7" "\xC3" "\xB5" - "es", - "Continuar lendo", - "Nenhum livro aberto", - "Comece a ler abaixo", - "Nenhum arquivo encontrado", + "es\0" + "Continuar lendo\0" + "Nenhum livro aberto\0" + "Comece a ler abaixo\0" + "Nenhum arquivo encontrado\0" "Escolher cap\xC3" "\xAD" - "tulo", + "tulo\0" "Sem cap\xC3" "\xAD" - "tulos", - "Fim do livro", + "tulos\0" + "Fim do livro\0" "Cap\xC3" "\xAD" - "tulo vazio", - "Indexando", + "tulo vazio\0" + "Indexando\0" "Erro de mem\xC3" "\xB3" - "ria", - "Erro p\xC3" + "ria\0" + "Erro ao carregar a p\xC3" "\xA1" - "gina", - "Arquivo vazio", - "Fora dos limites", - "Carregando...", - "Carregando", + "gina\0" + "Arquivo vazio\0" + "Fora dos limites\0" + "Carregando...\0" + "Carregando\0" "Redes Wi\xE2" "\x80" "\x91" - "Fi", - "Sem redes", - "%zu redes encontradas", - "Procurando...", - "Conectando...", - "Conectado!", + "Fi\0" + "Sem redes\0" + "%zu redes encontradas\0" + "Procurando...\0" + "Conectando...\0" + "Conectado!\0" "Falha na conex\xC3" "\xA3" - "o", - "Esquecer rede?", - "Salvar senha a pr\xC3" + "o\0" + "Esquecer a rede?\0" + "Salvar a senha para a pr\xC3" "\xB3" - "xima vez?", - "Pressione OK procurar novamente", - "Entrar em uma rede", - "Criar hotspot", + "xima vez?\0" + "Pressione OK para procurar novamente\0" + "Entrar em uma rede\0" + "Criar hotspot\0" "Conecte-se a uma rede Wi\xE2" "\x80" "\x91" - "Fi existente", + "Fi existente\0" "Crie uma rede Wi\xE2" "\x80" "\x91" - "Fi outras pessoas entrarem", - "Iniciando hotspot...", - "Modo hotspot", + "Fi \xC3" + "\xA0" + " qual outras pessoas possam se conectar\0" + "Iniciando hotspot...\0" + "Modo hotspot\0" "Conecte seu dispositivo a esta rede Wi\xE2" "\x80" "\x91" - "Fi", - "Abra este URL seu navegador", - "ou http://", - "ou escaneie o QR code com seu celular:", - "Calibre sem fio", - "URL do Calibre Web", - "* = Criptografada | + = Salva", + "Fi\0" + "Abra este URL no seu navegador\0" + "ou http://\0" + "ou escaneie o QR code com seu celular:\0" + "Calibre sem fio\0" + "URL do Calibre Web\0" + "* = Criptografada | + = Salva\0" "Endere\xC3" "\xA7" - "o MAC:", + "o MAC:\0" "Verificando Wi\xE2" "\x80" "\x91" - "Fi...", + "Fi...\0" "Digite a senha Wi\xE2" "\x80" "\x91" - "Fi", - "para", - "Recebendo:", - "Recebido:", - "1) Instale o plugin CrossPoint Reader", - "2) Esteja mesma rede Wi\xE2" + "Fi\0" + "para\0" + "Recebendo:\0" + "Recebido:\0" + "1) Instale o plugin CrossPoint Reader\0" + "2) Esteja na mesma rede Wi\xE2" "\x80" "\x91" - "Fi", - "3) No Calibre: \"Enviar o dispositivo\"", - "\"Mantenha esta tela aberta durante o envio\"", - "Tela", - "Leitor", - "Controles", - "Sistema", - "Tela de repouso", - "Modo capa tela repouso", - "Ocultar % da bateria", + "Fi\0" + "3) No Calibre: \"Enviar para o dispositivo\"\0" + "\"Mantenha esta tela aberta durante o envio\"\0" + "Tela\0" + "Leitor\0" + "Controles\0" + "Sistema\0" + "Tela de repouso\0" + "Modo de capa da tela de repouso\0" + "Ocultar % da bateria\0" "Espa\xC3" "\xA7" - "o de par\xC3" + "amento extra entre par\xC3" "\xA1" - "grafos extra", + "grafos\0" "Suaviza\xC3" "\xA7" "\xC3" "\xA3" - "o de texto", - "Images", - "Display", - "Placeholder", - "Suppress", - "Clique curto bot\xC3" + "o de texto\0" + "Images\0" + "Display\0" + "Placeholder\0" + "Suppress\0" + "Create fallback for invalid TOC\0" + "Clique curto no bot\xC3" "\xA3" - "o ligar", + "o de ligar\0" "Orienta\xC3" "\xA7" "\xC3" "\xA3" - "o de leitura", + "o de leitura\0" "Disposi\xC3" "\xA7" "\xC3" "\xA3" - "o bot\xC3" + "o dos bot\xC3" "\xB5" - "es laterais", + "es laterais\0" "Pular cap\xC3" "\xAD" "tulo com press\xC3" "\xA3" - "o longa", - "Fonte do leitor", - "Tam. fonte UI", + "o longa\0" + "Fonte do leitor\0" + "Tam. da fonte da UI\0" "Espa\xC3" "\xA7" - "amento entre linhas", - "Margens da tela", - "Alinhamento par\xC3" + "amento entre linhas\0" + "Margens da tela\0" + "Alinhamento do par\xC3" "\xA1" - "grafo", + "grafo\0" "Hifeniza\xC3" "\xA7" "\xC3" "\xA3" - "o", - "Tempo para repousar", - "Show Hidden Files", + "o\0" + "Tempo para entrar em repouso\0" + "Show Hidden Files\0" + "Use Clock\0" + "Clock Settings\0" + "Uses more battery; clock may drift\0" + "Clock\0" + "Clock Format\0" + "Timezone\0" + "24h\0" + "12h\0" + "UTC (GMT/BST)\0" + "Central Europe (CET/CEST)\0" + "Eastern Europe (EET/EEST)\0" + "US Eastern (EST/EDT)\0" + "US Central (CST/CDT)\0" + "US Mountain (MST/MDT)\0" + "US Pacific (PST/PDT)\0" + "Australia Eastern (AEST/AEDT)\0" + "New Zealand (NZST/NZDT)\0" + "Russia (MSK)\0" + "South America (UTC-3)\0" + "Gulf (UTC+4)\0" + "India (UTC+5:30)\0" + "SE Asia (UTC+7)\0" + "China/SE Asia (UTC+8)\0" + "Japan/Korea (UTC+9)\0" + "Sync Time\0" + "Detect Timezone\0" + "Syncing clock...\0" + "Detecting timezone...\0" + "Time synced\0" + "Time sync failed\0" + "Drift: %s\0" + "Last sync: %s\0" + "Timezone detected\0" + "Timezone detect failed\0" + "DST: active\0" + "DST: inactive\0" + "DST: unknown\0" "Frequ\xC3" "\xAA" - "ncia atualiza\xC3" + "ncia de atualiza\xC3" "\xA7" "\xC3" "\xA3" - "o", + "o\0" "Sincroniza\xC3" "\xA7" "\xC3" "\xA3" - "o KOReader", + "o KOReader\0" "Verificar atualiza\xC3" "\xA7" "\xC3" "\xB5" - "es", - "Idioma", - "Limpar cache de leitura", + "es\0" + "Idioma\0" + "Limpar cache de leitura\0" "Nome de usu\xC3" "\xA1" - "rio", - "Senha", - "URL servidor sincroniza\xC3" + "rio\0" + "Senha\0" + "URL do servidor de sincroniza\xC3" "\xA7" "\xC3" "\xA3" - "o", - "Documento correspondente", - "Autenticar", + "o\0" + "Documento correspondente\0" + "Autenticar\0" "Usu\xC3" "\xA1" - "rio do KOReader", - "Senha do KOReader", - "Nome do arquivo", + "rio do KOReader\0" + "Senha do KOReader\0" + "Nome do arquivo\0" "Bin\xC3" "\xA1" - "rio", - "Defina as credenciais primeiro", + "rio\0" + "Defina as credenciais primeiro\0" "Falha na conex\xC3" "\xA3" "o Wi\xE2" "\x80" "\x91" - "Fi", - "Autenticando...", - "Autenticado com sucesso!", + "Fi\0" + "Autenticando...\0" + "Autenticado com sucesso!\0" "Autentica\xC3" "\xA7" "\xC3" "\xA3" - "o KOReader", + "o do KOReader\0" "A sincroniza\xC3" "\xA7" "\xC3" "\xA3" - "o KOReader est\xC3" + "o do KOReader est\xC3" "\xA1" - " pronta uso", + " pronta para uso\0" "Falha na autentica\xC3" "\xA7" "\xC3" "\xA3" - "o", - "Feito", - "Isso vai limpar todos os dados livros em cache.", + "o\0" + "Register\0" + "Registering...\0" + "Account created successfully!\0" + "Registration failed\0" + "Username already taken\0" + "Feito\0" + "Isso vai limpar todos os dados de livros em cache.\0" "Todo o progresso de leitura ser\xC3" "\xA1" - " perdido!", + " perdido!\0" "Os livros precisar\xC3" "\xA3" - "o ser reindexados", - "quando forem abertos novamente.", - "Limpando cache...", - "Cache limpo", - "itens removidos", - "falhou", - "Falha ao limpar o cache", - "Ver sa\xC3" + "o ser reindexados\0" + "quando forem abertos novamente.\0" + "Limpando cache...\0" + "Cache limpo\0" + "itens removidos\0" + "falhou\0" + "Falha ao limpar o cache\0" + "Verifique a sa\xC3" "\xAD" - "da serial", - "Escuro", - "Claro", - "Personalizado", - "Capa", - "Nenhum", - "Ajustar", - "Recortar", - "Nunca", - "No leitor", - "Sempre", - "Ignorar", - "Repouso", + "da serial\0" + "Escuro\0" + "Claro\0" + "Personalizado\0" + "Capa\0" + "Nenhum\0" + "Ajustar\0" + "Recortar\0" + "Nunca\0" + "No leitor\0" + "Sempre\0" + "Ignorar\0" + "Repouso\0" "Virar p\xC3" "\xA1" - "gina", - "Retrato", - "Paisagem H", - "Invertido", - "Paisagem AH", + "gina\0" + "Retrato\0" + "Paisagem H\0" + "Invertido\0" + "Paisagem AH\0" "Ant/Pr\xC3" "\xB3" - "x", + "x\0" "Pr\xC3" "\xB3" - "x/Ant", - "Bookerly", - "Noto Sans", - "Open Dyslexic", - "Pequeno", + "x/Ant\0" + "Bookerly\0" + "Noto Sans\0" + "Open Dyslexic\0" + "Pequeno\0" "M\xC3" "\xA9" - "dio", - "Grande", - "Extra grande", - "Apertado", - "Normal", - "Largo", - "Justificar", - "Esquerda", - "Centralizar", - "Direita", - "1 min", - "5 min", - "10 min", - "15 min", - "30 min", + "dio\0" + "Grande\0" + "Extra grande\0" + "Apertado\0" + "Normal\0" + "Largo\0" + "Justificar\0" + "Esquerda\0" + "Centralizar\0" + "Direita\0" + "1 min\0" + "5 min\0" + "10 min\0" + "15 min\0" + "30 min\0" "1 p\xC3" "\xA1" - "gina", + "gina\0" "5 p\xC3" "\xA1" - "ginas", + "ginas\0" "10 p\xC3" "\xA1" - "ginas", + "ginas\0" "15 p\xC3" "\xA1" - "ginas", + "ginas\0" "30 p\xC3" "\xA1" - "ginas", - "Atualizar", + "ginas\0" + "Atualizar\0" "Verificando atualiza\xC3" "\xA7" "\xC3" "\xA3" - "o...", + "o...\0" "Nova atualiza\xC3" "\xA7" "\xC3" "\xA3" "o dispon\xC3" "\xAD" - "vel!", + "vel!\0" "Vers\xC3" "\xA3" - "o atual:", + "o atual:\0" "Nova vers\xC3" "\xA3" - "o:", - "Atualizando...", + "o:\0" + "Atualizando...\0" "Nenhuma atualiza\xC3" "\xA7" "\xC3" "\xA3" "o dispon\xC3" "\xAD" - "vel", + "vel\0" "Falha na atualiza\xC3" "\xA7" "\xC3" "\xA3" - "o", + "o\0" "Atualiza\xC3" "\xA7" "\xC3" "\xA3" "o conclu\xC3" "\xAD" - "da", + "da\0" "Pressione e segure o bot\xC3" "\xA3" - "o energia ligar novamente", - "Nenhum entries encontrado", - "Baixando...", - "Falha no download", - "Erro:", - "Sem nome", - "Nenhum URL servidor configurado", - "Falha ao buscar o feed", - "Falha ao interpretar o feed", - "Rede:", + "o de energia para ligar novamente\0" + "Nenhuma entrada encontrada\0" + "Baixando...\0" + "Falha no download\0" + "Erro:\0" + "Sem nome\0" + "Nenhum URL de servidor configurado\0" + "Falha ao buscar o feed\0" + "Falha ao interpretar o feed\0" + "Rede:\0" "Endere\xC3" "\xA7" - "o IP:", - "Erro: falha geral", + "o IP:\0" + "Erro: falha geral\0" "Erro: rede n\xC3" "\xA3" - "o encontrada", - "Erro: tempo limite conex\xC3" + "o encontrada\0" + "Erro: tempo limite de conex\xC3" "\xA3" - "o", + "o\0" "Cart\xC3" "\xA3" - "o SD", + "o SD\0" "\xC2" "\xAB" - " Voltar", + " Voltar\0" "\xC2" "\xAB" - " Sair", + " Sair\0" "\xC2" "\xAB" " In\xC3" "\xAD" - "cio", - "Escolher", - "Selected", - "Alternar", - "Confirmar", - "Cancelar", - "Conectar", - "Abrir", - "Baixar", - "Tentar novamente", - "Sim", + "cio\0" + "Escolher\0" + "Selected\0" + "Alternar\0" + "Confirmar\0" + "Cancelar\0" + "Conectar\0" + "Abrir\0" + "Baixar\0" + "Tentar novamente\0" + "Sim\0" "N\xC3" "\xA3" - "o", - "Show", - "Hide", - "LIG.", - "DESL.", + "o\0" + "Show\0" + "Hide\0" + "LIG.\0" + "DESL.\0" "N\xC3" "\xA3" - "o definido", - "Esquerda", - "Direita", - "Cima", - "Baixo", - "OK", - "Filtro capa tela repouso", - "Contraste", - "Customise Status Bar", - "Chapter Page Count", - "Book Progress Percentage", - "Progress Bar", - "Progress Bar Thickness", - "Thin", - "Medium", - "Thick", - "Book", - "Chapter", - "Chapter 21", - "Book Title", - "Preview", - "Title", - "Battery", - "Tema da interface", + "o definido\0" + "Esquerda\0" + "Direita\0" + "Cima\0" + "Baixo\0" + "OK\0" + "Filtro da capa da tela de repouso\0" + "Contraste\0" + "Customise Status Bar\0" + "Chapter Page Count\0" + "Book Progress Percentage\0" + "Progress Bar\0" + "Progress Bar Thickness\0" + "Thin\0" + "Medium\0" + "Thick\0" + "Book\0" + "Chapter\0" + "Chapter 21\0" + "Book Title\0" + "Preview\0" + "Title\0" + "Battery\0" + "Tema da interface\0" "Cl\xC3" "\xA1" - "ssico", - "Lyra", - "Lyra Extended", - "Ajuste desbotamento ao sol", + "ssico\0" + "Lyra\0" + "Lyra Extended\0" + "Ajuste desbotamento ao sol\0" "Remapear bot\xC3" "\xB5" - "es frontais", - "Navegador OPDS", - "Capa + personalizado", - "Livros recentes", - "Sem livros recentes", + "es frontais\0" + "Navegador OPDS\0" + "Capa + personalizado\0" + "Page overlay\0" + "Recents\0" + "Livros recentes\0" + "Sem livros recentes\0" "Usar transfer\xC3" "\xAA" - "ncias sem fio Calibre", - "Esquecer a rede e remover a senha salva?", - "Esquecer", - "Iniciando Calibre...", + "ncias sem fio do Calibre\0" + "Esquecer a rede e remover a senha salva?\0" + "Esquecer\0" + "Iniciando o Calibre...\0" "Configura\xC3" "\xA7" "\xC3" "\xA3" - "o", - "Status", - "Limpar", + "o\0" + "Status\0" + "Limpar\0" "Padr\xC3" "\xA3" - "o", + "o\0" "Pressione um bot\xC3" "\xA3" - "o frontal cada fun\xC3" + "o frontal para cada fun\xC3" "\xA7" "\xC3" "\xA3" - "o", + "o\0" "N\xC3" "\xA3" "o atribu\xC3" "\xAD" - "do", + "do\0" "J\xC3" "\xA1" " atribu\xC3" "\xAD" - "do", + "do\0" "Bot\xC3" "\xA3" - "o lateral cima: redefinir o disposi\xC3" + "o lateral de cima: redefinir a disposi\xC3" "\xA7" "\xC3" "\xA3" "o padr\xC3" "\xA3" - "o", + "o\0" "Bot\xC3" "\xA3" - "o lateral baixo: cancelar remapeamento", + "o lateral de baixo: cancelar o remapeamento\0" "Voltar (1\xC2" "\xBA" " bot\xC3" "\xA3" - "o)", + "o)\0" "Confirmar (2\xC2" "\xBA" " bot\xC3" "\xA3" - "o)", + "o)\0" "Esquerda (3\xC2" "\xBA" " bot\xC3" "\xA3" - "o)", + "o)\0" "Direita (4\xC2" "\xBA" " bot\xC3" "\xA3" - "o)", - "Ir para %", + "o)\0" + "Ir para %\0" "Ir para o in\xC3" "\xAD" - "cio", - "Sincronizar progresso", - "Excluir cache do livro", - "Excluir", - "Show page as QR", + "cio\0" + "Sincronizar progresso\0" + "Excluir cache do livro\0" + "Excluir\0" + "Remove\0" + "Show page as QR\0" "Cap\xC3" "\xAD" - "tulo:", + "tulo:\0" "p\xC3" "\xA1" - "ginas |", - "Livro:", - "Para o Calibre, adicione /opds ao seu URL", - "Esq/Dir: 1% Cima/Baixo: 10%", - "Sincronizando hor\xC3" + "ginas |\0" + "Livro:\0" + "Para o Calibre, adicione /opds ao seu URL\0" + "Esq/Dir: 1% Cima/Baixo: 10%\0" + "Sincronizando o hor\xC3" "\xA1" - "rio...", - "Calculando hash documento...", - "Falha ao calcular o hash documento", - "Buscando progresso remoto...", - "Enviando progresso...", - "Nenhuma credencial configurada", - "Configure a conta do KOReader em Config.", - "Progresso encontrado!", - "Remoto:", - "Local:", + "rio...\0" + "Calculando hash do documento...\0" + "Falha ao calcular o hash do documento\0" + "Buscando progresso remoto...\0" + "Mapping remote position...\0" + "Calculating local position...\0" + "Enviando progresso...\0" + "Nenhuma credencial configurada\0" + "Configure a conta do KOReader em Configura\xC3" + "\xA7" + "\xC3" + "\xB5" + "es.\0" + "Progresso encontrado!\0" + "Remoto:\0" + "Local:\0" "P\xC3" "\xA1" - "gina %d, %.2f%% total", + "gina %d, %.2f%% total\0" "P\xC3" "\xA1" - "gina %d/%d, %.2f%% total", - "De: %s", - "Aplicar progresso remoto", - "Enviar progresso local", - "Nenhum progresso remoto encontrado", + "gina %d/%d, %.2f%% total\0" + "De: %s\0" + "Aplicar progresso remoto\0" + "Enviar progresso local\0" + "Nenhum progresso remoto encontrado\0" "Enviar posi\xC3" "\xA7" "\xC3" "\xA3" - "o atual?", - "Progresso enviado!", + "o atual?\0" + "Progresso enviado!\0" "Falha na sincroniza\xC3" "\xA7" "\xC3" "\xA3" - "o", + "o\0" "Se\xC3" "\xA7" "\xC3" "\xA3" - "o", - "Enviar", - "Estilo do livro", - "Estilo embutido", - "URL do servidor OPDS", - "Footnotes", - "No footnotes on this page", - "[link]", - "Capturar tela", - "Auto Turn Enabled: ", - "Auto Turn (Pages Per Minute)", - "Sleep Screen Info Overlay", - "White", - "Gray", - "Black", - "Off", - "Reading progress: Page %lu/%u - %.0f%%", - "Reading progress: Page %lu", - " - Page %d/%d - %.0f%% read", + "o\0" + "Enviar\0" + "Estilo do livro\0" + "Estilo embutido\0" + "URL do servidor OPDS\0" + "Footnotes\0" + "No footnotes on this page\0" + "[link]\0" + "Capturar tela\0" + "Auto Turn Enabled: \0" + "Auto Turn (Pages Per Minute)\0" + "Info\0" + "Author\0" + "Series\0" + "Size\0" + "Sleep Screen Info Overlay\0" + "White\0" + "Gray\0" + "Black\0" + "Off\0" + "Reading progress: Page %lu/%u - %.0f%%\0" + "Reading progress: Page %lu\0" + " - Page %d/%d - %.0f%% read\0" + "System Information\0" + "Failed to load XTC file\0" + "Failed to load EPUB file\0" + "FW version\0" + "Chip\0" + "CPU\0" + "MHz\0" + "Free RAM\0" + "Min free\0" + "Max block\0" + "Flash used\0" + "Uptime\0" + "Charging\0" + "Gathering data...\0" + "Reading...\0" +; +// clang-format on + +const uint16_t OFFSETS_PO[] = { + 0, 11, 21, 32, 52, 61, 76, 92, 108, 128, 148, 174, + 193, 208, 221, 237, 247, 264, 291, 305, 322, 336, 347, 361, + 371, 393, 407, 421, 432, 450, 467, 503, 540, 559, 573, 613, + 677, 698, 711, 755, 786, 797, 836, 852, 871, 901, 916, 939, + 962, 967, 978, 988, 1026, 1058, 1101, 1145, 1150, 1157, 1167, 1175, + 1191, 1223, 1244, 1281, 1303, 1310, 1318, 1330, 1339, 1371, 1403, 1427, + 1461, 1496, 1512, 1532, 1558, 1574, 1600, 1614, 1643, 1661, 1671, 1686, + 1721, 1727, 1740, 1749, 1753, 1757, 1771, 1797, 1823, 1844, 1865, 1887, + 1908, 1938, 1962, 1975, 1997, 2010, 2027, 2043, 2065, 2085, 2095, 2111, + 2128, 2150, 2162, 2179, 2189, 2203, 2221, 2244, 2256, 2270, 2283, 2312, + 2337, 2362, 2369, 2393, 2410, 2416, 2451, 2476, 2487, 2508, 2526, 2542, + 2551, 2582, 2608, 2624, 2649, 2676, 2728, 2752, 2761, 2776, 2806, 2826, + 2849, 2855, 2906, 2949, 2987, 3019, 3037, 3049, 3065, 3072, 3096, 3122, + 3129, 3135, 3149, 3154, 3161, 3169, 3178, 3184, 3194, 3201, 3209, 3217, + 3231, 3239, 3250, 3260, 3272, 3282, 3292, 3301, 3311, 3325, 3333, 3340, + 3347, 3360, 3369, 3376, 3382, 3393, 3402, 3414, 3422, 3428, 3434, 3441, + 3448, 3455, 3465, 3476, 3488, 3500, 3512, 3522, 3551, 3583, 3598, 3612, + 3627, 3661, 3684, 3709, 3769, 3796, 3808, 3826, 3832, 3841, 3876, 3899, + 3927, 3933, 3947, 3965, 3992, 4023, 4034, 4044, 4052, 4063, 4072, 4081, + 4090, 4100, 4109, 4118, 4124, 4131, 4148, 4152, 4157, 4162, 4167, 4172, + 4178, 4192, 4201, 4209, 4214, 4220, 4223, 4257, 4267, 4288, 4307, 4332, + 4345, 4368, 4373, 4380, 4386, 4391, 4399, 4410, 4421, 4429, 4435, 4443, + 4461, 4471, 4476, 4490, 4517, 4543, 4558, 4579, 4592, 4600, 4616, 4636, + 4676, 4717, 4726, 4749, 4764, 4771, 4778, 4786, 4833, 4849, 4864, 4921, + 4970, 4990, 5013, 5035, 5056, 5066, 5084, 5106, 5129, 5137, 5144, 5160, + 5171, 5183, 5190, 5232, 5261, 5289, 5321, 5359, 5388, 5415, 5445, 5467, + 5498, 5548, 5570, 5578, 5585, 5610, 5638, 5645, 5670, 5693, 5728, 5752, + 5771, 5796, 5804, 5811, 5827, 5843, 5864, 5874, 5900, 5907, 5921, 5941, + 5970, 5975, 5982, 5989, 5994, 6020, 6026, 6031, 6037, 6041, 6080, 6107, + 6135, 6154, 6178, 6203, 6214, 6219, 6223, 6227, 6236, 6245, 6255, 6266, + 6273, 6282, 6300, }; -const char* const STRINGS_RU[] = { - "CrossPoint", +// clang-format off +const char STRINGS_RU_DATA[] = + "CrossPoint\0" "\xD0" "\x97" "\xD0" @@ -4791,7 +5472,7 @@ const char* const STRINGS_RU[] = { "\xBA" "\xD0" "\xB0" - "", + "\0" "\xD0" "\xA1" "\xD0" @@ -4814,7 +5495,7 @@ const char* const STRINGS_RU[] = { "\xB8" "\xD0" "\xBC" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -4837,7 +5518,7 @@ const char* const STRINGS_RU[] = { "\xBE" "\xD0" "\xBD" - "", + "\0" "\xD0" "\x9E" "\xD0" @@ -4860,7 +5541,7 @@ const char* const STRINGS_RU[] = { "\xBE" "\xD0" "\xB2" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -4889,7 +5570,7 @@ const char* const STRINGS_RU[] = { "\xBE" "\xD0" "\xB2" - "", + "\0" "\xD0" "\x9D" "\xD0" @@ -4908,7 +5589,7 @@ const char* const STRINGS_RU[] = { "\xBA" "\xD0" "\xB8" - "", + "\0" "\xD0" "\x9F" "\xD1" @@ -4941,7 +5622,7 @@ const char* const STRINGS_RU[] = { "\xB8" "\xD0" "\xB5" - "", + "\0" "\xD0" "\x9D" "\xD0" @@ -4974,7 +5655,7 @@ const char* const STRINGS_RU[] = { "\xB3" "\xD0" "\xB8" - "", + "\0" "\xD0" "\x9D" "\xD0" @@ -5007,7 +5688,7 @@ const char* const STRINGS_RU[] = { "\xB6" "\xD0" "\xB5" - "", + "\0" "\xD0" "\xA4" "\xD0" @@ -5036,7 +5717,7 @@ const char* const STRINGS_RU[] = { "\xBD" "\xD1" "\x8B" - "", + "\0" "\xD0" "\x92" "\xD1" @@ -5063,7 +5744,7 @@ const char* const STRINGS_RU[] = { "\xB2" "\xD1" "\x83" - "", + "\0" "\xD0" "\x93" "\xD0" @@ -5078,7 +5759,7 @@ const char* const STRINGS_RU[] = { "\xB5" "\xD1" "\x82" - "", + "\0" "\xD0" "\x9A" "\xD0" @@ -5099,7 +5780,7 @@ const char* const STRINGS_RU[] = { "\xB3" "\xD0" "\xB8" - "", + "\0" "\xD0" "\x9F" "\xD1" @@ -5122,7 +5803,7 @@ const char* const STRINGS_RU[] = { "\xB2" "\xD0" "\xB0" - "", + "\0" "\xD0" "\x98" "\xD0" @@ -5143,7 +5824,7 @@ const char* const STRINGS_RU[] = { "\xB8" "\xD1" "\x8F" - "", + "\0" "\xD0" "\x9E" "\xD1" @@ -5168,7 +5849,7 @@ const char* const STRINGS_RU[] = { "\x82" "\xD0" "\xB8" - "", + "\0" "\xD0" "\x9E" "\xD1" @@ -5213,7 +5894,7 @@ const char* const STRINGS_RU[] = { "\x86" "\xD1" "\x8B" - "", + "\0" "\xD0" "\x9F" "\xD1" @@ -5234,7 +5915,7 @@ const char* const STRINGS_RU[] = { "\xB9" "\xD0" "\xBB" - "", + "\0" "\xD0" "\x92" "\xD1" @@ -5263,7 +5944,7 @@ const char* const STRINGS_RU[] = { "\xBB" "\xD1" "\x8B" - "", + "\0" "\xD0" "\x97" "\xD0" @@ -5280,7 +5961,7 @@ const char* const STRINGS_RU[] = { "\xBA" "\xD0" "\xB0" - "...", + "...\0" "\xD0" "\x97" "\xD0" @@ -5297,7 +5978,7 @@ const char* const STRINGS_RU[] = { "\xBA" "\xD0" "\xB0" - "", + "\0" "Wi-Fi \xD1" "\x81" "\xD0" @@ -5306,7 +5987,7 @@ const char* const STRINGS_RU[] = { "\x82" "\xD0" "\xB8" - "", + "\0" "\xD0" "\xA1" "\xD0" @@ -5333,7 +6014,7 @@ const char* const STRINGS_RU[] = { "\xBD" "\xD1" "\x8B" - "", + "\0" "\xD0" "\x9D" "\xD0" @@ -5358,7 +6039,7 @@ const char* const STRINGS_RU[] = { "\xB5" "\xD0" "\xB9" - ": %zu", + ": %zu\0" "\xD0" "\xA1" "\xD0" @@ -5383,7 +6064,7 @@ const char* const STRINGS_RU[] = { "\xB8" "\xD0" "\xB5" - "...", + "...\0" "\xD0" "\x9F" "\xD0" @@ -5406,7 +6087,7 @@ const char* const STRINGS_RU[] = { "\xB8" "\xD0" "\xB5" - "...", + "...\0" "\xD0" "\x9F" "\xD0" @@ -5427,7 +6108,7 @@ const char* const STRINGS_RU[] = { "\xBD" "\xD0" "\xBE" - "!", + "!\0" "\xD0" "\x9E" "\xD1" @@ -5462,7 +6143,7 @@ const char* const STRINGS_RU[] = { "\xB8" "\xD1" "\x8F" - "", + "\0" "\xD0" "\x97" "\xD0" @@ -5483,7 +6164,7 @@ const char* const STRINGS_RU[] = { "\x82" "\xD1" "\x8C" - "?", + "?\0" "\xD0" "\xA1" "\xD0" @@ -5514,7 +6195,7 @@ const char* const STRINGS_RU[] = { "\xBB" "\xD1" "\x8C" - "?", + "?\0" "\xD0" "\x9D" "\xD0" @@ -5567,7 +6248,7 @@ const char* const STRINGS_RU[] = { "\xBA" "\xD0" "\xB0" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -5602,7 +6283,7 @@ const char* const STRINGS_RU[] = { "\x82" "\xD0" "\xB8" - "", + "\0" "\xD0" "\xA1" "\xD0" @@ -5641,7 +6322,7 @@ const char* const STRINGS_RU[] = { "\xBF" "\xD0" "\xB0" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -5698,7 +6379,7 @@ const char* const STRINGS_RU[] = { "\x82" "\xD0" "\xB8" - " Wi-Fi", + " Wi-Fi\0" "\xD0" "\xA1" "\xD0" @@ -5761,7 +6442,7 @@ const char* const STRINGS_RU[] = { "\xB8" "\xD1" "\x85" - "", + "\0" "\xD0" "\x97" "\xD0" @@ -5798,7 +6479,7 @@ const char* const STRINGS_RU[] = { "\xBF" "\xD0" "\xB0" - "...", + "...\0" "\xD0" "\xA0" "\xD0" @@ -5833,7 +6514,7 @@ const char* const STRINGS_RU[] = { "\xBF" "\xD0" "\xB0" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -5892,7 +6573,7 @@ const char* const STRINGS_RU[] = { "\x82" "\xD0" "\xB8" - " Wi-Fi", + " Wi-Fi\0" "\xD0" "\x9E" "\xD1" @@ -5945,14 +6626,14 @@ const char* const STRINGS_RU[] = { "\x80" "\xD0" "\xB5" - "", + "\0" "\xD0" "\xB8" "\xD0" "\xBB" "\xD0" "\xB8" - " http://", + " http://\0" "\xD0" "\xB8" "\xD0" @@ -5989,12 +6670,12 @@ const char* const STRINGS_RU[] = { "\xBE" "\xD0" "\xB4" - ":", + ":\0" "Calibre \xD0" "\xBF" "\xD0" "\xBE" - " Wi-Fi", + " Wi-Fi\0" "Web-\xD0" "\xB0" "\xD0" @@ -6005,7 +6686,7 @@ const char* const STRINGS_RU[] = { "\xB5" "\xD1" "\x81" - " Calibre", + " Calibre\0" "* = \xD0" "\x97" "\xD0" @@ -6040,7 +6721,7 @@ const char* const STRINGS_RU[] = { "\xBD" "\xD0" "\xB0" - "", + "\0" "MAC-\xD0" "\xB0" "\xD0" @@ -6051,7 +6732,7 @@ const char* const STRINGS_RU[] = { "\xB5" "\xD1" "\x81" - ":", + ":\0" "\xD0" "\x9F" "\xD1" @@ -6068,7 +6749,7 @@ const char* const STRINGS_RU[] = { "\xBA" "\xD0" "\xB0" - " Wi-Fi...", + " Wi-Fi...\0" "\xD0" "\x92" "\xD0" @@ -6095,10 +6776,10 @@ const char* const STRINGS_RU[] = { "\xBB" "\xD1" "\x8C" - " Wi-Fi", + " Wi-Fi\0" "\xD0" "\xBA" - " ", + " \0" "\xD0" "\x9F" "\xD0" @@ -6117,7 +6798,7 @@ const char* const STRINGS_RU[] = { "\xB8" "\xD0" "\xB5" - ":", + ":\0" "\xD0" "\x9F" "\xD0" @@ -6134,7 +6815,7 @@ const char* const STRINGS_RU[] = { "\xBD" "\xD0" "\xBE" - ":", + ":\0" "1) \xD0" "\xA3" "\xD1" @@ -6167,7 +6848,7 @@ const char* const STRINGS_RU[] = { "\xB8" "\xD0" "\xBD" - " CrossPoint Reader", + " CrossPoint Reader\0" "2) \xD0" "\x9F" "\xD0" @@ -6212,7 +6893,7 @@ const char* const STRINGS_RU[] = { "\x82" "\xD0" "\xB8" - " Wi-Fi", + " Wi-Fi\0" "3) \xD0" "\x92" " Calibre \xD0" @@ -6277,7 +6958,7 @@ const char* const STRINGS_RU[] = { "\xBE" "\xC2" "\xBB" - "", + "\0" "\xD0" "\x9D" "\xD0" @@ -6350,7 +7031,7 @@ const char* const STRINGS_RU[] = { "\xBA" "\xD0" "\xB8" - "", + "\0" "\xD0" "\xAD" "\xD0" @@ -6361,7 +7042,7 @@ const char* const STRINGS_RU[] = { "\xB0" "\xD0" "\xBD" - "", + "\0" "\xD0" "\xA7" "\xD1" @@ -6374,7 +7055,7 @@ const char* const STRINGS_RU[] = { "\xB8" "\xD0" "\xB5" - "", + "\0" "\xD0" "\xA3" "\xD0" @@ -6395,7 +7076,7 @@ const char* const STRINGS_RU[] = { "\xB8" "\xD0" "\xB5" - "", + "\0" "\xD0" "\xA1" "\xD0" @@ -6410,7 +7091,7 @@ const char* const STRINGS_RU[] = { "\xBC" "\xD0" "\xB0" - "", + "\0" "\xD0" "\xAD" "\xD0" @@ -6427,7 +7108,7 @@ const char* const STRINGS_RU[] = { "\xBD" "\xD0" "\xB0" - "", + "\0" "\xD0" "\xA0" "\xD0" @@ -6458,7 +7139,7 @@ const char* const STRINGS_RU[] = { "\xBD" "\xD0" "\xB0" - "", + "\0" "\xD0" "\xA1" "\xD0" @@ -6485,7 +7166,7 @@ const char* const STRINGS_RU[] = { "\xB5" "\xD0" "\xB8" - "", + "\0" "\xD0" "\x94" "\xD0" @@ -6520,7 +7201,7 @@ const char* const STRINGS_RU[] = { "\x86" "\xD0" "\xB0" - "", + "\0" "\xD0" "\xA1" "\xD0" @@ -6555,11 +7236,78 @@ const char* const STRINGS_RU[] = { "\x82" "\xD0" "\xB0" - "", - "Images", - "Display", - "Placeholder", - "Suppress", + "\0" + "\xD0" + "\x98" + "\xD0" + "\xB7" + "\xD0" + "\xBE" + "\xD0" + "\xB1" + "\xD1" + "\x80" + "\xD0" + "\xB0" + "\xD0" + "\xB6" + "\xD0" + "\xB5" + "\xD0" + "\xBD" + "\xD0" + "\xB8" + "\xD1" + "\x8F" + "\0" + "\xD0" + "\x9F" + "\xD0" + "\xBE" + "\xD0" + "\xBA" + "\xD0" + "\xB0" + "\xD0" + "\xB7" + "\xD0" + "\xB0" + "\xD1" + "\x82" + "\xD1" + "\x8C" + "\0" + "\xD0" + "\x97" + "\xD0" + "\xB0" + "\xD0" + "\xB3" + "\xD0" + "\xBB" + "\xD1" + "\x83" + "\xD1" + "\x88" + "\xD0" + "\xBA" + "\xD0" + "\xB8" + "\0" + "\xD0" + "\xA1" + "\xD0" + "\xBA" + "\xD1" + "\x80" + "\xD1" + "\x8B" + "\xD1" + "\x82" + "\xD1" + "\x8C" + "\0" + "Create fallback for invalid TOC\0" "\xD0" "\x9A" "\xD0" @@ -6590,7 +7338,7 @@ const char* const STRINGS_RU[] = { "\xB8" "\xD0" "\xB5" - " PWR", + " PWR\0" "\xD0" "\x9E" "\xD1" @@ -6623,7 +7371,7 @@ const char* const STRINGS_RU[] = { "\xB8" "\xD1" "\x8F" - "", + "\0" "\xD0" "\x91" "\xD0" @@ -6650,7 +7398,7 @@ const char* const STRINGS_RU[] = { "\xBA" "\xD0" "\xB8" - "", + "\0" "\xD0" "\x94" "\xD0" @@ -6697,7 +7445,7 @@ const char* const STRINGS_RU[] = { "\xB2" "\xD1" "\x8B" - "", + "\0" "\xD0" "\xA8" "\xD1" @@ -6720,7 +7468,7 @@ const char* const STRINGS_RU[] = { "\xB8" "\xD1" "\x8F" - "", + "\0" "\xD0" "\xA0" "\xD0" @@ -6765,7 +7513,7 @@ const char* const STRINGS_RU[] = { "\x81" "\xD0" "\xB0" - "", + "\0" "\xD0" "\x9C" "\xD0" @@ -6804,7 +7552,7 @@ const char* const STRINGS_RU[] = { "\xB0" "\xD0" "\xBB" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -6825,7 +7573,7 @@ const char* const STRINGS_RU[] = { "\xBD" "\xD0" "\xB0" - "", + "\0" "\xD0" "\x92" "\xD1" @@ -6862,7 +7610,7 @@ const char* const STRINGS_RU[] = { "\x86" "\xD0" "\xB0" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -6885,7 +7633,7 @@ const char* const STRINGS_RU[] = { "\xBE" "\xD0" "\xB2" - "", + "\0" "\xD0" "\xA1" "\xD0" @@ -6902,8 +7650,85 @@ const char* const STRINGS_RU[] = { "\xB5" "\xD0" "\xB7" - "", - "Show Hidden Files", + "\0" + "\xD0" + "\x9F" + "\xD0" + "\xBE" + "\xD0" + "\xBA" + "\xD0" + "\xB0" + "\xD0" + "\xB7" + "\xD0" + "\xB0" + "\xD1" + "\x82" + "\xD1" + "\x8C" + " \xD1" + "\x81" + "\xD0" + "\xBA" + "\xD1" + "\x80" + "\xD1" + "\x8B" + "\xD1" + "\x82" + "\xD1" + "\x8B" + "\xD0" + "\xB5" + " \xD1" + "\x84" + "\xD0" + "\xB0" + "\xD0" + "\xB9" + "\xD0" + "\xBB" + "\xD1" + "\x8B" + "\0" + "Use Clock\0" + "Clock Settings\0" + "Uses more battery; clock may drift\0" + "Clock\0" + "Clock Format\0" + "Timezone\0" + "24h\0" + "12h\0" + "UTC (GMT/BST)\0" + "Central Europe (CET/CEST)\0" + "Eastern Europe (EET/EEST)\0" + "US Eastern (EST/EDT)\0" + "US Central (CST/CDT)\0" + "US Mountain (MST/MDT)\0" + "US Pacific (PST/PDT)\0" + "Australia Eastern (AEST/AEDT)\0" + "New Zealand (NZST/NZDT)\0" + "Russia (MSK)\0" + "South America (UTC-3)\0" + "Gulf (UTC+4)\0" + "India (UTC+5:30)\0" + "SE Asia (UTC+7)\0" + "China/SE Asia (UTC+8)\0" + "Japan/Korea (UTC+9)\0" + "Sync Time\0" + "Detect Timezone\0" + "Syncing clock...\0" + "Detecting timezone...\0" + "Time synced\0" + "Time sync failed\0" + "Drift: %s\0" + "Last sync: %s\0" + "Timezone detected\0" + "Timezone detect failed\0" + "DST: active\0" + "DST: inactive\0" + "DST: unknown\0" "\xD0" "\xA7" "\xD0" @@ -6938,7 +7763,7 @@ const char* const STRINGS_RU[] = { "\xB8" "\xD1" "\x8F" - "", + "\0" "\xD0" "\xA1" "\xD0" @@ -6965,7 +7790,7 @@ const char* const STRINGS_RU[] = { "\xB8" "\xD1" "\x8F" - " KOReader", + " KOReader\0" "\xD0" "\x9F" "\xD1" @@ -7004,7 +7829,7 @@ const char* const STRINGS_RU[] = { "\xB8" "\xD1" "\x8F" - "", + "\0" "\xD0" "\xAF" "\xD0" @@ -7013,7 +7838,7 @@ const char* const STRINGS_RU[] = { "\x8B" "\xD0" "\xBA" - "", + "\0" "\xD0" "\x9E" "\xD1" @@ -7048,7 +7873,7 @@ const char* const STRINGS_RU[] = { "\xB8" "\xD1" "\x8F" - "", + "\0" "\xD0" "\x98" "\xD0" @@ -7079,7 +7904,7 @@ const char* const STRINGS_RU[] = { "\xBB" "\xD1" "\x8F" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -7092,7 +7917,7 @@ const char* const STRINGS_RU[] = { "\xBB" "\xD1" "\x8C" - "", + "\0" "URL \xD1" "\x81" "\xD0" @@ -7133,7 +7958,7 @@ const char* const STRINGS_RU[] = { "\xB8" "\xD0" "\xB8" - "", + "\0" "\xD0" "\xA1" "\xD0" @@ -7180,7 +8005,7 @@ const char* const STRINGS_RU[] = { "\xBE" "\xD0" "\xB2" - "", + "\0" "\xD0" "\x90" "\xD0" @@ -7203,7 +8028,7 @@ const char* const STRINGS_RU[] = { "\xB8" "\xD1" "\x8F" - "", + "\0" "\xD0" "\x98" "\xD0" @@ -7234,7 +8059,7 @@ const char* const STRINGS_RU[] = { "\xBB" "\xD1" "\x8F" - " KOReader", + " KOReader\0" "\xD0" "\x9F" "\xD0" @@ -7247,7 +8072,7 @@ const char* const STRINGS_RU[] = { "\xBB" "\xD1" "\x8C" - " KOReader", + " KOReader\0" "\xD0" "\x98" "\xD0" @@ -7264,7 +8089,7 @@ const char* const STRINGS_RU[] = { "\xBB" "\xD0" "\xB0" - "", + "\0" "\xD0" "\x91" "\xD0" @@ -7281,7 +8106,7 @@ const char* const STRINGS_RU[] = { "\x8B" "\xD0" "\xB9" - "", + "\0" "\xD0" "\xA1" "\xD0" @@ -7322,7 +8147,7 @@ const char* const STRINGS_RU[] = { "\x8B" "\xD0" "\xB5" - "", + "\0" "\xD0" "\x9D" "\xD0" @@ -7367,7 +8192,7 @@ const char* const STRINGS_RU[] = { "\x8F" " \xD0" "\xBA" - " Wi-Fi", + " Wi-Fi\0" "\xD0" "\x90" "\xD0" @@ -7390,7 +8215,7 @@ const char* const STRINGS_RU[] = { "\xB8" "\xD1" "\x8F" - "...", + "...\0" "\xD0" "\x90" "\xD0" @@ -7427,7 +8252,7 @@ const char* const STRINGS_RU[] = { "\xBD" "\xD0" "\xB0" - "!", + "!\0" "\xD0" "\x90" "\xD0" @@ -7450,7 +8275,7 @@ const char* const STRINGS_RU[] = { "\xB8" "\xD1" "\x8F" - " KOReader", + " KOReader\0" "\xD0" "\xA1" "\xD0" @@ -7489,7 +8314,7 @@ const char* const STRINGS_RU[] = { "\xB2" "\xD0" "\xB0" - "", + "\0" "\xD0" "\x9E" "\xD1" @@ -7524,7 +8349,12 @@ const char* const STRINGS_RU[] = { "\xB8" "\xD0" "\xB8" - "", + "\0" + "Register\0" + "Registering...\0" + "Account created successfully!\0" + "Registration failed\0" + "Username already taken\0" "\xD0" "\x93" "\xD0" @@ -7537,7 +8367,7 @@ const char* const STRINGS_RU[] = { "\xB2" "\xD0" "\xBE" - "", + "\0" "\xD0" "\x91" "\xD1" @@ -7596,7 +8426,7 @@ const char* const STRINGS_RU[] = { "\xB8" "\xD0" "\xB3" - ".", + ".\0" "\xD0" "\x92" "\xD0" @@ -7657,7 +8487,7 @@ const char* const STRINGS_RU[] = { "\x8F" "\xD0" "\xBD" - "!", + "!\0" "\xD0" "\x9A" "\xD0" @@ -7724,7 +8554,7 @@ const char* const STRINGS_RU[] = { "\x82" "\xD1" "\x8C" - "", + "\0" "\xD0" "\xBF" "\xD1" @@ -7765,7 +8595,7 @@ const char* const STRINGS_RU[] = { "\xB8" "\xD0" "\xB8" - ".", + ".\0" "\xD0" "\x9E" "\xD1" @@ -7788,7 +8618,7 @@ const char* const STRINGS_RU[] = { "\x88" "\xD0" "\xB0" - "...", + "...\0" "\xD0" "\x9A" "\xD1" @@ -7807,7 +8637,7 @@ const char* const STRINGS_RU[] = { "\xB5" "\xD0" "\xBD" - "", + "\0" "\xD1" "\x8D" "\xD0" @@ -7840,7 +8670,7 @@ const char* const STRINGS_RU[] = { "\xBD" "\xD0" "\xBE" - "", + "\0" "\xD0" "\xBE" "\xD1" @@ -7853,7 +8683,7 @@ const char* const STRINGS_RU[] = { "\xBA" "\xD0" "\xB0" - "", + "\0" "\xD0" "\x9D" "\xD0" @@ -7894,7 +8724,7 @@ const char* const STRINGS_RU[] = { "\x8D" "\xD1" "\x88" - "", + "\0" "\xD0" "\x9F" "\xD1" @@ -7947,7 +8777,7 @@ const char* const STRINGS_RU[] = { "\xB5" "\xD0" "\xB9" - "", + "\0" "\xD0" "\xA2" "\xD1" @@ -7960,7 +8790,7 @@ const char* const STRINGS_RU[] = { "\x8B" "\xD0" "\xB9" - "", + "\0" "\xD0" "\xA1" "\xD0" @@ -7975,7 +8805,7 @@ const char* const STRINGS_RU[] = { "\x8B" "\xD0" "\xB9" - "", + "\0" "\xD0" "\xA1" "\xD0" @@ -7984,7 +8814,7 @@ const char* const STRINGS_RU[] = { "\xBE" "\xD0" "\xB9" - "", + "\0" "\xD0" "\x9E" "\xD0" @@ -7999,14 +8829,14 @@ const char* const STRINGS_RU[] = { "\xBA" "\xD0" "\xB0" - "", + "\0" "\xD0" "\x9D" "\xD0" "\xB5" "\xD1" "\x82" - "", + "\0" "\xD0" "\x92" "\xD0" @@ -8021,7 +8851,7 @@ const char* const STRINGS_RU[] = { "\x82" "\xD1" "\x8C" - "", + "\0" "\xD0" "\x9E" "\xD0" @@ -8038,7 +8868,7 @@ const char* const STRINGS_RU[] = { "\x82" "\xD1" "\x8C" - "", + "\0" "\xD0" "\x9D" "\xD0" @@ -8053,7 +8883,7 @@ const char* const STRINGS_RU[] = { "\xB4" "\xD0" "\xB0" - "", + "\0" "\xD0" "\x92" " \xD1" @@ -8080,7 +8910,7 @@ const char* const STRINGS_RU[] = { "\xB8" "\xD1" "\x8F" - "", + "\0" "\xD0" "\x92" "\xD1" @@ -8093,7 +8923,7 @@ const char* const STRINGS_RU[] = { "\xB4" "\xD0" "\xB0" - "", + "\0" "\xD0" "\x98" "\xD0" @@ -8118,14 +8948,14 @@ const char* const STRINGS_RU[] = { "\x82" "\xD1" "\x8C" - "", + "\0" "\xD0" "\xA1" "\xD0" "\xBE" "\xD0" "\xBD" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -8154,7 +8984,7 @@ const char* const STRINGS_RU[] = { "\xB8" "\xD0" "\xB5" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -8169,7 +8999,7 @@ const char* const STRINGS_RU[] = { "\xB5" "\xD1" "\x82" - "", + "\0" "\xD0" "\x9B" "\xD0" @@ -8186,7 +9016,7 @@ const char* const STRINGS_RU[] = { "\x84" "\xD1" "\x82" - " (CW)", + " (CW)\0" "\xD0" "\x98" "\xD0" @@ -8203,7 +9033,7 @@ const char* const STRINGS_RU[] = { "\xB8" "\xD1" "\x8F" - "", + "\0" "\xD0" "\x9B" "\xD0" @@ -8220,7 +9050,7 @@ const char* const STRINGS_RU[] = { "\x84" "\xD1" "\x82" - " (CCW)", + " (CCW)\0" "\xD0" "\x9D" "\xD0" @@ -8243,7 +9073,7 @@ const char* const STRINGS_RU[] = { "\x91" "\xD0" "\xB4" - "", + "\0" "\xD0" "\x92" "\xD0" @@ -8266,10 +9096,10 @@ const char* const STRINGS_RU[] = { "\xB0" "\xD0" "\xB4" - "", - "Bookerly", - "Noto Sans", - "Open Dyslexic", + "\0" + "Bookerly\0" + "Noto Sans\0" + "Open Dyslexic\0" "\xD0" "\x9C" "\xD0" @@ -8288,7 +9118,7 @@ const char* const STRINGS_RU[] = { "\xB8" "\xD0" "\xB9" - "", + "\0" "\xD0" "\xA1" "\xD1" @@ -8303,7 +9133,7 @@ const char* const STRINGS_RU[] = { "\xB8" "\xD0" "\xB9" - "", + "\0" "\xD0" "\x91" "\xD0" @@ -8318,7 +9148,7 @@ const char* const STRINGS_RU[] = { "\xBE" "\xD0" "\xB9" - "", + "\0" "\xD0" "\x9E" "\xD1" @@ -8343,7 +9173,7 @@ const char* const STRINGS_RU[] = { "\xBE" "\xD0" "\xB9" - "", + "\0" "\xD0" "\xA3" "\xD0" @@ -8354,7 +9184,7 @@ const char* const STRINGS_RU[] = { "\xB8" "\xD0" "\xB9" - "", + "\0" "\xD0" "\x9E" "\xD0" @@ -8369,7 +9199,7 @@ const char* const STRINGS_RU[] = { "\x8B" "\xD0" "\xB9" - "", + "\0" "\xD0" "\xA8" "\xD0" @@ -8384,7 +9214,7 @@ const char* const STRINGS_RU[] = { "\xB8" "\xD0" "\xB9" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -8401,7 +9231,7 @@ const char* const STRINGS_RU[] = { "\xBD" "\xD0" "\xB5" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -8426,7 +9256,7 @@ const char* const STRINGS_RU[] = { "\xB0" "\xD1" "\x8E" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -8443,7 +9273,7 @@ const char* const STRINGS_RU[] = { "\x80" "\xD1" "\x83" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -8470,77 +9300,77 @@ const char* const STRINGS_RU[] = { "\xB0" "\xD1" "\x8E" - "", + "\0" "1 \xD0" "\xBC" "\xD0" "\xB8" "\xD0" "\xBD" - "", + "\0" "5 \xD0" "\xBC" "\xD0" "\xB8" "\xD0" "\xBD" - "", + "\0" "10 \xD0" "\xBC" "\xD0" "\xB8" "\xD0" "\xBD" - "", + "\0" "15 \xD0" "\xBC" "\xD0" "\xB8" "\xD0" "\xBD" - "", + "\0" "30 \xD0" "\xBC" "\xD0" "\xB8" "\xD0" "\xBD" - "", + "\0" "1 \xD1" "\x81" "\xD1" "\x82" "\xD1" "\x80" - ".", + ".\0" "5 \xD1" "\x81" "\xD1" "\x82" "\xD1" "\x80" - ".", + ".\0" "10 \xD1" "\x81" "\xD1" "\x82" "\xD1" "\x80" - ".", + ".\0" "15 \xD1" "\x81" "\xD1" "\x82" "\xD1" "\x80" - ".", + ".\0" "30 \xD1" "\x81" "\xD1" "\x82" "\xD1" "\x80" - ".", + ".\0" "\xD0" "\x9E" "\xD0" @@ -8561,7 +9391,7 @@ const char* const STRINGS_RU[] = { "\xB8" "\xD0" "\xB5" - "", + "\0" "\xD0" "\x9F" "\xD1" @@ -8598,7 +9428,7 @@ const char* const STRINGS_RU[] = { "\xB8" "\xD0" "\xB9" - "...", + "...\0" "\xD0" "\x94" "\xD0" @@ -8645,7 +9475,7 @@ const char* const STRINGS_RU[] = { "\xB8" "\xD0" "\xB5" - "!", + "!\0" "\xD0" "\xA2" "\xD0" @@ -8672,7 +9502,7 @@ const char* const STRINGS_RU[] = { "\xB8" "\xD1" "\x8F" - ":", + ":\0" "\xD0" "\x9D" "\xD0" @@ -8695,7 +9525,7 @@ const char* const STRINGS_RU[] = { "\xB8" "\xD1" "\x8F" - ":", + ":\0" "\xD0" "\x9E" "\xD0" @@ -8716,7 +9546,7 @@ const char* const STRINGS_RU[] = { "\xB8" "\xD0" "\xB5" - "...", + "...\0" "\xD0" "\x9E" "\xD0" @@ -8743,7 +9573,7 @@ const char* const STRINGS_RU[] = { "\xB5" "\xD1" "\x82" - "", + "\0" "\xD0" "\x9E" "\xD1" @@ -8776,7 +9606,7 @@ const char* const STRINGS_RU[] = { "\xB8" "\xD1" "\x8F" - "", + "\0" "\xD0" "\x9E" "\xD0" @@ -8815,7 +9645,7 @@ const char* const STRINGS_RU[] = { "\xBD" "\xD0" "\xBE" - "", + "\0" "\xD0" "\xA3" "\xD0" @@ -8888,7 +9718,7 @@ const char* const STRINGS_RU[] = { "\xB8" "\xD1" "\x8F" - "", + "\0" "\xD0" "\x97" "\xD0" @@ -8919,7 +9749,7 @@ const char* const STRINGS_RU[] = { "\xBD" "\xD1" "\x8B" - "", + "\0" "\xD0" "\x97" "\xD0" @@ -8936,7 +9766,7 @@ const char* const STRINGS_RU[] = { "\xBA" "\xD0" "\xB0" - "...", + "...\0" "\xD0" "\x9E" "\xD1" @@ -8965,7 +9795,7 @@ const char* const STRINGS_RU[] = { "\xBA" "\xD0" "\xB8" - "", + "\0" "\xD0" "\x9E" "\xD1" @@ -8978,7 +9808,7 @@ const char* const STRINGS_RU[] = { "\xBA" "\xD0" "\xB0" - ":", + ":\0" "\xD0" "\x91" "\xD0" @@ -8995,7 +9825,7 @@ const char* const STRINGS_RU[] = { "\xBD" "\xD0" "\xB8" - "", + "\0" "URL \xD1" "\x81" "\xD0" @@ -9030,7 +9860,7 @@ const char* const STRINGS_RU[] = { "\xB5" "\xD0" "\xBD" - "", + "\0" "\xD0" "\x9D" "\xD0" @@ -9075,7 +9905,7 @@ const char* const STRINGS_RU[] = { "\x82" "\xD1" "\x83" - "", + "\0" "\xD0" "\x9D" "\xD0" @@ -9124,7 +9954,7 @@ const char* const STRINGS_RU[] = { "\x82" "\xD1" "\x83" - "", + "\0" "\xD0" "\xA1" "\xD0" @@ -9133,7 +9963,7 @@ const char* const STRINGS_RU[] = { "\x82" "\xD1" "\x8C" - ":", + ":\0" "IP-\xD0" "\xB0" "\xD0" @@ -9144,7 +9974,7 @@ const char* const STRINGS_RU[] = { "\xB5" "\xD1" "\x81" - ":", + ":\0" "\xD0" "\x9E" "\xD1" @@ -9179,7 +10009,7 @@ const char* const STRINGS_RU[] = { "\xBA" "\xD0" "\xB0" - "", + "\0" "\xD0" "\x9E" "\xD1" @@ -9218,7 +10048,7 @@ const char* const STRINGS_RU[] = { "\xBD" "\xD0" "\xB0" - "", + "\0" "\xD0" "\x9E" "\xD1" @@ -9265,7 +10095,7 @@ const char* const STRINGS_RU[] = { "\xB8" "\xD1" "\x8F" - "", + "\0" "SD-\xD0" "\xBA" "\xD0" @@ -9276,7 +10106,7 @@ const char* const STRINGS_RU[] = { "\x82" "\xD0" "\xB0" - "", + "\0" "\xC2" "\xAB" " \xD0" @@ -9289,7 +10119,7 @@ const char* const STRINGS_RU[] = { "\xB0" "\xD0" "\xB4" - "", + "\0" "\xC2" "\xAB" " \xD0" @@ -9302,7 +10132,7 @@ const char* const STRINGS_RU[] = { "\xBE" "\xD0" "\xB4" - "", + "\0" "\xC2" "\xAB" " \xD0" @@ -9319,7 +10149,7 @@ const char* const STRINGS_RU[] = { "\xB0" "\xD1" "\x8F" - "", + "\0" "\xD0" "\x92" "\xD1" @@ -9334,7 +10164,7 @@ const char* const STRINGS_RU[] = { "\x82" "\xD1" "\x8C" - "", + "\0" "\xD0" "\x92" "\xD1" @@ -9347,7 +10177,7 @@ const char* const STRINGS_RU[] = { "\xB0" "\xD0" "\xBD" - "", + "\0" "\xD0" "\x92" "\xD1" @@ -9358,7 +10188,7 @@ const char* const STRINGS_RU[] = { "\xBE" "\xD1" "\x80" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -9369,7 +10199,7 @@ const char* const STRINGS_RU[] = { "\x82" "\xD0" "\xB2" - ".", + ".\0" "\xD0" "\x9E" "\xD1" @@ -9382,7 +10212,7 @@ const char* const STRINGS_RU[] = { "\xBD" "\xD0" "\xB0" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -9393,7 +10223,7 @@ const char* const STRINGS_RU[] = { "\xBA" "\xD0" "\xBB" - ".", + ".\0" "\xD0" "\x9E" "\xD1" @@ -9408,7 +10238,7 @@ const char* const STRINGS_RU[] = { "\x82" "\xD1" "\x8C" - "", + "\0" "\xD0" "\xA1" "\xD0" @@ -9423,7 +10253,7 @@ const char* const STRINGS_RU[] = { "\x82" "\xD1" "\x8C" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -9442,19 +10272,19 @@ const char* const STRINGS_RU[] = { "\x82" "\xD1" "\x8C" - "", + "\0" "\xD0" "\x94" "\xD0" "\xB0" - "", + "\0" "\xD0" "\x9D" "\xD0" "\xB5" "\xD1" "\x82" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -9471,7 +10301,7 @@ const char* const STRINGS_RU[] = { "\x82" "\xD1" "\x8C" - "", + "\0" "\xD0" "\xA1" "\xD0" @@ -9484,14 +10314,14 @@ const char* const STRINGS_RU[] = { "\x82" "\xD1" "\x8C" - "", + "\0" "\xD0" "\x92" "\xD0" "\x9A" "\xD0" "\x9B" - "", + "\0" "\xD0" "\x92" "\xD0" @@ -9500,7 +10330,7 @@ const char* const STRINGS_RU[] = { "\x9A" "\xD0" "\x9B" - "", + "\0" "\xD0" "\x9D" "\xD0" @@ -9527,7 +10357,7 @@ const char* const STRINGS_RU[] = { "\xBD" "\xD0" "\xBE" - "", + "\0" "\xD0" "\x92" "\xD0" @@ -9538,7 +10368,7 @@ const char* const STRINGS_RU[] = { "\xB2" "\xD0" "\xBE" - "", + "\0" "\xD0" "\x92" "\xD0" @@ -9551,7 +10381,7 @@ const char* const STRINGS_RU[] = { "\xB2" "\xD0" "\xBE" - "", + "\0" "\xD0" "\x92" "\xD0" @@ -9562,7 +10392,7 @@ const char* const STRINGS_RU[] = { "\x80" "\xD1" "\x85" - "", + "\0" "\xD0" "\x92" "\xD0" @@ -9571,8 +10401,8 @@ const char* const STRINGS_RU[] = { "\xB8" "\xD0" "\xB7" - "", - "OK", + "\0" + "OK\0" "\xD0" "\xA4" "\xD0" @@ -9603,7 +10433,7 @@ const char* const STRINGS_RU[] = { "\xBD" "\xD0" "\xB0" - "", + "\0" "\xD0" "\x9A" "\xD0" @@ -9620,7 +10450,7 @@ const char* const STRINGS_RU[] = { "\x81" "\xD1" "\x82" - "", + "\0" "\xD0" "\x9D" "\xD0" @@ -9669,7 +10499,7 @@ const char* const STRINGS_RU[] = { "\xB8" "\xD1" "\x8F" - "", + "\0" "\xD0" "\x9A" "\xD0" @@ -9714,7 +10544,7 @@ const char* const STRINGS_RU[] = { "\xB2" "\xD1" "\x8B" - "", + "\0" "% \xD0" "\xBF" "\xD1" @@ -9743,7 +10573,7 @@ const char* const STRINGS_RU[] = { "\xB3" "\xD0" "\xB8" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -9774,7 +10604,7 @@ const char* const STRINGS_RU[] = { "\x81" "\xD0" "\xB0" - "", + "\0" "\xD0" "\xA2" "\xD0" @@ -9827,7 +10657,7 @@ const char* const STRINGS_RU[] = { "\x81" "\xD0" "\xB0" - "", + "\0" "\xD0" "\xA2" "\xD0" @@ -9840,7 +10670,7 @@ const char* const STRINGS_RU[] = { "\xB8" "\xD0" "\xB9" - "", + "\0" "\xD0" "\xA1" "\xD1" @@ -9855,7 +10685,7 @@ const char* const STRINGS_RU[] = { "\xB8" "\xD0" "\xB9" - "", + "\0" "\xD0" "\xA2" "\xD0" @@ -9870,7 +10700,7 @@ const char* const STRINGS_RU[] = { "\x8B" "\xD0" "\xB9" - "", + "\0" "\xD0" "\x9A" "\xD0" @@ -9881,7 +10711,7 @@ const char* const STRINGS_RU[] = { "\xB3" "\xD0" "\xB0" - "", + "\0" "\xD0" "\x93" "\xD0" @@ -9892,8 +10722,18 @@ const char* const STRINGS_RU[] = { "\xB2" "\xD0" "\xB0" - "", - "Chapter 21", + "\0" + "\xD0" + "\x93" + "\xD0" + "\xBB" + "\xD0" + "\xB0" + "\xD0" + "\xB2" + "\xD0" + "\xB0" + " 21\0" "\xD0" "\x9D" "\xD0" @@ -9920,7 +10760,7 @@ const char* const STRINGS_RU[] = { "\xB3" "\xD0" "\xB8" - "", + "\0" "\xD0" "\x9F" "\xD1" @@ -9945,7 +10785,7 @@ const char* const STRINGS_RU[] = { "\x82" "\xD1" "\x80" - "", + "\0" "\xD0" "\x97" "\xD0" @@ -9962,7 +10802,7 @@ const char* const STRINGS_RU[] = { "\xB8" "\xD0" "\xB5" - "", + "\0" "\xD0" "\x91" "\xD0" @@ -9977,7 +10817,7 @@ const char* const STRINGS_RU[] = { "\xB5" "\xD1" "\x8F" - "", + "\0" "\xD0" "\xA2" "\xD0" @@ -10006,7 +10846,7 @@ const char* const STRINGS_RU[] = { "\x81" "\xD0" "\xB0" - "", + "\0" "\xD0" "\x9A" "\xD0" @@ -10031,9 +10871,9 @@ const char* const STRINGS_RU[] = { "\xB0" "\xD1" "\x8F" - "", - "Lyra", - "Lyra Extended", + "\0" + "Lyra\0" + "Lyra Extended\0" "\xD0" "\x9A" "\xD0" @@ -10076,7 +10916,7 @@ const char* const STRINGS_RU[] = { "\xB8" "\xD1" "\x8F" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -10131,7 +10971,7 @@ const char* const STRINGS_RU[] = { "\xBA" "\xD0" "\xB8" - "", + "\0" "OPDS \xD0" "\xB1" "\xD1" @@ -10146,7 +10986,7 @@ const char* const STRINGS_RU[] = { "\xB5" "\xD1" "\x80" - "", + "\0" "\xD0" "\x9E" "\xD0" @@ -10169,7 +11009,9 @@ const char* const STRINGS_RU[] = { "\xBE" "\xD0" "\xB9" - "", + "\0" + "Page overlay\0" + "Recents\0" "\xD0" "\x9D" "\xD0" @@ -10196,7 +11038,7 @@ const char* const STRINGS_RU[] = { "\xB3" "\xD0" "\xB8" - "", + "\0" "\xD0" "\x9D" "\xD0" @@ -10227,7 +11069,7 @@ const char* const STRINGS_RU[] = { "\xB8" "\xD0" "\xB3" - "", + "\0" "\xD0" "\x98" "\xD1" @@ -10292,7 +11134,7 @@ const char* const STRINGS_RU[] = { "\x87" "\xD1" "\x83" - " Calibre", + " Calibre\0" "\xD0" "\x97" "\xD0" @@ -10363,7 +11205,7 @@ const char* const STRINGS_RU[] = { "\xBB" "\xD1" "\x8C" - "?", + "?\0" "\xD0" "\x97" "\xD0" @@ -10376,7 +11218,7 @@ const char* const STRINGS_RU[] = { "\x82" "\xD1" "\x8C" - "", + "\0" "\xD0" "\x97" "\xD0" @@ -10389,7 +11231,7 @@ const char* const STRINGS_RU[] = { "\x81" "\xD0" "\xBA" - " Calibre...", + " Calibre...\0" "\xD0" "\x9D" "\xD0" @@ -10408,7 +11250,7 @@ const char* const STRINGS_RU[] = { "\xBA" "\xD0" "\xB0" - "", + "\0" "\xD0" "\xA1" "\xD1" @@ -10421,7 +11263,7 @@ const char* const STRINGS_RU[] = { "\x83" "\xD1" "\x81" - "", + "\0" "\xD0" "\x9E" "\xD1" @@ -10438,7 +11280,7 @@ const char* const STRINGS_RU[] = { "\x82" "\xD1" "\x8C" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -10461,7 +11303,7 @@ const char* const STRINGS_RU[] = { "\xB8" "\xD1" "\x8E" - "", + "\0" "\xD0" "\x9D" "\xD0" @@ -10518,7 +11360,7 @@ const char* const STRINGS_RU[] = { "\xBA" "\xD0" "\xB8" - "", + "\0" "\xD0" "\x9D" "\xD0" @@ -10541,7 +11383,7 @@ const char* const STRINGS_RU[] = { "\xBD" "\xD0" "\xBE" - "", + "\0" "\xD0" "\xA3" "\xD0" @@ -10566,7 +11408,7 @@ const char* const STRINGS_RU[] = { "\xBD" "\xD0" "\xBE" - "", + "\0" "\xD0" "\x91" "\xD0" @@ -10641,7 +11483,7 @@ const char* const STRINGS_RU[] = { "\xB8" "\xD1" "\x8E" - "", + "\0" "\xD0" "\x91" "\xD0" @@ -10720,7 +11562,7 @@ const char* const STRINGS_RU[] = { "\xB8" "\xD0" "\xB5" - "", + "\0" "\xD0" "\x9D" "\xD0" @@ -10745,7 +11587,7 @@ const char* const STRINGS_RU[] = { "\xBA" "\xD0" "\xB0" - ")", + ")\0" "\xD0" "\x9F" "\xD0" @@ -10782,7 +11624,7 @@ const char* const STRINGS_RU[] = { "\xBA" "\xD0" "\xB0" - ")", + ")\0" "\xD0" "\x92" "\xD0" @@ -10807,7 +11649,7 @@ const char* const STRINGS_RU[] = { "\xBA" "\xD0" "\xB0" - ")", + ")\0" "\xD0" "\x92" "\xD0" @@ -10834,7 +11676,7 @@ const char* const STRINGS_RU[] = { "\xBA" "\xD0" "\xB0" - ")", + ")\0" "\xD0" "\x9F" "\xD0" @@ -10851,7 +11693,7 @@ const char* const STRINGS_RU[] = { "\xB8" " \xD0" "\xBA" - " %", + " %\0" "\xD0" "\x9D" "\xD0" @@ -10870,7 +11712,7 @@ const char* const STRINGS_RU[] = { "\x83" "\xD1" "\x8E" - "", + "\0" "\xD0" "\xA1" "\xD0" @@ -10919,7 +11761,7 @@ const char* const STRINGS_RU[] = { "\x81" "\xD1" "\x81" - "", + "\0" "\xD0" "\xA3" "\xD0" @@ -10950,7 +11792,7 @@ const char* const STRINGS_RU[] = { "\xB3" "\xD0" "\xB8" - "", + "\0" "\xD0" "\xA3" "\xD0" @@ -10965,7 +11807,8 @@ const char* const STRINGS_RU[] = { "\x82" "\xD1" "\x8C" - "", + "\0" + "Remove\0" "\xD0" "\x9F" "\xD0" @@ -11016,7 +11859,7 @@ const char* const STRINGS_RU[] = { "\xB4" "\xD0" "\xB0" - "", + "\0" "\xD0" "\x93" "\xD0" @@ -11027,14 +11870,14 @@ const char* const STRINGS_RU[] = { "\xB2" "\xD0" "\xB0" - ":", + ":\0" "\xD1" "\x81" "\xD1" "\x82" "\xD1" "\x80" - ". |", + ". |\0" "\xD0" "\x9A" "\xD0" @@ -11045,7 +11888,7 @@ const char* const STRINGS_RU[] = { "\xB3" "\xD0" "\xB0" - ":", + ":\0" "\xD0" "\x94" "\xD0" @@ -11070,7 +11913,7 @@ const char* const STRINGS_RU[] = { "\xB5" " /opds \xD0" "\xBA" - " URL", + " URL\0" "\xD0" "\x92" "\xD0" @@ -11111,7 +11954,7 @@ const char* const STRINGS_RU[] = { "\xB8" "\xD0" "\xB7" - ": 10%", + ": 10%\0" "\xD0" "\xA1" "\xD0" @@ -11152,7 +11995,7 @@ const char* const STRINGS_RU[] = { "\xBD" "\xD0" "\xB8" - "...", + "...\0" "\xD0" "\xA0" "\xD0" @@ -11191,7 +12034,7 @@ const char* const STRINGS_RU[] = { "\x82" "\xD0" "\xB0" - "...", + "...\0" "\xD0" "\x9D" "\xD0" @@ -11252,7 +12095,7 @@ const char* const STRINGS_RU[] = { "\x82" "\xD0" "\xB0" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -11309,7 +12152,9 @@ const char* const STRINGS_RU[] = { "\x81" "\xD0" "\xB0" - "...", + "...\0" + "Mapping remote position...\0" + "Calculating local position...\0" "\xD0" "\x9E" "\xD1" @@ -11344,7 +12189,7 @@ const char* const STRINGS_RU[] = { "\x81" "\xD0" "\xB0" - "...", + "...\0" "\xD0" "\x94" "\xD0" @@ -11395,7 +12240,7 @@ const char* const STRINGS_RU[] = { "\xBD" "\xD1" "\x8B" - "", + "\0" "\xD0" "\x9D" "\xD0" @@ -11450,7 +12295,7 @@ const char* const STRINGS_RU[] = { "\xB0" "\xD1" "\x85" - "", + "\0" "\xD0" "\x9F" "\xD1" @@ -11479,7 +12324,7 @@ const char* const STRINGS_RU[] = { "\xB5" "\xD0" "\xBD" - "!", + "!\0" "\xD0" "\xA3" "\xD0" @@ -11498,7 +12343,7 @@ const char* const STRINGS_RU[] = { "\x8B" "\xD0" "\xB9" - ":", + ":\0" "\xD0" "\x9B" "\xD0" @@ -11517,7 +12362,7 @@ const char* const STRINGS_RU[] = { "\x8B" "\xD0" "\xB9" - ":", + ":\0" "\xD0" "\xA1" "\xD1" @@ -11544,7 +12389,7 @@ const char* const STRINGS_RU[] = { "\xB3" "\xD0" "\xBE" - "", + "\0" "\xD0" "\xA1" "\xD1" @@ -11561,12 +12406,12 @@ const char* const STRINGS_RU[] = { "\x86" "\xD0" "\xB0" - " %d/%d", + " %d/%d\0" "\xD0" "\x9E" "\xD1" "\x82" - ": %s", + ": %s\0" "\xD0" "\x9F" "\xD1" @@ -11619,7 +12464,7 @@ const char* const STRINGS_RU[] = { "\x81" "\xD1" "\x81" - "", + "\0" "\xD0" "\x9E" "\xD1" @@ -11672,7 +12517,7 @@ const char* const STRINGS_RU[] = { "\x81" "\xD1" "\x81" - "", + "\0" "\xD0" "\xA3" "\xD0" @@ -11723,7 +12568,7 @@ const char* const STRINGS_RU[] = { "\xB5" "\xD0" "\xBD" - "", + "\0" "\xD0" "\x9E" "\xD1" @@ -11770,7 +12615,7 @@ const char* const STRINGS_RU[] = { "\xB8" "\xD1" "\x8E" - "?", + "?\0" "\xD0" "\x9F" "\xD1" @@ -11805,7 +12650,7 @@ const char* const STRINGS_RU[] = { "\xB5" "\xD0" "\xBD" - "!", + "!\0" "\xD0" "\x9E" "\xD1" @@ -11844,7 +12689,7 @@ const char* const STRINGS_RU[] = { "\xB8" "\xD0" "\xB8" - "", + "\0" "\xD0" "\xA0" "\xD0" @@ -11857,7 +12702,7 @@ const char* const STRINGS_RU[] = { "\xB5" "\xD0" "\xBB" - "", + "\0" "\xD0" "\x9E" "\xD1" @@ -11876,7 +12721,7 @@ const char* const STRINGS_RU[] = { "\x82" "\xD1" "\x8C" - "", + "\0" "\xD0" "\xA1" "\xD1" @@ -11897,7 +12742,7 @@ const char* const STRINGS_RU[] = { "\xB3" "\xD0" "\xB8" - "", + "\0" "\xD0" "\x92" "\xD1" @@ -11928,7 +12773,7 @@ const char* const STRINGS_RU[] = { "\xBB" "\xD1" "\x8C" - "", + "\0" "URL OPDS \xD1" "\x81" "\xD0" @@ -11943,10 +12788,100 @@ const char* const STRINGS_RU[] = { "\x80" "\xD0" "\xB0" - "", - "Footnotes", - "No footnotes on this page", - "[link]", + "\0" + "\xD0" + "\x9F" + "\xD1" + "\x80" + "\xD0" + "\xB8" + "\xD0" + "\xBC" + "\xD0" + "\xB5" + "\xD1" + "\x87" + "\xD0" + "\xB0" + "\xD0" + "\xBD" + "\xD0" + "\xB8" + "\xD1" + "\x8F" + "\0" + "\xD0" + "\x9D" + "\xD0" + "\xB0" + " \xD0" + "\xB4" + "\xD0" + "\xB0" + "\xD0" + "\xBD" + "\xD0" + "\xBD" + "\xD0" + "\xBE" + "\xD0" + "\xB9" + " \xD1" + "\x81" + "\xD1" + "\x82" + "\xD1" + "\x80" + "\xD0" + "\xB0" + "\xD0" + "\xBD" + "\xD0" + "\xB8" + "\xD1" + "\x86" + "\xD0" + "\xB5" + " \xD0" + "\xBD" + "\xD0" + "\xB5" + "\xD1" + "\x82" + " \xD0" + "\xBF" + "\xD1" + "\x80" + "\xD0" + "\xB8" + "\xD0" + "\xBC" + "\xD0" + "\xB5" + "\xD1" + "\x87" + "\xD0" + "\xB0" + "\xD0" + "\xBD" + "\xD0" + "\xB8" + "\xD0" + "\xB9" + "\0" + "[\xD1" + "\x81" + "\xD1" + "\x81" + "\xD1" + "\x8B" + "\xD0" + "\xBB" + "\xD0" + "\xBA" + "\xD0" + "\xB0" + "]\0" "\xD0" "\xA1" "\xD0" @@ -11985,159 +12920,300 @@ const char* const STRINGS_RU[] = { "\xBD" "\xD0" "\xB0" - "", - "Auto Turn Enabled: ", - "Auto Turn (Pages Per Minute)", - "Sleep Screen Info Overlay", - "White", - "Gray", - "Black", - "Off", - "Reading progress: Page %lu/%u - %.0f%%", - "Reading progress: Page %lu", - " - Page %d/%d - %.0f%% read", + "\0" + "\xD0" + "\x90" + "\xD0" + "\xB2" + "\xD1" + "\x82" + "\xD0" + "\xBE" + "-\xD0" + "\xBF" + "\xD0" + "\xBE" + "\xD0" + "\xB2" + "\xD0" + "\xBE" + "\xD1" + "\x80" + "\xD0" + "\xBE" + "\xD1" + "\x82" + " \xD0" + "\xB2" + "\xD0" + "\xBA" + "\xD0" + "\xBB" + "\xD1" + "\x8E" + "\xD1" + "\x87" + "\xD1" + "\x91" + "\xD0" + "\xBD" + ": \0" + "\xD0" + "\x90" + "\xD0" + "\xB2" + "\xD1" + "\x82" + "\xD0" + "\xBE" + "-\xD0" + "\xBF" + "\xD0" + "\xBE" + "\xD0" + "\xB2" + "\xD0" + "\xBE" + "\xD1" + "\x80" + "\xD0" + "\xBE" + "\xD1" + "\x82" + " (\xD0" + "\xA1" + "\xD1" + "\x82" + "\xD1" + "\x80" + "\xD0" + "\xB0" + "\xD0" + "\xBD" + "\xD0" + "\xB8" + "\xD1" + "\x86" + " \xD0" + "\xB2" + " \xD0" + "\xBC" + "\xD0" + "\xB8" + "\xD0" + "\xBD" + "\xD1" + "\x83" + "\xD1" + "\x82" + "\xD1" + "\x83" + ")\0" + "Info\0" + "Author\0" + "Series\0" + "Size\0" + "Sleep Screen Info Overlay\0" + "White\0" + "Gray\0" + "Black\0" + "Off\0" + "Reading progress: Page %lu/%u - %.0f%%\0" + "Reading progress: Page %lu\0" + " - Page %d/%d - %.0f%% read\0" + "System Information\0" + "Failed to load XTC file\0" + "Failed to load EPUB file\0" + "FW version\0" + "Chip\0" + "CPU\0" + "MHz\0" + "Free RAM\0" + "Min free\0" + "Max block\0" + "Flash used\0" + "Uptime\0" + "Charging\0" + "Gathering data...\0" + "Reading...\0" +; +// clang-format on + +const uint16_t OFFSETS_RU[] = { + 0, 11, 28, 52, 77, 101, 131, 150, 184, 219, 254, 285, + 313, 329, 351, 375, 396, 422, 469, 491, 522, 542, 559, 574, + 603, 634, 662, 688, 710, 746, 769, 802, 861, 898, 939, 1005, + 1078, 1120, 1157, 1226, 1283, 1298, 1341, 1360, 1383, 1429, 1445, 1471, + 1505, 1509, 1529, 1547, 1602, 1660, 1741, 1820, 1831, 1844, 1865, 1880, + 1898, 1931, 1961, 1999, 2035, 2058, 2075, 2092, 2105, 2137, 2173, 2207, + 2235, 2287, 2311, 2358, 2398, 2420, 2458, 2482, 2500, 2543, 2553, 2568, + 2603, 2609, 2622, 2631, 2635, 2639, 2653, 2679, 2705, 2726, 2747, 2769, + 2790, 2820, 2844, 2857, 2879, 2892, 2909, 2925, 2947, 2967, 2977, 2993, + 3010, 3032, 3044, 3061, 3071, 3085, 3103, 3126, 3138, 3152, 3165, 3201, + 3237, 3277, 3286, 3323, 3355, 3368, 3414, 3462, 3485, 3526, 3548, 3566, + 3583, 3626, 3680, 3706, 3745, 3777, 3826, 3862, 3871, 3886, 3916, 3936, + 3959, 3972, 4037, 4103, 4172, 4216, 4243, 4263, 4297, 4310, 4354, 4416, + 4429, 4444, 4453, 4468, 4475, 4490, 4507, 4522, 4551, 4564, 4589, 4596, + 4625, 4640, 4662, 4679, 4702, 4726, 4750, 4759, 4769, 4783, 4802, 4817, + 4832, 4858, 4869, 4884, 4899, 4917, 4944, 4962, 4991, 5000, 5009, 5019, + 5029, 5039, 5049, 5059, 5070, 5081, 5092, 5113, 5154, 5204, 5233, 5258, + 5282, 5310, 5344, 5384, 5461, 5494, 5514, 5544, 5558, 5576, 5617, 5665, + 5717, 5727, 5742, 5780, 5823, 5874, 5888, 5902, 5916, 5934, 5949, 5962, + 5973, 5985, 5998, 6010, 6025, 6040, 6059, 6064, 6071, 6088, 6101, 6108, + 6117, 6145, 6156, 6169, 6180, 6189, 6192, 6225, 6242, 6293, 6340, 6372, + 6404, 6459, 6472, 6487, 6502, 6513, 6524, 6538, 6566, 6591, 6608, 6623, + 6653, 6678, 6683, 6697, 6741, 6798, 6818, 6844, 6857, 6865, 6893, 6926, + 7001, 7078, 7091, 7115, 7134, 7147, 7164, 7188, 7249, 7273, 7299, 7380, + 7464, 7495, 7538, 7569, 7602, 7622, 7642, 7692, 7725, 7740, 7747, 7805, + 7817, 7828, 7840, 7885, 7939, 7984, 8028, 8093, 8155, 8182, 8212, 8251, + 8306, 8373, 8404, 8424, 8444, 8483, 8506, 8515, 8570, 8625, 8679, 8729, + 8766, 8806, 8819, 8838, 8860, 8892, 8916, 8937, 9000, 9015, 9056, 9097, + 9154, 9159, 9166, 9173, 9178, 9204, 9210, 9215, 9221, 9225, 9264, 9291, + 9319, 9338, 9362, 9387, 9398, 9403, 9407, 9411, 9420, 9429, 9439, 9450, + 9457, 9466, 9484, }; -const char* const STRINGS_SV[] = { - "Crosspoint", - "STARTAR", - "VILA", +// clang-format off +const char STRINGS_SV_DATA[] = + "Crosspoint\0" + "STARTAR\0" + "VILA\0" "G\xC3" "\xA5" - "r i vila", + "r i vila\0" "Bl\xC3" "\xA4" "ddra filer\xE2" "\x80" "\xA6" - "", + "\0" "Fil\xC3" "\xB6" "verf\xC3" "\xB6" - "ring", + "ring\0" "Inst\xC3" "\xA4" - "llningar", + "llningar\0" "Forts\xC3" "\xA4" "tt l\xC3" "\xA4" - "sa", + "sa\0" "Ingen \xC3" "\xB6" - "ppen bok", + "ppen bok\0" "B\xC3" "\xB6" "rja l\xC3" "\xA4" - "sa nedan", - "Inga filer hittades", + "sa nedan\0" + "Inga filer hittades\0" "V\xC3" "\xA4" - "lj kapitel", - "Inga kapitel", + "lj kapitel\0" + "Inga kapitel\0" "Slutet p\xC3" "\xA5" - " boken", - "Tomt kapitel", - "Indexerar", - "Minnesfel", - "Sidladdningsfel", - "Tom fil", + " boken\0" + "Tomt kapitel\0" + "Indexerar\0" + "Minnesfel\0" + "Sidladdningsfel\0" + "Tom fil\0" "Utanf\xC3" "\xB6" "r gr\xC3" "\xA4" - "nserna", + "nserna\0" "Laddar\xE2" "\x80" "\xA6" - "", - "Laddar", + "\0" + "Laddar\0" "Tr\xC3" "\xA5" "dl\xC3" "\xB6" "sa n\xC3" "\xA4" - "tverk", + "tverk\0" "Inga n\xC3" "\xA4" - "tverk funna", + "tverk funna\0" "%zu n\xC3" "\xA4" - "tverk funna", + "tverk funna\0" "Scannar\xE2" "\x80" "\xA6" - "", + "\0" "Ansluter\xE2" "\x80" "\xA6" - "", - "Ansluten!", - "Anslutning misslyckades", + "\0" + "Ansluten!\0" + "Anslutning misslyckades\0" "Gl\xC3" "\xB6" "m n\xC3" "\xA4" - "tverk?", + "tverk?\0" "Spara l\xC3" "\xB6" "senord till n\xC3" "\xA4" "sta g\xC3" "\xA5" - "ng?", + "ng?\0" "Tryck OK f\xC3" "\xB6" - "r att skanna igen", + "r att skanna igen\0" "Anslut till ett n\xC3" "\xA4" - "tverk", - "Skapa surfzon", + "tverk\0" + "Skapa surfzon\0" "Anslut till ett befintligt tr\xC3" "\xA5" "dl\xC3" "\xB6" "st n\xC3" "\xA4" - "tverk", + "tverk\0" "Skapa ett tr\xC3" "\xA5" "dl\xC3" "\xB6" "st n\xC3" "\xA4" - "tverk andra kan ansluta till", + "tverk andra kan ansluta till\0" "Startar surfzon\xE2" "\x80" "\xA6" - "", + "\0" "Surfzonsl\xC3" "\xA4" - "ge", + "ge\0" "Anslut din enhet till detta tr\xC3" "\xA5" "dl\xC3" "\xB6" "sa n\xC3" "\xA4" - "tverk", + "tverk\0" "\xC3" "\x96" - "ppna denna adress i din browser", - "eller http://", - "eller skanna QR-kod med din telefon:", + "ppna denna adress i din browser\0" + "eller http://\0" + "eller skanna QR-kod med din telefon:\0" "Calibre Tr\xC3" "\xA5" "dl\xC3" "\xB6" - "st", - "Calibre webbadress", - "* = Krypterad | + = Sparad", - "MAC-adress:", + "st\0" + "Calibre webbadress\0" + "* = Krypterad | + = Sparad\0" + "MAC-adress:\0" "Kontrollerar tr\xC3" "\xA5" "dl\xC3" @@ -12147,28 +13223,28 @@ const char* const STRINGS_SV[] = { "tverk\xE2" "\x80" "\xA6" - "", + "\0" "Skriv in WiFi-l\xC3" "\xB6" - "senord", - "till ", - "Tar emot:", - "Mottaget:", - "1) Installera CrossPoint Reader plugin", + "senord\0" + "till \0" + "Tar emot:\0" + "Mottaget:\0" + "1) Installera CrossPoint Reader plugin\0" "2) Anslut till samma tr\xC3" "\xA5" "dl\xC3" "\xB6" "sa n\xC3" "\xA4" - "tverk", + "tverk\0" "3) I Calibre: \xE2" "\x80" "\x9D" "Skicka till enhet\xE2" "\x80" "\x9D" - "", + "\0" "\xE2" "\x80" "\x9D" @@ -12183,248 +13259,287 @@ const char* const STRINGS_SV[] = { "ndning\xE2" "\x80" "\x9D" - "", + "\0" "Sk\xC3" "\xA4" - "rm", + "rm\0" "L\xC3" "\xA4" - "sare", - "Kontroller", - "System", + "sare\0" + "Kontroller\0" + "System\0" "Vilosk\xC3" "\xA4" - "rm", + "rm\0" "Vilosk\xC3" "\xA4" "rmens omslagsl\xC3" "\xA4" - "ge", + "ge\0" "D\xC3" "\xB6" - "lj batteriprocent", - "Extra paragrafmellanrum", + "lj batteriprocent\0" + "Extra paragrafmellanrum\0" "Textkantutj\xC3" "\xA4" - "mning", - "Bilder", - "Visa", + "mning\0" + "Bilder\0" + "Visa\0" "Platsh\xC3" "\xA5" - "llare", + "llare\0" "D\xC3" "\xB6" - "lj", + "lj\0" + "Create fallback for invalid TOC\0" "Kort str\xC3" "\xB6" - "mknappsklick", + "mknappsklick\0" "L\xC3" "\xA4" - "srikting", + "srikting\0" "Sidoknappslayout (L\xC3" "\xA4" - "sare)", + "sare)\0" "L\xC3" "\xA5" - "ng-tryck Kapitelskippning", + "ng-tryck Kapitelskippning\0" "Eboksl\xC3" "\xA4" - "sarens typsnittsfamilj", + "sarens typsnittsfamilj\0" "Eboksl\xC3" "\xA4" - "sarens typsnittsstorlek", + "sarens typsnittsstorlek\0" "Eboksl\xC3" "\xA4" - "sarens linjemellanrum", + "sarens linjemellanrum\0" "Eboksl\xC3" "\xA4" "sarens sk\xC3" "\xA4" - "rmmarginal", + "rmmarginal\0" "Eboksl\xC3" "\xA4" - "sarens paragraflinjeplacering", - "Avstavning", + "sarens paragrafjustering\0" + "Avstavning\0" "Tid f\xC3" "\xB6" "r att g\xC3" "\xA5" - " i vila", - "Show Hidden Files", - "Uppdateringsfrekvens", - "KOReader-synkronisering", - "Kolla efter uppdateringar", + " i vila\0" + "Visa dolda filer\0" + "Use Clock\0" + "Clock Settings\0" + "Uses more battery; clock may drift\0" + "Clock\0" + "Clock Format\0" + "Timezone\0" + "24h\0" + "12h\0" + "UTC (GMT/BST)\0" + "Central Europe (CET/CEST)\0" + "Eastern Europe (EET/EEST)\0" + "US Eastern (EST/EDT)\0" + "US Central (CST/CDT)\0" + "US Mountain (MST/MDT)\0" + "US Pacific (PST/PDT)\0" + "Australia Eastern (AEST/AEDT)\0" + "New Zealand (NZST/NZDT)\0" + "Russia (MSK)\0" + "South America (UTC-3)\0" + "Gulf (UTC+4)\0" + "India (UTC+5:30)\0" + "SE Asia (UTC+7)\0" + "China/SE Asia (UTC+8)\0" + "Japan/Korea (UTC+9)\0" + "Sync Time\0" + "Detect Timezone\0" + "Syncing clock...\0" + "Detecting timezone...\0" + "Time synced\0" + "Time sync failed\0" + "Drift: %s\0" + "Last sync: %s\0" + "Timezone detected\0" + "Timezone detect failed\0" + "DST: active\0" + "DST: inactive\0" + "DST: unknown\0" + "Uppdateringsfrekvens\0" + "KOReader-synkronisering\0" + "Kolla efter uppdateringar\0" "Spr\xC3" "\xA5" - "k", + "k\0" "Rensa Eboksl\xC3" "\xA4" - "sarens cache", + "sarens cache\0" "Anv\xC3" "\xA4" - "ndarnamn", + "ndarnamn\0" "L\xC3" "\xB6" - "senord", - "Synkronisera serveradress", - "Dokumentmatchning", - "Autentisera ", + "senord\0" + "Synkronisera serveradress\0" + "Dokumentmatchning\0" + "Autentisera \0" "KOReader anv\xC3" "\xA4" - "ndarnamn", + "ndarnamn\0" "KOReader l\xC3" "\xB6" - "senord", - "Filnamn", + "senord\0" + "Filnamn\0" "Bin\xC3" "\xA4" - "r", - "Referenser", + "r\0" + "Referenser\0" "Tr\xC3" "\xA5" "dl\xC3" "\xB6" - "s anslutning misslyckades", + "s anslutning misslyckades\0" "Autentiserar\xE2" "\x80" "\xA6" - "", - "Lyckad autentisering!", - "KORreader autentisering", + "\0" + "Lyckad autentisering!\0" + "KORreader autentisering\0" "KOReader synk \xC3" "\xA4" "r redo att anv\xC3" "\xA4" - "ndas", - "Autentisering misslyckades", - "Klar", - "Detta rensar all cachad bokdata", + "ndas\0" + "Autentisering misslyckades\0" + "Register\0" + "Registering...\0" + "Account created successfully!\0" + "Registration failed\0" + "Username already taken\0" + "Klar\0" + "Detta rensar all cachad bokdata\0" "Alla l\xC3" "\xA4" "sframsteg kommer att f\xC3" "\xB6" - "rsvinna!", + "rsvinna!\0" "B\xC3" "\xB6" "cker kommer att beh\xC3" "\xB6" - "va omindexeras", + "va omindexeras\0" "n\xC3" "\xA4" "r de \xC3" "\xB6" "ppnas p\xC3" "\xA5" - " nytt.", + " nytt.\0" "Rensar cache\xE2" "\x80" "\xA6" - "", - "Cache rensad!", - "objekt raderade", - "misslyckades ", - "Misslyckades att rensa cache", + "\0" + "Cache rensad!\0" + "objekt raderade\0" + "misslyckades \0" + "Misslyckades att rensa cache\0" "Kolla seriell utg\xC3" "\xA5" "ng f\xC3" "\xB6" - "r detaljer", + "r detaljer\0" "M\xC3" "\xB6" - "rk", - "Ljus", - "Valfri", - "Omslag", + "rk\0" + "Ljus\0" + "Valfri\0" + "Omslag\0" "Ingen \xC3" "\xB6" - "ppen bok", - "Passa", + "ppen bok\0" + "Passa\0" "Besk\xC3" "\xA4" - "r", - "Aldrig", + "r\0" + "Aldrig\0" "I Eboksl\xC3" "\xA4" - "sare", - "Alltid", - "Ignorera", - "Vila", + "sare\0" + "Alltid\0" + "Ignorera\0" + "Vila\0" "Sidv\xC3" "\xA4" - "ndning", + "ndning\0" "Portr\xC3" "\xA4" - "tt", - "Landskap medurs", - "Inverterad", - "Landskap moturs", + "tt\0" + "Landskap medurs\0" + "Inverterad\0" + "Landskap moturs\0" "F\xC3" "\xB6" "rra/N\xC3" "\xA4" - "sta", + "sta\0" "N\xC3" "\xA4" "sta/F\xC3" "\xB6" - "rra", - "Bookerly", - "Noto Sans", + "rra\0" + "Bookerly\0" + "Noto Sans\0" "\xC3" "\x96" - "ppen dyslektisk", - "Liten", - "Medium", - "Stor", - "Extra stor", - "Smal", - "Normal", - "Bred", - "R\xC3" - "\xA4" - "ttf\xC3" - "\xA4" - "rdiga", + "ppen dyslektisk\0" + "Liten\0" + "Medium\0" + "Stor\0" + "Extra stor\0" + "Smal\0" + "Normal\0" + "Bred\0" + "Justerad\0" "V\xC3" "\xA4" - "nster", - "Mitten", + "nster\0" + "Mitten\0" "H\xC3" "\xB6" - "ger", - "1 min", - "5 min", - "10 min", - "15 min", - "30 min", - "1 sida", - "5 sidor", - "10 sidor", - "15 sidor", - "30 sidor", - "Uppdatera", + "ger\0" + "1 min\0" + "5 min\0" + "10 min\0" + "15 min\0" + "30 min\0" + "1 sida\0" + "5 sidor\0" + "10 sidor\0" + "15 sidor\0" + "30 sidor\0" + "Uppdatera\0" "S\xC3" "\xB6" "ker uppdatering\xE2" "\x80" "\xA6" - "", + "\0" "Ny uppdatering tillg\xC3" "\xA4" - "nglig!", - "Nuvarande version:", - "Ny version:", + "nglig!\0" + "Nuvarande version:\0" + "Ny version:\0" "Uppdaterar\xE2" "\x80" "\xA6" - "", + "\0" "Ingen uppdatering tillg\xC3" "\xA4" - "nglig", - "Uppdatering misslyckades", + "nglig\0" + "Uppdatering misslyckades\0" "Uppdatering f\xC3" "\xA4" - "rdig", + "rdig\0" "Tryck och h\xC3" "\xA5" "ll str\xC3" @@ -12435,135 +13550,139 @@ const char* const STRINGS_SV[] = { "\xA4" "tta p\xC3" "\xA5" - " igen", - "Inga poster funna", + " igen\0" + "Inga poster funna\0" "Laddar ner\xE2" "\x80" "\xA6" - "", - "Nedladdning misslyckades", - "Fel:", - "Ej namngiven", - "Ingen serveradress konfigurerad", + "\0" + "Nedladdning misslyckades\0" + "Fel:\0" + "Ej namngiven\0" + "Ingen serveradress konfigurerad\0" "Misslyckades att h\xC3" "\xA4" "mta fl\xC3" "\xB6" - "de", + "de\0" "Misslyckades att analysera fl\xC3" "\xB6" - "de", + "de\0" "N\xC3" "\xA4" - "tverk:", - "IP-adress;", - "Fel: Generellt fel", + "tverk:\0" + "IP-adress;\0" + "Fel: Generellt fel\0" "Fel: N\xC3" "\xA4" - "tverk hittades inte", - "Fel: Anslutningstimeout", - "SD-kort", + "tverk hittades inte\0" + "Fel: Anslutningstimeout\0" + "SD-kort\0" "\xC2" "\xAB" - " Bak", + " Bak\0" "\xC2" "\xAB" - " Avsluta", + " Avsluta\0" "\xC2" "\xAB" - " Hem", + " Hem\0" "V\xC3" "\xA4" - "lj ", - "Vald", + "lj \0" + "Vald\0" "V\xC3" "\xA4" - "xla", + "xla\0" "Bekr\xC3" "\xA4" - "fta", - "Avbryt", - "Anslut", + "fta\0" + "Avbryt\0" + "Anslut\0" "\xC3" "\x96" - "ppna", - "Ladda ner", + "ppna\0" + "Ladda ner\0" "F\xC3" "\xB6" "rs\xC3" "\xB6" - "k igen", - "Ja", - "Nej", - "Visa", + "k igen\0" + "Ja\0" + "Nej\0" + "Visa\0" "D\xC3" "\xB6" - "lj", + "lj\0" "P\xC3" "\x85" - "", - "AV", + "\0" + "AV\0" "Inte inst\xC3" "\xA4" - "lld", + "lld\0" "V\xC3" "\xA4" - "nster", + "nster\0" "H\xC3" "\xB6" - "ger", - "Upp", - "Ner", - "Okej", + "ger\0" + "Upp\0" + "Ner\0" + "Okej\0" "Vilosk\xC3" "\xA4" - "rmens omslagsfilter", - "Kontrast", + "rmens omslagsfilter\0" + "Kontrast\0" "Anpassa statusf\xC3" "\xA4" - "lt", - "Antal sidor i kapitel", - "Procentuellt bokframsteg", - "Framstegsindikator", + "lt\0" + "Antal sidor i kapitel\0" + "Procentuellt bokframsteg\0" + "Framstegsindikator\0" "Tjocklek p\xC3" "\xA5" - " framstegsindikator", - "Tunn", - "Mellan", - "Tjock", - "Bok", - "Kapitel", - "Kapitel 21", - "Boktitel", + " framstegsindikator\0" + "Tunn\0" + "Mellan\0" + "Tjock\0" + "Bok\0" + "Kapitel\0" + "Kapitel 21\0" + "Boktitel\0" "F\xC3" "\xB6" - "rhandsgranskning", - "Titel", - "Batteri", + "rhandsgranskning\0" + "Titel\0" + "Batteri\0" "Anv\xC3" "\xA4" "ndargr\xC3" "\xA4" - "nssnittstema", - "Klassisk", - "Lyra", - "Lyra Extended", + "nssnittstema\0" + "Klassisk\0" + "Lyra\0" + "Lyra ut\xC3" + "\xB6" + "kad\0" "Fix f\xC3" "\xB6" - "r solskensmattning", + "r solskensmattning\0" "\xC3" "\x84" - "ndra frontknappar", + "ndra frontknappar\0" "OPDS-webbl\xC3" "\xA4" - "sare", - "Omslag + Valfri", + "sare\0" + "Omslag + Valfri\0" + "Page overlay\0" + "Recents\0" "Senaste b\xC3" "\xB6" - "ckerna", + "ckerna\0" "Inga senaste b\xC3" "\xB6" - "cker", + "cker\0" "Anv\xC3" "\xA4" "nd Calibres tr\xC3" @@ -12574,202 +13693,260 @@ const char* const STRINGS_SV[] = { "\xB6" "verf\xC3" "\xB6" - "ring", + "ring\0" "Gl\xC3" "\xB6" "m n\xC3" "\xA4" "tverk och ta bort sparat l\xC3" "\xB6" - "senord?", + "senord?\0" "Gl\xC3" "\xB6" - "m", + "m\0" "Starar Calibre\xE2" "\x80" "\xA6" - "", + "\0" "Inst\xC3" "\xA4" - "llning", - "Status", - "Rensa", - "Standard", + "llning\0" + "Status\0" + "Rensa\0" + "Standard\0" "Tryck en frontknapp f\xC3" "\xB6" - "r var funktion", - "Otilldelad", - "Redan tilldelad", + "r var funktion\0" + "Otilldelad\0" + "Redan tilldelad\0" "\xC3" "\x96" "versta sidoknappen: \xC3" "\x85" "terst\xC3" "\xA4" - "ll standardlayout", - "Nedre sidoknappen: Avbryt tilldelning", + "ll standardlayout\0" + "Nedre sidoknappen: Avbryt tilldelning\0" "Bak (F\xC3" "\xB6" - "rsta knappen)", + "rsta knappen)\0" "Bekr\xC3" "\xA4" - "fta (Andra knappen)", + "fta (Andra knappen)\0" "V\xC3" "\xA4" - "nster (Tredje knappen)", + "nster (Tredje knappen)\0" "H\xC3" "\xB6" "ger (Fj\xC3" "\xA4" - "rde knappen)", + "rde knappen)\0" "G\xC3" "\xA5" - " till %", + " till %\0" "G\xC3" "\xA5" - " Hem", - "Synkroniseringsframsteg", - "Radera bokcache", - "Radera", - "Visa sida som QR-kod", - "Kapitel:", - " sidor | ", - "Bok:", + " Hem\0" + "Synkroniseringsframsteg\0" + "Radera bokcache\0" + "Radera\0" + "Remove\0" + "Visa sida som QR-kod\0" + "Kapitel:\0" + " sidor | \0" + "Bok:\0" "F\xC3" "\xB6" "r Calibre: l\xC3" "\xA4" - "gg till /opds i din adress", + "gg till /opds i din adress\0" "V\xC3" "\xA4" "nster/H\xC3" "\xB6" - "ger: 1% Upp/Ner 10%", + "ger: 1% Upp/Ner 10%\0" "Synkroniserar tid\xE2" "\x80" "\xA6" - "", + "\0" "Ber\xC3" "\xA4" - "knar dokumenthash", + "knar dokumenthash\0" "Misslyckades att ber\xC3" "\xA4" - "kna dokumenthash", + "kna dokumenthash\0" "H\xC3" "\xA4" "mtar fj\xC3" "\xA4" - "rrframsteg", - "Laddar upp framsteg", + "rrframsteg\0" + "Mapping remote position...\0" + "Calculating local position...\0" + "Laddar upp framsteg\0" "Inga uppgifter inst\xC3" "\xA4" - "llda", + "llda\0" "St\xC3" "\xA4" "ll in KOReaderkonto i Inst\xC3" "\xA4" - "llningar", - "Framsteg funna!", + "llningar\0" + "Framsteg funna!\0" "Fj\xC3" "\xA4" - "rr:", - "Lokalt:", - "Sida %d, %.2f%% totalt", - "Sida %d/%d, %.2f%% totalt", + "rr:\0" + "Lokalt:\0" + "Sida %d, %.2f%% totalt\0" + "Sida %d/%d, %.2f%% totalt\0" " Fr\xC3" "\xA5" - "n: %s", + "n: %s\0" "Anv\xC3" "\xA4" "nd fj\xC3" "\xA4" - "rrframsteg", - "Ladda upp lokala framsteg", + "rrframsteg\0" + "Ladda upp lokala framsteg\0" "Inga fj\xC3" "\xA4" - "rrframsteg funna", - "Ladda upp nuvarande position?", - "Framsteg uppladdade!", - "Synkronisering misslyckades", - "Sektion", - "Uppladdning", - "Bokstil", + "rrframsteg funna\0" + "Ladda upp nuvarande position?\0" + "Framsteg uppladdade!\0" + "Synkronisering misslyckades\0" + "Sektion\0" + "Uppladdning\0" + "Bokstil\0" "Inb\xC3" "\xA4" - "ddad stil", - "OPDS-serveradress", - "Fotnoter", + "ddad stil\0" + "OPDS-serveradress\0" + "Fotnoter\0" "Inga fotnoter p\xC3" "\xA5" " den h\xC3" "\xA4" - "r sidan", + "r sidan\0" "[l\xC3" "\xA4" - "nk]", + "nk]\0" "Ta en sk\xC3" "\xA4" - "rmdump", + "rmdump\0" "Automatisk v\xC3" "\xA4" - "ndning aktiverad: ", + "ndning aktiverad: \0" "Automatisk v\xC3" "\xA4" - "ndning (sidor per minut)", - "Sleep Screen Info Overlay", - "White", - "Gray", - "Black", - "Off", - "Reading progress: Page %lu/%u - %.0f%%", - "Reading progress: Page %lu", - " - Page %d/%d - %.0f%% read", + "ndning (sidor per minut)\0" + "Info\0" + "Author\0" + "Series\0" + "Size\0" + "Sleep Screen Info Overlay\0" + "White\0" + "Gray\0" + "Black\0" + "Off\0" + "Reading progress: Page %lu/%u - %.0f%%\0" + "Reading progress: Page %lu\0" + " - Page %d/%d - %.0f%% read\0" + "System Information\0" + "Failed to load XTC file\0" + "Failed to load EPUB file\0" + "FW version\0" + "Chip\0" + "CPU\0" + "MHz\0" + "Free RAM\0" + "Min free\0" + "Max block\0" + "Flash used\0" + "Uptime\0" + "Charging\0" + "Gathering data...\0" + "Reading...\0" +; +// clang-format on + +const uint16_t OFFSETS_SV[] = { + 0, 11, 19, 24, 36, 54, 70, 85, 101, 118, 137, 157, + 171, 184, 201, 214, 224, 234, 250, 258, 278, 288, 295, 315, + 335, 354, 365, 377, 387, 411, 427, 462, 492, 517, 531, 578, + 631, 650, 664, 712, 746, 760, 797, 816, 835, 862, 874, 910, + 934, 940, 950, 960, 999, 1040, 1078, 1126, 1133, 1141, 1152, 1159, + 1170, 1197, 1218, 1242, 1261, 1268, 1273, 1287, 1293, 1325, 1348, 1360, + 1387, 1416, 1447, 1479, 1509, 1539, 1572, 1583, 1607, 1624, 1634, 1649, + 1684, 1690, 1703, 1712, 1716, 1720, 1734, 1760, 1786, 1807, 1828, 1850, + 1871, 1901, 1925, 1938, 1960, 1973, 1990, 2006, 2028, 2048, 2058, 2074, + 2091, 2113, 2125, 2142, 2152, 2166, 2184, 2207, 2219, 2233, 2246, 2267, + 2291, 2317, 2324, 2351, 2365, 2375, 2401, 2419, 2432, 2455, 2474, 2482, + 2489, 2500, 2534, 2550, 2572, 2596, 2633, 2660, 2669, 2684, 2714, 2734, + 2757, 2762, 2794, 2835, 2874, 2900, 2916, 2930, 2946, 2960, 2989, 3025, + 3031, 3036, 3043, 3050, 3067, 3073, 3081, 3088, 3103, 3110, 3119, 3124, + 3137, 3147, 3163, 3174, 3190, 3204, 3218, 3227, 3237, 3255, 3261, 3268, + 3273, 3284, 3289, 3296, 3301, 3310, 3319, 3326, 3333, 3339, 3345, 3352, + 3359, 3366, 3373, 3381, 3390, 3399, 3408, 3418, 3440, 3469, 3488, 3500, + 3514, 3545, 3570, 3590, 3645, 3663, 3677, 3702, 3707, 3720, 3752, 3783, + 3817, 3827, 3838, 3857, 3885, 3909, 3917, 3924, 3935, 3942, 3949, 3954, + 3961, 3971, 3978, 3985, 3992, 4002, 4016, 4019, 4023, 4028, 4034, 4038, + 4041, 4056, 4065, 4072, 4076, 4080, 4085, 4113, 4122, 4142, 4164, 4189, + 4208, 4240, 4245, 4252, 4258, 4262, 4270, 4281, 4290, 4310, 4316, 4324, + 4350, 4359, 4364, 4377, 4403, 4423, 4440, 4456, 4469, 4477, 4495, 4516, + 4563, 4608, 4614, 4632, 4645, 4652, 4658, 4667, 4705, 4716, 4732, 4781, + 4819, 4841, 4867, 4893, 4918, 4929, 4937, 4961, 4977, 4984, 4991, 5012, + 5021, 5033, 5038, 5082, 5114, 5135, 5158, 5197, 5220, 5247, 5277, 5297, + 5323, 5364, 5380, 5388, 5396, 5419, 5445, 5457, 5480, 5506, 5532, 5562, + 5583, 5611, 5619, 5631, 5639, 5654, 5672, 5681, 5714, 5722, 5739, 5772, + 5811, 5816, 5823, 5830, 5835, 5861, 5867, 5872, 5878, 5882, 5921, 5948, + 5976, 5995, 6019, 6044, 6055, 6060, 6064, 6068, 6077, 6086, 6096, 6107, + 6114, 6123, 6141, }; -const char* const STRINGS_RO[] = { - "CrossPoint", +// clang-format off +const char STRINGS_RO_DATA[] = + "CrossPoint\0" "PORNE\xC5" "\x9E" - "TE", - "REPAUS", + "TE\0" + "REPAUS\0" "Intr\xC4" "\x83" " \xC3" "\xAE" - "n repaus...", + "n repaus...\0" "R\xC4" "\x83" "sfoie\xC5" "\x9F" "te fi\xC5" "\x9F" - "ierele", + "ierele\0" "Transfer de fi\xC5" "\x9F" - "iere", + "iere\0" "Set\xC4" "\x83" - "ri", + "ri\0" "Continu\xC4" "\x83" - " lectura", + " lectura\0" "Nicio carte deschis\xC4" "\x83" - "", + "\0" "\xC3" "\x8E" "ncepe\xC5" "\xA3" - "i lectura", + "i lectura\0" "Nu s-au g\xC4" "\x83" - "sit fi\xC8" - "\x99" - "iere", + "sit fi\xC5" + "\x9F" + "iere\0" "Selecta\xC5" "\xA3" - "i capitolul", - "Niciun capitol", + "i capitolul\0" + "Niciun capitol\0" "Sf\xC3" "\xA2" "r\xC5" @@ -12778,81 +13955,81 @@ const char* const STRINGS_RO[] = { "\x83" "r\xC5" "\xA3" - "ii", - "Capitol gol", + "ii\0" + "Capitol gol\0" "Indexeaz\xC4" "\x83" - "...", - "Eroare de memorie", + "...\0" + "Eroare de memorie\0" "Eroare la \xC3" "\xAE" "nc\xC4" "\x83" - "rcarea paginii", + "rcarea paginii\0" "Fi\xC5" "\x9F" - "ier gol", + "ier gol\0" "Eroare: \xC3" "\x8E" - "n afara limitelor", + "n afara limitelor\0" "Se \xC3" "\xAE" "ncarc\xC4" "\x83" - "...", + "...\0" "Se \xC3" "\xAE" "ncarc\xC4" "\x83" - "...", + "...\0" "Re\xC5" "\xA3" - "ele WiFi", + "ele WiFi\0" "Nu s-au g\xC4" "\x83" "sit re\xC5" "\xA3" - "ele", + "ele\0" "%zu re\xC5" "\xA3" "ele g\xC4" "\x83" - "site", + "site\0" "Scaneaz\xC4" "\x83" - "...", + "...\0" "Se conecteaz\xC4" "\x83" - "...", - "Conectat!", + "...\0" + "Conectat!\0" "Conexiune e\xC5" "\x9F" "uat\xC4" "\x83" - "", + "\0" "Uita\xC5" "\xA3" "i re\xC5" "\xA3" - "eaua?", + "eaua?\0" "Salva\xC5" "\xA3" - "i parola?", + "i parola?\0" "Ap\xC4" "\x83" "sa\xC5" "\xA3" - "i OK pentru a scana din nou", + "i OK pentru a scana din nou\0" "Conecta\xC5" "\xA3" "i-v\xC4" "\x83" " la o re\xC5" "\xA3" - "ea", + "ea\0" "Crea\xC5" "\xA3" - "i un hotspot", + "i un hotspot\0" "Conecta\xC5" "\xA3" "i-v\xC4" @@ -12861,14 +14038,14 @@ const char* const STRINGS_RO[] = { "\xA3" "ea WiFi existent\xC4" "\x83" - "", + "\0" "Crea\xC5" "\xA3" - "i un hotspot WiFi", + "i un hotspot WiFi\0" "Hotspot porne\xC5" "\x9F" - "te...", - "Mod Hotspot", + "te...\0" + "Mod Hotspot\0" "Conecta\xC5" "\xA3" "i-v\xC4" @@ -12877,34 +14054,34 @@ const char* const STRINGS_RO[] = { "\x83" " re\xC5" "\xA3" - "ea WiFi", + "ea WiFi\0" "Deschide\xC5" "\xA3" "i acest URL \xC3" "\xAE" - "n browserul dvs.", - "sau http://", + "n browserul dvs.\0" + "sau http://\0" "sau scana\xC5" "\xA3" - "i codul QR cu telefonul dvs.:", - "Calibre Wireless", - "Calibre URL", - "* = Criptat | + = Salvat", + "i codul QR cu telefonul dvs.:\0" + "Calibre Wireless\0" + "Calibre URL\0" + "* = Criptat | + = Salvat\0" "Adres\xC4" "\x83" - " MAC:", - "Verificare WiFi...", + " MAC:\0" + "Verificare WiFi...\0" "Introduce\xC5" "\xA3" - "i parola WiFi", - "la ", + "i parola WiFi\0" + "la \0" "Se prime\xC5" "\x9F" - "te: ", - "Primite: ", + "te: \0" + "Primite: \0" "1) Instala\xC5" "\xA3" - "i plugin-ul CrossPoint Reader", + "i plugin-ul CrossPoint Reader\0" "2) Fi\xC5" "\xA3" "i \xC3" @@ -12913,42 +14090,45 @@ const char* const STRINGS_RO[] = { "\x9F" "i re\xC5" "\xA3" - "ea WiFi", + "ea WiFi\0" "3) \xC3" "\x8E" "n Calibre: \"Trimite\xC5" "\xA3" - "i la dispozitiv\"", + "i la dispozitiv\"\0" "\"P\xC4" "\x83" "stra\xC5" "\xA3" "i acest ecran deschis \xC3" "\xAE" - "n timpul trimiterii\"", - "Ecran", + "n timpul trimiterii\"\0" + "Ecran\0" "Lectur\xC4" "\x83" - "", - "Controale", - "Sistem", - "Ecran de repaus", + "\0" + "Controale\0" + "Sistem\0" + "Ecran de repaus\0" "Mod ecran de repaus cu copert\xC4" "\x83" - "", - "Ascunde procentul bateriei", + "\0" + "Ascunde procentul bateriei\0" "Spa\xC5" "\xA3" "iere suplimentar\xC4" "\x83" " \xC3" "\xAE" - "ntre paragrafe", - "Anti-Aliasing text", - "Images", - "Display", - "Placeholder", - "Suppress", + "ntre paragrafe\0" + "Anti-Aliasing text\0" + "Imagini\0" + "Afi\xC5" + "\x9F" + "are\0" + "Substituent\0" + "Suprimare\0" + "Create fallback for invalid TOC\0" "Ap\xC4" "\x83" "sare scurt\xC4" @@ -12957,42 +14137,85 @@ const char* const STRINGS_RO[] = { "\xAE" "ntrerup\xC4" "\x83" - "tor", + "tor\0" "Orientare lectur\xC4" "\x83" - "", + "\0" "Aspect butoane laterale (lectur\xC4" "\x83" - ")", + ")\0" "S\xC4" "\x83" "rire capitol la ap\xC4" "\x83" "sare lung\xC4" "\x83" - "", + "\0" "Familie font lectur\xC4" "\x83" - "", - "Dimensiune font", + "\0" + "Dimensiune font\0" "Spa\xC5" "\xA3" "iere \xC3" "\xAE" "ntre r\xC3" "\xA2" - "nduri", + "nduri\0" "Margine ecran lectur\xC4" "\x83" - "", - "Aliniere paragrafe reader", - "Silabisire", + "\0" + "Aliniere paragrafe reader\0" + "Silabisire\0" "Timp p\xC3" "\xA2" "n\xC4" "\x83" - " la repaus", - "Show Hidden Files", + " la repaus\0" + "Afi\xC5" + "\x9F" + "eaz\xC4" + "\x83" + " fi\xC5" + "\x9F" + "ierele ascunse\0" + "Use Clock\0" + "Clock Settings\0" + "Uses more battery; clock may drift\0" + "Clock\0" + "Clock Format\0" + "Timezone\0" + "24h\0" + "12h\0" + "UTC (GMT/BST)\0" + "Central Europe (CET/CEST)\0" + "Eastern Europe (EET/EEST)\0" + "US Eastern (EST/EDT)\0" + "US Central (CST/CDT)\0" + "US Mountain (MST/MDT)\0" + "US Pacific (PST/PDT)\0" + "Australia Eastern (AEST/AEDT)\0" + "New Zealand (NZST/NZDT)\0" + "Russia (MSK)\0" + "South America (UTC-3)\0" + "Gulf (UTC+4)\0" + "India (UTC+5:30)\0" + "SE Asia (UTC+7)\0" + "China/SE Asia (UTC+8)\0" + "Japan/Korea (UTC+9)\0" + "Sync Time\0" + "Detect Timezone\0" + "Syncing clock...\0" + "Detecting timezone...\0" + "Time synced\0" + "Time sync failed\0" + "Drift: %s\0" + "Last sync: %s\0" + "Timezone detected\0" + "Timezone detect failed\0" + "DST: active\0" + "DST: inactive\0" + "DST: unknown\0" "Frecven\xC5" "\xA3" "\xC4" @@ -13001,44 +14224,44 @@ const char* const STRINGS_RO[] = { "\xAE" "mprosp\xC4" "\x83" - "tare", - "Sincronizare KOReader", + "tare\0" + "Sincronizare KOReader\0" "C\xC4" "\x83" "uta\xC5" "\xA3" "i actualiz\xC4" "\x83" - "ri", + "ri\0" "Limb\xC4" "\x83" - "", + "\0" "Goli\xC5" "\xA3" "i cache-ul de lectur\xC4" "\x83" - "", - "Utilizator", + "\0" + "Utilizator\0" "Parol\xC4" "\x83" - "", - "URL server sincronizare", + "\0" + "URL server sincronizare\0" "Coresponden\xC5" "\xA3" "\xC4" "\x83" - " document", - "Autentificare", - "Nume utilizator KOReader", + " document\0" + "Autentificare\0" + "Nume utilizator KOReader\0" "Parol\xC4" "\x83" - " KOReader", + " KOReader\0" "Nume fi\xC5" "\x9F" - "ier", + "ier\0" "Fi\xC5" "\x9F" - "ier binar", + "ier binar\0" "V\xC4" "\x83" " rug\xC4" @@ -13053,172 +14276,177 @@ const char* const STRINGS_RO[] = { "\xA2" "i acredit\xC4" "\x83" - "rile", + "rile\0" "Conexiune WiFi e\xC5" "\x9F" "uat\xC4" "\x83" - "", + "\0" "Se autentific\xC4" "\x83" - "...", + "...\0" "Autentificare reu\xC5" "\x9F" "it\xC4" "\x83" - "!", - "Autentificare KOReader", - "Sincronizare KOReader gata de utilizare", + "!\0" + "Autentificare KOReader\0" + "Sincronizare KOReader gata de utilizare\0" "Autentificare e\xC5" "\x9F" "uat\xC4" "\x83" - "", - "Gata", + "\0" + "Register\0" + "Registering...\0" + "Account created successfully!\0" + "Registration failed\0" + "Username already taken\0" + "Gata\0" "Aceasta va \xC5" "\x9F" "terge tot cache-ul de lectur\xC4" "\x83" - ".", + ".\0" "Tot progresul de lectur\xC4" "\x83" - " va fi pierdut!", + " va fi pierdut!\0" "C\xC4" "\x83" "r\xC5" "\xA3" - "ile vor trebui reindexate", + "ile vor trebui reindexate\0" "c\xC3" "\xA2" - "nd vor fi deschise din nou.", + "nd vor fi deschise din nou.\0" "Se \xC5" "\x9F" - "terge cache-ul...", + "terge cache-ul...\0" "Cache \xC5" "\x9F" - "ters", - "elemente eliminate", + "ters\0" + "elemente eliminate\0" "e\xC5" "\x9F" - "uat", + "uat\0" "\xC5" "\x9F" "tergerea cache-ului a e\xC5" "\x9F" - "uat", + "uat\0" "Verifica\xC5" "\xA3" "i ie\xC5" "\x9F" "irea serial\xC4" "\x83" - " pentru detalii", + " pentru detalii\0" "\xC3" "\x8E" - "ntunecat", - "Luminos", - "Personalizat", + "ntunecat\0" + "Luminos\0" + "Personalizat\0" "Copert\xC4" "\x83" - "", - "Niciunul", - "Potrivit", - "Decupat", + "\0" + "Niciunul\0" + "Potrivit\0" + "Decupat\0" "Niciodat\xC4" "\x83" - "", + "\0" "\xC3" "\x8E" "n lectur\xC4" "\x83" - "", + "\0" "\xC3" "\x8E" - "ntotdeauna", + "ntotdeauna\0" "Ignor\xC4" "\x83" - "", - "Repaus", + "\0" + "Repaus\0" "R\xC4" "\x83" "sfoire pagin\xC4" "\x83" - "", - "Vertical", - "Orizontal dreapta", - "Invers", + "\0" + "Vertical\0" + "Orizontal dreapta\0" + "Invers\0" "Orizontal st\xC3" "\xA2" - "nga", + "nga\0" "\xC3" "\x8E" "nainte/\xC3" "\x8E" - "napoi", + "napoi\0" "\xC3" "\x8E" "napoi/\xC3" "\x8E" - "nainte", - "Bookerly", - "Noto Sans", - "Open Dyslexic", - "Mic", - "Mediu", - "Mare", - "Foarte mare", + "nainte\0" + "Bookerly\0" + "Noto Sans\0" + "Open Dyslexic\0" + "Mic\0" + "Mediu\0" + "Mare\0" + "Foarte mare\0" "Str\xC3" "\xA2" - "ns", - "Normal", - "Larg", - "Aliniere", + "ns\0" + "Normal\0" + "Larg\0" + "Aliniere\0" "St\xC3" "\xA2" - "nga", - "Centru", - "Dreapta", - "1 min", - "5 min", - "10 min", - "15 min", - "30 min", + "nga\0" + "Centru\0" + "Dreapta\0" + "1 min\0" + "5 min\0" + "10 min\0" + "15 min\0" + "30 min\0" "1 pagin\xC4" "\x83" - "", - "5 pagini", - "10 pagini", - "15 pagini", - "30 pagini", - "Actualizare", + "\0" + "5 pagini\0" + "10 pagini\0" + "15 pagini\0" + "30 pagini\0" + "Actualizare\0" "Se verific\xC4" "\x83" " actualiz\xC4" "\x83" - "rile...", + "rile...\0" "Nou\xC4" "\x83" " actualizare disponibil\xC4" "\x83" - "!", + "!\0" "Versiune curent\xC4" "\x83" - ": ", - "Noua versiune: ", + ": \0" + "Noua versiune: \0" "Se actualizeaz\xC4" "\x83" - "...", + "...\0" "Nicio actualizare disponibil\xC4" "\x83" - "", + "\0" "Actualizare e\xC5" "\x9F" "uat\xC4" "\x83" - "", + "\0" "Actualizare complet\xC4" "\x83" - "", + "\0" "Ap\xC4" "\x83" "sa\xC5" @@ -13235,167 +14463,169 @@ const char* const STRINGS_RO[] = { "\xAE" "ntrerup\xC4" "\x83" - "torul pentru a porni din nou", + "torul pentru a porni din nou\0" "Niciun rezultat g\xC4" "\x83" - "sit", + "sit\0" "Se descarc\xC4" "\x83" - "...", + "...\0" "Desc\xC4" "\x83" "rcare e\xC5" "\x9F" "uat\xC4" "\x83" - "", - "Eroare:", + "\0" + "Eroare:\0" "F\xC4" "\x83" "r\xC4" "\x83" - " nume", - "Niciun URL de server configurat", + " nume\0" + "Niciun URL de server configurat\0" "E\xC5" "\x9F" - "ec la preluarea feed-ului", + "ec la preluarea feed-ului\0" "E\xC5" "\x9F" - "ec la analizarea feed-ului", + "ec la analizarea feed-ului\0" "Re\xC5" "\xA3" - "ea: ", + "ea: \0" "Adres\xC4" "\x83" - " IP: ", + " IP: \0" "Eroare: E\xC5" "\x9F" - "ec general", + "ec general\0" "Eroare: Re\xC5" "\xA3" "ea neg\xC4" "\x83" "sit\xC4" "\x83" - "", + "\0" "Eroare: Timp de conectare dep\xC4" "\x83" "\xC5" "\x9F" - "it", - "Card SD", + "it\0" + "Card SD\0" "\xC2" "\xAB" " \xC3" "\x8E" - "napoi", + "napoi\0" "\xC2" "\xAB" " Ie\xC5" "\x9F" - "ire", + "ire\0" "\xC2" "\xAB" " Acas\xC4" "\x83" - "", + "\0" "Selecteaz\xC4" "\x83" - "", - "Selectat", + "\0" + "Selectat\0" "Schimb\xC4" "\x83" - "", + "\0" "Confirm\xC4" "\x83" - "", - "Anulare", - "Conectare", - "Deschidere", + "\0" + "Anulare\0" + "Conectare\0" + "Deschidere\0" "Descarc\xC4" "\x83" - "", + "\0" "Re\xC3" "\xAE" - "ncercare", - "Da", - "Nu", - "Afi\xC8" - "\x99" + "ncercare\0" + "Da\0" + "Nu\0" + "Afi\xC5" + "\x9F" "eaz\xC4" "\x83" - "", - "Ascunde", - "Pornit", - "Oprit", - "Neconfigurat", + "\0" + "Ascunde\0" + "Pornit\0" + "Oprit\0" + "Neconfigurat\0" "St\xC3" "\xA2" - "nga", - "Dreapta", - "Sus", - "Jos", - "OK", - "Filtru ecran de repaus", - "Contrast", + "nga\0" + "Dreapta\0" + "Sus\0" + "Jos\0" + "OK\0" + "Filtru ecran de repaus\0" + "Contrast\0" "Customiza\xC5" "\xA3" - "i bara de stare", + "i bara de stare\0" "Num\xC4" "\x83" "r de pagini \xC3" "\xAE" - "n capitol", - "Progres carte procentual", + "n capitol\0" + "Progres carte procentual\0" "Bar\xC4" "\x83" - " de progres", + " de progres\0" "Grosime bar\xC4" "\x83" - " de progres", + " de progres\0" "Sub\xC5" "\xA3" - "ire", - "Medie", + "ire\0" + "Medie\0" "Groas\xC4" "\x83" - "", - "Carte", - "Capitol", - "Capitolul 21", + "\0" + "Carte\0" + "Capitol\0" + "Capitolul 21\0" "Titlul c\xC4" "\x83" "r\xC5" "\xA3" - "ii", - "Previzualizare", - "Titlu", - "Baterie", - "Tema UI", - "Clasic", - "Lyra", - "Lyra Extended", + "ii\0" + "Previzualizare\0" + "Titlu\0" + "Baterie\0" + "Tema UI\0" + "Clasic\0" + "Lyra\0" + "Lyra Extended\0" "Corec\xC5" "\xA3" "ie estompare lumin\xC4" "\x83" - "", - "Remapare butoane frontale", - "Browser OPDS", + "\0" + "Remapare butoane frontale\0" + "Browser OPDS\0" "Copert\xC4" "\x83" - " + Personalizat", + " + Personalizat\0" + "Page overlay\0" + "Recents\0" "C\xC4" "\x83" "r\xC5" "\xA3" - "i recente", + "i recente\0" "Nicio carte recent\xC4" "\x83" - "", + "\0" "Utiliza\xC5" "\xA3" - "i transferurile wireless ale dispozitivului Calibre", + "i transferurile wireless ale dispozitivului Calibre\0" "Uita\xC5" "\xA3" "i re\xC5" @@ -13406,121 +14636,124 @@ const char* const STRINGS_RO[] = { "\xA3" "i parola salvat\xC4" "\x83" - "?", + "?\0" "Uita\xC5" "\xA3" - "i", - "Pornirea Calibre...", - "Configurare", - "Stare", + "i\0" + "Pornirea Calibre...\0" + "Configurare\0" + "Stare\0" "\xC5" "\x9F" - "tergere", - "Implicit", + "tergere\0" + "Implicit\0" "Ap\xC4" "\x83" "sa\xC5" "\xA3" - "i un buton frontal pentru fiecare rol", - "Neatribuit", - "Deja atribuit", + "i un buton frontal pentru fiecare rol\0" + "Neatribuit\0" + "Deja atribuit\0" "Buton lateral Sus: Reseta\xC5" "\xA3" - "i la aspectul implicit", + "i la aspectul implicit\0" "Buton lateral Jos: Anula\xC5" "\xA3" - "i remaparea", + "i remaparea\0" "\xC3" "\x8E" - "napoi (butonul 1)", - "Confirmare (butonul 2)", + "napoi (butonul 1)\0" + "Confirmare (butonul 2)\0" "St\xC3" "\xA2" - "nga (butonul 3)", - "Dreapta (butonul 4)", + "nga (butonul 3)\0" + "Dreapta (butonul 4)\0" "S\xC4" "\x83" "ri\xC5" "\xA3" - "i la %", + "i la %\0" "Acas\xC4" "\x83" - "", - "Progres sincronizare", + "\0" + "Progres sincronizare\0" "\xC5" "\x9E" "tergere cache c\xC4" "\x83" "r\xC5" "\xA3" - "i", + "i\0" "\xC5" "\x9E" "terge\xC8" "\x9B" - "i", - "Afi\xC8" - "\x99" + "i\0" + "Remove\0" + "Afi\xC5" + "\x9F" "a\xC8" "\x9B" - "i pagina ca cod QR", - "Capitol: ", - " pagini | ", - "Carte: ", + "i pagina ca cod QR\0" + "Capitol: \0" + " pagini | \0" + "Carte: \0" "Pentru Calibre, ad\xC4" "\x83" "uga\xC5" "\xA3" - "i /opds la URL", + "i /opds la URL\0" "St\xC3" "\xA2" - "nga/Dreapta: 1% Sus/Jos: 10%", - "Timp de sincronizare...", - "Calcularea hash-ului documentului...", + "nga/Dreapta: 1% Sus/Jos: 10%\0" + "Timp de sincronizare...\0" + "Calcularea hash-ului documentului...\0" "E\xC5" "\x9F" - "ec la calcularea hash-ului documentului", + "ec la calcularea hash-ului documentului\0" "Preluarea progresului de la distan\xC5" "\xA3" "\xC4" "\x83" - "...", + "...\0" + "Mapping remote position...\0" + "Calculating local position...\0" "\xC3" "\x8E" "nc\xC4" "\x83" - "rcarea progresului...", + "rcarea progresului...\0" "Nicio acreditare configurat\xC4" "\x83" - "", + "\0" "Configura\xC5" "\xA3" "i contul KOReader \xC3" "\xAE" "n set\xC4" "\x83" - "ri", + "ri\0" "Progres g\xC4" "\x83" - "sit!", - "Remote:", - "Local:", - "Pagina %d, %.2f%% din total", - "Pagina %d/%d, %.2f%% din total", - " De la: %s", + "sit!\0" + "Remote:\0" + "Local:\0" + "Pagina %d, %.2f%% din total\0" + "Pagina %d/%d, %.2f%% din total\0" + " De la: %s\0" "Aplic\xC4" "\x83" - " progresul remote", + " progresul remote\0" "\xC3" "\x8E" "nc\xC4" "\x83" "rca\xC5" "\xA3" - "i progresul local", + "i progresul local\0" "Niciun progres remote g\xC4" "\x83" - "sit", + "sit\0" "\xC3" "\x8E" "nc\xC4" @@ -13531,647 +14764,805 @@ const char* const STRINGS_RO[] = { "\xA3" "ia curent\xC4" "\x83" - "?", + "?\0" "Progres \xC3" "\xAE" "nc\xC4" "\x83" - "rcat!", + "rcat!\0" "Sincronizare e\xC5" "\x9F" "uat\xC4" "\x83" - "", + "\0" "Sec\xC5" "\xA3" - "iune ", + "iune \0" "\xC3" "\x8E" "nc\xC4" "\x83" - "rcare", + "rcare\0" "Stilul c\xC4" "\x83" "r\xC5" "\xA3" - "ii", + "ii\0" "Stil \xC3" "\xAE" - "ncorporat", - "URL server OPDS", - "Note de subsol", + "ncorporat\0" + "URL server OPDS\0" + "Note de subsol\0" "Nicio not\xC4" "\x83" - " de subsol", - "[link]", + " de subsol\0" + "[link]\0" "Captur\xC4" "\x83" - " ecran", + " ecran\0" "R\xC4" "\x83" "sfoire automat\xC4" "\x83" - ": ", - "Pagini pe minut", - "Sleep Screen Info Overlay", - "White", - "Gray", - "Black", - "Off", - "Reading progress: Page %lu/%u - %.0f%%", - "Reading progress: Page %lu", - " - Page %d/%d - %.0f%% read", + ": \0" + "Pagini pe minut\0" + "Info\0" + "Author\0" + "Series\0" + "Size\0" + "Sleep Screen Info Overlay\0" + "White\0" + "Gray\0" + "Black\0" + "Off\0" + "Reading progress: Page %lu/%u - %.0f%%\0" + "Reading progress: Page %lu\0" + " - Page %d/%d - %.0f%% read\0" + "System Information\0" + "Failed to load XTC file\0" + "Failed to load EPUB file\0" + "FW version\0" + "Chip\0" + "CPU\0" + "MHz\0" + "Free RAM\0" + "Min free\0" + "Max block\0" + "Flash used\0" + "Uptime\0" + "Charging\0" + "Gathering data...\0" + "Reading...\0" +; +// clang-format on + +const uint16_t OFFSETS_RO[] = { + 0, 11, 21, 28, 49, 73, 94, 102, 120, 142, 161, 185, + 206, 221, 242, 254, 268, 286, 317, 329, 357, 373, 389, 402, + 425, 445, 458, 476, 486, 505, 523, 540, 576, 603, 622, 665, + 689, 710, 722, 774, 815, 827, 868, 885, 897, 922, 935, 954, + 979, 983, 998, 1008, 1050, 1084, 1127, 1182, 1188, 1197, 1207, 1214, + 1230, 1262, 1289, 1330, 1349, 1357, 1366, 1378, 1388, 1420, 1452, 1471, + 1506, 1541, 1563, 1579, 1605, 1628, 1654, 1665, 1687, 1717, 1727, 1742, + 1777, 1783, 1796, 1805, 1809, 1813, 1827, 1853, 1879, 1900, 1921, 1943, + 1964, 1994, 2018, 2031, 2053, 2066, 2083, 2099, 2121, 2141, 2151, 2167, + 2184, 2206, 2218, 2235, 2245, 2259, 2277, 2300, 2312, 2326, 2339, 2368, + 2390, 2413, 2420, 2449, 2460, 2468, 2492, 2517, 2531, 2556, 2573, 2586, + 2600, 2649, 2673, 2692, 2717, 2740, 2780, 2803, 2812, 2827, 2857, 2877, + 2900, 2905, 2950, 2991, 3023, 3054, 3077, 3090, 3109, 3116, 3147, 3192, + 3203, 3211, 3224, 3233, 3242, 3251, 3259, 3270, 3283, 3296, 3304, 3311, + 3329, 3338, 3356, 3363, 3381, 3398, 3415, 3424, 3434, 3448, 3452, 3458, + 3463, 3475, 3483, 3490, 3495, 3504, 3512, 3519, 3527, 3533, 3539, 3546, + 3553, 3560, 3570, 3579, 3589, 3599, 3609, 3621, 3652, 3684, 3704, 3720, + 3740, 3771, 3792, 3814, 3888, 3911, 3927, 3948, 3956, 3968, 4000, 4029, + 4059, 4068, 4081, 4103, 4129, 4165, 4173, 4184, 4195, 4205, 4217, 4226, + 4235, 4245, 4253, 4263, 4274, 4284, 4297, 4300, 4303, 4314, 4322, 4329, + 4335, 4348, 4356, 4364, 4368, 4372, 4375, 4398, 4407, 4434, 4463, 4488, + 4505, 4530, 4539, 4545, 4553, 4559, 4567, 4580, 4596, 4611, 4617, 4625, + 4633, 4640, 4645, 4659, 4687, 4713, 4726, 4750, 4763, 4771, 4787, 4808, + 4869, 4918, 4926, 4946, 4958, 4964, 4974, 4983, 5029, 5040, 5054, 5104, + 5142, 5162, 5185, 5205, 5225, 5239, 5246, 5267, 5291, 5302, 5309, 5336, + 5346, 5359, 5367, 5407, 5441, 5465, 5502, 5545, 5587, 5614, 5644, 5672, + 5702, 5743, 5759, 5767, 5774, 5802, 5833, 5845, 5870, 5899, 5928, 5960, + 5980, 6002, 6013, 6025, 6041, 6058, 6074, 6089, 6111, 6118, 6133, 6155, + 6171, 6176, 6183, 6190, 6195, 6221, 6227, 6232, 6238, 6242, 6281, 6308, + 6336, 6355, 6379, 6404, 6415, 6420, 6424, 6428, 6437, 6446, 6456, 6467, + 6474, 6483, 6501, }; -const char* const STRINGS_CA[] = { - "CrossPoint", - "ARRENCANT", +// clang-format off +const char STRINGS_CA_DATA[] = + "CrossPoint\0" + "ARRENCANT\0" "ENTRANT EN REP\xC3" "\x92" - "S", + "S\0" "Entrant en rep\xC3" "\xB2" - "s", - "Explora fitxers", + "s\0" + "Explora fitxers\0" "Transfer\xC3" "\xA8" - "ncia", + "ncia\0" "Configuraci\xC3" "\xB3" - "", - "Continua llegint", - "Cap llibre obert", + "\0" + "Continua llegint\0" + "Cap llibre obert\0" "Inicia la lectura a continuaci\xC3" "\xB3" - "", - "No s'han trobat fitxers", + "\0" + "No s'han trobat fitxers\0" "Selecciona el cap\xC3" "\xAD" - "tol", + "tol\0" "Sense cap\xC3" "\xAD" - "tols", - "Final del llibre", + "tols\0" + "Final del llibre\0" "Cap\xC3" "\xAD" - "tol buit", + "tol buit\0" "S'est\xC3" "\xA0" - " indexant", + " indexant\0" "Error de mem\xC3" "\xB2" - "ria", + "ria\0" "Error en carregar la p\xC3" "\xA0" - "gina", - "Fitxer buit", + "gina\0" + "Fitxer buit\0" "Fora de l\xC3" "\xAD" - "mits", + "mits\0" "S'est\xC3" "\xA0" - " carregant...", + " carregant...\0" "S'est\xC3" "\xA0" - " carregant", - "Xarxes WiFi", - "No s'han trobat xarxes", - "%zu xarxes trobades", + " carregant\0" + "Xarxes WiFi\0" + "No s'han trobat xarxes\0" + "%zu xarxes trobades\0" "S'est\xC3" "\xA0" - " escanejant...", + " escanejant...\0" "S'est\xC3" "\xA0" - " connectant...", - "S'ha connectat!", + " connectant...\0" + "S'ha connectat!\0" "Error de connexi\xC3" "\xB3" - "", - "Voleu oblidar aquesta xarxa?", - "Voleu desar la contrasenya per a la propera vegada?", - "Premeu OK per tornar a escanejar", - "Uneix-te a una xarxa", + "\0" + "Voleu oblidar aquesta xarxa?\0" + "Voleu desar la contrasenya per a la propera vegada?\0" + "Premeu OK per tornar a escanejar\0" + "Uneix-te a una xarxa\0" "Crea un punt d'acc\xC3" "\xA9" - "s", - "Connecta't a una xarxa WiFi existent", - "Crea una xarxa WiFi per unir-s'hi", + "s\0" + "Connecta't a una xarxa WiFi existent\0" + "Crea una xarxa WiFi per unir-s'hi\0" "S'est\xC3" "\xA0" " iniciant el punt d'acc\xC3" "\xA9" - "s...", + "s...\0" "Mode de punt d'acc\xC3" "\xA9" - "s", - "Connecteu el dispositiu a aquesta xarxa WiFi", - "Obriu aquest URL al navegador", - "o http://", + "s\0" + "Connecteu el dispositiu a aquesta xarxa WiFi\0" + "Obriu aquest URL al navegador\0" + "o http://\0" "o escanegeu el codi QR amb el tel\xC3" "\xA8" - "fon:", - "Calibre sense fils", - "URL web del Calibre", - "* = Encriptat | + = Desat", + "fon:\0" + "Calibre sense fils\0" + "URL web del Calibre\0" + "* = Encriptat | + = Desat\0" "Adre\xC3" "\xA7" - "a MAC:", + "a MAC:\0" "S'est\xC3" "\xA0" - " comprovant el WiFi...", + " comprovant el WiFi...\0" "Introdu\xC3" "\xAF" - "u la contrasenya WiFi", - "a ", + "u la contrasenya WiFi\0" + "a \0" "S'est\xC3" "\xA0" - " rebent: ", - "S'ha rebut: ", + " rebent: \0" + "S'ha rebut: \0" "1) Instal\xC2" "\xB7" - "leu el connector CrossPoint Reader", - "2) Estigueu a la mateixa xarxa WiFi", - "3) A Calibre: \"Envia a un dispositiu\"", - "\"Mantingueu aquesta pantalla oberta mentre s'envia\"", + "leu el connector CrossPoint Reader\0" + "2) Estigueu a la mateixa xarxa WiFi\0" + "3) A Calibre: \"Envia a un dispositiu\"\0" + "\"Mantingueu aquesta pantalla oberta mentre s'envia\"\0" "Visualitzaci\xC3" "\xB3" - "", - "Lector", - "Controls", - "Sistema", + "\0" + "Lector\0" + "Controls\0" + "Sistema\0" "Pantalla de rep\xC3" "\xB2" - "s", + "s\0" "Mode de pantalla de rep\xC3" "\xB2" - "s", - "Oculta el % de bateria", + "s\0" + "Oculta el % de bateria\0" "Espaiat de par\xC3" "\xA0" - "graf extra", + "graf extra\0" "Antiali\xC3" "\xA0" - "sing del text", - "Imatges", - "Mostrar", - "Text de mostra", - "Suprimir", + "sing del text\0" + "Imatges\0" + "Mostrar\0" + "Text de mostra\0" + "Suprimir\0" + "Create fallback for invalid TOC\0" "Clic curt del bot\xC3" "\xB3" - " d'engegada", + " d'engegada\0" "Orientaci\xC3" "\xB3" - " de lectura", + " de lectura\0" "Disposici\xC3" "\xB3" - " botons laterals", + " botons laterals\0" "Pressi\xC3" "\xB3" " llarga omet el cap\xC3" "\xAD" - "tol", - "Tipus de lletra", - "Mida de la lletra (UI)", - "Interlineat del lector", - "Marge de pantalla del lector", + "tol\0" + "Tipus de lletra\0" + "Mida de la lletra (UI)\0" + "Interlineat del lector\0" + "Marge de pantalla del lector\0" "Alineaci\xC3" "\xB3" " de par\xC3" "\xA0" - "grafs del lector", + "grafs del lector\0" "Partici\xC3" "\xB3" - " de mots", + " de mots\0" "Temps per entrar en rep\xC3" "\xB2" - "s", - "Show Hidden Files", + "s\0" + "Mostra fitxers ocults\0" + "Use Clock\0" + "Clock Settings\0" + "Uses more battery; clock may drift\0" + "Clock\0" + "Clock Format\0" + "Timezone\0" + "24h\0" + "12h\0" + "UTC (GMT/BST)\0" + "Central Europe (CET/CEST)\0" + "Eastern Europe (EET/EEST)\0" + "US Eastern (EST/EDT)\0" + "US Central (CST/CDT)\0" + "US Mountain (MST/MDT)\0" + "US Pacific (PST/PDT)\0" + "Australia Eastern (AEST/AEDT)\0" + "New Zealand (NZST/NZDT)\0" + "Russia (MSK)\0" + "South America (UTC-3)\0" + "Gulf (UTC+4)\0" + "India (UTC+5:30)\0" + "SE Asia (UTC+7)\0" + "China/SE Asia (UTC+8)\0" + "Japan/Korea (UTC+9)\0" + "Sync Time\0" + "Detect Timezone\0" + "Syncing clock...\0" + "Detecting timezone...\0" + "Time synced\0" + "Time sync failed\0" + "Drift: %s\0" + "Last sync: %s\0" + "Timezone detected\0" + "Timezone detect failed\0" + "DST: active\0" + "DST: inactive\0" + "DST: unknown\0" "Freq\xC3" "\xBC" "\xC3" "\xA8" - "ncia de refresc", + "ncia de refresc\0" "Sincronitzaci\xC3" "\xB3" - " del KOReader", - "Comprova si hi ha actualitzacions", - "Idioma", + " del KOReader\0" + "Comprova si hi ha actualitzacions\0" + "Idioma\0" "Esborra la mem\xC3" "\xB2" - "ria cau de lectura", - "Nom d'usuari", - "Contrasenya", + "ria cau de lectura\0" + "Nom d'usuari\0" + "Contrasenya\0" "URL del servidor de sincronitzaci\xC3" "\xB3" - "", + "\0" "Coincid\xC3" "\xA8" - "ncia de documents", - "Autentica", - "Nom d'usuari del KOReader", - "Contrasenya del KOReader", - "Nom de fitxer", - "Binari", - "Estableix les credencials primer", + "ncia de documents\0" + "Autentica\0" + "Nom d'usuari del KOReader\0" + "Contrasenya del KOReader\0" + "Nom de fitxer\0" + "Binari\0" + "Estableix les credencials primer\0" "Connexi\xC3" "\xB3" - " WiFi fallida", + " WiFi fallida\0" "S'est\xC3" "\xA0" - " autenticant...", + " autenticant...\0" "Autenticaci\xC3" "\xB3" - " correcta!", + " correcta!\0" "Autenticaci\xC3" "\xB3" - " del KOReader", + " del KOReader\0" "La sincronitzaci\xC3" "\xB3" " del KOReader est\xC3" "\xA0" - " preparada per utilitzar-se", + " preparada per utilitzar-se\0" "Autenticaci\xC3" "\xB3" - " fallida", - "Fet", + " fallida\0" + "Register\0" + "Registering...\0" + "Account created successfully!\0" + "Registration failed\0" + "Username already taken\0" + "Fet\0" "Aix\xC3" "\xB2" " esborrar\xC3" "\xA0" " totes les dades de lectura de la mem\xC3" "\xB2" - "ria cau.", + "ria cau.\0" "Es perdr\xC3" "\xA0" " tot el progr\xC3" "\xA9" - "s de lectura!", - "Els llibres hauran de ser reindexats", - "quan s'obrin de nou.", + "s de lectura!\0" + "Els llibres hauran de ser reindexats\0" + "quan s'obrin de nou.\0" "S'est\xC3" "\xA0" " esborrant la mem\xC3" "\xB2" - "ria cau...", + "ria cau...\0" "Mem\xC3" "\xB2" - "ria cau esborrada", - "elements suprimits", - "ha fallat", + "ria cau esborrada\0" + "elements suprimits\0" + "ha fallat\0" "No s'ha pogut esborrar la mem\xC3" "\xB2" - "ria cau", + "ria cau\0" "Comprova la sortida en s\xC3" "\xA8" - "rie per obtenir detalls", - "Fosc", - "Clar", - "Personalitzat", - "Portada", - "Cap", - "Ajustar", - "Retallar", - "Mai", - "Al lector", - "Sempre", - "Ignora", - "Dormir", + "rie per obtenir detalls\0" + "Fosc\0" + "Clar\0" + "Personalitzat\0" + "Portada\0" + "Cap\0" + "Ajustar\0" + "Retallar\0" + "Mai\0" + "Al lector\0" + "Sempre\0" + "Ignora\0" + "Dormir\0" "Canvi de p\xC3" "\xA0" - "gina", - "Vertical", - "Horitzontal horari", - "Invertit", - "Horitzontal antihorari", + "gina\0" + "Vertical\0" + "Horitzontal horari\0" + "Invertit\0" + "Horitzontal antihorari\0" "Anterior/Seg\xC3" "\xBC" - "ent", + "ent\0" "Seg\xC3" "\xBC" - "ent/Anterior", - "Bookerly", - "Noto Sans", - "Open Dyslexic", - "Petita", - "Mitjana", - "Gran", - "Molt gran", - "Estret", - "Normal", - "Ample", - "Justificat", - "Esquerra", - "Centre", - "Dreta", - "1 min", - "5 min", - "10 min", - "15 min", - "30 min", + "ent/Anterior\0" + "Bookerly\0" + "Noto Sans\0" + "Open Dyslexic\0" + "Petita\0" + "Mitjana\0" + "Gran\0" + "Molt gran\0" + "Estret\0" + "Normal\0" + "Ample\0" + "Justificat\0" + "Esquerra\0" + "Centre\0" + "Dreta\0" + "1 min\0" + "5 min\0" + "10 min\0" + "15 min\0" + "30 min\0" "1 p\xC3" "\xA0" - "gina", + "gina\0" "5 p\xC3" "\xA0" - "gines", + "gines\0" "10 p\xC3" "\xA0" - "gines", + "gines\0" "15 p\xC3" "\xA0" - "gines", + "gines\0" "30 p\xC3" "\xA0" - "gines", - "Actualitza", + "gines\0" + "Actualitza\0" "S'est\xC3" "\xA0" - " comprovant si hi ha actualitzacions...", + " comprovant si hi ha actualitzacions...\0" "Nova actualitzaci\xC3" "\xB3" - " disponible!", + " disponible!\0" "Versi\xC3" "\xB3" - " actual: ", + " actual: \0" "Nova versi\xC3" "\xB3" - ": ", + ": \0" "S'est\xC3" "\xA0" - " actualitzant...", - "No hi ha actualitzacions disponibles", + " actualitzant...\0" + "No hi ha actualitzacions disponibles\0" "Ha fallat l'actualitzaci\xC3" "\xB3" - "", + "\0" "Actualitzaci\xC3" "\xB3" - " completada", + " completada\0" "Premeu i manteniu premut el bot\xC3" "\xB3" - " d'encesa per tornar a engegar", - "No s'ha trobat cap entrada", + " d'encesa per tornar a engegar\0" + "No s'ha trobat cap entrada\0" "S'est\xC3" "\xA0" - " baixant...", - "Ha fallat la baixada", - "Error:", - "Sense nom", - "No s'ha configurat cap URL de servidor", + " baixant...\0" + "Ha fallat la baixada\0" + "Error:\0" + "Sense nom\0" + "No s'ha configurat cap URL de servidor\0" "Ha fallat l'obtenci\xC3" "\xB3" - " del feed", + " del feed\0" "Ha fallat l'an\xC3" "\xA0" - "lisi del feed", - "Xarxa: ", + "lisi del feed\0" + "Xarxa: \0" "Adre\xC3" "\xA7" - "a IP: ", - "Error: Fallada general", - "Error: No s'ha trobat la xarxa", + "a IP: \0" + "Error: Fallada general\0" + "Error: No s'ha trobat la xarxa\0" "Error: temps de connexi\xC3" "\xB3" - " esgotat", - "Targeta SD", + " esgotat\0" + "Targeta SD\0" "\xC2" "\xAB" - " Enrere", + " Enrere\0" "\xC2" "\xAB" - " Surt", + " Surt\0" "\xC2" "\xAB" - " Inici", - "Selecciona", - "Seleccionat", - "Canvia", - "Confirma", + " Inici\0" + "Selecciona\0" + "Seleccionat\0" + "Canvia\0" + "Confirma\0" "Cancel\xC2" "\xB7" - "la", - "Connecta", - "Obre", - "Descarrega", - "Nou intent", + "la\0" + "Connecta\0" + "Obre\0" + "Descarrega\0" + "Nou intent\0" "S\xC3" "\xAD" - "", - "No", - "Mostrar", - "Amagar", - "ON", - "OFF", - "No establert", - "Esquerra", - "Dreta", - "Amunt", - "Avall", - "OK", + "\0" + "No\0" + "Mostrar\0" + "Amagar\0" + "ON\0" + "OFF\0" + "No establert\0" + "Esquerra\0" + "Dreta\0" + "Amunt\0" + "Avall\0" + "OK\0" "Filtre de pantalla de rep\xC3" "\xB2" - "s", - "Contrast", - "Personalitza la barra d'estat", + "s\0" + "Contrast\0" + "Personalitza la barra d'estat\0" "Comptador de p\xC3" "\xA0" "gines del cap\xC3" "\xAD" - "tol", + "tol\0" "Percentatge de progr\xC3" "\xA9" - "s del llibre", + "s del llibre\0" "Barra de progr\xC3" "\xA9" - "s", + "s\0" "Gruix de la barra de progr\xC3" "\xA9" - "s", - "Fina", - "Mitjana", - "Gruixuda", - "Llibre", + "s\0" + "Fina\0" + "Mitjana\0" + "Gruixuda\0" + "Llibre\0" "Cap\xC3" "\xAD" - "tol", + "tol\0" "Cap\xC3" "\xAD" - "tol 21", + "tol 21\0" "T\xC3" "\xAD" - "tol del llibre", + "tol del llibre\0" "Vista pr\xC3" "\xA8" - "via", + "via\0" "T\xC3" "\xAD" - "tol", - "Bateria", + "tol\0" + "Bateria\0" "Tema de la interf\xC3" "\xAD" - "cie", + "cie\0" "Cl\xC3" "\xA0" - "ssic", - "Lyra", - "Lyra Ampliat", + "ssic\0" + "Lyra\0" + "Lyra Ampliat\0" "Correcci\xC3" "\xB3" " de l'esva\xC3" "\xAF" - "ment pel sol", - "Reassigna els botons frontals", - "Navegador OPDS", - "Portada + Personalitzat", - "Llibres recents", - "No hi ha llibres recents", + "ment pel sol\0" + "Reassigna els botons frontals\0" + "Navegador OPDS\0" + "Portada + Personalitzat\0" + "Page overlay\0" + "Recents\0" + "Llibres recents\0" + "No hi ha llibres recents\0" "Usa les transfer\xC3" "\xA8" - "ncies sense fils de Calibre", - "Voleu suprimir la contrasenya desada?", - "Oblida", + "ncies sense fils de Calibre\0" + "Voleu suprimir la contrasenya desada?\0" + "Oblida\0" "S'est\xC3" "\xA0" - " iniciant el Calibre...", - "Configura", - "Estat", - "Esborra", - "Per defecte", + " iniciant el Calibre...\0" + "Configura\0" + "Estat\0" + "Esborra\0" + "Per defecte\0" "Premeu un bot\xC3" "\xB3" - " frontal per a cada rol", - "No assignat", - "Ja assignat", + " frontal per a cada rol\0" + "No assignat\0" + "Ja assignat\0" "Bot\xC3" "\xB3" " lateral Amunt: Restableix la disposici\xC3" "\xB3" - " per defecte", + " per defecte\0" "Bot\xC3" "\xB3" " lateral Avall: Cancel\xC2" "\xB7" "la la reassignaci\xC3" "\xB3" - "", + "\0" "Enrere (1r bot\xC3" "\xB3" - ")", + ")\0" "Confirma (2n bot\xC3" "\xB3" - ")", + ")\0" "Esquerra (3r bot\xC3" "\xB3" - ")", + ")\0" "Dreta (4t bot\xC3" "\xB3" - ")", - "Ves al %", - "Ves a l'inici", + ")\0" + "Ves al %\0" + "Ves a l'inici\0" "Sincronitza el progr\xC3" "\xA9" - "s", + "s\0" "Esborra la mem\xC3" "\xB2" - "ria cau del llibre", - "Esborra", + "ria cau del llibre\0" + "Esborra\0" + "Remove\0" "Mostra la p\xC3" "\xA0" - "gina com a QR", + "gina com a QR\0" "Cap\xC3" "\xAD" - "tol: ", + "tol: \0" " p\xC3" "\xA0" - "gines | ", - "Llibre: ", - "Per al Calibre, afegiu /opds a la URL", - "Esquerra/Dreta: 1% Amunt/Avall: 10%", + "gines | \0" + "Llibre: \0" + "Per al Calibre, afegiu /opds a la URL\0" + "Esquerra/Dreta: 1% Amunt/Avall: 10%\0" "S'est\xC3" "\xA0" - " sincronitzant el temps...", + " sincronitzant el temps...\0" "S'est\xC3" "\xA0" - " calculant el hash del document...", - "No s'ha pogut calcular el hash del document", + " calculant el hash del document...\0" + "No s'ha pogut calcular el hash del document\0" "S'est\xC3" "\xA0" " obtenint el progr\xC3" "\xA9" - "s remot...", + "s remot...\0" + "Mapping remote position...\0" + "Calculating local position...\0" "S'est\xC3" "\xA0" " pujant el progr\xC3" "\xA9" - "s...", - "No s'han configurat credencials", + "s...\0" + "No s'han configurat credencials\0" "Configureu el compte de KOReader a la configuraci\xC3" "\xB3" - "", + "\0" "S'ha trobat progr\xC3" "\xA9" - "s!", - "Remot:", - "Local:", + "s!\0" + "Remot:\0" + "Local:\0" "P\xC3" "\xA0" - "gina %d, %.2f%% total", + "gina %d, %.2f%% total\0" "P\xC3" "\xA0" - "gina %d/%d, %.2f%% total", - " De: %s", + "gina %d/%d, %.2f%% total\0" + " De: %s\0" "Aplica el progr\xC3" "\xA9" - "s remot", + "s remot\0" "Puja el progr\xC3" "\xA9" - "s local", + "s local\0" "No s'ha trobat progr\xC3" "\xA9" - "s remot", + "s remot\0" "Voleu pujar la posici\xC3" "\xB3" - " actual?", + " actual?\0" "Progr\xC3" "\xA9" - "s pujat!", + "s pujat!\0" "Sincronitzaci\xC3" "\xB3" - " fallida", + " fallida\0" "Secci\xC3" "\xB3" - " ", - "Puja", - "Estil del llibre", - "Estil incrustat", - "URL del servidor OPDS", - "Notes al peu", + " \0" + "Puja\0" + "Estil del llibre\0" + "Estil incrustat\0" + "URL del servidor OPDS\0" + "Notes al peu\0" "No hi ha notes al peu en aquesta p\xC3" "\xA0" - "gina", + "gina\0" "[enlla\xC3" "\xA7" - "]", - "Fes una captura de pantalla", + "]\0" + "Fes una captura de pantalla\0" "Passar autom\xC3" "\xA0" - "tic activat: ", + "tic activat: \0" "Passar autom\xC3" "\xA0" "tic (p\xC3" "\xA0" - "gines per minut)", - "Sleep Screen Info Overlay", - "White", - "Gray", - "Black", - "Off", - "Reading progress: Page %lu/%u - %.0f%%", - "Reading progress: Page %lu", - " - Page %d/%d - %.0f%% read", + "gines per minut)\0" + "Info\0" + "Author\0" + "Series\0" + "Size\0" + "Sleep Screen Info Overlay\0" + "White\0" + "Gray\0" + "Black\0" + "Off\0" + "Reading progress: Page %lu/%u - %.0f%%\0" + "Reading progress: Page %lu\0" + " - Page %d/%d - %.0f%% read\0" + "System Information\0" + "Failed to load XTC file\0" + "Failed to load EPUB file\0" + "FW version\0" + "Chip\0" + "CPU\0" + "MHz\0" + "Free RAM\0" + "Min free\0" + "Max block\0" + "Flash used\0" + "Uptime\0" + "Charging\0" + "Gathering data...\0" + "Reading...\0" +; +// clang-format on + +const uint16_t OFFSETS_CA[] = { + 0, 11, 21, 39, 57, 73, 88, 102, 119, 136, 169, 193, + 216, 232, 249, 263, 280, 298, 327, 339, 355, 376, 394, 406, + 429, 449, 471, 493, 509, 528, 557, 609, 642, 663, 685, 722, + 756, 793, 815, 860, 890, 900, 940, 959, 979, 1005, 1018, 1048, + 1079, 1082, 1099, 1112, 1158, 1194, 1232, 1284, 1299, 1306, 1315, 1323, + 1342, 1369, 1392, 1419, 1442, 1450, 1458, 1473, 1482, 1514, 1545, 1568, + 1596, 1629, 1645, 1668, 1691, 1720, 1756, 1774, 1801, 1823, 1833, 1848, + 1883, 1889, 1902, 1911, 1915, 1919, 1933, 1959, 1985, 2006, 2027, 2049, + 2070, 2100, 2124, 2137, 2159, 2172, 2189, 2205, 2227, 2247, 2257, 2273, + 2290, 2312, 2324, 2341, 2351, 2365, 2383, 2406, 2418, 2432, 2445, 2469, + 2498, 2532, 2539, 2574, 2587, 2599, 2635, 2662, 2672, 2698, 2723, 2737, + 2744, 2777, 2800, 2823, 2847, 2874, 2939, 2961, 2970, 2985, 3015, 3035, + 3058, 3062, 3126, 3165, 3202, 3223, 3260, 3283, 3302, 3312, 3351, 3401, + 3406, 3411, 3425, 3433, 3437, 3445, 3454, 3458, 3468, 3475, 3482, 3489, + 3506, 3515, 3534, 3543, 3566, 3584, 3602, 3611, 3621, 3635, 3642, 3650, + 3655, 3665, 3672, 3679, 3685, 3696, 3705, 3712, 3718, 3724, 3730, 3737, + 3744, 3751, 3761, 3772, 3784, 3796, 3808, 3819, 3866, 3898, 3915, 3930, + 3954, 3991, 4018, 4044, 4108, 4135, 4154, 4175, 4182, 4192, 4231, 4262, + 4292, 4300, 4313, 4336, 4367, 4401, 4412, 4422, 4430, 4439, 4450, 4462, + 4469, 4478, 4489, 4498, 4503, 4514, 4525, 4529, 4532, 4540, 4547, 4550, + 4554, 4567, 4576, 4582, 4588, 4594, 4597, 4626, 4635, 4665, 4700, 4735, + 4753, 4783, 4788, 4796, 4805, 4812, 4821, 4833, 4851, 4865, 4872, 4880, + 4903, 4912, 4917, 4930, 4965, 4995, 5010, 5034, 5047, 5055, 5071, 5096, + 5142, 5180, 5187, 5218, 5228, 5234, 5242, 5254, 5293, 5305, 5317, 5376, + 5425, 5443, 5463, 5483, 5500, 5509, 5523, 5547, 5582, 5590, 5597, 5624, + 5635, 5650, 5659, 5697, 5733, 5767, 5809, 5853, 5891, 5918, 5948, 5978, + 6010, 6062, 6084, 6091, 6098, 6123, 6151, 6160, 6185, 6208, 6238, 6270, + 6286, 6310, 6319, 6324, 6341, 6357, 6379, 6392, 6433, 6443, 6471, 6499, + 6538, 6543, 6550, 6557, 6562, 6588, 6594, 6599, 6605, 6609, 6648, 6675, + 6703, 6722, 6746, 6771, 6782, 6787, 6791, 6795, 6804, 6813, 6823, 6834, + 6841, 6850, 6868, }; -const char* const STRINGS_UK[] = { - "CrossPoint", +// clang-format off +const char STRINGS_UK_DATA[] = + "CrossPoint\0" "\xD0" "\x97" "\xD0" @@ -14196,7 +15587,7 @@ const char* const STRINGS_UK[] = { "\x9D" "\xD0" "\xAF" - "", + "\0" "\xD0" "\xA1" "\xD0" @@ -14207,7 +15598,7 @@ const char* const STRINGS_UK[] = { "\xA2" "\xD0" "\xAC" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -14240,7 +15631,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD1" "\x83" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -14269,7 +15660,7 @@ const char* const STRINGS_UK[] = { "\x96" "\xD0" "\xB2" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -14298,7 +15689,7 @@ const char* const STRINGS_UK[] = { "\x96" "\xD0" "\xB2" - "", + "\0" "\xD0" "\x9D" "\xD0" @@ -14323,7 +15714,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD1" "\x8F" - "", + "\0" "\xD0" "\x9F" "\xD1" @@ -14358,7 +15749,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD1" "\x8F" - "", + "\0" "\xD0" "\x9D" "\xD0" @@ -14397,7 +15788,7 @@ const char* const STRINGS_UK[] = { "\xB3" "\xD0" "\xB8" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -14436,7 +15827,7 @@ const char* const STRINGS_UK[] = { "\x87" "\xD0" "\xB5" - "", + "\0" "\xD0" "\xA4" "\xD0" @@ -14467,7 +15858,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD0" "\xBE" - "", + "\0" "\xD0" "\x92" "\xD0" @@ -14496,7 +15887,7 @@ const char* const STRINGS_UK[] = { "\x96" "\xD0" "\xBB" - "", + "\0" "\xD0" "\x9D" "\xD0" @@ -14523,7 +15914,7 @@ const char* const STRINGS_UK[] = { "\x96" "\xD0" "\xB2" - "", + "\0" "\xD0" "\x9A" "\xD1" @@ -14546,7 +15937,7 @@ const char* const STRINGS_UK[] = { "\xB3" "\xD0" "\xB8" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -14575,7 +15966,7 @@ const char* const STRINGS_UK[] = { "\x96" "\xD0" "\xBB" - "", + "\0" "\xD0" "\x86" "\xD0" @@ -14596,7 +15987,7 @@ const char* const STRINGS_UK[] = { "\x96" "\xD1" "\x8F" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -14623,7 +16014,7 @@ const char* const STRINGS_UK[] = { "\x82" "\xD1" "\x96" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -14678,7 +16069,7 @@ const char* const STRINGS_UK[] = { "\xBA" "\xD0" "\xB8" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -14703,7 +16094,7 @@ const char* const STRINGS_UK[] = { "\xB9" "\xD0" "\xBB" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -14724,7 +16115,7 @@ const char* const STRINGS_UK[] = { "\xBC" "\xD0" "\xB8" - "", + "\0" "\xD0" "\x97" "\xD0" @@ -14749,7 +16140,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD1" "\x8F" - "...", + "...\0" "\xD0" "\x97" "\xD0" @@ -14774,7 +16165,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD1" "\x8F" - "", + "\0" "\xD0" "\x9C" "\xD0" @@ -14787,7 +16178,7 @@ const char* const STRINGS_UK[] = { "\xB6" "\xD1" "\x96" - " WiFi", + " WiFi\0" "\xD0" "\x9C" "\xD0" @@ -14818,7 +16209,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD0" "\xBE" - "", + "\0" "\xD0" "\xB7" "\xD0" @@ -14845,7 +16236,7 @@ const char* const STRINGS_UK[] = { "\xB5" "\xD0" "\xB6" - "", + "\0" "\xD0" "\xA1" "\xD0" @@ -14866,7 +16257,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD1" "\x8F" - "...", + "...\0" "\xD0" "\x9F" "\xD1" @@ -14889,7 +16280,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD1" "\x8F" - "...", + "...\0" "\xD0" "\x9F" "\xD1" @@ -14910,7 +16301,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD0" "\xBE" - "!", + "!\0" "\xD0" "\x9F" "\xD0" @@ -14947,7 +16338,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD1" "\x8F" - "", + "\0" "\xD0" "\x97" "\xD0" @@ -14972,7 +16363,7 @@ const char* const STRINGS_UK[] = { "\xB6" "\xD1" "\x83" - "?", + "?\0" "\xD0" "\x97" "\xD0" @@ -15029,7 +16420,7 @@ const char* const STRINGS_UK[] = { "\xB0" "\xD0" "\xB7" - "?", + "?\0" "\xD0" "\x9D" "\xD0" @@ -15094,7 +16485,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD1" "\x8F" - "", + "\0" "\xD0" "\x9F" "\xD1" @@ -15133,7 +16524,7 @@ const char* const STRINGS_UK[] = { "\xB6" "\xD1" "\x96" - "", + "\0" "\xD0" "\xA1" "\xD1" @@ -15174,7 +16565,7 @@ const char* const STRINGS_UK[] = { "\xBF" "\xD1" "\x83" - "", + "\0" "\xD0" "\x9F" "\xD1" @@ -15231,7 +16622,7 @@ const char* const STRINGS_UK[] = { "\xB6" "\xD1" "\x96" - " WiFi", + " WiFi\0" "\xD0" "\xA1" "\xD1" @@ -15316,7 +16707,7 @@ const char* const STRINGS_UK[] = { "\x88" "\xD1" "\x96" - "", + "\0" "\xD0" "\x97" "\xD0" @@ -15353,7 +16744,7 @@ const char* const STRINGS_UK[] = { "\xBF" "\xD1" "\x83" - "...", + "...\0" "\xD0" "\xA0" "\xD0" @@ -15388,7 +16779,7 @@ const char* const STRINGS_UK[] = { "\xBF" "\xD1" "\x83" - "", + "\0" "\xD0" "\x9F" "\xD1" @@ -15455,7 +16846,7 @@ const char* const STRINGS_UK[] = { "\xB6" "\xD1" "\x96" - " WiFi", + " WiFi\0" "\xD0" "\x92" "\xD1" @@ -15520,14 +16911,14 @@ const char* const STRINGS_UK[] = { "\x80" "\xD1" "\x96" - "", + "\0" "\xD0" "\xB0" "\xD0" "\xB1" "\xD0" "\xBE" - " http://", + " http://\0" "\xD0" "\xB0" "\xD0" @@ -15580,7 +16971,7 @@ const char* const STRINGS_UK[] = { "\xBE" "\xD0" "\xBC" - ":", + ":\0" "Calibre \xD0" "\xB1" "\xD0" @@ -15603,8 +16994,8 @@ const char* const STRINGS_UK[] = { "\xB8" "\xD0" "\xB9" - "", - "URL Calibre Web", + "\0" + "URL Calibre Web\0" "* = \xD0" "\x97" "\xD0" @@ -15645,7 +17036,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD0" "\xBE" - "", + "\0" "MAC \xD0" "\xB0" "\xD0" @@ -15658,7 +17049,7 @@ const char* const STRINGS_UK[] = { "\x81" "\xD0" "\xB0" - ":", + ":\0" "\xD0" "\x9F" "\xD0" @@ -15677,7 +17068,7 @@ const char* const STRINGS_UK[] = { "\xBA" "\xD0" "\xB0" - " WiFi...", + " WiFi...\0" "\xD0" "\x92" "\xD0" @@ -15704,12 +17095,12 @@ const char* const STRINGS_UK[] = { "\xBB" "\xD1" "\x8C" - " WiFi", + " WiFi\0" "\xD0" "\xB4" "\xD0" "\xBE" - " ", + " \0" "\xD0" "\x9E" "\xD1" @@ -15728,7 +17119,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD1" "\x8F" - ": ", + ": \0" "\xD0" "\x9E" "\xD1" @@ -15745,7 +17136,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD0" "\xBE" - ": ", + ": \0" "1) \xD0" "\x92" "\xD1" @@ -15778,7 +17169,7 @@ const char* const STRINGS_UK[] = { "\x96" "\xD0" "\xBD" - " CrossPoint Reader", + " CrossPoint Reader\0" "2) \xD0" "\x9F" "\xD0" @@ -15831,7 +17222,7 @@ const char* const STRINGS_UK[] = { "\xB6" "\xD1" "\x96" - " WiFi", + " WiFi\0" "3) \xD0" "\x92" " Calibre: \"\xD0" @@ -15872,7 +17263,7 @@ const char* const STRINGS_UK[] = { "\x96" "\xD0" "\xB9" - "\"", + "\"\0" "\"\xD0" "\xA2" "\xD1" @@ -15955,7 +17346,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD1" "\x8F" - "\"", + "\"\0" "\xD0" "\x95" "\xD0" @@ -15966,7 +17357,7 @@ const char* const STRINGS_UK[] = { "\xB0" "\xD0" "\xBD" - "", + "\0" "\xD0" "\xA7" "\xD0" @@ -15977,7 +17368,7 @@ const char* const STRINGS_UK[] = { "\xB0" "\xD1" "\x87" - "", + "\0" "\xD0" "\x9A" "\xD0" @@ -15996,7 +17387,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD1" "\x8F" - "", + "\0" "\xD0" "\xA1" "\xD0" @@ -16011,7 +17402,7 @@ const char* const STRINGS_UK[] = { "\xBC" "\xD0" "\xB0" - "", + "\0" "\xD0" "\x95" "\xD0" @@ -16028,7 +17419,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD1" "\x83" - "", + "\0" "\xD0" "\xA0" "\xD0" @@ -16077,7 +17468,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD1" "\x83" - "", + "\0" "\xD0" "\x9F" "\xD1" @@ -16110,7 +17501,7 @@ const char* const STRINGS_UK[] = { "\xB5" "\xD1" "\x97" - "", + "\0" "\xD0" "\x94" "\xD0" @@ -16169,7 +17560,7 @@ const char* const STRINGS_UK[] = { "\xBC" "\xD0" "\xB8" - "", + "\0" "\xD0" "\x97" "\xD0" @@ -16206,11 +17597,82 @@ const char* const STRINGS_UK[] = { "\x82" "\xD1" "\x83" - "", - "Images", - "Display", - "Placeholder", - "Suppress", + "\0" + "\xD0" + "\x97" + "\xD0" + "\xBE" + "\xD0" + "\xB1" + "\xD1" + "\x80" + "\xD0" + "\xB0" + "\xD0" + "\xB6" + "\xD0" + "\xB5" + "\xD0" + "\xBD" + "\xD0" + "\xBD" + "\xD1" + "\x8F" + "\0" + "\xD0" + "\x9F" + "\xD0" + "\xBE" + "\xD0" + "\xBA" + "\xD0" + "\xB0" + "\xD0" + "\xB7" + "\xD0" + "\xB0" + "\xD1" + "\x82" + "\xD0" + "\xB8" + "\0" + "\xD0" + "\x97" + "\xD0" + "\xB0" + "\xD0" + "\xB3" + "\xD0" + "\xBB" + "\xD1" + "\x83" + "\xD1" + "\x88" + "\xD0" + "\xBA" + "\xD0" + "\xB0" + "\0" + "\xD0" + "\x9F" + "\xD1" + "\x80" + "\xD0" + "\xB8" + "\xD1" + "\x85" + "\xD0" + "\xBE" + "\xD0" + "\xB2" + "\xD0" + "\xB0" + "\xD1" + "\x82" + "\xD0" + "\xB8" + "\0" + "Create fallback for invalid TOC\0" "\xD0" "\x9A" "\xD0" @@ -16273,7 +17735,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD1" "\x8F" - "", + "\0" "\xD0" "\x9E" "\xD1" @@ -16308,7 +17770,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD1" "\x8F" - "", + "\0" "\xD0" "\xA0" "\xD0" @@ -16367,7 +17829,7 @@ const char* const STRINGS_UK[] = { "\xB0" "\xD1" "\x87" - ")", + ")\0" "\xD0" "\x9F" "\xD1" @@ -16436,7 +17898,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD1" "\x96" - "", + "\0" "\xD0" "\xA1" "\xD1" @@ -16469,7 +17931,7 @@ const char* const STRINGS_UK[] = { "\x96" "\xD0" "\xB2" - "", + "\0" "\xD0" "\xA0" "\xD0" @@ -16514,7 +17976,7 @@ const char* const STRINGS_UK[] = { "\x81" "\xD1" "\x83" - "", + "\0" "\xD0" "\x9C" "\xD1" @@ -16553,7 +18015,7 @@ const char* const STRINGS_UK[] = { "\xB0" "\xD0" "\xBB" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -16574,7 +18036,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD0" "\xB0" - "", + "\0" "\xD0" "\x92" "\xD0" @@ -16613,7 +18075,7 @@ const char* const STRINGS_UK[] = { "\x96" "\xD0" "\xB2" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -16636,7 +18098,7 @@ const char* const STRINGS_UK[] = { "\x96" "\xD0" "\xB2" - "", + "\0" "\xD0" "\xA7" "\xD0" @@ -16653,8 +18115,89 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD1" "\x83" - "", - "Show Hidden Files", + "\0" + "\xD0" + "\x9F" + "\xD0" + "\xBE" + "\xD0" + "\xBA" + "\xD0" + "\xB0" + "\xD0" + "\xB7" + "\xD0" + "\xB0" + "\xD1" + "\x82" + "\xD0" + "\xB8" + " \xD0" + "\xBF" + "\xD1" + "\x80" + "\xD0" + "\xB8" + "\xD1" + "\x85" + "\xD0" + "\xBE" + "\xD0" + "\xB2" + "\xD0" + "\xB0" + "\xD0" + "\xBD" + "\xD1" + "\x96" + " \xD1" + "\x84" + "\xD0" + "\xB0" + "\xD0" + "\xB9" + "\xD0" + "\xBB" + "\xD0" + "\xB8" + "\0" + "Use Clock\0" + "Clock Settings\0" + "Uses more battery; clock may drift\0" + "Clock\0" + "Clock Format\0" + "Timezone\0" + "24h\0" + "12h\0" + "UTC (GMT/BST)\0" + "Central Europe (CET/CEST)\0" + "Eastern Europe (EET/EEST)\0" + "US Eastern (EST/EDT)\0" + "US Central (CST/CDT)\0" + "US Mountain (MST/MDT)\0" + "US Pacific (PST/PDT)\0" + "Australia Eastern (AEST/AEDT)\0" + "New Zealand (NZST/NZDT)\0" + "Russia (MSK)\0" + "South America (UTC-3)\0" + "Gulf (UTC+4)\0" + "India (UTC+5:30)\0" + "SE Asia (UTC+7)\0" + "China/SE Asia (UTC+8)\0" + "Japan/Korea (UTC+9)\0" + "Sync Time\0" + "Detect Timezone\0" + "Syncing clock...\0" + "Detecting timezone...\0" + "Time synced\0" + "Time sync failed\0" + "Drift: %s\0" + "Last sync: %s\0" + "Timezone detected\0" + "Timezone detect failed\0" + "DST: active\0" + "DST: inactive\0" + "DST: unknown\0" "\xD0" "\xA7" "\xD0" @@ -16687,7 +18230,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD1" "\x8F" - "", + "\0" "\xD0" "\xA1" "\xD0" @@ -16714,7 +18257,7 @@ const char* const STRINGS_UK[] = { "\x96" "\xD1" "\x8F" - " KOReader", + " KOReader\0" "\xD0" "\x9F" "\xD0" @@ -16753,7 +18296,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD1" "\x8F" - "", + "\0" "\xD0" "\x9C" "\xD0" @@ -16762,7 +18305,7 @@ const char* const STRINGS_UK[] = { "\xB2" "\xD0" "\xB0" - "", + "\0" "\xD0" "\x9E" "\xD1" @@ -16799,7 +18342,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD1" "\x8F" - "", + "\0" "\xD0" "\x86" "\xD0" @@ -16828,7 +18371,7 @@ const char* const STRINGS_UK[] = { "\x87" "\xD0" "\xB0" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -16841,7 +18384,7 @@ const char* const STRINGS_UK[] = { "\xBB" "\xD1" "\x8C" - "", + "\0" "URL \xD1" "\x81" "\xD0" @@ -16882,7 +18425,7 @@ const char* const STRINGS_UK[] = { "\x96" "\xD1" "\x97" - "", + "\0" "\xD0" "\x97" "\xD1" @@ -16925,7 +18468,7 @@ const char* const STRINGS_UK[] = { "\x96" "\xD0" "\xB2" - "", + "\0" "\xD0" "\x90" "\xD0" @@ -16956,7 +18499,7 @@ const char* const STRINGS_UK[] = { "\x82" "\xD0" "\xB8" - "", + "\0" "\xD0" "\x86" "\xD0" @@ -16985,7 +18528,7 @@ const char* const STRINGS_UK[] = { "\x87" "\xD0" "\xB0" - " KOReader", + " KOReader\0" "\xD0" "\x9F" "\xD0" @@ -16998,7 +18541,7 @@ const char* const STRINGS_UK[] = { "\xBB" "\xD1" "\x8C" - " KOReader", + " KOReader\0" "\xD0" "\x86" "\xD0" @@ -17015,7 +18558,7 @@ const char* const STRINGS_UK[] = { "\xBB" "\xD1" "\x83" - "", + "\0" "\xD0" "\x94" "\xD0" @@ -17034,7 +18577,7 @@ const char* const STRINGS_UK[] = { "\xB8" "\xD0" "\xB9" - "", + "\0" "\xD0" "\xA1" "\xD0" @@ -17095,7 +18638,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD1" "\x96" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -17132,7 +18675,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD1" "\x8F" - " WiFi", + " WiFi\0" "\xD0" "\x90" "\xD0" @@ -17161,7 +18704,7 @@ const char* const STRINGS_UK[] = { "\x96" "\xD1" "\x8F" - "...", + "...\0" "\xD0" "\xA3" "\xD1" @@ -17206,7 +18749,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD0" "\xBE" - "!", + "!\0" "\xD0" "\x90" "\xD0" @@ -17235,7 +18778,7 @@ const char* const STRINGS_UK[] = { "\x96" "\xD1" "\x8F" - " KOReader", + " KOReader\0" "\xD0" "\xA1" "\xD0" @@ -17302,7 +18845,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD1" "\x8F" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -17345,7 +18888,12 @@ const char* const STRINGS_UK[] = { "\x96" "\xD1" "\x97" - "", + "\0" + "Register\0" + "Registering...\0" + "Account created successfully!\0" + "Registration failed\0" + "Username already taken\0" "\xD0" "\x93" "\xD0" @@ -17358,7 +18906,7 @@ const char* const STRINGS_UK[] = { "\xB2" "\xD0" "\xBE" - "", + "\0" "\xD0" "\xA6" "\xD0" @@ -17417,7 +18965,7 @@ const char* const STRINGS_UK[] = { "\xB8" "\xD0" "\xB3" - ".", + ".\0" "\xD0" "\x92" "\xD0" @@ -17478,7 +19026,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD0" "\xBE" - "!", + "!\0" "\xD0" "\x9A" "\xD0" @@ -17557,7 +19105,7 @@ const char* const STRINGS_UK[] = { "\x82" "\xD0" "\xB8" - "", + "\0" "\xD0" "\xBF" "\xD1" @@ -17602,7 +19150,7 @@ const char* const STRINGS_UK[] = { "\x82" "\xD1" "\x96" - ".", + ".\0" "\xD0" "\x9E" "\xD1" @@ -17627,7 +19175,7 @@ const char* const STRINGS_UK[] = { "\x88" "\xD1" "\x83" - "...", + "...\0" "\xD0" "\x9A" "\xD0" @@ -17648,7 +19196,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD0" "\xBE" - "", + "\0" "\xD0" "\xB5" "\xD0" @@ -17683,7 +19231,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD0" "\xBE" - "", + "\0" "\xD0" "\xBD" "\xD0" @@ -17702,7 +19250,7 @@ const char* const STRINGS_UK[] = { "\x81" "\xD1" "\x8F" - "", + "\0" "\xD0" "\x9D" "\xD0" @@ -17743,7 +19291,7 @@ const char* const STRINGS_UK[] = { "\xB5" "\xD1" "\x88" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -17814,7 +19362,7 @@ const char* const STRINGS_UK[] = { "\xB5" "\xD0" "\xB9" - "", + "\0" "\xD0" "\xA2" "\xD0" @@ -17827,7 +19375,7 @@ const char* const STRINGS_UK[] = { "\xB8" "\xD0" "\xB9" - "", + "\0" "\xD0" "\xA1" "\xD0" @@ -17842,7 +19390,7 @@ const char* const STRINGS_UK[] = { "\xB8" "\xD0" "\xB9" - "", + "\0" "\xD0" "\x9A" "\xD0" @@ -17871,7 +19419,7 @@ const char* const STRINGS_UK[] = { "\xB8" "\xD0" "\xB9" - "", + "\0" "\xD0" "\x9E" "\xD0" @@ -17892,7 +19440,7 @@ const char* const STRINGS_UK[] = { "\xBA" "\xD0" "\xB0" - "", + "\0" "\xD0" "\x9D" "\xD1" @@ -17905,7 +19453,7 @@ const char* const STRINGS_UK[] = { "\xB3" "\xD0" "\xBE" - "", + "\0" "\xD0" "\x9F" "\xD1" @@ -17924,7 +19472,7 @@ const char* const STRINGS_UK[] = { "\x82" "\xD0" "\xB8" - "", + "\0" "\xD0" "\x9E" "\xD0" @@ -17941,7 +19489,7 @@ const char* const STRINGS_UK[] = { "\x82" "\xD0" "\xB8" - "", + "\0" "\xD0" "\x9D" "\xD1" @@ -17954,7 +19502,7 @@ const char* const STRINGS_UK[] = { "\xBB" "\xD0" "\xB8" - "", + "\0" "\xD0" "\x92" " \xD1" @@ -17969,7 +19517,7 @@ const char* const STRINGS_UK[] = { "\x87" "\xD1" "\x96" - "", + "\0" "\xD0" "\x97" "\xD0" @@ -17982,7 +19530,7 @@ const char* const STRINGS_UK[] = { "\xB4" "\xD0" "\xB8" - "", + "\0" "\xD0" "\x86" "\xD0" @@ -18003,14 +19551,14 @@ const char* const STRINGS_UK[] = { "\x82" "\xD0" "\xB8" - "", + "\0" "\xD0" "\xA1" "\xD0" "\xBE" "\xD0" "\xBD" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -18051,7 +19599,7 @@ const char* const STRINGS_UK[] = { "\xBA" "\xD0" "\xB8" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -18066,7 +19614,7 @@ const char* const STRINGS_UK[] = { "\xB5" "\xD1" "\x82" - "", + "\0" "\xD0" "\x90" "\xD0" @@ -18113,7 +19661,7 @@ const char* const STRINGS_UK[] = { "\xBE" "\xD1" "\x8E" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -18138,7 +19686,7 @@ const char* const STRINGS_UK[] = { "\xB8" "\xD0" "\xB9" - "", + "\0" "\xD0" "\x90" "\xD0" @@ -18191,7 +19739,7 @@ const char* const STRINGS_UK[] = { "\xBE" "\xD1" "\x97" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -18210,7 +19758,7 @@ const char* const STRINGS_UK[] = { "\x81" "\xD1" "\x82" - "", + "\0" "\xD0" "\x9D" "\xD0" @@ -18229,10 +19777,10 @@ const char* const STRINGS_UK[] = { "\xB5" "\xD1" "\x80" - "", - "Bookerly", - "Noto Sans", - "Open Dyslexic", + "\0" + "Bookerly\0" + "Noto Sans\0" + "Open Dyslexic\0" "\xD0" "\x9C" "\xD0" @@ -18243,7 +19791,7 @@ const char* const STRINGS_UK[] = { "\xB8" "\xD0" "\xB9" - "", + "\0" "\xD0" "\xA1" "\xD0" @@ -18260,7 +19808,7 @@ const char* const STRINGS_UK[] = { "\x96" "\xD0" "\xB9" - "", + "\0" "\xD0" "\x92" "\xD0" @@ -18275,7 +19823,7 @@ const char* const STRINGS_UK[] = { "\xB8" "\xD0" "\xB9" - "", + "\0" "\xD0" "\x94" "\xD1" @@ -18298,7 +19846,7 @@ const char* const STRINGS_UK[] = { "\xB8" "\xD0" "\xB9" - "", + "\0" "\xD0" "\xA9" "\xD1" @@ -18313,7 +19861,7 @@ const char* const STRINGS_UK[] = { "\xB8" "\xD0" "\xB9" - "", + "\0" "\xD0" "\x9D" "\xD0" @@ -18334,7 +19882,7 @@ const char* const STRINGS_UK[] = { "\xB8" "\xD0" "\xB9" - "", + "\0" "\xD0" "\xA8" "\xD0" @@ -18349,7 +19897,7 @@ const char* const STRINGS_UK[] = { "\xB8" "\xD0" "\xB9" - "", + "\0" "\xD0" "\x92" "\xD0" @@ -18368,7 +19916,7 @@ const char* const STRINGS_UK[] = { "\x82" "\xD0" "\xB8" - "", + "\0" "\xD0" "\x9B" "\xD1" @@ -18383,7 +19931,7 @@ const char* const STRINGS_UK[] = { "\x83" "\xD1" "\x87" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -18400,7 +19948,7 @@ const char* const STRINGS_UK[] = { "\x80" "\xD1" "\x83" - "", + "\0" "\xD0" "\x9F" "\xD1" @@ -18417,32 +19965,32 @@ const char* const STRINGS_UK[] = { "\x83" "\xD1" "\x87" - "", + "\0" "1 \xD1" "\x85" "\xD0" "\xB2" - "", + "\0" "5 \xD1" "\x85" "\xD0" "\xB2" - "", + "\0" "10 \xD1" "\x85" "\xD0" "\xB2" - "", + "\0" "15 \xD1" "\x85" "\xD0" "\xB2" - "", + "\0" "30 \xD1" "\x85" "\xD0" "\xB2" - "", + "\0" "1 \xD1" "\x81" "\xD1" @@ -18459,7 +20007,7 @@ const char* const STRINGS_UK[] = { "\xBA" "\xD0" "\xB0" - "", + "\0" "5 \xD1" "\x81" "\xD1" @@ -18476,7 +20024,7 @@ const char* const STRINGS_UK[] = { "\xBE" "\xD0" "\xBA" - "", + "\0" "10 \xD1" "\x81" "\xD1" @@ -18493,7 +20041,7 @@ const char* const STRINGS_UK[] = { "\xBE" "\xD0" "\xBA" - "", + "\0" "15 \xD1" "\x81" "\xD1" @@ -18510,7 +20058,7 @@ const char* const STRINGS_UK[] = { "\xBE" "\xD0" "\xBA" - "", + "\0" "30 \xD1" "\x81" "\xD1" @@ -18527,7 +20075,7 @@ const char* const STRINGS_UK[] = { "\xBE" "\xD0" "\xBA" - "", + "\0" "\xD0" "\x9E" "\xD0" @@ -18542,7 +20090,7 @@ const char* const STRINGS_UK[] = { "\x82" "\xD0" "\xB8" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -18577,7 +20125,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD1" "\x8C" - "...", + "...\0" "\xD0" "\x94" "\xD0" @@ -18620,7 +20168,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD1" "\x8F" - "!", + "!\0" "\xD0" "\x9F" "\xD0" @@ -18647,7 +20195,7 @@ const char* const STRINGS_UK[] = { "\x96" "\xD1" "\x8F" - ": ", + ": \0" "\xD0" "\x9D" "\xD0" @@ -18668,7 +20216,7 @@ const char* const STRINGS_UK[] = { "\x96" "\xD1" "\x8F" - ": ", + ": \0" "\xD0" "\x9E" "\xD0" @@ -18687,7 +20235,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD1" "\x8F" - "...", + "...\0" "\xD0" "\x9E" "\xD0" @@ -18714,7 +20262,7 @@ const char* const STRINGS_UK[] = { "\xB0" "\xD1" "\x94" - "", + "\0" "\xD0" "\x9E" "\xD0" @@ -18751,7 +20299,7 @@ const char* const STRINGS_UK[] = { "\x81" "\xD1" "\x8F" - "", + "\0" "\xD0" "\x9E" "\xD0" @@ -18788,7 +20336,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD0" "\xBE" - "", + "\0" "\xD0" "\x9D" "\xD0" @@ -18879,7 +20427,7 @@ const char* const STRINGS_UK[] = { "\x82" "\xD0" "\xB8" - "", + "\0" "\xD0" "\x97" "\xD0" @@ -18914,7 +20462,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD0" "\xBE" - "", + "\0" "\xD0" "\x97" "\xD0" @@ -18939,7 +20487,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD1" "\x8F" - "...", + "...\0" "\xD0" "\x97" "\xD0" @@ -18982,7 +20530,7 @@ const char* const STRINGS_UK[] = { "\x81" "\xD1" "\x8F" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -18997,7 +20545,7 @@ const char* const STRINGS_UK[] = { "\xBA" "\xD0" "\xB0" - ":", + ":\0" "\xD0" "\x91" "\xD0" @@ -19014,7 +20562,7 @@ const char* const STRINGS_UK[] = { "\xB2" "\xD0" "\xB8" - "", + "\0" "URL \xD1" "\x81" "\xD0" @@ -19055,7 +20603,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD0" "\xBE" - "", + "\0" "\xD0" "\x9D" "\xD0" @@ -19104,7 +20652,7 @@ const char* const STRINGS_UK[] = { "\xBA" "\xD1" "\x83" - "", + "\0" "\xD0" "\x9D" "\xD0" @@ -19157,7 +20705,7 @@ const char* const STRINGS_UK[] = { "\xBA" "\xD1" "\x83" - "", + "\0" "\xD0" "\x9C" "\xD0" @@ -19170,7 +20718,7 @@ const char* const STRINGS_UK[] = { "\xB6" "\xD0" "\xB0" - ": ", + ": \0" "IP \xD0" "\xB0" "\xD0" @@ -19183,7 +20731,7 @@ const char* const STRINGS_UK[] = { "\x81" "\xD0" "\xB0" - ": ", + ": \0" "\xD0" "\x9F" "\xD0" @@ -19228,7 +20776,7 @@ const char* const STRINGS_UK[] = { "\xBA" "\xD0" "\xB0" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -19275,7 +20823,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD0" "\xBE" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -19326,7 +20874,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD1" "\x8F" - "", + "\0" "SD \xD0" "\xBA" "\xD0" @@ -19339,7 +20887,7 @@ const char* const STRINGS_UK[] = { "\xBA" "\xD0" "\xB0" - "", + "\0" "\xC2" "\xAB" " \xD0" @@ -19352,7 +20900,7 @@ const char* const STRINGS_UK[] = { "\xB0" "\xD0" "\xB4" - "", + "\0" "\xC2" "\xAB" " \xD0" @@ -19365,7 +20913,7 @@ const char* const STRINGS_UK[] = { "\x96" "\xD0" "\xB4" - "", + "\0" "\xC2" "\xAB" " \xD0" @@ -19380,7 +20928,7 @@ const char* const STRINGS_UK[] = { "\xBC" "\xD1" "\x83" - "", + "\0" "\xD0" "\x92" "\xD0" @@ -19395,7 +20943,7 @@ const char* const STRINGS_UK[] = { "\x82" "\xD0" "\xB8" - "", + "\0" "\xD0" "\x92" "\xD0" @@ -19410,7 +20958,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD0" "\xBE" - "", + "\0" "\xD0" "\x9E" "\xD0" @@ -19423,7 +20971,7 @@ const char* const STRINGS_UK[] = { "\x82" "\xD0" "\xB8" - "", + "\0" "\xD0" "\x9F" "\xD1" @@ -19446,7 +20994,7 @@ const char* const STRINGS_UK[] = { "\x82" "\xD0" "\xB8" - "", + "\0" "\xD0" "\xA1" "\xD0" @@ -19465,7 +21013,7 @@ const char* const STRINGS_UK[] = { "\x82" "\xD0" "\xB8" - "", + "\0" "\xD0" "\x9F" "\xD1" @@ -19478,7 +21026,7 @@ const char* const STRINGS_UK[] = { "\xB4" "\xD0" "\xBD" - ".", + ".\0" "\xD0" "\x92" "\xD1" @@ -19495,7 +21043,7 @@ const char* const STRINGS_UK[] = { "\x82" "\xD0" "\xB8" - "", + "\0" "\xD0" "\x97" "\xD0" @@ -19508,7 +21056,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD1" "\x82" - ".", + ".\0" "\xD0" "\x9F" "\xD0" @@ -19521,19 +21069,19 @@ const char* const STRINGS_UK[] = { "\xBE" "\xD1" "\x80" - ".", + ".\0" "\xD0" "\xA2" "\xD0" "\xB0" "\xD0" "\xBA" - "", + "\0" "\xD0" "\x9D" "\xD1" "\x96" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -19550,7 +21098,7 @@ const char* const STRINGS_UK[] = { "\x82" "\xD0" "\xB8" - "", + "\0" "\xD0" "\xA1" "\xD1" @@ -19565,7 +21113,7 @@ const char* const STRINGS_UK[] = { "\x82" "\xD0" "\xB8" - "", + "\0" "\xD0" "\xA3" "\xD0" @@ -19576,7 +21124,7 @@ const char* const STRINGS_UK[] = { "\x9C" "\xD0" "\x9A" - "", + "\0" "\xD0" "\x92" "\xD0" @@ -19585,7 +21133,7 @@ const char* const STRINGS_UK[] = { "\x9C" "\xD0" "\x9A" - "", + "\0" "\xD0" "\x9D" "\xD0" @@ -19612,7 +21160,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD0" "\xBE" - "", + "\0" "\xD0" "\x9B" "\xD1" @@ -19621,7 +21169,7 @@ const char* const STRINGS_UK[] = { "\xB2" "\xD0" "\xBE" - "", + "\0" "\xD0" "\x9F" "\xD1" @@ -19632,7 +21180,7 @@ const char* const STRINGS_UK[] = { "\xB2" "\xD0" "\xBE" - "", + "\0" "\xD0" "\x92" "\xD0" @@ -19643,7 +21191,7 @@ const char* const STRINGS_UK[] = { "\x80" "\xD1" "\x83" - "", + "\0" "\xD0" "\x92" "\xD0" @@ -19652,8 +21200,8 @@ const char* const STRINGS_UK[] = { "\xB8" "\xD0" "\xB7" - "", - "OK", + "\0" + "OK\0" "\xD0" "\xA4" "\xD1" @@ -19704,7 +21252,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD1" "\x83" - "", + "\0" "\xD0" "\x9A" "\xD0" @@ -19721,7 +21269,7 @@ const char* const STRINGS_UK[] = { "\x81" "\xD1" "\x82" - "", + "\0" "\xD0" "\x9D" "\xD0" @@ -19764,7 +21312,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD1" "\x83" - "", + "\0" "\xD0" "\x9A" "\xD1" @@ -19813,7 +21361,7 @@ const char* const STRINGS_UK[] = { "\xBB" "\xD1" "\x83" - "", + "\0" "\xD0" "\x92" "\xD1" @@ -19852,7 +21400,7 @@ const char* const STRINGS_UK[] = { "\xB3" "\xD0" "\xBE" - "", + "\0" "\xD0" "\xA0" "\xD1" @@ -19879,7 +21427,7 @@ const char* const STRINGS_UK[] = { "\x81" "\xD1" "\x83" - "", + "\0" "\xD0" "\xA2" "\xD0" @@ -19920,7 +21468,7 @@ const char* const STRINGS_UK[] = { "\x81" "\xD1" "\x83" - "", + "\0" "\xD0" "\xA2" "\xD0" @@ -19933,7 +21481,7 @@ const char* const STRINGS_UK[] = { "\xB8" "\xD0" "\xB9" - "", + "\0" "\xD0" "\xA1" "\xD0" @@ -19950,7 +21498,7 @@ const char* const STRINGS_UK[] = { "\x96" "\xD0" "\xB9" - "", + "\0" "\xD0" "\x96" "\xD0" @@ -19963,7 +21511,7 @@ const char* const STRINGS_UK[] = { "\xB8" "\xD0" "\xB9" - "", + "\0" "\xD0" "\x9A" "\xD0" @@ -19974,7 +21522,7 @@ const char* const STRINGS_UK[] = { "\xB3" "\xD0" "\xB0" - "", + "\0" "\xD0" "\xA0" "\xD0" @@ -19987,7 +21535,7 @@ const char* const STRINGS_UK[] = { "\x96" "\xD0" "\xBB" - "", + "\0" "\xD0" "\xA0" "\xD0" @@ -20000,7 +21548,7 @@ const char* const STRINGS_UK[] = { "\x96" "\xD0" "\xBB" - " 21", + " 21\0" "\xD0" "\x9D" "\xD0" @@ -20021,7 +21569,7 @@ const char* const STRINGS_UK[] = { "\xB3" "\xD0" "\xB8" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -20038,7 +21586,7 @@ const char* const STRINGS_UK[] = { "\x8F" "\xD0" "\xB4" - "", + "\0" "\xD0" "\x9D" "\xD0" @@ -20049,7 +21597,7 @@ const char* const STRINGS_UK[] = { "\xB2" "\xD0" "\xB0" - "", + "\0" "\xD0" "\x90" "\xD0" @@ -20070,7 +21618,7 @@ const char* const STRINGS_UK[] = { "\xBE" "\xD1" "\x80" - "", + "\0" "\xD0" "\xA2" "\xD0" @@ -20099,7 +21647,7 @@ const char* const STRINGS_UK[] = { "\x81" "\xD1" "\x83" - "", + "\0" "\xD0" "\x9A" "\xD0" @@ -20116,9 +21664,9 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD0" "\xB0" - "", - "Lyra", - "Lyra Extended", + "\0" + "Lyra\0" + "Lyra Extended\0" "\xD0" "\x92" "\xD0" @@ -20175,7 +21723,7 @@ const char* const STRINGS_UK[] = { "\x86" "\xD1" "\x96" - "", + "\0" "\xD0" "\x9D" "\xD0" @@ -20224,7 +21772,7 @@ const char* const STRINGS_UK[] = { "\xBA" "\xD0" "\xB8" - "", + "\0" "\xD0" "\x91" "\xD1" @@ -20239,7 +21787,7 @@ const char* const STRINGS_UK[] = { "\xB5" "\xD1" "\x80" - " OPDS", + " OPDS\0" "\xD0" "\x9E" "\xD0" @@ -20286,7 +21834,9 @@ const char* const STRINGS_UK[] = { "\xBA" "\xD0" "\xB0" - "", + "\0" + "Page overlay\0" + "Recents\0" "\xD0" "\x9E" "\xD1" @@ -20311,7 +21861,7 @@ const char* const STRINGS_UK[] = { "\xB3" "\xD0" "\xB8" - "", + "\0" "\xD0" "\x9D" "\xD0" @@ -20346,7 +21896,7 @@ const char* const STRINGS_UK[] = { "\xB8" "\xD0" "\xB3" - "", + "\0" "\xD0" "\x92" "\xD0" @@ -20431,7 +21981,7 @@ const char* const STRINGS_UK[] = { "\x97" "\xD0" "\xB2" - " Calibre", + " Calibre\0" "\xD0" "\x97" "\xD0" @@ -20508,7 +22058,7 @@ const char* const STRINGS_UK[] = { "\xBB" "\xD1" "\x8C" - "?", + "?\0" "\xD0" "\x97" "\xD0" @@ -20521,7 +22071,7 @@ const char* const STRINGS_UK[] = { "\x82" "\xD0" "\xB8" - "", + "\0" "\xD0" "\x97" "\xD0" @@ -20534,7 +22084,7 @@ const char* const STRINGS_UK[] = { "\x81" "\xD0" "\xBA" - " Calibre...", + " Calibre...\0" "\xD0" "\x9D" "\xD0" @@ -20559,7 +22109,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD1" "\x8F" - "", + "\0" "\xD0" "\xA1" "\xD1" @@ -20572,7 +22122,7 @@ const char* const STRINGS_UK[] = { "\x83" "\xD1" "\x81" - "", + "\0" "\xD0" "\x9E" "\xD1" @@ -20589,7 +22139,7 @@ const char* const STRINGS_UK[] = { "\x82" "\xD0" "\xB8" - "", + "\0" "\xD0" "\x97" "\xD0" @@ -20620,7 +22170,7 @@ const char* const STRINGS_UK[] = { "\x8F" "\xD0" "\xBC" - "", + "\0" "\xD0" "\x9D" "\xD0" @@ -20691,7 +22241,7 @@ const char* const STRINGS_UK[] = { "\xBB" "\xD1" "\x96" - "", + "\0" "\xD0" "\x9D" "\xD0" @@ -20716,7 +22266,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD0" "\xBE" - "", + "\0" "\xD0" "\x92" "\xD0" @@ -20743,7 +22293,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD0" "\xBE" - "", + "\0" "\xD0" "\x91" "\xD1" @@ -20816,7 +22366,7 @@ const char* const STRINGS_UK[] = { "\xB8" "\xD1" "\x85" - "", + "\0" "\xD0" "\x91" "\xD1" @@ -20889,7 +22439,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD1" "\x8F" - "", + "\0" "\xD0" "\x9D" "\xD0" @@ -20916,7 +22466,7 @@ const char* const STRINGS_UK[] = { "\xBA" "\xD0" "\xB0" - ")", + ")\0" "\xD0" "\x9F" "\xD1" @@ -20955,7 +22505,7 @@ const char* const STRINGS_UK[] = { "\xBA" "\xD0" "\xB0" - ")", + ")\0" "\xD0" "\x9B" "\xD1" @@ -20980,7 +22530,7 @@ const char* const STRINGS_UK[] = { "\xBA" "\xD0" "\xB0" - ")", + ")\0" "\xD0" "\x9F" "\xD1" @@ -21007,7 +22557,7 @@ const char* const STRINGS_UK[] = { "\xBA" "\xD0" "\xB0" - ")", + ")\0" "\xD0" "\x9F" "\xD0" @@ -21026,7 +22576,7 @@ const char* const STRINGS_UK[] = { "\xB4" "\xD0" "\xBE" - " %", + " %\0" "\xD0" "\x9D" "\xD0" @@ -21045,7 +22595,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD1" "\x83" - "", + "\0" "\xD0" "\x9F" "\xD1" @@ -21086,7 +22636,7 @@ const char* const STRINGS_UK[] = { "\x96" "\xD1" "\x97" - "", + "\0" "\xD0" "\x92" "\xD0" @@ -21119,7 +22669,7 @@ const char* const STRINGS_UK[] = { "\xB3" "\xD0" "\xB8" - "", + "\0" "\xD0" "\x92" "\xD0" @@ -21136,7 +22686,8 @@ const char* const STRINGS_UK[] = { "\x82" "\xD0" "\xB8" - "", + "\0" + "Remove\0" "\xD0" "\x9F" "\xD0" @@ -21179,7 +22730,7 @@ const char* const STRINGS_UK[] = { "\xBE" "\xD0" "\xB4" - "", + "\0" "\xD0" "\xA0" "\xD0" @@ -21192,7 +22743,7 @@ const char* const STRINGS_UK[] = { "\x96" "\xD0" "\xBB" - ": ", + ": \0" " \xD1" "\x81" "\xD1" @@ -21209,7 +22760,7 @@ const char* const STRINGS_UK[] = { "\xBE" "\xD0" "\xBA" - " | ", + " | \0" "\xD0" "\x9A" "\xD0" @@ -21220,7 +22771,7 @@ const char* const STRINGS_UK[] = { "\xB3" "\xD0" "\xB0" - ": ", + ": \0" "\xD0" "\x94" "\xD0" @@ -21255,7 +22806,7 @@ const char* const STRINGS_UK[] = { "\xBE" "\xD1" "\x97" - " URL", + " URL\0" "\xD0" "\x9B" "\xD1" @@ -21292,7 +22843,7 @@ const char* const STRINGS_UK[] = { "\xB8" "\xD0" "\xB7" - ": 10%", + ": 10%\0" "\xD0" "\xA1" "\xD0" @@ -21327,7 +22878,7 @@ const char* const STRINGS_UK[] = { "\x81" "\xD1" "\x83" - "...", + "...\0" "\xD0" "\x9E" "\xD0" @@ -21374,7 +22925,7 @@ const char* const STRINGS_UK[] = { "\x82" "\xD0" "\xB0" - "...", + "...\0" "\xD0" "\x9D" "\xD0" @@ -21435,7 +22986,7 @@ const char* const STRINGS_UK[] = { "\x82" "\xD0" "\xB0" - "", + "\0" "\xD0" "\x9E" "\xD1" @@ -21492,7 +23043,9 @@ const char* const STRINGS_UK[] = { "\x81" "\xD1" "\x83" - "...", + "...\0" + "Mapping remote position...\0" + "Calculating local position...\0" "\xD0" "\x97" "\xD0" @@ -21533,7 +23086,7 @@ const char* const STRINGS_UK[] = { "\x81" "\xD1" "\x83" - "...", + "...\0" "\xD0" "\x9E" "\xD0" @@ -21584,7 +23137,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD0" "\xBE" - "", + "\0" "\xD0" "\x9D" "\xD0" @@ -21661,7 +23214,7 @@ const char* const STRINGS_UK[] = { "\x8F" "\xD1" "\x85" - "", + "\0" "\xD0" "\x9F" "\xD1" @@ -21692,7 +23245,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD0" "\xBE" - "!", + "!\0" "\xD0" "\x92" "\xD1" @@ -21713,7 +23266,7 @@ const char* const STRINGS_UK[] = { "\xB8" "\xD0" "\xB9" - ":", + ":\0" "\xD0" "\x9B" "\xD0" @@ -21732,7 +23285,7 @@ const char* const STRINGS_UK[] = { "\xB8" "\xD0" "\xB9" - ":", + ":\0" "\xD0" "\xA1" "\xD1" @@ -21763,7 +23316,7 @@ const char* const STRINGS_UK[] = { "\xBE" "\xD0" "\xBC" - "", + "\0" "\xD0" "\xA1" "\xD1" @@ -21794,14 +23347,14 @@ const char* const STRINGS_UK[] = { "\xBE" "\xD0" "\xBC" - "", + "\0" " \xD0" "\x92" "\xD1" "\x96" "\xD0" "\xB4" - ": %s", + ": %s\0" "\xD0" "\x97" "\xD0" @@ -21858,7 +23411,7 @@ const char* const STRINGS_UK[] = { "\xB5" "\xD1" "\x81" - "", + "\0" "\xD0" "\x97" "\xD0" @@ -21913,7 +23466,7 @@ const char* const STRINGS_UK[] = { "\xB5" "\xD1" "\x81" - "", + "\0" "\xD0" "\x92" "\xD1" @@ -21972,7 +23525,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD0" "\xBE" - "", + "\0" "\xD0" "\x97" "\xD0" @@ -22023,7 +23576,7 @@ const char* const STRINGS_UK[] = { "\x96" "\xD1" "\x8E" - "?", + "?\0" "\xD0" "\x9F" "\xD1" @@ -22060,7 +23613,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD0" "\xBE" - "!", + "!\0" "\xD0" "\xA1" "\xD0" @@ -22105,7 +23658,7 @@ const char* const STRINGS_UK[] = { "\x81" "\xD1" "\x8F" - "", + "\0" "\xD0" "\xA0" "\xD0" @@ -22118,7 +23671,7 @@ const char* const STRINGS_UK[] = { "\x96" "\xD0" "\xBB" - " ", + " \0" "\xD0" "\x97" "\xD0" @@ -22141,7 +23694,7 @@ const char* const STRINGS_UK[] = { "\x82" "\xD0" "\xB8" - "", + "\0" "\xD0" "\xA1" "\xD1" @@ -22162,7 +23715,7 @@ const char* const STRINGS_UK[] = { "\xB3" "\xD0" "\xB8" - "", + "\0" "\xD0" "\x92" "\xD0" @@ -22193,7 +23746,7 @@ const char* const STRINGS_UK[] = { "\xBB" "\xD1" "\x8C" - "", + "\0" "URL \xD1" "\x81" "\xD0" @@ -22208,7 +23761,7 @@ const char* const STRINGS_UK[] = { "\x80" "\xD0" "\xB0" - " OPDS", + " OPDS\0" "\xD0" "\x97" "\xD0" @@ -22221,7 +23774,7 @@ const char* const STRINGS_UK[] = { "\xBA" "\xD0" "\xB8" - "", + "\0" "\xD0" "\x9D" "\xD0" @@ -22270,7 +23823,7 @@ const char* const STRINGS_UK[] = { "\xBE" "\xD0" "\xBA" - "", + "\0" "[\xD0" "\xBF" "\xD0" @@ -22289,7 +23842,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD1" "\x8F" - "]", + "]\0" "\xD0" "\x97" "\xD0" @@ -22314,7 +23867,7 @@ const char* const STRINGS_UK[] = { "\xBD" "\xD0" "\xB0" - "", + "\0" "\xD0" "\x90" "\xD0" @@ -22357,7 +23910,7 @@ const char* const STRINGS_UK[] = { "\xBC" "\xD0" "\xBA" - ": ", + ": \0" "\xD0" "\x90" "\xD0" @@ -22398,19 +23951,74 @@ const char* const STRINGS_UK[] = { "\x85" "\xD0" "\xB2" - ")", - "Sleep Screen Info Overlay", - "White", - "Gray", - "Black", - "Off", - "Reading progress: Page %lu/%u - %.0f%%", - "Reading progress: Page %lu", - " - Page %d/%d - %.0f%% read", + ")\0" + "Info\0" + "Author\0" + "Series\0" + "Size\0" + "Sleep Screen Info Overlay\0" + "White\0" + "Gray\0" + "Black\0" + "Off\0" + "Reading progress: Page %lu/%u - %.0f%%\0" + "Reading progress: Page %lu\0" + " - Page %d/%d - %.0f%% read\0" + "System Information\0" + "Failed to load XTC file\0" + "Failed to load EPUB file\0" + "FW version\0" + "Chip\0" + "CPU\0" + "MHz\0" + "Free RAM\0" + "Min free\0" + "Max block\0" + "Flash used\0" + "Uptime\0" + "Charging\0" + "Gathering data...\0" + "Reading...\0" +; +// clang-format on + +const uint16_t OFFSETS_UK[] = { + 0, 11, 36, 47, 83, 113, 143, 168, 204, 245, 286, 319, + 349, 377, 401, 431, 452, 481, 538, 564, 586, 614, 639, 657, + 690, 722, 746, 772, 794, 832, 859, 921, 992, 1033, 1076, 1141, + 1238, 1280, 1317, 1394, 1468, 1483, 1543, 1574, 1590, 1642, 1660, 1687, + 1720, 1726, 1747, 1766, 1821, 1886, 1944, 2035, 2046, 2057, 2076, 2091, + 2109, 2161, 2197, 2259, 2297, 2318, 2335, 2352, 2371, 2403, 2469, 2505, + 2569, 2642, 2676, 2723, 2763, 2785, 2825, 2849, 2868, 2915, 2925, 2940, + 2975, 2981, 2994, 3003, 3007, 3011, 3025, 3051, 3077, 3098, 3119, 3141, + 3162, 3192, 3216, 3229, 3251, 3264, 3281, 3297, 3319, 3339, 3349, 3365, + 3382, 3404, 3416, 3433, 3443, 3457, 3475, 3498, 3510, 3524, 3537, 3571, + 3607, 3647, 3656, 3695, 3726, 3739, 3785, 3829, 3860, 3900, 3922, 3941, + 3960, 4024, 4067, 4099, 4146, 4184, 4263, 4307, 4316, 4331, 4361, 4381, + 4404, 4417, 4482, 4548, 4631, 4679, 4708, 4730, 4766, 4786, 4830, 4905, + 4918, 4933, 4962, 4983, 4996, 5015, 5032, 5045, 5061, 5074, 5095, 5102, + 5144, 5159, 5208, 5233, 5288, 5308, 5328, 5337, 5347, 5361, 5372, 5389, + 5404, 5428, 5443, 5464, 5479, 5498, 5513, 5531, 5548, 5555, 5562, 5570, + 5578, 5586, 5605, 5624, 5644, 5664, 5684, 5699, 5738, 5784, 5814, 5838, + 5860, 5888, 5927, 5965, 6063, 6100, 6128, 6173, 6189, 6207, 6254, 6306, + 6362, 6377, 6395, 6443, 6494, 6548, 6564, 6578, 6592, 6608, 6623, 6638, + 6651, 6674, 6693, 6707, 6724, 6738, 6752, 6759, 6764, 6781, 6796, 6807, + 6816, 6844, 6853, 6864, 6875, 6884, 6887, 6941, 6958, 7003, 7054, 7094, + 7122, 7165, 7178, 7195, 7208, 7219, 7232, 7248, 7270, 7287, 7298, 7319, + 7349, 7366, 7371, 7385, 7445, 7496, 7516, 7566, 7579, 7587, 7613, 7650, + 7746, 7829, 7842, 7866, 7891, 7904, 7921, 7953, 8029, 8055, 8083, 8162, + 8240, 8273, 8318, 8349, 8382, 8404, 8424, 8466, 8501, 8518, 8525, 8574, + 8589, 8612, 8625, 8681, 8731, 8770, 8822, 8887, 8949, 8976, 9006, 9051, + 9105, 9195, 9228, 9250, 9270, 9313, 9359, 9372, 9431, 9488, 9550, 9604, + 9643, 9690, 9704, 9727, 9749, 9781, 9805, 9818, 9871, 9892, 9918, 9964, + 10009, 10014, 10021, 10028, 10033, 10059, 10065, 10070, 10076, 10080, 10119, 10146, + 10174, 10193, 10217, 10242, 10253, 10258, 10262, 10266, 10275, 10284, 10294, 10305, + 10312, 10321, 10339, }; -const char* const STRINGS_BE[] = { - "CrossPoint", +// clang-format off +const char STRINGS_BE_DATA[] = + "CrossPoint\0" "\xD0" "\x97" "\xD0" @@ -22427,7 +24035,7 @@ const char* const STRINGS_BE[] = { "\xBA" "\xD0" "\xB0" - "", + "\0" "\xD0" "\xA0" "\xD1" @@ -22444,7 +24052,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD1" "\x83" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -22467,7 +24075,7 @@ const char* const STRINGS_BE[] = { "\xBE" "\xD0" "\xBD" - "", + "\0" "\xD0" "\x9F" "\xD1" @@ -22494,7 +24102,7 @@ const char* const STRINGS_BE[] = { "\xB0" "\xD1" "\x9E" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -22523,7 +24131,7 @@ const char* const STRINGS_BE[] = { "\xB0" "\xD1" "\x9E" - "", + "\0" "\xD0" "\x9D" "\xD0" @@ -22536,7 +24144,7 @@ const char* const STRINGS_BE[] = { "\xB4" "\xD1" "\x8B" - "", + "\0" "\xD0" "\x9F" "\xD1" @@ -22571,7 +24179,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD0" "\xB5" - "", + "\0" "\xD0" "\x9D" "\xD1" @@ -22606,7 +24214,7 @@ const char* const STRINGS_BE[] = { "\xB3" "\xD1" "\x96" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -22645,7 +24253,7 @@ const char* const STRINGS_BE[] = { "\x8D" "\xD0" "\xB9" - "", + "\0" "\xD0" "\xA4" "\xD0" @@ -22678,7 +24286,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD1" "\x8B" - "", + "\0" "\xD0" "\x90" "\xD0" @@ -22707,7 +24315,7 @@ const char* const STRINGS_BE[] = { "\xB5" "\xD0" "\xBB" - "", + "\0" "\xD0" "\xA0" "\xD0" @@ -22734,7 +24342,7 @@ const char* const STRINGS_BE[] = { "\xBC" "\xD0" "\xB0" - "", + "\0" "\xD0" "\x9A" "\xD0" @@ -22755,7 +24363,7 @@ const char* const STRINGS_BE[] = { "\xB3" "\xD1" "\x96" - "", + "\0" "\xD0" "\x9F" "\xD1" @@ -22780,7 +24388,7 @@ const char* const STRINGS_BE[] = { "\xB5" "\xD0" "\xBB" - "", + "\0" "\xD0" "\x86" "\xD0" @@ -22801,7 +24409,7 @@ const char* const STRINGS_BE[] = { "\x8B" "\xD1" "\x8F" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -22828,7 +24436,7 @@ const char* const STRINGS_BE[] = { "\x86" "\xD1" "\x96" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -22875,7 +24483,7 @@ const char* const STRINGS_BE[] = { "\xBA" "\xD1" "\x96" - "", + "\0" "\xD0" "\x9F" "\xD1" @@ -22894,7 +24502,7 @@ const char* const STRINGS_BE[] = { "\xB9" "\xD0" "\xBB" - "", + "\0" "\xD0" "\x92" "\xD1" @@ -22917,7 +24525,7 @@ const char* const STRINGS_BE[] = { "\xB6" "\xD1" "\x8B" - "", + "\0" "\xD0" "\x97" "\xD0" @@ -22934,7 +24542,7 @@ const char* const STRINGS_BE[] = { "\xBA" "\xD0" "\xB0" - "...", + "...\0" "\xD0" "\x97" "\xD0" @@ -22951,7 +24559,7 @@ const char* const STRINGS_BE[] = { "\xBA" "\xD0" "\xB0" - "", + "\0" "\xD0" "\xA1" "\xD0" @@ -22962,7 +24570,7 @@ const char* const STRINGS_BE[] = { "\xBA" "\xD1" "\x96" - " Wi-Fi", + " Wi-Fi\0" "\xD0" "\xA1" "\xD0" @@ -22995,7 +24603,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD1" "\x8B" - "", + "\0" "\xD0" "\x97" "\xD0" @@ -23024,7 +24632,7 @@ const char* const STRINGS_BE[] = { "\xB0" "\xD0" "\xBA" - ": %zu", + ": %zu\0" "\xD0" "\xA1" "\xD0" @@ -23045,7 +24653,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD0" "\xB5" - "...", + "...\0" "\xD0" "\x9F" "\xD0" @@ -23068,7 +24676,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD0" "\xB5" - "...", + "...\0" "\xD0" "\x9F" "\xD0" @@ -23089,7 +24697,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD0" "\xB0" - "!", + "!\0" "\xD0" "\x9F" "\xD0" @@ -23126,7 +24734,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD1" "\x8F" - "", + "\0" "\xD0" "\x97" "\xD0" @@ -23149,7 +24757,7 @@ const char* const STRINGS_BE[] = { "\xBA" "\xD1" "\x83" - "?", + "?\0" "\xD0" "\x97" "\xD0" @@ -23178,7 +24786,7 @@ const char* const STRINGS_BE[] = { "\xBB" "\xD1" "\x8C" - "?", + "?\0" "\xD0" "\x9D" "\xD0" @@ -23235,7 +24843,7 @@ const char* const STRINGS_BE[] = { "\xBA" "\xD1" "\x83" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -23272,7 +24880,7 @@ const char* const STRINGS_BE[] = { "\xBA" "\xD1" "\x96" - "", + "\0" "\xD0" "\xA1" "\xD1" @@ -23315,7 +24923,7 @@ const char* const STRINGS_BE[] = { "\xBF" "\xD1" "\x83" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -23368,7 +24976,7 @@ const char* const STRINGS_BE[] = { "\xBA" "\xD1" "\x96" - " Wi-Fi", + " Wi-Fi\0" "\xD0" "\xA1" "\xD1" @@ -23433,7 +25041,7 @@ const char* const STRINGS_BE[] = { "\x8B" "\xD1" "\x85" - "", + "\0" "\xD0" "\x97" "\xD0" @@ -23472,7 +25080,7 @@ const char* const STRINGS_BE[] = { "\xBF" "\xD1" "\x83" - "...", + "...\0" "\xD0" "\xA0" "\xD1" @@ -23509,7 +25117,7 @@ const char* const STRINGS_BE[] = { "\xBF" "\xD1" "\x83" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -23568,7 +25176,7 @@ const char* const STRINGS_BE[] = { "\xBA" "\xD1" "\x96" - " Wi-Fi", + " Wi-Fi\0" "\xD0" "\x90" "\xD0" @@ -23621,14 +25229,14 @@ const char* const STRINGS_BE[] = { "\x80" "\xD1" "\x8B" - "", + "\0" "\xD0" "\xB0" "\xD0" "\xB1" "\xD0" "\xBE" - " http://", + " http://\0" "\xD0" "\xB0" "\xD0" @@ -23665,12 +25273,12 @@ const char* const STRINGS_BE[] = { "\xBE" "\xD0" "\xB4" - ":", + ":\0" "Calibre \xD0" "\xBF" "\xD0" "\xB0" - " Wi-Fi", + " Wi-Fi\0" "\xD0" "\x92" "\xD1" @@ -23687,7 +25295,7 @@ const char* const STRINGS_BE[] = { "\xB0" "\xD1" "\x81" - " Calibre", + " Calibre\0" "* = \xD0" "\x90" "\xD0" @@ -23722,7 +25330,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD0" "\xB0" - "", + "\0" "MAC-\xD0" "\xB0" "\xD0" @@ -23733,7 +25341,7 @@ const char* const STRINGS_BE[] = { "\xB0" "\xD1" "\x81" - ":", + ":\0" "\xD0" "\x9F" "\xD1" @@ -23750,7 +25358,7 @@ const char* const STRINGS_BE[] = { "\xBA" "\xD0" "\xB0" - " Wi-Fi...", + " Wi-Fi...\0" "\xD0" "\xA3" "\xD0" @@ -23779,12 +25387,12 @@ const char* const STRINGS_BE[] = { "\xBB" "\xD1" "\x8C" - " Wi-Fi", + " Wi-Fi\0" "\xD0" "\xB4" "\xD0" "\xB0" - " ", + " \0" "\xD0" "\x90" "\xD1" @@ -23803,7 +25411,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD0" "\xB5" - ":", + ":\0" "\xD0" "\x90" "\xD1" @@ -23820,7 +25428,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD0" "\xB0" - ":", + ":\0" "1) \xD0" "\xA3" "\xD1" @@ -23851,7 +25459,7 @@ const char* const STRINGS_BE[] = { "\x96" "\xD0" "\xBD" - " CrossPoint Reader", + " CrossPoint Reader\0" "2) \xD0" "\x9F" "\xD0" @@ -23900,7 +25508,7 @@ const char* const STRINGS_BE[] = { "\xBA" "\xD1" "\x96" - " Wi-Fi", + " Wi-Fi\0" "3) \xD0" "\xA3" " Calibre \xD0" @@ -23957,7 +25565,7 @@ const char* const STRINGS_BE[] = { "\x83" "\xC2" "\xBB" - "", + "\0" "\xD0" "\x9D" "\xD0" @@ -24028,7 +25636,7 @@ const char* const STRINGS_BE[] = { "\xBA" "\xD1" "\x96" - "", + "\0" "\xD0" "\xAD" "\xD0" @@ -24039,7 +25647,7 @@ const char* const STRINGS_BE[] = { "\xB0" "\xD0" "\xBD" - "", + "\0" "\xD0" "\xA7" "\xD1" @@ -24054,7 +25662,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD0" "\xB5" - "", + "\0" "\xD0" "\x9A" "\xD1" @@ -24073,7 +25681,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD0" "\xB5" - "", + "\0" "\xD0" "\xA1" "\xD1" @@ -24088,7 +25696,7 @@ const char* const STRINGS_BE[] = { "\xBC" "\xD0" "\xB0" - "", + "\0" "\xD0" "\xAD" "\xD0" @@ -24105,7 +25713,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD1" "\x83" - "", + "\0" "\xD0" "\xA0" "\xD1" @@ -24138,7 +25746,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD1" "\x83" - "", + "\0" "\xD0" "\xA1" "\xD1" @@ -24167,7 +25775,7 @@ const char* const STRINGS_BE[] = { "\x8D" "\xD1" "\x96" - "", + "\0" "\xD0" "\x94" "\xD0" @@ -24206,7 +25814,7 @@ const char* const STRINGS_BE[] = { "\x86" "\xD0" "\xB0" - "", + "\0" "\xD0" "\x97" "\xD0" @@ -24241,11 +25849,12 @@ const char* const STRINGS_BE[] = { "\x82" "\xD1" "\x83" - "", - "Images", - "Display", - "Placeholder", - "Suppress", + "\0" + "Images\0" + "Display\0" + "Placeholder\0" + "Suppress\0" + "Create fallback for invalid TOC\0" "\xD0" "\x9A" "\xD0" @@ -24282,7 +25891,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD0" "\xB5" - " PWR", + " PWR\0" "\xD0" "\x90" "\xD1" @@ -24317,7 +25926,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD1" "\x8F" - "", + "\0" "\xD0" "\x91" "\xD0" @@ -24344,7 +25953,7 @@ const char* const STRINGS_BE[] = { "\xBA" "\xD1" "\x96" - "", + "\0" "\xD0" "\x94" "\xD0" @@ -24403,7 +26012,7 @@ const char* const STRINGS_BE[] = { "\xBB" "\xD0" "\xB0" - "", + "\0" "\xD0" "\xA8" "\xD1" @@ -24428,7 +26037,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD1" "\x8F" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -24471,7 +26080,7 @@ const char* const STRINGS_BE[] = { "\x81" "\xD1" "\x83" - "", + "\0" "\xD0" "\x9C" "\xD1" @@ -24508,7 +26117,7 @@ const char* const STRINGS_BE[] = { "\xB0" "\xD0" "\xBB" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -24529,7 +26138,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD0" "\xB0" - "", + "\0" "\xD0" "\x92" "\xD1" @@ -24568,7 +26177,7 @@ const char* const STRINGS_BE[] = { "\x86" "\xD0" "\xB0" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -24591,7 +26200,7 @@ const char* const STRINGS_BE[] = { "\xBE" "\xD1" "\x9E" - "", + "\0" "\xD0" "\xA1" "\xD0" @@ -24606,8 +26215,45 @@ const char* const STRINGS_BE[] = { "\xB0" "\xD0" "\xB7" - "", - "Show Hidden Files", + "\0" + "Show Hidden Files\0" + "Use Clock\0" + "Clock Settings\0" + "Uses more battery; clock may drift\0" + "Clock\0" + "Clock Format\0" + "Timezone\0" + "24h\0" + "12h\0" + "UTC (GMT/BST)\0" + "Central Europe (CET/CEST)\0" + "Eastern Europe (EET/EEST)\0" + "US Eastern (EST/EDT)\0" + "US Central (CST/CDT)\0" + "US Mountain (MST/MDT)\0" + "US Pacific (PST/PDT)\0" + "Australia Eastern (AEST/AEDT)\0" + "New Zealand (NZST/NZDT)\0" + "Russia (MSK)\0" + "South America (UTC-3)\0" + "Gulf (UTC+4)\0" + "India (UTC+5:30)\0" + "SE Asia (UTC+7)\0" + "China/SE Asia (UTC+8)\0" + "Japan/Korea (UTC+9)\0" + "Sync Time\0" + "Detect Timezone\0" + "Syncing clock...\0" + "Detecting timezone...\0" + "Time synced\0" + "Time sync failed\0" + "Drift: %s\0" + "Last sync: %s\0" + "Timezone detected\0" + "Timezone detect failed\0" + "DST: active\0" + "DST: inactive\0" + "DST: unknown\0" "\xD0" "\xA7" "\xD0" @@ -24642,7 +26288,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD1" "\x8F" - "", + "\0" "\xD0" "\xA1" "\xD1" @@ -24669,7 +26315,7 @@ const char* const STRINGS_BE[] = { "\x8B" "\xD1" "\x8F" - " KOReader", + " KOReader\0" "\xD0" "\x9F" "\xD1" @@ -24708,7 +26354,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD1" "\x96" - "", + "\0" "\xD0" "\x9C" "\xD0" @@ -24717,7 +26363,7 @@ const char* const STRINGS_BE[] = { "\xB2" "\xD0" "\xB0" - "", + "\0" "\xD0" "\x90" "\xD1" @@ -24754,7 +26400,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD1" "\x8F" - "", + "\0" "\xD0" "\x86" "\xD0" @@ -24787,7 +26433,7 @@ const char* const STRINGS_BE[] = { "\xBA" "\xD0" "\xB0" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -24800,7 +26446,7 @@ const char* const STRINGS_BE[] = { "\xBB" "\xD1" "\x8C" - "", + "\0" "URL \xD1" "\x81" "\xD0" @@ -24841,7 +26487,7 @@ const char* const STRINGS_BE[] = { "\x8B" "\xD1" "\x96" - "", + "\0" "\xD0" "\xA1" "\xD1" @@ -24888,7 +26534,7 @@ const char* const STRINGS_BE[] = { "\xB0" "\xD1" "\x9E" - "", + "\0" "\xD0" "\x90" "\xD1" @@ -24911,7 +26557,7 @@ const char* const STRINGS_BE[] = { "\x8B" "\xD1" "\x8F" - "", + "\0" "\xD0" "\x86" "\xD0" @@ -24944,7 +26590,7 @@ const char* const STRINGS_BE[] = { "\xBA" "\xD0" "\xB0" - " KOReader", + " KOReader\0" "\xD0" "\x9F" "\xD0" @@ -24957,7 +26603,7 @@ const char* const STRINGS_BE[] = { "\xBB" "\xD1" "\x8C" - " KOReader", + " KOReader\0" "\xD0" "\x86" "\xD0" @@ -24974,7 +26620,7 @@ const char* const STRINGS_BE[] = { "\xBB" "\xD0" "\xB0" - "", + "\0" "\xD0" "\x91" "\xD1" @@ -24989,7 +26635,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD1" "\x8B" - "", + "\0" "\xD0" "\xA1" "\xD0" @@ -25030,7 +26676,7 @@ const char* const STRINGS_BE[] = { "\x8B" "\xD1" "\x8F" - "", + "\0" "\xD0" "\x9D" "\xD0" @@ -25075,7 +26721,7 @@ const char* const STRINGS_BE[] = { "\xB4" "\xD0" "\xB0" - " Wi-Fi", + " Wi-Fi\0" "\xD0" "\x90" "\xD1" @@ -25098,7 +26744,7 @@ const char* const STRINGS_BE[] = { "\x8B" "\xD1" "\x8F" - "...", + "...\0" "\xD0" "\x90" "\xD1" @@ -25141,7 +26787,7 @@ const char* const STRINGS_BE[] = { "\xB0" "\xD1" "\x8F" - "!", + "!\0" "\xD0" "\x90" "\xD1" @@ -25164,7 +26810,7 @@ const char* const STRINGS_BE[] = { "\x8B" "\xD1" "\x8F" - " KOReader", + " KOReader\0" "\xD0" "\xA1" "\xD1" @@ -25203,7 +26849,7 @@ const char* const STRINGS_BE[] = { "\xB2" "\xD0" "\xB0" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -25240,7 +26886,12 @@ const char* const STRINGS_BE[] = { "\x8B" "\xD1" "\x96" - "", + "\0" + "Register\0" + "Registering...\0" + "Account created successfully!\0" + "Registration failed\0" + "Username already taken\0" "\xD0" "\x93" "\xD0" @@ -25253,7 +26904,7 @@ const char* const STRINGS_BE[] = { "\xB2" "\xD0" "\xB0" - "", + "\0" "\xD0" "\x91" "\xD1" @@ -25314,7 +26965,7 @@ const char* const STRINGS_BE[] = { "\x96" "\xD0" "\xB3" - ".", + ".\0" "\xD0" "\xA3" "\xD0" @@ -25379,7 +27030,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD1" "\x8B" - "!", + "!\0" "\xD0" "\x9A" "\xD0" @@ -25442,7 +27093,7 @@ const char* const STRINGS_BE[] = { "\x86" "\xD1" "\x8C" - "", + "\0" "\xD0" "\xBF" "\xD1" @@ -25483,7 +27134,7 @@ const char* const STRINGS_BE[] = { "\x86" "\xD1" "\x96" - ".", + ".\0" "\xD0" "\x90" "\xD1" @@ -25506,7 +27157,7 @@ const char* const STRINGS_BE[] = { "\x88" "\xD0" "\xB0" - "...", + "...\0" "\xD0" "\x9A" "\xD1" @@ -25529,7 +27180,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD1" "\x8B" - "", + "\0" "\xD1" "\x8D" "\xD0" @@ -25564,7 +27215,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD0" "\xB0" - "", + "\0" "\xD0" "\xBF" "\xD0" @@ -25579,7 +27230,7 @@ const char* const STRINGS_BE[] = { "\xBA" "\xD0" "\xB0" - "", + "\0" "\xD0" "\x9D" "\xD0" @@ -25620,7 +27271,7 @@ const char* const STRINGS_BE[] = { "\x8D" "\xD1" "\x88" - "", + "\0" "\xD0" "\x9F" "\xD1" @@ -25671,7 +27322,7 @@ const char* const STRINGS_BE[] = { "\x8F" "\xD1" "\x9E" - "", + "\0" "\xD0" "\xA6" "\xD1" @@ -25682,7 +27333,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD1" "\x8B" - "", + "\0" "\xD0" "\xA1" "\xD0" @@ -25695,7 +27346,7 @@ const char* const STRINGS_BE[] = { "\xBB" "\xD1" "\x8B" - "", + "\0" "\xD0" "\xA1" "\xD0" @@ -25704,7 +27355,7 @@ const char* const STRINGS_BE[] = { "\xBE" "\xD0" "\xB9" - "", + "\0" "\xD0" "\x92" "\xD0" @@ -25721,7 +27372,7 @@ const char* const STRINGS_BE[] = { "\xBA" "\xD0" "\xB0" - "", + "\0" "\xD0" "\x9D" "\xD1" @@ -25730,7 +27381,7 @@ const char* const STRINGS_BE[] = { "\xBC" "\xD0" "\xB0" - "", + "\0" "\xD0" "\xA3" "\xD0" @@ -25745,7 +27396,7 @@ const char* const STRINGS_BE[] = { "\x86" "\xD1" "\x8C" - "", + "\0" "\xD0" "\x90" "\xD0" @@ -25762,7 +27413,7 @@ const char* const STRINGS_BE[] = { "\x86" "\xD1" "\x8C" - "", + "\0" "\xD0" "\x9D" "\xD1" @@ -25775,7 +27426,7 @@ const char* const STRINGS_BE[] = { "\xBB" "\xD1" "\x96" - "", + "\0" "\xD0" "\xA3" " \xD1" @@ -25804,7 +27455,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD1" "\x8F" - "", + "\0" "\xD0" "\x97" "\xD0" @@ -25819,7 +27470,7 @@ const char* const STRINGS_BE[] = { "\xB4" "\xD1" "\x8B" - "", + "\0" "\xD0" "\x86" "\xD0" @@ -25840,14 +27491,14 @@ const char* const STRINGS_BE[] = { "\x86" "\xD1" "\x8C" - "", + "\0" "\xD0" "\xA1" "\xD0" "\xBE" "\xD0" "\xBD" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -25874,7 +27525,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD0" "\xB5" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -25889,7 +27540,7 @@ const char* const STRINGS_BE[] = { "\x8D" "\xD1" "\x82" - "", + "\0" "\xD0" "\x9B" "\xD0" @@ -25906,7 +27557,7 @@ const char* const STRINGS_BE[] = { "\x84" "\xD1" "\x82" - " (CW)", + " (CW)\0" "\xD0" "\x86" "\xD0" @@ -25923,7 +27574,7 @@ const char* const STRINGS_BE[] = { "\x96" "\xD1" "\x8F" - "", + "\0" "\xD0" "\x9B" "\xD0" @@ -25940,7 +27591,7 @@ const char* const STRINGS_BE[] = { "\x84" "\xD1" "\x82" - " (CCW)", + " (CCW)\0" "\xD0" "\x9D" "\xD0" @@ -25965,7 +27616,7 @@ const char* const STRINGS_BE[] = { "\xB0" "\xD0" "\xB4" - "", + "\0" "\xD0" "\x9D" "\xD0" @@ -25990,10 +27641,10 @@ const char* const STRINGS_BE[] = { "\xB0" "\xD0" "\xB4" - "", - "Bookerly", - "Noto Sans", - "Open Dyslexic", + "\0" + "Bookerly\0" + "Noto Sans\0" + "Open Dyslexic\0" "\xD0" "\x9C" "\xD0" @@ -26010,7 +27661,7 @@ const char* const STRINGS_BE[] = { "\xBA" "\xD1" "\x96" - "", + "\0" "\xD0" "\xA1" "\xD1" @@ -26025,7 +27676,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD1" "\x96" - "", + "\0" "\xD0" "\x92" "\xD1" @@ -26038,7 +27689,7 @@ const char* const STRINGS_BE[] = { "\xBA" "\xD1" "\x96" - "", + "\0" "\xD0" "\x92" "\xD0" @@ -26063,7 +27714,7 @@ const char* const STRINGS_BE[] = { "\xBA" "\xD1" "\x96" - "", + "\0" "\xD0" "\x92" "\xD1" @@ -26074,7 +27725,7 @@ const char* const STRINGS_BE[] = { "\xBA" "\xD1" "\x96" - "", + "\0" "\xD0" "\x97" "\xD0" @@ -26091,7 +27742,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD1" "\x8B" - "", + "\0" "\xD0" "\xA8" "\xD1" @@ -26104,7 +27755,7 @@ const char* const STRINGS_BE[] = { "\xBA" "\xD1" "\x96" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -26121,7 +27772,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD1" "\x96" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -26144,7 +27795,7 @@ const char* const STRINGS_BE[] = { "\xB0" "\xD1" "\x96" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -26161,7 +27812,7 @@ const char* const STRINGS_BE[] = { "\x80" "\xD1" "\x8B" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -26186,32 +27837,32 @@ const char* const STRINGS_BE[] = { "\xB0" "\xD1" "\x96" - "", + "\0" "1 \xD1" "\x85" "\xD0" "\xB2" - "", + "\0" "5 \xD1" "\x85" "\xD0" "\xB2" - "", + "\0" "10 \xD1" "\x85" "\xD0" "\xB2" - "", + "\0" "15 \xD1" "\x85" "\xD0" "\xB2" - "", + "\0" "30 \xD1" "\x85" "\xD0" "\xB2" - "", + "\0" "1 \xD1" "\x81" "\xD1" @@ -26220,7 +27871,7 @@ const char* const STRINGS_BE[] = { "\xB0" "\xD1" "\x80" - ".", + ".\0" "5 \xD1" "\x81" "\xD1" @@ -26229,7 +27880,7 @@ const char* const STRINGS_BE[] = { "\xB0" "\xD1" "\x80" - ".", + ".\0" "10 \xD1" "\x81" "\xD1" @@ -26238,7 +27889,7 @@ const char* const STRINGS_BE[] = { "\xB0" "\xD1" "\x80" - ".", + ".\0" "15 \xD1" "\x81" "\xD1" @@ -26247,7 +27898,7 @@ const char* const STRINGS_BE[] = { "\xB0" "\xD1" "\x80" - ".", + ".\0" "30 \xD1" "\x81" "\xD1" @@ -26256,7 +27907,7 @@ const char* const STRINGS_BE[] = { "\xB0" "\xD1" "\x80" - ".", + ".\0" "\xD0" "\x90" "\xD0" @@ -26277,7 +27928,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD0" "\xB5" - "", + "\0" "\xD0" "\x9F" "\xD1" @@ -26316,7 +27967,7 @@ const char* const STRINGS_BE[] = { "\x8F" "\xD1" "\x9E" - "...", + "...\0" "\xD0" "\x94" "\xD0" @@ -26363,7 +28014,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD0" "\xB5" - "!", + "!\0" "\xD0" "\x91" "\xD1" @@ -26390,7 +28041,7 @@ const char* const STRINGS_BE[] = { "\x96" "\xD1" "\x8F" - ":", + ":\0" "\xD0" "\x9D" "\xD0" @@ -26413,7 +28064,7 @@ const char* const STRINGS_BE[] = { "\x96" "\xD1" "\x8F" - ":", + ":\0" "\xD0" "\x90" "\xD0" @@ -26434,7 +28085,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD0" "\xB5" - "...", + "...\0" "\xD0" "\x90" "\xD0" @@ -26465,7 +28116,7 @@ const char* const STRINGS_BE[] = { "\xBC" "\xD0" "\xB0" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -26500,7 +28151,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD1" "\x8F" - "", + "\0" "\xD0" "\x90" "\xD0" @@ -26539,7 +28190,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD0" "\xB0" - "", + "\0" "\xD0" "\xA3" "\xD1" @@ -26620,7 +28271,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD1" "\x8F" - "", + "\0" "\xD0" "\x97" "\xD0" @@ -26655,7 +28306,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD1" "\x8B" - "", + "\0" "\xD0" "\xA1" "\xD0" @@ -26674,7 +28325,7 @@ const char* const STRINGS_BE[] = { "\xBA" "\xD0" "\xB0" - "...", + "...\0" "\xD0" "\x9F" "\xD0" @@ -26707,7 +28358,7 @@ const char* const STRINGS_BE[] = { "\xBA" "\xD1" "\x96" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -26722,7 +28373,7 @@ const char* const STRINGS_BE[] = { "\xBA" "\xD0" "\xB0" - ":", + ":\0" "\xD0" "\x91" "\xD0" @@ -26735,7 +28386,7 @@ const char* const STRINGS_BE[] = { "\xBC" "\xD1" "\x8F" - "", + "\0" "URL \xD1" "\x81" "\xD0" @@ -26772,7 +28423,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD1" "\x8B" - "", + "\0" "\xD0" "\x9D" "\xD0" @@ -26819,7 +28470,7 @@ const char* const STRINGS_BE[] = { "\xBA" "\xD1" "\x83" - "", + "\0" "\xD0" "\x9D" "\xD0" @@ -26870,7 +28521,7 @@ const char* const STRINGS_BE[] = { "\xBA" "\xD1" "\x83" - "", + "\0" "\xD0" "\xA1" "\xD0" @@ -26881,7 +28532,7 @@ const char* const STRINGS_BE[] = { "\xBA" "\xD0" "\xB0" - ":", + ":\0" "IP-\xD0" "\xB0" "\xD0" @@ -26892,7 +28543,7 @@ const char* const STRINGS_BE[] = { "\xB0" "\xD1" "\x81" - ":", + ":\0" "\xD0" "\x9F" "\xD0" @@ -26937,7 +28588,7 @@ const char* const STRINGS_BE[] = { "\xBA" "\xD0" "\xB0" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -26984,7 +28635,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD0" "\xB0" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -27029,7 +28680,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD1" "\x8F" - "", + "\0" "SD-\xD0" "\xBA" "\xD0" @@ -27040,7 +28691,7 @@ const char* const STRINGS_BE[] = { "\x82" "\xD0" "\xB0" - "", + "\0" "\xC2" "\xAB" " \xD0" @@ -27053,7 +28704,7 @@ const char* const STRINGS_BE[] = { "\xB0" "\xD0" "\xB4" - "", + "\0" "\xC2" "\xAB" " \xD0" @@ -27066,7 +28717,7 @@ const char* const STRINGS_BE[] = { "\xB0" "\xD0" "\xB4" - "", + "\0" "\xC2" "\xAB" " \xD0" @@ -27085,7 +28736,7 @@ const char* const STRINGS_BE[] = { "\xB0" "\xD1" "\x8F" - "", + "\0" "\xD0" "\x90" "\xD0" @@ -27098,8 +28749,8 @@ const char* const STRINGS_BE[] = { "\x86" "\xD1" "\x8C" - "", - "Selected", + "\0" + "Selected\0" "\xD0" "\x92" "\xD1" @@ -27110,7 +28761,7 @@ const char* const STRINGS_BE[] = { "\xB0" "\xD1" "\x80" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -27119,7 +28770,7 @@ const char* const STRINGS_BE[] = { "\x86" "\xD0" "\xB2" - ".", + ".\0" "\xD0" "\x90" "\xD0" @@ -27132,7 +28783,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD0" "\xB0" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -27143,7 +28794,7 @@ const char* const STRINGS_BE[] = { "\xBA" "\xD0" "\xBB" - ".", + ".\0" "\xD0" "\x90" "\xD0" @@ -27158,7 +28809,7 @@ const char* const STRINGS_BE[] = { "\x86" "\xD1" "\x8C" - "", + "\0" "\xD0" "\xA1" "\xD0" @@ -27179,7 +28830,7 @@ const char* const STRINGS_BE[] = { "\x86" "\xD1" "\x8C" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -27198,28 +28849,28 @@ const char* const STRINGS_BE[] = { "\x86" "\xD1" "\x8C" - "", + "\0" "\xD0" "\xA2" "\xD0" "\xB0" "\xD0" "\xBA" - "", + "\0" "\xD0" "\x9D" "\xD0" "\xB5" - "", - "Show", - "Hide", + "\0" + "Show\0" + "Hide\0" "\xD0" "\xA3" "\xD0" "\x9A" "\xD0" "\x9B" - "", + "\0" "\xD0" "\x92" "\xD0" @@ -27228,7 +28879,7 @@ const char* const STRINGS_BE[] = { "\x9A" "\xD0" "\x9B" - "", + "\0" "\xD0" "\x9D" "\xD0" @@ -27255,7 +28906,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD0" "\xB0" - "", + "\0" "\xD0" "\xA3" "\xD0" @@ -27266,7 +28917,7 @@ const char* const STRINGS_BE[] = { "\xB2" "\xD0" "\xB0" - "", + "\0" "\xD0" "\xA3" "\xD0" @@ -27279,7 +28930,7 @@ const char* const STRINGS_BE[] = { "\xB2" "\xD0" "\xB0" - "", + "\0" "\xD0" "\xA3" "\xD0" @@ -27290,7 +28941,7 @@ const char* const STRINGS_BE[] = { "\x80" "\xD1" "\x85" - "", + "\0" "\xD0" "\xA3" "\xD0" @@ -27299,8 +28950,8 @@ const char* const STRINGS_BE[] = { "\x96" "\xD0" "\xB7" - "", - "OK", + "\0" + "OK\0" "\xD0" "\xA4" "\xD1" @@ -27331,7 +28982,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD1" "\x83" - "", + "\0" "\xD0" "\x9A" "\xD0" @@ -27348,22 +28999,22 @@ const char* const STRINGS_BE[] = { "\x81" "\xD1" "\x82" - "", - "Customise Status Bar", - "Chapter Page Count", - "Book Progress Percentage", - "Progress Bar", - "Progress Bar Thickness", - "Thin", - "Medium", - "Thick", - "Book", - "Chapter", - "Chapter 21", - "Book Title", - "Preview", - "Title", - "Battery", + "\0" + "Customise Status Bar\0" + "Chapter Page Count\0" + "Book Progress Percentage\0" + "Progress Bar\0" + "Progress Bar Thickness\0" + "Thin\0" + "Medium\0" + "Thick\0" + "Book\0" + "Chapter\0" + "Chapter 21\0" + "Book Title\0" + "Preview\0" + "Title\0" + "Battery\0" "\xD0" "\xA2" "\xD1" @@ -27392,7 +29043,7 @@ const char* const STRINGS_BE[] = { "\x81" "\xD1" "\x83" - "", + "\0" "\xD0" "\x9A" "\xD0" @@ -27411,9 +29062,9 @@ const char* const STRINGS_BE[] = { "\xB0" "\xD1" "\x8F" - "", - "Lyra", - "Lyra Extended", + "\0" + "Lyra\0" + "Lyra Extended\0" "\xD0" "\x9A" "\xD0" @@ -27456,7 +29107,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD1" "\x8F" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -27511,7 +29162,7 @@ const char* const STRINGS_BE[] = { "\xBA" "\xD1" "\x96" - "", + "\0" "OPDS \xD0" "\xB1" "\xD1" @@ -27526,7 +29177,7 @@ const char* const STRINGS_BE[] = { "\xB5" "\xD1" "\x80" - "", + "\0" "\xD0" "\x92" "\xD0" @@ -27551,7 +29202,9 @@ const char* const STRINGS_BE[] = { "\xBE" "\xD0" "\xB9" - "", + "\0" + "Page overlay\0" + "Recents\0" "\xD0" "\x9D" "\xD1" @@ -27578,7 +29231,7 @@ const char* const STRINGS_BE[] = { "\xB3" "\xD1" "\x96" - "", + "\0" "\xD0" "\x9D" "\xD1" @@ -27611,7 +29264,7 @@ const char* const STRINGS_BE[] = { "\x96" "\xD0" "\xB3" - "", + "\0" "\xD0" "\x92" "\xD1" @@ -27680,7 +29333,7 @@ const char* const STRINGS_BE[] = { "\x87" "\xD1" "\x83" - " Calibre", + " Calibre\0" "\xD0" "\x97" "\xD0" @@ -27749,7 +29402,7 @@ const char* const STRINGS_BE[] = { "\xBB" "\xD1" "\x8C" - "?", + "?\0" "\xD0" "\x97" "\xD0" @@ -27762,7 +29415,7 @@ const char* const STRINGS_BE[] = { "\x86" "\xD1" "\x8C" - "", + "\0" "\xD0" "\x97" "\xD0" @@ -27775,7 +29428,7 @@ const char* const STRINGS_BE[] = { "\x81" "\xD0" "\xBA" - " Calibre...", + " Calibre...\0" "\xD0" "\x9D" "\xD0" @@ -27790,7 +29443,7 @@ const char* const STRINGS_BE[] = { "\xBA" "\xD0" "\xB0" - "", + "\0" "\xD0" "\xA1" "\xD1" @@ -27803,7 +29456,7 @@ const char* const STRINGS_BE[] = { "\x83" "\xD1" "\x81" - "", + "\0" "\xD0" "\x90" "\xD1" @@ -27820,7 +29473,7 @@ const char* const STRINGS_BE[] = { "\x86" "\xD1" "\x8C" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -27843,7 +29496,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD1" "\x96" - "", + "\0" "\xD0" "\x9F" "\xD1" @@ -27900,7 +29553,7 @@ const char* const STRINGS_BE[] = { "\xBA" "\xD1" "\x96" - "", + "\0" "\xD0" "\x9D" "\xD0" @@ -27925,7 +29578,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD0" "\xB0" - "", + "\0" "\xD0" "\xA3" "\xD0" @@ -27952,7 +29605,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD0" "\xB0" - "", + "\0" "\xD0" "\x91" "\xD0" @@ -28025,7 +29678,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD1" "\x96" - "", + "\0" "\xD0" "\x91" "\xD0" @@ -28104,7 +29757,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD0" "\xB5" - "", + "\0" "\xD0" "\x9D" "\xD0" @@ -28129,7 +29782,7 @@ const char* const STRINGS_BE[] = { "\xBA" "\xD0" "\xB0" - ")", + ")\0" "\xD0" "\x9F" "\xD0" @@ -28166,7 +29819,7 @@ const char* const STRINGS_BE[] = { "\xBA" "\xD0" "\xB0" - ")", + ")\0" "\xD0" "\xA3" "\xD0" @@ -28191,7 +29844,7 @@ const char* const STRINGS_BE[] = { "\xBA" "\xD0" "\xB0" - ")", + ")\0" "\xD0" "\xA3" "\xD0" @@ -28218,7 +29871,7 @@ const char* const STRINGS_BE[] = { "\xBA" "\xD0" "\xB0" - ")", + ")\0" "\xD0" "\x9F" "\xD0" @@ -28239,7 +29892,7 @@ const char* const STRINGS_BE[] = { "\xB4" "\xD0" "\xB0" - " %", + " %\0" "\xD0" "\x9D" "\xD0" @@ -28260,7 +29913,7 @@ const char* const STRINGS_BE[] = { "\x83" "\xD1" "\x8E" - "", + "\0" "\xD0" "\xA1" "\xD1" @@ -28303,7 +29956,7 @@ const char* const STRINGS_BE[] = { "\x8D" "\xD1" "\x81" - "", + "\0" "\xD0" "\x92" "\xD1" @@ -28336,9 +29989,10 @@ const char* const STRINGS_BE[] = { "\xB3" "\xD1" "\x96" - "", - "Delete", - "Show page as QR", + "\0" + "Delete\0" + "Remove\0" + "Show page as QR\0" "\xD0" "\xA0" "\xD0" @@ -28353,7 +30007,7 @@ const char* const STRINGS_BE[] = { "\xB5" "\xD0" "\xBB" - ":", + ":\0" "\xD1" "\x81" "\xD1" @@ -28362,7 +30016,7 @@ const char* const STRINGS_BE[] = { "\xB0" "\xD1" "\x80" - ". |", + ". |\0" "\xD0" "\x9A" "\xD0" @@ -28373,7 +30027,7 @@ const char* const STRINGS_BE[] = { "\xB3" "\xD0" "\xB0" - ":", + ":\0" "\xD0" "\x94" "\xD0" @@ -28398,7 +30052,7 @@ const char* const STRINGS_BE[] = { "\xB4" "\xD0" "\xB0" - " URL", + " URL\0" "\xD0" "\xA3" "\xD0" @@ -28439,7 +30093,7 @@ const char* const STRINGS_BE[] = { "\x96" "\xD0" "\xB7" - ": 10%", + ": 10%\0" "\xD0" "\xA1" "\xD1" @@ -28474,7 +30128,7 @@ const char* const STRINGS_BE[] = { "\x81" "\xD1" "\x83" - "...", + "...\0" "\xD0" "\x92" "\xD1" @@ -28519,7 +30173,7 @@ const char* const STRINGS_BE[] = { "\x82" "\xD0" "\xB0" - "...", + "...\0" "\xD0" "\x9D" "\xD0" @@ -28578,7 +30232,7 @@ const char* const STRINGS_BE[] = { "\x82" "\xD0" "\xB0" - "", + "\0" "\xD0" "\x90" "\xD1" @@ -28633,7 +30287,9 @@ const char* const STRINGS_BE[] = { "\x81" "\xD1" "\x83" - "...", + "...\0" + "Mapping remote position...\0" + "Calculating local position...\0" "\xD0" "\x90" "\xD0" @@ -28666,7 +30322,7 @@ const char* const STRINGS_BE[] = { "\x81" "\xD1" "\x83" - "...", + "...\0" "\xD0" "\x94" "\xD0" @@ -28719,7 +30375,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD1" "\x8B" - "", + "\0" "\xD0" "\x9D" "\xD0" @@ -28778,7 +30434,7 @@ const char* const STRINGS_BE[] = { "\xB0" "\xD1" "\x85" - "", + "\0" "\xD0" "\x9F" "\xD1" @@ -28811,7 +30467,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD1" "\x8B" - "!", + "!\0" "\xD0" "\x90" "\xD0" @@ -28828,7 +30484,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD1" "\x8B" - ":", + ":\0" "\xD0" "\x9B" "\xD0" @@ -28845,7 +30501,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD1" "\x8B" - ":", + ":\0" "\xD0" "\xA1" "\xD1" @@ -28872,7 +30528,7 @@ const char* const STRINGS_BE[] = { "\xB3" "\xD0" "\xBE" - "", + "\0" "\xD0" "\xA1" "\xD1" @@ -28889,12 +30545,12 @@ const char* const STRINGS_BE[] = { "\xBA" "\xD0" "\xB0" - " %d/%d", + " %d/%d\0" "\xD0" "\x90" "\xD0" "\xB4" - ": %s", + ": %s\0" "\xD0" "\x9F" "\xD1" @@ -28943,7 +30599,7 @@ const char* const STRINGS_BE[] = { "\x8D" "\xD1" "\x81" - "", + "\0" "\xD0" "\x90" "\xD0" @@ -28992,7 +30648,7 @@ const char* const STRINGS_BE[] = { "\x8D" "\xD1" "\x81" - "", + "\0" "\xD0" "\x90" "\xD0" @@ -29045,7 +30701,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD1" "\x8B" - "", + "\0" "\xD0" "\x90" "\xD0" @@ -29092,7 +30748,7 @@ const char* const STRINGS_BE[] = { "\x8B" "\xD1" "\x8E" - "?", + "?\0" "\xD0" "\x9F" "\xD1" @@ -29127,7 +30783,7 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD1" "\x8B" - "!", + "!\0" "\xD0" "\x9F" "\xD0" @@ -29168,7 +30824,7 @@ const char* const STRINGS_BE[] = { "\x8B" "\xD1" "\x96" - "", + "\0" "\xD0" "\xA0" "\xD0" @@ -29183,7 +30839,7 @@ const char* const STRINGS_BE[] = { "\xB5" "\xD0" "\xBB" - "", + "\0" "\xD0" "\x90" "\xD0" @@ -29202,7 +30858,7 @@ const char* const STRINGS_BE[] = { "\x86" "\xD1" "\x8C" - "", + "\0" "\xD0" "\xA1" "\xD1" @@ -29223,7 +30879,7 @@ const char* const STRINGS_BE[] = { "\xB3" "\xD1" "\x96" - "", + "\0" "\xD0" "\xA3" "\xD0" @@ -29252,7 +30908,7 @@ const char* const STRINGS_BE[] = { "\xBB" "\xD1" "\x8C" - "", + "\0" "URL OPDS \xD1" "\x81" "\xD0" @@ -29267,10 +30923,10 @@ const char* const STRINGS_BE[] = { "\x80" "\xD0" "\xB0" - "", - "Footnotes", - "No footnotes on this page", - "[link]", + "\0" + "Footnotes\0" + "No footnotes on this page\0" + "[link]\0" "\xD0" "\x97" "\xD1" @@ -29309,455 +30965,613 @@ const char* const STRINGS_BE[] = { "\xBD" "\xD0" "\xB0" - "", - "Auto Turn Enabled: ", - "Auto Turn (Pages Per Minute)", - "Sleep Screen Info Overlay", - "White", - "Gray", - "Black", - "Off", - "Reading progress: Page %lu/%u - %.0f%%", - "Reading progress: Page %lu", - " - Page %d/%d - %.0f%% read", + "\0" + "Auto Turn Enabled: \0" + "Auto Turn (Pages Per Minute)\0" + "Info\0" + "Author\0" + "Series\0" + "Size\0" + "Sleep Screen Info Overlay\0" + "White\0" + "Gray\0" + "Black\0" + "Off\0" + "Reading progress: Page %lu/%u - %.0f%%\0" + "Reading progress: Page %lu\0" + " - Page %d/%d - %.0f%% read\0" + "System Information\0" + "Failed to load XTC file\0" + "Failed to load EPUB file\0" + "FW version\0" + "Chip\0" + "CPU\0" + "MHz\0" + "Free RAM\0" + "Min free\0" + "Max block\0" + "Flash used\0" + "Uptime\0" + "Charging\0" + "Gathering data...\0" + "Reading...\0" +; +// clang-format on + +const uint16_t OFFSETS_BE[] = { + 0, 11, 28, 46, 71, 99, 129, 142, 178, 215, 256, 291, + 321, 349, 371, 397, 418, 446, 495, 515, 540, 560, 577, 594, + 629, 664, 688, 714, 736, 774, 799, 830, 893, 932, 977, 1039, + 1114, 1158, 1197, 1266, 1323, 1338, 1381, 1400, 1426, 1472, 1488, 1514, + 1550, 1556, 1576, 1594, 1647, 1709, 1782, 1858, 1869, 1884, 1903, 1918, + 1936, 1971, 2003, 2045, 2081, 2088, 2096, 2108, 2117, 2149, 2191, 2227, + 2255, 2319, 2345, 2390, 2428, 2450, 2490, 2514, 2530, 2548, 2558, 2573, + 2608, 2614, 2627, 2636, 2640, 2644, 2658, 2684, 2710, 2731, 2752, 2774, + 2795, 2825, 2849, 2862, 2884, 2897, 2914, 2930, 2952, 2972, 2982, 2998, + 3015, 3037, 3049, 3066, 3076, 3090, 3108, 3131, 3143, 3157, 3170, 3206, + 3242, 3282, 3291, 3330, 3364, 3377, 3423, 3471, 3494, 3537, 3559, 3577, + 3592, 3635, 3689, 3715, 3760, 3792, 3841, 3879, 3888, 3903, 3933, 3953, + 3976, 3989, 4056, 4126, 4191, 4235, 4262, 4286, 4322, 4337, 4381, 4441, + 4452, 4465, 4474, 4491, 4500, 4515, 4532, 4545, 4576, 4591, 4612, 4619, + 4646, 4661, 4683, 4700, 4723, 4749, 4775, 4784, 4794, 4808, 4825, 4840, + 4853, 4879, 4890, 4907, 4920, 4938, 4963, 4981, 5008, 5015, 5022, 5030, + 5038, 5046, 5058, 5070, 5083, 5096, 5109, 5130, 5173, 5223, 5252, 5277, + 5301, 5333, 5369, 5409, 5494, 5531, 5553, 5587, 5603, 5617, 5660, 5710, + 5764, 5776, 5791, 5839, 5890, 5939, 5953, 5967, 5981, 6001, 6014, 6023, + 6034, 6044, 6057, 6069, 6084, 6105, 6124, 6131, 6136, 6141, 6146, 6153, + 6162, 6190, 6201, 6214, 6225, 6234, 6237, 6270, 6287, 6308, 6327, 6352, + 6365, 6388, 6393, 6400, 6406, 6411, 6419, 6430, 6441, 6449, 6455, 6463, + 6493, 6512, 6517, 6531, 6575, 6632, 6652, 6680, 6693, 6701, 6729, 6764, + 6843, 6918, 6931, 6955, 6970, 6983, 7000, 7024, 7085, 7111, 7139, 7218, + 7302, 7333, 7376, 7407, 7440, 7464, 7486, 7530, 7565, 7572, 7579, 7595, + 7611, 7624, 7636, 7681, 7735, 7774, 7824, 7887, 7947, 7974, 8004, 8041, + 8098, 8170, 8205, 8223, 8241, 8280, 8303, 8312, 8363, 8414, 8470, 8520, + 8557, 8599, 8614, 8633, 8655, 8685, 8709, 8719, 8745, 8752, 8793, 8813, + 8842, 8847, 8854, 8861, 8866, 8892, 8898, 8903, 8909, 8913, 8952, 8979, + 9007, 9026, 9050, 9075, 9086, 9091, 9095, 9099, 9108, 9117, 9127, 9138, + 9145, 9154, 9172, }; -const char* const STRINGS_IT[] = { - "CrossPoint", - "AVVIO IN CORSO", +// clang-format off +const char STRINGS_IT_DATA[] = + "CrossPoint\0" + "AVVIO IN CORSO\0" "MODALIT\xC3" "\x80" - " SLEEP", + " SLEEP\0" "Modalit\xC3" "\xA0" - " Sleep", - "Sfoglia file", - "Trasferimento file", - "Impostazioni", - "Continua a leggere", - "Nessun libro aperto", - "Inizia a leggere di seguito", - "Nessun file trovato", - "Seleziona capitolo", - "Nessun capitolo", - "Fine del libro", - "Capitolo vuoto", - "Indicizzazione", - "Errore di memoria", - "Errore di caricamento pagina", - "File vuoto", - "Fuori dai limiti", - "Caricamento in corso...", - "Caricamento", - "Reti WiFi", - "Nessuna rete trovata", - "%zu reti trovate", - "Scansione...", - "Connessione in corso...", - "Connesso!", - "Connessione fallita", - "Dimenticare la rete?", - "Salvare la password per la prossima volta?", - "Premi OK per scansionare di nuovo", - "Connettiti a una rete", - "Crea Hotspot", - "Connettiti a una rete WiFi esistente", - "Crea una rete WiFi a cui altri possono unirsi", - "Avvio Hotspot in corso...", + " Sleep\0" + "Sfoglia file\0" + "Trasferimento file\0" + "Impostazioni\0" + "Continua a leggere\0" + "Nessun libro aperto\0" + "Inizia a leggere di seguito\0" + "Nessun file trovato\0" + "Seleziona capitolo\0" + "Nessun capitolo\0" + "Fine del libro\0" + "Capitolo vuoto\0" + "Indicizzazione\0" + "Errore di memoria\0" + "Errore di caricamento pagina\0" + "File vuoto\0" + "Fuori dai limiti\0" + "Caricamento in corso...\0" + "Caricamento\0" + "Reti WiFi\0" + "Nessuna rete trovata\0" + "%zu reti trovate\0" + "Scansione...\0" + "Connessione in corso...\0" + "Connesso!\0" + "Connessione fallita\0" + "Dimenticare la rete?\0" + "Salvare la password per la prossima volta?\0" + "Premi OK per scansionare di nuovo\0" + "Connettiti a una rete\0" + "Crea Hotspot\0" + "Connettiti a una rete WiFi esistente\0" + "Crea una rete WiFi a cui altri possono unirsi\0" + "Avvio Hotspot in corso...\0" "Modalit\xC3" "\xA0" - " Hotspot", - "Connetti il tuo dispositivo a questa rete WiFi", - "Apri questo URL nel tuo browser", - "o http://", - "o scansiona il codice QR con il tuo telefono:", - "Calibre Wireless", - "URL Web Calibre", - "* = Criptata | + = Salvata", - "Indirizzo MAC:", - "Controllo WiFi in corso...", - "Inserisci password WiFi", - "a ", - "Ricezione in corso: ", - "Ricevuto: ", - "1) Installa il plugin CrossPoint Reader", - "2) Assicurati di essere sulla stessa rete WiFi", - "3) In Calibre: \"Invia al dispositivo\"", - "\"Tieni questa schermata aperta durante l'invio\"", - "Schermo", - "Lettore", - "Controlli", - "Sistema", - "Schermata di sospensione", + " Hotspot\0" + "Connetti il tuo dispositivo a questa rete WiFi\0" + "Apri questo URL nel tuo browser\0" + "o http://\0" + "o scansiona il codice QR con il tuo telefono:\0" + "Calibre Wireless\0" + "URL Web Calibre\0" + "* = Criptata | + = Salvata\0" + "Indirizzo MAC:\0" + "Controllo WiFi in corso...\0" + "Inserisci password WiFi\0" + "a \0" + "Ricezione in corso: \0" + "Ricevuto: \0" + "1) Installa il plugin CrossPoint Reader\0" + "2) Assicurati di essere sulla stessa rete WiFi\0" + "3) In Calibre: \"Invia al dispositivo\"\0" + "\"Tieni questa schermata aperta durante l'invio\"\0" + "Schermo\0" + "Lettore\0" + "Controlli\0" + "Sistema\0" + "Schermata di sospensione\0" "Modalit\xC3" "\xA0" - " copertina in sleep", - "Nascondi % batteria", - "Spaziatura extra paragrafi", - "Anti-Aliasing testo", - "Images", - "Display", - "Placeholder", - "Suppress", - "Pressione breve tasto accensione", - "Orientamento di lettura", - "Layout pulsanti laterali (lettore)", - "Pressione lunga salta capitolo", - "Famiglia di font del lettore", - "Dimensione font UI", - "Interlinea lettore", - "Margine schermo lettore", - "Allineamento paragrafo lettore", - "Sillabazione", - "Tempo prima di sospensione", - "Show Hidden Files", - "Frequenza di aggiornamento", - "Sincronizzazione KOReader", - "Cerca aggiornamenti", - "Lingua", - "Svuota cache di lettura", - "Nome utente", - "Password", - "URL server di sincronizzazione", - "Corrispondenza documenti", - "Autentica", - "Nome utente KOReader", - "Password KOReader", - "Nome file", - "Binario", - "Imposta prima le credenziali", - "Connessione WiFi fallita", - "Autenticazione in corso...", - "Autenticazione completata con successo!", - "Autenticazione KOReader", + " copertina in sleep\0" + "Nascondi % batteria\0" + "Spaziatura extra paragrafi\0" + "Anti-Aliasing testo\0" + "Images\0" + "Display\0" + "Placeholder\0" + "Suppress\0" + "Create fallback for invalid TOC\0" + "Pressione breve tasto accensione\0" + "Orientamento di lettura\0" + "Layout pulsanti laterali (lettore)\0" + "Pressione lunga salta capitolo\0" + "Famiglia di font del lettore\0" + "Dimensione font UI\0" + "Interlinea lettore\0" + "Margine schermo lettore\0" + "Allineamento paragrafo lettore\0" + "Sillabazione\0" + "Tempo prima di sospensione\0" + "Show Hidden Files\0" + "Use Clock\0" + "Clock Settings\0" + "Uses more battery; clock may drift\0" + "Clock\0" + "Clock Format\0" + "Timezone\0" + "24h\0" + "12h\0" + "UTC (GMT/BST)\0" + "Central Europe (CET/CEST)\0" + "Eastern Europe (EET/EEST)\0" + "US Eastern (EST/EDT)\0" + "US Central (CST/CDT)\0" + "US Mountain (MST/MDT)\0" + "US Pacific (PST/PDT)\0" + "Australia Eastern (AEST/AEDT)\0" + "New Zealand (NZST/NZDT)\0" + "Russia (MSK)\0" + "South America (UTC-3)\0" + "Gulf (UTC+4)\0" + "India (UTC+5:30)\0" + "SE Asia (UTC+7)\0" + "China/SE Asia (UTC+8)\0" + "Japan/Korea (UTC+9)\0" + "Sync Time\0" + "Detect Timezone\0" + "Syncing clock...\0" + "Detecting timezone...\0" + "Time synced\0" + "Time sync failed\0" + "Drift: %s\0" + "Last sync: %s\0" + "Timezone detected\0" + "Timezone detect failed\0" + "DST: active\0" + "DST: inactive\0" + "DST: unknown\0" + "Frequenza di aggiornamento\0" + "Sincronizzazione KOReader\0" + "Cerca aggiornamenti\0" + "Lingua\0" + "Svuota cache di lettura\0" + "Nome utente\0" + "Password\0" + "URL server di sincronizzazione\0" + "Corrispondenza documenti\0" + "Autentica\0" + "Nome utente KOReader\0" + "Password KOReader\0" + "Nome file\0" + "Binario\0" + "Imposta prima le credenziali\0" + "Connessione WiFi fallita\0" + "Autenticazione in corso...\0" + "Autenticazione completata con successo!\0" + "Autenticazione KOReader\0" "La sincronizzazione KOReader \xC3" "\xA8" - " pronta", - "Autenticazione fallita", - "Fatto", - "Verranno cancellati tutti i dati in cache dei libri.", - "I progressi di lettura andranno persi!", - "I libri dovranno essere re-indicizzati", - "quando aperti di nuovo.", - "Svuotamento cache in corso...", - "Cache svuotata", - "elementi rimossi", - "fallito", - "Impossibile svuotare la cache", - "Controlla l'output seriale per i dettagli", - "Scuro", - "Chiaro", - "Personalizzato", - "Copertina", - "Nessuno", - "Adatta", - "Ritaglia", - "Mai", - "Nel lettore", - "Sempre", - "Ignora", - "Sospendi", - "Volta pagina", - "Verticale", + " pronta\0" + "Autenticazione fallita\0" + "Register\0" + "Registering...\0" + "Account created successfully!\0" + "Registration failed\0" + "Username already taken\0" + "Fatto\0" + "Verranno cancellati tutti i dati in cache dei libri.\0" + "I progressi di lettura andranno persi!\0" + "I libri dovranno essere re-indicizzati\0" + "quando aperti di nuovo.\0" + "Svuotamento cache in corso...\0" + "Cache svuotata\0" + "elementi rimossi\0" + "fallito\0" + "Impossibile svuotare la cache\0" + "Controlla l'output seriale per i dettagli\0" + "Scuro\0" + "Chiaro\0" + "Personalizzato\0" + "Copertina\0" + "Nessuno\0" + "Adatta\0" + "Ritaglia\0" + "Mai\0" + "Nel lettore\0" + "Sempre\0" + "Ignora\0" + "Sospendi\0" + "Volta pagina\0" + "Verticale\0" "Orizzontale \xE2" "\x86" "\xBB" - "", - "Invertito", + "\0" + "Invertito\0" "Orizzontale \xE2" "\x86" "\xBA" - "", - "Prec/Succ", - "Succ/Prec", - "Bookerly", - "Noto Sans", - "Open Dyslexic", - "Piccolo", - "Medio", - "Grande", - "X Grande", - "Stretto", - "Normale", - "Largo", - "Giustificato", - "Sinist.", - "Centrato", - "Dest.", - "1 min", - "5 min", - "10 min", - "15 min", - "30 min", - "1 pagina", - "5 pagine", - "10 pagine", - "15 pagine", - "30 pagine", - "Aggiorna", - "Ricerca aggiornamenti...", - "Nuovo aggiornamento disponibile!", - "Versione attuale: ", - "Nuova versione: ", - "Aggiornamento in corso...", - "Nessun aggiornamento disponibile", - "Aggiornamento fallito", - "Aggiornamento completato", - "Tenere premuto il pulsante d'accensione per riaccendere", - "Nessuna voce trovata", - "Download in corso...", - "Download fallito", - "Errore:", - "Senza nome", - "Nessun URL del server configurato", - "Recupero feed fallito", - "Parsing feed fallito", - "Rete: ", - "Indirizzo IP: ", - "Errore: Fallimento generico", - "Errore: Rete non trovata", - "Errore: Timeout di connessione", - "Scheda SD", + "\0" + "Prec/Succ\0" + "Succ/Prec\0" + "Bookerly\0" + "Noto Sans\0" + "Open Dyslexic\0" + "Piccolo\0" + "Medio\0" + "Grande\0" + "X Grande\0" + "Stretto\0" + "Normale\0" + "Largo\0" + "Giustificato\0" + "Sinist.\0" + "Centrato\0" + "Dest.\0" + "1 min\0" + "5 min\0" + "10 min\0" + "15 min\0" + "30 min\0" + "1 pagina\0" + "5 pagine\0" + "10 pagine\0" + "15 pagine\0" + "30 pagine\0" + "Aggiorna\0" + "Ricerca aggiornamenti...\0" + "Nuovo aggiornamento disponibile!\0" + "Versione attuale: \0" + "Nuova versione: \0" + "Aggiornamento in corso...\0" + "Nessun aggiornamento disponibile\0" + "Aggiornamento fallito\0" + "Aggiornamento completato\0" + "Tenere premuto il pulsante d'accensione per riaccendere\0" + "Nessuna voce trovata\0" + "Download in corso...\0" + "Download fallito\0" + "Errore:\0" + "Senza nome\0" + "Nessun URL del server configurato\0" + "Recupero feed fallito\0" + "Parsing feed fallito\0" + "Rete: \0" + "Indirizzo IP: \0" + "Errore: Fallimento generico\0" + "Errore: Rete non trovata\0" + "Errore: Timeout di connessione\0" + "Scheda SD\0" "\xC2" "\xAB" - " Indietro", + " Indietro\0" "\xC2" "\xAB" - " Esci", + " Esci\0" "\xC2" "\xAB" - " Home", - "Seleziona", - "Selezionato", - "Attiva/Disattiva", - "Conferma", - "Annulla", - "Connetti", - "Apri", - "Scarica", - "Riprova", + " Home\0" + "Seleziona\0" + "Selezionato\0" + "Attiva/Disattiva\0" + "Conferma\0" + "Annulla\0" + "Connetti\0" + "Apri\0" + "Scarica\0" + "Riprova\0" "S\xC3" "\xAC" - "", - "No", - "Show", - "Hide", - "ON", - "OFF", - "Non impostato", - "Sinist.", - "Dest.", - "Su", + "\0" + "No\0" + "Show\0" + "Hide\0" + "ON\0" + "OFF\0" + "Non impostato\0" + "Sinist.\0" + "Dest.\0" + "Su\0" "Gi\xC3" "\xB9" - "", - "OK", + "\0" + "OK\0" "Filtro copertina modalit\xC3" "\xA0" - " sleep", - "Contrasto", - "Customise Status Bar", - "Chapter Page Count", - "Book Progress Percentage", - "Progress Bar", - "Progress Bar Thickness", - "Thin", - "Medium", - "Thick", - "Book", - "Chapter", - "Chapter 21", - "Book Title", - "Preview", - "Title", - "Battery", - "Tema UI", - "Classico", - "Lyra", - "Lyra Esteso", - "Fix Sbiadimento da Luce Solare", - "Rimappa Pulsanti Frontali", - "Browser OPDS", - "Copertina + Personalizzato", - "Libri Recenti", - "Nessun libro recente", - "Usa i trasferimenti wireless del dispositivo di Calibre", - "Dimenticare la rete e rimuovere la password salvata?", - "Dimentica", - "Avvio Calibre in corso...", - "Configurazione", - "Stato", - "Pulisci", - "Predefinito", - "Premi un pulsante frontale per ogni funzione", - "Non assegnato", + " sleep\0" + "Contrasto\0" + "Customise Status Bar\0" + "Chapter Page Count\0" + "Book Progress Percentage\0" + "Progress Bar\0" + "Progress Bar Thickness\0" + "Thin\0" + "Medium\0" + "Thick\0" + "Book\0" + "Chapter\0" + "Chapter 21\0" + "Book Title\0" + "Preview\0" + "Title\0" + "Battery\0" + "Tema UI\0" + "Classico\0" + "Lyra\0" + "Lyra Esteso\0" + "Fix Sbiadimento da Luce Solare\0" + "Rimappa Pulsanti Frontali\0" + "Browser OPDS\0" + "Copertina + Personalizzato\0" + "Page overlay\0" + "Recents\0" + "Libri Recenti\0" + "Nessun libro recente\0" + "Usa i trasferimenti wireless del dispositivo di Calibre\0" + "Dimenticare la rete e rimuovere la password salvata?\0" + "Dimentica\0" + "Avvio Calibre in corso...\0" + "Configurazione\0" + "Stato\0" + "Pulisci\0" + "Predefinito\0" + "Premi un pulsante frontale per ogni funzione\0" + "Non assegnato\0" "Gi\xC3" "\xA0" - " assegnato", - "Pulsante laterale Su: Ripristina layout predefinito", + " assegnato\0" + "Pulsante laterale Su: Ripristina layout predefinito\0" "Pulsante laterale Gi\xC3" "\xB9" - ": Annulla mappatura", + ": Annulla mappatura\0" "Indietro (1\xC2" "\xB0" - " pulsante)", + " pulsante)\0" "Conferma (2\xC2" "\xB0" - " pulsante)", + " pulsante)\0" "Sinistra (3\xC2" "\xB0" - " pulsante)", + " pulsante)\0" "Destra (4\xC2" "\xB0" - " pulsante)", - "Vai al %", - "Vai alla Home", - "Sincronizza Progressi", - "Elimina Cache Libro", - "Delete", - "Show page as QR", - "Capitolo: ", - " pagine | ", - "Libro: ", - "Per Calibre, aggiungi /opds all'URL", + " pulsante)\0" + "Vai al %\0" + "Vai alla Home\0" + "Sincronizza Progressi\0" + "Elimina Cache Libro\0" + "Delete\0" + "Remove\0" + "Show page as QR\0" + "Capitolo: \0" + " pagine | \0" + "Libro: \0" + "Per Calibre, aggiungi /opds all'URL\0" "Sinistra/Destra: 1% Su/Gi\xC3" "\xB9" - ": 10%", - "Sincronizzazione orario...", - "Calcolo dell'hash del documento...", - "Impossibile calcolare hash del documento", - "Recupero progressi remoti...", - "Caricamento progressi...", - "Nessuna credenziale configurata", - "Configura account KOReader nelle Impostazioni", - "Progressi trovati!", - "Remoto:", - "Locale:", - "Pagina %d, %.2f%% in totale", - "Pagina %d/%d, %.2f%% in totale", - " Da: %s", - "Applica progressi remoti", - "Carica progressi locali", - "Nessun progresso remoto trovato", - "Caricare la posizione attuale?", - "Progressi caricati!", - "Sincronizzazione fallita", - "Sezione ", - "Carica", - "Stile del Libro", - "Stile Integrato", - "URL del Server OPDS", - "Footnotes", - "No footnotes on this page", - "[link]", - "Cattura schermata", - "Auto Turn Enabled: ", - "Auto Turn (Pages Per Minute)", - "Sleep Screen Info Overlay", - "White", - "Gray", - "Black", - "Off", - "Reading progress: Page %lu/%u - %.0f%%", - "Reading progress: Page %lu", - " - Page %d/%d - %.0f%% read", + ": 10%\0" + "Sincronizzazione orario...\0" + "Calcolo dell'hash del documento...\0" + "Impossibile calcolare hash del documento\0" + "Recupero progressi remoti...\0" + "Mapping remote position...\0" + "Calculating local position...\0" + "Caricamento progressi...\0" + "Nessuna credenziale configurata\0" + "Configura account KOReader nelle Impostazioni\0" + "Progressi trovati!\0" + "Remoto:\0" + "Locale:\0" + "Pagina %d, %.2f%% in totale\0" + "Pagina %d/%d, %.2f%% in totale\0" + " Da: %s\0" + "Applica progressi remoti\0" + "Carica progressi locali\0" + "Nessun progresso remoto trovato\0" + "Caricare la posizione attuale?\0" + "Progressi caricati!\0" + "Sincronizzazione fallita\0" + "Sezione \0" + "Carica\0" + "Stile del Libro\0" + "Stile Integrato\0" + "URL del Server OPDS\0" + "Footnotes\0" + "No footnotes on this page\0" + "[link]\0" + "Cattura schermata\0" + "Auto Turn Enabled: \0" + "Auto Turn (Pages Per Minute)\0" + "Info\0" + "Author\0" + "Series\0" + "Size\0" + "Sleep Screen Info Overlay\0" + "White\0" + "Gray\0" + "Black\0" + "Off\0" + "Reading progress: Page %lu/%u - %.0f%%\0" + "Reading progress: Page %lu\0" + " - Page %d/%d - %.0f%% read\0" + "System Information\0" + "Failed to load XTC file\0" + "Failed to load EPUB file\0" + "FW version\0" + "Chip\0" + "CPU\0" + "MHz\0" + "Free RAM\0" + "Min free\0" + "Max block\0" + "Flash used\0" + "Uptime\0" + "Charging\0" + "Gathering data...\0" + "Reading...\0" +; +// clang-format on + +const uint16_t OFFSETS_IT[] = { + 0, 11, 26, 42, 58, 71, 90, 103, 122, 142, 170, 190, + 209, 225, 240, 255, 270, 288, 317, 328, 345, 369, 381, 391, + 412, 429, 442, 466, 476, 496, 517, 560, 594, 616, 629, 666, + 712, 738, 756, 803, 835, 845, 891, 908, 924, 951, 966, 993, + 1017, 1020, 1041, 1052, 1092, 1139, 1177, 1225, 1233, 1241, 1251, 1259, + 1284, 1313, 1333, 1360, 1380, 1387, 1395, 1407, 1416, 1448, 1481, 1505, + 1540, 1571, 1600, 1619, 1638, 1662, 1693, 1706, 1733, 1751, 1761, 1776, + 1811, 1817, 1830, 1839, 1843, 1847, 1861, 1887, 1913, 1934, 1955, 1977, + 1998, 2028, 2052, 2065, 2087, 2100, 2117, 2133, 2155, 2175, 2185, 2201, + 2218, 2240, 2252, 2269, 2279, 2293, 2311, 2334, 2346, 2360, 2373, 2400, + 2426, 2446, 2453, 2477, 2489, 2498, 2529, 2554, 2564, 2585, 2603, 2613, + 2621, 2650, 2675, 2702, 2742, 2766, 2805, 2828, 2837, 2852, 2882, 2902, + 2925, 2931, 2984, 3023, 3062, 3086, 3116, 3131, 3148, 3156, 3186, 3228, + 3234, 3241, 3256, 3266, 3274, 3281, 3290, 3294, 3306, 3313, 3320, 3329, + 3342, 3352, 3368, 3378, 3394, 3404, 3414, 3423, 3433, 3447, 3455, 3461, + 3468, 3477, 3485, 3493, 3499, 3512, 3520, 3529, 3535, 3541, 3547, 3554, + 3561, 3568, 3577, 3586, 3596, 3606, 3616, 3625, 3650, 3683, 3702, 3719, + 3745, 3778, 3800, 3825, 3881, 3902, 3923, 3940, 3948, 3959, 3993, 4015, + 4036, 4043, 4058, 4086, 4111, 4142, 4152, 4164, 4172, 4180, 4190, 4202, + 4219, 4228, 4236, 4245, 4250, 4258, 4266, 4270, 4273, 4278, 4283, 4286, + 4290, 4304, 4312, 4318, 4321, 4326, 4329, 4362, 4372, 4393, 4412, 4437, + 4450, 4473, 4478, 4485, 4491, 4496, 4504, 4515, 4526, 4534, 4540, 4548, + 4556, 4565, 4570, 4582, 4613, 4639, 4652, 4679, 4692, 4700, 4714, 4735, + 4791, 4844, 4854, 4880, 4895, 4901, 4909, 4921, 4966, 4980, 4995, 5047, + 5089, 5113, 5137, 5161, 5183, 5192, 5206, 5228, 5248, 5255, 5262, 5278, + 5289, 5302, 5310, 5346, 5380, 5407, 5442, 5483, 5512, 5539, 5569, 5594, + 5626, 5672, 5691, 5699, 5707, 5735, 5766, 5775, 5800, 5824, 5856, 5887, + 5907, 5932, 5941, 5948, 5964, 5980, 6000, 6010, 6036, 6043, 6061, 6081, + 6110, 6115, 6122, 6129, 6134, 6160, 6166, 6171, 6177, 6181, 6220, 6247, + 6275, 6294, 6318, 6343, 6354, 6359, 6363, 6367, 6376, 6385, 6395, 6406, + 6413, 6422, 6440, }; -const char* const STRINGS_PL[] = { - "CrossPoint", - "Bootowanie", +// clang-format off +const char STRINGS_PL_DATA[] = + "CrossPoint\0" + "Bootowanie\0" "U\xC5" "\x9B" - "pienie", + "pienie\0" "Przechodz\xC4" "\x99" " w stan u\xC5" "\x9B" - "pienia", + "pienia\0" "Przegl\xC4" "\x85" - "daj pliki", + "daj pliki\0" "Transfer plik\xC3" "\xB3" - "w", - "Ustawienia", + "w\0" + "Ustawienia\0" "Wzn\xC3" "\xB3" - "w czytanie", + "w czytanie\0" "Brak otwartych ksi\xC4" "\x85" "\xC5" "\xBC" - "ek", + "ek\0" "Zacznij czyta\xC4" "\x87" - "", + "\0" "Nie znaleziono plik\xC3" "\xB3" - "w", + "w\0" "Wybierz rozdzia\xC5" "\x82" - "", + "\0" "Brak rozdzia\xC5" "\x82" "\xC3" "\xB3" - "w", + "w\0" "Koniec ksi\xC4" "\x85" "\xC5" "\xBC" - "ki", + "ki\0" "Pusty rozdzia\xC5" "\x82" - "", - "Indeksowanie", + "\0" + "Indeksowanie\0" "B\xC5" "\x82" "\xC4" "\x85" "d pami\xC4" "\x99" - "ci", + "ci\0" "B\xC5" "\x82" "\xC4" "\x85" "d \xC5" "\x82" - "adowania strony", - "Pusty plik", - "Poza granicami", + "adowania strony\0" + "Pusty plik\0" + "Poza granicami\0" "\xC5" "\x81" - "adowanie...", + "adowanie...\0" "\xC5" "\x81" - "adowanie", - "Sieci WiFi", - "Nie znaleziono sieci", - "Znaleziono %zu sieci", - "Skanowanie...", + "adowanie\0" + "Sieci WiFi\0" + "Nie znaleziono sieci\0" + "Znaleziono %zu sieci\0" + "Skanowanie...\0" "\xC5" "\x81" "\xC4" "\x85" - "czenie...", + "czenie...\0" "Po\xC5" "\x82" "\xC4" "\x85" - "czono!", + "czono!\0" "Po\xC5" "\x82" "\xC4" "\x85" - "czenie nieudane", + "czenie nieudane\0" "Zapomnie\xC4" "\x87" " sie\xC4" "\x87" - "?", + "?\0" "Zapisa\xC4" "\x87" " has\xC5" @@ -29768,27 +31582,27 @@ const char* const STRINGS_PL[] = { "\x9B" "\xC4" "\x87" - "?", + "?\0" "Naci\xC5" "\x9B" "nij OK aby skanowa\xC4" "\x87" - " ponownie", + " ponownie\0" "Do\xC5" "\x82" "\xC4" "\x85" - "cz do sieci", + "cz do sieci\0" "Stw\xC3" "\xB3" - "rz Hotspot", + "rz Hotspot\0" "Pod\xC5" "\x82" "\xC4" "\x85" "cz do istniej\xC4" "\x85" - "cej sieci WiFi", + "cej sieci WiFi\0" "Stw\xC3" "\xB3" "rz sie\xC4" @@ -29805,115 +31619,155 @@ const char* const STRINGS_PL[] = { "\x85" " si\xC4" "\x99" - " inni", - "Startowanie Hotspot'a...", - "Tryb Hotspot", + " inni\0" + "Startowanie Hotspot'a...\0" + "Tryb Hotspot\0" "Pod\xC5" "\x82" "\xC4" "\x85" "cz swoje urz\xC4" "\x85" - "dzenie do tej sieci WiFi", + "dzenie do tej sieci WiFi\0" "Otw\xC3" "\xB3" "rz ten URL w przegl\xC4" "\x85" - "darce", - "albo http://", - "albo zeskanuj kod QR telefonem:", + "darce\0" + "albo http://\0" + "albo zeskanuj kod QR telefonem:\0" "Bezprzewodowe po\xC5" "\x82" "\xC4" "\x85" - "czenie z Calibre", - "Calibre Web URL", - "* = Zaszyfrowane | + = Zapisane", - "Adres MAC:", - "Sprawdzanie WiFi...", + "czenie z Calibre\0" + "Calibre Web URL\0" + "* = Zaszyfrowane | + = Zapisane\0" + "Adres MAC:\0" + "Sprawdzanie WiFi...\0" "Wprowad\xC5" "\xBA" " has\xC5" "\x82" - "o WiFi", - "Z ", - "Odbieranie: ", - "Odebrano: ", - "1) Zainstaluj plugin CrossPoint Reader", + "o WiFi\0" + "Z \0" + "Odbieranie: \0" + "Odebrano: \0" + "1) Zainstaluj plugin CrossPoint Reader\0" "2) B\xC4" "\x85" "d\xC5" "\xBA" - " w tej samej sieci WiFi", + " w tej samej sieci WiFi\0" "3) W Calibre: \"Wy\xC5" "\x9B" "lij do urz\xC4" "\x85" - "dzenia\"", + "dzenia\"\0" "\"Zostaw ten ekran podczas wysy\xC5" "\x82" - "ania\"", + "ania\"\0" "Wy\xC5" "\x9B" - "wietlacz", - "Czytnik", - "Sterowanie", - "System", - "Wygaszacz ekranu", + "wietlacz\0" + "Czytnik\0" + "Sterowanie\0" + "System\0" + "Wygaszacz ekranu\0" "Ok\xC5" "\x82" - "adki wygaszacza", - "Ukryj % baterii", + "adki wygaszacza\0" + "Ukryj % baterii\0" "Dodatkowe odst\xC4" "\x99" "py paragraf\xC3" "\xB3" - "w", + "w\0" "Wyg\xC5" "\x82" - "adzanie tekstu", - "Obrazki", - "Pokazuj", - "Ramki", - "Pomijaj", + "adzanie tekstu\0" + "Obrazki\0" + "Pokazuj\0" + "Ramki\0" + "Pomijaj\0" + "Create fallback for invalid TOC\0" "Kr\xC3" "\xB3" "tkie naci\xC5" "\x9B" "ni\xC4" "\x99" - "cie zasilania", + "cie zasilania\0" "Uk\xC5" "\x82" - "ad czytania", + "ad czytania\0" "Uk\xC5" "\x82" "ad przycisk\xC3" "\xB3" - "w bocznych", + "w bocznych\0" "Przytrzymaj aby przeskoczy\xC4" "\x87" " rozdzia\xC5" "\x82" - "", - "Czcionka", - "Rozmiar czcionki", + "\0" + "Czcionka\0" + "Rozmiar czcionki\0" "Odst\xC4" "\x99" "py mi\xC4" "\x99" - "dzy wierszami", - "Marginesy ekranu", + "dzy wierszami\0" + "Marginesy ekranu\0" "Wyjustowanie paragraf\xC3" "\xB3" - "w", + "w\0" "Dzielenie wyraz\xC3" "\xB3" - "w", + "w\0" "Czas do u\xC5" "\x9B" - "pienia", - "Show Hidden Files", + "pienia\0" + "Poka\xC5" + "\xBC" + " ukryte pliki\0" + "Use Clock\0" + "Clock Settings\0" + "Uses more battery; clock may drift\0" + "Clock\0" + "Clock Format\0" + "Timezone\0" + "24h\0" + "12h\0" + "UTC (GMT/BST)\0" + "Central Europe (CET/CEST)\0" + "Eastern Europe (EET/EEST)\0" + "US Eastern (EST/EDT)\0" + "US Central (CST/CDT)\0" + "US Mountain (MST/MDT)\0" + "US Pacific (PST/PDT)\0" + "Australia Eastern (AEST/AEDT)\0" + "New Zealand (NZST/NZDT)\0" + "Russia (MSK)\0" + "South America (UTC-3)\0" + "Gulf (UTC+4)\0" + "India (UTC+5:30)\0" + "SE Asia (UTC+7)\0" + "China/SE Asia (UTC+8)\0" + "Japan/Korea (UTC+9)\0" + "Sync Time\0" + "Detect Timezone\0" + "Syncing clock...\0" + "Detecting timezone...\0" + "Time synced\0" + "Time sync failed\0" + "Drift: %s\0" + "Last sync: %s\0" + "Timezone detected\0" + "Timezone detect failed\0" + "DST: active\0" + "DST: inactive\0" + "DST: unknown\0" "Cz\xC4" "\x99" "stotliwo\xC5" @@ -29924,14 +31778,14 @@ const char* const STRINGS_PL[] = { "\x9B" "wie\xC5" "\xBC" - "ania", - "KOReader Sync", + "ania\0" + "KOReader Sync\0" "Sprawd\xC5" "\xBA" - " uaktualnia", + " uaktualnia\0" "J\xC4" "\x99" - "zyk", + "zyk\0" "Wyczy\xC5" "\x9B" "\xC4" @@ -29944,44 +31798,49 @@ const char* const STRINGS_PL[] = { "\x99" "czn\xC4" "\x85" - " czytnika", + " czytnika\0" "U\xC5" "\xBC" - "ytkownik", + "ytkownik\0" "Has\xC5" "\x82" - "o", - "Serwer URL synchronizacji", + "o\0" + "Serwer URL synchronizacji\0" "Dopasowanie dokument\xC3" "\xB3" - "w", - "Uwierzytelnianie", + "w\0" + "Uwierzytelnianie\0" "U\xC5" "\xBC" - "ytkownik KOReader", + "ytkownik KOReader\0" "Has\xC5" "\x82" - "o KOReader", - "Nazwa pliku", - "Binary", - "Najpierw ustaw uwierzytelnianie", + "o KOReader\0" + "Nazwa pliku\0" + "Binary\0" + "Najpierw ustaw uwierzytelnianie\0" "Po\xC5" "\x82" "\xC4" "\x85" - "czenie z WiFi nieudane", - "Uwierzytelnianie...", + "czenie z WiFi nieudane\0" + "Uwierzytelnianie...\0" "Pomy\xC5" "\x9B" - "lnie uwierzytelniono!", - "KOReader Auth", - "KOReader sync gotowy", + "lnie uwierzytelniono!\0" + "KOReader Auth\0" + "KOReader sync gotowy\0" "B\xC5" "\x82" "\xC4" "\x85" - "d uwierzytelniania", - "Zrobione", + "d uwierzytelniania\0" + "Register\0" + "Registering...\0" + "Account created successfully!\0" + "Registration failed\0" + "Username already taken\0" + "Zrobione\0" "To wyczy\xC5" "\x9B" "ci ca\xC5" @@ -29998,12 +31857,12 @@ const char* const STRINGS_PL[] = { "\x85" "\xC5" "\xBC" - "ek.", + "ek.\0" "Ca\xC5" "\x82" "y post\xC4" "\x99" - "p czytania zostanie stracony!", + "p czytania zostanie stracony!\0" "Ksi\xC4" "\x85" "\xC5" @@ -30012,26 +31871,26 @@ const char* const STRINGS_PL[] = { "\x99" "dzie ponownie indeksowa\xC4" "\x87" - "", - "po ponownym otwarciu.", + "\0" + "po ponownym otwarciu.\0" "Czyszczenie pami\xC4" "\x99" "ci podr\xC4" "\x99" - "cznej...", + "cznej...\0" "Pami\xC4" "\x99" "\xC4" "\x87" " podr\xC4" "\x99" - "czna wyczyszczona", + "czna wyczyszczona\0" "przedmiot\xC3" "\xB3" "w usuni\xC4" "\x99" - "to", - "niepowodzenie", + "to\0" + "niepowodzenie\0" "B\xC5" "\x82" "\xC4" @@ -30040,7 +31899,7 @@ const char* const STRINGS_PL[] = { "\x99" "ci podr\xC4" "\x99" - "cznej", + "cznej\0" "Szczeg\xC3" "\xB3" "\xC5" @@ -30049,93 +31908,93 @@ const char* const STRINGS_PL[] = { "\xBA" " na wyj\xC5" "\x9B" - "ciu szeregowym", - "Ciemny", - "Jasny", + "ciu szeregowym\0" + "Ciemny\0" + "Jasny\0" "W\xC5" "\x82" - "asny", + "asny\0" "Ok\xC5" "\x82" - "adka", - "Brak", - "Dopasuj", - "Przytnij", - "Nigdy", - "W czytniku", - "Zawsze", - "Ignoruj", + "adka\0" + "Brak\0" + "Dopasuj\0" + "Przytnij\0" + "Nigdy\0" + "W czytniku\0" + "Zawsze\0" + "Ignoruj\0" "U\xC5" "\x9B" - "pienie", - "Nast. str.", - "Pionowo", - "Poziomo P", + "pienie\0" + "Nast. str.\0" + "Pionowo\0" + "Poziomo P\0" "Odwr\xC3" "\xB3" - "cony", - "Poziomo L", - "Poprz./Nast.", - "Nast./Poprz.", - "Bookerly", - "Noto Sans", - "Open Dyslexic", + "cony\0" + "Poziomo L\0" + "Poprz./Nast.\0" + "Nast./Poprz.\0" + "Bookerly\0" + "Noto Sans\0" + "Open Dyslexic\0" "Ma\xC5" "\x82" - "y", + "y\0" "\xC5" "\x9A" - "redni", + "redni\0" "Du\xC5" "\xBC" - "y", + "y\0" "B. du\xC5" "\xBC" - "y", + "y\0" "Ma\xC5" "\x82" - "e", - "Normalne", + "e\0" + "Normalne\0" "Du\xC5" "\xBC" - "e", + "e\0" "Wyr\xC3" "\xB3" - "wnane", - "Lewo", + "wnane\0" + "Lewo\0" "\xC5" "\x9A" - "rodek", - "Prawo", - "1 min", - "5 min", - "10 min", - "15 min", - "30 min", + "rodek\0" + "Prawo\0" + "1 min\0" + "5 min\0" + "10 min\0" + "15 min\0" + "30 min\0" "1 stron\xC4" "\x99" - "", - "5 stron", - "10 stron", - "15 stron", - "30 stron", - "Uaktualnij", - "Sprawdzanie aktualizacji...", + "\0" + "5 stron\0" + "10 stron\0" + "15 stron\0" + "30 stron\0" + "Uaktualnij\0" + "Sprawdzanie aktualizacji...\0" "Aktualizacja dost\xC4" "\x99" - "pna!", + "pna!\0" "Bie\xC5" "\xBC" "\xC4" "\x85" - "ca wersja: ", - "Nowa wersja: ", - "Aktualizowanie...", - "Brak aktualizacji", - "Aktualizacja nieudana", + "ca wersja: \0" + "Nowa wersja: \0" + "Aktualizowanie...\0" + "Brak aktualizacji\0" + "Aktualizacja nieudana\0" "Aktualizacja zako\xC5" "\x84" - "czona", + "czona\0" "Przyci\xC5" "\x9B" "nij i przytrzymaj przycisk zasilania aby w\xC5" @@ -30144,23 +32003,23 @@ const char* const STRINGS_PL[] = { "\x85" "czy\xC4" "\x87" - " ponownie", + " ponownie\0" "Brak wpis\xC3" "\xB3" - "w", - "Pobieranie...", + "w\0" + "Pobieranie...\0" "B\xC5" "\x82" "\xC4" "\x85" - "d pobierania", + "d pobierania\0" "B\xC5" "\x82" "\xC4" "\x85" - "d:", - "Nienazwany", - "Brak skonfigurowanego serwera URL", + "d:\0" + "Nienazwany\0" + "Brak skonfigurowanego serwera URL\0" "Nie uda\xC5" "\x82" "o si\xC4" @@ -30169,7 +32028,7 @@ const char* const STRINGS_PL[] = { "\x87" " kana\xC5" "\x82" - "u", + "u\0" "Nie uda\xC5" "\x82" "o si\xC4" @@ -30178,23 +32037,23 @@ const char* const STRINGS_PL[] = { "\x87" " kana\xC5" "\x82" - "u", + "u\0" "Sie\xC4" "\x87" - ": ", - "Adres IP: ", + ": \0" + "Adres IP: \0" "B\xC5" "\x82" "\xC4" "\x85" "d: Og\xC3" "\xB3" - "lny", + "lny\0" "B\xC5" "\x82" "\xC4" "\x85" - "d: Sieci nie znaleziono", + "d: Sieci nie znaleziono\0" "B\xC5" "\x82" "\xC4" @@ -30203,125 +32062,125 @@ const char* const STRINGS_PL[] = { "\x82" "\xC4" "\x85" - "czenia", - "Karta SD", + "czenia\0" + "Karta SD\0" "\xC2" "\xAB" - " Wstecz", + " Wstecz\0" "\xC2" "\xAB" " Wyjd\xC5" "\xBA" - "", + "\0" "\xC2" "\xAB" - " Home", - "Wybierz", - "Wybrano", + " Home\0" + "Wybierz\0" + "Wybrano\0" "Zmie\xC5" "\x84" - "", + "\0" "Potwierd\xC5" "\xBA" - "", - "Anuluj", + "\0" + "Anuluj\0" "Po\xC5" "\x82" "\xC4" "\x85" - "cz", + "cz\0" "Otw\xC3" "\xB3" - "rz", - "Pobierz", + "rz\0" + "Pobierz\0" "Pon\xC3" "\xB3" - "w", - "Tak", - "Nie", + "w\0" + "Tak\0" + "Nie\0" "Poka\xC5" "\xBC" - "", - "Ukryj", + "\0" + "Ukryj\0" "W\xC5" "\x82" - ".", + ".\0" "Wy\xC5" "\x82" - ".", - "Nie ustawiono", - "Lewo", - "Prawo", + ".\0" + "Nie ustawiono\0" + "Lewo\0" + "Prawo\0" "G\xC3" "\xB3" - "ra", + "ra\0" "D\xC3" "\xB3" "\xC5" "\x82" - "", - "OK", + "\0" + "OK\0" "Filtr ok\xC5" "\x82" - "adek wygaszacza", - "Kontrast", - "Dostosowanie paska statusu", + "adek wygaszacza\0" + "Kontrast\0" + "Dostosowanie paska statusu\0" "Strona rozdzia\xC5" "\x82" - "u", + "u\0" "Post\xC4" "\x99" "p ksi\xC4" "\x85" "\xC5" "\xBC" - "ki", + "ki\0" "Pasek post\xC4" "\x99" - "pu", + "pu\0" "Grubo\xC5" "\x9B" "\xC4" "\x87" " paska post\xC4" "\x99" - "pu", - "Cienki", + "pu\0" + "Cienki\0" "\xC5" "\x9A" - "redni", - "Gruby", + "redni\0" + "Gruby\0" "Ksi\xC4" "\x85" "\xC5" "\xBC" - "ka", + "ka\0" "Rozdzia\xC5" "\x82" - "", + "\0" "Rozdzia\xC5" "\x82" - " 21", + " 21\0" "Tytu\xC5" "\x82" " ksi\xC4" "\x85" "\xC5" "\xBC" - "ki", + "ki\0" "Podgl\xC4" "\x85" - "d", + "d\0" "Tytu\xC5" "\x82" - "", - "Bateria", + "\0" + "Bateria\0" "Sk\xC3" "\xB3" - "rka UI", - "Classic", - "Lyra", - "Lyra Extended", + "rka UI\0" + "Classic\0" + "Lyra\0" + "Lyra Extended\0" "Przeciwdzia\xC5" "\x82" "anie blakni\xC4" @@ -30330,45 +32189,47 @@ const char* const STRINGS_PL[] = { "\x82" "o\xC5" "\x84" - "ca", - "Skonfiguruj przednie przyciski", - "OPDS Browser", + "ca\0" + "Skonfiguruj przednie przyciski\0" + "OPDS Browser\0" "Ok\xC5" "\x82" "adka + W\xC5" "\x82" - "asne", - "Ostatnio czytane", - "Brak ostatnio czytanych", + "asne\0" + "Page overlay\0" + "Recents\0" + "Ostatnio czytane\0" + "Brak ostatnio czytanych\0" "Przesy\xC5" "\x82" - "aj bezprzewodowo do Calibre", + "aj bezprzewodowo do Calibre\0" "Zapomnie\xC4" "\x87" " zapisane sieci oraz has\xC5" "\x82" - "a?", - "Zapomnij", - "Startowanie Calibre...", - "Setup", - "Status", + "a?\0" + "Zapomnij\0" + "Startowanie Calibre...\0" + "Setup\0" + "Status\0" "Wyczy\xC5" "\x9B" "\xC4" "\x87" - "", + "\0" "Domy\xC5" "\x9B" - "lnie", + "lnie\0" "Przyci\xC5" "\x9B" "nij przedni przycisk dla ka\xC5" "\xBC" - "dej funkcji", - "Nieprzypisany", + "dej funkcji\0" + "Nieprzypisany\0" "Ju\xC5" "\xBC" - " przypisany", + " przypisany\0" "Boczny przycisk G\xC3" "\xB3" "ra: Przywr\xC3" @@ -30377,25 +32238,25 @@ const char* const STRINGS_PL[] = { "\x87" " domy\xC5" "\x9B" - "lne", + "lne\0" "Boczny przycisk D\xC3" "\xB3" "\xC5" "\x82" - ": Anuluj przypisywanie", + ": Anuluj przypisywanie\0" "Wr\xC3" "\xB3" "\xC4" "\x87" - " (1 przycisk)", + " (1 przycisk)\0" "Potwierd\xC5" "\xBA" - " (2 przycisk)", - "Lewo (3 przycisk)", - "Prawo (4 przycisk)", + " (2 przycisk)\0" + "Lewo (3 przycisk)\0" + "Prawo (4 przycisk)\0" "Id\xC5" "\xBA" - " do %", + " do %\0" "Wr\xC3" "\xB3" "\xC4" @@ -30404,10 +32265,10 @@ const char* const STRINGS_PL[] = { "\x82" "\xC3" "\xB3" - "wnego ekranu", + "wnego ekranu\0" "Post\xC4" "\x99" - "p synchronizacji", + "p synchronizacji\0" "Usu\xC5" "\x84" " pami\xC4" @@ -30422,80 +32283,83 @@ const char* const STRINGS_PL[] = { "\x85" "\xC5" "\xBC" - "ek", + "ek\0" "Usu\xC5" "\x84" - "", + "\0" + "Remove\0" "Poka\xC5" "\xBC" " stron\xC4" "\x99" - " jako kod QR", + " jako kod QR\0" "Rozdzia\xC5" "\x82" - ": ", - " stron | ", + ": \0" + " stron | \0" "Ksi\xC4" "\x85" "\xC5" "\xBC" - "ka: ", - "Dla Calibre, dodaj /opds do adresu URL", + "ka: \0" + "Dla Calibre, dodaj /opds do adresu URL\0" "Lewo/Prawo: 1% G\xC3" "\xB3" "ra/D\xC3" "\xB3" "\xC5" "\x82" - ": 10%", - "Synchronizacja czasu...", - "Obliczanie sumy kontrolnej...", + ": 10%\0" + "Synchronizacja czasu...\0" + "Obliczanie sumy kontrolnej...\0" "B\xC5" "\x82" "\xC4" "\x85" - "d obliczania sumy kontrolnej", + "d obliczania sumy kontrolnej\0" "Pobieranie zdalnego post\xC4" "\x99" - "pu..", + "pu..\0" + "Mapping remote position...\0" + "Calculating local position...\0" "Post\xC4" "\x99" "p wysy\xC5" "\x82" - "ania...", + "ania...\0" "Nie skonfigurowano po\xC5" "\x9B" "wiadcze\xC5" "\x84" - "", - "Ustaw konto KOReader w ustawieniach", + "\0" + "Ustaw konto KOReader w ustawieniach\0" "Post\xC4" "\x99" - "p znaleziono!", - "Zdalny:", - "Lokalny:", + "p znaleziono!\0" + "Zdalny:\0" + "Lokalny:\0" "Strona %d, %.2f%% ca\xC5" "\x82" "o\xC5" "\x9B" - "ci", + "ci\0" "Strona %d/%d, %.2f%% ca\xC5" "\x82" "o\xC5" "\x9B" - "ci", - " Od: %s", + "ci\0" + " Od: %s\0" "Zastosuj zdalny post\xC4" "\x99" - "p", + "p\0" "Prze\xC5" "\x9B" "lij lokalny post\xC4" "\x99" - "p", + "p\0" "Nie znaleziono zdalnego post\xC4" "\x99" - "pu", + "pu\0" "Wys\xC5" "\x82" "a\xC4" @@ -30504,157 +32368,212 @@ const char* const STRINGS_PL[] = { "\x85" " pozycj\xC4" "\x99" - "?", + "?\0" "Post\xC4" "\x99" "p wys\xC5" "\x82" - "any!", - "Synchronizacja nieudana", - "Sekcja ", + "any!\0" + "Synchronizacja nieudana\0" + "Sekcja \0" "Wy\xC5" "\x9B" - "lij", + "lij\0" "Styl ksi\xC4" "\x85" "\xC5" "\xBC" - "ki", - "Style wbudowane w EPUB", - "URL serwera OPDS", - "Przypisy", + "ki\0" + "Style wbudowane w EPUB\0" + "URL serwera OPDS\0" + "Przypisy\0" "Brak przypis\xC3" "\xB3" - "w na tej stronie", - "[link]", + "w na tej stronie\0" + "[link]\0" "Zr\xC3" "\xB3" - "b zrzut ekranu", - "Auto-kartkowanie: ", - "Auto-kartkowanie (str./min)", - "Sleep Screen Info Overlay", - "White", - "Gray", - "Black", - "Off", - "Reading progress: Page %lu/%u - %.0f%%", - "Reading progress: Page %lu", - " - Page %d/%d - %.0f%% read", + "b zrzut ekranu\0" + "Auto-kartkowanie: \0" + "Auto-kartkowanie (str./min)\0" + "Info\0" + "Author\0" + "Series\0" + "Size\0" + "Sleep Screen Info Overlay\0" + "White\0" + "Gray\0" + "Black\0" + "Off\0" + "Reading progress: Page %lu/%u - %.0f%%\0" + "Reading progress: Page %lu\0" + " - Page %d/%d - %.0f%% read\0" + "System Information\0" + "Failed to load XTC file\0" + "Failed to load EPUB file\0" + "FW version\0" + "Chip\0" + "CPU\0" + "MHz\0" + "Free RAM\0" + "Min free\0" + "Max block\0" + "Flash used\0" + "Uptime\0" + "Charging\0" + "Gathering data...\0" + "Reading...\0" +; +// clang-format on + +const uint16_t OFFSETS_PL[] = { + 0, 11, 22, 32, 61, 79, 96, 107, 123, 148, 164, 187, + 205, 223, 240, 256, 269, 285, 310, 321, 336, 350, 361, 372, + 393, 414, 428, 442, 455, 477, 495, 529, 565, 583, 599, 636, + 695, 720, 733, 779, 811, 824, 856, 893, 909, 941, 952, 972, + 994, 997, 1010, 1021, 1060, 1093, 1132, 1170, 1183, 1191, 1202, 1209, + 1226, 1246, 1262, 1293, 1313, 1321, 1329, 1335, 1343, 1375, 1408, 1424, + 1452, 1491, 1500, 1517, 1544, 1561, 1586, 1605, 1623, 1643, 1653, 1668, + 1703, 1709, 1722, 1731, 1735, 1739, 1753, 1779, 1805, 1826, 1847, 1869, + 1890, 1920, 1944, 1957, 1979, 1992, 2009, 2025, 2047, 2067, 2077, 2093, + 2110, 2132, 2144, 2161, 2171, 2185, 2203, 2226, 2238, 2252, 2265, 2296, + 2310, 2330, 2337, 2377, 2389, 2396, 2422, 2446, 2463, 2484, 2500, 2512, + 2519, 2551, 2580, 2600, 2628, 2642, 2663, 2687, 2696, 2711, 2741, 2761, + 2784, 2793, 2844, 2886, 2932, 2954, 2990, 3023, 3046, 3060, 3108, 3152, + 3159, 3165, 3173, 3182, 3187, 3195, 3204, 3210, 3221, 3228, 3236, 3246, + 3257, 3265, 3275, 3286, 3296, 3309, 3322, 3331, 3341, 3355, 3361, 3369, + 3375, 3384, 3390, 3399, 3405, 3416, 3421, 3429, 3435, 3441, 3447, 3454, + 3461, 3468, 3478, 3486, 3495, 3504, 3513, 3524, 3552, 3576, 3595, 3609, + 3627, 3645, 3667, 3692, 3761, 3774, 3788, 3806, 3814, 3825, 3859, 3891, + 3931, 3939, 3950, 3966, 3995, 4041, 4050, 4060, 4070, 4078, 4086, 4094, + 4101, 4112, 4119, 4128, 4136, 4144, 4151, 4155, 4159, 4166, 4172, 4177, + 4183, 4197, 4202, 4208, 4214, 4220, 4223, 4249, 4258, 4285, 4303, 4321, + 4336, 4361, 4368, 4376, 4382, 4392, 4402, 4415, 4432, 4441, 4448, 4456, + 4467, 4475, 4480, 4494, 4536, 4567, 4580, 4599, 4612, 4620, 4637, 4661, + 4697, 4736, 4745, 4768, 4774, 4781, 4791, 4802, 4851, 4865, 4881, 4925, + 4969, 4989, 5013, 5031, 5050, 5060, 5088, 5111, 5148, 5154, 5161, 5188, + 5200, 5212, 5224, 5263, 5296, 5320, 5350, 5384, 5415, 5442, 5472, 5494, + 5527, 5563, 5583, 5591, 5600, 5628, 5659, 5668, 5692, 5718, 5751, 5778, + 5796, 5820, 5828, 5836, 5851, 5874, 5891, 5900, 5931, 5938, 5957, 5976, + 6004, 6009, 6016, 6023, 6028, 6054, 6060, 6065, 6071, 6075, 6114, 6141, + 6169, 6188, 6212, 6237, 6248, 6253, 6257, 6261, 6270, 6279, 6289, 6300, + 6307, 6316, 6334, }; -const char* const STRINGS_FI[] = { - "CrossPoint", +// clang-format off +const char STRINGS_FI_DATA[] = + "CrossPoint\0" "K\xC3" "\x84" - "YNNISTYY", - "LEPOTILA", + "YNNISTYY\0" + "LEPOTILA\0" "Siirryt\xC3" "\xA4" "\xC3" "\xA4" - "n lepotilaan", - "Selaa tiedostoja", - "Tiedostonsiirto", - "Asetukset", - "Jatka lukemista", - "Kirjaa ei valittu", - "Aloita lukeminen", + "n lepotilaan\0" + "Selaa tiedostoja\0" + "Tiedostonsiirto\0" + "Asetukset\0" + "Jatka lukemista\0" + "Kirjaa ei valittu\0" + "Aloita lukeminen\0" "Ei tiedostoja l\xC3" "\xB6" - "ytynyt", - "Valitse luku", - "Ei lukuja", - "Kirjan loppu", + "ytynyt\0" + "Valitse luku\0" + "Ei lukuja\0" + "Kirjan loppu\0" "Tyhj\xC3" "\xA4" - " luku", - "Indeksoidaan", - "Muistivirhe", - "Sivun latausvirhe", + " luku\0" + "Indeksoidaan\0" + "Muistivirhe\0" + "Sivun latausvirhe\0" "Tyhj\xC3" "\xA4" - " tiedosto", - "Alueen ulkopuolella", - "Ladataan...", - "Ladataan", - "WiFi-verkot", + " tiedosto\0" + "Alueen ulkopuolella\0" + "Ladataan...\0" + "Ladataan\0" + "WiFi-verkot\0" "Verkkoja ei l\xC3" "\xB6" - "ytynyt", + "ytynyt\0" "%zu verkkoa l\xC3" "\xB6" - "ydetty", + "ydetty\0" "Etsit\xC3" "\xA4" "\xC3" "\xA4" - "n...", + "n...\0" "Yhdistet\xC3" "\xA4" "\xC3" "\xA4" - "n...", - "Yhdistetty!", + "n...\0" + "Yhdistetty!\0" "Yhteys ep\xC3" "\xA4" - "onnistui", - "Unohda verkko?", - "Tallenna salasana seuraavaa kertaa varten?", + "onnistui\0" + "Unohda verkko?\0" + "Tallenna salasana seuraavaa kertaa varten?\0" "Paina OK etsi\xC3" "\xA4" - "ksesi uudelleen", - "Liity verkkoon", - "Luo yhteyspiste", + "ksesi uudelleen\0" + "Liity verkkoon\0" + "Luo yhteyspiste\0" "Yhdist\xC3" "\xA4" - " olemassa olevaan WiFi-verkkoon", + " olemassa olevaan WiFi-verkkoon\0" "Luo WiFi-verkko, johon muut voivat liitty\xC3" "\xA4" - "", + "\0" "K\xC3" "\xA4" "ynnistet\xC3" "\xA4" "\xC3" "\xA4" - "n yhteyspiste...", - "Yhteyspistetila", + "n yhteyspiste...\0" + "Yhteyspistetila\0" "Yhdist\xC3" "\xA4" " laitteesi t\xC3" "\xA4" "h\xC3" "\xA4" - "n WiFi-verkkoon", + "n WiFi-verkkoon\0" "Avaa t\xC3" "\xA4" "m\xC3" "\xA4" - " osoite selaimessasi", - "tai http://", - "tai skannaa QR-koodi puhelimellasi:", - "Calibre langaton", - "Calibre-verkko-osoite", - "* = Salattu | + = Tallennettu", - "MAC-osoite:", - "Tarkistetaan WiFi...", + " osoite selaimessasi\0" + "tai http://\0" + "tai skannaa QR-koodi puhelimellasi:\0" + "Calibre langaton\0" + "Calibre-verkko-osoite\0" + "* = Salattu | + = Tallennettu\0" + "MAC-osoite:\0" + "Tarkistetaan WiFi...\0" "Sy\xC3" "\xB6" "t\xC3" "\xA4" - " WiFi-salasana", - "verkkoon ", - "Vastaanotetaan: ", - "Vastaanotettu: ", + " WiFi-salasana\0" + "verkkoon \0" + "Vastaanotetaan: \0" + "Vastaanotettu: \0" "1) Asenna CrossPoint Reader -lis\xC3" "\xA4" - "osa", - "2) Ole samassa WiFi-verkossa", + "osa\0" + "2) Ole samassa WiFi-verkossa\0" "3) Calibressa: \"L\xC3" "\xA4" "het\xC3" "\xA4" - " laitteelle\"", + " laitteelle\"\0" "\"Pid\xC3" "\xA4" " t\xC3" @@ -30667,120 +32586,163 @@ const char* const STRINGS_FI[] = { "\xB6" " auki l\xC3" "\xA4" - "hetyksen aikana\"", + "hetyksen aikana\"\0" "N\xC3" "\xA4" "ytt\xC3" "\xB6" - "", - "Lukija", - "Ohjaimet", + "\0" + "Lukija\0" + "Ohjaimet\0" "J\xC3" "\xA4" "rjestelm\xC3" "\xA4" - "", + "\0" "Lepotilan\xC3" "\xA4" "ytt\xC3" "\xB6" - "", + "\0" "Lepotilan\xC3" "\xA4" "yt\xC3" "\xB6" - "n kansitila", - "Piilota akun %", + "n kansitila\0" + "Piilota akun %\0" "Kappaleiden lis\xC3" "\xA4" "v\xC3" "\xA4" - "li", - "Tekstin reunanpehmennys", - "Images", - "Display", - "Placeholder", - "Suppress", - "Lyhyt virtapainikkeen painallus", - "Lukusuunta", - "Sivupainikkeiden asettelu (lukija)", + "li\0" + "Tekstin reunanpehmennys\0" + "Images\0" + "Display\0" + "Placeholder\0" + "Suppress\0" + "Create fallback for invalid TOC\0" + "Lyhyt virtapainikkeen painallus\0" + "Lukusuunta\0" + "Sivupainikkeiden asettelu (lukija)\0" "Pitk\xC3" "\xA4" - " painallus: lukuhyppy", - "Lukijan fonttiperhe", + " painallus: lukuhyppy\0" + "Lukijan fonttiperhe\0" "K\xC3" "\xA4" "ytt\xC3" "\xB6" "liittym\xC3" "\xA4" - "n fonttikoko", + "n fonttikoko\0" "Lukijan riviv\xC3" "\xA4" - "li", + "li\0" "Lukijan n\xC3" "\xA4" "ytt\xC3" "\xB6" - "marginaali", - "Lukijan kappaletasaus", - "Tavutus", - "Aika lepotilaan", - "Show Hidden Files", + "marginaali\0" + "Lukijan kappaletasaus\0" + "Tavutus\0" + "Aika lepotilaan\0" + "Show Hidden Files\0" + "Use Clock\0" + "Clock Settings\0" + "Uses more battery; clock may drift\0" + "Clock\0" + "Clock Format\0" + "Timezone\0" + "24h\0" + "12h\0" + "UTC (GMT/BST)\0" + "Central Europe (CET/CEST)\0" + "Eastern Europe (EET/EEST)\0" + "US Eastern (EST/EDT)\0" + "US Central (CST/CDT)\0" + "US Mountain (MST/MDT)\0" + "US Pacific (PST/PDT)\0" + "Australia Eastern (AEST/AEDT)\0" + "New Zealand (NZST/NZDT)\0" + "Russia (MSK)\0" + "South America (UTC-3)\0" + "Gulf (UTC+4)\0" + "India (UTC+5:30)\0" + "SE Asia (UTC+7)\0" + "China/SE Asia (UTC+8)\0" + "Japan/Korea (UTC+9)\0" + "Sync Time\0" + "Detect Timezone\0" + "Syncing clock...\0" + "Detecting timezone...\0" + "Time synced\0" + "Time sync failed\0" + "Drift: %s\0" + "Last sync: %s\0" + "Timezone detected\0" + "Timezone detect failed\0" + "DST: active\0" + "DST: inactive\0" + "DST: unknown\0" "P\xC3" "\xA4" - "ivitystaajuus", - "KOReader-synkronointi", + "ivitystaajuus\0" + "KOReader-synkronointi\0" "Tarkista p\xC3" "\xA4" - "ivitykset", - "Kieli", + "ivitykset\0" + "Kieli\0" "Tyhjenn\xC3" "\xA4" " lukuv\xC3" "\xA4" - "limuisti", + "limuisti\0" "K\xC3" "\xA4" "ytt\xC3" "\xA4" "j\xC3" "\xA4" - "nimi", - "Salasana", - "Synkronointipalvelimen osoite", - "Dokumenttien tunnistus", - "Tunnistaudu", + "nimi\0" + "Salasana\0" + "Synkronointipalvelimen osoite\0" + "Dokumenttien tunnistus\0" + "Tunnistaudu\0" "KOReader-k\xC3" "\xA4" "ytt\xC3" "\xA4" "j\xC3" "\xA4" - "nimi", - "KOReader-salasana", - "Tiedostonimi", + "nimi\0" + "KOReader-salasana\0" + "Tiedostonimi\0" "Bin\xC3" "\xA4" "\xC3" "\xA4" - "ri", - "Aseta tunnukset ensin", + "ri\0" + "Aseta tunnukset ensin\0" "WiFi-yhteys ep\xC3" "\xA4" - "onnistui", - "Tunnistaudutaan...", - "Tunnistautuminen onnistui!", - "KOReader-tunnistautuminen", + "onnistui\0" + "Tunnistaudutaan...\0" + "Tunnistautuminen onnistui!\0" + "KOReader-tunnistautuminen\0" "KOReader-synkronointi on k\xC3" "\xA4" "ytt\xC3" "\xB6" - "valmis", + "valmis\0" "Tunnistautuminen ep\xC3" "\xA4" - "onnistui", - "Valmis", + "onnistui\0" + "Register\0" + "Registering...\0" + "Account created successfully!\0" + "Registration failed\0" + "Username already taken\0" + "Valmis\0" "T\xC3" "\xA4" "m\xC3" @@ -30791,62 +32753,62 @@ const char* const STRINGS_FI[] = { "\xA4" " kaiken v\xC3" "\xA4" - "limuistiin tallennetun kirjatiedon.", + "limuistiin tallennetun kirjatiedon.\0" "Kaikki lukuedistyminen menetet\xC3" "\xA4" "\xC3" "\xA4" - "n!", + "n!\0" "Kirjat t\xC3" "\xA4" - "ytyy indeksoida uudelleen", - "kun ne avataan seuraavan kerran.", + "ytyy indeksoida uudelleen\0" + "kun ne avataan seuraavan kerran.\0" "Tyhjennet\xC3" "\xA4" "\xC3" "\xA4" "n v\xC3" "\xA4" - "limuistia...", + "limuistia...\0" "V\xC3" "\xA4" - "limuisti tyhjennetty", - "kohdetta poistettu", + "limuisti tyhjennetty\0" + "kohdetta poistettu\0" "ep\xC3" "\xA4" - "onnistui", + "onnistui\0" "V\xC3" "\xA4" "limuistin tyhjennys ep\xC3" "\xA4" - "onnistui", + "onnistui\0" "Tarkista sarjatuloste lis\xC3" "\xA4" - "tiedoista", - "Tumma", - "Vaalea", - "Mukautettu", - "Kansi", + "tiedoista\0" + "Tumma\0" + "Vaalea\0" + "Mukautettu\0" + "Kansi\0" "Ei mit\xC3" "\xA4" "\xC3" "\xA4" - "n", - "Sovita", - "Rajaa", - "Ei koskaan", - "Lukijassa", - "Aina", - "Ohita", - "Lepotila", + "n\0" + "Sovita\0" + "Rajaa\0" + "Ei koskaan\0" + "Lukijassa\0" + "Aina\0" + "Ohita\0" + "Lepotila\0" "Sivunk\xC3" "\xA4" "\xC3" "\xA4" "nt\xC3" "\xB6" - "", - "Pysty", + "\0" + "Pysty\0" "Vaaka my\xC3" "\xB6" "t\xC3" @@ -30857,84 +32819,84 @@ const char* const STRINGS_FI[] = { "\xA4" "\xC3" "\xA4" - "n", + "n\0" "K\xC3" "\xA4" "\xC3" "\xA4" - "nnetty", + "nnetty\0" "Vaaka vastap\xC3" "\xA4" "iv\xC3" "\xA4" "\xC3" "\xA4" - "n", - "Edell/Seur", - "Seur/Edell", - "Bookerly", - "Noto Sans", - "Open Dyslexic", - "Pieni", - "Keskikokoinen", - "Suuri", + "n\0" + "Edell/Seur\0" + "Seur/Edell\0" + "Bookerly\0" + "Noto Sans\0" + "Open Dyslexic\0" + "Pieni\0" + "Keskikokoinen\0" + "Suuri\0" "Eritt\xC3" "\xA4" - "in suuri", - "Tiukka", - "Normaali", + "in suuri\0" + "Tiukka\0" + "Normaali\0" "Leve\xC3" "\xA4" - "", - "Tasaa", - "Vasen", - "Keskitetty", - "Oikea", - "1 min", - "5 min", - "10 min", - "15 min", - "30 min", - "1 sivu", - "5 sivua", - "10 sivua", - "15 sivua", - "30 sivua", + "\0" + "Tasaa\0" + "Vasen\0" + "Keskitetty\0" + "Oikea\0" + "1 min\0" + "5 min\0" + "10 min\0" + "15 min\0" + "30 min\0" + "1 sivu\0" + "5 sivua\0" + "10 sivua\0" + "15 sivua\0" + "30 sivua\0" "P\xC3" "\xA4" "ivit\xC3" "\xA4" - "", + "\0" "Tarkistetaan p\xC3" "\xA4" "ivityst\xC3" "\xA4" - "...", + "...\0" "Uusi p\xC3" "\xA4" - "ivitys saatavilla!", - "Nykyinen versio: ", - "Uusi versio: ", + "ivitys saatavilla!\0" + "Nykyinen versio: \0" + "Uusi versio: \0" "P\xC3" "\xA4" "ivitet\xC3" "\xA4" "\xC3" "\xA4" - "n...", + "n...\0" "Ei p\xC3" "\xA4" "ivityst\xC3" "\xA4" - " saatavilla", + " saatavilla\0" "P\xC3" "\xA4" "ivitys ep\xC3" "\xA4" - "onnistui", + "onnistui\0" "P\xC3" "\xA4" - "ivitys valmis", + "ivitys valmis\0" "Pid\xC3" "\xA4" " virtapainiketta pohjassa k\xC3" @@ -30943,212 +32905,217 @@ const char* const STRINGS_FI[] = { "\xA4" "\xC3" "\xA4" - "ksesi", + "ksesi\0" "Merkint\xC3" "\xB6" "j\xC3" "\xA4" " ei l\xC3" "\xB6" - "ytynyt", - "Ladataan...", + "ytynyt\0" + "Ladataan...\0" "Lataus ep\xC3" "\xA4" - "onnistui", - "Virhe:", + "onnistui\0" + "Virhe:\0" "Nimet\xC3" "\xB6" - "n", + "n\0" "Palvelinosoitetta ei ole m\xC3" "\xA4" "\xC3" "\xA4" - "ritetty", + "ritetty\0" "Sy\xC3" "\xB6" "tteen haku ep\xC3" "\xA4" - "onnistui", + "onnistui\0" "Sy\xC3" "\xB6" "tteen k\xC3" "\xA4" "sittely ep\xC3" "\xA4" - "onnistui", - "Verkko: ", - "IP-osoite: ", - "Virhe: Yleinen virhe", + "onnistui\0" + "Verkko: \0" + "IP-osoite: \0" + "Virhe: Yleinen virhe\0" "Virhe: Verkkoa ei l\xC3" "\xB6" - "ytynyt", - "Virhe: Yhteys aikakatkaistiin", - "SD-kortti", + "ytynyt\0" + "Virhe: Yhteys aikakatkaistiin\0" + "SD-kortti\0" "\xC2" "\xAB" - " Takaisin", + " Takaisin\0" "\xC2" "\xAB" - " Poistu", + " Poistu\0" "\xC2" "\xAB" - " Koti", - "Valitse", - "Selected", - "Vaihda", - "Vahvista", - "Peruuta", + " Koti\0" + "Valitse\0" + "Selected\0" + "Vaihda\0" + "Vahvista\0" + "Peruuta\0" "Yhdist\xC3" "\xA4" - "", - "Avaa", - "Lataa", + "\0" + "Avaa\0" + "Lataa\0" "Yrit\xC3" "\xA4" - " uudelleen", + " uudelleen\0" "Kyll\xC3" "\xA4" - "", - "Ei", - "Show", - "Hide", + "\0" + "Ei\0" + "Show\0" + "Hide\0" "P\xC3" "\x84" "\xC3" "\x84" "LL\xC3" "\x84" - "", - "POIS", - "Ei asetettu", - "Vasen", - "Oikea", + "\0" + "POIS\0" + "Ei asetettu\0" + "Vasen\0" + "Oikea\0" "Yl\xC3" "\xB6" - "s", - "Alas", - "OK", + "s\0" + "Alas\0" + "OK\0" "Lepotilan\xC3" "\xA4" "yt\xC3" "\xB6" - "n kansisuodatin", - "Kontrasti", - "Customise Status Bar", - "Chapter Page Count", - "Book Progress Percentage", - "Progress Bar", - "Progress Bar Thickness", - "Thin", - "Medium", - "Thick", - "Book", - "Chapter", - "Chapter 21", - "Book Title", - "Preview", - "Title", - "Battery", + "n kansisuodatin\0" + "Kontrasti\0" + "Customise Status Bar\0" + "Chapter Page Count\0" + "Book Progress Percentage\0" + "Progress Bar\0" + "Progress Bar Thickness\0" + "Thin\0" + "Medium\0" + "Thick\0" + "Book\0" + "Chapter\0" + "Chapter 21\0" + "Book Title\0" + "Preview\0" + "Title\0" + "Battery\0" "K\xC3" "\xA4" "ytt\xC3" "\xB6" "liittym\xC3" "\xA4" - "teema", - "Klassinen", - "Lyra", - "Lyra Extended", - "Auringonvalon haalistumiskorjaus", + "teema\0" + "Klassinen\0" + "Lyra\0" + "Lyra Extended\0" + "Auringonvalon haalistumiskorjaus\0" "Uudelleenm\xC3" "\xA4" "\xC3" "\xA4" "rit\xC3" "\xA4" - " etupainikkeet", - "OPDS-selain", - "Kansi + mukautettu", + " etupainikkeet\0" + "OPDS-selain\0" + "Kansi + mukautettu\0" + "Page overlay\0" + "Recents\0" "Viimeisimm\xC3" "\xA4" - "t kirjat", + "t kirjat\0" "Ei viimeisimpi\xC3" "\xA4" - " kirjoja", + " kirjoja\0" "K\xC3" "\xA4" "yt\xC3" "\xA4" " Calibren langatonta laiteyhteytt\xC3" "\xA4" - "", - "Unohda verkko ja poista tallennettu salasana?", - "Unohda", + "\0" + "Unohda verkko ja poista tallennettu salasana?\0" + "Unohda\0" "K\xC3" "\xA4" "ynnistet\xC3" "\xA4" "\xC3" "\xA4" - "n Calibrea...", - "Asetukset", - "Tila", + "n Calibrea...\0" + "Asetukset\0" + "Tila\0" "Tyhjenn\xC3" "\xA4" - "", - "Oletus", - "Paina etupainiketta kullekin toiminnolle", + "\0" + "Oletus\0" + "Paina etupainiketta kullekin toiminnolle\0" "Ei m\xC3" "\xA4" "\xC3" "\xA4" - "ritetty", + "ritetty\0" "Jo m\xC3" "\xA4" "\xC3" "\xA4" - "ritetty", + "ritetty\0" "Sivupainike yl\xC3" "\xB6" - "s: Palauta oletusasettelu", + "s: Palauta oletusasettelu\0" "Sivupainike alas: Peruuta uudelleenm\xC3" "\xA4" "\xC3" "\xA4" - "ritys", - "Takaisin (1. painike)", - "Vahvista (2. painike)", - "Vasen (3. painike)", - "Oikea (4. painike)", - "Siirry kohtaan %", - "Siirry kotiin", - "Synkronoi edistyminen", + "ritys\0" + "Takaisin (1. painike)\0" + "Vahvista (2. painike)\0" + "Vasen (3. painike)\0" + "Oikea (4. painike)\0" + "Siirry kohtaan %\0" + "Siirry kotiin\0" + "Synkronoi edistyminen\0" "Poista kirjan v\xC3" "\xA4" - "limuisti", - "Delete", - "Show page as QR", - "Luku: ", - " sivua | ", - "Kirja: ", + "limuisti\0" + "Delete\0" + "Remove\0" + "Show page as QR\0" + "Luku: \0" + " sivua | \0" + "Kirja: \0" "Calibrelle lis\xC3" "\xA4" "\xC3" "\xA4" - " /opds osoitteeseen", + " /opds osoitteeseen\0" "Vasen/Oikea: 1% Yl\xC3" "\xB6" - "s/Alas: 10%", - "Synkronoidaan aikaa...", - "Lasketaan dokumentin tarkistussummaa...", + "s/Alas: 10%\0" + "Synkronoidaan aikaa...\0" + "Lasketaan dokumentin tarkistussummaa...\0" "Dokumentin tiivisteen laskenta ep\xC3" "\xA4" - "onnistui", + "onnistui\0" "Haetaan et\xC3" "\xA4" "edistymist\xC3" "\xA4" - "...", + "...\0" + "Mapping remote position...\0" + "Calculating local position...\0" "L\xC3" "\xA4" "hetet\xC3" @@ -31157,31 +33124,31 @@ const char* const STRINGS_FI[] = { "\xA4" "n lukuedistymist\xC3" "\xA4" - "...", + "...\0" "Tunnuksia ei ole m\xC3" "\xA4" "\xC3" "\xA4" - "ritetty", + "ritetty\0" "M\xC3" "\xA4" "\xC3" "\xA4" "rit\xC3" "\xA4" - " KOReader-tili asetuksissa", + " KOReader-tili asetuksissa\0" "Edistyminen l\xC3" "\xB6" - "ytyi!", + "ytyi!\0" "Et\xC3" "\xA4" - ":", - "Paikallinen:", - "Sivu %d, %.2f%% kokonaisuudesta", - "Sivu %d/%d, %.2f%% kokonaisuudesta", + ":\0" + "Paikallinen:\0" + "Sivu %d, %.2f%% kokonaisuudesta\0" + "Sivu %d/%d, %.2f%% kokonaisuudesta\0" " L\xC3" "\xA4" - "hde: %s", + "hde: %s\0" "K\xC3" "\xA4" "yt\xC3" @@ -31190,881 +33157,1142 @@ const char* const STRINGS_FI[] = { "\xA4" "edistymist\xC3" "\xA4" - "", + "\0" "L\xC3" "\xA4" "het\xC3" "\xA4" - " paikallinen edistyminen", + " paikallinen edistyminen\0" "Et\xC3" "\xA4" "edistymist\xC3" "\xA4" " ei l\xC3" "\xB6" - "ytynyt", + "ytynyt\0" "L\xC3" "\xA4" "het\xC3" "\xA4" - " nykyinen sijainti?", + " nykyinen sijainti?\0" "Edistyminen l\xC3" "\xA4" - "hetetty!", + "hetetty!\0" "Synkronointi ep\xC3" "\xA4" - "onnistui", - "Osio ", + "onnistui\0" + "Osio \0" "L\xC3" "\xA4" "het\xC3" "\xA4" - "", - "Kirjan tyyli", - "Upotettu tyyli", - "OPDS-palvelimen osoite", - "Footnotes", - "No footnotes on this page", - "[link]", - "Ota kuvakaappaus", - "Auto Turn Enabled: ", - "Auto Turn (Pages Per Minute)", - "Sleep Screen Info Overlay", - "White", - "Gray", - "Black", - "Off", - "Reading progress: Page %lu/%u - %.0f%%", - "Reading progress: Page %lu", - " - Page %d/%d - %.0f%% read", + "\0" + "Kirjan tyyli\0" + "Upotettu tyyli\0" + "OPDS-palvelimen osoite\0" + "Footnotes\0" + "No footnotes on this page\0" + "[link]\0" + "Ota kuvakaappaus\0" + "Auto Turn Enabled: \0" + "Auto Turn (Pages Per Minute)\0" + "Info\0" + "Author\0" + "Series\0" + "Size\0" + "Sleep Screen Info Overlay\0" + "White\0" + "Gray\0" + "Black\0" + "Off\0" + "Reading progress: Page %lu/%u - %.0f%%\0" + "Reading progress: Page %lu\0" + " - Page %d/%d - %.0f%% read\0" + "System Information\0" + "Failed to load XTC file\0" + "Failed to load EPUB file\0" + "FW version\0" + "Chip\0" + "CPU\0" + "MHz\0" + "Free RAM\0" + "Min free\0" + "Max block\0" + "Flash used\0" + "Uptime\0" + "Charging\0" + "Gathering data...\0" + "Reading...\0" +; +// clang-format on + +const uint16_t OFFSETS_FI[] = { + 0, 11, 23, 32, 56, 73, 89, 99, 115, 133, 150, 174, + 187, 197, 210, 222, 235, 247, 265, 281, 301, 313, 322, 334, + 356, 378, 392, 409, 421, 441, 456, 499, 530, 545, 561, 601, + 645, 677, 693, 734, 766, 778, 814, 831, 853, 883, 895, 916, + 938, 948, 965, 981, 1019, 1048, 1085, 1133, 1142, 1149, 1158, 1172, + 1189, 1216, 1231, 1254, 1278, 1285, 1293, 1305, 1314, 1346, 1378, 1389, + 1424, 1452, 1472, 1502, 1520, 1547, 1569, 1577, 1593, 1611, 1621, 1636, + 1671, 1677, 1690, 1699, 1703, 1707, 1721, 1747, 1773, 1794, 1815, 1837, + 1858, 1888, 1912, 1925, 1947, 1960, 1977, 1993, 2015, 2035, 2045, 2061, + 2078, 2100, 2112, 2129, 2139, 2153, 2171, 2194, 2206, 2220, 2233, 2250, + 2272, 2294, 2300, 2326, 2342, 2351, 2381, 2404, 2416, 2441, 2459, 2472, + 2482, 2504, 2529, 2548, 2575, 2601, 2641, 2671, 2680, 2695, 2725, 2745, + 2768, 2775, 2840, 2877, 2913, 2946, 2977, 3001, 3020, 3033, 3069, 3106, + 3112, 3119, 3130, 3136, 3148, 3155, 3161, 3172, 3182, 3187, 3193, 3202, + 3217, 3223, 3247, 3259, 3281, 3292, 3303, 3312, 3322, 3336, 3342, 3356, + 3362, 3378, 3385, 3394, 3401, 3407, 3413, 3424, 3430, 3436, 3442, 3449, + 3456, 3463, 3470, 3478, 3487, 3496, 3505, 3515, 3544, 3571, 3589, 3603, + 3621, 3648, 3671, 3688, 3738, 3764, 3776, 3796, 3803, 3812, 3850, 3878, + 3912, 3921, 3933, 3954, 3982, 4012, 4022, 4034, 4044, 4052, 4060, 4069, + 4076, 4085, 4093, 4102, 4107, 4113, 4130, 4137, 4140, 4145, 4150, 4160, + 4165, 4177, 4183, 4189, 4195, 4200, 4203, 4234, 4244, 4265, 4284, 4309, + 4322, 4345, 4350, 4357, 4363, 4368, 4376, 4387, 4398, 4406, 4412, 4420, + 4443, 4453, 4458, 4472, 4505, 4539, 4551, 4570, 4583, 4591, 4612, 4637, + 4680, 4726, 4733, 4762, 4772, 4777, 4787, 4794, 4835, 4851, 4867, 4909, + 4955, 4977, 4999, 5018, 5037, 5054, 5068, 5090, 5116, 5123, 5130, 5146, + 5153, 5165, 5173, 5211, 5244, 5267, 5307, 5351, 5379, 5406, 5436, 5470, + 5500, 5537, 5558, 5564, 5577, 5609, 5644, 5657, 5682, 5715, 5745, 5773, + 5797, 5823, 5829, 5838, 5851, 5866, 5889, 5899, 5925, 5932, 5949, 5969, + 5998, 6003, 6010, 6017, 6022, 6048, 6054, 6059, 6065, 6069, 6108, 6135, + 6163, 6182, 6206, 6231, 6242, 6247, 6251, 6255, 6264, 6273, 6283, 6294, + 6301, 6310, 6328, }; -const char* const STRINGS_DA[] = { - "CrossPoint", - "STARTER", - "HVILE", +// clang-format off +const char STRINGS_DA_DATA[] = + "CrossPoint\0" + "STARTER\0" + "HVILE\0" "G\xC3" "\xA5" - "r i hvile", + "r i hvile\0" "Gennems\xC3" "\xB8" - "g filer", + "g filer\0" "Filoverf\xC3" "\xB8" - "relse", - "Indstillinger", + "relse\0" + "Indstillinger\0" "Forts\xC3" "\xA6" "t med at l\xC3" "\xA6" - "se", + "se\0" "Ingen \xC3" "\xA5" - "ben bog", + "ben bog\0" "Start l\xC3" "\xA6" - "sning nedenfor", - "Ingen filer fundet", + "sning nedenfor\0" + "Ingen filer fundet\0" "V\xC3" "\xA6" - "lg kapitel", - "Ingen kapitler", + "lg kapitel\0" + "Ingen kapitler\0" "Bogen er f\xC3" "\xA6" - "rdig", - "Tomt kapitel", - "Indekserer", - "Hukommelsesfejl", + "rdig\0" + "Tomt kapitel\0" + "Indekserer\0" + "Hukommelsesfejl\0" "Fejl ved sideindl\xC3" "\xA6" - "sning", - "Tom fil", + "sning\0" + "Tom fil\0" "Uden for gr\xC3" "\xA6" - "nsen", + "nsen\0" "Indl\xC3" "\xA6" - "ser...", + "ser...\0" "Indl\xC3" "\xA6" - "ser", + "ser\0" "Tr\xC3" "\xA5" "dl\xC3" "\xB8" "se netv\xC3" "\xA6" - "rk", + "rk\0" "Intet netv\xC3" "\xA6" - "rk fundet", + "rk fundet\0" "%zu netv\xC3" "\xA6" - "rk fundet", - "Skanner...", - "Forbinder...", - "Forbundet!", - "Forbindelsen mislykkedes", + "rk fundet\0" + "Skanner...\0" + "Forbinder...\0" + "Forbundet!\0" + "Forbindelsen mislykkedes\0" "Glem netv\xC3" "\xA6" - "rk?", + "rk?\0" "Gem adgangskode til n\xC3" "\xA6" - "ste gang?", - "Tryk OK for at scanne igen", + "ste gang?\0" + "Tryk OK for at scanne igen\0" "Tilslut netv\xC3" "\xA6" - "rk", - "Opret Hotspot", + "rk\0" + "Opret Hotspot\0" "Opret forbindelse til et eksisterende WiFi-netv\xC3" "\xA6" - "rk", + "rk\0" "Opret et WiFi-netv\xC3" "\xA6" - "rk andre kan tilslutte sig", - "Starter Hotspot...", - "Hotspot-tilstand", + "rk andre kan tilslutte sig\0" + "Starter Hotspot...\0" + "Hotspot-tilstand\0" "Opret forbindelse fra din enhed til dette WiFi-netv\xC3" "\xA6" - "rk", + "rk\0" "\xC3" "\x85" - "bn denne URL i din browser", - "eller http://", - "eller scan QR-kode med din telefon:", - "Calibre Wireless", - "Calibre Web URL", - "* = Krypteret | + = Gemt", - "MAC-adresse:", - "Tjekker WiFi...", - "Indtast WiFi-adgangskode", - "til ", - "Modtager: ", - "Modtaget: ", - "1) Installer CrossPoint Reader-plugin", + "bn denne URL i din browser\0" + "eller http://\0" + "eller scan QR-kode med din telefon:\0" + "Calibre Wireless\0" + "Calibre Web URL\0" + "* = Krypteret | + = Gemt\0" + "MAC-adresse:\0" + "Tjekker WiFi...\0" + "Indtast WiFi-adgangskode\0" + "til \0" + "Modtager: \0" + "Modtaget: \0" + "1) Installer CrossPoint Reader-plugin\0" "2) V\xC3" "\xA6" "r p\xC3" "\xA5" " det samme WiFi-netv\xC3" "\xA6" - "rk", - "3) I Calibre: \"Send til enhed\"", + "rk\0" + "3) I Calibre: \"Send til enhed\"\0" "\"Hold denne sk\xC3" "\xA6" "rm \xC3" "\xA5" - "ben under afsendelse\"", + "ben under afsendelse\"\0" "Sk\xC3" "\xA6" - "rm", + "rm\0" "L\xC3" "\xA6" - "ser", - "Brugerflade", - "System", + "ser\0" + "Brugerflade\0" + "System\0" "Hvile-sk\xC3" "\xA6" - "rm", + "rm\0" "Hvile-sk\xC3" "\xA6" - "rm omslag-tilstand", - "Skjul batteri %", - "Ekstra afsnitsafstand", - "Tekst Anti-Aliasing", - "Images", - "Display", - "Placeholder", - "Suppress", + "rm omslag-tilstand\0" + "Skjul batteri %\0" + "Ekstra afsnitsafstand\0" + "Tekst Anti-Aliasing\0" + "Images\0" + "Display\0" + "Placeholder\0" + "Suppress\0" + "Create fallback for invalid TOC\0" "Kort tryk p\xC3" "\xA5" " t\xC3" "\xA6" - "nd/sluk-knap", + "nd/sluk-knap\0" "L\xC3" "\xA6" - "seretning", + "seretning\0" "Knaplayout p\xC3" "\xA5" " siden (l\xC3" "\xA6" - "ser)", - "Langt tryk spring kapitel over", + "ser)\0" + "Langt tryk spring kapitel over\0" "L\xC3" "\xA6" - "ser skrifttype", + "ser skrifttype\0" "Brugergr\xC3" "\xA6" "nseflade skriftst\xC3" "\xB8" - "rrelse", - "Linjeafstand", + "rrelse\0" + "Linjeafstand\0" "Sk\xC3" "\xA6" - "rmmargen", - "Afsnitsjustering", - "Orddeling", - "Tid til hvile", - "Show Hidden Files", - "Opdateringsfrekvens", - "KOReader Sync", + "rmmargen\0" + "Afsnitsjustering\0" + "Orddeling\0" + "Tid til hvile\0" + "Show Hidden Files\0" + "Use Clock\0" + "Clock Settings\0" + "Uses more battery; clock may drift\0" + "Clock\0" + "Clock Format\0" + "Timezone\0" + "24h\0" + "12h\0" + "UTC (GMT/BST)\0" + "Central Europe (CET/CEST)\0" + "Eastern Europe (EET/EEST)\0" + "US Eastern (EST/EDT)\0" + "US Central (CST/CDT)\0" + "US Mountain (MST/MDT)\0" + "US Pacific (PST/PDT)\0" + "Australia Eastern (AEST/AEDT)\0" + "New Zealand (NZST/NZDT)\0" + "Russia (MSK)\0" + "South America (UTC-3)\0" + "Gulf (UTC+4)\0" + "India (UTC+5:30)\0" + "SE Asia (UTC+7)\0" + "China/SE Asia (UTC+8)\0" + "Japan/Korea (UTC+9)\0" + "Sync Time\0" + "Detect Timezone\0" + "Syncing clock...\0" + "Detecting timezone...\0" + "Time synced\0" + "Time sync failed\0" + "Drift: %s\0" + "Last sync: %s\0" + "Timezone detected\0" + "Timezone detect failed\0" + "DST: active\0" + "DST: inactive\0" + "DST: unknown\0" + "Opdateringsfrekvens\0" + "KOReader Sync\0" "S\xC3" "\xB8" - "g efter opdateringer", - "Sprog", + "g efter opdateringer\0" + "Sprog\0" "Ryd l\xC3" "\xA6" - "secache", - "Brugernavn", - "Adgangskode", - "Synkroniseringsserver-URL", - "Dokumentsammenkobling", - "Godkend", - "KOReader brugernavn", - "KOReader adgangskode", - "Filnavn", + "secache\0" + "Brugernavn\0" + "Adgangskode\0" + "Synkroniseringsserver-URL\0" + "Dokumentsammenkobling\0" + "Godkend\0" + "KOReader brugernavn\0" + "KOReader adgangskode\0" + "Filnavn\0" "Bin\xC3" "\xA6" - "r", + "r\0" "Angiv legitimationsoplysninger f\xC3" "\xB8" - "rst", - "WiFi-forbindelsen mislykkedes", - "Godkender...", - "Godkendt!", - "KOReader-godkendelse", - "KOReader-synkronisering er klar til brug", - "Godkendelse mislykkedes", + "rst\0" + "WiFi-forbindelsen mislykkedes\0" + "Godkender...\0" + "Godkendt!\0" + "KOReader-godkendelse\0" + "KOReader-synkronisering er klar til brug\0" + "Godkendelse mislykkedes\0" + "Register\0" + "Registering...\0" + "Account created successfully!\0" + "Registration failed\0" + "Username already taken\0" "F\xC3" "\xA6" - "rdig", - "Dette vil rydde alle cachelagrede bogdata.", + "rdig\0" + "Dette vil rydde alle cachelagrede bogdata.\0" "Al l\xC3" "\xA6" "sefremskridt vil g\xC3" "\xA5" - " tabt!", + " tabt!\0" "B\xC3" "\xB8" - "ger skal indekseres igen", + "ger skal indekseres igen\0" "n\xC3" "\xA5" "r de \xC3" "\xA5" - "bnes igen.", - "Rydder cache...", - "Cache ryddet", - "elementer fjernet", - "mislykkedes", - "Kunne ikke rydde cache", - "Tjek serielt output for detaljer", + "bnes igen.\0" + "Rydder cache...\0" + "Cache ryddet\0" + "elementer fjernet\0" + "mislykkedes\0" + "Kunne ikke rydde cache\0" + "Tjek serielt output for detaljer\0" "M\xC3" "\xB8" - "rk", - "Lys", - "Brugerdefineret", - "Omslag", - "Ingen", - "Tilpas", + "rk\0" + "Lys\0" + "Brugerdefineret\0" + "Omslag\0" + "Ingen\0" + "Tilpas\0" "Besk\xC3" "\xA6" - "r", - "Aldrig", + "r\0" + "Aldrig\0" "I l\xC3" "\xA6" - "seren", - "Altid", - "Ignorer", - "Hvile", - "Sideskift", + "seren\0" + "Altid\0" + "Ignorer\0" + "Hvile\0" + "Sideskift\0" "Portr\xC3" "\xA6" - "t", - "Liggende med uret", - "Inverteret", - "Liggende mod uret", + "t\0" + "Liggende med uret\0" + "Inverteret\0" + "Liggende mod uret\0" "Forrige/N\xC3" "\xA6" - "ste", + "ste\0" "N\xC3" "\xA6" - "ste/Forrige", - "Bookerly", - "Noto Sans", - "Open Dyslexic", - "Lille", - "Mellem", - "Stor", - "Ekstra stor", + "ste/Forrige\0" + "Bookerly\0" + "Noto Sans\0" + "Open Dyslexic\0" + "Lille\0" + "Mellem\0" + "Stor\0" + "Ekstra stor\0" "T\xC3" "\xA6" - "t", - "Normal", - "Bred", - "Justeret", - "Venstre", - "Centreret", + "t\0" + "Normal\0" + "Bred\0" + "Justeret\0" + "Venstre\0" + "Centreret\0" "H\xC3" "\xB8" - "jre", - "1 min", - "5 min", - "10 min", - "15 min", - "30 min", - "1 side", - "5 sider", - "10 sider", - "15 sider", - "30 sider", - "Opdater", + "jre\0" + "1 min\0" + "5 min\0" + "10 min\0" + "15 min\0" + "30 min\0" + "1 side\0" + "5 sider\0" + "10 sider\0" + "15 sider\0" + "30 sider\0" + "Opdater\0" "S\xC3" "\xB8" - "ger efter opdatering...", + "ger efter opdatering...\0" "Ny opdatering tilg\xC3" "\xA6" - "ngelig!", + "ngelig!\0" "Nuv\xC3" "\xA6" - "rende version: ", - "Ny version: ", - "Opdaterer...", + "rende version: \0" + "Ny version: \0" + "Opdaterer...\0" "Ingen opdatering tilg\xC3" "\xA6" - "ngelig", - "Opdatering mislykkedes", + "ngelig\0" + "Opdatering mislykkedes\0" "Opdatering f\xC3" "\xA6" - "rdig", + "rdig\0" "Hold t\xC3" "\xA6" "nd/sluk-knappen nede for at t\xC3" "\xA6" - "nde igen", - "Ingen poster fundet", - "Downloader...", - "Download mislykkedes", - "Fejl:", - "Unavngivet", - "Ingen server-URL konfigureret", - "Kunne ikke hente feed", - "Kunne ikke fortolke feed", + "nde igen\0" + "Ingen poster fundet\0" + "Downloader...\0" + "Download mislykkedes\0" + "Fejl:\0" + "Unavngivet\0" + "Ingen server-URL konfigureret\0" + "Kunne ikke hente feed\0" + "Kunne ikke fortolke feed\0" "Netv\xC3" "\xA6" - "rk: ", - "IP-adresse: ", - "Fejl: Generel fejl", + "rk: \0" + "IP-adresse: \0" + "Fejl: Generel fejl\0" "Fejl: Netv\xC3" "\xA6" - "rk ikke fundet", - "Fejl: Forbindelses timeout", - "SD-kort", + "rk ikke fundet\0" + "Fejl: Forbindelses timeout\0" + "SD-kort\0" "\xC2" "\xAB" - " Tilbage", + " Tilbage\0" "\xC2" "\xAB" - " Afslut", + " Afslut\0" "\xC2" "\xAB" - " Hjem", + " Hjem\0" "V\xC3" "\xA6" - "lg", - "Selected", - "Skift", + "lg\0" + "Selected\0" + "Skift\0" "Bekr\xC3" "\xA6" - "ft", - "Annuller", - "Forbind", + "ft\0" + "Annuller\0" + "Forbind\0" "\xC3" "\x85" - "bn", - "Download", + "bn\0" + "Download\0" "Pr\xC3" "\xB8" - "v igen", - "Ja", - "Nej", - "Show", - "Hide", + "v igen\0" + "Ja\0" + "Nej\0" + "Show\0" + "Hide\0" "T\xC3" "\x86" - "NDT", - "SLUKKET", - "Ikke indstillet", - "Venstre", + "NDT\0" + "SLUKKET\0" + "Ikke indstillet\0" + "Venstre\0" "H\xC3" "\xB8" - "jre", - "Op", - "Ned", - "OK", + "jre\0" + "Op\0" + "Ned\0" + "OK\0" "Hvile-sk\xC3" "\xA6" - "rm omslag-filter", - "Kontrast", - "Customise Status Bar", - "Chapter Page Count", - "Book Progress Percentage", - "Progress Bar", - "Progress Bar Thickness", - "Thin", - "Medium", - "Thick", - "Book", - "Chapter", - "Chapter 21", - "Book Title", - "Preview", - "Title", - "Battery", + "rm omslag-filter\0" + "Kontrast\0" + "Customise Status Bar\0" + "Chapter Page Count\0" + "Book Progress Percentage\0" + "Progress Bar\0" + "Progress Bar Thickness\0" + "Thin\0" + "Medium\0" + "Thick\0" + "Book\0" + "Chapter\0" + "Chapter 21\0" + "Book Title\0" + "Preview\0" + "Title\0" + "Battery\0" "Brugergr\xC3" "\xA6" - "nseflade tema", - "Klassisk", - "Lyra", - "Lyra Extended", - "Sollysfading-rettelse", - "Omtildel frontknapper", - "OPDS Browser", - "Omslag + Brugerdefineret", + "nseflade tema\0" + "Klassisk\0" + "Lyra\0" + "Lyra Extended\0" + "Sollysfading-rettelse\0" + "Omtildel frontknapper\0" + "OPDS Browser\0" + "Omslag + Brugerdefineret\0" + "Page overlay\0" + "Recents\0" "Seneste b\xC3" "\xB8" - "ger", + "ger\0" "Ingen seneste b\xC3" "\xB8" - "ger", + "ger\0" "Brug Calibre tr\xC3" "\xA5" "dl\xC3" "\xB8" "s enhedsoverf\xC3" "\xB8" - "relse", + "relse\0" "Glem netv\xC3" "\xA6" - "rk og fjern gemt adgangskode?", - "Glem", - "Starter Calibre...", + "rk og fjern gemt adgangskode?\0" + "Glem\0" + "Starter Calibre...\0" "Ops\xC3" "\xA6" - "tning", - "Status", - "Ryd", - "Standard", + "tning\0" + "Status\0" + "Ryd\0" + "Standard\0" "Tryk p\xC3" "\xA5" - " en frontknap for hver rolle", - "Ikke tildelt", - "Allerede tildelt", - "Sideknap op: Nulstil til standardlayout", - "Sideknap ned: Annuller omtildeling", - "Tilbage (1. knap)", + " en frontknap for hver rolle\0" + "Ikke tildelt\0" + "Allerede tildelt\0" + "Sideknap op: Nulstil til standardlayout\0" + "Sideknap ned: Annuller omtildeling\0" + "Tilbage (1. knap)\0" "Bekr\xC3" "\xA6" - "ft (2. knap)", - "Venstre (3. knap)", + "ft (2. knap)\0" + "Venstre (3. knap)\0" "H\xC3" "\xB8" - "jre (4. knap)", + "jre (4. knap)\0" "G\xC3" "\xA5" - " til %", + " til %\0" "G\xC3" "\xA5" - " til start", - "Synkroniser fremskridt", - "Slet bogcache", - "Delete", - "Show page as QR", - "Kapitel: ", - " sider | ", - "Bog: ", + " til start\0" + "Synkroniser fremskridt\0" + "Slet bogcache\0" + "Delete\0" + "Remove\0" + "Show page as QR\0" + "Kapitel: \0" + " sider | \0" + "Bog: \0" "Tilf\xC3" "\xB8" - "j /opds til din URL for Calibre", + "j /opds til din URL for Calibre\0" "Venstre/H\xC3" "\xB8" - "jre: 1% Op/Ned: 10%", - "Synkroniserer tid...", - "Beregner dokument-hash...", - "Kunne ikke beregne dokument-hash", - "Henter fjernfremskridt...", - "Uploader fremskridt...", - "Ingen legitimationsoplysninger konfigureret", + "jre: 1% Op/Ned: 10%\0" + "Synkroniserer tid...\0" + "Beregner dokument-hash...\0" + "Kunne ikke beregne dokument-hash\0" + "Henter fjernfremskridt...\0" + "Mapping remote position...\0" + "Calculating local position...\0" + "Uploader fremskridt...\0" + "Ingen legitimationsoplysninger konfigureret\0" "Ops\xC3" "\xA6" - "t KOReader-konto i Indstillinger", - "Fremskridt fundet!", - "Ekstern:", - "Lokal:", - "Side %d, %.2f%% samlet", - "Side %d/%d, %.2f%% samlet", - " Fra: %s", - "Anvend fjernfremskridt", - "Upload lokalt fremskridt", - "Ingen fjernfremskridt fundet", + "t KOReader-konto i Indstillinger\0" + "Fremskridt fundet!\0" + "Ekstern:\0" + "Lokal:\0" + "Side %d, %.2f%% samlet\0" + "Side %d/%d, %.2f%% samlet\0" + " Fra: %s\0" + "Anvend fjernfremskridt\0" + "Upload lokalt fremskridt\0" + "Ingen fjernfremskridt fundet\0" "Upload nuv\xC3" "\xA6" - "rende position?", - "Fremskridt uploadet!", - "Synkronisering mislykkedes", - "Afsnit ", - "Upload", - "Bogens stil", - "Indlejret stil", - "OPDS Server URL", - "Footnotes", - "No footnotes on this page", - "[link]", + "rende position?\0" + "Fremskridt uploadet!\0" + "Synkronisering mislykkedes\0" + "Afsnit \0" + "Upload\0" + "Bogens stil\0" + "Indlejret stil\0" + "OPDS Server URL\0" + "Footnotes\0" + "No footnotes on this page\0" + "[link]\0" "Tag sk\xC3" "\xA6" - "rmbillede", - "Auto Turn Enabled: ", - "Auto Turn (Pages Per Minute)", - "Sleep Screen Info Overlay", - "White", - "Gray", - "Black", - "Off", - "Reading progress: Page %lu/%u - %.0f%%", - "Reading progress: Page %lu", - " - Page %d/%d - %.0f%% read", + "rmbillede\0" + "Auto Turn Enabled: \0" + "Auto Turn (Pages Per Minute)\0" + "Info\0" + "Author\0" + "Series\0" + "Size\0" + "Sleep Screen Info Overlay\0" + "White\0" + "Gray\0" + "Black\0" + "Off\0" + "Reading progress: Page %lu/%u - %.0f%%\0" + "Reading progress: Page %lu\0" + " - Page %d/%d - %.0f%% read\0" + "System Information\0" + "Failed to load XTC file\0" + "Failed to load EPUB file\0" + "FW version\0" + "Chip\0" + "CPU\0" + "MHz\0" + "Free RAM\0" + "Min free\0" + "Max block\0" + "Flash used\0" + "Uptime\0" + "Charging\0" + "Gathering data...\0" + "Reading...\0" +; +// clang-format on + +const uint16_t OFFSETS_DA[] = { + 0, 11, 19, 25, 38, 55, 71, 85, 107, 123, 147, 166, + 180, 195, 212, 225, 236, 252, 277, 285, 303, 316, 326, 346, + 368, 388, 399, 412, 423, 448, 463, 496, 523, 540, 554, 606, + 653, 672, 689, 745, 774, 788, 824, 841, 857, 882, 895, 911, + 936, 941, 952, 963, 1001, 1037, 1068, 1111, 1118, 1125, 1137, 1144, + 1157, 1186, 1202, 1224, 1244, 1251, 1259, 1271, 1280, 1312, 1342, 1355, + 1385, 1416, 1434, 1470, 1483, 1496, 1513, 1523, 1537, 1555, 1565, 1580, + 1615, 1621, 1634, 1643, 1647, 1651, 1665, 1691, 1717, 1738, 1759, 1781, + 1802, 1832, 1856, 1869, 1891, 1904, 1921, 1937, 1959, 1979, 1989, 2005, + 2022, 2044, 2056, 2073, 2083, 2097, 2115, 2138, 2150, 2164, 2177, 2197, + 2211, 2235, 2241, 2256, 2267, 2279, 2305, 2327, 2335, 2355, 2376, 2384, + 2391, 2429, 2459, 2472, 2482, 2503, 2544, 2568, 2577, 2592, 2622, 2642, + 2665, 2673, 2716, 2749, 2777, 2798, 2814, 2827, 2845, 2857, 2880, 2913, + 2919, 2923, 2939, 2946, 2952, 2959, 2967, 2974, 2985, 2991, 2999, 3005, + 3015, 3024, 3042, 3053, 3071, 3086, 3101, 3110, 3120, 3134, 3140, 3147, + 3152, 3164, 3169, 3176, 3181, 3190, 3198, 3208, 3215, 3221, 3227, 3234, + 3241, 3248, 3255, 3263, 3272, 3281, 3290, 3298, 3325, 3353, 3374, 3387, + 3400, 3430, 3453, 3472, 3520, 3540, 3554, 3575, 3581, 3592, 3622, 3644, + 3669, 3680, 3693, 3712, 3739, 3766, 3774, 3785, 3795, 3803, 3809, 3818, + 3824, 3833, 3842, 3850, 3855, 3864, 3875, 3878, 3882, 3887, 3892, 3899, + 3907, 3923, 3931, 3938, 3941, 3945, 3948, 3975, 3984, 4005, 4024, 4049, + 4062, 4085, 4090, 4097, 4103, 4108, 4116, 4127, 4138, 4146, 4152, 4160, + 4184, 4193, 4198, 4212, 4234, 4256, 4269, 4294, 4307, 4315, 4330, 4351, + 4393, 4434, 4439, 4458, 4469, 4476, 4480, 4489, 4526, 4539, 4556, 4596, + 4631, 4649, 4668, 4686, 4703, 4713, 4727, 4750, 4764, 4771, 4778, 4794, + 4804, 4816, 4822, 4860, 4892, 4913, 4939, 4972, 4998, 5025, 5055, 5078, + 5122, 5160, 5179, 5188, 5195, 5218, 5244, 5254, 5277, 5302, 5331, 5359, + 5380, 5407, 5415, 5422, 5434, 5449, 5465, 5475, 5501, 5508, 5526, 5546, + 5575, 5580, 5587, 5594, 5599, 5625, 5631, 5636, 5642, 5646, 5685, 5712, + 5740, 5759, 5783, 5808, 5819, 5824, 5828, 5832, 5841, 5850, 5860, 5871, + 5878, 5887, 5905, }; -const char* const STRINGS_NL[] = { - "CrossPoint", - "OPSTARTEN", - "SLAAPSTAND", - "Gaat in slaapstand", - "Bestanden bladeren", - "Bestandsoverdracht", - "Instellingen", - "Verder lezen", - "Geen geopend boek", - "Begin hieronder met lezen", - "Geen bestanden gevonden", - "Selecteer hoofdstuk", - "Geen hoofdstukken", - "Einde van boek", - "Leeg hoofdstuk", - "Indexeren", - "Geheugenfout", - "Fout bij laden pagina", - "Leeg bestand", - "Buiten bereik", - "Laden...", - "Laden", - "Wifi-netwerken", - "Geen netwerken gevonden", - "%zu netwerken gevonden", - "Scannen...", - "Verbinden...", - "Verbonden!", - "Verbinding mislukt", - "Netwerk vergeten?", - "Wachtwoord opslaan voor volgende keer?", - "Druk op OK om opnieuw te scannen", - "Verbind met netwerk", - "Hotspot maken", - "Verbind met een bestaand wifi-netwerk", - "Maak een wifi-netwerk waar anderen mee kunnen verbinden", - "Hotspot starten...", - "Hotspot-modus", - "Verbind je apparaat met dit wifi-netwerk", - "Open deze URL in je browser", - "of http://", - "of scan de QR-code met je telefoon:", - "Calibre Wireless", - "Calibre Web URL", - "* = Beveiligd | + = Opgeslagen", - "MAC-adres:", - "Wifi controleren...", - "Voer wifi-wachtwoord in", - "met ", - "Bezig met ontvangen: ", - "Ontvangen: ", - "1) Installeer CrossPoint Reader plugin", - "2) Gebruik hetzelfde wifi-netwerk", - "3) In Calibre: \"Send to device\"", - "\"Houd dit scherm open tijdens verzenden\"", - "Scherm", - "Lezer", - "Bediening", - "Systeem", - "Slaapscherm", - "Slaapscherm omslag-modus", - "Batterij % verbergen", - "Extra regelafstand alinea", - "Tekst Anti-Aliasing", - "Images", - "Display", - "Placeholder", - "Suppress", - "Korte klik aan/uit-knop", - "Leesstand", - "Indeling zijknoppen (lezer)", - "Hoofdstuk overslaan (lang indrukken)", - "Lettertype lezer", - "Lettergrootte lezer", - "Regelafstand lezer", - "Schermmarge lezer", - "Uitlijning alinea lezer", - "Woordafbreking", - "Tijd tot slaapstand", - "Show Hidden Files", - "Verversingsfrequentie", - "KOReader Sync", - "Controleren op updates", - "Taal", - "Leescache wissen", - "Gebruikersnaam", - "Wachtwoord", - "Sync-server URL", - "Documentkoppeling", - "Authenticatie", - "KOReader gebruikersnaam", - "KOReader wachtwoord", - "Bestandsnaam", - "Binair", - "Stel eerst inloggegevens in", - "Wifi-verbinding mislukt", - "Authenticeren...", - "Authenticatie geslaagd!", - "KOReader-authenticatie", - "KOReader sync is klaar voor gebruik", - "Authenticatie mislukt", - "Klaar", - "Dit wist alle gecachte boekgegevens.", - "Alle leesvoortgang gaat verloren!", +// clang-format off +const char STRINGS_NL_DATA[] = + "CrossPoint\0" + "OPSTARTEN\0" + "SLAAPSTAND\0" + "Gaat in slaapstand\0" + "Bestanden bladeren\0" + "Bestandsoverdracht\0" + "Instellingen\0" + "Verder lezen\0" + "Geen geopend boek\0" + "Begin hieronder met lezen\0" + "Geen bestanden gevonden\0" + "Selecteer hoofdstuk\0" + "Geen hoofdstukken\0" + "Einde van boek\0" + "Leeg hoofdstuk\0" + "Indexeren\0" + "Geheugenfout\0" + "Fout bij laden pagina\0" + "Leeg bestand\0" + "Buiten bereik\0" + "Laden...\0" + "Laden\0" + "Wifi-netwerken\0" + "Geen netwerken gevonden\0" + "%zu netwerken gevonden\0" + "Scannen...\0" + "Verbinden...\0" + "Verbonden!\0" + "Verbinding mislukt\0" + "Netwerk vergeten?\0" + "Wachtwoord opslaan voor volgende keer?\0" + "Druk op OK om opnieuw te scannen\0" + "Verbind met netwerk\0" + "Hotspot maken\0" + "Verbind met een bestaand wifi-netwerk\0" + "Maak een wifi-netwerk waar anderen mee kunnen verbinden\0" + "Hotspot starten...\0" + "Hotspot-modus\0" + "Verbind je apparaat met dit wifi-netwerk\0" + "Open deze URL in je browser\0" + "of http://\0" + "of scan de QR-code met je telefoon:\0" + "Calibre Wireless\0" + "Calibre Web URL\0" + "* = Beveiligd | + = Opgeslagen\0" + "MAC-adres:\0" + "Wifi controleren...\0" + "Voer wifi-wachtwoord in\0" + "met \0" + "Bezig met ontvangen: \0" + "Ontvangen: \0" + "1) Installeer CrossPoint Reader plugin\0" + "2) Gebruik hetzelfde wifi-netwerk\0" + "3) In Calibre: \"Send to device\"\0" + "\"Houd dit scherm open tijdens verzenden\"\0" + "Scherm\0" + "Lezer\0" + "Bediening\0" + "Systeem\0" + "Slaapscherm\0" + "Slaapscherm omslag-modus\0" + "Batterij % verbergen\0" + "Extra regelafstand alinea\0" + "Tekst Anti-Aliasing\0" + "Images\0" + "Display\0" + "Placeholder\0" + "Suppress\0" + "Create fallback for invalid TOC\0" + "Korte klik aan/uit-knop\0" + "Leesstand\0" + "Indeling zijknoppen (lezer)\0" + "Hoofdstuk overslaan (lang indrukken)\0" + "Lettertype lezer\0" + "Lettergrootte lezer\0" + "Regelafstand lezer\0" + "Schermmarge lezer\0" + "Uitlijning alinea lezer\0" + "Woordafbreking\0" + "Tijd tot slaapstand\0" + "Show Hidden Files\0" + "Use Clock\0" + "Clock Settings\0" + "Uses more battery; clock may drift\0" + "Clock\0" + "Clock Format\0" + "Timezone\0" + "24h\0" + "12h\0" + "UTC (GMT/BST)\0" + "Central Europe (CET/CEST)\0" + "Eastern Europe (EET/EEST)\0" + "US Eastern (EST/EDT)\0" + "US Central (CST/CDT)\0" + "US Mountain (MST/MDT)\0" + "US Pacific (PST/PDT)\0" + "Australia Eastern (AEST/AEDT)\0" + "New Zealand (NZST/NZDT)\0" + "Russia (MSK)\0" + "South America (UTC-3)\0" + "Gulf (UTC+4)\0" + "India (UTC+5:30)\0" + "SE Asia (UTC+7)\0" + "China/SE Asia (UTC+8)\0" + "Japan/Korea (UTC+9)\0" + "Sync Time\0" + "Detect Timezone\0" + "Syncing clock...\0" + "Detecting timezone...\0" + "Time synced\0" + "Time sync failed\0" + "Drift: %s\0" + "Last sync: %s\0" + "Timezone detected\0" + "Timezone detect failed\0" + "DST: active\0" + "DST: inactive\0" + "DST: unknown\0" + "Verversingsfrequentie\0" + "KOReader Sync\0" + "Controleren op updates\0" + "Taal\0" + "Leescache wissen\0" + "Gebruikersnaam\0" + "Wachtwoord\0" + "Sync-server URL\0" + "Documentkoppeling\0" + "Authenticatie\0" + "KOReader gebruikersnaam\0" + "KOReader wachtwoord\0" + "Bestandsnaam\0" + "Binair\0" + "Stel eerst inloggegevens in\0" + "Wifi-verbinding mislukt\0" + "Authenticeren...\0" + "Authenticatie geslaagd!\0" + "KOReader-authenticatie\0" + "KOReader sync is klaar voor gebruik\0" + "Authenticatie mislukt\0" + "Register\0" + "Registering...\0" + "Account created successfully!\0" + "Registration failed\0" + "Username already taken\0" + "Klaar\0" + "Dit wist alle gecachte boekgegevens.\0" + "Alle leesvoortgang gaat verloren!\0" "Boeken moeten opnieuw worden ge\xC3" "\xAF" - "ndexeerd", - "wanneer ze weer worden geopend.", - "Cache wissen...", - "Cache gewist", - "items verwijderd", - "mislukt", - "Cache wissen mislukt", + "ndexeerd\0" + "wanneer ze weer worden geopend.\0" + "Cache wissen...\0" + "Cache gewist\0" + "items verwijderd\0" + "mislukt\0" + "Cache wissen mislukt\0" "Check seri\xC3" "\xAB" - "le output voor details", - "Donker", - "Licht", - "Aangepast", - "Omslag", - "Geen", - "Passend", - "Bijsnijden", - "Nooit", - "In lezer", - "Altijd", - "Negeren", - "Slaap", - "Pagina omslaan", - "Staand", - "Liggend (rechtsom)", - "Omgekeerd", - "Liggend (linksom)", - "Vorige/Volgende", - "Volgende/Vorige", - "Bookerly", - "Noto Sans", - "Open Dyslexic", - "Klein", - "Gemiddeld", - "Groot", - "Extra groot", - "Smal", - "Normaal", - "Breed", - "Uitvullen", - "Links", - "Centreren", - "Rechts", - "1 min", - "5 min", - "10 min", - "15 min", - "30 min", - "1 pagina", - "5 pagina's", - "10 pagina's", - "15 pagina's", - "30 pagina's", - "Update", - "Controleren op update...", - "Nieuwe update beschikbaar!", - "Huidige versie: ", - "Nieuwe versie: ", - "Updaten...", - "Geen update beschikbaar", - "Update mislukt", - "Update voltooid", - "Houd de aan/uit-knop ingedrukt om in te schakelen", - "Geen items gevonden", - "Downloaden...", - "Download mislukt", - "Fout:", - "Naamloos", - "Geen server-URL ingesteld", - "Ophalen feed mislukt", - "Verwerken feed mislukt", - "Netwerk: ", - "IP-adres: ", - "Fout: Algemene fout", - "Fout: Netwerk niet gevonden", - "Fout: Verbindingstime-out", - "SD-kaart", + "le output voor details\0" + "Donker\0" + "Licht\0" + "Aangepast\0" + "Omslag\0" + "Geen\0" + "Passend\0" + "Bijsnijden\0" + "Nooit\0" + "In lezer\0" + "Altijd\0" + "Negeren\0" + "Slaap\0" + "Pagina omslaan\0" + "Staand\0" + "Liggend (rechtsom)\0" + "Omgekeerd\0" + "Liggend (linksom)\0" + "Vorige/Volgende\0" + "Volgende/Vorige\0" + "Bookerly\0" + "Noto Sans\0" + "Open Dyslexic\0" + "Klein\0" + "Gemiddeld\0" + "Groot\0" + "Extra groot\0" + "Smal\0" + "Normaal\0" + "Breed\0" + "Uitvullen\0" + "Links\0" + "Centreren\0" + "Rechts\0" + "1 min\0" + "5 min\0" + "10 min\0" + "15 min\0" + "30 min\0" + "1 pagina\0" + "5 pagina's\0" + "10 pagina's\0" + "15 pagina's\0" + "30 pagina's\0" + "Update\0" + "Controleren op update...\0" + "Nieuwe update beschikbaar!\0" + "Huidige versie: \0" + "Nieuwe versie: \0" + "Updaten...\0" + "Geen update beschikbaar\0" + "Update mislukt\0" + "Update voltooid\0" + "Houd de aan/uit-knop ingedrukt om in te schakelen\0" + "Geen items gevonden\0" + "Downloaden...\0" + "Download mislukt\0" + "Fout:\0" + "Naamloos\0" + "Geen server-URL ingesteld\0" + "Ophalen feed mislukt\0" + "Verwerken feed mislukt\0" + "Netwerk: \0" + "IP-adres: \0" + "Fout: Algemene fout\0" + "Fout: Netwerk niet gevonden\0" + "Fout: Verbindingstime-out\0" + "SD-kaart\0" "\xC2" "\xAB" - " Terug", + " Terug\0" "\xC2" "\xAB" - " Sluit", + " Sluit\0" "\xC2" "\xAB" - " Home", - "Kies", - "Selected", - "Wissel", - "Bevestig", - "Annuleer", - "Verbind", - "Open", - "Download", - "Opnieuw", - "Ja", - "Nee", - "Toon", - "Verberg", - "AAN", - "UIT", - "Niet ingesteld", - "Links", - "Rechts", - "Omhoog", - "Omlaag", - "OK", - "Slaapscherm omslag-filter", - "Contrast", - "Statusbalk aanpassen", - "Paginanummering hoofdstuk", - "Percentage voortgang boek", - "Voortgangsbalk", - "Dikte voortgangsbalk", - "Dun", - "Gemiddeld", - "Dik", - "Boek", - "Hoofdstuk", - "Hoofdstuk 21", - "Boektitel", - "Voorbeeld", - "Titel", - "Batterij", - "UI Thema", - "Klassiek", - "Lyra", - "Lyra Uitgebreid", - "Zonlicht vervaging fix", - "Knoppen voorzijde wijzigen", - "OPDS-browser", - "Omslag + Aangepast", - "Recente boeken", - "Geen recente boeken", - "Gebruik Calibre draadloze overdracht", - "Netwerk vergeten en wachtwoord verwijderen?", - "Vergeet", - "Calibre starten...", - "Installatie", - "Status", - "Wis", - "Standaard", - "Druk op een knop voorop voor elke functie", - "Niet toegewezen", - "Al toegewezen", - "Zijknop Omhoog: Standaardindeling herstellen", - "Zijknop Omlaag: Toewijzen annuleren", - "Terug (1e knop)", - "Bevestig (2e knop)", - "Links (3e knop)", - "Rechts (4e knop)", - "Ga naar %", - "Naar Home", - "Voortgang synchroniseren", - "Boekcache verwijderen", - "Delete", - "Pagina als QR tonen", - "Hoofdstuk: ", - " pagina's | ", - "Boek: ", - "Voeg voor Calibre /opds toe aan de URL", - "Links/Rechts: 1% Omhoog/Omlaag: 10%", - "Tijd synchroniseren...", - "Document-hash berekenen...", - "Document-hash berekenen mislukt", - "Voortgang ophalen...", - "Voortgang uploaden...", - "Geen inloggegevens ingesteld", - "Stel KOReader-account in bij Instellingen", - "Voortgang gevonden!", - "Extern:", - "Lokaal:", - "Pagina %d, %.2f%% totaal", - "Pagina %d/%d, %.2f%% totaal", - " Van: %s", - "Externe voortgang toepassen", - "Lokale voortgang uploaden", - "Geen externe voortgang gevonden", - "Huidige positie uploaden?", + " Home\0" + "Kies\0" + "Selected\0" + "Wissel\0" + "Bevestig\0" + "Annuleer\0" + "Verbind\0" + "Open\0" + "Download\0" + "Opnieuw\0" + "Ja\0" + "Nee\0" + "Toon\0" + "Verberg\0" + "AAN\0" + "UIT\0" + "Niet ingesteld\0" + "Links\0" + "Rechts\0" + "Omhoog\0" + "Omlaag\0" + "OK\0" + "Slaapscherm omslag-filter\0" + "Contrast\0" + "Statusbalk aanpassen\0" + "Paginanummering hoofdstuk\0" + "Percentage voortgang boek\0" + "Voortgangsbalk\0" + "Dikte voortgangsbalk\0" + "Dun\0" + "Gemiddeld\0" + "Dik\0" + "Boek\0" + "Hoofdstuk\0" + "Hoofdstuk 21\0" + "Boektitel\0" + "Voorbeeld\0" + "Titel\0" + "Batterij\0" + "UI Thema\0" + "Klassiek\0" + "Lyra\0" + "Lyra Uitgebreid\0" + "Zonlicht vervaging fix\0" + "Knoppen voorzijde wijzigen\0" + "OPDS-browser\0" + "Omslag + Aangepast\0" + "Page overlay\0" + "Recents\0" + "Recente boeken\0" + "Geen recente boeken\0" + "Gebruik Calibre draadloze overdracht\0" + "Netwerk vergeten en wachtwoord verwijderen?\0" + "Vergeet\0" + "Calibre starten...\0" + "Installatie\0" + "Status\0" + "Wis\0" + "Standaard\0" + "Druk op een knop voorop voor elke functie\0" + "Niet toegewezen\0" + "Al toegewezen\0" + "Zijknop Omhoog: Standaardindeling herstellen\0" + "Zijknop Omlaag: Toewijzen annuleren\0" + "Terug (1e knop)\0" + "Bevestig (2e knop)\0" + "Links (3e knop)\0" + "Rechts (4e knop)\0" + "Ga naar %\0" + "Naar Home\0" + "Voortgang synchroniseren\0" + "Boekcache verwijderen\0" + "Delete\0" + "Remove\0" + "Pagina als QR tonen\0" + "Hoofdstuk: \0" + " pagina's | \0" + "Boek: \0" + "Voeg voor Calibre /opds toe aan de URL\0" + "Links/Rechts: 1% Omhoog/Omlaag: 10%\0" + "Tijd synchroniseren...\0" + "Document-hash berekenen...\0" + "Document-hash berekenen mislukt\0" + "Voortgang ophalen...\0" + "Mapping remote position...\0" + "Calculating local position...\0" + "Voortgang uploaden...\0" + "Geen inloggegevens ingesteld\0" + "Stel KOReader-account in bij Instellingen\0" + "Voortgang gevonden!\0" + "Extern:\0" + "Lokaal:\0" + "Pagina %d, %.2f%% totaal\0" + "Pagina %d/%d, %.2f%% totaal\0" + " Van: %s\0" + "Externe voortgang toepassen\0" + "Lokale voortgang uploaden\0" + "Geen externe voortgang gevonden\0" + "Huidige positie uploaden?\0" "Voortgang ge\xC3" "\xBC" - "pload!", - "Sync mislukt", - "Sectie ", - "Uploaden", - "Stijl van boek", - "Ingebedde stijl", - "OPDS-server URL", - "Voetnoten", - "Geen voetnoten op deze pagina", - "[link]", - "Screenshot maken", - "Auto Turn Enabled: ", - "Auto Turn (Pages Per Minute)", - "Sleep Screen Info Overlay", - "White", - "Gray", - "Black", - "Off", - "Reading progress: Page %lu/%u - %.0f%%", - "Reading progress: Page %lu", - " - Page %d/%d - %.0f%% read", + "pload!\0" + "Sync mislukt\0" + "Sectie \0" + "Uploaden\0" + "Stijl van boek\0" + "Ingebedde stijl\0" + "OPDS-server URL\0" + "Voetnoten\0" + "Geen voetnoten op deze pagina\0" + "[link]\0" + "Screenshot maken\0" + "Auto Turn Enabled: \0" + "Auto Turn (Pages Per Minute)\0" + "Info\0" + "Author\0" + "Series\0" + "Size\0" + "Sleep Screen Info Overlay\0" + "White\0" + "Gray\0" + "Black\0" + "Off\0" + "Reading progress: Page %lu/%u - %.0f%%\0" + "Reading progress: Page %lu\0" + " - Page %d/%d - %.0f%% read\0" + "System Information\0" + "Failed to load XTC file\0" + "Failed to load EPUB file\0" + "FW version\0" + "Chip\0" + "CPU\0" + "MHz\0" + "Free RAM\0" + "Min free\0" + "Max block\0" + "Flash used\0" + "Uptime\0" + "Charging\0" + "Gathering data...\0" + "Reading...\0" +; +// clang-format on + +const uint16_t OFFSETS_NL[] = { + 0, 11, 21, 32, 51, 70, 89, 102, 115, 133, 159, 183, + 203, 221, 236, 251, 261, 274, 296, 309, 323, 332, 338, 353, + 377, 400, 411, 424, 435, 454, 472, 511, 544, 564, 578, 616, + 672, 691, 705, 746, 774, 785, 821, 838, 854, 885, 896, 916, + 940, 945, 967, 979, 1018, 1052, 1084, 1125, 1132, 1138, 1148, 1156, + 1168, 1193, 1214, 1240, 1260, 1267, 1275, 1287, 1296, 1328, 1352, 1362, + 1390, 1427, 1444, 1464, 1483, 1501, 1525, 1540, 1560, 1578, 1588, 1603, + 1638, 1644, 1657, 1666, 1670, 1674, 1688, 1714, 1740, 1761, 1782, 1804, + 1825, 1855, 1879, 1892, 1914, 1927, 1944, 1960, 1982, 2002, 2012, 2028, + 2045, 2067, 2079, 2096, 2106, 2120, 2138, 2161, 2173, 2187, 2200, 2222, + 2236, 2259, 2264, 2281, 2296, 2307, 2323, 2341, 2355, 2379, 2399, 2412, + 2419, 2447, 2471, 2488, 2512, 2535, 2571, 2593, 2602, 2617, 2647, 2667, + 2690, 2696, 2733, 2767, 2809, 2841, 2857, 2870, 2887, 2895, 2916, 2951, + 2958, 2964, 2974, 2981, 2986, 2994, 3005, 3011, 3020, 3027, 3035, 3041, + 3056, 3063, 3082, 3092, 3110, 3126, 3142, 3151, 3161, 3175, 3181, 3191, + 3197, 3209, 3214, 3222, 3228, 3238, 3244, 3254, 3261, 3267, 3273, 3280, + 3287, 3294, 3303, 3314, 3326, 3338, 3350, 3357, 3382, 3409, 3426, 3442, + 3453, 3477, 3492, 3508, 3558, 3578, 3592, 3609, 3615, 3624, 3650, 3671, + 3694, 3704, 3715, 3735, 3763, 3789, 3798, 3807, 3816, 3824, 3829, 3838, + 3845, 3854, 3863, 3871, 3876, 3885, 3893, 3896, 3900, 3905, 3913, 3917, + 3921, 3936, 3942, 3949, 3956, 3963, 3966, 3992, 4001, 4022, 4048, 4074, + 4089, 4110, 4114, 4124, 4128, 4133, 4143, 4156, 4166, 4176, 4182, 4191, + 4200, 4209, 4214, 4230, 4253, 4280, 4293, 4312, 4325, 4333, 4348, 4368, + 4405, 4449, 4457, 4476, 4488, 4495, 4499, 4509, 4551, 4567, 4581, 4626, + 4662, 4678, 4697, 4713, 4730, 4740, 4750, 4775, 4797, 4804, 4811, 4831, + 4843, 4858, 4865, 4904, 4941, 4964, 4991, 5023, 5044, 5071, 5101, 5123, + 5152, 5194, 5214, 5222, 5230, 5255, 5283, 5293, 5321, 5347, 5379, 5405, + 5426, 5439, 5447, 5456, 5471, 5487, 5503, 5513, 5543, 5550, 5567, 5587, + 5616, 5621, 5628, 5635, 5640, 5666, 5672, 5677, 5683, 5687, 5726, 5753, + 5781, 5800, 5824, 5849, 5860, 5865, 5869, 5873, 5882, 5891, 5901, 5912, + 5919, 5928, 5946, }; -const char* const STRINGS_TR[] = { - "CrossPoint", +// clang-format off +const char STRINGS_TR_DATA[] = + "CrossPoint\0" "BA\xC5" "\x9E" - "LATILIYOR", - "UYKU MODU", + "LATILIYOR\0" + "UYKU MODU\0" "Uyku moduna ge\xC3" "\xA7" - "iliyor", + "iliyor\0" "Dosyalara G\xC3" "\xB6" - "z At", - "Dosya Transferi", - "Ayarlar", - "Okumaya Devam Et", + "z At\0" + "Dosya Transferi\0" + "Ayarlar\0" + "Okumaya Devam Et\0" "A\xC3" "\xA7" "\xC4" "\xB1" - "k kitap yok", + "k kitap yok\0" "A\xC5" "\x9F" "a\xC4" @@ -32075,44 +34303,44 @@ const char* const STRINGS_TR[] = { "\x9F" "lay\xC4" "\xB1" - "n", + "n\0" "Dosya bulunamad\xC4" "\xB1" - "", + "\0" "B\xC3" "\xB6" "l\xC3" "\xBC" "m Se\xC3" "\xA7" - "", + "\0" "B\xC3" "\xB6" "l\xC3" "\xBC" - "m yok", + "m yok\0" "Kitab\xC4" "\xB1" - "n sonu", + "n sonu\0" "Bo\xC5" "\x9F" " b\xC3" "\xB6" "l\xC3" "\xBC" - "m", - "Endeksleniyor", + "m\0" + "Endeksleniyor\0" "Bellek hatas\xC4" "\xB1" - "", + "\0" "Sayfa y\xC3" "\xBC" "kleme hatas\xC4" "\xB1" - "", + "\0" "Bo\xC5" "\x9F" - " dosya", + " dosya\0" "S\xC4" "\xB1" "n\xC4" @@ -32125,39 +34353,39 @@ const char* const STRINGS_TR[] = { "\x9F" "\xC4" "\xB1" - "nda", + "nda\0" "Y\xC3" "\xBC" - "kleniyor...", + "kleniyor...\0" "Y\xC3" "\xBC" - "kleniyor", + "kleniyor\0" "WiFi A\xC4" "\x9F" "lar\xC4" "\xB1" - "", + "\0" "A\xC4" "\x9F" " bulunamad\xC4" "\xB1" - "", + "\0" "%zu a\xC4" "\x9F" - " bulundu", + " bulundu\0" "Tar\xC4" "\xB1" - "yor...", + "yor...\0" "Ba\xC4" "\x9F" "lan\xC4" "\xB1" - "yor...", + "yor...\0" "Ba\xC4" "\x9F" "land\xC4" "\xB1" - "!", + "!\0" "Ba\xC4" "\x9F" "lant\xC4" @@ -32168,39 +34396,39 @@ const char* const STRINGS_TR[] = { "\xB1" "s\xC4" "\xB1" - "z", + "z\0" "A\xC4" "\x9F" "\xC4" "\xB1" - " Unut?", + " Unut?\0" "\xC5" "\x9E" - "ifre kaydedilsin mi?", + "ifre kaydedilsin mi?\0" "Tekrar taramak i\xC3" "\xA7" "in OK'e bas\xC4" "\xB1" - "n", + "n\0" "Bir A\xC4" "\x9F" "a Kat\xC4" "\xB1" - "l", + "l\0" "Eri\xC5" "\x9F" "im Noktas\xC4" "\xB1" " Olu\xC5" "\x9F" - "tur", + "tur\0" "Mevcut bir WiFi a\xC4" "\x9F" "\xC4" "\xB1" "na ba\xC4" "\x9F" - "lan", + "lan\0" "Ba\xC5" "\x9F" "kalar\xC4" @@ -32215,7 +34443,7 @@ const char* const STRINGS_TR[] = { "\x9F" " olu\xC5" "\x9F" - "tur", + "tur\0" "Eri\xC5" "\x9F" "im Noktas\xC4" @@ -32226,12 +34454,12 @@ const char* const STRINGS_TR[] = { "\xB1" "l\xC4" "\xB1" - "yor...", + "yor...\0" "Eri\xC5" "\x9F" "im Noktas\xC4" "\xB1" - " Modu", + " Modu\0" "Cihaz\xC4" "\xB1" "n\xC4" @@ -32246,7 +34474,7 @@ const char* const STRINGS_TR[] = { "\x9F" "lay\xC4" "\xB1" - "n", + "n\0" "Taray\xC4" "\xB1" "c\xC4" @@ -32257,49 +34485,49 @@ const char* const STRINGS_TR[] = { "\xA7" "\xC4" "\xB1" - "n", - "veya http://", + "n\0" + "veya http://\0" "veya telefonunuzla QR kodu taray\xC4" "\xB1" - "n:", - "Calibre Kablosuz", - "Calibre Web Adresi", + "n:\0" + "Calibre Kablosuz\0" + "Calibre Web Adresi\0" "* = \xC5" "\x9E" "ifreli | + = Kay\xC4" "\xB1" "tl\xC4" "\xB1" - "", - "MAC adresi:", - "WiFi kontrol ediliyor...", + "\0" + "MAC adresi:\0" + "WiFi kontrol ediliyor...\0" "WiFi \xC5" "\x9E" - "ifresini Girin", + "ifresini Girin\0" "A\xC4" "\x9F" - ": ", + ": \0" "Al\xC4" "\xB1" "n\xC4" "\xB1" - "yor: ", + "yor: \0" "Al\xC4" "\xB1" "nd\xC4" "\xB1" - ": ", - "1) CrossPoint Reader eklentisini kurun", + ": \0" + "1) CrossPoint Reader eklentisini kurun\0" "2) Ayn\xC4" "\xB1" " WiFi a\xC4" "\x9F" "\xC4" "\xB1" - "nda olun", + "nda olun\0" "3) Calibre'de: \"Cihaza g\xC3" "\xB6" - "nder\"", + "nder\"\0" "\"G\xC3" "\xB6" "nderim s\xC4" @@ -32312,38 +34540,39 @@ const char* const STRINGS_TR[] = { "\xA7" "\xC4" "\xB1" - "k tutun\"", - "Ekran", - "Okuyucu", - "Kontroller", - "Sistem", + "k tutun\"\0" + "Ekran\0" + "Okuyucu\0" + "Kontroller\0" + "Sistem\0" "Uyku Ekran\xC4" "\xB1" - "", + "\0" "Uyku Ekran\xC4" "\xB1" - " Kapak Modu", + " Kapak Modu\0" "Pil Y\xC3" "\xBC" - "zdesini Gizle", + "zdesini Gizle\0" "Ekstra Paragraf Bo\xC5" "\x9F" "lu\xC4" "\x9F" - "u", + "u\0" "Metin Yumu\xC5" "\x9F" - "atma (AA)", + "atma (AA)\0" "G\xC3" "\xB6" - "rseller", + "rseller\0" "G\xC3" "\xB6" - "ster", - "Yer Tutucu", + "ster\0" + "Yer Tutucu\0" "Bast\xC4" "\xB1" - "r", + "r\0" + "Create fallback for invalid TOC\0" "K\xC4" "\xB1" "sa G\xC3" @@ -32356,15 +34585,15 @@ const char* const STRINGS_TR[] = { "\xB1" "klamas\xC4" "\xB1" - "", + "\0" "Okuma Y\xC3" "\xB6" "n\xC3" "\xBC" - "", + "\0" "Yan Tu\xC5" "\x9F" - " Dizilimi (okuyucu)", + " Dizilimi (okuyucu)\0" "Uzun Bas\xC4" "\xB1" "\xC5" @@ -32373,15 +34602,15 @@ const char* const STRINGS_TR[] = { "\xB6" "l\xC3" "\xBC" - "m Atla", + "m Atla\0" "Okuyucu Yaz\xC4" "\xB1" - " Tipi Ailesi", + " Tipi Ailesi\0" "Aray\xC3" "\xBC" "z Yaz\xC4" "\xB1" - " Boyutu", + " Boyutu\0" "Okuyucu Sat\xC4" "\xB1" "r Aral\xC4" @@ -32390,24 +34619,65 @@ const char* const STRINGS_TR[] = { "\x9F" "\xC4" "\xB1" - "", + "\0" "Okuyucu Ekran Kenar Bo\xC5" "\x9F" "lu\xC4" "\x9F" - "u", + "u\0" "Okuyucu Paragraf Hizalamas\xC4" "\xB1" - "", + "\0" "Hecelerden Ay\xC4" "\xB1" - "rma", + "rma\0" "Uykuya Ge\xC3" "\xA7" "me S\xC3" "\xBC" - "resi", - "Show Hidden Files", + "resi\0" + "Gizli Dosyalar\xC4" + "\xB1" + " G\xC3" + "\xB6" + "ster\0" + "Use Clock\0" + "Clock Settings\0" + "Uses more battery; clock may drift\0" + "Clock\0" + "Clock Format\0" + "Timezone\0" + "24h\0" + "12h\0" + "UTC (GMT/BST)\0" + "Central Europe (CET/CEST)\0" + "Eastern Europe (EET/EEST)\0" + "US Eastern (EST/EDT)\0" + "US Central (CST/CDT)\0" + "US Mountain (MST/MDT)\0" + "US Pacific (PST/PDT)\0" + "Australia Eastern (AEST/AEDT)\0" + "New Zealand (NZST/NZDT)\0" + "Russia (MSK)\0" + "South America (UTC-3)\0" + "Gulf (UTC+4)\0" + "India (UTC+5:30)\0" + "SE Asia (UTC+7)\0" + "China/SE Asia (UTC+8)\0" + "Japan/Korea (UTC+9)\0" + "Sync Time\0" + "Detect Timezone\0" + "Syncing clock...\0" + "Detecting timezone...\0" + "Time synced\0" + "Time sync failed\0" + "Drift: %s\0" + "Last sync: %s\0" + "Timezone detected\0" + "Timezone detect failed\0" + "DST: active\0" + "DST: inactive\0" + "DST: unknown\0" "Yenileme S\xC4" "\xB1" "kl\xC4" @@ -32416,57 +34686,57 @@ const char* const STRINGS_TR[] = { "\x9F" "\xC4" "\xB1" - "", - "KOReader Senkronizasyonu", + "\0" + "KOReader Senkronizasyonu\0" "G\xC3" "\xBC" - "ncellemeleri denetle", - "Dil", + "ncellemeleri denetle\0" + "Dil\0" "Okuma \xC3" "\x96" "nbelle\xC4" "\x9F" - "ini Temizle", + "ini Temizle\0" "Kullan\xC4" "\xB1" "c\xC4" "\xB1" " Ad\xC4" "\xB1" - "", + "\0" "\xC5" "\x9E" - "ifre", - "Senkronizasyon Sunucu Adresi", + "ifre\0" + "Senkronizasyon Sunucu Adresi\0" "Belge E\xC5" "\x9F" "le\xC5" "\x9F" - "tirme", + "tirme\0" "Kimlik Do\xC4" "\x9F" - "rula", + "rula\0" "KOReader Kullan\xC4" "\xB1" "c\xC4" "\xB1" " Ad\xC4" "\xB1" - "", + "\0" "KOReader \xC5" "\x9E" - "ifresi", + "ifresi\0" "Dosya Ad\xC4" "\xB1" - "", + "\0" "\xC4" "\xB0" - "kili", + "kili\0" "\xC3" "\x96" "nce kimlik bilgilerini ayarlay\xC4" "\xB1" - "n", + "n\0" "WiFi ba\xC4" "\x9F" "lant\xC4" @@ -32479,12 +34749,12 @@ const char* const STRINGS_TR[] = { "\xB1" "s\xC4" "\xB1" - "z", + "z\0" "Kimlik do\xC4" "\x9F" "rulan\xC4" "\xB1" - "yor...", + "yor...\0" "Kimlik do\xC4" "\x9F" "rulama ba\xC5" @@ -32493,15 +34763,15 @@ const char* const STRINGS_TR[] = { "\xB1" "l\xC4" "\xB1" - "!", + "!\0" "KOReader Do\xC4" "\x9F" "rulamas\xC4" "\xB1" - "", + "\0" "KOReader senkronizasyonu haz\xC4" "\xB1" - "r", + "r\0" "Kimlik Do\xC4" "\x9F" "rulama Ba\xC5" @@ -32510,10 +34780,15 @@ const char* const STRINGS_TR[] = { "\xB1" "s\xC4" "\xB1" - "z", + "z\0" + "Register\0" + "Registering...\0" + "Account created successfully!\0" + "Registration failed\0" + "Username already taken\0" "Tamamland\xC4" "\xB1" - "", + "\0" "Bu i\xC5" "\x9F" "lem t\xC3" @@ -32528,10 +34803,10 @@ const char* const STRINGS_TR[] = { "\xB1" "\xC5" "\x9F" - " verileri siler.", + " verileri siler.\0" "T\xC3" "\xBC" - "m okuma ilerlemesi kaybolacak!", + "m okuma ilerlemesi kaybolacak!\0" "Kitaplar\xC4" "\xB1" "n tekrar a\xC3" @@ -32544,14 +34819,14 @@ const char* const STRINGS_TR[] = { "\x9F" "\xC4" "\xB1" - "nda yeniden", - "endekslenmesi gerekecek.", + "nda yeniden\0" + "endekslenmesi gerekecek.\0" "\xC3" "\x96" - "nbellek temizleniyor...", + "nbellek temizleniyor...\0" "\xC3" "\x96" - "nbellek Temizlendi", + "nbellek Temizlendi\0" "\xC3" "\xB6" "\xC4" @@ -32562,17 +34837,17 @@ const char* const STRINGS_TR[] = { "\xB1" "ld\xC4" "\xB1" - "", + "\0" "ba\xC5" "\x9F" "ar\xC4" "\xB1" "s\xC4" "\xB1" - "z", + "z\0" "\xC3" "\x96" - "nbellek temizlenemedi", + "nbellek temizlenemedi\0" "Detaylar i\xC3" "\xA7" "in seri \xC3" @@ -32583,125 +34858,125 @@ const char* const STRINGS_TR[] = { "\xB1" "ya bak\xC4" "\xB1" - "n", - "Koyu", + "n\0" + "Koyu\0" "A\xC3" "\xA7" "\xC4" "\xB1" - "k", + "k\0" "\xC3" "\x96" - "zel", - "Kapak", - "Yok", + "zel\0" + "Kapak\0" + "Yok\0" "S\xC4" "\xB1" "\xC4" "\x9F" "d\xC4" "\xB1" - "r", + "r\0" "K\xC4" "\xB1" - "rp", - "Asla", - "Okuyucuda", - "Her Zaman", - "Yoksay", - "Uyku", + "rp\0" + "Asla\0" + "Okuyucuda\0" + "Her Zaman\0" + "Yoksay\0" + "Uyku\0" "Sayfa \xC3" "\x87" - "evirme", - "Dikey", + "evirme\0" + "Dikey\0" "Yatay (Saat Y\xC3" "\xB6" "n\xC3" "\xBC" - ")", - "Ters", + ")\0" + "Ters\0" "Yatay (Saat Y\xC3" "\xB6" "n\xC3" "\xBC" - " Tersi)", + " Tersi)\0" "\xC3" "\x96" - "nceki/Sonraki", + "nceki/Sonraki\0" "Sonraki/\xC3" "\x96" - "nceki", - "Bookerly", - "Noto Sans", - "Open Dyslexic", + "nceki\0" + "Bookerly\0" + "Noto Sans\0" + "Open Dyslexic\0" "K\xC3" "\xBC" "\xC3" "\xA7" "\xC3" "\xBC" - "k", - "Orta", + "k\0" + "Orta\0" "B\xC3" "\xBC" "y\xC3" "\xBC" - "k", + "k\0" "\xC3" "\x87" "ok B\xC3" "\xBC" "y\xC3" "\xBC" - "k", - "Dar", - "Normal", + "k\0" + "Dar\0" + "Normal\0" "Geni\xC5" "\x9F" - "", + "\0" "\xC4" "\xB0" - "ki Yana Yasla", - "Sola Yasla", - "Ortala", + "ki Yana Yasla\0" + "Sola Yasla\0" + "Ortala\0" "Sa\xC4" "\x9F" - "a Yasla", - "1 dak", - "5 dak", - "10 dak", - "15 dak", - "30 dak", - "1 sayfa", - "5 sayfa", - "10 sayfa", - "15 sayfa", - "30 sayfa", + "a Yasla\0" + "1 dak\0" + "5 dak\0" + "10 dak\0" + "15 dak\0" + "30 dak\0" + "1 sayfa\0" + "5 sayfa\0" + "10 sayfa\0" + "15 sayfa\0" + "30 sayfa\0" "G\xC3" "\xBC" - "ncelle", + "ncelle\0" "G\xC3" "\xBC" - "ncelleme denetleniyor...", + "ncelleme denetleniyor...\0" "Yeni g\xC3" "\xBC" - "ncelleme mevcut!", + "ncelleme mevcut!\0" "Mevcut S\xC3" "\xBC" "r\xC3" "\xBC" - "m: ", + "m: \0" "Yeni S\xC3" "\xBC" "r\xC3" "\xBC" - "m: ", + "m: \0" "G\xC3" "\xBC" - "ncelleniyor...", + "ncelleniyor...\0" "G\xC3" "\xBC" - "ncelleme yok", + "ncelleme yok\0" "G\xC3" "\xBC" "ncelleme ba\xC5" @@ -32710,12 +34985,12 @@ const char* const STRINGS_TR[] = { "\xB1" "s\xC4" "\xB1" - "z", + "z\0" "G\xC3" "\xBC" "ncelleme tamamland\xC4" "\xB1" - "", + "\0" "A\xC3" "\xA7" "mak i\xC3" @@ -32730,13 +35005,13 @@ const char* const STRINGS_TR[] = { "\xB1" "l\xC4" "\xB1" - " tutun", + " tutun\0" "Girdi bulunamad\xC4" "\xB1" - "", + "\0" "\xC4" "\xB0" - "ndiriliyor...", + "ndiriliyor...\0" "\xC4" "\xB0" "ndirme ba\xC5" @@ -32745,16 +35020,16 @@ const char* const STRINGS_TR[] = { "\xB1" "s\xC4" "\xB1" - "z", - "Hata:", + "z\0" + "Hata:\0" "\xC4" "\xB0" - "simsiz", + "simsiz\0" "Sunucu adresi ayarlanmam\xC4" "\xB1" "\xC5" "\x9F" - "", + "\0" "Ak\xC4" "\xB1" "\xC5" @@ -32763,7 +35038,7 @@ const char* const STRINGS_TR[] = { "\xB1" "namad\xC4" "\xB1" - "", + "\0" "Ak\xC4" "\xB1" "\xC5" @@ -32778,17 +35053,17 @@ const char* const STRINGS_TR[] = { "\xB1" "lamad\xC4" "\xB1" - "", + "\0" "A\xC4" "\x9F" - ": ", - "IP Adresi: ", - "Hata: Genel hata", + ": \0" + "IP Adresi: \0" + "Hata: Genel hata\0" "Hata: A\xC4" "\x9F" " bulunamad\xC4" "\xB1" - "", + "\0" "Hata: Ba\xC4" "\x9F" "lant\xC4" @@ -32799,11 +35074,11 @@ const char* const STRINGS_TR[] = { "\xB1" "m\xC4" "\xB1" - "", - "SD kart", + "\0" + "SD kart\0" "\xC2" "\xAB" - " Geri", + " Geri\0" "\xC2" "\xAB" " \xC3" @@ -32814,69 +35089,69 @@ const char* const STRINGS_TR[] = { "\xB1" "\xC5" "\x9F" - "", + "\0" "\xC2" "\xAB" - " Ana Sayfa", + " Ana Sayfa\0" "Se\xC3" "\xA7" - "", + "\0" "Se\xC3" "\xA7" - "ili", + "ili\0" "De\xC4" "\x9F" "i\xC5" "\x9F" - "tir", - "Onayla", + "tir\0" + "Onayla\0" "\xC4" "\xB0" - "ptal", + "ptal\0" "Ba\xC4" "\x9F" - "lan", + "lan\0" "A\xC3" "\xA7" - "", + "\0" "\xC4" "\xB0" - "ndir", - "Tekrar Dene", - "Evet", + "ndir\0" + "Tekrar Dene\0" + "Evet\0" "Hay\xC4" "\xB1" - "r", + "r\0" "G\xC3" "\xB6" - "ster", - "Gizle", + "ster\0" + "Gizle\0" "A\xC3" "\x87" - "IK", - "KAPALI", + "IK\0" + "KAPALI\0" "Ayarlanmad\xC4" "\xB1" - "", - "Sol", + "\0" + "Sol\0" "Sa\xC4" "\x9F" - "", + "\0" "Yukar\xC4" "\xB1" - "", + "\0" "A\xC5" "\x9F" "a\xC4" "\x9F" "\xC4" "\xB1" - "", - "Tamam", + "\0" + "Tamam\0" "Uyku Ekran\xC4" "\xB1" - " Kapak Filtresi", - "Kontrast", + " Kapak Filtresi\0" + "Kontrast\0" "Durum \xC3" "\x87" "ubu\xC4" @@ -32885,7 +35160,7 @@ const char* const STRINGS_TR[] = { "\x96" "zelle\xC5" "\x9F" - "tir", + "tir\0" "B\xC3" "\xB6" "l\xC3" @@ -32894,19 +35169,19 @@ const char* const STRINGS_TR[] = { "\xB1" "s\xC4" "\xB1" - "", + "\0" "Kitap \xC4" "\xB0" "lerleme Y\xC3" "\xBC" - "zdesi", + "zdesi\0" "\xC4" "\xB0" "lerleme \xC3" "\x87" "ubu\xC4" "\x9F" - "u", + "u\0" "\xC4" "\xB0" "lerleme \xC3" @@ -32921,25 +35196,25 @@ const char* const STRINGS_TR[] = { "\x9F" "\xC4" "\xB1" - "", + "\0" "\xC4" "\xB0" - "nce", - "Orta", + "nce\0" + "Orta\0" "Kal\xC4" "\xB1" - "n", - "Kitap", + "n\0" + "Kitap\0" "B\xC3" "\xB6" "l\xC3" "\xBC" - "m", + "m\0" "B\xC3" "\xB6" "l\xC3" "\xBC" - "m 21", + "m 21\0" "Kitap Ba\xC5" "\x9F" "l\xC4" @@ -32948,28 +35223,28 @@ const char* const STRINGS_TR[] = { "\x9F" "\xC4" "\xB1" - "", + "\0" "\xC3" "\x96" - "nizleme", + "nizleme\0" "Ba\xC5" "\x9F" "l\xC4" "\xB1" - "k", - "Pil", + "k\0" + "Pil\0" "Aray\xC3" "\xBC" "z Temas\xC4" "\xB1" - "", - "Klasik", - "Lyra", + "\0" + "Klasik\0" + "Lyra\0" "Lyra Geni\xC5" "\x9F" "letilmi\xC5" "\x9F" - "", + "\0" "G\xC3" "\xBC" "ne\xC5" @@ -32984,25 +35259,27 @@ const char* const STRINGS_TR[] = { "\xB1" " Solma D\xC3" "\xBC" - "zeltmesi", + "zeltmesi\0" "\xC3" "\x96" "n Tu\xC5" "\x9F" "lar\xC4" "\xB1" - " Yeniden Ata", + " Yeniden Ata\0" "OPDS Taray\xC4" "\xB1" "c\xC4" "\xB1" - "", + "\0" "Kapak + \xC3" "\x96" - "zel", - "Son Kitaplar", - "Son okunan kitap yok", - "Calibre kablosuz cihaz transferini kullan", + "zel\0" + "Page overlay\0" + "Recents\0" + "Son Kitaplar\0" + "Son okunan kitap yok\0" + "Calibre kablosuz cihaz transferini kullan\0" "A\xC4" "\x9F" "\xC4" @@ -33013,21 +35290,21 @@ const char* const STRINGS_TR[] = { "\xB1" " \xC5" "\x9F" - "ifreyi sil?", - "Unut", + "ifreyi sil?\0" + "Unut\0" "Calibre Ba\xC5" "\x9F" "lat\xC4" "\xB1" "l\xC4" "\xB1" - "yor...", - "Kurulum", - "Durum", - "Temizle", + "yor...\0" + "Kurulum\0" + "Durum\0" + "Temizle\0" "Varsay\xC4" "\xB1" - "lan", + "lan\0" "Her rol i\xC3" "\xA7" "in bir \xC3" @@ -33036,17 +35313,17 @@ const char* const STRINGS_TR[] = { "\x9F" "a bas\xC4" "\xB1" - "n", + "n\0" "Atanmam\xC4" "\xB1" "\xC5" "\x9F" - "", + "\0" "Zaten atanm\xC4" "\xB1" "\xC5" "\x9F" - "", + "\0" "Yan tu\xC5" "\x9F" " Yukar\xC4" @@ -33055,7 +35332,7 @@ const char* const STRINGS_TR[] = { "\xB1" "lan dizilime d\xC3" "\xB6" - "n", + "n\0" "Yan tu\xC5" "\x9F" " A\xC5" @@ -33066,47 +35343,48 @@ const char* const STRINGS_TR[] = { "\xB1" ": Atamay\xC4" "\xB1" - " iptal et", + " iptal et\0" "Geri (1. tu\xC5" "\x9F" - ")", + ")\0" "Onayla (2. tu\xC5" "\x9F" - ")", + ")\0" "Sol (3. tu\xC5" "\x9F" - ")", + ")\0" "Sa\xC4" "\x9F" " (4. tu\xC5" "\x9F" - ")", - "%'ye git", - "Ana Sayfaya Git", + ")\0" + "%'ye git\0" + "Ana Sayfaya Git\0" "Okuma \xC4" "\xB0" - "lerlemesini Senkronize Et", + "lerlemesini Senkronize Et\0" "Kitap \xC3" "\x96" "nbelle\xC4" "\x9F" - "ini Sil", - "Sil", + "ini Sil\0" + "Sil\0" + "Remove\0" "Sayfay\xC4" "\xB1" " QR olarak g\xC3" "\xB6" - "ster", + "ster\0" "B\xC3" "\xB6" "l\xC3" "\xBC" - "m: ", - " sayfa | ", - "Kitap: ", + "m: \0" + " sayfa | \0" + "Kitap: \0" "Calibre i\xC3" "\xA7" - "in URL'nize /opds ekleyin", + "in URL'nize /opds ekleyin\0" "Sol/Sa\xC4" "\x9F" ": %1 Yukar\xC4" @@ -33117,96 +35395,98 @@ const char* const STRINGS_TR[] = { "\x9F" "\xC4" "\xB1" - ": %10", - "Zaman senkronize ediliyor...", + ": %10\0" + "Zaman senkronize ediliyor...\0" "Belge \xC3" "\xB6" "zeti hesaplan\xC4" "\xB1" - "yor...", + "yor...\0" "Belge \xC3" "\xB6" "zeti hesaplanamad\xC4" "\xB1" - "", + "\0" "Uzak ilerleme al\xC4" "\xB1" "n\xC4" "\xB1" - "yor...", + "yor...\0" + "Mapping remote position...\0" + "Calculating local position...\0" "\xC4" "\xB0" "lerleme y\xC3" "\xBC" - "kleniyor...", + "kleniyor...\0" "Kimlik bilgisi ayarlanmam\xC4" "\xB1" "\xC5" "\x9F" - "", + "\0" "Ayarlar'da KOReader hesab\xC4" "\xB1" "n\xC4" "\xB1" - " kurun", + " kurun\0" "\xC4" "\xB0" - "lerleme bulundu!", - "Uzak:", - "Yerel:", - "Sayfa %d, genel %.2f%%", - "Sayfa %d/%d, genel %.2f%%", + "lerleme bulundu!\0" + "Uzak:\0" + "Yerel:\0" + "Sayfa %d, genel %.2f%%\0" + "Sayfa %d/%d, genel %.2f%%\0" " \xC5" "\x9E" - "uradan: %s", - "Uzak ilerlemeyi uygula", + "uradan: %s\0" + "Uzak ilerlemeyi uygula\0" "Yerel ilerlemeyi y\xC3" "\xBC" - "kle", + "kle\0" "Uzak ilerleme bulunamad\xC4" "\xB1" - "", + "\0" "Mevcut konumu y\xC3" "\xBC" - "kle?", + "kle?\0" "\xC4" "\xB0" "lerleme y\xC3" "\xBC" - "klendi!", + "klendi!\0" "Senkronizasyon ba\xC5" "\x9F" "ar\xC4" "\xB1" "s\xC4" "\xB1" - "z", + "z\0" "B\xC3" "\xB6" "l\xC3" "\xBC" - "m ", + "m \0" "Y\xC3" "\xBC" - "kle", + "kle\0" "Kitab\xC4" "\xB1" - "n Stili", + "n Stili\0" "G\xC3" "\xB6" "m\xC3" "\xBC" "l\xC3" "\xBC" - " Stil", - "OPDS Sunucu Adresi", - "Dipnotlar", - "Bu sayfada dipnot yok", + " Stil\0" + "OPDS Sunucu Adresi\0" + "Dipnotlar\0" + "Bu sayfada dipnot yok\0" "[ba\xC4" "\x9F" "lant\xC4" "\xB1" - "]", + "]\0" "Ekran g\xC3" "\xB6" "r\xC3" @@ -33215,25 +35495,80 @@ const char* const STRINGS_TR[] = { "\xBC" "s\xC3" "\xBC" - " al", + " al\0" "Otomatik \xC3" "\x87" - "evirme Etkin: ", + "evirme Etkin: \0" "Otomatik \xC3" "\x87" - "evirme (Dakikada Sayfa)", - "Sleep Screen Info Overlay", - "White", - "Gray", - "Black", - "Off", - "Reading progress: Page %lu/%u - %.0f%%", - "Reading progress: Page %lu", - " - Page %d/%d - %.0f%% read", + "evirme (Dakikada Sayfa)\0" + "Info\0" + "Author\0" + "Series\0" + "Size\0" + "Sleep Screen Info Overlay\0" + "White\0" + "Gray\0" + "Black\0" + "Off\0" + "Reading progress: Page %lu/%u - %.0f%%\0" + "Reading progress: Page %lu\0" + " - Page %d/%d - %.0f%% read\0" + "System Information\0" + "Failed to load XTC file\0" + "Failed to load EPUB file\0" + "FW version\0" + "Chip\0" + "CPU\0" + "MHz\0" + "Free RAM\0" + "Min free\0" + "Max block\0" + "Flash used\0" + "Uptime\0" + "Charging\0" + "Gathering data...\0" + "Reading...\0" +; +// clang-format on + +const uint16_t OFFSETS_TR[] = { + 0, 11, 25, 35, 58, 76, 92, 100, 117, 134, 165, 183, + 196, 208, 222, 235, 249, 264, 287, 298, 323, 338, 350, 364, + 380, 396, 408, 424, 436, 460, 472, 495, 528, 544, 570, 602, + 648, 684, 706, 747, 781, 794, 831, 848, 867, 896, 908, 933, + 955, 961, 974, 985, 1024, 1052, 1084, 1132, 1138, 1146, 1157, 1164, + 1177, 1201, 1222, 1248, 1270, 1281, 1289, 1300, 1308, 1340, 1370, 1383, + 1411, 1439, 1465, 1486, 1512, 1542, 1571, 1590, 1612, 1637, 1647, 1662, + 1697, 1703, 1716, 1725, 1729, 1733, 1747, 1773, 1799, 1820, 1841, 1863, + 1884, 1914, 1938, 1951, 1973, 1986, 2003, 2019, 2041, 2061, 2071, 2087, + 2104, 2126, 2138, 2155, 2165, 2179, 2197, 2220, 2232, 2246, 2259, 2280, + 2305, 2329, 2333, 2361, 2378, 2385, 2414, 2433, 2449, 2475, 2493, 2504, + 2511, 2547, 2579, 2604, 2635, 2658, 2690, 2721, 2730, 2745, 2775, 2795, + 2818, 2830, 2884, 2918, 2962, 2987, 3013, 3034, 3054, 3067, 3091, 3129, + 3134, 3141, 3147, 3153, 3157, 3167, 3173, 3178, 3188, 3198, 3205, 3210, + 3225, 3231, 3251, 3256, 3282, 3298, 3314, 3323, 3333, 3347, 3356, 3361, + 3369, 3382, 3386, 3393, 3400, 3416, 3427, 3434, 3446, 3452, 3458, 3465, + 3472, 3479, 3487, 3495, 3504, 3513, 3522, 3532, 3560, 3585, 3602, 3617, + 3635, 3651, 3676, 3700, 3742, 3760, 3776, 3798, 3804, 3813, 3842, 3861, + 3889, 3895, 3907, 3924, 3946, 3978, 3986, 3994, 4007, 4020, 4025, 4033, + 4044, 4051, 4058, 4066, 4070, 4077, 4089, 4094, 4101, 4109, 4115, 4121, + 4128, 4141, 4145, 4150, 4158, 4167, 4173, 4201, 4210, 4240, 4263, 4288, + 4307, 4340, 4346, 4351, 4358, 4364, 4372, 4383, 4401, 4411, 4420, 4424, + 4440, 4447, 4452, 4473, 4509, 4535, 4551, 4565, 4578, 4586, 4599, 4620, + 4662, 4700, 4705, 4732, 4740, 4746, 4754, 4766, 4801, 4813, 4829, 4873, + 4910, 4925, 4942, 4956, 4971, 4980, 4996, 5030, 5054, 5058, 5065, 5092, + 5102, 5114, 5122, 5159, 5195, 5224, 5254, 5282, 5310, 5337, 5367, 5392, + 5422, 5459, 5478, 5484, 5491, 5514, 5540, 5555, 5578, 5602, 5628, 5650, + 5671, 5699, 5708, 5715, 5730, 5745, 5764, 5774, 5796, 5809, 5832, 5858, + 5893, 5898, 5905, 5912, 5917, 5943, 5949, 5954, 5960, 5964, 6003, 6030, + 6058, 6077, 6101, 6126, 6137, 6142, 6146, 6150, 6159, 6168, 6178, 6189, + 6196, 6205, 6223, }; -const char* const STRINGS_KK[] = { - "CrossPoint", +// clang-format off +const char STRINGS_KK_DATA[] = + "CrossPoint\0" "\xD0" "\x96" "\xD2" @@ -33252,7 +35587,7 @@ const char* const STRINGS_KK[] = { "\x94" "\xD0" "\x95" - "", + "\0" "\xD2" "\xB0" "\xD0" @@ -33273,7 +35608,7 @@ const char* const STRINGS_KK[] = { "\x9C" "\xD0" "\x86" - "", + "\0" "\xD2" "\xB0" "\xD0" @@ -33304,7 +35639,7 @@ const char* const STRINGS_KK[] = { "\x82" "\xD1" "\x83" - "", + "\0" "\xD0" "\xA4" "\xD0" @@ -33319,7 +35654,7 @@ const char* const STRINGS_KK[] = { "\xB0" "\xD1" "\x80" - "", + "\0" "\xD0" "\xA4" "\xD0" @@ -33340,7 +35675,7 @@ const char* const STRINGS_KK[] = { "\x80" "\xD1" "\x83" - "", + "\0" "\xD0" "\x91" "\xD0" @@ -33359,7 +35694,7 @@ const char* const STRINGS_KK[] = { "\xB0" "\xD1" "\x80" - "", + "\0" "\xD0" "\x9E" "\xD2" @@ -33390,7 +35725,7 @@ const char* const STRINGS_KK[] = { "\x80" "\xD1" "\x83" - "", + "\0" "\xD0" "\x90" "\xD1" @@ -33415,7 +35750,7 @@ const char* const STRINGS_KK[] = { "\xBE" "\xD2" "\x9B" - "", + "\0" "\xD0" "\xA2" "\xD3" @@ -33456,7 +35791,7 @@ const char* const STRINGS_KK[] = { "\x8B" "\xD0" "\xB7" - "", + "\0" "\xD0" "\xA4" "\xD0" @@ -33489,7 +35824,7 @@ const char* const STRINGS_KK[] = { "\xB4" "\xD1" "\x8B" - "", + "\0" "\xD0" "\xA2" "\xD0" @@ -33520,7 +35855,7 @@ const char* const STRINGS_KK[] = { "\x8B" "\xD0" "\xB7" - "", + "\0" "\xD0" "\xA2" "\xD0" @@ -33543,7 +35878,7 @@ const char* const STRINGS_KK[] = { "\xBE" "\xD2" "\x9B" - "", + "\0" "\xD0" "\x9A" "\xD1" @@ -33570,7 +35905,7 @@ const char* const STRINGS_KK[] = { "\xB4" "\xD1" "\x8B" - "", + "\0" "\xD0" "\x91" "\xD0" @@ -33587,7 +35922,7 @@ const char* const STRINGS_KK[] = { "\xB0" "\xD1" "\x83" - "", + "\0" "\xD0" "\x98" "\xD0" @@ -33612,7 +35947,7 @@ const char* const STRINGS_KK[] = { "\xB4" "\xD0" "\xB5" - "", + "\0" "\xD0" "\x96" "\xD0" @@ -33631,7 +35966,7 @@ const char* const STRINGS_KK[] = { "\x81" "\xD1" "\x96" - "", + "\0" "\xD0" "\x91" "\xD0" @@ -33666,7 +36001,7 @@ const char* const STRINGS_KK[] = { "\x81" "\xD1" "\x96" - "", + "\0" "\xD0" "\x91" "\xD0" @@ -33681,7 +36016,7 @@ const char* const STRINGS_KK[] = { "\xB9" "\xD0" "\xBB" - "", + "\0" "\xD0" "\xA8" "\xD0" @@ -33700,7 +36035,7 @@ const char* const STRINGS_KK[] = { "\x8B" "\xD1" "\x81" - "", + "\0" "\xD0" "\x96" "\xD2" @@ -33719,7 +36054,7 @@ const char* const STRINGS_KK[] = { "\xB4" "\xD0" "\xB5" - "...", + "...\0" "\xD0" "\x96" "\xD2" @@ -33738,7 +36073,7 @@ const char* const STRINGS_KK[] = { "\xB4" "\xD0" "\xB5" - "", + "\0" "WiFi \xD0" "\xB6" "\xD0" @@ -33755,7 +36090,7 @@ const char* const STRINGS_KK[] = { "\x80" "\xD1" "\x96" - "", + "\0" "\xD0" "\x96" "\xD0" @@ -33788,7 +36123,7 @@ const char* const STRINGS_KK[] = { "\xB4" "\xD1" "\x8B" - "", + "\0" "%zu \xD0" "\xB6" "\xD0" @@ -33811,7 +36146,7 @@ const char* const STRINGS_KK[] = { "\xB4" "\xD1" "\x8B" - "", + "\0" "\xD0" "\x86" "\xD0" @@ -33826,7 +36161,7 @@ const char* const STRINGS_KK[] = { "\xB4" "\xD0" "\xB5" - "...", + "...\0" "\xD2" "\x9A" "\xD0" @@ -33843,7 +36178,7 @@ const char* const STRINGS_KK[] = { "\xB4" "\xD0" "\xB0" - "...", + "...\0" "\xD2" "\x9A" "\xD0" @@ -33858,7 +36193,7 @@ const char* const STRINGS_KK[] = { "\xB4" "\xD1" "\x8B" - "!", + "!\0" "\xD2" "\x9A" "\xD0" @@ -33883,7 +36218,7 @@ const char* const STRINGS_KK[] = { "\x96" "\xD0" "\xB7" - "", + "\0" "\xD0" "\x96" "\xD0" @@ -33906,7 +36241,7 @@ const char* const STRINGS_KK[] = { "\x82" "\xD1" "\x83" - "?", + "?\0" "\xD0" "\x9A" "\xD0" @@ -33975,7 +36310,7 @@ const char* const STRINGS_KK[] = { "\xBF" "\xD0" "\xB5" - "?", + "?\0" "\xD2" "\x9A" "\xD0" @@ -34018,7 +36353,7 @@ const char* const STRINGS_KK[] = { "\x8B" "\xD0" "\xB7" - "", + "\0" "\xD0" "\x96" "\xD0" @@ -34043,7 +36378,7 @@ const char* const STRINGS_KK[] = { "\xBB" "\xD1" "\x83" - "", + "\0" "\xD0" "\xA5" "\xD0" @@ -34068,7 +36403,7 @@ const char* const STRINGS_KK[] = { "\xB0" "\xD1" "\x83" - "", + "\0" "\xD0" "\x91" "\xD0" @@ -34103,7 +36438,7 @@ const char* const STRINGS_KK[] = { "\xBB" "\xD1" "\x83" - "", + "\0" "\xD0" "\x91" "\xD0" @@ -34164,7 +36499,7 @@ const char* const STRINGS_KK[] = { "\xB0" "\xD1" "\x83" - "", + "\0" "\xD0" "\xA5" "\xD0" @@ -34203,7 +36538,7 @@ const char* const STRINGS_KK[] = { "\xB4" "\xD0" "\xB0" - "...", + "...\0" "\xD0" "\xA5" "\xD0" @@ -34230,7 +36565,7 @@ const char* const STRINGS_KK[] = { "\xBC" "\xD1" "\x96" - "", + "\0" "\xD2" "\x9A" "\xD2" @@ -34291,7 +36626,7 @@ const char* const STRINGS_KK[] = { "\x8B" "\xD0" "\xB7" - "", + "\0" "\xD0" "\x91" "\xD1" @@ -34348,7 +36683,7 @@ const char* const STRINGS_KK[] = { "\x8B" "\xD0" "\xB7" - "", + "\0" "\xD0" "\xBD" "\xD0" @@ -34361,7 +36696,7 @@ const char* const STRINGS_KK[] = { "\x81" "\xD0" "\xB5" - " http://", + " http://\0" "\xD0" "\xBD" "\xD0" @@ -34426,7 +36761,7 @@ const char* const STRINGS_KK[] = { "\x96" "\xD0" "\xB7" - ":", + ":\0" "Calibre \xD1" "\x81" "\xD1" @@ -34439,8 +36774,8 @@ const char* const STRINGS_KK[] = { "\x8B" "\xD0" "\xB7" - "", - "Calibre Web URL", + "\0" + "Calibre Web URL\0" "* = \xD0" "\xA8" "\xD0" @@ -34479,7 +36814,7 @@ const char* const STRINGS_KK[] = { "\xB0" "\xD0" "\xBD" - "", + "\0" "MAC \xD0" "\xBC" "\xD0" @@ -34498,7 +36833,7 @@ const char* const STRINGS_KK[] = { "\xB9" "\xD1" "\x8B" - ":", + ":\0" "WiFi \xD1" "\x82" "\xD0" @@ -34521,7 +36856,7 @@ const char* const STRINGS_KK[] = { "\xB4" "\xD0" "\xB5" - "...", + "...\0" "WiFi \xD2" "\x9B" "\xD2" @@ -34560,8 +36895,8 @@ const char* const STRINGS_KK[] = { "\x96" "\xD0" "\xB7" - "", - "to ", + "\0" + "to \0" "\xD2" "\x9A" "\xD0" @@ -34584,7 +36919,7 @@ const char* const STRINGS_KK[] = { "\xB4" "\xD0" "\xB0" - ": ", + ": \0" "\xD2" "\x9A" "\xD0" @@ -34605,7 +36940,7 @@ const char* const STRINGS_KK[] = { "\xB4" "\xD1" "\x8B" - ": ", + ": \0" "1) CrossPoint Reader \xD0" "\xBF" "\xD0" @@ -34640,7 +36975,7 @@ const char* const STRINGS_KK[] = { "\x8B" "\xD0" "\xB7" - "", + "\0" "2) \xD0" "\x91" "\xD1" @@ -34679,7 +37014,7 @@ const char* const STRINGS_KK[] = { "\x8B" "\xD0" "\xB7" - "", + "\0" "3) Calibre-\xD0" "\xB4" "\xD0" @@ -34714,7 +37049,7 @@ const char* const STRINGS_KK[] = { "\x80" "\xD1" "\x83" - "\"", + "\"\0" "\"\xD0" "\x96" "\xD1" @@ -34783,7 +37118,7 @@ const char* const STRINGS_KK[] = { "\x8B" "\xD0" "\xB7" - "\"", + "\"\0" "\xD0" "\x94" "\xD0" @@ -34798,7 +37133,7 @@ const char* const STRINGS_KK[] = { "\xB5" "\xD0" "\xB9" - "", + "\0" "\xD0" "\x9E" "\xD2" @@ -34813,7 +37148,7 @@ const char* const STRINGS_KK[] = { "\xB0" "\xD0" "\xBD" - "", + "\0" "\xD0" "\x91" "\xD0" @@ -34828,7 +37163,7 @@ const char* const STRINGS_KK[] = { "\x80" "\xD1" "\x83" - "", + "\0" "\xD0" "\x96" "\xD2" @@ -34837,7 +37172,7 @@ const char* const STRINGS_KK[] = { "\xB9" "\xD0" "\xB5" - "", + "\0" "\xD2" "\xB0" "\xD0" @@ -34858,7 +37193,7 @@ const char* const STRINGS_KK[] = { "\xBD" "\xD1" "\x8B" - "", + "\0" "\xD2" "\xB0" "\xD0" @@ -34903,7 +37238,7 @@ const char* const STRINGS_KK[] = { "\xBC" "\xD1" "\x96" - "", + "\0" "\xD0" "\x91" "\xD0" @@ -34930,7 +37265,7 @@ const char* const STRINGS_KK[] = { "\x80" "\xD1" "\x83" - "", + "\0" "\xD2" "\x9A" "\xD0" @@ -34969,7 +37304,7 @@ const char* const STRINGS_KK[] = { "\x93" "\xD1" "\x8B" - "", + "\0" "\xD0" "\x9C" "\xD3" @@ -35000,7 +37335,7 @@ const char* const STRINGS_KK[] = { "\x81" "\xD1" "\x8B" - "", + "\0" "\xD0" "\xA1" "\xD1" @@ -35017,7 +37352,7 @@ const char* const STRINGS_KK[] = { "\xB5" "\xD1" "\x80" - "", + "\0" "\xD0" "\x9A" "\xD3" @@ -35032,7 +37367,7 @@ const char* const STRINGS_KK[] = { "\x82" "\xD1" "\x83" - "", + "\0" "\xD0" "\x9E" "\xD1" @@ -35055,7 +37390,7 @@ const char* const STRINGS_KK[] = { "\x88" "\xD1" "\x96" - "", + "\0" "\xD0" "\x96" "\xD0" @@ -35068,7 +37403,8 @@ const char* const STRINGS_KK[] = { "\x80" "\xD1" "\x83" - "", + "\0" + "Create fallback for invalid TOC\0" "\xD2" "\x9A" "\xD1" @@ -35111,7 +37447,7 @@ const char* const STRINGS_KK[] = { "\x81" "\xD1" "\x83" - "", + "\0" "\xD0" "\x9E" "\xD2" @@ -35132,7 +37468,7 @@ const char* const STRINGS_KK[] = { "\x80" "\xD1" "\x8B" - "", + "\0" "\xD0" "\x91" "\xD2" @@ -35197,7 +37533,7 @@ const char* const STRINGS_KK[] = { "\xB0" "\xD0" "\xBD" - ")", + ")\0" "\xD2" "\xB0" "\xD0" @@ -35248,7 +37584,7 @@ const char* const STRINGS_KK[] = { "\xB7" "\xD1" "\x83" - "", + "\0" "\xD0" "\x9E" "\xD2" @@ -35281,7 +37617,7 @@ const char* const STRINGS_KK[] = { "\xB1" "\xD1" "\x8B" - "", + "\0" "\xD0" "\x98" "\xD0" @@ -35322,7 +37658,7 @@ const char* const STRINGS_KK[] = { "\xBC" "\xD1" "\x96" - "", + "\0" "\xD0" "\x9E" "\xD2" @@ -35357,7 +37693,7 @@ const char* const STRINGS_KK[] = { "\x93" "\xD1" "\x8B" - "", + "\0" "\xD0" "\x9E" "\xD2" @@ -35392,7 +37728,7 @@ const char* const STRINGS_KK[] = { "\xB3" "\xD1" "\x96" - "", + "\0" "\xD0" "\x9E" "\xD2" @@ -35435,7 +37771,7 @@ const char* const STRINGS_KK[] = { "\x83" "\xD1" "\x8B" - "", + "\0" "\xD0" "\x91" "\xD1" @@ -35452,7 +37788,7 @@ const char* const STRINGS_KK[] = { "\xBB" "\xD1" "\x83" - "", + "\0" "\xD2" "\xB0" "\xD0" @@ -35473,8 +37809,45 @@ const char* const STRINGS_KK[] = { "\x82" "\xD1" "\x8B" - "", - "Show Hidden Files", + "\0" + "Show Hidden Files\0" + "Use Clock\0" + "Clock Settings\0" + "Uses more battery; clock may drift\0" + "Clock\0" + "Clock Format\0" + "Timezone\0" + "24h\0" + "12h\0" + "UTC (GMT/BST)\0" + "Central Europe (CET/CEST)\0" + "Eastern Europe (EET/EEST)\0" + "US Eastern (EST/EDT)\0" + "US Central (CST/CDT)\0" + "US Mountain (MST/MDT)\0" + "US Pacific (PST/PDT)\0" + "Australia Eastern (AEST/AEDT)\0" + "New Zealand (NZST/NZDT)\0" + "Russia (MSK)\0" + "South America (UTC-3)\0" + "Gulf (UTC+4)\0" + "India (UTC+5:30)\0" + "SE Asia (UTC+7)\0" + "China/SE Asia (UTC+8)\0" + "Japan/Korea (UTC+9)\0" + "Sync Time\0" + "Detect Timezone\0" + "Syncing clock...\0" + "Detecting timezone...\0" + "Time synced\0" + "Time sync failed\0" + "Drift: %s\0" + "Last sync: %s\0" + "Timezone detected\0" + "Timezone detect failed\0" + "DST: active\0" + "DST: inactive\0" + "DST: unknown\0" "\xD0" "\x96" "\xD0" @@ -35503,7 +37876,7 @@ const char* const STRINGS_KK[] = { "\xB3" "\xD1" "\x96" - "", + "\0" "KOReader \xD1" "\x81" "\xD0" @@ -35534,7 +37907,7 @@ const char* const STRINGS_KK[] = { "\x81" "\xD1" "\x8B" - "", + "\0" "\xD0" "\x96" "\xD0" @@ -35573,14 +37946,14 @@ const char* const STRINGS_KK[] = { "\x80" "\xD1" "\x83" - "", + "\0" "\xD0" "\xA2" "\xD1" "\x96" "\xD0" "\xBB" - "", + "\0" "\xD0" "\x9E" "\xD2" @@ -35611,7 +37984,7 @@ const char* const STRINGS_KK[] = { "\xB0" "\xD1" "\x83" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -35640,7 +38013,7 @@ const char* const STRINGS_KK[] = { "\x82" "\xD1" "\x8B" - "", + "\0" "\xD2" "\x9A" "\xD2" @@ -35657,7 +38030,7 @@ const char* const STRINGS_KK[] = { "\xA9" "\xD0" "\xB7" - "", + "\0" "\xD0" "\xA1" "\xD0" @@ -35692,7 +38065,7 @@ const char* const STRINGS_KK[] = { "\x80" "\xD1" "\x96" - " URL", + " URL\0" "\xD2" "\x9A" "\xD2" @@ -35729,7 +38102,7 @@ const char* const STRINGS_KK[] = { "\x80" "\xD1" "\x83" - "", + "\0" "\xD0" "\x90" "\xD1" @@ -35758,7 +38131,7 @@ const char* const STRINGS_KK[] = { "\xB8" "\xD1" "\x8F" - "", + "\0" "KOReader \xD0" "\xBF" "\xD0" @@ -35787,7 +38160,7 @@ const char* const STRINGS_KK[] = { "\x82" "\xD1" "\x8B" - "", + "\0" "KOReader \xD2" "\x9B" "\xD2" @@ -35806,7 +38179,7 @@ const char* const STRINGS_KK[] = { "\xB7" "\xD1" "\x96" - "", + "\0" "\xD0" "\xA4" "\xD0" @@ -35821,7 +38194,7 @@ const char* const STRINGS_KK[] = { "\x82" "\xD1" "\x8B" - "", + "\0" "\xD0" "\x91" "\xD0" @@ -35838,7 +38211,7 @@ const char* const STRINGS_KK[] = { "\x8B" "\xD2" "\x9B" - "", + "\0" "\xD0" "\x90" "\xD0" @@ -35907,7 +38280,7 @@ const char* const STRINGS_KK[] = { "\x8B" "\xD0" "\xB7" - "", + "\0" "WiFi \xD2" "\x9B" "\xD0" @@ -35934,7 +38307,7 @@ const char* const STRINGS_KK[] = { "\x96" "\xD0" "\xB7" - "", + "\0" "\xD0" "\x90" "\xD1" @@ -35983,7 +38356,7 @@ const char* const STRINGS_KK[] = { "\x8B" "\xD1" "\x80" - "...", + "...\0" "\xD0" "\x90" "\xD1" @@ -36022,7 +38395,7 @@ const char* const STRINGS_KK[] = { "\x82" "\xD1" "\x96" - "!", + "!\0" "KOReader \xD0" "\xB0" "\xD1" @@ -36055,7 +38428,7 @@ const char* const STRINGS_KK[] = { "\x81" "\xD1" "\x8B" - "", + "\0" "KOReader \xD1" "\x81" "\xD0" @@ -36118,7 +38491,7 @@ const char* const STRINGS_KK[] = { "\x8B" "\xD0" "\xBD" - "", + "\0" "\xD0" "\x90" "\xD1" @@ -36159,7 +38532,12 @@ const char* const STRINGS_KK[] = { "\x96" "\xD0" "\xB7" - "", + "\0" + "Register\0" + "Registering...\0" + "Account created successfully!\0" + "Registration failed\0" + "Username already taken\0" "\xD0" "\x94" "\xD0" @@ -36170,7 +38548,7 @@ const char* const STRINGS_KK[] = { "\x8B" "\xD0" "\xBD" - "", + "\0" "\xD0" "\x91" "\xD2" @@ -36247,7 +38625,7 @@ const char* const STRINGS_KK[] = { "\xB4" "\xD1" "\x8B" - ".", + ".\0" "\xD0" "\x91" "\xD0" @@ -36298,7 +38676,7 @@ const char* const STRINGS_KK[] = { "\xB4" "\xD1" "\x8B" - "!", + "!\0" "\xD0" "\x9A" "\xD1" @@ -36369,7 +38747,7 @@ const char* const STRINGS_KK[] = { "\xB4" "\xD1" "\x8B" - "", + "\0" "\xD0" "\xBA" "\xD0" @@ -36400,7 +38778,7 @@ const char* const STRINGS_KK[] = { "\xB4" "\xD0" "\xB0" - ".", + ".\0" "\xD0" "\x9A" "\xD1" @@ -36427,7 +38805,7 @@ const char* const STRINGS_KK[] = { "\xB4" "\xD0" "\xB0" - "...", + "...\0" "\xD0" "\x9A" "\xD1" @@ -36452,7 +38830,7 @@ const char* const STRINGS_KK[] = { "\xB4" "\xD1" "\x8B" - "", + "\0" "\xD1" "\x8D" "\xD0" @@ -36481,7 +38859,7 @@ const char* const STRINGS_KK[] = { "\xB4" "\xD1" "\x8B" - "", + "\0" "\xD1" "\x81" "\xD3" @@ -36494,7 +38872,7 @@ const char* const STRINGS_KK[] = { "\x96" "\xD0" "\xB7" - "", + "\0" "\xD0" "\x9A" "\xD1" @@ -36531,7 +38909,7 @@ const char* const STRINGS_KK[] = { "\x96" "\xD0" "\xB7" - "", + "\0" "\xD0" "\xA2" "\xD0" @@ -36614,7 +38992,7 @@ const char* const STRINGS_KK[] = { "\x96" "\xD0" "\xB7" - "", + "\0" "\xD2" "\x9A" "\xD0" @@ -36629,7 +39007,7 @@ const char* const STRINGS_KK[] = { "\x93" "\xD1" "\x8B" - "", + "\0" "\xD0" "\x90" "\xD1" @@ -36638,7 +39016,7 @@ const char* const STRINGS_KK[] = { "\x8B" "\xD2" "\x9B" - "", + "\0" "\xD3" "\xA8" "\xD0" @@ -36661,7 +39039,7 @@ const char* const STRINGS_KK[] = { "\xB5" "\xD0" "\xBD" - "", + "\0" "\xD0" "\x9C" "\xD2" @@ -36674,7 +39052,7 @@ const char* const STRINGS_KK[] = { "\xB1" "\xD0" "\xB0" - "", + "\0" "\xD0" "\x95" "\xD1" @@ -36693,7 +39071,7 @@ const char* const STRINGS_KK[] = { "\x81" "\xD1" "\x8B" - "", + "\0" "\xD0" "\xA1" "\xD1" @@ -36708,7 +39086,7 @@ const char* const STRINGS_KK[] = { "\x80" "\xD1" "\x83" - "", + "\0" "\xD0" "\x9A" "\xD0" @@ -36717,7 +39095,7 @@ const char* const STRINGS_KK[] = { "\x81" "\xD1" "\x83" - "", + "\0" "\xD0" "\x95" "\xD1" @@ -36732,7 +39110,7 @@ const char* const STRINGS_KK[] = { "\xB0" "\xD0" "\xBD" - "", + "\0" "\xD0" "\x9E" "\xD2" @@ -36751,7 +39129,7 @@ const char* const STRINGS_KK[] = { "\xB4" "\xD0" "\xB0" - "", + "\0" "\xD3" "\x98" "\xD1" @@ -36766,7 +39144,7 @@ const char* const STRINGS_KK[] = { "\xB0" "\xD0" "\xBD" - "", + "\0" "\xD0" "\x95" "\xD0" @@ -36779,7 +39157,7 @@ const char* const STRINGS_KK[] = { "\xB5" "\xD1" "\x83" - "", + "\0" "\xD2" "\xB0" "\xD0" @@ -36788,7 +39166,7 @@ const char* const STRINGS_KK[] = { "\x9B" "\xD1" "\x8B" - "", + "\0" "\xD0" "\x91" "\xD0" @@ -36807,7 +39185,7 @@ const char* const STRINGS_KK[] = { "\x80" "\xD1" "\x83" - "", + "\0" "\xD0" "\xA2" "\xD1" @@ -36826,7 +39204,7 @@ const char* const STRINGS_KK[] = { "\xB0" "\xD1" "\x80" - "", + "\0" "\xD0" "\x9A" "\xD3" @@ -36871,7 +39249,7 @@ const char* const STRINGS_KK[] = { "\xB5" "\xD0" "\xBD" - ")", + ")\0" "\xD0" "\xA2" "\xD3" @@ -36894,7 +39272,7 @@ const char* const STRINGS_KK[] = { "\xB5" "\xD0" "\xBD" - "", + "\0" "\xD0" "\x9A" "\xD3" @@ -36943,7 +39321,7 @@ const char* const STRINGS_KK[] = { "\x81" "\xD1" "\x8B" - ")", + ")\0" "\xD0" "\x90" "\xD0" @@ -36970,7 +39348,7 @@ const char* const STRINGS_KK[] = { "\x81" "\xD1" "\x96" - "", + "\0" "\xD0" "\x9A" "\xD0" @@ -36997,10 +39375,10 @@ const char* const STRINGS_KK[] = { "\x93" "\xD1" "\x8B" - "", - "Bookerly", - "Noto Sans", - "Open Dyslexic", + "\0" + "Bookerly\0" + "Noto Sans\0" + "Open Dyslexic\0" "\xD0" "\x9A" "\xD1" @@ -37019,7 +39397,7 @@ const char* const STRINGS_KK[] = { "\xB0" "\xD0" "\xB9" - "", + "\0" "\xD0" "\x9E" "\xD1" @@ -37032,7 +39410,7 @@ const char* const STRINGS_KK[] = { "\x88" "\xD0" "\xB0" - "", + "\0" "\xD2" "\xAE" "\xD0" @@ -37043,7 +39421,7 @@ const char* const STRINGS_KK[] = { "\xB5" "\xD0" "\xBD" - "", + "\0" "\xD3" "\xA8" "\xD1" @@ -37060,14 +39438,14 @@ const char* const STRINGS_KK[] = { "\xB5" "\xD0" "\xBD" - "", + "\0" "\xD0" "\xA2" "\xD0" "\xB0" "\xD1" "\x80" - "", + "\0" "\xD2" "\x9A" "\xD0" @@ -37082,14 +39460,14 @@ const char* const STRINGS_KK[] = { "\x82" "\xD1" "\x8B" - "", + "\0" "\xD0" "\x9A" "\xD0" "\xB5" "\xD2" "\xA3" - "", + "\0" "\xD0" "\xA2" "\xD0" @@ -37106,7 +39484,7 @@ const char* const STRINGS_KK[] = { "\xB5" "\xD1" "\x83" - "", + "\0" "\xD0" "\xA1" "\xD0" @@ -37117,7 +39495,7 @@ const char* const STRINGS_KK[] = { "\x93" "\xD0" "\xB0" - "", + "\0" "\xD0" "\x9E" "\xD1" @@ -37130,7 +39508,7 @@ const char* const STRINGS_KK[] = { "\x93" "\xD0" "\xB0" - "", + "\0" "\xD0" "\x9E" "\xD2" @@ -37139,77 +39517,77 @@ const char* const STRINGS_KK[] = { "\x93" "\xD0" "\xB0" - "", + "\0" "1 \xD0" "\xBC" "\xD0" "\xB8" "\xD0" "\xBD" - "", + "\0" "5 \xD0" "\xBC" "\xD0" "\xB8" "\xD0" "\xBD" - "", + "\0" "10 \xD0" "\xBC" "\xD0" "\xB8" "\xD0" "\xBD" - "", + "\0" "15 \xD0" "\xBC" "\xD0" "\xB8" "\xD0" "\xBD" - "", + "\0" "30 \xD0" "\xBC" "\xD0" "\xB8" "\xD0" "\xBD" - "", + "\0" "1 \xD0" "\xB1" "\xD0" "\xB5" "\xD1" "\x82" - "", + "\0" "5 \xD0" "\xB1" "\xD0" "\xB5" "\xD1" "\x82" - "", + "\0" "10 \xD0" "\xB1" "\xD0" "\xB5" "\xD1" "\x82" - "", + "\0" "15 \xD0" "\xB1" "\xD0" "\xB5" "\xD1" "\x82" - "", + "\0" "30 \xD0" "\xB1" "\xD0" "\xB5" "\xD1" "\x82" - "", + "\0" "\xD0" "\x96" "\xD0" @@ -37224,7 +39602,7 @@ const char* const STRINGS_KK[] = { "\x82" "\xD1" "\x83" - "", + "\0" "\xD0" "\x96" "\xD0" @@ -37261,7 +39639,7 @@ const char* const STRINGS_KK[] = { "\xB4" "\xD0" "\xB5" - "...", + "...\0" "\xD0" "\x96" "\xD0" @@ -37290,7 +39668,7 @@ const char* const STRINGS_KK[] = { "\xB0" "\xD1" "\x80" - "!", + "!\0" "\xD0" "\x90" "\xD2" @@ -37317,7 +39695,7 @@ const char* const STRINGS_KK[] = { "\x9B" "\xD0" "\xB0" - ": ", + ": \0" "\xD0" "\x96" "\xD0" @@ -37336,7 +39714,7 @@ const char* const STRINGS_KK[] = { "\x9B" "\xD0" "\xB0" - ": ", + ": \0" "\xD0" "\x96" "\xD0" @@ -37359,7 +39737,7 @@ const char* const STRINGS_KK[] = { "\xB4" "\xD0" "\xB0" - "...", + "...\0" "\xD0" "\x96" "\xD0" @@ -37380,7 +39758,7 @@ const char* const STRINGS_KK[] = { "\xBE" "\xD2" "\x9B" - "", + "\0" "\xD0" "\x96" "\xD0" @@ -37407,7 +39785,7 @@ const char* const STRINGS_KK[] = { "\x96" "\xD0" "\xB7" - "", + "\0" "\xD0" "\x96" "\xD0" @@ -37438,7 +39816,7 @@ const char* const STRINGS_KK[] = { "\xB4" "\xD1" "\x8B" - "", + "\0" "\xD2" "\x9A" "\xD0" @@ -37513,7 +39891,7 @@ const char* const STRINGS_KK[] = { "\x8B" "\xD0" "\xB7" - "", + "\0" "\xD0" "\x96" "\xD0" @@ -37548,7 +39926,7 @@ const char* const STRINGS_KK[] = { "\xB4" "\xD1" "\x8B" - "", + "\0" "\xD0" "\x96" "\xD2" @@ -37575,7 +39953,7 @@ const char* const STRINGS_KK[] = { "\xB4" "\xD0" "\xB0" - "...", + "...\0" "\xD0" "\x96" "\xD2" @@ -37606,7 +39984,7 @@ const char* const STRINGS_KK[] = { "\x96" "\xD0" "\xB7" - "", + "\0" "\xD2" "\x9A" "\xD0" @@ -37615,7 +39993,7 @@ const char* const STRINGS_KK[] = { "\x82" "\xD0" "\xB5" - ":", + ":\0" "\xD0" "\x90" "\xD1" @@ -37630,7 +40008,7 @@ const char* const STRINGS_KK[] = { "\x8B" "\xD0" "\xB7" - "", + "\0" "\xD0" "\xA1" "\xD0" @@ -37683,7 +40061,7 @@ const char* const STRINGS_KK[] = { "\xB0" "\xD0" "\xBD" - "", + "\0" "\xD0" "\x90" "\xD2" @@ -37714,7 +40092,7 @@ const char* const STRINGS_KK[] = { "\x96" "\xD0" "\xB7" - "", + "\0" "\xD0" "\x90" "\xD2" @@ -37751,7 +40129,7 @@ const char* const STRINGS_KK[] = { "\x96" "\xD0" "\xB7" - "", + "\0" "\xD0" "\x96" "\xD0" @@ -37760,7 +40138,7 @@ const char* const STRINGS_KK[] = { "\xBB" "\xD1" "\x96" - ": ", + ": \0" "IP \xD0" "\xBC" "\xD0" @@ -37779,7 +40157,7 @@ const char* const STRINGS_KK[] = { "\xB9" "\xD1" "\x8B" - ": ", + ": \0" "\xD2" "\x9A" "\xD0" @@ -37816,7 +40194,7 @@ const char* const STRINGS_KK[] = { "\x96" "\xD0" "\xBA" - "", + "\0" "\xD2" "\x9A" "\xD0" @@ -37851,7 +40229,7 @@ const char* const STRINGS_KK[] = { "\xB4" "\xD1" "\x8B" - "", + "\0" "\xD2" "\x9A" "\xD0" @@ -37892,7 +40270,7 @@ const char* const STRINGS_KK[] = { "\x82" "\xD1" "\x96" - "", + "\0" "SD \xD0" "\xBA" "\xD0" @@ -37903,7 +40281,7 @@ const char* const STRINGS_KK[] = { "\x82" "\xD0" "\xB0" - "", + "\0" "\xC2" "\xAB" " \xD0" @@ -37916,7 +40294,7 @@ const char* const STRINGS_KK[] = { "\x9B" "\xD0" "\xB0" - "", + "\0" "\xC2" "\xAB" " \xD0" @@ -37927,7 +40305,7 @@ const char* const STRINGS_KK[] = { "\x93" "\xD1" "\x83" - "", + "\0" "\xC2" "\xAB" " \xD0" @@ -37940,7 +40318,7 @@ const char* const STRINGS_KK[] = { "\x82" "\xD1" "\x8B" - "", + "\0" "\xD0" "\xA2" "\xD0" @@ -37953,7 +40331,7 @@ const char* const STRINGS_KK[] = { "\xB0" "\xD1" "\x83" - "", + "\0" "\xD0" "\xA2" "\xD0" @@ -37970,7 +40348,7 @@ const char* const STRINGS_KK[] = { "\xB4" "\xD1" "\x8B" - "", + "\0" "\xD0" "\x90" "\xD1" @@ -37987,7 +40365,7 @@ const char* const STRINGS_KK[] = { "\x80" "\xD1" "\x83" - "", + "\0" "\xD0" "\xA0" "\xD0" @@ -38000,7 +40378,7 @@ const char* const STRINGS_KK[] = { "\xB0" "\xD1" "\x83" - "", + "\0" "\xD0" "\x91" "\xD0" @@ -38019,7 +40397,7 @@ const char* const STRINGS_KK[] = { "\xB0" "\xD1" "\x83" - "", + "\0" "\xD2" "\x9A" "\xD0" @@ -38032,14 +40410,14 @@ const char* const STRINGS_KK[] = { "\xBB" "\xD1" "\x83" - "", + "\0" "\xD0" "\x90" "\xD1" "\x88" "\xD1" "\x83" - "", + "\0" "\xD0" "\x96" "\xD2" @@ -38058,7 +40436,7 @@ const char* const STRINGS_KK[] = { "\xBB" "\xD1" "\x83" - "", + "\0" "\xD2" "\x9A" "\xD0" @@ -38075,19 +40453,19 @@ const char* const STRINGS_KK[] = { "\xB0" "\xD1" "\x83" - "", + "\0" "\xD0" "\x98" "\xD3" "\x99" - "", + "\0" "\xD0" "\x96" "\xD0" "\xBE" "\xD2" "\x9B" - "", + "\0" "\xD0" "\x9A" "\xD3" @@ -38102,7 +40480,7 @@ const char* const STRINGS_KK[] = { "\x82" "\xD1" "\x83" - "", + "\0" "\xD0" "\x96" "\xD0" @@ -38115,7 +40493,7 @@ const char* const STRINGS_KK[] = { "\x80" "\xD1" "\x83" - "", + "\0" "\xD2" "\x9A" "\xD0" @@ -38128,7 +40506,7 @@ const char* const STRINGS_KK[] = { "\x9B" "\xD0" "\xAB" - "", + "\0" "\xD3" "\xA8" "\xD0" @@ -38143,7 +40521,7 @@ const char* const STRINGS_KK[] = { "\x9B" "\xD0" "\x86" - "", + "\0" "\xD0" "\x9E" "\xD1" @@ -38168,19 +40546,19 @@ const char* const STRINGS_KK[] = { "\xB0" "\xD0" "\xBD" - "", + "\0" "\xD0" "\xA1" "\xD0" "\xBE" "\xD0" "\xBB" - "", + "\0" "\xD0" "\x9E" "\xD2" "\xA3" - "", + "\0" "\xD0" "\x96" "\xD0" @@ -38193,7 +40571,7 @@ const char* const STRINGS_KK[] = { "\x80" "\xD1" "\x8B" - "", + "\0" "\xD0" "\xA2" "\xD3" @@ -38204,12 +40582,12 @@ const char* const STRINGS_KK[] = { "\xB5" "\xD0" "\xBD" - "", + "\0" "\xD0" "\x9E" "\xD0" "\x9A" - "", + "\0" "\xD2" "\xB0" "\xD0" @@ -38256,7 +40634,7 @@ const char* const STRINGS_KK[] = { "\x81" "\xD1" "\x96" - "", + "\0" "\xD0" "\x9A" "\xD0" @@ -38273,7 +40651,7 @@ const char* const STRINGS_KK[] = { "\x81" "\xD1" "\x82" - "", + "\0" "\xD0" "\x9A" "\xD2" @@ -38306,7 +40684,7 @@ const char* const STRINGS_KK[] = { "\xB0" "\xD1" "\x83" - "", + "\0" "\xD0" "\xA2" "\xD0" @@ -38337,7 +40715,7 @@ const char* const STRINGS_KK[] = { "\xBD" "\xD1" "\x8B" - "", + "\0" "\xD0" "\x9A" "\xD1" @@ -38376,7 +40754,7 @@ const char* const STRINGS_KK[] = { "\xB7" "\xD1" "\x8B" - "", + "\0" "\xD2" "\xAE" "\xD0" @@ -38403,7 +40781,7 @@ const char* const STRINGS_KK[] = { "\x93" "\xD1" "\x8B" - "", + "\0" "\xD2" "\xAE" "\xD0" @@ -38454,7 +40832,7 @@ const char* const STRINGS_KK[] = { "\x93" "\xD1" "\x8B" - "", + "\0" "\xD0" "\x96" "\xD1" @@ -38469,7 +40847,7 @@ const char* const STRINGS_KK[] = { "\xBA" "\xD0" "\xB5" - "", + "\0" "\xD0" "\x9E" "\xD1" @@ -38482,7 +40860,7 @@ const char* const STRINGS_KK[] = { "\x88" "\xD0" "\xB0" - "", + "\0" "\xD2" "\x9A" "\xD0" @@ -38493,7 +40871,7 @@ const char* const STRINGS_KK[] = { "\x8B" "\xD2" "\xA3" - "", + "\0" "\xD0" "\x9A" "\xD1" @@ -38504,7 +40882,7 @@ const char* const STRINGS_KK[] = { "\xB0" "\xD0" "\xBF" - "", + "\0" "\xD0" "\xA2" "\xD0" @@ -38515,7 +40893,7 @@ const char* const STRINGS_KK[] = { "\xB0" "\xD1" "\x83" - "", + "\0" "21-\xD1" "\x82" "\xD0" @@ -38526,7 +40904,7 @@ const char* const STRINGS_KK[] = { "\xB0" "\xD1" "\x83" - "", + "\0" "\xD0" "\x9A" "\xD1" @@ -38547,7 +40925,7 @@ const char* const STRINGS_KK[] = { "\x83" "\xD1" "\x8B" - "", + "\0" "\xD0" "\x90" "\xD0" @@ -38574,7 +40952,7 @@ const char* const STRINGS_KK[] = { "\xB0" "\xD1" "\x83" - "", + "\0" "\xD0" "\x90" "\xD1" @@ -38583,7 +40961,7 @@ const char* const STRINGS_KK[] = { "\xB0" "\xD1" "\x83" - "", + "\0" "\xD0" "\x91" "\xD0" @@ -38598,7 +40976,7 @@ const char* const STRINGS_KK[] = { "\xB5" "\xD1" "\x8F" - "", + "\0" "\xD0" "\x98" "\xD0" @@ -38633,7 +41011,7 @@ const char* const STRINGS_KK[] = { "\xB1" "\xD1" "\x8B" - "", + "\0" "\xD0" "\x9A" "\xD0" @@ -38656,8 +41034,8 @@ const char* const STRINGS_KK[] = { "\x8B" "\xD2" "\x9B" - "", - "Lyra", + "\0" + "Lyra\0" "Lyra \xD0" "\xBA" "\xD0" @@ -38680,7 +41058,7 @@ const char* const STRINGS_KK[] = { "\xB5" "\xD0" "\xBD" - "", + "\0" "\xD0" "\x9A" "\xD2" @@ -38727,7 +41105,7 @@ const char* const STRINGS_KK[] = { "\x82" "\xD1" "\x83" - "", + "\0" "\xD0" "\x90" "\xD0" @@ -38784,7 +41162,7 @@ const char* const STRINGS_KK[] = { "\xB0" "\xD1" "\x83" - "", + "\0" "OPDS \xD1" "\x88" "\xD0" @@ -38799,7 +41177,7 @@ const char* const STRINGS_KK[] = { "\x88" "\xD1" "\x8B" - "", + "\0" "\xD0" "\x9C" "\xD2" @@ -38834,7 +41212,9 @@ const char* const STRINGS_KK[] = { "\xB5" "\xD0" "\xBD" - "", + "\0" + "Page overlay\0" + "Recents\0" "\xD0" "\x96" "\xD1" @@ -38877,7 +41257,7 @@ const char* const STRINGS_KK[] = { "\xB0" "\xD1" "\x80" - "", + "\0" "\xD0" "\x96" "\xD1" @@ -38926,7 +41306,7 @@ const char* const STRINGS_KK[] = { "\xBE" "\xD2" "\x9B" - "", + "\0" "Calibre \xD1" "\x81" "\xD1" @@ -38981,7 +41361,7 @@ const char* const STRINGS_KK[] = { "\xBD" "\xD1" "\x83" - "", + "\0" "\xD0" "\x96" "\xD0" @@ -39070,7 +41450,7 @@ const char* const STRINGS_KK[] = { "\xBF" "\xD0" "\xB5" - "?", + "?\0" "\xD2" "\xB0" "\xD0" @@ -39081,7 +41461,7 @@ const char* const STRINGS_KK[] = { "\x82" "\xD1" "\x83" - "", + "\0" "Calibre \xD1" "\x96" "\xD1" @@ -39106,7 +41486,7 @@ const char* const STRINGS_KK[] = { "\xB4" "\xD0" "\xB0" - "...", + "...\0" "\xD0" "\x91" "\xD0" @@ -39119,14 +41499,14 @@ const char* const STRINGS_KK[] = { "\xB0" "\xD1" "\x83" - "", + "\0" "\xD0" "\x9A" "\xD2" "\xAF" "\xD0" "\xB9" - "", + "\0" "\xD0" "\xA2" "\xD0" @@ -39141,7 +41521,7 @@ const char* const STRINGS_KK[] = { "\xB0" "\xD1" "\x83" - "", + "\0" "\xD3" "\x98" "\xD0" @@ -39154,7 +41534,7 @@ const char* const STRINGS_KK[] = { "\xBA" "\xD1" "\x96" - "", + "\0" "\xD3" "\x98" "\xD1" @@ -39215,7 +41595,7 @@ const char* const STRINGS_KK[] = { "\x8B" "\xD0" "\xB7" - "", + "\0" "\xD0" "\xA2" "\xD0" @@ -39246,7 +41626,7 @@ const char* const STRINGS_KK[] = { "\xB0" "\xD0" "\xBD" - "", + "\0" "\xD2" "\x9A" "\xD0" @@ -39301,7 +41681,7 @@ const char* const STRINGS_KK[] = { "\xB0" "\xD0" "\xBD" - "", + "\0" "\xD0" "\x91" "\xD2" @@ -39400,7 +41780,7 @@ const char* const STRINGS_KK[] = { "\x80" "\xD1" "\x83" - "", + "\0" "\xD0" "\x91" "\xD2" @@ -39481,7 +41861,7 @@ const char* const STRINGS_KK[] = { "\xB0" "\xD1" "\x83" - "", + "\0" "\xD0" "\x90" "\xD1" @@ -39506,7 +41886,7 @@ const char* const STRINGS_KK[] = { "\xBC" "\xD0" "\xB5" - ")", + ")\0" "\xD0" "\xA0" "\xD0" @@ -39533,7 +41913,7 @@ const char* const STRINGS_KK[] = { "\xBC" "\xD0" "\xB5" - ")", + ")\0" "\xD0" "\xA1" "\xD0" @@ -39554,7 +41934,7 @@ const char* const STRINGS_KK[] = { "\xBC" "\xD0" "\xB5" - ")", + ")\0" "\xD0" "\x9E" "\xD2" @@ -39573,7 +41953,7 @@ const char* const STRINGS_KK[] = { "\xBC" "\xD0" "\xB5" - ")", + ")\0" "%-\xD0" "\xBA" "\xD0" @@ -39584,7 +41964,7 @@ const char* const STRINGS_KK[] = { "\x82" "\xD1" "\x83" - "", + "\0" "\xD0" "\x91" "\xD0" @@ -39611,7 +41991,7 @@ const char* const STRINGS_KK[] = { "\x82" "\xD1" "\x83" - "", + "\0" "\xD2" "\xAE" "\xD0" @@ -39650,7 +42030,7 @@ const char* const STRINGS_KK[] = { "\xB0" "\xD1" "\x83" - "", + "\0" "\xD0" "\x9A" "\xD1" @@ -39677,14 +42057,15 @@ const char* const STRINGS_KK[] = { "\xBE" "\xD1" "\x8E" - "", + "\0" "\xD0" "\x96" "\xD0" "\xBE" "\xD1" "\x8E" - "", + "\0" + "Remove\0" "\xD0" "\x91" "\xD0" @@ -39723,7 +42104,7 @@ const char* const STRINGS_KK[] = { "\x82" "\xD1" "\x83" - "", + "\0" "\xD0" "\xA2" "\xD0" @@ -39734,14 +42115,14 @@ const char* const STRINGS_KK[] = { "\xB0" "\xD1" "\x83" - ": ", + ": \0" " \xD0" "\xB1" "\xD0" "\xB5" "\xD1" "\x82" - " | ", + " | \0" "\xD0" "\x9A" "\xD1" @@ -39752,7 +42133,7 @@ const char* const STRINGS_KK[] = { "\xB0" "\xD0" "\xBF" - ": ", + ": \0" "Calibre \xD2" "\xAF" "\xD1" @@ -39779,7 +42160,7 @@ const char* const STRINGS_KK[] = { "\x8B" "\xD0" "\xB7" - "", + "\0" "\xD0" "\xA1" "\xD0" @@ -39812,7 +42193,7 @@ const char* const STRINGS_KK[] = { "\xB5" "\xD0" "\xBD" - ": 10%", + ": 10%\0" "\xD0" "\xA3" "\xD0" @@ -39849,7 +42230,7 @@ const char* const STRINGS_KK[] = { "\xB4" "\xD0" "\xB0" - "...", + "...\0" "\xD2" "\x9A" "\xD2" @@ -39888,7 +42269,7 @@ const char* const STRINGS_KK[] = { "\xB4" "\xD0" "\xB5" - "...", + "...\0" "\xD2" "\x9A" "\xD2" @@ -39935,7 +42316,7 @@ const char* const STRINGS_KK[] = { "\x96" "\xD0" "\xB7" - "", + "\0" "\xD2" "\x9A" "\xD0" @@ -39982,7 +42363,9 @@ const char* const STRINGS_KK[] = { "\xB4" "\xD0" "\xB0" - "...", + "...\0" + "Mapping remote position...\0" + "Calculating local position...\0" "\xD2" "\xAE" "\xD0" @@ -40025,7 +42408,7 @@ const char* const STRINGS_KK[] = { "\xB4" "\xD0" "\xB0" - "...", + "...\0" "\xD0" "\xA2" "\xD1" @@ -40100,7 +42483,7 @@ const char* const STRINGS_KK[] = { "\xB0" "\xD0" "\xBD" - "", + "\0" "\xD0" "\x9F" "\xD0" @@ -40165,7 +42548,7 @@ const char* const STRINGS_KK[] = { "\x8B" "\xD0" "\xB7" - "", + "\0" "\xD2" "\xAE" "\xD0" @@ -40194,7 +42577,7 @@ const char* const STRINGS_KK[] = { "\xB4" "\xD1" "\x8B" - "!", + "!\0" "\xD2" "\x9A" "\xD0" @@ -40213,7 +42596,7 @@ const char* const STRINGS_KK[] = { "\x93" "\xD1" "\x8B" - ":", + ":\0" "\xD0" "\x96" "\xD0" @@ -40234,7 +42617,7 @@ const char* const STRINGS_KK[] = { "\x82" "\xD1" "\x96" - ":", + ":\0" "%d-\xD0" "\xB1" "\xD0" @@ -40251,7 +42634,7 @@ const char* const STRINGS_KK[] = { "\xBF" "\xD1" "\x8B" - " %.2f%%", + " %.2f%%\0" "%d/%d-\xD0" "\xB1" "\xD0" @@ -40268,7 +42651,7 @@ const char* const STRINGS_KK[] = { "\xBF" "\xD1" "\x8B" - " %.2f%%", + " %.2f%%\0" " \xD0" "\x91" "\xD0" @@ -40281,7 +42664,7 @@ const char* const STRINGS_KK[] = { "\xB0" "\xD0" "\xBF" - ": %s", + ": %s\0" "\xD2" "\x9A" "\xD0" @@ -40332,7 +42715,7 @@ const char* const STRINGS_KK[] = { "\xBD" "\xD1" "\x83" - "", + "\0" "\xD0" "\x96" "\xD0" @@ -40391,7 +42774,7 @@ const char* const STRINGS_KK[] = { "\xBB" "\xD1" "\x83" - "", + "\0" "\xD2" "\x9A" "\xD0" @@ -40442,7 +42825,7 @@ const char* const STRINGS_KK[] = { "\xB4" "\xD1" "\x8B" - "", + "\0" "\xD0" "\x90" "\xD2" @@ -40505,7 +42888,7 @@ const char* const STRINGS_KK[] = { "\xBF" "\xD0" "\xB5" - "?", + "?\0" "\xD2" "\xAE" "\xD0" @@ -40546,7 +42929,7 @@ const char* const STRINGS_KK[] = { "\xB4" "\xD1" "\x8B" - "!", + "!\0" "\xD0" "\xA1" "\xD0" @@ -40579,7 +42962,7 @@ const char* const STRINGS_KK[] = { "\x96" "\xD0" "\xB7" - "", + "\0" "\xD0" "\x91" "\xD3" @@ -40590,7 +42973,7 @@ const char* const STRINGS_KK[] = { "\x96" "\xD0" "\xBC" - " ", + " \0" "\xD0" "\x96" "\xD2" @@ -40611,7 +42994,7 @@ const char* const STRINGS_KK[] = { "\xBB" "\xD1" "\x83" - "", + "\0" "\xD0" "\x9A" "\xD1" @@ -40632,7 +43015,7 @@ const char* const STRINGS_KK[] = { "\xBB" "\xD1" "\x96" - "", + "\0" "\xD0" "\x9A" "\xD1" @@ -40669,7 +43052,7 @@ const char* const STRINGS_KK[] = { "\xBB" "\xD1" "\x8C" - "", + "\0" "OPDS \xD1" "\x81" "\xD0" @@ -40684,7 +43067,7 @@ const char* const STRINGS_KK[] = { "\x80" "\xD1" "\x96" - " URL", + " URL\0" "\xD0" "\xA2" "\xD2" @@ -40721,7 +43104,7 @@ const char* const STRINGS_KK[] = { "\xB0" "\xD1" "\x80" - "", + "\0" "\xD0" "\x91" "\xD2" @@ -40780,7 +43163,7 @@ const char* const STRINGS_KK[] = { "\xBE" "\xD2" "\x9B" - "", + "\0" "[\xD1" "\x81" "\xD1" @@ -40795,7 +43178,7 @@ const char* const STRINGS_KK[] = { "\xBC" "\xD0" "\xB5" - "]", + "]\0" "\xD0" "\xA1" "\xD0" @@ -40824,7 +43207,7 @@ const char* const STRINGS_KK[] = { "\x80" "\xD1" "\x83" - "", + "\0" "\xD0" "\x90" "\xD0" @@ -40873,7 +43256,7 @@ const char* const STRINGS_KK[] = { "\xBB" "\xD1" "\x8B" - ": ", + ": \0" "\xD0" "\x90" "\xD0" @@ -40940,74 +43323,857 @@ const char* const STRINGS_KK[] = { "\xBD" "\xD1" "\x8B" - ")", - "Sleep Screen Info Overlay", - "White", - "Gray", - "Black", - "Off", - "Reading progress: Page %lu/%u - %.0f%%", - "Reading progress: Page %lu", - " - Page %d/%d - %.0f%% read", + ")\0" + "Info\0" + "Author\0" + "Series\0" + "Size\0" + "Sleep Screen Info Overlay\0" + "White\0" + "Gray\0" + "Black\0" + "Off\0" + "Reading progress: Page %lu/%u - %.0f%%\0" + "Reading progress: Page %lu\0" + " - Page %d/%d - %.0f%% read\0" + "System Information\0" + "Failed to load XTC file\0" + "Failed to load EPUB file\0" + "FW version\0" + "Chip\0" + "CPU\0" + "MHz\0" + "Free RAM\0" + "Min free\0" + "Max block\0" + "Flash used\0" + "Uptime\0" + "Charging\0" + "Gathering data...\0" + "Reading...\0" +; +// clang-format on + +const uint16_t OFFSETS_KK[] = { + 0, 11, 30, 52, 85, 100, 122, 141, 173, 200, 243, 277, + 309, 333, 361, 379, 404, 424, 461, 477, 497, 519, 538, 560, + 594, 622, 640, 660, 676, 702, 727, 803, 852, 878, 904, 946, + 1016, 1060, 1088, 1157, 1221, 1242, 1314, 1335, 1351, 1401, 1425, 1456, + 1502, 1506, 1531, 1554, 1611, 1660, 1711, 1787, 1802, 1817, 1832, 1841, + 1863, 1911, 1941, 1982, 2014, 2031, 2046, 2070, 2083, 2115, 2161, 2183, + 2253, 2308, 2343, 2386, 2423, 2460, 2505, 2523, 2545, 2563, 2573, 2588, + 2623, 2629, 2642, 2651, 2655, 2659, 2673, 2699, 2725, 2746, 2767, 2789, + 2810, 2840, 2864, 2877, 2899, 2912, 2929, 2945, 2967, 2987, 2997, 3013, + 3030, 3052, 3064, 3081, 3091, 3105, 3123, 3146, 3158, 3172, 3185, 3215, + 3255, 3295, 3302, 3335, 3365, 3383, 3423, 3461, 3490, 3529, 3558, 3574, + 3591, 3663, 3696, 3749, 3790, 3832, 3906, 3948, 3957, 3972, 4002, 4022, + 4045, 4056, 4139, 4194, 4269, 4302, 4333, 4359, 4389, 4402, 4441, 4529, + 4544, 4553, 4576, 4589, 4608, 4623, 4632, 4647, 4666, 4681, 4694, 4703, + 4723, 4743, 4792, 4815, 4869, 4897, 4925, 4934, 4944, 4958, 4977, 4990, + 5001, 5019, 5026, 5041, 5048, 5065, 5076, 5089, 5098, 5107, 5116, 5126, + 5136, 5146, 5155, 5164, 5174, 5184, 5194, 5209, 5250, 5282, 5312, 5334, + 5360, 5382, 5410, 5442, 5523, 5559, 5590, 5623, 5633, 5648, 5706, 5739, + 5778, 5789, 5813, 5853, 5891, 5936, 5950, 5964, 5976, 5990, 6003, 6020, + 6037, 6050, 6069, 6082, 6089, 6109, 6126, 6131, 6138, 6153, 6166, 6179, + 6194, 6219, 6226, 6231, 6244, 6255, 6260, 6310, 6327, 6362, 6395, 6436, + 6464, 6517, 6532, 6545, 6556, 6567, 6578, 6592, 6614, 6643, 6652, 6667, + 6703, 6726, 6731, 6759, 6809, 6869, 6889, 6927, 6940, 6948, 6993, 7045, + 7110, 7208, 7219, 7256, 7269, 7276, 7291, 7304, 7370, 7401, 7458, 7564, + 7651, 7682, 7715, 7742, 7767, 7781, 7810, 7850, 7879, 7886, 7893, 7937, + 7950, 7963, 7976, 8023, 8069, 8110, 8154, 8204, 8256, 8283, 8313, 8361, + 8438, 8514, 8545, 8565, 8587, 8616, 8648, 8667, 8720, 8782, 8835, 8904, + 8948, 8982, 8994, 9016, 9038, 9076, 9100, 9138, 9201, 9218, 9248, 9302, + 9376, 9381, 9388, 9395, 9400, 9426, 9432, 9437, 9443, 9447, 9486, 9513, + 9541, 9560, 9584, 9609, 9620, 9625, 9629, 9633, 9642, 9651, 9661, 9672, + 9679, 9688, 9706, +}; + +// clang-format off +const char STRINGS_PT_DATA[] = + "CrossPoint\0" + "INICIANDO\0" + "EM REPOUSO\0" + "A entrar em repouso\0" + "Ficheiros\0" + "Transfer\xC3" + "\xAA" + "ncia de ficheiros\0" + "Defini\xC3" + "\xA7" + "\xC3" + "\xB5" + "es\0" + "Continuar a ler\0" + "Nenhum livro aberto\0" + "Comece a ler abaixo\0" + "Nenhum ficheiro encontrado\0" + "Escolher cap\xC3" + "\xAD" + "tulo\0" + "Sem cap\xC3" + "\xAD" + "tulos\0" + "Fim do livro\0" + "Cap\xC3" + "\xAD" + "tulo vazio\0" + "A indexar\0" + "Erro de mem\xC3" + "\xB3" + "ria\0" + "Erro ao carregar a p\xC3" + "\xA1" + "gina\0" + "Ficheiro vazio\0" + "Fora dos limites\0" + "A carregar...\0" + "A carregar\0" + "Redes Wi\xE2" + "\x80" + "\x91" + "Fi\0" + "Sem redes\0" + "%zu redes encontradas\0" + "A procurar...\0" + "A ligar...\0" + "Ligado!\0" + "Falha na liga\xC3" + "\xA7" + "\xC3" + "\xA3" + "o\0" + "Esquecer a rede?\0" + "Guardar palavra-passe para a pr\xC3" + "\xB3" + "xima vez?\0" + "Prima OK para procurar novamente\0" + "Ligar a uma rede\0" + "Criar hotspot\0" + "Ligue-se a uma rede Wi\xE2" + "\x80" + "\x91" + "Fi existente\0" + "Crie uma rede Wi\xE2" + "\x80" + "\x91" + "Fi \xC3" + "\xA0" + " qual outras pessoas se possam ligar\0" + "A iniciar hotspot...\0" + "Modo hotspot\0" + "Ligue o seu dispositivo a esta rede Wi\xE2" + "\x80" + "\x91" + "Fi\0" + "Abra este URL no seu navegador\0" + "ou http://\0" + "ou leia o c\xC3" + "\xB3" + "digo QR com o seu telem\xC3" + "\xB3" + "vel:\0" + "Calibre sem fios\0" + "URL do Calibre Web\0" + "* = Encriptada | + = Guardada\0" + "Endere\xC3" + "\xA7" + "o MAC:\0" + "A verificar Wi\xE2" + "\x80" + "\x91" + "Fi...\0" + "Introduza a palavra-passe do Wi\xE2" + "\x80" + "\x91" + "Fi\0" + "para\0" + "A receber:\0" + "Recebido:\0" + "1) Instale o plugin CrossPoint Reader\0" + "2) Esteja na mesma rede Wi\xE2" + "\x80" + "\x91" + "Fi\0" + "3) No Calibre: \"Enviar para o dispositivo\"\0" + "\"Mantenha este ecr\xC3" + "\xA3" + " aberto durante o envio\"\0" + "Ecr\xC3" + "\xA3" + "\0" + "Leitor\0" + "Controlos\0" + "Sistema\0" + "Ecr\xC3" + "\xA3" + " de repouso\0" + "Modo de capa do ecr\xC3" + "\xA3" + " de repouso\0" + "Ocultar % da bateria\0" + "Espa\xC3" + "\xA7" + "o extra entre par\xC3" + "\xA1" + "grafos\0" + "Suaviza\xC3" + "\xA7" + "\xC3" + "\xA3" + "o do texto\0" + "Images\0" + "Display\0" + "Placeholder\0" + "Suppress\0" + "Create fallback for invalid TOC\0" + "Press\xC3" + "\xA3" + "o curta do bot\xC3" + "\xA3" + "o de energia\0" + "Orienta\xC3" + "\xA7" + "\xC3" + "\xA3" + "o de leitura\0" + "Disposi\xC3" + "\xA7" + "\xC3" + "\xA3" + "o dos bot\xC3" + "\xB5" + "es laterais\0" + "Saltar cap\xC3" + "\xAD" + "tulo com press\xC3" + "\xA3" + "o longa\0" + "Tipo de letra do leitor\0" + "Tamanho da letra do leitor\0" + "Espa\xC3" + "\xA7" + "amento entre linhas\0" + "Margens do ecr\xC3" + "\xA3" + "\0" + "Alinhamento do par\xC3" + "\xA1" + "grafo\0" + "Hifeniza\xC3" + "\xA7" + "\xC3" + "\xA3" + "o\0" + "Tempo at\xC3" + "\xA9" + " entrar em repouso\0" + "Show Hidden Files\0" + "Use Clock\0" + "Clock Settings\0" + "Uses more battery; clock may drift\0" + "Clock\0" + "Clock Format\0" + "Timezone\0" + "24h\0" + "12h\0" + "UTC (GMT/BST)\0" + "Central Europe (CET/CEST)\0" + "Eastern Europe (EET/EEST)\0" + "US Eastern (EST/EDT)\0" + "US Central (CST/CDT)\0" + "US Mountain (MST/MDT)\0" + "US Pacific (PST/PDT)\0" + "Australia Eastern (AEST/AEDT)\0" + "New Zealand (NZST/NZDT)\0" + "Russia (MSK)\0" + "South America (UTC-3)\0" + "Gulf (UTC+4)\0" + "India (UTC+5:30)\0" + "SE Asia (UTC+7)\0" + "China/SE Asia (UTC+8)\0" + "Japan/Korea (UTC+9)\0" + "Sync Time\0" + "Detect Timezone\0" + "Syncing clock...\0" + "Detecting timezone...\0" + "Time synced\0" + "Time sync failed\0" + "Drift: %s\0" + "Last sync: %s\0" + "Timezone detected\0" + "Timezone detect failed\0" + "DST: active\0" + "DST: inactive\0" + "DST: unknown\0" + "Frequ\xC3" + "\xAA" + "ncia de atualiza\xC3" + "\xA7" + "\xC3" + "\xA3" + "o\0" + "Sincroniza\xC3" + "\xA7" + "\xC3" + "\xA3" + "o KOReader\0" + "Procurar atualiza\xC3" + "\xA7" + "\xC3" + "\xB5" + "es\0" + "Idioma\0" + "Limpar cache de leitura\0" + "Nome de utilizador\0" + "Palavra-passe\0" + "URL do servidor de sincroniza\xC3" + "\xA7" + "\xC3" + "\xA3" + "o\0" + "Correspond\xC3" + "\xAA" + "ncia de documentos\0" + "Autenticar\0" + "Utilizador do KOReader\0" + "Palavra-passe do KOReader\0" + "Nome do ficheiro\0" + "Bin\xC3" + "\xA1" + "rio\0" + "Defina primeiro as credenciais\0" + "Falha na liga\xC3" + "\xA7" + "\xC3" + "\xA3" + "o Wi\xE2" + "\x80" + "\x91" + "Fi\0" + "A autenticar...\0" + "Autentica\xC3" + "\xA7" + "\xC3" + "\xA3" + "o bem-sucedida!\0" + "Autentica\xC3" + "\xA7" + "\xC3" + "\xA3" + "o do KOReader\0" + "A sincroniza\xC3" + "\xA7" + "\xC3" + "\xA3" + "o do KOReader est\xC3" + "\xA1" + " pronta a ser utilizada\0" + "Falha na autentica\xC3" + "\xA7" + "\xC3" + "\xA3" + "o\0" + "Register\0" + "Registering...\0" + "Account created successfully!\0" + "Registration failed\0" + "Username already taken\0" + "Conclu\xC3" + "\xAD" + "do\0" + "Isto ir\xC3" + "\xA1" + " limpar todos os dados de livros em cache.\0" + "Todo o progresso de leitura ser\xC3" + "\xA1" + " perdido!\0" + "Os livros ter\xC3" + "\xA3" + "o de ser reindexados\0" + "quando forem abertos novamente.\0" + "A limpar cache...\0" + "Cache limpa\0" + "itens removidos\0" + "falhou\0" + "Falha ao limpar a cache\0" + "Verifique a sa\xC3" + "\xAD" + "da s\xC3" + "\xA9" + "rie\0" + "Escuro\0" + "Claro\0" + "Personalizado\0" + "Capa\0" + "Nenhum\0" + "Ajustar\0" + "Recortar\0" + "Nunca\0" + "No leitor\0" + "Sempre\0" + "Ignorar\0" + "Repouso\0" + "Virar p\xC3" + "\xA1" + "gina\0" + "Retrato\0" + "Paisagem H\0" + "Invertido\0" + "Paisagem AH\0" + "Ant./Pr\xC3" + "\xB3" + "x.\0" + "Pr\xC3" + "\xB3" + "x./Ant.\0" + "Bookerly\0" + "Noto Sans\0" + "Open Dyslexic\0" + "Pequeno\0" + "M\xC3" + "\xA9" + "dio\0" + "Grande\0" + "Extra grande\0" + "Apertado\0" + "Normal\0" + "Largo\0" + "Justificar\0" + "Esquerda\0" + "Centro\0" + "Direita\0" + "1 min\0" + "5 min\0" + "10 min\0" + "15 min\0" + "30 min\0" + "1 p\xC3" + "\xA1" + "gina\0" + "5 p\xC3" + "\xA1" + "ginas\0" + "10 p\xC3" + "\xA1" + "ginas\0" + "15 p\xC3" + "\xA1" + "ginas\0" + "30 p\xC3" + "\xA1" + "ginas\0" + "Atualizar\0" + "A procurar atualiza\xC3" + "\xA7" + "\xC3" + "\xA3" + "o...\0" + "Nova atualiza\xC3" + "\xA7" + "\xC3" + "\xA3" + "o dispon\xC3" + "\xAD" + "vel!\0" + "Vers\xC3" + "\xA3" + "o atual:\0" + "Nova vers\xC3" + "\xA3" + "o:\0" + "A atualizar...\0" + "N\xC3" + "\xA3" + "o h\xC3" + "\xA1" + " atualiza\xC3" + "\xA7" + "\xC3" + "\xB5" + "es dispon\xC3" + "\xAD" + "veis\0" + "Falha na atualiza\xC3" + "\xA7" + "\xC3" + "\xA3" + "o\0" + "Atualiza\xC3" + "\xA7" + "\xC3" + "\xA3" + "o conclu\xC3" + "\xAD" + "da\0" + "Prima continuamente o bot\xC3" + "\xA3" + "o de energia para voltar a ligar\0" + "Nenhuma entrada encontrada\0" + "A transferir...\0" + "Falha na transfer\xC3" + "\xAA" + "ncia\0" + "Erro:\0" + "Sem nome\0" + "Nenhum URL de servidor configurado\0" + "Falha ao obter o feed\0" + "Falha ao analisar o feed\0" + "Rede:\0" + "Endere\xC3" + "\xA7" + "o IP:\0" + "Erro: falha geral\0" + "Erro: rede n\xC3" + "\xA3" + "o encontrada\0" + "Erro: tempo limite de liga\xC3" + "\xA7" + "\xC3" + "\xA3" + "o\0" + "Cart\xC3" + "\xA3" + "o SD\0" + "\xC2" + "\xAB" + " Voltar\0" + "\xC2" + "\xAB" + " Sair\0" + "\xC2" + "\xAB" + " In\xC3" + "\xAD" + "cio\0" + "Selecionar\0" + "Selected\0" + "Alternar\0" + "Confirmar\0" + "Cancelar\0" + "Ligar\0" + "Abrir\0" + "Transferir\0" + "Tentar de novo\0" + "Sim\0" + "N\xC3" + "\xA3" + "o\0" + "Show\0" + "Hide\0" + "LIG.\0" + "DESL.\0" + "N\xC3" + "\xA3" + "o definido\0" + "Esquerda\0" + "Direita\0" + "Cima\0" + "Baixo\0" + "OK\0" + "Filtro da capa do ecr\xC3" + "\xA3" + " de repouso\0" + "Contraste\0" + "Customise Status Bar\0" + "Chapter Page Count\0" + "Book Progress Percentage\0" + "Progress Bar\0" + "Progress Bar Thickness\0" + "Thin\0" + "Medium\0" + "Thick\0" + "Book\0" + "Chapter\0" + "Chapter 21\0" + "Book Title\0" + "Preview\0" + "Title\0" + "Battery\0" + "Tema da interface\0" + "Cl\xC3" + "\xA1" + "ssico\0" + "Lyra\0" + "Lyra Extended\0" + "Ajuste desbotamento ao sol\0" + "Reatribuir bot\xC3" + "\xB5" + "es frontais\0" + "Navegador OPDS\0" + "Capa + personalizado\0" + "Page overlay\0" + "Recents\0" + "Livros recentes\0" + "Sem livros recentes\0" + "Usar transfer\xC3" + "\xAA" + "ncias sem fios do Calibre\0" + "Esquecer a rede e remover a palavra-passe guardada?\0" + "Esquecer\0" + "A iniciar o Calibre...\0" + "Configura\xC3" + "\xA7" + "\xC3" + "\xA3" + "o\0" + "Estado\0" + "Limpar\0" + "Predefini\xC3" + "\xA7" + "\xC3" + "\xA3" + "o\0" + "Prima um bot\xC3" + "\xA3" + "o frontal para cada fun\xC3" + "\xA7" + "\xC3" + "\xA3" + "o\0" + "N\xC3" + "\xA3" + "o atribu\xC3" + "\xAD" + "do\0" + "J\xC3" + "\xA1" + " atribu\xC3" + "\xAD" + "do\0" + "Bot\xC3" + "\xA3" + "o lateral superior: repor a disposi\xC3" + "\xA7" + "\xC3" + "\xA3" + "o predefinida\0" + "Bot\xC3" + "\xA3" + "o lateral inferior: cancelar reatribui\xC3" + "\xA7" + "\xC3" + "\xA3" + "o\0" + "Voltar (1\xC2" + "\xBA" + " bot\xC3" + "\xA3" + "o)\0" + "Confirmar (2\xC2" + "\xBA" + " bot\xC3" + "\xA3" + "o)\0" + "Esquerda (3\xC2" + "\xBA" + " bot\xC3" + "\xA3" + "o)\0" + "Direita (4\xC2" + "\xBA" + " bot\xC3" + "\xA3" + "o)\0" + "Ir para %\0" + "Ir para o in\xC3" + "\xAD" + "cio\0" + "Sincronizar progresso\0" + "Eliminar cache do livro\0" + "Eliminar\0" + "Remove\0" + "Show page as QR\0" + "Cap\xC3" + "\xAD" + "tulo:\0" + "p\xC3" + "\xA1" + "ginas |\0" + "Livro:\0" + "No Calibre, adicione /opds ao seu URL\0" + "Esq/Dir: 1% Cima/Baixo: 10%\0" + "A sincronizar hora...\0" + "A calcular hash do documento...\0" + "Falha ao calcular o hash do documento\0" + "A obter progresso remoto...\0" + "Mapping remote position...\0" + "Calculating local position...\0" + "A enviar progresso...\0" + "N\xC3" + "\xA3" + "o h\xC3" + "\xA1" + " credenciais configuradas\0" + "Configure a conta do KOReader nas Defini\xC3" + "\xA7" + "\xC3" + "\xB5" + "es\0" + "Progresso encontrado!\0" + "Remoto:\0" + "Local:\0" + "P\xC3" + "\xA1" + "gina %d, %.2f%% do total\0" + "P\xC3" + "\xA1" + "gina %d/%d, %.2f%% do total\0" + "De: %s\0" + "Aplicar progresso remoto\0" + "Enviar progresso local\0" + "Nenhum progresso remoto encontrado\0" + "Enviar posi\xC3" + "\xA7" + "\xC3" + "\xA3" + "o atual?\0" + "Progresso enviado!\0" + "Falha na sincroniza\xC3" + "\xA7" + "\xC3" + "\xA3" + "o\0" + "Sec\xC3" + "\xA7" + "\xC3" + "\xA3" + "o\0" + "Enviar\0" + "Estilo do livro\0" + "Estilo incorporado\0" + "URL do servidor OPDS\0" + "Footnotes\0" + "No footnotes on this page\0" + "[link]\0" + "Capturar ecr\xC3" + "\xA3" + "\0" + "Auto Turn Enabled: \0" + "Auto Turn (Pages Per Minute)\0" + "Info\0" + "Author\0" + "Series\0" + "Size\0" + "Sleep Screen Info Overlay\0" + "White\0" + "Gray\0" + "Black\0" + "Off\0" + "Reading progress: Page %lu/%u - %.0f%%\0" + "Reading progress: Page %lu\0" + " - Page %d/%d - %.0f%% read\0" + "System Information\0" + "Failed to load XTC file\0" + "Failed to load EPUB file\0" + "FW version\0" + "Chip\0" + "CPU\0" + "MHz\0" + "Free RAM\0" + "Min free\0" + "Max block\0" + "Flash used\0" + "Uptime\0" + "Charging\0" + "Gathering data...\0" + "Reading...\0" +; +// clang-format on + +const uint16_t OFFSETS_PT[] = { + 0, 11, 21, 32, 52, 62, 90, 103, 119, 139, 159, 186, + 205, 220, 233, 249, 259, 276, 303, 318, 335, 349, 360, 374, + 384, 406, 420, 431, 439, 458, 475, 518, 551, 568, 582, 620, + 681, 702, 715, 759, 790, 801, 844, 861, 880, 910, 925, 948, + 985, 990, 1001, 1011, 1049, 1081, 1124, 1169, 1175, 1182, 1192, 1200, + 1217, 1250, 1271, 1303, 1325, 1332, 1340, 1352, 1361, 1393, 1429, 1453, + 1487, 1523, 1547, 1574, 1600, 1617, 1643, 1657, 1686, 1704, 1714, 1729, + 1764, 1770, 1783, 1792, 1796, 1800, 1814, 1840, 1866, 1887, 1908, 1930, + 1951, 1981, 2005, 2018, 2040, 2053, 2070, 2086, 2108, 2128, 2138, 2154, + 2171, 2193, 2205, 2222, 2232, 2246, 2264, 2287, 2299, 2313, 2326, 2355, + 2380, 2404, 2411, 2435, 2454, 2468, 2503, 2534, 2545, 2568, 2594, 2611, + 2620, 2651, 2678, 2694, 2723, 2750, 2809, 2833, 2842, 2857, 2887, 2907, + 2930, 2941, 2993, 3036, 3072, 3104, 3122, 3134, 3150, 3157, 3181, 3207, + 3214, 3220, 3234, 3239, 3246, 3254, 3263, 3269, 3279, 3286, 3294, 3302, + 3316, 3324, 3335, 3345, 3357, 3369, 3381, 3390, 3400, 3414, 3422, 3429, + 3436, 3449, 3458, 3465, 3471, 3482, 3491, 3498, 3506, 3512, 3518, 3525, + 3532, 3539, 3549, 3560, 3572, 3584, 3596, 3606, 3634, 3666, 3681, 3695, + 3710, 3747, 3770, 3795, 3855, 3882, 3898, 3922, 3928, 3937, 3972, 3994, + 4019, 4025, 4039, 4057, 4084, 4116, 4127, 4137, 4145, 4156, 4167, 4176, + 4185, 4195, 4204, 4210, 4216, 4227, 4242, 4246, 4251, 4256, 4261, 4266, + 4272, 4286, 4295, 4303, 4308, 4314, 4317, 4352, 4362, 4383, 4402, 4427, + 4440, 4463, 4468, 4475, 4481, 4486, 4494, 4505, 4516, 4524, 4530, 4538, + 4556, 4566, 4571, 4585, 4612, 4640, 4655, 4676, 4689, 4697, 4713, 4733, + 4774, 4826, 4835, 4858, 4873, 4880, 4887, 4902, 4945, 4961, 4976, 5034, + 5083, 5103, 5126, 5148, 5169, 5179, 5197, 5219, 5243, 5252, 5259, 5275, + 5286, 5298, 5305, 5343, 5372, 5394, 5426, 5464, 5492, 5519, 5549, 5571, + 5605, 5652, 5674, 5682, 5689, 5717, 5748, 5755, 5780, 5803, 5838, 5862, + 5881, 5906, 5915, 5922, 5938, 5957, 5978, 5988, 6014, 6021, 6036, 6056, + 6085, 6090, 6097, 6104, 6109, 6135, 6141, 6146, 6152, 6156, 6195, 6222, + 6250, 6269, 6293, 6318, 6329, 6334, 6338, 6342, 6351, 6360, 6370, 6381, + 6388, 6397, 6415, }; } // namespace i18n_strings // Compile-time validation of array sizes -static_assert(sizeof(i18n_strings::STRINGS_EN) / sizeof(i18n_strings::STRINGS_EN[0]) == +static_assert(sizeof(i18n_strings::OFFSETS_EN) / sizeof(i18n_strings::OFFSETS_EN[0]) == static_cast(StrId::_COUNT), - "STRINGS_EN size mismatch"); -static_assert(sizeof(i18n_strings::STRINGS_ES) / sizeof(i18n_strings::STRINGS_ES[0]) == + "OFFSETS_EN size mismatch"); +static_assert(sizeof(i18n_strings::OFFSETS_ES) / sizeof(i18n_strings::OFFSETS_ES[0]) == static_cast(StrId::_COUNT), - "STRINGS_ES size mismatch"); -static_assert(sizeof(i18n_strings::STRINGS_FR) / sizeof(i18n_strings::STRINGS_FR[0]) == + "OFFSETS_ES size mismatch"); +static_assert(sizeof(i18n_strings::OFFSETS_FR) / sizeof(i18n_strings::OFFSETS_FR[0]) == static_cast(StrId::_COUNT), - "STRINGS_FR size mismatch"); -static_assert(sizeof(i18n_strings::STRINGS_DE) / sizeof(i18n_strings::STRINGS_DE[0]) == + "OFFSETS_FR size mismatch"); +static_assert(sizeof(i18n_strings::OFFSETS_DE) / sizeof(i18n_strings::OFFSETS_DE[0]) == static_cast(StrId::_COUNT), - "STRINGS_DE size mismatch"); -static_assert(sizeof(i18n_strings::STRINGS_CS) / sizeof(i18n_strings::STRINGS_CS[0]) == + "OFFSETS_DE size mismatch"); +static_assert(sizeof(i18n_strings::OFFSETS_CS) / sizeof(i18n_strings::OFFSETS_CS[0]) == static_cast(StrId::_COUNT), - "STRINGS_CS size mismatch"); -static_assert(sizeof(i18n_strings::STRINGS_PO) / sizeof(i18n_strings::STRINGS_PO[0]) == + "OFFSETS_CS size mismatch"); +static_assert(sizeof(i18n_strings::OFFSETS_PO) / sizeof(i18n_strings::OFFSETS_PO[0]) == static_cast(StrId::_COUNT), - "STRINGS_PO size mismatch"); -static_assert(sizeof(i18n_strings::STRINGS_RU) / sizeof(i18n_strings::STRINGS_RU[0]) == + "OFFSETS_PO size mismatch"); +static_assert(sizeof(i18n_strings::OFFSETS_RU) / sizeof(i18n_strings::OFFSETS_RU[0]) == static_cast(StrId::_COUNT), - "STRINGS_RU size mismatch"); -static_assert(sizeof(i18n_strings::STRINGS_SV) / sizeof(i18n_strings::STRINGS_SV[0]) == + "OFFSETS_RU size mismatch"); +static_assert(sizeof(i18n_strings::OFFSETS_SV) / sizeof(i18n_strings::OFFSETS_SV[0]) == static_cast(StrId::_COUNT), - "STRINGS_SV size mismatch"); -static_assert(sizeof(i18n_strings::STRINGS_RO) / sizeof(i18n_strings::STRINGS_RO[0]) == + "OFFSETS_SV size mismatch"); +static_assert(sizeof(i18n_strings::OFFSETS_RO) / sizeof(i18n_strings::OFFSETS_RO[0]) == static_cast(StrId::_COUNT), - "STRINGS_RO size mismatch"); -static_assert(sizeof(i18n_strings::STRINGS_CA) / sizeof(i18n_strings::STRINGS_CA[0]) == + "OFFSETS_RO size mismatch"); +static_assert(sizeof(i18n_strings::OFFSETS_CA) / sizeof(i18n_strings::OFFSETS_CA[0]) == static_cast(StrId::_COUNT), - "STRINGS_CA size mismatch"); -static_assert(sizeof(i18n_strings::STRINGS_UK) / sizeof(i18n_strings::STRINGS_UK[0]) == + "OFFSETS_CA size mismatch"); +static_assert(sizeof(i18n_strings::OFFSETS_UK) / sizeof(i18n_strings::OFFSETS_UK[0]) == static_cast(StrId::_COUNT), - "STRINGS_UK size mismatch"); -static_assert(sizeof(i18n_strings::STRINGS_BE) / sizeof(i18n_strings::STRINGS_BE[0]) == + "OFFSETS_UK size mismatch"); +static_assert(sizeof(i18n_strings::OFFSETS_BE) / sizeof(i18n_strings::OFFSETS_BE[0]) == static_cast(StrId::_COUNT), - "STRINGS_BE size mismatch"); -static_assert(sizeof(i18n_strings::STRINGS_IT) / sizeof(i18n_strings::STRINGS_IT[0]) == + "OFFSETS_BE size mismatch"); +static_assert(sizeof(i18n_strings::OFFSETS_IT) / sizeof(i18n_strings::OFFSETS_IT[0]) == static_cast(StrId::_COUNT), - "STRINGS_IT size mismatch"); -static_assert(sizeof(i18n_strings::STRINGS_PL) / sizeof(i18n_strings::STRINGS_PL[0]) == + "OFFSETS_IT size mismatch"); +static_assert(sizeof(i18n_strings::OFFSETS_PL) / sizeof(i18n_strings::OFFSETS_PL[0]) == static_cast(StrId::_COUNT), - "STRINGS_PL size mismatch"); -static_assert(sizeof(i18n_strings::STRINGS_FI) / sizeof(i18n_strings::STRINGS_FI[0]) == + "OFFSETS_PL size mismatch"); +static_assert(sizeof(i18n_strings::OFFSETS_FI) / sizeof(i18n_strings::OFFSETS_FI[0]) == static_cast(StrId::_COUNT), - "STRINGS_FI size mismatch"); -static_assert(sizeof(i18n_strings::STRINGS_DA) / sizeof(i18n_strings::STRINGS_DA[0]) == + "OFFSETS_FI size mismatch"); +static_assert(sizeof(i18n_strings::OFFSETS_DA) / sizeof(i18n_strings::OFFSETS_DA[0]) == static_cast(StrId::_COUNT), - "STRINGS_DA size mismatch"); -static_assert(sizeof(i18n_strings::STRINGS_NL) / sizeof(i18n_strings::STRINGS_NL[0]) == + "OFFSETS_DA size mismatch"); +static_assert(sizeof(i18n_strings::OFFSETS_NL) / sizeof(i18n_strings::OFFSETS_NL[0]) == static_cast(StrId::_COUNT), - "STRINGS_NL size mismatch"); -static_assert(sizeof(i18n_strings::STRINGS_TR) / sizeof(i18n_strings::STRINGS_TR[0]) == + "OFFSETS_NL size mismatch"); +static_assert(sizeof(i18n_strings::OFFSETS_TR) / sizeof(i18n_strings::OFFSETS_TR[0]) == static_cast(StrId::_COUNT), - "STRINGS_TR size mismatch"); -static_assert(sizeof(i18n_strings::STRINGS_KK) / sizeof(i18n_strings::STRINGS_KK[0]) == + "OFFSETS_TR size mismatch"); +static_assert(sizeof(i18n_strings::OFFSETS_KK) / sizeof(i18n_strings::OFFSETS_KK[0]) == static_cast(StrId::_COUNT), - "STRINGS_KK size mismatch"); + "OFFSETS_KK size mismatch"); +static_assert(sizeof(i18n_strings::OFFSETS_PT) / sizeof(i18n_strings::OFFSETS_PT[0]) == + static_cast(StrId::_COUNT), + "OFFSETS_PT size mismatch"); diff --git a/lib/I18n/I18nStrings.h b/lib/I18n/I18nStrings.h index c6abb2b2..274ccba9 100644 --- a/lib/I18n/I18nStrings.h +++ b/lib/I18n/I18nStrings.h @@ -1,30 +1,49 @@ #pragma once -#include - #include "I18nKeys.h" // THIS FILE IS AUTO-GENERATED BY gen_i18n.py. DO NOT EDIT. namespace i18n_strings { -extern const char* const STRINGS_EN[]; -extern const char* const STRINGS_ES[]; -extern const char* const STRINGS_FR[]; -extern const char* const STRINGS_DE[]; -extern const char* const STRINGS_CS[]; -extern const char* const STRINGS_PO[]; -extern const char* const STRINGS_RU[]; -extern const char* const STRINGS_SV[]; -extern const char* const STRINGS_RO[]; -extern const char* const STRINGS_CA[]; -extern const char* const STRINGS_UK[]; -extern const char* const STRINGS_BE[]; -extern const char* const STRINGS_IT[]; -extern const char* const STRINGS_PL[]; -extern const char* const STRINGS_FI[]; -extern const char* const STRINGS_DA[]; -extern const char* const STRINGS_NL[]; -extern const char* const STRINGS_TR[]; -extern const char* const STRINGS_KK[]; +extern const char STRINGS_EN_DATA[]; +extern const uint16_t OFFSETS_EN[]; +extern const char STRINGS_ES_DATA[]; +extern const uint16_t OFFSETS_ES[]; +extern const char STRINGS_FR_DATA[]; +extern const uint16_t OFFSETS_FR[]; +extern const char STRINGS_DE_DATA[]; +extern const uint16_t OFFSETS_DE[]; +extern const char STRINGS_CS_DATA[]; +extern const uint16_t OFFSETS_CS[]; +extern const char STRINGS_PO_DATA[]; +extern const uint16_t OFFSETS_PO[]; +extern const char STRINGS_RU_DATA[]; +extern const uint16_t OFFSETS_RU[]; +extern const char STRINGS_SV_DATA[]; +extern const uint16_t OFFSETS_SV[]; +extern const char STRINGS_RO_DATA[]; +extern const uint16_t OFFSETS_RO[]; +extern const char STRINGS_CA_DATA[]; +extern const uint16_t OFFSETS_CA[]; +extern const char STRINGS_UK_DATA[]; +extern const uint16_t OFFSETS_UK[]; +extern const char STRINGS_BE_DATA[]; +extern const uint16_t OFFSETS_BE[]; +extern const char STRINGS_IT_DATA[]; +extern const uint16_t OFFSETS_IT[]; +extern const char STRINGS_PL_DATA[]; +extern const uint16_t OFFSETS_PL[]; +extern const char STRINGS_FI_DATA[]; +extern const uint16_t OFFSETS_FI[]; +extern const char STRINGS_DA_DATA[]; +extern const uint16_t OFFSETS_DA[]; +extern const char STRINGS_NL_DATA[]; +extern const uint16_t OFFSETS_NL[]; +extern const char STRINGS_TR_DATA[]; +extern const uint16_t OFFSETS_TR[]; +extern const char STRINGS_KK_DATA[]; +extern const uint16_t OFFSETS_KK[]; +extern const char STRINGS_PT_DATA[]; +extern const uint16_t OFFSETS_PT[]; } // namespace i18n_strings diff --git a/scripts/gen_i18n.py b/scripts/gen_i18n.py index df77bce4..17f8e21c 100755 --- a/scripts/gen_i18n.py +++ b/scripts/gen_i18n.py @@ -15,18 +15,25 @@ Each YAML file must contain: The English file is the reference. Missing keys in other languages are automatically filled from English, with a warning. -Usage: - python gen_i18n.py +By default the script scans the src/ and lib/ trees for STR_* references and +reports any translation keys that are never used. Pass --strip-unused to +omit those keys from the generated output entirely. -Example: +Usage: + python gen_i18n.py [translations_dir [output_dir]] [options] + +Examples: + python gen_i18n.py python gen_i18n.py lib/I18n/translations lib/I18n/ + python gen_i18n.py --strip-unused + python gen_i18n.py --strip-unused --src-dirs src lib/EpdFont """ import sys import os import re from pathlib import Path -from typing import List, Dict, Tuple +from typing import Dict, List, Optional, Set, Tuple # --------------------------------------------------------------------------- @@ -105,7 +112,8 @@ def parse_yaml_file(filepath: str) -> Dict[str, str]: def load_translations( translations_dir: str, -) -> Tuple[List[str], List[str], List[str], Dict[str, List[str]]]: + verbose: bool = False, +) -> Tuple[List[str], List[str], List[str], Dict[str, List[str]], List[Set[str]]]: """ Read every YAML file in *translations_dir* and return: language_codes e.g. ["EN", "ES", ...] @@ -138,6 +146,31 @@ def load_translations( if english_file is None: raise ValueError("No YAML file with _language_code: EN found") + duplicate_orders: Dict[str, List[str]] = {} + order_to_files: Dict[str, List[str]] = {} + for fname, data in parsed.items(): + order = data.get("_order") + if not order: + continue + order_to_files.setdefault(order, []).append(fname) + + for order, files in order_to_files.items(): + if len(files) > 1: + duplicate_orders[order] = sorted(files) + + if duplicate_orders: + duplicate_messages = [ + f"_order {order}: {', '.join(files)}" + for order, files in sorted( + duplicate_orders.items(), key=lambda item: int(item[0]) + ) + ] + raise ValueError( + "Duplicate _order values found:\n " + + "\n ".join(duplicate_messages) + + "\nEach _order value must be unique to ensure a deterministic language order." + ) + # Order: English first, then by _order metadata (falls back to filename) def sort_key(fname: str) -> Tuple[int, int, str]: """English always first (0), then by _order, then by filename.""" @@ -174,16 +207,20 @@ def load_translations( raise ValueError(f"Invalid C++ identifier in English file: '{key}'") # Build translations dict, filling missing keys from English + inherited_sets: List[Set[str]] = [set() for _ in ordered_files] translations: Dict[str, List[str]] = {} for key in string_keys: row: List[str] = [] - for fname in ordered_files: + for lang_idx, fname in enumerate(ordered_files): data = parsed[fname] value = data.get(key, "") if not value.strip() and fname != english_file: value = english_data[key] - lang_code = parsed[fname].get("_language_code", fname) - print(f" INFO: '{key}' missing in {lang_code}, using English fallback") + inherited_sets[lang_idx].add(key) + if verbose: + print( + f" INFO: '{key}' missing in {language_codes[lang_idx]}, using English fallback" + ) row.append(value) translations[key] = row @@ -195,59 +232,72 @@ def load_translations( extra = [k for k in data if not k.startswith("_") and k not in english_data] if extra: lang_code = data.get("_language_code", fname) - print(f" WARNING: {lang_code} has keys not in English: {', '.join(extra)}") + if verbose: + print( + f" WARNING: {lang_code} has keys not in English: {', '.join(extra)}" + ) - print(f"Loaded {len(language_codes)} languages, {len(string_keys)} string keys") - return language_codes, language_names, string_keys, translations + if verbose: + print(f"Loaded {len(language_codes)} languages, {len(string_keys)} string keys") + return language_codes, language_names, string_keys, translations, inherited_sets + + +# --------------------------------------------------------------------------- +# Unused-string detection +# --------------------------------------------------------------------------- + +_GENERATED_FILENAMES: Set[str] = {"I18nKeys.h", "I18nStrings.h", "I18nStrings.cpp"} + + +def find_used_string_keys( + src_dirs: List[str], + skip_filenames: Optional[Set[str]] = None, +) -> Set[str]: + """ + Scan C/C++ source files under *src_dirs* for STR_* identifiers. + + Files whose basename appears in *skip_filenames* are skipped so that + the generated I18n files don't count as "usage" of themselves. + + Returns the set of all STR_KEY names that appear at least once. + """ + if skip_filenames is None: + skip_filenames = _GENERATED_FILENAMES + + pattern = re.compile(r"\bSTR_[A-Za-z0-9_]+\b") + used: Set[str] = set() + + for src_dir in src_dirs: + p = Path(src_dir) + if not p.is_dir(): + continue + for f in p.rglob("*"): + if f.suffix not in {".cpp", ".h", ".c"}: + continue + if f.name in skip_filenames: + continue + try: + text = f.read_text(encoding="utf-8", errors="replace") + except OSError: + continue + for m in pattern.finditer(text): + used.add(m.group(0)) + + return used + + +def report_unused_keys( + string_keys: List[str], + used_keys: Set[str], +) -> List[str]: + """Return a sorted list of keys from *string_keys* absent in *used_keys*.""" + return [k for k in sorted(string_keys) if k not in used_keys] # --------------------------------------------------------------------------- # C++ string escaping # --------------------------------------------------------------------------- -LANG_ABBREVIATIONS = { - "english": "EN", - "español": "ES", - "espanol": "ES", - "italiano": "IT", - "svenska": "SV", - "français": "FR", - "francais": "FR", - "deutsch": "DE", - "german": "DE", - "polski": "PL", - "português": "PT", - "portugues": "PT", - "português (brasil)": "PO", - "中文": "ZH", - "chinese": "ZH", - "日本語": "JA", - "japanese": "JA", - "한국어": "KO", - "korean": "KO", - "русский": "RU", - "russian": "RU", - "العربية": "AR", - "arabic": "AR", - "עברית": "HE", - "hebrew": "HE", - "فارسی": "FA", - "persian": "FA", - "čeština": "CS", - "türkçe": "TR", - "turkish": "TR", - "Қазақша": "KK", - "kazakh": "KK", -} - - -def get_lang_abbreviation(lang_code: str, lang_name: str) -> str: - """Return a 2-letter abbreviation for a language.""" - lower = lang_name.lower() - if lower in LANG_ABBREVIATIONS: - return LANG_ABBREVIATIONS[lower] - return lang_code[:2].upper() - def escape_cpp_string(s: str) -> List[str]: r""" @@ -390,6 +440,7 @@ def generate_keys_header( language_names: List[str], string_keys: List[str], output_path: str, + verbose: bool = False, ) -> None: """Generate I18nKeys.h.""" lines: List[str] = [ @@ -398,13 +449,13 @@ def generate_keys_header( "", "// THIS FILE IS AUTO-GENERATED BY gen_i18n.py. DO NOT EDIT.", "", - "// Forward declaration for string arrays", + "// Forward declarations for flat string data blobs and offset tables", "namespace i18n_strings {", ] - for code, name in zip(languages, language_names): - abbrev = get_lang_abbreviation(code, name) - lines.append(f"extern const char* const STRINGS_{abbrev}[];") + for code in languages: + lines.append(f"extern const char STRINGS_{code}_DATA[];") + lines.append(f"extern const uint16_t OFFSETS_{code}[];") lines.append("} // namespace i18n_strings") lines.append("") @@ -436,17 +487,28 @@ def generate_keys_header( lines.append("};") lines.append("") - # getStringArray helper - lines.append("// Helper function to get string array for a language") - lines.append("inline const char* const* getStringArray(Language lang) {") + # LangStrings struct + lines.append("// Holds a flat string blob and its offset table for one language") + lines.append("struct LangStrings {") + lines.append(" const char* data;") + lines.append(" const uint16_t* offsets;") + lines.append("};") + lines.append("") + + # getLanguageStrings helper + lines.append("// Helper function to get string data for a language") + lines.append("inline LangStrings getLanguageStrings(Language lang) {") lines.append(" switch (lang) {") - for code, name in zip(languages, language_names): - abbrev = get_lang_abbreviation(code, name) + for code in languages: lines.append(f" case Language::{code}:") - lines.append(f" return i18n_strings::STRINGS_{abbrev};") - first_abbrev = get_lang_abbreviation(languages[0], language_names[0]) + lines.append( + f" return {{i18n_strings::STRINGS_{code}_DATA, i18n_strings::OFFSETS_{code}}};" + ) + first_code = languages[0] lines.append(" default:") - lines.append(f" return i18n_strings::STRINGS_{first_abbrev};") + lines.append( + f" return {{i18n_strings::STRINGS_{first_code}_DATA, i18n_strings::OFFSETS_{first_code}}};" + ) lines.append(" }") lines.append("}") lines.append("") @@ -467,21 +529,9 @@ def generate_keys_header( key=lambda i: languages[i], ) sorted_indices = [english_idx] + rest - names = [language_names[i] for i in sorted_indices] - comment_names = ", ".join(names) + comment_names = ", ".join(language_names[i] for i in sorted_indices) lines.append("// Sorted language indices by code (auto-generated by gen_i18n.py)") - if len(f"// Order: {comment_names}") <= 120: - lines.append(f"// Order: {comment_names}") - else: - current = "// Order: " - for name in names: - candidate = current + name + ", " - if len(candidate) > 100: - lines.append(current.rstrip(", ")) - current = "// " + name + ", " - else: - current = candidate - lines.append(current.rstrip(", ")) + lines.append(f"// Order: {comment_names}") lines.append( "constexpr uint8_t SORTED_LANGUAGE_INDICES[] = {" f"{', '.join(str(i) for i in sorted_indices)}" @@ -493,19 +543,18 @@ def generate_keys_header( ) lines.append(' "SORTED_LANGUAGE_INDICES size mismatch");') - _write_file(output_path, lines) + _write_file(output_path, lines, verbose) def generate_strings_header( languages: List[str], language_names: List[str], output_path: str, + verbose: bool = False, ) -> None: """Generate I18nStrings.h.""" lines: List[str] = [ "#pragma once", - "#include ", - "", '#include "I18nKeys.h"', "", "// THIS FILE IS AUTO-GENERATED BY gen_i18n.py. DO NOT EDIT.", @@ -514,13 +563,13 @@ def generate_strings_header( "", ] - for code, name in zip(languages, language_names): - abbrev = get_lang_abbreviation(code, name) - lines.append(f"extern const char* const STRINGS_{abbrev}[];") + for code in languages: + lines.append(f"extern const char STRINGS_{code}_DATA[];") + lines.append(f"extern const uint16_t OFFSETS_{code}[];") lines.append("") lines.append("} // namespace i18n_strings") - _write_file(output_path, lines) + _write_file(output_path, lines, verbose) def generate_strings_cpp( @@ -529,10 +578,12 @@ def generate_strings_cpp( string_keys: List[str], translations: Dict[str, List[str]], output_path: str, + verbose: bool = False, ) -> None: """Generate I18nStrings.cpp.""" lines: List[str] = [ '#include "I18nStrings.h"', + "#include ", "", "// THIS FILE IS AUTO-GENERATED BY gen_i18n.py. DO NOT EDIT.", "", @@ -555,18 +606,41 @@ def generate_strings_cpp( lines.append("};") lines.append("") - # Per-language string arrays + # Per-language flat string blobs and offset tables lines.append("namespace i18n_strings {") lines.append("") - for lang_idx, (code, name) in enumerate(zip(languages, language_names)): - abbrev = get_lang_abbreviation(code, name) - lines.append(f"const char* const STRINGS_{abbrev}[] = {{") + for lang_idx, code in enumerate(languages): + lang_strings = [translations[key][lang_idx] for key in string_keys] - for key in string_keys: - text = translations[key][lang_idx] - _append_string_entry(lines, text) + # Precompute byte offsets (UTF-8 encoded, +1 per string for null terminator) + offsets: List[int] = [] + current_offset = 0 + for s in lang_strings: + offsets.append(current_offset) + current_offset += len(s.encode("utf-8")) + 1 + if current_offset > 65535: + raise ValueError( + f"Language {code}: total string data ({current_offset} bytes) " + "exceeds uint16_t offset range (65535)" + ) + # Flat string data blob — all strings concatenated with \0 separators. + # clang-format off/on avoids reformatting of the adjacent string literals. + lines.append("// clang-format off") + lines.append(f"const char STRINGS_{code}_DATA[] =") + for text in lang_strings: + _append_string_data_entry(lines, text) + lines.append(";") + lines.append("// clang-format on") + lines.append("") + + # Offset table — one uint16_t per StrId + lines.append(f"const uint16_t OFFSETS_{code}[] = {{") + chunk_size = 12 + for i in range(0, len(offsets), chunk_size): + chunk = offsets[i : i + chunk_size] + lines.append(" " + ", ".join(str(o) for o in chunk) + ",") lines.append("};") lines.append("") @@ -575,16 +649,15 @@ def generate_strings_cpp( # Compile-time size checks lines.append("// Compile-time validation of array sizes") - for code, name in zip(languages, language_names): - abbrev = get_lang_abbreviation(code, name) + for code in languages: lines.append( - f"static_assert(sizeof(i18n_strings::STRINGS_{abbrev}) " - f"/ sizeof(i18n_strings::STRINGS_{abbrev}[0]) ==" + f"static_assert(sizeof(i18n_strings::OFFSETS_{code}) " + f"/ sizeof(i18n_strings::OFFSETS_{code}[0]) ==" ) lines.append(" static_cast(StrId::_COUNT),") - lines.append(f' "STRINGS_{abbrev} size mismatch");') + lines.append(f' "OFFSETS_{code} size mismatch");') - _write_file(output_path, lines) + _write_file(output_path, lines, verbose) # --------------------------------------------------------------------------- @@ -592,6 +665,91 @@ def generate_strings_cpp( # --------------------------------------------------------------------------- +def _print_language_table( + language_codes: List[str], + language_names: List[str], + inherited_sets: List[Set[str]], + string_keys: List[str], + unused_keys: Set[str], + data_sizes: List[int], +) -> None: + """Print a per-language summary table.""" + total = len(string_keys) + headers = ("Language", "Code", "Own", "Fallback", "Unused", "Data (B)") + + rows = [] + for code, name, inherited, size in zip( + language_codes, language_names, inherited_sets, data_sizes + ): + own = total - len(inherited) + fallback = len(inherited) + # strings this language translated but the code never calls + unused = len(unused_keys - inherited) + rows.append((name, code, str(own), str(fallback), str(unused), str(size))) + + # EN first, then alphabetically by ISO code + rows.sort(key=lambda r: (0 if r[1] == "EN" else 1, r[1])) + + col_widths = [len(h) for h in headers] + for row in rows: + for i, cell in enumerate(row): + col_widths[i] = max(col_widths[i], len(cell)) + + fmt = " ".join(f"{{:<{w}}}" for w in col_widths) + sep = " ".join("-" * w for w in col_widths) + + def _safe_print(line: str) -> None: + print( + line.encode(sys.stdout.encoding or "utf-8", errors="replace").decode( + sys.stdout.encoding or "utf-8", errors="replace" + ) + ) + + _safe_print(fmt.format(*headers)) + _safe_print(sep) + for row in rows: + _safe_print(fmt.format(*row)) + used = total - len(unused_keys) + total_size = sum(data_sizes) + n_lang = len(rows) + n_keys = len(string_keys) + # Current layout: uint16_t offset table (2 B per string per language) + offset_table_size = n_lang * n_keys * 2 + current_total = total_size + offset_table_size + # Previous layout: const char* pointer array (4 B per string per language) + old_pointer_table_size = n_lang * n_keys * 4 + old_total = total_size + old_pointer_table_size + saved = old_total - current_total + print( + f"\n Total: {total} | Used in code: {used} | Never used: {len(unused_keys)}" + ) + print( + f" Flash (now): {total_size:>7,} B strings + {offset_table_size:>6,} B offset tables (uint16_t)" + f" = {current_total:>7,} B" + ) + print( + f" Flash (before): {total_size:>7,} B strings + {old_pointer_table_size:>6,} B pointer tables (ptr32)" + f" = {old_total:>7,} B" + ) + print(f" Saved by offset tables: {saved:,} B") + + +def _append_string_data_entry(lines: List[str], text: str) -> None: + """ + Escape *text*, append a \\0 null separator, and format as indented C++ + string literal lines for inclusion in a flat char data array blob. + """ + segments = escape_cpp_string(text) + # Append the null entry separator to the last segment + if segments and segments[-1] != "": + segments[-1] += "\\0" + elif segments: + segments[-1] = "\\0" + else: + segments = ["\\0"] + lines.extend(format_cpp_string_literal(segments)) + + def _append_string_entry(lines: List[str], text: str, comment: str = "") -> None: """Escape *text*, format as indented C++ lines, append comma (and optional comment).""" segments = escape_cpp_string(text) @@ -601,11 +759,12 @@ def _append_string_entry(lines: List[str], text: str, comment: str = "") -> None lines.extend(formatted) -def _write_file(path: str, lines: List[str]) -> None: +def _write_file(path: str, lines: List[str], verbose: bool = False) -> None: with open(path, "w", encoding="utf-8", newline="\n") as f: f.write("\n".join(lines)) f.write("\n") - print(f"Generated: {path}") + if verbose: + print(f"Generated: {path}") # --------------------------------------------------------------------------- @@ -613,10 +772,17 @@ def _write_file(path: str, lines: List[str]) -> None: # --------------------------------------------------------------------------- -def main(translations_dir=None, output_dir=None) -> None: +def main( + translations_dir: Optional[str] = None, + output_dir: Optional[str] = None, + src_dirs: Optional[List[str]] = None, + strip_unused: bool = False, + verbose: bool = False, +) -> None: # Default paths (relative to project root) default_translations_dir = "lib/I18n/translations" default_output_dir = "lib/I18n/" + default_src_dirs = ["src", "lib"] if translations_dir is None or output_dir is None: if len(sys.argv) == 3: @@ -627,6 +793,9 @@ def main(translations_dir=None, output_dir=None) -> None: translations_dir = default_translations_dir output_dir = default_output_dir + if src_dirs is None: + src_dirs = default_src_dirs + if not os.path.isdir(translations_dir): print(f"Error: Translations directory not found: {translations_dir}") sys.exit(1) @@ -635,32 +804,91 @@ def main(translations_dir=None, output_dir=None) -> None: print(f"Error: Output directory not found: {output_dir}") sys.exit(1) - print(f"Reading translations from: {translations_dir}") - print(f"Output directory: {output_dir}") - print() + if verbose: + print(f"Reading translations from: {translations_dir}") + print(f"Output directory: {output_dir}") + print() try: - languages, language_names, string_keys, translations = load_translations( - translations_dir + languages, language_names, string_keys, translations, inherited_sets = ( + load_translations(translations_dir, verbose) ) + # --- Unused-string detection --- + scan_dirs = [d for d in src_dirs if os.path.isdir(d)] + if scan_dirs: + used_keys = find_used_string_keys(scan_dirs) + unused_set = set(report_unused_keys(string_keys, used_keys)) + else: + used_keys = set(string_keys) + unused_set = set() + + # --- Missing-string detection (used in code but absent from English) --- + missing_keys = sorted(used_keys - set(string_keys)) + if missing_keys: + print( + f"\n CRITICAL: {len(missing_keys)} string(s) used in source but missing from english.yaml:" + ) + for key in missing_keys: + print(f" - {key}") + print() + sys.exit(1) + + # Compute per-language data blob sizes: + # sum of UTF-8 byte length + 1 (null terminator) per string + data_sizes = [ + sum(len(translations[k][i].encode("utf-8")) + 1 for k in string_keys) + for i in range(len(languages)) + ] + + _print_language_table( + languages, + language_names, + inherited_sets, + string_keys, + unused_set, + data_sizes, + ) + print() + + if verbose and unused_set: + print(f" Unused keys ({len(unused_set)}):") + for key in sorted(unused_set): + print(f" - {key}") + print() + + if unused_set and strip_unused: + string_keys = [k for k in string_keys if k not in unused_set] + translations = { + k: v for k, v in translations.items() if k not in unused_set + } + inherited_sets = [s - unused_set for s in inherited_sets] + print(f" Stripping {len(unused_set)} unused string(s) from output.") + out = Path(output_dir) generate_keys_header( - languages, language_names, string_keys, str(out / "I18nKeys.h") + languages, language_names, string_keys, str(out / "I18nKeys.h"), verbose + ) + generate_strings_header( + languages, language_names, str(out / "I18nStrings.h"), verbose ) - generate_strings_header(languages, language_names, str(out / "I18nStrings.h")) generate_strings_cpp( languages, language_names, string_keys, translations, str(out / "I18nStrings.cpp"), + verbose, ) print() - print("✓ Code generation complete!") + print("Code generation complete!") print(f" Languages: {len(languages)}") print(f" String keys: {len(string_keys)}") + if unused_set and not strip_unused: + print( + f" Unused keys: {len(unused_set)} (pass --strip-unused to remove them)" + ) except Exception as e: print(f"\nError: {e}") @@ -668,11 +896,52 @@ def main(translations_dir=None, output_dir=None) -> None: if __name__ == "__main__": - main() + import argparse + + parser = argparse.ArgumentParser( + description="Generate I18n C++ files from per-language YAML translations." + ) + parser.add_argument( + "translations_dir", + nargs="?", + default=None, + help="Path to the translations directory (default: lib/I18n/translations)", + ) + parser.add_argument( + "output_dir", + nargs="?", + default=None, + help="Path to the output directory (default: lib/I18n/)", + ) + parser.add_argument( + "--src-dirs", + nargs="+", + metavar="DIR", + default=None, + help="Source directories to scan for STR_* usage (default: src lib)", + ) + parser.add_argument( + "--strip-unused", + action="store_true", + help="Remove unused STR_* keys from the generated output", + ) + parser.add_argument( + "--verbose", + "-v", + action="store_true", + help="Print per-key INFO/WARNING messages and file generation details", + ) + args = parser.parse_args() + main( + args.translations_dir, + args.output_dir, + args.src_dirs, + args.strip_unused, + args.verbose, + ) else: try: Import("env") - print("Running i18n generation script from PlatformIO...") - main() + main(strip_unused=True) except NameError: pass