From e19703122e2ed1df947bc814979d538c710916e5 Mon Sep 17 00:00:00 2001 From: Ikko Eltociear Ashimine Date: Thu, 28 Dec 2023 01:09:03 +0900 Subject: [PATCH 01/32] Fix typo in player/README.md seperate -> separate --- src/components/player/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/player/README.md b/src/components/player/README.md index 404e138a..3e3bc0c6 100644 --- a/src/components/player/README.md +++ b/src/components/player/README.md @@ -12,7 +12,7 @@ These parts are internally used, they aren't exported. Do not use them outside o ### `/display` The display interface, abstraction on how to actually play the content (e.g Video element, chrome casting, etc) - - It must be completely seperate from any react code + - It must be completely separate from any react code - It must not interact with state, pass async data back with events ### `/internals` From ac0e5e692717fef0d7e21dd07f5715da88b3c5eb Mon Sep 17 00:00:00 2001 From: Astrid Date: Wed, 27 Dec 2023 22:39:38 +0100 Subject: [PATCH 02/32] Add support for playlist download --- src/components/player/atoms/settings/SettingsMenu.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/components/player/atoms/settings/SettingsMenu.tsx b/src/components/player/atoms/settings/SettingsMenu.tsx index 6e1f4d2f..14b3827f 100644 --- a/src/components/player/atoms/settings/SettingsMenu.tsx +++ b/src/components/player/atoms/settings/SettingsMenu.tsx @@ -37,6 +37,8 @@ export function SettingsMenu({ id }: { id: string }) { const source = usePlayerStore((s) => s.source); + const downloadable = source?.type === "file" || source?.type === "hls"; + return ( @@ -58,12 +60,10 @@ export function SettingsMenu({ id }: { id: string }) { - router.navigate( - source?.type === "file" ? "/download" : "/download/unable", - ) + router.navigate(downloadable ? "/download" : "/download/unable") } rightSide={} - className={source?.type === "file" ? "opacity-100" : "opacity-50"} + className={downloadable ? "opacity-100" : "opacity-50"} > {t("player.menus.settings.downloadItem")} From 7f0701ee61ca308a263eaea0c6981f25c716cc06 Mon Sep 17 00:00:00 2001 From: Astrid Date: Wed, 27 Dec 2023 22:39:56 +0100 Subject: [PATCH 03/32] Updated English locale for playlist downloads --- src/assets/locales/en.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/assets/locales/en.json b/src/assets/locales/en.json index 042cbe91..f0ef16ea 100644 --- a/src/assets/locales/en.json +++ b/src/assets/locales/en.json @@ -188,8 +188,9 @@ "downloads": { "title": "Download", "disclaimer": "Downloads are taken directly from the provider. movie-web does not have control over how the downloads are provided.", - "hlsExplanation": "This media is a HLS stream which cannot be downloaded on movie-web.", + "hlsDisclaimer": "Downloads are taken directly from the provider. movie-web does not have control over how the downloads are provided. Please note that you are downloading an HLS playlist, this is intended for users familiar with advanced multimedia streaming.", "downloadVideo": "Download video", + "downloadPlaylist": "Download playlist", "downloadCaption": "Download current caption", "onPc": { "1": "On PC, click the download button then, on the new page, right click the video and select Save video as", From 57edcbeb79924fc7a072d8379fbabd1cfb8b0363 Mon Sep 17 00:00:00 2001 From: Astrid Date: Wed, 27 Dec 2023 22:40:04 +0100 Subject: [PATCH 04/32] Playlist downloads --- .../player/atoms/settings/Downloads.tsx | 81 ++++++++++++------- 1 file changed, 54 insertions(+), 27 deletions(-) diff --git a/src/components/player/atoms/settings/Downloads.tsx b/src/components/player/atoms/settings/Downloads.tsx index 73bcf24a..4a7dcef2 100644 --- a/src/components/player/atoms/settings/Downloads.tsx +++ b/src/components/player/atoms/settings/Downloads.tsx @@ -15,6 +15,7 @@ function useDownloadLink() { const url = useMemo(() => { if (source?.type === "file" && currentQuality) return source.qualities[currentQuality]?.url ?? null; + if (source?.type === "hls") return source.url; return null; }, [source, currentQuality]); return url; @@ -42,6 +43,7 @@ export function DownloadView({ id }: { id: string }) { const { t } = useTranslation(); const downloadUrl = useDownloadLink(); + const sourceType = usePlayerStore((s) => s.source?.type); const selectedCaption = usePlayerStore((s) => s.caption?.selected); const subtitleUrl = useMemo( () => @@ -60,36 +62,61 @@ export function DownloadView({ id }: { id: string }) {
- router.navigate("/download/pc")}> - {t("player.menus.downloads.onPc.title")} - - router.navigate("/download/ios")}> - {t("player.menus.downloads.onIos.title")} - - router.navigate("/download/android")} - > - {t("player.menus.downloads.onAndroid.title")} - + {sourceType === "hls" ? ( + <> + + + - + + + + ) : ( + <> + router.navigate("/download/pc")}> + {t("player.menus.downloads.onPc.title")} + + router.navigate("/download/ios")} + > + {t("player.menus.downloads.onIos.title")} + + router.navigate("/download/android")} + > + {t("player.menus.downloads.onAndroid.title")} + - - - + - - + + + + + + + + )}
From adddb844178a3bf0a2ee72411219bcd5961047db Mon Sep 17 00:00:00 2001 From: mrjvs Date: Wed, 27 Dec 2023 23:39:32 +0100 Subject: [PATCH 05/32] Add cdn replacements --- src/components/player/display/base.ts | 7 ++++--- src/components/player/display/chromecast.ts | 3 ++- src/setup/config.ts | 7 +++++++ src/utils/cdn.ts | 14 ++++++++++++++ 4 files changed, 27 insertions(+), 4 deletions(-) create mode 100644 src/utils/cdn.ts diff --git a/src/components/player/display/base.ts b/src/components/player/display/base.ts index ad333358..7a9ce041 100644 --- a/src/components/player/display/base.ts +++ b/src/components/player/display/base.ts @@ -12,6 +12,7 @@ import { SourceQuality, getPreferredQuality, } from "@/stores/player/utils/qualities"; +import { processCdnLink } from "@/utils/cdn"; import { canChangeVolume, canFullscreen, @@ -101,7 +102,7 @@ export function makeVideoElementDisplayInterface(): DisplayInterface { function setupSource(vid: HTMLVideoElement, src: LoadableSource) { if (src.type === "hls") { if (canPlayHlsNatively(vid)) { - vid.src = src.url; + vid.src = processCdnLink(src.url); vid.currentTime = startAt; return; } @@ -151,12 +152,12 @@ export function makeVideoElementDisplayInterface(): DisplayInterface { } hls.attachMedia(vid); - hls.loadSource(src.url); + hls.loadSource(processCdnLink(src.url)); vid.currentTime = startAt; return; } - vid.src = src.url; + vid.src = processCdnLink(src.url); vid.currentTime = startAt; } diff --git a/src/components/player/display/chromecast.ts b/src/components/player/display/chromecast.ts index ecf59a3d..dbaab0df 100644 --- a/src/components/player/display/chromecast.ts +++ b/src/components/player/display/chromecast.ts @@ -8,6 +8,7 @@ import { DisplayMeta, } from "@/components/player/display/displayInterface"; import { LoadableSource } from "@/stores/player/utils/qualities"; +import { processCdnLink } from "@/utils/cdn"; import { canChangeVolume, canFullscreen, @@ -112,7 +113,7 @@ export function makeChromecastDisplayInterface( metaData.title = meta.title; const mediaInfo = new chrome.cast.media.MediaInfo("video", type); - (mediaInfo as any).contentUrl = source.url; + (mediaInfo as any).contentUrl = processCdnLink(source.url); mediaInfo.streamType = chrome.cast.media.StreamType.BUFFERED; mediaInfo.metadata = metaData; mediaInfo.customData = { diff --git a/src/setup/config.ts b/src/setup/config.ts index 2f16714b..998383c8 100644 --- a/src/setup/config.ts +++ b/src/setup/config.ts @@ -18,6 +18,7 @@ interface Config { BACKEND_URL: string; DISALLOWED_IDS: string; TURNSTILE_KEY: string; + CDN_REPLACEMENTS: string; } export interface RuntimeConfig { @@ -32,6 +33,7 @@ export interface RuntimeConfig { BACKEND_URL: string; DISALLOWED_IDS: string[]; TURNSTILE_KEY: string | null; + CDN_REPLACEMENTS: Array; } const env: Record = { @@ -46,6 +48,7 @@ const env: Record = { BACKEND_URL: import.meta.env.VITE_BACKEND_URL, DISALLOWED_IDS: import.meta.env.VITE_DISALLOWED_IDS, TURNSTILE_KEY: import.meta.env.VITE_TURNSTILE_KEY, + CDN_REPLACEMENTS: import.meta.env.VITE_CDN_REPLACEMENTS, }; // loads from different locations, in order: environment (VITE_{KEY}), window (public/config.js) @@ -84,5 +87,9 @@ export function conf(): RuntimeConfig { .split(",") .map((v) => v.trim()) .filter((v) => v.length > 0), // Should be comma-seperated and contain the media type and ID, formatted like so: movie-753342,movie-753342,movie-753342 + CDN_REPLACEMENTS: getKey("CDN_REPLACEMENTS", "") + .split(",") + .map((v) => v.split(":").map((s) => s.trim())) + .filter((v) => v.length > 0), // The format is :,: }; } diff --git a/src/utils/cdn.ts b/src/utils/cdn.ts new file mode 100644 index 00000000..bf87fb27 --- /dev/null +++ b/src/utils/cdn.ts @@ -0,0 +1,14 @@ +import { conf } from "@/setup/config"; + +export function processCdnLink(url: string): string { + const parsedUrl = new URL(url); + const replacements = conf().CDN_REPLACEMENTS; + for (const [before, after] of replacements) { + if (parsedUrl.hostname.endsWith(before)) { + parsedUrl.host = after; + return parsedUrl.toString(); + } + } + + return url; +} From 23c1df5aeffea54b534bb5fc8dfd8063db60024b Mon Sep 17 00:00:00 2001 From: mrjvs Date: Wed, 27 Dec 2023 23:52:18 +0100 Subject: [PATCH 06/32] Fix some cdn replacement bugs --- src/components/player/internals/ThumbnailScraper.tsx | 5 +++-- src/utils/cdn.ts | 4 +++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/components/player/internals/ThumbnailScraper.tsx b/src/components/player/internals/ThumbnailScraper.tsx index f238aca8..b0fc8474 100644 --- a/src/components/player/internals/ThumbnailScraper.tsx +++ b/src/components/player/internals/ThumbnailScraper.tsx @@ -5,6 +5,7 @@ import { playerStatus } from "@/stores/player/slices/source"; import { ThumbnailImage } from "@/stores/player/slices/thumbnails"; import { usePlayerStore } from "@/stores/player/store"; import { LoadableSource, selectQuality } from "@/stores/player/utils/qualities"; +import { processCdnLink } from "@/utils/cdn"; import { isSafari } from "@/utils/detectFeatures"; function makeQueue(layers: number): number[] { @@ -46,11 +47,11 @@ class ThumnbnailWorker { const canvas = document.createElement("canvas"); this.hls = new Hls(); if (source.type === "mp4") { - el.src = source.url; + el.src = processCdnLink(source.url); el.crossOrigin = "anonymous"; } else if (source.type === "hls") { this.hls.attachMedia(el); - this.hls.loadSource(source.url); + this.hls.loadSource(processCdnLink(source.url)); } else throw new Error("Invalid loadable source type"); this.videoEl = el; this.canvasEl = canvas; diff --git a/src/utils/cdn.ts b/src/utils/cdn.ts index bf87fb27..3a86336c 100644 --- a/src/utils/cdn.ts +++ b/src/utils/cdn.ts @@ -5,7 +5,9 @@ export function processCdnLink(url: string): string { const replacements = conf().CDN_REPLACEMENTS; for (const [before, after] of replacements) { if (parsedUrl.hostname.endsWith(before)) { - parsedUrl.host = after; + parsedUrl.hostname = after; + parsedUrl.port = ""; + parsedUrl.protocol = "https://"; return parsedUrl.toString(); } } From d73a9575bd939db25c1fb3bc6eac628777edc6b6 Mon Sep 17 00:00:00 2001 From: mrjvs Date: Wed, 27 Dec 2023 23:54:02 +0100 Subject: [PATCH 07/32] Improve config parsing of cdn replacements --- src/setup/config.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/setup/config.ts b/src/setup/config.ts index 998383c8..88705e24 100644 --- a/src/setup/config.ts +++ b/src/setup/config.ts @@ -89,7 +89,12 @@ export function conf(): RuntimeConfig { .filter((v) => v.length > 0), // Should be comma-seperated and contain the media type and ID, formatted like so: movie-753342,movie-753342,movie-753342 CDN_REPLACEMENTS: getKey("CDN_REPLACEMENTS", "") .split(",") - .map((v) => v.split(":").map((s) => s.trim())) + .map((v) => + v + .split(":") + .map((s) => s.trim()) + .filter((s) => s.length > 0), + ) .filter((v) => v.length > 0), // The format is :,: }; } From 7901d2c5d5225cdecb592dd0b68229cbfc244361 Mon Sep 17 00:00:00 2001 From: mrjvs Date: Thu, 28 Dec 2023 00:00:14 +0100 Subject: [PATCH 08/32] Review comments --- src/setup/config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/setup/config.ts b/src/setup/config.ts index 88705e24..2e1634a4 100644 --- a/src/setup/config.ts +++ b/src/setup/config.ts @@ -95,6 +95,6 @@ export function conf(): RuntimeConfig { .map((s) => s.trim()) .filter((s) => s.length > 0), ) - .filter((v) => v.length > 0), // The format is :,: + .filter((v) => v.length === 2), // The format is :,: }; } From d600ac7e3a97f5b48d75384eadbcbb41435ac4a2 Mon Sep 17 00:00:00 2001 From: mrjvs Date: Thu, 28 Dec 2023 00:02:37 +0100 Subject: [PATCH 09/32] bump version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 29c0d997..1649434d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "movie-web", - "version": "4.1.2", + "version": "4.1.3", "private": true, "homepage": "https://movie-web.app", "scripts": { From 96331fdf65e8adfb0432382b7abebcb7a849d79b Mon Sep 17 00:00:00 2001 From: chaos Date: Sun, 24 Dec 2023 17:43:49 +0000 Subject: [PATCH 10/32] Added translation using Weblate (Estonian) Author: chaos --- src/assets/locales/et.json | 1 + 1 file changed, 1 insertion(+) create mode 100644 src/assets/locales/et.json diff --git a/src/assets/locales/et.json b/src/assets/locales/et.json new file mode 100644 index 00000000..0967ef42 --- /dev/null +++ b/src/assets/locales/et.json @@ -0,0 +1 @@ +{} From 4a3f0464db274fd8828b8808fef9eb3a1c0afe5c Mon Sep 17 00:00:00 2001 From: teaishealthy Date: Sun, 24 Dec 2023 17:37:38 +0000 Subject: [PATCH 11/32] Translated using Weblate (German) Currently translated at 100.0% (247 of 247 strings) Translation: movie-web/website Translate-URL: http://weblate.movie-web.app/projects/movie-web/website/de/ Author: teaishealthy --- src/assets/locales/de.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/assets/locales/de.json b/src/assets/locales/de.json index 157b8095..b7033a3b 100644 --- a/src/assets/locales/de.json +++ b/src/assets/locales/de.json @@ -55,7 +55,7 @@ "text": "Hast du es korrekt konfiguriert?", "title": "Server nicht erreichbar" }, - "host": "Du verbindest dich zu <0>{{hostname}} - stelle sicher, dass du diesem vertraust, bevor du einen Account erstellst", + "host": "Du verbindest dich mit <0>{{hostname}} - stelle sicher das du dem Server vertraust bevor du ein Konto erstellst", "no": "Zurück", "title": "Vertraust du diesem Server?", "yes": "Ich vertraue diesem Server" @@ -238,7 +238,7 @@ "sources": { "failed": { "text": "Beim Versuch, Videos zu finden, ist ein Fehler aufgetreten. Bitte versuche es mit einer anderen Quelle.", - "title": "Scrapen fehlgeschlagen" + "title": "Fehler beim Laden" }, "noEmbeds": { "text": "Es konnten keine Embeds gefunden werden. Bitte versuchen es mit einer anderen Quelle.", From c50aad428acf4b95488beaf2befcd586bdbef851 Mon Sep 17 00:00:00 2001 From: Hank Dank Date: Sun, 24 Dec 2023 15:46:29 +0000 Subject: [PATCH 12/32] Translated using Weblate (Turkish) Currently translated at 100.0% (247 of 247 strings) Translation: movie-web/website Translate-URL: http://weblate.movie-web.app/projects/movie-web/website/tr/ Author: Hank Dank --- src/assets/locales/tr.json | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/src/assets/locales/tr.json b/src/assets/locales/tr.json index bc9e5a0e..95717b64 100644 --- a/src/assets/locales/tr.json +++ b/src/assets/locales/tr.json @@ -25,19 +25,20 @@ "deviceNameLabel": "Cihaz ismi", "deviceNamePlaceholder": "Kişisel telefon", "generate": { - "description": "Parolanız, kullanıcı adınız ve şifreniz olarak işlev görür. Hesabınıza giriş yapmak için bu parolayı girmeniz gerekeceğinden onu güvende tuttuğunuzdan emin olun", - "next": "Parolamı kaydettim", - "title": "Parolanız" + "description": "Şifreleme anahtarınız, kullanıcı adınız ve parolanız olarak işlev görür. Hesabınıza giriş yapmak için bu parolayı girmeniz gerekeceğinden onu güvende tuttuğunuzdan emin olun", + "next": "Şifreleme anahtarımı kaydettim", + "passphraseFrameLabel": "Şifreleme anahtarı", + "title": "Şifreleme anahtarınız" }, "hasAccount": "Zaten hesabınız var mı?<0>Giriş yapın.", "login": { - "description": "Hesabınıza giriş yapmak için lütfen parolanızı girin", + "description": "Hesabınıza giriş yapmak için lütfen şifreleme anahtarınızı girin", "deviceLengthError": "Lütfen bir cihaz ismi girin", - "passphraseLabel": "12 kelimelik parola", - "passphrasePlaceholder": "Parola", + "passphraseLabel": "12 kelimelik şifreleme anahtarı", + "passphrasePlaceholder": "Şifreleme anahtarı", "submit": "Giriş yap", "title": "Hesabınıza giriş yapın", - "validationError": "Yanlış veya eksik parola" + "validationError": "Yanlış veya eksik şifreleme anahtarı" }, "register": { "information": { @@ -55,18 +56,18 @@ "title": "Sunucuya ulaşılamadı" }, "host": "<0>{{hostname}} adlı sunucuya bağlanıyorsunuz - lütfen hesap oluşturmadan önce sunucuya güvendiğinizi onaylayın", - "no": "Geri git", + "no": "Geri dön", "title": "Bu sunucuya güveniyor musunuz?", "yes": "Bu sunucuya güveniyorum" }, "verify": { - "description": "Kaydettiğinizi doğrulamak ve hesabınızı oluşturmak için önceki aşamada gösterilen parolayı girin", + "description": "Kaydettiğinizi doğrulamak ve hesabınızı oluşturmak için önceki aşamada gösterilen şifreleme anahtarınızı girin", "invalidData": "Veri geçersiz", - "noMatch": "Parola eşleşmiyor", - "passphraseLabel": "12 kelimelik parolanız", + "noMatch": "Şifreleme anahtarı eşleşmiyor", + "passphraseLabel": "12 kelimelik şifreleme anahtarınız", "recaptchaFailed": "ReCaptcha doğrulaması başarısız", "register": "Hesap oluştur", - "title": "Parolanızı doğrulayın" + "title": "Şifreleme anahtarınızı doğrulayın" } }, "errors": { @@ -167,7 +168,7 @@ "player": { "back": { "default": "Ana sayfaya dön", - "short": "Geri" + "short": "Geri dön" }, "casting": { "enabled": "Cihaza yansıtılıyor..." @@ -374,7 +375,7 @@ "captions": { "backgroundLabel": "Arka plan opaklığı", "colorLabel": "Renk", - "previewQuote": "Korkmamalıyım. Korku aklı öldürür.", + "previewQuote": "Korkmamalıyım. Korku aklın katilidir.", "textSizeLabel": "Yazı boyutu", "title": "Altyazılar" }, From 83a892781c4de2b5485f1904857bf1f9fdc00f59 Mon Sep 17 00:00:00 2001 From: Aayush Shah Date: Sun, 24 Dec 2023 16:06:20 +0000 Subject: [PATCH 13/32] Translated using Weblate (Nepali) Currently translated at 100.0% (247 of 247 strings) Translation: movie-web/website Translate-URL: http://weblate.movie-web.app/projects/movie-web/website/ne/ Author: Aayush Shah --- src/assets/locales/ne.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/assets/locales/ne.json b/src/assets/locales/ne.json index 9860aa81..41bcc002 100644 --- a/src/assets/locales/ne.json +++ b/src/assets/locales/ne.json @@ -27,6 +27,7 @@ "generate": { "description": "तपाईंको पासफ्रेजले तपाईंको प्रयोगकर्ता नाम र पासवर्डको रूपमा कार्य गर्दछ। यसलाई सुरक्षित राख्नुहोस् किनकि तपाईंले आफ्नो खातामा लगइन गर्न आवश्यक हुनेछ", "next": "मैले मेरो पासफ्रेज सुरक्षित गरेको छु", + "passphraseFrameLabel": "पासफ्रेज", "title": "तपाईको पासफ्रेज" }, "hasAccount": "पहिले नै खाता छ? <0>यहाँ लग-इन गर्नुहोस्|", From 77744cebddecbef7effca2456ff35efffa8e611f Mon Sep 17 00:00:00 2001 From: chaos Date: Sun, 24 Dec 2023 18:48:35 +0000 Subject: [PATCH 14/32] Translated using Weblate (Estonian) Currently translated at 47.7% (118 of 247 strings) Translation: movie-web/website Translate-URL: http://weblate.movie-web.app/projects/movie-web/website/et/ Author: chaos --- src/assets/locales/et.json | 193 ++++++++++++++++++++++++++++++++++++- 1 file changed, 192 insertions(+), 1 deletion(-) diff --git a/src/assets/locales/et.json b/src/assets/locales/et.json index 0967ef42..1ee51cdb 100644 --- a/src/assets/locales/et.json +++ b/src/assets/locales/et.json @@ -1 +1,192 @@ -{} +{ + "auth": { + "createAccount": "Ei ole kontot veel?<0>Loo konto.", + "deviceNameLabel": "Seadme nimi", + "deviceNamePlaceholder": "Isiklik telefon", + "generate": { + "description": "Teie parool toimib teie kasutajanime ja paroolina. Veenduge, et see oleks ohutus kohas, kuna peate kasutama seda, et logida oma kontosse sisse", + "next": "Olen salvestanud oma parooli", + "passphraseFrameLabel": "Parool", + "title": "Sinu parool" + }, + "hasAccount": "On juba konto? <0>Logi sisse siin.", + "login": { + "description": "Palun sisestage parool, et logida kontosse sisse", + "deviceLengthError": "Palun sisesta seadme nimi", + "passphraseLabel": "12-Sõnaline parool", + "passphrasePlaceholder": "Parool", + "submit": "Logi sisse", + "title": "Logi sisse oma kontosse", + "validationError": "Vale vōi mittetäielik parool" + }, + "register": { + "information": { + "color1": "Profiili värv üks", + "color2": "Profiili värv kaks", + "header": "Sisestage oma seadme nimi ja valige värvid ning kasutajaikoon", + "icon": "Kasutaja ikoon", + "next": "Järgmine", + "title": "Kontoteave" + } + }, + "trust": { + "failed": { + "text": "Kas sa seadistasid selle õigesti?", + "title": "Serveriga ühenduse loomine ebaõnnestus" + }, + "host": "Ühendate <0>{{hostname}} - enne konto tegemist kinnitage, et usaldate seda", + "no": "Tagasi", + "title": "Kas usaldate seda serverit?", + "yes": "Usaldan seda serverit" + }, + "verify": { + "description": "Palun sisestage oma salasõna, et kinnitada, et olete selle salvestanud ja luua oma konto", + "invalidData": "Andmed ei kehti", + "noMatch": "Parool ei klapi", + "passphraseLabel": "Sinu 12-sõnaline parool", + "recaptchaFailed": "ReCaptcha valideerimine ebaõnnestua", + "register": "Loo konto", + "title": "Kinnita oma parool" + } + }, + "errors": { + "badge": "Läks katki", + "details": "Vea üksikasjad", + "reloadPage": "Värskenda leht", + "showError": "Näita vea üksikasju", + "title": "Tekkis viga!" + }, + "global": { + "name": "movie-web", + "pages": { + "about": "Meist", + "dmca": "DMCA", + "login": "Logi sisse", + "pagetitle": "{{title}} - movie-web", + "register": "Registreeri", + "settings": "Sätted" + } + }, + "media": { + "episodeDisplay": "S{{season}} E{{episode}}", + "types": { + "movie": "Film", + "show": "Saade" + } + }, + "notFound": { + "badge": "Ei leitud", + "goHome": "Tagasi koju", + "message": "Otsisime kõikjalt: prügikastide alt, kapist, proksi tagant, kuid lõpuks ei leidnud otsitud lehte.", + "title": "Ei leidnud seda lehekülge" + }, + "player": { + "back": { + "default": "Tagasi koju", + "short": "Tagasi" + }, + "menus": { + "captions": { + "customChoice": "Vali subtiitrid failist", + "customizeLabel": "Kohanda", + "offChoice": "Välja", + "settings": { + "delay": "Subtiitri viivitus", + "fixCapitals": "Paranda kapitaliseerimine" + }, + "title": "Subtiitrid", + "unknownLanguage": "Teadmata" + }, + "downloads": { + "disclaimer": "Allalaadimine toimub otse teenusepakkujalt. movie-web ei saa kontrollida, kuidas allalaadimine toimub.", + "hlsExplanation": "See meedia on HLS voog, mida ei saa alla laadida", + "title": "Lae alla" + }, + "episodes": { + "button": "Episoodid", + "emptyState": "Selles hooajas puuduvad episoodid, vaadake hiljem uuesti!", + "episodeBadge": "E{{episode}}", + "loadingError": "Hooaja laadimine ebaōnnestus", + "loadingList": "Laadimine...", + "loadingTitle": "Laadimine..." + }, + "settings": { + "captionItem": "Subtiitrite sätted", + "downloadItem": "Lae alla", + "enableCaptions": "Luba subtiitrid", + "experienceSection": "Vaatamise kogemus", + "playbackItem": "Taasesituse sätted", + "qualityItem": "Kvaliteet", + "sourceItem": "Video allikad", + "videoSection": "Video sätted" + }, + "sources": { + "failed": { + "text": "Videote leidmisel tekkis viga, palun proovige mõnda muud allikat.", + "title": "Ei õnnestunud kraapida" + }, + "noEmbeds": { + "text": "Me ei leidnud ühtegi manust, proovige twist allikat.", + "title": "Ei leitud manuseid" + }, + "noStream": { + "text": "Sellel allikal ei ole selle filmi või seriaali jaoks ühtegi voogedastust.", + "title": "Puudub voog" + }, + "title": "Allikad", + "unknownOption": "Teadmata" + } + }, + "metadata": { + "failed": { + "badge": "Ebaōnnestus", + "homeButton": "Mine koju", + "text": "Meedia metaandmeid ei õnnestunud TMDB-st laadida. Palun kontrollige, kas TMDB on maas või see on teie internetiühenduses blokeeritud.", + "title": "Metaandmete laadimine ebaõnnestus" + }, + "notFound": { + "badge": "Ei leitud", + "homeButton": "Tagasi koju", + "text": "Me ei leidnud teie soovitud meediat. Kas see on eemaldatud või olete URL-i muutnud.", + "title": "Ei leidnud seda meediat." + } + }, + "nextEpisode": { + "cancel": "Tühista", + "next": "Järgmine episood" + }, + "playbackError": { + "badge": "Taasesituse viga", + "errors": { + "errorAborted": "Meedia kättesaamine katkestati kasutaja taotlusel.", + "errorDecode": "Vaatamata sellele, et eelnevalt oli kindlaks tehtud, et see on kasutatav, tekkis viga meediaressursi dekodeerimisel, mille tulemuseks oli viga.", + "errorGenericMedia": "Tekkis tundmatu meediaviga.", + "errorNetwork": "Tekkis võrguviga, mis takistas meedia edukat kättesaamist, kuigi see oli varem saadaval.", + "errorNotSupported": "Meedia või meediapakkuja objekt ei ole toetatud." + }, + "homeButton": "Mine koju", + "text": "Tekkis viga meedia mängimisel. Palun proovige uuesti.", + "title": "Video mängimine ebaōnnestus!" + }, + "scraping": { + "items": { + "failure": "Tekkis viga", + "notFound": "Ei ole videot", + "pending": "Otsin videoid..." + }, + "notFound": { + "badge": "Ei leitud", + "detailsButton": "Näita üksikasju", + "homeButton": "Mine koju", + "text": "Me otsisime läbi meie teenusepakkujad ja ei leidnud teie poolt otsitud meediat! Me ei halda meediat ja meil ei ole kontrolli selle üle, mis on saadaval. Täpsema teabe saamiseks klõpsake allpool nupule \"Näita üksikasju\".", + "title": "Me ei leidnud seda" + } + }, + "time": { + "regular": "{{timeWatched}} / {{duration}}", + "remaining": "{{timeLeft}} alles • Lõppeb {{timeFinished, datetime}}", + "shortRegular": "{{timeWatched}}", + "shortRemaining": "-{{timeLeft}}" + } + } +} From b6fdbe77fa47720e482aca4692cd2f887726e9d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafael=20Contreras=20Rodr=C3=ADguez?= Date: Mon, 25 Dec 2023 08:44:48 +0000 Subject: [PATCH 15/32] Added translation using Weblate (Spanish) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Author: Rafael Contreras Rodríguez --- src/assets/locales/es.json | 1 + 1 file changed, 1 insertion(+) create mode 100644 src/assets/locales/es.json diff --git a/src/assets/locales/es.json b/src/assets/locales/es.json new file mode 100644 index 00000000..0967ef42 --- /dev/null +++ b/src/assets/locales/es.json @@ -0,0 +1 @@ +{} From 53e0dbb0cbb4dffa1506803ee19f7c9fd3a46dd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafael=20Contreras=20Rodr=C3=ADguez?= Date: Mon, 25 Dec 2023 09:11:46 +0000 Subject: [PATCH 16/32] Translated using Weblate (Spanish) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 100.0% (247 of 247 strings) Translation: movie-web/website Translate-URL: http://weblate.movie-web.app/projects/movie-web/website/es/ Author: Rafael Contreras Rodríguez --- src/assets/locales/es.json | 422 ++++++++++++++++++++++++++++++++++++- 1 file changed, 421 insertions(+), 1 deletion(-) diff --git a/src/assets/locales/es.json b/src/assets/locales/es.json index 0967ef42..298b1138 100644 --- a/src/assets/locales/es.json +++ b/src/assets/locales/es.json @@ -1 +1,421 @@ -{} +{ + "about": { + "description": "movie-web es una aplicación web que busca transmisiones en internet. El equipo tiene como objetivo un enfoque principalmente minimalista para consumir contenido.", + "faqTitle": "Preguntas frecuentes", + "q1": { + "body": "movie-web no aloja ningún contenido. Cuando haces clic en algo para ver, se busca en internet el medio seleccionado (En la pantalla de carga y en la pestaña 'fuentes de vídeo' puedes ver qué fuente estás utilizando). El contenido nunca se carga en movie-web, todo se realiza a través de este mecanismo de búsqueda.", + "title": "¿De dónde proviene el contenido?" + }, + "q2": { + "body": "No es posible solicitar una serie o película, movie-web no gestiona ningún contenido. Todo el contenido se ve a través de fuentes en internet.", + "title": "¿Dónde puedo solicitar una serie o película?" + }, + "q3": { + "body": "Nuestros resultados de búsqueda están alimentados por The Movie Database (TMDB) y se muestran independientemente de si nuestras fuentes realmente tienen el contenido.", + "title": "Los resultados de búsqueda muestran la serie o película, ¿por qué no puedo reproducirla?" + }, + "title": "Acerca de movie-web" + }, + "actions": { + "copied": "Copiado", + "copy": "Copiar" + }, + "auth": { + "createAccount": "¿Todavía no tienes una cuenta? <0>Crea una cuenta.", + "deviceNameLabel": "Nombre del dispositivo", + "deviceNamePlaceholder": "Teléfono personal", + "generate": { + "description": "Tu frase de contraseña actúa como tu nombre de usuario y contraseña. Asegúrate de mantenerlas seguras, ya que las necesitarás para iniciar sesión en tu cuenta", + "next": "He guardado mi frase de contraseña", + "passphraseFrameLabel": "Frase de contraseña", + "title": "Tu frase de contraseña" + }, + "hasAccount": "¿Ya tienes una cuenta? <0>Inicia sesión aquí.", + "login": { + "description": "Por favor, ingresa tu frase de contraseña para iniciar sesión en tu cuenta", + "deviceLengthError": "Por favor, ingresa un nombre de dispositivo", + "passphraseLabel": "Frase de contraseña de 12 palabras", + "passphrasePlaceholder": "Frase de contraseña", + "submit": "Iniciar sesión", + "title": "Inicia sesión en tu cuenta", + "validationError": "Contraseña incorrecta o incompleta" + }, + "register": { + "information": { + "color1": "Color de perfil uno", + "color2": "Color de perfil dos", + "header": "Ingresa un nombre para tu dispositivo, elige colores, y un ícono de usuario de tu elección", + "icon": "Ícono de usuario", + "next": "Siguiente", + "title": "Información de la cuenta" + } + }, + "trust": { + "failed": { + "text": "¿Lo configuraste correctamente?", + "title": "No se pudo conectar al servidor" + }, + "host": "Te estás conectando a <0>{{hostname}} - por favor, confirma si confías en este antes de crear una cuenta", + "no": "Regresar", + "title": "¿Confías en este servidor?", + "yes": "Confío en este servidor" + }, + "verify": { + "description": "Por favor, ingresa tu frase de contraseña anterior para confirmar que la has guardado y para crear tu cuenta", + "invalidData": "Los datos no son válidos", + "noMatch": "La frase de contraseña no coincide", + "passphraseLabel": "Tu frase de contraseña de 12 palabras", + "recaptchaFailed": "La validación de ReCaptcha falló", + "register": "Crear cuenta", + "title": "Confirma tu frase de contraseña" + } + }, + "errors": { + "badge": "Se descompuso", + "details": "Detalles del error", + "reloadPage": "Recargar la página", + "showError": "Mostrar detalles del error", + "title": "¡Encontramos un error!" + }, + "footer": { + "legal": { + "disclaimer": "Descargo de responsabilidad", + "disclaimerText": "movie-web no aloja ningún archivo, simplemente enlaza a servicios de terceros. Los problemas legales deben ser tratados con los proveedores de archivos y servicios. movie-web no se hace responsable de los archivos multimedia mostrados por los proveedores de vídeo." + }, + "links": { + "discord": "Discord", + "dmca": "DMCA", + "github": "GitHub" + }, + "tagline": "Ve tus series y películas favoritas con esta aplicación de transmisión de código abierto." + }, + "global": { + "name": "movie-web", + "pages": { + "about": "Acerca de", + "dmca": "DMCA", + "login": "Iniciar sesión", + "pagetitle": "{{title}} - movie-web", + "register": "Registrarse", + "settings": "Configuración" + } + }, + "home": { + "bookmarks": { + "sectionTitle": "Marcadores" + }, + "continueWatching": { + "sectionTitle": "Continuar viendo" + }, + "mediaList": { + "stopEditing": "Detener edición" + }, + "search": { + "allResults": "¡Eso es todo lo que tenemos!", + "failed": "¡Error al encontrar contenido, inténtalo de nuevo!", + "loading": "Cargando...", + "noResults": "¡No pudimos encontrar nada!", + "placeholder": "¿Qué te gustaría ver?", + "sectionTitle": "Resultados de búsqueda" + }, + "titles": { + "day": { + "default": "¿Qué te gustaría ver esta tarde?" + }, + "morning": { + "default": "¿Qué te gustaría ver esta mañana?", + "extra": [ + "Escuché que “Antes del amanecer” es buena" + ] + }, + "night": { + "default": "¿Qué te gustaría ver esta noche?", + "extra": [ + "¿Cansado? Escuché que “El Exorcista” es buena." + ] + } + } + }, + "media": { + "episodeDisplay": "T{{season}} E{{episode}}", + "types": { + "movie": "Película", + "show": "Serie" + } + }, + "navigation": { + "banner": { + "offline": "Verifica tu conexión a internet" + }, + "menu": { + "about": "Acerca de nosotros", + "donation": "Donar", + "logout": "Cerrar sesión", + "register": "Sincronizar con la nube", + "settings": "Configuración", + "support": "Soporte" + } + }, + "notFound": { + "badge": "No encontrado", + "goHome": "Volver a inicio", + "message": "Buscamos en todas partes: debajo de los contenedores, en el armario, detrás del proxy, pero al final no pudimos encontrar la página que estás buscando.", + "title": "No se puede encontrar esa página" + }, + "overlays": { + "close": "Cerrar" + }, + "player": { + "back": { + "default": "Volver al inicio", + "short": "Volver" + }, + "casting": { + "enabled": "Transmitiendo a dispositivo..." + }, + "menus": { + "captions": { + "customChoice": "Seleccionar subtítulo desde un archivo", + "customizeLabel": "Personalizar", + "offChoice": "Apagado", + "settings": { + "delay": "Retraso de subtítulos", + "fixCapitals": "Corregir mayúsculas" + }, + "title": "Subtítulos", + "unknownLanguage": "Desconocido" + }, + "downloads": { + "disclaimer": "Las descargas se realizan directamente desde el proveedor. movie-web no tiene control sobre cómo se proporcionan las descargas.", + "downloadCaption": "Descargar subtítulo actual", + "downloadVideo": "Descargar vídeo", + "hlsExplanation": "Este contenido es una transmisión HLS que no se puede descargar en movie-web.", + "onAndroid": { + "1": "Para descargar en Android, haz clic en el botón de descarga y luego, en la nueva página, mantén presionado el vídeo y selecciona guardar.", + "shortTitle": "Descargar / Android", + "title": "Descargando en Android" + }, + "onIos": { + "1": "Para descargar en iOS, haz clic en el botón de descarga y luego, en la nueva página, haz clic en , luego Guardar en archivos .", + "shortTitle": "Descargar / iOS", + "title": "Descargando en iOS" + }, + "onPc": { + "1": "En una PC, haz clic en el botón de descarga y luego, en la nueva página, haz clic derecho en el vídeo y selecciona Guardar vídeo como...", + "shortTitle": "Descargar / PC", + "title": "Descargando en PC" + }, + "title": "Descargar" + }, + "episodes": { + "button": "Episodios", + "emptyState": "No hay episodios en esta temporada, ¡Intenta más tarde!", + "episodeBadge": "E{{episode}}", + "loadingError": "Error al cargar la temporada", + "loadingList": "Cargando...", + "loadingTitle": "Cargando..." + }, + "playback": { + "speedLabel": "Velocidad de reproducción", + "title": "Configuración de reproducción" + }, + "quality": { + "automaticLabel": "Calidad automática", + "hint": "Puedes intentar <0>cambiar de fuente para obtener diferentes opciones de calidad.", + "iosNoQuality": "Debido a limitaciones definidas por Apple, la selección de calidad no está disponible en iOS para esta fuente. Puedes intentar <0>cambiar a otra fuente para obtener diferentes opciones de calidad.", + "title": "Calidad" + }, + "settings": { + "captionItem": "Configuración de subtítulos", + "downloadItem": "Descargar", + "enableCaptions": "Habilitar subtítulos", + "experienceSection": "Experiencia de visualización", + "playbackItem": "Configuración de reproducción", + "qualityItem": "Calidad", + "sourceItem": "Fuentes de vídeo", + "videoSection": "Configuración de vídeo" + }, + "sources": { + "failed": { + "text": "Se produjo un error al intentar encontrar vídeos, por favor intenta con una fuente diferente.", + "title": "Error al obtener" + }, + "noEmbeds": { + "text": "No pudimos encontrar ninguna embed, por favor intenta con una fuente diferente.", + "title": "No se encontraron embeds" + }, + "noStream": { + "text": "Esta fuente no tiene transmisiones para esta película o serie.", + "title": "Sin transmisión" + }, + "title": "Fuentes", + "unknownOption": "Desconocida" + } + }, + "metadata": { + "failed": { + "badge": "Error", + "homeButton": "Ir al inicio", + "text": "No se pudieron cargar los metadatos del contenido de TMDB. Por favor, verifica si TMDB está caído o bloqueado en tu conexión a internet.", + "title": "Error al cargar los metadatos" + }, + "notFound": { + "badge": "No encontrado", + "homeButton": "Volver al inicio", + "text": "No pudimos encontrar el contenido que solicitaste. Ya sea que se haya eliminado o se haya modificado la URL.", + "title": "No se pudo encontrar ese contenido." + } + }, + "nextEpisode": { + "cancel": "Cancelar", + "next": "Siguiente episodio" + }, + "playbackError": { + "badge": "Error de reproducción", + "errors": { + "errorAborted": "La obtención del contenido fue cancelada por solicitud del usuario.", + "errorDecode": "A pesar de haber sido determinado previamente como utilizable, se produjo un error al intentar decodificar el recurso del contenido, lo que resultó en un error.", + "errorGenericMedia": "Se produjo un error desconocido en el contenido.", + "errorNetwork": "Se produjo un error de red que impidió obtener el contenido de manera exitosa, a pesar de haber estado disponible anteriormente.", + "errorNotSupported": "El contenido o el proveedor del contenido no es compatible." + }, + "homeButton": "Ir al inicio", + "text": "Se produjo un error al intentar reproducir el contenido. Por favor, inténtalo de nuevo.", + "title": "¡No se pudo reproducir el vídeo!" + }, + "scraping": { + "items": { + "failure": "Ocurrió un error", + "notFound": "No tiene el vídeo", + "pending": "Verificando vídeos..." + }, + "notFound": { + "badge": "No encontrado", + "detailsButton": "Mostrar detalles", + "homeButton": "Ir al inicio", + "text": "Hemos buscado en nuestros proveedores y no podemos encontrar el contenido que estás buscando. No alojamos el contenido y no tenemos control sobre lo que está disponible. Haz clic en 'Mostrar detalles' a continuación para obtener más información.", + "title": "No pudimos encontrar eso" + } + }, + "time": { + "regular": "{{timeWatched}} / {{duration}}", + "remaining": "{{timeLeft}} restante • Finaliza a las {{timeFinished, datetime}}", + "shortRegular": "{{timeWatched}}", + "shortRemaining": "-{{timeLeft}}" + } + }, + "screens": { + "dmca": { + "text": "¡Bienvenido a la página de contacto DMCA de movie-web! Respetamos los derechos de propiedad intelectual y queremos abordar cualquier problema de derechos de autor de manera rápida. Si cree que su trabajo con derechos de autor se ha utilizado incorrectamente en nuestra plataforma, envíe un aviso DMCA detallado al correo electrónico que se muestra a continuación. Incluya una descripción del material con derechos de autor, sus datos de contacto y una declaración de buena fe. Estamos comprometidos a resolver estos asuntos de manera pronta y agradecemos su cooperación para mantener a movie-web como un lugar que respeta la creatividad y los derechos de autor.", + "title": "DMCA" + }, + "loadingApp": "Cargando la aplicación", + "loadingUser": "Cargando tu perfil", + "loadingUserError": { + "logout": "Cerrar sesión", + "reset": "Restablecer servidor personalizado", + "text": "Error al cargar tu perfil", + "textWithReset": "Error al cargar tu perfil desde tu servidor personalizado, ¿Quieres restablecerlo al servidor predeterminado?" + }, + "migration": { + "failed": "Error al migrar tus datos.", + "inProgress": "Por favor espera, estamos migrando tus datos. Esto no debería tomar mucho tiempo." + } + }, + "settings": { + "account": { + "accountDetails": { + "deviceNameLabel": "Nombre del dispositivo", + "deviceNamePlaceholder": "Teléfono personal", + "editProfile": "Editar", + "logoutButton": "Cerrar sesión" + }, + "actions": { + "delete": { + "button": "Eliminar cuenta", + "confirmButton": "Eliminar cuenta", + "confirmDescription": "¿Estás seguro de que quieres eliminar tu cuenta? ¡Todos tus datos se perderán!", + "confirmTitle": "¿Estás seguro?", + "text": "Esta acción es irreversible. Todos los datos se eliminarán y no se podrán recuperar.", + "title": "Eliminar cuenta" + }, + "title": "Acciones" + }, + "devices": { + "deviceNameLabel": "Nombre del dispositivo", + "failed": "Error al cargar las sesiones", + "removeDevice": "Eliminar", + "title": "Dispositivos" + }, + "profile": { + "finish": "Finalizar edición", + "firstColor": "Color de perfil uno", + "secondColor": "Color de perfil dos", + "title": "Editar imagen de perfil", + "userIcon": "Icono de usuario" + }, + "register": { + "cta": "Empezar", + "text": "Comparte tu progreso de visualización entre dispositivos y manténlos sincronizados.", + "title": "Sincronizar con la nube" + }, + "title": "Cuenta" + }, + "appearance": { + "activeTheme": "Activo", + "themes": { + "blue": "Azul", + "default": "Predeterminado", + "gray": "Gris", + "red": "Rojo", + "teal": "Turquesa" + }, + "title": "Apariencia" + }, + "captions": { + "backgroundLabel": "Opacidad del fondo", + "colorLabel": "Color", + "previewQuote": "No debo temer. El miedo es el asesino de la mente.", + "textSizeLabel": "Tamaño del texto", + "title": "Subtítulos" + }, + "connections": { + "server": { + "description": "Si deseas conectarte a un backend personalizado para almacenar tus datos, habilita esto y proporciona la URL.", + "label": "Servidor personalizado", + "urlLabel": "URL del servidor personalizado" + }, + "title": "Conexiones", + "workers": { + "addButton": "Agregar nuevo worker", + "description": "Para que la aplicación funcione, todo el tráfico se enruta a través de proxies. Habilita esto si quieres usar tus propios workers.", + "emptyState": "Aún no hay workers, agrega uno a continuación", + "label": "Usar proxy workers personalizados", + "urlLabel": "URL de los workers", + "urlPlaceholder": "https://" + } + }, + "locale": { + "language": "Idioma de la aplicación", + "languageDescription": "Idioma aplicado a toda la aplicación.", + "title": "Idioma" + }, + "reset": "Restablecer", + "save": "Guardar", + "sidebar": { + "info": { + "appVersion": "Versión de la aplicación", + "backendUrl": "URL del backend", + "backendVersion": "Versión del backend", + "hostname": "Nombre de host", + "insecure": "No seguro", + "notLoggedIn": "No has iniciado sesión", + "secure": "Seguro", + "title": "Información de la aplicación", + "unknownVersion": "Desconocida", + "userId": "ID de usuario" + } + }, + "unsaved": "Tienes cambios sin guardar" + } +} From 6bd2e1df5a4e52bd6c2f1bddd65266b33298683f Mon Sep 17 00:00:00 2001 From: chaos Date: Sun, 24 Dec 2023 18:59:13 +0000 Subject: [PATCH 17/32] Translated using Weblate (Estonian) Currently translated at 63.9% (158 of 247 strings) Translation: movie-web/website Translate-URL: http://weblate.movie-web.app/projects/movie-web/website/et/ Author: chaos --- src/assets/locales/et.json | 92 +++++++++++++++++++++++++++++++++++++- 1 file changed, 91 insertions(+), 1 deletion(-) diff --git a/src/assets/locales/et.json b/src/assets/locales/et.json index 1ee51cdb..bed3ea8e 100644 --- a/src/assets/locales/et.json +++ b/src/assets/locales/et.json @@ -1,4 +1,13 @@ { + "about": { + "description": "movie-web on veebirakendus, mis otsib internetti voogude jaoks. Meeskonna eesmärk on enamasti minimalistlik lähenemine sisu tarbimisele.", + "q1": { + "body": "movie-web ei hoiusta enda sisu. Kui klõpsate, et midagi vaadata, otsitakse valitud meediat internetist (laadimisekraanil ja vahekaardil \"videoallikad\" näete, millist allikat te kasutate). Meediat ei lae movie-web kunagi üles, kõik toimub selle otsingumehhanismi kaudu." + }, + "q2": { + "body": "Saadet või filmi ei ole võimalik taotelda, movie-web ei halda mingit sisu. Kogu sisu vaadatakse interneti allikate kaudu." + } + }, "auth": { "createAccount": "Ei ole kontot veel?<0>Loo konto.", "deviceNameLabel": "Seadme nimi", @@ -56,6 +65,11 @@ "showError": "Näita vea üksikasju", "title": "Tekkis viga!" }, + "footer": { + "legal": { + "disclaimerText": "movie-web ei hoiusta ühtegi faili, vaid ainult lingib kolmandate osapoolte teenustele. Juriidilised küsimused tuleks lahendada failihostide ja teenusepakkujatega. movie-web ei vastuta videopakkujate poolt näidatud meediafailide eest." + } + }, "global": { "name": "movie-web", "pages": { @@ -67,6 +81,42 @@ "settings": "Sätted" } }, + "home": { + "bookmarks": { + "sectionTitle": "Järjehoidjad" + }, + "continueWatching": { + "sectionTitle": "Jätka vaatamist" + }, + "mediaList": { + "stopEditing": "Lõpeta redigeerimine" + }, + "search": { + "allResults": "See on kõik, mis meil on!", + "failed": "Meedia leidmine ebaõnnestus, proovige uuesti!", + "loading": "Laadimine....", + "noResults": "Me ei leidnud midagi!", + "placeholder": "Mida tahate vaadata?", + "sectionTitle": "Otsingutulemused" + }, + "titles": { + "day": { + "default": "Mida te soovite täna pärastlõunal vaadata?" + }, + "morning": { + "default": "Mida te soovite täna hommikul vaadata?", + "extra": [ + "Ma kuulsin, et Before Sunrise on hea" + ] + }, + "night": { + "default": "Mida te soovite täna õhtul vaadata?", + "extra": [ + "Väsinud? Olen kuulnud, et The Exorcist on hea." + ] + } + } + }, "media": { "episodeDisplay": "S{{season}} E{{episode}}", "types": { @@ -80,6 +130,9 @@ "message": "Otsisime kõikjalt: prügikastide alt, kapist, proksi tagant, kuid lõpuks ei leidnud otsitud lehte.", "title": "Ei leidnud seda lehekülge" }, + "overlays": { + "close": "Sulge" + }, "player": { "back": { "default": "Tagasi koju", @@ -99,7 +152,24 @@ }, "downloads": { "disclaimer": "Allalaadimine toimub otse teenusepakkujalt. movie-web ei saa kontrollida, kuidas allalaadimine toimub.", - "hlsExplanation": "See meedia on HLS voog, mida ei saa alla laadida", + "downloadCaption": "Lae alla praegused subtiitrid", + "downloadVideo": "Lae alla video", + "hlsExplanation": "See meedia on HLS voog, mida ei saa alla laadida.", + "onAndroid": { + "1": "Et allalaadida Androidi telefonil, vajuta allalaadimise nupule, siis uuel leheküljel vajuta ja hoia video peal, siis vali salvesta.", + "shortTitle": "Allalaadimine / Android", + "title": "Androidil allalaadimine" + }, + "onIos": { + "1": "Et allalaadida iOS telefonil, vajuta allalaadimise nupule, siis uuel leheküljel vajuta , siis Salvesta failidesse ", + "shortTitle": "Allalaadimine / iOS", + "title": "iOSil allalaadimine" + }, + "onPc": { + "1": "Klõpsake arvutis allalaadimise nupule, seejärel klõpsake uuel lehel parema klõpsuga videol ja valige Salvesta video", + "shortTitle": "Allalaadimine / Arvutis", + "title": "Arvutis allalaadimine" + }, "title": "Lae alla" }, "episodes": { @@ -110,6 +180,16 @@ "loadingList": "Laadimine...", "loadingTitle": "Laadimine..." }, + "playback": { + "speedLabel": "Taasesituse kiirus", + "title": "Taasesituse sätted" + }, + "quality": { + "automaticLabel": "Automaatne kvaliteet", + "hint": "Võid proovida <0>vahetada allikat, et saada teisi kvaliteedi valikuid.", + "iosNoQuality": "Apple'i poolt määratletud piirangute tõttu ei ole sellel allikal kvaliteedivalik saadaval. Te võite proovida <0>vahetada teisele allikale, et saada erinevaid kvaliteedivalikuid.", + "title": "Kvaliteet" + }, "settings": { "captionItem": "Subtiitrite sätted", "downloadItem": "Lae alla", @@ -188,5 +268,15 @@ "shortRegular": "{{timeWatched}}", "shortRemaining": "-{{timeLeft}}" } + }, + "screens": { + "dmca": { + "text": "Tere tulemast movie-webi DMCA kontaktilehele! Me austame intellektuaalomandi õigusi ja soovime kiiresti lahendada kõik autoriõigusega seotud probleemid. Kui usute, et teie autoriõigusega kaitstud tööd on meie platvormil vääralt kasutatud, saatke palun üksikasjalik DMCA-teade alljärgnevale e-posti aadressile. Palun lisage autoriõigusega kaitstud materjali kirjeldus, oma kontaktandmed ja avaldus heauskse veendumuse kohta. Oleme pühendunud nende küsimuste kiirele lahendamisele ja hindame teie koostööd, et movie-web oleks koht, kus austatakse loovust ja autoriõigusi." + }, + "loadingApp": "Rakenduse laadimine", + "loadingUser": "Teie profiili laadimine", + "loadingUserError": { + "text": "Profiili laadimine ebaōnnestus" + } } } From 240e662d0c979f91f38b12509fa3575b27a0f334 Mon Sep 17 00:00:00 2001 From: jan Kukisulasu Date: Tue, 26 Dec 2023 18:31:27 +0000 Subject: [PATCH 18/32] Added translation using Weblate (Toki Pona) Author: jan Kukisulasu --- src/assets/locales/tok.json | 1 + 1 file changed, 1 insertion(+) create mode 100644 src/assets/locales/tok.json diff --git a/src/assets/locales/tok.json b/src/assets/locales/tok.json new file mode 100644 index 00000000..0967ef42 --- /dev/null +++ b/src/assets/locales/tok.json @@ -0,0 +1 @@ +{} From d14e6de414f95a94bd718da28a437a72babd1551 Mon Sep 17 00:00:00 2001 From: jan Kukisulasu Date: Tue, 26 Dec 2023 18:43:04 +0000 Subject: [PATCH 19/32] Translated using Weblate (Toki Pona) Currently translated at 87.0% (215 of 247 strings) Translation: movie-web/website Translate-URL: http://weblate.movie-web.app/projects/movie-web/website/tok/ Author: jan Kukisulasu --- src/assets/locales/tok.json | 372 +++++++++++++++++++++++++++++++++++- 1 file changed, 371 insertions(+), 1 deletion(-) diff --git a/src/assets/locales/tok.json b/src/assets/locales/tok.json index 0967ef42..5817986c 100644 --- a/src/assets/locales/tok.json +++ b/src/assets/locales/tok.json @@ -1 +1,371 @@ -{} +{ + "about": { + "title": "ilo Muwi-We la" + }, + "actions": { + "copied": "sama a", + "copy": "o sama" + }, + "auth": { + "createAccount": "sina jo ala e lipu open la <0>o pali e lipu open", + "deviceNameLabel": "nimi ilo", + "deviceNamePlaceholder": "ilo mi", + "generate": { + "description": "nimi open sina li lon nasin open pi lipu open sina. o awen pona e ona. sina open e lipu open sina la sina wile pana e nimi open ale sina", + "next": "mi jo e nimi open mi", + "passphraseFrameLabel": "nimi open", + "title": "nimi open sina" + }, + "hasAccount": "sina jo e lipu open la <0>o pana e nimi sina", + "login": { + "description": "lipu open sina la o sitelen e nimi ale sina", + "deviceLengthError": "o pana e nimi ilo", + "passphraseLabel": "nimi open 12", + "passphrasePlaceholder": "nimi open", + "submit": "o open", + "title": "o pana e nimi sina", + "validationError": "pakala" + }, + "register": { + "information": { + "color1": "kule nanpa wan", + "color2": "kule nanpa tu", + "header": "o pana e nimi pi ilo sina e kule e sitelen", + "icon": "sitelen", + "next": "o pana", + "title": "lipu open" + } + }, + "trust": { + "failed": { + "text": "nasin ale sina li pona anu seme?", + "title": "toki tawa lawa ilo li pakala" + }, + "host": "lawa ilo sina li <0>{{hostname}} - ona li pona tawa sina la sina ken pali e lipu open", + "no": "o weka", + "title": "lawa ilo ni li pona tawa sina anu seme?", + "yes": "lawa ilo ni li pona" + }, + "verify": { + "description": "sina awen e nimi open sina la o pana e nimi open", + "invalidData": "pakala", + "noMatch": "nimi li sama ala", + "passphraseLabel": "nimi open 12 sina", + "recaptchaFailed": "nasin ReCaptcha li pakala", + "register": "o pali e lipu open", + "title": "nimi open sina" + } + }, + "errors": { + "badge": "pakala a", + "details": "pakala", + "reloadPage": "o sin e lipu", + "showError": "o pana e sona pakala", + "title": "mi kama pakala a!" + }, + "footer": { + "legal": { + "disclaimer": "o sona e ni:" + }, + "links": { + "discord": "kulupu Siko", + "dmca": "DMCA", + "github": "lipu Kita" + }, + "tagline": "o lukin e sitelen ale pi wile sina kepeken ilo ni" + }, + "global": { + "name": "ilo Muwi-We", + "pages": { + "about": "o sona", + "dmca": "DMCA", + "login": "o open", + "pagetitle": "{{title}} - ilo Muwi-We", + "register": "o pali open", + "settings": "o ante" + } + }, + "home": { + "bookmarks": { + "sectionTitle": "poki awen" + }, + "continueWatching": { + "sectionTitle": "o awen lukin" + }, + "mediaList": { + "stopEditing": "o pini ante" + }, + "search": { + "allResults": "pini a!", + "failed": "lukin li pakala a! o alasa sin", + "loading": "alasa...", + "noResults": "ijo li lon ala a!", + "placeholder": "sina wile lukin e seme?", + "sectionTitle": "mi lukin e ni:" + }, + "titles": { + "day": { + "default": "tenpo suno ni la sina wile lukin e seme?" + }, + "morning": { + "default": "tenpo sin ni la sina wile lukin e seme?", + "extra": [ + "ken la sitelen Before Sunrise li pona" + ] + }, + "night": { + "default": "tenpo pimeja ni la sina wile lukin e seme?", + "extra": [ + "sina pilin lape anu seme? o alasa lukin e sitelen Exorcist" + ] + } + } + }, + "media": { + "episodeDisplay": "S{{season}} E{{episode}}", + "types": { + "movie": "sitelen wan", + "show": "sitelen kulupu" + } + }, + "navigation": { + "banner": { + "offline": "wawa linja sina li seme?" + }, + "menu": { + "about": "mi", + "donation": "o esun", + "logout": "o weka sona e sina", + "register": "Sync to cloud", + "settings": "o ante", + "support": "o supa" + } + }, + "notFound": { + "badge": "lon ala", + "goHome": "o tawa weka", + "message": "mi lukin lon anpa poki, lon insa tomo, lon monsi ilo. taso mi lukin ala e lipu pi wile sina", + "title": "mi ken ala lukin e lipu ona" + }, + "overlays": { + "close": "o pini" + }, + "player": { + "back": { + "default": "o tawa weka", + "short": "o tawa" + }, + "casting": { + "enabled": "mi pana e sitelen tawa ilo ante..." + }, + "menus": { + "captions": { + "customChoice": "o pana tan ilo", + "customizeLabel": "o ante", + "offChoice": "ala", + "settings": { + "delay": "ante tenpo", + "fixCapitals": "o pona e suli nimi" + }, + "title": "nimi toki", + "unknownLanguage": "mi sona ala" + }, + "downloads": { + "disclaimer": "sina kama jo e sitelen tawa ilo sina tan lipu mama. ilo Muwi-We li lawa ala e nasin jo", + "downloadCaption": "o jo e nimi toki", + "downloadVideo": "o jo e sitelen", + "hlsExplanation": "sitelen ni li tan nasin HLS la sina ken ala kama jo e ona", + "onAndroid": { + "1": "ilo Android la o luka e nena 'o jo'. lon lipu sin la o luka wawa e sitelen. o luka e nena 'o jo'", + "shortTitle": "Android ) o jo", + "title": "o jo lon ilo Android" + }, + "onIos": { + "1": "ilo iOS la o luka e nena 'o jo'. lon lipu sin la o luka e , e o jo poki .", + "shortTitle": "iOS ) o jo", + "title": "o jo lon ilo iOS" + }, + "onPc": { + "1": "ilo suli la o luka e nena 'o jo e sitelen'. lon lipu sin la o luka ante e sitelen. o luka e nena 'o jo e sitelen lon nimi ante'", + "shortTitle": "ilo suli ) o jo", + "title": "o jo lon ilo suli" + }, + "title": "kama jo" + }, + "episodes": { + "button": "sitelen mute", + "emptyState": "kulupu ni li jo ala e sitelen. o lukin lon tenpo ante a!", + "episodeBadge": "E{{episode}}", + "loadingError": "alasa li pakala", + "loadingList": "alasa...", + "loadingTitle": "alasa..." + }, + "playback": { + "speedLabel": "tenpo lukin", + "title": "nasin pali" + }, + "quality": { + "automaticLabel": "ilo o lawa", + "hint": "ante pi pona lukin la sina ken <0>ante e mama", + "iosNoQuality": "tan lawa pi esun Apple la ante pi pona lukin li ken ala lon ilo iOS. ante pi pona lukin la o alasa <0>ante e mama", + "title": "pona lukin" + }, + "settings": { + "captionItem": "nasin nimi", + "downloadItem": "o jo", + "enableCaptions": "nimi toki", + "experienceSection": "nasin lukin", + "playbackItem": "nasin pali", + "qualityItem": "pona lukin", + "sourceItem": "mama sitelen", + "videoSection": "nasin sitelen" + }, + "sources": { + "failed": { + "text": "lukin sitelen li pakala. o alasa e mama ante.", + "title": "pakala jo" + }, + "noEmbeds": { + "text": "mi lukin ala e lipu. o alasa e mama ante.", + "title": "lipu li lon ala" + }, + "noStream": { + "text": "lipu mama ni li jo ala e sitelen ni", + "title": "sitelen li lon ala" + }, + "title": "mama", + "unknownOption": "mi sona ala" + } + }, + "metadata": { + "failed": { + "badge": "pakala", + "homeButton": "o tawa weka", + "text": "mi pakala alasa e sona sitelen tan lipu TMDB. ken la ona li lape anu moli", + "title": "mi pakala alasa e sona sitelen" + }, + "notFound": { + "badge": "lon ala", + "homeButton": "o tawa weka", + "text": "mi lukin ala e lipu pi wile sina. lipu li weka anu ante", + "title": "mi lukin ala e ona" + } + }, + "nextEpisode": { + "cancel": "o ala", + "next": "o sitelen sin" + }, + "playbackError": { + "badge": "pakala lukin", + "errors": { + "errorAborted": "jan li pini alasa e sitelen", + "errorDecode": "sitelen li kama ante la pakala li kama lon", + "errorGenericMedia": "pakala sitelen pi sona ala li lon", + "errorNetwork": "pakala linja li pakala e alasa sitelen", + "errorNotSupported": "mi ken ala supa e sitelen anu mama sitelen" + }, + "homeButton": "o tawa weka", + "text": "mi alasa lukin e sitelen. taso pakala li lon. o alasa sin", + "title": "mi pakala lukin a" + }, + "scraping": { + "items": { + "failure": "mi pakala", + "notFound": "sitelen li lon ala", + "pending": "mi alasa e sitelen..." + }, + "notFound": { + "badge": "lon ala", + "detailsButton": "o pana e sona", + "homeButton": "o tawa weka", + "text": "mi lukin e lipu mama ale mi. taso mi lukin ala e ijo pi wile sina. mi mama ala e sitelen. mi lawa ala e sitelen. o luka e nena anpa", + "title": "mi lukin ala e ona" + } + }, + "time": { + "regular": "{{timeWatched}} / {{duration}}", + "remaining": "tenpo {{timeLeft}} la o awen • tenpo {{timeFinished, datetime}} la ona li pini", + "shortRegular": "{{timeWatched}}", + "shortRemaining": "-{{timeLeft}}" + } + }, + "screens": { + "loadingApp": "mi alasa e ilo", + "loadingUser": "mi alasa e lipu sina", + "loadingUserError": { + "logout": "o weka sona e sina", + "reset": "o sin e lawa ilo sina", + "text": "alasa li pakala", + "textWithReset": "alasa tan lawa ilo sina li pakala. sina wile e lawa ilo mi anu seme?" + } + }, + "settings": { + "account": { + "accountDetails": { + "deviceNameLabel": "nimi ilo", + "deviceNamePlaceholder": "ilo", + "editProfile": "o ante", + "logoutButton": "o weka sona e ona" + }, + "actions": { + "delete": { + "button": "o weka e ale", + "confirmButton": "o weka e ale", + "confirmDescription": "weka ni li suli li wawa mute a! sona ale sina li ken ala kama lon tenpo ante a!", + "confirmTitle": "sina wile e ni anu seme?", + "text": "tenpo kama la sina ken ala ante e weka ni. ale li kama weka", + "title": "o weka e ale" + }, + "title": "pali" + }, + "devices": { + "deviceNameLabel": "nimi ilo", + "failed": "alasa li pakala", + "removeDevice": "o weka", + "title": "ilo" + }, + "profile": { + "finish": "o ante", + "firstColor": "kule nanpa wan", + "secondColor": "kule nanpa tu", + "title": "o ante e sitelen", + "userIcon": "sitelen" + }, + "register": { + "cta": "o open", + "text": "o sama e lipu open sina tawa ilo sina ante", + "title": "o sama e lipu" + }, + "title": "lipu open" + }, + "appearance": { + "activeTheme": "lon", + "themes": { + "blue": "laso", + "default": "sama", + "gray": "pimeja", + "red": "loje", + "teal": "laso walo" + }, + "title": "kule" + }, + "captions": { + "backgroundLabel": "kon", + "colorLabel": "kule", + "previewQuote": "kijetesantakalu tonsi li lanpan ala lanpan e soko?", + "textSizeLabel": "suli", + "title": "nimi toki" + }, + "connections": { + "title": "kulupu" + }, + "locale": { + "language": "toki ilo", + "languageDescription": "ilo li toki kepeken toki ni:", + "title": "toki" + }, + "reset": "o sin", + "save": "o awen", + "unsaved": "ante sina li awen ala" + } +} From f29fb44f6c940b6505f9f3e31718396669272da2 Mon Sep 17 00:00:00 2001 From: Raymond Nee Date: Tue, 26 Dec 2023 09:39:46 +0000 Subject: [PATCH 20/32] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (247 of 247 strings) Translation: movie-web/website Translate-URL: http://weblate.movie-web.app/projects/movie-web/website/zh_Hans/ Author: Raymond Nee --- src/assets/locales/zh.json | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/assets/locales/zh.json b/src/assets/locales/zh.json index d9f2eafd..785193bf 100644 --- a/src/assets/locales/zh.json +++ b/src/assets/locales/zh.json @@ -1,13 +1,13 @@ { "about": { - "description": "movie-web 是一个在互联网上搜寻流媒体的 Web 应用程序。团队致力于让用户采取最简约的方式消费内容。", + "description": "movie-web 是一款在互联网上搜寻流媒体的网络应用程序。团队致力于让用户采取最简约的方式消费内容。", "faqTitle": "常见问题", "q1": { "body": "movie-web 不托管任何内容。您点选观看内容时,系统均从互联网搜寻(在加载提示页和“视频源”选项卡中,您可以看到正在使用的源)。媒体从未在 movie-web 中上传,所有内容均通过搜索机制而得。", "title": "内容来自哪里?" }, "q2": { - "body": "无法请求影视剧或其他节目,movie-web 不管理任何内容。所有内容均从互联网视频源获取并供您观看。", + "body": "无法主动请求影视剧或其他节目,movie-web 不管理任何内容。所有内容均从互联网视频源获取并供您观看。", "title": "我可以从哪里请求观看影视剧或其他节目?" }, "q3": { @@ -27,6 +27,7 @@ "generate": { "description": "您的密码短语相当于用户名与密码。由于您需要输入它来登录账户,请确保将其存放到安全位置", "next": "我已保存密码短语", + "passphraseFrameLabel": "密码短语", "title": "您的密码短语" }, "hasAccount": "已经拥有账户?<0>点击此处登录。", @@ -139,7 +140,7 @@ "episodeDisplay": "第{{season}}季 第{{episode}}集", "types": { "movie": "电影", - "show": "连续剧" + "show": "电视节目" } }, "navigation": { @@ -220,8 +221,8 @@ }, "quality": { "automaticLabel": "自动质量", - "hint": "您可以尝试 <0>切换视频源以获取不同的质量选项。", - "iosNoQuality": "由于苹果施加的限制,该视频源的质量选择在 iOS 上不可用。您可以尝试 <0>切换到其他视频源以获取不同的质量选项。", + "hint": "您可以尝试<0>切换视频源以获取不同的质量选项。", + "iosNoQuality": "由于苹果施加的限制,该视频源的质量选择在 iOS 上不可用。您可以尝试<0>切换到其他视频源以获取不同的质量选项。", "title": "质量" }, "settings": { @@ -244,7 +245,7 @@ "title": "未找到嵌入内容" }, "noStream": { - "text": "此源没有该影片或剧集的串流。", + "text": "此视频源没有该影片或节目的串流。", "title": "没有流" }, "title": "视频源", @@ -305,7 +306,7 @@ }, "screens": { "dmca": { - "text": "欢迎来到 movie-web 的 DMCA 联系页面!我们尊重知识产权,并希望迅速解决任何版权问题。如果您认为您的受版权保护的作品在我们的平台上被不当使用,请将详细的 DMCA 通知发送至以下电子邮件地址。请附上受版权保护的材料的描述、您的联系方式以及善意信念声明。 我们致力于迅速解决这些问题,并感谢您的合作,让 movie -web 成为尊重创造力和版权的地方。", + "text": "欢迎来到 movie-web 的 DMCA 联系页面!我们尊重知识产权,并希望迅速解决任何版权问题。如果您认为您的版权作品在我们的平台上被不当使用,请发送详细的 DMCA 通知至以下邮箱。同时请附上受版权保护的材料的描述、您的具体联系方式以及善意信念声明。 我们承诺及时解决这些问题,并感谢您的合作,让 movie-web 成为尊重创意和版权之地。", "title": "DMCA" }, "loadingApp": "正在载入应用程序", From 4ecca612002a625f94465093feea586f08c81449 Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 27 Dec 2023 22:17:08 +0000 Subject: [PATCH 21/32] Update translation files Updated by "Cleanup translation files" hook in Weblate. Translation: movie-web/website Translate-URL: http://weblate.movie-web.app/projects/movie-web/website/ --- src/assets/locales/ar.json | 1 - src/assets/locales/cs.json | 1 - src/assets/locales/de.json | 1 - src/assets/locales/es.json | 1 - src/assets/locales/et.json | 1 - src/assets/locales/fr.json | 1 - src/assets/locales/he.json | 1 - src/assets/locales/lv.json | 1 - src/assets/locales/minion.json | 692 +++++++++++++++++---------------- src/assets/locales/ne.json | 1 - src/assets/locales/nl.json | 1 - src/assets/locales/pirate.json | 1 - src/assets/locales/sv.json | 1 - src/assets/locales/th.json | 1 - src/assets/locales/tok.json | 1 - src/assets/locales/tr.json | 1 - src/assets/locales/zh.json | 1 - 17 files changed, 347 insertions(+), 361 deletions(-) diff --git a/src/assets/locales/ar.json b/src/assets/locales/ar.json index 1932c87c..353ea0ef 100644 --- a/src/assets/locales/ar.json +++ b/src/assets/locales/ar.json @@ -188,7 +188,6 @@ "disclaimer": "يتم أخذ التنزيلات مباشرةً من قبل مقدم الخدمة. movie-web لاسيطرة له على كيفية توفير تلك التنزيلات.", "downloadCaption": "تنزيل مقاطع الترجمة الحالية", "downloadVideo": "تنزيل الفيديو", - "hlsExplanation": "هذا الوسيط هو بثٌ مباشر من نوع HTTP، لذا لايمكن تنزيله من movie-web.", "onAndroid": { "1": "للتنزيل على أندرويد، أنقر زر التنزيل وفي الصفحة الموالية إضغط باستمرار على الفيديو، وبعدها اختر حفظ.", "shortTitle": "تنزيل / Android", diff --git a/src/assets/locales/cs.json b/src/assets/locales/cs.json index 25347ff7..291d3381 100644 --- a/src/assets/locales/cs.json +++ b/src/assets/locales/cs.json @@ -189,7 +189,6 @@ "disclaimer": "Stahování probíhá přímo u poskytovatele. movie-web nemá kontrolu nad tím, jak jsou stahování poskytovány.", "downloadCaption": "Stáhnout titulky", "downloadVideo": "Stáhnout video", - "hlsExplanation": "Toto médium je proud HLS, který nelze stáhnout na movie-web.", "onAndroid": { "1": "Na Androidu klikněte na tlačítko stahování, poté na nové stránce klepněte a podržte na videu a poté vyberte uložit.", "shortTitle": "Stahování / Android", diff --git a/src/assets/locales/de.json b/src/assets/locales/de.json index b7033a3b..b25463c0 100644 --- a/src/assets/locales/de.json +++ b/src/assets/locales/de.json @@ -189,7 +189,6 @@ "disclaimer": "Videos werden direkt vom Provider heruntergeladen. movie-web hat nicht steuern, wie die Downloads bereitgestellt werden.", "downloadCaption": "Ausgewählte Untertitel herunterladen", "downloadVideo": "Video herunterladen", - "hlsExplanation": "Dieses Video ist ein HLS-Stream, welcher auf movie-web nicht heruntergeladen werden kann.", "onAndroid": { "1": "Um auf Android Herunterzuladen, tippe auf den Download-Button, tippe und halte auf der neuen Seite auf das Video und wähle Speichern aus.", "shortTitle": "Download / Android", diff --git a/src/assets/locales/es.json b/src/assets/locales/es.json index 298b1138..fb148e49 100644 --- a/src/assets/locales/es.json +++ b/src/assets/locales/es.json @@ -189,7 +189,6 @@ "disclaimer": "Las descargas se realizan directamente desde el proveedor. movie-web no tiene control sobre cómo se proporcionan las descargas.", "downloadCaption": "Descargar subtítulo actual", "downloadVideo": "Descargar vídeo", - "hlsExplanation": "Este contenido es una transmisión HLS que no se puede descargar en movie-web.", "onAndroid": { "1": "Para descargar en Android, haz clic en el botón de descarga y luego, en la nueva página, mantén presionado el vídeo y selecciona guardar.", "shortTitle": "Descargar / Android", diff --git a/src/assets/locales/et.json b/src/assets/locales/et.json index bed3ea8e..27177ef2 100644 --- a/src/assets/locales/et.json +++ b/src/assets/locales/et.json @@ -154,7 +154,6 @@ "disclaimer": "Allalaadimine toimub otse teenusepakkujalt. movie-web ei saa kontrollida, kuidas allalaadimine toimub.", "downloadCaption": "Lae alla praegused subtiitrid", "downloadVideo": "Lae alla video", - "hlsExplanation": "See meedia on HLS voog, mida ei saa alla laadida.", "onAndroid": { "1": "Et allalaadida Androidi telefonil, vajuta allalaadimise nupule, siis uuel leheküljel vajuta ja hoia video peal, siis vali salvesta.", "shortTitle": "Allalaadimine / Android", diff --git a/src/assets/locales/fr.json b/src/assets/locales/fr.json index 0da190d0..79961dc4 100644 --- a/src/assets/locales/fr.json +++ b/src/assets/locales/fr.json @@ -189,7 +189,6 @@ "disclaimer": "Les téléchargements sont effectués directement par le fournisseur. movie-web n'a aucun contrôle sur la manière dont les téléchargements sont effectués.", "downloadCaption": "Télécharger les sous-titres actuels", "downloadVideo": "Télécharger la vidéo", - "hlsExplanation": "Ce média est un flux HLS qui ne peut pas être téléchargé sur movie-web.", "onAndroid": { "1": "Pour télécharger sur Android, cliquez sur le bouton de téléchargement puis, sur la nouvelle page, tapez et maintenez sur la vidéo, puis sélectionnez enregistrer.", "shortTitle": "Télécharger / Android", diff --git a/src/assets/locales/he.json b/src/assets/locales/he.json index e9692865..3c811283 100644 --- a/src/assets/locales/he.json +++ b/src/assets/locales/he.json @@ -189,7 +189,6 @@ "disclaimer": "ההורדות נלקחות ישירות מהספק. ל-movie-web אין שליטה על האופן שבו מסופקות ההורדות.", "downloadCaption": "הורד את הכתוביות הנוכחיות", "downloadVideo": "הורד וידאו", - "hlsExplanation": "מדיה זו היא זרם HLS שאינו ניתן להורדה ב-movie-web.", "onAndroid": { "1": "כדי להוריד באנדרואיד, לחץ על כפתור ההורדה ולאחר מכן, בדף החדש, הקש והחזק על הסרטון, ולאחר מכן בחר שמור.", "shortTitle": "הורדה / אנדרויד", diff --git a/src/assets/locales/lv.json b/src/assets/locales/lv.json index 2692c580..0f0a0f9c 100644 --- a/src/assets/locales/lv.json +++ b/src/assets/locales/lv.json @@ -188,7 +188,6 @@ "disclaimer": "Lejupielādes tiek ņemtas tieši no pakalpojumu sniedzēja. Movie-web nevar kontrolēt, kā tiek nodrošinātas lejupielādes.", "downloadCaption": "Lejupielādēt pašreizējo parakstu", "downloadVideo": "Lejupielādēt video", - "hlsExplanation": "Šī multivide ir HLS straume, kuru nevar lejupielādēt filmu tīmeklī.", "onAndroid": { "1": "Lai lejupielādētu operētājsistēmā Android, noklikšķiniet uz lejupielādes pogas, pēc tam jaunajā lapā pieskarieties videoklipam un turiet to, pēc tam atlasiet saglabāt.", "shortTitle": "Lejupielādēt / Android", diff --git a/src/assets/locales/minion.json b/src/assets/locales/minion.json index a07ffd4d..0c27762d 100644 --- a/src/assets/locales/minion.json +++ b/src/assets/locales/minion.json @@ -1,271 +1,145 @@ { + "about": { + "description": "Minion-web is a banana application that searches the banana for bananas. The banana aims for a mostly banana approach to consuming banana.", + "faqTitle": "Banana questions", + "q1": { + "body": "Minion-web does not banana any banana. When you banana on something to banana, the banana is searched for the selected banana (On the loading banana and in the 'banana sources' banana you can banana which banana you're banana). Banana never gets banana by Minion-web, everything is banana this banana mechanism.", + "title": "Where does the banana come from?" + }, + "q2": { + "body": "It's not banana to banana a banana or banana, Minion-web does not banana any banana. All banana is banana through bananas on the banana.", + "title": "Banana can I banana a banana or banana?" + }, + "q3": { + "body": "Our banana results are banana by The Banana Banana (TBMB) and banana regardless of whether our bananas actually have the banana.", + "title": "The banana results banana the banana or banana, banana can't I banana it?" + }, + "title": "About Minion-web" + }, + "actions": { + "copied": "Banana", + "copy": "Banana" + }, "auth": { + "createAccount": "Whaaaat? Don't have an account yet? <0>Create an account.", "deviceNameLabel": "Device name", "deviceNamePlaceholder": "Banana phone", + "generate": { + "description": "Your banana passphrase acts as your banana username and banana password. Make sure to keep it safe as you will need to enter it to banana to your account", + "next": "I have saved my banana passphrase", + "title": "Your banana passphrase" + }, "hasAccount": "Bello! Already have an account? <0>Login here.", - "createAccount": "Whaaaat? Don't have an account yet? <0>Create an account.", + "login": { + "description": "Please enter your secret banana language passphrase to login to your account", + "deviceLengthError": "Banana! Please enter a device name", + "passphraseLabel": "12-Banana passphrase", + "passphrasePlaceholder": "Banana Passphrase", + "submit": "Bello! Login", + "title": "Login to your account", + "validationError": "Banana language not fluent or incomplete" + }, "register": { "information": { - "title": "Account information", "color1": "Profile color one", "color2": "Profile color two", - "icon": "Minion icon", "header": "Whaaat? Enter a name for your device and pick colors and a minion icon of your choosing", - "next": "Banana!" + "icon": "Minion icon", + "next": "Banana!", + "title": "Account information" } }, - "login": { - "title": "Login to your account", - "description": "Please enter your secret banana language passphrase to login to your account", - "validationError": "Banana language not fluent or incomplete", - "deviceLengthError": "Banana! Please enter a device name", - "submit": "Bello! Login", - "passphraseLabel": "12-Banana passphrase", - "passphrasePlaceholder": "Banana Passphrase" - }, - "generate": { - "title": "Your banana passphrase", - "next": "I have saved my banana passphrase", - "description": "Your banana passphrase acts as your banana username and banana password. Make sure to keep it safe as you will need to enter it to banana to your account" - }, "trust": { - "title": "Do you trust this server?", - "host": "You are connecting to <0>{{hostname}} - please confirm you trust it before making a banana account", "failed": { - "title": "Failed to reach server", - "text": "Did you configure it correctly?" + "text": "Did you configure it correctly?", + "title": "Failed to reach server" }, - "yes": "I trust this server, banana!", - "no": "Go back, banana" + "host": "You are connecting to <0>{{hostname}} - please confirm you trust it before making a banana account", + "no": "Go back, banana", + "title": "Do you trust this server?", + "yes": "I trust this server, banana!" }, "verify": { - "title": "Confirm your banana passphrase", "description": "Please enter your banana passphrase from earlier to confirm you have saved it and to create your banana account", "invalidData": "Banana data is not valid", "noMatch": "Banana! Passphrase doesn't match", - "recaptchaFailed": "Banana! ReCaptcha validation failed", "passphraseLabel": "Your 12-banana passphrase", - "register": "Create banana account" + "recaptchaFailed": "Banana! ReCaptcha validation failed", + "register": "Create banana account", + "title": "Confirm your banana passphrase" } }, "errors": { + "badge": "It broke", "details": "Error banana details", "reloadPage": "Reload the banana", "showError": "Show banana details", - "badge": "It broke", "title": "We encountered a banana!" }, - "notFound": { - "badge": "Not found", - "title": "Couldn't find that banana", - "message": "We looked everywhere: under the banana, in the banana, behind the banana but ultimately couldn't find the banana you are looking for.", - "goHome": "Back to banana" + "footer": { + "legal": { + "disclaimer": "Banana", + "disclaimerText": "Minion-web does not banana any bananas, it merely banana to 3rd banana bananas. Banana issues should be banana up with the banana bananas and bananas. Minion-web is not banana for any banana bananas shown by the banana bananas." + }, + "links": { + "discord": "Banana", + "dmca": "Banana", + "github": "Banana" + }, + "tagline": "Banana your favourite bananas and bananas with this open source banana app." }, "global": { "name": "banana-web", "pages": { - "pagetitle": "{{title}} - banana-web", - "dmca": "DMCA", - "settings": "Banana Settings", "about": "About banana", + "dmca": "DMCA", "login": "Banana Login", - "register": "Banana Register" - } - }, - "media": { - "types": { - "movie": "Banana Movie", - "show": "Banana Show" - }, - "episodeDisplay": "S{{season}} E{{episode}}" - }, - "player": { - "scraping": { - "notFound": { - "badge": "Not found", - "title": "We couldn't find that banana", - "text": "We have searched through our banana providers and cannot find the banana you are looking for! We do not host the banana and have no control over what is available. Please click 'Show details' below for more details.", - "homeButton": "Go home", - "detailsButton": "Show details" - }, - "items": { - "pending": "Checking for banana videos...", - "notFound": "Doesn't have the banana video", - "failure": "Error banana occurred" - } - }, - "casting": { - "enabled": "Casting to banana..." - }, - "playbackError": { - "badge": "Banana Playback error", - "title": "Failed to play banana video!", - "text": "There was an error trying to play the banana. Please try again.", - "homeButton": "Go home", - "errors": { - "errorAborted": "The fetching of the banana was aborted by the user's banana.", - "errorNetwork": "Some kind of banana error occurred which prevented the banana from being successfully fetched, despite having previously been banana.", - "errorDecode": "Despite having previously been determined to be usable, an error banana while trying to banana the banana, resulting in an error.", - "errorNotSupported": "The banana or banana provider object is not banana.", - "errorGenericMedia": "Unknown banana error occurred." - } - }, - "metadata": { - "notFound": { - "badge": "Banana Not found", - "title": "Couldn't find that banana.", - "text": "We couldn't find the banana you requested. Either it's been banana or you tampered with the banana.", - "homeButton": "Back to banana" - }, - "failed": { - "badge": "Banana Failed", - "title": "Failed to load banana metadata", - "text": "Could not banana the banana's banana from TMDB. Please banana whether TMDB is down or banana on your banana connection.", - "homeButton": "Go banana" - } - }, - "back": { - "default": "Back to banana", - "short": "Back banana" - }, - "time": { - "regular": "{{timeWatched}} / {{duration}}", - "shortRegular": "{{timeWatched}}", - "remaining": "{{timeLeft}} left • Finish at {{timeFinished, datetime}}", - "shortRemaining": "-{{timeLeft}}" - }, - "nextEpisode": { - "next": "Next banana", - "cancel": "Banana" - }, - "menus": { - "settings": { - "videoSection": "Banana Video settings", - "experienceSection": "Banana Viewing experience", - "enableCaptions": "Enable banana", - "captionItem": "Banana settings", - "sourceItem": "Banana sources", - "playbackItem": "Banana settings", - "downloadItem": "Banana", - "qualityItem": "Banana" - }, - "episodes": { - "button": "Banana", - "loadingTitle": "Loading...", - "loadingList": "Loading...", - "loadingError": "Error loading banana", - "emptyState": "There are no banana in this banana, check back banana!", - "episodeBadge": "E{{episode}}" - }, - "sources": { - "title": "Banana", - "unknownOption": "Banana", - "noStream": { - "title": "Banana stream", - "text": "This banana has no banana for this banana or banana." - }, - "noEmbeds": { - "title": "No banana found", - "text": "We were unable to banana any banana, please try a different banana." - }, - "failed": { - "title": "Banana to banana", - "text": "There was an banana while trying to banana any banana, please try a different banana." - } - }, - "captions": { - "title": "Banana", - "customizeLabel": "Banana", - "settings": { - "fixCapitals": "Banana", - "delay": "Banana" - }, - "customChoice": "Banana", - "offChoice": "Banana", - "unknownLanguage": "Banana" - }, - "downloads": { - "title": "Banana", - "disclaimer": "Downloads are taken directly from the banana. banana-web does not have banana over how the banana are banana.", - "hlsExplanation": "This banana is a banana banana which cannot be banana on banana-web.", - "downloadVideo": "Banana", - "downloadCaption": "Banana", - "onPc": { - "1": "On PC, click the banana banana then, on the new banana, right click the banana and select Banana", - "title": "Banana", - "shortTitle": "Banana / PC" - }, - "onAndroid": { - "1": "To banana on Banana, click the banana banana then, on the new banana, tap and hold on the banana, then select banana.", - "title": "Banana", - "shortTitle": "Banana / Banana" - }, - "onIos": { - "1": "To banana on Banana, click the banana banana then, on the new banana, click , then Banana to banana .", - "title": "Banana", - "shortTitle": "Banana / Banana" - } - }, - "playback": { - "title": "Banana settings", - "speedLabel": "Banana speed" - }, - "quality": { - "title": "Banana", - "automaticLabel": "Banana", - "hint": "You can banana <0>banana to get different banana banana.", - "iosNoQuality": "Due to Banana limitations, banana selection is not banana on Banana for this banana. You can banana <0>banana to get different banana banana." - } + "pagetitle": "{{title}} - banana-web", + "register": "Banana Register", + "settings": "Banana Settings" } }, "home": { - "mediaList": { - "stopEditing": "Stop banana" - }, - "titles": { - "morning": { - "default": "What would you like to banana this banana?", - "extra": ["Banana! I hear Banana Sunrise is banana"] - }, - "day": { - "default": "What would you like to banana this banana?", - "extra": [] - }, - "night": { - "default": "What would you like to banana banana?", - "extra": ["Banana? I hear The Banana is banana."] - } - }, - "search": { - "loading": "Loading...", - "sectionTitle": "Banana results", - "allResults": "Banana's all we banana!", - "noResults": "We couldn't banana anything!", - "failed": "Failed to banana banana, try again!", - "placeholder": "Banana do you want to banana?" + "bookmarks": { + "sectionTitle": "Banana" }, "continueWatching": { "sectionTitle": "Continue Banana" }, - "bookmarks": { - "sectionTitle": "Banana" + "mediaList": { + "stopEditing": "Stop banana" + }, + "search": { + "allResults": "Banana's all we banana!", + "failed": "Failed to banana banana, try again!", + "loading": "Loading...", + "noResults": "We couldn't banana anything!", + "placeholder": "Banana do you want to banana?", + "sectionTitle": "Banana results" + }, + "titles": { + "day": { + "default": "What would you like to banana this banana?" + }, + "morning": { + "default": "What would you like to banana this banana?", + "extra": [ + "Banana! I hear Banana Sunrise is banana" + ] + }, + "night": { + "default": "What would you like to banana banana?", + "extra": [ + "Banana? I hear The Banana is banana." + ] + } } }, - "overlays": { - "close": "Banana" - }, - "screens": { - "loadingUser": "Loading your banana", - "loadingApp": "Loading banana", - "loadingUserError": { - "text": "Failed to banana your banana", - "textWithReset": "Failed to banana your banana from your banana banana, banana to banana back to the banana banana?", - "reset": "Banana banana banana", - "logout": "Banana" - }, - "migration": { - "failed": "Banana to banana your banana.", - "inProgress": "Please banana, we are banana your banana. This shouldn't banana long." + "media": { + "episodeDisplay": "S{{season}} E{{episode}}", + "types": { + "movie": "Banana Movie", + "show": "Banana Show" } }, "navigation": { @@ -273,141 +147,269 @@ "offline": "Check your banana connection" }, "menu": { - "register": "Banana to banana", - "settings": "Banana", "about": "Banana us", "donation": "Banana", - "support": "Banana", - "logout": "Banana out" + "logout": "Banana out", + "register": "Banana to banana", + "settings": "Banana", + "support": "Banana" } }, - "actions": { - "copy": "Banana", - "copied": "Banana" + "notFound": { + "badge": "Not found", + "goHome": "Back to banana", + "message": "We looked everywhere: under the banana, in the banana, behind the banana but ultimately couldn't find the banana you are looking for.", + "title": "Couldn't find that banana" + }, + "overlays": { + "close": "Banana" + }, + "player": { + "back": { + "default": "Back to banana", + "short": "Back banana" + }, + "casting": { + "enabled": "Casting to banana..." + }, + "menus": { + "captions": { + "customChoice": "Banana", + "customizeLabel": "Banana", + "offChoice": "Banana", + "settings": { + "delay": "Banana", + "fixCapitals": "Banana" + }, + "title": "Banana", + "unknownLanguage": "Banana" + }, + "downloads": { + "disclaimer": "Downloads are taken directly from the banana. banana-web does not have banana over how the banana are banana.", + "downloadCaption": "Banana", + "downloadVideo": "Banana", + "onAndroid": { + "1": "To banana on Banana, click the banana banana then, on the new banana, tap and hold on the banana, then select banana.", + "shortTitle": "Banana / Banana", + "title": "Banana" + }, + "onIos": { + "1": "To banana on Banana, click the banana banana then, on the new banana, click , then Banana to banana .", + "shortTitle": "Banana / Banana", + "title": "Banana" + }, + "onPc": { + "1": "On PC, click the banana banana then, on the new banana, right click the banana and select Banana", + "shortTitle": "Banana / PC", + "title": "Banana" + }, + "title": "Banana" + }, + "episodes": { + "button": "Banana", + "emptyState": "There are no banana in this banana, check back banana!", + "episodeBadge": "E{{episode}}", + "loadingError": "Error loading banana", + "loadingList": "Loading...", + "loadingTitle": "Loading..." + }, + "playback": { + "speedLabel": "Banana speed", + "title": "Banana settings" + }, + "quality": { + "automaticLabel": "Banana", + "hint": "You can banana <0>banana to get different banana banana.", + "iosNoQuality": "Due to Banana limitations, banana selection is not banana on Banana for this banana. You can banana <0>banana to get different banana banana.", + "title": "Banana" + }, + "settings": { + "captionItem": "Banana settings", + "downloadItem": "Banana", + "enableCaptions": "Enable banana", + "experienceSection": "Banana Viewing experience", + "playbackItem": "Banana settings", + "qualityItem": "Banana", + "sourceItem": "Banana sources", + "videoSection": "Banana Video settings" + }, + "sources": { + "failed": { + "text": "There was an banana while trying to banana any banana, please try a different banana.", + "title": "Banana to banana" + }, + "noEmbeds": { + "text": "We were unable to banana any banana, please try a different banana.", + "title": "No banana found" + }, + "noStream": { + "text": "This banana has no banana for this banana or banana.", + "title": "Banana stream" + }, + "title": "Banana", + "unknownOption": "Banana" + } + }, + "metadata": { + "failed": { + "badge": "Banana Failed", + "homeButton": "Go banana", + "text": "Could not banana the banana's banana from TMDB. Please banana whether TMDB is down or banana on your banana connection.", + "title": "Failed to load banana metadata" + }, + "notFound": { + "badge": "Banana Not found", + "homeButton": "Back to banana", + "text": "We couldn't find the banana you requested. Either it's been banana or you tampered with the banana.", + "title": "Couldn't find that banana." + } + }, + "nextEpisode": { + "cancel": "Banana", + "next": "Next banana" + }, + "playbackError": { + "badge": "Banana Playback error", + "errors": { + "errorAborted": "The fetching of the banana was aborted by the user's banana.", + "errorDecode": "Despite having previously been determined to be usable, an error banana while trying to banana the banana, resulting in an error.", + "errorGenericMedia": "Unknown banana error occurred.", + "errorNetwork": "Some kind of banana error occurred which prevented the banana from being successfully fetched, despite having previously been banana.", + "errorNotSupported": "The banana or banana provider object is not banana." + }, + "homeButton": "Go home", + "text": "There was an error trying to play the banana. Please try again.", + "title": "Failed to play banana video!" + }, + "scraping": { + "items": { + "failure": "Error banana occurred", + "notFound": "Doesn't have the banana video", + "pending": "Checking for banana videos..." + }, + "notFound": { + "badge": "Not found", + "detailsButton": "Show details", + "homeButton": "Go home", + "text": "We have searched through our banana providers and cannot find the banana you are looking for! We do not host the banana and have no control over what is available. Please click 'Show details' below for more details.", + "title": "We couldn't find that banana" + } + }, + "time": { + "regular": "{{timeWatched}} / {{duration}}", + "remaining": "{{timeLeft}} left • Finish at {{timeFinished, datetime}}", + "shortRegular": "{{timeWatched}}", + "shortRemaining": "-{{timeLeft}}" + } + }, + "screens": { + "loadingApp": "Loading banana", + "loadingUser": "Loading your banana", + "loadingUserError": { + "logout": "Banana", + "reset": "Banana banana banana", + "text": "Failed to banana your banana", + "textWithReset": "Failed to banana your banana from your banana banana, banana to banana back to the banana banana?" + }, + "migration": { + "failed": "Banana to banana your banana.", + "inProgress": "Please banana, we are banana your banana. This shouldn't banana long." + } }, "settings": { - "unsaved": "Whaaat? You have unsaved bananas", + "account": { + "accountDetails": { + "deviceNameLabel": "Banana name", + "deviceNamePlaceholder": "Banana phone", + "editProfile": "Banana", + "logoutButton": "Banana out" + }, + "actions": { + "delete": { + "button": "Banana", + "confirmButton": "Banana", + "confirmDescription": "Banana you banana to banana your banana? All your bananas will be banana!", + "confirmTitle": "Banana you banana?", + "text": "Whaaat? This banana is irreversible. All bananas will be banana and nothing can be banana.", + "title": "Banana" + }, + "title": "Banana" + }, + "devices": { + "deviceNameLabel": "Banana name", + "failed": "Failed to load bananas", + "removeDevice": "Banana", + "title": "Banana" + }, + "profile": { + "finish": "Banana banana", + "firstColor": "Minion color one", + "secondColor": "Minion color two", + "title": "Edit banana banana", + "userIcon": "Minion icon" + }, + "register": { + "cta": "Banana started", + "text": "Banana your banana banana between banana and keep them synced.", + "title": "Banana to the banana" + }, + "title": "Banana" + }, + "appearance": { + "activeTheme": "Banana", + "themes": { + "blue": "Banana", + "default": "Banana", + "gray": "Banana", + "red": "Banana", + "teal": "Banana" + }, + "title": "Banana" + }, + "captions": { + "backgroundLabel": "Banana opacity", + "colorLabel": "Banana", + "previewQuote": "I must not banana. Banana is the banana-killer.", + "textSizeLabel": "Banana size", + "title": "Banana" + }, + "connections": { + "server": { + "description": "Banana you would like to banana to a banana banana to store your banana, banana this and banana the URL.", + "label": "Banana banana", + "urlLabel": "Banana banana URL" + }, + "title": "Banana", + "workers": { + "addButton": "Banana banana banana", + "description": "Banana make the banana function, all banana is banana through bananas. Banana this if you banana to banana your own bananas.", + "emptyState": "No bananas yet, banana one banana", + "label": "Banana custom banana", + "urlLabel": "Banana URLs", + "urlPlaceholder": "https://" + } + }, + "locale": { + "language": "Banana", + "languageDescription": "Banana applied to the entire banana.", + "title": "Banana" + }, "reset": "Banana", "save": "Banana", "sidebar": { "info": { - "title": "Banana information", - "hostname": "Banana", - "backendUrl": "Banana URL", - "userId": "Minion ID", - "notLoggedIn": "You are not banana in", "appVersion": "Banana version", + "backendUrl": "Banana URL", "backendVersion": "Banana version", - "unknownVersion": "Unknown", + "hostname": "Banana", + "insecure": "Banana", + "notLoggedIn": "You are not banana in", "secure": "Banana", - "insecure": "Banana" + "title": "Banana information", + "unknownVersion": "Unknown", + "userId": "Minion ID" } }, - "appearance": { - "title": "Banana", - "activeTheme": "Banana", - "themes": { - "default": "Banana", - "blue": "Banana", - "teal": "Banana", - "red": "Banana", - "gray": "Banana" - } - }, - "account": { - "title": "Banana", - "register": { - "title": "Banana to the banana", - "text": "Banana your banana banana between banana and keep them synced.", - "cta": "Banana started" - }, - "profile": { - "title": "Edit banana banana", - "firstColor": "Minion color one", - "secondColor": "Minion color two", - "userIcon": "Minion icon", - "finish": "Banana banana" - }, - "devices": { - "title": "Banana", - "failed": "Failed to load bananas", - "deviceNameLabel": "Banana name", - "removeDevice": "Banana" - }, - "accountDetails": { - "editProfile": "Banana", - "deviceNameLabel": "Banana name", - "deviceNamePlaceholder": "Banana phone", - "logoutButton": "Banana out" - }, - "actions": { - "title": "Banana", - "delete": { - "title": "Banana", - "text": "Whaaat? This banana is irreversible. All bananas will be banana and nothing can be banana.", - "button": "Banana", - "confirmTitle": "Banana you banana?", - "confirmDescription": "Banana you banana to banana your banana? All your bananas will be banana!", - "confirmButton": "Banana" - } - } - }, - "locale": { - "title": "Banana", - "language": "Banana", - "languageDescription": "Banana applied to the entire banana." - }, - "captions": { - "title": "Banana", - "previewQuote": "I must not banana. Banana is the banana-killer.", - "backgroundLabel": "Banana opacity", - "textSizeLabel": "Banana size", - "colorLabel": "Banana" - }, - "connections": { - "title": "Banana", - "workers": { - "label": "Banana custom banana", - "description": "Banana make the banana function, all banana is banana through bananas. Banana this if you banana to banana your own bananas.", - "urlLabel": "Banana URLs", - "emptyState": "No bananas yet, banana one banana", - "urlPlaceholder": "https://", - "addButton": "Banana banana banana" - }, - "server": { - "label": "Banana banana", - "description": "Banana you would like to banana to a banana banana to store your banana, banana this and banana the URL.", - "urlLabel": "Banana banana URL" - } - } - }, - "about": { - "title": "About Minion-web", - "description": "Minion-web is a banana application that searches the banana for bananas. The banana aims for a mostly banana approach to consuming banana.", - "faqTitle": "Banana questions", - "q1": { - "title": "Where does the banana come from?", - "body": "Minion-web does not banana any banana. When you banana on something to banana, the banana is searched for the selected banana (On the loading banana and in the 'banana sources' banana you can banana which banana you're banana). Banana never gets banana by Minion-web, everything is banana this banana mechanism." - }, - "q2": { - "title": "Banana can I banana a banana or banana?", - "body": "It's not banana to banana a banana or banana, Minion-web does not banana any banana. All banana is banana through bananas on the banana." - }, - "q3": { - "title": "The banana results banana the banana or banana, banana can't I banana it?", - "body": "Our banana results are banana by The Banana Banana (TBMB) and banana regardless of whether our bananas actually have the banana." - } - }, - "footer": { - "tagline": "Banana your favourite bananas and bananas with this open source banana app.", - "links": { - "github": "Banana", - "dmca": "Banana", - "discord": "Banana" - }, - "legal": { - "disclaimer": "Banana", - "disclaimerText": "Minion-web does not banana any bananas, it merely banana to 3rd banana bananas. Banana issues should be banana up with the banana bananas and bananas. Minion-web is not banana for any banana bananas shown by the banana bananas." - } + "unsaved": "Whaaat? You have unsaved bananas" } } diff --git a/src/assets/locales/ne.json b/src/assets/locales/ne.json index 41bcc002..31c3255b 100644 --- a/src/assets/locales/ne.json +++ b/src/assets/locales/ne.json @@ -189,7 +189,6 @@ "disclaimer": "डाउनलोडहरू सीधा प्रदायकबाट लिइन्छ। movie-web ले डाउनलोडहरू कसरी प्रदान गरिन्छ भन्नेमा नियन्त्रण गर्दैन।", "downloadCaption": "डाउनलोड चलिरहेको क्याप्शन", "downloadVideo": "डाउनलोड भिडियो", - "hlsExplanation": "यो मिडिया HLS स्ट्रिम हो जुन movie-web मा डाउनलोड गर्न सकिँदैन।", "onAndroid": { "1": "एन्ड्रोइड मा, डाउनलोड बटन क्लिक गर्नुहोस् त्यसपछि, नयाँ पृष्ठमा, भिडियोमा ट्याप गर्नुहोस् र होल्ड गर्नुहोस्, त्यसपछि बचत चयन गर्नुहोस्।", "shortTitle": "डाउनलोड / एन्ड्रोइड", diff --git a/src/assets/locales/nl.json b/src/assets/locales/nl.json index 8700f4ff..fabaf41e 100644 --- a/src/assets/locales/nl.json +++ b/src/assets/locales/nl.json @@ -122,7 +122,6 @@ "disclaimer": "Downloads worden direct bij de bron opgehaald. movie-web heeft geen controle over het bestand dat je ontvangt.", "downloadCaption": "Ondertiteling downloaden", "downloadVideo": "Download filmpje", - "hlsExplanation": "Dit filmpje is een HLS bestand, een type bestand dat we helaas niet kunnen downloaden.", "title": "Download" }, "episodes": { diff --git a/src/assets/locales/pirate.json b/src/assets/locales/pirate.json index ce9e4113..ed892aed 100644 --- a/src/assets/locales/pirate.json +++ b/src/assets/locales/pirate.json @@ -144,7 +144,6 @@ "disclaimer": "Downloads be taken directly from the provider. movie-web does not have control over how the downloads be provided.", "downloadCaption": "Download sea shanty", "downloadVideo": "Download film", - "hlsExplanation": "Insert explanation for why ye can't download HLS here", "onAndroid": { "1": "To download on Android, tap and hold on the film, then select save.", "shortTitle": "Download / Android", diff --git a/src/assets/locales/sv.json b/src/assets/locales/sv.json index 2cd0f18c..6f58d518 100644 --- a/src/assets/locales/sv.json +++ b/src/assets/locales/sv.json @@ -188,7 +188,6 @@ "disclaimer": "Nedladdningar görs direkt från leverantören. movie-web har ingen kontroll över hur nedladdningarna tillhandahålls.", "downloadCaption": "Ladda ner aktuell undertext", "downloadVideo": "Ladda ner video", - "hlsExplanation": "Denna media är en HLS-ström som inte kan laddas ner på movie-web.", "onAndroid": { "1": "För att ladda ner på Android, klicka på nedladdningsknappen och på den nya sidan trycker och håller på videon, välj sedan spara.", "shortTitle": "Ladda ner / Android", diff --git a/src/assets/locales/th.json b/src/assets/locales/th.json index 0befa67f..a62c17ca 100644 --- a/src/assets/locales/th.json +++ b/src/assets/locales/th.json @@ -188,7 +188,6 @@ "disclaimer": "การดาวน์โหลดจะถูกนํามาจากผู้ให้บริการโดยตรง movie-web ไม่สามารถควบคุมวิธีการดาวน์โหลดได้", "downloadCaption": "ดาวน์โหลดคำบรรยายปัจจุบัน", "downloadVideo": "ดาวน์โหลดวิดีโอ", - "hlsExplanation": "สื่อนี้เป็นสตรีม HLS ซึ่งไม่สามารถดาวน์โหลดบนเว็บภาพยนตร์ได้", "onAndroid": { "1": "หากต้องการดาวน์โหลดบน Android ให้คลิกปุ่มดาวน์โหลด จากนั้นในหน้าใหม่ แตะ บนวิดีโอค้างไว้ จากนั้นเลือก บันทึก", "shortTitle": "ดาวน์โหลด / Android", diff --git a/src/assets/locales/tok.json b/src/assets/locales/tok.json index 5817986c..1e9113d6 100644 --- a/src/assets/locales/tok.json +++ b/src/assets/locales/tok.json @@ -174,7 +174,6 @@ "disclaimer": "sina kama jo e sitelen tawa ilo sina tan lipu mama. ilo Muwi-We li lawa ala e nasin jo", "downloadCaption": "o jo e nimi toki", "downloadVideo": "o jo e sitelen", - "hlsExplanation": "sitelen ni li tan nasin HLS la sina ken ala kama jo e ona", "onAndroid": { "1": "ilo Android la o luka e nena 'o jo'. lon lipu sin la o luka wawa e sitelen. o luka e nena 'o jo'", "shortTitle": "Android ) o jo", diff --git a/src/assets/locales/tr.json b/src/assets/locales/tr.json index 95717b64..b3011c49 100644 --- a/src/assets/locales/tr.json +++ b/src/assets/locales/tr.json @@ -189,7 +189,6 @@ "disclaimer": "İndirme bağlantıları doğrudan sağlayıcının kendisinden alınır. movie-web'in sağlanan indirme bağlantıları üzerinde hiçbir konrolü yoktur.", "downloadCaption": "Geçerli altyazıyı indir", "downloadVideo": "Videoyu indir", - "hlsExplanation": "Bu medya, movie-web üzerinden indirilemeyen bir HLS akışıdır.", "onAndroid": { "1": "Android'e indirmek için önce indir butonuna basın, sonra açılan yeni sayfada video üzerine basılı tutun, ardından Videoyu indir seçeneğini seçin.", "shortTitle": "İndir / Android", diff --git a/src/assets/locales/zh.json b/src/assets/locales/zh.json index 785193bf..709c2d17 100644 --- a/src/assets/locales/zh.json +++ b/src/assets/locales/zh.json @@ -189,7 +189,6 @@ "disclaimer": "下载内容是直接从内容提供者获取的。movie-web 无法控制下载内容如何被提供。", "downloadCaption": "下载当前字幕", "downloadVideo": "下载视频", - "hlsExplanation": "该媒体为 HLS 流,因此无法从 movie-web 下载。", "onAndroid": { "1": "要从 Android 下载,先点击下载按钮,之后在新的页面上, 点击并按住视频,然后选择 保存。", "shortTitle": "下载 / Android", From 2f18c3a998be16e14e9e352e71beb669ebbcaa63 Mon Sep 17 00:00:00 2001 From: mrjvs Date: Thu, 28 Dec 2023 00:12:35 +0100 Subject: [PATCH 22/32] Add new languages to language options --- src/assets/languages.ts | 6 ++++++ src/setup/i18n.ts | 40 ++++++++++++++++++++++++++-------------- 2 files changed, 32 insertions(+), 14 deletions(-) diff --git a/src/assets/languages.ts b/src/assets/languages.ts index b6d0ee58..0cbc0895 100644 --- a/src/assets/languages.ts +++ b/src/assets/languages.ts @@ -2,6 +2,8 @@ import ar from "@/assets/locales/ar.json"; import cs from "@/assets/locales/cs.json"; import de from "@/assets/locales/de.json"; import en from "@/assets/locales/en.json"; +import es from "@/assets/locales/es.json"; +import et from "@/assets/locales/et.json"; import fr from "@/assets/locales/fr.json"; import he from "@/assets/locales/he.json"; import it from "@/assets/locales/it.json"; @@ -13,6 +15,7 @@ import pirate from "@/assets/locales/pirate.json"; import pl from "@/assets/locales/pl.json"; import sv from "@/assets/locales/sv.json"; import th from "@/assets/locales/th.json"; +import tok from "@/assets/locales/tok.json"; import tr from "@/assets/locales/tr.json"; import vi from "@/assets/locales/vi.json"; import zh from "@/assets/locales/zh.json"; @@ -36,6 +39,9 @@ export const locales = { th, ne, ar, + es, + et, + tok, }; export type Locales = keyof typeof locales; diff --git a/src/setup/i18n.ts b/src/setup/i18n.ts index a3cdfe77..0110363a 100644 --- a/src/setup/i18n.ts +++ b/src/setup/i18n.ts @@ -17,22 +17,34 @@ i18n.use(initReactI18next).init({ }, }); -export const appLanguageOptions = langCodes.map((lang) => { - if (lang === "pirate") { - return { - code: "pirate", - name: "Pirate", - nativeName: "Pirate Tongue", - }; +const extraLanguages: Record< + string, + { + code: string; + name: string; + nativeName: string; } +> = { + pirate: { + code: "pirate", + name: "Pirate", + nativeName: "Pirate Tongue", + }, + minion: { + code: "minion", + name: "Minion", + nativeName: "Minionese", + }, + tok: { + code: "tok", + name: "Toki pona", + nativeName: "Toki pona", + }, +}; - if (lang === "minion") { - return { - code: "minion", - name: "Minion", - nativeName: "Minionese", - }; - } +export const appLanguageOptions = langCodes.map((lang) => { + const extraLang = extraLanguages[lang]; + if (extraLang) return extraLang; const [langObj] = ISO6391.getLanguages([lang]); if (!langObj) From 8fd224d3b5fbb79971cc3516664fbebf331f9b4d Mon Sep 17 00:00:00 2001 From: Fauzan Abdillah <57308558+fauzanebd@users.noreply.github.com> Date: Thu, 28 Dec 2023 14:05:59 +0000 Subject: [PATCH 23/32] fix sentences on readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fdc4776d..dd97d8e8 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ We do not want this project to be yet another bulky streaming site, instead it a On top of that, hosting should be as cheap and simple as possible. Just a static website with a proxy, with an optional backend if you want cross-device syncing. -Content is fetched from third parties and scraping is done fully done on the client. This means that the hoster has no files or media on their server. All files are streamed directly from the third parties. +Content is fetched from third parties and scraping is fully done on the client. This means that the hoster has no files or media on their server. All files are streamed directly from the third parties. ## ⚠️ Limitations From c347fe7ef54fa96b858e3658ec565fff77206967 Mon Sep 17 00:00:00 2001 From: Vijay <74645268+vijaysingh2219@users.noreply.github.com> Date: Thu, 28 Dec 2023 21:16:55 +0530 Subject: [PATCH 24/32] Enhance Clarity, Consistency, and Formatting in Captioning and Subtitling Options Refined language for captioning and subtitling options in the codebase: - Replaced 'captions' with 'subtitles' in player.menus keys. - Updated occurrences of "settings.captions" to "settings.subtitles" in view components. - Updated occurrences of "player.menus.settings.enableCaptions" to "player.menus.settings.enableSubtitles" in SettingsMenu.tsx component. Ensured consistency in translations by applying these changes to locales for different languages across the repository. Additionally, performed auto-formatting using ESLint and Prettier for consistent code style. This commit aims to improve overall clarity, alignment with preferred terminology, and maintain code quality through auto-formatting. --- src/assets/locales/en.json | 12 ++++++------ .../player/atoms/settings/CaptionSettingsView.tsx | 14 ++++++++------ .../player/atoms/settings/CaptionsView.tsx | 10 +++++----- .../player/atoms/settings/SettingsMenu.tsx | 6 +++--- src/pages/parts/settings/CaptionsPart.tsx | 10 +++++----- src/pages/parts/settings/SidebarPart.tsx | 2 +- 6 files changed, 28 insertions(+), 26 deletions(-) diff --git a/src/assets/locales/en.json b/src/assets/locales/en.json index f0ef16ea..bc1b154e 100644 --- a/src/assets/locales/en.json +++ b/src/assets/locales/en.json @@ -143,8 +143,8 @@ "settings": { "videoSection": "Video settings", "experienceSection": "Viewing experience", - "enableCaptions": "Enable captions", - "captionItem": "Caption settings", + "enableSubtitles": "Enable Subtitles", + "subtitleItem": "Subtitle settings", "sourceItem": "Video sources", "playbackItem": "Playback settings", "downloadItem": "Download", @@ -174,8 +174,8 @@ "text": "There was an error while trying to find any videos, please try a different source." } }, - "captions": { - "title": "Captions", + "subtitles": { + "title": "Subtitles", "customizeLabel": "Customize", "settings": { "fixCapitals": "Fix capitalization", @@ -363,8 +363,8 @@ "language": "Application language", "languageDescription": "Language applied to the entire application." }, - "captions": { - "title": "Captions", + "subtitles": { + "title": "Subtitles", "previewQuote": "I must not fear. Fear is the mind-killer.", "backgroundLabel": "Background opacity", "textSizeLabel": "Text size", diff --git a/src/components/player/atoms/settings/CaptionSettingsView.tsx b/src/components/player/atoms/settings/CaptionSettingsView.tsx index 000cbd30..fa7a8cc2 100644 --- a/src/components/player/atoms/settings/CaptionSettingsView.tsx +++ b/src/components/player/atoms/settings/CaptionSettingsView.tsx @@ -229,11 +229,11 @@ export function CaptionSettingsView({ id }: { id: string }) { return ( <> router.navigate("/captions")}> - Custom captions + Custom Subtitles setDelay(v)} @@ -244,7 +244,7 @@ export function CaptionSettingsView({ id }: { id: string }) { />
- {t("player.menus.captions.settings.fixCapitals")} + {t("player.menus.subtitles.settings.fixCapitals")}
updateStyling({ backgroundOpacity: v / 100 })} @@ -263,7 +263,7 @@ export function CaptionSettingsView({ id }: { id: string }) { textTransformer={(s) => `${s}%`} /> `${s}%`} @@ -271,7 +271,9 @@ export function CaptionSettingsView({ id }: { id: string }) { value={styling.size * 100} />
- {t("settings.captions.colorLabel")} + + {t("settings.subtitles.colorLabel")} +
{colors.map((v) => ( fileInput.current?.click()} > - {t("player.menus.captions.customChoice")} + {t("player.menus.subtitles.customChoice")} { const input = subs.map((t) => ({ ...t, @@ -162,11 +162,11 @@ export function CaptionsView({ id }: { id: string }) { onClick={() => router.navigate("/captions/settings")} className="py-1 -my-1 px-3 -mx-3 rounded tabbable" > - {t("player.menus.captions.customizeLabel")} + {t("player.menus.subtitles.customizeLabel")} } > - {t("player.menus.captions.title")} + {t("player.menus.subtitles.title")}
@@ -174,7 +174,7 @@ export function CaptionsView({ id }: { id: string }) {
disable()} selected={!lang}> - {t("player.menus.captions.offChoice")} + {t("player.menus.subtitles.offChoice")} {content} diff --git a/src/components/player/atoms/settings/SettingsMenu.tsx b/src/components/player/atoms/settings/SettingsMenu.tsx index 14b3827f..c9ecdf52 100644 --- a/src/components/player/atoms/settings/SettingsMenu.tsx +++ b/src/components/player/atoms/settings/SettingsMenu.tsx @@ -32,7 +32,7 @@ export function SettingsMenu({ id }: { id: string }) { const selectedLanguagePretty = selectedCaptionLanguage ? getLanguageFromIETF(selectedCaptionLanguage) ?? - t("player.menus.captions.unknownLanguage") + t("player.menus.subtitles.unknownLanguage") : undefined; const source = usePlayerStore((s) => s.source); @@ -81,13 +81,13 @@ export function SettingsMenu({ id }: { id: string }) { /> } > - {t("player.menus.settings.enableCaptions")} + {t("player.menus.settings.enableSubtitles")} router.navigate("/captions")} rightText={selectedLanguagePretty ?? undefined} > - {t("player.menus.settings.captionItem")} + {t("player.menus.settings.subtitleItem")} router.navigate("/playback")}> {t("player.menus.settings.playbackItem")} diff --git a/src/pages/parts/settings/CaptionsPart.tsx b/src/pages/parts/settings/CaptionsPart.tsx index 8327e343..f40e1d93 100644 --- a/src/pages/parts/settings/CaptionsPart.tsx +++ b/src/pages/parts/settings/CaptionsPart.tsx @@ -58,7 +58,7 @@ export function CaptionPreview(props: { } > @@ -79,11 +79,11 @@ export function CaptionsPart(props: { return (
- {t("settings.captions.title")} + {t("settings.subtitles.title")}
@@ -93,7 +93,7 @@ export function CaptionsPart(props: { textTransformer={(s) => `${s}%`} /> `${s}%`} @@ -104,7 +104,7 @@ export function CaptionsPart(props: { />
- {t("settings.captions.colorLabel")} + {t("settings.subtitles.colorLabel")}
{colors.map((v) => ( diff --git a/src/pages/parts/settings/SidebarPart.tsx b/src/pages/parts/settings/SidebarPart.tsx index 66d33028..16c657d3 100644 --- a/src/pages/parts/settings/SidebarPart.tsx +++ b/src/pages/parts/settings/SidebarPart.tsx @@ -54,7 +54,7 @@ export function SidebarPart() { icon: Icons.BRUSH, }, { - textKey: "settings.captions.title", + textKey: "settings.subtitles.title", id: "settings-captions", icon: Icons.CAPTIONS, }, From bc32fc3f8a8f2e79997039b02dd881264945d1a8 Mon Sep 17 00:00:00 2001 From: Vijay <74645268+vijaysingh2219@users.noreply.github.com> Date: Thu, 28 Dec 2023 21:56:28 +0530 Subject: [PATCH 25/32] Create translation string for backlink in subtitles settings --- src/assets/locales/en.json | 1 + src/components/player/atoms/settings/CaptionSettingsView.tsx | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/assets/locales/en.json b/src/assets/locales/en.json index bc1b154e..4b4874de 100644 --- a/src/assets/locales/en.json +++ b/src/assets/locales/en.json @@ -178,6 +178,7 @@ "title": "Subtitles", "customizeLabel": "Customize", "settings": { + "backlink": "Custom Subtitles", "fixCapitals": "Fix capitalization", "delay": "Caption delay" }, diff --git a/src/components/player/atoms/settings/CaptionSettingsView.tsx b/src/components/player/atoms/settings/CaptionSettingsView.tsx index fa7a8cc2..a12dea63 100644 --- a/src/components/player/atoms/settings/CaptionSettingsView.tsx +++ b/src/components/player/atoms/settings/CaptionSettingsView.tsx @@ -229,7 +229,7 @@ export function CaptionSettingsView({ id }: { id: string }) { return ( <> router.navigate("/captions")}> - Custom Subtitles + {t("player.menus.subtitles.settings.backlink")} Date: Thu, 28 Dec 2023 15:28:17 +0000 Subject: [PATCH 26/32] Added translation using Weblate (Portuguese (Brazil)) Author: Rafael Queiroz --- src/assets/locales/pt-BR.json | 1 + 1 file changed, 1 insertion(+) create mode 100644 src/assets/locales/pt-BR.json diff --git a/src/assets/locales/pt-BR.json b/src/assets/locales/pt-BR.json new file mode 100644 index 00000000..0967ef42 --- /dev/null +++ b/src/assets/locales/pt-BR.json @@ -0,0 +1 @@ +{} From 7cb78dd40d1f70c8850f77979be80a53a0d08a9a Mon Sep 17 00:00:00 2001 From: admin Date: Thu, 28 Dec 2023 10:03:40 +0000 Subject: [PATCH 27/32] Translated using Weblate (English) Currently translated at 100.0% (248 of 248 strings) Translation: movie-web/website Translate-URL: http://weblate.movie-web.app/projects/movie-web/website/en/ Author: admin --- src/assets/locales/en.json | 566 ++++++++++++++++++++----------------- 1 file changed, 301 insertions(+), 265 deletions(-) diff --git a/src/assets/locales/en.json b/src/assets/locales/en.json index 4b4874de..0eb29f7e 100644 --- a/src/assets/locales/en.json +++ b/src/assets/locales/en.json @@ -1,143 +1,177 @@ { + "about": { + "description": "movie-web is a web application that searches the internet for streams. The team aims for a mostly minimalistic approach to consuming content.", + "faqTitle": "Common questions", + "q1": { + "body": "movie-web does not host any content. When you click on something to watch, the internet is searched for the selected media (On the loading screen and in the 'video sources' tab you can see which source you're using). Media never gets uploaded by movie-web, everything is through this searching mechanism.", + "title": "Where does the content come from?" + }, + "q2": { + "body": "It's not possible to request a show or movie, movie-web does not manage any content. All content is viewed through sources on the internet.", + "title": "Where can I request a show or movie?" + }, + "q3": { + "body": "Our search results are powered by The Movie Database (TMDB) and display regardless of whether our sources actually have the content.", + "title": "The search results display the show or movie, why can't I play it?" + }, + "title": "About movie-web" + }, + "actions": { + "copied": "Copied", + "copy": "Copy" + }, "auth": { + "createAccount": "Don't have an account yet? <0>Create an account.", "deviceNameLabel": "Device name", "deviceNamePlaceholder": "Personal phone", + "generate": { + "description": "Your passphrase acts as your username and password. Make sure to keep it safe as you will need to enter it to login to your account", + "next": "I have saved my passphrase", + "passphraseFrameLabel": "Passphrase", + "title": "Your passphrase" + }, "hasAccount": "Already have an account? <0>Login here.", - "createAccount": "Don't have an account yet? <0>Create an account.", + "login": { + "description": "Please enter your passphrase to login to your account", + "deviceLengthError": "Please enter a device name", + "passphraseLabel": "12-Word passphrase", + "passphrasePlaceholder": "Passphrase", + "submit": "Login", + "title": "Login to your account", + "validationError": "Incorrect or incomplete passphrase" + }, "register": { "information": { - "title": "Account information", "color1": "Profile color one", "color2": "Profile color two", - "icon": "User icon", "header": "Enter a name for your device and pick colours and a user icon of your choosing", - "next": "Next" + "icon": "User icon", + "next": "Next", + "title": "Account information" } }, - "login": { - "title": "Login to your account", - "description": "Please enter your passphrase to login to your account", - "validationError": "Incorrect or incomplete passphrase", - "deviceLengthError": "Please enter a device name", - "submit": "Login", - "passphraseLabel": "12-Word passphrase", - "passphrasePlaceholder": "Passphrase" - }, - "generate": { - "title": "Your passphrase", - "passphraseFrameLabel": "Passphrase", - "next": "I have saved my passphrase", - "description": "Your passphrase acts as your username and password. Make sure to keep it safe as you will need to enter it to login to your account" - }, "trust": { - "title": "Do you trust this server?", - "host": "You are connecting to <0>{{hostname}} - please confirm you trust it before making an account", "failed": { - "title": "Failed to reach server", - "text": "Did you configure it correctly?" + "text": "Did you configure it correctly?", + "title": "Failed to reach server" }, - "yes": "I trust this server", - "no": "Go back" + "host": "You are connecting to <0>{{hostname}} - please confirm you trust it before making an account", + "no": "Go back", + "title": "Do you trust this server?", + "yes": "I trust this server" }, "verify": { - "title": "Confirm your passphrase", "description": "Please enter your passphrase from earlier to confirm you have saved it and to create your account", "invalidData": "Data is not valid", "noMatch": "Passphrase doesn't match", - "recaptchaFailed": "ReCaptcha validation failed", "passphraseLabel": "Your 12-word passphrase", - "register": "Create account" + "recaptchaFailed": "ReCaptcha validation failed", + "register": "Create account", + "title": "Confirm your passphrase" } }, "errors": { + "badge": "It broke", "details": "Error details", "reloadPage": "Reload the page", "showError": "Show error details", - "badge": "It broke", "title": "We encountered an error!" }, - "notFound": { - "badge": "Not found", - "title": "Couldn't find that page", - "message": "We looked everywhere: under the bins, in the closet, behind the proxy but ultimately couldn't find the page you are looking for.", - "goHome": "Back to home" + "footer": { + "legal": { + "disclaimer": "Disclaimer", + "disclaimerText": "movie-web does not host any files, it merely links to 3rd party services. Legal issues should be taken up with the file hosts and providers. movie-web is not responsible for any media files shown by the video providers." + }, + "links": { + "discord": "Discord", + "dmca": "DMCA", + "github": "GitHub" + }, + "tagline": "Watch your favourite shows and movies with this open source streaming app." }, "global": { "name": "movie-web", "pages": { - "pagetitle": "{{title}} - movie-web", - "dmca": "DMCA", - "settings": "Settings", "about": "About", + "dmca": "DMCA", "login": "Login", - "register": "Register" + "pagetitle": "{{title}} - movie-web", + "register": "Register", + "settings": "Settings" + } + }, + "home": { + "bookmarks": { + "sectionTitle": "Bookmarks" + }, + "continueWatching": { + "sectionTitle": "Continue Watching" + }, + "mediaList": { + "stopEditing": "Stop editing" + }, + "search": { + "allResults": "That's all we have!", + "failed": "Failed to find media, try again!", + "loading": "Loading...", + "noResults": "We couldn't find anything!", + "placeholder": "What do you want to watch?", + "sectionTitle": "Search results" + }, + "titles": { + "day": { + "default": "What would you like to watch this afternoon?" + }, + "morning": { + "default": "What would you like to watch this morning?", + "extra": [ + "I hear Before Sunrise is good" + ] + }, + "night": { + "default": "What would you like to watch tonight?", + "extra": [ + "Tired? I hear The Exorcist is good." + ] + } } }, "media": { + "episodeDisplay": "S{{season}} E{{episode}}", "types": { "movie": "Movie", "show": "Show" + } + }, + "navigation": { + "banner": { + "offline": "Check your internet connection" }, - "episodeDisplay": "S{{season}} E{{episode}}" + "menu": { + "about": "About us", + "donation": "Donate", + "logout": "Log out", + "register": "Sync to cloud", + "settings": "Settings", + "support": "Support" + } + }, + "notFound": { + "badge": "Not found", + "goHome": "Back to home", + "message": "We looked everywhere: under the bins, in the closet, behind the proxy but ultimately couldn't find the page you are looking for.", + "title": "Couldn't find that page" + }, + "overlays": { + "close": "Close" }, "player": { - "scraping": { - "notFound": { - "badge": "Not found", - "title": "We couldn't find that", - "text": "We have searched through our providers and cannot find the media you are looking for! We do not host the media and have no control over what is available. Please click 'Show details' below for more details.", - "homeButton": "Go home", - "detailsButton": "Show details" - }, - "items": { - "pending": "Checking for videos...", - "notFound": "Doesn't have the video", - "failure": "Error occurred" - } - }, - "casting": { - "enabled": "Casting to device..." - }, - "playbackError": { - "badge": "Playback error", - "title": "Failed to play video!", - "text": "There was an error trying to play the media. Please try again.", - "homeButton": "Go home", - "errors": { - "errorAborted": "The fetching of the media was aborted by the user's request.", - "errorNetwork": "Some kind of network error occurred which prevented the media from being successfully fetched, despite having previously been available.", - "errorDecode": "Despite having previously been determined to be usable, an error occurred while trying to decode the media resource, resulting in an error.", - "errorNotSupported": "The media or media provider object is not supported.", - "errorGenericMedia": "Unknown media error occurred." - } - }, - "metadata": { - "notFound": { - "badge": "Not found", - "title": "Couldn't find that media.", - "text": "We couldn't find the media you requested. Either it's been removed or you tampered with the URL.", - "homeButton": "Back to home" - }, - "failed": { - "badge": "Failed", - "title": "Failed to load metadata", - "text": "Could not load the media's metadata from TMDB. Please check whether TMDB is down or blocked on your internet connection.", - "homeButton": "Go home" - } - }, "back": { "default": "Back to home", "short": "Back" }, - "time": { - "regular": "{{timeWatched}} / {{duration}}", - "shortRegular": "{{timeWatched}}", - "remaining": "{{timeLeft}} left • Finish at {{timeFinished, datetime}}", - "shortRemaining": "-{{timeLeft}}" - }, - "nextEpisode": { - "next": "Next episode", - "cancel": "Cancel" + "casting": { + "enabled": "Casting to device..." }, "menus": { "settings": { @@ -177,244 +211,246 @@ "subtitles": { "title": "Subtitles", "customizeLabel": "Customize", + "offChoice": "Off", "settings": { "backlink": "Custom Subtitles", "fixCapitals": "Fix capitalization", "delay": "Caption delay" }, - "customChoice": "Select caption from file", - "offChoice": "Off", + "title": "Captions", "unknownLanguage": "Unknown" }, "downloads": { - "title": "Download", "disclaimer": "Downloads are taken directly from the provider. movie-web does not have control over how the downloads are provided.", - "hlsDisclaimer": "Downloads are taken directly from the provider. movie-web does not have control over how the downloads are provided. Please note that you are downloading an HLS playlist, this is intended for users familiar with advanced multimedia streaming.", - "downloadVideo": "Download video", - "downloadPlaylist": "Download playlist", "downloadCaption": "Download current caption", - "onPc": { - "1": "On PC, click the download button then, on the new page, right click the video and select Save video as", - "title": "Downloading on PC", - "shortTitle": "Download / PC" - }, + "downloadPlaylist": "Download playlist", + "downloadVideo": "Download video", + "hlsDisclaimer": "Downloads are taken directly from the provider. movie-web does not have control over how the downloads are provided. Please note that you are downloading an HLS playlist, this is intended for users familiar with advanced multimedia streaming.", "onAndroid": { "1": "To download on Android, click the download button then, on the new page, tap and hold on the video, then select save.", - "title": "Downloading on Android", - "shortTitle": "Download / Android" + "shortTitle": "Download / Android", + "title": "Downloading on Android" }, "onIos": { "1": "To download on iOS, click the download button then, on the new page, click , then Save to Files .", - "title": "Downloading on iOS", - "shortTitle": "Download / iOS" - } + "shortTitle": "Download / iOS", + "title": "Downloading on iOS" + }, + "onPc": { + "1": "On PC, click the download button then, on the new page, right click the video and select Save video as", + "shortTitle": "Download / PC", + "title": "Downloading on PC" + }, + "title": "Download" + }, + "episodes": { + "button": "Episodes", + "emptyState": "There are no episodes in this season, check back later!", + "episodeBadge": "E{{episode}}", + "loadingError": "Error loading season", + "loadingList": "Loading...", + "loadingTitle": "Loading..." }, "playback": { - "title": "Playback settings", - "speedLabel": "Playback speed" + "speedLabel": "Playback speed", + "title": "Playback settings" }, "quality": { - "title": "Quality", "automaticLabel": "Automatic quality", "hint": "You can try <0>switching source to get different quality options.", - "iosNoQuality": "Due to Apple-defined limitations, quality selection is not available on iOS for this source. You can try <0>switching to another source to get different quality options." - } - } - }, - "home": { - "mediaList": { - "stopEditing": "Stop editing" - }, - "titles": { - "morning": { - "default": "What would you like to watch this morning?", - "extra": ["I hear Before Sunrise is good"] + "iosNoQuality": "Due to Apple-defined limitations, quality selection is not available on iOS for this source. You can try <0>switching to another source to get different quality options.", + "title": "Quality" }, - "day": { - "default": "What would you like to watch this afternoon?", - "extra": [] + "settings": { + "captionItem": "Subtitle settings", + "downloadItem": "Download", + "enableCaptions": "Enable captions", + "experienceSection": "Viewing experience", + "playbackItem": "Playback settings", + "qualityItem": "Quality", + "sourceItem": "Video sources", + "videoSection": "Video settings" }, - "night": { - "default": "What would you like to watch tonight?", - "extra": ["Tired? I hear The Exorcist is good."] + "sources": { + "failed": { + "text": "There was an error while trying to find any videos, please try a different source.", + "title": "Failed to scrape" + }, + "noEmbeds": { + "text": "We were unable to find any embeds, please try a different source.", + "title": "No embeds found" + }, + "noStream": { + "text": "This source has no streams for this movie or show.", + "title": "No stream" + }, + "title": "Sources", + "unknownOption": "Unknown" } }, - "search": { - "loading": "Loading...", - "sectionTitle": "Search results", - "allResults": "That's all we have!", - "noResults": "We couldn't find anything!", - "failed": "Failed to find media, try again!", - "placeholder": "What do you want to watch?" + "metadata": { + "failed": { + "badge": "Failed", + "homeButton": "Go home", + "text": "Could not load the media's metadata from TMDB. Please check whether TMDB is down or blocked on your internet connection.", + "title": "Failed to load metadata" + }, + "notFound": { + "badge": "Not found", + "homeButton": "Back to home", + "text": "We couldn't find the media you requested. Either it's been removed or you tampered with the URL.", + "title": "Couldn't find that media." + } }, - "continueWatching": { - "sectionTitle": "Continue Watching" + "nextEpisode": { + "cancel": "Cancel", + "next": "Next episode" }, - "bookmarks": { - "sectionTitle": "Bookmarks" + "playbackError": { + "badge": "Playback error", + "errors": { + "errorAborted": "The fetching of the media was aborted by the user's request.", + "errorDecode": "Despite having previously been determined to be usable, an error occurred while trying to decode the media resource, resulting in an error.", + "errorGenericMedia": "Unknown media error occurred.", + "errorNetwork": "Some kind of network error occurred which prevented the media from being successfully fetched, despite having previously been available.", + "errorNotSupported": "The media or media provider object is not supported." + }, + "homeButton": "Go home", + "text": "There was an error trying to play the media. Please try again.", + "title": "Failed to play video!" + }, + "scraping": { + "items": { + "failure": "Error occurred", + "notFound": "Doesn't have the video", + "pending": "Checking for videos..." + }, + "notFound": { + "badge": "Not found", + "detailsButton": "Show details", + "homeButton": "Go home", + "text": "We have searched through our providers and cannot find the media you are looking for! We do not host the media and have no control over what is available. Please click 'Show details' below for more details.", + "title": "We couldn't find that" + } + }, + "time": { + "regular": "{{timeWatched}} / {{duration}}", + "remaining": "{{timeLeft}} left • Finish at {{timeFinished, datetime}}", + "shortRegular": "{{timeWatched}}", + "shortRemaining": "-{{timeLeft}}" } }, - "overlays": { - "close": "Close" - }, "screens": { - "loadingUser": "Loading your profile", + "dmca": { + "text": "Welcome to movie-web's DMCA contact page! We respect intellectual property rights and want to address any copyright concerns swiftly. If you believe your copyrighted work has been improperly used on our platform, please send a detailed DMCA notice to the email below. Please include a description of the copyrighted material, your contact details, and a statement of good faith belief. We're committed to resolving these matters promptly and appreciate your cooperation in keeping movie-web a place that respects creativity and copyrights.", + "title": "DMCA" + }, "loadingApp": "Loading application", + "loadingUser": "Loading your profile", "loadingUserError": { - "text": "Failed to load your profile", - "textWithReset": "Failed to load your profile from your custom server, want to reset back to the default server?", + "logout": "Logout", "reset": "Reset custom server", - "logout": "Logout" + "text": "Failed to load your profile", + "textWithReset": "Failed to load your profile from your custom server, want to reset back to the default server?" }, "migration": { "failed": "Failed to migrate your data.", "inProgress": "Please hold, we are migrating your data. This shouldn't take long." - }, - "dmca": { - "title": "DMCA", - "text": "Welcome to movie-web's DMCA contact page! We respect intellectual property rights and want to address any copyright concerns swiftly. If you believe your copyrighted work has been improperly used on our platform, please send a detailed DMCA notice to the email below. Please include a description of the copyrighted material, your contact details, and a statement of good faith belief. We're committed to resolving these matters promptly and appreciate your cooperation in keeping movie-web a place that respects creativity and copyrights." } }, - "navigation": { - "banner": { - "offline": "Check your internet connection" - }, - "menu": { - "register": "Sync to cloud", - "settings": "Settings", - "about": "About us", - "donation": "Donate", - "support": "Support", - "logout": "Log out" - } - }, - "actions": { - "copy": "Copy", - "copied": "Copied" - }, "settings": { - "unsaved": "You have unsaved changes", - "reset": "Reset", - "save": "Save", - "sidebar": { - "info": { - "title": "App information", - "hostname": "Hostname", - "backendUrl": "Backend URL", - "userId": "User ID", - "notLoggedIn": "You are not logged in", - "appVersion": "App version", - "backendVersion": "Backend version", - "unknownVersion": "Unknown", - "secure": "Secure", - "insecure": "Insecure" - } - }, - "appearance": { - "title": "Appearance", - "activeTheme": "Active", - "themes": { - "default": "Default", - "blue": "Blue", - "teal": "Teal", - "red": "Red", - "gray": "Gray" - } - }, "account": { - "title": "Account", - "register": { - "title": "Sync to the cloud", - "text": "Share your watch progress between devices and keep them synced.", - "cta": "Get started" - }, - "profile": { - "title": "Edit profile picture", - "firstColor": "Profile color one", - "secondColor": "Profile color two", - "userIcon": "User icon", - "finish": "Finish editing" - }, - "devices": { - "title": "Devices", - "failed": "Failed to load sessions", - "deviceNameLabel": "Device name", - "removeDevice": "Remove" - }, "accountDetails": { - "editProfile": "Edit", "deviceNameLabel": "Device name", "deviceNamePlaceholder": "Personal phone", + "editProfile": "Edit", "logoutButton": "Log out" }, "actions": { - "title": "Actions", "delete": { - "title": "Delete account", - "text": "This action is irreversible. All data will be deleted and nothing can be recovered.", "button": "Delete account", - "confirmTitle": "Are you sure?", + "confirmButton": "Delete account", "confirmDescription": "Are you sure you want to delete your account? All your data will be lost!", - "confirmButton": "Delete account" - } - } + "confirmTitle": "Are you sure?", + "text": "This action is irreversible. All data will be deleted and nothing can be recovered.", + "title": "Delete account" + }, + "title": "Actions" + }, + "devices": { + "deviceNameLabel": "Device name", + "failed": "Failed to load sessions", + "removeDevice": "Remove", + "title": "Devices" + }, + "profile": { + "finish": "Finish editing", + "firstColor": "Profile color one", + "secondColor": "Profile color two", + "title": "Edit profile picture", + "userIcon": "User icon" + }, + "register": { + "cta": "Get started", + "text": "Share your watch progress between devices and keep them synced.", + "title": "Sync to the cloud" + }, + "title": "Account" }, - "locale": { - "title": "Locale", - "language": "Application language", - "languageDescription": "Language applied to the entire application." + "appearance": { + "activeTheme": "Active", + "themes": { + "blue": "Blue", + "default": "Default", + "gray": "Gray", + "red": "Red", + "teal": "Teal" + }, + "title": "Appearance" }, "subtitles": { "title": "Subtitles", "previewQuote": "I must not fear. Fear is the mind-killer.", - "backgroundLabel": "Background opacity", "textSizeLabel": "Text size", - "colorLabel": "Color" + "title": "Captions" }, "connections": { + "server": { + "description": "If you would like to connect to a custom backend to store your data, enable this and provide the URL.", + "label": "Custom server", + "urlLabel": "Custom server URL" + }, "title": "Connections", "workers": { - "label": "Use custom proxy workers", + "addButton": "Add new worker", "description": "To make the application function, all traffic is routed through proxies. Enable this if you want to bring your own workers.", - "urlLabel": "Worker URLs", "emptyState": "No workers yet, add one below", - "urlPlaceholder": "https://", - "addButton": "Add new worker" - }, - "server": { - "label": "Custom server", - "description": "If you would like to connect to a custom backend to store your data, enable this and provide the URL.", - "urlLabel": "Custom server URL" + "label": "Use custom proxy workers", + "urlLabel": "Worker URLs", + "urlPlaceholder": "https://" } - } - }, - "about": { - "title": "About movie-web", - "description": "movie-web is a web application that searches the internet for streams. The team aims for a mostly minimalistic approach to consuming content.", - "faqTitle": "Common questions", - "q1": { - "title": "Where does the content come from?", - "body": "movie-web does not host any content. When you click on something to watch, the internet is searched for the selected media (On the loading screen and in the 'video sources' tab you can see which source you're using). Media never gets uploaded by movie-web, everything is through this searching mechanism." }, - "q2": { - "title": "Where can I request a show or movie?", - "body": "It's not possible to request a show or movie, movie-web does not manage any content. All content is viewed through sources on the internet." + "locale": { + "language": "Application language", + "languageDescription": "Language applied to the entire application.", + "title": "Locale" }, - "q3": { - "title": "The search results display the show or movie, why can't I play it?", - "body": "Our search results are powered by The Movie Database (TMDB) and display regardless of whether our sources actually have the content." - } - }, - "footer": { - "tagline": "Watch your favourite shows and movies with this open source streaming app.", - "links": { - "github": "GitHub", - "dmca": "DMCA", - "discord": "Discord" + "reset": "Reset", + "save": "Save", + "sidebar": { + "info": { + "appVersion": "App version", + "backendUrl": "Backend URL", + "backendVersion": "Backend version", + "hostname": "Hostname", + "insecure": "Insecure", + "notLoggedIn": "You are not logged in", + "secure": "Secure", + "title": "App information", + "unknownVersion": "Unknown", + "userId": "User ID" + } }, - "legal": { - "disclaimer": "Disclaimer", - "disclaimerText": "movie-web does not host any files, it merely links to 3rd party services. Legal issues should be taken up with the file hosts and providers. movie-web is not responsible for any media files shown by the video providers." - } + "unsaved": "You have unsaved changes" } } From 7f5fd263ea0b2ed8fc95b88f7d3552eb50056857 Mon Sep 17 00:00:00 2001 From: Jakub Herda Date: Thu, 28 Dec 2023 13:14:14 +0000 Subject: [PATCH 28/32] Translated using Weblate (Polish) Currently translated at 13.7% (34 of 248 strings) Translation: movie-web/website Translate-URL: http://weblate.movie-web.app/projects/movie-web/website/pl/ Author: Jakub Herda --- src/assets/locales/pl.json | 142 +++++++++++++++++++------------------ 1 file changed, 73 insertions(+), 69 deletions(-) diff --git a/src/assets/locales/pl.json b/src/assets/locales/pl.json index eb84442f..1b1514b3 100644 --- a/src/assets/locales/pl.json +++ b/src/assets/locales/pl.json @@ -1,74 +1,78 @@ { - "global": { - "name": "movie-web" + "auth": { + "deviceNameLabel": "Nazwa urządzenia", + "deviceNamePlaceholder": "Telefon osobisty" + }, + "global": { + "name": "movie-web" + }, + "home": { + "bookmarks": { + "sectionTitle": "Zakładki" }, - "home": { - "search": { - "allResults": "To wszystko co mamy!", - "sectionTitle": "Wyniki wyszukiwania", - "noResults": "Nie mogliśmy niczego znaleźć!", - "failed": "Nie udało się znaleźć mediów, Spróbuj ponownie!", - "loading": "Wczytywanie...", - "placeholder": "Co chciałbyś obejrzeć?" - }, - "bookmarks": { - "sectionTitle": "Zakładki" - }, - "continueWatching": { - "sectionTitle": "Kontynuuj oglądanie" - } + "continueWatching": { + "sectionTitle": "Kontynuuj oglądanie" }, - "media": { - "types": { - "movie": "Filmy", - "show": "Seriale" - }, - "episodeDisplay": "S{{season}} E{{episode}}" - }, - "player": { - "playbackError": { - "title": "Ups, popsuło się!" - }, - "metadata": { - "notFound": { - "badge": "Nie znaleziono", - "homeButton": "Wróć na stronę główną", - "title": "Nie można znaleźć multimediów.", - "text": "Nie mogliśmy znaleźć rządanych multimediów. Albo zostały usunięte, albo grzebałeś przy adresie URL." - } - }, - "menus": { - "captions": { - "customChoice": "Załącz", - "customizeLabel": "Personalizuj", - "title": "Napisy" - }, - "sources": { - "title": "Źródła" - }, - "episodes": { - "button": "Odcinki", - "loadingTitle": "Wczytywanie...", - "loadingList": "Wczytywanie..." - } - }, - "back": { - "default": "Wróć na stronę główną", - "short": "Wróć" - } - }, - "notFound": { - "badge": "Nie znaleziono", - "goHome": "Wróć na stronę główną", - "title": "Nie można znaleźć tej strony", - "message": "Szukaliśmy wszędzie: w koszu, w szafie a nawet w piwnicy, ale nie byliśmy w stanie znaleźć strony której szukasz." - }, - "navigation": { - "banner": { - "offline": "Sprawdź swoje połączenie sieciowe" - } - }, - "overlays": { - "close": "Zamknąć" + "search": { + "allResults": "To wszystko co mamy!", + "failed": "Nie udało się znaleźć mediów, Spróbuj ponownie!", + "loading": "Wczytywanie...", + "noResults": "Nie mogliśmy niczego znaleźć!", + "placeholder": "Co chciałbyś obejrzeć?", + "sectionTitle": "Wyniki wyszukiwania" } + }, + "media": { + "episodeDisplay": "S{{season}} E{{episode}}", + "types": { + "movie": "Filmy", + "show": "Seriale" + } + }, + "navigation": { + "banner": { + "offline": "Sprawdź swoje połączenie sieciowe" + } + }, + "notFound": { + "badge": "Nie znaleziono", + "goHome": "Wróć na stronę główną", + "message": "Szukaliśmy wszędzie: w koszu, w szafie a nawet w piwnicy, ale nie byliśmy w stanie znaleźć strony której szukasz.", + "title": "Nie można znaleźć tej strony" + }, + "overlays": { + "close": "Zamknąć" + }, + "player": { + "back": { + "default": "Wróć na stronę główną", + "short": "Wróć" + }, + "menus": { + "captions": { + "customChoice": "Załącz", + "customizeLabel": "Personalizuj", + "title": "Napisy" + }, + "episodes": { + "button": "Odcinki", + "loadingList": "Wczytywanie...", + "loadingTitle": "Wczytywanie..." + }, + "sources": { + "title": "Źródła" + } + }, + "metadata": { + "notFound": { + "badge": "Nie znaleziono", + "homeButton": "Wróć na stronę główną", + "text": "Nie mogliśmy znaleźć rządanych multimediów. Albo zostały usunięte, albo grzebałeś przy adresie URL.", + "title": "Nie można znaleźć multimediów." + } + }, + "playbackError": { + "title": "Ups, popsuło się!" + } + } } From 59b4e66d701e42b6910f51b0442a8efd6a63d09f Mon Sep 17 00:00:00 2001 From: Rafael Queiroz Date: Thu, 28 Dec 2023 15:30:09 +0000 Subject: [PATCH 29/32] Translated using Weblate (Portuguese (Brazil)) Currently translated at 4.8% (12 of 248 strings) Translation: movie-web/website Translate-URL: http://weblate.movie-web.app/projects/movie-web/website/pt_BR/ Author: Rafael Queiroz --- src/assets/locales/pt-BR.json | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/assets/locales/pt-BR.json b/src/assets/locales/pt-BR.json index 0967ef42..eb77c325 100644 --- a/src/assets/locales/pt-BR.json +++ b/src/assets/locales/pt-BR.json @@ -1 +1,22 @@ -{} +{ + "auth": { + "createAccount": "Ainda não tem uma conta? <0>Crie uma conta.", + "deviceNameLabel": "Nome do dispositivo", + "deviceNamePlaceholder": "Telefone pessoal", + "hasAccount": "Já tem uma conta? <0>Entre aqui.", + "login": { + "description": "Por favor, insira sua frase de acesso para entrar na sua conta", + "title": "Entrar na sua conta" + }, + "register": { + "information": { + "color1": "Cor do perfil um", + "color2": "Cor do perfil dois", + "header": "Digite um nome para o seu dispositivo e escolha cores e um ícone de usuário de sua preferência", + "icon": "ícone do usuário", + "next": "Próximo", + "title": "Informações da conta" + } + } + } +} From 46f9925bdc18e3035f90c8d01c39be27fc330108 Mon Sep 17 00:00:00 2001 From: Rafael Queiroz Date: Thu, 28 Dec 2023 15:44:17 +0000 Subject: [PATCH 30/32] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (248 of 248 strings) Translation: movie-web/website Translate-URL: http://weblate.movie-web.app/projects/movie-web/website/pt_BR/ Author: Rafael Queiroz --- src/assets/locales/pt-BR.json | 404 +++++++++++++++++++++++++++++++++- 1 file changed, 402 insertions(+), 2 deletions(-) diff --git a/src/assets/locales/pt-BR.json b/src/assets/locales/pt-BR.json index eb77c325..a066c359 100644 --- a/src/assets/locales/pt-BR.json +++ b/src/assets/locales/pt-BR.json @@ -1,22 +1,422 @@ { + "about": { + "description": "movie-web é uma aplicação web que busca na internet por streams. A equipe visa uma abordagem principalmente minimalista para consumir conteúdo.", + "faqTitle": "Perguntas comuns", + "q1": { + "body": "movie-web não hospeda nenhum conteúdo. Quando você clica em algo para assistir, a internet é pesquisada pela mídia selecionada (Na tela de carregamento e na aba 'fontes de vídeo' você pode ver qual fonte está usando). A mídia nunca é carregada pelo movie-web, tudo é através deste mecanismo de busca.", + "title": "De onde vem o conteúdo?" + }, + "q2": { + "body": "Não é possível solicitar um filme ou série, o movie-web não gerencia nenhum conteúdo. Todo o conteúdo é visualizado através de fontes na internet.", + "title": "Onde posso solicitar um filme ou série?" + }, + "q3": { + "body": "Nossos resultados de pesquisa são alimentados pelo The Movie Database (TMDB) e são exibidos independentemente de nossas fontes terem ou não o conteúdo.", + "title": "Os resultados da pesquisa mostram o filme ou série, por que não consigo reproduzi-lo?" + }, + "title": "Sobre o movie-web" + }, + "actions": { + "copied": "Copiado", + "copy": "Copiar" + }, "auth": { "createAccount": "Ainda não tem uma conta? <0>Crie uma conta.", "deviceNameLabel": "Nome do dispositivo", "deviceNamePlaceholder": "Telefone pessoal", + "generate": { + "description": "Sua frase de acesso funciona como seu nome de usuário e senha. Certifique-se de mantê-la segura, pois você precisará inseri-la para entrar na sua conta", + "next": "Eu salvei minha frase de acesso", + "passphraseFrameLabel": "Frase de acesso", + "title": "Sua frase de acesso" + }, "hasAccount": "Já tem uma conta? <0>Entre aqui.", "login": { "description": "Por favor, insira sua frase de acesso para entrar na sua conta", - "title": "Entrar na sua conta" + "deviceLengthError": "Por favor, insira um nome para o dispositivo", + "passphraseLabel": "Frase de acesso de 12 palavras", + "passphrasePlaceholder": "Frase de acesso", + "submit": "Entrar", + "title": "Entrar na sua conta", + "validationError": "Frase de acesso incorreta ou incompleta" }, "register": { "information": { "color1": "Cor do perfil um", "color2": "Cor do perfil dois", "header": "Digite um nome para o seu dispositivo e escolha cores e um ícone de usuário de sua preferência", - "icon": "ícone do usuário", + "icon": "Ícone do usuário", "next": "Próximo", "title": "Informações da conta" } + }, + "trust": { + "failed": { + "text": "Você o configurou corretamente?", + "title": "Falha ao alcançar o servidor" + }, + "host": "Você está se conectando a <0>{{hostname}} - por favor, confirme se confia nele antes de criar uma conta", + "no": "Voltar", + "title": "Você confia neste servidor?", + "yes": "Eu confio neste servidor" + }, + "verify": { + "description": "Por favor, insira sua frase de acesso anterior para confirmar que você a salvou e para criar sua conta", + "invalidData": "Dados não são válidos", + "noMatch": "Frase de acesso não corresponde", + "passphraseLabel": "Sua frase de acesso de 12 palavras", + "recaptchaFailed": "Falha na validação do ReCaptcha", + "register": "Criar conta", + "title": "Confirme sua frase de acesso" } + }, + "errors": { + "badge": "Quebrou", + "details": "Detalhes do erro", + "reloadPage": "Recarregar a página", + "showError": "Mostrar detalhes do erro", + "title": "Encontramos um erro!" + }, + "footer": { + "legal": { + "disclaimer": "Aviso legal", + "disclaimerText": "movie-web não hospeda nenhum arquivo, apenas fornece links para serviços de terceiros. Questões legais devem ser tratadas com os hosts de arquivos e provedores. movie-web não é responsável por quaisquer arquivos de mídia exibidos pelos provedores de vídeo." + }, + "links": { + "discord": "Discord", + "dmca": "DMCA", + "github": "GitHub" + }, + "tagline": "Assista seus programas e filmes favoritos com este aplicativo de streaming de código aberto." + }, + "global": { + "name": "movie-web", + "pages": { + "about": "Sobre", + "dmca": "DMCA", + "login": "Entrar", + "pagetitle": "{{title}} - movie-web", + "register": "Registrar", + "settings": "Configurações" + } + }, + "home": { + "bookmarks": { + "sectionTitle": "Favoritos" + }, + "continueWatching": { + "sectionTitle": "Continue assistindo" + }, + "mediaList": { + "stopEditing": "Parar de editar" + }, + "search": { + "allResults": "Isso é tudo que temos!", + "failed": "Falha ao encontrar mídia, tente novamente!", + "loading": "Carregando...", + "noResults": "Não conseguimos encontrar nada!", + "placeholder": "O que você quer assistir?", + "sectionTitle": "Resultados da pesquisa" + }, + "titles": { + "day": { + "default": "O que você gostaria de assistir esta tarde?" + }, + "morning": { + "default": "O que você gostaria de assistir esta manhã?", + "extra": [ + "Ouvi dizer que Antes do Amanhecer é bom" + ] + }, + "night": { + "default": "O que você gostaria de assistir esta noite?", + "extra": [ + "Cansado? Ouvi dizer que O Exorcista é bom." + ] + } + } + }, + "media": { + "episodeDisplay": "T{{season}} E{{episode}}", + "types": { + "movie": "Filme", + "show": "Série" + } + }, + "navigation": { + "banner": { + "offline": "Verifique sua conexão com a internet" + }, + "menu": { + "about": "Sobre nós", + "donation": "Doar", + "logout": "Sair", + "register": "Sincronizar com a nuvem", + "settings": "Configurações", + "support": "Suporte" + } + }, + "notFound": { + "badge": "Não encontrado", + "goHome": "Voltar para o início", + "message": "Procuramos em todos os lugares: debaixo das lixeiras, no armário, atrás do proxy, mas no final não conseguimos encontrar a página que você está procurando.", + "title": "Não conseguimos encontrar essa página" + }, + "overlays": { + "close": "Fechar" + }, + "player": { + "back": { + "default": "Voltar para o início", + "short": "Voltar" + }, + "casting": { + "enabled": "Transmitindo para o dispositivo..." + }, + "menus": { + "captions": { + "customChoice": "Selecionar legenda de arquivo", + "customizeLabel": "Personalizar", + "offChoice": "Desligado", + "settings": { + "delay": "Atraso de legendas", + "fixCapitals": "Corrigir capitalização" + }, + "title": "Legendas", + "unknownLanguage": "Idioma desconhecido" + }, + "downloads": { + "disclaimer": "Os downloads são feitos diretamente do provedor. movie-web não tem controle sobre como os downloads são fornecidos.", + "downloadCaption": "Baixar legenda atual", + "downloadPlaylist": "Baixar playlist", + "downloadVideo": "Baixar vídeo", + "hlsDisclaimer": "Os downloads são feitos diretamente do provedor. movie-web não tem controle sobre como os downloads são fornecidos. Por favor, note que você está baixando uma playlist HLS, isso é destinado para usuários familiarizados com streaming multimídia avançado.", + "onAndroid": { + "1": "Para baixar no Android, clique no botão de download e, na nova página, toque e segure no vídeo, depois selecione salvar.", + "shortTitle": "Baixar / Android", + "title": "Baixando no Android" + }, + "onIos": { + "1": "Para baixar no iOS, clique no botão de download e, na nova página, clique em , depois em Salvar em Arquivos .", + "shortTitle": "Baixar / iOS", + "title": "Baixando no iOS" + }, + "onPc": { + "1": "No PC, clique no botão de download e, na nova página, clique com o botão direito do mouse no vídeo e selecione Salvar vídeo como", + "shortTitle": "Baixar / PC", + "title": "Baixando no PC" + }, + "title": "Baixar" + }, + "episodes": { + "button": "Episódios", + "emptyState": "Não há episódios nesta temporada, volte mais tarde!", + "episodeBadge": "E{{episode}}", + "loadingError": "Erro ao carregar temporada", + "loadingList": "Carregando...", + "loadingTitle": "Carregando..." + }, + "playback": { + "speedLabel": "Velocidade de reprodução", + "title": "Configurações de reprodução" + }, + "quality": { + "automaticLabel": "Qualidade automática", + "hint": "Você pode tentar <0>trocar de fonte para obter diferentes opções de qualidade.", + "iosNoQuality": "Devido a limitações definidas pela Apple, a seleção de qualidade não está disponível no iOS para esta fonte. Você pode tentar <0>trocar para outra fonte para obter diferentes opções de qualidade.", + "title": "Qualidade" + }, + "settings": { + "captionItem": "Configurações de legendas", + "downloadItem": "Baixar", + "enableCaptions": "Ativar legendas", + "experienceSection": "Experiência de visualização", + "playbackItem": "Configurações de reprodução", + "qualityItem": "Qualidade", + "sourceItem": "Fontes de vídeo", + "videoSection": "Configurações de vídeo" + }, + "sources": { + "failed": { + "text": "Houve um erro ao tentar encontrar vídeos, por favor, tente uma fonte diferente.", + "title": "Falha ao raspar" + }, + "noEmbeds": { + "text": "Não conseguimos encontrar nenhum incorporado, por favor, tente uma fonte diferente.", + "title": "Nenhum incorporado encontrado" + }, + "noStream": { + "text": "Esta fonte não tem transmissões para este filme ou série.", + "title": "Sem transmissão" + }, + "title": "Fontes", + "unknownOption": "Desconhecido" + } + }, + "metadata": { + "failed": { + "badge": "Falhou", + "homeButton": "Ir para o início", + "text": "Não foi possível carregar os metadados da mídia do TMDB. Por favor, verifique se o TMDB está fora do ar ou bloqueado na sua conexão de internet.", + "title": "Falha ao carregar metadados" + }, + "notFound": { + "badge": "Não encontrado", + "homeButton": "Voltar para o início", + "text": "Não conseguimos encontrar a mídia que você solicitou. Ou ela foi removida ou você alterou o URL.", + "title": "Não conseguimos encontrar essa mídia." + } + }, + "nextEpisode": { + "cancel": "Cancelar", + "next": "Próximo episódio" + }, + "playbackError": { + "badge": "Erro de reprodução", + "errors": { + "errorAborted": "A busca pela mídia foi abortada a pedido do usuário.", + "errorDecode": "Apesar de ter sido previamente determinado como utilizável, ocorreu um erro ao tentar decodificar o recurso de mídia, resultando em um erro.", + "errorGenericMedia": "Ocorreu um erro desconhecido de mídia.", + "errorNetwork": "Ocorreu algum tipo de erro de rede que impediu a mídia de ser buscada com sucesso, apesar de ter sido previamente disponível.", + "errorNotSupported": "A mídia ou objeto do provedor de mídia não é suportado." + }, + "homeButton": "Ir para o início", + "text": "Houve um erro ao tentar reproduzir a mídia. Por favor, tente novamente.", + "title": "Falha ao reproduzir o vídeo!" + }, + "scraping": { + "items": { + "failure": "Ocorreu um erro", + "notFound": "Não tem o vídeo", + "pending": "Verificando vídeos..." + }, + "notFound": { + "badge": "Não encontrado", + "detailsButton": "Mostrar detalhes", + "homeButton": "Ir para o início", + "text": "Procuramos em nossos provedores e não conseguimos encontrar a mídia que você está procurando! Não hospedamos a mídia e não temos controle sobre o que está disponível. Por favor, clique em 'Mostrar detalhes' abaixo para mais informações.", + "title": "Não conseguimos encontrar isso" + } + }, + "time": { + "regular": "{{timeWatched}} / {{duration}}", + "remaining": "{{timeLeft}} restantes • Terminar às {{timeFinished, datetime}}", + "shortRegular": "{{timeWatched}}", + "shortRemaining": "-{{timeLeft}}" + } + }, + "screens": { + "dmca": { + "text": "Bem-vindo à página de contato do DMCA do movie-web! Respeitamos os direitos de propriedade intelectual e queremos resolver quaisquer preocupações com direitos autorais rapidamente. Se você acredita que seu trabalho protegido por direitos autorais foi usado indevidamente em nossa plataforma, envie um aviso detalhado de DMCA para o e-mail abaixo. Inclua uma descrição do material protegido por direitos autorais, seus detalhes de contato e uma declaração de crença de boa fé. Estamos comprometidos em resolver essas questões prontamente e agradecemos sua cooperação em manter o movie-web um lugar que respeita a criatividade e os direitos autorais.", + "title": "DMCA" + }, + "loadingApp": "Carregando aplicativo", + "loadingUser": "Carregando seu perfil", + "loadingUserError": { + "logout": "Sair", + "reset": "Redefinir servidor personalizado", + "text": "Falha ao carregar seu perfil", + "textWithReset": "Falha ao carregar seu perfil do seu servidor personalizado, deseja redefinir para o servidor padrão?" + }, + "migration": { + "failed": "Falha ao migrar seus dados.", + "inProgress": "Por favor, aguarde, estamos migrando seus dados. Isso não deve demorar muito." + } + }, + "settings": { + "account": { + "accountDetails": { + "deviceNameLabel": "Nome do dispositivo", + "deviceNamePlaceholder": "Telefone pessoal", + "editProfile": "Editar", + "logoutButton": "Sair" + }, + "actions": { + "delete": { + "button": "Excluir conta", + "confirmButton": "Excluir conta", + "confirmDescription": "Você tem certeza de que deseja excluir sua conta? Todos os seus dados serão perdidos!", + "confirmTitle": "Você tem certeza?", + "text": "Esta ação é irreversível. Todos os dados serão excluídos e nada poderá ser recuperado.", + "title": "Excluir conta" + }, + "title": "Ações" + }, + "devices": { + "deviceNameLabel": "Nome do dispositivo", + "failed": "Falha ao carregar sessões", + "removeDevice": "Remover", + "title": "Dispositivos" + }, + "profile": { + "finish": "Finalizar edição", + "firstColor": "Cor do perfil um", + "secondColor": "Cor do perfil dois", + "title": "Editar foto de perfil", + "userIcon": "Ícone do usuário" + }, + "register": { + "cta": "Começar", + "text": "Compartilhe seu progresso de visualização entre dispositivos e mantenha-os sincronizados.", + "title": "Sincronizar com a nuvem" + }, + "title": "Conta" + }, + "appearance": { + "activeTheme": "Ativo", + "themes": { + "blue": "Azul", + "default": "Padrão", + "gray": "Cinza", + "red": "Vermelho", + "teal": "Verde-azulado" + }, + "title": "Aparência" + }, + "captions": { + "backgroundLabel": "Opacidade do fundo", + "colorLabel": "Cor", + "previewQuote": "Não devo temer. O medo é o assassino da mente.", + "textSizeLabel": "Tamanho do texto", + "title": "Legendas" + }, + "connections": { + "server": { + "description": "Se você deseja se conectar a um backend personalizado para armazenar seus dados, ative isso e forneça a URL.", + "label": "Servidor personalizado", + "urlLabel": "URL do servidor personalizado" + }, + "title": "Conexões", + "workers": { + "addButton": "Adicionar novo worker", + "description": "Para fazer o aplicativo funcionar, todo o tráfego é roteado através de proxies. Ative isso se você quiser trazer seus próprios workers.", + "emptyState": "Ainda não há workers, adicione um abaixo", + "label": "Usar proxy workers personalizados", + "urlLabel": "URLs dos workers", + "urlPlaceholder": "https://" + } + }, + "locale": { + "language": "Idioma do aplicativo", + "languageDescription": "Idioma aplicado a todo o aplicativo.", + "title": "Região" + }, + "reset": "Redefinir", + "save": "Salvar", + "sidebar": { + "info": { + "appVersion": "Versão do aplicativo", + "backendUrl": "URL do backend", + "backendVersion": "Versão do backend", + "hostname": "Nome do host", + "insecure": "Inseguro", + "notLoggedIn": "Você não está logado", + "secure": "Seguro", + "title": "Informações do aplicativo", + "unknownVersion": "Desconhecido", + "userId": "ID do usuário" + } + }, + "unsaved": "Você tem alterações não salvas" } } From 61a76072586d22a8a18c9e3b11ccdc76e6964a03 Mon Sep 17 00:00:00 2001 From: William Oldham Date: Thu, 28 Dec 2023 23:48:54 +0000 Subject: [PATCH 31/32] Fix missing English subtitle translations and remove duplicate sections --- src/assets/locales/en.json | 55 +++++++------------------------------- 1 file changed, 9 insertions(+), 46 deletions(-) diff --git a/src/assets/locales/en.json b/src/assets/locales/en.json index 0eb29f7e..a9baf68a 100644 --- a/src/assets/locales/en.json +++ b/src/assets/locales/en.json @@ -124,15 +124,11 @@ }, "morning": { "default": "What would you like to watch this morning?", - "extra": [ - "I hear Before Sunrise is good" - ] + "extra": ["I hear Before Sunrise is good"] }, "night": { "default": "What would you like to watch tonight?", - "extra": [ - "Tired? I hear The Exorcist is good." - ] + "extra": ["Tired? I hear The Exorcist is good."] } } }, @@ -211,18 +207,18 @@ "subtitles": { "title": "Subtitles", "customizeLabel": "Customize", - "offChoice": "Off", "settings": { - "backlink": "Custom Subtitles", "fixCapitals": "Fix capitalization", - "delay": "Caption delay" + "delay": "Subtitle delay", + "backlink": "Custom subtitles" }, - "title": "Captions", + "customChoice": "Select subtitle from file", + "offChoice": "Off", "unknownLanguage": "Unknown" }, "downloads": { "disclaimer": "Downloads are taken directly from the provider. movie-web does not have control over how the downloads are provided.", - "downloadCaption": "Download current caption", + "downloadSubtitle": "Download current subtitle", "downloadPlaylist": "Download playlist", "downloadVideo": "Download video", "hlsDisclaimer": "Downloads are taken directly from the provider. movie-web does not have control over how the downloads are provided. Please note that you are downloading an HLS playlist, this is intended for users familiar with advanced multimedia streaming.", @@ -243,14 +239,6 @@ }, "title": "Download" }, - "episodes": { - "button": "Episodes", - "emptyState": "There are no episodes in this season, check back later!", - "episodeBadge": "E{{episode}}", - "loadingError": "Error loading season", - "loadingList": "Loading...", - "loadingTitle": "Loading..." - }, "playback": { "speedLabel": "Playback speed", "title": "Playback settings" @@ -260,32 +248,6 @@ "hint": "You can try <0>switching source to get different quality options.", "iosNoQuality": "Due to Apple-defined limitations, quality selection is not available on iOS for this source. You can try <0>switching to another source to get different quality options.", "title": "Quality" - }, - "settings": { - "captionItem": "Subtitle settings", - "downloadItem": "Download", - "enableCaptions": "Enable captions", - "experienceSection": "Viewing experience", - "playbackItem": "Playback settings", - "qualityItem": "Quality", - "sourceItem": "Video sources", - "videoSection": "Video settings" - }, - "sources": { - "failed": { - "text": "There was an error while trying to find any videos, please try a different source.", - "title": "Failed to scrape" - }, - "noEmbeds": { - "text": "We were unable to find any embeds, please try a different source.", - "title": "No embeds found" - }, - "noStream": { - "text": "This source has no streams for this movie or show.", - "title": "No stream" - }, - "title": "Sources", - "unknownOption": "Unknown" } }, "metadata": { @@ -412,7 +374,8 @@ "title": "Subtitles", "previewQuote": "I must not fear. Fear is the mind-killer.", "textSizeLabel": "Text size", - "title": "Captions" + "backgroundLabel": "Background opacity", + "colorLabel": "Color" }, "connections": { "server": { From 061cb548d0bf06a2e2ec7086abd0206a88fbe31f Mon Sep 17 00:00:00 2001 From: mrjvs Date: Fri, 29 Dec 2023 13:02:55 +0100 Subject: [PATCH 32/32] Fix error messages for providers api --- src/hooks/useProviderScrape.tsx | 2 +- src/pages/parts/player/ScrapeErrorPart.tsx | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/hooks/useProviderScrape.tsx b/src/hooks/useProviderScrape.tsx index 2ee2af5b..44f823da 100644 --- a/src/hooks/useProviderScrape.tsx +++ b/src/hooks/useProviderScrape.tsx @@ -23,7 +23,7 @@ export interface ScrapingSegment { embedId?: string; status: "failure" | "pending" | "notfound" | "success" | "waiting"; reason?: string; - error?: unknown; + error?: any; percentage: number; } diff --git a/src/pages/parts/player/ScrapeErrorPart.tsx b/src/pages/parts/player/ScrapeErrorPart.tsx index 6b52c796..75526ca2 100644 --- a/src/pages/parts/player/ScrapeErrorPart.tsx +++ b/src/pages/parts/player/ScrapeErrorPart.tsx @@ -35,6 +35,8 @@ export function ScrapeErrorPart(props: ScrapeErrorPartProps) { Object.values(data.sources).forEach((v) => { str += `${v.id}: ${v.status}\n`; if (v.reason) str += `${v.reason}\n`; + if (v.error?.message) + str += `${v.error.name ?? "unknown"}: ${v.error.message}\n`; if (v.error) str += `${v.error.toString()}\n`; }); return str;