From 8ed2fa38290d30b7d3414573fe41879f29be2db1 Mon Sep 17 00:00:00 2001 From: "Weblate (bot)" Date: Sun, 11 May 2025 15:36:35 +0200 Subject: [PATCH 1/5] [skip ci] Weblate Changes (#3773) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Adam Havránek Co-authored-by: Aindriú Mac Giolla Eoin Co-authored-by: Bora Atıcı Co-authored-by: Havokdan Co-authored-by: Robin Stolpe Co-authored-by: axeron2036 Co-authored-by: 無情天 Co-authored-by: 안세훈 --- API/I18N/cs.json | 3 +- API/I18N/ga.json | 3 +- API/I18N/ko.json | 6 +- API/I18N/pt_BR.json | 3 +- API/I18N/ru.json | 12 +++- API/I18N/zh_Hans.json | 3 +- UI/Web/src/assets/langs/cs.json | 85 ++++++++++++++++++++------- UI/Web/src/assets/langs/da.json | 6 -- UI/Web/src/assets/langs/de.json | 11 ---- UI/Web/src/assets/langs/el.json | 11 ---- UI/Web/src/assets/langs/es.json | 11 ---- UI/Web/src/assets/langs/et.json | 9 --- UI/Web/src/assets/langs/fi.json | 9 --- UI/Web/src/assets/langs/fr.json | 11 ---- UI/Web/src/assets/langs/ga.json | 86 +++++++++++++++++++++------- UI/Web/src/assets/langs/hi.json | 6 -- UI/Web/src/assets/langs/hu.json | 9 --- UI/Web/src/assets/langs/id.json | 9 --- UI/Web/src/assets/langs/it.json | 11 ---- UI/Web/src/assets/langs/ja.json | 11 ---- UI/Web/src/assets/langs/ko.json | 79 ++++++++++++++++--------- UI/Web/src/assets/langs/ms.json | 6 -- UI/Web/src/assets/langs/nb_NO.json | 6 -- UI/Web/src/assets/langs/nl.json | 9 --- UI/Web/src/assets/langs/pl.json | 11 ---- UI/Web/src/assets/langs/pt.json | 11 ---- UI/Web/src/assets/langs/pt_BR.json | 83 ++++++++++++++++++++------- UI/Web/src/assets/langs/ru.json | 9 --- UI/Web/src/assets/langs/sk.json | 11 ---- UI/Web/src/assets/langs/sv.json | 67 ++++++++++++---------- UI/Web/src/assets/langs/ta.json | 11 ---- UI/Web/src/assets/langs/th.json | 8 --- UI/Web/src/assets/langs/tr.json | 76 ++++++++++++++++-------- UI/Web/src/assets/langs/uk.json | 9 --- UI/Web/src/assets/langs/vi.json | 11 ---- UI/Web/src/assets/langs/zh_Hans.json | 85 +++++++++++++++++++-------- UI/Web/src/assets/langs/zh_Hant.json | 11 ---- 37 files changed, 414 insertions(+), 404 deletions(-) diff --git a/API/I18N/cs.json b/API/I18N/cs.json index 4b9774218..9825ab074 100644 --- a/API/I18N/cs.json +++ b/API/I18N/cs.json @@ -207,5 +207,6 @@ "dashboard-stream-only-delete-smart-filter": "Z ovládacího panelu lze odstranit pouze streamy chytrých filtrů", "smart-filter-name-required": "Vyžaduje se název chytrého filtru", "smart-filter-system-name": "Nelze použít název streamu poskytovaného systémem", - "sidenav-stream-only-delete-smart-filter": "Z postranní navigace lze odstranit pouze streamy chytrých filtrů" + "sidenav-stream-only-delete-smart-filter": "Z postranní navigace lze odstranit pouze streamy chytrých filtrů", + "aliases-have-overlap": "Jeden nebo více aliasů se překrývají s jinými osobami, nelze je aktualizovat" } diff --git a/API/I18N/ga.json b/API/I18N/ga.json index 2d16bcb05..79d0d271e 100644 --- a/API/I18N/ga.json +++ b/API/I18N/ga.json @@ -207,5 +207,6 @@ "smart-filter-system-name": "Ní féidir leat ainm srutha an chórais a sholáthair tú a úsáid", "sidenav-stream-only-delete-smart-filter": "Ní féidir ach sruthanna cliste scagaire a scriosadh as an SideNav", "dashboard-stream-only-delete-smart-filter": "Ní féidir ach sruthanna cliste scagaire a scriosadh ón deais", - "smart-filter-name-required": "Ainm Scagaire Cliste ag teastáil" + "smart-filter-name-required": "Ainm Scagaire Cliste ag teastáil", + "aliases-have-overlap": "Tá forluí idir ceann amháin nó níos mó de na leasainmneacha agus daoine eile, ní féidir iad a nuashonrú" } diff --git a/API/I18N/ko.json b/API/I18N/ko.json index bb087536b..bb49c44ce 100644 --- a/API/I18N/ko.json +++ b/API/I18N/ko.json @@ -203,5 +203,9 @@ "person-name-unique": "개인 이름은 고유해야 합니다", "person-image-doesnt-exist": "CoversDB에 사람이 존재하지 않습니다", "kavitaplus-restricted": "Kavita+만 해당", - "email-taken": "이미 사용중인 이메일" + "email-taken": "이미 사용중인 이메일", + "dashboard-stream-only-delete-smart-filter": "대시보드에서 스마트 필터 스트림만 삭제할 수 있습니다", + "sidenav-stream-only-delete-smart-filter": "사이드 메뉴에서 스마트 필터 스트림만 삭제할 수 있습니다", + "smart-filter-name-required": "스마트 필터 이름이 필요합니다", + "smart-filter-system-name": "시스템 제공 스트림 이름은 사용할 수 없습니다" } diff --git a/API/I18N/pt_BR.json b/API/I18N/pt_BR.json index 7180b3404..b67d926b0 100644 --- a/API/I18N/pt_BR.json +++ b/API/I18N/pt_BR.json @@ -207,5 +207,6 @@ "smart-filter-name-required": "Nome do Filtro Inteligente obrigatório", "dashboard-stream-only-delete-smart-filter": "Somente fluxos de filtros inteligentes podem ser excluídos do painel", "smart-filter-system-name": "Você não pode usar o nome de um fluxo fornecido pelo sistema", - "sidenav-stream-only-delete-smart-filter": "Somente fluxos de filtros inteligentes podem ser excluídos do Navegador Lateral" + "sidenav-stream-only-delete-smart-filter": "Somente fluxos de filtros inteligentes podem ser excluídos do Navegador Lateral", + "aliases-have-overlap": "Um ou mais dos pseudônimos se sobrepõem a outras pessoas, não pode atualizar" } diff --git a/API/I18N/ru.json b/API/I18N/ru.json index c75f58fb1..92d842336 100644 --- a/API/I18N/ru.json +++ b/API/I18N/ru.json @@ -121,7 +121,7 @@ "opds-disabled": "OPDS не включен на этом сервере", "stats-permission-denied": "Вы не имеете права просматривать статистику другого пользователя", "reading-list-restricted": "Список чтения не существует или у вас нет доступа", - "favicon-doesnt-exist": "Фавикон не существует", + "favicon-doesnt-exist": "Favicon не существует", "external-source-already-in-use": "Существует поток с этим внешним источником", "issue-num": "Вопрос {0}{1}", "generic-create-temp-archive": "Возникла проблема с созданием временного архива", @@ -194,5 +194,13 @@ "backup": "Резервное копирование", "process-processed-scrobbling-events": "Обработка обработанных событий скроблинга", "scan-libraries": "Сканирование библиотек", - "kavita+-data-refresh": "Обновление данных Kavita+" + "kavita+-data-refresh": "Обновление данных Kavita+", + "kavitaplus-restricted": "Это доступно только для Kavita+", + "person-doesnt-exist": "Персона не существует", + "generic-cover-volume-save": "Не удается сохранить обложку для раздела", + "generic-cover-person-save": "Не удается сохранить изображение обложки для Персоны", + "person-name-unique": "Имя персоны должно быть уникальным", + "person-image-doesnt-exist": "Персона не существует в CoversDB", + "email-taken": "Почта уже используется", + "person-name-required": "Имя персоны обязательно и не может быть пустым" } diff --git a/API/I18N/zh_Hans.json b/API/I18N/zh_Hans.json index 92d1751a8..070a87855 100644 --- a/API/I18N/zh_Hans.json +++ b/API/I18N/zh_Hans.json @@ -207,5 +207,6 @@ "dashboard-stream-only-delete-smart-filter": "只能从仪表板中删除智能筛选器流", "smart-filter-name-required": "需要智能筛选器名称", "smart-filter-system-name": "您不能使用系统提供的流名称", - "sidenav-stream-only-delete-smart-filter": "只能从侧边栏删除智能筛选器流" + "sidenav-stream-only-delete-smart-filter": "只能从侧边栏删除智能筛选器流", + "aliases-have-overlap": "一个或多个别名与其他人有重叠,无法更新" } diff --git a/UI/Web/src/assets/langs/cs.json b/UI/Web/src/assets/langs/cs.json index 916d23333..dfa2db0fc 100644 --- a/UI/Web/src/assets/langs/cs.json +++ b/UI/Web/src/assets/langs/cs.json @@ -62,15 +62,6 @@ "spoiler": { "click-to-show": "Spoiler, kliknutím zobrazíte" }, - "review-series-modal": { - "title": "Upravit recenzi", - "review-label": "Recenze", - "close": "{{common.close}}", - "save": "{{common.save}}", - "delete": "{{common.delete}}", - "min-length": "Recenze musí mít alespoň {{count}} znaků", - "required": "{{validation.required-field}}" - }, "review-card-modal": { "close": "{{common.close}}", "user-review": "{{username}}'s Recenze", @@ -81,7 +72,8 @@ "your-review": "Toto je vaše recenze", "external-review": "Externí recenze", "local-review": "Místní recenze", - "rating-percentage": "Hodnocení {{r}} %" + "rating-percentage": "Hodnocení {{r}} %", + "critic": "kritik" }, "want-to-read": { "title": "Chci číst", @@ -785,9 +777,7 @@ "publication-status-tooltip": "Stav publikace", "release-date-title": "Vydání", "time-left-alt": "Zbývající čas", - "user-reviews-local": "Místní hodnocení", "publication-status-title": "Publikace", - "user-reviews-plus": "Externí hodnocení", "weblinks-title": "Odkazy", "more-alt": "Více", "pages-count": "{{num}} stran", @@ -821,7 +811,8 @@ "close": "{{common.close}}", "kavita-rating-title": "Vaše hodnocení", "entry-label": "Zobrazit podrobnosti", - "kavita-tooltip": "Vaše hodnocení + celkové" + "kavita-tooltip": "Vaše hodnocení + celkové", + "critic": "{{review-card.critic}}" }, "badge-expander": { "more-items": "a {{počet}} více" @@ -1460,7 +1451,8 @@ "skip-alt": "Přeskočit na hlavní obsah", "server-settings": "Nastavení serveru", "settings": "Nastavení", - "announcements": "Oznámení" + "announcements": "Oznámení", + "person-aka-status": "Shoduje se s aliasem" }, "promoted-icon": { "promoted": "{{common.promoted}}" @@ -2009,7 +2001,10 @@ "new-collection": "Nová sbírka", "match": "Shoda", "match-tooltip": "Přiřadit série s Kavitou+ manuálně", - "reorder": "Přeuspořádat" + "reorder": "Přeuspořádat", + "rename": "Přejmenovat", + "rename-tooltip": "Přejmenovat inteligentní filtr", + "merge": "Sloučit" }, "changelog-update-item": { "changed": "Změněno", @@ -2045,7 +2040,9 @@ "known-for-title": "Známý díky", "individual-role-title": "Jako {{role}}", "browse-person-title": "Všechny práce {{name}}", - "anilist-url": "{{edit-person-modal.anilist-tooltip}}" + "anilist-url": "{{edit-person-modal.anilist-tooltip}}", + "no-info": "Žádné informace o této osobě", + "aka-title": "Známé také jako " }, "draggable-ordered-list": { "reorder-label": "Přeuspořádat", @@ -2064,7 +2061,7 @@ }, "match-series-modal": { "no-results": "Nelze najít shodu.Zkuste přidat url od podporovaného poskytovatele a zkuste to znovu.", - "query-tooltip": "Zadejte název série, url AniListu/MyAnimeListu. Url budou používat přímé vyhledávání.", + "query-tooltip": "Zadejte název série, AniList/MyAnimeList/ComicBookRoundup url. Url budou používat přímé vyhledávání.", "title": "Shoda {{seriesName}}", "close": "{{common.close}}", "save": "{{common.save}}", @@ -2131,7 +2128,8 @@ "chapter-count": "{{common.chapter-count}}", "releasing": "Vychází", "details": "Zobrazit stránku", - "updating-metadata-status": "Aktualizace metadat" + "updating-metadata-status": "Aktualizace metadat", + "issue-count": "{{common.issue-count}}" }, "pdf-reader": { "incognito-mode": "Anonymní režim", @@ -2179,7 +2177,11 @@ "cover-image-tab": "{{edit-series-modal.cover-image-tab}}", "close": "{{common.close}}", "anilist-id-label": "AniList ID", - "anilist-tooltip": "https://anilist.co/staff/{AniListId}/" + "anilist-tooltip": "https://anilist.co/staff/{AniListId}/", + "aliases-tab": "Aliasy", + "aliases-label": "Upravit aliasy", + "alias-overlap": "Tento alias již odkazuje na jinou osobu nebo je jménem této osoby, zvažte jejich sloučení.", + "aliases-tooltip": "Pokud je série označena aliasem osoby, je tato osoba přiřazena, místo aby byla vytvořena nová osoba. Při odstranění aliasu je nutné sérii znovu prohledat, aby se změna zachytila." }, "errors": { "delete-theme-in-use": "Motiv je aktuálně používán alespoň jedním uživatelem, nelze odstranit", @@ -2458,7 +2460,8 @@ "match-success": "Správně sladěné série", "webtoon-override": "Přepnutí do režimu Webtoon kvůli obrázkům představujícím webtoon.", "scrobble-gen-init": "Vytvořena úloha pro generování událostí scrobble z historie čtení, hodnocení v minulosti a jejich synchronizaci s připojenými službami.", - "confirm-delete-multiple-volumes": "Jste si jisti, že chcete odstranit {{count}} svazků? Soubory na disku se tím nezmění." + "confirm-delete-multiple-volumes": "Jste si jisti, že chcete odstranit {{count}} svazků? Soubory na disku se tím nezmění.", + "series-added-want-to-read": "Série přidána ze seznamu Chci číst" }, "preferences": { "split-right-to-left": "Rozdělit zprava doleva", @@ -2620,7 +2623,18 @@ "localized-name-tooltip": "Povolit zápis lokalizovaného názvu při odemknutí pole. Kavita se pokusí provést nejlepší odhad.", "enable-cover-image-label": "Obrázek na obálce", "overrides-description": "Povolit Kavitě zápis přes uzamčená pole.", - "overrides-label": "Přepisuje" + "overrides-label": "Přepisuje", + "enable-chapter-release-date-label": "Datum vydání", + "enable-chapter-publisher-label": "Vydavatel", + "enable-chapter-publisher-tooltip": "Umožnit napsání vydavatele kapitoly/vydání", + "enable-chapter-cover-label": "Obálka kapitoly", + "enable-chapter-cover-tooltip": "Umožnit nastavení obálky kapitoly/vydání", + "chapter-header": "Pole kapitoly", + "enable-chapter-release-date-tooltip": "Povolit datum vydání kapitoly/vydání, které má být napsáno", + "enable-chapter-title-label": "Titulek", + "enable-chapter-title-tooltip": "Umožnit napsání názvu kapitoly/vydání", + "enable-chapter-summary-label": "{{manage-metadata-settings.summary-label}}", + "enable-chapter-summary-tooltip": "{{manage-metadata-settings.summary-tooltip}}" }, "metadata-setting-field-pipe": { "people": "{{tabs.people-tab}}", @@ -2631,7 +2645,12 @@ "covers": "Obálky", "genres": "{{metadata-fields.genres-title}}", "summary": "{{filter-field-pipe.summary}}", - "publication-status": "{{edit-series-modal.publication-status-title}}" + "publication-status": "{{edit-series-modal.publication-status-title}}", + "chapter-title": "Název (kapitola)", + "chapter-covers": "Obálky (kapitola)", + "chapter-release-date": "Datum vydání (kapitola)", + "chapter-summary": "Shrnutí (kapitola)", + "chapter-publisher": "{{person-role-pipe.publisher}} (Kapitola)" }, "role-localized-pipe": { "download": "Stažené", @@ -2649,5 +2668,27 @@ "trace": "Sledovat", "warning": "Varování", "critical": "Kritické" + }, + "review-modal": { + "title": "Upravit recenzi", + "min-length": "Recenze musí mít alespoň {{count}} znaků", + "required": "{{validation.required-field}}", + "delete": "{{common.delete}}", + "save": "{{common.save}}", + "review-label": "Recenze", + "close": "{{common.close}}" + }, + "reviews": { + "user-reviews-local": "Místní recenze", + "user-reviews-plus": "Externí recenze" + }, + "merge-person-modal": { + "title": "{{personName}}", + "close": "{{common.close}}", + "save": "{{common.save}}", + "src": "Sloučit osoby", + "merge-warning": "Pokud budete pokračovat, vybraná osoba bude odstraněna. Jméno vybrané osoby bude přidáno jako alias a všechny její role budou převedeny.", + "alias-title": "Nové aliasy", + "known-for-title": "Známý pro" } } diff --git a/UI/Web/src/assets/langs/da.json b/UI/Web/src/assets/langs/da.json index 1ecb88f36..ac0ed2c76 100644 --- a/UI/Web/src/assets/langs/da.json +++ b/UI/Web/src/assets/langs/da.json @@ -16,12 +16,6 @@ "filter-label": "{{common.filter}}", "special": "{{entity-title.special}}" }, - "review-series-modal": { - "close": "{{common.close}}", - "save": "{{common.save}}", - "delete": "{{common.delete}}", - "required": "{{validation.required-field}}" - }, "review-card-modal": { "close": "{{common.close}}" }, diff --git a/UI/Web/src/assets/langs/de.json b/UI/Web/src/assets/langs/de.json index 65b44dbf9..376e33a7e 100644 --- a/UI/Web/src/assets/langs/de.json +++ b/UI/Web/src/assets/langs/de.json @@ -62,15 +62,6 @@ "spoiler": { "click-to-show": "Spoiler, klicke zum Anzeigen" }, - "review-series-modal": { - "title": "Rezension bearbeiten", - "review-label": "Rezension", - "close": "{{common.close}}", - "save": "{{common.save}}", - "delete": "{{common.delete}}", - "min-length": "Rezension muss mindestens {{count}} Zeichen lang sein", - "required": "{{validation.required-field}}" - }, "review-card-modal": { "close": "{{common.close}}", "user-review": "{{username}}'s Rezension", @@ -762,8 +753,6 @@ "no-pages": "{{toasts.no-pages}}", "no-chapters": "Zu diesem Band gibt es keine Kapitel. Kann nicht gelesen werden.", "cover-change": "Es kann bis zu einer Minute dauern, bis Ihr Browser das Bild aktualisiert hat. Bis dahin kann auf einigen Seiten noch das alte Bild angezeigt werden.", - "user-reviews-local": "Lokale Bewertungen", - "user-reviews-plus": "Externe Bewertungen", "writers-title": "{{metadata-fields.writers-title}}", "cover-artists-title": "{{metadata-fields.cover-artists-title}}", "characters-title": "{{metadata-fields.characters-title}}", diff --git a/UI/Web/src/assets/langs/el.json b/UI/Web/src/assets/langs/el.json index ef5c92df3..abae28c97 100644 --- a/UI/Web/src/assets/langs/el.json +++ b/UI/Web/src/assets/langs/el.json @@ -55,15 +55,6 @@ "spoiler": { "click-to-show": "Spoiler, κάντε κλικ για να το δείτε" }, - "review-series-modal": { - "title": "Επεξεργασία Κριτικής", - "review-label": "Κριτική", - "close": "{{common.close}}", - "save": "{{common.save}}", - "delete": "{{common.delete}}", - "min-length": "Η κριτική πρέπει να περιέχει τουλάχιστον {{count}} χαρακτήρες", - "required": "{{validation.required-field}}" - }, "review-card-modal": { "close": "{{common.close}}", "user-review": "Η κριτική του {{username}}", @@ -290,8 +281,6 @@ "info-tab": "{{tabs.info-tab}}", "recommendations-tab": "{{tabs.recommendations-tab}}", "no-pages": "{{toasts.no-pages}}", - "user-reviews-local": "Τοπικές Κριτικές", - "user-reviews-plus": "Εξωτερικές Κριτικές", "writers-title": "{{metadata-fields.writers-title}}", "cover-artists-title": "{{metadata-fields.cover-artists-title}}", "characters-title": "{{metadata-fields.characters-title}}", diff --git a/UI/Web/src/assets/langs/es.json b/UI/Web/src/assets/langs/es.json index c3fc6a4b6..d9f5ca04f 100644 --- a/UI/Web/src/assets/langs/es.json +++ b/UI/Web/src/assets/langs/es.json @@ -62,15 +62,6 @@ "spoiler": { "click-to-show": "Alerta de spoiler, haz clic para mostrar" }, - "review-series-modal": { - "title": "Editar reseña", - "review-label": "Reseña", - "close": "{{common.close}}", - "save": "{{common.save}}", - "delete": "{{common.delete}}", - "min-length": "La reseña debe tener al menos {{count}} caracteres", - "required": "{{validation.required-field}}" - }, "review-card-modal": { "close": "{{common.close}}", "user-review": "Reseña de {{username}}", @@ -757,8 +748,6 @@ "no-pages": "{{toasts.no-pages}}", "no-chapters": "No existen capítulos en este volumen. No se puede leer.", "cover-change": "Puede tomar hasta un minuto para que tu navegador actualice la imagen. Espera hasta entonces. La imagen antigua se puede mostrar en algunas páginas.", - "user-reviews-local": "Reseñas locales", - "user-reviews-plus": "Reseñas externas", "writers-title": "{{metadata-fields.writers-title}}", "cover-artists-title": "{{metadata-fields.cover-artists-title}}", "characters-title": "{{metadata-fields.characters-title}}", diff --git a/UI/Web/src/assets/langs/et.json b/UI/Web/src/assets/langs/et.json index 2f9802fae..fb5963f25 100644 --- a/UI/Web/src/assets/langs/et.json +++ b/UI/Web/src/assets/langs/et.json @@ -56,15 +56,6 @@ "spoiler": { "click-to-show": "Potentsiaalselt mittesoovitav eelinfo sisu kohta - kliki seda, et näidata" }, - "review-series-modal": { - "title": "Muuda ülevaade", - "review-label": "Ülevaade", - "close": "{{common.close}}", - "save": "{{common.save}}", - "delete": "{{common.delete}}", - "min-length": "Ülevaade peab olema vähemalt {{count}} märki pikk", - "required": "{{validation.required-field}}" - }, "review-card-modal": { "close": "{{common.close}}", "user-review": "{{username}} ülevaade", diff --git a/UI/Web/src/assets/langs/fi.json b/UI/Web/src/assets/langs/fi.json index 9a316f77a..5d1f1393f 100644 --- a/UI/Web/src/assets/langs/fi.json +++ b/UI/Web/src/assets/langs/fi.json @@ -128,15 +128,6 @@ "spoiler": { "click-to-show": "Spoileri, napsauta näyttääksesi" }, - "review-series-modal": { - "title": "Muokkaa arvostelua", - "review-label": "Arvostelu", - "close": "{{common.close}}", - "save": "{{common.save}}", - "delete": "{{common.delete}}", - "min-length": "Arvostelussa on oltava vähintään {{count}} merkkiä", - "required": "{{validation.required-field}}" - }, "review-card-modal": { "close": "{{common.close}}", "external-mod": "(external)", diff --git a/UI/Web/src/assets/langs/fr.json b/UI/Web/src/assets/langs/fr.json index de9f74431..3ae26002d 100644 --- a/UI/Web/src/assets/langs/fr.json +++ b/UI/Web/src/assets/langs/fr.json @@ -62,15 +62,6 @@ "spoiler": { "click-to-show": "Divulgâcheur, cliquez afin d'afficher" }, - "review-series-modal": { - "title": "Éditer la critique", - "review-label": "Critique", - "close": "{{common.close}}", - "save": "{{common.save}}", - "delete": "{{common.delete}}", - "min-length": "La critique doit comporter au moins {{count}} caractères", - "required": "{{validation.required-field}}" - }, "review-card-modal": { "close": "{{common.close}}", "user-review": "Critique de {{username}}", @@ -762,8 +753,6 @@ "no-pages": "{{toasts.no-pages}}", "no-chapters": "Il n'y a aucun chapitre dans ce volume. Il ne peut être lu.", "cover-change": "L'actualisation de l'image par votre navigateur peut prendre jusqu'à une minute. En attendant, l'ancienne image peut être affichée sur certaines pages.", - "user-reviews-local": "Commentaires locaux", - "user-reviews-plus": "Commentaires externes", "writers-title": "{{metadata-fields.writers-title}}", "cover-artists-title": "{{metadata-fields.cover-artists-title}}", "characters-title": "{{metadata-fields.characters-title}}", diff --git a/UI/Web/src/assets/langs/ga.json b/UI/Web/src/assets/langs/ga.json index 25f961d57..94490ec07 100644 --- a/UI/Web/src/assets/langs/ga.json +++ b/UI/Web/src/assets/langs/ga.json @@ -62,15 +62,6 @@ "spoiler": { "click-to-show": "Spoiler, cliceáil chun a thaispeáint" }, - "review-series-modal": { - "title": "Cuir Athbhreithniú in Eagar", - "review-label": "Athbhreithniú", - "close": "{{common.close}}", - "save": "{{common.save}}", - "delete": "{{common.delete}}", - "min-length": "Ní mór an t-athbhreithniú a bheith ar a laghad {{count}} carachtair", - "required": "{{validation.required-field}}" - }, "review-card-modal": { "close": "{{common.close}}", "user-review": "Léirmheas {{username}}", @@ -81,7 +72,8 @@ "your-review": "Is é seo d'athbhreithniú", "external-review": "Athbhreithniú Seachtrach", "local-review": "Athbhreithniú Áitiúil", - "rating-percentage": "Rátáil {{r}}%" + "rating-percentage": "Rátáil {{r}}%", + "critic": "criticeoir" }, "want-to-read": { "title": "Ag iarraidh léamh", @@ -762,8 +754,6 @@ "no-pages": "{{toasts.no-pages}}", "no-chapters": "Níl aon chaibidlí san imleabhar seo. Ní féidir léamh.", "cover-change": "Is féidir leis suas le nóiméad a thógáil le do bhrabhsálaí an íomhá a athnuachan. Go dtí sin, is féidir an tseaníomhá a thaispeáint ar roinnt leathanach.", - "user-reviews-local": "Léirmheasanna Áitiúla", - "user-reviews-plus": "Léirmheasanna Seachtracha", "writers-title": "{{metadata-fields.writers-title}}", "cover-artists-title": "{{metadata-fields.cover-artists-title}}", "characters-title": "{{metadata-fields.characters-title}}", @@ -825,7 +815,8 @@ "entry-label": "Féach Sonraí", "kavita-tooltip": "Do Rátáil + Tríd is tríd", "kavita-rating-title": "Do Rátáil", - "close": "{{common.close}}" + "close": "{{common.close}}", + "critic": "{{review-card.critic}}" }, "badge-expander": { "more-items": "agus {{count}} níos mó" @@ -1522,7 +1513,8 @@ "logout": "Logáil amach", "all-filters": "Scagairí Cliste", "nav-link-header": "Roghanna Nascleanúna", - "close": "{{common.close}}" + "close": "{{common.close}}", + "person-aka-status": "Meaitseálann leasainm" }, "promoted-icon": { "promoted": "{{common.promoted}}" @@ -2260,7 +2252,9 @@ "bulk-delete-libraries": "An bhfuil tú cinnte gur mhaith leat {{count}} leabharlann a scriosadh?", "match-success": "Sraith a mheaitseáil i gceart", "webtoon-override": "Ag aistriú go mód Webtoon mar gheall ar íomhánna a léiríonn webtoon.", - "scrobble-gen-init": "Cheangail post chun teagmhais scrobble a ghiniúint ó stair léitheoireachta agus rátálacha san am a chuaigh thart, agus iad á sioncronú le seirbhísí ceangailte." + "scrobble-gen-init": "Cheangail post chun teagmhais scrobble a ghiniúint ó stair léitheoireachta agus rátálacha san am a chuaigh thart, agus iad á sioncronú le seirbhísí ceangailte.", + "confirm-delete-multiple-volumes": "An bhfuil tú cinnte gur mian leat {{count}} imleabhar a scriosadh? Ní athróidh sé comhaid ar an diosca.", + "series-added-want-to-read": "Sraith curtha leis ón liosta Ar Mhaith Leat Léamh" }, "read-time-pipe": { "less-than-hour": "<1 Uair", @@ -2333,7 +2327,10 @@ "copy-settings": "Cóipeáil Socruithe Ó", "match": "Meaitseáil", "match-tooltip": "Sraith Meaitseála le Kavita+ de láimh", - "reorder": "Athordú" + "reorder": "Athordú", + "rename": "Athainmnigh", + "rename-tooltip": "Athainmnigh an Scagaire Cliste", + "merge": "Cumaisc" }, "preferences": { "left-to-right": "Clé go Deas", @@ -2472,7 +2469,9 @@ "browse-person-by-role-title": "Gach Oibre de {{name}} mar {{role}}", "individual-role-title": "Mar {{role}}", "all-roles": "Róil", - "anilist-url": "{{edit-person-modal.anilist-tooltip}}" + "anilist-url": "{{edit-person-modal.anilist-tooltip}}", + "aka-title": "Ar a dtugtar freisin ", + "no-info": "Gan aon eolas faoin Duine seo" }, "edit-person-modal": { "general-tab": "{{edit-series-modal.general-tab}}", @@ -2495,7 +2494,11 @@ "anilist-tooltip": "https://anilist.co/staff/{AniListId}/", "cover-image-description-extra": "Nó is féidir leat clúdach a íoslódáil ó CoversDB má tá sé ar fáil.", "hardcover-tooltip": "https://hardcover.app/authors/{HardcoverId}", - "download-coversdb": "Íoslódáil ó CoverDB" + "download-coversdb": "Íoslódáil ó CoverDB", + "aliases-label": "Cuir leasainmneacha in eagar", + "aliases-tab": "Leasainmneacha", + "aliases-tooltip": "Nuair a chuirtear leasainm duine ar shraith, sanntar an duine sin seachas duine nua a chruthú. Agus leasainm á scriosadh, beidh ort an tsraith a athscanadh le go dtabharfar faoi deara an t-athrú.", + "alias-overlap": "Tá an leasainm seo ag tagairt do dhuine eile cheana féin nó is é ainm an duine seo é, smaoinigh ar iad a chumasc." }, "new-version-modal": { "description": "Tá leagan nua de Kavita ar fáil. Athnuaigh le nuashonrú.", @@ -2532,7 +2535,7 @@ "title": "Meaitseáil {{ seriesName}}", "description": "Roghnaigh meaitseáil chun meiteashonraí Kavita+ a athshreangú agus imeachtaí scrobble a athghiniúint. Is féidir Don't Match a úsáid chun Kavita a shrianadh ó mheiteashonraí a mheaitseáil agus scrobadh a dhéanamh.", "close": "{{common.close}}", - "query-tooltip": "Cuir isteach ainm na sraithe, url AniList/MyAnimeList. Bainfidh URLanna úsáid as cuardach díreach.", + "query-tooltip": "Cuir isteach ainm na sraithe, url AniList/MyAnimeList/ComicBookRoundup. Úsáidfear cuardach díreach sna URLanna.", "dont-match-label": "Ná Meaitseáil", "dont-match-tooltip": "Rogha an tsraith seo ó mheaitseáil agus scrobbling", "search": "Cuardach" @@ -2569,7 +2572,8 @@ "volume-count": "{{server-stats.volume-count}}", "chapter-count": "{{common.chapter-count}}", "releasing": "Ag scaoileadh", - "updating-metadata-status": "Meiteashonraí á nuashonrú" + "updating-metadata-status": "Meiteashonraí á nuashonrú", + "issue-count": "{{common.issue-count}}" }, "manage-user-tokens": { "description": "Seans go mbeidh gá le hathnuachan a dhéanamh ó am go chéile ar úsáideoirí a bhfuil comharthaí scrobarnaí acu. Seolfaidh Kavita ríomhphost chucu go huathoibríoch má tá ríomhphost socraithe agus má tá ríomhphost bailí acu.", @@ -2619,7 +2623,18 @@ "overrides-description": "Lig do Kavita scríobh thar réimsí faoi ghlas.", "overrides-label": "Sáraíonn", "localized-name-tooltip": "Ceadaigh Ainm Logánaithe a scríobh nuair a dhíghlasáiltear an réimse. Déanfaidh Kavita iarracht an buille faoi thuairim is fearr a dhéanamh.", - "enable-cover-image-tooltip": "Lig do Kavita íomhá clúdaigh na Sraithe a scríobh" + "enable-cover-image-tooltip": "Lig do Kavita íomhá clúdaigh na Sraithe a scríobh", + "enable-chapter-publisher-tooltip": "Ceadaigh d’Fhoilsitheoir na Caibidle/na hEagráine a bheith scríofa", + "chapter-header": "Réimsí Caibidle", + "enable-chapter-title-label": "Teideal", + "enable-chapter-title-tooltip": "Ceadaigh Teideal na Caibidle/na hEagráin a scríobh", + "enable-chapter-summary-label": "{{manage-metadata-settings.summary-label}}", + "enable-chapter-summary-tooltip": "{{manage-metadata-settings.summary-tooltip}}", + "enable-chapter-release-date-label": "Dáta Eisiúna", + "enable-chapter-release-date-tooltip": "Ceadaigh Dáta Eisiúna na Caibidle/na hEagráine a scríobh", + "enable-chapter-publisher-label": "Foilsitheoir", + "enable-chapter-cover-label": "Clúdach Caibidle", + "enable-chapter-cover-tooltip": "Ceadaigh Clúdach na Caibidle/na hEagráin a shocrú" }, "metadata-setting-field-pipe": { "people": "{{tabs.people-tab}}", @@ -2630,7 +2645,12 @@ "covers": "Clúdaíonn", "publication-status": "{{edit-series-modal.publication-status-title}}", "summary": "{{filter-field-pipe.summary}}", - "age-rating": "{{metadata-fields.age-rating-title}}" + "age-rating": "{{metadata-fields.age-rating-title}}", + "chapter-covers": "Clúdaigh (Caibidil)", + "chapter-release-date": "Dáta Eisiúna (Caibidil)", + "chapter-title": "Teideal (Caibidil)", + "chapter-summary": "Achoimre (Caibidil)", + "chapter-publisher": "{{person-role-pipe.publisher}} (Caibidil)" }, "role-localized-pipe": { "admin": "Riarachán", @@ -2648,5 +2668,27 @@ "critical": "Criticiúil", "information": "Eolas", "debug": "Dífhabhtaithe" + }, + "review-modal": { + "required": "{{validation.required-field}}", + "title": "Cuir Athbhreithniú in Eagar", + "save": "{{common.save}}", + "min-length": "Ní mór don léirmheas a bheith {{count}} carachtar ar a laghad", + "delete": "{{common.delete}}", + "review-label": "Athbhreithniú", + "close": "{{common.close}}" + }, + "reviews": { + "user-reviews-local": "Léirmheasanna Áitiúla", + "user-reviews-plus": "Léirmheasanna Seachtracha" + }, + "merge-person-modal": { + "close": "{{common.close}}", + "alias-title": "Leasainmneacha nua", + "merge-warning": "Má leanann tú ar aghaidh, bainfear an duine roghnaithe. Cuirfear ainm an duine roghnaithe leis mar leasainm, agus aistreofar a róil go léir.", + "known-for-title": "Ar a dtugtar", + "src": "Cumaisc Duine", + "title": "{{personName}}", + "save": "{{common.save}}" } } diff --git a/UI/Web/src/assets/langs/hi.json b/UI/Web/src/assets/langs/hi.json index 76431d0ee..f7403ba75 100644 --- a/UI/Web/src/assets/langs/hi.json +++ b/UI/Web/src/assets/langs/hi.json @@ -17,12 +17,6 @@ "filter-label": "{{common.filter}}", "special": "{{entity-title.special}}" }, - "review-series-modal": { - "close": "{{common.close}}", - "save": "{{common.save}}", - "delete": "{{common.delete}}", - "required": "{{validation.required-field}}" - }, "review-card-modal": { "close": "{{common.close}}" }, diff --git a/UI/Web/src/assets/langs/hu.json b/UI/Web/src/assets/langs/hu.json index a95fff6a4..53c9632cd 100644 --- a/UI/Web/src/assets/langs/hu.json +++ b/UI/Web/src/assets/langs/hu.json @@ -56,15 +56,6 @@ "spoiler": { "click-to-show": "Spoiler, kattints a megnézéshez" }, - "review-series-modal": { - "title": "Áttekintés szerkesztése", - "review-label": "Áttekintés", - "close": "{{common.close}}", - "save": "{{common.save}}", - "delete": "{{common.delete}}", - "min-length": "Az áttekintés legalább {{count}} karakter kell legyen", - "required": "{{validation.required-field}}" - }, "review-card-modal": { "close": "{{common.close}}", "user-review": "{{username}} áttekintése", diff --git a/UI/Web/src/assets/langs/id.json b/UI/Web/src/assets/langs/id.json index 3f3c50656..5843bf7da 100644 --- a/UI/Web/src/assets/langs/id.json +++ b/UI/Web/src/assets/langs/id.json @@ -54,15 +54,6 @@ "spoiler": { "click-to-show": "Spoiler, klik untuk tampilkan" }, - "review-series-modal": { - "title": "Ubah Ulasan", - "review-label": "Ulasan", - "close": "{{common.close}}", - "save": "{{common.save}}", - "delete": "{{common.delete}}", - "min-length": "Ulasan harus setidaknya terdiri dari {{count}} karakter", - "required": "{{validation.required-field}}" - }, "review-card-modal": { "close": "{{common.close}}" }, diff --git a/UI/Web/src/assets/langs/it.json b/UI/Web/src/assets/langs/it.json index c9e6be73c..bfee2d3c8 100644 --- a/UI/Web/src/assets/langs/it.json +++ b/UI/Web/src/assets/langs/it.json @@ -62,15 +62,6 @@ "spoiler": { "click-to-show": "Spoiler, clicca per mostrare" }, - "review-series-modal": { - "title": "Modifica recensione", - "review-label": "Recensione", - "close": "{{common.close}}", - "save": "{{common.save}}", - "delete": "{{common.delete}}", - "min-length": "La recensione deve avere almeno {{count}} caratteri", - "required": "{{validation.required-field}}" - }, "review-card-modal": { "close": "{{common.close}}", "user-review": "Recensione di {{username}}", @@ -780,10 +771,8 @@ "reading-lists-title": "{{side-nav.reading-lists}}", "time-to-read-alt": "{{sort-field-pipe.time-to-read}}", "scrobbling-tooltip": "{{settings.scrobbling}}", - "user-reviews-plus": "Recensioni Esterne", "words-count": "{{num}} Parole", "more-alt": "Ancora", - "user-reviews-local": "Recensioni Locali", "pages-count": "{{num}} Pagine", "weblinks-title": "Link", "time-left-alt": "Tempo Rimanente", diff --git a/UI/Web/src/assets/langs/ja.json b/UI/Web/src/assets/langs/ja.json index d2c52f0ea..0aa935eee 100644 --- a/UI/Web/src/assets/langs/ja.json +++ b/UI/Web/src/assets/langs/ja.json @@ -61,15 +61,6 @@ "spoiler": { "click-to-show": "クリックするとネタバレが表示されます" }, - "review-series-modal": { - "title": "レビューを編集する", - "review-label": "レビュー", - "close": "{{common.close}}", - "save": "{{common.save}}", - "delete": "{{common.delete}}", - "min-length": "レビューは最低 {{count}}文字以上である必要があります。", - "required": "{{validation.required-field}}" - }, "review-card-modal": { "close": "{{common.close}}", "user-review": "{{username}}さんのレビュー", @@ -726,8 +717,6 @@ "no-pages": "{{toasts.no-pages}}", "no-chapters": "この巻にはチャプターが存在しません。読むことはできません。", "cover-change": "ブラウザが画像をリフレッシュするまで最大1分かかる場合があります。その間、一部のページでは古い画像が表示される可能性があります。", - "user-reviews-local": "ローカルレビュー", - "user-reviews-plus": "外部レビュー", "writers-title": "{{metadata-fields.writers-title}}", "cover-artists-title": "{{metadata-fields.cover-artists-title}}", "characters-title": "{{metadata-fields.characters-title}}", diff --git a/UI/Web/src/assets/langs/ko.json b/UI/Web/src/assets/langs/ko.json index 4da21a4e7..449fdcae2 100644 --- a/UI/Web/src/assets/langs/ko.json +++ b/UI/Web/src/assets/langs/ko.json @@ -62,15 +62,6 @@ "spoiler": { "click-to-show": "스포일러, 표시하려면 클릭" }, - "review-series-modal": { - "title": "리뷰 수정", - "review-label": "평가", - "close": "{{common.close}}", - "save": "{{common.save}}", - "delete": "{{common.delete}}", - "min-length": "리뷰는 적어도 {{count}}자여야 합니다", - "required": "{{validation.required-field}}" - }, "review-card-modal": { "close": "{{common.close}}", "user-review": "{{username}}님의 리뷰", @@ -81,7 +72,8 @@ "your-review": "당신의 리뷰", "external-review": "외부 리뷰", "local-review": "로컬 리뷰", - "rating-percentage": "평점 {{r}}%" + "rating-percentage": "평점 {{r}}%", + "critic": "평점" }, "want-to-read": { "title": "읽고 싶어요", @@ -517,9 +509,9 @@ }, "library-type-pipe": { "book": "책", - "comic": "만화(Comic)", + "comic": "만화 (Legacy)", "manga": "만화(Manga)", - "comicVine": "Comic Vine", + "comicVine": "코믹(Comic)", "image": "이미지", "lightNovel": "라이트 노벨" }, @@ -762,8 +754,6 @@ "no-pages": "{{toasts.no-pages}}", "no-chapters": "이 볼륨에는 챕터가 없습니다. 읽을 수 없습니다.", "cover-change": "브라우저에서 이미지를 새로 고치는 데 최대 1분이 걸릴 수 있습니다. 그때까지는 일부 페이지에 이전 이미지가 표시될 수 있습니다.", - "user-reviews-local": "로컬 리뷰", - "user-reviews-plus": "외부 리뷰", "writers-title": "{{metadata-fields.writers-title}}", "cover-artists-title": "{{metadata-fields.cover-artists-title}}", "characters-title": "{{metadata-fields.characters-title}}", @@ -789,7 +779,7 @@ "more-alt": "더 보기", "time-left-alt": "남은 시간", "time-to-read-alt": "{{sort-field-pipe.time-to-read}}", - "scrobbling-tooltip": "{{settings.scrobbling}}", + "scrobbling-tooltip": "{{settings.scrobbling}}: {{value}}", "publication-status-title": "출판", "publication-status-tooltip": "출판현황", "on": "{{reader-settings.on}}", @@ -825,7 +815,8 @@ "entry-label": "세부정보 보기", "kavita-tooltip": "귀하의 평가 + 전체", "kavita-rating-title": "귀하의 평가", - "close": "{{common.close}}" + "close": "{{common.close}}", + "critic": "{{review-card.critic}}" }, "badge-expander": { "more-items": "와 {{count}} 더" @@ -861,7 +852,8 @@ "more": "더 보기", "customize": "{{settings.customize}}", "browse-authors": "작가 찾아보기", - "edit": "{{common.edit}}" + "edit": "{{common.edit}}", + "cancel-edit": "재정렬 닫기" }, "library-settings-modal": { "close": "{{common.close}}", @@ -878,7 +870,7 @@ "type-label": "유형", "type-tooltip": "라이브러리 유형에 따라 파일 이름이 구문 분석되는 방식과 UI에 장(만화)과 이슈(만화)가 표시되는지 여부가 결정됩니다. 라이브러리 유형 간의 차이점에 대한 자세한 내용은 Wiki를 확인하세요.", "kavitaplus-eligible-label": "Kavita+ 적격", - "kavitaplus-eligible-tooltip": "Kavita+가 정보를 가져오거나 스크로블링을 지원합니까", + "kavitaplus-eligible-tooltip": "Kavita+ 메타데이터 기능 또는 자동 추천 지원", "folder-description": "라이브러리에 폴더 추가", "browse": "미디어 폴더 찾아보기", "help-us-part-1": "팔로우하여 저희를 도와주세요 ", @@ -1086,7 +1078,7 @@ "reset": "{{common.reset}}", "test": "테스트", "host-name-label": "호스트 이름", - "host-name-tooltip": "도메인 이름(역방향 프록시의). 이메일 기능에 필요합니다. 역방향 프록시가 없으면 임의의 URL을 사용하십시오.", + "host-name-tooltip": "이메일 기능에 필요한 역방향 프록시의 도메인 이름입니다. 역방향 프록시를 사용하지 않는 경우, http://externalip:port/ 형식 등 어떠한 URL도 사용할 수 있습니다", "host-name-validation": "호스트 이름은 http(s)로 시작하고 /로 끝나지 않아야 합니다", "sender-address-label": "송신자 주소", "sender-address-tooltip": "이는 수신자가 이메일을 받을 때 볼 수 있는 이메일 주소입니다. 일반적으로 계정과 연결된 이메일 주소입니다.", @@ -1596,7 +1588,7 @@ "dry-run-step": "모의 실행", "final-import-step": "마지막 단계", "comicvine-parsing-label": "Comic Vine 시리즈 매칭 사용", - "cbl-repo": "커뮤니티에서 많은 독서 목록을 찾을 수 있습니다. 보고.", + "cbl-repo": "커뮤니티에서 많은 독서 목록을 찾을 수 있습니다. 리포지토리.", "help-label": "{{common.help}}" }, "pdf-reader": { @@ -2015,7 +2007,8 @@ "sidenav": "사이드 내비게이션", "external-sources": "외부 소스", "smart-filters": "스마트 필터", - "help": "{{common.help}}" + "help": "{{common.help}}", + "description": "순서 바꾸기, 표시 여부 전환, 스마트 필터 및 외부 소스를 홈페이지 또는 사이드 탐색 메뉴에 바인딩하여 Kavita의 다양한 기능을 사용자 지정할 수 있습니다." }, "customize-dashboard-streams": { "no-data": "대시보드에 모든 스마트 필터가 추가되었거나 아직 생성되지 않았습니다.", @@ -2258,7 +2251,8 @@ "bulk-delete-libraries": "{{count}}개의 라이브러리를 삭제하시겠습니까?", "webtoon-override": "웹툰을 나타내는 이미지가 있어 웹툰 모드로 전환합니다.", "match-success": "시리즈가 올바르게 일치함", - "confirm-delete-multiple-volumes": "{{count}}개의 볼륨을 삭제하시겠습니까? 디스크의 파일은 수정되지 않습니다." + "confirm-delete-multiple-volumes": "{{count}}개의 볼륨을 삭제하시겠습니까? 디스크의 파일은 수정되지 않습니다.", + "scrobble-gen-init": "과거 열람 이력 및 평가를 추적하는 이벤트를 생성하여 연결된 서비스와 동기화하는 기능을 작업 예정 목록에 추가하였습니다." }, "read-time-pipe": { "less-than-hour": "<1시간", @@ -2330,7 +2324,10 @@ "title": "작업", "copy-settings": "설정 복사하기", "match": "일치", - "match-tooltip": "Kavita+에서 시리즈를 수동으로 일치시키기" + "match-tooltip": "Kavita+에서 시리즈를 수동으로 일치시키기", + "reorder": "정렬 변경", + "rename": "이름 변경", + "rename-tooltip": "스마트 필터 이름 변경" }, "preferences": { "left-to-right": "왼쪽에서 오른쪽", @@ -2587,7 +2584,18 @@ "enable-genres-tooltip": "시리즈 장르를 작성할 수 있도록 허용합니다.", "whitelist-label": "화이트리스트 태그", "age-rating-mapping-title": "연령 등급 매핑", - "genre": "장르" + "genre": "장르", + "enable-chapter-title-label": "제목", + "chapter-header": "챕터 필드", + "enable-chapter-title-tooltip": "Chapter/Issue 제목 작성 허용", + "enable-chapter-summary-label": "{{manage-metadata-settings.summary-label}}", + "enable-chapter-summary-tooltip": "{{manage-metadata-settings.summary-tooltip}}", + "enable-chapter-release-date-label": "발매일", + "enable-chapter-release-date-tooltip": "Chapter/Issue 발매일 작성 허용", + "enable-chapter-publisher-label": "출판사", + "enable-chapter-publisher-tooltip": "Chapter/Issue 출판사 작성 허용", + "enable-chapter-cover-label": "챕터 표지", + "enable-chapter-cover-tooltip": "Chapter/Issue 커버 설정 허용" }, "match-series-modal": { "search": "검색", @@ -2606,7 +2614,8 @@ "details": "페이지 보기", "updating-metadata-status": "메타데이터 업데이트", "releasing": "출시", - "chapter-count": "{{common.chapter-count}}" + "chapter-count": "{{common.chapter-count}}", + "issue-count": "{{common.issue-count}}" }, "email-history": { "sent-header": "성공", @@ -2627,7 +2636,12 @@ "people": "{{tabs.people-tab}}", "summary": "{{filter-field-pipe.summary}}", "publication-status": "{{edit-series-modal.publication-status-title}}", - "start-date": "{{manage-metadata-settings.enable-start-date-label}}" + "start-date": "{{manage-metadata-settings.enable-start-date-label}}", + "chapter-publisher": "{{person-role-pipe.publisher}} (Chapter)", + "chapter-covers": "커버 (Chapter)", + "chapter-title": "제목 (챕터)", + "chapter-release-date": "발매일 (Chapter)", + "chapter-summary": "요약 (Chapter)" }, "role-localized-pipe": { "admin": "관리자", @@ -2645,5 +2659,18 @@ "trace": "추적", "warning": "경고", "critical": "치명적" + }, + "reviews": { + "user-reviews-local": "로컬 리뷰", + "user-reviews-plus": "외부 리뷰" + }, + "review-modal": { + "title": "리뷰 편집", + "review-label": "리뷰", + "close": "{{common.close}}", + "save": "{{common.save}}", + "delete": "{{common.delete}}", + "min-length": "리뷰는 최소 {{count}}자 이상이어야 합니다", + "required": "{{validation.required-field}}" } } diff --git a/UI/Web/src/assets/langs/ms.json b/UI/Web/src/assets/langs/ms.json index 00b1bf9f9..caadc9d33 100644 --- a/UI/Web/src/assets/langs/ms.json +++ b/UI/Web/src/assets/langs/ms.json @@ -27,12 +27,6 @@ "filter-label": "{{common.filter}}", "special": "{{entity-title.special}}" }, - "review-series-modal": { - "close": "{{common.close}}", - "save": "{{common.save}}", - "delete": "{{common.delete}}", - "required": "{{validation.required-field}}" - }, "review-card-modal": { "close": "{{common.close}}" }, diff --git a/UI/Web/src/assets/langs/nb_NO.json b/UI/Web/src/assets/langs/nb_NO.json index 1ecb88f36..ac0ed2c76 100644 --- a/UI/Web/src/assets/langs/nb_NO.json +++ b/UI/Web/src/assets/langs/nb_NO.json @@ -16,12 +16,6 @@ "filter-label": "{{common.filter}}", "special": "{{entity-title.special}}" }, - "review-series-modal": { - "close": "{{common.close}}", - "save": "{{common.save}}", - "delete": "{{common.delete}}", - "required": "{{validation.required-field}}" - }, "review-card-modal": { "close": "{{common.close}}" }, diff --git a/UI/Web/src/assets/langs/nl.json b/UI/Web/src/assets/langs/nl.json index cb0cd1287..57f96555a 100644 --- a/UI/Web/src/assets/langs/nl.json +++ b/UI/Web/src/assets/langs/nl.json @@ -62,15 +62,6 @@ "spoiler": { "click-to-show": "Spoiler, klik om te tonen" }, - "review-series-modal": { - "title": "Beoordeling bewerken", - "review-label": "Beoordeling", - "close": "{{common.close}}", - "save": "{{common.save}}", - "delete": "{{common.delete}}", - "min-length": "Review moet minimum {{count}} characters hebben", - "required": "{{validation.required-field}}" - }, "review-card-modal": { "close": "{{common.close}}", "user-review": "{{username}}s Recensie", diff --git a/UI/Web/src/assets/langs/pl.json b/UI/Web/src/assets/langs/pl.json index 797dcc27b..654b6dcb4 100644 --- a/UI/Web/src/assets/langs/pl.json +++ b/UI/Web/src/assets/langs/pl.json @@ -62,15 +62,6 @@ "spoiler": { "click-to-show": "Spoiler, kliknij by wyświetlić" }, - "review-series-modal": { - "title": "Edytuj recenzję", - "review-label": "Recenzja", - "close": "{{common.close}}", - "save": "{{common.save}}", - "delete": "{{common.delete}}", - "min-length": "Recenzja musi zawierać co najmniej {{count}} znaków", - "required": "{{validation.required-field}}" - }, "review-card-modal": { "close": "{{common.close}}", "user-review": "Recenzja {{username}}", @@ -762,8 +753,6 @@ "no-pages": "{{toasts.no-pages}}", "no-chapters": "W tym tomie nie ma rozdziałów. Nie można odczytać.", "cover-change": "Odświeżenie obrazu w przeglądarce może potrwać do minuty. Do tego czasu na niektórych stronach może być wyświetlany stary obraz.", - "user-reviews-local": "Lokalne recenzje", - "user-reviews-plus": "Zewnętrzne recenzje", "writers-title": "{{metadata-fields.writers-title}}", "cover-artists-title": "{{metadata-fields.cover-artists-title}}", "characters-title": "{{metadata-fields.characters-title}}", diff --git a/UI/Web/src/assets/langs/pt.json b/UI/Web/src/assets/langs/pt.json index 2f4d291cc..5acfea812 100644 --- a/UI/Web/src/assets/langs/pt.json +++ b/UI/Web/src/assets/langs/pt.json @@ -62,15 +62,6 @@ "spoiler": { "click-to-show": "Spoiler, clique para ver" }, - "review-series-modal": { - "title": "Editar Crítica", - "review-label": "Crítica", - "close": "{{common.close}}", - "save": "{{common.save}}", - "delete": "{{common.delete}}", - "min-length": "A resenha deve ter pelo menos {{count}} caracteres", - "required": "{{validation.required-field}}" - }, "review-card-modal": { "close": "{{common.close}}", "user-review": "Crítica de {{username}}", @@ -762,8 +753,6 @@ "no-pages": "{{toasts.no-pages}}", "no-chapters": "Não existem capítulos neste volume. Impossível ler.", "cover-change": "Pode levar até um minuto para a imagem ser refrescada pelo browser. Até isso acontecer, a imagem antiga será mostrada nalgumas páginas.", - "user-reviews-local": "Críticas Locais", - "user-reviews-plus": "Críticas Externas", "writers-title": "{{metadata-fields.writers-title}}", "cover-artists-title": "{{metadata-fields.cover-artists-title}}", "characters-title": "{{metadata-fields.characters-title}}", diff --git a/UI/Web/src/assets/langs/pt_BR.json b/UI/Web/src/assets/langs/pt_BR.json index dd2ad5db1..bf6029d14 100644 --- a/UI/Web/src/assets/langs/pt_BR.json +++ b/UI/Web/src/assets/langs/pt_BR.json @@ -62,15 +62,6 @@ "spoiler": { "click-to-show": "Spoiler, clique para mostrar" }, - "review-series-modal": { - "title": "Editar Análise", - "review-label": "Análise", - "close": "{{common.close}}", - "save": "{{common.save}}", - "delete": "{{common.delete}}", - "min-length": "A análise deve ter pelo menos {{count}} caracteres", - "required": "{{validation.required-field}}" - }, "review-card-modal": { "close": "{{common.close}}", "user-review": "{{username}}'s Análise", @@ -81,7 +72,8 @@ "your-review": "Esta é sua análise", "external-review": "Análise Externa", "local-review": "Análise Local", - "rating-percentage": "Avaliação {{r}}%" + "rating-percentage": "Avaliação {{r}}%", + "critic": "crítico" }, "want-to-read": { "title": "Quero Ler", @@ -762,8 +754,6 @@ "no-pages": "{{toasts.no-pages}}", "no-chapters": "Não há capítulos neste volume. Não posso ler.", "cover-change": "Pode levar até um minuto para o seu navegador atualizar a imagem. Até lá, a imagem antiga pode ser exibida em algumas páginas.", - "user-reviews-local": "Análises Locais", - "user-reviews-plus": "Análises Externas", "writers-title": "{{metadata-fields.writers-title}}", "cover-artists-title": "{{metadata-fields.cover-artists-title}}", "characters-title": "{{metadata-fields.characters-title}}", @@ -825,7 +815,8 @@ "entry-label": "Ver Detalhes", "kavita-tooltip": "Sua Avaliação + Geral", "kavita-rating-title": "Sua Avaliação", - "close": "{{common.close}}" + "close": "{{common.close}}", + "critic": "{{review-card.critic}}" }, "badge-expander": { "more-items": "e {{count}} mais" @@ -1522,7 +1513,8 @@ "logout": "Sair", "all-filters": "Filtros Inteligentes", "nav-link-header": "Opções de Navegação", - "close": "{{common.close}}" + "close": "{{common.close}}", + "person-aka-status": "Resultados como pseudônimos" }, "promoted-icon": { "promoted": "{{common.promoted}}" @@ -2261,7 +2253,8 @@ "match-success": "Série correspondida corretamente", "webtoon-override": "Mudando para o modo Webtoon devido a imagens que representam um Webtoon.", "scrobble-gen-init": "Enfileirou uma tarefa para gerar eventos scrobble a partir do histórico de leitura e avaliações anteriores, sincronizando-os com serviços conectados.", - "confirm-delete-multiple-volumes": "Tem certeza de que deseja excluir {{count}} volumes? Isso não modificará os arquivos no disco." + "confirm-delete-multiple-volumes": "Tem certeza de que deseja excluir {{count}} volumes? Isso não modificará os arquivos no disco.", + "series-added-want-to-read": "Série adicionada da lista Quero Ler" }, "read-time-pipe": { "less-than-hour": "<1 Hora", @@ -2336,7 +2329,8 @@ "match-tooltip": "Corresponder Séries com Kavita+ manualmente", "reorder": "Reordenar", "rename-tooltip": "Renomear o Filtro Inteligente", - "rename": "Renomear" + "rename": "Renomear", + "merge": "Mesclar" }, "preferences": { "left-to-right": "Esquerda para Direita", @@ -2485,7 +2479,11 @@ "cover-image-description-extra": "Alternativamente, você pode baixar uma capa do CoversDB, se disponível.", "download-coversdb": "Baixar do CoversDB", "hardcover-tooltip": "https://hardcover.app/authors/{HardcoverId}", - "asin-tooltip": "https://www.amazon.com/stores/J.K.-Rowling/author/{ASIN}" + "asin-tooltip": "https://www.amazon.com/stores/J.K.-Rowling/author/{ASIN}", + "alias-overlap": "Esse pseudônimo já aponta para outra pessoa ou é o nome dessa pessoa, considere mesclá -la.", + "aliases-label": "Editar pseudônimos", + "aliases-tab": "Pseudônimos", + "aliases-tooltip": "Quando uma série é etiquetada com um pseudônimo de uma pessoa, a pessoa é atribuída em vez de ser criada uma nova pessoa. Ao eliminar um pseudônimo, terá de voltar a analisar a série para que a alteração seja detectada." }, "browse-authors": { "author-count": "{{num}} Pessoas", @@ -2498,7 +2496,9 @@ "individual-role-title": "Como um {{role}}", "known-for-title": "Conhecido Por", "all-roles": "Papéis", - "anilist-url": "{{edit-person-modal.anilist-tooltip}}" + "anilist-url": "{{edit-person-modal.anilist-tooltip}}", + "no-info": "Nenhuma informação sobre esta Pessoa", + "aka-title": "Também conhecido como · " }, "manage-user-tokens": { "anilist-header": "AniList", @@ -2561,7 +2561,7 @@ "save": "{{common.save}}", "no-results": "Não foi possível encontrar uma correspondência. Tente adicionar o URL de um provedor compatível e tente novamente.", "query-label": "Consulta", - "query-tooltip": "Digite o nome da série, URL AniList/MyAnimeList. As URLs usarão uma pesquisa direta.", + "query-tooltip": "Digite o nome da série, urls de Anilist/Myanimelist/ComicbookRoundup URL. As URLs serão usadas como pesquisa direta.", "dont-match-label": "Não Fazer Correspondência", "dont-match-tooltip": "Opte por esta série de correspondência e scrobbling", "search": "Pesquisar" @@ -2571,7 +2571,8 @@ "chapter-count": "{{common.chapter-count}}", "releasing": "Lançando", "details": "Exibir página", - "updating-metadata-status": "Atualizando Metadados" + "updating-metadata-status": "Atualizando Metadados", + "issue-count": "{{common.issue-count}}" }, "email-history": { "description": "Aqui você encontra todos os e-mails enviados por Kavita e para qual usuário.", @@ -2622,7 +2623,18 @@ "enable-cover-image-tooltip": "Permitir que Kavita escreva a imagem da capa das Séries", "localized-name-tooltip": "Permitir que o nome localizado seja escrito quando o campo for desbloqueado. Kavita tentará dar o melhor palpite.", "overrides-description": "Permita que Kavita escreva os campos trancados.", - "overrides-label": "Substituir" + "overrides-label": "Substituir", + "enable-chapter-title-label": "Título", + "enable-chapter-publisher-label": "Editora", + "enable-chapter-publisher-tooltip": "Permitir que a Editora do Capítulo/Número seja salvo", + "enable-chapter-cover-label": "Capa do Capítulo", + "enable-chapter-cover-tooltip": "Permitir que a Capa do Capítulo/Número seja definida", + "chapter-header": "Campos de Capítulo", + "enable-chapter-title-tooltip": "Permitir que o Título do Capítulo/Número seja salvo", + "enable-chapter-summary-label": "{{manage-metadata-settings.summary-label}}", + "enable-chapter-summary-tooltip": "{{manage-metadata-settings.summary-tooltip}}", + "enable-chapter-release-date-label": "Data de Lançamento", + "enable-chapter-release-date-tooltip": "Permitir que a Data de Lançamento do Capítulo/Número seja salvo" }, "metadata-setting-field-pipe": { "publication-status": "{{edit-series-modal.publication-status-title}}", @@ -2633,7 +2645,12 @@ "localized-name": "{{edit-series-modal.localized-name-label}}", "age-rating": "{{metadata-fields.age-rating-title}}", "people": "{{tabs.people-tab}}", - "summary": "{{filter-field-pipe.summary}}" + "summary": "{{filter-field-pipe.summary}}", + "chapter-summary": "Resumo (Capítulo)", + "chapter-covers": "Capas (Capítulo)", + "chapter-publisher": "{{person-role-pipe.publisher}} (Capítulo)", + "chapter-title": "Título (Capítulo)", + "chapter-release-date": "Data de Lançamento (Capítulo)" }, "role-localized-pipe": { "admin": "Admin", @@ -2651,5 +2668,27 @@ "trace": "Rastro", "warning": "Aviso", "critical": "Crítico" + }, + "reviews": { + "user-reviews-local": "Análises Locais", + "user-reviews-plus": "Análises Externas" + }, + "review-modal": { + "title": "Editar Análise", + "review-label": "Análise", + "close": "{{common.close}}", + "delete": "{{common.delete}}", + "min-length": "A análise deve ter pelo menos {{count}} caracteres", + "required": "{{validation.required-field}}", + "save": "{{common.save}}" + }, + "merge-person-modal": { + "save": "{{common.save}}", + "src": "Mesclar Pessoa", + "alias-title": "Novos pseudônimos", + "close": "{{common.close}}", + "title": "{{personName}}", + "merge-warning": "se prosseguir, a pessoa selecionada será removida. O nome da pessoa selecionada será adicionado como um pseudônimo e todas as suas funções serão transferidas.", + "known-for-title": "Conhecido por" } } diff --git a/UI/Web/src/assets/langs/ru.json b/UI/Web/src/assets/langs/ru.json index c190e99b9..0789c6685 100644 --- a/UI/Web/src/assets/langs/ru.json +++ b/UI/Web/src/assets/langs/ru.json @@ -59,15 +59,6 @@ "spoiler": { "click-to-show": "Спойлер, нажмите, чтобы показать" }, - "review-series-modal": { - "title": "Редактировать отзыв", - "review-label": "Обзор", - "close": "{{common.close}}", - "save": "{{common.save}}", - "delete": "{{common.delete}}", - "min-length": "Отзыв должен содержать не меньше {{count}} символов", - "required": "{{validation.required-field}}" - }, "review-card-modal": { "close": "{{common.close}}", "user-review": "Обзор на {{username}}", diff --git a/UI/Web/src/assets/langs/sk.json b/UI/Web/src/assets/langs/sk.json index 4d3c36c17..ac2f5ec6a 100644 --- a/UI/Web/src/assets/langs/sk.json +++ b/UI/Web/src/assets/langs/sk.json @@ -62,15 +62,6 @@ "spoiler": { "click-to-show": "Spojler, kliknite na zobrazenie" }, - "review-series-modal": { - "title": "Upraviť recenziu", - "review-label": "Recenzia", - "close": "{{common.close}}", - "save": "{{common.save}}", - "delete": "{{common.delete}}", - "required": "{{validation.required-field}}", - "min-length": "Recenzia musí obsahovať aspoň {{count}} znakov" - }, "review-card-modal": { "close": "{{common.close}}", "external-mod": "(externé)", @@ -784,8 +775,6 @@ "more-alt": "Viac", "publication-status-title": "Publikácia", "publication-status-tooltip": "Stav publikácie", - "user-reviews-local": "Miestne recenzie", - "user-reviews-plus": "Externé recenzie", "pages-count": "{{num}} Strán", "words-count": "{{num}} Slov", "weblinks-title": "Odkazy", diff --git a/UI/Web/src/assets/langs/sv.json b/UI/Web/src/assets/langs/sv.json index c987293a1..f18657fe4 100644 --- a/UI/Web/src/assets/langs/sv.json +++ b/UI/Web/src/assets/langs/sv.json @@ -3,7 +3,7 @@ "username": "{{common.username}}", "password": "{{common.password}}", "password-validation": "{{validation.password-validation}}", - "title": "Logga in till ditt konto", + "title": "Logga in på ditt konto", "forgot-password": "Glömt lösenord?", "submit": "Logga in" }, @@ -43,15 +43,6 @@ "token-expired": "Din AniList-token är Utgången! Scrobbling kommer inte processeras förrän du har förnyat det under Konto.", "generate-scrobble-events": "Backfill Events" }, - "review-series-modal": { - "close": "{{common.close}}", - "save": "{{common.save}}", - "delete": "{{common.delete}}", - "required": "{{validation.required-field}}", - "title": "Redigera recension", - "review-label": "Recension", - "min-length": "Recension måste vara minst {{count}} tecken" - }, "review-card-modal": { "close": "{{common.close}}", "external-mod": "(extern)", @@ -86,7 +77,7 @@ "locale-label": "Språk", "locale-tooltip": "Språket Kavita ska nyttja", "blur-unread-summaries-label": "Censurera olästa sammanfattningar", - "blur-unread-summaries-tooltip": "Cencurera sammanfattningar på volymer eller kapitel som inte har någon läsprogress (för att undvika spoilers)", + "blur-unread-summaries-tooltip": "Cencurera handlingen på volymer eller kapitel som inte har någon läsprogress (för att undvika spoilers)", "disable-animations-tooltip": "Inaktivera animationer på sidan. Användbart på e-ink-läsare.", "reading-mode-label": "Läsläge", "layout-mode-label": "Layoutläge", @@ -269,7 +260,7 @@ "age-restriction-label": "Åldersbegränsning" }, "scrobbling-providers": { - "instructions": "First time users should click on \"{{scrobbling-providers.generate}}\" below to allow Kavita+ to talk with {{service}}. Once you authorize the program, copy and paste the token in the input below. You can regenerate your token at any time.", + "instructions": "Nya användare bör klicka på \"{{scrobbling-providers.generate}}\" nedan för att tillåta Kavita+ att prata med {{service}}. Efter att du gett programmet åtkomst, kopiera och klistra in token i rutan nedanför. Du kan generera nytt token när som helst.", "edit": "{{common.edit}}", "cancel": "{{common.cancel}}", "save": "{{common.save}}", @@ -504,7 +495,7 @@ "incognito-mode-label": "Inkognitoläge", "next": "Nästa", "next-chapter": "Nästa Kapitel/Volym", - "close-reader": "Stäng läsare", + "close-reader": "Stäng Läsare", "go-to-page": "Gå till sida", "go-to-last-page": "Gå till sista sidan", "prev-chapter": "Förra Kapitel/Volym", @@ -601,8 +592,6 @@ "cover-change": "Det kan ta upp till en minut för att din webbläsare ska uppdatera bilden. Under tiden kan den gamla bilden visas på vissa sidor.", "layout-mode-option-list": "Lista", "read-incognito": "Läs inkognito", - "user-reviews-plus": "Externa recensioner", - "user-reviews-local": "Lokala recensioner", "continue-incognito": "Fortsätt inkognito", "incognito": "Inkognito", "continue-from": "Fortsätt {{title}}", @@ -636,7 +625,7 @@ "editors-title": "Redaktörer", "colorists-title": "Färgläggare", "letterers-title": "Bokstavsättare", - "inkers-title": "Inker" + "inkers-title": "Inkers" }, "external-rating": { "close": "{{common.close}}", @@ -944,7 +933,7 @@ "bookmark-dir-tooltip": "Plats där bokmärken kommer att lagras. Bokmärken är källfiler och kan vara stora. Välj en plats med tillräckligt med lagring. Katalogen hanteras; andra filer inom katalogen kommer att raderas. Om du använder Docker, montera en extra volym och använd den.", "encode-as-description-part-2": "Kan jag använda WebP?", "media-issue-title": "Medieproblem", - "scrobble-issue-title": "Scrobble-problem", + "scrobble-issue-title": "Scrobble Nummer", "cover-image-size-label": "Omslagsbildsstorlek" }, "manage-scrobble-errors": { @@ -1110,7 +1099,7 @@ "filter-label": "{{common.filter}}", "promote-tooltip": "Marknadsför betyder att taggen kan ses over hela servern, inte bara för admin-användare. Alla serier som har denna tagg kommer fortfarande att ha användarbegränsningar placerade på sig.", "title": "Redigera {{collectionName}} Samling", - "summary-label": "Summering", + "summary-label": "Handling", "missing-series-title": "Saknade Serier:", "name-validation": "Namn måste vara unikt", "name-label": "Namn", @@ -1295,7 +1284,7 @@ "close": "{{common.close}}", "save": "{{common.save}}", "required-field": "{{validation.required-field}}", - "summary-label": "Summering", + "summary-label": "Handling", "promote-label": "Tipsa", "promote-tooltip": "Tipsa betyder att samlingen kan ses över hela servern, inte bara av dig. Alla serier inom denna samling kommer fortfarande att ha användarbegränsningar som gäller för dem.", "starting-title": "Startar", @@ -1494,7 +1483,7 @@ "highest-count-tooltip": "Högsta Antal funnet i alla ComicInfo i serien", "name-label": "Namn", "sort-name-label": "Sortera Namn", - "summary-label": "Summering", + "summary-label": "Handling", "total-words-title": "Totalt antal Ord", "size-title": "Storlek", "specials-volume": "Specials", @@ -1667,7 +1656,7 @@ "filter": "{{common.filter}}", "clear": "{{common.clear}}", "external-sources-title": "{{customize-dashboard-modal.external-sources}}", - "reorder-when-filter-present": "You cannot reorder items via drag & drop while a filter is present. Use {{customize-sidenav-streams.order-numbers-label}}", + "reorder-when-filter-present": "Du kan inte ordna om objekt via drag & släpp medan ett filter används. Använd {{customize-sidenav-streams.order-numbers-label}}", "order-numbers-label": "{{reading-list-detail.order-numbers-label}}", "bulk-mode-label": "Massläge", "no-data-external-source": "Alla Externa Källor har lagts till i Sido Nav eller så har inga skapats än.", @@ -1752,7 +1741,7 @@ "imprint": "Förlag", "average-rating": "Genomsnittligt betyg", "series-name": "Serie Namn", - "summary": "Summering", + "summary": "Handling", "read-date": "Läsdatum", "want-to-read": "Vill Läsa", "publication-status": "Publikationsstatus" @@ -1823,13 +1812,15 @@ "remove-from-on-deck-tooltip": "Radera serier från att visas på Hyllan", "add-to-collection-tooltip": "Lägg till serier i en samling", "delete-tooltip": "Det finns inget sätt att ångra detta beslut", - "back-to": "Tillbaka till {{action}}" + "back-to": "Tillbaka till {{action}}", + "rename": "Byt namn", + "rename-tooltip": "Byt namn på Smart Filter" }, "dashboard": { "recently-added-title": "Nyligen tillagda serier", "more-in-genre-title": "Mer inom {{genre}}", "server-settings-link": "Serverinställningar", - "no-libraries": "Det är inga bibliotek skapade än. Skapa några i", + "no-libraries": "Det finns inga bibliotek skapade än. Skapa några i", "not-granted": "Du har inte fått rättigheter till något bibliotek.", "on-deck-title": "På hyllan", "recently-updated-title": "Nyligen uppdaterade serier" @@ -1866,7 +1857,7 @@ }, "manage-metadata-settings": { "enabled-tooltip": "Tillåt Kavita att ladda ner metadata och skriva till sin databas.", - "summary-label": "Summering", + "summary-label": "Handling", "enable-people-label": "Personer", "enable-start-date-tooltip": "Tillåt Seriens startdatum att bli skriven till serien", "enable-genres-label": "Genres", @@ -1887,7 +1878,7 @@ "enable-genres-tooltip": "Tillåt serie-genrer att skrivas.", "description": "Kavita+ har möjlighet att ladda ner och skriva viss begränsad metadata till databasen. Denna sida gör det möjligt för dig att växla vad som ingår.", "enable-people-tooltip": "Tillåt personer (karaktärer, författare, osv.) att läggas till. Alla personer inkluderar bilder.", - "summary-tooltip": "TIllåt Summering att skrivas när fältet är upplåst.", + "summary-tooltip": "Tillåt Handling att skrivas när fältet är upplåst.", "derive-publication-status-tooltip": "Tillåt publiceringsstatus att härledas från totala kapitel-/volymantal.", "derive-publication-status-label": "Publiceringsstatus", "enable-relations-label": "Förhållanden", @@ -1903,7 +1894,18 @@ "enable-tags-label": "Taggar", "age-rating-mapping-title": "Åldersgruppsbedömning", "add-age-rating-mapping-label": "Lägg till Åldersgruppsbedömning", - "field-mapping-title": "Fältmappning" + "field-mapping-title": "Fältmappning", + "enable-chapter-title-label": "Titel", + "enable-chapter-summary-label": "{{manage-metadata-settings.summary-label}}", + "enable-chapter-title-tooltip": "Tillåt Titeln för Kapitel/Nummer att skrivas", + "enable-chapter-cover-tooltip": "Tillåt Omslag för Kapitel/Nummer att ställas in", + "enable-chapter-cover-label": "Kapitelomslag", + "enable-chapter-summary-tooltip": "{{manage-metadata-settings.summary-tooltip}}", + "enable-chapter-release-date-label": "Släppdatum", + "enable-chapter-release-date-tooltip": "Tillåt Släppdatum för Kapitel/Nummer att skrivas", + "enable-chapter-publisher-tooltip": "Tillåt Utgivare för Kapitel/Nummer att skrivas", + "enable-chapter-publisher-label": "Utgivare", + "chapter-header": "Kapitelfält" }, "match-series-result-item": { "releasing": "Släpper", @@ -2129,7 +2131,7 @@ "show": "Visa", "hide": "Göm", "regen-warning": "Att regenerera din API-nyckel kommer att ogiltigförklara alla befintliga klienter.", - "no-key": "FEL – NYCKEL INTE ANGETTS", + "no-key": "ERROR – NYCKEL HAR EJ ANGETTS", "confirm-reset": "Detta kommer att ogiltigförklara alla OPDS-konfigurationer du har ställt in. Är du säker på att du vill fortsätta?", "key-reset": "Återställ API-nyckel", "copy": "Kopiera" @@ -2168,7 +2170,7 @@ "sunday": "Söndag" }, "device-platform-pipe": { - "custom": "Anpassa" + "custom": "Anpassad" }, "cbl-import-result-pipe": { "success": "Lyckats", @@ -2648,6 +2650,11 @@ "start-date": "{{manage-metadata-settings.enable-start-date-label}}", "genres": "{{metadata-fields.genres-title}}", "tags": "{{metadata-fields.tags-title}}", - "localized-name": "{{edit-series-modal.localized-name-label}}" + "localized-name": "{{edit-series-modal.localized-name-label}}", + "chapter-summary": "Handling (Kapitel)", + "chapter-publisher": "{{person-role-pipe.publisher}} (Kapitel)", + "chapter-title": "Titel (Kapitel)", + "chapter-release-date": "Släppdatum (Kapitel)", + "chapter-covers": "Omslag (Kapitel)" } } diff --git a/UI/Web/src/assets/langs/ta.json b/UI/Web/src/assets/langs/ta.json index d72580f42..5b61fd060 100644 --- a/UI/Web/src/assets/langs/ta.json +++ b/UI/Web/src/assets/langs/ta.json @@ -75,15 +75,6 @@ "spoiler": { "click-to-show": "ச்பாய்லர், காட்ட சொடுக்கு செய்க" }, - "review-series-modal": { - "title": "மதிப்பாய்வைத் திருத்தவும்", - "review-label": "சீராய்வு", - "close": "{{common.close}}", - "save": "{{common.save}}", - "delete": "{{common.delete}}", - "min-length": "மதிப்பாய்வு குறைந்தபட்சம் {{count}} எழுத்துக்களாக இருக்க வேண்டும்", - "required": "{{validation.required-field}}" - }, "theme-manager": { "set-default": "இயல்புநிலையை அமைக்கவும்", "default-theme": "இயல்புநிலை", @@ -237,7 +228,6 @@ "kavita+-requirement": "கவிதா+ அண்மைக் கால வெளியீடு - 2 பதிப்புகளுடன் மட்டுமே வேலை செய்ய வடிவமைக்கப்பட்டுள்ளது. அதற்கு வெளியே எதுவும் வேலை செய்யாததற்கு உட்பட்டது." }, "series-detail": { - "user-reviews-plus": "வெளிப்புற மதிப்புரைகள்", "writers-title": "{{metadata-fields.writers-title}}}", "cover-artists-title": "{{metadata-fields.cover-artists-title}}}", "characters-title": "{{metadata-fields.Characters-title}}}", @@ -251,7 +241,6 @@ "tags-title": "{{metadata-fields.tags-title}}}", "ongoing": "{{வெளியீட்டு-நிலை-பைப்.ங்கோயிங்}}", "release-date-title": "வெளியீடு", - "user-reviews-local": "உள்ளக மதிப்புரைகள்", "page-settings-title": "பக்க அமைப்புகள்", "close": "{{common.close}}", "layout-mode-label": "{{பயனர்-முன்னுரிமைகள்.லேவுட்-மோட்-புக்-லேபிள்}}}", diff --git a/UI/Web/src/assets/langs/th.json b/UI/Web/src/assets/langs/th.json index 274b53b69..059c707e6 100644 --- a/UI/Web/src/assets/langs/th.json +++ b/UI/Web/src/assets/langs/th.json @@ -55,14 +55,6 @@ "spoiler": { "click-to-show": "คลิกเพื่อแสดง" }, - "review-series-modal": { - "title": "แก้ไขรีวิว", - "review-label": "รีวิว", - "close": "{{common.close}}", - "save": "{{common.save}}", - "delete": "{{common.delete}}", - "required": "{{validation.required-field}}" - }, "review-card-modal": { "close": "{{common.close}}", "user-review": "รีวิวของ {{username}}", diff --git a/UI/Web/src/assets/langs/tr.json b/UI/Web/src/assets/langs/tr.json index 7964d8303..eb08d66df 100644 --- a/UI/Web/src/assets/langs/tr.json +++ b/UI/Web/src/assets/langs/tr.json @@ -49,14 +49,6 @@ "spoiler": { "click-to-show": "Spoiler, görmek için tıklayın" }, - "review-series-modal": { - "title": "İncelemeyi düzenle", - "review-label": "İnceleme", - "close": "{{common.close}}", - "save": "{{common.save}}", - "delete": "{{common.delete}}", - "required": "{{validation.required-field}}" - }, "review-card-modal": { "close": "{{common.close}}", "user-review": "{{username}} İncelemesi", @@ -122,7 +114,9 @@ "clients-api-key-tooltip": "API anahtarı bir şifre gibidir. Sıfırlamak mevcut istemcileri geçersiz kılar.", "clients-opds-url-tooltip": "Desteklenen OPDS istemcilerinin listesine bakın: ", "reset": "{{common.reset}}", - "save": "{{common.save}}" + "save": "{{common.save}}", + "pdf-reader-settings-title": "PDF okuyucu", + "kavitaplus-settings-title": "Kavita+" }, "user-holds": { "no-data": "{{typeahead.no-data}}" @@ -138,7 +132,9 @@ "delete": "{{common.delete}}", "drag-n-drop": "{{cover-image-chooser.drag-n-drop}}", "upload": "{{cover-image-chooser.upload}}", - "add": "{{common.add}}" + "add": "{{common.add}}", + "downloadable": "İndirilebilir", + "downloaded": "İndirildi" }, "theme": { "theme-dark": "Karanlık", @@ -183,7 +179,10 @@ "edit": "{{common.edit}}", "cancel": "{{common.cancel}}", "save": "{{common.save}}", - "required-field": "{{validation.required-field}}" + "required-field": "{{validation.required-field}}", + "confirm-password-label": "Parola onayı", + "current-password-label": "Geçerli parola", + "new-password-label": "Yeni parola" }, "change-email": { "required-field": "{{validation.required-field}}", @@ -192,7 +191,10 @@ "edit": "{{common.edit}}", "cancel": "{{common.cancel}}", "save": "{{common.save}}", - "setup-user-account": "Kullanıcının hesabını kur" + "setup-user-account": "Kullanıcının hesabını kur", + "email-title": "E-posta", + "email-label": "Yeni e-posta", + "current-password-label": "Geçerli parola" }, "change-age-restriction": { "reset": "{{common.reset}}", @@ -258,12 +260,16 @@ "email-label": "{{common.email}}", "required-field": "{{validation.required-field}}", "valid-email": "{{validation.valid-email}}", - "submit": "{{common.submit}}" + "submit": "{{common.submit}}", + "title": "Parolayı sıfırla" }, "reset-password-modal": { "close": "{{common.close}}", "cancel": "{{common.cancel}}", - "save": "{{common.save}}" + "save": "{{common.save}}", + "title": "{{username}}'ın parolasını sıfırla", + "new-password-label": "Yeni parola", + "error-label": "Hata: " }, "all-series": { "series-count": "{{common.series-count}}" @@ -295,7 +301,8 @@ "activate-email-label": "{{common.email}}", "activate-delete": "{{common.delete}}", "activate-reset": "Lisansı Sıfırla", - "activate-save": "{{common.save}}" + "activate-save": "{{common.save}}", + "reset-label": "Sıfırla" }, "book-line-overlay": { "close": "{{common.close}}", @@ -317,7 +324,9 @@ "password-label": "{{common.password}}", "required-field": "{{validation.required-field}}", "submit": "{{common.submit}}", - "password-validation": "{{validation.password-validation}}" + "password-validation": "{{validation.password-validation}}", + "description": "Yeni parola girin", + "title": "Parolayı sıfırla" }, "register": { "username-label": "{{common.username}}", @@ -362,7 +371,7 @@ "volume-num": "{{common.volume-num}}", "reading-lists-title": "{{side-nav.reading-lists}}", "time-to-read-alt": "{{sort-field-pipe.time-to-read}}", - "scrobbling-tooltip": "{{settings.scrobbling}}" + "scrobbling-tooltip": "{{settings.scrobbling}}: {{value}}" }, "metadata-fields": { "collections-title": "{{side-nav.collections}}", @@ -393,7 +402,8 @@ "cancel": "{{common.cancel}}", "save": "{{common.save}}", "required-field": "{{validation.required-field}}", - "help": "{{common.help}}" + "help": "{{common.help}}", + "force-scan": "Taramaya zorla" }, "reader-settings": { "font-family-label": "{{user-preferences.font-family-label}}", @@ -403,7 +413,8 @@ "reading-direction-label": "{{user-preferences.reading-direction-book-label}}", "writing-style-label": "{{user-preferences.writing-style-label}}", "immersive-mode-label": "{{user-preferences.immersive-mode-label}}", - "layout-mode-label": "{{user-preferences.layout-mode-book-label}}" + "layout-mode-label": "{{user-preferences.layout-mode-book-label}}", + "reset-to-defaults": "Varsayılanlara sıfırla" }, "bookmarks": { "title": "{{side-nav.bookmarks}}", @@ -438,7 +449,8 @@ "cover-image-chooser": { "reset": "{{common.reset}}", "apply": "{{common.apply}}", - "applied": "{{theme-manager.applied}}" + "applied": "{{theme-manager.applied}}", + "reset-cover-tooltip": "Kapak görselini sıfırla" }, "edit-series-relation": { "remove": "{{common.remove}}", @@ -747,7 +759,8 @@ "manage-smart-filters": { "delete": "{{common.delete}}", "filter": "{{common.filter}}", - "clear": "{{common.clear}}" + "clear": "{{common.clear}}", + "cancel": "{{common.cancel}}" }, "edit-external-source-item": { "save": "{{common.save}}", @@ -777,7 +790,8 @@ "writers": "{{metadata-fields.writers-title}}" }, "actionable": { - "clear": "{{common.clear}}" + "clear": "{{common.clear}}", + "scan-library-tooltip": "Değişiklikler için kütüphaneyi tarayın. Her klasörü kontrol etmek için taramayı zorla kullanın" }, "preferences": { "1-column": "1 Sütun", @@ -802,18 +816,30 @@ "username": "Kullanıcı adı", "password": "Parola", "select-all": "Tümünü Seç", - "book-num": "Kitap" + "book-num": "Kitap", + "cancel": "İptal", + "reset-to-default": "Varsayılan olarak sıfırla" }, "tabs": { "account-tab": "Hesap" }, "toasts": { "account-registration-complete": "Hesap kaydı tamamlandı", - "account-migration-complete": "Hesap taşıma tamamlandı" + "account-migration-complete": "Hesap taşıma tamamlandı", + "reset-ip-address": "IP adresleri sıfırla", + "password-reset": "Parola sıfırla", + "email-service-reset": "E-posta hizmeti sıfırla" }, "api-key": { "hide": "Gizle", "show": "Göster", - "copy": "Kopyala" + "copy": "Kopyala", + "reset": "Sıfırla" + }, + "confirm": { + "cancel": "{{common.cancel}}" + }, + "publication-status-pipe": { + "cancelled": "İptal edildi" } } diff --git a/UI/Web/src/assets/langs/uk.json b/UI/Web/src/assets/langs/uk.json index 0dc9a0a87..37e2c1131 100644 --- a/UI/Web/src/assets/langs/uk.json +++ b/UI/Web/src/assets/langs/uk.json @@ -48,15 +48,6 @@ "not-processed": "Не опрацьовано", "chapter-num": "Розділ" }, - "review-series-modal": { - "close": "{{common.close}}", - "save": "{{common.save}}", - "delete": "{{common.delete}}", - "required": "{{validation.required-field}}", - "title": "Редагувати огляд", - "review-label": "Огляд", - "min-length": "Огляд мусить містити принаймні {{count}} знаків" - }, "review-card-modal": { "close": "{{common.close}}", "user-review": "Огляд від {{username}}", diff --git a/UI/Web/src/assets/langs/vi.json b/UI/Web/src/assets/langs/vi.json index 7a559a5f1..2dd4fbc96 100644 --- a/UI/Web/src/assets/langs/vi.json +++ b/UI/Web/src/assets/langs/vi.json @@ -39,15 +39,6 @@ "processed": "Đã Xử Lý", "not-processed": "Chưa Xử Lý" }, - "review-series-modal": { - "close": "{{common.close}}", - "save": "{{common.save}}", - "delete": "{{common.delete}}", - "required": "{{validation.required-field}}", - "title": "Sửa Đánh Giá", - "review-label": "Đánh Giá", - "min-length": "Đánh giá phải dài ít nhất {{count}} ký tự" - }, "review-card-modal": { "close": "{{common.close}}", "go-to-review": "Tới Phần Đánh giá", @@ -562,8 +553,6 @@ "read-options-alt": "Tùy Chọn Đọc", "edit-series-alt": "Chỉnh Sửa Thông Tin", "send-to": "Tệp được gửi qua email tới {{deviceName}}", - "user-reviews-local": "Đánh Giá Cục Bộ", - "user-reviews-plus": "Đánh Giá Bên Ngoài", "release-date-title": "Phát hành", "pages-count": "{{num}} Trang", "words-count": "{{num}} Từ", diff --git a/UI/Web/src/assets/langs/zh_Hans.json b/UI/Web/src/assets/langs/zh_Hans.json index 191d29891..af222921d 100644 --- a/UI/Web/src/assets/langs/zh_Hans.json +++ b/UI/Web/src/assets/langs/zh_Hans.json @@ -62,15 +62,6 @@ "spoiler": { "click-to-show": "剧透,点击显示" }, - "review-series-modal": { - "title": "编辑评论", - "review-label": "评论", - "close": "{{common.close}}", - "save": "{{common.save}}", - "delete": "{{common.delete}}", - "min-length": "评论必须至少有 {{count}} 个字符", - "required": "{{validation.required-field}}" - }, "review-card-modal": { "close": "{{common.close}}", "user-review": "{{username}}的评论", @@ -81,7 +72,8 @@ "your-review": "我的评论", "external-review": "外部评论", "local-review": "本地评论", - "rating-percentage": "评分 {{r}}%" + "rating-percentage": "评分 {{r}}%", + "critic": "评论家" }, "want-to-read": { "title": "想读", @@ -106,7 +98,7 @@ "locale-label": "本地语言", "locale-tooltip": "Kavita 当前语言", "blur-unread-summaries-label": "模糊未读摘要", - "blur-unread-summaries-tooltip": "模糊没有阅读进度的卷或章节的摘要文本(避免剧透)", + "blur-unread-summaries-tooltip": "模糊没有阅读进度的卷或章节的内容简介文本(避免剧透)", "prompt-on-download-label": "下载时提示", "prompt-on-download-tooltip": "当下载大小超过 {{size}}MB 时提示", "disable-animations-label": "关闭动画", @@ -762,8 +754,6 @@ "no-pages": "{{toasts.no-pages}}", "no-chapters": "本卷没有章节,无法读取。", "cover-change": "刷新图片需要一点时间。在此期间,可能某些页面仍显示旧图片。", - "user-reviews-local": "本地评论", - "user-reviews-plus": "外部评论", "writers-title": "{{metadata-fields.writers-title}}", "cover-artists-title": "{{metadata-fields.cover-artists-title}}", "characters-title": "{{metadata-fields.characters-title}}", @@ -825,7 +815,8 @@ "entry-label": "查看详情", "kavita-tooltip": "您的评分 + 总体", "kavita-rating-title": "您的评分", - "close": "{{common.close}}" + "close": "{{common.close}}", + "critic": "{{review-card.critic}}" }, "badge-expander": { "more-items": "和{{count}}个更多" @@ -1522,7 +1513,8 @@ "logout": "注销", "all-filters": "智能筛选", "nav-link-header": "导航选项", - "close": "{{common.close}}" + "close": "{{common.close}}", + "person-aka-status": "匹配别名" }, "promoted-icon": { "promoted": "{{common.promoted}}" @@ -2261,7 +2253,8 @@ "match-success": "系列匹配正确", "webtoon-override": "由于图片代表网络漫画,因此切换到网络漫画模式。", "scrobble-gen-init": "将一项任务加入队列,该任务将根据过去的阅读历史和评分生成 scrobble 事件,并将其与已连接的服务同步。", - "confirm-delete-multiple-volumes": "您确定要删除这 {{count}} 个卷吗?这不会修改磁盘上的文件。" + "confirm-delete-multiple-volumes": "您确定要删除这 {{count}} 个卷吗?这不会修改磁盘上的文件。", + "series-added-want-to-read": "从“想读”列表中添加的系列" }, "read-time-pipe": { "less-than-hour": "<1 小时", @@ -2336,7 +2329,8 @@ "match-tooltip": "使用 Kavita+ 手动匹配系列", "reorder": "重新排序", "rename-tooltip": "重命名智能筛选", - "rename": "重命名" + "rename": "重命名", + "merge": "合并" }, "preferences": { "left-to-right": "从左到右", @@ -2485,7 +2479,11 @@ "cover-image-description-extra": "或者,您可以从 CoversDB 下载封面(如果有)。", "download-coversdb": "从 CoversDB 下载", "mal-tooltip": "https://myanimelist.net/people/{MalId}/", - "hardcover-tooltip": "https://hardcover.app/authors/{HardcoverId}" + "hardcover-tooltip": "https://hardcover.app/authors/{HardcoverId}", + "aliases-tooltip": "当某个系列被标记为某个人的别名时,系统会分配该人,而不是创建新的人。删除别名后,您必须重新扫描该系列才能生效。", + "aliases-tab": "别名", + "aliases-label": "编辑别名", + "alias-overlap": "此别名已经指向另一个人或为该人的名字,请考虑合并它们。" }, "person-detail": { "all-roles": "角色", @@ -2493,7 +2491,9 @@ "individual-role-title": "作为 {{role}}", "browse-person-title": "{{name}} 的全部作品", "browse-person-by-role-title": "{{name}} 作为 {{role}} 的所有作品", - "anilist-url": "{{edit-person-modal.anilist-tooltip}}" + "anilist-url": "{{edit-person-modal.anilist-tooltip}}", + "no-info": "没有关于此人的信息", + "aka-title": "又名 " }, "browse-authors": { "author-count": "{{num}} 人", @@ -2507,7 +2507,7 @@ "description": "选择一个匹配项来重新连接 Kavita+ 元数据并重新生成 scrobble 事件。 不匹配可用于限制 Kavita 匹配元数据和乱序。", "no-results": "无法找到匹配项。尝试添加来自受支持的提供商的 URL,然后重试。", "query-label": "询问", - "query-tooltip": "输入系列名称、AniList/MyAnimeList url。 URL 将使用直接查找。", + "query-tooltip": "输入系列名称、AniList/MyAnimeList/ComicBookRoundup 网址。网址将使用直接查找。", "dont-match-label": "不匹配", "dont-match-tooltip": "从匹配和 scrobbling 中选择该系列", "search": "搜索" @@ -2571,7 +2571,8 @@ "chapter-count": "{{common.chapter-count}}", "releasing": "释放", "details": "查看页面", - "updating-metadata-status": "更新元数据" + "updating-metadata-status": "更新元数据", + "issue-count": "{{common.issue-count}}" }, "email-history": { "description": "在这里您可以找到从 Kavita 发送的所有电子邮件以及发送给哪个用户。", @@ -2622,7 +2623,18 @@ "enable-cover-image-label": "封面图片", "enable-cover-image-tooltip": "允许 Kavita 为该系列撰写封面图片", "overrides-label": "覆盖", - "overrides-description": "允许 Kavita 覆盖锁定的字段。" + "overrides-description": "允许 Kavita 覆盖锁定的字段。", + "enable-chapter-summary-label": "{{manage-metadata-settings.summary-label}}", + "enable-chapter-summary-tooltip": "{{manage-metadata-settings.summary-tooltip}}", + "enable-chapter-release-date-label": "发布日期", + "enable-chapter-release-date-tooltip": "允许写入章节/期刊的发布日期", + "enable-chapter-cover-label": "章节封面", + "enable-chapter-cover-tooltip": "允许设置章节/期刊的封面", + "chapter-header": "章节字段", + "enable-chapter-publisher-label": "出版社", + "enable-chapter-title-label": "标题", + "enable-chapter-title-tooltip": "允许写入章节/期刊的标题", + "enable-chapter-publisher-tooltip": "允许写入章节/期刊的出版社" }, "metadata-setting-field-pipe": { "covers": "封面", @@ -2633,7 +2645,12 @@ "genres": "{{metadata-fields.genres-title}}", "tags": "{{metadata-fields.tags-title}}", "localized-name": "{{edit-series-modal.localized-name-label}}", - "publication-status": "{{edit-series-modal.publication-status-title}}" + "publication-status": "{{edit-series-modal.publication-status-title}}", + "chapter-summary": "内容简介(章节)", + "chapter-publisher": "{{person-role-pipe.publisher}} (章节)", + "chapter-title": "标题(章节)", + "chapter-covers": "封面(章节)", + "chapter-release-date": "发布日期(章节)" }, "role-localized-pipe": { "download": "下载", @@ -2651,5 +2668,27 @@ "trace": "追踪", "warning": "警告", "critical": "严重" + }, + "reviews": { + "user-reviews-plus": "外部评审", + "user-reviews-local": "本地评论" + }, + "review-modal": { + "review-label": "评论", + "save": "{{common.save}}", + "delete": "{{common.delete}}", + "min-length": "评论必须至少包含 {{count}} 个字符", + "required": "{{validation.required-field}}", + "title": "编辑评论", + "close": "{{common.close}}" + }, + "merge-person-modal": { + "close": "{{common.close}}", + "src": "合并人员", + "title": "{{personName}}", + "known-for-title": "代表作品", + "merge-warning": "如果继续,所选人员将被移除。所选人员的姓名将被添加为别名,并且其所有角色都将被转移。", + "alias-title": "新别名", + "save": "{{common.save}}" } } diff --git a/UI/Web/src/assets/langs/zh_Hant.json b/UI/Web/src/assets/langs/zh_Hant.json index 1e36a2940..8e5841f26 100644 --- a/UI/Web/src/assets/langs/zh_Hant.json +++ b/UI/Web/src/assets/langs/zh_Hant.json @@ -58,15 +58,6 @@ "spoiler": { "click-to-show": "點擊查看據透" }, - "review-series-modal": { - "title": "編輯評論", - "review-label": "評論", - "close": "{{common.close}}", - "save": "{{common.save}}", - "delete": "{{common.delete}}", - "min-length": "評論至少需有 {{count}} 個字元", - "required": "{{validation.required-field}}" - }, "review-card-modal": { "close": "{{common.close}}", "user-review": "{{username}}的評論", @@ -712,8 +703,6 @@ "page-settings-title": "頁面設定", "layout-mode-option-list": "清單", "incognito": "無痕模式", - "user-reviews-local": "本地評論", - "user-reviews-plus": "外部評論", "release-date-title": "發行", "publication-status-title": "出版", "continue-from": "繼續 {{title}}", From d9ac52aa0f646bbfdfa2488f5b3d9dd7222dad3e Mon Sep 17 00:00:00 2001 From: Amelia <77553571+Fesaa@users.noreply.github.com> Date: Wed, 14 May 2025 16:43:52 +0200 Subject: [PATCH 2/5] Fix first chapter in a series not having a cover when K+ replaces series cover --- API/Services/Tasks/Metadata/CoverDbService.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/API/Services/Tasks/Metadata/CoverDbService.cs b/API/Services/Tasks/Metadata/CoverDbService.cs index 59f01de55..99d02401b 100644 --- a/API/Services/Tasks/Metadata/CoverDbService.cs +++ b/API/Services/Tasks/Metadata/CoverDbService.cs @@ -572,7 +572,13 @@ public class CoverDbService : ICoverDbService var choseNewImage = string.Equals(betterImage, tempFullPath, StringComparison.OrdinalIgnoreCase); if (choseNewImage) { - _directoryService.DeleteFiles([existingPath]); + + // Don't delete series cover, unless it's an override, otherwise the first chapter cover will be null + if (existingPath.Contains(ImageService.GetSeriesFormat(series.Id))) + { + _directoryService.DeleteFiles([existingPath]); + } + _directoryService.CopyFile(tempFullPath, finalFullPath); series.CoverImage = finalFileName; } From a751da4ca6e531d7bdf3c35430e5baa18f15ec23 Mon Sep 17 00:00:00 2001 From: majora2007 Date: Wed, 14 May 2025 16:12:57 +0000 Subject: [PATCH 3/5] Bump versions by dotnet-bump-version. --- Kavita.Common/Kavita.Common.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Kavita.Common/Kavita.Common.csproj b/Kavita.Common/Kavita.Common.csproj index ac49db155..dbdfca7b8 100644 --- a/Kavita.Common/Kavita.Common.csproj +++ b/Kavita.Common/Kavita.Common.csproj @@ -3,7 +3,7 @@ net9.0 kavitareader.com Kavita - 0.8.6.10 + 0.8.6.11 en true From 6288d89651a813a5c33aeef356f0f88bad8bd54d Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Wed, 14 May 2025 16:14:04 +0000 Subject: [PATCH 4/5] Update OpenAPI documentation --- openapi.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openapi.json b/openapi.json index 7cac13947..27452fb02 100644 --- a/openapi.json +++ b/openapi.json @@ -2,12 +2,12 @@ "openapi": "3.0.4", "info": { "title": "Kavita", - "description": "Kavita provides a set of APIs that are authenticated by JWT. JWT token can be copied from local storage. Assume all fields of a payload are required. Built against v0.8.6.9", + "description": "Kavita provides a set of APIs that are authenticated by JWT. JWT token can be copied from local storage. Assume all fields of a payload are required. Built against v0.8.6.10", "license": { "name": "GPL-3.0", "url": "https://github.com/Kareadita/Kavita/blob/develop/LICENSE" }, - "version": "0.8.6.9" + "version": "0.8.6.10" }, "servers": [ { From 193e9b1da95bbfcef57c57ac884af35bdac41b50 Mon Sep 17 00:00:00 2001 From: Fesaa <77553571+Fesaa@users.noreply.github.com> Date: Wed, 4 Jun 2025 09:45:10 +0200 Subject: [PATCH 5/5] A collection of bug fixes (#3820) Co-authored-by: Joseph Milazzo --- API/Controllers/SeriesController.cs | 4 +- API/Controllers/UsersController.cs | 1 + UI/Web/src/app/_services/account.service.ts | 11 +++++ .../actionable-modal.component.html | 2 +- .../actionable-modal.component.ts | 2 +- .../book-reader/book-reader.component.html | 15 +++--- .../book-reader/book-reader.component.scss | 6 +-- .../book-reader/book-reader.component.ts | 30 +++++++----- .../table-of-contents.component.html | 4 +- .../table-of-contents.component.scss | 3 +- .../table-of-contents.component.ts | 29 ++++++++++- .../cards/card-item/card-item.component.html | 2 +- .../cards/card-item/card-item.component.ts | 6 ++- .../all-collections.component.html | 2 +- .../all-collections.component.ts | 14 +++++- .../collection-detail.component.html | 2 +- .../collection-detail.component.ts | 14 +++++- .../manga-reader/manga-reader.component.ts | 26 ++++++---- .../grouped-typeahead.component.html | 2 +- .../reading-list-detail.component.html | 2 +- .../reading-list-detail.component.ts | 15 +++++- .../reading-lists.component.html | 2 +- .../reading-lists/reading-lists.component.ts | 20 ++++++-- .../series-detail/series-detail.component.ts | 16 +++++-- .../confirm-dialog/_models/confirm-config.ts | 4 +- .../confirm-dialog.component.html | 14 +++++- .../confirm-dialog.component.ts | 17 +++++-- UI/Web/src/app/shared/confirm.service.ts | 48 ++++++++++++++++--- .../change-password.component.html | 6 ++- .../change-password.component.ts | 3 +- .../manage-user-preferences.component.ts | 7 ++- UI/Web/src/assets/langs/en.json | 16 +++++-- UI/Web/src/styles.scss | 1 + UI/Web/src/theme/components/_buttons.scss | 6 +-- UI/Web/src/theme/components/_tooltip.scss | 4 ++ UI/Web/src/theme/themes/dark.scss | 1 - 36 files changed, 268 insertions(+), 89 deletions(-) create mode 100644 UI/Web/src/theme/components/_tooltip.scss diff --git a/API/Controllers/SeriesController.cs b/API/Controllers/SeriesController.cs index 7cd897c32..84eacc838 100644 --- a/API/Controllers/SeriesController.cs +++ b/API/Controllers/SeriesController.cs @@ -310,7 +310,7 @@ public class SeriesController : BaseApiController /// /// /// - /// + /// This is not in use /// [HttpPost("all-v2")] public async Task>> GetAllSeriesV2(FilterV2Dto filterDto, [FromQuery] UserParams userParams, @@ -321,8 +321,6 @@ public class SeriesController : BaseApiController await _unitOfWork.SeriesRepository.GetSeriesDtoForLibraryIdV2Async(userId, userParams, filterDto, context); // Apply progress/rating information (I can't work out how to do this in initial query) - if (series == null) return BadRequest(await _localizationService.Translate(User.GetUserId(), "no-series")); - await _unitOfWork.SeriesRepository.AddSeriesModifiers(userId, series); Response.AddPaginationHeader(series.CurrentPage, series.PageSize, series.TotalCount, series.TotalPages); diff --git a/API/Controllers/UsersController.cs b/API/Controllers/UsersController.cs index 944ea987b..e5cfb626a 100644 --- a/API/Controllers/UsersController.cs +++ b/API/Controllers/UsersController.cs @@ -128,6 +128,7 @@ public class UsersController : BaseApiController existingPreferences.PromptForDownloadSize = preferencesDto.PromptForDownloadSize; existingPreferences.NoTransitions = preferencesDto.NoTransitions; existingPreferences.SwipeToPaginate = preferencesDto.SwipeToPaginate; + existingPreferences.AllowAutomaticWebtoonReaderDetection = preferencesDto.AllowAutomaticWebtoonReaderDetection; existingPreferences.CollapseSeriesRelationships = preferencesDto.CollapseSeriesRelationships; existingPreferences.ShareReviews = preferencesDto.ShareReviews; diff --git a/UI/Web/src/app/_services/account.service.ts b/UI/Web/src/app/_services/account.service.ts index 6b8cdc243..8e8576069 100644 --- a/UI/Web/src/app/_services/account.service.ts +++ b/UI/Web/src/app/_services/account.service.ts @@ -102,11 +102,22 @@ export class AccountService { return true; } + /** + * If the user has any role in the restricted roles array or is an Admin + * @param user + * @param roles + * @param restrictedRoles + */ hasAnyRole(user: User, roles: Array, restrictedRoles: Array = []) { if (!user || !user.roles) { return false; } + // If the user is an admin, they have the role + if (this.hasAdminRole(user)) { + return true; + } + // If restricted roles are provided and the user has any of them, deny access if (restrictedRoles.length > 0 && restrictedRoles.some(role => user.roles.includes(role))) { return false; diff --git a/UI/Web/src/app/_single-module/actionable-modal/actionable-modal.component.html b/UI/Web/src/app/_single-module/actionable-modal/actionable-modal.component.html index caf8bf683..7573c554a 100644 --- a/UI/Web/src/app/_single-module/actionable-modal/actionable-modal.component.html +++ b/UI/Web/src/app/_single-module/actionable-modal/actionable-modal.component.html @@ -15,7 +15,7 @@
@for (action of currentItems; track action.title) { - @if (willRenderAction(action)) { + @if (willRenderAction(action, user!)) {
- + + @if (layoutMode !== BookPageLayoutMode.Default) { + @let vp = getVirtualPage();
{{t('page-label')}}
-
-
{{vp[0]}}
- +
-
{{vp[1]}}
+
{{vp[1]}}
-
- + }
{{t('pagination-header')}}
diff --git a/UI/Web/src/app/book-reader/_components/book-reader/book-reader.component.scss b/UI/Web/src/app/book-reader/_components/book-reader/book-reader.component.scss index dcfa9ddcd..8f45302c3 100644 --- a/UI/Web/src/app/book-reader/_components/book-reader/book-reader.component.scss +++ b/UI/Web/src/app/book-reader/_components/book-reader/book-reader.component.scss @@ -277,9 +277,9 @@ $action-bar-height: 38px; } .virt-pagination-cont { - padding-bottom: 5px; - margin-bottom: 5px; - box-shadow: var(--drawer-pagination-horizontal-rule); + padding-bottom: 5px; + margin-bottom: 5px; + box-shadow: var(--drawer-pagination-horizontal-rule); } .bottom-bar { diff --git a/UI/Web/src/app/book-reader/_components/book-reader/book-reader.component.ts b/UI/Web/src/app/book-reader/_components/book-reader/book-reader.component.ts index 6abd619f8..002d769e8 100644 --- a/UI/Web/src/app/book-reader/_components/book-reader/book-reader.component.ts +++ b/UI/Web/src/app/book-reader/_components/book-reader/book-reader.component.ts @@ -63,6 +63,7 @@ import { PersonalToCEvent } from "../personal-table-of-contents/personal-table-of-contents.component"; import {translate, TranslocoDirective} from "@jsverse/transloco"; +import {ConfirmService} from "../../../shared/confirm.service"; enum TabID { @@ -133,6 +134,7 @@ export class BookReaderComponent implements OnInit, AfterViewInit, OnDestroy { private readonly utilityService = inject(UtilityService); private readonly libraryService = inject(LibraryService); private readonly themeService = inject(ThemeService); + private readonly confirmService = inject(ConfirmService); private readonly cdRef = inject(ChangeDetectorRef); protected readonly BookPageLayoutMode = BookPageLayoutMode; @@ -730,7 +732,7 @@ export class BookReaderComponent implements OnInit, AfterViewInit, OnDestroy { } @HostListener('window:keydown', ['$event']) - handleKeyPress(event: KeyboardEvent) { + async handleKeyPress(event: KeyboardEvent) { const activeElement = document.activeElement as HTMLElement; const isInputFocused = activeElement.tagName === 'INPUT' || activeElement.tagName === 'TEXTAREA'; if (isInputFocused) return; @@ -748,7 +750,7 @@ export class BookReaderComponent implements OnInit, AfterViewInit, OnDestroy { event.stopPropagation(); event.preventDefault(); } else if (event.key === KEY_CODES.G) { - this.goToPage(); + await this.goToPage(); } else if (event.key === KEY_CODES.F) { this.toggleFullscreen() } @@ -905,33 +907,35 @@ export class BookReaderComponent implements OnInit, AfterViewInit, OnDestroy { } - promptForPage() { - const question = translate('book-reader.go-to-page-prompt', {totalPages: this.maxPages - 1}); - const goToPageNum = window.prompt(question, ''); + async promptForPage() { + const promptConfig = {...this.confirmService.defaultPrompt}; + // Pages are called sections in the UI, manga reader uses the go-to-page string so we use a different one here + promptConfig.header = translate('book-reader.go-to-section'); + promptConfig.content = translate('book-reader.go-to-section-prompt', {totalSections: this.maxPages - 1}); + + const goToPageNum = await this.confirmService.prompt(undefined, promptConfig); + if (goToPageNum === null || goToPageNum.trim().length === 0) { return null; } return goToPageNum; } - goToPage(pageNum?: number) { + async goToPage(pageNum?: number) { let page = pageNum; if (pageNum === null || pageNum === undefined) { - const goToPageNum = this.promptForPage(); + const goToPageNum = await this.promptForPage(); if (goToPageNum === null) { return; } + page = parseInt(goToPageNum.trim(), 10); } if (page === undefined || this.pageNum === page) { return; } - if (page > this.maxPages) { - page = this.maxPages; + if (page > this.maxPages - 1) { + page = this.maxPages - 1; } else if (page < 0) { page = 0; } - if (!(page === 0 || page === this.maxPages - 1)) { - page -= 1; - } - this.pageNum = page; this.loadPage(); } diff --git a/UI/Web/src/app/book-reader/_components/table-of-contents/table-of-contents.component.html b/UI/Web/src/app/book-reader/_components/table-of-contents/table-of-contents.component.html index 585f3af42..ead8b3540 100644 --- a/UI/Web/src/app/book-reader/_components/table-of-contents/table-of-contents.component.html +++ b/UI/Web/src/app/book-reader/_components/table-of-contents/table-of-contents.component.html @@ -17,12 +17,12 @@ } @else { @for (chapterGroup of chapters; track chapterGroup.title + chapterGroup.children.length) {
    -
  • +
  • {{chapterGroup.title}}
  • @for(chapter of chapterGroup.children; track chapter.title + chapter.part) { diff --git a/UI/Web/src/app/book-reader/_components/table-of-contents/table-of-contents.component.scss b/UI/Web/src/app/book-reader/_components/table-of-contents/table-of-contents.component.scss index e556f0e78..ca8e747f4 100644 --- a/UI/Web/src/app/book-reader/_components/table-of-contents/table-of-contents.component.scss +++ b/UI/Web/src/app/book-reader/_components/table-of-contents/table-of-contents.component.scss @@ -3,9 +3,10 @@ &.active { font-weight: bold; + color: var(--primary-color); } } .chapter-title { padding-inline-start: 1rem; -} \ No newline at end of file +} diff --git a/UI/Web/src/app/book-reader/_components/table-of-contents/table-of-contents.component.ts b/UI/Web/src/app/book-reader/_components/table-of-contents/table-of-contents.component.ts index cb6417874..ce3a180ed 100644 --- a/UI/Web/src/app/book-reader/_components/table-of-contents/table-of-contents.component.ts +++ b/UI/Web/src/app/book-reader/_components/table-of-contents/table-of-contents.component.ts @@ -31,9 +31,8 @@ export class TableOfContentsComponent implements OnChanges { @Output() loadChapter: EventEmitter<{pageNum: number, part: string}> = new EventEmitter(); ngOnChanges(changes: SimpleChanges) { - console.log('Current Page: ', this.pageNum, this.currentPageAnchor); + //console.log('Current Page: ', this.pageNum, this.currentPageAnchor); this.cdRef.markForCheck(); - } cleanIdSelector(id: string) { @@ -47,4 +46,30 @@ export class TableOfContentsComponent implements OnChanges { loadChapterPage(pageNum: number, part: string) { this.loadChapter.emit({pageNum, part}); } + + isChapterSelected(chapterGroup: BookChapterItem) { + if (chapterGroup.page === this.pageNum) { + return true; + } + + const idx = this.chapters.indexOf(chapterGroup); + if (idx < 0) { + return false; // should never happen + } + + const nextIdx = idx + 1; + // Last chapter + if (nextIdx >= this.chapters.length) { + return chapterGroup.page < this.pageNum; + } + + // Passed chapter, and next chapter has not been reached + const next = this.chapters[nextIdx]; + return chapterGroup.page < this.pageNum && next.page > this.pageNum; + } + + isAnchorSelected(chapter: BookChapterItem) { + return this.cleanIdSelector(chapter.part) === this.currentPageAnchor + } + } diff --git a/UI/Web/src/app/cards/card-item/card-item.component.html b/UI/Web/src/app/cards/card-item/card-item.component.html index dc89c563c..c0a4c0890 100644 --- a/UI/Web/src/app/cards/card-item/card-item.component.html +++ b/UI/Web/src/app/cards/card-item/card-item.component.html @@ -94,7 +94,7 @@ @if (actions && actions.length > 0) { - + }
diff --git a/UI/Web/src/app/cards/card-item/card-item.component.ts b/UI/Web/src/app/cards/card-item/card-item.component.ts index 6bdbcaf18..37de9ca13 100644 --- a/UI/Web/src/app/cards/card-item/card-item.component.ts +++ b/UI/Web/src/app/cards/card-item/card-item.component.ts @@ -26,7 +26,7 @@ import {Series} from 'src/app/_models/series'; import {User} from 'src/app/_models/user'; import {Volume} from 'src/app/_models/volume'; import {AccountService} from 'src/app/_services/account.service'; -import {Action, ActionFactoryService, ActionItem} from 'src/app/_services/action-factory.service'; +import {Action, ActionableEntity, ActionFactoryService, ActionItem} from 'src/app/_services/action-factory.service'; import {ImageService} from 'src/app/_services/image.service'; import {LibraryService} from 'src/app/_services/library.service'; import {EVENTS, MessageHubService} from 'src/app/_services/message-hub.service'; @@ -118,6 +118,10 @@ export class CardItemComponent implements OnInit { * This is the entity we are representing. It will be returned if an action is executed. */ @Input({required: true}) entity!: CardEntity; + /** + * An optional entity to be used in the action callback + */ + @Input() actionEntity: ActionableEntity | null = null; /** * If the entity is selected or not. */ diff --git a/UI/Web/src/app/collections/_components/all-collections/all-collections.component.html b/UI/Web/src/app/collections/_components/all-collections/all-collections.component.html index 09923b239..599d1c156 100644 --- a/UI/Web/src/app/collections/_components/all-collections/all-collections.component.html +++ b/UI/Web/src/app/collections/_components/all-collections/all-collections.component.html @@ -14,7 +14,7 @@ [trackByIdentity]="trackByIdentity" > - { if (!user) return; - this.collectionTagActions = this.actionFactoryService.getCollectionTagActions(this.handleCollectionActionCallback.bind(this)) + this.collectionTagActions = this.actionFactoryService.getCollectionTagActions( + this.handleCollectionActionCallback.bind(this), this.shouldRenderCollection.bind(this)) .filter(action => this.collectionService.actionListFilter(action, user)); this.cdRef.markForCheck(); }); } + shouldRenderCollection(action: ActionItem, entity: UserCollection, user: User) { + switch (action.action) { + case Action.Promote: + return !entity.promoted; + case Action.UnPromote: + return entity.promoted; + default: + return true; + } + } + loadCollection(item: UserCollection) { this.router.navigate(['collections', item.id]); } diff --git a/UI/Web/src/app/collections/_components/collection-detail/collection-detail.component.html b/UI/Web/src/app/collections/_components/collection-detail/collection-detail.component.html index 927316f99..1fad4b6e8 100644 --- a/UI/Web/src/app/collections/_components/collection-detail/collection-detail.component.html +++ b/UI/Web/src/app/collections/_components/collection-detail/collection-detail.component.html @@ -11,7 +11,7 @@ } -
{{t('item-count', {num: series.length})}}
+
{{t('item-count', {num: series.length})}}
} diff --git a/UI/Web/src/app/collections/_components/collection-detail/collection-detail.component.ts b/UI/Web/src/app/collections/_components/collection-detail/collection-detail.component.ts index ceb539718..d99626b64 100644 --- a/UI/Web/src/app/collections/_components/collection-detail/collection-detail.component.ts +++ b/UI/Web/src/app/collections/_components/collection-detail/collection-detail.component.ts @@ -207,7 +207,8 @@ export class CollectionDetailComponent implements OnInit, AfterContentChecked { this.accountService.currentUser$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(user => { if (!user) return; this.user = user; - this.collectionTagActions = this.actionFactoryService.getCollectionTagActions(this.handleCollectionActionCallback.bind(this)) + this.collectionTagActions = this.actionFactoryService.getCollectionTagActions( + this.handleCollectionActionCallback.bind(this), this.shouldRenderCollection.bind(this)) .filter(action => this.collectionService.actionListFilter(action, user)); this.cdRef.markForCheck(); }); @@ -225,6 +226,17 @@ export class CollectionDetailComponent implements OnInit, AfterContentChecked { }); } + shouldRenderCollection(action: ActionItem, entity: UserCollection, user: User) { + switch (action.action) { + case Action.Promote: + return !entity.promoted; + case Action.UnPromote: + return entity.promoted; + default: + return true; + } + } + ngAfterContentChecked(): void { this.scrollService.setScrollContainer(this.scrollingBlock); } diff --git a/UI/Web/src/app/manga-reader/_components/manga-reader/manga-reader.component.ts b/UI/Web/src/app/manga-reader/_components/manga-reader/manga-reader.component.ts index 595ae6079..a7bbe2d90 100644 --- a/UI/Web/src/app/manga-reader/_components/manga-reader/manga-reader.component.ts +++ b/UI/Web/src/app/manga-reader/_components/manga-reader/manga-reader.component.ts @@ -70,6 +70,7 @@ import {LoadingComponent} from '../../../shared/loading/loading.component'; import {translate, TranslocoDirective} from "@jsverse/transloco"; import {shareReplay} from "rxjs/operators"; import {DblClickDirective} from "../../../_directives/dbl-click.directive"; +import {ConfirmService} from "../../../shared/confirm.service"; const PREFETCH_PAGES = 10; @@ -150,9 +151,11 @@ export class MangaReaderComponent implements OnInit, AfterViewInit, OnDestroy { private readonly modalService = inject(NgbModal); private readonly cdRef = inject(ChangeDetectorRef); private readonly toastr = inject(ToastrService); - public readonly readerService = inject(ReaderService); - public readonly utilityService = inject(UtilityService); - public readonly mangaReaderService = inject(MangaReaderService); + private readonly confirmService = inject(ConfirmService); + protected readonly readerService = inject(ReaderService); + protected readonly utilityService = inject(UtilityService); + protected readonly mangaReaderService = inject(MangaReaderService); + protected readonly KeyDirection = KeyDirection; protected readonly ReaderMode = ReaderMode; @@ -647,7 +650,7 @@ export class MangaReaderComponent implements OnInit, AfterViewInit, OnDestroy { } @HostListener('window:keyup', ['$event']) - handleKeyPress(event: KeyboardEvent) { + async handleKeyPress(event: KeyboardEvent) { switch (this.readerMode) { case ReaderMode.LeftRight: if (event.key === KEY_CODES.RIGHT_ARROW) { @@ -682,7 +685,7 @@ export class MangaReaderComponent implements OnInit, AfterViewInit, OnDestroy { } else if (event.key === KEY_CODES.SPACE) { this.toggleMenu(); } else if (event.key === KEY_CODES.G) { - const goToPageNum = this.promptForPage(); + const goToPageNum = await this.promptForPage(); if (goToPageNum === null) { return; } this.goToPage(parseInt(goToPageNum.trim(), 10)); } else if (event.key === KEY_CODES.B) { @@ -1593,9 +1596,16 @@ export class MangaReaderComponent implements OnInit, AfterViewInit, OnDestroy { } // This is menu only code - promptForPage() { - const question = translate('book-reader.go-to-page-prompt', {totalPages: this.maxPages}); - const goToPageNum = window.prompt(question, ''); + async promptForPage() { + // const question = translate('book-reader.go-to-page-prompt', {totalPages: this.maxPages}); + // const goToPageNum = window.prompt(question, ''); + + const promptConfig = {...this.confirmService.defaultPrompt}; + promptConfig.header = translate('book-reader.go-to-page'); + promptConfig.content = translate('book-reader.go-to-page-prompt', {totalPages: this.maxPages}); + + const goToPageNum = await this.confirmService.prompt(undefined, promptConfig); + if (goToPageNum === null || goToPageNum.trim().length === 0) { return null; } return goToPageNum; } diff --git a/UI/Web/src/app/nav/_components/grouped-typeahead/grouped-typeahead.component.html b/UI/Web/src/app/nav/_components/grouped-typeahead/grouped-typeahead.component.html index 6f36e9b5a..4a51435fc 100644 --- a/UI/Web/src/app/nav/_components/grouped-typeahead/grouped-typeahead.component.html +++ b/UI/Web/src/app/nav/_components/grouped-typeahead/grouped-typeahead.component.html @@ -16,7 +16,7 @@ } } @else { -
+
Ctrl+K
} diff --git a/UI/Web/src/app/reading-list/_components/reading-list-detail/reading-list-detail.component.html b/UI/Web/src/app/reading-list/_components/reading-list-detail/reading-list-detail.component.html index 9f45cd55a..1d1ce4c7e 100644 --- a/UI/Web/src/app/reading-list/_components/reading-list-detail/reading-list-detail.component.html +++ b/UI/Web/src/app/reading-list/_components/reading-list-detail/reading-list-detail.component.html @@ -83,7 +83,7 @@ } -
+
diff --git a/UI/Web/src/app/reading-list/_components/reading-list-detail/reading-list-detail.component.ts b/UI/Web/src/app/reading-list/_components/reading-list-detail/reading-list-detail.component.ts index 511811fe8..6e8e3b22a 100644 --- a/UI/Web/src/app/reading-list/_components/reading-list-detail/reading-list-detail.component.ts +++ b/UI/Web/src/app/reading-list/_components/reading-list-detail/reading-list-detail.component.ts @@ -58,6 +58,7 @@ import {DefaultValuePipe} from "../../../_pipes/default-value.pipe"; import {takeUntilDestroyed} from "@angular/core/rxjs-interop"; import {DetailsTabComponent} from "../../../_single-module/details-tab/details-tab.component"; import {IHasCast} from "../../../_models/common/i-has-cast"; +import {User} from "../../../_models/user"; enum TabID { Storyline = 'storyline-tab', @@ -251,7 +252,8 @@ export class ReadingListDetailComponent implements OnInit { if (user) { this.isAdmin = this.accountService.hasAdminRole(user); - this.actions = this.actionFactoryService.getReadingListActions(this.handleReadingListActionCallback.bind(this)) + this.actions = this.actionFactoryService + .getReadingListActions(this.handleReadingListActionCallback.bind(this), this.shouldRenderReadingListAction.bind(this)) .filter(action => this.readingListService.actionListFilter(action, readingList, this.isAdmin)); this.isOwnedReadingList = this.actions.filter(a => a.action === Action.Edit).length > 0; this.cdRef.markForCheck(); @@ -307,6 +309,17 @@ export class ReadingListDetailComponent implements OnInit { } } + shouldRenderReadingListAction(action: ActionItem, entity: ReadingList, user: User) { + switch (action.action) { + case Action.Promote: + return !entity.promoted; + case Action.UnPromote: + return entity.promoted; + default: + return true; + } + } + editReadingList(readingList: ReadingList) { this.actionService.editReadingList(readingList, (readingList: ReadingList) => { // Reload information around list diff --git a/UI/Web/src/app/reading-list/_components/reading-lists/reading-lists.component.html b/UI/Web/src/app/reading-list/_components/reading-lists/reading-lists.component.html index dd7dcab9a..a66ec008f 100644 --- a/UI/Web/src/app/reading-list/_components/reading-lists/reading-lists.component.html +++ b/UI/Web/src/app/reading-list/_components/reading-lists/reading-lists.component.html @@ -21,7 +21,7 @@ [trackByIdentity]="trackByIdentity" > - this.readingListService.actionListFilter(action, readingList, this.isAdmin || this.hasPromote)); - - return this.actionFactoryService.getReadingListActions(this.handleReadingListActionCallback.bind(this)) + return this.actionFactoryService + .getReadingListActions(this.handleReadingListActionCallback.bind(this), this.shouldRenderReadingListAction.bind(this)) .filter(action => this.readingListService.actionListFilter(action, readingList, this.isAdmin || this.hasPromote)); } @@ -172,4 +171,15 @@ export class ReadingListsComponent implements OnInit { break; } } + + shouldRenderReadingListAction(action: ActionItem, entity: ReadingList, user: User) { + switch (action.action) { + case Action.Promote: + return !entity.promoted; + case Action.UnPromote: + return entity.promoted; + default: + return true; + } + } } diff --git a/UI/Web/src/app/series-detail/_components/series-detail/series-detail.component.ts b/UI/Web/src/app/series-detail/_components/series-detail/series-detail.component.ts index 05580bed0..6353664f3 100644 --- a/UI/Web/src/app/series-detail/_components/series-detail/series-detail.component.ts +++ b/UI/Web/src/app/series-detail/_components/series-detail/series-detail.component.ts @@ -551,7 +551,7 @@ export class SeriesDetailComponent implements OnInit, AfterContentChecked { this.location.replaceState(newUrl) } - handleSeriesActionCallback(action: ActionItem, series: Series) { + async handleSeriesActionCallback(action: ActionItem, series: Series) { this.cdRef.markForCheck(); switch(action.action) { case(Action.MarkAsRead): @@ -565,16 +565,16 @@ export class SeriesDetailComponent implements OnInit, AfterContentChecked { }); break; case(Action.Scan): - this.actionService.scanSeries(series); + await this.actionService.scanSeries(series); break; case(Action.RefreshMetadata): - this.actionService.refreshSeriesMetadata(series, undefined, true, false); + await this.actionService.refreshSeriesMetadata(series, undefined, true, false); break; case(Action.GenerateColorScape): - this.actionService.refreshSeriesMetadata(series, undefined, false, true); + await this.actionService.refreshSeriesMetadata(series, undefined, false, true); break; case(Action.Delete): - this.deleteSeries(series); + await this.deleteSeries(series); break; case(Action.AddToReadingList): this.actionService.addSeriesToReadingList(series); @@ -645,6 +645,9 @@ export class SeriesDetailComponent implements OnInit, AfterContentChecked { this.actionService.sendToDevice(volume.chapters.map(c => c.id), device); break; } + case (Action.Download): + this.downloadService.download('volume', volume); + break; default: break; } @@ -679,6 +682,9 @@ export class SeriesDetailComponent implements OnInit, AfterContentChecked { this.cdRef.markForCheck(); }); break; + case (Action.Download): + this.downloadService.download('chapter', chapter); + break; default: break; } diff --git a/UI/Web/src/app/shared/confirm-dialog/_models/confirm-config.ts b/UI/Web/src/app/shared/confirm-dialog/_models/confirm-config.ts index 481c9b48c..7cfd257e2 100644 --- a/UI/Web/src/app/shared/confirm-dialog/_models/confirm-config.ts +++ b/UI/Web/src/app/shared/confirm-dialog/_models/confirm-config.ts @@ -1,7 +1,7 @@ -import { ConfirmButton } from './confirm-button'; +import {ConfirmButton} from './confirm-button'; export class ConfirmConfig { - _type: 'confirm' | 'alert' | 'info' = 'confirm'; + _type: 'confirm' | 'alert' | 'info' | 'prompt' = 'confirm'; header: string = 'Confirm'; content: string = ''; buttons: Array = []; diff --git a/UI/Web/src/app/shared/confirm-dialog/confirm-dialog.component.html b/UI/Web/src/app/shared/confirm-dialog/confirm-dialog.component.html index 21b741cd3..213c80ceb 100644 --- a/UI/Web/src/app/shared/confirm-dialog/confirm-dialog.component.html +++ b/UI/Web/src/app/shared/confirm-dialog/confirm-dialog.component.html @@ -5,8 +5,18 @@ }
- + + @if (config._type === 'prompt') { + + } @else { + + } +