forked from akai/readest
Compare commits
479 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| c11f79e843 | |||
| 87f0240b0a | |||
| 2905506017 | |||
| 1936136596 | |||
| e0cf7e8d9f | |||
| 0177a03a90 | |||
| f5df80f154 | |||
| 76b239f382 | |||
| 2f430bf2ff | |||
| 0e8605d298 | |||
| 7445d5befe | |||
| e41bcfbac9 | |||
| 91bc4ddec7 | |||
| e8f70b896e | |||
| 1f4f5f8a6d | |||
| 764acf59de | |||
| eab83c6d3f | |||
| 7f62cdcab9 | |||
| e4ab06abcd | |||
| fef0aa6947 | |||
| 2935eacb1c | |||
| ad9bb58cd4 | |||
| 871d6467c3 | |||
| 3f19ce24de | |||
| 8280585e70 | |||
| 1f7483b911 | |||
| b2bb92036b | |||
| 3831f24ff7 | |||
| 3bec89c85d | |||
| 3dfe6bd65e | |||
| b00d321817 | |||
| 1af55e24da | |||
| f7b2a2432c | |||
| db3dee025b | |||
| 25352efece | |||
| 1297e33c62 | |||
| 8274c6bc4f | |||
| ed5bbd25d6 | |||
| d06e1849cc | |||
| 34ad6e6749 | |||
| b163012488 | |||
| f9a3559086 | |||
| 674a0bf16d | |||
| 9b53ccc9de | |||
| 7a605a357a | |||
| af649edd0d | |||
| 64a71e25e4 | |||
| 51a3767940 | |||
| a8572ab7c6 | |||
| 907b672313 | |||
| 8df9f909b4 | |||
| bcd7a90f27 | |||
| 5646e0cfb5 | |||
| fad27d74a0 | |||
| 5fbbfa523b | |||
| 569c6707a4 | |||
| 99f8a29326 | |||
| 04737d6f35 | |||
| 8850e6c00f | |||
| 93b96d64eb | |||
| 9f8894c1e0 | |||
| dac4f2e8ec | |||
| 54bc1514df | |||
| 97cab2d70b | |||
| 13588b4a65 | |||
| 0f5bd5ca1c | |||
| a74c1a56a9 | |||
| 1e9bd1d821 | |||
| 02cc0a9ebb | |||
| 5273ef75dc | |||
| bd957a4eb8 | |||
| 38552a0c2e | |||
| 0609e828b1 | |||
| 35ade2c855 | |||
| b68c14da1f | |||
| 5c41394961 | |||
| 5685944599 | |||
| 94e761f681 | |||
| 7f636a2072 | |||
| 480b8b98a3 | |||
| d1fb67316f | |||
| f0e9ddd2ae | |||
| b16a4445ae | |||
| 515d47e64d | |||
| 3fd78c4ed8 | |||
| 152a95941a | |||
| bf5805910d | |||
| 431d14f4a4 | |||
| 0d2e5b7c76 | |||
| e949476d27 | |||
| 0afff573a1 | |||
| d4bb61f12b | |||
| 09c45b4615 | |||
| d8eef87bf0 | |||
| 66d2fdf999 | |||
| d8e0ceeff1 | |||
| f3ad97b989 | |||
| 1bb49ab023 | |||
| f9a0b39586 | |||
| c533da498d | |||
| b50bc0b854 | |||
| 96c465931c | |||
| 2bd54ac236 | |||
| 6ad549d13c | |||
| 67249370c9 | |||
| fe3ab011ca | |||
| 6cb4278b98 | |||
| 51468862a2 | |||
| b3a44d066f | |||
| 68d4538d40 | |||
| 80105af839 | |||
| 3904c1e8e7 | |||
| 99be6c58e2 | |||
| 664cc772d0 | |||
| 21208adbcf | |||
| 70eb59e2d6 | |||
| 3e7b57282e | |||
| 534582b125 | |||
| 4465e6986e | |||
| a535f6419e | |||
| 65da9c1d47 | |||
| 5f71fd9e47 | |||
| dcf75e07d1 | |||
| 79ba9b3818 | |||
| 128b238bcb | |||
| e26f7e6a2c | |||
| 4c5ff59bcf | |||
| 99b2a34bd2 | |||
| 40f3268ef3 | |||
| 4dac0850c5 | |||
| 118538ba35 | |||
| 4a92cacd84 | |||
| ce53cd2b47 | |||
| b99c1bc19a | |||
| eec2c39f19 | |||
| c6ae85484e | |||
| 7a9f46e93c | |||
| b9f6578127 | |||
| e75a3d254e | |||
| ea15906acf | |||
| 15d2784725 | |||
| ae3bb9da9a | |||
| 239b32fcc2 | |||
| f64739419b | |||
| af8f036ca3 | |||
| 24a87508c6 | |||
| 548d50a882 | |||
| 1e81ab5205 | |||
| a47a480aa2 | |||
| 411f9e236d | |||
| 950bbd0821 | |||
| 2824e50b51 | |||
| 129720c916 | |||
| fd3533dba1 | |||
| 920032155b | |||
| 226bf7033e | |||
| 9444be7fcc | |||
| c9a69a922b | |||
| 9a11b05833 | |||
| 6e603ee38f | |||
| 03fd6e2e6f | |||
| 7dd11c0fb0 | |||
| 968597e52c | |||
| a534050b19 | |||
| 0be828fd66 | |||
| c6d4e2bdd6 | |||
| bf72ab86cd | |||
| fb49ddf484 | |||
| d8817a88b9 | |||
| 475becafe3 | |||
| df165576e6 | |||
| 051f2e5b13 | |||
| 83f0d135c5 | |||
| 1ed84a3256 | |||
| 9d6394fe2b | |||
| fe9603ffb8 | |||
| 681e065ac4 | |||
| f64fc5723e | |||
| a9a1dc8e70 | |||
| b1a1e35790 | |||
| 3c538c3746 | |||
| 9834bd57cf | |||
| b89171a4d8 | |||
| 92116e7455 | |||
| 8dfab2c963 | |||
| 9f261f12e9 | |||
| e74615ac1d | |||
| 3b350d6945 | |||
| 9e0e3fde7d | |||
| 52c49ddef1 | |||
| e3d52891fb | |||
| 9cd88fe839 | |||
| fca3917a12 | |||
| c90de6967b | |||
| bbbd378f9b | |||
| 9f7147f8f8 | |||
| 8a468a6d1f | |||
| c848a319ff | |||
| 5cc80db438 | |||
| 94930baa1b | |||
| 1294ef90c1 | |||
| 570598520f | |||
| 7b4fc91994 | |||
| fb387c2384 | |||
| 4ce1ebe477 | |||
| c1460f4b85 | |||
| bc94f3f790 | |||
| c8c761b017 | |||
| bdb25999c9 | |||
| c58e172a54 | |||
| 160efcd37b | |||
| d7470f4139 | |||
| 01b4e3530d | |||
| 09c62d442f | |||
| d62ad60ce8 | |||
| 8cd34c8aaa | |||
| a52d9e3a2b | |||
| 64a1ea531a | |||
| 19f9f5ea24 | |||
| ffc51e75de | |||
| 2100071991 | |||
| 563d3478ba | |||
| 2c54e9ae2f | |||
| c2eb2e2fcc | |||
| e592f40429 | |||
| 4bd7cfe57c | |||
| c31ece6742 | |||
| aba9e87fc1 | |||
| 2c4df601d8 | |||
| 8bfc90a5b0 | |||
| 8bea05478a | |||
| 42fee90a27 | |||
| 45e57c3943 | |||
| 51b0b8483f | |||
| cbf7a501b7 | |||
| edfcb75ba5 | |||
| ce76843ccc | |||
| 5bbc5ceccc | |||
| 224acd68b1 | |||
| 6c0f1b8b5f | |||
| 481d8198e9 | |||
| b1153ba051 | |||
| aad532bfdd | |||
| a71347c897 | |||
| 034f41ca10 | |||
| 539ad8dea2 | |||
| 48920a87bf | |||
| d1d0d2d59c | |||
| ea811c90c6 | |||
| 5cd5b65e83 | |||
| ea24b5a97a | |||
| 06d620db83 | |||
| 0c25b85a8a | |||
| c536450ab0 | |||
| c83e380c5a | |||
| 894a7551aa | |||
| f875ba88ac | |||
| d9a6cffe78 | |||
| 1704736bc8 | |||
| 6ce9a263ee | |||
| 038eca4267 | |||
| f0722ec0fe | |||
| fd299a61a7 | |||
| 36b7386e30 | |||
| 2670b0dc0b | |||
| c44705e269 | |||
| 7e618d456e | |||
| b28ac99a9e | |||
| 2d7d6b08a9 | |||
| b1419f9c01 | |||
| 32ea42a835 | |||
| 6083de3293 | |||
| 1c9cfa49b3 | |||
| f85d6d4293 | |||
| 017d0b0b39 | |||
| 3146ae48a7 | |||
| 7f26e45ae7 | |||
| 7d97826e4b | |||
| 9c9c79176d | |||
| ed476a4fce | |||
| 44b4f7995b | |||
| da5e3a0bd3 | |||
| ba4678cc23 | |||
| e5eb3014b4 | |||
| ed77b0bc7f | |||
| 434a44e62c | |||
| aaee04c290 | |||
| 48e2bfa82c | |||
| c04f19ffb4 | |||
| 4a624e3902 | |||
| f53cee9616 | |||
| 30385ee5ec | |||
| b30dfb3e23 | |||
| c0d6102857 | |||
| 4537c55e84 | |||
| aff94c0ab8 | |||
| fd70836308 | |||
| 1b0c94b9a5 | |||
| 7cb523eefc | |||
| 941be80cc4 | |||
| 5eecc735aa | |||
| cfe51d01ee | |||
| 20ae09c52d | |||
| b868146129 | |||
| a312080f7c | |||
| 462ca46fee | |||
| 93228c4b2a | |||
| 2ff10f781f | |||
| 9614c62360 | |||
| 5ffaac5e67 | |||
| 71af91608f | |||
| 9603b61776 | |||
| eed84a059a | |||
| 604ef65719 | |||
| 483d536ca4 | |||
| 69a51c5880 | |||
| ca8d25341e | |||
| 8a263235ed | |||
| fb41ff5d0c | |||
| a5e09e8454 | |||
| 730ee21651 | |||
| dea43445c3 | |||
| 4f0ae78d43 | |||
| d9116d619a | |||
| c080e6fdd3 | |||
| d3752dadc6 | |||
| e21ef53a3d | |||
| 71e97998b6 | |||
| 22f9c45232 | |||
| a42897ec5c | |||
| 58a5c1625c | |||
| d53fc09e1e | |||
| 11fecb5dc0 | |||
| f4587663b5 | |||
| b76a2adf61 | |||
| 988fbc8c85 | |||
| f944ad9b9f | |||
| 335d91b9c9 | |||
| 173404eaad | |||
| 674fed5230 | |||
| 12d284cd22 | |||
| 77037c8adb | |||
| 6984393ed1 | |||
| 3abef6ea75 | |||
| 4ae1ab7dd0 | |||
| 69fb22119b | |||
| 3a6c18c6d5 | |||
| 7db1bc460d | |||
| a460e609fa | |||
| 4b4ebdbdaa | |||
| 9358a06839 | |||
| a7baf6cc9f | |||
| 15dc669f35 | |||
| c853957512 | |||
| 8a4e22e423 | |||
| 8a43c58fd4 | |||
| 54fdf5f1fd | |||
| fe50b513b3 | |||
| 17c7fa8f41 | |||
| 2533560d11 | |||
| 5850a16afd | |||
| 7063d62b13 | |||
| 0bd6a217ae | |||
| b7df294d78 | |||
| 5aa78f2554 | |||
| e740571c33 | |||
| e6d9913f4e | |||
| 1869a863a3 | |||
| 524de92f5e | |||
| c1530cc5c4 | |||
| 730fadb834 | |||
| 383e5c61b1 | |||
| 6d42086fa7 | |||
| 5a20fae204 | |||
| 34fd64c5c4 | |||
| 0874fb0764 | |||
| e03ed5b604 | |||
| 41edc89ac7 | |||
| f0a470398d | |||
| 51008d81fb | |||
| 9828904674 | |||
| 2670d835b3 | |||
| 8b7bafc4b6 | |||
| ca759e0246 | |||
| 5141be1c3f | |||
| 669d3950e2 | |||
| b95895cecf | |||
| 80e11bb0ce | |||
| de3a539621 | |||
| b425bfdc89 | |||
| 1d1fbdffdb | |||
| 50cd7f80c6 | |||
| 6eb7d91122 | |||
| 1fb468b3a6 | |||
| 3c7d95cf10 | |||
| ba3f060cc4 | |||
| 11bc7497e8 | |||
| fb5d149413 | |||
| 42b47d73b7 | |||
| 00f36af03a | |||
| b78466ca93 | |||
| 4e6f146b8f | |||
| cbdd4940d0 | |||
| d022cb984a | |||
| 8de6fa267e | |||
| b08b7de8e9 | |||
| a232a39f0e | |||
| fad7966fc4 | |||
| a1487fd60c | |||
| 9606e315d4 | |||
| 978673268b | |||
| 70158a7f15 | |||
| 18d65a2c5b | |||
| 1b0c2afad7 | |||
| cef444d374 | |||
| 75f6efe27a | |||
| 852f9f40ec | |||
| b9dadc0f4f | |||
| d120cf6573 | |||
| d2b3c165c7 | |||
| 742f06ce05 | |||
| e28dabce65 | |||
| 33ef781e21 | |||
| 02e885fbb7 | |||
| 2ca3561093 | |||
| 97f021da87 | |||
| bd2b45e1c1 | |||
| 2b6f7b71b0 | |||
| 0bad380a50 | |||
| ecc20e8521 | |||
| d5c813fac1 | |||
| d9b3757b1c | |||
| fd7f90236d | |||
| df9d21393d | |||
| 1f73f15ad8 | |||
| ba2aa4bee6 | |||
| f709a657fa | |||
| 514780a572 | |||
| 0c51a625f3 | |||
| 6f8b2d1dc4 | |||
| 0087ce2f19 | |||
| b98c2796c8 | |||
| 37d56b3205 | |||
| 5a54c0fb60 | |||
| 99b259836b | |||
| a54daaaa90 | |||
| fa66e6fca6 | |||
| b7864dded2 | |||
| 72d9698f38 | |||
| a7937cd657 | |||
| 998b14c5b0 | |||
| bff9c2a770 | |||
| b5acdffc87 | |||
| 127609160c | |||
| 8f22a5c570 | |||
| c792c18e01 | |||
| cd614e3845 | |||
| 40673f9cb8 | |||
| 911aa4c73d | |||
| 74b4cc2ceb | |||
| c0c463977d | |||
| 273bcafe01 | |||
| 9028059919 | |||
| c86af457e7 | |||
| b8e979be55 | |||
| 8849c19e8e | |||
| f1b4d02323 | |||
| 4aa8847037 | |||
| d2389400a9 | |||
| 721e70d027 | |||
| 3c1a7eac86 | |||
| f8e21dbd4c | |||
| d16a35d26f | |||
| f881caf794 | |||
| eb6fa276de | |||
| e987c8b37a | |||
| 26d76e27ac | |||
| 975549fca0 | |||
| 9a6bed52dd |
@@ -0,0 +1,31 @@
|
||||
# Dependencies
|
||||
node_modules
|
||||
**/node_modules
|
||||
|
||||
# Rust build artifacts
|
||||
target
|
||||
**/target
|
||||
|
||||
# Git
|
||||
.git
|
||||
.gitignore
|
||||
|
||||
# Build outputs
|
||||
.next
|
||||
**/.next
|
||||
out
|
||||
**/out
|
||||
|
||||
# IDE
|
||||
.idea
|
||||
.vscode
|
||||
*.swp
|
||||
|
||||
# OS files
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
|
||||
# Logs
|
||||
*.log
|
||||
npm-debug.log*
|
||||
|
||||
@@ -8,6 +8,6 @@ updates:
|
||||
groups:
|
||||
github-actions:
|
||||
patterns:
|
||||
- "*" # Group all Actions updates into a single larger pull request
|
||||
- '*' # Group all Actions updates into a single larger pull request
|
||||
schedule:
|
||||
interval: weekly
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
name: PR checks
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
pull_request:
|
||||
branches: [main]
|
||||
permissions:
|
||||
@@ -10,21 +12,30 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
RUSTFLAGS: '-C target-cpu=skylake'
|
||||
SCCACHE_GHA_ENABLED: 'true'
|
||||
RUSTC_WRAPPER: sccache
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
- uses: actions/checkout@v6
|
||||
with:
|
||||
submodules: 'true'
|
||||
- name: setup sccache
|
||||
uses: mozilla-actions/sccache-action@v0.0.9
|
||||
- name: Install minimal stable with clippy and rustfmt
|
||||
uses: actions-rust-lang/setup-rust-toolchain@v1
|
||||
with:
|
||||
toolchain: stable
|
||||
override: true
|
||||
components: rustfmt, clippy
|
||||
- name: Cache apt packages
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: /var/cache/apt/archives
|
||||
key: apt-rust-lint-${{ runner.os }}
|
||||
- name: Install system dependencies
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y pkg-config libfontconfig-dev libglib2.0-dev libgtk-3-dev libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev libsoup-3.0-dev
|
||||
- name: Format
|
||||
- name: Format check
|
||||
working-directory: apps/readest-app/src-tauri
|
||||
run: cargo fmt --check
|
||||
- name: Clippy Check
|
||||
@@ -33,59 +44,112 @@ jobs:
|
||||
|
||||
build_web_app:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
config:
|
||||
- platform: 'web'
|
||||
- platform: 'tauri'
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
- uses: actions/checkout@v6
|
||||
with:
|
||||
submodules: 'true'
|
||||
|
||||
- name: setup pnpm
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: 10.14.0
|
||||
uses: pnpm/action-setup@v5
|
||||
|
||||
- name: setup node
|
||||
uses: actions/setup-node@v6
|
||||
with:
|
||||
node-version: 22
|
||||
node-version: 24
|
||||
cache: pnpm
|
||||
|
||||
- name: cache Next.js build
|
||||
uses: actions/cache@v4
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: apps/readest-app/.next/cache
|
||||
key: nextjs-${{ matrix.config.platform }}-${{ github.sha }}-${{ hashFiles('pnpm-lock.yaml') }}
|
||||
key: nextjs-web-${{ github.sha }}-${{ hashFiles('pnpm-lock.yaml') }}
|
||||
restore-keys: |
|
||||
nextjs-${{ matrix.config.platform }}-${{ github.sha }}-
|
||||
nextjs-${{ matrix.config.platform }}-
|
||||
nextjs-web-${{ github.sha }}-
|
||||
nextjs-web-
|
||||
|
||||
- name: install Dependencies
|
||||
working-directory: apps/readest-app
|
||||
run: |
|
||||
pnpm install && pnpm setup-pdfjs
|
||||
pnpm install && pnpm setup-vendors
|
||||
|
||||
- name: run tests
|
||||
working-directory: apps/readest-app
|
||||
- name: run format check
|
||||
run: |
|
||||
pnpm test -- --watch=false
|
||||
pnpm format:check || (pnpm format && git diff && exit 1)
|
||||
|
||||
- name: install playwright browsers
|
||||
working-directory: apps/readest-app
|
||||
run: npx playwright install --with-deps chromium
|
||||
|
||||
- name: run web tests
|
||||
working-directory: apps/readest-app
|
||||
run: pnpm test:pr:web
|
||||
|
||||
- name: run lint
|
||||
working-directory: apps/readest-app
|
||||
run: |
|
||||
pnpm lint
|
||||
|
||||
- name: build the web App
|
||||
if: matrix.config.platform == 'web'
|
||||
- name: build the web app
|
||||
working-directory: apps/readest-app
|
||||
run: |
|
||||
pnpm build-web && pnpm check:all
|
||||
|
||||
- name: build the Tauri App
|
||||
if: matrix.config.platform == 'tauri'
|
||||
build_tauri_app:
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
SCCACHE_GHA_ENABLED: 'true'
|
||||
RUSTC_WRAPPER: sccache
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
with:
|
||||
submodules: 'true'
|
||||
|
||||
- name: setup pnpm
|
||||
uses: pnpm/action-setup@v5
|
||||
|
||||
- name: setup node
|
||||
uses: actions/setup-node@v6
|
||||
with:
|
||||
node-version: 24
|
||||
cache: pnpm
|
||||
|
||||
- name: cache Next.js build
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: apps/readest-app/.next/cache
|
||||
key: nextjs-tauri-${{ github.sha }}-${{ hashFiles('pnpm-lock.yaml') }}
|
||||
restore-keys: |
|
||||
nextjs-tauri-${{ github.sha }}-
|
||||
nextjs-tauri-
|
||||
|
||||
- name: install Dependencies
|
||||
working-directory: apps/readest-app
|
||||
run: |
|
||||
pnpm build && pnpm check:all
|
||||
pnpm install && pnpm setup-vendors
|
||||
|
||||
- name: setup sccache
|
||||
uses: mozilla-actions/sccache-action@v0.0.9
|
||||
|
||||
- name: install Rust toolchain
|
||||
uses: actions-rust-lang/setup-rust-toolchain@v1
|
||||
with:
|
||||
toolchain: stable
|
||||
|
||||
- uses: Swatinem/rust-cache@v2
|
||||
with:
|
||||
key: tauri-cargo
|
||||
cache-all-crates: 'true'
|
||||
|
||||
- name: Cache apt packages
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: /var/cache/apt/archives
|
||||
key: apt-tauri-${{ runner.os }}
|
||||
- name: install system dependencies
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y pkg-config libfontconfig-dev libglib2.0-dev libgtk-3-dev libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev libsoup-3.0-dev xvfb
|
||||
|
||||
- name: run tauri tests
|
||||
working-directory: apps/readest-app
|
||||
run: xvfb-run pnpm test:pr:tauri
|
||||
|
||||
@@ -17,7 +17,7 @@ jobs:
|
||||
release_version: ${{ steps.get-release-notes.outputs.release_version }}
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
- uses: actions/checkout@v6
|
||||
- name: setup node
|
||||
uses: actions/setup-node@v6
|
||||
- name: get version
|
||||
@@ -69,7 +69,7 @@ jobs:
|
||||
repo: context.repo.repo,
|
||||
tag_name: process.env.release_tag,
|
||||
})
|
||||
const notes = process.env.release_note.split(/(?:\d\.\s)/).filter(Boolean);
|
||||
const notes = process.env.release_note.split(/\d+\.\s/).filter(Boolean);
|
||||
const formattedNotes = notes.map(note => `* ${note.trim()}`).join("\n");
|
||||
const body = `## Release Highlight\n${formattedNotes}\n\n${data.body}`;
|
||||
github.rest.repos.updateRelease({
|
||||
@@ -87,7 +87,7 @@ jobs:
|
||||
contents: write
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
- uses: actions/checkout@v6
|
||||
|
||||
- name: create KOReader plugin zip
|
||||
env:
|
||||
@@ -95,10 +95,12 @@ jobs:
|
||||
run: |
|
||||
version=${{ needs.get-release.outputs.release_version }}
|
||||
plugin_zip="Readest-${version}-1.koplugin.zip"
|
||||
meta_file="apps/readest.koplugin/_meta.lua"
|
||||
perl -i -pe "s/^}/ version = \"${version}\",\n}/" "${meta_file}"
|
||||
|
||||
cd apps/readest.koplugin
|
||||
zip -r ../../${plugin_zip} .
|
||||
cd ../..
|
||||
cd apps
|
||||
zip -r ../${plugin_zip} readest.koplugin
|
||||
cd ..
|
||||
|
||||
echo "Uploading ${plugin_zip} to GitHub release"
|
||||
gh release upload ${{ needs.get-release.outputs.release_tag }} ${plugin_zip} --clobber
|
||||
@@ -146,20 +148,18 @@ jobs:
|
||||
runs-on: ${{ matrix.config.os }}
|
||||
timeout-minutes: 60
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
- uses: actions/checkout@v6
|
||||
|
||||
- name: initialize git submodules
|
||||
run: git submodule update --init --recursive
|
||||
|
||||
- name: setup pnpm
|
||||
uses: pnpm/action-setup@v4
|
||||
with:
|
||||
version: 10.14.0
|
||||
uses: pnpm/action-setup@v5
|
||||
|
||||
- name: setup node
|
||||
uses: actions/setup-node@v6
|
||||
with:
|
||||
node-version: 22
|
||||
node-version: 24
|
||||
cache: pnpm
|
||||
|
||||
- name: setup Java (for Android build only)
|
||||
@@ -180,8 +180,8 @@ jobs:
|
||||
- name: install dependencies
|
||||
run: pnpm install
|
||||
|
||||
- name: copy pdfjs-dist to public directory
|
||||
run: pnpm --filter @readest/readest-app setup-pdfjs
|
||||
- name: copy pdfjs-dist and simplecc-dist to public directory
|
||||
run: pnpm --filter @readest/readest-app setup-vendors
|
||||
|
||||
- name: install Rust stable
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
@@ -284,10 +284,15 @@ jobs:
|
||||
echo "Uploading updated latest.json to GitHub release"
|
||||
gh release upload ${{ needs.get-release.outputs.release_tag }} latest.json --clobber
|
||||
|
||||
- name: Override tauri-cli with custom AppImage format (Linux)
|
||||
if: matrix.config.release == 'linux'
|
||||
run: cargo install tauri-cli --git https://github.com/tauri-apps/tauri --branch feat/truly-portable-appimage --force
|
||||
|
||||
- uses: tauri-apps/tauri-action@v0
|
||||
if: matrix.config.release != 'android'
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
TAURI_BUNDLER_NEW_APPIMAGE_FORMAT: 'true'
|
||||
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
|
||||
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
|
||||
APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }}
|
||||
@@ -314,6 +319,8 @@ jobs:
|
||||
if: matrix.config.os == 'windows-latest'
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
TAURI_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
|
||||
TAURI_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
|
||||
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
|
||||
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
|
||||
shell: bash
|
||||
@@ -321,7 +328,7 @@ jobs:
|
||||
echo "Building Portable Binaries"
|
||||
pushd apps/readest-app/
|
||||
echo "NEXT_PUBLIC_PORTABLE_APP=true" >> .env.local
|
||||
pnpm tauri build
|
||||
pnpm tauri build ${{ matrix.config.args }}
|
||||
|
||||
popd
|
||||
echo "Uploading Portable Binaries"
|
||||
@@ -346,6 +353,46 @@ jobs:
|
||||
echo "Uploading $bin_file to GitHub release"
|
||||
gh release upload ${{ needs.get-release.outputs.release_tag }} $bin_file --clobber
|
||||
|
||||
echo "Signing portable binary"
|
||||
pushd apps/readest-app/
|
||||
pnpm tauri signer sign "../../$bin_file"
|
||||
popd
|
||||
echo "Uploading signature to GitHub release"
|
||||
gh release upload ${{ needs.get-release.outputs.release_tag }} $bin_file.sig --clobber
|
||||
|
||||
- name: download and update latest.json for Windows portable release
|
||||
if: matrix.config.os == 'windows-latest'
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
shell: bash
|
||||
run: |
|
||||
curl -sL https://github.com/readest/readest/releases/latest/download/latest.json -o latest.json
|
||||
|
||||
version=${{ needs.get-release.outputs.release_version }}
|
||||
arch=${{ matrix.config.arch }}
|
||||
|
||||
if [ "$arch" = "x86_64" ]; then
|
||||
bin_file="Readest_${version}_x64-portable.exe"
|
||||
platform_key="windows-x86_64-portable"
|
||||
elif [ "$arch" = "aarch64" ]; then
|
||||
bin_file="Readest_${version}_arm64-portable.exe"
|
||||
platform_key="windows-aarch64-portable"
|
||||
else
|
||||
echo "Unknown architecture: $arch"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
portable_url="https://github.com/readest/readest/releases/download/${{ needs.get-release.outputs.release_tag }}/$bin_file"
|
||||
portable_sig=$(cat $bin_file.sig)
|
||||
|
||||
jq --arg url "$portable_url" \
|
||||
--arg sig "$portable_sig" \
|
||||
--arg key "$platform_key" \
|
||||
'.platforms[$key] = {signature: $sig, url: $url}' latest.json > tmp.$$.json && mv tmp.$$.json latest.json
|
||||
|
||||
echo "Uploading updated latest.json to GitHub release"
|
||||
gh release upload ${{ needs.get-release.outputs.release_tag }} latest.json --clobber
|
||||
|
||||
upload-to-r2:
|
||||
needs: [get-release, build-tauri]
|
||||
uses: ./.github/workflows/upload-to-r2.yml
|
||||
|
||||
@@ -11,7 +11,7 @@ jobs:
|
||||
build_and_deploy:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
- uses: actions/checkout@v6
|
||||
with:
|
||||
submodules: 'true'
|
||||
- uses: amondnet/vercel-action@v25
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
|
||||
docker/.env
|
||||
|
||||
# dependencies
|
||||
/node_modules
|
||||
@@ -43,3 +44,11 @@ fastlane/report.xml
|
||||
|
||||
*.koplugin.zip
|
||||
|
||||
# nix
|
||||
result*
|
||||
|
||||
.playwright-mcp/
|
||||
|
||||
.claude/worktrees
|
||||
.claude/settings.local.json
|
||||
|
||||
|
||||
@@ -7,3 +7,12 @@
|
||||
[submodule "packages/tauri-plugins"]
|
||||
path = packages/tauri-plugins
|
||||
url = https://github.com/readest/tauri-plugins-workspace.git
|
||||
[submodule "packages/simplecc-wasm"]
|
||||
path = packages/simplecc-wasm
|
||||
url = https://github.com/readest/simplecc-wasm.git
|
||||
[submodule "apps/readest-app/src-tauri/plugins/tauri-plugin-turso"]
|
||||
path = apps/readest-app/src-tauri/plugins/tauri-plugin-turso
|
||||
url = https://github.com/readest/tauri-plugin-turso.git
|
||||
[submodule "apps/readest-app/.claude/skills/gstack"]
|
||||
path = apps/readest-app/.claude/skills/gstack
|
||||
url = https://github.com/garrytan/gstack.git
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
pnpm exec lint-staged
|
||||
Executable
+2
@@ -0,0 +1,2 @@
|
||||
pnpm -C apps/readest-app lint
|
||||
pnpm -C apps/readest-app test
|
||||
+38
-1
@@ -1 +1,38 @@
|
||||
packages/foliate-js/
|
||||
# Dependencies
|
||||
node_modules
|
||||
pnpm-lock.yaml
|
||||
|
||||
# Build Artifacts (Web & Rust)
|
||||
.next
|
||||
.open-next
|
||||
.build
|
||||
.tauri
|
||||
out
|
||||
build
|
||||
dist
|
||||
target
|
||||
fastlane
|
||||
.wrangler
|
||||
|
||||
# Autogenerated Tauri files
|
||||
gen
|
||||
**/autogenerated
|
||||
**/schemas
|
||||
|
||||
# Submodules (External Repos)
|
||||
packages
|
||||
|
||||
# Claude Code Skills & Config
|
||||
apps/readest-app/.claude
|
||||
|
||||
# Vendored Assets (Generated/External Code)
|
||||
apps/readest-app/public/*.js
|
||||
apps/readest-app/public/vendor
|
||||
apps/readest-app/src-tauri/plugins/tauri-plugin-turso
|
||||
|
||||
# Environment & Editor
|
||||
.env
|
||||
.env.*
|
||||
.vscode
|
||||
.idea
|
||||
*.log
|
||||
Vendored
+16
-1
@@ -13,4 +13,19 @@
|
||||
"javascript.validate.enable": false,
|
||||
"javascript.format.enable": false,
|
||||
"typescript.format.enable": false,
|
||||
}
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
||||
"editor.codeActionsOnSave": {
|
||||
"source.fixAll.eslint": "explicit"
|
||||
},
|
||||
"[css]": {
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||
},
|
||||
"[typescript]": {
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||
},
|
||||
"[typescriptreact]": {
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||
},
|
||||
"prettier.requireConfig": true,
|
||||
"prettier.documentSelectors": ["**/*.{js,jsx,ts,tsx,css,json,md,html,yml}"]
|
||||
}
|
||||
|
||||
+2
-2
@@ -43,8 +43,8 @@ git submodule update --init --recursive
|
||||
```bash
|
||||
# might need to rerun this when code is updated
|
||||
pnpm install
|
||||
# copy pdfjs-dist to Next.js public directory
|
||||
pnpm --filter @readest/readest-app setup-pdfjs
|
||||
# copy vendors dist libs to public directory
|
||||
pnpm --filter @readest/readest-app setup-vendors
|
||||
```
|
||||
|
||||
#### 3. Verify Dependencies Installation
|
||||
|
||||
Generated
+3570
-1071
File diff suppressed because it is too large
Load Diff
+3
-4
@@ -2,8 +2,7 @@
|
||||
members = [
|
||||
"apps/readest-app/src-tauri",
|
||||
"packages/tauri/crates/tauri",
|
||||
"packages/tauri/crates/tauri-utils",
|
||||
"packages/tauri/crates/tauri-build",
|
||||
"packages/tauri-plugins/plugins/fs"
|
||||
]
|
||||
resolver = "2"
|
||||
|
||||
@@ -19,6 +18,7 @@ schemars = "0.8"
|
||||
serde_json = "1"
|
||||
thiserror = "2"
|
||||
glob = "0.3"
|
||||
zbus = "5.9"
|
||||
dunce = "1"
|
||||
url = "2"
|
||||
|
||||
@@ -33,5 +33,4 @@ rust-version = "1.77.2"
|
||||
|
||||
[patch.crates-io]
|
||||
tauri = { path = "packages/tauri/crates/tauri" }
|
||||
tauri-utils = { path = "packages/tauri/crates/tauri-utils" }
|
||||
tauri-build = { path = "packages/tauri/crates/tauri-build" }
|
||||
tauri-plugin-fs = { path = "packages/tauri-plugins/plugins/fs" }
|
||||
|
||||
+33
-31
@@ -1,38 +1,40 @@
|
||||
FROM node:22-slim
|
||||
|
||||
ENV PNPM_HOME="/root/.local/share/pnpm"
|
||||
ENV PATH="${PATH}:${PNPM_HOME}"
|
||||
|
||||
RUN npm install --global pnpm
|
||||
|
||||
# Install necessary packages
|
||||
RUN apt update -y && apt install -y --no-install-recommends \
|
||||
libwebkit2gtk-4.1-dev \
|
||||
build-essential \
|
||||
curl \
|
||||
wget \
|
||||
file \
|
||||
libxdo-dev \
|
||||
libssl-dev \
|
||||
libayatana-appindicator3-dev \
|
||||
librsvg2-dev \
|
||||
ca-certificates \
|
||||
&& apt-get clean && rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Install Rust and Cargo
|
||||
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
|
||||
ENV PATH="/root/.cargo/bin:${PATH}"
|
||||
|
||||
COPY . /app
|
||||
|
||||
FROM docker.io/node:22-slim AS base
|
||||
ENV PNPM_HOME="/pnpm"
|
||||
ENV PATH="$PNPM_HOME:$PATH"
|
||||
RUN corepack enable
|
||||
RUN corepack prepare pnpm@10.29.3 --activate
|
||||
WORKDIR /app
|
||||
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
|
||||
COPY apps/readest-app/package.json ./apps/readest-app/
|
||||
COPY patches/ ./patches/
|
||||
COPY packages/ ./packages/
|
||||
|
||||
RUN pnpm install
|
||||
|
||||
RUN pnpm --filter @readest/readest-app setup-pdfjs
|
||||
FROM base AS dependencies
|
||||
RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile
|
||||
RUN pnpm --filter @readest/readest-app setup-vendors
|
||||
|
||||
FROM dependencies AS development-stage
|
||||
COPY . .
|
||||
WORKDIR /app/apps/readest-app
|
||||
EXPOSE 3000
|
||||
ENTRYPOINT ["pnpm", "dev-web", "-H", "0.0.0.0"]
|
||||
|
||||
FROM base AS build
|
||||
ARG NEXT_PUBLIC_SUPABASE_URL
|
||||
ARG NEXT_PUBLIC_SUPABASE_ANON_KEY
|
||||
ARG NEXT_PUBLIC_APP_PLATFORM
|
||||
ARG NEXT_PUBLIC_API_BASE_URL
|
||||
ARG NEXT_PUBLIC_OBJECT_STORAGE_TYPE
|
||||
ARG NEXT_PUBLIC_STORAGE_FIXED_QUOTA
|
||||
ARG NEXT_PUBLIC_TRANSLATION_FIXED_QUOTA
|
||||
COPY --from=dependencies /app/node_modules /app/node_modules
|
||||
COPY --from=dependencies /app/apps/readest-app/node_modules /app/apps/readest-app/node_modules
|
||||
COPY --from=dependencies /app/apps/readest-app/public/vendor /app/apps/readest-app/public/vendor
|
||||
COPY --from=dependencies /app/packages/foliate-js/node_modules /app/packages/foliate-js/node_modules
|
||||
COPY . .
|
||||
WORKDIR /app/apps/readest-app
|
||||
RUN pnpm build-web
|
||||
|
||||
ENTRYPOINT ["pnpm", "start-web"]
|
||||
FROM build as production-stage
|
||||
ENTRYPOINT ["pnpm", "start-web", "-H", "0.0.0.0"]
|
||||
EXPOSE 3000
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<h1>Readest</h1>
|
||||
<br>
|
||||
|
||||
[Readest][link-website] is an open-source ebook reader designed for immersive and deep reading experiences. Built as a modern rewrite of [Foliate](https://github.com/johnfactotum/foliate), it leverages [Next.js 15](https://github.com/vercel/next.js) and [Tauri v2](https://github.com/tauri-apps/tauri) to deliver a smooth, cross-platform experience across macOS, Windows, Linux, Android, iOS, and the Web.
|
||||
[Readest][link-website] is an open-source ebook reader designed for immersive and deep reading experiences. Built as a modern rewrite of [Foliate](https://github.com/johnfactotum/foliate), it leverages [Next.js 16](https://github.com/vercel/next.js) and [Tauri v2](https://github.com/tauri-apps/tauri) to deliver a smooth, cross-platform experience across macOS, Windows, Linux, Android, iOS, and the Web.
|
||||
|
||||
[![Website][badge-website]][link-website]
|
||||
[![Web App][badge-web-app]][link-web-readest]
|
||||
@@ -14,7 +14,7 @@
|
||||
[![Discord][badge-discord]][link-discord]
|
||||
[![Reddit][badge-reddit]][link-reddit]
|
||||
[![AGPL Licence][badge-license]](LICENSE)
|
||||
[![Language Coverage][badge-language-coverage]]()
|
||||
[![Language Coverage][badge-language-coverage]][link-locales]
|
||||
[![Donate][badge-donate]][link-donate]
|
||||
[![Latest release][badge-release]][link-gh-releases]
|
||||
[![Last commit][badge-last-commit]][link-gh-commits]
|
||||
@@ -45,38 +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. | ✅ |
|
||||
| **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. | ✅ |
|
||||
| **Feature** | **Description** | **Status** |
|
||||
| ------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------- | ---------- |
|
||||
| **Multi-Format Support** | Support EPUB, MOBI, KF8 (AZW3), FB2, CBZ, TXT, PDF | ✅ |
|
||||
| **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 and use instant mode for quicker interactions. | ✅ |
|
||||
| **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. | ✅ |
|
||||
| **Code Syntax Highlighting** | Read software manuals with rich coloring of code examples. | ✅ |
|
||||
| **File Association and Open With** | Quickly open files in Readest in your file browser with one-click. | ✅ |
|
||||
| **Library Management** | Organize, sort, and manage your entire ebook library. | ✅ |
|
||||
| **OPDS/Calibre Integration** | Integrate OPDS/Calibre to access online libraries and catalogs. | ✅ |
|
||||
| **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. | ✅ |
|
||||
| **Sync across Platforms** | Synchronize book files, reading progress, notes, and bookmarks across all supported platforms. | ✅ |
|
||||
| [**Sync with Koreader**][link-kosync-wiki] | Synchronize reading progress, notes, and bookmarks with [Koreader][link-koreader] devices. | ✅ |
|
||||
| **Accessibility** | Provides full keyboard navigation and supports for screen readers such as VoiceOver, TalkBack, NVDA, and Orca. | ✅ |
|
||||
| **Visual & Focus Aids** | Reading ruler, paragraph-by-paragraph reading mode, and speed reading features. | ✅ |
|
||||
|
||||
## Planned Features
|
||||
|
||||
<div align="left">🛠 Building</div>
|
||||
<div align="left">🔄 Planned</div>
|
||||
|
||||
| **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. | 🔄 |
|
||||
| **Feature** | **Description** | **Priority** |
|
||||
| ------------------------------- | -------------------------------------------------------------------------- | ------------ |
|
||||
| **AI-Powered Summarization** | Generate summaries of books or chapters using AI for quick insights. | 🛠 |
|
||||
| **Advanced Reading Stats** | Track reading time, pages read, and more for detailed insights. | 🛠 |
|
||||
| **Audiobook Support** | Extend functionality to play and manage audiobooks. | 🔄 |
|
||||
| **Handwriting Annotations** | Add support for handwriting annotations using a pen on compatible devices. | 🔄 |
|
||||
| **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. 😊
|
||||
|
||||
@@ -111,6 +111,7 @@ Stay tuned for continuous improvements and updates! Contributions and suggestion
|
||||
|
||||
- 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].
|
||||
- Linux users can also install [Readest on Flathub][link-flathub].
|
||||
- Web: Visit and use **Readest for Web** at [https://web.readest.com][link-web-readest].
|
||||
|
||||
## Requirements
|
||||
@@ -121,8 +122,8 @@ Stay tuned for continuous improvements and updates! Contributions and suggestion
|
||||
For the best experience to build Readest for yourself, use a recent version of Node.js and Rust. Refer to the [Tauri documentation](https://v2.tauri.app/start/prerequisites/) for details on setting up the development environment prerequisites on different platforms.
|
||||
|
||||
```bash
|
||||
nvm install v22
|
||||
nvm use v22
|
||||
nvm install v24
|
||||
nvm use v24
|
||||
npm install -g pnpm
|
||||
rustup update
|
||||
```
|
||||
@@ -144,8 +145,8 @@ cd readest
|
||||
# might need to rerun this when code is updated
|
||||
git submodule update --init --recursive
|
||||
pnpm install
|
||||
# copy pdfjs-dist to Next.js public directory
|
||||
pnpm --filter @readest/readest-app setup-pdfjs
|
||||
# copy vendors dist libs to public directory
|
||||
pnpm --filter @readest/readest-app setup-vendors
|
||||
```
|
||||
|
||||
### 3. Verify Dependencies Installation
|
||||
@@ -175,7 +176,9 @@ For Android:
|
||||
|
||||
```bash
|
||||
# Initialize the Android environment (run once)
|
||||
rm apps/readest-app/src-tauri/gen/android
|
||||
pnpm tauri android init
|
||||
git checkout apps/readest-app/src-tauri/gen/android
|
||||
|
||||
pnpm tauri android dev
|
||||
# or if you want to dev on a real device
|
||||
@@ -201,6 +204,9 @@ pnpm tauri android build
|
||||
pnpm tauri ios build
|
||||
```
|
||||
|
||||
Please refer to our release script if you experience any issues:
|
||||
https://github.com/readest/readest/blob/main/.github/workflows/release.yml
|
||||
|
||||
### 6. Setup dev environment with Nix
|
||||
|
||||
If you have Nix installed, you can leverage flake to enter a development shell
|
||||
@@ -249,6 +255,32 @@ Please check the [wiki][link-gh-wiki] of this project for more information on de
|
||||
|
||||
- See Issue [readest/readest#358](https://github.com/readest/readest/issues/358) for further details, or head over to our [Discord][link-discord] server and open a support discussion with detailed logs of your environment and the steps you’ve taken.
|
||||
|
||||
### 2. AppImage Launches but Only Shows a Taskbar Icon
|
||||
|
||||
On some Arch Linux systems—especially those using Wayland—the Readest AppImage may briefly show an icon in the taskbar and then exit without opening a window.
|
||||
|
||||
You might see logs such as:
|
||||
|
||||
```
|
||||
Could not create default EGL display: EGL_BAD_PARAMETER. Aborting...
|
||||
```
|
||||
|
||||
This behavior is usually caused by compatibility issues between the bundled AppImage libraries and the system’s EGL / Wayland environment.
|
||||
|
||||
**Workaround 1: Launch with LD_PRELOAD (recommended)**
|
||||
|
||||
You can preload the system Wayland client library before launching the AppImage:
|
||||
|
||||
```
|
||||
LD_PRELOAD=/usr/lib/libwayland-client.so /path/to/Readest.AppImage
|
||||
```
|
||||
|
||||
This workaround has been confirmed to resolve the issue on affected systems.
|
||||
|
||||
**Workaround 2: Use the Flatpak Version**
|
||||
|
||||
If you prefer a more reliable out-of-the-box experience on Arch Linux, consider using the [Flatpak build on Flathub][link-flathub] instead. The Flatpak runtime helps avoid system library mismatches and tends to behave more consistently across different Wayland and X11 setups.
|
||||
|
||||
## Contributors
|
||||
|
||||
Readest is open-source, and contributions are welcome! Feel free to open issues, suggest features, or submit pull requests. Please **review our [contributing guidelines](CONTRIBUTING.md) before you start**. We also welcome you to join our [Discord][link-discord] community for either support or contributing guidance.
|
||||
@@ -261,13 +293,13 @@ Readest is open-source, and contributions are welcome! Feel free to open issues,
|
||||
|
||||
## Support
|
||||
|
||||
If Readest has been useful to you, consider supporting its development. You can [become a sponsor on GitHub](https://github.com/sponsors/readest) or just [donate with crypto](https://donate.readest.com). Your contribution helps us squash bugs faster, improve performance, and keep building great features.
|
||||
If Readest has been useful to you, consider supporting its development. You can [become a sponsor on GitHub](https://github.com/sponsors/readest), [donate via Stripe](https://donate.stripe.com/4gMcN5aZdcE52kW3TFgjC01), or [donate with crypto](https://donate.readest.com). Your contribution helps us squash bugs faster, improve performance, and keep building great features.
|
||||
|
||||
### Sponsors
|
||||
|
||||
<p align="center">
|
||||
<a title="Browser testing via LambdaTest" href="https://www.lambdatest.com/?utm_source=readest&utm_medium=sponsor" target="_blank">
|
||||
<img src="https://www.lambdatest.com/blue-logo.png" style="vertical-align: middle;" width="250" />
|
||||
<a title="Browser testing via TestMu AI" href="https://www.testmuai.com/?utm_medium=sponsor&utm_source=readest" target="_blank">
|
||||
<img src="https://raw.githubusercontent.com/readest/readest/refs/heads/main/data/sponsors/testmu-ai-logo.png" style="vertical-align: middle;" width="250" />
|
||||
</a>
|
||||
</p>
|
||||
|
||||
@@ -290,7 +322,9 @@ The following libraries and frameworks are used in this software:
|
||||
|
||||
The following fonts are utilized in this software, either bundled within the application or provided through web fonts:
|
||||
|
||||
[Bitter](https://fonts.google.com/?query=Bitter), [Fira Code](https://fonts.google.com/?query=Fira+Code), [Literata](https://fonts.google.com/?query=Literata), [Merriweather](https://fonts.google.com/?query=Merriweather), [Noto Sans](https://fonts.google.com/?query=Noto+Sans), [Roboto](https://fonts.google.com/?query=Roboto), [LXGW WenKai](https://github.com/lxgw/LxgwWenKai), [MiSans](https://hyperos.mi.com/font/en/), [Source Han](https://github.com/adobe-fonts/source-han-sans/), [WenQuanYi Micro Hei](http://wenq.org/wqy2/)
|
||||
[Bitter](https://fonts.google.com/specimen/Bitter), [Fira Code](https://fonts.google.com/specimen/Fira+Code), [Inter](https://fonts.google.com/specimen/Inter), [Literata](https://fonts.google.com/specimen/Literata), [Merriweather](https://fonts.google.com/specimen/Merriweather), [Noto Sans](https://fonts.google.com/specimen/Noto+Sans), [Roboto](https://fonts.google.com/specimen/Roboto), [LXGW WenKai](https://github.com/lxgw/LxgwWenKai), [MiSans](https://hyperos.mi.com/font/en/), [Source Han](https://github.com/adobe-fonts/source-han-sans/), [WenQuanYi Micro Hei](http://wenq.org/wqy2/)
|
||||
|
||||
We would also like to thank the [Web Chinese Fonts Plan](https://chinese-font.netlify.app) for offering open-source tools that enable the use of Chinese fonts on the web.
|
||||
|
||||
---
|
||||
|
||||
@@ -308,10 +342,11 @@ The following fonts are utilized in this software, either bundled within the app
|
||||
[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
|
||||
[badge-language-coverage]: https://img.shields.io/badge/coverage-53%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
|
||||
[link-flathub]: https://flathub.org/en/apps/com.bilingify.readest
|
||||
[link-web-readest]: https://web.readest.com
|
||||
[link-gh-releases]: https://github.com/readest/readest/releases
|
||||
[link-gh-commits]: https://github.com/readest/readest/commits/main
|
||||
@@ -322,5 +357,6 @@ 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-locales]: https://github.com/readest/readest/tree/main/apps/readest-app/public/locales
|
||||
[link-kosync-wiki]: https://github.com/readest/readest/wiki/Sync-with-Koreader-devices
|
||||
[link-reddit]: https://reddit.com/r/readest/
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
# Readest Project Memory
|
||||
|
||||
## Key Reference Documents
|
||||
- [Bug Fixing Patterns](bug-patterns.md) - Common bug categories, root causes, and fix strategies
|
||||
- [CSS & Style Fixes](css-style-fixes.md) - EPUB CSS override patterns and the style.ts pipeline
|
||||
- [TTS Fixes](tts-fixes.md) - Text-to-Speech architecture and bug patterns
|
||||
- [Layout & UI Fixes](layout-ui-fixes.md) - Safe insets, z-index, platform-specific UI issues
|
||||
- [Platform Compat Fixes](platform-compat-fixes.md) - Android, iOS, Linux, macOS platform-specific bugs
|
||||
- [Annotator & Reader Fixes](annotator-reader-fixes.md) - Highlight, selection, accessibility bugs
|
||||
|
||||
## Critical Files (Most Bug-Prone)
|
||||
- `src/utils/style.ts` - Central EPUB CSS transformation hub (14+ bug fixes)
|
||||
- `packages/foliate-js/paginator.js` - Page layout, image sizing, backgrounds
|
||||
- `src/services/tts/TTSController.ts` - TTS state machine, section tracking
|
||||
- `src/hooks/useSafeAreaInsets.ts` - Safe area inset management
|
||||
- `src/app/reader/components/FoliateViewer.tsx` - Reader view orchestration
|
||||
- `src/app/reader/components/annotator/Annotator.tsx` - Annotation lifecycle
|
||||
|
||||
## Architecture Notes
|
||||
- foliate-js is a git submodule at `packages/foliate-js/`
|
||||
- Multiview paginator: loads adjacent sections in background, multiple View/Overlayer instances per book
|
||||
- Style overrides: `getLayoutStyles()` (always), `getColorStyles()` (when overriding color)
|
||||
- `transformStylesheet()` does regex-based EPUB CSS rewriting at load time
|
||||
- TTS uses independent section tracking (`#ttsSectionIndex`) decoupled from view
|
||||
- Safe area insets flow: Native plugin -> useSafeAreaInsets hook -> component styles
|
||||
- Dropdown menus use `DropdownContext` (not blur-based) for screen reader compat
|
||||
@@ -0,0 +1,90 @@
|
||||
# Annotator & Reader Fixes Reference
|
||||
|
||||
## Annotation System Architecture
|
||||
|
||||
### Key Components
|
||||
- `Annotator.tsx` - Annotation lifecycle, popup display, style/color management
|
||||
- `AnnotationRangeEditor.tsx` - Drag handles for adjusting selection range
|
||||
- `MagnifierLoupe.tsx` - Magnifying glass during handle drag (mobile only)
|
||||
- `useTextSelector.ts` - Text selection detection and processing
|
||||
- `useAnnotationEditor.ts` - Editing existing annotations
|
||||
- `useInstantAnnotation.ts` - Creating new annotations on selection
|
||||
|
||||
### Highlight Rendering
|
||||
- Highlights rendered by foliate-js `Overlayer` (SVG overlayer in paginator shadow DOM, not iframe)
|
||||
- Each view in multiview paginator has its own `Overlayer` instance with unique clipPath ID
|
||||
- `Overlayer.add()` stores range + draw function; `redraw()` recalculates positions from stored ranges
|
||||
- Colors stored as color names mapped to custom hex via `globalReadSettings.customHighlightColors`
|
||||
- Sidebar uses `color-mix()` CSS function with custom colors, not Tailwind utility classes (#3273)
|
||||
- Rounded highlight style supported via `vertical` option passed to overlayer (#3208)
|
||||
|
||||
### Multiview Overlayer Pitfalls
|
||||
- **Duplicate SVG IDs**: Each overlayer creates `<clipPath>` for loupe hole — IDs MUST be unique per instance or `url(#id)` resolves to wrong element, clipping everything
|
||||
- **docLoadHandler scope**: `FoliateViewer.tsx` re-adds annotations on `load` event — MUST filter by `detail.index` (loaded section), not re-add ALL annotations (overwrites drag edits)
|
||||
- **MagnifierLoupe lifecycle**: Don't destroy/recreate loupe on every drag tick — `hideLoupe()` should only run on unmount, `showLoupe()` fast path updates position only
|
||||
- **Stale closures in useTextSelector**: `getProgress()` must be called inside callbacks, not captured at hook top-level (useFoliateEvents deps are `[view]` only)
|
||||
|
||||
## Fix History
|
||||
|
||||
| Issue | Problem | Root Cause | Fix |
|
||||
|-------|---------|------------|-----|
|
||||
| #3286 | Selection stuck on first annotation | `initializedRef` guard blocked re-computation | Remove guard, consolidate style/color effects |
|
||||
| #3273 | Custom colors not in sidebar | Hardcoded Tailwind classes | Use inline `style` with `color-mix()` |
|
||||
| #3234 | Letter-by-letter selection on mobile | No word boundary snapping | Add `snapRangeToWords()` using `Intl.Segmenter` |
|
||||
| #3208 | Hard rectangular highlights | No border radius support | Pass `vertical` option, update foliate-js |
|
||||
| #3002 | Can't see text under finger | No magnification UI | New `MagnifierLoupe` component using `view.renderer.showLoupe()` |
|
||||
| #3082 | No page numbers on annotations | `pageNumber` field missing | Add `pageNumber` to BookNote type, compute on create |
|
||||
| #3225 | Android tools unresponsive | Premature `makeSelection()` call | Remove premature re-selection in Android path |
|
||||
|
||||
## Common Annotation Bugs
|
||||
|
||||
### Selection Issues
|
||||
- **Word snapping**: Uses `Intl.Segmenter` with `granularity: 'word'` to snap selection to word boundaries
|
||||
- **Android re-selection**: Don't call `makeSelection(sel, index, true)` immediately on pointer-up; let the popup flow complete
|
||||
- **Range editor handles**: Remove `initializedRef` guards that prevent re-computation when switching annotations
|
||||
|
||||
### Color/Style Issues
|
||||
- **Custom colors in sidebar**: Use inline `style={{ backgroundColor: 'color-mix(...)' }}` not Tailwind classes
|
||||
- **Style synchronization**: Consolidate `selectedStyle` and `selectedColor` into one `useEffect`
|
||||
- **Switching annotations**: Must call `setShowAnnotPopup(false)` and `setEditingAnnotation(null)` before setting up new annotation
|
||||
|
||||
## Reader/Content Fixes
|
||||
|
||||
### Progress Display
|
||||
- Use physical `view.renderer.page` and `view.renderer.pages` for page counts (#3213, #3200)
|
||||
- Last page shows 100% by fixing boundary condition (#3383)
|
||||
- FB2 subsections need special handling for progress (#3136)
|
||||
|
||||
### Translation View (#3078)
|
||||
- Problem: Page jumps back during full-text translation
|
||||
- Root cause: DOM mutations from sequential translation insertions cause paginator relayout
|
||||
- Fix: Batch DOM updates with 50ms timer, use bounded concurrent queue (max 5), show loading overlay
|
||||
|
||||
### TOC Navigation (#3124)
|
||||
- Problem: Expanding TOC chapter scrolls back to current chapter
|
||||
- Fix: Only scroll-into-view on navigation, not on expand/collapse
|
||||
|
||||
## Accessibility (a11y) Fixes
|
||||
|
||||
### Screen Reader (TalkBack) Support
|
||||
- **Page indicator updates** (#2276): Add focus handlers on `<p>` elements that call `view.goTo(cfi)` to update position
|
||||
- **Navigation buttons** (#3036): Always show prev/next buttons when screen reader active; `PageNavigationButtons.tsx`
|
||||
- **Dropdown menus** (#3035): Use `DropdownContext` with overlay dismiss instead of blur-based closing
|
||||
|
||||
### Dropdown Architecture for a11y
|
||||
- `DropdownContext` (`src/context/DropdownContext.tsx`) manages which dropdown is open globally
|
||||
- Uses `useId()` for unique identification
|
||||
- One dropdown open at a time
|
||||
- `<Overlay>` for dismissal (tap/click outside) instead of `onBlur`
|
||||
- `<details>` element with `open={isOpen}` for semantic structure
|
||||
- No auto-focus-first-item (conflicts with TalkBack)
|
||||
|
||||
## E-ink Readability
|
||||
- Use `not-eink:` Tailwind variant for colors and opacity (#3258)
|
||||
- Don't use `text-primary` (blue) or low opacity on e-ink
|
||||
- Highlights use foreground color in dark mode e-ink (#3299)
|
||||
|
||||
## Key Utility Functions
|
||||
- `snapRangeToWords()` in `src/utils/sel.ts` - Word boundary snapping
|
||||
- `handleAccessibilityEvents()` in `src/utils/a11y.ts` - Screen reader focus handling
|
||||
- `color-mix()` CSS function for custom highlight colors with opacity
|
||||
@@ -0,0 +1,119 @@
|
||||
# Bug Fixing Patterns & Strategies
|
||||
|
||||
## Common Root Cause Categories
|
||||
|
||||
### 1. Overly Broad CSS Selectors
|
||||
**Pattern:** A CSS rule targets too many elements, causing unintended visual side effects.
|
||||
**Examples:**
|
||||
- `hr { mix-blend-mode: multiply }` applied to ALL hr elements instead of only decorative ones (#3086)
|
||||
- `p img { mix-blend-mode }` applied to block images, not just inline (#3112)
|
||||
- `svg, img { height: auto; width: auto }` overrode explicit HTML width/height attributes (#3274)
|
||||
- Background-color override applied unconditionally instead of only when user enabled color override (#3316)
|
||||
|
||||
**Fix Strategy:** Narrow selectors with class qualifiers (`.background-img`, `.has-text-siblings`) or attribute pseudo-selectors (`:where(:not([width]))`). Check if the rule should be conditional on a user setting.
|
||||
|
||||
### 2. Conditional vs Unconditional Style Overrides
|
||||
**Pattern:** CSS rules meant for "Override Book Color/Layout" mode are placed in the always-active stylesheet.
|
||||
**Examples:**
|
||||
- Calibre `.calibre { color: unset }` was in `getLayoutStyles()` instead of `getColorStyles()` (#3448)
|
||||
- Image background-color override applied without checking `overrideColor` flag (#3316, #3377)
|
||||
|
||||
**Fix Strategy:** Move rules to the correct conditional block: `getColorStyles()` for color overrides, `getLayoutStyles()` for layout overrides. Check the `overrideColor`/`overrideLayout` flags.
|
||||
|
||||
### 3. Missing EPUB Stylesheet Transformations
|
||||
**Pattern:** EPUB stylesheets contain CSS that conflicts with app functionality.
|
||||
**Examples:**
|
||||
- `user-select: none` prevents text selection (#3370) -> regex replace in `transformStylesheet()`
|
||||
- `font-family: serif/sans-serif` on body bypasses user font (#3334) -> detect and unset
|
||||
- Hardcoded Calibre backgrounds persist in dark mode (#3448) -> unset in color override
|
||||
|
||||
**Fix Strategy:** Add regex-based transformation passes in `transformStylesheet()` in `style.ts`.
|
||||
|
||||
### 4. Stale State / Refs Not Reset
|
||||
**Pattern:** A `useRef` or state variable is set once and never properly reset, blocking re-entry.
|
||||
**Examples:**
|
||||
- TTS `ttsOnRef` prevented restarting TTS from a new location (#3292)
|
||||
- `initializedRef` in AnnotationRangeEditor prevented handle position updates (#3286)
|
||||
- `view.tts` not nulled on shutdown prevented clean TTS restart (#3400)
|
||||
- TTS safety timeout fired after pause, advancing to next sentence (#3244)
|
||||
|
||||
**Fix Strategy:** Check all refs/guards in the affected flow. Ensure cleanup in shutdown/unmount. Remove overly aggressive guards that prevent re-entry.
|
||||
|
||||
### 5. Platform API Differences
|
||||
**Pattern:** A Web API behaves differently or is unavailable on certain platforms.
|
||||
**Examples:**
|
||||
- `navigator.getGamepads()` returns null on older Android WebView (#3245)
|
||||
- `CompressionStream` unavailable on some Android versions (#3255)
|
||||
- `btoa()` throws on non-ASCII characters (#3436)
|
||||
- View Transitions API unsupported in WebKitGTK/Linux (#3417)
|
||||
- `document.startViewTransition()` crashes on Linux
|
||||
|
||||
**Fix Strategy:** Always check API availability before use. Add fallback paths. Use feature detection, not platform detection when possible.
|
||||
|
||||
### 6. Safe Area Inset Issues
|
||||
**Pattern:** UI elements overlap system bars (status bar, navigation bar, notch) on mobile.
|
||||
**Examples:**
|
||||
- Zoom controls behind status bar (#3426)
|
||||
- Android navigation bar overlap (#3466)
|
||||
- iPad sidebar insets incorrect (#3395)
|
||||
- Reader page layout jump after system UI change (#3469)
|
||||
|
||||
**Fix Strategy:** Use `gridInsets` and `statusBarHeight` from `useSafeAreaInsets`. Use `env(safe-area-inset-*)` CSS functions. Call `onUpdateInsets()` after system UI visibility changes. See `docs/safe-area-insets.md`.
|
||||
|
||||
### 7. Z-Index Layering Issues
|
||||
**Pattern:** Interactive elements rendered behind other layers, becoming unclickable.
|
||||
**Examples:**
|
||||
- Navigation buttons invisible on mobile (#3201) -> added `z-10`
|
||||
- Annotation nav bar too prominent (#3386) -> reduced from `z-30` to `z-10`
|
||||
- Page nav buttons behind TTS control (#3184)
|
||||
|
||||
**Fix Strategy:** Check z-index ordering. Use minimum necessary z-index. Reference the z-index hierarchy in the codebase.
|
||||
|
||||
### 8. Event Handling Race Conditions
|
||||
**Pattern:** Timing issues between pointer events, native menus, and React state updates.
|
||||
**Examples:**
|
||||
- macOS context menu steals pointer event loop (#3324) -> 100ms setTimeout delay
|
||||
- Traffic light buttons flicker due to timeout race (#3488, #3129)
|
||||
- Android tool buttons unresponsive due to premature re-selection (#3225)
|
||||
|
||||
**Fix Strategy:** Add small delays before native menu calls. Check event state machine consistency. Remove premature re-triggers on Android.
|
||||
|
||||
### 9. foliate-js Rendering Issues
|
||||
**Pattern:** Bugs in the lower-level EPUB renderer (paginator.js, epub.js).
|
||||
**Examples:**
|
||||
- Image size not constrained in double-page mode (#3432)
|
||||
- Background not shown in scrolled mode (#3344)
|
||||
- Section content cached incorrectly after mode switch (#3242, #3206)
|
||||
- Swipe sensitivity too low for non-animated paging (#3310)
|
||||
|
||||
**Fix Strategy:** Check both `columnize()` and `scrolled()` code paths in paginator.js. Verify CSS variables (`--available-width`, `--available-height`) are computed correctly. Test in both paginated and scrolled modes.
|
||||
|
||||
### 10. Progress/Navigation Calculation Errors
|
||||
**Pattern:** Page counts, progress percentages, or position tracking are wrong.
|
||||
**Examples:**
|
||||
- Progress shows 99.9% at last page (#3383) -> boundary condition
|
||||
- Pages left shows estimated instead of physical count (#3213, #3200)
|
||||
- FB2 subsection progress wrong (#3136) -> nested structure not handled
|
||||
- TOC auto-scrolls on expand (#3124) -> scroll-into-view triggered too broadly
|
||||
|
||||
**Fix Strategy:** Use physical `view.renderer.page`/`view.renderer.pages` instead of estimated section metadata. Check boundary conditions (0-indexed vs 1-indexed, inclusive vs exclusive).
|
||||
|
||||
### 11. Multiview Paginator Side Effects
|
||||
**Pattern:** The multiview paginator (e925e9d+) loads adjacent sections in background. Events from these loads can interfere with user interactions on the primary section.
|
||||
**Examples:**
|
||||
- `load` event from adjacent section triggers `docLoadHandler` which re-adds ALL annotations, overwriting drag edits
|
||||
- Multiple overlayers with duplicate SVG `<clipPath>` IDs cause `url(#id)` to resolve to wrong element
|
||||
- `MagnifierLoupe` destroying/recreating body clone on every drag tick triggers ResizeObserver → expand → redraw
|
||||
|
||||
**Fix Strategy:** Scope event handlers to the loaded section's index. Use unique IDs for SVG elements across overlayer instances. Minimize iframe DOM mutations during drag operations.
|
||||
|
||||
## Debugging Workflow
|
||||
|
||||
1. **Identify the category** from the issue description
|
||||
2. **Check `style.ts`** first for any CSS-related visual bugs
|
||||
3. **Check foliate-js** for rendering/layout bugs
|
||||
4. **Check platform-specific code** for mobile/desktop differences
|
||||
5. **Write a failing test** before implementing the fix
|
||||
6. **Test in both paginated and scrolled modes** for layout changes
|
||||
7. **Test on multiple platforms** for any UI change
|
||||
8. **Run `pnpm build-check`** before submitting
|
||||
@@ -0,0 +1,74 @@
|
||||
# CSS & Style Fixes Reference
|
||||
|
||||
## The `style.ts` Pipeline (`src/utils/style.ts`)
|
||||
|
||||
This is the most bug-prone file in the codebase (14+ fixes). It handles all EPUB CSS transformations.
|
||||
|
||||
### Key Functions
|
||||
|
||||
#### `getLayoutStyles()`
|
||||
- Always-active styles applied to every EPUB section
|
||||
- Controls: line-height, hyphens, image sizing, table display
|
||||
- Rules here should NOT be conditional on user settings
|
||||
- Common mistake: putting color-related rules here instead of `getColorStyles()`
|
||||
|
||||
#### `getColorStyles()`
|
||||
- Conditionally applied when user enables "Override Book Color"
|
||||
- Controls: foreground/background colors, mix-blend modes, image backgrounds
|
||||
- Gate rules on `overrideColor` flag
|
||||
|
||||
#### `transformStylesheet()`
|
||||
- Regex-based rewriting of EPUB CSS at load time
|
||||
- Runs on every stylesheet loaded from the EPUB
|
||||
- Used to neutralize problematic EPUB CSS declarations
|
||||
|
||||
#### `applyTableStyle()`
|
||||
- Post-render function that scales tables to fit available width
|
||||
- Uses `getComputedStyle()` (not inline `style.width`) to read actual width
|
||||
- Has two scaling paths: column-width-based and parent-container-based
|
||||
|
||||
### Fix History by Issue
|
||||
|
||||
| Issue | Problem | Fix in style.ts |
|
||||
|-------|---------|-----------------|
|
||||
| #3494 | Line spacing not on `<li>` | Added `li` CSS rule for `line-height` and `hyphens` |
|
||||
| #3448 | Calibre colors persist | Moved `.calibre` unset to `getColorStyles()`, added `background-color: unset` |
|
||||
| #3441 | Body padding/margin | Added `padding: unset; margin: unset` to body in `getLayoutStyles()` |
|
||||
| #3316 | Image bg unconditional | Made `background-color` rule conditional on `overrideColor` |
|
||||
| #3377 | Image bg override | Same pattern as #3316, only override when `overrideColor` is true |
|
||||
| #3334 | Generic font-family | `transformStylesheet()` replaces `font-family: serif/sans-serif` with `unset` on body |
|
||||
| #3370 | user-select: none | `transformStylesheet()` replaces all `user-select: none` with `unset` |
|
||||
| #3284 | Table scaling | Added fallback when `totalTableWidth` is 0 but parent has width |
|
||||
| #3351 | Table display broken | Added `display: table !important` to table rule |
|
||||
| #3274 | Image dimensions | Changed selectors to `:where(:not([width]))` and `:where(:not([height]))` |
|
||||
| #3205 | Table width reading | Changed from `style.width` to `getComputedStyle().width`, fixed CSS var unit |
|
||||
| #3112 | Mix-blend on all images | Narrowed selector to `.has-text-siblings` class |
|
||||
| #3086 | Mix-blend on hr | Narrowed selector to `hr.background-img` |
|
||||
| #3012 | Vertical alignment | Fixed available dimensions (subtract insets), replaced `100vw/vh` with CSS vars |
|
||||
|
||||
### Common Patterns
|
||||
|
||||
1. **Adding new element rules:** Copy the pattern from `p` rules (e.g., adding `li` for #3494)
|
||||
2. **EPUB CSS neutralization:** Add regex in `transformStylesheet()` to replace problematic declarations
|
||||
3. **Conditional overrides:** Use `overrideColor`/`overrideLayout` flags to gate rules
|
||||
4. **Selector narrowing:** Use class qualifiers or attribute pseudo-selectors to avoid over-matching
|
||||
5. **Table fixes:** Always use `getComputedStyle()`, not inline style. Check both width paths.
|
||||
|
||||
### CSS Variables from foliate-js
|
||||
|
||||
- `--available-width` - Usable content width (set by paginator.js)
|
||||
- `--available-height` - Usable content height
|
||||
- `--full-width` - Full viewport width (numeric, multiply by 1px)
|
||||
- `--full-height` - Full viewport height (numeric, multiply by 1px)
|
||||
- `--overlayer-highlight-opacity` - Highlight transparency (default 0.3)
|
||||
|
||||
### foliate-js Rendering (`packages/foliate-js/paginator.js`)
|
||||
|
||||
Key functions:
|
||||
- `columnize()` - Paginated layout path
|
||||
- `scrolled()` - Scrolled layout path
|
||||
- `setImageSize()` - Constrains image dimensions to available space
|
||||
- `#replaceBackground()` - Transfers EPUB backgrounds to paginator layer
|
||||
- `snap()` - Swipe gesture detection for page turning
|
||||
|
||||
Common issue: A fix applied to `columnize()` but not `scrolled()` (or vice versa). Always check both paths.
|
||||
@@ -0,0 +1,70 @@
|
||||
# Layout & UI Fixes Reference
|
||||
|
||||
## Safe Area Insets
|
||||
|
||||
### Architecture
|
||||
- Native plugins push inset values: iOS (`NativeBridgePlugin.swift`), Android (`NativeBridgePlugin.kt`)
|
||||
- `useSafeAreaInsets` hook (`src/hooks/useSafeAreaInsets.ts`) reads and caches values
|
||||
- Components use `gridInsets` for positioning relative to safe areas
|
||||
- CSS: `env(safe-area-inset-top/bottom/left/right)` for CSS-level insets
|
||||
|
||||
### Common Issues
|
||||
- **Stale insets after system UI change** (#3469): Call `onUpdateInsets()` after `setSystemUIVisibility()`
|
||||
- **iPad sidebar insets wrong** (#3395): Different inset handling needed for sidebar vs main view
|
||||
- **Android nav bar overlap** (#3466): Use `calc(env(safe-area-inset-bottom) + 16px)` for Android bottom padding
|
||||
- **Zoom controls behind status bar** (#3426): Pass `gridInsets` through component chain, use `Math.max(gridInsets.top, statusBarHeight)`
|
||||
|
||||
### Rules (see also `docs/safe-area-insets.md`)
|
||||
- Always pass `gridInsets` to overlay/floating components near screen edges
|
||||
- On Android, account for system navigation bar with `env(safe-area-inset-bottom)`
|
||||
- After toggling system UI visibility, force-refresh insets via `onUpdateInsets()`
|
||||
|
||||
## Z-Index Hierarchy
|
||||
- Navigation buttons: `z-10` (when visible)
|
||||
- Annotation nav bar: `z-10` (reduced from z-30 in #3386)
|
||||
- TTS control button: ensure above page nav buttons
|
||||
- Floating overlays: check against `gridInsets` positioning
|
||||
|
||||
## macOS Traffic Lights
|
||||
- Managed by `trafficLightStore.ts` and `HeaderBar.tsx`
|
||||
- **Fullscreen check required** (#3129): `await currentWindow.isFullscreen()` before hiding
|
||||
- **Timeout for visibility toggle** (#3488): Use 100ms delay to prevent flickering
|
||||
- **Sidebar interaction** (#3488): Check `getIsSideBarVisible()` before hiding traffic lights
|
||||
- Never hide traffic lights when sidebar is open
|
||||
|
||||
## Touch/Input Issues
|
||||
- **Slider hit area on iOS** (#3382): Use min-h-12, strip browser appearance with CSS
|
||||
- **Context menu on macOS** (#3324): 100ms delay before `onContextMenu()` to let pointer events complete
|
||||
- **Swipe sensitivity** (#3310): Use average velocity (distance/time) instead of instantaneous velocity for non-animated paging
|
||||
- **Touchpad natural scrolling** (#3127): Respect system natural scrolling setting in `usePagination.ts`
|
||||
|
||||
## Dialog/Menu Layout
|
||||
- **Dialog header** (#3352): Use `px-2 sm:pe-3 sm:ps-2` padding to align with border radius
|
||||
- **Settings alignment** (#3151): Use `Menu` component instead of raw `div` for consistent styling
|
||||
- **Dropdown for screen readers** (#3035): Use `DropdownContext` with overlay dismiss, not blur-based closing
|
||||
|
||||
## Component-Specific Fixes
|
||||
|
||||
### HeaderBar.tsx
|
||||
- Traffic light visibility management
|
||||
- Sidebar toggle persistent position (#3193)
|
||||
- Library button placement
|
||||
|
||||
### PageNavigationButtons.tsx
|
||||
- z-10 when visible (#3201)
|
||||
- Always shown for screen readers (#3036)
|
||||
- Toggle via `showPageNavButtons` setting
|
||||
|
||||
### ProgressInfo.tsx
|
||||
- Use physical `page`/`pages` from renderer, not estimated values (#3213, #3200)
|
||||
- CSS classes: `time-left-label`, `pages-left-label`, `progress-info-label` (#3343)
|
||||
|
||||
### ReadingRuler.tsx
|
||||
- Remove `containerStyle` from overlay so dimmed area covers full screen (#3304)
|
||||
|
||||
### NavigationBar.tsx
|
||||
- Handle `gridInsets` internally, not via pre-computed `navPadding` (#3466)
|
||||
|
||||
### ContentNavBar.tsx (annotation search results)
|
||||
- Floating buttons with drop shadow, not full-width bar (#3386)
|
||||
- z-10 z-index
|
||||
@@ -0,0 +1,85 @@
|
||||
# Platform Compatibility Fixes Reference
|
||||
|
||||
## Android
|
||||
|
||||
### WebView API Issues
|
||||
- **`navigator.getGamepads()`** returns null on older WebView (#3245): Always null-check before `.some()`
|
||||
- **`CompressionStream`** unavailable on some Android WebView versions (#3255): Add fallback zip compression path
|
||||
- **Annotation tools unresponsive** (#3225): Don't call `makeSelection()` immediately on pointer-up; let popup flow complete naturally
|
||||
- **Safe inset updates** (#3469): Call `onUpdateInsets()` after `setSystemUIVisibility()`
|
||||
- **Navigation bar overlap** (#3466): Use `calc(env(safe-area-inset-bottom) + 16px)` for bottom padding
|
||||
|
||||
### General Android Rules
|
||||
- Test with older WebView versions (97+)
|
||||
- Always check API availability before calling Web APIs
|
||||
- Touch event handling differs from iOS - avoid premature re-selection
|
||||
|
||||
## iOS
|
||||
|
||||
### Common Issues
|
||||
- **Slider touch dead zones** (#3382): Strip native appearance, use larger hit areas (min-h-12)
|
||||
- **Safe area insets stale** (#3395): Native Swift plugin must push updated insets
|
||||
- **Section content caching** (#3242, #3206): Don't cache section content in foliate-js when updating subitems; cached content retains stale styles after mode switch
|
||||
- **CompressionStream** (#3255): Also broken on iOS 15.x; zip.js has its own native API disable
|
||||
- **zip.js native API** (#3170): Disable native `CompressionStream`/`DecompressionStream` on iOS 15.x
|
||||
|
||||
### iOS-Specific Code
|
||||
- `src-tauri/plugins/tauri-plugin-native-bridge/ios/Sources/NativeBridgePlugin.swift`
|
||||
- Slider CSS: `-webkit-appearance: none; appearance: none` in globals.css
|
||||
- `useSafeAreaInsets.ts` hook
|
||||
|
||||
## macOS
|
||||
|
||||
### Traffic Lights (Window Controls)
|
||||
- Check `isFullscreen()` before hiding (#3129)
|
||||
- Use timeouts (100ms) for visibility transitions (#3488)
|
||||
- Don't hide when sidebar is open (#3488)
|
||||
|
||||
### Input Issues
|
||||
- **Context menu steals event loop** (#3324): 100ms setTimeout before calling menu.popup()
|
||||
- **Touchpad natural scrolling** (#3127): Respect system setting in `usePagination.ts`
|
||||
- **Two-finger swipe** (#3127): Support trackpad two-finger swipe for pagination
|
||||
|
||||
### macOS-Specific Code
|
||||
- `src-tauri/src/macos/` - Platform-specific Rust code
|
||||
- `src/store/trafficLightStore.ts`
|
||||
- `src/hooks/useTrafficLight.ts`
|
||||
|
||||
## Linux
|
||||
|
||||
### WebKitGTK Issues
|
||||
- **View Transitions API unsupported** (#3417): Feature-detect `document.startViewTransition` before calling
|
||||
- Use `useAppRouter.ts` to avoid transitions on Linux
|
||||
|
||||
## E-ink Devices
|
||||
|
||||
### Legibility Issues
|
||||
- **Low contrast colors** (#3258): Use `not-eink:` Tailwind variant prefix for colors/opacity
|
||||
- **Links invisible** (#3258): Don't apply `text-primary` (blue) on e-ink; use default text color
|
||||
- **Opacity too low** (#3258): Don't apply `opacity-60`/`opacity-75` on e-ink devices
|
||||
- **Highlight visibility** (#3299): Use foreground color for highlights in dark mode e-ink
|
||||
|
||||
### E-ink CSS Pattern
|
||||
```
|
||||
// Instead of:
|
||||
className="text-primary opacity-60"
|
||||
// Use:
|
||||
className="not-eink:text-primary not-eink:opacity-60"
|
||||
```
|
||||
|
||||
## Docker/Self-Hosting
|
||||
- **Missing submodules** (#3233): Run `git submodule update --init --recursive` before build
|
||||
- Simplecc WASM module must be initialized
|
||||
|
||||
## OPDS
|
||||
- **Non-ASCII credentials** (#3436): Use `TextEncoder` + manual Base64 instead of `btoa()`
|
||||
- **Author parsing** (#3120): Handle varied metadata structures in OPDS 2.0 feeds
|
||||
- **Responsive layout** (#3418): Ensure catalog and download button layout works on small screens
|
||||
|
||||
## Cross-Platform Testing Checklist
|
||||
1. Android (old WebView + current)
|
||||
2. iOS (15.x + current)
|
||||
3. macOS (traffic lights, trackpad)
|
||||
4. Linux (WebKitGTK)
|
||||
5. E-ink devices (contrast, colors)
|
||||
6. Web (CloudFlare Workers deployment)
|
||||
@@ -0,0 +1,50 @@
|
||||
# TTS (Text-to-Speech) Fixes Reference
|
||||
|
||||
## Architecture
|
||||
|
||||
### Key Components
|
||||
- `TTSController` (`src/services/tts/TTSController.ts`) - Core state machine
|
||||
- `EdgeTTSClient` (`src/services/tts/EdgeTTSClient.ts`) - Edge TTS provider
|
||||
- `useTTSControl` hook (`src/app/reader/hooks/useTTSControl.ts`) - React integration
|
||||
- `useTTSMediaSession` hook (`src/app/reader/hooks/useTTSMediaSession.ts`) - Media controls
|
||||
|
||||
### Section-Aware TTS Model
|
||||
TTS tracks its own section independently from the view via `#ttsSectionIndex`:
|
||||
- `#initTTSForSection()` - Creates TTS document for a section without changing the view
|
||||
- `#initTTSForNextSection()` / `#initTTSForPrevSection()` - Navigate TTS across sections
|
||||
- `#getHighlighter()` - Only returns highlighter if view section matches TTS section
|
||||
- `onSectionChange` callback - Notifies UI when TTS crosses section boundary
|
||||
- Highlights use CFI strings (not raw Range objects) for cross-section compatibility
|
||||
|
||||
### State Management Pitfalls
|
||||
1. **`#ttsSectionIndex` must match view section for highlights to work**
|
||||
- If `-1`, all highlight calls are suppressed
|
||||
- `shutdown()` sets it to `-1` but must also null out `this.view.tts`
|
||||
|
||||
2. **Guards/Refs that block re-entry:**
|
||||
- The old `ttsOnRef` guard blocked TTS restart from annotations (removed in #3292)
|
||||
- `view.tts` reference surviving shutdown blocked re-initialization (#3400)
|
||||
|
||||
3. **Timeouts that fire after pause:**
|
||||
- Edge TTS had a safety timeout that advanced sentences even when paused (#3244)
|
||||
- Solution: removed the entire `ontimeupdate` safety timeout mechanism
|
||||
|
||||
## Fix History
|
||||
|
||||
| Issue | Problem | Root Cause | Fix |
|
||||
|-------|---------|------------|-----|
|
||||
| #3100 | TTS scrolls too far | TTS coupled to view section | Added `#ttsSectionIndex`, "Back to TTS Location" button |
|
||||
| #3198 | TTS doesn't follow to next section | No `onSectionChange` callback | Added section change notification, extracted hooks |
|
||||
| #3244 | Paused TTS advances | Safety timeout fires after pause | Removed `ontimeupdate` timeout mechanism |
|
||||
| #3291 | TTS fails without lang attribute | Invalid SSML from missing lang | Set lang/xml:lang on html element from `ttsLang` |
|
||||
| #3292 | Can't restart TTS from annotation | `ttsOnRef` blocks re-entry | Removed the guard ref entirely |
|
||||
| #3400 | TTS highlight stops after restart | `view.tts` not nulled on shutdown | Added `this.view.tts = null` in `shutdown()` |
|
||||
|
||||
## Debugging TTS Issues
|
||||
|
||||
1. **TTS doesn't start:** Check `#initTTSForSection()` - does `view.tts.doc === doc` shortcut early?
|
||||
2. **No highlights:** Check `#ttsSectionIndex` matches view's section index
|
||||
3. **Advances when paused:** Look for setTimeout/timer callbacks that bypass pause state
|
||||
4. **Can't restart:** Check for refs/guards that prevent re-entry into speak handlers
|
||||
5. **Fails on some chapters:** Check if chapter has lang attribute and XHTML namespace
|
||||
6. **SSML errors:** Check `src/utils/ssml.ts` for proper namespace/lang handling
|
||||
@@ -0,0 +1,5 @@
|
||||
## Test-First Development
|
||||
|
||||
- Always write a failing unit test **before** implementing a fix.
|
||||
- Run the test to confirm it reproduces the bug or fails as expected, then apply the fix and verify the test passes.
|
||||
- Run the full test suite (`pnpm test`) after changes to ensure no regressions.
|
||||
@@ -0,0 +1,5 @@
|
||||
## TypeScript
|
||||
|
||||
- Never use the `any` type. Use `unknown`, proper types, or generics instead.
|
||||
- Strict mode is enabled. Target is ES2022.
|
||||
- Unused vars prefixed with `_` are allowed (ESLint configured).
|
||||
@@ -0,0 +1,8 @@
|
||||
## Verification (done-conditions)
|
||||
|
||||
Before marking work complete, all applicable checks must pass:
|
||||
|
||||
1. `pnpm test` — unit tests
|
||||
2. `pnpm lint` — ESLint
|
||||
3. `pnpm fmt:check` — Rust format check (only when `src-tauri/` files changed)
|
||||
4. `pnpm clippy:check` — Rust lint (only when `src-tauri/` files changed)
|
||||
Submodule
+1
Submodule apps/readest-app/.claude/skills/gstack added at 1f4b6fd7a2
@@ -3,7 +3,7 @@ PDFJS_FONTS_PATH=../../packages/foliate-js/node_modules/pdfjs-dist
|
||||
PDFJS_STYLE_PATH=../../packages/foliate-js/vendor/pdfjs
|
||||
|
||||
NEXT_PUBLIC_DEFAULT_POSTHOG_URL_BASE64="aHR0cHM6Ly91cy5pLnBvc3Rob2cuY29t"
|
||||
NEXT_PUBLIC_DEFAULT_POSTHOG_KEY_BASE64="cGhjX2ViNXowbVRxWm8yZm5YYnZGNmE3bFh5TThpTmRSNTNsR1A3VFM3VGh4S08="
|
||||
NEXT_PUBLIC_DEFAULT_POSTHOG_KEY_BASE64="cGhjX0x3ekhZRWtsZUVub3ZSc05ZQlRpTVRTV2MyS1NUOFdZMzBIWWFhN0ZPa1IK"
|
||||
|
||||
NEXT_PUBLIC_DEFAULT_SUPABASE_URL_BASE64="aHR0cHM6Ly9yZWFkZXN0LnN1cGFiYXNlLmNv"
|
||||
NEXT_PUBLIC_DEFAULT_SUPABASE_KEY_BASE64="ZXlKaGJHY2lPaUpJVXpJMU5pSXNJblI1Y0NJNklrcFhWQ0o5LmV5SnBjM01pT2lKemRYQmhZbUZ6WlNJc0luSmxaaUk2SW5aaWMzbDRablZ6YW1weFpIaHJhbkZzZVhOaklpd2ljbTlzWlNJNkltRnViMjRpTENKcFlYUWlPakUzTXpReE1qTTJOekVzSW1WNGNDSTZNakEwT1RZNU9UWTNNWDAuM1U1VXFhb3VfMVNnclZlMWVvOXJBcGMwdUtqcWhwUWRVWGh2d1VIbVVmZw=="
|
||||
|
||||
@@ -28,3 +28,5 @@ S3_ACCESS_KEY_ID=PLACE_HOLDER
|
||||
S3_SECRET_ACCESS_KEY=PLACE_HOLDER
|
||||
S3_BUCKET_NAME=PLACE_HOLDER
|
||||
S3_REGION=PLACE_HOLDER
|
||||
|
||||
TEMP_STORAGE_PUBLIC_BUCKET_NAME=PLACE_HOLDER
|
||||
|
||||
@@ -1 +1,3 @@
|
||||
NEXT_PUBLIC_APP_PLATFORM=tauri
|
||||
NEXT_PUBLIC_APP_PLATFORM=tauri
|
||||
|
||||
DBUS_ID=com.bilingify.readest
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
NEXT_PUBLIC_APP_PLATFORM=tauri
|
||||
AI_GATEWAY_API_KEY=your_key_here
|
||||
@@ -0,0 +1,3 @@
|
||||
NEXT_PUBLIC_APP_PLATFORM=web
|
||||
AI_GATEWAY_API_KEY=your_key_here
|
||||
NEXT_PUBLIC_AI_GATEWAY_API_KEY=your_key_here
|
||||
@@ -48,6 +48,9 @@ tauri.*.conf.json
|
||||
*.tsbuildinfo
|
||||
next-env.d.ts
|
||||
|
||||
# eslint
|
||||
.eslintcache
|
||||
|
||||
#generated
|
||||
src-tauri/gen
|
||||
|
||||
@@ -60,3 +63,8 @@ src-tauri/gen
|
||||
/public/fallback-*.js
|
||||
/public/swe-worker-*.js
|
||||
|
||||
/dist/
|
||||
|
||||
.claude/settings.local.json
|
||||
.claude/skills
|
||||
|
||||
|
||||
@@ -0,0 +1,91 @@
|
||||
## Project Overview
|
||||
|
||||
Readest is a cross-platform ebook reader built as a **Next.js 16 + Tauri v2** hybrid app. It's part of a pnpm monorepo at `/apps/readest-app/`. The app runs on web (CloudFlare Workers), desktop (macOS/Windows/Linux via Tauri), and mobile (iOS/Android via Tauri).
|
||||
|
||||
## Common Commands
|
||||
|
||||
```bash
|
||||
# Development
|
||||
pnpm dev-web # Web-only dev server (no Rust compilation needed)
|
||||
pnpm tauri dev # Desktop dev with Tauri (compiles Rust backend)
|
||||
|
||||
# Building
|
||||
pnpm build # Build Next.js for Tauri
|
||||
pnpm build-web # Build Next.js for web deployment
|
||||
|
||||
# Testing (see [docs/testing.md](docs/testing.md) for full details)
|
||||
pnpm test # Unit tests (vitest + jsdom)
|
||||
pnpm test -- src/__tests__/utils/misc.test.ts # Run a single test file
|
||||
pnpm test -- --watch # Watch mode
|
||||
pnpm test:browser # Browser tests (Chromium via Playwright)
|
||||
pnpm tauri:dev:test # Start Tauri app with webdriver
|
||||
pnpm test:tauri # Run Tauri integration tests
|
||||
|
||||
# Linting & Formatting
|
||||
pnpm lint # ESLint
|
||||
pnpm format # Prettier (runs from monorepo root)
|
||||
pnpm format:check # Check formatting without writing
|
||||
|
||||
# Rust
|
||||
pnpm fmt:check # Check formatting Rust code (src-tauri)
|
||||
pnpm clippy:check # Lint Rust code (src-tauri)
|
||||
```
|
||||
|
||||
### Source Layout
|
||||
|
||||
| Directory | Purpose |
|
||||
| ----------------- | ------------------------------------------------------------- |
|
||||
| `src/app/` | Next.js App Router pages and API routes |
|
||||
| `src/components/` | React components (reader, settings, library, assistant, etc.) |
|
||||
| `src/services/` | Business logic: TTS, translators, OPDS, sync, AI, metadata |
|
||||
| `src/store/` | Zustand state stores |
|
||||
| `src/hooks/` | Custom React hooks |
|
||||
| `src/libs/` | Document loaders, payment, storage, sync |
|
||||
| `src/utils/` | Pure utility functions |
|
||||
| `src/types/` | TypeScript type definitions |
|
||||
| `src/context/` | React Context providers (Auth, Env, Sync, etc.) |
|
||||
| `src/workers/` | Web Workers for background tasks |
|
||||
| `src-tauri/` | Rust backend: Tauri plugins, platform-specific code |
|
||||
|
||||
### Path Aliases (tsconfig)
|
||||
|
||||
- `@/*` → `./src/*`
|
||||
- `@/components/ui/*` → `./src/components/primitives/*`
|
||||
|
||||
### Rust Backend (`src-tauri/`)
|
||||
|
||||
Platform-specific code lives in `src-tauri/src/{macos,windows,android,ios}/`. Custom Tauri plugins are in `src-tauri/plugins/`.
|
||||
|
||||
## Project Rules
|
||||
|
||||
Rules are in `.claude/rules/`: test-first, typescript, verification.
|
||||
|
||||
### i18n
|
||||
|
||||
See [docs/i18n.md](docs/i18n.md) for the key-as-content translation approach, `stubTranslation` usage in non-React modules, and extraction workflow.
|
||||
|
||||
### Safe Area Insets
|
||||
|
||||
See [docs/safe-area-insets.md](docs/safe-area-insets.md) for rules on handling top/bottom insets for UI elements near screen edges.
|
||||
|
||||
## Web Browsing & QA (gstack)
|
||||
|
||||
For all web browsing, QA testing, and site interaction, use the `/browse` skill from gstack. **Never use `mcp__claude-in-chrome__*` tools directly.**
|
||||
|
||||
Available gstack skills:
|
||||
|
||||
- `/plan-ceo-review` — CEO/founder-mode plan review
|
||||
- `/plan-eng-review` — Eng manager-mode plan review
|
||||
- `/plan-design-review` — Designer's eye review of a live site
|
||||
- `/design-consultation` — Design system consultation
|
||||
- `/review` — Pre-landing PR review
|
||||
- `/ship` — Ship workflow (merge, test, review, bump, PR)
|
||||
- `/browse` — Fast headless browser for QA and site interaction
|
||||
- `/qa` — QA test and fix bugs
|
||||
- `/qa-only` — QA report only (no fixes)
|
||||
- `/qa-design-review` — Designer's eye QA with fixes
|
||||
- `/setup-browser-cookies` — Import cookies for authenticated testing
|
||||
- `/retro` — Weekly engineering retrospective
|
||||
- `/document-release` — Post-ship documentation update
|
||||
|
||||
If gstack skills aren't working, run `cd .claude/skills/gstack && ./setup` to build the binary and register skills.
|
||||
Symlink
+1
@@ -0,0 +1 @@
|
||||
AGENTS.md
|
||||
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"$schema": "https://ui.shadcn.com/schema.json",
|
||||
"style": "new-york",
|
||||
"rsc": true,
|
||||
"tsx": true,
|
||||
"tailwind": {
|
||||
"config": "tailwind.config.ts",
|
||||
"css": "src/styles/globals.css",
|
||||
"baseColor": "neutral",
|
||||
"cssVariables": true,
|
||||
"prefix": ""
|
||||
},
|
||||
"iconLibrary": "lucide",
|
||||
"aliases": {
|
||||
"components": "@/components",
|
||||
"utils": "@/utils",
|
||||
"ui": "@/components/ui",
|
||||
"lib": "@/libs",
|
||||
"hooks": "@/hooks"
|
||||
},
|
||||
"registries": {}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
## i18n Guide
|
||||
|
||||
Readest uses a **key-as-content** approach — English strings are the translation keys. The English locale (`en/translation.json`) is empty because keys serve as content. Other locales contain actual translations.
|
||||
|
||||
### In React Components
|
||||
|
||||
```tsx
|
||||
import { useTranslation } from '@/hooks/useTranslation';
|
||||
|
||||
const _ = useTranslation();
|
||||
_('Progress synced');
|
||||
```
|
||||
|
||||
### In Non-React Modules
|
||||
|
||||
Two-step process:
|
||||
|
||||
**1. Declaration** — Use `stubTranslation` to mark strings for scanner extraction (returns key as-is, does NOT translate):
|
||||
|
||||
```ts
|
||||
import { stubTranslation as _ } from '@/utils/misc';
|
||||
|
||||
// These calls only register keys for extraction
|
||||
_('Reveal in Finder');
|
||||
_('Reveal in Explorer');
|
||||
```
|
||||
|
||||
**2. Usage** — In the React component that consumes the value, apply the real `_()` from `useTranslation`:
|
||||
|
||||
```tsx
|
||||
const _ = useTranslation();
|
||||
const label = _(getRevealLabel()); // translates at runtime
|
||||
```
|
||||
|
||||
### Extraction & Translation
|
||||
|
||||
```bash
|
||||
pnpm i18n:extract # Scans codebase, adds new keys with __STRING_NOT_TRANSLATED__
|
||||
```
|
||||
|
||||
- Translation files: `public/locales/<locale>/translation.json`
|
||||
- Only `_('KEY')` and `_('KEY', options)` patterns are recognized by i18next-scanner
|
||||
|
||||
### Rules
|
||||
|
||||
- `stubTranslation` is for extraction only — always apply `_()` from `useTranslation` in the component for runtime translation.
|
||||
- Fallback: when no translation exists, the English key itself is displayed.
|
||||
- Error messages: register keys with `stubTranslation` in utility modules (e.g. `src/services/errors.ts`), return the English key from helpers, wrap with `_()` in the component.
|
||||
@@ -0,0 +1,52 @@
|
||||
## Safe Area Insets
|
||||
|
||||
The app runs on devices with notches, status bars, and rounded corners (iOS, Android). UI elements near screen edges must account for safe area insets to avoid being obscured.
|
||||
|
||||
### Key Concepts
|
||||
|
||||
- **`gridInsets: Insets`** — Per-view insets derived from view settings (header/footer visibility, margins). Calculated by `getViewInsets()` in `src/utils/insets.ts`. Passed as a prop from `BooksGrid` → child components.
|
||||
- **`statusBarHeight: number`** — OS status bar height (default 24px). Stored in `themeStore`.
|
||||
- **`systemUIVisible: boolean`** — Whether the system UI (status bar, navigation bar) is currently shown. Stored in `themeStore`.
|
||||
- **`appService?.hasSafeAreaInset`** — Whether the platform requires safe area handling (mobile devices).
|
||||
|
||||
### Top Inset Rules
|
||||
|
||||
For UI elements anchored to the **top** of the screen (headers, close buttons, overlays):
|
||||
|
||||
```tsx
|
||||
// When system UI is visible, use the larger of gridInsets.top and statusBarHeight
|
||||
// When system UI is hidden, use gridInsets.top alone
|
||||
style={{
|
||||
marginTop: systemUIVisible
|
||||
? `${Math.max(gridInsets.top, statusBarHeight)}px`
|
||||
: `${gridInsets.top}px`,
|
||||
}}
|
||||
```
|
||||
|
||||
For containers that need safe area padding at the top:
|
||||
|
||||
```tsx
|
||||
style={{
|
||||
paddingTop: appService?.hasSafeAreaInset ? `${gridInsets.top}px` : '0px',
|
||||
}}
|
||||
```
|
||||
|
||||
### Bottom Inset Rules
|
||||
|
||||
For UI elements anchored to the **bottom** of the screen (footer bars, controls, progress indicators), use `gridInsets.bottom * 0.33` as padding — a fraction of the full inset since bottom bars don't need as much clearance as the home indicator area:
|
||||
|
||||
```tsx
|
||||
style={{
|
||||
paddingBottom: appService?.hasSafeAreaInset ? `${gridInsets.bottom * 0.33}px` : 0,
|
||||
}}
|
||||
```
|
||||
|
||||
### Passing `gridInsets`
|
||||
|
||||
When creating overlay components (image viewers, table viewers, zoom controls, etc.), always pass `gridInsets` as a prop so they can position their controls correctly:
|
||||
|
||||
```tsx
|
||||
<ImageViewer gridInsets={gridInsets} ... />
|
||||
<TableViewer gridInsets={gridInsets} ... />
|
||||
<ZoomControls gridInsets={gridInsets} ... />
|
||||
```
|
||||
@@ -0,0 +1,110 @@
|
||||
# Testing
|
||||
|
||||
Readest uses three test tiers, all powered by [Vitest](https://vitest.dev/).
|
||||
|
||||
## Unit Tests (`pnpm test`)
|
||||
|
||||
Runs tests in a **jsdom** environment. No browser or Tauri runtime required.
|
||||
|
||||
```bash
|
||||
pnpm test # Run all unit tests
|
||||
pnpm test -- src/__tests__/utils/misc.test.ts # Run a single file
|
||||
pnpm test -- --watch # Watch mode
|
||||
```
|
||||
|
||||
- **Config:** `vitest.config.mts`
|
||||
- **Pattern:** `src/**/*.test.ts` (excludes `*.browser.test.ts` and `*.tauri.test.ts`)
|
||||
- **Environment:** jsdom
|
||||
- **Use for:** Pure logic, utilities, services that don't need real browser APIs or Tauri IPC.
|
||||
|
||||
## Browser Tests (`pnpm test:browser`)
|
||||
|
||||
Runs tests in a **real Chromium** browser via Playwright. Required for code that depends on Web Workers, SharedArrayBuffer, OPFS, or other browser-only APIs.
|
||||
|
||||
```bash
|
||||
pnpm test:browser
|
||||
```
|
||||
|
||||
- **Config:** `vitest.browser.config.mts`
|
||||
- **Pattern:** `src/**/*.browser.test.ts`
|
||||
- **Browser:** Chromium (headless, via `@vitest/browser-playwright`)
|
||||
- **Use for:** WASM modules (e.g. `@tursodatabase/database-wasm`), Web Worker integration, browser-specific storage APIs.
|
||||
|
||||
## Tauri Integration Tests (`pnpm test:tauri`)
|
||||
|
||||
Runs Vitest tests **inside the Tauri WebView**, with access to Tauri IPC and native plugin commands. Tests execute in the actual app environment.
|
||||
|
||||
### Step 1: Start the Tauri App
|
||||
|
||||
In one terminal, start the app with the `webdriver` feature enabled:
|
||||
|
||||
```bash
|
||||
pnpm tauri:dev:test # Dev mode (uses tauri dev server, faster iteration)
|
||||
pnpm tauri:build:test # Debug release build (closer to production)
|
||||
```
|
||||
|
||||
These commands compile the Rust backend with `--features webdriver`, which:
|
||||
|
||||
- Includes `tauri-plugin-webdriver` (embeds a W3C WebDriver server on port 4445)
|
||||
- Adds a runtime capability granting plugin permissions to remote URLs (`http://127.0.0.1:*`), so Vitest's browser-mode iframe can call Tauri IPC
|
||||
|
||||
Keep this running while you run tests.
|
||||
|
||||
### Step 2: Run Tests
|
||||
|
||||
In another terminal:
|
||||
|
||||
```bash
|
||||
pnpm test:tauri
|
||||
```
|
||||
|
||||
Vitest connects directly to the embedded WebDriver server (port 4445) in the running Tauri app and executes tests inside its WebView.
|
||||
|
||||
- **Config:** `vitest.tauri.config.mts`
|
||||
- **Pattern:** `src/**/*.tauri.test.ts`
|
||||
- **Browser provider:** `@vitest/browser-webdriverio` (connects to port 4445)
|
||||
- **Use for:** Tauri plugin commands (turso, native-tts, etc.), native filesystem, Tauri IPC.
|
||||
|
||||
### Writing Tauri Tests
|
||||
|
||||
Tests access Tauri IPC via a shared helper:
|
||||
|
||||
```typescript
|
||||
import { invoke } from '../tauri/tauri-invoke';
|
||||
|
||||
it('calls a plugin command', async () => {
|
||||
const result = await invoke('plugin:turso|load', { options: { path: 'sqlite::memory:' } });
|
||||
expect(result).toBeDefined();
|
||||
});
|
||||
```
|
||||
|
||||
The `invoke()` helper accesses `window.top.__TAURI_INTERNALS__` (Vitest runs in an iframe, Tauri injects IPC into the main frame).
|
||||
|
||||
**Limitations:** Only custom invoke commands and plugin commands listed in the webdriver capability work. Standard Tauri JS APIs (e.g. `@tauri-apps/api`) that rely on `URL: local` may not work from the Vitest iframe.
|
||||
|
||||
## E2E Tests (WDIO)
|
||||
|
||||
Full end-to-end tests using WebDriverIO, for UI-level testing against the running Tauri app. Same two-step workflow as Tauri integration tests.
|
||||
|
||||
```bash
|
||||
# Terminal 1: start the app (same as for Tauri integration tests)
|
||||
pnpm tauri:dev:test
|
||||
|
||||
# Terminal 2: run E2E tests
|
||||
pnpm test:e2e
|
||||
```
|
||||
|
||||
- **Config:** `wdio.conf.ts`
|
||||
- **Pattern:** `e2e/**/*.e2e.ts`
|
||||
- **Framework:** Mocha (via `@wdio/mocha-framework`)
|
||||
- **Connects to:** port 4445 (embedded WebDriver server)
|
||||
- **Use for:** UI interaction tests, window management, navigation flows.
|
||||
|
||||
## Test File Naming
|
||||
|
||||
| Suffix | Runner | Environment |
|
||||
| ------------------- | ------------------- | --------------------- |
|
||||
| `*.test.ts` | `pnpm test` | jsdom |
|
||||
| `*.browser.test.ts` | `pnpm test:browser` | Chromium (Playwright) |
|
||||
| `*.tauri.test.ts` | `pnpm test:tauri` | Tauri WebView |
|
||||
| `*.e2e.ts` | `pnpm test:e2e` | Tauri app (WDIO) |
|
||||
@@ -0,0 +1,123 @@
|
||||
describe('Readest App Launch', () => {
|
||||
it('should have a visible body element', async () => {
|
||||
const body = await $('body');
|
||||
await body.waitForDisplayed({ timeout: 10000 });
|
||||
expect(await body.isDisplayed()).toBe(true);
|
||||
});
|
||||
|
||||
it('should have the correct window handle', async () => {
|
||||
const handle = await browser.getWindowHandle();
|
||||
expect(handle).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should return the page source', async () => {
|
||||
const source = await browser.getPageSource();
|
||||
expect(source).toContain('html');
|
||||
});
|
||||
});
|
||||
|
||||
describe('Library Page', () => {
|
||||
it('should navigate to the library page', async () => {
|
||||
const url = await browser.getUrl();
|
||||
expect(url).toMatch(/library|localhost/);
|
||||
});
|
||||
|
||||
it('should display the library container', async () => {
|
||||
const library = await $('[aria-label="Your Library"]');
|
||||
await library.waitForExist({ timeout: 15000 });
|
||||
expect(await library.isExisting()).toBe(true);
|
||||
});
|
||||
|
||||
it('should display the library header', async () => {
|
||||
const header = await $('[aria-label="Library Header"]');
|
||||
await header.waitForExist({ timeout: 10000 });
|
||||
expect(await header.isExisting()).toBe(true);
|
||||
});
|
||||
|
||||
it('should display the bookshelf area', async () => {
|
||||
const bookshelf = await $('[aria-label="Bookshelf"]');
|
||||
await bookshelf.waitForExist({ timeout: 10000 });
|
||||
expect(await bookshelf.isExisting()).toBe(true);
|
||||
});
|
||||
|
||||
it('should have a search input', async () => {
|
||||
const searchInput = await $('.search-input');
|
||||
await searchInput.waitForExist({ timeout: 10000 });
|
||||
expect(await searchInput.isExisting()).toBe(true);
|
||||
});
|
||||
|
||||
it('should allow typing in the search input', async () => {
|
||||
const searchInput = await $('.search-input');
|
||||
await searchInput.waitForDisplayed({ timeout: 10000 });
|
||||
await searchInput.setValue('test search');
|
||||
const value = await searchInput.getValue();
|
||||
expect(value).toBe('test search');
|
||||
});
|
||||
|
||||
it('should show the clear search button after typing', async () => {
|
||||
const clearBtn = await $('[aria-label="Clear Search"]');
|
||||
await clearBtn.waitForExist({ timeout: 5000 });
|
||||
expect(await clearBtn.isExisting()).toBe(true);
|
||||
});
|
||||
|
||||
it('should clear the search input when clear button is clicked', async () => {
|
||||
const clearBtn = await $('[aria-label="Clear Search"]');
|
||||
await clearBtn.click();
|
||||
const searchInput = await $('.search-input');
|
||||
const value = await searchInput.getValue();
|
||||
expect(value).toBe('');
|
||||
});
|
||||
|
||||
it('should have a select books button', async () => {
|
||||
const selectBtn = await $('[aria-label="Select Books"]');
|
||||
await selectBtn.waitForExist({ timeout: 10000 });
|
||||
expect(await selectBtn.isExisting()).toBe(true);
|
||||
});
|
||||
|
||||
it('should have an import books button', async () => {
|
||||
const importBtn = await $('[aria-label="Import Books"]');
|
||||
await importBtn.waitForExist({ timeout: 10000 });
|
||||
expect(await importBtn.isExisting()).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
describe('Window Management', () => {
|
||||
it('should return the window size', async () => {
|
||||
const size = await browser.getWindowSize();
|
||||
expect(size.width).toBeGreaterThan(0);
|
||||
expect(size.height).toBeGreaterThan(0);
|
||||
});
|
||||
});
|
||||
|
||||
describe('JavaScript Execution', () => {
|
||||
it('should execute JavaScript in the app context', async () => {
|
||||
const result = await browser.execute(() => {
|
||||
return document.readyState;
|
||||
});
|
||||
expect(result).toBe('complete');
|
||||
});
|
||||
|
||||
it('should access the document title via JS', async () => {
|
||||
const title = await browser.execute(() => {
|
||||
return document.title;
|
||||
});
|
||||
expect(title).toContain('Readest');
|
||||
});
|
||||
|
||||
it('should detect the app platform globals', async () => {
|
||||
const hasCLIAccess = await browser.execute(() => {
|
||||
return (window as unknown as Record<string, unknown>).__READEST_CLI_ACCESS === true;
|
||||
});
|
||||
expect(hasCLIAccess).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
describe('Navigation', () => {
|
||||
it('should navigate back to library after visiting another route', async () => {
|
||||
const currentUrl = await browser.getUrl();
|
||||
await browser.url(currentUrl.replace(/\/[^/]*$/, '/library'));
|
||||
const library = await $('[aria-label="Your Library"]');
|
||||
await library.waitForExist({ timeout: 15000 });
|
||||
expect(await library.isExisting()).toBe(true);
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"target": "ES2022",
|
||||
"module": "ESNext",
|
||||
"moduleResolution": "bundler",
|
||||
"strict": true,
|
||||
"skipLibCheck": true,
|
||||
"types": ["mocha", "@wdio/globals/types"]
|
||||
},
|
||||
"include": ["./**/*.ts"]
|
||||
}
|
||||
@@ -1,20 +1,40 @@
|
||||
import { defineConfig, globalIgnores } from 'eslint/config';
|
||||
import next from 'eslint-config-next';
|
||||
import nextVitals from 'eslint-config-next/core-web-vitals';
|
||||
import tseslint from 'eslint-config-next/typescript';
|
||||
import jsxA11y from 'eslint-plugin-jsx-a11y';
|
||||
|
||||
const eslintConfig = defineConfig([
|
||||
...tseslint,
|
||||
...next,
|
||||
...nextVitals,
|
||||
{
|
||||
rules: jsxA11y.configs.recommended.rules,
|
||||
rules: {
|
||||
...jsxA11y.configs.recommended.rules,
|
||||
'@next/next/no-img-element': 'off',
|
||||
'@typescript-eslint/no-unused-vars': [
|
||||
'warn',
|
||||
{
|
||||
argsIgnorePattern: '^_',
|
||||
varsIgnorePattern: '^_',
|
||||
caughtErrorsIgnorePattern: '^_',
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
globalIgnores([
|
||||
'node_modules/**',
|
||||
'.next/**',
|
||||
'.open-next/**',
|
||||
'.wrangler/**',
|
||||
'.claude/**',
|
||||
'dist/**',
|
||||
'out/**',
|
||||
'build/**',
|
||||
'public/**',
|
||||
'src-tauri/**',
|
||||
'next-env.d.ts',
|
||||
'i18next-scanner.config.cjs',
|
||||
]),
|
||||
]);
|
||||
|
||||
|
||||
@@ -0,0 +1,588 @@
|
||||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
version = 4
|
||||
|
||||
[[package]]
|
||||
name = "adler2"
|
||||
version = "2.0.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"
|
||||
|
||||
[[package]]
|
||||
name = "anyhow"
|
||||
version = "1.0.100"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61"
|
||||
|
||||
[[package]]
|
||||
name = "arbitrary"
|
||||
version = "1.4.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1"
|
||||
dependencies = [
|
||||
"derive_arbitrary",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "autocfg"
|
||||
version = "1.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
|
||||
|
||||
[[package]]
|
||||
name = "base64"
|
||||
version = "0.22.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
|
||||
|
||||
[[package]]
|
||||
name = "bitflags"
|
||||
version = "2.10.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3"
|
||||
|
||||
[[package]]
|
||||
name = "bumpalo"
|
||||
version = "3.19.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43"
|
||||
|
||||
[[package]]
|
||||
name = "bytemuck"
|
||||
version = "1.24.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4"
|
||||
|
||||
[[package]]
|
||||
name = "byteorder-lite"
|
||||
version = "0.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495"
|
||||
|
||||
[[package]]
|
||||
name = "cfg-if"
|
||||
version = "1.0.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
|
||||
|
||||
[[package]]
|
||||
name = "color_quant"
|
||||
version = "1.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
|
||||
|
||||
[[package]]
|
||||
name = "crc32fast"
|
||||
version = "1.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "derive_arbitrary"
|
||||
version = "1.4.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "directories-next"
|
||||
version = "2.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "339ee130d97a610ea5a5872d2bbb130fdf68884ff09d3028b81bec8a1ac23bbc"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"dirs-sys-next",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "dirs-sys-next"
|
||||
version = "0.1.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"redox_users",
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "equivalent"
|
||||
version = "1.0.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
|
||||
|
||||
[[package]]
|
||||
name = "fdeflate"
|
||||
version = "0.3.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c"
|
||||
dependencies = [
|
||||
"simd-adler32",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "flate2"
|
||||
version = "1.1.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb"
|
||||
dependencies = [
|
||||
"crc32fast",
|
||||
"libz-rs-sys",
|
||||
"miniz_oxide",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "getrandom"
|
||||
version = "0.2.16"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"libc",
|
||||
"wasi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "gif"
|
||||
version = "0.14.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f954a9e9159ec994f73a30a12b96a702dde78f5547bcb561174597924f7d4162"
|
||||
dependencies = [
|
||||
"color_quant",
|
||||
"weezl",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "hashbrown"
|
||||
version = "0.16.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100"
|
||||
|
||||
[[package]]
|
||||
name = "image"
|
||||
version = "0.25.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e6506c6c10786659413faa717ceebcb8f70731c0a60cbae39795fdf114519c1a"
|
||||
dependencies = [
|
||||
"bytemuck",
|
||||
"byteorder-lite",
|
||||
"color_quant",
|
||||
"gif",
|
||||
"image-webp",
|
||||
"moxcms",
|
||||
"num-traits",
|
||||
"png",
|
||||
"zune-core",
|
||||
"zune-jpeg",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "image-webp"
|
||||
version = "0.2.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "525e9ff3e1a4be2fbea1fdf0e98686a6d98b4d8f937e1bf7402245af1909e8c3"
|
||||
dependencies = [
|
||||
"byteorder-lite",
|
||||
"quick-error",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "indexmap"
|
||||
version = "2.12.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0ad4bb2b565bca0645f4d68c5c9af97fba094e9791da685bf83cb5f3ce74acf2"
|
||||
dependencies = [
|
||||
"equivalent",
|
||||
"hashbrown",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "libc"
|
||||
version = "0.2.177"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976"
|
||||
|
||||
[[package]]
|
||||
name = "libredox"
|
||||
version = "0.1.10"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "libz-rs-sys"
|
||||
version = "0.5.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "840db8cf39d9ec4dd794376f38acc40d0fc65eec2a8f484f7fd375b84602becd"
|
||||
dependencies = [
|
||||
"zlib-rs",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "log"
|
||||
version = "0.4.28"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432"
|
||||
|
||||
[[package]]
|
||||
name = "md5"
|
||||
version = "0.8.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ae960838283323069879657ca3de837e9f7bbb4c7bf6ea7f1b290d5e9476d2e0"
|
||||
|
||||
[[package]]
|
||||
name = "memchr"
|
||||
version = "2.7.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273"
|
||||
|
||||
[[package]]
|
||||
name = "miniz_oxide"
|
||||
version = "0.8.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316"
|
||||
dependencies = [
|
||||
"adler2",
|
||||
"simd-adler32",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "moxcms"
|
||||
version = "0.7.10"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "80986bbbcf925ebd3be54c26613d861255284584501595cf418320c078945608"
|
||||
dependencies = [
|
||||
"num-traits",
|
||||
"pxfm",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "num-traits"
|
||||
version = "0.2.19"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
|
||||
dependencies = [
|
||||
"autocfg",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "once_cell"
|
||||
version = "1.21.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
|
||||
|
||||
[[package]]
|
||||
name = "png"
|
||||
version = "0.18.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "97baced388464909d42d89643fe4361939af9b7ce7a31ee32a168f832a70f2a0"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
"crc32fast",
|
||||
"fdeflate",
|
||||
"flate2",
|
||||
"miniz_oxide",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro2"
|
||||
version = "1.0.103"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8"
|
||||
dependencies = [
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pxfm"
|
||||
version = "0.1.26"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b3502d6155304a4173a5f2c34b52b7ed0dd085890326cb50fd625fdf39e86b3b"
|
||||
dependencies = [
|
||||
"num-traits",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "quick-error"
|
||||
version = "2.0.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3"
|
||||
|
||||
[[package]]
|
||||
name = "quote"
|
||||
version = "1.0.42"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "redox_users"
|
||||
version = "0.4.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43"
|
||||
dependencies = [
|
||||
"getrandom",
|
||||
"libredox",
|
||||
"thiserror",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "simd-adler32"
|
||||
version = "0.3.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe"
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "2.0.111"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "thiserror"
|
||||
version = "1.0.69"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
|
||||
dependencies = [
|
||||
"thiserror-impl",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "thiserror-impl"
|
||||
version = "1.0.69"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "unicode-ident"
|
||||
version = "1.0.22"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5"
|
||||
|
||||
[[package]]
|
||||
name = "wasi"
|
||||
version = "0.11.1+wasi-snapshot-preview1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
|
||||
|
||||
[[package]]
|
||||
name = "weezl"
|
||||
version = "0.1.12"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a28ac98ddc8b9274cb41bb4d9d4d5c425b6020c50c46f25559911905610b4a88"
|
||||
|
||||
[[package]]
|
||||
name = "winapi"
|
||||
version = "0.3.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
|
||||
dependencies = [
|
||||
"winapi-i686-pc-windows-gnu",
|
||||
"winapi-x86_64-pc-windows-gnu",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "winapi-i686-pc-windows-gnu"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
|
||||
|
||||
[[package]]
|
||||
name = "winapi-x86_64-pc-windows-gnu"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
|
||||
|
||||
[[package]]
|
||||
name = "windows"
|
||||
version = "0.62.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "527fadee13e0c05939a6a05d5bd6eec6cd2e3dbd648b9f8e447c6518133d8580"
|
||||
dependencies = [
|
||||
"windows-collections",
|
||||
"windows-core",
|
||||
"windows-future",
|
||||
"windows-numerics",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-collections"
|
||||
version = "0.3.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "23b2d95af1a8a14a3c7367e1ed4fc9c20e0a26e79551b1454d72583c97cc6610"
|
||||
dependencies = [
|
||||
"windows-core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-core"
|
||||
version = "0.62.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb"
|
||||
dependencies = [
|
||||
"windows-implement",
|
||||
"windows-interface",
|
||||
"windows-link",
|
||||
"windows-result",
|
||||
"windows-strings",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-future"
|
||||
version = "0.3.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e1d6f90251fe18a279739e78025bd6ddc52a7e22f921070ccdc67dde84c605cb"
|
||||
dependencies = [
|
||||
"windows-core",
|
||||
"windows-link",
|
||||
"windows-threading",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-implement"
|
||||
version = "0.60.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-interface"
|
||||
version = "0.59.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-link"
|
||||
version = "0.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
|
||||
|
||||
[[package]]
|
||||
name = "windows-numerics"
|
||||
version = "0.3.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6e2e40844ac143cdb44aead537bbf727de9b044e107a0f1220392177d15b0f26"
|
||||
dependencies = [
|
||||
"windows-core",
|
||||
"windows-link",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-result"
|
||||
version = "0.4.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5"
|
||||
dependencies = [
|
||||
"windows-link",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-strings"
|
||||
version = "0.5.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091"
|
||||
dependencies = [
|
||||
"windows-link",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-threading"
|
||||
version = "0.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3949bd5b99cafdf1c7ca86b43ca564028dfe27d66958f2470940f73d86d75b37"
|
||||
dependencies = [
|
||||
"windows-link",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows_thumbnail"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"base64",
|
||||
"directories-next",
|
||||
"image",
|
||||
"md5",
|
||||
"once_cell",
|
||||
"windows",
|
||||
"windows-core",
|
||||
"zip",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "zip"
|
||||
version = "6.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "eb2a05c7c36fde6c09b08576c9f7fb4cda705990f73b58fe011abf7dfb24168b"
|
||||
dependencies = [
|
||||
"arbitrary",
|
||||
"crc32fast",
|
||||
"flate2",
|
||||
"indexmap",
|
||||
"memchr",
|
||||
"zopfli",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "zlib-rs"
|
||||
version = "0.5.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2f06ae92f42f5e5c42443fd094f245eb656abf56dd7cce9b8b263236565e00f2"
|
||||
|
||||
[[package]]
|
||||
name = "zopfli"
|
||||
version = "0.8.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f05cd8797d63865425ff89b5c4a48804f35ba0ce8d125800027ad6017d2b5249"
|
||||
dependencies = [
|
||||
"bumpalo",
|
||||
"crc32fast",
|
||||
"log",
|
||||
"simd-adler32",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "zune-core"
|
||||
version = "0.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "111f7d9820f05fd715df3144e254d6fc02ee4088b0644c0ffd0efc9e6d9d2773"
|
||||
|
||||
[[package]]
|
||||
name = "zune-jpeg"
|
||||
version = "0.5.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "dc6fb7703e32e9a07fb3f757360338b3a567a5054f21b5f52a666752e333d58e"
|
||||
dependencies = [
|
||||
"zune-core",
|
||||
]
|
||||
@@ -0,0 +1,31 @@
|
||||
[package]
|
||||
name = "windows_thumbnail"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
publish = false
|
||||
|
||||
[workspace]
|
||||
|
||||
[lib]
|
||||
name = "windows_thumbnail"
|
||||
path = "src/mod.rs"
|
||||
crate-type = ["cdylib"]
|
||||
|
||||
[dependencies]
|
||||
anyhow = "1"
|
||||
base64 = "0.22"
|
||||
directories-next = "2.0"
|
||||
image = { version = "0.25", default-features = false, features = ["png", "jpeg", "gif", "webp"] }
|
||||
md5 = "0.8"
|
||||
once_cell = "1.19"
|
||||
zip = { version = "6.0", default-features = false, features = ["deflate"] }
|
||||
windows = { version = "0.62", features = [
|
||||
"Win32_Foundation",
|
||||
"Win32_Graphics_Gdi",
|
||||
"Win32_Security",
|
||||
"Win32_System_Com",
|
||||
"Win32_System_LibraryLoader",
|
||||
"Win32_System_Registry",
|
||||
"Win32_UI_Shell",
|
||||
] }
|
||||
windows-core = "0.62"
|
||||
@@ -0,0 +1,134 @@
|
||||
# Windows Thumbnail Provider for Readest
|
||||
|
||||
This crate provides Windows Explorer thumbnail support for eBook files when Readest is set as the default application.
|
||||
|
||||
## Features
|
||||
|
||||
- **Automatic Cover Extraction**: Extracts cover images from EPUB, MOBI, AZW, AZW3, FB2, CBZ, CBR files
|
||||
- **Readest Branding**: Adds a small Readest icon overlay at the bottom-right corner
|
||||
- **Smart Caching**: Caches generated thumbnails for faster subsequent loads
|
||||
- **File Association Aware**: Only shows thumbnails when Readest is the default app for the file type
|
||||
- **COM Integration**: Full Windows Shell extension implementation via `IThumbnailProvider`
|
||||
|
||||
## Supported Formats
|
||||
|
||||
| Format | Extension | Cover Source |
|
||||
| ---------- | ----------------------- | ---------------------------- |
|
||||
| EPUB | `.epub` | OPF manifest cover reference |
|
||||
| MOBI/AZW | `.mobi`, `.azw`, `.prc` | EXTH cover offset |
|
||||
| AZW3/KF8 | `.azw3`, `.kf8` | KF8 format cover |
|
||||
| FB2 | `.fb2` | `<binary>` coverpage element |
|
||||
| Comic Book | `.cbz`, `.cbr` | First image in archive |
|
||||
| Plain Text | `.txt` | Generated placeholder |
|
||||
|
||||
## Building
|
||||
|
||||
### Library Only
|
||||
|
||||
```bash
|
||||
cargo build --release
|
||||
```
|
||||
|
||||
### COM DLL (for Windows Explorer integration)
|
||||
|
||||
```bash
|
||||
cargo build --release --features com
|
||||
```
|
||||
|
||||
### CLI Tool
|
||||
|
||||
```bash
|
||||
cargo build --release --features cli
|
||||
```
|
||||
|
||||
## Installation
|
||||
|
||||
The thumbnail provider DLL is automatically registered when Readest is installed via the NSIS installer.
|
||||
|
||||
### Manual Registration (for development)
|
||||
|
||||
```powershell
|
||||
# Register the DLL
|
||||
regsvr32 /s target\release\windows_thumbnail.dll
|
||||
|
||||
# Unregister the DLL
|
||||
regsvr32 /s /u target\release\windows_thumbnail.dll
|
||||
|
||||
# Refresh Explorer to see changes
|
||||
ie4uinit.exe -show
|
||||
```
|
||||
|
||||
After registration, you may need to restart Windows Explorer or log out/in for changes to take effect.
|
||||
|
||||
## Usage (Development / Manual testing)
|
||||
|
||||
For local development and testing, build the Windows DLL (or the library) from the Readest Tauri app folder and register it manually. The legacy CLI test harness used to live in the separate `packages/tauri` workspace, but the thumbnail handler implementation now lives inside Readest's Tauri app.
|
||||
|
||||
Build the DLL (for Windows explorer integration):
|
||||
|
||||
```powershell
|
||||
cd apps/readest-app/src-tauri
|
||||
cargo build --release --manifest-path Cargo.toml --features com
|
||||
```
|
||||
|
||||
The standalone CLI test harness is no longer distributed with the app. To test the thumbnail provider locally, build and register the DLL as shown above and use a small test harness that imports `readestlib`'s thumbnail code or use Explorer after registering the handler.
|
||||
|
||||
Manual registration for development (register the generated DLL):
|
||||
|
||||
```powershell
|
||||
# Register the DLL
|
||||
regsvr32 /s target\release\windows_thumbnail.dll
|
||||
|
||||
# Unregister the DLL
|
||||
regsvr32 /s /u target\release\windows_thumbnail.dll
|
||||
|
||||
# Refresh Explorer to see changes
|
||||
ie4uinit.exe -show
|
||||
```
|
||||
|
||||
This generates a thumbnail with the Readest overlay at the specified size.
|
||||
|
||||
## Architecture
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────┐
|
||||
│ Windows Explorer │
|
||||
├─────────────────────────────────────────────────────────────────┤
|
||||
│ │ │
|
||||
│ IThumbnailProvider ───┼──► ThumbnailProvider │
|
||||
│ │ │ │
|
||||
│ │ ▼ │
|
||||
│ │ Check File Association │
|
||||
│ │ (is Readest the default?) │
|
||||
│ │ │ │
|
||||
│ │ ▼ (if yes) │
|
||||
│ │ Extract Cover Image │
|
||||
│ │ │ │
|
||||
│ │ ▼ │
|
||||
│ │ Add Readest Overlay │
|
||||
│ │ │ │
|
||||
│ │ ▼ │
|
||||
│ │ Return HBITMAP │
|
||||
│ │ │
|
||||
└─────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
## COM Details
|
||||
|
||||
- **CLSID**: `{A1B2C3D4-E5F6-7890-ABCD-EF1234567890}`
|
||||
- **Shell Thumbnail Handler GUID**: `{e357fccd-a995-4576-b01f-234630154e96}`
|
||||
- **Threading Model**: Apartment
|
||||
|
||||
## How It Works
|
||||
|
||||
1. When Windows Explorer needs a thumbnail, it queries the registered shell extension
|
||||
2. The COM DLL implements `IInitializeWithItem` to receive the file path
|
||||
3. It checks if Readest.exe is the default application for that file type using `AssocQueryStringW`
|
||||
4. If Readest is the default, it extracts the cover and generates the thumbnail
|
||||
5. If Readest is NOT the default, it returns `S_FALSE` to let Windows use other handlers
|
||||
|
||||
This ensures thumbnails only appear for files the user has associated with Readest.
|
||||
|
||||
## License
|
||||
|
||||
MIT License - See LICENSE file for details.
|
||||
@@ -0,0 +1,506 @@
|
||||
/// Windows COM Thumbnail Provider for Readest
|
||||
///
|
||||
/// Implements IThumbnailProvider and IInitializeWithItem for Windows Shell integration.
|
||||
/// This allows Windows Explorer to show book covers as thumbnails for eBook files.
|
||||
///
|
||||
/// **Important**: Thumbnails are only shown when Readest.exe is the default application
|
||||
/// for the file type.
|
||||
///
|
||||
/// ## CLSID: {A1B2C3D4-E5F6-7890-ABCD-EF1234567890}
|
||||
use std::cell::UnsafeCell;
|
||||
use std::ffi::c_void;
|
||||
use std::path::PathBuf;
|
||||
use std::sync::atomic::{AtomicIsize, AtomicU32, Ordering};
|
||||
|
||||
use windows::core::{IUnknown, Interface, GUID, HRESULT, PCWSTR, PWSTR};
|
||||
use windows::Win32::Foundation::{
|
||||
CLASS_E_NOAGGREGATION, E_FAIL, E_INVALIDARG, E_NOINTERFACE, HMODULE, S_FALSE, S_OK,
|
||||
};
|
||||
use windows::Win32::Graphics::Gdi::{
|
||||
CreateDIBSection, BITMAPINFO, BITMAPINFOHEADER, BI_RGB, DIB_RGB_COLORS, HBITMAP,
|
||||
};
|
||||
use windows::Win32::System::Com::{CoTaskMemFree, IClassFactory, IClassFactory_Impl};
|
||||
use windows::Win32::System::LibraryLoader::GetModuleFileNameW;
|
||||
use windows::Win32::System::Registry::{
|
||||
RegCloseKey, RegCreateKeyExW, RegDeleteTreeW, RegSetValueExW, HKEY, HKEY_CLASSES_ROOT,
|
||||
KEY_WRITE, REG_OPTION_NON_VOLATILE, REG_SZ,
|
||||
};
|
||||
use windows::Win32::UI::Shell::{
|
||||
AssocQueryStringW, IInitializeWithItem, IInitializeWithItem_Impl, IShellItem,
|
||||
IThumbnailProvider, IThumbnailProvider_Impl, ASSOCF_NONE, ASSOCSTR_EXECUTABLE,
|
||||
SIGDN_FILESYSPATH, WTSAT_ARGB, WTS_ALPHATYPE,
|
||||
};
|
||||
use windows_core::BOOL;
|
||||
use windows_core::{implement, Ref};
|
||||
|
||||
use super::cached_thumbnail_for_path;
|
||||
|
||||
// ─────────────────────────────────────────────────────────────────────────────
|
||||
// CLSID for Readest Thumbnail Provider
|
||||
// ─────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
/// CLSID: {A1B2C3D4-E5F6-7890-ABCD-EF1234567890}
|
||||
pub const CLSID_READEST_THUMBNAIL: GUID = GUID::from_u128(0xA1B2C3D4_E5F6_7890_ABCD_EF1234567890);
|
||||
|
||||
/// Supported file extensions
|
||||
pub const SUPPORTED_EXTENSIONS: &[&str] = &[
|
||||
".epub", ".mobi", ".azw", ".azw3", ".kf8", ".prc", ".fb2", ".cbz", ".cbr", ".txt",
|
||||
];
|
||||
|
||||
// DLL reference counting
|
||||
static DLL_REF_COUNT: AtomicU32 = AtomicU32::new(0);
|
||||
static DLL_MODULE_PTR: AtomicIsize = AtomicIsize::new(0);
|
||||
|
||||
fn dll_add_ref() {
|
||||
DLL_REF_COUNT.fetch_add(1, Ordering::SeqCst);
|
||||
}
|
||||
fn dll_release() {
|
||||
DLL_REF_COUNT.fetch_sub(1, Ordering::SeqCst);
|
||||
}
|
||||
|
||||
fn set_dll_module(h: HMODULE) {
|
||||
DLL_MODULE_PTR.store(h.0 as isize, Ordering::SeqCst);
|
||||
}
|
||||
|
||||
fn get_dll_module() -> Option<HMODULE> {
|
||||
let ptr = DLL_MODULE_PTR.load(Ordering::SeqCst);
|
||||
if ptr == 0 {
|
||||
None
|
||||
} else {
|
||||
Some(HMODULE(ptr as *mut c_void))
|
||||
}
|
||||
}
|
||||
|
||||
// ─────────────────────────────────────────────────────────────────────────────
|
||||
// File Association Check
|
||||
// ─────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
/// Check if Readest.exe is the default application for a given file extension.
|
||||
fn is_readest_default_for_extension(ext: &str) -> bool {
|
||||
let ext_wide: Vec<u16> = ext.encode_utf16().chain(std::iter::once(0)).collect();
|
||||
let mut buffer = [0u16; 260];
|
||||
let mut buffer_size = buffer.len() as u32;
|
||||
|
||||
unsafe {
|
||||
let result = AssocQueryStringW(
|
||||
ASSOCF_NONE,
|
||||
ASSOCSTR_EXECUTABLE,
|
||||
PCWSTR(ext_wide.as_ptr()),
|
||||
None,
|
||||
Some(PWSTR(buffer.as_mut_ptr())),
|
||||
&mut buffer_size,
|
||||
);
|
||||
|
||||
if result.is_ok() {
|
||||
let len = buffer.iter().position(|&c| c == 0).unwrap_or(buffer.len());
|
||||
let path = String::from_utf16_lossy(&buffer[..len]).to_lowercase();
|
||||
return path.contains("readest");
|
||||
}
|
||||
}
|
||||
|
||||
false
|
||||
}
|
||||
|
||||
/// Check if Readest is the default app for a specific file path.
|
||||
fn is_readest_default_for_file(path: &PathBuf) -> bool {
|
||||
if let Some(ext) = path.extension().and_then(|e| e.to_str()) {
|
||||
let ext_with_dot = format!(".{}", ext.to_lowercase());
|
||||
return is_readest_default_for_extension(&ext_with_dot);
|
||||
}
|
||||
false
|
||||
}
|
||||
|
||||
// ─────────────────────────────────────────────────────────────────────────────
|
||||
// ThumbnailProvider
|
||||
// ─────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
/// Interior mutability wrapper for COM single-threaded apartment
|
||||
struct ComCell<T>(UnsafeCell<T>);
|
||||
|
||||
impl<T> ComCell<T> {
|
||||
fn new(value: T) -> Self {
|
||||
Self(UnsafeCell::new(value))
|
||||
}
|
||||
fn get(&self) -> &T {
|
||||
unsafe { &*self.0.get() }
|
||||
}
|
||||
fn set(&self, value: T) {
|
||||
unsafe {
|
||||
*self.0.get() = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// SAFETY: COM thumbnail providers run in single-threaded apartment (STA)
|
||||
unsafe impl<T> Sync for ComCell<T> {}
|
||||
unsafe impl<T> Send for ComCell<T> {}
|
||||
|
||||
#[implement(IThumbnailProvider, IInitializeWithItem)]
|
||||
pub struct ThumbnailProvider {
|
||||
file_path: ComCell<Option<PathBuf>>,
|
||||
file_ext: ComCell<Option<String>>,
|
||||
should_provide: ComCell<bool>,
|
||||
}
|
||||
|
||||
impl ThumbnailProvider {
|
||||
pub fn new() -> Self {
|
||||
dll_add_ref();
|
||||
Self {
|
||||
file_path: ComCell::new(None),
|
||||
file_ext: ComCell::new(None),
|
||||
should_provide: ComCell::new(false),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Default for ThumbnailProvider {
|
||||
fn default() -> Self {
|
||||
Self::new()
|
||||
}
|
||||
}
|
||||
|
||||
impl Drop for ThumbnailProvider {
|
||||
fn drop(&mut self) {
|
||||
dll_release();
|
||||
}
|
||||
}
|
||||
|
||||
impl IInitializeWithItem_Impl for ThumbnailProvider_Impl {
|
||||
fn Initialize(&self, psi: Ref<'_, IShellItem>, _grfmode: u32) -> windows::core::Result<()> {
|
||||
let item = psi.ok()?;
|
||||
|
||||
unsafe {
|
||||
let path_pwstr = item.GetDisplayName(SIGDN_FILESYSPATH)?;
|
||||
|
||||
let mut len = 0usize;
|
||||
let mut ptr = path_pwstr.0;
|
||||
while *ptr != 0 {
|
||||
len += 1;
|
||||
ptr = ptr.add(1);
|
||||
}
|
||||
|
||||
let slice = std::slice::from_raw_parts(path_pwstr.0, len);
|
||||
let path_str = String::from_utf16_lossy(slice);
|
||||
let path = PathBuf::from(&path_str);
|
||||
|
||||
CoTaskMemFree(Some(path_pwstr.0 as *const c_void));
|
||||
|
||||
let is_default = is_readest_default_for_file(&path);
|
||||
self.should_provide.set(is_default);
|
||||
|
||||
if !is_default {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
let ext = path
|
||||
.extension()
|
||||
.and_then(|e| e.to_str())
|
||||
.map(|s| s.to_lowercase())
|
||||
.unwrap_or_default();
|
||||
|
||||
self.file_path.set(Some(path));
|
||||
self.file_ext.set(Some(ext));
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl IThumbnailProvider_Impl for ThumbnailProvider_Impl {
|
||||
fn GetThumbnail(
|
||||
&self,
|
||||
cx: u32,
|
||||
phbmp: *mut HBITMAP,
|
||||
pdwalpha: *mut WTS_ALPHATYPE,
|
||||
) -> windows::core::Result<()> {
|
||||
if !*self.should_provide.get() {
|
||||
return Err(E_FAIL.into());
|
||||
}
|
||||
|
||||
let path = self.file_path.get().as_ref().ok_or(E_FAIL)?;
|
||||
let ext = self.file_ext.get().as_ref().ok_or(E_FAIL)?;
|
||||
|
||||
let png_bytes = cached_thumbnail_for_path(path, ext, cx).map_err(|_| E_FAIL)?;
|
||||
let img = image::load_from_memory(&png_bytes).map_err(|_| E_FAIL)?;
|
||||
let rgba = img.to_rgba8();
|
||||
let (width, height) = (rgba.width(), rgba.height());
|
||||
|
||||
let bmi = BITMAPINFO {
|
||||
bmiHeader: BITMAPINFOHEADER {
|
||||
biSize: std::mem::size_of::<BITMAPINFOHEADER>() as u32,
|
||||
biWidth: width as i32,
|
||||
biHeight: -(height as i32),
|
||||
biPlanes: 1,
|
||||
biBitCount: 32,
|
||||
biCompression: BI_RGB.0,
|
||||
..Default::default()
|
||||
},
|
||||
..Default::default()
|
||||
};
|
||||
|
||||
let mut bits: *mut c_void = std::ptr::null_mut();
|
||||
|
||||
unsafe {
|
||||
let hbmp = CreateDIBSection(None, &bmi, DIB_RGB_COLORS, &mut bits, None, 0)
|
||||
.map_err(|_| E_FAIL)?;
|
||||
if bits.is_null() {
|
||||
return Err(E_FAIL.into());
|
||||
}
|
||||
|
||||
// RGBA -> BGRA
|
||||
let dst =
|
||||
std::slice::from_raw_parts_mut(bits as *mut u8, (width * height * 4) as usize);
|
||||
let src = rgba.as_raw();
|
||||
for i in 0..(width * height) as usize {
|
||||
let si = i * 4;
|
||||
dst[si] = src[si + 2]; // B
|
||||
dst[si + 1] = src[si + 1]; // G
|
||||
dst[si + 2] = src[si]; // R
|
||||
dst[si + 3] = src[si + 3]; // A
|
||||
}
|
||||
|
||||
*phbmp = hbmp;
|
||||
*pdwalpha = WTSAT_ARGB;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
// ─────────────────────────────────────────────────────────────────────────────
|
||||
// ClassFactory
|
||||
// ─────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
#[implement(IClassFactory)]
|
||||
pub struct ThumbnailProviderFactory;
|
||||
|
||||
impl ThumbnailProviderFactory {
|
||||
pub fn new() -> Self {
|
||||
dll_add_ref();
|
||||
Self
|
||||
}
|
||||
}
|
||||
|
||||
impl Default for ThumbnailProviderFactory {
|
||||
fn default() -> Self {
|
||||
Self::new()
|
||||
}
|
||||
}
|
||||
|
||||
impl Drop for ThumbnailProviderFactory {
|
||||
fn drop(&mut self) {
|
||||
dll_release();
|
||||
}
|
||||
}
|
||||
|
||||
impl IClassFactory_Impl for ThumbnailProviderFactory_Impl {
|
||||
fn CreateInstance(
|
||||
&self,
|
||||
punkouter: Ref<'_, IUnknown>,
|
||||
riid: *const GUID,
|
||||
ppvobject: *mut *mut c_void,
|
||||
) -> windows::core::Result<()> {
|
||||
unsafe {
|
||||
if ppvobject.is_null() {
|
||||
return Err(E_INVALIDARG.into());
|
||||
}
|
||||
*ppvobject = std::ptr::null_mut();
|
||||
if !punkouter.is_null() {
|
||||
return Err(CLASS_E_NOAGGREGATION.into());
|
||||
}
|
||||
|
||||
let provider: IThumbnailProvider = ThumbnailProvider::new().into();
|
||||
provider.query(&*riid, ppvobject).ok()
|
||||
}
|
||||
}
|
||||
|
||||
fn LockServer(&self, flock: BOOL) -> windows::core::Result<()> {
|
||||
if flock.as_bool() {
|
||||
dll_add_ref();
|
||||
} else {
|
||||
dll_release();
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
// ─────────────────────────────────────────────────────────────────────────────
|
||||
// DLL Exports
|
||||
// ─────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "system" fn DllMain(hinstance: HMODULE, reason: u32, _reserved: *mut c_void) -> BOOL {
|
||||
const DLL_PROCESS_ATTACH: u32 = 1;
|
||||
if reason == DLL_PROCESS_ATTACH {
|
||||
set_dll_module(hinstance);
|
||||
}
|
||||
BOOL::from(true)
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "system" fn DllCanUnloadNow() -> HRESULT {
|
||||
if DLL_REF_COUNT.load(Ordering::SeqCst) == 0 {
|
||||
S_OK
|
||||
} else {
|
||||
S_FALSE
|
||||
}
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "system" fn DllGetClassObject(
|
||||
rclsid: *const GUID,
|
||||
riid: *const GUID,
|
||||
ppv: *mut *mut c_void,
|
||||
) -> HRESULT {
|
||||
if ppv.is_null() || rclsid.is_null() || riid.is_null() {
|
||||
return E_INVALIDARG;
|
||||
}
|
||||
*ppv = std::ptr::null_mut();
|
||||
|
||||
if *rclsid != CLSID_READEST_THUMBNAIL {
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
if *riid != IClassFactory::IID && *riid != IUnknown::IID {
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
let factory: IClassFactory = ThumbnailProviderFactory::new().into();
|
||||
factory.query(&*riid, ppv)
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "system" fn DllRegisterServer() -> HRESULT {
|
||||
match register_server_impl() {
|
||||
Ok(()) => S_OK,
|
||||
Err(e) => e,
|
||||
}
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "system" fn DllUnregisterServer() -> HRESULT {
|
||||
let _ = unregister_server_impl();
|
||||
S_OK
|
||||
}
|
||||
|
||||
// ─────────────────────────────────────────────────────────────────────────────
|
||||
// Registry helpers
|
||||
// ─────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
fn get_dll_path() -> Option<String> {
|
||||
let module = get_dll_module()?;
|
||||
let mut buffer = [0u16; 260];
|
||||
unsafe {
|
||||
let len = GetModuleFileNameW(Some(module), &mut buffer);
|
||||
if len == 0 {
|
||||
None
|
||||
} else {
|
||||
Some(String::from_utf16_lossy(&buffer[..len as usize]))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn clsid_string() -> String {
|
||||
format!(
|
||||
"{{{:08X}-{:04X}-{:04X}-{:02X}{:02X}-{:02X}{:02X}{:02X}{:02X}{:02X}{:02X}}}",
|
||||
CLSID_READEST_THUMBNAIL.data1,
|
||||
CLSID_READEST_THUMBNAIL.data2,
|
||||
CLSID_READEST_THUMBNAIL.data3,
|
||||
CLSID_READEST_THUMBNAIL.data4[0],
|
||||
CLSID_READEST_THUMBNAIL.data4[1],
|
||||
CLSID_READEST_THUMBNAIL.data4[2],
|
||||
CLSID_READEST_THUMBNAIL.data4[3],
|
||||
CLSID_READEST_THUMBNAIL.data4[4],
|
||||
CLSID_READEST_THUMBNAIL.data4[5],
|
||||
CLSID_READEST_THUMBNAIL.data4[6],
|
||||
CLSID_READEST_THUMBNAIL.data4[7]
|
||||
)
|
||||
}
|
||||
|
||||
fn to_wide(s: &str) -> Vec<u16> {
|
||||
s.encode_utf16().chain(std::iter::once(0)).collect()
|
||||
}
|
||||
|
||||
unsafe fn set_reg_value(key: HKEY, name: &str, value: &str) -> Result<(), HRESULT> {
|
||||
let name_w = to_wide(name);
|
||||
let value_w = to_wide(value);
|
||||
let bytes: &[u8] = std::slice::from_raw_parts(value_w.as_ptr() as *const u8, value_w.len() * 2);
|
||||
if RegSetValueExW(key, PCWSTR(name_w.as_ptr()), Some(0), REG_SZ, Some(bytes)).is_err() {
|
||||
Err(E_FAIL)
|
||||
} else {
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
unsafe fn create_reg_key(parent: HKEY, subkey: &str) -> Result<HKEY, HRESULT> {
|
||||
let subkey_w = to_wide(subkey);
|
||||
let mut hkey = HKEY::default();
|
||||
let result = RegCreateKeyExW(
|
||||
parent,
|
||||
PCWSTR(subkey_w.as_ptr()),
|
||||
Some(0),
|
||||
None,
|
||||
REG_OPTION_NON_VOLATILE,
|
||||
KEY_WRITE,
|
||||
None,
|
||||
&mut hkey,
|
||||
None,
|
||||
);
|
||||
if result.is_err() {
|
||||
Err(E_FAIL)
|
||||
} else {
|
||||
Ok(hkey)
|
||||
}
|
||||
}
|
||||
|
||||
unsafe fn register_server_impl() -> Result<(), HRESULT> {
|
||||
let dll_path = get_dll_path().ok_or(E_FAIL)?;
|
||||
let clsid = clsid_string();
|
||||
|
||||
// CLSID key
|
||||
let clsid_key = create_reg_key(HKEY_CLASSES_ROOT, &format!("CLSID\\{}", clsid))?;
|
||||
set_reg_value(clsid_key, "", "Readest Thumbnail Provider")?;
|
||||
|
||||
// CRITICAL: DisableProcessIsolation = 1
|
||||
let disable_isolation_name = to_wide("DisableProcessIsolation");
|
||||
let value: u32 = 1;
|
||||
let _ = windows::Win32::System::Registry::RegSetValueExW(
|
||||
clsid_key,
|
||||
PCWSTR(disable_isolation_name.as_ptr()),
|
||||
Some(0),
|
||||
windows::Win32::System::Registry::REG_DWORD,
|
||||
Some(std::slice::from_raw_parts(
|
||||
&value as *const u32 as *const u8,
|
||||
4,
|
||||
)),
|
||||
);
|
||||
|
||||
let inproc_key = create_reg_key(clsid_key, "InprocServer32")?;
|
||||
set_reg_value(inproc_key, "", &dll_path)?;
|
||||
set_reg_value(inproc_key, "ThreadingModel", "Apartment")?;
|
||||
let _ = RegCloseKey(inproc_key);
|
||||
let _ = RegCloseKey(clsid_key);
|
||||
|
||||
// Register ShellEx thumbnail handler for each extension
|
||||
for ext in SUPPORTED_EXTENSIONS {
|
||||
let ext_shellex_path =
|
||||
format!("{}\\ShellEx\\{{e357fccd-a995-4576-b01f-234630154e96}}", ext);
|
||||
if let Ok(ext_shellex_key) = create_reg_key(HKEY_CLASSES_ROOT, &ext_shellex_path) {
|
||||
let _ = set_reg_value(ext_shellex_key, "", &clsid);
|
||||
let _ = RegCloseKey(ext_shellex_key);
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
unsafe fn unregister_server_impl() -> Result<(), HRESULT> {
|
||||
let clsid = clsid_string();
|
||||
let clsid_path = to_wide(&format!("CLSID\\{}", clsid));
|
||||
let _ = RegDeleteTreeW(HKEY_CLASSES_ROOT, PCWSTR(clsid_path.as_ptr()));
|
||||
|
||||
for ext in SUPPORTED_EXTENSIONS {
|
||||
let ext_path = to_wide(&format!(
|
||||
"{}\\ShellEx\\{{e357fccd-a995-4576-b01f-234630154e96}}",
|
||||
ext
|
||||
));
|
||||
let _ = RegDeleteTreeW(HKEY_CLASSES_ROOT, PCWSTR(ext_path.as_ptr()));
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
@@ -0,0 +1,648 @@
|
||||
/// Cover image extraction for various eBook formats
|
||||
///
|
||||
/// Supports: EPUB, MOBI/AZW3/KF8, FB2, CBZ/CBR, TXT
|
||||
use anyhow::{anyhow, Result};
|
||||
use base64::engine::general_purpose;
|
||||
use base64::Engine as _;
|
||||
use directories_next::ProjectDirs;
|
||||
use image::{imageops, DynamicImage, Rgba};
|
||||
use md5::Context;
|
||||
use once_cell::sync::Lazy;
|
||||
use std::io::{Cursor, Read, Seek, SeekFrom};
|
||||
use std::path::Path;
|
||||
use zip::ZipArchive;
|
||||
|
||||
/// Thumbnail cache directory (per-user)
|
||||
static CACHE_DIR: Lazy<Option<std::path::PathBuf>> = Lazy::new(|| {
|
||||
ProjectDirs::from("app", "Readest", "").map(|pd| {
|
||||
let dir = pd.cache_dir().join("thumbnails");
|
||||
let _ = std::fs::create_dir_all(&dir);
|
||||
dir
|
||||
})
|
||||
});
|
||||
|
||||
// ─────────────────────────────────────────────────────────────────────────────
|
||||
// EPUB extraction
|
||||
// ─────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
/// Extract cover image bytes from an EPUB file.
|
||||
pub fn extract_epub_cover_bytes<R: Read + Seek>(reader: R) -> Result<Vec<u8>> {
|
||||
let mut archive = ZipArchive::new(reader)?;
|
||||
|
||||
// Pass 1: Look for files with "cover" in the name
|
||||
let mut candidates: Vec<(usize, String, u64)> = Vec::new();
|
||||
for i in 0..archive.len() {
|
||||
let file = archive.by_index(i)?;
|
||||
let name = file.name().to_lowercase();
|
||||
let size = file.size();
|
||||
drop(file);
|
||||
|
||||
if is_image_extension(&name) && (name.contains("cover") || name.contains("front")) {
|
||||
candidates.push((i, name, size));
|
||||
}
|
||||
}
|
||||
|
||||
// Sort by priority: exact "cover" match first, then by size
|
||||
if !candidates.is_empty() {
|
||||
candidates.sort_by(|a, b| {
|
||||
let a_exact = a.1.contains("cover.") || a.1.ends_with("cover");
|
||||
let b_exact = b.1.contains("cover.") || b.1.ends_with("cover");
|
||||
match (a_exact, b_exact) {
|
||||
(true, false) => std::cmp::Ordering::Less,
|
||||
(false, true) => std::cmp::Ordering::Greater,
|
||||
_ => b.2.cmp(&a.2),
|
||||
}
|
||||
});
|
||||
|
||||
let idx = candidates[0].0;
|
||||
let mut file = archive.by_index(idx)?;
|
||||
let mut buf = Vec::new();
|
||||
file.read_to_end(&mut buf)?;
|
||||
return Ok(buf);
|
||||
}
|
||||
|
||||
// Pass 2: Parse container.xml to find OPF, then parse OPF for cover
|
||||
let container_xml = read_zip_file_to_string(&mut archive, "META-INF/container.xml");
|
||||
if let Ok(xml) = container_xml {
|
||||
if let Some(rootfile) = extract_attribute(&xml, "rootfile", "full-path") {
|
||||
let opf_content = read_zip_file_to_string(&mut archive, &rootfile);
|
||||
if let Ok(opf) = opf_content {
|
||||
if let Some(cover_id) = find_cover_id_in_opf(&opf) {
|
||||
if let Some(href) = find_href_by_id_in_opf(&opf, &cover_id) {
|
||||
let base = Path::new(&rootfile).parent().unwrap_or(Path::new(""));
|
||||
let cover_path = base.join(&href).to_string_lossy().replace('\\', "/");
|
||||
if let Ok(bytes) = read_zip_file_to_bytes(&mut archive, &cover_path) {
|
||||
return Ok(bytes);
|
||||
}
|
||||
}
|
||||
}
|
||||
if let Some(href) = find_first_image_in_manifest(&opf) {
|
||||
let base = Path::new(&rootfile).parent().unwrap_or(Path::new(""));
|
||||
let cover_path = base.join(&href).to_string_lossy().replace('\\', "/");
|
||||
if let Ok(bytes) = read_zip_file_to_bytes(&mut archive, &cover_path) {
|
||||
return Ok(bytes);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Pass 3: Just grab the largest image file
|
||||
let mut largest: Option<(usize, u64)> = None;
|
||||
for i in 0..archive.len() {
|
||||
let file = archive.by_index(i)?;
|
||||
let name = file.name().to_lowercase();
|
||||
let size = file.size();
|
||||
drop(file);
|
||||
|
||||
if is_image_extension(&name) && (largest.is_none() || size > largest.unwrap().1) {
|
||||
largest = Some((i, size));
|
||||
}
|
||||
}
|
||||
|
||||
if let Some((idx, _)) = largest {
|
||||
let mut file = archive.by_index(idx)?;
|
||||
let mut buf = Vec::new();
|
||||
file.read_to_end(&mut buf)?;
|
||||
return Ok(buf);
|
||||
}
|
||||
|
||||
Err(anyhow!("No cover image found in EPUB"))
|
||||
}
|
||||
|
||||
// ─────────────────────────────────────────────────────────────────────────────
|
||||
// MOBI/AZW3/KF8 extraction
|
||||
// ─────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
/// Extract cover image from MOBI/AZW3/KF8 files.
|
||||
pub fn extract_mobi_cover_bytes<R: Read + Seek>(mut reader: R) -> Result<Vec<u8>> {
|
||||
let mut header = [0u8; 78];
|
||||
reader.read_exact(&mut header)?;
|
||||
|
||||
if &header[60..68] != b"BOOKMOBI" {
|
||||
return Err(anyhow!("Not a valid MOBI file"));
|
||||
}
|
||||
|
||||
let num_records = u16::from_be_bytes([header[76], header[77]]) as usize;
|
||||
|
||||
let mut record_offsets: Vec<u32> = Vec::with_capacity(num_records);
|
||||
for _ in 0..num_records {
|
||||
let mut rec = [0u8; 8];
|
||||
reader.read_exact(&mut rec)?;
|
||||
record_offsets.push(u32::from_be_bytes([rec[0], rec[1], rec[2], rec[3]]));
|
||||
}
|
||||
|
||||
if record_offsets.is_empty() {
|
||||
return Err(anyhow!("No records in MOBI file"));
|
||||
}
|
||||
|
||||
reader.seek(SeekFrom::Start(record_offsets[0] as u64))?;
|
||||
let mut mobi_header = [0u8; 256];
|
||||
reader.read_exact(&mut mobi_header)?;
|
||||
|
||||
if &mobi_header[16..20] != b"MOBI" {
|
||||
return Err(anyhow!("Invalid MOBI header"));
|
||||
}
|
||||
|
||||
let header_length = u32::from_be_bytes([
|
||||
mobi_header[20],
|
||||
mobi_header[21],
|
||||
mobi_header[22],
|
||||
mobi_header[23],
|
||||
]) as usize;
|
||||
|
||||
let exth_flags = u32::from_be_bytes([
|
||||
mobi_header[128],
|
||||
mobi_header[129],
|
||||
mobi_header[130],
|
||||
mobi_header[131],
|
||||
]);
|
||||
if exth_flags & 0x40 == 0 {
|
||||
return Err(anyhow!("No EXTH header in MOBI file"));
|
||||
}
|
||||
|
||||
let exth_offset = record_offsets[0] as u64 + 16 + header_length as u64;
|
||||
reader.seek(SeekFrom::Start(exth_offset))?;
|
||||
|
||||
let mut exth_magic = [0u8; 4];
|
||||
reader.read_exact(&mut exth_magic)?;
|
||||
if &exth_magic != b"EXTH" {
|
||||
return Err(anyhow!("EXTH header not found"));
|
||||
}
|
||||
|
||||
let mut exth_len_bytes = [0u8; 4];
|
||||
reader.read_exact(&mut exth_len_bytes)?;
|
||||
|
||||
let mut exth_count_bytes = [0u8; 4];
|
||||
reader.read_exact(&mut exth_count_bytes)?;
|
||||
let exth_count = u32::from_be_bytes(exth_count_bytes) as usize;
|
||||
|
||||
let mut cover_offset: Option<u32> = None;
|
||||
let first_img_idx = u32::from_be_bytes([
|
||||
mobi_header[108],
|
||||
mobi_header[109],
|
||||
mobi_header[110],
|
||||
mobi_header[111],
|
||||
]);
|
||||
|
||||
for _ in 0..exth_count {
|
||||
let mut rec_header = [0u8; 8];
|
||||
if reader.read_exact(&mut rec_header).is_err() {
|
||||
break;
|
||||
}
|
||||
let rec_type =
|
||||
u32::from_be_bytes([rec_header[0], rec_header[1], rec_header[2], rec_header[3]]);
|
||||
let rec_len =
|
||||
u32::from_be_bytes([rec_header[4], rec_header[5], rec_header[6], rec_header[7]])
|
||||
as usize;
|
||||
|
||||
let data_len = rec_len.saturating_sub(8);
|
||||
let mut data = vec![0u8; data_len];
|
||||
if reader.read_exact(&mut data).is_err() {
|
||||
break;
|
||||
}
|
||||
|
||||
if rec_type == 201 && data_len >= 4 {
|
||||
cover_offset = Some(u32::from_be_bytes([data[0], data[1], data[2], data[3]]));
|
||||
}
|
||||
}
|
||||
|
||||
let cover_record_idx = if let Some(offset) = cover_offset {
|
||||
first_img_idx + offset
|
||||
} else {
|
||||
first_img_idx
|
||||
};
|
||||
|
||||
if cover_record_idx as usize >= record_offsets.len() {
|
||||
return Err(anyhow!("Cover record index out of bounds"));
|
||||
}
|
||||
|
||||
let start = record_offsets[cover_record_idx as usize] as u64;
|
||||
let end = if (cover_record_idx as usize + 1) < record_offsets.len() {
|
||||
record_offsets[cover_record_idx as usize + 1] as u64
|
||||
} else {
|
||||
reader.seek(SeekFrom::End(0))?;
|
||||
reader.stream_position()?
|
||||
};
|
||||
|
||||
let len = (end - start) as usize;
|
||||
reader.seek(SeekFrom::Start(start))?;
|
||||
let mut cover_data = vec![0u8; len];
|
||||
reader.read_exact(&mut cover_data)?;
|
||||
|
||||
if cover_data.starts_with(&[0xFF, 0xD8, 0xFF])
|
||||
|| cover_data.starts_with(&[0x89, 0x50, 0x4E, 0x47])
|
||||
|| cover_data.starts_with(b"GIF")
|
||||
{
|
||||
return Ok(cover_data);
|
||||
}
|
||||
|
||||
Err(anyhow!("No valid cover image found in MOBI"))
|
||||
}
|
||||
|
||||
// ─────────────────────────────────────────────────────────────────────────────
|
||||
// CBZ extraction
|
||||
// ─────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
/// Extract cover image from CBZ (comic book ZIP) file.
|
||||
pub fn extract_cbz_cover_bytes<R: Read + Seek>(reader: R) -> Result<Vec<u8>> {
|
||||
let mut archive = ZipArchive::new(reader)?;
|
||||
|
||||
let mut images: Vec<(usize, String)> = Vec::new();
|
||||
for i in 0..archive.len() {
|
||||
let file = archive.by_index(i)?;
|
||||
let name = file.name().to_string();
|
||||
drop(file);
|
||||
|
||||
if is_image_extension(&name.to_lowercase()) {
|
||||
images.push((i, name));
|
||||
}
|
||||
}
|
||||
|
||||
images.sort_by(|a, b| a.1.cmp(&b.1));
|
||||
|
||||
if let Some((idx, _)) = images.first() {
|
||||
let mut file = archive.by_index(*idx)?;
|
||||
let mut buf = Vec::new();
|
||||
file.read_to_end(&mut buf)?;
|
||||
return Ok(buf);
|
||||
}
|
||||
|
||||
Err(anyhow!("No images found in CBZ"))
|
||||
}
|
||||
|
||||
// ─────────────────────────────────────────────────────────────────────────────
|
||||
// FB2 extraction
|
||||
// ─────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
/// Extract cover image from FB2 (FictionBook) file.
|
||||
pub fn extract_fb2_cover_bytes<R: Read>(mut reader: R) -> Result<Vec<u8>> {
|
||||
let mut content = String::new();
|
||||
reader.read_to_string(&mut content)?;
|
||||
|
||||
let cover_id = if let Some(start) = content.find("<coverpage>") {
|
||||
let end = content[start..].find("</coverpage>").unwrap_or(500);
|
||||
let coverpage = &content[start..start + end];
|
||||
if let Some(href_pos) = coverpage.find("href=\"#") {
|
||||
let id_start = href_pos + 7;
|
||||
let id_end = coverpage[id_start..].find('"').unwrap_or(50);
|
||||
Some(coverpage[id_start..id_start + id_end].to_string())
|
||||
} else if let Some(href_pos) = coverpage.find("l:href=\"#") {
|
||||
let id_start = href_pos + 9;
|
||||
let id_end = coverpage[id_start..].find('"').unwrap_or(50);
|
||||
Some(coverpage[id_start..id_start + id_end].to_string())
|
||||
} else {
|
||||
None
|
||||
}
|
||||
} else {
|
||||
None
|
||||
};
|
||||
|
||||
let search_pattern = if let Some(ref id) = cover_id {
|
||||
format!("<binary id=\"{}\"", id)
|
||||
} else {
|
||||
"<binary".to_string()
|
||||
};
|
||||
|
||||
if let Some(pos) = content.find(&search_pattern) {
|
||||
if let Some(tag_end) = content[pos..].find('>') {
|
||||
let data_start = pos + tag_end + 1;
|
||||
if let Some(data_end) = content[data_start..].find("</binary>") {
|
||||
let b64_data = content[data_start..data_start + data_end].trim();
|
||||
let b64_clean: String = b64_data.chars().filter(|c| !c.is_whitespace()).collect();
|
||||
let bytes = general_purpose::STANDARD.decode(&b64_clean)?;
|
||||
return Ok(bytes);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if cover_id.is_some() {
|
||||
if let Some(pos) = content.find("<binary") {
|
||||
if let Some(tag_end) = content[pos..].find('>') {
|
||||
let data_start = pos + tag_end + 1;
|
||||
if let Some(data_end) = content[data_start..].find("</binary>") {
|
||||
let b64_data = content[data_start..data_start + data_end].trim();
|
||||
let b64_clean: String =
|
||||
b64_data.chars().filter(|c| !c.is_whitespace()).collect();
|
||||
let bytes = general_purpose::STANDARD.decode(&b64_clean)?;
|
||||
return Ok(bytes);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Err(anyhow!("No cover image found in FB2"))
|
||||
}
|
||||
|
||||
// ─────────────────────────────────────────────────────────────────────────────
|
||||
// TXT "cover" (placeholder)
|
||||
// ─────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
/// Generate a placeholder thumbnail for TXT files.
|
||||
pub fn extract_txt_cover_bytes<R: Read>(mut reader: R, size: u32) -> Result<Vec<u8>> {
|
||||
let mut buf = vec![0u8; 4096];
|
||||
let _n = reader.read(&mut buf)?;
|
||||
|
||||
let mut img = image::RgbaImage::from_pixel(size, size, Rgba([245, 245, 245, 255]));
|
||||
|
||||
for x in 0..size {
|
||||
img.put_pixel(x, 0, Rgba([200, 200, 200, 255]));
|
||||
img.put_pixel(x, size - 1, Rgba([200, 200, 200, 255]));
|
||||
}
|
||||
for y in 0..size {
|
||||
img.put_pixel(0, y, Rgba([200, 200, 200, 255]));
|
||||
img.put_pixel(size - 1, y, Rgba([200, 200, 200, 255]));
|
||||
}
|
||||
|
||||
let mut out = Vec::new();
|
||||
DynamicImage::ImageRgba8(img).write_to(&mut Cursor::new(&mut out), image::ImageFormat::Png)?;
|
||||
Ok(out)
|
||||
}
|
||||
|
||||
// ─────────────────────────────────────────────────────────────────────────────
|
||||
// Unified extraction by extension
|
||||
// ─────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
/// Extract cover image bytes based on file extension.
|
||||
pub fn extract_cover_bytes_by_ext(path: &Path, ext: &str) -> Result<Vec<u8>> {
|
||||
let file = std::fs::File::open(path)?;
|
||||
match ext.to_lowercase().as_str() {
|
||||
"epub" => extract_epub_cover_bytes(file),
|
||||
"mobi" | "azw" | "azw3" | "kf8" | "prc" => extract_mobi_cover_bytes(file),
|
||||
"cbz" | "cbr" => extract_cbz_cover_bytes(file),
|
||||
"fb2" => extract_fb2_cover_bytes(file),
|
||||
"txt" => extract_txt_cover_bytes(file, 256),
|
||||
_ => Err(anyhow!("Unsupported format: {}", ext)),
|
||||
}
|
||||
}
|
||||
|
||||
// ─────────────────────────────────────────────────────────────────────────────
|
||||
// Thumbnail creation with overlay
|
||||
// ─────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
/// Create a thumbnail from cover image bytes with Readest icon overlay.
|
||||
pub fn create_thumbnail_with_overlay(cover_bytes: &[u8], requested_size: u32) -> Result<Vec<u8>> {
|
||||
let img = image::load_from_memory(cover_bytes)?;
|
||||
let thumbnail = img.thumbnail(requested_size, requested_size);
|
||||
|
||||
let overlay_img = load_overlay_icon();
|
||||
|
||||
let mut base = thumbnail.to_rgba8();
|
||||
let (base_w, base_h) = (base.width(), base.height());
|
||||
|
||||
if let Some(ov) = overlay_img {
|
||||
let overlay_size = (requested_size / 5).clamp(24, 48);
|
||||
let ov_resized = ov.resize(overlay_size, overlay_size, imageops::FilterType::Lanczos3);
|
||||
let ovb = ov_resized.to_rgba8();
|
||||
let (ov_w, ov_h) = (ovb.width(), ovb.height());
|
||||
|
||||
let x = base_w.saturating_sub(ov_w + 4);
|
||||
let y = base_h.saturating_sub(ov_h + 4);
|
||||
|
||||
for oy in 0..ov_h {
|
||||
for ox in 0..ov_w {
|
||||
let dst_x = x + ox;
|
||||
let dst_y = y + oy;
|
||||
|
||||
if dst_x < base_w && dst_y < base_h {
|
||||
let src_pixel = ovb.get_pixel(ox, oy);
|
||||
let alpha = src_pixel.0[3] as f32 / 255.0;
|
||||
|
||||
if alpha > 0.0 {
|
||||
let dst_pixel = base.get_pixel(dst_x, dst_y);
|
||||
let mut result = dst_pixel.0;
|
||||
|
||||
for c in 0..3 {
|
||||
let fg = src_pixel.0[c] as f32;
|
||||
let bg = result[c] as f32;
|
||||
result[c] = (fg * alpha + bg * (1.0 - alpha)) as u8;
|
||||
}
|
||||
result[3] = 255;
|
||||
|
||||
base.put_pixel(dst_x, dst_y, Rgba(result));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let mut out = Vec::new();
|
||||
DynamicImage::ImageRgba8(base).write_to(&mut Cursor::new(&mut out), image::ImageFormat::Png)?;
|
||||
Ok(out)
|
||||
}
|
||||
|
||||
/// Load the Readest overlay icon.
|
||||
fn load_overlay_icon() -> Option<DynamicImage> {
|
||||
// Try embedded icon
|
||||
let icon_bytes = include_bytes!("../../../public/icon.png");
|
||||
if let Ok(img) = image::load_from_memory(icon_bytes) {
|
||||
return Some(img);
|
||||
}
|
||||
|
||||
// Fallback: try loading from filesystem
|
||||
if let Ok(exe) = std::env::current_exe() {
|
||||
let candidates = [
|
||||
exe.parent().map(|p| p.join("icon.png")),
|
||||
exe.parent().map(|p| p.join("resources").join("icon.png")),
|
||||
exe.parent()
|
||||
.and_then(|p| p.parent())
|
||||
.map(|p| p.join("resources").join("icon.png")),
|
||||
];
|
||||
|
||||
for candidate in candidates.into_iter().flatten() {
|
||||
if candidate.exists() {
|
||||
if let Ok(bytes) = std::fs::read(&candidate) {
|
||||
if let Ok(img) = image::load_from_memory(&bytes) {
|
||||
return Some(img);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
None
|
||||
}
|
||||
|
||||
// ─────────────────────────────────────────────────────────────────────────────
|
||||
// Caching
|
||||
// ─────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
/// Generate a thumbnail with disk caching.
|
||||
pub fn cached_thumbnail_for_path(path: &Path, ext: &str, size: u32) -> Result<Vec<u8>> {
|
||||
// Compute cache key by hashing file parts for stability without loading entire file
|
||||
let mut hasher = Context::new();
|
||||
hasher.consume(ext.as_bytes());
|
||||
hasher.consume(&size.to_le_bytes());
|
||||
|
||||
let file = std::fs::File::open(path)?;
|
||||
let metadata = file.metadata()?;
|
||||
let file_len = metadata.len();
|
||||
|
||||
// Read partial chunks like the TypeScript partialMD5 implementation
|
||||
const STEP: u64 = 1024;
|
||||
const SIZE: u64 = 1024;
|
||||
let mut file = file;
|
||||
|
||||
for i in -1i32..=10 {
|
||||
let pos = if i == -1 {
|
||||
256u64
|
||||
} else {
|
||||
STEP << (2 * i as u32)
|
||||
};
|
||||
let start = pos.min(file_len);
|
||||
let end = (start + SIZE).min(file_len);
|
||||
|
||||
if start >= file_len {
|
||||
break;
|
||||
}
|
||||
|
||||
file.seek(SeekFrom::Start(start))?;
|
||||
let mut buf = vec![0u8; (end - start) as usize];
|
||||
file.read_exact(&mut buf)?;
|
||||
hasher.consume(&buf);
|
||||
}
|
||||
|
||||
let digest = hasher.finalize();
|
||||
let key = format!("{:x}.png", digest);
|
||||
|
||||
if let Some(ref dir) = *CACHE_DIR {
|
||||
let cache_path = dir.join(&key);
|
||||
if cache_path.exists() {
|
||||
if let Ok(cached) = std::fs::read(&cache_path) {
|
||||
return Ok(cached);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let cover = extract_cover_bytes_by_ext(path, ext)?;
|
||||
let thumbnail = create_thumbnail_with_overlay(&cover, size)?;
|
||||
|
||||
if let Some(ref dir) = *CACHE_DIR {
|
||||
let cache_path = dir.join(&key);
|
||||
let _ = std::fs::write(&cache_path, &thumbnail);
|
||||
}
|
||||
|
||||
Ok(thumbnail)
|
||||
}
|
||||
|
||||
// ─────────────────────────────────────────────────────────────────────────────
|
||||
// Helper functions
|
||||
// ─────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
fn is_image_extension(name: &str) -> bool {
|
||||
name.ends_with(".jpg")
|
||||
|| name.ends_with(".jpeg")
|
||||
|| name.ends_with(".png")
|
||||
|| name.ends_with(".gif")
|
||||
|| name.ends_with(".webp")
|
||||
|| name.ends_with(".bmp")
|
||||
}
|
||||
|
||||
fn read_zip_file_to_string<R: Read + Seek>(
|
||||
archive: &mut ZipArchive<R>,
|
||||
name: &str,
|
||||
) -> Result<String> {
|
||||
let mut file = archive.by_name(name)?;
|
||||
let mut content = String::new();
|
||||
file.read_to_string(&mut content)?;
|
||||
Ok(content)
|
||||
}
|
||||
|
||||
fn read_zip_file_to_bytes<R: Read + Seek>(
|
||||
archive: &mut ZipArchive<R>,
|
||||
name: &str,
|
||||
) -> Result<Vec<u8>> {
|
||||
let mut file = archive.by_name(name)?;
|
||||
let mut buf = Vec::new();
|
||||
file.read_to_end(&mut buf)?;
|
||||
Ok(buf)
|
||||
}
|
||||
|
||||
fn extract_attribute(xml: &str, tag: &str, attr: &str) -> Option<String> {
|
||||
let pattern = format!("<{}", tag);
|
||||
if let Some(tag_pos) = xml.find(&pattern) {
|
||||
let tag_end = xml[tag_pos..].find('>').unwrap_or(500) + tag_pos;
|
||||
let tag_content = &xml[tag_pos..tag_end];
|
||||
|
||||
let attr_pattern = format!("{}=\"", attr);
|
||||
if let Some(attr_pos) = tag_content.find(&attr_pattern) {
|
||||
let value_start = attr_pos + attr_pattern.len();
|
||||
if let Some(value_end) = tag_content[value_start..].find('"') {
|
||||
return Some(tag_content[value_start..value_start + value_end].to_string());
|
||||
}
|
||||
}
|
||||
}
|
||||
None
|
||||
}
|
||||
|
||||
fn find_cover_id_in_opf(opf: &str) -> Option<String> {
|
||||
if let Some(pos) = opf.find("name=\"cover\"") {
|
||||
let window_start = pos.saturating_sub(50);
|
||||
let window_end = (pos + 100).min(opf.len());
|
||||
let window = &opf[window_start..window_end];
|
||||
|
||||
if let Some(content_pos) = window.find("content=\"") {
|
||||
let start = content_pos + 9;
|
||||
if let Some(end) = window[start..].find('"') {
|
||||
return Some(window[start..start + end].to_string());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if let Some(pos) = opf.find("properties=\"cover-image\"") {
|
||||
let window_start = pos.saturating_sub(200);
|
||||
let window_end = pos;
|
||||
let window = &opf[window_start..window_end];
|
||||
|
||||
if let Some(id_pos) = window.rfind("id=\"") {
|
||||
let start = id_pos + 4;
|
||||
if let Some(end) = window[start..].find('"') {
|
||||
return Some(window[start..start + end].to_string());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
None
|
||||
}
|
||||
|
||||
fn find_href_by_id_in_opf(opf: &str, id: &str) -> Option<String> {
|
||||
let pattern = format!("id=\"{}\"", id);
|
||||
if let Some(pos) = opf.find(&pattern) {
|
||||
let window_start = pos.saturating_sub(10);
|
||||
let window_end = (pos + 200).min(opf.len());
|
||||
let window = &opf[window_start..window_end];
|
||||
|
||||
if let Some(href_pos) = window.find("href=\"") {
|
||||
let start = href_pos + 6;
|
||||
if let Some(end) = window[start..].find('"') {
|
||||
return Some(window[start..start + end].to_string());
|
||||
}
|
||||
}
|
||||
}
|
||||
None
|
||||
}
|
||||
|
||||
fn find_first_image_in_manifest(opf: &str) -> Option<String> {
|
||||
let manifest_start = opf.find("<manifest")?;
|
||||
let manifest_end = opf[manifest_start..]
|
||||
.find("</manifest>")
|
||||
.map(|e| manifest_start + e)?;
|
||||
let manifest = &opf[manifest_start..manifest_end];
|
||||
|
||||
for media_type in ["image/jpeg", "image/png", "image/gif", "image/webp"] {
|
||||
let pattern = format!("media-type=\"{}\"", media_type);
|
||||
if let Some(pos) = manifest.find(&pattern) {
|
||||
let window_start = pos.saturating_sub(200);
|
||||
let window = &manifest[window_start..pos];
|
||||
|
||||
if let Some(href_pos) = window.rfind("href=\"") {
|
||||
let start = href_pos + 6;
|
||||
if let Some(end) = window[start..].find('"') {
|
||||
return Some(window[start..start + end].to_string());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
None
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
//! Windows Thumbnail Provider for Readest
|
||||
//!
|
||||
//! This module provides Windows Explorer thumbnail support for eBook files.
|
||||
//! Thumbnails are only shown when Readest is set as the default application.
|
||||
//!
|
||||
//! Supported formats: EPUB, MOBI, AZW, AZW3, KF8, FB2, CBZ, CBR
|
||||
|
||||
#![allow(non_snake_case)]
|
||||
|
||||
mod com_provider;
|
||||
mod extraction;
|
||||
|
||||
pub use extraction::*;
|
||||
@@ -0,0 +1,63 @@
|
||||
const options = {
|
||||
debug: false,
|
||||
sort: false,
|
||||
func: {
|
||||
list: ['_'],
|
||||
extensions: ['.js', '.jsx', '.ts', '.tsx'],
|
||||
},
|
||||
lngs: [
|
||||
'de',
|
||||
'ja',
|
||||
'es',
|
||||
'fa',
|
||||
'fr',
|
||||
'it',
|
||||
'el',
|
||||
'ko',
|
||||
'uk',
|
||||
'nl',
|
||||
'sl',
|
||||
'sv',
|
||||
'pl',
|
||||
'pt',
|
||||
'ru',
|
||||
'tr',
|
||||
'hi',
|
||||
'id',
|
||||
'vi',
|
||||
'ms',
|
||||
'he',
|
||||
'ar',
|
||||
'th',
|
||||
'bo',
|
||||
'bn',
|
||||
'ta',
|
||||
'si',
|
||||
'zh-CN',
|
||||
'zh-TW',
|
||||
],
|
||||
ns: ['translation'],
|
||||
defaultNs: 'translation',
|
||||
defaultValue: '__STRING_NOT_TRANSLATED__',
|
||||
resource: {
|
||||
loadPath: './public/locales/{{lng}}/{{ns}}.json',
|
||||
savePath: './public/locales/{{lng}}/{{ns}}.json',
|
||||
jsonIndent: 2,
|
||||
lineEnding: '\n',
|
||||
},
|
||||
keySeparator: false,
|
||||
nsSeparator: false,
|
||||
interpolation: {
|
||||
prefix: '{{',
|
||||
suffix: '}}',
|
||||
},
|
||||
metadata: {},
|
||||
allowDynamicKeys: true,
|
||||
removeUnusedKeys: true,
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
input: ['src/**/*.{js,jsx,ts,tsx}', '!src/**/*.test.{js,jsx,ts,tsx}'],
|
||||
output: '.',
|
||||
options,
|
||||
};
|
||||
@@ -1,58 +0,0 @@
|
||||
module.exports = {
|
||||
input: ['src/**/*.{js,jsx,ts,tsx}', '!src/**/*.test.{js,jsx,ts,tsx}'],
|
||||
output: '.',
|
||||
options: {
|
||||
debug: false,
|
||||
sort: false,
|
||||
func: {
|
||||
list: ['_'],
|
||||
extensions: ['.js', '.jsx', '.ts', '.tsx'],
|
||||
},
|
||||
lngs: [
|
||||
'de',
|
||||
'ja',
|
||||
'es',
|
||||
'fa',
|
||||
'fr',
|
||||
'it',
|
||||
'el',
|
||||
'ko',
|
||||
'uk',
|
||||
'nl',
|
||||
'sv',
|
||||
'pl',
|
||||
'pt',
|
||||
'ru',
|
||||
'tr',
|
||||
'hi',
|
||||
'id',
|
||||
'vi',
|
||||
'ar',
|
||||
'th',
|
||||
'bo',
|
||||
'bn',
|
||||
'ta',
|
||||
'si',
|
||||
'zh-CN',
|
||||
'zh-TW',
|
||||
],
|
||||
ns: ['translation'],
|
||||
defaultNs: 'translation',
|
||||
defaultValue: '__STRING_NOT_TRANSLATED__',
|
||||
resource: {
|
||||
loadPath: './public/locales/{{lng}}/{{ns}}.json',
|
||||
savePath: './public/locales/{{lng}}/{{ns}}.json',
|
||||
jsonIndent: 2,
|
||||
lineEnding: '\n',
|
||||
},
|
||||
keySeparator: false,
|
||||
nsSeparator: false,
|
||||
interpolation: {
|
||||
prefix: '{{',
|
||||
suffix: '}}',
|
||||
},
|
||||
metadata: {},
|
||||
allowDynamicKeys: true,
|
||||
removeUnusedKeys: true,
|
||||
},
|
||||
};
|
||||
@@ -1,4 +1,4 @@
|
||||
import withPWAInit from '@ducanh2912/next-pwa';
|
||||
import withSerwistInit from '@serwist/next';
|
||||
import withBundleAnalyzer from '@next/bundle-analyzer';
|
||||
|
||||
const isDev = process.env['NODE_ENV'] === 'development';
|
||||
@@ -27,18 +27,46 @@ const nextConfig = {
|
||||
assetPrefix: '',
|
||||
reactStrictMode: true,
|
||||
serverExternalPackages: ['isows'],
|
||||
transpilePackages: !isDev
|
||||
? [
|
||||
'i18next-browser-languagedetector',
|
||||
'react-i18next',
|
||||
'i18next',
|
||||
'@ducanh2912/next-pwa',
|
||||
'@tauri-apps',
|
||||
'highlight.js',
|
||||
'foliate-js',
|
||||
'marked',
|
||||
]
|
||||
: [],
|
||||
webpack: (config) => {
|
||||
config.resolve.alias = {
|
||||
...config.resolve.alias,
|
||||
nunjucks: 'nunjucks/browser/nunjucks.js',
|
||||
};
|
||||
return config;
|
||||
},
|
||||
turbopack: {
|
||||
resolveAlias: {
|
||||
nunjucks: 'nunjucks/browser/nunjucks.js',
|
||||
},
|
||||
},
|
||||
transpilePackages: [
|
||||
'ai',
|
||||
'ai-sdk-ollama',
|
||||
'@ai-sdk/react',
|
||||
'@assistant-ui/react',
|
||||
'@assistant-ui/react-ai-sdk',
|
||||
'@assistant-ui/react-markdown',
|
||||
'streamdown',
|
||||
...(isDev
|
||||
? []
|
||||
: [
|
||||
'i18next-browser-languagedetector',
|
||||
'react-i18next',
|
||||
'i18next',
|
||||
'@tauri-apps',
|
||||
'highlight.js',
|
||||
'foliate-js',
|
||||
'marked',
|
||||
]),
|
||||
],
|
||||
async rewrites() {
|
||||
return [
|
||||
{
|
||||
source: '/reader/:ids',
|
||||
destination: '/reader?ids=:ids',
|
||||
},
|
||||
];
|
||||
},
|
||||
async headers() {
|
||||
return [
|
||||
{
|
||||
@@ -50,24 +78,34 @@ const nextConfig = {
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
source: '/_next/static/:path*',
|
||||
headers: [
|
||||
{
|
||||
key: 'Cache-Control',
|
||||
value: isDev
|
||||
? 'public, max-age=0, must-revalidate'
|
||||
: 'public, max-age=31536000, immutable',
|
||||
},
|
||||
],
|
||||
},
|
||||
];
|
||||
},
|
||||
};
|
||||
|
||||
const withPWA = withPWAInit({
|
||||
dest: 'public',
|
||||
disable: isDev || appPlatform !== 'web',
|
||||
cacheOnFrontEndNav: true,
|
||||
aggressiveFrontEndNavCaching: true,
|
||||
reloadOnOnline: true,
|
||||
swcMinify: true,
|
||||
fallbacks: {
|
||||
document: '/offline',
|
||||
},
|
||||
workboxOptions: {
|
||||
disableDevLogs: true,
|
||||
},
|
||||
});
|
||||
const pwaDisabled = isDev || appPlatform !== 'web';
|
||||
|
||||
const withPWA = pwaDisabled
|
||||
? (config) => config
|
||||
: withSerwistInit({
|
||||
swSrc: 'src/sw.ts',
|
||||
swDest: 'public/sw.js',
|
||||
cacheOnNavigation: true,
|
||||
reloadOnOnline: true,
|
||||
disable: false,
|
||||
register: true,
|
||||
scope: '/',
|
||||
});
|
||||
|
||||
const withAnalyzer = withBundleAnalyzer({
|
||||
enabled: process.env.ANALYZE === 'true',
|
||||
|
||||
+134
-45
@@ -1,26 +1,47 @@
|
||||
{
|
||||
"name": "@readest/readest-app",
|
||||
"version": "0.9.92",
|
||||
"version": "0.10.1",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "dotenv -e .env.tauri -- next dev --turbopack",
|
||||
"dev": "dotenv -e .env.tauri -- next dev",
|
||||
"build": "dotenv -e .env.tauri -- next build",
|
||||
"start": "dotenv -e .env.tauri -- next start",
|
||||
"dev-web": "dotenv -e .env.web -- next dev --turbopack",
|
||||
"dev-web": "dotenv -e .env.web -- next dev",
|
||||
"build-web": "dotenv -e .env.web -- next build",
|
||||
"start-web": "dotenv -e .env.web -- next start",
|
||||
"i18n:extract": "i18next-scanner",
|
||||
"lint": "eslint .",
|
||||
"dev-web:vinext": "dotenv -e .env.web -- vinext dev",
|
||||
"build-web:vinext": "dotenv -e .env.web -- vinext build",
|
||||
"start-web:vinext": "dotenv -e .env.web -- vinext start",
|
||||
"build-tauri": "dotenv -e .env.tauri -- next build",
|
||||
"i18n:extract": "i18next-scanner --config i18next-scanner.config.cjs",
|
||||
"lint": "tsgo --noEmit && eslint --cache .",
|
||||
"test": "dotenv -e .env -e .env.test.local vitest",
|
||||
"test:browser": "vitest --config vitest.browser.config.mts --watch=false",
|
||||
"test:tauri": "bash scripts/test-tauri.sh",
|
||||
"test:pr:web": "pnpm test -- --watch=false && pnpm test:browser",
|
||||
"test:pr:tauri": "bash scripts/test-tauri.sh",
|
||||
"test:all": "pnpm test -- --watch=false && pnpm test:browser && bash scripts/test-tauri.sh",
|
||||
"test:e2e": "wdio run wdio.conf.ts",
|
||||
"tauri:dev:test": "dotenv -e .env.tauri -- tauri dev --features webdriver",
|
||||
"tauri:build:test": "dotenv -e .env.tauri -- tauri build --debug --features webdriver",
|
||||
"tauri": "tauri",
|
||||
"prepare-public-vendor": "mkdirp ./public/vendor/pdfjs",
|
||||
"copy-pdfjs-js": "cpx \"../../packages/foliate-js/node_modules/pdfjs-dist/legacy/build/{pdf.worker.min.mjs,pdf.mjs,pdf.d.mts}\" ./public/vendor/pdfjs",
|
||||
"fmt:check": "cargo fmt -p Readest --check",
|
||||
"clippy:check": "cargo clippy -p Readest --no-deps -- -D warnings",
|
||||
"format": "pnpm -w format",
|
||||
"format:check": "pnpm -w format:check",
|
||||
"prepare-public-vendor": "mkdirp ./public/vendor/pdfjs ./public/vendor/simplecc",
|
||||
"copy-pdfjs-js": "cpx \"../../packages/foliate-js/node_modules/pdfjs-dist/legacy/build/{pdf.worker.min.mjs,pdf.min.mjs,pdf.d.mts}\" ./public/vendor/pdfjs",
|
||||
"copy-pdfjs-wasm": "cpx \"../../packages/foliate-js/node_modules/pdfjs-dist/wasm/{openjpeg.wasm,qcms_bg.wasm}\" ./public/vendor/pdfjs",
|
||||
"copy-pdfjs-fonts": "cpx \"../../packages/foliate-js/node_modules/pdfjs-dist/{cmaps,standard_fonts}/*\" ./public/vendor/pdfjs",
|
||||
"copy-flatten-pdfjs-annotation-layer-css": "npx postcss \"../../packages/foliate-js/vendor/pdfjs/annotation_layer_builder.css\" --no-map -u postcss-nested > ./public/vendor/pdfjs/annotation_layer_builder.css",
|
||||
"copy-flatten-pdfjs-text-layer-css": "npx postcss \"../../packages/foliate-js/vendor/pdfjs/text_layer_builder.css\" --no-map -u postcss-nested > ./public/vendor/pdfjs/text_layer_builder.css",
|
||||
"copy-flatten-pdfjs-css": "pnpm copy-flatten-pdfjs-annotation-layer-css && pnpm copy-flatten-pdfjs-text-layer-css",
|
||||
"copy-pdfjs": "pnpm copy-pdfjs-js && pnpm copy-pdfjs-fonts && pnpm copy-flatten-pdfjs-css",
|
||||
"copy-pdfjs": "pnpm copy-pdfjs-js && pnpm copy-pdfjs-wasm && pnpm copy-pdfjs-fonts && pnpm copy-flatten-pdfjs-css",
|
||||
"copy-simplecc": "cpx \"../../packages/simplecc-wasm/dist/web/*\" ./public/vendor/simplecc",
|
||||
"setup-pdfjs": "pnpm prepare-public-vendor && pnpm copy-pdfjs",
|
||||
"setup-simplecc": "pnpm prepare-public-vendor && pnpm copy-simplecc",
|
||||
"setup-vendors": "pnpm setup-pdfjs && pnpm setup-simplecc",
|
||||
"build-win-x64": "dotenv -e .env.tauri.local -- tauri build --target i686-pc-windows-msvc --bundles nsis",
|
||||
"build-win-arm64": "dotenv -e .env.tauri.local -- tauri build --target aarch64-pc-windows-msvc --bundles nsis",
|
||||
"build-linux-x64": "dotenv -e .env.tauri.local -- tauri build --target x86_64-unknown-linux-gnu --bundles appimage",
|
||||
@@ -33,50 +54,83 @@
|
||||
"release-ios-appstore": "dotenv -e .env.ios-appstore.local -- bash scripts/release-ios-appstore.sh",
|
||||
"release-google-play": "dotenv -e .env.google-play.local -- bash scripts/release-google-play.sh",
|
||||
"config-wrangler": "sed -i \"s/\\${TRANSLATIONS_KV_ID}/$TRANSLATIONS_KV_ID/g\" wrangler.toml",
|
||||
"preview": "NEXT_PUBLIC_APP_PLATFORM=web opennextjs-cloudflare build && opennextjs-cloudflare preview --ip 0.0.0.0",
|
||||
"deploy": "NEXT_PUBLIC_APP_PLATFORM=web opennextjs-cloudflare build && opennextjs-cloudflare deploy",
|
||||
"upload": "NEXT_PUBLIC_APP_PLATFORM=web opennextjs-cloudflare build && opennextjs-cloudflare upload",
|
||||
"preview": "pnpm patch-build-webpack && NEXT_PUBLIC_APP_PLATFORM=web opennextjs-cloudflare build && pnpm restore-build-original && opennextjs-cloudflare preview --ip 0.0.0.0 --port 3001",
|
||||
"deploy": "pnpm patch-build-webpack && NEXT_PUBLIC_APP_PLATFORM=web opennextjs-cloudflare build && pnpm restore-build-original && opennextjs-cloudflare deploy",
|
||||
"upload": "pnpm patch-build-webpack && NEXT_PUBLIC_APP_PLATFORM=web opennextjs-cloudflare build && pnpm restore-build-original && opennextjs-cloudflare upload",
|
||||
"cf-typegen": "wrangler types --env-interface CloudflareEnv cloudflare-env.d.ts",
|
||||
"patch-build-webpack": "if [ \"$(uname)\" = \"Darwin\" ]; then sed -i '' 's/next build\"/next build --webpack\"/' package.json; else sed -i 's/next build\"/next build --webpack\"/' package.json; fi",
|
||||
"restore-build-original": "if [ \"$(uname)\" = \"Darwin\" ]; then sed -i '' 's/next build --webpack\"/next build\"/' package.json; else sed -i 's/next build --webpack\"/next build\"/' package.json; fi",
|
||||
"update-metadata": "bash ./scripts/sync-release-notes.sh release-notes.json ../../data/metainfo/appdata.xml",
|
||||
"check:optional-chaining": "count=$(grep -rno '\\?\\.[a-zA-Z_$]' .next/static/chunks/* out/_next/static/chunks/* | wc -l); if [ \"$count\" -gt 0 ]; then echo '❌ Optional chaining found in output!'; exit 1; else echo '✅ No optional chaining found.'; fi",
|
||||
"check:translations": "count=$(grep -rno '__STRING_NOT_TRANSLATED__' public/locales/* | wc -l); if [ \"$count\" -gt 0 ]; then echo '❌ Untranslated strings found!'; exit 1; else echo '✅ All strings translated.'; fi",
|
||||
"check:all": "pnpm check:optional-chaining && pnpm check:translations",
|
||||
"check:lookbehind-regex": "count=$(grep -rnoE '\\(\\?<[!=]' .next/static/chunks/* out/_next/static/chunks/* | wc -l); if [ \"$count\" -gt 0 ]; then echo '❌ Lookbehind regex found in output!'; exit 1; else echo '✅ No lookbehind regex found.'; fi",
|
||||
"check:all": "pnpm check:translations && pnpm check:lookbehind-regex",
|
||||
"build-check": "pnpm build && pnpm build-web && pnpm check:all"
|
||||
},
|
||||
"dependencies": {
|
||||
"@aws-sdk/client-s3": "^3.735.0",
|
||||
"@aws-sdk/s3-request-presigner": "^3.735.0",
|
||||
"@ducanh2912/next-pwa": "^10.2.9",
|
||||
"@ai-sdk/react": "^3.0.49",
|
||||
"@assistant-ui/react": "0.11.56",
|
||||
"@assistant-ui/react-ai-sdk": "1.1.21",
|
||||
"@assistant-ui/react-markdown": "0.11.9",
|
||||
"@aws-sdk/client-s3": "^3.1000.0",
|
||||
"@aws-sdk/s3-request-presigner": "^3.1000.0",
|
||||
"@choochmeque/tauri-plugin-sharekit-api": "^0.3.0",
|
||||
"@emnapi/core": "^1.7.1",
|
||||
"@emnapi/runtime": "^1.7.1",
|
||||
"@fabianlars/tauri-plugin-oauth": "2",
|
||||
"@opennextjs/cloudflare": "^1.11.0",
|
||||
"@napi-rs/wasm-runtime": "^1.1.1",
|
||||
"@opennextjs/cloudflare": "^1.17.1",
|
||||
"@radix-ui/react-collapsible": "^1.1.12",
|
||||
"@radix-ui/react-dialog": "^1.1.15",
|
||||
"@radix-ui/react-dropdown-menu": "^2.1.16",
|
||||
"@radix-ui/react-hover-card": "^1.1.15",
|
||||
"@radix-ui/react-scroll-area": "^1.2.10",
|
||||
"@radix-ui/react-select": "^2.2.6",
|
||||
"@radix-ui/react-separator": "^1.1.8",
|
||||
"@radix-ui/react-slot": "^1.2.4",
|
||||
"@radix-ui/react-tabs": "^1.1.13",
|
||||
"@radix-ui/react-tooltip": "^1.2.8",
|
||||
"@serwist/next": "^9.5.6",
|
||||
"@serwist/webpack-plugin": "^9.5.6",
|
||||
"@stripe/react-stripe-js": "^3.7.0",
|
||||
"@stripe/stripe-js": "^7.4.0",
|
||||
"@supabase/auth-ui-react": "^0.4.7",
|
||||
"@supabase/auth-ui-shared": "^0.1.8",
|
||||
"@supabase/supabase-js": "^2.76.1",
|
||||
"@tauri-apps/api": "2.9.0",
|
||||
"@tauri-apps/plugin-cli": "^2.4.0",
|
||||
"@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.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.1",
|
||||
"@tauri-apps/plugin-updater": "^2.9.0",
|
||||
"@zip.js/zip.js": "^2.7.53",
|
||||
"@tauri-apps/api": "2.10.1",
|
||||
"@tauri-apps/plugin-cli": "^2.4.1",
|
||||
"@tauri-apps/plugin-deep-link": "^2.4.7",
|
||||
"@tauri-apps/plugin-dialog": "^2.6.0",
|
||||
"@tauri-apps/plugin-fs": "^2.4.5",
|
||||
"@tauri-apps/plugin-haptics": "^2.3.2",
|
||||
"@tauri-apps/plugin-http": "^2.5.7",
|
||||
"@tauri-apps/plugin-log": "^2.8.0",
|
||||
"@tauri-apps/plugin-opener": "^2.5.3",
|
||||
"@tauri-apps/plugin-os": "^2.3.2",
|
||||
"@tauri-apps/plugin-process": "^2.3.1",
|
||||
"@tauri-apps/plugin-shell": "~2.3.5",
|
||||
"@tauri-apps/plugin-updater": "^2.10.0",
|
||||
"@tauri-apps/plugin-websocket": "~2.4.2",
|
||||
"@tursodatabase/database-common": "^0.5.0",
|
||||
"@tursodatabase/database-wasm": "^0.5.0",
|
||||
"@tybys/wasm-util": "^0.10.1",
|
||||
"@zip.js/zip.js": "^2.8.16",
|
||||
"abortcontroller-polyfill": "^1.7.8",
|
||||
"ai": "^6.0.47",
|
||||
"ai-sdk-ollama": "^3.2.0",
|
||||
"app-store-server-api": "^0.17.1",
|
||||
"aws4fetch": "^1.0.20",
|
||||
"buffer": "^6.0.3",
|
||||
"class-variance-authority": "^0.7.1",
|
||||
"clsx": "^2.1.1",
|
||||
"cmdk": "^1.1.1",
|
||||
"cors": "^2.8.5",
|
||||
"dayjs": "^1.11.13",
|
||||
"dompurify": "^3.3.0",
|
||||
"foliate-js": "workspace:*",
|
||||
"franc-min": "^6.2.0",
|
||||
"google-auth-library": "^10.4.1",
|
||||
"fzf": "^0.5.2",
|
||||
"google-auth-library": "^10.5.0",
|
||||
"googleapis": "^164.1.0",
|
||||
"highlight.js": "^11.11.1",
|
||||
"i18next": "^24.2.0",
|
||||
@@ -84,64 +138,99 @@
|
||||
"i18next-http-backend": "^3.0.1",
|
||||
"iso-639-2": "^3.0.2",
|
||||
"iso-639-3": "^3.0.1",
|
||||
"isomorphic-ws": "^5.0.0",
|
||||
"js-md5": "^0.8.3",
|
||||
"jwt-decode": "^4.0.0",
|
||||
"lucide-react": "^0.562.0",
|
||||
"lunr": "^2.3.9",
|
||||
"marked": "^15.0.12",
|
||||
"next": "15.5.6",
|
||||
"nanoid": "^5.1.6",
|
||||
"next": "16.1.7",
|
||||
"next-view-transitions": "^0.3.5",
|
||||
"nunjucks": "^3.2.4",
|
||||
"overlayscrollbars": "^2.11.4",
|
||||
"overlayscrollbars-react": "^0.5.6",
|
||||
"posthog-js": "^1.246.0",
|
||||
"react": "19.0.0",
|
||||
"react": "19.2.4",
|
||||
"react-color": "^2.19.3",
|
||||
"react-dom": "19.0.0",
|
||||
"react-dom": "19.2.4",
|
||||
"react-i18next": "^15.2.0",
|
||||
"react-icons": "^5.4.0",
|
||||
"react-responsive": "^10.0.0",
|
||||
"react-virtuoso": "^4.17.0",
|
||||
"react-window": "^1.8.11",
|
||||
"remark-gfm": "^4.0.1",
|
||||
"semver": "^7.7.1",
|
||||
"streamdown": "^1.6.10",
|
||||
"stripe": "^18.2.1",
|
||||
"styled-jsx": "^5.1.7",
|
||||
"tailwind-merge": "^3.4.0",
|
||||
"tauri-plugin-device-info-api": "^1.0.1",
|
||||
"tinycolor2": "^1.6.0",
|
||||
"uuid": "^11.1.0",
|
||||
"ws": "^8.18.3",
|
||||
"zod": "^4.0.8",
|
||||
"zustand": "5.0.6"
|
||||
"zustand": "5.0.10"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@next/bundle-analyzer": "^15.4.2",
|
||||
"@tailwindcss/typography": "^0.5.16",
|
||||
"@tauri-apps/cli": "2.9.1",
|
||||
"@tauri-apps/cli": "2.10.1",
|
||||
"@testing-library/dom": "^10.4.0",
|
||||
"@testing-library/react": "^16.3.0",
|
||||
"@tursodatabase/database": "^0.5.0",
|
||||
"@types/cors": "^2.8.17",
|
||||
"@types/cssbeautify": "^0.3.5",
|
||||
"@types/lunr": "^2.3.7",
|
||||
"@types/mocha": "^10.0.10",
|
||||
"@types/node": "^22.15.31",
|
||||
"@types/react": "18.3.12",
|
||||
"@types/nunjucks": "^3.2.6",
|
||||
"@types/react": "^19.0.0",
|
||||
"@types/react-color": "^3.0.13",
|
||||
"@types/react-dom": "18.3.1",
|
||||
"@types/react-dom": "^19.0.0",
|
||||
"@types/react-window": "^1.8.8",
|
||||
"@types/semver": "^7.7.0",
|
||||
"@types/tinycolor2": "^1.4.6",
|
||||
"@types/uuid": "^10.0.0",
|
||||
"@vitejs/plugin-react": "^4.7.0",
|
||||
"@types/ws": "^8.18.1",
|
||||
"@typescript-eslint/eslint-plugin": "^8.48.0",
|
||||
"@typescript-eslint/parser": "^8.48.0",
|
||||
"@typescript/native-preview": "7.0.0-dev.20260312.1",
|
||||
"@vitejs/plugin-react": "^5.1.1",
|
||||
"@vitejs/plugin-rsc": "^0.5.21",
|
||||
"@vitest/browser-playwright": "^4.0.18",
|
||||
"@vitest/browser-webdriverio": "^4.0.18",
|
||||
"@wdio/cli": "^9.25.0",
|
||||
"@wdio/globals": "^9.23.0",
|
||||
"@wdio/local-runner": "^9.24.0",
|
||||
"@wdio/mocha-framework": "^9.24.0",
|
||||
"@wdio/spec-reporter": "^9.24.0",
|
||||
"@wdio/types": "^9.24.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": "16.0.0",
|
||||
"eslint": "^9.39.2",
|
||||
"eslint-config-next": "16.1.6",
|
||||
"eslint-plugin-jsx-a11y": "^6.10.2",
|
||||
"i18next-scanner": "^4.6.0",
|
||||
"jsdom": "^26.1.0",
|
||||
"jsdom": "^28.1.0",
|
||||
"mkdirp": "^3.0.1",
|
||||
"node-env-run": "^4.0.2",
|
||||
"playwright": "^1.58.2",
|
||||
"postcss": "^8.4.49",
|
||||
"postcss-cli": "^11.0.0",
|
||||
"postcss-nested": "^7.0.2",
|
||||
"raw-loader": "^4.0.2",
|
||||
"tailwindcss": "^3.4.17",
|
||||
"react-server-dom-webpack": "^19.2.4",
|
||||
"serwist": "^9.3.0",
|
||||
"tailwindcss": "^3.4.18",
|
||||
"typescript": "^5.7.2",
|
||||
"vinext": "^0.0.21",
|
||||
"vite": "^7.3.1",
|
||||
"vite-tsconfig-paths": "^5.1.4",
|
||||
"vitest": "^3.2.4",
|
||||
"wrangler": "^4.44.0"
|
||||
"vitest": "^4.0.18",
|
||||
"wrangler": "^4.73.0"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
ed533042-5626-4704-b5f2-fa3bbd1136ed
|
||||
@@ -1,2 +0,0 @@
|
||||
/_next/static/*
|
||||
Cache-Control: public,max-age=31536000,immutable
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
After Width: | Height: | Size: 52 KiB |
@@ -8,7 +8,6 @@
|
||||
"Auto Mode": "الوضع التلقائي",
|
||||
"Behavior": "السلوك",
|
||||
"Book": "الكتاب",
|
||||
"Book Cover": "غلاف الكتاب",
|
||||
"Bookmark": "علامة مرجعية",
|
||||
"Cancel": "إلغاء",
|
||||
"Chapter": "الفصل",
|
||||
@@ -106,7 +105,6 @@
|
||||
"Wikipedia": "ويكيبيديا",
|
||||
"Writing Mode": "وضع الكتابة",
|
||||
"Your Library": "المكتبة الخاصة بك",
|
||||
"TTS not supported for PDF": "القراءة الصوتية غير مدعومة لملفات PDF",
|
||||
"Override Book Font": "تجاوز خط الكتاب",
|
||||
"Apply to All Books": "تطبيق على جميع الكتب",
|
||||
"Apply to This Book": "تطبيق على هذا الكتاب",
|
||||
@@ -173,9 +171,6 @@
|
||||
"Token": "الرمز",
|
||||
"Your OTP token": "رمز OTP الذي وصلك",
|
||||
"Verify token": "التحقق من الرمز",
|
||||
"Sign in with Google": "تسجيل الدخول عبر Google",
|
||||
"Sign in with Apple": "تسجيل الدخول عبر Apple",
|
||||
"Sign in with GitHub": "تسجيل الدخول عبر GitHub",
|
||||
"Account": "الحساب",
|
||||
"Failed to delete user. Please try again later.": "فشل حذف المستخدم. يرجى المحاولة مرة أخرى لاحقًا.",
|
||||
"Community Support": "دعم المجتمع",
|
||||
@@ -193,7 +188,7 @@
|
||||
"No supported files found. Supported formats: {{formats}}": "لم يتم العثور على ملفات مدعومة. الصيغ المدعومة: {{formats}}",
|
||||
"Drop to Import Books": "قم بالسحب والإسقاط لاستيراد الكتب",
|
||||
"Custom": "مخصص",
|
||||
"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— ويليام شكسبير",
|
||||
"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— ويليام شكسبير",
|
||||
"Custom Theme": "سمة مخصصة",
|
||||
"Theme Name": "اسم السمة",
|
||||
"Text Color": "لون النص",
|
||||
@@ -350,15 +345,15 @@
|
||||
"Fit": "ملاءمة",
|
||||
"Reset {{settings}}": "إعادة تعيين {{settings}}",
|
||||
"Reset Settings": "إعادة تعيين الإعدادات",
|
||||
"{{count}} pages left in chapter_zero": "لم يتبق أي صفحات في هذا الفصل",
|
||||
"{{count}} pages left in chapter_one": "تبقّت صفحة واحدة في هذا الفصل",
|
||||
"{{count}} pages left in chapter_two": "تبقّت صفحتان في هذا الفصل",
|
||||
"{{count}} pages left in chapter_few": "تبقّت {{count}} صفحات في هذا الفصل",
|
||||
"{{count}} pages left in chapter_many": "تبقّت {{count}} صفحة في هذا الفصل",
|
||||
"{{count}} pages left in chapter_other": "تبقّى {{count}} صفحة في هذا الفصل",
|
||||
"{{count}} pages left in chapter_zero": "<1>لم يتبق أي صفحات في هذا الفصل</1>",
|
||||
"{{count}} pages left in chapter_one": "<1>تبقّت صفحة واحدة في هذا الفصل</1>",
|
||||
"{{count}} pages left in chapter_two": "<1>تبقّت صفحتان في هذا الفصل</1>",
|
||||
"{{count}} pages left in chapter_few": "<1>تبقّت </1><0>{{count}}</0><1> صفحات في هذا الفصل</1>",
|
||||
"{{count}} pages left in chapter_many": "<1>تبقّت </1><0>{{count}}</0><1> صفحة في هذا الفصل</1>",
|
||||
"{{count}} pages left in chapter_other": "<1>تبقّى </1><0>{{count}}</0><1> صفحة في هذا الفصل</1>",
|
||||
"Show Remaining Pages": "عرض الصفحات المتبقية",
|
||||
"Source Han Serif CN VF": "Source Han Serif",
|
||||
"Huiwen-mincho": "Huiwen Mincho",
|
||||
"Source Han Serif CN": "Source Han Serif",
|
||||
"Huiwen-MinchoGBK": "Huiwen Mincho",
|
||||
"KingHwa_OldSong": "KingHwa Song",
|
||||
"Manage Subscription": "إدارة الاشتراك",
|
||||
"Coming Soon": "قريبًا",
|
||||
@@ -619,11 +614,10 @@
|
||||
"Size": "حجم",
|
||||
"Cover": "غطاء",
|
||||
"Contain": "احتواء",
|
||||
"{{number}} pages left in chapter": "تبقّت {{number}} صفحات في هذا الفصل",
|
||||
"{{number}} pages left in chapter": "<1>تبقّت </1><0>{{number}}</0><1> صفحات في هذا الفصل</1>",
|
||||
"Device": "الجهاز",
|
||||
"E-Ink Mode": "وضع الحبر الإلكتروني",
|
||||
"Highlight Colors": "ألوان التمييز",
|
||||
"Auto Screen Brightness": "سطوع الشاشة التلقائي",
|
||||
"Pagination": "التقسيم إلى صفحات",
|
||||
"Disable Double Tap": "تعطيل النقر المزدوج",
|
||||
"Tap to Paginate": "اضغط للتقسيم إلى صفحات",
|
||||
@@ -672,5 +666,493 @@
|
||||
"Update email": "تحديث البريد الإلكتروني",
|
||||
"Current email": "البريد الإلكتروني الحالي",
|
||||
"Update Email": "تحديث البريد الإلكتروني",
|
||||
"All": "الكل"
|
||||
"All": "الكل",
|
||||
"Unable to open book": "غير قادر على فتح الكتاب",
|
||||
"Punctuation": "علامات الترقيم",
|
||||
"Replace Quotation Marks": "استبدال علامات الاقتباس",
|
||||
"Enabled only in vertical layout.": "مفعل فقط في التخطيط الرأسي.",
|
||||
"No Conversion": "لا تحويل",
|
||||
"Simplified to Traditional": "من المبسّط إلى التقليدي",
|
||||
"Traditional to Simplified": "من التقليدي إلى المبسّط",
|
||||
"Simplified to Traditional (Taiwan)": "مبسّط → تقليدي (تايوان)",
|
||||
"Simplified to Traditional (Hong Kong)": "مبسّط → تقليدي (هونغ كونغ)",
|
||||
"Simplified to Traditional (Taiwan), with phrases": "مبسّط → تقليدي (تايوان • عبارات)",
|
||||
"Traditional (Taiwan) to Simplified": "تقليدي (تايوان) → مبسّط",
|
||||
"Traditional (Hong Kong) to Simplified": "تقليدي (هونغ كونغ) → مبسّط",
|
||||
"Traditional (Taiwan) to Simplified, with phrases": "تقليدي (تايوان • عبارات) → مبسّط",
|
||||
"Convert Simplified and Traditional Chinese": "تحويل المبسّط/التقليدي",
|
||||
"Convert Mode": "وضع التحويل",
|
||||
"Failed to auto-save book cover for lock screen: {{error}}": "فشل في الحفظ التلقائي لغلاف الكتاب لشاشة القفل: {{error}}",
|
||||
"Download from Cloud": "تحميل من السحابة",
|
||||
"Upload to Cloud": "رفع إلى السحابة",
|
||||
"Clear Custom Fonts": "مسح الخطوط المخصصة",
|
||||
"Columns": "الأعمدة",
|
||||
"OPDS Catalogs": "كتالوجات OPDS",
|
||||
"Adding LAN addresses is not supported in the web app version.": "لا يتم دعم إضافة عناوين LAN في إصدار تطبيق الويب.",
|
||||
"Invalid OPDS catalog. Please check the URL.": "كتالوج OPDS غير صالح. يرجى التحقق من عنوان URL.",
|
||||
"Browse and download books from online catalogs": "تصفح وتنزيل الكتب من الكتالوجات عبر الإنترنت",
|
||||
"My Catalogs": "كتالوجاتي",
|
||||
"Add Catalog": "إضافة كتالوج",
|
||||
"No catalogs yet": "لا توجد كتالوجات بعد",
|
||||
"Add your first OPDS catalog to start browsing books": "أضف كتالوج OPDS الأول لتبدأ في تصفح الكتب",
|
||||
"Add Your First Catalog": "أضف كتالوجك الأول",
|
||||
"Browse": "تصفح",
|
||||
"Popular Catalogs": "الكتالوجات الشائعة",
|
||||
"Add": "إضافة",
|
||||
"Add OPDS Catalog": "إضافة كتالوج OPDS",
|
||||
"Catalog Name": "اسم الكتالوج",
|
||||
"My Calibre Library": "مكتبة Calibre الخاصة بي",
|
||||
"OPDS URL": "رابط OPDS",
|
||||
"Username (optional)": "اسم المستخدم (اختياري)",
|
||||
"Password (optional)": "كلمة المرور (اختياري)",
|
||||
"Description (optional)": "الوصف (اختياري)",
|
||||
"A brief description of this catalog": "وصف موجز لهذا الكتالوج",
|
||||
"Validating...": "جارٍ التحقق...",
|
||||
"View All": "عرض الكل",
|
||||
"Forward": "إلى الأمام",
|
||||
"Home": "الصفحة الرئيسية",
|
||||
"{{count}} items_zero": "{{count}} عناصر",
|
||||
"{{count}} items_one": "{{count}} عنصر",
|
||||
"{{count}} items_two": "{{count}} عنصران",
|
||||
"{{count}} items_few": "{{count}} عناصر",
|
||||
"{{count}} items_many": "{{count}} عنصرًا",
|
||||
"{{count}} items_other": "{{count}} من العناصر",
|
||||
"Download completed": "اكتمل التنزيل",
|
||||
"Download failed": "فشل التنزيل",
|
||||
"Open Access": "الوصول المفتوح",
|
||||
"Borrow": "استعارة",
|
||||
"Buy": "شراء",
|
||||
"Subscribe": "الاشتراك",
|
||||
"Sample": "عينة",
|
||||
"Download": "تنزيل",
|
||||
"Open & Read": "فتح وقراءة",
|
||||
"Tags": "العلامات",
|
||||
"Tag": "علامة",
|
||||
"First": "الأول",
|
||||
"Previous": "السابق",
|
||||
"Next": "التالي",
|
||||
"Last": "الأخير",
|
||||
"Cannot Load Page": "تعذر تحميل الصفحة",
|
||||
"An error occurred": "حدث خطأ ما",
|
||||
"Online Library": "المكتبة عبر الإنترنت",
|
||||
"URL must start with http:// or https://": "يجب أن يبدأ عنوان URL بـ http:// أو https://",
|
||||
"Title, Author, Tag, etc...": "العنوان، المؤلف، العلامة، إلخ...",
|
||||
"Query": "استعلام",
|
||||
"Subject": "موضوع",
|
||||
"Enter {{terms}}": "أدخل {{terms}}",
|
||||
"No search results found": "لم يتم العثور على نتائج بحث",
|
||||
"Failed to load OPDS feed: {{status}} {{statusText}}": "فشل في تحميل تغذية OPDS: {{status}} {{statusText}}",
|
||||
"Search in {{title}}": "البحث في {{title}}",
|
||||
"Manage Storage": "إدارة التخزين",
|
||||
"Failed to load files": "فشل في تحميل الملفات",
|
||||
"Deleted {{count}} file(s)_zero": "لم يتم حذف أي ملفات",
|
||||
"Deleted {{count}} file(s)_one": "تم حذف ملف واحد",
|
||||
"Deleted {{count}} file(s)_two": "تم حذف ملفين",
|
||||
"Deleted {{count}} file(s)_few": "تم حذف {{count}} ملفات",
|
||||
"Deleted {{count}} file(s)_many": "تم حذف {{count}} ملفًا",
|
||||
"Deleted {{count}} file(s)_other": "تم حذف {{count}} ملف",
|
||||
"Failed to delete {{count}} file(s)_zero": "فشل حذف أي ملفات",
|
||||
"Failed to delete {{count}} file(s)_one": "فشل حذف ملف واحد",
|
||||
"Failed to delete {{count}} file(s)_two": "فشل حذف ملفين",
|
||||
"Failed to delete {{count}} file(s)_few": "فشل حذف {{count}} ملفات",
|
||||
"Failed to delete {{count}} file(s)_many": "فشل حذف {{count}} ملفًا",
|
||||
"Failed to delete {{count}} file(s)_other": "فشل حذف {{count}} ملف",
|
||||
"Failed to delete files": "فشل حذف الملفات",
|
||||
"Total Files": "إجمالي الملفات",
|
||||
"Total Size": "إجمالي الحجم",
|
||||
"Quota": "الحصة",
|
||||
"Used": "المستخدم",
|
||||
"Files": "الملفات",
|
||||
"Search files...": "ابحث في الملفات...",
|
||||
"Newest First": "الأحدث أولاً",
|
||||
"Oldest First": "الأقدم أولاً",
|
||||
"Largest First": "الأكبر أولاً",
|
||||
"Smallest First": "الأصغر أولاً",
|
||||
"Name A-Z": "الاسم من أ إلى ي",
|
||||
"Name Z-A": "الاسم من ي إلى أ",
|
||||
"{{count}} selected_zero": "لا يوجد عناصر محددة",
|
||||
"{{count}} selected_one": "عنصر واحد محدد",
|
||||
"{{count}} selected_two": "عنصران محددان",
|
||||
"{{count}} selected_few": "{{count}} عناصر محددة",
|
||||
"{{count}} selected_many": "{{count}} عنصرًا محددًا",
|
||||
"{{count}} selected_other": "{{count}} عنصر محدد",
|
||||
"Delete Selected": "حذف المحدد",
|
||||
"Created": "تاريخ الإنشاء",
|
||||
"No files found": "لا توجد ملفات",
|
||||
"No files uploaded yet": "لم يتم رفع أي ملفات بعد",
|
||||
"files": "الملفات",
|
||||
"Page {{current}} of {{total}}": "الصفحة {{current}} من {{total}}",
|
||||
"Are you sure to delete {{count}} selected file(s)?_zero": "هل أنت متأكد من حذف العناصر المحددة؟ (لا توجد عناصر)",
|
||||
"Are you sure to delete {{count}} selected file(s)?_one": "هل أنت متأكد من حذف ملف واحد محدد؟",
|
||||
"Are you sure to delete {{count}} selected file(s)?_two": "هل أنت متأكد من حذف ملفين محددين؟",
|
||||
"Are you sure to delete {{count}} selected file(s)?_few": "هل أنت متأكد من حذف {{count}} ملفات محددة؟",
|
||||
"Are you sure to delete {{count}} selected file(s)?_many": "هل أنت متأكد من حذف {{count}} ملفًا محددًا؟",
|
||||
"Are you sure to delete {{count}} selected file(s)?_other": "هل أنت متأكد من حذف {{count}} ملف محدد؟",
|
||||
"Cloud Storage Usage": "استخدام التخزين السحابي",
|
||||
"Rename Group": "إعادة تسمية المجموعة",
|
||||
"From Directory": "من الدليل",
|
||||
"Successfully imported {{count}} book(s)_zero": "لم يتم استيراد أي كتب",
|
||||
"Successfully imported {{count}} book(s)_one": "تم استيراد كتاب واحد",
|
||||
"Successfully imported {{count}} book(s)_two": "تم استيراد كتابين",
|
||||
"Successfully imported {{count}} book(s)_few": "تم استيراد {{count}} كتب",
|
||||
"Successfully imported {{count}} book(s)_many": "تم استيراد {{count}} كتابًا",
|
||||
"Successfully imported {{count}} book(s)_other": "تم استيراد {{count}} كتاب",
|
||||
"Count": "العدد",
|
||||
"Start Page": "الصفحة الأولى",
|
||||
"Search in OPDS Catalog...": "البحث في كتالوج OPDS...",
|
||||
"Please log in to use advanced TTS features": "يرجى تسجيل الدخول لاستخدام ميزات تحويل النص إلى كلام المتقدمة.",
|
||||
"Word limit of 30 words exceeded.": "تم تجاوز حد الكلمات البالغ 30 كلمة.",
|
||||
"Proofread": "التدقيق اللغوي",
|
||||
"Current selection": "النص المحدد الحالي",
|
||||
"All occurrences in this book": "جميع الحالات في هذا الكتاب",
|
||||
"All occurrences in your library": "جميع الحالات في مكتبتك",
|
||||
"Selected text:": "النص المحدد:",
|
||||
"Replace with:": "استبدال بـ:",
|
||||
"Enter text...": "أدخل النص...",
|
||||
"Case sensitive:": "حساس لحالة الأحرف:",
|
||||
"Scope:": "النطاق:",
|
||||
"Selection": "التحديد",
|
||||
"Library": "المكتبة",
|
||||
"Yes": "نعم",
|
||||
"No": "لا",
|
||||
"Proofread Replacement Rules": "قواعد استبدال التدقيق اللغوي",
|
||||
"Selected Text Rules": "قواعد النص المحدد",
|
||||
"No selected text replacement rules": "لا توجد قواعد استبدال نص محدد",
|
||||
"Book Specific Rules": "قواعد خاصة بالكتاب",
|
||||
"No book-level replacement rules": "لا توجد قواعد استبدال على مستوى الكتاب",
|
||||
"Disable Quick Action": "تعطيل الإجراء السريع",
|
||||
"Enable Quick Action on Selection": "تمكين الإجراء السريع عند التحديد",
|
||||
"None": "لا شيء",
|
||||
"Annotation Tools": "أدوات التعليق",
|
||||
"Enable Quick Actions": "تمكين الإجراءات السريعة",
|
||||
"Quick Action": "الإجراء السريع",
|
||||
"Copy to Notebook": "نسخ إلى الدفتر",
|
||||
"Copy text after selection": "نسخ النص بعد التحديد",
|
||||
"Highlight text after selection": "تمييز النص بعد التحديد",
|
||||
"Annotate text after selection": "تعليق على النص بعد التحديد",
|
||||
"Search text after selection": "البحث في النص بعد التحديد",
|
||||
"Look up text in dictionary after selection": "البحث عن النص في القاموس بعد التحديد",
|
||||
"Look up text in Wikipedia after selection": "البحث عن النص في ويكيبيديا بعد التحديد",
|
||||
"Translate text after selection": "ترجمة النص بعد التحديد",
|
||||
"Read text aloud after selection": "قراءة النص بصوت عالٍ بعد التحديد",
|
||||
"Proofread text after selection": "تدقيق النص بعد التحديد",
|
||||
"{{activeCount}} active, {{pendingCount}} pending": "{{activeCount}} نشط، {{pendingCount}} قيد الانتظار",
|
||||
"{{failedCount}} failed": "{{failedCount}} فشل",
|
||||
"Waiting...": "جارٍ الانتظار...",
|
||||
"Failed": "فشل",
|
||||
"Completed": "مكتمل",
|
||||
"Cancelled": "ملغى",
|
||||
"Retry": "إعادة المحاولة",
|
||||
"Active": "نشط",
|
||||
"Transfer Queue": "قائمة انتظار النقل",
|
||||
"Upload All": "رفع الكل",
|
||||
"Download All": "تنزيل الكل",
|
||||
"Resume Transfers": "استئناف النقل",
|
||||
"Pause Transfers": "إيقاف النقل مؤقتًا",
|
||||
"Pending": "قيد الانتظار",
|
||||
"No transfers": "لا توجد عمليات نقل",
|
||||
"Retry All": "إعادة محاولة الكل",
|
||||
"Clear Completed": "مسح المكتمل",
|
||||
"Clear Failed": "مسح الفاشل",
|
||||
"Upload queued: {{title}}": "الرفع في قائمة الانتظار: {{title}}",
|
||||
"Download queued: {{title}}": "التنزيل في قائمة الانتظار: {{title}}",
|
||||
"Book not found in library": "الكتاب غير موجود في المكتبة",
|
||||
"Unknown error": "خطأ غير معروف",
|
||||
"Please log in to continue": "يرجى تسجيل الدخول للمتابعة",
|
||||
"Cloud File Transfers": "نقل الملفات السحابية",
|
||||
"Show Search Results": "عرض نتائج البحث",
|
||||
"Search results for '{{term}}'": "نتائج البحث عن «{{term}}»",
|
||||
"Close Search": "إغلاق البحث",
|
||||
"Previous Result": "النتيجة السابقة",
|
||||
"Next Result": "النتيجة التالية",
|
||||
"Bookmarks": "الإشارات المرجعية",
|
||||
"Annotations": "التعليقات التوضيحية",
|
||||
"Show Results": "عرض النتائج",
|
||||
"Clear search": "مسح البحث",
|
||||
"Clear search history": "مسح سجل البحث",
|
||||
"Tap to Toggle Footer": "انقر لتبديل التذييل",
|
||||
"Show Current Time": "عرض الوقت الحالي",
|
||||
"Use 24 Hour Clock": "استخدام نظام 24 ساعة",
|
||||
"Show Current Battery Status": "عرض حالة البطارية الحالية",
|
||||
"Exported successfully": "تم التصدير بنجاح",
|
||||
"Book exported successfully.": "تم تصدير الكتاب بنجاح.",
|
||||
"Failed to export the book.": "فشل تصدير الكتاب.",
|
||||
"Export Book": "تصدير الكتاب",
|
||||
"Whole word:": "كلمة كاملة:",
|
||||
"Error": "خطأ",
|
||||
"Unable to load the article. Try searching directly on {{link}}.": "تعذر تحميل المقال. حاول البحث مباشرة على {{link}}.",
|
||||
"Unable to load the word. Try searching directly on {{link}}.": "تعذر تحميل الكلمة. حاول البحث مباشرة على {{link}}.",
|
||||
"Date Published": "تاريخ النشر",
|
||||
"Only for TTS:": "فقط لـ TTS:",
|
||||
"Uploaded": "تم الرفع",
|
||||
"Downloaded": "تم التنزيل",
|
||||
"Deleted": "تم الحذف",
|
||||
"Note:": "ملاحظة:",
|
||||
"Time:": "الوقت:",
|
||||
"Format Options": "خيارات التنسيق",
|
||||
"Export Date": "تاريخ التصدير",
|
||||
"Chapter Titles": "عناوين الفصول",
|
||||
"Chapter Separator": "فاصل الفصول",
|
||||
"Highlights": "التمييزات",
|
||||
"Note Date": "تاريخ الملاحظة",
|
||||
"Advanced": "متقدم",
|
||||
"Hide": "إخفاء",
|
||||
"Show": "إظهار",
|
||||
"Use Custom Template": "استخدام قالب مخصص",
|
||||
"Export Template": "قالب التصدير",
|
||||
"Template Syntax:": "بناء جملة القالب:",
|
||||
"Insert value": "إدراج قيمة",
|
||||
"Format date (locale)": "تنسيق التاريخ (محلي)",
|
||||
"Format date (custom)": "تنسيق التاريخ (مخصص)",
|
||||
"Conditional": "شرطي",
|
||||
"Loop": "حلقة",
|
||||
"Available Variables:": "المتغيرات المتاحة:",
|
||||
"Book title": "عنوان الكتاب",
|
||||
"Book author": "مؤلف الكتاب",
|
||||
"Export date": "تاريخ التصدير",
|
||||
"Array of chapters": "مصفوفة الفصول",
|
||||
"Chapter title": "عنوان الفصل",
|
||||
"Array of annotations": "مصفوفة التعليقات",
|
||||
"Highlighted text": "النص المميز",
|
||||
"Annotation note": "ملاحظة التعليق",
|
||||
"Date Format Tokens:": "رموز تنسيق التاريخ:",
|
||||
"Year (4 digits)": "السنة (4 أرقام)",
|
||||
"Month (01-12)": "الشهر (01-12)",
|
||||
"Day (01-31)": "اليوم (01-31)",
|
||||
"Hour (00-23)": "الساعة (00-23)",
|
||||
"Minute (00-59)": "الدقيقة (00-59)",
|
||||
"Second (00-59)": "الثانية (00-59)",
|
||||
"Show Source": "إظهار المصدر",
|
||||
"No content to preview": "لا يوجد محتوى للمعاينة",
|
||||
"Export": "تصدير",
|
||||
"Set Timeout": "تعيين المهلة",
|
||||
"Select Voice": "اختر الصوت",
|
||||
"Toggle Sticky Bottom TTS Bar": "تبديل شريط TTS الثابت",
|
||||
"Display what I'm reading on Discord": "عرض ما أقرأه على Discord",
|
||||
"Show on Discord": "عرض على Discord",
|
||||
"Instant {{action}}": "{{action}} فوري",
|
||||
"Instant {{action}} Disabled": "تم تعطيل {{action}} فوري",
|
||||
"Annotation": "التعليق",
|
||||
"Reset Template": "إعادة تعيين القالب",
|
||||
"Annotation style": "نمط التعليق",
|
||||
"Annotation color": "لون التعليق",
|
||||
"Annotation time": "وقت التعليق",
|
||||
"AI": "الذكاء الاصطناعي",
|
||||
"Are you sure you want to re-index this book?": "هل أنت متأكد من إعادة فهرسة هذا الكتاب؟",
|
||||
"Enable AI in Settings": "تفعيل الذكاء الاصطناعي في الإعدادات",
|
||||
"Index This Book": "فهرسة هذا الكتاب",
|
||||
"Enable AI search and chat for this book": "تفعيل البحث والدردشة بالذكاء الاصطناعي لهذا الكتاب",
|
||||
"Start Indexing": "بدء الفهرسة",
|
||||
"Indexing book...": "جاري فهرسة الكتاب...",
|
||||
"Preparing...": "جاري التحضير...",
|
||||
"Delete this conversation?": "حذف هذه المحادثة؟",
|
||||
"No conversations yet": "لا توجد محادثات بعد",
|
||||
"Start a new chat to ask questions about this book": "ابدأ محادثة جديدة لطرح أسئلة حول هذا الكتاب",
|
||||
"Rename": "إعادة التسمية",
|
||||
"New Chat": "محادثة جديدة",
|
||||
"Chat": "محادثة",
|
||||
"Please enter a model ID": "الرجاء إدخال معرف النموذج",
|
||||
"Model not available or invalid": "النموذج غير متاح أو غير صالح",
|
||||
"Failed to validate model": "فشل التحقق من النموذج",
|
||||
"Couldn't connect to Ollama. Is it running?": "تعذر الاتصال بـ Ollama. هل يعمل؟",
|
||||
"Invalid API key or connection failed": "مفتاح API غير صالح أو فشل الاتصال",
|
||||
"Connection failed": "فشل الاتصال",
|
||||
"AI Assistant": "مساعد الذكاء الاصطناعي",
|
||||
"Enable AI Assistant": "تفعيل مساعد الذكاء الاصطناعي",
|
||||
"Provider": "المزود",
|
||||
"Ollama (Local)": "Ollama (محلي)",
|
||||
"AI Gateway (Cloud)": "بوابة الذكاء الاصطناعي (سحابي)",
|
||||
"Ollama Configuration": "إعدادات Ollama",
|
||||
"Refresh Models": "تحديث النماذج",
|
||||
"AI Model": "نموذج الذكاء الاصطناعي",
|
||||
"No models detected": "لم يتم اكتشاف نماذج",
|
||||
"AI Gateway Configuration": "إعدادات بوابة الذكاء الاصطناعي",
|
||||
"Choose from a selection of high-quality, economical AI models. You can also bring your own model by selecting \"Custom Model\" below.": "اختر من مجموعة من نماذج الذكاء الاصطناعي عالية الجودة والاقتصادية. يمكنك أيضًا استخدام نموذجك الخاص بتحديد \"نموذج مخصص\" أدناه.",
|
||||
"API Key": "مفتاح API",
|
||||
"Get Key": "احصل على المفتاح",
|
||||
"Model": "النموذج",
|
||||
"Custom Model...": "نموذج مخصص...",
|
||||
"Custom Model ID": "معرف النموذج المخصص",
|
||||
"Validate": "تحقق",
|
||||
"Model available": "النموذج متاح",
|
||||
"Connection": "الاتصال",
|
||||
"Test Connection": "اختبار الاتصال",
|
||||
"Connected": "متصل",
|
||||
"Custom Colors": "ألوان مخصصة",
|
||||
"Color E-Ink Mode": "وضع الحبر الإلكتروني الملون",
|
||||
"Reading Ruler": "مسطرة القراءة",
|
||||
"Enable Reading Ruler": "تفعيل مسطرة القراءة",
|
||||
"Lines to Highlight": "الأسطر المراد تمييزها",
|
||||
"Ruler Color": "لون المسطرة",
|
||||
"Command Palette": "لوحة الأوامر",
|
||||
"Search settings and actions...": "البحث في الإعدادات والإجراءات...",
|
||||
"No results found for": "لم يتم العثور على نتائج لـ",
|
||||
"Type to search settings and actions": "اكتب للبحث في الإعدادات والإجراءات",
|
||||
"Recent": "الأخير",
|
||||
"navigate": "التنقل",
|
||||
"select": "اختيار",
|
||||
"close": "إغلاق",
|
||||
"Search Settings": "البحث في الإعدادات",
|
||||
"Page Margins": "هوامش الصفحة",
|
||||
"AI Provider": "مزود الذكاء الاصطناعي",
|
||||
"Ollama URL": "رابط Ollama",
|
||||
"Ollama Model": "نموذج Ollama",
|
||||
"AI Gateway Model": "نموذج بوابة الذكاء الاصطناعي",
|
||||
"Actions": "الإجراءات",
|
||||
"Navigation": "التنقل",
|
||||
"Set status for {{count}} book(s)_one": "تعيين الحالة لـ {{count}} كتاب",
|
||||
"Set status for {{count}} book(s)_other": "تعيين الحالة لـ {{count}} كتب",
|
||||
"Mark as Unread": "تحديد كغير مقروء",
|
||||
"Mark as Finished": "تحديد كمنتهى",
|
||||
"Finished": "منتهى",
|
||||
"Unread": "غير مقروء",
|
||||
"Clear Status": "مسح الحالة",
|
||||
"Status": "الحالة",
|
||||
"Set status for {{count}} book(s)_zero": "تعيين الحالة للكتب",
|
||||
"Set status for {{count}} book(s)_two": "تعيين الحالة للكتابين",
|
||||
"Set status for {{count}} book(s)_few": "تعيين الحالة لـ {{count}} كتب",
|
||||
"Set status for {{count}} book(s)_many": "تعيين الحالة لـ {{count}} كتاباً",
|
||||
"Loading": "جارٍ التحميل...",
|
||||
"Exit Paragraph Mode": "الخروج من وضع الفقرة",
|
||||
"Paragraph Mode": "وضع الفقرة",
|
||||
"Embedding Model": "نموذج التضمين",
|
||||
"{{count}} book(s) synced_zero": "لم تتم مزامنة أي كتب",
|
||||
"{{count}} book(s) synced_one": "تمت مزامنة كتاب واحد",
|
||||
"{{count}} book(s) synced_two": "تمت مزامنة كتابين",
|
||||
"{{count}} book(s) synced_few": "تمت مزامنة {{count}} كتب",
|
||||
"{{count}} book(s) synced_many": "تمت مزامنة {{count}} كتاباً",
|
||||
"{{count}} book(s) synced_other": "تمت مزامنة {{count}} كتاب",
|
||||
"Unable to start RSVP": "تعذر بدء RSVP",
|
||||
"RSVP not supported for PDF": "RSVP غير مدعوم لملفات PDF",
|
||||
"Select Chapter": "اختر الفصل",
|
||||
"Context": "السياق",
|
||||
"Ready": "جاهز",
|
||||
"Chapter Progress": "تقدم الفصل",
|
||||
"words": "كلمات",
|
||||
"{{time}} left": "متبقي {{time}}",
|
||||
"Reading progress": "تقدم القراءة",
|
||||
"Click to seek": "انقر للتمرير",
|
||||
"Skip back 15 words": "تخطي للخلف 15 كلمة",
|
||||
"Back 15 words (Shift+Left)": "للخلف 15 كلمة (Shift+اليسار)",
|
||||
"Pause (Space)": "إيقاف مؤقت (المسافة)",
|
||||
"Play (Space)": "تشغيل (المسافة)",
|
||||
"Skip forward 15 words": "تخطي للأمام 15 كلمة",
|
||||
"Forward 15 words (Shift+Right)": "للأمام 15 كلمة (Shift+اليمين)",
|
||||
"Decrease speed": "تقليل السرعة",
|
||||
"Slower (Left/Down)": "أبطأ (اليسار/الأسفل)",
|
||||
"Increase speed": "زيادة السرعة",
|
||||
"Faster (Right/Up)": "أسرع (اليمين/الأعلى)",
|
||||
"Start RSVP Reading": "بدء قراءة RSVP",
|
||||
"Choose where to start reading": "اختر من أين تبدأ القراءة",
|
||||
"From Chapter Start": "من بداية الفصل",
|
||||
"Start reading from the beginning of the chapter": "بدء القراءة من بداية الفصل",
|
||||
"Resume": "استئناف",
|
||||
"Continue from where you left off": "المتابعة من حيث توقف",
|
||||
"From Current Page": "من الصفحة الحالية",
|
||||
"Start from where you are currently reading": "البدء من حيث تقرأ حالياً",
|
||||
"From Selection": "من التحديد",
|
||||
"Speed Reading Mode": "وضع القراءة السريعة",
|
||||
"Scroll left": "تمرير لليسار",
|
||||
"Scroll right": "تمرير لليمين",
|
||||
"Library Sync Progress": "تقدم تزامن المكتبة",
|
||||
"Back to library": "العودة إلى المكتبة",
|
||||
"Group by...": "تجميع حسب...",
|
||||
"Export as Plain Text": "تصدير كنص بسيط",
|
||||
"Export as Markdown": "تصدير بصيغة Markdown",
|
||||
"Show Page Navigation Buttons": "أزرار التنقل",
|
||||
"Page {{number}}": "صفحة {{number}}",
|
||||
"highlight": "تمييز",
|
||||
"underline": "تسطير",
|
||||
"squiggly": "متعرج",
|
||||
"red": "أحمر",
|
||||
"violet": "بنفسجي",
|
||||
"blue": "أزرق",
|
||||
"green": "أخضر",
|
||||
"yellow": "أصفر",
|
||||
"Select {{style}} style": "اختر نمط {{style}}",
|
||||
"Select {{color}} color": "اختر لون {{color}}",
|
||||
"Close Book": "إغلاق الكتاب",
|
||||
"Speed Reading": "القراءة السريعة",
|
||||
"Close Speed Reading": "إغلاق القراءة السريعة",
|
||||
"Authors": "المؤلفون",
|
||||
"Books": "الكتب",
|
||||
"Groups": "المجموعات",
|
||||
"Back to TTS Location": "العودة إلى موقع القراءة الآلية",
|
||||
"Metadata": "بيانات وصفية",
|
||||
"Image viewer": "عارض الصور",
|
||||
"Previous Image": "الصورة السابقة",
|
||||
"Next Image": "الصورة التالية",
|
||||
"Zoomed": "مكبّر",
|
||||
"Zoom level": "مستوى التكبير",
|
||||
"Table viewer": "عارض الجداول",
|
||||
"Unable to connect to Readwise. Please check your network connection.": "تعذر الاتصال بـ Readwise. يرجى التحقق من اتصال الشبكة لديك.",
|
||||
"Invalid Readwise access token": "رمز وصول Readwise غير صالح",
|
||||
"Disconnected from Readwise": "تم قطع الاتصال بـ Readwise",
|
||||
"Never": "أبداً",
|
||||
"Readwise Settings": "إعدادات Readwise",
|
||||
"Connected to Readwise": "متصل بـ Readwise",
|
||||
"Last synced: {{time}}": "آخر مزامنة: {{time}}",
|
||||
"Sync Enabled": "تم تمكين المزامنة",
|
||||
"Disconnect": "قطع الاتصال",
|
||||
"Connect your Readwise account to sync highlights.": "قم بتوصيل حساب Readwise الخاص بك لمزامنة التمييزات.",
|
||||
"Get your access token at": "احصل على رمز الوصول الخاص بك من",
|
||||
"Access Token": "رمز الوصول",
|
||||
"Paste your Readwise access token": "الصق رمز وصول Readwise الخاص بك",
|
||||
"Config": "تكوين",
|
||||
"Readwise Sync": "مزامنة Readwise",
|
||||
"Push Highlights": "إرسال التمييزات",
|
||||
"Highlights synced to Readwise": "تمت مزامنة التمييزات مع Readwise",
|
||||
"Readwise sync failed: no internet connection": "فشلت مزامنة Readwise: لا يوجد اتصال بالإنترنت",
|
||||
"Readwise sync failed: {{error}}": "فشلت مزامنة Readwise: {{error}}",
|
||||
"System Screen Brightness": "سطوع شاشة النظام",
|
||||
"Page:": "صفحة:",
|
||||
"Page: {{number}}": "صفحة: {{number}}",
|
||||
"Annotation page number": "رقم صفحة التعליق",
|
||||
"Translating...": "جارٍ الترجمة...",
|
||||
"Show Battery Percentage": "عرض نسبة البطارية",
|
||||
"Hide Scrollbar": "إخفاء شريط التمرير",
|
||||
"Skip to last reading position": "انتقل إلى آخر موضع قراءة",
|
||||
"Show context": "إظهار السياق",
|
||||
"Hide context": "إخفاء السياق",
|
||||
"Decrease font size": "تصغير حجم الخط",
|
||||
"Increase font size": "تكبير حجم الخط",
|
||||
"Focus": "تركيز",
|
||||
"Theme color": "لون السمة",
|
||||
"Import failed": "فشل الاستيراد",
|
||||
"Available Formatters:": "المُنسّقات المتاحة:",
|
||||
"Format date": "تنسيق التاريخ",
|
||||
"Markdown block quote (> per line)": "اقتباس Markdown (> لكل سطر)",
|
||||
"Newlines to <br>": "أسطر جديدة إلى <br>",
|
||||
"Change case": "تغيير حالة الأحرف",
|
||||
"Trim whitespace": "إزالة المسافات",
|
||||
"Truncate to n characters": "اقتطاع إلى n حرف",
|
||||
"Replace text": "استبدال النص",
|
||||
"Fallback value": "القيمة الاحتياطية",
|
||||
"Get length": "الحصول على الطول",
|
||||
"First/last element": "العنصر الأول/الأخير",
|
||||
"Join array": "دمج المصفوفة",
|
||||
"Backup failed: {{error}}": "فشل النسخ الاحتياطي: {{error}}",
|
||||
"Select Backup": "اختر نسخة احتياطية",
|
||||
"Restore failed: {{error}}": "فشل الاستعادة: {{error}}",
|
||||
"Backup & Restore": "النسخ الاحتياطي والاستعادة",
|
||||
"Create a backup of your library or restore from a previous backup. Restoring will merge with your current library.": "أنشئ نسخة احتياطية من مكتبتك أو استعد من نسخة احتياطية سابقة. ستدمج الاستعادة مع مكتبتك الحالية.",
|
||||
"Backup Library": "نسخ المكتبة احتياطيًا",
|
||||
"Restore Library": "استعادة المكتبة",
|
||||
"Creating backup...": "جارٍ إنشاء النسخة الاحتياطية...",
|
||||
"Restoring library...": "جارٍ استعادة المكتبة...",
|
||||
"{{current}} of {{total}} items": "{{current}} من {{total}} عنصر",
|
||||
"Backup completed successfully!": "تم النسخ الاحتياطي بنجاح!",
|
||||
"Restore completed successfully!": "تمت الاستعادة بنجاح!",
|
||||
"Your library has been saved to the selected location.": "تم حفظ مكتبتك في الموقع المحدد.",
|
||||
"{{added}} books added, {{updated}} books updated.": "تمت إضافة {{added}} كتب، وتحديث {{updated}} كتب.",
|
||||
"Operation failed": "فشلت العملية",
|
||||
"Loading library...": "جارٍ تحميل المكتبة...",
|
||||
"{{count}} books refreshed_zero": "لم يتم تحديث أي كتاب",
|
||||
"{{count}} books refreshed_one": "تم تحديث كتاب واحد",
|
||||
"{{count}} books refreshed_two": "تم تحديث كتابين",
|
||||
"{{count}} books refreshed_few": "تم تحديث {{count}} كتب",
|
||||
"{{count}} books refreshed_many": "تم تحديث {{count}} كتابًا",
|
||||
"{{count}} books refreshed_other": "تم تحديث {{count}} كتاب",
|
||||
"Failed to refresh metadata": "فشل تحديث البيانات الوصفية",
|
||||
"Refresh Metadata": "تحديث البيانات الوصفية"
|
||||
}
|
||||
|
||||
@@ -24,9 +24,6 @@
|
||||
"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": "পাসওয়ার্ড আপডেট করুন",
|
||||
@@ -189,8 +186,8 @@
|
||||
"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}} পৃষ্ঠা বাকি",
|
||||
"{{count}} pages left in chapter_one": "<1>অধ্যায়ে ১ পৃষ্ঠা বাকি</1>",
|
||||
"{{count}} pages left in chapter_other": "<1>অধ্যায়ে </1><0>{{count}}</0><1> পৃষ্ঠা বাকি</1>",
|
||||
"Theme Mode": "থিম মোড",
|
||||
"Invert Image In Dark Mode": "ডার্ক মোডে ছবি উল্টান",
|
||||
"Override Book Color": "বইয়ের রঙ পরিবর্তন",
|
||||
@@ -293,7 +290,7 @@
|
||||
"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— উইলিয়াম শেক্সপিয়র",
|
||||
"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": "থিমের নাম",
|
||||
@@ -302,7 +299,6 @@
|
||||
"Link Color": "লিঙ্ক রঙ",
|
||||
"Preview": "প্রিভিউ",
|
||||
"Font & Layout": "ফন্ট ও লেআউট",
|
||||
"Book Cover": "বইয়ের মলাট",
|
||||
"More Info": "আরো তথ্য",
|
||||
"Parallel Read": "সমান্তরাল পড়া",
|
||||
"Disable": "নিষ্ক্রিয়",
|
||||
@@ -323,7 +319,6 @@
|
||||
"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}} মিনিট",
|
||||
@@ -489,8 +484,8 @@
|
||||
"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",
|
||||
"Source Han Serif CN": "Source Han Serif CN",
|
||||
"Huiwen-MinchoGBK": "Huiwen Mincho",
|
||||
"KingHwa_OldSong": "KingHwa_OldSong",
|
||||
"Google Books": "গুগল বুকস",
|
||||
"Open Library": "ওপেন লাইব্রেরি",
|
||||
@@ -603,11 +598,10 @@
|
||||
"Size": "আকার",
|
||||
"Cover": "ঢাকা",
|
||||
"Contain": "ধারণ",
|
||||
"{{number}} pages left in chapter": "অধ্যায়ে {{number}} পৃষ্ঠা বাকি",
|
||||
"{{number}} pages left in chapter": "<1>অধ্যায়ে </1><0>{{number}}</0><1> পৃষ্ঠা বাকি</1>",
|
||||
"Device": "যন্ত্র",
|
||||
"E-Ink Mode": "ই-ইঙ্ক মোড",
|
||||
"Highlight Colors": "হাইলাইট রঙ",
|
||||
"Auto Screen Brightness": "স্বয়ংক্রিয় স্ক্রিন উজ্জ্বলতা",
|
||||
"Pagination": "পৃষ্ঠা বিন্যাস",
|
||||
"Disable Double Tap": "ডাবল ট্যাপ অক্ষম করুন",
|
||||
"Tap to Paginate": "পৃষ্ঠায় যেতে ট্যাপ করুন",
|
||||
@@ -656,5 +650,457 @@
|
||||
"Update email": "ইমেল আপডেট করুন",
|
||||
"Current email": "বর্তমান ইমেল",
|
||||
"Update Email": "ইমেল আপডেট করুন",
|
||||
"All": "সব"
|
||||
"All": "সব",
|
||||
"Unable to open book": "বই খুলতে অক্ষম",
|
||||
"Punctuation": "বিরামচিহ্ন",
|
||||
"Replace Quotation Marks": "উদ্ধৃতি চিহ্ন প্রতিস্থাপন করুন",
|
||||
"Enabled only in vertical layout.": "শুধুমাত্র উল্লম্ব বিন্যাসে সক্রিয়।",
|
||||
"No Conversion": "রূপান্তর নয়",
|
||||
"Simplified to Traditional": "সরল → প্রথাগত",
|
||||
"Traditional to Simplified": "প্রথাগত → সরল",
|
||||
"Simplified to Traditional (Taiwan)": "সরল → প্রথাগত (তাইওয়ান)",
|
||||
"Simplified to Traditional (Hong Kong)": "সরল → প্রথাগত (হংকং)",
|
||||
"Simplified to Traditional (Taiwan), with phrases": "সরল → প্রথাগত (তাইওয়ান • বাক্য)",
|
||||
"Traditional (Taiwan) to Simplified": "প্রথাগত (তাইওয়ান) → সরল",
|
||||
"Traditional (Hong Kong) to Simplified": "প্রথাগত (হংকং) → সরল",
|
||||
"Traditional (Taiwan) to Simplified, with phrases": "প্রথাগত (তাইওয়ান • বাক্য) → সরল",
|
||||
"Convert Simplified and Traditional Chinese": "সরল/প্রথাগত রূপান্তর",
|
||||
"Convert Mode": "রূপান্তর মোড",
|
||||
"Failed to auto-save book cover for lock screen: {{error}}": "লক স্ক্রিনের জন্য বইয়ের মলাট স্বয়ংক্রিয়ভাবে সংরক্ষণ করতে ব্যর্থ: {{error}}",
|
||||
"Download from Cloud": "ক্লাউড থেকে ডাউনলোড করুন",
|
||||
"Upload to Cloud": "ক্লাউডে আপলোড করুন",
|
||||
"Clear Custom Fonts": "কাস্টম ফন্টস মুছুন",
|
||||
"Columns": "কলামস",
|
||||
"OPDS Catalogs": "OPDS ক্যাটালগস",
|
||||
"Adding LAN addresses is not supported in the web app version.": "ওয়েব অ্যাপ সংস্করণে LAN ঠিকানা যোগ করা সমর্থিত নয়।",
|
||||
"Invalid OPDS catalog. Please check the URL.": "অবৈধ OPDS ক্যাটালগ। দয়া করে URL চেক করুন।",
|
||||
"Browse and download books from online catalogs": "অনলাইন ক্যাটালগ থেকে বই ব্রাউজ এবং ডাউনলোড করুন",
|
||||
"My Catalogs": "আমার ক্যাটালগস",
|
||||
"Add Catalog": "ক্যাটালগ যোগ করুন",
|
||||
"No catalogs yet": "এখনও কোন ক্যাটালগ নেই",
|
||||
"Add your first OPDS catalog to start browsing books": "আপনার প্রথম OPDS ক্যাটালগ যোগ করুন বই ব্রাউজ শুরু করতে",
|
||||
"Add Your First Catalog": "আপনার প্রথম ক্যাটালগ যোগ করুন",
|
||||
"Browse": "ব্রাউজ করুন",
|
||||
"Popular Catalogs": "জনপ্রিয় ক্যাটালগস",
|
||||
"Add": "যোগ করুন",
|
||||
"Add OPDS Catalog": "OPDS ক্যাটালগ যোগ করুন",
|
||||
"Catalog Name": "ক্যাটালগের নাম",
|
||||
"My Calibre Library": "আমার ক্যালিব্র লাইব্রেরি",
|
||||
"OPDS URL": "OPDS URL",
|
||||
"Username (optional)": "ব্যবহারকারীর নাম (ঐচ্ছিক)",
|
||||
"Password (optional)": "পাসওয়ার্ড (ঐচ্ছিক)",
|
||||
"Description (optional)": "বর্ণনা (ঐচ্ছিক)",
|
||||
"A brief description of this catalog": "এই ক্যাটালগের সংক্ষিপ্ত বিবরণ",
|
||||
"Validating...": "যাচাই করা হচ্ছে...",
|
||||
"View All": "সব দেখুন",
|
||||
"Forward": "ফরোয়ার্ড",
|
||||
"Home": "হোম",
|
||||
"{{count}} items_one": "{{count}} আইটেম",
|
||||
"{{count}} items_other": "{{count}} আইটেম",
|
||||
"Download completed": "ডাউনলোড সম্পন্ন হয়েছে",
|
||||
"Download failed": "ডাউনলোড ব্যর্থ হয়েছে",
|
||||
"Open Access": "ওপেন অ্যাক্সেস",
|
||||
"Borrow": "ঋণ নিন",
|
||||
"Buy": "কিনুন",
|
||||
"Subscribe": "সাবস্ক্রাইব করুন",
|
||||
"Sample": "নমুনা",
|
||||
"Download": "ডাউনলোড",
|
||||
"Open & Read": "খুলুন ও পড়ুন",
|
||||
"Tags": "ট্যাগসমূহ",
|
||||
"Tag": "ট্যাগ",
|
||||
"First": "প্রথম",
|
||||
"Previous": "পূর্ববর্তী",
|
||||
"Next": "পরবর্তী",
|
||||
"Last": "শেষ",
|
||||
"Cannot Load Page": "পৃষ্ঠা লোড করা যায়নি",
|
||||
"An error occurred": "একটি ত্রুটি ঘটেছে",
|
||||
"Online Library": "অনলাইন লাইব্রেরি",
|
||||
"URL must start with http:// or https://": "URL অবশ্যই http:// বা https:// দিয়ে শুরু হতে হবে",
|
||||
"Title, Author, Tag, etc...": "শিরোনাম, লেখক, ট্যাগ, ইত্যাদি...",
|
||||
"Query": "কোয়েরি",
|
||||
"Subject": "বিষয়",
|
||||
"Enter {{terms}}": "{{terms}} লিখুন",
|
||||
"No search results found": "কোনও অনুসন্ধান ফলাফল পাওয়া যায়নি",
|
||||
"Failed to load OPDS feed: {{status}} {{statusText}}": "OPDS ফিড লোড করতে ব্যর্থ: {{status}} {{statusText}}",
|
||||
"Search in {{title}}": "{{title}} এ অনুসন্ধান করুন",
|
||||
"Manage Storage": "স্টোরেজ ম্যানেজমেন্ট",
|
||||
"Failed to load files": "ফাইল লোড করতে ব্যর্থ",
|
||||
"Deleted {{count}} file(s)_one": "{{count}}টি ফাইল মুছে ফেলা হয়েছে",
|
||||
"Deleted {{count}} file(s)_other": "{{count}}টি ফাইল মুছে ফেলা হয়েছে",
|
||||
"Failed to delete {{count}} file(s)_one": "{{count}}টি ফাইল মুছতে ব্যর্থ",
|
||||
"Failed to delete {{count}} file(s)_other": "{{count}}টি ফাইল মুছতে ব্যর্থ",
|
||||
"Failed to delete files": "ফাইল মুছতে ব্যর্থ",
|
||||
"Total Files": "মোট ফাইল",
|
||||
"Total Size": "মোট আকার",
|
||||
"Quota": "কোটা",
|
||||
"Used": "ব্যবহৃত",
|
||||
"Files": "ফাইল",
|
||||
"Search files...": "ফাইল খুঁজুন...",
|
||||
"Newest First": "নতুন আগে",
|
||||
"Oldest First": "পুরনো আগে",
|
||||
"Largest First": "বড় আগে",
|
||||
"Smallest First": "ছোট আগে",
|
||||
"Name A-Z": "নাম A-Z",
|
||||
"Name Z-A": "নাম Z-A",
|
||||
"{{count}} selected_one": "{{count}}টি নির্বাচিত",
|
||||
"{{count}} selected_other": "{{count}}টি নির্বাচিত",
|
||||
"Delete Selected": "নির্বাচিত মুছুন",
|
||||
"Created": "তৈরি হয়েছে",
|
||||
"No files found": "কোনো ফাইল পাওয়া যায়নি",
|
||||
"No files uploaded yet": "এখনও কোনো ফাইল আপলোড করা হয়নি",
|
||||
"files": "ফাইল",
|
||||
"Page {{current}} of {{total}}": "{{total}}টির মধ্যে {{current}} পৃষ্ঠা",
|
||||
"Are you sure to delete {{count}} selected file(s)?_one": "আপনি কি নিশ্চিত যে {{count}}টি নির্বাচিত ফাইল মুছতে চান?",
|
||||
"Are you sure to delete {{count}} selected file(s)?_other": "আপনি কি নিশ্চিত যে {{count}}টি নির্বাচিত ফাইল মুছতে চান?",
|
||||
"Cloud Storage Usage": "ক্লাউড স্টোরেজ ব্যবহৃত",
|
||||
"Rename Group": "গ্রুপের নাম পরিবর্তন করুন",
|
||||
"From Directory": "ডিরেক্টরি থেকে",
|
||||
"Successfully imported {{count}} book(s)_one": "সফলভাবে ১টি বই আমদানি করা হয়েছে",
|
||||
"Successfully imported {{count}} book(s)_other": "সফলভাবে {{count}}টি বই আমদানি করা হয়েছে",
|
||||
"Count": "গণনা",
|
||||
"Start Page": "শুরু পৃষ্ঠা",
|
||||
"Search in OPDS Catalog...": "OPDS ক্যাটালগে অনুসন্ধান করুন...",
|
||||
"Please log in to use advanced TTS features": "উন্নত TTS বৈশিষ্ট্যগুলি ব্যবহার করতে লগইন করুন।",
|
||||
"Word limit of 30 words exceeded.": "৩০ শব্দের শব্দসীমা অতিক্রম হয়েছে।",
|
||||
"Proofread": "প্রুফরিড",
|
||||
"Current selection": "বর্তমান নির্বাচন",
|
||||
"All occurrences in this book": "এই বইয়ে সমস্ত ঘটনা",
|
||||
"All occurrences in your library": "আপনার লাইব্রেরির সমস্ত ঘটনা",
|
||||
"Selected text:": "নির্বাচিত টেক্সট:",
|
||||
"Replace with:": "এর সাথে প্রতিস্থাপন করুন:",
|
||||
"Enter text...": "টেক্সট লিখুন...",
|
||||
"Case sensitive:": "কেস সংবেদনশীল:",
|
||||
"Scope:": "পরিসর:",
|
||||
"Selection": "নির্বাচন",
|
||||
"Library": "লাইব্রেরি",
|
||||
"Yes": "হ্যাঁ",
|
||||
"No": "না",
|
||||
"Proofread Replacement Rules": "প্রুফরিড বিকল্প নিয়ম",
|
||||
"Selected Text Rules": "নির্বাচিত টেক্সট নিয়ম",
|
||||
"No selected text replacement rules": "কোনও নির্বাচিত টেক্সট বিকল্প নিয়ম নেই",
|
||||
"Book Specific Rules": "বই নির্দিষ্ট নিয়ম",
|
||||
"No book-level replacement rules": "কোনও বই-স্তরের বিকল্প নিয়ম নেই",
|
||||
"Disable Quick Action": "দ্রুত ক্রিয়া নিষ্ক্রিয় করুন",
|
||||
"Enable Quick Action on Selection": "নির্বাচনের উপর দ্রুত ক্রিয়া সক্ষম করুন",
|
||||
"None": "কোনোটিই নয়",
|
||||
"Annotation Tools": "অ্যনোটেশন সরঞ্জামসমূহ",
|
||||
"Enable Quick Actions": "দ্রুত ক্রিয়া সক্ষম করুন",
|
||||
"Quick Action": "দ্রুত ক্রিয়া",
|
||||
"Copy to Notebook": "নোটবুকে কপি করুন",
|
||||
"Copy text after selection": "নির্বাচনের পরে টেক্সট কপি করুন",
|
||||
"Highlight text after selection": "নির্বাচনের পরে টেক্সট হাইলাইট করুন",
|
||||
"Annotate text after selection": "নির্বাচনের পরে টেক্সট মন্তব্য করুন",
|
||||
"Search text after selection": "নির্বাচনের পরে টেক্সট অনুসন্ধান করুন",
|
||||
"Look up text in dictionary after selection": "নির্বাচনের পরে টেক্সট অভিধানে দেখুন",
|
||||
"Look up text in Wikipedia after selection": "নির্বাচনের পরে টেক্সট উইকিপিডিয়ায় দেখুন",
|
||||
"Translate text after selection": "নির্বাচনের পরে টেক্সট অনুবাদ করুন",
|
||||
"Read text aloud after selection": "নির্বাচনের পরে টেক্সট উচ্চারণ করুন",
|
||||
"Proofread text after selection": "নির্বাচনের পরে টেক্সট প্রুফরিড করুন",
|
||||
"{{activeCount}} active, {{pendingCount}} pending": "{{activeCount}} সক্রিয়, {{pendingCount}} অপেক্ষমাণ",
|
||||
"{{failedCount}} failed": "{{failedCount}} ব্যর্থ",
|
||||
"Waiting...": "অপেক্ষা করছে...",
|
||||
"Failed": "ব্যর্থ",
|
||||
"Completed": "সম্পন্ন",
|
||||
"Cancelled": "বাতিল",
|
||||
"Retry": "পুনরায় চেষ্টা করুন",
|
||||
"Active": "সক্রিয়",
|
||||
"Transfer Queue": "স্থানান্তর সারি",
|
||||
"Upload All": "সব আপলোড করুন",
|
||||
"Download All": "সব ডাউনলোড করুন",
|
||||
"Resume Transfers": "স্থানান্তর পুনরায় শুরু করুন",
|
||||
"Pause Transfers": "স্থানান্তর বিরতি দিন",
|
||||
"Pending": "অপেক্ষমাণ",
|
||||
"No transfers": "কোনো স্থানান্তর নেই",
|
||||
"Retry All": "সব পুনরায় চেষ্টা করুন",
|
||||
"Clear Completed": "সম্পন্ন মুছুন",
|
||||
"Clear Failed": "ব্যর্থ মুছুন",
|
||||
"Upload queued: {{title}}": "আপলোড সারিতে: {{title}}",
|
||||
"Download queued: {{title}}": "ডাউনলোড সারিতে: {{title}}",
|
||||
"Book not found in library": "লাইব্রেরিতে বই পাওয়া যায়নি",
|
||||
"Unknown error": "অজানা ত্রুটি",
|
||||
"Please log in to continue": "চালিয়ে যেতে লগইন করুন",
|
||||
"Cloud File Transfers": "ক্লাউড ফাইল স্থানান্তরসমূহ",
|
||||
"Show Search Results": "অনুসন্ধান ফলাফল দেখান",
|
||||
"Search results for '{{term}}'": "'{{term}}' এর ফলাফল",
|
||||
"Close Search": "অনুসন্ধান বন্ধ করুন",
|
||||
"Previous Result": "আগের ফলাফল",
|
||||
"Next Result": "পরবর্তী ফলাফল",
|
||||
"Bookmarks": "বুকমার্ক",
|
||||
"Annotations": "টীকা",
|
||||
"Show Results": "ফলাফল দেখুন",
|
||||
"Clear search": "অনুসন্ধান সাফ করুন",
|
||||
"Clear search history": "অনুসন্ধান ইতিহাস সাফ করুন",
|
||||
"Tap to Toggle Footer": "ফুটার টগল করতে আলতো চাপুন",
|
||||
"Show Current Time": "বর্তমান সময় দেখান",
|
||||
"Use 24 Hour Clock": "২৪ ঘণ্টার ঘড়ি ব্যবহার করুন",
|
||||
"Show Current Battery Status": "বর্তমান ব্যাটারি অবস্থা দেখান",
|
||||
"Exported successfully": "সফলভাবে রপ্তানি হয়েছে",
|
||||
"Book exported successfully.": "বইটি সফলভাবে রপ্তানি হয়েছে।",
|
||||
"Failed to export the book.": "বই রপ্তানি করতে ব্যর্থ।",
|
||||
"Export Book": "বই রপ্তানি করুন",
|
||||
"Whole word:": "সম্পূর্ণ শব্দ:",
|
||||
"Error": "ত্রুটি",
|
||||
"Unable to load the article. Try searching directly on {{link}}.": "নিবন্ধ লোড করতে অক্ষম। সরাসরি {{link}} এ অনুসন্ধান করার চেষ্টা করুন।",
|
||||
"Unable to load the word. Try searching directly on {{link}}.": "শব্দ লোড করতে অক্ষম। সরাসরি {{link}} এ অনুসন্ধান করার চেষ্টা করুন।",
|
||||
"Date Published": "প্রকাশনার তারিখ",
|
||||
"Only for TTS:": "শুধুমাত্র TTS-এর জন্য:",
|
||||
"Uploaded": "আপলোড হয়েছে",
|
||||
"Downloaded": "ডাউনলোড হয়েছে",
|
||||
"Deleted": "মুছে ফেলা হয়েছে",
|
||||
"Note:": "নোট:",
|
||||
"Time:": "সময়:",
|
||||
"Format Options": "বিন্যাস বিকল্প",
|
||||
"Export Date": "রপ্তানি তারিখ",
|
||||
"Chapter Titles": "অধ্যায়ের শিরোনাম",
|
||||
"Chapter Separator": "অধ্যায় বিভাজক",
|
||||
"Highlights": "হাইলাইট",
|
||||
"Note Date": "নোট তারিখ",
|
||||
"Advanced": "উন্নত",
|
||||
"Hide": "লুকান",
|
||||
"Show": "দেখান",
|
||||
"Use Custom Template": "কাস্টম টেমপ্লেট ব্যবহার করুন",
|
||||
"Export Template": "রপ্তানি টেমপ্লেট",
|
||||
"Template Syntax:": "টেমপ্লেট সিনট্যাক্স:",
|
||||
"Insert value": "মান সন্নিবেশ করুন",
|
||||
"Format date (locale)": "তারিখ বিন্যাস (স্থানীয়)",
|
||||
"Format date (custom)": "তারিখ বিন্যাস (কাস্টম)",
|
||||
"Conditional": "শর্তসাপেক্ষ",
|
||||
"Loop": "লুপ",
|
||||
"Available Variables:": "উপলব্ধ ভেরিয়েবল:",
|
||||
"Book title": "বইয়ের শিরোনাম",
|
||||
"Book author": "বইয়ের লেখক",
|
||||
"Export date": "রপ্তানি তারিখ",
|
||||
"Array of chapters": "অধ্যায়ের তালিকা",
|
||||
"Chapter title": "অধ্যায়ের শিরোনাম",
|
||||
"Array of annotations": "টীকাগুলির তালিকা",
|
||||
"Highlighted text": "হাইলাইট করা পাঠ্য",
|
||||
"Annotation note": "টীকা নোট",
|
||||
"Date Format Tokens:": "তারিখ বিন্যাস টোকেন:",
|
||||
"Year (4 digits)": "বছর (4 সংখ্যা)",
|
||||
"Month (01-12)": "মাস (01-12)",
|
||||
"Day (01-31)": "দিন (01-31)",
|
||||
"Hour (00-23)": "ঘণ্টা (00-23)",
|
||||
"Minute (00-59)": "মিনিট (00-59)",
|
||||
"Second (00-59)": "সেকেন্ড (00-59)",
|
||||
"Show Source": "উৎস দেখান",
|
||||
"No content to preview": "প্রিভিউ করার জন্য কোনো কন্টেন্ট নেই",
|
||||
"Export": "রপ্তানি",
|
||||
"Set Timeout": "টাইমআউট সেট করুন",
|
||||
"Select Voice": "ভয়েস নির্বাচন করুন",
|
||||
"Toggle Sticky Bottom TTS Bar": "স্থির TTS বার টগল করুন",
|
||||
"Display what I'm reading on Discord": "Discord-এ পড়ছি যা দেখান",
|
||||
"Show on Discord": "Discord-এ দেখান",
|
||||
"Instant {{action}}": "তাৎক্ষণিক {{action}}",
|
||||
"Instant {{action}} Disabled": "তাৎক্ষণিক {{action}} নিষ্ক্রিয়",
|
||||
"Annotation": "টীকা",
|
||||
"Reset Template": "টেমপ্লেট রিসেট করুন",
|
||||
"Annotation style": "টীকা শৈলী",
|
||||
"Annotation color": "টীকা রঙ",
|
||||
"Annotation time": "টীকা সময়",
|
||||
"AI": "কৃত্রিম বুদ্ধিমত্তা (AI)",
|
||||
"Are you sure you want to re-index this book?": "আপনি কি নিশ্চিত যে আপনি এই বইটি পুনরায় ইনডেক্স করতে চান?",
|
||||
"Enable AI in Settings": "সেটিংস থেকে AI সক্রিয় করুন",
|
||||
"Index This Book": "এই বইটি ইনডেক্স করুন",
|
||||
"Enable AI search and chat for this book": "এই বইটির জন্য AI অনুসন্ধান এবং চ্যাট সক্রিয় করুন",
|
||||
"Start Indexing": "ইনডেক্সিং শুরু করুন",
|
||||
"Indexing book...": "বই ইনডেক্স করা হচ্ছে...",
|
||||
"Preparing...": "প্রস্তুত করা হচ্ছে...",
|
||||
"Delete this conversation?": "এই কথোপকথনটি মুছবেন?",
|
||||
"No conversations yet": "এখনও কোনও কথোপকথন নেই",
|
||||
"Start a new chat to ask questions about this book": "এই বইটি সম্পর্কে প্রশ্ন জিজ্ঞাসা করতে একটি নতুন চ্যাট শুরু করুন",
|
||||
"Rename": "নাম পরিবর্তন",
|
||||
"New Chat": "নতুন চ্যাট",
|
||||
"Chat": "চ্যাট",
|
||||
"Please enter a model ID": "দয়া করে একটি মডেল আইডি লিখুন",
|
||||
"Model not available or invalid": "মডেল উপলব্ধ নয় বা অবৈধ",
|
||||
"Failed to validate model": "মডেল যাচাই করতে ব্যর্থ হয়েছে",
|
||||
"Couldn't connect to Ollama. Is it running?": "Ollama এর সাথে সংযোগ করা যায়নি। এটি কি চলছে?",
|
||||
"Invalid API key or connection failed": "অবৈধ API কী বা সংযোগ ব্যর্থ হয়েছে",
|
||||
"Connection failed": "সংযোগ ব্যর্থ হয়েছে",
|
||||
"AI Assistant": "AI সহকারী",
|
||||
"Enable AI Assistant": "AI সহকারী সক্রিয় করুন",
|
||||
"Provider": "প্রদানকারী",
|
||||
"Ollama (Local)": "Ollama (স্থানীয়)",
|
||||
"AI Gateway (Cloud)": "AI গেটওয়ে (ক্লাউড)",
|
||||
"Ollama Configuration": "Ollama কনফিগারেশন",
|
||||
"Refresh Models": "মডেল রিফ্রেশ করুন",
|
||||
"AI Model": "AI মডেল",
|
||||
"No models detected": "কোনও মডেল শনাক্ত করা যায়নি",
|
||||
"AI Gateway Configuration": "AI গেটওয়ে কনফিগারেশন",
|
||||
"Choose from a selection of high-quality, economical AI models. You can also bring your own model by selecting \"Custom Model\" below.": "উচ্চ-মানের, সাশ্রয়ী AI মডেলগুলি থেকে নির্বাচন করুন। আপনি নিচে \"কাস্টম মডেল\" নির্বাচন করে আপনার নিজস্ব মডেলও আনতে পারেন।",
|
||||
"API Key": "API কী",
|
||||
"Get Key": "কী পান",
|
||||
"Model": "মডেল",
|
||||
"Custom Model...": "কাস্টম মডেল...",
|
||||
"Custom Model ID": "কাস্টম মডেল আইডি",
|
||||
"Validate": "যাচাই করুন",
|
||||
"Model available": "মডেল উপলব্ধ",
|
||||
"Connection": "সংযোগ",
|
||||
"Test Connection": "সংযোগ পরীক্ষা করুন",
|
||||
"Connected": "সংযুক্ত",
|
||||
"Custom Colors": "কাস্টম রঙ",
|
||||
"Color E-Ink Mode": "কালার ই-ইঙ্ক মোড",
|
||||
"Reading Ruler": "রিডিং রুলার",
|
||||
"Enable Reading Ruler": "রিডিং রুলার সক্ষম করুন",
|
||||
"Lines to Highlight": "হাইলাইট করার জন্য লাইন",
|
||||
"Ruler Color": "রুলারের রঙ",
|
||||
"Command Palette": "কমান্ড প্যালেট",
|
||||
"Search settings and actions...": "সেটিংস এবং অ্যাকশন খুঁজুন...",
|
||||
"No results found for": "এর জন্য কোনো ফলাফল পাওয়া যায়নি",
|
||||
"Type to search settings and actions": "সেটিংস এবং অ্যাকশন খুঁজতে টাইপ করুন",
|
||||
"Recent": "সাম্প্রতিক",
|
||||
"navigate": "নেভিগেট",
|
||||
"select": "নির্বাচন করুন",
|
||||
"close": "বন্ধ করুন",
|
||||
"Search Settings": "সেটিংস খুঁজুন",
|
||||
"Page Margins": "পৃষ্ঠার মার্জিন",
|
||||
"AI Provider": "AI প্রদানকারী",
|
||||
"Ollama URL": "Ollama URL",
|
||||
"Ollama Model": "Ollama মডেল",
|
||||
"AI Gateway Model": "AI গেটওয়ে মডেল",
|
||||
"Actions": "অ্যাকশন",
|
||||
"Navigation": "নেভিগেশন",
|
||||
"Set status for {{count}} book(s)_one": "{{count}} টি বইয়ের স্ট্যাটাস সেট করুন",
|
||||
"Set status for {{count}} book(s)_other": "{{count}} টি বইয়ের স্ট্যাটাস সেট করুন",
|
||||
"Mark as Unread": "পড়া হয়নি হিসেবে চিহ্নিত করুন",
|
||||
"Mark as Finished": "পড়া শেষ হিসেবে চিহ্নিত করুন",
|
||||
"Finished": "শেষ হয়েছে",
|
||||
"Unread": "অপঠিত",
|
||||
"Clear Status": "স্থিতি মুছুন",
|
||||
"Status": "অবস্থা",
|
||||
"Loading": "লোড হচ্ছে...",
|
||||
"Exit Paragraph Mode": "অনুচ্ছেদ মোড থেকে প্রস্থান করুন",
|
||||
"Paragraph Mode": "অনুচ্ছেদ মোড",
|
||||
"Embedding Model": "এম্বেডিং মডেল",
|
||||
"{{count}} book(s) synced_one": "{{count}}টি বই সিঙ্ক করা হয়েছে",
|
||||
"{{count}} book(s) synced_other": "{{count}}টি বই সিঙ্ক করা হয়েছে",
|
||||
"Unable to start RSVP": "RSVP शुरू করতে অসমর্থ",
|
||||
"RSVP not supported for PDF": "PDF-এর জন্য RSVP সমর্থিত নয়",
|
||||
"Select Chapter": "অধ্যায় নির্বাচন করুন",
|
||||
"Context": "প্রসঙ্গ",
|
||||
"Ready": "প্রস্তুত",
|
||||
"Chapter Progress": "অধ্যায় অগ্রগতি",
|
||||
"words": "শব্দ",
|
||||
"{{time}} left": "{{time}} বাকি",
|
||||
"Reading progress": "পড়ার অগ্রগতি",
|
||||
"Click to seek": "খুঁজতে ক্লিক করুন",
|
||||
"Skip back 15 words": "১৫ শব্দ পিছিয়ে যান",
|
||||
"Back 15 words (Shift+Left)": "১৫ শব্দ পিছিয়ে যান (Shift+Left)",
|
||||
"Pause (Space)": "বিরতি (Space)",
|
||||
"Play (Space)": "চালান (Space)",
|
||||
"Skip forward 15 words": "১৫ শব্দ এগিয়ে যান",
|
||||
"Forward 15 words (Shift+Right)": "১৫ শব্দ এগিয়ে যান (Shift+Right)",
|
||||
"Decrease speed": "গতি কমান",
|
||||
"Slower (Left/Down)": "ধীর (Left/Down)",
|
||||
"Increase speed": "গতি বাড়ান",
|
||||
"Faster (Right/Up)": "দ্রুত (Right/Up)",
|
||||
"Start RSVP Reading": "RSVP পড়া শুরু করুন",
|
||||
"Choose where to start reading": "কোথা থেকে পড়া শুরু করবেন তা চয়ন করুন",
|
||||
"From Chapter Start": "অধ্যায় শুরু থেকে",
|
||||
"Start reading from the beginning of the chapter": "অধ্যায়ের শুরু থেকে পড়া শুরু করুন",
|
||||
"Resume": "পুনরায় শুরু করুন",
|
||||
"Continue from where you left off": "যেখানে আপনি ছেড়েছিলেন সেখান থেকে চালিয়ে যান",
|
||||
"From Current Page": "বর্তমান পৃষ্ঠা থেকে",
|
||||
"Start from where you are currently reading": "আপনি বর্তমানে যেখানে পড়ছেন সেখান থেকে শুরু করুন",
|
||||
"From Selection": "নির্বাচন থেকে",
|
||||
"Speed Reading Mode": "দ্রুত পাঠ্য মোড",
|
||||
"Scroll left": "বামে স্ক্রোল করুন",
|
||||
"Scroll right": "ডানে স্ক্রোল করুন",
|
||||
"Library Sync Progress": "লাইব্রেরি সিঙ্ক অগ্রগতি",
|
||||
"Back to library": "লাইব্রেরিতে ফিরে যান",
|
||||
"Group by...": "গ্রুপ অনুযায়ী...",
|
||||
"Export as Plain Text": "সাধারণ টেক্সট হিসেবে এক্সপোর্ট করুন",
|
||||
"Export as Markdown": "Markdown হিসেবে এক্সপোর্ট করুন",
|
||||
"Show Page Navigation Buttons": "নেভিগেশন বোতাম",
|
||||
"Page {{number}}": "পৃষ্ঠা {{number}}",
|
||||
"highlight": "হাইলাইট",
|
||||
"underline": "আন্ডারলাইন",
|
||||
"squiggly": "এঁকেবেঁকে চলা",
|
||||
"red": "লাল",
|
||||
"violet": "বেগুনী",
|
||||
"blue": "নীল",
|
||||
"green": "সবুজ",
|
||||
"yellow": "হলুদ",
|
||||
"Select {{style}} style": "{{style}} স্টাইল নির্বাচন করুন",
|
||||
"Select {{color}} color": "{{color}} রঙ নির্বাচন করুন",
|
||||
"Close Book": "বই বন্ধ করুন",
|
||||
"Speed Reading": "দ্রুত পঠন",
|
||||
"Close Speed Reading": "দ্রুত পঠন বন্ধ করুন",
|
||||
"Authors": "লেখকগণ",
|
||||
"Books": "বই",
|
||||
"Groups": "দল",
|
||||
"Back to TTS Location": "টিটিএস অবস্থানে ফিরে যান",
|
||||
"Metadata": "মেটাডেটা",
|
||||
"Image viewer": "চিত্র প্রদর্শক",
|
||||
"Previous Image": "পূর্ববর্তী চিত্র",
|
||||
"Next Image": "পরবর্তী চিত্র",
|
||||
"Zoomed": "জুম করা হয়েছে",
|
||||
"Zoom level": "জুম স্তর",
|
||||
"Table viewer": "টেবিল প্রদর্শক",
|
||||
"Unable to connect to Readwise. Please check your network connection.": "Readwise এর সাথে সংযোগ করতে অক্ষম। আপনার নেটওয়ার্ক সংযোগটি পরীক্ষা করুন।",
|
||||
"Invalid Readwise access token": "অকার্যকর Readwise অ্যাক্সেস টোকেন",
|
||||
"Disconnected from Readwise": "Readwise থেকে সংযোগ বিচ্ছিন্ন হয়েছে",
|
||||
"Never": "কখনো না",
|
||||
"Readwise Settings": "Readwise সেটিংস",
|
||||
"Connected to Readwise": "Readwise এর সাথে সংযুক্ত",
|
||||
"Last synced: {{time}}": "শেষ সিঙ্ক করা হয়েছে: {{time}}",
|
||||
"Sync Enabled": "সিঙ্কিং সক্ষম",
|
||||
"Disconnect": "সংযোগ বিচ্ছিন্ন করুন",
|
||||
"Connect your Readwise account to sync highlights.": "হাইলাইটগুলি সিঙ্ক করার জন্য আপনার Readwise অ্যাকাউন্টটি সংযোগ করুন।",
|
||||
"Get your access token at": "আপনার অ্যাক্সেস টোকেনটি এখানে পাবেন",
|
||||
"Access Token": "অ্যাক্সেস টোকেন",
|
||||
"Paste your Readwise access token": "আপনার Readwise অ্যাক্সেস টোকেনটি পেস্ট করুন",
|
||||
"Config": "কনফিগ",
|
||||
"Readwise Sync": "Readwise সিঙ্ক",
|
||||
"Push Highlights": "হাইলাইট পাঠান",
|
||||
"Highlights synced to Readwise": "হাইলাইটগুলি Readwise এ সিঙ্ক করা হয়েছে",
|
||||
"Readwise sync failed: no internet connection": "Readwise সিঙ্ক ব্যর্থ হয়েছে: ইন্টারনেট সংযোগ নেই",
|
||||
"Readwise sync failed: {{error}}": "Readwise সিঙ্ক ব্যর্থ হয়েছে: {{error}}",
|
||||
"System Screen Brightness": "সিস্টেম স্ক্রিন উজ্জ্বলতা",
|
||||
"Page:": "পৃষ্ঠা:",
|
||||
"Page: {{number}}": "পৃষ্ঠা: {{number}}",
|
||||
"Annotation page number": "টীকা পৃষ্ঠা নম্বর",
|
||||
"Translating...": "অনুবাদ করা হচ্ছে...",
|
||||
"Show Battery Percentage": "ব্যাটারি শতাংশ দেখান",
|
||||
"Hide Scrollbar": "স্ক্রলবার লুকান",
|
||||
"Skip to last reading position": "শেষ পড়ার অবস্থানে যান",
|
||||
"Show context": "প্রসঙ্গ দেখান",
|
||||
"Hide context": "প্রসঙ্গ লুকান",
|
||||
"Decrease font size": "ফন্টের আকার কমান",
|
||||
"Increase font size": "ফন্টের আকার বাড়ান",
|
||||
"Focus": "ফোকাস",
|
||||
"Theme color": "থিম রঙ",
|
||||
"Import failed": "আমদানি ব্যর্থ",
|
||||
"Available Formatters:": "উপলব্ধ ফরম্যাটার:",
|
||||
"Format date": "তারিখ ফরম্যাট",
|
||||
"Markdown block quote (> per line)": "Markdown ব্লক কোট (প্রতি লাইনে >)",
|
||||
"Newlines to <br>": "নতুন লাইন থেকে <br>",
|
||||
"Change case": "অক্ষরের কেস পরিবর্তন",
|
||||
"Trim whitespace": "শূন্যস্থান ছাঁটা",
|
||||
"Truncate to n characters": "n অক্ষরে সংক্ষিপ্ত করুন",
|
||||
"Replace text": "টেক্সট প্রতিস্থাপন",
|
||||
"Fallback value": "ফলব্যাক মান",
|
||||
"Get length": "দৈর্ঘ্য নিন",
|
||||
"First/last element": "প্রথম/শেষ উপাদান",
|
||||
"Join array": "অ্যারে যুক্ত করুন",
|
||||
"Backup failed: {{error}}": "ব্যাকআপ ব্যর্থ: {{error}}",
|
||||
"Select Backup": "ব্যাকআপ নির্বাচন করুন",
|
||||
"Restore failed: {{error}}": "পুনরুদ্ধার ব্যর্থ: {{error}}",
|
||||
"Backup & Restore": "ব্যাকআপ ও পুনরুদ্ধার",
|
||||
"Create a backup of your library or restore from a previous backup. Restoring will merge with your current library.": "আপনার লাইব্রেরির ব্যাকআপ তৈরি করুন বা পূর্ববর্তী ব্যাকআপ থেকে পুনরুদ্ধার করুন। পুনরুদ্ধার আপনার বর্তমান লাইব্রেরির সাথে মার্জ হবে।",
|
||||
"Backup Library": "লাইব্রেরি ব্যাকআপ",
|
||||
"Restore Library": "লাইব্রেরি পুনরুদ্ধার",
|
||||
"Creating backup...": "ব্যাকআপ তৈরি হচ্ছে...",
|
||||
"Restoring library...": "লাইব্রেরি পুনরুদ্ধার হচ্ছে...",
|
||||
"{{current}} of {{total}} items": "{{current}} / {{total}} আইটেম",
|
||||
"Backup completed successfully!": "ব্যাকআপ সফলভাবে সম্পন্ন!",
|
||||
"Restore completed successfully!": "পুনরুদ্ধার সফলভাবে সম্পন্ন!",
|
||||
"Your library has been saved to the selected location.": "আপনার লাইব্রেরি নির্বাচিত স্থানে সংরক্ষিত হয়েছে।",
|
||||
"{{added}} books added, {{updated}} books updated.": "{{added}}টি বই যোগ হয়েছে, {{updated}}টি বই আপডেট হয়েছে।",
|
||||
"Operation failed": "অপারেশন ব্যর্থ",
|
||||
"Loading library...": "লাইব্রেরি লোড হচ্ছে...",
|
||||
"{{count}} books refreshed_one": "{{count}}টি বইয়ের মেটাডেটা রিফ্রেশ হয়েছে",
|
||||
"{{count}} books refreshed_other": "{{count}}টি বইয়ের মেটাডেটা রিফ্রেশ হয়েছে",
|
||||
"Failed to refresh metadata": "মেটাডেটা রিফ্রেশ ব্যর্থ",
|
||||
"Refresh Metadata": "মেটাডেটা রিফ্রেশ"
|
||||
}
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
"Auto Mode": "རང་འགུལ་བརྗོད་བྱ།",
|
||||
"Behavior": "བྱ་སྤྱོད།",
|
||||
"Book": "དཔེ་དེབ།",
|
||||
"Book Cover": "དཔེ་དེབ་ཀྱི་སྟོང་ངོས།",
|
||||
"Bookmark": "དཔེ་རྟགས།",
|
||||
"Cancel": "འདོར་བ།",
|
||||
"Chapter": "ལེའུ།",
|
||||
@@ -107,7 +106,6 @@
|
||||
"Wikipedia": "ཝེ་ཁི་པི་ཌི་ཡ།",
|
||||
"Writing Mode": "པར་སྒྲིག་གི་རྣམ་པ།",
|
||||
"Your Library": "དཔེ་མཛོད།",
|
||||
"TTS not supported for PDF": "PDF ཡིག་ཆར་ TTS རྒྱབ་སྐྱོར་མི་བྱེད།",
|
||||
"Override Book Font": "དཔེ་དེབ་ཀྱི་ཡིག་གཟུགས་བརྗེ་བ།",
|
||||
"Apply to All Books": "དཔེ་དེབ་ཡོད་རྒུར་སྤྱོད་པ།",
|
||||
"Apply to This Book": "དཔེ་དེབ་འདིར་སྤྱོད་པ།",
|
||||
@@ -174,9 +172,6 @@
|
||||
"Token": "བཀོལ་ཐོགས།",
|
||||
"Your OTP token": "ཁྱེད་ཀྱི་ OTP བཀོལ་ཐོགས།",
|
||||
"Verify token": "བཀོལ་ཐོགས་བདེན་སྦྱོང་།",
|
||||
"Sign in with Google": "Google བེད་སྤྱད་ནས་ནང་བསྐྱོད།",
|
||||
"Sign in with Apple": "Apple བེད་སྤྱད་ནས་ནང་བསྐྱོད།",
|
||||
"Sign in with GitHub": "GitHub བེད་སྤྱད་ནས་ནང་བསྐྱོད།",
|
||||
"Account": "རྩིས་ཐོ།",
|
||||
"Failed to delete user. Please try again later.": "སྤྱོད་མཁན་བསུབ་མ་ཐུབ། ཅུང་ཙམ་སྒུག་ནས་ཡང་བསྐྱར་ཚོད་ལྟ་བྱེད་རོགས།",
|
||||
"Community Support": "སྡེ་ཁུལ་གྱི་རྒྱབ་སྐྱོར།",
|
||||
@@ -335,10 +330,10 @@
|
||||
"Fit": "མཐུན་སྒྲིག",
|
||||
"Reset {{settings}}": "{{settings}} བསྐྱར་སྒྲིག",
|
||||
"Reset Settings": "སྒྲིག་བཀོད་བསྐྱར་སྒྲིག",
|
||||
"{{count}} pages left in chapter_other": "ལེའུ་འདིར་ད་དུང་ {{count}} ཤོག་ལྷེ་ལྷག་ཡོད།",
|
||||
"{{count}} pages left in chapter_other": "<1>ལེའུ་འདིར་ད་དུང་ </1><0>{{count}}</0><1> ཤོག་ལྷེ་ལྷག་ཡོད།</1>",
|
||||
"Show Remaining Pages": "ལྷག་མའི་ཤོག་ལྷེའི་གྲངས་ཀ་མངོན་པ།",
|
||||
"Source Han Serif CN VF": "སི་ཡོན་སུང་ཐི།",
|
||||
"Huiwen-mincho": "ཧུའེ་ཝུན་མིང་ཁྲའོ་ཐི།",
|
||||
"Source Han Serif CN": "སི་ཡོན་སུང་ཐི།",
|
||||
"Huiwen-MinchoGBK": "ཧུའེ་ཝུན་མིང་ཁྲའོ་ཐི།",
|
||||
"KingHwa_OldSong": "ཅིང་ཧྭ་ལའོ་སུང་ཐི།",
|
||||
"Manage Subscription": "མཚམས་སྦྱོར་དོ་དམ།",
|
||||
"Coming Soon": "ཉེ་བར་སྤྱོད་འགོ་འཛུགས་རྒྱུ།",
|
||||
@@ -487,7 +482,7 @@
|
||||
"another device": "གཞན་ཡིག་སྣེ།",
|
||||
"Local Progress": "ཀུན་འབྱུང་ཁུངས།",
|
||||
"Remote Progress": "བརྒྱབ་འབྱུང་ཁུངས།",
|
||||
"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": "འབྱུང་ཁུངས་འདེམས་པ་བྱས་ནས་བརྗེ་བ།",
|
||||
"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": "འབྱུང་ཁུངས་འདེམས་པ་བྱས་ནས་བརྗེ་བ།",
|
||||
"Page {{page}} of {{total}} ({{percentage}}%)": "ཤོག་ {{page}} དང་ {{total}} ({{percentage}}%)",
|
||||
"Current position": "ད་ལྟའི་གནས་ས།",
|
||||
"Approximately page {{page}} of {{total}} ({{percentage}}%)": "ཕྲན་བུ་ཤོག་ངོས་ {{page}} / {{total}} ({{percentage}}%)",
|
||||
@@ -599,11 +594,10 @@
|
||||
"Size": "ཨང་",
|
||||
"Cover": "དེབ་གྱི་སྤྱོད་བྱས་མ་ཐུབ།",
|
||||
"Contain": "འབྱོར་བ།",
|
||||
"{{number}} pages left in chapter": "དོན་ཚན་ནང་ཤོག་ཨང་ {{number}} ལོག་གི་འདུག།",
|
||||
"{{number}} pages left in chapter": "<1>དོན་ཚན་ནང་ཤོག་ཨང་ </1><0>{{number}}</0><1> ལོག་གི་འདུག།</1>",
|
||||
"Device": "རྐྱབ་སྐོར",
|
||||
"E-Ink Mode": "ཡིག་སྒྱུར་སྤོ་བ",
|
||||
"Highlight Colors": "མདོག་ཚད་ཀྱི་བསྡུར་བ།",
|
||||
"Auto Screen Brightness": "རྒྱབ་སྐོར་གྱི་འོད་ཟེར་རང་འགུལ།",
|
||||
"Pagination": "ཤོག་གདོང་།",
|
||||
"Disable Double Tap": "བརྒྱབ་གདོང་གཉིས་མ་འགྱོད།",
|
||||
"Tap to Paginate": "ཤོག་གདོང་ལ་ཐོག་འགྲོ།",
|
||||
@@ -652,5 +646,448 @@
|
||||
"Update email": "ཡིག་འཕྲིན་གསར་བསྒྱུར།",
|
||||
"Current email": "མིག་སྔའི་ཡིག་འཕྲིན།",
|
||||
"Update Email": "ཡིག་འཕྲིན་གསར་བསྒྱུར།",
|
||||
"All": "ཆེན་མོ།"
|
||||
"All": "ཆེན་མོ།",
|
||||
"Unable to open book": "དེབ་ཀྱི་སྤྱོད་བྱས་མ་ཐུབ།",
|
||||
"Punctuation": "ཚིག་གྲུབ།",
|
||||
"Replace Quotation Marks": "འདྲེན་འབྲེལ་མཐུད་ཐིག་བརྗེ་བ།",
|
||||
"Enabled only in vertical layout.": "གཡས་སྒྲིག་ནང་མིང་བརྗེ་བ།",
|
||||
"No Conversion": "བསྒྱུར་བཤེར་མེད་",
|
||||
"Simplified to Traditional": "སྟོང་བཟོས → སྲོལ་རྒྱུན",
|
||||
"Traditional to Simplified": "སྲོལ་རྒྱུན → སྟོང་བཟོས",
|
||||
"Simplified to Traditional (Taiwan)": "སྟོང་བཟོས → སྲོལ་རྒྱུན (ཏའི་ཝན)",
|
||||
"Simplified to Traditional (Hong Kong)": "སྟོང་བཟོས → སྲོལ་རྒྱུན (ཧོང་ཀོང)",
|
||||
"Simplified to Traditional (Taiwan), with phrases": "སྟོང་བཟོས → སྲོལ་རྒྱུན (ཏའི་ཝན • ཚིག་ཕྲེང)",
|
||||
"Traditional (Taiwan) to Simplified": "སྲོལ་རྒྱུན (ཏའི་ཝན) → སྟོང་བཟོས",
|
||||
"Traditional (Hong Kong) to Simplified": "སྲོལ་རྒྱུན (ཧོང་ཀོང) → སྟོང་བཟོས",
|
||||
"Traditional (Taiwan) to Simplified, with phrases": "སྲོལ་རྒྱུན (ཏའི་ཝན • ཚིག་ཕྲེང) → སྟོང་བཟོས",
|
||||
"Convert Simplified and Traditional Chinese": "རྒྱ་ཡིག སྟོང་བཟོས/སྲོལ་རྒྱུན བསྒྱུར་བ",
|
||||
"Convert Mode": "བསྒྱུར་བའི་རྣམ་པ",
|
||||
"Failed to auto-save book cover for lock screen: {{error}}": "སྒྲོམ་སྒོར་དེབ་གནས་བཅས་པའི་སྤྱོད་བྱས་མ་ཐུབ།: {{error}}",
|
||||
"Download from Cloud": "སྤྲིན་ནས་ཕབ་སྟེ་འབེབས་",
|
||||
"Upload to Cloud": "སྤྲིན་ལ་ཡར་སྤེལ་",
|
||||
"Clear Custom Fonts": "རང་བཞིན་ཡིག་གཟུགས་སུབ་པ།",
|
||||
"Columns": "མཚན་ཉིད།",
|
||||
"OPDS Catalogs": "OPDS གནས་ཚུལ།",
|
||||
"Adding LAN addresses is not supported in the web app version.": "གནས་ཚུལ་དང་ལུས་སྐོར་གྱི་གྲོང་ཁྱེར་གྱི་གློག་འཕྲིན་ལས་མཐུན་པ་མེད།",
|
||||
"Invalid OPDS catalog. Please check the URL.": "མི་འབྱུང་བའི OPDS གནས་ཚུལ། ཨེ་ཨོ་ཨེར་ལུས་སྐོར་བཟོ་བྱས།",
|
||||
"Browse and download books from online catalogs": "དེབ་གནས་བཅས་པའི་གྲོང་ཁྱེར་ལས་དེབ་འདེམས་དང་ཕབ་སྟེ་འབེབས།",
|
||||
"My Catalogs": "ངའི་དཀར་ཆག",
|
||||
"Add Catalog": "དཀར་ཆག་ཁ་སྣོན་",
|
||||
"No catalogs yet": "དཀར་ཆག་མེད་པས།",
|
||||
"Add your first OPDS catalog to start browsing books": "དེབ་ལྟ་བཤེར་འགོ་བཙུགས་ནས་ དང་པོའི་ OPDS དཀར་ཆག་ཁ་སྣོན་གནང་།",
|
||||
"Add Your First Catalog": "དཀར་ཆག་དང་པོ་ཁ་སྣོན་",
|
||||
"Browse": "ལྟ་བཤེར་",
|
||||
"Popular Catalogs": "མི་མང་མཐོང་བའི་དཀར་ཆག",
|
||||
"Add": "ཁ་སྣོན་",
|
||||
"Add OPDS Catalog": "OPDS དཀར་ཆག་ཁ་སྣོན་",
|
||||
"Catalog Name": "དཀར་ཆག་མིང་",
|
||||
"My Calibre Library": "ངའི Calibre དེབ་མཛོད་",
|
||||
"OPDS URL": "OPDS URL",
|
||||
"Username (optional)": "མིང་སྒྲོམ་ (འདེམས་རུང་)",
|
||||
"Password (optional)": "གསང་ཚིག (འདེམས་རུང་)",
|
||||
"Description (optional)": "འགྲེལ་བཤད་ (འདེམས་རུང་)",
|
||||
"A brief description of this catalog": "དཀར་ཆག་འདིའི་གསལ་བཤད་ཐུང་ཐུང་",
|
||||
"Validating...": "བདེན་སྦྱོར་བཞིན་...",
|
||||
"View All": "ཡོངས་ལྟ་བ་",
|
||||
"Forward": "མདུན་དུ་",
|
||||
"Home": "གཙོ་ངོས་",
|
||||
"{{count}} items_other": "{{count}} རྣམ་གྲངས་",
|
||||
"Download completed": "ཕབ་ལེན་རྫོགས་སོང་།",
|
||||
"Download failed": "ཕབ་ལེན་ཕམ་པ་",
|
||||
"Open Access": "ཁ་ཕྱབ་ལྟ་བཤེར་",
|
||||
"Borrow": "ལེན་པ་",
|
||||
"Buy": "ཉོ་",
|
||||
"Subscribe": "མཁོ་མངགས་",
|
||||
"Sample": "དཔེ་དབང་",
|
||||
"Download": "ཕབ་ལེན་",
|
||||
"Open & Read": "ཁ་ཕྱེས་ནས་ཀློག་",
|
||||
"Tags": "མཚོན་འགྲེལ་",
|
||||
"Tag": "མཚོན་འགྲེལ་",
|
||||
"First": "དང་པོ།",
|
||||
"Previous": "སྔོན་མ།",
|
||||
"Next": "རྗེས་མ།",
|
||||
"Last": "མཐའ་མ།",
|
||||
"Cannot Load Page": "ཤོག་ངོས་འགུལ་སྐྱོང་བྱེད་ཐུབ་མེད།",
|
||||
"An error occurred": "ནོར་འཁྲུལ་ཞིག་བྱུང་སོང་།",
|
||||
"Online Library": "དྲ་རྒྱུན་དེབ་མཛོད།",
|
||||
"URL must start with http:// or https://": "URL ནི་ http:// ཡང་ https:// ནས་འགོ་བཙུགས་དགོ།",
|
||||
"Title, Author, Tag, etc...": "མིང་།, རྩོམ་པ།, མཚོན་འགྲེལ།, དེ་ལས་སྐུགས་...",
|
||||
"Query": "འཚོལ་ཞིབ་",
|
||||
"Subject": "དོན་ཚན་",
|
||||
"Enter {{terms}}": "{{terms}} ལ་འགྲོ།",
|
||||
"No search results found": "འཚོལ་ཞིབ་རྫོགས་མ་ཐུབ།",
|
||||
"Failed to load OPDS feed: {{status}} {{statusText}}": "OPDS འཕྲིན་འདེམས་བྱས་མ་ཐུབ།: {{status}} {{statusText}}",
|
||||
"Search in {{title}}": "{{title}} ནང་འཚོལ།",
|
||||
"Manage Storage": "སྣོད་གསོག་དོ་དམ་བྱེད་པ",
|
||||
"Failed to load files": "ཡིག་ཆ་སྣོན་པ་ཕམ་པ",
|
||||
"Deleted {{count}} file(s)_other": "ཡིག་ཆ་ {{count}} བསུབས་ཟིན་པ",
|
||||
"Failed to delete {{count}} file(s)_other": "ཡིག་ཆ་ {{count}} བསུབས་པ་ཕམ་པ",
|
||||
"Failed to delete files": "ཡིག་ཆ་བསུབས་པ་ཕམ་པ",
|
||||
"Total Files": "ཡིག་ཆ་ཡོངས་བསྡོམས",
|
||||
"Total Size": "ཆེས་ཆེར་ཆེ་ཆུང",
|
||||
"Quota": "ཁུལ་ཚད",
|
||||
"Used": "ལག་ལེན་བྱས་ཟིན་པ",
|
||||
"Files": "ཡིག་ཆ",
|
||||
"Search files...": "ཡིག་ཆ་འཚོལ...",
|
||||
"Newest First": "གསར་ཤོས་སྔོན་དུ",
|
||||
"Oldest First": "རྙིང་ཤོས་སྔོན་དུ",
|
||||
"Largest First": "ཆེ་ཤོས་སྔོན་དུ",
|
||||
"Smallest First": "ཆུང་ཤོས་སྔོན་དུ",
|
||||
"Name A-Z": "མིང་ A-Z",
|
||||
"Name Z-A": "མིང་ Z-A",
|
||||
"{{count}} selected_other": "{{count}} ཡིག་ཆ་འདེམས་ཟིན་པ",
|
||||
"Delete Selected": "འདེམས་པ་བསུབས་པ",
|
||||
"Created": "སྤེལ་བྱས་ཟིན་པ",
|
||||
"No files found": "ཡིག་ཆ་མ་རྙེད་པ",
|
||||
"No files uploaded yet": "ད་ཚུན་ཡིག་ཆ་སྣོན་མི་འདུག",
|
||||
"files": "ཡིག་ཆ",
|
||||
"Page {{current}} of {{total}}": "ཤོག་ངོས་ {{total}} ནས་ {{current}}",
|
||||
"Are you sure to delete {{count}} selected file(s)?_other": "ཁྱེད་ཀྱིས་འདེམས་པའི་ཡིག་ཆ་ {{count}} བསུབས་དགོས་པ་ངེས་ཡིན་ན?",
|
||||
"Cloud Storage Usage": "སྤྲིན་གནས་སྣོད་གསོག་ལུས་སྐོར།",
|
||||
"Rename Group": "ཚོགས་མིང་བསྒྱུར་བ།",
|
||||
"From Directory": "སྐོར་འདེམས་པ་ནས།",
|
||||
"Successfully imported {{count}} book(s)_other": "སྤྲིན་ནས་ཕབ་སྟེ་འབེབས་ {{count}} དེབ་འདེམས་སོང་",
|
||||
"Count": "ཨང་",
|
||||
"Start Page": "ཤོག་ངོས་དང་པོ",
|
||||
"Search in OPDS Catalog...": "OPDS དཀར་ཆག་ནང་འཚོལ།...",
|
||||
"Please log in to use advanced TTS features": "དབང་བསྐྱོད་ཀྱི TTS རྣམ་པ་ཚུགས་སྤྱོད་བྱས་མ་ཐུབ།",
|
||||
"Word limit of 30 words exceeded.": "ཚིག་གཅིག 30 ལྟར་འདོད་མེད།",
|
||||
"Proofread": "མིག་སྔའི་བཤད་རྒྱུན།",
|
||||
"Current selection": "དེབ་གནས་བཅས་པའི་སྤྱོད་བྱས་མ་ཐུབ།",
|
||||
"All occurrences in this book": "དེབ་ནང་གི་འདི་ཚུགས་ཀྱི་འཚོལ་ཞིབ།",
|
||||
"All occurrences in your library": "ཁྱོད་ཀྱི་དེབ་མཛོད་ནང་གི་འདི་ཚུགས་ཀྱི་འཚོལ་ཞིབ།",
|
||||
"Selected text:": "དེབ་གནས་བཅས་པའི་སྤྱོད་བྱས་མ་ཐུབ།",
|
||||
"Replace with:": "བརྗེ་བ།:",
|
||||
"Enter text...": "ཡིག་ཆ་ལ་འགྲོ།...",
|
||||
"Case sensitive:": "གནས་སྟངས་འདི་ལ་འབད་དགོས།",
|
||||
"Scope:": "གནས་ཚུལ།:",
|
||||
"Selection": "དེབ་གནས་བཅས་པའི་སྤྱོད་བྱས་མ་ཐུབ།",
|
||||
"Library": "དེབ་མཛོད།",
|
||||
"Yes": "ཨིན་",
|
||||
"No": "མེད་",
|
||||
"Proofread Replacement Rules": "མིག་སྔའི་བཤད་རྒྱུན་བརྗེ་བའི་རྣམ་པ།",
|
||||
"Selected Text Rules": "བདམས་པའི་ཡིག་ཆ་བརྗེ་སྒྱུར་སྲིད་སྒྲིག",
|
||||
"No selected text replacement rules": "བདམས་པའི་ཡིག་ཆ་བརྗེ་སྒྱུར་སྲིད་སྒྲིག་མེད་པ",
|
||||
"Book Specific Rules": "དེབ་སྒོས་ཀྱི་བརྗེ་སྒྱུར་སྲིད་སྒྲིག",
|
||||
"No book-level replacement rules": "དེབ་རིམ་གྱི་བརྗེ་སྒྱུར་སྲིད་སྒྲིག་མེད་པ",
|
||||
"Disable Quick Action": "མགྱོགས་མྱུར་བྱ་བ་སྤང་",
|
||||
"Enable Quick Action on Selection": "འདེམས་པའི་སྐབས་མགྱོགས་མྱུར་བྱ་བ་སྤྱོད་",
|
||||
"None": "མེད་",
|
||||
"Annotation Tools": "མཆན་འགྲེལ་ལག་ཆ་",
|
||||
"Enable Quick Actions": "མགྱོགས་མྱུར་བྱ་བ་སྤྱོད་",
|
||||
"Quick Action": "མགྱོགས་མྱུར་བྱ་བ་",
|
||||
"Copy to Notebook": "ཟིན་དེབ་ནང་འདྲ་བཤུས་",
|
||||
"Copy text after selection": "ཡིག་ཆ་འདེམས་པའི་ཐབས་ཀྱིས་འདྲ་བཤུས་",
|
||||
"Highlight text after selection": "ཡིག་ཆ་འདེམས་པའི་ཐབས་ཀྱིས་མངོན་གསལ་བྱེད་",
|
||||
"Annotate text after selection": "ཡིག་ཆ་འདེམས་པའི་ཐབས་ཀྱིས་མཆན་འགྲེལ་བྱེད་",
|
||||
"Search text after selection": "ཡིག་ཆ་འདེམས་པའི་ཐབས་ཀྱིས་འཚོལ་ཞིབ་བྱེད་",
|
||||
"Look up text in dictionary after selection": "ཡིག་ཆ་འདེམས་པའི་ཐབས་ཀྱིས་ཚིག་མཛོད་ནང་འཚོལ་",
|
||||
"Look up text in Wikipedia after selection": "ཡིག་ཆ་འདེམས་པའི་ཐབས་ཀྱིས་ཝེ་ཀི་པི་ཌི་ཡི་ནང་འཚོལ་",
|
||||
"Translate text after selection": "ཡིག་ཆ་འདེམས་པའི་ཐབས་ཀྱིས་སྐད་བསྒྱུར་བྱེད་",
|
||||
"Read text aloud after selection": "ཡིག་ཆ་འདེམས་པའི་ཐབས་ཀྱིས་སྐད་ཀྱིས་ཀློག་",
|
||||
"Proofread text after selection": "ཡིག་ཆ་འདེམས་པའི་ཐབས་ཀྱིས་ཞིབ་བཤེར་བྱེད་",
|
||||
"{{activeCount}} active, {{pendingCount}} pending": "{{activeCount}} བྱེད་བཞིན་པ་, {{pendingCount}} སྒུག་བཞིན་པ་",
|
||||
"{{failedCount}} failed": "{{failedCount}} ཕམ་པ་",
|
||||
"Waiting...": "སྒུག་བཞིན་པ་...",
|
||||
"Failed": "ཕམ་པ་",
|
||||
"Completed": "གྲུབ་སོང་",
|
||||
"Cancelled": "དོར་སོང་",
|
||||
"Retry": "བསྐྱར་ཚོད་",
|
||||
"Active": "བྱེད་བཞིན་པ་",
|
||||
"Transfer Queue": "སྐྱེལ་འདྲེན་སྒྲིག་གཅོད་",
|
||||
"Upload All": "ཚང་མ་འཇོག་",
|
||||
"Download All": "ཚང་མ་ལེན་",
|
||||
"Resume Transfers": "སྐྱེལ་འདྲེན་མུ་མཐུད་",
|
||||
"Pause Transfers": "སྐྱེལ་འདྲེན་མཚམས་འཇོག་",
|
||||
"Pending": "སྒུག་བཞིན་པ་",
|
||||
"No transfers": "སྐྱེལ་འདྲེན་མེད་",
|
||||
"Retry All": "ཚང་མ་བསྐྱར་ཚོད་",
|
||||
"Clear Completed": "གྲུབ་པ་གསལ་བ་",
|
||||
"Clear Failed": "ཕམ་པ་གསལ་བ་",
|
||||
"Upload queued: {{title}}": "འཇོག་པའི་སྒྲིག་གཅོད་ནང་བཅུག་: {{title}}",
|
||||
"Download queued: {{title}}": "ལེན་པའི་སྒྲིག་གཅོད་ནང་བཅུག་: {{title}}",
|
||||
"Book not found in library": "དཔེ་མཛོད་ནང་དཔེ་ཆ་རྙེད་མ་སོང་",
|
||||
"Unknown error": "མ་ཤེས་པའི་ནོར་འཁྲུལ་",
|
||||
"Please log in to continue": "མུ་མཐུད་པར་ནང་འཛུལ་བྱོས་",
|
||||
"Cloud File Transfers": "སྤྲིན་གནས་ཡིག་ཆ་སྐྱེལ་འདྲེན།",
|
||||
"Show Search Results": "འཚོལ་བཤེར་འབྲས་བུ་སྟོན།",
|
||||
"Search results for '{{term}}'": "'{{term}}'ཡི་འབྲས་བུ།",
|
||||
"Close Search": "འཚོལ་བཤེར་སྒོ་རྒྱག",
|
||||
"Previous Result": "སྔོན་མའི་འབྲས་བུ།",
|
||||
"Next Result": "རྗེས་མའི་འབྲས་བུ།",
|
||||
"Bookmarks": "དཔེ་རྟགས།",
|
||||
"Annotations": "མཆན།",
|
||||
"Show Results": "འབྲས་བུ་སྟོན།",
|
||||
"Clear search": "འཚོལ་བཤེར་གཙང་སེལ།",
|
||||
"Clear search history": "འཚོལ་བཤེར་ལོ་རྒྱུས་གཙང་སེལ།",
|
||||
"Tap to Toggle Footer": "ཞབས་མཇུག་སྒོ་འབྱེད་བྱེད་པར་གནོན།",
|
||||
"Show Current Time": "ད་ལྟའི་དུས་ཚོད་སྟོན་པ།",
|
||||
"Use 24 Hour Clock": "ཆུ་ཚོད་ ༢༤ ཅན་གྱི་ཟློས་འཁོར་བཀོལ་བ།",
|
||||
"Show Current Battery Status": "ད་ལྟའི་གློག་རྫས་གནས་བབ་སྟོན་པ།",
|
||||
"Exported successfully": "ཕྱིར་འདོན་ལེགས་གྲུབ་བྱུང་།",
|
||||
"Book exported successfully.": "དཔེ་དེབ་ཕྱིར་འདོན་ལེགས་གྲུབ་བྱུང་།",
|
||||
"Failed to export the book.": "དཔེ་དེབ་ཕྱིར་འདོན་མི་ཐུབ།",
|
||||
"Export Book": "དཔེ་དེབ་ཕྱིར་འདོན།",
|
||||
"Whole word:": "ཚིག་གྲུབ་ཆ་ཚང་:",
|
||||
"Error": "ནོར་འཁྲུལ།",
|
||||
"Unable to load the article. Try searching directly on {{link}}.": "རྩོམ་ཡིག་མངོན་མི་ཐུབ། {{link}} ཐད་ཀར་འཚོལ་བ་བྱོས།",
|
||||
"Unable to load the word. Try searching directly on {{link}}.": "ཚིག་མངོན་མི་ཐུབ། {{link}} ཐད་ཀར་འཚོལ་བ་བྱོས།",
|
||||
"Date Published": "པར་སྐྲུན་ཚེས་གྲངས།",
|
||||
"Only for TTS:": "TTS ལ་ཁོ་ན།:",
|
||||
"Uploaded": "ཡར་སྐྱེལ་བྱས་ཟིན།",
|
||||
"Downloaded": "མར་ལེན་བྱས་ཟིན།",
|
||||
"Deleted": "བསུབས་ཟིན།",
|
||||
"Note:": "གསལ་བཤད།:",
|
||||
"Time:": "དུས་ཚོད།:",
|
||||
"Format Options": "རྣམ་གཞག་གདམ་ག",
|
||||
"Export Date": "ཕྱིར་འདོན་ཚེས་གྲངས།",
|
||||
"Chapter Titles": "ལེའུའི་མཚན།",
|
||||
"Chapter Separator": "ལེའུའི་དབར་མཚམས།",
|
||||
"Highlights": "གཙོ་གནད།",
|
||||
"Note Date": "གསལ་བཤད་ཚེས་གྲངས།",
|
||||
"Advanced": "མཐོ་རིམ།",
|
||||
"Hide": "སྦས་པ།",
|
||||
"Show": "མངོན་པ།",
|
||||
"Use Custom Template": "རང་བཟོའི་དཔེ་གཞི་བེད་སྤྱོད།",
|
||||
"Export Template": "ཕྱིར་འདོན་དཔེ་གཞི།",
|
||||
"Template Syntax:": "དཔེ་གཞིའི་སྒྲིག་གཞི།:",
|
||||
"Insert value": "གྲངས་ཐང་བཙུགས་པ།",
|
||||
"Format date (locale)": "ཚེས་གྲངས་རྣམ་གཞག (ས་གནས།)",
|
||||
"Format date (custom)": "ཚེས་གྲངས་རྣམ་གཞག (རང་བཟོ།)",
|
||||
"Conditional": "དམིགས་བསལ།",
|
||||
"Loop": "འཁོར་ལོ།",
|
||||
"Available Variables:": "བེད་སྤྱད་རུང་བའི་འགྱུར་ཅན།:",
|
||||
"Book title": "དེབ་མཚན།",
|
||||
"Book author": "དེབ་རྩོམ་པ་པོ།",
|
||||
"Export date": "ཕྱིར་འདོན་ཚེས་གྲངས།",
|
||||
"Array of chapters": "ལེའུའི་ལེབ་ངོས།",
|
||||
"Chapter title": "ལེའུའི་མཚན།",
|
||||
"Array of annotations": "གསལ་བཤད་ལེབ་ངོས།",
|
||||
"Highlighted text": "གཙོ་གནད་ཡིག་རྐྱང་།",
|
||||
"Annotation note": "གསལ་བཤད་ཟིན་བྲིས།",
|
||||
"Date Format Tokens:": "ཚེས་གྲངས་རྣམ་གཞག་རྟགས།:",
|
||||
"Year (4 digits)": "ལོ། (གྲངས་ཐང་4)",
|
||||
"Month (01-12)": "ཟླ། (01-12)",
|
||||
"Day (01-31)": "ཚེས། (01-31)",
|
||||
"Hour (00-23)": "ཆུ་ཚོད། (00-23)",
|
||||
"Minute (00-59)": "སྐར་མ། (00-59)",
|
||||
"Second (00-59)": "སྐར་ཆ། (00-59)",
|
||||
"Show Source": "འབྱུང་ཁུངས་མངོན་པ།",
|
||||
"No content to preview": "སྔོན་ལྟ་བྱེད་པའི་དོན་རྐྱེན་མེད།",
|
||||
"Export": "ཕྱིར་འདོན།",
|
||||
"Set Timeout": "དུས་ཚོད་སྒྲིག་པ།",
|
||||
"Select Voice": "སྐད་གདངས་འདེམས།",
|
||||
"Toggle Sticky Bottom TTS Bar": "TTS སྡོམ་ཐིག་བརྗེ་བ།",
|
||||
"Display what I'm reading on Discord": "Discord ཐོག་ཀློག་བཞིན་པའི་དཔེ་ཆ་སྟོན།",
|
||||
"Show on Discord": "Discord ཐོག་སྟོན།",
|
||||
"Instant {{action}}": "འཕྲལ་མར་{{action}}",
|
||||
"Instant {{action}} Disabled": "འཕྲལ་མར་{{action}}་ལྕོགས་མིན་བཟོས།",
|
||||
"Annotation": "མཆན་འགྲེལ།",
|
||||
"Reset Template": "དཔེ་གཞི་བསྐྱར་སྒྲིག",
|
||||
"Annotation style": "མཆན་འགྲེལ་གྱི་བཟོ་ལྟ།",
|
||||
"Annotation color": "མཆན་འགྲེལ་གྱི་ཚོན་མདོག",
|
||||
"Annotation time": "མཆན་འགྲེལ་གྱི་དུས་ཚོད།",
|
||||
"AI": "རིག་ནུས་མིས་བཟོས། (AI)",
|
||||
"Are you sure you want to re-index this book?": "ཁྱེད་ཀྱིས་དཔེ་དེབ་འདི་བསྐྱར་དུ་དཀར་ཆག་བཟོ་རྒྱུ་གཏན་འཁེལ་ཡིན་ནམ།",
|
||||
"Enable AI in Settings": "སྒྲིག་བཀོད་ནང་ AI སྤྱོད་པར་བྱོས།",
|
||||
"Index This Book": "དཔེ་དེབ་འདི་དཀར་ཆག་བཟོ་བ།",
|
||||
"Enable AI search and chat for this book": "དཔེ་དེབ་འདིར་ AI འཚོལ་བཤེར་དང་ཁ་བརྡ་སྤྱོད་པར་བྱོས།",
|
||||
"Start Indexing": "དཀར་ཆག་བཟོ་འགོ་བཙུགས་པ།",
|
||||
"Indexing book...": "དཔེ་དེབ་དཀར་ཆག་བཟོ་བཞིན་པ།...",
|
||||
"Preparing...": "གྲ་སྒྲིག་བྱེད་བཞིན་པ།...",
|
||||
"Delete this conversation?": "ཁ་བརྡ་འདི་བསུབ་དགོས་སམ།",
|
||||
"No conversations yet": "ད་ལྟའི་བར་ཁ་བརྡ་མེད།",
|
||||
"Start a new chat to ask questions about this book": "དཔེ་དེབ་འདིའི་སྐོར་ལ་དྲི་བ་དྲི་བར་ཁ་བརྡ་གསར་པ་ཞིག་འགོ་བཙུགས་པ།",
|
||||
"Rename": "མིང་བརྗེ་བ།",
|
||||
"New Chat": "ཁ་བརྡ་གསར་པ།",
|
||||
"Chat": "ཁ་བརྡ།",
|
||||
"Please enter a model ID": "དཔེ་གཞིའི་ཨང་རྟགས་ནང་འཇུག་བྱོས།",
|
||||
"Model not available or invalid": "དཔེ་གཞི་མེད་པ་འམ་ནུས་མེད།",
|
||||
"Failed to validate model": "དཔེ་གཞི་བདེན་སྦྱོར་བྱེད་ཐུབ་མེད།",
|
||||
"Couldn't connect to Ollama. Is it running?": "Ollama ལ་འབྲེལ་མཐུད་བྱེད་ཐུབ་མེད། དེ་འཁོར་བཞིན་ཡོད་དམ།",
|
||||
"Invalid API key or connection failed": "API ལྡེ་མིག་ནུས་མེད་དམ་འབྲེལ་མཐུད་ཕམ་པ།",
|
||||
"Connection failed": "འབྲེལ་མཐུད་ཕམ་པ།",
|
||||
"AI Assistant": "AI རོགས་པ།",
|
||||
"Enable AI Assistant": "AI རོགས་པ་སྤྱོད་པར་བྱོས།",
|
||||
"Provider": "མཁོ་འདོན་པ།",
|
||||
"Ollama (Local)": "Ollama (ས་གནས།)",
|
||||
"AI Gateway (Cloud)": "AI འཛུལ་སྒོ། (སྤྲིན་གནས།)",
|
||||
"Ollama Configuration": "Ollama སྒྲིག་བཀོད།",
|
||||
"Refresh Models": "དཔེ་གཞི་བསྐྱར་བརྗེ།",
|
||||
"AI Model": "AI དཔེ་གཞི།",
|
||||
"No models detected": "དཔེ་གཞི་མ་རྙེད།",
|
||||
"AI Gateway Configuration": "AI འཛུལ་སྒོའི་སྒྲིག་བཀོད།",
|
||||
"Choose from a selection of high-quality, economical AI models. You can also bring your own model by selecting \"Custom Model\" below.": "སྤུས་ལེགས་དང་ཁེ་ཕན་ཆེ་བའི་ AI དཔེ་གཞི་འདེམས་དགོས། ཁྱེད་ཀྱིས་འོག་གི་ \"རང་བཟོའི་དཔེ་གཞི།\" བདམས་ནས་རང་གི་དཔེ་གཞི་བེད་སྤྱོད་ཀྱང་ཆོག",
|
||||
"API Key": "API ལྡེ་མིག་",
|
||||
"Get Key": "ལྡེ་མིག་ལེན་པ།",
|
||||
"Model": "དཔེ་གཞི།",
|
||||
"Custom Model...": "རང་བཟོའི་དཔེ་གཞི།...",
|
||||
"Custom Model ID": "རང་བཟོའི་དཔེ་གཞིའི་ཨང་རྟགས།",
|
||||
"Validate": "བདེན་སྦྱོར།",
|
||||
"Model available": "དཔེ་གཞི་ཡོད།",
|
||||
"Connection": "འབྲེལ་མཐུད།",
|
||||
"Test Connection": "འབྲེལ་མཐུད་ཚོད་ལྟ།",
|
||||
"Connected": "འབྲེལ་མཐུད་ཟིན།",
|
||||
"Custom Colors": "རང་བཟོས་ཚོན་མདོག",
|
||||
"Color E-Ink Mode": "ཚོན་ལྡན་གློག་རྡུལ་སྣག་ཚའི་རྣམ་པ།",
|
||||
"Reading Ruler": "ལྟ་ཀློག་ཐིག་ཤིང་།",
|
||||
"Enable Reading Ruler": "ལྟ་ཀློག་ཐིག་ཤིང་སྤྱོད་པ།",
|
||||
"Lines to Highlight": "མངོན་གསལ་དུ་གཏོང་དགོས་པའི་ཐིག་ཕྲེང་།",
|
||||
"Ruler Color": "ཐིག་ཤིང་ගི་ཚོན་མདོག",
|
||||
"Command Palette": "བཀོད་འདོམས་པང་ལེབ།",
|
||||
"Search settings and actions...": "སྒྲིག་བཀོད་དང་བྱ་འགུལ་འཚོལ་བ།...",
|
||||
"No results found for": "འབྲས་བུ་མ་རྙེད་པ།",
|
||||
"Type to search settings and actions": "ཡིག་གཟུགས་ནང་འཇུག་བྱས་ཏེ་སྒྲིག་བཀོད་དང་བྱ་འགུལ་འཚོལ་བ།",
|
||||
"Recent": "ཉེ་ཆར།",
|
||||
"navigate": "འགྲུལ་བཞུད།",
|
||||
"select": "འདེམས་པ།",
|
||||
"close": "ཁ་རྒྱག་པ།",
|
||||
"Search Settings": "སྒྲིག་བཀོད་འཚོལ་བ།",
|
||||
"Page Margins": "ཤོག་ངོས་མཐའ་འགྲམ།",
|
||||
"AI Provider": "ནུས་པའི་རིག་རྩལ་མཁོ་སྤྲོད་པ།",
|
||||
"Ollama URL": "Ollama URL",
|
||||
"Ollama Model": "Ollama དཔེ་གཞི།",
|
||||
"AI Gateway Model": "AI Gateway དཔེ་གཞི།",
|
||||
"Actions": "བྱ་འགུལ།",
|
||||
"Navigation": "འགྲུལ་བཞུད།",
|
||||
"Set status for {{count}} book(s)_other": "དེབ་ {{count}} གི་གནས་སྟངས་གཏན་འཁེལ་བྱེད།",
|
||||
"Mark as Unread": "མ་ཀློག་པར་རྟགས་རྒྱག",
|
||||
"Mark as Finished": "ཚར་བར་རྟགས་རྒྱག",
|
||||
"Finished": "ཚར་སོང་།",
|
||||
"Unread": "མ་ཀློག་པ།",
|
||||
"Clear Status": "གནས་སྟངས་གཙང་མ།",
|
||||
"Status": "གནས་སྟངས།",
|
||||
"Loading": "ལེན་བཞིན་པ།...",
|
||||
"Exit Paragraph Mode": "དུམ་མཚམས་རྣམ་པ་ནས་ཕྱིར་ཐོན།",
|
||||
"Paragraph Mode": "དུམ་མཚམས་རྣམ་པ།",
|
||||
"Embedding Model": "གནས་སྒྲིག་དཔེ་གཞི།",
|
||||
"{{count}} book(s) synced_other": "དེབ་ {{count}} མཉམ་འགྲིག་བྱས་ཟིན།",
|
||||
"Unable to start RSVP": "RSVP འགོ་འཛུགས་མ་ཐུབ།",
|
||||
"RSVP not supported for PDF": "PDF ལ་ RSVP རྒྱབ་སྐྱོར་མེད།",
|
||||
"Select Chapter": "ལེའུ་འདེམས་པ།",
|
||||
"Context": "བརྗོད་དོན།",
|
||||
"Ready": "གྲ་སྒྲིག་ཡོད།",
|
||||
"Chapter Progress": "ལེའུའི་འཕེལ་རིམ།",
|
||||
"words": "ཚིག",
|
||||
"{{time}} left": "དུས་ཚོད་ {{time}} ལྷག་ཡོད།",
|
||||
"Reading progress": "ཀློག་པའི་འཕེལ་རིམ།",
|
||||
"Click to seek": "གནས་ས་འཚོལ་བར་གནོན་པ།",
|
||||
"Skip back 15 words": "ཚིག་ ༡༥ རྒྱབ་ལ་བཤུད་པ།",
|
||||
"Back 15 words (Shift+Left)": "ཚིག་ ༡༥ རྒྱབ་ལ་བཤུད་པ། (Shift+Left)",
|
||||
"Pause (Space)": "མཚམས་འཇོག་པ། (Space)",
|
||||
"Play (Space)": "གཏོང་བ། (Space)",
|
||||
"Skip forward 15 words": "ཚིག་ ༡༥ མདུན་ལ་བཤུད་པ།",
|
||||
"Forward 15 words (Shift+Right)": "ཚིག་ ༡༥ མདུན་ལ་བཤུད་པ། (Shift+Right)",
|
||||
"Decrease speed": "མགྱོགས་ཚད་འགོར་དུ་གཏོང་བ།",
|
||||
"Slower (Left/Down)": "འགོར་བ། (Left/Down)",
|
||||
"Increase speed": "མགྱོགས་ཚད་མྱུར་དུ་གཏོང་བ།",
|
||||
"Faster (Right/Up)": "མྱུར་བ། (Right/Up)",
|
||||
"Start RSVP Reading": "RSVP ཀློག་འགོ་འཛུགས་པ།",
|
||||
"Choose where to start reading": "གང་ནས་ཀློག་འགོ་འཛུགས་མིན་འདེམས་པ།",
|
||||
"From Chapter Start": "ལེའུའི་འགོ་ནས།",
|
||||
"Start reading from the beginning of the chapter": "ལེའུ་འདིའི་འགོ་ནས་ཀློག་པ།",
|
||||
"Resume": "མུ་མཐུད་པ།",
|
||||
"Continue from where you left off": "མཚམས་བཞག་སའི་གནས་ནས་མུ་མཐུད་པ།",
|
||||
"From Current Page": "ད་ལྟའི་ཤོག་ལྷེ་ནས།",
|
||||
"Start from where you are currently reading": "ད་ལྟ་ཀློག་བཞིན་པའི་གནས་ནས་འགོ་འཛུགས་པ།",
|
||||
"From Selection": "བདམས་པའི་ནང་དོན་ནས།",
|
||||
"Speed Reading Mode": "མྱུར་ཀློག་རྣམ་པ།",
|
||||
"Scroll left": "གཡོན་ལ་བཤུད་དགོས།",
|
||||
"Scroll right": "གཡས་ལ་བཤུད་དགོས།",
|
||||
"Library Sync Progress": "དཔེ་མཛོད་མཉམ་འབྱུང་གི་རིམ་པ།",
|
||||
"Back to library": "དཔེ་མཛོད་ལ་ལོག་པ།",
|
||||
"Group by...": "དབྱེ་བ་འབྱེད་སྟངས།...",
|
||||
"Export as Plain Text": "ཡིག་རྐྱང་དཀྱུས་མར་ཕྱིར་འདྲེན།",
|
||||
"Export as Markdown": "Markdown དུ་ཕྱིར་འདྲེན།",
|
||||
"Show Page Navigation Buttons": "ཤོག་ངོས་མཐེབ་གནོན།",
|
||||
"Page {{number}}": "ཤོག་ལྷེ། {{number}}",
|
||||
"highlight": "འོད་རྟགས།",
|
||||
"underline": "ཞབས་ཐིག",
|
||||
"squiggly": "ཀྱག་ཀྱག་ཐིག",
|
||||
"red": "དམར་པོ།",
|
||||
"violet": "སྨུག་པོ།",
|
||||
"blue": "སྔོན་པོ།",
|
||||
"green": "ལྗང་ཁུ།",
|
||||
"yellow": "སེར་པོ།",
|
||||
"Select {{style}} style": "{{style}} བཟོ་ལྟ་བདམ་པ།",
|
||||
"Select {{color}} color": "{{color}} ཚོན་མདོག་བདམ་པ།",
|
||||
"Close Book": "དེབ་ཁ་རྒྱག་པ།",
|
||||
"Speed Reading": "མགྱོགས་ཀློག",
|
||||
"Close Speed Reading": "མགྱོགས་ཀློག་ཁ་རྒྱག་པ།",
|
||||
"Authors": "རྩོམ་པ་པོ།",
|
||||
"Books": "དཔེ་ཆ།",
|
||||
"Groups": "ཚོགས་པ།",
|
||||
"Back to TTS Location": "TTS གནས་སར་ཕྱིར་ལོག་པ།",
|
||||
"Metadata": "གནད་སྨིན་གོ་དོན།",
|
||||
"Image viewer": "པར་རིས་ལྟ་བྱེད།",
|
||||
"Previous Image": "སྔོན་མའི་པར་རིས།",
|
||||
"Next Image": "རྗེས་མའི་པར་རིས།",
|
||||
"Zoomed": "ཆེར་བསྐྱེད་ཟིན།",
|
||||
"Zoom level": "ཆེར་བསྐྱེད་རིམ་པ།",
|
||||
"Table viewer": "རེའུ་མིག་ལྟ་བྱེད།",
|
||||
"Unable to connect to Readwise. Please check your network connection.": "Readwise ལ་མཐུད་ཐུབ་མ་སོང་། ཁྱེད་ཀྱི་དྲ་རྒྱའི་མཐུད་ལམ་ལ་བརྟག་དཔྱད་གནང་རོགས།",
|
||||
"Invalid Readwise access token": "Readwise འཛུལ་སྤྱོད་ལག་ཁྱེར་ནོར་འདུག",
|
||||
"Disconnected from Readwise": "Readwise ནས་མཐུད་ལམ་བཅད་ཟིན།",
|
||||
"Never": "ནམ་ཡང་མིན།",
|
||||
"Readwise Settings": "Readwise སྒྲིག་བཀོད།",
|
||||
"Connected to Readwise": "Readwise ལ་མཐུད་ཟིན།",
|
||||
"Last synced: {{time}}": "མཐའ་མའི་མཉམ་བྱུང་དུས་ཚོད། {{time}}",
|
||||
"Sync Enabled": "མཉམ་བྱུང་ནུས་པ་སྤར་ཟིན།",
|
||||
"Disconnect": "མཐུད་ལམ་གཅོད་པ།",
|
||||
"Connect your Readwise account to sync highlights.": "ཁྱེད་ཀྱི་ Readwise རྩིས་ཐོ་མཐུད་ནས་བཀོད་མཆན་མཉམ་བྱུང་གནང་རོགས།",
|
||||
"Get your access token at": "འཛུལ་སྤྱོད་ལག་ཁྱེར་འདི་ནས་ལེན་རོགས།",
|
||||
"Access Token": "འཛུལ་སྤྱོད་ལག་ཁྱེེར།",
|
||||
"Paste your Readwise access token": "Readwise འཛུལ་སྤྱོད་ལག་ཁྱེར་འདིར་སྦྱོར་རོགས།",
|
||||
"Config": "སྒྲིག་བཀོད།",
|
||||
"Readwise Sync": "Readwise མཉམ་བྱུང་།",
|
||||
"Push Highlights": "བཀོད་མཆན་སྐྱེལ་བ།",
|
||||
"Highlights synced to Readwise": "བཀོད་མཆན་ Readwise ལ་མཉམ་བྱུང་བྱས་ཟིན།",
|
||||
"Readwise sync failed: no internet connection": "Readwise མཉམ་བྱུང་མ་ཐུབ། དྲ་རྒྱའི་མཐུད་ལམ་མི་འདུག",
|
||||
"Readwise sync failed: {{error}}": "Readwise མཉམ་བྱུང་མ་ཐུབ། {{error}}",
|
||||
"System Screen Brightness": "མ་ལག་ཤེལ་སྒོའི་གསལ་ཚད།",
|
||||
"Page:": "ཤོག་ལྷེ།:",
|
||||
"Page: {{number}}": "ཤོག་ལྷེ།: {{number}}",
|
||||
"Annotation page number": "མཆན་འགྲེལ་ཤོག་ཨང་།",
|
||||
"Translating...": "ཡིག་བསྒྱུར་བྱེད་བཞིན་པ།...",
|
||||
"Show Battery Percentage": "གློག་རྫས་བརྒྱ་ཆ་སྟོན།",
|
||||
"Hide Scrollbar": "འགྲིལ་ཤིང་སྦེད་པ།",
|
||||
"Skip to last reading position": "མཐའ་མའི་ཀློག་གནས་སུ་མཆོང་",
|
||||
"Show context": "སྐབས་དོན་མངོན་པ",
|
||||
"Hide context": "སྐབས་དོན་སྦས་པ",
|
||||
"Decrease font size": "ཡིག་གཟུགས་ཆུང་དུ་གཏོང་བ",
|
||||
"Increase font size": "ཡིག་གཟུགས་ཆེ་རུ་གཏོང་བ",
|
||||
"Focus": "དམིགས་གཏད",
|
||||
"Theme color": "བརྗོད་དོན་ཚོན་མདོག",
|
||||
"Import failed": "ནང་འདྲེན་མི་ཐུབ།",
|
||||
"Available Formatters:": "སྒྲིག་བཟོ་ཆས་ཡོད་པ།:",
|
||||
"Format date": "ཚེས་གྲངས་སྒྲིག་བཟོ",
|
||||
"Markdown block quote (> per line)": "Markdown དྲིལ་བསྡུ་འདྲེན་ (མི་ལྟར་ > )",
|
||||
"Newlines to <br>": "གསར་བརྗེ་ <br> ལ་བསྒྱུར",
|
||||
"Change case": "ཡིག་གཟུགས་བསྒྱུར",
|
||||
"Trim whitespace": "སྟོང་ཆ་གཙང་བཟོ",
|
||||
"Truncate to n characters": "n ཡི་གེར་ཐུང་དུ་བཅད",
|
||||
"Replace text": "ཡི་གེ་བརྗེ་བ",
|
||||
"Fallback value": "ཚབ་ཀྱི་གྲངས་ཀ",
|
||||
"Get length": "རིང་ཚད་ལེན",
|
||||
"First/last element": "དང་པོ/མཇུག་གི་རྒྱུ་ཆ",
|
||||
"Join array": "ཚོ་སྒྲིག་སྦྲེལ",
|
||||
"Backup failed: {{error}}": "གྲབས་ཉར་བྱེད་མ་ཐུབ: {{error}}",
|
||||
"Select Backup": "གྲབས་ཉར་འདེམས་པ",
|
||||
"Restore failed: {{error}}": "སླར་གསོ་བྱེད་མ་ཐུབ: {{error}}",
|
||||
"Backup & Restore": "གྲབས་ཉར་དང་སླར་གསོ",
|
||||
"Create a backup of your library or restore from a previous backup. Restoring will merge with your current library.": "ཁྱོད་ཀྱི་དཔེ་མཛོད་ཀྱི་གྲབས་ཉར་བཟོ་བའམ་སྔོན་གྱི་གྲབས་ཉར་ནས་སླར་གསོ་བྱོས། སླར་གསོ་བྱས་ན་ཁྱོད་ཀྱི་ད་ལྟའི་དཔེ་མཛོད་དང་སྤྲོད་རེས་བྱེད།",
|
||||
"Backup Library": "དཔེ་མཛོད་གྲབས་ཉར",
|
||||
"Restore Library": "དཔེ་མཛོད་སླར་གསོ",
|
||||
"Creating backup...": "གྲབས་ཉར་བཟོ་བཞིན་པ...",
|
||||
"Restoring library...": "དཔེ་མཛོད་སླར་གསོ་བྱེད་བཞིན་པ...",
|
||||
"{{current}} of {{total}} items": "{{current}} / {{total}} རྣམ་གྲངས",
|
||||
"Backup completed successfully!": "གྲབས་ཉར་ལེགས་གྲུབ་བྱུང་!",
|
||||
"Restore completed successfully!": "སླར་གསོ་ལེགས་གྲུབ་བྱུང་!",
|
||||
"Your library has been saved to the selected location.": "ཁྱོད་ཀྱི་དཔེ་མཛོད་འདེམས་ས་དེར་ཉར་ཟིན།",
|
||||
"{{added}} books added, {{updated}} books updated.": "དཔེ་དེབ {{added}} བསྣན་ཟིན, {{updated}} གསར་བསྒྱུར་བྱས་ཟིན།",
|
||||
"Operation failed": "བཀོལ་སྤྱོད་བྱེད་མ་ཐུབ",
|
||||
"Loading library...": "དཔེ་མཛོད་འཇུག་བཞིན་པ...",
|
||||
"{{count}} books refreshed_other": "تم تحديث {{count}} كتب",
|
||||
"Failed to refresh metadata": "མེ་ཊ་ཌེ་ཊ་གསར་བསྒྱུར་བྱེད་མ་ཐུབ",
|
||||
"Refresh Metadata": "མེ་ཊ་ཌེ་ཊ་གསར་བསྒྱུར"
|
||||
}
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
"Auto Mode": "Automatischer Modus",
|
||||
"Behavior": "Verhalten",
|
||||
"Book": "Buch",
|
||||
"Book Cover": "Buchcover",
|
||||
"Bookmark": "Lesezeichen",
|
||||
"Cancel": "Abbrechen",
|
||||
"Chapter": "Kapitel",
|
||||
@@ -106,7 +105,6 @@
|
||||
"Wikipedia": "Wikipedia",
|
||||
"Writing Mode": "Schreibmodus",
|
||||
"Your Library": "Ihre Bibliothek",
|
||||
"TTS not supported for PDF": "TTS wird für PDF nicht unterstützt",
|
||||
"Override Book Font": "Buch-Schriftart überschreiben",
|
||||
"Apply to All Books": "Auf alle Bücher anwenden",
|
||||
"Apply to This Book": "Auf dieses Buch anwenden",
|
||||
@@ -173,9 +171,6 @@
|
||||
"Token": "Token",
|
||||
"Your OTP token": "Ihr OTP-Token",
|
||||
"Verify token": "Token überprüfen",
|
||||
"Sign in with Google": "Mit Google anmelden",
|
||||
"Sign in with Apple": "Mit Apple anmelden",
|
||||
"Sign in with GitHub": "Mit GitHub anmelden",
|
||||
"Account": "Konto",
|
||||
"Failed to delete user. Please try again later.": "Benutzer konnte nicht gelöscht werden. Bitte versuchen Sie es später erneut.",
|
||||
"Community Support": "Community-Support",
|
||||
@@ -193,7 +188,7 @@
|
||||
"No supported files found. Supported formats: {{formats}}": "Keine unterstützten Dateien gefunden. Unterstützte Formate: {{formats}}",
|
||||
"Drop to Import Books": "Zum Importieren von Büchern ablegen",
|
||||
"Custom": "Eigen",
|
||||
"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": "Die ganze Welt ist eine Bühne,\nUnd alle Männer und Frauen sind bloß Spieler;\nSie haben ihre Abgänge und ihre Auftritte,\nUnd ein Mann spielt in seinem Leben viele Rollen,\nSeine Taten sind sieben Zeitalter.\n\n— William Shakespeare",
|
||||
"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": "Die ganze Welt ist eine Bühne,\nUnd alle Männer und Frauen sind bloß Spieler;\nSie haben ihre Abgänge und ihre Auftritte,\nUnd ein Mann spielt in seinem Leben viele Rollen,\nSeine Taten sind sieben Zeitalter.\n\n— William Shakespeare",
|
||||
"Custom Theme": "Benutzerdefiniertes Thema",
|
||||
"Theme Name": "Themenname",
|
||||
"Text Color": "Textfarbe",
|
||||
@@ -338,11 +333,11 @@
|
||||
"Fit": "Anpassen",
|
||||
"Reset {{settings}}": "{{settings}} zurücksetzen",
|
||||
"Reset Settings": "Einstellungen zurücksetzen",
|
||||
"{{count}} pages left in chapter_one": "{{count}} Seite verbleibend im Kapitel",
|
||||
"{{count}} pages left in chapter_other": "{{count}} Seiten verbleibend im Kapitel",
|
||||
"{{count}} pages left in chapter_one": "<0>{{count}}</0><1> Seite verbleibend im Kapitel</1>",
|
||||
"{{count}} pages left in chapter_other": "<0>{{count}}</0><1> Seiten verbleibend im Kapitel</1>",
|
||||
"Show Remaining Pages": "Verbleibende Seiten anzeigen",
|
||||
"Source Han Serif CN VF": "Source Han Serif",
|
||||
"Huiwen-mincho": "Huiwen Mincho",
|
||||
"Source Han Serif CN": "Source Han Serif",
|
||||
"Huiwen-MinchoGBK": "Huiwen Mincho",
|
||||
"KingHwa_OldSong": "KingHwa Song",
|
||||
"Manage Subscription": "Abo verwalten",
|
||||
"Coming Soon": "Demnächst verfügbar",
|
||||
@@ -603,11 +598,10 @@
|
||||
"Size": "Größe",
|
||||
"Cover": "Cover",
|
||||
"Contain": "Inhalt",
|
||||
"{{number}} pages left in chapter": "{{number}} Seiten verbleibend im Kapitel",
|
||||
"{{number}} pages left in chapter": "<0>{{number}}</0><1> Seiten verbleibend im Kapitel</1>",
|
||||
"Device": "Gerät",
|
||||
"E-Ink Mode": "E-Ink-Modus",
|
||||
"Highlight Colors": "Hervorhebungsfarben",
|
||||
"Auto Screen Brightness": "Automatische Bildschirmhelligkeit",
|
||||
"Pagination": "Seitenumbruch",
|
||||
"Disable Double Tap": "Doppeltippen deaktivieren",
|
||||
"Tap to Paginate": "Tippen zum Blättern",
|
||||
@@ -656,5 +650,457 @@
|
||||
"Update email": "E-Mail aktualisieren",
|
||||
"Current email": "Aktuelle E-Mail",
|
||||
"Update Email": "E-Mail aktualisieren",
|
||||
"All": "Alle"
|
||||
"All": "Alle",
|
||||
"Unable to open book": "Buch kann nicht geöffnet werden",
|
||||
"Punctuation": "Interpunktion",
|
||||
"Replace Quotation Marks": "Anführungszeichen ersetzen",
|
||||
"Enabled only in vertical layout.": "Nur im vertikalen Layout aktiviert.",
|
||||
"No Conversion": "Keine Konvertierung",
|
||||
"Simplified to Traditional": "Vereinfacht → Traditionell",
|
||||
"Traditional to Simplified": "Traditionell → Vereinfacht",
|
||||
"Simplified to Traditional (Taiwan)": "Vereinfacht → Traditionell (Taiwan)",
|
||||
"Simplified to Traditional (Hong Kong)": "Vereinfacht → Traditionell (Hongkong)",
|
||||
"Simplified to Traditional (Taiwan), with phrases": "Vereinfacht → Traditionell (Taiwan • Phrasen)",
|
||||
"Traditional (Taiwan) to Simplified": "Traditionell (Taiwan) → Vereinfacht",
|
||||
"Traditional (Hong Kong) to Simplified": "Traditionell (Hongkong) → Vereinfacht",
|
||||
"Traditional (Taiwan) to Simplified, with phrases": "Traditionell (Taiwan • Phrasen) → Vereinfacht",
|
||||
"Convert Simplified and Traditional Chinese": "Vereinfach./Traditionell konvertieren",
|
||||
"Convert Mode": "Konvertierungsmodus",
|
||||
"Failed to auto-save book cover for lock screen: {{error}}": "Automatisches Speichern des Buchcovers für den Sperrbildschirm fehlgeschlagen: {{error}}",
|
||||
"Download from Cloud": "Aus der Cloud herunterladen",
|
||||
"Upload to Cloud": "In die Cloud hochladen",
|
||||
"Clear Custom Fonts": "Benutzerdefinierte Schriftarten löschen",
|
||||
"Columns": "Spalten",
|
||||
"OPDS Catalogs": "OPDS-Kataloge",
|
||||
"Adding LAN addresses is not supported in the web app version.": "Das Hinzufügen von LAN-Adressen wird in der Web-App nicht unterstützt.",
|
||||
"Invalid OPDS catalog. Please check the URL.": "Ungültiger OPDS-Katalog. Bitte überprüfe die URL.",
|
||||
"Browse and download books from online catalogs": "Bücher aus Online-Katalogen durchsuchen und herunterladen",
|
||||
"My Catalogs": "Meine Kataloge",
|
||||
"Add Catalog": "Katalog hinzufügen",
|
||||
"No catalogs yet": "Noch keine Kataloge",
|
||||
"Add your first OPDS catalog to start browsing books": "Füge deinen ersten OPDS-Katalog hinzu, um Bücher zu durchsuchen.",
|
||||
"Add Your First Catalog": "Ersten Katalog hinzufügen",
|
||||
"Browse": "Durchsuchen",
|
||||
"Popular Catalogs": "Beliebte Kataloge",
|
||||
"Add": "Hinzufügen",
|
||||
"Add OPDS Catalog": "OPDS-Katalog hinzufügen",
|
||||
"Catalog Name": "Katalogname",
|
||||
"My Calibre Library": "Meine Calibre-Bibliothek",
|
||||
"OPDS URL": "OPDS-URL",
|
||||
"Username (optional)": "Benutzername (optional)",
|
||||
"Password (optional)": "Passwort (optional)",
|
||||
"Description (optional)": "Beschreibung (optional)",
|
||||
"A brief description of this catalog": "Kurzbeschreibung dieses Katalogs",
|
||||
"Validating...": "Wird überprüft...",
|
||||
"View All": "Alle anzeigen",
|
||||
"Forward": "Weiter",
|
||||
"Home": "Start",
|
||||
"{{count}} items_one": "{{count}} Element",
|
||||
"{{count}} items_other": "{{count}} Elemente",
|
||||
"Download completed": "Download abgeschlossen",
|
||||
"Download failed": "Download fehlgeschlagen",
|
||||
"Open Access": "Offener Zugriff",
|
||||
"Borrow": "Ausleihen",
|
||||
"Buy": "Kaufen",
|
||||
"Subscribe": "Abonnieren",
|
||||
"Sample": "Leseprobe",
|
||||
"Download": "Herunterladen",
|
||||
"Open & Read": "Öffnen & Lesen",
|
||||
"Tags": "Tags",
|
||||
"Tag": "Tag",
|
||||
"First": "Erste",
|
||||
"Previous": "Vorherige",
|
||||
"Next": "Nächste",
|
||||
"Last": "Letzte",
|
||||
"Cannot Load Page": "Seite kann nicht geladen werden",
|
||||
"An error occurred": "Ein Fehler ist aufgetreten",
|
||||
"Online Library": "Online-Bibliothek",
|
||||
"URL must start with http:// or https://": "Die URL muss mit http:// oder https:// beginnen",
|
||||
"Title, Author, Tag, etc...": "Titel, Autor, Tag, etc...",
|
||||
"Query": "Suchbegriff",
|
||||
"Subject": "Thema",
|
||||
"Enter {{terms}}": "Gib {{terms}} ein",
|
||||
"No search results found": "Keine Suchergebnisse gefunden",
|
||||
"Failed to load OPDS feed: {{status}} {{statusText}}": "OPDS-Feed konnte nicht geladen werden: {{status}} {{statusText}}",
|
||||
"Search in {{title}}": "Suche in {{title}}",
|
||||
"Manage Storage": "Speicher verwalten",
|
||||
"Failed to load files": "Dateien konnten nicht geladen werden",
|
||||
"Deleted {{count}} file(s)_one": "{{count}} Datei gelöscht",
|
||||
"Deleted {{count}} file(s)_other": "{{count}} Dateien gelöscht",
|
||||
"Failed to delete {{count}} file(s)_one": "Löschen von {{count}} Datei fehlgeschlagen",
|
||||
"Failed to delete {{count}} file(s)_other": "Löschen von {{count}} Dateien fehlgeschlagen",
|
||||
"Failed to delete files": "Dateien konnten nicht gelöscht werden",
|
||||
"Total Files": "Gesamtdateien",
|
||||
"Total Size": "Gesamtgröße",
|
||||
"Quota": "Kontingent",
|
||||
"Used": "Verwendet",
|
||||
"Files": "Dateien",
|
||||
"Search files...": "Dateien suchen...",
|
||||
"Newest First": "Neueste zuerst",
|
||||
"Oldest First": "Älteste zuerst",
|
||||
"Largest First": "Größte zuerst",
|
||||
"Smallest First": "Kleinste zuerst",
|
||||
"Name A-Z": "Name A–Z",
|
||||
"Name Z-A": "Name Z–A",
|
||||
"{{count}} selected_one": "{{count}} ausgewählt",
|
||||
"{{count}} selected_other": "{{count}} ausgewählt",
|
||||
"Delete Selected": "Ausgewählte löschen",
|
||||
"Created": "Erstellt",
|
||||
"No files found": "Keine Dateien gefunden",
|
||||
"No files uploaded yet": "Noch keine Dateien hochgeladen",
|
||||
"files": "Dateien",
|
||||
"Page {{current}} of {{total}}": "Seite {{current}} von {{total}}",
|
||||
"Are you sure to delete {{count}} selected file(s)?_one": "Möchten Sie {{count}} ausgewählte Datei wirklich löschen?",
|
||||
"Are you sure to delete {{count}} selected file(s)?_other": "Möchten Sie {{count}} ausgewählte Dateien wirklich löschen?",
|
||||
"Cloud Storage Usage": "Cloud-Speichernutzung",
|
||||
"Rename Group": "Gruppe umbenennen",
|
||||
"From Directory": "Aus Verzeichnis",
|
||||
"Successfully imported {{count}} book(s)_one": "Erfolgreich 1 Buch importiert",
|
||||
"Successfully imported {{count}} book(s)_other": "Erfolgreich {{count}} Bücher importiert",
|
||||
"Count": "Anzahl",
|
||||
"Start Page": "Startseite",
|
||||
"Search in OPDS Catalog...": "Im OPDS-Katalog suchen...",
|
||||
"Please log in to use advanced TTS features": "Bitte melde dich an, um erweiterte TTS-Funktionen zu nutzen",
|
||||
"Word limit of 30 words exceeded.": "Das Wortlimit von 30 Wörtern wurde überschritten.",
|
||||
"Proofread": "Korrekturlesen",
|
||||
"Current selection": "Aktuelle Auswahl",
|
||||
"All occurrences in this book": "Alle Vorkommen in diesem Buch",
|
||||
"All occurrences in your library": "Alle Vorkommen in Ihrer Bibliothek",
|
||||
"Selected text:": "Ausgewählter Text:",
|
||||
"Replace with:": "Ersetzen durch:",
|
||||
"Enter text...": "Text eingeben …",
|
||||
"Case sensitive:": "Groß-/Kleinschreibung:",
|
||||
"Scope:": "Geltungsbereich:",
|
||||
"Selection": "Auswahl",
|
||||
"Library": "Bibliothek",
|
||||
"Yes": "Ja",
|
||||
"No": "Nein",
|
||||
"Proofread Replacement Rules": "Korrektur-Ersetzungsregeln",
|
||||
"Selected Text Rules": "Regeln für ausgewählten Text",
|
||||
"No selected text replacement rules": "Keine Ersetzungsregeln für ausgewählten Text",
|
||||
"Book Specific Rules": "Buchspezifische Regeln",
|
||||
"No book-level replacement rules": "Keine Ersetzungsregeln auf Buchebene",
|
||||
"Disable Quick Action": "Schnellaktion deaktivieren",
|
||||
"Enable Quick Action on Selection": "Schnellaktion bei Auswahl aktivieren",
|
||||
"None": "Keine",
|
||||
"Annotation Tools": "Anmerkungswerkzeuge",
|
||||
"Enable Quick Actions": "Schnellaktionen aktivieren",
|
||||
"Quick Action": "Schnellaktion",
|
||||
"Copy to Notebook": "In Notizbuch kopieren",
|
||||
"Copy text after selection": "Text nach Auswahl kopieren",
|
||||
"Highlight text after selection": "Text nach Auswahl hervorheben",
|
||||
"Annotate text after selection": "Text nach Auswahl annotieren",
|
||||
"Search text after selection": "Text nach Auswahl suchen",
|
||||
"Look up text in dictionary after selection": "Text nach Auswahl im Wörterbuch nachschlagen",
|
||||
"Look up text in Wikipedia after selection": "Text nach Auswahl in Wikipedia nachschlagen",
|
||||
"Translate text after selection": "Text nach Auswahl übersetzen",
|
||||
"Read text aloud after selection": "Text nach Auswahl vorlesen",
|
||||
"Proofread text after selection": "Text nach Auswahl Korrektur lesen",
|
||||
"{{activeCount}} active, {{pendingCount}} pending": "{{activeCount}} aktiv, {{pendingCount}} ausstehend",
|
||||
"{{failedCount}} failed": "{{failedCount}} fehlgeschlagen",
|
||||
"Waiting...": "Warten...",
|
||||
"Failed": "Fehlgeschlagen",
|
||||
"Completed": "Abgeschlossen",
|
||||
"Cancelled": "Abgebrochen",
|
||||
"Retry": "Erneut versuchen",
|
||||
"Active": "Aktiv",
|
||||
"Transfer Queue": "Übertragungswarteschlange",
|
||||
"Upload All": "Alle hochladen",
|
||||
"Download All": "Alle herunterladen",
|
||||
"Resume Transfers": "Übertragungen fortsetzen",
|
||||
"Pause Transfers": "Übertragungen pausieren",
|
||||
"Pending": "Ausstehend",
|
||||
"No transfers": "Keine Übertragungen",
|
||||
"Retry All": "Alle erneut versuchen",
|
||||
"Clear Completed": "Abgeschlossene löschen",
|
||||
"Clear Failed": "Fehlgeschlagene löschen",
|
||||
"Upload queued: {{title}}": "Upload in Warteschlange: {{title}}",
|
||||
"Download queued: {{title}}": "Download in Warteschlange: {{title}}",
|
||||
"Book not found in library": "Buch nicht in der Bibliothek gefunden",
|
||||
"Unknown error": "Unbekannter Fehler",
|
||||
"Please log in to continue": "Bitte melden Sie sich an, um fortzufahren",
|
||||
"Cloud File Transfers": "Cloud-Dateiübertragungen",
|
||||
"Show Search Results": "Suchergebnisse anzeigen",
|
||||
"Search results for '{{term}}'": "Ergebnisse für '{{term}}'",
|
||||
"Close Search": "Suche schließen",
|
||||
"Previous Result": "Vorheriges Ergebnis",
|
||||
"Next Result": "Nächstes Ergebnis",
|
||||
"Bookmarks": "Lesezeichen",
|
||||
"Annotations": "Anmerkungen",
|
||||
"Show Results": "Ergebnisse anzeigen",
|
||||
"Clear search": "Suche löschen",
|
||||
"Clear search history": "Suchverlauf löschen",
|
||||
"Tap to Toggle Footer": "Tippen, um Fußzeile umzuschalten",
|
||||
"Show Current Time": "Aktuelle Uhrzeit anzeigen",
|
||||
"Use 24 Hour Clock": "24-Stunden-Format verwenden",
|
||||
"Show Current Battery Status": "Aktuellen Akkustand anzeigen",
|
||||
"Exported successfully": "Erfolgreich exportiert",
|
||||
"Book exported successfully.": "Buch erfolgreich exportiert.",
|
||||
"Failed to export the book.": "Buch konnte nicht exportiert werden.",
|
||||
"Export Book": "Buch exportieren",
|
||||
"Whole word:": "Ganzes Wort:",
|
||||
"Error": "Fehler",
|
||||
"Unable to load the article. Try searching directly on {{link}}.": "Artikel kann nicht geladen werden. Versuchen Sie die direkte Suche auf {{link}}.",
|
||||
"Unable to load the word. Try searching directly on {{link}}.": "Wort kann nicht geladen werden. Versuchen Sie die direkte Suche auf {{link}}.",
|
||||
"Date Published": "Veröffentlichungsdatum",
|
||||
"Only for TTS:": "Nur für TTS:",
|
||||
"Uploaded": "Hochgeladen",
|
||||
"Downloaded": "Heruntergeladen",
|
||||
"Deleted": "Gelöscht",
|
||||
"Note:": "Notiz:",
|
||||
"Time:": "Zeit:",
|
||||
"Format Options": "Formatoptionen",
|
||||
"Export Date": "Exportdatum",
|
||||
"Chapter Titles": "Kapiteltitel",
|
||||
"Chapter Separator": "Kapiteltrennzeichen",
|
||||
"Highlights": "Markierungen",
|
||||
"Note Date": "Notizdatum",
|
||||
"Advanced": "Erweitert",
|
||||
"Hide": "Ausblenden",
|
||||
"Show": "Anzeigen",
|
||||
"Use Custom Template": "Benutzerdefinierte Vorlage verwenden",
|
||||
"Export Template": "Exportvorlage",
|
||||
"Template Syntax:": "Vorlagensyntax:",
|
||||
"Insert value": "Wert einfügen",
|
||||
"Format date (locale)": "Datum formatieren (Gebietsschema)",
|
||||
"Format date (custom)": "Datum formatieren (benutzerdefiniert)",
|
||||
"Conditional": "Bedingung",
|
||||
"Loop": "Schleife",
|
||||
"Available Variables:": "Verfügbare Variablen:",
|
||||
"Book title": "Buchtitel",
|
||||
"Book author": "Buchautor",
|
||||
"Export date": "Exportdatum",
|
||||
"Array of chapters": "Array von Kapiteln",
|
||||
"Chapter title": "Kapiteltitel",
|
||||
"Array of annotations": "Array von Anmerkungen",
|
||||
"Highlighted text": "Markierter Text",
|
||||
"Annotation note": "Anmerkungsnotiz",
|
||||
"Date Format Tokens:": "Datumsformat-Token:",
|
||||
"Year (4 digits)": "Jahr (4 Ziffern)",
|
||||
"Month (01-12)": "Monat (01-12)",
|
||||
"Day (01-31)": "Tag (01-31)",
|
||||
"Hour (00-23)": "Stunde (00-23)",
|
||||
"Minute (00-59)": "Minute (00-59)",
|
||||
"Second (00-59)": "Sekunde (00-59)",
|
||||
"Show Source": "Quelle anzeigen",
|
||||
"No content to preview": "Kein Inhalt zur Vorschau",
|
||||
"Export": "Exportieren",
|
||||
"Set Timeout": "Zeitlimit festlegen",
|
||||
"Select Voice": "Stimme auswählen",
|
||||
"Toggle Sticky Bottom TTS Bar": "Fixierte TTS-Leiste umschalten",
|
||||
"Display what I'm reading on Discord": "Zeige was ich auf Discord lese",
|
||||
"Show on Discord": "Auf Discord zeigen",
|
||||
"Instant {{action}}": "Sofort {{action}}",
|
||||
"Instant {{action}} Disabled": "Sofort {{action}} deaktiviert",
|
||||
"Annotation": "Anmerkung",
|
||||
"Reset Template": "Vorlage zurücksetzen",
|
||||
"Annotation style": "Anmerkungsstil",
|
||||
"Annotation color": "Anmerkungsfarbe",
|
||||
"Annotation time": "Anmerkungszeit",
|
||||
"AI": "KI",
|
||||
"Are you sure you want to re-index this book?": "Möchten Sie dieses Buch wirklich neu indizieren?",
|
||||
"Enable AI in Settings": "KI in den Einstellungen aktivieren",
|
||||
"Index This Book": "Dieses Buch indizieren",
|
||||
"Enable AI search and chat for this book": "KI-Suche und Chat für dieses Buch aktivieren",
|
||||
"Start Indexing": "Indizierung starten",
|
||||
"Indexing book...": "Buch wird indiziert...",
|
||||
"Preparing...": "Vorbereitung...",
|
||||
"Delete this conversation?": "Diese Unterhaltung löschen?",
|
||||
"No conversations yet": "Noch keine Unterhaltungen",
|
||||
"Start a new chat to ask questions about this book": "Starten Sie einen neuen Chat, um Fragen zu diesem Buch zu stellen",
|
||||
"Rename": "Umbenennen",
|
||||
"New Chat": "Neuer Chat",
|
||||
"Chat": "Chat",
|
||||
"Please enter a model ID": "Bitte geben Sie eine Modell-ID ein",
|
||||
"Model not available or invalid": "Modell nicht verfügbar oder ungültig",
|
||||
"Failed to validate model": "Modellvalidierung fehlgeschlagen",
|
||||
"Couldn't connect to Ollama. Is it running?": "Verbindung zu Ollama fehlgeschlagen. Läuft es?",
|
||||
"Invalid API key or connection failed": "Ungültiger API-Schlüssel oder Verbindung fehlgeschlagen",
|
||||
"Connection failed": "Verbindung fehlgeschlagen",
|
||||
"AI Assistant": "KI-Assistent",
|
||||
"Enable AI Assistant": "KI-Assistent aktivieren",
|
||||
"Provider": "Anbieter",
|
||||
"Ollama (Local)": "Ollama (Lokal)",
|
||||
"AI Gateway (Cloud)": "KI-Gateway (Cloud)",
|
||||
"Ollama Configuration": "Ollama-Konfiguration",
|
||||
"Refresh Models": "Modelle aktualisieren",
|
||||
"AI Model": "KI-Modell",
|
||||
"No models detected": "Keine Modelle erkannt",
|
||||
"AI Gateway Configuration": "KI-Gateway-Konfiguration",
|
||||
"Choose from a selection of high-quality, economical AI models. You can also bring your own model by selecting \"Custom Model\" below.": "Wählen Sie aus einer Auswahl hochwertiger, wirtschaftlicher KI-Modelle. Sie können auch Ihr eigenes Modell verwenden, indem Sie unten \"Benutzerdefiniertes Modell\" auswählen.",
|
||||
"API Key": "API-Schlüssel",
|
||||
"Get Key": "Schlüssel erhalten",
|
||||
"Model": "Modell",
|
||||
"Custom Model...": "Benutzerdefiniertes Modell...",
|
||||
"Custom Model ID": "Benutzerdefinierte Modell-ID",
|
||||
"Validate": "Validieren",
|
||||
"Model available": "Modell verfügbar",
|
||||
"Connection": "Verbindung",
|
||||
"Test Connection": "Verbindung testen",
|
||||
"Connected": "Verbunden",
|
||||
"Custom Colors": "Benutzerdefinierte Farben",
|
||||
"Color E-Ink Mode": "Farb-E-Ink-Modus",
|
||||
"Reading Ruler": "Lese-Lineal",
|
||||
"Enable Reading Ruler": "Lese-Lineal aktivieren",
|
||||
"Lines to Highlight": "Hervorzuhebende Zeilen",
|
||||
"Ruler Color": "Linealfarbe",
|
||||
"Command Palette": "Befehlspalette",
|
||||
"Search settings and actions...": "Einstellungen und Aktionen suchen...",
|
||||
"No results found for": "Keine Ergebnisse gefunden für",
|
||||
"Type to search settings and actions": "Tippen, um Einstellungen und Aktionen zu suchen",
|
||||
"Recent": "Zuletzt verwendet",
|
||||
"navigate": "navigieren",
|
||||
"select": "auswählen",
|
||||
"close": "schließen",
|
||||
"Search Settings": "Einstellungen suchen",
|
||||
"Page Margins": "Seitenränder",
|
||||
"AI Provider": "KI-Anbieter",
|
||||
"Ollama URL": "Ollama-URL",
|
||||
"Ollama Model": "Ollama-Modell",
|
||||
"AI Gateway Model": "AI Gateway-Modell",
|
||||
"Actions": "Aktionen",
|
||||
"Navigation": "Navigation",
|
||||
"Set status for {{count}} book(s)_one": "Status für {{count}} Buch festlegen",
|
||||
"Set status for {{count}} book(s)_other": "Status für {{count}} Bücher festlegen",
|
||||
"Mark as Unread": "Als ungelesen markieren",
|
||||
"Mark as Finished": "Als beendet markieren",
|
||||
"Finished": "Beendet",
|
||||
"Unread": "Ungelesen",
|
||||
"Clear Status": "Status löschen",
|
||||
"Status": "Status",
|
||||
"Loading": "Laden...",
|
||||
"Exit Paragraph Mode": "Absatzmodus verlassen",
|
||||
"Paragraph Mode": "Absatzmodus",
|
||||
"Embedding Model": "Einbettungsmodell",
|
||||
"{{count}} book(s) synced_one": "{{count}} Buch synchronisiert",
|
||||
"{{count}} book(s) synced_other": "{{count}} Bücher synchronisiert",
|
||||
"Unable to start RSVP": "RSVP kann nicht gestartet werden",
|
||||
"RSVP not supported for PDF": "RSVP wird für PDF nicht unterstützt",
|
||||
"Select Chapter": "Kapitel auswählen",
|
||||
"Context": "Kontext",
|
||||
"Ready": "Bereit",
|
||||
"Chapter Progress": "Kapitelfortschritt",
|
||||
"words": "Wörter",
|
||||
"{{time}} left": "{{time}} übrig",
|
||||
"Reading progress": "Lesefortschritt",
|
||||
"Click to seek": "Klicken zum Suchen",
|
||||
"Skip back 15 words": "15 Wörter zurück",
|
||||
"Back 15 words (Shift+Left)": "15 Wörter zurück (Shift+Links)",
|
||||
"Pause (Space)": "Pause (Leertaste)",
|
||||
"Play (Space)": "Abspielen (Leertaste)",
|
||||
"Skip forward 15 words": "15 Wörter vor",
|
||||
"Forward 15 words (Shift+Right)": "15 Wörter vor (Shift+Rechts)",
|
||||
"Decrease speed": "Geschwindigkeit verringern",
|
||||
"Slower (Left/Down)": "Langsamer (Links/Unten)",
|
||||
"Increase speed": "Geschwindigkeit erhöhen",
|
||||
"Faster (Right/Up)": "Schneller (Rechts/Oben)",
|
||||
"Start RSVP Reading": "RSVP-Lesen starten",
|
||||
"Choose where to start reading": "Wählen Sie, wo das Lesen beginnen soll",
|
||||
"From Chapter Start": "Vom Kapitelanfang",
|
||||
"Start reading from the beginning of the chapter": "Ab dem Anfang des Kapitels lesen",
|
||||
"Resume": "Fortsetzen",
|
||||
"Continue from where you left off": "Dort fortfahren, wo Sie aufgehört haben",
|
||||
"From Current Page": "Von der aktuellen Seite",
|
||||
"Start from where you are currently reading": "Dort beginnen, wo Sie gerade lesen",
|
||||
"From Selection": "Von der Auswahl",
|
||||
"Speed Reading Mode": "Schnelllesemodus",
|
||||
"Scroll left": "Nach links scrollen",
|
||||
"Scroll right": "Nach rechts scrollen",
|
||||
"Library Sync Progress": "Bibliotheks-Synchronisierungsfortschritt",
|
||||
"Back to library": "Zurück zur Bibliothek",
|
||||
"Group by...": "Gruppieren nach...",
|
||||
"Export as Plain Text": "Als reinen Text exportieren",
|
||||
"Export as Markdown": "Als Markdown exportieren",
|
||||
"Show Page Navigation Buttons": "Navigationsschaltflächen",
|
||||
"Page {{number}}": "Seite {{number}}",
|
||||
"highlight": "Hervorhebung",
|
||||
"underline": "Unterstreichung",
|
||||
"squiggly": "geschlängelt",
|
||||
"red": "rot",
|
||||
"violet": "violett",
|
||||
"blue": "blau",
|
||||
"green": "grün",
|
||||
"yellow": "gelb",
|
||||
"Select {{style}} style": "Stil {{style}} auswählen",
|
||||
"Select {{color}} color": "Farbe {{color}} auswählen",
|
||||
"Close Book": "Buch schließen",
|
||||
"Speed Reading": "Schnelllesen",
|
||||
"Close Speed Reading": "Schnelllesen schließen",
|
||||
"Authors": "Autoren",
|
||||
"Books": "Bücher",
|
||||
"Groups": "Gruppen",
|
||||
"Back to TTS Location": "Zurück zur TTS-Position",
|
||||
"Metadata": "Metadaten",
|
||||
"Image viewer": "Bildbetrachter",
|
||||
"Previous Image": "Vorheriges Bild",
|
||||
"Next Image": "Nächstes Bild",
|
||||
"Zoomed": "Gezoomt",
|
||||
"Zoom level": "Zoomstufe",
|
||||
"Table viewer": "Tabellenbetrachter",
|
||||
"Unable to connect to Readwise. Please check your network connection.": "Verbindung zu Readwise nicht möglich. Bitte überprüfen Sie Ihre Netzwerkverbindung.",
|
||||
"Invalid Readwise access token": "Ungültiges Readwise-Zugriffstoken",
|
||||
"Disconnected from Readwise": "Von Readwise getrennt",
|
||||
"Never": "Nie",
|
||||
"Readwise Settings": "Readwise-Einstellungen",
|
||||
"Connected to Readwise": "Mit Readwise verbunden",
|
||||
"Last synced: {{time}}": "Zuletzt synchronisiert: {{time}}",
|
||||
"Sync Enabled": "Synchronisierung aktiviert",
|
||||
"Disconnect": "Trennen",
|
||||
"Connect your Readwise account to sync highlights.": "Verbinden Sie Ihr Readwise-Konto, um Highlights zu synchronisieren.",
|
||||
"Get your access token at": "Holen Sie sich Ihr Zugriffstoken unter",
|
||||
"Access Token": "Zugriffstoken",
|
||||
"Paste your Readwise access token": "Fügen Sie Ihr Readwise-Zugriffstoken ein",
|
||||
"Config": "Konfiguration",
|
||||
"Readwise Sync": "Readwise-Synchronisierung",
|
||||
"Push Highlights": "Highlights übertragen",
|
||||
"Highlights synced to Readwise": "Highlights mit Readwise synchronisiert",
|
||||
"Readwise sync failed: no internet connection": "Readwise-Synchronisierung fehlgeschlagen: Keine Internetverbindung",
|
||||
"Readwise sync failed: {{error}}": "Readwise-Synchronisierung fehlgeschlagen: {{error}}",
|
||||
"System Screen Brightness": "System-Bildschirmhelligkeit",
|
||||
"Page:": "Seite:",
|
||||
"Page: {{number}}": "Seite: {{number}}",
|
||||
"Annotation page number": "Seitenzahl der Anmerkung",
|
||||
"Translating...": "Übersetzen...",
|
||||
"Show Battery Percentage": "Akkustand in Prozent anzeigen",
|
||||
"Hide Scrollbar": "Scrollleiste ausblenden",
|
||||
"Skip to last reading position": "Zur letzten Leseposition springen",
|
||||
"Show context": "Kontext anzeigen",
|
||||
"Hide context": "Kontext ausblenden",
|
||||
"Decrease font size": "Schriftgröße verkleinern",
|
||||
"Increase font size": "Schriftgröße vergrößern",
|
||||
"Focus": "Fokus",
|
||||
"Theme color": "Themenfarbe",
|
||||
"Import failed": "Import fehlgeschlagen",
|
||||
"Available Formatters:": "Verfügbare Formatierer:",
|
||||
"Format date": "Datum formatieren",
|
||||
"Markdown block quote (> per line)": "Markdown-Blockzitat (> pro Zeile)",
|
||||
"Newlines to <br>": "Zeilenumbrüche zu <br>",
|
||||
"Change case": "Groß-/Kleinschreibung ändern",
|
||||
"Trim whitespace": "Leerzeichen entfernen",
|
||||
"Truncate to n characters": "Auf n Zeichen kürzen",
|
||||
"Replace text": "Text ersetzen",
|
||||
"Fallback value": "Ersatzwert",
|
||||
"Get length": "Länge ermitteln",
|
||||
"First/last element": "Erstes/letztes Element",
|
||||
"Join array": "Array verbinden",
|
||||
"Backup failed: {{error}}": "Sicherung fehlgeschlagen: {{error}}",
|
||||
"Select Backup": "Sicherung auswählen",
|
||||
"Restore failed: {{error}}": "Wiederherstellung fehlgeschlagen: {{error}}",
|
||||
"Backup & Restore": "Sichern & Wiederherstellen",
|
||||
"Create a backup of your library or restore from a previous backup. Restoring will merge with your current library.": "Erstellen Sie eine Sicherung Ihrer Bibliothek oder stellen Sie eine frühere Sicherung wieder her. Die Wiederherstellung wird mit Ihrer aktuellen Bibliothek zusammengeführt.",
|
||||
"Backup Library": "Bibliothek sichern",
|
||||
"Restore Library": "Bibliothek wiederherstellen",
|
||||
"Creating backup...": "Sicherung wird erstellt...",
|
||||
"Restoring library...": "Bibliothek wird wiederhergestellt...",
|
||||
"{{current}} of {{total}} items": "{{current}} von {{total}} Elementen",
|
||||
"Backup completed successfully!": "Sicherung erfolgreich abgeschlossen!",
|
||||
"Restore completed successfully!": "Wiederherstellung erfolgreich abgeschlossen!",
|
||||
"Your library has been saved to the selected location.": "Ihre Bibliothek wurde am ausgewählten Ort gespeichert.",
|
||||
"{{added}} books added, {{updated}} books updated.": "{{added}} Bücher hinzugefügt, {{updated}} Bücher aktualisiert.",
|
||||
"Operation failed": "Vorgang fehlgeschlagen",
|
||||
"Loading library...": "Bibliothek wird geladen...",
|
||||
"{{count}} books refreshed_one": "{{count}} Buch aktualisiert",
|
||||
"{{count}} books refreshed_other": "{{count}} Bücher aktualisiert",
|
||||
"Failed to refresh metadata": "Metadaten-Aktualisierung fehlgeschlagen",
|
||||
"Refresh Metadata": "Metadaten aktualisieren"
|
||||
}
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
"Auto Mode": "Αυτόματη λειτουργία",
|
||||
"Behavior": "Συμπεριφορά",
|
||||
"Book": "Βιβλίο",
|
||||
"Book Cover": "Εξώφυλλο βιβλίου",
|
||||
"Bookmark": "Σελιδοδείκτης",
|
||||
"Cancel": "Ακύρωση",
|
||||
"Chapter": "Κεφάλαιο",
|
||||
@@ -107,7 +106,6 @@
|
||||
"Wikipedia": "Βικιπαίδεια",
|
||||
"Writing Mode": "Λειτουργία γραφής",
|
||||
"Your Library": "Η βιβλιοθήκη σας",
|
||||
"TTS not supported for PDF": "Η μετατροπή κειμένου σε ομιλία δεν υποστηρίζεται για αρχεία PDF",
|
||||
"Override Book Font": "Παράκαμψη γραμματοσειράς βιβλίου",
|
||||
"Apply to All Books": "Εφαρμογή σε όλα τα βιβλία",
|
||||
"Apply to This Book": "Εφαρμογή σε αυτό το βιβλίο",
|
||||
@@ -174,9 +172,6 @@
|
||||
"Token": "Κωδικός επαλήθευσης",
|
||||
"Your OTP token": "Ο κωδικός OTP σας",
|
||||
"Verify token": "Επαλήθευση κωδικού",
|
||||
"Sign in with Google": "Σύνδεση με Google",
|
||||
"Sign in with Apple": "Σύνδεση με Apple",
|
||||
"Sign in with GitHub": "Σύνδεση με GitHub",
|
||||
"Account": "Λογαριασμός",
|
||||
"Failed to delete user. Please try again later.": "Αποτυχία διαγραφής χρήστη. Παρακαλώ δοκιμάστε ξανά αργότερα.",
|
||||
"Community Support": "Υποστήριξη κοινότητας",
|
||||
@@ -194,7 +189,7 @@
|
||||
"No supported files found. Supported formats: {{formats}}": "Δεν βρέθηκαν υποστηριζόμενα αρχεία. Υποστηριζόμενες μορφές: {{formats}}",
|
||||
"Drop to Import Books": "Ρίξτε για εισαγωγή βιβλίων",
|
||||
"Custom": "Προσαρμοσμένο",
|
||||
"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— William Shakespeare",
|
||||
"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— William Shakespeare",
|
||||
"Custom Theme": "Προσαρμοσμένο θέμα",
|
||||
"Theme Name": "Όνομα θέματος",
|
||||
"Text Color": "Χρώμα κειμένου",
|
||||
@@ -339,11 +334,11 @@
|
||||
"Fit": "Προσαρμογή",
|
||||
"Reset {{settings}}": "Επαναφορά {{settings}}",
|
||||
"Reset Settings": "Επαναφορά ρυθμίσεων",
|
||||
"{{count}} pages left in chapter_one": "Μένει {{count}} σελίδα",
|
||||
"{{count}} pages left in chapter_other": "Μένουν {{count}} σελίδες",
|
||||
"{{count}} pages left in chapter_one": "<1>Μένει </1><0>{{count}}</0><1> σελίδα</1>",
|
||||
"{{count}} pages left in chapter_other": "<1>Μένουν </1><0>{{count}}</0><1> σελίδες</1>",
|
||||
"Show Remaining Pages": "Εμφάνιση υπολοίπων",
|
||||
"Source Han Serif CN VF": "Source Han Serif",
|
||||
"Huiwen-mincho": "Huiwen Mincho",
|
||||
"Source Han Serif CN": "Source Han Serif",
|
||||
"Huiwen-MinchoGBK": "Huiwen Mincho",
|
||||
"KingHwa_OldSong": "KingHwa Song",
|
||||
"Manage Subscription": "Διαχείριση συνδρομής",
|
||||
"Coming Soon": "Έρχεται σύντομα",
|
||||
@@ -603,11 +598,10 @@
|
||||
"Size": "Μέγεθος",
|
||||
"Cover": "Εξώφυλλο",
|
||||
"Contain": "Περιέχει",
|
||||
"{{number}} pages left in chapter": "Μένουν {{number}} σελίδες στο κεφάλαιο",
|
||||
"{{number}} pages left in chapter": "<1>Μένουν </1><0>{{number}}</0><1> σελίδες στο κεφάλαιο</1>",
|
||||
"Device": "Συσκευή",
|
||||
"E-Ink Mode": "Λειτουργία E-Ink",
|
||||
"Highlight Colors": "Χρώματα επισήμανσης",
|
||||
"Auto Screen Brightness": "Αυτόματη φωτεινότητα οθόνης",
|
||||
"Pagination": "Σελιδοποίηση",
|
||||
"Disable Double Tap": "Απενεργοποίηση διπλού ταπ",
|
||||
"Tap to Paginate": "Ταπ για σελιδοποίηση",
|
||||
@@ -656,5 +650,457 @@
|
||||
"Update email": "Ενημέρωση email",
|
||||
"Current email": "Τρέχον email",
|
||||
"Update Email": "Ενημέρωση email",
|
||||
"All": "Όλα"
|
||||
"All": "Όλα",
|
||||
"Unable to open book": "Αδύνατη η άνοιγμα του βιβλίου",
|
||||
"Punctuation": "Στίξη",
|
||||
"Replace Quotation Marks": "Αντικατάσταση εισαγωγικών",
|
||||
"Enabled only in vertical layout.": "Ενεργοποιημένο μόνο σε κάθετη διάταξη.",
|
||||
"No Conversion": "Χωρίς μετατροπή",
|
||||
"Simplified to Traditional": "Απλοπ. → Παραδ.",
|
||||
"Traditional to Simplified": "Παραδ. → Απλοπ.",
|
||||
"Simplified to Traditional (Taiwan)": "Απλοπ. → Παραδ. (Ταϊβάν)",
|
||||
"Simplified to Traditional (Hong Kong)": "Απλοπ. → Παραδ. (Χονγκ Κονγκ)",
|
||||
"Simplified to Traditional (Taiwan), with phrases": "Απλοπ. → Παραδ. (Ταϊβάν • φράσεις)",
|
||||
"Traditional (Taiwan) to Simplified": "Παραδ. (Ταϊβάν) → Απλοπ.",
|
||||
"Traditional (Hong Kong) to Simplified": "Παραδ. (Χονγκ Κονγκ) → Απλοπ.",
|
||||
"Traditional (Taiwan) to Simplified, with phrases": "Παραδ. (Ταϊβάν • φράσεις) → Απλοπ.",
|
||||
"Convert Simplified and Traditional Chinese": "Μετατροπή Απλοπ./Παραδ. Κινέζικων",
|
||||
"Convert Mode": "Λειτουργία μετατροπής",
|
||||
"Failed to auto-save book cover for lock screen: {{error}}": "Αποτυχία αυτόματης αποθήκευσης εξωφύλλου βιβλίου για την οθόνη κλειδώματος: {{error}}",
|
||||
"Download from Cloud": "Λήψη από το Cloud",
|
||||
"Upload to Cloud": "Ανέβασμα στο Cloud",
|
||||
"Clear Custom Fonts": "Καθαρισμός προσαρμοσμένων γραμματοσειρών",
|
||||
"Columns": "Στήλες",
|
||||
"OPDS Catalogs": "Κατάλογοι OPDS",
|
||||
"Adding LAN addresses is not supported in the web app version.": "Η προσθήκη διευθύνσεων LAN δεν υποστηρίζεται στην έκδοση web της εφαρμογής.",
|
||||
"Invalid OPDS catalog. Please check the URL.": "Μη έγκυρος κατάλογος OPDS. Ελέγξτε το URL.",
|
||||
"Browse and download books from online catalogs": "Περιηγηθείτε και κατεβάστε βιβλία από online καταλόγους",
|
||||
"My Catalogs": "Οι Κατάλογοί μου",
|
||||
"Add Catalog": "Προσθήκη Καταλόγου",
|
||||
"No catalogs yet": "Δεν υπάρχουν ακόμα κατάλογοι",
|
||||
"Add your first OPDS catalog to start browsing books": "Προσθέστε τον πρώτο σας κατάλογο OPDS για να αρχίσετε την περιήγηση.",
|
||||
"Add Your First Catalog": "Προσθήκη Πρώτου Καταλόγου",
|
||||
"Browse": "Περιήγηση",
|
||||
"Popular Catalogs": "Δημοφιλείς Κατάλογοι",
|
||||
"Add": "Προσθήκη",
|
||||
"Add OPDS Catalog": "Προσθήκη Καταλόγου OPDS",
|
||||
"Catalog Name": "Όνομα Καταλόγου",
|
||||
"My Calibre Library": "Η Βιβλιοθήκη μου στο Calibre",
|
||||
"OPDS URL": "OPDS URL",
|
||||
"Username (optional)": "Όνομα χρήστη (προαιρετικό)",
|
||||
"Password (optional)": "Κωδικός πρόσβασης (προαιρετικό)",
|
||||
"Description (optional)": "Περιγραφή (προαιρετική)",
|
||||
"A brief description of this catalog": "Μια σύντομη περιγραφή του καταλόγου",
|
||||
"Validating...": "Γίνεται έλεγχος...",
|
||||
"View All": "Προβολή όλων",
|
||||
"Forward": "Μπροστά",
|
||||
"Home": "Αρχική",
|
||||
"{{count}} items_one": "{{count}} στοιχείο",
|
||||
"{{count}} items_other": "{{count}} στοιχεία",
|
||||
"Download completed": "Η λήψη ολοκληρώθηκε",
|
||||
"Download failed": "Η λήψη απέτυχε",
|
||||
"Open Access": "Ανοιχτή πρόσβαση",
|
||||
"Borrow": "Δανεισμός",
|
||||
"Buy": "Αγορά",
|
||||
"Subscribe": "Συνδρομή",
|
||||
"Sample": "Δείγμα",
|
||||
"Download": "Λήψη",
|
||||
"Open & Read": "Άνοιγμα & Ανάγνωση",
|
||||
"Tags": "Ετικέτες",
|
||||
"Tag": "Ετικέτα",
|
||||
"First": "Πρώτο",
|
||||
"Previous": "Προηγούμενο",
|
||||
"Next": "Επόμενο",
|
||||
"Last": "Τελευταίο",
|
||||
"Cannot Load Page": "Δεν είναι δυνατή η φόρτωση της σελίδας",
|
||||
"An error occurred": "Προέκυψε σφάλμα",
|
||||
"Online Library": "Online Βιβλιοθήκη",
|
||||
"URL must start with http:// or https://": "Το URL πρέπει να ξεκινά με http:// ή https://",
|
||||
"Title, Author, Tag, etc...": "Τίτλος, Συγγραφέας, Ετικέτα, κ.λπ...",
|
||||
"Query": "Ερώτημα",
|
||||
"Subject": "Θέμα",
|
||||
"Enter {{terms}}": "Εισαγάγετε {{terms}}",
|
||||
"No search results found": "Δεν βρέθηκαν αποτελέσματα αναζήτησης",
|
||||
"Failed to load OPDS feed: {{status}} {{statusText}}": "Αποτυχία φόρτωσης ροής OPDS: {{status}} {{statusText}}",
|
||||
"Search in {{title}}": "Αναζήτηση στο {{title}}",
|
||||
"Manage Storage": "Διαχείριση αποθήκευσης",
|
||||
"Failed to load files": "Αποτυχία φόρτωσης αρχείων",
|
||||
"Deleted {{count}} file(s)_one": "Διαγράφηκε {{count}} αρχείο",
|
||||
"Deleted {{count}} file(s)_other": "Διαγράφηκαν {{count}} αρχεία",
|
||||
"Failed to delete {{count}} file(s)_one": "Αποτυχία διαγραφής {{count}} αρχείου",
|
||||
"Failed to delete {{count}} file(s)_other": "Αποτυχία διαγραφής {{count}} αρχείων",
|
||||
"Failed to delete files": "Αποτυχία διαγραφής αρχείων",
|
||||
"Total Files": "Σύνολο αρχείων",
|
||||
"Total Size": "Συνολικό μέγεθος",
|
||||
"Quota": "Όριο",
|
||||
"Used": "Χρησιμοποιήθηκε",
|
||||
"Files": "Αρχεία",
|
||||
"Search files...": "Αναζήτηση αρχείων...",
|
||||
"Newest First": "Νεότερα πρώτα",
|
||||
"Oldest First": "Παλαιότερα πρώτα",
|
||||
"Largest First": "Μεγαλύτερα πρώτα",
|
||||
"Smallest First": "Μικρότερα πρώτα",
|
||||
"Name A-Z": "Όνομα A–Z",
|
||||
"Name Z-A": "Όνομα Z–A",
|
||||
"{{count}} selected_one": "{{count}} επιλεγμένο",
|
||||
"{{count}} selected_other": "{{count}} επιλεγμένα",
|
||||
"Delete Selected": "Διαγραφή επιλεγμένων",
|
||||
"Created": "Δημιουργήθηκε",
|
||||
"No files found": "Δεν βρέθηκαν αρχεία",
|
||||
"No files uploaded yet": "Δεν έχουν ανέβει αρχεία ακόμη",
|
||||
"files": "αρχεία",
|
||||
"Page {{current}} of {{total}}": "Σελίδα {{current}} από {{total}}",
|
||||
"Are you sure to delete {{count}} selected file(s)?_one": "Σίγουρα θέλετε να διαγράψετε {{count}} επιλεγμένο αρχείο;",
|
||||
"Are you sure to delete {{count}} selected file(s)?_other": "Σίγουρα θέλετε να διαγράψετε {{count}} επιλεγμένα αρχεία;",
|
||||
"Cloud Storage Usage": "Χρήση αποθήκευσης cloud",
|
||||
"Rename Group": "Μετονομασία ομάδας",
|
||||
"From Directory": "Από κατάλογο",
|
||||
"Successfully imported {{count}} book(s)_one": "Επιτυχής εισαγωγή 1 βιβλίου",
|
||||
"Successfully imported {{count}} book(s)_other": "Επιτυχής εισαγωγή {{count}} βιβλίων",
|
||||
"Count": "Πλήθος",
|
||||
"Start Page": "Αρχική Σελίδα",
|
||||
"Search in OPDS Catalog...": "Αναζήτηση στον κατάλογο OPDS...",
|
||||
"Please log in to use advanced TTS features": "Παρακαλώ συνδεθείτε για να χρησιμοποιήσετε προηγμένες λειτουργίες TTS",
|
||||
"Word limit of 30 words exceeded.": "Υπέρβαση ορίου 30 λέξεων.",
|
||||
"Proofread": "Διόρθωση",
|
||||
"Current selection": "Τρέχουσα επιλογή",
|
||||
"All occurrences in this book": "Όλες οι εμφανίσεις σε αυτό το βιβλίο",
|
||||
"All occurrences in your library": "Όλες οι εμφανίσεις στη βιβλιοθήκη σας",
|
||||
"Selected text:": "Επιλεγμένο κείμενο:",
|
||||
"Replace with:": "Αντικατάσταση με:",
|
||||
"Enter text...": "Εισαγωγή κειμένου…",
|
||||
"Case sensitive:": "Διάκριση πεζών-κεφαλαίων:",
|
||||
"Scope:": "Εύρος εφαρμογής:",
|
||||
"Selection": "Επιλογή",
|
||||
"Library": "Βιβλιοθήκη",
|
||||
"Yes": "Ναι",
|
||||
"No": "Όχι",
|
||||
"Proofread Replacement Rules": "Κανόνες αντικατάστασης διόρθωσης",
|
||||
"Selected Text Rules": "Κανόνες επιλεγμένου κειμένου",
|
||||
"No selected text replacement rules": "Δεν υπάρχουν κανόνες αντικατάστασης για το επιλεγμένο κείμενο",
|
||||
"Book Specific Rules": "Κανόνες για συγκεκριμένο βιβλίο",
|
||||
"No book-level replacement rules": "Δεν υπάρχουν κανόνες αντικατάστασης σε επίπεδο βιβλίου",
|
||||
"Disable Quick Action": "Απενεργοποίηση γρήγορης ενέργειας",
|
||||
"Enable Quick Action on Selection": "Ενεργοποίηση γρήγορης ενέργειας κατά την επιλογή",
|
||||
"None": "Καμία",
|
||||
"Annotation Tools": "Εργαλεία σχολιασμού",
|
||||
"Enable Quick Actions": "Ενεργοποίηση γρήγορων ενεργειών",
|
||||
"Quick Action": "Γρήγορη ενέργεια",
|
||||
"Copy to Notebook": "Αντιγραφή στο σημειωματάριο",
|
||||
"Copy text after selection": "Αντιγραφή κειμένου μετά την επιλογή",
|
||||
"Highlight text after selection": "Επισήμανση κειμένου μετά την επιλογή",
|
||||
"Annotate text after selection": "Σχολιασμός κειμένου μετά την επιλογή",
|
||||
"Search text after selection": "Αναζήτηση κειμένου μετά την επιλογή",
|
||||
"Look up text in dictionary after selection": "Αναζήτηση κειμένου στο λεξικό μετά την επιλογή",
|
||||
"Look up text in Wikipedia after selection": "Αναζήτηση κειμένου στη Wikipedia μετά την επιλογή",
|
||||
"Translate text after selection": "Μετάφραση κειμένου μετά την επιλογή",
|
||||
"Read text aloud after selection": "Ανάγνωση κειμένου μετά την επιλογή",
|
||||
"Proofread text after selection": "Διόρθωση κειμένου μετά την επιλογή",
|
||||
"{{activeCount}} active, {{pendingCount}} pending": "{{activeCount}} ενεργές, {{pendingCount}} σε αναμονή",
|
||||
"{{failedCount}} failed": "{{failedCount}} απέτυχαν",
|
||||
"Waiting...": "Αναμονή...",
|
||||
"Failed": "Απέτυχε",
|
||||
"Completed": "Ολοκληρώθηκε",
|
||||
"Cancelled": "Ακυρώθηκε",
|
||||
"Retry": "Επανάληψη",
|
||||
"Active": "Ενεργές",
|
||||
"Transfer Queue": "Ουρά μεταφορών",
|
||||
"Upload All": "Ανέβασμα όλων",
|
||||
"Download All": "Λήψη όλων",
|
||||
"Resume Transfers": "Συνέχιση μεταφορών",
|
||||
"Pause Transfers": "Παύση μεταφορών",
|
||||
"Pending": "Σε αναμονή",
|
||||
"No transfers": "Χωρίς μεταφορές",
|
||||
"Retry All": "Επανάληψη όλων",
|
||||
"Clear Completed": "Εκκαθάριση ολοκληρωμένων",
|
||||
"Clear Failed": "Εκκαθάριση αποτυχημένων",
|
||||
"Upload queued: {{title}}": "Ανέβασμα στην ουρά: {{title}}",
|
||||
"Download queued: {{title}}": "Λήψη στην ουρά: {{title}}",
|
||||
"Book not found in library": "Το βιβλίο δεν βρέθηκε στη βιβλιοθήκη",
|
||||
"Unknown error": "Άγνωστο σφάλμα",
|
||||
"Please log in to continue": "Παρακαλώ συνδεθείτε για να συνεχίσετε",
|
||||
"Cloud File Transfers": "Μεταφορές αρχείων στο cloud",
|
||||
"Show Search Results": "Εμφάνιση αποτελεσμάτων",
|
||||
"Search results for '{{term}}'": "Αποτελέσματα για '{{term}}'",
|
||||
"Close Search": "Κλείσιμο αναζήτησης",
|
||||
"Previous Result": "Προηγούμενο αποτέλεσμα",
|
||||
"Next Result": "Επόμενο αποτέλεσμα",
|
||||
"Bookmarks": "Σελιδοδείκτες",
|
||||
"Annotations": "Σχολιασμοί",
|
||||
"Show Results": "Εμφάνιση αποτελεσμάτων",
|
||||
"Clear search": "Εκκαθάριση αναζήτησης",
|
||||
"Clear search history": "Εκκαθάριση ιστορικού αναζήτησης",
|
||||
"Tap to Toggle Footer": "Πατήστε για εναλλαγή υποσέλιδου",
|
||||
"Show Current Time": "Εμφάνιση τρέχουσας ώρας",
|
||||
"Use 24 Hour Clock": "Χρήση 24ωρης μορφής ώρας",
|
||||
"Show Current Battery Status": "Εμφάνιση τρέχουσας κατάστασης μπαταρίας",
|
||||
"Exported successfully": "Εξαγωγή επιτυχής",
|
||||
"Book exported successfully.": "Το βιβλίο εξήχθη επιτυχώς.",
|
||||
"Failed to export the book.": "Αποτυχία εξαγωγής του βιβλίου.",
|
||||
"Export Book": "Εξαγωγή βιβλίου",
|
||||
"Whole word:": "Ολόκληρη λέξη:",
|
||||
"Error": "Σφάλμα",
|
||||
"Unable to load the article. Try searching directly on {{link}}.": "Αδυναμία φόρτωσης του άρθρου. Δοκιμάστε να αναζητήσετε απευθείας στο {{link}}.",
|
||||
"Unable to load the word. Try searching directly on {{link}}.": "Αδυναμία φόρτωσης της λέξης. Δοκιμάστε να αναζητήσετε απευθείας στο {{link}}.",
|
||||
"Date Published": "Ημερομηνία δημοσίευσης",
|
||||
"Only for TTS:": "Μόνο για TTS:",
|
||||
"Uploaded": "Μεταφορτώθηκε",
|
||||
"Downloaded": "Λήφθηκε",
|
||||
"Deleted": "Διαγράφηκε",
|
||||
"Note:": "Σημείωση:",
|
||||
"Time:": "Ώρα:",
|
||||
"Format Options": "Επιλογές μορφοποίησης",
|
||||
"Export Date": "Ημερομηνία εξαγωγής",
|
||||
"Chapter Titles": "Τίτλοι κεφαλαίων",
|
||||
"Chapter Separator": "Διαχωριστικό κεφαλαίων",
|
||||
"Highlights": "Επισημάνσεις",
|
||||
"Note Date": "Ημερομηνία σημείωσης",
|
||||
"Advanced": "Για προχωρημένους",
|
||||
"Hide": "Απόκρυψη",
|
||||
"Show": "Εμφάνιση",
|
||||
"Use Custom Template": "Χρήση προσαρμοσμένου προτύπου",
|
||||
"Export Template": "Πρότυπο εξαγωγής",
|
||||
"Template Syntax:": "Σύνταξη προτύπου:",
|
||||
"Insert value": "Εισαγωγή τιμής",
|
||||
"Format date (locale)": "Μορφοποίηση ημερομηνίας (τοπική)",
|
||||
"Format date (custom)": "Μορφοποίηση ημερομηνίας (προσαρμοσμένη)",
|
||||
"Conditional": "Υπό όρους",
|
||||
"Loop": "Βρόχος",
|
||||
"Available Variables:": "Διαθέσιμες μεταβλητές:",
|
||||
"Book title": "Τίτλος βιβλίου",
|
||||
"Book author": "Συγγραφέας βιβλίου",
|
||||
"Export date": "Ημερομηνία εξαγωγής",
|
||||
"Array of chapters": "Πίνακας κεφαλαίων",
|
||||
"Chapter title": "Τίτλος κεφαλαίου",
|
||||
"Array of annotations": "Πίνακας σχολιασμών",
|
||||
"Highlighted text": "Επισημασμένο κείμενο",
|
||||
"Annotation note": "Σημείωση σχολιασμού",
|
||||
"Date Format Tokens:": "Σύμβολα μορφοποίησης ημερομηνίας:",
|
||||
"Year (4 digits)": "Έτος (4 ψηφία)",
|
||||
"Month (01-12)": "Μήνας (01-12)",
|
||||
"Day (01-31)": "Ημέρα (01-31)",
|
||||
"Hour (00-23)": "Ώρα (00-23)",
|
||||
"Minute (00-59)": "Λεπτό (00-59)",
|
||||
"Second (00-59)": "Δευτερόλεπτο (00-59)",
|
||||
"Show Source": "Εμφάνιση πηγής",
|
||||
"No content to preview": "Δεν υπάρχει περιεχόμενο για προεπισκόπηση",
|
||||
"Export": "Εξαγωγή",
|
||||
"Set Timeout": "Ορισμός χρονικού ορίου",
|
||||
"Select Voice": "Επιλογή φωνής",
|
||||
"Toggle Sticky Bottom TTS Bar": "Εναλλαγή καρφιτσωμένης μπάρας TTS",
|
||||
"Display what I'm reading on Discord": "Εμφάνιση του βιβλίου που διαβάζω στο Discord",
|
||||
"Show on Discord": "Εμφάνιση στο Discord",
|
||||
"Instant {{action}}": "Άμεση {{action}}",
|
||||
"Instant {{action}} Disabled": "Άμεση {{action}} απενεργοποιημένη",
|
||||
"Annotation": "Σημείωση",
|
||||
"Reset Template": "Επαναφορά προτύπου",
|
||||
"Annotation style": "Στυλ σχολίου",
|
||||
"Annotation color": "Χρώμα σχολίου",
|
||||
"Annotation time": "Ώρα σχολίου",
|
||||
"AI": "AI",
|
||||
"Are you sure you want to re-index this book?": "Είστε σίγουροι ότι θέλετε να επαναδημιουργήσετε το ευρετήριο αυτού του βιβλίου;",
|
||||
"Enable AI in Settings": "Ενεργοποίηση AI στις ρυθμίσεις",
|
||||
"Index This Book": "Δημιουργία ευρετηρίου για αυτό το βιβλίο",
|
||||
"Enable AI search and chat for this book": "Ενεργοποίηση αναζήτησης AI και συνομιλίας για αυτό το βιβλίο",
|
||||
"Start Indexing": "Έναρξη δημιουργίας ευρετηρίου",
|
||||
"Indexing book...": "Δημιουργία ευρετηρίου βιβλίου...",
|
||||
"Preparing...": "Προετοιμασία...",
|
||||
"Delete this conversation?": "Διαγραφή αυτής της συνομιλίας;",
|
||||
"No conversations yet": "Δεν υπάρχουν συνομιλίες ακόμα",
|
||||
"Start a new chat to ask questions about this book": "Ξεκινήστε μια νέα συνομιλία για να κάνετε ερωτήσεις σχετικά με αυτό το βιβλίο",
|
||||
"Rename": "Μετονομασία",
|
||||
"New Chat": "Νέα συνομιλία",
|
||||
"Chat": "Συνομιλία",
|
||||
"Please enter a model ID": "Εισάγετε ένα αναγνωριστικό μοντέλου",
|
||||
"Model not available or invalid": "Το μοντέλο δεν είναι διαθέσιμο ή δεν είναι έγκυρο",
|
||||
"Failed to validate model": "Αποτυχία επικύρωσης μοντέλου",
|
||||
"Couldn't connect to Ollama. Is it running?": "Δεν ήταν δυνατή η σύνδεση με το Ollama. Εκτελείται;",
|
||||
"Invalid API key or connection failed": "Μη έγκυρο κλειδί API ή αποτυχία σύνδεσης",
|
||||
"Connection failed": "Αποτυχία σύνδεσης",
|
||||
"AI Assistant": "Βοηθός AI",
|
||||
"Enable AI Assistant": "Ενεργοποίηση βοηθού AI",
|
||||
"Provider": "Πάροχος",
|
||||
"Ollama (Local)": "Ollama (Τοπικό)",
|
||||
"AI Gateway (Cloud)": "Πύλη AI (Cloud)",
|
||||
"Ollama Configuration": "Διαμόρφωση Ollama",
|
||||
"Refresh Models": "Ανανέωση μοντέλων",
|
||||
"AI Model": "Μοντέλο AI",
|
||||
"No models detected": "Δεν εντοπίστηκαν μοντέλα",
|
||||
"AI Gateway Configuration": "Διαμόρφωση πύλης AI",
|
||||
"Choose from a selection of high-quality, economical AI models. You can also bring your own model by selecting \"Custom Model\" below.": "Επιλέξτε από μια συλλογή υψηλής ποιότητας, οικονομικών μοντέλων AI. Μπορείτε επίσης να χρησιμοποιήσετε το δικό σας μοντέλο επιλέγοντας \"Προσαρμοσμένο μοντέλο\" παρακάτω.",
|
||||
"API Key": "Κλειδί API",
|
||||
"Get Key": "Λήψη κλειδιού",
|
||||
"Model": "Μοντέλο",
|
||||
"Custom Model...": "Προσαρμοσμένο μοντέλο...",
|
||||
"Custom Model ID": "Αναγνωριστικό προσαρμοσμένου μοντέλου",
|
||||
"Validate": "Επικύρωση",
|
||||
"Model available": "Το μοντέλο είναι διαθέσιμο",
|
||||
"Connection": "Σύνδεση",
|
||||
"Test Connection": "Δοκιμή σύνδεσης",
|
||||
"Connected": "Συνδεδεμένο",
|
||||
"Custom Colors": "Προσαρμοσμένα χρώματα",
|
||||
"Color E-Ink Mode": "Λειτουργία έγχρωμου E-Ink",
|
||||
"Reading Ruler": "Χάρακας ανάγνωσης",
|
||||
"Enable Reading Ruler": "Ενεργοποίηση χάρακα ανάγνωσης",
|
||||
"Lines to Highlight": "Γραμμές για επισήμανση",
|
||||
"Ruler Color": "Χρώμα χάρακα",
|
||||
"Command Palette": "Παλέτα εντολών",
|
||||
"Search settings and actions...": "Αναζήτηση ρυθμίσεων και ενεργειών...",
|
||||
"No results found for": "Δεν βρέθηκαν αποτελέσματα για",
|
||||
"Type to search settings and actions": "Πληκτρολογήστε για αναζήτηση ρυθμίσεων και ενεργειών",
|
||||
"Recent": "Πρόσφατα",
|
||||
"navigate": "πλοήγηση",
|
||||
"select": "επιλογή",
|
||||
"close": "κλείσιμο",
|
||||
"Search Settings": "Αναζήτηση ρυθμίσεων",
|
||||
"Page Margins": "Περιθώρια σελίδας",
|
||||
"AI Provider": "Πάροχος AI",
|
||||
"Ollama URL": "URL Ollama",
|
||||
"Ollama Model": "Μοντέλο Ollama",
|
||||
"AI Gateway Model": "Μοντέλο AI Gateway",
|
||||
"Actions": "Ενέργειες",
|
||||
"Navigation": "Πλοήγηση",
|
||||
"Set status for {{count}} book(s)_one": "Ορισμός κατάστασης για {{count}} βιβλίο",
|
||||
"Set status for {{count}} book(s)_other": "Ορισμός κατάστασης για {{count}} βιβλία",
|
||||
"Mark as Unread": "Σήμανση ως μη αναγνωσμένο",
|
||||
"Mark as Finished": "Σήμανση ως ολοκληρωμένο",
|
||||
"Finished": "Ολοκληρώθηκε",
|
||||
"Unread": "Μη αναγνωσμένο",
|
||||
"Clear Status": "Εκκαθάριση κατάστασης",
|
||||
"Status": "Κατάσταση",
|
||||
"Loading": "Φόρτωση...",
|
||||
"Exit Paragraph Mode": "Έξοδος από τη λειτουργία παραγράφου",
|
||||
"Paragraph Mode": "Λειτουργία παραγράφου",
|
||||
"Embedding Model": "Μοντέλο ενσωμάτωσης",
|
||||
"{{count}} book(s) synced_one": "{{count}} βιβλίο συγχρονίστηκε",
|
||||
"{{count}} book(s) synced_other": "{{count}} βιβλία συγχρονίστηκαν",
|
||||
"Unable to start RSVP": "Αδυναμία έναρξης RSVP",
|
||||
"RSVP not supported for PDF": "Το RSVP δεν υποστηρίζεται για PDF",
|
||||
"Select Chapter": "Επιλογή Κεφαλαίου",
|
||||
"Context": "Πλαίσιο",
|
||||
"Ready": "Έτοιμο",
|
||||
"Chapter Progress": "Πρόοδος Κεφαλαίου",
|
||||
"words": "λέξεις",
|
||||
"{{time}} left": "{{time}} απομένουν",
|
||||
"Reading progress": "Πρόοδος ανάγνωσης",
|
||||
"Click to seek": "Κάντε κλικ για αναζήτηση",
|
||||
"Skip back 15 words": "Επιστροφή 15 λέξεων",
|
||||
"Back 15 words (Shift+Left)": "Πίσω 15 λέξεις (Shift+Αριστερά)",
|
||||
"Pause (Space)": "Παύση (Διάστημα)",
|
||||
"Play (Space)": "Αναπαραγωγή (Διάστημα)",
|
||||
"Skip forward 15 words": "Προώθηση 15 λέξεων",
|
||||
"Forward 15 words (Shift+Right)": "Εμπρός 15 λέξεις (Shift+Δεξιά)",
|
||||
"Decrease speed": "Μείωση ταχύτητας",
|
||||
"Slower (Left/Down)": "Πιο αργά (Αριστερά/Κάτω)",
|
||||
"Increase speed": "Αύξηση ταχύτητας",
|
||||
"Faster (Right/Up)": "Πιο γρήγορα (Δεξιά/Πάνω)",
|
||||
"Start RSVP Reading": "Έναρξη ανάγνωσης RSVP",
|
||||
"Choose where to start reading": "Επιλέξτε από πού θα ξεκινήσετε την ανάγνωση",
|
||||
"From Chapter Start": "Από την αρχή του κεφαλαίου",
|
||||
"Start reading from the beginning of the chapter": "Ξεκινήστε την ανάγνωση από την αρχή του κεφαλαίου",
|
||||
"Resume": "Συνέχεια",
|
||||
"Continue from where you left off": "Συνεχίστε από εκεί που σταματήσατε",
|
||||
"From Current Page": "Από την τρέχουσα σελίδα",
|
||||
"Start from where you are currently reading": "Ξεκινήστε από εκεί που διαβάζετε αυτή τη στιγμή",
|
||||
"From Selection": "Από την επιλογή",
|
||||
"Speed Reading Mode": "Λειτουργία ταχείας ανάγνωσης",
|
||||
"Scroll left": "Κύλιση αριστερά",
|
||||
"Scroll right": "Κύλιση δεξιά",
|
||||
"Library Sync Progress": "Πρόοδος συγχρονισμού βιβλιοθήκης",
|
||||
"Back to library": "Επιστροφή στη βιβλιοθήκη",
|
||||
"Group by...": "Ομαδοποίηση κατά...",
|
||||
"Export as Plain Text": "Αποστολή ως απλό κείμενο",
|
||||
"Export as Markdown": "Αποστολή ως Markdown",
|
||||
"Show Page Navigation Buttons": "Κουμπιά πλοήγησης",
|
||||
"Page {{number}}": "Σελίδα {{number}}",
|
||||
"highlight": "επισήμανση",
|
||||
"underline": "υπογράμμιση",
|
||||
"squiggly": "κυματιστή γραμμή",
|
||||
"red": "κόκκινο",
|
||||
"violet": "βιολετί",
|
||||
"blue": "μπλε",
|
||||
"green": "πράσινο",
|
||||
"yellow": "κίτρινο",
|
||||
"Select {{style}} style": "Επιλέξτε στυλ {{style}}",
|
||||
"Select {{color}} color": "Επιλέξτε χρώμα {{color}}",
|
||||
"Close Book": "Κλείσιμο βιβλίου",
|
||||
"Speed Reading": "Γρήγορη Ανάγνωση",
|
||||
"Close Speed Reading": "Κλείσιμο Γρήγορης Ανάγνωσης",
|
||||
"Authors": "Συγγραφείς",
|
||||
"Books": "Βιβλία",
|
||||
"Groups": "Ομάδες",
|
||||
"Back to TTS Location": "Επιστροφή στην τοποθεσία TTS",
|
||||
"Metadata": "Μεταδεδομένα",
|
||||
"Image viewer": "Πρόγραμμα προβολής εικόνων",
|
||||
"Previous Image": "Προηγούμενη εικόνα",
|
||||
"Next Image": "Επόμενη εικόνα",
|
||||
"Zoomed": "Ζουμαρισμένο",
|
||||
"Zoom level": "Επίπεδο ζουμ",
|
||||
"Table viewer": "Πρόγραμμα προβολής πινάκων",
|
||||
"Unable to connect to Readwise. Please check your network connection.": "Αδυναμία σύνδεσης στο Readwise. Ελέγξτε τη σύνδεση του δικτύου σας.",
|
||||
"Invalid Readwise access token": "Μη έγκυρο διακριτικό πρόσβασης Readwise",
|
||||
"Disconnected from Readwise": "Αποσυνδέθηκε από το Readwise",
|
||||
"Never": "Ποτέ",
|
||||
"Readwise Settings": "Ρυθμίσεις Readwise",
|
||||
"Connected to Readwise": "Συνδέθηκε στο Readwise",
|
||||
"Last synced: {{time}}": "Τελευταίος συγχρονισμός: {{time}}",
|
||||
"Sync Enabled": "Ο συγχρονισμός ενεργοποιήθηκε",
|
||||
"Disconnect": "Αποσύνδεση",
|
||||
"Connect your Readwise account to sync highlights.": "Συνδέστε τον λογαριασμό σας Readwise για να συγχρονίσετε τις επισημάνσεις.",
|
||||
"Get your access token at": "Αποκτήστε το διακριτικό πρόσβασής σας στο",
|
||||
"Access Token": "Διακριτικό πρόσβασης",
|
||||
"Paste your Readwise access token": "Επικολλήστε το διακριτικό πρόσβασης Readwise",
|
||||
"Config": "Ρύθμιση παραμέτρων",
|
||||
"Readwise Sync": "Συγχρονισμός Readwise",
|
||||
"Push Highlights": "Προώθηση επισημάνσεων",
|
||||
"Highlights synced to Readwise": "Οι επισημάνσεις συγχρονίστηκαν στο Readwise",
|
||||
"Readwise sync failed: no internet connection": "Ο συγχρονισμός Readwise απέτυχε: δεν υπάρχει σύνδεση στο διαδίκτυο",
|
||||
"Readwise sync failed: {{error}}": "Ο συγχρονισμός Readwise απέτυχε: {{error}}",
|
||||
"System Screen Brightness": "Φωτεινότητα οθόνης συστήματος",
|
||||
"Page:": "Σελίδα:",
|
||||
"Page: {{number}}": "Σελίδα: {{number}}",
|
||||
"Annotation page number": "Αριθμός σελίδας σχολίου",
|
||||
"Translating...": "Μετάφραση...",
|
||||
"Show Battery Percentage": "Εμφάνιση ποσοστού μπαταρίας",
|
||||
"Hide Scrollbar": "Απόκρυψη γραμμής κύλισης",
|
||||
"Skip to last reading position": "Μετάβαση στην τελευταία θέση ανάγνωσης",
|
||||
"Show context": "Εμφάνιση πλαισίου",
|
||||
"Hide context": "Απόκρυψη πλαισίου",
|
||||
"Decrease font size": "Μείωση μεγέθους γραμματοσειράς",
|
||||
"Increase font size": "Αύξηση μεγέθους γραμματοσειράς",
|
||||
"Focus": "Εστίαση",
|
||||
"Theme color": "Χρώμα θέματος",
|
||||
"Import failed": "Η εισαγωγή απέτυχε",
|
||||
"Available Formatters:": "Διαθέσιμοι μορφοποιητές:",
|
||||
"Format date": "Μορφοποίηση ημερομηνίας",
|
||||
"Markdown block quote (> per line)": "Παράθεση Markdown (> ανά γραμμή)",
|
||||
"Newlines to <br>": "Αλλαγές γραμμής σε <br>",
|
||||
"Change case": "Αλλαγή πεζών/κεφαλαίων",
|
||||
"Trim whitespace": "Αφαίρεση κενών",
|
||||
"Truncate to n characters": "Περικοπή σε n χαρακτήρες",
|
||||
"Replace text": "Αντικατάσταση κειμένου",
|
||||
"Fallback value": "Εναλλακτική τιμή",
|
||||
"Get length": "Λήψη μήκους",
|
||||
"First/last element": "Πρώτο/τελευταίο στοιχείο",
|
||||
"Join array": "Ένωση πίνακα",
|
||||
"Backup failed: {{error}}": "Η δημιουργία αντιγράφου ασφαλείας απέτυχε: {{error}}",
|
||||
"Select Backup": "Επιλογή αντιγράφου ασφαλείας",
|
||||
"Restore failed: {{error}}": "Η επαναφορά απέτυχε: {{error}}",
|
||||
"Backup & Restore": "Αντίγραφα ασφαλείας & Επαναφορά",
|
||||
"Create a backup of your library or restore from a previous backup. Restoring will merge with your current library.": "Δημιουργήστε αντίγραφο ασφαλείας της βιβλιοθήκης σας ή επαναφέρετε από προηγούμενο αντίγραφο. Η επαναφορά θα συγχωνευθεί με την τρέχουσα βιβλιοθήκη σας.",
|
||||
"Backup Library": "Αντίγραφο βιβλιοθήκης",
|
||||
"Restore Library": "Επαναφορά βιβλιοθήκης",
|
||||
"Creating backup...": "Δημιουργία αντιγράφου ασφαλείας...",
|
||||
"Restoring library...": "Επαναφορά βιβλιοθήκης...",
|
||||
"{{current}} of {{total}} items": "{{current}} από {{total}} στοιχεία",
|
||||
"Backup completed successfully!": "Το αντίγραφο ασφαλείας ολοκληρώθηκε!",
|
||||
"Restore completed successfully!": "Η επαναφορά ολοκληρώθηκε!",
|
||||
"Your library has been saved to the selected location.": "Η βιβλιοθήκη σας αποθηκεύτηκε στην επιλεγμένη τοποθεσία.",
|
||||
"{{added}} books added, {{updated}} books updated.": "{{added}} βιβλία προστέθηκαν, {{updated}} βιβλία ενημερώθηκαν.",
|
||||
"Operation failed": "Η λειτουργία απέτυχε",
|
||||
"Loading library...": "Φόρτωση βιβλιοθήκης...",
|
||||
"{{count}} books refreshed_one": "{{count}} βιβλίο ανανεώθηκε",
|
||||
"{{count}} books refreshed_other": "{{count}} βιβλία ανανεώθηκαν",
|
||||
"Failed to refresh metadata": "Αποτυχία ανανέωσης μεταδεδομένων",
|
||||
"Refresh Metadata": "Ανανέωση μεταδεδομένων"
|
||||
}
|
||||
|
||||
@@ -1,13 +1,27 @@
|
||||
{
|
||||
"LXGW WenKai GB Screen": "LXGW WenKai SC",
|
||||
"LXGW WenKai TC": "LXGW WenKai TC",
|
||||
"Source Han Serif CN VF": "Source Han Serif",
|
||||
"Huiwen-mincho": "Huiwen Mincho",
|
||||
"Source Han Serif CN": "Source Han Serif",
|
||||
"Huiwen-MinchoGBK": "Huiwen Mincho",
|
||||
"KingHwa_OldSong": "KingHwa Song",
|
||||
"Are you sure to delete {{count}} selected book(s)?_one": "Are you sure to delete {{count}} selected book?",
|
||||
"Are you sure to delete {{count}} selected book(s)?_other": "Are you sure to delete {{count}} selected books?",
|
||||
"Search in {{count}} Book(s)..._one": "Search in {{count}} book...",
|
||||
"Search in {{count}} Book(s)..._other": "Search in {{count}} books...",
|
||||
"{{count}} pages left in chapter_one": "{{count}} page left in chapter",
|
||||
"{{count}} pages left in chapter_other": "{{count}} pages left in chapter"
|
||||
"{{count}} pages left in chapter_one": "<0>{{count}}</0><1> page left in chapter</1>",
|
||||
"{{count}} pages left in chapter_other": "<0>{{count}}</0><1> pages left in chapter</1>",
|
||||
"Deleted {{count}} file(s)_one": "Deleted {{count}} file",
|
||||
"Deleted {{count}} file(s)_other": "Deleted {{count}} files",
|
||||
"Failed to delete {{count}} file(s)_one": "Failed to delete {{count}} file",
|
||||
"Failed to delete {{count}} file(s)_other": "Failed to delete {{count}} files",
|
||||
"{{count}} selected_one": "{{count}} selected",
|
||||
"{{count}} selected_other": "{{count}} selected",
|
||||
"Are you sure to delete {{count}} selected file(s)?_one": "Are you sure to delete {{count}} selected file?",
|
||||
"Are you sure to delete {{count}} selected file(s)?_other": "Are you sure to delete {{count}} selected files?",
|
||||
"Successfully imported {{count}} book(s)_one": "Successfully imported {{count}} book",
|
||||
"Successfully imported {{count}} book(s)_other": "Successfully imported {{count}} books",
|
||||
"Set status for {{count}} book(s)_one": "Set status for {{count}} book",
|
||||
"Set status for {{count}} book(s)_other": "Set status for {{count}} books",
|
||||
"{{count}} book(s) synced_one": "{{count}} book synced",
|
||||
"{{count}} book(s) synced_other": "{{count}} books synced"
|
||||
}
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
"Auto Mode": "Modo automático",
|
||||
"Behavior": "Comportamiento",
|
||||
"Book": "Libro",
|
||||
"Book Cover": "Portada del libro",
|
||||
"Bookmark": "Marcador",
|
||||
"Cancel": "Cancelar",
|
||||
"Chapter": "Capítulo",
|
||||
@@ -134,7 +133,6 @@
|
||||
"Wikipedia": "Wikipedia",
|
||||
"Writing Mode": "Modo de escritura",
|
||||
"Your Library": "Tu biblioteca",
|
||||
"TTS not supported for PDF": "TTS no es compatible con PDF",
|
||||
"Override Book Font": "Sobrescribir fuente del libro",
|
||||
"Apply to All Books": "Aplicar a todos los libros",
|
||||
"Apply to This Book": "Aplicar a este libro",
|
||||
@@ -201,9 +199,6 @@
|
||||
"Token": "Código de verificación",
|
||||
"Your OTP token": "Tu código OTP",
|
||||
"Verify token": "Verificar código",
|
||||
"Sign in with Google": "Iniciar sesión con Google",
|
||||
"Sign in with Apple": "Iniciar sesión con Apple",
|
||||
"Sign in with GitHub": "Iniciar sesión con GitHub",
|
||||
"Account": "Cuenta",
|
||||
"Failed to delete user. Please try again later.": "Error al eliminar usuario. Por favor, inténtelo de nuevo más tarde.",
|
||||
"Community Support": "Soporte comunitario",
|
||||
@@ -221,7 +216,7 @@
|
||||
"No supported files found. Supported formats: {{formats}}": "No se encontraron archivos compatibles. Formatos compatibles: {{formats}}",
|
||||
"Drop to Import Books": "Soltar para importar libros",
|
||||
"Custom": "Personalizado",
|
||||
"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": "Todo el mundo es un escenario,\nY todos los hombres y mujeres son meros actores;\nTienen sus salidas y sus entradas,\nY un hombre en su tiempo interpreta muchos papeles,\nSus actos son siete edades.\n\n— William Shakespeare",
|
||||
"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": "Todo el mundo es un escenario,\nY todos los hombres y mujeres son meros actores;\nTienen sus salidas y sus entradas,\nY un hombre en su tiempo interpreta muchos papeles,\nSus actos son siete edades.\n\n— William Shakespeare",
|
||||
"Custom Theme": "Tema personalizado",
|
||||
"Theme Name": "Nombre del tema",
|
||||
"Text Color": "Color del texto",
|
||||
@@ -369,12 +364,12 @@
|
||||
"Fit": "Encajar",
|
||||
"Reset {{settings}}": "Restablecer {{settings}}",
|
||||
"Reset Settings": "Restablecer configuración",
|
||||
"{{count}} pages left in chapter_one": "{{count}} página restante en el capítulo",
|
||||
"{{count}} pages left in chapter_many": "{{count}} páginas restantes en el capítulo",
|
||||
"{{count}} pages left in chapter_other": "{{count}} páginas restantes en el capítulo",
|
||||
"{{count}} pages left in chapter_one": "<0>{{count}}</0><1> página restante en el capítulo</1>",
|
||||
"{{count}} pages left in chapter_many": "<0>{{count}}</0><1> páginas restantes en el capítulo</1>",
|
||||
"{{count}} pages left in chapter_other": "<0>{{count}}</0><1> páginas restantes en el capítulo</1>",
|
||||
"Show Remaining Pages": "Mostrar resto",
|
||||
"Source Han Serif CN VF": "Source Han Serif",
|
||||
"Huiwen-mincho": "Huiwen Mincho",
|
||||
"Source Han Serif CN": "Source Han Serif",
|
||||
"Huiwen-MinchoGBK": "Huiwen Mincho",
|
||||
"KingHwa_OldSong": "KingHwa Song",
|
||||
"Manage Subscription": "Gestionar suscripción",
|
||||
"Coming Soon": "Próximamente",
|
||||
@@ -607,11 +602,10 @@
|
||||
"Size": "Tamaño",
|
||||
"Cover": "Cubierta",
|
||||
"Contain": "Contener",
|
||||
"{{number}} pages left in chapter": "{{number}} páginas restantes en el capítulo",
|
||||
"{{number}} pages left in chapter": "<0>{{number}}</0><1> páginas restantes en el capítulo</1>",
|
||||
"Device": "Dispositivo",
|
||||
"E-Ink Mode": "Modo E-Ink",
|
||||
"Highlight Colors": "Colores de resaltado",
|
||||
"Auto Screen Brightness": "Brillo automático de pantalla",
|
||||
"Pagination": "Paginación",
|
||||
"Disable Double Tap": "Deshabilitar Doble Toque",
|
||||
"Tap to Paginate": "Tocar para Paginación",
|
||||
@@ -660,5 +654,466 @@
|
||||
"Update email": "Actualizar correo electrónico",
|
||||
"Current email": "Correo electrónico actual",
|
||||
"Update Email": "Actualizar correo electrónico",
|
||||
"All": "Todos"
|
||||
"All": "Todos",
|
||||
"Unable to open book": "No se puede abrir el libro",
|
||||
"Punctuation": "Signos de puntuación",
|
||||
"Replace Quotation Marks": "Reemplazar comillas",
|
||||
"Enabled only in vertical layout.": "Habilitado solo en diseño vertical.",
|
||||
"No Conversion": "Sin conversión",
|
||||
"Simplified to Traditional": "Simpl. → Trad.",
|
||||
"Traditional to Simplified": "Trad. → Simpl.",
|
||||
"Simplified to Traditional (Taiwan)": "Simpl. → Trad. (Taiwan)",
|
||||
"Simplified to Traditional (Hong Kong)": "Simpl. → Trad. (Hong Kong)",
|
||||
"Simplified to Traditional (Taiwan), with phrases": "Simpl. → Trad. (Taiwan • frases)",
|
||||
"Traditional (Taiwan) to Simplified": "Trad. (Taiwan) → Simpl.",
|
||||
"Traditional (Hong Kong) to Simplified": "Trad. (Hong Kong) → Simpl.",
|
||||
"Traditional (Taiwan) to Simplified, with phrases": "Trad. (Taiwan • frases) → Simpl.",
|
||||
"Convert Simplified and Traditional Chinese": "Convertir chino Simpl./Trad.",
|
||||
"Convert Mode": "Modo de conversión",
|
||||
"Failed to auto-save book cover for lock screen: {{error}}": "Error al guardar automáticamente la portada del libro para la pantalla de bloqueo: {{error}}",
|
||||
"Download from Cloud": "Descargar desde la nube",
|
||||
"Upload to Cloud": "Subir a la nube",
|
||||
"Clear Custom Fonts": "Limpiar fuentes personalizadas",
|
||||
"Columns": "Columnas",
|
||||
"OPDS Catalogs": "Catálogos OPDS",
|
||||
"Adding LAN addresses is not supported in the web app version.": "La versión web no permite añadir direcciones LAN.",
|
||||
"Invalid OPDS catalog. Please check the URL.": "Catálogo OPDS no válido. Por favor, comprueba la URL.",
|
||||
"Browse and download books from online catalogs": "Explora y descarga libros de catálogos en línea",
|
||||
"My Catalogs": "Mis catálogos",
|
||||
"Add Catalog": "Añadir catálogo",
|
||||
"No catalogs yet": "Aún no hay catálogos",
|
||||
"Add your first OPDS catalog to start browsing books": "Añade tu primer catálogo OPDS para empezar a explorar libros.",
|
||||
"Add Your First Catalog": "Añadir primer catálogo",
|
||||
"Browse": "Explorar",
|
||||
"Popular Catalogs": "Catálogos populares",
|
||||
"Add": "Añadir",
|
||||
"Add OPDS Catalog": "Añadir catálogo OPDS",
|
||||
"Catalog Name": "Nombre del catálogo",
|
||||
"My Calibre Library": "Mi biblioteca Calibre",
|
||||
"OPDS URL": "URL OPDS",
|
||||
"Username (optional)": "Usuario (opcional)",
|
||||
"Password (optional)": "Contraseña (opcional)",
|
||||
"Description (optional)": "Descripción (opcional)",
|
||||
"A brief description of this catalog": "Una breve descripción de este catálogo",
|
||||
"Validating...": "Validando...",
|
||||
"View All": "Ver todo",
|
||||
"Forward": "Adelante",
|
||||
"Home": "Inicio",
|
||||
"{{count}} items_one": "{{count}} elemento",
|
||||
"{{count}} items_many": "{{count}} elementos",
|
||||
"{{count}} items_other": "{{count}} elementos",
|
||||
"Download completed": "Descarga completa",
|
||||
"Download failed": "Error en la descarga",
|
||||
"Open Access": "Acceso abierto",
|
||||
"Borrow": "Prestar",
|
||||
"Buy": "Comprar",
|
||||
"Subscribe": "Suscribirse",
|
||||
"Sample": "Muestra",
|
||||
"Download": "Descargar",
|
||||
"Open & Read": "Abrir y leer",
|
||||
"Tags": "Etiquetas",
|
||||
"Tag": "Etiqueta",
|
||||
"First": "Primero",
|
||||
"Previous": "Anterior",
|
||||
"Next": "Siguiente",
|
||||
"Last": "Último",
|
||||
"Cannot Load Page": "No se puede cargar la página",
|
||||
"An error occurred": "Ocurrió un error",
|
||||
"Online Library": "Biblioteca en línea",
|
||||
"URL must start with http:// or https://": "URL debe comenzar con http:// o https://",
|
||||
"Title, Author, Tag, etc...": "Titulo, Autor, Etiqueta, etc...",
|
||||
"Query": "Consulta",
|
||||
"Subject": "Asunto",
|
||||
"Enter {{terms}}": "Ingrese {{terms}}",
|
||||
"No search results found": "No se encontraron resultados de búsqueda",
|
||||
"Failed to load OPDS feed: {{status}} {{statusText}}": "Error al cargar el feed OPDS: {{status}} {{statusText}}",
|
||||
"Search in {{title}}": "Buscar en {{title}}",
|
||||
"Manage Storage": "Administrar almacenamiento",
|
||||
"Failed to load files": "Error al cargar los archivos",
|
||||
"Deleted {{count}} file(s)_one": "Se eliminó {{count}} archivo",
|
||||
"Deleted {{count}} file(s)_many": "Se eliminaron {{count}} archivos",
|
||||
"Deleted {{count}} file(s)_other": "Se eliminaron {{count}} archivos",
|
||||
"Failed to delete {{count}} file(s)_one": "Error al eliminar {{count}} archivo",
|
||||
"Failed to delete {{count}} file(s)_many": "Error al eliminar {{count}} archivos",
|
||||
"Failed to delete {{count}} file(s)_other": "Error al eliminar {{count}} archivos",
|
||||
"Failed to delete files": "Error al eliminar los archivos",
|
||||
"Total Files": "Total de archivos",
|
||||
"Total Size": "Tamaño total",
|
||||
"Quota": "Cuota",
|
||||
"Used": "Usado",
|
||||
"Files": "Archivos",
|
||||
"Search files...": "Buscar archivos...",
|
||||
"Newest First": "Más nuevos primero",
|
||||
"Oldest First": "Más antiguos primero",
|
||||
"Largest First": "Más grandes primero",
|
||||
"Smallest First": "Más pequeños primero",
|
||||
"Name A-Z": "Nombre A–Z",
|
||||
"Name Z-A": "Nombre Z–A",
|
||||
"{{count}} selected_one": "{{count}} seleccionado",
|
||||
"{{count}} selected_many": "{{count}} seleccionados",
|
||||
"{{count}} selected_other": "{{count}} seleccionados",
|
||||
"Delete Selected": "Eliminar seleccionados",
|
||||
"Created": "Creado",
|
||||
"No files found": "No se encontraron archivos",
|
||||
"No files uploaded yet": "Aún no se han subido archivos",
|
||||
"files": "archivos",
|
||||
"Page {{current}} of {{total}}": "Página {{current}} de {{total}}",
|
||||
"Are you sure to delete {{count}} selected file(s)?_one": "¿Seguro que deseas eliminar {{count}} archivo seleccionado?",
|
||||
"Are you sure to delete {{count}} selected file(s)?_many": "¿Seguro que deseas eliminar {{count}} archivos seleccionados?",
|
||||
"Are you sure to delete {{count}} selected file(s)?_other": "¿Seguro que deseas eliminar {{count}} archivos seleccionados?",
|
||||
"Cloud Storage Usage": "Uso de almacenamiento en la nube",
|
||||
"Rename Group": "Renombrar grupo",
|
||||
"From Directory": "Desde el directorio",
|
||||
"Successfully imported {{count}} book(s)_one": "Se importó correctamente 1 libro",
|
||||
"Successfully imported {{count}} book(s)_many": "Se importaron correctamente {{count}} libros",
|
||||
"Successfully imported {{count}} book(s)_other": "Se importaron correctamente {{count}} libros",
|
||||
"Count": "Cuenta",
|
||||
"Start Page": "Página de inicio",
|
||||
"Search in OPDS Catalog...": "Buscar en el catálogo OPDS...",
|
||||
"Please log in to use advanced TTS features": "Por favor, inicie sesión para usar funciones avanzadas de TTS",
|
||||
"Word limit of 30 words exceeded.": "Se superó el límite de 30 palabras.",
|
||||
"Proofread": "Corrección",
|
||||
"Current selection": "Selección actual",
|
||||
"All occurrences in this book": "Todas las apariciones en este libro",
|
||||
"All occurrences in your library": "Todas las apariciones en tu biblioteca",
|
||||
"Selected text:": "Texto seleccionado:",
|
||||
"Replace with:": "Reemplazar por:",
|
||||
"Enter text...": "Introduce texto…",
|
||||
"Case sensitive:": "Distinguir mayúsculas y minúsculas:",
|
||||
"Scope:": "Ámbito:",
|
||||
"Selection": "Selección",
|
||||
"Library": "Biblioteca",
|
||||
"Yes": "Sí",
|
||||
"No": "No",
|
||||
"Proofread Replacement Rules": "Reglas de reemplazo de corrección",
|
||||
"Selected Text Rules": "Reglas de texto seleccionado",
|
||||
"No selected text replacement rules": "No hay reglas de reemplazo para el texto seleccionado",
|
||||
"Book Specific Rules": "Reglas específicas del libro",
|
||||
"No book-level replacement rules": "No hay reglas de reemplazo a nivel de libro",
|
||||
"Disable Quick Action": "Desactivar acción rápida",
|
||||
"Enable Quick Action on Selection": "Activar acción rápida al seleccionar",
|
||||
"None": "Ninguna",
|
||||
"Annotation Tools": "Herramientas de anotación",
|
||||
"Enable Quick Actions": "Activar acciones rápidas",
|
||||
"Quick Action": "Acción rápida",
|
||||
"Copy to Notebook": "Copiar al cuaderno",
|
||||
"Copy text after selection": "Copiar texto después de la selección",
|
||||
"Highlight text after selection": "Resaltar texto después de la selección",
|
||||
"Annotate text after selection": "Anotar texto después de la selección",
|
||||
"Search text after selection": "Buscar texto después de la selección",
|
||||
"Look up text in dictionary after selection": "Buscar texto en el diccionario después de la selección",
|
||||
"Look up text in Wikipedia after selection": "Buscar texto en Wikipedia después de la selección",
|
||||
"Translate text after selection": "Traducir texto después de la selección",
|
||||
"Read text aloud after selection": "Leer texto en voz alta después de la selección",
|
||||
"Proofread text after selection": "Corregir texto después de la selección",
|
||||
"{{activeCount}} active, {{pendingCount}} pending": "{{activeCount}} activas, {{pendingCount}} pendientes",
|
||||
"{{failedCount}} failed": "{{failedCount}} fallidas",
|
||||
"Waiting...": "Esperando...",
|
||||
"Failed": "Fallido",
|
||||
"Completed": "Completado",
|
||||
"Cancelled": "Cancelado",
|
||||
"Retry": "Reintentar",
|
||||
"Active": "Activas",
|
||||
"Transfer Queue": "Cola de transferencias",
|
||||
"Upload All": "Subir todos",
|
||||
"Download All": "Descargar todos",
|
||||
"Resume Transfers": "Reanudar transferencias",
|
||||
"Pause Transfers": "Pausar transferencias",
|
||||
"Pending": "Pendientes",
|
||||
"No transfers": "Sin transferencias",
|
||||
"Retry All": "Reintentar todos",
|
||||
"Clear Completed": "Limpiar completados",
|
||||
"Clear Failed": "Limpiar fallidos",
|
||||
"Upload queued: {{title}}": "Subida en cola: {{title}}",
|
||||
"Download queued: {{title}}": "Descarga en cola: {{title}}",
|
||||
"Book not found in library": "Libro no encontrado en la biblioteca",
|
||||
"Unknown error": "Error desconocido",
|
||||
"Please log in to continue": "Inicia sesión para continuar",
|
||||
"Cloud File Transfers": "Transferencias en la nube",
|
||||
"Show Search Results": "Mostrar resultados",
|
||||
"Search results for '{{term}}'": "Resultados para '{{term}}'",
|
||||
"Close Search": "Cerrar búsqueda",
|
||||
"Previous Result": "Resultado anterior",
|
||||
"Next Result": "Resultado siguiente",
|
||||
"Bookmarks": "Marcadores",
|
||||
"Annotations": "Anotaciones",
|
||||
"Show Results": "Mostrar resultados",
|
||||
"Clear search": "Borrar búsqueda",
|
||||
"Clear search history": "Borrar historial de búsqueda",
|
||||
"Tap to Toggle Footer": "Toca para alternar pie de página",
|
||||
"Show Current Time": "Mostrar hora actual",
|
||||
"Use 24 Hour Clock": "Usar formato de 24 horas",
|
||||
"Show Current Battery Status": "Mostrar el estado actual de la batería",
|
||||
"Exported successfully": "Exportado con éxito",
|
||||
"Book exported successfully.": "Libro exportado con éxito.",
|
||||
"Failed to export the book.": "Error al exportar el libro.",
|
||||
"Export Book": "Exportar libro",
|
||||
"Whole word:": "Palabra completa:",
|
||||
"Error": "Error",
|
||||
"Unable to load the article. Try searching directly on {{link}}.": "No se puede cargar el artículo. Intenta buscar directamente en {{link}}.",
|
||||
"Unable to load the word. Try searching directly on {{link}}.": "No se puede cargar la palabra. Intenta buscar directamente en {{link}}.",
|
||||
"Date Published": "Fecha de publicación",
|
||||
"Only for TTS:": "Solo para TTS:",
|
||||
"Uploaded": "Subido",
|
||||
"Downloaded": "Descargado",
|
||||
"Deleted": "Eliminado",
|
||||
"Note:": "Nota:",
|
||||
"Time:": "Hora:",
|
||||
"Format Options": "Opciones de formato",
|
||||
"Export Date": "Fecha de exportación",
|
||||
"Chapter Titles": "Títulos de capítulos",
|
||||
"Chapter Separator": "Separador de capítulos",
|
||||
"Highlights": "Resaltados",
|
||||
"Note Date": "Fecha de nota",
|
||||
"Advanced": "Avanzado",
|
||||
"Hide": "Ocultar",
|
||||
"Show": "Mostrar",
|
||||
"Use Custom Template": "Usar plantilla personalizada",
|
||||
"Export Template": "Plantilla de exportación",
|
||||
"Template Syntax:": "Sintaxis de plantilla:",
|
||||
"Insert value": "Insertar valor",
|
||||
"Format date (locale)": "Formatear fecha (regional)",
|
||||
"Format date (custom)": "Formatear fecha (personalizado)",
|
||||
"Conditional": "Condicional",
|
||||
"Loop": "Bucle",
|
||||
"Available Variables:": "Variables disponibles:",
|
||||
"Book title": "Título del libro",
|
||||
"Book author": "Autor del libro",
|
||||
"Export date": "Fecha de exportación",
|
||||
"Array of chapters": "Lista de capítulos",
|
||||
"Chapter title": "Título del capítulo",
|
||||
"Array of annotations": "Lista de anotaciones",
|
||||
"Highlighted text": "Texto resaltado",
|
||||
"Annotation note": "Nota de anotación",
|
||||
"Date Format Tokens:": "Tokens de formato de fecha:",
|
||||
"Year (4 digits)": "Año (4 dígitos)",
|
||||
"Month (01-12)": "Mes (01-12)",
|
||||
"Day (01-31)": "Día (01-31)",
|
||||
"Hour (00-23)": "Hora (00-23)",
|
||||
"Minute (00-59)": "Minuto (00-59)",
|
||||
"Second (00-59)": "Segundo (00-59)",
|
||||
"Show Source": "Mostrar fuente",
|
||||
"No content to preview": "Sin contenido para previsualizar",
|
||||
"Export": "Exportar",
|
||||
"Set Timeout": "Establecer tiempo límite",
|
||||
"Select Voice": "Seleccionar voz",
|
||||
"Toggle Sticky Bottom TTS Bar": "Alternar barra TTS fija",
|
||||
"Display what I'm reading on Discord": "Mostrar lo que estoy leyendo en Discord",
|
||||
"Show on Discord": "Mostrar en Discord",
|
||||
"Instant {{action}}": "{{action}} instantáneo",
|
||||
"Instant {{action}} Disabled": "{{action}} instantáneo desactivado",
|
||||
"Annotation": "Anotación",
|
||||
"Reset Template": "Restablecer plantilla",
|
||||
"Annotation style": "Estilo de anotación",
|
||||
"Annotation color": "Color de anotación",
|
||||
"Annotation time": "Hora de anotación",
|
||||
"AI": "IA",
|
||||
"Are you sure you want to re-index this book?": "¿Está seguro de que desea reindexar este libro?",
|
||||
"Enable AI in Settings": "Habilitar IA en Configuración",
|
||||
"Index This Book": "Indexar este libro",
|
||||
"Enable AI search and chat for this book": "Habilitar búsqueda y chat con IA para este libro",
|
||||
"Start Indexing": "Iniciar indexación",
|
||||
"Indexing book...": "Indexando libro...",
|
||||
"Preparing...": "Preparando...",
|
||||
"Delete this conversation?": "¿Eliminar esta conversación?",
|
||||
"No conversations yet": "Aún no hay conversaciones",
|
||||
"Start a new chat to ask questions about this book": "Inicie un nuevo chat para hacer preguntas sobre este libro",
|
||||
"Rename": "Renombrar",
|
||||
"New Chat": "Nuevo chat",
|
||||
"Chat": "Chat",
|
||||
"Please enter a model ID": "Por favor, ingrese un ID de modelo",
|
||||
"Model not available or invalid": "Modelo no disponible o inválido",
|
||||
"Failed to validate model": "Error al validar el modelo",
|
||||
"Couldn't connect to Ollama. Is it running?": "No se pudo conectar a Ollama. ¿Está ejecutándose?",
|
||||
"Invalid API key or connection failed": "Clave API inválida o conexión fallida",
|
||||
"Connection failed": "Conexión fallida",
|
||||
"AI Assistant": "Asistente de IA",
|
||||
"Enable AI Assistant": "Habilitar asistente de IA",
|
||||
"Provider": "Proveedor",
|
||||
"Ollama (Local)": "Ollama (Local)",
|
||||
"AI Gateway (Cloud)": "Pasarela de IA (Nube)",
|
||||
"Ollama Configuration": "Configuración de Ollama",
|
||||
"Refresh Models": "Actualizar modelos",
|
||||
"AI Model": "Modelo de IA",
|
||||
"No models detected": "No se detectaron modelos",
|
||||
"AI Gateway Configuration": "Configuración de pasarela de IA",
|
||||
"Choose from a selection of high-quality, economical AI models. You can also bring your own model by selecting \"Custom Model\" below.": "Elija entre una selección de modelos de IA de alta calidad y económicos. También puede usar su propio modelo seleccionando \"Modelo personalizado\" a continuación.",
|
||||
"API Key": "Clave API",
|
||||
"Get Key": "Obtener clave",
|
||||
"Model": "Modelo",
|
||||
"Custom Model...": "Modelo personalizado...",
|
||||
"Custom Model ID": "ID de modelo personalizado",
|
||||
"Validate": "Validar",
|
||||
"Model available": "Modelo disponible",
|
||||
"Connection": "Conexión",
|
||||
"Test Connection": "Probar conexión",
|
||||
"Connected": "Conectado",
|
||||
"Custom Colors": "Colores personalizados",
|
||||
"Color E-Ink Mode": "Modo E-Ink a color",
|
||||
"Reading Ruler": "Regla de lectura",
|
||||
"Enable Reading Ruler": "Habilitar regla de lectura",
|
||||
"Lines to Highlight": "Líneas a resaltar",
|
||||
"Ruler Color": "Color de la regla",
|
||||
"Command Palette": "Paleta de comandos",
|
||||
"Search settings and actions...": "Buscar ajustes y acciones...",
|
||||
"No results found for": "No se encontraron resultados para",
|
||||
"Type to search settings and actions": "Escribe para buscar ajustes y acciones",
|
||||
"Recent": "Reciente",
|
||||
"navigate": "navegar",
|
||||
"select": "seleccionar",
|
||||
"close": "cerrar",
|
||||
"Search Settings": "Buscar ajustes",
|
||||
"Page Margins": "Márgenes de página",
|
||||
"AI Provider": "Proveedor de IA",
|
||||
"Ollama URL": "URL de Ollama",
|
||||
"Ollama Model": "Modelo de Ollama",
|
||||
"AI Gateway Model": "Modelo de AI Gateway",
|
||||
"Actions": "Acciones",
|
||||
"Navigation": "Navegación",
|
||||
"Set status for {{count}} book(s)_one": "Establecer estado para {{count}} libro",
|
||||
"Set status for {{count}} book(s)_other": "Establecer estado para {{count}} libros",
|
||||
"Mark as Unread": "Marcar como no leído",
|
||||
"Mark as Finished": "Marcar como terminado",
|
||||
"Finished": "Terminado",
|
||||
"Unread": "Sin leer",
|
||||
"Clear Status": "Borrar estado",
|
||||
"Status": "Estado",
|
||||
"Set status for {{count}} book(s)_many": "Establecer estado para {{count}} libros",
|
||||
"Loading": "Cargando...",
|
||||
"Exit Paragraph Mode": "Salir del modo de párrafo",
|
||||
"Paragraph Mode": "Modo de párrafo",
|
||||
"Embedding Model": "Modelo de incrustación",
|
||||
"{{count}} book(s) synced_one": "{{count}} libro sincronizado",
|
||||
"{{count}} book(s) synced_many": "{{count}} libros sincronizados",
|
||||
"{{count}} book(s) synced_other": "{{count}} libros sincronizados",
|
||||
"Unable to start RSVP": "No se puede iniciar RSVP",
|
||||
"RSVP not supported for PDF": "RSVP no es compatible con PDF",
|
||||
"Select Chapter": "Seleccionar capítulo",
|
||||
"Context": "Contexto",
|
||||
"Ready": "Listo",
|
||||
"Chapter Progress": "Progreso del capítulo",
|
||||
"words": "palabras",
|
||||
"{{time}} left": "faltan {{time}}",
|
||||
"Reading progress": "Progreso de lectura",
|
||||
"Click to seek": "Hacer clic para buscar",
|
||||
"Skip back 15 words": "Retroceder 15 palabras",
|
||||
"Back 15 words (Shift+Left)": "Retroceder 15 palabras (Shift+Izquierda)",
|
||||
"Pause (Space)": "Pausa (Espacio)",
|
||||
"Play (Space)": "Reproducir (Espacio)",
|
||||
"Skip forward 15 words": "Adelantar 15 palabras",
|
||||
"Forward 15 words (Shift+Right)": "Adelantar 15 palabras (Shift+Derecha)",
|
||||
"Decrease speed": "Disminuir velocidad",
|
||||
"Slower (Left/Down)": "Más lento (Izquierda/Abajo)",
|
||||
"Increase speed": "Aumentar velocidad",
|
||||
"Faster (Right/Up)": "Más rápido (Derecha/Arriba)",
|
||||
"Start RSVP Reading": "Iniciar lectura RSVP",
|
||||
"Choose where to start reading": "Elegir dónde empezar a leer",
|
||||
"From Chapter Start": "Desde el inicio del capítulo",
|
||||
"Start reading from the beginning of the chapter": "Empezar a leer desde el principio del capítulo",
|
||||
"Resume": "Reanudar",
|
||||
"Continue from where you left off": "Continuar desde donde lo dejaste",
|
||||
"From Current Page": "Desde la página actual",
|
||||
"Start from where you are currently reading": "Empezar desde donde estás leyendo actualmente",
|
||||
"From Selection": "Desde la selección",
|
||||
"Speed Reading Mode": "Modo de lectura rápida",
|
||||
"Scroll left": "Desplazar a la izquierda",
|
||||
"Scroll right": "Desplazar a la derecha",
|
||||
"Library Sync Progress": "Progreso de sincronización de la biblioteca",
|
||||
"Back to library": "Volver a la biblioteca",
|
||||
"Group by...": "Agrupar por...",
|
||||
"Export as Plain Text": "Exportar como texto sin formato",
|
||||
"Export as Markdown": "Exportar como Markdown",
|
||||
"Show Page Navigation Buttons": "Botones de navegación",
|
||||
"Page {{number}}": "Página {{number}}",
|
||||
"highlight": "resaltado",
|
||||
"underline": "subrayado",
|
||||
"squiggly": "ondulado",
|
||||
"red": "rojo",
|
||||
"violet": "violeta",
|
||||
"blue": "azul",
|
||||
"green": "verde",
|
||||
"yellow": "amarillo",
|
||||
"Select {{style}} style": "Seleccionar estilo {{style}}",
|
||||
"Select {{color}} color": "Seleccionar color {{color}}",
|
||||
"Close Book": "Cerrar libro",
|
||||
"Speed Reading": "Lectura rápida",
|
||||
"Close Speed Reading": "Cerrar lectura rápida",
|
||||
"Authors": "Autores",
|
||||
"Books": "Libros",
|
||||
"Groups": "Grupos",
|
||||
"Back to TTS Location": "Volver a la ubicación de TTS",
|
||||
"Metadata": "Metadatos",
|
||||
"Image viewer": "Visor de imágenes",
|
||||
"Previous Image": "Imagen anterior",
|
||||
"Next Image": "Imagen siguiente",
|
||||
"Zoomed": "Con zoom",
|
||||
"Zoom level": "Nivel de zoom",
|
||||
"Table viewer": "Visor de tablas",
|
||||
"Unable to connect to Readwise. Please check your network connection.": "No se pudo conectar a Readwise. Por favor, comprueba tu conexión a la red.",
|
||||
"Invalid Readwise access token": "Token de acceso a Readwise no válido",
|
||||
"Disconnected from Readwise": "Desconectado de Readwise",
|
||||
"Never": "Nunca",
|
||||
"Readwise Settings": "Ajustes de Readwise",
|
||||
"Connected to Readwise": "Conectado a Readwise",
|
||||
"Last synced: {{time}}": "Última sincronización: {{time}}",
|
||||
"Sync Enabled": "Sincronización habilitada",
|
||||
"Disconnect": "Desconectar",
|
||||
"Connect your Readwise account to sync highlights.": "Conecta tu cuenta de Readwise para sincronizar los resaltados.",
|
||||
"Get your access token at": "Obtén tu token de acceso en",
|
||||
"Access Token": "Token de acceso",
|
||||
"Paste your Readwise access token": "Pega tu token de acceso de Readwise",
|
||||
"Config": "Configuración",
|
||||
"Readwise Sync": "Sincronización con Readwise",
|
||||
"Push Highlights": "Enviar resaltados",
|
||||
"Highlights synced to Readwise": "Resaltados sincronizados con Readwise",
|
||||
"Readwise sync failed: no internet connection": "Error en la sincronización con Readwise: sin conexión a internet",
|
||||
"Readwise sync failed: {{error}}": "Error en la sincronización con Readwise: {{error}}",
|
||||
"System Screen Brightness": "Brillo de pantalla del sistema",
|
||||
"Page:": "Página:",
|
||||
"Page: {{number}}": "Página: {{number}}",
|
||||
"Annotation page number": "Número de página de la anotación",
|
||||
"Translating...": "Traduciendo...",
|
||||
"Show Battery Percentage": "Mostrar porcentaje de batería",
|
||||
"Hide Scrollbar": "Ocultar barra de desplazamiento",
|
||||
"Skip to last reading position": "Ir a la última posición de lectura",
|
||||
"Show context": "Mostrar contexto",
|
||||
"Hide context": "Ocultar contexto",
|
||||
"Decrease font size": "Reducir tamaño de fuente",
|
||||
"Increase font size": "Aumentar tamaño de fuente",
|
||||
"Focus": "Enfoque",
|
||||
"Theme color": "Color del tema",
|
||||
"Import failed": "Error de importación",
|
||||
"Available Formatters:": "Formateadores disponibles:",
|
||||
"Format date": "Formatear fecha",
|
||||
"Markdown block quote (> per line)": "Cita en bloque Markdown (> por línea)",
|
||||
"Newlines to <br>": "Saltos de línea a <br>",
|
||||
"Change case": "Cambiar mayúsculas/minúsculas",
|
||||
"Trim whitespace": "Recortar espacios",
|
||||
"Truncate to n characters": "Truncar a n caracteres",
|
||||
"Replace text": "Reemplazar texto",
|
||||
"Fallback value": "Valor alternativo",
|
||||
"Get length": "Obtener longitud",
|
||||
"First/last element": "Primer/último elemento",
|
||||
"Join array": "Unir array",
|
||||
"Backup failed: {{error}}": "Error en la copia de seguridad: {{error}}",
|
||||
"Select Backup": "Seleccionar copia de seguridad",
|
||||
"Restore failed: {{error}}": "Error en la restauración: {{error}}",
|
||||
"Backup & Restore": "Copia de seguridad y restauración",
|
||||
"Create a backup of your library or restore from a previous backup. Restoring will merge with your current library.": "Crea una copia de seguridad de tu biblioteca o restaura desde una copia anterior. La restauración se fusionará con tu biblioteca actual.",
|
||||
"Backup Library": "Hacer copia de seguridad",
|
||||
"Restore Library": "Restaurar biblioteca",
|
||||
"Creating backup...": "Creando copia de seguridad...",
|
||||
"Restoring library...": "Restaurando biblioteca...",
|
||||
"{{current}} of {{total}} items": "{{current}} de {{total}} elementos",
|
||||
"Backup completed successfully!": "¡Copia de seguridad completada!",
|
||||
"Restore completed successfully!": "¡Restauración completada!",
|
||||
"Your library has been saved to the selected location.": "Tu biblioteca se ha guardado en la ubicación seleccionada.",
|
||||
"{{added}} books added, {{updated}} books updated.": "{{added}} libros añadidos, {{updated}} libros actualizados.",
|
||||
"Operation failed": "La operación falló",
|
||||
"Loading library...": "Cargando biblioteca...",
|
||||
"{{count}} books refreshed_one": "{{count}} libro actualizado",
|
||||
"{{count}} books refreshed_many": "{{count}} libros actualizados",
|
||||
"{{count}} books refreshed_other": "{{count}} libros actualizados",
|
||||
"Failed to refresh metadata": "Error al actualizar metadatos",
|
||||
"Refresh Metadata": "Actualizar metadatos"
|
||||
}
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
"Auto Mode": "حالت خودکار",
|
||||
"Behavior": "رفتار",
|
||||
"Book": "کتاب",
|
||||
"Book Cover": "جلد کتاب",
|
||||
"Bookmark": "نشانک",
|
||||
"Cancel": "لغو",
|
||||
"Chapter": "فصل",
|
||||
@@ -106,7 +105,6 @@
|
||||
"Wikipedia": "ویکیپدیا",
|
||||
"Writing Mode": "حالت نوشتن",
|
||||
"Your Library": "کتابخانهی شما",
|
||||
"TTS not supported for PDF": "قابلیت تبدیل متن به گفتار برای PDF پشتیبانی نمیشود",
|
||||
"Override Book Font": "جایگزینی فونت کتاب",
|
||||
"Apply to All Books": "اِعمال برای همهی کتابها",
|
||||
"Apply to This Book": "اِعمال برای این کتاب",
|
||||
@@ -173,9 +171,6 @@
|
||||
"Token": "توکن",
|
||||
"Your OTP token": "کد یکبارمصرف شما",
|
||||
"Verify token": "تأیید کد",
|
||||
"Sign in with Google": "ورود با گوگل",
|
||||
"Sign in with Apple": "ورود با اپل",
|
||||
"Sign in with GitHub": "ورود با گیتهاب",
|
||||
"Account": "حساب",
|
||||
"Failed to delete user. Please try again later.": "حذف کاربر ناموفق بود. لطفاً بعداً دوباره تلاش کنید.",
|
||||
"Community Support": "پشتیبانی جامعه",
|
||||
@@ -193,7 +188,7 @@
|
||||
"No supported files found. Supported formats: {{formats}}": "فایل پشتیبانیشدهای یافت نشد. فرمتهای قابل پشتیبانی: {{formats}}",
|
||||
"Drop to Import Books": "برای وارد کردن کتابها، فایل را رها کنید",
|
||||
"Custom": "سفارشی",
|
||||
"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— ویلیام شکسپیر",
|
||||
"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— ویلیام شکسپیر",
|
||||
"Custom Theme": "تم سفارشی",
|
||||
"Theme Name": "نام تم",
|
||||
"Text Color": "رنگ متن",
|
||||
@@ -338,11 +333,11 @@
|
||||
"Fit": "متناسب",
|
||||
"Reset {{settings}}": "بازنشانی {{settings}}",
|
||||
"Reset Settings": "بازنشانی تنظیمات",
|
||||
"{{count}} pages left in chapter_one": "{{count}} صفحه تا انتهای فصل",
|
||||
"{{count}} pages left in chapter_other": "{{count}} صفحه تا انتهای فصل",
|
||||
"{{count}} pages left in chapter_one": "<0>{{count}}</0><1> صفحه تا انتهای فصل</1>",
|
||||
"{{count}} pages left in chapter_other": "<0>{{count}}</0><1> صفحه تا انتهای فصل</1>",
|
||||
"Show Remaining Pages": "نمایش صفحات باقیمانده",
|
||||
"Source Han Serif CN VF": "Source Han Serif CN VF",
|
||||
"Huiwen-mincho": "Huiwen-mincho",
|
||||
"Source Han Serif CN": "Source Han Serif CN",
|
||||
"Huiwen-MinchoGBK": "Huiwen Mincho",
|
||||
"KingHwa_OldSong": "KingHwa_OldSong",
|
||||
"Manage Subscription": "مدیریت اشتراک",
|
||||
"Coming Soon": "بهزودی",
|
||||
@@ -603,11 +598,10 @@
|
||||
"Size": "اندازه",
|
||||
"Cover": "جلد",
|
||||
"Contain": "شامل",
|
||||
"{{number}} pages left in chapter": "{{number}} صفحه تا انتهای فصل",
|
||||
"{{number}} pages left in chapter": "<0>{{number}}</0><1> صفحه تا انتهای فصل</1>",
|
||||
"Device": "دستگاه",
|
||||
"E-Ink Mode": "حالت E-Ink",
|
||||
"Highlight Colors": "رنگهای هایلایت",
|
||||
"Auto Screen Brightness": "روشنایی خودکار صفحه",
|
||||
"Pagination": "صفحهبندی",
|
||||
"Disable Double Tap": "غیرفعال کردن کلیک دوبل",
|
||||
"Tap to Paginate": "ضربه برای صفحهبندی",
|
||||
@@ -656,5 +650,457 @@
|
||||
"Update email": "بهروزرسانی ایمیل",
|
||||
"Current email": "ایمیل فعلی",
|
||||
"Update Email": "بهروزرسانی ایمیل",
|
||||
"All": "همه"
|
||||
"All": "همه",
|
||||
"Unable to open book": "قادر به باز کردن کتاب نیست",
|
||||
"Punctuation": "علامت نگارشی",
|
||||
"Replace Quotation Marks": "جایگزینی علامت نقل قول",
|
||||
"Enabled only in vertical layout.": "فقط در طرح عمودی فعال است.",
|
||||
"No Conversion": "بدون تبدیل",
|
||||
"Simplified to Traditional": "ساده → سنتی",
|
||||
"Traditional to Simplified": "سنتی → ساده",
|
||||
"Simplified to Traditional (Taiwan)": "ساده → سنتی (تایوان)",
|
||||
"Simplified to Traditional (Hong Kong)": "ساده → سنتی (هنگکنگ)",
|
||||
"Simplified to Traditional (Taiwan), with phrases": "ساده → سنتی (تایوان • عبارات)",
|
||||
"Traditional (Taiwan) to Simplified": "سنتی (تایوان) → ساده",
|
||||
"Traditional (Hong Kong) to Simplified": "سنتی (هنگکنگ) → ساده",
|
||||
"Traditional (Taiwan) to Simplified, with phrases": "سنتی (تایوان • عبارات) → ساده",
|
||||
"Convert Simplified and Traditional Chinese": "تبدیل چینی ساده/سنتی",
|
||||
"Convert Mode": "حالت تبدیل",
|
||||
"Failed to auto-save book cover for lock screen: {{error}}": "ذخیرهی خودکار جلد کتاب برای صفحهی قفل ناموفق بود: {{error}}",
|
||||
"Download from Cloud": "دانلود از فضای ابری",
|
||||
"Upload to Cloud": "آپلود به فضای ابری",
|
||||
"Clear Custom Fonts": "پاککردن فونتهای سفارشی",
|
||||
"Columns": "ستونها",
|
||||
"OPDS Catalogs": "فهرستهای OPDS",
|
||||
"Adding LAN addresses is not supported in the web app version.": "افزودن آدرسهای LAN در نسخه وب پشتیبانی نمیشود.",
|
||||
"Invalid OPDS catalog. Please check the URL.": "فهرست OPDS نامعتبر است. لطفاً آدرس را بررسی کنید.",
|
||||
"Browse and download books from online catalogs": "مرور و دانلود کتابها از فهرستهای آنلاین",
|
||||
"My Catalogs": "فهرستهای من",
|
||||
"Add Catalog": "افزودن فهرست",
|
||||
"No catalogs yet": "هنوز فهرستی وجود ندارد",
|
||||
"Add your first OPDS catalog to start browsing books": "برای شروع مرور کتابها، اولین فهرست OPDS خود را اضافه کنید.",
|
||||
"Add Your First Catalog": "افزودن اولین فهرست",
|
||||
"Browse": "مرور",
|
||||
"Popular Catalogs": "فهرستهای محبوب",
|
||||
"Add": "افزودن",
|
||||
"Add OPDS Catalog": "افزودن فهرست OPDS",
|
||||
"Catalog Name": "نام فهرست",
|
||||
"My Calibre Library": "کتابخانه Calibre من",
|
||||
"OPDS URL": "آدرس OPDS",
|
||||
"Username (optional)": "نام کاربری (اختیاری)",
|
||||
"Password (optional)": "رمز عبور (اختیاری)",
|
||||
"Description (optional)": "توضیحات (اختیاری)",
|
||||
"A brief description of this catalog": "توضیح کوتاهی درباره این فهرست",
|
||||
"Validating...": "در حال بررسی...",
|
||||
"View All": "مشاهده همه",
|
||||
"Forward": "بعدی",
|
||||
"Home": "خانه",
|
||||
"{{count}} items_one": "{{count}} مورد",
|
||||
"{{count}} items_other": "{{count}} مورد",
|
||||
"Download completed": "دانلود کامل شد",
|
||||
"Download failed": "دانلود ناموفق بود",
|
||||
"Open Access": "دسترسی آزاد",
|
||||
"Borrow": "امانت گرفتن",
|
||||
"Buy": "خرید",
|
||||
"Subscribe": "اشتراک",
|
||||
"Sample": "نمونه",
|
||||
"Download": "دانلود",
|
||||
"Open & Read": "باز کردن و خواندن",
|
||||
"Tags": "برچسبها",
|
||||
"Tag": "برچسب",
|
||||
"First": "اولین",
|
||||
"Previous": "قبلی",
|
||||
"Next": "بعدی",
|
||||
"Last": "آخرین",
|
||||
"Cannot Load Page": "بارگذاری صفحه امکانپذیر نیست",
|
||||
"An error occurred": "خطایی رخ داد",
|
||||
"Online Library": "کتابخانه آنلاین",
|
||||
"URL must start with http:// or https://": "آدرس باید با http:// یا https:// شروع شود",
|
||||
"Title, Author, Tag, etc...": "عنوان، نویسنده، برچسب و غیره...",
|
||||
"Query": "پرسوجو",
|
||||
"Subject": "موضوع",
|
||||
"Enter {{terms}}": "وارد کردن {{terms}}",
|
||||
"No search results found": "هیچ نتیجهای یافت نشد",
|
||||
"Failed to load OPDS feed: {{status}} {{statusText}}": "بارگذاری فید OPDS ناموفق بود: {{status}} {{statusText}}",
|
||||
"Search in {{title}}": "جستجو در {{title}}",
|
||||
"Manage Storage": "مدیریت فضای ذخیرهسازی",
|
||||
"Failed to load files": "بارگیری فایلها ناموفق بود",
|
||||
"Deleted {{count}} file(s)_one": "{{count}} فایل حذف شد",
|
||||
"Deleted {{count}} file(s)_other": "{{count}} فایل حذف شدند",
|
||||
"Failed to delete {{count}} file(s)_one": "حذف {{count}} فایل ناموفق بود",
|
||||
"Failed to delete {{count}} file(s)_other": "حذف {{count}} فایل ناموفق بود",
|
||||
"Failed to delete files": "حذف فایلها ناموفق بود",
|
||||
"Total Files": "کل فایلها",
|
||||
"Total Size": "اندازه کل",
|
||||
"Quota": "سهمیه",
|
||||
"Used": "استفادهشده",
|
||||
"Files": "فایلها",
|
||||
"Search files...": "جستجوی فایلها...",
|
||||
"Newest First": "جدیدترینها",
|
||||
"Oldest First": "قدیمیترینها",
|
||||
"Largest First": "بزرگترینها",
|
||||
"Smallest First": "کوچکترینها",
|
||||
"Name A-Z": "نام A–Z",
|
||||
"Name Z-A": "نام Z–A",
|
||||
"{{count}} selected_one": "{{count}} مورد انتخاب شد",
|
||||
"{{count}} selected_other": "{{count}} مورد انتخاب شدند",
|
||||
"Delete Selected": "حذف موارد انتخابشده",
|
||||
"Created": "ایجاد شده",
|
||||
"No files found": "هیچ فایلی پیدا نشد",
|
||||
"No files uploaded yet": "هنوز فایلی بارگذاری نشده است",
|
||||
"files": "فایلها",
|
||||
"Page {{current}} of {{total}}": "صفحه {{current}} از {{total}}",
|
||||
"Are you sure to delete {{count}} selected file(s)?_one": "آیا از حذف {{count}} فایل انتخابشده مطمئن هستید؟",
|
||||
"Are you sure to delete {{count}} selected file(s)?_other": "آیا از حذف {{count}} فایل انتخابشده مطمئن هستید؟",
|
||||
"Cloud Storage Usage": "استفاده از فضای ذخیرهسازی ابری",
|
||||
"Rename Group": "تغییر نام گروه",
|
||||
"From Directory": "از مسیر",
|
||||
"Successfully imported {{count}} book(s)_one": "با موفقیت 1 کتاب وارد شد",
|
||||
"Successfully imported {{count}} book(s)_other": "با موفقیت {{count}} کتاب وارد شد",
|
||||
"Count": "تعداد",
|
||||
"Start Page": "صفحه شروع",
|
||||
"Search in OPDS Catalog...": "جستجو در فهرست OPDS...",
|
||||
"Please log in to use advanced TTS features": "لطفاً برای استفاده از ویژگیهای پیشرفته TTS وارد شوید.",
|
||||
"Word limit of 30 words exceeded.": "محدودیت ۳۰ واژهای تجاوز شد.",
|
||||
"Proofread": "بازبینی",
|
||||
"Current selection": "انتخاب فعلی",
|
||||
"All occurrences in this book": "همه موارد در این کتاب",
|
||||
"All occurrences in your library": "همه موارد در کتابخانه شما",
|
||||
"Selected text:": "متن انتخابشده:",
|
||||
"Replace with:": "جایگزین با:",
|
||||
"Enter text...": "متن را وارد کنید…",
|
||||
"Case sensitive:": "حساس به حروف بزرگ و کوچک:",
|
||||
"Scope:": "دامنه:",
|
||||
"Selection": "انتخاب",
|
||||
"Library": "کتابخانه",
|
||||
"Yes": "بله",
|
||||
"No": "خیر",
|
||||
"Proofread Replacement Rules": "قوانین جایگزینی بازبینی",
|
||||
"Selected Text Rules": "قوانین متن انتخابشده",
|
||||
"No selected text replacement rules": "هیچ قانون جایگزینی برای متن انتخابشده وجود ندارد",
|
||||
"Book Specific Rules": "قوانین مخصوص کتاب",
|
||||
"No book-level replacement rules": "هیچ قانون جایگزینی در سطح کتاب وجود ندارد",
|
||||
"Disable Quick Action": "غیرفعالسازی اقدام سریع",
|
||||
"Enable Quick Action on Selection": "فعالسازی اقدام سریع هنگام انتخاب",
|
||||
"None": "هیچکدام",
|
||||
"Annotation Tools": "ابزارهای یادداشتگذاری",
|
||||
"Enable Quick Actions": "فعالسازی اقدامات سریع",
|
||||
"Quick Action": "اقدام سریع",
|
||||
"Copy to Notebook": "کپی به دفترچه",
|
||||
"Copy text after selection": "کپی متن پس از انتخاب",
|
||||
"Highlight text after selection": "برجستهسازی متن پس از انتخاب",
|
||||
"Annotate text after selection": "یادداشتگذاری متن پس از انتخاب",
|
||||
"Search text after selection": "جستجوی متن پس از انتخاب",
|
||||
"Look up text in dictionary after selection": "جستجوی متن در فرهنگ لغت پس از انتخاب",
|
||||
"Look up text in Wikipedia after selection": "جستجوی متن در ویکیپدیا پس از انتخاب",
|
||||
"Translate text after selection": "ترجمه متن پس از انتخاب",
|
||||
"Read text aloud after selection": "خواندن متن با صدای بلند پس از انتخاب",
|
||||
"Proofread text after selection": "بازبینی متن پس از انتخاب",
|
||||
"{{activeCount}} active, {{pendingCount}} pending": "{{activeCount}} فعال، {{pendingCount}} در انتظار",
|
||||
"{{failedCount}} failed": "{{failedCount}} ناموفق",
|
||||
"Waiting...": "در انتظار...",
|
||||
"Failed": "ناموفق",
|
||||
"Completed": "تکمیل شده",
|
||||
"Cancelled": "لغو شده",
|
||||
"Retry": "تلاش مجدد",
|
||||
"Active": "فعال",
|
||||
"Transfer Queue": "صف انتقال",
|
||||
"Upload All": "بارگذاری همه",
|
||||
"Download All": "دانلود همه",
|
||||
"Resume Transfers": "ادامه انتقالها",
|
||||
"Pause Transfers": "توقف انتقالها",
|
||||
"Pending": "در انتظار",
|
||||
"No transfers": "بدون انتقال",
|
||||
"Retry All": "تلاش مجدد همه",
|
||||
"Clear Completed": "پاک کردن تکمیل شدهها",
|
||||
"Clear Failed": "پاک کردن ناموفقها",
|
||||
"Upload queued: {{title}}": "بارگذاری در صف: {{title}}",
|
||||
"Download queued: {{title}}": "دانلود در صف: {{title}}",
|
||||
"Book not found in library": "کتاب در کتابخانه یافت نشد",
|
||||
"Unknown error": "خطای ناشناخته",
|
||||
"Please log in to continue": "لطفاً برای ادامه وارد شوید",
|
||||
"Cloud File Transfers": "انتقال فایلهای ابری",
|
||||
"Show Search Results": "نمایش نتایج جستجو",
|
||||
"Search results for '{{term}}'": "نتایج برای «{{term}}»",
|
||||
"Close Search": "بستن جستجو",
|
||||
"Previous Result": "نتیجه قبلی",
|
||||
"Next Result": "نتیجه بعدی",
|
||||
"Bookmarks": "نشانکها",
|
||||
"Annotations": "یادداشتها",
|
||||
"Show Results": "نمایش نتایج",
|
||||
"Clear search": "پاک کردن جستجو",
|
||||
"Clear search history": "پاک کردن تاریخچه جستجو",
|
||||
"Tap to Toggle Footer": "برای تغییر پاورقی ضربه بزنید",
|
||||
"Show Current Time": "نمایش زمان فعلی",
|
||||
"Use 24 Hour Clock": "استفاده از ساعت ۲۴ ساعته",
|
||||
"Show Current Battery Status": "نمایش وضعیت فعلی باتری",
|
||||
"Exported successfully": "صادرات موفق",
|
||||
"Book exported successfully.": "کتاب با موفقیت صادر شد.",
|
||||
"Failed to export the book.": "صادر کردن کتاب ناموفق بود.",
|
||||
"Export Book": "صادر کردن کتاب",
|
||||
"Whole word:": "کلمه کامل:",
|
||||
"Error": "خطا",
|
||||
"Unable to load the article. Try searching directly on {{link}}.": "بارگذاری مقاله امکانپذیر نیست. سعی کنید مستقیماً در {{link}} جستجو کنید.",
|
||||
"Unable to load the word. Try searching directly on {{link}}.": "بارگذاری کلمه امکانپذیر نیست. سعی کنید مستقیماً در {{link}} جستجو کنید.",
|
||||
"Date Published": "تاریخ انتشار",
|
||||
"Only for TTS:": "فقط برای TTS:",
|
||||
"Uploaded": "بارگذاری شد",
|
||||
"Downloaded": "دانلود شد",
|
||||
"Deleted": "حذف شد",
|
||||
"Note:": "یادداشت:",
|
||||
"Time:": "زمان:",
|
||||
"Format Options": "گزینههای قالب",
|
||||
"Export Date": "تاریخ خروجی",
|
||||
"Chapter Titles": "عناوین فصل",
|
||||
"Chapter Separator": "جداکننده فصل",
|
||||
"Highlights": "برجستهها",
|
||||
"Note Date": "تاریخ یادداشت",
|
||||
"Advanced": "پیشرفته",
|
||||
"Hide": "پنهان کردن",
|
||||
"Show": "نمایش",
|
||||
"Use Custom Template": "استفاده از الگوی سفارشی",
|
||||
"Export Template": "الگوی خروجی",
|
||||
"Template Syntax:": "نحو الگو:",
|
||||
"Insert value": "درج مقدار",
|
||||
"Format date (locale)": "قالببندی تاریخ (محلی)",
|
||||
"Format date (custom)": "قالببندی تاریخ (سفارشی)",
|
||||
"Conditional": "شرطی",
|
||||
"Loop": "حلقه",
|
||||
"Available Variables:": "متغیرهای موجود:",
|
||||
"Book title": "عنوان کتاب",
|
||||
"Book author": "نویسنده کتاب",
|
||||
"Export date": "تاریخ خروجی",
|
||||
"Array of chapters": "آرایه فصلها",
|
||||
"Chapter title": "عنوان فصل",
|
||||
"Array of annotations": "آرایه یادداشتها",
|
||||
"Highlighted text": "متن برجستهشده",
|
||||
"Annotation note": "یادداشت حاشیه",
|
||||
"Date Format Tokens:": "نشانههای قالب تاریخ:",
|
||||
"Year (4 digits)": "سال (۴ رقم)",
|
||||
"Month (01-12)": "ماه (۰۱-۱۲)",
|
||||
"Day (01-31)": "روز (۰۱-۳۱)",
|
||||
"Hour (00-23)": "ساعت (۰۰-۲۳)",
|
||||
"Minute (00-59)": "دقیقه (۰۰-۵۹)",
|
||||
"Second (00-59)": "ثانیه (۰۰-۵۹)",
|
||||
"Show Source": "نمایش منبع",
|
||||
"No content to preview": "محتوایی برای پیشنمایش وجود ندارد",
|
||||
"Export": "خروجی",
|
||||
"Set Timeout": "تنظیم مهلت زمانی",
|
||||
"Select Voice": "انتخاب صدا",
|
||||
"Toggle Sticky Bottom TTS Bar": "تغییر نوار TTS ثابت",
|
||||
"Display what I'm reading on Discord": "نمایش کتاب در حال خواندن در Discord",
|
||||
"Show on Discord": "نمایش در Discord",
|
||||
"Instant {{action}}": "{{action}} فوری",
|
||||
"Instant {{action}} Disabled": "{{action}} فوری غیرفعال شد",
|
||||
"Annotation": "یادداشت",
|
||||
"Reset Template": "بازنشانی قالب",
|
||||
"Annotation style": "سبک یادداشت",
|
||||
"Annotation color": "رنگ یادداشت",
|
||||
"Annotation time": "زمان یادداشت",
|
||||
"AI": "هوش مصنوعی",
|
||||
"Are you sure you want to re-index this book?": "آیا مطمئن هستید که میخواهید این کتاب را دوباره فهرست کنید؟",
|
||||
"Enable AI in Settings": "فعال کردن هوش مصنوعی در تنظیمات",
|
||||
"Index This Book": "فهرست کردن این کتاب",
|
||||
"Enable AI search and chat for this book": "فعال کردن جستجو و گفتگوی هوش مصنوعی برای این کتاب",
|
||||
"Start Indexing": "شروع فهرستبندی",
|
||||
"Indexing book...": "در حال فهرستبندی کتاب...",
|
||||
"Preparing...": "در حال آمادهسازی...",
|
||||
"Delete this conversation?": "این مکالمه حذف شود؟",
|
||||
"No conversations yet": "هنوز مکالمهای وجود ندارد",
|
||||
"Start a new chat to ask questions about this book": "یک گفتگوی جدید برای پرسیدن سؤال درباره این کتاب شروع کنید",
|
||||
"Rename": "تغییر نام",
|
||||
"New Chat": "گفتگوی جدید",
|
||||
"Chat": "گفتگو",
|
||||
"Please enter a model ID": "لطفاً شناسه مدل را وارد کنید",
|
||||
"Model not available or invalid": "مدل در دسترس نیست یا نامعتبر است",
|
||||
"Failed to validate model": "اعتبارسنجی مدل ناموفق بود",
|
||||
"Couldn't connect to Ollama. Is it running?": "اتصال به Ollama ممکن نشد. آیا در حال اجرا است؟",
|
||||
"Invalid API key or connection failed": "کلید API نامعتبر است یا اتصال ناموفق بود",
|
||||
"Connection failed": "اتصال ناموفق بود",
|
||||
"AI Assistant": "دستیار هوش مصنوعی",
|
||||
"Enable AI Assistant": "فعال کردن دستیار هوش مصنوعی",
|
||||
"Provider": "ارائهدهنده",
|
||||
"Ollama (Local)": "Ollama (محلی)",
|
||||
"AI Gateway (Cloud)": "دروازه هوش مصنوعی (ابری)",
|
||||
"Ollama Configuration": "پیکربندی Ollama",
|
||||
"Refresh Models": "بازخوانی مدلها",
|
||||
"AI Model": "مدل هوش مصنوعی",
|
||||
"No models detected": "هیچ مدلی شناسایی نشد",
|
||||
"AI Gateway Configuration": "پیکربندی دروازه هوش مصنوعی",
|
||||
"Choose from a selection of high-quality, economical AI models. You can also bring your own model by selecting \"Custom Model\" below.": "از میان مجموعهای از مدلهای هوش مصنوعی با کیفیت و اقتصادی انتخاب کنید. همچنین میتوانید با انتخاب \"مدل سفارشی\" در زیر، مدل خود را استفاده کنید.",
|
||||
"API Key": "کلید API",
|
||||
"Get Key": "دریافت کلید",
|
||||
"Model": "مدل",
|
||||
"Custom Model...": "مدل سفارشی...",
|
||||
"Custom Model ID": "شناسه مدل سفارشی",
|
||||
"Validate": "اعتبارسنجی",
|
||||
"Model available": "مدل در دسترس است",
|
||||
"Connection": "اتصال",
|
||||
"Test Connection": "تست اتصال",
|
||||
"Connected": "متصل",
|
||||
"Custom Colors": "رنگهای سفارشی",
|
||||
"Color E-Ink Mode": "حالت جوهر الکترونیک رنگی",
|
||||
"Reading Ruler": "خطکش مطالعه",
|
||||
"Enable Reading Ruler": "فعالسازی خطکش مطالعه",
|
||||
"Lines to Highlight": "خطوط برای تمایز",
|
||||
"Ruler Color": "رنگ خطکش",
|
||||
"Command Palette": "پالت فرمان",
|
||||
"Search settings and actions...": "جستجوی تنظیمات و عملیات...",
|
||||
"No results found for": "نتیجهای برای این مورد یافت نشد",
|
||||
"Type to search settings and actions": "برای جستجوی تنظیمات و عملیات تایپ کنید",
|
||||
"Recent": "اخیر",
|
||||
"navigate": "ناوبری",
|
||||
"select": "انتخاب",
|
||||
"close": "بستن",
|
||||
"Search Settings": "جستجوی تنظیمات",
|
||||
"Page Margins": "حاشیههای صفحه",
|
||||
"AI Provider": "ارائه دهنده هوش مصنوعی",
|
||||
"Ollama URL": "آدرس Ollama",
|
||||
"Ollama Model": "مدل Ollama",
|
||||
"AI Gateway Model": "مدل AI Gateway",
|
||||
"Actions": "عملیات",
|
||||
"Navigation": "ناوبری",
|
||||
"Set status for {{count}} book(s)_one": "تعیین وضعیت برای {{count}} کتاب",
|
||||
"Set status for {{count}} book(s)_other": "تعیین وضعیت برای {{count}} کتاب",
|
||||
"Mark as Unread": "علامتگذاری بهعنوان خواندهنشده",
|
||||
"Mark as Finished": "علامتگذاری بهعنوان تمامشده",
|
||||
"Finished": "تمامشده",
|
||||
"Unread": "خواندهنشده",
|
||||
"Clear Status": "پاک کردن وضعیت",
|
||||
"Status": "وضعیت",
|
||||
"Loading": "در حال بارگذاری...",
|
||||
"Exit Paragraph Mode": "خروج از حالت بند",
|
||||
"Paragraph Mode": "حالت بند",
|
||||
"Embedding Model": "مدل جاسازی",
|
||||
"{{count}} book(s) synced_one": "{{count}} کتاب همگام شد",
|
||||
"{{count}} book(s) synced_other": "{{count}} کتاب همگام شدند",
|
||||
"Unable to start RSVP": "قادر به شروع RSVP نیست",
|
||||
"RSVP not supported for PDF": "RSVP برای PDF پشتیبانی نمیشود",
|
||||
"Select Chapter": "انتخاب فصل",
|
||||
"Context": "زمینه",
|
||||
"Ready": "آماده",
|
||||
"Chapter Progress": "پیشرفت فصل",
|
||||
"words": "کلمات",
|
||||
"{{time}} left": "{{time}} باقیمانده",
|
||||
"Reading progress": "پیشرفت مطالعه",
|
||||
"Click to seek": "برای جستجو کلیک کنید",
|
||||
"Skip back 15 words": "۱۵ کلمه به عقب",
|
||||
"Back 15 words (Shift+Left)": "۱۵ کلمه به عقب (Shift+Left)",
|
||||
"Pause (Space)": "توقف (Space)",
|
||||
"Play (Space)": "پخش (Space)",
|
||||
"Skip forward 15 words": "۱۵ کلمه به جلو",
|
||||
"Forward 15 words (Shift+Right)": "۱۵ کلمه به جلو (Shift+Right)",
|
||||
"Decrease speed": "کاهش سرعت",
|
||||
"Slower (Left/Down)": "کندتر (Left/Down)",
|
||||
"Increase speed": "افزایش سرعت",
|
||||
"Faster (Right/Up)": "سریعتر (Right/Up)",
|
||||
"Start RSVP Reading": "شروع مطالعه RSVP",
|
||||
"Choose where to start reading": "انتخاب کنید از کجا مطالعه شروع شود",
|
||||
"From Chapter Start": "از ابتدای فصل",
|
||||
"Start reading from the beginning of the chapter": "شروع مطالعه از ابتدای فصل",
|
||||
"Resume": "ادامه",
|
||||
"Continue from where you left off": "ادامه از جایی که متوقف شدید",
|
||||
"From Current Page": "از صفحه فعلی",
|
||||
"Start from where you are currently reading": "شروع از جایی که در حال مطالعه هستید",
|
||||
"From Selection": "از انتخاب",
|
||||
"Speed Reading Mode": "حالت مطالعه سریع",
|
||||
"Scroll left": "اسکرول به چپ",
|
||||
"Scroll right": "اسکرول به راست",
|
||||
"Library Sync Progress": "پیشرفت همگامسازی کتابخانه",
|
||||
"Back to library": "بازگشت به کتابخانه",
|
||||
"Group by...": "گروهبندی بر اساس...",
|
||||
"Export as Plain Text": "خروجی به صورت متن ساده",
|
||||
"Export as Markdown": "خروجی به صورت Markdown",
|
||||
"Show Page Navigation Buttons": "دکمههای ناوبری",
|
||||
"Page {{number}}": "صفحه {{number}}",
|
||||
"highlight": "هایلایت",
|
||||
"underline": "زیرخط",
|
||||
"squiggly": "موجدار",
|
||||
"red": "قرمز",
|
||||
"violet": "بنفش",
|
||||
"blue": "آبی",
|
||||
"green": "سبز",
|
||||
"yellow": "زرد",
|
||||
"Select {{style}} style": "انتخاب سبک {{style}}",
|
||||
"Select {{color}} color": "انتخاب رنگ {{color}}",
|
||||
"Close Book": "بستن کتاب",
|
||||
"Speed Reading": "تندخوانی",
|
||||
"Close Speed Reading": "بستن تندخوانی",
|
||||
"Authors": "نویسندگان",
|
||||
"Books": "کتابها",
|
||||
"Groups": "گروهها",
|
||||
"Back to TTS Location": "بازگشت به مکان TTS",
|
||||
"Metadata": "فراداده",
|
||||
"Image viewer": "نمایشگر تصویر",
|
||||
"Previous Image": "تصویر قبلی",
|
||||
"Next Image": "تصویر بعدی",
|
||||
"Zoomed": "بزرگنمایی شده",
|
||||
"Zoom level": "سطح بزرگنمایی",
|
||||
"Table viewer": "نمایشگر جدول",
|
||||
"Unable to connect to Readwise. Please check your network connection.": "اتصال به Readwise امکانپذیر نیست. لطفاً اتصال شبکه خود را بررسی کنید.",
|
||||
"Invalid Readwise access token": "توکن دسترسی Readwise نامعتبر است",
|
||||
"Disconnected from Readwise": "اتصال از Readwise قطع شد",
|
||||
"Never": "هرگز",
|
||||
"Readwise Settings": "تنظیمات Readwise",
|
||||
"Connected to Readwise": "به Readwise متصل شد",
|
||||
"Last synced: {{time}}": "آخرین همگامسازی: {{time}}",
|
||||
"Sync Enabled": "همگامسازی فعال شد",
|
||||
"Disconnect": "قطع اتصال",
|
||||
"Connect your Readwise account to sync highlights.": "برای همگامسازی هایلایتها، حساب Readwise خود را متصل کنید.",
|
||||
"Get your access token at": "توکن دسترسی خود را از اینجا دریافت کنید:",
|
||||
"Access Token": "توکن دسترسی",
|
||||
"Paste your Readwise access token": "توکن دسترسی Readwise خود را جایگذاری کنید",
|
||||
"Config": "پیکربندی",
|
||||
"Readwise Sync": "همگامسازی Readwise",
|
||||
"Push Highlights": "ارسال هایلایتها",
|
||||
"Highlights synced to Readwise": "هایلایتها با Readwise همگامسازی شدند",
|
||||
"Readwise sync failed: no internet connection": "همگامسازی Readwise ناموفق بود: اتصال اینترنت برقرار نیست",
|
||||
"Readwise sync failed: {{error}}": "همگامسازی Readwise ناموفق بود: {{error}}",
|
||||
"System Screen Brightness": "روشنایی صفحه نمایش سیستم",
|
||||
"Page:": "صفحه:",
|
||||
"Page: {{number}}": "صفحه: {{number}}",
|
||||
"Annotation page number": "شماره صفحه یادداشت",
|
||||
"Translating...": "در حال ترجمه...",
|
||||
"Show Battery Percentage": "نمایش درصد باتری",
|
||||
"Hide Scrollbar": "مخفی کردن نوار پیمایش",
|
||||
"Skip to last reading position": "رفتن به آخرین موقعیت مطالعه",
|
||||
"Show context": "نمایش زمینه",
|
||||
"Hide context": "پنهان کردن زمینه",
|
||||
"Decrease font size": "کاهش اندازه قلم",
|
||||
"Increase font size": "افزایش اندازه قلم",
|
||||
"Focus": "تمرکز",
|
||||
"Theme color": "رنگ پوسته",
|
||||
"Import failed": "وارد کردن ناموفق بود",
|
||||
"Available Formatters:": "قالببندهای موجود:",
|
||||
"Format date": "قالببندی تاریخ",
|
||||
"Markdown block quote (> per line)": "نقلقول Markdown (> در هر خط)",
|
||||
"Newlines to <br>": "خطوط جدید به <br>",
|
||||
"Change case": "تغییر بزرگی/کوچکی حروف",
|
||||
"Trim whitespace": "حذف فاصلهها",
|
||||
"Truncate to n characters": "کوتاه کردن به n نویسه",
|
||||
"Replace text": "جایگزینی متن",
|
||||
"Fallback value": "مقدار پیشفرض",
|
||||
"Get length": "دریافت طول",
|
||||
"First/last element": "عنصر اول/آخر",
|
||||
"Join array": "پیوستن آرایه",
|
||||
"Backup failed: {{error}}": "پشتیبانگیری ناموفق: {{error}}",
|
||||
"Select Backup": "انتخاب پشتیبان",
|
||||
"Restore failed: {{error}}": "بازیابی ناموفق: {{error}}",
|
||||
"Backup & Restore": "پشتیبانگیری و بازیابی",
|
||||
"Create a backup of your library or restore from a previous backup. Restoring will merge with your current library.": "از کتابخانه خود پشتیبان بگیرید یا از پشتیبان قبلی بازیابی کنید. بازیابی با کتابخانه فعلی شما ادغام خواهد شد.",
|
||||
"Backup Library": "پشتیبانگیری کتابخانه",
|
||||
"Restore Library": "بازیابی کتابخانه",
|
||||
"Creating backup...": "در حال ایجاد پشتیبان...",
|
||||
"Restoring library...": "در حال بازیابی کتابخانه...",
|
||||
"{{current}} of {{total}} items": "{{current}} از {{total}} مورد",
|
||||
"Backup completed successfully!": "پشتیبانگیری با موفقیت انجام شد!",
|
||||
"Restore completed successfully!": "بازیابی با موفقیت انجام شد!",
|
||||
"Your library has been saved to the selected location.": "کتابخانه شما در مکان انتخابشده ذخیره شد.",
|
||||
"{{added}} books added, {{updated}} books updated.": "{{added}} کتاب اضافه شد، {{updated}} کتاب بهروزرسانی شد.",
|
||||
"Operation failed": "عملیات ناموفق",
|
||||
"Loading library...": "در حال بارگذاری کتابخانه...",
|
||||
"{{count}} books refreshed_one": "{{count}} کتاب بهروزرسانی شد",
|
||||
"{{count}} books refreshed_other": "{{count}} کتاب بهروزرسانی شد",
|
||||
"Failed to refresh metadata": "بهروزرسانی فراداده ناموفق",
|
||||
"Refresh Metadata": "بهروزرسانی فراداده"
|
||||
}
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
"Auto Mode": "Mode automatique",
|
||||
"Behavior": "Comportement",
|
||||
"Book": "Livre",
|
||||
"Book Cover": "Couverture du livre",
|
||||
"Bookmark": "Signet",
|
||||
"Cancel": "Annuler",
|
||||
"Chapter": "Chapitre",
|
||||
@@ -107,7 +106,6 @@
|
||||
"Wikipedia": "Wikipédia",
|
||||
"Writing Mode": "Mode écriture",
|
||||
"Your Library": "Votre bibliothèque",
|
||||
"TTS not supported for PDF": "La synthèse vocale n'est pas prise en charge pour les fichiers PDF",
|
||||
"Override Book Font": "Remplacer la police du livre",
|
||||
"Apply to All Books": "Appliquer à tous les livres",
|
||||
"Apply to This Book": "Appliquer à ce livre",
|
||||
@@ -173,9 +171,6 @@
|
||||
"Token": "Code de vérification",
|
||||
"Your OTP token": "Votre code OTP",
|
||||
"Verify token": "Vérifier le code",
|
||||
"Sign in with Google": "Se connecter avec Google",
|
||||
"Sign in with Apple": "Se connecter avec Apple",
|
||||
"Sign in with GitHub": "Se connecter avec GitHub",
|
||||
"Account": "Compte",
|
||||
"Failed to delete user. Please try again later.": "Échec de la suppression de l'utilisateur. Veuillez réessayer plus tard.",
|
||||
"Community Support": "Support communautaire",
|
||||
@@ -193,7 +188,7 @@
|
||||
"No supported files found. Supported formats: {{formats}}": "Aucun fichier pris en charge trouvé. Formats pris en charge : {{formats}}",
|
||||
"Drop to Import Books": "Déposez pour importer des livres",
|
||||
"Custom": "Personnalisé",
|
||||
"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": "Le monde entier est un théâtre,\nEt tous les hommes et les femmes ne sont que des acteurs ;\nIls ont leurs sorties et leurs entrées,\nEt un homme, dans sa vie, joue de nombreux rôles,\nSes actes étant sept âges.\n\n— William Shakespeare",
|
||||
"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": "Le monde entier est un théâtre,\nEt tous les hommes et les femmes ne sont que des acteurs ;\nIls ont leurs sorties et leurs entrées,\nEt un homme, dans sa vie, joue de nombreux rôles,\nSes actes étant sept âges.\n\n— William Shakespeare",
|
||||
"Custom Theme": "Thème personnalisé",
|
||||
"Theme Name": "Nom du thème",
|
||||
"Text Color": "Couleur du texte",
|
||||
@@ -341,12 +336,12 @@
|
||||
"Fit": "Adapter",
|
||||
"Reset {{settings}}": "Réinitialiser {{settings}}",
|
||||
"Reset Settings": "Réinitialiser les paramètres",
|
||||
"{{count}} pages left in chapter_one": "{{count}} page restant dans le chapitre",
|
||||
"{{count}} pages left in chapter_many": "{{count}} pages restantes dans le chapitre",
|
||||
"{{count}} pages left in chapter_other": "{{count}} pages restantes dans le chapitre",
|
||||
"{{count}} pages left in chapter_one": "<0>{{count}}</0><1> page restant dans le chapitre</1>",
|
||||
"{{count}} pages left in chapter_many": "<0>{{count}}</0><1> pages restantes dans le chapitre</1>",
|
||||
"{{count}} pages left in chapter_other": "<0>{{count}}</0><1> pages restantes dans le chapitre</1>",
|
||||
"Show Remaining Pages": "Voir restantes",
|
||||
"Source Han Serif CN VF": "Source Han Serif",
|
||||
"Huiwen-mincho": "Huiwen Mincho",
|
||||
"Source Han Serif CN": "Source Han Serif",
|
||||
"Huiwen-MinchoGBK": "Huiwen Mincho",
|
||||
"KingHwa_OldSong": "KingHwa Song",
|
||||
"Manage Subscription": "Gérer l’abonnement",
|
||||
"Coming Soon": "Bientôt disponible",
|
||||
@@ -607,11 +602,10 @@
|
||||
"Size": "Taille",
|
||||
"Cover": "Couverture",
|
||||
"Contain": "Contenir",
|
||||
"{{number}} pages left in chapter": "{{number}} pages restantes dans le chapitre",
|
||||
"{{number}} pages left in chapter": "<0>{{number}}</0><1> pages restantes dans le chapitre</1>",
|
||||
"Device": "Appareil",
|
||||
"E-Ink Mode": "Mode E-Ink",
|
||||
"Highlight Colors": "Couleurs de Surlignage",
|
||||
"Auto Screen Brightness": "Luminosité Automatique de l'Écran",
|
||||
"Pagination": "Pagination",
|
||||
"Disable Double Tap": "Désactiver le Double Tap",
|
||||
"Tap to Paginate": "Tapoter pour Paginater",
|
||||
@@ -660,5 +654,466 @@
|
||||
"Update email": "Mettre à jour l’e-mail",
|
||||
"Current email": "E-mail actuel",
|
||||
"Update Email": "Mettre à jour l’e-mail",
|
||||
"All": "Tous"
|
||||
"All": "Tous",
|
||||
"Unable to open book": "Impossible d'ouvrir le livre",
|
||||
"Punctuation": "Ponctuation",
|
||||
"Replace Quotation Marks": "Remplacer les guillemets",
|
||||
"Enabled only in vertical layout.": "Activé uniquement en disposition verticale.",
|
||||
"No Conversion": "Pas de conversion",
|
||||
"Simplified to Traditional": "Simp. → Trad.",
|
||||
"Traditional to Simplified": "Trad. → Simp.",
|
||||
"Simplified to Traditional (Taiwan)": "Simp. → Trad. (Taïwan)",
|
||||
"Simplified to Traditional (Hong Kong)": "Simp. → Trad. (Hong Kong)",
|
||||
"Simplified to Traditional (Taiwan), with phrases": "Simp. → Trad. (Taïwan • phrases)",
|
||||
"Traditional (Taiwan) to Simplified": "Trad. (Taïwan) → Simp.",
|
||||
"Traditional (Hong Kong) to Simplified": "Trad. (Hong Kong) → Simp.",
|
||||
"Traditional (Taiwan) to Simplified, with phrases": "Trad. (Taïwan • phrases) → Simp.",
|
||||
"Convert Simplified and Traditional Chinese": "Convertir chinois simp./trad.",
|
||||
"Convert Mode": "Mode de conversion",
|
||||
"Failed to auto-save book cover for lock screen: {{error}}": "Échec de l'enregistrement automatique de la couverture du livre pour l'écran de verrouillage : {{error}}",
|
||||
"Download from Cloud": "Télécharger depuis le Cloud",
|
||||
"Upload to Cloud": "Téléverser vers le Cloud",
|
||||
"Clear Custom Fonts": "Effacer les Polices Personnalisées",
|
||||
"Columns": "Colonnes",
|
||||
"OPDS Catalogs": "Catalogues OPDS",
|
||||
"Adding LAN addresses is not supported in the web app version.": "L’ajout d’adresses LAN n’est pas pris en charge dans la version web.",
|
||||
"Invalid OPDS catalog. Please check the URL.": "Catalogue OPDS invalide. Veuillez vérifier l’URL.",
|
||||
"Browse and download books from online catalogs": "Parcourez et téléchargez des livres depuis des catalogues en ligne",
|
||||
"My Catalogs": "Mes catalogues",
|
||||
"Add Catalog": "Ajouter un catalogue",
|
||||
"No catalogs yet": "Aucun catalogue pour le moment",
|
||||
"Add your first OPDS catalog to start browsing books": "Ajoutez votre premier catalogue OPDS pour commencer à parcourir des livres.",
|
||||
"Add Your First Catalog": "Ajouter votre premier catalogue",
|
||||
"Browse": "Parcourir",
|
||||
"Popular Catalogs": "Catalogues populaires",
|
||||
"Add": "Ajouter",
|
||||
"Add OPDS Catalog": "Ajouter un catalogue OPDS",
|
||||
"Catalog Name": "Nom du catalogue",
|
||||
"My Calibre Library": "Ma bibliothèque Calibre",
|
||||
"OPDS URL": "URL OPDS",
|
||||
"Username (optional)": "Nom d’utilisateur (optionnel)",
|
||||
"Password (optional)": "Mot de passe (optionnel)",
|
||||
"Description (optional)": "Description (optionnelle)",
|
||||
"A brief description of this catalog": "Brève description de ce catalogue",
|
||||
"Validating...": "Validation...",
|
||||
"View All": "Tout afficher",
|
||||
"Forward": "Suivant",
|
||||
"Home": "Accueil",
|
||||
"{{count}} items_one": "{{count}} élément",
|
||||
"{{count}} items_many": "{{count}} éléments",
|
||||
"{{count}} items_other": "{{count}} éléments",
|
||||
"Download completed": "Téléchargement terminé",
|
||||
"Download failed": "Échec du téléchargement",
|
||||
"Open Access": "Accès libre",
|
||||
"Borrow": "Emprunter",
|
||||
"Buy": "Acheter",
|
||||
"Subscribe": "S’abonner",
|
||||
"Sample": "Extrait",
|
||||
"Download": "Télécharger",
|
||||
"Open & Read": "Ouvrir et lire",
|
||||
"Tags": "Tags",
|
||||
"Tag": "Tag",
|
||||
"First": "Premier",
|
||||
"Previous": "Précédent",
|
||||
"Next": "Suivant",
|
||||
"Last": "Dernier",
|
||||
"Cannot Load Page": "Impossible de charger la page",
|
||||
"An error occurred": "Une erreur est survenue",
|
||||
"Online Library": "Bibliothèque en ligne",
|
||||
"URL must start with http:// or https://": "URL doit commencer par http:// ou https://",
|
||||
"Title, Author, Tag, etc...": "Titre, Auteur, Tag, etc...",
|
||||
"Query": "Requête",
|
||||
"Subject": "Sujet",
|
||||
"Enter {{terms}}": "Entrez {{terms}}",
|
||||
"No search results found": "Aucun résultat trouvé",
|
||||
"Failed to load OPDS feed: {{status}} {{statusText}}": "Échec du chargement du flux OPDS : {{status}} {{statusText}}",
|
||||
"Search in {{title}}": "Rechercher dans {{title}}",
|
||||
"Manage Storage": "Gérer le stockage",
|
||||
"Failed to load files": "Échec du chargement des fichiers",
|
||||
"Deleted {{count}} file(s)_one": "{{count}} fichier supprimé",
|
||||
"Deleted {{count}} file(s)_many": "{{count}} fichiers supprimés",
|
||||
"Deleted {{count}} file(s)_other": "{{count}} fichiers supprimés",
|
||||
"Failed to delete {{count}} file(s)_one": "Échec de la suppression de {{count}} fichier",
|
||||
"Failed to delete {{count}} file(s)_many": "Échec de la suppression de {{count}} fichiers",
|
||||
"Failed to delete {{count}} file(s)_other": "Échec de la suppression de {{count}} fichiers",
|
||||
"Failed to delete files": "Échec de la suppression des fichiers",
|
||||
"Total Files": "Nombre total de fichiers",
|
||||
"Total Size": "Taille totale",
|
||||
"Quota": "Quota",
|
||||
"Used": "Utilisé",
|
||||
"Files": "Fichiers",
|
||||
"Search files...": "Rechercher des fichiers...",
|
||||
"Newest First": "Les plus récents",
|
||||
"Oldest First": "Les plus anciens",
|
||||
"Largest First": "Les plus volumineux",
|
||||
"Smallest First": "Les moins volumineux",
|
||||
"Name A-Z": "Nom A-Z",
|
||||
"Name Z-A": "Nom Z-A",
|
||||
"{{count}} selected_one": "{{count}} sélectionné",
|
||||
"{{count}} selected_many": "{{count}} sélectionnés",
|
||||
"{{count}} selected_other": "{{count}} sélectionnés",
|
||||
"Delete Selected": "Supprimer la sélection",
|
||||
"Created": "Créé",
|
||||
"No files found": "Aucun fichier trouvé",
|
||||
"No files uploaded yet": "Aucun fichier téléchargé pour le moment",
|
||||
"files": "fichiers",
|
||||
"Page {{current}} of {{total}}": "Page {{current}} sur {{total}}",
|
||||
"Are you sure to delete {{count}} selected file(s)?_one": "Voulez-vous vraiment supprimer {{count}} fichier sélectionné ?",
|
||||
"Are you sure to delete {{count}} selected file(s)?_many": "Voulez-vous vraiment supprimer {{count}} fichiers sélectionnés ?",
|
||||
"Are you sure to delete {{count}} selected file(s)?_other": "Voulez-vous vraiment supprimer {{count}} fichiers sélectionnés ?",
|
||||
"Cloud Storage Usage": "Utilisation du stockage cloud",
|
||||
"Rename Group": "Renommer le groupe",
|
||||
"From Directory": "Depuis le répertoire",
|
||||
"Successfully imported {{count}} book(s)_one": "Importation réussie de 1 livre",
|
||||
"Successfully imported {{count}} book(s)_many": "Importation réussie de {{count}} livres",
|
||||
"Successfully imported {{count}} book(s)_other": "Importation réussie de {{count}} livres",
|
||||
"Count": "Nombre",
|
||||
"Start Page": "Page de départ",
|
||||
"Search in OPDS Catalog...": "Rechercher dans le catalogue OPDS...",
|
||||
"Please log in to use advanced TTS features": "Veuillez vous connecter pour utiliser les fonctionnalités avancées de TTS",
|
||||
"Word limit of 30 words exceeded.": "La limite de 30 mots a été dépassée.",
|
||||
"Proofread": "Correction",
|
||||
"Current selection": "Sélection actuelle",
|
||||
"All occurrences in this book": "Toutes les occurrences dans ce livre",
|
||||
"All occurrences in your library": "Toutes les occurrences dans votre bibliothèque",
|
||||
"Selected text:": "Texte sélectionné :",
|
||||
"Replace with:": "Remplacer par :",
|
||||
"Enter text...": "Saisir du texte…",
|
||||
"Case sensitive:": "Respecter la casse :",
|
||||
"Scope:": "Portée :",
|
||||
"Selection": "Sélection",
|
||||
"Library": "Bibliothèque",
|
||||
"Yes": "Oui",
|
||||
"No": "Non",
|
||||
"Proofread Replacement Rules": "Règles de remplacement de correction",
|
||||
"Selected Text Rules": "Règles du texte sélectionné",
|
||||
"No selected text replacement rules": "Aucune règle de remplacement pour le texte sélectionné",
|
||||
"Book Specific Rules": "Règles spécifiques au livre",
|
||||
"No book-level replacement rules": "Aucune règle de remplacement au niveau du livre",
|
||||
"Disable Quick Action": "Désactiver l’action rapide",
|
||||
"Enable Quick Action on Selection": "Activer l’action rapide lors de la sélection",
|
||||
"None": "Aucune",
|
||||
"Annotation Tools": "Outils d’annotation",
|
||||
"Enable Quick Actions": "Activer les actions rapides",
|
||||
"Quick Action": "Action rapide",
|
||||
"Copy to Notebook": "Copier dans le carnet",
|
||||
"Copy text after selection": "Copier le texte après la sélection",
|
||||
"Highlight text after selection": "Mettre en surbrillance le texte après la sélection",
|
||||
"Annotate text after selection": "Annoter le texte après la sélection",
|
||||
"Search text after selection": "Rechercher le texte après la sélection",
|
||||
"Look up text in dictionary after selection": "Chercher le texte dans le dictionnaire après la sélection",
|
||||
"Look up text in Wikipedia after selection": "Chercher le texte dans Wikipédia après la sélection",
|
||||
"Translate text after selection": "Traduire le texte après la sélection",
|
||||
"Read text aloud after selection": "Lire le texte à haute voix après la sélection",
|
||||
"Proofread text after selection": "Relire le texte après la sélection",
|
||||
"{{activeCount}} active, {{pendingCount}} pending": "{{activeCount}} actifs, {{pendingCount}} en attente",
|
||||
"{{failedCount}} failed": "{{failedCount}} échoués",
|
||||
"Waiting...": "En attente...",
|
||||
"Failed": "Échoué",
|
||||
"Completed": "Terminé",
|
||||
"Cancelled": "Annulé",
|
||||
"Retry": "Réessayer",
|
||||
"Active": "Actifs",
|
||||
"Transfer Queue": "File de transfert",
|
||||
"Upload All": "Tout téléverser",
|
||||
"Download All": "Tout télécharger",
|
||||
"Resume Transfers": "Reprendre les transferts",
|
||||
"Pause Transfers": "Suspendre les transferts",
|
||||
"Pending": "En attente",
|
||||
"No transfers": "Aucun transfert",
|
||||
"Retry All": "Tout réessayer",
|
||||
"Clear Completed": "Effacer les terminés",
|
||||
"Clear Failed": "Effacer les échoués",
|
||||
"Upload queued: {{title}}": "Téléversement en file: {{title}}",
|
||||
"Download queued: {{title}}": "Téléchargement en file: {{title}}",
|
||||
"Book not found in library": "Livre non trouvé dans la bibliothèque",
|
||||
"Unknown error": "Erreur inconnue",
|
||||
"Please log in to continue": "Veuillez vous connecter pour continuer",
|
||||
"Cloud File Transfers": "Transferts de fichiers cloud",
|
||||
"Show Search Results": "Afficher les résultats",
|
||||
"Search results for '{{term}}'": "Résultats pour « {{term}} »",
|
||||
"Close Search": "Fermer la recherche",
|
||||
"Previous Result": "Résultat précédent",
|
||||
"Next Result": "Résultat suivant",
|
||||
"Bookmarks": "Signets",
|
||||
"Annotations": "Annotations",
|
||||
"Show Results": "Afficher les résultats",
|
||||
"Clear search": "Effacer la recherche",
|
||||
"Clear search history": "Effacer l'historique de recherche",
|
||||
"Tap to Toggle Footer": "Appuyez pour afficher/masquer le pied de page",
|
||||
"Show Current Time": "Afficher l'heure actuelle",
|
||||
"Use 24 Hour Clock": "Utiliser le format 24 heures",
|
||||
"Show Current Battery Status": "Afficher l'état actuel de la batterie",
|
||||
"Exported successfully": "Exporté avec succès",
|
||||
"Book exported successfully.": "Livre exporté avec succès.",
|
||||
"Failed to export the book.": "Échec de l'exportation du livre.",
|
||||
"Export Book": "Exporter le livre",
|
||||
"Whole word:": "Mot entier :",
|
||||
"Error": "Erreur",
|
||||
"Unable to load the article. Try searching directly on {{link}}.": "Impossible de charger l'article. Essayez de rechercher directement sur {{link}}.",
|
||||
"Unable to load the word. Try searching directly on {{link}}.": "Impossible de charger le mot. Essayez de rechercher directement sur {{link}}.",
|
||||
"Date Published": "Date de publication",
|
||||
"Only for TTS:": "Uniquement pour TTS :",
|
||||
"Uploaded": "Téléversé",
|
||||
"Downloaded": "Téléchargé",
|
||||
"Deleted": "Supprimé",
|
||||
"Note:": "Note :",
|
||||
"Time:": "Heure :",
|
||||
"Format Options": "Options de format",
|
||||
"Export Date": "Date d'export",
|
||||
"Chapter Titles": "Titres de chapitres",
|
||||
"Chapter Separator": "Séparateur de chapitres",
|
||||
"Highlights": "Surlignages",
|
||||
"Note Date": "Date de note",
|
||||
"Advanced": "Avancé",
|
||||
"Hide": "Masquer",
|
||||
"Show": "Afficher",
|
||||
"Use Custom Template": "Utiliser un modèle personnalisé",
|
||||
"Export Template": "Modèle d'export",
|
||||
"Template Syntax:": "Syntaxe du modèle :",
|
||||
"Insert value": "Insérer une valeur",
|
||||
"Format date (locale)": "Formater la date (locale)",
|
||||
"Format date (custom)": "Formater la date (personnalisé)",
|
||||
"Conditional": "Conditionnel",
|
||||
"Loop": "Boucle",
|
||||
"Available Variables:": "Variables disponibles :",
|
||||
"Book title": "Titre du livre",
|
||||
"Book author": "Auteur du livre",
|
||||
"Export date": "Date d'export",
|
||||
"Array of chapters": "Liste de chapitres",
|
||||
"Chapter title": "Titre du chapitre",
|
||||
"Array of annotations": "Liste d'annotations",
|
||||
"Highlighted text": "Texte surligné",
|
||||
"Annotation note": "Note d'annotation",
|
||||
"Date Format Tokens:": "Jetons de format de date :",
|
||||
"Year (4 digits)": "Année (4 chiffres)",
|
||||
"Month (01-12)": "Mois (01-12)",
|
||||
"Day (01-31)": "Jour (01-31)",
|
||||
"Hour (00-23)": "Heure (00-23)",
|
||||
"Minute (00-59)": "Minute (00-59)",
|
||||
"Second (00-59)": "Seconde (00-59)",
|
||||
"Show Source": "Afficher la source",
|
||||
"No content to preview": "Aucun contenu à prévisualiser",
|
||||
"Export": "Exporter",
|
||||
"Set Timeout": "Définir le délai",
|
||||
"Select Voice": "Sélectionner la voix",
|
||||
"Toggle Sticky Bottom TTS Bar": "Basculer la barre TTS fixée",
|
||||
"Display what I'm reading on Discord": "Afficher ce que je lis sur Discord",
|
||||
"Show on Discord": "Afficher sur Discord",
|
||||
"Instant {{action}}": "{{action}} instantané",
|
||||
"Instant {{action}} Disabled": "{{action}} instantané désactivé",
|
||||
"Annotation": "Annotation",
|
||||
"Reset Template": "Réinitialiser le modèle",
|
||||
"Annotation style": "Style d'annotation",
|
||||
"Annotation color": "Couleur d'annotation",
|
||||
"Annotation time": "Heure d'annotation",
|
||||
"AI": "IA",
|
||||
"Are you sure you want to re-index this book?": "Voulez-vous vraiment réindexer ce livre ?",
|
||||
"Enable AI in Settings": "Activer l'IA dans les paramètres",
|
||||
"Index This Book": "Indexer ce livre",
|
||||
"Enable AI search and chat for this book": "Activer la recherche IA et le chat pour ce livre",
|
||||
"Start Indexing": "Démarrer l'indexation",
|
||||
"Indexing book...": "Indexation du livre...",
|
||||
"Preparing...": "Préparation...",
|
||||
"Delete this conversation?": "Supprimer cette conversation ?",
|
||||
"No conversations yet": "Pas encore de conversations",
|
||||
"Start a new chat to ask questions about this book": "Démarrez une nouvelle conversation pour poser des questions sur ce livre",
|
||||
"Rename": "Renommer",
|
||||
"New Chat": "Nouvelle conversation",
|
||||
"Chat": "Chat",
|
||||
"Please enter a model ID": "Veuillez entrer un ID de modèle",
|
||||
"Model not available or invalid": "Modèle non disponible ou invalide",
|
||||
"Failed to validate model": "Échec de la validation du modèle",
|
||||
"Couldn't connect to Ollama. Is it running?": "Impossible de se connecter à Ollama. Est-il en cours d'exécution ?",
|
||||
"Invalid API key or connection failed": "Clé API invalide ou échec de connexion",
|
||||
"Connection failed": "Échec de connexion",
|
||||
"AI Assistant": "Assistant IA",
|
||||
"Enable AI Assistant": "Activer l'assistant IA",
|
||||
"Provider": "Fournisseur",
|
||||
"Ollama (Local)": "Ollama (Local)",
|
||||
"AI Gateway (Cloud)": "Passerelle IA (Cloud)",
|
||||
"Ollama Configuration": "Configuration Ollama",
|
||||
"Refresh Models": "Actualiser les modèles",
|
||||
"AI Model": "Modèle IA",
|
||||
"No models detected": "Aucun modèle détecté",
|
||||
"AI Gateway Configuration": "Configuration de la passerelle IA",
|
||||
"Choose from a selection of high-quality, economical AI models. You can also bring your own model by selecting \"Custom Model\" below.": "Choisissez parmi une sélection de modèles IA de haute qualité et économiques. Vous pouvez également utiliser votre propre modèle en sélectionnant \"Modèle personnalisé\" ci-dessous.",
|
||||
"API Key": "Clé API",
|
||||
"Get Key": "Obtenir la clé",
|
||||
"Model": "Modèle",
|
||||
"Custom Model...": "Modèle personnalisé...",
|
||||
"Custom Model ID": "ID du modèle personnalisé",
|
||||
"Validate": "Valider",
|
||||
"Model available": "Modèle disponible",
|
||||
"Connection": "Connexion",
|
||||
"Test Connection": "Tester la connexion",
|
||||
"Connected": "Connecté",
|
||||
"Custom Colors": "Couleurs personnalisées",
|
||||
"Color E-Ink Mode": "Mode E-Ink couleur",
|
||||
"Reading Ruler": "Règle de lecture",
|
||||
"Enable Reading Ruler": "Activer la règle de lecture",
|
||||
"Lines to Highlight": "Lignes à mettre en évidence",
|
||||
"Ruler Color": "Couleur de la règle",
|
||||
"Command Palette": "Palette de commandes",
|
||||
"Search settings and actions...": "Rechercher des paramètres et des actions...",
|
||||
"No results found for": "Aucun résultat trouvé pour",
|
||||
"Type to search settings and actions": "Saisissez pour rechercher des paramètres et des actions",
|
||||
"Recent": "Récent",
|
||||
"navigate": "naviguer",
|
||||
"select": "sélectionner",
|
||||
"close": "fermer",
|
||||
"Search Settings": "Rechercher dans les paramètres",
|
||||
"Page Margins": "Marges de page",
|
||||
"AI Provider": "Fournisseur d'IA",
|
||||
"Ollama URL": "URL Ollama",
|
||||
"Ollama Model": "Modèle Ollama",
|
||||
"AI Gateway Model": "Modèle AI Gateway",
|
||||
"Actions": "Actions",
|
||||
"Navigation": "Navigation",
|
||||
"Set status for {{count}} book(s)_one": "Définir le statut pour {{count}} livre",
|
||||
"Set status for {{count}} book(s)_other": "Définir le statut pour {{count}} livres",
|
||||
"Mark as Unread": "Marquer comme non lu",
|
||||
"Mark as Finished": "Marquer comme terminé",
|
||||
"Finished": "Terminé",
|
||||
"Unread": "Non lu",
|
||||
"Clear Status": "Effacer le statut",
|
||||
"Status": "Statut",
|
||||
"Set status for {{count}} book(s)_many": "Définir le statut pour {{count}} livres",
|
||||
"Loading": "Chargement...",
|
||||
"Exit Paragraph Mode": "Quitter le mode paragraphe",
|
||||
"Paragraph Mode": "Mode paragraphe",
|
||||
"Embedding Model": "Modèle d'incorporation",
|
||||
"{{count}} book(s) synced_one": "{{count}} livre synchronisé",
|
||||
"{{count}} book(s) synced_many": "{{count}} livres synchronisés",
|
||||
"{{count}} book(s) synced_other": "{{count}} livres synchronisés",
|
||||
"Unable to start RSVP": "Impossible de démarrer RSVP",
|
||||
"RSVP not supported for PDF": "RSVP non pris en charge pour PDF",
|
||||
"Select Chapter": "Sélectionner le chapitre",
|
||||
"Context": "Contexte",
|
||||
"Ready": "Prêt",
|
||||
"Chapter Progress": "Progression du chapitre",
|
||||
"words": "mots",
|
||||
"{{time}} left": "{{time}} restant",
|
||||
"Reading progress": "Progression de la lecture",
|
||||
"Click to seek": "Cliquer pour chercher",
|
||||
"Skip back 15 words": "Reculer de 15 mots",
|
||||
"Back 15 words (Shift+Left)": "Reculer de 15 mots (Shift+Left)",
|
||||
"Pause (Space)": "Pause (Espace)",
|
||||
"Play (Space)": "Lecture (Espace)",
|
||||
"Skip forward 15 words": "Avancer de 15 mots",
|
||||
"Forward 15 words (Shift+Right)": "Avancer de 15 mots (Shift+Right)",
|
||||
"Decrease speed": "Diminuer la vitesse",
|
||||
"Slower (Left/Down)": "Plus lent (Gauche/Bas)",
|
||||
"Increase speed": "Augmenter la vitesse",
|
||||
"Faster (Right/Up)": "Plus rapide (Droite/Haut)",
|
||||
"Start RSVP Reading": "Démarrer la lecture RSVP",
|
||||
"Choose where to start reading": "Choisir où commencer la lecture",
|
||||
"From Chapter Start": "Depuis le début du chapitre",
|
||||
"Start reading from the beginning of the chapter": "Commencer la lecture au début du chapitre",
|
||||
"Resume": "Reprendre",
|
||||
"Continue from where you left off": "Continuer là où vous vous êtes arrêté",
|
||||
"From Current Page": "Depuis la page actuelle",
|
||||
"Start from where you are currently reading": "Commencer là où vous lisez actuellement",
|
||||
"From Selection": "Depuis la sélection",
|
||||
"Speed Reading Mode": "Mode lecture rapide",
|
||||
"Scroll left": "Défiler vers la gauche",
|
||||
"Scroll right": "Défiler vers la droite",
|
||||
"Library Sync Progress": "Progression de la synchronisation de la bibliothèque",
|
||||
"Back to library": "Retour à la bibliothèque",
|
||||
"Group by...": "Grouper par...",
|
||||
"Export as Plain Text": "Exporter en texte brut",
|
||||
"Export as Markdown": "Exporter en Markdown",
|
||||
"Show Page Navigation Buttons": "Boutons de navigation",
|
||||
"Page {{number}}": "Page {{number}}",
|
||||
"highlight": "surlignage",
|
||||
"underline": "soulignage",
|
||||
"squiggly": "ondulé",
|
||||
"red": "rouge",
|
||||
"violet": "violet",
|
||||
"blue": "bleu",
|
||||
"green": "vert",
|
||||
"yellow": "jaune",
|
||||
"Select {{style}} style": "Sélectionner le style {{style}}",
|
||||
"Select {{color}} color": "Sélectionner la couleur {{color}}",
|
||||
"Close Book": "Fermer le livre",
|
||||
"Speed Reading": "Lecture rapide",
|
||||
"Close Speed Reading": "Fermer la lecture rapide",
|
||||
"Authors": "Auteurs",
|
||||
"Books": "Livres",
|
||||
"Groups": "Groupes",
|
||||
"Back to TTS Location": "Retour à l'emplacement TTS",
|
||||
"Metadata": "Métadonnées",
|
||||
"Image viewer": "Visionneuse d'images",
|
||||
"Previous Image": "Image précédente",
|
||||
"Next Image": "Image suivante",
|
||||
"Zoomed": "Zoomé",
|
||||
"Zoom level": "Niveau de zoom",
|
||||
"Table viewer": "Visionneuse de tableaux",
|
||||
"Unable to connect to Readwise. Please check your network connection.": "Impossible de se connecter à Readwise. Veuillez vérifier votre connexion réseau.",
|
||||
"Invalid Readwise access token": "Jeton d'accès Readwise invalide",
|
||||
"Disconnected from Readwise": "Déconnecté de Readwise",
|
||||
"Never": "Jamais",
|
||||
"Readwise Settings": "Paramètres Readwise",
|
||||
"Connected to Readwise": "Connecté à Readwise",
|
||||
"Last synced: {{time}}": "Dernière synchronisation : {{time}}",
|
||||
"Sync Enabled": "Synchronisation activée",
|
||||
"Disconnect": "Déconnecter",
|
||||
"Connect your Readwise account to sync highlights.": "Connectez votre compte Readwise pour synchroniser les surlignages.",
|
||||
"Get your access token at": "Obtenez votre jeton d'accès sur",
|
||||
"Access Token": "Jeton d'accès",
|
||||
"Paste your Readwise access token": "Collez votre jeton d'accès Readwise",
|
||||
"Config": "Configuration",
|
||||
"Readwise Sync": "Synchronisation Readwise",
|
||||
"Push Highlights": "Pousser les surlignages",
|
||||
"Highlights synced to Readwise": "Surlignages synchronisés avec Readwise",
|
||||
"Readwise sync failed: no internet connection": "Échec de la synchronisation Readwise : pas de connexion internet",
|
||||
"Readwise sync failed: {{error}}": "Échec de la synchronisation Readwise : {{error}}",
|
||||
"System Screen Brightness": "Luminosité de l'écran système",
|
||||
"Page:": "Page :",
|
||||
"Page: {{number}}": "Page : {{number}}",
|
||||
"Annotation page number": "Numéro de page de l'annotation",
|
||||
"Translating...": "Traduction en cours...",
|
||||
"Show Battery Percentage": "Afficher le pourcentage de batterie",
|
||||
"Hide Scrollbar": "Masquer la barre de défilement",
|
||||
"Skip to last reading position": "Aller à la dernière position de lecture",
|
||||
"Show context": "Afficher le contexte",
|
||||
"Hide context": "Masquer le contexte",
|
||||
"Decrease font size": "Réduire la taille de police",
|
||||
"Increase font size": "Augmenter la taille de police",
|
||||
"Focus": "Focus",
|
||||
"Theme color": "Couleur du thème",
|
||||
"Import failed": "Échec de l'importation",
|
||||
"Available Formatters:": "Formateurs disponibles :",
|
||||
"Format date": "Formater la date",
|
||||
"Markdown block quote (> per line)": "Citation Markdown (> par ligne)",
|
||||
"Newlines to <br>": "Retours à la ligne en <br>",
|
||||
"Change case": "Changer la casse",
|
||||
"Trim whitespace": "Supprimer les espaces",
|
||||
"Truncate to n characters": "Tronquer à n caractères",
|
||||
"Replace text": "Remplacer le texte",
|
||||
"Fallback value": "Valeur par défaut",
|
||||
"Get length": "Obtenir la longueur",
|
||||
"First/last element": "Premier/dernier élément",
|
||||
"Join array": "Joindre le tableau",
|
||||
"Backup failed: {{error}}": "Échec de la sauvegarde : {{error}}",
|
||||
"Select Backup": "Sélectionner une sauvegarde",
|
||||
"Restore failed: {{error}}": "Échec de la restauration : {{error}}",
|
||||
"Backup & Restore": "Sauvegarde et restauration",
|
||||
"Create a backup of your library or restore from a previous backup. Restoring will merge with your current library.": "Créez une sauvegarde de votre bibliothèque ou restaurez à partir d'une sauvegarde précédente. La restauration fusionnera avec votre bibliothèque actuelle.",
|
||||
"Backup Library": "Sauvegarder la bibliothèque",
|
||||
"Restore Library": "Restaurer la bibliothèque",
|
||||
"Creating backup...": "Création de la sauvegarde...",
|
||||
"Restoring library...": "Restauration de la bibliothèque...",
|
||||
"{{current}} of {{total}} items": "{{current}} sur {{total}} éléments",
|
||||
"Backup completed successfully!": "Sauvegarde terminée avec succès !",
|
||||
"Restore completed successfully!": "Restauration terminée avec succès !",
|
||||
"Your library has been saved to the selected location.": "Votre bibliothèque a été enregistrée à l'emplacement sélectionné.",
|
||||
"{{added}} books added, {{updated}} books updated.": "{{added}} livres ajoutés, {{updated}} livres mis à jour.",
|
||||
"Operation failed": "L'opération a échoué",
|
||||
"Loading library...": "Chargement de la bibliothèque...",
|
||||
"{{count}} books refreshed_one": "{{count}} livre rafraîchi",
|
||||
"{{count}} books refreshed_many": "{{count}} livres rafraîchis",
|
||||
"{{count}} books refreshed_other": "{{count}} livres rafraîchis",
|
||||
"Failed to refresh metadata": "Échec du rafraîchissement des métadonnées",
|
||||
"Refresh Metadata": "Rafraîchir les métadonnées"
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -8,7 +8,6 @@
|
||||
"Auto Mode": "स्वचालित मोड",
|
||||
"Behavior": "व्यवहार",
|
||||
"Book": "पुस्तक",
|
||||
"Book Cover": "पुस्तक का कवर",
|
||||
"Bookmark": "बुकमार्क",
|
||||
"Cancel": "रद्द करें",
|
||||
"Chapter": "अध्याय",
|
||||
@@ -107,7 +106,6 @@
|
||||
"Wikipedia": "विकिपीडिया",
|
||||
"Writing Mode": "लेखन मोड",
|
||||
"Your Library": "आपकी लाइब्रेरी",
|
||||
"TTS not supported for PDF": "PDF के लिए TTS समर्थित नहीं है",
|
||||
"Override Book Font": "पुस्तक फ़ॉन्ट ओवरराइड करें",
|
||||
"Apply to All Books": "सभी पुस्तकों पर लागू करें",
|
||||
"Apply to This Book": "इस पुस्तक पर लागू करें",
|
||||
@@ -174,9 +172,6 @@
|
||||
"Token": "टोकन",
|
||||
"Your OTP token": "आपका ओटीपी टोकन",
|
||||
"Verify token": "टोकन सत्यापित करें",
|
||||
"Sign in with Google": "Google के साथ साइन इन करें",
|
||||
"Sign in with Apple": "Apple के साथ साइन इन करें",
|
||||
"Sign in with GitHub": "GitHub के साथ साइन इन करें",
|
||||
"Account": "खाता",
|
||||
"Failed to delete user. Please try again later.": "उपयोगकर्ता को हटाने में विफल। कृपया बाद में पुनः प्रयास करें।",
|
||||
"Community Support": "सामुदायिक सहायता",
|
||||
@@ -194,7 +189,7 @@
|
||||
"No supported files found. Supported formats: {{formats}}": "कोई समर्थित फ़ाइलें नहीं मिलीं। समर्थित प्रारूप: {{formats}}",
|
||||
"Drop to Import Books": "पुस्तकें आयात करने के लिए छोड़ें",
|
||||
"Custom": "कस्टम",
|
||||
"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— विलियम शेक्सपियर",
|
||||
"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— विलियम शेक्सपियर",
|
||||
"Custom Theme": "कस्टम थीम",
|
||||
"Theme Name": "थीम का नाम",
|
||||
"Text Color": "टेक्स्ट रंग",
|
||||
@@ -339,11 +334,11 @@
|
||||
"Fit": "फिट",
|
||||
"Reset {{settings}}": "रीसेट {{settings}}",
|
||||
"Reset Settings": "सेटिंग्स रीसेट करें",
|
||||
"{{count}} pages left in chapter_one": "इस अध्याय में {{count}} पृष्ठ शेष हैं",
|
||||
"{{count}} pages left in chapter_other": "इस अध्याय में {{count}} पृष्ठ शेष हैं",
|
||||
"{{count}} pages left in chapter_one": "<1>इस अध्याय में </1><0>{{count}}</0><1> पृष्ठ शेष हैं</1>",
|
||||
"{{count}} pages left in chapter_other": "<1>इस अध्याय में </1><0>{{count}}</0><1> पृष्ठ शेष हैं</1>",
|
||||
"Show Remaining Pages": "शेष पृष्ठ दिखाएँ",
|
||||
"Source Han Serif CN VF": "Source Han Serif",
|
||||
"Huiwen-mincho": "Huiwen Mincho",
|
||||
"Source Han Serif CN": "Source Han Serif",
|
||||
"Huiwen-MinchoGBK": "Huiwen Mincho",
|
||||
"KingHwa_OldSong": "KingHwa Song",
|
||||
"Manage Subscription": "सदस्यता प्रबंधित करें",
|
||||
"Coming Soon": "जल्द आ रहा है",
|
||||
@@ -603,11 +598,10 @@
|
||||
"Size": "आकार",
|
||||
"Cover": "कवर",
|
||||
"Contain": "समाहित करें",
|
||||
"{{number}} pages left in chapter": "इस अध्याय में {{number}} पृष्ठ शेष हैं",
|
||||
"{{number}} pages left in chapter": "<1>इस अध्याय में </1><0>{{number}}</0><1> पृष्ठ शेष हैं</1>",
|
||||
"Device": "डिवाइस",
|
||||
"E-Ink Mode": "ई-इंक मोड",
|
||||
"Highlight Colors": "हाइलाइट रंग",
|
||||
"Auto Screen Brightness": "स्वचालित स्क्रीन ब्राइटनेस",
|
||||
"Pagination": "पृष्ठांकन",
|
||||
"Disable Double Tap": "डबल टैप अक्षम करें",
|
||||
"Tap to Paginate": "पृष्ठांकन के लिए टैप करें",
|
||||
@@ -656,5 +650,457 @@
|
||||
"Update email": "ईमेल अपडेट करें",
|
||||
"Current email": "वर्तमान ईमेल",
|
||||
"Update Email": "ईमेल अपडेट करें",
|
||||
"All": "सभी"
|
||||
"All": "सभी",
|
||||
"Unable to open book": "पुस्तक खोलने में असमर्थ",
|
||||
"Punctuation": "विराम चिह्न",
|
||||
"Replace Quotation Marks": "उद्धरण चिह्न बदलें",
|
||||
"Enabled only in vertical layout.": "केवल ऊर्ध्वाधर लेआउट में सक्षम।",
|
||||
"No Conversion": "कोई रूपांतरण नहीं",
|
||||
"Simplified to Traditional": "सरलीकृत → पारंपरिक",
|
||||
"Traditional to Simplified": "पारंपरिक → सरलीकृत",
|
||||
"Simplified to Traditional (Taiwan)": "सरलीकृत → पारंपरिक (ताइवान)",
|
||||
"Simplified to Traditional (Hong Kong)": "सरलीकृत → पारंपरिक (हांगकांग)",
|
||||
"Simplified to Traditional (Taiwan), with phrases": "सरलीकृत → पारंपरिक (ताइवान • वाक्यांश)",
|
||||
"Traditional (Taiwan) to Simplified": "पारंपरिक (ताइवान) → सरलीकृत",
|
||||
"Traditional (Hong Kong) to Simplified": "पारंपरिक (हांगकांग) → सरलीकृत",
|
||||
"Traditional (Taiwan) to Simplified, with phrases": "पारंपरिक (ताइवान • वाक्यांश) → सरलीकृत",
|
||||
"Convert Simplified and Traditional Chinese": "सरलीकृत/पारंपरिक चीनी रूपांतरण",
|
||||
"Convert Mode": "रूपांतरण मोड",
|
||||
"Failed to auto-save book cover for lock screen: {{error}}": "लॉक स्क्रीन के लिए पुस्तक कवर स्वचालित रूप से सहेजने में विफल: {{error}}",
|
||||
"Download from Cloud": "क्लाउड से डाउनलोड करें",
|
||||
"Upload to Cloud": "क्लाउड पर अपलोड करें",
|
||||
"Clear Custom Fonts": "कस्टम फ़ॉन्ट साफ़ करें",
|
||||
"Columns": "कॉलम",
|
||||
"OPDS Catalogs": "OPDS कैटलॉग",
|
||||
"Adding LAN addresses is not supported in the web app version.": "वेब ऐप संस्करण में LAN पता जोड़ना समर्थित नहीं है।",
|
||||
"Invalid OPDS catalog. Please check the URL.": "अमान्य OPDS कैटलॉग। कृपया URL जांचें।",
|
||||
"Browse and download books from online catalogs": "ऑनलाइन कैटलॉग से किताबें ब्राउज़ और डाउनलोड करें",
|
||||
"My Catalogs": "मेरे कैटलॉग",
|
||||
"Add Catalog": "कैटलॉग जोड़ें",
|
||||
"No catalogs yet": "अभी कोई कैटलॉग नहीं",
|
||||
"Add your first OPDS catalog to start browsing books": "किताबें ब्राउज़ करने के लिए अपना पहला OPDS कैटलॉग जोड़ें",
|
||||
"Add Your First Catalog": "अपना पहला कैटलॉग जोड़ें",
|
||||
"Browse": "ब्राउज़",
|
||||
"Popular Catalogs": "लोकप्रिय कैटलॉग",
|
||||
"Add": "जोड़ें",
|
||||
"Add OPDS Catalog": "OPDS कैटलॉग जोड़ें",
|
||||
"Catalog Name": "कैटलॉग नाम",
|
||||
"My Calibre Library": "मेरी Calibre लाइब्रेरी",
|
||||
"OPDS URL": "OPDS URL",
|
||||
"Username (optional)": "यूज़रनेम (वैकल्पिक)",
|
||||
"Password (optional)": "पासवर्ड (वैकल्पिक)",
|
||||
"Description (optional)": "विवरण (वैकल्पिक)",
|
||||
"A brief description of this catalog": "इस कैटलॉग का संक्षिप्त विवरण",
|
||||
"Validating...": "मान्य किया जा रहा है...",
|
||||
"View All": "सभी देखें",
|
||||
"Forward": "आगे",
|
||||
"Home": "होम",
|
||||
"{{count}} items_one": "{{count}} आइटम",
|
||||
"{{count}} items_other": "{{count}} आइटम",
|
||||
"Download completed": "डाउनलोड पूरा हुआ",
|
||||
"Download failed": "डाउनलोड विफल हुआ",
|
||||
"Open Access": "ओपन एक्सेस",
|
||||
"Borrow": "उधार लें",
|
||||
"Buy": "खरीदें",
|
||||
"Subscribe": "सदस्यता लें",
|
||||
"Sample": "नमूना",
|
||||
"Download": "डाउनलोड",
|
||||
"Open & Read": "खोलें और पढ़ें",
|
||||
"Tags": "टैग",
|
||||
"Tag": "टैग",
|
||||
"First": "पहला",
|
||||
"Previous": "पिछला",
|
||||
"Next": "अगला",
|
||||
"Last": "अंतिम",
|
||||
"Cannot Load Page": "पृष्ठ लोड नहीं किया जा सका",
|
||||
"An error occurred": "एक त्रुटि हुई",
|
||||
"Online Library": "ऑनलाइन लाइब्रेरी",
|
||||
"URL must start with http:// or https://": "URL http:// या https:// से शुरू होना चाहिए",
|
||||
"Title, Author, Tag, etc...": "शीर्षक, लेखक, टैग, आदि...",
|
||||
"Query": "प्रश्न",
|
||||
"Subject": "विषय",
|
||||
"Enter {{terms}}": "{{terms}} दर्ज करें",
|
||||
"No search results found": "कोई खोज परिणाम नहीं मिला",
|
||||
"Failed to load OPDS feed: {{status}} {{statusText}}": "OPDS फ़ीड लोड करने में विफल: {{status}} {{statusText}}",
|
||||
"Search in {{title}}": "{{title}} में खोजें",
|
||||
"Manage Storage": "स्टोरेज प्रबंधित करें",
|
||||
"Failed to load files": "फ़ाइलें लोड करने में विफल",
|
||||
"Deleted {{count}} file(s)_one": "{{count}} फ़ाइल हटाई गई",
|
||||
"Deleted {{count}} file(s)_other": "{{count}} फ़ाइलें हटाई गईं",
|
||||
"Failed to delete {{count}} file(s)_one": "{{count}} फ़ाइल हटाने में विफल",
|
||||
"Failed to delete {{count}} file(s)_other": "{{count}} फ़ाइलें हटाने में विफल",
|
||||
"Failed to delete files": "फ़ाइलें हटाने में विफल",
|
||||
"Total Files": "कुल फ़ाइलें",
|
||||
"Total Size": "कुल आकार",
|
||||
"Quota": "कोटा",
|
||||
"Used": "उपयोग किया गया",
|
||||
"Files": "फ़ाइलें",
|
||||
"Search files...": "फ़ाइलें खोजें...",
|
||||
"Newest First": "नवीनतम पहले",
|
||||
"Oldest First": "सबसे पुराने पहले",
|
||||
"Largest First": "सबसे बड़ी पहले",
|
||||
"Smallest First": "सबसे छोटी पहले",
|
||||
"Name A-Z": "नाम A-Z",
|
||||
"Name Z-A": "नाम Z-A",
|
||||
"{{count}} selected_one": "{{count}} चयनित",
|
||||
"{{count}} selected_other": "{{count}} चयनित",
|
||||
"Delete Selected": "चयनित हटाएँ",
|
||||
"Created": "बनाई गई",
|
||||
"No files found": "कोई फ़ाइल नहीं मिली",
|
||||
"No files uploaded yet": "अभी तक कोई फ़ाइल अपलोड नहीं की गई",
|
||||
"files": "फ़ाइलें",
|
||||
"Page {{current}} of {{total}}": "पृष्ठ {{current}} / {{total}}",
|
||||
"Are you sure to delete {{count}} selected file(s)?_one": "क्या आप वाकई {{count}} चयनित फ़ाइल हटाना चाहते हैं?",
|
||||
"Are you sure to delete {{count}} selected file(s)?_other": "क्या आप वाकई {{count}} चयनित फ़ाइलें हटाना चाहते हैं?",
|
||||
"Cloud Storage Usage": "क्लाउड स्टोरेज उपयोग",
|
||||
"Rename Group": "समूह का नाम बदलें",
|
||||
"From Directory": "निर्देशिका से",
|
||||
"Successfully imported {{count}} book(s)_one": "सफलतापूर्वक 1 पुस्तक आयात की गई",
|
||||
"Successfully imported {{count}} book(s)_other": "सफलतापूर्वक {{count}} पुस्तकों का आयात किया गया",
|
||||
"Count": "गणना",
|
||||
"Start Page": "प्रारंभ पृष्ठ",
|
||||
"Search in OPDS Catalog...": "OPDS कैटलॉग में खोजें...",
|
||||
"Please log in to use advanced TTS features": "उन्नत TTS सुविधाओं का उपयोग करने के लिए कृपया लॉग इन करें।",
|
||||
"Word limit of 30 words exceeded.": "30 शब्दों की सीमा पार हो गई है।",
|
||||
"Proofread": "प्रूफ़रीड",
|
||||
"Current selection": "वर्तमान चयन",
|
||||
"All occurrences in this book": "इस पुस्तक में सभी स्थान",
|
||||
"All occurrences in your library": "आपकी लाइब्रेरी में सभी स्थान",
|
||||
"Selected text:": "चयनित पाठ:",
|
||||
"Replace with:": "से बदलें:",
|
||||
"Enter text...": "पाठ दर्ज करें…",
|
||||
"Case sensitive:": "अक्षर संवेदनशील:",
|
||||
"Scope:": "क्षेत्र:",
|
||||
"Selection": "चयन",
|
||||
"Library": "लाइब्रेरी",
|
||||
"Yes": "हाँ",
|
||||
"No": "नहीं",
|
||||
"Proofread Replacement Rules": "प्रूफ़रीड प्रतिस्थापन नियम",
|
||||
"Selected Text Rules": "चयनित पाठ के नियम",
|
||||
"No selected text replacement rules": "चयनित पाठ के लिए कोई प्रतिस्थापन नियम नहीं हैं",
|
||||
"Book Specific Rules": "पुस्तक-विशिष्ट नियम",
|
||||
"No book-level replacement rules": "पुस्तक स्तर पर कोई प्रतिस्थापन नियम नहीं हैं",
|
||||
"Disable Quick Action": "त्वरित क्रिया अक्षम करें",
|
||||
"Enable Quick Action on Selection": "चयन पर त्वरित क्रिया सक्षम करें",
|
||||
"None": "कोई नहीं",
|
||||
"Annotation Tools": "टिप्पणी उपकरण",
|
||||
"Enable Quick Actions": "त्वरित क्रियाएँ सक्षम करें",
|
||||
"Quick Action": "त्वरित क्रिया",
|
||||
"Copy to Notebook": "नोटबुक में कॉपी करें",
|
||||
"Copy text after selection": "पाठ कॉपी करें चयन के बाद",
|
||||
"Highlight text after selection": "चयन के बाद पाठ हाइलाइट करें",
|
||||
"Annotate text after selection": "चयन के बाद पाठ पर टिप्पणी करें",
|
||||
"Search text after selection": "चयन के बाद पाठ खोजें",
|
||||
"Look up text in dictionary after selection": "चयन के बाद शब्दकोश में पाठ देखें",
|
||||
"Look up text in Wikipedia after selection": "चयन के बाद विकिपीडिया में पाठ देखें",
|
||||
"Translate text after selection": "चयन के बाद पाठ का अनुवाद करें",
|
||||
"Read text aloud after selection": "चयन के बाद पाठ को जोर से पढ़ें",
|
||||
"Proofread text after selection": "चयन के बाद पाठ को प्रूफरीड करें",
|
||||
"{{activeCount}} active, {{pendingCount}} pending": "{{activeCount}} सक्रिय, {{pendingCount}} लंबित",
|
||||
"{{failedCount}} failed": "{{failedCount}} विफल",
|
||||
"Waiting...": "प्रतीक्षा कर रहे हैं...",
|
||||
"Failed": "विफल",
|
||||
"Completed": "पूर्ण",
|
||||
"Cancelled": "रद्द",
|
||||
"Retry": "पुनः प्रयास करें",
|
||||
"Active": "सक्रिय",
|
||||
"Transfer Queue": "स्थानांतरण कतार",
|
||||
"Upload All": "सभी अपलोड करें",
|
||||
"Download All": "सभी डाउनलोड करें",
|
||||
"Resume Transfers": "स्थानांतरण जारी रखें",
|
||||
"Pause Transfers": "स्थानांतरण रोकें",
|
||||
"Pending": "लंबित",
|
||||
"No transfers": "कोई स्थानांतरण नहीं",
|
||||
"Retry All": "सभी पुनः प्रयास करें",
|
||||
"Clear Completed": "पूर्ण साफ़ करें",
|
||||
"Clear Failed": "विफल साफ़ करें",
|
||||
"Upload queued: {{title}}": "अपलोड कतार में: {{title}}",
|
||||
"Download queued: {{title}}": "डाउनलोड कतार में: {{title}}",
|
||||
"Book not found in library": "पुस्तकालय में पुस्तक नहीं मिली",
|
||||
"Unknown error": "अज्ञात त्रुटि",
|
||||
"Please log in to continue": "जारी रखने के लिए लॉगिन करें",
|
||||
"Cloud File Transfers": "क्लाउड फ़ाइल स्थानांतरण",
|
||||
"Show Search Results": "खोज परिणाम दिखाएं",
|
||||
"Search results for '{{term}}'": "'{{term}}' के परिणाम",
|
||||
"Close Search": "खोज बंद करें",
|
||||
"Previous Result": "पिछला परिणाम",
|
||||
"Next Result": "अगला परिणाम",
|
||||
"Bookmarks": "बुकमार्क",
|
||||
"Annotations": "टिप्पणियाँ",
|
||||
"Show Results": "परिणाम दिखाएं",
|
||||
"Clear search": "खोज साफ़ करें",
|
||||
"Clear search history": "खोज इतिहास साफ़ करें",
|
||||
"Tap to Toggle Footer": "फुटर टॉगल करने के लिए टैप करें",
|
||||
"Show Current Time": "वर्तमान समय दिखाएं",
|
||||
"Use 24 Hour Clock": "24 घंटे की घड़ी का उपयोग करें",
|
||||
"Show Current Battery Status": "वर्तमान बैटरी स्थिति दिखाएं",
|
||||
"Exported successfully": "सफलतापूर्वक निर्यात किया गया",
|
||||
"Book exported successfully.": "पुस्तक सफलतापूर्वक निर्यात की गई।",
|
||||
"Failed to export the book.": "पुस्तक निर्यात करने में विफल।",
|
||||
"Export Book": "पुस्तक निर्यात करें",
|
||||
"Whole word:": "पूरा शब्द:",
|
||||
"Error": "त्रुटि",
|
||||
"Unable to load the article. Try searching directly on {{link}}.": "लेख लोड करने में असमर्थ। सीधे {{link}} पर खोजने का प्रयास करें।",
|
||||
"Unable to load the word. Try searching directly on {{link}}.": "शब्द लोड करने में असमर्थ। सीधे {{link}} पर खोजने का प्रयास करें।",
|
||||
"Date Published": "प्रकाशन तिथि",
|
||||
"Only for TTS:": "केवल TTS के लिए:",
|
||||
"Uploaded": "अपलोड किया गया",
|
||||
"Downloaded": "डाउनलोड किया गया",
|
||||
"Deleted": "हटाया गया",
|
||||
"Note:": "नोट:",
|
||||
"Time:": "समय:",
|
||||
"Format Options": "प्रारूप विकल्प",
|
||||
"Export Date": "निर्यात तिथि",
|
||||
"Chapter Titles": "अध्याय शीर्षक",
|
||||
"Chapter Separator": "अध्याय विभाजक",
|
||||
"Highlights": "हाइलाइट्स",
|
||||
"Note Date": "नोट तिथि",
|
||||
"Advanced": "उन्नत",
|
||||
"Hide": "छिपाएं",
|
||||
"Show": "दिखाएं",
|
||||
"Use Custom Template": "कस्टम टेम्पलेट उपयोग करें",
|
||||
"Export Template": "निर्यात टेम्पलेट",
|
||||
"Template Syntax:": "टेम्पलेट सिंटैक्स:",
|
||||
"Insert value": "मान डालें",
|
||||
"Format date (locale)": "तिथि फ़ॉर्मेट करें (स्थानीय)",
|
||||
"Format date (custom)": "तिथि फ़ॉर्मेट करें (कस्टम)",
|
||||
"Conditional": "सशर्त",
|
||||
"Loop": "लूप",
|
||||
"Available Variables:": "उपलब्ध चर:",
|
||||
"Book title": "पुस्तक शीर्षक",
|
||||
"Book author": "पुस्तक लेखक",
|
||||
"Export date": "निर्यात तिथि",
|
||||
"Array of chapters": "अध्यायों की सूची",
|
||||
"Chapter title": "अध्याय शीर्षक",
|
||||
"Array of annotations": "एनोटेशन की सूची",
|
||||
"Highlighted text": "हाइलाइट किया गया पाठ",
|
||||
"Annotation note": "एनोटेशन नोट",
|
||||
"Date Format Tokens:": "तिथि प्रारूप टोकन:",
|
||||
"Year (4 digits)": "वर्ष (4 अंक)",
|
||||
"Month (01-12)": "माह (01-12)",
|
||||
"Day (01-31)": "दिन (01-31)",
|
||||
"Hour (00-23)": "घंटा (00-23)",
|
||||
"Minute (00-59)": "मिनट (00-59)",
|
||||
"Second (00-59)": "सेकंड (00-59)",
|
||||
"Show Source": "स्रोत दिखाएं",
|
||||
"No content to preview": "पूर्वावलोकन के लिए कोई सामग्री नहीं",
|
||||
"Export": "निर्यात करें",
|
||||
"Set Timeout": "टाइमआउट सेट करें",
|
||||
"Select Voice": "आवाज़ चुनें",
|
||||
"Toggle Sticky Bottom TTS Bar": "स्थिर TTS बार टॉगल करें",
|
||||
"Display what I'm reading on Discord": "Discord पर पढ़ रही किताब दिखाएं",
|
||||
"Show on Discord": "Discord पर दिखाएं",
|
||||
"Instant {{action}}": "तत्काल {{action}}",
|
||||
"Instant {{action}} Disabled": "तत्काल {{action}} अक्षम",
|
||||
"Annotation": "टिप्पणी",
|
||||
"Reset Template": "टेम्पलेट रीसेट करें",
|
||||
"Annotation style": "एनोटेशन शैली",
|
||||
"Annotation color": "एनोटेशन रंग",
|
||||
"Annotation time": "एनोटेशन समय",
|
||||
"AI": "AI",
|
||||
"Are you sure you want to re-index this book?": "क्या आप वाकई इस पुस्तक को फिर से इंडेक्स करना चाहते हैं?",
|
||||
"Enable AI in Settings": "सेटिंग्स में AI सक्षम करें",
|
||||
"Index This Book": "इस पुस्तक को इंडेक्स करें",
|
||||
"Enable AI search and chat for this book": "इस पुस्तक के लिए AI खोज और चैट सक्षम करें",
|
||||
"Start Indexing": "इंडेक्सिंग शुरू करें",
|
||||
"Indexing book...": "पुस्तक इंडेक्स हो रही है...",
|
||||
"Preparing...": "तैयारी हो रही है...",
|
||||
"Delete this conversation?": "इस वार्तालाप को हटाएं?",
|
||||
"No conversations yet": "अभी तक कोई वार्तालाप नहीं",
|
||||
"Start a new chat to ask questions about this book": "इस पुस्तक के बारे में प्रश्न पूछने के लिए नई चैट शुरू करें",
|
||||
"Rename": "नाम बदलें",
|
||||
"New Chat": "नई चैट",
|
||||
"Chat": "चैट",
|
||||
"Please enter a model ID": "कृपया मॉडल ID दर्ज करें",
|
||||
"Model not available or invalid": "मॉडल उपलब्ध नहीं या अमान्य है",
|
||||
"Failed to validate model": "मॉडल सत्यापित करने में विफल",
|
||||
"Couldn't connect to Ollama. Is it running?": "Ollama से कनेक्ट नहीं हो सका। क्या यह चल रहा है?",
|
||||
"Invalid API key or connection failed": "अमान्य API कुंजी या कनेक्शन विफल",
|
||||
"Connection failed": "कनेक्शन विफल",
|
||||
"AI Assistant": "AI सहायक",
|
||||
"Enable AI Assistant": "AI सहायक सक्षम करें",
|
||||
"Provider": "प्रदाता",
|
||||
"Ollama (Local)": "Ollama (स्थानीय)",
|
||||
"AI Gateway (Cloud)": "AI गेटवे (क्लाउड)",
|
||||
"Ollama Configuration": "Ollama कॉन्फ़िगरेशन",
|
||||
"Refresh Models": "मॉडल रीफ्रेश करें",
|
||||
"AI Model": "AI मॉडल",
|
||||
"No models detected": "कोई मॉडल नहीं मिला",
|
||||
"AI Gateway Configuration": "AI गेटवे कॉन्फ़िगरेशन",
|
||||
"Choose from a selection of high-quality, economical AI models. You can also bring your own model by selecting \"Custom Model\" below.": "उच्च-गुणवत्ता, किफायती AI मॉडल के चयन में से चुनें। आप नीचे \"कस्टम मॉडल\" का चयन करके अपना मॉडल भी उपयोग कर सकते हैं।",
|
||||
"API Key": "API कुंजी",
|
||||
"Get Key": "कुंजी प्राप्त करें",
|
||||
"Model": "मॉडल",
|
||||
"Custom Model...": "कस्टम मॉडल...",
|
||||
"Custom Model ID": "कस्टम मॉडल ID",
|
||||
"Validate": "सत्यापित करें",
|
||||
"Model available": "मॉडल उपलब्ध",
|
||||
"Connection": "कनेक्शन",
|
||||
"Test Connection": "कनेक्शन परीक्षण",
|
||||
"Connected": "कनेक्टेड",
|
||||
"Custom Colors": "कस्टम रंग",
|
||||
"Color E-Ink Mode": "कलर ई-इंक मोड",
|
||||
"Reading Ruler": "पठन रूलर",
|
||||
"Enable Reading Ruler": "पठन रूलर सक्षम करें",
|
||||
"Lines to Highlight": "हाइलाइट करने के लिए पंक्तियाँ",
|
||||
"Ruler Color": "रूलर का रंग",
|
||||
"Command Palette": "कमांड पैलेट",
|
||||
"Search settings and actions...": "सेटिंग और क्रियाएं खोजें...",
|
||||
"No results found for": "के लिए कोई परिणाम नहीं मिला",
|
||||
"Type to search settings and actions": "सेटिंग और क्रियाएं खोजने के लिए टाइप करें",
|
||||
"Recent": "हालिया",
|
||||
"navigate": "नेविगेट",
|
||||
"select": "चुनें",
|
||||
"close": "बंद करें",
|
||||
"Search Settings": "सेटिंग खोजें",
|
||||
"Page Margins": "पेज मार्जिन",
|
||||
"AI Provider": "AI प्रदाता",
|
||||
"Ollama URL": "Ollama URL",
|
||||
"Ollama Model": "Ollama मॉडल",
|
||||
"AI Gateway Model": "AI गेटवे मॉडल",
|
||||
"Actions": "क्रियाएं",
|
||||
"Navigation": "नेविगेशन",
|
||||
"Set status for {{count}} book(s)_one": "{{count}} किताब की स्थिति सेट करें",
|
||||
"Set status for {{count}} book(s)_other": "{{count}} किताबों की स्थिति सेट करें",
|
||||
"Mark as Unread": "अपठित के रूप में चिह्नित करें",
|
||||
"Mark as Finished": "समाप्त के रूप में चिह्नित करें",
|
||||
"Finished": "समाप्त",
|
||||
"Unread": "अपठित",
|
||||
"Clear Status": "स्थिति साफ़ करें",
|
||||
"Status": "स्थिति",
|
||||
"Loading": "लोड हो रहा है...",
|
||||
"Exit Paragraph Mode": "पैराग्राफ मोड से बाहर निकलें",
|
||||
"Paragraph Mode": "पैराग्राफ मोड",
|
||||
"Embedding Model": "एंबेडिंग मॉडल",
|
||||
"{{count}} book(s) synced_one": "{{count}} पुस्तक सिंक की गई",
|
||||
"{{count}} book(s) synced_other": "{{count}} पुस्तकें सिंक की गईं",
|
||||
"Unable to start RSVP": "RSVP शुरू करने में असमर्थ",
|
||||
"RSVP not supported for PDF": "PDF के लिए RSVP समर्थित नहीं है",
|
||||
"Select Chapter": "अध्याय चुनें",
|
||||
"Context": "संदर्भ",
|
||||
"Ready": "तैयार",
|
||||
"Chapter Progress": "अध्याय प्रगति",
|
||||
"words": "शब्द",
|
||||
"{{time}} left": "{{time}} शेष",
|
||||
"Reading progress": "पठन प्रगति",
|
||||
"Click to seek": "सीक करने के लिए क्लिक करें",
|
||||
"Skip back 15 words": "15 शब्द पीछे",
|
||||
"Back 15 words (Shift+Left)": "15 शब्द पीछे (Shift+Left)",
|
||||
"Pause (Space)": "विराम (Space)",
|
||||
"Play (Space)": "चलाएं (Space)",
|
||||
"Skip forward 15 words": "15 शब्द आगे",
|
||||
"Forward 15 words (Shift+Right)": "15 शब्द आगे (Shift+Right)",
|
||||
"Decrease speed": "गति कम करें",
|
||||
"Slower (Left/Down)": "धीमी (Left/Down)",
|
||||
"Increase speed": "गति बढ़ाएं",
|
||||
"Faster (Right/Up)": "तेज़ (Right/Up)",
|
||||
"Start RSVP Reading": "RSVP पठन शुरू करें",
|
||||
"Choose where to start reading": "चुनें कि कहाँ से पढ़ना शुरू करना है",
|
||||
"From Chapter Start": "अध्याय के आरंभ से",
|
||||
"Start reading from the beginning of the chapter": "अध्याय की शुरुआत से पढ़ना शुरू करें",
|
||||
"Resume": "फिर से शुरू करें",
|
||||
"Continue from where you left off": "वहीं से जारी रखें जहाँ आपने छोड़ा था",
|
||||
"From Current Page": "वर्तमान पृष्ठ से",
|
||||
"Start from where you are currently reading": "जहाँ आप अभी पढ़ रहे हैं वहीं से शुरू करें",
|
||||
"From Selection": "चयन से",
|
||||
"Speed Reading Mode": "त्वरित पठन मोड",
|
||||
"Scroll left": "बाएं स्क्रॉल करें",
|
||||
"Scroll right": "दाएं स्क्रॉल करें",
|
||||
"Library Sync Progress": "पुस्तकालय सिंक प्रगति",
|
||||
"Back to library": "लाइब्रेरी पर वापस जाएं",
|
||||
"Group by...": "इसके द्वारा समूहबद्ध करें...",
|
||||
"Export as Plain Text": "प्लेन टेक्स्ट के रूप में एक्सपोर्ट करें",
|
||||
"Export as Markdown": "Markdown के रूप में एक्सपोर्ट करें",
|
||||
"Show Page Navigation Buttons": "नेविगेशन बटन",
|
||||
"Page {{number}}": "पृष्ठ {{number}}",
|
||||
"highlight": "हाइलाइट",
|
||||
"underline": "अंडरलाइन",
|
||||
"squiggly": "टेढ़ी-मेढ़ी रेखा",
|
||||
"red": "लाल",
|
||||
"violet": "बैंगनी",
|
||||
"blue": "नीला",
|
||||
"green": "हरा",
|
||||
"yellow": "पीला",
|
||||
"Select {{style}} style": "{{style}} शैली चुनें",
|
||||
"Select {{color}} color": "{{color}} रंग चुनें",
|
||||
"Close Book": "किताब बंद करें",
|
||||
"Speed Reading": "तीव्र पठन",
|
||||
"Close Speed Reading": "तीव्र पठन बंद करें",
|
||||
"Authors": "लेखक",
|
||||
"Books": "पुस्तकें",
|
||||
"Groups": "समूह",
|
||||
"Back to TTS Location": "टीटीएस स्थान पर वापस जाएं",
|
||||
"Metadata": "मेटाडाटा",
|
||||
"Image viewer": "छवि दर्शक",
|
||||
"Previous Image": "पिछली छवि",
|
||||
"Next Image": "अगली छवि",
|
||||
"Zoomed": "ज़ूम किया गया",
|
||||
"Zoom level": "ज़ूम स्तर",
|
||||
"Table viewer": "तालिका दर्शक",
|
||||
"Unable to connect to Readwise. Please check your network connection.": "Readwise से कनेक्ट करने में असमर्थ। कृपया अपना नेटवर्क कनेक्शन जांचें।",
|
||||
"Invalid Readwise access token": "अमान्य Readwise एक्सेस टोकन",
|
||||
"Disconnected from Readwise": "Readwise से डिस्कनेक्ट हो गया",
|
||||
"Never": "कभी नहीं",
|
||||
"Readwise Settings": "Readwise सेटिंग्स",
|
||||
"Connected to Readwise": "Readwise से जुड़ा हुआ",
|
||||
"Last synced: {{time}}": "पिछला सिंक: {{time}}",
|
||||
"Sync Enabled": "सिंक सक्षम",
|
||||
"Disconnect": "डिस्कनेक्ट करें",
|
||||
"Connect your Readwise account to sync highlights.": "हाइलाइट्स सिंक करने के लिए अपना Readwise खाता कनेक्ट करें।",
|
||||
"Get your access token at": "अपना एक्सेस टोकन यहाँ प्राप्त करें",
|
||||
"Access Token": "एक्सेस टोकन",
|
||||
"Paste your Readwise access token": "अपना Readwise एक्सेस टोकन पेस्ट करें",
|
||||
"Config": "कॉन्फिग",
|
||||
"Readwise Sync": "Readwise सिंक",
|
||||
"Push Highlights": "हाइलाइट्स भेजें",
|
||||
"Highlights synced to Readwise": "हाइलाइट्स Readwise में सिंक हो गए",
|
||||
"Readwise sync failed: no internet connection": "Readwise सिंक विफल रहा: कोई इंटरनेट कनेक्शन नहीं",
|
||||
"Readwise sync failed: {{error}}": "Readwise सिंक विफल रहा: {{error}}",
|
||||
"System Screen Brightness": "सिस्टम स्क्रीन चमक",
|
||||
"Page:": "पृष्ठ:",
|
||||
"Page: {{number}}": "पृष्ठ: {{number}}",
|
||||
"Annotation page number": "व्याख्या पृष्ठ संख्या",
|
||||
"Translating...": "अनुवाद हो रहा है...",
|
||||
"Show Battery Percentage": "बैटरी प्रतिशत दिखाएं",
|
||||
"Hide Scrollbar": "स्क्रॉलबार छुपाएँ",
|
||||
"Skip to last reading position": "अंतिम पढ़ने की स्थिति पर जाएँ",
|
||||
"Show context": "संदर्भ दिखाएँ",
|
||||
"Hide context": "संदर्भ छुपाएँ",
|
||||
"Decrease font size": "फ़ॉन्ट आकार घटाएँ",
|
||||
"Increase font size": "फ़ॉन्ट आकार बढ़ाएँ",
|
||||
"Focus": "फ़ोकस",
|
||||
"Theme color": "थीम रंग",
|
||||
"Import failed": "आयात विफल",
|
||||
"Available Formatters:": "उपलब्ध फ़ॉर्मेटर:",
|
||||
"Format date": "तारीख फ़ॉर्मेट करें",
|
||||
"Markdown block quote (> per line)": "Markdown ब्लॉक कोट (> प्रति पंक्ति)",
|
||||
"Newlines to <br>": "नई पंक्तियाँ <br> में",
|
||||
"Change case": "केस बदलें",
|
||||
"Trim whitespace": "रिक्त स्थान हटाएँ",
|
||||
"Truncate to n characters": "n अक्षरों तक छोटा करें",
|
||||
"Replace text": "टेक्स्ट बदलें",
|
||||
"Fallback value": "फ़ॉलबैक मान",
|
||||
"Get length": "लंबाई प्राप्त करें",
|
||||
"First/last element": "पहला/अंतिम तत्व",
|
||||
"Join array": "ऐरे जोड़ें",
|
||||
"Backup failed: {{error}}": "बैकअप विफल: {{error}}",
|
||||
"Select Backup": "बैकअप चुनें",
|
||||
"Restore failed: {{error}}": "पुनर्स्थापना विफल: {{error}}",
|
||||
"Backup & Restore": "बैकअप और पुनर्स्थापना",
|
||||
"Create a backup of your library or restore from a previous backup. Restoring will merge with your current library.": "अपनी लाइब्रेरी का बैकअप बनाएं या पिछले बैकअप से पुनर्स्थापित करें। पुनर्स्थापना आपकी वर्तमान लाइब्रेरी के साथ मर्ज होगी।",
|
||||
"Backup Library": "लाइब्रेरी बैकअप",
|
||||
"Restore Library": "लाइब्रेरी पुनर्स्थापित करें",
|
||||
"Creating backup...": "बैकअप बनाया जा रहा है...",
|
||||
"Restoring library...": "लाइब्रेरी पुनर्स्थापित हो रही है...",
|
||||
"{{current}} of {{total}} items": "{{current}} / {{total}} आइटम",
|
||||
"Backup completed successfully!": "बैकअप सफलतापूर्वक पूर्ण!",
|
||||
"Restore completed successfully!": "पुनर्स्थापना सफलतापूर्वक पूर्ण!",
|
||||
"Your library has been saved to the selected location.": "आपकी लाइब्रेरी चयनित स्थान पर सहेजी गई है।",
|
||||
"{{added}} books added, {{updated}} books updated.": "{{added}} पुस्तकें जोड़ी गईं, {{updated}} पुस्तकें अपडेट की गईं।",
|
||||
"Operation failed": "ऑपरेशन विफल",
|
||||
"Loading library...": "लाइब्रेरी लोड हो रही है...",
|
||||
"{{count}} books refreshed_one": "{{count}} पुस्तक रिफ्रेश हुई",
|
||||
"{{count}} books refreshed_other": "{{count}} पुस्तकें रिफ्रेश हुईं",
|
||||
"Failed to refresh metadata": "मेटाडेटा रिफ्रेश विफल",
|
||||
"Refresh Metadata": "मेटाडेटा रिफ्रेश करें"
|
||||
}
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
"Auto Mode": "Mode Otomatis",
|
||||
"Behavior": "Perilaku",
|
||||
"Book": "Buku",
|
||||
"Book Cover": "Sampul Buku",
|
||||
"Bookmark": "Penanda",
|
||||
"Cancel": "Batal",
|
||||
"Chapter": "Bab",
|
||||
@@ -107,7 +106,6 @@
|
||||
"Wikipedia": "Wikipedia",
|
||||
"Writing Mode": "Mode Menulis",
|
||||
"Your Library": "Perpustakaan Anda",
|
||||
"TTS not supported for PDF": "TTS tidak didukung untuk PDF",
|
||||
"Override Book Font": "Ganti Font Buku",
|
||||
"Apply to All Books": "Terapkan ke semua buku",
|
||||
"Apply to This Book": "Terapkan ke buku ini",
|
||||
@@ -174,9 +172,6 @@
|
||||
"Token": "Token",
|
||||
"Your OTP token": "Token OTP Anda",
|
||||
"Verify token": "Verifikasi token",
|
||||
"Sign in with Google": "Masuk dengan Google",
|
||||
"Sign in with Apple": "Masuk dengan Apple",
|
||||
"Sign in with GitHub": "Masuk dengan GitHub",
|
||||
"Account": "Akun",
|
||||
"Failed to delete user. Please try again later.": "Gagal menghapus pengguna. Silakan coba lagi nanti.",
|
||||
"Community Support": "Dukungan Komunitas",
|
||||
@@ -194,7 +189,7 @@
|
||||
"No supported files found. Supported formats: {{formats}}": "Tidak ada file yang didukung ditemukan. Format yang didukung: {{formats}}",
|
||||
"Drop to Import Books": "Jatuhkan untuk Mengimpor Buku",
|
||||
"Custom": "Kustom",
|
||||
"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": "Seluruh dunia adalah panggung,\nDan semua pria dan wanita hanyalah pemain;\nMereka memiliki keluar dan masuk mereka,\nDan seorang pria dalam hidupnya memainkan banyak peran,\nTindakannya ada tujuh zaman.\n\n— William Shakespeare",
|
||||
"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": "Seluruh dunia adalah panggung,\nDan semua pria dan wanita hanyalah pemain;\nMereka memiliki keluar dan masuk mereka,\nDan seorang pria dalam hidupnya memainkan banyak peran,\nTindakannya ada tujuh zaman.\n\n— William Shakespeare",
|
||||
"Custom Theme": "Tema Kustom",
|
||||
"Theme Name": "Nama Tema",
|
||||
"Text Color": "Warna Teks",
|
||||
@@ -336,10 +331,10 @@
|
||||
"Fit": "Pas",
|
||||
"Reset {{settings}}": "Atur Ulang {{settings}}",
|
||||
"Reset Settings": "Atur Ulang Pengaturan",
|
||||
"{{count}} pages left in chapter_other": "{{count}} halaman tersisa di bab ini",
|
||||
"{{count}} pages left in chapter_other": "<0>{{count}}</0><1> halaman tersisa di bab ini</1>",
|
||||
"Show Remaining Pages": "Tampilkan halaman tersisa",
|
||||
"Source Han Serif CN VF": "Source Han Serif",
|
||||
"Huiwen-mincho": "Huiwen Mincho",
|
||||
"Source Han Serif CN": "Source Han Serif",
|
||||
"Huiwen-MinchoGBK": "Huiwen Mincho",
|
||||
"KingHwa_OldSong": "KingHwa Song",
|
||||
"Manage Subscription": "Kelola Langganan",
|
||||
"Coming Soon": "Segera Hadir",
|
||||
@@ -599,11 +594,10 @@
|
||||
"Size": "Ukuran",
|
||||
"Cover": "Sampul",
|
||||
"Contain": "Mengandung",
|
||||
"{{number}} pages left in chapter": "{{number}} halaman tersisa di bab",
|
||||
"{{number}} pages left in chapter": "<0>{{number}}</0><1> halaman tersisa di bab</1>",
|
||||
"Device": "Perangkat",
|
||||
"E-Ink Mode": "Mode E-Ink",
|
||||
"Highlight Colors": "Warna Sorotan",
|
||||
"Auto Screen Brightness": "Auto Kecerahan Layar",
|
||||
"Pagination": "Paginasi",
|
||||
"Disable Double Tap": "Nonaktifkan Ketuk Ganda",
|
||||
"Tap to Paginate": "Ketuk untuk Paginasi",
|
||||
@@ -652,5 +646,448 @@
|
||||
"Update email": "Perbarui email",
|
||||
"Current email": "Email saat ini",
|
||||
"Update Email": "Perbarui email",
|
||||
"All": "Semua"
|
||||
"All": "Semua",
|
||||
"Unable to open book": "Tidak dapat membuka buku",
|
||||
"Punctuation": "Tanda Baca",
|
||||
"Replace Quotation Marks": "Ganti Tanda Kutip",
|
||||
"Enabled only in vertical layout.": "Hanya diaktifkan dalam tata letak vertikal.",
|
||||
"No Conversion": "Tanpa konversi",
|
||||
"Simplified to Traditional": "Sederhana → Tradisional",
|
||||
"Traditional to Simplified": "Tradisional → Sederhana",
|
||||
"Simplified to Traditional (Taiwan)": "Sederhana → Tradisional (Taiwan)",
|
||||
"Simplified to Traditional (Hong Kong)": "Sederhana → Tradisional (Hong Kong)",
|
||||
"Simplified to Traditional (Taiwan), with phrases": "Sederhana → Tradisional (Taiwan • frasa)",
|
||||
"Traditional (Taiwan) to Simplified": "Tradisional (Taiwan) → Sederhana",
|
||||
"Traditional (Hong Kong) to Simplified": "Tradisional (Hong Kong) → Sederhana",
|
||||
"Traditional (Taiwan) to Simplified, with phrases": "Tradisional (Taiwan • frasa) → Sederhana",
|
||||
"Convert Simplified and Traditional Chinese": "Konversi Tionghoa Sederhana/Tradisional",
|
||||
"Convert Mode": "Mode Konversi",
|
||||
"Failed to auto-save book cover for lock screen: {{error}}": "Gagal menyimpan otomatis sampul buku untuk layar kunci: {{error}}",
|
||||
"Download from Cloud": "Unduh dari Cloud",
|
||||
"Upload to Cloud": "Unggah ke Cloud",
|
||||
"Clear Custom Fonts": "Bersihkan Font Kustom",
|
||||
"Columns": "Kolom",
|
||||
"OPDS Catalogs": "Katalog OPDS",
|
||||
"Adding LAN addresses is not supported in the web app version.": "Menambahkan alamat LAN tidak didukung di versi web.",
|
||||
"Invalid OPDS catalog. Please check the URL.": "Katalog OPDS tidak valid. Silakan periksa URL-nya.",
|
||||
"Browse and download books from online catalogs": "Jelajahi dan unduh buku dari katalog online",
|
||||
"My Catalogs": "Katalog Saya",
|
||||
"Add Catalog": "Tambah Katalog",
|
||||
"No catalogs yet": "Belum ada katalog",
|
||||
"Add your first OPDS catalog to start browsing books": "Tambahkan katalog OPDS pertama Anda untuk mulai menjelajahi buku",
|
||||
"Add Your First Catalog": "Tambah Katalog Pertama Anda",
|
||||
"Browse": "Jelajahi",
|
||||
"Popular Catalogs": "Katalog Populer",
|
||||
"Add": "Tambah",
|
||||
"Add OPDS Catalog": "Tambah Katalog OPDS",
|
||||
"Catalog Name": "Nama Katalog",
|
||||
"My Calibre Library": "Perpustakaan Calibre Saya",
|
||||
"OPDS URL": "URL OPDS",
|
||||
"Username (optional)": "Username (opsional)",
|
||||
"Password (optional)": "Password (opsional)",
|
||||
"Description (optional)": "Deskripsi (opsional)",
|
||||
"A brief description of this catalog": "Deskripsi singkat untuk katalog ini",
|
||||
"Validating...": "Memvalidasi...",
|
||||
"View All": "Lihat Semua",
|
||||
"Forward": "Maju",
|
||||
"Home": "Beranda",
|
||||
"{{count}} items_other": "{{count}} item",
|
||||
"Download completed": "Unduhan selesai",
|
||||
"Download failed": "Unduhan gagal",
|
||||
"Open Access": "Akses Terbuka",
|
||||
"Borrow": "Pinjam",
|
||||
"Buy": "Beli",
|
||||
"Subscribe": "Berlangganan",
|
||||
"Sample": "Contoh",
|
||||
"Download": "Unduh",
|
||||
"Open & Read": "Buka & Baca",
|
||||
"Tags": "Tag",
|
||||
"Tag": "Tag",
|
||||
"First": "Pertama",
|
||||
"Previous": "Sebelumnya",
|
||||
"Next": "Berikutnya",
|
||||
"Last": "Terakhir",
|
||||
"Cannot Load Page": "Tidak dapat memuat halaman",
|
||||
"An error occurred": "Terjadi kesalahan",
|
||||
"Online Library": "Perpustakaan Online",
|
||||
"URL must start with http:// or https://": "URL harus diawali dengan http:// atau https://",
|
||||
"Title, Author, Tag, etc...": "Judul, Penulis, Tag, dll...",
|
||||
"Query": "Kueri",
|
||||
"Subject": "Subjek",
|
||||
"Enter {{terms}}": "Masukkan {{terms}}",
|
||||
"No search results found": "Tidak ada hasil pencarian ditemukan",
|
||||
"Failed to load OPDS feed: {{status}} {{statusText}}": "Gagal memuat feed OPDS: {{status}} {{statusText}}",
|
||||
"Search in {{title}}": "Cari di {{title}}",
|
||||
"Manage Storage": "Kelola Penyimpanan",
|
||||
"Failed to load files": "Gagal memuat file",
|
||||
"Deleted {{count}} file(s)_other": "{{count}} file dihapus",
|
||||
"Failed to delete {{count}} file(s)_other": "Gagal menghapus {{count}} file",
|
||||
"Failed to delete files": "Gagal menghapus file",
|
||||
"Total Files": "Total File",
|
||||
"Total Size": "Total Ukuran",
|
||||
"Quota": "Kuota",
|
||||
"Used": "Digunakan",
|
||||
"Files": "File",
|
||||
"Search files...": "Cari file...",
|
||||
"Newest First": "Terbaru",
|
||||
"Oldest First": "Terlama",
|
||||
"Largest First": "Terbesar",
|
||||
"Smallest First": "Terkecil",
|
||||
"Name A-Z": "Nama A-Z",
|
||||
"Name Z-A": "Nama Z-A",
|
||||
"{{count}} selected_other": "{{count}} dipilih",
|
||||
"Delete Selected": "Hapus yang Dipilih",
|
||||
"Created": "Dibuat",
|
||||
"No files found": "Tidak ada file ditemukan",
|
||||
"No files uploaded yet": "Belum ada file diunggah",
|
||||
"files": "file",
|
||||
"Page {{current}} of {{total}}": "Halaman {{current}} dari {{total}}",
|
||||
"Are you sure to delete {{count}} selected file(s)?_other": "Yakin ingin menghapus {{count}} file yang dipilih?",
|
||||
"Cloud Storage Usage": "Penggunaan Penyimpanan Cloud",
|
||||
"Rename Group": "Ganti Nama Grup",
|
||||
"From Directory": "Dari Direktori",
|
||||
"Successfully imported {{count}} book(s)_other": "Berhasil mengimpor {{count}} buku",
|
||||
"Count": "Jumlah",
|
||||
"Start Page": "Halaman Awal",
|
||||
"Search in OPDS Catalog...": "Cari di Katalog OPDS...",
|
||||
"Please log in to use advanced TTS features": "Silakan masuk untuk menggunakan fitur TTS lanjutan",
|
||||
"Word limit of 30 words exceeded.": "Batas 30 kata telah terlampaui.",
|
||||
"Proofread": "Koreksi",
|
||||
"Current selection": "Pilihan saat ini",
|
||||
"All occurrences in this book": "Semua kemunculan di buku ini",
|
||||
"All occurrences in your library": "Semua kemunculan di perpustakaan Anda",
|
||||
"Selected text:": "Teks terpilih:",
|
||||
"Replace with:": "Ganti dengan:",
|
||||
"Enter text...": "Masukkan teks…",
|
||||
"Case sensitive:": "Peka huruf besar dan kecil:",
|
||||
"Scope:": "Cakupan:",
|
||||
"Selection": "Pilihan",
|
||||
"Library": "Perpustakaan",
|
||||
"Yes": "Ya",
|
||||
"No": "Tidak",
|
||||
"Proofread Replacement Rules": "Aturan penggantian koreksi",
|
||||
"Selected Text Rules": "Aturan teks terpilih",
|
||||
"No selected text replacement rules": "Tidak ada aturan penggantian untuk teks terpilih",
|
||||
"Book Specific Rules": "Aturan khusus buku",
|
||||
"No book-level replacement rules": "Tidak ada aturan penggantian tingkat buku",
|
||||
"Disable Quick Action": "Nonaktifkan Aksi Cepat",
|
||||
"Enable Quick Action on Selection": "Aktifkan Aksi Cepat saat memilih",
|
||||
"None": "Tidak ada",
|
||||
"Annotation Tools": "Alat Anotasi",
|
||||
"Enable Quick Actions": "Aktifkan Aksi Cepat",
|
||||
"Quick Action": "Aksi Cepat",
|
||||
"Copy to Notebook": "Salin ke Buku Catatan",
|
||||
"Copy text after selection": "Salin teks setelah pemilihan",
|
||||
"Highlight text after selection": "Sorot teks setelah pemilihan",
|
||||
"Annotate text after selection": "Anotasi teks setelah pemilihan",
|
||||
"Search text after selection": "Cari teks setelah pemilihan",
|
||||
"Look up text in dictionary after selection": "Cari teks di kamus setelah pemilihan",
|
||||
"Look up text in Wikipedia after selection": "Cari teks di Wikipedia setelah pemilihan",
|
||||
"Translate text after selection": "Terjemahkan teks setelah pemilihan",
|
||||
"Read text aloud after selection": "Bacakan teks setelah pemilihan",
|
||||
"Proofread text after selection": "Periksa teks setelah pemilihan",
|
||||
"{{activeCount}} active, {{pendingCount}} pending": "{{activeCount}} aktif, {{pendingCount}} menunggu",
|
||||
"{{failedCount}} failed": "{{failedCount}} gagal",
|
||||
"Waiting...": "Menunggu...",
|
||||
"Failed": "Gagal",
|
||||
"Completed": "Selesai",
|
||||
"Cancelled": "Dibatalkan",
|
||||
"Retry": "Coba lagi",
|
||||
"Active": "Aktif",
|
||||
"Transfer Queue": "Antrian Transfer",
|
||||
"Upload All": "Unggah Semua",
|
||||
"Download All": "Unduh Semua",
|
||||
"Resume Transfers": "Lanjutkan Transfer",
|
||||
"Pause Transfers": "Jeda Transfer",
|
||||
"Pending": "Menunggu",
|
||||
"No transfers": "Tidak ada transfer",
|
||||
"Retry All": "Coba Semua Lagi",
|
||||
"Clear Completed": "Hapus Selesai",
|
||||
"Clear Failed": "Hapus Gagal",
|
||||
"Upload queued: {{title}}": "Unggahan dalam antrian: {{title}}",
|
||||
"Download queued: {{title}}": "Unduhan dalam antrian: {{title}}",
|
||||
"Book not found in library": "Buku tidak ditemukan di perpustakaan",
|
||||
"Unknown error": "Kesalahan tidak diketahui",
|
||||
"Please log in to continue": "Silakan masuk untuk melanjutkan",
|
||||
"Cloud File Transfers": "Transfer File Cloud",
|
||||
"Show Search Results": "Tampilkan hasil pencarian",
|
||||
"Search results for '{{term}}'": "Hasil untuk '{{term}}'",
|
||||
"Close Search": "Tutup pencarian",
|
||||
"Previous Result": "Hasil sebelumnya",
|
||||
"Next Result": "Hasil berikutnya",
|
||||
"Bookmarks": "Penanda",
|
||||
"Annotations": "Anotasi",
|
||||
"Show Results": "Tampilkan Hasil",
|
||||
"Clear search": "Hapus pencarian",
|
||||
"Clear search history": "Hapus riwayat pencarian",
|
||||
"Tap to Toggle Footer": "Ketuk untuk beralih footer",
|
||||
"Show Current Time": "Tampilkan Waktu Sekarang",
|
||||
"Use 24 Hour Clock": "Gunakan Format 24 Jam",
|
||||
"Show Current Battery Status": "Tampilkan Status Baterai Saat Ini",
|
||||
"Exported successfully": "Berhasil diekspor",
|
||||
"Book exported successfully.": "Buku berhasil diekspor.",
|
||||
"Failed to export the book.": "Gagal mengekspor buku.",
|
||||
"Export Book": "Ekspor Buku",
|
||||
"Whole word:": "Kata utuh:",
|
||||
"Error": "Kesalahan",
|
||||
"Unable to load the article. Try searching directly on {{link}}.": "Tidak dapat memuat artikel. Coba cari langsung di {{link}}.",
|
||||
"Unable to load the word. Try searching directly on {{link}}.": "Tidak dapat memuat kata. Coba cari langsung di {{link}}.",
|
||||
"Date Published": "Tanggal terbit",
|
||||
"Only for TTS:": "Hanya untuk TTS:",
|
||||
"Uploaded": "Diunggah",
|
||||
"Downloaded": "Diunduh",
|
||||
"Deleted": "Dihapus",
|
||||
"Note:": "Catatan:",
|
||||
"Time:": "Waktu:",
|
||||
"Format Options": "Opsi Format",
|
||||
"Export Date": "Tanggal Ekspor",
|
||||
"Chapter Titles": "Judul Bab",
|
||||
"Chapter Separator": "Pemisah Bab",
|
||||
"Highlights": "Sorotan",
|
||||
"Note Date": "Tanggal Catatan",
|
||||
"Advanced": "Lanjutan",
|
||||
"Hide": "Sembunyikan",
|
||||
"Show": "Tampilkan",
|
||||
"Use Custom Template": "Gunakan Template Kustom",
|
||||
"Export Template": "Template Ekspor",
|
||||
"Template Syntax:": "Sintaks Template:",
|
||||
"Insert value": "Masukkan nilai",
|
||||
"Format date (locale)": "Format tanggal (lokal)",
|
||||
"Format date (custom)": "Format tanggal (kustom)",
|
||||
"Conditional": "Kondisional",
|
||||
"Loop": "Loop",
|
||||
"Available Variables:": "Variabel yang Tersedia:",
|
||||
"Book title": "Judul buku",
|
||||
"Book author": "Penulis buku",
|
||||
"Export date": "Tanggal ekspor",
|
||||
"Array of chapters": "Daftar bab",
|
||||
"Chapter title": "Judul bab",
|
||||
"Array of annotations": "Daftar anotasi",
|
||||
"Highlighted text": "Teks yang disorot",
|
||||
"Annotation note": "Catatan anotasi",
|
||||
"Date Format Tokens:": "Token Format Tanggal:",
|
||||
"Year (4 digits)": "Tahun (4 digit)",
|
||||
"Month (01-12)": "Bulan (01-12)",
|
||||
"Day (01-31)": "Hari (01-31)",
|
||||
"Hour (00-23)": "Jam (00-23)",
|
||||
"Minute (00-59)": "Menit (00-59)",
|
||||
"Second (00-59)": "Detik (00-59)",
|
||||
"Show Source": "Tampilkan Sumber",
|
||||
"No content to preview": "Tidak ada konten untuk dipratinjau",
|
||||
"Export": "Ekspor",
|
||||
"Set Timeout": "Atur batas waktu",
|
||||
"Select Voice": "Pilih suara",
|
||||
"Toggle Sticky Bottom TTS Bar": "Alihkan bilah TTS tetap",
|
||||
"Display what I'm reading on Discord": "Tampilkan buku yang sedang dibaca di Discord",
|
||||
"Show on Discord": "Tampilkan di Discord",
|
||||
"Instant {{action}}": "{{action}} Instan",
|
||||
"Instant {{action}} Disabled": "{{action}} Instan Dinonaktifkan",
|
||||
"Annotation": "Anotasi",
|
||||
"Reset Template": "Atur Ulang Template",
|
||||
"Annotation style": "Gaya anotasi",
|
||||
"Annotation color": "Warna anotasi",
|
||||
"Annotation time": "Waktu anotasi",
|
||||
"AI": "AI",
|
||||
"Are you sure you want to re-index this book?": "Apakah Anda yakin ingin mengindeks ulang buku ini?",
|
||||
"Enable AI in Settings": "Aktifkan AI di Pengaturan",
|
||||
"Index This Book": "Indeks Buku Ini",
|
||||
"Enable AI search and chat for this book": "Aktifkan pencarian AI dan obrolan untuk buku ini",
|
||||
"Start Indexing": "Mulai Mengindeks",
|
||||
"Indexing book...": "Mengindeks buku...",
|
||||
"Preparing...": "Mempersiapkan...",
|
||||
"Delete this conversation?": "Hapus percakapan ini?",
|
||||
"No conversations yet": "Belum ada percakapan",
|
||||
"Start a new chat to ask questions about this book": "Mulai obrolan baru untuk mengajukan pertanyaan tentang buku ini",
|
||||
"Rename": "Ubah nama",
|
||||
"New Chat": "Obrolan Baru",
|
||||
"Chat": "Obrolan",
|
||||
"Please enter a model ID": "Silakan masukkan ID model",
|
||||
"Model not available or invalid": "Model tidak tersedia atau tidak valid",
|
||||
"Failed to validate model": "Gagal memvalidasi model",
|
||||
"Couldn't connect to Ollama. Is it running?": "Tidak dapat terhubung ke Ollama. Apakah sedang berjalan?",
|
||||
"Invalid API key or connection failed": "Kunci API tidak valid atau koneksi gagal",
|
||||
"Connection failed": "Koneksi gagal",
|
||||
"AI Assistant": "Asisten AI",
|
||||
"Enable AI Assistant": "Aktifkan Asisten AI",
|
||||
"Provider": "Penyedia",
|
||||
"Ollama (Local)": "Ollama (Lokal)",
|
||||
"AI Gateway (Cloud)": "Gateway AI (Cloud)",
|
||||
"Ollama Configuration": "Konfigurasi Ollama",
|
||||
"Refresh Models": "Segarkan Model",
|
||||
"AI Model": "Model AI",
|
||||
"No models detected": "Tidak ada model terdeteksi",
|
||||
"AI Gateway Configuration": "Konfigurasi Gateway AI",
|
||||
"Choose from a selection of high-quality, economical AI models. You can also bring your own model by selecting \"Custom Model\" below.": "Pilih dari pilihan model AI berkualitas tinggi dan ekonomis. Anda juga dapat menggunakan model Anda sendiri dengan memilih \"Model Kustom\" di bawah.",
|
||||
"API Key": "Kunci API",
|
||||
"Get Key": "Dapatkan Kunci",
|
||||
"Model": "Model",
|
||||
"Custom Model...": "Model Kustom...",
|
||||
"Custom Model ID": "ID Model Kustom",
|
||||
"Validate": "Validasi",
|
||||
"Model available": "Model tersedia",
|
||||
"Connection": "Koneksi",
|
||||
"Test Connection": "Uji Koneksi",
|
||||
"Connected": "Terhubung",
|
||||
"Custom Colors": "Warna Kustom",
|
||||
"Color E-Ink Mode": "Mode E-Ink Berwarna",
|
||||
"Reading Ruler": "Penggaris Membaca",
|
||||
"Enable Reading Ruler": "Aktifkan Penggaris Membaca",
|
||||
"Lines to Highlight": "Baris untuk Disorot",
|
||||
"Ruler Color": "Warna Penggaris",
|
||||
"Command Palette": "Palet Perintah",
|
||||
"Search settings and actions...": "Cari pengaturan dan tindakan...",
|
||||
"No results found for": "Tidak ada hasil ditemukan untuk",
|
||||
"Type to search settings and actions": "Ketik untuk mencari pengaturan dan tindakan",
|
||||
"Recent": "Terbaru",
|
||||
"navigate": "navigasi",
|
||||
"select": "pilih",
|
||||
"close": "tutup",
|
||||
"Search Settings": "Cari Pengaturan",
|
||||
"Page Margins": "Margin Halaman",
|
||||
"AI Provider": "Penyedia AI",
|
||||
"Ollama URL": "URL Ollama",
|
||||
"Ollama Model": "Model Ollama",
|
||||
"AI Gateway Model": "Model AI Gateway",
|
||||
"Actions": "Tindakan",
|
||||
"Navigation": "Navigasi",
|
||||
"Set status for {{count}} book(s)_other": "Atur status untuk {{count}} buku",
|
||||
"Mark as Unread": "Tandai sebagai Belum Dibaca",
|
||||
"Mark as Finished": "Tandai sebagai Selesai",
|
||||
"Finished": "Selesai",
|
||||
"Unread": "Belum Dibaca",
|
||||
"Clear Status": "Hapus Status",
|
||||
"Status": "Status",
|
||||
"Loading": "Memuat...",
|
||||
"Exit Paragraph Mode": "Keluar dari Mode Paragraf",
|
||||
"Paragraph Mode": "Mode Paragraf",
|
||||
"Embedding Model": "Model Penyematan",
|
||||
"{{count}} book(s) synced_other": "{{count}} buku telah disinkronkan",
|
||||
"Unable to start RSVP": "Tidak dapat memulai RSVP",
|
||||
"RSVP not supported for PDF": "RSVP tidak didukung untuk PDF",
|
||||
"Select Chapter": "Pilih Bab",
|
||||
"Context": "Konteks",
|
||||
"Ready": "Siap",
|
||||
"Chapter Progress": "Kemajuan Bab",
|
||||
"words": "kata",
|
||||
"{{time}} left": "{{time}} tersisa",
|
||||
"Reading progress": "Kemajuan membaca",
|
||||
"Click to seek": "Klik untuk mencari",
|
||||
"Skip back 15 words": "Lompat mundur 15 kata",
|
||||
"Back 15 words (Shift+Left)": "Mundur 15 kata (Shift+Kiri)",
|
||||
"Pause (Space)": "Jeda (Spasi)",
|
||||
"Play (Space)": "Putar (Spasi)",
|
||||
"Skip forward 15 words": "Lompat maju 15 kata",
|
||||
"Forward 15 words (Shift+Right)": "Maju 15 kata (Shift+Kanan)",
|
||||
"Decrease speed": "Kurangi kecepatan",
|
||||
"Slower (Left/Down)": "Lebih lambat (Kiri/Bawah)",
|
||||
"Increase speed": "Tambah kecepatan",
|
||||
"Faster (Right/Up)": "Lebih cepat (Kanan/Atas)",
|
||||
"Start RSVP Reading": "Mulai Membaca RSVP",
|
||||
"Choose where to start reading": "Pilih tempat untuk mulai membaca",
|
||||
"From Chapter Start": "Dari Awal Bab",
|
||||
"Start reading from the beginning of the chapter": "Mulai membaca dari awal bab",
|
||||
"Resume": "Lanjutkan",
|
||||
"Continue from where you left off": "Lanjutkan dari tempat Anda berhenti",
|
||||
"From Current Page": "Dari Halaman Saat Ini",
|
||||
"Start from where you are currently reading": "Mulai dari tempat Anda sedang membaca",
|
||||
"From Selection": "Dari Pilihan",
|
||||
"Speed Reading Mode": "Mode Baca Cepat",
|
||||
"Scroll left": "Gulir ke kiri",
|
||||
"Scroll right": "Gulir ke kanan",
|
||||
"Library Sync Progress": "Kemajuan Sinkronisasi Pustaka",
|
||||
"Back to library": "Kembali ke perpustakaan",
|
||||
"Group by...": "Kelompokkan menurut...",
|
||||
"Export as Plain Text": "Ekspor sebagai Teks Biasa",
|
||||
"Export as Markdown": "Ekspor sebagai Markdown",
|
||||
"Show Page Navigation Buttons": "Tombol navigasi",
|
||||
"Page {{number}}": "Halaman {{number}}",
|
||||
"highlight": "sorotan",
|
||||
"underline": "garis bawah",
|
||||
"squiggly": "bergelombang",
|
||||
"red": "merah",
|
||||
"violet": "ungu",
|
||||
"blue": "biru",
|
||||
"green": "hijau",
|
||||
"yellow": "kuning",
|
||||
"Select {{style}} style": "Pilih gaya {{style}}",
|
||||
"Select {{color}} color": "Pilih warna {{color}}",
|
||||
"Close Book": "Tutup Buku",
|
||||
"Speed Reading": "Membaca Cepat",
|
||||
"Close Speed Reading": "Tutup Membaca Cepat",
|
||||
"Authors": "Penulis",
|
||||
"Books": "Buku",
|
||||
"Groups": "Grup",
|
||||
"Back to TTS Location": "Kembali ke Lokasi TTS",
|
||||
"Metadata": "Metadata",
|
||||
"Image viewer": "Penampil gambar",
|
||||
"Previous Image": "Gambar Sebelumnya",
|
||||
"Next Image": "Gambar Berikutnya",
|
||||
"Zoomed": "Diperbesar",
|
||||
"Zoom level": "Tingkat zoom",
|
||||
"Table viewer": "Penampil tabel",
|
||||
"Unable to connect to Readwise. Please check your network connection.": "Tidak dapat terhubung ke Readwise. Silakan periksa koneksi jaringan Anda.",
|
||||
"Invalid Readwise access token": "Token akses Readwise tidak valid",
|
||||
"Disconnected from Readwise": "Terputus dari Readwise",
|
||||
"Never": "Tidak pernah",
|
||||
"Readwise Settings": "Pengaturan Readwise",
|
||||
"Connected to Readwise": "Terhubung ke Readwise",
|
||||
"Last synced: {{time}}": "Terakhir disinkronkan: {{time}}",
|
||||
"Sync Enabled": "Sinkronisasi Diaktifkan",
|
||||
"Disconnect": "Putuskan sambungan",
|
||||
"Connect your Readwise account to sync highlights.": "Hubungkan akun Readwise Anda untuk menyinkronkan sorotan.",
|
||||
"Get your access token at": "Dapatkan token akses Anda di",
|
||||
"Access Token": "Token Akses",
|
||||
"Paste your Readwise access token": "Tempelkan token akses Readwise Anda",
|
||||
"Config": "Konfigurasi",
|
||||
"Readwise Sync": "Sinkronisasi Readwise",
|
||||
"Push Highlights": "Kirim Sorotan",
|
||||
"Highlights synced to Readwise": "Sorotan disinkronkan ke Readwise",
|
||||
"Readwise sync failed: no internet connection": "Sinkronisasi Readwise gagal: tidak ada koneksi internet",
|
||||
"Readwise sync failed: {{error}}": "Sinkronisasi Readwise gagal: {{error}}",
|
||||
"System Screen Brightness": "Kecerahan Layar Sistem",
|
||||
"Page:": "Halaman:",
|
||||
"Page: {{number}}": "Halaman: {{number}}",
|
||||
"Annotation page number": "Nomor halaman anotasi",
|
||||
"Translating...": "Menerjemahkan...",
|
||||
"Show Battery Percentage": "Tampilkan Persentase Baterai",
|
||||
"Hide Scrollbar": "Sembunyikan Bilah Gulir",
|
||||
"Skip to last reading position": "Lompat ke posisi baca terakhir",
|
||||
"Show context": "Tampilkan konteks",
|
||||
"Hide context": "Sembunyikan konteks",
|
||||
"Decrease font size": "Perkecil ukuran font",
|
||||
"Increase font size": "Perbesar ukuran font",
|
||||
"Focus": "Fokus",
|
||||
"Theme color": "Warna tema",
|
||||
"Import failed": "Impor gagal",
|
||||
"Available Formatters:": "Formatter Tersedia:",
|
||||
"Format date": "Format tanggal",
|
||||
"Markdown block quote (> per line)": "Kutipan blok Markdown (> per baris)",
|
||||
"Newlines to <br>": "Baris baru ke <br>",
|
||||
"Change case": "Ubah huruf besar/kecil",
|
||||
"Trim whitespace": "Pangkas spasi",
|
||||
"Truncate to n characters": "Potong ke n karakter",
|
||||
"Replace text": "Ganti teks",
|
||||
"Fallback value": "Nilai cadangan",
|
||||
"Get length": "Dapatkan panjang",
|
||||
"First/last element": "Elemen pertama/terakhir",
|
||||
"Join array": "Gabungkan array",
|
||||
"Backup failed: {{error}}": "Pencadangan gagal: {{error}}",
|
||||
"Select Backup": "Pilih Cadangan",
|
||||
"Restore failed: {{error}}": "Pemulihan gagal: {{error}}",
|
||||
"Backup & Restore": "Cadangkan & Pulihkan",
|
||||
"Create a backup of your library or restore from a previous backup. Restoring will merge with your current library.": "Buat cadangan perpustakaan Anda atau pulihkan dari cadangan sebelumnya. Pemulihan akan digabungkan dengan perpustakaan Anda saat ini.",
|
||||
"Backup Library": "Cadangkan Perpustakaan",
|
||||
"Restore Library": "Pulihkan Perpustakaan",
|
||||
"Creating backup...": "Membuat cadangan...",
|
||||
"Restoring library...": "Memulihkan perpustakaan...",
|
||||
"{{current}} of {{total}} items": "{{current}} dari {{total}} item",
|
||||
"Backup completed successfully!": "Pencadangan berhasil!",
|
||||
"Restore completed successfully!": "Pemulihan berhasil!",
|
||||
"Your library has been saved to the selected location.": "Perpustakaan Anda telah disimpan di lokasi yang dipilih.",
|
||||
"{{added}} books added, {{updated}} books updated.": "{{added}} buku ditambahkan, {{updated}} buku diperbarui.",
|
||||
"Operation failed": "Operasi gagal",
|
||||
"Loading library...": "Memuat perpustakaan...",
|
||||
"{{count}} books refreshed_other": "{{count}} buku diperbarui",
|
||||
"Failed to refresh metadata": "Gagal memperbarui metadata",
|
||||
"Refresh Metadata": "Perbarui Metadata"
|
||||
}
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
"Auto Mode": "Modalità automatica",
|
||||
"Behavior": "Comportamento",
|
||||
"Book": "Libro",
|
||||
"Book Cover": "Copertina",
|
||||
"Bookmark": "Segnalibro",
|
||||
"Cancel": "Annulla",
|
||||
"Chapter": "Capitolo",
|
||||
@@ -107,7 +106,6 @@
|
||||
"Wikipedia": "Wikipedia",
|
||||
"Writing Mode": "Modalità scrittura",
|
||||
"Your Library": "La tua biblioteca",
|
||||
"TTS not supported for PDF": "TTS non supportato per PDF",
|
||||
"Override Book Font": "Sovrascrivi font libro",
|
||||
"Apply to All Books": "Applica a tutti i libri",
|
||||
"Apply to This Book": "Applica a questo libro",
|
||||
@@ -174,9 +172,6 @@
|
||||
"Token": "Token",
|
||||
"Your OTP token": "Il tuo token OTP",
|
||||
"Verify token": "Verifica token",
|
||||
"Sign in with Google": "Accedi con Google",
|
||||
"Sign in with Apple": "Accedi con Apple",
|
||||
"Sign in with GitHub": "Accedi con GitHub",
|
||||
"Account": "Account",
|
||||
"Failed to delete user. Please try again later.": "Impossibile eliminare l'utente. Riprova più tardi.",
|
||||
"Community Support": "Supporto della community",
|
||||
@@ -194,7 +189,7 @@
|
||||
"No supported files found. Supported formats: {{formats}}": "Nessun file supportato trovato. Formati supportati: {{formats}}",
|
||||
"Drop to Import Books": "Rilascia per importare libri",
|
||||
"Custom": "Personalizzato",
|
||||
"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": "Tutto il mondo è un palcoscenico,\nE tutti gli uomini e le donne sono solo attori;\nHanno le loro uscite e le loro entrate,\nE un uomo nella sua vita interpreta molte parti,\nI suoi atti sono sette età.\n\n— William Shakespeare",
|
||||
"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": "Tutto il mondo è un palcoscenico,\nE tutti gli uomini e le donne sono solo attori;\nHanno le loro uscite e le loro entrate,\nE un uomo nella sua vita interpreta molte parti,\nI suoi atti sono sette età.\n\n— William Shakespeare",
|
||||
"Custom Theme": "Tema personalizzato",
|
||||
"Theme Name": "Nome tema",
|
||||
"Text Color": "Colore testo",
|
||||
@@ -342,12 +337,12 @@
|
||||
"Fit": "Adatta",
|
||||
"Reset {{settings}}": "Reimposta {{settings}}",
|
||||
"Reset Settings": "Reimposta impostazioni",
|
||||
"{{count}} pages left in chapter_one": "{{count}} pagina rimasta nel capitolo",
|
||||
"{{count}} pages left in chapter_many": "{{count}} pagine rimaste nel capitolo",
|
||||
"{{count}} pages left in chapter_other": "{{count}} pagine rimaste nel capitolo",
|
||||
"{{count}} pages left in chapter_one": "<0>{{count}}</0><1> pagina rimasta nel capitolo</1>",
|
||||
"{{count}} pages left in chapter_many": "<0>{{count}}</0><1> pagine rimaste nel capitolo</1>",
|
||||
"{{count}} pages left in chapter_other": "<0>{{count}}</0><1> pagine rimaste nel capitolo</1>",
|
||||
"Show Remaining Pages": "Mostra pagine rimanenti",
|
||||
"Source Han Serif CN VF": "Source Han Serif",
|
||||
"Huiwen-mincho": "Huiwen Mincho",
|
||||
"Source Han Serif CN": "Source Han Serif",
|
||||
"Huiwen-MinchoGBK": "Huiwen Mincho",
|
||||
"KingHwa_OldSong": "KingHwa Song",
|
||||
"Manage Subscription": "Gestisci Abbonamento",
|
||||
"Coming Soon": "Prossimamente",
|
||||
@@ -607,11 +602,10 @@
|
||||
"Size": "Dimensione",
|
||||
"Cover": "Copertura",
|
||||
"Contain": "Contenere",
|
||||
"{{number}} pages left in chapter": "{{number}} pagine rimaste nel capitolo",
|
||||
"{{number}} pages left in chapter": "<0>{{number}}</0><1> pagine rimaste nel capitolo</1>",
|
||||
"Device": "Dispositivo",
|
||||
"E-Ink Mode": "Modalità E-Ink",
|
||||
"Highlight Colors": "Colori Evidenziazione",
|
||||
"Auto Screen Brightness": "Luminosità schermo automatica",
|
||||
"Pagination": "Impaginazione",
|
||||
"Disable Double Tap": "Disabilita Doppio Tap",
|
||||
"Tap to Paginate": "Tocca per Impaginare",
|
||||
@@ -660,5 +654,466 @@
|
||||
"Update email": "Aggiorna email",
|
||||
"Current email": "Email attuale",
|
||||
"Update Email": "Aggiorna email",
|
||||
"All": "Tutti"
|
||||
"All": "Tutti",
|
||||
"Unable to open book": "Impossibile aprire il libro",
|
||||
"Punctuation": "Segni di punteggiatura",
|
||||
"Replace Quotation Marks": "Sostituisci le virgolette",
|
||||
"Enabled only in vertical layout.": "Abilitato solo in layout verticale.",
|
||||
"No Conversion": "Nessuna conversione",
|
||||
"Simplified to Traditional": "Semplificato → Tradizionale",
|
||||
"Traditional to Simplified": "Tradizionale → Semplificato",
|
||||
"Simplified to Traditional (Taiwan)": "Semplificato → Tradizionale (Taiwan)",
|
||||
"Simplified to Traditional (Hong Kong)": "Semplificato → Tradizionale (Hong Kong)",
|
||||
"Simplified to Traditional (Taiwan), with phrases": "Semplificato → Tradizionale (Taiwan • frasi)",
|
||||
"Traditional (Taiwan) to Simplified": "Tradizionale (Taiwan) → Semplificato",
|
||||
"Traditional (Hong Kong) to Simplified": "Tradizionale (Hong Kong) → Semplificato",
|
||||
"Traditional (Taiwan) to Simplified, with phrases": "Tradizionale (Taiwan • frasi) → Semplificato",
|
||||
"Convert Simplified and Traditional Chinese": "Converti Cinese Semplificato/Tradizionale",
|
||||
"Convert Mode": "Modalità conversione",
|
||||
"Failed to auto-save book cover for lock screen: {{error}}": "Impossibile salvare automaticamente la copertina del libro per la schermata di blocco: {{error}}",
|
||||
"Download from Cloud": "Scarica dal Cloud",
|
||||
"Upload to Cloud": "Carica sul Cloud",
|
||||
"Clear Custom Fonts": "Pulisci Font Personalizzati",
|
||||
"Columns": "Colonne",
|
||||
"OPDS Catalogs": "Cataloghi OPDS",
|
||||
"Adding LAN addresses is not supported in the web app version.": "L'aggiunta di indirizzi LAN non è supportata nella versione web.",
|
||||
"Invalid OPDS catalog. Please check the URL.": "Catalogo OPDS non valido. Controlla l'URL.",
|
||||
"Browse and download books from online catalogs": "Sfoglia e scarica libri dai cataloghi online",
|
||||
"My Catalogs": "I miei cataloghi",
|
||||
"Add Catalog": "Aggiungi catalogo",
|
||||
"No catalogs yet": "Nessun catalogo",
|
||||
"Add your first OPDS catalog to start browsing books": "Aggiungi il tuo primo catalogo OPDS per iniziare a sfogliare i libri",
|
||||
"Add Your First Catalog": "Aggiungi il tuo primo catalogo",
|
||||
"Browse": "Sfoglia",
|
||||
"Popular Catalogs": "Cataloghi popolari",
|
||||
"Add": "Aggiungi",
|
||||
"Add OPDS Catalog": "Aggiungi catalogo OPDS",
|
||||
"Catalog Name": "Nome del catalogo",
|
||||
"My Calibre Library": "La mia libreria Calibre",
|
||||
"OPDS URL": "URL OPDS",
|
||||
"Username (optional)": "Username (opzionale)",
|
||||
"Password (optional)": "Password (opzionale)",
|
||||
"Description (optional)": "Descrizione (opzionale)",
|
||||
"A brief description of this catalog": "Breve descrizione del catalogo",
|
||||
"Validating...": "Convalida in corso...",
|
||||
"View All": "Vedi tutto",
|
||||
"Forward": "Avanti",
|
||||
"Home": "Home",
|
||||
"{{count}} items_one": "{{count}} elemento",
|
||||
"{{count}} items_many": "{{count}} elementi",
|
||||
"{{count}} items_other": "{{count}} elementi",
|
||||
"Download completed": "Download completato",
|
||||
"Download failed": "Download non riuscito",
|
||||
"Open Access": "Accesso libero",
|
||||
"Borrow": "Prendi in prestito",
|
||||
"Buy": "Acquista",
|
||||
"Subscribe": "Abbonati",
|
||||
"Sample": "Anteprima",
|
||||
"Download": "Scarica",
|
||||
"Open & Read": "Apri e leggi",
|
||||
"Tags": "Tag",
|
||||
"Tag": "Tag",
|
||||
"First": "Primo",
|
||||
"Previous": "Precedente",
|
||||
"Next": "Successivo",
|
||||
"Last": "Ultimo",
|
||||
"Cannot Load Page": "Impossibile caricare la pagina",
|
||||
"An error occurred": "Si è verificato un errore",
|
||||
"Online Library": "Libreria online",
|
||||
"URL must start with http:// or https://": "URL deve iniziare con http:// o https://",
|
||||
"Title, Author, Tag, etc...": "Titolo, Autore, Tag, ecc...",
|
||||
"Query": "Query",
|
||||
"Subject": "Soggetto",
|
||||
"Enter {{terms}}": "Inserisci {{terms}}",
|
||||
"No search results found": "Nessun risultato di ricerca trovato",
|
||||
"Failed to load OPDS feed: {{status}} {{statusText}}": "Impossibile caricare il feed OPDS: {{status}} {{statusText}}",
|
||||
"Search in {{title}}": "Cerca in {{title}}",
|
||||
"Manage Storage": "Gestisci archiviazione",
|
||||
"Failed to load files": "Impossibile caricare i file",
|
||||
"Deleted {{count}} file(s)_one": "È stato eliminato {{count}} file",
|
||||
"Deleted {{count}} file(s)_many": "Sono stati eliminati {{count}} file",
|
||||
"Deleted {{count}} file(s)_other": "Sono stati eliminati {{count}} file",
|
||||
"Failed to delete {{count}} file(s)_one": "Impossibile eliminare {{count}} file",
|
||||
"Failed to delete {{count}} file(s)_many": "Impossibile eliminare {{count}} file",
|
||||
"Failed to delete {{count}} file(s)_other": "Impossibile eliminare {{count}} file",
|
||||
"Failed to delete files": "Impossibile eliminare i file",
|
||||
"Total Files": "File totali",
|
||||
"Total Size": "Dimensione totale",
|
||||
"Quota": "Quota",
|
||||
"Used": "Utilizzato",
|
||||
"Files": "File",
|
||||
"Search files...": "Cerca file...",
|
||||
"Newest First": "Più recenti",
|
||||
"Oldest First": "Più vecchi",
|
||||
"Largest First": "Più grandi",
|
||||
"Smallest First": "Più piccoli",
|
||||
"Name A-Z": "Nome A-Z",
|
||||
"Name Z-A": "Nome Z-A",
|
||||
"{{count}} selected_one": "{{count}} selezionato",
|
||||
"{{count}} selected_many": "{{count}} selezionati",
|
||||
"{{count}} selected_other": "{{count}} selezionati",
|
||||
"Delete Selected": "Elimina selezionati",
|
||||
"Created": "Creato",
|
||||
"No files found": "Nessun file trovato",
|
||||
"No files uploaded yet": "Nessun file caricato",
|
||||
"files": "file",
|
||||
"Page {{current}} of {{total}}": "Pagina {{current}} di {{total}}",
|
||||
"Are you sure to delete {{count}} selected file(s)?_one": "Sei sicuro di voler eliminare {{count}} file selezionato?",
|
||||
"Are you sure to delete {{count}} selected file(s)?_many": "Sei sicuro di voler eliminare {{count}} file selezionati?",
|
||||
"Are you sure to delete {{count}} selected file(s)?_other": "Sei sicuro di voler eliminare {{count}} file selezionati?",
|
||||
"Cloud Storage Usage": "Utilizzo archiviazione cloud",
|
||||
"Rename Group": "Rinomina gruppo",
|
||||
"From Directory": "Da directory",
|
||||
"Successfully imported {{count}} book(s)_one": "Importato con successo 1 libro",
|
||||
"Successfully imported {{count}} book(s)_many": "Importati con successo {{count}} libri",
|
||||
"Successfully imported {{count}} book(s)_other": "Importati con successo {{count}} libri",
|
||||
"Count": "Conteggio",
|
||||
"Start Page": "Pagina iniziale",
|
||||
"Search in OPDS Catalog...": "Cerca nel catalogo OPDS...",
|
||||
"Please log in to use advanced TTS features": "Effettua il login per utilizzare le funzionalità TTS avanzate",
|
||||
"Word limit of 30 words exceeded.": "È stato superato il limite di 30 parole.",
|
||||
"Proofread": "Revisione",
|
||||
"Current selection": "Selezione corrente",
|
||||
"All occurrences in this book": "Tutte le occorrenze in questo libro",
|
||||
"All occurrences in your library": "Tutte le occorrenze nella tua libreria",
|
||||
"Selected text:": "Testo selezionato:",
|
||||
"Replace with:": "Sostituisci con:",
|
||||
"Enter text...": "Inserisci testo…",
|
||||
"Case sensitive:": "Maiuscole/minuscole:",
|
||||
"Scope:": "Ambito:",
|
||||
"Selection": "Selezione",
|
||||
"Library": "Libreria",
|
||||
"Yes": "Sì",
|
||||
"No": "No",
|
||||
"Proofread Replacement Rules": "Regole di sostituzione per la revisione",
|
||||
"Selected Text Rules": "Regole per il testo selezionato",
|
||||
"No selected text replacement rules": "Nessuna regola di sostituzione per il testo selezionato",
|
||||
"Book Specific Rules": "Regole specifiche del libro",
|
||||
"No book-level replacement rules": "Nessuna regola di sostituzione a livello di libro",
|
||||
"Disable Quick Action": "Disattiva azione rapida",
|
||||
"Enable Quick Action on Selection": "Attiva azione rapida sulla selezione",
|
||||
"None": "Nessuno",
|
||||
"Annotation Tools": "Strumenti di annotazione",
|
||||
"Enable Quick Actions": "Attiva azioni rapide",
|
||||
"Quick Action": "Azione rapida",
|
||||
"Copy to Notebook": "Copia nel taccuino",
|
||||
"Copy text after selection": "Copia testo dopo la selezione",
|
||||
"Highlight text after selection": "Evidenzia testo dopo la selezione",
|
||||
"Annotate text after selection": "Annota testo dopo la selezione",
|
||||
"Search text after selection": "Cerca testo dopo la selezione",
|
||||
"Look up text in dictionary after selection": "Cerca testo nel dizionario dopo la selezione",
|
||||
"Look up text in Wikipedia after selection": "Cerca testo in Wikipedia dopo la selezione",
|
||||
"Translate text after selection": "Traduci testo dopo la selezione",
|
||||
"Read text aloud after selection": "Leggi ad alta voce il testo dopo la selezione",
|
||||
"Proofread text after selection": "Correggi il testo dopo la selezione",
|
||||
"{{activeCount}} active, {{pendingCount}} pending": "{{activeCount}} attivi, {{pendingCount}} in attesa",
|
||||
"{{failedCount}} failed": "{{failedCount}} falliti",
|
||||
"Waiting...": "In attesa...",
|
||||
"Failed": "Fallito",
|
||||
"Completed": "Completato",
|
||||
"Cancelled": "Annullato",
|
||||
"Retry": "Riprova",
|
||||
"Active": "Attivi",
|
||||
"Transfer Queue": "Coda trasferimenti",
|
||||
"Upload All": "Carica tutti",
|
||||
"Download All": "Scarica tutti",
|
||||
"Resume Transfers": "Riprendi trasferimenti",
|
||||
"Pause Transfers": "Sospendi trasferimenti",
|
||||
"Pending": "In attesa",
|
||||
"No transfers": "Nessun trasferimento",
|
||||
"Retry All": "Riprova tutti",
|
||||
"Clear Completed": "Cancella completati",
|
||||
"Clear Failed": "Cancella falliti",
|
||||
"Upload queued: {{title}}": "Caricamento in coda: {{title}}",
|
||||
"Download queued: {{title}}": "Download in coda: {{title}}",
|
||||
"Book not found in library": "Libro non trovato nella libreria",
|
||||
"Unknown error": "Errore sconosciuto",
|
||||
"Please log in to continue": "Accedi per continuare",
|
||||
"Cloud File Transfers": "Trasferimenti file cloud",
|
||||
"Show Search Results": "Mostra risultati",
|
||||
"Search results for '{{term}}'": "Risultati per '{{term}}'",
|
||||
"Close Search": "Chiudi ricerca",
|
||||
"Previous Result": "Risultato precedente",
|
||||
"Next Result": "Risultato successivo",
|
||||
"Bookmarks": "Segnalibri",
|
||||
"Annotations": "Annotazioni",
|
||||
"Show Results": "Mostra risultati",
|
||||
"Clear search": "Cancella ricerca",
|
||||
"Clear search history": "Cancella cronologia ricerche",
|
||||
"Tap to Toggle Footer": "Tocca per mostrare/nascondere il piè di pagina",
|
||||
"Show Current Time": "Mostra ora attuale",
|
||||
"Use 24 Hour Clock": "Usa formato 24 ore",
|
||||
"Show Current Battery Status": "Mostra lo stato attuale della batteria",
|
||||
"Exported successfully": "Esportato con successo",
|
||||
"Book exported successfully.": "Libro esportato con successo.",
|
||||
"Failed to export the book.": "Impossibile esportare il libro.",
|
||||
"Export Book": "Esporta libro",
|
||||
"Whole word:": "Parola intera:",
|
||||
"Error": "Errore",
|
||||
"Unable to load the article. Try searching directly on {{link}}.": "Impossibile caricare l'articolo. Prova a cercare direttamente su {{link}}.",
|
||||
"Unable to load the word. Try searching directly on {{link}}.": "Impossibile caricare la parola. Prova a cercare direttamente su {{link}}.",
|
||||
"Date Published": "Data di pubblicazione",
|
||||
"Only for TTS:": "Solo per TTS:",
|
||||
"Uploaded": "Caricato",
|
||||
"Downloaded": "Scaricato",
|
||||
"Deleted": "Eliminato",
|
||||
"Note:": "Nota:",
|
||||
"Time:": "Ora:",
|
||||
"Format Options": "Opzioni formato",
|
||||
"Export Date": "Data esportazione",
|
||||
"Chapter Titles": "Titoli capitoli",
|
||||
"Chapter Separator": "Separatore capitoli",
|
||||
"Highlights": "Evidenziazioni",
|
||||
"Note Date": "Data nota",
|
||||
"Advanced": "Avanzate",
|
||||
"Hide": "Nascondi",
|
||||
"Show": "Mostra",
|
||||
"Use Custom Template": "Usa modello personalizzato",
|
||||
"Export Template": "Modello esportazione",
|
||||
"Template Syntax:": "Sintassi modello:",
|
||||
"Insert value": "Inserisci valore",
|
||||
"Format date (locale)": "Formatta data (locale)",
|
||||
"Format date (custom)": "Formatta data (personalizzato)",
|
||||
"Conditional": "Condizionale",
|
||||
"Loop": "Ciclo",
|
||||
"Available Variables:": "Variabili disponibili:",
|
||||
"Book title": "Titolo libro",
|
||||
"Book author": "Autore libro",
|
||||
"Export date": "Data esportazione",
|
||||
"Array of chapters": "Elenco capitoli",
|
||||
"Chapter title": "Titolo capitolo",
|
||||
"Array of annotations": "Elenco annotazioni",
|
||||
"Highlighted text": "Testo evidenziato",
|
||||
"Annotation note": "Nota annotazione",
|
||||
"Date Format Tokens:": "Token formato data:",
|
||||
"Year (4 digits)": "Anno (4 cifre)",
|
||||
"Month (01-12)": "Mese (01-12)",
|
||||
"Day (01-31)": "Giorno (01-31)",
|
||||
"Hour (00-23)": "Ora (00-23)",
|
||||
"Minute (00-59)": "Minuto (00-59)",
|
||||
"Second (00-59)": "Secondo (00-59)",
|
||||
"Show Source": "Mostra sorgente",
|
||||
"No content to preview": "Nessun contenuto da visualizzare",
|
||||
"Export": "Esporta",
|
||||
"Set Timeout": "Imposta timeout",
|
||||
"Select Voice": "Seleziona voce",
|
||||
"Toggle Sticky Bottom TTS Bar": "Attiva/disattiva barra TTS fissa",
|
||||
"Display what I'm reading on Discord": "Mostra cosa sto leggendo su Discord",
|
||||
"Show on Discord": "Mostra su Discord",
|
||||
"Instant {{action}}": "{{action}} istantaneo",
|
||||
"Instant {{action}} Disabled": "{{action}} istantaneo disattivato",
|
||||
"Annotation": "Annotazione",
|
||||
"Reset Template": "Reimposta modello",
|
||||
"Annotation style": "Stile annotazione",
|
||||
"Annotation color": "Colore annotazione",
|
||||
"Annotation time": "Ora annotazione",
|
||||
"AI": "IA",
|
||||
"Are you sure you want to re-index this book?": "Sei sicuro di voler reindicizzare questo libro?",
|
||||
"Enable AI in Settings": "Abilita IA nelle impostazioni",
|
||||
"Index This Book": "Indicizza questo libro",
|
||||
"Enable AI search and chat for this book": "Abilita ricerca IA e chat per questo libro",
|
||||
"Start Indexing": "Avvia indicizzazione",
|
||||
"Indexing book...": "Indicizzazione libro...",
|
||||
"Preparing...": "Preparazione...",
|
||||
"Delete this conversation?": "Eliminare questa conversazione?",
|
||||
"No conversations yet": "Ancora nessuna conversazione",
|
||||
"Start a new chat to ask questions about this book": "Avvia una nuova chat per fare domande su questo libro",
|
||||
"Rename": "Rinomina",
|
||||
"New Chat": "Nuova chat",
|
||||
"Chat": "Chat",
|
||||
"Please enter a model ID": "Inserisci un ID modello",
|
||||
"Model not available or invalid": "Modello non disponibile o non valido",
|
||||
"Failed to validate model": "Validazione modello fallita",
|
||||
"Couldn't connect to Ollama. Is it running?": "Impossibile connettersi a Ollama. È in esecuzione?",
|
||||
"Invalid API key or connection failed": "Chiave API non valida o connessione fallita",
|
||||
"Connection failed": "Connessione fallita",
|
||||
"AI Assistant": "Assistente IA",
|
||||
"Enable AI Assistant": "Abilita assistente IA",
|
||||
"Provider": "Fornitore",
|
||||
"Ollama (Local)": "Ollama (Locale)",
|
||||
"AI Gateway (Cloud)": "Gateway IA (Cloud)",
|
||||
"Ollama Configuration": "Configurazione Ollama",
|
||||
"Refresh Models": "Aggiorna modelli",
|
||||
"AI Model": "Modello IA",
|
||||
"No models detected": "Nessun modello rilevato",
|
||||
"AI Gateway Configuration": "Configurazione gateway IA",
|
||||
"Choose from a selection of high-quality, economical AI models. You can also bring your own model by selecting \"Custom Model\" below.": "Scegli tra una selezione di modelli IA di alta qualità ed economici. Puoi anche usare il tuo modello selezionando \"Modello personalizzato\" qui sotto.",
|
||||
"API Key": "Chiave API",
|
||||
"Get Key": "Ottieni chiave",
|
||||
"Model": "Modello",
|
||||
"Custom Model...": "Modello personalizzato...",
|
||||
"Custom Model ID": "ID modello personalizzato",
|
||||
"Validate": "Convalida",
|
||||
"Model available": "Modello disponibile",
|
||||
"Connection": "Connessione",
|
||||
"Test Connection": "Testa connessione",
|
||||
"Connected": "Connesso",
|
||||
"Custom Colors": "Colori personalizzati",
|
||||
"Color E-Ink Mode": "Modalità E-Ink a colori",
|
||||
"Reading Ruler": "Righello di lettura",
|
||||
"Enable Reading Ruler": "Abilita righello di lettura",
|
||||
"Lines to Highlight": "Righe da evidenziare",
|
||||
"Ruler Color": "Colore del righello",
|
||||
"Command Palette": "Tavolozza dei comandi",
|
||||
"Search settings and actions...": "Cerca impostazioni e azioni...",
|
||||
"No results found for": "Nessun risultato trovato per",
|
||||
"Type to search settings and actions": "Digita per cercare impostazioni e azioni",
|
||||
"Recent": "Recenti",
|
||||
"navigate": "naviga",
|
||||
"select": "seleziona",
|
||||
"close": "chiudi",
|
||||
"Search Settings": "Cerca impostazioni",
|
||||
"Page Margins": "Margini della pagina",
|
||||
"AI Provider": "Fornitore AI",
|
||||
"Ollama URL": "URL Ollama",
|
||||
"Ollama Model": "Modello Ollama",
|
||||
"AI Gateway Model": "Modello AI Gateway",
|
||||
"Actions": "Azioni",
|
||||
"Navigation": "Navigazione",
|
||||
"Set status for {{count}} book(s)_one": "Imposta stato per {{count}} libro",
|
||||
"Set status for {{count}} book(s)_other": "Imposta stato per {{count}} libri",
|
||||
"Mark as Unread": "Segna come non letto",
|
||||
"Mark as Finished": "Segna come finito",
|
||||
"Finished": "Finito",
|
||||
"Unread": "Non letto",
|
||||
"Clear Status": "Cancella stato",
|
||||
"Status": "Stato",
|
||||
"Set status for {{count}} book(s)_many": "Imposta stato per {{count}} libri",
|
||||
"Loading": "Caricamento...",
|
||||
"Exit Paragraph Mode": "Esci dalla modalità paragrafo",
|
||||
"Paragraph Mode": "Modalità paragrafo",
|
||||
"Embedding Model": "Modello di incorporazione",
|
||||
"{{count}} book(s) synced_one": "{{count}} libro sincronizzato",
|
||||
"{{count}} book(s) synced_many": "{{count}} libri sincronizzati",
|
||||
"{{count}} book(s) synced_other": "{{count}} libri sincronizzati",
|
||||
"Unable to start RSVP": "Impossibile avviare RSVP",
|
||||
"RSVP not supported for PDF": "RSVP non supportato per PDF",
|
||||
"Select Chapter": "Seleziona capitolo",
|
||||
"Context": "Contesto",
|
||||
"Ready": "Pronto",
|
||||
"Chapter Progress": "Progresso capitolo",
|
||||
"words": "parole",
|
||||
"{{time}} left": "{{time}} rimanenti",
|
||||
"Reading progress": "Progresso lettura",
|
||||
"Click to seek": "Clicca per cercare",
|
||||
"Skip back 15 words": "Indietro di 15 parole",
|
||||
"Back 15 words (Shift+Left)": "Indietro di 15 parole (Shift+Sinistra)",
|
||||
"Pause (Space)": "Pausa (Spazio)",
|
||||
"Play (Space)": "Riproduci (Spazio)",
|
||||
"Skip forward 15 words": "Avanti di 15 parole",
|
||||
"Forward 15 words (Shift+Right)": "Avanti di 15 parole (Shift+Destra)",
|
||||
"Decrease speed": "Diminuisci velocità",
|
||||
"Slower (Left/Down)": "Più lento (Sinistra/Giù)",
|
||||
"Increase speed": "Aumenta velocità",
|
||||
"Faster (Right/Up)": "Più veloce (Destra/Su)",
|
||||
"Start RSVP Reading": "Avvia lettura RSVP",
|
||||
"Choose where to start reading": "Scegli dove iniziare a leggere",
|
||||
"From Chapter Start": "Dall'inizio del capitolo",
|
||||
"Start reading from the beginning of the chapter": "Inizia a leggere dall'inizio del capitolo",
|
||||
"Resume": "Riprendi",
|
||||
"Continue from where you left off": "Continua da dove avevi interrotto",
|
||||
"From Current Page": "Dalla pagina corrente",
|
||||
"Start from where you are currently reading": "Inizia da dove stai leggendo",
|
||||
"From Selection": "Dalla selezione",
|
||||
"Speed Reading Mode": "Modalità lettura veloce",
|
||||
"Scroll left": "Scorri a sinistra",
|
||||
"Scroll right": "Scorri a destra",
|
||||
"Library Sync Progress": "Avanzamento sincronizzazione libreria",
|
||||
"Back to library": "Torna alla libreria",
|
||||
"Group by...": "Raggruppa per...",
|
||||
"Export as Plain Text": "Esporta come testo normale",
|
||||
"Export as Markdown": "Esporta come Markdown",
|
||||
"Show Page Navigation Buttons": "Tasti navigazione",
|
||||
"Page {{number}}": "Pagina {{number}}",
|
||||
"highlight": "evidenziazione",
|
||||
"underline": "sottolineatura",
|
||||
"squiggly": "ondulato",
|
||||
"red": "rosso",
|
||||
"violet": "viola",
|
||||
"blue": "blu",
|
||||
"green": "verde",
|
||||
"yellow": "giallo",
|
||||
"Select {{style}} style": "Seleziona lo stile {{style}}",
|
||||
"Select {{color}} color": "Seleziona il colore {{color}}",
|
||||
"Close Book": "Chiudi libro",
|
||||
"Speed Reading": "Lettura veloce",
|
||||
"Close Speed Reading": "Chiudi lettura veloce",
|
||||
"Authors": "Autori",
|
||||
"Books": "Libri",
|
||||
"Groups": "Gruppi",
|
||||
"Back to TTS Location": "Torna alla posizione TTS",
|
||||
"Metadata": "Metadati",
|
||||
"Image viewer": "Visualizzatore immagini",
|
||||
"Previous Image": "Immagine precedente",
|
||||
"Next Image": "Immagine successiva",
|
||||
"Zoomed": "Zoomato",
|
||||
"Zoom level": "Livello di zoom",
|
||||
"Table viewer": "Visualizzatore tabelle",
|
||||
"Unable to connect to Readwise. Please check your network connection.": "Impossibile connettersi a Readwise. Controlla la tua connessione di rete.",
|
||||
"Invalid Readwise access token": "Token di accesso Readwise non valido",
|
||||
"Disconnected from Readwise": "Disconnesso da Readwise",
|
||||
"Never": "Mai",
|
||||
"Readwise Settings": "Impostazioni Readwise",
|
||||
"Connected to Readwise": "Connesso a Readwise",
|
||||
"Last synced: {{time}}": "Ultima sincronizzazione: {{time}}",
|
||||
"Sync Enabled": "Sincronizzazione abilitata",
|
||||
"Disconnect": "Disconnetti",
|
||||
"Connect your Readwise account to sync highlights.": "Connetti il tuo account Readwise per sincronizzare le evidenziazioni.",
|
||||
"Get your access token at": "Ottieni il tuo token di accesso su",
|
||||
"Access Token": "Token di accesso",
|
||||
"Paste your Readwise access token": "Incolla il tuo token di accesso Readwise",
|
||||
"Config": "Configurazione",
|
||||
"Readwise Sync": "Sincronizzazione Readwise",
|
||||
"Push Highlights": "Invia evidenziazioni",
|
||||
"Highlights synced to Readwise": "Evidenziazioni sincronizzate su Readwise",
|
||||
"Readwise sync failed: no internet connection": "Sincronizzazione Readwise fallita: nessuna connessione internet",
|
||||
"Readwise sync failed: {{error}}": "Sincronizzazione Readwise fallita: {{error}}",
|
||||
"System Screen Brightness": "Luminosità dello schermo del sistema",
|
||||
"Page:": "Pagina:",
|
||||
"Page: {{number}}": "Pagina: {{number}}",
|
||||
"Annotation page number": "Numero di pagina dell'annotazione",
|
||||
"Translating...": "Traduzione...",
|
||||
"Show Battery Percentage": "Mostra percentuale batteria",
|
||||
"Hide Scrollbar": "Nascondi barra di scorrimento",
|
||||
"Skip to last reading position": "Vai all'ultima posizione di lettura",
|
||||
"Show context": "Mostra contesto",
|
||||
"Hide context": "Nascondi contesto",
|
||||
"Decrease font size": "Riduci dimensione carattere",
|
||||
"Increase font size": "Aumenta dimensione carattere",
|
||||
"Focus": "Messa a fuoco",
|
||||
"Theme color": "Colore del tema",
|
||||
"Import failed": "Importazione fallita",
|
||||
"Available Formatters:": "Formattatori disponibili:",
|
||||
"Format date": "Formatta data",
|
||||
"Markdown block quote (> per line)": "Citazione Markdown (> per riga)",
|
||||
"Newlines to <br>": "A capo in <br>",
|
||||
"Change case": "Cambia maiuscole/minuscole",
|
||||
"Trim whitespace": "Rimuovi spazi",
|
||||
"Truncate to n characters": "Tronca a n caratteri",
|
||||
"Replace text": "Sostituisci testo",
|
||||
"Fallback value": "Valore predefinito",
|
||||
"Get length": "Ottieni lunghezza",
|
||||
"First/last element": "Primo/ultimo elemento",
|
||||
"Join array": "Unisci array",
|
||||
"Backup failed: {{error}}": "Backup fallito: {{error}}",
|
||||
"Select Backup": "Seleziona backup",
|
||||
"Restore failed: {{error}}": "Ripristino fallito: {{error}}",
|
||||
"Backup & Restore": "Backup e ripristino",
|
||||
"Create a backup of your library or restore from a previous backup. Restoring will merge with your current library.": "Crea un backup della tua libreria o ripristina da un backup precedente. Il ripristino verrà unito alla tua libreria attuale.",
|
||||
"Backup Library": "Backup libreria",
|
||||
"Restore Library": "Ripristina libreria",
|
||||
"Creating backup...": "Creazione backup...",
|
||||
"Restoring library...": "Ripristino libreria...",
|
||||
"{{current}} of {{total}} items": "{{current}} di {{total}} elementi",
|
||||
"Backup completed successfully!": "Backup completato con successo!",
|
||||
"Restore completed successfully!": "Ripristino completato con successo!",
|
||||
"Your library has been saved to the selected location.": "La tua libreria è stata salvata nella posizione selezionata.",
|
||||
"{{added}} books added, {{updated}} books updated.": "{{added}} libri aggiunti, {{updated}} libri aggiornati.",
|
||||
"Operation failed": "Operazione fallita",
|
||||
"Loading library...": "Caricamento libreria...",
|
||||
"{{count}} books refreshed_one": "{{count}} libro aggiornato",
|
||||
"{{count}} books refreshed_many": "{{count}} libri aggiornati",
|
||||
"{{count}} books refreshed_other": "{{count}} libri aggiornati",
|
||||
"Failed to refresh metadata": "Aggiornamento metadati fallito",
|
||||
"Refresh Metadata": "Aggiorna metadati"
|
||||
}
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
"Auto Mode": "自動モード",
|
||||
"Behavior": "動作",
|
||||
"Book": "書籍",
|
||||
"Book Cover": "表紙",
|
||||
"Bookmark": "ブックマーク",
|
||||
"Cancel": "キャンセル",
|
||||
"Chapter": "章",
|
||||
@@ -107,7 +106,6 @@
|
||||
"Wikipedia": "ウィキペディア",
|
||||
"Writing Mode": "書き込みモード",
|
||||
"Your Library": "ライブラリー",
|
||||
"TTS not supported for PDF": "PDFではTTSがサポートされていません",
|
||||
"Override Book Font": "書籍フォントを上書き",
|
||||
"Apply to All Books": "すべての書籍に適用",
|
||||
"Apply to This Book": "この書籍に適用",
|
||||
@@ -174,9 +172,6 @@
|
||||
"Token": "トークン",
|
||||
"Your OTP token": "あなたのOTPトークン",
|
||||
"Verify token": "トークンを確認",
|
||||
"Sign in with Google": "Googleでサインイン",
|
||||
"Sign in with Apple": "Appleでサインイン",
|
||||
"Sign in with GitHub": "GitHubでサインイン",
|
||||
"Account": "アカウント",
|
||||
"Failed to delete user. Please try again later.": "ユーザーの削除に失敗しました。後ほど再試行してください。",
|
||||
"Community Support": "コミュニティサポート",
|
||||
@@ -194,7 +189,7 @@
|
||||
"No supported files found. Supported formats: {{formats}}": "サポートされているファイルが見つかりません。サポートされている形式:{{formats}}",
|
||||
"Drop to Import Books": "書籍をインポートするにはドロップ",
|
||||
"Custom": "カスタム",
|
||||
"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— ウィリアム・シェイクスピア",
|
||||
"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— ウィリアム・シェイクスピア",
|
||||
"Custom Theme": "カスタムテーマ",
|
||||
"Theme Name": "テーマ名",
|
||||
"Text Color": "テキストカラー",
|
||||
@@ -336,10 +331,10 @@
|
||||
"Fit": "フィット",
|
||||
"Reset {{settings}}": "{{settings}}をリセット",
|
||||
"Reset Settings": "設定をリセット",
|
||||
"{{count}} pages left in chapter_other": "{{count}} ページ残り",
|
||||
"{{count}} pages left in chapter_other": "<0>{{count}}</0><1> ページ残り</1>",
|
||||
"Show Remaining Pages": "残りを表示",
|
||||
"Source Han Serif CN VF": "Source Han Serif",
|
||||
"Huiwen-mincho": "Huiwen Mincho",
|
||||
"Source Han Serif CN": "Source Han Serif",
|
||||
"Huiwen-MinchoGBK": "Huiwen Mincho",
|
||||
"KingHwa_OldSong": "KingHwa Song",
|
||||
"Manage Subscription": "サブスクリプションを管理",
|
||||
"Coming Soon": "近日公開",
|
||||
@@ -599,11 +594,10 @@
|
||||
"Size": "サイズ",
|
||||
"Cover": "カバー",
|
||||
"Contain": "含む",
|
||||
"{{number}} pages left in chapter": "章に{{number}}ページ残り",
|
||||
"{{number}} pages left in chapter": "<1>章に</1><0>{{number}}</0><1>ページ残り</1>",
|
||||
"Device": "デバイス",
|
||||
"E-Ink Mode": "E-Inkモード",
|
||||
"Highlight Colors": "ハイライトカラー",
|
||||
"Auto Screen Brightness": "自動画面の明るさ",
|
||||
"Pagination": "ページネーション",
|
||||
"Disable Double Tap": "ダブルタップを無効にする",
|
||||
"Tap to Paginate": "タップしてページを切り替える",
|
||||
@@ -652,5 +646,448 @@
|
||||
"Update email": "メールを更新",
|
||||
"Current email": "現在のメールアドレス",
|
||||
"Update Email": "メールを更新",
|
||||
"All": "すべて"
|
||||
"All": "すべて",
|
||||
"Unable to open book": "本を開くことができません",
|
||||
"Punctuation": "句読点",
|
||||
"Replace Quotation Marks": "引用符を置き換える",
|
||||
"Enabled only in vertical layout.": "縦書きレイアウトでのみ有効です。",
|
||||
"No Conversion": "変換なし",
|
||||
"Simplified to Traditional": "簡体字 → 繁体字",
|
||||
"Traditional to Simplified": "繁体字 → 簡体字",
|
||||
"Simplified to Traditional (Taiwan)": "簡体字 → 繁体字(台湾)",
|
||||
"Simplified to Traditional (Hong Kong)": "簡体字 → 繁体字(香港)",
|
||||
"Simplified to Traditional (Taiwan), with phrases": "簡体字 → 繁体字(台湾)• フレーズ",
|
||||
"Traditional (Taiwan) to Simplified": "繁体字(台湾) → 簡体字",
|
||||
"Traditional (Hong Kong) to Simplified": "繁体字(香港) → 簡体字",
|
||||
"Traditional (Taiwan) to Simplified, with phrases": "繁体字(台湾) → 簡体字 • フレーズ",
|
||||
"Convert Simplified and Traditional Chinese": "簡体字/繁体字変換",
|
||||
"Convert Mode": "変換モード",
|
||||
"Failed to auto-save book cover for lock screen: {{error}}": "ロック画面の本のカバーの自動保存に失敗しました:{{error}}",
|
||||
"Download from Cloud": "クラウドからダウンロード",
|
||||
"Upload to Cloud": "クラウドにアップロード",
|
||||
"Clear Custom Fonts": "カスタムフォントをクリア",
|
||||
"Columns": "列",
|
||||
"OPDS Catalogs": "OPDSカタログ",
|
||||
"Adding LAN addresses is not supported in the web app version.": "Webアプリ版ではLANアドレスの追加はサポートされていません。",
|
||||
"Invalid OPDS catalog. Please check the URL.": "無効なOPDSカタログです。URLを確認してください。",
|
||||
"Browse and download books from online catalogs": "オンラインカタログから本を閲覧・ダウンロード",
|
||||
"My Catalogs": "マイカタログ",
|
||||
"Add Catalog": "カタログを追加",
|
||||
"No catalogs yet": "まだカタログはありません",
|
||||
"Add your first OPDS catalog to start browsing books": "本を閲覧するには、最初のOPDSカタログを追加してください。",
|
||||
"Add Your First Catalog": "最初のカタログを追加",
|
||||
"Browse": "閲覧",
|
||||
"Popular Catalogs": "人気カタログ",
|
||||
"Add": "追加",
|
||||
"Add OPDS Catalog": "OPDSカタログを追加",
|
||||
"Catalog Name": "カタログ名",
|
||||
"My Calibre Library": "私のCalibreライブラリ",
|
||||
"OPDS URL": "OPDS URL",
|
||||
"Username (optional)": "ユーザー名(任意)",
|
||||
"Password (optional)": "パスワード(任意)",
|
||||
"Description (optional)": "説明(任意)",
|
||||
"A brief description of this catalog": "このカタログの簡単な説明",
|
||||
"Validating...": "検証中...",
|
||||
"View All": "すべて表示",
|
||||
"Forward": "進む",
|
||||
"Home": "ホーム",
|
||||
"{{count}} items_other": "{{count}} 件",
|
||||
"Download completed": "ダウンロード完了",
|
||||
"Download failed": "ダウンロード失敗",
|
||||
"Open Access": "オープンアクセス",
|
||||
"Borrow": "借りる",
|
||||
"Buy": "購入",
|
||||
"Subscribe": "購読",
|
||||
"Sample": "サンプル",
|
||||
"Download": "ダウンロード",
|
||||
"Open & Read": "開いて読む",
|
||||
"Tags": "タグ",
|
||||
"Tag": "タグ",
|
||||
"First": "最初",
|
||||
"Previous": "前へ",
|
||||
"Next": "次へ",
|
||||
"Last": "最後",
|
||||
"Cannot Load Page": "ページを読み込めません",
|
||||
"An error occurred": "エラーが発生しました",
|
||||
"Online Library": "オンラインライブラリ",
|
||||
"URL must start with http:// or https://": "URLはhttp://またはhttps://で始まる必要があります",
|
||||
"Title, Author, Tag, etc...": "タイトル、著者、タグなど...",
|
||||
"Query": "クエリ",
|
||||
"Subject": "件名",
|
||||
"Enter {{terms}}": "{{terms}}を入力してください",
|
||||
"No search results found": "検索結果が見つかりません",
|
||||
"Failed to load OPDS feed: {{status}} {{statusText}}": "OPDSフィードの読み込みに失敗しました: {{status}} {{statusText}}",
|
||||
"Search in {{title}}": "{{title}}内を検索",
|
||||
"Manage Storage": "ストレージ管理",
|
||||
"Failed to load files": "ファイルの読み込みに失敗しました",
|
||||
"Deleted {{count}} file(s)_other": "{{count}} 件のファイルを削除しました",
|
||||
"Failed to delete {{count}} file(s)_other": "{{count}} 件のファイルの削除に失敗しました",
|
||||
"Failed to delete files": "ファイルの削除に失敗しました",
|
||||
"Total Files": "ファイル合計",
|
||||
"Total Size": "合計サイズ",
|
||||
"Quota": "容量制限",
|
||||
"Used": "使用済み",
|
||||
"Files": "ファイル",
|
||||
"Search files...": "ファイルを検索...",
|
||||
"Newest First": "新しい順",
|
||||
"Oldest First": "古い順",
|
||||
"Largest First": "大きい順",
|
||||
"Smallest First": "小さい順",
|
||||
"Name A-Z": "名前 A-Z",
|
||||
"Name Z-A": "名前 Z-A",
|
||||
"{{count}} selected_other": "{{count}} 件選択済み",
|
||||
"Delete Selected": "選択した項目を削除",
|
||||
"Created": "作成日",
|
||||
"No files found": "ファイルが見つかりません",
|
||||
"No files uploaded yet": "まだファイルがアップロードされていません",
|
||||
"files": "ファイル",
|
||||
"Page {{current}} of {{total}}": "ページ {{current}} / {{total}}",
|
||||
"Are you sure to delete {{count}} selected file(s)?_other": "選択した {{count}} 件のファイルを削除してもよろしいですか?",
|
||||
"Cloud Storage Usage": "クラウドストレージ使用量",
|
||||
"Rename Group": "グループ名を変更",
|
||||
"From Directory": "ディレクトリから",
|
||||
"Successfully imported {{count}} book(s)_other": "成功裏に{{count}}冊の本をインポートしました",
|
||||
"Count": "件数",
|
||||
"Start Page": "開始ページ",
|
||||
"Search in OPDS Catalog...": "OPDSカタログ内を検索...",
|
||||
"Please log in to use advanced TTS features": "高度なTTS機能を使用するにはログインしてください",
|
||||
"Word limit of 30 words exceeded.": "30語の上限を超えています。",
|
||||
"Proofread": "校正",
|
||||
"Current selection": "現在の選択",
|
||||
"All occurrences in this book": "この本内のすべての出現箇所",
|
||||
"All occurrences in your library": "ライブラリ内のすべての出現箇所",
|
||||
"Selected text:": "選択されたテキスト:",
|
||||
"Replace with:": "置換後:",
|
||||
"Enter text...": "テキストを入力…",
|
||||
"Case sensitive:": "大文字と小文字を区別:",
|
||||
"Scope:": "適用範囲:",
|
||||
"Selection": "選択",
|
||||
"Library": "ライブラリ",
|
||||
"Yes": "はい",
|
||||
"No": "いいえ",
|
||||
"Proofread Replacement Rules": "校正置換ルール",
|
||||
"Selected Text Rules": "選択テキストのルール",
|
||||
"No selected text replacement rules": "選択されたテキストの置換ルールはありません",
|
||||
"Book Specific Rules": "書籍別ルール",
|
||||
"No book-level replacement rules": "書籍レベルの置換ルールはありません",
|
||||
"Disable Quick Action": "クイックアクションを無効にする",
|
||||
"Enable Quick Action on Selection": "選択時にクイックアクションを有効にする",
|
||||
"None": "なし",
|
||||
"Annotation Tools": "注釈ツール",
|
||||
"Enable Quick Actions": "クイックアクションを有効にする",
|
||||
"Quick Action": "クイックアクション",
|
||||
"Copy to Notebook": "ノートにコピー",
|
||||
"Copy text after selection": "選択後のテキストをコピー",
|
||||
"Highlight text after selection": "選択後のテキストをハイライト",
|
||||
"Annotate text after selection": "選択後のテキストに注釈を付ける",
|
||||
"Search text after selection": "選択後のテキストを検索",
|
||||
"Look up text in dictionary after selection": "選択後のテキストを辞書で調べる",
|
||||
"Look up text in Wikipedia after selection": "選択後のテキストをWikipediaで調べる",
|
||||
"Translate text after selection": "選択後のテキストを翻訳する",
|
||||
"Read text aloud after selection": "選択後のテキストを音読する",
|
||||
"Proofread text after selection": "選択後のテキストを校正する",
|
||||
"{{activeCount}} active, {{pendingCount}} pending": "{{activeCount}} 進行中、{{pendingCount}} 待機中",
|
||||
"{{failedCount}} failed": "{{failedCount}} 失敗",
|
||||
"Waiting...": "待機中...",
|
||||
"Failed": "失敗",
|
||||
"Completed": "完了",
|
||||
"Cancelled": "キャンセル",
|
||||
"Retry": "再試行",
|
||||
"Active": "進行中",
|
||||
"Transfer Queue": "転送キュー",
|
||||
"Upload All": "すべてアップロード",
|
||||
"Download All": "すべてダウンロード",
|
||||
"Resume Transfers": "転送を再開",
|
||||
"Pause Transfers": "転送を一時停止",
|
||||
"Pending": "待機中",
|
||||
"No transfers": "転送なし",
|
||||
"Retry All": "すべて再試行",
|
||||
"Clear Completed": "完了を消去",
|
||||
"Clear Failed": "失敗を消去",
|
||||
"Upload queued: {{title}}": "アップロードをキューに追加: {{title}}",
|
||||
"Download queued: {{title}}": "ダウンロードをキューに追加: {{title}}",
|
||||
"Book not found in library": "ライブラリに本が見つかりません",
|
||||
"Unknown error": "不明なエラー",
|
||||
"Please log in to continue": "続行するにはログインしてください",
|
||||
"Cloud File Transfers": "クラウドファイル転送",
|
||||
"Show Search Results": "検索結果を表示",
|
||||
"Search results for '{{term}}'": "「{{term}}」を含む結果",
|
||||
"Close Search": "検索を閉じる",
|
||||
"Previous Result": "前の結果",
|
||||
"Next Result": "次の結果",
|
||||
"Bookmarks": "ブックマーク",
|
||||
"Annotations": "注釈",
|
||||
"Show Results": "結果を表示",
|
||||
"Clear search": "検索をクリア",
|
||||
"Clear search history": "検索履歴をクリア",
|
||||
"Tap to Toggle Footer": "タップでフッターを切り替え",
|
||||
"Show Current Time": "現在時刻を表示",
|
||||
"Use 24 Hour Clock": "24時間表示を使用",
|
||||
"Show Current Battery Status": "バッテリー残量を表示",
|
||||
"Exported successfully": "エクスポート成功",
|
||||
"Book exported successfully.": "書籍のエクスポートに成功しました。",
|
||||
"Failed to export the book.": "書籍のエクスポートに失敗しました。",
|
||||
"Export Book": "書籍をエクスポート",
|
||||
"Whole word:": "単語全体:",
|
||||
"Error": "エラー",
|
||||
"Unable to load the article. Try searching directly on {{link}}.": "記事を読み込めません。{{link}}で直接検索してみてください。",
|
||||
"Unable to load the word. Try searching directly on {{link}}.": "単語を読み込めません。{{link}}で直接検索してみてください。",
|
||||
"Date Published": "出版日",
|
||||
"Only for TTS:": "TTSのみ:",
|
||||
"Uploaded": "アップロード済み",
|
||||
"Downloaded": "ダウンロード済み",
|
||||
"Deleted": "削除済み",
|
||||
"Note:": "ノート:",
|
||||
"Time:": "時刻:",
|
||||
"Format Options": "形式オプション",
|
||||
"Export Date": "エクスポート日",
|
||||
"Chapter Titles": "章タイトル",
|
||||
"Chapter Separator": "章区切り",
|
||||
"Highlights": "ハイライト",
|
||||
"Note Date": "ノート日付",
|
||||
"Advanced": "詳細設定",
|
||||
"Hide": "非表示",
|
||||
"Show": "表示",
|
||||
"Use Custom Template": "カスタムテンプレート使用",
|
||||
"Export Template": "エクスポートテンプレート",
|
||||
"Template Syntax:": "テンプレート構文:",
|
||||
"Insert value": "値を挿入",
|
||||
"Format date (locale)": "日付形式(ロケール)",
|
||||
"Format date (custom)": "日付形式(カスタム)",
|
||||
"Conditional": "条件分岐",
|
||||
"Loop": "ループ",
|
||||
"Available Variables:": "利用可能な変数:",
|
||||
"Book title": "本のタイトル",
|
||||
"Book author": "著者",
|
||||
"Export date": "エクスポート日",
|
||||
"Array of chapters": "章の配列",
|
||||
"Chapter title": "章タイトル",
|
||||
"Array of annotations": "注釈の配列",
|
||||
"Highlighted text": "ハイライトテキスト",
|
||||
"Annotation note": "注釈ノート",
|
||||
"Date Format Tokens:": "日付形式トークン:",
|
||||
"Year (4 digits)": "年(4桁)",
|
||||
"Month (01-12)": "月(01-12)",
|
||||
"Day (01-31)": "日(01-31)",
|
||||
"Hour (00-23)": "時(00-23)",
|
||||
"Minute (00-59)": "分(00-59)",
|
||||
"Second (00-59)": "秒(00-59)",
|
||||
"Show Source": "ソース表示",
|
||||
"No content to preview": "プレビューするコンテンツがありません",
|
||||
"Export": "エクスポート",
|
||||
"Set Timeout": "タイムアウト設定",
|
||||
"Select Voice": "音声選択",
|
||||
"Toggle Sticky Bottom TTS Bar": "TTSバー固定切替",
|
||||
"Display what I'm reading on Discord": "読書中の本をDiscordに表示",
|
||||
"Show on Discord": "Discordに表示",
|
||||
"Instant {{action}}": "インスタント{{action}}",
|
||||
"Instant {{action}} Disabled": "インスタント{{action}}を無効化",
|
||||
"Annotation": "注釈",
|
||||
"Reset Template": "テンプレートをリセット",
|
||||
"Annotation style": "注釈スタイル",
|
||||
"Annotation color": "注釈の色",
|
||||
"Annotation time": "注釈時間",
|
||||
"AI": "AI",
|
||||
"Are you sure you want to re-index this book?": "この本を再インデックスしてもよろしいですか?",
|
||||
"Enable AI in Settings": "設定でAIを有効にする",
|
||||
"Index This Book": "この本をインデックス",
|
||||
"Enable AI search and chat for this book": "この本のAI検索とチャットを有効にする",
|
||||
"Start Indexing": "インデックス開始",
|
||||
"Indexing book...": "本をインデックス中...",
|
||||
"Preparing...": "準備中...",
|
||||
"Delete this conversation?": "この会話を削除しますか?",
|
||||
"No conversations yet": "まだ会話がありません",
|
||||
"Start a new chat to ask questions about this book": "この本について質問するには新しいチャットを開始してください",
|
||||
"Rename": "名前を変更",
|
||||
"New Chat": "新しいチャット",
|
||||
"Chat": "チャット",
|
||||
"Please enter a model ID": "モデルIDを入力してください",
|
||||
"Model not available or invalid": "モデルが利用できないか無効です",
|
||||
"Failed to validate model": "モデルの検証に失敗しました",
|
||||
"Couldn't connect to Ollama. Is it running?": "Ollamaに接続できませんでした。実行中ですか?",
|
||||
"Invalid API key or connection failed": "APIキーが無効か接続に失敗しました",
|
||||
"Connection failed": "接続に失敗しました",
|
||||
"AI Assistant": "AIアシスタント",
|
||||
"Enable AI Assistant": "AIアシスタントを有効にする",
|
||||
"Provider": "プロバイダー",
|
||||
"Ollama (Local)": "Ollama(ローカル)",
|
||||
"AI Gateway (Cloud)": "AIゲートウェイ(クラウド)",
|
||||
"Ollama Configuration": "Ollama設定",
|
||||
"Refresh Models": "モデルを更新",
|
||||
"AI Model": "AIモデル",
|
||||
"No models detected": "モデルが検出されませんでした",
|
||||
"AI Gateway Configuration": "AIゲートウェイ設定",
|
||||
"Choose from a selection of high-quality, economical AI models. You can also bring your own model by selecting \"Custom Model\" below.": "高品質で経済的なAIモデルからお選びください。下の「カスタムモデル」を選択して独自のモデルを使用することもできます。",
|
||||
"API Key": "APIキー",
|
||||
"Get Key": "キーを取得",
|
||||
"Model": "モデル",
|
||||
"Custom Model...": "カスタムモデル...",
|
||||
"Custom Model ID": "カスタムモデルID",
|
||||
"Validate": "検証",
|
||||
"Model available": "モデルが利用可能",
|
||||
"Connection": "接続",
|
||||
"Test Connection": "接続をテスト",
|
||||
"Connected": "接続済み",
|
||||
"Custom Colors": "カスタムカラー",
|
||||
"Color E-Ink Mode": "カラー電子ペーパーモード",
|
||||
"Reading Ruler": "リーディングルーラー",
|
||||
"Enable Reading Ruler": "リーディングルーラーを有効にする",
|
||||
"Lines to Highlight": "ハイライトする行数",
|
||||
"Ruler Color": "ルーラーの色",
|
||||
"Command Palette": "コマンドパレット",
|
||||
"Search settings and actions...": "設定とアクションを検索...",
|
||||
"No results found for": "の結果が見つかりませんでした",
|
||||
"Type to search settings and actions": "入力して設定とアクションを検索",
|
||||
"Recent": "最近使った項目",
|
||||
"navigate": "ナビゲート",
|
||||
"select": "選択",
|
||||
"close": "閉じる",
|
||||
"Search Settings": "設定を検索",
|
||||
"Page Margins": "ページ余白",
|
||||
"AI Provider": "AIプロバイダー",
|
||||
"Ollama URL": "OllamaのURL",
|
||||
"Ollama Model": "Ollamaモデル",
|
||||
"AI Gateway Model": "AI Gatewayモデル",
|
||||
"Actions": "アクション",
|
||||
"Navigation": "ナビゲーション",
|
||||
"Set status for {{count}} book(s)_other": "{{count}} 冊の本のステータスを設定",
|
||||
"Mark as Unread": "未読にする",
|
||||
"Mark as Finished": "読了にする",
|
||||
"Finished": "読了",
|
||||
"Unread": "未読",
|
||||
"Clear Status": "ステータスをクリア",
|
||||
"Status": "ステータス",
|
||||
"Loading": "読み込み中",
|
||||
"Exit Paragraph Mode": "段落モードを終了",
|
||||
"Paragraph Mode": "段落モード",
|
||||
"Embedding Model": "埋め込みモデル",
|
||||
"{{count}} book(s) synced_other": "{{count}} 冊の本が同期されました",
|
||||
"Unable to start RSVP": "RSVPを起動できません",
|
||||
"RSVP not supported for PDF": "PDFはRSVPに対応していません",
|
||||
"Select Chapter": "章を選択",
|
||||
"Context": "コンテキスト",
|
||||
"Ready": "準備完了",
|
||||
"Chapter Progress": "章の進捗",
|
||||
"words": "単語",
|
||||
"{{time}} left": "残り {{time}}",
|
||||
"Reading progress": "読書の進捗",
|
||||
"Click to seek": "クリックしてシーク",
|
||||
"Skip back 15 words": "15単語戻る",
|
||||
"Back 15 words (Shift+Left)": "15単語戻る (Shift+左)",
|
||||
"Pause (Space)": "一時停止 (Space)",
|
||||
"Play (Space)": "再生 (Space)",
|
||||
"Skip forward 15 words": "15単語進む",
|
||||
"Forward 15 words (Shift+Right)": "15単語進む (Shift+右)",
|
||||
"Decrease speed": "速度を下げる",
|
||||
"Slower (Left/Down)": "低速 (左/下)",
|
||||
"Increase speed": "速度を上げる",
|
||||
"Faster (Right/Up)": "高速 (右/上)",
|
||||
"Start RSVP Reading": "RSVP読書を開始",
|
||||
"Choose where to start reading": "読書を開始する場所を選択",
|
||||
"From Chapter Start": "章の最初から",
|
||||
"Start reading from the beginning of the chapter": "この章の最初から読み直す",
|
||||
"Resume": "再開",
|
||||
"Continue from where you left off": "中断した場所から再開する",
|
||||
"From Current Page": "現在のページから",
|
||||
"Start from where you are currently reading": "現在読んでいる場所から開始する",
|
||||
"From Selection": "選択範囲から",
|
||||
"Speed Reading Mode": "速読モード",
|
||||
"Scroll left": "左にスクロール",
|
||||
"Scroll right": "右にスクロール",
|
||||
"Library Sync Progress": "ライブラリ同期の進捗",
|
||||
"Back to library": "ライブラリに戻る",
|
||||
"Group by...": "グループ化...",
|
||||
"Export as Plain Text": "プレーンテキストとして書き出し",
|
||||
"Export as Markdown": "Markdownとして書き出し",
|
||||
"Show Page Navigation Buttons": "ナビゲーションボタンを表示",
|
||||
"Page {{number}}": "{{number}} ページ",
|
||||
"highlight": "ハイライト",
|
||||
"underline": "下線",
|
||||
"squiggly": "波線",
|
||||
"red": "赤",
|
||||
"violet": "すみれ色",
|
||||
"blue": "青",
|
||||
"green": "緑",
|
||||
"yellow": "黄色",
|
||||
"Select {{style}} style": "スタイル {{style}} を選択",
|
||||
"Select {{color}} color": "色 {{color}} を選択",
|
||||
"Close Book": "本を閉じる",
|
||||
"Speed Reading": "速読",
|
||||
"Close Speed Reading": "速読を閉じる",
|
||||
"Authors": "著者",
|
||||
"Books": "書籍",
|
||||
"Groups": "グループ",
|
||||
"Back to TTS Location": "TTSの位置に戻る",
|
||||
"Metadata": "メタデータ",
|
||||
"Image viewer": "画像ビューア",
|
||||
"Previous Image": "前の画像",
|
||||
"Next Image": "次の画像",
|
||||
"Zoomed": "ズーム済み",
|
||||
"Zoom level": "ズームレベル",
|
||||
"Table viewer": "テーブルビューア",
|
||||
"Unable to connect to Readwise. Please check your network connection.": "Readwise に接続できません。ネットワーク接続を確認してください。",
|
||||
"Invalid Readwise access token": "無効な Readwise アクセストークン",
|
||||
"Disconnected from Readwise": "Readwise から切断されました",
|
||||
"Never": "一度もなし",
|
||||
"Readwise Settings": "Readwise 設定",
|
||||
"Connected to Readwise": "Readwise に接続済み",
|
||||
"Last synced: {{time}}": "最終同期:{{time}}",
|
||||
"Sync Enabled": "同期有効",
|
||||
"Disconnect": "切断",
|
||||
"Connect your Readwise account to sync highlights.": "ハイライトを同期するには Readwise アカウントを接続してください。",
|
||||
"Get your access token at": "アクセストークンの取得先:",
|
||||
"Access Token": "アクセストークン",
|
||||
"Paste your Readwise access token": "Readwise アクセストークンを貼り付けてください",
|
||||
"Config": "設定",
|
||||
"Readwise Sync": "Readwise 同期",
|
||||
"Push Highlights": "ハイライトをプッシュ",
|
||||
"Highlights synced to Readwise": "ハイライトが Readwise に同期されました",
|
||||
"Readwise sync failed: no internet connection": "Readwise 同期失敗:インターネット接続がありません",
|
||||
"Readwise sync failed: {{error}}": "Readwise 同期失敗:{{error}}",
|
||||
"System Screen Brightness": "システムの画面の明るさ",
|
||||
"Page:": "ページ:",
|
||||
"Page: {{number}}": "ページ: {{number}}",
|
||||
"Annotation page number": "注釈のページ番号",
|
||||
"Translating...": "翻訳中...",
|
||||
"Show Battery Percentage": "バッテリー残量を表示",
|
||||
"Hide Scrollbar": "スクロールバーを非表示",
|
||||
"Skip to last reading position": "最後の読書位置へ移動",
|
||||
"Show context": "コンテキストを表示",
|
||||
"Hide context": "コンテキストを非表示",
|
||||
"Decrease font size": "文字サイズを縮小",
|
||||
"Increase font size": "文字サイズを拡大",
|
||||
"Focus": "フォーカス",
|
||||
"Theme color": "テーマカラー",
|
||||
"Import failed": "インポートに失敗しました",
|
||||
"Available Formatters:": "利用可能なフォーマッター:",
|
||||
"Format date": "日付のフォーマット",
|
||||
"Markdown block quote (> per line)": "Markdown引用ブロック (行ごとに >)",
|
||||
"Newlines to <br>": "改行を <br> に変換",
|
||||
"Change case": "大文字/小文字の変更",
|
||||
"Trim whitespace": "空白を除去",
|
||||
"Truncate to n characters": "n文字に切り詰め",
|
||||
"Replace text": "テキストを置換",
|
||||
"Fallback value": "フォールバック値",
|
||||
"Get length": "長さを取得",
|
||||
"First/last element": "最初/最後の要素",
|
||||
"Join array": "配列を結合",
|
||||
"Backup failed: {{error}}": "バックアップに失敗しました: {{error}}",
|
||||
"Select Backup": "バックアップを選択",
|
||||
"Restore failed: {{error}}": "復元に失敗しました: {{error}}",
|
||||
"Backup & Restore": "バックアップと復元",
|
||||
"Create a backup of your library or restore from a previous backup. Restoring will merge with your current library.": "ライブラリのバックアップを作成するか、以前のバックアップから復元します。復元は現在のライブラリとマージされます。",
|
||||
"Backup Library": "ライブラリをバックアップ",
|
||||
"Restore Library": "ライブラリを復元",
|
||||
"Creating backup...": "バックアップを作成中...",
|
||||
"Restoring library...": "ライブラリを復元中...",
|
||||
"{{current}} of {{total}} items": "{{current}} / {{total}} 件",
|
||||
"Backup completed successfully!": "バックアップが完了しました!",
|
||||
"Restore completed successfully!": "復元が完了しました!",
|
||||
"Your library has been saved to the selected location.": "ライブラリが選択した場所に保存されました。",
|
||||
"{{added}} books added, {{updated}} books updated.": "{{added}}冊追加、{{updated}}冊更新されました。",
|
||||
"Operation failed": "操作に失敗しました",
|
||||
"Loading library...": "ライブラリを読み込み中...",
|
||||
"{{count}} books refreshed_other": "{{count}}冊のメタデータを更新しました",
|
||||
"Failed to refresh metadata": "メタデータの更新に失敗しました",
|
||||
"Refresh Metadata": "メタデータを更新"
|
||||
}
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
"Auto Mode": "자동 모드",
|
||||
"Behavior": "동작",
|
||||
"Book": "책",
|
||||
"Book Cover": "책 표지",
|
||||
"Bookmark": "북마크",
|
||||
"Cancel": "취소",
|
||||
"Chapter": "챕터",
|
||||
@@ -107,7 +106,6 @@
|
||||
"Wikipedia": "위키피디아",
|
||||
"Writing Mode": "글쓰기 모드",
|
||||
"Your Library": "내 서재",
|
||||
"TTS not supported for PDF": "PDF에서 TTS가 지원되지 않음",
|
||||
"Override Book Font": "책 글꼴 덮어쓰기",
|
||||
"Apply to All Books": "모든 책에 적용",
|
||||
"Apply to This Book": "이 책에 적용",
|
||||
@@ -174,9 +172,6 @@
|
||||
"Token": "토큰",
|
||||
"Your OTP token": "당신의 OTP 토큰",
|
||||
"Verify token": "토큰 확인",
|
||||
"Sign in with Google": "Google로 로그인",
|
||||
"Sign in with Apple": "Apple로 로그인",
|
||||
"Sign in with GitHub": "GitHub로 로그인",
|
||||
"Account": "계정",
|
||||
"Failed to delete user. Please try again later.": "사용자 삭제에 실패했습니다. 나중에 다시 시도해 주세요.",
|
||||
"Community Support": "커뮤니티 지원",
|
||||
@@ -194,7 +189,7 @@
|
||||
"No supported files found. Supported formats: {{formats}}": "지원되는 파일이 없습니다. 지원되는 형식: {{formats}}",
|
||||
"Drop to Import Books": "책 가져오기 위해 드롭",
|
||||
"Custom": "사용자 정의",
|
||||
"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— 윌리엄 셰익스피어",
|
||||
"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— 윌리엄 셰익스피어",
|
||||
"Custom Theme": "사용자 정의 테마",
|
||||
"Theme Name": "테마 이름",
|
||||
"Text Color": "텍스트 색상",
|
||||
@@ -336,10 +331,10 @@
|
||||
"Fit": "맞춤",
|
||||
"Reset {{settings}}": "{{settings}} 재설정",
|
||||
"Reset Settings": "설정 재설정",
|
||||
"{{count}} pages left in chapter_other": "남은 페이지 {{count}}장",
|
||||
"{{count}} pages left in chapter_other": "<1>남은 페이지 </1><0>{{count}}</0><1>장</1>",
|
||||
"Show Remaining Pages": "남은 페이지 보기",
|
||||
"Source Han Serif CN VF": "Source Han Serif",
|
||||
"Huiwen-mincho": "Huiwen Mincho",
|
||||
"Source Han Serif CN": "Source Han Serif",
|
||||
"Huiwen-MinchoGBK": "Huiwen Mincho",
|
||||
"KingHwa_OldSong": "KingHwa Song",
|
||||
"Manage Subscription": "구독 관리",
|
||||
"Coming Soon": "곧 출시 예정",
|
||||
@@ -599,11 +594,10 @@
|
||||
"Size": "크기",
|
||||
"Cover": "표지",
|
||||
"Contain": "포함",
|
||||
"{{number}} pages left in chapter": "남은 페이지 {{number}}장",
|
||||
"{{number}} pages left in chapter": "<1>남은 페이지 </1><0>{{number}}</0><1>장</1>",
|
||||
"Device": "장치",
|
||||
"E-Ink Mode": "E-Ink 모드",
|
||||
"Highlight Colors": "하이라이트 색상",
|
||||
"Auto Screen Brightness": "자동 화면 밝기",
|
||||
"Pagination": "페이지 매김",
|
||||
"Disable Double Tap": "더블 탭 비활성화",
|
||||
"Tap to Paginate": "탭하여 페이지 매김",
|
||||
@@ -652,5 +646,448 @@
|
||||
"Update email": "이메일 업데이트",
|
||||
"Current email": "현재 이메일",
|
||||
"Update Email": "이메일 업데이트",
|
||||
"All": "전체"
|
||||
"All": "전체",
|
||||
"Unable to open book": "책을 열 수 없습니다",
|
||||
"Punctuation": "구두점",
|
||||
"Replace Quotation Marks": "인용 부호 바꾸기",
|
||||
"Enabled only in vertical layout.": "세로 레이아웃에서만 활성화됩니다.",
|
||||
"No Conversion": "변환 없음",
|
||||
"Simplified to Traditional": "간체 → 번체",
|
||||
"Traditional to Simplified": "번체 → 간체",
|
||||
"Simplified to Traditional (Taiwan)": "간체 → 번체 (대만)",
|
||||
"Simplified to Traditional (Hong Kong)": "간체 → 번체 (홍콩)",
|
||||
"Simplified to Traditional (Taiwan), with phrases": "간체 → 번체 (대만) • 문구",
|
||||
"Traditional (Taiwan) to Simplified": "번체 (대만) → 간체",
|
||||
"Traditional (Hong Kong) to Simplified": "번체 (홍콩) → 간체",
|
||||
"Traditional (Taiwan) to Simplified, with phrases": "번체 (대만) → 간체 • 문구",
|
||||
"Convert Simplified and Traditional Chinese": "간체/번체 변환",
|
||||
"Convert Mode": "변환 모드",
|
||||
"Failed to auto-save book cover for lock screen: {{error}}": "잠금 화면용 책 표지 자동 저장 실패: {{error}}",
|
||||
"Download from Cloud": "클라우드에서 다운로드",
|
||||
"Upload to Cloud": "클라우드에 업로드",
|
||||
"Clear Custom Fonts": "사용자 정의 글꼴 지우기",
|
||||
"Columns": "열",
|
||||
"OPDS Catalogs": "OPDS 카탈로그",
|
||||
"Adding LAN addresses is not supported in the web app version.": "웹 앱 버전에서는 LAN 주소 추가를 지원하지 않습니다.",
|
||||
"Invalid OPDS catalog. Please check the URL.": "잘못된 OPDS 카탈로그입니다. URL을 확인해주세요.",
|
||||
"Browse and download books from online catalogs": "온라인 카탈로그에서 책을 탐색하고 다운로드",
|
||||
"My Catalogs": "내 카탈로그",
|
||||
"Add Catalog": "카탈로그 추가",
|
||||
"No catalogs yet": "아직 카탈로그가 없습니다",
|
||||
"Add your first OPDS catalog to start browsing books": "책을 탐색하려면 첫 번째 OPDS 카탈로그를 추가하세요.",
|
||||
"Add Your First Catalog": "첫 번째 카탈로그 추가",
|
||||
"Browse": "탐색",
|
||||
"Popular Catalogs": "인기 카탈로그",
|
||||
"Add": "추가",
|
||||
"Add OPDS Catalog": "OPDS 카탈로그 추가",
|
||||
"Catalog Name": "카탈로그 이름",
|
||||
"My Calibre Library": "내 Calibre 라이브러리",
|
||||
"OPDS URL": "OPDS URL",
|
||||
"Username (optional)": "사용자 이름 (선택 사항)",
|
||||
"Password (optional)": "비밀번호 (선택 사항)",
|
||||
"Description (optional)": "설명 (선택 사항)",
|
||||
"A brief description of this catalog": "이 카탈로그의 간단한 설명",
|
||||
"Validating...": "검증 중...",
|
||||
"View All": "모두 보기",
|
||||
"Forward": "다음",
|
||||
"Home": "홈",
|
||||
"{{count}} items_other": "{{count}}개 항목",
|
||||
"Download completed": "다운로드 완료",
|
||||
"Download failed": "다운로드 실패",
|
||||
"Open Access": "오픈 액세스",
|
||||
"Borrow": "대출",
|
||||
"Buy": "구매",
|
||||
"Subscribe": "구독",
|
||||
"Sample": "샘플",
|
||||
"Download": "다운로드",
|
||||
"Open & Read": "열기 및 읽기",
|
||||
"Tags": "태그",
|
||||
"Tag": "태그",
|
||||
"First": "처음",
|
||||
"Previous": "이전",
|
||||
"Next": "다음",
|
||||
"Last": "마지막",
|
||||
"Cannot Load Page": "페이지를 불러올 수 없습니다",
|
||||
"An error occurred": "오류가 발생했습니다",
|
||||
"Online Library": "온라인 라이브러리",
|
||||
"URL must start with http:// or https://": "URL은 http:// 또는 https://로 시작해야 합니다",
|
||||
"Title, Author, Tag, etc...": "제목, 저자, 태그 등...",
|
||||
"Query": "쿼리",
|
||||
"Subject": "주제",
|
||||
"Enter {{terms}}": "{{terms}} 입력",
|
||||
"No search results found": "검색 결과가 없습니다",
|
||||
"Failed to load OPDS feed: {{status}} {{statusText}}": "OPDS 피드를 불러오지 못했습니다: {{status}} {{statusText}}",
|
||||
"Search in {{title}}": "{{title}}에서 검색",
|
||||
"Manage Storage": "저장소 관리",
|
||||
"Failed to load files": "파일 로드 실패",
|
||||
"Deleted {{count}} file(s)_other": "{{count}}개의 파일이 삭제되었습니다",
|
||||
"Failed to delete {{count}} file(s)_other": "{{count}}개의 파일 삭제 실패",
|
||||
"Failed to delete files": "파일 삭제 실패",
|
||||
"Total Files": "총 파일",
|
||||
"Total Size": "총 용량",
|
||||
"Quota": "쿼터",
|
||||
"Used": "사용됨",
|
||||
"Files": "파일",
|
||||
"Search files...": "파일 검색...",
|
||||
"Newest First": "최신순",
|
||||
"Oldest First": "오래된순",
|
||||
"Largest First": "큰 파일순",
|
||||
"Smallest First": "작은 파일순",
|
||||
"Name A-Z": "이름 A-Z",
|
||||
"Name Z-A": "이름 Z-A",
|
||||
"{{count}} selected_other": "{{count}}개 선택됨",
|
||||
"Delete Selected": "선택 삭제",
|
||||
"Created": "생성됨",
|
||||
"No files found": "파일이 없습니다",
|
||||
"No files uploaded yet": "아직 업로드된 파일이 없습니다",
|
||||
"files": "파일",
|
||||
"Page {{current}} of {{total}}": "페이지 {{current}} / {{total}}",
|
||||
"Are you sure to delete {{count}} selected file(s)?_other": "선택한 {{count}}개의 파일을 삭제하시겠습니까?",
|
||||
"Cloud Storage Usage": "클라우드 저장소 사용량",
|
||||
"Rename Group": "그룹 이름 바꾸기",
|
||||
"From Directory": "디렉토리에서",
|
||||
"Successfully imported {{count}} book(s)_other": "성공적으로 {{count}} 권의 책이 가져와졌습니다",
|
||||
"Count": "개수",
|
||||
"Start Page": "시작 페이지",
|
||||
"Search in OPDS Catalog...": "OPDS 카탈로그에서 검색...",
|
||||
"Please log in to use advanced TTS features": "고급 TTS 기능을 사용하려면 로그인하세요",
|
||||
"Word limit of 30 words exceeded.": "30단어 제한을 초과했습니다.",
|
||||
"Proofread": "교정",
|
||||
"Current selection": "현재 선택",
|
||||
"All occurrences in this book": "이 책의 모든 위치",
|
||||
"All occurrences in your library": "라이브러리의 모든 위치",
|
||||
"Selected text:": "선택한 텍스트:",
|
||||
"Replace with:": "다음으로 바꾸기:",
|
||||
"Enter text...": "텍스트 입력…",
|
||||
"Case sensitive:": "대소문자 구분:",
|
||||
"Scope:": "적용 범위:",
|
||||
"Selection": "선택",
|
||||
"Library": "라이브러리",
|
||||
"Yes": "예",
|
||||
"No": "아니요",
|
||||
"Proofread Replacement Rules": "교정 대체 규칙",
|
||||
"Selected Text Rules": "선택한 텍스트 규칙",
|
||||
"No selected text replacement rules": "선택한 텍스트에 대한 대체 규칙이 없습니다",
|
||||
"Book Specific Rules": "책별 규칙",
|
||||
"No book-level replacement rules": "책 수준의 대체 규칙이 없습니다",
|
||||
"Disable Quick Action": "빠른 작업 비활성화",
|
||||
"Enable Quick Action on Selection": "선택 시 빠른 작업 활성화",
|
||||
"None": "없음",
|
||||
"Annotation Tools": "주석 도구",
|
||||
"Enable Quick Actions": "빠른 작업 활성화",
|
||||
"Quick Action": "빠른 작업",
|
||||
"Copy to Notebook": "노트에 복사",
|
||||
"Copy text after selection": "선택 후 텍스트 복사",
|
||||
"Highlight text after selection": "선택 후 텍스트 강조",
|
||||
"Annotate text after selection": "선택 후 텍스트 주석 달기",
|
||||
"Search text after selection": "선택 후 텍스트 검색",
|
||||
"Look up text in dictionary after selection": "선택 후 텍스트를 사전에서 찾기",
|
||||
"Look up text in Wikipedia after selection": "선택 후 텍스트를 위키피디아에서 찾기",
|
||||
"Translate text after selection": "선택 후 텍스트 번역",
|
||||
"Read text aloud after selection": "선택 후 텍스트 음성 읽기",
|
||||
"Proofread text after selection": "선택 후 텍스트 교정",
|
||||
"{{activeCount}} active, {{pendingCount}} pending": "{{activeCount}} 진행 중, {{pendingCount}} 대기 중",
|
||||
"{{failedCount}} failed": "{{failedCount}} 실패",
|
||||
"Waiting...": "대기 중...",
|
||||
"Failed": "실패",
|
||||
"Completed": "완료됨",
|
||||
"Cancelled": "취소됨",
|
||||
"Retry": "재시도",
|
||||
"Active": "진행 중",
|
||||
"Transfer Queue": "전송 대기열",
|
||||
"Upload All": "모두 업로드",
|
||||
"Download All": "모두 다운로드",
|
||||
"Resume Transfers": "전송 재개",
|
||||
"Pause Transfers": "전송 일시정지",
|
||||
"Pending": "대기 중",
|
||||
"No transfers": "전송 없음",
|
||||
"Retry All": "모두 재시도",
|
||||
"Clear Completed": "완료된 항목 지우기",
|
||||
"Clear Failed": "실패한 항목 지우기",
|
||||
"Upload queued: {{title}}": "업로드 대기열에 추가됨: {{title}}",
|
||||
"Download queued: {{title}}": "다운로드 대기열에 추가됨: {{title}}",
|
||||
"Book not found in library": "라이브러리에서 책을 찾을 수 없음",
|
||||
"Unknown error": "알 수 없는 오류",
|
||||
"Please log in to continue": "계속하려면 로그인하세요",
|
||||
"Cloud File Transfers": "클라우드 파일 전송",
|
||||
"Show Search Results": "검색 결과 보기",
|
||||
"Search results for '{{term}}'": "'{{term}}' 검색 결과",
|
||||
"Close Search": "검색 닫기",
|
||||
"Previous Result": "이전 결과",
|
||||
"Next Result": "다음 결과",
|
||||
"Bookmarks": "북마크",
|
||||
"Annotations": "주석",
|
||||
"Show Results": "결과 표시",
|
||||
"Clear search": "검색 지우기",
|
||||
"Clear search history": "검색 기록 지우기",
|
||||
"Tap to Toggle Footer": "탭하여 바닥글 전환",
|
||||
"Show Current Time": "현재 시간 표시",
|
||||
"Use 24 Hour Clock": "24시간제 사용",
|
||||
"Show Current Battery Status": "현재 배터리 상태 표시",
|
||||
"Exported successfully": "내보내기 성공",
|
||||
"Book exported successfully.": "책을 성공적으로 내보냈습니다.",
|
||||
"Failed to export the book.": "책 내보내기에 실패했습니다.",
|
||||
"Export Book": "책 내보내기",
|
||||
"Whole word:": "전체 단어:",
|
||||
"Error": "오류",
|
||||
"Unable to load the article. Try searching directly on {{link}}.": "문서를 로드할 수 없습니다. {{link}}에서 직접 검색해 보세요.",
|
||||
"Unable to load the word. Try searching directly on {{link}}.": "단어를 로드할 수 없습니다. {{link}}에서 직접 검색해 보세요.",
|
||||
"Date Published": "출판일",
|
||||
"Only for TTS:": "TTS 전용:",
|
||||
"Uploaded": "업로드됨",
|
||||
"Downloaded": "다운로드됨",
|
||||
"Deleted": "삭제됨",
|
||||
"Note:": "노트:",
|
||||
"Time:": "시간:",
|
||||
"Format Options": "형식 옵션",
|
||||
"Export Date": "내보내기 날짜",
|
||||
"Chapter Titles": "챕터 제목",
|
||||
"Chapter Separator": "챕터 구분 기호",
|
||||
"Highlights": "하이라이트",
|
||||
"Note Date": "노트 날짜",
|
||||
"Advanced": "고급",
|
||||
"Hide": "숨기기",
|
||||
"Show": "표시",
|
||||
"Use Custom Template": "사용자 지정 템플릿 사용",
|
||||
"Export Template": "내보내기 템플릿",
|
||||
"Template Syntax:": "템플릿 구문:",
|
||||
"Insert value": "값 삽입",
|
||||
"Format date (locale)": "날짜 형식 (로케일)",
|
||||
"Format date (custom)": "날짜 형식 (사용자 지정)",
|
||||
"Conditional": "조건부",
|
||||
"Loop": "반복",
|
||||
"Available Variables:": "사용 가능한 변수:",
|
||||
"Book title": "책 제목",
|
||||
"Book author": "책 저자",
|
||||
"Export date": "내보내기 날짜",
|
||||
"Array of chapters": "챕터 배열",
|
||||
"Chapter title": "챕터 제목",
|
||||
"Array of annotations": "주석 배열",
|
||||
"Highlighted text": "하이라이트된 텍스트",
|
||||
"Annotation note": "주석 노트",
|
||||
"Date Format Tokens:": "날짜 형식 토큰:",
|
||||
"Year (4 digits)": "연도 (4자리)",
|
||||
"Month (01-12)": "월 (01-12)",
|
||||
"Day (01-31)": "일 (01-31)",
|
||||
"Hour (00-23)": "시 (00-23)",
|
||||
"Minute (00-59)": "분 (00-59)",
|
||||
"Second (00-59)": "초 (00-59)",
|
||||
"Show Source": "소스 표시",
|
||||
"No content to preview": "미리 볼 내용 없음",
|
||||
"Export": "내보내기",
|
||||
"Set Timeout": "시간 제한 설정",
|
||||
"Select Voice": "음성 선택",
|
||||
"Toggle Sticky Bottom TTS Bar": "고정 TTS 바 전환",
|
||||
"Display what I'm reading on Discord": "Discord에 읽는 책 표시",
|
||||
"Show on Discord": "Discord에 표시",
|
||||
"Instant {{action}}": "즉시 {{action}}",
|
||||
"Instant {{action}} Disabled": "즉시 {{action}} 비활성화",
|
||||
"Annotation": "주석",
|
||||
"Reset Template": "템플릿 초기화",
|
||||
"Annotation style": "주석 스타일",
|
||||
"Annotation color": "주석 색상",
|
||||
"Annotation time": "주석 시간",
|
||||
"AI": "AI",
|
||||
"Are you sure you want to re-index this book?": "이 책을 다시 인덱싱하시겠습니까?",
|
||||
"Enable AI in Settings": "설정에서 AI 활성화",
|
||||
"Index This Book": "이 책 인덱싱",
|
||||
"Enable AI search and chat for this book": "이 책에 대한 AI 검색 및 채팅 활성화",
|
||||
"Start Indexing": "인덱싱 시작",
|
||||
"Indexing book...": "책 인덱싱 중...",
|
||||
"Preparing...": "준비 중...",
|
||||
"Delete this conversation?": "이 대화를 삭제하시겠습니까?",
|
||||
"No conversations yet": "아직 대화가 없습니다",
|
||||
"Start a new chat to ask questions about this book": "이 책에 대해 질문하려면 새 채팅을 시작하세요",
|
||||
"Rename": "이름 변경",
|
||||
"New Chat": "새 채팅",
|
||||
"Chat": "채팅",
|
||||
"Please enter a model ID": "모델 ID를 입력하세요",
|
||||
"Model not available or invalid": "모델을 사용할 수 없거나 유효하지 않습니다",
|
||||
"Failed to validate model": "모델 검증 실패",
|
||||
"Couldn't connect to Ollama. Is it running?": "Ollama에 연결할 수 없습니다. 실행 중인가요?",
|
||||
"Invalid API key or connection failed": "API 키가 유효하지 않거나 연결 실패",
|
||||
"Connection failed": "연결 실패",
|
||||
"AI Assistant": "AI 어시스턴트",
|
||||
"Enable AI Assistant": "AI 어시스턴트 활성화",
|
||||
"Provider": "제공자",
|
||||
"Ollama (Local)": "Ollama (로컬)",
|
||||
"AI Gateway (Cloud)": "AI 게이트웨이 (클라우드)",
|
||||
"Ollama Configuration": "Ollama 설정",
|
||||
"Refresh Models": "모델 새로고침",
|
||||
"AI Model": "AI 모델",
|
||||
"No models detected": "모델이 감지되지 않았습니다",
|
||||
"AI Gateway Configuration": "AI 게이트웨이 설정",
|
||||
"Choose from a selection of high-quality, economical AI models. You can also bring your own model by selecting \"Custom Model\" below.": "고품질의 경제적인 AI 모델 중에서 선택하세요. 아래의 \"사용자 정의 모델\"을 선택하여 자신의 모델을 사용할 수도 있습니다.",
|
||||
"API Key": "API 키",
|
||||
"Get Key": "키 받기",
|
||||
"Model": "모델",
|
||||
"Custom Model...": "사용자 정의 모델...",
|
||||
"Custom Model ID": "사용자 정의 모델 ID",
|
||||
"Validate": "검증",
|
||||
"Model available": "모델 사용 가능",
|
||||
"Connection": "연결",
|
||||
"Test Connection": "연결 테스트",
|
||||
"Connected": "연결됨",
|
||||
"Custom Colors": "사용자 정의 색상",
|
||||
"Color E-Ink Mode": "컬러 E-Ink 모드",
|
||||
"Reading Ruler": "읽기 자",
|
||||
"Enable Reading Ruler": "읽기 자 활성화",
|
||||
"Lines to Highlight": "강조할 줄 수",
|
||||
"Ruler Color": "자 색상",
|
||||
"Command Palette": "명령 팔레트",
|
||||
"Search settings and actions...": "설정 및 작업 검색...",
|
||||
"No results found for": "에 대한 결과를 찾을 수 없음",
|
||||
"Type to search settings and actions": "입력하여 설정 및 작업 검색",
|
||||
"Recent": "최근",
|
||||
"navigate": "탐색",
|
||||
"select": "선택",
|
||||
"close": "닫기",
|
||||
"Search Settings": "설정 검색",
|
||||
"Page Margins": "페이지 여백",
|
||||
"AI Provider": "AI 제공처",
|
||||
"Ollama URL": "Ollama URL",
|
||||
"Ollama Model": "Ollama 모델",
|
||||
"AI Gateway Model": "AI 게이트웨이 모델",
|
||||
"Actions": "작업",
|
||||
"Navigation": "탐색",
|
||||
"Set status for {{count}} book(s)_other": "책 {{count}}권 상태 설정",
|
||||
"Mark as Unread": "읽지 않음으로 표시",
|
||||
"Mark as Finished": "완료로 표시",
|
||||
"Finished": "완료",
|
||||
"Unread": "읽지 않음",
|
||||
"Clear Status": "상태 지우기",
|
||||
"Status": "상태",
|
||||
"Loading": "로드 중...",
|
||||
"Exit Paragraph Mode": "단락 모드 종료",
|
||||
"Paragraph Mode": "단락 모드",
|
||||
"Embedding Model": "임베딩 모델",
|
||||
"{{count}} book(s) synced_other": "{{count}}권의 책이 동기화되었습니다",
|
||||
"Unable to start RSVP": "RSVP를 시작할 수 없습니다",
|
||||
"RSVP not supported for PDF": "PDF는 RSVP를 지원하지 않습니다",
|
||||
"Select Chapter": "챕터 선택",
|
||||
"Context": "문맥",
|
||||
"Ready": "준비됨",
|
||||
"Chapter Progress": "챕터 진행 상황",
|
||||
"words": "단어",
|
||||
"{{time}} left": "{{time}} 남음",
|
||||
"Reading progress": "독서 진행 상황",
|
||||
"Click to seek": "클릭하여 탐색",
|
||||
"Skip back 15 words": "15단어 뒤로",
|
||||
"Back 15 words (Shift+Left)": "15단어 뒤로 (Shift+왼쪽 화살표)",
|
||||
"Pause (Space)": "일시정지 (스페이스바)",
|
||||
"Play (Space)": "재생 (스페이스바)",
|
||||
"Skip forward 15 words": "15단어 앞으로",
|
||||
"Forward 15 words (Shift+Right)": "15단어 앞으로 (Shift+오른쪽 화살표)",
|
||||
"Decrease speed": "속도 줄이기",
|
||||
"Slower (Left/Down)": "느리게 (왼쪽/아래 화살표)",
|
||||
"Increase speed": "속도 높이기",
|
||||
"Faster (Right/Up)": "빠르게 (오른쪽/위 화살표)",
|
||||
"Start RSVP Reading": "RSVP 독서 시작",
|
||||
"Choose where to start reading": "독서를 시작할 위치 선택",
|
||||
"From Chapter Start": "챕터 시작부터",
|
||||
"Start reading from the beginning of the chapter": "챕터 처음부터 다시 시작",
|
||||
"Resume": "재개",
|
||||
"Continue from where you left off": "중단한 지점부터 계속 읽기",
|
||||
"From Current Page": "현재 페이지부터",
|
||||
"Start from where you are currently reading": "현재 읽고 있는 위치부터 시작",
|
||||
"From Selection": "선택 범위부터",
|
||||
"Speed Reading Mode": "속독 모드",
|
||||
"Scroll left": "왼쪽으로 스크롤",
|
||||
"Scroll right": "오른쪽으로 스크롤",
|
||||
"Library Sync Progress": "라이브러리 동기화 진행 상황",
|
||||
"Back to library": "라이브러리로 돌아가기",
|
||||
"Group by...": "그룹화 기준...",
|
||||
"Export as Plain Text": "일반 텍스트로 내보내기",
|
||||
"Export as Markdown": "Markdown으로 내보내기",
|
||||
"Show Page Navigation Buttons": "탐색 버튼 표시",
|
||||
"Page {{number}}": "{{number}} 페이지",
|
||||
"highlight": "하이라이트",
|
||||
"underline": "밑줄",
|
||||
"squiggly": "구불구불한 선",
|
||||
"red": "빨간색",
|
||||
"violet": "보라색",
|
||||
"blue": "파란색",
|
||||
"green": "초록색",
|
||||
"yellow": "노란색",
|
||||
"Select {{style}} style": "{{style}} 스타일 선택",
|
||||
"Select {{color}} color": "{{color}} 색상 선택",
|
||||
"Close Book": "책 닫기",
|
||||
"Speed Reading": "속독",
|
||||
"Close Speed Reading": "속독 닫기",
|
||||
"Authors": "저자",
|
||||
"Books": "도서",
|
||||
"Groups": "그룹",
|
||||
"Back to TTS Location": "TTS 위치로 돌아가기",
|
||||
"Metadata": "메타데이터",
|
||||
"Image viewer": "이미지 뷰어",
|
||||
"Previous Image": "이전 이미지",
|
||||
"Next Image": "다음 이미지",
|
||||
"Zoomed": "확대됨",
|
||||
"Zoom level": "확대 수준",
|
||||
"Table viewer": "테이블 뷰어",
|
||||
"Unable to connect to Readwise. Please check your network connection.": "Readwise에 연결할 수 없습니다. 네트워크 연결을 확인해 주세요.",
|
||||
"Invalid Readwise access token": "유효하지 않은 Readwise 액세스 토큰입니다",
|
||||
"Disconnected from Readwise": "Readwise와 연결이 끊어졌습니다",
|
||||
"Never": "안 함",
|
||||
"Readwise Settings": "Readwise 설정",
|
||||
"Connected to Readwise": "Readwise에 연결됨",
|
||||
"Last synced: {{time}}": "마지막 동기화: {{time}}",
|
||||
"Sync Enabled": "동기화 활성화됨",
|
||||
"Disconnect": "연결 해제",
|
||||
"Connect your Readwise account to sync highlights.": "하이라이트를 동기화하려면 Readwise 계정렬 연결하세요.",
|
||||
"Get your access token at": "액세스 토큰 받기:",
|
||||
"Access Token": "액세스 토큰",
|
||||
"Paste your Readwise access token": "Readwise 액세스 토큰을 붙여넣으세요",
|
||||
"Config": "구성",
|
||||
"Readwise Sync": "Readwise 동기화",
|
||||
"Push Highlights": "하이라이트 푸시",
|
||||
"Highlights synced to Readwise": "하이라이트가 Readwise에 동기화되었습니다",
|
||||
"Readwise sync failed: no internet connection": "Readwise 동기화 실패: 인터넷 연결 없음",
|
||||
"Readwise sync failed: {{error}}": "Readwise 동기화 실패: {{error}}",
|
||||
"System Screen Brightness": "시스템 화면 밝기",
|
||||
"Page:": "페이지:",
|
||||
"Page: {{number}}": "페이지: {{number}}",
|
||||
"Annotation page number": "주석 페이지 번호",
|
||||
"Translating...": "번역 중...",
|
||||
"Show Battery Percentage": "배터리 백분율 표시",
|
||||
"Hide Scrollbar": "스크롤바 숨기기",
|
||||
"Skip to last reading position": "마지막 읽기 위치로 이동",
|
||||
"Show context": "맥락 표시",
|
||||
"Hide context": "맥락 숨기기",
|
||||
"Decrease font size": "글꼴 크기 줄이기",
|
||||
"Increase font size": "글꼴 크기 늘리기",
|
||||
"Focus": "초점",
|
||||
"Theme color": "테마 색상",
|
||||
"Import failed": "가져오기 실패",
|
||||
"Available Formatters:": "사용 가능한 포맷터:",
|
||||
"Format date": "날짜 형식",
|
||||
"Markdown block quote (> per line)": "Markdown 인용 블록 (줄마다 >)",
|
||||
"Newlines to <br>": "줄바꿈을 <br>로 변환",
|
||||
"Change case": "대소문자 변경",
|
||||
"Trim whitespace": "공백 제거",
|
||||
"Truncate to n characters": "n자로 자르기",
|
||||
"Replace text": "텍스트 바꾸기",
|
||||
"Fallback value": "기본값",
|
||||
"Get length": "길이 가져오기",
|
||||
"First/last element": "첫 번째/마지막 요소",
|
||||
"Join array": "배열 합치기",
|
||||
"Backup failed: {{error}}": "백업 실패: {{error}}",
|
||||
"Select Backup": "백업 선택",
|
||||
"Restore failed: {{error}}": "복원 실패: {{error}}",
|
||||
"Backup & Restore": "백업 및 복원",
|
||||
"Create a backup of your library or restore from a previous backup. Restoring will merge with your current library.": "라이브러리를 백업하거나 이전 백업에서 복원하세요. 복원 시 현재 라이브러리와 병합됩니다.",
|
||||
"Backup Library": "라이브러리 백업",
|
||||
"Restore Library": "라이브러리 복원",
|
||||
"Creating backup...": "백업 생성 중...",
|
||||
"Restoring library...": "라이브러리 복원 중...",
|
||||
"{{current}} of {{total}} items": "{{current}} / {{total}} 항목",
|
||||
"Backup completed successfully!": "백업이 완료되었습니다!",
|
||||
"Restore completed successfully!": "복원이 완료되었습니다!",
|
||||
"Your library has been saved to the selected location.": "라이브러리가 선택한 위치에 저장되었습니다.",
|
||||
"{{added}} books added, {{updated}} books updated.": "{{added}}권 추가, {{updated}}권 업데이트되었습니다.",
|
||||
"Operation failed": "작업 실패",
|
||||
"Loading library...": "라이브러리 로딩 중...",
|
||||
"{{count}} books refreshed_other": "{{count}}권 새로고침됨",
|
||||
"Failed to refresh metadata": "메타데이터 새로고침 실패",
|
||||
"Refresh Metadata": "메타데이터 새로고침"
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -23,9 +23,6 @@
|
||||
"Token": "Token",
|
||||
"Your OTP token": "Uw OTP-token",
|
||||
"Verify token": "Token verifiëren",
|
||||
"Sign in with Google": "Inloggen met Google",
|
||||
"Sign in with Apple": "Inloggen met Apple",
|
||||
"Sign in with GitHub": "Inloggen met GitHub",
|
||||
"New Password": "Nieuw wachtwoord",
|
||||
"Your new password": "Uw nieuwe wachtwoord",
|
||||
"Update password": "Wachtwoord bijwerken",
|
||||
@@ -196,7 +193,6 @@
|
||||
"Link Color": "Linkkleur",
|
||||
"Preview": "Voorbeeld",
|
||||
"Font & Layout": "Lettertype & opmaak",
|
||||
"Book Cover": "Boekomslag",
|
||||
"More Info": "Meer informatie",
|
||||
"Parallel Read": "Parallel lezen",
|
||||
"Export Annotations": "Annotaties exporteren",
|
||||
@@ -210,7 +206,6 @@
|
||||
"TOC": "Inhoudsopgave",
|
||||
"Table of Contents": "Inhoudsopgave",
|
||||
"Sidebar": "Zijbalk",
|
||||
"TTS not supported for PDF": "TTS niet ondersteund voor PDF",
|
||||
"No Timeout": "Geen time-out",
|
||||
"{{value}} minute": "{{value}} minuut",
|
||||
"{{value}} minutes": "{{value}} minuten",
|
||||
@@ -269,7 +264,7 @@
|
||||
"Reveal in File Explorer": "Tonen in Verkenner",
|
||||
"Reveal in Folder": "Tonen in map",
|
||||
"Don't have an account? Sign up": "Nog geen account? Registreer u",
|
||||
"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": "De hele wereld is een toneel,\nEn alle mannen en vrouwen slechts spelers;\nZij hebben hun uitgangen en hun entrees,\nEn één man speelt in zijn tijd vele rollen,\nZijn daden zijnde zeven leeftijden.\n\n— William Shakespeare",
|
||||
"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": "De hele wereld is een toneel,\nEn alle mannen en vrouwen slechts spelers;\nZij hebben hun uitgangen en hun entrees,\nEn één man speelt in zijn tijd vele rollen,\nZijn daden zijnde zeven leeftijden.\n\n— William Shakespeare",
|
||||
"Next Section": "Volgende sectie",
|
||||
"Previous Section": "Vorige sectie",
|
||||
"Next Page": "Volgende pagina",
|
||||
@@ -339,11 +334,11 @@
|
||||
"Fit": "Passend maken",
|
||||
"Reset {{settings}}": "Reset {{settings}}",
|
||||
"Reset Settings": "Instellingen resetten",
|
||||
"{{count}} pages left in chapter_one": "Nog {{count}} pagina in hoofdstuk",
|
||||
"{{count}} pages left in chapter_other": "Nog {{count}} pagina’s in hoofdstuk",
|
||||
"{{count}} pages left in chapter_one": "<1>Nog </1><0>{{count}}</0><1> pagina in hoofdstuk</1>",
|
||||
"{{count}} pages left in chapter_other": "<1>Nog </1><0>{{count}}</0><1> pagina’s in hoofdstuk</1>",
|
||||
"Show Remaining Pages": "Toon resterende pagina’s",
|
||||
"Source Han Serif CN VF": "Source Han Serif",
|
||||
"Huiwen-mincho": "Huiwen Mincho",
|
||||
"Source Han Serif CN": "Source Han Serif",
|
||||
"Huiwen-MinchoGBK": "Huiwen Mincho",
|
||||
"KingHwa_OldSong": "KingHwa Song",
|
||||
"Manage Subscription": "Abonnement beheren",
|
||||
"Coming Soon": "Binnenkort beschikbaar",
|
||||
@@ -603,11 +598,10 @@
|
||||
"Size": "Grootte",
|
||||
"Cover": "Omslag",
|
||||
"Contain": "Bevatten",
|
||||
"{{number}} pages left in chapter": "Nog {{number}} pagina’s in hoofdstuk",
|
||||
"{{number}} pages left in chapter": "<1>Nog </1><0>{{number}}</0><1> pagina’s in hoofdstuk</1>",
|
||||
"Device": "Apparaat",
|
||||
"E-Ink Mode": "E-Ink Modus",
|
||||
"Highlight Colors": "Markeerkleuren",
|
||||
"Auto Screen Brightness": "Automatische Schermhelderheid",
|
||||
"Pagination": "Paginering",
|
||||
"Disable Double Tap": "Schakel Dubbel Tikken Uit",
|
||||
"Tap to Paginate": "Tik om te Pagineren",
|
||||
@@ -656,5 +650,457 @@
|
||||
"Update email": "E-mail bijwerken",
|
||||
"Current email": "Huidig e-mailadres",
|
||||
"Update Email": "E-mail bijwerken",
|
||||
"All": "Alles"
|
||||
"All": "Alles",
|
||||
"Unable to open book": "Kan boek niet openen",
|
||||
"Punctuation": "Interpunctie",
|
||||
"Replace Quotation Marks": "Aanhalingstekens vervangen",
|
||||
"Enabled only in vertical layout.": "Alleen ingeschakeld in verticale lay-out.",
|
||||
"No Conversion": "Geen conversie",
|
||||
"Simplified to Traditional": "Vereenvoudigd → Traditioneel",
|
||||
"Traditional to Simplified": "Traditioneel → Vereenvoudigd",
|
||||
"Simplified to Traditional (Taiwan)": "Vereenvoudigd → Traditioneel (Taiwan)",
|
||||
"Simplified to Traditional (Hong Kong)": "Vereenvoudigd → Traditioneel (Hong Kong)",
|
||||
"Simplified to Traditional (Taiwan), with phrases": "Vereenvoudigd → Traditioneel (Taiwan • zinnen)",
|
||||
"Traditional (Taiwan) to Simplified": "Traditioneel (Taiwan) → Vereenvoudigd",
|
||||
"Traditional (Hong Kong) to Simplified": "Traditioneel (Hong Kong) → Vereenvoudigd",
|
||||
"Traditional (Taiwan) to Simplified, with phrases": "Traditioneel (Taiwan • zinnen) → Vereenvoudigd",
|
||||
"Convert Simplified and Traditional Chinese": "Converteer Vereenvoudigd/Traditioneel Chinees",
|
||||
"Convert Mode": "Conversiemodus",
|
||||
"Failed to auto-save book cover for lock screen: {{error}}": "Automatisch opslaan van boekomslag voor vergrendelscherm mislukt: {{error}}",
|
||||
"Download from Cloud": "Downloaden van Cloud",
|
||||
"Upload to Cloud": "Uploaden naar Cloud",
|
||||
"Clear Custom Fonts": "Aangepaste Lettertypen Wissen",
|
||||
"Columns": "Kolommen",
|
||||
"OPDS Catalogs": "OPDS-catalogi",
|
||||
"Adding LAN addresses is not supported in the web app version.": "Het toevoegen van LAN-adressen wordt niet ondersteund in de webversie.",
|
||||
"Invalid OPDS catalog. Please check the URL.": "Ongeldige OPDS-catalogus. Controleer de URL.",
|
||||
"Browse and download books from online catalogs": "Blader door en download boeken uit online catalogi",
|
||||
"My Catalogs": "Mijn catalogi",
|
||||
"Add Catalog": "Catalogus toevoegen",
|
||||
"No catalogs yet": "Nog geen catalogi",
|
||||
"Add your first OPDS catalog to start browsing books": "Voeg je eerste OPDS-catalogus toe om boeken te bekijken",
|
||||
"Add Your First Catalog": "Voeg je eerste catalogus toe",
|
||||
"Browse": "Bladeren",
|
||||
"Popular Catalogs": "Populaire catalogi",
|
||||
"Add": "Toevoegen",
|
||||
"Add OPDS Catalog": "OPDS-catalogus toevoegen",
|
||||
"Catalog Name": "Catalogusnaam",
|
||||
"My Calibre Library": "Mijn Calibre-bibliotheek",
|
||||
"OPDS URL": "OPDS-URL",
|
||||
"Username (optional)": "Gebruikersnaam (optioneel)",
|
||||
"Password (optional)": "Wachtwoord (optioneel)",
|
||||
"Description (optional)": "Beschrijving (optioneel)",
|
||||
"A brief description of this catalog": "Een korte beschrijving van deze catalogus",
|
||||
"Validating...": "Valideren...",
|
||||
"View All": "Alles bekijken",
|
||||
"Forward": "Verder",
|
||||
"Home": "Startpagina",
|
||||
"{{count}} items_one": "{{count}} item",
|
||||
"{{count}} items_other": "{{count}} items",
|
||||
"Download completed": "Download voltooid",
|
||||
"Download failed": "Download mislukt",
|
||||
"Open Access": "Open toegang",
|
||||
"Borrow": "Lenen",
|
||||
"Buy": "Kopen",
|
||||
"Subscribe": "Abonneren",
|
||||
"Sample": "Voorbeeld",
|
||||
"Download": "Downloaden",
|
||||
"Open & Read": "Openen & Lezen",
|
||||
"Tags": "Tags",
|
||||
"Tag": "Tag",
|
||||
"First": "Eerste",
|
||||
"Previous": "Vorige",
|
||||
"Next": "Volgende",
|
||||
"Last": "Laatste",
|
||||
"Cannot Load Page": "Pagina kan niet worden geladen",
|
||||
"An error occurred": "Er is een fout opgetreden",
|
||||
"Online Library": "Online Bibliotheek",
|
||||
"URL must start with http:// or https://": "URL moet beginnen met http:// of https://",
|
||||
"Title, Author, Tag, etc...": "Titel, Auteur, Tag, enzovoort...",
|
||||
"Query": "Zoekopdracht",
|
||||
"Subject": "Onderwerp",
|
||||
"Enter {{terms}}": "Voer {{terms}} in",
|
||||
"No search results found": "Geen zoekresultaten gevonden",
|
||||
"Failed to load OPDS feed: {{status}} {{statusText}}": "Het laden van de OPDS-feed is mislukt: {{status}} {{statusText}}",
|
||||
"Search in {{title}}": "Zoeken in {{title}}",
|
||||
"Manage Storage": "Opslag beheren",
|
||||
"Failed to load files": "Bestanden laden mislukt",
|
||||
"Deleted {{count}} file(s)_one": "{{count}} bestand verwijderd",
|
||||
"Deleted {{count}} file(s)_other": "{{count}} bestanden verwijderd",
|
||||
"Failed to delete {{count}} file(s)_one": "Kon {{count}} bestand niet verwijderen",
|
||||
"Failed to delete {{count}} file(s)_other": "Kon {{count}} bestanden niet verwijderen",
|
||||
"Failed to delete files": "Bestanden verwijderen mislukt",
|
||||
"Total Files": "Totaal aantal bestanden",
|
||||
"Total Size": "Totale grootte",
|
||||
"Quota": "Quota",
|
||||
"Used": "Gebruikt",
|
||||
"Files": "Bestanden",
|
||||
"Search files...": "Bestanden zoeken...",
|
||||
"Newest First": "Nieuwste eerst",
|
||||
"Oldest First": "Oudste eerst",
|
||||
"Largest First": "Grootste eerst",
|
||||
"Smallest First": "Kleinste eerst",
|
||||
"Name A-Z": "Naam A-Z",
|
||||
"Name Z-A": "Naam Z-A",
|
||||
"{{count}} selected_one": "{{count}} geselecteerd",
|
||||
"{{count}} selected_other": "{{count}} geselecteerd",
|
||||
"Delete Selected": "Verwijder geselecteerde",
|
||||
"Created": "Gemaakt",
|
||||
"No files found": "Geen bestanden gevonden",
|
||||
"No files uploaded yet": "Nog geen bestanden geüpload",
|
||||
"files": "bestanden",
|
||||
"Page {{current}} of {{total}}": "Pagina {{current}} van {{total}}",
|
||||
"Are you sure to delete {{count}} selected file(s)?_one": "Weet je zeker dat je {{count}} geselecteerd bestand wilt verwijderen?",
|
||||
"Are you sure to delete {{count}} selected file(s)?_other": "Weet je zeker dat je {{count}} geselecteerde bestanden wilt verwijderen?",
|
||||
"Cloud Storage Usage": "Cloudopslaggebruik",
|
||||
"Rename Group": "Groep hernoemen",
|
||||
"From Directory": "Vanuit map",
|
||||
"Successfully imported {{count}} book(s)_one": "Succesvol 1 boek geïmporteerd",
|
||||
"Successfully imported {{count}} book(s)_other": "Succesvol {{count}} boeken geïmporteerd",
|
||||
"Count": "Aantal",
|
||||
"Start Page": "Startpagina",
|
||||
"Search in OPDS Catalog...": "Zoeken in OPDS-catalogus...",
|
||||
"Please log in to use advanced TTS features": "Log in om geavanceerde TTS-functies te gebruiken",
|
||||
"Word limit of 30 words exceeded.": "De limiet van 30 woorden is overschreden.",
|
||||
"Proofread": "Correctie",
|
||||
"Current selection": "Huidige selectie",
|
||||
"All occurrences in this book": "Alle voorkomens in dit boek",
|
||||
"All occurrences in your library": "Alle voorkomens in je bibliotheek",
|
||||
"Selected text:": "Geselecteerde tekst:",
|
||||
"Replace with:": "Vervangen door:",
|
||||
"Enter text...": "Tekst invoeren…",
|
||||
"Case sensitive:": "Hoofdlettergevoelig:",
|
||||
"Scope:": "Bereik:",
|
||||
"Selection": "Selectie",
|
||||
"Library": "Bibliotheek",
|
||||
"Yes": "Ja",
|
||||
"No": "Nee",
|
||||
"Proofread Replacement Rules": "Correctie-vervangingsregels",
|
||||
"Selected Text Rules": "Regels voor geselecteerde tekst",
|
||||
"No selected text replacement rules": "Geen vervangingsregels voor geselecteerde tekst",
|
||||
"Book Specific Rules": "Boekspecifieke regels",
|
||||
"No book-level replacement rules": "Geen vervangingsregels op boekniveau",
|
||||
"Disable Quick Action": "Snelle actie uitschakelen",
|
||||
"Enable Quick Action on Selection": "Snelle actie bij selectie inschakelen",
|
||||
"None": "Geen",
|
||||
"Annotation Tools": "Annotatiehulpmiddelen",
|
||||
"Enable Quick Actions": "Snelle acties inschakelen",
|
||||
"Quick Action": "Snelle actie",
|
||||
"Copy to Notebook": "Kopiëren naar notitieboek",
|
||||
"Copy text after selection": "Kopieer tekst na selectie",
|
||||
"Highlight text after selection": "Markeer tekst na selectie",
|
||||
"Annotate text after selection": "Annoteren tekst na selectie",
|
||||
"Search text after selection": "Zoek tekst na selectie",
|
||||
"Look up text in dictionary after selection": "Zoek tekst op in woordenboek na selectie",
|
||||
"Look up text in Wikipedia after selection": "Zoek tekst op in Wikipedia na selectie",
|
||||
"Translate text after selection": "Vertaal tekst na selectie",
|
||||
"Read text aloud after selection": "Lees tekst hardop na selectie",
|
||||
"Proofread text after selection": "Corrigeer tekst na selectie",
|
||||
"{{activeCount}} active, {{pendingCount}} pending": "{{activeCount}} actief, {{pendingCount}} wachtend",
|
||||
"{{failedCount}} failed": "{{failedCount}} mislukt",
|
||||
"Waiting...": "Wachten...",
|
||||
"Failed": "Mislukt",
|
||||
"Completed": "Voltooid",
|
||||
"Cancelled": "Geannuleerd",
|
||||
"Retry": "Opnieuw proberen",
|
||||
"Active": "Actief",
|
||||
"Transfer Queue": "Overdrachtwachtrij",
|
||||
"Upload All": "Alles uploaden",
|
||||
"Download All": "Alles downloaden",
|
||||
"Resume Transfers": "Overdrachten hervatten",
|
||||
"Pause Transfers": "Overdrachten pauzeren",
|
||||
"Pending": "Wachtend",
|
||||
"No transfers": "Geen overdrachten",
|
||||
"Retry All": "Alles opnieuw proberen",
|
||||
"Clear Completed": "Voltooide wissen",
|
||||
"Clear Failed": "Mislukte wissen",
|
||||
"Upload queued: {{title}}": "Upload in wachtrij: {{title}}",
|
||||
"Download queued: {{title}}": "Download in wachtrij: {{title}}",
|
||||
"Book not found in library": "Boek niet gevonden in bibliotheek",
|
||||
"Unknown error": "Onbekende fout",
|
||||
"Please log in to continue": "Log in om door te gaan",
|
||||
"Cloud File Transfers": "Cloud Bestandoverdrachten",
|
||||
"Show Search Results": "Zoekresultaten tonen",
|
||||
"Search results for '{{term}}'": "Resultaten voor '{{term}}'",
|
||||
"Close Search": "Zoekopdracht sluiten",
|
||||
"Previous Result": "Vorig resultaat",
|
||||
"Next Result": "Volgend resultaat",
|
||||
"Bookmarks": "Bladwijzers",
|
||||
"Annotations": "Aantekeningen",
|
||||
"Show Results": "Resultaten tonen",
|
||||
"Clear search": "Zoekopdracht wissen",
|
||||
"Clear search history": "Zoekgeschiedenis wissen",
|
||||
"Tap to Toggle Footer": "Tik om voettekst te wisselen",
|
||||
"Show Current Time": "Huidige tijd weergeven",
|
||||
"Use 24 Hour Clock": "24-uurs klok gebruike",
|
||||
"Show Current Battery Status": "Toon huidige batterijstatus",
|
||||
"Exported successfully": "Succesvol geëxporteerd",
|
||||
"Book exported successfully.": "Boek succesvol geëxporteerd.",
|
||||
"Failed to export the book.": "Exporteren van het boek mislukt.",
|
||||
"Export Book": "Boek exporteren",
|
||||
"Whole word:": "Heel woord:",
|
||||
"Error": "Fout",
|
||||
"Unable to load the article. Try searching directly on {{link}}.": "Kan het artikel niet laden. Probeer direct te zoeken op {{link}}.",
|
||||
"Unable to load the word. Try searching directly on {{link}}.": "Kan het woord niet laden. Probeer direct te zoeken op {{link}}.",
|
||||
"Date Published": "Publicatiedatum",
|
||||
"Only for TTS:": "Alleen voor TTS:",
|
||||
"Uploaded": "Geüpload",
|
||||
"Downloaded": "Gedownload",
|
||||
"Deleted": "Verwijderd",
|
||||
"Note:": "Notitie:",
|
||||
"Time:": "Tijd:",
|
||||
"Format Options": "Formaatopties",
|
||||
"Export Date": "Exportdatum",
|
||||
"Chapter Titles": "Hoofdstuktitels",
|
||||
"Chapter Separator": "Hoofdstukscheiding",
|
||||
"Highlights": "Markeringen",
|
||||
"Note Date": "Notitiedatum",
|
||||
"Advanced": "Geavanceerd",
|
||||
"Hide": "Verbergen",
|
||||
"Show": "Tonen",
|
||||
"Use Custom Template": "Aangepast sjabloon gebruiken",
|
||||
"Export Template": "Exportsjabloon",
|
||||
"Template Syntax:": "Sjabloonsyntaxis:",
|
||||
"Insert value": "Waarde invoegen",
|
||||
"Format date (locale)": "Datum opmaken (lokaal)",
|
||||
"Format date (custom)": "Datum opmaken (aangepast)",
|
||||
"Conditional": "Voorwaardelijk",
|
||||
"Loop": "Lus",
|
||||
"Available Variables:": "Beschikbare variabelen:",
|
||||
"Book title": "Boektitel",
|
||||
"Book author": "Boekauteur",
|
||||
"Export date": "Exportdatum",
|
||||
"Array of chapters": "Reeks hoofdstukken",
|
||||
"Chapter title": "Hoofdstuktitel",
|
||||
"Array of annotations": "Reeks annotaties",
|
||||
"Highlighted text": "Gemarkeerde tekst",
|
||||
"Annotation note": "Annotatienotitie",
|
||||
"Date Format Tokens:": "Datumformaattokens:",
|
||||
"Year (4 digits)": "Jaar (4 cijfers)",
|
||||
"Month (01-12)": "Maand (01-12)",
|
||||
"Day (01-31)": "Dag (01-31)",
|
||||
"Hour (00-23)": "Uur (00-23)",
|
||||
"Minute (00-59)": "Minuut (00-59)",
|
||||
"Second (00-59)": "Seconde (00-59)",
|
||||
"Show Source": "Bron tonen",
|
||||
"No content to preview": "Geen inhoud om te bekijken",
|
||||
"Export": "Exporteren",
|
||||
"Set Timeout": "Time-out instellen",
|
||||
"Select Voice": "Stem selecteren",
|
||||
"Toggle Sticky Bottom TTS Bar": "Vaste TTS-balk schakelen",
|
||||
"Display what I'm reading on Discord": "Toon wat ik lees op Discord",
|
||||
"Show on Discord": "Toon op Discord",
|
||||
"Instant {{action}}": "Directe {{action}}",
|
||||
"Instant {{action}} Disabled": "Directe {{action}} uitgeschakeld",
|
||||
"Annotation": "Annotatie",
|
||||
"Reset Template": "Sjabloon resetten",
|
||||
"Annotation style": "Annotatiestijl",
|
||||
"Annotation color": "Annotatiekleur",
|
||||
"Annotation time": "Annotatietijd",
|
||||
"AI": "AI",
|
||||
"Are you sure you want to re-index this book?": "Weet u zeker dat u dit boek opnieuw wilt indexeren?",
|
||||
"Enable AI in Settings": "AI inschakelen in Instellingen",
|
||||
"Index This Book": "Dit boek indexeren",
|
||||
"Enable AI search and chat for this book": "AI-zoeken en chat voor dit boek inschakelen",
|
||||
"Start Indexing": "Indexeren starten",
|
||||
"Indexing book...": "Boek wordt geïndexeerd...",
|
||||
"Preparing...": "Voorbereiden...",
|
||||
"Delete this conversation?": "Dit gesprek verwijderen?",
|
||||
"No conversations yet": "Nog geen gesprekken",
|
||||
"Start a new chat to ask questions about this book": "Start een nieuwe chat om vragen te stellen over dit boek",
|
||||
"Rename": "Hernoemen",
|
||||
"New Chat": "Nieuwe chat",
|
||||
"Chat": "Chat",
|
||||
"Please enter a model ID": "Voer een model-ID in",
|
||||
"Model not available or invalid": "Model niet beschikbaar of ongeldig",
|
||||
"Failed to validate model": "Model valideren mislukt",
|
||||
"Couldn't connect to Ollama. Is it running?": "Kon geen verbinding maken met Ollama. Is het actief?",
|
||||
"Invalid API key or connection failed": "Ongeldige API-sleutel of verbinding mislukt",
|
||||
"Connection failed": "Verbinding mislukt",
|
||||
"AI Assistant": "AI-assistent",
|
||||
"Enable AI Assistant": "AI-assistent inschakelen",
|
||||
"Provider": "Provider",
|
||||
"Ollama (Local)": "Ollama (Lokaal)",
|
||||
"AI Gateway (Cloud)": "AI-gateway (Cloud)",
|
||||
"Ollama Configuration": "Ollama-configuratie",
|
||||
"Refresh Models": "Modellen vernieuwen",
|
||||
"AI Model": "AI-model",
|
||||
"No models detected": "Geen modellen gedetecteerd",
|
||||
"AI Gateway Configuration": "AI-gateway configuratie",
|
||||
"Choose from a selection of high-quality, economical AI models. You can also bring your own model by selecting \"Custom Model\" below.": "Kies uit een selectie van hoogwaardige, voordelige AI-modellen. U kunt ook uw eigen model gebruiken door hieronder \"Aangepast model\" te selecteren.",
|
||||
"API Key": "API-sleutel",
|
||||
"Get Key": "Sleutel ophalen",
|
||||
"Model": "Model",
|
||||
"Custom Model...": "Aangepast model...",
|
||||
"Custom Model ID": "Aangepast model-ID",
|
||||
"Validate": "Valideren",
|
||||
"Model available": "Model beschikbaar",
|
||||
"Connection": "Verbinding",
|
||||
"Test Connection": "Verbinding testen",
|
||||
"Connected": "Verbonden",
|
||||
"Custom Colors": "Aangepaste kleuren",
|
||||
"Color E-Ink Mode": "Kleur E-Ink modus",
|
||||
"Reading Ruler": "Leesliniaal",
|
||||
"Enable Reading Ruler": "Leesliniaal inschakelen",
|
||||
"Lines to Highlight": "Regels om te markeren",
|
||||
"Ruler Color": "Kleur van liniaal",
|
||||
"Command Palette": "Opdrachtenpalet",
|
||||
"Search settings and actions...": "Zoek instellingen en acties...",
|
||||
"No results found for": "Geen resultaten gevonden voor",
|
||||
"Type to search settings and actions": "Typ om instellingen en acties te zoeken",
|
||||
"Recent": "Recent",
|
||||
"navigate": "navigeren",
|
||||
"select": "selecteren",
|
||||
"close": "sluiten",
|
||||
"Search Settings": "Instellingen zoeken",
|
||||
"Page Margins": "Paginamarges",
|
||||
"AI Provider": "AI-provider",
|
||||
"Ollama URL": "Ollama-URL",
|
||||
"Ollama Model": "Ollama-model",
|
||||
"AI Gateway Model": "AI Gateway-model",
|
||||
"Actions": "Acties",
|
||||
"Navigation": "Navigatie",
|
||||
"Set status for {{count}} book(s)_one": "Stel status in voor {{count}} boek",
|
||||
"Set status for {{count}} book(s)_other": "Stel status in voor {{count}} boeken",
|
||||
"Mark as Unread": "Markeren als ongelezen",
|
||||
"Mark as Finished": "Markeren als voltooid",
|
||||
"Finished": "Voltooid",
|
||||
"Unread": "Ongelezen",
|
||||
"Clear Status": "Status wissen",
|
||||
"Status": "Status",
|
||||
"Loading": "Laden...",
|
||||
"Exit Paragraph Mode": "Alineamodus verlaten",
|
||||
"Paragraph Mode": "Alineamodus",
|
||||
"Embedding Model": "Insluitmodel",
|
||||
"{{count}} book(s) synced_one": "{{count}} boek gesynchroniseerd",
|
||||
"{{count}} book(s) synced_other": "{{count}} boeken gesynchroniseerd",
|
||||
"Unable to start RSVP": "Kan RSVP niet starten",
|
||||
"RSVP not supported for PDF": "RSVP niet ondersteund voor PDF",
|
||||
"Select Chapter": "Hoofdstuk selecteren",
|
||||
"Context": "Context",
|
||||
"Ready": "Klaar",
|
||||
"Chapter Progress": "Hoofdstukvoortgang",
|
||||
"words": "woorden",
|
||||
"{{time}} left": "{{time}} over",
|
||||
"Reading progress": "Leesvoortgang",
|
||||
"Click to seek": "Klik om te zoeken",
|
||||
"Skip back 15 words": "15 woorden terug",
|
||||
"Back 15 words (Shift+Left)": "15 woorden terug (Shift+Links)",
|
||||
"Pause (Space)": "Pauze (Spatie)",
|
||||
"Play (Space)": "Afspelen (Spatie)",
|
||||
"Skip forward 15 words": "15 woorden vooruit",
|
||||
"Forward 15 words (Shift+Right)": "15 woorden vooruit (Shift+Rechts)",
|
||||
"Decrease speed": "Snelheid verlagen",
|
||||
"Slower (Left/Down)": "Langzamer (Links/Omlaag)",
|
||||
"Increase speed": "Snelheid verhogen",
|
||||
"Faster (Right/Up)": "Sneller (Rechts/Omhoog)",
|
||||
"Start RSVP Reading": "Start RSVP-lezen",
|
||||
"Choose where to start reading": "Kies waar u wilt beginnen met lezen",
|
||||
"From Chapter Start": "Vanaf begin hoofdstuk",
|
||||
"Start reading from the beginning of the chapter": "Begin met lezen aan het begin van het hoofdstuk",
|
||||
"Resume": "Hervatten",
|
||||
"Continue from where you left off": "Ga verder waar u was gebleven",
|
||||
"From Current Page": "Vanaf huidige pagina",
|
||||
"Start from where you are currently reading": "Begin waar u momenteel leest",
|
||||
"From Selection": "Vanaf selectie",
|
||||
"Speed Reading Mode": "Snelle leesmodus",
|
||||
"Scroll left": "Naar links scrollen",
|
||||
"Scroll right": "Naar rechts scrollen",
|
||||
"Library Sync Progress": "Voortgang bibliotheeksynchronisatie",
|
||||
"Back to library": "Terug naar bibliotheek",
|
||||
"Group by...": "Groeperen op...",
|
||||
"Export as Plain Text": "Exporteren als platte tekst",
|
||||
"Export as Markdown": "Exporteren als Markdown",
|
||||
"Show Page Navigation Buttons": "Navigatieknoppen",
|
||||
"Page {{number}}": "Pagina {{number}}",
|
||||
"highlight": "markering",
|
||||
"underline": "onderstreping",
|
||||
"squiggly": "gegolfd",
|
||||
"red": "rood",
|
||||
"violet": "paars",
|
||||
"blue": "blauw",
|
||||
"green": "groen",
|
||||
"yellow": "geel",
|
||||
"Select {{style}} style": "Selecteer {{style}} stijl",
|
||||
"Select {{color}} color": "Selecteer {{color}} kleur",
|
||||
"Close Book": "Boek sluiten",
|
||||
"Speed Reading": "Snel lezen",
|
||||
"Close Speed Reading": "Snel lezen sluiten",
|
||||
"Authors": "Auteurs",
|
||||
"Books": "Boeken",
|
||||
"Groups": "Groepen",
|
||||
"Back to TTS Location": "Terug naar TTS-locatie",
|
||||
"Metadata": "Metadata",
|
||||
"Image viewer": "Afbeeldingenviewer",
|
||||
"Previous Image": "Vorige afbeelding",
|
||||
"Next Image": "Volgende afbeelding",
|
||||
"Zoomed": "Gezoomd",
|
||||
"Zoom level": "Zoomniveau",
|
||||
"Table viewer": "Tabelviewer",
|
||||
"Unable to connect to Readwise. Please check your network connection.": "Kan geen verbinding maken met Readwise. Controleer uw netwerkverbinding.",
|
||||
"Invalid Readwise access token": "Ongeldige Readwise-toegangstoken",
|
||||
"Disconnected from Readwise": "Verbinding met Readwise verbroken",
|
||||
"Never": "Nooit",
|
||||
"Readwise Settings": "Readwise-instellingen",
|
||||
"Connected to Readwise": "Verbonden met Readwise",
|
||||
"Last synced: {{time}}": "Laatst gesynchroniseerd: {{time}}",
|
||||
"Sync Enabled": "Synchronisatie ingeschakeld",
|
||||
"Disconnect": "Verbinding verbreken",
|
||||
"Connect your Readwise account to sync highlights.": "Verbind uw Readwise-account om markeringen te synchroniseren.",
|
||||
"Get your access token at": "Verkrijg uw toegangstoken op",
|
||||
"Access Token": "Toegangstoken",
|
||||
"Paste your Readwise access token": "Plak uw Readwise-toegangstoken",
|
||||
"Config": "Configuratie",
|
||||
"Readwise Sync": "Readwise-synchronisatie",
|
||||
"Push Highlights": "Markeringen verzenden",
|
||||
"Highlights synced to Readwise": "Markeringen gesynchroniseerd met Readwise",
|
||||
"Readwise sync failed: no internet connection": "Readwise-synchronisatie mislukt: geen internetverbinding",
|
||||
"Readwise sync failed: {{error}}": "Readwise-synchronisatie mislukt: {{error}}",
|
||||
"System Screen Brightness": "Systeemhelderheid van het scherm",
|
||||
"Page:": "Pagina:",
|
||||
"Page: {{number}}": "Pagina: {{number}}",
|
||||
"Annotation page number": "Annotatiepaginanummer",
|
||||
"Translating...": "Vertalen...",
|
||||
"Show Battery Percentage": "Batterijpercentage weergeven",
|
||||
"Hide Scrollbar": "Schuifbalk verbergen",
|
||||
"Skip to last reading position": "Ga naar laatste leespositie",
|
||||
"Show context": "Context tonen",
|
||||
"Hide context": "Context verbergen",
|
||||
"Decrease font size": "Lettergrootte verkleinen",
|
||||
"Increase font size": "Lettergrootte vergroten",
|
||||
"Focus": "Focus",
|
||||
"Theme color": "Themakleur",
|
||||
"Import failed": "Import mislukt",
|
||||
"Available Formatters:": "Beschikbare opmaak:",
|
||||
"Format date": "Datum opmaken",
|
||||
"Markdown block quote (> per line)": "Markdown-blokcitaat (> per regel)",
|
||||
"Newlines to <br>": "Regeleinden naar <br>",
|
||||
"Change case": "Hoofdlettergebruik wijzigen",
|
||||
"Trim whitespace": "Witruimte verwijderen",
|
||||
"Truncate to n characters": "Inkorten tot n tekens",
|
||||
"Replace text": "Tekst vervangen",
|
||||
"Fallback value": "Terugvalwaarde",
|
||||
"Get length": "Lengte ophalen",
|
||||
"First/last element": "Eerste/laatste element",
|
||||
"Join array": "Array samenvoegen",
|
||||
"Backup failed: {{error}}": "Back-up mislukt: {{error}}",
|
||||
"Select Backup": "Selecteer back-up",
|
||||
"Restore failed: {{error}}": "Herstel mislukt: {{error}}",
|
||||
"Backup & Restore": "Back-up & Herstel",
|
||||
"Create a backup of your library or restore from a previous backup. Restoring will merge with your current library.": "Maak een back-up van uw bibliotheek of herstel vanuit een eerdere back-up. Herstel wordt samengevoegd met uw huidige bibliotheek.",
|
||||
"Backup Library": "Bibliotheek back-uppen",
|
||||
"Restore Library": "Bibliotheek herstellen",
|
||||
"Creating backup...": "Back-up maken...",
|
||||
"Restoring library...": "Bibliotheek herstellen...",
|
||||
"{{current}} of {{total}} items": "{{current}} van {{total}} items",
|
||||
"Backup completed successfully!": "Back-up succesvol voltooid!",
|
||||
"Restore completed successfully!": "Herstel succesvol voltooid!",
|
||||
"Your library has been saved to the selected location.": "Uw bibliotheek is opgeslagen op de geselecteerde locatie.",
|
||||
"{{added}} books added, {{updated}} books updated.": "{{added}} boeken toegevoegd, {{updated}} boeken bijgewerkt.",
|
||||
"Operation failed": "Bewerking mislukt",
|
||||
"Loading library...": "Bibliotheek laden...",
|
||||
"{{count}} books refreshed_one": "{{count}} boek vernieuwd",
|
||||
"{{count}} books refreshed_other": "{{count}} boeken vernieuwd",
|
||||
"Failed to refresh metadata": "Metadata vernieuwen mislukt",
|
||||
"Refresh Metadata": "Metadata vernieuwen"
|
||||
}
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
"Auto Mode": "Tryb automatyczny",
|
||||
"Behavior": "Zachowanie",
|
||||
"Book": "Książka",
|
||||
"Book Cover": "Okładka książki",
|
||||
"Bookmark": "Zakładka",
|
||||
"Cancel": "Anuluj",
|
||||
"Chapter": "Rozdział",
|
||||
@@ -107,7 +106,6 @@
|
||||
"Wikipedia": "Wikipedia",
|
||||
"Writing Mode": "Tryb pisania",
|
||||
"Your Library": "Twoja biblioteka",
|
||||
"TTS not supported for PDF": "TTS nie jest obsługiwane dla plików PDF",
|
||||
"Override Book Font": "Nadpisz czcionkę książki",
|
||||
"Apply to All Books": "Zastosuj do wszystkich książek",
|
||||
"Apply to This Book": "Zastosuj do tej książki",
|
||||
@@ -174,9 +172,6 @@
|
||||
"Token": "Token",
|
||||
"Your OTP token": "Twój OTP token",
|
||||
"Verify token": "Weryfikacja tokena",
|
||||
"Sign in with Google": "Zaloguj się za pomocą Google",
|
||||
"Sign in with Apple": "Zaloguj się za pomocą Apple",
|
||||
"Sign in with GitHub": "Zaloguj się za pomocą GitHub",
|
||||
"Account": "Konto",
|
||||
"Failed to delete user. Please try again later.": "Nie udało się usunąć użytkownika. Spróbuj ponownie później.",
|
||||
"Community Support": "Wsparcie społeczności",
|
||||
@@ -194,7 +189,7 @@
|
||||
"No supported files found. Supported formats: {{formats}}": "Nie znaleziono obsługiwanych plików. Obsługiwane formaty: {{formats}}",
|
||||
"Drop to Import Books": "Upuść, aby zaimportować książki",
|
||||
"Custom": "Niestandardowy",
|
||||
"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": "Cały świat jest sceną,\nA wszyscy mężczyźni i kobiety są tylko aktorami;\nMają swoje wyjścia i wejścia,\nI jeden człowiek w swoim czasie gra wiele ról,\nJego czyny to siedem wieków.\n\n— William Shakespeare",
|
||||
"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": "Cały świat jest sceną,\nA wszyscy mężczyźni i kobiety są tylko aktorami;\nMają swoje wyjścia i wejścia,\nI jeden człowiek w swoim czasie gra wiele ról,\nJego czyny to siedem wieków.\n\n— William Shakespeare",
|
||||
"Custom Theme": "Niestandardowy motyw",
|
||||
"Theme Name": "Nazwa motywu",
|
||||
"Text Color": "Kolor tekstu",
|
||||
@@ -345,13 +340,13 @@
|
||||
"Fit": "Pasuje",
|
||||
"Reset {{settings}}": "Zresetuj {{settings}}",
|
||||
"Reset Settings": "Zresetuj ustawienia",
|
||||
"{{count}} pages left in chapter_one": "Pozostała {{count}} strona w rozdziale",
|
||||
"{{count}} pages left in chapter_few": "Pozostały {{count}} strony w rozdziale",
|
||||
"{{count}} pages left in chapter_many": "Pozostało {{count}} stron w rozdziale",
|
||||
"{{count}} pages left in chapter_other": "Pozostało {{count}} stron w rozdziale",
|
||||
"{{count}} pages left in chapter_one": "<1>Pozostała </1><0>{{count}}</0><1> strona w rozdziale</1>",
|
||||
"{{count}} pages left in chapter_few": "<1>Pozostały </1><0>{{count}}</0><1> strony w rozdziale</1>",
|
||||
"{{count}} pages left in chapter_many": "<1>Pozostało </1><0>{{count}}</0><1> stron w rozdziale</1>",
|
||||
"{{count}} pages left in chapter_other": "<1>Pozostało </1><0>{{count}}</0><1> stron w rozdziale</1>",
|
||||
"Show Remaining Pages": "Pokaż pozostałe strony",
|
||||
"Source Han Serif CN VF": "Source Han Serif",
|
||||
"Huiwen-mincho": "Huiwen Mincho",
|
||||
"Source Han Serif CN": "Source Han Serif",
|
||||
"Huiwen-MinchoGBK": "Huiwen Mincho",
|
||||
"KingHwa_OldSong": "KingHwa Song",
|
||||
"Manage Subscription": "Zarządzaj subskrypcją",
|
||||
"Coming Soon": "Wkrótce dostępne",
|
||||
@@ -611,11 +606,10 @@
|
||||
"Size": "Rozmiar",
|
||||
"Cover": "Okładka",
|
||||
"Contain": "Zawierać",
|
||||
"{{number}} pages left in chapter": "Pozostało {{number}} stron w rozdziale",
|
||||
"{{number}} pages left in chapter": "<1>Pozostało </1><0>{{number}}</0><1> stron w rozdziale</1>",
|
||||
"Device": "Urządzenie",
|
||||
"E-Ink Mode": "Tryb E-Ink",
|
||||
"Highlight Colors": "Kolory wyróżnień",
|
||||
"Auto Screen Brightness": "Automatyczna jasność ekranu",
|
||||
"Pagination": "Stronicowanie",
|
||||
"Disable Double Tap": "Wyłącz podwójne dotknięcie",
|
||||
"Tap to Paginate": "Dotknij, aby stronicować",
|
||||
@@ -664,5 +658,475 @@
|
||||
"Update email": "Zaktualizuj e-mail",
|
||||
"Current email": "Obecny e-mail",
|
||||
"Update Email": "Zaktualizuj e-mail",
|
||||
"All": "Wszystkie"
|
||||
"All": "Wszystkie",
|
||||
"Unable to open book": "Nie można otworzyć książki",
|
||||
"Punctuation": "Interpunkcja",
|
||||
"Replace Quotation Marks": "Zamień cudzysłowy",
|
||||
"Enabled only in vertical layout.": "Włączone tylko w układzie pionowym.",
|
||||
"No Conversion": "Brak konwersji",
|
||||
"Simplified to Traditional": "Uproszczony → Tradycyjny",
|
||||
"Traditional to Simplified": "Tradycyjny → Uproszczony",
|
||||
"Simplified to Traditional (Taiwan)": "Uproszczony → Tradycyjny (Tajwan)",
|
||||
"Simplified to Traditional (Hong Kong)": "Uproszczony → Tradycyjny (Hongkong)",
|
||||
"Simplified to Traditional (Taiwan), with phrases": "Uproszczony → Tradycyjny (Tajwan • frazy)",
|
||||
"Traditional (Taiwan) to Simplified": "Tradycyjny (Tajwan) → Uproszczony",
|
||||
"Traditional (Hong Kong) to Simplified": "Tradycyjny (Hongkong) → Uproszczony",
|
||||
"Traditional (Taiwan) to Simplified, with phrases": "Tradycyjny (Tajwan • frazy) → Uproszczony",
|
||||
"Convert Simplified and Traditional Chinese": "Konwertuj chiński uproszczony/tradycyjny",
|
||||
"Convert Mode": "Tryb konwersji",
|
||||
"Failed to auto-save book cover for lock screen: {{error}}": "Nie udało się automatycznie zapisać okładki książki dla ekranu blokady: {{error}}",
|
||||
"Download from Cloud": "Pobierz z chmury",
|
||||
"Upload to Cloud": "Prześlij do chmury",
|
||||
"Clear Custom Fonts": "Wyczyść niestandardowe czcionki",
|
||||
"Columns": "Kolumny",
|
||||
"OPDS Catalogs": "Katalogi OPDS",
|
||||
"Adding LAN addresses is not supported in the web app version.": "Dodawanie adresów LAN nie jest obsługiwane w wersji webowej.",
|
||||
"Invalid OPDS catalog. Please check the URL.": "Nieprawidłowy katalog OPDS. Sprawdź URL.",
|
||||
"Browse and download books from online catalogs": "Przeglądaj i pobieraj książki z katalogów online",
|
||||
"My Catalogs": "Moje katalogi",
|
||||
"Add Catalog": "Dodaj katalog",
|
||||
"No catalogs yet": "Brak katalogów",
|
||||
"Add your first OPDS catalog to start browsing books": "Dodaj pierwszy katalog OPDS, aby rozpocząć przeglądanie książek",
|
||||
"Add Your First Catalog": "Dodaj pierwszy katalog",
|
||||
"Browse": "Przeglądaj",
|
||||
"Popular Catalogs": "Popularne katalogi",
|
||||
"Add": "Dodaj",
|
||||
"Add OPDS Catalog": "Dodaj katalog OPDS",
|
||||
"Catalog Name": "Nazwa katalogu",
|
||||
"My Calibre Library": "Moja biblioteka Calibre",
|
||||
"OPDS URL": "URL OPDS",
|
||||
"Username (optional)": "Nazwa użytkownika (opcjonalnie)",
|
||||
"Password (optional)": "Hasło (opcjonalnie)",
|
||||
"Description (optional)": "Opis (opcjonalnie)",
|
||||
"A brief description of this catalog": "Krótki opis katalogu",
|
||||
"Validating...": "Weryfikacja...",
|
||||
"View All": "Pokaż wszystkie",
|
||||
"Forward": "Dalej",
|
||||
"Home": "Strona główna",
|
||||
"{{count}} items_one": "{{count}} element",
|
||||
"{{count}} items_few": "{{count}} elementy",
|
||||
"{{count}} items_many": "{{count}} elementów",
|
||||
"{{count}} items_other": "{{count}} elementu",
|
||||
"Download completed": "Pobieranie zakończone",
|
||||
"Download failed": "Pobieranie nie powiodło się",
|
||||
"Open Access": "Dostęp otwarty",
|
||||
"Borrow": "Wypożycz",
|
||||
"Buy": "Kup",
|
||||
"Subscribe": "Subskrybuj",
|
||||
"Sample": "Próbka",
|
||||
"Download": "Pobierz",
|
||||
"Open & Read": "Otwórz i czytaj",
|
||||
"Tags": "Tagi",
|
||||
"Tag": "Tag",
|
||||
"First": "Pierwsza",
|
||||
"Previous": "Poprzednia",
|
||||
"Next": "Następna",
|
||||
"Last": "Ostatnia",
|
||||
"Cannot Load Page": "Nie można załadować strony",
|
||||
"An error occurred": "Wystąpił błąd",
|
||||
"Online Library": "Biblioteka online",
|
||||
"URL must start with http:// or https://": "URL musi zaczynać się od http:// lub https://",
|
||||
"Title, Author, Tag, etc...": "Tytuł, Autor, Tag, itp...",
|
||||
"Query": "Zapytanie",
|
||||
"Subject": "Temat",
|
||||
"Enter {{terms}}": "Wprowadź {{terms}}",
|
||||
"No search results found": "Nie znaleziono wyników wyszukiwania",
|
||||
"Failed to load OPDS feed: {{status}} {{statusText}}": "Nie udało się załadować kanału OPDS: {{status}} {{statusText}}",
|
||||
"Search in {{title}}": "Szukaj w {{title}}",
|
||||
"Manage Storage": "Zarządzaj pamięcią",
|
||||
"Failed to load files": "Nie udało się wczytać plików",
|
||||
"Deleted {{count}} file(s)_one": "Usunięto {{count}} plik",
|
||||
"Deleted {{count}} file(s)_few": "Usunięto {{count}} pliki",
|
||||
"Deleted {{count}} file(s)_many": "Usunięto {{count}} plików",
|
||||
"Deleted {{count}} file(s)_other": "Usunięto {{count}} pliku",
|
||||
"Failed to delete {{count}} file(s)_one": "Nie udało się usunąć {{count}} pliku",
|
||||
"Failed to delete {{count}} file(s)_few": "Nie udało się usunąć {{count}} plików",
|
||||
"Failed to delete {{count}} file(s)_many": "Nie udało się usunąć {{count}} plików",
|
||||
"Failed to delete {{count}} file(s)_other": "Nie udało się usunąć {{count}} pliku",
|
||||
"Failed to delete files": "Nie udało się usunąć plików",
|
||||
"Total Files": "Łączna liczba plików",
|
||||
"Total Size": "Łączny rozmiar",
|
||||
"Quota": "Limit",
|
||||
"Used": "Użyto",
|
||||
"Files": "Pliki",
|
||||
"Search files...": "Szukaj plików...",
|
||||
"Newest First": "Najnowsze najpierw",
|
||||
"Oldest First": "Najstarsze najpierw",
|
||||
"Largest First": "Największe najpierw",
|
||||
"Smallest First": "Najmniejsze najpierw",
|
||||
"Name A-Z": "Nazwa A-Z",
|
||||
"Name Z-A": "Nazwa Z-A",
|
||||
"{{count}} selected_one": "Wybrano {{count}} plik",
|
||||
"{{count}} selected_few": "Wybrano {{count}} pliki",
|
||||
"{{count}} selected_many": "Wybrano {{count}} plików",
|
||||
"{{count}} selected_other": "Wybrano {{count}} pliku",
|
||||
"Delete Selected": "Usuń wybrane",
|
||||
"Created": "Utworzono",
|
||||
"No files found": "Nie znaleziono plików",
|
||||
"No files uploaded yet": "Nie przesłano jeszcze żadnych plików",
|
||||
"files": "pliki",
|
||||
"Page {{current}} of {{total}}": "Strona {{current}} z {{total}}",
|
||||
"Are you sure to delete {{count}} selected file(s)?_one": "Czy na pewno chcesz usunąć {{count}} wybrany plik?",
|
||||
"Are you sure to delete {{count}} selected file(s)?_few": "Czy na pewno chcesz usunąć {{count}} wybrane pliki?",
|
||||
"Are you sure to delete {{count}} selected file(s)?_many": "Czy na pewno chcesz usunąć {{count}} wybranych plików?",
|
||||
"Are you sure to delete {{count}} selected file(s)?_other": "Czy na pewno chcesz usunąć {{count}} wybrany plik?",
|
||||
"Cloud Storage Usage": "Użycie pamięci w chmurze",
|
||||
"Rename Group": "Zmień nazwę grupy",
|
||||
"From Directory": "Z katalogu",
|
||||
"Successfully imported {{count}} book(s)_one": "Pomyślnie zaimportowano 1 książkę",
|
||||
"Successfully imported {{count}} book(s)_few": "Pomyślnie zaimportowano {{count}} książki",
|
||||
"Successfully imported {{count}} book(s)_many": "Pomyślnie zaimportowano {{count}} książek",
|
||||
"Successfully imported {{count}} book(s)_other": "Pomyślnie zaimportowano {{count}} książek",
|
||||
"Count": "Liczba",
|
||||
"Start Page": "Strona startowa",
|
||||
"Search in OPDS Catalog...": "Szukaj w katalogu OPDS...",
|
||||
"Please log in to use advanced TTS features": "Zaloguj się, aby korzystać z zaawansowanych funkcji TTS",
|
||||
"Word limit of 30 words exceeded.": "Przekroczono limit 30 słów.",
|
||||
"Proofread": "Korekta",
|
||||
"Current selection": "Bieżące zaznaczenie",
|
||||
"All occurrences in this book": "Wszystkie wystąpienia w tej książce",
|
||||
"All occurrences in your library": "Wszystkie wystąpienia w Twojej bibliotece",
|
||||
"Selected text:": "Zaznaczony tekst:",
|
||||
"Replace with:": "Zastąp przez:",
|
||||
"Enter text...": "Wpisz tekst…",
|
||||
"Case sensitive:": "Uwzględniaj wielkość liter:",
|
||||
"Scope:": "Zakres:",
|
||||
"Selection": "Zaznaczenie",
|
||||
"Library": "Biblioteka",
|
||||
"Yes": "Tak",
|
||||
"No": "Nie",
|
||||
"Proofread Replacement Rules": "Reguły zastępowania korekty",
|
||||
"Selected Text Rules": "Reguły dla zaznaczonego tekstu",
|
||||
"No selected text replacement rules": "Brak reguł zastępowania dla zaznaczonego tekstu",
|
||||
"Book Specific Rules": "Reguły specyficzne dla książki",
|
||||
"No book-level replacement rules": "Brak reguł zastępowania na poziomie książki",
|
||||
"Disable Quick Action": "Wyłącz szybką akcję",
|
||||
"Enable Quick Action on Selection": "Włącz szybką akcję przy zaznaczeniu",
|
||||
"None": "Brak",
|
||||
"Annotation Tools": "Narzędzia do adnotacji",
|
||||
"Enable Quick Actions": "Włącz szybkie akcje",
|
||||
"Quick Action": "Szybka akcja",
|
||||
"Copy to Notebook": "Kopiuj do notatnika",
|
||||
"Copy text after selection": "Kopiuj zaznaczony tekst",
|
||||
"Highlight text after selection": "Podświetl zaznaczony tekst",
|
||||
"Annotate text after selection": "Dodaj adnotację do zaznaczonego tekstu",
|
||||
"Search text after selection": "Wyszukaj zaznaczony tekst",
|
||||
"Look up text in dictionary after selection": "Sprawdź zaznaczony tekst w słowniku",
|
||||
"Look up text in Wikipedia after selection": "Sprawdź zaznaczony tekst w Wikipedii",
|
||||
"Translate text after selection": "Przetłumacz zaznaczony tekst",
|
||||
"Read text aloud after selection": "Odczytaj zaznaczony tekst na głos",
|
||||
"Proofread text after selection": "Sprawdź zaznaczony tekst",
|
||||
"{{activeCount}} active, {{pendingCount}} pending": "{{activeCount}} aktywnych, {{pendingCount}} oczekujących",
|
||||
"{{failedCount}} failed": "{{failedCount}} nieudanych",
|
||||
"Waiting...": "Oczekiwanie...",
|
||||
"Failed": "Nieudane",
|
||||
"Completed": "Ukończone",
|
||||
"Cancelled": "Anulowane",
|
||||
"Retry": "Ponów",
|
||||
"Active": "Aktywne",
|
||||
"Transfer Queue": "Kolejka transferów",
|
||||
"Upload All": "Wyślij wszystko",
|
||||
"Download All": "Pobierz wszystko",
|
||||
"Resume Transfers": "Wznów transfery",
|
||||
"Pause Transfers": "Wstrzymaj transfery",
|
||||
"Pending": "Oczekujące",
|
||||
"No transfers": "Brak transferów",
|
||||
"Retry All": "Ponów wszystko",
|
||||
"Clear Completed": "Wyczyść ukończone",
|
||||
"Clear Failed": "Wyczyść nieudane",
|
||||
"Upload queued: {{title}}": "Wysyłanie w kolejce: {{title}}",
|
||||
"Download queued: {{title}}": "Pobieranie w kolejce: {{title}}",
|
||||
"Book not found in library": "Książka nie została znaleziona w bibliotece",
|
||||
"Unknown error": "Nieznany błąd",
|
||||
"Please log in to continue": "Zaloguj się, aby kontynuować",
|
||||
"Cloud File Transfers": "Transfery plików w chmurze",
|
||||
"Show Search Results": "Pokaż wyniki wyszukiwania",
|
||||
"Search results for '{{term}}'": "Wyniki dla '{{term}}'",
|
||||
"Close Search": "Zamknij wyszukiwanie",
|
||||
"Previous Result": "Poprzedni wynik",
|
||||
"Next Result": "Następny wynik",
|
||||
"Bookmarks": "Zakładki",
|
||||
"Annotations": "Adnotacje",
|
||||
"Show Results": "Pokaż wyniki",
|
||||
"Clear search": "Wyczyść wyszukiwanie",
|
||||
"Clear search history": "Wyczyść historię wyszukiwania",
|
||||
"Tap to Toggle Footer": "Dotknij, aby przełączyć stopkę",
|
||||
"Show Current Time": "Pokaż aktualny czas",
|
||||
"Use 24 Hour Clock": "Używaj formatu 24-godzinnego",
|
||||
"Show Current Battery Status": "Pokaż aktualny stan baterii",
|
||||
"Exported successfully": "Wyeksportowano pomyślnie",
|
||||
"Book exported successfully.": "Książka została wyeksportowana pomyślnie.",
|
||||
"Failed to export the book.": "Nie udało się wyeksportować książki.",
|
||||
"Export Book": "Eksportuj książkę",
|
||||
"Whole word:": "Całe słowo:",
|
||||
"Error": "Błąd",
|
||||
"Unable to load the article. Try searching directly on {{link}}.": "Nie można załadować artykułu. Spróbuj wyszukać bezpośrednio na {{link}}.",
|
||||
"Unable to load the word. Try searching directly on {{link}}.": "Nie można załadować słowa. Spróbuj wyszukać bezpośrednio na {{link}}.",
|
||||
"Date Published": "Data wydania",
|
||||
"Only for TTS:": "Tylko dla TTS:",
|
||||
"Uploaded": "Przesłano",
|
||||
"Downloaded": "Pobrano",
|
||||
"Deleted": "Usunięto",
|
||||
"Note:": "Notatka:",
|
||||
"Time:": "Czas:",
|
||||
"Format Options": "Opcje formatu",
|
||||
"Export Date": "Data eksportu",
|
||||
"Chapter Titles": "Tytuły rozdziałów",
|
||||
"Chapter Separator": "Separator rozdziałów",
|
||||
"Highlights": "Zaznaczenia",
|
||||
"Note Date": "Data notatki",
|
||||
"Advanced": "Zaawansowane",
|
||||
"Hide": "Ukryj",
|
||||
"Show": "Pokaż",
|
||||
"Use Custom Template": "Użyj własnego szablonu",
|
||||
"Export Template": "Szablon eksportu",
|
||||
"Template Syntax:": "Składnia szablonu:",
|
||||
"Insert value": "Wstaw wartość",
|
||||
"Format date (locale)": "Formatuj datę (lokalizacja)",
|
||||
"Format date (custom)": "Formatuj datę (własny)",
|
||||
"Conditional": "Warunkowy",
|
||||
"Loop": "Pętla",
|
||||
"Available Variables:": "Dostępne zmienne:",
|
||||
"Book title": "Tytuł książki",
|
||||
"Book author": "Autor książki",
|
||||
"Export date": "Data eksportu",
|
||||
"Array of chapters": "Tablica rozdziałów",
|
||||
"Chapter title": "Tytuł rozdziału",
|
||||
"Array of annotations": "Tablica adnotacji",
|
||||
"Highlighted text": "Zaznaczony tekst",
|
||||
"Annotation note": "Notatka adnotacji",
|
||||
"Date Format Tokens:": "Tokeny formatu daty:",
|
||||
"Year (4 digits)": "Rok (4 cyfry)",
|
||||
"Month (01-12)": "Miesiąc (01-12)",
|
||||
"Day (01-31)": "Dzień (01-31)",
|
||||
"Hour (00-23)": "Godzina (00-23)",
|
||||
"Minute (00-59)": "Minuta (00-59)",
|
||||
"Second (00-59)": "Sekunda (00-59)",
|
||||
"Show Source": "Pokaż źródło",
|
||||
"No content to preview": "Brak treści do podglądu",
|
||||
"Export": "Eksportuj",
|
||||
"Set Timeout": "Ustaw limit czasu",
|
||||
"Select Voice": "Wybierz głos",
|
||||
"Toggle Sticky Bottom TTS Bar": "Przełącz przypiętą dolną belkę TTS",
|
||||
"Display what I'm reading on Discord": "Wyświetl to, co czytam na Discord",
|
||||
"Show on Discord": "Pokaż na Discord",
|
||||
"Instant {{action}}": "Natychmiastowe {{action}}",
|
||||
"Instant {{action}} Disabled": "Natychmiastowe {{action}} wyłączone",
|
||||
"Annotation": "Adnotacja",
|
||||
"Reset Template": "Resetuj szablon",
|
||||
"Annotation style": "Styl adnotacji",
|
||||
"Annotation color": "Kolor adnotacji",
|
||||
"Annotation time": "Czas adnotacji",
|
||||
"AI": "AI",
|
||||
"Are you sure you want to re-index this book?": "Czy na pewno chcesz ponownie zaindeksować tę książkę?",
|
||||
"Enable AI in Settings": "Włącz AI w ustawieniach",
|
||||
"Index This Book": "Zaindeksuj tę książkę",
|
||||
"Enable AI search and chat for this book": "Włącz wyszukiwanie AI i czat dla tej książki",
|
||||
"Start Indexing": "Rozpocznij indeksowanie",
|
||||
"Indexing book...": "Indeksowanie książki...",
|
||||
"Preparing...": "Przygotowywanie...",
|
||||
"Delete this conversation?": "Usunąć tę rozmowę?",
|
||||
"No conversations yet": "Brak rozmów",
|
||||
"Start a new chat to ask questions about this book": "Rozpocznij nowy czat, aby zadać pytania o tę książkę",
|
||||
"Rename": "Zmień nazwę",
|
||||
"New Chat": "Nowy czat",
|
||||
"Chat": "Czat",
|
||||
"Please enter a model ID": "Wprowadź ID modelu",
|
||||
"Model not available or invalid": "Model niedostępny lub nieprawidłowy",
|
||||
"Failed to validate model": "Nie udało się zwalidować modelu",
|
||||
"Couldn't connect to Ollama. Is it running?": "Nie można połączyć się z Ollama. Czy jest uruchomiona?",
|
||||
"Invalid API key or connection failed": "Nieprawidłowy klucz API lub błąd połączenia",
|
||||
"Connection failed": "Połączenie nieudane",
|
||||
"AI Assistant": "Asystent AI",
|
||||
"Enable AI Assistant": "Włącz asystenta AI",
|
||||
"Provider": "Dostawca",
|
||||
"Ollama (Local)": "Ollama (Lokalny)",
|
||||
"AI Gateway (Cloud)": "Brama AI (Chmura)",
|
||||
"Ollama Configuration": "Konfiguracja Ollama",
|
||||
"Refresh Models": "Odśwież modele",
|
||||
"AI Model": "Model AI",
|
||||
"No models detected": "Nie wykryto modeli",
|
||||
"AI Gateway Configuration": "Konfiguracja bramy AI",
|
||||
"Choose from a selection of high-quality, economical AI models. You can also bring your own model by selecting \"Custom Model\" below.": "Wybierz spośród wysokiej jakości, ekonomicznych modeli AI. Możesz również użyć własnego modelu, wybierając \"Model niestandardowy\" poniżej.",
|
||||
"API Key": "Klucz API",
|
||||
"Get Key": "Pobierz klucz",
|
||||
"Model": "Model",
|
||||
"Custom Model...": "Model niestandardowy...",
|
||||
"Custom Model ID": "ID modelu niestandardowego",
|
||||
"Validate": "Waliduj",
|
||||
"Model available": "Model dostępny",
|
||||
"Connection": "Połączenie",
|
||||
"Test Connection": "Testuj połączenie",
|
||||
"Connected": "Połączono",
|
||||
"Custom Colors": "Niestandardowe kolory",
|
||||
"Color E-Ink Mode": "Tryb kolorowego e-papieru",
|
||||
"Reading Ruler": "Linijka do czytania",
|
||||
"Enable Reading Ruler": "Włącz linijkę do czytania",
|
||||
"Lines to Highlight": "Linie do wyróżnienia",
|
||||
"Ruler Color": "Kolor linijki",
|
||||
"Command Palette": "Paleta poleceń",
|
||||
"Search settings and actions...": "Szukaj ustawień i akcji...",
|
||||
"No results found for": "Brak wyników dla",
|
||||
"Type to search settings and actions": "Wpisz, aby szukać ustawień i akcji",
|
||||
"Recent": "Ostatnie",
|
||||
"navigate": "nawiguj",
|
||||
"select": "wybierz",
|
||||
"close": "zamknij",
|
||||
"Search Settings": "Szukaj ustawień",
|
||||
"Page Margins": "Marginesy strony",
|
||||
"AI Provider": "Dostawca AI",
|
||||
"Ollama URL": "URL Ollama",
|
||||
"Ollama Model": "Model Ollama",
|
||||
"AI Gateway Model": "Model AI Gateway",
|
||||
"Actions": "Akcje",
|
||||
"Navigation": "Nawigacja",
|
||||
"Set status for {{count}} book(s)_one": "Ustaw status dla {{count}} książki",
|
||||
"Set status for {{count}} book(s)_other": "Ustaw status dla {{count}} książek",
|
||||
"Mark as Unread": "Oznacz jako nieprzeczytane",
|
||||
"Mark as Finished": "Oznacz jako ukończone",
|
||||
"Finished": "Ukończone",
|
||||
"Unread": "Nieprzeczytane",
|
||||
"Clear Status": "Wyczyść status",
|
||||
"Status": "Status",
|
||||
"Set status for {{count}} book(s)_few": "Ustaw status dla {{count}} książek",
|
||||
"Set status for {{count}} book(s)_many": "Ustaw status dla {{count}} książek",
|
||||
"Loading": "Ładowanie...",
|
||||
"Exit Paragraph Mode": "Wyjdź z trybu akapitu",
|
||||
"Paragraph Mode": "Tryb akapitu",
|
||||
"Embedding Model": "Model osadzania",
|
||||
"{{count}} book(s) synced_one": "{{count}} książka zsynchronizowana",
|
||||
"{{count}} book(s) synced_few": "{{count}} książki zsynchronizowane",
|
||||
"{{count}} book(s) synced_many": "{{count}} książek zsynchronizowanych",
|
||||
"{{count}} book(s) synced_other": "{{count}} książek zsynchronizowanych",
|
||||
"Unable to start RSVP": "Nie można uruchomić RSVP",
|
||||
"RSVP not supported for PDF": "RSVP nie jest obsługiwane dla PDF",
|
||||
"Select Chapter": "Wybierz rozdział",
|
||||
"Context": "Kontekst",
|
||||
"Ready": "Gotowy",
|
||||
"Chapter Progress": "Postęp rozdziału",
|
||||
"words": "słowa",
|
||||
"{{time}} left": "pozostało {{time}}",
|
||||
"Reading progress": "Postęp czytania",
|
||||
"Click to seek": "Kliknij, aby wyszukać",
|
||||
"Skip back 15 words": "Cofnij o 15 słów",
|
||||
"Back 15 words (Shift+Left)": "Cofnij o 15 słów (Shift+Lewo)",
|
||||
"Pause (Space)": "Pauze (Spacja)",
|
||||
"Play (Space)": "Odtwarzaj (Spacja)",
|
||||
"Skip forward 15 words": "Naprzód o 15 słów",
|
||||
"Forward 15 words (Shift+Right)": "Naprzód o 15 słów (Shift+Prawo)",
|
||||
"Decrease speed": "Zmniejsz prędkość",
|
||||
"Slower (Left/Down)": "Wolniej (Lewo/Dół)",
|
||||
"Increase speed": "Zwiększ prędkość",
|
||||
"Faster (Right/Up)": "Szybciej (Prawo/Góra)",
|
||||
"Start RSVP Reading": "Uruchom czytanie RSVP",
|
||||
"Choose where to start reading": "Wybierz, gdzie zacząć czytać",
|
||||
"From Chapter Start": "Od początku rozdziału",
|
||||
"Start reading from the beginning of the chapter": "Zacznij czytać od początku rozdziału",
|
||||
"Resume": "Wznów",
|
||||
"Continue from where you left off": "Kontynuuj od miejsca, w którym przerwałeś",
|
||||
"From Current Page": "Od bieżącej strony",
|
||||
"Start from where you are currently reading": "Zacznij od miejsca, w którym aktualnie czytasz",
|
||||
"From Selection": "Z zaznaczenia",
|
||||
"Speed Reading Mode": "Tryb szybkiego czytania",
|
||||
"Scroll left": "Przewiń w lewo",
|
||||
"Scroll right": "Przewiń w prawo",
|
||||
"Library Sync Progress": "Postęp synchronizacji biblioteki",
|
||||
"Back to library": "Powrót do biblioteki",
|
||||
"Group by...": "Grupuj według...",
|
||||
"Export as Plain Text": "Eksportuj jako zwykły tekst",
|
||||
"Export as Markdown": "Eksportuj jako Markdown",
|
||||
"Show Page Navigation Buttons": "Przyciski nawigacji",
|
||||
"Page {{number}}": "Strona {{number}}",
|
||||
"highlight": "wyróżnienie",
|
||||
"underline": "podkreślenie",
|
||||
"squiggly": "wężyk",
|
||||
"red": "czerwony",
|
||||
"violet": "fioletowy",
|
||||
"blue": "niebieski",
|
||||
"green": "zielony",
|
||||
"yellow": "żółty",
|
||||
"Select {{style}} style": "Wybierz styl {{style}}",
|
||||
"Select {{color}} color": "Wybierz kolor {{color}}",
|
||||
"Close Book": "Zamknij książkę",
|
||||
"Speed Reading": "Szybkie czytanie",
|
||||
"Close Speed Reading": "Zamknij szybkie czytanie",
|
||||
"Authors": "Autorzy",
|
||||
"Books": "Książki",
|
||||
"Groups": "Grupy",
|
||||
"Back to TTS Location": "Powrót do lokalizacji TTS",
|
||||
"Metadata": "Metadane",
|
||||
"Image viewer": "Przeglądarka obrazów",
|
||||
"Previous Image": "Poprzedni obraz",
|
||||
"Next Image": "Następny obraz",
|
||||
"Zoomed": "Powiększone",
|
||||
"Zoom level": "Poziom powiększenia",
|
||||
"Table viewer": "Przeglądarka tabel",
|
||||
"Unable to connect to Readwise. Please check your network connection.": "Nie można połączyć się z Readwise. Sprawdź połączenie sieciowe.",
|
||||
"Invalid Readwise access token": "Nieprawidłowy token dostępu Readwise",
|
||||
"Disconnected from Readwise": "Rozłączono z Readwise",
|
||||
"Never": "Nigdy",
|
||||
"Readwise Settings": "Ustawienia Readwise",
|
||||
"Connected to Readwise": "Połączono z Readwise",
|
||||
"Last synced: {{time}}": "Ostatnia synchronizacja: {{time}}",
|
||||
"Sync Enabled": "Synchronizacja włączona",
|
||||
"Disconnect": "Rozłącz",
|
||||
"Connect your Readwise account to sync highlights.": "Połącz swoje konto Readwise, aby synchronizować wyróżnienia.",
|
||||
"Get your access token at": "Pobierz token dostępu pod adresem",
|
||||
"Access Token": "Token dostępu",
|
||||
"Paste your Readwise access token": "Wklej swój token dostępu Readwise",
|
||||
"Config": "Konfiguracja",
|
||||
"Readwise Sync": "Synchronizacja Readwise",
|
||||
"Push Highlights": "Wyślij wyróżnienia",
|
||||
"Highlights synced to Readwise": "Wyróżnienia zsynchronizowane z Readwise",
|
||||
"Readwise sync failed: no internet connection": "Synchronizacja Readwise nie powiodła się: brak połączenia z Internetem",
|
||||
"Readwise sync failed: {{error}}": "Synchronizacja Readwise nie powiodła się: {{error}}",
|
||||
"System Screen Brightness": "Jasność ekranu systemowego",
|
||||
"Page:": "Strona:",
|
||||
"Page: {{number}}": "Strona: {{number}}",
|
||||
"Annotation page number": "Numer strony adnotacji",
|
||||
"Translating...": "Tłumaczenie...",
|
||||
"Show Battery Percentage": "Pokaż procent baterii",
|
||||
"Hide Scrollbar": "Ukryj pasek przewijania",
|
||||
"Skip to last reading position": "Przejdź do ostatniej pozycji czytania",
|
||||
"Show context": "Pokaż kontekst",
|
||||
"Hide context": "Ukryj kontekst",
|
||||
"Decrease font size": "Zmniejsz rozmiar czcionki",
|
||||
"Increase font size": "Zwiększ rozmiar czcionki",
|
||||
"Focus": "Fokus",
|
||||
"Theme color": "Kolor motywu",
|
||||
"Import failed": "Import nie powiódł się",
|
||||
"Available Formatters:": "Dostępne formatery:",
|
||||
"Format date": "Formatuj datę",
|
||||
"Markdown block quote (> per line)": "Cytat blokowy Markdown (> na linię)",
|
||||
"Newlines to <br>": "Nowe linie na <br>",
|
||||
"Change case": "Zmień wielkość liter",
|
||||
"Trim whitespace": "Przytnij spacje",
|
||||
"Truncate to n characters": "Skróć do n znaków",
|
||||
"Replace text": "Zamień tekst",
|
||||
"Fallback value": "Wartość zastępcza",
|
||||
"Get length": "Pobierz długość",
|
||||
"First/last element": "Pierwszy/ostatni element",
|
||||
"Join array": "Połącz tablicę",
|
||||
"Backup failed: {{error}}": "Kopia zapasowa nie powiodła się: {{error}}",
|
||||
"Select Backup": "Wybierz kopię zapasową",
|
||||
"Restore failed: {{error}}": "Przywracanie nie powiodło się: {{error}}",
|
||||
"Backup & Restore": "Kopia zapasowa i przywracanie",
|
||||
"Create a backup of your library or restore from a previous backup. Restoring will merge with your current library.": "Utwórz kopię zapasową biblioteki lub przywróć z poprzedniej kopii. Przywracanie zostanie połączone z bieżącą biblioteką.",
|
||||
"Backup Library": "Kopia zapasowa biblioteki",
|
||||
"Restore Library": "Przywróć bibliotekę",
|
||||
"Creating backup...": "Tworzenie kopii zapasowej...",
|
||||
"Restoring library...": "Przywracanie biblioteki...",
|
||||
"{{current}} of {{total}} items": "{{current}} z {{total}} elementów",
|
||||
"Backup completed successfully!": "Kopia zapasowa ukończona!",
|
||||
"Restore completed successfully!": "Przywracanie ukończone!",
|
||||
"Your library has been saved to the selected location.": "Biblioteka została zapisana w wybranej lokalizacji.",
|
||||
"{{added}} books added, {{updated}} books updated.": "Dodano {{added}} książek, zaktualizowano {{updated}} książek.",
|
||||
"Operation failed": "Operacja nie powiodła się",
|
||||
"Loading library...": "Wczytywanie biblioteki...",
|
||||
"{{count}} books refreshed_one": "Odświeżono {{count}} książkę",
|
||||
"{{count}} books refreshed_few": "Odświeżono {{count}} książki",
|
||||
"{{count}} books refreshed_many": "Odświeżono {{count}} książek",
|
||||
"{{count}} books refreshed_other": "Odświeżono {{count}} książek",
|
||||
"Failed to refresh metadata": "Nie udało się odświeżyć metadanych",
|
||||
"Refresh Metadata": "Odśwież metadane"
|
||||
}
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
"Auto Mode": "Modo Automático",
|
||||
"Behavior": "Comportamento",
|
||||
"Book": "Livro",
|
||||
"Book Cover": "Capa do Livro",
|
||||
"Bookmark": "Marcador",
|
||||
"Cancel": "Cancelar",
|
||||
"Chapter": "Capítulo",
|
||||
@@ -107,7 +106,6 @@
|
||||
"Wikipedia": "Wikipédia",
|
||||
"Writing Mode": "Modo de Escrita",
|
||||
"Your Library": "Sua Biblioteca",
|
||||
"TTS not supported for PDF": "TTS não suportado para PDF",
|
||||
"Override Book Font": "Sobrescrever Fonte do Livro",
|
||||
"Apply to All Books": "Aplicar a todos os livros",
|
||||
"Apply to This Book": "Aplicar a este livro",
|
||||
@@ -174,9 +172,6 @@
|
||||
"Token": "Token",
|
||||
"Your OTP token": "Seu token OTP",
|
||||
"Verify token": "Verificar token",
|
||||
"Sign in with Google": "Entrar com o Google",
|
||||
"Sign in with Apple": "Entrar com o Apple",
|
||||
"Sign in with GitHub": "Entrar com o GitHub",
|
||||
"Account": "Conta",
|
||||
"Failed to delete user. Please try again later.": "Falha ao excluir usuário. Por favor, tente novamente mais tarde.",
|
||||
"Community Support": "Suporte da comunidade",
|
||||
@@ -194,7 +189,7 @@
|
||||
"No supported files found. Supported formats: {{formats}}": "Nenhum arquivo suportado encontrado. Formatos suportados: {{formats}}",
|
||||
"Drop to Import Books": "Arraste para Importar Livros",
|
||||
"Custom": "Personalizado",
|
||||
"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": "Todo o mundo é um palco,\nE todos os homens e mulheres são meros atores;\nEles têm suas saídas e suas entradas,\nE um homem em seu tempo desempenha muitos papéis,\nSeus atos sendo sete idades.\n\n— William Shakespeare",
|
||||
"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": "Todo o mundo é um palco,\nE todos os homens e mulheres são meros atores;\nEles têm suas saídas e suas entradas,\nE um homem em seu tempo desempenha muitos papéis,\nSeus atos sendo sete idades.\n\n— William Shakespeare",
|
||||
"Custom Theme": "Tema Personalizado",
|
||||
"Theme Name": "Nome do Tema",
|
||||
"Text Color": "Cor do Texto",
|
||||
@@ -342,12 +337,12 @@
|
||||
"Fit": "Encaixar",
|
||||
"Reset {{settings}}": "Redefinir {{settings}}",
|
||||
"Reset Settings": "Redefinir Configurações",
|
||||
"{{count}} pages left in chapter_one": "Falta {{count}} página neste capítulo",
|
||||
"{{count}} pages left in chapter_many": "Faltam {{count}} páginas neste capítulo",
|
||||
"{{count}} pages left in chapter_other": "Faltam {{count}} páginas neste capítulo",
|
||||
"{{count}} pages left in chapter_one": "<1>Falta </1><0>{{count}}</0><1> página neste capítulo</1>",
|
||||
"{{count}} pages left in chapter_many": "<1>Faltam </1><0>{{count}}</0><1> páginas neste capítulo</1>",
|
||||
"{{count}} pages left in chapter_other": "<1>Faltam </1><0>{{count}}</0><1> páginas neste capítulo</1>",
|
||||
"Show Remaining Pages": "Mostrar páginas restantes",
|
||||
"Source Han Serif CN VF": "Source Han Serif",
|
||||
"Huiwen-mincho": "Huiwen Mincho",
|
||||
"Source Han Serif CN": "Source Han Serif",
|
||||
"Huiwen-MinchoGBK": "Huiwen Mincho",
|
||||
"KingHwa_OldSong": "KingHwa Song",
|
||||
"Manage Subscription": "Gerenciar assinatura",
|
||||
"Coming Soon": "Em breve",
|
||||
@@ -607,11 +602,10 @@
|
||||
"Size": "Tamanho",
|
||||
"Cover": "Capa",
|
||||
"Contain": "Contém",
|
||||
"{{number}} pages left in chapter": "Faltam {{number}} páginas neste capítulo",
|
||||
"{{number}} pages left in chapter": "<1>Faltam </1><0>{{number}}</0><1> páginas neste capítulo</1>",
|
||||
"Device": "Dispositivo",
|
||||
"E-Ink Mode": "Modo E-Ink",
|
||||
"Highlight Colors": "Cores de Destaque",
|
||||
"Auto Screen Brightness": "Brilho Automático da Tela",
|
||||
"Pagination": "Paginação",
|
||||
"Disable Double Tap": "Desativar Toque Duplo",
|
||||
"Tap to Paginate": "Toque para Paginar",
|
||||
@@ -660,5 +654,466 @@
|
||||
"Update email": "Atualizar e-mail",
|
||||
"Current email": "E-mail atual",
|
||||
"Update Email": "Atualizar e-mail",
|
||||
"All": "Todos"
|
||||
"All": "Todos",
|
||||
"Unable to open book": "Não foi possível abrir o livro",
|
||||
"Punctuation": "Pontuação",
|
||||
"Replace Quotation Marks": "Substituir Aspas",
|
||||
"Enabled only in vertical layout.": "Habilitado apenas no layout vertical.",
|
||||
"No Conversion": "Sem conversão",
|
||||
"Simplified to Traditional": "Simplificado → Tradicional",
|
||||
"Traditional to Simplified": "Tradicional → Simplificado",
|
||||
"Simplified to Traditional (Taiwan)": "Simplificado → Tradicional (Taiwan)",
|
||||
"Simplified to Traditional (Hong Kong)": "Simplificado → Tradicional (Hong Kong)",
|
||||
"Simplified to Traditional (Taiwan), with phrases": "Simplificado → Tradicional (Taiwan • frases)",
|
||||
"Traditional (Taiwan) to Simplified": "Tradicional (Taiwan) → Simplificado",
|
||||
"Traditional (Hong Kong) to Simplified": "Tradicional (Hong Kong) → Simplificado",
|
||||
"Traditional (Taiwan) to Simplified, with phrases": "Tradicional (Taiwan • frases) → Simplificado",
|
||||
"Convert Simplified and Traditional Chinese": "Converter Chinês Simpl./Trad.",
|
||||
"Convert Mode": "Modo de conversão",
|
||||
"Failed to auto-save book cover for lock screen: {{error}}": "Falha ao salvar automaticamente a capa do livro para a tela de bloqueio: {{error}}",
|
||||
"Download from Cloud": "Baixar da Nuvem",
|
||||
"Upload to Cloud": "Enviar para a Nuvem",
|
||||
"Clear Custom Fonts": "Limpar Fontes Personalizadas",
|
||||
"Columns": "Colunas",
|
||||
"OPDS Catalogs": "Catálogos OPDS",
|
||||
"Adding LAN addresses is not supported in the web app version.": "Adicionar endereços LAN não é suportado na versão web.",
|
||||
"Invalid OPDS catalog. Please check the URL.": "Catálogo OPDS inválido. Verifique o URL.",
|
||||
"Browse and download books from online catalogs": "Navegar e baixar livros de catálogos online",
|
||||
"My Catalogs": "Meus catálogos",
|
||||
"Add Catalog": "Adicionar catálogo",
|
||||
"No catalogs yet": "Nenhum catálogo ainda",
|
||||
"Add your first OPDS catalog to start browsing books": "Adicione seu primeiro catálogo OPDS para começar a navegar pelos livros",
|
||||
"Add Your First Catalog": "Adicione seu primeiro catálogo",
|
||||
"Browse": "Navegar",
|
||||
"Popular Catalogs": "Catálogos populares",
|
||||
"Add": "Adicionar",
|
||||
"Add OPDS Catalog": "Adicionar catálogo OPDS",
|
||||
"Catalog Name": "Nome do catálogo",
|
||||
"My Calibre Library": "Minha biblioteca Calibre",
|
||||
"OPDS URL": "URL do OPDS",
|
||||
"Username (optional)": "Nome de usuário (opcional)",
|
||||
"Password (optional)": "Senha (opcional)",
|
||||
"Description (optional)": "Descrição (opcional)",
|
||||
"A brief description of this catalog": "Uma breve descrição deste catálogo",
|
||||
"Validating...": "Validando...",
|
||||
"View All": "Ver todos",
|
||||
"Forward": "Avançar",
|
||||
"Home": "Início",
|
||||
"{{count}} items_one": "{{count}} item",
|
||||
"{{count}} items_many": "{{count}} itens",
|
||||
"{{count}} items_other": "{{count}} item",
|
||||
"Download completed": "Download concluído",
|
||||
"Download failed": "Falha no download",
|
||||
"Open Access": "Acesso aberto",
|
||||
"Borrow": "Emprestar",
|
||||
"Buy": "Comprar",
|
||||
"Subscribe": "Assinar",
|
||||
"Sample": "Amostra",
|
||||
"Download": "Baixar",
|
||||
"Open & Read": "Abrir e ler",
|
||||
"Tags": "Etiquetas",
|
||||
"Tag": "Etiqueta",
|
||||
"First": "Pierwsza",
|
||||
"Previous": "Poprzednia",
|
||||
"Next": "Następna",
|
||||
"Last": "Ostatnia",
|
||||
"Cannot Load Page": "Nie można załadować strony",
|
||||
"An error occurred": "Wystąpił błąd",
|
||||
"Online Library": "Biblioteca online",
|
||||
"URL must start with http:// or https://": "URL deve começar com http:// ou https://",
|
||||
"Title, Author, Tag, etc...": "Título, Autor, Etiqueta, etc...",
|
||||
"Query": "Consulta",
|
||||
"Subject": "Assunto",
|
||||
"Enter {{terms}}": "Insira {{terms}}",
|
||||
"No search results found": "Nenhum resultado encontrado",
|
||||
"Failed to load OPDS feed: {{status}} {{statusText}}": "Falha ao carregar o feed OPDS: {{status}} {{statusText}}",
|
||||
"Search in {{title}}": "Pesquisar em {{title}}",
|
||||
"Manage Storage": "Gerir Armazenamento",
|
||||
"Failed to load files": "Falha ao carregar arquivos",
|
||||
"Deleted {{count}} file(s)_one": "Apagado {{count}} ficheiro",
|
||||
"Deleted {{count}} file(s)_many": "Apagados {{count}} ficheiros",
|
||||
"Deleted {{count}} file(s)_other": "Apagado {{count}} ficheiro",
|
||||
"Failed to delete {{count}} file(s)_one": "Falha ao apagar {{count}} ficheiro",
|
||||
"Failed to delete {{count}} file(s)_many": "Falha ao apagar {{count}} ficheiros",
|
||||
"Failed to delete {{count}} file(s)_other": "Falha ao apagar {{count}} ficheiro",
|
||||
"Failed to delete files": "Falha ao apagar arquivos",
|
||||
"Total Files": "Total de Arquivos",
|
||||
"Total Size": "Tamanho Total",
|
||||
"Quota": "Quota",
|
||||
"Used": "Usado",
|
||||
"Files": "Arquivos",
|
||||
"Search files...": "Procurar arquivos...",
|
||||
"Newest First": "Mais Recentes Primeiro",
|
||||
"Oldest First": "Mais Antigos Primeiro",
|
||||
"Largest First": "Maiores Primeiro",
|
||||
"Smallest First": "Menores Primeiro",
|
||||
"Name A-Z": "Nome A-Z",
|
||||
"Name Z-A": "Nome Z-A",
|
||||
"{{count}} selected_one": "{{count}} selecionado",
|
||||
"{{count}} selected_many": "{{count}} selecionados",
|
||||
"{{count}} selected_other": "{{count}} selecionado",
|
||||
"Delete Selected": "Apagar Selecionados",
|
||||
"Created": "Criado",
|
||||
"No files found": "Nenhum arquivo encontrado",
|
||||
"No files uploaded yet": "Nenhum arquivo enviado ainda",
|
||||
"files": "arquivos",
|
||||
"Page {{current}} of {{total}}": "Página {{current}} de {{total}}",
|
||||
"Are you sure to delete {{count}} selected file(s)?_one": "Tem certeza de que deseja apagar {{count}} ficheiro selecionado?",
|
||||
"Are you sure to delete {{count}} selected file(s)?_many": "Tem certeza de que deseja apagar {{count}} ficheiros selecionados?",
|
||||
"Are you sure to delete {{count}} selected file(s)?_other": "Tem certeza de que deseja apagar {{count}} ficheiro selecionado?",
|
||||
"Cloud Storage Usage": "Uso de Armazenamento na Nuvem",
|
||||
"Rename Group": "Renomear Grupo",
|
||||
"From Directory": "Do Diretório",
|
||||
"Successfully imported {{count}} book(s)_one": "Importado com sucesso 1 livro",
|
||||
"Successfully imported {{count}} book(s)_many": "Importados com sucesso {{count}} livros",
|
||||
"Successfully imported {{count}} book(s)_other": "Importados com sucesso {{count}} livros",
|
||||
"Count": "Contagem",
|
||||
"Start Page": "Página Inicial",
|
||||
"Search in OPDS Catalog...": "Pesquisar no Catálogo OPDS...",
|
||||
"Please log in to use advanced TTS features": "Por favor, faça login para usar recursos avançados de TTS",
|
||||
"Word limit of 30 words exceeded.": "O limite de 30 palavras foi excedido.",
|
||||
"Proofread": "Revisão",
|
||||
"Current selection": "Seleção atual",
|
||||
"All occurrences in this book": "Todas as ocorrências neste livro",
|
||||
"All occurrences in your library": "Todas as ocorrências na sua biblioteca",
|
||||
"Selected text:": "Texto selecionado:",
|
||||
"Replace with:": "Substituir por:",
|
||||
"Enter text...": "Introduzir texto…",
|
||||
"Case sensitive:": "Diferenciar maiúsculas e minúsculas:",
|
||||
"Scope:": "Âmbito:",
|
||||
"Selection": "Seleção",
|
||||
"Library": "Biblioteca",
|
||||
"Yes": "Sim",
|
||||
"No": "Não",
|
||||
"Proofread Replacement Rules": "Regras de substituição da revisão",
|
||||
"Selected Text Rules": "Regras do texto selecionado",
|
||||
"No selected text replacement rules": "Não existem regras de substituição para o texto selecionado",
|
||||
"Book Specific Rules": "Regras específicas do livro",
|
||||
"No book-level replacement rules": "Não existem regras de substituição ao nível do livro",
|
||||
"Disable Quick Action": "Desativar Ação Rápida",
|
||||
"Enable Quick Action on Selection": "Ativar Ação Rápida na Seleção",
|
||||
"None": "Nenhum",
|
||||
"Annotation Tools": "Ferramentas de Anotação",
|
||||
"Enable Quick Actions": "Ativar Ações Rápidas",
|
||||
"Quick Action": "Ação Rápida",
|
||||
"Copy to Notebook": "Copiar para o Caderno",
|
||||
"Copy text after selection": "Copiar texto após a seleção",
|
||||
"Highlight text after selection": "Destacar texto após a seleção",
|
||||
"Annotate text after selection": "Anotar texto após a seleção",
|
||||
"Search text after selection": "Pesquisar texto após a seleção",
|
||||
"Look up text in dictionary after selection": "Procurar texto no dicionário após a seleção",
|
||||
"Look up text in Wikipedia after selection": "Procurar texto na Wikipedia após a seleção",
|
||||
"Translate text after selection": "Traduzir texto após a seleção",
|
||||
"Read text aloud after selection": "Ler texto em voz alta após a seleção",
|
||||
"Proofread text after selection": "Revisar texto após a seleção",
|
||||
"{{activeCount}} active, {{pendingCount}} pending": "{{activeCount}} ativos, {{pendingCount}} pendentes",
|
||||
"{{failedCount}} failed": "{{failedCount}} falharam",
|
||||
"Waiting...": "Aguardando...",
|
||||
"Failed": "Falhou",
|
||||
"Completed": "Concluído",
|
||||
"Cancelled": "Cancelado",
|
||||
"Retry": "Tentar novamente",
|
||||
"Active": "Ativos",
|
||||
"Transfer Queue": "Fila de Transferências",
|
||||
"Upload All": "Enviar Todos",
|
||||
"Download All": "Baixar Todos",
|
||||
"Resume Transfers": "Retomar Transferências",
|
||||
"Pause Transfers": "Pausar Transferências",
|
||||
"Pending": "Pendentes",
|
||||
"No transfers": "Sem transferências",
|
||||
"Retry All": "Tentar Todos Novamente",
|
||||
"Clear Completed": "Limpar Concluídos",
|
||||
"Clear Failed": "Limpar Falhos",
|
||||
"Upload queued: {{title}}": "Upload na fila: {{title}}",
|
||||
"Download queued: {{title}}": "Download na fila: {{title}}",
|
||||
"Book not found in library": "Livro não encontrado na biblioteca",
|
||||
"Unknown error": "Erro desconhecido",
|
||||
"Please log in to continue": "Faça login para continuar",
|
||||
"Cloud File Transfers": "Transferências de Arquivos",
|
||||
"Show Search Results": "Mostrar resultados",
|
||||
"Search results for '{{term}}'": "Resultados para '{{term}}'",
|
||||
"Close Search": "Fechar pesquisa",
|
||||
"Previous Result": "Resultado anterior",
|
||||
"Next Result": "Próximo resultado",
|
||||
"Bookmarks": "Marcadores",
|
||||
"Annotations": "Anotações",
|
||||
"Show Results": "Mostrar resultados",
|
||||
"Clear search": "Limpar pesquisa",
|
||||
"Clear search history": "Limpar histórico de pesquisa",
|
||||
"Tap to Toggle Footer": "Toque para alternar rodapé",
|
||||
"Show Current Time": "Mostrar hora atual",
|
||||
"Use 24 Hour Clock": "Usar formato de 24 horas",
|
||||
"Show Current Battery Status": "Mostrar o estado atual da bateria",
|
||||
"Exported successfully": "Exportado com sucesso",
|
||||
"Book exported successfully.": "Livro exportado com sucesso.",
|
||||
"Failed to export the book.": "Falha ao exportar o livro.",
|
||||
"Export Book": "Exportar livro",
|
||||
"Whole word:": "Palavra inteira:",
|
||||
"Error": "Erro",
|
||||
"Unable to load the article. Try searching directly on {{link}}.": "Não foi possível carregar o artigo. Tente pesquisar diretamente em {{link}}.",
|
||||
"Unable to load the word. Try searching directly on {{link}}.": "Não foi possível carregar a palavra. Tente pesquisar diretamente em {{link}}.",
|
||||
"Date Published": "Data de publicação",
|
||||
"Only for TTS:": "Apenas para TTS:",
|
||||
"Uploaded": "Enviado",
|
||||
"Downloaded": "Baixado",
|
||||
"Deleted": "Excluído",
|
||||
"Note:": "Nota:",
|
||||
"Time:": "Hora:",
|
||||
"Format Options": "Opções de formato",
|
||||
"Export Date": "Data de exportação",
|
||||
"Chapter Titles": "Títulos dos capítulos",
|
||||
"Chapter Separator": "Separador de capítulos",
|
||||
"Highlights": "Destaques",
|
||||
"Note Date": "Data da nota",
|
||||
"Advanced": "Avançado",
|
||||
"Hide": "Ocultar",
|
||||
"Show": "Mostrar",
|
||||
"Use Custom Template": "Usar modelo personalizado",
|
||||
"Export Template": "Modelo de exportação",
|
||||
"Template Syntax:": "Sintaxe do modelo:",
|
||||
"Insert value": "Inserir valor",
|
||||
"Format date (locale)": "Formatar data (local)",
|
||||
"Format date (custom)": "Formatar data (personalizado)",
|
||||
"Conditional": "Condicional",
|
||||
"Loop": "Loop",
|
||||
"Available Variables:": "Variáveis disponíveis:",
|
||||
"Book title": "Título do livro",
|
||||
"Book author": "Autor do livro",
|
||||
"Export date": "Data de exportação",
|
||||
"Array of chapters": "Lista de capítulos",
|
||||
"Chapter title": "Título do capítulo",
|
||||
"Array of annotations": "Lista de anotações",
|
||||
"Highlighted text": "Texto destacado",
|
||||
"Annotation note": "Nota de anotação",
|
||||
"Date Format Tokens:": "Tokens de formato de data:",
|
||||
"Year (4 digits)": "Ano (4 dígitos)",
|
||||
"Month (01-12)": "Mês (01-12)",
|
||||
"Day (01-31)": "Dia (01-31)",
|
||||
"Hour (00-23)": "Hora (00-23)",
|
||||
"Minute (00-59)": "Minuto (00-59)",
|
||||
"Second (00-59)": "Segundo (00-59)",
|
||||
"Show Source": "Mostrar fonte",
|
||||
"No content to preview": "Sem conteúdo para visualizar",
|
||||
"Export": "Exportar",
|
||||
"Set Timeout": "Definir tempo limite",
|
||||
"Select Voice": "Selecionar voz",
|
||||
"Toggle Sticky Bottom TTS Bar": "Alternar barra TTS fixada",
|
||||
"Display what I'm reading on Discord": "Mostrar o que estou lendo no Discord",
|
||||
"Show on Discord": "Mostrar no Discord",
|
||||
"Instant {{action}}": "{{action}} instantâneo",
|
||||
"Instant {{action}} Disabled": "{{action}} instantâneo desativado",
|
||||
"Annotation": "Anotação",
|
||||
"Reset Template": "Redefinir modelo",
|
||||
"Annotation style": "Estilo de anotação",
|
||||
"Annotation color": "Cor da anotação",
|
||||
"Annotation time": "Hora da anotação",
|
||||
"AI": "IA",
|
||||
"Are you sure you want to re-index this book?": "Tem certeza de que deseja reindexar este livro?",
|
||||
"Enable AI in Settings": "Ativar IA nas configurações",
|
||||
"Index This Book": "Indexar este livro",
|
||||
"Enable AI search and chat for this book": "Ativar pesquisa e chat com IA para este livro",
|
||||
"Start Indexing": "Iniciar indexação",
|
||||
"Indexing book...": "Indexando livro...",
|
||||
"Preparing...": "Preparando...",
|
||||
"Delete this conversation?": "Excluir esta conversa?",
|
||||
"No conversations yet": "Ainda não há conversas",
|
||||
"Start a new chat to ask questions about this book": "Inicie um novo chat para fazer perguntas sobre este livro",
|
||||
"Rename": "Renomear",
|
||||
"New Chat": "Novo chat",
|
||||
"Chat": "Chat",
|
||||
"Please enter a model ID": "Por favor, insira um ID de modelo",
|
||||
"Model not available or invalid": "Modelo não disponível ou inválido",
|
||||
"Failed to validate model": "Falha ao validar modelo",
|
||||
"Couldn't connect to Ollama. Is it running?": "Não foi possível conectar ao Ollama. Está em execução?",
|
||||
"Invalid API key or connection failed": "Chave API inválida ou falha na conexão",
|
||||
"Connection failed": "Falha na conexão",
|
||||
"AI Assistant": "Assistente de IA",
|
||||
"Enable AI Assistant": "Ativar assistente de IA",
|
||||
"Provider": "Provedor",
|
||||
"Ollama (Local)": "Ollama (Local)",
|
||||
"AI Gateway (Cloud)": "Gateway de IA (Nuvem)",
|
||||
"Ollama Configuration": "Configuração do Ollama",
|
||||
"Refresh Models": "Atualizar modelos",
|
||||
"AI Model": "Modelo de IA",
|
||||
"No models detected": "Nenhum modelo detectado",
|
||||
"AI Gateway Configuration": "Configuração do gateway de IA",
|
||||
"Choose from a selection of high-quality, economical AI models. You can also bring your own model by selecting \"Custom Model\" below.": "Escolha entre uma seleção de modelos de IA de alta qualidade e econômicos. Você também pode usar seu próprio modelo selecionando \"Modelo personalizado\" abaixo.",
|
||||
"API Key": "Chave API",
|
||||
"Get Key": "Obter chave",
|
||||
"Model": "Modelo",
|
||||
"Custom Model...": "Modelo personalizado...",
|
||||
"Custom Model ID": "ID do modelo personalizado",
|
||||
"Validate": "Validar",
|
||||
"Model available": "Modelo disponível",
|
||||
"Connection": "Conexão",
|
||||
"Test Connection": "Testar conexão",
|
||||
"Connected": "Conectado",
|
||||
"Custom Colors": "Cores personalizadas",
|
||||
"Color E-Ink Mode": "Modo E-Ink colorido",
|
||||
"Reading Ruler": "Régua de leitura",
|
||||
"Enable Reading Ruler": "Ativar régua de leitura",
|
||||
"Lines to Highlight": "Linhas para destacar",
|
||||
"Ruler Color": "Cor da régua",
|
||||
"Command Palette": "Paleta de Comandos",
|
||||
"Search settings and actions...": "Pesquisar definições e ações...",
|
||||
"No results found for": "Nenhum resultado encontrado para",
|
||||
"Type to search settings and actions": "Digite para pesquisar definições e ações",
|
||||
"Recent": "Recente",
|
||||
"navigate": "navegar",
|
||||
"select": "selecionar",
|
||||
"close": "fechar",
|
||||
"Search Settings": "Pesquisar Definições",
|
||||
"Page Margins": "Margens da Página",
|
||||
"AI Provider": "Fornecedor de IA",
|
||||
"Ollama URL": "URL do Ollama",
|
||||
"Ollama Model": "Modelo do Ollama",
|
||||
"AI Gateway Model": "Modelo de AI Gateway",
|
||||
"Actions": "Ações",
|
||||
"Navigation": "Navegação",
|
||||
"Set status for {{count}} book(s)_one": "Definir estado para {{count}} livro",
|
||||
"Set status for {{count}} book(s)_other": "Definir estado para {{count}} livros",
|
||||
"Mark as Unread": "Marcar como não lido",
|
||||
"Mark as Finished": "Marcar como concluído",
|
||||
"Finished": "Concluído",
|
||||
"Unread": "Não lido",
|
||||
"Clear Status": "Limpar estado",
|
||||
"Status": "Estado",
|
||||
"Set status for {{count}} book(s)_many": "Definir status para {{count}} livros",
|
||||
"Loading": "Carregando...",
|
||||
"Exit Paragraph Mode": "Sair do modo de parágrafo",
|
||||
"Paragraph Mode": "Modo de parágrafo",
|
||||
"Embedding Model": "Modelo de incorporação",
|
||||
"{{count}} book(s) synced_one": "{{count}} livro sincronizado",
|
||||
"{{count}} book(s) synced_many": "{{count}} livros sincronizados",
|
||||
"{{count}} book(s) synced_other": "{{count}} livros sincronizados",
|
||||
"Unable to start RSVP": "Não foi possível iniciar o RSVP",
|
||||
"RSVP not supported for PDF": "RSVP não suportado para PDF",
|
||||
"Select Chapter": "Selecionar capítulo",
|
||||
"Context": "Contexto",
|
||||
"Ready": "Pronto",
|
||||
"Chapter Progress": "Progresso do capítulo",
|
||||
"words": "palavras",
|
||||
"{{time}} left": "{{time}} restante",
|
||||
"Reading progress": "Progresso de leitura",
|
||||
"Click to seek": "Clique para navegar",
|
||||
"Skip back 15 words": "Voltar 15 palavras",
|
||||
"Back 15 words (Shift+Left)": "Voltar 15 palavras (Shift+Esquerda)",
|
||||
"Pause (Space)": "Pausar (Espaço)",
|
||||
"Play (Space)": "Reproduzir (Espaço)",
|
||||
"Skip forward 15 words": "Avançar 15 palavras",
|
||||
"Forward 15 words (Shift+Right)": "Avançar 15 palavras (Shift+Direita)",
|
||||
"Decrease speed": "Diminuir velocidade",
|
||||
"Slower (Left/Down)": "Mais lento (Esquerda/Baixo)",
|
||||
"Increase speed": "Aumentar velocidade",
|
||||
"Faster (Right/Up)": "Mais rápido (Direita/Cima)",
|
||||
"Start RSVP Reading": "Iniciar leitura RSVP",
|
||||
"Choose where to start reading": "Escolha onde começar a ler",
|
||||
"From Chapter Start": "Do início do capítulo",
|
||||
"Start reading from the beginning of the chapter": "Começar a ler do início do capítulo",
|
||||
"Resume": "Retomar",
|
||||
"Continue from where you left off": "Continuar de onde parou",
|
||||
"From Current Page": "Da página atual",
|
||||
"Start from where you are currently reading": "Começar de onde está lendo no momento",
|
||||
"From Selection": "Da seleção",
|
||||
"Speed Reading Mode": "Modo de leitura rápida",
|
||||
"Scroll left": "Rolar para a esquerda",
|
||||
"Scroll right": "Rolar para a direita",
|
||||
"Library Sync Progress": "Progresso de sincronização da biblioteca",
|
||||
"Back to library": "Voltar à biblioteca",
|
||||
"Group by...": "Agrupar por...",
|
||||
"Export as Plain Text": "Exportar como texto simples",
|
||||
"Export as Markdown": "Exportar como Markdown",
|
||||
"Show Page Navigation Buttons": "Botões de navegação",
|
||||
"Page {{number}}": "Página {{number}}",
|
||||
"highlight": "destaque",
|
||||
"underline": "sublinhado",
|
||||
"squiggly": "ondulado",
|
||||
"red": "vermelho",
|
||||
"violet": "violeta",
|
||||
"blue": "azul",
|
||||
"green": "verde",
|
||||
"yellow": "amarelo",
|
||||
"Select {{style}} style": "Selecionar estilo {{style}}",
|
||||
"Select {{color}} color": "Selecionar cor {{color}}",
|
||||
"Close Book": "Fechar livro",
|
||||
"Speed Reading": "Leitura rápida",
|
||||
"Close Speed Reading": "Fechar leitura rápida",
|
||||
"Authors": "Autores",
|
||||
"Books": "Livros",
|
||||
"Groups": "Grupos",
|
||||
"Back to TTS Location": "Voltar para a localização do TTS",
|
||||
"Metadata": "Metadados",
|
||||
"Image viewer": "Visualizador de imagens",
|
||||
"Previous Image": "Imagem anterior",
|
||||
"Next Image": "Próxima imagem",
|
||||
"Zoomed": "Com zoom",
|
||||
"Zoom level": "Nível de zoom",
|
||||
"Table viewer": "Visualizador de tabelas",
|
||||
"Unable to connect to Readwise. Please check your network connection.": "Não foi possível conectar ao Readwise. Por favor, verifique sua conexão de rede.",
|
||||
"Invalid Readwise access token": "Token de acesso do Readwise inválido",
|
||||
"Disconnected from Readwise": "Desconectado do Readwise",
|
||||
"Never": "Nunca",
|
||||
"Readwise Settings": "Configurações do Readwise",
|
||||
"Connected to Readwise": "Conectado ao Readwise",
|
||||
"Last synced: {{time}}": "Última sincronização: {{time}}",
|
||||
"Sync Enabled": "Sincronização ativada",
|
||||
"Disconnect": "Desconectar",
|
||||
"Connect your Readwise account to sync highlights.": "Conecte sua conta do Readwise para sincronizar os destaques.",
|
||||
"Get your access token at": "Obtenha seu token de acesso em",
|
||||
"Access Token": "Token de acesso",
|
||||
"Paste your Readwise access token": "Cole seu token de acesso do Readwise",
|
||||
"Config": "Configuração",
|
||||
"Readwise Sync": "Sincronização com o Readwise",
|
||||
"Push Highlights": "Enviar destaques",
|
||||
"Highlights synced to Readwise": "Destaques sincronizados com o Readwise",
|
||||
"Readwise sync failed: no internet connection": "Sincronização com o Readwise falhou: sem conexão com a internet",
|
||||
"Readwise sync failed: {{error}}": "Sincronização com o Readwise falhou: {{error}}",
|
||||
"System Screen Brightness": "Brilho da tela do sistema",
|
||||
"Page:": "Página:",
|
||||
"Page: {{number}}": "Página: {{number}}",
|
||||
"Annotation page number": "Número de página da anotação",
|
||||
"Translating...": "Traduzindo...",
|
||||
"Show Battery Percentage": "Mostrar porcentagem da bateria",
|
||||
"Hide Scrollbar": "Ocultar barra de rolagem",
|
||||
"Skip to last reading position": "Ir para a última posição de leitura",
|
||||
"Show context": "Mostrar contexto",
|
||||
"Hide context": "Ocultar contexto",
|
||||
"Decrease font size": "Diminuir tamanho da fonte",
|
||||
"Increase font size": "Aumentar tamanho da fonte",
|
||||
"Focus": "Foco",
|
||||
"Theme color": "Cor do tema",
|
||||
"Import failed": "Falha na importação",
|
||||
"Available Formatters:": "Formatadores disponíveis:",
|
||||
"Format date": "Formatar data",
|
||||
"Markdown block quote (> per line)": "Citação Markdown (> por linha)",
|
||||
"Newlines to <br>": "Quebras de linha para <br>",
|
||||
"Change case": "Alterar maiúsculas/minúsculas",
|
||||
"Trim whitespace": "Remover espaços",
|
||||
"Truncate to n characters": "Truncar para n caracteres",
|
||||
"Replace text": "Substituir texto",
|
||||
"Fallback value": "Valor padrão",
|
||||
"Get length": "Obter comprimento",
|
||||
"First/last element": "Primeiro/último elemento",
|
||||
"Join array": "Juntar array",
|
||||
"Backup failed: {{error}}": "Falha no backup: {{error}}",
|
||||
"Select Backup": "Selecionar backup",
|
||||
"Restore failed: {{error}}": "Falha na restauração: {{error}}",
|
||||
"Backup & Restore": "Backup e restauração",
|
||||
"Create a backup of your library or restore from a previous backup. Restoring will merge with your current library.": "Crie um backup da sua biblioteca ou restaure a partir de um backup anterior. A restauração será mesclada com sua biblioteca atual.",
|
||||
"Backup Library": "Fazer backup da biblioteca",
|
||||
"Restore Library": "Restaurar biblioteca",
|
||||
"Creating backup...": "Criando backup...",
|
||||
"Restoring library...": "Restaurando biblioteca...",
|
||||
"{{current}} of {{total}} items": "{{current}} de {{total}} itens",
|
||||
"Backup completed successfully!": "Backup concluído com sucesso!",
|
||||
"Restore completed successfully!": "Restauração concluída com sucesso!",
|
||||
"Your library has been saved to the selected location.": "Sua biblioteca foi salva no local selecionado.",
|
||||
"{{added}} books added, {{updated}} books updated.": "{{added}} livros adicionados, {{updated}} livros atualizados.",
|
||||
"Operation failed": "Operação falhou",
|
||||
"Loading library...": "Carregando biblioteca...",
|
||||
"{{count}} books refreshed_one": "{{count}} livro atualizado",
|
||||
"{{count}} books refreshed_many": "{{count}} livros atualizados",
|
||||
"{{count}} books refreshed_other": "{{count}} livros atualizados",
|
||||
"Failed to refresh metadata": "Falha ao atualizar metadados",
|
||||
"Refresh Metadata": "Atualizar metadados"
|
||||
}
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
"Auto Mode": "Автоматический режим",
|
||||
"Behavior": "Поведение",
|
||||
"Book": "Книга",
|
||||
"Book Cover": "Обложка книги",
|
||||
"Bookmark": "Закладка",
|
||||
"Cancel": "Отмена",
|
||||
"Chapter": "Глава",
|
||||
@@ -107,7 +106,6 @@
|
||||
"Wikipedia": "Википедия",
|
||||
"Writing Mode": "Режим записи",
|
||||
"Your Library": "Ваша библиотека",
|
||||
"TTS not supported for PDF": "TTS не поддерживается для PDF",
|
||||
"Override Book Font": "Переопределить шрифт книги",
|
||||
"Apply to All Books": "Применить ко всем книгам",
|
||||
"Apply to This Book": "Применить к этой книге",
|
||||
@@ -174,9 +172,6 @@
|
||||
"Token": "Токен",
|
||||
"Your OTP token": "Ваш OTP токен",
|
||||
"Verify token": "Проверить токен",
|
||||
"Sign in with Google": "Войти через Google",
|
||||
"Sign in with Apple": "Войти через Apple",
|
||||
"Sign in with GitHub": "Войти через GitHub",
|
||||
"Account": "Аккаунт",
|
||||
"Failed to delete user. Please try again later.": "Не удалось удалить пользователя. Пожалуйста, повторите попытку позже.",
|
||||
"Community Support": "Поддержка сообщества",
|
||||
@@ -194,7 +189,7 @@
|
||||
"No supported files found. Supported formats: {{formats}}": "Поддерживаемые файлы не найдены. Поддерживаемые форматы: {{formats}}",
|
||||
"Drop to Import Books": "Перетащите сюда книги для импорта",
|
||||
"Custom": "Пользовательский",
|
||||
"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— Уильям Шекспир",
|
||||
"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— Уильям Шекспир",
|
||||
"Custom Theme": "Пользовательская тема",
|
||||
"Theme Name": "Название темы",
|
||||
"Text Color": "Цвет текста",
|
||||
@@ -345,13 +340,13 @@
|
||||
"Fit": "Подогнать",
|
||||
"Reset {{settings}}": "Сбросить {{settings}}",
|
||||
"Reset Settings": "Сбросить настройки",
|
||||
"{{count}} pages left in chapter_one": "Осталась {{count}} страница в главе",
|
||||
"{{count}} pages left in chapter_few": "Осталось {{count}} страницы в главе",
|
||||
"{{count}} pages left in chapter_many": "Осталось {{count}} страниц в главе",
|
||||
"{{count}} pages left in chapter_other": "Осталось {{count}} страниц в главе",
|
||||
"{{count}} pages left in chapter_one": "<1>Осталась </1><0>{{count}}</0><1> страница в главе</1>",
|
||||
"{{count}} pages left in chapter_few": "<1>Осталось </1><0>{{count}}</0><1> страницы в главе</1>",
|
||||
"{{count}} pages left in chapter_many": "<1>Осталось </1><0>{{count}}</0><1> страниц в главе</1>",
|
||||
"{{count}} pages left in chapter_other": "<1>Осталось </1><0>{{count}}</0><1> страниц в главе</1>",
|
||||
"Show Remaining Pages": "Показать оставшиеся страницы",
|
||||
"Source Han Serif CN VF": "Source Han Serif",
|
||||
"Huiwen-mincho": "Huiwen Mincho",
|
||||
"Source Han Serif CN": "Source Han Serif",
|
||||
"Huiwen-MinchoGBK": "Huiwen Mincho",
|
||||
"KingHwa_OldSong": "KingHwa Song",
|
||||
"Manage Subscription": "Управление подпиской",
|
||||
"Coming Soon": "Скоро будет",
|
||||
@@ -611,11 +606,10 @@
|
||||
"Size": "Размер",
|
||||
"Cover": "Обложка",
|
||||
"Contain": "Содержать",
|
||||
"{{number}} pages left in chapter": "Осталось {{number}} страниц в главе",
|
||||
"{{number}} pages left in chapter": "<1>Осталось </1><0>{{number}}</0><1> страниц в главе</1>",
|
||||
"Device": "Устройство",
|
||||
"E-Ink Mode": "E-Ink режим",
|
||||
"Highlight Colors": "Цвета выделения",
|
||||
"Auto Screen Brightness": "Автояркость экрана",
|
||||
"Pagination": "Пагинация",
|
||||
"Disable Double Tap": "Отключить двойной тап",
|
||||
"Tap to Paginate": "Тапните, чтобы разбить на страницы",
|
||||
@@ -664,5 +658,475 @@
|
||||
"Update email": "Обновить электронную почту",
|
||||
"Current email": "Текущий адрес электронной почты",
|
||||
"Update Email": "Обновить электронную почту",
|
||||
"All": "Все"
|
||||
"All": "Все",
|
||||
"Unable to open book": "Не удалось открыть книгу",
|
||||
"Punctuation": "Пунктуация",
|
||||
"Replace Quotation Marks": "Заменить кавычки",
|
||||
"Enabled only in vertical layout.": "Включено только в вертикальной раскладке.",
|
||||
"No Conversion": "Без преобразования",
|
||||
"Simplified to Traditional": "Упрощённый → Традиционный",
|
||||
"Traditional to Simplified": "Традиционный → Упрощённый",
|
||||
"Simplified to Traditional (Taiwan)": "Упрощённый → Традиционный (Тайвань)",
|
||||
"Simplified to Traditional (Hong Kong)": "Упрощённый → Традиционный (Гонконг)",
|
||||
"Simplified to Traditional (Taiwan), with phrases": "Упрощённый → Традиционный (Тайвань • фразы)",
|
||||
"Traditional (Taiwan) to Simplified": "Традиционный (Тайвань) → Упрощённый",
|
||||
"Traditional (Hong Kong) to Simplified": "Традиционный (Гонконг) → Упрощённый",
|
||||
"Traditional (Taiwan) to Simplified, with phrases": "Традиционный (Тайвань • фразы) → Упрощённый",
|
||||
"Convert Simplified and Traditional Chinese": "Преобразовать упрощённый/традиционный китайский",
|
||||
"Convert Mode": "Режим преобразования",
|
||||
"Failed to auto-save book cover for lock screen: {{error}}": "Не удалось автоматически сохранить обложку книги для экрана блокировки: {{error}}",
|
||||
"Download from Cloud": "Скачать из облака",
|
||||
"Upload to Cloud": "Загрузить в облако",
|
||||
"Clear Custom Fonts": "Очистить пользовательские шрифты",
|
||||
"Columns": "Колонки",
|
||||
"OPDS Catalogs": "Каталоги OPDS",
|
||||
"Adding LAN addresses is not supported in the web app version.": "Добавление LAN-адресов не поддерживается в веб-версии.",
|
||||
"Invalid OPDS catalog. Please check the URL.": "Недействительный каталог OPDS. Пожалуйста, проверьте URL.",
|
||||
"Browse and download books from online catalogs": "Просматривать и скачивать книги из онлайн-каталогов",
|
||||
"My Catalogs": "Мои каталоги",
|
||||
"Add Catalog": "Добавить каталог",
|
||||
"No catalogs yet": "Каталоги отсутствуют",
|
||||
"Add your first OPDS catalog to start browsing books": "Добавьте первый каталог OPDS, чтобы начать просмотр книг",
|
||||
"Add Your First Catalog": "Добавьте первый каталог",
|
||||
"Browse": "Просмотр",
|
||||
"Popular Catalogs": "Популярные каталоги",
|
||||
"Add": "Добавить",
|
||||
"Add OPDS Catalog": "Добавить каталог OPDS",
|
||||
"Catalog Name": "Название каталога",
|
||||
"My Calibre Library": "Моя библиотека Calibre",
|
||||
"OPDS URL": "URL OPDS",
|
||||
"Username (optional)": "Имя пользователя (необязательно)",
|
||||
"Password (optional)": "Пароль (необязательно)",
|
||||
"Description (optional)": "Описание (необязательно)",
|
||||
"A brief description of this catalog": "Краткое описание каталога",
|
||||
"Validating...": "Проверка...",
|
||||
"View All": "Посмотреть все",
|
||||
"Forward": "Вперёд",
|
||||
"Home": "Главная",
|
||||
"{{count}} items_one": "{{count}} элемент",
|
||||
"{{count}} items_few": "{{count}} элемента",
|
||||
"{{count}} items_many": "{{count}} элементов",
|
||||
"{{count}} items_other": "{{count}} элемента",
|
||||
"Download completed": "Загрузка завершена",
|
||||
"Download failed": "Загрузка не удалась",
|
||||
"Open Access": "Открытый доступ",
|
||||
"Borrow": "Взять в аренду",
|
||||
"Buy": "Купить",
|
||||
"Subscribe": "Подписаться",
|
||||
"Sample": "Образец",
|
||||
"Download": "Скачать",
|
||||
"Open & Read": "Открыть и читать",
|
||||
"Tags": "Теги",
|
||||
"Tag": "Тег",
|
||||
"First": "Первая",
|
||||
"Previous": "Предыдущая",
|
||||
"Next": "Следующая",
|
||||
"Last": "Последняя",
|
||||
"Cannot Load Page": "Не удалось загрузить страницу",
|
||||
"An error occurred": "Произошла ошибка",
|
||||
"Online Library": "Онлайн библиотека",
|
||||
"URL must start with http:// or https://": "URL должен начинаться с http:// или https://",
|
||||
"Title, Author, Tag, etc...": "Название, Автор, Тег и т.д...",
|
||||
"Query": "Запрос",
|
||||
"Subject": "Тема",
|
||||
"Enter {{terms}}": "Введите {{terms}}",
|
||||
"No search results found": "Результаты поиска не найдены",
|
||||
"Failed to load OPDS feed: {{status}} {{statusText}}": "Не удалось загрузить ленту OPDS: {{status}} {{statusText}}",
|
||||
"Search in {{title}}": "Поиск в {{title}}",
|
||||
"Manage Storage": "Управление хранилищем",
|
||||
"Failed to load files": "Не удалось загрузить файлы",
|
||||
"Deleted {{count}} file(s)_one": "Удалён {{count}} файл",
|
||||
"Deleted {{count}} file(s)_few": "Удалено {{count}} файла",
|
||||
"Deleted {{count}} file(s)_many": "Удалено {{count}} файлов",
|
||||
"Deleted {{count}} file(s)_other": "Удалён {{count}} файл",
|
||||
"Failed to delete {{count}} file(s)_one": "Не удалось удалить {{count}} файл",
|
||||
"Failed to delete {{count}} file(s)_few": "Не удалось удалить {{count}} файла",
|
||||
"Failed to delete {{count}} file(s)_many": "Не удалось удалить {{count}} файлов",
|
||||
"Failed to delete {{count}} file(s)_other": "Не удалось удалить {{count}} файл",
|
||||
"Failed to delete files": "Не удалось удалить файлы",
|
||||
"Total Files": "Всего файлов",
|
||||
"Total Size": "Общий размер",
|
||||
"Quota": "Квота",
|
||||
"Used": "Использовано",
|
||||
"Files": "Файлы",
|
||||
"Search files...": "Поиск файлов...",
|
||||
"Newest First": "Сначала новые",
|
||||
"Oldest First": "Сначала старые",
|
||||
"Largest First": "Сначала крупные",
|
||||
"Smallest First": "Сначала мелкие",
|
||||
"Name A-Z": "Имя A-Z",
|
||||
"Name Z-A": "Имя Z-A",
|
||||
"{{count}} selected_one": "{{count}} выбранный",
|
||||
"{{count}} selected_few": "{{count}} выбранных",
|
||||
"{{count}} selected_many": "{{count}} выбранных",
|
||||
"{{count}} selected_other": "{{count}} выбранный",
|
||||
"Delete Selected": "Удалить выбранные",
|
||||
"Created": "Создано",
|
||||
"No files found": "Файлы не найдены",
|
||||
"No files uploaded yet": "Файлы ещё не загружены",
|
||||
"files": "файлы",
|
||||
"Page {{current}} of {{total}}": "Страница {{current}} из {{total}}",
|
||||
"Are you sure to delete {{count}} selected file(s)?_one": "Вы уверены, что хотите удалить {{count}} выбранный файл?",
|
||||
"Are you sure to delete {{count}} selected file(s)?_few": "Вы уверены, что хотите удалить {{count}} выбранных файла?",
|
||||
"Are you sure to delete {{count}} selected file(s)?_many": "Вы уверены, что хотите удалить {{count}} выбранных файлов?",
|
||||
"Are you sure to delete {{count}} selected file(s)?_other": "Вы уверены, что хотите удалить {{count}} выбранный файл?",
|
||||
"Cloud Storage Usage": "Использование облачного хранилища",
|
||||
"Rename Group": "Переименовать группу",
|
||||
"From Directory": "Из каталога",
|
||||
"Successfully imported {{count}} book(s)_one": "Успешно импортирован 1 книга",
|
||||
"Successfully imported {{count}} book(s)_few": "Успешно импортировано {{count}} книги",
|
||||
"Successfully imported {{count}} book(s)_many": "Успешно импортировано {{count}} книг",
|
||||
"Successfully imported {{count}} book(s)_other": "Успешно импортировано {{count}} книг",
|
||||
"Count": "Количество",
|
||||
"Start Page": "Начальная страница",
|
||||
"Search in OPDS Catalog...": "Поиск в каталоге OPDS...",
|
||||
"Please log in to use advanced TTS features": "Пожалуйста, войдите в систему, чтобы использовать расширенные функции TTS",
|
||||
"Word limit of 30 words exceeded.": "Превышен лимит в 30 слов.",
|
||||
"Proofread": "Корректура",
|
||||
"Current selection": "Текущее выделение",
|
||||
"All occurrences in this book": "Все вхождения в этой книге",
|
||||
"All occurrences in your library": "Все вхождения в вашей библиотеке",
|
||||
"Selected text:": "Выделенный текст:",
|
||||
"Replace with:": "Заменить на:",
|
||||
"Enter text...": "Введите текст…",
|
||||
"Case sensitive:": "Учитывать регистр:",
|
||||
"Scope:": "Область применения:",
|
||||
"Selection": "Выделение",
|
||||
"Library": "Библиотека",
|
||||
"Yes": "Да",
|
||||
"No": "Нет",
|
||||
"Proofread Replacement Rules": "Правила замены для корректуры",
|
||||
"Selected Text Rules": "Правила для выделенного текста",
|
||||
"No selected text replacement rules": "Нет правил замены для выделенного текста",
|
||||
"Book Specific Rules": "Правила для конкретной книги",
|
||||
"No book-level replacement rules": "Нет правил замены на уровне книги",
|
||||
"Disable Quick Action": "Отключить быстрые действия",
|
||||
"Enable Quick Action on Selection": "Включить быстрые действия при выборе",
|
||||
"None": "Нет",
|
||||
"Annotation Tools": "Инструменты для аннотаций",
|
||||
"Enable Quick Actions": "Включить быстрые действия",
|
||||
"Quick Action": "Быстрое действие",
|
||||
"Copy to Notebook": "Скопировать в блокнот",
|
||||
"Copy text after selection": "Копировать текст после выделения",
|
||||
"Highlight text after selection": "Выделить текст после выделения",
|
||||
"Annotate text after selection": "Аннотировать текст после выделения",
|
||||
"Search text after selection": "Искать текст после выделения",
|
||||
"Look up text in dictionary after selection": "Искать текст в словаре после выделения",
|
||||
"Look up text in Wikipedia after selection": "Искать текст в Википедии после выделения",
|
||||
"Translate text after selection": "Перевести текст после выделения",
|
||||
"Read text aloud after selection": "Прочитать текст вслух после выделения",
|
||||
"Proofread text after selection": "Корректировать текст после выделения",
|
||||
"{{activeCount}} active, {{pendingCount}} pending": "{{activeCount}} активных, {{pendingCount}} ожидающих",
|
||||
"{{failedCount}} failed": "{{failedCount}} неудачных",
|
||||
"Waiting...": "Ожидание...",
|
||||
"Failed": "Ошибка",
|
||||
"Completed": "Завершено",
|
||||
"Cancelled": "Отменено",
|
||||
"Retry": "Повторить",
|
||||
"Active": "Активные",
|
||||
"Transfer Queue": "Очередь передачи",
|
||||
"Upload All": "Загрузить все",
|
||||
"Download All": "Скачать все",
|
||||
"Resume Transfers": "Возобновить передачу",
|
||||
"Pause Transfers": "Приостановить передачу",
|
||||
"Pending": "Ожидающие",
|
||||
"No transfers": "Нет передач",
|
||||
"Retry All": "Повторить все",
|
||||
"Clear Completed": "Очистить завершенные",
|
||||
"Clear Failed": "Очистить неудачные",
|
||||
"Upload queued: {{title}}": "Загрузка в очереди: {{title}}",
|
||||
"Download queued: {{title}}": "Скачивание в очереди: {{title}}",
|
||||
"Book not found in library": "Книга не найдена в библиотеке",
|
||||
"Unknown error": "Неизвестная ошибка",
|
||||
"Please log in to continue": "Войдите, чтобы продолжить",
|
||||
"Cloud File Transfers": "Передача файлов в облако",
|
||||
"Show Search Results": "Показать результаты",
|
||||
"Search results for '{{term}}'": "Результаты для «{{term}}»",
|
||||
"Close Search": "Закрыть поиск",
|
||||
"Previous Result": "Предыдущий результат",
|
||||
"Next Result": "Следующий результат",
|
||||
"Bookmarks": "Закладки",
|
||||
"Annotations": "Аннотации",
|
||||
"Show Results": "Показать результаты",
|
||||
"Clear search": "Очистить поиск",
|
||||
"Clear search history": "Очистить историю поиска",
|
||||
"Tap to Toggle Footer": "Нажмите для переключения нижнего колонтитула",
|
||||
"Show Current Time": "Показать текущее время",
|
||||
"Use 24 Hour Clock": "Использовать 24-часовой формат",
|
||||
"Show Current Battery Status": "Показать текущее состояние батареи",
|
||||
"Exported successfully": "Успешно экспортировано",
|
||||
"Book exported successfully.": "Книга успешно экспортирована.",
|
||||
"Failed to export the book.": "Не удалось экспортировать книгу.",
|
||||
"Export Book": "Экспорт книги",
|
||||
"Whole word:": "Слово целиком:",
|
||||
"Error": "Ошибка",
|
||||
"Unable to load the article. Try searching directly on {{link}}.": "Не удалось загрузить статью. Попробуйте искать напрямую на {{link}}.",
|
||||
"Unable to load the word. Try searching directly on {{link}}.": "Не удалось загрузить слово. Попробуйте искать напрямую на {{link}}.",
|
||||
"Date Published": "Дата публикации",
|
||||
"Only for TTS:": "Только для TTS:",
|
||||
"Uploaded": "Загружено",
|
||||
"Downloaded": "Скачано",
|
||||
"Deleted": "Удалено",
|
||||
"Note:": "Примечание:",
|
||||
"Time:": "Время:",
|
||||
"Format Options": "Параметры формата",
|
||||
"Export Date": "Дата экспорта",
|
||||
"Chapter Titles": "Названия глав",
|
||||
"Chapter Separator": "Разделитель глав",
|
||||
"Highlights": "Выделения",
|
||||
"Note Date": "Дата примечания",
|
||||
"Advanced": "Дополнительно",
|
||||
"Hide": "Скрыть",
|
||||
"Show": "Показать",
|
||||
"Use Custom Template": "Использовать свой шаблон",
|
||||
"Export Template": "Шаблон экспорта",
|
||||
"Template Syntax:": "Синтаксис шаблона:",
|
||||
"Insert value": "Вставить значение",
|
||||
"Format date (locale)": "Форматировать дату (локаль)",
|
||||
"Format date (custom)": "Форматировать дату (свой)",
|
||||
"Conditional": "Условный",
|
||||
"Loop": "Цикл",
|
||||
"Available Variables:": "Доступные переменные:",
|
||||
"Book title": "Название книги",
|
||||
"Book author": "Автор книги",
|
||||
"Export date": "Дата экспорта",
|
||||
"Array of chapters": "Массив глав",
|
||||
"Chapter title": "Название главы",
|
||||
"Array of annotations": "Массив примечаний",
|
||||
"Highlighted text": "Выделенный текст",
|
||||
"Annotation note": "Примечание аннотации",
|
||||
"Date Format Tokens:": "Токены формата даты:",
|
||||
"Year (4 digits)": "Год (4 цифры)",
|
||||
"Month (01-12)": "Месяц (01-12)",
|
||||
"Day (01-31)": "День (01-31)",
|
||||
"Hour (00-23)": "Час (00-23)",
|
||||
"Minute (00-59)": "Минута (00-59)",
|
||||
"Second (00-59)": "Секунда (00-59)",
|
||||
"Show Source": "Показать источник",
|
||||
"No content to preview": "Нет содержимого для просмотра",
|
||||
"Export": "Экспортировать",
|
||||
"Set Timeout": "Установить тайм-аут",
|
||||
"Select Voice": "Выбрать голос",
|
||||
"Toggle Sticky Bottom TTS Bar": "Переключить закреплённую панель TTS",
|
||||
"Display what I'm reading on Discord": "Показывать книгу в Discord",
|
||||
"Show on Discord": "Показать в Discord",
|
||||
"Instant {{action}}": "Мгновенное {{action}}",
|
||||
"Instant {{action}} Disabled": "Мгновенное {{action}} отключено",
|
||||
"Annotation": "Аннотация",
|
||||
"Reset Template": "Сбросить шаблон",
|
||||
"Annotation style": "Стиль аннотации",
|
||||
"Annotation color": "Цвет аннотации",
|
||||
"Annotation time": "Время аннотации",
|
||||
"AI": "ИИ",
|
||||
"Are you sure you want to re-index this book?": "Вы уверены, что хотите переиндексировать эту книгу?",
|
||||
"Enable AI in Settings": "Включить ИИ в настройках",
|
||||
"Index This Book": "Индексировать эту книгу",
|
||||
"Enable AI search and chat for this book": "Включить ИИ-поиск и чат для этой книги",
|
||||
"Start Indexing": "Начать индексацию",
|
||||
"Indexing book...": "Индексация книги...",
|
||||
"Preparing...": "Подготовка...",
|
||||
"Delete this conversation?": "Удалить этот разговор?",
|
||||
"No conversations yet": "Пока нет разговоров",
|
||||
"Start a new chat to ask questions about this book": "Начните новый чат, чтобы задать вопросы об этой книге",
|
||||
"Rename": "Переименовать",
|
||||
"New Chat": "Новый чат",
|
||||
"Chat": "Чат",
|
||||
"Please enter a model ID": "Пожалуйста, введите ID модели",
|
||||
"Model not available or invalid": "Модель недоступна или недействительна",
|
||||
"Failed to validate model": "Не удалось проверить модель",
|
||||
"Couldn't connect to Ollama. Is it running?": "Не удалось подключиться к Ollama. Он запущен?",
|
||||
"Invalid API key or connection failed": "Недействительный API-ключ или ошибка подключения",
|
||||
"Connection failed": "Ошибка подключения",
|
||||
"AI Assistant": "ИИ-ассистент",
|
||||
"Enable AI Assistant": "Включить ИИ-ассистента",
|
||||
"Provider": "Провайдер",
|
||||
"Ollama (Local)": "Ollama (Локальный)",
|
||||
"AI Gateway (Cloud)": "ИИ-шлюз (Облако)",
|
||||
"Ollama Configuration": "Настройка Ollama",
|
||||
"Refresh Models": "Обновить модели",
|
||||
"AI Model": "ИИ-модель",
|
||||
"No models detected": "Модели не обнаружены",
|
||||
"AI Gateway Configuration": "Настройка ИИ-шлюза",
|
||||
"Choose from a selection of high-quality, economical AI models. You can also bring your own model by selecting \"Custom Model\" below.": "Выберите из высококачественных, экономичных ИИ-моделей. Вы также можете использовать свою модель, выбрав \"Пользовательская модель\" ниже.",
|
||||
"API Key": "API-ключ",
|
||||
"Get Key": "Получить ключ",
|
||||
"Model": "Модель",
|
||||
"Custom Model...": "Пользовательская модель...",
|
||||
"Custom Model ID": "ID пользовательской модели",
|
||||
"Validate": "Проверить",
|
||||
"Model available": "Модель доступна",
|
||||
"Connection": "Соединение",
|
||||
"Test Connection": "Проверить соединение",
|
||||
"Connected": "Подключено",
|
||||
"Custom Colors": "Пользовательские цвета",
|
||||
"Color E-Ink Mode": "Режим цветных электронных чернил",
|
||||
"Reading Ruler": "Линейка для чтения",
|
||||
"Enable Reading Ruler": "Включить линейку для чтения",
|
||||
"Lines to Highlight": "Строк для выделения",
|
||||
"Ruler Color": "Цвет линейки",
|
||||
"Command Palette": "Палитра команд",
|
||||
"Search settings and actions...": "Поиск настроек и действий...",
|
||||
"No results found for": "Результатов не найдено для",
|
||||
"Type to search settings and actions": "Введите для поиска настроек и действий",
|
||||
"Recent": "Недавние",
|
||||
"navigate": "навигация",
|
||||
"select": "выбрать",
|
||||
"close": "закрыть",
|
||||
"Search Settings": "Поиск настроек",
|
||||
"Page Margins": "Поля страницы",
|
||||
"AI Provider": "Провайдер ИИ",
|
||||
"Ollama URL": "URL Ollama",
|
||||
"Ollama Model": "Модель Ollama",
|
||||
"AI Gateway Model": "Модель AI Gateway",
|
||||
"Actions": "Действия",
|
||||
"Navigation": "Навигация",
|
||||
"Set status for {{count}} book(s)_one": "Установить статус для {{count}} книги",
|
||||
"Set status for {{count}} book(s)_other": "Установить статус для {{count}} книг",
|
||||
"Mark as Unread": "Отметить как непрочитанное",
|
||||
"Mark as Finished": "Отметить как прочитанное",
|
||||
"Finished": "Прочитано",
|
||||
"Unread": "Не прочитано",
|
||||
"Clear Status": "Очистить статус",
|
||||
"Status": "Статус",
|
||||
"Set status for {{count}} book(s)_few": "Установить статус для {{count}} книг",
|
||||
"Set status for {{count}} book(s)_many": "Установить статус для {{count}} книг",
|
||||
"Loading": "Загрузка...",
|
||||
"Exit Paragraph Mode": "Выйти из режима абзаца",
|
||||
"Paragraph Mode": "Режим абзаца",
|
||||
"Embedding Model": "Модель встраивания",
|
||||
"{{count}} book(s) synced_one": "{{count}} книга синхронизирована",
|
||||
"{{count}} book(s) synced_few": "{{count}} книги синхронизированы",
|
||||
"{{count}} book(s) synced_many": "{{count}} книг синхронизировано",
|
||||
"{{count}} book(s) synced_other": "{{count}} книг синхронизировано",
|
||||
"Unable to start RSVP": "Не удалось запустить RSVP",
|
||||
"RSVP not supported for PDF": "RSVP не поддерживается для PDF",
|
||||
"Select Chapter": "Выбрать главу",
|
||||
"Context": "Контекст",
|
||||
"Ready": "Готово",
|
||||
"Chapter Progress": "Прогресс главы",
|
||||
"words": "слов",
|
||||
"{{time}} left": "осталось {{time}}",
|
||||
"Reading progress": "Прогресс чтения",
|
||||
"Click to seek": "Нажмите для поиска",
|
||||
"Skip back 15 words": "Назад на 15 слов",
|
||||
"Back 15 words (Shift+Left)": "Назад на 15 слов (Shift+Влево)",
|
||||
"Pause (Space)": "Пауза (Пробел)",
|
||||
"Play (Space)": "Воспроизведение (Пробел)",
|
||||
"Skip forward 15 words": "Вперед на 15 слов",
|
||||
"Forward 15 words (Shift+Right)": "Вперед на 15 слов (Shift+Вправо)",
|
||||
"Decrease speed": "Уменьшить скорость",
|
||||
"Slower (Left/Down)": "Медленнее (Влево/Вниз)",
|
||||
"Increase speed": "Увеличить скорость",
|
||||
"Faster (Right/Up)": "Быстрее (Вправо/Вверх)",
|
||||
"Start RSVP Reading": "Начать чтение RSVP",
|
||||
"Choose where to start reading": "Выберите, где начать чтение",
|
||||
"From Chapter Start": "С начала главы",
|
||||
"Start reading from the beginning of the chapter": "Начать чтение с начала главы",
|
||||
"Resume": "Продолжить",
|
||||
"Continue from where you left off": "Продолжить с того места, где вы остановились",
|
||||
"From Current Page": "С текущей страницы",
|
||||
"Start from where you are currently reading": "Начать с того места, где вы сейчас читаете",
|
||||
"From Selection": "Из выбранного",
|
||||
"Speed Reading Mode": "Режим быстрого чтения",
|
||||
"Scroll left": "Прокрутить влево",
|
||||
"Scroll right": "Прокрутить вправо",
|
||||
"Library Sync Progress": "Прогресс синхронизации библиотеки",
|
||||
"Back to library": "Назад в библиотеку",
|
||||
"Group by...": "Группировать по...",
|
||||
"Export as Plain Text": "Экспортировать как обычный текст",
|
||||
"Export as Markdown": "Экспортировать как Markdown",
|
||||
"Show Page Navigation Buttons": "Кнопки навигации",
|
||||
"Page {{number}}": "Страница {{number}}",
|
||||
"highlight": "выделение",
|
||||
"underline": "подчеркивание",
|
||||
"squiggly": "волнистая линия",
|
||||
"red": "красный",
|
||||
"violet": "фиолетовый",
|
||||
"blue": "синий",
|
||||
"green": "зеленый",
|
||||
"yellow": "желтый",
|
||||
"Select {{style}} style": "Выбрать стиль {{style}}",
|
||||
"Select {{color}} color": "Выбрать цвет {{color}}",
|
||||
"Close Book": "Закрыть книгу",
|
||||
"Speed Reading": "Скорочтение",
|
||||
"Close Speed Reading": "Закрыть скорочтение",
|
||||
"Authors": "Авторы",
|
||||
"Books": "Книги",
|
||||
"Groups": "Группы",
|
||||
"Back to TTS Location": "Вернуться к местоположению TTS",
|
||||
"Metadata": "Метаданные",
|
||||
"Image viewer": "Просмотрщик изображений",
|
||||
"Previous Image": "Предыдущее изображение",
|
||||
"Next Image": "Следующее изображение",
|
||||
"Zoomed": "Увеличено",
|
||||
"Zoom level": "Уровень масштаба",
|
||||
"Table viewer": "Просмотрщик таблиц",
|
||||
"Unable to connect to Readwise. Please check your network connection.": "Не удалось подключиться к Readwise. Пожалуйста, проверьте ваше сетевое соединение.",
|
||||
"Invalid Readwise access token": "Недействительный токен доступа Readwise",
|
||||
"Disconnected from Readwise": "Отключено от Readwise",
|
||||
"Never": "Никогда",
|
||||
"Readwise Settings": "Настройки Readwise",
|
||||
"Connected to Readwise": "Подключено к Readwise",
|
||||
"Last synced: {{time}}": "Последняя синхронизация: {{time}}",
|
||||
"Sync Enabled": "Синхронизация включена",
|
||||
"Disconnect": "Отключить",
|
||||
"Connect your Readwise account to sync highlights.": "Подключите ваш аккаунт Readwise для синхронизации выделений.",
|
||||
"Get your access token at": "Получите ваш токен доступа на",
|
||||
"Access Token": "Токен доступа",
|
||||
"Paste your Readwise access token": "Вставьте ваш токен доступа Readwise",
|
||||
"Config": "Конфигурация",
|
||||
"Readwise Sync": "Синхронизация Readwise",
|
||||
"Push Highlights": "Отправить выделения",
|
||||
"Highlights synced to Readwise": "Выделения синхронизированы с Readwise",
|
||||
"Readwise sync failed: no internet connection": "Синхронизация Readwise не удалась: нет интернет-соединения",
|
||||
"Readwise sync failed: {{error}}": "Синхронизация Readwise не удалась: {{error}}",
|
||||
"System Screen Brightness": "Систেমная яркость экрана",
|
||||
"Page:": "Страница:",
|
||||
"Page: {{number}}": "Страница: {{number}}",
|
||||
"Annotation page number": "Номер страницы аннотации",
|
||||
"Translating...": "Перевод...",
|
||||
"Show Battery Percentage": "Показывать процент заряда батареи",
|
||||
"Hide Scrollbar": "Скрыть полосу прокрутки",
|
||||
"Skip to last reading position": "Перейти к последней позиции чтения",
|
||||
"Show context": "Показать контекст",
|
||||
"Hide context": "Скрыть контекст",
|
||||
"Decrease font size": "Уменьшить размер шрифта",
|
||||
"Increase font size": "Увеличить размер шрифта",
|
||||
"Focus": "Фокус",
|
||||
"Theme color": "Цвет темы",
|
||||
"Import failed": "Ошибка импорта",
|
||||
"Available Formatters:": "Доступные форматеры:",
|
||||
"Format date": "Форматировать дату",
|
||||
"Markdown block quote (> per line)": "Цитата Markdown (> для каждой строки)",
|
||||
"Newlines to <br>": "Переносы строк в <br>",
|
||||
"Change case": "Изменить регистр",
|
||||
"Trim whitespace": "Удалить пробелы",
|
||||
"Truncate to n characters": "Обрезать до n символов",
|
||||
"Replace text": "Заменить текст",
|
||||
"Fallback value": "Значение по умолчанию",
|
||||
"Get length": "Получить длину",
|
||||
"First/last element": "Первый/последний элемент",
|
||||
"Join array": "Объединить массив",
|
||||
"Backup failed: {{error}}": "Ошибка резервного копирования: {{error}}",
|
||||
"Select Backup": "Выбрать резервную копию",
|
||||
"Restore failed: {{error}}": "Ошибка восстановления: {{error}}",
|
||||
"Backup & Restore": "Резервное копирование и восстановление",
|
||||
"Create a backup of your library or restore from a previous backup. Restoring will merge with your current library.": "Создайте резервную копию библиотеки или восстановите из предыдущей копии. Восстановление будет объединено с текущей библиотекой.",
|
||||
"Backup Library": "Резервная копия библиотеки",
|
||||
"Restore Library": "Восстановить библиотеку",
|
||||
"Creating backup...": "Создание резервной копии...",
|
||||
"Restoring library...": "Восстановление библиотеки...",
|
||||
"{{current}} of {{total}} items": "{{current}} из {{total}} элементов",
|
||||
"Backup completed successfully!": "Резервное копирование завершено!",
|
||||
"Restore completed successfully!": "Восстановление завершено!",
|
||||
"Your library has been saved to the selected location.": "Ваша библиотека сохранена в выбранном месте.",
|
||||
"{{added}} books added, {{updated}} books updated.": "Добавлено {{added}} книг, обновлено {{updated}} книг.",
|
||||
"Operation failed": "Операция не удалась",
|
||||
"Loading library...": "Загрузка библиотеки...",
|
||||
"{{count}} books refreshed_one": "Обновлена {{count}} книга",
|
||||
"{{count}} books refreshed_few": "Обновлено {{count}} книги",
|
||||
"{{count}} books refreshed_many": "Обновлено {{count}} книг",
|
||||
"{{count}} books refreshed_other": "Обновлено {{count}} книг",
|
||||
"Failed to refresh metadata": "Не удалось обновить метаданные",
|
||||
"Refresh Metadata": "Обновить метаданные"
|
||||
}
|
||||
|
||||
@@ -24,9 +24,6 @@
|
||||
"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": "මුරපදය යාවත්කාලීන කරන්න",
|
||||
@@ -189,8 +186,8 @@
|
||||
"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}} ක් ඉතිරි",
|
||||
"{{count}} pages left in chapter_one": "<1>පරිච්ඡේදයේ පිටුව 1 ක් ඉතිරි</1>",
|
||||
"{{count}} pages left in chapter_other": "<1>පරිච්ඡේදයේ පිටු </1><0>{{count}}</0><1> ක් ඉතිරි</1>",
|
||||
"Theme Mode": "තේමා ආකාරය",
|
||||
"Invert Image In Dark Mode": "අඳුරු ආකාරයේදී රූපය පරිවර්තනය කරන්න",
|
||||
"Override Book Color": "පොතේ වර්ණය අභිබවන්න",
|
||||
@@ -293,7 +290,7 @@
|
||||
"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— විලියම් ශේක්ස්පියර්",
|
||||
"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": "තේමා නාමය",
|
||||
@@ -302,7 +299,6 @@
|
||||
"Link Color": "සබැඳි වර්ණය",
|
||||
"Preview": "පෙර දසුන",
|
||||
"Font & Layout": "අකුරු සහ පිරිසැලසුම",
|
||||
"Book Cover": "පොත් ආවරණය",
|
||||
"More Info": "තවත් තොරතුරු",
|
||||
"Parallel Read": "සමාන්තර කියවීම",
|
||||
"Disable": "අබල කරන්න",
|
||||
@@ -323,7 +319,6 @@
|
||||
"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}}",
|
||||
@@ -489,8 +484,8 @@
|
||||
"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",
|
||||
"Source Han Serif CN": "Source Han Serif CN",
|
||||
"Huiwen-MinchoGBK": "Huiwen Mincho",
|
||||
"KingHwa_OldSong": "KingHwa_OldSong",
|
||||
"Google Books": "Google Books",
|
||||
"Open Library": "Open Library",
|
||||
@@ -603,11 +598,10 @@
|
||||
"Size": "ප්රමාණය",
|
||||
"Cover": "ආවරණය",
|
||||
"Contain": "අඩංගු වන්න",
|
||||
"{{number}} pages left in chapter": "පරිච්ඡේදයේ පිටු {{number}} ඉතිරිව ඇත",
|
||||
"{{number}} pages left in chapter": "<1>පරිච්ඡේදයේ පිටු </1><0>{{number}}</0><1> ඉතිරිව ඇත</1>",
|
||||
"Device": "උපකරණය",
|
||||
"E-Ink Mode": "E-Ink ආකාරය",
|
||||
"Highlight Colors": "ඉස්මතු වර්ණ",
|
||||
"Auto Screen Brightness": "ස්වයංක්රීය තිර දිදුලනුම",
|
||||
"Pagination": "පිටුගත කිරීම",
|
||||
"Disable Double Tap": "දෙවරක් ටැප් කිරීම අබල කරන්න",
|
||||
"Tap to Paginate": "පිටුගත කිරීමට ටැප් කරන්න",
|
||||
@@ -656,5 +650,457 @@
|
||||
"Update email": "විද්යුත් තැපැල් යාවත්කාලීන කරන්න",
|
||||
"Current email": "වත්මන් විද්යුත් තැපැල්",
|
||||
"Update Email": "විද්යුත් තැපැල් යාවත්කාලීන කරන්න",
|
||||
"All": "සියල්ල"
|
||||
"All": "සියල්ල",
|
||||
"Unable to open book": "පොත විවෘත කිරීමට නොහැක",
|
||||
"Punctuation": "ලකුණු",
|
||||
"Replace Quotation Marks": "උද්ධෘත ලකුණු ප්රතිස්ථාපනය කරන්න",
|
||||
"Enabled only in vertical layout.": "සිරස් ආකෘතියේ පමණක් සක්රීයයි.",
|
||||
"No Conversion": "ප්රතිවර්තනයක් නැත",
|
||||
"Simplified to Traditional": "සරල → සාම්ප්රදායික",
|
||||
"Traditional to Simplified": "සාම්ප්රදායික → සරල",
|
||||
"Simplified to Traditional (Taiwan)": "සරල → සාම්ප්රදායික (තායිවான்)",
|
||||
"Simplified to Traditional (Hong Kong)": "සරල → සාම්ප්රදායික (හොං කොං)",
|
||||
"Simplified to Traditional (Taiwan), with phrases": "සරල → සාම්ප්රදායික (තායිවාන • වාක්ය)",
|
||||
"Traditional (Taiwan) to Simplified": "සාම්ප්රදායික (තායිවාන) → සරල",
|
||||
"Traditional (Hong Kong) to Simplified": "සාම්ප්රදායික (හොං කොං) → සරල",
|
||||
"Traditional (Taiwan) to Simplified, with phrases": "සාම්ප්රදායික (තායිවාන • වාක්ය) → සරල",
|
||||
"Convert Simplified and Traditional Chinese": "සරල/සාම්ප්රදායික චීන පරිවර්තනය",
|
||||
"Convert Mode": "පරිවර්තන මෝඩියුලය",
|
||||
"Failed to auto-save book cover for lock screen: {{error}}": "අගුළු තිරය සඳහා පොත් ආවරණය ස්වයංක්රීයව සුරකිීමට අසමත් විය: {{error}}",
|
||||
"Download from Cloud": "කලාඬයෙන් බාගත කරන්න",
|
||||
"Upload to Cloud": "කලාඬයට උඩුගත කරන්න",
|
||||
"Clear Custom Fonts": "අභිරුචි අකුරු පැහැදිලි කරන්න",
|
||||
"Columns": "තීරු",
|
||||
"OPDS Catalogs": "OPDS දත්තසමුදා",
|
||||
"Adding LAN addresses is not supported in the web app version.": "වෙබ් යෙදුම් අනුවාදයේ LAN ලිපින එක් කිරීම සහය නොදක්වයි.",
|
||||
"Invalid OPDS catalog. Please check the URL.": "අවලංගු OPDS දත්තසමුදායකි. කරුණාකර URL පරීක්ෂා කරන්න.",
|
||||
"Browse and download books from online catalogs": "ඔන්ලයින් දත්තසමුදා වලින් පොත් බ්රවුස් සහ බාගන්න",
|
||||
"My Catalogs": "මගේ දත්තසමුදා",
|
||||
"Add Catalog": "දත්තසමුදා එක් කරන්න",
|
||||
"No catalogs yet": "තවම දත්තසමුදා නැත",
|
||||
"Add your first OPDS catalog to start browsing books": "පොත් බ්රවුස් කිරීමට ඔබේ පළමු OPDS දත්තසමුදා එක් කරන්න",
|
||||
"Add Your First Catalog": "ඔබේ පළමු දත්තසමුදා එක් කරන්න",
|
||||
"Browse": "බ්රවුස් කරන්න",
|
||||
"Popular Catalogs": "ප්රසිද්ධ දත්තසමුදා",
|
||||
"Add": "එකතු කරන්න",
|
||||
"Add OPDS Catalog": "OPDS දත්තසමුදා එක් කරන්න",
|
||||
"Catalog Name": "දත්තසමුදා නාමය",
|
||||
"My Calibre Library": "මගේ Calibre පුස්තකාලය",
|
||||
"OPDS URL": "OPDS URL",
|
||||
"Username (optional)": "පරිශීලක නාමය (අත්යාවශ්ය නොවේ)",
|
||||
"Password (optional)": "මුරපදය (අත්යාවශ්ය නොවේ)",
|
||||
"Description (optional)": "විස්තරය (අත්යාවශ්ය නොවේ)",
|
||||
"A brief description of this catalog": "මෙම දත්තසමුදායේ කෙටි විස්තරයක්",
|
||||
"Validating...": "තහවුරු කරමින්...",
|
||||
"View All": "සියල්ල බලන්න",
|
||||
"Forward": "ඉදිරියට",
|
||||
"Home": "මුල් පිටුව",
|
||||
"{{count}} items_one": "{{count}} අයිතමය",
|
||||
"{{count}} items_other": "{{count}} අයිතම",
|
||||
"Download completed": "බාගත කිරීම සම්පූර්ණයි",
|
||||
"Download failed": "බාගත කිරීම අසාර්ථකයි",
|
||||
"Open Access": "විවෘත ප්රවේශය",
|
||||
"Borrow": "උधාර ගන්න",
|
||||
"Buy": "ගන්න",
|
||||
"Subscribe": "දායක වන්න",
|
||||
"Sample": "නම්නය",
|
||||
"Download": "බාගන්න",
|
||||
"Open & Read": "විවෘත කර කියවන්න",
|
||||
"Tags": "ටැග්",
|
||||
"Tag": "ටැග්",
|
||||
"First": "පළමුවා",
|
||||
"Previous": "පෙර",
|
||||
"Next": "ඊළඟ",
|
||||
"Last": "අවසාන",
|
||||
"Cannot Load Page": "පිටුවට ප්රවේශ විය නොහැක",
|
||||
"An error occurred": "දෝෂයක් සිදු විය",
|
||||
"Online Library": "ඔන්ලයින් පුස්තකාලය",
|
||||
"URL must start with http:// or https://": "URL එක http:// හෝ https:// සමඟ ආරම්භ විය යුතුය",
|
||||
"Title, Author, Tag, etc...": "ශීර්ෂය, කතුවරයා, ටැග්, ආදිය...",
|
||||
"Query": "විමසුම",
|
||||
"Subject": "විෂය",
|
||||
"Enter {{terms}}": "{{terms}} ඇතුළත් කරන්න",
|
||||
"No search results found": "සෙවුම් ප්රතිඵල නොමැත",
|
||||
"Failed to load OPDS feed: {{status}} {{statusText}}": "OPDS ආහාරය පූරණය කිරීමට අසමත් විය: {{status}} {{statusText}}",
|
||||
"Search in {{title}}": "{{title}} තුළ සෙවීම",
|
||||
"Manage Storage": "ගබඩා කළමනාකරණය කරන්න",
|
||||
"Failed to load files": "ගොනු උඩුගත කිරීමට නොහැකි විය",
|
||||
"Deleted {{count}} file(s)_one": "ගොනුව මකා දමා ඇත",
|
||||
"Deleted {{count}} file(s)_other": "ගොනු මකා දමා ඇත",
|
||||
"Failed to delete {{count}} file(s)_one": "ගොනුව මකා දැමිය නොහැකි විය",
|
||||
"Failed to delete {{count}} file(s)_other": "ගොනු මකා දැමිය නොහැකි විය",
|
||||
"Failed to delete files": "ගොනු මකා දැමිය නොහැකි විය",
|
||||
"Total Files": "මුළු ගොනු",
|
||||
"Total Size": "මුළු ප්රමාණය",
|
||||
"Quota": "කොටස",
|
||||
"Used": "භාවිතා කරන ලදී",
|
||||
"Files": "ගොනු",
|
||||
"Search files...": "ගොනු සොයන්න...",
|
||||
"Newest First": "නවතම පළමුව",
|
||||
"Oldest First": "පැරණිම පළමුව",
|
||||
"Largest First": "විශාලතම පළමුව",
|
||||
"Smallest First": "කුඩාතම පළමුව",
|
||||
"Name A-Z": "නම A-Z",
|
||||
"Name Z-A": "නම Z-A",
|
||||
"{{count}} selected_one": "තෝරාගත් ගොනුව",
|
||||
"{{count}} selected_other": "තෝරාගත් ගොනු",
|
||||
"Delete Selected": "තෝරාගත් මකා දමන්න",
|
||||
"Created": "තනන ලදී",
|
||||
"No files found": "ගොනු හමු නොවීය",
|
||||
"No files uploaded yet": "ගොනු තවම උඩුගත කර නැත",
|
||||
"files": "ගොනු",
|
||||
"Page {{current}} of {{total}}": "පිටුව {{current}} / {{total}}",
|
||||
"Are you sure to delete {{count}} selected file(s)?_one": "තෝරාගත් ගොනුව මකන්නට විශ්වාසද?",
|
||||
"Are you sure to delete {{count}} selected file(s)?_other": "තෝරාගත් ගොනු මකන්නට විශ්වාසද?",
|
||||
"Cloud Storage Usage": "කලාප ගබඩා භාවිතය",
|
||||
"Rename Group": "කණ්ඩායම නැවත නම් කරන්න",
|
||||
"From Directory": "ෆෝල්ඩරයෙන්",
|
||||
"Successfully imported {{count}} book(s)_one": "සාර්ථකව ආයාත කළ 1 පොත",
|
||||
"Successfully imported {{count}} book(s)_other": "සාර්ථකව ආයාත කළ {{count}} පොත්",
|
||||
"Count": "ගණන",
|
||||
"Start Page": "ආරම්භක පිටුව",
|
||||
"Search in OPDS Catalog...": "OPDS දත්තසමුදා තුළ සෙවීම...",
|
||||
"Please log in to use advanced TTS features": "උසස් TTS විශේෂාංග භාවිතා කිරීමට කරුණාකර පිවිසෙන්න",
|
||||
"Word limit of 30 words exceeded.": "වචන 30ක සීමාව ඉක්මවා ඇත.",
|
||||
"Proofread": "සංශෝධනය",
|
||||
"Current selection": "වත්මන් තේරීම",
|
||||
"All occurrences in this book": "මෙම පොත තුළ ඇති සියලුම පෙනීම්",
|
||||
"All occurrences in your library": "ඔබගේ පුස්තකාලයේ ඇති සියලුම පෙනීම්",
|
||||
"Selected text:": "තේරූ පෙළ:",
|
||||
"Replace with:": "මෙයින් ප්රතිස්ථාපනය කරන්න:",
|
||||
"Enter text...": "පෙළ ඇතුළත් කරන්න…",
|
||||
"Case sensitive:": "අකුරු විශාල/කුඩා භේදය සලකා බලන්න:",
|
||||
"Scope:": "පරාසය:",
|
||||
"Selection": "තේරීම",
|
||||
"Library": "පුස්තකාලය",
|
||||
"Yes": "ඔව්",
|
||||
"No": "නැහැ",
|
||||
"Proofread Replacement Rules": "සංශෝධන ප්රතිස්ථාපන නියමයන්",
|
||||
"Selected Text Rules": "තේරූ පෙළ සඳහා නියමයන්",
|
||||
"No selected text replacement rules": "තේරූ පෙළ සඳහා ප්රතිස්ථාපන නියමයන් නොමැත",
|
||||
"Book Specific Rules": "පොතට විශේෂිත නියමයන්",
|
||||
"No book-level replacement rules": "පොත් මට්ටමේ ප්රතිස්ථාපන නියමයන් නොමැත",
|
||||
"Disable Quick Action": "තට්ටු ක්රියාව අක්රිය කරන්න",
|
||||
"Enable Quick Action on Selection": "තෝරා ගැනීමේදී තට්ටු ක්රියාව සක්රීය කරන්න",
|
||||
"None": "කිසිවක් නැත",
|
||||
"Annotation Tools": "සටහන් මෙවලම්",
|
||||
"Enable Quick Actions": "තට්ටු ක්රියාවන් සක්රීය කරන්න",
|
||||
"Quick Action": "තට්ටු ක්රියාව",
|
||||
"Copy to Notebook": "සටහන් පොතට පිටපත් කරන්න",
|
||||
"Copy text after selection": "තේරීමෙන් පසු පෙළ පිටපත් කරන්න",
|
||||
"Highlight text after selection": "තේරීමෙන් පසු පෙළ හයිලයිට් කරන්න",
|
||||
"Annotate text after selection": "තේරීමෙන් පසු පෙළ සටහන් කරන්න",
|
||||
"Search text after selection": "තේරීමෙන් පසු පෙළ සෙවීම",
|
||||
"Look up text in dictionary after selection": "තේරීමෙන් පසු ශබ්දකෝෂයේ පෙළ සෙවීම",
|
||||
"Look up text in Wikipedia after selection": "තේරීමෙන් පසු විකිපීඩියාවේ පෙළ සෙවීම",
|
||||
"Translate text after selection": "තේරීමෙන් පසු පෙළ පරිවර්තනය කරන්න",
|
||||
"Read text aloud after selection": "තේරීමෙන් පසු පෙළ උච්චාරණය කරන්න",
|
||||
"Proofread text after selection": "තේරීමෙන් පසු පෙළ සංශෝධනය කරන්න",
|
||||
"{{activeCount}} active, {{pendingCount}} pending": "{{activeCount}} සක්රීය, {{pendingCount}} බලාපොරොත්තුවේ",
|
||||
"{{failedCount}} failed": "{{failedCount}} අසාර්ථක",
|
||||
"Waiting...": "බලාපොරොත්තුවේ...",
|
||||
"Failed": "අසාර්ථකයි",
|
||||
"Completed": "සම්පූර්ණයි",
|
||||
"Cancelled": "අවලංගුයි",
|
||||
"Retry": "නැවත උත්සාහ කරන්න",
|
||||
"Active": "සක්රීය",
|
||||
"Transfer Queue": "හුවමාරු පෝලිම",
|
||||
"Upload All": "සියල්ල උඩුගත කරන්න",
|
||||
"Download All": "සියල්ල බාගන්න",
|
||||
"Resume Transfers": "හුවමාරු නැවත ආරම්භ කරන්න",
|
||||
"Pause Transfers": "හුවමාරු විරාම කරන්න",
|
||||
"Pending": "බලාපොරොත්තුවේ",
|
||||
"No transfers": "හුවමාරු නැත",
|
||||
"Retry All": "සියල්ල නැවත උත්සාහ කරන්න",
|
||||
"Clear Completed": "සම්පූර්ණ කළ ඒවා මකන්න",
|
||||
"Clear Failed": "අසාර්ථක ඒවා මකන්න",
|
||||
"Upload queued: {{title}}": "උඩුගත කිරීම පෝලිමේ: {{title}}",
|
||||
"Download queued: {{title}}": "බාගත කිරීම පෝලිමේ: {{title}}",
|
||||
"Book not found in library": "පුස්තකාලයේ පොත හමු නොවීය",
|
||||
"Unknown error": "නොදන්නා දෝෂයක්",
|
||||
"Please log in to continue": "ඉදිරියට යාමට පිවිසෙන්න",
|
||||
"Cloud File Transfers": "කලාප ගොනු හුවමාරු",
|
||||
"Show Search Results": "සෙවුම් ප්රතිඵල පෙන්වන්න",
|
||||
"Search results for '{{term}}'": "'{{term}}' සඳහා ප්රතිඵල",
|
||||
"Close Search": "සෙවුම වසන්න",
|
||||
"Previous Result": "පෙර ප්රතිඵලය",
|
||||
"Next Result": "ඊළඟ ප්රතිඵලය",
|
||||
"Bookmarks": "පොත් සලකුණු",
|
||||
"Annotations": "අනුසටහන්",
|
||||
"Show Results": "ප්රතිඵල පෙන්වන්න",
|
||||
"Clear search": "සෙවුම හිස් කරන්න",
|
||||
"Clear search history": "සෙවුම් ඉතිහාසය හිස් කරන්න",
|
||||
"Tap to Toggle Footer": "පාදකය ටොගල් කිරීමට තට්ටු කරන්න",
|
||||
"Show Current Time": "වත්මන් වේලාව පෙන්වන්න",
|
||||
"Use 24 Hour Clock": "පැය 24 ඔරලෝසුව භාවිතා කරන්න",
|
||||
"Show Current Battery Status": "වත්මන් බැටරි තත්ත්වය පෙන්වන්න",
|
||||
"Exported successfully": "සාර්ථකව අපනයනය කරන ලදී",
|
||||
"Book exported successfully.": "පොත සාර්ථකව අපනයනය කරන ලදී.",
|
||||
"Failed to export the book.": "පොත අපනයනය කිරීමට අසමත් විය.",
|
||||
"Export Book": "පොත අපනයනය කරන්න",
|
||||
"Whole word:": "සම්පූර්ණ වචනය:",
|
||||
"Error": "දෝෂය",
|
||||
"Unable to load the article. Try searching directly on {{link}}.": "ලිපිය පූරණය කළ නොහැක. {{link}} හි කෙලින්ම සෙවීමට උත්සාහ කරන්න.",
|
||||
"Unable to load the word. Try searching directly on {{link}}.": "වචනය පූරණය කළ නොහැක. {{link}} හි කෙලින්ම සෙවීමට උත්සාහ කරන්න.",
|
||||
"Date Published": "ප්රකාශන දිනය",
|
||||
"Only for TTS:": "TTS සඳහා පමණක්:",
|
||||
"Uploaded": "උඩුගත කරන ලදී",
|
||||
"Downloaded": "බාගත කරන ලදී",
|
||||
"Deleted": "මකා දමන ලදී",
|
||||
"Note:": "සටහන:",
|
||||
"Time:": "කාලය:",
|
||||
"Format Options": "ආකෘති විකල්ප",
|
||||
"Export Date": "අපනයන දිනය",
|
||||
"Chapter Titles": "කොටස් මාතෘකා",
|
||||
"Chapter Separator": "කොටස් වෙන්කරු",
|
||||
"Highlights": "ඉස්මතු කිරීම්",
|
||||
"Note Date": "සටහන දිනය",
|
||||
"Advanced": "උසස්",
|
||||
"Hide": "සඟවන්න",
|
||||
"Show": "පෙන්වන්න",
|
||||
"Use Custom Template": "අභිරුචි සැකිල්ල භාවිතා කරන්න",
|
||||
"Export Template": "අපනයන සැකිල්ල",
|
||||
"Template Syntax:": "සැකිල්ලේ ව්යවස්ථාව:",
|
||||
"Insert value": "වටිනාකම ඇතුළත් කරන්න",
|
||||
"Format date (locale)": "දිනය ආකෘතිය (දේශීය)",
|
||||
"Format date (custom)": "අභිරුචි දිනය ආකෘතිය",
|
||||
"Conditional": "ශර්තමය",
|
||||
"Loop": "ලූප්",
|
||||
"Available Variables:": "ලබා ගත හැකි විචල්ය:",
|
||||
"Book title": "පොත් මාතෘකාව",
|
||||
"Book author": "පොත් රචකයා",
|
||||
"Export date": "අපනයන දිනය",
|
||||
"Array of chapters": "කොටස් අරය",
|
||||
"Chapter title": "කොටස් මාතෘකාව",
|
||||
"Array of annotations": "අනුසටහන් අරය",
|
||||
"Highlighted text": "ඉස්මතු කළ පෙළ",
|
||||
"Annotation note": "අනුසටහන් සටහන",
|
||||
"Date Format Tokens:": "දිනය ආකෘති ටෝකන:",
|
||||
"Year (4 digits)": "වසර (අංක 4)",
|
||||
"Month (01-12)": "මාසය (01-12)",
|
||||
"Day (01-31)": "දින (01-31)",
|
||||
"Hour (00-23)": "පැය (00-23)",
|
||||
"Minute (00-59)": "මිනිත්තු (00-59)",
|
||||
"Second (00-59)": "තත්පර (00-59)",
|
||||
"Show Source": "මූලාශ්රය පෙන්වන්න",
|
||||
"No content to preview": "පෙරදසුන සඳහා අන්තර්ගතයක් නැත",
|
||||
"Export": "අපනයනය කරන්න",
|
||||
"Set Timeout": "කාල සීමාව සකසන්න",
|
||||
"Select Voice": "හඬ තෝරන්න",
|
||||
"Toggle Sticky Bottom TTS Bar": "ඇලවූ TTS තීරුව මාරු කරන්න",
|
||||
"Display what I'm reading on Discord": "Discord හි කියවන පොත පෙන්වන්න",
|
||||
"Show on Discord": "Discord හි පෙන්වන්න",
|
||||
"Instant {{action}}": "ක්ෂණික {{action}}",
|
||||
"Instant {{action}} Disabled": "ක්ෂණික {{action}} අබල කර ඇත",
|
||||
"Annotation": "විවරණය",
|
||||
"Reset Template": "සැකිල්ල නැවත සකස් කරන්න",
|
||||
"Annotation style": "විවරණ විලාසය",
|
||||
"Annotation color": "විවරණ වර්ණය",
|
||||
"Annotation time": "විවරණ වේලාව",
|
||||
"AI": "කෘතිම බුද්ධිය (AI)",
|
||||
"Are you sure you want to re-index this book?": "ඔබට මෙම පොත නැවත දර්ශකය කිරීමට අවශ්ය බව සහතිකද?",
|
||||
"Enable AI in Settings": "සැකසුම් තුළ AI සක්රීය කරන්න",
|
||||
"Index This Book": "මෙම පොත දර්ශකය කරන්න",
|
||||
"Enable AI search and chat for this book": "මෙම පොත සඳහා AI සෙවීම සහ කතාබස් සක්රීය කරන්න",
|
||||
"Start Indexing": "දර්ශකය කිරීම ආරම්භ කරන්න",
|
||||
"Indexing book...": "පොත දර්ශකය කරමින්...",
|
||||
"Preparing...": "සූදානම් වෙමින්...",
|
||||
"Delete this conversation?": "මෙම සංවාදය මකා දමන්නද?",
|
||||
"No conversations yet": "තවම සංවාද නැත",
|
||||
"Start a new chat to ask questions about this book": "මෙම පොත ගැන ප්රශ්න ඇසීමට නව කතාබහක් ආරම්භ කරන්න",
|
||||
"Rename": "නම වෙනස් කරන්න",
|
||||
"New Chat": "නව කතාබහ",
|
||||
"Chat": "කතාබහ",
|
||||
"Please enter a model ID": "කරුණාකර මාදිලි හැඳුනුම්පතක් ඇතුළත් කරන්න",
|
||||
"Model not available or invalid": "මාදිලිය ලබා ගත නොහැක හෝ අවලංගුයි",
|
||||
"Failed to validate model": "මාදිලිය තහවුරු කිරීමට අසමත් විය",
|
||||
"Couldn't connect to Ollama. Is it running?": "Ollama වෙත සම්බන්ධ වීමට නොහැකි විය. එය ක්රියාත්මක වේද?",
|
||||
"Invalid API key or connection failed": "අවලංගු API යතුරක් හෝ සම්බන්ධතාවය අසාර්ථක විය",
|
||||
"Connection failed": "සම්බන්ධතාවය අසාර්ථක විය",
|
||||
"AI Assistant": "AI සහායකයා",
|
||||
"Enable AI Assistant": "AI සහායකයා සක්රීය කරන්න",
|
||||
"Provider": "සපයන්නා",
|
||||
"Ollama (Local)": "Ollama (දේශීය)",
|
||||
"AI Gateway (Cloud)": "AI Gateway (Cloud)",
|
||||
"Ollama Configuration": "Ollama වින්යාසය",
|
||||
"Refresh Models": "මාදිලි යාවත්කාලීන කරන්න",
|
||||
"AI Model": "AI මාදිලිය",
|
||||
"No models detected": "කිසිදු මාදිලියක් හඳුනාගෙන නැත",
|
||||
"AI Gateway Configuration": "AI Gateway වින්යාසය",
|
||||
"Choose from a selection of high-quality, economical AI models. You can also bring your own model by selecting \"Custom Model\" below.": "උසස් තත්ත්වයේ, ලාභදායී AI මාදිලි එකතුවකින් තෝරන්න. පහතින් \"අභිරුචි මාදිලිය\" තේරීමෙන් ඔබට ඔබේම මාදිලියක් ද ගෙන ඒමට හැකිය.",
|
||||
"API Key": "API යතුර",
|
||||
"Get Key": "යතුර ලබා ගන්න",
|
||||
"Model": "මාදිලිය",
|
||||
"Custom Model...": "අභිරුචි මාදිලිය...",
|
||||
"Custom Model ID": "අභිරුචි මාදිලි හැඳුනුම්පත",
|
||||
"Validate": "තහවුරු කරන්න",
|
||||
"Model available": "මාදිලිය ලබා ගත හැකිය",
|
||||
"Connection": "සම්බන්ධතාවය",
|
||||
"Test Connection": "සම්බන්ධතාවය පරීක්ෂා කරන්න",
|
||||
"Connected": "සම්බන්ධ විය",
|
||||
"Custom Colors": "අභිමත වර්ණ",
|
||||
"Color E-Ink Mode": "වර්ණ E-Ink මාදිලිය",
|
||||
"Reading Ruler": "කියවීමේ රූල",
|
||||
"Enable Reading Ruler": "කියවීමේ රූල සක්රීය කරන්න",
|
||||
"Lines to Highlight": "මතුකර පෙන්විය යුතු පේළි",
|
||||
"Ruler Color": "රූලේ වර්ණය",
|
||||
"Command Palette": "විධාන පුවරුව",
|
||||
"Search settings and actions...": "සැකසුම් සහ ක්රියා සොයන්න...",
|
||||
"No results found for": "සඳහා ප්රතිඵල හමු නොවීය",
|
||||
"Type to search settings and actions": "සැකසුම් සහ ක්රියා සෙවීමට ටයිප් කරන්න",
|
||||
"Recent": "මෑත කාලීන",
|
||||
"navigate": "සංචාලනය",
|
||||
"select": "තෝරන්න",
|
||||
"close": "වසා දමන්න",
|
||||
"Search Settings": "සැකසුම් සොයන්න",
|
||||
"Page Margins": "පිටු මායිම්",
|
||||
"AI Provider": "AI සපයන්නා",
|
||||
"Ollama URL": "Ollama URL",
|
||||
"Ollama Model": "Ollama ආකෘතිය",
|
||||
"AI Gateway Model": "AI ਗੇਟਵੇ ਆਕෘතිය",
|
||||
"Actions": "ක්රියා",
|
||||
"Navigation": "සංචාලනය",
|
||||
"Set status for {{count}} book(s)_one": "{{count}} පොත සඳහා තත්ත්වය සකසන්න",
|
||||
"Set status for {{count}} book(s)_other": "{{count}} පොත් සඳහා තත්ත්වය සකසන්න",
|
||||
"Mark as Unread": "නොකියවූ ලෙස සලකුණු කරන්න",
|
||||
"Mark as Finished": "අවසන් වූ ලෙස සලකුණු කරන්න",
|
||||
"Finished": "අවසන්",
|
||||
"Unread": "නොකියවූ",
|
||||
"Clear Status": "තත්ත්වය හිස් කරන්න",
|
||||
"Status": "තත්ත්වය",
|
||||
"Loading": "පූරණය වෙමින් පවතී...",
|
||||
"Exit Paragraph Mode": "ඡේද ප්රකාරයෙන් ඉවත් වන්න",
|
||||
"Paragraph Mode": "ඡේද ප්රකාරය",
|
||||
"Embedding Model": "එබ්බවීමේ ආකෘතිය",
|
||||
"{{count}} book(s) synced_one": "{{count}} පොතක් සමමුහුර්ත කරන ලදී",
|
||||
"{{count}} book(s) synced_other": "{{count}} පොත් සමමුහුර්ත කරන ලදී",
|
||||
"Unable to start RSVP": "RSVP ආරම්භ කිරීමට නොහැක",
|
||||
"RSVP not supported for PDF": "PDF සඳහා RSVP සහාය නොදක්වයි",
|
||||
"Select Chapter": "පරිච්ඡේදය තෝරන්න",
|
||||
"Context": "සන්දර්භය",
|
||||
"Ready": "සූදානම්",
|
||||
"Chapter Progress": "පරිච්ඡේදයේ ප්රගතිය",
|
||||
"words": "වචන",
|
||||
"{{time}} left": "{{time}} ඉතිරිව ඇත",
|
||||
"Reading progress": "කියවීමේ ප්රගතිය",
|
||||
"Click to seek": "සොයා බැලීමට ක්ලික් කරන්න",
|
||||
"Skip back 15 words": "වචන 15ක් පසුපසට",
|
||||
"Back 15 words (Shift+Left)": "වචන 15ක් පසුපසට (Shift+Left)",
|
||||
"Pause (Space)": "විරාමය (Space)",
|
||||
"Play (Space)": "ධාවනය (Space)",
|
||||
"Skip forward 15 words": "වචන 15ක් ඉදිරියට",
|
||||
"Forward 15 words (Shift+Right)": "වචන 15ක් ඉදිරියට (Shift+Right)",
|
||||
"Decrease speed": "වේගය අඩු කරන්න",
|
||||
"Slower (Left/Down)": "මන්දගාමී (Left/Down)",
|
||||
"Increase speed": "වේගය වැඩි කරන්න",
|
||||
"Faster (Right/Up)": "වේගවත් (Right/Up)",
|
||||
"Start RSVP Reading": "RSVP කියවීම ආරම්භ කරන්න",
|
||||
"Choose where to start reading": "කියවීම ආරම්භ කළ යුතු ස්ථානය තෝරන්න",
|
||||
"From Chapter Start": "පරිච්ඡේදයේ ආරම්භයේ සිට",
|
||||
"Start reading from the beginning of the chapter": "පරිච්ඡේදයේ ආරම්භයේ සිට කියවීම ආරම්භ කරන්න",
|
||||
"Resume": "නැවත ආරම්භ කරන්න",
|
||||
"Continue from where you left off": "ඔබ නතර කළ තැන සිට දිගටම කරගෙන යන්න",
|
||||
"From Current Page": "වත්මන් පිටුවේ සිට",
|
||||
"Start from where you are currently reading": "ඔබ දැනට කියවන තැනින් ආරම්භ කරන්න",
|
||||
"From Selection": "තේරීමෙන්",
|
||||
"Speed Reading Mode": "වේගයෙන් කියවීමේ ක්රමය",
|
||||
"Scroll left": "වමට අනුචලනය කරන්න",
|
||||
"Scroll right": "දකුණට අනුචලනය කරන්න",
|
||||
"Library Sync Progress": "පුස්තකාල සමමුහුර්ත කිරීමේ ප්රගතිය",
|
||||
"Back to library": "පුස්තකාලයට ආපසු",
|
||||
"Group by...": "මගින් සමූහනය කරන්න...",
|
||||
"Export as Plain Text": "සාමාන්ය පෙළ ලෙස අපනයනය කරන්න",
|
||||
"Export as Markdown": "Markdown ලෙස අපනයනය කරන්න",
|
||||
"Show Page Navigation Buttons": "සංචාලන බොත්තම්",
|
||||
"Page {{number}}": "පිටුව {{number}}",
|
||||
"highlight": "මතුකර පෙන්වීම",
|
||||
"underline": "යටින් ඉරි ඇඳීම",
|
||||
"squiggly": "zigzag",
|
||||
"red": "රතු",
|
||||
"violet": "දම්",
|
||||
"blue": "නිල්",
|
||||
"green": "කොළ",
|
||||
"yellow": "කහ",
|
||||
"Select {{style}} style": "{{style}} විලාසය තෝරන්න",
|
||||
"Select {{color}} color": "{{color}} වර්ණය තෝරන්න",
|
||||
"Close Book": "පොත වසා දමන්න",
|
||||
"Speed Reading": "වේග කියවීම",
|
||||
"Close Speed Reading": "වේග කියවීම වසන්න",
|
||||
"Authors": "කතුවරුන්",
|
||||
"Books": "පොත්",
|
||||
"Groups": "කණ්ඩායම්",
|
||||
"Back to TTS Location": "TTS ස්ථානයට ආපසු යන්න",
|
||||
"Metadata": "මෙටාඩේටා",
|
||||
"Image viewer": "රූප නරඹන්නා",
|
||||
"Previous Image": "පූර්ව රූපය",
|
||||
"Next Image": "මීළඟ රූපය",
|
||||
"Zoomed": "විශාලනය කරන ලදී",
|
||||
"Zoom level": "විශාලන මට්ටම",
|
||||
"Table viewer": "වගු නරඹන්නා",
|
||||
"Unable to connect to Readwise. Please check your network connection.": "Readwise වෙත සම්බන්ධ වීමට නොහැක. කරුණාකර ඔබගේ ජාල සම්බන්ධතාවය පරීක්ෂා කරන්න.",
|
||||
"Invalid Readwise access token": "අවලංගු Readwise ප්රවේශ ටෝකනය",
|
||||
"Disconnected from Readwise": "Readwise වෙතින් විසන්ධි විය",
|
||||
"Never": "කවදාවත් නැහැ",
|
||||
"Readwise Settings": "Readwise සැකසුම්",
|
||||
"Connected to Readwise": "Readwise වෙත සම්බන්ධ විය",
|
||||
"Last synced: {{time}}": "අවසානයට සමමුහුර්ත කළේ: {{time}}",
|
||||
"Sync Enabled": "සමමුහුර්ත කිරීම සබල කර ඇත",
|
||||
"Disconnect": "විසන්ධි කරන්න",
|
||||
"Connect your Readwise account to sync highlights.": "විශේෂ අවස්ථා සමමුහුර්ත කිරීමට ඔබගේ Readwise ගිණුම සම්බන්ධ කරන්න.",
|
||||
"Get your access token at": "ඔබගේ ප්රවේශ ටෝකනය මෙතැනින් ලබා ගන්න",
|
||||
"Access Token": "ප්රවේශ ටෝකනය",
|
||||
"Paste your Readwise access token": "ඔබගේ Readwise ප්රවේශ ටෝකනය මෙහි අලවන්න",
|
||||
"Config": "වින්යාසය",
|
||||
"Readwise Sync": "Readwise සමමුහුර්තකරණය",
|
||||
"Push Highlights": "විශේෂ අවස්ථා යොමු කරන්න",
|
||||
"Highlights synced to Readwise": "විශේෂ අවස්ථා Readwise සමඟ සමමුහුර්ත විය",
|
||||
"Readwise sync failed: no internet connection": "Readwise සමමුහුර්තකරණය අසාර්ථක විය: අන්තර්ජාල සම්බන්ධතාවයක් නොමැත",
|
||||
"Readwise sync failed: {{error}}": "Readwise සමමුහුර්තකරණය අසාර්ථක විය: {{error}}",
|
||||
"System Screen Brightness": "පද්ධති තිර දීප්තිය",
|
||||
"Page:": "පිටුව:",
|
||||
"Page: {{number}}": "පිටුව: {{number}}",
|
||||
"Annotation page number": "විවරණ පිටු අංකය",
|
||||
"Translating...": "පරිවර්තනය වෙමින් පවතී...",
|
||||
"Show Battery Percentage": "බැටරි ප්රතිශතය පෙන්වන්න",
|
||||
"Hide Scrollbar": "අනුචලන තීරුව සඟවන්න",
|
||||
"Skip to last reading position": "අවසන් කියවීමේ ස්ථානයට යන්න",
|
||||
"Show context": "සන්දර්භය පෙන්වන්න",
|
||||
"Hide context": "සන්දර්භය සඟවන්න",
|
||||
"Decrease font size": "අකුරු ප්රමාණය අඩු කරන්න",
|
||||
"Increase font size": "අකුරු ප්රමාණය වැඩි කරන්න",
|
||||
"Focus": "අවධානය",
|
||||
"Theme color": "තේමා වර්ණය",
|
||||
"Import failed": "ආයාත කිරීම අසාර්ථකයි",
|
||||
"Available Formatters:": "ලබාගත හැකි ආකෘතිකරණ:",
|
||||
"Format date": "දිනය ආකෘතිකරණය",
|
||||
"Markdown block quote (> per line)": "Markdown බ්ලොක් උද්ධෘතය (පේළියකට >)",
|
||||
"Newlines to <br>": "නව පේළි <br> වෙත",
|
||||
"Change case": "අකුරු ප්රමාණය වෙනස් කරන්න",
|
||||
"Trim whitespace": "හිස්තැන් කපන්න",
|
||||
"Truncate to n characters": "n අක්ෂර දක්වා කෙටි කරන්න",
|
||||
"Replace text": "පෙළ ප්රතිස්ථාපනය",
|
||||
"Fallback value": "විකල්ප අගය",
|
||||
"Get length": "දිග ලබාගන්න",
|
||||
"First/last element": "පළමු/අවසාන මූලද්රව්යය",
|
||||
"Join array": "අරාව සම්බන්ධ කරන්න",
|
||||
"Backup failed: {{error}}": "උපස්ථ කිරීම අසාර්ථකයි: {{error}}",
|
||||
"Select Backup": "උපස්ථයක් තෝරන්න",
|
||||
"Restore failed: {{error}}": "ප්රතිසාධනය අසාර්ථකයි: {{error}}",
|
||||
"Backup & Restore": "උපස්ථ සහ ප්රතිසාධනය",
|
||||
"Create a backup of your library or restore from a previous backup. Restoring will merge with your current library.": "ඔබේ පුස්තකාලයේ උපස්ථයක් සාදන්න හෝ පෙර උපස්ථයකින් ප්රතිසාධනය කරන්න. ප්රතිසාධනය ඔබේ වත්මන් පුස්තකාලය සමග ඒකාබද්ධ වේ.",
|
||||
"Backup Library": "පුස්තකාලය උපස්ථ කරන්න",
|
||||
"Restore Library": "පුස්තකාලය ප්රතිසාධනය කරන්න",
|
||||
"Creating backup...": "උපස්ථය සාදමින්...",
|
||||
"Restoring library...": "පුස්තකාලය ප්රතිසාධනය කරමින්...",
|
||||
"{{current}} of {{total}} items": "{{current}} / {{total}} අයිතම",
|
||||
"Backup completed successfully!": "උපස්ථය සාර්ථකව සම්පූර්ණයි!",
|
||||
"Restore completed successfully!": "ප්රතිසාධනය සාර්ථකව සම්පූර්ණයි!",
|
||||
"Your library has been saved to the selected location.": "ඔබේ පුස්තකාලය තෝරාගත් ස්ථානයේ සුරැකිණි.",
|
||||
"{{added}} books added, {{updated}} books updated.": "පොත් {{added}}ක් එකතු විය, {{updated}}ක් යාවත්කාලීන විය.",
|
||||
"Operation failed": "මෙහෙයුම අසාර්ථකයි",
|
||||
"Loading library...": "පුස්තකාලය පූරණය වෙමින්...",
|
||||
"{{count}} books refreshed_one": "පොත් {{count}}ක් යාවත්කාලීන විය",
|
||||
"{{count}} books refreshed_other": "පොත් {{count}}ක් යාවත්කාලීන විය",
|
||||
"Failed to refresh metadata": "පාරදත්ත යාවත්කාලීන කිරීම අසාර්ථකයි",
|
||||
"Refresh Metadata": "පාරදත්ත යාවත්කාලීන කරන්න"
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -25,9 +25,6 @@
|
||||
"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",
|
||||
@@ -237,11 +234,10 @@
|
||||
"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",
|
||||
"{{count}} pages left in chapter_one": "<0>{{count}}</0><1> sida kvar i kapitlet</1>",
|
||||
"{{count}} pages left in chapter_other": "<0>{{count}}</0><1> sidor kvar i kapitlet</1>",
|
||||
"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",
|
||||
@@ -282,7 +278,6 @@
|
||||
"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",
|
||||
@@ -541,7 +536,7 @@
|
||||
"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",
|
||||
"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",
|
||||
@@ -574,8 +569,8 @@
|
||||
"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",
|
||||
"Source Han Serif CN": "Source Han Serif CN",
|
||||
"Huiwen-MinchoGBK": "Huiwen Mincho",
|
||||
"KingHwa_OldSong": "KingHwa_OldSong",
|
||||
"Google Books": "Google Böcker",
|
||||
"Open Library": "Open Library",
|
||||
@@ -603,11 +598,10 @@
|
||||
"Size": "Storlek",
|
||||
"Cover": "Omslag",
|
||||
"Contain": "Innehålla",
|
||||
"{{number}} pages left in chapter": "{{number}} sidor kvar i kapitlet",
|
||||
"{{number}} pages left in chapter": "<0>{{number}}</0><1> sidor kvar i kapitlet</1>",
|
||||
"Device": "Enhet",
|
||||
"E-Ink Mode": "E-Ink-läge",
|
||||
"Highlight Colors": "Markeringsfärger",
|
||||
"Auto Screen Brightness": "Auto-skärmens ljusstyrka",
|
||||
"Pagination": "Pagination",
|
||||
"Disable Double Tap": "Inaktivera dubbeltryck",
|
||||
"Tap to Paginate": "Tryck för att bläddra",
|
||||
@@ -656,5 +650,457 @@
|
||||
"Update email": "Uppdatera e-post",
|
||||
"Current email": "Nuvarande e-post",
|
||||
"Update Email": "Uppdatera e-post",
|
||||
"All": "Alla"
|
||||
"All": "Alla",
|
||||
"Unable to open book": "Kunde inte öppna bok",
|
||||
"Punctuation": "Interpunktion",
|
||||
"Replace Quotation Marks": "Ersätt citattecken",
|
||||
"Enabled only in vertical layout.": "Aktiverad endast i vertikal layout.",
|
||||
"No Conversion": "Ingen konvertering",
|
||||
"Simplified to Traditional": "Förenklad → Traditionell",
|
||||
"Traditional to Simplified": "Traditionell → Förenklad",
|
||||
"Simplified to Traditional (Taiwan)": "Förenklad → Traditionell (Taiwan)",
|
||||
"Simplified to Traditional (Hong Kong)": "Förenklad → Traditionell (Hongkong)",
|
||||
"Simplified to Traditional (Taiwan), with phrases": "Förenklad → Traditionell (Taiwan • fraser)",
|
||||
"Traditional (Taiwan) to Simplified": "Traditionell (Taiwan) → Förenklad",
|
||||
"Traditional (Hong Kong) to Simplified": "Traditionell (Hongkong) → Förenklad",
|
||||
"Traditional (Taiwan) to Simplified, with phrases": "Traditionell (Taiwan • fraser) → Förenklad",
|
||||
"Convert Simplified and Traditional Chinese": "Konvertera förenklad/traditionell kinesiska",
|
||||
"Convert Mode": "Konverteringsläge",
|
||||
"Failed to auto-save book cover for lock screen: {{error}}": "Kunde inte autospara bokomslag för låsskärm: {{error}}",
|
||||
"Download from Cloud": "Ladda ner från molnet",
|
||||
"Upload to Cloud": "Ladda upp till molnet",
|
||||
"Clear Custom Fonts": "Rensa anpassade typsnitt",
|
||||
"Columns": "Kolumner",
|
||||
"OPDS Catalogs": "OPDS-kataloger",
|
||||
"Adding LAN addresses is not supported in the web app version.": "Att lägga till LAN-adresser stöds inte i webbappen.",
|
||||
"Invalid OPDS catalog. Please check the URL.": "Ogiltig OPDS-katalog. Kontrollera URL:en.",
|
||||
"Browse and download books from online catalogs": "Bläddra och ladda ner böcker från onlinekataloger",
|
||||
"My Catalogs": "Mina kataloger",
|
||||
"Add Catalog": "Lägg till katalog",
|
||||
"No catalogs yet": "Inga kataloger än",
|
||||
"Add your first OPDS catalog to start browsing books": "Lägg till din första OPDS-katalog för att börja bläddra i böcker",
|
||||
"Add Your First Catalog": "Lägg till din första katalog",
|
||||
"Browse": "Bläddra",
|
||||
"Popular Catalogs": "Populära kataloger",
|
||||
"Add": "Lägg till",
|
||||
"Add OPDS Catalog": "Lägg till OPDS-katalog",
|
||||
"Catalog Name": "Katalognamn",
|
||||
"My Calibre Library": "Mitt Calibre-bibliotek",
|
||||
"OPDS URL": "OPDS-URL",
|
||||
"Username (optional)": "Användarnamn (valfritt)",
|
||||
"Password (optional)": "Lösenord (valfritt)",
|
||||
"Description (optional)": "Beskrivning (valfritt)",
|
||||
"A brief description of this catalog": "En kort beskrivning av denna katalog",
|
||||
"Validating...": "Verifierar...",
|
||||
"View All": "Visa alla",
|
||||
"Forward": "Framåt",
|
||||
"Home": "Start",
|
||||
"{{count}} items_one": "{{count}} objekt",
|
||||
"{{count}} items_other": "{{count}} objekt",
|
||||
"Download completed": "Nedladdning klar",
|
||||
"Download failed": "Nedladdning misslyckades",
|
||||
"Open Access": "Öppen åtkomst",
|
||||
"Borrow": "Låna",
|
||||
"Buy": "Köp",
|
||||
"Subscribe": "Prenumerera",
|
||||
"Sample": "Prov",
|
||||
"Download": "Ladda ner",
|
||||
"Open & Read": "Öppna & Läs",
|
||||
"Tags": "Taggar",
|
||||
"Tag": "Tagg",
|
||||
"First": "Första",
|
||||
"Previous": "Föregående",
|
||||
"Next": "Nästa",
|
||||
"Last": "Sista",
|
||||
"Cannot Load Page": "Kan inte ladda sidan",
|
||||
"An error occurred": "Ett fel uppstod",
|
||||
"Online Library": "Onlinebibliotek",
|
||||
"URL must start with http:// or https://": "URL måste börja med http:// eller https://",
|
||||
"Title, Author, Tag, etc...": "Titel, författare, tagg, etc...",
|
||||
"Query": "Fråga",
|
||||
"Subject": "Ämne",
|
||||
"Enter {{terms}}": "Ange {{terms}}",
|
||||
"No search results found": "Inga sökresultat hittades",
|
||||
"Failed to load OPDS feed: {{status}} {{statusText}}": "Misslyckades med att ladda OPDS-flöde: {{status}} {{statusText}}",
|
||||
"Search in {{title}}": "Sök i {{title}}",
|
||||
"Manage Storage": "Hantera lagring",
|
||||
"Failed to load files": "Misslyckades att ladda filer",
|
||||
"Deleted {{count}} file(s)_one": "Raderade filen",
|
||||
"Deleted {{count}} file(s)_other": "Raderade filerna",
|
||||
"Failed to delete {{count}} file(s)_one": "Kunde inte radera filen",
|
||||
"Failed to delete {{count}} file(s)_other": "Kunde inte radera filerna",
|
||||
"Failed to delete files": "Kunde inte radera filer",
|
||||
"Total Files": "Totalt antal filer",
|
||||
"Total Size": "Total storlek",
|
||||
"Quota": "Kvot",
|
||||
"Used": "Använd",
|
||||
"Files": "Filer",
|
||||
"Search files...": "Sök filer...",
|
||||
"Newest First": "Nyast först",
|
||||
"Oldest First": "Äldst först",
|
||||
"Largest First": "Störst först",
|
||||
"Smallest First": "Minskst först",
|
||||
"Name A-Z": "Namn A-Ö",
|
||||
"Name Z-A": "Namn Ö-A",
|
||||
"{{count}} selected_one": "Vald fil",
|
||||
"{{count}} selected_other": "Valda filer",
|
||||
"Delete Selected": "Radera valda",
|
||||
"Created": "Skapad",
|
||||
"No files found": "Inga filer hittades",
|
||||
"No files uploaded yet": "Inga filer har laddats upp än",
|
||||
"files": "filer",
|
||||
"Page {{current}} of {{total}}": "Sida {{current}} av {{total}}",
|
||||
"Are you sure to delete {{count}} selected file(s)?_one": "Är du säker på att du vill radera filen?",
|
||||
"Are you sure to delete {{count}} selected file(s)?_other": "Är du säker på att du vill radera filerna?",
|
||||
"Cloud Storage Usage": "Användning av molnlagring",
|
||||
"Rename Group": "Byt namn på grupp",
|
||||
"From Directory": "Från katalog",
|
||||
"Successfully imported {{count}} book(s)_one": "Importerat 1 bok",
|
||||
"Successfully imported {{count}} book(s)_other": "Importerat {{count}} böcker",
|
||||
"Count": "Antal",
|
||||
"Start Page": "Start sida",
|
||||
"Search in OPDS Catalog...": "Sök i OPDS-katalog...",
|
||||
"Please log in to use advanced TTS features": "Logga in för att använda avancerade TTS-funktioner",
|
||||
"Word limit of 30 words exceeded.": "Gränsen på 30 ord har överskridits.",
|
||||
"Proofread": "Korrekturläsning",
|
||||
"Current selection": "Aktuell markering",
|
||||
"All occurrences in this book": "Alla förekomster i den här boken",
|
||||
"All occurrences in your library": "Alla förekomster i ditt bibliotek",
|
||||
"Selected text:": "Markerad text:",
|
||||
"Replace with:": "Ersätt med:",
|
||||
"Enter text...": "Ange text…",
|
||||
"Case sensitive:": "Skiftlägeskänslig:",
|
||||
"Scope:": "Omfattning:",
|
||||
"Selection": "Markering",
|
||||
"Library": "Bibliotek",
|
||||
"Yes": "Ja",
|
||||
"No": "Nej",
|
||||
"Proofread Replacement Rules": "Ersättningsregler för korrekturläsning",
|
||||
"Selected Text Rules": "Regler för markerad text",
|
||||
"No selected text replacement rules": "Inga ersättningsregler för markerad text",
|
||||
"Book Specific Rules": "Bokspecifika regler",
|
||||
"No book-level replacement rules": "Inga ersättningsregler på boknivå",
|
||||
"Disable Quick Action": "Inaktivera snabbåtgärd",
|
||||
"Enable Quick Action on Selection": "Aktivera snabbåtgärd vid val",
|
||||
"None": "Ingen",
|
||||
"Annotation Tools": "Anteckningsverktyg",
|
||||
"Enable Quick Actions": "Aktivera snabba åtgärder",
|
||||
"Quick Action": "Snabbåtgärd",
|
||||
"Copy to Notebook": "Kopiera till anteckningsbok",
|
||||
"Copy text after selection": "Kopiera text efter markering",
|
||||
"Highlight text after selection": "Markera text efter markering",
|
||||
"Annotate text after selection": "Anteckna text efter markering",
|
||||
"Search text after selection": "Sök text efter markering",
|
||||
"Look up text in dictionary after selection": "Slå upp text i ordbok efter markering",
|
||||
"Look up text in Wikipedia after selection": "Slå upp text i Wikipedia efter markering",
|
||||
"Translate text after selection": "Översätt text efter markering",
|
||||
"Read text aloud after selection": "Läs upp text efter markering",
|
||||
"Proofread text after selection": "Korrekturläs text efter markering",
|
||||
"{{activeCount}} active, {{pendingCount}} pending": "{{activeCount}} aktiva, {{pendingCount}} väntande",
|
||||
"{{failedCount}} failed": "{{failedCount}} misslyckades",
|
||||
"Waiting...": "Väntar...",
|
||||
"Failed": "Misslyckades",
|
||||
"Completed": "Slutförd",
|
||||
"Cancelled": "Avbruten",
|
||||
"Retry": "Försök igen",
|
||||
"Active": "Aktiva",
|
||||
"Transfer Queue": "Överföringskö",
|
||||
"Upload All": "Ladda upp alla",
|
||||
"Download All": "Ladda ner alla",
|
||||
"Resume Transfers": "Återuppta överföringar",
|
||||
"Pause Transfers": "Pausa överföringar",
|
||||
"Pending": "Väntande",
|
||||
"No transfers": "Inga överföringar",
|
||||
"Retry All": "Försök alla igen",
|
||||
"Clear Completed": "Rensa slutförda",
|
||||
"Clear Failed": "Rensa misslyckade",
|
||||
"Upload queued: {{title}}": "Uppladdning köad: {{title}}",
|
||||
"Download queued: {{title}}": "Nedladdning köad: {{title}}",
|
||||
"Book not found in library": "Boken hittades inte i biblioteket",
|
||||
"Unknown error": "Okänt fel",
|
||||
"Please log in to continue": "Logga in för att fortsätta",
|
||||
"Cloud File Transfers": "Molnfilöverföringar",
|
||||
"Show Search Results": "Visa sökresultat",
|
||||
"Search results for '{{term}}'": "Resultat för '{{term}}'",
|
||||
"Close Search": "Stäng sökning",
|
||||
"Previous Result": "Föregående resultat",
|
||||
"Next Result": "Nästa resultat",
|
||||
"Bookmarks": "Bokmärken",
|
||||
"Annotations": "Anteckningar",
|
||||
"Show Results": "Visa resultat",
|
||||
"Clear search": "Rensa sökning",
|
||||
"Clear search history": "Rensa sökhistorik",
|
||||
"Tap to Toggle Footer": "Tryck för att växla sidfot",
|
||||
"Show Current Time": "Visa aktuell tid",
|
||||
"Use 24 Hour Clock": "Använd 24-timmarsklocka",
|
||||
"Show Current Battery Status": "Visa aktuell batteristatus",
|
||||
"Exported successfully": "Exporterad",
|
||||
"Book exported successfully.": "Boken har exporterats.",
|
||||
"Failed to export the book.": "Det gick inte att exportera boken.",
|
||||
"Export Book": "Exportera bok",
|
||||
"Whole word:": "Hela ordet:",
|
||||
"Error": "Fel",
|
||||
"Unable to load the article. Try searching directly on {{link}}.": "Kan inte ladda artikeln. Försök söka direkt på {{link}}.",
|
||||
"Unable to load the word. Try searching directly on {{link}}.": "Kan inte ladda ordet. Försök söka direkt på {{link}}.",
|
||||
"Date Published": "Publiceringsdatum",
|
||||
"Only for TTS:": "Endast för TTS:",
|
||||
"Uploaded": "Uppladdad",
|
||||
"Downloaded": "Nedladdad",
|
||||
"Deleted": "Borttagen",
|
||||
"Note:": "Anteckning:",
|
||||
"Time:": "Tid:",
|
||||
"Format Options": "Formatalternativ",
|
||||
"Export Date": "Exportdatum",
|
||||
"Chapter Titles": "Kapiteltitlar",
|
||||
"Chapter Separator": "Kapitelavgränsare",
|
||||
"Highlights": "Markeringar",
|
||||
"Note Date": "Anteckningsdatum",
|
||||
"Advanced": "Avancerat",
|
||||
"Hide": "Dölj",
|
||||
"Show": "Visa",
|
||||
"Use Custom Template": "Använd anpassad mall",
|
||||
"Export Template": "Exportmall",
|
||||
"Template Syntax:": "Mallsyntax:",
|
||||
"Insert value": "Infoga värde",
|
||||
"Format date (locale)": "Formatera datum (lokal)",
|
||||
"Format date (custom)": "Formatera datum (anpassad)",
|
||||
"Conditional": "Villkorlig",
|
||||
"Loop": "Loop",
|
||||
"Available Variables:": "Tillgängliga variabler:",
|
||||
"Book title": "Boktitel",
|
||||
"Book author": "Bokförfattare",
|
||||
"Export date": "Exportdatum",
|
||||
"Array of chapters": "Lista med kapitel",
|
||||
"Chapter title": "Kapiteltitel",
|
||||
"Array of annotations": "Lista med anteckningar",
|
||||
"Highlighted text": "Markerad text",
|
||||
"Annotation note": "Anteckningsnotering",
|
||||
"Date Format Tokens:": "Datumformattecken:",
|
||||
"Year (4 digits)": "År (4 siffror)",
|
||||
"Month (01-12)": "Månad (01-12)",
|
||||
"Day (01-31)": "Dag (01-31)",
|
||||
"Hour (00-23)": "Timme (00-23)",
|
||||
"Minute (00-59)": "Minut (00-59)",
|
||||
"Second (00-59)": "Sekund (00-59)",
|
||||
"Show Source": "Visa källa",
|
||||
"No content to preview": "Inget innehåll att förhandsgranska",
|
||||
"Export": "Exportera",
|
||||
"Set Timeout": "Ställ in timeout",
|
||||
"Select Voice": "Välj röst",
|
||||
"Toggle Sticky Bottom TTS Bar": "Växla fast TTS-fält",
|
||||
"Display what I'm reading on Discord": "Visa vad jag läser på Discord",
|
||||
"Show on Discord": "Visa på Discord",
|
||||
"Instant {{action}}": "Omedelbar {{action}}",
|
||||
"Instant {{action}} Disabled": "Omedelbar {{action}} inaktiverad",
|
||||
"Annotation": "Anteckning",
|
||||
"Reset Template": "Återställ mall",
|
||||
"Annotation style": "Anteckningsstil",
|
||||
"Annotation color": "Anteckningsfärg",
|
||||
"Annotation time": "Anteckningstid",
|
||||
"AI": "AI",
|
||||
"Are you sure you want to re-index this book?": "Är du säker på att du vill indexera om denna bok?",
|
||||
"Enable AI in Settings": "Aktivera AI i inställningar",
|
||||
"Index This Book": "Indexera denna bok",
|
||||
"Enable AI search and chat for this book": "Aktivera AI-sökning och chatt för denna bok",
|
||||
"Start Indexing": "Starta indexering",
|
||||
"Indexing book...": "Indexerar bok...",
|
||||
"Preparing...": "Förbereder...",
|
||||
"Delete this conversation?": "Ta bort denna konversation?",
|
||||
"No conversations yet": "Inga konversationer ännu",
|
||||
"Start a new chat to ask questions about this book": "Starta en ny chatt för att ställa frågor om denna bok",
|
||||
"Rename": "Byt namn",
|
||||
"New Chat": "Ny chatt",
|
||||
"Chat": "Chatt",
|
||||
"Please enter a model ID": "Ange ett modell-ID",
|
||||
"Model not available or invalid": "Modell ej tillgänglig eller ogiltig",
|
||||
"Failed to validate model": "Misslyckades att validera modell",
|
||||
"Couldn't connect to Ollama. Is it running?": "Kunde inte ansluta till Ollama. Körs den?",
|
||||
"Invalid API key or connection failed": "Ogiltig API-nyckel eller anslutningen misslyckades",
|
||||
"Connection failed": "Anslutningen misslyckades",
|
||||
"AI Assistant": "AI-assistent",
|
||||
"Enable AI Assistant": "Aktivera AI-assistent",
|
||||
"Provider": "Leverantör",
|
||||
"Ollama (Local)": "Ollama (Lokal)",
|
||||
"AI Gateway (Cloud)": "AI-gateway (Moln)",
|
||||
"Ollama Configuration": "Ollama-konfiguration",
|
||||
"Refresh Models": "Uppdatera modeller",
|
||||
"AI Model": "AI-modell",
|
||||
"No models detected": "Inga modeller hittades",
|
||||
"AI Gateway Configuration": "AI-gateway-konfiguration",
|
||||
"Choose from a selection of high-quality, economical AI models. You can also bring your own model by selecting \"Custom Model\" below.": "Välj bland ett urval av högkvalitativa, ekonomiska AI-modeller. Du kan också använda din egen modell genom att välja \"Anpassad modell\" nedan.",
|
||||
"API Key": "API-nyckel",
|
||||
"Get Key": "Hämta nyckel",
|
||||
"Model": "Modell",
|
||||
"Custom Model...": "Anpassad modell...",
|
||||
"Custom Model ID": "Anpassat modell-ID",
|
||||
"Validate": "Validera",
|
||||
"Model available": "Modell tillgänglig",
|
||||
"Connection": "Anslutning",
|
||||
"Test Connection": "Testa anslutning",
|
||||
"Connected": "Ansluten",
|
||||
"Custom Colors": "Anpassade färger",
|
||||
"Color E-Ink Mode": "Färg-E-Ink-läge",
|
||||
"Reading Ruler": "Läs-linjal",
|
||||
"Enable Reading Ruler": "Aktivera läs-linjal",
|
||||
"Lines to Highlight": "Rader att markera",
|
||||
"Ruler Color": "Linjalens färg",
|
||||
"Command Palette": "Kommandopalett",
|
||||
"Search settings and actions...": "Sök inställningar och åtgärder...",
|
||||
"No results found for": "Inga resultat hittades för",
|
||||
"Type to search settings and actions": "Skriv för att söka inställningar och åtgärder",
|
||||
"Recent": "Senaste",
|
||||
"navigate": "navigera",
|
||||
"select": "välj",
|
||||
"close": "stäng",
|
||||
"Search Settings": "Sök inställningar",
|
||||
"Page Margins": "Sidmarginaler",
|
||||
"AI Provider": "AI-leverantör",
|
||||
"Ollama URL": "Ollama-URL",
|
||||
"Ollama Model": "Ollama-modell",
|
||||
"AI Gateway Model": "AI Gateway-modell",
|
||||
"Actions": "Åtgärder",
|
||||
"Navigation": "Navigering",
|
||||
"Set status for {{count}} book(s)_one": "Ange status för {{count}} bok",
|
||||
"Set status for {{count}} book(s)_other": "Ange status för {{count}} böcker",
|
||||
"Mark as Unread": "Markera som oläst",
|
||||
"Mark as Finished": "Markera som läst",
|
||||
"Finished": "Läst",
|
||||
"Unread": "Oläst",
|
||||
"Clear Status": "Rensa status",
|
||||
"Status": "Status",
|
||||
"Loading": "Laddar...",
|
||||
"Exit Paragraph Mode": "Avsluta styckeläge",
|
||||
"Paragraph Mode": "Styckeläge",
|
||||
"Embedding Model": "Inbäddningsmodell",
|
||||
"{{count}} book(s) synced_one": "{{count}} bok synkroniserad",
|
||||
"{{count}} book(s) synced_other": "{{count}} böcker synkroniserade",
|
||||
"Unable to start RSVP": "Kunde inte starta RSVP",
|
||||
"RSVP not supported for PDF": "RSVP stöds inte för PDF",
|
||||
"Select Chapter": "Välj kapitel",
|
||||
"Context": "Sammanhang",
|
||||
"Ready": "Klar",
|
||||
"Chapter Progress": "Kapitelframsteg",
|
||||
"words": "ord",
|
||||
"{{time}} left": "{{time}} kvar",
|
||||
"Reading progress": "Läsningens framsteg",
|
||||
"Click to seek": "Klicka för att söka",
|
||||
"Skip back 15 words": "Hoppa bakåt 15 ord",
|
||||
"Back 15 words (Shift+Left)": "Bakåt 15 ord (Shift+Vänster)",
|
||||
"Pause (Space)": "Pausa (Mellanslag)",
|
||||
"Play (Space)": "Spela (Mellanslag)",
|
||||
"Skip forward 15 words": "Hoppa framåt 15 ord",
|
||||
"Forward 15 words (Shift+Right)": "Framåt 15 ord (Shift+Höger)",
|
||||
"Decrease speed": "Sänk hastigheten",
|
||||
"Slower (Left/Down)": "Långsammare (Vänster/Nedåt)",
|
||||
"Increase speed": "Höj hastigheten",
|
||||
"Faster (Right/Up)": "Snabbare (Höger/Uppåt)",
|
||||
"Start RSVP Reading": "Starta RSVP-läsning",
|
||||
"Choose where to start reading": "Välj var du vill börja läsa",
|
||||
"From Chapter Start": "Från början av kapitlet",
|
||||
"Start reading from the beginning of the chapter": "Börja läsa från början av kapitlet",
|
||||
"Resume": "Återuppta",
|
||||
"Continue from where you left off": "Fortsätt där du slutade",
|
||||
"From Current Page": "Från den aktuella sidan",
|
||||
"Start from where you are currently reading": "Börja där du läser just nu",
|
||||
"From Selection": "Från markeringen",
|
||||
"Speed Reading Mode": "Snabbläsningsläge",
|
||||
"Scroll left": "Scrolla åt vänster",
|
||||
"Scroll right": "Scrolla åt höger",
|
||||
"Library Sync Progress": "Synkroniseringsframsteg för bibliotek",
|
||||
"Back to library": "Tillbaka till biblioteket",
|
||||
"Group by...": "Gruppera efter...",
|
||||
"Export as Plain Text": "Exportera som vanlig text",
|
||||
"Export as Markdown": "Exportera som Markdown",
|
||||
"Show Page Navigation Buttons": "Navigeringsknappar",
|
||||
"Page {{number}}": "Sida {{number}}",
|
||||
"highlight": "markering",
|
||||
"underline": "understrykning",
|
||||
"squiggly": "vågig linje",
|
||||
"red": "röd",
|
||||
"violet": "lila",
|
||||
"blue": "blå",
|
||||
"green": "grön",
|
||||
"yellow": "gul",
|
||||
"Select {{style}} style": "Välj stil {{style}}",
|
||||
"Select {{color}} color": "Välj färg {{color}}",
|
||||
"Close Book": "Stäng bok",
|
||||
"Speed Reading": "Snabbläsning",
|
||||
"Close Speed Reading": "Stäng snabbläsning",
|
||||
"Authors": "Författare",
|
||||
"Books": "Böcker",
|
||||
"Groups": "Grupper",
|
||||
"Back to TTS Location": "Tillbaka till TTS-plats",
|
||||
"Metadata": "Metadata",
|
||||
"Image viewer": "Bildvisare",
|
||||
"Previous Image": "Föregående bild",
|
||||
"Next Image": "Nästa bild",
|
||||
"Zoomed": "Zoomad",
|
||||
"Zoom level": "Zoomnivå",
|
||||
"Table viewer": "Tabellvisare",
|
||||
"Unable to connect to Readwise. Please check your network connection.": "Kunde inte ansluta till Readwise. Kontrollera din nätverksanslutning.",
|
||||
"Invalid Readwise access token": "Ogiltig Readwise-åtkomsttoken",
|
||||
"Disconnected from Readwise": "Frånkopplad från Readwise",
|
||||
"Never": "Aldrig",
|
||||
"Readwise Settings": "Readwise-inställningar",
|
||||
"Connected to Readwise": "Ansluten till Readwise",
|
||||
"Last synced: {{time}}": "Senast synkroniserad: {{time}}",
|
||||
"Sync Enabled": "Synkronisering aktiverad",
|
||||
"Disconnect": "Koppla från",
|
||||
"Connect your Readwise account to sync highlights.": "Anslut ditt Readwise-konto för att synkronisera markeringar.",
|
||||
"Get your access token at": "Hämta din åtkomsttoken på",
|
||||
"Access Token": "Åtkomsttoken",
|
||||
"Paste your Readwise access token": "Klistra in din Readwise-åtkomsttoken",
|
||||
"Config": "Konfiguration",
|
||||
"Readwise Sync": "Readwise-synkronisering",
|
||||
"Push Highlights": "Skicka markeringar",
|
||||
"Highlights synced to Readwise": "Markeringar synkroniserade till Readwise",
|
||||
"Readwise sync failed: no internet connection": "Readwise-synkronisering misslyckades: ingen internetanslutning",
|
||||
"Readwise sync failed: {{error}}": "Readwise-synkronisering misslyckades: {{error}}",
|
||||
"System Screen Brightness": "Systemets skärmljusstyrka",
|
||||
"Page:": "Sida:",
|
||||
"Page: {{number}}": "Sida: {{number}}",
|
||||
"Annotation page number": "Annoteringssidnummer",
|
||||
"Translating...": "Översätter...",
|
||||
"Show Battery Percentage": "Visa batteriprocent",
|
||||
"Hide Scrollbar": "Dölj rullningslist",
|
||||
"Skip to last reading position": "Hoppa till senaste läsposition",
|
||||
"Show context": "Visa kontext",
|
||||
"Hide context": "Dölj kontext",
|
||||
"Decrease font size": "Minska teckenstorlek",
|
||||
"Increase font size": "Öka teckenstorlek",
|
||||
"Focus": "Fokus",
|
||||
"Theme color": "Temafärg",
|
||||
"Import failed": "Importen misslyckades",
|
||||
"Available Formatters:": "Tillgängliga formaterare:",
|
||||
"Format date": "Formatera datum",
|
||||
"Markdown block quote (> per line)": "Markdown-blockcitat (> per rad)",
|
||||
"Newlines to <br>": "Radbrytningar till <br>",
|
||||
"Change case": "Ändra skiftläge",
|
||||
"Trim whitespace": "Ta bort blanksteg",
|
||||
"Truncate to n characters": "Korta till n tecken",
|
||||
"Replace text": "Ersätt text",
|
||||
"Fallback value": "Standardvärde",
|
||||
"Get length": "Hämta längd",
|
||||
"First/last element": "Första/sista elementet",
|
||||
"Join array": "Sammanfoga array",
|
||||
"Backup failed: {{error}}": "Säkerhetskopiering misslyckades: {{error}}",
|
||||
"Select Backup": "Välj säkerhetskopia",
|
||||
"Restore failed: {{error}}": "Återställning misslyckades: {{error}}",
|
||||
"Backup & Restore": "Säkerhetskopiera & Återställ",
|
||||
"Create a backup of your library or restore from a previous backup. Restoring will merge with your current library.": "Skapa en säkerhetskopia av ditt bibliotek eller återställ från en tidigare kopia. Återställningen slås samman med ditt nuvarande bibliotek.",
|
||||
"Backup Library": "Säkerhetskopiera bibliotek",
|
||||
"Restore Library": "Återställ bibliotek",
|
||||
"Creating backup...": "Skapar säkerhetskopia...",
|
||||
"Restoring library...": "Återställer bibliotek...",
|
||||
"{{current}} of {{total}} items": "{{current}} av {{total}} objekt",
|
||||
"Backup completed successfully!": "Säkerhetskopieringen slutförd!",
|
||||
"Restore completed successfully!": "Återställningen slutförd!",
|
||||
"Your library has been saved to the selected location.": "Ditt bibliotek har sparats på den valda platsen.",
|
||||
"{{added}} books added, {{updated}} books updated.": "{{added}} böcker tillagda, {{updated}} böcker uppdaterade.",
|
||||
"Operation failed": "Åtgärden misslyckades",
|
||||
"Loading library...": "Laddar bibliotek...",
|
||||
"{{count}} books refreshed_one": "{{count}} bok uppdaterad",
|
||||
"{{count}} books refreshed_other": "{{count}} böcker uppdaterade",
|
||||
"Failed to refresh metadata": "Kunde inte uppdatera metadata",
|
||||
"Refresh Metadata": "Uppdatera metadata"
|
||||
}
|
||||
|
||||
@@ -24,9 +24,6 @@
|
||||
"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": "கடவுச்சொல் புதுப்பிக்கவும்",
|
||||
@@ -189,8 +186,8 @@
|
||||
"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}} பக்கங்கள் மீதமுள்ளன",
|
||||
"{{count}} pages left in chapter_one": "<1>அத்தியாயத்தில் 1 பக்கம் மீதமுள்ளது</1>",
|
||||
"{{count}} pages left in chapter_other": "<1>அத்தியாயத்தில் </1><0>{{count}}</0><1> பக்கங்கள் மீதமுள்ளன</1>",
|
||||
"Theme Mode": "தீம் பயன்முறை",
|
||||
"Invert Image In Dark Mode": "இருட்டு பயன்முறையில் படத்தை தலைகீழாக மாற்றவும்",
|
||||
"Override Book Color": "புத்தக நிறத்தை மேலெழுதவும்",
|
||||
@@ -293,7 +290,7 @@
|
||||
"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— வில்லியம் ஷேக்ஸ்பியர்",
|
||||
"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": "தீம் பெயர்",
|
||||
@@ -302,7 +299,6 @@
|
||||
"Link Color": "இணைப்பு நிறம்",
|
||||
"Preview": "முன்னோட்டம்",
|
||||
"Font & Layout": "எழுத்துரு மற்றும் அமைப்பு",
|
||||
"Book Cover": "புத்தக அட்டை",
|
||||
"More Info": "மேலும் தகவல்",
|
||||
"Parallel Read": "இணை வாசிப்பு",
|
||||
"Disable": "முடக்கவும்",
|
||||
@@ -323,7 +319,6 @@
|
||||
"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}} நிமிடம்",
|
||||
@@ -489,8 +484,8 @@
|
||||
"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",
|
||||
"Source Han Serif CN": "Source Han Serif CN",
|
||||
"Huiwen-MinchoGBK": "Huiwen Mincho",
|
||||
"KingHwa_OldSong": "KingHwa_OldSong",
|
||||
"Google Books": "Google Books",
|
||||
"Open Library": "Open Library",
|
||||
@@ -603,11 +598,10 @@
|
||||
"Size": "அளவு",
|
||||
"Cover": "மூடு",
|
||||
"Contain": "அடங்கும்",
|
||||
"{{number}} pages left in chapter": "அத்தியாயத்தில் {{number}} பக்கங்கள் மீதமுள்ளன",
|
||||
"{{number}} pages left in chapter": "<1>அத்தியாயத்தில் </1><0>{{number}}</0><1> பக்கங்கள் மீதமுள்ளன</1>",
|
||||
"Device": "சாதனம்",
|
||||
"E-Ink Mode": "E-Ink முறை",
|
||||
"Highlight Colors": "முத்திரை நிறங்கள்",
|
||||
"Auto Screen Brightness": "தானியங்கி திரை பிரகாசம்",
|
||||
"Pagination": "பக்கமிடுதல்",
|
||||
"Disable Double Tap": "இரட்டை தொடுதலை முடக்கு",
|
||||
"Tap to Paginate": "பக்கம் மாற்ற தொடுங்கள்",
|
||||
@@ -656,5 +650,457 @@
|
||||
"Update email": "மின்னஞ்சல் புதுப்பிக்கவும்",
|
||||
"Current email": "தற்போதைய மின்னஞ்சல்",
|
||||
"Update Email": "மின்னஞ்சல் புதுப்பிக்கவும்",
|
||||
"All": "அனைத்து"
|
||||
"All": "அனைத்து",
|
||||
"Unable to open book": "புத்தகத்தைத் திறக்க முடியவில்லை",
|
||||
"Punctuation": "விருத்தி",
|
||||
"Replace Quotation Marks": "உதயம்சுட்டிகளை மாற்றவும்",
|
||||
"Enabled only in vertical layout.": "செங்குத்து அமைப்பில் மட்டுமே இயலுமைப்படுத்தப்பட்டது.",
|
||||
"No Conversion": "மாற்றம் செய்யவில்லை",
|
||||
"Simplified to Traditional": "எளிய → பாரம்பரிய",
|
||||
"Traditional to Simplified": "பாரம்பரிய → எளிய",
|
||||
"Simplified to Traditional (Taiwan)": "எளிய → பாரம்பரிய (தைவான்)",
|
||||
"Simplified to Traditional (Hong Kong)": "எளிய → பாரம்பரிய (ஹாங்காங்)",
|
||||
"Simplified to Traditional (Taiwan), with phrases": "எளிய → பாரம்பரிய (தைவான் • வசனங்கள்)",
|
||||
"Traditional (Taiwan) to Simplified": "பாரம்பரிய (தைவான்) → எளிய",
|
||||
"Traditional (Hong Kong) to Simplified": "பாரம்பரிய (ஹாங்காங்) → எளிய",
|
||||
"Traditional (Taiwan) to Simplified, with phrases": "பாரம்பரிய (தைவான் • வசனங்கள்) → எளிய",
|
||||
"Convert Simplified and Traditional Chinese": "எளிய/பாரம்பரிய சீன மொழி மாற்றம்",
|
||||
"Convert Mode": "மாற்ற முறை",
|
||||
"Failed to auto-save book cover for lock screen: {{error}}": "பூட்டு திரைக்கான புத்தகக் கோப்பை தானாகச் சேமிக்க முடியவில்லை: {{error}}",
|
||||
"Download from Cloud": "மேகத்திலிருந்து பதிவிறக்கு செய்யவும்",
|
||||
"Upload to Cloud": "மேகத்திற்கு பதிவேற்றவும்",
|
||||
"Clear Custom Fonts": "தனிப்பயன் எழுத்துருக்களை அழிக்கவும்",
|
||||
"Columns": "நெடுவரிசைகள்",
|
||||
"OPDS Catalogs": "OPDS பட்டியல்கள்",
|
||||
"Adding LAN addresses is not supported in the web app version.": "LAN முகவரிகளைச் சேர்ப்பது வலை பயன்பாட்டில் ஆதரிக்கப்படவில்லை.",
|
||||
"Invalid OPDS catalog. Please check the URL.": "தவறான OPDS பட்டியல். URL ஐச் சரிபார்க்கவும்.",
|
||||
"Browse and download books from online catalogs": "ஆன்லைன் பட்டியல்களில் இருந்து புத்தகங்களை உலாவவும் மற்றும் பதிவிறக்கவும்",
|
||||
"My Catalogs": "என் பட்டியல்கள்",
|
||||
"Add Catalog": "பட்டியலைச் சேர்க்கவும்",
|
||||
"No catalogs yet": "இன்னும் எந்த பட்டியலும் இல்லை",
|
||||
"Add your first OPDS catalog to start browsing books": "புத்தகங்களை உலாவ தொடங்க உங்கள் முதல் OPDS பட்டியலைச் சேர்க்கவும்",
|
||||
"Add Your First Catalog": "உங்கள் முதல் பட்டியலைச் சேர்க்கவும்",
|
||||
"Browse": "உலாவவும்",
|
||||
"Popular Catalogs": "பிரபல பட்டியல்கள்",
|
||||
"Add": "சேர்க்கவும்",
|
||||
"Add OPDS Catalog": "OPDS பட்டியலைச் சேர்க்கவும்",
|
||||
"Catalog Name": "பட்டியல் பெயர்",
|
||||
"My Calibre Library": "என் Calibre நூலகம்",
|
||||
"OPDS URL": "OPDS URL",
|
||||
"Username (optional)": "பயனர் பெயர் (விருப்பம்)",
|
||||
"Password (optional)": "கடவுச்சொல் (விருப்பம்)",
|
||||
"Description (optional)": "விவரிப்பு (விருப்பம்)",
|
||||
"A brief description of this catalog": "இந்த பட்டியலின் சுருக்கமான விளக்கம்",
|
||||
"Validating...": "சரிபார்க்கப்படுகிறது...",
|
||||
"View All": "அனைத்தையும் பார்க்கவும்",
|
||||
"Forward": "முன்னேற்று",
|
||||
"Home": "முகப்பு",
|
||||
"{{count}} items_one": "{{count}} பொருள்",
|
||||
"{{count}} items_other": "{{count}} பொருட்கள்",
|
||||
"Download completed": "பதிவிறக்கம் முடிந்தது",
|
||||
"Download failed": "பதிவிறக்கம் தோல்வியடைந்தது",
|
||||
"Open Access": "திறந்த அணுகல்",
|
||||
"Borrow": "கடன் எடுக்கவும்",
|
||||
"Buy": "வாங்கவும்",
|
||||
"Subscribe": "சந்தா செய்யவும்",
|
||||
"Sample": "மாதிரிப் புத்தகம்",
|
||||
"Download": "பதிவிறக்கம் செய்யவும்",
|
||||
"Open & Read": "திறந்து வாசிக்கவும்",
|
||||
"Tags": "குறிச்சொற்கள்",
|
||||
"Tag": "குறிச்சொல்",
|
||||
"First": "முதல்",
|
||||
"Previous": "முந்தையது",
|
||||
"Next": "அடுத்தது",
|
||||
"Last": "இறுதி",
|
||||
"Cannot Load Page": "பக்கம் ஏற்ற முடியவில்லை",
|
||||
"An error occurred": "ஒரு பிழை ஏற்பட்டது",
|
||||
"Online Library": "ஆன்லைன் நூலகம்",
|
||||
"URL must start with http:// or https://": "URL http:// அல்லது https:// கொண்டு தொடங்க வேண்டும்",
|
||||
"Title, Author, Tag, etc...": "தலைப்பு, ஆசிரியர், குறிச்சொல், மற்றும் பல...",
|
||||
"Query": "கேள்வி",
|
||||
"Subject": "பொருள்",
|
||||
"Enter {{terms}}": "{{terms}} உள்ளிடவும்",
|
||||
"No search results found": "தேடல் முடிவுகள் இல்லை",
|
||||
"Failed to load OPDS feed: {{status}} {{statusText}}": "OPDS ஊட்டத்தை ஏற்ற முடியவில்லை: {{status}} {{statusText}}",
|
||||
"Search in {{title}}": "{{title}} இல் தேடவும்",
|
||||
"Manage Storage": "சேமிப்பை நிர்வகி",
|
||||
"Failed to load files": "கோப்புகளை ஏற்ற முடியவில்லை",
|
||||
"Deleted {{count}} file(s)_one": "கோப்பு நீக்கப்பட்டது",
|
||||
"Deleted {{count}} file(s)_other": "கோப்புகள் நீக்கப்பட்டன",
|
||||
"Failed to delete {{count}} file(s)_one": "கோப்பை நீக்க முடியவில்லை",
|
||||
"Failed to delete {{count}} file(s)_other": "கோப்புகளை நீக்க முடியவில்லை",
|
||||
"Failed to delete files": "கோப்புகளை நீக்க முடியவில்லை",
|
||||
"Total Files": "மொத்த கோப்புகள்",
|
||||
"Total Size": "மொத்த அளவு",
|
||||
"Quota": "கோட்டா",
|
||||
"Used": "பயன்படுத்தப்பட்டது",
|
||||
"Files": "கோப்புகள்",
|
||||
"Search files...": "கோப்புகளைத் தேடு...",
|
||||
"Newest First": "புதியவை முதலில்",
|
||||
"Oldest First": "பழையவை முதலில்",
|
||||
"Largest First": "பெரியவை முதலில்",
|
||||
"Smallest First": "சிறியவை முதலில்",
|
||||
"Name A-Z": "பெயர் A-ஆல்",
|
||||
"Name Z-A": "பெயர் ஆல்-A",
|
||||
"{{count}} selected_one": "தேர்ந்தெடுக்கப்பட்ட கோப்பு",
|
||||
"{{count}} selected_other": "தேர்ந்தெடுக்கப்பட்ட கோப்புகள்",
|
||||
"Delete Selected": "தேர்ந்தெடுத்தவை நீக்கு",
|
||||
"Created": "உருவாக்கப்பட்டது",
|
||||
"No files found": "கோப்புகள் இல்லை",
|
||||
"No files uploaded yet": "இன்னும் எந்த கோப்பும் பதிவேற்றப்படவில்லை",
|
||||
"files": "கோப்புகள்",
|
||||
"Page {{current}} of {{total}}": "பக்கம் {{current}} / {{total}}",
|
||||
"Are you sure to delete {{count}} selected file(s)?_one": "இந்த கோப்பை நீக்க விரும்புகிறீர்களா?",
|
||||
"Are you sure to delete {{count}} selected file(s)?_other": "இந்த கோப்புகளை நீக்க விரும்புகிறீர்களா?",
|
||||
"Cloud Storage Usage": "மேக சேமிப்பு பயன்பாடு",
|
||||
"Rename Group": "குழுவை மறுபெயரிடவும்",
|
||||
"From Directory": "கோப்புறையிலிருந்து",
|
||||
"Successfully imported {{count}} book(s)_one": "வெற்றிகரமாக 1 புத்தகம் இறக்குமதி செய்யப்பட்டது",
|
||||
"Successfully imported {{count}} book(s)_other": "வெற்றிகரமாக {{count}} புத்தகங்கள் இறக்குமதி செய்யப்பட்டது",
|
||||
"Count": "எண்ணிக்கை",
|
||||
"Start Page": "தொடக்கப் பக்கம்",
|
||||
"Search in OPDS Catalog...": "OPDS பட்டியலில் தேடவும்...",
|
||||
"Please log in to use advanced TTS features": "மேம்பட்ட TTS அம்சங்களை பயன்படுத்த உள்நுழையவும்",
|
||||
"Word limit of 30 words exceeded.": "30 சொற்களின் வரம்பை மீறியுள்ளது.",
|
||||
"Proofread": "திருத்தம்",
|
||||
"Current selection": "தற்போதைய தேர்வு",
|
||||
"All occurrences in this book": "இந்த புத்தகத்தில் உள்ள அனைத்து நிகழ்வுகளும்",
|
||||
"All occurrences in your library": "உங்கள் நூலகத்தில் உள்ள அனைத்து நிகழ்வுகளும்",
|
||||
"Selected text:": "தேர்ந்தெடுக்கப்பட்ட உரை:",
|
||||
"Replace with:": "இதனால் மாற்றவும்:",
|
||||
"Enter text...": "உரையை உள்ளிடவும்…",
|
||||
"Case sensitive:": "எழுத்து பெரிய/சிறிய வேறுபாட்டை கருத்தில் கொள்ளவும்:",
|
||||
"Scope:": "வளயம்:",
|
||||
"Selection": "தேர்வு",
|
||||
"Library": "நூலகம்",
|
||||
"Yes": "ஆம்",
|
||||
"No": "இல்லை",
|
||||
"Proofread Replacement Rules": "திருத்த மாற்று விதிகள்",
|
||||
"Selected Text Rules": "தேர்ந்தெடுக்கப்பட்ட உரைக்கான விதிகள்",
|
||||
"No selected text replacement rules": "தேர்ந்தெடுக்கப்பட்ட உரைக்கான மாற்று விதிகள் இல்லை",
|
||||
"Book Specific Rules": "புத்தகத்திற்கு குறிப்பிட்ட விதிகள்",
|
||||
"No book-level replacement rules": "புத்தக மட்டத்தில் மாற்று விதிகள் இல்லை",
|
||||
"Disable Quick Action": "விரைவு செயலை முடக்கு",
|
||||
"Enable Quick Action on Selection": "தேர்வில் விரைவு செயலை இயக்கு",
|
||||
"None": "எதுவும் இல்லை",
|
||||
"Annotation Tools": "கருத்துரை கருவிகள்",
|
||||
"Enable Quick Actions": "விரைவு செயல்களை இயக்கு",
|
||||
"Quick Action": "விரைவு செயல்",
|
||||
"Copy to Notebook": "குறிப்பேட்டியில் நகலெடு",
|
||||
"Copy text after selection": "உரையை தேர்வுக்குப் பிறகு நகலெடு",
|
||||
"Highlight text after selection": "உரையை தேர்வுக்குப் பிறகு முத்திரை இடு",
|
||||
"Annotate text after selection": "உரையை தேர்வுக்குப் பிறகு கருத்துரை இடு",
|
||||
"Search text after selection": "உரையை தேர்வுக்குப் பிறகு தேடு",
|
||||
"Look up text in dictionary after selection": "தேர்வுக்குப் பிறகு அகராதியில் உரையைத் தேடு",
|
||||
"Look up text in Wikipedia after selection": "தேர்வுக்குப் பிறகு விக்கிப்பீடியாவில் உரையைத் தேடு",
|
||||
"Translate text after selection": "தேர்வுக்குப் பிறகு உரையை மொழிபெயர்",
|
||||
"Read text aloud after selection": "தேர்வுக்குப் பிறகு உரையை ஓதுக",
|
||||
"Proofread text after selection": "தேர்வுக்குப் பிறகு உரையை திருத்துக",
|
||||
"{{activeCount}} active, {{pendingCount}} pending": "{{activeCount}} செயலில், {{pendingCount}} காத்திருப்பு",
|
||||
"{{failedCount}} failed": "{{failedCount}} தோல்வி",
|
||||
"Waiting...": "காத்திருக்கிறது...",
|
||||
"Failed": "தோல்வி",
|
||||
"Completed": "முடிந்தது",
|
||||
"Cancelled": "ரத்து செய்யப்பட்டது",
|
||||
"Retry": "மீண்டும் முயற்சிக்கவும்",
|
||||
"Active": "செயலில்",
|
||||
"Transfer Queue": "பரிமாற்ற வரிசை",
|
||||
"Upload All": "அனைத்தையும் பதிவேற்றவும்",
|
||||
"Download All": "அனைத்தையும் பதிவிறக்கவும்",
|
||||
"Resume Transfers": "பரிமாற்றங்களை தொடரவும்",
|
||||
"Pause Transfers": "பரிமாற்றங்களை இடைநிறுத்தவும்",
|
||||
"Pending": "காத்திருப்பு",
|
||||
"No transfers": "பரிமாற்றங்கள் இல்லை",
|
||||
"Retry All": "அனைத்தையும் மீண்டும் முயற்சிக்கவும்",
|
||||
"Clear Completed": "முடிந்ததை அழிக்கவும்",
|
||||
"Clear Failed": "தோல்வியை அழிக்கவும்",
|
||||
"Upload queued: {{title}}": "பதிவேற்றம் வரிசையில்: {{title}}",
|
||||
"Download queued: {{title}}": "பதிவிறக்கம் வரிசையில்: {{title}}",
|
||||
"Book not found in library": "நூலகத்தில் புத்தகம் கிடைக்கவில்லை",
|
||||
"Unknown error": "தெரியாத பிழை",
|
||||
"Please log in to continue": "தொடர உள்நுழையவும்",
|
||||
"Cloud File Transfers": "மேகக் கோப்பு பரிமாற்றங்கள்",
|
||||
"Show Search Results": "தேடல் முடிவுகளைக் காட்டு",
|
||||
"Search results for '{{term}}'": "'{{term}}' க்கான முடிவுகள்",
|
||||
"Close Search": "தேடலை மூடு",
|
||||
"Previous Result": "முந்தைய முடிவு",
|
||||
"Next Result": "அடுத்த முடிவு",
|
||||
"Bookmarks": "புக்மார்க்குகள்",
|
||||
"Annotations": "சிறுகுறிப்புகள்",
|
||||
"Show Results": "முடிவுகளைக் காட்டு",
|
||||
"Clear search": "தேடலை அழி",
|
||||
"Clear search history": "தேடல் வரலாற்றை அழி",
|
||||
"Tap to Toggle Footer": "அடிக்குறிப்பை மாற்ற தட்டவும்",
|
||||
"Show Current Time": "தற்போதைய நேரத்தைக் காண்பி",
|
||||
"Use 24 Hour Clock": "24 மணிநேர கடிகாரத்தைப் பயன்படுத்து",
|
||||
"Show Current Battery Status": "தற்போதைய பேட்டரி நிலையைக் காண்பி",
|
||||
"Exported successfully": "ஏற்றுமதி வெற்றி",
|
||||
"Book exported successfully.": "புத்தகம் வெற்றிகரமாக ஏற்றுமதி செய்யப்பட்டது.",
|
||||
"Failed to export the book.": "புத்தகத்தை ஏற்றுமதி செய்ய இயலவில்லை.",
|
||||
"Export Book": "புத்தகத்தை ஏற்றுமதி செய்",
|
||||
"Whole word:": "முழு சொல்:",
|
||||
"Error": "பிழை",
|
||||
"Unable to load the article. Try searching directly on {{link}}.": "கட்டுரையை ஏற்ற முடியவில்லை. நேரடியாக {{link}} இல் தேடவும்.",
|
||||
"Unable to load the word. Try searching directly on {{link}}.": "சொல்லை ஏற்ற முடியவில்லை. நேரடியாக {{link}} இல் தேடவும்.",
|
||||
"Date Published": "வெளியீட்டு தேதி",
|
||||
"Only for TTS:": "TTS க்கு மட்டும்:",
|
||||
"Uploaded": "பதிவேற்றப்பட்டது",
|
||||
"Downloaded": "பதிவிறக்கப்பட்டது",
|
||||
"Deleted": "நீக்கப்பட்டது",
|
||||
"Note:": "குறிப்பு:",
|
||||
"Time:": "நேரம்:",
|
||||
"Format Options": "வடிவமைப்பு விருப்பங்கள்",
|
||||
"Export Date": "ஏற்றுமதி தேதி",
|
||||
"Chapter Titles": "அத்தியாயத் தலைப்புகள்",
|
||||
"Chapter Separator": "அத்தியாய பிரிப்பான்",
|
||||
"Highlights": "சிறப்பம்சங்கள்",
|
||||
"Note Date": "குறிப்பு தேதி",
|
||||
"Advanced": "மேம்பட்ட",
|
||||
"Hide": "மறை",
|
||||
"Show": "காட்டு",
|
||||
"Use Custom Template": "தனிப்பயன் வார்ப்புரு பயன்படுத்து",
|
||||
"Export Template": "ஏற்றுமதி வார்ப்புரு",
|
||||
"Template Syntax:": "வார்ப்புரு தொடரியல்:",
|
||||
"Insert value": "மதிப்பு செருகு",
|
||||
"Format date (locale)": "தேதி வடிவமைப்பு (உள்ளூர்)",
|
||||
"Format date (custom)": "தேதி வடிவமைப்பு (தனிப்பயன்)",
|
||||
"Conditional": "நிபந்தனை",
|
||||
"Loop": "சுழற்சி",
|
||||
"Available Variables:": "கிடைக்கும் மாறிகள்:",
|
||||
"Book title": "புத்தகத் தலைப்பு",
|
||||
"Book author": "புத்தக ஆசிரியர்",
|
||||
"Export date": "ஏற்றுமதி தேதி",
|
||||
"Array of chapters": "அத்தியாயங்களின் பட்டியல்",
|
||||
"Chapter title": "அத்தியாய தலைப்பு",
|
||||
"Array of annotations": "குறிப்புகளின் பட்டியல்",
|
||||
"Highlighted text": "முன்னிலைப்படுத்தப்பட்ட உரை",
|
||||
"Annotation note": "குறிப்பு குறிப்பு",
|
||||
"Date Format Tokens:": "தேதி வடிவமைப்பு டோக்கன்கள்:",
|
||||
"Year (4 digits)": "ஆண்டு (4 இலக்கங்கள்)",
|
||||
"Month (01-12)": "மாதம் (01-12)",
|
||||
"Day (01-31)": "நாள் (01-31)",
|
||||
"Hour (00-23)": "மணி (00-23)",
|
||||
"Minute (00-59)": "நிமிடம் (00-59)",
|
||||
"Second (00-59)": "விநாடி (00-59)",
|
||||
"Show Source": "மூலத்தைக் காட்டு",
|
||||
"No content to preview": "முன்னோட்டத்திற்கு உள்ளடக்கம் இல்லை",
|
||||
"Export": "ஏற்றுமதி",
|
||||
"Set Timeout": "நேர வரம்பை அமைக்கவும்",
|
||||
"Select Voice": "குரலைத் தேர்ந்தெடுக்கவும்",
|
||||
"Toggle Sticky Bottom TTS Bar": "நிலையான TTS பட்டியை மாற்றவும்",
|
||||
"Display what I'm reading on Discord": "Discord இல் படிக்கும் புத்தகத்தை காட்டு",
|
||||
"Show on Discord": "Discord இல் காட்டு",
|
||||
"Instant {{action}}": "உடனடி {{action}}",
|
||||
"Instant {{action}} Disabled": "உடனடி {{action}} முடக்கப்பட்டது",
|
||||
"Annotation": "குறிப்பு",
|
||||
"Reset Template": "வார்ப்புருவை மீட்டமைக்கவும்",
|
||||
"Annotation style": "சிறுகுறிப்பு பாணி",
|
||||
"Annotation color": "சிறுகுறிப்பு நிறம்",
|
||||
"Annotation time": "சிறுகுறிப்பு நேரம்",
|
||||
"AI": "செயற்கை நுண்ணறிவு (AI)",
|
||||
"Are you sure you want to re-index this book?": "இந்த புத்தகத்தை மீண்டும் அட்டவணைப்படுத்த உறுதியாக இருக்கிறீர்களா?",
|
||||
"Enable AI in Settings": "அமைப்புகளில் AI ஐ இயக்கவும்",
|
||||
"Index This Book": "இந்த புத்தகத்தை அட்டவணைப்படுத்தவும்",
|
||||
"Enable AI search and chat for this book": "இந்த புத்தகத்திற்கு AI தேடல் மற்றும் அரட்டையை இயக்கவும்",
|
||||
"Start Indexing": "அட்டவணைப்படுத்தலைத் தொடங்கவும்",
|
||||
"Indexing book...": "புத்தகம் அட்டவணைப்படுத்தப்படுகிறது...",
|
||||
"Preparing...": "தயாராகிறது...",
|
||||
"Delete this conversation?": "இந்த உரையாடலை நீக்கவா?",
|
||||
"No conversations yet": "இதுவரை உரையாடல்கள் எதுவும் இல்லை",
|
||||
"Start a new chat to ask questions about this book": "இந்த புத்தகத்தைப் பற்றி கேள்விகள் கேட்க புதிய அரட்டையைத் தொடங்கவும்",
|
||||
"Rename": "மறுபெயரிடு",
|
||||
"New Chat": "புதிய அரட்டை",
|
||||
"Chat": "அரட்டை",
|
||||
"Please enter a model ID": "மாதிரி ஐடியை உள்ளிடவும்",
|
||||
"Model not available or invalid": "மாதிரி கிடைக்கவில்லை அல்லது தவறானது",
|
||||
"Failed to validate model": "மாதிரியைச் சரிபார்க்கத் தவறிவிட்டது",
|
||||
"Couldn't connect to Ollama. Is it running?": "Ollama வுடன் இணைக்க முடியவில்லை. அது இயங்குகிறதா?",
|
||||
"Invalid API key or connection failed": "தவறான ஏபிஐ (API) விசை அல்லது இணைப்பு தோல்வியடைந்தது",
|
||||
"Connection failed": "இணைப்பு தோல்வியடைந்தது",
|
||||
"AI Assistant": "AI உதவியாளர்",
|
||||
"Enable AI Assistant": "AI உதவியாளரை இயக்கவும்",
|
||||
"Provider": "வழங்குநர்",
|
||||
"Ollama (Local)": "Ollama (உள்ளூர்)",
|
||||
"AI Gateway (Cloud)": "AI கேட்வே (கிளவுட்)",
|
||||
"Ollama Configuration": "Ollama உள்ளமைவு",
|
||||
"Refresh Models": "மாதிரிகளைப் புதுப்பிக்கவும்",
|
||||
"AI Model": "AI மாதிரி",
|
||||
"No models detected": "மாதிரிகள் எதுவும் கண்டறியப்படவில்லை",
|
||||
"AI Gateway Configuration": "AI கேட்வே உள்ளமைவு",
|
||||
"Choose from a selection of high-quality, economical AI models. You can also bring your own model by selecting \"Custom Model\" below.": "உயர்தர, சிக்கனமான AI மாதிரிகளிலிருந்து தேர்ந்தெடுக்கவும். கீழே உள்ள \"தனிப்பயன் மாதிரி\" என்பதைத் தேர்ந்தெடுப்பதன் மூலம் உங்கள் சொந்த மாதிரியையும் கொண்டு வரலாம்.",
|
||||
"API Key": "API விசை",
|
||||
"Get Key": "விசையைப் பெறவும்",
|
||||
"Model": "மாதிரி",
|
||||
"Custom Model...": "தனிப்பயன் மாதிரி...",
|
||||
"Custom Model ID": "தனிப்பயன் மாதிரி ஐடி",
|
||||
"Validate": "சரிபார்க்கவும்",
|
||||
"Model available": "மாதிரி கிடைக்கிறது",
|
||||
"Connection": "இணைப்பு",
|
||||
"Test Connection": "இணைப்பைச் சோதிக்கவும்",
|
||||
"Connected": "இணைக்கப்பட்டது",
|
||||
"Custom Colors": "தனிப்பயன் வண்ணங்கள்",
|
||||
"Color E-Ink Mode": "வண்ண இ-இங்க் பயன்முறை",
|
||||
"Reading Ruler": "வாசிப்பு அளவுகோல்",
|
||||
"Enable Reading Ruler": "வாசிப்பு அளவுகோலை இயக்கு",
|
||||
"Lines to Highlight": "சிறப்பித்துக் காட்ட வேண்டிய வரிகள்",
|
||||
"Ruler Color": "அளவுகோல் வண்ணம்",
|
||||
"Command Palette": "கட்டளை தட்டு",
|
||||
"Search settings and actions...": "அமைப்புகள் மற்றும் செயல்களைத் தேடுங்கள்...",
|
||||
"No results found for": "இதற்கு முடிவுகள் எதுவும் கிடைக்கவில்லை",
|
||||
"Type to search settings and actions": "அமைப்புகள் மற்றும் செயல்களைத் தேட தட்டச்சு செய்க",
|
||||
"Recent": "சமீபத்திய",
|
||||
"navigate": "வழிசெலுத்து",
|
||||
"select": "தேர்ந்தெடு",
|
||||
"close": "மூடு",
|
||||
"Search Settings": "அமைப்புகளைத் தேடு",
|
||||
"Page Margins": "பக்க விளிம்புகள்",
|
||||
"AI Provider": "AI வழங்குநர்",
|
||||
"Ollama URL": "Ollama URL",
|
||||
"Ollama Model": "Ollama மாதிரி",
|
||||
"AI Gateway Model": "AI கேட்வே மாதிரி",
|
||||
"Actions": "செயல்கள்",
|
||||
"Navigation": "வழிசெலுத்தல்",
|
||||
"Set status for {{count}} book(s)_one": "{{count}} புத்தகத்திற்கான நிலையை அமைக்கவும்",
|
||||
"Set status for {{count}} book(s)_other": "{{count}} புத்தகங்களுக்கான நிலையை அமைக்கவும்",
|
||||
"Mark as Unread": "படிக்காததாகக் குறிக்கவும்",
|
||||
"Mark as Finished": "முடித்ததாகக் குறிக்கவும்",
|
||||
"Finished": "முடிந்தது",
|
||||
"Unread": "படிக்கவில்லை",
|
||||
"Clear Status": "நிலையை அழி",
|
||||
"Status": "நிலை",
|
||||
"Loading": "ஏற்றுகிறது...",
|
||||
"Exit Paragraph Mode": "பத்தி பயன்முறையிலிருந்து வெளியேறு",
|
||||
"Paragraph Mode": "பத்தி பயன்முறை",
|
||||
"Embedding Model": "உட்பொதி மாதிரி",
|
||||
"{{count}} book(s) synced_one": "{{count}} புத்தகம் ஒத்திசைக்கப்பட்டது",
|
||||
"{{count}} book(s) synced_other": "{{count}} புத்தகங்கள் ஒத்திசைக்கப்பட்டன",
|
||||
"Unable to start RSVP": "RSVP-ஐத் தொடங்க முடியவில்லை",
|
||||
"RSVP not supported for PDF": "PDF-க்கு RSVP ஆதரவு இல்லை",
|
||||
"Select Chapter": "அத்தியாயத்தைத் தேர்ந்தெடு",
|
||||
"Context": "சூழல்",
|
||||
"Ready": "தயார்",
|
||||
"Chapter Progress": "அத்தியாய முன்னேற்றம்",
|
||||
"words": "வார்த்தைகள்",
|
||||
"{{time}} left": "{{time}} மீதமுள்ளது",
|
||||
"Reading progress": "வாசிப்பு முன்னேற்றம்",
|
||||
"Click to seek": "தேட கிளிக் செய்க",
|
||||
"Skip back 15 words": "15 வார்த்தைகள் பின்னால் செல்",
|
||||
"Back 15 words (Shift+Left)": "15 வார்த்தைகள் பின்னால் செல் (Shift+Left)",
|
||||
"Pause (Space)": "நிறுத்து (Space)",
|
||||
"Play (Space)": "இயக்கு (Space)",
|
||||
"Skip forward 15 words": "15 வார்த்தைகள் முன்னால் செல்",
|
||||
"Forward 15 words (Shift+Right)": "15 வார்த்தைகள் முன்னால் செல் (Shift+Right)",
|
||||
"Decrease speed": "வேகத்தைக் குறை",
|
||||
"Slower (Left/Down)": "மெதுவாக (Left/Down)",
|
||||
"Increase speed": "வேகத்தை அதிகரி",
|
||||
"Faster (Right/Up)": "வேகமாக (Right/Up)",
|
||||
"Start RSVP Reading": "RSVP வாசிப்பைத் தொடங்கு",
|
||||
"Choose where to start reading": "எங்கிருந்து வாசிக்கத் தொடங்க வேண்டும் என்பதைத் தேர்வு செய்க",
|
||||
"From Chapter Start": "அத்தியாயத்தின் தொடக்கத்திலிருந்து",
|
||||
"Start reading from the beginning of the chapter": "அத்தியாயத்தின் தொடக்கத்திலிருந்து வாசிக்கத் தொடங்கு",
|
||||
"Resume": "தொடரவும்",
|
||||
"Continue from where you left off": "நீங்கள் விட்ட இடத்திலிருந்து தொடரவும்",
|
||||
"From Current Page": "தற்போதைய பக்கத்திலிருந்து",
|
||||
"Start from where you are currently reading": "நீங்கள் தற்போது வாசிக்கும் இடத்திலிருந்து தொடங்கு",
|
||||
"From Selection": "தேர்விலிருந்து",
|
||||
"Speed Reading Mode": "வேக வாசிப்பு முறை",
|
||||
"Scroll left": "இடதுபுறம் உருட்டவும்",
|
||||
"Scroll right": "வலதுபுறம் உருட்டவும்",
|
||||
"Library Sync Progress": "நூலக ஒத்திசைவு நிலை",
|
||||
"Back to library": "நூலகத்திற்குத் திரும்பு",
|
||||
"Group by...": "இதன் படி குழுவாக்கு...",
|
||||
"Export as Plain Text": "எளிய உரையாக ஏற்றுமதி செய்",
|
||||
"Export as Markdown": "Markdown ஆக ஏற்றுமதி செய்",
|
||||
"Show Page Navigation Buttons": "வழிசெலுத்தல் பொத்தான்கள்",
|
||||
"Page {{number}}": "பக்கம் {{number}}",
|
||||
"highlight": "சிறப்பித்துக் காட்டு",
|
||||
"underline": "அடிக்கோடு",
|
||||
"squiggly": "வளைந்த கோடு",
|
||||
"red": "சிவப்பு",
|
||||
"violet": "ஊதா",
|
||||
"blue": "நீலம்",
|
||||
"green": "பச்சை",
|
||||
"yellow": "மஞ்சள்",
|
||||
"Select {{style}} style": "{{style}} பாணியைத் தேர்ந்தெடுக்கவும்",
|
||||
"Select {{color}} color": "{{color}} நிறத்தைத் தேர்ந்தெடுக்கவும்",
|
||||
"Close Book": "புத்தகத்தை மூடு",
|
||||
"Speed Reading": "வேக வாசிப்பு",
|
||||
"Close Speed Reading": "வேக வாசிப்பை மூடு",
|
||||
"Authors": "ஆசிரியர்கள்",
|
||||
"Books": "புத்தகங்கள்",
|
||||
"Groups": "குழுக்கள்",
|
||||
"Back to TTS Location": "TTS இடத்திற்குத் திரும்பு",
|
||||
"Metadata": "மெட்டாடேட்டா",
|
||||
"Image viewer": "படக் காட்சிப்பவர்",
|
||||
"Previous Image": "முந்தைய படம்",
|
||||
"Next Image": "அடுத்த படம்",
|
||||
"Zoomed": "பெரிதாக்கப்பட்டது",
|
||||
"Zoom level": "பெரிதாக்கும் நிலை",
|
||||
"Table viewer": "அட்டவணை காட்சிப்பவர்",
|
||||
"Unable to connect to Readwise. Please check your network connection.": "Readwise உடன் இணைக்க முடியவில்லை. உங்கள் நெட்வொர்க் இணைப்பைச் சரிபார்க்கவும்.",
|
||||
"Invalid Readwise access token": "தவறான Readwise அணுகல் டோக்கன்",
|
||||
"Disconnected from Readwise": "Readwise இலிருந்து துண்டிக்கப்பட்டது",
|
||||
"Never": "ஒருபோதும் இல்லை",
|
||||
"Readwise Settings": "Readwise அமைப்புகள்",
|
||||
"Connected to Readwise": "Readwise உடன் இணைக்கப்பட்டது",
|
||||
"Last synced: {{time}}": "கடைசியாக ஒத்திசைக்கப்பட்டது: {{time}}",
|
||||
"Sync Enabled": "ஒத்திசைவு இயக்கப்பட்டது",
|
||||
"Disconnect": "துண்டி",
|
||||
"Connect your Readwise account to sync highlights.": "சிறப்பம்சங்களை ஒத்திசைக்க உங்கள் Readwise கணக்கை இணைக்கவும்.",
|
||||
"Get your access token at": "உங்கள் அணுகல் டோக்கனை இங்கே பெறவும்",
|
||||
"Access Token": "அணுகல் டோக்கன்",
|
||||
"Paste your Readwise access token": "உங்கள் Readwise அணுகல் டோக்கனை ஒட்டவும்",
|
||||
"Config": "கட்டமைப்பு",
|
||||
"Readwise Sync": "Readwise ஒத்திசைவு",
|
||||
"Push Highlights": "சிறப்பம்சங்களை அனுப்பு",
|
||||
"Highlights synced to Readwise": "சிறப்பம்சங்கள் Readwise உடன் ஒத்திசைக்கப்பட்டன",
|
||||
"Readwise sync failed: no internet connection": "Readwise ஒத்திசைவு தோல்வியடைந்தது: இணைய இணைப்பு இல்லை",
|
||||
"Readwise sync failed: {{error}}": "Readwise ஒத்திசைவு தோல்வியடைந்தது: {{error}}",
|
||||
"System Screen Brightness": "கணினித் திரை பிரகாசம்",
|
||||
"Page:": "பக்கம்:",
|
||||
"Page: {{number}}": "பக்கம்: {{number}}",
|
||||
"Annotation page number": "சிறுகுறிப்புப் பக்க எண்",
|
||||
"Translating...": "மொழிபெயர்க்கிறது...",
|
||||
"Show Battery Percentage": "பேட்டரி சதவீதத்தைக் காண்பி",
|
||||
"Hide Scrollbar": "உருள்பட்டையை மறை",
|
||||
"Skip to last reading position": "கடைசி வாசிப்பு நிலைக்குச் செல்",
|
||||
"Show context": "சூழலைக் காட்டு",
|
||||
"Hide context": "சூழலை மறை",
|
||||
"Decrease font size": "எழுத்துரு அளவைக் குறை",
|
||||
"Increase font size": "எழுத்துரு அளவை அதிகரி",
|
||||
"Focus": "குவியம்",
|
||||
"Theme color": "தீம் நிறம்",
|
||||
"Import failed": "இறக்குமதி தோல்வி",
|
||||
"Available Formatters:": "கிடைக்கும் வடிவமைப்பிகள்:",
|
||||
"Format date": "தேதி வடிவமைப்பு",
|
||||
"Markdown block quote (> per line)": "Markdown மேற்கோள் தொகுதி (ஒவ்வொரு வரிக்கும் >)",
|
||||
"Newlines to <br>": "புதிய வரிகளை <br> ஆக",
|
||||
"Change case": "எழுத்து வகை மாற்றம்",
|
||||
"Trim whitespace": "வெற்றிடங்களை நீக்கு",
|
||||
"Truncate to n characters": "n எழுத்துகளுக்கு சுருக்கு",
|
||||
"Replace text": "உரையை மாற்று",
|
||||
"Fallback value": "இயல்புநிலை மதிப்பு",
|
||||
"Get length": "நீளத்தைப் பெறு",
|
||||
"First/last element": "முதல்/கடைசி உறுப்பு",
|
||||
"Join array": "அணியை இணை",
|
||||
"Backup failed: {{error}}": "காப்புப்பிரதி தோல்வி: {{error}}",
|
||||
"Select Backup": "காப்புப்பிரதியைத் தேர்ந்தெடுக்கவும்",
|
||||
"Restore failed: {{error}}": "மீட்டமைப்பு தோல்வி: {{error}}",
|
||||
"Backup & Restore": "காப்புப்பிரதி & மீட்டமைப்பு",
|
||||
"Create a backup of your library or restore from a previous backup. Restoring will merge with your current library.": "உங்கள் நூலகத்தின் காப்புப்பிரதியை உருவாக்கவும் அல்லது முந்தைய காப்புப்பிரதியிலிருந்து மீட்டமைக்கவும். மீட்டமைப்பு உங்கள் தற்போதைய நூலகத்துடன் இணைக்கப்படும்.",
|
||||
"Backup Library": "நூலகத்தை காப்புப்பிரதி எடு",
|
||||
"Restore Library": "நூலகத்தை மீட்டமை",
|
||||
"Creating backup...": "காப்புப்பிரதி உருவாக்கப்படுகிறது...",
|
||||
"Restoring library...": "நூலகம் மீட்டமைக்கப்படுகிறது...",
|
||||
"{{current}} of {{total}} items": "{{current}} / {{total}} உருப்படிகள்",
|
||||
"Backup completed successfully!": "காப்புப்பிரதி வெற்றிகரமாக முடிந்தது!",
|
||||
"Restore completed successfully!": "மீட்டமைப்பு வெற்றிகரமாக முடிந்தது!",
|
||||
"Your library has been saved to the selected location.": "உங்கள் நூலகம் தேர்ந்தெடுக்கப்பட்ட இடத்தில் சேமிக்கப்பட்டது.",
|
||||
"{{added}} books added, {{updated}} books updated.": "{{added}} புத்தகங்கள் சேர்க்கப்பட்டன, {{updated}} புத்தகங்கள் புதுப்பிக்கப்பட்டன.",
|
||||
"Operation failed": "செயல்பாடு தோல்வி",
|
||||
"Loading library...": "நூலகம் ஏற்றப்படுகிறது...",
|
||||
"{{count}} books refreshed_one": "{{count}} புத்தகம் புதுப்பிக்கப்பட்டது",
|
||||
"{{count}} books refreshed_other": "{{count}} புத்தகங்கள் புதுப்பிக்கப்பட்டன",
|
||||
"Failed to refresh metadata": "மெட்டாடேட்டா புதுப்பிப்பு தோல்வி",
|
||||
"Refresh Metadata": "மெட்டாடேட்டா புதுப்பிக்கவும்"
|
||||
}
|
||||
|
||||
@@ -23,9 +23,6 @@
|
||||
"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": "อัปเดตรหัสผ่าน",
|
||||
@@ -156,7 +153,7 @@
|
||||
"Add your notes here...": "เพิ่มบันทึกที่นี่...",
|
||||
"Search notes and excerpts...": "ค้นหาบันทึกและข้อความ...",
|
||||
"{{time}} min left in chapter": "เหลือ {{time}} นาทีในบท",
|
||||
"{{count}} pages left in chapter_other": "เหลือ {{count}} หน้าในบท",
|
||||
"{{count}} pages left in chapter_other": "<1>เหลือ </1><0>{{count}}</0><1> หน้าในบท</1>",
|
||||
"Theme Mode": "โหมดธีม",
|
||||
"Invert Image In Dark Mode": "กลับสีรูปในโหมดมืด",
|
||||
"Override Book Color": "เขียนทับสีหนังสือ",
|
||||
@@ -255,7 +252,6 @@
|
||||
"Link Color": "สีลิงก์",
|
||||
"Preview": "ดูตัวอย่าง",
|
||||
"Font & Layout": "ฟอนต์และเลย์เอาต์",
|
||||
"Book Cover": "ปกหนังสือ",
|
||||
"More Info": "ข้อมูลเพิ่มเติม",
|
||||
"Parallel Read": "อ่านคู่ขนาน",
|
||||
"Disable": "ปิด",
|
||||
@@ -273,7 +269,6 @@
|
||||
"Table of Contents": "สารบัญ",
|
||||
"Sidebar": "แถบข้าง",
|
||||
"Disable Translation": "ปิดการแปล",
|
||||
"TTS not supported for PDF": "ไม่รองรับ TTS สำหรับ PDF",
|
||||
"No Timeout": "ไม่จำกัดเวลา",
|
||||
"{{value}} minute": "{{value}} นาที",
|
||||
"{{value}} minutes": "{{value}} นาที",
|
||||
@@ -380,8 +375,8 @@
|
||||
"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",
|
||||
"Source Han Serif CN": "Source Han Serif CN",
|
||||
"Huiwen-MinchoGBK": "Huiwen Mincho",
|
||||
"KingHwa_OldSong": "KingHwa_OldSong",
|
||||
"Azure Translator": "Azure Translator",
|
||||
"DeepL": "DeepL",
|
||||
@@ -400,7 +395,7 @@
|
||||
"Reveal in File Explorer": "แสดงใน File Explorer",
|
||||
"Reveal in Folder": "แสดงในโฟลเดอร์",
|
||||
"Don't have an account? Sign up": "ยังไม่มีบัญชี? สมัครสมาชิก",
|
||||
"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— วิลเลียม เชกสเปียร์",
|
||||
"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— วิลเลียม เชกสเปียร์",
|
||||
"What's New in Readest": "มีอะไรใหม่ใน Readest",
|
||||
"Enter book title": "ป้อนชื่อหนังสือ",
|
||||
"Subtitle": "หัวข้อรอง",
|
||||
@@ -599,11 +594,10 @@
|
||||
"Size": "ขนาด",
|
||||
"Cover": "ปก",
|
||||
"Contain": "บรรจุ",
|
||||
"{{number}} pages left in chapter": "เหลือ {{number}} หน้าในบท",
|
||||
"{{number}} pages left in chapter": "<1>เหลือ </1><0>{{number}}</0><1> หน้าในบท</1>",
|
||||
"Device": "อุปกรณ์",
|
||||
"E-Ink Mode": "โหมด E-Ink",
|
||||
"Highlight Colors": "สีไฮไลต์",
|
||||
"Auto Screen Brightness": "ความสว่างหน้าจออัตโนมัติ",
|
||||
"Pagination": "การแบ่งหน้า",
|
||||
"Disable Double Tap": "ปิดการแตะสองครั้ง",
|
||||
"Tap to Paginate": "แตะเพื่อแบ่งหน้า",
|
||||
@@ -652,5 +646,448 @@
|
||||
"Update email": "อัปเดตอีเมล",
|
||||
"Current email": "อีเมลปัจจุบัน",
|
||||
"Update Email": "อัปเดตอีเมล",
|
||||
"All": "ทั้งหมด"
|
||||
"All": "ทั้งหมด",
|
||||
"Unable to open book": "ไม่สามารถเปิดหนังสือได้",
|
||||
"Punctuation": "เครื่องหมายวรรคตอน",
|
||||
"Replace Quotation Marks": "แทนที่เครื่องหมายคำพูด",
|
||||
"Enabled only in vertical layout.": "เปิดใช้งานเฉพาะในเค้าโครงแนวตั้งเท่านั้น",
|
||||
"No Conversion": "ไม่แปลงค่า",
|
||||
"Simplified to Traditional": "ตัวย่อ → ตัวเต็ม",
|
||||
"Traditional to Simplified": "ตัวเต็ม → ตัวย่อ",
|
||||
"Simplified to Traditional (Taiwan)": "ตัวย่อ → ตัวเต็ม (ไต้หวัน)",
|
||||
"Simplified to Traditional (Hong Kong)": "ตัวย่อ → ตัวเต็ม (ฮ่องกง)",
|
||||
"Simplified to Traditional (Taiwan), with phrases": "ตัวย่อ → ตัวเต็ม (ไต้หวัน • วลี)",
|
||||
"Traditional (Taiwan) to Simplified": "ตัวเต็ม (ไต้หวัน) → ตัวย่อ",
|
||||
"Traditional (Hong Kong) to Simplified": "ตัวเต็ม (ฮ่องกง) → ตัวย่อ",
|
||||
"Traditional (Taiwan) to Simplified, with phrases": "ตัวเต็ม (ไต้หวัน • วลี) → ตัวย่อ",
|
||||
"Convert Simplified and Traditional Chinese": "แปลงจีนตัวย่อ/ตัวเต็ม",
|
||||
"Convert Mode": "โหมดแปลงค่า",
|
||||
"Failed to auto-save book cover for lock screen: {{error}}": "ไม่สามารถบันทึกปกหนังสือสำหรับหน้าจอล็อกโดยอัตโนมัติ: {{error}}",
|
||||
"Download from Cloud": "ดาวน์โหลดจากคลาวด์",
|
||||
"Upload to Cloud": "อัปโหลดไปยังคลาวด์",
|
||||
"Clear Custom Fonts": "ล้างฟอนต์กำหนดเอง",
|
||||
"Columns": "คอลัมน์",
|
||||
"OPDS Catalogs": "แคตตาล็อก OPDS",
|
||||
"Adding LAN addresses is not supported in the web app version.": "ไม่รองรับการเพิ่มที่อยู่ LAN ในเวอร์ชันเว็บแอป",
|
||||
"Invalid OPDS catalog. Please check the URL.": "แคตตาล็อก OPDS ไม่ถูกต้อง กรุณาตรวจสอบ URL",
|
||||
"Browse and download books from online catalogs": "เรียกดูและดาวน์โหลดหนังสือจากแคตตาล็อกออนไลน์",
|
||||
"My Catalogs": "แคตตาล็อกของฉัน",
|
||||
"Add Catalog": "เพิ่มแคตตาล็อก",
|
||||
"No catalogs yet": "ยังไม่มีแคตตาล็อก",
|
||||
"Add your first OPDS catalog to start browsing books": "เพิ่มแคตตาล็อก OPDS แรกของคุณเพื่อเริ่มเรียกดูหนังสือ",
|
||||
"Add Your First Catalog": "เพิ่มแคตตาล็อกแรกของคุณ",
|
||||
"Browse": "เรียกดู",
|
||||
"Popular Catalogs": "แคตตาล็อกยอดนิยม",
|
||||
"Add": "เพิ่ม",
|
||||
"Add OPDS Catalog": "เพิ่มแคตตาล็อก OPDS",
|
||||
"Catalog Name": "ชื่อแคตตาล็อก",
|
||||
"My Calibre Library": "ห้องสมุด Calibre ของฉัน",
|
||||
"OPDS URL": "URL OPDS",
|
||||
"Username (optional)": "ชื่อผู้ใช้ (ไม่บังคับ)",
|
||||
"Password (optional)": "รหัสผ่าน (ไม่บังคับ)",
|
||||
"Description (optional)": "คำอธิบาย (ไม่บังคับ)",
|
||||
"A brief description of this catalog": "คำอธิบายสั้น ๆ ของแคตตาล็อกนี้",
|
||||
"Validating...": "กำลังตรวจสอบ...",
|
||||
"View All": "ดูทั้งหมด",
|
||||
"Forward": "ไปข้างหน้า",
|
||||
"Home": "หน้าแรก",
|
||||
"{{count}} items_other": "{{count}} รายการ",
|
||||
"Download completed": "ดาวน์โหลดเสร็จสิ้น",
|
||||
"Download failed": "ดาวน์โหลดล้มเหลว",
|
||||
"Open Access": "เข้าถึงได้ทันที",
|
||||
"Borrow": "ยืม",
|
||||
"Buy": "ซื้อ",
|
||||
"Subscribe": "สมัครสมาชิก",
|
||||
"Sample": "ตัวอย่าง",
|
||||
"Download": "ดาวน์โหลด",
|
||||
"Open & Read": "เปิดและอ่าน",
|
||||
"Tags": "แท็ก",
|
||||
"Tag": "แท็ก",
|
||||
"First": "แรก",
|
||||
"Previous": "ก่อนหน้า",
|
||||
"Next": "ถัดไป",
|
||||
"Last": "สุดท้าย",
|
||||
"Cannot Load Page": "ไม่สามารถโหลดหน้าหน้าได้",
|
||||
"An error occurred": "เกิดข้อผิดพลาด",
|
||||
"Online Library": "ห้องสมุดออนไลน์",
|
||||
"URL must start with http:// or https://": "URL ต้องเริ่มต้นด้วย http:// หรือ https://",
|
||||
"Title, Author, Tag, etc...": "ชื่อเรื่อง ผู้แต่ง แท็ก ฯลฯ...",
|
||||
"Query": "แบบสอบถาม",
|
||||
"Subject": "หัวข้อ",
|
||||
"Enter {{terms}}": "ป้อน {{terms}}",
|
||||
"No search results found": "ไม่พบผลการค้นหา",
|
||||
"Failed to load OPDS feed: {{status}} {{statusText}}": "ไม่สามารถโหลดฟีด OPDS ได้: {{status}} {{statusText}}",
|
||||
"Search in {{title}}": "ค้นหาใน {{title}}",
|
||||
"Manage Storage": "จัดการพื้นที่เก็บข้อมูล",
|
||||
"Failed to load files": "ไม่สามารถโหลดไฟล์ได้",
|
||||
"Deleted {{count}} file(s)_other": "ลบไฟล์เรียบร้อยแล้ว",
|
||||
"Failed to delete {{count}} file(s)_other": "ลบไฟล์ไม่สำเร็จ",
|
||||
"Failed to delete files": "ลบไฟล์ไม่สำเร็จ",
|
||||
"Total Files": "จำนวนไฟล์ทั้งหมด",
|
||||
"Total Size": "ขนาดรวมทั้งหมด",
|
||||
"Quota": "โควต้า",
|
||||
"Used": "ใช้ไปแล้ว",
|
||||
"Files": "ไฟล์",
|
||||
"Search files...": "ค้นหาไฟล์...",
|
||||
"Newest First": "ใหม่ที่สุดก่อน",
|
||||
"Oldest First": "เก่าที่สุดก่อน",
|
||||
"Largest First": "ใหญ่ที่สุดก่อน",
|
||||
"Smallest First": "เล็กที่สุดก่อน",
|
||||
"Name A-Z": "ชื่อ A-ฮ",
|
||||
"Name Z-A": "ชื่อ ฮ-A",
|
||||
"{{count}} selected_other": "เลือกไฟล์แล้ว",
|
||||
"Delete Selected": "ลบไฟล์ที่เลือก",
|
||||
"Created": "สร้างเมื่อ",
|
||||
"No files found": "ไม่พบไฟล์",
|
||||
"No files uploaded yet": "ยังไม่มีการอัปโหลดไฟล์",
|
||||
"files": "ไฟล์",
|
||||
"Page {{current}} of {{total}}": "หน้า {{current}} จาก {{total}}",
|
||||
"Are you sure to delete {{count}} selected file(s)?_other": "คุณแน่ใจหรือว่าต้องการลบไฟล์ที่เลือก?",
|
||||
"Cloud Storage Usage": "การใช้งานพื้นที่เก็บข้อมูลคลาวด์",
|
||||
"Rename Group": "เปลี่ยนชื่อกลุ่ม",
|
||||
"From Directory": "จากไดเรกทอรี",
|
||||
"Successfully imported {{count}} book(s)_other": "นำเข้า {{count}} หนังสือเรียบร้อยแล้ว",
|
||||
"Count": "นับ",
|
||||
"Start Page": "หน้าเริ่มต้น",
|
||||
"Search in OPDS Catalog...": "ค้นหาในแคตตาล็อก OPDS...",
|
||||
"Please log in to use advanced TTS features": "กรุณาเข้าสู่ระบบเพื่อใช้ฟีเจอร์ TTS ขั้นสูง",
|
||||
"Word limit of 30 words exceeded.": "เกินขีดจำกัด 30 คำแล้ว",
|
||||
"Proofread": "ตรวจทาน",
|
||||
"Current selection": "การเลือกปัจจุบัน",
|
||||
"All occurrences in this book": "การปรากฏทั้งหมดในหนังสือเล่มนี้",
|
||||
"All occurrences in your library": "การปรากฏทั้งหมดในคลังหนังสือของคุณ",
|
||||
"Selected text:": "ข้อความที่เลือก:",
|
||||
"Replace with:": "แทนที่ด้วย:",
|
||||
"Enter text...": "ป้อนข้อความ…",
|
||||
"Case sensitive:": "คำนึงถึงตัวพิมพ์เล็ก/ใหญ่:",
|
||||
"Scope:": "ขอบเขต:",
|
||||
"Selection": "การเลือก",
|
||||
"Library": "คลังหนังสือ",
|
||||
"Yes": "ใช่",
|
||||
"No": "ไม่",
|
||||
"Proofread Replacement Rules": "กฎการแทนที่สำหรับการตรวจทาน",
|
||||
"Selected Text Rules": "กฎสำหรับข้อความที่เลือก",
|
||||
"No selected text replacement rules": "ไม่มีกฎการแทนที่สำหรับข้อความที่เลือก",
|
||||
"Book Specific Rules": "กฎเฉพาะของหนังสือ",
|
||||
"No book-level replacement rules": "ไม่มีกฎการแทนที่ระดับหนังสือ",
|
||||
"Disable Quick Action": "ปิดใช้งานการดำเนินการด่วน",
|
||||
"Enable Quick Action on Selection": "เปิดใช้งานการดำเนินการด่วนเมื่อเลือก",
|
||||
"None": "ไม่มี",
|
||||
"Annotation Tools": "เครื่องมือหมายเหตุ",
|
||||
"Enable Quick Actions": "เปิดใช้งานการดำเนินการด่วน",
|
||||
"Quick Action": "การดำเนินการด่วน",
|
||||
"Copy to Notebook": "คัดลอกไปยังสมุดบันทึก",
|
||||
"Copy text after selection": "คัดลอกข้อความหลังการเลือก",
|
||||
"Highlight text after selection": "ไฮไลต์ข้อความหลังการเลือก",
|
||||
"Annotate text after selection": "เพิ่มหมายเหตุข้อความหลังการเลือก",
|
||||
"Search text after selection": "ค้นหาข้อความหลังการเลือก",
|
||||
"Look up text in dictionary after selection": "ค้นหาข้อความในพจนานุกรมหลังการเลือก",
|
||||
"Look up text in Wikipedia after selection": "ค้นหาข้อความในวิกิพีเดียหลังการเลือก",
|
||||
"Translate text after selection": "แปลข้อความหลังการเลือก",
|
||||
"Read text aloud after selection": "อ่านข้อความออกเสียงหลังการเลือก",
|
||||
"Proofread text after selection": "ตรวจทานข้อความหลังการเลือก",
|
||||
"{{activeCount}} active, {{pendingCount}} pending": "{{activeCount}} กำลังดำเนินการ, {{pendingCount}} รอดำเนินการ",
|
||||
"{{failedCount}} failed": "{{failedCount}} ล้มเหลว",
|
||||
"Waiting...": "กำลังรอ...",
|
||||
"Failed": "ล้มเหลว",
|
||||
"Completed": "เสร็จสิ้น",
|
||||
"Cancelled": "ยกเลิก",
|
||||
"Retry": "ลองใหม่",
|
||||
"Active": "กำลังดำเนินการ",
|
||||
"Transfer Queue": "คิวการถ่ายโอน",
|
||||
"Upload All": "อัปโหลดทั้งหมด",
|
||||
"Download All": "ดาวน์โหลดทั้งหมด",
|
||||
"Resume Transfers": "ดำเนินการถ่ายโอนต่อ",
|
||||
"Pause Transfers": "หยุดการถ่ายโอนชั่วคราว",
|
||||
"Pending": "รอดำเนินการ",
|
||||
"No transfers": "ไม่มีการถ่ายโอน",
|
||||
"Retry All": "ลองใหม่ทั้งหมด",
|
||||
"Clear Completed": "ล้างที่เสร็จสิ้น",
|
||||
"Clear Failed": "ล้างที่ล้มเหลว",
|
||||
"Upload queued: {{title}}": "อัปโหลดอยู่ในคิว: {{title}}",
|
||||
"Download queued: {{title}}": "ดาวน์โหลดอยู่ในคิว: {{title}}",
|
||||
"Book not found in library": "ไม่พบหนังสือในห้องสมุด",
|
||||
"Unknown error": "ข้อผิดพลาดที่ไม่รู้จัก",
|
||||
"Please log in to continue": "กรุณาเข้าสู่ระบบเพื่อดำเนินการต่อ",
|
||||
"Cloud File Transfers": "การถ่ายโอนไฟล์คลาวด์",
|
||||
"Show Search Results": "แสดงผลการค้นหา",
|
||||
"Search results for '{{term}}'": "ผลลัพธ์สำหรับ '{{term}}'",
|
||||
"Close Search": "ปิดการค้นหา",
|
||||
"Previous Result": "ผลลัพธ์ก่อนหน้า",
|
||||
"Next Result": "ผลลัพธ์ถัดไป",
|
||||
"Bookmarks": "บุ๊กมาร์ก",
|
||||
"Annotations": "คำอธิบายประกอบ",
|
||||
"Show Results": "แสดงผลลัพธ์",
|
||||
"Clear search": "ล้างการค้นหา",
|
||||
"Clear search history": "ล้างประวัติการค้นหา",
|
||||
"Tap to Toggle Footer": "แตะเพื่อสลับส่วนท้าย",
|
||||
"Show Current Time": "แสดงเวลาปัจจุบัน",
|
||||
"Use 24 Hour Clock": "ใช้รูปแบบเวลา 24 ชั่วโมง",
|
||||
"Show Current Battery Status": "แสดงสถานะแบตเตอรี่ปัจจุบัน",
|
||||
"Exported successfully": "ส่งออกสำเร็จ",
|
||||
"Book exported successfully.": "ส่งออกหนังสือสำเร็จ",
|
||||
"Failed to export the book.": "ส่งออกหนังสือล้มเหลว",
|
||||
"Export Book": "ส่งออกหนังสือ",
|
||||
"Whole word:": "คำทั้งคำ:",
|
||||
"Error": "ข้อผิดพลาด",
|
||||
"Unable to load the article. Try searching directly on {{link}}.": "ไม่สามารถโหลดบทความได้ ลองค้นหาโดยตรงที่ {{link}}",
|
||||
"Unable to load the word. Try searching directly on {{link}}.": "ไม่สามารถโหลดคำได้ ลองค้นหาโดยตรงที่ {{link}}",
|
||||
"Date Published": "วันที่เผยแพร่",
|
||||
"Only for TTS:": "สำหรับ TTS เท่านั้น:",
|
||||
"Uploaded": "อัปโหลดแล้ว",
|
||||
"Downloaded": "ดาวน์โหลดแล้ว",
|
||||
"Deleted": "ลบแล้ว",
|
||||
"Note:": "หมายเหตุ:",
|
||||
"Time:": "เวลา:",
|
||||
"Format Options": "ตัวเลือกรูปแบบ",
|
||||
"Export Date": "วันที่ส่งออก",
|
||||
"Chapter Titles": "ชื่อบท",
|
||||
"Chapter Separator": "ตัวคั่นบท",
|
||||
"Highlights": "ไฮไลต์",
|
||||
"Note Date": "วันที่หมายเหตุ",
|
||||
"Advanced": "ขั้นสูง",
|
||||
"Hide": "ซ่อน",
|
||||
"Show": "แสดง",
|
||||
"Use Custom Template": "ใช้เทมเพลตที่กำหนดเอง",
|
||||
"Export Template": "เทมเพลตส่งออก",
|
||||
"Template Syntax:": "ไวยากรณ์เทมเพลต:",
|
||||
"Insert value": "แทรกค่า",
|
||||
"Format date (locale)": "จัดรูปแบบวันที่ (ท้องถิ่น)",
|
||||
"Format date (custom)": "จัดรูปแบบวันที่ (กำหนดเอง)",
|
||||
"Conditional": "เงื่อนไข",
|
||||
"Loop": "ลูป",
|
||||
"Available Variables:": "ตัวแปรที่พร้อมใช้งาน:",
|
||||
"Book title": "ชื่อหนังสือ",
|
||||
"Book author": "ผู้แต่งหนังสือ",
|
||||
"Export date": "วันที่ส่งออก",
|
||||
"Array of chapters": "อาร์เรย์ของบท",
|
||||
"Chapter title": "ชื่อบท",
|
||||
"Array of annotations": "อาร์เรย์ของคำอธิบาย",
|
||||
"Highlighted text": "ข้อความที่ไฮไลต์",
|
||||
"Annotation note": "หมายเหตุคำอธิบาย",
|
||||
"Date Format Tokens:": "โทเค็นรูปแบบวันที่:",
|
||||
"Year (4 digits)": "ปี (4 หลัก)",
|
||||
"Month (01-12)": "เดือน (01-12)",
|
||||
"Day (01-31)": "วัน (01-31)",
|
||||
"Hour (00-23)": "ชั่วโมง (00-23)",
|
||||
"Minute (00-59)": "นาที (00-59)",
|
||||
"Second (00-59)": "วินาที (00-59)",
|
||||
"Show Source": "แสดงซอร์ส",
|
||||
"No content to preview": "ไม่มีเนื้อหาให้แสดงตัวอย่าง",
|
||||
"Export": "ส่งออก",
|
||||
"Set Timeout": "ตั้งค่าหมดเวลา",
|
||||
"Select Voice": "เลือกเสียง",
|
||||
"Toggle Sticky Bottom TTS Bar": "สลับแถบ TTS แบบติด",
|
||||
"Display what I'm reading on Discord": "แสดงหนังสือที่กำลังอ่านบน Discord",
|
||||
"Show on Discord": "แสดงบน Discord",
|
||||
"Instant {{action}}": "{{action}}ทันที",
|
||||
"Instant {{action}} Disabled": "{{action}}ทันทีถูกปิดใช้งาน",
|
||||
"Annotation": "คำอธิบาย",
|
||||
"Reset Template": "รีเซ็ตเทมเพลต",
|
||||
"Annotation style": "สไตล์คำอธิบาย",
|
||||
"Annotation color": "สีคำอธิบาย",
|
||||
"Annotation time": "เวลาคำอธิบาย",
|
||||
"AI": "AI",
|
||||
"Are you sure you want to re-index this book?": "คุณแน่ใจหรือไม่ว่าต้องการสร้างดัชนีหนังสือเล่มนี้ใหม่?",
|
||||
"Enable AI in Settings": "เปิดใช้งาน AI ในการตั้งค่า",
|
||||
"Index This Book": "สร้างดัชนีหนังสือเล่มนี้",
|
||||
"Enable AI search and chat for this book": "เปิดใช้งานการค้นหา AI และแชทสำหรับหนังสือเล่มนี้",
|
||||
"Start Indexing": "เริ่มสร้างดัชนี",
|
||||
"Indexing book...": "กำลังสร้างดัชนีหนังสือ...",
|
||||
"Preparing...": "กำลังเตรียม...",
|
||||
"Delete this conversation?": "ลบการสนทนานี้?",
|
||||
"No conversations yet": "ยังไม่มีการสนทนา",
|
||||
"Start a new chat to ask questions about this book": "เริ่มแชทใหม่เพื่อถามคำถามเกี่ยวกับหนังสือเล่มนี้",
|
||||
"Rename": "เปลี่ยนชื่อ",
|
||||
"New Chat": "แชทใหม่",
|
||||
"Chat": "แชท",
|
||||
"Please enter a model ID": "กรุณาป้อน ID โมเดล",
|
||||
"Model not available or invalid": "โมเดลไม่พร้อมใช้งานหรือไม่ถูกต้อง",
|
||||
"Failed to validate model": "ไม่สามารถตรวจสอบโมเดลได้",
|
||||
"Couldn't connect to Ollama. Is it running?": "ไม่สามารถเชื่อมต่อกับ Ollama ได้ กำลังทำงานอยู่หรือไม่?",
|
||||
"Invalid API key or connection failed": "คีย์ API ไม่ถูกต้องหรือการเชื่อมต่อล้มเหลว",
|
||||
"Connection failed": "การเชื่อมต่อล้มเหลว",
|
||||
"AI Assistant": "ผู้ช่วย AI",
|
||||
"Enable AI Assistant": "เปิดใช้งานผู้ช่วย AI",
|
||||
"Provider": "ผู้ให้บริการ",
|
||||
"Ollama (Local)": "Ollama (ในเครื่อง)",
|
||||
"AI Gateway (Cloud)": "เกตเวย์ AI (คลาวด์)",
|
||||
"Ollama Configuration": "การกำหนดค่า Ollama",
|
||||
"Refresh Models": "รีเฟรชโมเดล",
|
||||
"AI Model": "โมเดล AI",
|
||||
"No models detected": "ไม่พบโมเดล",
|
||||
"AI Gateway Configuration": "การกำหนดค่าเกตเวย์ AI",
|
||||
"Choose from a selection of high-quality, economical AI models. You can also bring your own model by selecting \"Custom Model\" below.": "เลือกจากโมเดล AI คุณภาพสูงและประหยัด คุณยังสามารถใช้โมเดลของคุณเองโดยเลือก \"โมเดลกำหนดเอง\" ด้านล่าง",
|
||||
"API Key": "คีย์ API",
|
||||
"Get Key": "รับคีย์",
|
||||
"Model": "โมเดล",
|
||||
"Custom Model...": "โมเดลกำหนดเอง...",
|
||||
"Custom Model ID": "ID โมเดลกำหนดเอง",
|
||||
"Validate": "ตรวจสอบ",
|
||||
"Model available": "โมเดลพร้อมใช้งาน",
|
||||
"Connection": "การเชื่อมต่อ",
|
||||
"Test Connection": "ทดสอบการเชื่อมต่อ",
|
||||
"Connected": "เชื่อมต่อแล้ว",
|
||||
"Custom Colors": "สีที่กำหนดเอง",
|
||||
"Color E-Ink Mode": "โหมด E-Ink สี",
|
||||
"Reading Ruler": "ไม้บรรทัดการอ่าน",
|
||||
"Enable Reading Ruler": "เปิดใช้งานไม้บรรทัดการอ่าน",
|
||||
"Lines to Highlight": "บรรทัดที่ต้องการเน้น",
|
||||
"Ruler Color": "สีไม้บรรทัด",
|
||||
"Command Palette": "พาเลทคำสั่ง",
|
||||
"Search settings and actions...": "ค้นหาการตั้งค่าและคำสั่ง...",
|
||||
"No results found for": "ไม่พบผลลัพธ์สำหรับ",
|
||||
"Type to search settings and actions": "พิมพ์เพื่อค้นหาการตั้งค่าและคำสั่ง",
|
||||
"Recent": "ล่าสุด",
|
||||
"navigate": "นำทาง",
|
||||
"select": "เลือก",
|
||||
"close": "ปิด",
|
||||
"Search Settings": "ค้นหาการตั้งค่า",
|
||||
"Page Margins": "ระยะขอบหน้า",
|
||||
"AI Provider": "ผู้ให้บริการ AI",
|
||||
"Ollama URL": "Ollama URL",
|
||||
"Ollama Model": "โมเดล Ollama",
|
||||
"AI Gateway Model": "โมเดล AI Gateway",
|
||||
"Actions": "การกระทำ",
|
||||
"Navigation": "การนำทาง",
|
||||
"Set status for {{count}} book(s)_other": "ตั้งสถานะสำหรับหนังสือ {{count}} เล่ม",
|
||||
"Mark as Unread": "ทำเครื่องหมายว่ายังไม่อ่าน",
|
||||
"Mark as Finished": "ทำเครื่องหมายว่าอ่านจบแล้ว",
|
||||
"Finished": "อ่านจบแล้ว",
|
||||
"Unread": "ยังไม่ได้อ่าน",
|
||||
"Clear Status": "ล้างสถานะ",
|
||||
"Status": "สถานะ",
|
||||
"Loading": "กำลังโหลด...",
|
||||
"Exit Paragraph Mode": "ออกจากโหมดพารากราฟ",
|
||||
"Paragraph Mode": "โหมดพารากราฟ",
|
||||
"Embedding Model": "โมเดลการฝังตัว",
|
||||
"{{count}} book(s) synced_other": "ซิงค์หนังสือ {{count}} เล่มแล้ว",
|
||||
"Unable to start RSVP": "ไม่สามารถเริ่ม RSVP ได้",
|
||||
"RSVP not supported for PDF": "ไม่รองรับ RSVP สำหรับ PDF",
|
||||
"Select Chapter": "เลือกบท",
|
||||
"Context": "บริบท",
|
||||
"Ready": "พร้อม",
|
||||
"Chapter Progress": "ความคืบหน้าของบท",
|
||||
"words": "คำ",
|
||||
"{{time}} left": "เหลือ {{time}}",
|
||||
"Reading progress": "ความคืบหน้าการอ่าน",
|
||||
"Click to seek": "คลิกเพื่อค้นหาตำแหน่ง",
|
||||
"Skip back 15 words": "ย้อนกลับ 15 คำ",
|
||||
"Back 15 words (Shift+Left)": "ย้อนกลับ 15 คำ (Shift+ซ้าย)",
|
||||
"Pause (Space)": "หยุดชั่วคราว (Space)",
|
||||
"Play (Space)": "เล่น (Space)",
|
||||
"Skip forward 15 words": "ไปข้างหน้า 15 คำ",
|
||||
"Forward 15 words (Shift+Right)": "ไปข้างหน้า 15 คำ (Shift+ขวา)",
|
||||
"Decrease speed": "ลดความเร็ว",
|
||||
"Slower (Left/Down)": "ช้าลง (ซ้าย/ลง)",
|
||||
"Increase speed": "เพิ่มความเร็ว",
|
||||
"Faster (Right/Up)": "เร็วขึ้น (ขวา/ขึ้น)",
|
||||
"Start RSVP Reading": "เริ่มการอ่านแบบ RSVP",
|
||||
"Choose where to start reading": "เลือกจุดที่ต้องการเริ่มอ่าน",
|
||||
"From Chapter Start": "จากจุดเริ่มต้นของบท",
|
||||
"Start reading from the beginning of the chapter": "เริ่มอ่านใหม่ตั้งแต่ต้นบทนี้",
|
||||
"Resume": "อ่านต่อ",
|
||||
"Continue from where you left off": "อ่านต่อจากจุดที่ค้างไว้",
|
||||
"From Current Page": "จากหน้าปัจจุบัน",
|
||||
"Start from where you are currently reading": "เริ่มจากจุดที่คุณกำลังอ่านอยู่ตอนนี้",
|
||||
"From Selection": "จากส่วนที่เลือก",
|
||||
"Speed Reading Mode": "โหมดการอ่านเร็ว",
|
||||
"Scroll left": "เลื่อนไปทางซ้าย",
|
||||
"Scroll right": "เลื่อนไปทางขวา",
|
||||
"Library Sync Progress": "ความคืบหน้าการซิงค์ห้องสมุด",
|
||||
"Back to library": "กลับไปที่ห้องสมุด",
|
||||
"Group by...": "จัดกลุ่มตาม...",
|
||||
"Export as Plain Text": "ส่งออกเป็นข้อความธรรมดา",
|
||||
"Export as Markdown": "ส่งออกเป็น Markdown",
|
||||
"Show Page Navigation Buttons": "ปุ่มนำทาง",
|
||||
"Page {{number}}": "หน้า {{number}}",
|
||||
"highlight": "ไฮไลต์",
|
||||
"underline": "ขีดเส้นใต้",
|
||||
"squiggly": "เส้นหยัก",
|
||||
"red": "สีแดง",
|
||||
"violet": "สีม่วง",
|
||||
"blue": "สีน้ำเงิน",
|
||||
"green": "สีเขียว",
|
||||
"yellow": "สีเหลือง",
|
||||
"Select {{style}} style": "เลือกสไตล์ {{style}}",
|
||||
"Select {{color}} color": "เลือกสี {{color}}",
|
||||
"Close Book": "ปิดหนังสือ",
|
||||
"Speed Reading": "การอ่านเร็ว",
|
||||
"Close Speed Reading": "ปิดการอ่านเร็ว",
|
||||
"Authors": "ผู้เขียน",
|
||||
"Books": "หนังสือ",
|
||||
"Groups": "กลุ่ม",
|
||||
"Back to TTS Location": "กลับไปยังตำแหน่ง TTS",
|
||||
"Metadata": "เมทาดาตา",
|
||||
"Image viewer": "ตัวดูรูปภาพ",
|
||||
"Previous Image": "รูปภาพก่อนหน้า",
|
||||
"Next Image": "รูปภาพถัดไป",
|
||||
"Zoomed": "ซูมแล้ว",
|
||||
"Zoom level": "ระดับการซูม",
|
||||
"Table viewer": "ตัวดูตาราง",
|
||||
"Unable to connect to Readwise. Please check your network connection.": "ไม่สามารถเชื่อมต่อกับ Readwise ได้ โปรดตรวจสอบการเชื่อมต่ออินเทอร์เน็ตของคุณ",
|
||||
"Invalid Readwise access token": "โทเคนการเข้าถึง Readwise ไม่ถูกต้อง",
|
||||
"Disconnected from Readwise": "ยกเลิกการเชื่อมต่อกับ Readwise แล้ว",
|
||||
"Never": "ไม่เคย",
|
||||
"Readwise Settings": "การตั้งค่า Readwise",
|
||||
"Connected to Readwise": "เชื่อมต่อกับ Readwise แล้ว",
|
||||
"Last synced: {{time}}": "ซิงค์ล่าสุดเมื่อ: {{time}}",
|
||||
"Sync Enabled": "เปิดใช้งานการซิงค์",
|
||||
"Disconnect": "ยกเลิกการเชื่อมต่อ",
|
||||
"Connect your Readwise account to sync highlights.": "เชื่อมต่อบัญชี Readwise ของคุณเพื่อซิงค์ไฮไลต์",
|
||||
"Get your access token at": "รับโทเคนการเข้าถึงของคุณได้ที่",
|
||||
"Access Token": "โทเคนการเข้าถึง",
|
||||
"Paste your Readwise access token": "วางโทเคนการเข้าถึง Readwise ของคุณ",
|
||||
"Config": "การกำหนดค่า",
|
||||
"Readwise Sync": "การซิงค์ Readwise",
|
||||
"Push Highlights": "พุชไฮไลต์",
|
||||
"Highlights synced to Readwise": "ซิงค์ไฮไลต์ไปยัง Readwise แล้ว",
|
||||
"Readwise sync failed: no internet connection": "การซิงค์ Readwise ล้มเหลว: ไม่มีการเชื่อมต่ออินเทอร์เน็ต",
|
||||
"Readwise sync failed: {{error}}": "การซิงค์ Readwise ล้มเหลว: {{error}}",
|
||||
"System Screen Brightness": "ความสว่างหน้าจอระบบ",
|
||||
"Page:": "หน้า:",
|
||||
"Page: {{number}}": "หน้า: {{number}}",
|
||||
"Annotation page number": "หมายเลขหน้าคำอธิบายประกอบ",
|
||||
"Translating...": "กำลังแปล...",
|
||||
"Show Battery Percentage": "แสดงเปอร์เซ็นต์แบตเตอรี่",
|
||||
"Hide Scrollbar": "ซ่อนแถบเลื่อน",
|
||||
"Skip to last reading position": "ข้ามไปตำแหน่งอ่านล่าสุด",
|
||||
"Show context": "แสดงบริบท",
|
||||
"Hide context": "ซ่อนบริบท",
|
||||
"Decrease font size": "ลดขนาดตัวอักษร",
|
||||
"Increase font size": "เพิ่มขนาดตัวอักษร",
|
||||
"Focus": "โฟกัส",
|
||||
"Theme color": "สีธีม",
|
||||
"Import failed": "นำเข้าล้มเหลว",
|
||||
"Available Formatters:": "ตัวจัดรูปแบบที่ใช้ได้:",
|
||||
"Format date": "จัดรูปแบบวันที่",
|
||||
"Markdown block quote (> per line)": "บล็อกอ้างอิง Markdown (> ต่อบรรทัด)",
|
||||
"Newlines to <br>": "ขึ้นบรรทัดใหม่เป็น <br>",
|
||||
"Change case": "เปลี่ยนตัวพิมพ์",
|
||||
"Trim whitespace": "ตัดช่องว่าง",
|
||||
"Truncate to n characters": "ตัดให้เหลือ n ตัวอักษร",
|
||||
"Replace text": "แทนที่ข้อความ",
|
||||
"Fallback value": "ค่าสำรอง",
|
||||
"Get length": "ดึงความยาว",
|
||||
"First/last element": "องค์ประกอบแรก/สุดท้าย",
|
||||
"Join array": "รวมอาร์เรย์",
|
||||
"Backup failed: {{error}}": "การสำรองข้อมูลล้มเหลว: {{error}}",
|
||||
"Select Backup": "เลือกข้อมูลสำรอง",
|
||||
"Restore failed: {{error}}": "การกู้คืนล้มเหลว: {{error}}",
|
||||
"Backup & Restore": "สำรองและกู้คืน",
|
||||
"Create a backup of your library or restore from a previous backup. Restoring will merge with your current library.": "สร้างข้อมูลสำรองของห้องสมุดหรือกู้คืนจากข้อมูลสำรองก่อนหน้า การกู้คืนจะรวมกับห้องสมุดปัจจุบันของคุณ",
|
||||
"Backup Library": "สำรองห้องสมุด",
|
||||
"Restore Library": "กู้คืนห้องสมุด",
|
||||
"Creating backup...": "กำลังสร้างข้อมูลสำรอง...",
|
||||
"Restoring library...": "กำลังกู้คืนห้องสมุด...",
|
||||
"{{current}} of {{total}} items": "{{current}} จาก {{total}} รายการ",
|
||||
"Backup completed successfully!": "สำรองข้อมูลสำเร็จ!",
|
||||
"Restore completed successfully!": "กู้คืนสำเร็จ!",
|
||||
"Your library has been saved to the selected location.": "ห้องสมุดของคุณถูกบันทึกไปยังตำแหน่งที่เลือก",
|
||||
"{{added}} books added, {{updated}} books updated.": "เพิ่ม {{added}} เล่ม, อัปเดต {{updated}} เล่ม",
|
||||
"Operation failed": "การดำเนินการล้มเหลว",
|
||||
"Loading library...": "กำลังโหลดห้องสมุด...",
|
||||
"{{count}} books refreshed_other": "รีเฟรชแล้ว {{count}} เล่ม",
|
||||
"Failed to refresh metadata": "รีเฟรชข้อมูลเมตาล้มเหลว",
|
||||
"Refresh Metadata": "รีเฟรชข้อมูลเมตา"
|
||||
}
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
"Auto Mode": "Otomatik Mod",
|
||||
"Behavior": "Davranış",
|
||||
"Book": "Kitap",
|
||||
"Book Cover": "Kitap Kapağı",
|
||||
"Bookmark": "Yer İmi",
|
||||
"Cancel": "İptal",
|
||||
"Chapter": "Bölüm",
|
||||
@@ -107,7 +106,6 @@
|
||||
"Wikipedia": "Vikipedi",
|
||||
"Writing Mode": "Yazma Modu",
|
||||
"Your Library": "Kütüphaneniz",
|
||||
"TTS not supported for PDF": "PDF için TTS desteklenmiyor",
|
||||
"Override Book Font": "Kitap Yazı Tipini Geçersiz Kıl",
|
||||
"Apply to All Books": "Tüm kitaplara uygula",
|
||||
"Apply to This Book": "Bu kitaba uygula",
|
||||
@@ -174,9 +172,6 @@
|
||||
"Token": "Token",
|
||||
"Your OTP token": "OTP token'ınız",
|
||||
"Verify token": "Token'ı doğrula",
|
||||
"Sign in with Google": "Google ile giriş yap",
|
||||
"Sign in with Apple": "Apple ile giriş yap",
|
||||
"Sign in with GitHub": "GitHub ile giriş yap",
|
||||
"Account": "Hesap",
|
||||
"Failed to delete user. Please try again later.": "Kullanıcı silinemedi. Lütfen daha sonra tekrar deneyin.",
|
||||
"Community Support": "Topluluk Desteği",
|
||||
@@ -194,7 +189,7 @@
|
||||
"No supported files found. Supported formats: {{formats}}": "Desteklenen dosya bulunamadı. Desteklenen formatlar: {{formats}}",
|
||||
"Drop to Import Books": "Kitapları İçe Aktarmak İçin Bırak",
|
||||
"Custom": "Özel",
|
||||
"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": "Tüm dünya bir sahnedir,\nVe tüm erkekler ve kadınlar sadece oyunculardır;\nOnların çıkışları ve girişleri vardır,\nVe bir adam zamanında birçok rol oynar,\nOnun eylemleri yedi yaşındadır.\n\n— William Shakespeare",
|
||||
"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": "Tüm dünya bir sahnedir,\nVe tüm erkekler ve kadınlar sadece oyunculardır;\nOnların çıkışları ve girişleri vardır,\nVe bir adam zamanında birçok rol oynar,\nOnun eylemleri yedi yaşındadır.\n\n— William Shakespeare",
|
||||
"Custom Theme": "Özel Tema",
|
||||
"Theme Name": "Tema Adı",
|
||||
"Text Color": "Metin Rengi",
|
||||
@@ -339,11 +334,11 @@
|
||||
"Fit": "Uygun",
|
||||
"Reset {{settings}}": "{{settings}}'i Sıfırla",
|
||||
"Reset Settings": "Ayarları Sıfırla",
|
||||
"{{count}} pages left in chapter_one": "Bu bölümde {{count}} sayfa kaldı",
|
||||
"{{count}} pages left in chapter_other": "Bu bölümde {{count}} sayfa kaldı",
|
||||
"{{count}} pages left in chapter_one": "<1>Bu bölümde </1><0>{{count}}</0><1> sayfa kaldı</1>",
|
||||
"{{count}} pages left in chapter_other": "<1>Bu bölümde </1><0>{{count}}</0><1> sayfa kaldı</1>",
|
||||
"Show Remaining Pages": "Kalan sayfaları göster",
|
||||
"Source Han Serif CN VF": "Source Han Serif",
|
||||
"Huiwen-mincho": "Huiwen Mincho",
|
||||
"Source Han Serif CN": "Source Han Serif",
|
||||
"Huiwen-MinchoGBK": "Huiwen Mincho",
|
||||
"KingHwa_OldSong": "KingHwa Song",
|
||||
"Manage Subscription": "Aboneliği Yönet",
|
||||
"Coming Soon": "Yakında",
|
||||
@@ -603,11 +598,10 @@
|
||||
"Size": "Boyut",
|
||||
"Cover": "Kapak",
|
||||
"Contain": "İçerir",
|
||||
"{{number}} pages left in chapter": "Bu bölümde {{number}} sayfa kaldı",
|
||||
"{{number}} pages left in chapter": "<1>Bu bölümde </1><0>{{number}}</0><1> sayfa kaldı</1>",
|
||||
"Device": "Cihaz",
|
||||
"E-Ink Mode": "E-Ink Modu",
|
||||
"Highlight Colors": "Vurgu Renkleri",
|
||||
"Auto Screen Brightness": "Otomatik Ekran Parlaklığı",
|
||||
"Pagination": "Sayfalama",
|
||||
"Disable Double Tap": "Çift Dokunmayı Devre Dışı Bırak",
|
||||
"Tap to Paginate": "Sayfalamak için Dokunun",
|
||||
@@ -656,5 +650,457 @@
|
||||
"Update email": "E-postayı güncelle",
|
||||
"Current email": "Mevcut e-posta",
|
||||
"Update Email": "E-postayı güncelle",
|
||||
"All": "Tümü"
|
||||
"All": "Tümü",
|
||||
"Unable to open book": "Kitap açılamıyor",
|
||||
"Punctuation": "Noktalama İşaretleri",
|
||||
"Replace Quotation Marks": "Tırnak İşaretlerini Değiştir",
|
||||
"Enabled only in vertical layout.": "Yalnızca dikey düzenle etkinleştirildi.",
|
||||
"No Conversion": "Dönüştürme yok",
|
||||
"Simplified to Traditional": "Basitleştirilmiş → Geleneksel",
|
||||
"Traditional to Simplified": "Geleneksel → Basitleştirilmiş",
|
||||
"Simplified to Traditional (Taiwan)": "Basitleştirilmiş → Geleneksel (Tayvan)",
|
||||
"Simplified to Traditional (Hong Kong)": "Basitleştirilmiş → Geleneksel (Hong Kong)",
|
||||
"Simplified to Traditional (Taiwan), with phrases": "Basitleştirilmiş → Geleneksel (Tayvan • ifadeler)",
|
||||
"Traditional (Taiwan) to Simplified": "Geleneksel (Tayvan) → Basitleştirilmiş",
|
||||
"Traditional (Hong Kong) to Simplified": "Geleneksel (Hong Kong) → Basitleştirilmiş",
|
||||
"Traditional (Taiwan) to Simplified, with phrases": "Geleneksel (Tayvan • ifadeler) → Basitleştirilmiş",
|
||||
"Convert Simplified and Traditional Chinese": "Basitleştirilmiş/Geleneksel Çince Dönüştür",
|
||||
"Convert Mode": "Dönüştürme Modu",
|
||||
"Failed to auto-save book cover for lock screen: {{error}}": "Kitap kapağı kilit ekranı için otomatik kaydedilemedi: {{error}}",
|
||||
"Download from Cloud": "Buluttan İndir",
|
||||
"Upload to Cloud": "Buluta Yükle",
|
||||
"Clear Custom Fonts": "Özel Yazı Tiplerini Temizle",
|
||||
"Columns": "Sütunlar",
|
||||
"OPDS Catalogs": "OPDS Katalogları",
|
||||
"Adding LAN addresses is not supported in the web app version.": "Web uygulaması sürümünde LAN adresi ekleme desteklenmiyor.",
|
||||
"Invalid OPDS catalog. Please check the URL.": "Geçersiz OPDS kataloğu. Lütfen URL'yi kontrol edin.",
|
||||
"Browse and download books from online catalogs": "Çevrimiçi kataloglardan kitapları görüntüleyin ve indirin",
|
||||
"My Catalogs": "Kataloglarım",
|
||||
"Add Catalog": "Katalog Ekle",
|
||||
"No catalogs yet": "Henüz katalog yok",
|
||||
"Add your first OPDS catalog to start browsing books": "Kitapları görüntülemeye başlamak için ilk OPDS kataloğunuzu ekleyin",
|
||||
"Add Your First Catalog": "İlk Kataloğunuzu Ekleyin",
|
||||
"Browse": "Gözat",
|
||||
"Popular Catalogs": "Popüler Kataloglar",
|
||||
"Add": "Ekle",
|
||||
"Add OPDS Catalog": "OPDS Kataloğu Ekle",
|
||||
"Catalog Name": "Katalog Adı",
|
||||
"My Calibre Library": "Calibre Kütüphanem",
|
||||
"OPDS URL": "OPDS URL",
|
||||
"Username (optional)": "Kullanıcı Adı (opsiyonel)",
|
||||
"Password (optional)": "Şifre (opsiyonel)",
|
||||
"Description (optional)": "Açıklama (opsiyonel)",
|
||||
"A brief description of this catalog": "Bu katalog hakkında kısa açıklama",
|
||||
"Validating...": "Doğrulanıyor...",
|
||||
"View All": "Tümünü Görüntüle",
|
||||
"Forward": "İleri",
|
||||
"Home": "Ana Sayfa",
|
||||
"{{count}} items_one": "{{count}} öğe",
|
||||
"{{count}} items_other": "{{count}} öğe",
|
||||
"Download completed": "İndirme tamamlandı",
|
||||
"Download failed": "İndirme başarısız",
|
||||
"Open Access": "Açık Erişim",
|
||||
"Borrow": "Ödünç Al",
|
||||
"Buy": "Satın Al",
|
||||
"Subscribe": "Abone Ol",
|
||||
"Sample": "Örnek",
|
||||
"Download": "İndir",
|
||||
"Open & Read": "Aç ve Oku",
|
||||
"Tags": "Etiketler",
|
||||
"Tag": "Etiket",
|
||||
"First": "İlk",
|
||||
"Previous": "Önceki",
|
||||
"Next": "Sonraki",
|
||||
"Last": "Son",
|
||||
"Cannot Load Page": "Sayfa yüklenemiyor",
|
||||
"An error occurred": "Bir hata oluştu",
|
||||
"Online Library": "Çevrimiçi Kütüphane",
|
||||
"URL must start with http:// or https://": "URL http:// veya https:// ile başlamalıdır",
|
||||
"Title, Author, Tag, etc...": "Başlık, Yazar, Etiket, vb...",
|
||||
"Query": "Sorgu",
|
||||
"Subject": "Konu",
|
||||
"Enter {{terms}}": "{{terms}} girin",
|
||||
"No search results found": "Arama sonucu bulunamadı",
|
||||
"Failed to load OPDS feed: {{status}} {{statusText}}": "OPDS beslemesi yüklenemedi: {{status}} {{statusText}}",
|
||||
"Search in {{title}}": "{{title}} içinde ara",
|
||||
"Manage Storage": "Depolamayı Yönet",
|
||||
"Failed to load files": "Dosyalar yüklenemedi",
|
||||
"Deleted {{count}} file(s)_one": "{{count}} dosya silindi",
|
||||
"Deleted {{count}} file(s)_other": "{{count}} dosya silindi",
|
||||
"Failed to delete {{count}} file(s)_one": "{{count}} dosya silinemedi",
|
||||
"Failed to delete {{count}} file(s)_other": "{{count}} dosya silinemedi",
|
||||
"Failed to delete files": "Dosyalar silinemedi",
|
||||
"Total Files": "Toplam Dosya",
|
||||
"Total Size": "Toplam Boyut",
|
||||
"Quota": "Kota",
|
||||
"Used": "Kullanıldı",
|
||||
"Files": "Dosyalar",
|
||||
"Search files...": "Dosyaları ara...",
|
||||
"Newest First": "En Yeni Önce",
|
||||
"Oldest First": "En Eski Önce",
|
||||
"Largest First": "En Büyük Önce",
|
||||
"Smallest First": "En Küçük Önce",
|
||||
"Name A-Z": "İsim A-Z",
|
||||
"Name Z-A": "İsim Z-A",
|
||||
"{{count}} selected_one": "{{count}} seçili dosya",
|
||||
"{{count}} selected_other": "{{count}} seçili dosya",
|
||||
"Delete Selected": "Seçilenleri Sil",
|
||||
"Created": "Oluşturulma Tarihi",
|
||||
"No files found": "Dosya bulunamadı",
|
||||
"No files uploaded yet": "Henüz dosya yüklenmedi",
|
||||
"files": "dosyalar",
|
||||
"Page {{current}} of {{total}}": "{{total}} sayfa içinde {{current}}. sayfa",
|
||||
"Are you sure to delete {{count}} selected file(s)?_one": "Seçilen {{count}} dosyayı silmek istediğinizden emin misiniz?",
|
||||
"Are you sure to delete {{count}} selected file(s)?_other": "Seçilen {{count}} dosyayı silmek istediğinizden emin misiniz?",
|
||||
"Cloud Storage Usage": "Bulut Depolama Kullanımı",
|
||||
"Rename Group": "Grubu Yeniden Adlandır",
|
||||
"From Directory": "Dizinden",
|
||||
"Successfully imported {{count}} book(s)_one": "Başarıyla 1 kitap içe aktarıldı",
|
||||
"Successfully imported {{count}} book(s)_other": "Başarıyla {{count}} kitap içe aktarıldı",
|
||||
"Count": "Sayım",
|
||||
"Start Page": "Başlangıç Sayfası",
|
||||
"Search in OPDS Catalog...": "OPDS Kataloğunda ara...",
|
||||
"Please log in to use advanced TTS features": "Gelişmiş TTS özelliklerini kullanmak için lütfen giriş yapın",
|
||||
"Word limit of 30 words exceeded.": "30 kelime sınırı aşıldı.",
|
||||
"Proofread": "Düzelt",
|
||||
"Current selection": "Mevcut seçim",
|
||||
"All occurrences in this book": "Bu kitaptaki tüm geçenler",
|
||||
"All occurrences in your library": "Kütüphanenizdeki tüm geçenler",
|
||||
"Selected text:": "Seçili metin:",
|
||||
"Replace with:": "Şununla değiştir:",
|
||||
"Enter text...": "Metin girin…",
|
||||
"Case sensitive:": "Büyük/küçük harfe duyarlı:",
|
||||
"Scope:": "Kapsam:",
|
||||
"Selection": "Seçim",
|
||||
"Library": "Kütüphane",
|
||||
"Yes": "Evet",
|
||||
"No": "Hayır",
|
||||
"Proofread Replacement Rules": "Düzeltme Değiştirme Kuralları",
|
||||
"Selected Text Rules": "Seçili Metin Kuralları",
|
||||
"No selected text replacement rules": "Seçili metin için değiştirme kuralı yok",
|
||||
"Book Specific Rules": "Kitaba Özel Kurallar",
|
||||
"No book-level replacement rules": "Kitap düzeyinde değiştirme kuralı yok",
|
||||
"Disable Quick Action": "Hızlı işlemi devre dışı bırak",
|
||||
"Enable Quick Action on Selection": "Seçimde hızlı işlemi etkinleştir",
|
||||
"None": "Hiçbiri",
|
||||
"Annotation Tools": "Not araçları",
|
||||
"Enable Quick Actions": "Hızlı işlemleri etkinleştir",
|
||||
"Quick Action": "Hızlı işlem",
|
||||
"Copy to Notebook": "Deftere kopyala",
|
||||
"Copy text after selection": "Seçimden sonra metni kopyala",
|
||||
"Highlight text after selection": "Seçimden sonra metni vurgula",
|
||||
"Annotate text after selection": "Seçimden sonra metni not al",
|
||||
"Search text after selection": "Seçimden sonra metni ara",
|
||||
"Look up text in dictionary after selection": "Seçimden sonra metni sözlükte ara",
|
||||
"Look up text in Wikipedia after selection": "Seçimden sonra metni Vikipedya'da ara",
|
||||
"Translate text after selection": "Seçimden sonra metni çevir",
|
||||
"Read text aloud after selection": "Seçimden sonra metni sesli oku",
|
||||
"Proofread text after selection": "Seçimden sonra metni düzelt",
|
||||
"{{activeCount}} active, {{pendingCount}} pending": "{{activeCount}} aktif, {{pendingCount}} beklemede",
|
||||
"{{failedCount}} failed": "{{failedCount}} başarısız",
|
||||
"Waiting...": "Bekleniyor...",
|
||||
"Failed": "Başarısız",
|
||||
"Completed": "Tamamlandı",
|
||||
"Cancelled": "İptal edildi",
|
||||
"Retry": "Yeniden dene",
|
||||
"Active": "Aktif",
|
||||
"Transfer Queue": "Transfer Kuyruğu",
|
||||
"Upload All": "Tümünü Yükle",
|
||||
"Download All": "Tümünü İndir",
|
||||
"Resume Transfers": "Transferleri Sürdür",
|
||||
"Pause Transfers": "Transferleri Duraklat",
|
||||
"Pending": "Beklemede",
|
||||
"No transfers": "Transfer yok",
|
||||
"Retry All": "Tümünü Yeniden Dene",
|
||||
"Clear Completed": "Tamamlananları Temizle",
|
||||
"Clear Failed": "Başarısızları Temizle",
|
||||
"Upload queued: {{title}}": "Yükleme sıraya alındı: {{title}}",
|
||||
"Download queued: {{title}}": "İndirme sıraya alındı: {{title}}",
|
||||
"Book not found in library": "Kitap kütüphanede bulunamadı",
|
||||
"Unknown error": "Bilinmeyen hata",
|
||||
"Please log in to continue": "Devam etmek için giriş yapın",
|
||||
"Cloud File Transfers": "Bulut Dosya Transferleri",
|
||||
"Show Search Results": "Arama sonuçlarını göster",
|
||||
"Search results for '{{term}}'": "'{{term}}' için sonuçlar",
|
||||
"Close Search": "Aramayı kapat",
|
||||
"Previous Result": "Önceki sonuç",
|
||||
"Next Result": "Sonraki sonuç",
|
||||
"Bookmarks": "Yer İşaretleri",
|
||||
"Annotations": "Açıklamalar",
|
||||
"Show Results": "Sonuçları Göster",
|
||||
"Clear search": "Aramayı temizle",
|
||||
"Clear search history": "Arama geçmişini temizle",
|
||||
"Tap to Toggle Footer": "Altbilgiyi değiştirmek için dokunun",
|
||||
"Show Current Time": "Şu anki saati göster",
|
||||
"Use 24 Hour Clock": "24 Saatlik Saati Kullan",
|
||||
"Show Current Battery Status": "Mevcut Pil Durumunu Göster",
|
||||
"Exported successfully": "Başarıyla dışa aktarıldı",
|
||||
"Book exported successfully.": "Kitap başarıyla dışa aktarıldı.",
|
||||
"Failed to export the book.": "Kitap dışa aktarılamadı.",
|
||||
"Export Book": "Kitabı Dışa Aktar",
|
||||
"Whole word:": "Tam kelime:",
|
||||
"Error": "Hata",
|
||||
"Unable to load the article. Try searching directly on {{link}}.": "Makale yüklenemiyor. Doğrudan {{link}} üzerinde arama yapmayı deneyin.",
|
||||
"Unable to load the word. Try searching directly on {{link}}.": "Kelime yüklenemiyor. Doğrudan {{link}} üzerinde arama yapmayı deneyin.",
|
||||
"Date Published": "Yayın tarihi",
|
||||
"Only for TTS:": "Sadece TTS için:",
|
||||
"Uploaded": "Yüklendi",
|
||||
"Downloaded": "İndirildi",
|
||||
"Deleted": "Silindi",
|
||||
"Note:": "Not:",
|
||||
"Time:": "Saat:",
|
||||
"Format Options": "Format Seçenekleri",
|
||||
"Export Date": "Dışa Aktarma Tarihi",
|
||||
"Chapter Titles": "Bölüm Başlıkları",
|
||||
"Chapter Separator": "Bölüm Ayracı",
|
||||
"Highlights": "Vurgular",
|
||||
"Note Date": "Not Tarihi",
|
||||
"Advanced": "Gelişmiş",
|
||||
"Hide": "Gizle",
|
||||
"Show": "Göster",
|
||||
"Use Custom Template": "Özel Şablon Kullan",
|
||||
"Export Template": "Dışa Aktarma Şablonu",
|
||||
"Template Syntax:": "Şablon Sözdizimi:",
|
||||
"Insert value": "Değer ekle",
|
||||
"Format date (locale)": "Tarihi biçimlendir (yerel)",
|
||||
"Format date (custom)": "Tarihi biçimlendir (özel)",
|
||||
"Conditional": "Koşullu",
|
||||
"Loop": "Döngü",
|
||||
"Available Variables:": "Kullanılabilir Değişkenler:",
|
||||
"Book title": "Kitap başlığı",
|
||||
"Book author": "Kitap yazarı",
|
||||
"Export date": "Dışa aktarma tarihi",
|
||||
"Array of chapters": "Bölümler dizisi",
|
||||
"Chapter title": "Bölüm başlığı",
|
||||
"Array of annotations": "Notlar dizisi",
|
||||
"Highlighted text": "Vurgulanan metin",
|
||||
"Annotation note": "Not açıklaması",
|
||||
"Date Format Tokens:": "Tarih Biçimi Belirteçleri:",
|
||||
"Year (4 digits)": "Yıl (4 basamak)",
|
||||
"Month (01-12)": "Ay (01-12)",
|
||||
"Day (01-31)": "Gün (01-31)",
|
||||
"Hour (00-23)": "Saat (00-23)",
|
||||
"Minute (00-59)": "Dakika (00-59)",
|
||||
"Second (00-59)": "Saniye (00-59)",
|
||||
"Show Source": "Kaynağı Göster",
|
||||
"No content to preview": "Önizlenecek içerik yok",
|
||||
"Export": "Dışa Aktar",
|
||||
"Set Timeout": "Zaman aşımını ayarla",
|
||||
"Select Voice": "Ses seç",
|
||||
"Toggle Sticky Bottom TTS Bar": "Sabit TTS çubuğunu değiştir",
|
||||
"Display what I'm reading on Discord": "Discord'da okuduğumu göster",
|
||||
"Show on Discord": "Discord'da göster",
|
||||
"Instant {{action}}": "Anında {{action}}",
|
||||
"Instant {{action}} Disabled": "Anında {{action}} Devre Dışı",
|
||||
"Annotation": "Açıklama",
|
||||
"Reset Template": "Şablonu Sıfırla",
|
||||
"Annotation style": "Açıklama stili",
|
||||
"Annotation color": "Açıklama rengi",
|
||||
"Annotation time": "Açıklama zamanı",
|
||||
"AI": "YZ",
|
||||
"Are you sure you want to re-index this book?": "Bu kitabı yeniden dizinlemek istediğinizden emin misiniz?",
|
||||
"Enable AI in Settings": "Ayarlarda YZ'yi Etkinleştir",
|
||||
"Index This Book": "Bu Kitabı Dizinle",
|
||||
"Enable AI search and chat for this book": "Bu kitap için YZ arama ve sohbeti etkinleştir",
|
||||
"Start Indexing": "Dizinlemeyi Başlat",
|
||||
"Indexing book...": "Kitap dizinleniyor...",
|
||||
"Preparing...": "Hazırlanıyor...",
|
||||
"Delete this conversation?": "Bu konuşmayı sil?",
|
||||
"No conversations yet": "Henüz konuşma yok",
|
||||
"Start a new chat to ask questions about this book": "Bu kitap hakkında soru sormak için yeni bir sohbet başlatın",
|
||||
"Rename": "Yeniden Adlandır",
|
||||
"New Chat": "Yeni Sohbet",
|
||||
"Chat": "Sohbet",
|
||||
"Please enter a model ID": "Lütfen bir model kimliği girin",
|
||||
"Model not available or invalid": "Model kullanılamıyor veya geçersiz",
|
||||
"Failed to validate model": "Model doğrulanamadı",
|
||||
"Couldn't connect to Ollama. Is it running?": "Ollama'ya bağlanılamadı. Çalışıyor mu?",
|
||||
"Invalid API key or connection failed": "Geçersiz API anahtarı veya bağlantı başarısız",
|
||||
"Connection failed": "Bağlantı başarısız",
|
||||
"AI Assistant": "YZ Asistanı",
|
||||
"Enable AI Assistant": "YZ Asistanını Etkinleştir",
|
||||
"Provider": "Sağlayıcı",
|
||||
"Ollama (Local)": "Ollama (Yerel)",
|
||||
"AI Gateway (Cloud)": "YZ Geçidi (Bulut)",
|
||||
"Ollama Configuration": "Ollama Yapılandırması",
|
||||
"Refresh Models": "Modelleri Yenile",
|
||||
"AI Model": "YZ Modeli",
|
||||
"No models detected": "Model algılanmadı",
|
||||
"AI Gateway Configuration": "YZ Geçidi Yapılandırması",
|
||||
"Choose from a selection of high-quality, economical AI models. You can also bring your own model by selecting \"Custom Model\" below.": "Yüksek kaliteli, ekonomik YZ modelleri arasından seçim yapın. Aşağıdaki \"Özel Model\"i seçerek kendi modelinizi de kullanabilirsiniz.",
|
||||
"API Key": "API Anahtarı",
|
||||
"Get Key": "Anahtar Al",
|
||||
"Model": "Model",
|
||||
"Custom Model...": "Özel Model...",
|
||||
"Custom Model ID": "Özel Model Kimliği",
|
||||
"Validate": "Doğrula",
|
||||
"Model available": "Model mevcut",
|
||||
"Connection": "Bağlantı",
|
||||
"Test Connection": "Bağlantıyı Test Et",
|
||||
"Connected": "Bağlandı",
|
||||
"Custom Colors": "Özel Renkler",
|
||||
"Color E-Ink Mode": "Renkli E-Ink Modu",
|
||||
"Reading Ruler": "Okuma Cetveli",
|
||||
"Enable Reading Ruler": "Okuma Cetvelini Etkinleştir",
|
||||
"Lines to Highlight": "Vurgulanacak Satırlar",
|
||||
"Ruler Color": "Cetvel Rengi",
|
||||
"Command Palette": "Komut Paleti",
|
||||
"Search settings and actions...": "Ayarları ve eylemleri ara...",
|
||||
"No results found for": "Şunun için sonuç bulunamadı",
|
||||
"Type to search settings and actions": "Ayarları ve eylemleri aramak için yazın",
|
||||
"Recent": "Son kullanılanlar",
|
||||
"navigate": "gezin",
|
||||
"select": "seç",
|
||||
"close": "kapat",
|
||||
"Search Settings": "Ayarları Ara",
|
||||
"Page Margins": "Sayfa Kenar Boşlukları",
|
||||
"AI Provider": "Yapay Zeka Sağlayıcısı",
|
||||
"Ollama URL": "Ollama URL",
|
||||
"Ollama Model": "Ollama Modeli",
|
||||
"AI Gateway Model": "AI Gateway Modeli",
|
||||
"Actions": "Eylemler",
|
||||
"Navigation": "Gezinme",
|
||||
"Set status for {{count}} book(s)_one": "{{count}} kitap için durumu ayarla",
|
||||
"Set status for {{count}} book(s)_other": "{{count}} kitap için durumu ayarla",
|
||||
"Mark as Unread": "Okunmadı olarak işaretle",
|
||||
"Mark as Finished": "Bitirildi olarak işaretle",
|
||||
"Finished": "Bitirildi",
|
||||
"Unread": "Okunmadı",
|
||||
"Clear Status": "Durumu Temizle",
|
||||
"Status": "Durum",
|
||||
"Loading": "Yükleniyor...",
|
||||
"Exit Paragraph Mode": "Paragraf modundan çık",
|
||||
"Paragraph Mode": "Paragraf modu",
|
||||
"Embedding Model": "Gömme Modeli",
|
||||
"{{count}} book(s) synced_one": "{{count}} kitap senkronize edildi",
|
||||
"{{count}} book(s) synced_other": "{{count}} kitap senkronize edildi",
|
||||
"Unable to start RSVP": "RSVP başlatılamadı",
|
||||
"RSVP not supported for PDF": "PDF için RSVP desteklenmiyor",
|
||||
"Select Chapter": "Bölüm Seç",
|
||||
"Context": "Bağlam",
|
||||
"Ready": "Hazır",
|
||||
"Chapter Progress": "Bölüm İlerlemesi",
|
||||
"words": "kelime",
|
||||
"{{time}} left": "{{time}} kaldı",
|
||||
"Reading progress": "Okuma ilerlemesi",
|
||||
"Click to seek": "Konum aramak için tıkla",
|
||||
"Skip back 15 words": "15 kelime geri atla",
|
||||
"Back 15 words (Shift+Left)": "15 kelime geri (Shift+Sol)",
|
||||
"Pause (Space)": "Duraklat (Boşluk)",
|
||||
"Play (Space)": "Oynat (Boşluk)",
|
||||
"Skip forward 15 words": "15 kelime ileri atla",
|
||||
"Forward 15 words (Shift+Right)": "15 kelime ileri (Shift+Sağ)",
|
||||
"Decrease speed": "Hızı azalt",
|
||||
"Slower (Left/Down)": "Daha yavaş (Sol/Aşağı)",
|
||||
"Increase speed": "Hızı artır",
|
||||
"Faster (Right/Up)": "Daha hızlı (Sağ/Yukarı)",
|
||||
"Start RSVP Reading": "RSVP Okumasını Başlat",
|
||||
"Choose where to start reading": "Nereden okumaya başlayacağınızı seçin",
|
||||
"From Chapter Start": "Bölüm Başından",
|
||||
"Start reading from the beginning of the chapter": "Bölümün başından itibaren okumaya başla",
|
||||
"Resume": "Devam Et",
|
||||
"Continue from where you left off": "Kaldığınız yerden devam edin",
|
||||
"From Current Page": "Mevcut Sayfadan",
|
||||
"Start from where you are currently reading": "Şu anda okuduğunuz yerden başlayın",
|
||||
"From Selection": "Seçimden",
|
||||
"Speed Reading Mode": "Hızlı Okuma Modu",
|
||||
"Scroll left": "Sola kaydır",
|
||||
"Scroll right": "Sağa kaydır",
|
||||
"Library Sync Progress": "Kütüphane Senkronizasyon İlerlemesi",
|
||||
"Back to library": "Kütüphaneye dön",
|
||||
"Group by...": "Şuna göre grupla...",
|
||||
"Export as Plain Text": "Düz Metin Olarak Dışa Aktar",
|
||||
"Export as Markdown": "Markdown Olarak Dışa Aktar",
|
||||
"Show Page Navigation Buttons": "Gezinme düğmeleri",
|
||||
"Page {{number}}": "Sayfa {{number}}",
|
||||
"highlight": "vurgula",
|
||||
"underline": "altı çizili",
|
||||
"squiggly": "dalgalı",
|
||||
"red": "kırmızı",
|
||||
"violet": "menekşe",
|
||||
"blue": "mavi",
|
||||
"green": "yeşil",
|
||||
"yellow": "sarı",
|
||||
"Select {{style}} style": "{{style}} stilini seç",
|
||||
"Select {{color}} color": "{{color}} rengini seç",
|
||||
"Close Book": "Kitabı Kapat",
|
||||
"Speed Reading": "Hızlı Okuma",
|
||||
"Close Speed Reading": "Hızlı Okumayı Kapat",
|
||||
"Authors": "Yazarlar",
|
||||
"Books": "Kitaplar",
|
||||
"Groups": "Gruplar",
|
||||
"Back to TTS Location": "TTS Konumuna Geri Dön",
|
||||
"Metadata": "Meta veriler",
|
||||
"Image viewer": "Resim görüntüleyici",
|
||||
"Previous Image": "Önceki Resim",
|
||||
"Next Image": "Sonraki Resim",
|
||||
"Zoomed": "Yakınlaştırıldı",
|
||||
"Zoom level": "Yakınlaştırma düzeyi",
|
||||
"Table viewer": "Tablo görüntüleyici",
|
||||
"Unable to connect to Readwise. Please check your network connection.": "Readwise'a bağlanılamadı. Lütfen ağ bağlantınızı kontrol edin.",
|
||||
"Invalid Readwise access token": "Geçersiz Readwise erişim kodu",
|
||||
"Disconnected from Readwise": "Readwise bağlantısı kesildi",
|
||||
"Never": "Asla",
|
||||
"Readwise Settings": "Readwise Ayarları",
|
||||
"Connected to Readwise": "Readwise'a Bağlandı",
|
||||
"Last synced: {{time}}": "Son senkronizasyon: {{time}}",
|
||||
"Sync Enabled": "Senkronizasyon Etkin",
|
||||
"Disconnect": "Bağlantıyı Kes",
|
||||
"Connect your Readwise account to sync highlights.": "Vurguları senkronize etmek için Readwise hesabınızı bağlayın.",
|
||||
"Get your access token at": "Erişim kodunuzu şuradan alın:",
|
||||
"Access Token": "Erişim Kodu",
|
||||
"Paste your Readwise access token": "Readwise erişim kodunuzu yapıştırın",
|
||||
"Config": "Yapılandırma",
|
||||
"Readwise Sync": "Readwise Senkronizasyonu",
|
||||
"Push Highlights": "Vurguları Gönder",
|
||||
"Highlights synced to Readwise": "Vurgular Readwise ile senkronize edildi",
|
||||
"Readwise sync failed: no internet connection": "Readwise senkronizasyonu başarısız: internet bağlantısı yok",
|
||||
"Readwise sync failed: {{error}}": "Readwise senkronizasyonu başarısız: {{error}}",
|
||||
"System Screen Brightness": "Sistem Ekran Parlaklığı",
|
||||
"Page:": "Sayfa:",
|
||||
"Page: {{number}}": "Sayfa: {{number}}",
|
||||
"Annotation page number": "Açıklama sayfa numarası",
|
||||
"Translating...": "Çevriliyor...",
|
||||
"Show Battery Percentage": "Pil Yüzdesini Göster",
|
||||
"Hide Scrollbar": "Kaydırma çubuğunu gizle",
|
||||
"Skip to last reading position": "Son okuma konumuna atla",
|
||||
"Show context": "Bağlamı göster",
|
||||
"Hide context": "Bağlamı gizle",
|
||||
"Decrease font size": "Yazı tipi boyutunu küçült",
|
||||
"Increase font size": "Yazı tipi boyutunu büyüt",
|
||||
"Focus": "Odak",
|
||||
"Theme color": "Tema rengi",
|
||||
"Import failed": "İçe aktarma başarısız",
|
||||
"Available Formatters:": "Kullanılabilir Biçimlendiriciler:",
|
||||
"Format date": "Tarih biçimlendir",
|
||||
"Markdown block quote (> per line)": "Markdown blok alıntı (satır başına >)",
|
||||
"Newlines to <br>": "Satır sonlarını <br> yap",
|
||||
"Change case": "Büyük/küçük harf değiştir",
|
||||
"Trim whitespace": "Boşlukları kırp",
|
||||
"Truncate to n characters": "n karaktere kısalt",
|
||||
"Replace text": "Metni değiştir",
|
||||
"Fallback value": "Yedek değer",
|
||||
"Get length": "Uzunluk al",
|
||||
"First/last element": "İlk/son öğe",
|
||||
"Join array": "Diziyi birleştir",
|
||||
"Backup failed: {{error}}": "Yedekleme başarısız: {{error}}",
|
||||
"Select Backup": "Yedek Seç",
|
||||
"Restore failed: {{error}}": "Geri yükleme başarısız: {{error}}",
|
||||
"Backup & Restore": "Yedekleme & Geri Yükleme",
|
||||
"Create a backup of your library or restore from a previous backup. Restoring will merge with your current library.": "Kütüphanenizin yedeğini oluşturun veya önceki bir yedekten geri yükleyin. Geri yükleme mevcut kütüphanenizle birleştirilecektir.",
|
||||
"Backup Library": "Kütüphaneyi Yedekle",
|
||||
"Restore Library": "Kütüphaneyi Geri Yükle",
|
||||
"Creating backup...": "Yedek oluşturuluyor...",
|
||||
"Restoring library...": "Kütüphane geri yükleniyor...",
|
||||
"{{current}} of {{total}} items": "{{current}} / {{total}} öğe",
|
||||
"Backup completed successfully!": "Yedekleme başarıyla tamamlandı!",
|
||||
"Restore completed successfully!": "Geri yükleme başarıyla tamamlandı!",
|
||||
"Your library has been saved to the selected location.": "Kütüphaneniz seçilen konuma kaydedildi.",
|
||||
"{{added}} books added, {{updated}} books updated.": "{{added}} kitap eklendi, {{updated}} kitap güncellendi.",
|
||||
"Operation failed": "İşlem başarısız",
|
||||
"Loading library...": "Kütüphane yükleniyor...",
|
||||
"{{count}} books refreshed_one": "{{count}} kitap yenilendi",
|
||||
"{{count}} books refreshed_other": "{{count}} kitap yenilendi",
|
||||
"Failed to refresh metadata": "Meta veri yenileme başarısız",
|
||||
"Refresh Metadata": "Meta Verileri Yenile"
|
||||
}
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
"Auto Mode": "Автоматичний режим",
|
||||
"Behavior": "Поведінка",
|
||||
"Book": "Книга",
|
||||
"Book Cover": "Обкладинка книги",
|
||||
"Bookmark": "Закладка",
|
||||
"Cancel": "Скасувати",
|
||||
"Chapter": "Розділ",
|
||||
@@ -107,7 +106,6 @@
|
||||
"Wikipedia": "Вікіпедія",
|
||||
"Writing Mode": "Режим письма",
|
||||
"Your Library": "Ваша бібліотека",
|
||||
"TTS not supported for PDF": "TTS не підтримується для PDF",
|
||||
"Override Book Font": "Перевизначити шрифт книги",
|
||||
"Apply to All Books": "Застосувати до всіх книг",
|
||||
"Apply to This Book": "Застосувати лише до цієї книги",
|
||||
@@ -172,11 +170,8 @@
|
||||
"Phone number": "Номер телефону",
|
||||
"Your phone number": "Ваш номер телефону",
|
||||
"Token": "Токен",
|
||||
"Your OTP token": "Ваш OTP токен",
|
||||
"Your OTP token": "Ваш OTP-токен",
|
||||
"Verify token": "Перевірити токен",
|
||||
"Sign in with Google": "Увійти через Google",
|
||||
"Sign in with Apple": "Увійти через Apple",
|
||||
"Sign in with GitHub": "Увійти через GitHub",
|
||||
"Account": "Обліковий запис",
|
||||
"Failed to delete user. Please try again later.": "Не вдалося видалити користувача. Будь ласка, спробуйте пізніше.",
|
||||
"Community Support": "Підтримка спільноти",
|
||||
@@ -194,7 +189,7 @@
|
||||
"No supported files found. Supported formats: {{formats}}": "Не знайдено підтримуваних файлів. Підтримувані формати: {{formats}}",
|
||||
"Drop to Import Books": "Перетягніть для імпорту книг",
|
||||
"Custom": "Користувацький",
|
||||
"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(переклад Олександра Мокровольського)",
|
||||
"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(переклад Олександра Мокровольського)",
|
||||
"Custom Theme": "Користувацька тема",
|
||||
"Theme Name": "Назва теми",
|
||||
"Text Color": "Колір тексту",
|
||||
@@ -345,13 +340,13 @@
|
||||
"Fit": "Припасувати",
|
||||
"Reset {{settings}}": "Скинути {{settings}}",
|
||||
"Reset Settings": "Скинути налаштування",
|
||||
"{{count}} pages left in chapter_one": "Залишилася {{count}} сторінка у розділі",
|
||||
"{{count}} pages left in chapter_few": "Залишилось {{count}} сторінки у розділі",
|
||||
"{{count}} pages left in chapter_many": "Залишилось {{count}} сторінок у розділі",
|
||||
"{{count}} pages left in chapter_other": "Залишилось {{count}} сторінок у розділі",
|
||||
"{{count}} pages left in chapter_one": "<1>Залишилася </1><0>{{count}}</0><1> сторінка у розділі</1>",
|
||||
"{{count}} pages left in chapter_few": "<1>Залишилось </1><0>{{count}}</0><1> сторінки у розділі</1>",
|
||||
"{{count}} pages left in chapter_many": "<1>Залишилось </1><0>{{count}}</0><1> сторінок у розділі</1>",
|
||||
"{{count}} pages left in chapter_other": "<1>Залишилось </1><0>{{count}}</0><1> сторінок у розділі</1>",
|
||||
"Show Remaining Pages": "Показати залишок сторінок",
|
||||
"Source Han Serif CN VF": "Source Han Serif",
|
||||
"Huiwen-mincho": "Huiwen Mincho",
|
||||
"Source Han Serif CN": "Source Han Serif",
|
||||
"Huiwen-MinchoGBK": "Huiwen Mincho",
|
||||
"KingHwa_OldSong": "KingHwa Song",
|
||||
"Manage Subscription": "Керувати підпискою",
|
||||
"Coming Soon": "Незабаром",
|
||||
@@ -424,7 +419,7 @@
|
||||
"Enter series index": "Введіть номер циклу",
|
||||
"Total in Series": "Всього у циклі",
|
||||
"Enter total books in series": "Введіть загальну кількість книг у циклі",
|
||||
"Enter publisher": "Введіть видавництвця",
|
||||
"Enter publisher": "Введіть видавця",
|
||||
"Publication Date": "Дата видання",
|
||||
"Identifier": "Ідентифікатор",
|
||||
"Enter book description": "Введіть опис книги",
|
||||
@@ -551,8 +546,8 @@
|
||||
"Add Bookmark": "Додати закладку",
|
||||
"Books Content": "Зміст книг",
|
||||
"Jump to Location": "Перейти до місця",
|
||||
"Unpin Notebook": "Відкріпити блокнот",
|
||||
"Pin Notebook": "Закріпити блокнот",
|
||||
"Unpin Notebook": "Відкріпити нотатник",
|
||||
"Pin Notebook": "Закріпити нотатник",
|
||||
"Hide Search Bar": "Сховати панель пошуку",
|
||||
"Show Search Bar": "Показати панель пошуку",
|
||||
"On {{current}} of {{total}} page": "На {{current}} з {{total}} сторінці",
|
||||
@@ -569,14 +564,14 @@
|
||||
"Minimize": "Згорнути",
|
||||
"Maximize or Restore": "Збільшити або відновити",
|
||||
"Exit Parallel Read": "Вийти з паралельного читання",
|
||||
"Enter Parallel Read": "Войти в параллельное чтение",
|
||||
"Enter Parallel Read": "Ввійти в паралельне читання",
|
||||
"Zoom Level": "Рівень масштабування",
|
||||
"Zoom Out": "Зменшити масштаб",
|
||||
"Reset Zoom": "Скинути масштаб",
|
||||
"Zoom In": "Збільшити масштаб",
|
||||
"Zoom Mode": "Режим масштабування",
|
||||
"Single Page": "Одна сторінка",
|
||||
"Auto Spread": "Автоматичне розповсюдження",
|
||||
"Auto Spread": "Автоматичне розтягування",
|
||||
"Fit Page": "Підганяти під сторінку",
|
||||
"Fit Width": "Підганяти під ширину",
|
||||
"Failed to select directory": "Не вдалося вибрати каталог",
|
||||
@@ -593,36 +588,35 @@
|
||||
"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.": "Ваші дані були переміщені до нового розташування. Будь ласка, перезапустіть програму, щоб завершити процес.",
|
||||
"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": "Перезапустити програму",
|
||||
"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": "Готовий до читання вголос",
|
||||
"Ready to read aloud": "Готовність до читання вголос",
|
||||
"Read Aloud": "Читати вголос",
|
||||
"Screen Brightness": "Яскравість екрану",
|
||||
"Background Image": "Фонове зображення",
|
||||
"Import Image": "Імпортувати зображення",
|
||||
"Opacity": "Непрозорість",
|
||||
"Size": "Розмір",
|
||||
"Cover": "Обкладинка",
|
||||
"Contain": "Вміщати",
|
||||
"{{number}} pages left in chapter": "Залишилось {{number}} сторінок у розділі",
|
||||
"Cover": "Перекрити",
|
||||
"Contain": "Втиснути",
|
||||
"{{number}} pages left in chapter": "<1>Залишилось </1><0>{{number}}</0><1> сторінок у розділі</1>",
|
||||
"Device": "Пристрій",
|
||||
"E-Ink Mode": "E-Ink режим",
|
||||
"Highlight Colors": "Кольори виділення",
|
||||
"Auto Screen Brightness": "Автоматична яскравість екрану",
|
||||
"Pagination": "Розбиття на сторінки",
|
||||
"Disable Double Tap": "Вимкнути подвійне натискання",
|
||||
"Tap to Paginate": "Натисніть, щоб розбити на сторінки",
|
||||
"Click to Paginate": "Клікніть, щоб розбити на сторінки",
|
||||
"Tap Both Sides": "Натисніть обидві сторони",
|
||||
"Click Both Sides": "Клікніть обидві сторони",
|
||||
"Swap Tap Sides": "Змінити сторони дотику",
|
||||
"Tap Both Sides": "Натискати на обидві сторони",
|
||||
"Click Both Sides": "Клікати на обидві сторони",
|
||||
"Swap Tap Sides": "Змінити сторони натискання",
|
||||
"Swap Click Sides": "Змінити сторони кліку",
|
||||
"Source and Translated": "Джерело та переклад",
|
||||
"Translated Only": "Тільки переклад",
|
||||
@@ -632,8 +626,8 @@
|
||||
"The book file is empty": "Файл книги порожній",
|
||||
"Failed to open the book file": "Не вдалося відкрити файл книги",
|
||||
"On-Demand Purchase": "Покупка за запитом",
|
||||
"Full Customization": "Повна налаштування",
|
||||
"Lifetime Plan": "План на все життя",
|
||||
"Full Customization": "Повна кастомізація",
|
||||
"Lifetime Plan": "На все життя",
|
||||
"One-Time Payment": "Одноразовий платіж",
|
||||
"Make a single payment to enjoy lifetime access to specific features on all devices. Purchase specific features or services only when you need them.": "Зробіть одноразовий платіж, щоб отримати довічний доступ до певних функцій на всіх пристроях. Купуйте конкретні функції або послуги лише тоді, коли вони вам потрібні.",
|
||||
"Expand Cloud Sync Storage": "Розширити сховище синхронізації в хмарі",
|
||||
@@ -641,7 +635,7 @@
|
||||
"Unlock All Customization Options": "Відкрити всі параметри налаштування",
|
||||
"Unlock additional themes, fonts, layout options and read aloud, translators, cloud storage services.": "Відкрийте додаткові теми, шрифти, параметри макета та функції читання вголос, перекладачі, послуги хмарного зберігання.",
|
||||
"Purchase Successful!": "Покупка успішна!",
|
||||
"lifetime": "довічний",
|
||||
"lifetime": "на все життя",
|
||||
"Thank you for your purchase! Your payment has been processed successfully.": "Дякуємо за вашу покупку! Ваш платіж успішно оброблено.",
|
||||
"Order ID:": "ID замовлення:",
|
||||
"TTS Highlighting": "Підсвічування TTS",
|
||||
@@ -658,11 +652,481 @@
|
||||
"Back": "Назад",
|
||||
"Confirmation email sent! Please check your old and new email addresses to confirm the change.": "Лист підтвердження надіслано! Будь ласка, перевірте стару та нову електронну адресу, щоб підтвердити зміну.",
|
||||
"Failed to update email": "Не вдалося оновити електронну пошту",
|
||||
"New Email": "Нова електронна пошта",
|
||||
"New Email": "Нова електронна адреса",
|
||||
"Your new email": "Ваша нова електронна адреса",
|
||||
"Updating email ...": "Оновлення електронної пошти ...",
|
||||
"Update email": "Оновити електронну пошту",
|
||||
"Current email": "Поточна електронна пошта",
|
||||
"Update Email": "Оновити електронну пошту",
|
||||
"All": "Всі"
|
||||
"Updating email ...": "Оновлення електронної адреси ...",
|
||||
"Update email": "Оновити електронну адресу",
|
||||
"Current email": "Поточна електронна адреса",
|
||||
"Update Email": "Оновити Адресу",
|
||||
"All": "Всі",
|
||||
"Unable to open book": "Не вдалося відкрити книгу",
|
||||
"Punctuation": "Пунктуація",
|
||||
"Replace Quotation Marks": "Замінити лапки",
|
||||
"Enabled only in vertical layout.": "Активовано лише у вертикальному макеті.",
|
||||
"No Conversion": "Без конвертації",
|
||||
"Simplified to Traditional": "Спрощена → Традиційна",
|
||||
"Traditional to Simplified": "Традиційна → Спрощена",
|
||||
"Simplified to Traditional (Taiwan)": "Спрощена → Традиційна (Тайвань)",
|
||||
"Simplified to Traditional (Hong Kong)": "Спрощена → Традиційна (Хонкон)",
|
||||
"Simplified to Traditional (Taiwan), with phrases": "Спрощена → Традиційна (Тайвань • фрази)",
|
||||
"Traditional (Taiwan) to Simplified": "Традиційна (Тайвань) → Спрощена",
|
||||
"Traditional (Hong Kong) to Simplified": "Традиційна (Хонкон) → Спрощена",
|
||||
"Traditional (Taiwan) to Simplified, with phrases": "Традиційна (Тайвань • фрази) → Спрощена",
|
||||
"Convert Simplified and Traditional Chinese": "Конвертувати спрощену/традиційну китайську",
|
||||
"Convert Mode": "Режим конвертації",
|
||||
"Failed to auto-save book cover for lock screen: {{error}}": "Не вдалося автоматично зберегти обкладинку книги для екрана блокування: {{error}}",
|
||||
"Download from Cloud": "Завантажити з хмари",
|
||||
"Upload to Cloud": "Завантажити в хмару",
|
||||
"Clear Custom Fonts": "Очистити користувацькі шрифти",
|
||||
"Columns": "Стовпці",
|
||||
"OPDS Catalogs": "Каталоги OPDS",
|
||||
"Adding LAN addresses is not supported in the web app version.": "Додавання LAN-адрес не підтримується у веб-версії.",
|
||||
"Invalid OPDS catalog. Please check the URL.": "Недійсний каталог OPDS. Будь ласка, перевірте URL.",
|
||||
"Browse and download books from online catalogs": "Переглядайте та завантажуйте книги з онлайн-каталогів",
|
||||
"My Catalogs": "Мої каталоги",
|
||||
"Add Catalog": "Додати каталог",
|
||||
"No catalogs yet": "Каталогів поки немає",
|
||||
"Add your first OPDS catalog to start browsing books": "Додайте перший каталог OPDS, щоб почати перегляд книг",
|
||||
"Add Your First Catalog": "Додайте свій перший каталог",
|
||||
"Browse": "Переглянути",
|
||||
"Popular Catalogs": "Популярні каталоги",
|
||||
"Add": "Додати",
|
||||
"Add OPDS Catalog": "Додати каталог OPDS",
|
||||
"Catalog Name": "Назва каталогу",
|
||||
"My Calibre Library": "Моя бібліотека Calibre",
|
||||
"OPDS URL": "OPDS URL",
|
||||
"Username (optional)": "Ім’я користувача (необов’язково)",
|
||||
"Password (optional)": "Пароль (необов’язково)",
|
||||
"Description (optional)": "Опис (необов’язково)",
|
||||
"A brief description of this catalog": "Короткий опис цього каталогу",
|
||||
"Validating...": "Перевірка...",
|
||||
"View All": "Переглянути все",
|
||||
"Forward": "Вперед",
|
||||
"Home": "Головна",
|
||||
"{{count}} items_one": "{{count}} елемент",
|
||||
"{{count}} items_few": "{{count}} елементи",
|
||||
"{{count}} items_many": "{{count}} елементів",
|
||||
"{{count}} items_other": "{{count}} елементів",
|
||||
"Download completed": "Завантаження завершено",
|
||||
"Download failed": "Завантаження не вдалося",
|
||||
"Open Access": "Вільний доступ",
|
||||
"Borrow": "Позичити",
|
||||
"Buy": "Купити",
|
||||
"Subscribe": "Підписатися",
|
||||
"Sample": "Зразок",
|
||||
"Download": "Завантажити",
|
||||
"Open & Read": "Відкрити та читати",
|
||||
"Tags": "Теґи",
|
||||
"Tag": "Теґ",
|
||||
"First": "Перша",
|
||||
"Previous": "Попередня",
|
||||
"Next": "Наступна",
|
||||
"Last": "Остання",
|
||||
"Cannot Load Page": "Не вдалося завантажити сторінку",
|
||||
"An error occurred": "Сталася помилка",
|
||||
"Online Library": "Онлайн бібліотека",
|
||||
"URL must start with http:// or https://": "URL повинен починатися з http:// або https://",
|
||||
"Title, Author, Tag, etc...": "Назва, автор, теґ тощо...",
|
||||
"Query": "Запит",
|
||||
"Subject": "Тема",
|
||||
"Enter {{terms}}": "Введіть {{terms}}",
|
||||
"No search results found": "Результатів пошуку не знайдено",
|
||||
"Failed to load OPDS feed: {{status}} {{statusText}}": "Не вдалося завантажити стрічку OPDS: {{status}} {{statusText}}",
|
||||
"Search in {{title}}": "Пошук у {{title}}",
|
||||
"Manage Storage": "Керування сховищем",
|
||||
"Failed to load files": "Не вдалося завантажити файли",
|
||||
"Deleted {{count}} file(s)_one": "Видалено {{count}} файл",
|
||||
"Deleted {{count}} file(s)_few": "Видалено {{count}} файли",
|
||||
"Deleted {{count}} file(s)_many": "Видалено {{count}} файлів",
|
||||
"Deleted {{count}} file(s)_other": "Видалено {{count}} файлів",
|
||||
"Failed to delete {{count}} file(s)_one": "Не вдалося видалити {{count}} файл",
|
||||
"Failed to delete {{count}} file(s)_few": "Не вдалося видалити {{count}} файли",
|
||||
"Failed to delete {{count}} file(s)_many": "Не вдалося видалити {{count}} файлів",
|
||||
"Failed to delete {{count}} file(s)_other": "Не вдалося видалити {{count}} файлів",
|
||||
"Failed to delete files": "Не вдалося видалити файли",
|
||||
"Total Files": "Всього файлів",
|
||||
"Total Size": "Загальний розмір",
|
||||
"Quota": "Квота",
|
||||
"Used": "Використано",
|
||||
"Files": "Файли",
|
||||
"Search files...": "Пошук файлів...",
|
||||
"Newest First": "Спершу новіші",
|
||||
"Oldest First": "Спершу старіші",
|
||||
"Largest First": "Спершу найбільші",
|
||||
"Smallest First": "Спершу найменші",
|
||||
"Name A-Z": "Ім'я А-Я",
|
||||
"Name Z-A": "Ім'я А-Я",
|
||||
"{{count}} selected_one": "Вибрано {{count}} файл",
|
||||
"{{count}} selected_few": "Вибрано {{count}} файли",
|
||||
"{{count}} selected_many": "Вибрано {{count}} файлів",
|
||||
"{{count}} selected_other": "Вибрано {{count}} файлів",
|
||||
"Delete Selected": "Видалити вибране",
|
||||
"Created": "Створено",
|
||||
"No files found": "Файли не знайдено",
|
||||
"No files uploaded yet": "Файли ще не завантажені",
|
||||
"files": "файли",
|
||||
"Page {{current}} of {{total}}": "Сторінка {{current}} з {{total}}",
|
||||
"Are you sure to delete {{count}} selected file(s)?_one": "Ви впевнені, що хочете видалити {{count}} файл?",
|
||||
"Are you sure to delete {{count}} selected file(s)?_few": "Ви впевнені, що хочете видалити {{count}} файли?",
|
||||
"Are you sure to delete {{count}} selected file(s)?_many": "Ви впевнені, що хочете видалити {{count}} файлів?",
|
||||
"Are you sure to delete {{count}} selected file(s)?_other": "Ви впевнені, що хочете видалити {{count}} файлів?",
|
||||
"Cloud Storage Usage": "Використання хмарного сховища",
|
||||
"Rename Group": "Перейменувати групу",
|
||||
"From Directory": "З каталогу",
|
||||
"Successfully imported {{count}} book(s)_one": "Успішно імпортовано 1 книгу",
|
||||
"Successfully imported {{count}} book(s)_few": "Успішно імпортовано {{count}} книги",
|
||||
"Successfully imported {{count}} book(s)_many": "Успішно імпортовано {{count}} книги",
|
||||
"Successfully imported {{count}} book(s)_other": "Успішно імпортовано {{count}} книги",
|
||||
"Count": "Кількість",
|
||||
"Start Page": "Початкова сторінка",
|
||||
"Search in OPDS Catalog...": "Пошук у каталозі OPDS...",
|
||||
"Please log in to use advanced TTS features": "Будь ласка, увійдіть, щоб використовувати розширені функції TTS",
|
||||
"Word limit of 30 words exceeded.": "Перевищено ліміт у 30 слів.",
|
||||
"Proofread": "Вичитка",
|
||||
"Current selection": "Поточне виділення",
|
||||
"All occurrences in this book": "Усі випадки в цій книзі",
|
||||
"All occurrences in your library": "Усі випадки у вашій бібліотеці",
|
||||
"Selected text:": "Виділений текст:",
|
||||
"Replace with:": "Замінити на:",
|
||||
"Enter text...": "Введіть текст…",
|
||||
"Case sensitive:": "З урахуванням реґістру:",
|
||||
"Scope:": "Область застосування:",
|
||||
"Selection": "Виділення",
|
||||
"Library": "Бібліотека",
|
||||
"Yes": "Так",
|
||||
"No": "Ні",
|
||||
"Proofread Replacement Rules": "Правила заміни для вичитування",
|
||||
"Selected Text Rules": "Правила для виділеного тексту",
|
||||
"No selected text replacement rules": "Немає правил заміни для виділеного тексту",
|
||||
"Book Specific Rules": "Правила для конкретної книги",
|
||||
"No book-level replacement rules": "Немає правил заміни на рівні книги",
|
||||
"Disable Quick Action": "Вимкнути швидку дію",
|
||||
"Enable Quick Action on Selection": "Увімкнути швидку дію при виборі",
|
||||
"None": "Нема",
|
||||
"Annotation Tools": "Інструменти анотацій",
|
||||
"Enable Quick Actions": "Увімкнути швидкі дії",
|
||||
"Quick Action": "Швидка дія",
|
||||
"Copy to Notebook": "Скопіювати до блокнота",
|
||||
"Copy text after selection": "Скопіювати текст після виділення",
|
||||
"Highlight text after selection": "Виділити текст після виділення",
|
||||
"Annotate text after selection": "Додати анотацію до тексту після виділення",
|
||||
"Search text after selection": "Шукати текст після виділення",
|
||||
"Look up text in dictionary after selection": "Шукати текст у словнику після виділення",
|
||||
"Look up text in Wikipedia after selection": "Шукати текст у Вікіпедії після виділення",
|
||||
"Translate text after selection": "Перекласти текст після виділення",
|
||||
"Read text aloud after selection": "Прочитати текст вголос після виділення",
|
||||
"Proofread text after selection": "Вичитати текст після виділення",
|
||||
"{{activeCount}} active, {{pendingCount}} pending": "{{activeCount}} активних, {{pendingCount}} очікують",
|
||||
"{{failedCount}} failed": "{{failedCount}} невдалих",
|
||||
"Waiting...": "Очікування...",
|
||||
"Failed": "Помилка",
|
||||
"Completed": "Завершено",
|
||||
"Cancelled": "Скасовано",
|
||||
"Retry": "Повторити",
|
||||
"Active": "Активні",
|
||||
"Transfer Queue": "Черга передачі",
|
||||
"Upload All": "Завантажити все",
|
||||
"Download All": "Завантажити все",
|
||||
"Resume Transfers": "Продовжити передачу",
|
||||
"Pause Transfers": "Призупинити передачу",
|
||||
"Pending": "Очікують",
|
||||
"No transfers": "Немає передач",
|
||||
"Retry All": "Повторити все",
|
||||
"Clear Completed": "Очистити завершені",
|
||||
"Clear Failed": "Очистити невдалі",
|
||||
"Upload queued: {{title}}": "Завантаження в черзі: {{title}}",
|
||||
"Download queued: {{title}}": "Завантаження в черзі: {{title}}",
|
||||
"Book not found in library": "Книгу не знайдено в бібліотеці",
|
||||
"Unknown error": "Невідома помилка",
|
||||
"Please log in to continue": "Увійдіть, щоб продовжити",
|
||||
"Cloud File Transfers": "Передача файлів у хмару",
|
||||
"Show Search Results": "Показати результати",
|
||||
"Search results for '{{term}}'": "Результати для «{{term}}»",
|
||||
"Close Search": "Закрити пошук",
|
||||
"Previous Result": "Попередній результат",
|
||||
"Next Result": "Наступний результат",
|
||||
"Bookmarks": "Закладки",
|
||||
"Annotations": "Анотації",
|
||||
"Show Results": "Показати результати",
|
||||
"Clear search": "Очистити пошук",
|
||||
"Clear search history": "Очистити історію пошуку",
|
||||
"Tap to Toggle Footer": "Нижній колонтитул",
|
||||
"Show Current Time": "Показати поточний час",
|
||||
"Use 24 Hour Clock": "Використовувати 24-годинний формат",
|
||||
"Show Current Battery Status": "Показати поточний стан батареї",
|
||||
"Exported successfully": "Успішно експортовано",
|
||||
"Book exported successfully.": "Книгу успішно експортовано.",
|
||||
"Failed to export the book.": "Не вдалося експортувати книгу.",
|
||||
"Export Book": "Експортувати книгу",
|
||||
"Whole word:": "Ціле слово:",
|
||||
"Error": "Помилка",
|
||||
"Unable to load the article. Try searching directly on {{link}}.": "Не вдалося завантажити статтю. Спробуйте шукати безпосередньо на {{link}}.",
|
||||
"Unable to load the word. Try searching directly on {{link}}.": "Не вдалося завантажити слово. Спробуйте шукати безпосередньо на {{link}}.",
|
||||
"Date Published": "Дата публікації",
|
||||
"Only for TTS:": "Тільки для TTS:",
|
||||
"Uploaded": "Завантажено",
|
||||
"Downloaded": "Звантажено",
|
||||
"Deleted": "Видалено",
|
||||
"Note:": "Примітка:",
|
||||
"Time:": "Час:",
|
||||
"Format Options": "Параметри формату",
|
||||
"Export Date": "Дата експорту",
|
||||
"Chapter Titles": "Назви розділів",
|
||||
"Chapter Separator": "Роздільник розділів",
|
||||
"Highlights": "Виділення",
|
||||
"Note Date": "Дата примітки",
|
||||
"Advanced": "Розширені",
|
||||
"Hide": "Сховати",
|
||||
"Show": "Показати",
|
||||
"Use Custom Template": "Використовувати власний шаблон",
|
||||
"Export Template": "Шаблон експорту",
|
||||
"Template Syntax:": "Синтаксис шаблону:",
|
||||
"Insert value": "Вставити значення",
|
||||
"Format date (locale)": "Форматувати дату (локаль)",
|
||||
"Format date (custom)": "Форматувати дату (власний)",
|
||||
"Conditional": "Умовний",
|
||||
"Loop": "Цикл",
|
||||
"Available Variables:": "Доступні змінні:",
|
||||
"Book title": "Назва книги",
|
||||
"Book author": "Автор книги",
|
||||
"Export date": "Дата експорту",
|
||||
"Array of chapters": "Масив розділів",
|
||||
"Chapter title": "Назва розділу",
|
||||
"Array of annotations": "Масив приміток",
|
||||
"Highlighted text": "Виділений текст",
|
||||
"Annotation note": "Примітка анотації",
|
||||
"Date Format Tokens:": "Токени формату дати:",
|
||||
"Year (4 digits)": "Рік (4 цифри)",
|
||||
"Month (01-12)": "Місяць (01-12)",
|
||||
"Day (01-31)": "День (01-31)",
|
||||
"Hour (00-23)": "Година (00-23)",
|
||||
"Minute (00-59)": "Хвилина (00-59)",
|
||||
"Second (00-59)": "Секунда (00-59)",
|
||||
"Show Source": "Показати джерело",
|
||||
"No content to preview": "Немає вмісту для перегляду",
|
||||
"Export": "Експортувати",
|
||||
"Set Timeout": "Встановити тайм-аут",
|
||||
"Select Voice": "Вибрати голос",
|
||||
"Toggle Sticky Bottom TTS Bar": "Перемкнути закріплену панель TTS",
|
||||
"Display what I'm reading on Discord": "Показувати книгу в Discord",
|
||||
"Show on Discord": "Показати в Discord",
|
||||
"Instant {{action}}": "Швидка дія: {{action}}",
|
||||
"Instant {{action}} Disabled": "Миттєву дію {{action}} вимкнено",
|
||||
"Annotation": "Анотація",
|
||||
"Reset Template": "Скинути шаблон",
|
||||
"Annotation style": "Стиль анотації",
|
||||
"Annotation color": "Колір анотації",
|
||||
"Annotation time": "Час анотації",
|
||||
"AI": "ШІ",
|
||||
"Are you sure you want to re-index this book?": "Ви впевнені, що хочете переіндексувати цю книгу?",
|
||||
"Enable AI in Settings": "Увімкнути ШІ в налаштуваннях",
|
||||
"Index This Book": "Індексувати цю книгу",
|
||||
"Enable AI search and chat for this book": "Увімкнути ШІ-пошук та чат для цієї книги",
|
||||
"Start Indexing": "Почати індексацію",
|
||||
"Indexing book...": "Індексація книги...",
|
||||
"Preparing...": "Підготовка...",
|
||||
"Delete this conversation?": "Видалити цю розмову?",
|
||||
"No conversations yet": "Поки немає розмов",
|
||||
"Start a new chat to ask questions about this book": "Почніть новий чат, щоб задати питання про цю книгу",
|
||||
"Rename": "Перейменувати",
|
||||
"New Chat": "Новий чат",
|
||||
"Chat": "Чат",
|
||||
"Please enter a model ID": "Будь ласка, введіть ID моделі",
|
||||
"Model not available or invalid": "Модель недоступна або недійсна",
|
||||
"Failed to validate model": "Не вдалося перевірити модель",
|
||||
"Couldn't connect to Ollama. Is it running?": "Не вдалося підключитися до Ollama. Вона запущена?",
|
||||
"Invalid API key or connection failed": "Недійсний API-ключ або помилка підключення",
|
||||
"Connection failed": "Помилка підключення",
|
||||
"AI Assistant": "ШІ-асистент",
|
||||
"Enable AI Assistant": "Увімкнути ШІ-асистента",
|
||||
"Provider": "Провайдер",
|
||||
"Ollama (Local)": "Ollama (Локальний)",
|
||||
"AI Gateway (Cloud)": "ШІ-шлюз (Хмара)",
|
||||
"Ollama Configuration": "Налаштування Ollama",
|
||||
"Refresh Models": "Оновити моделі",
|
||||
"AI Model": "ШІ-модель",
|
||||
"No models detected": "Моделі не знайдено",
|
||||
"AI Gateway Configuration": "Налаштування ШІ-шлюзу",
|
||||
"Choose from a selection of high-quality, economical AI models. You can also bring your own model by selecting \"Custom Model\" below.": "Оберіть з високоякісних або економних ШІ-моделей. Ви також можете використати власну модель, обравши \"Користувацька модель\" нижче.",
|
||||
"API Key": "API-ключ",
|
||||
"Get Key": "Отримати ключ",
|
||||
"Model": "Модель",
|
||||
"Custom Model...": "Користувацька модель...",
|
||||
"Custom Model ID": "ID користувацької моделі",
|
||||
"Validate": "Перевірити",
|
||||
"Model available": "Модель доступна",
|
||||
"Connection": "З'єднання",
|
||||
"Test Connection": "Перевірити з'єднання",
|
||||
"Connected": "Підключено",
|
||||
"Custom Colors": "Спеціальні кольори",
|
||||
"Color E-Ink Mode": "Кольоровий режим E-Ink",
|
||||
"Reading Ruler": "Лінійка для читання",
|
||||
"Enable Reading Ruler": "Увімкнути лінійку для читання",
|
||||
"Lines to Highlight": "Рядки для виділення",
|
||||
"Ruler Color": "Колір лінійки",
|
||||
"Command Palette": "Палітра команд",
|
||||
"Search settings and actions...": "Пошук налаштувань та дій...",
|
||||
"No results found for": "Результатів не знайдено для",
|
||||
"Type to search settings and actions": "Введіть для пошуку налаштувань та дій",
|
||||
"Recent": "Нещодавні",
|
||||
"navigate": "навігація",
|
||||
"select": "вибрати",
|
||||
"close": "закрити",
|
||||
"Search Settings": "Пошук налаштувань",
|
||||
"Page Margins": "Поля сторінки",
|
||||
"AI Provider": "Провайдер ШІ",
|
||||
"Ollama URL": "URL Ollama",
|
||||
"Ollama Model": "Модель Ollama",
|
||||
"AI Gateway Model": "Модель ШІ-шлюзу",
|
||||
"Actions": "Дії",
|
||||
"Navigation": "Навігація",
|
||||
"Set status for {{count}} book(s)_one": "Встановити статус для {{count}} книги",
|
||||
"Set status for {{count}} book(s)_other": "Встановити статус для {{count}} книг",
|
||||
"Mark as Unread": "Позначити як непрочитане",
|
||||
"Mark as Finished": "Позначити як завершене",
|
||||
"Finished": "Завершено",
|
||||
"Unread": "Непрочитане",
|
||||
"Clear Status": "Очистити статус",
|
||||
"Status": "Статус",
|
||||
"Set status for {{count}} book(s)_few": "Встановити статус для {{count}} книг",
|
||||
"Set status for {{count}} book(s)_many": "Встановити статус для {{count}} книг",
|
||||
"Loading": "Завантаження...",
|
||||
"Exit Paragraph Mode": "Вийти з режиму абзацу",
|
||||
"Paragraph Mode": "Режим абзацу",
|
||||
"Embedding Model": "Модель вбудовування",
|
||||
"{{count}} book(s) synced_one": "{{count}} книга синхронізована",
|
||||
"{{count}} book(s) synced_few": "{{count}} книги синхронізовані",
|
||||
"{{count}} book(s) synced_many": "{{count}} книг синхронізовано",
|
||||
"{{count}} book(s) synced_other": "{{count}} книг синхронізовано",
|
||||
"Unable to start RSVP": "Не вдалося запустити RSVP",
|
||||
"RSVP not supported for PDF": "RSVP не підтримується для PDF",
|
||||
"Select Chapter": "Вибрати розділ",
|
||||
"Context": "Контекст",
|
||||
"Ready": "Готово",
|
||||
"Chapter Progress": "Прогрес розділу",
|
||||
"words": "слів",
|
||||
"{{time}} left": "залишилося {{time}}",
|
||||
"Reading progress": "Прогрес читання",
|
||||
"Click to seek": "Натисніть для пошуку",
|
||||
"Skip back 15 words": "Назад на 15 слів",
|
||||
"Back 15 words (Shift+Left)": "Назад на 15 слів (Shift+Стрілка вліво)",
|
||||
"Pause (Space)": "Пауза (Пробіл)",
|
||||
"Play (Space)": "Відтворити (Пробіл)",
|
||||
"Skip forward 15 words": "Вперед на 15 слів",
|
||||
"Forward 15 words (Shift+Right)": "Вперед на 15 слів (Shift+Стрілка вправо)",
|
||||
"Decrease speed": "Зменшити швидкість",
|
||||
"Slower (Left/Down)": "Повільніше (стрілки Вліво/Вниз)",
|
||||
"Increase speed": "Збільшити швидкість",
|
||||
"Faster (Right/Up)": "Швидше (стрілки Вправо/Вгору)",
|
||||
"Start RSVP Reading": "Почати читання RSVP",
|
||||
"Choose where to start reading": "Виберіть, де почати читання",
|
||||
"From Chapter Start": "З початку розділу",
|
||||
"Start reading from the beginning of the chapter": "Почати читання з початку розділу",
|
||||
"Resume": "Продовжити",
|
||||
"Continue from where you left off": "Продовжити з того місця, де ви зупинилися",
|
||||
"From Current Page": "З поточної сторінки",
|
||||
"Start from where you are currently reading": "Почати з того місця, де ви зараз читаєте",
|
||||
"From Selection": "З виділеного",
|
||||
"Speed Reading Mode": "Режим швидкого читання",
|
||||
"Scroll left": "Прокрутити вліво",
|
||||
"Scroll right": "Прокрутити вправо",
|
||||
"Library Sync Progress": "Прогрес синхронізації бібліотеки",
|
||||
"Back to library": "Назад до бібліотеки",
|
||||
"Group by...": "Групувати за...",
|
||||
"Export as Plain Text": "Експортувати як звичайний текст",
|
||||
"Export as Markdown": "Експортувати як Markdown",
|
||||
"Show Page Navigation Buttons": "Кнопки навігації",
|
||||
"Page {{number}}": "Сторінка {{number}}",
|
||||
"highlight": "виділення",
|
||||
"underline": "підкреслення",
|
||||
"squiggly": "хвиляста лінія",
|
||||
"red": "червоний",
|
||||
"violet": "фіолетовий",
|
||||
"blue": "синій",
|
||||
"green": "зелений",
|
||||
"yellow": "жовтий",
|
||||
"Select {{style}} style": "Вибрати стиль {{style}}",
|
||||
"Select {{color}} color": "Вибрати колір {{color}}",
|
||||
"Close Book": "Закрити книгу",
|
||||
"Speed Reading": "Швидкісне читання",
|
||||
"Close Speed Reading": "Закрити швидкісне читання",
|
||||
"Authors": "Автори",
|
||||
"Books": "Книги",
|
||||
"Groups": "Групи",
|
||||
"Back to TTS Location": "Повернутися до розташування TTS",
|
||||
"Metadata": "Метадані",
|
||||
"Image viewer": "Переглядач зображень",
|
||||
"Previous Image": "Попереднє зображення",
|
||||
"Next Image": "Наступне зображення",
|
||||
"Zoomed": "Збільшено",
|
||||
"Zoom level": "Рівень масштабу",
|
||||
"Table viewer": "Переглядач таблиць",
|
||||
"Unable to connect to Readwise. Please check your network connection.": "Не вдалося підключитися до Readwise. Будь ласка, перевірте мережеве з'єднання.",
|
||||
"Invalid Readwise access token": "Недійсний токен доступу Readwise",
|
||||
"Disconnected from Readwise": "Відключено від Readwise",
|
||||
"Never": "Ніколи",
|
||||
"Readwise Settings": "Налаштування Readwise",
|
||||
"Connected to Readwise": "Підключено до Readwise",
|
||||
"Last synced: {{time}}": "Остання синхронізація: {{time}}",
|
||||
"Sync Enabled": "Синхронізацію увімкнено",
|
||||
"Disconnect": "Відключити",
|
||||
"Connect your Readwise account to sync highlights.": "Підключіть свій обліковий запис Readwise, щоб синхронізувати виділення.",
|
||||
"Get your access token at": "Отримайте токен доступу за адресою",
|
||||
"Access Token": "Токен доступу",
|
||||
"Paste your Readwise access token": "Вставте ваш токен доступу Readwise",
|
||||
"Config": "Конфігурація",
|
||||
"Readwise Sync": "Синхронізація Readwise",
|
||||
"Push Highlights": "Надіслати виділення",
|
||||
"Highlights synced to Readwise": "Виділення синхронізовано з Readwise",
|
||||
"Readwise sync failed: no internet connection": "Синхронізація Readwise не вдалася: немає інтернет-з'єднання",
|
||||
"Readwise sync failed: {{error}}": "Синхронізація Readwise не вдалася: {{error}}",
|
||||
"System Screen Brightness": "Системна яскравість екрана",
|
||||
"Page:": "Сторінка:",
|
||||
"Page: {{number}}": "Сторінка: {{number}}",
|
||||
"Annotation page number": "Номер сторінки анотації",
|
||||
"Translating...": "Переклад...",
|
||||
"Show Battery Percentage": "Показувати відсоток заряду батареї",
|
||||
"Hide Scrollbar": "Сховати смугу прокрутки",
|
||||
"Skip to last reading position": "Перейти до останньої позиції читання",
|
||||
"Show context": "Показати контекст",
|
||||
"Hide context": "Сховати контекст",
|
||||
"Decrease font size": "Зменшити розмір шрифту",
|
||||
"Increase font size": "Збільшити розмір шрифту",
|
||||
"Focus": "Фокус",
|
||||
"Theme color": "Колір теми",
|
||||
"Import failed": "Помилка імпорту",
|
||||
"Available Formatters:": "Доступні форматери:",
|
||||
"Format date": "Форматувати дату",
|
||||
"Markdown block quote (> per line)": "Цитата Markdown (> для кожного рядка)",
|
||||
"Newlines to <br>": "Переноси рядків у <br>",
|
||||
"Change case": "Змінити регістр",
|
||||
"Trim whitespace": "Видалити пробіли",
|
||||
"Truncate to n characters": "Обрізати до n символів",
|
||||
"Replace text": "Замінити текст",
|
||||
"Fallback value": "Значення за замовчуванням",
|
||||
"Get length": "Отримати довжину",
|
||||
"First/last element": "Перший/останній елемент",
|
||||
"Join array": "Об'єднати масив",
|
||||
"Backup failed: {{error}}": "Помилка резервного копіювання: {{error}}",
|
||||
"Select Backup": "Обрати резервну копію",
|
||||
"Restore failed: {{error}}": "Помилка відновлення: {{error}}",
|
||||
"Backup & Restore": "Резервне копіювання та відновлення",
|
||||
"Create a backup of your library or restore from a previous backup. Restoring will merge with your current library.": "Створіть резервну копію бібліотеки або відновіть з попередньої копії. Відновлення буде об'єднано з поточною бібліотекою.",
|
||||
"Backup Library": "Резервна копія бібліотеки",
|
||||
"Restore Library": "Відновити бібліотеку",
|
||||
"Creating backup...": "Створення резервної копії...",
|
||||
"Restoring library...": "Відновлення бібліотеки...",
|
||||
"{{current}} of {{total}} items": "{{current}} з {{total}} елементів",
|
||||
"Backup completed successfully!": "Резервне копіювання завершено!",
|
||||
"Restore completed successfully!": "Відновлення завершено!",
|
||||
"Your library has been saved to the selected location.": "Вашу бібліотеку збережено у вибраному місці.",
|
||||
"{{added}} books added, {{updated}} books updated.": "Додано {{added}} книг, оновлено {{updated}} книг.",
|
||||
"Operation failed": "Операція не вдалася",
|
||||
"Loading library...": "Завантаження бібліотеки...",
|
||||
"{{count}} books refreshed_one": "Оновлено {{count}} книгу",
|
||||
"{{count}} books refreshed_few": "Оновлено {{count}} книги",
|
||||
"{{count}} books refreshed_many": "Оновлено {{count}} книг",
|
||||
"{{count}} books refreshed_other": "Оновлено {{count}} книг",
|
||||
"Failed to refresh metadata": "Не вдалося оновити метадані",
|
||||
"Refresh Metadata": "Оновити метадані"
|
||||
}
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
"Auto Mode": "Chế độ tự động",
|
||||
"Behavior": "Hành vi",
|
||||
"Book": "Sách",
|
||||
"Book Cover": "Bìa sách",
|
||||
"Bookmark": "Đánh dấu",
|
||||
"Cancel": "Hủy",
|
||||
"Chapter": "Chương",
|
||||
@@ -107,7 +106,6 @@
|
||||
"Wikipedia": "Wikipedia",
|
||||
"Writing Mode": "Chế độ viết",
|
||||
"Your Library": "Thư viện của bạn",
|
||||
"TTS not supported for PDF": "TTS không được hỗ trợ cho PDF",
|
||||
"Override Book Font": "Ghi đè phông chữ sách",
|
||||
"Apply to All Books": "Áp dụng cho tất cả sách",
|
||||
"Apply to This Book": "Áp dụng cho sách này",
|
||||
@@ -174,9 +172,6 @@
|
||||
"Token": "Mã token",
|
||||
"Your OTP token": "Mã OTP của bạn",
|
||||
"Verify token": "Xác minh mã token",
|
||||
"Sign in with Google": "Đăng nhập với Google",
|
||||
"Sign in with Apple": "Đăng nhập với Apple",
|
||||
"Sign in with GitHub": "Đăng nhập với GitHub",
|
||||
"Account": "Tài khoản",
|
||||
"Failed to delete user. Please try again later.": "Không thể xóa người dùng. Vui lòng thử lại sau.",
|
||||
"Community Support": "Hỗ trợ cộng đồng",
|
||||
@@ -194,7 +189,7 @@
|
||||
"No supported files found. Supported formats: {{formats}}": "Không tìm thấy tệp được hỗ trợ. Định dạng được hỗ trợ: {{formats}}",
|
||||
"Drop to Import Books": "Kéo và thả để nhập sách",
|
||||
"Custom": "Tùy chỉnh",
|
||||
"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": "Cả thế giới này là một sân khấu,\nVà tất cả đàn ông và phụ nữ chỉ là những diễn viên;\nHọ có cửa ra và cửa vào của mình,\nVà một người trong cuộc đời mình đóng nhiều vai,\nHành động của mình là bảy tuổi.\n\n— William Shakespeare",
|
||||
"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": "Cả thế giới này là một sân khấu,\nVà tất cả đàn ông và phụ nữ chỉ là những diễn viên;\nHọ có cửa ra và cửa vào của mình,\nVà một người trong cuộc đời mình đóng nhiều vai,\nHành động của mình là bảy tuổi.\n\n— William Shakespeare",
|
||||
"Custom Theme": "Chủ đề tùy chỉnh",
|
||||
"Theme Name": "Tên chủ đề",
|
||||
"Text Color": "Màu văn bản",
|
||||
@@ -336,10 +331,10 @@
|
||||
"Fit": "Vừa vặn",
|
||||
"Reset {{settings}}": "Đặt lại {{settings}}",
|
||||
"Reset Settings": "Đặt lại cài đặt",
|
||||
"{{count}} pages left in chapter_other": "Còn {{count}} trang trong chương",
|
||||
"{{count}} pages left in chapter_other": "<1>Còn </1><0>{{count}}</0><1> trang trong chương</1>",
|
||||
"Show Remaining Pages": "Hiển thị trang còn lại",
|
||||
"Source Han Serif CN VF": "Source Han Serif",
|
||||
"Huiwen-mincho": "Huiwen Mincho",
|
||||
"Source Han Serif CN": "Source Han Serif",
|
||||
"Huiwen-MinchoGBK": "Huiwen Mincho",
|
||||
"KingHwa_OldSong": "KingHwa Song",
|
||||
"Manage Subscription": "Quản lý đăng ký",
|
||||
"Coming Soon": "Sắp ra mắt",
|
||||
@@ -599,11 +594,10 @@
|
||||
"Size": "Kích thước",
|
||||
"Cover": "Bìa",
|
||||
"Contain": "Chứa",
|
||||
"{{number}} pages left in chapter": "Còn {{number}} trang trong chương",
|
||||
"{{number}} pages left in chapter": "<1>Còn </1><0>{{number}}</0><1> trang trong chương</1>",
|
||||
"Device": "Thiết bị",
|
||||
"E-Ink Mode": "Chế độ E-Ink",
|
||||
"Highlight Colors": "Màu nổi bật",
|
||||
"Auto Screen Brightness": "Độ sáng màn hình tự động",
|
||||
"Pagination": "Phân trang",
|
||||
"Disable Double Tap": "Vô hiệu hóa chạm hai lần",
|
||||
"Tap to Paginate": "Chạm để phân trang",
|
||||
@@ -652,5 +646,448 @@
|
||||
"Update email": "Cập nhật email",
|
||||
"Current email": "Email hiện tại",
|
||||
"Update Email": "Cập nhật email",
|
||||
"All": "Tất cả"
|
||||
"All": "Tất cả",
|
||||
"Unable to open book": "Không thể mở sách",
|
||||
"Punctuation": "Dấu câu",
|
||||
"Replace Quotation Marks": "Thay thế dấu ngoặc kép",
|
||||
"Enabled only in vertical layout.": "Chỉ bật trong bố cục dọc.",
|
||||
"No Conversion": "Không chuyển đổi",
|
||||
"Simplified to Traditional": "Giản thể → Phồn thể",
|
||||
"Traditional to Simplified": "Phồn thể → Giản thể",
|
||||
"Simplified to Traditional (Taiwan)": "Giản thể → Phồn thể (Đài Loan)",
|
||||
"Simplified to Traditional (Hong Kong)": "Giản thể → Phồn thể (Hồng Kông)",
|
||||
"Simplified to Traditional (Taiwan), with phrases": "Giản thể → Phồn thể (Đài Loan • cụm từ)",
|
||||
"Traditional (Taiwan) to Simplified": "Phồn thể (Đài Loan) → Giản thể",
|
||||
"Traditional (Hong Kong) to Simplified": "Phồn thể (Hồng Kông) → Giản thể",
|
||||
"Traditional (Taiwan) to Simplified, with phrases": "Phồn thể (Đài Loan • cụm từ) → Giản thể",
|
||||
"Convert Simplified and Traditional Chinese": "Chuyển đổi Trung giản/Phồn thể",
|
||||
"Convert Mode": "Chế độ chuyển đổi",
|
||||
"Failed to auto-save book cover for lock screen: {{error}}": "Không thể tự động lưu bìa sách cho màn hình khóa: {{error}}",
|
||||
"Download from Cloud": "Tải xuống từ đám mây",
|
||||
"Upload to Cloud": "Tải lên đám mây",
|
||||
"Clear Custom Fonts": "Xóa phông chữ tùy chỉnh",
|
||||
"Columns": "Cột",
|
||||
"OPDS Catalogs": "Danh mục OPDS",
|
||||
"Adding LAN addresses is not supported in the web app version.": "Việc thêm địa chỉ LAN không được hỗ trợ trong phiên bản web.",
|
||||
"Invalid OPDS catalog. Please check the URL.": "Danh mục OPDS không hợp lệ. Vui lòng kiểm tra URL.",
|
||||
"Browse and download books from online catalogs": "Duyệt và tải sách từ các danh mục trực tuyến",
|
||||
"My Catalogs": "Danh mục của tôi",
|
||||
"Add Catalog": "Thêm danh mục",
|
||||
"No catalogs yet": "Chưa có danh mục nào",
|
||||
"Add your first OPDS catalog to start browsing books": "Thêm danh mục OPDS đầu tiên để bắt đầu duyệt sách",
|
||||
"Add Your First Catalog": "Thêm danh mục đầu tiên",
|
||||
"Browse": "Duyệt",
|
||||
"Popular Catalogs": "Danh mục phổ biến",
|
||||
"Add": "Thêm",
|
||||
"Add OPDS Catalog": "Thêm danh mục OPDS",
|
||||
"Catalog Name": "Tên danh mục",
|
||||
"My Calibre Library": "Thư viện Calibre của tôi",
|
||||
"OPDS URL": "URL OPDS",
|
||||
"Username (optional)": "Tên đăng nhập (tùy chọn)",
|
||||
"Password (optional)": "Mật khẩu (tùy chọn)",
|
||||
"Description (optional)": "Mô tả (tùy chọn)",
|
||||
"A brief description of this catalog": "Mô tả ngắn gọn về danh mục này",
|
||||
"Validating...": "Đang xác thực...",
|
||||
"View All": "Xem tất cả",
|
||||
"Forward": "Tiếp",
|
||||
"Home": "Trang chủ",
|
||||
"{{count}} items_other": "{{count}} mục",
|
||||
"Download completed": "Tải xuống hoàn tất",
|
||||
"Download failed": "Tải xuống thất bại",
|
||||
"Open Access": "Truy cập mở",
|
||||
"Borrow": "Mượn",
|
||||
"Buy": "Mua",
|
||||
"Subscribe": "Đăng ký",
|
||||
"Sample": "Mẫu",
|
||||
"Download": "Tải xuống",
|
||||
"Open & Read": "Mở & Đọc",
|
||||
"Tags": "Thẻ",
|
||||
"Tag": "Thẻ",
|
||||
"First": "Đầu tiên",
|
||||
"Previous": "Trước",
|
||||
"Next": "Tiếp theo",
|
||||
"Last": "Cuối cùng",
|
||||
"Cannot Load Page": "Không thể tải trang",
|
||||
"An error occurred": "Đã xảy ra lỗi",
|
||||
"Online Library": "Thư viện trực tuyến",
|
||||
"URL must start with http:// or https://": "URL phải bắt đầu bằng http:// hoặc https://",
|
||||
"Title, Author, Tag, etc...": "Tiêu đề, Tác giả, Thẻ, v.v...",
|
||||
"Query": "Truy vấn",
|
||||
"Subject": "Chủ đề",
|
||||
"Enter {{terms}}": "Nhập {{terms}}",
|
||||
"No search results found": "Không tìm thấy kết quả tìm kiếm",
|
||||
"Failed to load OPDS feed: {{status}} {{statusText}}": "Không tải được nguồn cấp OPDS: {{status}} {{statusText}}",
|
||||
"Search in {{title}}": "Tìm kiếm trong {{title}}",
|
||||
"Manage Storage": "Quản lý bộ nhớ",
|
||||
"Failed to load files": "Không tải được tệp",
|
||||
"Deleted {{count}} file(s)_other": "Đã xóa {{count}} tệp",
|
||||
"Failed to delete {{count}} file(s)_other": "Không xóa được {{count}} tệp",
|
||||
"Failed to delete files": "Không xóa được tệp",
|
||||
"Total Files": "Tổng số tệp",
|
||||
"Total Size": "Tổng dung lượng",
|
||||
"Quota": "Dung lượng cho phép",
|
||||
"Used": "Đã sử dụng",
|
||||
"Files": "Tệp",
|
||||
"Search files...": "Tìm tệp...",
|
||||
"Newest First": "Mới nhất trước",
|
||||
"Oldest First": "Cũ nhất trước",
|
||||
"Largest First": "Lớn nhất trước",
|
||||
"Smallest First": "Nhỏ nhất trước",
|
||||
"Name A-Z": "Tên A-Z",
|
||||
"Name Z-A": "Tên Z-A",
|
||||
"{{count}} selected_other": "Đã chọn {{count}} tệp",
|
||||
"Delete Selected": "Xóa các mục đã chọn",
|
||||
"Created": "Đã tạo",
|
||||
"No files found": "Không tìm thấy tệp",
|
||||
"No files uploaded yet": "Chưa tải lên tệp nào",
|
||||
"files": "tệp",
|
||||
"Page {{current}} of {{total}}": "Trang {{current}} trên {{total}}",
|
||||
"Are you sure to delete {{count}} selected file(s)?_other": "Bạn có chắc muốn xóa {{count}} tệp đã chọn không?",
|
||||
"Cloud Storage Usage": "Sử dụng lưu trữ đám mây",
|
||||
"Rename Group": "Đổi tên nhóm",
|
||||
"From Directory": "Từ thư mục",
|
||||
"Successfully imported {{count}} book(s)_other": "Đã nhập thành công {{count}} sách",
|
||||
"Count": "Số lượng",
|
||||
"Start Page": "Trang bắt đầu",
|
||||
"Search in OPDS Catalog...": "Tìm kiếm trong danh mục OPDS...",
|
||||
"Please log in to use advanced TTS features": "Vui lòng đăng nhập để sử dụng các tính năng TTS nâng cao",
|
||||
"Word limit of 30 words exceeded.": "Đã vượt quá giới hạn 30 từ.",
|
||||
"Proofread": "Hiệu đính",
|
||||
"Current selection": "Vùng chọn hiện tại",
|
||||
"All occurrences in this book": "Tất cả các lần xuất hiện trong sách này",
|
||||
"All occurrences in your library": "Tất cả các lần xuất hiện trong thư viện của bạn",
|
||||
"Selected text:": "Văn bản đã chọn:",
|
||||
"Replace with:": "Thay thế bằng:",
|
||||
"Enter text...": "Nhập văn bản…",
|
||||
"Case sensitive:": "Phân biệt chữ hoa/thường:",
|
||||
"Scope:": "Phạm vi:",
|
||||
"Selection": "Vùng chọn",
|
||||
"Library": "Thư viện",
|
||||
"Yes": "Có",
|
||||
"No": "Không",
|
||||
"Proofread Replacement Rules": "Quy tắc thay thế hiệu đính",
|
||||
"Selected Text Rules": "Quy tắc cho văn bản đã chọn",
|
||||
"No selected text replacement rules": "Không có quy tắc thay thế cho văn bản đã chọn",
|
||||
"Book Specific Rules": "Quy tắc dành riêng cho sách",
|
||||
"No book-level replacement rules": "Không có quy tắc thay thế ở cấp sách",
|
||||
"Disable Quick Action": "Vô hiệu hóa Hành động Nhanh",
|
||||
"Enable Quick Action on Selection": "Bật Hành động Nhanh khi chọn",
|
||||
"None": "Không có",
|
||||
"Annotation Tools": "Công cụ chú thích",
|
||||
"Enable Quick Actions": "Bật Hành động Nhanh",
|
||||
"Quick Action": "Hành động Nhanh",
|
||||
"Copy to Notebook": "Sao chép vào Sổ tay",
|
||||
"Copy text after selection": "Sao chép văn bản sau khi chọn",
|
||||
"Highlight text after selection": "Đánh dấu văn bản sau khi chọn",
|
||||
"Annotate text after selection": "Chú thích văn bản sau khi chọn",
|
||||
"Search text after selection": "Tìm kiếm văn bản sau khi chọn",
|
||||
"Look up text in dictionary after selection": "Tra cứu văn bản trong từ điển sau khi chọn",
|
||||
"Look up text in Wikipedia after selection": "Tra cứu văn bản trong Wikipedia sau khi chọn",
|
||||
"Translate text after selection": "Dịch văn bản sau khi chọn",
|
||||
"Read text aloud after selection": "Đọc to văn bản sau khi chọn",
|
||||
"Proofread text after selection": "Hiệu đính văn bản sau khi chọn",
|
||||
"{{activeCount}} active, {{pendingCount}} pending": "{{activeCount}} đang hoạt động, {{pendingCount}} đang chờ",
|
||||
"{{failedCount}} failed": "{{failedCount}} thất bại",
|
||||
"Waiting...": "Đang chờ...",
|
||||
"Failed": "Thất bại",
|
||||
"Completed": "Hoàn thành",
|
||||
"Cancelled": "Đã hủy",
|
||||
"Retry": "Thử lại",
|
||||
"Active": "Đang hoạt động",
|
||||
"Transfer Queue": "Hàng đợi truyền",
|
||||
"Upload All": "Tải lên tất cả",
|
||||
"Download All": "Tải xuống tất cả",
|
||||
"Resume Transfers": "Tiếp tục truyền",
|
||||
"Pause Transfers": "Tạm dừng truyền",
|
||||
"Pending": "Đang chờ",
|
||||
"No transfers": "Không có truyền",
|
||||
"Retry All": "Thử lại tất cả",
|
||||
"Clear Completed": "Xóa đã hoàn thành",
|
||||
"Clear Failed": "Xóa thất bại",
|
||||
"Upload queued: {{title}}": "Tải lên trong hàng đợi: {{title}}",
|
||||
"Download queued: {{title}}": "Tải xuống trong hàng đợi: {{title}}",
|
||||
"Book not found in library": "Không tìm thấy sách trong thư viện",
|
||||
"Unknown error": "Lỗi không xác định",
|
||||
"Please log in to continue": "Vui lòng đăng nhập để tiếp tục",
|
||||
"Cloud File Transfers": "Truyền tệp đám mây",
|
||||
"Show Search Results": "Hiển thị kết quả tìm kiếm",
|
||||
"Search results for '{{term}}'": "Kết quả cho '{{term}}'",
|
||||
"Close Search": "Đóng tìm kiếm",
|
||||
"Previous Result": "Kết quả trước",
|
||||
"Next Result": "Kết quả tiếp theo",
|
||||
"Bookmarks": "Dấu trang",
|
||||
"Annotations": "Chú thích",
|
||||
"Show Results": "Hiển thị kết quả",
|
||||
"Clear search": "Xóa tìm kiếm",
|
||||
"Clear search history": "Xóa lịch sử tìm kiếm",
|
||||
"Tap to Toggle Footer": "Nhấn để bật/tắt chân trang",
|
||||
"Show Current Time": "Hiển thị thời gian hiện tại",
|
||||
"Use 24 Hour Clock": "Sử dụng định dạng 24 giờ",
|
||||
"Show Current Battery Status": "Hiển thị trạng thái pin hiện tại",
|
||||
"Exported successfully": "Xuất thành công",
|
||||
"Book exported successfully.": "Sách đã được xuất thành công.",
|
||||
"Failed to export the book.": "Xuất sách thất bại.",
|
||||
"Export Book": "Xuất sách",
|
||||
"Whole word:": "Toàn bộ từ:",
|
||||
"Error": "Lỗi",
|
||||
"Unable to load the article. Try searching directly on {{link}}.": "Không thể tải bài viết. Hãy thử tìm kiếm trực tiếp trên {{link}}.",
|
||||
"Unable to load the word. Try searching directly on {{link}}.": "Không thể tải từ. Hãy thử tìm kiếm trực tiếp trên {{link}}.",
|
||||
"Date Published": "Ngày xuất bản",
|
||||
"Only for TTS:": "Chỉ dành cho TTS:",
|
||||
"Uploaded": "Đã tải lên",
|
||||
"Downloaded": "Đã tải xuống",
|
||||
"Deleted": "Đã xóa",
|
||||
"Note:": "Ghi chú:",
|
||||
"Time:": "Thời gian:",
|
||||
"Format Options": "Tùy chọn định dạng",
|
||||
"Export Date": "Ngày xuất",
|
||||
"Chapter Titles": "Tiêu đề chương",
|
||||
"Chapter Separator": "Dấu phân cách chương",
|
||||
"Highlights": "Đánh dấu",
|
||||
"Note Date": "Ngày ghi chú",
|
||||
"Advanced": "Nâng cao",
|
||||
"Hide": "Ẩn",
|
||||
"Show": "Hiển thị",
|
||||
"Use Custom Template": "Sử dụng mẫu tùy chỉnh",
|
||||
"Export Template": "Mẫu xuất",
|
||||
"Template Syntax:": "Cú pháp mẫu:",
|
||||
"Insert value": "Chèn giá trị",
|
||||
"Format date (locale)": "Định dạng ngày (địa phương)",
|
||||
"Format date (custom)": "Định dạng ngày (tùy chỉnh)",
|
||||
"Conditional": "Điều kiện",
|
||||
"Loop": "Vòng lặp",
|
||||
"Available Variables:": "Biến có sẵn:",
|
||||
"Book title": "Tiêu đề sách",
|
||||
"Book author": "Tác giả sách",
|
||||
"Export date": "Ngày xuất",
|
||||
"Array of chapters": "Danh sách chương",
|
||||
"Chapter title": "Tiêu đề chương",
|
||||
"Array of annotations": "Danh sách chú thích",
|
||||
"Highlighted text": "Văn bản được đánh dấu",
|
||||
"Annotation note": "Ghi chú chú thích",
|
||||
"Date Format Tokens:": "Token định dạng ngày:",
|
||||
"Year (4 digits)": "Năm (4 chữ số)",
|
||||
"Month (01-12)": "Tháng (01-12)",
|
||||
"Day (01-31)": "Ngày (01-31)",
|
||||
"Hour (00-23)": "Giờ (00-23)",
|
||||
"Minute (00-59)": "Phút (00-59)",
|
||||
"Second (00-59)": "Giây (00-59)",
|
||||
"Show Source": "Hiển thị nguồn",
|
||||
"No content to preview": "Không có nội dung để xem trước",
|
||||
"Export": "Xuất",
|
||||
"Set Timeout": "Đặt thời gian chờ",
|
||||
"Select Voice": "Chọn giọng nói",
|
||||
"Toggle Sticky Bottom TTS Bar": "Bật/tắt thanh TTS cố định",
|
||||
"Display what I'm reading on Discord": "Hiển thị sách đang đọc trên Discord",
|
||||
"Show on Discord": "Hiện trên Discord",
|
||||
"Instant {{action}}": "{{action}} tức thì",
|
||||
"Instant {{action}} Disabled": "{{action}} tức thì đã tắt",
|
||||
"Annotation": "Chú thích",
|
||||
"Reset Template": "Đặt lại mẫu",
|
||||
"Annotation style": "Kiểu chú thích",
|
||||
"Annotation color": "Màu chú thích",
|
||||
"Annotation time": "Thời gian chú thích",
|
||||
"AI": "AI",
|
||||
"Are you sure you want to re-index this book?": "Bạn có chắc muốn lập chỉ mục lại cuốn sách này?",
|
||||
"Enable AI in Settings": "Bật AI trong Cài đặt",
|
||||
"Index This Book": "Lập chỉ mục sách này",
|
||||
"Enable AI search and chat for this book": "Bật tìm kiếm AI và trò chuyện cho cuốn sách này",
|
||||
"Start Indexing": "Bắt đầu lập chỉ mục",
|
||||
"Indexing book...": "Đang lập chỉ mục sách...",
|
||||
"Preparing...": "Đang chuẩn bị...",
|
||||
"Delete this conversation?": "Xóa cuộc trò chuyện này?",
|
||||
"No conversations yet": "Chưa có cuộc trò chuyện nào",
|
||||
"Start a new chat to ask questions about this book": "Bắt đầu cuộc trò chuyện mới để hỏi về cuốn sách này",
|
||||
"Rename": "Đổi tên",
|
||||
"New Chat": "Cuộc trò chuyện mới",
|
||||
"Chat": "Trò chuyện",
|
||||
"Please enter a model ID": "Vui lòng nhập ID mô hình",
|
||||
"Model not available or invalid": "Mô hình không khả dụng hoặc không hợp lệ",
|
||||
"Failed to validate model": "Xác thực mô hình thất bại",
|
||||
"Couldn't connect to Ollama. Is it running?": "Không thể kết nối với Ollama. Nó có đang chạy không?",
|
||||
"Invalid API key or connection failed": "Khóa API không hợp lệ hoặc kết nối thất bại",
|
||||
"Connection failed": "Kết nối thất bại",
|
||||
"AI Assistant": "Trợ lý AI",
|
||||
"Enable AI Assistant": "Bật trợ lý AI",
|
||||
"Provider": "Nhà cung cấp",
|
||||
"Ollama (Local)": "Ollama (Cục bộ)",
|
||||
"AI Gateway (Cloud)": "Cổng AI (Đám mây)",
|
||||
"Ollama Configuration": "Cấu hình Ollama",
|
||||
"Refresh Models": "Làm mới mô hình",
|
||||
"AI Model": "Mô hình AI",
|
||||
"No models detected": "Không phát hiện mô hình nào",
|
||||
"AI Gateway Configuration": "Cấu hình cổng AI",
|
||||
"Choose from a selection of high-quality, economical AI models. You can also bring your own model by selecting \"Custom Model\" below.": "Chọn từ các mô hình AI chất lượng cao, tiết kiệm. Bạn cũng có thể sử dụng mô hình riêng bằng cách chọn \"Mô hình tùy chỉnh\" bên dưới.",
|
||||
"API Key": "Khóa API",
|
||||
"Get Key": "Lấy khóa",
|
||||
"Model": "Mô hình",
|
||||
"Custom Model...": "Mô hình tùy chỉnh...",
|
||||
"Custom Model ID": "ID mô hình tùy chỉnh",
|
||||
"Validate": "Xác thực",
|
||||
"Model available": "Mô hình khả dụng",
|
||||
"Connection": "Kết nối",
|
||||
"Test Connection": "Kiểm tra kết nối",
|
||||
"Connected": "Đã kết nối",
|
||||
"Custom Colors": "Màu tùy chỉnh",
|
||||
"Color E-Ink Mode": "Chế độ E-Ink màu",
|
||||
"Reading Ruler": "Thước đọc",
|
||||
"Enable Reading Ruler": "Bật thước đọc",
|
||||
"Lines to Highlight": "Số dòng cần làm nổi bật",
|
||||
"Ruler Color": "Màu thước",
|
||||
"Command Palette": "Bảng lệnh",
|
||||
"Search settings and actions...": "Tìm kiếm cài đặt và hành động...",
|
||||
"No results found for": "Không tìm thấy kết quả cho",
|
||||
"Type to search settings and actions": "Nhập để tìm kiếm cài đặt và hành động",
|
||||
"Recent": "Gần đây",
|
||||
"navigate": "điều hướng",
|
||||
"select": "chọn",
|
||||
"close": "đóng",
|
||||
"Search Settings": "Tìm kiếm cài đặt",
|
||||
"Page Margins": "Lề trang",
|
||||
"AI Provider": "Nhà cung cấp AI",
|
||||
"Ollama URL": "URL Ollama",
|
||||
"Ollama Model": "Mô hình Ollama",
|
||||
"AI Gateway Model": "Mô hình AI Gateway",
|
||||
"Actions": "Hành động",
|
||||
"Navigation": "Điều hướng",
|
||||
"Set status for {{count}} book(s)_other": "Đặt trạng thái cho {{count}} cuốn sách",
|
||||
"Mark as Unread": "Đánh dấu là chưa đọc",
|
||||
"Mark as Finished": "Đánh dấu là đã hoàn thành",
|
||||
"Finished": "Đã hoàn thành",
|
||||
"Unread": "Chưa đọc",
|
||||
"Clear Status": "Xóa trạng thái",
|
||||
"Status": "Trạng thái",
|
||||
"Loading": "Đang tải...",
|
||||
"Exit Paragraph Mode": "Thoát chế độ đoạn văn",
|
||||
"Paragraph Mode": "Chế độ đoạn văn",
|
||||
"Embedding Model": "Mô hình nhúng",
|
||||
"{{count}} book(s) synced_other": "Đã đồng bộ {{count}} cuốn sách",
|
||||
"Unable to start RSVP": "Không thể bắt đầu RSVP",
|
||||
"RSVP not supported for PDF": "RSVP không được hỗ trợ cho PDF",
|
||||
"Select Chapter": "Chọn chương",
|
||||
"Context": "Ngữ cảnh",
|
||||
"Ready": "Sẵn sàng",
|
||||
"Chapter Progress": "Tiến độ chương",
|
||||
"words": "từ",
|
||||
"{{time}} left": "còn lại {{time}}",
|
||||
"Reading progress": "Tiến độ đọc",
|
||||
"Click to seek": "Nhấp để tua",
|
||||
"Skip back 15 words": "Lùi lại 15 từ",
|
||||
"Back 15 words (Shift+Left)": "Lùi lại 15 từ (Shift+Trái)",
|
||||
"Pause (Space)": "Tạm dừng (Khoảng trắng)",
|
||||
"Play (Space)": "Phát (Khoảng trắng)",
|
||||
"Skip forward 15 words": "Tiến tới 15 từ",
|
||||
"Forward 15 words (Shift+Right)": "Tiến tới 15 từ (Shift+Phải)",
|
||||
"Decrease speed": "Giảm tốc độ",
|
||||
"Slower (Left/Down)": "Chậm hơn (Trái/Xuống)",
|
||||
"Increase speed": "Tăng tốc độ",
|
||||
"Faster (Right/Up)": "Nhanh hơn (Phải/Lên)",
|
||||
"Start RSVP Reading": "Bắt đầu đọc RSVP",
|
||||
"Choose where to start reading": "Chọn nơi để bắt đầu đọc",
|
||||
"From Chapter Start": "Từ đầu chương",
|
||||
"Start reading from the beginning of the chapter": "Bắt đầu đọc lại từ đầu chương này",
|
||||
"Resume": "Tiếp tục",
|
||||
"Continue from where you left off": "Tiếp tục từ nơi bạn đã dừng lại",
|
||||
"From Current Page": "Từ trang hiện tại",
|
||||
"Start from where you are currently reading": "Bắt đầu từ nơi bạn hiện đang đọc",
|
||||
"From Selection": "Từ phần đã chọn",
|
||||
"Speed Reading Mode": "Chế độ đọc nhanh",
|
||||
"Scroll left": "Cuộn sang trái",
|
||||
"Scroll right": "Cuộn sang phải",
|
||||
"Library Sync Progress": "Tiến trình đồng bộ hóa thư viện",
|
||||
"Back to library": "Quay lại thư viện",
|
||||
"Group by...": "Nhóm theo...",
|
||||
"Export as Plain Text": "Xuất dưới dạng văn bản thuần túy",
|
||||
"Export as Markdown": "Xuất dưới dạng Markdown",
|
||||
"Show Page Navigation Buttons": "Nút điều hướng trang",
|
||||
"Page {{number}}": "Trang {{number}}",
|
||||
"highlight": "làm nổi bật",
|
||||
"underline": "gạch chân",
|
||||
"squiggly": "ngoằn ngoèo",
|
||||
"red": "đỏ",
|
||||
"violet": "tím",
|
||||
"blue": "xanh lam",
|
||||
"green": "xanh lá",
|
||||
"yellow": "vàng",
|
||||
"Select {{style}} style": "Chọn kiểu {{style}}",
|
||||
"Select {{color}} color": "Chọn màu {{color}}",
|
||||
"Close Book": "Đóng sách",
|
||||
"Speed Reading": "Đọc nhanh",
|
||||
"Close Speed Reading": "Đóng đọc nhanh",
|
||||
"Authors": "Tác giả",
|
||||
"Books": "Sách",
|
||||
"Groups": "Nhóm",
|
||||
"Back to TTS Location": "Quay lại vị trí TTS",
|
||||
"Metadata": "Siêu dữ liệu",
|
||||
"Image viewer": "Trình xem ảnh",
|
||||
"Previous Image": "Ảnh trước",
|
||||
"Next Image": "Ảnh sau",
|
||||
"Zoomed": "Đã thu phóng",
|
||||
"Zoom level": "Mức thu phóng",
|
||||
"Table viewer": "Trình xem bảng",
|
||||
"Unable to connect to Readwise. Please check your network connection.": "Không thể kết nối với Readwise. Vui lòng kiểm tra kết nối mạng của bạn.",
|
||||
"Invalid Readwise access token": "Mã xác thực Readwise không hợp lệ",
|
||||
"Disconnected from Readwise": "Đã ngắt kết nối với Readwise",
|
||||
"Never": "Không bao giờ",
|
||||
"Readwise Settings": "Cài đặt Readwise",
|
||||
"Connected to Readwise": "Đã kết nối với Readwise",
|
||||
"Last synced: {{time}}": "Lần đồng bộ cuối: {{time}}",
|
||||
"Sync Enabled": "Đã bật đồng bộ",
|
||||
"Disconnect": "Ngắt kết nối",
|
||||
"Connect your Readwise account to sync highlights.": "Kết nối tài khoản Readwise của bạn để đồng bộ các phần đánh dấu.",
|
||||
"Get your access token at": "Lấy mã xác thực tại",
|
||||
"Access Token": "Mã xác thực",
|
||||
"Paste your Readwise access token": "Dán mã xác thực Readwise của bạn vào đây",
|
||||
"Config": "Cấu hình",
|
||||
"Readwise Sync": "Đồng bộ Readwise",
|
||||
"Push Highlights": "Đẩy các phần đánh dấu",
|
||||
"Highlights synced to Readwise": "Các phần đánh dấu đã được đồng bộ với Readwise",
|
||||
"Readwise sync failed: no internet connection": "Đồng bộ Readwise thất bại: không có kết nối internet",
|
||||
"Readwise sync failed: {{error}}": "Đồng bộ Readwise thất bại: {{error}}",
|
||||
"System Screen Brightness": "Độ sáng màn hình hệ thống",
|
||||
"Page:": "Trang:",
|
||||
"Page: {{number}}": "Trang: {{number}}",
|
||||
"Annotation page number": "Số trang chú thích",
|
||||
"Translating...": "Đang dịch...",
|
||||
"Show Battery Percentage": "Hiển thị phần trăm pin",
|
||||
"Hide Scrollbar": "Ẩn thanh cuộn",
|
||||
"Skip to last reading position": "Chuyển đến vị trí đọc cuối",
|
||||
"Show context": "Hiển thị ngữ cảnh",
|
||||
"Hide context": "Ẩn ngữ cảnh",
|
||||
"Decrease font size": "Giảm cỡ chữ",
|
||||
"Increase font size": "Tăng cỡ chữ",
|
||||
"Focus": "Tiêu điểm",
|
||||
"Theme color": "Màu chủ đề",
|
||||
"Import failed": "Nhập thất bại",
|
||||
"Available Formatters:": "Bộ định dạng có sẵn:",
|
||||
"Format date": "Định dạng ngày",
|
||||
"Markdown block quote (> per line)": "Trích dẫn khối Markdown (> mỗi dòng)",
|
||||
"Newlines to <br>": "Xuống dòng thành <br>",
|
||||
"Change case": "Đổi chữ hoa/thường",
|
||||
"Trim whitespace": "Cắt khoảng trắng",
|
||||
"Truncate to n characters": "Cắt ngắn còn n ký tự",
|
||||
"Replace text": "Thay thế văn bản",
|
||||
"Fallback value": "Giá trị dự phòng",
|
||||
"Get length": "Lấy độ dài",
|
||||
"First/last element": "Phần tử đầu/cuối",
|
||||
"Join array": "Nối mảng",
|
||||
"Backup failed: {{error}}": "Sao lưu thất bại: {{error}}",
|
||||
"Select Backup": "Chọn bản sao lưu",
|
||||
"Restore failed: {{error}}": "Khôi phục thất bại: {{error}}",
|
||||
"Backup & Restore": "Sao lưu & Khôi phục",
|
||||
"Create a backup of your library or restore from a previous backup. Restoring will merge with your current library.": "Tạo bản sao lưu thư viện hoặc khôi phục từ bản sao lưu trước đó. Khôi phục sẽ hợp nhất với thư viện hiện tại của bạn.",
|
||||
"Backup Library": "Sao lưu thư viện",
|
||||
"Restore Library": "Khôi phục thư viện",
|
||||
"Creating backup...": "Đang tạo bản sao lưu...",
|
||||
"Restoring library...": "Đang khôi phục thư viện...",
|
||||
"{{current}} of {{total}} items": "{{current}} / {{total}} mục",
|
||||
"Backup completed successfully!": "Sao lưu thành công!",
|
||||
"Restore completed successfully!": "Khôi phục thành công!",
|
||||
"Your library has been saved to the selected location.": "Thư viện của bạn đã được lưu tại vị trí đã chọn.",
|
||||
"{{added}} books added, {{updated}} books updated.": "Đã thêm {{added}} sách, cập nhật {{updated}} sách.",
|
||||
"Operation failed": "Thao tác thất bại",
|
||||
"Loading library...": "Đang tải thư viện...",
|
||||
"{{count}} books refreshed_other": "Đã làm mới {{count}} sách",
|
||||
"Failed to refresh metadata": "Không thể làm mới siêu dữ liệu",
|
||||
"Refresh Metadata": "Làm mới siêu dữ liệu"
|
||||
}
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
"Auto Mode": "自动主题",
|
||||
"Behavior": "行为",
|
||||
"Book": "书籍",
|
||||
"Book Cover": "书籍封面",
|
||||
"Bookmark": "书签",
|
||||
"Cancel": "取消",
|
||||
"Chapter": "章节",
|
||||
@@ -77,6 +76,7 @@
|
||||
"Sans-Serif Font": "无衬线字体",
|
||||
"Save": "保存",
|
||||
"Scrolled Mode": "滚动模式",
|
||||
"Hide Scrollbar": "隐藏滚动条",
|
||||
"Search": "搜索",
|
||||
"Search Books...": "搜索书籍...",
|
||||
"Search...": "搜索...",
|
||||
@@ -107,7 +107,6 @@
|
||||
"Wikipedia": "维基百科",
|
||||
"Writing Mode": "排版模式",
|
||||
"Your Library": "书库",
|
||||
"TTS not supported for PDF": "PDF 文档暂不支持 TTS",
|
||||
"Override Book Font": "覆盖书籍字体",
|
||||
"Apply to All Books": "应用于所有书籍",
|
||||
"Apply to This Book": "应用于此书籍",
|
||||
@@ -174,9 +173,6 @@
|
||||
"Token": "令牌",
|
||||
"Your OTP token": "您的 OTP 令牌",
|
||||
"Verify token": "验证令牌",
|
||||
"Sign in with Google": "使用 Google 登录",
|
||||
"Sign in with Apple": "使用 Apple 登录",
|
||||
"Sign in with GitHub": "使用 GitHub 登录",
|
||||
"Account": "账户",
|
||||
"Failed to delete user. Please try again later.": "删除用户失败。请稍后重试。",
|
||||
"Community Support": "社区支持",
|
||||
@@ -194,7 +190,7 @@
|
||||
"No supported files found. Supported formats: {{formats}}": "未找到支持的文件。支持的格式:{{formats}}",
|
||||
"Drop to Import Books": "拖放导入书籍",
|
||||
"Custom": "自定义",
|
||||
"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——威廉·莎士比亚",
|
||||
"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——威廉·莎士比亚",
|
||||
"Custom Theme": "自定义主题",
|
||||
"Theme Name": "主题名称",
|
||||
"Text Color": "文本颜色",
|
||||
@@ -336,10 +332,10 @@
|
||||
"Fit": "适应",
|
||||
"Reset {{settings}}": "重置{{settings}}",
|
||||
"Reset Settings": "重置设置",
|
||||
"{{count}} pages left in chapter_other": "本章剩余 {{count}} 页",
|
||||
"{{count}} pages left in chapter_other": "<1>本章剩余 </1><0>{{count}}</0><1> 页</1>",
|
||||
"Show Remaining Pages": "显示剩余页数",
|
||||
"Source Han Serif CN VF": "思源宋体",
|
||||
"Huiwen-mincho": "汇文明朝体",
|
||||
"Source Han Serif CN": "思源宋体",
|
||||
"Huiwen-MinchoGBK": "汇文明朝体",
|
||||
"KingHwa_OldSong": "京华老宋体",
|
||||
"Manage Subscription": "管理订阅",
|
||||
"Coming Soon": "即将上线",
|
||||
@@ -599,11 +595,10 @@
|
||||
"Size": "大小",
|
||||
"Cover": "覆盖",
|
||||
"Contain": "适应",
|
||||
"{{number}} pages left in chapter": "本章剩余{{number}}页",
|
||||
"{{number}} pages left in chapter": "<1>本章剩余</1><0>{{number}}</0><1>页</1>",
|
||||
"Device": "设备",
|
||||
"E-Ink Mode": "E-Ink 模式",
|
||||
"Highlight Colors": "高亮颜色",
|
||||
"Auto Screen Brightness": "自动屏幕亮度",
|
||||
"Pagination": "翻页",
|
||||
"Disable Double Tap": "禁用双击",
|
||||
"Tap to Paginate": "点击翻页",
|
||||
@@ -652,5 +647,447 @@
|
||||
"Update email": "更新邮箱",
|
||||
"Current email": "当前邮箱",
|
||||
"Update Email": "更新邮箱",
|
||||
"All": "全部"
|
||||
"All": "全部",
|
||||
"Unable to open book": "无法打开书籍",
|
||||
"Punctuation": "标点符号",
|
||||
"Replace Quotation Marks": "替换引号",
|
||||
"Enabled only in vertical layout.": "仅在竖排布局中启用",
|
||||
"No Conversion": "不转换",
|
||||
"Simplified to Traditional": "简体 → 繁体",
|
||||
"Traditional to Simplified": "繁体 → 简体",
|
||||
"Simplified to Traditional (Taiwan)": "简体 → 繁体(台湾)",
|
||||
"Simplified to Traditional (Hong Kong)": "简体 → 繁体(香港)",
|
||||
"Simplified to Traditional (Taiwan), with phrases": "简体 → 繁体(台湾)习惯用语",
|
||||
"Traditional (Taiwan) to Simplified": "繁体(台湾) → 简体",
|
||||
"Traditional (Hong Kong) to Simplified": "繁体(香港) → 简体",
|
||||
"Traditional (Taiwan) to Simplified, with phrases": "繁体(台湾) → 简体习惯用语",
|
||||
"Convert Simplified and Traditional Chinese": "简繁中文转换",
|
||||
"Convert Mode": "转换模式",
|
||||
"Failed to auto-save book cover for lock screen: {{error}}": "自动保存锁屏书籍封面失败:{{error}}",
|
||||
"Download from Cloud": "从云端下载",
|
||||
"Upload to Cloud": "上传到云端",
|
||||
"Clear Custom Fonts": "清除自定义字体",
|
||||
"Columns": "列数",
|
||||
"OPDS Catalogs": "OPDS 目录",
|
||||
"Adding LAN addresses is not supported in the web app version.": "Web 版不支持添加局域网地址。",
|
||||
"Invalid OPDS catalog. Please check the URL.": "无效的 OPDS 目录。请检查 URL。",
|
||||
"Browse and download books from online catalogs": "浏览并下载在线目录中的书籍",
|
||||
"My Catalogs": "我的目录",
|
||||
"Add Catalog": "添加目录",
|
||||
"No catalogs yet": "尚无目录",
|
||||
"Add your first OPDS catalog to start browsing books": "添加您的第一个 OPDS 目录以开始浏览书籍",
|
||||
"Add Your First Catalog": "添加第一个目录",
|
||||
"Browse": "浏览",
|
||||
"Popular Catalogs": "热门目录",
|
||||
"Add": "添加",
|
||||
"Add OPDS Catalog": "添加 OPDS 目录",
|
||||
"Catalog Name": "目录名称",
|
||||
"My Calibre Library": "我的 Calibre 图书馆",
|
||||
"OPDS URL": "OPDS URL",
|
||||
"Username (optional)": "用户名(可选)",
|
||||
"Password (optional)": "密码(可选)",
|
||||
"Description (optional)": "描述(可选)",
|
||||
"A brief description of this catalog": "该目录的简要描述",
|
||||
"Validating...": "验证中...",
|
||||
"View All": "查看全部",
|
||||
"Forward": "前进",
|
||||
"Home": "首页",
|
||||
"{{count}} items_other": "{{count}} 项",
|
||||
"Download completed": "下载完成",
|
||||
"Download failed": "下载失败",
|
||||
"Open Access": "开放访问",
|
||||
"Borrow": "借阅",
|
||||
"Buy": "购买",
|
||||
"Subscribe": "订阅",
|
||||
"Sample": "样章",
|
||||
"Download": "下载",
|
||||
"Open & Read": "打开并阅读",
|
||||
"Tags": "标签",
|
||||
"Tag": "标签",
|
||||
"First": "首页",
|
||||
"Previous": "上一页",
|
||||
"Next": "下一页",
|
||||
"Last": "末页",
|
||||
"Cannot Load Page": "无法加载页面",
|
||||
"An error occurred": "发生错误",
|
||||
"Online Library": "在线书库",
|
||||
"URL must start with http:// or https://": "URL 必须以 http:// 或 https:// 开头",
|
||||
"Title, Author, Tag, etc...": "标题,作者,标签等...",
|
||||
"Query": "查询",
|
||||
"Subject": "主题",
|
||||
"Enter {{terms}}": "输入 {{terms}}",
|
||||
"No search results found": "未找到搜索结果",
|
||||
"Failed to load OPDS feed: {{status}} {{statusText}}": "加载 OPDS 源失败:{{status}} {{statusText}}",
|
||||
"Search in {{title}}": "在 {{title}} 中搜索",
|
||||
"Manage Storage": "管理存储",
|
||||
"Failed to load files": "加载文件失败",
|
||||
"Deleted {{count}} file(s)_other": "已删除 {{count}} 个文件",
|
||||
"Failed to delete {{count}} file(s)_other": "删除 {{count}} 个文件失败",
|
||||
"Failed to delete files": "删除文件失败",
|
||||
"Total Files": "文件总数",
|
||||
"Total Size": "总大小",
|
||||
"Quota": "配额",
|
||||
"Used": "已使用",
|
||||
"Files": "文件",
|
||||
"Search files...": "搜索文件...",
|
||||
"Newest First": "最新优先",
|
||||
"Oldest First": "最旧优先",
|
||||
"Largest First": "最大优先",
|
||||
"Smallest First": "最小优先",
|
||||
"Name A-Z": "名称 A-Z",
|
||||
"Name Z-A": "名称 Z-A",
|
||||
"{{count}} selected_other": "已选择 {{count}} 个文件",
|
||||
"Delete Selected": "删除选中项",
|
||||
"Created": "创建时间",
|
||||
"No files found": "未找到文件",
|
||||
"No files uploaded yet": "尚未上传文件",
|
||||
"files": "文件",
|
||||
"Page {{current}} of {{total}}": "第 {{current}} 页,共 {{total}} 页",
|
||||
"Are you sure to delete {{count}} selected file(s)?_other": "确定要删除已选择的 {{count}} 个文件吗?",
|
||||
"Cloud Storage Usage": "云存储使用情况",
|
||||
"Rename Group": "重命名分组",
|
||||
"From Directory": "从文件夹导入",
|
||||
"Successfully imported {{count}} book(s)_other": "成功导入 {{count}} 本书",
|
||||
"Count": "数量",
|
||||
"Start Page": "起始页",
|
||||
"Search in OPDS Catalog...": "在 OPDS 目录中搜索...",
|
||||
"Please log in to use advanced TTS features": "请登录以使用高级 TTS 功能",
|
||||
"Word limit of 30 words exceeded.": "已超过 30 个词的限制。",
|
||||
"Proofread": "校对",
|
||||
"Current selection": "当前选中内容",
|
||||
"All occurrences in this book": "本书中的所有出现位置",
|
||||
"All occurrences in your library": "整个书库中的所有出现位置",
|
||||
"Selected text:": "选中文本:",
|
||||
"Replace with:": "替换为:",
|
||||
"Enter text...": "请输入文本…",
|
||||
"Case sensitive:": "区分大小写:",
|
||||
"Scope:": "作用范围:",
|
||||
"Selection": "选中内容",
|
||||
"Library": "书库",
|
||||
"Yes": "是",
|
||||
"No": "否",
|
||||
"Proofread Replacement Rules": "校对替换规则",
|
||||
"Selected Text Rules": "选中文本规则",
|
||||
"No selected text replacement rules": "暂无选中文本的替换规则",
|
||||
"Book Specific Rules": "书籍范围规则",
|
||||
"No book-level replacement rules": "暂无书籍级别的替换规则",
|
||||
"Disable Quick Action": "禁用快速操作",
|
||||
"Enable Quick Action on Selection": "在选择时启用快速操作",
|
||||
"None": "无",
|
||||
"Annotation Tools": "注释工具",
|
||||
"Enable Quick Actions": "启用快捷操作",
|
||||
"Quick Action": "快捷操作",
|
||||
"Copy to Notebook": "复制到笔记本",
|
||||
"Copy text after selection": "复制选中文本",
|
||||
"Highlight text after selection": "划线选中文本",
|
||||
"Annotate text after selection": "注释选中文本",
|
||||
"Search text after selection": "搜索选中文本",
|
||||
"Look up text in dictionary after selection": "在字典中查找选中文本",
|
||||
"Look up text in Wikipedia after selection": "在维基百科中查找选中文本",
|
||||
"Translate text after selection": "翻译选中文本",
|
||||
"Read text aloud after selection": "朗读选中文本",
|
||||
"Proofread text after selection": "校对选中文本",
|
||||
"{{activeCount}} active, {{pendingCount}} pending": "{{activeCount}} 进行中,{{pendingCount}} 等待中",
|
||||
"{{failedCount}} failed": "{{failedCount}} 失败",
|
||||
"Waiting...": "等待中...",
|
||||
"Failed": "失败",
|
||||
"Completed": "已完成",
|
||||
"Cancelled": "已取消",
|
||||
"Retry": "重试",
|
||||
"Active": "进行中",
|
||||
"Transfer Queue": "传输队列",
|
||||
"Upload All": "全部上传",
|
||||
"Download All": "全部下载",
|
||||
"Resume Transfers": "继续传输",
|
||||
"Pause Transfers": "暂停传输",
|
||||
"Pending": "等待中",
|
||||
"No transfers": "没有传输",
|
||||
"Retry All": "全部重试",
|
||||
"Clear Completed": "清除已完成",
|
||||
"Clear Failed": "清除失败",
|
||||
"Upload queued: {{title}}": "上传已排队:{{title}}",
|
||||
"Download queued: {{title}}": "下载已排队:{{title}}",
|
||||
"Book not found in library": "在书库中找不到书籍",
|
||||
"Unknown error": "未知错误",
|
||||
"Please log in to continue": "请登录以继续",
|
||||
"Cloud File Transfers": "云文件传输",
|
||||
"Show Search Results": "显示搜索结果",
|
||||
"Search results for '{{term}}'": "包含\"{{term}}\"的结果",
|
||||
"Close Search": "关闭搜索",
|
||||
"Previous Result": "上一个结果",
|
||||
"Next Result": "下一个结果",
|
||||
"Bookmarks": "书签",
|
||||
"Annotations": "注释",
|
||||
"Show Results": "显示结果",
|
||||
"Clear search": "清除搜索",
|
||||
"Clear search history": "清除搜索历史",
|
||||
"Tap to Toggle Footer": "点击切换页脚",
|
||||
"Show Current Time": "显示当前时间",
|
||||
"Use 24 Hour Clock": "使用 24 小时制",
|
||||
"Show Current Battery Status": "显示当前电量",
|
||||
"Exported successfully": "导出成功",
|
||||
"Book exported successfully.": "书籍导出成功。",
|
||||
"Failed to export the book.": "书籍导出失败。",
|
||||
"Export Book": "导出书籍",
|
||||
"Whole word:": "全词匹配:",
|
||||
"Only for TTS:": "仅用于TTS:",
|
||||
"Error": "错误",
|
||||
"Unable to load the article. Try searching directly on {{link}}.": "无法加载文章。请直接在 {{link}} 上搜索。",
|
||||
"Unable to load the word. Try searching directly on {{link}}.": "无法加载词汇。请直接在 {{link}} 上搜索。",
|
||||
"Date Published": "出版日期",
|
||||
"Uploaded": "已上传",
|
||||
"Downloaded": "已下载",
|
||||
"Deleted": "已删除",
|
||||
"Note:": "笔记:",
|
||||
"Time:": "时间:",
|
||||
"Format Options": "格式选项",
|
||||
"Export Date": "导出日期",
|
||||
"Chapter Titles": "章节标题",
|
||||
"Chapter Separator": "章节分隔符",
|
||||
"Highlights": "高亮",
|
||||
"Note Date": "笔记日期",
|
||||
"Advanced": "高级",
|
||||
"Hide": "隐藏",
|
||||
"Show": "显示",
|
||||
"Use Custom Template": "使用自定义模板",
|
||||
"Export Template": "导出模板",
|
||||
"Template Syntax:": "模板语法:",
|
||||
"Insert value": "插入值",
|
||||
"Format date (locale)": "格式化日期(区域)",
|
||||
"Format date (custom)": "格式化日期(自定义)",
|
||||
"Conditional": "条件",
|
||||
"Loop": "循环",
|
||||
"Available Variables:": "可用变量:",
|
||||
"Book title": "书名",
|
||||
"Book author": "作者",
|
||||
"Export date": "导出日期",
|
||||
"Array of chapters": "章节数组",
|
||||
"Chapter title": "章节标题",
|
||||
"Array of annotations": "标注数组",
|
||||
"Highlighted text": "高亮文本",
|
||||
"Annotation note": "标注笔记",
|
||||
"Date Format Tokens:": "日期格式标记:",
|
||||
"Year (4 digits)": "年(4位)",
|
||||
"Month (01-12)": "月(01-12)",
|
||||
"Day (01-31)": "日(01-31)",
|
||||
"Hour (00-23)": "时(00-23)",
|
||||
"Minute (00-59)": "分(00-59)",
|
||||
"Second (00-59)": "秒(00-59)",
|
||||
"Show Source": "显示源码",
|
||||
"No content to preview": "无内容可预览",
|
||||
"Export": "导出",
|
||||
"Set Timeout": "设置超时",
|
||||
"Select Voice": "选择语音",
|
||||
"Toggle Sticky Bottom TTS Bar": "切换固定TTS栏",
|
||||
"Display what I'm reading on Discord": "在Discord显示阅读状态",
|
||||
"Show on Discord": "在Discord显示",
|
||||
"Instant {{action}}": "即时{{action}}",
|
||||
"Instant {{action}} Disabled": "即时{{action}}已禁用",
|
||||
"Annotation": "标注",
|
||||
"Reset Template": "重置模板",
|
||||
"Annotation style": "标注样式",
|
||||
"Annotation color": "标注颜色",
|
||||
"Annotation time": "标注时间",
|
||||
"AI": "AI",
|
||||
"Are you sure you want to re-index this book?": "确定要重新索引这本书吗?",
|
||||
"Enable AI in Settings": "在设置中启用 AI",
|
||||
"Index This Book": "索引这本书",
|
||||
"Enable AI search and chat for this book": "为这本书启用 AI 搜索和聊天",
|
||||
"Start Indexing": "开始索引",
|
||||
"Indexing book...": "正在索引书籍...",
|
||||
"Preparing...": "准备中...",
|
||||
"Delete this conversation?": "删除此对话?",
|
||||
"No conversations yet": "暂无对话",
|
||||
"Start a new chat to ask questions about this book": "开始新对话来询问关于这本书的问题",
|
||||
"Rename": "重命名",
|
||||
"New Chat": "新对话",
|
||||
"Chat": "聊天",
|
||||
"Please enter a model ID": "请输入模型 ID",
|
||||
"Model not available or invalid": "模型不可用或无效",
|
||||
"Failed to validate model": "模型验证失败",
|
||||
"Couldn't connect to Ollama. Is it running?": "无法连接到 Ollama。它是否正在运行?",
|
||||
"Invalid API key or connection failed": "API 密钥无效或连接失败",
|
||||
"Connection failed": "连接失败",
|
||||
"AI Assistant": "AI 助手",
|
||||
"Enable AI Assistant": "启用 AI 助手",
|
||||
"Provider": "提供商",
|
||||
"Ollama (Local)": "Ollama(本地)",
|
||||
"AI Gateway (Cloud)": "AI 网关(云端)",
|
||||
"Ollama Configuration": "Ollama 配置",
|
||||
"Refresh Models": "刷新模型",
|
||||
"AI Model": "AI 模型",
|
||||
"No models detected": "未检测到模型",
|
||||
"AI Gateway Configuration": "AI 网关配置",
|
||||
"Choose from a selection of high-quality, economical AI models. You can also bring your own model by selecting \"Custom Model\" below.": "从一系列高质量、经济实惠的 AI 模型中选择。您也可以通过下方的\"自定义模型\"使用自己的模型。",
|
||||
"API Key": "API 密钥",
|
||||
"Get Key": "获取密钥",
|
||||
"Model": "模型",
|
||||
"Custom Model...": "自定义模型...",
|
||||
"Custom Model ID": "自定义模型 ID",
|
||||
"Validate": "验证",
|
||||
"Model available": "模型可用",
|
||||
"Connection": "连接",
|
||||
"Test Connection": "测试连接",
|
||||
"Connected": "已连接",
|
||||
"Custom Colors": "自定义颜色",
|
||||
"Color E-Ink Mode": "彩色墨水屏模式",
|
||||
"Reading Ruler": "阅读尺",
|
||||
"Enable Reading Ruler": "启用阅读尺",
|
||||
"Lines to Highlight": "突出显示行数",
|
||||
"Ruler Color": "尺子颜色",
|
||||
"Command Palette": "命令面板",
|
||||
"Search settings and actions...": "搜索设置和操作...",
|
||||
"No results found for": "未找到结果:",
|
||||
"Type to search settings and actions": "输入以搜索设置和操作",
|
||||
"Recent": "最近",
|
||||
"navigate": "导航",
|
||||
"select": "选择",
|
||||
"close": "关闭",
|
||||
"Search Settings": "搜索设置",
|
||||
"Page Margins": "页边距",
|
||||
"AI Provider": "AI 服务商",
|
||||
"Ollama URL": "Ollama URL",
|
||||
"Ollama Model": "Ollama 模型",
|
||||
"AI Gateway Model": "AI Gateway 模型",
|
||||
"Actions": "操作",
|
||||
"Navigation": "导航",
|
||||
"Set status for {{count}} book(s)_other": "设置 {{count}} 本书的状态",
|
||||
"Mark as Unread": "标记为未读",
|
||||
"Mark as Finished": "标记为已读",
|
||||
"Finished": "已读",
|
||||
"Unread": "未读",
|
||||
"Clear Status": "清除状态",
|
||||
"Status": "状态",
|
||||
"Loading": "正在加载",
|
||||
"Exit Paragraph Mode": "退出段落模式",
|
||||
"Paragraph Mode": "段落模式",
|
||||
"Embedding Model": "嵌入模型",
|
||||
"{{count}} book(s) synced_other": "{{count}} 本书已同步",
|
||||
"Unable to start RSVP": "无法启动 RSVP",
|
||||
"RSVP not supported for PDF": "PDF 不支持 RSVP",
|
||||
"Select Chapter": "选择章节",
|
||||
"Context": "上下文",
|
||||
"Ready": "准备就绪",
|
||||
"Chapter Progress": "章节进度",
|
||||
"words": "词",
|
||||
"{{time}} left": "剩余 {{time}}",
|
||||
"Reading progress": "阅读进度",
|
||||
"Click to seek": "点击跳转",
|
||||
"Skip back 15 words": "回退 15 词",
|
||||
"Back 15 words (Shift+Left)": "回退 15 词 (Shift+Left)",
|
||||
"Pause (Space)": "暂停 (空格)",
|
||||
"Play (Space)": "播放 (空格)",
|
||||
"Skip forward 15 words": "前进 15 词",
|
||||
"Forward 15 words (Shift+Right)": "前进 15 词 (Shift+Right)",
|
||||
"Decrease speed": "减速",
|
||||
"Slower (Left/Down)": "较慢 (左/下)",
|
||||
"Increase speed": "加速",
|
||||
"Faster (Right/Up)": "较快 (右/上)",
|
||||
"Start RSVP Reading": "开始 RSVP 阅读",
|
||||
"Choose where to start reading": "选择阅读起始位置",
|
||||
"From Chapter Start": "从章节开始",
|
||||
"Start reading from the beginning of the chapter": "重新从本章节开始阅读",
|
||||
"Resume": "继续",
|
||||
"Continue from where you left off": "从上次离开的地方继续",
|
||||
"From Current Page": "从当前页",
|
||||
"Start from where you are currently reading": "从当前正在阅读的位置开始",
|
||||
"From Selection": "从选中内容",
|
||||
"Speed Reading Mode": "快读模式",
|
||||
"Scroll left": "向左滚动",
|
||||
"Scroll right": "向右滚动",
|
||||
"Library Sync Progress": "库同步进度",
|
||||
"Back to library": "返回书库",
|
||||
"Group by...": "分组方式...",
|
||||
"Export as Plain Text": "导出为纯文本",
|
||||
"Export as Markdown": "导出为 Markdown",
|
||||
"Show Page Navigation Buttons": "显示翻页按钮",
|
||||
"Page {{number}}": "第 {{number}} 页",
|
||||
"highlight": "高亮",
|
||||
"underline": "下划线",
|
||||
"squiggly": "波浪线",
|
||||
"red": "红色",
|
||||
"violet": "紫色",
|
||||
"blue": "蓝色",
|
||||
"green": "绿色",
|
||||
"yellow": "黄色",
|
||||
"Select {{style}} style": "选择 {{style}} 样式",
|
||||
"Select {{color}} color": "选择 {{color}} 颜色",
|
||||
"Close Book": "关闭书籍",
|
||||
"Speed Reading": "快速阅读",
|
||||
"Close Speed Reading": "关闭快速阅读",
|
||||
"Authors": "作者",
|
||||
"Books": "书籍",
|
||||
"Groups": "分组",
|
||||
"Back to TTS Location": "回到朗读位置",
|
||||
"Metadata": "元数据",
|
||||
"Image viewer": "图片查看器",
|
||||
"Previous Image": "上一张图片",
|
||||
"Next Image": "下一张图片",
|
||||
"Zoomed": "已缩放",
|
||||
"Zoom level": "缩放级别",
|
||||
"Table viewer": "表格查看器",
|
||||
"Unable to connect to Readwise. Please check your network connection.": "无法连接到 Readwise。请检查您的网络连接。",
|
||||
"Invalid Readwise access token": "无效的 Readwise 访问令牌",
|
||||
"Disconnected from Readwise": "已断开与 Readwise 的连接",
|
||||
"Never": "从不",
|
||||
"Readwise Settings": "Readwise 设置",
|
||||
"Connected to Readwise": "已连接到 Readwise",
|
||||
"Last synced: {{time}}": "上次同步时间:{{time}}",
|
||||
"Sync Enabled": "同步已启用",
|
||||
"Disconnect": "断开连接",
|
||||
"Connect your Readwise account to sync highlights.": "连接您的 Readwise 账户以同步高亮内容。",
|
||||
"Get your access token at": "获取您的访问令牌:",
|
||||
"Access Token": "访问令牌",
|
||||
"Paste your Readwise access token": "粘贴您的 Readwise 访问令牌",
|
||||
"Config": "配置",
|
||||
"Readwise Sync": "Readwise 同步",
|
||||
"Push Highlights": "推送高亮内容",
|
||||
"Highlights synced to Readwise": "高亮内容已同步到 Readwise",
|
||||
"Readwise sync failed: no internet connection": "Readwise 同步失败:无网络连接",
|
||||
"Readwise sync failed: {{error}}": "Readwise 同步失败:{{error}}",
|
||||
"System Screen Brightness": "系统屏幕亮度",
|
||||
"Page:": "页面:",
|
||||
"Page: {{number}}": "页面: {{number}}",
|
||||
"Annotation page number": "批注页码",
|
||||
"Translating...": "翻译中...",
|
||||
"Show Battery Percentage": "显示电量百分比",
|
||||
"Skip to last reading position": "跳转到上次阅读位置",
|
||||
"Show context": "显示上下文",
|
||||
"Hide context": "隐藏上下文",
|
||||
"Decrease font size": "缩小字号",
|
||||
"Increase font size": "放大字号",
|
||||
"Focus": "焦点",
|
||||
"Theme color": "主题颜色",
|
||||
"Import failed": "导入失败",
|
||||
"Available Formatters:": "可用格式化器:",
|
||||
"Format date": "格式化日期",
|
||||
"Markdown block quote (> per line)": "Markdown 引用块(每行 >)",
|
||||
"Newlines to <br>": "换行转为 <br>",
|
||||
"Change case": "更改大小写",
|
||||
"Trim whitespace": "去除空格",
|
||||
"Truncate to n characters": "截断为 n 个字符",
|
||||
"Replace text": "替换文本",
|
||||
"Fallback value": "默认值",
|
||||
"Get length": "获取长度",
|
||||
"First/last element": "第一个/最后一个元素",
|
||||
"Join array": "合并数组",
|
||||
"Backup failed: {{error}}": "备份失败:{{error}}",
|
||||
"Select Backup": "选择备份",
|
||||
"Restore failed: {{error}}": "恢复失败:{{error}}",
|
||||
"Backup & Restore": "备份与恢复",
|
||||
"Create a backup of your library or restore from a previous backup. Restoring will merge with your current library.": "创建书库备份或从之前的备份恢复。恢复将与当前书库合并。",
|
||||
"Backup Library": "备份书库",
|
||||
"Restore Library": "恢复书库",
|
||||
"Creating backup...": "正在创建备份...",
|
||||
"Restoring library...": "正在恢复书库...",
|
||||
"{{current}} of {{total}} items": "{{current}} / {{total}} 项",
|
||||
"Backup completed successfully!": "备份成功!",
|
||||
"Restore completed successfully!": "恢复成功!",
|
||||
"Your library has been saved to the selected location.": "您的书库已保存到所选位置。",
|
||||
"{{added}} books added, {{updated}} books updated.": "新增 {{added}} 本书,更新 {{updated}} 本书。",
|
||||
"Operation failed": "操作失败",
|
||||
"Loading library...": "正在加载书库...",
|
||||
"{{count}} books refreshed_other": "已刷新 {{count}} 本书",
|
||||
"Failed to refresh metadata": "刷新元数据失败",
|
||||
"Refresh Metadata": "刷新元数据"
|
||||
}
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
"Auto Mode": "自動主題",
|
||||
"Behavior": "行為",
|
||||
"Book": "書籍",
|
||||
"Book Cover": "書籍封面",
|
||||
"Bookmark": "書籤",
|
||||
"Cancel": "取消",
|
||||
"Chapter": "章節",
|
||||
@@ -107,7 +106,6 @@
|
||||
"Wikipedia": "維基百科",
|
||||
"Writing Mode": "排版模式",
|
||||
"Your Library": "書庫",
|
||||
"TTS not supported for PDF": "PDF 文檔暫不支持 TTS",
|
||||
"Override Book Font": "覆蓋書籍字體",
|
||||
"Apply to All Books": "應用於所有書籍",
|
||||
"Apply to This Book": "應用於此書籍",
|
||||
@@ -174,9 +172,6 @@
|
||||
"Token": "令牌",
|
||||
"Your OTP token": "您的 OTP 令牌",
|
||||
"Verify token": "驗證令牌",
|
||||
"Sign in with Google": "使用 Google 登入",
|
||||
"Sign in with Apple": "使用 Apple 登入",
|
||||
"Sign in with GitHub": "使用 GitHub 登入",
|
||||
"Account": "帳戶",
|
||||
"Failed to delete user. Please try again later.": "刪除使用者失敗。請稍後再試。",
|
||||
"Community Support": "社群支援",
|
||||
@@ -194,7 +189,7 @@
|
||||
"No supported files found. Supported formats: {{formats}}": "未找到支援的檔案。支援的格式:{{formats}}",
|
||||
"Drop to Import Books": "拖放導入書籍",
|
||||
"Custom": "自定義",
|
||||
"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——威廉·莎士比亞",
|
||||
"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——威廉·莎士比亞",
|
||||
"Custom Theme": "自定義主題",
|
||||
"Theme Name": "主題名稱",
|
||||
"Text Color": "文字顏色",
|
||||
@@ -336,10 +331,10 @@
|
||||
"Fit": "適應",
|
||||
"Reset {{settings}}": "重置{{settings}}",
|
||||
"Reset Settings": "重置設置",
|
||||
"{{count}} pages left in chapter_other": "本章剩餘 {{count}} 頁",
|
||||
"{{count}} pages left in chapter_other": "<1>本章剩餘 </1><0>{{count}}</0><1> 頁</1>",
|
||||
"Show Remaining Pages": "顯示剩餘頁數",
|
||||
"Source Han Serif CN VF": "思源宋體",
|
||||
"Huiwen-mincho": "匯文明朝體",
|
||||
"Source Han Serif CN": "思源宋體",
|
||||
"Huiwen-MinchoGBK": "匯文明朝體",
|
||||
"KingHwa_OldSong": "京華老宋體",
|
||||
"Manage Subscription": "管理訂閱",
|
||||
"Coming Soon": "即將推出",
|
||||
@@ -599,11 +594,10 @@
|
||||
"Size": "大小",
|
||||
"Cover": "覆蓋",
|
||||
"Contain": "適應",
|
||||
"{{number}} pages left in chapter": "本章剩餘{{number}}頁",
|
||||
"{{number}} pages left in chapter": "<1>本章剩餘</1><0>{{number}}</0><1>頁</1>",
|
||||
"Device": "設備",
|
||||
"E-Ink Mode": "E-Ink 模式",
|
||||
"Highlight Colors": "高亮顏色",
|
||||
"Auto Screen Brightness": "自動螢幕亮度",
|
||||
"Pagination": "翻頁",
|
||||
"Disable Double Tap": "禁用雙擊",
|
||||
"Tap to Paginate": "點擊翻頁",
|
||||
@@ -652,5 +646,448 @@
|
||||
"Update email": "更新電子郵件",
|
||||
"Current email": "當前電子郵件",
|
||||
"Update Email": "更新電子郵件",
|
||||
"All": "全部"
|
||||
"All": "全部",
|
||||
"Unable to open book": "無法打開書籍",
|
||||
"Punctuation": "標點符號",
|
||||
"Replace Quotation Marks": "替換引號",
|
||||
"Enabled only in vertical layout.": "僅在直排佈局中啟用",
|
||||
"No Conversion": "不轉換",
|
||||
"Simplified to Traditional": "簡體 → 繁體",
|
||||
"Traditional to Simplified": "繁體 → 簡體",
|
||||
"Simplified to Traditional (Taiwan)": "簡體 → 繁體(台灣)",
|
||||
"Simplified to Traditional (Hong Kong)": "簡體 → 繁體(香港)",
|
||||
"Simplified to Traditional (Taiwan), with phrases": "簡體 → 繁體(台灣)慣用語",
|
||||
"Traditional (Taiwan) to Simplified": "繁體(台灣) → 簡體",
|
||||
"Traditional (Hong Kong) to Simplified": "繁體(香港) → 簡體",
|
||||
"Traditional (Taiwan) to Simplified, with phrases": "繁體(台灣) → 簡體慣用語",
|
||||
"Convert Simplified and Traditional Chinese": "簡繁中文轉換",
|
||||
"Convert Mode": "轉換模式",
|
||||
"Failed to auto-save book cover for lock screen: {{error}}": "自動保存鎖定螢幕書籍封面失敗:{{error}}",
|
||||
"Download from Cloud": "從雲端下載",
|
||||
"Upload to Cloud": "上傳到雲端",
|
||||
"Clear Custom Fonts": "清除自訂字型",
|
||||
"Columns": "欄數",
|
||||
"OPDS Catalogs": "OPDS 目錄",
|
||||
"Adding LAN addresses is not supported in the web app version.": "網頁版不支援新增區域網路位址。",
|
||||
"Invalid OPDS catalog. Please check the URL.": "無效的 OPDS 目錄。請檢查 URL。",
|
||||
"Browse and download books from online catalogs": "瀏覽並下載線上目錄的書籍",
|
||||
"My Catalogs": "我的目錄",
|
||||
"Add Catalog": "新增目錄",
|
||||
"No catalogs yet": "尚無目錄",
|
||||
"Add your first OPDS catalog to start browsing books": "新增第一個 OPDS 目錄以開始瀏覽書籍",
|
||||
"Add Your First Catalog": "新增第一個目錄",
|
||||
"Browse": "瀏覽",
|
||||
"Popular Catalogs": "熱門目錄",
|
||||
"Add": "新增",
|
||||
"Add OPDS Catalog": "新增 OPDS 目錄",
|
||||
"Catalog Name": "目錄名稱",
|
||||
"My Calibre Library": "我的 Calibre 圖書館",
|
||||
"OPDS URL": "OPDS URL",
|
||||
"Username (optional)": "使用者名稱(可選)",
|
||||
"Password (optional)": "密碼(可選)",
|
||||
"Description (optional)": "描述(可選)",
|
||||
"A brief description of this catalog": "此目錄的簡短描述",
|
||||
"Validating...": "驗證中...",
|
||||
"View All": "檢視全部",
|
||||
"Forward": "前往",
|
||||
"Home": "首頁",
|
||||
"{{count}} items_other": "{{count}} 項",
|
||||
"Download completed": "下載完成",
|
||||
"Download failed": "下載失敗",
|
||||
"Open Access": "開放存取",
|
||||
"Borrow": "借閱",
|
||||
"Buy": "購買",
|
||||
"Subscribe": "訂閱",
|
||||
"Sample": "試閱",
|
||||
"Download": "下載",
|
||||
"Open & Read": "開啟並閱讀",
|
||||
"Tags": "標籤",
|
||||
"Tag": "標籤",
|
||||
"First": "第一頁",
|
||||
"Previous": "上一頁",
|
||||
"Next": "下一頁",
|
||||
"Last": "最後一頁",
|
||||
"Cannot Load Page": "無法載入頁面",
|
||||
"An error occurred": "發生錯誤",
|
||||
"Online Library": "線上書庫",
|
||||
"URL must start with http:// or https://": "URL 必須以 http:// 或 https:// 開頭",
|
||||
"Title, Author, Tag, etc...": "標題、作者、標籤等...",
|
||||
"Query": "查詢",
|
||||
"Subject": "主題",
|
||||
"Enter {{terms}}": "輸入 {{terms}}",
|
||||
"No search results found": "未找到搜尋結果",
|
||||
"Failed to load OPDS feed: {{status}} {{statusText}}": "載入 OPDS 資料源失敗:{{status}} {{statusText}}",
|
||||
"Search in {{title}}": "在 {{title}} 中搜尋",
|
||||
"Manage Storage": "管理儲存",
|
||||
"Failed to load files": "載入檔案失敗",
|
||||
"Deleted {{count}} file(s)_other": "已刪除 {{count}} 個檔案",
|
||||
"Failed to delete {{count}} file(s)_other": "刪除 {{count}} 個檔案失敗",
|
||||
"Failed to delete files": "刪除檔案失敗",
|
||||
"Total Files": "檔案總數",
|
||||
"Total Size": "總大小",
|
||||
"Quota": "配額",
|
||||
"Used": "已使用",
|
||||
"Files": "檔案",
|
||||
"Search files...": "搜尋檔案...",
|
||||
"Newest First": "最新優先",
|
||||
"Oldest First": "最舊優先",
|
||||
"Largest First": "最大優先",
|
||||
"Smallest First": "最小優先",
|
||||
"Name A-Z": "名稱 A-Z",
|
||||
"Name Z-A": "名稱 Z-A",
|
||||
"{{count}} selected_other": "已選擇 {{count}} 個檔案",
|
||||
"Delete Selected": "刪除所選",
|
||||
"Created": "建立時間",
|
||||
"No files found": "找不到檔案",
|
||||
"No files uploaded yet": "尚未上傳檔案",
|
||||
"files": "檔案",
|
||||
"Page {{current}} of {{total}}": "第 {{current}} 頁,共 {{total}} 頁",
|
||||
"Are you sure to delete {{count}} selected file(s)?_other": "確定要刪除已選擇的 {{count}} 個檔案嗎?",
|
||||
"Cloud Storage Usage": "雲端儲存使用情況",
|
||||
"Rename Group": "重新命名",
|
||||
"From Directory": "從目錄導入",
|
||||
"Successfully imported {{count}} book(s)_other": "成功導入 {{count}} 本書",
|
||||
"Count": "數量",
|
||||
"Start Page": "起始頁",
|
||||
"Search in OPDS Catalog...": "在 OPDS 目錄中搜尋...",
|
||||
"Please log in to use advanced TTS features": "請登入以使用進階 TTS 功能",
|
||||
"Word limit of 30 words exceeded.": "已超過 30 個詞的限制。",
|
||||
"Proofread": "校對",
|
||||
"Current selection": "目前選取內容",
|
||||
"All occurrences in this book": "本書中的所有出現位置",
|
||||
"All occurrences in your library": "整個書庫中的所有出現位置",
|
||||
"Selected text:": "已選取文字:",
|
||||
"Replace with:": "取代為:",
|
||||
"Enter text...": "請輸入文字…",
|
||||
"Case sensitive:": "區分大小寫:",
|
||||
"Scope:": "適用範圍:",
|
||||
"Selection": "選取內容",
|
||||
"Library": "書庫",
|
||||
"Yes": "是",
|
||||
"No": "否",
|
||||
"Proofread Replacement Rules": "校對取代規則",
|
||||
"Selected Text Rules": "已選取文字規則",
|
||||
"No selected text replacement rules": "沒有已選取文字的取代規則",
|
||||
"Book Specific Rules": "書籍層級規則",
|
||||
"No book-level replacement rules": "沒有書籍層級的取代規則",
|
||||
"Disable Quick Action": "停用快速操作",
|
||||
"Enable Quick Action on Selection": "選取時啟用快速操作",
|
||||
"None": "無",
|
||||
"Annotation Tools": "註解工具",
|
||||
"Enable Quick Actions": "啟用快速操作",
|
||||
"Quick Action": "快速操作",
|
||||
"Copy to Notebook": "複製到筆記本",
|
||||
"Copy text after selection": "複製選取後的文字",
|
||||
"Highlight text after selection": "劃線選取後的文字",
|
||||
"Annotate text after selection": "註解選取後的文字",
|
||||
"Search text after selection": "搜尋選取後的文字",
|
||||
"Look up text in dictionary after selection": "在字典中查找選取後的文字",
|
||||
"Look up text in Wikipedia after selection": "在維基百科中查找選取後的文字",
|
||||
"Translate text after selection": "翻譯選取後的文字",
|
||||
"Read text aloud after selection": "朗讀選取後的文字",
|
||||
"Proofread text after selection": "校對選取後的文字",
|
||||
"{{activeCount}} active, {{pendingCount}} pending": "{{activeCount}} 進行中,{{pendingCount}} 等待中",
|
||||
"{{failedCount}} failed": "{{failedCount}} 失敗",
|
||||
"Waiting...": "等待中...",
|
||||
"Failed": "失敗",
|
||||
"Completed": "已完成",
|
||||
"Cancelled": "已取消",
|
||||
"Retry": "重試",
|
||||
"Active": "進行中",
|
||||
"Transfer Queue": "傳輸佇列",
|
||||
"Upload All": "全部上傳",
|
||||
"Download All": "全部下載",
|
||||
"Resume Transfers": "繼續傳輸",
|
||||
"Pause Transfers": "暫停傳輸",
|
||||
"Pending": "等待中",
|
||||
"No transfers": "沒有傳輸",
|
||||
"Retry All": "全部重試",
|
||||
"Clear Completed": "清除已完成",
|
||||
"Clear Failed": "清除失敗",
|
||||
"Upload queued: {{title}}": "上傳已排隊:{{title}}",
|
||||
"Download queued: {{title}}": "下載已排隊:{{title}}",
|
||||
"Book not found in library": "在書庫中找不到書籍",
|
||||
"Unknown error": "未知錯誤",
|
||||
"Please log in to continue": "請登入以繼續",
|
||||
"Cloud File Transfers": "雲端檔案傳輸",
|
||||
"Show Search Results": "顯示搜尋結果",
|
||||
"Search results for '{{term}}'": "包含「{{term}}」的結果",
|
||||
"Close Search": "關閉搜尋",
|
||||
"Previous Result": "上一個結果",
|
||||
"Next Result": "下一個結果",
|
||||
"Bookmarks": "書籤",
|
||||
"Annotations": "註解",
|
||||
"Show Results": "顯示結果",
|
||||
"Clear search": "清除搜尋",
|
||||
"Clear search history": "清除搜尋歷史",
|
||||
"Tap to Toggle Footer": "點擊切換頁尾",
|
||||
"Show Current Time": "顯示目前時間",
|
||||
"Use 24 Hour Clock": "使用 24 小時制",
|
||||
"Show Current Battery Status": "顯示當前電池狀態",
|
||||
"Exported successfully": "匯出成功",
|
||||
"Book exported successfully.": "書籍匯出成功。",
|
||||
"Failed to export the book.": "書籍匯出失敗。",
|
||||
"Export Book": "匯出書籍",
|
||||
"Whole word:": "全詞匹配:",
|
||||
"Error": "錯誤",
|
||||
"Unable to load the article. Try searching directly on {{link}}.": "無法載入文章。請直接在 {{link}} 上搜尋。",
|
||||
"Unable to load the word. Try searching directly on {{link}}.": "無法載入詞彙。請直接在 {{link}} 上搜尋。",
|
||||
"Date Published": "出版日期",
|
||||
"Only for TTS:": "僅用於TTS:",
|
||||
"Uploaded": "已上傳",
|
||||
"Downloaded": "已下載",
|
||||
"Deleted": "已刪除",
|
||||
"Note:": "筆記:",
|
||||
"Time:": "時間:",
|
||||
"Format Options": "格式選項",
|
||||
"Export Date": "匯出日期",
|
||||
"Chapter Titles": "章節標題",
|
||||
"Chapter Separator": "章節分隔符",
|
||||
"Highlights": "標記",
|
||||
"Note Date": "筆記日期",
|
||||
"Advanced": "進階",
|
||||
"Hide": "隱藏",
|
||||
"Show": "顯示",
|
||||
"Use Custom Template": "使用自訂模板",
|
||||
"Export Template": "匯出模板",
|
||||
"Template Syntax:": "模板語法:",
|
||||
"Insert value": "插入值",
|
||||
"Format date (locale)": "格式化日期(區域)",
|
||||
"Format date (custom)": "格式化日期(自訂)",
|
||||
"Conditional": "條件",
|
||||
"Loop": "迴圈",
|
||||
"Available Variables:": "可用變數:",
|
||||
"Book title": "書名",
|
||||
"Book author": "作者",
|
||||
"Export date": "匯出日期",
|
||||
"Array of chapters": "章節陣列",
|
||||
"Chapter title": "章節標題",
|
||||
"Array of annotations": "標註陣列",
|
||||
"Highlighted text": "標記文字",
|
||||
"Annotation note": "標註筆記",
|
||||
"Date Format Tokens:": "日期格式標記:",
|
||||
"Year (4 digits)": "年(4位)",
|
||||
"Month (01-12)": "月(01-12)",
|
||||
"Day (01-31)": "日(01-31)",
|
||||
"Hour (00-23)": "時(00-23)",
|
||||
"Minute (00-59)": "分(00-59)",
|
||||
"Second (00-59)": "秒(00-59)",
|
||||
"Show Source": "顯示原始碼",
|
||||
"No content to preview": "無內容可預覽",
|
||||
"Export": "匯出",
|
||||
"Set Timeout": "設定逾時",
|
||||
"Select Voice": "選擇語音",
|
||||
"Toggle Sticky Bottom TTS Bar": "切換固定TTS欄",
|
||||
"Display what I'm reading on Discord": "在Discord顯示閱讀狀態",
|
||||
"Show on Discord": "在Discord顯示",
|
||||
"Instant {{action}}": "即時{{action}}",
|
||||
"Instant {{action}} Disabled": "即時{{action}}已停用",
|
||||
"Annotation": "註解",
|
||||
"Reset Template": "重置範本",
|
||||
"Annotation style": "標註樣式",
|
||||
"Annotation color": "標註顏色",
|
||||
"Annotation time": "標註時間",
|
||||
"AI": "AI",
|
||||
"Are you sure you want to re-index this book?": "確定要重新索引這本書嗎?",
|
||||
"Enable AI in Settings": "在設定中啟用 AI",
|
||||
"Index This Book": "索引這本書",
|
||||
"Enable AI search and chat for this book": "為這本書啟用 AI 搜尋和聊天",
|
||||
"Start Indexing": "開始索引",
|
||||
"Indexing book...": "正在索引書籍...",
|
||||
"Preparing...": "準備中...",
|
||||
"Delete this conversation?": "刪除此對話?",
|
||||
"No conversations yet": "尚無對話",
|
||||
"Start a new chat to ask questions about this book": "開始新對話來詢問關於這本書的問題",
|
||||
"Rename": "重新命名",
|
||||
"New Chat": "新對話",
|
||||
"Chat": "聊天",
|
||||
"Please enter a model ID": "請輸入模型 ID",
|
||||
"Model not available or invalid": "模型不可用或無效",
|
||||
"Failed to validate model": "模型驗證失敗",
|
||||
"Couldn't connect to Ollama. Is it running?": "無法連線到 Ollama。它是否正在執行?",
|
||||
"Invalid API key or connection failed": "API 金鑰無效或連線失敗",
|
||||
"Connection failed": "連線失敗",
|
||||
"AI Assistant": "AI 助手",
|
||||
"Enable AI Assistant": "啟用 AI 助手",
|
||||
"Provider": "提供者",
|
||||
"Ollama (Local)": "Ollama(本機)",
|
||||
"AI Gateway (Cloud)": "AI 閘道(雲端)",
|
||||
"Ollama Configuration": "Ollama 設定",
|
||||
"Refresh Models": "重新整理模型",
|
||||
"AI Model": "AI 模型",
|
||||
"No models detected": "未偵測到模型",
|
||||
"AI Gateway Configuration": "AI 閘道設定",
|
||||
"Choose from a selection of high-quality, economical AI models. You can also bring your own model by selecting \"Custom Model\" below.": "從一系列高品質、經濟實惠的 AI 模型中選擇。您也可以透過下方的「自訂模型」使用自己的模型。",
|
||||
"API Key": "API 金鑰",
|
||||
"Get Key": "取得金鑰",
|
||||
"Model": "模型",
|
||||
"Custom Model...": "自訂模型...",
|
||||
"Custom Model ID": "自訂模型 ID",
|
||||
"Validate": "驗證",
|
||||
"Model available": "模型可用",
|
||||
"Connection": "連線",
|
||||
"Test Connection": "測試連線",
|
||||
"Connected": "已連線",
|
||||
"Custom Colors": "自定義顏色",
|
||||
"Color E-Ink Mode": "彩色墨水屏模式",
|
||||
"Reading Ruler": "閱讀尺",
|
||||
"Enable Reading Ruler": "啟用閱讀尺",
|
||||
"Lines to Highlight": "突出顯示行數",
|
||||
"Ruler Color": "尺子顏色",
|
||||
"Command Palette": "命令面板",
|
||||
"Search settings and actions...": "搜尋設定和操作...",
|
||||
"No results found for": "未找到結果:",
|
||||
"Type to search settings and actions": "輸入以搜尋設定和操作",
|
||||
"Recent": "最近",
|
||||
"navigate": "導覽",
|
||||
"select": "選擇",
|
||||
"close": "關閉",
|
||||
"Search Settings": "搜尋設定",
|
||||
"Page Margins": "頁邊距",
|
||||
"AI Provider": "AI 服務商",
|
||||
"Ollama URL": "Ollama URL",
|
||||
"Ollama Model": "Ollama 模型",
|
||||
"AI Gateway Model": "AI Gateway 模型",
|
||||
"Actions": "操作",
|
||||
"Navigation": "導覽",
|
||||
"Set status for {{count}} book(s)_other": "設定 {{count}} 本書的狀態",
|
||||
"Mark as Unread": "標示為未讀",
|
||||
"Mark as Finished": "標示為已讀",
|
||||
"Finished": "已讀",
|
||||
"Unread": "未讀",
|
||||
"Clear Status": "清除狀態",
|
||||
"Status": "狀態",
|
||||
"Loading": "正在載入",
|
||||
"Exit Paragraph Mode": "退出段落模式",
|
||||
"Paragraph Mode": "段落模式",
|
||||
"Embedding Model": "嵌入模型",
|
||||
"{{count}} book(s) synced_other": "{{count}} 本書已同步",
|
||||
"Unable to start RSVP": "無法啟動 RSVP",
|
||||
"RSVP not supported for PDF": "PDF 不支援 RSVP",
|
||||
"Select Chapter": "選擇章節",
|
||||
"Context": "上下文",
|
||||
"Ready": "準備就緒",
|
||||
"Chapter Progress": "章節進度",
|
||||
"words": "詞",
|
||||
"{{time}} left": "剩餘 {{time}}",
|
||||
"Reading progress": "閱讀進度",
|
||||
"Click to seek": "點擊跳轉",
|
||||
"Skip back 15 words": "回退 15 詞",
|
||||
"Back 15 words (Shift+Left)": "回退 15 詞 (Shift+Left)",
|
||||
"Pause (Space)": "暫停 (空格)",
|
||||
"Play (Space)": "播放 (空格)",
|
||||
"Skip forward 15 words": "前進 15 詞",
|
||||
"Forward 15 words (Shift+Right)": "前進 15 詞 (Shift+Right)",
|
||||
"Decrease speed": "減速",
|
||||
"Slower (Left/Down)": "較慢 (左/下)",
|
||||
"Increase speed": "加速",
|
||||
"Faster (Right/Up)": "較快 (右/上)",
|
||||
"Start RSVP Reading": "開始 RSVP 閱讀",
|
||||
"Choose where to start reading": "選擇閱讀起始位置",
|
||||
"From Chapter Start": "從章節開始",
|
||||
"Start reading from the beginning of the chapter": "重新從本章節開始閱讀",
|
||||
"Resume": "繼續",
|
||||
"Continue from where you left off": "從上次離開的地方繼續",
|
||||
"From Current Page": "從當前頁",
|
||||
"Start from where you are currently reading": "從當前正在閱讀的位置開始",
|
||||
"From Selection": "從選取內容",
|
||||
"Speed Reading Mode": "快讀模式",
|
||||
"Scroll left": "向左捲動",
|
||||
"Scroll right": "向右捲動",
|
||||
"Library Sync Progress": "資料庫同步進度",
|
||||
"Back to library": "返回書庫",
|
||||
"Group by...": "分組方式...",
|
||||
"Export as Plain Text": "匯出為純文字",
|
||||
"Export as Markdown": "匯出為 Markdown",
|
||||
"Show Page Navigation Buttons": "顯示翻頁按鈕",
|
||||
"Page {{number}}": "第 {{number}} 頁",
|
||||
"highlight": "高亮",
|
||||
"underline": "底線",
|
||||
"squiggly": "波浪線",
|
||||
"red": "紅色",
|
||||
"violet": "紫色",
|
||||
"blue": "藍色",
|
||||
"green": "綠色",
|
||||
"yellow": "黃色",
|
||||
"Select {{style}} style": "選擇 {{style}} 樣式",
|
||||
"Select {{color}} color": "選擇 {{color}} 顏色",
|
||||
"Close Book": "關閉書籍",
|
||||
"Speed Reading": "快速閱讀",
|
||||
"Close Speed Reading": "關閉快速閱讀",
|
||||
"Authors": "作者",
|
||||
"Books": "書籍",
|
||||
"Groups": "分組",
|
||||
"Back to TTS Location": "回到朗讀位置",
|
||||
"Metadata": "元數據",
|
||||
"Image viewer": "圖片檢視器",
|
||||
"Previous Image": "上一張圖片",
|
||||
"Next Image": "下一張圖片",
|
||||
"Zoomed": "已縮放",
|
||||
"Zoom level": "縮放級別",
|
||||
"Table viewer": "表格檢視器",
|
||||
"Unable to connect to Readwise. Please check your network connection.": "無法連接到 Readwise。請檢查您的網路連線。",
|
||||
"Invalid Readwise access token": "無效的 Readwise 存取權杖",
|
||||
"Disconnected from Readwise": "已斷開與 Readwise 的連線",
|
||||
"Never": "從不",
|
||||
"Readwise Settings": "Readwise 設定",
|
||||
"Connected to Readwise": "已連接到 Readwise",
|
||||
"Last synced: {{time}}": "上次同步時間:{{time}}",
|
||||
"Sync Enabled": "同步已啟用",
|
||||
"Disconnect": "斷開連線",
|
||||
"Connect your Readwise account to sync highlights.": "連接您的 Readwise 帳戶以同步高亮內容。",
|
||||
"Get your access token at": "獲取您的存取權杖:",
|
||||
"Access Token": "存取權杖",
|
||||
"Paste your Readwise access token": "貼上您的 Readwise 存取權杖",
|
||||
"Config": "配置",
|
||||
"Readwise Sync": "Readwise 同步",
|
||||
"Push Highlights": "推送高亮內容",
|
||||
"Highlights synced to Readwise": "高亮內容已同步到 Readwise",
|
||||
"Readwise sync failed: no internet connection": "Readwise 同步失敗:無網路連線",
|
||||
"Readwise sync failed: {{error}}": "Readwise 同步失敗:{{error}}",
|
||||
"System Screen Brightness": "系統螢幕亮度",
|
||||
"Page:": "頁面:",
|
||||
"Page: {{number}}": "頁面: {{number}}",
|
||||
"Annotation page number": "註解頁碼",
|
||||
"Translating...": "翻譯中...",
|
||||
"Show Battery Percentage": "顯示電池百分比",
|
||||
"Hide Scrollbar": "隱藏滾動條",
|
||||
"Skip to last reading position": "跳至上次閱讀位置",
|
||||
"Show context": "顯示上下文",
|
||||
"Hide context": "隱藏上下文",
|
||||
"Decrease font size": "縮小字型",
|
||||
"Increase font size": "放大字型",
|
||||
"Focus": "焦點",
|
||||
"Theme color": "主題顏色",
|
||||
"Import failed": "匯入失敗",
|
||||
"Available Formatters:": "可用格式化器:",
|
||||
"Format date": "格式化日期",
|
||||
"Markdown block quote (> per line)": "Markdown 引用區塊(每行 >)",
|
||||
"Newlines to <br>": "換行轉為 <br>",
|
||||
"Change case": "變更大小寫",
|
||||
"Trim whitespace": "去除空格",
|
||||
"Truncate to n characters": "截斷為 n 個字元",
|
||||
"Replace text": "取代文字",
|
||||
"Fallback value": "預設值",
|
||||
"Get length": "取得長度",
|
||||
"First/last element": "第一個/最後一個元素",
|
||||
"Join array": "合併陣列",
|
||||
"Backup failed: {{error}}": "備份失敗:{{error}}",
|
||||
"Select Backup": "選擇備份",
|
||||
"Restore failed: {{error}}": "還原失敗:{{error}}",
|
||||
"Backup & Restore": "備份與還原",
|
||||
"Create a backup of your library or restore from a previous backup. Restoring will merge with your current library.": "建立書庫備份或從先前的備份還原。還原將與目前的書庫合併。",
|
||||
"Backup Library": "備份書庫",
|
||||
"Restore Library": "還原書庫",
|
||||
"Creating backup...": "正在建立備份...",
|
||||
"Restoring library...": "正在還原書庫...",
|
||||
"{{current}} of {{total}} items": "{{current}} / {{total}} 項",
|
||||
"Backup completed successfully!": "備份成功!",
|
||||
"Restore completed successfully!": "還原成功!",
|
||||
"Your library has been saved to the selected location.": "您的書庫已儲存至所選位置。",
|
||||
"{{added}} books added, {{updated}} books updated.": "新增 {{added}} 本書,更新 {{updated}} 本書。",
|
||||
"Operation failed": "操作失敗",
|
||||
"Loading library...": "正在載入書庫...",
|
||||
"{{count}} books refreshed_other": "已重新整理 {{count}} 本書",
|
||||
"Failed to refresh metadata": "重新整理中繼資料失敗",
|
||||
"Refresh Metadata": "重新整理中繼資料"
|
||||
}
|
||||
|
||||
@@ -1,5 +1,175 @@
|
||||
{
|
||||
"releases": {
|
||||
"0.10.1": {
|
||||
"date": "2026-03-22",
|
||||
"notes": [
|
||||
"Reading: Added continuous scroll and spread layout support for EPUBs",
|
||||
"Reading: Added current time and battery display in footer",
|
||||
"Reading: Added TTS, annotation support, pinch-to-zoom, and scroll mode for PDFs",
|
||||
"Library: Added backup/restore to a zip file and batch metadata refresh",
|
||||
"KOReader: Added bookmark and annotation sync between KOReader and Readest devices",
|
||||
"Footnotes: Added back navigation with link history and more responsive popup sizing",
|
||||
"Annotations: Added loupe display when selecting text in instant annotation mode",
|
||||
"Text-to-Speech: Fixed TTS reading position tracking in scrolled mode"
|
||||
]
|
||||
},
|
||||
"0.9.101": {
|
||||
"date": "2026-02-28",
|
||||
"notes": [
|
||||
"Text-to-Speech: Fixed an issue where TTS could not continue to the next chapter",
|
||||
"Reading: Fixed an issue importing very large TXT files on iOS",
|
||||
"Reading: Fixed the layout of the reading ruler in scrolled mode",
|
||||
"Reading: Smoother page-turn animations for a more fluid experience",
|
||||
"Reading: Added a gallery mode to zoom and browse images within books",
|
||||
"Annotations: Page numbers are now displayed and exported with highlights and notes",
|
||||
"Annotations: Added support for exporting highlights to Readwise",
|
||||
"OPDS: Fixed missing book descriptions in OPDS feeds",
|
||||
"Android: Improved compatibility with older WebView versions on Android"
|
||||
]
|
||||
},
|
||||
"0.9.100": {
|
||||
"date": "2026-02-13",
|
||||
"notes": [
|
||||
"Text-to-Speech: Automatically moves to the next chapter when the current chapter finishes",
|
||||
"Reading: Fixed the reading ruler on Android",
|
||||
"Reading: Improved RSVP layout and stability",
|
||||
"Reading: Fixed an issue where some EPUB books could not adjust font size",
|
||||
"Annotations: Added a magnifier (loupe) when adjusting text selection",
|
||||
"Annotations: Text selection now snaps to word boundaries for better accuracy",
|
||||
"Annotations: Custom highlight colors now apply correctly in the sidebar",
|
||||
"Dictionary: Added a back button for easier navigation",
|
||||
"Dictionary: Fixed an issue where Dictionary and Wikipedia could not open on Android",
|
||||
"Metadata: Added collapsible sections in Book Details",
|
||||
"Metadata: Added support for parsing series information from Calibre-exported EPUB files",
|
||||
"Eink: Improved component layout and colors in E-ink mode",
|
||||
"Layout: Sidebar toggle button position is now persistent"
|
||||
]
|
||||
},
|
||||
"0.9.99": {
|
||||
"date": "2026-02-07",
|
||||
"notes": [
|
||||
"Reading: Added a reading ruler (line highlight) to help guide your eyes while reading",
|
||||
"Reading: Added paragraph-by-paragraph reading mode for more focused navigation",
|
||||
"Reading: Added a speed reading mode to support faster reading workflows",
|
||||
"Reading: Added support for gamepad input to turn pages",
|
||||
"Accessibility: Improved TalkBack support in dropdown menus for smoother navigation",
|
||||
"Accessibility: Page navigation buttons are now always visible to screen readers",
|
||||
"Accessibility: Reading progress is now updated correctly when navigating with screen readers",
|
||||
"Annotations: Expanded highlight customization with more color options",
|
||||
"Annotations: Added an option to export annotations as plain text",
|
||||
"Library: Added grouping by author and series for better library organization",
|
||||
"Library: Added support of marking books as finished",
|
||||
"Search: Added fuzzy search to quickly find settings even with partial keywords",
|
||||
"Table of Contents: Added page numbers for nested TOC entries",
|
||||
"Text-to-Speech: Added navigation controls to return to the current reading position",
|
||||
"Linux: Added an in-app updater for AppImage builds",
|
||||
"E-ink: Improved color support for color E-ink devices to display richer highlights"
|
||||
]
|
||||
},
|
||||
"0.9.98": {
|
||||
"date": "2026-01-21",
|
||||
"notes": [
|
||||
"Bookshelf: Added the ability to export original book files directly from the book details dialog",
|
||||
"Bookshelf: Added a new sorting option to organize books by publish date",
|
||||
"Bookshelf: Improved performance for large library with faster and more stable imports",
|
||||
"OPDS: Improved download reliability by correctly detecting filenames for PDF and CBZ files",
|
||||
"Proofreading: Added support for whole-word replacement to make text corrections more precise",
|
||||
"Notes: Added the ability to export notes using a customizable template",
|
||||
"PDF: Added support for panning within PDF documents for easier navigation",
|
||||
"PDF: Improved performance by pre-rendering the next page for smoother page transitions",
|
||||
"Text-to-Speech: Added support for word replacement to improve pronunciation during playback",
|
||||
"Text-to-Speech: Fixed an issue where playback speed settings were not applied correctly on Linux",
|
||||
"E-ink: Improved reading stability by preventing unwanted scrolling when animations are disabled or on e-ink devices",
|
||||
"Discord: Added Discord Rich Presence to display your current reading status on Desktop platforms",
|
||||
"Android: Fixed an issue that could cause occasional crashes during app startup",
|
||||
"Fonts: Improved web font loading for faster and more stable text rendering"
|
||||
]
|
||||
},
|
||||
"0.9.97": {
|
||||
"date": "2026-01-10",
|
||||
"notes": [
|
||||
"Annotations: Added annotation bubble icons directly on text with instant note popups",
|
||||
"Annotations: Enabled quick highlighting when selecting text",
|
||||
"Annotations: Added the ability to edit the text range of existing highlights",
|
||||
"Annotations: Added an annotation navigation bar for easier browsing",
|
||||
"OPDS: Fixed an issue where CBZ files could not be downloaded from OPDS catalogs",
|
||||
"OPDS: Improved compatibility with Komga OPDS servers",
|
||||
"OPDS: Added support for OPDS servers using self-signed SSL certificates",
|
||||
"PDF: Fixed an issue where some PDF files failed to open",
|
||||
"E-ink: Optimized colors and layout for improved e-ink device readability",
|
||||
"Search: Added search term history for quicker repeated searches",
|
||||
"Text-to-Speech: Reduced excessive pauses between sentences for smoother playback",
|
||||
"File Transfer: Introduced a background transfer queue for uploading and downloading books",
|
||||
"Proofreading: Added a proofread tool that can replace text directly within books"
|
||||
]
|
||||
},
|
||||
"0.9.96": {
|
||||
"date": "2025-12-19",
|
||||
"notes": [
|
||||
"TTS: Resolved an issue where Edge TTS was blocked in certain regions",
|
||||
"OPDS: Improved compatibility with older versions of Calibre Web",
|
||||
"OPDS: Added an instant search bar for faster browsing in OPDS catalogs",
|
||||
"OPDS: Added a curated book catalog from Standard Ebooks",
|
||||
"Bookshelf: Added a “Group Books” action to the context menu",
|
||||
"Comics: Fixed layout issues to improve comic book reading",
|
||||
"Layout: Footnote popups now adapt correctly to different screen sizes",
|
||||
"Layout: Fixed an issue where the maximum inline width was not applied to EPUBs",
|
||||
"Sync: Improved file downloading by correctly handling special characters in filenames",
|
||||
"UI: Added an option to temporarily dismiss the reading progress bar",
|
||||
"Settings: Screen brightness adjustments now apply only to the reader view",
|
||||
"iOS: You can now open files directly in Readest from the Files app",
|
||||
"macOS: Added a global menu option to open files with Readest"
|
||||
]
|
||||
},
|
||||
"0.9.95": {
|
||||
"date": "2025-12-08",
|
||||
"notes": [
|
||||
"OPDS: You can now search, browse, and download ebooks directly from OPDS catalogs",
|
||||
"OPDS: Improved compatibility with Calibre Web for reliable downloads",
|
||||
"OPDS: Fixed an issue where book covers from self-hosted Calibre OPDS servers did not display correctly",
|
||||
"Cloud Storage: You can view and delete files stored in your cloud storage directly from the app",
|
||||
"Bookshelf: Added support for importing books from a folder recursively",
|
||||
"Bookshelf: You can now rename your bookshelf groups",
|
||||
"EPUB: Added support for SVG covers from Standard Ebooks",
|
||||
"Annotations: Keyboard shortcuts no longer copy selected text into the notebook",
|
||||
"Footnotes: Footnote popups now scale properly on small screens",
|
||||
"Touch/Styli: Removed the context menu for smoother interaction on touch and stylus devices",
|
||||
"Layout: Devices with unfoldable screens now automatically switch to a two-column layout",
|
||||
"PDF: Improved zoomed-in navigation and hand-tool behavior for smoother page navigation",
|
||||
"Android: Fixed highlighting of the current sentence when using native Android text-to-speech",
|
||||
"Android: Back button handling now works correctly on Android 15 and above",
|
||||
"Android: You can now open files shared from other apps"
|
||||
]
|
||||
},
|
||||
"0.9.94": {
|
||||
"date": "2025-12-02",
|
||||
"notes": [
|
||||
"OPDS: You can now browse and download ebooks directly from OPDS catalogs",
|
||||
"PDF: Added a hand-tool mode that makes navigating PDF pages easier",
|
||||
"Covers: You can now choose a folder to save the latest book cover image",
|
||||
"CJK: Added one-tap conversion between Simplified and Traditional Chinese",
|
||||
"Shortcuts: Use Ctrl + mouse wheel to quickly zoom in or out",
|
||||
"Library: Added a new option to adjust cover sizes in grid view",
|
||||
"Windows: Added Ebook thumbnails with book covers in Windows Explorer",
|
||||
"TTS: Fixed an issue where the page would scroll when showing the annotator",
|
||||
"Annotations: Resolved layout shifts when selecting text in paginated mode on Android",
|
||||
"Files: Improved backup handling to prevent file corruption",
|
||||
"Layout: Fixed text clipping caused by negative indents",
|
||||
"E-ink: Improved sidebar and notebook background colors for e-ink devices",
|
||||
"Android: The Back button now works properly in menus, dialogs, and alerts",
|
||||
"iOS: Fixed occasional failures when opening books on older iOS versions (16.4 and below)"
|
||||
]
|
||||
},
|
||||
"0.9.93": {
|
||||
"date": "2025-11-20",
|
||||
"notes": [
|
||||
"Sync: Improved reliability for new accounts so your books sync correctly from the start",
|
||||
"Library: Fixed an occasional issue where returning to the library could get stuck",
|
||||
"Layout: Improved image display in paginated mode so images won't exceed the available height",
|
||||
"TXT: Improved performance and stability when opening and parsing TXT files",
|
||||
"Fonts: Fixed an issue where monospace fonts were not applied correctly in code blocks"
|
||||
]
|
||||
},
|
||||
"0.9.92": {
|
||||
"date": "2025-11-18",
|
||||
"notes": [
|
||||
|
||||
+183
@@ -0,0 +1,183 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Sync release notes from JSON to XML AppData file
|
||||
# Usage: ./sync_release_notes.sh [json_file] [xml_file]
|
||||
#
|
||||
# Description:
|
||||
# Extracts release information from a JSON file and updates the <releases>
|
||||
# section in an AppData XML file, then calculates the SHA256 checksum.
|
||||
#
|
||||
# Arguments:
|
||||
# json_file: Path to JSON file (default: releases.json)
|
||||
# xml_file: Path to XML file (default: appdata.xml)
|
||||
|
||||
set -e
|
||||
set -o pipefail
|
||||
|
||||
# Colors for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Helper functions
|
||||
log_info() {
|
||||
echo -e "${GREEN}✓${NC} $1"
|
||||
}
|
||||
|
||||
log_warn() {
|
||||
echo -e "${YELLOW}⚠${NC} $1"
|
||||
}
|
||||
|
||||
log_error() {
|
||||
echo -e "${RED}✗${NC} $1" >&2
|
||||
}
|
||||
|
||||
# Check if required commands are available
|
||||
if ! command -v jq >/dev/null 2>&1; then
|
||||
log_error "jq is required but not installed."
|
||||
echo "Install it with: apt-get install jq (Debian/Ubuntu) or brew install jq (macOS)"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Parse arguments
|
||||
JSON_FILE="${1:-releases.json}"
|
||||
XML_FILE="${2:-appdata.xml}"
|
||||
|
||||
# Validate input files
|
||||
if [ ! -f "$JSON_FILE" ]; then
|
||||
log_error "JSON file '$JSON_FILE' not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f "$XML_FILE" ]; then
|
||||
log_error "XML file '$XML_FILE' not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Validate JSON format
|
||||
if ! jq empty "$JSON_FILE" 2>/dev/null; then
|
||||
log_error "Invalid JSON format in '$JSON_FILE'"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if releases key exists
|
||||
if ! jq -e '.releases' "$JSON_FILE" >/dev/null 2>&1; then
|
||||
log_error "No 'releases' key found in JSON file"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "================================================"
|
||||
echo "Release Notes Sync Tool"
|
||||
echo "================================================"
|
||||
echo "Source: $JSON_FILE"
|
||||
echo "Target: $XML_FILE"
|
||||
echo ""
|
||||
|
||||
# Create backup
|
||||
BACKUP_FILE="${XML_FILE}.backup.$(date +%Y%m%d_%H%M%S)"
|
||||
cp "$XML_FILE" "$BACKUP_FILE"
|
||||
log_info "Created backup: $BACKUP_FILE"
|
||||
|
||||
# Create temporary files
|
||||
TEMP_XML=$(mktemp)
|
||||
TEMP_RELEASES=$(mktemp)
|
||||
|
||||
# Cleanup function
|
||||
cleanup() {
|
||||
rm -f "$TEMP_XML" "$TEMP_RELEASES"
|
||||
}
|
||||
trap cleanup EXIT
|
||||
|
||||
# Extract releases from JSON and convert to XML format
|
||||
log_info "Extracting releases from JSON..."
|
||||
RELEASE_COUNT=$(jq '.releases | length' "$JSON_FILE")
|
||||
echo " Found $RELEASE_COUNT releases"
|
||||
|
||||
jq -r '
|
||||
.releases | to_entries | .[0:10] | .[] |
|
||||
" <release version=\"\(.key)\" date=\"\(.value.date)\">
|
||||
<description>
|
||||
<ul>
|
||||
" +
|
||||
((.value.notes | map(" <li>\(.)</li>")) | join("\n")) +
|
||||
"
|
||||
</ul>
|
||||
</description>
|
||||
</release>"
|
||||
' "$JSON_FILE" > "$TEMP_RELEASES"
|
||||
|
||||
# Find the releases section in XML and replace it
|
||||
log_info "Updating XML file..."
|
||||
awk -v releases="$TEMP_RELEASES" '
|
||||
BEGIN { in_releases = 0; printed_releases = 0 }
|
||||
/<releases>/ {
|
||||
print $0
|
||||
if (printed_releases == 0) {
|
||||
while ((getline line < releases) > 0) {
|
||||
print line
|
||||
}
|
||||
close(releases)
|
||||
printed_releases = 1
|
||||
}
|
||||
in_releases = 1
|
||||
next
|
||||
}
|
||||
/<\/releases>/ {
|
||||
in_releases = 0
|
||||
print $0
|
||||
next
|
||||
}
|
||||
in_releases { next }
|
||||
{ print }
|
||||
' "$XML_FILE" > "$TEMP_XML"
|
||||
|
||||
# Validate the generated XML
|
||||
if ! grep -q "<releases>" "$TEMP_XML" || ! grep -q "</releases>" "$TEMP_XML"; then
|
||||
log_error "Failed to generate valid XML structure"
|
||||
log_warn "Restoring from backup..."
|
||||
mv "$BACKUP_FILE" "$XML_FILE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Remove backup if everything is fine
|
||||
rm "$BACKUP_FILE"
|
||||
|
||||
# Replace original file
|
||||
mv "$TEMP_XML" "$XML_FILE"
|
||||
log_info "XML file updated successfully"
|
||||
|
||||
# Calculate SHA256 checksum
|
||||
echo ""
|
||||
log_info "Calculating SHA256 checksum..."
|
||||
if command -v sha256sum >/dev/null 2>&1; then
|
||||
CHECKSUM=$(sha256sum "$XML_FILE" | awk '{print $1}')
|
||||
elif command -v shasum >/dev/null 2>&1; then
|
||||
CHECKSUM=$(shasum -a 256 "$XML_FILE" | awk '{print $1}')
|
||||
else
|
||||
log_error "Neither sha256sum nor shasum found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Save checksum to file
|
||||
CHECKSUM_FILE="${XML_FILE}.sha256"
|
||||
echo "$CHECKSUM $XML_FILE" > "$CHECKSUM_FILE"
|
||||
|
||||
echo ""
|
||||
echo "================================================"
|
||||
echo "Summary"
|
||||
echo "================================================"
|
||||
echo " Updated file: $XML_FILE"
|
||||
echo " Backup file: $BACKUP_FILE"
|
||||
echo " Checksum file: $CHECKSUM_FILE"
|
||||
echo " SHA256: $CHECKSUM"
|
||||
echo " Releases: $RELEASE_COUNT"
|
||||
echo ""
|
||||
log_info "Sync completed successfully!"
|
||||
echo ""
|
||||
echo "To verify the checksum, run:"
|
||||
if command -v sha256sum >/dev/null 2>&1; then
|
||||
echo " sha256sum -c $CHECKSUM_FILE"
|
||||
else
|
||||
echo " shasum -a 256 -c $CHECKSUM_FILE"
|
||||
fi
|
||||
Executable
+71
@@ -0,0 +1,71 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Starts a Next.js dev server, launches the Tauri app with webdriver
|
||||
# (no file watcher, no built-in dev server), waits for the WebDriver
|
||||
# server on port 4445, runs tests, then tears down everything cleanly.
|
||||
#
|
||||
set -euo pipefail
|
||||
|
||||
DEV_PORT=3000
|
||||
WEBDRIVER_PORT=4445
|
||||
POLL_INTERVAL=3
|
||||
TIMEOUT=300
|
||||
|
||||
cleanup() {
|
||||
if [[ -n "${TAURI_PID:-}" ]]; then
|
||||
pkill -P "$TAURI_PID" 2>/dev/null || true
|
||||
kill "$TAURI_PID" 2>/dev/null || true
|
||||
wait "$TAURI_PID" 2>/dev/null || true
|
||||
fi
|
||||
if [[ -n "${DEV_PID:-}" ]]; then
|
||||
pkill -P "$DEV_PID" 2>/dev/null || true
|
||||
kill "$DEV_PID" 2>/dev/null || true
|
||||
wait "$DEV_PID" 2>/dev/null || true
|
||||
fi
|
||||
lsof -ti :"$WEBDRIVER_PORT" 2>/dev/null | xargs kill 2>/dev/null || true
|
||||
lsof -ti :"$DEV_PORT" 2>/dev/null | xargs kill 2>/dev/null || true
|
||||
}
|
||||
|
||||
trap cleanup EXIT INT TERM
|
||||
|
||||
echo "Starting Next.js dev server..."
|
||||
dotenv -e .env.tauri -- next dev &
|
||||
DEV_PID=$!
|
||||
|
||||
echo "Waiting for dev server on port $DEV_PORT..."
|
||||
elapsed=0
|
||||
while ! curl -sf "http://localhost:${DEV_PORT}" >/dev/null 2>&1; do
|
||||
if ! kill -0 "$DEV_PID" 2>/dev/null; then
|
||||
echo "ERROR: Dev server exited unexpectedly."
|
||||
exit 1
|
||||
fi
|
||||
if (( elapsed >= TIMEOUT )); then
|
||||
echo "ERROR: Timed out waiting for dev server on port $DEV_PORT."
|
||||
exit 1
|
||||
fi
|
||||
sleep "$POLL_INTERVAL"
|
||||
(( elapsed += POLL_INTERVAL ))
|
||||
done
|
||||
|
||||
echo "Starting Tauri app with webdriver (no-watch, skip beforeDevCommand)..."
|
||||
dotenv -e .env.tauri -- tauri dev --features webdriver --no-watch \
|
||||
--config '{"build":{"beforeDevCommand":""}}' &
|
||||
TAURI_PID=$!
|
||||
|
||||
echo "Waiting for WebDriver server on port $WEBDRIVER_PORT (timeout ${TIMEOUT}s)..."
|
||||
elapsed=0
|
||||
while ! curl -sf "http://127.0.0.1:${WEBDRIVER_PORT}/status" >/dev/null 2>&1; do
|
||||
if ! kill -0 "$TAURI_PID" 2>/dev/null; then
|
||||
echo "ERROR: Tauri app exited before WebDriver became ready."
|
||||
exit 1
|
||||
fi
|
||||
if (( elapsed >= TIMEOUT )); then
|
||||
echo "ERROR: Timed out waiting for WebDriver on port $WEBDRIVER_PORT."
|
||||
exit 1
|
||||
fi
|
||||
sleep "$POLL_INTERVAL"
|
||||
(( elapsed += POLL_INTERVAL ))
|
||||
done
|
||||
|
||||
echo "WebDriver is ready. Running Tauri tests..."
|
||||
pnpm vitest --config vitest.tauri.config.mts --watch=false
|
||||
@@ -17,6 +17,8 @@ crate-type = ["staticlib", "cdylib", "lib"]
|
||||
[features]
|
||||
# Internal feature to suppress warnings from old objc crate
|
||||
cargo-clippy = []
|
||||
# Enable WebDriver plugin for E2E testing (use with `tauri build --debug --features webdriver`)
|
||||
webdriver = ["tauri-plugin-webdriver"]
|
||||
|
||||
[build-dependencies]
|
||||
tauri-build = { version = "2", features = [] }
|
||||
@@ -26,6 +28,7 @@ serde_json = "1.0"
|
||||
serde = { version = "1.0", features = ["derive"] }
|
||||
log = "0.4"
|
||||
thiserror = "2"
|
||||
walkdir = "2"
|
||||
tokio = { version = "1", features = ["fs"] }
|
||||
tokio-util = { version = "0.7", features = ["codec"] }
|
||||
futures-util = "0.3"
|
||||
@@ -35,7 +38,7 @@ reqwest = { version = "0.12", default-features = false, features = [
|
||||
"json",
|
||||
"stream",
|
||||
] }
|
||||
tauri = { version = "2.5.1", features = [ "protocol-asset" ] }
|
||||
tauri = { version = "2", features = [ "protocol-asset" ] }
|
||||
tauri-build = "2"
|
||||
tauri-plugin-log = "2"
|
||||
tauri-plugin-fs = "2"
|
||||
@@ -52,6 +55,11 @@ 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" }
|
||||
tauri-plugin-websocket = "2"
|
||||
tauri-plugin-sharekit = "0.3"
|
||||
tauri-plugin-device-info = "1.0.1"
|
||||
tauri-plugin-turso = { path = "./plugins/tauri-plugin-turso" }
|
||||
tauri-plugin-webdriver = { version = "0.2", optional = true }
|
||||
|
||||
[target."cfg(target_os = \"macos\")".dependencies]
|
||||
rand = "0.8"
|
||||
@@ -69,3 +77,4 @@ tauri-plugin-cli = "2"
|
||||
tauri-plugin-single-instance = "2"
|
||||
tauri-plugin-updater = "2"
|
||||
tauri-plugin-window-state = "2"
|
||||
discord-rich-presence = "1.0.0"
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>LSSupportsOpeningDocumentsInPlace</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -19,6 +19,8 @@
|
||||
<string>EPUB Document</string>
|
||||
<key>LSHandlerRank</key>
|
||||
<string>Alternate</string>
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Viewer</string>
|
||||
<key>LSItemContentTypes</key>
|
||||
<array>
|
||||
<string>org.idpf.epub-container</string>
|
||||
@@ -30,6 +32,8 @@
|
||||
<string>PDF Document</string>
|
||||
<key>LSHandlerRank</key>
|
||||
<string>Alternate</string>
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Viewer</string>
|
||||
<key>LSItemContentTypes</key>
|
||||
<array>
|
||||
<string>com.adobe.pdf</string>
|
||||
@@ -41,6 +45,8 @@
|
||||
<string>FB2 Document</string>
|
||||
<key>LSHandlerRank</key>
|
||||
<string>Alternate</string>
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Viewer</string>
|
||||
<key>LSItemContentTypes</key>
|
||||
<array>
|
||||
<string>com.readest.fb2</string>
|
||||
@@ -52,6 +58,8 @@
|
||||
<string>CBZ Archive</string>
|
||||
<key>LSHandlerRank</key>
|
||||
<string>Alternate</string>
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Viewer</string>
|
||||
<key>LSItemContentTypes</key>
|
||||
<array>
|
||||
<string>com.readest.cbz</string>
|
||||
@@ -63,6 +71,8 @@
|
||||
<string>MOBI Document</string>
|
||||
<key>LSHandlerRank</key>
|
||||
<string>Alternate</string>
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Viewer</string>
|
||||
<key>LSItemContentTypes</key>
|
||||
<array>
|
||||
<string>org.mobipocket.mobi</string>
|
||||
@@ -74,6 +84,8 @@
|
||||
<string>AZW Document</string>
|
||||
<key>LSHandlerRank</key>
|
||||
<string>Alternate</string>
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Viewer</string>
|
||||
<key>LSItemContentTypes</key>
|
||||
<array>
|
||||
<string>com.amazon.azw</string>
|
||||
@@ -86,6 +98,8 @@
|
||||
<string>Text File</string>
|
||||
<key>LSHandlerRank</key>
|
||||
<string>Alternate</string>
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Viewer</string>
|
||||
<key>LSItemContentTypes</key>
|
||||
<array>
|
||||
<string>public.plain-text</string>
|
||||
@@ -93,6 +107,153 @@
|
||||
</dict>
|
||||
</array>
|
||||
|
||||
<key>UTImportedTypeDeclarations</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>UTTypeIdentifier</key>
|
||||
<string>org.idpf.epub-container</string>
|
||||
<key>UTTypeDescription</key>
|
||||
<string>EPUB Document</string>
|
||||
<key>UTTypeConformsTo</key>
|
||||
<array>
|
||||
<string>public.data</string>
|
||||
<string>public.composite-content</string>
|
||||
</array>
|
||||
<key>UTTypeTagSpecification</key>
|
||||
<dict>
|
||||
<key>public.filename-extension</key>
|
||||
<array>
|
||||
<string>epub</string>
|
||||
</array>
|
||||
<key>public.mime-type</key>
|
||||
<string>application/epub+zip</string>
|
||||
</dict>
|
||||
</dict>
|
||||
|
||||
<dict>
|
||||
<key>UTTypeIdentifier</key>
|
||||
<string>com.adobe.pdf</string>
|
||||
<key>UTTypeDescription</key>
|
||||
<string>PDF Document</string>
|
||||
<key>UTTypeConformsTo</key>
|
||||
<array>
|
||||
<string>public.data</string>
|
||||
<string>public.composite-content</string>
|
||||
</array>
|
||||
<key>UTTypeTagSpecification</key>
|
||||
<dict>
|
||||
<key>public.filename-extension</key>
|
||||
<array>
|
||||
<string>pdf</string>
|
||||
</array>
|
||||
<key>public.mime-type</key>
|
||||
<string>application/pdf</string>
|
||||
</dict>
|
||||
</dict>
|
||||
|
||||
<dict>
|
||||
<key>UTTypeIdentifier</key>
|
||||
<string>com.readest.fb2</string>
|
||||
<key>UTTypeDescription</key>
|
||||
<string>FB2 Document</string>
|
||||
<key>UTTypeConformsTo</key>
|
||||
<array>
|
||||
<string>public.xml</string>
|
||||
</array>
|
||||
<key>UTTypeTagSpecification</key>
|
||||
<dict>
|
||||
<key>public.filename-extension</key>
|
||||
<array>
|
||||
<string>fb2</string>
|
||||
</array>
|
||||
<key>public.mime-type</key>
|
||||
<string>application/xml</string>
|
||||
</dict>
|
||||
</dict>
|
||||
|
||||
<dict>
|
||||
<key>UTTypeIdentifier</key>
|
||||
<string>com.readest.cbz</string>
|
||||
<key>UTTypeDescription</key>
|
||||
<string>CBZ Archive</string>
|
||||
<key>UTTypeConformsTo</key>
|
||||
<array>
|
||||
<string>public.archive</string>
|
||||
</array>
|
||||
<key>UTTypeTagSpecification</key>
|
||||
<dict>
|
||||
<key>public.filename-extension</key>
|
||||
<array>
|
||||
<string>cbz</string>
|
||||
</array>
|
||||
<key>public.mime-type</key>
|
||||
<string>application/x-cbz</string>
|
||||
</dict>
|
||||
</dict>
|
||||
|
||||
<dict>
|
||||
<key>UTTypeIdentifier</key>
|
||||
<string>org.mobipocket.mobi</string>
|
||||
<key>UTTypeDescription</key>
|
||||
<string>MOBI Document</string>
|
||||
<key>UTTypeConformsTo</key>
|
||||
<array>
|
||||
<string>public.data</string>
|
||||
</array>
|
||||
<key>UTTypeTagSpecification</key>
|
||||
<dict>
|
||||
<key>public.filename-extension</key>
|
||||
<array>
|
||||
<string>mobi</string>
|
||||
</array>
|
||||
<key>public.mime-type</key>
|
||||
<string>application/x-mobipocket-ebook</string>
|
||||
</dict>
|
||||
</dict>
|
||||
|
||||
<dict>
|
||||
<key>UTTypeIdentifier</key>
|
||||
<string>com.amazon.azw</string>
|
||||
<key>UTTypeDescription</key>
|
||||
<string>AZW Document</string>
|
||||
<key>UTTypeConformsTo</key>
|
||||
<array>
|
||||
<string>public.data</string>
|
||||
</array>
|
||||
<key>UTTypeTagSpecification</key>
|
||||
<dict>
|
||||
<key>public.filename-extension</key>
|
||||
<array>
|
||||
<string>azw</string>
|
||||
<string>azw3</string>
|
||||
</array>
|
||||
<key>public.mime-type</key>
|
||||
<string>application/vnd.amazon.ebook</string>
|
||||
</dict>
|
||||
</dict>
|
||||
|
||||
<dict>
|
||||
<key>UTTypeIdentifier</key>
|
||||
<string>public.plain-text</string>
|
||||
<key>UTTypeDescription</key>
|
||||
<string>Text File</string>
|
||||
<key>UTTypeConformsTo</key>
|
||||
<array>
|
||||
<string>public.data</string>
|
||||
<string>public.content</string>
|
||||
</array>
|
||||
<key>UTTypeTagSpecification</key>
|
||||
<dict>
|
||||
<key>public.filename-extension</key>
|
||||
<array>
|
||||
<string>txt</string>
|
||||
</array>
|
||||
<key>public.mime-type</key>
|
||||
<string>text/plain</string>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
|
||||
<key>UTExportedTypeDeclarations</key>
|
||||
<array>
|
||||
<dict>
|
||||
|
||||
@@ -1,3 +1,65 @@
|
||||
use std::{env, fs, path::PathBuf, process::Command};
|
||||
|
||||
fn main() {
|
||||
println!("cargo:rerun-if-changed=../extensions/windows-thumbnail/src");
|
||||
let target_os = env::var("CARGO_CFG_TARGET_OS").unwrap_or_default();
|
||||
if target_os == "windows" {
|
||||
build_windows_thumbnail();
|
||||
}
|
||||
|
||||
tauri_build::build()
|
||||
}
|
||||
|
||||
fn build_windows_thumbnail() {
|
||||
let manifest_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap());
|
||||
let dll_crate_dir = manifest_dir
|
||||
.join("..")
|
||||
.join("extensions")
|
||||
.join("windows-thumbnail");
|
||||
let dll_crate_manifest = dll_crate_dir.join("Cargo.toml");
|
||||
let profile = env::var("PROFILE").unwrap_or_else(|_| "debug".into());
|
||||
|
||||
let mut cmd = Command::new(env::var("CARGO").unwrap_or("cargo".into()));
|
||||
cmd.arg("build")
|
||||
.arg("--package")
|
||||
.arg("windows_thumbnail")
|
||||
.arg("--manifest-path")
|
||||
.arg(&dll_crate_manifest);
|
||||
|
||||
if profile == "release" {
|
||||
cmd.arg("--release");
|
||||
}
|
||||
|
||||
let target_triple = env::var("TARGET").unwrap_or_default();
|
||||
let host_triple = env::var("HOST").unwrap_or_default();
|
||||
if !target_triple.is_empty() && target_triple != host_triple {
|
||||
cmd.arg("--target").arg(&target_triple);
|
||||
}
|
||||
|
||||
let status = cmd
|
||||
.status()
|
||||
.expect("Failed to run cargo build for windows_thumbnail");
|
||||
if !status.success() {
|
||||
panic!("Failed to build windows_thumbnail DLL");
|
||||
}
|
||||
|
||||
let dll_name = "windows_thumbnail.dll";
|
||||
let candidate_paths = [
|
||||
dll_crate_dir.join("target").join(&profile).join(dll_name),
|
||||
dll_crate_dir
|
||||
.join("target")
|
||||
.join(&target_triple)
|
||||
.join(&profile)
|
||||
.join(dll_name),
|
||||
];
|
||||
|
||||
let dll_src = candidate_paths
|
||||
.iter()
|
||||
.find(|p| p.exists())
|
||||
.expect("Failed to find built windows_thumbnail DLL");
|
||||
|
||||
let dll_dest = &dll_crate_dir.join("target").join(dll_name);
|
||||
|
||||
fs::copy(dll_src, dll_dest).expect("Failed to copy windows_thumbnail DLL");
|
||||
println!("cargo:rerun-if-changed={}", dll_dest.display());
|
||||
}
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"identifier": "webdriver-testing",
|
||||
"description": "Grants plugin permissions to remote URLs for Vitest browser-mode tests. Only loaded at runtime when the webdriver feature is enabled.",
|
||||
"remote": {
|
||||
"urls": ["http://127.0.0.1:*", "http://localhost:*"]
|
||||
},
|
||||
"local": false,
|
||||
"windows": ["main"],
|
||||
"permissions": [
|
||||
"core:default",
|
||||
"fs:default",
|
||||
"fs:read-all",
|
||||
"fs:write-all",
|
||||
"fs:scope-appconfig-recursive",
|
||||
"fs:scope-appdata-recursive",
|
||||
{
|
||||
"identifier": "fs:scope",
|
||||
"allow": [
|
||||
{ "path": "**/.readest-test-sandbox-tauri" },
|
||||
{ "path": "**/.readest-test-sandbox-tauri/**" },
|
||||
{ "path": "**/Readest" },
|
||||
{ "path": "**/Readest/**" }
|
||||
]
|
||||
},
|
||||
"os:default",
|
||||
"dialog:default",
|
||||
"core:window:default",
|
||||
"core:path:allow-resolve-directory",
|
||||
"log:default",
|
||||
"shell:default",
|
||||
"process:default",
|
||||
"turso:default",
|
||||
"native-tts:default",
|
||||
"native-bridge:default"
|
||||
]
|
||||
}
|
||||
@@ -6,6 +6,16 @@
|
||||
"permissions": [
|
||||
"core:default",
|
||||
"fs:default",
|
||||
"fs:read-meta",
|
||||
"fs:allow-open",
|
||||
"fs:allow-write",
|
||||
"fs:allow-read",
|
||||
"fs:allow-rename",
|
||||
"fs:allow-mkdir",
|
||||
"fs:allow-remove",
|
||||
"fs:allow-stat",
|
||||
"fs:allow-fstat",
|
||||
"fs:allow-lstat",
|
||||
{
|
||||
"identifier": "fs:scope-appconfig-recursive",
|
||||
"allow": [
|
||||
@@ -69,6 +79,12 @@
|
||||
},
|
||||
{
|
||||
"path": "**/Readest/**/*"
|
||||
},
|
||||
{
|
||||
"path": "**/com.github.johnfactotum.Foliate/**/*"
|
||||
},
|
||||
{
|
||||
"path": "**/last-book-cover.png"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -113,6 +129,7 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
"websocket:default",
|
||||
"dialog:default",
|
||||
"os:default",
|
||||
"core:window:default",
|
||||
@@ -148,12 +165,35 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"identifier": "shell:allow-spawn",
|
||||
"allow": [
|
||||
{
|
||||
"name": "start-readest",
|
||||
"cmd": "cmd",
|
||||
"args": ["/C", "start", "", { "validator": "^.*Readest(.*)\\.exe$" }]
|
||||
},
|
||||
{
|
||||
"name": "chmod-appimage",
|
||||
"cmd": "chmod",
|
||||
"args": ["+x", { "validator": "^.*Readest(.*)\\.AppImage$" }]
|
||||
},
|
||||
{
|
||||
"name": "launch-appimage",
|
||||
"cmd": "setsid",
|
||||
"args": [{ "validator": "^.*Readest(.*)\\.AppImage$" }]
|
||||
}
|
||||
]
|
||||
},
|
||||
"haptics:allow-vibrate",
|
||||
"haptics:allow-impact-feedback",
|
||||
"haptics:allow-notification-feedback",
|
||||
"haptics:allow-selection-feedback",
|
||||
"native-bridge:default",
|
||||
"deep-link:default",
|
||||
"sharekit:default",
|
||||
"device-info:default",
|
||||
"turso:default",
|
||||
"native-tts:default",
|
||||
"deep-link:default"
|
||||
"native-bridge:default"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:roundIcon="@mipmap/ic_launcher"
|
||||
android:largeHeap="true"
|
||||
android:enableOnBackInvokedCallback="false"
|
||||
android:label="@string/app_name"
|
||||
android:theme="@style/Theme.readest"
|
||||
android:hardwareAccelerated="true"
|
||||
|
||||
+167
-3
@@ -2,20 +2,29 @@ package com.bilingify.readest
|
||||
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import androidx.activity.enableEdgeToEdge
|
||||
import android.view.KeyEvent
|
||||
import android.view.MotionEvent
|
||||
import android.webkit.WebView
|
||||
import android.net.Uri
|
||||
import android.util.Log
|
||||
import android.content.Intent
|
||||
import android.graphics.Color
|
||||
import android.app.ActivityManager
|
||||
import android.content.res.Configuration
|
||||
import android.window.OnBackInvokedCallback
|
||||
import android.window.OnBackInvokedDispatcher
|
||||
import androidx.activity.enableEdgeToEdge
|
||||
import androidx.activity.OnBackPressedCallback
|
||||
import java.util.concurrent.CountDownLatch
|
||||
import java.util.concurrent.TimeUnit
|
||||
import java.util.concurrent.atomic.AtomicBoolean
|
||||
import app.tauri.plugin.JSArray
|
||||
import app.tauri.plugin.JSObject
|
||||
import com.readest.native_bridge.KeyDownInterceptor
|
||||
import com.readest.native_bridge.NativeBridgePlugin
|
||||
|
||||
class MainActivity : TauriActivity(), KeyDownInterceptor {
|
||||
private lateinit var wv: WebView
|
||||
private var wv: WebView? = null
|
||||
private var interceptVolumeKeysEnabled = false
|
||||
private var interceptBackKeyEnabled = false
|
||||
|
||||
@@ -39,10 +48,78 @@ class MainActivity : TauriActivity(), KeyDownInterceptor {
|
||||
interceptBackKeyEnabled = enabled
|
||||
}
|
||||
|
||||
override fun dispatchTouchEvent(event: MotionEvent): Boolean {
|
||||
val action = when (event.actionMasked) {
|
||||
MotionEvent.ACTION_DOWN -> "touchstart"
|
||||
MotionEvent.ACTION_UP -> "touchend"
|
||||
MotionEvent.ACTION_CANCEL -> "touchcancel"
|
||||
MotionEvent.ACTION_POINTER_DOWN -> "touchstart"
|
||||
MotionEvent.ACTION_POINTER_UP -> "touchend"
|
||||
else -> null
|
||||
}
|
||||
|
||||
action?.let { eventType ->
|
||||
val pointerIndex = event.actionIndex
|
||||
val pointerId = event.getPointerId(pointerIndex)
|
||||
val x = event.getX(pointerIndex)
|
||||
val y = event.getY(pointerIndex)
|
||||
val pressure = event.getPressure(pointerIndex)
|
||||
|
||||
wv?.evaluateJavascript(
|
||||
"""
|
||||
try {
|
||||
if (window.onNativeTouch) {
|
||||
window.onNativeTouch({
|
||||
type: "$eventType",
|
||||
pointerId: $pointerId,
|
||||
x: $x,
|
||||
y: $y,
|
||||
pressure: $pressure,
|
||||
pointerCount: ${event.pointerCount},
|
||||
timestamp: ${event.eventTime}
|
||||
});
|
||||
}
|
||||
} catch (err) {
|
||||
console.error('Native touch error:', err);
|
||||
}
|
||||
""".trimIndent(),
|
||||
null
|
||||
)
|
||||
}
|
||||
|
||||
return super.dispatchTouchEvent(event)
|
||||
}
|
||||
|
||||
override fun dispatchKeyEvent(event: KeyEvent): Boolean {
|
||||
if (event.action == KeyEvent.ACTION_DOWN) {
|
||||
val keyCode = event.keyCode
|
||||
val keyName = keyEventMap[keyCode]
|
||||
|
||||
if (keyName != null) {
|
||||
val shouldIntercept = when (keyCode) {
|
||||
KeyEvent.KEYCODE_BACK -> interceptBackKeyEnabled
|
||||
KeyEvent.KEYCODE_VOLUME_UP, KeyEvent.KEYCODE_VOLUME_DOWN -> interceptVolumeKeysEnabled
|
||||
else -> false
|
||||
}
|
||||
|
||||
if (shouldIntercept) {
|
||||
wv?.evaluateJavascript(
|
||||
"""
|
||||
try { window.onNativeKeyDown("$keyName", $keyCode); } catch (_) {}
|
||||
""".trimIndent(),
|
||||
null
|
||||
)
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
return super.dispatchKeyEvent(event)
|
||||
}
|
||||
|
||||
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
|
||||
val keyName = keyEventMap[keyCode]
|
||||
if (keyName != null) {
|
||||
wv.evaluateJavascript(
|
||||
wv?.evaluateJavascript(
|
||||
"""
|
||||
try {
|
||||
window.onNativeKeyDown("$keyName", $keyCode)
|
||||
@@ -82,6 +159,8 @@ class MainActivity : TauriActivity(), KeyDownInterceptor {
|
||||
enableEdgeToEdge()
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
handleIncomingIntent(intent)
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
setTaskDescription(
|
||||
ActivityManager.TaskDescription(
|
||||
@@ -91,5 +170,90 @@ class MainActivity : TauriActivity(), KeyDownInterceptor {
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
|
||||
onBackInvokedDispatcher.registerOnBackInvokedCallback(
|
||||
OnBackInvokedDispatcher.PRIORITY_DEFAULT,
|
||||
OnBackInvokedCallback {
|
||||
Log.d("MainActivity", "Back invoked callback triggered ${interceptBackKeyEnabled}")
|
||||
if (interceptBackKeyEnabled) {
|
||||
Log.d("MainActivity", "Back intercepted (OnBackInvokedCallback)")
|
||||
wv?.evaluateJavascript(
|
||||
"""window.onNativeKeyDown("Back", ${KeyEvent.KEYCODE_BACK});""",
|
||||
null
|
||||
)
|
||||
} else {
|
||||
finish()
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
onBackPressedDispatcher.addCallback(this,
|
||||
object : OnBackPressedCallback(true) {
|
||||
override fun handleOnBackPressed() {
|
||||
if (interceptBackKeyEnabled) {
|
||||
Log.d("MainActivity", "Back intercepted (OnBackPressedDispatcher)")
|
||||
wv?.evaluateJavascript(
|
||||
"""window.onNativeKeyDown("Back", ${KeyEvent.KEYCODE_BACK});""",
|
||||
null
|
||||
)
|
||||
} else {
|
||||
isEnabled = false
|
||||
onBackPressedDispatcher.onBackPressed()
|
||||
}
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
||||
super.onActivityResult(requestCode, resultCode, data)
|
||||
|
||||
NativeBridgePlugin.getInstance()?.handleActivityResult(requestCode, resultCode, data)
|
||||
}
|
||||
|
||||
override fun onNewIntent(intent: Intent) {
|
||||
super.onNewIntent(intent)
|
||||
intent?.let { handleIncomingIntent(it) }
|
||||
}
|
||||
|
||||
private fun handleIncomingIntent(intent: Intent) {
|
||||
when (intent.action) {
|
||||
Intent.ACTION_SEND -> {
|
||||
if (intent.type != null) {
|
||||
handleSingleFile(intent)
|
||||
}
|
||||
}
|
||||
Intent.ACTION_SEND_MULTIPLE -> {
|
||||
if (intent.type != null) {
|
||||
handleMultipleFiles(intent)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleSingleFile(intent: Intent) {
|
||||
val uri = intent.getParcelableExtra<Uri>(Intent.EXTRA_STREAM)
|
||||
uri?.let { fileUri ->
|
||||
val payload = JSObject().apply {
|
||||
var urls = JSArray()
|
||||
urls.put(fileUri.toString())
|
||||
put("urls", urls)
|
||||
}
|
||||
NativeBridgePlugin.getInstance()?.triggerEvent("shared-intent", payload)
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleMultipleFiles(intent: Intent) {
|
||||
val uris = intent.getParcelableArrayListExtra<Uri>(Intent.EXTRA_STREAM)
|
||||
uris?.let { fileUris ->
|
||||
val payload = JSObject().apply {
|
||||
var urls = JSArray()
|
||||
fileUris.forEach { urls.put(it.toString()) }
|
||||
put("urls", urls)
|
||||
}
|
||||
NativeBridgePlugin.getInstance()?.triggerEvent("shared-intent", payload)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,85 @@
|
||||
; Readest NSIS Installer Hooks
|
||||
; Registers/unregisters the thumbnail provider DLL for Windows Explorer thumbnails
|
||||
|
||||
!include "LogicLib.nsh"
|
||||
|
||||
; CLSID for Readest Thumbnail Provider
|
||||
!define CLSID_READEST_THUMBNAIL "{A1B2C3D4-E5F6-7890-ABCD-EF1234567890}"
|
||||
|
||||
; IThumbnailProvider Shell Extension Handler GUID
|
||||
!define SHELL_THUMBNAIL_HANDLER "{e357fccd-a995-4576-b01f-234630154e96}"
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
; NSIS_HOOK_POSTINSTALL - Called after files are installed
|
||||
;------------------------------------------------------------------------------
|
||||
!macro NSIS_HOOK_POSTINSTALL
|
||||
DetailPrint "Registering Readest Thumbnail Provider..."
|
||||
|
||||
; Always do manual registration for reliability
|
||||
; regsvr32 may fail silently if DLL can't find dependencies
|
||||
|
||||
; Register CLSID with full DLL path
|
||||
WriteRegStr HKCR "CLSID\${CLSID_READEST_THUMBNAIL}" "" "Readest Thumbnail Provider"
|
||||
WriteRegStr HKCR "CLSID\${CLSID_READEST_THUMBNAIL}\InprocServer32" "" "$INSTDIR\readest_thumbnail.dll"
|
||||
WriteRegStr HKCR "CLSID\${CLSID_READEST_THUMBNAIL}\InprocServer32" "ThreadingModel" "Apartment"
|
||||
|
||||
; CRITICAL: Disable process isolation - required because we use IInitializeWithItem, not IInitializeWithStream
|
||||
; Without this, Windows runs the handler in an isolated process that can't load the DLL properly
|
||||
WriteRegDWORD HKCR "CLSID\${CLSID_READEST_THUMBNAIL}" "DisableProcessIsolation" 1
|
||||
|
||||
; ========== EPUB ==========
|
||||
; Register thumbnail handler directly on extension (this is what Windows Shell uses)
|
||||
WriteRegStr HKCR ".epub\ShellEx\${SHELL_THUMBNAIL_HANDLER}" "" "${CLSID_READEST_THUMBNAIL}"
|
||||
|
||||
; ========== MOBI ==========
|
||||
WriteRegStr HKCR ".mobi\ShellEx\${SHELL_THUMBNAIL_HANDLER}" "" "${CLSID_READEST_THUMBNAIL}"
|
||||
|
||||
; ========== AZW ==========
|
||||
WriteRegStr HKCR ".azw\ShellEx\${SHELL_THUMBNAIL_HANDLER}" "" "${CLSID_READEST_THUMBNAIL}"
|
||||
|
||||
; ========== AZW3 ==========
|
||||
WriteRegStr HKCR ".azw3\ShellEx\${SHELL_THUMBNAIL_HANDLER}" "" "${CLSID_READEST_THUMBNAIL}"
|
||||
|
||||
; ========== KF8 ==========
|
||||
WriteRegStr HKCR ".kf8\ShellEx\${SHELL_THUMBNAIL_HANDLER}" "" "${CLSID_READEST_THUMBNAIL}"
|
||||
|
||||
; ========== FB2 ==========
|
||||
WriteRegStr HKCR ".fb2\ShellEx\${SHELL_THUMBNAIL_HANDLER}" "" "${CLSID_READEST_THUMBNAIL}"
|
||||
|
||||
; ========== CBZ ==========
|
||||
WriteRegStr HKCR ".cbz\ShellEx\${SHELL_THUMBNAIL_HANDLER}" "" "${CLSID_READEST_THUMBNAIL}"
|
||||
|
||||
; ========== CBR ==========
|
||||
WriteRegStr HKCR ".cbr\ShellEx\${SHELL_THUMBNAIL_HANDLER}" "" "${CLSID_READEST_THUMBNAIL}"
|
||||
|
||||
DetailPrint "Thumbnail provider registered successfully."
|
||||
|
||||
; Refresh shell to apply changes - SHCNE_ASSOCCHANGED
|
||||
System::Call 'shell32::SHChangeNotify(i 0x08000000, i 0, p 0, p 0)'
|
||||
!macroend
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
; NSIS_HOOK_PREUNINSTALL - Called before files are removed
|
||||
;------------------------------------------------------------------------------
|
||||
!macro NSIS_HOOK_PREUNINSTALL
|
||||
DetailPrint "Unregistering Readest Thumbnail Provider..."
|
||||
|
||||
; Remove CLSID
|
||||
DeleteRegKey HKCR "CLSID\${CLSID_READEST_THUMBNAIL}"
|
||||
|
||||
; Remove ShellEx from extensions
|
||||
DeleteRegKey HKCR ".epub\ShellEx\${SHELL_THUMBNAIL_HANDLER}"
|
||||
DeleteRegKey HKCR ".mobi\ShellEx\${SHELL_THUMBNAIL_HANDLER}"
|
||||
DeleteRegKey HKCR ".azw\ShellEx\${SHELL_THUMBNAIL_HANDLER}"
|
||||
DeleteRegKey HKCR ".azw3\ShellEx\${SHELL_THUMBNAIL_HANDLER}"
|
||||
DeleteRegKey HKCR ".kf8\ShellEx\${SHELL_THUMBNAIL_HANDLER}"
|
||||
DeleteRegKey HKCR ".fb2\ShellEx\${SHELL_THUMBNAIL_HANDLER}"
|
||||
DeleteRegKey HKCR ".cbz\ShellEx\${SHELL_THUMBNAIL_HANDLER}"
|
||||
DeleteRegKey HKCR ".cbr\ShellEx\${SHELL_THUMBNAIL_HANDLER}"
|
||||
|
||||
; Delete the DLL file
|
||||
Delete "$INSTDIR\readest_thumbnail.dll"
|
||||
|
||||
; Refresh shell
|
||||
System::Call 'shell32::SHChangeNotify(i 0x08000000, i 0, p 0, p 0)'
|
||||
!macroend
|
||||
+17
@@ -8,6 +8,8 @@ import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
import com.google.android.gms.common.GoogleApiAvailability
|
||||
import com.google.android.gms.common.ConnectionResult
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.*
|
||||
|
||||
@@ -16,12 +18,27 @@ class BillingManager(private val activity: Activity) : PurchasesUpdatedListener
|
||||
private val productsCache = mutableMapOf<String, ProductDetails>()
|
||||
private var purchaseCallback: ((PurchaseData?) -> Unit)? = null
|
||||
private val scope = CoroutineScope(Dispatchers.Main)
|
||||
private val isGooglePlayAvailable: Boolean by lazy {
|
||||
val availability = GoogleApiAvailability.getInstance()
|
||||
val resultCode = availability.isGooglePlayServicesAvailable(activity)
|
||||
resultCode == ConnectionResult.SUCCESS
|
||||
}
|
||||
|
||||
companion object {
|
||||
private const val TAG = "BillingManager"
|
||||
}
|
||||
|
||||
fun isBillingAvailable(): Boolean {
|
||||
return isGooglePlayAvailable
|
||||
}
|
||||
|
||||
fun initialize(callback: (Boolean) -> Unit) {
|
||||
if (!isGooglePlayAvailable) {
|
||||
Log.d(TAG, "Google Play Services not available, skipping billing setup")
|
||||
callback(false)
|
||||
return
|
||||
}
|
||||
|
||||
billingClient = BillingClient.newBuilder(activity)
|
||||
.setListener(this)
|
||||
.enablePendingPurchases()
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user