Compare commits

...

152 Commits

Author SHA1 Message Date
Huang Xin 6de10c6c3b release: version 0.9.85 (#2220) 2025-10-13 19:15:55 +02:00
Huang Xin c7d49c1504 fix: load custom texture before applying it (#2219) 2025-10-13 19:04:45 +02:00
Huang Xin c721bd4d97 chore: enable turbopack by default in development env (#2218) 2025-10-13 16:39:17 +02:00
Huang Xin 5b0a1968d8 chore: add readest.koplugin in the release workflow (#2217) 2025-10-13 16:26:11 +02:00
Huang Xin ad9064fa46 fix(toc): fixed issues of scroll to active items in unpinned sidebar, closes #2213 (#2216) 2025-10-13 15:29:51 +02:00
Huang Xin f1c92e5702 feat: support customizing background images, closes #2018 (#2214) 2025-10-13 14:04:13 +02:00
Huang Xin 92c1441922 translator: add translator target language of Persian, closes #2206 (#2212) 2025-10-12 13:53:23 +02:00
Huang Xin 3820950c7c fix: show only the filtered books in groups (#2209) 2025-10-12 11:38:47 +02:00
Huang Xin 08e558bd41 fix: actually allow script in the transform target, closes #2200 (#2203) 2025-10-11 12:59:55 +02:00
Huang Xin 00af4a3d60 layout: make TTS icon less distracting during read-aloud mode (#2198) 2025-10-10 19:14:57 +02:00
Huang Xin ada427b134 feat(settings): add settings to adjust screen brightness when reading, closes #1532 (#2197) 2025-10-10 19:02:35 +02:00
Huang Xin f696b9a573 fix: handle scrolling/panning in zoomed in PDFs, closes #2184 (#2194) 2025-10-10 07:56:41 +02:00
Huang Xin 195beeacac chore: don't init posthog if users opt-out the usage data telemetry, closes #2187 (#2192) 2025-10-10 07:03:49 +02:00
Huang Xin 5b23ed35b6 txt: properly detect chapters in TXT files with dot-number format, closes #2188 (#2191) 2025-10-10 06:45:50 +02:00
Huang Xin 42c8702704 fix(cbz): fix issue where CBZ files fail to reopen after being closed, closes #2183 (#2190) 2025-10-10 05:50:40 +02:00
Huang Xin ad81376da8 fix(css): auto height of inline images with object-fit style (#2189) 2025-10-10 04:10:05 +02:00
Huang Xin 562fea3a36 fix(layout): fix inconsistent background color for unpinned drag bars (#2186) 2025-10-09 18:35:00 +02:00
Huang Xin b69d9ed69f tts: improve media session control compatibility across more Android systems (#2185) 2025-10-09 17:53:07 +02:00
Huang Xin ad6a21a68f refactor: split FooterBar into modular components for desktop and mobile (#2181) 2025-10-08 07:47:39 +02:00
Huang Xin 173aa0fcd1 layout: fix dragbar flickering when opening a book (#2177) 2025-10-06 05:52:36 +02:00
Huang Xin 788e08a75a shortcut: use shift+space to go backward in the reader page (#2176) 2025-10-06 05:31:16 +02:00
Huang Xin ec397a2daf fix: draw annotations of the current section on load, closes #2163 (#2174) 2025-10-05 17:47:34 +02:00
Huang Xin 2a5758fbc4 compat: disable customize root dir for macOS App Store builds (#2171)
CustomizeRootDir has a blocker on macOS App Store builds due to Security Scoped Resource restrictions.
See: https://github.com/tauri-apps/tauri/issues/3716
2025-10-05 08:28:45 +02:00
Huang Xin 562ccd4b9e feat: add keyboard shortcuts for toggling bookmarks/sidebar, importing books, closing window (#2170)
And make the shortcuts compatible with GNOME Human Interface Guidelines.
This closes #2079 and closes #2168.
2025-10-04 16:12:31 +02:00
make_aguess 4d577774f3 Adds adaptive icon for Android launcher (#2162)
Introduces an adaptive icon for the Android launcher, defining
separate layers for background, foreground, and monochrome
elements. Enhances visual consistency and supports adaptive
icon features on modern Android devices.
2025-10-04 09:00:33 +02:00
Huang Xin 4c10c16491 i18n: add translations for Swedish(sv) (#2159) 2025-10-02 14:25:01 +02:00
Huang Xin 7695f31a5a translator: translate to and from Norwegian Bokmål(nb) (#2158) 2025-10-02 14:09:01 +02:00
Huang Xin 06b27f8d39 chore: fix portable exe build for Windows (#2156) 2025-10-02 00:11:21 +08:00
Huang Xin e1691661d9 release: version 0.9.82 (#2155) 2025-10-01 16:45:01 +02:00
Huang Xin bc8e419d51 compat(koplugin): make meta_hash extraction more robust for calibre conversions and metadata edits, fixes #1838 (#2154) 2025-10-01 16:38:29 +02:00
make_aguess ccad1ca0d9 Add support for mono theme (#2122) (#2153) 2025-10-01 15:30:09 +02:00
Huang Xin 75c315fca8 fix(koplugin): only prompt network connection during interactive push progress, closes #2137 (#2152) 2025-10-01 14:57:58 +02:00
Huang Xin bdef593cdd feat: support global settings from library menu, closes #2140 (#2151) 2025-10-01 09:59:37 +02:00
Huang Xin d8943fc0c5 compat: normalize OKLCH color syntax for older iOS Safari, closes #990 (#2150) 2025-10-01 07:59:45 +02:00
Huang Xin cdd274e5ca compat: add support for WebView down to version 92, closes #2139 (#2145) 2025-09-30 19:14:35 +02:00
Huang Xin 2230741779 fix(i18n): apply system language on app start, closes #2141 (#2144) 2025-09-30 10:11:18 +02:00
Huang Xin 0e6950a60f i18n: localization for notification title and text (#2143) 2025-09-30 10:03:33 +02:00
Huang Xin 1d4541e353 feat: request manage external storage permission when changing data directory to sdcard root on Android (#2142) 2025-09-30 08:59:16 +02:00
Huang Xin 0a1e0212e2 feat: supported background TTS with media session controls, closes #2099 and closes #964 (#2138) 2025-09-29 19:45:17 +02:00
Huang Xin 25b44176b9 fix(tts): parse default language in ssml without translated text (#2135) 2025-09-27 17:52:54 +02:00
Huang Xin e1deff341d feat: supported changing data location on Android (#2131) 2025-09-26 17:32:16 +02:00
Huang Xin 3fc4c05e50 feat: build portable Windows binaries with app data kept within the executable directory (#2126) 2025-09-26 11:23:55 +02:00
Huang Xin 1843a74dbb feat: supported changing data location on desktop platforms, closes #2047 and closes #478 (#2125) 2025-09-26 10:22:41 +02:00
Huang Xin 9aa6a8e6b9 chore: bump tauri to the latest version (#2117) 2025-09-25 09:32:55 +02:00
Huang Xin 1de89069ce fix: handle pointer events for window dragging on touch screen Windows, closes #2010 (#2116)
* fix: handle pointer events for window dragging on touch screen Windows, closes #2010

* chore: fix rust-lint
2025-09-25 06:41:08 +02:00
Huang Xin 1e6525d085 fix(sync): handle incomplete config data from koreader (#2115) 2025-09-25 11:49:43 +08:00
Huang Xin d9d71b7d38 fix(css): overriding hard-coded font weight (#2113) 2025-09-24 17:03:17 +02:00
Huang Xin e85dec2b49 fix(sync): force a full sync after a certain period, closes #2111 (#2112) 2025-09-24 16:52:17 +02:00
Huang Xin c0f77b3368 fix(tts): abortable prefetch of tts data, closes #2037 (#2110) 2025-09-24 12:19:07 +02:00
Huang Xin 8c9855d167 fix(layout): avoid changing the safe area insets when virtual keyboard pops up on Android, closes #2105 (#2108) 2025-09-24 07:28:59 +02:00
Huang Xin 7c12bc8595 fix(mobi): fixed footnotes parsing for some MOBI/AZW files (#2106) 2025-09-23 08:53:43 +02:00
Huang Xin 5102f6b0ff fix(tts): handle und language code, closes #2100 (#2102) 2025-09-22 18:15:28 +02:00
Huang Xin dd40b9bae0 fix(layout): adjust font size instead of zooming HTML, closes #2088 (#2101)
Prevents issues with zoom handling in WebKit-based browsers such as Safari and WebKitGTK.
2025-09-22 17:43:22 +02:00
Huang Xin 98b4026990 fix(layout): scrollable book view and about window, closes #2090 (#2098) 2025-09-22 13:44:54 +02:00
Huang Xin b0640ba55b fix(fonts): higher priority for CJK fonts so that it can override system CJK glyphs (#2093) 2025-09-21 08:22:49 +02:00
Huang Xin c9a1557674 refactor: support custom root dir for readest file system (#2092) 2025-09-21 07:59:27 +02:00
Huang Xin 855f98722c tts: add more languages for edge tts (#2089) 2025-09-20 01:58:11 +02:00
Huang Xin 21a82b70c7 fix(a11y): better contrast for disabled buttons, closes #2083 (#2084) 2025-09-19 13:40:45 +02:00
Huang Xin 519e222883 release(hotfix): version 0.9.81 (#2082) 2025-09-19 13:20:48 +02:00
Huang Xin 488a242787 css: default to lower font-family specificity than the styles defined inside the ebook, closes #2070 (#2081) 2025-09-19 13:10:37 +02:00
StepanSad 523a03d212 Update translation.json (#2078) 2025-09-19 12:04:22 +02:00
Huang Xin d49f3442e8 fix(layout): scroll in the dropdown menu in landscape mode, closes #2072 (#2076) 2025-09-19 11:50:03 +02:00
Huang Xin 48dc570809 fix: handle invalid bookkey for viewState, closes #2073 (#2074) 2025-09-19 11:09:32 +02:00
Huang Xin 509320813f tts: support media session in desktop apps (#2071) 2025-09-19 10:22:39 +02:00
Huang Xin 54d7e73acb fix: disable swipe up to toggle action bar for PDF zoomed in (#2068) 2025-09-18 19:46:47 +02:00
Huang Xin 1bc0eb3a4b release: version 0.9.80 (#2067) 2025-09-18 18:45:12 +02:00
Huang Xin c0bf2d40dd fix: jump to current item in virtualized TOC list, closes #2055 (#2066) 2025-09-18 18:38:09 +02:00
Huang Xin e30a39f9cb fix(config): prevent occasional errors when saving progress and configs (#2065) 2025-09-18 16:56:44 +02:00
Huang Xin 9727e4e9b8 fix(metadata): handle invalid language code and title when importing, closes #2056 and closes #2058 (#2064) 2025-09-18 16:47:02 +02:00
Huang Xin 3380912cdb feat(kosync): use metadata hash to aggregate different versions of the same book (#2063) 2025-09-18 14:51:26 +02:00
Huang Xin 91a5454b46 feat(sync): aggregate books with metadata hash for progress and annotation sync (#2062) 2025-09-18 14:05:16 +02:00
Huang Xin e0c5acf4c8 chore: check file status before deleting cloud files (#2053) 2025-09-17 04:54:32 +02:00
Huang Xin 7e062be0d0 doc: update accessibility support in README (#2051) 2025-09-16 18:06:10 +02:00
Huang Xin b23876c2b9 a11y: support NVDA screen reader on Windows and Orca screen reader on Linux (#2050) 2025-09-16 17:38:21 +02:00
Huang Xin e9a152683e fix(layout): show focus ring only for keyboard navigation (#2046) 2025-09-15 21:13:52 +02:00
Huang Xin 34f1af727f a11y: accessibility for mobile platforms (#2044) 2025-09-15 18:45:45 +02:00
Huang Xin dfc24f3803 fix(layout): fix break word for titles in book detail, closes #2039 (#2043) 2025-09-15 09:21:35 +02:00
Huang Xin ec233f7b37 fix(sync): resolve issue where invalid tokens were occasionally used with the storage API (#2041) 2025-09-14 22:08:22 +02:00
Huang Xin bb34b1ba59 a11y: add screen reader support (#2040)
Tested with VoiceOver on iOS and macOS
2025-09-14 22:00:42 +02:00
Daniil Leontev b1fb477359 fb2: respect elements nested in stanza (#2038)
Updates foliate-js submodule to include necessary changes. Fixes #2027
2025-09-14 17:03:53 +02:00
StepanSad 3c877a19fc Update translation.json (#2032) 2025-09-14 08:49:02 +08:00
Huang Xin b47baa6b74 fix: add delete confirmation for book deletion from contextmenu, closes #2013 (#2029) 2025-09-12 18:27:07 +02:00
Huang Xin 14c85cbadf feat(metadata): add an option to remove cover image, closes #2020 (#2028) 2025-09-12 17:10:25 +02:00
Huang Xin a88b9139f8 fix: occasionally failed double click detection on the header bar on Windows, closes #2015 (#2026) 2025-09-12 13:36:56 +02:00
Huang Xin 251a4b52c0 fix: support dragging window on touch screen, closes #2010 (#2025) 2025-09-12 11:43:49 +02:00
Huang Xin 1aaeaf5ebe feat: add support links in the about window (#2024) 2025-09-12 08:03:35 +02:00
Huang Xin 9fd152d727 refactor(a11y): add basic lint for accessibility (#2021) 2025-09-11 18:57:04 +02:00
Huang Xin 2571ceede4 fix: also apply zoom shortcuts to PDFs (#2016) 2025-09-10 17:32:23 +02:00
Huang Xin 932cfa3b9f feat: show groups in list mode in the library page, closes #978 (#2009) 2025-09-09 18:18:54 +02:00
Huang Xin 01fde8573c fonts: support variable fonts when importing ttf/otf font files, closes #2003 (#2007) 2025-09-09 11:25:27 +02:00
Huang Xin d95656b37b fix(tts): compensate audio fade-in for resumed play on iOS and macOS, closes #2005 (#2006) 2025-09-09 08:29:39 +02:00
Huang Xin 210eda0340 fix: pagination with volume keys now has right direction for RTL books, closes #1996 (#2004) 2025-09-09 05:36:45 +02:00
Huang Xin 0d8b877d73 fix: don't show rounded window in maximized or fullscreen mode on (#2001)
Linux, closes #1998
2025-09-08 19:32:15 +02:00
dependabot[bot] 79d39b2295 chore(deps): bump the github-actions group with 2 updates (#1999) 2025-09-08 12:44:45 +08:00
Huang Xin e03b0af58a feat: swipe to paginate on fixed layout books, closes #1028 (#1995) 2025-09-07 16:14:34 +02:00
Huang Xin 71c2143cba fix: avoid pagination until book view is inited, closes #1983 (#1994) 2025-09-07 14:47:35 +02:00
Huang Xin 70a7f5be19 fix: use transparent background for rounded window on Linux, closes #1982 (#1991) 2025-09-07 10:38:27 +02:00
Huang Xin d2242423f5 fix: correctly parse filenames for woff/woff2 font files on Android, closes #1981 (#1990) 2025-09-07 07:04:48 +02:00
Huang Xin 782e9c8b20 fix: restore scale factor (zoom level) for PDFs, closes #1985 (#1989) 2025-09-07 06:12:57 +02:00
Huang Xin 55b2c678a4 fix(kosync): handle non-standard XPath syntax from Koreader, closes #1968 (#1988) 2025-09-07 06:05:27 +02:00
Huang Xin 48d754c184 fix(layout): prevent layout shift on Android browsers, closes #1979 (#1980) 2025-09-06 18:13:02 +02:00
Huang Xin ff0443ace7 compat: fixed zoom level handling on iOS and macOS, closes #1784 (#1978) 2025-09-06 16:07:06 +02:00
Huang Xin cc3cc58de0 release: version 0.9.78 (#1975) 2025-09-06 10:50:18 +02:00
Huang Xin 80d60266c2 settings: default to override background color in fixed layout documents (#1974) 2025-09-06 10:40:18 +02:00
54wedge f06cdb5899 txt: nest chapters inside volumes when converting to epub (#1972)
* txt: nest chapters inside volumes

* txt: readability

* txt: format
2025-09-06 10:28:26 +02:00
Huang Xin dfe68988aa fix(kosync): use 1-based indices in xpointer, closes #1968 (#1973) 2025-09-06 07:40:32 +02:00
Huang Xin d0264de3eb compat: more accessible iframes for PDFs, closes #1136 (#1971) 2025-09-05 18:56:15 +02:00
Huang Xin 77c4303938 feat(pdf): support setting zoom level, zoom mode and spread mode for PDF (#1969)
This should close #1717, close #1276, close #669.
2025-09-05 18:20:15 +02:00
Huang Xin 5724d2eeec feat(tts): support going previous/next by sentence in bottom TTS bar, closes #1816 (#1967) 2025-09-05 10:34:30 +02:00
54wedge 64007b1188 txt: improve zh chapter extraction (#1966)
* txt: improve zh chapter extraction

* txt: fix regexp

* txt: one more keyword
2025-09-05 10:31:26 +02:00
Huang Xin 50ee7bd8be doc: change badge colors for last commit and commit activity 2025-09-04 11:44:11 +02:00
Huang Xin 2bcbde4bf1 doc: fixed badge-language-coverage URL encoding 2025-09-04 11:39:27 +02:00
Huang Xin 99f75dd3b6 i18n: add Bengali(BN), Sinhala (SI) and Tamil (TA) translations (#1965) 2025-09-04 11:37:29 +02:00
Huang Xin 2b9132b4a8 feat(translator): preprocess some common mistranslated publishing terms (#1964) 2025-09-04 09:38:17 +02:00
Huang Xin 82782be16e fix: prevent layout shift when virtual keyboard pops up on Android, closes #1959 (#1963) 2025-09-04 08:04:51 +02:00
Huang Xin 7067129887 fix(tts): fixed headings cannot be highlighted in TTS (#1955) 2025-09-03 16:42:59 +02:00
Huang Xin 6e706ac8f7 feat: add inline editor for bookmarks in the sidebar, closes #1909 (#1954) 2025-09-03 11:06:35 +02:00
Huang Xin 39b902c927 epub: parse correct book front cover for some EPUBs, closes #1913 (#1953) 2025-09-03 07:50:26 +02:00
Huang Xin 94a9cd7c9d doc: update README and add link of readest subreddit (#1952) 2025-09-03 07:24:54 +02:00
Huang Xin 0dae7db140 fix: improved sensitivity of text selection with stylus, closes #706 (#1950) 2025-09-02 18:51:45 +02:00
Huang Xin 32954e025c fix(tts): media control in the lock screen and with airpods for iOS, closes #1407 (#1949) 2025-09-02 17:24:16 +02:00
Huang Xin 61dda9a517 feat: group custom fonts into families, closes #1934 (#1945) 2025-09-01 17:49:46 +02:00
Huang Xin 99a4cb50ac feat: add an option to show persistent TTS bar at the bottom, closes #1818 (#1944) 2025-09-01 14:23:28 +02:00
Huang Xin f4b00d6dec fix: get rid of invalid grid insets (#1943) 2025-09-01 07:05:48 +02:00
Huang Xin f69422a61c fix: conditional Back key interception on Android (#1942) 2025-09-01 06:16:31 +02:00
Huang Xin 7f4c157a90 chore: build with install package permission by default for Android (#1939) 2025-08-31 16:53:29 +02:00
Huang Xin 7d9724ff8b fix: close books with the system back key on Android, closes #1933 (#1938) 2025-08-31 10:15:28 +02:00
Huang Xin 06db7f36f8 refactor: rename ConfirmSyncDialog to KOSyncResolver (#1937) 2025-08-31 05:46:43 +02:00
Huang Xin f0c249bce2 release: version 0.9.76 (#1932) 2025-08-30 06:19:01 +02:00
Huang Xin e8a96fba95 compat: more compat with window insets on Android (#1931) 2025-08-30 06:18:06 +02:00
Huang Xin 92b01c40a0 layout: fix grouping modal not shown on Linux (#1930) 2025-08-30 05:28:02 +02:00
Huang Xin 6003eeadba compat: support more kosync server implementations, closes #1862 (#1929) 2025-08-30 04:54:31 +02:00
Huang Xin 856ed4d3b3 ux: add splash screen for iOS and Android and reduce flash when opening books (#1926) 2025-08-29 19:10:09 +02:00
Huang Xin 267fe58a8c fix: reduce screen flash with different background colors when app starts, closes #1915 (#1922) 2025-08-28 20:02:53 +02:00
Huang Xin 1b00d8c41c fix: support importing azw3 files on Android, closes #1920 (#1921) 2025-08-28 16:11:30 +02:00
Huang Xin cb126613b1 perf(sync): incremental sync of library books (#1917) 2025-08-27 19:04:57 +02:00
Huang Xin 515bfee2a1 fix(kosync): normalize xpointer to improve KOReader sync tolerance, closes #1857 (#1914) 2025-08-27 09:18:32 +02:00
Huang Xin 584f3511f8 refactor(kosync): move kosync into reader sidebar menu and add manual pull/push trigger (#1912) 2025-08-27 13:32:00 +08:00
Huang Xin 3ea54e6725 fix: display hidden footnotes, closes #1847 (#1907) 2025-08-26 12:45:12 +02:00
Huang Xin 48212d892f fonts: purge custom fonts when reseting fonts config (#1906) 2025-08-26 11:23:34 +02:00
Huang Xin 977c61b914 refactor: use useFileSelector hook for all file selection (#1905) 2025-08-26 10:04:10 +02:00
Huang Xin 66fceb2313 chore: add 10MB of grace bytes for storage quota (#1904) 2025-08-26 07:28:15 +02:00
Huang Xin 76feefff00 layout: fix overflow of some font names in custom fonts, closes #1901 (#1903) 2025-08-26 06:35:43 +02:00
Huang Xin 1be43ff704 fix: close reader window when trying to go to library in separate reader window, closes #1899 (#1900) 2025-08-25 18:01:06 +02:00
Huang Xin b6d4a547e5 chore: fix typo (#1898) 2025-08-25 09:41:36 +02:00
Huang Xin 5ee860f1e8 refactor: use safe insets from native for Android, closes #1793 and closes #1886 (#1897) 2025-08-25 09:38:49 +02:00
dependabot[bot] 0b01132d88 chore(deps): bump actions/setup-java in the github-actions group (#1896)
Bumps the github-actions group with 1 update: [actions/setup-java](https://github.com/actions/setup-java).


Updates `actions/setup-java` from 4 to 5
- [Release notes](https://github.com/actions/setup-java/releases)
- [Commits](https://github.com/actions/setup-java/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/setup-java
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-25 09:13:58 +02:00
Huang Xin b98c487919 theme: fix themed background color for PDFs on macOS, closes #1887 (#1894) 2025-08-24 08:29:45 +02:00
Huang Xin b43b08d423 fix: init traffic light properly in library page on macOS, closes #1872 (#1891) 2025-08-24 06:33:52 +02:00
Huang Xin 3ddb6e6422 fix: handle some cases where footnote is empty, closes #1880 (#1883) 2025-08-23 10:28:51 +02:00
Huang Xin ea9146be5b fonts: parse font family as well as font style when importing fonts, closes #1876 (#1881) 2025-08-23 10:27:58 +02:00
Huang Xin 78cb1f45e4 chore: fix workflow dependency for release (#1874) 2025-08-22 17:51:01 +02:00
298 changed files with 15391 additions and 4289 deletions
+7 -1
View File
@@ -19,6 +19,7 @@ jobs:
with:
toolchain: stable
override: true
components: rustfmt, clippy
- name: Install system dependencies
run: |
sudo apt-get update
@@ -48,7 +49,7 @@ jobs:
version: 10.14.0
- name: setup node
uses: actions/setup-node@v4
uses: actions/setup-node@v5
with:
node-version: 22
cache: pnpm
@@ -72,6 +73,11 @@ jobs:
run: |
pnpm test -- --watch=false
- name: run lint
working-directory: apps/readest-app
run: |
pnpm lint
- name: build the web App
if: matrix.config.platform == 'web'
working-directory: apps/readest-app
+40 -15
View File
@@ -19,12 +19,12 @@ jobs:
steps:
- uses: actions/checkout@v5
- name: setup node
uses: actions/setup-node@v4
uses: actions/setup-node@v5
- name: get version
run: echo "PACKAGE_VERSION=$(node -p "require('./apps/readest-app/package.json').version")" >> $GITHUB_ENV
- name: get release
id: get-release
uses: actions/github-script@v7
uses: actions/github-script@v8
with:
script: |
const { data } = await github.rest.repos.getLatestRelease({
@@ -35,7 +35,7 @@ jobs:
core.setOutput('release_tag', data.tag_name);
- name: get release notes
id: get-release-notes
uses: actions/github-script@v7
uses: actions/github-script@v8
with:
script: |
const fs = require('fs');
@@ -57,7 +57,7 @@ jobs:
steps:
- name: update release
id: update-release
uses: actions/github-script@v7
uses: actions/github-script@v8
env:
release_id: ${{ needs.get-release.outputs.release_id }}
release_tag: ${{ needs.get-release.outputs.release_tag }}
@@ -81,6 +81,28 @@ jobs:
prerelease: false
})
build-koreader-plugin:
needs: get-release
permissions:
contents: write
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- name: create KOReader plugin zip
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
version=${{ needs.get-release.outputs.release_version }}
plugin_zip="Readest-${version}-1.koplugin.zip"
cd apps/readest.koplugin
zip -r ../../${plugin_zip} .
cd ../..
echo "Uploading ${plugin_zip} to GitHub release"
gh release upload ${{ needs.get-release.outputs.release_tag }} ${plugin_zip} --clobber
build-tauri:
needs: get-release
permissions:
@@ -135,14 +157,14 @@ jobs:
version: 10.14.0
- name: setup node
uses: actions/setup-node@v4
uses: actions/setup-node@v5
with:
node-version: 22
cache: pnpm
- name: setup Java (for Android build only)
if: matrix.config.release == 'android'
uses: actions/setup-java@v4
uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: '17'
@@ -153,7 +175,7 @@ jobs:
- name: install NDK (for Android build only)
if: matrix.config.release == 'android'
run: sdkmanager "ndk;27.0.11902837"
run: sdkmanager "ndk;28.2.13676358"
- name: install dependencies
run: pnpm install
@@ -200,7 +222,7 @@ jobs:
if: matrix.config.release == 'android'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NDK_HOME: ${{ env.ANDROID_HOME }}/ndk/27.0.11902837
NDK_HOME: ${{ env.ANDROID_HOME }}/ndk/28.2.13676358
TAURI_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
TAURI_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
run: |
@@ -210,11 +232,6 @@ jobs:
pnpm tauri icon ../../data/icons/readest-book.png
git checkout .
MANIFEST="src-tauri/gen/android/app/src/main/AndroidManifest.xml"
PERMISSION_LINE='<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>'
grep -q 'REQUEST_INSTALL_PACKAGES' "$MANIFEST" || \
sed -i "/android.permission.INTERNET/a \ $PERMISSION_LINE" "$MANIFEST"
pushd src-tauri/gen/android
echo "keyAlias=${{ secrets.ANDROID_KEY_ALIAS }}" > keystore.properties
echo "password=${{ secrets.ANDROID_KEY_PASSWORD }}" >> keystore.properties
@@ -293,12 +310,20 @@ jobs:
echo "Uploading release notes to GitHub release"
gh release upload ${{ needs.get-release.outputs.release_tag }} apps/readest-app/release-notes.json --clobber
- name: upload portable binaries (Windows only)
- name: build and upload portable binaries (Windows only)
if: matrix.config.os == 'windows-latest'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
shell: bash
run: |
echo "Building Portable Binaries"
pushd apps/readest-app/
echo "NEXT_PUBLIC_PORTABLE_APP=true" >> .env.local
pnpm tauri build
popd
echo "Uploading Portable Binaries"
arch=${{ matrix.config.arch }}
version=${{ needs.get-release.outputs.release_version }}
@@ -322,7 +347,7 @@ jobs:
gh release upload ${{ needs.get-release.outputs.release_tag }} $bin_file --clobber
upload-to-r2:
needs: [get-release, update-release]
needs: [get-release, build-tauri]
uses: ./.github/workflows/upload-to-r2.yml
with:
tag: ${{ needs.get-release.outputs.release_tag }}
Generated
+575 -557
View File
File diff suppressed because it is too large Load Diff
-7
View File
@@ -4,9 +4,6 @@ members = [
"packages/tauri/crates/tauri",
"packages/tauri/crates/tauri-utils",
"packages/tauri/crates/tauri-build",
"packages/tauri-plugins/plugins/fs",
"packages/tauri-plugins/plugins/dialog",
"packages/tauri-plugins/plugins/deep-link",
]
resolver = "2"
@@ -38,7 +35,3 @@ rust-version = "1.77.2"
tauri = { path = "packages/tauri/crates/tauri" }
tauri-utils = { path = "packages/tauri/crates/tauri-utils" }
tauri-build = { path = "packages/tauri/crates/tauri-build" }
tauri-plugin-os = { path = "packages/tauri-plugins/plugins/os" }
tauri-plugin-fs = { path = "packages/tauri-plugins/plugins/fs" }
tauri-plugin-dialog = { path = "packages/tauri-plugins/plugins/dialog" }
tauri-plugin-deep-link = { path = "packages/tauri-plugins/plugins/deep-link" }
+40 -36
View File
@@ -11,14 +11,15 @@
[![Web App][badge-web-app]][link-web-readest]
[![OS][badge-platforms]][link-website]
<br>
[![][badge-hellogithub]][link-hellogithub]
[![][badge-discord]][link-discord]
[![Discord][badge-discord]][link-discord]
[![Reddit][badge-reddit]][link-reddit]
[![AGPL Licence][badge-license]](LICENSE)
[![Latest release][badge-release]][link-gh-releases]
[![Language Coverage][badge-language-coverage]]()
[![Donate][badge-donate]][link-donate]
<br>
[![Latest release][badge-release]][link-gh-releases]
[![Last commit][badge-last-commit]][link-gh-commits]
[![Commits][badge-commit-activity]][link-gh-pulse]
[![][badge-hellogithub]][link-hellogithub]
[![Ask DeepWiki][badge-deepwiki]][link-deepwiki]
</div>
@@ -44,39 +45,38 @@
<div align="left">✅ Implemented</div>
| **Feature** | **Description** | **Status** |
| --------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------- |
| **Multi-Format Support** | Support EPUB, MOBI, KF8 (AZW3), FB2, CBZ, TXT, PDF (experimental) | ✅ |
| **Scroll/Page View Modes** | Switch between scrolling or paginated reading modes. | ✅ |
| **Full-Text Search** | Search across the entire book to find relevant sections. | ✅ |
| **Annotations and Highlighting** | Add highlights, bookmarks, and notes to enhance your reading experience. | ✅ |
| **Excerpt Text for Note-Taking** | Easily excerpt text from books for detailed notes and analysis. | ✅ |
| **Dictionary/Wikipedia Lookup** | Instantly look up words and terms when reading. | ✅ |
| **[Parallel Read][link-parallel-read]** | Read two books or documents simultaneously in a split-screen view. | ✅ |
| **Customize Font and Layout** | Adjust font, layout, theme mode, and theme colors for a personalized experience. | ✅ |
| **File Association and Open With** | Quickly open files in Readest in your file browser with one-click. | ✅ |
| **Sync across Platforms** | Synchronize book files, reading progress, notes, and bookmarks across all supported platforms. | ✅ |
| **Translate with DeepL** | From a single sentence to the entire book—translate instantly with DeepL. | ✅ |
| **Translate with Yandex** | Instantly translate text or books using Yandex Translate. | ✅ |
| **Text-to-Speech (TTS) Support** | Enjoy smooth, multilingual narration—even within a single book. | ✅ |
| **Library Management** | Organize, sort, and manage your entire ebook library. | ✅ |
| **Code Syntax Highlighting** | Read software manuals with rich coloring of code examples. | ✅ |
| **Feature** | **Description** | **Status** |
| --------------------------------------- | -------------------------------------------------------------------------------------------------------------- | ---------- |
| **Multi-Format Support** | Support EPUB, MOBI, KF8 (AZW3), FB2, CBZ, TXT, PDF (experimental) | ✅ |
| **Scroll/Page View Modes** | Switch between scrolling or paginated reading modes. | ✅ |
| **Full-Text Search** | Search across the entire book to find relevant sections. | ✅ |
| **Annotations and Highlighting** | Add highlights, bookmarks, and notes to enhance your reading experience. | ✅ |
| **Excerpt Text for Note-Taking** | Easily excerpt text from books for detailed notes and analysis. | ✅ |
| **Dictionary/Wikipedia Lookup** | Instantly look up words and terms when reading. | ✅ |
| **[Parallel Read][link-parallel-read]** | Read two books or documents simultaneously in a split-screen view. | ✅ |
| **Customize Font and Layout** | Adjust font, layout, theme mode, and theme colors for a personalized experience. | ✅ |
| **File Association and Open With** | Quickly open files in Readest in your file browser with one-click. | ✅ |
| **Sync across Platforms** | Synchronize book files, reading progress, notes, and bookmarks across all supported platforms. | ✅ |
| **Accessibility** | Provides full keyboard navigation and supports for screen readers such as VoiceOver, TalkBack, NVDA, and Orca. | ✅ |
| **Translate with DeepL and Yandex** | From a single sentence to the entire book—translate instantly. | ✅ |
| **Text-to-Speech (TTS) Support** | Enjoy smooth, multilingual narration—even within a single book. | ✅ |
| **Library Management** | Organize, sort, and manage your entire ebook library. | ✅ |
| **Code Syntax Highlighting** | Read software manuals with rich coloring of code examples. | ✅ |
## Planned Features
<div align="left">🛠 Building</div>
<div align="left">🔄 Planned</div>
| **Feature** | **Description** | **Priority** |
| ------------------------------- | ------------------------------------------------------------------------------------------ | ------------ |
| **Sync with Koreader** | Synchronize reading progress, notes, and bookmarks with [Koreader][link-koreader] devices. | 🛠 |
| **AI-Powered Summarization** | Generate summaries of books or chapters using AI for quick insights. | 🛠 |
| **Keyboard Navigation** | Implement vimium-style keybindings for book navigation. | 🔄 |
| **Support OPDS/Calibre** | Integrate OPDS/Calibre to access online libraries and catalogs. | 🔄 |
| **Audiobook Support** | Extend functionality to play and manage audiobooks. | 🔄 |
| **Handwriting Annotations** | Add support for handwriting annotations using a pen on compatible devices. | 🔄 |
| **Advanced Reading Stats** | Track reading time, pages read, and more for detailed insights. | 🔄 |
| **In-Library Full-Text Search** | Search across your entire ebook library to find topics and quotes. | 🔄 |
| **Feature** | **Description** | **Priority** |
| ------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------ |
| [**Sync with Koreader**][link-kosync-wiki] | Synchronize reading progress, notes, and bookmarks with [Koreader][link-koreader] devices. | 🛠 |
| **AI-Powered Summarization** | Generate summaries of books or chapters using AI for quick insights. | 🛠 |
| **Support OPDS/Calibre** | Integrate OPDS/Calibre to access online libraries and catalogs. | 🔄 |
| **Audiobook Support** | Extend functionality to play and manage audiobooks. | 🔄 |
| **Handwriting Annotations** | Add support for handwriting annotations using a pen on compatible devices. | 🔄 |
| **Advanced Reading Stats** | Track reading time, pages read, and more for detailed insights. | 🔄 |
| **In-Library Full-Text Search** | Search across your entire ebook library to find topics and quotes. | 🔄 |
Stay tuned for continuous improvements and updates! Contributions and suggestions are always welcome—let's build the ultimate reading experience together. 😊
@@ -109,9 +109,9 @@ Stay tuned for continuous improvements and updates! Contributions and suggestion
### Platform-Specific Downloads
- macOS / iOS / iPadOS : Search for "Readest" on the [App Store][link-appstore], also available on TestFlight for beta test (send your Apple ID to <readestapp@gmail.com> to request access).
- Windows / Linux / Android: Visit [https://readest.com][link-website] or the [Releases on GitHub][link-gh-releases].
- Web: Visit [https://web.readest.com][link-web-readest].
- macOS / iOS / iPadOS : Search and install **Readest** on the [App Store][link-appstore], _also_ available on TestFlight for beta test (send your Apple ID to <readestapp@gmail.com> to request access).
- Windows / Linux / Android: Visit and download **Readest** at [https://readest.com][link-website] or the [Releases on GitHub][link-gh-releases].
- Web: Visit and use **Readest for Web** at [https://web.readest.com][link-web-readest].
## Requirements
@@ -303,12 +303,14 @@ The following fonts are utilized in this software, either bundled within the app
[badge-license]: https://img.shields.io/github/license/readest/readest?color=teal
[badge-release]: https://img.shields.io/github/release/readest/readest?color=green
[badge-platforms]: https://img.shields.io/badge/platforms-macOS%2C%20Windows%2C%20Linux%2C%20Android%2C%20iOS%2C%20Web%2C%20PWA-green
[badge-last-commit]: https://img.shields.io/github/last-commit/readest/readest?color=green
[badge-commit-activity]: https://img.shields.io/github/commit-activity/m/readest/readest
[badge-last-commit]: https://img.shields.io/github/last-commit/readest/readest?color=blue
[badge-commit-activity]: https://img.shields.io/github/commit-activity/m/readest/readest?color=blue
[badge-discord]: https://img.shields.io/discord/1314226120886976544?color=5865F2&label=discord&labelColor=black&logo=discord&logoColor=white&style=flat-square
[badge-hellogithub]: https://abroad.hellogithub.com/v1/widgets/recommend.svg?rid=8a5b6ade2aee461a8bd94e59200682a7&claim_uid=eRLUbPOy2qZtDgw&theme=small
[badge-donate]: https://donate.readest.com/badge.svg
[badge-deepwiki]: https://deepwiki.com/badge.svg
[badge-reddit]: https://img.shields.io/reddit/subreddit-subscribers/readest?style=flat&logo=reddit&color=F37E41
[badge-language-coverage]: https://img.shields.io/badge/coverage-52%25%20population%20🌍-green
[link-donate]: https://donate.readest.com/?tickers=btc%2Ceth%2Csol%2Cusdc
[link-appstore]: https://apps.apple.com/app/apple-store/id6738622779?pt=127463130&ct=github&mt=8
[link-website]: https://readest.com?utm_source=github&utm_medium=referral&utm_campaign=readme
@@ -322,3 +324,5 @@ The following fonts are utilized in this software, either bundled within the app
[link-koreader]: https://github.com/koreader/koreader
[link-hellogithub]: https://hellogithub.com/repository/8a5b6ade2aee461a8bd94e59200682a7
[link-deepwiki]: https://deepwiki.com/readest/readest
[link-kosync-wiki]: https://github.com/readest/readest/wiki/Sync-with-Koreader-devices
[link-reddit]: https://reddit.com/r/readest/
+20 -8
View File
@@ -1,13 +1,25 @@
import path from "node:path";
import { fileURLToPath } from "node:url";
import js from "@eslint/js";
import { FlatCompat } from "@eslint/eslintrc";
import path from 'node:path';
import js from '@eslint/js';
import jsxA11y from 'eslint-plugin-jsx-a11y';
import { fileURLToPath } from 'node:url';
import { FlatCompat } from '@eslint/eslintrc';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const compat = new FlatCompat({
baseDirectory: __dirname,
recommendedConfig: js.configs.recommended,
allConfig: js.configs.all
baseDirectory: __dirname,
recommendedConfig: js.configs.recommended,
allConfig: js.configs.all,
});
export default [...compat.extends("next/core-web-vitals", "next/typescript")];
export default [
...compat.extends('next/core-web-vitals', 'next/typescript'),
{
plugins: {
'jsx-a11y': jsxA11y,
},
rules: {
...jsxA11y.configs.recommended.rules,
},
},
];
@@ -18,6 +18,7 @@ module.exports = {
'ko',
'uk',
'nl',
'sv',
'pl',
'pt',
'ru',
@@ -28,6 +29,9 @@ module.exports = {
'ar',
'th',
'bo',
'bn',
'ta',
'si',
'zh-CN',
'zh-TW',
],
+14 -12
View File
@@ -1,12 +1,12 @@
{
"name": "@readest/readest-app",
"version": "0.9.75",
"version": "0.9.85",
"private": true,
"scripts": {
"dev": "dotenv -e .env.tauri -- next dev",
"dev": "dotenv -e .env.tauri -- next dev --turbopack",
"build": "dotenv -e .env.tauri -- next build",
"start": "dotenv -e .env.tauri -- next start",
"dev-web": "dotenv -e .env.web -- next dev",
"dev-web": "dotenv -e .env.web -- next dev --turbopack",
"build-web": "dotenv -e .env.web -- next build",
"start-web": "dotenv -e .env.web -- next start",
"i18n:extract": "i18next-scanner",
@@ -55,16 +55,16 @@
"@supabase/supabase-js": "^2.55.0",
"@tauri-apps/api": "2.8.0",
"@tauri-apps/plugin-cli": "^2.4.0",
"@tauri-apps/plugin-deep-link": "^2.4.1",
"@tauri-apps/plugin-dialog": "^2.3.2",
"@tauri-apps/plugin-fs": "^2.4.1",
"@tauri-apps/plugin-deep-link": "^2.4.3",
"@tauri-apps/plugin-dialog": "^2.4.0",
"@tauri-apps/plugin-fs": "^2.4.2",
"@tauri-apps/plugin-haptics": "^2.3.0",
"@tauri-apps/plugin-http": "^2.5.1",
"@tauri-apps/plugin-log": "^2.6.0",
"@tauri-apps/plugin-opener": "^2.4.0",
"@tauri-apps/plugin-os": "^2.3.0",
"@tauri-apps/plugin-http": "^2.5.2",
"@tauri-apps/plugin-log": "^2.7.0",
"@tauri-apps/plugin-opener": "^2.5.0",
"@tauri-apps/plugin-os": "^2.3.1",
"@tauri-apps/plugin-process": "^2.3.0",
"@tauri-apps/plugin-shell": "~2.3.0",
"@tauri-apps/plugin-shell": "~2.3.1",
"@tauri-apps/plugin-updater": "^2.9.0",
"@zip.js/zip.js": "^2.7.53",
"app-store-server-api": "^0.17.1",
@@ -105,7 +105,7 @@
"devDependencies": {
"@next/bundle-analyzer": "^15.4.2",
"@tailwindcss/typography": "^0.5.16",
"@tauri-apps/cli": "2.8.1",
"@tauri-apps/cli": "2.8.4",
"@testing-library/dom": "^10.4.0",
"@testing-library/react": "^16.3.0",
"@types/cors": "^2.8.17",
@@ -120,11 +120,13 @@
"@types/uuid": "^10.0.0",
"@vitejs/plugin-react": "^4.7.0",
"autoprefixer": "^10.4.20",
"caniuse-lite": "^1.0.30001746",
"cpx2": "^8.0.0",
"daisyui": "^4.12.24",
"dotenv-cli": "^7.4.4",
"eslint": "^9.16.0",
"eslint-config-next": "15.0.3",
"eslint-plugin-jsx-a11y": "^6.10.2",
"i18next-scanner": "^4.6.0",
"jsdom": "^26.1.0",
"mkdirp": "^3.0.1",
Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 437 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 332 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 449 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 418 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 318 KiB

@@ -81,7 +81,6 @@
"Search...": "بحث...",
"Select Book": "تحديد الكتاب",
"Select Books": "تحديد الكتب",
"Select Multiple Books": "تحديد عدة كتب",
"Sepia": "بني داكن",
"Serif Font": "خط مذيل (Serif)",
"Show Book Details": "عرض تفاصيل الكتاب",
@@ -117,6 +116,7 @@
"Book Details": "تفاصيل الكتاب",
"From Local File": "من ملف محلي",
"TOC": "جدول المحتويات",
"Table of Contents": "جدول المحتويات",
"Book uploaded: {{title}}": "تم تحميل الكتاب: {{title}}",
"Failed to upload book: {{title}}": "فشل تحميل الكتاب: {{title}}",
"Book downloaded: {{title}}": "تم تنزيل الكتاب: {{title}}",
@@ -344,7 +344,6 @@
"Left Margin (px)": "الهامش الأيسر (بكسل)",
"Column Gap (%)": "تباعد الأعمدة (%)",
"Always Show Status Bar": "دائمًا إظهار شريط الحالة",
"Translation Not Available": "الترجمة غير متاحة",
"Custom Content CSS": "CSS مخصص للمحتوى",
"Enter CSS for book content styling...": "أدخل CSS لتنسيق محتوى الكتاب...",
"Custom Reader UI CSS": "CSS مخصص لواجهة القارئ",
@@ -459,7 +458,6 @@
"Google Books": "كتب جوجل",
"Open Library": "المكتبة المفتوحة",
"Fiction, Science, History": "خيال، علوم، تاريخ",
"Select Cover Image": "اختر صورة الغلاف",
"Open Book in New Window": "فتح الكتاب في نافذة جديدة",
"Voices for {{lang}}": "الأصوات لـ {{lang}}",
"Yandex Translate": "ترجمة Yandex",
@@ -495,12 +493,10 @@
"Always use latest": "استخدام الأحدث دائمًا",
"Send changes only": "إرسال التغييرات فقط",
"Receive changes only": "استلام التغييرات فقط",
"Disabled": "معطل",
"Checksum Method": "طريقة التحقق من الصحة",
"File Content (recommended)": "محتوى الملف (موصى به)",
"File Name": "اسم الملف",
"Device Name": "اسم الجهاز",
"Sync Tolerance": "تحمل المزامنة",
"Connect to your KOReader Sync server.": "الاتصال بخادم مزامنة KOReader الخاص بك.",
"Server URL": "عنوان URL للخادم",
"Username": "اسم المستخدم",
@@ -519,7 +515,6 @@
"Approximately {{percentage}}%": "تقريبًا {{percentage}}%",
"Failed to connect": "فشل في الاتصال",
"Sync Server Connected": "تم الاتصال بخادم المزامنة",
"Precision: {{precision}} digits after the decimal": "الدقة: {{precision}} أرقام بعد الفاصلة",
"Sync as {{userDisplayName}}": "المزامنة كـ {{userDisplayName}}",
"Custom Fonts": "الخطوط المخصصة",
"Cancel Delete": "إلغاء الحذف",
@@ -533,5 +528,99 @@
"Select Video": "حدد فيديو",
"Select Audio": "حدد صوت",
"Select Fonts": "حدد الخطوط",
"Supported font formats: .ttf, .odf, .woff, .woff2": "تنسيقات الخط المدعومة: .ttf، .odf، .woff، .woff2"
"Supported font formats: .ttf, .otf, .woff, .woff2": "تنسيقات الخط المدعومة: .ttf، .otf، .woff، .woff2",
"Push Progress": "تقدم الدفع",
"Pull Progress": "تقدم السحب",
"Previous Paragraph": "الفقرة السابقة",
"Previous Sentence": "الجملة السابقة",
"Pause": "إيقاف مؤقت",
"Play": "تشغيل",
"Next Sentence": "الجملة التالية",
"Next Paragraph": "الفقرة التالية",
"Separate Cover Page": "صفحة غلاف منفصلة",
"Resize Notebook": "تغيير حجم المفكرة",
"Resize Sidebar": "تغيير حجم الشريط الجانبي",
"Get Help from the Readest Community": "الحصول على المساعدة من مجتمع ريديست",
"Remove cover image": "إزالة صورة الغلاف",
"Bookshelf": "رف الكتب",
"View Menu": "عرض القائمة",
"Settings Menu": "إعدادات القائمة",
"View account details and quota": "عرض تفاصيل الحساب والحصة المخصصة",
"Library Header": "رأس المكتبة",
"Book Content": "محتوى الكتاب",
"Footer Bar": "شريط التذييل",
"Header Bar": "شريط الرأس",
"View Options": "خيارات العرض",
"Book Menu": "قائمة الكتاب",
"Search Options": "خيارات البحث",
"Close": "إغلاق",
"Delete Book Options": "خيارات حذف الكتاب",
"ON": "تشغيل",
"OFF": "إيقاف",
"Reading Progress": "تقدم القراءة",
"Page Margin": "هامش الصفحة",
"Remove Bookmark": "إزالة العلامة",
"Add Bookmark": "إضافة علامة",
"Books Content": "محتوى الكتب",
"Jump to Location": "الانتقال إلى الموقع",
"Unpin Notebook": "إلغاء تثبيت المفكرة",
"Pin Notebook": "تثبيت المفكرة",
"Hide Search Bar": "إخفاء شريط البحث",
"Show Search Bar": "إظهار شريط البحث",
"On {{current}} of {{total}} page": "على الصفحة {{current}} من {{total}}",
"Section Title": "عنوان القسم",
"Decrease": "تقليل",
"Increase": "زيادة",
"Settings Panels": "لوحات الإعدادات",
"Settings": "الإعدادات",
"Unpin Sidebar": "إلغاء تثبيت الشريط الجانبي",
"Pin Sidebar": "تثبيت الشريط الجانبي",
"Toggle Sidebar": "تبديل الشريط الجانبي",
"Toggle Translation": "تبديل الترجمة",
"Translation Disabled": "تم تعطيل الترجمة",
"Minimize": "تصغير",
"Maximize or Restore": "تكبير أو استعادة",
"Exit Parallel Read": "الخروج من القراءة المتزامنة",
"Enter Parallel Read": "الدخول في القراءة المتزامنة",
"Zoom Level": "مستوى التكبير",
"Zoom Out": "تصغير",
"Reset Zoom": "إعادة تعيين التكبير",
"Zoom In": "تكبير",
"Zoom Mode": "وضع التكبير",
"Single Page": "صفحة واحدة",
"Auto Spread": "انتشار تلقائي",
"Fit Page": "تناسب الصفحة",
"Fit Width": "تناسب العرض",
"Failed to select directory": "فشل في اختيار الدليل",
"The new data directory must be different from the current one.": "يجب أن يكون دليل البيانات الجديد مختلفًا عن الدليل الحالي.",
"Migration failed: {{error}}": "فشل في الترحيل: {{error}}",
"Change Data Location": "تغيير موقع البيانات",
"Current Data Location": "موقع البيانات الحالي",
"Total size: {{size}}": "الحجم الكلي: {{size}}",
"Calculating file info...": "جارٍ حساب معلومات الملف...",
"New Data Location": "موقع البيانات الجديد",
"Choose Different Folder": "اختر مجلدًا مختلفًا",
"Choose New Folder": "اختر مجلدًا جديدًا",
"Migrating data...": "جارٍ ترحيل البيانات...",
"Copying: {{file}}": "جارٍ نسخ: {{file}}",
"{{current}} of {{total}} files": "{{current}} من {{total}} ملف",
"Migration completed successfully!": "اكتمل الترحيل بنجاح!",
"Your data has been moved to the new location. Please restart the application to complete the process.": "تم نقل بياناتك إلى الموقع الجديد. يرجى إعادة تشغيل التطبيق لإكمال العملية.",
"Migration failed": "فشل في الترحيل",
"Important Notice": "إشعار مهم",
"This will move all your app data to the new location. Make sure the destination has enough free space.": "سيؤدي ذلك إلى نقل جميع بيانات التطبيق الخاصة بك إلى الموقع الجديد. تأكد من أن الوجهة تحتوي على مساحة خالية كافية.",
"Restart App": "إعادة تشغيل التطبيق",
"Start Migration": "بدء الترحيل",
"Advanced Settings": "إعدادات متقدمة",
"File count: {{size}}": "عدد الملفات: {{size}}",
"Background Read Aloud": "قراءة بصوت عالٍ في الخلفية",
"Ready to read aloud": "جاهز للقراءة بصوت عالٍ",
"Read Aloud": "القراءة بصوت عالٍ",
"Screen Brightness": "سطوع الشاشة",
"Background Image": "صورة الخلفية",
"Import Image": "استيراد صورة",
"Opacity": "شفافية",
"Size": "حجم",
"Cover": "غطاء",
"Contain": "احتواء"
}
@@ -0,0 +1,610 @@
{
"Email address": "ইমেইল ঠিকানা",
"Your Password": "আপনার পাসওয়ার্ড",
"Your email address": "আপনার ইমেইল ঠিকানা",
"Your password": "আপনার পাসওয়ার্ড",
"Sign in": "সাইন ইন",
"Signing in...": "সাইন ইন করা হচ্ছে...",
"Sign in with {{provider}}": "{{provider}} দিয়ে সাইন ইন",
"Already have an account? Sign in": "ইতিমধ্যে অ্যাকাউন্ট আছে? সাইন ইন করুন",
"Create a Password": "একটি পাসওয়ার্ড তৈরি করুন",
"Sign up": "সাইন আপ",
"Signing up...": "সাইন আপ করা হচ্ছে...",
"Don't have an account? Sign up": "অ্যাকাউন্ট নেই? সাইন আপ করুন",
"Check your email for the confirmation link": "নিশ্চিতকরণ লিঙ্কের জন্য ইমেইল চেক করুন",
"Signing in ...": "সাইন ইন করা হচ্ছে...",
"Send a magic link email": "ম্যাজিক লিঙ্ক ইমেইল পাঠান",
"Check your email for the magic link": "ম্যাজিক লিঙ্কের জন্য ইমেইল চেক করুন",
"Send reset password instructions": "পাসওয়ার্ড রিসেট নির্দেশনা পাঠান",
"Sending reset instructions ...": "রিসেট নির্দেশনা পাঠানো হচ্ছে...",
"Forgot your password?": "পাসওয়ার্ড ভুলে গেছেন?",
"Check your email for the password reset link": "পাসওয়ার্ড রিসেট লিঙ্কের জন্য ইমেইল চেক করুন",
"Phone number": "ফোন নম্বর",
"Your phone number": "আপনার ফোন নম্বর",
"Token": "টোকেন",
"Your OTP token": "আপনার ওটিপি টোকেন",
"Verify token": "টোকেন যাচাই করুন",
"Sign in with Google": "গুগল দিয়ে সাইন ইন",
"Sign in with Apple": "অ্যাপল দিয়ে সাইন ইন",
"Sign in with GitHub": "গিটহাব দিয়ে সাইন ইন",
"New Password": "নতুন পাসওয়ার্ড",
"Your new password": "আপনার নতুন পাসওয়ার্ড",
"Update password": "পাসওয়ার্ড আপডেট করুন",
"Updating password ...": "পাসওয়ার্ড আপডেট করা হচ্ছে...",
"Your password has been updated": "আপনার পাসওয়ার্ড আপডেট হয়েছে",
"Something went wrong. Don't worry, our team has been notified and we're working on a fix.": "কিছু ভুল হয়েছে। চিন্তা করবেন না, আমাদের দল জানানো হয়েছে এবং আমরা সমাধানে কাজ করছি।",
"Error Details:": "ত্রুটির বিস্তারিত:",
"Try Again": "আবার চেষ্টা করুন",
"Go Back": "ফিরে যান",
"Your Library": "আপনার লাইব্রেরি",
"Need help?": "সাহায্য দরকার?",
"Contact Support": "সাপোর্টের সাথে যোগাযোগ",
"Open": "খুলুন",
"Group": "গ্রুপ",
"Details": "বিস্তারিত",
"Delete": "মুছুন",
"Cancel": "বাতিল",
"Confirm Deletion": "মুছে ফেলা নিশ্চিত করুন",
"Are you sure to delete {{count}} selected book(s)?_one": "আপনি কি নিশ্চিত যে নির্বাচিত বইটি মুছবেন?",
"Are you sure to delete {{count}} selected book(s)?_other": "আপনি কি নিশ্চিত যে {{count}}টি নির্বাচিত বই মুছবেন?",
"Deselect Book": "বই অনির্বাচিত করুন",
"Select Book": "বই নির্বাচন করুন",
"Show Book Details": "বইয়ের বিস্তারিত দেখান",
"Download Book": "বই ডাউনলোড করুন",
"Upload Book": "বই আপলোড করুন",
"Deselect Group": "গ্রুপ অনির্বাচিত করুন",
"Select Group": "গ্রুপ নির্বাচন করুন",
"Untitled Group": "নামবিহীন গ্রুপ",
"Group Books": "বই গ্রুপ করুন",
"Remove From Group": "গ্রুপ থেকে সরান",
"Create New Group": "নতুন গ্রুপ তৈরি করুন",
"Save": "সংরক্ষণ",
"Confirm": "নিশ্চিত করুন",
"From Local File": "স্থানীয় ফাইল থেকে",
"Search in {{count}} Book(s)..._one": "বইটিতে খুঁজুন...",
"Search in {{count}} Book(s)..._other": "{{count}}টি বইয়ে খুঁজুন...",
"Search Books...": "বই খুঁজুন...",
"Clear Search": "খোঁজ পরিষ্কার করুন",
"Import Books": "বই আমদানি করুন",
"Select Books": "বই নির্বাচন করুন",
"Deselect": "অনির্বাচিত করুন",
"Select All": "সব নির্বাচন করুন",
"Logged in as {{userDisplayName}}": "{{userDisplayName}} হিসেবে লগ ইন",
"Logged in": "লগ ইন করেছেন",
"Account": "অ্যাকাউন্ট",
"Sign In": "সাইন ইন",
"Auto Upload Books to Cloud": "স্বয়ংক্রিয় ক্লাউডে বই আপলোড",
"Auto Import on File Open": "ফাইল খোলার সময় স্বয়ংক্রিয় আমদানি",
"Open Last Book on Start": "শুরুতে শেষ বইটি খুলুন",
"Check Updates on Start": "শুরুতে আপডেট চেক করুন",
"Open Book in New Window": "নতুন উইন্ডোতে বই খুলুন",
"Fullscreen": "পূর্ণ স্ক্রিন",
"Always on Top": "সবসময় উপরে",
"Always Show Status Bar": "সবসময় স্ট্যাটাস বার দেখান",
"Keep Screen Awake": "স্ক্রিন জাগিয়ে রাখুন",
"Reload Page": "পৃষ্ঠা রিলোড করুন",
"Dark Mode": "ডার্ক মোড",
"Light Mode": "লাইট মোড",
"Auto Mode": "অটো মোড",
"Upgrade to Readest Premium": "রিডেস্ট প্রিমিয়ামে আপগ্রেড",
"Download Readest": "রিডেস্ট ডাউনলোড",
"About Readest": "রিডেস্ট সম্পর্কে",
"Help improve Readest": "রিডেস্ট উন্নত করতে সাহায্য করুন",
"Sharing anonymized statistics": "বেনামী পরিসংখ্যান শেয়ার করা",
"List": "তালিকা",
"Grid": "গ্রিড",
"Crop": "কাটুন",
"Fit": "ফিট",
"Title": "শিরোনাম",
"Author": "লেখক",
"Format": "ফরম্যাট",
"Date Read": "পড়ার তারিখ",
"Date Added": "যোগ করার তারিখ",
"Ascending": "ঊর্ধ্বক্রম",
"Descending": "অবতরণ ক্রম",
"Book Covers": "বইয়ের মলাট",
"Sort by...": "সাজানোর ভিত্তি...",
"No supported files found. Supported formats: {{formats}}": "কোন সমর্থিত ফাইল পাওয়া যায়নি। সমর্থিত ফরম্যাট: {{formats}}",
"No chapters detected.": "কোন অধ্যায় শনাক্ত হয়নি।",
"Failed to parse the EPUB file.": "EPUB ফাইল পার্স করতে ব্যর্থ।",
"This book format is not supported.": "এই বই ফরম্যাট সমর্থিত নয়।",
"Failed to import book(s): {{filenames}}": "বই আমদানি ব্যর্থ: {{filenames}}",
"Book uploaded: {{title}}": "বই আপলোড হয়েছে: {{title}}",
"Insufficient storage quota": "অপর্যাপ্ত স্টোরেজ কোটা",
"Failed to upload book: {{title}}": "বই আপলোড ব্যর্থ: {{title}}",
"Book downloaded: {{title}}": "বই ডাউনলোড হয়েছে: {{title}}",
"Failed to download book: {{title}}": "বই ডাউনলোড ব্যর্থ: {{title}}",
"Book deleted: {{title}}": "বই মুছে ফেলা হয়েছে: {{title}}",
"Deleted cloud backup of the book: {{title}}": "বইয়ের ক্লাউড ব্যাকআপ মুছে ফেলা হয়েছে: {{title}}",
"Deleted local copy of the book: {{title}}": "বইয়ের স্থানীয় কপি মুছে ফেলা হয়েছে: {{title}}",
"Failed to delete book: {{title}}": "বই মুছতে ব্যর্থ: {{title}}",
"Failed to delete cloud backup of the book: {{title}}": "বইয়ের ক্লাউড ব্যাকআপ মুছতে ব্যর্থ: {{title}}",
"Failed to delete local copy of the book: {{title}}": "বইয়ের স্থানীয় কপি মুছতে ব্যর্থ: {{title}}",
"Welcome to your library. You can import your books here and read them anytime.": "আপনার লাইব্রেরিতে স্বাগতম। আপনি এখানে বই আমদানি করে যেকোনো সময় পড়তে পারেন।",
"Copied to notebook": "নোটবুকে কপি করা হয়েছে",
"No annotations to export": "রপ্তানি করার জন্য কোন টীকা নেই",
"Exported from Readest": "রিডেস্ট থেকে রপ্তানি করা হয়েছে",
"Highlights & Annotations": "হাইলাইট ও টীকা",
"Untitled": "নামবিহীন",
"Note": "নোট",
"Copied to clipboard": "ক্লিপবোর্ডে কপি করা হয়েছে",
"Copy": "কপি",
"Delete Highlight": "হাইলাইট মুছুন",
"Highlight": "হাইলাইট",
"Annotate": "টীকা",
"Search": "খুঁজুন",
"Dictionary": "অভিধান",
"Wikipedia": "উইকিপিডিয়া",
"Translate": "অনুবাদ",
"Speak": "বলুন",
"Login Required": "লগইন প্রয়োজন",
"Quota Exceeded": "কোটা অতিক্রম",
"Unable to fetch the translation. Please log in first and try again.": "অনুবাদ আনতে পারছি না। প্রথমে লগইন করুন এবং আবার চেষ্টা করুন।",
"Unable to fetch the translation. Try again later.": "অনুবাদ আনতে পারছি না। পরে আবার চেষ্টা করুন।",
"Original Text": "মূল টেক্সট",
"Auto Detect": "স্বয়ংক্রিয় শনাক্তকরণ",
"(detected)": "(শনাক্ত)",
"Translated Text": "অনূদিত টেক্সট",
"System Language": "সিস্টেম ভাষা",
"Loading...": "লোড হচ্ছে...",
"No translation available.": "কোন অনুবাদ উপলব্ধ নয়।",
"Translated by {{provider}}.": "{{provider}} দ্বারা অনূদিত।",
"Bookmark": "বুকমার্ক",
"Next Section": "পরবর্তী বিভাগ",
"Previous Section": "পূর্ববর্তী বিভাগ",
"Next Page": "পরবর্তী পৃষ্ঠা",
"Previous Page": "পূর্ববর্তী পৃষ্ঠা",
"Go Forward": "এগিয়ে যান",
"Small": "ছোট",
"Large": "বড়",
"Sync Conflict": "সিঙ্ক দ্বন্দ্ব",
"Sync reading progress from \"{{deviceName}}\"?": "\"{{deviceName}}\" থেকে পড়ার অগ্রগতি সিঙ্ক করবেন?",
"another device": "অন্য ডিভাইস",
"Local Progress": "স্থানীয় অগ্রগতি",
"Remote Progress": "দূরবর্তী অগ্রগতি",
"Failed to connect": "সংযোগ ব্যর্থ",
"Disconnected": "সংযোগ বিচ্ছিন্ন",
"KOReader Sync Settings": "KOReader সিঙ্ক সেটিংস",
"Sync as {{userDisplayName}}": "{{userDisplayName}} হিসেবে সিঙ্ক",
"Sync Server Connected": "সিঙ্ক সার্ভার সংযুক্ত",
"Sync Strategy": "সিঙ্ক কৌশল",
"Ask on conflict": "দ্বন্দ্বে জিজ্ঞাসা করুন",
"Always use latest": "সবসময় সর্বশেষ ব্যবহার করুন",
"Send changes only": "শুধু পরিবর্তন পাঠান",
"Receive changes only": "শুধু পরিবর্তন গ্রহণ করুন",
"Checksum Method": "চেকসাম পদ্ধতি",
"File Content (recommended)": "ফাইল কন্টেন্ট (সুপারিশকৃত)",
"File Name": "ফাইলের নাম",
"Device Name": "ডিভাইসের নাম",
"Connect to your KOReader Sync server.": "আপনার KOReader সিঙ্ক সার্ভারে সংযোগ করুন।",
"Server URL": "সার্ভার URL",
"Username": "ইউজারনেম",
"Your Username": "আপনার ইউজারনেম",
"Password": "পাসওয়ার্ড",
"Connect": "সংযোগ",
"Notebook": "নোটবুক",
"No notes match your search": "আপনার খোঁজের সাথে কোন নোট মিলছে না",
"Excerpts": "উদ্ধৃতি",
"Notes": "নোট",
"Add your notes here...": "এখানে আপনার নোট যোগ করুন...",
"Search notes and excerpts...": "নোট ও উদ্ধৃতি খুঁজুন...",
"{{time}} min left in chapter": "অধ্যায়ে {{time}} মিনিট বাকি",
"{{count}} pages left in chapter_one": "অধ্যায়ে ১ পৃষ্ঠা বাকি",
"{{count}} pages left in chapter_other": "অধ্যায়ে {{count}} পৃষ্ঠা বাকি",
"Theme Mode": "থিম মোড",
"Invert Image In Dark Mode": "ডার্ক মোডে ছবি উল্টান",
"Override Book Color": "বইয়ের রঙ পরিবর্তন",
"Theme Color": "থিম রঙ",
"Custom": "কাস্টম",
"Code Highlighting": "কোড হাইলাইটিং",
"Enable Highlighting": "হাইলাইটিং সক্রিয়",
"Code Language": "কোড ভাষা",
"Auto": "অটো",
"Scroll": "স্ক্রল",
"Scrolled Mode": "স্ক্রল মোড",
"Continuous Scroll": "ক্রমাগত স্ক্রল",
"Overlap Pixels": "ওভারল্যাপ পিক্সেল",
"Click": "ক্লিক",
"Clicks for Page Flip": "পৃষ্ঠা উল্টানোর জন্য ক্লিক",
"Swap Clicks Area": "ক্লিক এরিয়া অদলবদল",
"Disable Double Click": "ডাবল ক্লিক নিষ্ক্রিয়",
"Volume Keys for Page Flip": "পৃষ্ঠা উল্টানোর জন্য ভলিউম কী",
"Animation": "অ্যানিমেশন",
"Paging Animation": "পৃষ্ঠা অ্যানিমেশন",
"Security": "নিরাপত্তা",
"Allow JavaScript": "জাভাস্ক্রিপ্ট অনুমতি",
"Enable only if you trust the file.": "শুধুমাত্র ফাইলে বিশ্বাস থাকলে সক্রিয় করুন।",
"Font": "ফন্ট",
"Custom Fonts": "কাস্টম ফন্ট",
"Cancel Delete": "মুছা বাতিল",
"Delete Font": "ফন্ট মুছুন",
"Import Font": "ফন্ট আমদানি",
"Tips": "টিপস",
"Supported font formats: .ttf, .otf, .woff, .woff2": "সমর্থিত ফন্ট ফরম্যাট: .ttf, .otf, .woff, .woff2",
"Custom fonts can be selected from the Font Face menu": "কাস্টম ফন্ট Font Face মেনু থেকে নির্বাচন করা যায়",
"Global Settings": "গ্লোবাল সেটিংস",
"Apply to All Books": "সব বইয়ে প্রয়োগ",
"Apply to This Book": "এই বইয়ে প্রয়োগ",
"Reset Settings": "সেটিংস রিসেট",
"Manage Custom Fonts": "কাস্টম ফন্ট ব্যবস্থাপনা",
"System Fonts": "সিস্টেম ফন্ট",
"Serif Font": "সেরিফ ফন্ট",
"Sans-Serif Font": "স্যান্স-সেরিফ ফন্ট",
"Override Book Font": "বইয়ের ফন্ট পরিবর্তন",
"Font Size": "ফন্ট সাইজ",
"Default Font Size": "ডিফল্ট ফন্ট সাইজ",
"Minimum Font Size": "সর্বনিম্ন ফন্ট সাইজ",
"Font Weight": "ফন্ট ওয়েট",
"Font Family": "ফন্ট ফ্যামিলি",
"Default Font": "ডিফল্ট ফন্ট",
"CJK Font": "CJK ফন্ট",
"Font Face": "ফন্ট ফেস",
"Monospace Font": "মনোস্পেস ফন্ট",
"Language": "ভাষা",
"Interface Language": "ইন্টারফেস ভাষা",
"Translation": "অনুবাদ",
"Enable Translation": "অনুবাদ সক্রিয়",
"Show Source Text": "উৎস টেক্সট দেখান",
"Translation Service": "অনুবাদ সেবা",
"Translate To": "অনুবাদ করুন",
"Override Book Layout": "বইয়ের লেআউট পরিবর্তন",
"Writing Mode": "লেখার মোড",
"Default": "ডিফল্ট",
"Horizontal Direction": "অনুভূমিক দিক",
"Vertical Direction": "উল্লম্ব দিক",
"RTL Direction": "RTL দিক",
"Border Frame": "বর্ডার ফ্রেম",
"Double Border": "ডাবল বর্ডার",
"Border Color": "বর্ডার রঙ",
"Paragraph": "অনুচ্ছেদ",
"Paragraph Margin": "অনুচ্ছেদ মার্জিন",
"Line Spacing": "লাইন স্পেসিং",
"Word Spacing": "শব্দ স্পেসিং",
"Letter Spacing": "অক্ষর স্পেসিং",
"Text Indent": "টেক্সট ইনডেন্ট",
"Full Justification": "পূর্ণ সারিবদ্ধতা",
"Hyphenation": "হাইফেনেশন",
"Page": "পৃষ্ঠা",
"Top Margin (px)": "উপরের মার্জিন (px)",
"Bottom Margin (px)": "নিচের মার্জিন (px)",
"Left Margin (px)": "বাম মার্জিন (px)",
"Right Margin (px)": "ডান মার্জিন (px)",
"Column Gap (%)": "কলাম গ্যাপ (%)",
"Maximum Number of Columns": "সর্বোচ্চ কলাম সংখ্যা",
"Maximum Column Height": "সর্বোচ্চ কলাম উচ্চতা",
"Maximum Column Width": "সর্বোচ্চ কলাম প্রস্থ",
"Header & Footer": "হেডার ও ফুটার",
"Show Header": "হেডার দেখান",
"Show Footer": "ফুটার দেখান",
"Show Remaining Time": "বাকি সময় দেখান",
"Show Remaining Pages": "বাকি পৃষ্ঠা দেখান",
"Show Reading Progress": "পড়ার অগ্রগতি দেখান",
"Reading Progress Style": "পড়ার অগ্রগতির স্টাইল",
"Page Number": "পৃষ্ঠা নম্বর",
"Percentage": "শতাংশ",
"Apply also in Scrolled Mode": "স্ক্রল মোডেও প্রয়োগ করুন",
"Screen": "স্ক্রিন",
"Orientation": "দিকবিন্যাস",
"Portrait": "পোর্ট্রেট",
"Landscape": "ল্যান্ডস্কেপ",
"Apply": "প্রয়োগ",
"Custom Content CSS": "কাস্টম কন্টেন্ট CSS",
"Enter CSS for book content styling...": "বই কন্টেন্ট স্টাইলিংয়ের জন্য CSS লিখুন...",
"Custom Reader UI CSS": "কাস্টম রিডার UI CSS",
"Enter CSS for reader interface styling...": "রিডার ইন্টারফেস স্টাইলিংয়ের জন্য CSS লিখুন...",
"Layout": "লেআউট",
"Color": "রঙ",
"Behavior": "আচরণ",
"Reset {{settings}}": "{{settings}} রিসেট",
"All the world's a stage,\nAnd all the men and women merely players;\nThey have their exits and their entrances,\nAnd one man in his time plays many parts,\nHis acts being seven ages.\n\n— William Shakespeare": "সারা বিশ্বটাই একটা মঞ্চ,\nআর সব নর-নারী কেবল অভিনেতা;\nতাদের আছে প্রস্থান ও প্রবেশ,\nআর একজন মানুষ তার জীবনে অনেক চরিত্র পালন করে,\nতার অভিনয় সাত যুগের।\n\n— উইলিয়াম শেক্সপিয়র",
"(from 'As You Like It', Act II)": "('অ্যাজ ইউ লাইক ইট', দ্বিতীয় অঙ্ক থেকে)",
"Custom Theme": "কাস্টম থিম",
"Theme Name": "থিমের নাম",
"Text Color": "টেক্সট রঙ",
"Background Color": "ব্যাকগ্রাউন্ড রঙ",
"Link Color": "লিঙ্ক রঙ",
"Preview": "প্রিভিউ",
"Font & Layout": "ফন্ট ও লেআউট",
"Book Cover": "বইয়ের মলাট",
"More Info": "আরো তথ্য",
"Parallel Read": "সমান্তরাল পড়া",
"Disable": "নিষ্ক্রিয়",
"Enable": "সক্রিয়",
"KOReader Sync": "KOReader সিঙ্ক",
"Push Progress": "অগ্রগতি পুশ",
"Pull Progress": "অগ্রগতি পুল",
"Export Annotations": "টীকা রপ্তানি",
"Sort TOC by Page": "পৃষ্ঠা অনুযায়ী TOC সাজান",
"Edit": "সম্পাদনা",
"Search...": "খুঁজুন...",
"Book": "বই",
"Chapter": "অধ্যায়",
"Match Case": "কেস মিলান",
"Match Whole Words": "পূর্ণ শব্দ মিলান",
"Match Diacritics": "ডায়াক্রিটিক্স মিলান",
"TOC": "সূচিপত্র",
"Table of Contents": "সূচিপত্র",
"Sidebar": "সাইডবার",
"Disable Translation": "অনুবাদ নিষ্ক্রিয়",
"TTS not supported for PDF": "PDF এর জন্য TTS সমর্থিত নয়",
"TTS not supported for this document": "এই ডকুমেন্টের জন্য TTS সমর্থিত নয়",
"No Timeout": "কোন টাইমআউট নেই",
"{{value}} minute": "{{value}} মিনিট",
"{{value}} minutes": "{{value}} মিনিট",
"{{value}} hour": "{{value}} ঘন্টা",
"{{value}} hours": "{{value}} ঘন্টা",
"Voices for {{lang}}": "{{lang}} এর জন্য কণ্ঠস্বর",
"Slow": "ধীর",
"Fast": "দ্রুত",
"{{engine}}: {{count}} voices_one": "{{engine}}: ১টি কণ্ঠস্বর",
"{{engine}}: {{count}} voices_other": "{{engine}}: {{count}}টি কণ্ঠস্বর",
"Sign in to Sync": "সিঙ্কের জন্য সাইন ইন",
"Synced at {{time}}": "{{time}} এ সিঙ্ক হয়েছে",
"Never synced": "কখনো সিঙ্ক হয়নি",
"Reading Progress Synced": "পড়ার অগ্রগতি সিঙ্ক হয়েছে",
"Page {{page}} of {{total}} ({{percentage}}%)": "{{total}} এর {{page}} পৃষ্ঠা ({{percentage}}%)",
"Current position": "বর্তমান অবস্থান",
"Approximately page {{page}} of {{total}} ({{percentage}}%)": "প্রায় {{total}} এর {{page}} পৃষ্ঠা ({{percentage}}%)",
"Approximately {{percentage}}%": "প্রায় {{percentage}}%",
"Delete Your Account?": "আপনার অ্যাকাউন্ট মুছবেন?",
"This action cannot be undone. All your data in the cloud will be permanently deleted.": "এই কাজ পূর্বাবস্থায় ফেরানো যাবে না। ক্লাউডে আপনার সব ডেটা স্থায়ীভাবে মুছে যাবে।",
"Delete Permanently": "স্থায়ীভাবে মুছুন",
"Restore Purchase": "ক্রয় পুনরুদ্ধার",
"Manage Subscription": "সাবস্ক্রিপশন পরিচালনা",
"Reset Password": "পাসওয়ার্ড রিসেট",
"Sign Out": "সাইন আউট",
"Delete Account": "অ্যাকাউন্ট মুছুন",
"Upgrade to {{plan}}": "{{plan}} এ আপগ্রেড",
"Complete Your Subscription": "আপনার সাবস্ক্রিপশন সম্পূর্ণ করুন",
"Coming Soon": "শীঘ্রই আসছে",
"Upgrade to Plus or Pro": "প্লাস বা প্রো তে আপগ্রেড",
"Current Plan": "বর্তমান প্ল্যান",
"Plan Limits": "প্ল্যান সীমা",
"Failed to delete user. Please try again later.": "ইউজার মুছতে ব্যর্থ। পরে আবার চেষ্টা করুন।",
"Failed to create checkout session": "চেকআউট সেশন তৈরি করতে ব্যর্থ",
"No purchases found to restore.": "পুনরুদ্ধার করার জন্য কোন ক্রয় পাওয়া যায়নি।",
"Failed to restore purchases.": "ক্রয় পুনরুদ্ধার করতে ব্যর্থ।",
"Failed to manage subscription.": "সাবস্ক্রিপশন পরিচালনা করতে ব্যর্থ।",
"Failed to load subscription plans.": "সাবস্ক্রিপশন প্ল্যান লোড করতে ব্যর্থ।",
"Loading profile...": "প্রোফাইল লোড হচ্ছে...",
"Processing your payment...": "আপনার পেমেন্ট প্রক্রিয়া করা হচ্ছে...",
"Please wait while we confirm your subscription.": "আমরা আপনার সাবস্ক্রিপশন নিশ্চিত করার সময় অপেক্ষা করুন।",
"Payment Processing": "পেমেন্ট প্রক্রিয়াকরণ",
"Your payment is being processed. This usually takes a few moments.": "আপনার পেমেন্ট প্রক্রিয়া করা হচ্ছে। এটি সাধারণত কয়েক মুহূর্ত সময় নেয়।",
"Payment Failed": "পেমেন্ট ব্যর্থ",
"We couldn't process your subscription. Please try again or contact support if the issue persists.": "আমরা আপনার সাবস্ক্রিপশন প্রক্রিয়া করতে পারিনি। আবার চেষ্টা করুন বা সমস্যা অব্যাহত থাকলে সাপোর্টের সাথে যোগাযোগ করুন।",
"Back to Profile": "প্রোফাইলে ফিরুন",
"Subscription Successful!": "সাবস্ক্রিপশন সফল!",
"Thank you for your subscription! Your payment has been processed successfully.": "আপনার সাবস্ক্রিপশনের জন্য ধন্যবাদ! আপনার পেমেন্ট সফলভাবে প্রক্রিয়া করা হয়েছে।",
"Email:": "ইমেইল:",
"Plan:": "প্ল্যান:",
"Amount:": "পরিমাণ:",
"Subscription ID:": "সাবস্ক্রিপশন ID:",
"Go to Library": "লাইব্রেরিতে যান",
"Need help? Contact our support team at support@readest.com": "সাহায্য দরকার? support@readest.com এ আমাদের সাপোর্ট টিমের সাথে যোগাযোগ করুন",
"Free Plan": "ফ্রি প্ল্যান",
"month": "মাস",
"year": "বছর",
"Cross-Platform Sync": "ক্রস-প্ল্যাটফর্ম সিঙ্ক",
"Seamlessly sync your library, progress, highlights, and notes across all your devices—never lose your place again.": "আপনার সব ডিভাইসে লাইব্রেরি, অগ্রগতি, হাইলাইট এবং নোট নির্বিঘ্নে সিঙ্ক করুন—আর কখনো আপনার জায়গা হারাবেন না।",
"Customizable Reading": "কাস্টমাইজযোগ্য পড়া",
"Personalize every detail with adjustable fonts, layouts, themes, and advanced display settings for the perfect reading experience.": "নিখুঁত পড়ার অভিজ্ঞতার জন্য সামঞ্জস্যযোগ্য ফন্ট, লেআউট, থিম এবং উন্নত ডিসপ্লে সেটিংস দিয়ে প্রতিটি বিস্তারিত ব্যক্তিগতকরণ করুন।",
"AI Read Aloud": "AI পড়ে শোনানো",
"Enjoy hands-free reading with natural-sounding AI voices that bring your books to life.": "প্রাকৃতিক শোনা AI কণ্ঠস্বর দিয়ে হ্যান্ডস-ফ্রি পড়া উপভোগ করুন যা আপনার বইগুলোকে জীবন্ত করে তোলে।",
"AI Translations": "AI অনুবাদ",
"Translate any text instantly with the power of Google, Azure, or DeepL—understand content in any language.": "Google, Azure, বা DeepL এর শক্তি দিয়ে যেকোনো টেক্সট তাৎক্ষণিক অনুবাদ করুন—যেকোনো ভাষায় কন্টেন্ট বুঝুন।",
"Community Support": "কমিউনিটি সাপোর্ট",
"Connect with fellow readers and get help fast in our friendly community channels.": "সহ পাঠকদের সাথে যুক্ত হোন এবং আমাদের বন্ধুত্বপূর্ণ কমিউনিটি চ্যানেলে দ্রুত সাহায্য পান।",
"Cloud Sync Storage": "ক্লাউড সিঙ্ক স্টোরেজ",
"AI Translations (per day)": "AI অনুবাদ (প্রতিদিন)",
"Plus Plan": "প্লাস প্ল্যান",
"Includes All Free Plan Benefits": "সব ফ্রি প্ল্যান সুবিধা অন্তর্ভুক্ত",
"Unlimited AI Read Aloud Hours": "সীমাহীন AI পড়ে শোনানোর সময়",
"Listen without limits—convert as much text as you like into immersive audio.": "সীমা ছাড়াই শুনুন—যত খুশি টেক্সটকে নিমজ্জনকারী অডিওতে রূপান্তর করুন।",
"More AI Translations": "আরো AI অনুবাদ",
"Unlock enhanced translation capabilities with more daily usage and advanced options.": "আরো দৈনিক ব্যবহার এবং উন্নত অপশন দিয়ে উন্নত অনুবাদ ক্ষমতা আনলক করুন।",
"DeepL Pro Access": "DeepL Pro অ্যাক্সেস",
"Translate up to 100,000 characters daily with the most accurate translation engine available.": "উপলব্ধ সবচেয়ে নির্ভুল অনুবাদ ইঞ্জিন দিয়ে দৈনিক ১,০০,০০০ অক্ষর পর্যন্ত অনুবাদ করুন।",
"Securely store and access your entire reading collection with up to 5 GB of cloud storage.": "৫ GB ক্লাউড স্টোরেজ দিয়ে আপনার সম্পূর্ণ পড়ার সংগ্রহ নিরাপদে সংরক্ষণ এবং অ্যাক্সেস করুন।",
"Priority Support": "অগ্রাধিকার সাপোর্ট",
"Enjoy faster responses and dedicated assistance whenever you need help.": "যখনই সাহায্যের প্রয়োজন হয় দ্রুত প্রতিক্রিয়া এবং নিবেদিত সহায়তা উপভোগ করুন।",
"Pro Plan": "প্রো প্ল্যান",
"Includes All Plus Plan Benefits": "সব প্লাস প্ল্যান সুবিধা অন্তর্ভুক্ত",
"Early Feature Access": "আর্লি ফিচার অ্যাক্সেস",
"Be the first to explore new features, updates, and innovations before anyone else.": "অন্য কারো আগে নতুন ফিচার, আপডেট এবং উদ্ভাবন অন্বেষণ করার প্রথম হয়ে উঠুন।",
"Advanced AI Tools": "উন্নত AI টুলস",
"Harness powerful AI tools for smarter reading, translation, and content discovery.": "স্মার্ট পড়া, অনুবাদ এবং কন্টেন্ট আবিষ্কারের জন্য শক্তিশালী AI টুলস ব্যবহার করুন।",
"Translate up to 500,000 characters daily with the most accurate translation engine available.": "উপলব্ধ সবচেয়ে নির্ভুল অনুবাদ ইঞ্জিন দিয়ে দৈনিক ৫,০০,০০০ অক্ষর পর্যন্ত অনুবাদ করুন।",
"Securely store and access your entire reading collection with up to 20 GB of cloud storage.": "২০ GB ক্লাউড স্টোরেজ দিয়ে আপনার সম্পূর্ণ পড়ার সংগ্রহ নিরাপদে সংরক্ষণ এবং অ্যাক্সেস করুন।",
"Version {{version}}": "সংস্করণ {{version}}",
"Check Update": "আপডেট চেক করুন",
"Already the latest version": "ইতিমধ্যে সর্বশেষ সংস্করণ",
"Checking for updates...": "আপডেট চেক করা হচ্ছে...",
"Error checking for updates": "আপডেট চেক করতে ত্রুটি",
"Drop to Import Books": "বই আমদানি করতে ড্রপ করুন",
"Terms of Service": "সেবার শর্তাবলী",
"Privacy Policy": "গোপনীয়তা নীতি",
"Enter book title": "বইয়ের শিরোনাম লিখুন",
"Subtitle": "উপশিরোনাম",
"Enter book subtitle": "বইয়ের উপশিরোনাম লিখুন",
"Enter author name": "লেখকের নাম লিখুন",
"Series": "সিরিজ",
"Enter series name": "সিরিজের নাম লিখুন",
"Series Index": "সিরিজ ইনডেক্স",
"Enter series index": "সিরিজ ইনডেক্স লিখুন",
"Total in Series": "সিরিজের মোট",
"Enter total books in series": "সিরিজের মোট বই সংখ্যা লিখুন",
"Publisher": "প্রকাশক",
"Enter publisher": "প্রকাশক লিখুন",
"Publication Date": "প্রকাশনার তারিখ",
"YYYY or YYYY-MM-DD": "YYYY বা YYYY-MM-DD",
"Identifier": "শনাক্তকারী",
"Subjects": "বিষয়",
"Fiction, Science, History": "কল্পকাহিনী, বিজ্ঞান, ইতিহাস",
"Description": "বিবরণ",
"Enter book description": "বইয়ের বিবরণ লিখুন",
"Change cover image": "মলাট ছবি পরিবর্তন",
"Replace": "প্রতিস্থাপন",
"Unlock cover": "মলাট আনলক",
"Lock cover": "মলাট লক",
"Auto-Retrieve Metadata": "মেটাডেটা স্বয়ংক্রিয় পুনরুদ্ধার",
"Auto-Retrieve": "স্বয়ংক্রিয় পুনরুদ্ধার",
"Unlock all fields": "সব ফিল্ড আনলক",
"Unlock All": "সব আনলক",
"Lock all fields": "সব ফিল্ড লক",
"Lock All": "সব লক",
"Reset": "রিসেট",
"Are you sure to delete the selected book?": "আপনি কি নিশ্চিত যে নির্বাচিত বইটি মুছবেন?",
"Are you sure to delete the cloud backup of the selected book?": "আপনি কি নিশ্চিত যে নির্বাচিত বইয়ের ক্লাউড ব্যাকআপ মুছবেন?",
"Are you sure to delete the local copy of the selected book?": "আপনি কি নিশ্চিত যে নির্বাচিত বইয়ের স্থানীয় কপি মুছবেন?",
"Edit Metadata": "মেটাডেটা সম্পাদনা",
"Book Details": "বইয়ের বিস্তারিত",
"Unknown": "অজানা",
"Remove from Cloud & Device": "ক্লাউড ও ডিভাইস থেকে সরান",
"Remove from Cloud Only": "শুধু ক্লাউড থেকে সরান",
"Remove from Device Only": "শুধু ডিভাইস থেকে সরান",
"Published": "প্রকাশিত",
"Updated": "আপডেট হয়েছে",
"Added": "যোগ করা হয়েছে",
"File Size": "ফাইল সাইজ",
"No description available": "কোন বিবরণ উপলব্ধ নয়",
"Locked": "লক করা",
"Select Metadata Source": "মেটাডেটা সোর্স নির্বাচন",
"Keep manual input": "ম্যানুয়াল ইনপুট রাখুন",
"A new version of Readest is available!": "রিডেস্টের একটি নতুন সংস্করণ উপলব্ধ!",
"Readest {{newVersion}} is available (installed version {{currentVersion}}).": "রিডেস্ট {{newVersion}} উপলব্ধ (ইনস্টল করা সংস্করণ {{currentVersion}})।",
"Download and install now?": "এখনই ডাউনলোড এবং ইনস্টল করবেন?",
"Downloading {{downloaded}} of {{contentLength}}": "{{contentLength}} এর {{downloaded}} ডাউনলোড হচ্ছে",
"Download finished": "ডাউনলোড সম্পূর্ণ",
"DOWNLOAD & INSTALL": "ডাউনলোড ও ইনস্টল",
"Changelog": "পরিবর্তন লগ",
"Software Update": "সফটওয়্যার আপডেট",
"What's New in Readest": "রিডেস্টে নতুন কী",
"Select Files": "ফাইল নির্বাচন",
"Select Image": "ছবি নির্বাচন",
"Select Video": "ভিডিও নির্বাচন",
"Select Audio": "অডিও নির্বাচন",
"Select Fonts": "ফন্ট নির্বাচন",
"Storage": "স্টোরেজ",
"{{percentage}}% of Cloud Sync Space Used.": "ক্লাউড সিঙ্ক স্পেসের {{percentage}}% ব্যবহৃত।",
"Translation Characters": "অনুবাদ অক্ষর",
"{{percentage}}% of Daily Translation Characters Used.": "দৈনিক অনুবাদ অক্ষরের {{percentage}}% ব্যবহৃত।",
"Daily translation quota reached. Upgrade your plan to continue using AI translations.": "দৈনিক অনুবাদ কোটা শেষ। AI অনুবাদ ব্যবহার চালিয়ে যেতে আপনার প্ল্যান আপগ্রেড করুন।",
"LXGW WenKai GB Screen": "LXGW WenKai GB Screen",
"LXGW WenKai TC": "LXGW WenKai TC",
"GuanKiapTsingKhai-T": "GuanKiapTsingKhai-T",
"Source Han Serif CN VF": "Source Han Serif CN VF",
"Huiwen-mincho": "Huiwen-mincho",
"KingHwa_OldSong": "KingHwa_OldSong",
"Google Books": "গুগল বুকস",
"Open Library": "ওপেন লাইব্রেরি",
"Azure Translator": "Azure অনুবাদক",
"DeepL": "DeepL",
"Google Translate": "গুগল ট্রান্সলেট",
"Yandex Translate": "ইয়ান্ডেক্স ট্রান্সলেট",
"Gray": "ধূসর",
"Sepia": "সেপিয়া",
"Grass": "ঘাস",
"Cherry": "চেরি",
"Sky": "আকাশ",
"Solarized": "সোলারাইজড",
"Gruvbox": "গ্রুভবক্স",
"Nord": "নর্ড",
"Contrast": "কন্ট্রাস্ট",
"Sunset": "সূর্যাস্ত",
"Reveal in Finder": "ফাইন্ডারে দেখান",
"Reveal in File Explorer": "ফাইল এক্সপ্লোরারে দেখান",
"Reveal in Folder": "ফোল্ডারে দেখান",
"Previous Paragraph": "পূর্ববর্তী অনুচ্ছেদ",
"Previous Sentence": "পূর্ববর্তী বাক্য",
"Pause": "বিরতি",
"Play": "চালান",
"Next Sentence": "পরবর্তী বাক্য",
"Next Paragraph": "পরবর্তী অনুচ্ছেদ",
"Separate Cover Page": "আলাদা কভার পৃষ্ঠা",
"Resize Notebook": "নোটবুকের আকার পরিবর্তন",
"Resize Sidebar": "সাইডবারের আকার পরিবর্তন",
"Get Help from the Readest Community": "রিডেস্ট কমিউনিটি থেকে সাহায্য নিন",
"Remove cover image": "মলাট ছবি সরান",
"Bookshelf": "বইয়ের তাক",
"View Menu": "মেনু দেখুন",
"Settings Menu": "সেটিংস মেনু",
"View account details and quota": "অ্যাকাউন্টের বিবরণ এবং কোটার তথ্য দেখুন",
"Library Header": "লাইব্রেরি হেডার",
"Book Content": "বইয়ের বিষয়বস্তু",
"Footer Bar": "ফুটার বার",
"Header Bar": "হেডার বার",
"View Options": "দেখার অপশন",
"Book Menu": "বইয়ের মেনু",
"Search Options": "অনুসন্ধানের অপশন",
"Close": "বন্ধ করুন",
"Delete Book Options": "বই মুছে ফেলার অপশন",
"ON": "চালু",
"OFF": "বন্ধ",
"Reading Progress": "পড়ার অগ্রগতি",
"Page Margin": "পৃষ্ঠার মার্জিন",
"Remove Bookmark": "বুকমার্ক সরান",
"Add Bookmark": "বুকমার্ক যোগ করুন",
"Books Content": "বইয়ের বিষয়বস্তু",
"Jump to Location": "অবস্থানে যান",
"Unpin Notebook": "ম্যাপ বই আনপিন করুন",
"Pin Notebook": "ম্যাপ বই পিন করুন",
"Hide Search Bar": "সার্চ বার লুকান",
"Show Search Bar": "সার্চ বার দেখান",
"On {{current}} of {{total}} page": "পৃষ্ঠা {{current}} এর {{total}} এ",
"Section Title": "অধ্যায়ের শিরোনাম",
"Decrease": "হ্রাস",
"Increase": "বৃদ্ধি",
"Settings Panels": "সেটিংস প্যানেল",
"Settings": "সেটিংস",
"Unpin Sidebar": "শার্টবার আনপিন করুন",
"Pin Sidebar": "শার্টবার পিন করুন",
"Toggle Sidebar": "শার্টবার টগল করুন",
"Toggle Translation": "অনুবাদ টগল করুন",
"Translation Disabled": "অনুবাদ অক্ষম",
"Minimize": "সঙ্কুচিত করুন",
"Maximize or Restore": "বৃহৎ করুন বা পুনরুদ্ধার করুন",
"Exit Parallel Read": "সমান্তরাল পড়া থেকে বেরিয়ে আসুন",
"Enter Parallel Read": "সমান্তরাল পড়ায় প্রবেশ করুন",
"Zoom Level": "জুম লেভেল",
"Zoom Out": "জুম আউট",
"Reset Zoom": "জুম রিসেট",
"Zoom In": "জুম ইন",
"Zoom Mode": "জুম মোড",
"Single Page": "একক পৃষ্ঠা",
"Auto Spread": "অটো স্প্রেড",
"Fit Page": "ফিট পৃষ্ঠা",
"Fit Width": "ফিট প্রস্থ",
"Failed to select directory": "ডিরেক্টরি নির্বাচন করতে ব্যর্থ",
"The new data directory must be different from the current one.": "নতুন ডেটা ডিরেক্টরি বর্তমানটির থেকে আলাদা হতে হবে।",
"Migration failed: {{error}}": "মাইগ্রেশন ব্যর্থ হয়েছে: {{error}}",
"Change Data Location": "ডেটা অবস্থান পরিবর্তন করুন",
"Current Data Location": "বর্তমান ডেটা অবস্থান",
"Total size: {{size}}": "মোট আকার: {{size}}",
"Calculating file info...": "ফাইলের তথ্য গণনা করা হচ্ছে...",
"New Data Location": "নতুন ডেটা অবস্থান",
"Choose Different Folder": "ভিন্ন ফোল্ডার নির্বাচন করুন",
"Choose New Folder": "নতুন ফোল্ডার নির্বাচন করুন",
"Migrating data...": "ডেটা স্থানান্তরিত হচ্ছে...",
"Copying: {{file}}": "কপি করা হচ্ছে: {{file}}",
"{{current}} of {{total}} files": "{{current}} এর {{total}} ফাইল",
"Migration completed successfully!": "মাইগ্রেশন সফলভাবে সম্পন্ন হয়েছে!",
"Your data has been moved to the new location. Please restart the application to complete the process.": "আপনার ডেটা নতুন অবস্থানে স্থানান্তরিত হয়েছে। প্রক্রিয়া সম্পন্ন করতে দয়া করে অ্যাপ্লিকেশনটি পুনরায় চালু করুন।",
"Migration failed": "মাইগ্রেশন ব্যর্থ হয়েছে",
"Important Notice": "গুরুতর বিজ্ঞপ্তি",
"This will move all your app data to the new location. Make sure the destination has enough free space.": "এটি আপনার সমস্ত অ্যাপ ডেটা নতুন অবস্থানে স্থানান্তরিত করবে। নিশ্চিত করুন যে গন্তব্যে পর্যাপ্ত ফ্রি স্পেস রয়েছে।",
"Restart App": "অ্যাপ পুনরায় চালু করুন",
"Start Migration": "মাইগ্রেশন শুরু করুন",
"Advanced Settings": "উন্নত সেটিংস",
"File count: {{size}}": "ফাইলের সংখ্যা: {{size}}",
"Background Read Aloud": "পটভূমিতে উচ্চস্বরে পড়ুন",
"Ready to read aloud": "উচ্চস্বরে পড়ার জন্য প্রস্তুত",
"Read Aloud": "উচ্চস্বরে পড়ুন",
"Screen Brightness": "স্ক্রিন উজ্জ্বলতা",
"Background Image": "ব্যাকগ্রাউন্ড ছবি",
"Import Image": "ছবি আমদানি করুন",
"Opacity": "স্বচ্ছতা",
"Size": "আকার",
"Cover": "ঢাকা",
"Contain": "ধারণ"
}
@@ -82,7 +82,6 @@
"Search...": "འཚོལ་བཤེར།...",
"Select Book": "དཔེ་དེབ་འདེམས་པ།",
"Select Books": "དཔེ་དེབ་འདེམས་པ།",
"Select Multiple Books": "དཔེ་དེབ་མང་པོ་འདེམས་པ།",
"Sepia": "རྙིང་པའི་ཉམས་འགྱུར།",
"Serif Font": "མཐའ་ཐིག་ཡོད་པའི་ཡིག་གཟུགས།",
"Show Book Details": "དཔེ་དེབ་ཀྱི་གནས་ཚུལ་རྒྱས་པ་མངོན་པ།",
@@ -118,6 +117,7 @@
"Book Details": "དཔེ་དེབ་ཀྱི་གནས་ཚུལ་རྒྱས་པ།",
"From Local File": "ས་གནས་ཀྱི་ཡིག་ཆ་ནས་ནང་འདྲེན།",
"TOC": "དཀར་ཆག",
"Table of Contents": "དཀར་ཆག",
"Book uploaded: {{title}}": "དཔེ་དེབ་སྤྲད་ཟིན། {{title}}",
"Failed to upload book: {{title}}": "དཔེ་དེབ་སྤྲད་མ་ཐུབ། {{title}}",
"Book downloaded: {{title}}": "དཔེ་དེབ་ཕབ་ལེན་བྱས་ཟིན། {{title}}",
@@ -329,7 +329,6 @@
"Left Margin (px)": "གཡོན་ངོས་ཀྱི་བར་ཐག",
"Column Gap (%)": "གྲལ་ཐིག་བར་གྱི་བར་ཐག",
"Always Show Status Bar": "རྟག་ཏུ་གནས་ཚུལ་གྱི་གྲལ་ཐིག་མངོན་པ།",
"Translation Not Available": "སྒྱུར་བཅོས་སྤྱོད་ཐུབ་མེད།",
"Custom Content CSS": "རང་འགུལ་གྱི་ནང་དོན་ CSS",
"Enter CSS for book content styling...": "དཔེ་དེབ་ཀྱི་ནང་དོན་གྱི་རྣམ་པའི་ CSS ནང་འཇུག་བྱོས།...",
"Custom Reader UI CSS": "རང་འགུལ་གྱི་མཐུད་ངོས་ CSS",
@@ -438,7 +437,6 @@
"Google Books": "Google དཔེ་མཛོད།",
"Open Library": "སྒོ་འབྱེད་དཔེ་ཁང་།",
"Fiction, Science, History": "སྒྲུང་གཏམ། ཚན་རིག ལོ་རྒྱུས།",
"Select Cover Image": "སྟོང་ངོས་ཀྱི་པར་རིས་འདེམས་པ།",
"Open Book in New Window": "སྒེའུ་ཁུང་གསར་པའི་ནང་དཔེ་དེབ་ཁ་ཕྱེ་བ།",
"Voices for {{lang}}": "{{lang}} གྱི་སྒྲ་སྐད།",
"Yandex Translate": "Yandex སྒྱུར་བཅོས།",
@@ -477,13 +475,10 @@
"Always use latest": "དེ་ལས་འབྱུང་ཁུངས་འདེམས་པ་བྱས་ནས་བརྗེ་བ།",
"Send changes only": "འབྱུང་ཁུངས་འདེམས་པ་བྱས་ནས་བརྗེ་བ།",
"Receive changes only": "འབྱུང་ཁུངས་འདེམས་པ་བྱས་ནས་བརྗེ་བ།",
"Disabled": "བཀག་པ།",
"Checksum Method": "ཡིག་སྣེ་འབྱུང་ཁུངས།",
"File Content (recommended)": "ཡིག་སྣེ་འབྱུང་ཁུངས།",
"File Name": "ཡིག་སྣེ་འབྱུང་ཁུངས།",
"Device Name": "ཡིག་སྣེ་འབྱུང་ཁུངས།",
"Sync Tolerance": "ཡིག་སྣེ་འབྱུང་ཁུངས།",
"Precision: {{precision}} digits after the decimal": "ཡིག་སྣེ་འབྱུང་ཁུངས།",
"Connect to your KOReader Sync server.": "ཁྱེད་ཀྱིས KOReader སྤྲི་དོན་སང་བཞིན་འདེམས་པ།",
"Server URL": "སང་བཞིན་འདེམས་པའི URL",
"Username": "ཁྱེད་ཀྱིས་འབྱུང་ཁུངས་འདེམས་པ།",
@@ -513,5 +508,99 @@
"Select Video": "བརྙན་ཟློས་འདེམས་པ།",
"Select Audio": "སྒྲ་ཟློས་འདེམས་པ།",
"Select Fonts": "ཡིག་གཟུགས་འདེམས་པ།",
"Supported font formats: .ttf, .odf, .woff, .woff2": "ཡིག་གཟུགས་འདེམས་པ་བྱས་ནས་བསྐྱར་བརྗེ་བ། ཡིག་གཟུགས་ཀྱི་སྒྲ་སྐད། .ttf, .odf, .woff, .woff2"
"Supported font formats: .ttf, .otf, .woff, .woff2": "ཡིག་གཟུགས་འདེམས་པ་བྱས་ནས་བསྐྱར་བརྗེ་བ། ཡིག་གཟུགས་ཀྱི་སྒྲ་སྐད། .ttf, .otf, .woff, .woff2",
"Push Progress": "འདེགས་པའི་འཕེལ་རིམ།",
"Pull Progress": "འདྲུད་པའི་འཕེལ་རིམ།",
"Previous Paragraph": "སྔོན་གྱི་དོན་ཚན།",
"Previous Sentence": "སྔོན་གྱི་ཚིག་གྲུབ།",
"Pause": "སྐར་མ་འཇོག",
"Play": "གཏོང་བ།",
"Next Sentence": "རྗེས་ཀྱི་ཚིག་གྲུབ།",
"Next Paragraph": "རྗེས་ཀྱི་དོན་ཚན།",
"Separate Cover Page": "སྟོང་ངོས་གི་ཤོག་དཀར་པ།",
"Resize Notebook": "དེབ་སྣོད་གཅོད་སྒྲིག",
"Resize Sidebar": "གཡས་སྒོ་གཅོད་སྒྲིག",
"Get Help from the Readest Community": "Readest མཛའ་བརྩེའི་རོགས་རམ་ལོངས་སུ་རོགས་རམ་ཐོབ།",
"Remove cover image": "སྟོང་ངོས་ཀྱི་པར་རིས་ཕྱིར་འཐེན།",
"Bookshelf": "དེབ་སྡེབས་",
"View Menu": "མ་ལག་བལྟ་བ",
"Settings Menu": "སྒྲིག་སྟངས་མ་ལག",
"View account details and quota": "རྩིས་ཐོའི་རྒྱུ་ཆ་དང་ཚད་བརྡ་བལྟ་བ",
"Library Header": "དེབ་མཛོད་མགོ་ཡིག",
"Book Content": "དེབ་ནང་དོན",
"Footer Bar": "མཇུག་སྒམ་ཕྱོགས",
"Header Bar": "མགོ་སྒམ་ཕྱོགས",
"View Options": "བལྟ་བའི་གདམ་ཁ",
"Book Menu": "དེབ་ཀྱི་མ་ལག",
"Search Options": "འཚོལ་བའི་གདམ་ཁ",
"Close": "ཁ་རྒྱག",
"Delete Book Options": "དེབ་བཏོན་གཏང་གི་གདམ་ཁ",
"ON": "འབྱུང་ཁུངས",
"OFF": "བརྗེ་བ",
"Reading Progress": "ཀློག་པའི་ཡར་འཕེལ།",
"Page Margin": "ཤོག་གདོང་།",
"Remove Bookmark": "དེབ་གྲངས་འདོར་བ།",
"Add Bookmark": "དེབ་གྲངས་སྣོན་པ།",
"Books Content": "དེབ་ཀྱི་ནང་དོན།",
"Jump to Location": "གནས་ས་ལ་འགྲོ།",
"Unpin Notebook": "དེབ་སྣོད་བཤོལ་བ།",
"Pin Notebook": "དེབ་སྣོད་བཀར་བ།",
"Hide Search Bar": "འཚོལ་བཤེར་སྒོ་སྦེད།",
"Show Search Bar": "འཚོལ་བཤེར་སྒོ་སྟོན།",
"On {{current}} of {{total}} page": "ཤོག་ངོས་ {{total}} ནས་ {{current}} ལ།",
"Section Title": "དོན་ཚན་མགོ་མིང་།",
"Decrease": "མར་འབེབས།",
"Increase": "ཡར་འཕར།",
"Settings Panels": "སྒྲིག་སྟངས་གནས་སྟོན།",
"Settings": "སྒྲིག་སྟངས།",
"Unpin Sidebar": "ཟུར་སྒོ་བཤོལ་བ།",
"Pin Sidebar": "ཟུར་སྒོ་བཀར་བ།",
"Toggle Sidebar": "ཟུར་སྒོ་སྤོ་བ།",
"Toggle Translation": "ཡིག་སྒྱུར་སྤོ་བ།",
"Translation Disabled": "ཡིག་སྒྱུར་མེད།",
"Minimize": "ཆུང་དུ་བསྡུ།",
"Maximize or Restore": "ཆེན་པོ་བཟོ/གསོག།",
"Exit Parallel Read": "མཉམ་དུ་ཀློག་ཕྱིར་འཐེན།",
"Enter Parallel Read": "མཉམ་དུ་ཀློག་འཛུལ།",
"Zoom Level": "རྒྱབ་སྐོར་གྱི་གདམ་ཁ",
"Zoom Out": "རྒྱབ་སྐོར་བཏང་བ།",
"Reset Zoom": "རྒྱབ་སྐོར་རྩོལ་བ།",
"Zoom In": "རྒྱབ་སྐོར་འཕེལ་བ།",
"Zoom Mode": "རྒྱབ་སྐོར་སྤོ་བ།",
"Single Page": "དེབ་གཅིག",
"Auto Spread": "རང་འགུལ་སྤྲོད།",
"Fit Page": "དེབ་འདེམས་པ།",
"Fit Width": "ཁྱབ་སྒྲིག་འདེམས་པ།",
"Failed to select directory": "གནས་ས་འདེམས་པ་བྱས་མ་ཐུབ།",
"The new data directory must be different from the current one.": "གསར་བཅས་སྐོར་འདེམས་པ་གནས་ས་དང་མཉམ་འབྱུང་བར་བྱས་མ་ཐུབ།",
"Migration failed: {{error}}": "མཉམ་དུ་ཀློག་འཛུལ་བྱས་མ་ཐུབ།",
"Change Data Location": "གསར་བཅས་སྐོར་འདེམས་པ།",
"Current Data Location": "ད་ལྟ་བཅས་སྐོར་འདེམས་པ།",
"Total size: {{size}}": "དངོས་གནས་བཅས་: {{size}}",
"Calculating file info...": "དེབ་གནས་བཅས་པའི་གདམ་ཁ་བཟོ་བྱས་མ་ཐུབ།",
"New Data Location": "གསར་བཅས་སྐོར་འདེམས་པ།",
"Choose Different Folder": "གཞན་དེབ་སྣོད་བཀར་བ།",
"Choose New Folder": "གསར་བཅས་སྣོད་བཀར་བ།",
"Migrating data...": "དེབ་གནས་བཅས་པའི་སྤྱོད་བྱས་མ་ཐུབ།",
"Copying: {{file}}": "དེབ་གནས་བཅས་པའི་སྤྱོད་བྱས་མ་ཐུབ།",
"{{current}} of {{total}} files": "{{current}} དང་ {{total}} དེབ་གནས་བཅས་པའི་སྤྱོད་བྱས་མ་ཐུབ།",
"Migration completed successfully!": "མཉམ་དུ་ཀློག་འཛུལ་བྱས་མ་ཐུབ།",
"Your data has been moved to the new location. Please restart the application to complete the process.": "ཁྱོད་ཀྱི་དེབ་གནས་བཅས་པའི་སྤྱོད་བྱས་མ་ཐུབ།",
"Migration failed": "མཉམ་དུ་ཀློག་འཛུལ་བྱས་མ་ཐུབ།",
"Important Notice": "དོན་གཞི་བརྗེ་བ།",
"This will move all your app data to the new location. Make sure the destination has enough free space.": "འདི་ནས་ཁྱོད་ཀྱི་ཨང་གཏོད་དེབ་གནས་བཅས་པའི་སྤྱོད་བྱས་མ་ཐུབ།",
"Restart App": "དེབ་ཀྱི་སྤྱོད་བྱས་མ་ཐུབ།",
"Start Migration": "མཉམ་དུ་ཀློག་འཛུལ་བྱས་མ་ཐུབ།",
"Advanced Settings": "དབང་བསྐྱོད་སྒྲིག་སྟངས།",
"File count: {{size}}": "དེབ་གནས་བཅས་པའི་ཨང་། {{size}}",
"Background Read Aloud": "གནས་སྟངས་ཀྱིས་ཀློག་བྱེད།",
"Ready to read aloud": "དེབ་ཀྱི་སྤྱོད་བྱས་མ་ཐུབ།",
"Read Aloud": "ཀློག་བྱེད།",
"Screen Brightness": "རྒྱབ་སྐོར་གྱི་འོད་ཟེར།",
"Background Image": "གནས་སྟངས་ཀྱི་རི་མོ།",
"Import Image": "དེབ་གནས་བཅས་པའི་སྤྱོད་བྱས་མ་ཐུབ།",
"Opacity": "སྤོ་སྐོར་གྱི་འོད་ཟེར།",
"Size": "ཨང་",
"Cover": "དེབ་གྱི་སྤྱོད་བྱས་མ་ཐུབ།",
"Contain": "འབྱོར་བ།"
}
@@ -81,7 +81,6 @@
"Search...": "Suchen...",
"Select Book": "Buch auswählen",
"Select Books": "Bücher auswählen",
"Select Multiple Books": "Mehrere Bücher auswählen",
"Sepia": "Sepia",
"Serif Font": "Serifenschrift",
"Show Book Details": "Buchdetails anzeigen",
@@ -117,6 +116,7 @@
"Book Details": "Buchdetails",
"From Local File": "Aus lokaler Datei",
"TOC": "Inhaltsverzeichnis",
"Table of Contents": "Inhaltsverzeichnis",
"Book uploaded: {{title}}": "Buch hochgeladen: {{title}}",
"Failed to upload book: {{title}}": "Fehler beim Hochladen des Buches: {{title}}",
"Book downloaded: {{title}}": "Buch heruntergeladen: {{title}}",
@@ -332,7 +332,6 @@
"Left Margin (px)": "Linker Rand (px)",
"Column Gap (%)": "Spaltenabstand (%)",
"Always Show Status Bar": "Statusleiste immer anzeigen",
"Translation Not Available": "Übersetzung nicht verfügbar",
"Custom Content CSS": "Benutzerdefiniertes Inhalts-CSS",
"Enter CSS for book content styling...": "CSS für die Buchinhaltsgestaltung eingeben...",
"Custom Reader UI CSS": "Benutzerdefiniertes CSS für die Leseroberfläche",
@@ -443,7 +442,6 @@
"Google Books": "Google Books",
"Open Library": "Open Library",
"Fiction, Science, History": "Belletristik, Wissenschaft, Geschichte",
"Select Cover Image": "Coverbild auswählen",
"Open Book in New Window": "Buch in neuem Fenster öffnen",
"Voices for {{lang}}": "Stimmen für {{lang}}",
"Yandex Translate": "Yandex Übersetzer",
@@ -479,12 +477,10 @@
"Always use latest": "Immer die neueste Version verwenden",
"Send changes only": "Nur Änderungen senden",
"Receive changes only": "Nur Änderungen empfangen",
"Disabled": "Deaktiviert",
"Checksum Method": "Prüfziffernverfahren",
"File Content (recommended)": "Dateiinhalte (empfohlen)",
"File Name": "Dateiname",
"Device Name": "Gerätename",
"Sync Tolerance": "Sync-Toleranz",
"Connect to your KOReader Sync server.": "Mit Ihrem KOReader Sync-Server verbinden.",
"Server URL": "Server-URL",
"Username": "Benutzername",
@@ -503,7 +499,6 @@
"Approximately {{percentage}}%": "Ungefähr {{percentage}}%",
"Failed to connect": "Verbindung fehlgeschlagen",
"Sync Server Connected": "Sync-Server verbunden",
"Precision: {{precision}} digits after the decimal": "Präzision: {{precision}} Nachkommastellen",
"Sync as {{userDisplayName}}": "Sync als {{userDisplayName}}",
"Custom Fonts": "Benutzerdefinierte Schriftarten",
"Cancel Delete": "Löschen abbrechen",
@@ -517,5 +512,99 @@
"Select Video": "Video auswählen",
"Select Audio": "Audio auswählen",
"Select Fonts": "Schriftarten auswählen",
"Supported font formats: .ttf, .odf, .woff, .woff2": "Unterstützte Schriftartenformate: .ttf, .odf, .woff, .woff2"
"Supported font formats: .ttf, .otf, .woff, .woff2": "Unterstützte Schriftartenformate: .ttf, .otf, .woff, .woff2",
"Push Progress": "Fortschritt senden",
"Pull Progress": "Fortschritt empfangen",
"Previous Paragraph": "Vorheriger Absatz",
"Previous Sentence": "Vorheriger Satz",
"Pause": "Pause",
"Play": "Wiedergabe",
"Next Sentence": "Nächster Satz",
"Next Paragraph": "Nächster Absatz",
"Separate Cover Page": "Titelseite separat anzeigen",
"Resize Notebook": "Notizbuchgröße ändern",
"Resize Sidebar": "Seitenleisten-Größe ändern",
"Get Help from the Readest Community": "Hilfe von der Readest-Community erhalten",
"Remove cover image": "Coverbild entfernen",
"Bookshelf": "Bücherregal",
"View Menu": "Menü anzeigen",
"Settings Menu": "Einstellungsmenü",
"View account details and quota": "Kontodetails und Kontingent anzeigen",
"Library Header": "Bibliothekskopf",
"Book Content": "Buchinhalt",
"Footer Bar": "Fußzeile",
"Header Bar": "Kopfzeile",
"View Options": "Ansichtsoptionen",
"Book Menu": "Buchmenü",
"Search Options": "Suchoptionen",
"Close": "Schließen",
"Delete Book Options": "Buch-Löschoptionen",
"ON": "EIN",
"OFF": "AUS",
"Reading Progress": "Lesefortschritt",
"Page Margin": "Seitenrand",
"Remove Bookmark": "Lesezeichen entfernen",
"Add Bookmark": "Lesezeichen hinzufügen",
"Books Content": "Buchinhalt",
"Jump to Location": "Zu Standort springen",
"Unpin Notebook": "Notizbuch lösen",
"Pin Notebook": "Notizbuch anheften",
"Hide Search Bar": "Suchleiste ausblenden",
"Show Search Bar": "Suchleiste einblenden",
"On {{current}} of {{total}} page": "Auf Seite {{current}} von {{total}}",
"Section Title": "Abschnittsüberschrift",
"Decrease": "Verringern",
"Increase": "Erhöhen",
"Settings Panels": "Einstellungsfenster",
"Settings": "Einstellungen",
"Unpin Sidebar": "Seitenleiste lösen",
"Pin Sidebar": "Seitenleiste anheften",
"Toggle Sidebar": "Seitenleiste umschalten",
"Toggle Translation": "Übersetzung umschalten",
"Translation Disabled": "Übersetzung deaktiviert",
"Minimize": "Minimieren",
"Maximize or Restore": "Maximieren oder Wiederherstellen",
"Exit Parallel Read": "Parallel Read beenden",
"Enter Parallel Read": "Parallel Read starten",
"Zoom Level": "Zoomstufe",
"Zoom Out": "Hineinzoomen",
"Reset Zoom": "Zoom zurücksetzen",
"Zoom In": "Herauszoomen",
"Zoom Mode": "Zoom-Modus",
"Single Page": "Einzelne Seite",
"Auto Spread": "Automatische Verbreitung",
"Fit Page": "Seite anpassen",
"Fit Width": "Breite anpassen",
"Failed to select directory": "Fehler beim Auswählen des Verzeichnisses",
"The new data directory must be different from the current one.": "Das neue Datenverzeichnis muss sich vom aktuellen unterscheiden.",
"Migration failed: {{error}}": "Migration fehlgeschlagen: {{error}}",
"Change Data Location": "Datenstandort ändern",
"Current Data Location": "Aktueller Datenstandort",
"Total size: {{size}}": "Gesamtgröße: {{size}}",
"Calculating file info...": "Dateiinformationen werden berechnet...",
"New Data Location": "Neuer Datenstandort",
"Choose Different Folder": "Anderen Ordner wählen",
"Choose New Folder": "Neuen Ordner wählen",
"Migrating data...": "Daten werden migriert...",
"Copying: {{file}}": "Kopiere: {{file}}",
"{{current}} of {{total}} files": "{{current}} von {{total}} Dateien",
"Migration completed successfully!": "Migration erfolgreich abgeschlossen!",
"Your data has been moved to the new location. Please restart the application to complete the process.": "Ihre Daten wurden an den neuen Speicherort verschoben. Bitte starten Sie die Anwendung neu, um den Vorgang abzuschließen.",
"Migration failed": "Migration fehlgeschlagen",
"Important Notice": "Wichtiger Hinweis",
"This will move all your app data to the new location. Make sure the destination has enough free space.": "Dies wird alle Ihre App-Daten an den neuen Speicherort verschieben. Stellen Sie sicher, dass das Ziel über ausreichend freien Speicherplatz verfügt.",
"Restart App": "App neu starten",
"Start Migration": "Migration starten",
"Advanced Settings": "Erweiterte Einstellungen",
"File count: {{size}}": "Dateianzahl: {{size}}",
"Background Read Aloud": "Hintergrund-Vorlesen",
"Ready to read aloud": "Bereit zum Vorlesen",
"Read Aloud": "Vorlesen",
"Screen Brightness": "Bildschirmhelligkeit",
"Background Image": "Hintergrundbild",
"Import Image": "Bild importieren",
"Opacity": "Opazität",
"Size": "Größe",
"Cover": "Cover",
"Contain": "Inhalt"
}
@@ -82,7 +82,6 @@
"Search...": "Αναζήτηση...",
"Select Book": "Επιλογή βιβλίου",
"Select Books": "Επιλογή βιβλίων",
"Select Multiple Books": "Επιλογή πολλαπλών βιβλίων",
"Sepia": "Σέπια",
"Serif Font": "Γραμματοσειρά Serif",
"Show Book Details": "Εμφάνιση λεπτομερειών βιβλίου",
@@ -118,6 +117,7 @@
"Book Details": "Λεπτομέρειες βιβλίου",
"From Local File": "Από τοπικό αρχείο",
"TOC": "Πίνακας περιεχομένων",
"Table of Contents": "Πίνακας περιεχομένων",
"Book uploaded: {{title}}": "Το βιβλίο με τίτλο {{title}} ανέβηκε",
"Failed to upload book: {{title}}": "Αποτυχία ανέβασμα βιβλίου: {{title}}",
"Book downloaded: {{title}}": "Το βιβλίο με τίτλο {{title}} κατέβηκε",
@@ -333,7 +333,6 @@
"Left Margin (px)": "Αριστερό περιθώριο (px)",
"Column Gap (%)": "Απόσταση στηλών (%)",
"Always Show Status Bar": "Πάντα εμφάνιση γραμμής κατάστασης",
"Translation Not Available": "Η μετάφραση δεν είναι διαθέσιμη",
"Custom Content CSS": "Προσαρμοσμένο CSS περιεχομένου",
"Enter CSS for book content styling...": "Εισαγάγετε CSS για στυλ περιεχομένου βιβλίου...",
"Custom Reader UI CSS": "Προσαρμοσμένο CSS διεπαφής αναγνώστη",
@@ -443,7 +442,6 @@
"Google Books": "Google Books",
"Open Library": "Open Library",
"Fiction, Science, History": "Μυθοπλασία, Επιστήμη, Ιστορία",
"Select Cover Image": "Επιλέξτε εικόνα εξωφύλλου",
"Open Book in New Window": "Άνοιγμα βιβλίου σε νέο παράθυρο",
"Voices for {{lang}}": "Φωνές για {{lang}}",
"Yandex Translate": "Μετάφραση Yandex",
@@ -479,12 +477,10 @@
"Always use latest": "Χρησιμοποίησε πάντα την τελευταία έκδοση",
"Send changes only": "Αποστολή μόνο αλλαγών",
"Receive changes only": "Λήψη μόνο αλλαγών",
"Disabled": "Απενεργοποιημένο",
"Checksum Method": "Μέθοδος ελέγχου",
"File Content (recommended)": "Περιεχόμενο αρχείου (συνιστάται)",
"File Name": "Όνομα αρχείου",
"Device Name": "Όνομα συσκευής",
"Sync Tolerance": "Ανοχή συγχρονισμού",
"Connect to your KOReader Sync server.": "Συνδεθείτε στον διακομιστή συγχρονισμού KOReader.",
"Server URL": "Διεύθυνση URL διακομιστή",
"Username": "Όνομα χρήστη",
@@ -503,7 +499,6 @@
"Approximately {{percentage}}%": "Περίπου {{percentage}}%",
"Failed to connect": "Αποτυχία σύνδεσης",
"Sync Server Connected": "Ο διακομιστής συγχρονισμού είναι συνδεδεμένος",
"Precision: {{precision}} digits after the decimal": "Ακρίβεια: {{precision}} ψηφία μετά την υποδιαστολή",
"Sync as {{userDisplayName}}": "Συγχρονισμός ως {{userDisplayName}}",
"Custom Fonts": "Προσαρμοσμένες Γραμματοσειρές",
"Cancel Delete": "Ακύρωση Διαγραφής",
@@ -517,5 +512,99 @@
"Select Video": "Επιλογή Βίντεο",
"Select Audio": "Επιλογή Ήχου",
"Select Fonts": "Επιλογή Γραμματοσειρών",
"Supported font formats: .ttf, .odf, .woff, .woff2": "Υποστηριζόμενες μορφές γραμματοσειρών: .ttf, .odf, .woff, .woff2"
"Supported font formats: .ttf, .otf, .woff, .woff2": "Υποστηριζόμενες μορφές γραμματοσειρών: .ttf, .otf, .woff, .woff2",
"Push Progress": "Αποστολή προόδου",
"Pull Progress": "Λήψη προόδου",
"Previous Paragraph": "Προηγούμενη παράγραφος",
"Previous Sentence": "Προηγούμενη πρόταση",
"Pause": "Παύση",
"Play": "Αναπαραγωγή",
"Next Sentence": "Επόμενη πρόταση",
"Next Paragraph": "Επόμενη παράγραφος",
"Separate Cover Page": "Ξεχωριστή σελίδα εξωφύλλου",
"Resize Notebook": "Αλλαγή μεγέθους σημειωματάριου",
"Resize Sidebar": "Αλλαγή μεγέθους πλαϊνής γραμμής",
"Get Help from the Readest Community": "Λάβετε βοήθεια από την κοινότητα Readest",
"Remove cover image": "Αφαίρεση εικόνας εξωφύλλου",
"Bookshelf": "Ράφι βιβλίων",
"View Menu": "Προβολή μενού",
"Settings Menu": "Μενού ρυθμίσεων",
"View account details and quota": "Προβολή στοιχείων λογαριασμού και ορίου",
"Library Header": "Κεφαλίδα βιβλιοθήκης",
"Book Content": "Περιεχόμενο βιβλίου",
"Footer Bar": "Γραμμή υποσέλιδου",
"Header Bar": "Γραμμή κεφαλίδας",
"View Options": "Επιλογές προβολής",
"Book Menu": "Μενού βιβλίου",
"Search Options": "Επιλογές αναζήτησης",
"Close": "Κλείσιμο",
"Delete Book Options": "Επιλογές διαγραφής βιβλίου",
"ON": "ΕΝΕΡΓΟΠΟΙΗΣΗ",
"OFF": "ΑΠΕΝΕΡΓΟΠΟΙΗΣΗ",
"Reading Progress": "Πρόοδος ανάγνωσης",
"Page Margin": "Περιθώριο σελίδας",
"Remove Bookmark": "Αφαίρεση σελιδοδείκτη",
"Add Bookmark": "Προσθήκη σελιδοδείκτη",
"Books Content": "Περιεχόμενο βιβλίων",
"Jump to Location": "Μετάβαση σε τοποθεσία",
"Unpin Notebook": "Αποκαθήλωση σημειωματάριου",
"Pin Notebook": "Καθήλωση σημειωματάριου",
"Hide Search Bar": "Απόκρυψη γραμμής αναζήτησης",
"Show Search Bar": "Εμφάνιση γραμμής αναζήτησης",
"On {{current}} of {{total}} page": "Στη σελίδα {{current}} από {{total}}",
"Section Title": "Τίτλος ενότητας",
"Decrease": "Μείωση",
"Increase": "Αύξηση",
"Settings Panels": "Πίνακες ρυθμίσεων",
"Settings": "Ρυθμίσεις",
"Unpin Sidebar": "Αποκαθήλωση πλαϊνής γραμμής",
"Pin Sidebar": "Καθήλωση πλαϊνής γραμμής",
"Toggle Sidebar": "Εναλλαγή πλαϊνής γραμμής",
"Toggle Translation": "Εναλλαγή μετάφρασης",
"Translation Disabled": "Η μετάφραση είναι απενεργοποιημένη",
"Minimize": "Ελαχιστοποίηση",
"Maximize or Restore": "Μεγιστοποίηση ή Επαναφορά",
"Exit Parallel Read": "Έξοδος από την παράλληλη ανάγνωση",
"Enter Parallel Read": "Είσοδος στην παράλληλη ανάγνωση",
"Zoom Level": "Επίπεδο ζουμ",
"Zoom Out": "Μείωση ζουμ",
"Reset Zoom": "Επαναφορά ζουμ",
"Zoom In": "Αύξηση ζουμ",
"Zoom Mode": "Λειτουργία ζουμ",
"Single Page": "Μοναδική σελίδα",
"Auto Spread": "Αυτόματη εξάπλωση",
"Fit Page": "Προσαρμογή σελίδας",
"Fit Width": "Προσαρμογή πλάτους",
"Failed to select directory": "Αποτυχία επιλογής καταλόγου",
"The new data directory must be different from the current one.": "Ο νέος κατάλογος δεδομένων πρέπει να είναι διαφορετικός από τον τρέχοντα.",
"Migration failed: {{error}}": "Η μετανάστευση απέτυχε: {{error}}",
"Change Data Location": "Αλλαγή τοποθεσίας δεδομένων",
"Current Data Location": "Τρέχουσα τοποθεσία δεδομένων",
"Total size: {{size}}": "Συνολικό μέγεθος: {{size}}",
"Calculating file info...": "Υπολογισμός πληροφοριών αρχείου...",
"New Data Location": "Νέα τοποθεσία δεδομένων",
"Choose Different Folder": "Επιλέξτε διαφορετικό φάκελο",
"Choose New Folder": "Επιλέξτε νέο φάκελο",
"Migrating data...": "Μεταφορά δεδομένων...",
"Copying: {{file}}": "Αντιγραφή: {{file}}",
"{{current}} of {{total}} files": "{{current}} από {{total}} αρχεία",
"Migration completed successfully!": "Η μετανάστευση ολοκληρώθηκε με επιτυχία!",
"Your data has been moved to the new location. Please restart the application to complete the process.": "Τα δεδομένα σας έχουν μεταφερθεί στη νέα τοποθεσία. Παρακαλώ επανεκκινήστε την εφαρμογή για να ολοκληρώσετε τη διαδικασία.",
"Migration failed": "Η μετανάστευση απέτυχε",
"Important Notice": "Σημαντική ειδοποίηση",
"This will move all your app data to the new location. Make sure the destination has enough free space.": "Αυτό θα μεταφέρει όλα τα δεδομένα της εφαρμογής σας στη νέα τοποθεσία. Βεβαιωθείτε ότι ο προορισμός έχει αρκετό ελεύθερο χώρο.",
"Restart App": "Επανεκκίνηση εφαρμογής",
"Start Migration": "Έναρξη μετανάστευσης",
"Advanced Settings": "Προηγμένες ρυθμίσεις",
"File count: {{size}}": "Αριθμός αρχείων: {{size}}",
"Background Read Aloud": "Ανάγνωση στο παρασκήνιο",
"Ready to read aloud": "Έτοιμο για ανάγνωση",
"Read Aloud": "Ανάγνωση",
"Screen Brightness": "Φωτεινότητα οθόνης",
"Background Image": "Εικόνα φόντου",
"Import Image": "Εισαγωγή εικόνας",
"Opacity": "Αδιαφάνεια",
"Size": "Μέγεθος",
"Cover": "Εξώφυλλο",
"Contain": "Περιέχει"
}
@@ -83,12 +83,10 @@
"Always use latest": "Usar siempre el más reciente",
"Send changes only": "Solo enviar cambios",
"Receive changes only": "Solo recibir cambios",
"Disabled": "Desactivado",
"Checksum Method": "Método de identificación",
"File Content (recommended)": "Contenido del archivo (recomendado)",
"File Name": "Nombre del archivo",
"Device Name": "Nombre del dispositivo",
"Sync Tolerance": "Tolerancia de sincronización",
"Reading Progress Synced": "Progreso de lectura sincronizado",
"Sync Conflict": "Conflicto de sincronización",
"Sync reading progress from \"{{deviceName}}\"?": "¿Quieres sincronizar el progreso de lectura desde el dispositivo \"{{deviceName}}\"?",
@@ -111,7 +109,6 @@
"Search...": "Buscar...",
"Select Book": "Seleccionar libro",
"Select Books": "Seleccionar libros",
"Select Multiple Books": "Seleccionar varios libros",
"Sepia": "Sepia",
"Serif Font": "Fuente serif",
"Show Book Details": "Mostrar detalles del libro",
@@ -147,6 +144,7 @@
"Book Details": "Detalles del libro",
"From Local File": "Desde archivo local",
"TOC": "Índice",
"Table of Contents": "Índice",
"Book uploaded: {{title}}": "Libro subido: {{title}}",
"Failed to upload book: {{title}}": "Error al subir libro: {{title}}",
"Book downloaded: {{title}}": "Libro descargado: {{title}}",
@@ -365,7 +363,6 @@
"Left Margin (px)": "Margen izquierdo (px)",
"Column Gap (%)": "Espacio entre columnas (%)",
"Always Show Status Bar": "Mostrar siempre la barra de estado",
"Translation Not Available": "Traducción no disponible",
"Custom Content CSS": "CSS del contenido",
"Enter CSS for book content styling...": "Introduce CSS para el contenido del libro...",
"Custom Reader UI CSS": "CSS de la interfaz",
@@ -476,7 +473,6 @@
"Google Books": "Google Books",
"Open Library": "Open Library",
"Fiction, Science, History": "Ficción, Ciencia, Historia",
"Select Cover Image": "Seleccionar imagen de portada",
"Open Book in New Window": "Abre el libro en una nueva ventana",
"Voices for {{lang}}": "Voces para {{lang}}",
"Yandex Translate": "Yandex Translate",
@@ -507,7 +503,6 @@
"Remove from Device Only": "Eliminar solo del dispositivo",
"Failed to connect": "Error al conectar",
"Sync Server Connected": "Servidor de sincronización conectado",
"Precision: {{precision}} digits after the decimal": "Precisión: {{precision}} dígitos después del decimal",
"Sync as {{userDisplayName}}": "Sincronizar como {{userDisplayName}}",
"Custom Fonts": "Fuentes Personalizadas",
"Cancel Delete": "Cancelar Eliminación",
@@ -521,5 +516,99 @@
"Select Video": "Seleccionar Video",
"Select Audio": "Seleccionar Audio",
"Select Fonts": "Seleccionar Fuentes",
"Supported font formats: .ttf, .odf, .woff, .woff2": "Formatos de fuente compatibles: .ttf, .odf, .woff, .woff2"
"Supported font formats: .ttf, .otf, .woff, .woff2": "Formatos de fuente compatibles: .ttf, .otf, .woff, .woff2",
"Push Progress": "Empujar progreso",
"Pull Progress": "Tirar progreso",
"Previous Paragraph": "Párrafo anterior",
"Previous Sentence": "Oración anterior",
"Pause": "Pausar",
"Play": "Reproducir",
"Next Sentence": "Siguiente oración",
"Next Paragraph": "Siguiente párrafo",
"Separate Cover Page": "Portada separada",
"Resize Notebook": "Redimensionar cuaderno",
"Resize Sidebar": "Redimensionar barra lateral",
"Get Help from the Readest Community": "Obtén ayuda de la comunidad de Readest",
"Remove cover image": "Eliminar imagen de portada",
"Bookshelf": "Estantería",
"View Menu": "Menú de Vista",
"Settings Menu": "Menú de Configuración",
"View account details and quota": "Ver detalles de la cuenta y cuota",
"Library Header": "Encabezado de Biblioteca",
"Book Content": "Contenido del Libro",
"Footer Bar": "Barra de Pie de Página",
"Header Bar": "Barra de Encabezado",
"View Options": "Opciones de Vista",
"Book Menu": "Menú de Libro",
"Search Options": "Opciones de Búsqueda",
"Close": "Cerrar",
"Delete Book Options": "Opciones de Eliminar Libro",
"ON": "ENCENDIDO",
"OFF": "APAGADO",
"Reading Progress": "Progreso de Lectura",
"Page Margin": "Márgenes de Página",
"Remove Bookmark": "Eliminar Marcador",
"Add Bookmark": "Agregar Marcador",
"Books Content": "Contenido de Libros",
"Jump to Location": "Saltar a Ubicación",
"Unpin Notebook": "Desanclar Cuaderno",
"Pin Notebook": "Anclar Cuaderno",
"Hide Search Bar": "Ocultar Barra de Búsqueda",
"Show Search Bar": "Mostrar Barra de Búsqueda",
"On {{current}} of {{total}} page": "En {{current}} de {{total}} página",
"Section Title": "Título de Sección",
"Decrease": "Disminuir",
"Increase": "Aumentar",
"Settings Panels": "Paneles de Configuración",
"Settings": "Configuraciones",
"Unpin Sidebar": "Desanclar Barra Lateral",
"Pin Sidebar": "Anclar Barra Lateral",
"Toggle Sidebar": "Alternar Barra Lateral",
"Toggle Translation": "Alternar Traducción",
"Translation Disabled": "Traducción Deshabilitada",
"Minimize": "Minimizar",
"Maximize or Restore": "Maximizar o Restaurar",
"Exit Parallel Read": "Salir de Lectura Paralela",
"Enter Parallel Read": "Entrar en Lectura Paralela",
"Zoom Level": "Nivel de Zoom",
"Zoom Out": "Alejar",
"Reset Zoom": "Restablecer Zoom",
"Zoom In": "Acercar",
"Zoom Mode": "Modo de Zoom",
"Single Page": "Página Única",
"Auto Spread": "Distribución Automática",
"Fit Page": "Ajustar Página",
"Fit Width": "Ajustar Ancho",
"Failed to select directory": "Error al seleccionar el directorio",
"The new data directory must be different from the current one.": "El nuevo directorio de datos debe ser diferente del actual.",
"Migration failed: {{error}}": "La migración falló: {{error}}",
"Change Data Location": "Cambiar Ubicación de Datos",
"Current Data Location": "Ubicación Actual de Datos",
"Total size: {{size}}": "Tamaño total: {{size}}",
"Calculating file info...": "Calculando información del archivo...",
"New Data Location": "Nueva Ubicación de Datos",
"Choose Different Folder": "Elegir Carpeta Diferente",
"Choose New Folder": "Elegir Nueva Carpeta",
"Migrating data...": "Migrando datos...",
"Copying: {{file}}": "Copiando: {{file}}",
"{{current}} of {{total}} files": "{{current}} de {{total}} archivos",
"Migration completed successfully!": "¡Migración completada con éxito!",
"Your data has been moved to the new location. Please restart the application to complete the process.": "Tus datos han sido movidos a la nueva ubicación. Por favor, reinicia la aplicación para completar el proceso.",
"Migration failed": "La migración falló",
"Important Notice": "Aviso Importante",
"This will move all your app data to the new location. Make sure the destination has enough free space.": "Esto moverá todos los datos de tu aplicación a la nueva ubicación. Asegúrate de que el destino tenga suficiente espacio libre.",
"Restart App": "Reiniciar Aplicación",
"Start Migration": "Iniciar Migración",
"Advanced Settings": "Configuraciones Avanzadas",
"File count: {{size}}": "Número de archivos: {{size}}",
"Background Read Aloud": "Lectura en segundo plano",
"Ready to read aloud": "Listo para leer en voz alta",
"Read Aloud": "Leer en voz alta",
"Screen Brightness": "Brillo de pantalla",
"Background Image": "Imagen de fondo",
"Import Image": "Importar imagen",
"Opacity": "Opacidad",
"Size": "Tamaño",
"Cover": "Cubierta",
"Contain": "Contener"
}
@@ -82,7 +82,6 @@
"Search...": "Rechercher...",
"Select Book": "Sélectionner un livre",
"Select Books": "Sélectionner des livres",
"Select Multiple Books": "Sélectionner plusieurs livres",
"Sepia": "Sépia",
"Serif Font": "Police avec empattement",
"Show Book Details": "Afficher les détails du livre",
@@ -118,6 +117,7 @@
"Book Details": "Détails du livre",
"From Local File": "Depuis un fichier local",
"TOC": "Table des matières",
"Table of Contents": "Table des matières",
"Book uploaded: {{title}}": "Livre téléchargé : {{title}}",
"Failed to upload book: {{title}}": "Échec du téléchargement du livre : {{title}}",
"Book downloaded: {{title}}": "Livre téléchargé : {{title}}",
@@ -335,7 +335,6 @@
"Left Margin (px)": "Marge gauche (px)",
"Column Gap (%)": "Espacement des colonnes (%)",
"Always Show Status Bar": "Afficher toujours la barre d'état",
"Translation Not Available": "Traduction non disponible",
"Custom Content CSS": "CSS du contenu",
"Enter CSS for book content styling...": "Saisissez le CSS pour le contenu du livre...",
"Custom Reader UI CSS": "CSS de linterface",
@@ -447,7 +446,6 @@
"Google Books": "Google Books",
"Open Library": "Open Library",
"Fiction, Science, History": "Fiction, Science, Histoire",
"Select Cover Image": "Sélectionner l'image de couverture",
"Open Book in New Window": "Ouvrir dans une nouvelle fenêtre",
"Voices for {{lang}}": "Voix pour {{lang}}",
"Yandex Translate": "Yandex Traduction",
@@ -483,12 +481,10 @@
"Always use latest": "Toujours utiliser la dernière version",
"Send changes only": "Envoyer uniquement les modifications",
"Receive changes only": "Recevoir uniquement les modifications",
"Disabled": "Désactivé",
"Checksum Method": "Méthode de somme de contrôle",
"File Content (recommended)": "Contenu du fichier (recommandé)",
"File Name": "Nom du fichier",
"Device Name": "Nom de l'appareil",
"Sync Tolerance": "Tolérance de synchronisation",
"Connect to your KOReader Sync server.": "Connectez-vous à votre serveur de synchronisation KOReader.",
"Server URL": "URL du serveur",
"Username": "Nom d'utilisateur",
@@ -507,7 +503,6 @@
"Approximately {{percentage}}%": "Environ {{percentage}}%",
"Failed to connect": "Échec de la connexion",
"Sync Server Connected": "Serveur de synchronisation connecté",
"Precision: {{precision}} digits after the decimal": "Précision : {{precision}} chiffres après la virgule",
"Sync as {{userDisplayName}}": "Synchroniser en tant que {{userDisplayName}}",
"Custom Fonts": "Polices Personnalisées",
"Cancel Delete": "Annuler la Suppression",
@@ -521,5 +516,99 @@
"Select Video": "Sélectionner une Vidéo",
"Select Audio": "Sélectionner un Audio",
"Select Fonts": "Sélectionner des Polices",
"Supported font formats: .ttf, .odf, .woff, .woff2": "Formats de police pris en charge : .ttf, .odf, .woff, .woff2"
"Supported font formats: .ttf, .otf, .woff, .woff2": "Formats de police pris en charge : .ttf, .otf, .woff, .woff2",
"Push Progress": "Pousser la Progression",
"Pull Progress": "Tirer la Progression",
"Previous Paragraph": "Paragraphe précédent",
"Previous Sentence": "Phrase précédente",
"Pause": "Pause",
"Play": "Lecture",
"Next Sentence": "Phrase suivante",
"Next Paragraph": "Paragraphe suivant",
"Separate Cover Page": "Page de couverture séparée",
"Resize Notebook": "Redimensionner le Carnet",
"Resize Sidebar": "Redimensionner la Barre Latérale",
"Get Help from the Readest Community": "Obtenir de l'aide de la communauté Readest",
"Remove cover image": "Supprimer l'image de couverture",
"Bookshelf": "Étagère à livres",
"View Menu": "Menu d'affichage",
"Settings Menu": "Menu des paramètres",
"View account details and quota": "Voir les détails du compte et le quota",
"Library Header": "En-tête de la bibliothèque",
"Book Content": "Contenu du livre",
"Footer Bar": "Barre de pied de page",
"Header Bar": "Barre d'en-tête",
"View Options": "Options d'affichage",
"Book Menu": "Menu du livre",
"Search Options": "Options de recherche",
"Close": "Fermer",
"Delete Book Options": "Options de suppression du livre",
"ON": "ACTIVER",
"OFF": "DÉSACTIVER",
"Reading Progress": "Progression de lecture",
"Page Margin": "Marge de page",
"Remove Bookmark": "Supprimer le Marque-page",
"Add Bookmark": "Ajouter un Marque-page",
"Books Content": "Contenu des Livres",
"Jump to Location": "Aller à l'Emplacement",
"Unpin Notebook": "Détacher le Carnet",
"Pin Notebook": "Épingler le Carnet",
"Hide Search Bar": "Masquer la Barre de Recherche",
"Show Search Bar": "Afficher la Barre de Recherche",
"On {{current}} of {{total}} page": "Sur {{current}} de {{total}} page",
"Section Title": "Titre de Section",
"Decrease": "Diminuer",
"Increase": "Augmenter",
"Settings Panels": "Panneaux de Configuration",
"Settings": "Paramètres",
"Unpin Sidebar": "Détacher la Barre Latérale",
"Pin Sidebar": "Épingler la Barre Latérale",
"Toggle Sidebar": "Alternar la Barre Latérale",
"Toggle Translation": "Alternar Traduction",
"Translation Disabled": "Traduction Désactivée",
"Minimize": "Minimiser",
"Maximize or Restore": "Maximiser ou Restaurer",
"Exit Parallel Read": "Quitter la Lecture Parallèle",
"Enter Parallel Read": "Entrer dans la Lecture Parallèle",
"Zoom Level": "Zoom",
"Zoom Out": "Réduire le Zoom",
"Reset Zoom": "Réinitialiser le Zoom",
"Zoom In": "Agrandir le Zoom",
"Zoom Mode": "Mode Zoom",
"Single Page": "Page Unique",
"Auto Spread": "Répartition Automatique",
"Fit Page": "Ajuster la Page",
"Fit Width": "Ajuster la Largeur",
"Failed to select directory": "Échec de la sélection du répertoire",
"The new data directory must be different from the current one.": "Le nouveau répertoire de données doit être différent de l'actuel.",
"Migration failed: {{error}}": "La migration a échoué : {{error}}",
"Change Data Location": "Changer l'Emplacement des Données",
"Current Data Location": "Emplacement Actuel des Données",
"Total size: {{size}}": "Taille totale : {{size}}",
"Calculating file info...": "Calcul des informations sur le fichier...",
"New Data Location": "Nouvel Emplacement des Données",
"Choose Different Folder": "Choisir un Dossier Différent",
"Choose New Folder": "Choisir un Nouveau Dossier",
"Migrating data...": "Migration des données...",
"Copying: {{file}}": "Copie : {{file}}",
"{{current}} of {{total}} files": "{{current}} sur {{total}} fichiers",
"Migration completed successfully!": "Migration terminée avec succès !",
"Your data has been moved to the new location. Please restart the application to complete the process.": "Vos données ont été déplacées vers le nouvel emplacement. Veuillez redémarrer l'application pour terminer le processus.",
"Migration failed": "La migration a échoué",
"Important Notice": "Avis Important",
"This will move all your app data to the new location. Make sure the destination has enough free space.": "Cela déplacera toutes vos données d'application vers le nouvel emplacement. Assurez-vous que la destination dispose de suffisamment d'espace libre.",
"Restart App": "Redémarrer l'Application",
"Start Migration": "Démarrer la Migration",
"Advanced Settings": "Paramètres Avancés",
"File count: {{size}}": "Nombre de fichiers : {{size}}",
"Background Read Aloud": "Lecture Vocale en Arrière-Plan",
"Ready to read aloud": "Prêt à lire à haute voix",
"Read Aloud": "Lire à haute voix",
"Screen Brightness": "Luminosité de l'Écran",
"Background Image": "Image de Fond",
"Import Image": "Importer une Image",
"Opacity": "Opacité",
"Size": "Taille",
"Cover": "Couverture",
"Contain": "Contenir"
}
@@ -82,7 +82,6 @@
"Search...": "खोजें...",
"Select Book": "पुस्तक चुनें",
"Select Books": "पुस्तकें चुनें",
"Select Multiple Books": "कई पुस्तकें चुनें",
"Sepia": "सेपिया",
"Serif Font": "सेरिफ फ़ॉन्ट",
"Show Book Details": "पुस्तक विवरण दिखाएं",
@@ -118,6 +117,7 @@
"Book Details": "पुस्तक विवरण",
"From Local File": "स्थानीय फ़ाइल से",
"TOC": "सामग्री",
"Table of Contents": "सामग्री",
"Book uploaded: {{title}}": "पुस्तक अपलोड की गई: {{title}}",
"Failed to upload book: {{title}}": "पुस्तक अपलोड करने में विफल: {{title}}",
"Book downloaded: {{title}}": "पुस्तक डाउनलोड की गई: {{title}}",
@@ -333,7 +333,6 @@
"Left Margin (px)": "बायां हाशिया (px)",
"Column Gap (%)": "स्तंभों के बीच की दूरी (%)",
"Always Show Status Bar": "स्थिति पट्टी हमेशा दिखाएं",
"Translation Not Available": "अनुवाद उपलब्ध नहीं है",
"Custom Content CSS": "सामग्री का CSS",
"Enter CSS for book content styling...": "पुस्तक सामग्री के लिए CSS दर्ज करें...",
"Custom Reader UI CSS": "इंटरफ़ेस का CSS",
@@ -443,7 +442,6 @@
"Google Books": "गूगल बुक्स",
"Open Library": "ओपन लाइब्रेरी",
"Fiction, Science, History": "काल्पनिक, विज्ञान, इतिहास",
"Select Cover Image": "कवर इमेज चुनें",
"Open Book in New Window": "नई विंडो में पुस्तक खोलें",
"Voices for {{lang}}": "{{lang}} के लिए आवाज़ें",
"Yandex Translate": "यांडेक्स अनुवाद",
@@ -479,12 +477,10 @@
"Always use latest": "हमेशा नवीनतम का उपयोग करें",
"Send changes only": "केवल परिवर्तन भेजें",
"Receive changes only": "केवल परिवर्तन प्राप्त करें",
"Disabled": "अक्षम",
"Checksum Method": "चेकसम विधि",
"File Content (recommended)": "फाइल सामग्री (अनुशंसित)",
"File Name": "फाइल नाम",
"Device Name": "डिवाइस नाम",
"Sync Tolerance": "सिंक सहिष्णुता",
"Connect to your KOReader Sync server.": "अपने KOReader सिंक सर्वर से कनेक्ट करें।",
"Server URL": "सर्वर यूआरएल",
"Username": "उपयोगकर्ता नाम",
@@ -503,7 +499,6 @@
"Approximately {{percentage}}%": "लगभग {{percentage}}%",
"Failed to connect": "कनेक्ट करने में विफल",
"Sync Server Connected": "सिंक सर्वर कनेक्टेड",
"Precision: {{precision}} digits after the decimal": "सटीकता: {{precision}} दशमलव के बाद अंक",
"Sync as {{userDisplayName}}": "सिंक के रूप में {{userDisplayName}}",
"Custom Fonts": "कस्टम फ़ॉन्ट",
"Cancel Delete": "डिलीट रद्द करें",
@@ -517,5 +512,99 @@
"Select Video": "वीडियो चुनें",
"Select Audio": "ऑडियो चुनें",
"Select Fonts": "फ़ॉन्ट चुनें",
"Supported font formats: .ttf, .odf, .woff, .woff2": "समर्थित फ़ॉन्ट प्रारूप: .ttf, .odf, .woff, .woff2"
"Supported font formats: .ttf, .otf, .woff, .woff2": "समर्थित फ़ॉन्ट प्रारूप: .ttf, .otf, .woff, .woff2",
"Push Progress": "पुश प्रगति",
"Pull Progress": "पुल प्रगति",
"Previous Paragraph": "पिछला पैराग्राफ",
"Previous Sentence": "पिछला वाक्य",
"Pause": "रोकें",
"Play": "चलाएं",
"Next Sentence": "अगला वाक्य",
"Next Paragraph": "अगला पैराग्राफ",
"Separate Cover Page": "अलग कवर पृष्ठ",
"Resize Notebook": "नोटबुक का आकार बदलें",
"Resize Sidebar": "साइडबार का आकार बदलें",
"Get Help from the Readest Community": "Readest समुदाय से मदद लें",
"Remove cover image": "कवर इमेज हटाएं",
"Bookshelf": "पुस्तक शेल्फ",
"View Menu": "मेनू देखें",
"Settings Menu": "सेटिंग्स मेनू",
"View account details and quota": "खाता विवरण और कोटा देखें",
"Library Header": "पुस्तकालय शीर्षक",
"Book Content": "पुस्तक की सामग्री",
"Footer Bar": "फुटर बार",
"Header Bar": "हेडर बार",
"View Options": "देखने के विकल्प",
"Book Menu": "पुस्तक मेनू",
"Search Options": "खोज विकल्प",
"Close": "बंद करें",
"Delete Book Options": "पुस्तक हटाने के विकल्प",
"ON": "चालू",
"OFF": "बंद",
"Reading Progress": "पढ़ने की प्रगति",
"Page Margin": "पृष्ठ का मार्जिन",
"Remove Bookmark": "मार्कर हटाएं",
"Add Bookmark": "मार्कर जोड़ें",
"Books Content": "पुस्तकों की सामग्री",
"Jump to Location": "स्थान पर जाएं",
"Unpin Notebook": "नोटबुक अनपिन करें",
"Pin Notebook": "नोटबुक पिन करें",
"Hide Search Bar": "खोज बार छिपाएं",
"Show Search Bar": "खोज बार दिखाएं",
"On {{current}} of {{total}} page": "पृष्ठ {{current}} कुल {{total}} पर",
"Section Title": "अनुभाग शीर्षक",
"Decrease": "कम करें",
"Increase": "बढ़ाएं",
"Settings Panels": "सेटिंग्स पैनल",
"Settings": "सेटिंग्स",
"Unpin Sidebar": "साइडबार अनपिन करें",
"Pin Sidebar": "साइडबार पिन करें",
"Toggle Sidebar": "साइडबार टॉगल करें",
"Toggle Translation": "अनुवाद टॉगल करें",
"Translation Disabled": "अनुवाद अक्षम",
"Minimize": "न्यूनतम करें",
"Maximize or Restore": "अधिकतम या पुनर्स्थापित करें",
"Exit Parallel Read": "पैरालल रीड से बाहर निकलें",
"Enter Parallel Read": "पैरालल रीड में प्रवेश करें",
"Zoom Level": "ज़ूम स्तर",
"Zoom Out": "ज़ूम आउट",
"Reset Zoom": "ज़ूम रीसेट करें",
"Zoom In": "ज़ूम इन",
"Zoom Mode": "ज़ूम मोड",
"Single Page": "एकल पृष्ठ",
"Auto Spread": "स्वचालित फैलाव",
"Fit Page": "पृष्ठ में फिट करें",
"Fit Width": "चौड़ाई में फिट करें",
"Failed to select directory": "निर्देशिका का चयन करने में विफल",
"The new data directory must be different from the current one.": "नया डेटा निर्देशिका वर्तमान से भिन्न होना चाहिए।",
"Migration failed: {{error}}": "माइग्रेशन विफल: {{error}}",
"Change Data Location": "डेटा स्थान बदलें",
"Current Data Location": "वर्तमान डेटा स्थान",
"Total size: {{size}}": "कुल आकार: {{size}}",
"Calculating file info...": "फ़ाइल जानकारी की गणना कर रहे हैं...",
"New Data Location": "नया डेटा स्थान",
"Choose Different Folder": "विभिन्न फ़ोल्डर चुनें",
"Choose New Folder": "नया फ़ोल्डर चुनें",
"Migrating data...": "डेटा माइग्रेट कर रहे हैं...",
"Copying: {{file}}": "कॉपी कर रहे हैं: {{file}}",
"{{current}} of {{total}} files": "{{current}} में से {{total}} फ़ाइलें",
"Migration completed successfully!": "माइग्रेशन सफलतापूर्वक पूरा हुआ!",
"Your data has been moved to the new location. Please restart the application to complete the process.": "आपका डेटा नए स्थान पर स्थानांतरित कर दिया गया है। कृपया प्रक्रिया को पूरा करने के लिए एप्लिकेशन को पुनरारंभ करें।",
"Migration failed": "माइग्रेशन विफल",
"Important Notice": "महत्वपूर्ण सूचना",
"This will move all your app data to the new location. Make sure the destination has enough free space.": "यह आपके सभी ऐप डेटा को नए स्थान पर स्थानांतरित कर देगा। सुनिश्चित करें कि गंतव्य में पर्याप्त खाली स्थान है।",
"Restart App": "एप्लिकेशन पुनरारंभ करें",
"Start Migration": "माइग्रेशन प्रारंभ करें",
"Advanced Settings": "उन्नत सेटिंग्स",
"File count: {{size}}": "फ़ाइलों की संख्या: {{size}}",
"Background Read Aloud": "पृष्ठभूमि में वाचन",
"Ready to read aloud": "उच्च स्वर में पढ़ने के लिए तैयार",
"Read Aloud": "उच्च स्वर में पढ़ें",
"Screen Brightness": "स्क्रीन ब्राइटनेस",
"Background Image": "पृष्ठभूमि छवि",
"Import Image": "छवि आयात करें",
"Opacity": "अस्पष्टता",
"Size": "आकार",
"Cover": "कवर",
"Contain": "समाहित करें"
}
@@ -82,7 +82,6 @@
"Search...": "Cari...",
"Select Book": "Pilih Buku",
"Select Books": "Pilih buku",
"Select Multiple Books": "Pilih beberapa buku",
"Sepia": "Sepia",
"Serif Font": "Font Serif",
"Show Book Details": "Tampilkan Detail Buku",
@@ -118,6 +117,7 @@
"Book Details": "Detail Buku",
"From Local File": "Dari file lokal",
"TOC": "Daftar Isi",
"Table of Contents": "Daftar Isi",
"Book uploaded: {{title}}": "Buku diunggah: {{title}}",
"Failed to upload book: {{title}}": "Gagal mengunggah buku: {{title}}",
"Book downloaded: {{title}}": "Buku diunduh: {{title}}",
@@ -330,7 +330,6 @@
"Left Margin (px)": "Margin Kiri (px)",
"Column Gap (%)": "Jarak Antar Kolom (%)",
"Always Show Status Bar": "Selalu Tampilkan Bilah Status",
"Translation Not Available": "Terjemahan Tidak Tersedia",
"Custom Content CSS": "CSS konten",
"Enter CSS for book content styling...": "Masukkan CSS untuk gaya konten buku...",
"Custom Reader UI CSS": "CSS antarmuka",
@@ -439,7 +438,6 @@
"Google Books": "Google Books",
"Open Library": "Open Library",
"Fiction, Science, History": "Fiksi, Sains, Sejarah",
"Select Cover Image": "Pilihan Gambar Sampul",
"Open Book in New Window": "Buka Buku di Jendela Baru",
"Voices for {{lang}}": "Suara untuk {{lang}}",
"Yandex Translate": "Yandex Translate",
@@ -475,12 +473,10 @@
"Always use latest": "Selalu gunakan yang terbaru",
"Send changes only": "Kirim perubahan saja",
"Receive changes only": "Terima perubahan saja",
"Disabled": "Dinonaktifkan",
"Checksum Method": "Metode Checksum",
"File Content (recommended)": "Konten File (disarankan)",
"File Name": "Nama File",
"Device Name": "Nama Perangkat",
"Sync Tolerance": "Toleransi Sinkronisasi",
"Connect to your KOReader Sync server.": "Hubungkan ke server Sinkronisasi KOReader Anda.",
"Server URL": "URL Server",
"Username": "Nama Pengguna",
@@ -499,7 +495,6 @@
"Approximately {{percentage}}%": "Sekitar {{percentage}}%",
"Failed to connect": "Gagal terhubung",
"Sync Server Connected": "Server sinkronisasi terhubung",
"Precision: {{precision}} digits after the decimal": "Presisi: {{precision}} digit setelah desimal",
"Sync as {{userDisplayName}}": "Sinkronkan sebagai {{userDisplayName}}",
"Custom Fonts": "Font Kustom",
"Cancel Delete": "Batal Hapus",
@@ -513,5 +508,99 @@
"Select Video": "Pilih Video",
"Select Audio": "Pilih Audio",
"Select Fonts": "Pilih Font",
"Supported font formats: .ttf, .odf, .woff, .woff2": "Format font yang didukung: .ttf, .odf, .woff, .woff2"
"Supported font formats: .ttf, .otf, .woff, .woff2": "Format font yang didukung: .ttf, .otf, .woff, .woff2",
"Push Progress": "Dorong Progres",
"Pull Progress": "Tarik Progres",
"Previous Paragraph": "Paragraf Sebelumnya",
"Previous Sentence": "Kalimat Sebelumnya",
"Pause": "Jeda",
"Play": "Putar",
"Next Sentence": "Kalimat Berikutnya",
"Next Paragraph": "Paragraf Berikutnya",
"Separate Cover Page": "Halaman Sampul Terpisah",
"Resize Notebook": "Ubah Ukuran Buku Catatan",
"Resize Sidebar": "Ubah Ukuran Bilah Samping",
"Get Help from the Readest Community": "Dapatkan Bantuan dari Komunitas Readest",
"Remove cover image": "Hapus gambar sampul",
"Bookshelf": "Rak Buku",
"View Menu": "Lihat Menu",
"Settings Menu": "Menu Pengaturan",
"View account details and quota": "Lihat detail akun dan kuota",
"Library Header": "Header Perpustakaan",
"Book Content": "Isi Buku",
"Footer Bar": "Bilah Footer",
"Header Bar": "Bilah Header",
"View Options": "Opsi Tampilan",
"Book Menu": "Menu Buku",
"Search Options": "Opsi Pencarian",
"Close": "Tutup",
"Delete Book Options": "Opsi Hapus Buku",
"ON": "AKTIF",
"OFF": "TIDAK AKTIF",
"Reading Progress": "Progres Membaca",
"Page Margin": "Margin Halaman",
"Remove Bookmark": "Hapus Penanda",
"Add Bookmark": "Tambahkan Penanda",
"Books Content": "Isi Buku",
"Jump to Location": "Lompat ke Lokasi",
"Unpin Notebook": "Batal Pin Notebook",
"Pin Notebook": "Pin Notebook",
"Hide Search Bar": "Sembunyikan Bilah Pencarian",
"Show Search Bar": "Tampilkan Bilah Pencarian",
"On {{current}} of {{total}} page": "Pada {{current}} dari {{total}} halaman",
"Section Title": "Judul Bagian",
"Decrease": "Kecilkan",
"Increase": "Besarakan",
"Settings Panels": "Panel Pengaturan",
"Settings": "Pengaturan",
"Unpin Sidebar": "Batal Pin Bilah Samping",
"Pin Sidebar": "Pin Bilah Samping",
"Toggle Sidebar": "Toggel Bilah Samping",
"Toggle Translation": "Toggel Terjemahan",
"Translation Disabled": "Terjemahan Dinonaktifkan",
"Minimize": "Minimalkan",
"Maximize or Restore": "Maksimalkan atau Pulihkan",
"Exit Parallel Read": "Keluar dari Baca Paralel",
"Enter Parallel Read": "Masuk ke Baca Paralel",
"Zoom Level": "Level Zoom",
"Zoom Out": "Perbesar Zoom",
"Reset Zoom": "Reset Zoom",
"Zoom In": "Perkecil Zoom",
"Zoom Mode": "Mode Zoom",
"Single Page": "Halaman Tunggal",
"Auto Spread": "Penyebaran Otomatis",
"Fit Page": "Sesuaikan Halaman",
"Fit Width": "Sesuaikan Lebar",
"Failed to select directory": "Gagal memilih direktori",
"The new data directory must be different from the current one.": "Direktori data baru harus berbeda dari yang saat ini.",
"Migration failed: {{error}}": "Migrasi gagal: {{error}}",
"Change Data Location": "Ubah Lokasi Data",
"Current Data Location": "Lokasi Data Saat Ini",
"Total size: {{size}}": "Ukuran total: {{size}}",
"Calculating file info...": "Menghitung informasi file...",
"New Data Location": "Lokasi Data Baru",
"Choose Different Folder": "Pilih Folder Berbeda",
"Choose New Folder": "Pilih Folder Baru",
"Migrating data...": "Migrasi data...",
"Copying: {{file}}": "Menyalin: {{file}}",
"{{current}} of {{total}} files": "{{current}} dari {{total}} file",
"Migration completed successfully!": "Migrasi selesai dengan sukses!",
"Your data has been moved to the new location. Please restart the application to complete the process.": "Data Anda telah dipindahkan ke lokasi baru. Silakan restart aplikasi untuk menyelesaikan proses.",
"Migration failed": "Migrasi gagal",
"Important Notice": "Pemberitahuan Penting",
"This will move all your app data to the new location. Make sure the destination has enough free space.": "Ini akan memindahkan semua data aplikasi Anda ke lokasi baru. Pastikan tujuan memiliki cukup ruang kosong.",
"Restart App": "Restart Aplikasi",
"Start Migration": "Mulai Migrasi",
"Advanced Settings": "Pengaturan Lanjutan",
"File count: {{size}}": "Jumlah file: {{size}}",
"Background Read Aloud": "Bacakan Latar Belakang",
"Ready to read aloud": "Siap untuk dibacakan",
"Read Aloud": "Bacakan",
"Screen Brightness": "Kecerahan Layar",
"Background Image": "Gambar Latar Belakang",
"Import Image": "Impor Gambar",
"Opacity": "Keburaman",
"Size": "Ukuran",
"Cover": "Sampul",
"Contain": "Mengandung"
}
@@ -82,7 +82,6 @@
"Search...": "Cerca...",
"Select Book": "Seleziona libro",
"Select Books": "Seleziona libri",
"Select Multiple Books": "Seleziona più libri",
"Sepia": "Seppia",
"Serif Font": "Font serif",
"Show Book Details": "Mostra dettagli libro",
@@ -118,6 +117,7 @@
"Book Details": "Dettagli libro",
"From Local File": "Da file locale",
"TOC": "Sommario",
"Table of Contents": "Sommario",
"Book uploaded: {{title}}": "Libro caricato: {{title}}",
"Failed to upload book: {{title}}": "Caricamento libro non riuscito: {{title}}",
"Book downloaded: {{title}}": "Libro scaricato: {{title}}",
@@ -336,7 +336,6 @@
"Left Margin (px)": "Margine Sinistro (px)",
"Column Gap (%)": "Spazio tra Colonne (%)",
"Always Show Status Bar": "Mostra sempre la barra di stato",
"Translation Not Available": "Traduzione non disponibile",
"Custom Content CSS": "CSS contenuto",
"Enter CSS for book content styling...": "Inserisci il CSS per il contenuto del libro...",
"Custom Reader UI CSS": "CSS interfaccia",
@@ -447,7 +446,6 @@
"Google Books": "Google Books",
"Open Library": "Open Library",
"Fiction, Science, History": "Narrativa, Scienza, Storia",
"Select Cover Image": "Seleziona immagine di copertina",
"Open Book in New Window": "Apri libro in una nuova finestra",
"Voices for {{lang}}": "Voci per {{lang}}",
"Yandex Translate": "Yandex Translate",
@@ -483,12 +481,10 @@
"Always use latest": "Usa sempre l'ultima versione",
"Send changes only": "Invia solo le modifiche",
"Receive changes only": "Ricevi solo le modifiche",
"Disabled": "Disabilitato",
"Checksum Method": "Metodo di Controllo",
"File Content (recommended)": "Contenuto del File (consigliato)",
"File Name": "Nome del File",
"Device Name": "Nome del Dispositivo",
"Sync Tolerance": "Tolleranza di Sincronizzazione",
"Connect to your KOReader Sync server.": "Connettiti al tuo server KOReader Sync.",
"Server URL": "URL del Server",
"Username": "Nome Utente",
@@ -507,7 +503,6 @@
"Approximately {{percentage}}%": "Circa {{percentage}}%",
"Failed to connect": "Impossibile connettersi",
"Sync Server Connected": "Server di sincronizzazione connesso",
"Precision: {{precision}} digits after the decimal": "Precisione: {{precision}} cifre dopo la virgola",
"Sync as {{userDisplayName}}": "Sincronizza come {{userDisplayName}}",
"Custom Fonts": "Font Personalizzati",
"Cancel Delete": "Annulla Eliminazione",
@@ -521,5 +516,99 @@
"Select Video": "Seleziona Video",
"Select Audio": "Seleziona Audio",
"Select Fonts": "Seleziona Font",
"Supported font formats: .ttf, .odf, .woff, .woff2": "Formati di font supportati: .ttf, .odf, .woff, .woff2"
"Supported font formats: .ttf, .otf, .woff, .woff2": "Formati di font supportati: .ttf, .otf, .woff, .woff2",
"Push Progress": "Progresso push",
"Pull Progress": "Progresso pull",
"Previous Paragraph": "Paragrafo precedente",
"Previous Sentence": "Frase precedente",
"Pause": "Pausa",
"Play": "Riproduci",
"Next Sentence": "Frase successiva",
"Next Paragraph": "Paragrafo successivo",
"Separate Cover Page": "Pagina di copertina separata",
"Resize Notebook": "Ridimensiona quaderno",
"Resize Sidebar": "Ridimensiona barra laterale",
"Get Help from the Readest Community": "Ottieni aiuto dalla community di Readest",
"Remove cover image": "Rimuovi immagine di copertina",
"Bookshelf": "Scaffale dei libri",
"View Menu": "Visualizza menu",
"Settings Menu": "Menu impostazioni",
"View account details and quota": "Visualizza dettagli account e quota",
"Library Header": "Intestazione biblioteca",
"Book Content": "Contenuto del libro",
"Footer Bar": "Barra piè di pagina",
"Header Bar": "Barra intestazione",
"View Options": "Opzioni di visualizzazione",
"Book Menu": "Menu libro",
"Search Options": "Opzioni di ricerca",
"Close": "Chiudi",
"Delete Book Options": "Opzioni di eliminazione libro",
"ON": "ATTIVO",
"OFF": "DISATTIVO",
"Reading Progress": "Progresso di lettura",
"Page Margin": "Margine di pagina",
"Remove Bookmark": "Rimuovi Segnalibro",
"Add Bookmark": "Aggiungi Segnalibro",
"Books Content": "Contenuto dei Libri",
"Jump to Location": "Salta alla Posizione",
"Unpin Notebook": "Sblocca Quaderno",
"Pin Notebook": "Blocca Quaderno",
"Hide Search Bar": "Nascondi Barra di Ricerca",
"Show Search Bar": "Mostra Barra di Ricerca",
"On {{current}} of {{total}} page": "A pagina {{current}} di {{total}}",
"Section Title": "Titolo Sezione",
"Decrease": "Diminuisci",
"Increase": "Aumenta",
"Settings Panels": "Pannelli di Impostazione",
"Settings": "Impostazioni",
"Unpin Sidebar": "Sblocca Bilah Samping",
"Pin Sidebar": "Blocca Bilah Samping",
"Toggle Sidebar": "Toggel Bilah Samping",
"Toggle Translation": "Toggel Terjemahan",
"Translation Disabled": "Terjemahan Dinonaktifkan",
"Minimize": "Minimalkan",
"Maximize or Restore": "Maksimalkan atau Pulihkan",
"Exit Parallel Read": "Esci dalla lettura parallela",
"Enter Parallel Read": "Entra nella lettura parallela",
"Zoom Level": "Livello di zoom",
"Zoom Out": "Riduci zoom",
"Reset Zoom": "Ripristina zoom",
"Zoom In": "Inganna zoom",
"Zoom Mode": "Modalità zoom",
"Single Page": "Pagina singola",
"Auto Spread": "Distribuzione automatica",
"Fit Page": "Adatta pagina",
"Fit Width": "Adatta larghezza",
"Failed to select directory": "Impossibile selezionare la directory",
"The new data directory must be different from the current one.": "La nuova directory dei dati deve essere diversa da quella attuale.",
"Migration failed: {{error}}": "Migrzione fallita: {{error}}",
"Change Data Location": "Cambia posizione dei dati",
"Current Data Location": "Posizione attuale dei dati",
"Total size: {{size}}": "Dimensione totale: {{size}}",
"Calculating file info...": "Calcolo informazioni file...",
"New Data Location": "Nuova posizione dei dati",
"Choose Different Folder": "Scegli una cartella diversa",
"Choose New Folder": "Scegli una nuova cartella",
"Migrating data...": "Migrando dati...",
"Copying: {{file}}": "Copia in corso: {{file}}",
"{{current}} of {{total}} files": "{{current}} di {{total}} file",
"Migration completed successfully!": "Migrzione completata con successo!",
"Your data has been moved to the new location. Please restart the application to complete the process.": "I tuoi dati sono stati spostati nella nuova posizione. Riavvia l'applicazione per completare il processo.",
"Migration failed": "Migrzione fallita",
"Important Notice": "Avviso Importante",
"This will move all your app data to the new location. Make sure the destination has enough free space.": "Questo sposterà tutti i dati dell'app nella nuova posizione. Assicurati che la destinazione abbia spazio libero sufficiente.",
"Restart App": "Riavvia App",
"Start Migration": "Inizia Migrazione",
"Advanced Settings": "Impostazioni Avanzate",
"File count: {{size}}": "Conteggio file: {{size}}",
"Background Read Aloud": "Riproduzione in background",
"Ready to read aloud": "Pronto per la lettura ad alta voce",
"Read Aloud": "Leggi ad alta voce",
"Screen Brightness": "Luminosità dello schermo",
"Background Image": "Immagine di sfondo",
"Import Image": "Importa immagine",
"Opacity": "Opacità",
"Size": "Dimensione",
"Cover": "Copertura",
"Contain": "Contenere"
}
@@ -82,7 +82,6 @@
"Search...": "検索...",
"Select Book": "書籍を選択",
"Select Books": "書籍を選択",
"Select Multiple Books": "複数の書籍を選択",
"Sepia": "セピア",
"Serif Font": "セリフ体",
"Show Book Details": "書籍の詳細を表示",
@@ -118,6 +117,7 @@
"Book Details": "書籍の詳細",
"From Local File": "ローカルファイルから",
"TOC": "目次",
"Table of Contents": "目次",
"Book uploaded: {{title}}": "書籍がアップロードされました:{{title}}",
"Failed to upload book: {{title}}": "書籍のアップロードに失敗しました:{{title}}",
"Book downloaded: {{title}}": "書籍がダウンロードされました:{{title}}",
@@ -330,7 +330,6 @@
"Left Margin (px)": "左マージン (px)",
"Column Gap (%)": "列間の間隔 (%)",
"Always Show Status Bar": "ステータスバーを常に表示",
"Translation Not Available": "翻訳は利用できません",
"Custom Content CSS": "コンテンツCSS",
"Enter CSS for book content styling...": "本のコンテンツ用CSSを入力...",
"Custom Reader UI CSS": "リーダーUIのCSS",
@@ -439,7 +438,6 @@
"Google Books": "Google Books",
"Open Library": "Open Library",
"Fiction, Science, History": "小説、科学、歴史",
"Select Cover Image": "表紙画像を選択",
"Open Book in New Window": "新しいウィンドウで本を開く",
"Voices for {{lang}}": "{{lang}}の音声",
"Yandex Translate": "Yandex翻訳",
@@ -475,12 +473,10 @@
"Always use latest": "最新を常に使用",
"Send changes only": "変更のみを送信",
"Receive changes only": "変更のみを受信",
"Disabled": "無効",
"Checksum Method": "チェックサム方式",
"File Content (recommended)": "ファイル内容(推奨)",
"File Name": "ファイル名",
"Device Name": "デバイス名",
"Sync Tolerance": "同期許容範囲",
"Connect to your KOReader Sync server.": "KOReader Syncサーバーに接続します。",
"Server URL": "サーバーURL",
"Username": "ユーザー名",
@@ -499,7 +495,6 @@
"Approximately {{percentage}}%": "おおよそ {{percentage}}%",
"Failed to connect": "接続に失敗しました",
"Sync Server Connected": "同期サーバーに接続されました",
"Precision: {{precision}} digits after the decimal": "精度: {{precision}} 桁の小数点以下",
"Sync as {{userDisplayName}}": "{{userDisplayName}} として同期",
"Custom Fonts": "カスタムフォント",
"Cancel Delete": "削除をキャンセル",
@@ -513,5 +508,99 @@
"Select Video": "動画を選択",
"Select Audio": "音声を選択",
"Select Fonts": "フォントを選択",
"Supported font formats: .ttf, .odf, .woff, .woff2": "サポートされているフォント形式:.ttf, .odf, .woff, .woff2"
"Supported font formats: .ttf, .otf, .woff, .woff2": "サポートされているフォント形式:.ttf, .otf, .woff, .woff2",
"Push Progress": "進捗をプッシュ",
"Pull Progress": "進捗をプル",
"Previous Paragraph": "前の段落",
"Previous Sentence": "前の文",
"Pause": "一時停止",
"Play": "再生",
"Next Sentence": "次の文",
"Next Paragraph": "次の段落",
"Separate Cover Page": "別の表紙ページ",
"Resize Notebook": "ノートのサイズ変更",
"Resize Sidebar": "サイドバーのサイズ変更",
"Get Help from the Readest Community": "Readestコミュニティからヘルプを得る",
"Remove cover image": "表紙画像を削除",
"Bookshelf": "本棚",
"View Menu": "メニューを表示",
"Settings Menu": "設定メニュー",
"View account details and quota": "アカウントの詳細とクォータを表示",
"Library Header": "ライブラリヘッダー",
"Book Content": "本の内容",
"Footer Bar": "フッターバー",
"Header Bar": "ヘッダーバー",
"View Options": "表示オプション",
"Book Menu": "本のメニュー",
"Search Options": "検索オプション",
"Close": "閉じる",
"Delete Book Options": "本の削除オプション",
"ON": "オン",
"OFF": "オフ",
"Reading Progress": "読書進捗",
"Page Margin": "ページマージン",
"Remove Bookmark": "ブックマークを削除",
"Add Bookmark": "ブックマークを追加",
"Books Content": "本の内容",
"Jump to Location": "位置にジャンプ",
"Unpin Notebook": "ノートブックのピン留めを解除",
"Pin Notebook": "ノートブックをピン留め",
"Hide Search Bar": "検索バーを隠す",
"Show Search Bar": "検索バーを表示",
"On {{current}} of {{total}} page": "ページ {{current}} / {{total}}",
"Section Title": "セクションタイトル",
"Decrease": "減少",
"Increase": "増加",
"Settings Panels": "設定パネル",
"Settings": "設定",
"Unpin Sidebar": "サイドバーのピン留めを解除",
"Pin Sidebar": "サイドバーをピン留め",
"Toggle Sidebar": "サイドバーの切り替え",
"Toggle Translation": "翻訳の切り替え",
"Translation Disabled": "翻訳が無効化されました",
"Minimize": "最小化",
"Maximize or Restore": "最大化または復元",
"Exit Parallel Read": "並行読書を終了",
"Enter Parallel Read": "並行読書に入る",
"Zoom Level": "ズームレベル",
"Zoom Out": "ズームアウト",
"Reset Zoom": "ズームリセット",
"Zoom In": "ズームイン",
"Zoom Mode": "ズームモード",
"Single Page": "シングルページ",
"Auto Spread": "自動スプレッド",
"Fit Page": "ページに合わせる",
"Fit Width": "幅に合わせる",
"Failed to select directory": "ディレクトリの選択に失敗しました",
"The new data directory must be different from the current one.": "新しいデータディレクトリは現在のものと異なる必要があります。",
"Migration failed: {{error}}": "移行に失敗しました: {{error}}",
"Change Data Location": "データの場所を変更",
"Current Data Location": "現在のデータの場所",
"Total size: {{size}}": "合計サイズ: {{size}}",
"Calculating file info...": "ファイル情報を計算中...",
"New Data Location": "新しいデータの場所",
"Choose Different Folder": "別のフォルダーを選択",
"Choose New Folder": "新しいフォルダーを選択",
"Migrating data...": "データを移行中...",
"Copying: {{file}}": "コピー中: {{file}}",
"{{current}} of {{total}} files": "{{current}} / {{total}} ファイル",
"Migration completed successfully!": "移行が成功しました!",
"Your data has been moved to the new location. Please restart the application to complete the process.": "データは新しい場所に移動されました。プロセスを完了するにはアプリケーションを再起動してください。",
"Migration failed": "移行に失敗しました",
"Important Notice": "重要なお知らせ",
"This will move all your app data to the new location. Make sure the destination has enough free space.": "これにより、すべてのアプリデータが新しい場所に移動されます。宛先に十分な空き容量があることを確認してください。",
"Restart App": "アプリを再起動",
"Start Migration": "移行を開始",
"Advanced Settings": "詳細設定",
"File count: {{size}}": "ファイル数: {{size}}",
"Background Read Aloud": "バックグラウンド読み上げ",
"Ready to read aloud": "読み上げの準備ができました",
"Read Aloud": "読み上げ",
"Screen Brightness": "画面の明るさ",
"Background Image": "背景画像",
"Import Image": "画像をインポート",
"Opacity": "不透明度",
"Size": "サイズ",
"Cover": "カバー",
"Contain": "含む"
}
@@ -82,7 +82,6 @@
"Search...": "검색...",
"Select Book": "책 선택",
"Select Books": "책 선택",
"Select Multiple Books": "여러 책 선택",
"Sepia": "세피아",
"Serif Font": "세리프체",
"Show Book Details": "책 세부 정보 표시",
@@ -118,6 +117,7 @@
"Book Details": "책 세부 정보",
"From Local File": "로컬 파일에서",
"TOC": "목차",
"Table of Contents": "목차",
"Book uploaded: {{title}}": "책 업로드됨: {{title}}",
"Failed to upload book: {{title}}": "책 업로드 실패: {{title}}",
"Book downloaded: {{title}}": "책 다운로드됨: {{title}}",
@@ -330,7 +330,6 @@
"Left Margin (px)": "왼쪽 여백 (px)",
"Column Gap (%)": "열 간격 (%)",
"Always Show Status Bar": "상태 표시줄 항상 표시",
"Translation Not Available": "번역을 사용할 수 없음",
"Custom Content CSS": "콘텐츠 CSS",
"Enter CSS for book content styling...": "도서 콘텐츠 스타일을 위한 CSS 입력...",
"Custom Reader UI CSS": "리더 UI CSS",
@@ -439,7 +438,6 @@
"Google Books": "구글 북스",
"Open Library": "오픈 라이브러리",
"Fiction, Science, History": "소설, 과학, 역사",
"Select Cover Image": "표지 이미지 선택",
"Open Book in New Window": "새 창에서 책 열기",
"Voices for {{lang}}": "{{lang}}의 음성",
"Yandex Translate": "Yandex 번역",
@@ -475,12 +473,10 @@
"Always use latest": "항상 최신 버전 사용",
"Send changes only": "변경 사항만 전송",
"Receive changes only": "변경 사항만 수신",
"Disabled": "비활성화",
"Checksum Method": "체크섬 방법",
"File Content (recommended)": "파일 내용 (권장)",
"File Name": "파일 이름",
"Device Name": "장치 이름",
"Sync Tolerance": "동기화 허용 오차",
"Connect to your KOReader Sync server.": "KOReader Sync 서버에 연결합니다.",
"Server URL": "서버 URL",
"Username": "사용자 이름",
@@ -499,7 +495,6 @@
"Approximately {{percentage}}%": "대략 {{percentage}}%",
"Failed to connect": "연결 실패",
"Sync Server Connected": "동기화 서버에 연결됨",
"Precision: {{precision}} digits after the decimal": "정밀도: {{precision}} 자리의 소수점 이하",
"Sync as {{userDisplayName}}": "{{userDisplayName}}로 동기화",
"Custom Fonts": "사용자 정의 글꼴",
"Cancel Delete": "삭제 취소",
@@ -513,5 +508,99 @@
"Select Video": "동영상 선택",
"Select Audio": "오디오 선택",
"Select Fonts": "글꼴 선택",
"Supported font formats: .ttf, .odf, .woff, .woff2": "지원되는 글꼴 형식: .ttf, .odf, .woff, .woff2"
"Supported font formats: .ttf, .otf, .woff, .woff2": "지원되는 글꼴 형식: .ttf, .otf, .woff, .woff2",
"Push Progress": "진행 상황 푸시",
"Pull Progress": "진행 상황 끌어오기",
"Previous Paragraph": "이전 단락",
"Previous Sentence": "이전 문장",
"Pause": "일시정지",
"Play": "재생",
"Next Sentence": "다음 문장",
"Next Paragraph": "다음 단락",
"Separate Cover Page": "별도의 표지 페이지",
"Resize Notebook": "노트북 크기 조정",
"Resize Sidebar": "사이드바 크기 조정",
"Get Help from the Readest Community": "Readest 커뮤니티에서 도움 받기",
"Remove cover image": "표지 이미지 제거",
"Bookshelf": "책장",
"View Menu": "메뉴 보기",
"Settings Menu": "설정 메뉴",
"View account details and quota": "계정 세부정보 및 할당량 보기",
"Library Header": "라이브러리 헤더",
"Book Content": "도서 내용",
"Footer Bar": "푸터 바",
"Header Bar": "헤더 바",
"View Options": "보기 옵션",
"Book Menu": "도서 메뉴",
"Search Options": "검색 옵션",
"Close": "닫기",
"Delete Book Options": "도서 삭제 옵션",
"ON": "켜기",
"OFF": "끄기",
"Reading Progress": "읽기 진행 상황",
"Page Margin": "페이지 여백",
"Remove Bookmark": "북마크 제거",
"Add Bookmark": "북마크 추가",
"Books Content": "책 내용",
"Jump to Location": "위치로 이동",
"Unpin Notebook": "노트북 고정 해제",
"Pin Notebook": "노트북 고정",
"Hide Search Bar": "검색 바 숨기기",
"Show Search Bar": "검색 바 표시",
"On {{current}} of {{total}} page": "페이지 {{current}} / {{total}}",
"Section Title": "섹션 제목",
"Decrease": "감소",
"Increase": "증가",
"Settings Panels": "설정 패널",
"Settings": "설정",
"Unpin Sidebar": "사이드바 고정 해제",
"Pin Sidebar": "사이드바 고정",
"Toggle Sidebar": "사이드바 전환",
"Toggle Translation": "번역 전환",
"Translation Disabled": "번역 비활성화",
"Minimize": "최소화",
"Maximize or Restore": "최대화 또는 복원",
"Exit Parallel Read": "병렬 읽기 종료",
"Enter Parallel Read": "병렬 읽기 시작",
"Zoom Level": "확대/축소 수준",
"Zoom Out": "축소",
"Reset Zoom": "줌 재설정",
"Zoom In": "확대",
"Zoom Mode": "줌 모드",
"Single Page": "단일 페이지",
"Auto Spread": "자동 스프레드",
"Fit Page": "페이지에 맞춤",
"Fit Width": "너비에 맞춤",
"Failed to select directory": "디렉토리 선택 실패",
"The new data directory must be different from the current one.": "새 데이터 디렉토리는 현재 디렉토리와 달라야 합니다.",
"Migration failed: {{error}}": "마이그레이션 실패: {{error}}",
"Change Data Location": "데이터 위치 변경",
"Current Data Location": "현재 데이터 위치",
"Total size: {{size}}": "총 크기: {{size}}",
"Calculating file info...": "파일 정보 계산 중...",
"New Data Location": "새 데이터 위치",
"Choose Different Folder": "다른 폴더 선택",
"Choose New Folder": "새 폴더 선택",
"Migrating data...": "데이터 마이그레이션 중...",
"Copying: {{file}}": "복사 중: {{file}}",
"{{current}} of {{total}} files": "{{current}} / {{total}} 파일",
"Migration completed successfully!": "마이그레이션이 성공적으로 완료되었습니다!",
"Your data has been moved to the new location. Please restart the application to complete the process.": "데이터가 새 위치로 이동되었습니다. 프로세스를 완료하려면 애플리케이션을 재시작하십시오.",
"Migration failed": "마이그레이션 실패",
"Important Notice": "중요한 공지",
"This will move all your app data to the new location. Make sure the destination has enough free space.": "이 작업은 모든 앱 데이터를 새 위치로 이동합니다. 대상에 충분한 여유 공간이 있는지 확인하십시오.",
"Restart App": "앱 재시작",
"Start Migration": "마이그레이션 시작",
"Advanced Settings": "고급 설정",
"File count: {{size}}": "파일 수: {{size}}",
"Background Read Aloud": "백그라운드 음성 읽기",
"Ready to read aloud": "읽기 준비 완료",
"Read Aloud": "음성 읽기",
"Screen Brightness": "화면 밝기",
"Background Image": "배경 이미지",
"Import Image": "이미지 가져오기",
"Opacity": "불투명도",
"Size": "크기",
"Cover": "표지",
"Contain": "포함"
}
@@ -55,7 +55,6 @@
"Search Books...": "Boeken zoeken...",
"Clear Search": "Zoekopdracht wissen",
"Import Books": "Boeken importeren",
"Select Multiple Books": "Meerdere boeken selecteren",
"Select Books": "Boeken selecteren",
"Logged in as {{userDisplayName}}": "Ingelogd als {{userDisplayName}}",
"Logged in": "Ingelogd",
@@ -211,6 +210,7 @@
"Match Whole Words": "Hele woorden",
"Match Diacritics": "Diakritische tekens",
"TOC": "Inhoudsopgave",
"Table of Contents": "Inhoudsopgave",
"Sidebar": "Zijbalk",
"TTS not supported for PDF": "TTS niet ondersteund voor PDF",
"No Timeout": "Geen time-out",
@@ -333,7 +333,6 @@
"Left Margin (px)": "Linker marge (px)",
"Column Gap (%)": "Kolomafstand (%)",
"Always Show Status Bar": "Statusbalk altijd weergeven",
"Translation Not Available": "Vertaling niet beschikbaar",
"Custom Content CSS": "Aangepaste inhoud-CSS",
"Enter CSS for book content styling...": "Voer CSS in voor de opmaak van de boekinhoud...",
"Custom Reader UI CSS": "Aangepaste interface-CSS",
@@ -443,7 +442,6 @@
"Google Books": "Google Books",
"Open Library": "Open Library",
"Fiction, Science, History": "Fictie, Wetenschap, Geschiedenis",
"Select Cover Image": "Selecteer omslagafbeelding",
"Open Book in New Window": "Open boek in nieuw venster",
"Voices for {{lang}}": "Stemmen voor {{lang}}",
"Yandex Translate": "Yandex Vertalen",
@@ -479,12 +477,10 @@
"Always use latest": "Altijd de nieuwste gebruiken",
"Send changes only": "Verzend alleen wijzigingen",
"Receive changes only": "Ontvang alleen wijzigingen",
"Disabled": "Uitgeschakeld",
"Checksum Method": "Checksum-methode",
"File Content (recommended)": "Bestandsinhoud (aanbevolen)",
"File Name": "Bestandsnaam",
"Device Name": "Apparaatnaam",
"Sync Tolerance": "Synchronisatietolerantie",
"Connect to your KOReader Sync server.": "Verbind met je KOReader Sync-server.",
"Server URL": "Server-URL",
"Username": "Gebruikersnaam",
@@ -503,7 +499,6 @@
"Approximately {{percentage}}%": "Ongeveer {{percentage}}%",
"Failed to connect": "Verbinding mislukt",
"Sync Server Connected": "Synchronisatie server verbonden",
"Precision: {{precision}} digits after the decimal": "Precisie: {{precision}} cijfers na de komma",
"Sync as {{userDisplayName}}": "Synchroniseren als {{userDisplayName}}",
"Custom Fonts": "Aangepaste Lettertypen",
"Cancel Delete": "Verwijderen Annuleren",
@@ -517,5 +512,99 @@
"Select Video": "Video Selecteren",
"Select Audio": "Audio Selecteren",
"Select Fonts": "Lettertypen Selecteren",
"Supported font formats: .ttf, .odf, .woff, .woff2": "Ondersteunde lettertypeformaten: .ttf, .odf, .woff, .woff2"
"Supported font formats: .ttf, .otf, .woff, .woff2": "Ondersteunde lettertypeformaten: .ttf, .otf, .woff, .woff2",
"Push Progress": "Voortgang pushen",
"Pull Progress": "Voortgang pullen",
"Previous Paragraph": "Vorige alinea",
"Previous Sentence": "Vorige zin",
"Pause": "Pauzeren",
"Play": "Afspelen",
"Next Sentence": "Volgende zin",
"Next Paragraph": "Volgende alinea",
"Separate Cover Page": "Afzonderlijke omslagpagina",
"Resize Notebook": "Formaat Notitieblok Aanpassen",
"Resize Sidebar": "Formaat Zijbalk Aanpassen",
"Get Help from the Readest Community": "Hulp krijgen van de Readest Community",
"Remove cover image": "Omslagafbeelding verwijderen",
"Bookshelf": "Boekenkast",
"View Menu": "Menu bekijken",
"Settings Menu": "Instellingenmenu",
"View account details and quota": "Accountgegevens en quotum bekijken",
"Library Header": "Bibliotheekkop",
"Book Content": "Boekinhoud",
"Footer Bar": "Voettekstbalk",
"Header Bar": "Koptekstbalk",
"View Options": "Weergaveopties",
"Book Menu": "Boekmenu",
"Search Options": "Zoekopties",
"Close": "Sluiten",
"Delete Book Options": "Boekverwijderopties",
"ON": "AAN",
"OFF": "UIT",
"Reading Progress": "Leesvoortgang",
"Page Margin": "Pagina Marges",
"Remove Bookmark": "Bladwijzer Verwijderen",
"Add Bookmark": "Bladwijzer Toevoegen",
"Books Content": "Boekinhoud",
"Jump to Location": "Ga naar Locatie",
"Unpin Notebook": "Notitieblok Losmaken",
"Pin Notebook": "Notitieblok Vastmaken",
"Hide Search Bar": "Verberg Zoekbalk",
"Show Search Bar": "Toon Zoekbalk",
"On {{current}} of {{total}} page": "Op {{current}} van {{total}} pagina",
"Section Title": "Sectietitel",
"Decrease": "Verkleinen",
"Increase": "Vergroten",
"Settings Panels": "Instellingenpanelen",
"Settings": "Instellingen",
"Unpin Sidebar": "Zijbalk Losmaken",
"Pin Sidebar": "Zijbalk Vastmaken",
"Toggle Sidebar": "Zijbalk Wisselen",
"Toggle Translation": "Vertaling Wisselen",
"Translation Disabled": "Vertaling Uitgeschakeld",
"Minimize": "Minimaliseren",
"Maximize or Restore": "Maximaliseren of Herstellen",
"Exit Parallel Read": "Parallel Lezen Afsluiten",
"Enter Parallel Read": "Parallel Lezen Starten",
"Zoom Level": "Zoomniveau",
"Zoom Out": "Zoom Verkleinen",
"Reset Zoom": "Zoom Reset",
"Zoom In": "Zoom Vergroten",
"Zoom Mode": "Zoom Modus",
"Single Page": "Enkele Pagina",
"Auto Spread": "Automatische Verspreiding",
"Fit Page": "Pagina Aanpassen",
"Fit Width": "Breedte Aanpassen",
"Failed to select directory": "Selecteren van map is mislukt",
"The new data directory must be different from the current one.": "De nieuwe gegevensmap moet anders zijn dan de huidige.",
"Migration failed: {{error}}": "Migratie mislukt: {{error}}",
"Change Data Location": "Gegevenslocatie Wijzigen",
"Current Data Location": "Huidige Gegevenslocatie",
"Total size: {{size}}": "Totale grootte: {{size}}",
"Calculating file info...": "Bestandinformatie wordt berekend...",
"New Data Location": "Nieuwe Gegevenslocatie",
"Choose Different Folder": "Kies Een Andere Map",
"Choose New Folder": "Kies Nieuwe Map",
"Migrating data...": "Gegevens worden gemigreerd...",
"Copying: {{file}}": "Kopiëren: {{file}}",
"{{current}} of {{total}} files": "{{current}} van {{total}} bestanden",
"Migration completed successfully!": "Migratie succesvol voltooid!",
"Your data has been moved to the new location. Please restart the application to complete the process.": "Uw gegevens zijn naar de nieuwe locatie verplaatst. Start de applicatie opnieuw op om het proces te voltooien.",
"Migration failed": "Migratie mislukt",
"Important Notice": "Belangrijke Kennisgeving",
"This will move all your app data to the new location. Make sure the destination has enough free space.": "Dit zal al uw app-gegevens naar de nieuwe locatie verplaatsen. Zorg ervoor dat de bestemming voldoende vrije ruimte heeft.",
"Restart App": "Herstart App",
"Start Migration": "Start Migratie",
"Advanced Settings": "Geavanceerde Instellingen",
"File count: {{size}}": "Bestandsaantal: {{size}}",
"Background Read Aloud": "Achtergrond Voorlezen",
"Ready to read aloud": "Klaar om voor te lezen",
"Read Aloud": "Voorlezen",
"Screen Brightness": "Schermhelderheid",
"Background Image": "Achtergrondafbeelding",
"Import Image": "Afbeelding importeren",
"Opacity": "Doorzichtigheid",
"Size": "Grootte",
"Cover": "Omslag",
"Contain": "Bevatten"
}
@@ -82,7 +82,6 @@
"Search...": "Szukaj...",
"Select Book": "Wybierz książkę",
"Select Books": "Wybierz książki",
"Select Multiple Books": "Wybierz wiele książek",
"Sepia": "Sepia",
"Serif Font": "Czcionka szeryfowa",
"Show Book Details": "Pokaż szczegóły książki",
@@ -118,6 +117,7 @@
"Book Details": "Szczegóły książki",
"From Local File": "Z pliku lokalnego",
"TOC": "Spis treści",
"Table of Contents": "Spis treści",
"Book uploaded: {{title}}": "Książka przesłana: {{title}}",
"Failed to upload book: {{title}}": "Nie udało się przesłać książki: {{title}}",
"Book downloaded: {{title}}": "Książka pobrana: {{title}}",
@@ -339,7 +339,6 @@
"Left Margin (px)": "Lewy margines (px)",
"Column Gap (%)": "Odstęp między kolumnami (%)",
"Always Show Status Bar": "Zawsze pokazuj pasek stanu",
"Translation Not Available": "Brak dostępnego tłumaczenia",
"Custom Content CSS": "CSS treści",
"Enter CSS for book content styling...": "Wprowadź CSS dla stylu treści książki...",
"Custom Reader UI CSS": "CSS interfejsu",
@@ -451,7 +450,6 @@
"Google Books": "Google Books",
"Open Library": "Open Library",
"Fiction, Science, History": "Beletrystyka, Nauka, Historia",
"Select Cover Image": "Zaznacz obraz okładki",
"Open Book in New Window": "Otwórz książkę w nowym oknie",
"Voices for {{lang}}": "{{lang}} Głosy",
"Yandex Translate": "Yandex Tłumacz",
@@ -487,12 +485,10 @@
"Always use latest": "Zawsze używaj najnowszej",
"Send changes only": "Wyślij tylko zmiany",
"Receive changes only": "Odbierz tylko zmiany",
"Disabled": "Wyłączone",
"Checksum Method": "Metoda sumy kontrolnej",
"File Content (recommended)": "Zawartość pliku (zalecane)",
"File Name": "Nazwa pliku",
"Device Name": "Nazwa urządzenia",
"Sync Tolerance": "Tolerancja synchronizacji",
"Connect to your KOReader Sync server.": "Połącz z serwerem synchronizacji KOReader.",
"Server URL": "Adres URL serwera",
"Username": "Nazwa użytkownika",
@@ -511,7 +507,6 @@
"Approximately {{percentage}}%": "Około {{percentage}}%",
"Failed to connect": "Nie udało się połączyć",
"Sync Server Connected": "Serwer synchronizacji połączony",
"Precision: {{precision}} digits after the decimal": "Precyzja: {{precision}} cyfr po przecinku",
"Sync as {{userDisplayName}}": "Synchronizuj jako {{userDisplayName}}",
"Custom Fonts": "Niestandardowe Czcionki",
"Cancel Delete": "Anuluj Usuwanie",
@@ -525,5 +520,99 @@
"Select Video": "Wybierz Wideo",
"Select Audio": "Wybierz Audio",
"Select Fonts": "Wybierz Czcionki",
"Supported font formats: .ttf, .odf, .woff, .woff2": "Obsługiwane formaty czcionek: .ttf, .odf, .woff, .woff2"
"Supported font formats: .ttf, .otf, .woff, .woff2": "Obsługiwane formaty czcionek: .ttf, .otf, .woff, .woff2",
"Push Progress": "Wyślij postęp",
"Pull Progress": "Pobierz postęp",
"Previous Paragraph": "Poprzedni akapit",
"Previous Sentence": "Poprzednie zdanie",
"Pause": "Pauza",
"Play": "Odtwórz",
"Next Sentence": "Następne zdanie",
"Next Paragraph": "Następny akapit",
"Separate Cover Page": "Osobna strona okładki",
"Resize Notebook": "Zmień rozmiar notatnika",
"Resize Sidebar": "Zmień rozmiar paska bocznego",
"Get Help from the Readest Community": "Uzyskaj pomoc od społeczności Readest",
"Remove cover image": "Usuń obraz okładki",
"Bookshelf": "Półka na książki",
"View Menu": "Pokaż menu",
"Settings Menu": "Menu ustawień",
"View account details and quota": "Zobacz szczegóły konta i limit",
"Library Header": "Nagłówek biblioteki",
"Book Content": "Zawartość książki",
"Footer Bar": "Pasek stopki",
"Header Bar": "Pasek nagłówka",
"View Options": "Opcje widoku",
"Book Menu": "Menu książki",
"Search Options": "Opcje wyszukiwania",
"Close": "Zamknij",
"Delete Book Options": "Opcje usuwania książki",
"ON": "WŁĄCZONE",
"OFF": "WYŁĄCZONE",
"Reading Progress": "Postęp czytania",
"Page Margin": "Margines strony",
"Remove Bookmark": "Usuń zakładkę",
"Add Bookmark": "Dodaj zakładkę",
"Books Content": "Zawartość książek",
"Jump to Location": "Przejdź do lokalizacji",
"Unpin Notebook": "Odczep notatnik",
"Pin Notebook": "Przypnij notatnik",
"Hide Search Bar": "Ukryj pasek wyszukiwania",
"Show Search Bar": "Pokaż pasek wyszukiwania",
"On {{current}} of {{total}} page": "Na {{current}} z {{total}} strony",
"Section Title": "Tytuł sekcji",
"Decrease": "Zmniejsz",
"Increase": "Zwiększ",
"Settings Panels": "Panele ustawień",
"Settings": "Ustawienia",
"Unpin Sidebar": "Odczep pasek boczny",
"Pin Sidebar": "Przypnij pasek boczny",
"Toggle Sidebar": "Włącz/Wyłącz pasek boczny",
"Toggle Translation": "Włącz/Wyłącz tłumaczenie",
"Translation Disabled": "Tłumaczenie wyłączone",
"Minimize": "Minimalizuj",
"Maximize or Restore": "Maksymalizuj lub Przywróć",
"Exit Parallel Read": "Wyjdź z czytania równoległego",
"Enter Parallel Read": "Wejdź w czytanie równoległe",
"Zoom Level": "Poziom powiększenia",
"Zoom Out": "Zoom Wydłuż",
"Reset Zoom": "Resetuj Zoom",
"Zoom In": "Zoom Skróć",
"Zoom Mode": "Tryb Zoom",
"Single Page": "Pojedyncza Strona",
"Auto Spread": "Automatyczne Rozprzestrzenianie",
"Fit Page": "Dopasuj Stronę",
"Fit Width": "Dopasuj Szerokość",
"Failed to select directory": "Nie udało się wybrać katalogu",
"The new data directory must be different from the current one.": "Nowy katalog danych musi różnić się od obecnego.",
"Migration failed: {{error}}": "Migracja nie powiodła się: {{error}}",
"Change Data Location": "Zmień lokalizację danych",
"Current Data Location": "Bieżąca lokalizacja danych",
"Total size: {{size}}": "Całkowity rozmiar: {{size}}",
"Calculating file info...": "Obliczanie informacji o pliku...",
"New Data Location": "Nowa lokalizacja danych",
"Choose Different Folder": "Wybierz inny folder",
"Choose New Folder": "Wybierz nowy folder",
"Migrating data...": "Migracja danych...",
"Copying: {{file}}": "Kopiowanie: {{file}}",
"{{current}} of {{total}} files": "{{current}} z {{total}} plików",
"Migration completed successfully!": "Migracja zakończona pomyślnie!",
"Your data has been moved to the new location. Please restart the application to complete the process.": "Twoje dane zostały przeniesione do nowej lokalizacji. Proszę zrestartować aplikację, aby zakończyć proces.",
"Migration failed": "Migracja nie powiodła się",
"Important Notice": "Ważne powiadomienie",
"This will move all your app data to the new location. Make sure the destination has enough free space.": "To przeniesie wszystkie dane aplikacji do nowej lokalizacji. Upewnij się, że docelowy folder ma wystarczająco dużo wolnego miejsca.",
"Restart App": "Zrestartuj aplikację",
"Start Migration": "Rozpocznij migrację",
"Advanced Settings": "Ustawienia zaawansowane",
"File count: {{size}}": "Liczba plików: {{size}}",
"Background Read Aloud": "Czytanie na głos w tle",
"Ready to read aloud": "Gotowy do przeczytania na głos",
"Read Aloud": "Czytaj na głos",
"Screen Brightness": "Jasność ekranu",
"Background Image": "Obraz tła",
"Import Image": "Importuj obraz",
"Opacity": "Przezroczystość",
"Size": "Rozmiar",
"Cover": "Okładka",
"Contain": "Zawierać"
}
@@ -82,7 +82,6 @@
"Search...": "Pesquisar...",
"Select Book": "Selecionar Livro",
"Select Books": "Selecionar livros",
"Select Multiple Books": "Selecionar múltiplos livros",
"Sepia": "Sépia",
"Serif Font": "Fonte Serif",
"Show Book Details": "Mostrar Detalhes do Livro",
@@ -118,6 +117,7 @@
"Book Details": "Detalhes do Livro",
"From Local File": "Do arquivo local",
"TOC": "Índice",
"Table of Contents": "Índice",
"Book uploaded: {{title}}": "Livro enviado: {{title}}",
"Failed to upload book: {{title}}": "Falha ao enviar livro: {{title}}",
"Book downloaded: {{title}}": "Livro baixado: {{title}}",
@@ -336,7 +336,6 @@
"Left Margin (px)": "Margem esquerda (px)",
"Column Gap (%)": "Espaço entre colunas (%)",
"Always Show Status Bar": "Exibir sempre a barra de status",
"Translation Not Available": "Tradução não disponível",
"Custom Content CSS": "CSS do conteúdo",
"Enter CSS for book content styling...": "Insira o CSS para o estilo do conteúdo do livro...",
"Custom Reader UI CSS": "CSS da interface",
@@ -447,7 +446,6 @@
"Google Books": "Google Books",
"Open Library": "Open Library",
"Fiction, Science, History": "Ficção, Ciência, História",
"Select Cover Image": "Selecionar imagem da capa",
"Open Book in New Window": "Abrir livro em nova janela",
"Voices for {{lang}}": "Vozes para {{lang}}",
"Yandex Translate": "Yandex Translate",
@@ -483,12 +481,10 @@
"Always use latest": "Sempre usar o mais recente",
"Send changes only": "Enviar apenas alterações",
"Receive changes only": "Receber apenas alterações",
"Disabled": "Desativado",
"Checksum Method": "Método de Verificação",
"File Content (recommended)": "Conteúdo do Arquivo (recomendado)",
"File Name": "Nome do Arquivo",
"Device Name": "Nome do Dispositivo",
"Sync Tolerance": "Tolerância de Sincronização",
"Connect to your KOReader Sync server.": "Conectar ao seu servidor KOReader Sync.",
"Server URL": "URL do Servidor",
"Username": "Nome de Usuário",
@@ -507,7 +503,6 @@
"Approximately {{percentage}}%": "Aproximadamente {{percentage}}%",
"Failed to connect": "Falha ao conectar",
"Sync Server Connected": "Servidor de Sincronização Conectado",
"Precision: {{precision}} digits after the decimal": "Precisão: {{precision}} dígitos após a vírgula",
"Sync as {{userDisplayName}}": "Sincronizar como {{userDisplayName}}",
"Custom Fonts": "Fontes Personalizadas",
"Cancel Delete": "Cancelar Exclusão",
@@ -521,5 +516,99 @@
"Select Video": "Selecionar Vídeo",
"Select Audio": "Selecionar Áudio",
"Select Fonts": "Selecionar Fontes",
"Supported font formats: .ttf, .odf, .woff, .woff2": "Formatos de fonte suportados: .ttf, .odf, .woff, .woff2"
"Supported font formats: .ttf, .otf, .woff, .woff2": "Formatos de fonte suportados: .ttf, .otf, .woff, .woff2",
"Push Progress": "Enviar Progresso",
"Pull Progress": "Obter Progresso",
"Previous Paragraph": "Parágrafo anterior",
"Previous Sentence": "Frase anterior",
"Pause": "Pausar",
"Play": "Reproduzir",
"Next Sentence": "Próxima frase",
"Next Paragraph": "Próximo parágrafo",
"Separate Cover Page": "Páginas de Capa Separadas",
"Resize Notebook": "Redimensionar Caderno",
"Resize Sidebar": "Redimensionar Barra Lateral",
"Get Help from the Readest Community": "Obter ajuda da comunidade Readest",
"Remove cover image": "Remover imagem da capa",
"Bookshelf": "Estante de Livros",
"View Menu": "Ver Menu",
"Settings Menu": "Menu de Configurações",
"View account details and quota": "Ver detalhes da conta e cota",
"Library Header": "Cabeçalho da Biblioteca",
"Book Content": "Conteúdo do Livro",
"Footer Bar": "Barra de Rodapé",
"Header Bar": "Barra de Cabeçalho",
"View Options": "Opções de Visualização",
"Book Menu": "Menu do Livro",
"Search Options": "Opções de Pesquisa",
"Close": "Fechar",
"Delete Book Options": "Opções de Exclusão de Livro",
"ON": "LIGADO",
"OFF": "DESLIGADO",
"Reading Progress": "Progresso de Leitura",
"Page Margin": "Margem da Página",
"Remove Bookmark": "Remover Marcador",
"Add Bookmark": "Adicionar Marcador",
"Books Content": "Conteúdo dos Livros",
"Jump to Location": "Ir para Localização",
"Unpin Notebook": "Desafixar Caderno",
"Pin Notebook": "Fixar Caderno",
"Hide Search Bar": "Ocultar Barra de Pesquisa",
"Show Search Bar": "Mostrar Barra de Pesquisa",
"On {{current}} of {{total}} page": "Na {{current}} de {{total}} página",
"Section Title": "Título da Seção",
"Decrease": "Diminuir",
"Increase": "Aumentar",
"Settings Panels": "Painéis de Configurações",
"Settings": "Configurações",
"Unpin Sidebar": "Desafixar Barra Lateral",
"Pin Sidebar": "Fixar Barra Lateral",
"Toggle Sidebar": "Alternar Barra Lateral",
"Toggle Translation": "Alternar Tradução",
"Translation Disabled": "Tradução Desativada",
"Minimize": "Minimizar",
"Maximize or Restore": "Maximizar ou Restaurar",
"Exit Parallel Read": "Sair da Leitura Paralela",
"Enter Parallel Read": "Entrar na Leitura Paralela",
"Zoom Level": "Nivel de Zoom",
"Zoom Out": "Reduzir Zoom",
"Reset Zoom": "Redefinir Zoom",
"Zoom In": "Aumentar Zoom",
"Zoom Mode": "Modo de Zoom",
"Single Page": "Página Única",
"Auto Spread": "Espalhamento Automático",
"Fit Page": "Ajustar Página",
"Fit Width": "Ajustar Largura",
"Failed to select directory": "Falha ao selecionar diretório",
"The new data directory must be different from the current one.": "O novo diretório de dados deve ser diferente do atual.",
"Migration failed: {{error}}": "A migração falhou: {{error}}",
"Change Data Location": "Alterar Localização dos Dados",
"Current Data Location": "Localização Atual dos Dados",
"Total size: {{size}}": "Tamanho total: {{size}}",
"Calculating file info...": "Calculando informações do arquivo...",
"New Data Location": "Nova Localização dos Dados",
"Choose Different Folder": "Escolher Pasta Diferente",
"Choose New Folder": "Escolher Nova Pasta",
"Migrating data...": "Migrando dados...",
"Copying: {{file}}": "Copiando: {{file}}",
"{{current}} of {{total}} files": "{{current}} de {{total}} arquivos",
"Migration completed successfully!": "Migração concluída com sucesso!",
"Your data has been moved to the new location. Please restart the application to complete the process.": "Seus dados foram movidos para a nova localização. Reinicie o aplicativo para concluir o processo.",
"Migration failed": "Migração falhou",
"Important Notice": "Aviso Importante",
"This will move all your app data to the new location. Make sure the destination has enough free space.": "Isso moverá todos os dados do seu aplicativo para a nova localização. Certifique-se de que o destino tenha espaço livre suficiente.",
"Restart App": "Reiniciar Aplicativo",
"Start Migration": "Iniciar Migração",
"Advanced Settings": "Configurações Avançadas",
"File count: {{size}}": "Contagem de arquivos: {{size}}",
"Background Read Aloud": "Leitura em Segundo Plano",
"Ready to read aloud": "Pronto para leitura em voz alta",
"Read Aloud": "Ler em Voz Alta",
"Screen Brightness": "Brilho da Tela",
"Background Image": "Imagem de Fundo",
"Import Image": "Importar Imagem",
"Opacity": "Opacidade",
"Size": "Tamanho",
"Cover": "Capa",
"Contain": "Contém"
}
@@ -82,7 +82,6 @@
"Search...": "Поиск...",
"Select Book": "Выбрать книгу",
"Select Books": "Выбрать книги",
"Select Multiple Books": "Выбрать несколько книг",
"Sepia": "Сепия",
"Serif Font": "Шрифт с засечками",
"Show Book Details": "Показать детали книги",
@@ -118,6 +117,7 @@
"Book Details": "Детали книги",
"From Local File": "Из локального файла",
"TOC": "Содержание",
"Table of Contents": "Содержание",
"Book uploaded: {{title}}": "Книга загружена: {{title}}",
"Failed to upload book: {{title}}": "Не удалось загрузить книгу: {{title}}",
"Book downloaded: {{title}}": "Книга скачана: {{title}}",
@@ -339,7 +339,6 @@
"Left Margin (px)": "Левый отступ (пикс)",
"Column Gap (%)": "Промежуток между колонками (%)",
"Always Show Status Bar": "Всегда показывать панель состояния",
"Translation Not Available": "Перевод недоступен",
"Custom Content CSS": "CSS содержимого",
"Enter CSS for book content styling...": "Введите CSS для оформления содержимого книги...",
"Custom Reader UI CSS": "CSS интерфейса",
@@ -451,7 +450,6 @@
"Google Books": "Google Книги",
"Open Library": "Open Library",
"Fiction, Science, History": "Художественная литература, Наука, История",
"Select Cover Image": "Выбрать изображение обложки",
"Open Book in New Window": "Открыть книгу в новом окне",
"Voices for {{lang}}": "Голоса для {{lang}}",
"Yandex Translate": "Yandex Translate",
@@ -487,12 +485,10 @@
"Always use latest": "Всегда использовать последнюю",
"Send changes only": "Отправлять только изменения",
"Receive changes only": "Получать только изменения",
"Disabled": "Отключено",
"Checksum Method": "Метод контрольной суммы",
"File Content (recommended)": "Содержимое файла (рекомендуется)",
"File Name": "Имя файла",
"Device Name": "Имя устройства",
"Sync Tolerance": "Допуск синхронизации",
"Connect to your KOReader Sync server.": "Подключитесь к вашему серверу синхронизации KOReader.",
"Server URL": "URL сервера",
"Username": "Имя пользователя",
@@ -511,7 +507,6 @@
"Approximately {{percentage}}%": "Приблизительно {{percentage}}%",
"Failed to connect": "Не удалось подключиться",
"Sync Server Connected": "Сервер синхронизации подключен",
"Precision: {{precision}} digits after the decimal": "Точность: {{precision}} знаков после запятой",
"Sync as {{userDisplayName}}": "Синхронизировать как {{userDisplayName}}",
"Custom Fonts": "Пользовательские Шрифты",
"Cancel Delete": "Отменить Удаление",
@@ -525,5 +520,99 @@
"Select Video": "Выбрать Видео",
"Select Audio": "Выбрать Аудио",
"Select Fonts": "Выбрать Шрифты",
"Supported font formats: .ttf, .odf, .woff, .woff2": "Поддерживаемые форматы шрифтов: .ttf, .odf, .woff, .woff2"
"Supported font formats: .ttf, .otf, .woff, .woff2": "Поддерживаемые форматы шрифтов: .ttf, .otf, .woff, .woff2",
"Push Progress": "Отправить прогресс",
"Pull Progress": "Получить прогресс",
"Previous Paragraph": "Предыдущий абзац",
"Previous Sentence": "Предыдущее предложение",
"Pause": "Пауза",
"Play": "Воспроизвести",
"Next Sentence": "Следующее предложение",
"Next Paragraph": "Следующий абзац",
"Separate Cover Page": "Отдельная страница обложки",
"Resize Notebook": "Изменить размер блокнота",
"Resize Sidebar": "Изменить размер боковой панели",
"Get Help from the Readest Community": "Получить помощь от сообщества Readest",
"Remove cover image": "Удалить изображение обложки",
"Bookshelf": "Книжная полка",
"View Menu": "Просмотр меню",
"Settings Menu": "Меню настроек",
"View account details and quota": "Просмотр данных аккаунта и квоты",
"Library Header": "Заголовок библиотеки",
"Book Content": "Содержание книги",
"Footer Bar": "Нижняя панель",
"Header Bar": "Верхняя панель",
"View Options": "Параметры просмотра",
"Book Menu": "Меню книги",
"Search Options": "Параметры поиска",
"Close": "Закрыть",
"Delete Book Options": "Параметры удаления книги",
"ON": "ВКЛ",
"OFF": "ВЫКЛ",
"Reading Progress": "Прогресс чтения",
"Page Margin": "Поля страницы",
"Remove Bookmark": "Удалить закладку",
"Add Bookmark": "Добавить закладку",
"Books Content": "Содержимое книг",
"Jump to Location": "Перейти к местоположению",
"Unpin Notebook": "Открепить блокнот",
"Pin Notebook": "Закрепить блокнот",
"Hide Search Bar": "Скрыть панель поиска",
"Show Search Bar": "Показать панель поиска",
"On {{current}} of {{total}} page": "На {{current}} из {{total}} страницы",
"Section Title": "Заголовок раздела",
"Decrease": "Уменьшить",
"Increase": "Увеличить",
"Settings Panels": "Панели настроек",
"Settings": "Настройки",
"Unpin Sidebar": "Открепить боковую панель",
"Pin Sidebar": "Закрепить боковую панель",
"Toggle Sidebar": "Переключить боковую панель",
"Toggle Translation": "Переключить перевод",
"Translation Disabled": "Перевод отключен",
"Minimize": "Свернуть",
"Maximize or Restore": "Максимизировать или восстановить",
"Exit Parallel Read": "Выйти из параллельного чтения",
"Enter Parallel Read": "Войти в параллельное чтение",
"Zoom Level": "Уровень масштабирования",
"Zoom Out": "Уменьшить масштаб",
"Reset Zoom": "Сбросить масштаб",
"Zoom In": "Увеличить масштаб",
"Zoom Mode": "Режим масштабирования",
"Single Page": "Одна страница",
"Auto Spread": "Автоматическое растяжение",
"Fit Page": "Подогнать страницу",
"Fit Width": "Подогнать ширину",
"Failed to select directory": "Не удалось выбрать каталог",
"The new data directory must be different from the current one.": "Новая директория данных должна отличаться от текущей.",
"Migration failed: {{error}}": "Ошибка миграции: {{error}}",
"Change Data Location": "Изменить расположение данных",
"Current Data Location": "Текущее расположение данных",
"Total size: {{size}}": "Общий размер: {{size}}",
"Calculating file info...": "Вычисление информации о файле...",
"New Data Location": "Новое расположение данных",
"Choose Different Folder": "Выбрать другую папку",
"Choose New Folder": "Выбрать новую папку",
"Migrating data...": "Миграция данных...",
"Copying: {{file}}": "Копирование: {{file}}",
"{{current}} of {{total}} files": "{{current}} из {{total}} файлов",
"Migration completed successfully!": "Миграция завершена успешно!",
"Your data has been moved to the new location. Please restart the application to complete the process.": "Ваши данные были перемещены в новое расположение. Пожалуйста, перезапустите приложение, чтобы завершить процесс.",
"Migration failed": "Ошибка миграции",
"Important Notice": "Важное уведомление",
"This will move all your app data to the new location. Make sure the destination has enough free space.": "Это переместит все ваши данные приложения в новое расположение. Убедитесь, что в целевом месте достаточно свободного места.",
"Restart App": "Перезапустить приложение",
"Start Migration": "Начать миграцию",
"Advanced Settings": "Расширенные настройки",
"File count: {{size}}": "Количество файлов: {{size}}",
"Background Read Aloud": "Озвучивание в фоне",
"Ready to read aloud": "Готов к чтению вслух",
"Read Aloud": "Читать вслух",
"Screen Brightness": "Яркость экрана",
"Background Image": "Фоновое изображение",
"Import Image": "Импортировать изображение",
"Opacity": "Непрозрачность",
"Size": "Размер",
"Cover": "Обложка",
"Contain": "Содержать"
}
@@ -0,0 +1,610 @@
{
"Email address": "ඊමේල් ලිපිනය",
"Your Password": "ඔබේ මුරපදය",
"Your email address": "ඔබේ ඊමේල් ලිපිනය",
"Your password": "ඔබේ මුරපදය",
"Sign in": "ඇතුල් වන්න",
"Signing in...": "ඇතුල් වෙමින්...",
"Sign in with {{provider}}": "{{provider}} සමඟ ඇතුල් වන්න",
"Already have an account? Sign in": "දැනටමත් ගිණුමක් තිබේද? ඇතුල් වන්න",
"Create a Password": "මුරපදයක් සාදන්න",
"Sign up": "ලියාපදිංචි වන්න",
"Signing up...": "ලියාපදිංචි වෙමින්...",
"Don't have an account? Sign up": "ගිණුමක් නැද්ද? ලියාපදිංචි වන්න",
"Check your email for the confirmation link": "තහවුරු කිරීමේ සබැඳිය සඳහා ඔබේ ඊමේල් පරීක්ෂා කරන්න",
"Signing in ...": "ඇතුල් වෙමින්...",
"Send a magic link email": "මැජික් සබැඳි ඊමේල් යවන්න",
"Check your email for the magic link": "මැජික් සබැඳිය සඳහා ඔබේ ඊමේල් පරීක්ෂා කරන්න",
"Send reset password instructions": "මුරපදය නැවත සැකසීමේ උපදෙස් යවන්න",
"Sending reset instructions ...": "නැවත සැකසීමේ උපදෙස් යවමින්...",
"Forgot your password?": "මුරපදය අමතකද?",
"Check your email for the password reset link": "මුරපදය නැවත සැකසීමේ සබැඳිය සඳහා ඊමේල් පරීක්ෂා කරන්න",
"Phone number": "දුරකථන අංකය",
"Your phone number": "ඔබේ දුරකථන අංකය",
"Token": "ටෝකනය",
"Your OTP token": "ඔබේ OTP ටෝකනය",
"Verify token": "ටෝකනය තහවුරු කරන්න",
"Sign in with Google": "Google සමඟ ඇතුල් වන්න",
"Sign in with Apple": "Apple සමඟ ඇතුල් වන්න",
"Sign in with GitHub": "GitHub සමඟ ඇතුල් වන්න",
"New Password": "නව මුරපදය",
"Your new password": "ඔබේ නව මුරපදය",
"Update password": "මුරපදය යාවත්කාලීන කරන්න",
"Updating password ...": "මුරපදය යාවත්කාලීන කරමින්...",
"Your password has been updated": "ඔබේ මුරපදය යාවත්කාලීන කරන ලදී",
"Something went wrong. Don't worry, our team has been notified and we're working on a fix.": "යමක් වැරදුණි. කනගාටු නොවන්න, අපේ කණ්ඩායමට දැනුම් දී ඇති අතර අපි විසඳුමක් සඳහා කටයුතු කරමින් සිටිමු.",
"Error Details:": "දෝෂ විස්තර:",
"Try Again": "නැවත උත්සාහ කරන්න",
"Go Back": "ආපසු යන්න",
"Your Library": "ඔබේ පුස්තකාලය",
"Need help?": "උදව් අවශ්‍යද?",
"Contact Support": "සහාය සඳහා සම්බන්ධ වන්න",
"Open": "විවෘත කරන්න",
"Group": "කණ්ඩායම",
"Details": "විස්තර",
"Delete": "මකන්න",
"Cancel": "අවලංගු කරන්න",
"Confirm Deletion": "මකා දැමීම තහවුරු කරන්න",
"Are you sure to delete {{count}} selected book(s)?_one": "ඔබට විශ්වාසද තෝරාගත් පොත මකා දැමීමට?",
"Are you sure to delete {{count}} selected book(s)?_other": "ඔබට විශ්වාසද තෝරාගත් පොත් {{count}} මකා දැමීමට?",
"Deselect Book": "පොත අනිශ්චිත කරන්න",
"Select Book": "පොත තෝරන්න",
"Show Book Details": "පොතේ විස්තර පෙන්වන්න",
"Download Book": "පොත බාගන්න",
"Upload Book": "පොත උඩුගත කරන්න",
"Deselect Group": "කණ්ඩායම අනිශ්චිත කරන්න",
"Select Group": "කණ්ඩායම තෝරන්න",
"Untitled Group": "නම් නැති කණ්ඩායම",
"Group Books": "පොත් කණ්ඩායම් කරන්න",
"Remove From Group": "කණ්ඩායමෙන් ඉවත් කරන්න",
"Create New Group": "නව කණ්ඩායමක් සාදන්න",
"Save": "සුරකින්න",
"Confirm": "තහවුරු කරන්න",
"From Local File": "දේශීය ගොනුවෙන්",
"Search in {{count}} Book(s)..._one": "පොතක සොයන්න...",
"Search in {{count}} Book(s)..._other": "පොත් {{count}} කින් සොයන්න...",
"Search Books...": "පොත් සොයන්න...",
"Clear Search": "සෙවීම මකන්න",
"Import Books": "පොත් ආයාත කරන්න",
"Select Books": "පොත් තෝරන්න",
"Deselect": "අනිශ්චිත කරන්න",
"Select All": "සියල්ල තෝරන්න",
"Logged in as {{userDisplayName}}": "{{userDisplayName}} ලෙස පුරන්ගද්",
"Logged in": "පුරනගද්",
"Account": "ගිණුම",
"Sign In": "ඇතුල් වන්න",
"Auto Upload Books to Cloud": "ස්වයංක්‍රීයව cloud එකට පොත් උඩුගත කරන්න",
"Auto Import on File Open": "ගොනුව විවෘත කිරීමේදී ස්වයංක්‍රීයව ආයාත කරන්න",
"Open Last Book on Start": "ආරම්භයේදී අන්තිම පොත විවෘත කරන්න",
"Check Updates on Start": "ආරම්භයේදී යාවත්කාලීන පරීක්ෂා කරන්න",
"Open Book in New Window": "නව කවුළුවක පොත විවෘත කරන්න",
"Fullscreen": "සම්පූර්ණ තිරය",
"Always on Top": "සෑම විටම ඉහළින්",
"Always Show Status Bar": "සෑම විටම තත්ත්ව තීරුව පෙන්වන්න",
"Keep Screen Awake": "තිරය අවදි තබන්න",
"Reload Page": "පිටුව නැවත පූරණය කරන්න",
"Dark Mode": "අඳුරු ආකාරය",
"Light Mode": "ආලෝකමය ආකාරය",
"Auto Mode": "ස්වයංක්‍රීය ආකාරය",
"Upgrade to Readest Premium": "Readest Premium වෙත උසස් කරන්න",
"Download Readest": "Readest බාගන්න",
"About Readest": "Readest ගැන",
"Help improve Readest": "Readest වැඩිදියුණු කිරීමට උදව් කරන්න",
"Sharing anonymized statistics": "අනන්‍ය සංඛ්‍යාලේඛන බෙදාගැනීම",
"List": "ලැයිස්තුව",
"Grid": "ජාලකය",
"Crop": "කපන්න",
"Fit": "ගැලපෙන",
"Title": "නම",
"Author": "කතෘ",
"Format": "ආකෘතිය",
"Date Read": "කියැවූ දිනය",
"Date Added": "එක් කළ දිනය",
"Ascending": "ආරෝහණ",
"Descending": "අවරෝහණ",
"Book Covers": "පොත් ආවරණ",
"Sort by...": "අනුව සකස් කරන්න...",
"No supported files found. Supported formats: {{formats}}": "සහාය දක්වන ගොනු හමුනොවිණි. සහාය දක්වන ආකෘති: {{formats}}",
"No chapters detected.": "කොටස් හඳුනානොගැනිණි.",
"Failed to parse the EPUB file.": "EPUB ගොනුව විග්‍රහ කිරීමට අසමත්.",
"This book format is not supported.": "මෙම පොත ආකෘතියට සහාය නොදක්වයි.",
"Failed to import book(s): {{filenames}}": "පොත් ආයාත කිරීමට අසමත්: {{filenames}}",
"Book uploaded: {{title}}": "පොත උඩුගත විය: {{title}}",
"Insufficient storage quota": "ප්‍රමාණවත් නොවන ගබඩා ප්‍රමාණය",
"Failed to upload book: {{title}}": "පොත උඩුගත කිරීමට අසමත්: {{title}}",
"Book downloaded: {{title}}": "පොත බාගන්නා ලදී: {{title}}",
"Failed to download book: {{title}}": "පොත බාගැනීමට අසමත්: {{title}}",
"Book deleted: {{title}}": "පොත මකා දමන ලදී: {{title}}",
"Deleted cloud backup of the book: {{title}}": "පොතේ cloud backup මකා දමන ලදී: {{title}}",
"Deleted local copy of the book: {{title}}": "පොතේ දේශීය පිටපත මකා දමන ලදී: {{title}}",
"Failed to delete book: {{title}}": "පොත මකා දැමීමට අසමත්: {{title}}",
"Failed to delete cloud backup of the book: {{title}}": "පොතේ cloud backup මකා දැමීමට අසමත්: {{title}}",
"Failed to delete local copy of the book: {{title}}": "පොතේ දේශීය පිටපත මකා දැමීමට අසමත්: {{title}}",
"Welcome to your library. You can import your books here and read them anytime.": "ඔබේ පුස්තකාලයට සාදරයෙන් පිළිගනිමු. ඔබට මෙහි ඔබේ පොත් ආයාත කර ඕනෑම වේලාවක කියවිය හැක.",
"Copied to notebook": "සටහන් පොතට පිටපත් කරන ලදී",
"No annotations to export": "නිර්යාත කිරීමට සටහන් නැත",
"Exported from Readest": "Readest වෙතින් නිර්යාත කරන ලදී",
"Highlights & Annotations": "ඉස්මතු කිරීම් සහ සටහන්",
"Untitled": "නම් නැති",
"Note": "සටහන",
"Copied to clipboard": "clipboard එකට පිටපත් කරන ලදී",
"Copy": "පිටපත් කරන්න",
"Delete Highlight": "ඉස්මතු කිරීම මකන්න",
"Highlight": "ඉස්මතු කරන්න",
"Annotate": "සටහන් තබන්න",
"Search": "සොයන්න",
"Dictionary": "ශබ්දකෝෂය",
"Wikipedia": "විකිපීඩියා",
"Translate": "පරිවර්තනය කරන්න",
"Speak": "කථා කරන්න",
"Login Required": "පිවිසීම අවශ්‍ය",
"Quota Exceeded": "ප්‍රමාණය ඉක්මවන ලදී",
"Unable to fetch the translation. Please log in first and try again.": "පරිවර්තනය ලබා ගැනීමට නොහැකි. කරුණාකර පළමුව ඇතුල් වී නැවත උත්සාහ කරන්න.",
"Unable to fetch the translation. Try again later.": "පරිවර්තනය ලබා ගැනීමට නොහැකි. පසුව නැවත උත්සාහ කරන්න.",
"Original Text": "මුල් පෙළ",
"Auto Detect": "ස්වයංක්‍රීයව අනාවරණය",
"(detected)": "(අනාවරණය විය)",
"Translated Text": "පරිවර්තනය කළ පෙළ",
"System Language": "පද්ධති භාෂාව",
"Loading...": "පූරණය වෙමින්...",
"No translation available.": "පරිවර්තනය ලබා ගත නොහැක.",
"Translated by {{provider}}.": "{{provider}} විසින් පරිවර්තනය කරන ලදී.",
"Bookmark": "පොත් සලකුණ",
"Next Section": "ඊළඟ කොටස",
"Previous Section": "පෙර කොටස",
"Next Page": "ඊළඟ පිටුව",
"Previous Page": "පෙර පිටුව",
"Go Forward": "ඉදිරියට යන්න",
"Small": "කුඩා",
"Large": "විශාල",
"Sync Conflict": "සමමුහුර්ත ගැටුම",
"Sync reading progress from \"{{deviceName}}\"?": "\"{{deviceName}}\" වෙතින් කියවීමේ ප්‍රගතිය සමමුහුර්ත කරන්නද?",
"another device": "වෙනත් උපකරණයක්",
"Local Progress": "දේශීය ප්‍රගතිය",
"Remote Progress": "දුරස්ථ ප්‍රගතිය",
"Failed to connect": "සම්බන්ධ වීමට අසමත්",
"Disconnected": "විසන්ධි වුණි",
"KOReader Sync Settings": "KOReader සමමුහුර්ත සැකසුම්",
"Sync as {{userDisplayName}}": "{{userDisplayName}} ලෙස සමමුහුර්ත කරන්න",
"Sync Server Connected": "සමමුහුර්ත සේවාදායකය සම්බන්ධ විය",
"Sync Strategy": "සමමුහුර්ත උපාය",
"Ask on conflict": "ගැටුමේදී විමසන්න",
"Always use latest": "සෑම විටම නවතම භාවිතා කරන්න",
"Send changes only": "වෙනස්කම් පමණක් යවන්න",
"Receive changes only": "වෙනස්කම් පමණක් ලබන්න",
"Checksum Method": "පරීක්ෂණ ක්‍රමය",
"File Content (recommended)": "ගොනු අන්තර්ගතය (නිර්දේශිත)",
"File Name": "ගොනුවේ නම",
"Device Name": "උපකරණයේ නම",
"Connect to your KOReader Sync server.": "ඔබේ KOReader සමමුහුර්ත සේවාදායකයට සම්බන්ධ වන්න.",
"Server URL": "සේවාදායක URL",
"Username": "පරිශීලක නම",
"Your Username": "ඔබේ පරිශීලක නම",
"Password": "මුරපදය",
"Connect": "සම්බන්ධ කරන්න",
"Notebook": "සටහන් පොත",
"No notes match your search": "ඔබේ සෙවීමට ගැලපෙන සටහන් නැත",
"Excerpts": "උදාහරණ",
"Notes": "සටහන්",
"Add your notes here...": "මෙහි ඔබේ සටහන් එක් කරන්න...",
"Search notes and excerpts...": "සටහන් සහ උදාහරණ සොයන්න...",
"{{time}} min left in chapter": "පරිච්ඡේදයේ මිනිත්තු {{time}} ක් ඉතිරි",
"{{count}} pages left in chapter_one": "පරිච්ඡේදයේ පිටුව 1 ක් ඉතිරි",
"{{count}} pages left in chapter_other": "පරිච්ඡේදයේ පිටු {{count}} ක් ඉතිරි",
"Theme Mode": "තේමා ආකාරය",
"Invert Image In Dark Mode": "අඳුරු ආකාරයේදී රූපය පරිවර්තනය කරන්න",
"Override Book Color": "පොතේ වර්ණය අභිබවන්න",
"Theme Color": "තේමා වර්ණය",
"Custom": "අභිරුචි",
"Code Highlighting": "කේත ඉස්මතු කිරීම",
"Enable Highlighting": "ඉස්මතු කිරීම සක්‍රීය කරන්න",
"Code Language": "කේත භාෂාව",
"Auto": "ස්වයංක්‍රීය",
"Scroll": "අනුචලනය",
"Scrolled Mode": "අනුචලන ආකාරය",
"Continuous Scroll": "අඛණ්ඩ අනුචලනය",
"Overlap Pixels": "අතිච්ඡාදන පික්සල්",
"Click": "ක්ලික්",
"Clicks for Page Flip": "පිටු පෙරැළීම සඳහා ක්ලික්",
"Swap Clicks Area": "ක්ලික් ප්‍රදේශය මාරු කරන්න",
"Disable Double Click": "ද්විත්ව ක්ලික් අබල කරන්න",
"Volume Keys for Page Flip": "පිටු පෙරැළීම සඳහා ශබ්ද යතුර",
"Animation": "සජීවිකරණය",
"Paging Animation": "පිටු සජීවිකරණය",
"Security": "ආරක්ෂාව",
"Allow JavaScript": "JavaScript ට ඉඩ දෙන්න",
"Enable only if you trust the file.": "ගොනුව විශ්වාසදායක නම් පමණක් සක්‍රීය කරන්න.",
"Font": "අකුරු වර්ගය",
"Custom Fonts": "අභිරුචි අකුරු",
"Cancel Delete": "මකා දැමීම අවලංගු කරන්න",
"Delete Font": "අකුරු මකන්න",
"Import Font": "අකුරු ආයාත කරන්න",
"Tips": "ඉඟි",
"Supported font formats: .ttf, .otf, .woff, .woff2": "සහාය දක්වන අකුරු ආකෘති: .ttf, .otf, .woff, .woff2",
"Custom fonts can be selected from the Font Face menu": "Font Face මෙනුවෙන් අභිරුචි අකුරු තෝරා ගත හැක",
"Global Settings": "ගෝලීය සැකසුම්",
"Apply to All Books": "සියලු පොත් වලට අනුගත කරන්න",
"Apply to This Book": "මෙම පොතට අනුගත කරන්න",
"Reset Settings": "සැකසුම් නැවත සකස් කරන්න",
"Manage Custom Fonts": "අභිරුචි අකුරු කළමනාකරණය කරන්න",
"System Fonts": "පද්ධති අකුරු",
"Serif Font": "Serif අකුරු",
"Sans-Serif Font": "Sans-Serif අකුරු",
"Override Book Font": "පොතේ අකුරු අභිබවන්න",
"Font Size": "අකුරු ප්‍රමාණය",
"Default Font Size": "සාමාන්‍ය අකුරු ප්‍රමාණය",
"Minimum Font Size": "අවම අකුරු ප්‍රමාණය",
"Font Weight": "අකුරු බර",
"Font Family": "අකුරු පවුල",
"Default Font": "සාමාන්‍ය අකුරු",
"CJK Font": "CJK අකුරු",
"Font Face": "අකුරු මුහුණ",
"Monospace Font": "Monospace අකුරු",
"Language": "භාෂාව",
"Interface Language": "අතුරුමුහුණතේ භාෂාව",
"Translation": "පරිවර්තනය",
"Enable Translation": "පරිවර්තනය සක්‍රීය කරන්න",
"Show Source Text": "මූලාශ්‍ර පෙළ පෙන්වන්න",
"Translation Service": "පරිවර්තන සේවාව",
"Translate To": "වෙත පරිවර්තනය කරන්න",
"Override Book Layout": "පොතේ පිරිසැලසුම අභිබවන්න",
"Writing Mode": "ලේඛන ආකාරය",
"Default": "සාමාන්‍ය",
"Horizontal Direction": "තිරස් දිශාව",
"Vertical Direction": "සිරස් දිශාව",
"RTL Direction": "RTL දිශාව",
"Border Frame": "මායිම් රාමුව",
"Double Border": "ද්විත්ව මායිම",
"Border Color": "මායිම් වර්ණය",
"Paragraph": "ඡේදය",
"Paragraph Margin": "ඡේද මායිම",
"Line Spacing": "පේළි අන්තරය",
"Word Spacing": "වචන අන්තරය",
"Letter Spacing": "අකුරු අන්තරය",
"Text Indent": "පෙළ අභ්‍යන්තරය",
"Full Justification": "සම්පූර්ණ සාධාරණීකරණය",
"Hyphenation": "යොමු කිරීම",
"Page": "පිටුව",
"Top Margin (px)": "ඉහළ මායිම (px)",
"Bottom Margin (px)": "පහළ මායිම (px)",
"Left Margin (px)": "වම් මායිම (px)",
"Right Margin (px)": "දකුණු මායිම (px)",
"Column Gap (%)": "තීරු පරතරය (%)",
"Maximum Number of Columns": "අවරෝධ තීරු ගණන",
"Maximum Column Height": "අවරෝධ තීරු උස",
"Maximum Column Width": "අවරෝධ තීරු පළල",
"Header & Footer": "ශිර්ෂය සහ පාදය",
"Show Header": "ශිර්ෂය පෙන්වන්න",
"Show Footer": "පාදය පෙන්වන්න",
"Show Remaining Time": "ඉතිරි වේලාව පෙන්වන්න",
"Show Remaining Pages": "ඉතිරි පිටු පෙන්වන්න",
"Show Reading Progress": "කියවීමේ ප්‍රගතිය පෙන්වන්න",
"Reading Progress Style": "කියවීමේ ප්‍රගති ශෛලිය",
"Page Number": "පිටු අංකය",
"Percentage": "ප්‍රතිශතය",
"Apply also in Scrolled Mode": "අනුචලන ආකාරයේදීද අනුගත කරන්න",
"Screen": "තිරය",
"Orientation": "දිශානතිය",
"Portrait": "සිරස්",
"Landscape": "තිරස්",
"Apply": "අනුගත කරන්න",
"Custom Content CSS": "අභිරුචි අන්තර්ගත CSS",
"Enter CSS for book content styling...": "පොතේ අන්තර්ගත ශෛලිකරණය සඳහා CSS ඇතුල් කරන්න...",
"Custom Reader UI CSS": "අභිරුචි කියවන්නා UI CSS",
"Enter CSS for reader interface styling...": "කියවන්නා අතුරුමුහුණත ශෛලිකරණය සඳහා CSS ඇතුල් කරන්න...",
"Layout": "පිරිසැලසුම",
"Color": "වර්ණය",
"Behavior": "හැසිරීම",
"Reset {{settings}}": "{{settings}} නැවත සකස් කරන්න",
"All the world's a stage,\nAnd all the men and women merely players;\nThey have their exits and their entrances,\nAnd one man in his time plays many parts,\nHis acts being seven ages.\n\n— William Shakespeare": "සියලු ලෝකය වේදිකාවක්,\nසහ සියලු පුරුෂයන් සහ ගැහැණියන් හුදු රංගන ශිල්පීන්;\nඔවුන්ට පිටවීම් සහ ඇතුල්වීම් ඇත,\nසහ එක් මනුෂ්‍යයෙක් ඔහුගේ කාලයේ බොහෝ භාගයන් ඉටු කරයි,\nඔහුගේ ක්‍රියා වයස් හතකි.\n\n— විලියම් ශේක්ස්පියර්",
"(from 'As You Like It', Act II)": "('ඔබට අවශ්‍ය ලෙස', දෙවන අංකයෙන්)",
"Custom Theme": "අභිරුචි තේමාව",
"Theme Name": "තේමා නාමය",
"Text Color": "පෙළ වර්ණය",
"Background Color": "පසුබිම් වර්ණය",
"Link Color": "සබැඳි වර්ණය",
"Preview": "පෙර දසුන",
"Font & Layout": "අකුරු සහ පිරිසැලසුම",
"Book Cover": "පොත් ආවරණය",
"More Info": "තවත් තොරතුරු",
"Parallel Read": "සමාන්තර කියවීම",
"Disable": "අබල කරන්න",
"Enable": "සක්‍රීය කරන්න",
"KOReader Sync": "KOReader සමමුහුර්තය",
"Push Progress": "ප්‍රගතිය ඉදිරියට",
"Pull Progress": "ප්‍රගතිය අදින්න",
"Export Annotations": "සටහන් නිර්යාත කරන්න",
"Sort TOC by Page": "පිටුව අනුව TOC සකස් කරන්න",
"Edit": "සංස්කරණය",
"Search...": "සොයන්න...",
"Book": "පොත",
"Chapter": "පරිච්ඡේදය",
"Match Case": "අකුරු ගැළපීම",
"Match Whole Words": "සම්පූර්ණ වචන ගැළපීම",
"Match Diacritics": "ධ්වනි ලකුණු ගැළපීම",
"TOC": "සූචිය",
"Table of Contents": "සූචිය",
"Sidebar": "පැති තීරුව",
"Disable Translation": "පරිවර්තනය අබල කරන්න",
"TTS not supported for PDF": "PDF සඳහා TTS සහාය නොදක්වයි",
"TTS not supported for this document": "මෙම ලේඛනය සඳහා TTS සහාය නොදක්වයි",
"No Timeout": "කාල සීමාවක් නැත",
"{{value}} minute": "මිනිත්තු {{value}}",
"{{value}} minutes": "මිනිත්තු {{value}}",
"{{value}} hour": "පැය {{value}}",
"{{value}} hours": "පැය {{value}}",
"Voices for {{lang}}": "{{lang}} සඳහා හඬ",
"Slow": "මන්දගාමී",
"Fast": "වේගවත්",
"{{engine}}: {{count}} voices_one": "{{engine}}: හඬ 1",
"{{engine}}: {{count}} voices_other": "{{engine}}: හඬ {{count}}",
"Sign in to Sync": "සමමුහුර්ත කිරීම සඳහා ඇතුල් වන්න",
"Synced at {{time}}": "{{time}} වේලාවේ සමමුහුර්ත විය",
"Never synced": "කිසි විටෙක සමමුහුර්ත නොවිණි",
"Reading Progress Synced": "කියවීමේ ප්‍රගතිය සමමුහුර්ත විය",
"Page {{page}} of {{total}} ({{percentage}}%)": "{{total}} න් {{page}} පිටුව ({{percentage}}%)",
"Current position": "වර්තමාන ස්ථානය",
"Approximately page {{page}} of {{total}} ({{percentage}}%)": "දළ වශයෙන් {{total}} න් {{page}} පිටුව ({{percentage}}%)",
"Approximately {{percentage}}%": "දළ වශයෙන් {{percentage}}%",
"Delete Your Account?": "ඔබේ ගිණුම මකන්නද?",
"This action cannot be undone. All your data in the cloud will be permanently deleted.": "මෙම ක්‍රියාව අවලංගු කළ නොහැක. cloud හි ඔබේ සියලු දත්ත ස්ථිරවම මකා දැමෙනු ඇත.",
"Delete Permanently": "ස්ථිරවම මකන්න",
"Restore Purchase": "මිලදී ගැනීම ප්‍රතිෂ්ඨාපනය කරන්න",
"Manage Subscription": "දායකත්වය කළමනාකරණය කරන්න",
"Reset Password": "මුරපදය නැවත සකස් කරන්න",
"Sign Out": "ඉවත් වන්න",
"Delete Account": "ගිණුම මකන්න",
"Upgrade to {{plan}}": "{{plan}} වෙත උසස් කරන්න",
"Complete Your Subscription": "ඔබේ දායකත්වය සම්පූර්ණ කරන්න",
"Coming Soon": "ඉක්මනින් පැමිණේ",
"Upgrade to Plus or Pro": "Plus හෝ Pro වෙත උසස් කරන්න",
"Current Plan": "වර්තමාන සැලැස්ම",
"Plan Limits": "සැලැස්මේ සීමා",
"Failed to delete user. Please try again later.": "පරිශීලකයා මකා දැමීමට අසමත්. කරුණාකර පසුව නැවත උත්සාහ කරන්න.",
"Failed to create checkout session": "checkout session නිර්මාණය කිරීමට අසමත්",
"No purchases found to restore.": "ප්‍රතිෂ්ඨාපනය කිරීමට මිලදී ගැනීම් නොමැත.",
"Failed to restore purchases.": "මිලදී ගැනීම් ප්‍රතිෂ්ඨාපනය කිරීමට අසමත්.",
"Failed to manage subscription.": "දායකත්වය කළමනාකරණය කිරීමට අසමත්.",
"Failed to load subscription plans.": "දායකත්ව සැලැස්ම් පූරණය කිරීමට අසමත්.",
"Loading profile...": "පැතිකඩ පූරණය වෙමින්...",
"Processing your payment...": "ඔබේ ගෙවීම සැකසෙමින්...",
"Please wait while we confirm your subscription.": "අපි ඔබේ දායකත්වය තහවුරු කරන අතරතුර කරුණාකර රැඳී සිටින්න.",
"Payment Processing": "ගෙවීම් සැකසීම",
"Your payment is being processed. This usually takes a few moments.": "ඔබේ ගෙවීම සැකසෙමින් පවතී. මෙය සාමාන්‍යයෙන් මොහොතකින් සිදු වේ.",
"Payment Failed": "ගෙවීම අසමත්",
"We couldn't process your subscription. Please try again or contact support if the issue persists.": "අපට ඔබේ දායකත්වය සැකසීමට නොහැකි විය. කරුණාකර නැවත උත්සාහ කරන්න හෝ ගැටලුව දිගටම පවතින්නේ නම් සහාය සඳහා සම්බන්ධ වන්න.",
"Back to Profile": "පැතිකඩට ආපසු",
"Subscription Successful!": "දායකත්වය සාර්ථක!",
"Thank you for your subscription! Your payment has been processed successfully.": "ඔබේ දායකත්වයට ස්තූතිය! ඔබේ ගෙවීම සාර්ථකව සැකසිණි.",
"Email:": "ඊමේල්:",
"Plan:": "සැලැස්ම:",
"Amount:": "මුදල:",
"Subscription ID:": "දායකත්ව ID:",
"Go to Library": "පුස්තකාලයට යන්න",
"Need help? Contact our support team at support@readest.com": "උදව් අවශ්‍යද? support@readest.com හි අපගේ සහාය කණ්ඩායමට සම්බන්ධ වන්න",
"Free Plan": "නොමිලේ සැලැස්ම",
"month": "මාසය",
"year": "වර්ෂය",
"Cross-Platform Sync": "හරස් වේදිකා සමමුහුර්තය",
"Seamlessly sync your library, progress, highlights, and notes across all your devices—never lose your place again.": "ඔබේ සියලු උපකරණ හරහා ඔබේ පුස්තකාලය, ප්‍රගතිය, ඉස්මතු කිරීම් සහ සටහන් බාධාවකින් තොරව සමමුහුර්ත කරන්න - ඔබේ ස්ථානය නැවත කිසි දිනෙක නැති නොකරන්න.",
"Customizable Reading": "අභිරුචිකරණය කළ හැකි කියවීම",
"Personalize every detail with adjustable fonts, layouts, themes, and advanced display settings for the perfect reading experience.": "පරිපූර්ණ කියවීමේ අත්දැකීම සඳහා සකස් කළ හැකි අකුරු, පිරිසැලසුම්, තේමා සහ උසස් ප්‍රදර්ශන සැකසුම් සමඟ සෑම විස්තරයක්ම පුද්ගලීකරණය කරන්න.",
"AI Read Aloud": "AI පවසා කියවීම",
"Enjoy hands-free reading with natural-sounding AI voices that bring your books to life.": "ඔබේ පොත් ජීවයට ගෙන එන ස්වභාවික ශබ්ද සහිත AI හඬ සමඟ අත් නිදහස් කියවීම රස විඳින්න.",
"AI Translations": "AI පරිවර්තන",
"Translate any text instantly with the power of Google, Azure, or DeepL—understand content in any language.": "Google, Azure, හෝ DeepL හි බලය සමඟ ඕනෑම පෙළක් ක්ෂණිකව පරිවර්තනය කරන්න - ඕනෑම භාෂාවකින් අන්තර්ගතය තේරුම් ගන්න.",
"Community Support": "ප්‍රජා සහාය",
"Connect with fellow readers and get help fast in our friendly community channels.": "සහෘදී පාඨකයන් සමඟ සම්බන්ධ වන්න සහ අපගේ මිත්‍රශීලී ප්‍රජා නාලිකා වල ඉක්මනින් උදව් ලබා ගන්න.",
"Cloud Sync Storage": "Cloud සමමුහුර්ත ගබඩාව",
"AI Translations (per day)": "AI පරිවර්තන (දිනකට)",
"Plus Plan": "Plus සැලැස්ම",
"Includes All Free Plan Benefits": "සියලු නොමිලේ සැලැස්මේ ප්‍රතිලාභ ඇතුළත්",
"Unlimited AI Read Aloud Hours": "අසීමිත AI පවසා කියවීමේ පැය",
"Listen without limits—convert as much text as you like into immersive audio.": "සීමාවකින් තොරව සවන් දෙන්න - ඔබට අවශ්‍ය තරම් පෙළ ගිලී යන ශ්‍රව්‍ය බවට පරිවර්තනය කරන්න.",
"More AI Translations": "තවත් AI පරිවර්තන",
"Unlock enhanced translation capabilities with more daily usage and advanced options.": "වැඩි දෛනික භාවිතය සහ උසස් විකල්ප සමඟ වැඩිදියුණු කළ පරිවර්තන හැකියාවන් අනවරණය කරන්න.",
"DeepL Pro Access": "DeepL Pro ප්‍රවේශය",
"Translate up to 100,000 characters daily with the most accurate translation engine available.": "ලබා ගත හැකි වඩාත් නිරවද්‍ය පරිවර්තන එන්ජිම සමඟ දිනකට අක්ෂර 100,000 ක් දක්වා පරිවර්තනය කරන්න.",
"Securely store and access your entire reading collection with up to 5 GB of cloud storage.": "GB 5 ක් දක්වා cloud ගබඩාව සමඟ ඔබේ සම්පූර්ණ කියවීමේ එකතුව ආරක්ෂිතව ගබඩා කරන්න සහ ප්‍රවේශ වන්න.",
"Priority Support": "ප්‍රමුඛතා සහාය",
"Enjoy faster responses and dedicated assistance whenever you need help.": "ඔබට උදව් අවශ්‍ය වන විට ඉක්මන් ප්‍රතිචාර සහ කැප වූ සහාය රස විඳින්න.",
"Pro Plan": "Pro සැලැස්ම",
"Includes All Plus Plan Benefits": "සියලු Plus සැලැස්මේ ප්‍රතිලාභ ඇතුළත්",
"Early Feature Access": "පූර්ව විශේෂාංග ප්‍රවේශය",
"Be the first to explore new features, updates, and innovations before anyone else.": "අන් කවුරුන්ටත් වඩා පළමුව නව විශේෂාංග, යාවත්කාලීන සහ නවෝත්පාදන ගවේෂණය කරන්න.",
"Advanced AI Tools": "උසස් AI මෙවලම්",
"Harness powerful AI tools for smarter reading, translation, and content discovery.": "දක්ෂ කියවීම, පරිවර්තනය සහ අන්තර්ගත සොයාගැනීම සඳහා ප්‍රබල AI මෙවලම් භාවිතා කරන්න.",
"Translate up to 500,000 characters daily with the most accurate translation engine available.": "ලබා ගත හැකි වඩාත් නිරවද්‍ය පරිවර්තන එන්ජිම සමඟ දිනකට අක්ෂර 500,000 ක් දක්වා පරිවර්තනය කරන්න.",
"Securely store and access your entire reading collection with up to 20 GB of cloud storage.": "GB 20 ක් දක්වා cloud ගබඩාව සමඟ ඔබේ සම්පූර්ණ කියවීමේ එකතුව ආරක්ෂිතව ගබඩා කරන්න සහ ප්‍රවේශ වන්න.",
"Version {{version}}": "සංස්කරණය {{version}}",
"Check Update": "යාවත්කාලීන පරීක්ෂා කරන්න",
"Already the latest version": "දැනටමත් නවතම සංස්කරණය",
"Checking for updates...": "යාවත්කාලීන සඳහා පරීක්ෂා කරමින්...",
"Error checking for updates": "යාවත්කාලීන පරීක්ෂා කිරීමේ දෝෂය",
"Drop to Import Books": "පොත් ආයාත කිරීමට අතහරින්න",
"Terms of Service": "සේවා නියමයන්",
"Privacy Policy": "පෞද්ගලිකත්ව ප්‍රතිපත්තිය",
"Enter book title": "පොතේ නම ඇතුල් කරන්න",
"Subtitle": "උප නාමය",
"Enter book subtitle": "පොතේ උප නාමය ඇතුල් කරන්න",
"Enter author name": "කතුවරයාගේ නම ඇතුල් කරන්න",
"Series": "කතා මාලාව",
"Enter series name": "කතා මාලාවේ නම ඇතුල් කරන්න",
"Series Index": "කතා මාලා සූචිය",
"Enter series index": "කතා මාලා සූචිය ඇතුල් කරන්න",
"Total in Series": "කතා මාලාවේ මුළු ගණන",
"Enter total books in series": "කතා මාලාවේ මුළු පොත් ගණන ඇතුල් කරන්න",
"Publisher": "ප්‍රකාශක",
"Enter publisher": "ප්‍රකාශක ඇතුල් කරන්න",
"Publication Date": "ප්‍රකාශන දිනය",
"YYYY or YYYY-MM-DD": "YYYY හෝ YYYY-MM-DD",
"Identifier": "හඳුනාගැනීම",
"Subjects": "විෂයන්",
"Fiction, Science, History": "ප්‍රබන්ධ, විද්‍යාව, ඉතිහාසය",
"Description": "විස්තරය",
"Enter book description": "පොතේ විස්තරය ඇතුල් කරන්න",
"Change cover image": "ආවරණ රූපය වෙනස් කරන්න",
"Replace": "ආදේශ කරන්න",
"Unlock cover": "ආවරණය අගුළු ඇරින්න",
"Lock cover": "ආවරණය අගුළු දමන්න",
"Auto-Retrieve Metadata": "Metadata ස්වයංක්‍රීයව ලබා ගන්න",
"Auto-Retrieve": "ස්වයංක්‍රීයව ලබා ගන්න",
"Unlock all fields": "සියලු ක්ෂේත්‍ර අගුළු ඇරින්න",
"Unlock All": "සියල්ල අගුළු ඇරින්න",
"Lock all fields": "සියලු ක්ෂේත්‍ර අගුළු දමන්න",
"Lock All": "සියල්ල අගුළු දමන්න",
"Reset": "නැවත සකස් කරන්න",
"Are you sure to delete the selected book?": "ඔබට විශ්වාසද තෝරාගත් පොත මකා දැමීමට?",
"Are you sure to delete the cloud backup of the selected book?": "ඔබට විශ්වාසද තෝරාගත් පොතේ cloud backup මකා දැමීමට?",
"Are you sure to delete the local copy of the selected book?": "ඔබට විශ්වාසද තෝරාගත් පොතේ දේශීය පිටපත මකා දැමීමට?",
"Edit Metadata": "Metadata සංස්කරණය කරන්න",
"Book Details": "පොතේ විස්තර",
"Unknown": "නොදන්නා",
"Remove from Cloud & Device": "Cloud සහ උපකරණයෙන් ඉවත් කරන්න",
"Remove from Cloud Only": "Cloud එකෙන් පමණක් ඉවත් කරන්න",
"Remove from Device Only": "උපකරණයෙන් පමණක් ඉවත් කරන්න",
"Published": "ප්‍රකාශිතය",
"Updated": "යාවත්කාලීන කරන ලදී",
"Added": "එක් කරන ලදී",
"File Size": "ගොනු ප්‍රමාණය",
"No description available": "විස්තරයක් ලබා ගත නොහැක",
"Locked": "අගුළු දමන ලදී",
"Select Metadata Source": "Metadata මූලාශ්‍රය තෝරන්න",
"Keep manual input": "අතින් ඇතුල් කළ දේ තබාගන්න",
"A new version of Readest is available!": "Readest හි නව සංස්කරණයක් ලබා ගත හැක!",
"Readest {{newVersion}} is available (installed version {{currentVersion}}).": "Readest {{newVersion}} ලබා ගත හැක (ස්ථාපිත සංස්කරණය {{currentVersion}}).",
"Download and install now?": "දැන් බාගන්න සහ ස්ථාපනය කරන්නද?",
"Downloading {{downloaded}} of {{contentLength}}": "{{contentLength}} න් {{downloaded}} බාගනිමින්",
"Download finished": "බාගැනීම සම්පූර්ණයි",
"DOWNLOAD & INSTALL": "බාගන්න සහ ස්ථාපනය කරන්න",
"Changelog": "වෙනස්කම් ලිපිය",
"Software Update": "මෘදුකාංග යාවත්කාලීන",
"What's New in Readest": "Readest හි නවතම දේ",
"Select Files": "ගොනු තෝරන්න",
"Select Image": "රූපය තෝරන්න",
"Select Video": "වීඩියෝව තෝරන්න",
"Select Audio": "ශ්‍රව්‍ය තෝරන්න",
"Select Fonts": "අකුරු තෝරන්න",
"Storage": "ගබඩාව",
"{{percentage}}% of Cloud Sync Space Used.": "Cloud සමමුහුර්ත ඉඩෙන් {{percentage}}% භාවිතා කර ඇත.",
"Translation Characters": "පරිවර්තන අක්ෂර",
"{{percentage}}% of Daily Translation Characters Used.": "දෛනික පරිවර්තන අක්ෂර වලින් {{percentage}}% භාවිතා කර ඇත.",
"Daily translation quota reached. Upgrade your plan to continue using AI translations.": "දෛනික පරිවර්තන කෝටාව ළඟා විය. AI පරිවර්තන භාවිතා කරමින් සිටීමට ඔබේ සැලැස්ම උසස් කරන්න.",
"LXGW WenKai GB Screen": "LXGW WenKai GB Screen",
"LXGW WenKai TC": "LXGW WenKai TC",
"GuanKiapTsingKhai-T": "GuanKiapTsingKhai-T",
"Source Han Serif CN VF": "Source Han Serif CN VF",
"Huiwen-mincho": "Huiwen-mincho",
"KingHwa_OldSong": "KingHwa_OldSong",
"Google Books": "Google Books",
"Open Library": "Open Library",
"Azure Translator": "Azure Translator",
"DeepL": "DeepL",
"Google Translate": "Google Translate",
"Yandex Translate": "Yandex Translate",
"Gray": "අළු",
"Sepia": "සීපියා",
"Grass": "තණකොළ",
"Cherry": "චෙරි",
"Sky": "අහස",
"Solarized": "සූර්යකිරණ",
"Gruvbox": "Gruvbox",
"Nord": "Nord",
"Contrast": "පරස්පර",
"Sunset": "හිරු බැස්ම",
"Reveal in Finder": "Finder හි පෙන්වන්න",
"Reveal in File Explorer": "File Explorer හි පෙන්වන්න",
"Reveal in Folder": "ෆෝල්ඩරයේ පෙන්වන්න",
"Previous Paragraph": "කලින් ඡේදය",
"Previous Sentence": "කලින් වාක්‍යය",
"Pause": "විරාමය",
"Play": "වාදනය කරන්න",
"Next Sentence": "මීළඟ වාක්‍යය",
"Next Paragraph": "මීළඟ ඡේදය",
"Separate Cover Page": "වෙන් වූ ආවරණ පිටුව",
"Resize Notebook": "සටහන් පොතේ ප්‍රමාණය වෙනස් කරන්න",
"Resize Sidebar": "පැති තීරුවේ ප්‍රමාණය වෙනස් කරන්න",
"Get Help from the Readest Community": "Readest ප්‍රජාවෙන් උදව් ලබා ගන්න",
"Remove cover image": "ආවරණ රූපය ඉවත් කරන්න",
"Bookshelf": "පොත් රාක්කය",
"View Menu": "මෙනුව බලන්න",
"Settings Menu": "සැකසුම් මෙනුව",
"View account details and quota": "ගිණුම් විස්තර සහ කොටස බලන්න",
"Library Header": "පුස්තකාල ශීර්ෂය",
"Book Content": "පොතේ අන්තර්ගතය",
"Footer Bar": "පාදක තීරුව",
"Header Bar": "ශීර්ෂ තීරුව",
"View Options": "දැක්ම විකල්ප",
"Book Menu": "පොත් මෙනුව",
"Search Options": "සෙවුම් විකල්ප",
"Close": "වසන්න",
"Delete Book Options": "පොත මකන විකල්ප",
"ON": "ඇක්ටිව්",
"OFF": "ඩිසැක්ටිව්",
"Reading Progress": "කියවීමේ ප්‍රගතිය",
"Page Margin": "පිටු මාර්ජින්",
"Remove Bookmark": "සටහන් ඉවත් කරන්න",
"Add Bookmark": "සටහන් එකතු කරන්න",
"Books Content": "පොත් අන්තර්ගතය",
"Jump to Location": "ස්ථානයට යන්න",
"Unpin Notebook": "බ්ලොක්නොට් අකුරු කරන්න",
"Pin Notebook": "බ්ලොක්නොට් අකුරු කරන්න",
"Hide Search Bar": "සෙවුම් තීරුව සඟවා ඇත",
"Show Search Bar": "සෙවුම් තීරුව පෙන්වන්න",
"On {{current}} of {{total}} page": "පිටුව {{current}}/{{total}}",
"Section Title": "අංශය ශීර්ෂය",
"Decrease": "අඩු කරන්න",
"Increase": "ඉහළ නැංවීම",
"Settings Panels": "සැකසුම් පැනල්",
"Settings": "සැකසුම්",
"Unpin Sidebar": "බොක්කේ අකුරු කරන්න",
"Pin Sidebar": "බොක්කේ අකුරු කරන්න",
"Toggle Sidebar": "බොක්කේ ස්ථානය වෙනස් කරන්න",
"Toggle Translation": "පරිවර්තනය ස්ථානය වෙනස් කරන්න",
"Translation Disabled": "පරිවර්තනය අක්‍රීය කර ඇත",
"Minimize": "අඩු කරන්න",
"Maximize or Restore": "ඉහළ නැංවීම හෝ ප්‍රතිසංස්කරණය",
"Exit Parallel Read": "සමාන්තර කියවීමෙන් පිටවන්න",
"Enter Parallel Read": "සමාන්තර කියවීමේදී පිවිසෙන්න",
"Zoom Level": "සංයුතිය මට්ටම",
"Zoom Out": "සංයුතිය අඩු කරන්න",
"Reset Zoom": "සංයුතිය නැවත සකසන්න",
"Zoom In": "සංයුතිය වැඩි කරන්න",
"Zoom Mode": "සංයුතිය ආකාරය",
"Single Page": "එක් පිටුව",
"Auto Spread": "ස්වයංක්‍රීය ව්‍යාප්තිය",
"Fit Page": "පිටුවට ගැලපෙන ලෙස",
"Fit Width": "පැතිකඩට ගැලපෙන ලෙස",
"Failed to select directory": "ෆෝල්ඩරය තෝරා ගැනීමට අසමත්",
"The new data directory must be different from the current one.": "නව දත්ත ෆෝල්ඩරය වර්තමාන ෆෝල්ඩරයෙන් වෙනස් විය යුතුය.",
"Migration failed: {{error}}": "මැතිවරණය අසමත් විය: {{error}}",
"Change Data Location": "දත්ත ස්ථානය වෙනස් කරන්න",
"Current Data Location": "වර්තමාන දත්ත ස්ථානය",
"Total size: {{size}}": "මුළු ප්‍රමාණය: {{size}}",
"Calculating file info...": "ගොනු තොරතුරු ගණනය කරමින්...",
"New Data Location": "නව දත්ත ස්ථානය",
"Choose Different Folder": "වෙනත් ෆෝල්ඩරයක් තෝරන්න",
"Choose New Folder": "නව ෆෝල්ඩරයක් තෝරන්න",
"Migrating data...": "දත්ත මැතිවරණය කරමින්...",
"Copying: {{file}}": "පිටපත් කරමින්: {{file}}",
"{{current}} of {{total}} files": "{{current}}/{{total}} ගොනු",
"Migration completed successfully!": "මැතිවරණය සාර්ථකව නිමවිය!",
"Your data has been moved to the new location. Please restart the application to complete the process.": "ඔබගේ දත්ත නව ස්ථානයට මාරු කර ඇත. ක්‍රියාවලිය සම්පූර්ණ කිරීමට කරුණාකර යෙදුම නැවත ආරම්භ කරන්න.",
"Migration failed": "මැතිවරණය අසමත් විය",
"Important Notice": "මහත් අවධානයක්",
"This will move all your app data to the new location. Make sure the destination has enough free space.": "මෙය ඔබගේ යෙදුම් දත්ත සියල්ල නව ස්ථානයට මාරු කරනු ඇත. ගමන් මාර්ගය ප්‍රමාණවත් නිදහස් ස්ථානයක් ඇති බවට සහතික වන්න.",
"Restart App": "යෙදුම නැවත ආරම්භ කරන්න",
"Start Migration": "මැතිවරණය ආරම්භ කරන්න",
"Advanced Settings": "උසස් සැකසුම්",
"File count: {{size}}": "ගොනු ගණන: {{size}}",
"Background Read Aloud": "පසුබිම් පවසා කියවීම",
"Ready to read aloud": "වාදනය කිරීමට සූදානම්",
"Read Aloud": "පවසා කියවීම",
"Screen Brightness": "තිරයේ දිදුලනුම",
"Background Image": "පසුබිම් රූපය",
"Import Image": "රූපය ආයාත කරන්න",
"Opacity": "පැහැදිලිත්වය",
"Size": "ප්‍රමාණය",
"Cover": "ආවරණය",
"Contain": "අඩංගු වන්න"
}
@@ -0,0 +1,610 @@
{
"Email address": "E-postadress",
"Your Password": "Ditt lösenord",
"Your email address": "Din e-postadress",
"Your password": "Ditt lösenord",
"Sign in": "Logga in",
"Signing in...": "Loggar in...",
"Sign in with {{provider}}": "Logga in med {{provider}}",
"Already have an account? Sign in": "Har du konto? Logga in",
"Create a Password": "Skapa lösenord",
"Sign up": "Registrera",
"Signing up...": "Registrerar...",
"Don't have an account? Sign up": "Inget konto? Registrera",
"Check your email for the confirmation link": "Kolla din e-post för bekräftelselänk",
"Signing in ...": "Loggar in...",
"Send a magic link email": "Skicka magisk länk",
"Check your email for the magic link": "Kolla din e-post för magisk länk",
"Send reset password instructions": "Skicka återställningsinstruktioner",
"Sending reset instructions ...": "Skickar instruktioner...",
"Forgot your password?": "Glömt lösenord?",
"Check your email for the password reset link": "Kolla din e-post för återställningslänk",
"Phone number": "Telefonnummer",
"Your phone number": "Ditt telefonnummer",
"Token": "Token",
"Your OTP token": "Din OTP-token",
"Verify token": "Verifiera token",
"Go Back": "Tillbaka",
"Sign in with Google": "Logga in med Google",
"Sign in with Apple": "Logga in med Apple",
"Sign in with GitHub": "Logga in med GitHub",
"New Password": "Nytt lösenord",
"Your new password": "Ditt nya lösenord",
"Update password": "Uppdatera lösenord",
"Updating password ...": "Uppdaterar lösenord...",
"Your password has been updated": "Ditt lösenord har uppdaterats",
"Something went wrong. Don't worry, our team has been notified and we're working on a fix.": "Något gick fel. Oroa dig inte, vårt team har meddelats och vi arbetar på en lösning.",
"Error Details:": "Feldetaljer:",
"Try Again": "Försök igen",
"Your Library": "Ditt bibliotek",
"Need help?": "Behöver du hjälp?",
"Contact Support": "Kontakta support",
"Show Book Details": "Visa bokdetaljer",
"Bookshelf": "Bokhylla",
"Import Books": "Importera böcker",
"Open": "Öppna",
"Group": "Grupp",
"Details": "Detaljer",
"Delete": "Ta bort",
"Cancel": "Avbryt",
"Confirm Deletion": "Bekräfta borttagning",
"Are you sure to delete {{count}} selected book(s)?_one": "Vill du ta bort {{count}} vald bok?",
"Are you sure to delete {{count}} selected book(s)?_other": "Vill du ta bort {{count}} valda böcker?",
"Deselect Book": "Avmarkera bok",
"Select Book": "Välj bok",
"Download Book": "Ladda ner bok",
"Upload Book": "Ladda upp bok",
"Deselect Group": "Avmarkera grupp",
"Select Group": "Välj grupp",
"Untitled Group": "Namnlös grupp",
"Group Books": "Gruppera böcker",
"Remove From Group": "Ta bort från grupp",
"Create New Group": "Skapa ny grupp",
"Save": "Spara",
"Confirm": "Bekräfta",
"From Local File": "Från lokal fil",
"Search in {{count}} Book(s)..._one": "Sök i {{count}} bok...",
"Search in {{count}} Book(s)..._other": "Sök i {{count}} böcker...",
"Search Books...": "Sök böcker...",
"Clear Search": "Rensa sökning",
"Select Books": "Välj böcker",
"Deselect": "Avmarkera",
"Select All": "Välj alla",
"View Menu": "Visa meny",
"Settings Menu": "Inställningsmeny",
"Failed to select directory": "Kunde inte välja katalog",
"The new data directory must be different from the current one.": "Den nya datakatalogen måste skilja sig från den nuvarande.",
"Migration failed: {{error}}": "Migrering misslyckades: {{error}}",
"Change Data Location": "Ändra dataplats",
"Current Data Location": "Nuvarande dataplats",
"Loading...": "Laddar...",
"File count: {{size}}": "Antal filer: {{size}}",
"Total size: {{size}}": "Total storlek: {{size}}",
"Calculating file info...": "Beräknar filinfo...",
"New Data Location": "Ny dataplats",
"Choose New Folder": "Välj ny mapp",
"Choose Different Folder": "Välj annan mapp",
"Migrating data...": "Migrerar data...",
"Copying: {{file}}": "Kopierar: {{file}}",
"{{current}} of {{total}} files": "{{current}} av {{total}} filer",
"Migration completed successfully!": "Migrering slutförd!",
"Your data has been moved to the new location. Please restart the application to complete the process.": "Din data har flyttats till den nya platsen. Starta om appen för att slutföra processen.",
"Migration failed": "Migrering misslyckades",
"Important Notice": "Viktigt meddelande",
"This will move all your app data to the new location. Make sure the destination has enough free space.": "Detta flyttar all din appdata till den nya platsen. Se till att målet har tillräckligt med utrymme.",
"Close": "Stäng",
"Restart App": "Starta om app",
"Start Migration": "Starta migrering",
"Dark Mode": "Mörkt läge",
"Light Mode": "Ljust läge",
"Auto Mode": "Auto-läge",
"Logged in as {{userDisplayName}}": "Inloggad som {{userDisplayName}}",
"Logged in": "Inloggad",
"View account details and quota": "Visa kontodetaljer och kvot",
"Account": "Konto",
"Sign In": "Logga in",
"Auto Upload Books to Cloud": "Auto-ladda upp böcker till moln",
"Auto Import on File Open": "Auto-importera vid filöppning",
"Open Last Book on Start": "Öppna senaste bok vid start",
"Check Updates on Start": "Sök uppdateringar vid start",
"Open Book in New Window": "Öppna bok i nytt fönster",
"Fullscreen": "Helskärm",
"Always on Top": "Alltid överst",
"Always Show Status Bar": "Visa alltid statusfält",
"Keep Screen Awake": "Håll skärm vaken",
"Background Read Aloud": "Läs upp i bakgrunden",
"Reload Page": "Ladda om sida",
"Settings": "Inställningar",
"Advanced Settings": "Avancerade inställningar",
"Upgrade to Readest Premium": "Uppgradera till Readest Premium",
"Download Readest": "Ladda ner Readest",
"About Readest": "Om Readest",
"Help improve Readest": "Hjälp förbättra Readest",
"Sharing anonymized statistics": "Dela anonymiserad statistik",
"List": "Lista",
"Grid": "Rutnät",
"Crop": "Beskär",
"Fit": "Anpassa",
"Title": "Titel",
"Author": "Författare",
"Format": "Format",
"Date Read": "Läsdatum",
"Date Added": "Datum tillagd",
"Ascending": "Stigande",
"Descending": "Fallande",
"Book Covers": "Bokomslag",
"Sort by...": "Sortera efter...",
"No supported files found. Supported formats: {{formats}}": "Inga filer hittades. Format som stöds: {{formats}}",
"No chapters detected.": "Inga kapitel hittades.",
"Failed to parse the EPUB file.": "Kunde inte läsa EPUB-filen.",
"This book format is not supported.": "Detta bokformat stöds inte.",
"Failed to import book(s): {{filenames}}": "Kunde inte importera bok(er): {{filenames}}",
"Book uploaded: {{title}}": "Bok uppladdad: {{title}}",
"Insufficient storage quota": "Otillräcklig lagringskvot",
"Failed to upload book: {{title}}": "Kunde inte ladda upp bok: {{title}}",
"Book downloaded: {{title}}": "Bok nedladdad: {{title}}",
"Failed to download book: {{title}}": "Kunde inte ladda ner bok: {{title}}",
"Book deleted: {{title}}": "Bok borttagen: {{title}}",
"Deleted cloud backup of the book: {{title}}": "Raderade molnkopia av bok: {{title}}",
"Deleted local copy of the book: {{title}}": "Raderade lokal kopia av bok: {{title}}",
"Failed to delete book: {{title}}": "Kunde inte ta bort bok: {{title}}",
"Failed to delete cloud backup of the book: {{title}}": "Kunde inte radera molnkopia av bok: {{title}}",
"Failed to delete local copy of the book: {{title}}": "Kunde inte radera lokal kopia av bok: {{title}}",
"Library Header": "Bibliotekshuvud",
"Welcome to your library. You can import your books here and read them anytime.": "Välkommen till ditt bibliotek. Du kan importera dina böcker här och läsa dem när som helst.",
"Copied to notebook": "Kopierat till anteckningsbok",
"No annotations to export": "Inga anteckningar att exportera",
"Exported from Readest": "Exporterad från Readest",
"Highlights & Annotations": "Markeringar & anteckningar",
"Untitled": "Namnlös",
"Note": "Anteckning",
"Copied to clipboard": "Kopierat",
"Copy": "Kopiera",
"Delete Highlight": "Ta bort markering",
"Highlight": "Markera",
"Annotate": "Anteckna",
"Search": "Sök",
"Dictionary": "Ordbok",
"Wikipedia": "Wikipedia",
"Translate": "Översätt",
"Speak": "Läs upp",
"Login Required": "Inloggning krävs",
"Quota Exceeded": "Kvot överskriden",
"Unable to fetch the translation. Please log in first and try again.": "Kunde inte hämta översättning. Logga in och försök igen.",
"Unable to fetch the translation. Try again later.": "Kunde inte hämta översättning. Försök senare.",
"Original Text": "Originaltext",
"Auto Detect": "Auto-identifiera",
"(detected)": "(identifierad)",
"Translated Text": "Översatt text",
"System Language": "Systemspråk",
"No translation available.": "Ingen översättning tillgänglig.",
"Translated by {{provider}}.": "Översatt av {{provider}}.",
"Remove Bookmark": "Ta bort bokmärke",
"Add Bookmark": "Lägg till bokmärke",
"Books Content": "Bokinnehåll",
"Book Content": "Bokinnehåll",
"Footer Bar": "Sidfot",
"Reading Progress": "Läsframsteg",
"Next Section": "Nästa sektion",
"Previous Section": "Föregående sektion",
"Next Page": "Nästa sida",
"Previous Page": "Föregående sida",
"Go Forward": "Framåt",
"Font Size": "Teckenstorlek",
"Page Margin": "Sidmarginal",
"Small": "Liten",
"Large": "Stor",
"Line Spacing": "Radavstånd",
"Table of Contents": "Innehåll",
"Notes": "Anteckningar",
"Font & Layout": "Typsnitt & layout",
"Jump to Location": "Hoppa till plats",
"Header Bar": "Sidhuvud",
"View Options": "Visningsalternativ",
"Sync Conflict": "Synkkonflikt",
"Sync reading progress from \"{{deviceName}}\"?": "Synka läsframsteg från \"{{deviceName}}\"?",
"another device": "annan enhet",
"Local Progress": "Lokalt framsteg",
"Remote Progress": "Fjärrframsteg",
"Failed to connect": "Kunde inte ansluta",
"Disconnected": "Frånkopplad",
"KOReader Sync Settings": "KOReader-synkinställningar",
"Sync as {{userDisplayName}}": "Synka som {{userDisplayName}}",
"Sync Server Connected": "Synkserver ansluten",
"Sync Strategy": "Synkstrategi",
"Ask on conflict": "Fråga vid konflikt",
"Always use latest": "Använd alltid senaste",
"Send changes only": "Skicka endast ändringar",
"Receive changes only": "Ta endast emot ändringar",
"Checksum Method": "Kontrollsummemetod",
"File Content (recommended)": "Filinnehåll (rekommenderas)",
"File Name": "Filnamn",
"Device Name": "Enhetsnamn",
"Connect to your KOReader Sync server.": "Anslut till din KOReader-synkserver.",
"Server URL": "Server-URL",
"Username": "Användarnamn",
"Your Username": "Ditt användarnamn",
"Password": "Lösenord",
"Connect": "Anslut",
"Notebook": "Anteckningsbok",
"Unpin Notebook": "Lossa anteckningsbok",
"Pin Notebook": "Fäst anteckningsbok",
"Hide Search Bar": "Dölj sökfält",
"Show Search Bar": "Visa sökfält",
"Resize Notebook": "Ändra storlek på anteckningsbok",
"No notes match your search": "Inga anteckningar matchar din sökning",
"Excerpts": "Utdrag",
"Add your notes here...": "Lägg till dina anteckningar här...",
"Search notes and excerpts...": "Sök anteckningar och utdrag...",
"{{time}} min left in chapter": "{{time}} min kvar i kapitlet",
"{{count}} pages left in chapter_one": "{{count}} sida kvar i kapitlet",
"{{count}} pages left in chapter_other": "{{count}} sidor kvar i kapitlet",
"On {{current}} of {{total}} page": "På {{current}} av {{total}} sidor",
"Section Title": "Sektionstitel",
"Book Cover": "Bokomslag",
"More Info": "Mer info",
"Parallel Read": "Parallell läsning",
"Disable": "Inaktivera",
"Enable": "Aktivera",
"Exit Parallel Read": "Avsluta parallell läsning",
"Enter Parallel Read": "Starta parallell läsning",
"KOReader Sync": "KOReader-synk",
"Push Progress": "Skicka framsteg",
"Pull Progress": "Hämta framsteg",
"Export Annotations": "Exportera anteckningar",
"Sort TOC by Page": "Sortera innehåll efter sida",
"Edit": "Redigera",
"Go to Library": "Gå till bibliotek",
"Book Menu": "Bokmeny",
"Unpin Sidebar": "Lossa sidofält",
"Pin Sidebar": "Fäst sidofält",
"Search...": "Sök...",
"Search Options": "Sökalternativ",
"Book": "Bok",
"Chapter": "Kapitel",
"Match Case": "Matchning av versaler",
"Match Whole Words": "Matchning av hela ord",
"Match Diacritics": "Matchning av diakritiska tecken",
"Sidebar": "Sidofält",
"Resize Sidebar": "Ändra storlek på sidofält",
"TOC": "Innehåll",
"Bookmark": "Bokmärke",
"Toggle Sidebar": "Visa/dölj sidofält",
"Toggle Translation": "Visa/dölj översättning",
"Disable Translation": "Inaktivera översättning",
"Enable Translation": "Aktivera översättning",
"Translation Disabled": "Översättning inaktiverad",
"Previous Paragraph": "Föregående stycke",
"Previous Sentence": "Föregående mening",
"Pause": "Pausa",
"Play": "Spela",
"Next Sentence": "Nästa mening",
"Next Paragraph": "Nästa stycke",
"Read Aloud": "Läs upp",
"Ready to read aloud": "Redo att läsa upp",
"TTS not supported for PDF": "Uppläsning stöds inte för PDF",
"TTS not supported for this document": "Uppläsning stöds inte för detta dokument",
"No Timeout": "Ingen timeout",
"{{value}} minute": "{{value}} minut",
"{{value}} minutes": "{{value}} minuter",
"{{value}} hour": "{{value}} timme",
"{{value}} hours": "{{value}} timmar",
"Voices for {{lang}}": "Röster för {{lang}}",
"Slow": "Långsam",
"Fast": "Snabb",
"{{engine}}: {{count}} voices_one": "{{engine}}: {{count}} röst",
"{{engine}}: {{count}} voices_other": "{{engine}}: {{count}} röster",
"Zoom Level": "Zoomnivå",
"Zoom Out": "Zooma ut",
"Reset Zoom": "Återställ zoom",
"Zoom In": "Zooma in",
"Zoom Mode": "Zoomläge",
"Single Page": "Enkel sida",
"Auto Spread": "Auto-uppslag",
"Fit Page": "Anpassa sida",
"Fit Width": "Anpassa bredd",
"Separate Cover Page": "Separat omslagssida",
"Scrolled Mode": "Rullningsläge",
"Sign in to Sync": "Logga in för synk",
"Synced at {{time}}": "Synkad {{time}}",
"Never synced": "Aldrig synkad",
"Invert Image In Dark Mode": "Invertera bild i mörkt läge",
"Reading Progress Synced": "Läsframsteg synkat",
"Page {{page}} of {{total}} ({{percentage}}%)": "Sida {{page}} av {{total}} ({{percentage}}%)",
"Current position": "Nuvarande position",
"Approximately page {{page}} of {{total}} ({{percentage}}%)": "Cirka sida {{page}} av {{total}} ({{percentage}}%)",
"Approximately {{percentage}}%": "Cirka {{percentage}}%",
"Delete Your Account?": "Ta bort ditt konto?",
"This action cannot be undone. All your data in the cloud will be permanently deleted.": "Detta kan inte ångras. All din data i molnet raderas permanent.",
"Delete Permanently": "Ta bort permanent",
"Restore Purchase": "Återställ köp",
"Manage Subscription": "Hantera prenumeration",
"Reset Password": "Återställ lösenord",
"Sign Out": "Logga ut",
"Delete Account": "Ta bort konto",
"Upgrade to {{plan}}": "Uppgradera till {{plan}}",
"Complete Your Subscription": "Slutför din prenumeration",
"Coming Soon": "Kommer snart",
"Upgrade to Plus or Pro": "Uppgradera till Plus eller Pro",
"Current Plan": "Nuvarande plan",
"Plan Limits": "Plangränser",
"Failed to delete user. Please try again later.": "Kunde inte ta bort användare. Försök senare.",
"Failed to create checkout session": "Kunde inte skapa betalningssession",
"No purchases found to restore.": "Inga köp att återställa.",
"Failed to restore purchases.": "Kunde inte återställa köp.",
"Failed to manage subscription.": "Kunde inte hantera prenumeration.",
"Failed to load subscription plans.": "Kunde inte ladda prenumerationsplaner.",
"Loading profile...": "Laddar profil...",
"Processing your payment...": "Behandlar din betalning...",
"Please wait while we confirm your subscription.": "Vänta medan vi bekräftar din prenumeration.",
"Payment Processing": "Betalning behandlas",
"Your payment is being processed. This usually takes a few moments.": "Din betalning behandlas. Detta tar vanligtvis några ögonblick.",
"Payment Failed": "Betalning misslyckades",
"We couldn't process your subscription. Please try again or contact support if the issue persists.": "Vi kunde inte behandla din prenumeration. Försök igen eller kontakta support om problemet kvarstår.",
"Back to Profile": "Tillbaka till profil",
"Subscription Successful!": "Prenumeration lyckades!",
"Thank you for your subscription! Your payment has been processed successfully.": "Tack för din prenumeration! Din betalning har behandlats.",
"Email:": "E-post:",
"Plan:": "Plan:",
"Amount:": "Belopp:",
"Subscription ID:": "Prenumerations-ID:",
"Need help? Contact our support team at support@readest.com": "Behöver du hjälp? Kontakta vår support på support@readest.com",
"Free Plan": "Gratisplan",
"month": "månad",
"year": "år",
"Cross-Platform Sync": "Plattformsoberoende synk",
"Seamlessly sync your library, progress, highlights, and notes across all your devices—never lose your place again.": "Synka sömlöst ditt bibliotek, framsteg, markeringar och anteckningar mellan alla dina enheter.",
"Customizable Reading": "Anpassningsbar läsning",
"Personalize every detail with adjustable fonts, layouts, themes, and advanced display settings for the perfect reading experience.": "Anpassa varje detalj med justerbara typsnitt, layouter, teman och avancerade visningsinställningar.",
"AI Read Aloud": "AI-uppläsning",
"Enjoy hands-free reading with natural-sounding AI voices that bring your books to life.": "Njut av handsfree-läsning med naturligt ljudande AI-röster som ger dina böcker liv.",
"AI Translations": "AI-översättningar",
"Translate any text instantly with the power of Google, Azure, or DeepL—understand content in any language.": "Översätt vilken text som helst direkt med Google, Azure eller DeepL.",
"Community Support": "Community-support",
"Connect with fellow readers and get help fast in our friendly community channels.": "Anslut med andra läsare och få snabb hjälp i våra vänliga community-kanaler.",
"Cloud Sync Storage": "Molnsynklagring",
"AI Translations (per day)": "AI-översättningar (per dag)",
"Plus Plan": "Plus-plan",
"Includes All Free Plan Benefits": "Inkluderar alla gratisplanfördelar",
"Unlimited AI Read Aloud Hours": "Obegränsad AI-uppläsning",
"Listen without limits—convert as much text as you like into immersive audio.": "Lyssna obegränsat—konvertera så mycket text du vill till ljud.",
"More AI Translations": "Fler AI-översättningar",
"Unlock enhanced translation capabilities with more daily usage and advanced options.": "Lås upp förbättrad översättning med mer daglig användning och avancerade alternativ.",
"DeepL Pro Access": "DeepL Pro-åtkomst",
"Translate up to 100,000 characters daily with the most accurate translation engine available.": "Översätt upp till 100 000 tecken dagligen med den mest exakta översättningsmotorn.",
"Securely store and access your entire reading collection with up to 5 GB of cloud storage.": "Lagra säkert hela din lässamling med upp till 5 GB molnlagring.",
"Priority Support": "Prioriterad support",
"Enjoy faster responses and dedicated assistance whenever you need help.": "Få snabbare svar och dedikerad hjälp när du behöver det.",
"Pro Plan": "Pro-plan",
"Includes All Plus Plan Benefits": "Inkluderar alla Plus-planfördelar",
"Early Feature Access": "Tidig funktionsåtkomst",
"Be the first to explore new features, updates, and innovations before anyone else.": "Var först att utforska nya funktioner och uppdateringar innan andra.",
"Advanced AI Tools": "Avancerade AI-verktyg",
"Harness powerful AI tools for smarter reading, translation, and content discovery.": "Använd kraftfulla AI-verktyg för smartare läsning, översättning och innehållsupptäckt.",
"Translate up to 500,000 characters daily with the most accurate translation engine available.": "Översätt upp till 500 000 tecken dagligen med den mest exakta översättningsmotorn.",
"Securely store and access your entire reading collection with up to 20 GB of cloud storage.": "Lagra säkert hela din lässamling med upp till 20 GB molnlagring.",
"Version {{version}}": "Version {{version}}",
"Check Update": "Sök uppdatering",
"Already the latest version": "Redan senaste versionen",
"Checking for updates...": "Söker uppdateringar...",
"Error checking for updates": "Fel vid uppdateringskontroll",
"Drop to Import Books": "Släpp för att importera böcker",
"Terms of Service": "Användarvillkor",
"Privacy Policy": "Integritetspolicy",
"ON": "PÅ",
"OFF": "AV",
"Enter book title": "Ange boktitel",
"Subtitle": "Undertitel",
"Enter book subtitle": "Ange underrubrik",
"Enter author name": "Ange författarnamn",
"Series": "Serie",
"Enter series name": "Ange serienamn",
"Series Index": "Serieindex",
"Enter series index": "Ange serieindex",
"Total in Series": "Totalt i serien",
"Enter total books in series": "Ange totalt antal böcker i serien",
"Publisher": "Förlag",
"Enter publisher": "Ange förlag",
"Publication Date": "Publiceringsdatum",
"YYYY or YYYY-MM-DD": "ÅÅÅÅ eller ÅÅÅÅ-MM-DD",
"Language": "Språk",
"Identifier": "Identifierare",
"Subjects": "Ämnen",
"Fiction, Science, History": "Skönlitteratur, Vetenskap, Historia",
"Description": "Beskrivning",
"Enter book description": "Ange bokbeskrivning",
"Change cover image": "Ändra omslagsbild",
"Replace": "Ersätt",
"Remove cover image": "Ta bort omslagsbild",
"Unlock cover": "Lås upp omslag",
"Lock cover": "Lås omslag",
"Auto-Retrieve Metadata": "Auto-hämta metadata",
"Auto": "Auto",
"Auto-Retrieve": "Auto-hämta",
"Unlock all fields": "Lås upp alla fält",
"Unlock All": "Lås upp alla",
"Lock all fields": "Lås alla fält",
"Lock All": "Lås alla",
"Reset": "Återställ",
"Are you sure to delete the selected book?": "Vill du ta bort den valda boken?",
"Are you sure to delete the cloud backup of the selected book?": "Vill du ta bort molnkopian av den valda boken?",
"Are you sure to delete the local copy of the selected book?": "Vill du ta bort den lokala kopian av den valda boken?",
"Edit Metadata": "Redigera metadata",
"Book Details": "Bokdetaljer",
"Unknown": "Okänd",
"Delete Book Options": "Ta bort bokalternativ",
"Remove from Cloud & Device": "Ta bort från moln & enhet",
"Remove from Cloud Only": "Ta bort endast från moln",
"Remove from Device Only": "Ta bort endast från enhet",
"Published": "Publicerad",
"Updated": "Uppdaterad",
"Added": "Tillagd",
"File Size": "Filstorlek",
"No description available": "Ingen beskrivning tillgänglig",
"Locked": "Låst",
"Select Metadata Source": "Välj metadatakälla",
"Keep manual input": "Behåll manuell inmatning",
"Theme Mode": "Temaläge",
"Override Book Color": "Åsidosätt bokfärg",
"Theme Color": "Temafärg",
"Custom": "Anpassad",
"Code Highlighting": "Kodmarkering",
"Enable Highlighting": "Aktivera markering",
"Code Language": "Kodspråk",
"Scroll": "Rullning",
"Continuous Scroll": "Kontinuerlig rullning",
"Overlap Pixels": "Överlappande pixlar",
"Click": "Klick",
"Clicks for Page Flip": "Klick för sidbyte",
"Swap Clicks Area": "Byt klickområde",
"Disable Double Click": "Inaktivera dubbelklick",
"Volume Keys for Page Flip": "Volymknappar för sidbyte",
"Animation": "Animation",
"Paging Animation": "Sidanimation",
"Security": "Säkerhet",
"Allow JavaScript": "Tillåt JavaScript",
"Enable only if you trust the file.": "Aktivera endast om du litar på filen.",
"Font": "Typsnitt",
"Custom Fonts": "Anpassade typsnitt",
"Cancel Delete": "Avbryt borttagning",
"Delete Font": "Ta bort typsnitt",
"Import Font": "Importera typsnitt",
"Tips": "Tips",
"Supported font formats: .ttf, .otf, .woff, .woff2": "Format som stöds: .ttf, .otf, .woff, .woff2",
"Custom fonts can be selected from the Font Face menu": "Anpassade typsnitt kan väljas från typsnittsmeny",
"Global Settings": "Globala inställningar",
"Apply to All Books": "Tillämpa på alla böcker",
"Apply to This Book": "Tillämpa på denna bok",
"Reset Settings": "Återställ inställningar",
"Manage Custom Fonts": "Hantera anpassade typsnitt",
"System Fonts": "Systemtypsnitt",
"Serif Font": "Serif-typsnitt",
"Sans-Serif Font": "Sans-serif-typsnitt",
"Override Book Font": "Åsidosätt boktypsnitt",
"Default Font Size": "Standard teckenstorlek",
"Minimum Font Size": "Minsta teckenstorlek",
"Font Weight": "Typsnittsvikt",
"Font Family": "Typsnittsfamilj",
"Default Font": "Standardtypsnitt",
"CJK Font": "CJK-typsnitt",
"Font Face": "Typsnittssnitt",
"Monospace Font": "Monospace-typsnitt",
"Interface Language": "Gränssnittsspråk",
"Translation": "Översättning",
"Show Source Text": "Visa källtext",
"Translation Service": "Översättningstjänst",
"Translate To": "Översätt till",
"Override Book Layout": "Åsidosätt boklayout",
"Writing Mode": "Skrivläge",
"Default": "Standard",
"Horizontal Direction": "Horisontell riktning",
"Vertical Direction": "Vertikal riktning",
"RTL Direction": "RTL-riktning",
"Border Frame": "Kantram",
"Double Border": "Dubbel kant",
"Border Color": "Kantfärg",
"Paragraph": "Stycke",
"Paragraph Margin": "Styckemarginal",
"Word Spacing": "Ordavstånd",
"Letter Spacing": "Bokstavsavstånd",
"Text Indent": "Textindrag",
"Full Justification": "Full justering",
"Hyphenation": "Avstavning",
"Page": "Sida",
"Top Margin (px)": "Övre marginal (px)",
"Bottom Margin (px)": "Nedre marginal (px)",
"Left Margin (px)": "Vänster marginal (px)",
"Right Margin (px)": "Höger marginal (px)",
"Column Gap (%)": "Kolumnavstånd (%)",
"Maximum Number of Columns": "Max antal kolumner",
"Maximum Column Height": "Max kolumnhöjd",
"Maximum Column Width": "Max kolumnbredd",
"Header & Footer": "Sidhuvud & sidfot",
"Show Header": "Visa sidhuvud",
"Show Footer": "Visa sidfot",
"Show Remaining Time": "Visa återstående tid",
"Show Remaining Pages": "Visa återstående sidor",
"Show Reading Progress": "Visa läsframsteg",
"Reading Progress Style": "Läsframstegsstil",
"Page Number": "Sidnummer",
"Percentage": "Procent",
"Apply also in Scrolled Mode": "Tillämpa även i rullningsläge",
"Screen": "Skärm",
"Orientation": "Orientering",
"Portrait": "Porträtt",
"Landscape": "Landskap",
"Apply": "Tillämpa",
"Custom Content CSS": "Anpassad innehålls-CSS",
"Enter CSS for book content styling...": "Ange CSS för bokinnehållsstil...",
"Custom Reader UI CSS": "Anpassad läsar-UI CSS",
"Enter CSS for reader interface styling...": "Ange CSS för läsargränssnittsstil...",
"Decrease": "Minska",
"Increase": "Öka",
"Layout": "Layout",
"Color": "Färg",
"Behavior": "Beteende",
"Settings Panels": "Inställningspaneler",
"Reset {{settings}}": "Återställ {{settings}}",
"All the world's a stage,\nAnd all the men and women merely players;\nThey have their exits and their entrances,\nAnd one man in his time plays many parts,\nHis acts being seven ages.\n\n— William Shakespeare": "Hela världen är en scen,\nOch alla män och kvinnor bara spelare;\nDe har sina utgångar och entréer,\nOch en man spelar i sin tid många roller,\nHans akter är sju åldrar.\n\n— William Shakespeare",
"(from 'As You Like It', Act II)": "(från 'Som ni behagar', Akt II)",
"Custom Theme": "Anpassat tema",
"Theme Name": "Temanamn",
"Text Color": "Textfärg",
"Background Color": "Bakgrundsfärg",
"Link Color": "Länkfärg",
"Preview": "Förhandsgranska",
"Get Help from the Readest Community": "Få hjälp från Readest-communityn",
"A new version of Readest is available!": "En ny version av Readest finns!",
"Readest {{newVersion}} is available (installed version {{currentVersion}}).": "Readest {{newVersion}} finns tillgänglig (installerad version {{currentVersion}}).",
"Download and install now?": "Ladda ner och installera nu?",
"Downloading {{downloaded}} of {{contentLength}}": "Laddar ner {{downloaded}} av {{contentLength}}",
"Download finished": "Nedladdning klar",
"DOWNLOAD & INSTALL": "LADDA NER & INSTALLERA",
"Changelog": "Ändringslogg",
"Software Update": "Programuppdatering",
"What's New in Readest": "Nyheter i Readest",
"Minimize": "Minimera",
"Maximize or Restore": "Maximera eller återställ",
"Select Files": "Välj filer",
"Select Image": "Välj bild",
"Select Video": "Välj video",
"Select Audio": "Välj ljud",
"Select Fonts": "Välj typsnitt",
"Storage": "Lagring",
"{{percentage}}% of Cloud Sync Space Used.": "{{percentage}}% av molnsynkutrymme använt.",
"Translation Characters": "Översättningstecken",
"{{percentage}}% of Daily Translation Characters Used.": "{{percentage}}% av dagliga översättningstecken använt.",
"Daily translation quota reached. Upgrade your plan to continue using AI translations.": "Daglig översättningskvot nådd. Uppgradera din plan för att fortsätta använda AI-översättningar.",
"LXGW WenKai GB Screen": "LXGW WenKai GB Screen",
"LXGW WenKai TC": "LXGW WenKai TC",
"GuanKiapTsingKhai-T": "GuanKiapTsingKhai-T",
"Source Han Serif CN VF": "Source Han Serif CN VF",
"Huiwen-mincho": "Huiwen-mincho",
"KingHwa_OldSong": "KingHwa_OldSong",
"Google Books": "Google Böcker",
"Open Library": "Open Library",
"Azure Translator": "Azure Translator",
"DeepL": "DeepL",
"Google Translate": "Google Translate",
"Yandex Translate": "Yandex Translate",
"Gray": "Grå",
"Sepia": "Sepia",
"Grass": "Gräs",
"Cherry": "Körsbär",
"Sky": "Himmel",
"Solarized": "Solarized",
"Gruvbox": "Gruvbox",
"Nord": "Nord",
"Contrast": "Kontrast",
"Sunset": "Solnedgång",
"Reveal in Finder": "Visa i Finder",
"Reveal in File Explorer": "Visa i Utforskaren",
"Reveal in Folder": "Visa i mapp",
"Screen Brightness": "Skärmens ljusstyrka",
"Background Image": "Bakgrundsbild",
"Import Image": "Importera bild",
"Opacity": "Opacitet",
"Size": "Storlek",
"Cover": "Omslag",
"Contain": "Innehålla"
}
@@ -0,0 +1,610 @@
{
"Email address": "மின்னஞ்சல் முகவரி",
"Your Password": "உங்கள் கடவுச்சொல்",
"Your email address": "உங்கள் மின்னஞ்சல் முகவரி",
"Your password": "உங்கள் கடவுச்சொல்",
"Sign in": "உள்நுழையவும்",
"Signing in...": "உள்நுழைகிறது...",
"Sign in with {{provider}}": "{{provider}} மூலம் உள்நுழையவும்",
"Already have an account? Sign in": "ஏற்கனவே கணக்கு உள்ளதா? உள்நுழையவும்",
"Create a Password": "கடவுச்சொல் உருவாக்கவும்",
"Sign up": "பதிவு செய்யவும்",
"Signing up...": "பதிவு செய்கிறது...",
"Don't have an account? Sign up": "கணக்கு இல்லையா? பதிவு செய்யவும்",
"Check your email for the confirmation link": "உறுதிப்படுத்தல் இணைப்பிற்கு உங்கள் மின்னஞ்சலைச் சரிபார்க்கவும்",
"Signing in ...": "உள்நுழைகிறது...",
"Send a magic link email": "மேஜிக் இணைப்பு மின்னஞ்சல் அனுப்பவும்",
"Check your email for the magic link": "மேஜிக் இணைப்பிற்கு உங்கள் மின்னஞ்சலைச் சரிபார்க்கவும்",
"Send reset password instructions": "கடவுச்சொல் மீட்டமைப்பு வழிமுறைகளை அனுப்பவும்",
"Sending reset instructions ...": "மீட்டமைப்பு வழிமுறைகள் அனுப்புகிறது...",
"Forgot your password?": "கடவுச்சொல் மறந்துவிட்டதா?",
"Check your email for the password reset link": "கடவுச்சொல் மீட்டமைப்பு இணைப்பிற்கு மின்னஞ்சலைச் சரிபார்க்கவும்",
"Phone number": "தொலைபேசி எண்",
"Your phone number": "உங்கள் தொலைபேசி எண்",
"Token": "டோக்கன்",
"Your OTP token": "உங்கள் OTP டோக்கன்",
"Verify token": "டோக்கனை சரிபார்க்கவும்",
"Sign in with Google": "Google மூலம் உள்நுழையவும்",
"Sign in with Apple": "Apple மூலம் உள்நுழையவும்",
"Sign in with GitHub": "GitHub மூலம் உள்நுழையவும்",
"New Password": "புதிய கடவுச்சொல்",
"Your new password": "உங்கள் புதிய கடவுச்சொல்",
"Update password": "கடவுச்சொல் புதுப்பிக்கவும்",
"Updating password ...": "கடவுச்சொல் புதுப்பிக்கிறது...",
"Your password has been updated": "உங்கள் கடவுச்சொல் புதுப்பிக்கப்பட்டது",
"Something went wrong. Don't worry, our team has been notified and we're working on a fix.": "ஏதோ தவறு நடந்துள்ளது. கவலைப்பட வேண்டாம், எங்கள் குழு அறிவிக்கப்பட்டுள்ளது மற்றும் நாங்கள் தீர்வு செய்து கொண்டிருக்கிறோம்.",
"Error Details:": "பிழை விவரங்கள்:",
"Try Again": "மீண்டும் முயற்சிக்கவும்",
"Go Back": "பின் செல்லவும்",
"Your Library": "உங்கள் நூலகம்",
"Need help?": "உதவி தேவையா?",
"Contact Support": "ஆதரவை தொடர்பு கொள்ளவும்",
"Open": "திறக்கவும்",
"Group": "குழு",
"Details": "விவரங்கள்",
"Delete": "நீக்கவும்",
"Cancel": "ரத்து செய்யவும்",
"Confirm Deletion": "நீக்குதலை உறுதிசெய்யவும்",
"Are you sure to delete {{count}} selected book(s)?_one": "தேர்ந்தெடுக்கப்பட்ட புத்தகத்தை நீக்க உறுதியா?",
"Are you sure to delete {{count}} selected book(s)?_other": "தேர்ந்தெடுக்கப்பட்ட {{count}} புத்தகங்களை நீக்க உறுதியா?",
"Deselect Book": "புத்தகத்தை தேர்வுநீக்கவум்",
"Select Book": "புத்தகத்தை தேர்வு செய்யவும்",
"Show Book Details": "புத்தக விவரங்களைக் காட்டவும்",
"Download Book": "புத்தகத்தை பதிவிறக்கவும்",
"Upload Book": "புத்தகத்தை பதிவேற்றவும்",
"Deselect Group": "குழுவை தேர்வுநீক்கவும்",
"Select Group": "குழுவை தேர்வு செய்யவும்",
"Untitled Group": "பெயரிடப்படாத குழு",
"Group Books": "புத்தகங்களை குழுவாக்கவும்",
"Remove From Group": "குழுவிலிருந்து நீக்கவும்",
"Create New Group": "புதிய குழு உருவாக்கவும்",
"Save": "சேமிக்கவும்",
"Confirm": "உறுதிசெய்யவும்",
"From Local File": "உள்ளூர் கோப்பிலிருந்து",
"Search in {{count}} Book(s)..._one": "புத்தகத்தில் தேடவும்...",
"Search in {{count}} Book(s)..._other": "{{count}} புத்தகங்களில் தேடவும்...",
"Search Books...": "புத்தகங்களைத் தேடவும்...",
"Clear Search": "தேடலை அழிக்கவும்",
"Import Books": "புத்தகங்களை இறக்குமதி செய்யவும்",
"Select Books": "புத்தகங்களை தேர்வு செய்யவும்",
"Deselect": "தேர்வுநீக்கவும்",
"Select All": "அனைத்தையும் தேர்வு செய்யவும்",
"Logged in as {{userDisplayName}}": "{{userDisplayName}} ஆக உள்நுழைந்துள்ளீர்கள்",
"Logged in": "உள்நுழைந்துள்ளீர்கள்",
"Account": "கணக்கு",
"Sign In": "உள்நுழையவும்",
"Auto Upload Books to Cloud": "புத்தகங்களை cloud இல் தானாக பதிவேற்றவும்",
"Auto Import on File Open": "கோப்பு திறக்கும்போது தானாக இறக்குமதி",
"Open Last Book on Start": "தொடங்கும்போது கடைசி புத்தகத்தைத் திறக்கவும்",
"Check Updates on Start": "தொடங்கும்போது புதுப்பிப்புகளைச் சரிபார்க்கவும்",
"Open Book in New Window": "புதிய சாளரத்தில் புத்தகத்தைத் திறக்கவும்",
"Fullscreen": "முழுத்திரை",
"Always on Top": "எப்போதும் மேலே",
"Always Show Status Bar": "எப்போதும் நிலைப் பட்டியைக் காட்டவும்",
"Keep Screen Awake": "திரையை விழித்திருக்கச் செய்யவும்",
"Reload Page": "பக்கத்தை மீண்டும் ஏற்றவும்",
"Dark Mode": "இருட்டு பயன்முறை",
"Light Mode": "வெளிச்ச பயன்முறை",
"Auto Mode": "தானியங்கி பயன்முறை",
"Upgrade to Readest Premium": "Readest Premium க்கு மேம்படுத்தவும்",
"Download Readest": "Readest பதிவிறக்கவும்",
"About Readest": "Readest பற்றி",
"Help improve Readest": "Readest மேம்படுத்த உதவவும்",
"Sharing anonymized statistics": "அடையாள விவரங்களை நீக்கிய புள்ளிவிவரங்களைப் பகிர்தல்",
"List": "பட்டியல்",
"Grid": "கட்டம்",
"Crop": "வெட்டவும்",
"Fit": "பொருத்தவும்",
"Title": "தலைப்பு",
"Author": "ஆசிரியர்",
"Format": "வடிவம்",
"Date Read": "படித்த தேதி",
"Date Added": "சேர்த்த தேதி",
"Ascending": "ஏறுவரிசை",
"Descending": "இறங்குவரிசை",
"Book Covers": "புத்தக அட்டைகள்",
"Sort by...": "வரிசைப்படுத்து...",
"No supported files found. Supported formats: {{formats}}": "ஆதரிக்கப்படும் கோப்புகள் இல்லை. ஆதரிக்கப்படும் வடிவங்கள்: {{formats}}",
"No chapters detected.": "அத்தியாயங்கள் கண்டறியப்படவில்லை.",
"Failed to parse the EPUB file.": "EPUB கோப்பை பகுப்பாய்வு செய்ய முடியவில்லை.",
"This book format is not supported.": "இந்த புத்தக வடிவம் ஆதரிக்கப்படவில்லை.",
"Failed to import book(s): {{filenames}}": "புத்தகங்களை இறக்குமதி செய்ய முடியவில்லை: {{filenames}}",
"Book uploaded: {{title}}": "புத்தகம் பதிவேற்றப்பட்டது: {{title}}",
"Insufficient storage quota": "போதுமான சேமிப்பக ஒதுக்கீடு இல்லை",
"Failed to upload book: {{title}}": "புத்தகத்தை பதிவேற்ற முடியவில்லை: {{title}}",
"Book downloaded: {{title}}": "புத்தகம் பதிவிறக்கப்பட்டது: {{title}}",
"Failed to download book: {{title}}": "புத்தகத்தை பதிவிறக்க முடியவில்லை: {{title}}",
"Book deleted: {{title}}": "புத்தகம் நீக்கப்பட்டது: {{title}}",
"Deleted cloud backup of the book: {{title}}": "புத்தகத்தின் cloud backup நீக்கப்பட்டது: {{title}}",
"Deleted local copy of the book: {{title}}": "புத்தகத்தின் உள்ளூர் நகல் நீக்கப்பட்டது: {{title}}",
"Failed to delete book: {{title}}": "புத்தகத்தை நீக்க முடியவில்லை: {{title}}",
"Failed to delete cloud backup of the book: {{title}}": "புத்தகத்தின் cloud backup நீக்க முடியவில்லை: {{title}}",
"Failed to delete local copy of the book: {{title}}": "புத்தகத்தின் உள்ளூர் நகல் நீக்க முடியவில்லை: {{title}}",
"Welcome to your library. You can import your books here and read them anytime.": "உங்கள் நூலகத்திற்கு வரவேற்கிறோம். நீங்கள் இங்கே உங்கள் புத்தகங்களை இறக்குமதி செய்து எப்போது வேண்டுமானாலும் படிக்கலாம்.",
"Copied to notebook": "குறிப்பேட்டில் நகலெடுக்கப்பட்டது",
"No annotations to export": "ஏற்றுமதி செய்ய குறிப்புகள் இல்லை",
"Exported from Readest": "Readest இல் இருந்து ஏற்றுமதி செய்யப்பட்டது",
"Highlights & Annotations": "முத்திரைகள் மற்றும் குறிப்புகள்",
"Untitled": "பெயரிடப்படாதது",
"Note": "குறிப்பு",
"Copied to clipboard": "clipboard இல் நகலெடுக்கப்பட்டது",
"Copy": "நகல்",
"Delete Highlight": "முத்திரையை நீக்கவும்",
"Highlight": "முத்திரை",
"Annotate": "குறிப்பிடவும்",
"Search": "தேடவும்",
"Dictionary": "அகராதி",
"Wikipedia": "விக்கிபீடியா",
"Translate": "மொழிபெயர்க்கவும்",
"Speak": "பேசவும்",
"Login Required": "உள்நுழைவு தேவை",
"Quota Exceeded": "ஒதுக்கீடு மீறப்பட்டது",
"Unable to fetch the translation. Please log in first and try again.": "மொழிபெயர்ப்பைப் பெற முடியவில்லை. முதலில் உள்நுழைந்து மீண்டும் முயற்சிக்கவும்.",
"Unable to fetch the translation. Try again later.": "மொழிபெயர்ப்பைப் பெற முடியவில்லை. பின்னர் மீண்டும் முயற்சிக்கவும்.",
"Original Text": "மூல உரை",
"Auto Detect": "தானாக கண்டறிதல்",
"(detected)": "(கண்டறியப்பட்டது)",
"Translated Text": "மொழிபெயர்க்கப்பட்ட உரை",
"System Language": "கணினி மொழி",
"Loading...": "ஏற்றுகிறது...",
"No translation available.": "மொழிபெயர்ப்பு கிடைக்கவில்லை.",
"Translated by {{provider}}.": "{{provider}} மூலம் மொழிபெயர்க்கப்பட்டது.",
"Bookmark": "புக்மார்க்",
"Next Section": "அடுத்த பிரிவு",
"Previous Section": "முந்தைய பிரிவு",
"Next Page": "அடுத்த பக்கம்",
"Previous Page": "முந்தைய பக்கம்",
"Go Forward": "முன்னோக்கி செல்லவும்",
"Small": "சிறிய",
"Large": "பெரிய",
"Sync Conflict": "ஒத்திசைவு முரண்பாடு",
"Sync reading progress from \"{{deviceName}}\"?": "\"{{deviceName}}\" இல் இருந்து வாசிப்பு முன்னேற்றத்தை ஒத்திசைக்கவா?",
"another device": "மற்றொரு சாதனம்",
"Local Progress": "உள்ளூர் முன்னேற்றம்",
"Remote Progress": "தொலை முன்னேற்றம்",
"Failed to connect": "இணைக்க முடியவில்லை",
"Disconnected": "துண்டிக்கப்பட்டது",
"KOReader Sync Settings": "KOReader ஒத்திசைவு அமைப்புகள்",
"Sync as {{userDisplayName}}": "{{userDisplayName}} ஆக ஒத்திசைக்கவும்",
"Sync Server Connected": "ஒத்திசைவு சர்வர் இணைக்கப்பட்டது",
"Sync Strategy": "ஒத்திசைவு உத்தி",
"Ask on conflict": "முரண்பாட்டில் கேட்கவும்",
"Always use latest": "எப்போதும் சமீபத்தியதைப் பயன்படுத்தவும்",
"Send changes only": "மாற்றங்களை மட்டும் அனுப்பவும்",
"Receive changes only": "மாற்றங்களை மட்டும் பெறவும்",
"Checksum Method": "சரிபார்ப்பு முறை",
"File Content (recommended)": "கோப்பு உள்ளடக்கம் (பரிந்துரைக்கப்பட்டது)",
"File Name": "கோப்பு பெயர்",
"Device Name": "சாதன பெயர்",
"Connect to your KOReader Sync server.": "உங்கள் KOReader ஒத்திசைவு சர்வருடன் இணையவும்.",
"Server URL": "சர்வர் URL",
"Username": "பயனர்பெயர்",
"Your Username": "உங்கள் பயனர்பெயர்",
"Password": "கடவுச்சொல்",
"Connect": "இணைக்கவும்",
"Notebook": "குறிப்பேடு",
"No notes match your search": "உங்கள் தேடலுக்கு பொருந்தும் குறிப்புகள் இல்லை",
"Excerpts": "உதாரணங்கள்",
"Notes": "குறிப்புகள்",
"Add your notes here...": "உங்கள் குறிப்புகளை இங்கே சேர்க்கவும்...",
"Search notes and excerpts...": "குறிப்புகள் மற்றும் உதாரணங்களைத் தேடவும்...",
"{{time}} min left in chapter": "அத்தியாயத்தில் {{time}} நிமிடங்கள் மீதமுள்ளன",
"{{count}} pages left in chapter_one": "அத்தியாயத்தில் 1 பக்கம் மீதமுள்ளது",
"{{count}} pages left in chapter_other": "அத்தியாயத்தில் {{count}} பக்கங்கள் மீதமுள்ளன",
"Theme Mode": "தீம் பயன்முறை",
"Invert Image In Dark Mode": "இருட்டு பயன்முறையில் படத்தை தலைகீழாக மாற்றவும்",
"Override Book Color": "புத்தக நிறத்தை மேலெழுதவும்",
"Theme Color": "தீம் நிறம்",
"Custom": "தனிப்பயன்",
"Code Highlighting": "குறியீடு முத்திரை",
"Enable Highlighting": "முத்திரையிடுதலை இயக்கவும்",
"Code Language": "குறியீடு மொழி",
"Auto": "தானியங்கி",
"Scroll": "உருட்டவும்",
"Scrolled Mode": "உருட்டல் பயன்முறை",
"Continuous Scroll": "தொடர்ச்சியான உருட்டல்",
"Overlap Pixels": "ஒன்றுடன் ஒன்று பிக்சல்கள்",
"Click": "கிளிக்",
"Clicks for Page Flip": "பக்கம் புரட்டுவதற்கு கிளிக்கள்",
"Swap Clicks Area": "கிளிக் பகுதியை மாற்றவும்",
"Disable Double Click": "இரட்டை கிளிக்கை முடக்கவும்",
"Volume Keys for Page Flip": "பக்கம் புரட்டுவதற்கு ஒலி விசைகள்",
"Animation": "அனிமேஷன்",
"Paging Animation": "பக்க அனிமேஷன்",
"Security": "பாதுகாப்பு",
"Allow JavaScript": "JavaScript அனுமதிக்கவும்",
"Enable only if you trust the file.": "கோப்பை நம்பினால் மட்டும் இயக்கவும்.",
"Font": "எழுத்துரு",
"Custom Fonts": "தனிப்பயன் எழுத்துருக்கள்",
"Cancel Delete": "நீக்குதலை ரத்துசெய்யவும்",
"Delete Font": "எழுத்துருவை நீக்கவும்",
"Import Font": "எழுத்துருவை இறக்குமதி செய்யவும்",
"Tips": "குறிப்புகள்",
"Supported font formats: .ttf, .otf, .woff, .woff2": "ஆதரிக்கப்படும் எழுத்துரு வடிவங்கள்: .ttf, .otf, .woff, .woff2",
"Custom fonts can be selected from the Font Face menu": "Font Face மெனுவிலிருந்து தனிப்பயன் எழுத்துருக்களை தேர்வு செய்யலாம்",
"Global Settings": "உலகளாவிய அமைப்புகள்",
"Apply to All Books": "அனைத்து புத்தகங்களுக்கும் பொருந்தும்",
"Apply to This Book": "இந்த புத்தகத்திற்கு பொருந்தும்",
"Reset Settings": "அமைப்புகளை மீட்டமைக்கவும்",
"Manage Custom Fonts": "தனிப்பயன் எழுத்துருக்களை நிர்வகிக்கவும்",
"System Fonts": "கணினி எழுத்துருக்கள்",
"Serif Font": "Serif எழுத்துரு",
"Sans-Serif Font": "Sans-Serif எழுத்துரு",
"Override Book Font": "புத்தக எழுத்துருவை மேலெழுதவும்",
"Font Size": "எழுத்துரு அளவு",
"Default Font Size": "இயல்புநிலை எழுத்துரு அளவு",
"Minimum Font Size": "குறைந்தபட்ச எழுத்துரு அளவு",
"Font Weight": "எழுத்துரு எடை",
"Font Family": "எழுத்துரு குடும்பம்",
"Default Font": "இயல்புநிலை எழுத்துரு",
"CJK Font": "CJK எழுத்துரு",
"Font Face": "எழுத்துரு முகம்",
"Monospace Font": "Monospace எழுத்துரு",
"Language": "மொழி",
"Interface Language": "இடைமுக மொழி",
"Translation": "மொழிபெயர்ப்பு",
"Enable Translation": "மொழிபெயர்ப்பை இயக்கவும்",
"Show Source Text": "மூல உரையைக் காட்டவும்",
"Translation Service": "மொழிபெயர்ப்பு சேவை",
"Translate To": "இதற்கு மொழிபெயர்க்கவும்",
"Override Book Layout": "புத்தக அமைப்பை மேலெழுதவும்",
"Writing Mode": "எழுதும் பயன்முறை",
"Default": "இயல்புநிலை",
"Horizontal Direction": "கிடைமட்ட திசை",
"Vertical Direction": "செங்குத்து திசை",
"RTL Direction": "RTL திசை",
"Border Frame": "எல்லை சட்டகம்",
"Double Border": "இரட்டை எல்லை",
"Border Color": "எல்லை நிறம்",
"Paragraph": "பத்தி",
"Paragraph Margin": "பத்தி விளிம்பு",
"Line Spacing": "வரி இடைவெளி",
"Word Spacing": "சொல் இடைவெளி",
"Letter Spacing": "எழுத்து இடைவெளி",
"Text Indent": "உரை உள்தள்ளல்",
"Full Justification": "முழு நியாயம்",
"Hyphenation": "இணைக்கோடு",
"Page": "பக்கம்",
"Top Margin (px)": "மேல் விளிம்பு (px)",
"Bottom Margin (px)": "கீழ் விளிம்பு (px)",
"Left Margin (px)": "இடது விளிம்பு (px)",
"Right Margin (px)": "வலது விளிம்பு (px)",
"Column Gap (%)": "நெடுவரிசை இடைவெளி (%)",
"Maximum Number of Columns": "அதிகபட்ச நெடுவரிசை எண்ணிக்கை",
"Maximum Column Height": "அதிகபட்ச நெடுவரிசை உயரம்",
"Maximum Column Width": "அதிகபட்ச நெடுவரிசை அகலம்",
"Header & Footer": "தலைப்பு மற்றும் அடிக்குறிப்பு",
"Show Header": "தலைப்பைக் காட்டவும்",
"Show Footer": "அடிக்குறிப்பைக் காட்டவும்",
"Show Remaining Time": "மீதமுள்ள நேரத்தைக் காட்டவும்",
"Show Remaining Pages": "மீதமுள்ள பக்கங்களைக் காட்டவும்",
"Show Reading Progress": "வாசிப்பு முன்னேற்றத்தைக் காட்டவும்",
"Reading Progress Style": "வாசிப்பு முன்னேற்ற பாணி",
"Page Number": "பக்க எண்",
"Percentage": "சதவீதம்",
"Apply also in Scrolled Mode": "உருட்டல் பயன்முறையிலும் பொருந்தும்",
"Screen": "திரை",
"Orientation": "திசைநிலை",
"Portrait": "நிலைமான்",
"Landscape": "கிடைமான்",
"Apply": "பொருந்தும்",
"Custom Content CSS": "தனிப்பயன் உள்ளடக்க CSS",
"Enter CSS for book content styling...": "புத்தக உள்ளடக்க வடிவமைப்பிற்கு CSS ஐ உள்ளிடவும்...",
"Custom Reader UI CSS": "தனிப்பயன் வாசிப்பான் UI CSS",
"Enter CSS for reader interface styling...": "வாசிப்பான் இடைமுக வடிவமைப்பிற்கு CSS ஐ உள்ளிடவும்...",
"Layout": "அமைப்பு",
"Color": "நிறம்",
"Behavior": "நடத்தை",
"Reset {{settings}}": "{{settings}} மீட்டமைக்கவும்",
"All the world's a stage,\nAnd all the men and women merely players;\nThey have their exits and their entrances,\nAnd one man in his time plays many parts,\nHis acts being seven ages.\n\n— William Shakespeare": "உலகம் முழுவதும் ஒரு மேடை,\nஅதில் ஆண்களும் பெண்களும் வெறும் நடிகர்கள்;\nஅவர்களுக்கு வெளியேறுதலும் நுழைவும் உண்டு,\nஒரு மனிதன் தன் காலத்தில் பல பாத்திரங்களை வகிக்கிறான்,\nஅவனுடைய செயல்கள் ஏழு வயதுகளாக இருக்கின்றன.\n\n— வில்லியம் ஷேக்ஸ்பியர்",
"(from 'As You Like It', Act II)": "('ஆஸ் யூ லைக் இட்', இரண்டாவது அங்கத்திலிருந்து)",
"Custom Theme": "தனிப்பயன் தீம்",
"Theme Name": "தீம் பெயர்",
"Text Color": "உரை நிறம்",
"Background Color": "பின்னணி நிறம்",
"Link Color": "இணைப்பு நிறம்",
"Preview": "முன்னோட்டம்",
"Font & Layout": "எழுத்துரு மற்றும் அமைப்பு",
"Book Cover": "புத்தக அட்டை",
"More Info": "மேலும் தகவல்",
"Parallel Read": "இணை வாசிப்பு",
"Disable": "முடக்கவும்",
"Enable": "இயக்கவும்",
"KOReader Sync": "KOReader ஒத்திசைவு",
"Push Progress": "முன்னேற்றத்தை அனுப்பவும்",
"Pull Progress": "முன்னேற்றத்தை இழுக்கவும்",
"Export Annotations": "குறிப்புகளை ஏற்றுமதி செய்யவும்",
"Sort TOC by Page": "பக்கத்தின்படி TOC வரிசைப்படுத்தவும்",
"Edit": "திருத்தவும்",
"Search...": "தேடவும்...",
"Book": "புத்தகம்",
"Chapter": "அத்தியாயம்",
"Match Case": "எழுத்து பொருத்தம்",
"Match Whole Words": "முழு வார்த்தைகள் பொருத்தம்",
"Match Diacritics": "உச்சரிப்பு குறிகள் பொருத்தம்",
"TOC": "உள்ளடக்கம்",
"Table of Contents": "உள்ளடக்கம்",
"Sidebar": "பக்கப்பட்டி",
"Disable Translation": "மொழிபெயர்ப்பை முடக்கவும்",
"TTS not supported for PDF": "PDF க்கு TTS ஆதரிக்கப்படவில்லை",
"TTS not supported for this document": "இந்த ஆவணத்திற்கு TTS ஆதரிக்கப்படவில்லை",
"No Timeout": "நேர வரம்பு இல்லை",
"{{value}} minute": "{{value}} நிமிடம்",
"{{value}} minutes": "{{value}} நிமிடங்கள்",
"{{value}} hour": "{{value}} மணிநேரம்",
"{{value}} hours": "{{value}} மணிநேரங்கள்",
"Voices for {{lang}}": "{{lang}} க்கான குரல்கள்",
"Slow": "மெதுவாக",
"Fast": "வேகமாக",
"{{engine}}: {{count}} voices_one": "{{engine}}: 1 குரல்",
"{{engine}}: {{count}} voices_other": "{{engine}}: {{count}} குரல்கள்",
"Sign in to Sync": "ஒத்திசைக்க உள்நுழையவும்",
"Synced at {{time}}": "{{time}} இல் ஒத்திசைக்கப்பட்டது",
"Never synced": "ஒத்திசைக்கப்படவில்லை",
"Reading Progress Synced": "வாசிப்பு முன்னேற்றம் ஒத்திசைக்கப்பட்டது",
"Page {{page}} of {{total}} ({{percentage}}%)": "{{total}} இல் {{page}} பக்கம் ({{percentage}}%)",
"Current position": "தற்போதைய நிலை",
"Approximately page {{page}} of {{total}} ({{percentage}}%)": "தோராயமாக {{total}} இல் {{page}} பக்கம் ({{percentage}}%)",
"Approximately {{percentage}}%": "தோராயமாக {{percentage}}%",
"Delete Your Account?": "உங்கள் கணக்கை நீக்கவா?",
"This action cannot be undone. All your data in the cloud will be permanently deleted.": "இந்த செயலை மாற்ற முடியாது. cloud இல் உள்ள உங்கள் எல்லா தரவும் நிரந்தரமாக நீக்கப்படும்.",
"Delete Permanently": "நிரந்தரமாக நீக்கவும்",
"Restore Purchase": "வாங்குதலை மீட்டெடுக்கவும்",
"Manage Subscription": "சந்தாவை நிர்வகிக்கவும்",
"Reset Password": "கடவுச்சொல் மீட்டமைக்கவும்",
"Sign Out": "வெளியேறவும்",
"Delete Account": "கணக்கை நீக்கவும்",
"Upgrade to {{plan}}": "{{plan}} க்கு மேம்படுத்தவும்",
"Complete Your Subscription": "உங்கள் சந்தாவை நிறைவு செய்யவும்",
"Coming Soon": "விரைவில் வரும்",
"Upgrade to Plus or Pro": "Plus அல்லது Pro க்கு மேம்படுத்தவும்",
"Current Plan": "தற்போதைய திட்டம்",
"Plan Limits": "திட்ட வரம்புகள்",
"Failed to delete user. Please try again later.": "பயனரை நீக்க முடியவில்லை. பின்னர் மீண்டும் முயற்சிக்கவும்.",
"Failed to create checkout session": "checkout session உருவாக்க முடியவில்லை",
"No purchases found to restore.": "மீட்டெடுக்க வாங்குதல்கள் இல்லை.",
"Failed to restore purchases.": "வாங்குதல்களை மீட்டெடுக்க முடியவில்லை.",
"Failed to manage subscription.": "சந்தாவை நிர்வகிக்க முடியவில்லை.",
"Failed to load subscription plans.": "சந்தா திட்டங்களை ஏற்ற முடியவில்லை.",
"Loading profile...": "சுயவிவரம் ஏற்றுகிறது...",
"Processing your payment...": "உங்கள் கட்டணத்தை செயல்படுத்துகிறது...",
"Please wait while we confirm your subscription.": "நாங்கள் உங்கள் சந்தாவை உறுதிசெய்யும் வரை காத்திருக்கவும்.",
"Payment Processing": "கட்டண செயலாக்கம்",
"Your payment is being processed. This usually takes a few moments.": "உங்கள் கட்டணம் செயல்படுத்தப்படுகிறது. இது பொதுவாக சில நிமிடங்கள் ஆகும்.",
"Payment Failed": "கட்டணம் தோல்வியடைந்தது",
"We couldn't process your subscription. Please try again or contact support if the issue persists.": "உங்கள் சந்தாவை செயல்படுத்த முடியவில்லை. மீண்டும் முயற்சிக்கவும் அல்லது பிரச்சனை தொடர்ந்தால் ஆதரவைத் தொடர்பு கொள்ளவும்.",
"Back to Profile": "சுயவிவரத்திற்கு திரும்பவும்",
"Subscription Successful!": "சந்தா வெற்றிகரமானது!",
"Thank you for your subscription! Your payment has been processed successfully.": "உங்கள் சந்தாவிற்கு நன்றி! உங்கள் கட்டணம் வெற்றிகரமாக செயல்படுத்தப்பட்டது.",
"Email:": "மின்னஞ்சல்:",
"Plan:": "திட்டம்:",
"Amount:": "தொகை:",
"Subscription ID:": "சந்தா ID:",
"Go to Library": "நூலகத்திற்கு செல்லவும்",
"Need help? Contact our support team at support@readest.com": "உதவி தேவையா? support@readest.com இல் எங்கள் ஆதரவு குழுவைத் தொடர்பு கொள்ளவும்",
"Free Plan": "இலவச திட்டம்",
"month": "மாதம்",
"year": "வருடம்",
"Cross-Platform Sync": "குறுக்கு தளம் ஒத்திசைவு",
"Seamlessly sync your library, progress, highlights, and notes across all your devices—never lose your place again.": "உங்கள் அனைத்து சாதனங்களிலும் உங்கள் நூலகம், முன்னேற்றம், முத்திரைகள் மற்றும் குறிப்புகளை தடையின்றி ஒத்திசைக்கவும் - உங்கள் இடத்தை மீண்டும் இழக்க வேண்டாம்.",
"Customizable Reading": "தனிப்பயனாக்கக்கூடிய வாசிப்பு",
"Personalize every detail with adjustable fonts, layouts, themes, and advanced display settings for the perfect reading experience.": "சரியான வாசிப்பு அனுபவத்திற்காக சரிசெய்யக்கூடிய எழுத்துருக்கள், அமைப்புகள், தீம்கள் மற்றும் மேம்பட்ட காட்சி அமைப்புகளுடன் ஒவ்வொரு விவரத்தையும் தனிப்பயனாக்கவும்.",
"AI Read Aloud": "AI உரை வாசிப்பு",
"Enjoy hands-free reading with natural-sounding AI voices that bring your books to life.": "உங்கள் புத்தகங்களை உயிர்ப்பிக்கும் இயற்கையான ஒலியுடைய AI குரல்களுடன் கைகள் இல்லாமல் வாசிப்பை அனுபவிக்கவும்.",
"AI Translations": "AI மொழிபெயர்ப்புகள்",
"Translate any text instantly with the power of Google, Azure, or DeepL—understand content in any language.": "Google, Azure அல்லது DeepL இன் சக்தியுடன் எந்த உரையையும் உடனடியாக மொழிபெயர்க்கவும் - எந்த மொழியிலும் உள்ளடக்கத்தை புரிந்துகொள்ளவும்.",
"Community Support": "சமூக ஆதரவு",
"Connect with fellow readers and get help fast in our friendly community channels.": "சக வாசகர்களுடன் இணையுங்கள் மற்றும் எங்கள் நட்பு சமூக சேனல்களில் விரைவாக உதவி பெறுங்கள்.",
"Cloud Sync Storage": "Cloud ஒத்திசைவு சேமிப்பு",
"AI Translations (per day)": "AI மொழிபெயர்ப்புகள் (ஒரு நாளுக்கு)",
"Plus Plan": "Plus திட்டம்",
"Includes All Free Plan Benefits": "அனைத்து இலவச திட்ட நன்மைகளும் உள்ளடங்கும்",
"Unlimited AI Read Aloud Hours": "வரம்பற்ற AI வாசிப்பு மணிநேரங்கள்",
"Listen without limits—convert as much text as you like into immersive audio.": "வரம்பு இல்லாமல் கேளுங்கள் - நீங்கள் விரும்பும் அளவு உரையை அழுத்தமான ஆடியோவாக மாற்றுங்கள்.",
"More AI Translations": "மேலும் AI மொழிபெயர்ப்புகள்",
"Unlock enhanced translation capabilities with more daily usage and advanced options.": "அதிக தினசரி பயன்பாடு மற்றும் மேம்பட்ட விருப்பங்களுடன் மேம்பட்ட மொழிபெயர்ப்பு திறன்களை திறக்கவும்.",
"DeepL Pro Access": "DeepL Pro அணுகல்",
"Translate up to 100,000 characters daily with the most accurate translation engine available.": "கிடைக்கக்கூடிய மிகவும் துல்லியமான மொழிபெயர்ப்பு இயந்திரத்துடன் தினசரி 100,000 எழுத்துகள் வரை மொழிபெயர்க்கவும்.",
"Securely store and access your entire reading collection with up to 5 GB of cloud storage.": "5 GB cloud சேமிப்புடன் உங்கள் முழு வாசிப்பு சேகரிப்பையும் பாதுகாப்பாக சேமித்து அணுகவும்.",
"Priority Support": "முன்னுரிமை ஆதரவு",
"Enjoy faster responses and dedicated assistance whenever you need help.": "உங்களுக்கு உதவி தேவைப்படும் போதெல்லாம் விரைவான பதில்கள் மற்றும் அர்ப்பணிப்புள்ள உதவியை அனுபவிக்கவும்.",
"Pro Plan": "Pro திட்டம்",
"Includes All Plus Plan Benefits": "அனைத்து Plus திட்ட நன்மைகளும் உள்ளடங்கும்",
"Early Feature Access": "முந்தைய அம்சம் அணுகல்",
"Be the first to explore new features, updates, and innovations before anyone else.": "மற்றவர்களுக்கு முன்பே புதிய அம்சங்கள், புதுப்பிப்புகள் மற்றும் கண்டுபிடிப்புகளை ஆராயும் முதல் நபராக இருங்கள்.",
"Advanced AI Tools": "மேம்பட்ட AI கருவிகள்",
"Harness powerful AI tools for smarter reading, translation, and content discovery.": "புத்திசாலித்தனமான வாசிப்பு, மொழிபெயர்ப்பு மற்றும் உள்ளடக்க கண்டுபிடிப்புக்காக சக்திவாய்ந்த AI கருவிகளைப் பயன்படுத்துங்கள்.",
"Translate up to 500,000 characters daily with the most accurate translation engine available.": "கிடைக்கக்கூடிய மிகவும் துல்லியமான மொழிபெயர்ப்பு இயந்திரத்துடன் தினசரி 500,000 எழுத்துகள் வரை மொழிபெயர்க்கவும்.",
"Securely store and access your entire reading collection with up to 20 GB of cloud storage.": "20 GB cloud சேமிப்புடன் உங்கள் முழு வாசிப்பு சேகரிப்பையும் பாதுகாப்பாக சேமித்து அணுகவும்.",
"Version {{version}}": "பதிப்பு {{version}}",
"Check Update": "புதுப்பிப்பு சரிபார்க்கவும்",
"Already the latest version": "ஏற்கனவே சமீபத்திய பதிப்பு",
"Checking for updates...": "புதுப்பிப்புகளுக்கு சரிபார்க்கிறது...",
"Error checking for updates": "புதுப்பிப்புகள் சரிபார்க்கும்போது பிழை",
"Drop to Import Books": "புத்தகங்களை இறக்குமதி செய்ய இழுத்து விடவும்",
"Terms of Service": "சேவை விதிமுறைகள்",
"Privacy Policy": "தனியுரிமைக் கொள்கை",
"Enter book title": "புத்தக தலைப்பை உள்ளிடவும்",
"Subtitle": "துணைத்தலைப்பு",
"Enter book subtitle": "புத்தக துணைத்தலைப்பை உள்ளிடவும்",
"Enter author name": "ஆசிரியர் பெயரை உள்ளிடவும்",
"Series": "தொடர்",
"Enter series name": "தொடர் பெயரை உள்ளிடவும்",
"Series Index": "தொடர் குறியீடு",
"Enter series index": "தொடர் குறியீட்டை உள்ளிடவும்",
"Total in Series": "தொடரில் மொத்தம்",
"Enter total books in series": "தொடரில் மொத்த புத்தகங்களை உள்ளிடவும்",
"Publisher": "வெளியீட்டாளர்",
"Enter publisher": "வெளியீட்டாளரை உள்ளிடவும்",
"Publication Date": "வெளியீட்டு தேதி",
"YYYY or YYYY-MM-DD": "YYYY அல்லது YYYY-MM-DD",
"Identifier": "அடையாளங்காட்டி",
"Subjects": "பாடங்கள்",
"Fiction, Science, History": "கற்பனை, அறிவியல், வரலாறு",
"Description": "விளக்கம்",
"Enter book description": "புத்தக விளக்கத்தை உள்ளிடவும்",
"Change cover image": "அட்டை படத்தை மாற்றவும்",
"Replace": "மாற்றவும்",
"Unlock cover": "அட்டையை திறக்கவும்",
"Lock cover": "அட்டையை பூட்டவும்",
"Auto-Retrieve Metadata": "Metadata ஐ தானாக பெறவும்",
"Auto-Retrieve": "தானாக பெறவும்",
"Unlock all fields": "அனைத்து புலங்களையும் திறக்கவும்",
"Unlock All": "அனைத்தையும் திறக்கவும்",
"Lock all fields": "அனைத்து புலங்களையும் பூட்டவும்",
"Lock All": "அனைத்தையும் பூட்டவும்",
"Reset": "மீட்டமைக்கவும்",
"Are you sure to delete the selected book?": "தேர்ந்தெடுக்கப்பட்ட புத்தகத்தை நீக்க உறுதியா?",
"Are you sure to delete the cloud backup of the selected book?": "தேர்ந்தெடுக்கப்பட்ட புத்தகத்தின் cloud backup ஐ நீக்க உறுதியா?",
"Are you sure to delete the local copy of the selected book?": "தேர்ந்தெடுக்கப்பட்ட புத்தகத்தின் உள்ளூர் நகலை நீக்க உறுதியா?",
"Edit Metadata": "Metadata ஐ திருத்தவும்",
"Book Details": "புத்தக விவரங்கள்",
"Unknown": "தெரியாதது",
"Remove from Cloud & Device": "Cloud மற்றும் சாதனத்திலிருந்து நீக்கவும்",
"Remove from Cloud Only": "Cloud இலிருந்து மட்டும் நீக்கவும்",
"Remove from Device Only": "சாதனத்திலிருந்து மட்டும் நீக்கவும்",
"Published": "வெளியிடப்பட்டது",
"Updated": "புதுப்பிக்கப்பட்டது",
"Added": "சேர்க்கப்பட்டது",
"File Size": "கோப்பு அளவு",
"No description available": "விளக்கம் கிடைக்கவில்லை",
"Locked": "பூட்டப்பட்டது",
"Select Metadata Source": "Metadata மூலத்தைத் தேர்வுசெய்யவும்",
"Keep manual input": "கைமுறை உள்ளீட்டைத் தக்கவைக்கவும்",
"A new version of Readest is available!": "Readest இன் புதிய பதிப்பு கிடைக்கிறது!",
"Readest {{newVersion}} is available (installed version {{currentVersion}}).": "Readest {{newVersion}} கிடைக்கிறது (நிறுவப்பட்ட பதிப்பு {{currentVersion}}).",
"Download and install now?": "இப்போது பதிவிறக்கி நிறுவ வேண்டுமா?",
"Downloading {{downloaded}} of {{contentLength}}": "{{contentLength}} இல் {{downloaded}} பதிவிறக்கம்",
"Download finished": "பதிவிறக்கம் முடிந்தது",
"DOWNLOAD & INSTALL": "பதிவிறக்கம் மற்றும் நிறுவல்",
"Changelog": "மாற்ற பதிவு",
"Software Update": "மென்பொருள் புதுப்பிப்பு",
"What's New in Readest": "Readest இல் புதியது",
"Select Files": "கோப்புகளைத் தேர்வுசெய்யவும்",
"Select Image": "படத்தைத் தேர்வுசெய்யவும்",
"Select Video": "வீடியோவைத் தேர்வுசெய்யவும்",
"Select Audio": "ஆடியோவைத் தேர்வுசெய்யவும்",
"Select Fonts": "எழுத்துருக்களைத் தேர்வுசெய்யவும்",
"Storage": "சேமிப்பு",
"{{percentage}}% of Cloud Sync Space Used.": "Cloud Sync இடத்தில் {{percentage}}% பயன்படுத்தப்பட்டுள்ளது.",
"Translation Characters": "மொழிபெயர்ப்பு எழுத்துகள்",
"{{percentage}}% of Daily Translation Characters Used.": "தினசரி மொழிபெயர்ப்பு எழுத்துகளில் {{percentage}}% பயன்படுத்தப்பட்டுள்ளது.",
"Daily translation quota reached. Upgrade your plan to continue using AI translations.": "தினசரி மொழிபெயர்ப்பு ஒதுக்கீட்டை அடைந்துவிட்டது. AI மொழிபெயர்ப்புகளைத் தொடர்ந்து பயன்படுத்த உங்கள் திட்டத்தை மேம்படுத்தவும்.",
"LXGW WenKai GB Screen": "LXGW WenKai GB Screen",
"LXGW WenKai TC": "LXGW WenKai TC",
"GuanKiapTsingKhai-T": "GuanKiapTsingKhai-T",
"Source Han Serif CN VF": "Source Han Serif CN VF",
"Huiwen-mincho": "Huiwen-mincho",
"KingHwa_OldSong": "KingHwa_OldSong",
"Google Books": "Google Books",
"Open Library": "Open Library",
"Azure Translator": "Azure Translator",
"DeepL": "DeepL",
"Google Translate": "Google Translate",
"Yandex Translate": "Yandex Translate",
"Gray": "சாம்பல்",
"Sepia": "செபியா",
"Grass": "புல்",
"Cherry": "செர்ரி",
"Sky": "வானம்",
"Solarized": "சூரியமயம்",
"Gruvbox": "Gruvbox",
"Nord": "Nord",
"Contrast": "மாறுபாடு",
"Sunset": "சூரிய அஸ்தமனம்",
"Reveal in Finder": "Finder இல் காட்டவும்",
"Reveal in File Explorer": "File Explorer இல் காட்டவும்",
"Reveal in Folder": "கோப்புறையில் காட்டவும்",
"Previous Paragraph": "முந்தைய பத்தி",
"Previous Sentence": "முந்தைய வாக்கியம்",
"Pause": "இடைநிறுத்தம்",
"Play": "இயக்கு",
"Next Sentence": "அடுத்த வாக்கியம்",
"Next Paragraph": "அடுத்த பத்தி",
"Separate Cover Page": "தனித்த அட்டை பக்கம்",
"Resize Notebook": "குறிப்பேட்டை மீட்டமைக்கவும்",
"Resize Sidebar": "பக்கப்பட்டியை மீட்டமைக்கவும்",
"Get Help from the Readest Community": "Readest சமூகத்திலிருந்து உதவி பெறவும்",
"Remove cover image": "அட்டை படத்தை நீக்கவும்",
"Bookshelf": "புத்தக அலமாரி",
"View Menu": "மெனுவை பார்க்கவும்",
"Settings Menu": "அமைப்புகள் மெனு",
"View account details and quota": "கணக்கு விவரங்கள் மற்றும் ஒதுக்கீட்டை பார்க்கவும்",
"Library Header": "நூலக தலைப்பு",
"Book Content": "புத்தக உள்ளடக்கம்",
"Footer Bar": "அடிக்குறிப்பு பட்டை",
"Header Bar": "தலைப்பு பட்டை",
"View Options": "காணும் விருப்பங்கள்",
"Book Menu": "புத்தக மெனு",
"Search Options": "தேடல் விருப்பங்கள்",
"Close": "மூடு",
"Delete Book Options": "புத்தகத்தை நீக்கும் விருப்பங்கள்",
"ON": "செயல்படுத்தவும்",
"OFF": "நிறுத்தவும்",
"Reading Progress": "வாசிப்பு முன்னேற்றம்",
"Page Margin": "பக்கம் மாறின",
"Remove Bookmark": "புக்மார்க் நீக்கவும்",
"Add Bookmark": "புக்மார்க் சேர்க்கவும்",
"Books Content": "புத்தகங்கள் உள்ளடக்கம்",
"Jump to Location": "இடத்திற்கு குதிக்கவும்",
"Unpin Notebook": "நோட்புக் அசைவு",
"Pin Notebook": "நோட்புக் பின்பற்றவும்",
"Hide Search Bar": "சேவல் பட்டையை மறைக்கவும்",
"Show Search Bar": "சேவல் பட்டையை காட்டவும்",
"On {{current}} of {{total}} page": "பக்கம் {{current}}/{{total}} இல்",
"Section Title": "அத்தியாயம் தலைப்பு",
"Decrease": "குறைப்பு",
"Increase": "அதிகரிப்பு",
"Settings Panels": "அமைப்புகள் பானல்கள்",
"Settings": "அமைப்புகள்",
"Unpin Sidebar": "பக்கப்பட்டியை அசைவு",
"Pin Sidebar": "பக்கப்பட்டியை பின்பற்றவும்",
"Toggle Sidebar": "பக்கப்பட்டியை மாற்றவும்",
"Toggle Translation": "மொழிபெயர்ப்பை மாற்றவும்",
"Translation Disabled": "மொழிபெயர்ப்பு முடக்கப்பட்டுள்ளது",
"Minimize": "சிறிது செய்யவும்",
"Maximize or Restore": "அதிகரிக்கவும் அல்லது மீட்டமைக்கவும்",
"Exit Parallel Read": "இணை வாசிப்பை வெளியேறு",
"Enter Parallel Read": "இணை வாசிப்பில் நுழையவும்",
"Zoom Level": "ஜூம் நிலை",
"Zoom Out": "ஜூம் குறைக்கவும்",
"Reset Zoom": "ஜூம் மீட்டமைக்கவும்",
"Zoom In": "ஜூம் அதிகரிக்கவும்",
"Zoom Mode": "ஜூம் முறை",
"Single Page": "ஒரு பக்கம்",
"Auto Spread": "தானாக பரவல்",
"Fit Page": "பக்கத்திற்கு பொருந்தும்",
"Fit Width": "அகலத்திற்கு பொருந்தும்",
"Failed to select directory": "கோப்புறையைத் தேர்வுசெய்ய முடியவில்லை",
"The new data directory must be different from the current one.": "புதிய தரவுக் கோப்புறை தற்போதையதைப் போலவே இருக்கக்கூடாது.",
"Migration failed: {{error}}": "மொத்தமாக்கல் தோல்வியுற்றது: {{error}}",
"Change Data Location": "தரவுப் இடத்தை மாற்றவும்",
"Current Data Location": "தற்போதைய தரவுப் இடம்",
"Total size: {{size}}": "மொத்த அளவு: {{size}}",
"Calculating file info...": "கோப்பு தகவலை கணக்கிடுகிறது...",
"New Data Location": "புதிய தரவுப் இடம்",
"Choose Different Folder": "வேறுபட்ட கோப்புறையைத் தேர்ந்தெடுக்கவும்",
"Choose New Folder": "புதிய கோப்புறையைத் தேர்ந்தெடுக்கவும்",
"Migrating data...": "தரவை மாறுகிறது...",
"Copying: {{file}}": "பகுப்பாய்வு: {{file}}",
"{{current}} of {{total}} files": "{{current}}/{{total}} கோப்புகள்",
"Migration completed successfully!": "மொத்தமாக்கல் வெற்றிகரமாக முடிந்தது!",
"Your data has been moved to the new location. Please restart the application to complete the process.": "உங்கள் தரவுகள் புதிய இடத்திற்கு மாறியுள்ளன. செயலியை மீண்டும் தொடங்கவும்.",
"Migration failed": "மொத்தமாக்கல் தோல்வியுற்றது",
"Important Notice": "முக்கிய அறிவிப்பு",
"This will move all your app data to the new location. Make sure the destination has enough free space.": "இது உங்கள் செயலியின் அனைத்து தரவுகளையும் புதிய இடத்திற்கு நகர்த்தும். இலக்கு இடத்தில் போதுமான இலவச இடம் உள்ளதா என்பதை உறுதிப்படுத்தவும்.",
"Restart App": "செயலியை மீண்டும் தொடங்கவும்",
"Start Migration": "மொத்தமாக்கலை தொடங்கவும்",
"Advanced Settings": "மேம்பட்ட அமைப்புகள்",
"File count: {{size}}": "கோப்பு எண்ணிக்கை: {{size}}",
"Background Read Aloud": "பின்னணி உரை வாசிப்பு",
"Ready to read aloud": "வாசிக்க தயாராக உள்ளது",
"Read Aloud": "உரை வாசிப்பு",
"Screen Brightness": "திரை பிரகாசம்",
"Background Image": "பின்னணி படம்",
"Import Image": "புகைப்படம் இறக்குமதி",
"Opacity": "பார்வை",
"Size": "அளவு",
"Cover": "மூடு",
"Contain": "அடங்கும்"
}
@@ -63,7 +63,6 @@
"Search Books...": "ค้นหาหนังสือ...",
"Clear Search": "ล้างการค้นหา",
"Import Books": "นำเข้าหนังสือ",
"Select Multiple Books": "เลือกหลายเล่ม",
"Select Books": "เลือกหนังสือ",
"Deselect": "ยกเลิกเลือก",
"Select All": "เลือกทั้งหมด",
@@ -274,9 +273,9 @@
"Match Whole Words": "ตรงทั้งคำ",
"Match Diacritics": "ตรงตามเครื่องหมายวรรณยุกต์",
"TOC": "สารบัญ",
"Table of Contents": "สารบัญ",
"Sidebar": "แถบข้าง",
"Disable Translation": "ปิดการแปล",
"Translation Not Available": "ไม่มีการแปล",
"TTS not supported for PDF": "ไม่รองรับ TTS สำหรับ PDF",
"No Timeout": "ไม่จำกัดเวลา",
"{{value}} minute": "{{value}} นาที",
@@ -439,7 +438,6 @@
"Google Books": "Google Books",
"Open Library": "Open Library",
"Fiction, Science, History": "นิยาย, วิทยาศาสตร์, ประวัติศาสตร์",
"Select Cover Image": "เลือกภาพปก",
"Open Book in New Window": "เปิดหนังสือในหน้าต่างใหม่",
"Voices for {{lang}}": "เสียงสำหรับ {{lang}}",
"Yandex Translate": "Yandex Translate",
@@ -475,12 +473,10 @@
"Always use latest": "ใช้เวอร์ชันล่าสุดเสมอ",
"Send changes only": "ส่งการเปลี่ยนแปลงเท่านั้น",
"Receive changes only": "รับการเปลี่ยนแปลงเท่านั้น",
"Disabled": "ปิดใช้งาน",
"Checksum Method": "วิธีการตรวจสอบความถูกต้อง",
"File Content (recommended)": "เนื้อหาไฟล์ (แนะนำ)",
"File Name": "ชื่อไฟล์",
"Device Name": "ชื่ออุปกรณ์",
"Sync Tolerance": "ความทนทานต่อการซิงค์",
"Connect to your KOReader Sync server.": "เชื่อมต่อกับเซิร์ฟเวอร์ KOReader Sync ของคุณ",
"Server URL": "URL ของเซิร์ฟเวอร์",
"Username": "ชื่อผู้ใช้",
@@ -499,7 +495,6 @@
"Approximately {{percentage}}%": "ประมาณ {{percentage}}%",
"Failed to connect": "ไม่สามารถเชื่อมต่อได้",
"Sync Server Connected": "เซิร์ฟเวอร์ซิงค์เชื่อมต่อแล้ว",
"Precision: {{precision}} digits after the decimal": "ความแม่นยำ: {{precision}} หลักหลังจุดทศนิยม",
"Sync as {{userDisplayName}}": "ซิงค์เป็น {{userDisplayName}}",
"Custom Fonts": "ฟอนต์กำหนดเอง",
"Cancel Delete": "ยกเลิกการลบ",
@@ -513,5 +508,99 @@
"Select Video": "เลือกวิดีโอ",
"Select Audio": "เลือกเสียง",
"Select Fonts": "เลือกฟอนต์",
"Supported font formats: .ttf, .odf, .woff, .woff2": "รูปแบบฟอนต์ที่รองรับ: .ttf, .odf, .woff, .woff2"
"Supported font formats: .ttf, .otf, .woff, .woff2": "รูปแบบฟอนต์ที่รองรับ: .ttf, .otf, .woff, .woff2",
"Push Progress": "ส่งความคืบหน้า",
"Pull Progress": "ดึงความคืบหน้า",
"Previous Paragraph": "ย่อหน้าก่อนหน้า",
"Previous Sentence": "ประโยคก่อนหน้า",
"Pause": "หยุดชั่วคราว",
"Play": "เล่น",
"Next Sentence": "ประโยคถัดไป",
"Next Paragraph": "ย่อหน้าถัดไป",
"Separate Cover Page": "หน้าปกแยกต่างหาก",
"Resize Notebook": "ปรับขนาดสมุดบันทึก",
"Resize Sidebar": "ปรับขนาดแถบข้าง",
"Get Help from the Readest Community": "รับความช่วยเหลือจากชุมชน Readest",
"Remove cover image": "ลบรูปปก",
"Bookshelf": "ชั้นวางหนังสือ",
"View Menu": "ดูเมนู",
"Settings Menu": "เมนูการตั้งค่า",
"View account details and quota": "ดูรายละเอียดบัญชีและโควต้า",
"Library Header": "ส่วนหัวของห้องสมุด",
"Book Content": "เนื้อหาหนังสือ",
"Footer Bar": "แถบด้านล่าง",
"Header Bar": "แถบส่วนหัว",
"View Options": "ตัวเลือกการดู",
"Book Menu": "เมนูหนังสือ",
"Search Options": "ตัวเลือกการค้นหา",
"Close": "ปิด",
"Delete Book Options": "ตัวเลือกการลบหนังสือ",
"ON": "เปิด",
"OFF": "ปิด",
"Reading Progress": "ความคืบหน้าในการอ่าน",
"Page Margin": "ขอบหน้า",
"Remove Bookmark": "ลบบุ๊กมาร์ก",
"Add Bookmark": "เพิ่มบุ๊กมาร์ก",
"Books Content": "เนื้อหาหนังสือ",
"Jump to Location": "กระโดดไปยังตำแหน่ง",
"Unpin Notebook": "ยกเลิกการตรึงสมุดบันทึก",
"Pin Notebook": "ตรึงสมุดบันทึก",
"Hide Search Bar": "ซ่อนแถบค้นหา",
"Show Search Bar": "แสดงแถบค้นหา",
"On {{current}} of {{total}} page": "อยู่ที่หน้า {{current}} จาก {{total}}",
"Section Title": "หัวข้อส่วน",
"Decrease": "ลดลง",
"Increase": "เพิ่มขึ้น",
"Settings Panels": "แผงการตั้งค่า",
"Settings": "การตั้งค่า",
"Unpin Sidebar": "ยกเลิกการตรึงแถบด้านข้าง",
"Pin Sidebar": "ตรึงแถบด้านข้าง",
"Toggle Sidebar": "เปลี่ยนแถบด้านข้าง",
"Toggle Translation": "เปลี่ยนการแปล",
"Translation Disabled": "การแปลถูกปิดใช้งาน",
"Minimize": "ย่อ",
"Maximize or Restore": "ขยายหรือคืนค่า",
"Exit Parallel Read": "ออกจากการอ่านคู่ขนาน",
"Enter Parallel Read": "เริ่มการอ่านคู่ขนาน",
"Zoom Level": "ระดับการซูม",
"Zoom Out": "ลดระดับการซูม",
"Reset Zoom": "รีเซ็ตระดับการซูม",
"Zoom In": "เพิ่มระดับการซูม",
"Zoom Mode": "โหมดการซูม",
"Single Page": "หน้าเดียว",
"Auto Spread": "การกระจายอัตโนมัติ",
"Fit Page": "พอดีกับหน้า",
"Fit Width": "พอดีกับความกว้าง",
"Failed to select directory": "ไม่สามารถเลือกไดเรกทอรีได้",
"The new data directory must be different from the current one.": "ไดเรกทอรีข้อมูลใหม่จะต้องแตกต่างจากไดเรกทอรีปัจจุบัน",
"Migration failed: {{error}}": "การย้ายข้อมูลล้มเหลว: {{error}}",
"Change Data Location": "เปลี่ยนตำแหน่งข้อมูล",
"Current Data Location": "ตำแหน่งข้อมูลปัจจุบัน",
"Total size: {{size}}": "ขนาดรวม: {{size}}",
"Calculating file info...": "กำลังคำนวณข้อมูลไฟล์...",
"New Data Location": "ตำแหน่งข้อมูลใหม่",
"Choose Different Folder": "เลือกโฟลเดอร์ที่แตกต่าง",
"Choose New Folder": "เลือกโฟลเดอร์ใหม่",
"Migrating data...": "กำลังย้ายข้อมูล...",
"Copying: {{file}}": "กำลังคัดลอก: {{file}}",
"{{current}} of {{total}} files": "{{current}} จาก {{total}} ไฟล์",
"Migration completed successfully!": "การย้ายข้อมูลเสร็จสมบูรณ์!",
"Your data has been moved to the new location. Please restart the application to complete the process.": "ข้อมูลของคุณได้ถูกย้ายไปยังตำแหน่งใหม่แล้ว กรุณารีสตาร์ทแอปพลิเคชันเพื่อทำให้กระบวนการเสร็จสมบูรณ์",
"Migration failed": "การย้ายข้อมูลล้มเหลว",
"Important Notice": "ประกาศสำคัญ",
"This will move all your app data to the new location. Make sure the destination has enough free space.": "สิ่งนี้จะย้ายข้อมูลแอปทั้งหมดของคุณไปยังตำแหน่งใหม่ ตรวจสอบให้แน่ใจว่าตำแหน่งปลายทางมีพื้นที่ว่างเพียงพอ",
"Restart App": "รีสตาร์ทแอป",
"Start Migration": "เริ่มการย้ายข้อมูล",
"Advanced Settings": "การตั้งค่าขั้นสูง",
"File count: {{size}}": "จำนวนไฟล์: {{size}}",
"Background Read Aloud": "อ่านออกเสียงเบื้องหลัง",
"Ready to read aloud": "พร้อมที่จะอ่านออกเสียง",
"Read Aloud": "อ่านออกเสียง",
"Screen Brightness": "ความสว่างหน้าจอ",
"Background Image": "ภาพพื้นหลัง",
"Import Image": "นำเข้าภาพ",
"Opacity": "ความโปร่งใส",
"Size": "ขนาด",
"Cover": "ปก",
"Contain": "บรรจุ"
}
@@ -82,7 +82,6 @@
"Search...": "Ara...",
"Select Book": "Kitap Seç",
"Select Books": "Kitapları seç",
"Select Multiple Books": "Birden fazla kitap seç",
"Sepia": "Sepya",
"Serif Font": "Serif Yazı Tipi",
"Show Book Details": "Kitap Detaylarını Göster",
@@ -118,6 +117,7 @@
"Book Details": "Kitap Detayları",
"From Local File": "Yerel dosyadan",
"TOC": "İçindekiler",
"Table of Contents": "İçindekiler",
"Book uploaded: {{title}}": "Kitap yüklendi: {{title}}",
"Failed to upload book: {{title}}": "Kitap yüklenemedi: {{title}}",
"Book downloaded: {{title}}": "Kitap indirildi: {{title}}",
@@ -333,7 +333,6 @@
"Left Margin (px)": "Sol Kenar Boşluğu (px)",
"Column Gap (%)": "Sütun Aralığı (%)",
"Always Show Status Bar": "Durum Çubuğunu Her Zaman Göster",
"Translation Not Available": "Çeviri Mevcut Değil",
"Custom Content CSS": "Özel İçerik CSS'si",
"Enter CSS for book content styling...": "Kitap içeriği stili için CSS girin...",
"Custom Reader UI CSS": "Özel Okuyucu Arayüzü CSS'si",
@@ -443,7 +442,6 @@
"Google Books": "Google Books",
"Open Library": "Open Library",
"Fiction, Science, History": "Kurgu, Bilim, Tarih",
"Select Cover Image": "Kapak Resmi Seç",
"Open Book in New Window": "Kitabı Yeni Pencerede Aç",
"Voices for {{lang}}": "{{lang}} için Sesler",
"Yandex Translate": "Yandex Çeviri",
@@ -479,12 +477,10 @@
"Always use latest": "Her Zaman En Sonunu Kullan",
"Send changes only": "Sadece Değişiklikleri Gönder",
"Receive changes only": "Sadece Değişiklikleri Al",
"Disabled": "Devre Dışı",
"Checksum Method": "Kontrol Toplamı Yöntemi",
"File Content (recommended)": "Dosya İçeriği (önerilen)",
"File Name": "Dosya Adı",
"Device Name": "Cihaz Adı",
"Sync Tolerance": "Senkronizasyon Toleransı",
"Connect to your KOReader Sync server.": "KOReader Senkronizasyon sunucunuza bağlanın.",
"Server URL": "Sunucu URL'si",
"Username": "Kullanıcı Adı",
@@ -503,7 +499,6 @@
"Approximately {{percentage}}%": "Yaklaşık {{percentage}}%",
"Failed to connect": "Bağlanma başarısız oldu",
"Sync Server Connected": "Senkronizasyon Sunucusu Bağlandı",
"Precision: {{precision}} digits after the decimal": "Hassasiyet: {{precision}} ondalık basamaktan sonra",
"Sync as {{userDisplayName}}": "Senkronize et {{userDisplayName}} olarak",
"Custom Fonts": "Özel Yazı Tipleri",
"Cancel Delete": "Silmeyi İptal Et",
@@ -517,5 +512,99 @@
"Select Video": "Video Seç",
"Select Audio": "Ses Seç",
"Select Fonts": "Yazı Tiplerini Seç",
"Supported font formats: .ttf, .odf, .woff, .woff2": "Desteklenen yazı tipi formatları: .ttf, .odf, .woff, .woff2"
"Supported font formats: .ttf, .otf, .woff, .woff2": "Desteklenen yazı tipi formatları: .ttf, .otf, .woff, .woff2",
"Push Progress": "İlerlemeyi Gönder",
"Pull Progress": "İlerlemeyi Al",
"Previous Paragraph": "Önceki Paragraf",
"Previous Sentence": "Önceki Cümle",
"Pause": "Duraklat",
"Play": "Oynat",
"Next Sentence": "Sonraki Cümle",
"Next Paragraph": "Sonraki Paragraf",
"Separate Cover Page": "Ayrı Kapak Sayfası",
"Resize Notebook": "Defteri Yeniden Boyutlandır",
"Resize Sidebar": "Kenar Çubuğunu Yeniden Boyutlandır",
"Get Help from the Readest Community": "Readest Topluluğundan Yardım Alın",
"Remove cover image": "Kapak resmini kaldır",
"Bookshelf": "Kitaplık",
"View Menu": "Menüyü Görüntüle",
"Settings Menu": "Ayarlar Menüsü",
"View account details and quota": "Hesap detaylarını ve kotayı görüntüle",
"Library Header": "Kütüphane Başlığı",
"Book Content": "Kitap İçeriği",
"Footer Bar": "Alt Çubuk",
"Header Bar": "Üst Çubuk",
"View Options": "Görünüm Seçenekleri",
"Book Menu": "Kitap Menüsü",
"Search Options": "Arama Seçenekleri",
"Close": "Kapat",
"Delete Book Options": "Kitap Silme Seçenekleri",
"ON": "AÇIK",
"OFF": "KAPALI",
"Reading Progress": "Okuma İlerlemesi",
"Page Margin": "Sayfa Kenar Boşluğu",
"Remove Bookmark": "Yer İşareti Kaldır",
"Add Bookmark": "Yer İşareti Ekle",
"Books Content": "Kitap İçeriği",
"Jump to Location": "Konuma Atlama",
"Unpin Notebook": "Defteri Sabitlemeyi Kaldır",
"Pin Notebook": "Defteri Sabitle",
"Hide Search Bar": "Arama Çubuğunu Gizle",
"Show Search Bar": "Arama Çubuğunu Göster",
"On {{current}} of {{total}} page": "{{current}} / {{total}} sayfada",
"Section Title": "Bölüm Başlığı",
"Decrease": "Azalt",
"Increase": "Artır",
"Settings Panels": "Ayarlar Panelleri",
"Settings": "Ayarlar",
"Unpin Sidebar": "Kenar Çubuğunu Sabitlemeyi Kaldır",
"Pin Sidebar": "Kenar Çubuğunu Sabitle",
"Toggle Sidebar": "Kenar Çubuğunu Değiştir",
"Toggle Translation": "Çeviriyi Değiştir",
"Translation Disabled": "Çeviri Devre Dışı",
"Minimize": "Küçült",
"Maximize or Restore": "Büyüt veya Geri Yükle",
"Exit Parallel Read": "Paralel Okumadan Çık",
"Enter Parallel Read": "Paralel Okumaya Gir",
"Zoom Level": "Yakınlaştırma Düzeyi",
"Zoom Out": "Yakınlaştırmayı Kaldır",
"Reset Zoom": "Yakınlaştırmayı Sıfırla",
"Zoom In": "Yakınlaştırmayı Artır",
"Zoom Mode": "Yakınlaştırma Modu",
"Single Page": "Tek Sayfa",
"Auto Spread": "Otomatik Yayılma",
"Fit Page": "Sayfaya Sığdır",
"Fit Width": "Genişliğe Sığdır",
"Failed to select directory": "Dizini seçme başarısız oldu",
"The new data directory must be different from the current one.": "Yeni veri dizini mevcut olanla farklı olmalıdır.",
"Migration failed: {{error}}": "Taşıma işlemi başarısız oldu: {{error}}",
"Change Data Location": "Veri Konumunu Değiştir",
"Current Data Location": "Mevcut Veri Konumu",
"Total size: {{size}}": "Toplam boyut: {{size}}",
"Calculating file info...": "Dosya bilgileri hesaplanıyor...",
"New Data Location": "Yeni Veri Konumu",
"Choose Different Folder": "Farklı Klasör Seç",
"Choose New Folder": "Yeni Klasör Seç",
"Migrating data...": "Veri taşınıyor...",
"Copying: {{file}}": "Kopyalanıyor: {{file}}",
"{{current}} of {{total}} files": "{{current}} / {{total}} dosya",
"Migration completed successfully!": "Taşıma işlemi başarıyla tamamlandı!",
"Your data has been moved to the new location. Please restart the application to complete the process.": "Verileriniz yeni konuma taşındı. Lütfen işlemi tamamlamak için uygulamayı yeniden başlatın.",
"Migration failed": "Taşıma işlemi başarısız oldu",
"Important Notice": "Önemli Duyuru",
"This will move all your app data to the new location. Make sure the destination has enough free space.": "Bu, tüm uygulama verilerinizi yeni konuma taşıyacaktır. Hedefin yeterli boş alana sahip olduğundan emin olun.",
"Restart App": "Uygulamayı Yeniden Başlat",
"Start Migration": "Taşımayı Başlat",
"Advanced Settings": "Gelişmiş Ayarlar",
"File count: {{size}}": "Dosya sayısı: {{size}}",
"Background Read Aloud": "Arka Planda Sesli Okuma",
"Ready to read aloud": "Sesli okumaya hazır",
"Read Aloud": "Sesli Oku",
"Screen Brightness": "Ekran Parlaklığı",
"Background Image": "Arka Plan Görüntüsü",
"Import Image": "Görüntü İçe Aktar",
"Opacity": "Opaklık",
"Size": "Boyut",
"Cover": "Kapak",
"Contain": "İçerir"
}
@@ -32,11 +32,11 @@
"Fast": "Швидко",
"Font": "Шрифт",
"Font & Layout": "Шрифт та макет",
"Font Face": "Накреслення шрифту",
"Font Face": "Налаштування шрифту",
"Font Family": "Сімейство шрифтів",
"Font Size": "Розмір шрифту",
"Full Justification": "Повне вирівнювання",
"Global Settings": "Глобальні налаштування",
"Global Settings": "Ґлобальні налаштування",
"Go Back": "Назад",
"Go Forward": "Вперед",
"Grass": "Трав'яний",
@@ -82,7 +82,6 @@
"Search...": "Пошук...",
"Select Book": "Вибрати книгу",
"Select Books": "Вибрати книги",
"Select Multiple Books": "Вибрати кілька книг",
"Sepia": "Сепія",
"Serif Font": "Шрифт із засічками",
"Show Book Details": "Показати деталі книги",
@@ -114,10 +113,11 @@
"Apply to This Book": "Застосувати лише до цієї книги",
"Unable to fetch the translation. Try again later.": "Не вдалося отримати переклад. Спробуйте пізніше.",
"Check Update": "Перевірити оновлення",
"Already the latest version": "У вас вже встановлена остання версія",
"Already the latest version": "У вас вже встановлена найновіша версія",
"Book Details": "Деталі книги",
"From Local File": "З локального файлу",
"TOC": "Зміст",
"Table of Contents": "Зміст",
"Book uploaded: {{title}}": "Книгу завантажено: {{title}}",
"Failed to upload book: {{title}}": "Не вдалося завантажити книгу: {{title}}",
"Book downloaded: {{title}}": "Книгу завантажено: {{title}}",
@@ -237,7 +237,7 @@
"Header & Footer": "Заголовок і нижній колонтитул",
"Apply also in Scrolled Mode": "Застосувати також у прокрученому режимі",
"A new version of Readest is available!": "Доступна нова версія Readest!",
"Readest {{newVersion}} is available (installed version {{currentVersion}}).": "Readest {{newVersion}} доступна (встановлено {{currentVersion}}).",
"Readest {{newVersion}} is available (installed version {{currentVersion}}).": "Нова версія Readest {{newVersion}} доступна. (Поточна {{currentVersion}}).",
"Download and install now?": "Завантажити та встановити зараз?",
"Downloading {{downloaded}} of {{contentLength}}": "Завантаженно {{downloaded}} з {{contentLength}}",
"Download finished": "Завантаження завершено",
@@ -339,7 +339,6 @@
"Left Margin (px)": "Лівий відступ (px)",
"Column Gap (%)": "Проміжок між стовпцями (%)",
"Always Show Status Bar": "Завжди показувати панель стану",
"Translation Not Available": "Переклад недоступний",
"Custom Content CSS": "Користуацький CSS вмісту",
"Enter CSS for book content styling...": "Введіть CSS для стилізації вмісту книги...",
"Custom Reader UI CSS": "CSS інтерфейсу",
@@ -451,7 +450,6 @@
"Google Books": "Google Книги",
"Open Library": "Open Library",
"Fiction, Science, History": "Художня література, Наукова фантастика, Історія",
"Select Cover Image": "Оберіть зображення обкладинки",
"Open Book in New Window": "Відкрити книгу в новому вікні",
"Voices for {{lang}}": "Голоси для {{lang}}",
"Yandex Translate": "Yandex Перекладач (росія)",
@@ -487,13 +485,11 @@
"Always use latest": "Завжди використовувати найновішу",
"Send changes only": "Відправити тільки зміни",
"Receive changes only": "Отримати тільки зміни",
"Disabled": "Вимкнено",
"Checksum Method": "Метод контролю суми",
"File Content (recommended)": "Вміст файлу (рекомендується)",
"File Name": "Ім'я файлу",
"Device Name": "Ім'я пристрою",
"Sync Tolerance": "Допустима похибка синхронізації",
"Connect to your KOReader Sync server.": "Підключіться до свого сервера синхронізації KOReader.",
"Connect to your KOReader Sync server.": "Під'єдайте свій сервер синхронізації KOReader.",
"Server URL": "URL сервера",
"Username": "Ім'я користувача",
"Your Username": "Ваше ім'я користувача",
@@ -503,27 +499,120 @@
"Sync Conflict": "Конфлікт синхронізації",
"Sync reading progress from \"{{deviceName}}\"?": "Синхронізувати прогрес читання із \"{{deviceName}}\"?",
"another device": "інший пристрій",
"Local Progress": "Локальний прогрес",
"Remote Progress": "Прогрес у хмарі",
"Local Progress": "Локальний проґрес",
"Remote Progress": "Проґрес у хмарі",
"Page {{page}} of {{total}} ({{percentage}}%)": "Сторінка {{page}} з {{total}} ({{percentage}}%)",
"Current position": "Поточна позиція",
"Approximately page {{page}} of {{total}} ({{percentage}}%)": "Приблизно сторінка {{page}} із {{total}} ({{percentage}}%)",
"Approximately {{percentage}}%": "Приблизно {{percentage}}%",
"Failed to connect": "Не вдалося під'єднатися",
"Sync Server Connected": "Сервер синхронізації під'єднано",
"Precision: {{precision}} digits after the decimal": "Точність: {{precision}} знаків після коми",
"Sync as {{userDisplayName}}": "Синхронізувати як {{userDisplayName}}",
"Custom Fonts": "Користувацькі Шрифти",
"Cancel Delete": "Скасувати Видалення",
"Import Font": "Імпортувати Шрифт",
"Delete Font": "Видалити Шрифт",
"Custom Fonts": "Користувацькі шрифти",
"Cancel Delete": "Скасувати видалення",
"Import Font": "Імпортувати шрифт",
"Delete Font": "Видалити шрифт",
"Tips": "Поради",
"Custom fonts can be selected from the Font Face menu": "Користувацькі шрифти можна вибрати з меню Шрифт",
"Manage Custom Fonts": "Керування Користувацькими Шрифтами",
"Select Files": "Вибрати Файли",
"Select Image": "Вибрати Зображення",
"Select Video": "Вибрати Відео",
"Select Audio": "Вибрати Аудіо",
"Select Fonts": "Вибрати Шрифти",
"Supported font formats: .ttf, .odf, .woff, .woff2": "Підтримувані формати шрифтів: .ttf, .odf, .woff, .woff2"
"Custom fonts can be selected from the Font Face menu": "Користувацькі шрифти можна вибрати з меню \"Налаштування шрифту\"",
"Manage Custom Fonts": "Керування користувацькими шрифтами",
"Select Files": "Вибрати файли",
"Select Image": "Вибрати зображення",
"Select Video": "Вибрати відео",
"Select Audio": "Вибрати аудіо",
"Select Fonts": "Вибрати шифти",
"Supported font formats: .ttf, .otf, .woff, .woff2": "Підтримувані формати шрифтів: .ttf, .otf, .woff, .woff2",
"Push Progress": "Надіслати проґрес",
"Pull Progress": "Отримати проґрес",
"Previous Paragraph": "Попередній абзац",
"Previous Sentence": "Попереднє речення",
"Pause": "Пауза",
"Play": "Відтворити",
"Next Sentence": "Наступне речення",
"Next Paragraph": "Наступний абзац",
"Separate Cover Page": "Окрема сторінка обкладинки",
"Resize Notebook": "Змінити розмір нотаток",
"Resize Sidebar": "Змінити розмір бічної панелі",
"Get Help from the Readest Community": "Отримати допомогу від спільноти Readest",
"Remove cover image": "Видалити зображення обкладинки",
"Bookshelf": "Книжкова полиця",
"View Menu": "Переглянути меню",
"Settings Menu": "Меню налаштувань",
"View account details and quota": "Переглянути деталі акаунта та квоту",
"Library Header": "Заголовок бібліотеки",
"Book Content": "Зміст книги",
"Footer Bar": "Нижня панель",
"Header Bar": "Верхня панель",
"View Options": "Параметри перегляду",
"Book Menu": "Меню книги",
"Search Options": "Параметри пошуку",
"Close": "Закрити",
"Delete Book Options": "Параметри видалення книги",
"ON": "УВІМКНЕННО",
"OFF": "ВИМКНЕНО",
"Reading Progress": "Проґрес читання",
"Page Margin": "Поля сторінки",
"Remove Bookmark": "Видалити закладку",
"Add Bookmark": "Додати закладку",
"Books Content": "Зміст книг",
"Jump to Location": "Перейти до місця",
"Unpin Notebook": "Відкріпити блокнот",
"Pin Notebook": "Закріпити блокнот",
"Hide Search Bar": "Сховати панель пошуку",
"Show Search Bar": "Показати панель пошуку",
"On {{current}} of {{total}} page": "На {{current}} з {{total}} сторінці",
"Section Title": "Назва розділу",
"Decrease": "Зменшити",
"Increase": "Збільшити",
"Settings Panels": "Панелі налаштувань",
"Settings": "Налаштування",
"Unpin Sidebar": "Відкріпити бічну панель",
"Pin Sidebar": "Закріпити бічну панель",
"Toggle Sidebar": "Перемкнути бічну панель",
"Toggle Translation": "Перемкнути переклад",
"Translation Disabled": "Переклад вимкнено",
"Minimize": "Згорнути",
"Maximize or Restore": "Збільшити або відновити",
"Exit Parallel Read": "Вийти з паралельного читання",
"Enter Parallel Read": "Войти в параллельное чтение",
"Zoom Level": "Рівень масштабування",
"Zoom Out": "Зменшити масштаб",
"Reset Zoom": "Скинути масштаб",
"Zoom In": "Збільшити масштаб",
"Zoom Mode": "Режим масштабування",
"Single Page": "Одна сторінка",
"Auto Spread": "Автоматичне розповсюдження",
"Fit Page": "Підганяти під сторінку",
"Fit Width": "Підганяти під ширину",
"Failed to select directory": "Не вдалося вибрати каталог",
"The new data directory must be different from the current one.": "Новий каталог даних повинен відрізнятися від поточного.",
"Migration failed: {{error}}": "Переміщення не вдалося: {{error}}",
"Change Data Location": "Змінити розташування даних",
"Current Data Location": "Поточне розташування даних",
"Total size: {{size}}": "Загальний розмір: {{size}}",
"Calculating file info...": "Обчислення інформації про файл...",
"New Data Location": "Нове розташування даних",
"Choose Different Folder": "Вибрати іншу папку",
"Choose New Folder": "Вибрати нову папку",
"Migrating data...": "Переміщення даних...",
"Copying: {{file}}": "Копіювання: {{file}}",
"{{current}} of {{total}} files": "{{current}} з {{total}} файлів",
"Migration completed successfully!": "Переміщення завершено успішно!",
"Your data has been moved to the new location. Please restart the application to complete the process.": "Ваші дані були переміщені до нового розташування. Будь ласка, перезапустіть програму, щоб завершити процес.",
"Migration failed": "Переміщення не вдалося",
"Important Notice": "Важливе повідомлення",
"This will move all your app data to the new location. Make sure the destination has enough free space.": "Це перемістить всі ваші дані програми до нового розташування. Переконайтеся, що в призначенні достатньо вільного місця.",
"Restart App": "Перезапустити програму",
"Start Migration": "Почати переміщення",
"Advanced Settings": "Розширені налаштування",
"File count: {{size}}": "Кількість файлів: {{size}}",
"Background Read Aloud": "Озвучування у фоновому режимі",
"Ready to read aloud": "Готовий до читання вголос",
"Read Aloud": "Читати вголос",
"Screen Brightness": "Яскравість екрану",
"Background Image": "Фонове зображення",
"Import Image": "Імпортувати зображення",
"Opacity": "Непрозорість",
"Size": "Розмір",
"Cover": "Обкладинка",
"Contain": "Вміщати"
}
@@ -82,7 +82,6 @@
"Search...": "Tìm kiếm...",
"Select Book": "Chọn sách",
"Select Books": "Chọn sách",
"Select Multiple Books": "Chọn nhiều sách",
"Sepia": "Nâu cổ",
"Serif Font": "Phông chữ có chân",
"Show Book Details": "Hiển thị chi tiết sách",
@@ -118,6 +117,7 @@
"Book Details": "Chi tiết sách",
"From Local File": "Từ tệp địa phương",
"TOC": "Mục lục",
"Table of Contents": "Mục lục",
"Book uploaded: {{title}}": "Sách đã tải lên: {{title}}",
"Failed to upload book: {{title}}": "Không thể tải lên sách: {{title}}",
"Book downloaded: {{title}}": "Sách đã tải về: {{title}}",
@@ -330,7 +330,6 @@
"Left Margin (px)": "Lề trái (px)",
"Column Gap (%)": "Khoảng cách cột (%)",
"Always Show Status Bar": "Luôn hiển thị thanh trạng thái",
"Translation Not Available": "Không có bản dịch",
"Custom Content CSS": "CSS nội dung",
"Enter CSS for book content styling...": "Nhập CSS cho phần nội dung sách...",
"Custom Reader UI CSS": "CSS giao diện đọc",
@@ -439,7 +438,6 @@
"Google Books": "Google Books",
"Open Library": "Open Library",
"Fiction, Science, History": "Tiểu thuyết, Khoa học, Lịch sử",
"Select Cover Image": "Chọn ảnh bìa",
"Open Book in New Window": "Mở Sách trong Cửa sổ Mới",
"Voices for {{lang}}": "Giọng nói cho {{lang}}",
"Yandex Translate": "Yandex Dịch",
@@ -475,12 +473,10 @@
"Always use latest": "Luôn sử dụng phiên bản mới nhất",
"Send changes only": "Chỉ gửi thay đổi",
"Receive changes only": "Chỉ nhận thay đổi",
"Disabled": "Đã tắt",
"Checksum Method": "Phương pháp kiểm tra",
"File Content (recommended)": "Nội dung tệp (được khuyến nghị)",
"File Name": "Tên tệp",
"Device Name": "Tên thiết bị",
"Sync Tolerance": "Độ dung sai đồng bộ",
"Connect to your KOReader Sync server.": "Kết nối với máy chủ đồng bộ KOReader của bạn.",
"Server URL": "URL máy chủ",
"Username": "Tên người dùng",
@@ -499,7 +495,6 @@
"Approximately {{percentage}}%": "Khoảng {{percentage}}%",
"Failed to connect": "Không thể kết nối",
"Sync Server Connected": "Máy chủ đồng bộ đã kết nối",
"Precision: {{precision}} digits after the decimal": "Độ chính xác: {{precision}} chữ số sau dấu thập phân",
"Sync as {{userDisplayName}}": "Đồng bộ dưới tên {{userDisplayName}}",
"Custom Fonts": "Phông Chữ Tùy Chỉnh",
"Cancel Delete": "Hủy Xóa",
@@ -513,5 +508,99 @@
"Select Video": "Chọn Video",
"Select Audio": "Chọn Âm Thanh",
"Select Fonts": "Chọn Phông Chữ",
"Supported font formats: .ttf, .odf, .woff, .woff2": "Định dạng phông chữ được hỗ trợ: .ttf, .odf, .woff, .woff2"
"Supported font formats: .ttf, .otf, .woff, .woff2": "Định dạng phông chữ được hỗ trợ: .ttf, .otf, .woff, .woff2",
"Push Progress": "Đẩy tiến độ",
"Pull Progress": "Kéo tiến độ",
"Previous Paragraph": "Đoạn trước",
"Previous Sentence": "Câu trước",
"Pause": "Tạm dừng",
"Play": "Phát",
"Next Sentence": "Câu tiếp theo",
"Next Paragraph": "Đoạn tiếp theo",
"Separate Cover Page": "Trang Bìa Riêng",
"Resize Notebook": "Thay Đổi Kích Thước Sổ Ghi Chép",
"Resize Sidebar": "Thay Đổi Kích Thước Thanh Bên",
"Get Help from the Readest Community": "Nhận Trợ Giúp từ Cộng Đồng Readest",
"Remove cover image": "Xóa ảnh bìa",
"Bookshelf": "Kệ sách",
"View Menu": "Xem menu",
"Settings Menu": "Menu cài đặt",
"View account details and quota": "Xem chi tiết tài khoản và hạn mức",
"Library Header": "Tiêu đề thư viện",
"Book Content": "Nội dung sách",
"Footer Bar": "Thanh chân trang",
"Header Bar": "Thanh đầu trang",
"View Options": "Tùy chọn xem",
"Book Menu": "Menu sách",
"Search Options": "Tùy chọn tìm kiếm",
"Close": "Đóng",
"Delete Book Options": "Tùy chọn xóa sách",
"ON": "BẬT",
"OFF": "TẮT",
"Reading Progress": "Tiến độ đọc",
"Page Margin": "Lề trang",
"Remove Bookmark": "Xóa đánh dấu",
"Add Bookmark": "Thêm đánh dấu",
"Books Content": "Nội dung sách",
"Jump to Location": "Nhảy đến vị trí",
"Unpin Notebook": "Bỏ ghim sổ tay",
"Pin Notebook": "Ghim sổ tay",
"Hide Search Bar": "Ẩn thanh tìm kiếm",
"Show Search Bar": "Hiện thanh tìm kiếm",
"On {{current}} of {{total}} page": "Trên {{current}} của {{total}} trang",
"Section Title": "Tiêu đề phần",
"Decrease": "Giảm",
"Increase": "Tăng",
"Settings Panels": "Các bảng điều khiển cài đặt",
"Settings": "Cài đặt",
"Unpin Sidebar": "Bỏ ghim thanh bên",
"Pin Sidebar": "Ghim thanh bên",
"Toggle Sidebar": "Chuyển đổi thanh bên",
"Toggle Translation": "Chuyển đổi dịch thuật",
"Translation Disabled": "Dịch thuật đã tắt",
"Minimize": "Thu nhỏ",
"Maximize or Restore": "Tối đa hóa hoặc Khôi phục",
"Exit Parallel Read": "Thoát Đọc Song Song",
"Enter Parallel Read": "Vào Đọc Song Song",
"Zoom Level": "Độ phóng to",
"Zoom Out": "Thu nhỏ",
"Reset Zoom": "Đặt lại độ phóng to",
"Zoom In": "Phóng to",
"Zoom Mode": "Chế độ phóng to",
"Single Page": "Một trang",
"Auto Spread": "Tự động trải rộng",
"Fit Page": "Vừa trang",
"Fit Width": "Vừa chiều rộng",
"Failed to select directory": "Không thể chọn thư mục",
"The new data directory must be different from the current one.": "Thư mục dữ liệu mới phải khác với thư mục hiện tại.",
"Migration failed: {{error}}": "Di chuyển không thành công: {{error}}",
"Change Data Location": "Thay đổi vị trí dữ liệu",
"Current Data Location": "Vị trí dữ liệu hiện tại",
"Total size: {{size}}": "Tổng kích thước: {{size}}",
"Calculating file info...": "Đang tính toán thông tin tệp...",
"New Data Location": "Vị trí dữ liệu mới",
"Choose Different Folder": "Chọn thư mục khác",
"Choose New Folder": "Chọn thư mục mới",
"Migrating data...": "Đang di chuyển dữ liệu...",
"Copying: {{file}}": "Đang sao chép: {{file}}",
"{{current}} of {{total}} files": "{{current}} của {{total}} tệp",
"Migration completed successfully!": "Di chuyển hoàn tất thành công!",
"Your data has been moved to the new location. Please restart the application to complete the process.": "Dữ liệu của bạn đã được chuyển đến vị trí mới. Vui lòng khởi động lại ứng dụng để hoàn tất quá trình.",
"Migration failed": "Di chuyển không thành công",
"Important Notice": "Thông báo quan trọng",
"This will move all your app data to the new location. Make sure the destination has enough free space.": "Điều này sẽ di chuyển tất cả dữ liệu ứng dụng của bạn đến vị trí mới. Hãy chắc chắn rằng đích đến có đủ không gian trống.",
"Restart App": "Khởi động lại ứng dụng",
"Start Migration": "Bắt đầu di chuyển",
"Advanced Settings": "Cài đặt nâng cao",
"File count: {{size}}": "Số lượng tệp: {{size}}",
"Background Read Aloud": "Đọc To Nền",
"Ready to read aloud": "Sẵn sàng để đọc to",
"Read Aloud": "Đọc To",
"Screen Brightness": "Độ sáng màn hình",
"Background Image": "Ảnh nền",
"Import Image": "Nhập ảnh",
"Opacity": "Độ mờ",
"Size": "Kích thước",
"Cover": "Bìa",
"Contain": "Chứa"
}
@@ -82,7 +82,6 @@
"Search...": "搜索...",
"Select Book": "选择书籍",
"Select Books": "选择书籍",
"Select Multiple Books": "选择多本书籍",
"Sepia": "旧韵",
"Serif Font": "衬线字体",
"Show Book Details": "显示书籍详情",
@@ -118,6 +117,7 @@
"Book Details": "书籍详情",
"From Local File": "从本地文件导入",
"TOC": "目录",
"Table of Contents": "目录",
"Book uploaded: {{title}}": "书籍已上传:{{title}}",
"Failed to upload book: {{title}}": "上传书籍失败:{{title}}",
"Book downloaded: {{title}}": "书籍已下载:{{title}}",
@@ -330,7 +330,6 @@
"Left Margin (px)": "左边距",
"Column Gap (%)": "列间距",
"Always Show Status Bar": "始终显示状态栏",
"Translation Not Available": "翻译不可用",
"Custom Content CSS": "自定义内容 CSS",
"Enter CSS for book content styling...": "输入书籍内容样式的CSS…",
"Custom Reader UI CSS": "自定义界面 CSS",
@@ -439,7 +438,6 @@
"Google Books": "谷歌图书",
"Open Library": "开放图书馆",
"Fiction, Science, History": "小说,科学,历史",
"Select Cover Image": "选择封面图片",
"Open Book in New Window": "在新窗口中打开书籍",
"Voices for {{lang}}": "{{lang}} 的语音",
"Yandex Translate": "Yandex 翻译",
@@ -475,12 +473,10 @@
"Always use latest": "始终使用最新",
"Send changes only": "仅发送更改",
"Receive changes only": "仅接收更改",
"Disabled": "已禁用",
"Checksum Method": "校验和方法",
"File Content (recommended)": "文件内容(推荐)",
"File Name": "文件名",
"Device Name": "设备名称",
"Sync Tolerance": "同步容忍度",
"Connect to your KOReader Sync server.": "连接到您的 KOReader 同步服务器。",
"Server URL": "服务器 URL",
"Username": "用户名",
@@ -499,7 +495,6 @@
"Approximately {{percentage}}%": "大约 {{percentage}}%",
"Failed to connect": "连接失败",
"Sync Server Connected": "同步服务器已连接",
"Precision: {{precision}} digits after the decimal": "精度:{{precision}} 位小数",
"Sync as {{userDisplayName}}": "以 {{userDisplayName}} 身份同步",
"Custom Fonts": "自定义字体",
"Cancel Delete": "取消删除",
@@ -513,5 +508,99 @@
"Select Video": "选择视频",
"Select Audio": "选择音频",
"Select Fonts": "选择字体",
"Supported font formats: .ttf, .odf, .woff, .woff2": "支持的字体格式:.ttf, .odf, .woff, .woff2"
"Supported font formats: .ttf, .otf, .woff, .woff2": "支持的字体格式:.ttf, .otf, .woff, .woff2",
"Push Progress": "推送阅读进度",
"Pull Progress": "拉取阅读进度",
"Previous Paragraph": "上一段",
"Previous Sentence": "上一句",
"Pause": "暂停",
"Play": "播放",
"Next Sentence": "下一句",
"Next Paragraph": "下一段",
"Separate Cover Page": "单独封面页",
"Resize Notebook": "调整笔记本大小",
"Resize Sidebar": "调整侧边栏大小",
"Get Help from the Readest Community": "从 Readest 社区获取帮助",
"Remove cover image": "移除封面图片",
"Bookshelf": "书架",
"View Menu": "查看菜单",
"Settings Menu": "设置菜单",
"View account details and quota": "查看账户详情和配额",
"Library Header": "图书馆标题",
"Book Content": "书籍内容",
"Footer Bar": "底部栏",
"Header Bar": "顶部栏",
"View Options": "查看选项",
"Book Menu": "书籍菜单",
"Search Options": "搜索选项",
"Close": "关闭",
"Delete Book Options": "删除书籍选项",
"ON": "开启",
"OFF": "关闭",
"Reading Progress": "阅读进度",
"Page Margin": "页面边距",
"Remove Bookmark": "移除书签",
"Add Bookmark": "添加书签",
"Books Content": "书籍内容",
"Jump to Location": "跳转到位置",
"Unpin Notebook": "取消固定笔记本",
"Pin Notebook": "固定笔记本",
"Hide Search Bar": "隐藏搜索栏",
"Show Search Bar": "显示搜索栏",
"On {{current}} of {{total}} page": "在第 {{current}} 页,共 {{total}} 页",
"Section Title": "章节标题",
"Decrease": "减少",
"Increase": "增加",
"Settings Panels": "设置面板",
"Settings": "设置",
"Unpin Sidebar": "取消固定侧边栏",
"Pin Sidebar": "固定侧边栏",
"Toggle Sidebar": "切换侧边栏",
"Toggle Translation": "切换翻译",
"Translation Disabled": "翻译已禁用",
"Minimize": "最小化",
"Maximize or Restore": "最大化或还原",
"Exit Parallel Read": "退出并排阅读",
"Enter Parallel Read": "进入并排阅读",
"Zoom Level": "缩放级别",
"Zoom Out": "缩小",
"Reset Zoom": "重置缩放",
"Zoom In": "放大",
"Zoom Mode": "缩放模式",
"Single Page": "单页",
"Auto Spread": "自动展开",
"Fit Page": "适应页面",
"Fit Width": "适应宽度",
"Failed to select directory": "选择目录失败",
"The new data directory must be different from the current one.": "新的数据目录必须与当前目录不同。",
"Migration failed: {{error}}": "迁移失败: {{error}}",
"Change Data Location": "更改数据位置",
"Current Data Location": "当前数据位置",
"Total size: {{size}}": "总大小: {{size}}",
"Calculating file info...": "正在计算文件信息...",
"New Data Location": "新数据位置",
"Choose Different Folder": "选择不同的文件夹",
"Choose New Folder": "选择新文件夹",
"Migrating data...": "正在迁移数据...",
"Copying: {{file}}": "正在复制: {{file}}",
"{{current}} of {{total}} files": "{{current}} / {{total}} 个文件",
"Migration completed successfully!": "迁移成功完成!",
"Your data has been moved to the new location. Please restart the application to complete the process.": "您的数据已移动到新位置。请重新启动应用程序以完成此过程。",
"Migration failed": "迁移失败",
"Important Notice": "重要通知",
"This will move all your app data to the new location. Make sure the destination has enough free space.": "这将把您所有的应用数据移动到新位置。请确保目标位置有足够的可用空间。",
"Restart App": "重启应用",
"Start Migration": "开始迁移",
"Advanced Settings": "高级设置",
"File count: {{size}}": "文件数量: {{size}}",
"Background Read Aloud": "后台语音朗读",
"Ready to read aloud": "语音朗读已就绪",
"Read Aloud": "语音朗读",
"Screen Brightness": "屏幕亮度",
"Background Image": "背景图片",
"Import Image": "导入图片",
"Opacity": "不透明度",
"Size": "大小",
"Cover": "封面",
"Contain": "包含"
}
@@ -82,7 +82,6 @@
"Search...": "搜索...",
"Select Book": "選擇書籍",
"Select Books": "選擇書籍",
"Select Multiple Books": "選擇多本書籍",
"Sepia": "舊韻",
"Serif Font": "襯線字體",
"Show Book Details": "顯示書籍詳情",
@@ -118,6 +117,7 @@
"Book Details": "書籍詳情",
"From Local File": "從本地文件導入",
"TOC": "目錄",
"Table of Contents": "目錄",
"Book uploaded: {{title}}": "書籍已上傳:{{title}}",
"Failed to upload book: {{title}}": "書籍上傳失敗:{{title}}",
"Book downloaded: {{title}}": "書籍已下載:{{title}}",
@@ -330,7 +330,6 @@
"Left Margin (px)": "左邊距",
"Column Gap (%)": "欄間距",
"Always Show Status Bar": "始終顯示狀態欄",
"Translation Not Available": "翻譯不可用",
"Custom Content CSS": "自訂內容 CSS",
"Enter CSS for book content styling...": "輸入書籍內容樣式的CSS…",
"Custom Reader UI CSS": "自訂介面 CSS",
@@ -439,7 +438,6 @@
"Google Books": "Google 圖書",
"Open Library": "開放圖書館",
"Fiction, Science, History": "小說,科學,歷史",
"Select Cover Image": "選擇封面圖片",
"Open Book in New Window": "在新視窗中打開書籍",
"Voices for {{lang}}": "{{lang}} 的語音",
"Yandex Translate": "Yandex 翻譯",
@@ -475,12 +473,10 @@
"Always use latest": "始終使用最新",
"Send changes only": "僅發送更改",
"Receive changes only": "僅接收更改",
"Disabled": "已禁用",
"Checksum Method": "校驗和方法",
"File Content (recommended)": "文件內容(推薦)",
"File Name": "文件名",
"Device Name": "設備名稱",
"Sync Tolerance": "同步容忍度",
"Connect to your KOReader Sync server.": "連接到您的 KOReader 同步伺服器。",
"Server URL": "伺服器 URL",
"Username": "用戶名",
@@ -499,7 +495,6 @@
"Approximately {{percentage}}%": "大約 {{percentage}}%",
"Failed to connect": "連接失敗",
"Sync Server Connected": "同步伺服器已連接",
"Precision: {{precision}} digits after the decimal": "精度: {{precision}} 位小數",
"Sync as {{userDisplayName}}": "以 {{userDisplayName}} 身份同步",
"Custom Fonts": "自訂字型",
"Cancel Delete": "取消刪除",
@@ -513,5 +508,99 @@
"Select Video": "選擇影片",
"Select Audio": "選擇音訊",
"Select Fonts": "選擇字型",
"Supported font formats: .ttf, .odf, .woff, .woff2": "支援的字型格式:.ttf, .odf, .woff, .woff2"
"Supported font formats: .ttf, .otf, .woff, .woff2": "支援的字型格式:.ttf, .otf, .woff, .woff2",
"Push Progress": "推送閱讀進度",
"Pull Progress": "拉取閱讀進度",
"Previous Paragraph": "上一段",
"Previous Sentence": "上一句",
"Pause": "暫停",
"Play": "播放",
"Next Sentence": "下一句",
"Next Paragraph": "下一段",
"Separate Cover Page": "單獨封面頁",
"Resize Notebook": "調整筆記本大小",
"Resize Sidebar": "調整側邊欄大小",
"Get Help from the Readest Community": "從 Readest 社群獲取幫助",
"Remove cover image": "移除封面圖片",
"Bookshelf": "書架",
"View Menu": "檢視選單",
"Settings Menu": "設定選單",
"View account details and quota": "檢視帳戶詳細資料與配額",
"Library Header": "圖書館標題",
"Book Content": "書籍內容",
"Footer Bar": "頁腳欄",
"Header Bar": "標頭欄",
"View Options": "檢視選項",
"Book Menu": "書籍選單",
"Search Options": "搜尋選項",
"Close": "關閉",
"Delete Book Options": "刪除書籍選項",
"ON": "開啟",
"OFF": "關閉",
"Reading Progress": "閱讀進度",
"Page Margin": "頁邊距",
"Remove Bookmark": "移除書籤",
"Add Bookmark": "添加書籤",
"Books Content": "書籍內容",
"Jump to Location": "跳轉到位置",
"Unpin Notebook": "取消固定筆記本",
"Pin Notebook": "固定筆記本",
"Hide Search Bar": "隱藏搜索欄",
"Show Search Bar": "顯示搜索欄",
"On {{current}} of {{total}} page": "在第 {{current}} 頁,共 {{total}} 頁",
"Section Title": "章節標題",
"Decrease": "減少",
"Increase": "增加",
"Settings Panels": "設定面板",
"Settings": "設定",
"Unpin Sidebar": "取消固定側邊欄",
"Pin Sidebar": "固定側邊欄",
"Toggle Sidebar": "切換側邊欄",
"Toggle Translation": "切換翻譯",
"Translation Disabled": "翻譯已禁用",
"Minimize": "最小化",
"Maximize or Restore": "最大化或還原",
"Exit Parallel Read": "退出並排閱讀",
"Enter Parallel Read": "進入並排閱讀",
"Zoom Level": "縮放級別",
"Zoom Out": "縮小",
"Reset Zoom": "重置縮放",
"Zoom In": "放大",
"Zoom Mode": "縮放模式",
"Single Page": "單頁",
"Auto Spread": "自動展開",
"Fit Page": "適應頁面",
"Fit Width": "適應寬度",
"Failed to select directory": "選擇目錄失敗",
"The new data directory must be different from the current one.": "新的數據目錄必須與當前目錄不同。",
"Migration failed: {{error}}": "遷移失敗: {{error}}",
"Change Data Location": "更改數據位置",
"Current Data Location": "當前數據位置",
"Total size: {{size}}": "總大小: {{size}}",
"Calculating file info...": "正在計算文件信息...",
"New Data Location": "新的數據位置",
"Choose Different Folder": "選擇不同的文件夾",
"Choose New Folder": "選擇新文件夾",
"Migrating data...": "正在遷移數據...",
"Copying: {{file}}": "正在複製: {{file}}",
"{{current}} of {{total}} files": "{{current}} / {{total}} 個文件",
"Migration completed successfully!": "遷移成功完成!",
"Your data has been moved to the new location. Please restart the application to complete the process.": "您的數據已移動到新位置。請重新啟動應用程序以完成此過程。",
"Migration failed": "遷移失敗",
"Important Notice": "重要通知",
"This will move all your app data to the new location. Make sure the destination has enough free space.": "這將把您所有的應用數據移動到新位置。請確保目標位置有足夠的可用空間。",
"Restart App": "重新啟動應用",
"Start Migration": "開始遷移",
"Advanced Settings": "高級設置",
"File count: {{size}}": "文件數量: {{size}}",
"Background Read Aloud": "背景朗讀",
"Ready to read aloud": "朗讀準備就緒",
"Read Aloud": "朗讀",
"Screen Brightness": "螢幕亮度",
"Background Image": "背景圖片",
"Import Image": "匯入圖片",
"Opacity": "不透明度",
"Size": "大小",
"Cover": "封面",
"Contain": "包含"
}
+80
View File
@@ -1,5 +1,85 @@
{
"releases": {
"0.9.85": {
"date": "2025-10-14",
"notes": [
"TTS: Improved media session control compatibility across more Android systems",
"TTS: Made the TTS icon less distracting during read-aloud mode",
"Settings: Added an option to adjust screen brightness while reading",
"Settings: Added support for custom background images",
"PDF: Fixed an issue where scrolling and panning didnt work correctly when zoomed in",
"Android: Added adaptive launcher icon for better system integration",
"Reader: Added keyboard shortcuts for toggling bookmarks",
"Reader: Annotations are now rendered instantly when opening files"
]
},
"0.9.82": {
"date": "2025-10-01",
"notes": [
"Sync: More reliable syncing between KOReader and Readest",
"MOBI: Fixed an issue where some footnotes in MOBI/AZW files were not parsed correctly",
"Storage: Added support for changing data location on Windows, macOS, Linux, and Android",
"Windows: Portable EXE version now stores all reading data in the directory of the executable",
"Android: Added background TTS support with media session controls",
"WebView: Extended compatibility down to version 92",
"Settings: Added global settings menu to the library page",
"iOS: Fixed an issue where custom theme colors were not handled correctly on older Safari versions",
"TTS: Added more languages for Edge TTS"
]
},
"0.9.81": {
"date": "2025-09-19",
"notes": [
"TTS: Added desktop common media control support when TTS is playing",
"PDF: Disabled swipe-up gesture for toggling the action bar when zoomed in",
"Fonts: Fixed an issue where embedded fonts in ebooks were occasionally not applied",
"Reader: Fixed an issue where newly created highlights sometimes would not appear",
"Reader: Enabled scrolling in the menu when the menu is too long"
]
},
"0.9.80": {
"date": "2025-09-19",
"notes": [
"Accessibility: Added support for popular screen readers on all platforms, making books accessible to readers with visual impairments",
"Sync: Progress is now synced across different versions of the same book by aggregated metadata",
"Library: Groups are now displayed in list view for easier organization",
"Library: Added delete confirmation when removing books from the context menu",
"Fonts: Added support for fonts with subfamilies when importing TTF/OTF font files",
"Layout: Prevented layout shift in Android when the virtual keyboard appears"
]
},
"0.9.78": {
"date": "2025-09-06",
"notes": [
"TTS: Added option to keep a persistent TTS bar at the bottom of the screen",
"TTS: Added previous/next sentence navigation controls in the TTS bar",
"TTS: Added media control support on iOS lock screen and AirPods",
"TTS: Fixed an issue where headings could not be highlighted for TTS",
"Sync: Fixed occasional sync failures between KOReader and Readest",
"Fonts: Grouped font styles into custom font families for easier selection",
"Reader: Improved text selection sensitivity when using a stylus",
"Reader: Books can now be properly closed using the system back button on Android",
"EPUB: Fixed parsing to correctly detect the front cover in some EPUB files",
"PDF: Added zoom level, zoom mode, and spread mode settings for PDFs",
"Reader: Bookmarks can now be edited directly in the sidebar",
"Layout: Prevented layout shift when the virtual keyboard appears on Android",
"TXT: Improved chapter detection and added support for nested table of contents in TXT files"
]
},
"0.9.76": {
"date": "2025-08-30",
"notes": [
"Sync: Moved KOReader sync controls into the reader sidebar with a manual push/pull option",
"Sync: Improved tolerance and reliability for KOReader sync operations",
"Sync: Added support for more KOReader server implementations",
"Fonts: Added support for importing multiple styles within a font family",
"Reader: Fixed an issue where footnotes are empty in some EPUB files",
"Theme: Applied theme background color for PDFs on macOS",
"Reader: Added support for importing AZW3 files on Android",
"Reader: Reduced screen flash when launching the app and opening books",
"Layout: Fixed an issue where the grouping modal would not appear on Linux"
]
},
"0.9.75": {
"date": "2025-08-22",
"notes": [
@@ -23,6 +23,9 @@ VERSION_CODE=$((10#$MAJOR * 10000 + 10#$MINOR * 1000 + 10#$PATCH))
echo "🔢 Computed versionCode: $VERSION_CODE"
PROPERTIES_FILE="./src-tauri/gen/android/app/tauri.properties"
MANIFEST="./src-tauri/gen/android/app/src/main/AndroidManifest.xml"
INSTALL_PERMISSION_LINE='<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>'
STORAGE_PERMISSION_LINE='<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>'
if [[ ! -f "$PROPERTIES_FILE" ]]; then
echo "❌ File not found: $PROPERTIES_FILE"
@@ -36,9 +39,55 @@ mv "$tmpfile" "$PROPERTIES_FILE"
echo "✅ Updated $PROPERTIES_FILE"
ised() {
if [[ "$OSTYPE" == "darwin"* ]]; then
sed -i '' "$@"
else
sed -i "$@"
fi
return $?
}
# --- REMOVE PERMISSION BEFORE BUILD ---
if grep -q 'REQUEST_INSTALL_PACKAGES' "$MANIFEST"; then
echo "🧹 Removing REQUEST_INSTALL_PACKAGES from AndroidManifest.xml"
if ised "/REQUEST_INSTALL_PACKAGES/d" "$MANIFEST"; then
echo "✅ Successfully removed REQUEST_INSTALL_PACKAGES"
else
echo "❌ Failed to remove REQUEST_INSTALL_PACKAGES" >&2
exit 1
fi
fi
if grep -q 'MANAGE_EXTERNAL_STORAGE' "$MANIFEST"; then
echo "🧹 Removing MANAGE_EXTERNAL_STORAGE from AndroidManifest.xml"
if ised "/MANAGE_EXTERNAL_STORAGE/d" "$MANIFEST"; then
echo "✅ Successfully removed MANAGE_EXTERNAL_STORAGE"
else
echo "❌ Failed to remove MANAGE_EXTERNAL_STORAGE" >&2
exit 1
fi
fi
echo "🚀 Running: pnpm tauri android build"
pnpm tauri android build
# --- ADD PERMISSION BACK AFTER BUILD ---
if ! grep -q 'REQUEST_INSTALL_PACKAGES' "$MANIFEST"; then
echo "♻️ Restoring REQUEST_INSTALL_PACKAGES in AndroidManifest.xml"
ised "/android.permission.INTERNET/a\\
$INSTALL_PERMISSION_LINE
" "$MANIFEST"
fi
if ! grep -q 'MANAGE_EXTERNAL_STORAGE' "$MANIFEST"; then
echo "♻️ Restoring MANAGE_EXTERNAL_STORAGE in AndroidManifest.xml"
ised "/android.permission.WRITE_EXTERNAL_STORAGE/a\\
$STORAGE_PERMISSION_LINE
" "$MANIFEST"
fi
source .env.google-play.local
if [[ -z "$GOOGLE_PLAY_JSON_KEY_FILE" ]]; then
echo "❌ GOOGLE_PLAY_JSON_KEY_FILE is not set"
+1
View File
@@ -49,6 +49,7 @@ tauri-plugin-opener = "2"
tauri-plugin-deep-link = "2"
tauri-plugin-sign-in-with-apple = "1.0.2"
tauri-plugin-haptics = "2"
tauri-plugin-persisted-scope = "2"
tauri-plugin-native-bridge = { path = "./plugins/tauri-plugin-native-bridge" }
tauri-plugin-native-tts = { path = "./plugins/tauri-plugin-native-tts" }
@@ -61,6 +61,17 @@
}
]
},
{
"identifier": "fs:scope",
"allow": [
{
"path": "**/Readest"
},
{
"path": "**/Readest/**/*"
}
]
},
{
"identifier": "http:default",
"allow": [
@@ -1,8 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
<!-- AndroidTV support -->
<uses-feature android:name="android.software.leanback" android:required="false" />
@@ -30,27 +35,55 @@
<data android:scheme="content" />
<data android:scheme="file" />
<data android:mimeType="application/epub+zip" />
<data android:mimeType="application/pdf" />
<data android:mimeType="application/fb2" />
<data android:mimeType="application/x-fb2" />
<data android:mimeType="application/mobi"/>
<data android:mimeType="application/azw"/>
<data android:mimeType="application/azw3"/>
<data android:mimeType="application/x-mobipocket-ebook" />
<data android:mimeType="application/vnd.amazon.ebook" />
<data android:mimeType="application/vnd.amazon.mobi8-ebook" />
<data android:mimeType="application/vnd.comicbook+zip" />
<data android:mimeType="application/x-cbz" />
<data android:mimeType="application/x-mobipocket-ebook" />
<data android:mimeType="application/zip" />
<data android:mimeType="text/plain" />
<data android:mimeType="application/octet-stream"/>
<data android:mimeType="application/x-font-ttf"/>
<data android:mimeType="application/x-font-otf"/>
</intent-filter>
<data android:pathPattern="/.*\\.epub" />
<data android:pathPattern="/.*\\.pdf" />
<data android:pathPattern="/.*\\.fb2" />
<data android:pathPattern="/.*\\.fb2.zip" />
<data android:pathPattern="/.*\\.mobi" />
<data android:pathPattern="/.*\\.azw" />
<data android:pathPattern="/.*\\.cbz" />
<data android:pathPattern="/.*\\.zip" />
<data android:pathPattern="/.*\\.txt" />
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="content" />
<data android:scheme="file" />
<data android:mimeType="*/*" />
<data android:pathPattern=".*\\.epub" />
<data android:pathPattern=".*\\.pdf" />
<data android:pathPattern=".*\\.fb2" />
<data android:pathPattern=".*\\.fb2.zip" />
<data android:pathPattern=".*\\.mobi" />
<data android:pathPattern=".*\\.azw" />
<data android:pathPattern=".*\\.azw3" />
<data android:pathPattern=".*\\.cbz" />
<data android:pathPattern=".*\\.zip" />
<data android:pathPattern=".*\\.txt" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="*/*"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND_MULTIPLE"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="*/*"/>
</intent-filter>
<intent-filter android:label="oauth">
@@ -59,6 +92,7 @@
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="readest" android:host="auth-callback" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
@@ -81,6 +115,23 @@
<!-- DEEP LINK PLUGIN. AUTO-GENERATED. DO NOT REMOVE. -->
</activity>
<receiver
android:name="androidx.media.session.MediaButtonReceiver"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</receiver>
<service
android:name="com.readest.native_tts.MediaPlaybackService"
android:foregroundServiceType="mediaPlayback"
android:exported="true">
<intent-filter>
<action android:name="android.media.browse.MediaBrowserService"/>
</intent-filter>
</service>
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.fileprovider"
@@ -0,0 +1,170 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path
android:fillColor="#3DDC84"
android:pathData="M0,0h108v108h-108z" />
<path
android:fillColor="#00000000"
android:pathData="M9,0L9,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,0L19,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M29,0L29,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M39,0L39,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M49,0L49,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M59,0L59,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M69,0L69,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M79,0L79,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M89,0L89,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M99,0L99,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,9L108,9"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,19L108,19"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,29L108,29"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,39L108,39"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,49L108,49"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,59L108,59"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,69L108,69"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,79L108,79"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,89L108,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,99L108,99"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,29L89,29"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,39L89,39"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,49L89,49"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,59L89,59"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,69L89,69"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,79L89,79"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M29,19L29,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M39,19L39,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M49,19L49,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M59,19L59,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M69,19L69,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M79,19L79,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
</vector>
@@ -0,0 +1,8 @@
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<color android:color="#FF323130" />
</item>
<item android:gravity="center" android:width="120dp" android:height="120dp">
<bitmap android:src="@drawable/splash_icon" />
</item>
</layer-list>
Binary file not shown.

After

Width:  |  Height:  |  Size: 170 KiB

@@ -2,9 +2,7 @@
<!-- Base application theme. -->
<style name="Theme.readest" parent="Theme.MaterialComponents.DayNight.NoActionBar">
<!-- Customize your theme here. -->
<item name="android:windowSplashScreenBackground">@android:color/transparent</item>
<item name="android:windowSplashScreenAnimatedIcon" tools:targetApi="31">@null</item>
<item name="android:windowBackground">@drawable/splash_background</item>
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:navigationBarColor">@android:color/transparent</item>
<item name="android:windowTranslucentStatus">false</item>
@@ -0,0 +1,5 @@
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_launcher_background"/>
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
<monochrome android:drawable="@mipmap/ic_launcher_monochrome"/>
</adaptive-icon>
Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

@@ -33,8 +33,8 @@ android {
}
dependencies {
implementation("androidx.core:core-ktx:1.9.0")
implementation("androidx.appcompat:appcompat:1.6.0")
implementation("androidx.core:core-ktx:1.12.0")
implementation("androidx.appcompat:appcompat:1.6.1")
implementation("androidx.browser:browser:1.8.0")
implementation("com.google.android.material:material:1.7.0")
testImplementation("junit:junit:4.13.2")
@@ -1,10 +1,13 @@
package com.readest.native_bridge
import android.Manifest
import android.app.Activity
import android.content.Intent
import android.net.Uri
import android.util.Log
import android.os.Build
import android.os.Environment
import android.provider.Settings
import android.view.View
import android.view.KeyEvent
import android.view.WindowInsets
@@ -13,15 +16,19 @@ import android.view.WindowInsetsController
import android.graphics.Color
import android.webkit.WebView
import android.content.pm.ActivityInfo
import android.content.pm.PackageManager
import android.graphics.fonts.SystemFonts
import android.graphics.fonts.Font
import androidx.core.view.WindowCompat
import androidx.core.app.ActivityCompat
import androidx.core.content.FileProvider
import androidx.core.content.ContextCompat
import androidx.core.view.WindowInsetsCompat
import androidx.core.view.WindowInsetsControllerCompat
import androidx.browser.customtabs.CustomTabsIntent
import app.tauri.annotation.Command
import app.tauri.annotation.InvokeArg
import app.tauri.annotation.Permission
import app.tauri.annotation.TauriPlugin
import app.tauri.plugin.JSObject
import app.tauri.plugin.Plugin
@@ -62,12 +69,21 @@ class LockScreenOrientationRequestArgs {
var orientation: String? = null
}
@InvokeArg
class SetScreenBrightnessRequestArgs {
var brightness: Double? = null // 0.0 to 1.0
}
interface KeyDownInterceptor {
fun interceptVolumeKeys(enabled: Boolean)
fun interceptBackKey(enabled: Boolean)
}
@TauriPlugin
@TauriPlugin(
permissions = [
Permission(strings = [Manifest.permission.MANAGE_EXTERNAL_STORAGE], alias = "manageStorage"),
]
)
class NativeBridgePlugin(private val activity: Activity): Plugin(activity) {
private val implementation = NativeBridge()
private var redirectScheme = "readest"
@@ -75,6 +91,7 @@ class NativeBridgePlugin(private val activity: Activity): Plugin(activity) {
companion object {
var pendingInvoke: Invoke? = null
private const val REQUEST_MANAGE_STORAGE = 1001
}
override fun load(webView: WebView) {
@@ -198,6 +215,7 @@ class NativeBridgePlugin(private val activity: Activity): Plugin(activity) {
}
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
@Suppress("DEPRECATION")
window.setDecorFitsSystemWindows(false)
val controller = window.insetsController
if (controller != null) {
@@ -228,7 +246,7 @@ class NativeBridgePlugin(private val activity: Activity): Plugin(activity) {
}
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
val compatController = WindowCompat.getInsetsController(window, decorView)
compatController?.let {
compatController.let {
it.systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
if (!isDarkMode) {
it.isAppearanceLightStatusBars = true
@@ -259,7 +277,9 @@ class NativeBridgePlugin(private val activity: Activity): Plugin(activity) {
}
}.reduce { acc, flag -> acc or flag }
}
@Suppress("DEPRECATION")
window.statusBarColor = Color.TRANSPARENT
@Suppress("DEPRECATION")
window.navigationBarColor = Color.TRANSPARENT
ret.put("success", true)
} catch (e: Exception) {
@@ -366,4 +386,124 @@ class NativeBridgePlugin(private val activity: Activity): Plugin(activity) {
}
invoke.resolve()
}
@Command
fun get_safe_area_insets(invoke: Invoke) {
val ret = JSObject()
try {
val rootView = activity.findViewById<View>(android.R.id.content)
val windowInsets = androidx.core.view.ViewCompat.getRootWindowInsets(rootView)
if (windowInsets != null) {
val insets = windowInsets.getInsets(
WindowInsetsCompat.Type.systemBars() or
WindowInsetsCompat.Type.displayCutout()
)
val density = activity.resources.displayMetrics.density
ret.put("top", insets.top / density)
ret.put("right", insets.right / density)
ret.put("bottom", insets.bottom / density)
ret.put("left", insets.left / density)
} else {
ret.put("top", 0)
ret.put("right", 0)
ret.put("bottom", 0)
ret.put("left", 0)
}
} catch (e: Exception) {
ret.put("error", e.message)
ret.put("top", 0)
ret.put("right", 0)
ret.put("bottom", 0)
ret.put("left", 0)
}
invoke.resolve(ret)
}
@Command
fun get_screen_brightness(invoke: Invoke) {
val ret = JSObject()
try {
val brightness = Settings.System.getInt(
activity.contentResolver,
Settings.System.SCREEN_BRIGHTNESS
)
val normalizedBrightness = brightness / 255.0
ret.put("brightness", normalizedBrightness)
} catch (e: Exception) {
ret.put("error", e.message)
ret.put("brightness", -1.0)
}
invoke.resolve(ret)
}
@Command
fun set_screen_brightness(invoke: Invoke) {
val args = invoke.parseArgs(SetScreenBrightnessRequestArgs::class.java)
val ret = JSObject()
try {
val brightness = (args.brightness ?: 0.5).toFloat()
if (brightness < 0.0 || brightness > 1.0) {
invoke.reject("Brightness must be between 0.0 and 1.0")
return
}
val layoutParams = activity.window.attributes
layoutParams.screenBrightness = brightness
activity.window.attributes = layoutParams
ret.put("success", true)
} catch (e: Exception) {
ret.put("success", false)
ret.put("error", e.message)
}
invoke.resolve(ret)
}
@Command
fun request_manage_storage_permission(invoke: Invoke) {
val ret = JSObject()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
if (!Environment.isExternalStorageManager()) {
try {
val intent = Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION)
intent.data = Uri.parse("package:${activity.packageName}")
activity.startActivityForResult(intent, REQUEST_MANAGE_STORAGE)
ret.put("manageStorage", "denied")
invoke.resolve(ret)
} catch (e: Exception) {
val intent = Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION)
activity.startActivity(intent)
ret.put("manageStorage", "denied")
invoke.resolve(ret)
}
} else {
ret.put("manageStorage", "granted")
invoke.resolve(ret)
}
} else {
val readPermission = ContextCompat.checkSelfPermission(
activity,
Manifest.permission.READ_EXTERNAL_STORAGE
)
val writePermission = ContextCompat.checkSelfPermission(
activity,
Manifest.permission.WRITE_EXTERNAL_STORAGE
)
if (readPermission == PackageManager.PERMISSION_GRANTED &&
writePermission == PackageManager.PERMISSION_GRANTED) {
ret.put("manageStorage", "granted")
invoke.resolve(ret)
} else {
ActivityCompat.requestPermissions(
activity,
arrayOf(
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
),
REQUEST_MANAGE_STORAGE
)
ret.put("manageStorage", "prompt")
invoke.resolve(ret)
}
}
}
}
@@ -14,6 +14,12 @@ const COMMANDS: &[&str] = &[
"iap_purchase_product",
"iap_restore_purchases",
"get_system_color_scheme",
"get_safe_area_insets",
"get_screen_brightness",
"set_screen_brightness",
"request_manage_storage_permission",
"checkPermissions",
"requestPermissions",
];
fn main() {
@@ -49,6 +49,10 @@ class LockScreenOrientationRequestArgs: Decodable {
let orientation: String?
}
class SetScreenBrightnessRequestArgs: Decodable {
let brightness: Float?
}
struct InitializeRequest: Decodable {
let publicKey: String?
}
@@ -539,6 +543,28 @@ class NativeBridgePlugin: Plugin {
let colorScheme = (userInterfaceStyle == .dark) ? "dark" : "light"
invoke.resolve(["colorScheme": colorScheme])
}
@objc public func get_screen_brightness(_ invoke: Invoke) {
let brightness = UIScreen.main.brightness
invoke.resolve(["brightness": brightness])
}
@objc public func set_screen_brightness(_ invoke: Invoke) {
guard let args = try? invoke.parseArgs(SetScreenBrightnessRequestArgs.self) else {
return invoke.reject("Failed to parse arguments")
}
let brightness = args.brightness ?? 0.5
if brightness < 0.0 || brightness > 1.0 {
return invoke.reject("Brightness must be between 0.0 and 1.0")
}
DispatchQueue.main.async {
UIScreen.main.brightness = CGFloat(brightness)
}
invoke.resolve(["success": true])
}
}
@_cdecl("init_plugin_native_bridge")
@@ -0,0 +1,13 @@
# Automatically generated - DO NOT EDIT!
"$schema" = "../../schemas/schema.json"
[[permission]]
identifier = "allow-checkPermissions"
description = "Enables the checkPermissions command without any pre-configured scope."
commands.allow = ["checkPermissions"]
[[permission]]
identifier = "deny-checkPermissions"
description = "Denies the checkPermissions command without any pre-configured scope."
commands.deny = ["checkPermissions"]
@@ -0,0 +1,13 @@
# Automatically generated - DO NOT EDIT!
"$schema" = "../../schemas/schema.json"
[[permission]]
identifier = "allow-get-safe-area-insets"
description = "Enables the get_safe_area_insets command without any pre-configured scope."
commands.allow = ["get_safe_area_insets"]
[[permission]]
identifier = "deny-get-safe-area-insets"
description = "Denies the get_safe_area_insets command without any pre-configured scope."
commands.deny = ["get_safe_area_insets"]
@@ -0,0 +1,13 @@
# Automatically generated - DO NOT EDIT!
"$schema" = "../../schemas/schema.json"
[[permission]]
identifier = "allow-get-screen-brightness"
description = "Enables the get_screen_brightness command without any pre-configured scope."
commands.allow = ["get_screen_brightness"]
[[permission]]
identifier = "deny-get-screen-brightness"
description = "Denies the get_screen_brightness command without any pre-configured scope."
commands.deny = ["get_screen_brightness"]
@@ -0,0 +1,13 @@
# Automatically generated - DO NOT EDIT!
"$schema" = "../../schemas/schema.json"
[[permission]]
identifier = "allow-requestPermissions"
description = "Enables the requestPermissions command without any pre-configured scope."
commands.allow = ["requestPermissions"]
[[permission]]
identifier = "deny-requestPermissions"
description = "Denies the requestPermissions command without any pre-configured scope."
commands.deny = ["requestPermissions"]
@@ -0,0 +1,13 @@
# Automatically generated - DO NOT EDIT!
"$schema" = "../../schemas/schema.json"
[[permission]]
identifier = "allow-request-manage-storage-permission"
description = "Enables the request_manage_storage_permission command without any pre-configured scope."
commands.allow = ["request_manage_storage_permission"]
[[permission]]
identifier = "deny-request-manage-storage-permission"
description = "Denies the request_manage_storage_permission command without any pre-configured scope."
commands.deny = ["request_manage_storage_permission"]
@@ -0,0 +1,13 @@
# Automatically generated - DO NOT EDIT!
"$schema" = "../../schemas/schema.json"
[[permission]]
identifier = "allow-set-screen-brightness"
description = "Enables the set_screen_brightness command without any pre-configured scope."
commands.allow = ["set_screen_brightness"]
[[permission]]
identifier = "deny-set-screen-brightness"
description = "Denies the set_screen_brightness command without any pre-configured scope."
commands.deny = ["set_screen_brightness"]
@@ -19,6 +19,12 @@ Default permissions for the plugin
- `allow-iap-purchase-product`
- `allow-iap-restore-purchases`
- `allow-get-system-color-scheme`
- `allow-get-safe-area-insets`
- `allow-get-screen-brightness`
- `allow-set-screen-brightness`
- `allow-request-manage-storage-permission`
- `allow-checkPermissions`
- `allow-requestPermissions`
## Permission Table
@@ -84,6 +90,32 @@ Denies the auth_with_safari command without any pre-configured scope.
<tr>
<td>
`native-bridge:allow-checkPermissions`
</td>
<td>
Enables the checkPermissions command without any pre-configured scope.
</td>
</tr>
<tr>
<td>
`native-bridge:deny-checkPermissions`
</td>
<td>
Denies the checkPermissions command without any pre-configured scope.
</td>
</tr>
<tr>
<td>
`native-bridge:allow-copy-uri-to-path`
</td>
@@ -110,6 +142,58 @@ Denies the copy_uri_to_path command without any pre-configured scope.
<tr>
<td>
`native-bridge:allow-get-safe-area-insets`
</td>
<td>
Enables the get_safe_area_insets command without any pre-configured scope.
</td>
</tr>
<tr>
<td>
`native-bridge:deny-get-safe-area-insets`
</td>
<td>
Denies the get_safe_area_insets command without any pre-configured scope.
</td>
</tr>
<tr>
<td>
`native-bridge:allow-get-screen-brightness`
</td>
<td>
Enables the get_screen_brightness command without any pre-configured scope.
</td>
</tr>
<tr>
<td>
`native-bridge:deny-get-screen-brightness`
</td>
<td>
Denies the get_screen_brightness command without any pre-configured scope.
</td>
</tr>
<tr>
<td>
`native-bridge:allow-get-status-bar-height`
</td>
@@ -370,6 +454,84 @@ Denies the lock_screen_orientation command without any pre-configured scope.
<tr>
<td>
`native-bridge:allow-requestPermissions`
</td>
<td>
Enables the requestPermissions command without any pre-configured scope.
</td>
</tr>
<tr>
<td>
`native-bridge:deny-requestPermissions`
</td>
<td>
Denies the requestPermissions command without any pre-configured scope.
</td>
</tr>
<tr>
<td>
`native-bridge:allow-request-manage-storage-permission`
</td>
<td>
Enables the request_manage_storage_permission command without any pre-configured scope.
</td>
</tr>
<tr>
<td>
`native-bridge:deny-request-manage-storage-permission`
</td>
<td>
Denies the request_manage_storage_permission command without any pre-configured scope.
</td>
</tr>
<tr>
<td>
`native-bridge:allow-set-screen-brightness`
</td>
<td>
Enables the set_screen_brightness command without any pre-configured scope.
</td>
</tr>
<tr>
<td>
`native-bridge:deny-set-screen-brightness`
</td>
<td>
Denies the set_screen_brightness command without any pre-configured scope.
</td>
</tr>
<tr>
<td>
`native-bridge:allow-set-system-ui-visibility`
</td>
@@ -16,4 +16,10 @@ permissions = [
"allow-iap-purchase-product",
"allow-iap-restore-purchases",
"allow-get-system-color-scheme",
"allow-get-safe-area-insets",
"allow-get-screen-brightness",
"allow-set-screen-brightness",
"allow-request-manage-storage-permission",
"allow-checkPermissions",
"allow-requestPermissions",
]
@@ -318,6 +318,18 @@
"const": "deny-auth-with-safari",
"markdownDescription": "Denies the auth_with_safari command without any pre-configured scope."
},
{
"description": "Enables the checkPermissions command without any pre-configured scope.",
"type": "string",
"const": "allow-checkPermissions",
"markdownDescription": "Enables the checkPermissions command without any pre-configured scope."
},
{
"description": "Denies the checkPermissions command without any pre-configured scope.",
"type": "string",
"const": "deny-checkPermissions",
"markdownDescription": "Denies the checkPermissions command without any pre-configured scope."
},
{
"description": "Enables the copy_uri_to_path command without any pre-configured scope.",
"type": "string",
@@ -330,6 +342,30 @@
"const": "deny-copy-uri-to-path",
"markdownDescription": "Denies the copy_uri_to_path command without any pre-configured scope."
},
{
"description": "Enables the get_safe_area_insets command without any pre-configured scope.",
"type": "string",
"const": "allow-get-safe-area-insets",
"markdownDescription": "Enables the get_safe_area_insets command without any pre-configured scope."
},
{
"description": "Denies the get_safe_area_insets command without any pre-configured scope.",
"type": "string",
"const": "deny-get-safe-area-insets",
"markdownDescription": "Denies the get_safe_area_insets command without any pre-configured scope."
},
{
"description": "Enables the get_screen_brightness command without any pre-configured scope.",
"type": "string",
"const": "allow-get-screen-brightness",
"markdownDescription": "Enables the get_screen_brightness command without any pre-configured scope."
},
{
"description": "Denies the get_screen_brightness command without any pre-configured scope.",
"type": "string",
"const": "deny-get-screen-brightness",
"markdownDescription": "Denies the get_screen_brightness command without any pre-configured scope."
},
{
"description": "Enables the get_status_bar_height command without any pre-configured scope.",
"type": "string",
@@ -450,6 +486,42 @@
"const": "deny-lock-screen-orientation",
"markdownDescription": "Denies the lock_screen_orientation command without any pre-configured scope."
},
{
"description": "Enables the requestPermissions command without any pre-configured scope.",
"type": "string",
"const": "allow-requestPermissions",
"markdownDescription": "Enables the requestPermissions command without any pre-configured scope."
},
{
"description": "Denies the requestPermissions command without any pre-configured scope.",
"type": "string",
"const": "deny-requestPermissions",
"markdownDescription": "Denies the requestPermissions command without any pre-configured scope."
},
{
"description": "Enables the request_manage_storage_permission command without any pre-configured scope.",
"type": "string",
"const": "allow-request-manage-storage-permission",
"markdownDescription": "Enables the request_manage_storage_permission command without any pre-configured scope."
},
{
"description": "Denies the request_manage_storage_permission command without any pre-configured scope.",
"type": "string",
"const": "deny-request-manage-storage-permission",
"markdownDescription": "Denies the request_manage_storage_permission command without any pre-configured scope."
},
{
"description": "Enables the set_screen_brightness command without any pre-configured scope.",
"type": "string",
"const": "allow-set-screen-brightness",
"markdownDescription": "Enables the set_screen_brightness command without any pre-configured scope."
},
{
"description": "Denies the set_screen_brightness command without any pre-configured scope.",
"type": "string",
"const": "deny-set-screen-brightness",
"markdownDescription": "Denies the set_screen_brightness command without any pre-configured scope."
},
{
"description": "Enables the set_system_ui_visibility command without any pre-configured scope.",
"type": "string",
@@ -475,10 +547,10 @@
"markdownDescription": "Denies the use_background_audio command without any pre-configured scope."
},
{
"description": "Default permissions for the plugin\n#### This default permission set includes:\n\n- `allow-auth-with-safari`\n- `allow-auth-with-custom-tab`\n- `allow-copy-uri-to-path`\n- `allow-use-background-audio`\n- `allow-install-package`\n- `allow-set-system-ui-visibility`\n- `allow-get-status-bar-height`\n- `allow-get-sys-fonts-list`\n- `allow-intercept-keys`\n- `allow-lock-screen-orientation`\n- `allow-iap-initialize`\n- `allow-iap-fetch-products`\n- `allow-iap-purchase-product`\n- `allow-iap-restore-purchases`\n- `allow-get-system-color-scheme`",
"description": "Default permissions for the plugin\n#### This default permission set includes:\n\n- `allow-auth-with-safari`\n- `allow-auth-with-custom-tab`\n- `allow-copy-uri-to-path`\n- `allow-use-background-audio`\n- `allow-install-package`\n- `allow-set-system-ui-visibility`\n- `allow-get-status-bar-height`\n- `allow-get-sys-fonts-list`\n- `allow-intercept-keys`\n- `allow-lock-screen-orientation`\n- `allow-iap-initialize`\n- `allow-iap-fetch-products`\n- `allow-iap-purchase-product`\n- `allow-iap-restore-purchases`\n- `allow-get-system-color-scheme`\n- `allow-get-safe-area-insets`\n- `allow-get-screen-brightness`\n- `allow-set-screen-brightness`\n- `allow-request-manage-storage-permission`\n- `allow-checkPermissions`\n- `allow-requestPermissions`",
"type": "string",
"const": "default",
"markdownDescription": "Default permissions for the plugin\n#### This default permission set includes:\n\n- `allow-auth-with-safari`\n- `allow-auth-with-custom-tab`\n- `allow-copy-uri-to-path`\n- `allow-use-background-audio`\n- `allow-install-package`\n- `allow-set-system-ui-visibility`\n- `allow-get-status-bar-height`\n- `allow-get-sys-fonts-list`\n- `allow-intercept-keys`\n- `allow-lock-screen-orientation`\n- `allow-iap-initialize`\n- `allow-iap-fetch-products`\n- `allow-iap-purchase-product`\n- `allow-iap-restore-purchases`\n- `allow-get-system-color-scheme`"
"markdownDescription": "Default permissions for the plugin\n#### This default permission set includes:\n\n- `allow-auth-with-safari`\n- `allow-auth-with-custom-tab`\n- `allow-copy-uri-to-path`\n- `allow-use-background-audio`\n- `allow-install-package`\n- `allow-set-system-ui-visibility`\n- `allow-get-status-bar-height`\n- `allow-get-sys-fonts-list`\n- `allow-intercept-keys`\n- `allow-lock-screen-orientation`\n- `allow-iap-initialize`\n- `allow-iap-fetch-products`\n- `allow-iap-purchase-product`\n- `allow-iap-restore-purchases`\n- `allow-get-system-color-scheme`\n- `allow-get-safe-area-insets`\n- `allow-get-screen-brightness`\n- `allow-set-screen-brightness`\n- `allow-request-manage-storage-permission`\n- `allow-checkPermissions`\n- `allow-requestPermissions`"
}
]
}
@@ -119,3 +119,32 @@ pub(crate) async fn get_system_color_scheme<R: Runtime>(
) -> Result<GetSystemColorSchemeResponse> {
app.native_bridge().get_system_color_scheme()
}
#[command]
pub(crate) async fn get_safe_area_insets<R: Runtime>(
app: AppHandle<R>,
) -> Result<GetSafeAreaInsetsResponse> {
app.native_bridge().get_safe_area_insets()
}
#[command]
pub(crate) async fn get_screen_brightness<R: Runtime>(
app: AppHandle<R>,
) -> Result<GetScreenBrightnessResponse> {
app.native_bridge().get_screen_brightness()
}
#[command]
pub(crate) async fn set_screen_brightness<R: Runtime>(
app: AppHandle<R>,
payload: SetScreenBrightnessRequest,
) -> Result<SetScreenBrightnessResponse> {
app.native_bridge().set_screen_brightness(payload)
}
#[command]
pub(crate) async fn request_manage_storage_permission<R: Runtime>(
app: AppHandle<R>,
) -> Result<RequestManageStoragePermissionResponse> {
app.native_bridge().request_manage_storage_permission()
}
@@ -102,4 +102,25 @@ impl<R: Runtime> NativeBridge<R> {
pub fn get_system_color_scheme(&self) -> crate::Result<GetSystemColorSchemeResponse> {
Err(crate::Error::UnsupportedPlatformError)
}
pub fn get_safe_area_insets(&self) -> crate::Result<GetSafeAreaInsetsResponse> {
Err(crate::Error::UnsupportedPlatformError)
}
pub fn get_screen_brightness(&self) -> crate::Result<GetScreenBrightnessResponse> {
Err(crate::Error::UnsupportedPlatformError)
}
pub fn set_screen_brightness(
&self,
_payload: SetScreenBrightnessRequest,
) -> crate::Result<SetScreenBrightnessResponse> {
Err(crate::Error::UnsupportedPlatformError)
}
pub fn request_manage_storage_permission(
&self,
) -> crate::Result<RequestManageStoragePermissionResponse> {
Err(crate::Error::UnsupportedPlatformError)
}
}
@@ -52,6 +52,10 @@ pub fn init<R: Runtime>() -> TauriPlugin<R> {
commands::iap_purchase_product,
commands::iap_restore_purchases,
commands::get_system_color_scheme,
commands::get_safe_area_insets,
commands::get_screen_brightness,
commands::set_screen_brightness,
commands::request_manage_storage_permission,
])
.setup(|app, api| {
#[cfg(mobile)]
@@ -161,3 +161,40 @@ impl<R: Runtime> NativeBridge<R> {
.map_err(Into::into)
}
}
impl<R: Runtime> NativeBridge<R> {
pub fn get_safe_area_insets(&self) -> crate::Result<GetSafeAreaInsetsResponse> {
self.0
.run_mobile_plugin("get_safe_area_insets", ())
.map_err(Into::into)
}
}
impl<R: Runtime> NativeBridge<R> {
pub fn get_screen_brightness(&self) -> crate::Result<GetScreenBrightnessResponse> {
self.0
.run_mobile_plugin("get_screen_brightness", ())
.map_err(Into::into)
}
}
impl<R: Runtime> NativeBridge<R> {
pub fn set_screen_brightness(
&self,
payload: SetScreenBrightnessRequest,
) -> crate::Result<SetScreenBrightnessResponse> {
self.0
.run_mobile_plugin("set_screen_brightness", payload)
.map_err(Into::into)
}
}
impl<R: Runtime> NativeBridge<R> {
pub fn request_manage_storage_permission(
&self,
) -> crate::Result<RequestManageStoragePermissionResponse> {
self.0
.run_mobile_plugin("request_manage_storage_permission", ())
.map_err(Into::into)
}
}
@@ -158,3 +158,37 @@ pub struct IAPRestorePurchasesResponse {
pub struct GetSystemColorSchemeResponse {
pub color_scheme: String, // "light" or "dark"
}
#[derive(Debug, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct GetSafeAreaInsetsResponse {
pub top: f64,
pub bottom: f64,
pub left: f64,
pub right: f64,
}
#[derive(Debug, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct GetScreenBrightnessResponse {
pub brightness: f64,
}
#[derive(Debug, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct SetScreenBrightnessRequest {
pub brightness: f64, // 0.0 to 1.0
}
#[derive(Debug, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct SetScreenBrightnessResponse {
pub success: bool,
pub error: Option<String>,
}
#[derive(Debug, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct RequestManageStoragePermissionResponse {
pub manage_storage: String, // "granted", "denied", or "prompt"
}
@@ -33,9 +33,10 @@ android {
}
dependencies {
implementation("androidx.core:core-ktx:1.9.0")
implementation("androidx.appcompat:appcompat:1.6.0")
implementation("androidx.media:media:1.7.1")
implementation("androidx.media3:media3-exoplayer:1.3.1")
implementation("androidx.core:core-ktx:1.12.0")
implementation("androidx.appcompat:appcompat:1.6.1")
implementation("com.google.android.material:material:1.7.0")
testImplementation("junit:junit:4.13.2")
androidTestImplementation("androidx.test.ext:junit:1.1.5")
@@ -0,0 +1,232 @@
package com.readest.native_tts
import com.readest.native_tts.R
import android.app.Notification
import android.app.NotificationChannel
import android.app.NotificationManager
import android.app.PendingIntent
import android.content.Context
import android.content.Intent
import android.os.Build
import android.os.Bundle
import android.util.Log
import android.view.KeyEvent
import android.graphics.Bitmap
import android.media.AudioManager
import android.media.AudioManager.OnAudioFocusChangeListener
import android.support.v4.media.MediaBrowserCompat
import android.support.v4.media.MediaMetadataCompat
import android.support.v4.media.session.MediaSessionCompat
import android.support.v4.media.session.PlaybackStateCompat
import androidx.core.app.NotificationCompat
import androidx.core.content.ContextCompat
import androidx.media.MediaBrowserServiceCompat
import androidx.media.session.MediaButtonReceiver
import androidx.media3.common.MediaItem
import androidx.media3.common.Player
import androidx.media3.exoplayer.ExoPlayer
import app.tauri.plugin.JSObject
class MediaPlaybackService : MediaBrowserServiceCompat() {
private var mediaSession: MediaSessionCompat? = null
private lateinit var player: ExoPlayer
private lateinit var stateBuilder: PlaybackStateCompat.Builder
private lateinit var audioManager: AudioManager
private val afChangeListener = AudioManager.OnAudioFocusChangeListener { focusChange ->
Log.i("MediaPlaybackService", "Audio focus changed: $focusChange, $player.isPlaying")
when (focusChange) {
AudioManager.AUDIOFOCUS_GAIN -> {
player.volume = 1.0f
if (!player.isPlaying) player.play()
}
AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK -> {
player.volume = 0.3f
}
AudioManager.AUDIOFOCUS_LOSS_TRANSIENT -> {
if (player.isPlaying) player.pause()
}
}
}
companion object {
private const val CHANNEL_ID = "media2_playback_channel"
private const val NOTIFICATION_ID = 1002
private const val MEDIA_ROOT_ID = "media_root_id"
var pluginEventTrigger: ((String, JSObject) -> Unit)? = null
var currentTitle: String = "Read Aloud"
var currentArtist: String = "Reading your content"
var currentArtwork: Bitmap? = null
}
override fun onCreate() {
super.onCreate()
audioManager = getSystemService(Context.AUDIO_SERVICE) as AudioManager
val result = audioManager.requestAudioFocus(
afChangeListener,
AudioManager.STREAM_MUSIC,
AudioManager.AUDIOFOCUS_GAIN
)
if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
Log.d("MediaPlaybackService", "Audio focus granted")
} else {
Log.w("MediaPlaybackService", "Failed to gain audio focus")
}
player = ExoPlayer.Builder(this).build()
mediaSession = MediaSessionCompat(baseContext, "ReadestMediaSession").apply {
stateBuilder = PlaybackStateCompat.Builder().setActions(
PlaybackStateCompat.ACTION_PLAY or
PlaybackStateCompat.ACTION_PLAY_PAUSE or
PlaybackStateCompat.ACTION_PAUSE or
PlaybackStateCompat.ACTION_STOP or
PlaybackStateCompat.ACTION_SKIP_TO_NEXT or
PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS
)
setPlaybackState(stateBuilder.build())
setCallback(SessionCallback())
setSessionToken(sessionToken)
isActive = true
}
player.addListener(object : Player.Listener {
override fun onIsPlayingChanged(isPlaying: Boolean) {
updatePlaybackState()
}
override fun onPlaybackStateChanged(playbackState: Int) {
updatePlaybackState()
}
})
val mediaItem = MediaItem.fromUri("asset:///silence.mp3")
player.setMediaItem(mediaItem)
player.repeatMode = Player.REPEAT_MODE_ONE
player.prepare()
player.playWhenReady = true
showNotification(PlaybackStateCompat.STATE_PLAYING)
}
private inner class SessionCallback : MediaSessionCompat.Callback() {
override fun onPlay() {
player.play()
pluginEventTrigger?.invoke("media-session-play", JSObject())
updatePlaybackState()
}
override fun onPause() {
player.pause()
pluginEventTrigger?.invoke("media-session-pause", JSObject())
updatePlaybackState()
}
override fun onSkipToNext() {
player.seekTo(0)
pluginEventTrigger?.invoke("media-session-next", JSObject())
}
override fun onSkipToPrevious() {
player.seekTo(0)
pluginEventTrigger?.invoke("media-session-previous", JSObject())
}
}
private fun updatePlaybackState() {
val state = if (player.isPlaying) PlaybackStateCompat.STATE_PLAYING else PlaybackStateCompat.STATE_PAUSED
mediaSession?.setPlaybackState(
stateBuilder.setState(state, player.currentPosition, 1f).build()
)
showNotification(state)
}
private fun showNotification(playbackState: Int) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val channel = NotificationChannel(CHANNEL_ID, "Media Controls", NotificationManager.IMPORTANCE_LOW)
getSystemService(NotificationManager::class.java).createNotificationChannel(channel)
}
startForeground(NOTIFICATION_ID, buildNotification(playbackState))
}
private fun buildNotification(playbackState: Int): Notification {
val builder = NotificationCompat.Builder(this, CHANNEL_ID).apply {
setContentTitle(currentTitle)
setContentText(currentArtist)
setLargeIcon(currentArtwork)
setContentIntent(mediaSession!!.controller.sessionActivity)
setDeleteIntent(MediaButtonReceiver.buildMediaButtonPendingIntent(this@MediaPlaybackService, PlaybackStateCompat.ACTION_STOP))
setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
setSmallIcon(R.drawable.notification_icon)
setStyle(
androidx.media.app.NotificationCompat.MediaStyle()
.setMediaSession(mediaSession?.sessionToken)
.setShowActionsInCompactView(0)
)
}
return builder.build()
}
override fun onGetRoot(clientPackageName: String, clientUid: Int, rootHints: Bundle?): BrowserRoot? {
return BrowserRoot(MEDIA_ROOT_ID, null)
}
override fun onLoadChildren(parentId: String, result: Result<MutableList<MediaBrowserCompat.MediaItem>>) {
result.sendResult(null)
}
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
MediaButtonReceiver.handleIntent(mediaSession, intent)
if (intent?.action == "UPDATE_METADATA") {
currentTitle = intent.getStringExtra("title") ?: currentTitle
currentArtist = intent.getStringExtra("artist") ?: currentArtist
val newArtwork = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
intent.getParcelableExtra("artwork", Bitmap::class.java)
} else {
@Suppress("DEPRECATION")
intent.getParcelableExtra("artwork")
}
if (newArtwork != null) {
currentArtwork = newArtwork
}
val metadataBuilder = MediaMetadataCompat.Builder()
.putString(MediaMetadataCompat.METADATA_KEY_TITLE, currentTitle)
.putString(MediaMetadataCompat.METADATA_KEY_ARTIST, currentArtist)
.putBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM_ART, currentArtwork)
mediaSession?.setMetadata(metadataBuilder.build())
showNotification(if (player.isPlaying) PlaybackStateCompat.STATE_PLAYING else PlaybackStateCompat.STATE_PAUSED)
} else if (intent?.action == "UPDATE_PLAYBACK_STATE") {
val isPlaying = intent.getBooleanExtra("playing", false)
val position = intent.getLongExtra("position", 0L) // in milliseconds
val duration = intent.getLongExtra("duration", 0L) // in milliseconds
if (isPlaying && !player.isPlaying) {
player.play()
} else if (!isPlaying && player.isPlaying) {
player.pause()
}
player.seekTo(position)
val state = if (isPlaying) PlaybackStateCompat.STATE_PLAYING else PlaybackStateCompat.STATE_PAUSED
mediaSession?.setPlaybackState(
stateBuilder.setState(state, position, 1f).build()
)
showNotification(state)
}
return super.onStartCommand(intent, flags, startId)
}
override fun onDestroy() {
super.onDestroy()
player.release()
mediaSession?.release()
}
}
@@ -1,5 +1,6 @@
package com.readest.native_tts
import android.Manifest
import android.os.Bundle
import android.app.Activity
import android.content.Context
@@ -8,8 +9,12 @@ import android.speech.tts.TextToSpeech
import android.speech.tts.UtteranceProgressListener
import android.speech.tts.Voice
import android.util.Log
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import androidx.core.content.ContextCompat
import app.tauri.annotation.Command
import app.tauri.annotation.InvokeArg
import app.tauri.annotation.Permission
import app.tauri.annotation.TauriPlugin
import app.tauri.plugin.Invoke
import app.tauri.plugin.JSObject
@@ -25,6 +30,16 @@ import java.util.concurrent.ConcurrentHashMap
import java.util.concurrent.atomic.AtomicBoolean
import java.util.concurrent.atomic.AtomicReference
import java.util.*
import java.net.URL
import android.app.NotificationChannel
import android.app.NotificationManager
import android.app.Service
import android.content.Intent
import android.os.Build
import android.os.IBinder
import androidx.core.app.NotificationCompat
import androidx.core.app.NotificationManagerCompat
data class TTSVoiceData(
val id: String,
@@ -60,12 +75,45 @@ class SetVoiceArgs(
val voice: String? = null
)
@TauriPlugin
@InvokeArg
class UpdateMediaSessionMetadataArgs {
var title: String? = null
var artist: String? = null
var album: String? = null
var artwork: String? = null
}
@InvokeArg
class UpdateMediaSessionStateArgs {
var playing: Boolean? = null
var position: Int? = null // in milliseconds
var duration: Int? = null // in milliseconds
}
@InvokeArg
class SetMediaSessionActiveArgs {
var active: Boolean? = null
var keepAppInForeground: Boolean? = null
var notificationTitle: String? = null
var notificationText: String? = null
var foregroundServiceTitle: String? = null
var foregroundServiceText: String? = null
}
@TauriPlugin(
permissions = [
Permission(strings = [Manifest.permission.POST_NOTIFICATIONS], alias = "postNotification")
]
)
class NativeTTSPlugin(private val activity: Activity) : Plugin(activity) {
companion object {
private const val TAG = "NativeTTSPlugin"
private const val CHANNEL_NAME = "tts_events"
var NOTIFICATION_TITLE = "Read Aloud"
var NOTIFICATION_TEXT = "Ready to read aloud"
var FOREGROUND_SERVICE_TITLE = "Read Aloud"
var FOREGROUND_SERVICE_TEXT = "Ready to read aloud"
}
private var textToSpeech: TextToSpeech? = null
@@ -77,9 +125,8 @@ class NativeTTSPlugin(private val activity: Activity) : Plugin(activity) {
private val eventChannels = ConcurrentHashMap<String, Channel<TTSMessageEvent>>()
private val speakingJobs = ConcurrentHashMap<String, Job>()
private val coroutineScope = CoroutineScope(Dispatchers.Main + SupervisorJob())
@Command
fun init(invoke: Invoke) {
coroutineScope.launch {
@@ -373,13 +420,121 @@ class NativeTTSPlugin(private val activity: Activity) : Plugin(activity) {
invoke.reject("Exception getting voices: ${e.message}")
}
}
private suspend fun loadArtworkFromUrl(urlString: String): Bitmap? {
return withContext(Dispatchers.IO) {
try {
when {
urlString.startsWith("data:image/") -> {
val base64Data = urlString.substringAfter("base64,")
val decodedBytes = android.util.Base64.decode(base64Data, android.util.Base64.DEFAULT)
BitmapFactory.decodeByteArray(decodedBytes, 0, decodedBytes.size)
}
urlString.startsWith("http") -> {
val url = URL(urlString)
val input: java.io.InputStream = url.openStream()
BitmapFactory.decodeStream(input)
}
else -> {
val assetPath = urlString.removePrefix("/")
val inputStream = activity.assets.open(assetPath)
BitmapFactory.decodeStream(inputStream)
}
}
} catch (e: Exception) {
null
}
}
}
@Command
fun update_media_session_metadata(invoke: Invoke) {
val args = invoke.parseArgs(UpdateMediaSessionMetadataArgs::class.java)
val title = args.title ?: ""
val artist = args.artist ?: ""
val album = args.album ?: ""
coroutineScope.launch {
try {
val artworkBitmap = args.artwork?.let { loadArtworkFromUrl(it) }
val intent = Intent(activity, MediaPlaybackService::class.java).apply {
action = "UPDATE_METADATA"
putExtra("title", title)
putExtra("artist", artist)
putExtra("album", album)
putExtra("artwork", artworkBitmap)
}
activity.startService(intent)
invoke.resolve()
} catch (e: Exception) {
invoke.reject("Failed to update metadata: ${e.message}")
}
}
}
@Command
fun update_media_session_state(invoke: Invoke) {
var args = invoke.parseArgs(UpdateMediaSessionStateArgs::class.java)
val isPlaying = args.playing ?: false
val position = args.position ?: 0
val duration = args.duration ?: 0
try {
val intent = Intent(activity, MediaPlaybackService::class.java).apply {
action = "UPDATE_PLAYBACK_STATE"
putExtra("playing", isPlaying)
putExtra("position", position)
putExtra("duration", duration)
}
activity.startService(intent)
invoke.resolve()
} catch (e: Exception) {
invoke.reject("Failed to update playback state: ${e.message}")
}
}
@Command
fun set_media_session_active(invoke: Invoke) {
var args = invoke.parseArgs(SetMediaSessionActiveArgs::class.java)
val active = args.active ?: true
args.notificationTitle?.let { NOTIFICATION_TITLE = it }
args.notificationText?.let { NOTIFICATION_TEXT = it }
args.foregroundServiceTitle?.let { FOREGROUND_SERVICE_TITLE = it }
args.foregroundServiceText?.let { FOREGROUND_SERVICE_TEXT = it }
try {
val intent = Intent(activity, MediaPlaybackService::class.java)
if (active) {
MediaPlaybackService.pluginEventTrigger = { event, data -> trigger(event, data) }
MediaPlaybackService.currentTitle = FOREGROUND_SERVICE_TITLE
MediaPlaybackService.currentArtist = FOREGROUND_SERVICE_TEXT
ContextCompat.startForegroundService(activity, intent)
} else {
activity.stopService(intent)
MediaPlaybackService.pluginEventTrigger = null
}
invoke.resolve()
} catch (e: Exception) {
invoke.reject("Failed to set media session active state: ${e.message}")
}
}
fun destroy() {
coroutineScope.cancel()
textToSpeech?.shutdown()
eventChannels.values.forEach { it.close() }
eventChannels.clear()
speakingJobs.values.forEach { it.cancel() }
speakingJobs.clear()
try {
val intent = Intent(activity, MediaPlaybackService::class.java)
activity.stopService(intent)
coroutineScope.cancel()
textToSpeech?.shutdown()
eventChannels.values.forEach { it.close() }
eventChannels.clear()
speakingJobs.values.forEach { it.cancel() }
speakingJobs.clear()
Log.d(TAG, "Plugin destroyed successfully")
} catch (e: Exception) {
Log.e(TAG, "Error during plugin destruction", e)
}
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

@@ -8,6 +8,11 @@ const COMMANDS: &[&str] = &[
"set_pitch",
"set_voice",
"get_all_voices",
"set_media_session_active",
"update_media_session_state",
"update_media_session_metadata",
"checkPermissions",
"requestPermissions",
"registerListener",
"remove_listener",
];
@@ -0,0 +1,13 @@
# Automatically generated - DO NOT EDIT!
"$schema" = "../../schemas/schema.json"
[[permission]]
identifier = "allow-checkPermissions"
description = "Enables the checkPermissions command without any pre-configured scope."
commands.allow = ["checkPermissions"]
[[permission]]
identifier = "deny-checkPermissions"
description = "Denies the checkPermissions command without any pre-configured scope."
commands.deny = ["checkPermissions"]
@@ -0,0 +1,13 @@
# Automatically generated - DO NOT EDIT!
"$schema" = "../../schemas/schema.json"
[[permission]]
identifier = "allow-requestPermissions"
description = "Enables the requestPermissions command without any pre-configured scope."
commands.allow = ["requestPermissions"]
[[permission]]
identifier = "deny-requestPermissions"
description = "Denies the requestPermissions command without any pre-configured scope."
commands.deny = ["requestPermissions"]
@@ -0,0 +1,13 @@
# Automatically generated - DO NOT EDIT!
"$schema" = "../../schemas/schema.json"
[[permission]]
identifier = "allow-set-media-session-active"
description = "Enables the set_media_session_active command without any pre-configured scope."
commands.allow = ["set_media_session_active"]
[[permission]]
identifier = "deny-set-media-session-active"
description = "Denies the set_media_session_active command without any pre-configured scope."
commands.deny = ["set_media_session_active"]
@@ -0,0 +1,13 @@
# Automatically generated - DO NOT EDIT!
"$schema" = "../../schemas/schema.json"
[[permission]]
identifier = "allow-update-media-session-metadata"
description = "Enables the update_media_session_metadata command without any pre-configured scope."
commands.allow = ["update_media_session_metadata"]
[[permission]]
identifier = "deny-update-media-session-metadata"
description = "Denies the update_media_session_metadata command without any pre-configured scope."
commands.deny = ["update_media_session_metadata"]
@@ -0,0 +1,13 @@
# Automatically generated - DO NOT EDIT!
"$schema" = "../../schemas/schema.json"
[[permission]]
identifier = "allow-update-media-session-state"
description = "Enables the update_media_session_state command without any pre-configured scope."
commands.allow = ["update_media_session_state"]
[[permission]]
identifier = "deny-update-media-session-state"
description = "Denies the update_media_session_state command without any pre-configured scope."
commands.deny = ["update_media_session_state"]
@@ -13,6 +13,11 @@ Default permissions for the plugin
- `allow-set-pitch`
- `allow-set-voice`
- `allow-get-all-voices`
- `allow-set-media-session-active`
- `allow-update-media-session-state`
- `allow-update-media-session-metadata`
- `allow-checkPermissions`
- `allow-requestPermissions`
- `allow-registerListener`
- `allow-remove-listener`
@@ -25,6 +30,32 @@ Default permissions for the plugin
</tr>
<tr>
<td>
`native-tts:allow-checkPermissions`
</td>
<td>
Enables the checkPermissions command without any pre-configured scope.
</td>
</tr>
<tr>
<td>
`native-tts:deny-checkPermissions`
</td>
<td>
Denies the checkPermissions command without any pre-configured scope.
</td>
</tr>
<tr>
<td>
@@ -158,6 +189,32 @@ Denies the remove_listener command without any pre-configured scope.
<tr>
<td>
`native-tts:allow-requestPermissions`
</td>
<td>
Enables the requestPermissions command without any pre-configured scope.
</td>
</tr>
<tr>
<td>
`native-tts:deny-requestPermissions`
</td>
<td>
Denies the requestPermissions command without any pre-configured scope.
</td>
</tr>
<tr>
<td>
`native-tts:allow-resume`
</td>
@@ -184,6 +241,32 @@ Denies the resume command without any pre-configured scope.
<tr>
<td>
`native-tts:allow-set-media-session-active`
</td>
<td>
Enables the set_media_session_active command without any pre-configured scope.
</td>
</tr>
<tr>
<td>
`native-tts:deny-set-media-session-active`
</td>
<td>
Denies the set_media_session_active command without any pre-configured scope.
</td>
</tr>
<tr>
<td>
`native-tts:allow-set-pitch`
</td>
@@ -308,6 +391,58 @@ Enables the stop command without any pre-configured scope.
Denies the stop command without any pre-configured scope.
</td>
</tr>
<tr>
<td>
`native-tts:allow-update-media-session-metadata`
</td>
<td>
Enables the update_media_session_metadata command without any pre-configured scope.
</td>
</tr>
<tr>
<td>
`native-tts:deny-update-media-session-metadata`
</td>
<td>
Denies the update_media_session_metadata command without any pre-configured scope.
</td>
</tr>
<tr>
<td>
`native-tts:allow-update-media-session-state`
</td>
<td>
Enables the update_media_session_state command without any pre-configured scope.
</td>
</tr>
<tr>
<td>
`native-tts:deny-update-media-session-state`
</td>
<td>
Denies the update_media_session_state command without any pre-configured scope.
</td>
</tr>
</table>
@@ -10,6 +10,11 @@ permissions = [
"allow-set-pitch",
"allow-set-voice",
"allow-get-all-voices",
"allow-set-media-session-active",
"allow-update-media-session-state",
"allow-update-media-session-metadata",
"allow-checkPermissions",
"allow-requestPermissions",
"allow-registerListener",
"allow-remove-listener",
]
@@ -294,6 +294,18 @@
"PermissionKind": {
"type": "string",
"oneOf": [
{
"description": "Enables the checkPermissions command without any pre-configured scope.",
"type": "string",
"const": "allow-checkPermissions",
"markdownDescription": "Enables the checkPermissions command without any pre-configured scope."
},
{
"description": "Denies the checkPermissions command without any pre-configured scope.",
"type": "string",
"const": "deny-checkPermissions",
"markdownDescription": "Denies the checkPermissions command without any pre-configured scope."
},
{
"description": "Enables the get_all_voices command without any pre-configured scope.",
"type": "string",
@@ -354,6 +366,18 @@
"const": "deny-remove-listener",
"markdownDescription": "Denies the remove_listener command without any pre-configured scope."
},
{
"description": "Enables the requestPermissions command without any pre-configured scope.",
"type": "string",
"const": "allow-requestPermissions",
"markdownDescription": "Enables the requestPermissions command without any pre-configured scope."
},
{
"description": "Denies the requestPermissions command without any pre-configured scope.",
"type": "string",
"const": "deny-requestPermissions",
"markdownDescription": "Denies the requestPermissions command without any pre-configured scope."
},
{
"description": "Enables the resume command without any pre-configured scope.",
"type": "string",
@@ -366,6 +390,18 @@
"const": "deny-resume",
"markdownDescription": "Denies the resume command without any pre-configured scope."
},
{
"description": "Enables the set_media_session_active command without any pre-configured scope.",
"type": "string",
"const": "allow-set-media-session-active",
"markdownDescription": "Enables the set_media_session_active command without any pre-configured scope."
},
{
"description": "Denies the set_media_session_active command without any pre-configured scope.",
"type": "string",
"const": "deny-set-media-session-active",
"markdownDescription": "Denies the set_media_session_active command without any pre-configured scope."
},
{
"description": "Enables the set_pitch command without any pre-configured scope.",
"type": "string",
@@ -427,10 +463,34 @@
"markdownDescription": "Denies the stop command without any pre-configured scope."
},
{
"description": "Default permissions for the plugin\n#### This default permission set includes:\n\n- `allow-init`\n- `allow-speak`\n- `allow-stop`\n- `allow-pause`\n- `allow-resume`\n- `allow-set-rate`\n- `allow-set-pitch`\n- `allow-set-voice`\n- `allow-get-all-voices`\n- `allow-registerListener`\n- `allow-remove-listener`",
"description": "Enables the update_media_session_metadata command without any pre-configured scope.",
"type": "string",
"const": "allow-update-media-session-metadata",
"markdownDescription": "Enables the update_media_session_metadata command without any pre-configured scope."
},
{
"description": "Denies the update_media_session_metadata command without any pre-configured scope.",
"type": "string",
"const": "deny-update-media-session-metadata",
"markdownDescription": "Denies the update_media_session_metadata command without any pre-configured scope."
},
{
"description": "Enables the update_media_session_state command without any pre-configured scope.",
"type": "string",
"const": "allow-update-media-session-state",
"markdownDescription": "Enables the update_media_session_state command without any pre-configured scope."
},
{
"description": "Denies the update_media_session_state command without any pre-configured scope.",
"type": "string",
"const": "deny-update-media-session-state",
"markdownDescription": "Denies the update_media_session_state command without any pre-configured scope."
},
{
"description": "Default permissions for the plugin\n#### This default permission set includes:\n\n- `allow-init`\n- `allow-speak`\n- `allow-stop`\n- `allow-pause`\n- `allow-resume`\n- `allow-set-rate`\n- `allow-set-pitch`\n- `allow-set-voice`\n- `allow-get-all-voices`\n- `allow-set-media-session-active`\n- `allow-update-media-session-state`\n- `allow-update-media-session-metadata`\n- `allow-checkPermissions`\n- `allow-requestPermissions`\n- `allow-registerListener`\n- `allow-remove-listener`",
"type": "string",
"const": "default",
"markdownDescription": "Default permissions for the plugin\n#### This default permission set includes:\n\n- `allow-init`\n- `allow-speak`\n- `allow-stop`\n- `allow-pause`\n- `allow-resume`\n- `allow-set-rate`\n- `allow-set-pitch`\n- `allow-set-voice`\n- `allow-get-all-voices`\n- `allow-registerListener`\n- `allow-remove-listener`"
"markdownDescription": "Default permissions for the plugin\n#### This default permission set includes:\n\n- `allow-init`\n- `allow-speak`\n- `allow-stop`\n- `allow-pause`\n- `allow-resume`\n- `allow-set-rate`\n- `allow-set-pitch`\n- `allow-set-voice`\n- `allow-get-all-voices`\n- `allow-set-media-session-active`\n- `allow-update-media-session-state`\n- `allow-update-media-session-metadata`\n- `allow-checkPermissions`\n- `allow-requestPermissions`\n- `allow-registerListener`\n- `allow-remove-listener`"
}
]
}
@@ -51,3 +51,27 @@ pub(crate) async fn set_voice<R: Runtime>(app: AppHandle<R>, payload: SetVoiceAr
pub(crate) async fn get_all_voices<R: Runtime>(app: AppHandle<R>) -> Result<GetVoicesResponse> {
app.native_tts().get_all_voices()
}
#[command]
pub(crate) async fn set_media_session_active<R: Runtime>(
app: AppHandle<R>,
payload: SetMediaSessionActiveRequest,
) -> Result<()> {
app.native_tts().set_media_session_active(payload)
}
#[command]
pub(crate) async fn update_media_session_state<R: Runtime>(
app: AppHandle<R>,
payload: UpdateMediaSessionStateRequest,
) -> Result<()> {
app.native_tts().update_media_session_state(payload)
}
#[command]
pub(crate) async fn update_media_session_metadata<R: Runtime>(
app: AppHandle<R>,
payload: UpdateMediaSessionMetadataRequest,
) -> Result<()> {
app.native_tts().update_media_session_metadata(payload)
}
@@ -41,4 +41,22 @@ impl<R: Runtime> NativeTts<R> {
pub fn get_all_voices(&self) -> crate::Result<GetVoicesResponse> {
Err(crate::Error::UnsupportedPlatformError)
}
pub fn set_media_session_active(
&self,
_payload: SetMediaSessionActiveRequest,
) -> crate::Result<()> {
Err(crate::Error::UnsupportedPlatformError)
}
pub fn update_media_session_state(
&self,
_payload: UpdateMediaSessionStateRequest,
) -> crate::Result<()> {
Err(crate::Error::UnsupportedPlatformError)
}
pub fn update_media_session_metadata(
&self,
_payload: UpdateMediaSessionMetadataRequest,
) -> crate::Result<()> {
Err(crate::Error::UnsupportedPlatformError)
}
}
@@ -45,6 +45,9 @@ pub fn init<R: Runtime>() -> TauriPlugin<R> {
commands::set_pitch,
commands::set_voice,
commands::get_all_voices,
commands::set_media_session_active,
commands::update_media_session_state,
commands::update_media_session_metadata,
])
.setup(|app, api| {
#[cfg(mobile)]
@@ -87,3 +87,36 @@ impl<R: Runtime> NativeTts<R> {
.map_err(Into::into)
}
}
impl<R: Runtime> NativeTts<R> {
pub fn set_media_session_active(
&self,
payload: SetMediaSessionActiveRequest,
) -> crate::Result<()> {
self.0
.run_mobile_plugin("set_media_session_active", payload)
.map_err(Into::into)
}
}
impl<R: Runtime> NativeTts<R> {
pub fn update_media_session_state(
&self,
payload: UpdateMediaSessionStateRequest,
) -> crate::Result<()> {
self.0
.run_mobile_plugin("update_media_session_state", payload)
.map_err(Into::into)
}
}
impl<R: Runtime> NativeTts<R> {
pub fn update_media_session_metadata(
&self,
payload: UpdateMediaSessionMetadataRequest,
) -> crate::Result<()> {
self.0
.run_mobile_plugin("update_media_session_metadata", payload)
.map_err(Into::into)
}
}
@@ -61,3 +61,31 @@ pub struct SetVoiceArgs {
pub struct GetVoicesResponse {
pub voices: Vec<TTSVoice>,
}
#[derive(Debug, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct SetMediaSessionActiveRequest {
pub active: bool,
pub keep_app_in_foreground: bool,
pub notification_title: Option<String>,
pub notification_text: Option<String>,
pub foreground_service_title: Option<String>,
pub foreground_service_text: Option<String>,
}
#[derive(Debug, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct UpdateMediaSessionStateRequest {
pub playing: bool,
pub position: Option<f64>,
pub duration: Option<f64>,
}
#[derive(Debug, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct UpdateMediaSessionMetadataRequest {
pub title: Option<String>,
pub artist: Option<String>,
pub album: Option<String>,
pub artwork: Option<String>,
}
+41 -20
View File
@@ -6,6 +6,7 @@ extern crate cocoa;
#[macro_use]
extern crate objc;
use tauri::utils::config::BackgroundThrottlingPolicy;
#[cfg(target_os = "macos")]
use tauri::TitleBarStyle;
@@ -41,6 +42,22 @@ fn allow_file_in_scopes(app: &AppHandle, files: Vec<PathBuf>) {
}
}
#[cfg(desktop)]
fn allow_dir_in_scopes(app: &AppHandle, dir: &PathBuf) {
let fs_scope = app.fs_scope();
let asset_protocol_scope = app.asset_protocol_scope();
if let Err(e) = fs_scope.allow_directory(dir, true) {
eprintln!("Failed to allow directory in fs_scope: {e}");
} else {
println!("Allowed directory in fs_scope: {dir:?}");
}
if let Err(e) = asset_protocol_scope.allow_directory(dir, true) {
eprintln!("Failed to allow directory in asset_protocol_scope: {e}");
} else {
println!("Allowed directory in asset_protocol_scope: {dir:?}");
}
}
#[cfg(desktop)]
fn get_files_from_argv(argv: Vec<String>) -> Vec<PathBuf> {
let mut files = Vec::new();
@@ -86,15 +103,6 @@ fn set_window_open_with_files(app: &AppHandle, files: Vec<PathBuf>) {
}
}
#[cfg(desktop)]
fn set_rounded_window(app: &AppHandle, rounded: bool) {
let window = app.get_webview_window("main").unwrap();
let script = format!("window.IS_ROUNDED = {rounded};");
if let Err(e) = window.eval(&script) {
eprintln!("Failed to set IS_ROUNDED variable: {e}");
}
}
#[command]
async fn start_server(window: Window) -> Result<u16, String> {
start(move |url| {
@@ -110,6 +118,15 @@ fn get_environment_variable(name: &str) -> String {
std::env::var(String::from(name)).unwrap_or(String::from(""))
}
#[tauri::command]
fn get_executable_dir() -> String {
std::env::current_exe()
.ok()
.and_then(|path| path.parent().map(|p| p.to_path_buf()))
.map(|p| p.to_string_lossy().to_string())
.unwrap_or_default()
}
#[derive(Clone, serde::Serialize)]
#[allow(dead_code)]
struct Payload {
@@ -127,6 +144,7 @@ pub fn run() {
download_file,
upload_file,
get_environment_variable,
get_executable_dir,
#[cfg(target_os = "macos")]
macos::safari_auth::auth_with_safari,
#[cfg(target_os = "macos")]
@@ -134,14 +152,15 @@ pub fn run() {
#[cfg(target_os = "macos")]
macos::traffic_light::set_traffic_lights,
])
.plugin(tauri_plugin_fs::init())
.plugin(tauri_plugin_persisted_scope::init())
.plugin(tauri_plugin_shell::init())
.plugin(tauri_plugin_opener::init())
.plugin(tauri_plugin_http::init())
.plugin(tauri_plugin_os::init())
.plugin(tauri_plugin_dialog::init())
.plugin(tauri_plugin_native_bridge::init())
.plugin(tauri_plugin_native_tts::init())
.plugin(tauri_plugin_fs::init());
.plugin(tauri_plugin_native_tts::init());
#[cfg(desktop)]
let builder = builder.plugin(tauri_plugin_single_instance::init(|app, argv, cwd| {
@@ -192,6 +211,11 @@ pub fn run() {
}
}
#[cfg(desktop)]
{
allow_dir_in_scopes(app.handle(), &PathBuf::from(get_executable_dir()));
}
#[cfg(desktop)]
{
app.handle().plugin(tauri_plugin_cli::init())?;
@@ -203,13 +227,6 @@ pub fn run() {
.eval("window.__READEST_CLI_ACCESS = true;")
.expect("Failed to set cli access config");
set_rounded_window(&app_handle, true);
#[cfg(target_os = "windows")]
if tauri_plugin_os::version()
<= tauri_plugin_os::Version::from_string("10.0.19045")
{
set_rounded_window(&app_handle, false);
}
#[cfg(target_os = "linux")]
{
let is_appimage = std::env::var("APPIMAGE").is_ok()
@@ -240,7 +257,9 @@ pub fn run() {
eprintln!("Failed to initialize tauri_plugin_log: {e}");
};
let win_builder = WebviewWindowBuilder::new(app, "main", WebviewUrl::default());
let win_builder = WebviewWindowBuilder::new(app, "main", WebviewUrl::default())
.background_throttling(BackgroundThrottlingPolicy::Disabled)
.background_color(tauri::window::Color(50, 49, 48, 255));
#[cfg(desktop)]
let win_builder = win_builder.inner_size(800.0, 600.0).resizable(true);
@@ -265,7 +284,9 @@ pub fn run() {
}
#[cfg(target_os = "linux")]
{
builder = builder.transparent(true);
builder = builder
.transparent(true)
.background_color(tauri::window::Color(0, 0, 0, 0));
}
builder
+9 -1
View File
@@ -30,6 +30,7 @@
"$APPDATA/**/*",
"$APPCACHE/**/*",
"$TEMP/**/*",
"**/Readest/**/*",
"/private/var/mobile/Containers/Data/Application/**/*"
],
"deny": []
@@ -86,11 +87,18 @@
},
{
"name": "azw",
"ext": ["azw", "azw3"],
"ext": ["azw"],
"description": "AZW file",
"mimeType": "application/vnd.amazon.ebook",
"role": "Viewer"
},
{
"name": "azw3",
"ext": ["azw3"],
"description": "AZW3 file",
"mimeType": "application/vnd.amazon.mobi8-ebook",
"role": "Viewer"
},
{
"name": "fb2",
"ext": ["fb2"],
@@ -88,7 +88,7 @@ describe('CFIToXPointerConverter', () => {
expect(originalCfi).toEqual(convertedCfi);
expect(xpointer).toEqual({
xpointer: '/body/DocFragment[2]/body/div/p[0]',
xpointer: '/body/DocFragment[2]/body/div/p[1]',
});
});
@@ -99,7 +99,7 @@ describe('CFIToXPointerConverter', () => {
expect(originalCfi).toEqual(convertedCfi);
expect(xpointer).toEqual({
xpointer: '/body/DocFragment[2]/body/div/p[1]',
xpointer: '/body/DocFragment[2]/body/div/p[2]',
});
});
@@ -110,7 +110,7 @@ describe('CFIToXPointerConverter', () => {
expect(originalCfi).toEqual(convertedCfi);
expect(xpointer).toEqual({
xpointer: '/body/DocFragment[2]/body/div/p[2]',
xpointer: '/body/DocFragment[2]/body/div/p[3]',
});
});
});
@@ -126,9 +126,9 @@ describe('CFIToXPointerConverter', () => {
const convertedCfi = converter.xPointerToCFI(xpointer.pos0!, xpointer.pos1!);
expect(originalCfi).toEqual(convertedCfi);
expect(xpointer.xpointer).toEqual('/body/DocFragment[3]/body/div/p[0]/text().6');
expect(xpointer.pos0).toEqual('/body/DocFragment[3]/body/div/p[0]/text().6');
expect(xpointer.pos1).toEqual('/body/DocFragment[3]/body/div/p[1]/text().16');
expect(xpointer.xpointer).toEqual('/body/DocFragment[3]/body/div/p[1]/text().6');
expect(xpointer.pos0).toEqual('/body/DocFragment[3]/body/div/p[1]/text().6');
expect(xpointer.pos1).toEqual('/body/DocFragment[3]/body/div/p[2]/text().16');
});
it('should convert range CFI within same element', () => {
@@ -147,8 +147,8 @@ describe('CFIToXPointerConverter', () => {
const convertedCfi = converter.xPointerToCFI(xpointer.pos0!, xpointer.pos1!);
expect(originalCfi).toEqual(convertedCfi);
expect(xpointer.pos0).toMatch(/p\[0\]/);
expect(xpointer.pos1).toMatch(/p\[2\]/);
expect(xpointer.pos0).toMatch(/p\[1\]/);
expect(xpointer.pos1).toMatch(/p\[3\]/);
});
});
@@ -163,7 +163,7 @@ describe('CFIToXPointerConverter', () => {
const convertedCfi = converter.xPointerToCFI(xpointer.xpointer);
expect(originalCfi).toEqual(convertedCfi);
expect(xpointer.xpointer).toMatch(/\/body\/section\[0\]/);
expect(xpointer.xpointer).toMatch(/\/body\/section\[1\]/);
});
it('should handle elements with IDs', () => {
@@ -172,7 +172,7 @@ describe('CFIToXPointerConverter', () => {
const convertedCfi = converter.xPointerToCFI(xpointer.xpointer);
expect(originalCfi).toEqual(convertedCfi);
expect(xpointer.xpointer).toMatch(/\/body\/section\[1\]\/p\[0\]/);
expect(xpointer.xpointer).toMatch(/\/body\/section\[2\]\/p\[1\]/);
});
it('should handle inline elements', () => {
@@ -181,7 +181,7 @@ describe('CFIToXPointerConverter', () => {
const convertedCfi = converter.xPointerToCFI(xpointer.xpointer);
expect(originalCfi).toEqual(convertedCfi);
expect(xpointer.xpointer).toMatch(/\/body\/section\[1\]\/p\[1\]/);
expect(xpointer.xpointer).toMatch(/\/body\/section\[2\]\/p\[2\]/);
});
});
@@ -212,7 +212,7 @@ describe('CFIToXPointerConverter', () => {
});
it('should convert XPointer to CFI for first element', () => {
const xpointer = '/body/DocFragment[2]/body/div/p[0]';
const xpointer = '/body/DocFragment[2]/body/div/p[1]';
const cfi = converter.xPointerToCFI(xpointer);
// Verify by converting back to XPointer
@@ -221,7 +221,7 @@ describe('CFIToXPointerConverter', () => {
});
it('should convert XPointer to CFI for second element', () => {
const xpointer = '/body/DocFragment[2]/body/div/p[1]';
const xpointer = '/body/DocFragment[2]/body/div/p[2]';
const cfi = converter.xPointerToCFI(xpointer);
const backToXPointer = converter.cfiToXPointer(cfi);
@@ -229,14 +229,14 @@ describe('CFIToXPointerConverter', () => {
});
it('should convert XPointer with text offset to CFI', () => {
const xpointer = '/body/DocFragment[2]/body/div[0]/p[0]/text().6';
const xpointer = '/body/DocFragment[2]/body/div[0]/p[1]/text().6';
const cfi = converter.xPointerToCFI(xpointer);
expect(cfi).toBe('epubcfi(/6/4!/4/2/2/1:6)');
});
it('should convert range XPointer to CFI', () => {
const pos0 = '/body/DocFragment[2]/body/div/p[0]/text().6';
const pos1 = '/body/DocFragment[2]/body/div/p[1]/text().16';
const pos0 = '/body/DocFragment[2]/body/div/p[1]/text().6';
const pos1 = '/body/DocFragment[2]/body/div/p[2]/text().16';
const cfi = converter.xPointerToCFI(pos0, pos1);
const xpointer = converter.cfiToXPointer(cfi);
@@ -269,7 +269,7 @@ describe('CFIToXPointerConverter', () => {
it('should handle CFI without spine step prefix', () => {
// Test the adjustSpineIndex method handles CFIs that don't start with /6/n!
const converter = new XCFI(simpleDoc, 3); // Use different spine index
const xpointer = '/body/DocFragment[4]/body/div/p[0]';
const xpointer = '/body/DocFragment[4]/body/div/p[1]';
const cfi = converter.xPointerToCFI(xpointer);
// Verify the spine step is correctly added/adjusted
@@ -331,7 +331,7 @@ describe('CFIToXPointerConverter', () => {
const cfi = 'epubcfi(/6/6!/4/2/2)'; // Empty p element
const result = converter.cfiToXPointer(cfi);
expect(result.xpointer).toBe('/body/DocFragment[3]/body/div/p[0]');
expect(result.xpointer).toBe('/body/DocFragment[3]/body/div/p[1]');
});
it('should handle whitespace-only text nodes', () => {
@@ -353,7 +353,7 @@ describe('CFIToXPointerConverter', () => {
const cfi = 'epubcfi(/6/6!/4/2/4)'; // Second p element
const result = converter.cfiToXPointer(cfi);
expect(result.xpointer).toBe('/body/DocFragment[3]/body/div/p[1]');
expect(result.xpointer).toBe('/body/DocFragment[3]/body/div/p[2]');
});
it('should handle deeply nested elements', () => {
@@ -379,7 +379,7 @@ describe('CFIToXPointerConverter', () => {
const cfi = 'epubcfi(/6/6!/4/2/2/2/2)'; // Deeply nested p
const result = converter.cfiToXPointer(cfi);
expect(result.xpointer).toBe('/body/DocFragment[3]/body/div/section/article/p[0]');
expect(result.xpointer).toBe('/body/DocFragment[3]/body/div/section/article/p[1]');
});
});
});
+8 -9
View File
@@ -67,7 +67,7 @@ export default function AuthPage() {
const router = useRouter();
const { login } = useAuth();
const { envConfig, appService } = useEnv();
const { isDarkMode } = useThemeStore();
const { isDarkMode, safeAreaInsets, isRoundedWindow } = useThemeStore();
const { isTrafficLightVisible } = useTrafficLightStore();
const { settings, setSettings, saveSettings } = useSettingsStore();
const [port, setPort] = useState<number | null>(null);
@@ -344,17 +344,15 @@ export default function AuthPage() {
return isTauriAppPlatform() ? (
<div
className={clsx(
'bg-base-100 inset-0 flex select-none flex-col items-center overflow-hidden',
appService?.isIOSApp ? 'h-[100vh]' : 'h-dvh',
appService?.isLinuxApp && 'window-border',
appService?.hasRoundedWindow && 'rounded-window',
'bg-base-100 inset-0 flex h-[100vh] select-none flex-col items-center overflow-hidden',
appService?.hasRoundedWindow && isRoundedWindow && 'window-border rounded-window',
)}
>
<div
className={clsx(
'flex h-full w-full flex-col items-center overflow-y-auto',
appService?.hasSafeAreaInset && 'pt-[env(safe-area-inset-top)]',
)}
className={clsx('flex h-full w-full flex-col items-center overflow-y-auto')}
style={{
paddingTop: `${safeAreaInsets?.top || 0}px`,
}}
>
<div
ref={headerRef}
@@ -364,6 +362,7 @@ export default function AuthPage() {
)}
>
<button
aria-label={_('Go Back')}
onClick={handleGoBack}
className={clsx('btn btn-ghost h-12 min-h-12 w-12 p-0 sm:h-8 sm:min-h-8 sm:w-8')}
>
@@ -46,7 +46,7 @@ export default function ResetPasswordPage() {
return (
<div className='flex min-h-screen items-center justify-center'>
<div className='w-full max-w-md'>
<div className='w-full max-w-md p-8'>
<Auth
supabaseClient={supabase}
view='update_password'
+2 -2
View File
@@ -4,7 +4,7 @@ import posthog from 'posthog-js';
import { useEffect, useState } from 'react';
import { useEnv } from '@/context/EnvContext';
import { useTranslation } from '@/hooks/useTranslation';
import { parseWebViewVersion } from '@/utils/ua';
import { parseWebViewInfo } from '@/utils/ua';
import { handleGlobalError } from '@/utils/error';
interface ErrorPageProps {
@@ -18,7 +18,7 @@ export default function Error({ error, reset }: ErrorPageProps) {
const [browserInfo, setBrowserInfo] = useState('');
useEffect(() => {
setBrowserInfo(parseWebViewVersion(appService));
setBrowserInfo(parseWebViewInfo(appService));
posthog.captureException(error);
handleGlobalError(error);
}, [appService, error]);
+1 -2
View File
@@ -37,12 +37,11 @@ export const viewport = {
maximumScale: 1,
userScalable: false,
viewportFit: 'cover',
themeColor: 'white',
};
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
<html>
<html lang='en'>
<head>
<title>{title}</title>
<meta

Some files were not shown because too many files have changed in this diff Show More