From 2fd50585ac273264638d571a61908da011991854 Mon Sep 17 00:00:00 2001 From: Akhil Raj Date: Sat, 6 Jul 2024 10:07:39 +0200 Subject: [PATCH 001/101] Added translation using Weblate (Malayalam) --- front/translations/ml.json | 284 +++++++++++++++++++++++++++++++++++++ 1 file changed, 284 insertions(+) create mode 100644 front/translations/ml.json diff --git a/front/translations/ml.json b/front/translations/ml.json new file mode 100644 index 00000000..2672550c --- /dev/null +++ b/front/translations/ml.json @@ -0,0 +1,284 @@ +{ + "home": { + "recommended": "", + "news": "", + "watchlist": "", + "info": "", + "none": "", + "watchlistLogin": "", + "refreshMetadata": "", + "episodeMore": { + "goToShow": "", + "download": "", + "mediainfo": "" + } + }, + "show": { + "play": "", + "trailer": "", + "studio": "", + "genre": "", + "genre-none": "", + "staff": "", + "staff-none": "", + "noOverview": "", + "episode-none": "", + "episodeNoMetadata": "", + "tags": "", + "links": "", + "jumpToSeason": "", + "partOf": "", + "watchlistAdd": "", + "watchlistEdit": "", + "watchlistRemove": "", + "watchlistLogin": "", + "watchlistMark": { + "completed": "", + "planned": "", + "watching": "", + "droped": "", + "null": "" + }, + "nextUp": "", + "season": "" + }, + "browse": { + "mediatypekey": { + "all": "", + "movie": "", + "show": "", + "collection": "" + }, + "mediatype-tt": "", + "mediatypelabel": "", + "sortby": "", + "sortby-tt": "", + "sortkey": { + "relevance": "", + "name": "", + "airDate": "", + "startAir": "", + "endAir": "", + "addedDate": "", + "rating": "" + }, + "sortord": { + "asc": "", + "desc": "" + }, + "switchToGrid": "", + "switchToList": "" + }, + "genres": { + "Action": "", + "Adventure": "", + "Animation": "", + "Comedy": "", + "Crime": "", + "Documentary": "", + "Drama": "", + "Family": "", + "Fantasy": "", + "History": "", + "Horror": "", + "Music": "", + "Mystery": "", + "Romance": "", + "ScienceFiction": "", + "Thriller": "", + "War": "", + "Western": "", + "Kids": "", + "News": "", + "Reality": "", + "Soap": "", + "Talk": "", + "Politics": "" + }, + "misc": { + "settings": "", + "prev-page": "", + "next-page": "", + "delete": "", + "cancel": "", + "more": "", + "expand": "", + "collapse": "", + "edit": "", + "or": "", + "loading": "" + }, + "navbar": { + "home": "", + "browse": "", + "download": "", + "search": "", + "login": "", + "admin": "" + }, + "settings": { + "general": { + "label": "", + "theme": { + "label": "", + "description": "", + "auto": "", + "light": "", + "dark": "" + }, + "language": { + "label": "", + "description": "", + "system": "" + } + }, + "playback": { + "label": "", + "playmode": { + "label": "", + "description": "" + }, + "audioLanguage": { + "label": "", + "description": "" + }, + "subtitleLanguage": { + "label": "", + "description": "", + "none": "" + } + }, + "account": { + "label": "", + "username": { + "label": "" + }, + "avatar": { + "label": "", + "description": "" + }, + "email": { + "label": "" + }, + "password": { + "label": "", + "description": "", + "oldPassword": "", + "newPassword": "" + } + }, + "oidc": { + "label": "", + "connected": "", + "not-connected": "", + "open-profile": "", + "link": "", + "delete": "" + }, + "about": { + "label": "", + "android-app": { + "label": "", + "description": "" + }, + "git": { + "label": "", + "description": "" + } + } + }, + "player": { + "back": "", + "previous": "", + "next": "", + "play": "", + "pause": "", + "mute": "", + "volume": "", + "quality": "", + "audios": "", + "subtitles": "", + "subtitle-none": "", + "fullscreen": "", + "direct": "", + "transmux": "", + "auto": "", + "notInPristine": "", + "unsupportedError": "" + }, + "search": { + "empty": "" + }, + "login": { + "login": "", + "register": "", + "guest": "", + "guest-forbidden": "", + "via": "", + "add-account": "", + "logout": "", + "server": "", + "email": "", + "username": "", + "password": "", + "confirm": "", + "or-register": "", + "or-login": "", + "password-no-match": "", + "delete": "", + "delete-confirmation": "" + }, + "downloads": { + "empty": "", + "error": "", + "delete": "", + "deleteMessage": "", + "pause": "", + "resume": "", + "retry": "" + }, + "errors": { + "connection": "", + "connection-tips": "", + "unknown": "", + "try-again": "", + "re-login": "", + "offline": "", + "unauthorized": "", + "needVerification": "", + "needAccount": "", + "setup": { + "MissingAdminAccount": "", + "NoVideoFound": "" + } + }, + "mediainfo": { + "file": "", + "container": "", + "video": "", + "audio": "", + "subtitles": "", + "forced": "", + "default": "", + "duration": "", + "size": "", + "novideo": "", + "nocontainer": "" + }, + "admin": { + "users": { + "label": "", + "adminUser": "", + "regularUser": "", + "set-permissions": "", + "delete": "", + "unverifed": "", + "verify": "" + }, + "scanner": { + "label": "", + "scan": "", + "empty": "" + } + } +} From c8fa35b0c47afe076105afff144d8dc6b2f461bb Mon Sep 17 00:00:00 2001 From: Krzysztof Date: Sat, 6 Jul 2024 09:51:04 +0000 Subject: [PATCH 002/101] Translated using Weblate (Polish) Currently translated at 99.0% (204 of 206 strings) Translation: Kyoo/Kyoo Translate-URL: https://hosted.weblate.org/projects/kyoo/kyoo/pl/ --- front/translations/pl.json | 65 +++++++++++++++++++++++++++++++++++--- 1 file changed, 61 insertions(+), 4 deletions(-) diff --git a/front/translations/pl.json b/front/translations/pl.json index ead7a39e..7efa8af0 100644 --- a/front/translations/pl.json +++ b/front/translations/pl.json @@ -147,12 +147,24 @@ "delete": "Usuń konto", "login": "Zaloguj się", "or-register": "Nie masz konta? <1>Register.", - "or-login": "Posiadasz konto? <1>Log in." + "or-login": "Posiadasz konto? <1>Log in.", + "password-no-match": "Hasła nie są takie same.", + "delete-confirmation": "Ta akcja nie może zostać cofnięta. Napewno chcesz to zrobić?" }, "errors": { "unknown": "Nieznany błąd", "try-again": "Spróbuj ponownie", - "re-login": "Zaloguj się ponownie" + "re-login": "Zaloguj się ponownie", + "unauthorized": "Brakuje ci uprawnień {{permission}} aby otworzyć tę stronę.", + "setup": { + "MissingAdminAccount": "Konto administratora nie zostało jeszcze stworzone. Zarejestruj się aby je stworzyć.", + "NoVideoFound": "Żaden film nie został jeszcze znaleziony. Dodaj filmy lub seriale do twojego folderu biblioteki aby je tu wyświetlić!" + }, + "offline": "Brak połączenia z internetem. Spróbuj ponownie później.", + "connection": "Nie udało się połączyć z serwerami kyoo", + "connection-tips": "Wskazówki dotyczące rozwiązywania problemów:\n- Czy masz połączenie z Internetem?\n- Czy serwer kyoo jest online?\n- Czy twoje konto zostało zablokowane?", + "needVerification": "Twoje konto musi zostać zweryfikowane przez administratora twojego serweru, zanim będziesz mógł go używać.", + "needAccount": "Aby odwiedzić tę stronę musisz zalogować się lub stworzyć konto." }, "browse": { "sortkey": { @@ -171,7 +183,15 @@ "switchToGrid": "Widok siatki", "switchToList": "Widok listy", "sortby-tt": "Sortuj", - "sortby": "Sortuj według {{key}}" + "sortby": "Sortuj według {{key}}", + "mediatypekey": { + "all": "Wszystko", + "movie": "Filmy", + "show": "Seriale", + "collection": "Kolekcja" + }, + "mediatype-tt": "Typ", + "mediatypelabel": "Typ" }, "misc": { "more": "Więcej", @@ -220,6 +240,43 @@ "browse": "Przeglądaj", "search": "Wyszukaj", "login": "Zaloguj się", - "admin": "Panel Administratora" + "admin": "Panel Administratora", + "download": "Pobierz" + }, + "downloads": { + "delete": "Usuń", + "empty": "Nic jeszcze nie pobrano, zacznij przeglądać w celu znalezienia czegoś, co Ci się podoba", + "deleteMessage": "Chcesz usunąć ten element z lokalnej pamięci?", + "pause": "Zatrzymaj", + "resume": "Wznów", + "retry": "Ponów", + "error": "Błąd:{{error}}" + }, + "mediainfo": { + "audio": "Audio", + "subtitles": "Napisy", + "default": "Domyślne", + "duration": "Czas trwania", + "size": "Rozmiar", + "novideo": "Brak filmu", + "forced": "Wymuszony", + "video": "Wideo", + "file": "Plik" + }, + "admin": { + "users": { + "adminUser": "Administrator", + "regularUser": "Użytkownik", + "set-permissions": "Nadawanie uprawnień", + "delete": "Usuń użytkownika", + "unverifed": "Niezweryfikowany", + "verify": "Zweryfikuj użytkownika", + "label": "Użytkownicy" + }, + "scanner": { + "label": "Skaner", + "scan": "Wywołaj skanowanie biblioteki", + "empty": "Nie znaleziono błędów. Wszystkie elementy są zarejestrowane." + } } } From dfa9d9d233f2f3ff00d773d22085986ada5aa30e Mon Sep 17 00:00:00 2001 From: Akhil Raj Date: Sat, 6 Jul 2024 08:08:52 +0000 Subject: [PATCH 003/101] Translated using Weblate (Malayalam) Currently translated at 2.4% (5 of 206 strings) Translation: Kyoo/Kyoo Translate-URL: https://hosted.weblate.org/projects/kyoo/kyoo/ml/ --- front/translations/ml.json | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/front/translations/ml.json b/front/translations/ml.json index 2672550c..79e2cd2c 100644 --- a/front/translations/ml.json +++ b/front/translations/ml.json @@ -1,16 +1,16 @@ { "home": { - "recommended": "", - "news": "", - "watchlist": "", - "info": "", - "none": "", - "watchlistLogin": "", - "refreshMetadata": "", + "recommended": "ശുപാർശ ചെയ്ത", + "news": "വാർത്ത", + "watchlist": "കാണുന്നത് തുടരുക", + "info": "കൂടുതൽ കാണുക", + "none": "എപ്പിസോഡുകളൊന്നുമില്ല", + "watchlistLogin": "നിങ്ങൾ കണ്ടതിൻ്റെ ട്രാക്ക് സൂക്ഷിക്കുന്നതിനോ കാണാൻ പ്ലാൻ ചെയ്യുന്നതിനോ, നിങ്ങൾ ലോഗിൻ ചെയ്യേണ്ടതുണ്ട്.", + "refreshMetadata": "മെറ്റാഡാറ്റ പുതുക്കുക", "episodeMore": { "goToShow": "", - "download": "", - "mediainfo": "" + "download": "ഡൗൺലോഡ്", + "mediainfo": "ഫയൽ വിവരം കാണുക" } }, "show": { From 3a1cfcaea3396c5dff92d88ca682d51157c73316 Mon Sep 17 00:00:00 2001 From: Arlan Lloyd Date: Thu, 11 Jul 2024 20:20:37 +0000 Subject: [PATCH 004/101] update diagrams based upon helm updates --- DIAGRAMS.md | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/DIAGRAMS.md b/DIAGRAMS.md index 40f93ec6..c80d718f 100644 --- a/DIAGRAMS.md +++ b/DIAGRAMS.md @@ -99,9 +99,9 @@ C4Container System_Boundary(internal, "Kyoo") { Container(frontend, "front/") Container(backend, "back/") + ContainerQueue(emb, "emb", "", "EnterpriseMessageBus") Container(transcoder, "transcoder/") Container(scanner, "scanner/") - ContainerQueue(emb, "emb", "", "EnterpriseMessageBus") Container(autosync, "autosync/") } System_Boundary(external, "") { @@ -118,7 +118,6 @@ C4Container Rel(user, backend, "") Rel(frontend, backend, "") Rel(backend, emb, "") - Rel(backend, media, "") Rel(backend, transcoder, "") Rel_Back(autosync, emb, "") Rel(autosync, tracker, "") @@ -162,7 +161,7 @@ C4Component ### Back ```mermaid C4Component - UpdateLayoutConfig($c4ShapeInRow="4", $c4BoundaryInRow="3") + UpdateLayoutConfig($c4ShapeInRow="2", $c4BoundaryInRow="3") title Component Diagram for Back @@ -179,22 +178,21 @@ C4Component Component(backend_c2, "kyoo_back", "C#, .NET 8.0", "API Backend") } - Container_Boundary(media, "MediaLibrary") { - Component_Ext(media_c1, "MediaShare", "Volume", "Read Only") + Container_Boundary(emb, "emb") { + ComponentQueue(emb_e2, "events.resource", "RabbitMQ, Exchange", "unused") + ComponentQueue(emb_q2, "scanner.rescan", "RabbitMQ, Queue", "") + ComponentQueue(emb_e1, "events.watched", "RabbitMQ, Exchange", "") + ComponentQueue(emb_q1, "autosync", "RabbitMQ, Queue", "") } + Container_Boundary(transcoder, "transcoder") { Component(transcoder_c1, "kyoo_transcoder", "go, go", "Video Transcoder") } - Container_Boundary(emb, "emb") { - ComponentQueue(emb_e1, "events.watched", "RabbitMQ, Exchange", "") - ComponentQueue(emb_q2, "scanner.rescan", "RabbitMQ, Queue", "") - ComponentQueue(emb_q1, "autosync", "RabbitMQ, Queue", "") - ComponentQueue(emb_e2, "events.resource", "RabbitMQ, Exchange", "unused") - } + Container_Boundary(scanner, "scanner") { - Component(scanner_c1, "kyoo_scanner", "python, python3.12", "scanner") Component(scanner_c2, "kyoo_scanner", "python, python3.12", "matcher") + Component(scanner_c1, "kyoo_scanner", "python, python3.12", "scanner") } Container_Boundary(autosync, "autosync") { @@ -206,7 +204,6 @@ C4Component Rel(backend_c1, backend_db1, "") Rel(backend_c2, backend_db1, "") Rel(backend_c2, backend_db2, "") - Rel(backend_c2, media_c1, "") Rel(backend_c2, transcoder_c1, "") Rel(backend_c2, backend_c3, "") Rel(backend_c2, emb_q2, "produces") From 923b1b92ccc3d4da59736e847c5a5c71078feb19 Mon Sep 17 00:00:00 2001 From: Arlan Lloyd Date: Fri, 12 Jul 2024 01:49:47 +0000 Subject: [PATCH 005/101] update layout --- DIAGRAMS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DIAGRAMS.md b/DIAGRAMS.md index c80d718f..bd390c39 100644 --- a/DIAGRAMS.md +++ b/DIAGRAMS.md @@ -161,7 +161,7 @@ C4Component ### Back ```mermaid C4Component - UpdateLayoutConfig($c4ShapeInRow="2", $c4BoundaryInRow="3") + UpdateLayoutConfig($c4ShapeInRow="4", $c4BoundaryInRow="3") title Component Diagram for Back From 1f7050ea6e4fec0b613ff4e001c9c6f5b5507861 Mon Sep 17 00:00:00 2001 From: Arlan Lloyd Date: Fri, 12 Jul 2024 01:52:01 +0000 Subject: [PATCH 006/101] change layout --- DIAGRAMS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DIAGRAMS.md b/DIAGRAMS.md index bd390c39..c80d718f 100644 --- a/DIAGRAMS.md +++ b/DIAGRAMS.md @@ -161,7 +161,7 @@ C4Component ### Back ```mermaid C4Component - UpdateLayoutConfig($c4ShapeInRow="4", $c4BoundaryInRow="3") + UpdateLayoutConfig($c4ShapeInRow="2", $c4BoundaryInRow="3") title Component Diagram for Back From e58b3563784cecfdd97022433506cbc8d09fbe9f Mon Sep 17 00:00:00 2001 From: Arlan Lloyd Date: Fri, 12 Jul 2024 01:55:24 +0000 Subject: [PATCH 007/101] update formatting --- DIAGRAMS.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/DIAGRAMS.md b/DIAGRAMS.md index c80d718f..6ee24dfb 100644 --- a/DIAGRAMS.md +++ b/DIAGRAMS.md @@ -161,7 +161,7 @@ C4Component ### Back ```mermaid C4Component - UpdateLayoutConfig($c4ShapeInRow="2", $c4BoundaryInRow="3") + UpdateLayoutConfig($c4ShapeInRow="5", $c4BoundaryInRow="2") title Component Diagram for Back @@ -185,15 +185,17 @@ C4Component ComponentQueue(emb_q1, "autosync", "RabbitMQ, Queue", "") } + Container_Boundary(scanner, "scanner") { + Component(scanner_c2, "kyoo_scanner", "python, python3.12", "matcher") + Component(scanner_c1, "kyoo_scanner", "python, python3.12", "scanner") + } + Container_Boundary(transcoder, "transcoder") { Component(transcoder_c1, "kyoo_transcoder", "go, go", "Video Transcoder") } - Container_Boundary(scanner, "scanner") { - Component(scanner_c2, "kyoo_scanner", "python, python3.12", "matcher") - Component(scanner_c1, "kyoo_scanner", "python, python3.12", "scanner") - } + Container_Boundary(autosync, "autosync") { Component(autosync_c1, "kyoo_autosync", "python, python3.12", "") From dcb2b8b2ee9e4e7857785cf25eba1a77ffb66eb7 Mon Sep 17 00:00:00 2001 From: Arlan Lloyd Date: Fri, 12 Jul 2024 02:00:33 +0000 Subject: [PATCH 008/101] reorganize diagram --- DIAGRAMS.md | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/DIAGRAMS.md b/DIAGRAMS.md index 6ee24dfb..652a5409 100644 --- a/DIAGRAMS.md +++ b/DIAGRAMS.md @@ -171,18 +171,18 @@ C4Component Component(frontend_c1, "kyoo_front", "typescript, node.js", "Static Content") } Container_Boundary(backend, "back") { - Component(backend_c1, "kyoo_migrations", "C#, .NET 8.0", "Postgres Migration") - ComponentDb(backend_db1, "backend", "Postgres", "user data and session state") - Component(backend_c3, "BackendMetadata", "Volume", "Persistent. Distributed Metadata") ComponentDb(backend_db2, "search", "Meilisearch", "search resource") + Component(backend_c3, "BackendMetadata", "Volume", "Persistent. Distributed Metadata") + ComponentDb(backend_db1, "backend", "Postgres", "user data and session state") + Component(backend_c1, "kyoo_migrations", "C#, .NET 8.0", "Postgres Migration") Component(backend_c2, "kyoo_back", "C#, .NET 8.0", "API Backend") } Container_Boundary(emb, "emb") { - ComponentQueue(emb_e2, "events.resource", "RabbitMQ, Exchange", "unused") - ComponentQueue(emb_q2, "scanner.rescan", "RabbitMQ, Queue", "") ComponentQueue(emb_e1, "events.watched", "RabbitMQ, Exchange", "") ComponentQueue(emb_q1, "autosync", "RabbitMQ, Queue", "") + ComponentQueue(emb_q2, "scanner.rescan", "RabbitMQ, Queue", "") + ComponentQueue(emb_e2, "events.resource", "RabbitMQ, Exchange", "unused") } Container_Boundary(scanner, "scanner") { @@ -190,17 +190,13 @@ C4Component Component(scanner_c1, "kyoo_scanner", "python, python3.12", "scanner") } - Container_Boundary(transcoder, "transcoder") { - Component(transcoder_c1, "kyoo_transcoder", "go, go", "Video Transcoder") - } - - - - Container_Boundary(autosync, "autosync") { Component(autosync_c1, "kyoo_autosync", "python, python3.12", "") } + Container_Boundary(transcoder, "transcoder") { + Component(transcoder_c1, "kyoo_transcoder", "go, go", "Video Transcoder") + } Rel(user, backend_c2, "") Rel(backend_c1, backend_db1, "") From bfd9c79de885114aea8c3e374ea9aa6fe2c6c847 Mon Sep 17 00:00:00 2001 From: Arlan Lloyd Date: Fri, 12 Jul 2024 02:05:50 +0000 Subject: [PATCH 009/101] adjust diagrams + add note --- DIAGRAMS.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/DIAGRAMS.md b/DIAGRAMS.md index 652a5409..8b834aa3 100644 --- a/DIAGRAMS.md +++ b/DIAGRAMS.md @@ -1,4 +1,5 @@ # Diagrams +These diagrams are created with Mermaid and rendered locally. For the best experience, please use a browser. # Project Structure Kyoo is a monorepo that consists of several projects each in their own directory. Diagram below shows an outline of kyoo, projects, and artifacts. @@ -255,14 +256,14 @@ C4Component Component(scanner_c1, "kyoo_scanner", "python, python3.12", "scanner") } - Container_Boundary(emb, "emb") { - ComponentQueue(emb_q2, "scanner.rescan", "RabbitMQ, Queue", "") - } - Container_Boundary(backend, "back") { Component(backend_c2, "kyoo_back", "C#, .NET 8.0", "API Backend") } + Container_Boundary(emb, "emb") { + ComponentQueue(emb_q2, "scanner.rescan", "RabbitMQ, Queue", "") + } + Rel(scanner_c1, scanner_q1, "produces") Rel(scanner_c1, media_c1, "watches") Rel(scanner_c1, backend_c2, "Fetch existing scans") From 31ee4bfd557f8377df624ab23891fe601ede0475 Mon Sep 17 00:00:00 2001 From: Devin Buhl Date: Fri, 12 Jul 2024 08:29:49 -0400 Subject: [PATCH 010/101] chore(renovate): remove biome config (#562) --- renovate.json5 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/renovate.json5 b/renovate.json5 index 91643799..520f132d 100644 --- a/renovate.json5 +++ b/renovate.json5 @@ -1,6 +1,6 @@ { "$schema": "https://docs.renovatebot.com/renovate-schema.json", - "extends": ["config:recommended", ":disableRateLimiting", "customManagers:biomeVersions"], + "extends": ["config:recommended", ":disableRateLimiting"], "minimumReleaseAge": "5 days", "ignorePaths": ["**/front/**"], "packageRules": [ From 1f7443336e80026c7a47864f1ea52bb589f9c03b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 15 Jul 2024 00:16:08 +0700 Subject: [PATCH 011/101] Update dotnet monorepo to v8.0.7 (#564) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- back/.config/dotnet-tools.json | 2 +- back/src/Kyoo.Authentication/Kyoo.Authentication.csproj | 2 +- back/src/Kyoo.Core/Kyoo.Core.csproj | 2 +- back/src/Kyoo.Postgresql/Kyoo.Postgresql.csproj | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/back/.config/dotnet-tools.json b/back/.config/dotnet-tools.json index 3c5d19b5..7f93f7a0 100644 --- a/back/.config/dotnet-tools.json +++ b/back/.config/dotnet-tools.json @@ -3,7 +3,7 @@ "isRoot": true, "tools": { "dotnet-ef": { - "version": "8.0.6", + "version": "8.0.7", "commands": [ "dotnet-ef" ] diff --git a/back/src/Kyoo.Authentication/Kyoo.Authentication.csproj b/back/src/Kyoo.Authentication/Kyoo.Authentication.csproj index a36504b2..47b68e0b 100644 --- a/back/src/Kyoo.Authentication/Kyoo.Authentication.csproj +++ b/back/src/Kyoo.Authentication/Kyoo.Authentication.csproj @@ -1,7 +1,7 @@ - + diff --git a/back/src/Kyoo.Core/Kyoo.Core.csproj b/back/src/Kyoo.Core/Kyoo.Core.csproj index 1a28ba89..f83ca921 100644 --- a/back/src/Kyoo.Core/Kyoo.Core.csproj +++ b/back/src/Kyoo.Core/Kyoo.Core.csproj @@ -23,7 +23,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/back/src/Kyoo.Postgresql/Kyoo.Postgresql.csproj b/back/src/Kyoo.Postgresql/Kyoo.Postgresql.csproj index 753e66ce..5c193da2 100644 --- a/back/src/Kyoo.Postgresql/Kyoo.Postgresql.csproj +++ b/back/src/Kyoo.Postgresql/Kyoo.Postgresql.csproj @@ -9,11 +9,11 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + From 7209b7d0a6e26d08170e20fece409f5827b553bf Mon Sep 17 00:00:00 2001 From: Zoe Roux Date: Mon, 15 Jul 2024 01:08:47 +0700 Subject: [PATCH 012/101] Fix page props types (#565) --- front/apps/web/src/i18n.tsx | 3 ++- front/apps/web/src/pages/_app.tsx | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/front/apps/web/src/i18n.tsx b/front/apps/web/src/i18n.tsx index 2a796455..af53fc3a 100644 --- a/front/apps/web/src/i18n.tsx +++ b/front/apps/web/src/i18n.tsx @@ -47,7 +47,7 @@ export const withTranslations = ( ...commonOptions, lng: props.pageProps.__lang, }); - i18next.systemLanguage = props.pageProps.__sysLang; + i18next.systemLanguage = props.pageProps?.__sysLang; return i18next; }); @@ -66,6 +66,7 @@ export const withTranslations = ( lng, }); i18n.systemLanguage = sysLng; + props.pageProps ??= {}; props.pageProps.__lang = lng; props.pageProps.__sysLang = sysLng; return props; diff --git a/front/apps/web/src/pages/_app.tsx b/front/apps/web/src/pages/_app.tsx index 28db2a8c..68018b3d 100755 --- a/front/apps/web/src/pages/_app.tsx +++ b/front/apps/web/src/pages/_app.tsx @@ -264,12 +264,12 @@ App.getInitialProps = async (ctx: AppContext) => { ) { ctx.ctx.res!.writeHead(307, { Location: `/setup?step=${info!.setupStatus}` }); ctx.ctx.res!.end(); - return {} as any; + return { pageProps: {} }; } if (info!.setupStatus === SetupStep.Done && ctx.router.route === "/setup") { ctx.ctx.res!.writeHead(307, { Location: "/" }); ctx.ctx.res!.end(); - return {} as any; + return { pageProps: {} }; } } catch (e) { console.error("SSR error, disabling it."); From c39260e926c7b708428409c48e62e30b2909d65f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 16 Jul 2024 11:06:57 +0700 Subject: [PATCH 013/101] Update dependency MeiliSearch to v0.15.1 (#567) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- back/src/Kyoo.Meilisearch/Kyoo.Meilisearch.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/back/src/Kyoo.Meilisearch/Kyoo.Meilisearch.csproj b/back/src/Kyoo.Meilisearch/Kyoo.Meilisearch.csproj index b6ff7e12..f80dc142 100644 --- a/back/src/Kyoo.Meilisearch/Kyoo.Meilisearch.csproj +++ b/back/src/Kyoo.Meilisearch/Kyoo.Meilisearch.csproj @@ -5,7 +5,7 @@ - + From e7df151f143c2b9976d5f053c618f9a0ad7f6870 Mon Sep 17 00:00:00 2001 From: Nullpinter Date: Tue, 16 Jul 2024 09:52:44 +0000 Subject: [PATCH 014/101] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (206 of 206 strings) Translation: Kyoo/Kyoo Translate-URL: https://hosted.weblate.org/projects/kyoo/kyoo/zh_Hans/ --- front/translations/zh.json | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/front/translations/zh.json b/front/translations/zh.json index 437d9258..91c46650 100644 --- a/front/translations/zh.json +++ b/front/translations/zh.json @@ -59,7 +59,15 @@ "desc": "降序" }, "switchToGrid": "切换到网格视图", - "switchToList": "切换到列表视图" + "switchToList": "切换到列表视图", + "mediatypekey": { + "all": "全部", + "movie": "电影", + "show": "系列", + "collection": "集合" + }, + "mediatype-tt": "媒体类型", + "mediatypelabel": "媒体类型" }, "misc": { "settings": "设置", From 84dd2550a183f49f7dc6b637f2ae807a57d0530b Mon Sep 17 00:00:00 2001 From: elcattivo66 Date: Tue, 16 Jul 2024 16:42:04 +0000 Subject: [PATCH 015/101] Translated using Weblate (German) Currently translated at 100.0% (206 of 206 strings) Translation: Kyoo/Kyoo Translate-URL: https://hosted.weblate.org/projects/kyoo/kyoo/de/ --- front/translations/de.json | 48 ++++++++++++++++++++++++++++++++++---- 1 file changed, 44 insertions(+), 4 deletions(-) diff --git a/front/translations/de.json b/front/translations/de.json index 13327247..dba666f3 100644 --- a/front/translations/de.json +++ b/front/translations/de.json @@ -39,7 +39,8 @@ "droped": "Als abgebrochen markieren", "null": "Als ungesehen markieren" }, - "nextUp": "Als Nächstes" + "nextUp": "Als Nächstes", + "season": "Staffel {{number}}" }, "browse": { "sortby": "Sortieren nach {{key}}", @@ -58,7 +59,15 @@ "desc": "absteigend" }, "switchToGrid": "Zu Rasteransicht wechseln", - "switchToList": "Zu Listenansicht wechseln" + "switchToList": "Zu Listenansicht wechseln", + "mediatypekey": { + "all": "Alles", + "movie": "Filme", + "show": "Serien", + "collection": "Sammlungen" + }, + "mediatype-tt": "Medientyp", + "mediatypelabel": "Medientyp" }, "misc": { "settings": "Einstellungen", @@ -78,7 +87,8 @@ "browse": "Durchsuchen", "search": "Suchen", "login": "Anmelden", - "admin": "Administration" + "admin": "Administration", + "download": "Herunterladen" }, "settings": { "general": { @@ -210,7 +220,11 @@ "offline": "Du bist nicht mit dem Internet verbunden. Versuche es später nochmal.", "unauthorized": "Du hast keine Berechtigungen {{permission}} um diese Seite aufzurufen", "needVerification": "Dein Konto muss vom Server Administrator verifiziert werden bevor du es benutzen kannst.", - "needAccount": "Diese Seite kann als Gast nicht aufgerufen werden. Du musst dich anmelden oder ein Konto erstellen." + "needAccount": "Diese Seite kann als Gast nicht aufgerufen werden. Du musst dich anmelden oder ein Konto erstellen.", + "setup": { + "MissingAdminAccount": "Es wurde noch kein Adminkonto erstellt. Bitte registriere dich um eines zu erstellen.", + "NoVideoFound": "Es wurden noch keine Videos gefunden. Füge deinem Medienordner Filme oder Serien hinzu um diese hier anzuzeigen!" + } }, "mediainfo": { "file": "Datei", @@ -240,5 +254,31 @@ "scan": "Mediathek scannen", "empty": "Keine Probleme gefunden. Alle Elemente sind eingelesen" } + }, + "genres": { + "Family": "Familienfilm", + "Animation": "Animation", + "Comedy": "Komödie", + "Crime": "Krimi", + "Documentary": "Dokumentation", + "Drama": "Drama", + "Fantasy": "Fantasy", + "Horror": "Horror", + "Mystery": "Mystery", + "Romance": "Liebesfilm", + "ScienceFiction": "Science-Fiction", + "Thriller": "Thriller", + "War": "Kriegsfilm", + "Western": "Western", + "Kids": "Kinderfilm", + "News": "Neu", + "Reality": "Reality-TV", + "Soap": "Soap", + "Talk": "Talkshow", + "Politics": "Politik", + "Adventure": "Abenteuer", + "History": "Geschichte", + "Music": "Musikfilm", + "Action": "Action" } } From 990a16cfdae92b604623378a31d1c2de5dd77670 Mon Sep 17 00:00:00 2001 From: ABCraft19 Date: Wed, 17 Jul 2024 15:52:48 +0000 Subject: [PATCH 016/101] Translated using Weblate (French) Currently translated at 100.0% (206 of 206 strings) Translation: Kyoo/Kyoo Translate-URL: https://hosted.weblate.org/projects/kyoo/kyoo/fr/ --- front/translations/fr.json | 50 ++++++++++++++++++++++++++++++++++---- 1 file changed, 45 insertions(+), 5 deletions(-) diff --git a/front/translations/fr.json b/front/translations/fr.json index 74ef5a23..2a5832f7 100644 --- a/front/translations/fr.json +++ b/front/translations/fr.json @@ -39,7 +39,8 @@ "droped": "Marquer comme abandonné", "null": "Marquer comme non vu" }, - "nextUp": "Continuer" + "nextUp": "Continuer", + "season": "saison {{number}}" }, "browse": { "sortby": "Trier par {{key}}", @@ -58,7 +59,15 @@ "desc": "decs" }, "switchToGrid": "Passer en vue grille", - "switchToList": "Passer en vue liste" + "switchToList": "Passer en vue liste", + "mediatypekey": { + "show": "Séries", + "collection": "collection", + "movie": "Films", + "all": "tous" + }, + "mediatype-tt": "Type de média", + "mediatypelabel": "Type de média" }, "misc": { "settings": "Paramètres", @@ -75,10 +84,11 @@ }, "navbar": { "home": "Accueil", - "browse": "Liste", + "browse": "gallerie", "search": "Rechercher", "login": "Connexion", - "admin": "Section admin" + "admin": "Section admin", + "download": "Télécharger" }, "settings": { "general": { @@ -210,7 +220,11 @@ "offline": "Vous n'êtes pas connecté à Internet. Réessayez plus tard.", "unauthorized": "Il vous manque les autorisations {{permission}} pour accéder à cette page.", "needVerification": "Votre compte doit être vérifié par l'administrateur de votre serveur avant de pouvoir l'utiliser.", - "needAccount": "Cette page n'est pas accessible en mode invité. Vous devez créer un compte ou vous connecter." + "needAccount": "Cette page n'est pas accessible en mode invité. Vous devez créer un compte ou vous connecter.", + "setup": { + "NoVideoFound": "Aucune vidéo n'a été trouvée pour le moment. Ajoutez des films ou des séries dans votre librairie afin qu'ils puissent s'afficher ici !", + "MissingAdminAccount": "Aucun compte administrateur n'a été créé. Veuillez en créer un, s'il vous plaît." + } }, "mediainfo": { "file": "Fichier", @@ -240,5 +254,31 @@ "scan": "Déclencher le scan de la bibliothèque", "empty": "Aucun problème trouvé. Toutes vos vidéos sont enregistrés." } + }, + "genres": { + "Action": "Action", + "Adventure": "Aventure", + "Comedy": "Comédie", + "Documentary": "Documentaire", + "Drama": "drama", + "Family": "Famille", + "Fantasy": "monde fantastique", + "History": "histoire", + "Crime": "Scène de crime", + "Horror": "Horreur", + "Music": "Musique", + "Mystery": "mystère", + "Romance": "romance", + "ScienceFiction": "science fiction", + "War": "Guerre", + "Kids": "Jeunesse", + "Thriller": "Thriller (film à suspense)", + "Western": "western", + "Politics": "Politique", + "Soap": "soap", + "Talk": "Talkshow", + "Animation": "animation", + "News": "Actualité", + "Reality": "Télé-réalité" } } From f11511940c23f829e8b84a12e6814e276e38fb6c Mon Sep 17 00:00:00 2001 From: Evgeniy Date: Thu, 18 Jul 2024 14:40:39 +0200 Subject: [PATCH 017/101] Added translation using Weblate (Russian) --- front/translations/ru.json | 284 +++++++++++++++++++++++++++++++++++++ 1 file changed, 284 insertions(+) create mode 100644 front/translations/ru.json diff --git a/front/translations/ru.json b/front/translations/ru.json new file mode 100644 index 00000000..2672550c --- /dev/null +++ b/front/translations/ru.json @@ -0,0 +1,284 @@ +{ + "home": { + "recommended": "", + "news": "", + "watchlist": "", + "info": "", + "none": "", + "watchlistLogin": "", + "refreshMetadata": "", + "episodeMore": { + "goToShow": "", + "download": "", + "mediainfo": "" + } + }, + "show": { + "play": "", + "trailer": "", + "studio": "", + "genre": "", + "genre-none": "", + "staff": "", + "staff-none": "", + "noOverview": "", + "episode-none": "", + "episodeNoMetadata": "", + "tags": "", + "links": "", + "jumpToSeason": "", + "partOf": "", + "watchlistAdd": "", + "watchlistEdit": "", + "watchlistRemove": "", + "watchlistLogin": "", + "watchlistMark": { + "completed": "", + "planned": "", + "watching": "", + "droped": "", + "null": "" + }, + "nextUp": "", + "season": "" + }, + "browse": { + "mediatypekey": { + "all": "", + "movie": "", + "show": "", + "collection": "" + }, + "mediatype-tt": "", + "mediatypelabel": "", + "sortby": "", + "sortby-tt": "", + "sortkey": { + "relevance": "", + "name": "", + "airDate": "", + "startAir": "", + "endAir": "", + "addedDate": "", + "rating": "" + }, + "sortord": { + "asc": "", + "desc": "" + }, + "switchToGrid": "", + "switchToList": "" + }, + "genres": { + "Action": "", + "Adventure": "", + "Animation": "", + "Comedy": "", + "Crime": "", + "Documentary": "", + "Drama": "", + "Family": "", + "Fantasy": "", + "History": "", + "Horror": "", + "Music": "", + "Mystery": "", + "Romance": "", + "ScienceFiction": "", + "Thriller": "", + "War": "", + "Western": "", + "Kids": "", + "News": "", + "Reality": "", + "Soap": "", + "Talk": "", + "Politics": "" + }, + "misc": { + "settings": "", + "prev-page": "", + "next-page": "", + "delete": "", + "cancel": "", + "more": "", + "expand": "", + "collapse": "", + "edit": "", + "or": "", + "loading": "" + }, + "navbar": { + "home": "", + "browse": "", + "download": "", + "search": "", + "login": "", + "admin": "" + }, + "settings": { + "general": { + "label": "", + "theme": { + "label": "", + "description": "", + "auto": "", + "light": "", + "dark": "" + }, + "language": { + "label": "", + "description": "", + "system": "" + } + }, + "playback": { + "label": "", + "playmode": { + "label": "", + "description": "" + }, + "audioLanguage": { + "label": "", + "description": "" + }, + "subtitleLanguage": { + "label": "", + "description": "", + "none": "" + } + }, + "account": { + "label": "", + "username": { + "label": "" + }, + "avatar": { + "label": "", + "description": "" + }, + "email": { + "label": "" + }, + "password": { + "label": "", + "description": "", + "oldPassword": "", + "newPassword": "" + } + }, + "oidc": { + "label": "", + "connected": "", + "not-connected": "", + "open-profile": "", + "link": "", + "delete": "" + }, + "about": { + "label": "", + "android-app": { + "label": "", + "description": "" + }, + "git": { + "label": "", + "description": "" + } + } + }, + "player": { + "back": "", + "previous": "", + "next": "", + "play": "", + "pause": "", + "mute": "", + "volume": "", + "quality": "", + "audios": "", + "subtitles": "", + "subtitle-none": "", + "fullscreen": "", + "direct": "", + "transmux": "", + "auto": "", + "notInPristine": "", + "unsupportedError": "" + }, + "search": { + "empty": "" + }, + "login": { + "login": "", + "register": "", + "guest": "", + "guest-forbidden": "", + "via": "", + "add-account": "", + "logout": "", + "server": "", + "email": "", + "username": "", + "password": "", + "confirm": "", + "or-register": "", + "or-login": "", + "password-no-match": "", + "delete": "", + "delete-confirmation": "" + }, + "downloads": { + "empty": "", + "error": "", + "delete": "", + "deleteMessage": "", + "pause": "", + "resume": "", + "retry": "" + }, + "errors": { + "connection": "", + "connection-tips": "", + "unknown": "", + "try-again": "", + "re-login": "", + "offline": "", + "unauthorized": "", + "needVerification": "", + "needAccount": "", + "setup": { + "MissingAdminAccount": "", + "NoVideoFound": "" + } + }, + "mediainfo": { + "file": "", + "container": "", + "video": "", + "audio": "", + "subtitles": "", + "forced": "", + "default": "", + "duration": "", + "size": "", + "novideo": "", + "nocontainer": "" + }, + "admin": { + "users": { + "label": "", + "adminUser": "", + "regularUser": "", + "set-permissions": "", + "delete": "", + "unverifed": "", + "verify": "" + }, + "scanner": { + "label": "", + "scan": "", + "empty": "" + } + } +} From aa3a48f69e68cb3022e3ce6a05b710879a7b6f34 Mon Sep 17 00:00:00 2001 From: Zoe Roux Date: Fri, 19 Jul 2024 10:20:16 +0000 Subject: [PATCH 018/101] Translated using Weblate (English) Currently translated at 100.0% (206 of 206 strings) Translation: Kyoo/Kyoo Translate-URL: https://hosted.weblate.org/projects/kyoo/kyoo/en/ --- front/translations/en.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/front/translations/en.json b/front/translations/en.json index 38004535..f59ffaa3 100644 --- a/front/translations/en.json +++ b/front/translations/en.json @@ -213,7 +213,7 @@ "login": "Login", "register": "Register", "guest": "Continue as guest", - "guest-forbidden": "This instance of kyoo does not allow guests", + "guest-forbidden": "This instance of kyoo does not allow guests.", "via": "Continue with {{provider}}", "add-account": "Add account", "logout": "Logout", From 948c862a70cb4cecd4f1da65e6b0f4733ff74040 Mon Sep 17 00:00:00 2001 From: Zoe Roux Date: Fri, 19 Jul 2024 10:10:47 +0000 Subject: [PATCH 019/101] Translated using Weblate (French) Currently translated at 100.0% (206 of 206 strings) Translation: Kyoo/Kyoo Translate-URL: https://hosted.weblate.org/projects/kyoo/kyoo/fr/ --- front/translations/fr.json | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/front/translations/fr.json b/front/translations/fr.json index 2a5832f7..6cf0e015 100644 --- a/front/translations/fr.json +++ b/front/translations/fr.json @@ -19,7 +19,7 @@ "studio": "Studio", "genre": "Genres", "genre-none": "Aucun genres", - "staff": "Staff", + "staff": "Équipe", "staff-none": "Aucun membre du staff connu", "noOverview": "Aucune description disponible", "episode-none": "Il n'y a pas d'épisodes dans cette saison", @@ -40,7 +40,7 @@ "null": "Marquer comme non vu" }, "nextUp": "Continuer", - "season": "saison {{number}}" + "season": "Saison {{number}}" }, "browse": { "sortby": "Trier par {{key}}", @@ -62,9 +62,9 @@ "switchToList": "Passer en vue liste", "mediatypekey": { "show": "Séries", - "collection": "collection", + "collection": "Collection", "movie": "Films", - "all": "tous" + "all": "Tous" }, "mediatype-tt": "Type de média", "mediatypelabel": "Type de média" @@ -178,7 +178,7 @@ "transmux": "Original", "auto": "Auto", "notInPristine": "Non disponible en pristine", - "unsupportedError": "Video codec not supported, transcoding in progress..." + "unsupportedError": "Le codec vidéo n'est pas pris en charge, transcode en cours…" }, "search": { "empty": "Aucun résultat trouvé. Essayer avec une autre recherche." @@ -260,24 +260,24 @@ "Adventure": "Aventure", "Comedy": "Comédie", "Documentary": "Documentaire", - "Drama": "drama", + "Drama": "Drama", "Family": "Famille", - "Fantasy": "monde fantastique", - "History": "histoire", + "Fantasy": "Fantastique", + "History": "Histoire", "Crime": "Scène de crime", "Horror": "Horreur", "Music": "Musique", - "Mystery": "mystère", - "Romance": "romance", - "ScienceFiction": "science fiction", + "Mystery": "Mystère", + "Romance": "Romance", + "ScienceFiction": "Science-fiction", "War": "Guerre", "Kids": "Jeunesse", - "Thriller": "Thriller (film à suspense)", - "Western": "western", + "Thriller": "Thriller", + "Western": "Western", "Politics": "Politique", - "Soap": "soap", + "Soap": "Soap", "Talk": "Talkshow", - "Animation": "animation", + "Animation": "Animation", "News": "Actualité", "Reality": "Télé-réalité" } From 671c3006f4b7e8b765cfe60609335f12187e3b94 Mon Sep 17 00:00:00 2001 From: Evgeniy Date: Thu, 18 Jul 2024 12:43:01 +0000 Subject: [PATCH 020/101] Translated using Weblate (Russian) Currently translated at 100.0% (206 of 206 strings) Translation: Kyoo/Kyoo Translate-URL: https://hosted.weblate.org/projects/kyoo/kyoo/ru/ --- front/translations/ru.json | 412 ++++++++++++++++++------------------- 1 file changed, 206 insertions(+), 206 deletions(-) diff --git a/front/translations/ru.json b/front/translations/ru.json index 2672550c..5a237232 100644 --- a/front/translations/ru.json +++ b/front/translations/ru.json @@ -1,284 +1,284 @@ { "home": { - "recommended": "", - "news": "", - "watchlist": "", - "info": "", - "none": "", - "watchlistLogin": "", - "refreshMetadata": "", + "recommended": "Рекомендации", + "news": "Новинки", + "watchlist": "Продолжить просмотр", + "info": "Ещё", + "none": "Эпизоды отсутствуют", + "watchlistLogin": "Чтобы следить за тем, что вы смотрели или планируете посмотреть, вам нужно авторизоваться.", + "refreshMetadata": "Обновить метаданные", "episodeMore": { - "goToShow": "", - "download": "", - "mediainfo": "" + "goToShow": "Перейти к сериалу", + "download": "Скачать", + "mediainfo": "Информация о файле" } }, "show": { - "play": "", - "trailer": "", - "studio": "", - "genre": "", - "genre-none": "", - "staff": "", - "staff-none": "", - "noOverview": "", - "episode-none": "", - "episodeNoMetadata": "", - "tags": "", - "links": "", - "jumpToSeason": "", - "partOf": "", - "watchlistAdd": "", - "watchlistEdit": "", - "watchlistRemove": "", - "watchlistLogin": "", + "play": "Начать просмотр", + "trailer": "Просмотр трейлера", + "studio": "Студия", + "genre": "Жанры", + "genre-none": "Жанры отсутствуют", + "staff": "Команда", + "staff-none": "Неизвестная команда", + "noOverview": "Обзор недоступен", + "episode-none": "В этом сезоне эпизодов нет", + "episodeNoMetadata": "Метаданные недоступны", + "tags": "Теги", + "links": "Ссылки", + "jumpToSeason": "Перейти к сезону", + "partOf": "Часть", + "watchlistAdd": "Добавить в список к просмотру", + "watchlistEdit": "Изменить статус просмотра", + "watchlistRemove": "Отметить как не просмотренное", + "watchlistLogin": "Войти чтобы добавить в список просмотра", "watchlistMark": { - "completed": "", - "planned": "", - "watching": "", - "droped": "", - "null": "" + "completed": "Отметить как завершенное", + "planned": "Отметить как запланированное", + "watching": "Отметить как просматриваемое", + "droped": "Отметить как заброшенное", + "null": "Отметить как не просмотренное" }, - "nextUp": "", - "season": "" + "nextUp": "Следующее", + "season": "Сезон {{number}}" }, "browse": { "mediatypekey": { - "all": "", - "movie": "", - "show": "", - "collection": "" + "all": "Все", + "movie": "Фильмы", + "show": "Сериалы", + "collection": "Коллекция" }, - "mediatype-tt": "", - "mediatypelabel": "", - "sortby": "", - "sortby-tt": "", + "mediatype-tt": "Тип медиа", + "mediatypelabel": "Тип медиа", + "sortby": "Сортировать по {{key}}", + "sortby-tt": "Сортировать по", "sortkey": { - "relevance": "", - "name": "", - "airDate": "", - "startAir": "", - "endAir": "", - "addedDate": "", - "rating": "" + "relevance": "Актуальность", + "name": "Имя", + "airDate": "Дата премьеры", + "startAir": "Впервые вышло", + "endAir": "Завершение выхода", + "addedDate": "Дата добавления", + "rating": "Рейтинг" }, "sortord": { - "asc": "", - "desc": "" + "asc": "по возрастанию", + "desc": "по убыванию" }, - "switchToGrid": "", - "switchToList": "" + "switchToGrid": "Перейти к виду сеткой", + "switchToList": "Перейти в режим списка" }, "genres": { - "Action": "", - "Adventure": "", - "Animation": "", - "Comedy": "", - "Crime": "", - "Documentary": "", - "Drama": "", - "Family": "", - "Fantasy": "", - "History": "", - "Horror": "", - "Music": "", - "Mystery": "", - "Romance": "", - "ScienceFiction": "", - "Thriller": "", - "War": "", - "Western": "", - "Kids": "", - "News": "", - "Reality": "", - "Soap": "", - "Talk": "", - "Politics": "" + "Action": "Экшн", + "Adventure": "Приключение", + "Animation": "Мультфильм", + "Comedy": "Комедия", + "Crime": "Криминал", + "Documentary": "Документальный", + "Drama": "Драма", + "Family": "Семейный", + "Fantasy": "Фэнтези", + "History": "Исторический", + "Horror": "Ужасы", + "Music": "Музыкальный", + "Mystery": "Мистический", + "Romance": "Романтический", + "ScienceFiction": "Научная фантастика", + "Thriller": "Триллер", + "War": "Военный", + "Western": "Вестерн", + "Kids": "Детский", + "News": "Новости", + "Reality": "Реалити-шоу", + "Soap": "Мыльная опера", + "Talk": "Ток-шоу", + "Politics": "Политика" }, "misc": { - "settings": "", - "prev-page": "", - "next-page": "", - "delete": "", - "cancel": "", - "more": "", - "expand": "", - "collapse": "", - "edit": "", - "or": "", - "loading": "" + "settings": "Настройки", + "prev-page": "Предыдущая страница", + "next-page": "Следующая страница", + "delete": "Удалить", + "cancel": "Отмена", + "more": "Больше", + "expand": "Развернуть", + "collapse": "Свернуть", + "edit": "Редактировать", + "or": "ИЛИ", + "loading": "Загрузка" }, "navbar": { - "home": "", - "browse": "", - "download": "", - "search": "", - "login": "", - "admin": "" + "home": "Домой", + "browse": "Библиотека", + "download": "Скачать", + "search": "Поиск", + "login": "Вход", + "admin": "Панель администратора" }, "settings": { "general": { - "label": "", + "label": "Общие настройки", "theme": { - "label": "", - "description": "", - "auto": "", - "light": "", - "dark": "" + "label": "Тема", + "description": "Установить тему для вашего приложения", + "auto": "Система", + "light": "Светлая", + "dark": "Темная" }, "language": { - "label": "", - "description": "", - "system": "" + "label": "Язык", + "description": "Установить язык вашего приложения", + "system": "Системный" } }, "playback": { - "label": "", + "label": "Воспроизведение", "playmode": { - "label": "", - "description": "" + "label": "Воспроизведение по умолчанию", + "description": "Режим воспроизведения по умолчанию используется на этом клиенте. Оригинальное качество меньше нагружает сервер, но при этом не может быть изменено автоматически" }, "audioLanguage": { - "label": "", - "description": "" + "label": "Язык аудио", + "description": "Язык по-умолчанию используется при воспроизведении видео с несколькими языковыми аудиодорожками" }, "subtitleLanguage": { - "label": "", - "description": "", - "none": "" + "label": "Язык субтитров", + "description": "Язык по-умолчанию используется для субтитров", + "none": "Никакой" } }, "account": { - "label": "", + "label": "Аккаунт", "username": { - "label": "" + "label": "Имя пользователя" }, "avatar": { - "label": "", - "description": "" + "label": "Аватар", + "description": "Изменить иконку профиля" }, "email": { - "label": "" + "label": "Email" }, "password": { - "label": "", - "description": "", - "oldPassword": "", - "newPassword": "" + "label": "Пароль", + "description": "Изменить пароль", + "oldPassword": "Старый пароль", + "newPassword": "Новый пароль" } }, "oidc": { - "label": "", - "connected": "", - "not-connected": "", - "open-profile": "", - "link": "", - "delete": "" + "label": "Связанные аккаунты", + "connected": "Подключен как {{username}}.", + "not-connected": "Отключено", + "open-profile": "Открыть ваш {{provider}} профиль", + "link": "Ссылка", + "delete": "Отвязать ваш аккаунт kyoo от {{provider}}" }, "about": { - "label": "", + "label": "Информация", "android-app": { - "label": "", - "description": "" + "label": "Приложение Android", + "description": "Скачать приложение для Android" }, "git": { - "label": "", - "description": "" + "label": "Github", + "description": "Открыть репозиторий Github, где вы можете посмотреть код kyoo" } } }, "player": { - "back": "", - "previous": "", - "next": "", - "play": "", - "pause": "", - "mute": "", - "volume": "", - "quality": "", - "audios": "", - "subtitles": "", - "subtitle-none": "", - "fullscreen": "", - "direct": "", - "transmux": "", - "auto": "", - "notInPristine": "", - "unsupportedError": "" + "back": "Назад", + "previous": "Предыдущий эпизод", + "next": "Следующий эпизод", + "play": "Воспроизвести", + "pause": "Пауза", + "mute": "Убрать звук", + "volume": "Громкость", + "quality": "Качество", + "audios": "Аудио", + "subtitles": "Субтитры", + "subtitle-none": "Отсутствуют", + "fullscreen": "Полноэкранный режим", + "direct": "Исходное", + "transmux": "Оригинальное", + "auto": "Автоматически", + "notInPristine": "Недоступно в исходном", + "unsupportedError": "Видео кодек не поддерживается, производится транскодирование..." }, "search": { - "empty": "" + "empty": "Ничего не найдено. Попробуйте выполнить другой запрос." }, "login": { - "login": "", - "register": "", - "guest": "", - "guest-forbidden": "", - "via": "", - "add-account": "", - "logout": "", - "server": "", - "email": "", - "username": "", - "password": "", - "confirm": "", - "or-register": "", - "or-login": "", - "password-no-match": "", - "delete": "", - "delete-confirmation": "" + "login": "Авторизация", + "register": "Регистрация", + "guest": "Продолжить как гость", + "guest-forbidden": "Этот экземпляр kyoo не разрешает пользоваться гостевым аккаунтом", + "via": "Продолжить с {{provider}}", + "add-account": "Добавить аккаунт", + "logout": "Выйти", + "server": "Адрес сервера", + "email": "Email", + "username": "Имя пользователя", + "password": "Пароль", + "confirm": "Подтверждение пароля", + "or-register": "Ещё не создали аккаунт? <1>Register.", + "or-login": "Уже есть аккаунт? <1>Log in.", + "password-no-match": "Пароли не совпадают.", + "delete": "Удалить аккаунт", + "delete-confirmation": "Это действие необратимо. Вы уверены?" }, "downloads": { - "empty": "", - "error": "", - "delete": "", - "deleteMessage": "", - "pause": "", - "resume": "", - "retry": "" + "empty": "Пока ничего не загружено, начните искать то, что вам нравится", + "error": "Ошибка: {{error}}", + "delete": "Удалить объект", + "deleteMessage": "Вы действительно хотите удалить объект из вашего локального хранилища?", + "pause": "Пауза", + "resume": "Возобновить", + "retry": "Повторить" }, "errors": { - "connection": "", - "connection-tips": "", - "unknown": "", - "try-again": "", - "re-login": "", - "offline": "", - "unauthorized": "", - "needVerification": "", - "needAccount": "", + "connection": "Не удалось подключиться к серверу kyoo", + "connection-tips": "Возможные решения проблемы:\n - У вас есть соединение к интернету?\n - Ваш сервер kyoo онлайн?\n - Ваш аккаунт был заблокирован?", + "unknown": "Неизвестная ошибка", + "try-again": "Попробуйте ещё", + "re-login": "Перезайти", + "offline": "Отсутствует подключение к интернету. Пожалуйста, попробуйте позже.", + "unauthorized": "У вас отсутствуют разрешения {{permission}} для доступа к этой странице.", + "needVerification": "Перед использованием ваш аккаунт должен быть подтвержден администратором сервера.", + "needAccount": "Эта страница недоступна в режиме гостя. Вам необходимо создать аккаунт или авторизоваться.", "setup": { - "MissingAdminAccount": "", - "NoVideoFound": "" + "MissingAdminAccount": "Аккаунт администратора ещё не был создан. Пожалуйста, зарегистрируйтесь, чтобы создать его.", + "NoVideoFound": "Пока не найдено ни одного видео. Добавьте фильмы или сериалы в папку вашей библиотеки, чтобы они появились здесь!" } }, "mediainfo": { - "file": "", - "container": "", - "video": "", - "audio": "", - "subtitles": "", - "forced": "", - "default": "", - "duration": "", - "size": "", - "novideo": "", - "nocontainer": "" + "file": "Файл", + "container": "Контейнер", + "video": "Видео", + "audio": "Аудио", + "subtitles": "Субтитры", + "forced": "Принудительно", + "default": "По умолчанию", + "duration": "Продолжительность", + "size": "Размер", + "novideo": "Видео отсутствует", + "nocontainer": "Недействительный контейнер" }, "admin": { "users": { - "label": "", - "adminUser": "", - "regularUser": "", - "set-permissions": "", - "delete": "", - "unverifed": "", - "verify": "" + "label": "Пользователи", + "adminUser": "Администратор", + "regularUser": "Пользователь", + "set-permissions": "Установить права", + "delete": "Удалить пользователя", + "unverifed": "Не подтверждён", + "verify": "Подтвердить пользователя" }, "scanner": { - "label": "", - "scan": "", - "empty": "" + "label": "Сканер", + "scan": "Запустить сканирование библиотеки", + "empty": "Проблем не найдено. Все ваши объекты зарегистрированы успешно." } } } From 99411e0ce34442754d3671807ada6a17cf1d95b2 Mon Sep 17 00:00:00 2001 From: Zoe Roux Date: Fri, 19 Jul 2024 10:21:23 +0000 Subject: [PATCH 021/101] Translated using Weblate (French) Currently translated at 100.0% (206 of 206 strings) Translation: Kyoo/Kyoo Translate-URL: https://hosted.weblate.org/projects/kyoo/kyoo/fr/ --- front/translations/fr.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/front/translations/fr.json b/front/translations/fr.json index 6cf0e015..e388c078 100644 --- a/front/translations/fr.json +++ b/front/translations/fr.json @@ -193,18 +193,18 @@ "logout": "Déconnexion", "server": "Addresse du serveur", "email": "Email", - "username": "Username", + "username": "Nom d'utilisateur", "password": "Mot de passe", - "confirm": "Confirm Password", + "confirm": "Confirmez votre mot de passe", "or-register": "Vous n'avez pas de compte ? <1>Inscrivez-vous.", - "or-login": "Vous avez déjà un compte ? <1>Connectez-vous.<1/>", - "password-no-match": "Mots de passe differents", + "or-login": "Vous avez déjà un compte ? <1>Connectez-vous<1/>.", + "password-no-match": "Mots de passe différents.", "delete": "Supprimer votre compte", - "delete-confirmation": "Cette action ne peut pas être annulée. Êtes-vous sur?" + "delete-confirmation": "Cette action ne peut pas être annulée. Êtes-vous sûr ?" }, "downloads": { "empty": "Rien de téléchargé pour l'instant, commencez à rechercher quelque chose que vous aimez", - "error": "Erreur: {{error}}", + "error": "Erreur : {{error}}", "delete": "Supprimer un item télechargé", "deleteMessage": "Voulez-vous vraiment supprimer un item télechgargé ?", "pause": "Pause", From d43549816e543fc2bff3850d36ddae50b5213855 Mon Sep 17 00:00:00 2001 From: Zoe Roux Date: Fri, 19 Jul 2024 10:32:49 +0000 Subject: [PATCH 022/101] Translated using Weblate (French) Currently translated at 100.0% (206 of 206 strings) Translation: Kyoo/Kyoo Translate-URL: https://hosted.weblate.org/projects/kyoo/kyoo/fr/ --- front/translations/fr.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/front/translations/fr.json b/front/translations/fr.json index e388c078..2bdfef27 100644 --- a/front/translations/fr.json +++ b/front/translations/fr.json @@ -84,7 +84,7 @@ }, "navbar": { "home": "Accueil", - "browse": "gallerie", + "browse": "Galerie", "search": "Rechercher", "login": "Connexion", "admin": "Section admin", From 8d2bf0a3a26a8782161a1ab49e37342d5de151c6 Mon Sep 17 00:00:00 2001 From: guilherme monteiro Date: Tue, 23 Jul 2024 03:45:03 +0200 Subject: [PATCH 023/101] Added translation using Weblate (Portuguese) --- front/translations/pt.json | 284 +++++++++++++++++++++++++++++++++++++ 1 file changed, 284 insertions(+) create mode 100644 front/translations/pt.json diff --git a/front/translations/pt.json b/front/translations/pt.json new file mode 100644 index 00000000..2672550c --- /dev/null +++ b/front/translations/pt.json @@ -0,0 +1,284 @@ +{ + "home": { + "recommended": "", + "news": "", + "watchlist": "", + "info": "", + "none": "", + "watchlistLogin": "", + "refreshMetadata": "", + "episodeMore": { + "goToShow": "", + "download": "", + "mediainfo": "" + } + }, + "show": { + "play": "", + "trailer": "", + "studio": "", + "genre": "", + "genre-none": "", + "staff": "", + "staff-none": "", + "noOverview": "", + "episode-none": "", + "episodeNoMetadata": "", + "tags": "", + "links": "", + "jumpToSeason": "", + "partOf": "", + "watchlistAdd": "", + "watchlistEdit": "", + "watchlistRemove": "", + "watchlistLogin": "", + "watchlistMark": { + "completed": "", + "planned": "", + "watching": "", + "droped": "", + "null": "" + }, + "nextUp": "", + "season": "" + }, + "browse": { + "mediatypekey": { + "all": "", + "movie": "", + "show": "", + "collection": "" + }, + "mediatype-tt": "", + "mediatypelabel": "", + "sortby": "", + "sortby-tt": "", + "sortkey": { + "relevance": "", + "name": "", + "airDate": "", + "startAir": "", + "endAir": "", + "addedDate": "", + "rating": "" + }, + "sortord": { + "asc": "", + "desc": "" + }, + "switchToGrid": "", + "switchToList": "" + }, + "genres": { + "Action": "", + "Adventure": "", + "Animation": "", + "Comedy": "", + "Crime": "", + "Documentary": "", + "Drama": "", + "Family": "", + "Fantasy": "", + "History": "", + "Horror": "", + "Music": "", + "Mystery": "", + "Romance": "", + "ScienceFiction": "", + "Thriller": "", + "War": "", + "Western": "", + "Kids": "", + "News": "", + "Reality": "", + "Soap": "", + "Talk": "", + "Politics": "" + }, + "misc": { + "settings": "", + "prev-page": "", + "next-page": "", + "delete": "", + "cancel": "", + "more": "", + "expand": "", + "collapse": "", + "edit": "", + "or": "", + "loading": "" + }, + "navbar": { + "home": "", + "browse": "", + "download": "", + "search": "", + "login": "", + "admin": "" + }, + "settings": { + "general": { + "label": "", + "theme": { + "label": "", + "description": "", + "auto": "", + "light": "", + "dark": "" + }, + "language": { + "label": "", + "description": "", + "system": "" + } + }, + "playback": { + "label": "", + "playmode": { + "label": "", + "description": "" + }, + "audioLanguage": { + "label": "", + "description": "" + }, + "subtitleLanguage": { + "label": "", + "description": "", + "none": "" + } + }, + "account": { + "label": "", + "username": { + "label": "" + }, + "avatar": { + "label": "", + "description": "" + }, + "email": { + "label": "" + }, + "password": { + "label": "", + "description": "", + "oldPassword": "", + "newPassword": "" + } + }, + "oidc": { + "label": "", + "connected": "", + "not-connected": "", + "open-profile": "", + "link": "", + "delete": "" + }, + "about": { + "label": "", + "android-app": { + "label": "", + "description": "" + }, + "git": { + "label": "", + "description": "" + } + } + }, + "player": { + "back": "", + "previous": "", + "next": "", + "play": "", + "pause": "", + "mute": "", + "volume": "", + "quality": "", + "audios": "", + "subtitles": "", + "subtitle-none": "", + "fullscreen": "", + "direct": "", + "transmux": "", + "auto": "", + "notInPristine": "", + "unsupportedError": "" + }, + "search": { + "empty": "" + }, + "login": { + "login": "", + "register": "", + "guest": "", + "guest-forbidden": "", + "via": "", + "add-account": "", + "logout": "", + "server": "", + "email": "", + "username": "", + "password": "", + "confirm": "", + "or-register": "", + "or-login": "", + "password-no-match": "", + "delete": "", + "delete-confirmation": "" + }, + "downloads": { + "empty": "", + "error": "", + "delete": "", + "deleteMessage": "", + "pause": "", + "resume": "", + "retry": "" + }, + "errors": { + "connection": "", + "connection-tips": "", + "unknown": "", + "try-again": "", + "re-login": "", + "offline": "", + "unauthorized": "", + "needVerification": "", + "needAccount": "", + "setup": { + "MissingAdminAccount": "", + "NoVideoFound": "" + } + }, + "mediainfo": { + "file": "", + "container": "", + "video": "", + "audio": "", + "subtitles": "", + "forced": "", + "default": "", + "duration": "", + "size": "", + "novideo": "", + "nocontainer": "" + }, + "admin": { + "users": { + "label": "", + "adminUser": "", + "regularUser": "", + "set-permissions": "", + "delete": "", + "unverifed": "", + "verify": "" + }, + "scanner": { + "label": "", + "scan": "", + "empty": "" + } + } +} From 43a189e5ff5a054a6531d25165cbcf30aa7ea417 Mon Sep 17 00:00:00 2001 From: guilherme monteiro Date: Tue, 23 Jul 2024 01:48:32 +0000 Subject: [PATCH 024/101] Translated using Weblate (Portuguese) Currently translated at 2.4% (5 of 206 strings) Translation: Kyoo/Kyoo Translate-URL: https://hosted.weblate.org/projects/kyoo/kyoo/pt/ --- front/translations/pt.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/front/translations/pt.json b/front/translations/pt.json index 2672550c..0315757f 100644 --- a/front/translations/pt.json +++ b/front/translations/pt.json @@ -1,10 +1,10 @@ { "home": { - "recommended": "", - "news": "", - "watchlist": "", - "info": "", - "none": "", + "recommended": "Recomendados", + "news": "Notícias", + "watchlist": "Continue assistindo", + "info": "Veja mais", + "none": "Nenhum episódio", "watchlistLogin": "", "refreshMetadata": "", "episodeMore": { From 8592a7a0a394d2f1510d35beacb6cf91f3b71160 Mon Sep 17 00:00:00 2001 From: guilherme monteiro Date: Tue, 23 Jul 2024 03:54:43 +0200 Subject: [PATCH 025/101] Added translation using Weblate (Portuguese (Brazil)) --- front/translations/pt_br.json | 284 ++++++++++++++++++++++++++++++++++ 1 file changed, 284 insertions(+) create mode 100644 front/translations/pt_br.json diff --git a/front/translations/pt_br.json b/front/translations/pt_br.json new file mode 100644 index 00000000..2672550c --- /dev/null +++ b/front/translations/pt_br.json @@ -0,0 +1,284 @@ +{ + "home": { + "recommended": "", + "news": "", + "watchlist": "", + "info": "", + "none": "", + "watchlistLogin": "", + "refreshMetadata": "", + "episodeMore": { + "goToShow": "", + "download": "", + "mediainfo": "" + } + }, + "show": { + "play": "", + "trailer": "", + "studio": "", + "genre": "", + "genre-none": "", + "staff": "", + "staff-none": "", + "noOverview": "", + "episode-none": "", + "episodeNoMetadata": "", + "tags": "", + "links": "", + "jumpToSeason": "", + "partOf": "", + "watchlistAdd": "", + "watchlistEdit": "", + "watchlistRemove": "", + "watchlistLogin": "", + "watchlistMark": { + "completed": "", + "planned": "", + "watching": "", + "droped": "", + "null": "" + }, + "nextUp": "", + "season": "" + }, + "browse": { + "mediatypekey": { + "all": "", + "movie": "", + "show": "", + "collection": "" + }, + "mediatype-tt": "", + "mediatypelabel": "", + "sortby": "", + "sortby-tt": "", + "sortkey": { + "relevance": "", + "name": "", + "airDate": "", + "startAir": "", + "endAir": "", + "addedDate": "", + "rating": "" + }, + "sortord": { + "asc": "", + "desc": "" + }, + "switchToGrid": "", + "switchToList": "" + }, + "genres": { + "Action": "", + "Adventure": "", + "Animation": "", + "Comedy": "", + "Crime": "", + "Documentary": "", + "Drama": "", + "Family": "", + "Fantasy": "", + "History": "", + "Horror": "", + "Music": "", + "Mystery": "", + "Romance": "", + "ScienceFiction": "", + "Thriller": "", + "War": "", + "Western": "", + "Kids": "", + "News": "", + "Reality": "", + "Soap": "", + "Talk": "", + "Politics": "" + }, + "misc": { + "settings": "", + "prev-page": "", + "next-page": "", + "delete": "", + "cancel": "", + "more": "", + "expand": "", + "collapse": "", + "edit": "", + "or": "", + "loading": "" + }, + "navbar": { + "home": "", + "browse": "", + "download": "", + "search": "", + "login": "", + "admin": "" + }, + "settings": { + "general": { + "label": "", + "theme": { + "label": "", + "description": "", + "auto": "", + "light": "", + "dark": "" + }, + "language": { + "label": "", + "description": "", + "system": "" + } + }, + "playback": { + "label": "", + "playmode": { + "label": "", + "description": "" + }, + "audioLanguage": { + "label": "", + "description": "" + }, + "subtitleLanguage": { + "label": "", + "description": "", + "none": "" + } + }, + "account": { + "label": "", + "username": { + "label": "" + }, + "avatar": { + "label": "", + "description": "" + }, + "email": { + "label": "" + }, + "password": { + "label": "", + "description": "", + "oldPassword": "", + "newPassword": "" + } + }, + "oidc": { + "label": "", + "connected": "", + "not-connected": "", + "open-profile": "", + "link": "", + "delete": "" + }, + "about": { + "label": "", + "android-app": { + "label": "", + "description": "" + }, + "git": { + "label": "", + "description": "" + } + } + }, + "player": { + "back": "", + "previous": "", + "next": "", + "play": "", + "pause": "", + "mute": "", + "volume": "", + "quality": "", + "audios": "", + "subtitles": "", + "subtitle-none": "", + "fullscreen": "", + "direct": "", + "transmux": "", + "auto": "", + "notInPristine": "", + "unsupportedError": "" + }, + "search": { + "empty": "" + }, + "login": { + "login": "", + "register": "", + "guest": "", + "guest-forbidden": "", + "via": "", + "add-account": "", + "logout": "", + "server": "", + "email": "", + "username": "", + "password": "", + "confirm": "", + "or-register": "", + "or-login": "", + "password-no-match": "", + "delete": "", + "delete-confirmation": "" + }, + "downloads": { + "empty": "", + "error": "", + "delete": "", + "deleteMessage": "", + "pause": "", + "resume": "", + "retry": "" + }, + "errors": { + "connection": "", + "connection-tips": "", + "unknown": "", + "try-again": "", + "re-login": "", + "offline": "", + "unauthorized": "", + "needVerification": "", + "needAccount": "", + "setup": { + "MissingAdminAccount": "", + "NoVideoFound": "" + } + }, + "mediainfo": { + "file": "", + "container": "", + "video": "", + "audio": "", + "subtitles": "", + "forced": "", + "default": "", + "duration": "", + "size": "", + "novideo": "", + "nocontainer": "" + }, + "admin": { + "users": { + "label": "", + "adminUser": "", + "regularUser": "", + "set-permissions": "", + "delete": "", + "unverifed": "", + "verify": "" + }, + "scanner": { + "label": "", + "scan": "", + "empty": "" + } + } +} From a00b5bf4329f4be3c542fb03135759e17d66d300 Mon Sep 17 00:00:00 2001 From: guilherme monteiro Date: Tue, 23 Jul 2024 01:55:24 +0000 Subject: [PATCH 026/101] Translated using Weblate (Portuguese (Brazil)) Currently translated at 39.3% (81 of 206 strings) Translation: Kyoo/Kyoo Translate-URL: https://hosted.weblate.org/projects/kyoo/kyoo/pt_BR/ --- front/translations/pt_br.json | 162 +++++++++++++++++----------------- 1 file changed, 81 insertions(+), 81 deletions(-) diff --git a/front/translations/pt_br.json b/front/translations/pt_br.json index 2672550c..3cca6324 100644 --- a/front/translations/pt_br.json +++ b/front/translations/pt_br.json @@ -1,128 +1,128 @@ { "home": { - "recommended": "", - "news": "", - "watchlist": "", - "info": "", - "none": "", - "watchlistLogin": "", - "refreshMetadata": "", + "recommended": "Recomendados", + "news": "Notícias", + "watchlist": "Continue assistindo", + "info": "Veja mais", + "none": "Nenhum episódio", + "watchlistLogin": "Para salvar o que você assistiu ou planeja assistir, é necessário fazer login.", + "refreshMetadata": "Atualizar metadados", "episodeMore": { "goToShow": "", - "download": "", - "mediainfo": "" + "download": "Baixar", + "mediainfo": "Veja informação do arquivo" } }, "show": { - "play": "", - "trailer": "", - "studio": "", - "genre": "", - "genre-none": "", - "staff": "", - "staff-none": "", - "noOverview": "", - "episode-none": "", - "episodeNoMetadata": "", + "play": "Reproduzir", + "trailer": "Reproduzir Trailer", + "studio": "Estúdio", + "genre": "Gêneros", + "genre-none": "Nenhum gênero", + "staff": "Staff", + "staff-none": "A staff é desconhecida", + "noOverview": "Resumo indisponível", + "episode-none": "Nenhum episódio nessa temporada", + "episodeNoMetadata": "Metadado indisponível", "tags": "", "links": "", - "jumpToSeason": "", - "partOf": "", + "jumpToSeason": "Pular para temporada", + "partOf": "Parte de", "watchlistAdd": "", "watchlistEdit": "", - "watchlistRemove": "", - "watchlistLogin": "", + "watchlistRemove": "Marque como não assistido", + "watchlistLogin": "Faça login para adicionar a sua lista", "watchlistMark": { - "completed": "", - "planned": "", - "watching": "", - "droped": "", - "null": "" + "completed": "Marque como assistido", + "planned": "Marque como planejado", + "watching": "Marque como assistindo", + "droped": "Marque como desistido", + "null": "Marque como não assistido" }, - "nextUp": "", - "season": "" + "nextUp": "Próximo", + "season": "Temporada {{number}}" }, "browse": { "mediatypekey": { - "all": "", - "movie": "", - "show": "", - "collection": "" + "all": "Todos", + "movie": "Filmes", + "show": "Séries", + "collection": "Coleção" }, - "mediatype-tt": "", - "mediatypelabel": "", - "sortby": "", - "sortby-tt": "", + "mediatype-tt": "Tipo de mídia", + "mediatypelabel": "Tipo de mídia", + "sortby": "Ordenar por {{key}}", + "sortby-tt": "Ordenar por", "sortkey": { - "relevance": "", - "name": "", - "airDate": "", + "relevance": "Relevância", + "name": "Nome", + "airDate": "Data de transmissão", "startAir": "", "endAir": "", - "addedDate": "", - "rating": "" + "addedDate": "Adicionado na data", + "rating": "Avaliações" }, "sortord": { - "asc": "", - "desc": "" + "asc": "crescente", + "desc": "decrescente" }, - "switchToGrid": "", - "switchToList": "" + "switchToGrid": "Mudara para visualização em grade", + "switchToList": "Mudara para visualização de lista" }, "genres": { - "Action": "", - "Adventure": "", - "Animation": "", - "Comedy": "", + "Action": "Ação", + "Adventure": "Aventura", + "Animation": "Animação", + "Comedy": "Comédia", "Crime": "", - "Documentary": "", + "Documentary": "Documentário", "Drama": "", - "Family": "", - "Fantasy": "", - "History": "", - "Horror": "", - "Music": "", - "Mystery": "", + "Family": "Família", + "Fantasy": "Fantasia", + "History": "História", + "Horror": "Terror", + "Music": "Música", + "Mystery": "Mistério", "Romance": "", - "ScienceFiction": "", + "ScienceFiction": "Ficção cientifica", "Thriller": "", - "War": "", + "War": "Guerra", "Western": "", - "Kids": "", - "News": "", - "Reality": "", + "Kids": "Infantil", + "News": "Notícias", + "Reality": "Realidade", "Soap": "", "Talk": "", - "Politics": "" + "Politics": "Política" }, "misc": { - "settings": "", - "prev-page": "", - "next-page": "", - "delete": "", - "cancel": "", - "more": "", - "expand": "", + "settings": "Configurações", + "prev-page": "Pagina anterior", + "next-page": "Próxima pagina", + "delete": "Deletar", + "cancel": "Cancelar", + "more": "Mais", + "expand": "Expandir", "collapse": "", - "edit": "", - "or": "", - "loading": "" + "edit": "Editar", + "or": "OU", + "loading": "Carregando" }, "navbar": { "home": "", - "browse": "", - "download": "", - "search": "", + "browse": "Navegar", + "download": "Baixar", + "search": "Pesquisar", "login": "", - "admin": "" + "admin": "Painel de admin" }, "settings": { "general": { - "label": "", + "label": "Geral", "theme": { - "label": "", + "label": "Tema", "description": "", - "auto": "", + "auto": "Sistema", "light": "", "dark": "" }, From dadb463042b2a02fbec9ac863d0086b5be6dd0a0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 25 Jul 2024 13:52:32 +0000 Subject: [PATCH 027/101] chore(deps): update dependency nswag.aspnetcore to v14.1.0 --- back/src/Kyoo.Swagger/Kyoo.Swagger.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/back/src/Kyoo.Swagger/Kyoo.Swagger.csproj b/back/src/Kyoo.Swagger/Kyoo.Swagger.csproj index 4b85c3f7..64d9514e 100644 --- a/back/src/Kyoo.Swagger/Kyoo.Swagger.csproj +++ b/back/src/Kyoo.Swagger/Kyoo.Swagger.csproj @@ -6,7 +6,7 @@ - + From 67e1dadfab718c9e408a6951c9cb619817ba323b Mon Sep 17 00:00:00 2001 From: Felipe Marinho Date: Fri, 2 Aug 2024 23:02:33 +0000 Subject: [PATCH 028/101] Translated using Weblate (Portuguese (Brazil)) Currently translated at 99.5% (205 of 206 strings) Translation: Kyoo/Kyoo Translate-URL: https://hosted.weblate.org/projects/kyoo/kyoo/pt_BR/ --- front/translations/pt_br.json | 248 +++++++++++++++++----------------- 1 file changed, 124 insertions(+), 124 deletions(-) diff --git a/front/translations/pt_br.json b/front/translations/pt_br.json index 3cca6324..f11e6d32 100644 --- a/front/translations/pt_br.json +++ b/front/translations/pt_br.json @@ -8,7 +8,7 @@ "watchlistLogin": "Para salvar o que você assistiu ou planeja assistir, é necessário fazer login.", "refreshMetadata": "Atualizar metadados", "episodeMore": { - "goToShow": "", + "goToShow": "Ir para série", "download": "Baixar", "mediainfo": "Veja informação do arquivo" } @@ -24,12 +24,12 @@ "noOverview": "Resumo indisponível", "episode-none": "Nenhum episódio nessa temporada", "episodeNoMetadata": "Metadado indisponível", - "tags": "", - "links": "", + "tags": "Tags", + "links": "Links", "jumpToSeason": "Pular para temporada", "partOf": "Parte de", - "watchlistAdd": "", - "watchlistEdit": "", + "watchlistAdd": "Adicionar a lista de desejos", + "watchlistEdit": "Editar status de visto", "watchlistRemove": "Marque como não assistido", "watchlistLogin": "Faça login para adicionar a sua lista", "watchlistMark": { @@ -57,8 +57,8 @@ "relevance": "Relevância", "name": "Nome", "airDate": "Data de transmissão", - "startAir": "", - "endAir": "", + "startAir": "Data de início", + "endAir": "Data de finalização", "addedDate": "Adicionado na data", "rating": "Avaliações" }, @@ -74,24 +74,24 @@ "Adventure": "Aventura", "Animation": "Animação", "Comedy": "Comédia", - "Crime": "", + "Crime": "Crime", "Documentary": "Documentário", - "Drama": "", + "Drama": "Drama", "Family": "Família", "Fantasy": "Fantasia", "History": "História", "Horror": "Terror", "Music": "Música", "Mystery": "Mistério", - "Romance": "", + "Romance": "Romance", "ScienceFiction": "Ficção cientifica", - "Thriller": "", + "Thriller": "Suspense", "War": "Guerra", - "Western": "", + "Western": "Faroeste", "Kids": "Infantil", "News": "Notícias", "Reality": "Realidade", - "Soap": "", + "Soap": "Novela", "Talk": "", "Politics": "Política" }, @@ -103,17 +103,17 @@ "cancel": "Cancelar", "more": "Mais", "expand": "Expandir", - "collapse": "", + "collapse": "Recolher", "edit": "Editar", "or": "OU", "loading": "Carregando" }, "navbar": { - "home": "", + "home": "Início", "browse": "Navegar", "download": "Baixar", "search": "Pesquisar", - "login": "", + "login": "Entrar", "admin": "Painel de admin" }, "settings": { @@ -121,164 +121,164 @@ "label": "Geral", "theme": { "label": "Tema", - "description": "", + "description": "Defina o tema da sua aplicação", "auto": "Sistema", - "light": "", - "dark": "" + "light": "Claro", + "dark": "Escuro" }, "language": { - "label": "", - "description": "", - "system": "" + "label": "Linguagem", + "description": "Defina o idioma da sua aplicação", + "system": "Sistema" } }, "playback": { - "label": "", + "label": "Reprodução", "playmode": { - "label": "", - "description": "" + "label": "Modo de reprodução padrão", + "description": "O modo de reprodução padrão usado neste cliente. Puro é mais leve mas não permite mudanças de qualidade automáticas" }, "audioLanguage": { - "label": "", - "description": "" + "label": "Idioma do áudio", + "description": "O idioma de áudio padrão usado ao reproduzir vídeos multi-linguagem" }, "subtitleLanguage": { - "label": "", - "description": "", - "none": "" + "label": "Idioma das legendas", + "description": "O idioma padrão usado nas legendas", + "none": "Nenhum" } }, "account": { - "label": "", + "label": "Conta", "username": { - "label": "" + "label": "Usuário" }, "avatar": { - "label": "", - "description": "" + "label": "Foto", + "description": "Mude seu ícone de perfil" }, "email": { - "label": "" + "label": "Email" }, "password": { - "label": "", - "description": "", - "oldPassword": "", - "newPassword": "" + "label": "Senha", + "description": "Mude sua senha", + "oldPassword": "Senha antiga", + "newPassword": "Nova senha" } }, "oidc": { - "label": "", - "connected": "", - "not-connected": "", - "open-profile": "", - "link": "", - "delete": "" + "label": "Contas vinculadas", + "connected": "Conectado como {{username}}.", + "not-connected": "Desconectado", + "open-profile": "Abre seu perfil em {{provider}}", + "link": "Link", + "delete": "Desvincule sua conta kyoo's do provedor {{provider}}" }, "about": { - "label": "", + "label": "Sobre", "android-app": { - "label": "", - "description": "" + "label": "Aplicativo Android", + "description": "Baixe o aplicativo Android" }, "git": { - "label": "", - "description": "" + "label": "Github", + "description": "Abre o repositório no GitHub onde é possivel acessar o código do kyoo" } } }, "player": { - "back": "", - "previous": "", - "next": "", - "play": "", - "pause": "", - "mute": "", - "volume": "", - "quality": "", - "audios": "", - "subtitles": "", - "subtitle-none": "", - "fullscreen": "", - "direct": "", - "transmux": "", - "auto": "", - "notInPristine": "", - "unsupportedError": "" + "back": "Voltar", + "previous": "Episódio anterior", + "next": "Próximo episódio", + "play": "Reproduzir", + "pause": "Pausar", + "mute": "Mutar", + "volume": "Volume", + "quality": "Qualidade", + "audios": "Áudio", + "subtitles": "Legendas", + "subtitle-none": "Nenhum", + "fullscreen": "Tela cheia", + "direct": "Puro", + "transmux": "Original", + "auto": "Automático", + "notInPristine": "Indisponível no \"Puro\"", + "unsupportedError": "Codec de vídeo não suportado, transcodificando..." }, "search": { - "empty": "" + "empty": "Nenhum resultado encontrado. Tente algo diferente." }, "login": { - "login": "", - "register": "", - "guest": "", - "guest-forbidden": "", - "via": "", - "add-account": "", - "logout": "", - "server": "", - "email": "", - "username": "", - "password": "", - "confirm": "", - "or-register": "", - "or-login": "", - "password-no-match": "", - "delete": "", - "delete-confirmation": "" + "login": "Entrar", + "register": "Registrar", + "guest": "Continuar como visitante", + "guest-forbidden": "Essa instância kyoo não permite visitantes.", + "via": "Continuar com {{provider}}", + "add-account": "Adicionar conta", + "logout": "Sair", + "server": "Endereço do servidor", + "email": "E-mail", + "username": "Usuário", + "password": "Senha", + "confirm": "Confirmar senha", + "or-register": "Não tem uma conta? <1>Registre-se.", + "or-login": "Já possui uma conta? <1>Entre.", + "password-no-match": "Senhas não coincidem.", + "delete": "Apagar sua conta", + "delete-confirmation": "Esta ação não pode ser revertida. Tem certeza?" }, "downloads": { - "empty": "", - "error": "", - "delete": "", - "deleteMessage": "", - "pause": "", - "resume": "", - "retry": "" + "empty": "Nada baixado ainda, comece a explorar algo que lhe interesse", + "error": "Erro: {{error}}", + "delete": "Remover item", + "deleteMessage": "Você deseja remover este item do seu armazenamento local?", + "pause": "Pausar", + "resume": "Retomar", + "retry": "Tentar novamente" }, "errors": { - "connection": "", - "connection-tips": "", - "unknown": "", - "try-again": "", - "re-login": "", - "offline": "", - "unauthorized": "", - "needVerification": "", - "needAccount": "", + "connection": "Não foi possível se conectar com servidor kyoo", + "connection-tips": "Dicas de solução:\n- Você está conectado a internet?\n- Seu servidor kyoo está online?\n- Sua conta foi banida?", + "unknown": "Erro desconhecido", + "try-again": "Tente novamente", + "re-login": "Entrar novamente", + "offline": "Você não está conectado a internet. Tente novamente mais tarde.", + "unauthorized": "Você não possui as permissões {{permission}} para acessar esta página.", + "needVerification": "Sua conta precisa ser verificada pelo administrador antes que você possa usá-la.", + "needAccount": "Esta página não pode ser acessada em modo visitante. Voce precisa criar uma conta ou entrar.", "setup": { - "MissingAdminAccount": "", - "NoVideoFound": "" + "MissingAdminAccount": "Nenhuma conta adminisitrativa foi criada ainda. Por favor registre-se para criá-la.", + "NoVideoFound": "Nenhum vídeo encontrado. Adicione filmes ou séries na sua biblioteca para que eles apareçam aqui!" } }, "mediainfo": { - "file": "", - "container": "", - "video": "", - "audio": "", - "subtitles": "", - "forced": "", - "default": "", - "duration": "", - "size": "", - "novideo": "", - "nocontainer": "" + "file": "Arquivo", + "container": "Contêiner", + "video": "Vídeo", + "audio": "Áudio", + "subtitles": "Legendas", + "forced": "Forçado", + "default": "Padrão", + "duration": "Duração", + "size": "Tamanho", + "novideo": "Sem vídeo", + "nocontainer": "Contêiner inválido" }, "admin": { "users": { - "label": "", - "adminUser": "", - "regularUser": "", - "set-permissions": "", - "delete": "", - "unverifed": "", - "verify": "" + "label": "Usuários", + "adminUser": "Administrador", + "regularUser": "Usuário", + "set-permissions": "Definir permissões", + "delete": "Remover usuário", + "unverifed": "Não verificado", + "verify": "Verificar usuário" }, "scanner": { - "label": "", - "scan": "", - "empty": "" + "label": "Escanear", + "scan": "Iniciar escaneamento de mídia", + "empty": "Nenhum problema encontrado. Todos os seus itens estão registrados." } } } From 7f144e8cc3546ece76dee1c3b9443fa7a2da7b64 Mon Sep 17 00:00:00 2001 From: Arthur Jamet Date: Sun, 4 Aug 2024 19:30:54 +0200 Subject: [PATCH 029/101] Front: Fix props of MediaSessionManager for Image --- front/packages/ui/src/player/media-session.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/front/packages/ui/src/player/media-session.tsx b/front/packages/ui/src/player/media-session.tsx index 07f3f588..9c4f1d69 100644 --- a/front/packages/ui/src/player/media-session.tsx +++ b/front/packages/ui/src/player/media-session.tsx @@ -26,12 +26,12 @@ import { durationAtom, playAtom, progressAtom } from "./state"; export const MediaSessionManager = ({ title, - image, + imageUri, previous, next, }: { title?: string; - image?: string | null; + imageUri?: string | null; previous?: string; next?: string; }) => { @@ -45,9 +45,9 @@ export const MediaSessionManager = ({ if (!("mediaSession" in navigator)) return; navigator.mediaSession.metadata = new MediaMetadata({ title: title, - artwork: image ? [{ src: image }] : undefined, + artwork: imageUri ? [{ src: imageUri }] : undefined, }); - }, [title, image]); + }, [title, imageUri]); useEffect(() => { if (!("mediaSession" in navigator)) return; From 7bc07baf475f503728d14ed8050354528cfc5030 Mon Sep 17 00:00:00 2001 From: Arthur Jamet Date: Sun, 4 Aug 2024 19:31:48 +0200 Subject: [PATCH 030/101] Front: Pass Item's poster instead of thumbnail to MediaSessionManager --- front/packages/ui/src/player/index.tsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/front/packages/ui/src/player/index.tsx b/front/packages/ui/src/player/index.tsx index 9b6f9e50..bee71bad 100644 --- a/front/packages/ui/src/player/index.tsx +++ b/front/packages/ui/src/player/index.tsx @@ -81,6 +81,10 @@ export const Player = ({ const [playbackError, setPlaybackError] = useState(undefined); const { data, error } = useFetch(Player.query(type, slug)); const { data: info, error: infoError } = useFetch(Player.infoQuery(type, slug)); + const image = + data && data.type === "episode" + ? data.show?.poster ?? data?.thumbnail + : data?.thumbnail; const previous = data && data.type === "episode" && data.previousEpisode ? `/watch/${data.previousEpisode.slug}?t=0` @@ -142,7 +146,7 @@ export const Player = ({ metadata={{ title: title ?? t("show.episodeNoMetadata"), description: data?.overview ?? undefined, - imageUri: data?.thumbnail?.high, + imageUri: image?.medium, next: next, previous: previous, }} From ddc3e8f61a80eefdae7f91fd8b2e162b2257b28a Mon Sep 17 00:00:00 2001 From: Arthur Jamet Date: Sun, 4 Aug 2024 19:46:16 +0200 Subject: [PATCH 031/101] Front: better Format of Video Metadata for Episodes --- front/packages/ui/src/player/index.tsx | 28 ++++++++++--------- .../packages/ui/src/player/media-session.tsx | 5 +++- front/packages/ui/src/player/state.tsx | 1 + 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/front/packages/ui/src/player/index.tsx b/front/packages/ui/src/player/index.tsx index bee71bad..193e13dc 100644 --- a/front/packages/ui/src/player/index.tsx +++ b/front/packages/ui/src/player/index.tsx @@ -65,6 +65,17 @@ const mapData = ( }; }; +const formatTitleMetadata = (item: Item) => { + if (item.type === "movie") { + return item.name; + } + return `${item.name} (${episodeDisplayNumber({ + seasonNumber: item.seasonNumber, + episodeNumber: item.episodeNumber, + absoluteNumber: item.absoluteNumber, + })})`; +}; + export const Player = ({ slug, type, @@ -81,10 +92,7 @@ export const Player = ({ const [playbackError, setPlaybackError] = useState(undefined); const { data, error } = useFetch(Player.query(type, slug)); const { data: info, error: infoError } = useFetch(Player.infoQuery(type, slug)); - const image = - data && data.type === "episode" - ? data.show?.poster ?? data?.thumbnail - : data?.thumbnail; + const image = data && data.type === "episode" ? data.show?.poster ?? data?.poster : data?.poster; const previous = data && data.type === "episode" && data.previousEpisode ? `/watch/${data.previousEpisode.slug}?t=0` @@ -93,15 +101,8 @@ export const Player = ({ data && data.type === "episode" && data.nextEpisode ? `/watch/${data.nextEpisode.slug}?t=0` : undefined; - const title = - data && - (data.type === "movie" - ? data.name - : `${data.show!.name} ${episodeDisplayNumber({ - seasonNumber: data.seasonNumber, - episodeNumber: data.episodeNumber, - absoluteNumber: data.absoluteNumber, - })}`); + const title = data && formatTitleMetadata(data); + const subtitle = data && data.type === "episode" ? data.show?.name : undefined; useVideoKeyboard(info?.subtitles, info?.fonts, previous, next); @@ -145,6 +146,7 @@ export const Player = ({