From 43f72720f2e7b87cc26246073b2189fbd19e3bb0 Mon Sep 17 00:00:00 2001 From: Huang Xin Date: Tue, 5 May 2026 15:20:44 +0800 Subject: [PATCH] feat(i18n): add Uzbek and Brazilian Portuguese translations (#4061) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(i18n): add Uzbek (Oʻzbek) translation Adds `uz` as a first-class supported locale across the Readest app and the readest.koplugin companion. Also refactors the supported locale set to source from a single ground-truth file (`apps/readest-app/i18n-langs.json`) consumed by both the i18next runtime and the i18next-scanner config, and replaces a NUL-byte sentinel in `extract-i18n.js#unescapePo` with a single-pass regex so git no longer treats the script as binary. Closes #4053 Co-Authored-By: Claude Opus 4.7 (1M context) * feat(i18n): add Brazilian Portuguese (pt-BR) translation Adds `pt-BR` as a regional variant supported alongside `pt`. Falls back to `pt` then `en` for any future missing keys, so European Portuguese gracefully covers gaps. Translations follow Brazilian conventions (arquivo / tela / excluir / salvar / baixar / senha, gerundive verb forms) rather than verbatim copying the European catalog. Co-Authored-By: Claude Opus 4.7 (1M context) --------- Co-authored-by: Claude Opus 4.7 (1M context) --- .../.claude/skills/i18n-koplugin/SKILL.md | 111 ++ apps/readest-app/docs/i18n.md | 24 + apps/readest-app/i18n-langs.json | 35 + apps/readest-app/i18next-scanner.config.cjs | 36 +- .../public/locales/pt-BR/translation.json | 1355 +++++++++++++++++ .../public/locales/uz/translation.json | 1332 ++++++++++++++++ apps/readest-app/src/i18n/i18n.ts | 41 +- apps/readest-app/src/services/constants.ts | 2 + .../locales/pt-BR/translation.po | 438 ++++++ .../locales/uz/translation.po | 438 ++++++ apps/readest.koplugin/scripts/extract-i18n.js | Bin 10099 -> 10194 bytes 11 files changed, 3743 insertions(+), 69 deletions(-) create mode 100644 apps/readest-app/.claude/skills/i18n-koplugin/SKILL.md create mode 100644 apps/readest-app/i18n-langs.json create mode 100644 apps/readest-app/public/locales/pt-BR/translation.json create mode 100644 apps/readest-app/public/locales/uz/translation.json create mode 100644 apps/readest.koplugin/locales/pt-BR/translation.po create mode 100644 apps/readest.koplugin/locales/uz/translation.po diff --git a/apps/readest-app/.claude/skills/i18n-koplugin/SKILL.md b/apps/readest-app/.claude/skills/i18n-koplugin/SKILL.md new file mode 100644 index 00000000..eaf90aad --- /dev/null +++ b/apps/readest-app/.claude/skills/i18n-koplugin/SKILL.md @@ -0,0 +1,111 @@ +--- +name: i18n-koplugin +description: > + Extract i18n strings from readest.koplugin Lua sources and translate empty + msgstrs in apps/readest.koplugin/locales. Use when the user invokes + /i18n-koplugin or asks to extract/translate koplugin i18n strings. + Runs scripts/extract-i18n.js to sync .po catalogs from `_("...")` calls, + then fills any empty `msgstr ""` entries across all locale files. +user_invocable: true +--- + +Extract/translate i18n strings for `readest.koplugin`. The catalogs are gettext `.po` files (not JSON like the main app). Run from the repo root or any worktree — the script resolves paths relative to the plugin dir. + +## Step 1: Determine the working directory + +If currently in a PR worktree (e.g., `/Users/chrox/dev/readest-pr-*`), use that. Otherwise use the main repo. The plugin dir is `/apps/readest.koplugin`. + +## Step 2: Extract msgids from Lua sources + +```bash +cd /apps/readest.koplugin +node scripts/extract-i18n.js +``` + +This scans every `*.lua` file under `apps/readest.koplugin/` (except `spec/` and dotdirs) for `_("...")` and `_([[...]])` calls, then for each language listed in `apps/readest-app/i18next-scanner.config.cjs`: + +- appends new msgids with empty `msgstr ""` +- preserves existing translations +- drops obsolete msgids +- rewrites the `.po` header (Plural-Forms etc.) + +The output prints ` / (- obsolete)` per locale. + +## Step 3: Find untranslated entries + +An untranslated entry is a non-empty `msgid` followed by an empty `msgstr ""` (the file's header pair `msgid ""` / `msgstr ""` is NOT a translation — skip it). + +```bash +cd /apps/readest.koplugin/locales +# List locales that still have untranslated strings, with counts +for f in */translation.po; do + # Count empty msgstrs that follow a non-empty msgid + n=$(awk ' + /^msgid "/ { msgid=$0; next } + /^msgstr ""$/ { if (msgid != "msgid \"\"") c++; next } + ' "$f") + [ "$n" -gt 0 ] && echo "$f: $n untranslated" +done +``` + +If no results, report that all strings are translated and stop. + +To list the actual untranslated msgids in one locale: + +```bash +awk ' + /^msgid "/ { msgid=$0; next } + /^msgstr ""$/ { if (msgid != "msgid \"\"") print msgid; next } +' /apps/readest.koplugin/locales//translation.po +``` + +## Step 4: Translate empty msgstrs + +For each empty `msgstr ""` found: + +1. Read the preceding `msgid "..."` — that's the English source string. +2. Identify the target locale from the file path (e.g., `locales/ja/translation.po` → Japanese; see table below). +3. Provide an accurate translation. Use the locale reference table for the language; match the tone/terminology already used in the same file (check existing translated entries for context). +4. Preserve `printf`-style placeholders verbatim: `%s`, `%d`, `%1$s`, `%(name)s`, etc. +5. Preserve newlines as `\n`, tabs as `\t`, and escape `"` as `\"` and backslashes as `\\` inside the msgstr. + +Edit the `.po` files directly with the Edit tool — do NOT use sed for this, because msgids may contain characters that confuse shell quoting. Each replacement should target the unique `msgid ""\nmsgstr ""` block: + +Old: +``` +msgid "" +msgstr "" +``` + +New: +``` +msgid "" +msgstr "" +``` + +Batch all locales for the same key together when possible — keeps the translation set consistent. + +### Locale reference + +The supported language set is **not hardcoded in this skill**. The ground truth is `apps/readest-app/i18n-langs.json` — both `i18next-scanner.config.cjs` (via `require`) and `src/i18n/i18n.ts` (via JSON import) source from it, and `extract-i18n.js` reads `lngs` from the scanner config at runtime. To list the current set: + +```bash +cat /apps/readest-app/i18n-langs.json +``` + +Map each code to a language name when translating. If a code in `i18n-langs.json` is missing from the `LANG_META` table inside `extract-i18n.js`, the script prints ` skipped (no metadata in extract-i18n.js)` — in that case, add the metadata entry there first, then re-run extraction. + +## Step 5: Verify + +Re-run the count loop from Step 3 and confirm zero untranslated strings remain. Report: + +- number of msgids extracted +- per-locale count of strings translated +- any locales that were already complete + +Optionally, run the koplugin Lua tests if `busted`/`luajit` are installed: + +```bash +cd /apps/readest-app +pnpm test:lua +``` diff --git a/apps/readest-app/docs/i18n.md b/apps/readest-app/docs/i18n.md index 6e88d918..401ced15 100644 --- a/apps/readest-app/docs/i18n.md +++ b/apps/readest-app/docs/i18n.md @@ -41,6 +41,30 @@ pnpm i18n:extract # Scans codebase, adds new keys with __STRING_NOT_TRANSLATE - Translation files: `public/locales//translation.json` - Only `_('KEY')` and `_('KEY', options)` patterns are recognized by i18next-scanner +### Adding a New Translation Language + +The supported language set has a single ground truth: [`i18n-langs.json`](../i18n-langs.json). Both the i18next runtime (`src/i18n/i18n.ts`) and the extractor (`i18next-scanner.config.cjs`) read from it, so adding a locale is a two-file change plus a translation pass. + +1. **Add the locale code** to [`i18n-langs.json`](../i18n-langs.json). Use the exact code i18next will emit (e.g. `hu`, `zh-CN`). Do not add `en` — it's the source language and lives outside this list. + +2. **Add a display label** to `TRANSLATED_LANGS` in [`src/services/constants.ts`](../src/services/constants.ts). The key is the locale code, the value is the language's native name (e.g. `hu: 'Magyar'`). This is what users see in the language picker. + +3. **Generate the translation file**: + + ```bash + pnpm i18n:extract + ``` + + This creates `public/locales//translation.json` with every key set to `__STRING_NOT_TRANSLATED__`. + +4. **Translate** every `__STRING_NOT_TRANSLATED__` placeholder in the new file. The `/i18n` skill automates this; the singular `en/translation.json` only holds plural variants and proper nouns, so use the JSON keys themselves as the English source. + +5. **Verify** with `grep -r "__STRING_NOT_TRANSLATED__" public/locales//` — the result should be empty. + +6. **Translate the KOReader companion plugin** (`apps/readest.koplugin`). It pulls the locale set from the same `i18n-langs.json` via the scanner config, but the catalog format is gettext `.po`, not JSON. Steps: + - Add a `LANG_META` entry (label + Plural-Forms) for the new code in [`apps/readest.koplugin/scripts/extract-i18n.js`](../../readest.koplugin/scripts/extract-i18n.js). Without it the extractor prints ` skipped (no metadata in extract-i18n.js)` and the catalog is never created. + - Trigger the `/i18n-koplugin` skill to run extraction and fill every empty `msgstr ""` in `apps/readest.koplugin/locales//translation.po`. + ### Rules - `stubTranslation` is for extraction only — always apply `_()` from `useTranslation` in the component for runtime translation. diff --git a/apps/readest-app/i18n-langs.json b/apps/readest-app/i18n-langs.json new file mode 100644 index 00000000..a062fcee --- /dev/null +++ b/apps/readest-app/i18n-langs.json @@ -0,0 +1,35 @@ +[ + "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", + "ro", + "hu", + "uz", + "pt-BR", + "zh-CN", + "zh-TW" +] diff --git a/apps/readest-app/i18next-scanner.config.cjs b/apps/readest-app/i18next-scanner.config.cjs index c8f36886..76422c12 100644 --- a/apps/readest-app/i18next-scanner.config.cjs +++ b/apps/readest-app/i18next-scanner.config.cjs @@ -1,3 +1,5 @@ +const lngs = require('./i18n-langs.json'); + const options = { debug: false, sort: false, @@ -5,39 +7,7 @@ const options = { 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', - 'ro', - 'hu', - ], + lngs, ns: ['translation'], defaultNs: 'translation', defaultValue: '__STRING_NOT_TRANSLATED__', diff --git a/apps/readest-app/public/locales/pt-BR/translation.json b/apps/readest-app/public/locales/pt-BR/translation.json new file mode 100644 index 00000000..74217d9c --- /dev/null +++ b/apps/readest-app/public/locales/pt-BR/translation.json @@ -0,0 +1,1355 @@ +{ + "Email address": "Endereço de e-mail", + "Your Password": "Sua senha", + "Your email address": "Seu endereço de e-mail", + "Your password": "Sua senha", + "Sign in": "Entrar", + "Signing in...": "Entrando...", + "Sign in with {{provider}}": "Entrar com {{provider}}", + "Already have an account? Sign in": "Já tem uma conta? Entrar", + "Create a Password": "Crie uma senha", + "Sign up": "Cadastrar-se", + "Signing up...": "Cadastrando...", + "Don't have an account? Sign up": "Não tem uma conta? Cadastre-se", + "Check your email for the confirmation link": "Verifique seu e-mail para o link de confirmação", + "Signing in ...": "Entrando ...", + "Send a magic link email": "Enviar um link mágico por e-mail", + "Check your email for the magic link": "Verifique seu e-mail para o link mágico", + "Send reset password instructions": "Enviar instruções para redefinir a senha", + "Sending reset instructions ...": "Enviando instruções para redefinir a senha ...", + "Forgot your password?": "Esqueceu sua senha?", + "Check your email for the password reset link": "Verifique seu e-mail para o link de redefinição de senha", + "Phone number": "Número de telefone", + "Your phone number": "Seu número de telefone", + "Token": "Token", + "Your OTP token": "Seu token OTP", + "Verify token": "Verificar token", + "Go Back": "Voltar", + "New Password": "Nova senha", + "Your new password": "Sua nova senha", + "Update password": "Atualizar senha", + "Updating password ...": "Atualizando senha ...", + "Your password has been updated": "Sua senha foi atualizada", + "Back": "Voltar", + "Confirmation email sent! Please check your old and new email addresses to confirm the change.": "E-mail de confirmação enviado! Verifique seus endereços de e-mail antigo e novo para confirmar a alteração.", + "Failed to update email": "Falha ao atualizar o e-mail", + "New Email": "Novo e-mail", + "Your new email": "Seu novo e-mail", + "Updating email ...": "Atualizando e-mail ...", + "Update email": "Atualizar e-mail", + "Current email": "E-mail atual", + "Something went wrong. Don't worry, our team has been notified and we're working on a fix.": "Algo deu errado. Não se preocupe, nossa equipe foi notificada e estamos trabalhando em uma correção.", + "Error Details:": "Detalhes do erro:", + "Try Again": "Tentar novamente", + "Your Library": "Sua biblioteca", + "Need help?": "Precisa de ajuda?", + "Contact Support": "Contato com o suporte", + "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": "A operação falhou", + "Close": "Fechar", + "Cancel": "Cancelar", + "Show Book Details": "Mostrar detalhes do livro", + "Upload Book": "Enviar livro", + "Download Book": "Baixar livro", + "Sign in to share books": "Entre para compartilhar livros", + "Import Books": "Importar livros", + "Bookshelf": "Estante de livros", + "Confirm Deletion": "Confirmar exclusão", + "Are you sure to delete {{count}} selected book(s)?_one": "Tem certeza de que deseja excluir {{count}} livro selecionado?", + "Are you sure to delete {{count}} selected book(s)?_many": "Tem certeza de que deseja excluir {{count}} livros selecionados?", + "Are you sure to delete {{count}} selected book(s)?_other": "Tem certeza de que deseja excluir {{count}} livros selecionados?", + "Deselect Book": "Desmarcar livro", + "Select Book": "Selecionar livro", + "Group Books": "Agrupar livros", + "Mark as Finished": "Marcar como concluído", + "Mark as Unread": "Marcar como não lido", + "Clear Status": "Limpar status", + "Share Book": "Compartilhar livro", + "Delete": "Excluir", + "Deselect Group": "Desmarcar grupo", + "Select Group": "Selecionar grupo", + "Series": "Série", + "Author": "Autor", + "Group": "Grupo", + "Back to library": "Voltar à biblioteca", + "Untitled Group": "Grupo sem título", + "Remove From Group": "Remover do grupo", + "Create New Group": "Criar novo grupo", + "Rename Group": "Renomear grupo", + "Save": "Salvar", + "All": "Todos", + "Confirm": "Confirmar", + "Scroll left": "Rolar para a esquerda", + "Scroll right": "Rolar para a direita", + "From Local File": "Do arquivo local", + "From Directory": "Do diretório", + "Online Library": "Biblioteca online", + "OPDS Catalogs": "Catálogos OPDS", + "Search in {{count}} Book(s)..._one": "Pesquisar em {{count}} livro...", + "Search in {{count}} Book(s)..._many": "Pesquisar em {{count}} livros...", + "Search in {{count}} Book(s)..._other": "Pesquisar em {{count}} livros...", + "Search Books...": "Procurar livros...", + "Clear Search": "Limpar pesquisa", + "Select Books": "Selecionar livros", + "Deselect": "Desmarcar", + "Select All": "Selecionar tudo", + "View Menu": "Ver menu", + "Settings Menu": "Menu de configurações", + "Failed to select directory": "Falha ao selecionar diretório", + "The new data directory must be different from the current one.": "O novo diretório de dados deve ser diferente do atual.", + "Migration failed: {{error}}": "A migração falhou: {{error}}", + "Change Data Location": "Alterar local dos dados", + "Current Data Location": "Local atual dos dados", + "Loading...": "Carregando...", + "File count: {{size}}": "Contagem de arquivos: {{size}}", + "Total size: {{size}}": "Tamanho total: {{size}}", + "Calculating file info...": "Calculando informações do arquivo...", + "New Data Location": "Novo local dos dados", + "Choose New Folder": "Escolher nova pasta", + "Choose Different Folder": "Escolher pasta diferente", + "Migrating data...": "Migrando dados...", + "Copying: {{file}}": "Copiando: {{file}}", + "{{current}} of {{total}} files": "{{current}} de {{total}} arquivos", + "Migration completed successfully!": "Migração concluída com sucesso!", + "Your data has been moved to the new location. Please restart the application to complete the process.": "Seus dados foram movidos para o novo local. Reinicie o aplicativo para concluir o processo.", + "Migration failed": "A migração falhou", + "Important Notice": "Aviso importante", + "This will move all your app data to the new location. Make sure the destination has enough free space.": "Isso moverá todos os dados do seu aplicativo para o novo local. Certifique-se de que o destino tenha espaço livre suficiente.", + "Restart App": "Reiniciar aplicativo", + "Start Migration": "Iniciar migração", + "Finished": "Concluído", + "Unread": "Não lido", + "Open": "Abrir", + "Status": "Status", + "Details": "Detalhes", + "Set status for {{count}} book(s)_one": "Definir status para {{count}} livro", + "Set status for {{count}} book(s)_many": "Definir status para {{count}} livros", + "Set status for {{count}} book(s)_other": "Definir status para {{count}} livros", + "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", + "Dark Mode": "Modo escuro", + "Light Mode": "Modo claro", + "Auto Mode": "Modo automático", + "Logged in as {{userDisplayName}}": "Conectado como {{userDisplayName}}", + "Logged in": "Conectado", + "View account details and quota": "Ver detalhes da conta e cota", + "Cloud File Transfers": "Transferências de arquivos na nuvem", + "{{activeCount}} active, {{pendingCount}} pending": "{{activeCount}} ativos, {{pendingCount}} pendentes", + "{{failedCount}} failed": "{{failedCount}} falharam", + "Synced {{time}}": "Sincronizado {{time}}", + "Never synced": "Nunca sincronizado", + "Account": "Conta", + "Sign In": "Entrar", + "Auto Upload Books to Cloud": "Enviar livros para a nuvem automaticamente", + "Auto Import on File Open": "Importação automática ao abrir arquivo", + "Open Last Book on Start": "Abrir o último livro ao iniciar", + "Check Updates on Start": "Verificar atualizações ao iniciar", + "Open Book in New Window": "Abrir livro em nova janela", + "Fullscreen": "Tela cheia", + "Always on Top": "Sempre no topo", + "Always Show Status Bar": "Sempre exibir a barra de status", + "Background Read Aloud": "Leitura em segundo plano", + "Settings": "Configurações", + "Advanced Settings": "Configurações avançadas", + "Refresh Metadata": "Atualizar metadados", + "Save Book Cover": "Salvar capa do livro", + "Auto-save last book cover": "Salvar automaticamente a última capa do livro", + "Upgrade to Readest Premium": "Atualizar para Readest Premium", + "Download Readest": "Baixar Readest", + "About Readest": "Sobre o Readest", + "Help improve Readest": "Ajude a melhorar o Readest", + "Sharing anonymized statistics": "Compartilhando estatísticas anônimas", + "Could not create share link": "Não foi possível criar o link de compartilhamento", + "Link copied": "Link copiado", + "Could not copy link": "Não foi possível copiar o link", + "Share revoked": "Compartilhamento revogado", + "Could not revoke share": "Não foi possível revogar o compartilhamento", + "Expires in": "Expira em", + "{{count}} days_one": "1 dia", + "{{count}} days_many": "{{count}} dias", + "{{count}} days_other": "{{count}} dias", + "Share reading progress": "Compartilhar progresso de leitura", + "Uploading book…": "Enviando livro…", + "Generating…": "Gerando…", + "Generate share link": "Gerar link de compartilhamento", + "Includes your reading progress": "Inclui seu progresso de leitura", + "Share URL": "URL de compartilhamento", + "Copy link": "Copiar link", + "Copied": "Copiado", + "Copy": "Copiar", + "Share via…": "Compartilhar via…", + "Expires {{date}}": "Expira em {{date}}", + "Revoking…": "Revogando…", + "Revoke share": "Revogar compartilhamento", + "Uploaded": "Enviado", + "Downloaded": "Baixado", + "Deleted": "Excluído", + "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", + "List": "Lista", + "Grid": "Grade", + "Crop": "Cortar", + "Fit": "Ajustar", + "Authors": "Autores", + "Books": "Livros", + "Groups": "Grupos", + "Title": "Título", + "Format": "Formato", + "Date Read": "Data de leitura", + "Date Added": "Data de adição", + "Date Published": "Data de publicação", + "Ascending": "Crescente", + "Descending": "Decrescente", + "Columns": "Colunas", + "Auto": "Automático", + "Book Covers": "Capas de livros", + "Group by...": "Agrupar por...", + "Sort by...": "Ordenar por...", + "{{count}} book(s) synced_one": "{{count}} livro sincronizado", + "{{count}} book(s) synced_many": "{{count}} livros sincronizados", + "{{count}} book(s) synced_other": "{{count}} livros sincronizados", + "No supported files found. Supported formats: {{formats}}": "Nenhum arquivo suportado encontrado. Formatos suportados: {{formats}}", + "Failed to import book(s): {{filenames}}": "Falha ao importar livro(s): {{filenames}}", + "Successfully imported {{count}} book(s)_one": "Importado com sucesso {{count}} livro", + "Successfully imported {{count}} book(s)_many": "Importados com sucesso {{count}} livros", + "Successfully imported {{count}} book(s)_other": "Importados com sucesso {{count}} livros", + "Upload queued: {{title}}": "Upload na fila: {{title}}", + "Book downloaded: {{title}}": "Livro baixado: {{title}}", + "Failed to download book: {{title}}": "Falha ao baixar livro: {{title}}", + "Download queued: {{title}}": "Download na fila: {{title}}", + "Book deleted: {{title}}": "Livro excluído: {{title}}", + "Deleted cloud backup of the book: {{title}}": "Backup na nuvem do livro excluído: {{title}}", + "Deleted local copy of the book: {{title}}": "Cópia local do livro excluída: {{title}}", + "Failed to delete book: {{title}}": "Falha ao excluir livro: {{title}}", + "Failed to delete cloud backup of the book: {{title}}": "Falha ao excluir backup na nuvem do livro: {{title}}", + "Failed to delete local copy of the book: {{title}}": "Falha ao excluir cópia local do livro: {{title}}", + "Library Header": "Cabeçalho da biblioteca", + "Library Sync Progress": "Progresso de sincronização da biblioteca", + "Your Bookshelf": "Sua estante", + "Welcome to your library. You can import your books here and read them anytime.": "Bem-vindo à sua biblioteca. Você pode importar seus livros aqui e lê-los a qualquer momento.", + "This link can't be opened": "Não foi possível abrir este link", + "The annotation link is missing required information. The original link may have been truncated.": "Faltam informações necessárias no link da anotação. O link original pode ter sido truncado.", + "Go to Readest": "Ir para o Readest", + "Open-source ebook reader for everyone, on every device.": "Leitor de e-books de código aberto para todos, em qualquer dispositivo.", + "Open in Readest": "Abrir no Readest", + "If Readest didn't open automatically, choose an option below:": "Se o Readest não abriu automaticamente, escolha uma opção abaixo:", + "Continue reading where you left off.": "Continue lendo de onde parou.", + "Readest logo": "Logotipo do Readest", + "Opening Readest...": "Abrindo o Readest...", + "Open in Readest app": "Abrir no app Readest", + "Continue in browser": "Continuar no navegador", + "Don't have Readest?": "Ainda não tem o Readest?", + "Download": "Baixar", + "URL must start with http:// or https://": "A URL deve começar com http:// ou https://", + "Adding LAN addresses is not supported in the web app version.": "Adicionar endereços LAN não é suportado na versão web.", + "Please confirm that this OPDS connection will be proxied through Readest servers on the web app before continuing.": "Confirme que esta conexão OPDS será encaminhada através dos servidores Readest no aplicativo web antes de continuar.", + "Invalid OPDS catalog. Please check the URL.": "Catálogo OPDS inválido. Verifique a URL.", + "Browse and download books from online catalogs": "Navegue e baixe 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", + "Edit": "Editar", + "Remove": "Remover", + "Username": "Nome de usuário", + "Custom Headers": "Cabeçalhos personalizados", + "Auto-download": "Download automático", + "Last synced {{when}}": "Última sincronização {{when}}", + "{{count}} failed_one": "{{count}} falhou", + "{{count}} failed_many": "{{count}} falharam", + "{{count}} failed_other": "{{count}} falharam", + "Browse": "Navegar", + "Popular Catalogs": "Catálogos populares", + "Add": "Adicionar", + "Edit OPDS Catalog": "Editar catálogo OPDS", + "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)", + "Password": "Senha", + "Custom Headers (optional)": "Cabeçalhos personalizados (opcional)", + "Add one header per line using \"Header-Name: value\".": "Adicione um cabeçalho por linha usando \"Header-Name: value\".", + "I understand this OPDS connection will be proxied through Readest servers on the web app. If I do not trust Readest with these credentials or headers, I should use the native app instead.": "Entendo que esta conexão OPDS será encaminhada através dos servidores Readest no aplicativo web. Se eu não confio no Readest com essas credenciais ou cabeçalhos, devo usar o aplicativo nativo.", + "Description (optional)": "Descrição (opcional)", + "A brief description of this catalog": "Uma breve descrição deste catálogo", + "Auto-download new items": "Baixar novos itens automaticamente", + "Automatically download new publications when the app syncs": "Baixe automaticamente novas publicações quando o aplicativo sincronizar", + "Validating...": "Validando...", + "Save Changes": "Salvar alterações", + "Failed downloads": "Downloads falhados", + "No failed downloads": "Nenhum download falhado", + "Attempts: {{count}}_one": "Tentativas: {{count}}", + "Attempts: {{count}}_many": "Tentativas: {{count}}", + "Attempts: {{count}}_other": "Tentativas: {{count}}", + "Skip": "Ignorar", + "Skip all": "Ignorar tudo", + "Retry all": "Tentar tudo novamente", + "View All": "Ver todos", + "First": "Primeira", + "Previous": "Anterior", + "Next": "Próxima", + "Last": "Última", + "Forward": "Avançar", + "Home": "Início", + "Search in OPDS Catalog...": "Pesquisar no catálogo OPDS...", + "Untitled": "Sem título", + "{{count}} items_one": "{{count}} item", + "{{count}} items_many": "{{count}} itens", + "{{count}} items_other": "{{count}} itens", + "Open Access": "Acesso aberto", + "Download completed": "Download concluído", + "Import failed": "Falha na importação", + "Download failed": "Falha no download", + "Borrow": "Emprestar", + "Buy": "Comprar", + "Subscribe": "Assinar", + "Sample": "Amostra", + "Open & Read": "Abrir e ler", + "Read (Stream)": "Ler (Streaming)", + "Publisher": "Editora", + "Published": "Publicado", + "Language": "Idioma", + "Identifier": "Identificador", + "Tags": "Etiquetas", + "Tag": "Etiqueta", + "Title, Author, Tag, etc...": "Título, autor, etiqueta, etc...", + "Query": "Consulta", + "Subject": "Assunto", + "Count": "Contagem", + "Start Page": "Página inicial", + "Search": "Buscar", + "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}}", + "Failed to start stream": "Falha ao iniciar o streaming", + "Cannot Load Page": "Não foi possível carregar a página", + "An error occurred": "Ocorreu um erro", + "Reload Page": "Recarregar página", + "Copy text after selection": "Copiar texto após a seleção", + "Highlight": "Destacar", + "Highlight text after selection": "Destacar texto após a seleção", + "Annotate": "Anotar", + "Annotate text after selection": "Anotar texto após a seleção", + "Search text after selection": "Pesquisar texto após a seleção", + "Dictionary": "Dicionário", + "Look up text in dictionary after selection": "Procurar texto no dicionário após a seleção", + "Translate": "Traduzir", + "Translate text after selection": "Traduzir texto após a seleção", + "Speak": "Falar", + "Read text aloud after selection": "Ler texto em voz alta após a seleção", + "Proofread": "Revisar", + "Proofread text after selection": "Revisar texto após a seleção", + "Copied to notebook": "Copiado para o caderno", + "Word limit of 30 words exceeded.": "O limite de 30 palavras foi excedido.", + "No annotations to export": "Nenhuma anotação para exportar", + "Exported successfully": "Exportado com sucesso", + "Copied to clipboard": "Copiado para a área de transferência", + "Delete Highlight": "Excluir destaque", + "No dictionaries enabled": "Nenhum dicionário ativado", + "Enable a dictionary in Settings → Language → Dictionaries.": "Ative um dicionário em Configurações → Idioma → Dicionários.", + "Manage Dictionaries": "Gerenciar dicionários", + "No definitions found": "Nenhuma definição encontrada", + "Search for {{word}} on the web.": "Pesquisar {{word}} na web.", + "Dictionary unsupported": "Dicionário não suportado", + "This dictionary format is not supported yet.": "Este formato de dicionário ainda não é suportado.", + "Error": "Erro", + "Unable to load the word.": "Não foi possível carregar a palavra.", + "Exported from Readest": "Exportado do Readest", + "Highlights & Annotations": "Destaques e anotações", + "Note:": "Nota:", + "Page:": "Página:", + "Time:": "Hora:", + "Note": "Nota", + "Page: {{number}}": "Página: {{number}}", + "Export Annotations": "Exportar anotações", + "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", + "Notes": "Notas", + "Page Number": "Número da página", + "Note Date": "Data da nota", + "Advanced": "Avançado", + "Hide": "Ocultar", + "Show": "Mostrar", + "Use Custom Template": "Usar modelo personalizado", + "Export Template": "Modelo de exportação", + "Reset Template": "Redefinir modelo", + "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", + "Annotation style": "Estilo de anotação", + "Annotation color": "Cor da anotação", + "Annotation page number": "Número de página da anotação", + "Annotation time": "Hora da anotação", + "Available Formatters:": "Formatadores disponíveis:", + "Format date": "Formatar data", + "Markdown block quote (> per line)": "Citação Markdown (> por linha)", + "Newlines to
": "Quebras de linha para
", + "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", + "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)", + "Preview": "Visualizar", + "Show Source": "Mostrar fonte", + "No content to preview": "Sem conteúdo para visualizar", + "Export as Plain Text": "Exportar como texto simples", + "Export as Markdown": "Exportar como Markdown", + "Export": "Exportar", + "highlight": "destaque", + "underline": "sublinhado", + "squiggly": "ondulado", + "red": "vermelho", + "yellow": "amarelo", + "green": "verde", + "blue": "azul", + "violet": "violeta", + "Select {{style}} style": "Selecionar estilo {{style}}", + "Select {{color}} color": "Selecionar cor {{color}}", + "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...": "Insira o texto...", + "Apply": "Aplicar", + "Case sensitive:": "Diferenciar maiúsculas e minúsculas:", + "Whole word:": "Palavra inteira:", + "Only for TTS:": "Apenas para TTS:", + "Scope:": "Escopo:", + "Instant {{action}} Disabled": "{{action}} instantâneo desativado", + "Annotation": "Anotação", + "Instant {{action}}": "{{action}} instantâneo", + "Unable to fetch the translation. Please log in first and try again.": "Não foi possível buscar a tradução. Faça login primeiro e tente novamente.", + "Unable to fetch the translation. Try again later.": "Não foi possível buscar a tradução. Tente novamente mais tarde.", + "Original Text": "Texto original", + "Auto Detect": "Detectar automaticamente", + "(detected)": "(detectado)", + "Translated Text": "Texto traduzido", + "System Language": "Idioma do sistema", + "No translation available.": "Sem tradução disponível.", + "Translated by {{provider}}.": "Traduzido por {{provider}}.", + "Remove Bookmark": "Remover marcador", + "Add Bookmark": "Adicionar marcador", + "Books Content": "Conteúdo dos livros", + "Skip to last reading position": "Ir para a última posição de leitura", + "End of this section. Continue to the next.": "Fim desta seção. Continuar para a próxima.", + "Book Content": "Conteúdo do livro", + "Screen Brightness": "Brilho da tela", + "Color": "Cor", + "Previous Section": "Seção anterior", + "Previous Page": "Página anterior", + "Go Forward": "Avançar", + "Reading Progress": "Progresso de leitura", + "Jump to Location": "Ir para localização", + "Next Page": "Próxima página", + "Next Section": "Próxima seção", + "Font Size": "Tamanho da fonte", + "Page Margin": "Margem da página", + "Small": "Pequeno", + "Large": "Grande", + "Line Spacing": "Espaçamento de linha", + "Footer Bar": "Barra de rodapé", + "Table of Contents": "Sumário", + "Font & Layout": "Fonte e layout", + "Unable to connect to Hardcover. Please check your network connection.": "Não foi possível conectar ao Hardcover. Verifique sua conexão de rede.", + "Invalid Hardcover API token": "Token de API do Hardcover inválido", + "Disconnected from Hardcover": "Desconectado do Hardcover", + "Never": "Nunca", + "Hardcover Settings": "Configurações do Hardcover", + "Connected to Hardcover": "Conectado ao Hardcover", + "Last synced: {{time}}": "Última sincronização: {{time}}", + "Sync Enabled": "Sincronização ativada", + "Disconnect": "Desconectar", + "Connect your Hardcover account to sync reading progress and notes.": "Conecte sua conta Hardcover para sincronizar o progresso de leitura e as notas.", + "Get your API token from hardcover.app → Settings → API.": "Obtenha seu token de API em hardcover.app → Configurações → API.", + "API Token": "Token de API", + "Paste your Hardcover API token": "Cole seu token de API do Hardcover", + "Connect": "Conectar", + "Header Bar": "Barra de cabeçalho", + "Go to Library": "Ir para a biblioteca", + "Disable Quick Action": "Desativar ação rápida", + "Enable Quick Action on Selection": "Ativar ação rápida na seleção", + "View Options": "Opções de visualização", + "Close Book": "Fechar livro", + "Image viewer": "Visualizador de imagens", + "Previous Image": "Imagem anterior", + "Next Image": "Próxima imagem", + "Zoomed": "Com zoom", + "Zoom level": "Nível de zoom", + "Sync Conflict": "Conflito de sincronização", + "Sync reading progress from \"{{deviceName}}\"?": "Sincronizar progresso de leitura de \"{{deviceName}}\"?", + "another device": "outro dispositivo", + "Local Progress": "Progresso local", + "Remote Progress": "Progresso remoto", + "Failed to connect": "Falha ao conectar", + "Disconnected": "Desconectado", + "KOReader Sync Settings": "Configurações de sincronização KOReader", + "Sync as {{userDisplayName}}": "Sincronizar como {{userDisplayName}}", + "Sync Server Connected": "Servidor de sincronização conectado", + "Sync Strategy": "Estratégia de sincronização", + "Ask on conflict": "Perguntar em caso de conflito", + "Always use latest": "Sempre usar o mais recente", + "Send changes only": "Enviar apenas alterações", + "Receive changes only": "Receber apenas alterações", + "Checksum Method": "Método de verificação", + "File Content (recommended)": "Conteúdo do arquivo (recomendado)", + "File Name": "Nome do arquivo", + "Device Name": "Nome do dispositivo", + "Connect to your KOReader Sync server.": "Conecte-se ao seu servidor KOReader Sync.", + "Server URL": "URL do servidor", + "Your Username": "Seu nome de usuário", + "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...", + "Notebook": "Caderno", + "Unpin Notebook": "Desafixar caderno", + "Pin Notebook": "Fixar caderno", + "Hide Search Bar": "Ocultar barra de pesquisa", + "Show Search Bar": "Mostrar barra de pesquisa", + "Resize Notebook": "Redimensionar caderno", + "No notes match your search": "Nenhuma nota encontrada", + "Excerpts": "Trechos", + "AI": "IA", + "Add your notes here...": "Adicione suas notas aqui...", + "Search notes and excerpts...": "Pesquisar notas e trechos...", + "Page {{number}}": "Página {{number}}", + "Previous Paragraph": "Parágrafo anterior", + "Loading": "Carregando...", + "Next Paragraph": "Próximo parágrafo", + "Exit Paragraph Mode": "Sair do modo de parágrafo", + "{{time}} min left in chapter": "{{time}} min restantes no capítulo", + "{{number}} pages left in chapter": "<1>Faltam <0>{{number}}<1> páginas neste capítulo", + "{{count}} pages left in chapter_one": "<1>Falta <0>{{count}}<1> página neste capítulo", + "{{count}} pages left in chapter_many": "<1>Faltam <0>{{count}}<1> páginas neste capítulo", + "{{count}} pages left in chapter_other": "<1>Faltam <0>{{count}}<1> páginas neste capítulo", + "On {{current}} of {{total}} page": "Na página {{current}} de {{total}}", + "Selection": "Seleção", + "Book": "Livro", + "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 no nível do livro", + "Unable to open book": "Não foi possível abrir o livro", + "Unable to connect to Readwise. Please check your network connection.": "Não foi possível conectar ao Readwise. Verifique sua conexão de rede.", + "Invalid Readwise access token": "Token de acesso do Readwise inválido", + "Disconnected from Readwise": "Desconectado do Readwise", + "Readwise Settings": "Configurações do Readwise", + "Connected to Readwise": "Conectado ao Readwise", + "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", + "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", + "Speed Reading": "Leitura rápida", + "Close Speed Reading": "Fechar leitura rápida", + "Select reading speed": "Selecionar velocidade de leitura", + "Show context": "Mostrar contexto", + "Hide context": "Ocultar contexto", + "Context": "Contexto", + "Ready": "Pronto", + "Chapter Progress": "Progresso do capítulo", + "words": "palavras", + "{{time}} left": "{{time}} restante", + "Reading progress": "Progresso de leitura", + "Drag to seek": "Arraste para procurar", + "Skip back 15 words": "Voltar 15 palavras", + "Back 15 words (Shift+Left)": "Voltar 15 palavras (Shift+Esquerda)", + "Decrease speed": "Diminuir velocidade", + "Slower (Left/Down)": "Mais lento (Esquerda/Baixo)", + "Pause": "Pausar", + "Play": "Reproduzir", + "Pause (Space)": "Pausar (Espaço)", + "Play (Space)": "Reproduzir (Espaço)", + "Increase speed": "Aumentar velocidade", + "Faster (Right/Up)": "Mais rápido (Direita/Cima)", + "Skip forward 15 words": "Avançar 15 palavras", + "Forward 15 words (Shift+Right)": "Avançar 15 palavras (Shift+Direita)", + "Punctuation Delay": "Atraso de pontuação", + "Font": "Fonte", + "Decrease font size": "Diminuir tamanho da fonte", + "Increase font size": "Aumentar tamanho da fonte", + "Split Hyphens": "Dividir hífens", + "Focus": "Foco", + "Theme color": "Cor do tema", + "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", + "Section Title": "Título da seção", + "More Info": "Mais informações", + "Hardcover sync enabled for this book": "Sincronização do Hardcover ativada para este livro", + "Hardcover sync disabled for this book": "Sincronização do Hardcover desativada para este livro", + "Parallel Read": "Leitura paralela", + "Disable": "Desativar", + "Enable": "Ativar", + "Exit Parallel Read": "Sair da leitura paralela", + "Enter Parallel Read": "Entrar na leitura paralela", + "KOReader Sync": "KOReader Sync", + "Config": "Configuração", + "Push Progress": "Enviar progresso", + "Pull Progress": "Obter progresso", + "Readwise Sync": "Sincronização com o Readwise", + "Push Highlights": "Enviar destaques", + "Hardcover Sync": "Sincronização do Hardcover", + "Enable for This Book": "Ativar para este livro", + "Push Notes": "Enviar notas", + "Show on Discord": "Mostrar no Discord", + "Display what I'm reading on Discord": "Mostrar o que estou lendo no Discord", + "Sort TOC by Page": "Ordenar TOC por página", + "Bookmarks": "Marcadores", + "Annotations": "Anotações", + "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", + "Show Results": "Mostrar resultados", + "Book Menu": "Menu do livro", + "Unpin Sidebar": "Desafixar barra lateral", + "Pin Sidebar": "Fixar barra lateral", + "Search...": "Pesquisar...", + "Clear search": "Limpar pesquisa", + "Search Options": "Opções de pesquisa", + "Clear search history": "Limpar histórico de pesquisa", + "Chapter": "Capítulo", + "Match Case": "Diferenciar maiúsculas e minúsculas", + "Match Whole Words": "Corresponder palavras inteiras", + "Match Diacritics": "Corresponder acentos", + "Search results for '{{term}}'": "Resultados para '{{term}}'", + "Previous Result": "Resultado anterior", + "Next Result": "Próximo resultado", + "Show Search Results": "Mostrar resultados", + "Close Search": "Fechar pesquisa", + "Sidebar": "Barra lateral", + "Resize Sidebar": "Redimensionar barra lateral", + "TOC": "Sumário", + "Bookmark": "Marcador", + "Chat": "Chat", + "Toggle Sidebar": "Alternar barra lateral", + "(none)": "(nenhum)", + "Sync Info": "Informações de sincronização", + "Book Fingerprint": "Impressão digital do livro", + "Identifiers": "Identificadores", + "Last Synced": "Última sincronização", + "Table viewer": "Visualizador de tabelas", + "Toggle Translation": "Alternar tradução", + "Disable Translation": "Desativar tradução", + "Enable Translation": "Ativar tradução", + "Translation Disabled": "Tradução desativada", + "Previous Sentence": "Frase anterior", + "Next Sentence": "Próxima frase", + "Back to TTS Location": "Voltar para a localização do TTS", + "No Timeout": "Sem tempo limite", + "{{value}} minute": "{{value}} minuto", + "{{value}} minutes": "{{value}} minutos", + "{{value}} hour": "{{value}} hora", + "{{value}} hours": "{{value}} horas", + "Voices for {{lang}}": "Vozes para {{lang}}", + "Slow": "Lento", + "Fast": "Rápido", + "Set Timeout": "Definir tempo limite", + "Select Voice": "Selecionar voz", + "{{engine}}: {{count}} voices_one": "{{engine}}: {{count}} voz", + "{{engine}}: {{count}} voices_many": "{{engine}}: {{count}} vozes", + "{{engine}}: {{count}} voices_other": "{{engine}}: {{count}} vozes", + "Toggle Sticky Bottom TTS Bar": "Alternar barra TTS fixada", + "Zoom Level": "Nível de zoom", + "Zoom Out": "Reduzir zoom", + "Reset Zoom": "Redefinir zoom", + "Zoom In": "Aumentar zoom", + "Zoom Mode": "Modo de zoom", + "Single Page": "Página única", + "Auto Spread": "Espalhamento automático", + "Fit Page": "Ajustar página", + "Fit Width": "Ajustar largura", + "Separate Cover Page": "Páginas de capa separadas", + "Scrolled Mode": "Modo de rolagem", + "Paragraph Mode": "Modo de parágrafo", + "Speed Reading Mode": "Modo de leitura rápida", + "Sign in to Sync": "Entrar para sincronizar", + "Apply Theme Colors to PDF": "Aplicar cores do tema ao PDF", + "Invert Image In Dark Mode": "Inverter imagem no modo escuro", + "Failed to auto-save book cover for lock screen: {{error}}": "Falha ao salvar automaticamente a capa do livro para a tela de bloqueio: {{error}}", + "Enable Hardcover sync for this book first.": "Ative primeiro a sincronização do Hardcover para este livro.", + "No annotations or excerpts to sync for this book.": "Não há anotações ou trechos para sincronizar neste livro.", + "Configure Hardcover in Settings first.": "Configure o Hardcover nas configurações primeiro.", + "No new Hardcover note changes to sync.": "Não há novas alterações de notas do Hardcover para sincronizar.", + "Hardcover synced: {{inserted}} new, {{updated}} updated, {{skipped}} unchanged": "Hardcover sincronizado: {{inserted}} novos, {{updated}} atualizados, {{skipped}} inalterados", + "Hardcover notes sync failed: {{error}}": "Falha na sincronização de notas do Hardcover: {{error}}", + "Reading progress synced to Hardcover": "Progresso de leitura sincronizado com o Hardcover", + "Hardcover progress sync failed: {{error}}": "Falha na sincronização de progresso do Hardcover: {{error}}", + "Reading Progress Synced": "Progresso de leitura sincronizado", + "Page {{page}} of {{total}} ({{percentage}}%)": "Página {{page}} de {{total}} ({{percentage}}%)", + "Current position": "Posição atual", + "Approximately page {{page}} of {{total}} ({{percentage}}%)": "Aproximadamente página {{page}} de {{total}} ({{percentage}}%)", + "Approximately {{percentage}}%": "Aproximadamente {{percentage}}%", + "Highlights synced to Readwise": "Destaques sincronizados com o Readwise", + "Readwise sync failed: no internet connection": "Falha na sincronização com o Readwise: sem conexão com a internet", + "Readwise sync failed: {{error}}": "Falha na sincronização com o Readwise: {{error}}", + "Translating...": "Traduzindo...", + "Please log in to use advanced TTS features": "Faça login para usar recursos avançados de TTS", + "TTS not supported for this document": "TTS não suportado para este documento", + "Read Aloud": "Ler em voz alta", + "Ready to read aloud": "Pronto para leitura em voz alta", + "Expires in {{count}} days_one": "Expira em 1 dia", + "Expires in {{count}} days_many": "Expira em {{count}} dias", + "Expires in {{count}} days_other": "Expira em {{count}} dias", + "Expires in {{count}} hours_one": "Expira em 1 hora", + "Expires in {{count}} hours_many": "Expira em {{count}} horas", + "Expires in {{count}} hours_other": "Expira em {{count}} horas", + "Expiring soon": "Expira em breve", + "Missing share token": "Token de compartilhamento ausente", + "Could not add to your library": "Não foi possível adicionar à sua biblioteca", + "This share link is no longer available": "Este link de compartilhamento não está mais disponível", + "Could not load shared book": "Não foi possível carregar o livro compartilhado", + "The original link may have expired or been revoked.": "O link original pode ter expirado ou sido revogado.", + "The share link is missing required information.": "Faltam informações necessárias no link de compartilhamento.", + "Please check your connection and try again.": "Verifique sua conexão e tente novamente.", + "Get Readest": "Obter Readest", + "Loading shared book…": "Carregando livro compartilhado…", + "Shared with you": "Compartilhado com você", + "Downloading… {{percent}}%": "Baixando… {{percent}}%", + "Adding…": "Adicionando…", + "Add to my library": "Adicionar à minha biblioteca", + "Import progress": "Progresso da importação", + "Open in app": "Abrir no app", + "Delete Your Account?": "Excluir sua conta?", + "This action cannot be undone. All your data in the cloud will be permanently deleted.": "Esta ação não pode ser desfeita. Todos os seus dados na nuvem serão excluídos permanentemente.", + "Delete Permanently": "Excluir permanentemente", + "Restore Purchase": "Restaurar compra", + "Manage Subscription": "Gerenciar assinatura", + "Manage Storage": "Gerenciar armazenamento", + "Manage Shared Links": "Gerenciar links de compartilhamento", + "Reset Password": "Redefinir senha", + "Update Email": "Atualizar e-mail", + "Sign Out": "Sair", + "Delete Account": "Excluir conta", + "Upgrade to {{plan}}": "Atualizar para {{plan}}", + "Complete Your Subscription": "Complete sua assinatura", + "Coming Soon": "Em breve", + "Upgrade to Plus or Pro": "Atualizar para Plus ou Pro", + "Current Plan": "Plano atual", + "On-Demand Purchase": "Compra sob demanda", + "Plan Limits": "Limites do plano", + "Full Customization": "Personalização completa", + "Could not load your shares": "Não foi possível carregar seus compartilhamentos", + "Revoked": "Revogado", + "Expired": "Expirado", + "Shared books": "Livros compartilhados", + "You haven't shared any books yet": "Você ainda não compartilhou nenhum livro", + "Open a book and tap Share to send it to a friend.": "Abra um livro e toque em Compartilhar para enviá-lo a um amigo.", + "{{count}} active_one": "{{count}} ativo", + "{{count}} active_many": "{{count}} ativos", + "{{count}} active_other": "{{count}} ativos", + "{{count}} downloads_one": "{{count}} download", + "{{count}} downloads_many": "{{count}} downloads", + "{{count}} downloads_other": "{{count}} downloads", + "starts at saved page": "começa na página salva", + "More actions": "Mais ações", + "Loading…": "Carregando…", + "Load more": "Carregar mais", + "Failed to load files": "Falha ao carregar arquivos", + "Deleted {{count}} file(s)_one": "{{count}} arquivo excluído", + "Deleted {{count}} file(s)_many": "{{count}} arquivos excluídos", + "Deleted {{count}} file(s)_other": "{{count}} arquivos excluídos", + "Failed to delete {{count}} file(s)_one": "Falha ao excluir {{count}} arquivo", + "Failed to delete {{count}} file(s)_many": "Falha ao excluir {{count}} arquivos", + "Failed to delete {{count}} file(s)_other": "Falha ao excluir {{count}} arquivos", + "Failed to delete files": "Falha ao excluir arquivos", + "Cloud Storage Usage": "Uso de armazenamento na nuvem", + "Total Files": "Total de arquivos", + "Total Size": "Tamanho total", + "Quota": "Cota", + "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}} selecionados", + "Delete Selected": "Excluir selecionados", + "Size": "Tamanho", + "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 excluir {{count}} arquivo selecionado?", + "Are you sure to delete {{count}} selected file(s)?_many": "Tem certeza de que deseja excluir {{count}} arquivos selecionados?", + "Are you sure to delete {{count}} selected file(s)?_other": "Tem certeza de que deseja excluir {{count}} arquivos selecionados?", + "Failed to create checkout session": "Falha ao criar sessão de checkout", + "No purchases found to restore.": "Nenhuma compra encontrada para restaurar.", + "Failed to restore purchases.": "Falha ao restaurar compras.", + "Failed to manage subscription.": "Falha ao gerenciar assinatura.", + "Failed to delete user. Please try again later.": "Falha ao excluir usuário. Tente novamente mais tarde.", + "Loading profile...": "Carregando perfil...", + "Processing your payment...": "Processando seu pagamento...", + "Please wait while we confirm your subscription.": "Aguarde enquanto confirmamos sua assinatura.", + "Payment Processing": "Processando pagamento", + "Your payment is being processed. This usually takes a few moments.": "Seu pagamento está sendo processado. Isso normalmente leva alguns instantes.", + "Payment Failed": "Falha no pagamento", + "We couldn't process your subscription. Please try again or contact support if the issue persists.": "Não foi possível processar sua assinatura. Tente novamente ou entre em contato com o suporte se o problema persistir.", + "Back to Profile": "Voltar ao perfil", + "Purchase Successful!": "Compra bem-sucedida!", + "Subscription Successful!": "Assinatura realizada com sucesso!", + "Thank you for your purchase! Your payment has been processed successfully.": "Obrigado pela sua compra! Seu pagamento foi processado com sucesso.", + "Thank you for your subscription! Your payment has been processed successfully.": "Obrigado pela sua assinatura! Seu pagamento foi processado com sucesso.", + "Email:": "E-mail:", + "Plan:": "Plano:", + "Amount:": "Valor:", + "Order ID:": "ID do pedido:", + "Need help? Contact our support team at support@readest.com": "Precisa de ajuda? Entre em contato com nossa equipe de suporte: support@readest.com", + "Lifetime Plan": "Plano vitalício", + "lifetime": "vitalício", + "One-Time Payment": "Pagamento único", + "Make a single payment to enjoy lifetime access to specific features on all devices. Purchase specific features or services only when you need them.": "Faça um único pagamento para desfrutar de acesso vitalício a recursos específicos em todos os dispositivos. Compre recursos ou serviços específicos apenas quando precisar deles.", + "Expand Cloud Sync Storage": "Expandir armazenamento de sincronização na nuvem", + "Expand your cloud storage forever with a one-time purchase. Each additional purchase adds more space.": "Expanda seu armazenamento na nuvem para sempre com uma compra única. Cada compra adicional adiciona mais espaço.", + "Unlock All Customization Options": "Desbloquear todas as opções de personalização", + "Unlock additional themes, fonts, layout options and read aloud, translators, cloud storage services.": "Desbloqueie temas adicionais, fontes, opções de layout, leitura em voz alta, tradutores e serviços de armazenamento na nuvem.", + "Free Plan": "Plano gratuito", + "month": "mês", + "year": "ano", + "Cross-Platform Sync": "Sincronização multiplataforma", + "Seamlessly sync your library, progress, highlights, and notes across all your devices—never lose your place again.": "Sincronize perfeitamente sua biblioteca, progresso, destaques e notas em todos os seus dispositivos—nunca mais perca seu lugar.", + "Customizable Reading": "Leitura personalizável", + "Personalize every detail with adjustable fonts, layouts, themes, and advanced display settings for the perfect reading experience.": "Personalize cada detalhe com fontes ajustáveis, layouts, temas e configurações avançadas de exibição para a experiência de leitura perfeita.", + "AI Read Aloud": "Leitura em voz alta por IA", + "Enjoy hands-free reading with natural-sounding AI voices that bring your books to life.": "Desfrute da leitura sem usar as mãos com vozes de IA com som natural que dão vida aos seus livros.", + "AI Translations": "Traduções por IA", + "Translate any text instantly with the power of Google, Azure, or DeepL—understand content in any language.": "Traduza qualquer texto instantaneamente com o poder do Google, Azure ou DeepL—entenda conteúdo em qualquer idioma.", + "Community Support": "Suporte da comunidade", + "Connect with fellow readers and get help fast in our friendly community channels.": "Conecte-se com outros leitores e obtenha ajuda rapidamente em nossos canais comunitários amigáveis.", + "Cloud Sync Storage": "Armazenamento na nuvem", + "AI Translations (per day)": "Traduções com IA (por dia)", + "Plus Plan": "Plano Plus", + "Includes All Free Plan Benefits": "Inclui todos os benefícios do plano gratuito", + "Unlimited AI Read Aloud Hours": "Horas ilimitadas de leitura em voz alta por IA", + "Listen without limits—convert as much text as you like into immersive audio.": "Ouça sem limites—converta tanto texto quanto quiser em áudio envolvente.", + "More AI Translations": "Mais traduções com IA", + "Unlock enhanced translation capabilities with more daily usage and advanced options.": "Desbloqueie recursos aprimorados de tradução com mais uso diário e opções avançadas.", + "DeepL Pro Access": "Acesso ao DeepL Pro", + "Translate up to 100,000 characters daily with the most accurate translation engine available.": "Traduza até 100.000 caracteres diariamente com o motor de tradução mais preciso disponível.", + "Securely store and access your entire reading collection with up to 5 GB of cloud storage.": "Armazene e acesse com segurança toda a sua coleção de leitura com até 5 GB de armazenamento na nuvem.", + "Priority Support": "Suporte prioritário", + "Enjoy faster responses and dedicated assistance whenever you need help.": "Desfrute de respostas mais rápidas e assistência dedicada sempre que precisar de ajuda.", + "Pro Plan": "Plano Pro", + "Includes All Plus Plan Benefits": "Inclui todos os benefícios do plano Plus", + "Early Feature Access": "Acesso antecipado a recursos", + "Be the first to explore new features, updates, and innovations before anyone else.": "Seja o primeiro a explorar novos recursos, atualizações e inovações antes de qualquer um.", + "Advanced AI Tools": "Ferramentas de IA avançadas", + "Harness powerful AI tools for smarter reading, translation, and content discovery.": "Aproveite ferramentas de IA poderosas para leitura inteligente, tradução e descoberta de conteúdo.", + "Translate up to 500,000 characters daily with the most accurate translation engine available.": "Traduza até 500.000 caracteres diariamente com o motor de tradução mais preciso disponível.", + "Securely store and access your entire reading collection with up to 20 GB of cloud storage.": "Armazene e acesse com segurança toda a sua coleção de leitura com até 20 GB de armazenamento na nuvem.", + "Version {{version}}": "Versão {{version}}", + "Check Update": "Verificar atualização", + "Already the latest version": "Já é a versão mais recente", + "Checking for updates...": "Verificando atualizações...", + "Error checking for updates": "Erro ao verificar atualizações", + "Command Palette": "Paleta de comandos", + "Search settings and actions...": "Pesquisar configurações e ações...", + "No results found for": "Nenhum resultado encontrado para", + "Type to search settings and actions": "Digite para pesquisar configurações e ações", + "Recent": "Recente", + "navigate": "navegar", + "select": "selecionar", + "close": "fechar", + "Drop to Import Books": "Arraste para importar livros", + "Keyboard Shortcuts": "Atalhos de teclado", + "View all keyboard shortcuts": "Ver todos os atalhos de teclado", + "Terms of Service": "Termos de serviço", + "Privacy Policy": "Política de privacidade", + "ON": "LIGADO", + "OFF": "DESLIGADO", + "Enter book title": "Digite o título do livro", + "Subtitle": "Subtítulo", + "Enter book subtitle": "Digite o subtítulo do livro", + "Enter author name": "Digite o nome do autor", + "Enter series name": "Digite o nome da série", + "Series Index": "Número da série", + "Enter series index": "Digite o número da série", + "Total in Series": "Total na série", + "Enter total books in series": "Digite o total de livros na série", + "ISBN": "ISBN", + "Enter publisher": "Digite a editora", + "Publication Date": "Data de publicação", + "YYYY or YYYY-MM-DD": "YYYY ou YYYY-MM-DD", + "Keep existing source identifier": "Manter o identificador de origem existente", + "Subjects": "Assuntos", + "Fiction, Science, History": "Ficção, Ciência, História", + "Description": "Descrição", + "Enter book description": "Digite a descrição do livro", + "Change cover image": "Alterar imagem da capa", + "Replace": "Substituir", + "Remove cover image": "Remover imagem da capa", + "Unlock cover": "Desbloquear capa", + "Lock cover": "Bloquear capa", + "Auto-Retrieve Metadata": "Recuperar metadados automaticamente", + "Auto-Retrieve": "Recuperação automática", + "Unlock all fields": "Desbloquear todos os campos", + "Unlock All": "Desbloquear tudo", + "Lock all fields": "Bloquear todos os campos", + "Lock All": "Bloquear tudo", + "Reset": "Redefinir", + "Are you sure to delete the selected book?": "Tem certeza de que deseja excluir o livro selecionado?", + "Are you sure to delete the cloud backup of the selected book?": "Tem certeza de que deseja excluir o backup na nuvem do livro selecionado?", + "Are you sure to delete the local copy of the selected book?": "Tem certeza de que deseja excluir a cópia local do livro selecionado?", + "Book exported successfully.": "Livro exportado com sucesso.", + "Failed to export the book.": "Falha ao exportar o livro.", + "Edit Metadata": "Editar metadados", + "Book Details": "Detalhes do livro", + "Unknown": "Desconhecido", + "Delete Book Options": "Opções de exclusão do livro", + "Remove from Cloud & Device": "Remover da nuvem e do dispositivo", + "Remove from Cloud Only": "Remover apenas da nuvem", + "Remove from Device Only": "Remover apenas do dispositivo", + "Download from Cloud": "Baixar da nuvem", + "Upload to Cloud": "Enviar para a nuvem", + "Export Book": "Exportar livro", + "Metadata": "Metadados", + "Updated": "Atualizado", + "Added": "Adicionado", + "File Size": "Tamanho do arquivo", + "No description available": "Nenhuma descrição disponível", + "Locked": "Bloqueado", + "Select Metadata Source": "Selecionar fonte de metadados", + "Keep manual input": "Manter entrada manual", + "Please enter a model ID": "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 de 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", + "Embedding Model": "Modelo de incorporação", + "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 de 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", + "Background Image": "Imagem de fundo", + "Import Image": "Importar imagem", + "Opacity": "Opacidade", + "Cover": "Capa", + "Contain": "Contém", + "Code Highlighting": "Realce de código", + "Enable Highlighting": "Ativar realce", + "Code Language": "Linguagem do código", + "Name": "Nome", + "Highlight Colors": "Cores de destaque", + "Custom Colors": "Cores personalizadas", + "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", + "Theme Color": "Cor do tema", + "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", + "(from 'As You Like It', Act II)": "(de 'Como Quiserdes', Ato II)", + "Custom Theme": "Tema personalizado", + "Theme Name": "Nome do tema", + "Text Color": "Cor do texto", + "Background Color": "Cor de fundo", + "Link Color": "Cor do link", + "Theme Mode": "Modo do tema", + "TTS Highlighting": "Destaque do TTS", + "Style": "Estilo", + "Highlighter": "Marcador", + "Underline": "Sublinhado", + "Strikethrough": "Tachado", + "Squiggly": "Ondulado", + "Outline": "Contorno", + "Save Current Color": "Salvar cor atual", + "Quick Colors": "Cores rápidas", + "Override Book Color": "Substituir cor do livro", + "None": "Nenhum", + "Scroll": "Rolar", + "Single Section Scroll": "Rolagem por seção", + "Overlap Pixels": "Sobreposição de pixels", + "Hide Scrollbar": "Ocultar barra de rolagem", + "Pagination": "Paginação", + "Tap to Paginate": "Toque para paginar", + "Click to Paginate": "Clique para paginar", + "Tap Both Sides": "Toque em ambos os lados", + "Click Both Sides": "Clique em ambos os lados", + "Swap Tap Sides": "Trocar lados do toque", + "Swap Click Sides": "Trocar lados do clique", + "Disable Double Tap": "Desativar toque duplo", + "Disable Double Click": "Desativar clique duplo", + "Volume Keys for Page Flip": "Teclas de volume para virar página", + "Show Page Navigation Buttons": "Botões de navegação", + "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", + "Animation": "Animação", + "Paging Animation": "Animação de página", + "Device": "Dispositivo", + "E-Ink Mode": "Modo E-Ink", + "Color E-Ink Mode": "Modo E-Ink colorido", + "System Screen Brightness": "Brilho da tela do sistema", + "Keep Screen Awake": "Manter a tela ativa", + "Security": "Segurança", + "Allow JavaScript": "Permitir JavaScript", + "Enable only if you trust the file.": "Ative apenas se você confiar no arquivo.", + "Wiktionary": "Wikcionário", + "Wikipedia": "Wikipédia", + "Drag to reorder": "Arraste para reordenar", + "URL template must start with http(s):// and contain %WORD%.": "O modelo de URL deve começar com http(s):// e conter %WORD%.", + "Built-in": "Integrado", + "Web": "Web", + "Bundle is missing on this device. Re-import to use it.": "O pacote está ausente neste dispositivo. Reimporte para usá-lo.", + "This dictionary format is not supported.": "Este formato de dicionário não é suportado.", + "MDict": "MDict", + "DICT": "DICT", + "Slob": "Slob", + "StarDict": "StarDict", + "Imported {{count}} dictionary_one": "{{count}} dicionário importado", + "Imported {{count}} dictionary_many": "{{count}} dicionários importados", + "Imported {{count}} dictionary_other": "{{count}} dicionários importados", + "Skipped incomplete bundles: {{names}}": "Pacotes incompletos ignorados: {{names}}", + "Failed to import dictionary: {{message}}": "Falha ao importar dicionário: {{message}}", + "Dictionaries": "Dicionários", + "Cancel Delete": "Cancelar exclusão", + "Delete Dictionary": "Excluir dicionário", + "Importing…": "Importando…", + "Import Dictionary": "Importar dicionário", + "Add Web Search": "Adicionar pesquisa web", + "No dictionaries available.": "Nenhum dicionário disponível.", + "Tips": "Dicas", + "StarDict bundles need .ifo, .idx, and .dict.dz files (.syn optional).": "Pacotes StarDict precisam dos arquivos .ifo, .idx e .dict.dz (.syn opcional).", + "MDict bundles use .mdx files; companion .mdd files are optional.": "Pacotes MDict usam arquivos .mdx; arquivos .mdd companheiros são opcionais.", + "DICT bundles need a .index file and a .dict.dz file.": "Pacotes DICT precisam de um arquivo .index e um arquivo .dict.dz.", + "Slob bundles need a .slob file.": "Pacotes Slob precisam de um arquivo .slob.", + "Select all the bundle files together when importing.": "Selecione todos os arquivos do pacote juntos ao importar.", + "Edit Web Search": "Editar pesquisa web", + "e.g. Google": "por exemplo: Google", + "URL Template": "Modelo de URL", + "Use %WORD% where the looked-up word should appear.": "Use %WORD% onde a palavra pesquisada deve aparecer.", + "Custom Fonts": "Fontes personalizadas", + "Delete Font": "Excluir fonte", + "Import Font": "Importar fonte", + "Supported font formats: .ttf, .otf, .woff, .woff2": "Formatos de fonte suportados: .ttf, .otf, .woff, .woff2", + "Custom fonts can be selected from the Font Face menu": "Fontes personalizadas podem ser selecionadas no menu Estilo da fonte", + "Global Settings": "Configurações globais", + "Apply to All Books": "Aplicar a todos os livros", + "Apply to This Book": "Aplicar a este livro", + "Reset Settings": "Redefinir configurações", + "Clear Custom Fonts": "Limpar fontes personalizadas", + "Manage Custom Fonts": "Gerenciar fontes personalizadas", + "System Fonts": "Fontes do sistema", + "Serif Font": "Fonte Serif", + "Sans-Serif Font": "Fonte Sans-Serif", + "Override Book Font": "Sobrescrever fonte do livro", + "Default Font Size": "Tamanho da fonte padrão", + "Minimum Font Size": "Tamanho mínimo da fonte", + "Font Weight": "Peso da fonte", + "Font Family": "Família da fonte", + "Default Font": "Fonte padrão", + "CJK Font": "Fonte CJK", + "Font Face": "Estilo da fonte", + "Monospace Font": "Fonte monoespaçada", + "Source and Translated": "Fonte e traduzido", + "Translated Only": "Apenas traduzido", + "Source Only": "Apenas fonte", + "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", + "Interface Language": "Idioma da interface", + "Translation": "Tradução", + "Show Source Text": "Mostrar texto fonte", + "TTS Text": "Texto do TTS", + "Translation Service": "Serviço de tradução", + "Translate To": "Traduzir para", + "Punctuation": "Pontuação", + "Replace Quotation Marks": "Substituir aspas", + "Enabled only in vertical layout.": "Habilitado apenas no layout vertical.", + "Convert Simplified and Traditional Chinese": "Converter chinês simplificado/tradicional", + "Convert Mode": "Modo de conversão", + "Override Book Layout": "Sobrescrever layout do livro", + "Writing Mode": "Modo de escrita", + "Default": "Padrão", + "Horizontal Direction": "Direção horizontal", + "Vertical Direction": "Direção vertical", + "RTL Direction": "Direção RTL", + "Border Frame": "Moldura da borda", + "Double Border": "Borda dupla", + "Border Color": "Cor da borda", + "Paragraph": "Parágrafo", + "Use Book Layout": "Usar layout do livro", + "Paragraph Margin": "Margem de parágrafo", + "Word Spacing": "Espaçamento de palavra", + "Letter Spacing": "Espaçamento de letra", + "Text Indent": "Recuo de texto", + "Full Justification": "Justificação completa", + "Hyphenation": "Hifenização", + "Page": "Página", + "Top Margin (px)": "Margem superior (px)", + "Bottom Margin (px)": "Margem inferior (px)", + "Left Margin (px)": "Margem esquerda (px)", + "Right Margin (px)": "Margem direita (px)", + "Column Gap (%)": "Espaço entre colunas (%)", + "Maximum Number of Columns": "Número máximo de colunas", + "Maximum Column Height": "Altura máxima da coluna", + "Maximum Column Width": "Largura máxima da coluna", + "Apply also in Scrolled Mode": "Aplicar também no modo de rolagem", + "Header & Footer": "Cabeçalho e rodapé", + "Show Header": "Mostrar cabeçalho", + "Show Footer": "Mostrar rodapé", + "Show Remaining Time": "Mostrar tempo restante", + "Show Remaining Pages": "Mostrar páginas restantes", + "Show Reading Progress": "Mostrar progresso de leitura", + "Reading Progress Style": "Estilo do progresso de leitura", + "Percentage": "Porcentagem", + "Show Current Time": "Mostrar hora atual", + "Use 24 Hour Clock": "Usar formato de 24 horas", + "Show Current Battery Status": "Mostrar o status atual da bateria", + "Show Battery Percentage": "Mostrar porcentagem da bateria", + "Tap to Toggle Footer": "Toque para alternar rodapé", + "Screen": "Tela", + "Orientation": "Orientação", + "Portrait": "Retrato", + "Landscape": "Paisagem", + "Custom Content CSS": "CSS do conteúdo", + "Enter CSS for book content styling...": "Insira o CSS para o estilo do conteúdo do livro...", + "Custom Reader UI CSS": "CSS da interface", + "Enter CSS for reader interface styling...": "Insira o CSS para o estilo da interface de leitura...", + "Decrease": "Diminuir", + "Increase": "Aumentar", + "Layout": "Layout", + "Behavior": "Comportamento", + "TTS": "Leitura em voz alta", + "Search Settings": "Pesquisar configurações", + "Reset {{settings}}": "Redefinir {{settings}}", + "Settings Panels": "Painéis de configurações", + "Media Info": "Info de mídia", + "Update Frequency": "Frequência de atualização", + "Every Sentence": "A cada frase", + "Every Paragraph": "A cada parágrafo", + "Every Chapter": "A cada capítulo", + "Get Help from the Readest Community": "Obter ajuda da comunidade Readest", + "A new version of Readest is available!": "Uma nova versão do Readest está disponível!", + "Readest {{newVersion}} is available (installed version {{currentVersion}}).": "Readest {{newVersion}} está disponível (versão instalada {{currentVersion}}).", + "Download and install now?": "Baixar e instalar agora?", + "Downloading {{downloaded}} of {{contentLength}}": "Baixando {{downloaded}} de {{contentLength}}", + "Download finished": "Download concluído", + "DOWNLOAD & INSTALL": "BAIXAR E INSTALAR", + "Changelog": "Notas de versão", + "Software Update": "Atualização de software", + "What's New in Readest": "Novidades no Readest", + "Minimize": "Minimizar", + "Maximize or Restore": "Maximizar ou restaurar", + "Switch Sidebar Tab": "Alternar aba da barra lateral", + "Toggle Notebook": "Mostrar/ocultar caderno", + "Search in Book": "Pesquisar no livro", + "Toggle Scroll Mode": "Alternar modo de rolagem", + "Toggle Select Mode": "Alternar modo de seleção", + "Toggle Bookmark": "Alternar marcador", + "Toggle Text to Speech": "Alternar texto para fala", + "Play / Pause TTS": "Reproduzir / Pausar TTS", + "Toggle Paragraph Mode": "Alternar modo de parágrafo", + "Toggle Toolbar": "Alternar barra de ferramentas", + "Highlight Selection": "Destacar seleção", + "Underline Selection": "Sublinhar seleção", + "Annotate Selection": "Anotar seleção", + "Search Selection": "Pesquisar seleção", + "Copy Selection": "Copiar seleção", + "Translate Selection": "Traduzir seleção", + "Dictionary Lookup": "Pesquisar no dicionário", + "Read Aloud Selection": "Ler seleção em voz alta", + "Proofread Selection": "Revisar seleção", + "Open Settings": "Abrir configurações", + "Open Command Palette": "Abrir paleta de comandos", + "Show Keyboard Shortcuts": "Mostrar atalhos de teclado", + "Open Books": "Abrir livros", + "Toggle Fullscreen": "Alternar tela cheia", + "Close Window": "Fechar janela", + "Quit App": "Sair do aplicativo", + "Go Left / Previous Page": "Ir para a esquerda / Página anterior", + "Go Right / Next Page": "Ir para a direita / Próxima página", + "Go Up": "Ir para cima", + "Go Down": "Ir para baixo", + "Previous Chapter": "Capítulo anterior", + "Next Chapter": "Próximo capítulo", + "Scroll Half Page Down": "Rolar meia página para baixo", + "Scroll Half Page Up": "Rolar meia página para cima", + "Save Note": "Salvar nota", + "General": "Geral", + "Navigation": "Navegação", + "Text to Speech": "Texto para fala", + "Zoom": "Zoom", + "Window": "Janela", + "Failed to load subscription plans.": "Falha ao carregar planos de assinatura.", + "Select Files": "Selecionar arquivos", + "Select Image": "Selecionar imagem", + "Select Video": "Selecionar vídeo", + "Select Audio": "Selecionar áudio", + "Select Fonts": "Selecionar fontes", + "Select Dictionary Files": "Selecionar arquivos do dicionário", + "{{count}} new item(s) downloaded from OPDS_one": "{{count}} novo item baixado do OPDS", + "{{count}} new item(s) downloaded from OPDS_many": "{{count}} novos itens baixados do OPDS", + "{{count}} new item(s) downloaded from OPDS_other": "{{count}} novos itens baixados do OPDS", + "Failed to sync {{count}} OPDS catalog(s)_one": "Falha ao sincronizar {{count}} catálogo OPDS", + "Failed to sync {{count}} OPDS catalog(s)_many": "Falha ao sincronizar {{count}} catálogos OPDS", + "Failed to sync {{count}} OPDS catalog(s)_other": "Falha ao sincronizar {{count}} catálogos OPDS", + "Book not in your library": "O livro não está na sua biblioteca", + "Sign in to import shared books": "Entre para importar livros compartilhados", + "Already in your library": "Já está na sua biblioteca", + "Added to your library": "Adicionado à sua biblioteca", + "Could not import shared book": "Não foi possível importar o livro compartilhado", + "Storage": "Armazenamento", + "{{percentage}}% of Cloud Sync Space Used.": "{{percentage}}% do espaço de sincronização na nuvem utilizado.", + "Translation Characters": "Caracteres de tradução", + "{{percentage}}% of Daily Translation Characters Used.": "{{percentage}}% dos caracteres de tradução diários usados.", + "Daily translation quota reached. Upgrade your plan to continue using AI translations.": "Cota diária de tradução atingida. Atualize seu plano para continuar usando traduções por IA.", + "Page Margins": "Margens da página", + "TTS Media Info Update Frequency": "Frequência de atualização de info de mídia do TTS", + "AI Provider": "Provedor de IA", + "Ollama URL": "URL do Ollama", + "Ollama Model": "Modelo do Ollama", + "AI Gateway Model": "Modelo do AI Gateway", + "Actions": "Ações", + "LXGW WenKai GB Screen": "LXGW WenKai SC", + "LXGW WenKai TC": "LXGW WenKai TC", + "GuanKiapTsingKhai-T": "GuanKiapTsingKhai-T", + "Source Han Serif CN": "Source Han Serif", + "Huiwen-MinchoGBK": "Huiwen Mincho", + "KingHwa_OldSong": "KingHwa Song", + "Open the search result in your browser:": "Abrir o resultado da pesquisa no seu navegador:", + "Open in {{name}}": "Abrir em {{name}}", + "Read on Wikipedia →": "Leia na Wikipédia →", + "No chapters detected": "Nenhum capítulo detectado", + "Failed to parse the EPUB file": "Falha ao analisar o arquivo EPUB", + "This book format is not supported": "Este formato de livro não é suportado", + "Failed to open the book file": "Falha ao abrir o arquivo do livro", + "The book file is empty": "O arquivo do livro está vazio", + "The book file is corrupted": "O arquivo do livro está corrompido", + "Google Books": "Google Books", + "Open Library": "Open Library", + "Book not found in library": "Livro não encontrado na biblioteca", + "Book uploaded: {{title}}": "Livro enviado: {{title}}", + "Unknown error": "Erro desconhecido", + "Please log in to continue": "Faça login para continuar", + "Insufficient storage quota": "Cota de armazenamento insuficiente", + "Failed to upload book: {{title}}": "Falha ao enviar livro: {{title}}", + "Azure Translator": "Tradutor Azure", + "DeepL": "DeepL", + "Google Translate": "Google Tradutor", + "Unavailable": "Indisponível", + "Login Required": "Login necessário", + "Quota Exceeded": "Limite excedido", + "Yandex Translate": "Yandex Translate", + "Gray": "Cinza", + "Sepia": "Sépia", + "Grass": "Grama", + "Cherry": "Cereja", + "Sky": "Céu", + "Solarized": "Solarizado", + "Gruvbox": "Gruvbox", + "Nord": "Nord", + "Contrast": "Contraste", + "Sunset": "Pôr do sol", + "Reveal in Finder": "Mostrar no Finder", + "Reveal in File Explorer": "Mostrar no Explorador de Arquivos", + "Reveal in Folder": "Mostrar na pasta" +} diff --git a/apps/readest-app/public/locales/uz/translation.json b/apps/readest-app/public/locales/uz/translation.json new file mode 100644 index 00000000..da9c282f --- /dev/null +++ b/apps/readest-app/public/locales/uz/translation.json @@ -0,0 +1,1332 @@ +{ + "Email address": "Email manzil", + "Your Password": "Parolingiz", + "Your email address": "Email manzilingiz", + "Your password": "Parolingiz", + "Sign in": "Kirish", + "Signing in...": "Kirilmoqda...", + "Sign in with {{provider}}": "{{provider}} orqali kirish", + "Already have an account? Sign in": "Hisobingiz bormi? Kirish", + "Create a Password": "Parol yarating", + "Sign up": "Roʻyxatdan oʻtish", + "Signing up...": "Roʻyxatdan oʻtilmoqda...", + "Don't have an account? Sign up": "Hisobingiz yoʻqmi? Roʻyxatdan oʻting", + "Check your email for the confirmation link": "Tasdiqlash havolasi uchun emailingizni tekshiring", + "Signing in ...": "Kirilmoqda...", + "Send a magic link email": "Sehrli havola emailini yuborish", + "Check your email for the magic link": "Sehrli havola uchun emailingizni tekshiring", + "Send reset password instructions": "Parolni tiklash koʻrsatmalarini yuborish", + "Sending reset instructions ...": "Tiklash koʻrsatmalari yuborilmoqda...", + "Forgot your password?": "Parolingizni unutdingizmi?", + "Check your email for the password reset link": "Parolni tiklash havolasi uchun emailingizni tekshiring", + "Phone number": "Telefon raqami", + "Your phone number": "Telefon raqamingiz", + "Token": "Token", + "Your OTP token": "OTP tokeningiz", + "Verify token": "Tokenni tasdiqlash", + "Go Back": "Orqaga", + "New Password": "Yangi parol", + "Your new password": "Yangi parolingiz", + "Update password": "Parolni yangilash", + "Updating password ...": "Parol yangilanmoqda...", + "Your password has been updated": "Parolingiz yangilandi", + "Back": "Orqaga", + "Confirmation email sent! Please check your old and new email addresses to confirm the change.": "Tasdiqlash emaili yuborildi! Oʻzgarishni tasdiqlash uchun eski va yangi email manzillaringizni tekshiring.", + "Failed to update email": "Emailni yangilab boʻlmadi", + "New Email": "Yangi email", + "Your new email": "Yangi emailingiz", + "Updating email ...": "Email yangilanmoqda...", + "Update email": "Emailni yangilash", + "Current email": "Joriy email", + "Something went wrong. Don't worry, our team has been notified and we're working on a fix.": "Nimadir notoʻgʻri ketdi. Xavotir olmang, jamoamiz xabardor qilindi va biz uni tuzatish ustida ishlamoqdamiz.", + "Error Details:": "Xato tafsilotlari:", + "Try Again": "Qayta urinish", + "Your Library": "Kutubxonangiz", + "Need help?": "Yordam kerakmi?", + "Contact Support": "Qoʻllab-quvvatlashga murojaat", + "Backup failed: {{error}}": "Zaxira nusxa olishda xato: {{error}}", + "Select Backup": "Zaxira nusxani tanlang", + "Restore failed: {{error}}": "Tiklashda xato: {{error}}", + "Backup & Restore": "Zaxira nusxa va tiklash", + "Create a backup of your library or restore from a previous backup. Restoring will merge with your current library.": "Kutubxonangizning zaxira nusxasini yarating yoki oldingi zaxira nusxadan tiklang. Tiklash joriy kutubxonangiz bilan birlashtiriladi.", + "Backup Library": "Kutubxonani zaxiralash", + "Restore Library": "Kutubxonani tiklash", + "Creating backup...": "Zaxira nusxa yaratilmoqda...", + "Restoring library...": "Kutubxona tiklanmoqda...", + "{{current}} of {{total}} items": "{{total}} elementdan {{current}}", + "Backup completed successfully!": "Zaxira nusxa muvaffaqiyatli yaratildi!", + "Restore completed successfully!": "Tiklash muvaffaqiyatli yakunlandi!", + "Your library has been saved to the selected location.": "Kutubxonangiz tanlangan joyga saqlandi.", + "{{added}} books added, {{updated}} books updated.": "{{added}} ta kitob qoʻshildi, {{updated}} ta kitob yangilandi.", + "Operation failed": "Amal bajarilmadi", + "Close": "Yopish", + "Cancel": "Bekor qilish", + "Show Book Details": "Kitob tafsilotlarini koʻrsatish", + "Upload Book": "Kitobni yuklash", + "Download Book": "Kitobni yuklab olish", + "Sign in to share books": "Kitoblarni ulashish uchun kiring", + "Import Books": "Kitoblarni import qilish", + "Bookshelf": "Kitob javoni", + "Confirm Deletion": "Oʻchirishni tasdiqlash", + "Are you sure to delete {{count}} selected book(s)?_one": "{{count}} ta tanlangan kitobni oʻchirishga ishonchingiz komilmi?", + "Are you sure to delete {{count}} selected book(s)?_other": "{{count}} ta tanlangan kitoblarni oʻchirishga ishonchingiz komilmi?", + "Deselect Book": "Kitobni belgini olib tashlash", + "Select Book": "Kitobni tanlash", + "Group Books": "Kitoblarni guruhlash", + "Mark as Finished": "Tugatilgan deb belgilash", + "Mark as Unread": "Oʻqilmagan deb belgilash", + "Clear Status": "Holatni tozalash", + "Share Book": "Kitobni ulashish", + "Delete": "Oʻchirish", + "Deselect Group": "Guruh belgisini olib tashlash", + "Select Group": "Guruhni tanlash", + "Series": "Seriya", + "Author": "Muallif", + "Group": "Guruh", + "Back to library": "Kutubxonaga qaytish", + "Untitled Group": "Nomsiz guruh", + "Remove From Group": "Guruhdan olib tashlash", + "Create New Group": "Yangi guruh yaratish", + "Rename Group": "Guruh nomini oʻzgartirish", + "Save": "Saqlash", + "All": "Barchasi", + "Confirm": "Tasdiqlash", + "Scroll left": "Chapga aylantirish", + "Scroll right": "Oʻngga aylantirish", + "From Local File": "Mahalliy fayldan", + "From Directory": "Jildidan", + "Online Library": "Onlayn kutubxona", + "OPDS Catalogs": "OPDS kataloglari", + "Search in {{count}} Book(s)..._one": "{{count}} ta kitobda qidirish...", + "Search in {{count}} Book(s)..._other": "{{count}} ta kitoblarda qidirish...", + "Search Books...": "Kitoblarni qidirish...", + "Clear Search": "Qidiruvni tozalash", + "Select Books": "Kitoblarni tanlash", + "Deselect": "Belgilashni olib tashlash", + "Select All": "Barchasini tanlash", + "View Menu": "Koʻrinish menyusi", + "Settings Menu": "Sozlamalar menyusi", + "Failed to select directory": "Jildni tanlab boʻlmadi", + "The new data directory must be different from the current one.": "Yangi maʼlumotlar jildi joriysidan farqli boʻlishi kerak.", + "Migration failed: {{error}}": "Koʻchirish muvaffaqiyatsiz tugadi: {{error}}", + "Change Data Location": "Maʼlumotlar joylashuvini oʻzgartirish", + "Current Data Location": "Joriy maʼlumotlar joylashuvi", + "Loading...": "Yuklanmoqda...", + "File count: {{size}}": "Fayllar soni: {{size}}", + "Total size: {{size}}": "Umumiy hajm: {{size}}", + "Calculating file info...": "Fayl maʼlumotlari hisoblanmoqda...", + "New Data Location": "Yangi maʼlumotlar joylashuvi", + "Choose New Folder": "Yangi jildni tanlash", + "Choose Different Folder": "Boshqa jildni tanlash", + "Migrating data...": "Maʼlumotlar koʻchirilmoqda...", + "Copying: {{file}}": "Nusxalanmoqda: {{file}}", + "{{current}} of {{total}} files": "{{total}} fayldan {{current}}", + "Migration completed successfully!": "Koʻchirish muvaffaqiyatli yakunlandi!", + "Your data has been moved to the new location. Please restart the application to complete the process.": "Maʼlumotlaringiz yangi joyga koʻchirildi. Jarayonni yakunlash uchun ilovani qayta ishga tushiring.", + "Migration failed": "Koʻchirish muvaffaqiyatsiz tugadi", + "Important Notice": "Muhim ogohlantirish", + "This will move all your app data to the new location. Make sure the destination has enough free space.": "Bu barcha ilova maʼlumotlaringizni yangi joyga koʻchiradi. Manzilda yetarlicha boʻsh joy borligiga ishonch hosil qiling.", + "Restart App": "Ilovani qayta ishga tushirish", + "Start Migration": "Koʻchirishni boshlash", + "Finished": "Tugatilgan", + "Unread": "Oʻqilmagan", + "Open": "Ochish", + "Status": "Holat", + "Details": "Tafsilotlar", + "Set status for {{count}} book(s)_one": "{{count}} ta kitob uchun holatni belgilash", + "Set status for {{count}} book(s)_other": "{{count}} ta kitoblar uchun holatni belgilash", + "Loading library...": "Kutubxona yuklanmoqda...", + "{{count}} books refreshed_one": "{{count}} ta kitob yangilandi", + "{{count}} books refreshed_other": "{{count}} ta kitoblar yangilandi", + "Failed to refresh metadata": "Metamaʼlumotlarni yangilab boʻlmadi", + "Dark Mode": "Qorongʻi rejim", + "Light Mode": "Yorugʻ rejim", + "Auto Mode": "Avtomatik rejim", + "Logged in as {{userDisplayName}}": "{{userDisplayName}} sifatida tizimga kirildi", + "Logged in": "Tizimga kirildi", + "View account details and quota": "Hisob tafsilotlari va kvotani koʻrish", + "Cloud File Transfers": "Bulutli fayl uzatmalari", + "{{activeCount}} active, {{pendingCount}} pending": "{{activeCount}} ta faol, {{pendingCount}} ta kutilmoqda", + "{{failedCount}} failed": "{{failedCount}} ta muvaffaqiyatsiz", + "Synced {{time}}": "{{time}} sinxronlandi", + "Never synced": "Sinxronlanmagan", + "Account": "Hisob", + "Sign In": "Kirish", + "Auto Upload Books to Cloud": "Kitoblarni bulutga avtomatik yuklash", + "Auto Import on File Open": "Fayl ochilganda avtomatik import qilish", + "Open Last Book on Start": "Ishga tushishda oxirgi kitobni ochish", + "Check Updates on Start": "Ishga tushishda yangilanishlarni tekshirish", + "Open Book in New Window": "Kitobni yangi oynada ochish", + "Fullscreen": "Toʻliq ekran", + "Always on Top": "Doimo yuqorida", + "Always Show Status Bar": "Holat panelini doimo koʻrsatish", + "Background Read Aloud": "Fonda ovoz chiqarib oʻqish", + "Settings": "Sozlamalar", + "Advanced Settings": "Kengaytirilgan sozlamalar", + "Refresh Metadata": "Metamaʼlumotlarni yangilash", + "Save Book Cover": "Kitob muqovasini saqlash", + "Auto-save last book cover": "Oxirgi kitob muqovasini avtomatik saqlash", + "Upgrade to Readest Premium": "Readest Premium-ga yangilash", + "Download Readest": "Readest-ni yuklab olish", + "About Readest": "Readest haqida", + "Help improve Readest": "Readest-ni yaxshilashga yordam berish", + "Sharing anonymized statistics": "Anonim statistikani ulashish", + "Could not create share link": "Ulashish havolasini yaratib boʻlmadi", + "Link copied": "Havola nusxalandi", + "Could not copy link": "Havolani nusxalab boʻlmadi", + "Share revoked": "Ulashish bekor qilindi", + "Could not revoke share": "Ulashishni bekor qilib boʻlmadi", + "Expires in": "Muddati tugaydi", + "{{count}} days_one": "{{count}} kun", + "{{count}} days_other": "{{count}} kun", + "Share reading progress": "Oʻqish jarayonini ulashish", + "Uploading book…": "Kitob yuklanmoqda...", + "Generating…": "Yaratilmoqda...", + "Generate share link": "Ulashish havolasini yaratish", + "Includes your reading progress": "Sizning oʻqish jarayoningizni oʻz ichiga oladi", + "Share URL": "Ulashish URL", + "Copy link": "Havolani nusxalash", + "Copied": "Nusxalandi", + "Copy": "Nusxalash", + "Share via…": "Ulashish...", + "Expires {{date}}": "Muddati tugaydi: {{date}}", + "Revoking…": "Bekor qilinmoqda...", + "Revoke share": "Ulashishni bekor qilish", + "Uploaded": "Yuklandi", + "Downloaded": "Yuklab olindi", + "Deleted": "Oʻchirildi", + "Waiting...": "Kutilmoqda...", + "Failed": "Muvaffaqiyatsiz", + "Completed": "Yakunlandi", + "Cancelled": "Bekor qilindi", + "Retry": "Qayta urinish", + "Active": "Faol", + "Transfer Queue": "Uzatish navbati", + "Upload All": "Barchasini yuklash", + "Download All": "Barchasini yuklab olish", + "Resume Transfers": "Uzatishlarni davom ettirish", + "Pause Transfers": "Uzatishlarni toʻxtatish", + "Pending": "Kutilmoqda", + "No transfers": "Uzatishlar yoʻq", + "Retry All": "Barchasini qayta urinish", + "Clear Completed": "Yakunlanganlarni tozalash", + "Clear Failed": "Muvaffaqiyatsizlarni tozalash", + "List": "Roʻyxat", + "Grid": "Katak", + "Crop": "Kesish", + "Fit": "Sigʻdirish", + "Authors": "Mualliflar", + "Books": "Kitoblar", + "Groups": "Guruhlar", + "Title": "Sarlavha", + "Format": "Format", + "Date Read": "Oʻqilgan sana", + "Date Added": "Qoʻshilgan sana", + "Date Published": "Nashr sanasi", + "Ascending": "Oʻsish boʻyicha", + "Descending": "Kamayish boʻyicha", + "Columns": "Ustunlar", + "Auto": "Avtomatik", + "Book Covers": "Kitob muqovalari", + "Group by...": "Guruhlash...", + "Sort by...": "Saralash...", + "{{count}} book(s) synced_one": "{{count}} ta kitob sinxronlandi", + "{{count}} book(s) synced_other": "{{count}} ta kitoblar sinxronlandi", + "No supported files found. Supported formats: {{formats}}": "Qoʻllab-quvvatlanadigan fayllar topilmadi. Qoʻllab-quvvatlanadigan formatlar: {{formats}}", + "Failed to import book(s): {{filenames}}": "Kitob(lar)ni import qilib boʻlmadi: {{filenames}}", + "Successfully imported {{count}} book(s)_one": "{{count}} ta kitob muvaffaqiyatli import qilindi", + "Successfully imported {{count}} book(s)_other": "{{count}} ta kitoblar muvaffaqiyatli import qilindi", + "Upload queued: {{title}}": "Yuklash navbatga qoʻyildi: {{title}}", + "Book downloaded: {{title}}": "Kitob yuklab olindi: {{title}}", + "Failed to download book: {{title}}": "Kitobni yuklab boʻlmadi: {{title}}", + "Download queued: {{title}}": "Yuklab olish navbatga qoʻyildi: {{title}}", + "Book deleted: {{title}}": "Kitob oʻchirildi: {{title}}", + "Deleted cloud backup of the book: {{title}}": "Kitobning bulutdagi zaxira nusxasi oʻchirildi: {{title}}", + "Deleted local copy of the book: {{title}}": "Kitobning mahalliy nusxasi oʻchirildi: {{title}}", + "Failed to delete book: {{title}}": "Kitobni oʻchirib boʻlmadi: {{title}}", + "Failed to delete cloud backup of the book: {{title}}": "Kitobning bulutdagi zaxira nusxasini oʻchirib boʻlmadi: {{title}}", + "Failed to delete local copy of the book: {{title}}": "Kitobning mahalliy nusxasini oʻchirib boʻlmadi: {{title}}", + "Library Header": "Kutubxona sarlavhasi", + "Library Sync Progress": "Kutubxona sinxronlash jarayoni", + "Your Bookshelf": "Kitob javoningiz", + "Welcome to your library. You can import your books here and read them anytime.": "Kutubxonangizga xush kelibsiz. Bu yerga kitoblaringizni import qilib, istalgan vaqtda oʻqishingiz mumkin.", + "This link can't be opened": "Bu havolani ochib boʻlmadi", + "The annotation link is missing required information. The original link may have been truncated.": "Izoh havolasida kerakli maʼlumot yetishmaydi. Asl havola qisqartirilgan boʻlishi mumkin.", + "Go to Readest": "Readest-ga oʻtish", + "Open-source ebook reader for everyone, on every device.": "Har bir qurilmada, hamma uchun ochiq manbali e-kitob oʻqigich.", + "Open in Readest": "Readest-da ochish", + "If Readest didn't open automatically, choose an option below:": "Agar Readest avtomatik ochilmasa, quyidagi variantlardan birini tanlang:", + "Continue reading where you left off.": "Qoldirgan joyingizdan oʻqishni davom ettiring.", + "Readest logo": "Readest logotipi", + "Opening Readest...": "Readest ochilmoqda...", + "Open in Readest app": "Readest ilovasida ochish", + "Continue in browser": "Brauzerda davom etish", + "Don't have Readest?": "Readest yoʻqmi?", + "Download": "Yuklab olish", + "URL must start with http:// or https://": "URL http:// yoki https:// bilan boshlanishi kerak", + "Adding LAN addresses is not supported in the web app version.": "LAN manzillarini qoʻshish veb-ilova versiyasida qoʻllab-quvvatlanmaydi.", + "Please confirm that this OPDS connection will be proxied through Readest servers on the web app before continuing.": "Davom etishdan oldin, ushbu OPDS ulanishi veb-ilovada Readest serverlari orqali proksilanishini tasdiqlang.", + "Invalid OPDS catalog. Please check the URL.": "Notoʻgʻri OPDS katalogi. URL manzilini tekshiring.", + "Browse and download books from online catalogs": "Onlayn kataloglardan kitoblarni koʻrib chiqing va yuklab oling", + "My Catalogs": "Mening kataloglarim", + "Add Catalog": "Katalog qoʻshish", + "No catalogs yet": "Hali kataloglar yoʻq", + "Add your first OPDS catalog to start browsing books": "Kitoblarni koʻrib chiqishni boshlash uchun birinchi OPDS katalogingizni qoʻshing", + "Add Your First Catalog": "Birinchi katalogingizni qoʻshing", + "Edit": "Tahrirlash", + "Remove": "Olib tashlash", + "Username": "Foydalanuvchi nomi", + "Custom Headers": "Maxsus sarlavhalar", + "Auto-download": "Avtomatik yuklab olish", + "Last synced {{when}}": "Oxirgi sinxronlash {{when}}", + "{{count}} failed_one": "{{count}} ta muvaffaqiyatsiz", + "{{count}} failed_other": "{{count}} ta muvaffaqiyatsiz", + "Browse": "Koʻrib chiqish", + "Popular Catalogs": "Mashhur kataloglar", + "Add": "Qoʻshish", + "Edit OPDS Catalog": "OPDS katalogini tahrirlash", + "Add OPDS Catalog": "OPDS katalogini qoʻshish", + "Catalog Name": "Katalog nomi", + "My Calibre Library": "Mening Calibre kutubxonam", + "OPDS URL": "OPDS URL", + "Username (optional)": "Foydalanuvchi nomi (ixtiyoriy)", + "Password (optional)": "Parol (ixtiyoriy)", + "Password": "Parol", + "Custom Headers (optional)": "Maxsus sarlavhalar (ixtiyoriy)", + "Add one header per line using \"Header-Name: value\".": "Har bir qatorga \"Header-Name: value\" formatida bitta sarlavha qoʻshing.", + "I understand this OPDS connection will be proxied through Readest servers on the web app. If I do not trust Readest with these credentials or headers, I should use the native app instead.": "Men ushbu OPDS ulanishi veb-ilovada Readest serverlari orqali proksilanishini tushunaman. Agar men ushbu hisob maʼlumotlari yoki sarlavhalar bilan Readest-ga ishonmasam, uning oʻrniga mahalliy ilovadan foydalanishim kerak.", + "Description (optional)": "Tavsif (ixtiyoriy)", + "A brief description of this catalog": "Ushbu katalogning qisqacha tavsifi", + "Auto-download new items": "Yangi elementlarni avtomatik yuklab olish", + "Automatically download new publications when the app syncs": "Ilova sinxronlanganda yangi nashrlarni avtomatik yuklab olish", + "Validating...": "Tekshirilmoqda...", + "Save Changes": "Oʻzgarishlarni saqlash", + "Failed downloads": "Muvaffaqiyatsiz yuklab olishlar", + "No failed downloads": "Muvaffaqiyatsiz yuklab olishlar yoʻq", + "Attempts: {{count}}_one": "Urinishlar: {{count}}", + "Attempts: {{count}}_other": "Urinishlar: {{count}}", + "Skip": "Oʻtkazib yuborish", + "Skip all": "Barchasini oʻtkazib yuborish", + "Retry all": "Barchasini qayta urinish", + "View All": "Barchasini koʻrish", + "First": "Birinchi", + "Previous": "Oldingi", + "Next": "Keyingi", + "Last": "Oxirgi", + "Forward": "Oldinga", + "Home": "Bosh sahifa", + "Search in OPDS Catalog...": "OPDS katalogida qidirish...", + "Untitled": "Nomsiz", + "{{count}} items_one": "{{count}} ta element", + "{{count}} items_other": "{{count}} ta element", + "Open Access": "Ochiq kirish", + "Download completed": "Yuklab olish yakunlandi", + "Import failed": "Import qilib boʻlmadi", + "Download failed": "Yuklab olib boʻlmadi", + "Borrow": "Ijaraga olish", + "Buy": "Sotib olish", + "Subscribe": "Obuna boʻlish", + "Sample": "Namuna", + "Open & Read": "Ochish va oʻqish", + "Read (Stream)": "Oʻqish (oqim)", + "Publisher": "Nashriyot", + "Published": "Nashr qilingan", + "Language": "Til", + "Identifier": "Identifikator", + "Tags": "Teglar", + "Tag": "Teg", + "Title, Author, Tag, etc...": "Sarlavha, muallif, teg va h.k...", + "Query": "Soʻrov", + "Subject": "Mavzu", + "Count": "Soni", + "Start Page": "Boshlangʻich sahifa", + "Search": "Qidirish", + "Enter {{terms}}": "{{terms}} kiriting", + "No search results found": "Qidiruv natijalari topilmadi", + "Failed to load OPDS feed: {{status}} {{statusText}}": "OPDS lentasini yuklab boʻlmadi: {{status}} {{statusText}}", + "Search in {{title}}": "{{title}} ichida qidirish", + "Failed to start stream": "Oqimni boshlab boʻlmadi", + "Cannot Load Page": "Sahifani yuklab boʻlmadi", + "An error occurred": "Xato yuz berdi", + "Reload Page": "Sahifani qayta yuklash", + "Copy text after selection": "Tanlovdan keyin matnni nusxalash", + "Highlight": "Belgilash", + "Highlight text after selection": "Tanlovdan keyin matnni belgilash", + "Annotate": "Izoh qoʻyish", + "Annotate text after selection": "Tanlovdan keyin matnga izoh qoʻyish", + "Search text after selection": "Tanlovdan keyin matnni qidirish", + "Dictionary": "Lugʻat", + "Look up text in dictionary after selection": "Tanlovdan keyin matnni lugʻatda qidirish", + "Translate": "Tarjima qilish", + "Translate text after selection": "Tanlovdan keyin matnni tarjima qilish", + "Speak": "Talaffuz qilish", + "Read text aloud after selection": "Tanlovdan keyin matnni ovoz chiqarib oʻqish", + "Proofread": "Tahrirlash", + "Proofread text after selection": "Tanlovdan keyin matnni tahrirlash", + "Copied to notebook": "Daftarga nusxalandi", + "Word limit of 30 words exceeded.": "30 ta soʻz chegarasi oshib ketdi.", + "No annotations to export": "Eksport qilish uchun izohlar yoʻq", + "Exported successfully": "Muvaffaqiyatli eksport qilindi", + "Copied to clipboard": "Vaqtinchalik xotiraga nusxalandi", + "Delete Highlight": "Belgilashni oʻchirish", + "No dictionaries enabled": "Lugʻatlar yoqilmagan", + "Enable a dictionary in Settings → Language → Dictionaries.": "Sozlamalar → Til → Lugʻatlar boʻlimida lugʻatni yoqing.", + "Manage Dictionaries": "Lugʻatlarni boshqarish", + "No definitions found": "Taʼriflar topilmadi", + "Search for {{word}} on the web.": "{{word}} ni internetda qidirish.", + "Dictionary unsupported": "Lugʻat qoʻllab-quvvatlanmaydi", + "This dictionary format is not supported yet.": "Ushbu lugʻat formati hali qoʻllab-quvvatlanmaydi.", + "Error": "Xato", + "Unable to load the word.": "Soʻzni yuklab boʻlmadi.", + "Exported from Readest": "Readest-dan eksport qilindi", + "Highlights & Annotations": "Belgilashlar va izohlar", + "Note:": "Eslatma:", + "Page:": "Sahifa:", + "Time:": "Vaqt:", + "Note": "Eslatma", + "Page: {{number}}": "Sahifa: {{number}}", + "Export Annotations": "Izohlarni eksport qilish", + "Format Options": "Format variantlari", + "Export Date": "Eksport sanasi", + "Chapter Titles": "Bob sarlavhalari", + "Chapter Separator": "Bob ajratuvchisi", + "Highlights": "Belgilashlar", + "Notes": "Eslatmalar", + "Page Number": "Sahifa raqami", + "Note Date": "Eslatma sanasi", + "Advanced": "Kengaytirilgan", + "Hide": "Yashirish", + "Show": "Koʻrsatish", + "Use Custom Template": "Maxsus shablondan foydalanish", + "Export Template": "Eksport shabloni", + "Reset Template": "Shablonni tiklash", + "Template Syntax:": "Shablon sintaksisi:", + "Insert value": "Qiymat kiritish", + "Format date (locale)": "Sanani formatlash (lokal)", + "Format date (custom)": "Sanani formatlash (maxsus)", + "Conditional": "Shartli", + "Loop": "Sikl", + "Available Variables:": "Mavjud oʻzgaruvchilar:", + "Book title": "Kitob sarlavhasi", + "Book author": "Kitob muallifi", + "Export date": "Eksport sanasi", + "Array of chapters": "Boblar massivi", + "Chapter title": "Bob sarlavhasi", + "Array of annotations": "Izohlar massivi", + "Highlighted text": "Belgilangan matn", + "Annotation note": "Izoh eslatmasi", + "Annotation style": "Izoh uslubi", + "Annotation color": "Izoh rangi", + "Annotation page number": "Izoh sahifa raqami", + "Annotation time": "Izoh vaqti", + "Available Formatters:": "Mavjud formatlovchilar:", + "Format date": "Sanani formatlash", + "Markdown block quote (> per line)": "Markdown blok iqtiboslari (har qatorga >)", + "Newlines to
": "Yangi qatorlarni
ga oʻzgartirish", + "Change case": "Registrni oʻzgartirish", + "Trim whitespace": "Boʻsh joylarni kesish", + "Truncate to n characters": "n ta belgigacha qisqartirish", + "Replace text": "Matnni almashtirish", + "Fallback value": "Zaxira qiymati", + "Get length": "Uzunlikni olish", + "First/last element": "Birinchi/oxirgi element", + "Join array": "Massivni birlashtirish", + "Date Format Tokens:": "Sana format tokenlari:", + "Year (4 digits)": "Yil (4 raqam)", + "Month (01-12)": "Oy (01-12)", + "Day (01-31)": "Kun (01-31)", + "Hour (00-23)": "Soat (00-23)", + "Minute (00-59)": "Daqiqa (00-59)", + "Second (00-59)": "Soniya (00-59)", + "Preview": "Oldindan koʻrish", + "Show Source": "Manbani koʻrsatish", + "No content to preview": "Oldindan koʻrish uchun kontent yoʻq", + "Export as Plain Text": "Oddiy matn sifatida eksport qilish", + "Export as Markdown": "Markdown sifatida eksport qilish", + "Export": "Eksport", + "highlight": "belgilash", + "underline": "tagiga chizish", + "squiggly": "egri chiziq", + "red": "qizil", + "yellow": "sariq", + "green": "yashil", + "blue": "koʻk", + "violet": "binafsha", + "Select {{style}} style": "{{style}} uslubini tanlang", + "Select {{color}} color": "{{color}} rangini tanlang", + "Current selection": "Joriy tanlov", + "All occurrences in this book": "Ushbu kitobdagi barcha holatlar", + "All occurrences in your library": "Kutubxonangizdagi barcha holatlar", + "Selected text:": "Tanlangan matn:", + "Replace with:": "Bilan almashtirish:", + "Enter text...": "Matn kiriting...", + "Apply": "Qoʻllash", + "Case sensitive:": "Registrni hisobga olish:", + "Whole word:": "Butun soʻz:", + "Only for TTS:": "Faqat TTS uchun:", + "Scope:": "Qamrov:", + "Instant {{action}} Disabled": "Tezkor {{action}} oʻchirilgan", + "Annotation": "Izoh", + "Instant {{action}}": "Tezkor {{action}}", + "Unable to fetch the translation. Please log in first and try again.": "Tarjimani olib boʻlmadi. Iltimos, avval tizimga kiring va qayta urinib koʻring.", + "Unable to fetch the translation. Try again later.": "Tarjimani olib boʻlmadi. Keyinroq qayta urinib koʻring.", + "Original Text": "Asl matn", + "Auto Detect": "Avtomatik aniqlash", + "(detected)": "(aniqlandi)", + "Translated Text": "Tarjima qilingan matn", + "System Language": "Tizim tili", + "No translation available.": "Tarjima mavjud emas.", + "Translated by {{provider}}.": "{{provider}} tomonidan tarjima qilingan.", + "Remove Bookmark": "Xatchoʻpni olib tashlash", + "Add Bookmark": "Xatchoʻp qoʻshish", + "Books Content": "Kitoblar kontenti", + "Skip to last reading position": "Oxirgi oʻqish joyiga oʻtish", + "End of this section. Continue to the next.": "Ushbu boʻlim oxiri. Keyingisiga oʻting.", + "Book Content": "Kitob kontenti", + "Screen Brightness": "Ekran yorqinligi", + "Color": "Rang", + "Previous Section": "Oldingi boʻlim", + "Previous Page": "Oldingi sahifa", + "Go Forward": "Oldinga oʻtish", + "Reading Progress": "Oʻqish jarayoni", + "Jump to Location": "Joyga oʻtish", + "Next Page": "Keyingi sahifa", + "Next Section": "Keyingi boʻlim", + "Font Size": "Shrift oʻlchami", + "Page Margin": "Sahifa chetlari", + "Small": "Kichik", + "Large": "Katta", + "Line Spacing": "Qatorlar oraligʻi", + "Footer Bar": "Pastki panel", + "Table of Contents": "Mundarija", + "Font & Layout": "Shrift va sahifalash", + "Unable to connect to Hardcover. Please check your network connection.": "Hardcover-ga ulanib boʻlmadi. Tarmoq ulanishingizni tekshiring.", + "Invalid Hardcover API token": "Notoʻgʻri Hardcover API tokeni", + "Disconnected from Hardcover": "Hardcover-dan uzildi", + "Never": "Hech qachon", + "Hardcover Settings": "Hardcover sozlamalari", + "Connected to Hardcover": "Hardcover-ga ulandi", + "Last synced: {{time}}": "Oxirgi sinxronlash: {{time}}", + "Sync Enabled": "Sinxronlash yoqilgan", + "Disconnect": "Uzish", + "Connect your Hardcover account to sync reading progress and notes.": "Oʻqish jarayoni va eslatmalarni sinxronlash uchun Hardcover hisobingizni ulang.", + "Get your API token from hardcover.app → Settings → API.": "API tokeningizni hardcover.app → Settings → API dan oling.", + "API Token": "API tokeni", + "Paste your Hardcover API token": "Hardcover API tokeningizni joylashtiring", + "Connect": "Ulash", + "Header Bar": "Yuqori panel", + "Go to Library": "Kutubxonaga oʻtish", + "Disable Quick Action": "Tezkor amalni oʻchirish", + "Enable Quick Action on Selection": "Tanlovda tezkor amalni yoqish", + "View Options": "Koʻrish variantlari", + "Close Book": "Kitobni yopish", + "Image viewer": "Rasm koʻrgich", + "Previous Image": "Oldingi rasm", + "Next Image": "Keyingi rasm", + "Zoomed": "Kattalashtirilgan", + "Zoom level": "Kattalashtirish darajasi", + "Sync Conflict": "Sinxronlash ziddiyati", + "Sync reading progress from \"{{deviceName}}\"?": "\"{{deviceName}}\" qurilmasidan oʻqish jarayonini sinxronlaysizmi?", + "another device": "boshqa qurilma", + "Local Progress": "Mahalliy jarayon", + "Remote Progress": "Masofaviy jarayon", + "Failed to connect": "Ulanib boʻlmadi", + "Disconnected": "Uzildi", + "KOReader Sync Settings": "KOReader sinxronlash sozlamalari", + "Sync as {{userDisplayName}}": "{{userDisplayName}} sifatida sinxronlash", + "Sync Server Connected": "Sinxronlash serveriga ulandi", + "Sync Strategy": "Sinxronlash strategiyasi", + "Ask on conflict": "Ziddiyatda soʻrash", + "Always use latest": "Doimo eng songgisidan foydalanish", + "Send changes only": "Faqat oʻzgarishlarni yuborish", + "Receive changes only": "Faqat oʻzgarishlarni qabul qilish", + "Checksum Method": "Nazorat yigʻindisi usuli", + "File Content (recommended)": "Fayl kontenti (tavsiya etiladi)", + "File Name": "Fayl nomi", + "Device Name": "Qurilma nomi", + "Connect to your KOReader Sync server.": "KOReader Sync serveringizga ulaning.", + "Server URL": "Server URL", + "Your Username": "Foydalanuvchi nomingiz", + "Are you sure you want to re-index this book?": "Ushbu kitobni qayta indekslamoqchimisiz?", + "Enable AI in Settings": "Sozlamalarda AI ni yoqing", + "Index This Book": "Ushbu kitobni indekslash", + "Enable AI search and chat for this book": "Ushbu kitob uchun AI qidiruv va chatni yoqing", + "Start Indexing": "Indekslashni boshlash", + "Indexing book...": "Kitob indekslanmoqda...", + "Preparing...": "Tayyorlanmoqda...", + "Notebook": "Daftar", + "Unpin Notebook": "Daftarni mahkamlashdan boʻshatish", + "Pin Notebook": "Daftarni mahkamlash", + "Hide Search Bar": "Qidiruv panelini yashirish", + "Show Search Bar": "Qidiruv panelini koʻrsatish", + "Resize Notebook": "Daftar oʻlchamini oʻzgartirish", + "No notes match your search": "Qidiruvingizga mos eslatmalar yoʻq", + "Excerpts": "Parchalar", + "AI": "AI", + "Add your notes here...": "Eslatmalaringizni shu yerga qoʻshing...", + "Search notes and excerpts...": "Eslatmalar va parchalarni qidirish...", + "Page {{number}}": "Sahifa {{number}}", + "Previous Paragraph": "Oldingi xatboshi", + "Loading": "Yuklanmoqda", + "Next Paragraph": "Keyingi xatboshi", + "Exit Paragraph Mode": "Xatboshi rejimidan chiqish", + "{{time}} min left in chapter": "Bobgacha {{time}} daqiqa qoldi", + "{{number}} pages left in chapter": "Bobda {{number}} sahifa qoldi", + "{{count}} pages left in chapter_one": "<0>{{count}}<1> sahifa bobda qoldi", + "{{count}} pages left in chapter_other": "<0>{{count}}<1> sahifa bobda qoldi", + "On {{current}} of {{total}} page": "{{total}} sahifadan {{current}} da", + "Selection": "Tanlov", + "Book": "Kitob", + "Library": "Kutubxona", + "Yes": "Ha", + "No": "Yoʻq", + "Proofread Replacement Rules": "Tahrir almashtirish qoidalari", + "Selected Text Rules": "Tanlangan matn qoidalari", + "No selected text replacement rules": "Tanlangan matn almashtirish qoidalari yoʻq", + "Book Specific Rules": "Kitobga xos qoidalar", + "No book-level replacement rules": "Kitob darajasidagi almashtirish qoidalari yoʻq", + "Unable to open book": "Kitobni ochib boʻlmadi", + "Unable to connect to Readwise. Please check your network connection.": "Readwise-ga ulanib boʻlmadi. Tarmoq ulanishingizni tekshiring.", + "Invalid Readwise access token": "Notoʻgʻri Readwise kirish tokeni", + "Disconnected from Readwise": "Readwise-dan uzildi", + "Readwise Settings": "Readwise sozlamalari", + "Connected to Readwise": "Readwise-ga ulandi", + "Connect your Readwise account to sync highlights.": "Belgilashlarni sinxronlash uchun Readwise hisobingizni ulang.", + "Get your access token at": "Kirish tokeningizni shu yerdan oling:", + "Access Token": "Kirish tokeni", + "Paste your Readwise access token": "Readwise kirish tokeningizni joylashtiring", + "Unable to start RSVP": "RSVP-ni boshlab boʻlmadi", + "RSVP not supported for PDF": "PDF uchun RSVP qoʻllab-quvvatlanmaydi", + "Select Chapter": "Bobni tanlash", + "Speed Reading": "Tezkor oʻqish", + "Close Speed Reading": "Tezkor oʻqishni yopish", + "Select reading speed": "Oʻqish tezligini tanlang", + "Show context": "Kontekstni koʻrsatish", + "Hide context": "Kontekstni yashirish", + "Context": "Kontekst", + "Ready": "Tayyor", + "Chapter Progress": "Bob jarayoni", + "words": "soʻzlar", + "{{time}} left": "{{time}} qoldi", + "Reading progress": "Oʻqish jarayoni", + "Drag to seek": "Surish uchun torting", + "Skip back 15 words": "15 soʻz orqaga oʻtkazish", + "Back 15 words (Shift+Left)": "15 soʻz orqaga (Shift+Left)", + "Decrease speed": "Tezlikni kamaytirish", + "Slower (Left/Down)": "Sekinroq (Left/Down)", + "Pause": "Pauza", + "Play": "Ijro etish", + "Pause (Space)": "Pauza (Space)", + "Play (Space)": "Ijro etish (Space)", + "Increase speed": "Tezlikni oshirish", + "Faster (Right/Up)": "Tezroq (Right/Up)", + "Skip forward 15 words": "15 soʻz oldinga oʻtkazish", + "Forward 15 words (Shift+Right)": "15 soʻz oldinga (Shift+Right)", + "Punctuation Delay": "Tinish belgisi kechikishi", + "Font": "Shrift", + "Decrease font size": "Shrift oʻlchamini kamaytirish", + "Increase font size": "Shrift oʻlchamini oshirish", + "Split Hyphens": "Tirelarni boʻlish", + "Focus": "Diqqat markazi", + "Theme color": "Mavzu rangi", + "Start RSVP Reading": "RSVP oʻqishni boshlash", + "Choose where to start reading": "Oʻqishni qayerdan boshlashni tanlang", + "From Chapter Start": "Bob boshidan", + "Start reading from the beginning of the chapter": "Bob boshidan oʻqishni boshlash", + "Resume": "Davom ettirish", + "Continue from where you left off": "Qoldirgan joyingizdan davom eting", + "From Current Page": "Joriy sahifadan", + "Start from where you are currently reading": "Hozir oʻqiyotgan joyingizdan boshlash", + "From Selection": "Tanlovdan", + "Section Title": "Boʻlim sarlavhasi", + "More Info": "Batafsil maʼlumot", + "Hardcover sync enabled for this book": "Ushbu kitob uchun Hardcover sinxronlash yoqildi", + "Hardcover sync disabled for this book": "Ushbu kitob uchun Hardcover sinxronlash oʻchirildi", + "Parallel Read": "Parallel oʻqish", + "Disable": "Oʻchirish", + "Enable": "Yoqish", + "Exit Parallel Read": "Parallel oʻqishdan chiqish", + "Enter Parallel Read": "Parallel oʻqishga kirish", + "KOReader Sync": "KOReader sinxronlash", + "Config": "Konfiguratsiya", + "Push Progress": "Jarayonni yuborish", + "Pull Progress": "Jarayonni olish", + "Readwise Sync": "Readwise sinxronlash", + "Push Highlights": "Belgilashlarni yuborish", + "Hardcover Sync": "Hardcover sinxronlash", + "Enable for This Book": "Ushbu kitob uchun yoqish", + "Push Notes": "Eslatmalarni yuborish", + "Show on Discord": "Discord-da koʻrsatish", + "Display what I'm reading on Discord": "Discord-da nima oʻqiyotganimni koʻrsatish", + "Sort TOC by Page": "Mundarijani sahifa boʻyicha saralash", + "Bookmarks": "Xatchoʻplar", + "Annotations": "Izohlar", + "Delete this conversation?": "Ushbu suhbatni oʻchirasizmi?", + "No conversations yet": "Hali suhbatlar yoʻq", + "Start a new chat to ask questions about this book": "Ushbu kitob haqida savollar berish uchun yangi suhbat boshlang", + "Rename": "Nomini oʻzgartirish", + "New Chat": "Yangi suhbat", + "Show Results": "Natijalarni koʻrsatish", + "Book Menu": "Kitob menyusi", + "Unpin Sidebar": "Yon panelni mahkamlashdan boʻshatish", + "Pin Sidebar": "Yon panelni mahkamlash", + "Search...": "Qidirish...", + "Clear search": "Qidiruvni tozalash", + "Search Options": "Qidiruv variantlari", + "Clear search history": "Qidiruv tarixini tozalash", + "Chapter": "Bob", + "Match Case": "Registrga mos kelishi", + "Match Whole Words": "Butun soʻzlarga mos kelishi", + "Match Diacritics": "Diakritik belgilarga mos kelishi", + "Search results for '{{term}}'": "'{{term}}' uchun qidiruv natijalari", + "Previous Result": "Oldingi natija", + "Next Result": "Keyingi natija", + "Show Search Results": "Qidiruv natijalarini koʻrsatish", + "Close Search": "Qidiruvni yopish", + "Sidebar": "Yon panel", + "Resize Sidebar": "Yon panel oʻlchamini oʻzgartirish", + "TOC": "Mundarija", + "Bookmark": "Xatchoʻp", + "Chat": "Suhbat", + "Toggle Sidebar": "Yon panelni ochish/yopish", + "(none)": "(yoʻq)", + "Sync Info": "Sinxronlash maʼlumoti", + "Book Fingerprint": "Kitob barmoq izi", + "Identifiers": "Identifikatorlar", + "Last Synced": "Oxirgi sinxronlash", + "Table viewer": "Jadval koʻrgichi", + "Toggle Translation": "Tarjimani ochish/yopish", + "Disable Translation": "Tarjimani oʻchirish", + "Enable Translation": "Tarjimani yoqish", + "Translation Disabled": "Tarjima oʻchirilgan", + "Previous Sentence": "Oldingi gap", + "Next Sentence": "Keyingi gap", + "Back to TTS Location": "TTS joyiga qaytish", + "No Timeout": "Vaqt cheklovi yoʻq", + "{{value}} minute": "{{value}} daqiqa", + "{{value}} minutes": "{{value}} daqiqa", + "{{value}} hour": "{{value}} soat", + "{{value}} hours": "{{value}} soat", + "Voices for {{lang}}": "{{lang}} uchun ovozlar", + "Slow": "Sekin", + "Fast": "Tez", + "Set Timeout": "Vaqt cheklovini belgilash", + "Select Voice": "Ovozni tanlash", + "{{engine}}: {{count}} voices_one": "{{engine}}: {{count}} ovoz", + "{{engine}}: {{count}} voices_other": "{{engine}}: {{count}} ovoz", + "Toggle Sticky Bottom TTS Bar": "Pastki yopishqoq TTS panelini ochish/yopish", + "Zoom Level": "Kattalashtirish darajasi", + "Zoom Out": "Kichraytirish", + "Reset Zoom": "Kattalashtirishni tiklash", + "Zoom In": "Kattalashtirish", + "Zoom Mode": "Kattalashtirish rejimi", + "Single Page": "Yagona sahifa", + "Auto Spread": "Avtomatik yoyish", + "Fit Page": "Sahifaga moslashtirish", + "Fit Width": "Kenglikka moslashtirish", + "Separate Cover Page": "Alohida muqova sahifasi", + "Scrolled Mode": "Aylantirish rejimi", + "Paragraph Mode": "Xatboshi rejimi", + "Speed Reading Mode": "Tezkor oʻqish rejimi", + "Sign in to Sync": "Sinxronlash uchun kirish", + "Apply Theme Colors to PDF": "Mavzu ranglarini PDF-ga qoʻllash", + "Invert Image In Dark Mode": "Qorongʻi rejimda rasmni teskari qilish", + "Failed to auto-save book cover for lock screen: {{error}}": "Quflash ekrani uchun kitob muqovasini avtomatik saqlab boʻlmadi: {{error}}", + "Enable Hardcover sync for this book first.": "Avval ushbu kitob uchun Hardcover sinxronlashni yoqing.", + "No annotations or excerpts to sync for this book.": "Ushbu kitob uchun sinxronlashga izohlar yoki parchalar yoʻq.", + "Configure Hardcover in Settings first.": "Avval Sozlamalarda Hardcover-ni sozlang.", + "No new Hardcover note changes to sync.": "Sinxronlashga yangi Hardcover eslatma oʻzgarishlari yoʻq.", + "Hardcover synced: {{inserted}} new, {{updated}} updated, {{skipped}} unchanged": "Hardcover sinxronlandi: {{inserted}} ta yangi, {{updated}} ta yangilandi, {{skipped}} ta oʻzgarishsiz", + "Hardcover notes sync failed: {{error}}": "Hardcover eslatmalarni sinxronlashda xato: {{error}}", + "Reading progress synced to Hardcover": "Oʻqish jarayoni Hardcover-ga sinxronlandi", + "Hardcover progress sync failed: {{error}}": "Hardcover jarayonni sinxronlashda xato: {{error}}", + "Reading Progress Synced": "Oʻqish jarayoni sinxronlandi", + "Page {{page}} of {{total}} ({{percentage}}%)": "{{total}} sahifadan {{page}} ({{percentage}}%)", + "Current position": "Joriy holat", + "Approximately page {{page}} of {{total}} ({{percentage}}%)": "Taxminan {{total}} sahifadan {{page}} ({{percentage}}%)", + "Approximately {{percentage}}%": "Taxminan {{percentage}}%", + "Highlights synced to Readwise": "Belgilashlar Readwise-ga sinxronlandi", + "Readwise sync failed: no internet connection": "Readwise sinxronlashda xato: internet ulanishi yoʻq", + "Readwise sync failed: {{error}}": "Readwise sinxronlashda xato: {{error}}", + "Translating...": "Tarjima qilinmoqda...", + "Please log in to use advanced TTS features": "Kengaytirilgan TTS xususiyatlaridan foydalanish uchun tizimga kiring", + "TTS not supported for this document": "Ushbu hujjat uchun TTS qoʻllab-quvvatlanmaydi", + "Read Aloud": "Ovoz chiqarib oʻqish", + "Ready to read aloud": "Ovoz chiqarib oʻqishga tayyor", + "Expires in {{count}} days_one": "{{count}} kunda muddati tugaydi", + "Expires in {{count}} days_other": "{{count}} kunda muddati tugaydi", + "Expires in {{count}} hours_one": "{{count}} soatda muddati tugaydi", + "Expires in {{count}} hours_other": "{{count}} soatda muddati tugaydi", + "Expiring soon": "Tez orada muddati tugaydi", + "Missing share token": "Ulashish tokeni yetishmaydi", + "Could not add to your library": "Kutubxonangizga qoʻshib boʻlmadi", + "This share link is no longer available": "Ushbu ulashish havolasi endi mavjud emas", + "Could not load shared book": "Ulashilgan kitobni yuklab boʻlmadi", + "The original link may have expired or been revoked.": "Asl havola muddati tugagan yoki bekor qilingan boʻlishi mumkin.", + "The share link is missing required information.": "Ulashish havolasida kerakli maʼlumot yetishmaydi.", + "Please check your connection and try again.": "Ulanishingizni tekshiring va qayta urinib koʻring.", + "Get Readest": "Readest-ni olish", + "Loading shared book…": "Ulashilgan kitob yuklanmoqda...", + "Shared with you": "Siz bilan ulashildi", + "Downloading… {{percent}}%": "Yuklanmoqda... {{percent}}%", + "Adding…": "Qoʻshilmoqda...", + "Add to my library": "Mening kutubxonamga qoʻshish", + "Import progress": "Import jarayoni", + "Open in app": "Ilovada ochish", + "Delete Your Account?": "Hisobingizni oʻchirasizmi?", + "This action cannot be undone. All your data in the cloud will be permanently deleted.": "Ushbu amalni bekor qilib boʻlmaydi. Bulutdagi barcha maʼlumotlaringiz butunlay oʻchiriladi.", + "Delete Permanently": "Butunlay oʻchirish", + "Restore Purchase": "Xaridni tiklash", + "Manage Subscription": "Obunani boshqarish", + "Manage Storage": "Xotirani boshqarish", + "Manage Shared Links": "Ulashilgan havolalarni boshqarish", + "Reset Password": "Parolni tiklash", + "Update Email": "Emailni yangilash", + "Sign Out": "Chiqish", + "Delete Account": "Hisobni oʻchirish", + "Upgrade to {{plan}}": "{{plan}} ga yangilash", + "Complete Your Subscription": "Obunangizni yakunlang", + "Coming Soon": "Tez orada", + "Upgrade to Plus or Pro": "Plus yoki Pro ga yangilash", + "Current Plan": "Joriy reja", + "On-Demand Purchase": "Talabga koʻra xarid", + "Plan Limits": "Reja cheklovlari", + "Full Customization": "Toʻliq sozlash", + "Could not load your shares": "Ulashishlaringizni yuklab boʻlmadi", + "Revoked": "Bekor qilindi", + "Expired": "Muddati tugagan", + "Shared books": "Ulashilgan kitoblar", + "You haven't shared any books yet": "Siz hali hech qanday kitob ulashmagansiz", + "Open a book and tap Share to send it to a friend.": "Kitobni oching va doʻstingizga yuborish uchun Ulashish tugmasini bosing.", + "{{count}} active_one": "{{count}} ta faol", + "{{count}} active_other": "{{count}} ta faol", + "{{count}} downloads_one": "{{count}} ta yuklab olish", + "{{count}} downloads_other": "{{count}} ta yuklab olish", + "starts at saved page": "saqlangan sahifadan boshlanadi", + "More actions": "Koʻproq amallar", + "Loading…": "Yuklanmoqda...", + "Load more": "Koʻproq yuklash", + "Failed to load files": "Fayllarni yuklab boʻlmadi", + "Deleted {{count}} file(s)_one": "{{count}} ta fayl oʻchirildi", + "Deleted {{count}} file(s)_other": "{{count}} ta fayllar oʻchirildi", + "Failed to delete {{count}} file(s)_one": "{{count}} ta faylni oʻchirib boʻlmadi", + "Failed to delete {{count}} file(s)_other": "{{count}} ta fayllarni oʻchirib boʻlmadi", + "Failed to delete files": "Fayllarni oʻchirib boʻlmadi", + "Cloud Storage Usage": "Bulutli xotira foydalanishi", + "Total Files": "Jami fayllar", + "Total Size": "Jami hajm", + "Quota": "Kvota", + "Used": "Ishlatilgan", + "Files": "Fayllar", + "Search files...": "Fayllarni qidirish...", + "Newest First": "Avval yangilari", + "Oldest First": "Avval eskilari", + "Largest First": "Avval kattalari", + "Smallest First": "Avval kichiklari", + "Name A-Z": "Nom A-Z", + "Name Z-A": "Nom Z-A", + "{{count}} selected_one": "{{count}} ta tanlandi", + "{{count}} selected_other": "{{count}} ta tanlandi", + "Delete Selected": "Tanlanganlarni oʻchirish", + "Size": "Hajm", + "Created": "Yaratildi", + "No files found": "Fayllar topilmadi", + "No files uploaded yet": "Hali fayllar yuklanmagan", + "files": "fayllar", + "Page {{current}} of {{total}}": "{{total}} sahifadan {{current}}", + "Are you sure to delete {{count}} selected file(s)?_one": "{{count}} ta tanlangan faylni oʻchirishga ishonchingiz komilmi?", + "Are you sure to delete {{count}} selected file(s)?_other": "{{count}} ta tanlangan fayllarni oʻchirishga ishonchingiz komilmi?", + "Failed to create checkout session": "Toʻlov sessiyasini yaratib boʻlmadi", + "No purchases found to restore.": "Tiklash uchun xaridlar topilmadi.", + "Failed to restore purchases.": "Xaridlarni tiklab boʻlmadi.", + "Failed to manage subscription.": "Obunani boshqarib boʻlmadi.", + "Failed to delete user. Please try again later.": "Foydalanuvchini oʻchirib boʻlmadi. Keyinroq qayta urinib koʻring.", + "Loading profile...": "Profil yuklanmoqda...", + "Processing your payment...": "Toʻlovingiz qayta ishlanmoqda...", + "Please wait while we confirm your subscription.": "Obunangizni tasdiqlayotganimizda kuting.", + "Payment Processing": "Toʻlov qayta ishlanmoqda", + "Your payment is being processed. This usually takes a few moments.": "Toʻlovingiz qayta ishlanmoqda. Bu odatda bir necha lahza vaqt oladi.", + "Payment Failed": "Toʻlov muvaffaqiyatsiz tugadi", + "We couldn't process your subscription. Please try again or contact support if the issue persists.": "Obunangizni qayta ishlay olmadik. Qayta urinib koʻring yoki muammo davom etsa, qoʻllab-quvvatlash xizmatiga murojaat qiling.", + "Back to Profile": "Profilga qaytish", + "Purchase Successful!": "Xarid muvaffaqiyatli!", + "Subscription Successful!": "Obuna muvaffaqiyatli!", + "Thank you for your purchase! Your payment has been processed successfully.": "Xaridingiz uchun rahmat! Toʻlovingiz muvaffaqiyatli qayta ishlandi.", + "Thank you for your subscription! Your payment has been processed successfully.": "Obunangiz uchun rahmat! Toʻlovingiz muvaffaqiyatli qayta ishlandi.", + "Email:": "Email:", + "Plan:": "Reja:", + "Amount:": "Miqdor:", + "Order ID:": "Buyurtma ID:", + "Need help? Contact our support team at support@readest.com": "Yordam kerakmi? Qoʻllab-quvvatlash jamoamizga support@readest.com orqali murojaat qiling", + "Lifetime Plan": "Umrbod reja", + "lifetime": "umrbod", + "One-Time Payment": "Bir martalik toʻlov", + "Make a single payment to enjoy lifetime access to specific features on all devices. Purchase specific features or services only when you need them.": "Barcha qurilmalarda muayyan xususiyatlarga umrbod kirishdan foydalanish uchun bir martalik toʻlov qiling. Muayyan xususiyatlar yoki xizmatlarni faqat kerak boʻlganda sotib oling.", + "Expand Cloud Sync Storage": "Bulutli sinxronlash xotirasini kengaytirish", + "Expand your cloud storage forever with a one-time purchase. Each additional purchase adds more space.": "Bir martalik xarid bilan bulutli xotirangizni abadiy kengaytiring. Har bir qoʻshimcha xarid koʻproq joy qoʻshadi.", + "Unlock All Customization Options": "Barcha sozlash variantlarini ochish", + "Unlock additional themes, fonts, layout options and read aloud, translators, cloud storage services.": "Qoʻshimcha mavzular, shriftlar, sahifalash variantlari va ovoz chiqarib oʻqish, tarjimonlar, bulutli xotira xizmatlarini oching.", + "Free Plan": "Bepul reja", + "month": "oy", + "year": "yil", + "Cross-Platform Sync": "Platformalararo sinxronlash", + "Seamlessly sync your library, progress, highlights, and notes across all your devices—never lose your place again.": "Kutubxonangiz, jarayoningiz, belgilashlaringiz va eslatmalaringizni barcha qurilmalaringizda silliq sinxronlang — joyingizni boshqa hech qachon yoʻqotmang.", + "Customizable Reading": "Sozlanadigan oʻqish", + "Personalize every detail with adjustable fonts, layouts, themes, and advanced display settings for the perfect reading experience.": "Mukammal oʻqish tajribasi uchun moslashuvchi shriftlar, sahifalashlar, mavzular va kengaytirilgan ekran sozlamalari bilan har bir tafsilotni shaxsiylashtiring.", + "AI Read Aloud": "AI ovoz chiqarib oʻqish", + "Enjoy hands-free reading with natural-sounding AI voices that bring your books to life.": "Kitoblaringizga jon kirituvchi tabiiy ovozli AI ovozlar bilan qoʻlsiz oʻqishdan zavqlaning.", + "AI Translations": "AI tarjimalar", + "Translate any text instantly with the power of Google, Azure, or DeepL—understand content in any language.": "Google, Azure yoki DeepL kuchi bilan istalgan matnni darhol tarjima qiling — istalgan tildagi kontentni tushuning.", + "Community Support": "Hamjamiyat qoʻllab-quvvatlashi", + "Connect with fellow readers and get help fast in our friendly community channels.": "Boshqa oʻquvchilar bilan bogʻlaning va doʻstona hamjamiyat kanallarimizda tezkor yordam oling.", + "Cloud Sync Storage": "Bulutli sinxronlash xotirasi", + "AI Translations (per day)": "AI tarjimalar (kuniga)", + "Plus Plan": "Plus reja", + "Includes All Free Plan Benefits": "Barcha bepul reja imtiyozlarini oʻz ichiga oladi", + "Unlimited AI Read Aloud Hours": "Cheklanmagan AI ovoz chiqarib oʻqish soatlari", + "Listen without limits—convert as much text as you like into immersive audio.": "Cheklovsiz tinglang — istagancha matnni jonli audioga aylantiring.", + "More AI Translations": "Koʻproq AI tarjimalar", + "Unlock enhanced translation capabilities with more daily usage and advanced options.": "Koʻproq kunlik foydalanish va kengaytirilgan variantlar bilan kengaytirilgan tarjima imkoniyatlarini oching.", + "DeepL Pro Access": "DeepL Pro kirish huquqi", + "Translate up to 100,000 characters daily with the most accurate translation engine available.": "Mavjud eng aniq tarjima dvigateli bilan kuniga 100 000 tagacha belgini tarjima qiling.", + "Securely store and access your entire reading collection with up to 5 GB of cloud storage.": "5 GB gacha bulutli xotira bilan butun oʻqish toʻplamingizni xavfsiz saqlang va kirish huquqiga ega boʻling.", + "Priority Support": "Birinchi navbatdagi qoʻllab-quvvatlash", + "Enjoy faster responses and dedicated assistance whenever you need help.": "Yordam kerak boʻlganda tezroq javoblardan va maxsus yordamdan zavqlaning.", + "Pro Plan": "Pro reja", + "Includes All Plus Plan Benefits": "Barcha Plus reja imtiyozlarini oʻz ichiga oladi", + "Early Feature Access": "Yangi xususiyatlarga erta kirish huquqi", + "Be the first to explore new features, updates, and innovations before anyone else.": "Yangi xususiyatlar, yangilanishlar va innovatsiyalarni boshqalardan oldin oʻrganib chiquvchi birinchi boʻling.", + "Advanced AI Tools": "Kengaytirilgan AI vositalari", + "Harness powerful AI tools for smarter reading, translation, and content discovery.": "Aqlliroq oʻqish, tarjima va kontent kashfiyoti uchun kuchli AI vositalaridan foydalaning.", + "Translate up to 500,000 characters daily with the most accurate translation engine available.": "Mavjud eng aniq tarjima dvigateli bilan kuniga 500 000 tagacha belgini tarjima qiling.", + "Securely store and access your entire reading collection with up to 20 GB of cloud storage.": "20 GB gacha bulutli xotira bilan butun oʻqish toʻplamingizni xavfsiz saqlang va kirish huquqiga ega boʻling.", + "Version {{version}}": "Versiya {{version}}", + "Check Update": "Yangilanishni tekshirish", + "Already the latest version": "Eng songgi versiya allaqachon oʻrnatilgan", + "Checking for updates...": "Yangilanishlar tekshirilmoqda...", + "Error checking for updates": "Yangilanishlarni tekshirishda xato", + "Command Palette": "Buyruq palitrasi", + "Search settings and actions...": "Sozlamalar va amallarni qidirish...", + "No results found for": "Natijalar topilmadi:", + "Type to search settings and actions": "Sozlamalar va amallarni qidirish uchun yozing", + "Recent": "Soʻnggi", + "navigate": "harakatlanish", + "select": "tanlash", + "close": "yopish", + "Drop to Import Books": "Kitoblarni import qilish uchun tashlang", + "Keyboard Shortcuts": "Klaviatura yorliqlari", + "View all keyboard shortcuts": "Barcha klaviatura yorliqlarini koʻrish", + "Terms of Service": "Foydalanish shartlari", + "Privacy Policy": "Maxfiylik siyosati", + "ON": "YOQ", + "OFF": "OʻCH", + "Enter book title": "Kitob sarlavhasini kiriting", + "Subtitle": "Quyi sarlavha", + "Enter book subtitle": "Kitob quyi sarlavhasini kiriting", + "Enter author name": "Muallif nomini kiriting", + "Enter series name": "Seriya nomini kiriting", + "Series Index": "Seriya indeksi", + "Enter series index": "Seriya indeksini kiriting", + "Total in Series": "Seriyadagi jami", + "Enter total books in series": "Seriyadagi jami kitoblarni kiriting", + "ISBN": "ISBN", + "Enter publisher": "Nashriyotni kiriting", + "Publication Date": "Nashr sanasi", + "YYYY or YYYY-MM-DD": "YYYY yoki YYYY-MM-DD", + "Keep existing source identifier": "Mavjud manba identifikatorini saqlash", + "Subjects": "Mavzular", + "Fiction, Science, History": "Badiiy, fan, tarix", + "Description": "Tavsif", + "Enter book description": "Kitob tavsifini kiriting", + "Change cover image": "Muqova rasmini oʻzgartirish", + "Replace": "Almashtirish", + "Remove cover image": "Muqova rasmini olib tashlash", + "Unlock cover": "Muqovani ochish", + "Lock cover": "Muqovani quflash", + "Auto-Retrieve Metadata": "Metamaʼlumotlarni avtomatik olish", + "Auto-Retrieve": "Avtomatik olish", + "Unlock all fields": "Barcha maydonlarni ochish", + "Unlock All": "Barchasini ochish", + "Lock all fields": "Barcha maydonlarni quflash", + "Lock All": "Barchasini quflash", + "Reset": "Tiklash", + "Are you sure to delete the selected book?": "Tanlangan kitobni oʻchirishga ishonchingiz komilmi?", + "Are you sure to delete the cloud backup of the selected book?": "Tanlangan kitobning bulutdagi zaxira nusxasini oʻchirishga ishonchingiz komilmi?", + "Are you sure to delete the local copy of the selected book?": "Tanlangan kitobning mahalliy nusxasini oʻchirishga ishonchingiz komilmi?", + "Book exported successfully.": "Kitob muvaffaqiyatli eksport qilindi.", + "Failed to export the book.": "Kitobni eksport qilib boʻlmadi.", + "Edit Metadata": "Metamaʼlumotlarni tahrirlash", + "Book Details": "Kitob tafsilotlari", + "Unknown": "Nomaʼlum", + "Delete Book Options": "Kitobni oʻchirish variantlari", + "Remove from Cloud & Device": "Bulut va qurilmadan olib tashlash", + "Remove from Cloud Only": "Faqat bulutdan olib tashlash", + "Remove from Device Only": "Faqat qurilmadan olib tashlash", + "Download from Cloud": "Bulutdan yuklab olish", + "Upload to Cloud": "Bulutga yuklash", + "Export Book": "Kitobni eksport qilish", + "Metadata": "Metamaʼlumotlar", + "Updated": "Yangilandi", + "Added": "Qoʻshildi", + "File Size": "Fayl hajmi", + "No description available": "Tavsif mavjud emas", + "Locked": "Quflangan", + "Select Metadata Source": "Metamaʼlumotlar manbasini tanlash", + "Keep manual input": "Qoʻlda kiritishni saqlash", + "Please enter a model ID": "Model ID-sini kiriting", + "Model not available or invalid": "Model mavjud emas yoki notoʻgʻri", + "Failed to validate model": "Modelni tekshirib boʻlmadi", + "Couldn't connect to Ollama. Is it running?": "Ollama-ga ulanib boʻlmadi. U ishlayaptimi?", + "Invalid API key or connection failed": "Notoʻgʻri API kalit yoki ulanish muvaffaqiyatsiz tugadi", + "Connection failed": "Ulanish muvaffaqiyatsiz tugadi", + "AI Assistant": "AI yordamchi", + "Enable AI Assistant": "AI yordamchini yoqish", + "Provider": "Provayder", + "Ollama (Local)": "Ollama (mahalliy)", + "AI Gateway (Cloud)": "AI Gateway (bulut)", + "Ollama Configuration": "Ollama konfiguratsiyasi", + "Refresh Models": "Modellarni yangilash", + "AI Model": "AI model", + "Embedding Model": "Embedding modeli", + "No models detected": "Modellar aniqlanmadi", + "AI Gateway Configuration": "AI Gateway konfiguratsiyasi", + "Choose from a selection of high-quality, economical AI models. You can also bring your own model by selecting \"Custom Model\" below.": "Yuqori sifatli va tejamkor AI modellari toʻplamidan tanlang. Quyida \"Maxsus model\" ni tanlash orqali oʻz modelingizni ham olib kelishingiz mumkin.", + "API Key": "API kalit", + "Get Key": "Kalitni olish", + "Model": "Model", + "Custom Model...": "Maxsus model...", + "Custom Model ID": "Maxsus model ID", + "Validate": "Tekshirish", + "Model available": "Model mavjud", + "Connection": "Ulanish", + "Test Connection": "Ulanishni sinash", + "Connected": "Ulandi", + "Background Image": "Fon rasmi", + "Import Image": "Rasm import qilish", + "Opacity": "Shaffoflik", + "Cover": "Muqova", + "Contain": "Sigʻdirish", + "Code Highlighting": "Kod belgilash", + "Enable Highlighting": "Belgilashni yoqish", + "Code Language": "Kod tili", + "Name": "Nom", + "Highlight Colors": "Belgilash ranglari", + "Custom Colors": "Maxsus ranglar", + "Reading Ruler": "Oʻqish chizgʻichi", + "Enable Reading Ruler": "Oʻqish chizgʻichini yoqish", + "Lines to Highlight": "Belgilanadigan qatorlar", + "Ruler Color": "Chizgʻich rangi", + "Theme Color": "Mavzu rangi", + "Custom": "Maxsus", + "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": "Butun dunyo — sahna,\nVa barcha erkaklar va ayollar oddiy aktyorlardir;\nUlarning oʻz chiqishlari va kirishlari bor,\nVa bir kishi oʻz davrida koʻp rollar oʻynaydi,\nUning amallari yetti yoshda boʻladi.\n\n— Uilyam Shekspir", + "(from 'As You Like It', Act II)": "('Sizga maʼqulidir' asaridan, II parda)", + "Custom Theme": "Maxsus mavzu", + "Theme Name": "Mavzu nomi", + "Text Color": "Matn rangi", + "Background Color": "Fon rangi", + "Link Color": "Havola rangi", + "Theme Mode": "Mavzu rejimi", + "TTS Highlighting": "TTS belgilash", + "Style": "Uslub", + "Highlighter": "Belgilovchi", + "Underline": "Tagiga chizish", + "Strikethrough": "Ustidan chizish", + "Squiggly": "Egri chiziq", + "Outline": "Konturli", + "Save Current Color": "Joriy rangni saqlash", + "Quick Colors": "Tezkor ranglar", + "Override Book Color": "Kitob rangini bekor qilish", + "None": "Yoʻq", + "Scroll": "Aylantirish", + "Single Section Scroll": "Yagona boʻlim aylantirishi", + "Overlap Pixels": "Bir-biriga tushish piksellari", + "Hide Scrollbar": "Aylantirish panelini yashirish", + "Pagination": "Sahifalash", + "Tap to Paginate": "Sahifalash uchun bosing", + "Click to Paginate": "Sahifalash uchun bosing", + "Tap Both Sides": "Ikkala tomonni bosing", + "Click Both Sides": "Ikkala tomonni bosing", + "Swap Tap Sides": "Bosish tomonlarini almashtirish", + "Swap Click Sides": "Bosish tomonlarini almashtirish", + "Disable Double Tap": "Ikki marta bosishni oʻchirish", + "Disable Double Click": "Ikki marta bosishni oʻchirish", + "Volume Keys for Page Flip": "Sahifani aylantirish uchun ovoz tugmalari", + "Show Page Navigation Buttons": "Sahifalararo navigatsiya tugmalarini koʻrsatish", + "Annotation Tools": "Izoh vositalari", + "Enable Quick Actions": "Tezkor amallarni yoqish", + "Quick Action": "Tezkor amal", + "Copy to Notebook": "Daftarga nusxalash", + "Animation": "Animatsiya", + "Paging Animation": "Sahifalash animatsiyasi", + "Device": "Qurilma", + "E-Ink Mode": "E-Ink rejimi", + "Color E-Ink Mode": "Rangli E-Ink rejimi", + "System Screen Brightness": "Tizim ekran yorqinligi", + "Keep Screen Awake": "Ekranni faol saqlash", + "Security": "Xavfsizlik", + "Allow JavaScript": "JavaScript-ga ruxsat berish", + "Enable only if you trust the file.": "Faqat faylga ishonsangiz yoqing.", + "Wiktionary": "Wiktionary", + "Wikipedia": "Wikipedia", + "Drag to reorder": "Tartibni oʻzgartirish uchun torting", + "URL template must start with http(s):// and contain %WORD%.": "URL shabloni http(s):// bilan boshlanishi va %WORD% ni oʻz ichiga olishi kerak.", + "Built-in": "Oʻrnatilgan", + "Web": "Veb", + "Bundle is missing on this device. Re-import to use it.": "Toʻplam ushbu qurilmada mavjud emas. Foydalanish uchun qayta import qiling.", + "This dictionary format is not supported.": "Ushbu lugʻat formati qoʻllab-quvvatlanmaydi.", + "MDict": "MDict", + "DICT": "DICT", + "Slob": "Slob", + "StarDict": "StarDict", + "Imported {{count}} dictionary_one": "{{count}} ta lugʻat import qilindi", + "Imported {{count}} dictionary_other": "{{count}} ta lugʻatlar import qilindi", + "Skipped incomplete bundles: {{names}}": "Toʻliq boʻlmagan toʻplamlar oʻtkazib yuborildi: {{names}}", + "Failed to import dictionary: {{message}}": "Lugʻatni import qilib boʻlmadi: {{message}}", + "Dictionaries": "Lugʻatlar", + "Cancel Delete": "Oʻchirishni bekor qilish", + "Delete Dictionary": "Lugʻatni oʻchirish", + "Importing…": "Import qilinmoqda...", + "Import Dictionary": "Lugʻatni import qilish", + "Add Web Search": "Veb qidiruv qoʻshish", + "No dictionaries available.": "Lugʻatlar mavjud emas.", + "Tips": "Maslahatlar", + "StarDict bundles need .ifo, .idx, and .dict.dz files (.syn optional).": "StarDict toʻplamlari .ifo, .idx va .dict.dz fayllarni talab qiladi (.syn ixtiyoriy).", + "MDict bundles use .mdx files; companion .mdd files are optional.": "MDict toʻplamlari .mdx fayllaridan foydalanadi; hamrohi .mdd fayllar ixtiyoriy.", + "DICT bundles need a .index file and a .dict.dz file.": "DICT toʻplamlari .index fayl va .dict.dz faylni talab qiladi.", + "Slob bundles need a .slob file.": "Slob toʻplamlari .slob faylni talab qiladi.", + "Select all the bundle files together when importing.": "Import qilishda toʻplamning barcha fayllarini birgalikda tanlang.", + "Edit Web Search": "Veb qidiruvni tahrirlash", + "e.g. Google": "masalan, Google", + "URL Template": "URL shabloni", + "Use %WORD% where the looked-up word should appear.": "Qidirilgan soʻz paydo boʻlishi kerak boʻlgan joyda %WORD% ishlatiladi.", + "Custom Fonts": "Maxsus shriftlar", + "Delete Font": "Shriftni oʻchirish", + "Import Font": "Shriftni import qilish", + "Supported font formats: .ttf, .otf, .woff, .woff2": "Qoʻllab-quvvatlanadigan shrift formatlari: .ttf, .otf, .woff, .woff2", + "Custom fonts can be selected from the Font Face menu": "Maxsus shriftlar Font Face menyusidan tanlanishi mumkin", + "Global Settings": "Umumiy sozlamalar", + "Apply to All Books": "Barcha kitoblarga qoʻllash", + "Apply to This Book": "Ushbu kitobga qoʻllash", + "Reset Settings": "Sozlamalarni tiklash", + "Clear Custom Fonts": "Maxsus shriftlarni tozalash", + "Manage Custom Fonts": "Maxsus shriftlarni boshqarish", + "System Fonts": "Tizim shriftlari", + "Serif Font": "Serif shrift", + "Sans-Serif Font": "Sans-Serif shrift", + "Override Book Font": "Kitob shriftini bekor qilish", + "Default Font Size": "Standart shrift oʻlchami", + "Minimum Font Size": "Minimum shrift oʻlchami", + "Font Weight": "Shrift qalinligi", + "Font Family": "Shrift oilasi", + "Default Font": "Standart shrift", + "CJK Font": "CJK shrift", + "Font Face": "Shrift turi", + "Monospace Font": "Monospace shrift", + "Source and Translated": "Manba va tarjima", + "Translated Only": "Faqat tarjima", + "Source Only": "Faqat manba", + "No Conversion": "Konvertatsiyasiz", + "Simplified to Traditional": "Soddalashtirilgandan anʼanaviyga", + "Traditional to Simplified": "Anʼanaviydan soddalashtirilganga", + "Simplified to Traditional (Taiwan)": "Soddalashtirilgandan anʼanaviyga (Tayvan)", + "Simplified to Traditional (Hong Kong)": "Soddalashtirilgandan anʼanaviyga (Gonkong)", + "Simplified to Traditional (Taiwan), with phrases": "Soddalashtirilgandan anʼanaviyga (Tayvan), iboralar bilan", + "Traditional (Taiwan) to Simplified": "Anʼanaviydan (Tayvan) soddalashtirilganga", + "Traditional (Hong Kong) to Simplified": "Anʼanaviydan (Gonkong) soddalashtirilganga", + "Traditional (Taiwan) to Simplified, with phrases": "Anʼanaviydan (Tayvan) soddalashtirilganga, iboralar bilan", + "Interface Language": "Interfeys tili", + "Translation": "Tarjima", + "Show Source Text": "Manba matnini koʻrsatish", + "TTS Text": "TTS matni", + "Translation Service": "Tarjima xizmati", + "Translate To": "Tarjima qilinadigan til", + "Punctuation": "Tinish belgilari", + "Replace Quotation Marks": "Qoʻshtirnoqlarni almashtirish", + "Enabled only in vertical layout.": "Faqat vertikal sahifalashda yoqilgan.", + "Convert Simplified and Traditional Chinese": "Soddalashtirilgan va anʼanaviy xitoy tilini konvertatsiya qilish", + "Convert Mode": "Konvertatsiya rejimi", + "Override Book Layout": "Kitob sahifalashini bekor qilish", + "Writing Mode": "Yozuv rejimi", + "Default": "Standart", + "Horizontal Direction": "Gorizontal yoʻnalish", + "Vertical Direction": "Vertikal yoʻnalish", + "RTL Direction": "RTL yoʻnalish", + "Border Frame": "Chegara romi", + "Double Border": "Ikkita chegara", + "Border Color": "Chegara rangi", + "Paragraph": "Xatboshi", + "Use Book Layout": "Kitob sahifalashidan foydalanish", + "Paragraph Margin": "Xatboshi cheti", + "Word Spacing": "Soʻzlar oraligʻi", + "Letter Spacing": "Harflar oraligʻi", + "Text Indent": "Matn chekinishi", + "Full Justification": "Toʻliq tekislash", + "Hyphenation": "Tirelash", + "Page": "Sahifa", + "Top Margin (px)": "Yuqori chet (px)", + "Bottom Margin (px)": "Pastki chet (px)", + "Left Margin (px)": "Chap chet (px)", + "Right Margin (px)": "Oʻng chet (px)", + "Column Gap (%)": "Ustunlar oraligʻi (%)", + "Maximum Number of Columns": "Maksimal ustunlar soni", + "Maximum Column Height": "Maksimal ustun balandligi", + "Maximum Column Width": "Maksimal ustun kengligi", + "Apply also in Scrolled Mode": "Aylantirish rejimida ham qoʻllash", + "Header & Footer": "Yuqori va pastki kolontitul", + "Show Header": "Yuqori kolontitulni koʻrsatish", + "Show Footer": "Pastki kolontitulni koʻrsatish", + "Show Remaining Time": "Qolgan vaqtni koʻrsatish", + "Show Remaining Pages": "Qolgan sahifalarni koʻrsatish", + "Show Reading Progress": "Oʻqish jarayonini koʻrsatish", + "Reading Progress Style": "Oʻqish jarayoni uslubi", + "Percentage": "Foiz", + "Show Current Time": "Joriy vaqtni koʻrsatish", + "Use 24 Hour Clock": "24 soatlik formatdan foydalanish", + "Show Current Battery Status": "Joriy batareya holatini koʻrsatish", + "Show Battery Percentage": "Batareya foizini koʻrsatish", + "Tap to Toggle Footer": "Pastki kolontitulni ochish/yopish uchun bosing", + "Screen": "Ekran", + "Orientation": "Yoʻnalish", + "Portrait": "Vertikal", + "Landscape": "Gorizontal", + "Custom Content CSS": "Maxsus kontent CSS", + "Enter CSS for book content styling...": "Kitob kontentini uslublash uchun CSS kiriting...", + "Custom Reader UI CSS": "Maxsus oʻqigich UI CSS", + "Enter CSS for reader interface styling...": "Oʻqigich interfeysini uslublash uchun CSS kiriting...", + "Decrease": "Kamaytirish", + "Increase": "Oshirish", + "Layout": "Sahifalash", + "Behavior": "Xatti-harakat", + "TTS": "TTS", + "Search Settings": "Qidiruv sozlamalari", + "Reset {{settings}}": "{{settings}} ni tiklash", + "Settings Panels": "Sozlamalar panellari", + "Media Info": "Media maʼlumoti", + "Update Frequency": "Yangilanish chastotasi", + "Every Sentence": "Har bir gap", + "Every Paragraph": "Har bir xatboshi", + "Every Chapter": "Har bir bob", + "Get Help from the Readest Community": "Readest hamjamiyatidan yordam oling", + "A new version of Readest is available!": "Readest-ning yangi versiyasi mavjud!", + "Readest {{newVersion}} is available (installed version {{currentVersion}}).": "Readest {{newVersion}} mavjud (oʻrnatilgan versiya {{currentVersion}}).", + "Download and install now?": "Hoziroq yuklab olib, oʻrnatasizmi?", + "Downloading {{downloaded}} of {{contentLength}}": "{{contentLength}} dan {{downloaded}} yuklanmoqda", + "Download finished": "Yuklab olish tugadi", + "DOWNLOAD & INSTALL": "YUKLAB OLISH VA OʻRNATISH", + "Changelog": "Oʻzgarishlar tarixi", + "Software Update": "Dasturiy taʼminot yangilanishi", + "What's New in Readest": "Readest-da yangiliklar", + "Minimize": "Yigʻish", + "Maximize or Restore": "Kattalashtirish yoki tiklash", + "Switch Sidebar Tab": "Yon panel yorligʻini almashtirish", + "Toggle Notebook": "Daftarni ochish/yopish", + "Search in Book": "Kitobda qidirish", + "Toggle Scroll Mode": "Aylantirish rejimini ochish/yopish", + "Toggle Select Mode": "Tanlov rejimini ochish/yopish", + "Toggle Bookmark": "Xatchoʻpni ochish/yopish", + "Toggle Text to Speech": "Matnni nutqqa aylantirishni ochish/yopish", + "Play / Pause TTS": "TTS-ni ijro etish / pauza qilish", + "Toggle Paragraph Mode": "Xatboshi rejimini ochish/yopish", + "Toggle Toolbar": "Asboblar panelini ochish/yopish", + "Highlight Selection": "Tanlovni belgilash", + "Underline Selection": "Tanlov tagiga chizish", + "Annotate Selection": "Tanlovga izoh qoʻyish", + "Search Selection": "Tanlovni qidirish", + "Copy Selection": "Tanlovni nusxalash", + "Translate Selection": "Tanlovni tarjima qilish", + "Dictionary Lookup": "Lugʻatda qidirish", + "Read Aloud Selection": "Tanlovni ovoz chiqarib oʻqish", + "Proofread Selection": "Tanlovni tahrirlash", + "Open Settings": "Sozlamalarni ochish", + "Open Command Palette": "Buyruq palitrasini ochish", + "Show Keyboard Shortcuts": "Klaviatura yorliqlarini koʻrsatish", + "Open Books": "Kitoblarni ochish", + "Toggle Fullscreen": "Toʻliq ekranni ochish/yopish", + "Close Window": "Oynani yopish", + "Quit App": "Ilovadan chiqish", + "Go Left / Previous Page": "Chapga / Oldingi sahifa", + "Go Right / Next Page": "Oʻngga / Keyingi sahifa", + "Go Up": "Yuqoriga", + "Go Down": "Pastga", + "Previous Chapter": "Oldingi bob", + "Next Chapter": "Keyingi bob", + "Scroll Half Page Down": "Yarim sahifa pastga aylantirish", + "Scroll Half Page Up": "Yarim sahifa yuqoriga aylantirish", + "Save Note": "Eslatmani saqlash", + "General": "Umumiy", + "Navigation": "Navigatsiya", + "Text to Speech": "Matnni nutqqa aylantirish", + "Zoom": "Kattalashtirish", + "Window": "Oyna", + "Failed to load subscription plans.": "Obuna rejalarini yuklab boʻlmadi.", + "Select Files": "Fayllarni tanlash", + "Select Image": "Rasmni tanlash", + "Select Video": "Videoni tanlash", + "Select Audio": "Audioni tanlash", + "Select Fonts": "Shriftlarni tanlash", + "Select Dictionary Files": "Lugʻat fayllarini tanlash", + "{{count}} new item(s) downloaded from OPDS_one": "OPDS-dan {{count}} ta yangi element yuklab olindi", + "{{count}} new item(s) downloaded from OPDS_other": "OPDS-dan {{count}} ta yangi elementlar yuklab olindi", + "Failed to sync {{count}} OPDS catalog(s)_one": "{{count}} ta OPDS katalogini sinxronlab boʻlmadi", + "Failed to sync {{count}} OPDS catalog(s)_other": "{{count}} ta OPDS kataloglarini sinxronlab boʻlmadi", + "Book not in your library": "Kitob kutubxonangizda yoʻq", + "Sign in to import shared books": "Ulashilgan kitoblarni import qilish uchun kiring", + "Already in your library": "Allaqachon kutubxonangizda", + "Added to your library": "Kutubxonangizga qoʻshildi", + "Could not import shared book": "Ulashilgan kitobni import qilib boʻlmadi", + "Storage": "Xotira", + "{{percentage}}% of Cloud Sync Space Used.": "Bulutli sinxronlash joyining {{percentage}}% ishlatilgan.", + "Translation Characters": "Tarjima belgilari", + "{{percentage}}% of Daily Translation Characters Used.": "Kunlik tarjima belgilarining {{percentage}}% ishlatilgan.", + "Daily translation quota reached. Upgrade your plan to continue using AI translations.": "Kunlik tarjima kvotasiga yetildi. AI tarjimalardan foydalanishni davom ettirish uchun rejangizni yangilang.", + "Page Margins": "Sahifa chetlari", + "TTS Media Info Update Frequency": "TTS media maʼlumoti yangilanish chastotasi", + "AI Provider": "AI provayder", + "Ollama URL": "Ollama URL", + "Ollama Model": "Ollama modeli", + "AI Gateway Model": "AI Gateway modeli", + "Actions": "Amallar", + "LXGW WenKai GB Screen": "LXGW WenKai SC", + "LXGW WenKai TC": "LXGW WenKai TC", + "GuanKiapTsingKhai-T": "GuanKiapTsingKhai-T", + "Source Han Serif CN": "Source Han Serif", + "Huiwen-MinchoGBK": "Huiwen Mincho", + "KingHwa_OldSong": "KingHwa Song", + "Open the search result in your browser:": "Qidiruv natijasini brauzeringizda oching:", + "Open in {{name}}": "{{name}} da ochish", + "Read on Wikipedia →": "Wikipedia-da oʻqish →", + "No chapters detected": "Boblar aniqlanmadi", + "Failed to parse the EPUB file": "EPUB faylini tahlil qilib boʻlmadi", + "This book format is not supported": "Ushbu kitob formati qoʻllab-quvvatlanmaydi", + "Failed to open the book file": "Kitob faylini ochib boʻlmadi", + "The book file is empty": "Kitob fayli boʻsh", + "The book file is corrupted": "Kitob fayli buzilgan", + "Google Books": "Google Books", + "Open Library": "Open Library", + "Book not found in library": "Kitob kutubxonada topilmadi", + "Book uploaded: {{title}}": "Kitob yuklandi: {{title}}", + "Unknown error": "Nomaʼlum xato", + "Please log in to continue": "Davom etish uchun tizimga kiring", + "Insufficient storage quota": "Yetarli xotira kvotasi yoʻq", + "Failed to upload book: {{title}}": "Kitobni yuklab boʻlmadi: {{title}}", + "Azure Translator": "Azure Translator", + "DeepL": "DeepL", + "Google Translate": "Google Translate", + "Unavailable": "Mavjud emas", + "Login Required": "Tizimga kirish talab qilinadi", + "Quota Exceeded": "Kvota oshib ketdi", + "Yandex Translate": "Yandex Translate", + "Gray": "Kulrang", + "Sepia": "Sepiya", + "Grass": "Oʻt", + "Cherry": "Olcha", + "Sky": "Osmon", + "Solarized": "Solarized", + "Gruvbox": "Gruvbox", + "Nord": "Nord", + "Contrast": "Kontrast", + "Sunset": "Quyosh botishi", + "Reveal in Finder": "Finder-da koʻrsatish", + "Reveal in File Explorer": "File Explorer-da koʻrsatish", + "Reveal in Folder": "Jildida koʻrsatish" +} diff --git a/apps/readest-app/src/i18n/i18n.ts b/apps/readest-app/src/i18n/i18n.ts index 93848a90..65b26ae3 100644 --- a/apps/readest-app/src/i18n/i18n.ts +++ b/apps/readest-app/src/i18n/i18n.ts @@ -1,41 +1,10 @@ import i18n from 'i18next'; import LanguageDetector from 'i18next-browser-languagedetector'; +import translatableLngs from '../../i18n-langs.json'; import { initReactI18next } from 'react-i18next'; -// Keep in sync with i18next-scanner.config.cjs -const SUPPORTED_LNGS = [ - 'en', - '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', - 'ro', - 'hu', -]; + +// 'en' is the source language and not listed in the translatable set. +const SUPPORTED_LNGS = ['en', ...translatableLngs]; const isBrowser = typeof window !== 'undefined'; @@ -52,10 +21,10 @@ const initI18n = async () => { supportedLngs: SUPPORTED_LNGS, fallbackLng: { 'zh-HK': ['zh-TW', 'en'], + 'pt-BR': ['pt', 'en'], kk: ['ru', 'en'], ky: ['ru', 'en'], tk: ['ru', 'en'], - uz: ['ru', 'en'], ug: ['ru', 'en'], tt: ['ru', 'en'], default: ['en'], diff --git a/apps/readest-app/src/services/constants.ts b/apps/readest-app/src/services/constants.ts index ccf50676..42d9f503 100644 --- a/apps/readest-app/src/services/constants.ts +++ b/apps/readest-app/src/services/constants.ts @@ -842,6 +842,7 @@ export const TRANSLATED_LANGS = { ko: '한국어', es: 'Español', pt: 'Português', + 'pt-BR': 'Português (Brasil)', ru: 'Русский', he: 'עברית', ar: 'العربية', @@ -864,6 +865,7 @@ export const TRANSLATED_LANGS = { 'zh-TW': '正體中文', ro: 'Română', hu: 'Magyar', + uz: 'Oʻzbek', }; export const TRANSLATOR_LANGS: Record = { diff --git a/apps/readest.koplugin/locales/pt-BR/translation.po b/apps/readest.koplugin/locales/pt-BR/translation.po new file mode 100644 index 00000000..434b5f66 --- /dev/null +++ b/apps/readest.koplugin/locales/pt-BR/translation.po @@ -0,0 +1,438 @@ +# Portuguese (Brazil) translation for readest.koplugin +# +msgid "" +msgstr "" +"Project-Id-Version: readest.koplugin\n" +"Last-Translator: Readest contributors\n" +"Language-Team: Portuguese (Brazil)\n" +"Language: pt-BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Readest" +msgstr "Readest" + +msgid "Keeps your KOReader and Readest devices in sync." +msgstr "Mantém seus dispositivos KOReader e Readest sincronizados." + +msgid "Library view" +msgstr "Visualização da biblioteca" + +msgid "View" +msgstr "Visualizar" + +msgid "Grid" +msgstr "Grade" + +msgid "List" +msgstr "Lista" + +msgid "Group by" +msgstr "Agrupar por" + +msgid "Authors" +msgstr "Autores" + +msgid "Books" +msgstr "Livros" + +msgid "Groups" +msgstr "Grupos" + +msgid "Series" +msgstr "Séries" + +msgid "Sort by" +msgstr "Ordenar por" + +msgid "Date Read" +msgstr "Data de leitura" + +msgid "Date Added" +msgstr "Data de adição" + +msgid "Title" +msgstr "Título" + +msgid "Author" +msgstr "Autor" + +msgid "Descending" +msgstr "Decrescente" + +msgid "Ascending" +msgstr "Crescente" + +msgid "Actions" +msgstr "Ações" + +msgid "Rescan library" +msgstr "Reescanear biblioteca" + +msgid "Download folder…" +msgstr "Pasta de download…" + +msgid "Pick a folder for downloaded books" +msgstr "Escolha uma pasta para os livros baixados" + +msgid "Sign in to Readest to open the Library" +msgstr "Faça login no Readest para abrir a biblioteca" + +msgid "Library" +msgstr "Biblioteca" + +msgid "Readest Library" +msgstr "Biblioteca Readest" + +msgid "Cancel" +msgstr "Cancelar" + +msgid "Clear" +msgstr "Limpar" + +msgid "Search" +msgstr "Buscar" + +msgid "Search library" +msgstr "Buscar na biblioteca" + +msgid "Search title or author" +msgstr "Buscar título ou autor" + +msgid "Cover Browser plugin required for full Library rendering. Falling back to plain list." +msgstr "Plugin Cover Browser necessário para renderização completa da biblioteca. Voltando à lista simples." + +msgid "File moved or deleted. Rescan library?" +msgstr "Arquivo movido ou excluído. Reescanear biblioteca?" + +msgid "Download this book from Readest?" +msgstr "Baixar este livro do Readest?" + +msgid "Download" +msgstr "Baixar" + +msgid "Set Home folder in File Manager first to enable downloads." +msgstr "Configure primeiro a pasta inicial no Gerenciador de Arquivos para ativar os downloads." + +msgid "Downloading…" +msgstr "Baixando…" + +msgid "Cloud copy unavailable." +msgstr "Cópia na nuvem indisponível." + +msgid "Download failed." +msgstr "Falha no download." + +msgid "No cover available on Readest." +msgstr "Nenhuma capa disponível no Readest." + +msgid "Cover download failed." +msgstr "Falha ao baixar a capa." + +msgid "Could not delete the file." +msgstr "Não foi possível excluir o arquivo." + +msgid "Removing from cloud…" +msgstr "Removendo da nuvem…" + +msgid "Cloud removal failed." +msgstr "Falha na remoção da nuvem." + +msgid "Remove from Cloud & Device" +msgstr "Remover da nuvem e do dispositivo" + +msgid "Remove this book from cloud and device?" +msgstr "Remover este livro da nuvem e do dispositivo?" + +msgid "Remove" +msgstr "Remover" + +msgid "Remove from Cloud Only" +msgstr "Remover apenas da nuvem" + +msgid "Remove this book from the cloud only?" +msgstr "Remover este livro apenas da nuvem?" + +msgid "Remove from Device Only" +msgstr "Remover apenas do dispositivo" + +msgid "Remove the local copy of this book?" +msgstr "Remover a cópia local deste livro?" + +msgid "Upload to Cloud" +msgstr "Enviar para a nuvem" + +msgid "Uploading…" +msgstr "Enviando…" + +msgid "Storage quota exceeded." +msgstr "Cota de armazenamento excedida." + +msgid "Upload failed." +msgstr "Falha no envio." + +msgid "Download Book" +msgstr "Baixar livro" + +msgid "Download Cover" +msgstr "Baixar capa" + +msgid "Download All" +msgstr "Baixar tudo" + +msgid "Open Readest Library" +msgstr "Abrir biblioteca do Readest" + +msgid "Push Readest book library" +msgstr "Enviar biblioteca do Readest" + +msgid "Pull Readest book library" +msgstr "Obter biblioteca do Readest" + +msgid "Set auto progress sync" +msgstr "Definir sincronização automática do progresso" + +msgid "on" +msgstr "ativado" + +msgid "off" +msgstr "desativado" + +msgid "Toggle auto readest sync" +msgstr "Alternar sincronização automática do Readest" + +msgid "Push readest progress from this device" +msgstr "Enviar progresso do Readest deste dispositivo" + +msgid "Pull readest progress from other devices" +msgstr "Obter progresso do Readest de outros dispositivos" + +msgid "Push readest annotations from this device" +msgstr "Enviar anotações do Readest deste dispositivo" + +msgid "Pull readest annotations from other devices" +msgstr "Obter anotações do Readest de outros dispositivos" + +msgid "Add to Readest" +msgstr "Adicionar ao Readest" + +msgid "Sign in to Readest first." +msgstr "Faça login no Readest primeiro." + +msgid "File not found." +msgstr "Arquivo não encontrado." + +msgid "Unsupported book format." +msgstr "Formato de livro não suportado." + +msgid "Hashing book…" +msgstr "Calculando hash do livro…" + +msgid "Could not read file." +msgstr "Não foi possível ler o arquivo." + +msgid "Already in your Readest library:" +msgstr "Já está na sua biblioteca do Readest:" + +msgid "Added to Readest:" +msgstr "Adicionado ao Readest:" + +msgid "Log in Readest Account" +msgstr "Entrar na conta Readest" + +msgid "Log out as %1" +msgstr "Sair como %1" + +msgid "Auto sync" +msgstr "Sincronização automática" + +msgid "Readest library" +msgstr "Biblioteca Readest" + +msgid "Push books now" +msgstr "Enviar livros agora" + +msgid "Pull books now" +msgstr "Obter livros agora" + +msgid "Push reading progress now" +msgstr "Enviar progresso de leitura agora" + +msgid "Pull reading progress now" +msgstr "Obter progresso de leitura agora" + +msgid "Push annotations now" +msgstr "Enviar anotações agora" + +msgid "Pull annotations now" +msgstr "Obter anotações agora" + +msgid "Full sync all annotations" +msgstr "Sincronizar todas as anotações por completo" + +msgid "Sync info" +msgstr "Informações de sincronização" + +msgid "Check for update (v%1)" +msgstr "Verificar atualização (v%1)" + +msgid "Check for update" +msgstr "Verificar atualização" + +msgid "Please login first" +msgstr "Faça login primeiro" + +msgid "Please configure Readest settings first" +msgstr "Configure primeiro as definições do Readest" + +msgid "No book is open" +msgstr "Nenhum livro aberto" + +msgid "(none)" +msgstr "(nenhum)" + +msgid "Never synced" +msgstr "Nunca sincronizado" + +msgid "Book Fingerprint" +msgstr "Impressão digital do livro" + +msgid "Identifiers" +msgstr "Identificadores" + +msgid "Last Synced" +msgstr "Última sincronização" + +msgid "Sync Info" +msgstr "Informações de sincronização" + +msgid "Library not initialized" +msgstr "Biblioteca não inicializada" + +msgid "Books synced" +msgstr "Livros sincronizados" + +msgid "Books sync failed" +msgstr "Falha na sincronização de livros" + +msgid "Checking for update…" +msgstr "Verificando atualização…" + +msgid "Failed to check for update. Please try again later." +msgstr "Falha ao verificar atualização. Tente novamente mais tarde." + +msgid "A new version is available: v%1 (current: v%2).\n\nDo you want to update now?" +msgstr "Uma nova versão está disponível: v%1 (atual: v%2).\n\nDeseja atualizar agora?" + +msgid "A new version is available: v%1.\n\nDo you want to update now?" +msgstr "Uma nova versão está disponível: v%1.\n\nDeseja atualizar agora?" + +msgid "Update" +msgstr "Atualizar" + +msgid "You are up to date (v%1)." +msgstr "Você está atualizado (v%1)." + +msgid "Downloading update…" +msgstr "Baixando atualização…" + +msgid "Failed to download update. Please try again later." +msgstr "Falha ao baixar a atualização. Tente novamente mais tarde." + +msgid "Readest plugin updated to v%1.\n\nPlease restart KOReader to apply the update." +msgstr "Plugin Readest atualizado para v%1.\n\nReinicie o KOReader para aplicar a atualização." + +msgid "Restart now" +msgstr "Reiniciar agora" + +msgid "Later" +msgstr "Mais tarde" + +msgid "Failed to install update: %1" +msgstr "Falha ao instalar a atualização: %1" + +msgid "unknown error" +msgstr "erro desconhecido" + +msgid "No annotations to push" +msgstr "Sem anotações para enviar" + +msgid "Pushing annotations..." +msgstr "Enviando anotações..." + +msgid "%1 annotations pushed successfully" +msgstr "%1 anotações enviadas com sucesso" + +msgid "Failed to push annotations" +msgstr "Falha ao enviar as anotações" + +msgid "Annotation sync is not supported for PDF documents" +msgstr "A sincronização de anotações não é suportada para documentos PDF" + +msgid "Full sync: pulling all annotations..." +msgstr "Sincronização completa: obtendo todas as anotações..." + +msgid "Pulling annotations..." +msgstr "Obtendo anotações..." + +msgid "Authentication failed, please login again" +msgstr "Falha de autenticação, faça login novamente" + +msgid "Failed to pull annotations" +msgstr "Falha ao obter as anotações" + +msgid "No new annotations found" +msgstr "Nenhuma nova anotação encontrada" + +msgid "%1 annotations pulled" +msgstr "%1 anotações obtidas" + +msgid "Login" +msgstr "Entrar" + +msgid "Please enter both email and password" +msgstr "Insira o e-mail e a senha" + +msgid "Please configure Supabase URL and API key first" +msgstr "Configure primeiro a URL do Supabase e a chave de API" + +msgid "Logging in..." +msgstr "Entrando..." + +msgid "Successfully logged in to Readest" +msgstr "Login no Readest realizado com sucesso" + +msgid "Login failed: %1" +msgstr "Falha no login: %1" + +msgid "Logged out from Readest" +msgstr "Sessão encerrada do Readest" + +msgid "Cannot identify the current book" +msgstr "Não foi possível identificar o livro atual" + +msgid "Progress has been synchronized." +msgstr "O progresso foi sincronizado." + +msgid "Pushing reading progress..." +msgstr "Enviando progresso de leitura..." + +msgid "Reading progress pushed successfully" +msgstr "Progresso de leitura enviado com sucesso" + +msgid "Failed to push reading progress" +msgstr "Falha ao enviar o progresso de leitura" + +msgid "Pulling reading progress..." +msgstr "Obtendo progresso de leitura..." + +msgid "Failed to pull reading progress" +msgstr "Falha ao obter o progresso de leitura" + +msgid "Reading progress synchronized" +msgstr "Progresso de leitura sincronizado" + +msgid "No saved reading progress found for this book" +msgstr "Nenhum progresso de leitura salvo encontrado para este livro" diff --git a/apps/readest.koplugin/locales/uz/translation.po b/apps/readest.koplugin/locales/uz/translation.po new file mode 100644 index 00000000..7f3f4ac2 --- /dev/null +++ b/apps/readest.koplugin/locales/uz/translation.po @@ -0,0 +1,438 @@ +# Uzbek translation for readest.koplugin +# +msgid "" +msgstr "" +"Project-Id-Version: readest.koplugin\n" +"Last-Translator: Readest contributors\n" +"Language-Team: Uzbek\n" +"Language: uz\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Readest" +msgstr "Readest" + +msgid "Keeps your KOReader and Readest devices in sync." +msgstr "KOReader va Readest qurilmalaringizni sinxronlashda saqlaydi." + +msgid "Library view" +msgstr "Kutubxona koʻrinishi" + +msgid "View" +msgstr "Koʻrinish" + +msgid "Grid" +msgstr "Katak" + +msgid "List" +msgstr "Roʻyxat" + +msgid "Group by" +msgstr "Guruhlash" + +msgid "Authors" +msgstr "Mualliflar" + +msgid "Books" +msgstr "Kitoblar" + +msgid "Groups" +msgstr "Guruhlar" + +msgid "Series" +msgstr "Seriya" + +msgid "Sort by" +msgstr "Saralash" + +msgid "Date Read" +msgstr "Oʻqilgan sana" + +msgid "Date Added" +msgstr "Qoʻshilgan sana" + +msgid "Title" +msgstr "Sarlavha" + +msgid "Author" +msgstr "Muallif" + +msgid "Descending" +msgstr "Kamayish boʻyicha" + +msgid "Ascending" +msgstr "Oʻsish boʻyicha" + +msgid "Actions" +msgstr "Amallar" + +msgid "Rescan library" +msgstr "Kutubxonani qayta skanerlash" + +msgid "Download folder…" +msgstr "Yuklab olish jildi…" + +msgid "Pick a folder for downloaded books" +msgstr "Yuklab olingan kitoblar uchun jildni tanlang" + +msgid "Sign in to Readest to open the Library" +msgstr "Kutubxonani ochish uchun Readest-ga kiring" + +msgid "Library" +msgstr "Kutubxona" + +msgid "Readest Library" +msgstr "Readest kutubxonasi" + +msgid "Cancel" +msgstr "Bekor qilish" + +msgid "Clear" +msgstr "Tozalash" + +msgid "Search" +msgstr "Qidirish" + +msgid "Search library" +msgstr "Kutubxonada qidirish" + +msgid "Search title or author" +msgstr "Sarlavha yoki muallif boʻyicha qidirish" + +msgid "Cover Browser plugin required for full Library rendering. Falling back to plain list." +msgstr "Toʻliq kutubxona koʻrinishi uchun Cover Browser plagini talab qilinadi. Oddiy roʻyxatga oʻtilmoqda." + +msgid "File moved or deleted. Rescan library?" +msgstr "Fayl koʻchirilgan yoki oʻchirilgan. Kutubxonani qayta skanerlaysizmi?" + +msgid "Download this book from Readest?" +msgstr "Ushbu kitobni Readest-dan yuklab olasizmi?" + +msgid "Download" +msgstr "Yuklab olish" + +msgid "Set Home folder in File Manager first to enable downloads." +msgstr "Yuklab olishlarni yoqish uchun avval Fayl menejerida bosh sahifa jildini belgilang." + +msgid "Downloading…" +msgstr "Yuklab olinmoqda…" + +msgid "Cloud copy unavailable." +msgstr "Bulutdagi nusxa mavjud emas." + +msgid "Download failed." +msgstr "Yuklab olib boʻlmadi." + +msgid "No cover available on Readest." +msgstr "Readest-da muqova mavjud emas." + +msgid "Cover download failed." +msgstr "Muqovani yuklab olib boʻlmadi." + +msgid "Could not delete the file." +msgstr "Faylni oʻchirib boʻlmadi." + +msgid "Removing from cloud…" +msgstr "Bulutdan olib tashlanmoqda…" + +msgid "Cloud removal failed." +msgstr "Bulutdan olib tashlab boʻlmadi." + +msgid "Remove from Cloud & Device" +msgstr "Bulut va qurilmadan olib tashlash" + +msgid "Remove this book from cloud and device?" +msgstr "Ushbu kitobni bulut va qurilmadan olib tashlaysizmi?" + +msgid "Remove" +msgstr "Olib tashlash" + +msgid "Remove from Cloud Only" +msgstr "Faqat bulutdan olib tashlash" + +msgid "Remove this book from the cloud only?" +msgstr "Ushbu kitobni faqat bulutdan olib tashlaysizmi?" + +msgid "Remove from Device Only" +msgstr "Faqat qurilmadan olib tashlash" + +msgid "Remove the local copy of this book?" +msgstr "Ushbu kitobning mahalliy nusxasini olib tashlaysizmi?" + +msgid "Upload to Cloud" +msgstr "Bulutga yuklash" + +msgid "Uploading…" +msgstr "Yuklanmoqda…" + +msgid "Storage quota exceeded." +msgstr "Xotira kvotasi oshib ketdi." + +msgid "Upload failed." +msgstr "Yuklab boʻlmadi." + +msgid "Download Book" +msgstr "Kitobni yuklab olish" + +msgid "Download Cover" +msgstr "Muqovani yuklab olish" + +msgid "Download All" +msgstr "Barchasini yuklab olish" + +msgid "Open Readest Library" +msgstr "Readest kutubxonasini ochish" + +msgid "Push Readest book library" +msgstr "Readest kitob kutubxonasini yuborish" + +msgid "Pull Readest book library" +msgstr "Readest kitob kutubxonasini olish" + +msgid "Set auto progress sync" +msgstr "Avtomatik jarayon sinxronlashni belgilash" + +msgid "on" +msgstr "yoqilgan" + +msgid "off" +msgstr "oʻchirilgan" + +msgid "Toggle auto readest sync" +msgstr "Avtomatik readest sinxronlashni ochish/yopish" + +msgid "Push readest progress from this device" +msgstr "Readest jarayonini ushbu qurilmadan yuborish" + +msgid "Pull readest progress from other devices" +msgstr "Readest jarayonini boshqa qurilmalardan olish" + +msgid "Push readest annotations from this device" +msgstr "Readest izohlarini ushbu qurilmadan yuborish" + +msgid "Pull readest annotations from other devices" +msgstr "Readest izohlarini boshqa qurilmalardan olish" + +msgid "Add to Readest" +msgstr "Readest-ga qoʻshish" + +msgid "Sign in to Readest first." +msgstr "Avval Readest-ga kiring." + +msgid "File not found." +msgstr "Fayl topilmadi." + +msgid "Unsupported book format." +msgstr "Qoʻllab-quvvatlanmaydigan kitob formati." + +msgid "Hashing book…" +msgstr "Kitob xeshlanmoqda…" + +msgid "Could not read file." +msgstr "Faylni oʻqib boʻlmadi." + +msgid "Already in your Readest library:" +msgstr "Allaqachon Readest kutubxonangizda:" + +msgid "Added to Readest:" +msgstr "Readest-ga qoʻshildi:" + +msgid "Log in Readest Account" +msgstr "Readest hisobiga kirish" + +msgid "Log out as %1" +msgstr "%1 sifatida chiqish" + +msgid "Auto sync" +msgstr "Avtomatik sinxronlash" + +msgid "Readest library" +msgstr "Readest kutubxonasi" + +msgid "Push books now" +msgstr "Kitoblarni hozir yuborish" + +msgid "Pull books now" +msgstr "Kitoblarni hozir olish" + +msgid "Push reading progress now" +msgstr "Oʻqish jarayonini hozir yuborish" + +msgid "Pull reading progress now" +msgstr "Oʻqish jarayonini hozir olish" + +msgid "Push annotations now" +msgstr "Izohlarni hozir yuborish" + +msgid "Pull annotations now" +msgstr "Izohlarni hozir olish" + +msgid "Full sync all annotations" +msgstr "Barcha izohlarni toʻliq sinxronlash" + +msgid "Sync info" +msgstr "Sinxronlash maʼlumoti" + +msgid "Check for update (v%1)" +msgstr "Yangilanishni tekshirish (v%1)" + +msgid "Check for update" +msgstr "Yangilanishni tekshirish" + +msgid "Please login first" +msgstr "Iltimos, avval tizimga kiring" + +msgid "Please configure Readest settings first" +msgstr "Iltimos, avval Readest sozlamalarini sozlang" + +msgid "No book is open" +msgstr "Hech qanday kitob ochilmagan" + +msgid "(none)" +msgstr "(yoʻq)" + +msgid "Never synced" +msgstr "Sinxronlanmagan" + +msgid "Book Fingerprint" +msgstr "Kitob barmoq izi" + +msgid "Identifiers" +msgstr "Identifikatorlar" + +msgid "Last Synced" +msgstr "Oxirgi sinxronlash" + +msgid "Sync Info" +msgstr "Sinxronlash maʼlumoti" + +msgid "Library not initialized" +msgstr "Kutubxona ishga tushirilmagan" + +msgid "Books synced" +msgstr "Kitoblar sinxronlandi" + +msgid "Books sync failed" +msgstr "Kitoblarni sinxronlab boʻlmadi" + +msgid "Checking for update…" +msgstr "Yangilanishlar tekshirilmoqda…" + +msgid "Failed to check for update. Please try again later." +msgstr "Yangilanishni tekshirib boʻlmadi. Keyinroq qayta urinib koʻring." + +msgid "A new version is available: v%1 (current: v%2).\n\nDo you want to update now?" +msgstr "Yangi versiya mavjud: v%1 (joriy: v%2).\n\nHozir yangilamoqchimisiz?" + +msgid "A new version is available: v%1.\n\nDo you want to update now?" +msgstr "Yangi versiya mavjud: v%1.\n\nHozir yangilamoqchimisiz?" + +msgid "Update" +msgstr "Yangilash" + +msgid "You are up to date (v%1)." +msgstr "Sizda eng songgi versiya (v%1)." + +msgid "Downloading update…" +msgstr "Yangilanish yuklanmoqda…" + +msgid "Failed to download update. Please try again later." +msgstr "Yangilanishni yuklab boʻlmadi. Keyinroq qayta urinib koʻring." + +msgid "Readest plugin updated to v%1.\n\nPlease restart KOReader to apply the update." +msgstr "Readest plagini v%1 ga yangilandi.\n\nYangilanishni qoʻllash uchun KOReader-ni qayta ishga tushiring." + +msgid "Restart now" +msgstr "Hozir qayta ishga tushirish" + +msgid "Later" +msgstr "Keyinroq" + +msgid "Failed to install update: %1" +msgstr "Yangilanishni oʻrnatib boʻlmadi: %1" + +msgid "unknown error" +msgstr "nomaʼlum xato" + +msgid "No annotations to push" +msgstr "Yuborish uchun izohlar yoʻq" + +msgid "Pushing annotations..." +msgstr "Izohlar yuborilmoqda..." + +msgid "%1 annotations pushed successfully" +msgstr "%1 ta izoh muvaffaqiyatli yuborildi" + +msgid "Failed to push annotations" +msgstr "Izohlarni yuborib boʻlmadi" + +msgid "Annotation sync is not supported for PDF documents" +msgstr "PDF hujjatlar uchun izoh sinxronlash qoʻllab-quvvatlanmaydi" + +msgid "Full sync: pulling all annotations..." +msgstr "Toʻliq sinxronlash: barcha izohlar olinmoqda..." + +msgid "Pulling annotations..." +msgstr "Izohlar olinmoqda..." + +msgid "Authentication failed, please login again" +msgstr "Autentifikatsiya muvaffaqiyatsiz tugadi, qayta tizimga kiring" + +msgid "Failed to pull annotations" +msgstr "Izohlarni olib boʻlmadi" + +msgid "No new annotations found" +msgstr "Yangi izohlar topilmadi" + +msgid "%1 annotations pulled" +msgstr "%1 ta izoh olindi" + +msgid "Login" +msgstr "Kirish" + +msgid "Please enter both email and password" +msgstr "Iltimos, email va parolni kiriting" + +msgid "Please configure Supabase URL and API key first" +msgstr "Iltimos, avval Supabase URL va API kalitini sozlang" + +msgid "Logging in..." +msgstr "Tizimga kirilmoqda..." + +msgid "Successfully logged in to Readest" +msgstr "Readest-ga muvaffaqiyatli kirildi" + +msgid "Login failed: %1" +msgstr "Kirish muvaffaqiyatsiz tugadi: %1" + +msgid "Logged out from Readest" +msgstr "Readest-dan chiqildi" + +msgid "Cannot identify the current book" +msgstr "Joriy kitobni aniqlab boʻlmadi" + +msgid "Progress has been synchronized." +msgstr "Jarayon sinxronlandi." + +msgid "Pushing reading progress..." +msgstr "Oʻqish jarayoni yuborilmoqda..." + +msgid "Reading progress pushed successfully" +msgstr "Oʻqish jarayoni muvaffaqiyatli yuborildi" + +msgid "Failed to push reading progress" +msgstr "Oʻqish jarayonini yuborib boʻlmadi" + +msgid "Pulling reading progress..." +msgstr "Oʻqish jarayoni olinmoqda..." + +msgid "Failed to pull reading progress" +msgstr "Oʻqish jarayonini olib boʻlmadi" + +msgid "Reading progress synchronized" +msgstr "Oʻqish jarayoni sinxronlandi" + +msgid "No saved reading progress found for this book" +msgstr "Ushbu kitob uchun saqlangan oʻqish jarayoni topilmadi" diff --git a/apps/readest.koplugin/scripts/extract-i18n.js b/apps/readest.koplugin/scripts/extract-i18n.js index f2c21d5d7c8d6b8aa42868a1df2f329ffa0a5f49..6843cf1740f3fc3ff4257e4a75edaf819482179b 100644 GIT binary patch delta 219 zcmezDcgcUlPj)r+f)ZV)AayH+YK5G{q|_WM1@(aZqLR||($wNq1r4X7#H!33&B+bS z`kQ~UC$WkuD3n$qD-NwnO3emJ>u!$bJUp&t{Y5gikgS5%@DtEr!^ zqo5J5qmZnrU~9*v00hYjwzjqk>Uru4_6q7TK*|axR0I(MQgERXh!Bth3h4m#Yg%*F fa&e`V<|UV8=I1FCBo-B?2IOm`Wp2JNK7}6u%XdLB delta 169 zcmccQ|JiTDPxj4z97(L3Kk=UBoV-+4us$Y6KV3&bok3lbO92S*ml