mirror of
https://github.com/movie-web/movie-web.git
synced 2024-12-27 12:41:53 +01:00
commit
59958487d2
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "movie-web",
|
"name": "movie-web",
|
||||||
"version": "4.5.1",
|
"version": "4.6.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"homepage": "https://github.com/movie-web/movie-web",
|
"homepage": "https://github.com/movie-web/movie-web",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
@ -4,7 +4,7 @@ window.__CONFIG__ = {
|
|||||||
VITE_CORS_PROXY_URL: "",
|
VITE_CORS_PROXY_URL: "",
|
||||||
|
|
||||||
// The READ API key to access TMDB
|
// The READ API key to access TMDB
|
||||||
VITE_TMDB_READ_API_KEY: "CHANGEME",
|
VITE_TMDB_READ_API_KEY: "",
|
||||||
|
|
||||||
// The DMCA email displayed in the footer, null to hide the DMCA link
|
// The DMCA email displayed in the footer, null to hide the DMCA link
|
||||||
VITE_DMCA_EMAIL: null,
|
VITE_DMCA_EMAIL: null,
|
||||||
@ -16,5 +16,5 @@ window.__CONFIG__ = {
|
|||||||
VITE_BACKEND_URL: null,
|
VITE_BACKEND_URL: null,
|
||||||
|
|
||||||
// A comma separated list of disallowed IDs in the case of a DMCA claim - in the format "series-<id>" and "movie-<id>"
|
// A comma separated list of disallowed IDs in the case of a DMCA claim - in the format "series-<id>" and "movie-<id>"
|
||||||
VITE_DISALLOWED_IDS: ""
|
VITE_DISALLOWED_IDS: "",
|
||||||
};
|
};
|
||||||
|
@ -2,6 +2,7 @@ import ar from "@/assets/locales/ar.json";
|
|||||||
import bg from "@/assets/locales/bg.json";
|
import bg from "@/assets/locales/bg.json";
|
||||||
import bn from "@/assets/locales/bn.json";
|
import bn from "@/assets/locales/bn.json";
|
||||||
import ca from "@/assets/locales/ca.json";
|
import ca from "@/assets/locales/ca.json";
|
||||||
|
import caVl from "@/assets/locales/ca@valencia.json";
|
||||||
import cs from "@/assets/locales/cs.json";
|
import cs from "@/assets/locales/cs.json";
|
||||||
import de from "@/assets/locales/de.json";
|
import de from "@/assets/locales/de.json";
|
||||||
import el from "@/assets/locales/el.json";
|
import el from "@/assets/locales/el.json";
|
||||||
@ -46,6 +47,7 @@ import zh from "@/assets/locales/zh.json";
|
|||||||
export const locales = {
|
export const locales = {
|
||||||
en,
|
en,
|
||||||
ca,
|
ca,
|
||||||
|
"ca-ES": caVl,
|
||||||
cs,
|
cs,
|
||||||
de,
|
de,
|
||||||
fr,
|
fr,
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
"description": "movie-web és una aplicació web que cerca fluxos a internet. L'equip té com a objectiu un enfocament majoritàriament minimalista del consum de contingut.",
|
"description": "movie-web és una aplicació web que cerca fluxos a internet. L'equip té com a objectiu un enfocament majoritàriament minimalista del consum de contingut.",
|
||||||
"faqTitle": "Preguntes freqüents",
|
"faqTitle": "Preguntes freqüents",
|
||||||
"q1": {
|
"q1": {
|
||||||
"body": "movie-web no allotja cap contingut. Quan feu clic a alguna cosa per a mirar-la, es busca a Internet el contingut seleccionat (a la pantalla de càrrega i a la pestanya «Fonts de vídeo» podeu veure quina font utilitzeu). movie-web mai hi puja contingut, tot és a través d'aquest mecanisme de cerca.",
|
"body": "movie-web no allotja cap contingut. Quan feu clic a un contingut per a mirar-lo, es busca a Internet (a la pantalla de càrrega i a la pestanya «Fonts de vídeo» podeu veure quina font utilitzeu). movie-web mai hi puja contingut, tot és a través d'aquest mecanisme de cerca.",
|
||||||
"title": "D'on prové el contingut?"
|
"title": "D'on prové el contingut?"
|
||||||
},
|
},
|
||||||
"q2": {
|
"q2": {
|
||||||
@ -57,6 +57,8 @@
|
|||||||
},
|
},
|
||||||
"host": "Us esteu connectant a <0>{{hostname}}</0>. Confirmeu que hi confieu abans de crear un compte",
|
"host": "Us esteu connectant a <0>{{hostname}}</0>. Confirmeu que hi confieu abans de crear un compte",
|
||||||
"no": "Torna",
|
"no": "Torna",
|
||||||
|
"noHost": "El servidor no s'ha configurat, per tant, no es pot crear un compte",
|
||||||
|
"noHostTitle": "El servidor no està configurat!",
|
||||||
"title": "Confieu en aquest servidor?",
|
"title": "Confieu en aquest servidor?",
|
||||||
"yes": "Confie en aquest servidor"
|
"yes": "Confie en aquest servidor"
|
||||||
},
|
},
|
||||||
@ -95,6 +97,7 @@
|
|||||||
"about": "Quant a",
|
"about": "Quant a",
|
||||||
"dmca": "DMCA",
|
"dmca": "DMCA",
|
||||||
"login": "Inicia sessió",
|
"login": "Inicia sessió",
|
||||||
|
"onboarding": "Configura",
|
||||||
"pagetitle": "{{title}} - movie-web",
|
"pagetitle": "{{title}} - movie-web",
|
||||||
"register": "Registra",
|
"register": "Registra",
|
||||||
"settings": "Configuració"
|
"settings": "Configuració"
|
||||||
@ -117,7 +120,12 @@
|
|||||||
"noResults": "No hem pogut trobar res!",
|
"noResults": "No hem pogut trobar res!",
|
||||||
"placeholder": {
|
"placeholder": {
|
||||||
"default": "Què voleu mirar?",
|
"default": "Què voleu mirar?",
|
||||||
"extra": []
|
"extra": [
|
||||||
|
"Què voleu explorar?",
|
||||||
|
"Què hi ha a la vostra llista de seguiment?",
|
||||||
|
"Quina és la vostra pel·lícula preferida?",
|
||||||
|
"Quina és la vostra sèrie preferida?"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"sectionTitle": "Resultats de la cerca"
|
"sectionTitle": "Resultats de la cerca"
|
||||||
},
|
},
|
||||||
@ -130,11 +138,15 @@
|
|||||||
},
|
},
|
||||||
"morning": {
|
"morning": {
|
||||||
"default": "Què us agradaria mirar aquest matí?",
|
"default": "Què us agradaria mirar aquest matí?",
|
||||||
"extra": ["He sentit que «Abans de l'alba» és bona"]
|
"extra": [
|
||||||
|
"He sentit que «Abans de l'alba» és bona"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"night": {
|
"night": {
|
||||||
"default": "Què us agradaria mirar aquesta nit?",
|
"default": "Què us agradaria mirar aquesta nit?",
|
||||||
"extra": ["Esteu cansat? He sentit que «L'exorcista» és bona."]
|
"extra": [
|
||||||
|
"Esteu cansat? He sentit que «L'exorcista» és bona."
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -167,22 +179,37 @@
|
|||||||
"onboarding": {
|
"onboarding": {
|
||||||
"defaultConfirm": {
|
"defaultConfirm": {
|
||||||
"cancel": "Cancel·la",
|
"cancel": "Cancel·la",
|
||||||
|
"confirm": "Usa la configuració per defecte",
|
||||||
|
"description": "La configuració per defecte no té els millors fluxos i pot ser insuportablement lenta.",
|
||||||
"title": "Segur?"
|
"title": "Segur?"
|
||||||
},
|
},
|
||||||
"extension": {
|
"extension": {
|
||||||
"back": "Torna",
|
"back": "Torna",
|
||||||
|
"explainer": "Mitjançant l'extensió del navegador, podeu obtenir els millors fluxos que oferim. Amb només una simple instal·lació.",
|
||||||
|
"explainerIos": "Lamentablement, l'extensió del navegador no és compatible amb iOS, premeu <bold>Torna</bold> per a triar una altra opció.",
|
||||||
|
"extensionHelp": "Si heu instal·lat l'extensió, però no es detecta, <bold>obriu l'extensió al menú d'extensions del navegador</bold> i seguiu els passos en pantalla.",
|
||||||
"linkChrome": "Instal·la l'extensió de Chrome",
|
"linkChrome": "Instal·la l'extensió de Chrome",
|
||||||
"linkFirefox": "Instal·la l'extensió de Firefox",
|
"linkFirefox": "Instal·la l'extensió de Firefox",
|
||||||
|
"notDetecting": "S'ha instal·lat a Chrome, però el lloc no el detecta? Proveu de recarregar la pàgina.",
|
||||||
"notDetectingAction": "Recarrega la pàgina",
|
"notDetectingAction": "Recarrega la pàgina",
|
||||||
"status": {
|
"status": {
|
||||||
"disallowedAction": "Activa l'extensió"
|
"disallowed": "L'extensió no està activada per a aquesta pàgina",
|
||||||
|
"disallowedAction": "Activa l'extensió",
|
||||||
|
"failed": "No s'ha pogut sol·licitar l'estat",
|
||||||
|
"loading": "Esperant que instal·leu l'extensió",
|
||||||
|
"outdated": "La versió de l'extensió és massa antiga",
|
||||||
|
"success": "L'extensió funciona com s'esperava!"
|
||||||
},
|
},
|
||||||
"submit": "Continua"
|
"submit": "Continua",
|
||||||
|
"title": "Comencem amb una extensió"
|
||||||
},
|
},
|
||||||
"proxy": {
|
"proxy": {
|
||||||
"back": "Torna",
|
"back": "Torna",
|
||||||
|
"explainer": "Amb el mètode del servidor intermediari, podeu obtenir fluxos d'alta qualitat fent un servidor intermediari propi.",
|
||||||
"input": {
|
"input": {
|
||||||
|
"errorConnection": "No s'ha pogut connectar al servidor intermediari",
|
||||||
"errorInvalidUrl": "URL no vàlid",
|
"errorInvalidUrl": "URL no vàlid",
|
||||||
|
"errorNotProxy": "S'esperava un servidor intermediari, però és un lloc web",
|
||||||
"label": "URL del servidor intermediari",
|
"label": "URL del servidor intermediari",
|
||||||
"placeholder": "https://"
|
"placeholder": "https://"
|
||||||
},
|
},
|
||||||
@ -191,15 +218,25 @@
|
|||||||
"title": "Fem un nou servidor intermediari"
|
"title": "Fem un nou servidor intermediari"
|
||||||
},
|
},
|
||||||
"start": {
|
"start": {
|
||||||
|
"explainer": "Per a obtenir els millors fluxos possibles, haureu de triar quin mètode de transmissió voleu utilitzar.",
|
||||||
"options": {
|
"options": {
|
||||||
|
"default": {
|
||||||
|
"text": "No vull fluxos de bona qualitat,<0 /> <1>utilitza la configuració per defecte</1>"
|
||||||
|
},
|
||||||
"extension": {
|
"extension": {
|
||||||
"action": "Instal·la l'extensió",
|
"action": "Instal·la l'extensió",
|
||||||
"quality": "Millor qualitat"
|
"description": "Instal·leu l'extensió del navegador i accediu a les millors fonts.",
|
||||||
|
"quality": "Millor qualitat",
|
||||||
|
"title": "Extensió del navegador"
|
||||||
},
|
},
|
||||||
"proxy": {
|
"proxy": {
|
||||||
"action": "Configura el servidor intermediari"
|
"action": "Configura el servidor intermediari",
|
||||||
}
|
"description": "Configureu un servidor intermediari en només 5 minuts i accediu a bones fonts.",
|
||||||
|
"quality": "Bona qualitat",
|
||||||
|
"title": "Servidor intermediari personalitzat"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"title": "Configurem el movie-web"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"overlays": {
|
"overlays": {
|
||||||
@ -215,10 +252,11 @@
|
|||||||
},
|
},
|
||||||
"menus": {
|
"menus": {
|
||||||
"downloads": {
|
"downloads": {
|
||||||
|
"copyHlsPlaylist": "Copia l'enllaç de la llista HLS",
|
||||||
"disclaimer": "Les baixades s'obtenen directament del proveïdor. movie-web no té control sobre com es proporcionen les baixades.",
|
"disclaimer": "Les baixades s'obtenen directament del proveïdor. movie-web no té control sobre com es proporcionen les baixades.",
|
||||||
"downloadSubtitle": "Baixa els subtítols actuals",
|
"downloadSubtitle": "Baixa els subtítols actuals",
|
||||||
"downloadVideo": "Baixa el vídeo",
|
"downloadVideo": "Baixa el vídeo",
|
||||||
"hlsDisclaimer": "Les baixades s'obtenen directament del proveïdor. movie-web no té control sobre com es proporcionen les baixades. Tingueu en compte que esteu baixant una llista de reproducció HLS, destinada als usuaris familiaritzats amb la transmissió multimèdia avançada.",
|
"hlsDisclaimer": "Les baixades s'obtenen directament del proveïdor. movie-web no té control sobre com es proporcionen les baixades. <br /><br />Tingueu en compte que esteu baixant una llista de reproducció HLS, <bold>no es recomana baixar-la si no esteu familiaritzat amb formats de transmissió avançats</bold>. Proveu diferents fonts per a diferents formats.",
|
||||||
"onAndroid": {
|
"onAndroid": {
|
||||||
"1": "Per a baixar-lo a Android, feu clic al botó de baixada i, a la pàgina nova, <bold>manteniu premut</bold> el vídeo i, a continuació, seleccioneu <bold>Desa</bold>.",
|
"1": "Per a baixar-lo a Android, feu clic al botó de baixada i, a la pàgina nova, <bold>manteniu premut</bold> el vídeo i, a continuació, seleccioneu <bold>Desa</bold>.",
|
||||||
"shortTitle": "Baixa / Android",
|
"shortTitle": "Baixa / Android",
|
||||||
@ -301,8 +339,15 @@
|
|||||||
},
|
},
|
||||||
"dmca": {
|
"dmca": {
|
||||||
"badge": "Eliminat",
|
"badge": "Eliminat",
|
||||||
|
"text": "Aquest contingut ja no està disponible a causa d'un avís de retirada o d'una reclamació de drets d'autor.",
|
||||||
"title": "El contingut s'ha eliminat"
|
"title": "El contingut s'ha eliminat"
|
||||||
},
|
},
|
||||||
|
"extensionPermission": {
|
||||||
|
"badge": "Falta el permís",
|
||||||
|
"button": "Utilitza l'extensió",
|
||||||
|
"text": "Teniu l'extensió del navegador, però necessitem el vostre permís per a començar a utilitzar l'extensió.",
|
||||||
|
"title": "Configureu l'extensió"
|
||||||
|
},
|
||||||
"failed": {
|
"failed": {
|
||||||
"badge": "Ha fallat",
|
"badge": "Ha fallat",
|
||||||
"homeButton": "Vés a l'inici",
|
"homeButton": "Vés a l'inici",
|
||||||
@ -436,15 +481,29 @@
|
|||||||
},
|
},
|
||||||
"setup": {
|
"setup": {
|
||||||
"doSetup": "Configura",
|
"doSetup": "Configura",
|
||||||
|
"errorStatus": {
|
||||||
|
"description": "Sembla que heu de revisar un o més elements de la configuració.",
|
||||||
|
"title": "S'ha de revisar algun element"
|
||||||
|
},
|
||||||
|
"itemError": "Hi ha alguna cosa malament en la configuració. Torneu a fer la configuració per a solucionar-ho.",
|
||||||
"items": {
|
"items": {
|
||||||
"default": "Configuració per defecte",
|
"default": "Configuració per defecte",
|
||||||
"extension": "Extensió"
|
"extension": "Extensió",
|
||||||
|
"proxy": "Servidor personalitzat"
|
||||||
},
|
},
|
||||||
"redoSetup": "Reconfigura"
|
"redoSetup": "Reconfigura",
|
||||||
|
"successStatus": {
|
||||||
|
"description": "Tot està preparat perquè comenceu a mirar el vostre contingut preferit.",
|
||||||
|
"title": "Tot està configurat!"
|
||||||
|
},
|
||||||
|
"unsetStatus": {
|
||||||
|
"description": "Feu clic al botó de la dreta per a iniciar el procés de configuració.",
|
||||||
|
"title": "No heu fet la configuració"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"title": "Connexions",
|
"title": "Connexions",
|
||||||
"workers": {
|
"workers": {
|
||||||
"addButton": "Afig un «worker»",
|
"addButton": "Afegeix un «worker»",
|
||||||
"description": "Per fer funcionar l'aplicació, tot el trànsit s'encamina a través de servidors intermediaris. Activeu-ho si voleu portar els vostres propis «workers». <0>Instruccions.</0>",
|
"description": "Per fer funcionar l'aplicació, tot el trànsit s'encamina a través de servidors intermediaris. Activeu-ho si voleu portar els vostres propis «workers». <0>Instruccions.</0>",
|
||||||
"emptyState": "Encara no hi ha «workers», afegiu-ne un a continuació",
|
"emptyState": "Encara no hi ha «workers», afegiu-ne un a continuació",
|
||||||
"label": "Utilitza «workers» intermediaris personalitzats",
|
"label": "Utilitza «workers» intermediaris personalitzats",
|
||||||
@ -456,6 +515,7 @@
|
|||||||
"language": "Llengua de l'aplicació",
|
"language": "Llengua de l'aplicació",
|
||||||
"languageDescription": "La llengua s'aplica a tota l'aplicació.",
|
"languageDescription": "La llengua s'aplica a tota l'aplicació.",
|
||||||
"thumbnail": "Genera miniatures",
|
"thumbnail": "Genera miniatures",
|
||||||
|
"thumbnailDescription": "Majoritàriament, els vídeos no tenen miniatures. Podeu activar aquesta opció per a generar-les sobre la marxa, però poden alentir el vídeo.",
|
||||||
"thumbnailLabel": "Genera miniatures",
|
"thumbnailLabel": "Genera miniatures",
|
||||||
"title": "Configuració"
|
"title": "Configuració"
|
||||||
},
|
},
|
||||||
|
547
src/assets/locales/ca@valencia.json
Normal file
547
src/assets/locales/ca@valencia.json
Normal file
@ -0,0 +1,547 @@
|
|||||||
|
{
|
||||||
|
"about": {
|
||||||
|
"description": "movie-web és una aplicació web que cerca fluxos a internet. L'equip té com a objectiu un enfocament majoritàriament minimalista del consum de contingut.",
|
||||||
|
"faqTitle": "Preguntes freqüents",
|
||||||
|
"q1": {
|
||||||
|
"body": "movie-web no allotja cap contingut. Quan feu clic en un contingut per a mirar-lo, es busca a Internet (a la pantalla de càrrega i a la pestanya «Fonts de vídeo» podeu mirar quina font utilitzeu). movie-web mai puja contingut, tot és a través del mecanisme de cerca.",
|
||||||
|
"title": "D'on prové el contingut?"
|
||||||
|
},
|
||||||
|
"q2": {
|
||||||
|
"body": "No és possible sol·licitar un programa o una pel·lícula, movie-web no gestiona cap contingut. Tot el contingut es visualitza a través de fonts a internet.",
|
||||||
|
"title": "On puc sol·licitar un programa o una pel·lícula?"
|
||||||
|
},
|
||||||
|
"q3": {
|
||||||
|
"body": "Els resultats de cerca funcionen amb The Movie Database (TMDB) i es mostren independentment de si les nostres fonts realment tenen el contingut.",
|
||||||
|
"title": "Els resultats de la cerca mostren el programa o la pel·lícula, per què no puc reproduir-lo?"
|
||||||
|
},
|
||||||
|
"title": "Sobre movie-web"
|
||||||
|
},
|
||||||
|
"actions": {
|
||||||
|
"copied": "S'ha copiat",
|
||||||
|
"copy": "Copia"
|
||||||
|
},
|
||||||
|
"auth": {
|
||||||
|
"createAccount": "Encara no teniu un compte? <0>Creeu un compte.</0>",
|
||||||
|
"deviceNameLabel": "Nom del dispositiu",
|
||||||
|
"deviceNamePlaceholder": "Telèfon personal",
|
||||||
|
"generate": {
|
||||||
|
"description": "La frase de contrasenya actua com a nom d'usuari i contrasenya. Assegureu-vos de mantindre-la segura, ja que haureu d'introduir-la per a iniciar la sessió al vostre compte",
|
||||||
|
"next": "He desat la frase de contrasenya",
|
||||||
|
"passphraseFrameLabel": "Frase de contrasenya",
|
||||||
|
"title": "La vostra frase de contrasenya"
|
||||||
|
},
|
||||||
|
"hasAccount": "Ja teniu un compte? <0>Inicieu sessió ací.</0>",
|
||||||
|
"login": {
|
||||||
|
"description": "Introduïu la vostra frase de contrasenya per a iniciar sessió al vostre compte",
|
||||||
|
"deviceLengthError": "Introduïu un nom per al dispositiu",
|
||||||
|
"passphraseLabel": "Frase de contrasenya de 12 paraules",
|
||||||
|
"passphrasePlaceholder": "Frase de contrasenya",
|
||||||
|
"submit": "Inicia sessió",
|
||||||
|
"title": "Inicieu sessió al vostre compte",
|
||||||
|
"validationError": "Frase de contrasenya incorrecta o incompleta"
|
||||||
|
},
|
||||||
|
"register": {
|
||||||
|
"information": {
|
||||||
|
"color1": "Color de perfil 1",
|
||||||
|
"color2": "Color de perfil 2",
|
||||||
|
"header": "Introduïu un nom per al dispositiu i trieu els colors i la icona d'usuari que vulgueu",
|
||||||
|
"icon": "Icona d'usuari",
|
||||||
|
"next": "Següent",
|
||||||
|
"title": "Informació del compte"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"trust": {
|
||||||
|
"failed": {
|
||||||
|
"text": "L'heu configurada correctament?",
|
||||||
|
"title": "No s'ha pogut accedir al servidor"
|
||||||
|
},
|
||||||
|
"host": "Esteu connectant-vos a <0>{{hostname}}</0>. Confirmeu que hi confieu abans de crear un compte",
|
||||||
|
"no": "Torna",
|
||||||
|
"noHost": "El servidor no s'ha configurat, per tant, no es pot crear un compte",
|
||||||
|
"noHostTitle": "El servidor no està configurat!",
|
||||||
|
"title": "Confieu en este servidor?",
|
||||||
|
"yes": "Confie en este servidor"
|
||||||
|
},
|
||||||
|
"verify": {
|
||||||
|
"description": "Introduïu la vostra frase de contrasenya anterior per a confirmar que l'heu desat, i crear el compte",
|
||||||
|
"invalidData": "La data no és vàlida",
|
||||||
|
"noMatch": "La frase de contrasenya no coincideix",
|
||||||
|
"passphraseLabel": "Frase de contrasenya de 12 paraules",
|
||||||
|
"recaptchaFailed": "Ha fallat la validació de ReCaptcha",
|
||||||
|
"register": "Crea el compte",
|
||||||
|
"title": "Confirmeu la frase de contrasenya"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"errors": {
|
||||||
|
"badge": "S'ha trencat",
|
||||||
|
"details": "Detalls de l'error",
|
||||||
|
"reloadPage": "Recarrega la pàgina",
|
||||||
|
"showError": "Mostra els detalls de l'error",
|
||||||
|
"title": "Hem trobat un error!"
|
||||||
|
},
|
||||||
|
"footer": {
|
||||||
|
"legal": {
|
||||||
|
"disclaimer": "Avís d'exempció de responsabilitat",
|
||||||
|
"disclaimerText": "movie-web no allotja cap fitxer, només enllaça a serveis de tercers. Els problemes legals s'han d'abordar amb qui allotja i els proveïdors de fitxers. movie-web no es fa responsable del contingut mostrat pels proveïdors de vídeo."
|
||||||
|
},
|
||||||
|
"links": {
|
||||||
|
"discord": "Discord",
|
||||||
|
"dmca": "DMCA",
|
||||||
|
"github": "GitHub"
|
||||||
|
},
|
||||||
|
"tagline": "Mireu els vostres programes i pel·lícules preferits amb esta aplicació de codi obert de reproducció en temps real."
|
||||||
|
},
|
||||||
|
"global": {
|
||||||
|
"name": "movie-web",
|
||||||
|
"pages": {
|
||||||
|
"about": "Quant a",
|
||||||
|
"dmca": "DMCA",
|
||||||
|
"login": "Inicia sessió",
|
||||||
|
"onboarding": "Configura",
|
||||||
|
"pagetitle": "{{title}} - movie-web",
|
||||||
|
"register": "Registra",
|
||||||
|
"settings": "Configuració"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"home": {
|
||||||
|
"bookmarks": {
|
||||||
|
"sectionTitle": "Marcadors"
|
||||||
|
},
|
||||||
|
"continueWatching": {
|
||||||
|
"sectionTitle": "Continueu mirant"
|
||||||
|
},
|
||||||
|
"mediaList": {
|
||||||
|
"stopEditing": "Deixa d'editar"
|
||||||
|
},
|
||||||
|
"search": {
|
||||||
|
"allResults": "Això és tot el que tenim!",
|
||||||
|
"failed": "No s'ha pogut trobar cap contingut, torneu-ho a provar!",
|
||||||
|
"loading": "S'està carregant…",
|
||||||
|
"noResults": "No hem pogut trobar res!",
|
||||||
|
"placeholder": {
|
||||||
|
"default": "Què voleu mirar?",
|
||||||
|
"extra": [
|
||||||
|
"Què voleu explorar?",
|
||||||
|
"Què hi ha a la vostra llista de seguiment?",
|
||||||
|
"Quina és la vostra pel·lícula preferida?",
|
||||||
|
"Quina és la vostra sèrie preferida?"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"sectionTitle": "Resultats de la cerca"
|
||||||
|
},
|
||||||
|
"titles": {
|
||||||
|
"day": {
|
||||||
|
"default": "Què vos agradaria mirar esta vesprada?",
|
||||||
|
"extra": [
|
||||||
|
"Voleu aventura? Jurassic Park podria ser l'elecció perfecta."
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"morning": {
|
||||||
|
"default": "Què vos agradaria mirar este matí?",
|
||||||
|
"extra": [
|
||||||
|
"He sentit que «Abans de l'alba» és bona"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"night": {
|
||||||
|
"default": "Què vos agradaria mirar esta nit?",
|
||||||
|
"extra": [
|
||||||
|
"Esteu cansat? He sentit que «L'exorcista» és bona."
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"media": {
|
||||||
|
"episodeDisplay": "T{{season}} E{{episode}}",
|
||||||
|
"types": {
|
||||||
|
"movie": "Pel·lícula",
|
||||||
|
"show": "Sèrie/Programa"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"navigation": {
|
||||||
|
"banner": {
|
||||||
|
"offline": "Comproveu la connexió a internet"
|
||||||
|
},
|
||||||
|
"menu": {
|
||||||
|
"about": "Quant a nosaltres",
|
||||||
|
"donation": "Feu una donació",
|
||||||
|
"logout": "Tanca la sessió",
|
||||||
|
"register": "Sincronitza al núvol",
|
||||||
|
"settings": "Configuració",
|
||||||
|
"support": "Ajuda"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notFound": {
|
||||||
|
"badge": "No s'ha trobat",
|
||||||
|
"goHome": "Torna a l'inici",
|
||||||
|
"message": "Hem mirat per tot arreu: davall de les papereres, a l'armari, darrere del servidor intermediari, però al remat no hem pogut trobar la pàgina que busqueu.",
|
||||||
|
"title": "No s'ha pogut trobar la pàgina"
|
||||||
|
},
|
||||||
|
"onboarding": {
|
||||||
|
"defaultConfirm": {
|
||||||
|
"cancel": "Cancel·la",
|
||||||
|
"confirm": "Usa la configuració per defecte",
|
||||||
|
"description": "La configuració per defecte no té els millors fluxos i pot ser insuportablement lenta.",
|
||||||
|
"title": "Segur?"
|
||||||
|
},
|
||||||
|
"extension": {
|
||||||
|
"back": "Torna",
|
||||||
|
"explainer": "Mitjançant l'extensió del navegador, podeu obtindre els millors fluxos que oferim. Amb només una simple instal·lació.",
|
||||||
|
"explainerIos": "Lamentablement, l'extensió del navegador no és compatible amb iOS, premeu <bold>Torna</bold> per a triar una altra opció.",
|
||||||
|
"extensionHelp": "Si heu instal·lat l'extensió, però no es detecta, <bold>obriu l'extensió al menú d'extensions del navegador</bold> i seguiu els passos en pantalla.",
|
||||||
|
"linkChrome": "Instal·la l'extensió de Chrome",
|
||||||
|
"linkFirefox": "Instal·la l'extensió de Firefox",
|
||||||
|
"notDetecting": "S'ha instal·lat a Chrome, però el lloc no el detecta? Proveu de recarregar la pàgina.",
|
||||||
|
"notDetectingAction": "Recarrega la pàgina",
|
||||||
|
"status": {
|
||||||
|
"disallowed": "L'extensió no està activada per a esta pàgina",
|
||||||
|
"disallowedAction": "Activa l'extensió",
|
||||||
|
"failed": "No s'ha pogut sol·licitar l'estat",
|
||||||
|
"loading": "Esperant que instal·leu l'extensió",
|
||||||
|
"outdated": "La versió de l'extensió és massa antiga",
|
||||||
|
"success": "L'extensió funciona com s'esperava!"
|
||||||
|
},
|
||||||
|
"submit": "Continua",
|
||||||
|
"title": "Comencem amb una extensió"
|
||||||
|
},
|
||||||
|
"proxy": {
|
||||||
|
"back": "Torna",
|
||||||
|
"explainer": "Amb el mètode del servidor intermediari, podeu obtindre fluxos d'alta qualitat fent un servidor intermediari propi.",
|
||||||
|
"input": {
|
||||||
|
"errorConnection": "No s'ha pogut connectar al servidor intermediari",
|
||||||
|
"errorInvalidUrl": "URL no vàlid",
|
||||||
|
"errorNotProxy": "S'esperava un servidor intermediari, però és un lloc web",
|
||||||
|
"label": "URL del servidor intermediari",
|
||||||
|
"placeholder": "https://"
|
||||||
|
},
|
||||||
|
"link": "Com fer un servidor intermediari",
|
||||||
|
"submit": "Envia el servidor intermediari",
|
||||||
|
"title": "Fem un nou servidor intermediari"
|
||||||
|
},
|
||||||
|
"start": {
|
||||||
|
"explainer": "Per a obtindre els millors fluxos possibles, haureu de triar quin mètode de transmissió voleu utilitzar.",
|
||||||
|
"options": {
|
||||||
|
"default": {
|
||||||
|
"text": "No vull fluxos de bona qualitat,<0 /> <1>utilitza la configuració per defecte</1>"
|
||||||
|
},
|
||||||
|
"extension": {
|
||||||
|
"action": "Instal·la l'extensió",
|
||||||
|
"description": "Instal·leu l'extensió del navegador i accediu a les millors fonts.",
|
||||||
|
"quality": "Millor qualitat",
|
||||||
|
"title": "Extensió del navegador"
|
||||||
|
},
|
||||||
|
"proxy": {
|
||||||
|
"action": "Configura el servidor intermediari",
|
||||||
|
"description": "Configureu un servidor intermediari en només 5 minuts i accediu a bones fonts.",
|
||||||
|
"quality": "Bona qualitat",
|
||||||
|
"title": "Servidor intermediari personalitzat"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"title": "Configurem el movie-web"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"overlays": {
|
||||||
|
"close": "Tanca"
|
||||||
|
},
|
||||||
|
"player": {
|
||||||
|
"back": {
|
||||||
|
"default": "Torna a l'inici",
|
||||||
|
"short": "Torna"
|
||||||
|
},
|
||||||
|
"casting": {
|
||||||
|
"enabled": "S'està emetent al dispositiu…"
|
||||||
|
},
|
||||||
|
"menus": {
|
||||||
|
"downloads": {
|
||||||
|
"copyHlsPlaylist": "Copia l'enllaç de la llista HLS",
|
||||||
|
"disclaimer": "Les baixades s'obtenen directament del proveïdor. movie-web no té control sobre com es proporcionen les baixades.",
|
||||||
|
"downloadSubtitle": "Baixa els subtítols actuals",
|
||||||
|
"downloadVideo": "Baixa el vídeo",
|
||||||
|
"hlsDisclaimer": "Les baixades s'obtenen directament del proveïdor. movie-web no té control sobre com es proporcionen les baixades. <br /><br />Tingueu en compte que esteu baixant una llista de reproducció HLS, <bold>no es recomana baixar-la si no esteu familiaritzat amb formats de transmissió avançats</bold>. Proveu diferents fonts per a diferents formats.",
|
||||||
|
"onAndroid": {
|
||||||
|
"1": "Per a baixar-lo a Android, feu clic al botó de baixada i, a la pàgina nova, <bold>manteniu premut</bold> el vídeo i, a continuació, seleccioneu <bold>Desa</bold>.",
|
||||||
|
"shortTitle": "Baixa / Android",
|
||||||
|
"title": "Baixada a Android"
|
||||||
|
},
|
||||||
|
"onIos": {
|
||||||
|
"1": "Per a baixar a iOS, feu clic al botó de baixada i, a la pàgina nova, feu clic a <bold><ios_share /></bold> /> i, a continuació, <bold>Desa als Arxius <ios_files /></bold>.",
|
||||||
|
"shortTitle": "Baixa / iOS",
|
||||||
|
"title": "Baixada a iOS"
|
||||||
|
},
|
||||||
|
"onPc": {
|
||||||
|
"1": "En un PC, feu clic al botó de baixada i, a la pàgina nova, feu clic amb el botó dret al vídeo i seleccioneu <bold>Anomena i desa el vídeo</bold>",
|
||||||
|
"shortTitle": "Baixa / PC",
|
||||||
|
"title": "Baixada a un PC"
|
||||||
|
},
|
||||||
|
"title": "Baixa"
|
||||||
|
},
|
||||||
|
"episodes": {
|
||||||
|
"button": "Episodi",
|
||||||
|
"emptyState": "No hi ha episodis en esta temporada, torneu-ho a comprovar més tard!",
|
||||||
|
"episodeBadge": "E{{episode}}",
|
||||||
|
"loadingError": "Error en carregar la temporada",
|
||||||
|
"loadingList": "S'està carregant…",
|
||||||
|
"loadingTitle": "S'està carregant…",
|
||||||
|
"unairedEpisodes": "Un o més episodis d'esta temporada s'han desactivat perquè encara no s'han emés."
|
||||||
|
},
|
||||||
|
"playback": {
|
||||||
|
"speedLabel": "Velocitat de la reproducció",
|
||||||
|
"title": "Configuració de la reproducció"
|
||||||
|
},
|
||||||
|
"quality": {
|
||||||
|
"automaticLabel": "Qualitat automàtica",
|
||||||
|
"hint": "Podeu provar a <0>canviar la font</0> per a obtindre diferents opcions de qualitat.",
|
||||||
|
"iosNoQuality": "A causa de les limitacions definides per Apple, la selecció de qualitat no està disponible a iOS per a esta font. Podeu provar a <0>canviar a una altra font</0> per a obtindre diferents opcions de qualitat.",
|
||||||
|
"title": "Qualitat"
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"downloadItem": "Baixa",
|
||||||
|
"enableSubtitles": "Activa els subtítols",
|
||||||
|
"experienceSection": "Experiència de visualització",
|
||||||
|
"playbackItem": "Configuració de la reproducció",
|
||||||
|
"qualityItem": "Qualitat",
|
||||||
|
"sourceItem": "Fonts de vídeo",
|
||||||
|
"subtitleItem": "Configuració dels subtítols",
|
||||||
|
"videoSection": "Configuració de vídeo"
|
||||||
|
},
|
||||||
|
"sources": {
|
||||||
|
"failed": {
|
||||||
|
"text": "S'ha produït un error en intentar trobar vídeos, proveu una font diferent.",
|
||||||
|
"title": "No s'ha pogut obtindre"
|
||||||
|
},
|
||||||
|
"noEmbeds": {
|
||||||
|
"text": "No hem pogut trobar cap incrustat, proveu una font diferent.",
|
||||||
|
"title": "No s'ha trobat cap incrustació"
|
||||||
|
},
|
||||||
|
"noStream": {
|
||||||
|
"text": "esta font no té fluxos per a esta pel·lícula o programa.",
|
||||||
|
"title": "Cap flux"
|
||||||
|
},
|
||||||
|
"title": "Fonts",
|
||||||
|
"unknownOption": "Desconeguda"
|
||||||
|
},
|
||||||
|
"subtitles": {
|
||||||
|
"customChoice": "Selecciona un fitxer de subtítols",
|
||||||
|
"customizeLabel": "Personalitza",
|
||||||
|
"offChoice": "Desactivats",
|
||||||
|
"settings": {
|
||||||
|
"backlink": "Subtítols personalitzats",
|
||||||
|
"delay": "Retard dels subtítols",
|
||||||
|
"fixCapitals": "Corregeix les majúscules/minúscules"
|
||||||
|
},
|
||||||
|
"title": "Subtítols",
|
||||||
|
"unknownLanguage": "Desconeguda"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"api": {
|
||||||
|
"text": "No s'han pogut carregar les metadades de l'API, comproveu la connexió a Internet.",
|
||||||
|
"title": "No s'han pogut carregar les metadades de l'API"
|
||||||
|
},
|
||||||
|
"dmca": {
|
||||||
|
"badge": "Eliminat",
|
||||||
|
"text": "este contingut ja no està disponible a causa d'un avís de retirada o d'una reclamació de drets d'autor.",
|
||||||
|
"title": "El contingut s'ha eliminat"
|
||||||
|
},
|
||||||
|
"extensionPermission": {
|
||||||
|
"badge": "Falta el permís",
|
||||||
|
"button": "Utilitza l'extensió",
|
||||||
|
"text": "Teniu l'extensió del navegador, però necessitem el vostre permís per a començar a utilitzar l'extensió.",
|
||||||
|
"title": "Configureu l'extensió"
|
||||||
|
},
|
||||||
|
"failed": {
|
||||||
|
"badge": "Ha fallat",
|
||||||
|
"homeButton": "Vés a l'inici",
|
||||||
|
"text": "No s'han pogut carregar les metadades del contingut des de TMDB. Comproveu si TMDB no funciona o està bloquejat a la vostra connexió a Internet.",
|
||||||
|
"title": "Ha fallat la càrrega de les metadades"
|
||||||
|
},
|
||||||
|
"notFound": {
|
||||||
|
"badge": "No s'ha trobat",
|
||||||
|
"homeButton": "Torna a l'inici",
|
||||||
|
"text": "No hem pogut trobar el contingut sol·licitat. O bé s'ha eliminat o bé heu alterat l'URL.",
|
||||||
|
"title": "No s'ha trobat el contingut."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nextEpisode": {
|
||||||
|
"cancel": "Cancel·la",
|
||||||
|
"next": "Episodi següent"
|
||||||
|
},
|
||||||
|
"playbackError": {
|
||||||
|
"badge": "Error en la reproducció",
|
||||||
|
"errors": {
|
||||||
|
"errorAborted": "S'ha interromput l'obtenció del contingut per petició de l'usuari.",
|
||||||
|
"errorDecode": "Tot i haver-se determinat prèviament que era utilitzable, s'ha produït un error en intentar descodificar el recurs multimèdia.",
|
||||||
|
"errorGenericMedia": "S'ha produït un error desconegut al contingut.",
|
||||||
|
"errorNetwork": "S'ha produït algun tipus d'error de xarxa que ha impedit que el contingut s'obtinga correctament, tot i haver estat disponibles prèviament.",
|
||||||
|
"errorNotSupported": "El contingut o el proveïdor del contingut no és compatible."
|
||||||
|
},
|
||||||
|
"homeButton": "Torna a l'inici",
|
||||||
|
"text": "S'ha produït un error en intentar reproduir el contingut. Torneu-ho a provar.",
|
||||||
|
"title": "No s'ha pogut reproduir el vídeo!"
|
||||||
|
},
|
||||||
|
"scraping": {
|
||||||
|
"items": {
|
||||||
|
"failure": "S'ha produït un error",
|
||||||
|
"notFound": "No té el vídeo",
|
||||||
|
"pending": "S'estan cercant vídeos…"
|
||||||
|
},
|
||||||
|
"notFound": {
|
||||||
|
"badge": "No s'ha trobat",
|
||||||
|
"detailsButton": "Mostra els detalls",
|
||||||
|
"homeButton": "Torna a l'inici",
|
||||||
|
"text": "Hem buscat a través dels nostres proveïdors i no trobem el contingut que busqueu! No allotgem contingut i no tenim control sobre què hi ha disponible. Feu clic a «Mostra els detalls» a continuació per a més informació.",
|
||||||
|
"title": "No s'ha pogut trobar"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"time": {
|
||||||
|
"regular": "{{timeWatched}} / {{duration}}",
|
||||||
|
"remaining": "{{timeLeft}} restants • Acaba a les {{timeFinished, datetime}}",
|
||||||
|
"shortRegular": "{{timeWatched}}",
|
||||||
|
"shortRemaining": "-{{timeLeft}}"
|
||||||
|
},
|
||||||
|
"turnstile": {
|
||||||
|
"description": "Verifiqueu que sou humà completant el Captcha de la dreta. Ho fem per a mantindre segura movie-web!",
|
||||||
|
"error": "No s'ha pogut verificar la humanitat. Torneu-ho a provar.",
|
||||||
|
"title": "Necessitem verificar que sou humà.",
|
||||||
|
"verifyingHumanity": "Verificant la vostra humanitat…"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"screens": {
|
||||||
|
"dmca": {
|
||||||
|
"text": "Vos donem la benvinguda a la pàgina de contacte DMCA de movie-web! Respectem els drets de propietat intel·lectual i volem resoldre qualsevol problema de drets d'autor ràpidament. Si creieu que la vostra obra protegida per drets d'autor s'ha utilitzat incorrectament a la nostra plataforma, envieu un avís detallat de la DMCA al correu electrònic següent. Incloeu una descripció del material protegit per drets d'autor, les vostres dades de contacte i una declaració de creença de bona fe. Ens comprometem a resoldre estes assumptes amb agilitat i agraïm la vostra col·laboració per a mantindre movie-web en un lloc que respecta la creativitat i els drets d'autor.",
|
||||||
|
"title": "DMCA"
|
||||||
|
},
|
||||||
|
"loadingApp": "S'està carregant l'aplicació",
|
||||||
|
"loadingUser": "S'està carregant el perfil",
|
||||||
|
"loadingUserError": {
|
||||||
|
"logout": "Tanca la sessió",
|
||||||
|
"reset": "Restableix el servidor personalitzat",
|
||||||
|
"text": "Ha fallat la càrrega del perfil",
|
||||||
|
"textWithReset": "Error en carregar el vostre perfil des del servidor personalitzat, voleu restablir el servidor per defecte?"
|
||||||
|
},
|
||||||
|
"migration": {
|
||||||
|
"failed": "La migració de les dades ha fallat.",
|
||||||
|
"inProgress": "Espereu, estem migrant les vostres dades. No hauria de tardar massa."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"account": {
|
||||||
|
"accountDetails": {
|
||||||
|
"deviceNameLabel": "Nom del dispositiu",
|
||||||
|
"deviceNamePlaceholder": "Telèfon personal",
|
||||||
|
"editProfile": "Edita",
|
||||||
|
"logoutButton": "Tanca la sessió"
|
||||||
|
},
|
||||||
|
"actions": {
|
||||||
|
"delete": {
|
||||||
|
"button": "Elimina el compte",
|
||||||
|
"confirmButton": "Elimina el compte",
|
||||||
|
"confirmDescription": "Segur que voleu eliminar el compte? Es perdran totes les dades!",
|
||||||
|
"confirmTitle": "Segur?",
|
||||||
|
"text": "Esta acció és irreversible. Totes les dades s'eliminaran i no es podrà recuperar res.",
|
||||||
|
"title": "Elimina el compte"
|
||||||
|
},
|
||||||
|
"title": "Accions"
|
||||||
|
},
|
||||||
|
"devices": {
|
||||||
|
"deviceNameLabel": "Nom del dispositiu",
|
||||||
|
"failed": "La càrrega de sessions ha fallat",
|
||||||
|
"removeDevice": "Elimina",
|
||||||
|
"title": "Dispositiu"
|
||||||
|
},
|
||||||
|
"profile": {
|
||||||
|
"finish": "Finalitza l'edició",
|
||||||
|
"firstColor": "Color de perfil 1",
|
||||||
|
"secondColor": "Color de perfil dos",
|
||||||
|
"title": "Edita la foto de perfil",
|
||||||
|
"userIcon": "Icona d'usuari"
|
||||||
|
},
|
||||||
|
"register": {
|
||||||
|
"cta": "Comença",
|
||||||
|
"text": "Compartiu el progrés de la visualització entre dispositius i manteniu-los sincronitzats.",
|
||||||
|
"title": "Sincronització amb el núvol"
|
||||||
|
},
|
||||||
|
"title": "Compte"
|
||||||
|
},
|
||||||
|
"appearance": {
|
||||||
|
"activeTheme": "Actiu",
|
||||||
|
"themes": {
|
||||||
|
"blue": "Blau",
|
||||||
|
"default": "Per defecte",
|
||||||
|
"gray": "Gris",
|
||||||
|
"red": "Vermell",
|
||||||
|
"teal": "Verd blavós"
|
||||||
|
},
|
||||||
|
"title": "Aparença"
|
||||||
|
},
|
||||||
|
"connections": {
|
||||||
|
"server": {
|
||||||
|
"description": "Si voleu connectar-vos a un rerefons personalitzat per a emmagatzemar les vostres dades, activeu-ho i proporcioneu l'URL. <0>Instruccions.</0>",
|
||||||
|
"label": "Servidor personalitzat",
|
||||||
|
"urlLabel": "URL del servidor personalitzat"
|
||||||
|
},
|
||||||
|
"setup": {
|
||||||
|
"doSetup": "Configura",
|
||||||
|
"errorStatus": {
|
||||||
|
"description": "Sembla que heu de revisar un o més elements de la configuració.",
|
||||||
|
"title": "S'ha de revisar algun element"
|
||||||
|
},
|
||||||
|
"itemError": "Hi ha alguna cosa malament en la configuració. Torneu a fer la configuració per a solucionar-ho.",
|
||||||
|
"items": {
|
||||||
|
"default": "Configuració per defecte",
|
||||||
|
"extension": "Extensió",
|
||||||
|
"proxy": "Servidor personalitzat"
|
||||||
|
},
|
||||||
|
"redoSetup": "Reconfigura",
|
||||||
|
"successStatus": {
|
||||||
|
"description": "Tot està preparat perquè comenceu a mirar el vostre contingut preferit.",
|
||||||
|
"title": "Tot està configurat!"
|
||||||
|
},
|
||||||
|
"unsetStatus": {
|
||||||
|
"description": "Feu clic al botó de la dreta per a iniciar el procés de configuració.",
|
||||||
|
"title": "No heu fet la configuració"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"title": "Connexions",
|
||||||
|
"workers": {
|
||||||
|
"addButton": "Afig un «worker»",
|
||||||
|
"description": "Per fer funcionar l'aplicació, tot el trànsit s'encamina a través de servidors intermediaris. Activeu-ho si voleu portar els vostres propis «workers». <0>Instruccions.</0>",
|
||||||
|
"emptyState": "Encara no hi ha «workers», afegiu-ne un a continuació",
|
||||||
|
"label": "Utilitza «workers» intermediaris personalitzats",
|
||||||
|
"urlLabel": "URL dels «workers»",
|
||||||
|
"urlPlaceholder": "https://"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"preferences": {
|
||||||
|
"language": "Llengua de l'aplicació",
|
||||||
|
"languageDescription": "La llengua s'aplica a tota l'aplicació.",
|
||||||
|
"thumbnail": "Genera miniatures",
|
||||||
|
"thumbnailDescription": "Majoritàriament, els vídeos no tenen miniatures. Podeu activar esta opció per a generar-les sobre la marxa, però poden alentir el vídeo.",
|
||||||
|
"thumbnailLabel": "Genera miniatures",
|
||||||
|
"title": "Configuració"
|
||||||
|
},
|
||||||
|
"reset": "Restableix",
|
||||||
|
"save": "Desa",
|
||||||
|
"sidebar": {
|
||||||
|
"info": {
|
||||||
|
"appVersion": "Versió de l'aplicació",
|
||||||
|
"backendUrl": "URL del rerefons",
|
||||||
|
"backendVersion": "Versió del rerefons",
|
||||||
|
"hostname": "Nom de l'amfitrió",
|
||||||
|
"insecure": "Insegur",
|
||||||
|
"notLoggedIn": "No heu iniciat sessió",
|
||||||
|
"secure": "Segur",
|
||||||
|
"title": "Informació de l'aplicació",
|
||||||
|
"unknownVersion": "Desconeguda",
|
||||||
|
"userId": "ID d'usuari"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"subtitles": {
|
||||||
|
"backgroundLabel": "Opacitat del fons",
|
||||||
|
"colorLabel": "Color",
|
||||||
|
"previewQuote": "No he de tindre por. La por és l'assassina de la ment.",
|
||||||
|
"textSizeLabel": "Grandària del text",
|
||||||
|
"title": "Subtítols"
|
||||||
|
},
|
||||||
|
"unsaved": "Hi ha canvis sense desar"
|
||||||
|
}
|
||||||
|
}
|
@ -533,6 +533,7 @@
|
|||||||
},
|
},
|
||||||
"subtitles": {
|
"subtitles": {
|
||||||
"backgroundLabel": "Background opacity",
|
"backgroundLabel": "Background opacity",
|
||||||
|
"backgroundBlurLabel": "Background blur",
|
||||||
"colorLabel": "Color",
|
"colorLabel": "Color",
|
||||||
"previewQuote": "I must not fear. Fear is the mind-killer.",
|
"previewQuote": "I must not fear. Fear is the mind-killer.",
|
||||||
"textSizeLabel": "Text size",
|
"textSizeLabel": "Text size",
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
},
|
},
|
||||||
"q3": {
|
"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.",
|
"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": "Los resultados de búsqueda muestran la serie o película, ¿Por qué no puedo reproducirla?"
|
||||||
},
|
},
|
||||||
"title": "Acerca de movie-web"
|
"title": "Acerca de movie-web"
|
||||||
},
|
},
|
||||||
@ -57,6 +57,8 @@
|
|||||||
},
|
},
|
||||||
"host": "Te estás conectando a <0>{{hostname}}</0> - por favor, confirma si confías en este antes de crear una cuenta",
|
"host": "Te estás conectando a <0>{{hostname}}</0> - por favor, confirma si confías en este antes de crear una cuenta",
|
||||||
"no": "Regresar",
|
"no": "Regresar",
|
||||||
|
"noHost": "El servidor no se ha configurado, por lo tanto, no puede crear una cuenta",
|
||||||
|
"noHostTitle": "¡El servidor no está configurado!",
|
||||||
"title": "¿Confías en este servidor?",
|
"title": "¿Confías en este servidor?",
|
||||||
"yes": "Confío en este servidor"
|
"yes": "Confío en este servidor"
|
||||||
},
|
},
|
||||||
@ -118,7 +120,12 @@
|
|||||||
"noResults": "¡No pudimos encontrar nada!",
|
"noResults": "¡No pudimos encontrar nada!",
|
||||||
"placeholder": {
|
"placeholder": {
|
||||||
"default": "¿Qué te gustaría ver?",
|
"default": "¿Qué te gustaría ver?",
|
||||||
"extra": []
|
"extra": [
|
||||||
|
"¿Qué quieres explorar?",
|
||||||
|
"¿Qué hay en tu lista de reproducción?",
|
||||||
|
"¿Cuál es tu película favorita?",
|
||||||
|
"¿Cuál es tu serie favorita?"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"sectionTitle": "Resultados de búsqueda"
|
"sectionTitle": "Resultados de búsqueda"
|
||||||
},
|
},
|
||||||
@ -131,11 +138,15 @@
|
|||||||
},
|
},
|
||||||
"morning": {
|
"morning": {
|
||||||
"default": "¿Qué te gustaría ver esta mañana?",
|
"default": "¿Qué te gustaría ver esta mañana?",
|
||||||
"extra": ["Escuché que “Antes del amanecer” es buena"]
|
"extra": [
|
||||||
|
"Escuché que “Antes del amanecer” es buena"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"night": {
|
"night": {
|
||||||
"default": "¿Qué te gustaría ver esta noche?",
|
"default": "¿Qué te gustaría ver esta noche?",
|
||||||
"extra": ["¿Cansado? Escuché que “El Exorcista” es buena."]
|
"extra": [
|
||||||
|
"¿Cansado? Escuché que “El Exorcista” es buena."
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -170,7 +181,7 @@
|
|||||||
"cancel": "Cancelar",
|
"cancel": "Cancelar",
|
||||||
"confirm": "Usar configuración por defecto",
|
"confirm": "Usar configuración por defecto",
|
||||||
"description": "La configuración predeterminada no tiene las mejores transmisiones y puede ser insoportablemente lenta.",
|
"description": "La configuración predeterminada no tiene las mejores transmisiones y puede ser insoportablemente lenta.",
|
||||||
"title": "Estás seguro?"
|
"title": "¿Estás seguro?"
|
||||||
},
|
},
|
||||||
"extension": {
|
"extension": {
|
||||||
"back": "Volver atrás",
|
"back": "Volver atrás",
|
||||||
@ -388,7 +399,7 @@
|
|||||||
"shortRemaining": "-{{timeLeft}}"
|
"shortRemaining": "-{{timeLeft}}"
|
||||||
},
|
},
|
||||||
"turnstile": {
|
"turnstile": {
|
||||||
"description": "Por favor, confirma que eres humano completando el Captcha. Esto es para mantener movie-web seguro!",
|
"description": "Por favor, confirma que eres humano completando el Captcha. ¡Esto es para mantener movie-web seguro!",
|
||||||
"error": "Ha habido un error al verificar tu humanidad. Por favor, prueba de nuevo.",
|
"error": "Ha habido un error al verificar tu humanidad. Por favor, prueba de nuevo.",
|
||||||
"title": "Necesitamos verificar que eres humano.",
|
"title": "Necesitamos verificar que eres humano.",
|
||||||
"verifyingHumanity": "Verificando tu hunanidad…"
|
"verifyingHumanity": "Verificando tu hunanidad…"
|
||||||
@ -483,7 +494,7 @@
|
|||||||
"redoSetup": "Rehacer configuración",
|
"redoSetup": "Rehacer configuración",
|
||||||
"successStatus": {
|
"successStatus": {
|
||||||
"description": "Todo lo necesario está en su sitio para que empieces a ver tu contenido favorito.",
|
"description": "Todo lo necesario está en su sitio para que empieces a ver tu contenido favorito.",
|
||||||
"title": "Todo está configurado!"
|
"title": "¡Todo está configurado!"
|
||||||
},
|
},
|
||||||
"unsetStatus": {
|
"unsetStatus": {
|
||||||
"description": "Haga clic en el botón a la derecha para iniciar el proceso de configuración.",
|
"description": "Haga clic en el botón a la derecha para iniciar el proceso de configuración.",
|
||||||
|
@ -57,6 +57,8 @@
|
|||||||
},
|
},
|
||||||
"host": "Ühendate <0>{{hostname}}</0> - enne konto tegemist kinnitage, et usaldate seda",
|
"host": "Ühendate <0>{{hostname}}</0> - enne konto tegemist kinnitage, et usaldate seda",
|
||||||
"no": "Tagasi",
|
"no": "Tagasi",
|
||||||
|
"noHost": "Server ei ole konfigureeritud, seega ei saa kontot luua",
|
||||||
|
"noHostTitle": "Server ei ole konfigureeritud!",
|
||||||
"title": "Kas usaldate seda serverit?",
|
"title": "Kas usaldate seda serverit?",
|
||||||
"yes": "Usaldan seda serverit"
|
"yes": "Usaldan seda serverit"
|
||||||
},
|
},
|
||||||
@ -118,7 +120,12 @@
|
|||||||
"noResults": "Me ei leidnud midagi!",
|
"noResults": "Me ei leidnud midagi!",
|
||||||
"placeholder": {
|
"placeholder": {
|
||||||
"default": "Mida tahate vaadata?",
|
"default": "Mida tahate vaadata?",
|
||||||
"extra": []
|
"extra": [
|
||||||
|
"Mida soovite uurida?",
|
||||||
|
"Mis on teie nimekirjas?",
|
||||||
|
"Milline on teie lemmikfilm?",
|
||||||
|
"Milline on teie lemmiksari?"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"sectionTitle": "Otsingutulemused"
|
"sectionTitle": "Otsingutulemused"
|
||||||
},
|
},
|
||||||
@ -131,11 +138,15 @@
|
|||||||
},
|
},
|
||||||
"morning": {
|
"morning": {
|
||||||
"default": "Mida te soovite täna hommikul vaadata?",
|
"default": "Mida te soovite täna hommikul vaadata?",
|
||||||
"extra": ["Ma kuulsin, et Before Sunrise on hea"]
|
"extra": [
|
||||||
|
"Ma kuulsin, et Before Sunrise on hea"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"night": {
|
"night": {
|
||||||
"default": "Mida te soovite täna õhtul vaadata?",
|
"default": "Mida te soovite täna õhtul vaadata?",
|
||||||
"extra": ["Väsinud? Olen kuulnud, et The Exorcist on hea."]
|
"extra": [
|
||||||
|
"Väsinud? Olen kuulnud, et The Exorcist on hea."
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -241,6 +252,7 @@
|
|||||||
},
|
},
|
||||||
"menus": {
|
"menus": {
|
||||||
"downloads": {
|
"downloads": {
|
||||||
|
"copyHlsPlaylist": "Kopeeri HLS esitusloendi link",
|
||||||
"disclaimer": "Allalaadimine toimub otse teenusepakkujalt. movie-web ei saa kontrollida, kuidas allalaadimine toimub.",
|
"disclaimer": "Allalaadimine toimub otse teenusepakkujalt. movie-web ei saa kontrollida, kuidas allalaadimine toimub.",
|
||||||
"downloadSubtitle": "Laadige alla praegune subtiiter",
|
"downloadSubtitle": "Laadige alla praegune subtiiter",
|
||||||
"downloadVideo": "Lae alla video",
|
"downloadVideo": "Lae alla video",
|
||||||
@ -524,6 +536,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"subtitles": {
|
"subtitles": {
|
||||||
|
"backgroundBlurLabel": "Tausta hägusus",
|
||||||
"backgroundLabel": "Tausta läbipaistmatus",
|
"backgroundLabel": "Tausta läbipaistmatus",
|
||||||
"colorLabel": "Värv",
|
"colorLabel": "Värv",
|
||||||
"previewQuote": "Ma ei tohi karta. Hirm on meelemõrvar.",
|
"previewQuote": "Ma ei tohi karta. Hirm on meelemõrvar.",
|
||||||
|
@ -57,6 +57,8 @@
|
|||||||
},
|
},
|
||||||
"host": "شما در حال اتصال به <0>{{hostname}}</0> هستید - لطفا قبل از ایجاد حساب کاربری خود از اعتماد به آن اطمینان حاصل کنید",
|
"host": "شما در حال اتصال به <0>{{hostname}}</0> هستید - لطفا قبل از ایجاد حساب کاربری خود از اعتماد به آن اطمینان حاصل کنید",
|
||||||
"no": "بازگشت",
|
"no": "بازگشت",
|
||||||
|
"noHost": "سرور پیکربندی نشده، بنابرین نمیتوانید حسابی ایجاد کنید",
|
||||||
|
"noHostTitle": "سرور پیکر بندی نشده!",
|
||||||
"title": "آیا به این سرور اعتماد دارید؟",
|
"title": "آیا به این سرور اعتماد دارید؟",
|
||||||
"yes": "بله اعتماد دارم"
|
"yes": "بله اعتماد دارم"
|
||||||
},
|
},
|
||||||
@ -71,7 +73,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"errors": {
|
"errors": {
|
||||||
"badge": "مشکلی پیش آمده",
|
"badge": "مشکلی رخ داده",
|
||||||
"details": "جزئیات خطا",
|
"details": "جزئیات خطا",
|
||||||
"reloadPage": "صفحه را دوباره بارگذاری کنید",
|
"reloadPage": "صفحه را دوباره بارگذاری کنید",
|
||||||
"showError": "نمایش جزئیات خطا",
|
"showError": "نمایش جزئیات خطا",
|
||||||
@ -115,7 +117,7 @@
|
|||||||
"allResults": "همه چیزی بود که داشتیم!",
|
"allResults": "همه چیزی بود که داشتیم!",
|
||||||
"failed": "چیزی پیدا نشد، دوباره تلاش کنید!",
|
"failed": "چیزی پیدا نشد، دوباره تلاش کنید!",
|
||||||
"loading": "در حال بارگذاری...",
|
"loading": "در حال بارگذاری...",
|
||||||
"noResults": "چیزی پیدا نکردیم!",
|
"noResults": "نتونستیم چیزی پیدا کنیم!",
|
||||||
"placeholder": {
|
"placeholder": {
|
||||||
"default": "چه میخواهید تماشا کنید؟",
|
"default": "چه میخواهید تماشا کنید؟",
|
||||||
"extra": [
|
"extra": [
|
||||||
|
@ -117,8 +117,7 @@
|
|||||||
"loading": "Chargement...",
|
"loading": "Chargement...",
|
||||||
"noResults": "Nous n'avons rien trouvé !",
|
"noResults": "Nous n'avons rien trouvé !",
|
||||||
"placeholder": {
|
"placeholder": {
|
||||||
"default": "Que voulez-vous voir ?",
|
"default": "Que voulez-vous voir ?"
|
||||||
"extra": []
|
|
||||||
},
|
},
|
||||||
"sectionTitle": "Résultats de la recherche"
|
"sectionTitle": "Résultats de la recherche"
|
||||||
},
|
},
|
||||||
@ -131,7 +130,9 @@
|
|||||||
},
|
},
|
||||||
"morning": {
|
"morning": {
|
||||||
"default": "Que voulez-vous regarder ce matin ?",
|
"default": "Que voulez-vous regarder ce matin ?",
|
||||||
"extra": ["Les films, c'est comme les voyages : ça nous ouvre l'esprit"]
|
"extra": [
|
||||||
|
"Les films, c'est comme les voyages : ça nous ouvre l'esprit"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"night": {
|
"night": {
|
||||||
"default": "Que voulez-vous regarder ce soir ?",
|
"default": "Que voulez-vous regarder ce soir ?",
|
||||||
@ -163,7 +164,7 @@
|
|||||||
},
|
},
|
||||||
"notFound": {
|
"notFound": {
|
||||||
"badge": "Introuvable",
|
"badge": "Introuvable",
|
||||||
"goHome": "Retourer à l'accueil",
|
"goHome": "Retourner à l'accueil",
|
||||||
"message": "Nous avons cherché partout : sous les poubelles, dans le placard, derrière le proxy, mais nous n'avons finalement pas trouvé la page que vous cherchez.",
|
"message": "Nous avons cherché partout : sous les poubelles, dans le placard, derrière le proxy, mais nous n'avons finalement pas trouvé la page que vous cherchez.",
|
||||||
"title": "Impossible de trouver cette page"
|
"title": "Impossible de trouver cette page"
|
||||||
},
|
},
|
||||||
|
@ -57,6 +57,8 @@
|
|||||||
},
|
},
|
||||||
"host": "आप <0>{{hostname}}</0> से कनेक्ट हो रहे हैं - खाता बनाने से पहले कृपया पुष्टि करें कि आप इस पर भरोसा करते हैं",
|
"host": "आप <0>{{hostname}}</0> से कनेक्ट हो रहे हैं - खाता बनाने से पहले कृपया पुष्टि करें कि आप इस पर भरोसा करते हैं",
|
||||||
"no": "पीछे जाये",
|
"no": "पीछे जाये",
|
||||||
|
"noHost": "सर्वर कॉन्फ़िगर नहीं किया गया है, इसलिए आप खाता नहीं बना सकते",
|
||||||
|
"noHostTitle": "सर्वर कॉन्फ़िगर नहीं है!",
|
||||||
"title": "क्या आपको इस सर्वर पर भरोसा है?",
|
"title": "क्या आपको इस सर्वर पर भरोसा है?",
|
||||||
"yes": "मुझे इस सर्वर पर भरोसा है"
|
"yes": "मुझे इस सर्वर पर भरोसा है"
|
||||||
},
|
},
|
||||||
@ -118,7 +120,12 @@
|
|||||||
"noResults": "हमें कुछ नहीं मिला!",
|
"noResults": "हमें कुछ नहीं मिला!",
|
||||||
"placeholder": {
|
"placeholder": {
|
||||||
"default": "क्या देखना चाहते हो?",
|
"default": "क्या देखना चाहते हो?",
|
||||||
"extra": []
|
"extra": [
|
||||||
|
"आप क्या अन्वेषण करना चाहते हैं?",
|
||||||
|
"आपकी वॉचलिस्ट में क्या है?",
|
||||||
|
"आपकी पसंदीदा फिल्म कौनसी है?",
|
||||||
|
"आपकी पसंदीदा सीरीज़ कौन सी है?"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"sectionTitle": "खोज के परिणाम"
|
"sectionTitle": "खोज के परिणाम"
|
||||||
},
|
},
|
||||||
@ -131,11 +138,15 @@
|
|||||||
},
|
},
|
||||||
"morning": {
|
"morning": {
|
||||||
"default": "आप आज सुबह को क्या देखना चाहेंगे?",
|
"default": "आप आज सुबह को क्या देखना चाहेंगे?",
|
||||||
"extra": ["मैंने सुना है सूर्योदय से पहले ठीक है"]
|
"extra": [
|
||||||
|
"मैंने सुना है सूर्योदय से पहले ठीक है"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"night": {
|
"night": {
|
||||||
"default": "आप आज रात को क्या देखना चाहेंगे?",
|
"default": "आप आज रात को क्या देखना चाहेंगे?",
|
||||||
"extra": ["थके हुए हो? मैंने सुना एक्सोरसिस्ट अच्छी मूवी है।"]
|
"extra": [
|
||||||
|
"थके हुए हो? मैंने सुना एक्सोरसिस्ट अच्छी मूवी है।"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -241,6 +252,7 @@
|
|||||||
},
|
},
|
||||||
"menus": {
|
"menus": {
|
||||||
"downloads": {
|
"downloads": {
|
||||||
|
"copyHlsPlaylist": "HLS प्लेलिस्ट लिंक कॉपी करें",
|
||||||
"disclaimer": "डाउनलोड सीधे प्रदाता से लिए जाते हैं। मूवी-वेब का इस पर नियंत्रण नहीं है कि डाउनलोड कैसे प्रदान किए जाते हैं।",
|
"disclaimer": "डाउनलोड सीधे प्रदाता से लिए जाते हैं। मूवी-वेब का इस पर नियंत्रण नहीं है कि डाउनलोड कैसे प्रदान किए जाते हैं।",
|
||||||
"downloadSubtitle": "वर्तमान उपशीर्षक डाउनलोड करें",
|
"downloadSubtitle": "वर्तमान उपशीर्षक डाउनलोड करें",
|
||||||
"downloadVideo": "वीडियो डाउनलोड करें",
|
"downloadVideo": "वीडियो डाउनलोड करें",
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
{
|
{
|
||||||
"about": {
|
"about": {
|
||||||
"description": "movie-web er vefforrit sem leitar á netinu að straumum. Markmið liðsins er naumhyggju nálgun á að horfa á efni.",
|
"description": "movie-web er vefforrit sem leitar á netinu að streymum. Markmið liðsins er naumhyggju nálgun á að horfa á efni.",
|
||||||
"faqTitle": "Algengar spurningar",
|
"faqTitle": "Algengar spurningar",
|
||||||
"q1": {
|
"q1": {
|
||||||
"body": "movie-web hýsir ekki neitt efni. Þegar þú ýtir á eitthvað til að horfa á, leitað er á netinu fyrir það efni (Þú getur séð hvaða heimild við erum að nota á hleðslu skjánum og í 'myndbands heimildir' flipanum). Skrár eru aldrei settar in af movie-web, allt er í gegnum leitarvél.",
|
"body": "movie-web hýsir ekki neitt efni. Þegar þú ýtir á eitthvað til að horfa á, er leitað á netinu fyrir það efni (Þú getur séð hvaða heimild við erum að nota á hleðslu skjánum og í 'myndbands heimildir' flipanum). Skrár eru aldrei settar inn af movie-web, allt er í gegnum leitarvél.",
|
||||||
"title": "Hvaðan kemur efnið?"
|
"title": "Hvaðan kemur efnið?"
|
||||||
},
|
},
|
||||||
"q2": {
|
"q2": {
|
||||||
@ -11,7 +11,7 @@
|
|||||||
"title": "Hvar get ég beðið um þætti eða myndir?"
|
"title": "Hvar get ég beðið um þætti eða myndir?"
|
||||||
},
|
},
|
||||||
"q3": {
|
"q3": {
|
||||||
"body": "Okkar leitar niðurstöður eru knúnar af The Movie Database (TMDB) og eru sýndar þótt að okkar heimildir hafa ekki efnið.",
|
"body": "Leitarniðurstöður okkar eru knúnar af The Movie Database (TMDB) og eru sýndar þótt að heimildir okkar hafa ekki efnið.",
|
||||||
"title": "Leitarniðurstöðurnar sýna þættina eða myndina, af hverju get ég ekki spilað það?"
|
"title": "Leitarniðurstöðurnar sýna þættina eða myndina, af hverju get ég ekki spilað það?"
|
||||||
},
|
},
|
||||||
"title": "Um movie-web"
|
"title": "Um movie-web"
|
||||||
@ -57,6 +57,8 @@
|
|||||||
},
|
},
|
||||||
"host": "Þú ert að tengjast við <0>{{hostname}}</0> - vinsamlegast staðfestu að þú treystir því áður en þú býrð til reikning",
|
"host": "Þú ert að tengjast við <0>{{hostname}}</0> - vinsamlegast staðfestu að þú treystir því áður en þú býrð til reikning",
|
||||||
"no": "Fara til baka",
|
"no": "Fara til baka",
|
||||||
|
"noHost": "Netjónninn hefur ekki verið stilltur, þess vegna getur þú ekki búið til reikning",
|
||||||
|
"noHostTitle": "Netþjónn ekki stilltur!",
|
||||||
"title": "Treystir þú þessum netþjóni?",
|
"title": "Treystir þú þessum netþjóni?",
|
||||||
"yes": "Ég treysti þessum netþjóni"
|
"yes": "Ég treysti þessum netþjóni"
|
||||||
},
|
},
|
||||||
@ -82,13 +84,21 @@
|
|||||||
"disclaimer": "Fyrirvari",
|
"disclaimer": "Fyrirvari",
|
||||||
"disclaimerText": "movie-web hýsir engar skrár, það tengist eingöngu þjónustu þriðja aðila. Lagleg atriði ættu að vera rædd við skráarhýsinga og veitanda. movie-web er ekki ábyrg fyrir neinum skrám sýndar af myndbands veitöndum."
|
"disclaimerText": "movie-web hýsir engar skrár, það tengist eingöngu þjónustu þriðja aðila. Lagleg atriði ættu að vera rædd við skráarhýsinga og veitanda. movie-web er ekki ábyrg fyrir neinum skrám sýndar af myndbands veitöndum."
|
||||||
},
|
},
|
||||||
|
"links": {
|
||||||
|
"discord": "Discord",
|
||||||
|
"dmca": "DMCA",
|
||||||
|
"github": "GitHub"
|
||||||
|
},
|
||||||
"tagline": "Horfðu á uppáhalds þætti og myndirnar þínar með þessu opna hugbúnaða forriti."
|
"tagline": "Horfðu á uppáhalds þætti og myndirnar þínar með þessu opna hugbúnaða forriti."
|
||||||
},
|
},
|
||||||
"global": {
|
"global": {
|
||||||
|
"name": "movie-web",
|
||||||
"pages": {
|
"pages": {
|
||||||
"about": "Um",
|
"about": "Um",
|
||||||
|
"dmca": "DMCA",
|
||||||
"login": "Skrá inn",
|
"login": "Skrá inn",
|
||||||
"onboarding": "Setja upp",
|
"onboarding": "Setja upp",
|
||||||
|
"pagetitle": "{{title}} - movie-web",
|
||||||
"register": "Skrá",
|
"register": "Skrá",
|
||||||
"settings": "Stillingar"
|
"settings": "Stillingar"
|
||||||
}
|
}
|
||||||
@ -110,7 +120,12 @@
|
|||||||
"noResults": "Við gátum ekki fundið neitt!",
|
"noResults": "Við gátum ekki fundið neitt!",
|
||||||
"placeholder": {
|
"placeholder": {
|
||||||
"default": "Hvað viltu horfa á?",
|
"default": "Hvað viltu horfa á?",
|
||||||
"extra": []
|
"extra": [
|
||||||
|
"Hvað viltu kanna?",
|
||||||
|
"Hvað er á áhorfslistanum þínum?",
|
||||||
|
"Hvað er uppáhalds bíómyndin þín?",
|
||||||
|
"Hvað er uppáhalds þáttaröðin þín?"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"sectionTitle": "Leitar niðurstöður"
|
"sectionTitle": "Leitar niðurstöður"
|
||||||
},
|
},
|
||||||
@ -123,11 +138,15 @@
|
|||||||
},
|
},
|
||||||
"morning": {
|
"morning": {
|
||||||
"default": "Hvað myndirðu vilja horfa á þessum morgni?",
|
"default": "Hvað myndirðu vilja horfa á þessum morgni?",
|
||||||
"extra": ["Ég heyrði að Before Sunrise sé góð"]
|
"extra": [
|
||||||
|
"Ég heyrði að Before Sunrise sé góð"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"night": {
|
"night": {
|
||||||
"default": "Hvað myndirðu vilja horfa á í nótt?",
|
"default": "Hvað myndirðu vilja horfa á í nótt?",
|
||||||
"extra": ["Þreytt? Ég heyrði að The Exorcist sé góð."]
|
"extra": [
|
||||||
|
"Þreytt? Ég heyrði að The Exorcist sé góð."
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -191,7 +210,8 @@
|
|||||||
"errorConnection": "Gat ekki tengst umboð",
|
"errorConnection": "Gat ekki tengst umboð",
|
||||||
"errorInvalidUrl": "Ekki gildur hlekkur",
|
"errorInvalidUrl": "Ekki gildur hlekkur",
|
||||||
"errorNotProxy": "Bjóst við umboði en fékk heimasíðu",
|
"errorNotProxy": "Bjóst við umboði en fékk heimasíðu",
|
||||||
"label": "Umboðs hlekkur"
|
"label": "Umboðs hlekkur",
|
||||||
|
"placeholder": "https://"
|
||||||
},
|
},
|
||||||
"link": "Lærðu hvernig þú býrð til umboð",
|
"link": "Lærðu hvernig þú býrð til umboð",
|
||||||
"submit": "Staðfesta umboð",
|
"submit": "Staðfesta umboð",
|
||||||
@ -232,6 +252,7 @@
|
|||||||
},
|
},
|
||||||
"menus": {
|
"menus": {
|
||||||
"downloads": {
|
"downloads": {
|
||||||
|
"copyHlsPlaylist": "Afrita HLS spilalista hlekk",
|
||||||
"disclaimer": "Niðurhalningar eru teknar beint frá heimildini. movie-web hefur engan kraft yfir hvernig niðurhalningarnar eru gefnar.",
|
"disclaimer": "Niðurhalningar eru teknar beint frá heimildini. movie-web hefur engan kraft yfir hvernig niðurhalningarnar eru gefnar.",
|
||||||
"downloadSubtitle": "Hlaða niður nú verandi texta",
|
"downloadSubtitle": "Hlaða niður nú verandi texta",
|
||||||
"downloadVideo": "Hlaða niður myndbandi",
|
"downloadVideo": "Hlaða niður myndbandi",
|
||||||
@ -372,7 +393,10 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"time": {
|
"time": {
|
||||||
"remaining": "{{timeLeft}} er eftir • Þú klárar {{timeFinished, datetime}}"
|
"regular": "{{timeWatched}} / {{duration}}",
|
||||||
|
"remaining": "{{timeLeft}} er eftir • Þú klárar {{timeFinished, datetime}}",
|
||||||
|
"shortRegular": "{{timeWatched}}",
|
||||||
|
"shortRemaining": "-{{timeLeft}}"
|
||||||
},
|
},
|
||||||
"turnstile": {
|
"turnstile": {
|
||||||
"description": "Vinsamlegast sannreyndu að þú sért manneskja með því að klára Captcha-ið til hægri. Þetta er til þess að halda movie-web öruggu!",
|
"description": "Vinsamlegast sannreyndu að þú sért manneskja með því að klára Captcha-ið til hægri. Þetta er til þess að halda movie-web öruggu!",
|
||||||
@ -383,7 +407,8 @@
|
|||||||
},
|
},
|
||||||
"screens": {
|
"screens": {
|
||||||
"dmca": {
|
"dmca": {
|
||||||
"text": "Velkomin á sambands síðu movie-web! Við virðum hugverkarétt og viljum ræða einhver höfundarréttar áhyggjur fljótt. Ef að þú trúir að höfundarréttur þíns verks hefur verið misnotaður á okkar síðu, vinsamlegast sentu ítarlega DMCA tilkynningu til netfangsing fyrir neðan þennan texta. Vinsamlegast láttu fylgja með lýsingu af höfundaréttavarna efninu, tengiliða upplýsingat þínar, og yfirlýsingu um góða trú. Við erum staðráðin í að leysa þessi mál tafarlaust og þökkum samstarf þitt við að halda movie-web stað sem virðir sköpunargáfu og höfundarrétt."
|
"text": "Velkomin á sambands síðu movie-web! Við virðum hugverkarétt og viljum ræða einhver höfundarréttar áhyggjur fljótt. Ef að þú trúir að höfundarréttur þíns verks hefur verið misnotaður á okkar síðu, vinsamlegast sentu ítarlega DMCA tilkynningu til netfangsing fyrir neðan þennan texta. Vinsamlegast láttu fylgja með lýsingu af höfundaréttavarna efninu, tengiliða upplýsingat þínar, og yfirlýsingu um góða trú. Við erum staðráðin í að leysa þessi mál tafarlaust og þökkum samstarf þitt við að halda movie-web stað sem virðir sköpunargáfu og höfundarrétt.",
|
||||||
|
"title": "DMCA"
|
||||||
},
|
},
|
||||||
"loadingApp": "Hlaðandi forriti",
|
"loadingApp": "Hlaðandi forriti",
|
||||||
"loadingUser": "Hlaðandi þínum reikningi",
|
"loadingUser": "Hlaðandi þínum reikningi",
|
||||||
@ -482,7 +507,8 @@
|
|||||||
"description": "Til að láta forritið virka, allri umboð er beint í gegnum umboð. Virktu þetta ef þú villt koma með þína eigin starfsmenn. <0>Leiðbeiningar.</0>",
|
"description": "Til að láta forritið virka, allri umboð er beint í gegnum umboð. Virktu þetta ef þú villt koma með þína eigin starfsmenn. <0>Leiðbeiningar.</0>",
|
||||||
"emptyState": "Engir starfsmenn komnir, bættu við einum fyir neðan þennan texta",
|
"emptyState": "Engir starfsmenn komnir, bættu við einum fyir neðan þennan texta",
|
||||||
"label": "Notaðu sérsniðaða umboðs starfsmenn",
|
"label": "Notaðu sérsniðaða umboðs starfsmenn",
|
||||||
"urlLabel": "Starfsmanna hlekkir"
|
"urlLabel": "Starfsmanna hlekkir",
|
||||||
|
"urlPlaceholder": "https://"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"preferences": {
|
"preferences": {
|
||||||
|
@ -30,7 +30,7 @@
|
|||||||
"passphraseFrameLabel": "Frase password",
|
"passphraseFrameLabel": "Frase password",
|
||||||
"title": "La tua frase password"
|
"title": "La tua frase password"
|
||||||
},
|
},
|
||||||
"hasAccount": "Hai già un account? <0>Accedi </0>",
|
"hasAccount": "Hai già un account? <0>Accedi.</0>",
|
||||||
"login": {
|
"login": {
|
||||||
"description": "Inserisci la tua frase password per accedere al vostro account",
|
"description": "Inserisci la tua frase password per accedere al vostro account",
|
||||||
"deviceLengthError": "Inserisci un nome per il dispositivo",
|
"deviceLengthError": "Inserisci un nome per il dispositivo",
|
||||||
@ -57,6 +57,8 @@
|
|||||||
},
|
},
|
||||||
"host": "Ti stai collegando a <0>{{hostname}}</0> - conferma la tua fiducia prima di creare un account",
|
"host": "Ti stai collegando a <0>{{hostname}}</0> - conferma la tua fiducia prima di creare un account",
|
||||||
"no": "Indietro",
|
"no": "Indietro",
|
||||||
|
"noHost": "Il server non è configurato, quindi non si può creare un account",
|
||||||
|
"noHostTitle": "Server non è configurato!",
|
||||||
"title": "Ti fidi di questo server?",
|
"title": "Ti fidi di questo server?",
|
||||||
"yes": "Mi fido di questo server"
|
"yes": "Mi fido di questo server"
|
||||||
},
|
},
|
||||||
|
@ -57,6 +57,8 @@
|
|||||||
},
|
},
|
||||||
"host": "<0>{{hostname}}</0>에 연결 중입니다 - 계정을 만들기 전에 신뢰하는지 확인해 주세요",
|
"host": "<0>{{hostname}}</0>에 연결 중입니다 - 계정을 만들기 전에 신뢰하는지 확인해 주세요",
|
||||||
"no": "뒤로 가기",
|
"no": "뒤로 가기",
|
||||||
|
"noHost": "서버가 구성되어 있지 않기 때문에 계정을 만들 수 없습니다",
|
||||||
|
"noHostTitle": "서버가 구성되지 않았습니다!",
|
||||||
"title": "이 서버를 신뢰하십니까?",
|
"title": "이 서버를 신뢰하십니까?",
|
||||||
"yes": "네, 신뢰합니다"
|
"yes": "네, 신뢰합니다"
|
||||||
},
|
},
|
||||||
@ -118,7 +120,12 @@
|
|||||||
"noResults": "검색결과가 없습니다!",
|
"noResults": "검색결과가 없습니다!",
|
||||||
"placeholder": {
|
"placeholder": {
|
||||||
"default": "무엇을 보고 싶으신가요?",
|
"default": "무엇을 보고 싶으신가요?",
|
||||||
"extra": []
|
"extra": [
|
||||||
|
"무엇을 탐험하고 싶으신가요?",
|
||||||
|
null,
|
||||||
|
"당신이 가장 좋아하는 영화는?",
|
||||||
|
"당신이 가장 좋아하는 시리즈는?"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"sectionTitle": "검색 결과"
|
"sectionTitle": "검색 결과"
|
||||||
},
|
},
|
||||||
@ -131,11 +138,15 @@
|
|||||||
},
|
},
|
||||||
"morning": {
|
"morning": {
|
||||||
"default": "오늘 아침에 무엇을 보고 싶으신가요?",
|
"default": "오늘 아침에 무엇을 보고 싶으신가요?",
|
||||||
"extra": ["Before Sunrise가 좋다고 들었어요"]
|
"extra": [
|
||||||
|
"Before Sunrise가 좋다고 들었어요"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"night": {
|
"night": {
|
||||||
"default": "오늘 밤에 무엇을 보고 싶으신가요?",
|
"default": "오늘 밤에 무엇을 보고 싶으신가요?",
|
||||||
"extra": ["피곤하신가요? The Exorcist가 좋다고 들었어요."]
|
"extra": [
|
||||||
|
"피곤하신가요? The Exorcist가 좋다고 들었어요."
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -241,6 +252,7 @@
|
|||||||
},
|
},
|
||||||
"menus": {
|
"menus": {
|
||||||
"downloads": {
|
"downloads": {
|
||||||
|
"copyHlsPlaylist": "HLS 플레이리스트 링크 복사하기",
|
||||||
"disclaimer": "다운로드는 제공업체에서 직접 가져옵니다. movie-web은 다운로드 제공 방식을 통제할 수 없습니다.",
|
"disclaimer": "다운로드는 제공업체에서 직접 가져옵니다. movie-web은 다운로드 제공 방식을 통제할 수 없습니다.",
|
||||||
"downloadSubtitle": "현재 자막 다운로드",
|
"downloadSubtitle": "현재 자막 다운로드",
|
||||||
"downloadVideo": "영상 다운로드",
|
"downloadVideo": "영상 다운로드",
|
||||||
|
@ -57,6 +57,8 @@
|
|||||||
},
|
},
|
||||||
"host": "तपाइँ <0>{{hostname}}</0> मा कनेक्ट हुनुहुन्छ - कृपया खाता बनाउनु अघि तपाइँ यसलाई विश्वास गर्नुहुन्छ भनेर पुष्टि गर्नुहोस्",
|
"host": "तपाइँ <0>{{hostname}}</0> मा कनेक्ट हुनुहुन्छ - कृपया खाता बनाउनु अघि तपाइँ यसलाई विश्वास गर्नुहुन्छ भनेर पुष्टि गर्नुहोस्",
|
||||||
"no": "पछाडी जाउ",
|
"no": "पछाडी जाउ",
|
||||||
|
"noHost": "सर्भर कन्फिगर गरिएको छैन, त्यसैले तपाईंले खाता सिर्जना गर्न सक्नुहुन्न",
|
||||||
|
"noHostTitle": "सर्भर कन्फिगर गरिएको छैन!",
|
||||||
"title": "के तपाइँ यो सर्भरमा भरोसा गर्नुहुन्छ?",
|
"title": "के तपाइँ यो सर्भरमा भरोसा गर्नुहुन्छ?",
|
||||||
"yes": "म यो सर्भरलाई भरोसा गर्छु"
|
"yes": "म यो सर्भरलाई भरोसा गर्छु"
|
||||||
},
|
},
|
||||||
|
@ -57,6 +57,8 @@
|
|||||||
},
|
},
|
||||||
"host": "Je gaat zo verbinden met <0>{{hostname}}</0>, check even of je deze link vertrouwt",
|
"host": "Je gaat zo verbinden met <0>{{hostname}}</0>, check even of je deze link vertrouwt",
|
||||||
"no": "Vorige pagina",
|
"no": "Vorige pagina",
|
||||||
|
"noHost": "De server is nog niet geconfigureerd, daarom kunt u geen account aanmaken",
|
||||||
|
"noHostTitle": "Server niet geconfigureerd!",
|
||||||
"title": "Vertrouw je deze server?",
|
"title": "Vertrouw je deze server?",
|
||||||
"yes": "Ik vertrouw deze server"
|
"yes": "Ik vertrouw deze server"
|
||||||
},
|
},
|
||||||
@ -118,7 +120,12 @@
|
|||||||
"noResults": "We konden helaas niets vinden!",
|
"noResults": "We konden helaas niets vinden!",
|
||||||
"placeholder": {
|
"placeholder": {
|
||||||
"default": "Wat wil je graag kijken?",
|
"default": "Wat wil je graag kijken?",
|
||||||
"extra": []
|
"extra": [
|
||||||
|
"Wat wil je verkennen?",
|
||||||
|
"Wat staat er op jouw kijklijst?",
|
||||||
|
"Wat is jouw favoriete film?",
|
||||||
|
"Wat is jouw favoriete serie?"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"sectionTitle": "Zoekresultaten"
|
"sectionTitle": "Zoekresultaten"
|
||||||
},
|
},
|
||||||
@ -131,11 +138,15 @@
|
|||||||
},
|
},
|
||||||
"morning": {
|
"morning": {
|
||||||
"default": "Waar wil je deze ochtend naar kijken?",
|
"default": "Waar wil je deze ochtend naar kijken?",
|
||||||
"extra": ["Ik hoor dat Before Sunrise goed is"]
|
"extra": [
|
||||||
|
"Ik hoor dat Before Sunrise goed is"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"night": {
|
"night": {
|
||||||
"default": "Wat wil je vanavond bekijken?",
|
"default": "Wat wil je vanavond bekijken?",
|
||||||
"extra": ["Moe? Ik hoor dat The Exorcist goed is."]
|
"extra": [
|
||||||
|
"Moe? Ik hoor dat The Exorcist goed is."
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -176,10 +187,10 @@
|
|||||||
"back": "Terug",
|
"back": "Terug",
|
||||||
"explainer": "Door gebruik te maken van de browserextensie kun je de beste streams krijgen. Met slechts een eenvoudige installatie.",
|
"explainer": "Door gebruik te maken van de browserextensie kun je de beste streams krijgen. Met slechts een eenvoudige installatie.",
|
||||||
"explainerIos": "Helaas, de browserextensie is niet ondersteund op iOS. Druk op <bold>Terug</bold> om een andere optie te kiezen.",
|
"explainerIos": "Helaas, de browserextensie is niet ondersteund op iOS. Druk op <bold>Terug</bold> om een andere optie te kiezen.",
|
||||||
"extensionHelp": "Als je de extensie hebt geïnstalleerd maar niet wordt gedetecteerd, <bold>Open dan de extensie via het extensies menu in je browser</bold> en volg de stappen op het scherm.",
|
"extensionHelp": "Als je de extensie hebt geïnstalleerd maar niet wordt gedetecteerd, <bold>open dan de extensie via het extensies menu in je browser</bold> en volg de stappen op het scherm.",
|
||||||
"linkChrome": "Installeer de Chrome-extensie",
|
"linkChrome": "Installeer de Chrome-extensie",
|
||||||
"linkFirefox": "Installeer de Firefox-extensie",
|
"linkFirefox": "Installeer de Firefox-extensie",
|
||||||
"notDetecting": "Geïnstalleerd op Chrome maar wordt niet weergegeven? Probeer de pagina opnieuw te laden!",
|
"notDetecting": "Geïnstalleerd op Chrome, maar de site detecteert het niet? Probeer de pagina opnieuw te laden!",
|
||||||
"notDetectingAction": "Pagina opnieuw laden",
|
"notDetectingAction": "Pagina opnieuw laden",
|
||||||
"status": {
|
"status": {
|
||||||
"disallowed": "Extensie is niet ingeschakeld voor deze pagina",
|
"disallowed": "Extensie is niet ingeschakeld voor deze pagina",
|
||||||
@ -207,7 +218,7 @@
|
|||||||
"title": "Laten we een nieuwe proxy instellen"
|
"title": "Laten we een nieuwe proxy instellen"
|
||||||
},
|
},
|
||||||
"start": {
|
"start": {
|
||||||
"explainer": "Om de beste mogelijke streams te krijgen, moet je kiezen welke streamingmethode je wilt gebruiken.",
|
"explainer": "Om de beste streams mogelijk te krijgen, moet je kiezen welke streammethode je wilt gebruiken.",
|
||||||
"options": {
|
"options": {
|
||||||
"default": {
|
"default": {
|
||||||
"text": "Ik wil geen streams van goede kwaliteit, <0 /> <1>Gebruik de standaardinstellingen.</1>"
|
"text": "Ik wil geen streams van goede kwaliteit, <0 /> <1>Gebruik de standaardinstellingen.</1>"
|
||||||
@ -241,6 +252,7 @@
|
|||||||
},
|
},
|
||||||
"menus": {
|
"menus": {
|
||||||
"downloads": {
|
"downloads": {
|
||||||
|
"copyHlsPlaylist": "HLS-afspeellijstlink kopiëren",
|
||||||
"disclaimer": "Downloads worden direct bij de bron opgehaald. movie-web heeft geen controle over het bestand dat je ontvangt.",
|
"disclaimer": "Downloads worden direct bij de bron opgehaald. movie-web heeft geen controle over het bestand dat je ontvangt.",
|
||||||
"downloadSubtitle": "Download huidige ondertiteling",
|
"downloadSubtitle": "Download huidige ondertiteling",
|
||||||
"downloadVideo": "Download filmpje",
|
"downloadVideo": "Download filmpje",
|
||||||
|
@ -57,6 +57,8 @@
|
|||||||
},
|
},
|
||||||
"host": "ਤੁਸੀਂ <0>{{hostname}}</0> ਨਾਲ ਜੁੜ ਰਹੇ ਹੋ - ਕਿਰਪਾ ਕਰਕੇ ਖਾਤਾ ਬਣਾਉਣ ਤੋਂ ਪਹਿਲਾਂ ਪੁਸ਼ਟੀ ਕਰੋ ਕਿ ਤੁਸੀਂ ਇਸ 'ਤੇ ਭਰੋਸਾ ਕਰਦੇ ਹੋ",
|
"host": "ਤੁਸੀਂ <0>{{hostname}}</0> ਨਾਲ ਜੁੜ ਰਹੇ ਹੋ - ਕਿਰਪਾ ਕਰਕੇ ਖਾਤਾ ਬਣਾਉਣ ਤੋਂ ਪਹਿਲਾਂ ਪੁਸ਼ਟੀ ਕਰੋ ਕਿ ਤੁਸੀਂ ਇਸ 'ਤੇ ਭਰੋਸਾ ਕਰਦੇ ਹੋ",
|
||||||
"no": "ਵਾਪਸ ਜਾਓ",
|
"no": "ਵਾਪਸ ਜਾਓ",
|
||||||
|
"noHost": "ਸਰਵਰ ਕੌਂਫਿਗਰ ਨਹੀਂ ਕੀਤਾ ਗਿਆ ਹੈ, ਇਸਲਈ ਤੁਸੀਂ ਖਾਤਾ ਨਹੀਂ ਬਣਾ ਸਕਦੇ ਹੋ",
|
||||||
|
"noHostTitle": "ਸਰਵਰ ਕੌਂਫਿਗਰ ਨਹੀਂ ਕੀਤਾ ਗਿਆ!",
|
||||||
"title": "ਕੀ ਤੁਸੀਂ ਇਸ ਸਰਵਰ 'ਤੇ ਭਰੋਸਾ ਕਰਦੇ ਹੋ?",
|
"title": "ਕੀ ਤੁਸੀਂ ਇਸ ਸਰਵਰ 'ਤੇ ਭਰੋਸਾ ਕਰਦੇ ਹੋ?",
|
||||||
"yes": "ਮੈਨੂੰ ਇਸ ਸਰਵਰ 'ਤੇ ਭਰੋਸਾ ਹੈ"
|
"yes": "ਮੈਨੂੰ ਇਸ ਸਰਵਰ 'ਤੇ ਭਰੋਸਾ ਹੈ"
|
||||||
},
|
},
|
||||||
@ -118,7 +120,12 @@
|
|||||||
"noResults": "ਅਸੀਂ ਕੁਝ ਵੀ ਨਹੀਂ ਲੱਭ ਸਕੇ!",
|
"noResults": "ਅਸੀਂ ਕੁਝ ਵੀ ਨਹੀਂ ਲੱਭ ਸਕੇ!",
|
||||||
"placeholder": {
|
"placeholder": {
|
||||||
"default": "ਤੁਸੀਂ ਕੀ ਦੇਖਣਾ ਚਾਹੁੰਦੇ ਹੋ?",
|
"default": "ਤੁਸੀਂ ਕੀ ਦੇਖਣਾ ਚਾਹੁੰਦੇ ਹੋ?",
|
||||||
"extra": []
|
"extra": [
|
||||||
|
"ਤੁਸੀਂ ਕੀ ਪੜਚੋਲ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?",
|
||||||
|
"ਤੁਹਾਡੀ ਨਿਗਰਾਨੀ ਸੂਚੀ ਵਿੱਚ ਕੀ ਹੈ?",
|
||||||
|
"ਤੁਹਾਡੀ ਮਨਪਸੰਦ ਫਿਲਮ ਕਿਹੜੀ ਹੈ?",
|
||||||
|
"ਤੁਹਾਡੀ ਮਨਪਸੰਦ ਲੜੀ ਕਿਹੜੀ ਹੈ?"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"sectionTitle": "ਖੋਜ ਨਤੀਜੇ"
|
"sectionTitle": "ਖੋਜ ਨਤੀਜੇ"
|
||||||
},
|
},
|
||||||
@ -131,11 +138,15 @@
|
|||||||
},
|
},
|
||||||
"morning": {
|
"morning": {
|
||||||
"default": "ਤੁਸੀਂ ਅੱਜ ਸਵੇਰੇ ਕੀ ਦੇਖਣਾ ਚਾਹੋਗੇ?",
|
"default": "ਤੁਸੀਂ ਅੱਜ ਸਵੇਰੇ ਕੀ ਦੇਖਣਾ ਚਾਹੋਗੇ?",
|
||||||
"extra": ["ਮੈਂ ਸੁਣਦਾ ਹਾਂ ਕਿ ਸੂਰਜ ਚੜ੍ਹਨ ਤੋਂ ਪਹਿਲਾਂ ਚੰਗਾ ਹੁੰਦਾ ਹੈ"]
|
"extra": [
|
||||||
|
"ਮੈਂ ਸੁਣਦਾ ਹਾਂ ਕਿ ਸੂਰਜ ਚੜ੍ਹਨ ਤੋਂ ਪਹਿਲਾਂ ਚੰਗਾ ਹੁੰਦਾ ਹੈ"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"night": {
|
"night": {
|
||||||
"default": "ਤੁਸੀਂ ਅੱਜ ਰਾਤ ਕੀ ਦੇਖਣਾ ਚਾਹੋਗੇ?",
|
"default": "ਤੁਸੀਂ ਅੱਜ ਰਾਤ ਕੀ ਦੇਖਣਾ ਚਾਹੋਗੇ?",
|
||||||
"extra": ["ਥੱਕ ਗਏ? ਮੈਂ ਸੁਣਿਆ ਹੈ ਕਿ Exorcist ਚੰਗਾ ਹੈ."]
|
"extra": [
|
||||||
|
"ਥੱਕ ਗਏ? ਮੈਂ ਸੁਣਿਆ ਹੈ ਕਿ Exorcist ਚੰਗਾ ਹੈ."
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -241,6 +252,7 @@
|
|||||||
},
|
},
|
||||||
"menus": {
|
"menus": {
|
||||||
"downloads": {
|
"downloads": {
|
||||||
|
"copyHlsPlaylist": "HLS ਪਲੇਲਿਸਟ ਲਿੰਕ ਕਾਪੀ ਕਰੋ",
|
||||||
"disclaimer": "ਡਾਊਨਲੋਡ ਸਿੱਧੇ ਪ੍ਰਦਾਤਾ ਤੋਂ ਲਏ ਜਾਂਦੇ ਹਨ. ਮੂਵੀ-ਵੈੱਬ ਦਾ ਇਸ 'ਤੇ ਕੰਟਰੋਲ ਨਹੀਂ ਹੈ ਕਿ ਡਾਊਨਲੋਡ ਕਿਵੇਂ ਪ੍ਰਦਾਨ ਕੀਤੇ ਜਾਂਦੇ ਹਨ.",
|
"disclaimer": "ਡਾਊਨਲੋਡ ਸਿੱਧੇ ਪ੍ਰਦਾਤਾ ਤੋਂ ਲਏ ਜਾਂਦੇ ਹਨ. ਮੂਵੀ-ਵੈੱਬ ਦਾ ਇਸ 'ਤੇ ਕੰਟਰੋਲ ਨਹੀਂ ਹੈ ਕਿ ਡਾਊਨਲੋਡ ਕਿਵੇਂ ਪ੍ਰਦਾਨ ਕੀਤੇ ਜਾਂਦੇ ਹਨ.",
|
||||||
"downloadSubtitle": "ਮੌਜੂਦਾ ਉਪਸਿਰਲੇਖ ਡਾਊਨਲੋਡ ਕਰੋ",
|
"downloadSubtitle": "ਮੌਜੂਦਾ ਉਪਸਿਰਲੇਖ ਡਾਊਨਲੋਡ ਕਰੋ",
|
||||||
"downloadVideo": "ਵੀਡੀਓ ਡਾਊਨਲੋਡ ਕਰੋ",
|
"downloadVideo": "ਵੀਡੀਓ ਡਾਊਨਲੋਡ ਕਰੋ",
|
||||||
|
@ -525,6 +525,7 @@
|
|||||||
},
|
},
|
||||||
"subtitles": {
|
"subtitles": {
|
||||||
"backgroundLabel": "Krycie tła",
|
"backgroundLabel": "Krycie tła",
|
||||||
|
"backgroundBlurLabel": "Rozmycie tła",
|
||||||
"colorLabel": "Kolor",
|
"colorLabel": "Kolor",
|
||||||
"previewQuote": "Nie wolno mi się bać. Strach zabija myślenie.",
|
"previewQuote": "Nie wolno mi się bać. Strach zabija myślenie.",
|
||||||
"textSizeLabel": "Rozmiar czcionki",
|
"textSizeLabel": "Rozmiar czcionki",
|
||||||
|
@ -57,6 +57,8 @@
|
|||||||
},
|
},
|
||||||
"host": "Вы подключаетесь к <0>{{hostname}}</0> - пожалуйста, подтвердите, что вы доверяете ему, прежде чем создавать учётную запись",
|
"host": "Вы подключаетесь к <0>{{hostname}}</0> - пожалуйста, подтвердите, что вы доверяете ему, прежде чем создавать учётную запись",
|
||||||
"no": "Вернуться назад",
|
"no": "Вернуться назад",
|
||||||
|
"noHost": "Сервер не был настроен, поэтому вы не можете создать учётную запись",
|
||||||
|
"noHostTitle": "Сервер не настроен!",
|
||||||
"title": "Вы доверяете этому серверу?",
|
"title": "Вы доверяете этому серверу?",
|
||||||
"yes": "Я доверяю этому серверу"
|
"yes": "Я доверяю этому серверу"
|
||||||
},
|
},
|
||||||
@ -118,7 +120,12 @@
|
|||||||
"noResults": "Мы ничего не нашли!",
|
"noResults": "Мы ничего не нашли!",
|
||||||
"placeholder": {
|
"placeholder": {
|
||||||
"default": "Что вы хотите посмотреть?",
|
"default": "Что вы хотите посмотреть?",
|
||||||
"extra": []
|
"extra": [
|
||||||
|
"Что вы хотите исследовать?",
|
||||||
|
"Что в вашем списке?",
|
||||||
|
"Какой ваш любимый фильм?",
|
||||||
|
"Какой ваш любимый сериал?"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"sectionTitle": "Результаты поиска"
|
"sectionTitle": "Результаты поиска"
|
||||||
},
|
},
|
||||||
@ -131,7 +138,9 @@
|
|||||||
},
|
},
|
||||||
"morning": {
|
"morning": {
|
||||||
"default": "Что бы вы хотели посмотреть этим утром?",
|
"default": "Что бы вы хотели посмотреть этим утром?",
|
||||||
"extra": ["Слышали, что «Перед рассветом» – отличный фильм"]
|
"extra": [
|
||||||
|
"Слышали, что «Перед рассветом» – отличный фильм"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"night": {
|
"night": {
|
||||||
"default": "Что бы вы хотели посмотреть этим вечером?",
|
"default": "Что бы вы хотели посмотреть этим вечером?",
|
||||||
|
@ -57,6 +57,8 @@
|
|||||||
},
|
},
|
||||||
"host": "Povezujete se z <0>{{hostname}}</0> - pred ustvarjanjem računa potrdite, da mu zaupate",
|
"host": "Povezujete se z <0>{{hostname}}</0> - pred ustvarjanjem računa potrdite, da mu zaupate",
|
||||||
"no": "Nazaj",
|
"no": "Nazaj",
|
||||||
|
"noHost": "Strežnik ni nastavljen, zato ustvarjanje profila ni mogoče",
|
||||||
|
"noHostTitle": "Strežnik ni nastavljen!",
|
||||||
"title": "Ali zaupate temu strežniku?",
|
"title": "Ali zaupate temu strežniku?",
|
||||||
"yes": "Zaupam strežniku"
|
"yes": "Zaupam strežniku"
|
||||||
},
|
},
|
||||||
|
@ -57,6 +57,8 @@
|
|||||||
},
|
},
|
||||||
"host": "您正在连接到 <0>{{hostname}}</0> - 在创建账户前,确保您信任它",
|
"host": "您正在连接到 <0>{{hostname}}</0> - 在创建账户前,确保您信任它",
|
||||||
"no": "返回",
|
"no": "返回",
|
||||||
|
"noHost": "服务器尚未进行配置,因此您无法创建账户",
|
||||||
|
"noHostTitle": "未配置服务器!",
|
||||||
"title": "您是否信任这个服务器?",
|
"title": "您是否信任这个服务器?",
|
||||||
"yes": "我信任这个服务器"
|
"yes": "我信任这个服务器"
|
||||||
},
|
},
|
||||||
|
@ -144,12 +144,16 @@ export function decodeTMDBId(
|
|||||||
|
|
||||||
const baseURL = "https://api.themoviedb.org/3";
|
const baseURL = "https://api.themoviedb.org/3";
|
||||||
|
|
||||||
|
const apiKey = conf().TMDB_READ_API_KEY;
|
||||||
|
|
||||||
const headers = {
|
const headers = {
|
||||||
accept: "application/json",
|
accept: "application/json",
|
||||||
Authorization: `Bearer ${conf().TMDB_READ_API_KEY}`,
|
Authorization: `Bearer ${apiKey}`,
|
||||||
};
|
};
|
||||||
|
|
||||||
async function get<T>(url: string, params?: object): Promise<T> {
|
async function get<T>(url: string, params?: object): Promise<T> {
|
||||||
|
if (!apiKey) throw new Error("TMDB API key not set");
|
||||||
|
|
||||||
const res = await mwFetch<any>(encodeURI(url), {
|
const res = await mwFetch<any>(encodeURI(url), {
|
||||||
headers,
|
headers,
|
||||||
baseURL,
|
baseURL,
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import classNames from "classnames";
|
import classNames from "classnames";
|
||||||
import { ReactNode, useCallback } from "react";
|
import { ReactNode, useCallback } from "react";
|
||||||
|
import { useNavigate } from "react-router-dom";
|
||||||
|
|
||||||
import { Icon, Icons } from "@/components/Icon";
|
import { Icon, Icons } from "@/components/Icon";
|
||||||
import { Spinner } from "@/components/layout/Spinner";
|
import { Spinner } from "@/components/layout/Spinner";
|
||||||
@ -20,6 +21,7 @@ interface Props {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function Button(props: Props) {
|
export function Button(props: Props) {
|
||||||
|
const navigate = useNavigate();
|
||||||
const { onClick, href, loading } = props;
|
const { onClick, href, loading } = props;
|
||||||
const cb = useCallback(
|
const cb = useCallback(
|
||||||
(
|
(
|
||||||
@ -31,10 +33,14 @@ export function Button(props: Props) {
|
|||||||
if (loading) return;
|
if (loading) return;
|
||||||
if (href && !onClick) {
|
if (href && !onClick) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
|
if (!href.includes("http")) {
|
||||||
|
navigate(href);
|
||||||
|
} else {
|
||||||
window.open(href, "_blank", "noreferrer");
|
window.open(href, "_blank", "noreferrer");
|
||||||
|
}
|
||||||
} else onClick?.(event);
|
} else onClick?.(event);
|
||||||
},
|
},
|
||||||
[onClick, href, loading],
|
[loading, href, onClick, navigate],
|
||||||
);
|
);
|
||||||
|
|
||||||
let colorClasses = "bg-white hover:bg-gray-200 text-black";
|
let colorClasses = "bg-white hover:bg-gray-200 text-black";
|
||||||
|
@ -25,7 +25,7 @@ export function IconPatch(props: IconPatchProps) {
|
|||||||
return (
|
return (
|
||||||
<div className={props.className || undefined} onClick={props.onClick}>
|
<div className={props.className || undefined} onClick={props.onClick}>
|
||||||
<div
|
<div
|
||||||
className={`flex items-center justify-center rounded-full border-2 border-transparent backdrop-blur-lg bg-pill-background bg-opacity-50 transition-[background-color,color,transform,border-color] duration-75 ${transparentClasses} ${clickableClasses} ${activeClasses} ${sizeClasses}`}
|
className={`flex items-center justify-center rounded-full border-2 border-transparent bg-pill-background bg-opacity-100 transition-[background-color,color,transform,border-color] duration-75 ${transparentClasses} ${clickableClasses} ${activeClasses} ${sizeClasses}`}
|
||||||
>
|
>
|
||||||
<Icon icon={props.icon} />
|
<Icon icon={props.icon} />
|
||||||
</div>
|
</div>
|
||||||
|
@ -262,6 +262,14 @@ export function CaptionSettingsView({ id }: { id: string }) {
|
|||||||
value={styling.backgroundOpacity * 100}
|
value={styling.backgroundOpacity * 100}
|
||||||
textTransformer={(s) => `${s}%`}
|
textTransformer={(s) => `${s}%`}
|
||||||
/>
|
/>
|
||||||
|
<CaptionSetting
|
||||||
|
label={t("settings.subtitles.backgroundBlurLabel")}
|
||||||
|
max={100}
|
||||||
|
min={0}
|
||||||
|
onChange={(v) => updateStyling({ backgroundBlur: v / 100 })}
|
||||||
|
value={styling.backgroundBlur * 100}
|
||||||
|
textTransformer={(s) => `${s}%`}
|
||||||
|
/>
|
||||||
<CaptionSetting
|
<CaptionSetting
|
||||||
label={t("settings.subtitles.textSizeLabel")}
|
label={t("settings.subtitles.textSizeLabel")}
|
||||||
max={200}
|
max={200}
|
||||||
|
@ -4,6 +4,7 @@ import { OverlayDisplay } from "@/components/overlays/OverlayDisplay";
|
|||||||
import { CastingInternal } from "@/components/player/internals/CastingInternal";
|
import { CastingInternal } from "@/components/player/internals/CastingInternal";
|
||||||
import { HeadUpdater } from "@/components/player/internals/HeadUpdater";
|
import { HeadUpdater } from "@/components/player/internals/HeadUpdater";
|
||||||
import { KeyboardEvents } from "@/components/player/internals/KeyboardEvents";
|
import { KeyboardEvents } from "@/components/player/internals/KeyboardEvents";
|
||||||
|
import { MediaSession } from "@/components/player/internals/MediaSession";
|
||||||
import { MetaReporter } from "@/components/player/internals/MetaReporter";
|
import { MetaReporter } from "@/components/player/internals/MetaReporter";
|
||||||
import { ProgressSaver } from "@/components/player/internals/ProgressSaver";
|
import { ProgressSaver } from "@/components/player/internals/ProgressSaver";
|
||||||
import { ThumbnailScraper } from "@/components/player/internals/ThumbnailScraper";
|
import { ThumbnailScraper } from "@/components/player/internals/ThumbnailScraper";
|
||||||
@ -91,6 +92,7 @@ export function Container(props: PlayerProps) {
|
|||||||
<VideoContainer />
|
<VideoContainer />
|
||||||
<ProgressSaver />
|
<ProgressSaver />
|
||||||
<KeyboardEvents />
|
<KeyboardEvents />
|
||||||
|
<MediaSession />
|
||||||
<div className="relative h-screen overflow-hidden">
|
<div className="relative h-screen overflow-hidden">
|
||||||
<VideoClickTarget showingControls={props.showingControls} />
|
<VideoClickTarget showingControls={props.showingControls} />
|
||||||
<HeadUpdater />
|
<HeadUpdater />
|
||||||
|
@ -55,6 +55,10 @@ export function CaptionCue({
|
|||||||
color: styling.color,
|
color: styling.color,
|
||||||
fontSize: `${(1.5 * styling.size).toFixed(2)}em`,
|
fontSize: `${(1.5 * styling.size).toFixed(2)}em`,
|
||||||
backgroundColor: `rgba(0,0,0,${styling.backgroundOpacity.toFixed(2)})`,
|
backgroundColor: `rgba(0,0,0,${styling.backgroundOpacity.toFixed(2)})`,
|
||||||
|
backdropFilter:
|
||||||
|
styling.backgroundBlur !== 0
|
||||||
|
? `blur(${Math.floor(styling.backgroundBlur * 64)}px)`
|
||||||
|
: "none",
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<span
|
<span
|
||||||
|
182
src/components/player/internals/MediaSession.tsx
Normal file
182
src/components/player/internals/MediaSession.tsx
Normal file
@ -0,0 +1,182 @@
|
|||||||
|
import { useCallback, useEffect, useRef } from "react";
|
||||||
|
|
||||||
|
import { usePlayerStore } from "@/stores/player/store";
|
||||||
|
|
||||||
|
import { usePlayerMeta } from "../hooks/usePlayerMeta";
|
||||||
|
|
||||||
|
export function MediaSession() {
|
||||||
|
const { setDirectMeta } = usePlayerMeta();
|
||||||
|
const setShouldStartFromBeginning = usePlayerStore(
|
||||||
|
(s) => s.setShouldStartFromBeginning,
|
||||||
|
);
|
||||||
|
|
||||||
|
const shouldUpdatePositionState = useRef(false);
|
||||||
|
const lastPlaybackPosition = useRef(0);
|
||||||
|
|
||||||
|
const data = usePlayerStore.getState();
|
||||||
|
|
||||||
|
const changeEpisode = useCallback(
|
||||||
|
(change: number) => {
|
||||||
|
const nextEp = data.meta?.episodes?.find(
|
||||||
|
(v) => v.number === (data.meta?.episode?.number ?? 0) + change,
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!data.meta || !nextEp) return;
|
||||||
|
const metaCopy = { ...data.meta };
|
||||||
|
metaCopy.episode = nextEp;
|
||||||
|
setShouldStartFromBeginning(true);
|
||||||
|
setDirectMeta(metaCopy);
|
||||||
|
},
|
||||||
|
[data.meta, setDirectMeta, setShouldStartFromBeginning],
|
||||||
|
);
|
||||||
|
|
||||||
|
const updatePositionState = useCallback(
|
||||||
|
(position: number) => {
|
||||||
|
// If the updated position needs to be buffered, queue an update
|
||||||
|
if (position > data.progress.buffered) {
|
||||||
|
shouldUpdatePositionState.current = true;
|
||||||
|
}
|
||||||
|
if (position > data.progress.duration) return;
|
||||||
|
|
||||||
|
lastPlaybackPosition.current = data.progress.time;
|
||||||
|
navigator.mediaSession.setPositionState({
|
||||||
|
duration: data.progress.duration,
|
||||||
|
playbackRate: data.mediaPlaying.playbackRate,
|
||||||
|
position,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
[
|
||||||
|
data.mediaPlaying.playbackRate,
|
||||||
|
data.progress.buffered,
|
||||||
|
data.progress.duration,
|
||||||
|
data.progress.time,
|
||||||
|
],
|
||||||
|
);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (!("mediaSession" in navigator)) return;
|
||||||
|
|
||||||
|
// If the media is paused, update the navigator
|
||||||
|
if (data.mediaPlaying.isPaused) {
|
||||||
|
navigator.mediaSession.playbackState = "paused";
|
||||||
|
} else {
|
||||||
|
navigator.mediaSession.playbackState = "playing";
|
||||||
|
}
|
||||||
|
}, [data.mediaPlaying.isPaused]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (!("mediaSession" in navigator)) return;
|
||||||
|
|
||||||
|
updatePositionState(data.progress.time);
|
||||||
|
}, [data.progress.time, data.mediaPlaying.playbackRate, updatePositionState]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (!("mediaSession" in navigator)) return;
|
||||||
|
// If not already updating the position state, and the media is loading, queue an update
|
||||||
|
if (!shouldUpdatePositionState.current && data.mediaPlaying.isLoading) {
|
||||||
|
shouldUpdatePositionState.current = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the user has skipped (or MediaSession desynced) by more than 5 seconds, queue an update
|
||||||
|
if (
|
||||||
|
Math.abs(data.progress.time - lastPlaybackPosition.current) >= 5 &&
|
||||||
|
!data.mediaPlaying.isLoading &&
|
||||||
|
!shouldUpdatePositionState.current
|
||||||
|
) {
|
||||||
|
shouldUpdatePositionState.current = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If not loading and the position state is queued, update it
|
||||||
|
if (shouldUpdatePositionState.current && !data.mediaPlaying.isLoading) {
|
||||||
|
shouldUpdatePositionState.current = false;
|
||||||
|
updatePositionState(data.progress.time);
|
||||||
|
}
|
||||||
|
|
||||||
|
lastPlaybackPosition.current = data.progress.time;
|
||||||
|
}, [updatePositionState, data.progress.time, data.mediaPlaying.isLoading]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (
|
||||||
|
!("mediaSession" in navigator) ||
|
||||||
|
(!data.mediaPlaying.isLoading &&
|
||||||
|
data.mediaPlaying.isPlaying &&
|
||||||
|
!data.display)
|
||||||
|
)
|
||||||
|
return;
|
||||||
|
|
||||||
|
let title: string | undefined;
|
||||||
|
let artist: string | undefined;
|
||||||
|
|
||||||
|
if (data.meta?.type === "movie") {
|
||||||
|
title = data.meta?.title;
|
||||||
|
} else if (data.meta?.type === "show") {
|
||||||
|
artist = data.meta?.title;
|
||||||
|
title = `S${data.meta?.season?.number} E${data.meta?.episode?.number}: ${data.meta?.episode?.title}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
navigator.mediaSession.metadata = new MediaMetadata({
|
||||||
|
title,
|
||||||
|
artist,
|
||||||
|
artwork: [
|
||||||
|
{
|
||||||
|
src: data.meta?.poster ?? "",
|
||||||
|
sizes: "342x513",
|
||||||
|
type: "image/png",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
});
|
||||||
|
|
||||||
|
navigator.mediaSession.setActionHandler("play", () => {
|
||||||
|
if (data.mediaPlaying.isLoading) return;
|
||||||
|
data.display?.play();
|
||||||
|
|
||||||
|
updatePositionState(data.progress.time);
|
||||||
|
});
|
||||||
|
|
||||||
|
navigator.mediaSession.setActionHandler("pause", () => {
|
||||||
|
if (data.mediaPlaying.isLoading) return;
|
||||||
|
data.display?.pause();
|
||||||
|
|
||||||
|
updatePositionState(data.progress.time);
|
||||||
|
});
|
||||||
|
|
||||||
|
navigator.mediaSession.setActionHandler("seekto", (e) => {
|
||||||
|
if (!e.seekTime) return;
|
||||||
|
data.display?.setTime(e.seekTime);
|
||||||
|
updatePositionState(e.seekTime);
|
||||||
|
});
|
||||||
|
|
||||||
|
if ((data.meta?.episode?.number ?? 1) !== 1) {
|
||||||
|
navigator.mediaSession.setActionHandler("previoustrack", () => {
|
||||||
|
changeEpisode(-1);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
navigator.mediaSession.setActionHandler("previoustrack", null);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data.meta?.episode?.number !== data.meta?.episodes?.length) {
|
||||||
|
navigator.mediaSession.setActionHandler("nexttrack", () => {
|
||||||
|
changeEpisode(1);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
navigator.mediaSession.setActionHandler("nexttrack", null);
|
||||||
|
}
|
||||||
|
}, [
|
||||||
|
changeEpisode,
|
||||||
|
updatePositionState,
|
||||||
|
data.mediaPlaying.hasPlayedOnce,
|
||||||
|
data.mediaPlaying.isLoading,
|
||||||
|
data.progress.duration,
|
||||||
|
data.progress.time,
|
||||||
|
data.meta?.episode?.number,
|
||||||
|
data.meta?.episodes?.length,
|
||||||
|
data.display,
|
||||||
|
data.mediaPlaying,
|
||||||
|
data.meta?.episode?.title,
|
||||||
|
data.meta?.title,
|
||||||
|
data.meta?.type,
|
||||||
|
data.meta?.poster,
|
||||||
|
data.meta?.season?.number,
|
||||||
|
]);
|
||||||
|
return null;
|
||||||
|
}
|
@ -1,7 +1,7 @@
|
|||||||
import { conf } from "@/setup/config";
|
import { conf } from "@/setup/config";
|
||||||
import { useAuthStore } from "@/stores/auth";
|
import { useAuthStore } from "@/stores/auth";
|
||||||
|
|
||||||
export function useBackendUrl(): string | undefined {
|
export function useBackendUrl(): string | null {
|
||||||
const backendUrl = useAuthStore((s) => s.backendUrl);
|
const backendUrl = useAuthStore((s) => s.backendUrl);
|
||||||
return backendUrl ?? conf().BACKEND_URL;
|
return backendUrl ?? conf().BACKEND_URL;
|
||||||
}
|
}
|
||||||
|
@ -25,7 +25,7 @@ export function TMDBTestPart() {
|
|||||||
errorText: "",
|
errorText: "",
|
||||||
});
|
});
|
||||||
|
|
||||||
if (tmdbApiKey.length === 0) {
|
if (!tmdbApiKey || tmdbApiKey.length === 0) {
|
||||||
return setStatus({
|
return setStatus({
|
||||||
hasTested: true,
|
hasTested: true,
|
||||||
success: false,
|
success: false,
|
||||||
|
@ -92,6 +92,16 @@ export function CaptionsPart(props: {
|
|||||||
value={props.styling.backgroundOpacity * 100}
|
value={props.styling.backgroundOpacity * 100}
|
||||||
textTransformer={(s) => `${s}%`}
|
textTransformer={(s) => `${s}%`}
|
||||||
/>
|
/>
|
||||||
|
<CaptionSetting
|
||||||
|
label={t("settings.subtitles.backgroundBlurLabel")}
|
||||||
|
max={100}
|
||||||
|
min={0}
|
||||||
|
onChange={(v) =>
|
||||||
|
props.setStyling({ ...props.styling, backgroundBlur: v / 100 })
|
||||||
|
}
|
||||||
|
value={props.styling.backgroundBlur * 100}
|
||||||
|
textTransformer={(s) => `${s}%`}
|
||||||
|
/>
|
||||||
<CaptionSetting
|
<CaptionSetting
|
||||||
label={t("settings.subtitles.textSizeLabel")}
|
label={t("settings.subtitles.textSizeLabel")}
|
||||||
max={200}
|
max={200}
|
||||||
|
@ -14,7 +14,7 @@ import { useAuthStore } from "@/stores/auth";
|
|||||||
|
|
||||||
const rem = 16;
|
const rem = 16;
|
||||||
|
|
||||||
function SecureBadge(props: { url: string | undefined }) {
|
function SecureBadge(props: { url: string | null }) {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const secure = props.url ? props.url.startsWith("https://") : false;
|
const secure = props.url ? props.url.startsWith("https://") : false;
|
||||||
return (
|
return (
|
||||||
|
@ -31,10 +31,10 @@ export interface RuntimeConfig {
|
|||||||
DONATION_LINK: string;
|
DONATION_LINK: string;
|
||||||
DISCORD_LINK: string;
|
DISCORD_LINK: string;
|
||||||
DMCA_EMAIL: string | null;
|
DMCA_EMAIL: string | null;
|
||||||
TMDB_READ_API_KEY: string;
|
TMDB_READ_API_KEY: string | null;
|
||||||
NORMAL_ROUTER: boolean;
|
NORMAL_ROUTER: boolean;
|
||||||
PROXY_URLS: string[];
|
PROXY_URLS: string[];
|
||||||
BACKEND_URL: string;
|
BACKEND_URL: string | null;
|
||||||
DISALLOWED_IDS: string[];
|
DISALLOWED_IDS: string[];
|
||||||
TURNSTILE_KEY: string | null;
|
TURNSTILE_KEY: string | null;
|
||||||
CDN_REPLACEMENTS: Array<string[]>;
|
CDN_REPLACEMENTS: Array<string[]>;
|
||||||
@ -66,48 +66,48 @@ const env: Record<keyof Config, undefined | string> = {
|
|||||||
HAS_ONBOARDING: import.meta.env.VITE_HAS_ONBOARDING,
|
HAS_ONBOARDING: import.meta.env.VITE_HAS_ONBOARDING,
|
||||||
};
|
};
|
||||||
|
|
||||||
// loads from different locations, in order: environment (VITE_{KEY}), window (public/config.js)
|
function coerceUndefined(value: string | null | undefined): string | undefined {
|
||||||
function getKeyValue(key: keyof Config): string | undefined {
|
if (value == null) return undefined;
|
||||||
let windowValue = (window as any)?.__CONFIG__?.[`VITE_${key}`];
|
if (value.length === 0) return undefined;
|
||||||
if (
|
return value;
|
||||||
windowValue !== null &&
|
|
||||||
windowValue !== undefined &&
|
|
||||||
windowValue.length === 0
|
|
||||||
)
|
|
||||||
windowValue = undefined;
|
|
||||||
return env[key] ?? windowValue ?? undefined;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function getKey(key: keyof Config, defaultString?: string): string {
|
// loads from different locations, in order: environment (VITE_{KEY}), window (public/config.js)
|
||||||
return getKeyValue(key)?.toString() ?? defaultString ?? "";
|
function getKeyValue(key: keyof Config): string | undefined {
|
||||||
|
const windowValue = (window as any)?.__CONFIG__?.[`VITE_${key}`];
|
||||||
|
|
||||||
|
return coerceUndefined(env[key]) ?? coerceUndefined(windowValue) ?? undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getKey(key: keyof Config): string | null;
|
||||||
|
function getKey(key: keyof Config, defaultString: string): string;
|
||||||
|
function getKey(key: keyof Config, defaultString?: string): string | null {
|
||||||
|
return getKeyValue(key)?.toString() ?? defaultString ?? null;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function conf(): RuntimeConfig {
|
export function conf(): RuntimeConfig {
|
||||||
const dmcaEmail = getKey("DMCA_EMAIL");
|
|
||||||
const chromeExtension = getKey("ONBOARDING_CHROME_EXTENSION_INSTALL_LINK");
|
|
||||||
const firefoxExtension = getKey("ONBOARDING_FIREFOX_EXTENSION_INSTALL_LINK");
|
|
||||||
const proxyInstallLink = getKey("ONBOARDING_PROXY_INSTALL_LINK");
|
|
||||||
const turnstileKey = getKey("TURNSTILE_KEY");
|
|
||||||
return {
|
return {
|
||||||
APP_VERSION,
|
APP_VERSION,
|
||||||
GITHUB_LINK,
|
GITHUB_LINK,
|
||||||
DONATION_LINK,
|
DONATION_LINK,
|
||||||
DISCORD_LINK,
|
DISCORD_LINK,
|
||||||
DMCA_EMAIL: dmcaEmail.length > 0 ? dmcaEmail : null,
|
DMCA_EMAIL: getKey("DMCA_EMAIL"),
|
||||||
ONBOARDING_CHROME_EXTENSION_INSTALL_LINK:
|
ONBOARDING_CHROME_EXTENSION_INSTALL_LINK: getKey(
|
||||||
chromeExtension.length > 0 ? chromeExtension : null,
|
"ONBOARDING_CHROME_EXTENSION_INSTALL_LINK",
|
||||||
ONBOARDING_FIREFOX_EXTENSION_INSTALL_LINK:
|
),
|
||||||
firefoxExtension.length > 0 ? firefoxExtension : null,
|
ONBOARDING_FIREFOX_EXTENSION_INSTALL_LINK: getKey(
|
||||||
ONBOARDING_PROXY_INSTALL_LINK:
|
"ONBOARDING_FIREFOX_EXTENSION_INSTALL_LINK",
|
||||||
proxyInstallLink.length > 0 ? proxyInstallLink : null,
|
),
|
||||||
|
ONBOARDING_PROXY_INSTALL_LINK: getKey("ONBOARDING_PROXY_INSTALL_LINK"),
|
||||||
BACKEND_URL: getKey("BACKEND_URL", BACKEND_URL),
|
BACKEND_URL: getKey("BACKEND_URL", BACKEND_URL),
|
||||||
TMDB_READ_API_KEY: getKey("TMDB_READ_API_KEY"),
|
TMDB_READ_API_KEY: getKey("TMDB_READ_API_KEY"),
|
||||||
PROXY_URLS: getKey("CORS_PROXY_URL")
|
PROXY_URLS: getKey("CORS_PROXY_URL", "")
|
||||||
.split(",")
|
.split(",")
|
||||||
.map((v) => v.trim()),
|
.map((v) => v.trim())
|
||||||
|
.filter((v) => v.length > 0),
|
||||||
NORMAL_ROUTER: getKey("NORMAL_ROUTER", "false") === "true",
|
NORMAL_ROUTER: getKey("NORMAL_ROUTER", "false") === "true",
|
||||||
HAS_ONBOARDING: getKey("HAS_ONBOARDING", "false") === "true",
|
HAS_ONBOARDING: getKey("HAS_ONBOARDING", "false") === "true",
|
||||||
TURNSTILE_KEY: turnstileKey.length > 0 ? turnstileKey : null,
|
TURNSTILE_KEY: getKey("TURNSTILE_KEY"),
|
||||||
DISALLOWED_IDS: getKey("DISALLOWED_IDS", "")
|
DISALLOWED_IDS: getKey("DISALLOWED_IDS", "")
|
||||||
.split(",")
|
.split(",")
|
||||||
.map((v) => v.trim())
|
.map((v) => v.trim())
|
||||||
|
@ -17,6 +17,11 @@ export interface SubtitleStyling {
|
|||||||
* background opacity, ranges between 0 and 1
|
* background opacity, ranges between 0 and 1
|
||||||
*/
|
*/
|
||||||
backgroundOpacity: number;
|
backgroundOpacity: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* background blur, ranges between 0 and 1
|
||||||
|
*/
|
||||||
|
backgroundBlur: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface SubtitleStore {
|
export interface SubtitleStore {
|
||||||
@ -51,6 +56,7 @@ export const useSubtitleStore = create(
|
|||||||
color: "#ffffff",
|
color: "#ffffff",
|
||||||
backgroundOpacity: 0.5,
|
backgroundOpacity: 0.5,
|
||||||
size: 1,
|
size: 1,
|
||||||
|
backgroundBlur: 0.5,
|
||||||
},
|
},
|
||||||
resetSubtitleSpecificSettings() {
|
resetSubtitleSpecificSettings() {
|
||||||
set((s) => {
|
set((s) => {
|
||||||
@ -62,6 +68,8 @@ export const useSubtitleStore = create(
|
|||||||
set((s) => {
|
set((s) => {
|
||||||
if (newStyling.backgroundOpacity !== undefined)
|
if (newStyling.backgroundOpacity !== undefined)
|
||||||
s.styling.backgroundOpacity = newStyling.backgroundOpacity;
|
s.styling.backgroundOpacity = newStyling.backgroundOpacity;
|
||||||
|
if (newStyling.backgroundBlur !== undefined)
|
||||||
|
s.styling.backgroundBlur = newStyling.backgroundBlur;
|
||||||
if (newStyling.color !== undefined)
|
if (newStyling.color !== undefined)
|
||||||
s.styling.color = newStyling.color.toLowerCase();
|
s.styling.color = newStyling.color.toLowerCase();
|
||||||
if (newStyling.size !== undefined)
|
if (newStyling.size !== undefined)
|
||||||
|
@ -31,7 +31,7 @@ const tokens = {
|
|||||||
c200: "#8A293B",
|
c200: "#8A293B",
|
||||||
c300: "#812435",
|
c300: "#812435",
|
||||||
c400: "#701B2B",
|
c400: "#701B2B",
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
blue: {
|
blue: {
|
||||||
c50: "#ADADF5",
|
c50: "#ADADF5",
|
||||||
@ -43,7 +43,7 @@ const tokens = {
|
|||||||
c600: "#1B1B41",
|
c600: "#1B1B41",
|
||||||
c700: "#171736",
|
c700: "#171736",
|
||||||
c800: "#101020",
|
c800: "#101020",
|
||||||
c900: "#0B0B13"
|
c900: "#0B0B13",
|
||||||
},
|
},
|
||||||
purple: {
|
purple: {
|
||||||
c50: "#D5AAFF",
|
c50: "#D5AAFF",
|
||||||
@ -55,7 +55,7 @@ const tokens = {
|
|||||||
c600: "#411F64",
|
c600: "#411F64",
|
||||||
c700: "#31184A",
|
c700: "#31184A",
|
||||||
c800: "#221134",
|
c800: "#221134",
|
||||||
c900: "#160B22"
|
c900: "#160B22",
|
||||||
},
|
},
|
||||||
ash: {
|
ash: {
|
||||||
c50: "#7F8D9B",
|
c50: "#7F8D9B",
|
||||||
@ -67,7 +67,7 @@ const tokens = {
|
|||||||
c600: "#172532",
|
c600: "#172532",
|
||||||
c700: "#131E29",
|
c700: "#131E29",
|
||||||
c800: "#101820",
|
c800: "#101820",
|
||||||
c900: "#0C1216"
|
c900: "#0C1216",
|
||||||
},
|
},
|
||||||
shade: {
|
shade: {
|
||||||
c50: "#676790",
|
c50: "#676790",
|
||||||
@ -79,9 +79,9 @@ const tokens = {
|
|||||||
c600: "#171728",
|
c600: "#171728",
|
||||||
c700: "#131322",
|
c700: "#131322",
|
||||||
c800: "#0F0F1B",
|
c800: "#0F0F1B",
|
||||||
c900: "#0A0A12"
|
c900: "#0A0A12",
|
||||||
}
|
},
|
||||||
}
|
};
|
||||||
|
|
||||||
export const defaultTheme = {
|
export const defaultTheme = {
|
||||||
extend: {
|
extend: {
|
||||||
@ -233,8 +233,8 @@ export const defaultTheme = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
saveBar: {
|
saveBar: {
|
||||||
background: tokens.shade.c800
|
background: tokens.shade.c800,
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
// Utilities
|
// Utilities
|
||||||
@ -290,7 +290,7 @@ export const defaultTheme = {
|
|||||||
|
|
||||||
autoPlay: {
|
autoPlay: {
|
||||||
background: tokens.ash.c700,
|
background: tokens.ash.c700,
|
||||||
hover: tokens.ash.c500
|
hover: tokens.ash.c500,
|
||||||
},
|
},
|
||||||
|
|
||||||
scraping: {
|
scraping: {
|
||||||
|
3
vercel.json
Normal file
3
vercel.json
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"routes": [{ "src": "/[^.]+", "dest": "/", "status": 200 }]
|
||||||
|
}
|
@ -24,6 +24,7 @@ const captioningPackages = [
|
|||||||
export default defineConfig(({ mode }) => {
|
export default defineConfig(({ mode }) => {
|
||||||
const env = loadEnv(mode, process.cwd());
|
const env = loadEnv(mode, process.cwd());
|
||||||
return {
|
return {
|
||||||
|
base: env.VITE_BASE_URL || '/',
|
||||||
plugins: [
|
plugins: [
|
||||||
million.vite({ auto: true, mute: true }),
|
million.vite({ auto: true, mute: true }),
|
||||||
handlebars({
|
handlebars({
|
||||||
|
Loading…
Reference in New Issue
Block a user