Merge pull request #955 from movie-web/dev

Version 4.5.1
This commit is contained in:
William Oldham 2024-02-29 23:31:00 +00:00 committed by GitHub
commit a0067cb2f2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
25 changed files with 940 additions and 119 deletions

View File

@ -9,8 +9,36 @@ COPY pnpm-lock.yaml ./
RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile
ARG PWA_ENABLED="false"
ARG GA_ID
ARG APP_DOMAIN
ARG OPENSEARCH_ENABLED="false"
ARG TMDB_READ_API_KEY
ARG CORS_PROXY_URL
ARG DMCA_EMAIL
ARG NORMAL_ROUTER="false"
ARG BACKEND_URL
ARG HAS_ONBOARDING="false"
ARG ONBOARDING_CHROME_EXTENSION_INSTALL_LINK
ARG ONBOARDING_PROXY_INSTALL_LINK
ARG DISALLOWED_IDS
ARG CDN_REPLACEMENTS
ARG TURNSTILE_KEY
ENV VITE_PWA_ENABLED=${PWA_ENABLED}
ENV VITE_GA_ID=${GA_ID}
ENV VITE_APP_DOMAIN=${APP_DOMAIN}
ENV VITE_OPENSEARCH_ENABLED=${OPENSEARCH_ENABLED}
ENV VITE_TMDB_READ_API_KEY=${TMDB_READ_API_KEY}
ENV VITE_CORS_PROXY_URL=${CORS_PROXY_URL}
ENV VITE_DMCA_EMAIL=${DMCA_EMAIL}
ENV VITE_NORMAL_ROUTER=${NORMAL_ROUTER}
ENV VITE_BACKEND_URL=${BACKEND_URL}
ENV VITE_HAS_ONBOARDING=${HAS_ONBOARDING}
ENV VITE_ONBOARDING_CHROME_EXTENSION_INSTALL_LINK=${ONBOARDING_CHROME_EXTENSION_INSTALL_LINK}
ENV VITE_ONBOARDING_PROXY_INSTALL_LINK=${ONBOARDING_PROXY_INSTALL_LINK}
ENV VITE_DISALLOWED_IDS=${DISALLOWED_IDS}
ENV VITE_CDN_REPLACEMENTS=${CDN_REPLACEMENTS}
ENV VITE_TURNSTILE_KEY=${TURNSTILE_KEY}
COPY . ./
RUN pnpm run build

26
docker-compose.yaml Normal file
View File

@ -0,0 +1,26 @@
version: "3.8"
services:
movieweb:
build:
context: .
# args:
# PWA_ENABLED: "false"
# GA_ID: ""
# APP_DOMAIN: ""
# OPENSEARCH_ENABLED: "false"
# TMDB_READ_API_KEY: ""
# CORS_PROXY_URL: ""
# DMCA_EMAIL: ""
# NORMAL_ROUTER: "false"
# BACKEND_URL: ""
# HAS_ONBOARDING: "false"
# ONBOARDING_CHROME_EXTENSION_INSTALL_LINK: ""
# ONBOARDING_PROXY_INSTALL_LINK: ""
# DISALLOWED_IDS: ""
# CDN_REPLACEMENTS: ""
# TURNSTILE_KEY: ""
ports:
- "80:80"
restart: unless-stopped

View File

@ -1,6 +1,6 @@
{
"name": "movie-web",
"version": "4.5.0",
"version": "4.5.1",
"private": true,
"homepage": "https://github.com/movie-web/movie-web",
"scripts": {
@ -29,7 +29,7 @@
"@formkit/auto-animate": "^0.8.1",
"@headlessui/react": "^1.7.17",
"@ladjs/country-language": "^1.0.3",
"@movie-web/providers": "^2.2.0",
"@movie-web/providers": "^2.2.2",
"@noble/hashes": "^1.3.3",
"@plasmohq/messaging": "^0.6.1",
"@react-spring/web": "^9.7.3",

View File

@ -22,8 +22,8 @@ dependencies:
specifier: ^1.0.3
version: 1.0.3
'@movie-web/providers':
specifier: ^2.2.0
version: 2.2.0
specifier: ^2.2.2
version: 2.2.2
'@noble/hashes':
specifier: ^1.3.3
version: 1.3.3
@ -1936,8 +1936,8 @@ packages:
engines: {node: '>= 14'}
dev: false
/@movie-web/providers@2.2.0:
resolution: {integrity: sha512-7rKUpLPklwOtS5P2CAeh0P3sPIuYvtkKIgm0kVMp+OsSpKd9IcuYm79bbDrA0MDi3IMGik1W6la9Mzy91+8uYQ==}
/@movie-web/providers@2.2.2:
resolution: {integrity: sha512-pTlErE5bdu+b68mUW2YAKOJKz2hwSx63auGAfTkGQ+0SHDMlCV9QQ8S8O9IoSsvdXps7/YlWJWOMX8pmKuYbPQ==}
dependencies:
cheerio: 1.0.0-rc.12
cookie: 0.6.0

View File

@ -164,6 +164,44 @@
"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",
"title": "Segur?"
},
"extension": {
"back": "Torna",
"linkChrome": "Instal·la l'extensió de Chrome",
"linkFirefox": "Instal·la l'extensió de Firefox",
"notDetectingAction": "Recarrega la pàgina",
"status": {
"disallowedAction": "Activa l'extensió"
},
"submit": "Continua"
},
"proxy": {
"back": "Torna",
"input": {
"errorInvalidUrl": "URL no vàlid",
"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": {
"options": {
"extension": {
"action": "Instal·la l'extensió",
"quality": "Millor qualitat"
},
"proxy": {
"action": "Configura el servidor intermediari"
}
}
}
},
"overlays": {
"close": "Tanca"
},
@ -261,6 +299,10 @@
"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",
"title": "El contingut s'ha eliminat"
},
"failed": {
"badge": "Ha fallat",
"homeButton": "Vés a l'inici",
@ -392,16 +434,31 @@
"label": "Servidor personalitzat",
"urlLabel": "URL del servidor personalitzat"
},
"setup": {
"doSetup": "Configura",
"items": {
"default": "Configuració per defecte",
"extension": "Extensió"
},
"redoSetup": "Reconfigura"
},
"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>",
"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",
"thumbnailLabel": "Genera miniatures",
"title": "Configuració"
},
"reset": "Restableix",
"save": "Desa",
"sidebar": {

View File

@ -174,6 +174,8 @@
"back": "Zpět",
"explainer": "Pomocí rozšíření prohlížeče můžete získat nejlepší streamy, které nabízíme. S pouhou instalací.",
"extensionHelp": "Pokud jste rozšíření nainstalovali, ale nebylo zjištěno. <bold>Otevřete rozšíření pomocí nabídky rozšíření ve vašem prohlížeči</bold> a postupujte podle pokynů na obrazovce.",
"linkChrome": "Instalovat rozšíření pro Chrome",
"linkFirefox": "Instalovat rozšíření pro Firefox",
"status": {
"disallowed": "Rozšíření není pro tuto stránku povoleno",
"disallowedAction": "Povolit rozšíření",

View File

@ -241,6 +241,7 @@
},
"menus": {
"downloads": {
"copyHlsPlaylist": "Copiar enlace de reproducción HLS",
"disclaimer": "Las descargas se realizan directamente desde el proveedor. movie-web no tiene control sobre cómo se proporcionan las descargas.",
"downloadSubtitle": "Descargar subtítulo actual",
"downloadVideo": "Descargar vídeo",

View File

@ -8,11 +8,11 @@
},
"q2": {
"body": "از آنجایی که محتوا ها توسط مووی-وب مدیریت نمی‌شوند، امکان درخواست فیلم وجود ندارد. تمام محتوا از طریق منابع در اینترنت به شما نشان داده می‌شوند.",
"title": "از کجا میتوانم درخواست فیلم کنم؟"
"title": "از کجا میتونم درخواست فیلم کنم؟"
},
"q3": {
"body": "نتایج جستجوی ما توسط پایگاه داده فیلم (TMDB) تامین می‌شوند و نمایش داده می‌شوند، بدون اینکه مهم باشد که منابع ما واقعاً محتوا را داشته باشند یا خیر.",
"title": "نتایج جستجو وجود دارد، اما چرا فیلم پخش نمی‌شود؟"
"title": "جستجو همراه با نتیجه است، اما چرا فیلم پخش نمی‌شود؟"
},
"title": "درباره مووی-وب"
},
@ -25,7 +25,7 @@
"deviceNameLabel": "نام دستگاه",
"deviceNamePlaceholder": "تلفن شخصی",
"generate": {
"description": "جمله امنیتی شما به عنوان نام کاربری و رمز عبور عمل می‌کند. آن را در جایی ذخیره کنید چون برای ورود به آن نیاز دارید",
"description": "عبارت عبور شما به عنوان نام کاربری و رمز عبور عمل می‌کند. آن را در جایی ذخیره کنید چون برای ورود به آن نیاز دارید",
"next": "عبارت عبور امنیتی خود را ذخیره کرده‌ام",
"passphraseFrameLabel": "عبارت عبور امنیتی",
"title": "عبارت عبور امنیتی شما"
@ -34,7 +34,7 @@
"login": {
"description": "لطفاً عبارت عبور امنیتی خود را وارد کنید تا وارد حساب کاربری شوید",
"deviceLengthError": "لطفا نامی برای دستگاه انتخاب کنید",
"passphraseLabel": "جمله امنیتی 12 کلمه‌ای",
"passphraseLabel": "عبارت عبور 12 کلمه‌ای",
"passphrasePlaceholder": "عبارت عبور امنیتی",
"submit": "ورود",
"title": "ورود به حساب کاربری",
@ -118,7 +118,12 @@
"noResults": "چیزی پیدا نکردیم!",
"placeholder": {
"default": "چه می‌خواهید تماشا کنید؟",
"extra": []
"extra": [
"دنبال چی میگردی؟",
"چی تو لیست تماشات داری؟",
"فیلم مورد علاقت چیه؟",
"سریال مورد علاقت چیه؟"
]
},
"sectionTitle": "نتایج جستجو"
},
@ -131,11 +136,15 @@
},
"morning": {
"default": "دوست دارید امروز صبح چه چیزی تماشا کنید؟",
"extra": ["شنیدم فیلم \"پیش از طلوع\" عالیه"]
"extra": [
"شنیدم فیلم \"پیش از طلوع\" عالیه"
]
},
"night": {
"default": "دوست دارید امشب چه چیزی تماشا کنید؟",
"extra": ["خسته اید؟ شنیده ام که \"جن گیر\" فیلم خوبی است."]
"extra": [
"خسته اید؟ شنیده ام که \"جن گیر\" فیلم خوبی است."
]
}
}
},
@ -241,6 +250,7 @@
},
"menus": {
"downloads": {
"copyHlsPlaylist": "لینک HLS لیست پخش را کپی کنید",
"disclaimer": "دانلود ها به طور مستقیم از ارائه دهنده گرفته می شوند. مووی-وب کنترلی بر نحوه ارائه دانلود ها ندارد.",
"downloadSubtitle": "دانلود زیرنویس فعلی",
"downloadVideo": "دانلود ویدیو",
@ -463,7 +473,7 @@
},
"connections": {
"server": {
"description": "اگر میخواهید به یک بک-اند سفارشی برای ذخیره داده متصل شوید، با فعال و ارائه استفاده این لینک ادامه دهید. <0>دستورالعمل ها.</0>",
"description": "اگر میخواید به یک بک-اند سفارشی برای ذخیره داده متصل شوید، با فعال و ارائه استفاده این لینک ادامه دهید. <0>دستورالعمل ها.</0>",
"label": "سرور سفارشی",
"urlLabel": "لینک سرور سفارشی"
},
@ -492,7 +502,7 @@
"title": "اتصالات",
"workers": {
"addButton": "اضافه کردن worker جدید",
"description": "برای ایجاد عملکرد برنامه، تمام ترافیک از طریق پروکسی ها هدایت می شود. اگر میخواهید این کار انجام دهید حتما از worker های خودتان استفاده کنید. <0>دستورالعمل ها.</0>",
"description": "برای ایجاد عملکرد برنامه، تمام ترافیک از طریق پروکسی ها هدایت می شود. اگر میخواید این کار انجام دهید حتما از worker های خودتان استفاده کنید. <0>دستورالعمل ها.</0>",
"emptyState": "هنوز هیچ worker ای وجود ندارد، یکی اضافه کنید",
"label": "استفاده از worker های پروکسی سفارشی",
"urlLabel": "لینک worker ها",

View File

@ -7,12 +7,12 @@
"title": "D'où vient le contenu ?"
},
"q2": {
"body": "Il est impossible de solliciter une émission ou un film car movie-web ne gère aucun contenu. Les sources sur Internet sont utilisées pour consulter tous les contenus.",
"body": "Il est impossible de demander un film ou une série car movie-web ne gère aucun contenu. Le contenu est récupéré en explorant d'autres sites sur Internet.",
"title": "Où puis-je demander une série ou un film ?"
},
"q3": {
"body": "Que nos sources soient propriétaires du contenu ou non, The Movie Database (TMDB) fournit et affiche nos résultats de recherche.",
"title": "Les résultats de la recherche affichent l'émission ou le film, pourquoi ne puis-je pas le lire ?"
"body": "Nos résultats de recherche sont alimentés par The Movie Database (TMDB) et s'affichent indépendamment de la disponibilité réelle du contenu dans nos sources.",
"title": "Les résultats de la recherche affichent la série ou le film, pourquoi ne puis-je pas le lire ?"
},
"title": "À propos de movie-web"
},
@ -27,27 +27,27 @@
"generate": {
"description": "Le nom d'utilisateur et le mot de passe sont obtenus à partir de votre passphrase. Vous devrez la saisir pour accéder à votre compte, alors gardez-la précieusement",
"next": "J'ai sauvegardé ma passphrase",
"passphraseFrameLabel": "Pass phrase",
"passphraseFrameLabel": "Passphrase",
"title": "Votre passphrase"
},
"hasAccount": "Avez-vous déjà un compte? <0>Connectez-vous ici.</0>",
"login": {
"description": "Veuillez fournir votre passphrase pour accéder à votre compte",
"description": "Veuillez saisir votre passphrase pour accéder à votre compte",
"deviceLengthError": "Veuillez saisir un nom d'appareil",
"passphraseLabel": "Passphrase de 12 mots",
"passphrasePlaceholder": "Phrase secrète",
"passphrasePlaceholder": "Passphrase",
"submit": "Se connecter",
"title": "Se connecter à votre compte",
"validationError": "Passphrase incorrecte ou incomplete"
"title": "Connectez-vous à votre compte",
"validationError": "Passphrase incorrecte ou incomplète"
},
"register": {
"information": {
"color1": "Couleur de profile un",
"color2": "Couleur de profile deux",
"header": "Entrez un nom pour votre appareil et choisissez une couleur de profile ainsi qu'une icône d'utilisateur de votre choix",
"color1": "Première couleur de profil",
"color2": "Seconde couleur de profil",
"header": "Veuillez entrer un nom pour votre appareil, choisir une couleur et une icône utilisateur de votre choix",
"icon": "Icône d'utilisateur",
"next": "Prochain",
"title": "Informations sur le compte"
"next": "Suivant",
"title": "Informations du compte"
}
},
"trust": {
@ -55,7 +55,7 @@
"text": "L'avez-vous configuré correctement ?",
"title": "Échec de la connexion au serveur"
},
"host": "Vous vous connectez à <0>{{hostname}}</0> - veuillez confirmer que vous lui faites confiance avant de créer un compte",
"host": "Vous êtes en train de vous connecter à <0>{{hostname}}</0> - veuillez confirmer que vous lui faites confiance avant de créer un compte",
"no": "Retour",
"title": "Avez-vous confiance en ce serveur ?",
"yes": "Je fais confiance à ce serveur"
@ -65,13 +65,13 @@
"invalidData": "Les données ne sont pas valides",
"noMatch": "La passphrase ne correspond pas",
"passphraseLabel": "Votre passphrase de 12 mots",
"recaptchaFailed": "La validation ReCaptcha a échoué",
"recaptchaFailed": "La validation ReCaptcha a échouée",
"register": "Créer un compte",
"title": "Confirmez votre passphrase"
"title": "Resaisissez votre passphrase"
}
},
"errors": {
"badge": "Il s'est cassé",
"badge": "Tout est cassé",
"details": "Détails de l'erreur",
"reloadPage": "Actualiser la page",
"showError": "Afficher les détails de l'erreur",
@ -87,7 +87,7 @@
"dmca": "DMCA",
"github": "GitHub"
},
"tagline": "Cette application de streaming open source vous permet de regarder vos émissions et films préférés."
"tagline": "Regardez vos séries et films préférés avec cette application de streaming open source."
},
"global": {
"name": "movie-web",
@ -95,7 +95,7 @@
"about": "À propos",
"dmca": "DMCA",
"login": "Se connecter",
"onboarding": "Setup",
"onboarding": "Mise en place",
"pagetitle": "{{title}} - movie-web",
"register": "Créer un compte",
"settings": "Paramètres"
@ -106,7 +106,7 @@
"sectionTitle": "Favoris"
},
"continueWatching": {
"sectionTitle": "Continuer le visionnage"
"sectionTitle": "Reprendre la lecture"
},
"mediaList": {
"stopEditing": "Arrêter l'édition"
@ -163,21 +163,21 @@
},
"notFound": {
"badge": "Introuvable",
"goHome": "Retour à l'accueil",
"goHome": "Retourer à 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.",
"title": "Impossible de trouver cette page"
},
"onboarding": {
"defaultConfirm": {
"cancel": "Annuler",
"confirm": "Utiliser la configuration de départ",
"confirm": "Utiliser la configuration par défaut",
"description": "La configuration par défaut n'offre pas les meilleurs flux et peut être insupportablement lente.",
"title": "Es-tu sûr?"
"title": "Êtes-vous sûr ?"
},
"extension": {
"back": "Retour en arrière",
"back": "Revenir en arrière",
"explainer": "En utilisant l'extension de navigateur, vous pouvez obtenir les meilleurs flux que nous avons à offrir. Avec juste une simple installation.",
"explainerIos": "Malheureusement, l'extension web n'est pas prise en charge sur iOS, appuyez sur <bold> Retour en arrière </bold> pour choisir une autre option.",
"explainerIos": "Malheureusement, l'extension web n'est pas prise en charge sur iOS, appuyez sur <bold> Revenir en arrière </bold> pour choisir une autre option.",
"extensionHelp": "Si vous avez installé l'extension mais qu'elle n'est pas détectée, <bold>ouvrez l'extension via le menu des extensions de votre navigateur</bold> et suivez les étapes à l'écran.",
"linkChrome": "Installer l'extension Chrome",
"linkFirefox": "Installer l'extension Firefox",
@ -187,7 +187,7 @@
"disallowed": "L'extension n'est pas activée pour cette page",
"disallowedAction": "Activer l'extension",
"failed": "Échec de la demande de statut",
"loading": "En attendant que vous installiez l'extension",
"loading": "En attente que vous installiez l'extension",
"outdated": "Version d'extension trop ancienne",
"success": "L'extension fonctionne comme prévu!"
},
@ -195,7 +195,7 @@
"title": "Commençons par une extension"
},
"proxy": {
"back": "Retour en arrière",
"back": "Revenir en arrière",
"explainer": "Avec la méthode du proxy, vous pouvez obtenir des flux de bonne qualité en créant un proxy en libre-service.",
"input": {
"errorConnection": "Impossible de se connecter au proxy",
@ -205,18 +205,18 @@
"placeholder": "https://"
},
"link": "Apprenez à créer un proxy",
"submit": "Soumettre le proxy",
"submit": "Valider le proxy",
"title": "Créons un nouveau proxy"
},
"start": {
"explainer": "Pour obtenir les meilleurs flux possibles, vous devrez choisir la méthode de streaming que vous souhaitez utiliser.",
"options": {
"default": {
"text": "Je ne veux pas de flux de bonne qualité,<0 /> <1>use the default setup</1>"
"text": "Je ne veux pas de flux de bonne qualité,<0 /> <1>Utiliser le flux par défaut</1>"
},
"extension": {
"action": "Installer l'extension",
"description": "Installez l'extension de navigateur et accédez aux meilleures sources.",
"description": "Installez l'extension pour navigateur et accédez aux meilleures sources.",
"quality": "Meilleur qualité",
"title": "Extension du navigateur"
},
@ -227,7 +227,7 @@
"title": "Proxy personnalisé"
}
},
"title": "Commençons par vous configurer movie-web"
"title": "Commençons par configurer movie-web"
}
},
"overlays": {
@ -235,14 +235,15 @@
},
"player": {
"back": {
"default": "Retour à la page d'accueil",
"default": "Revenir à la page d'accueil",
"short": "Retour"
},
"casting": {
"enabled": "Casting à l'appareil..."
"enabled": "Casting vers l'appareil..."
},
"menus": {
"downloads": {
"copyHlsPlaylist": "Copier le lien de la playlist HLS",
"disclaimer": "Les téléchargements sont effectués directement par le fournisseur. movie-web n'a aucun contrôle sur la manière dont les téléchargements sont effectués.",
"downloadSubtitle": "Télécharger les sous-titres",
"downloadVideo": "Télécharger la vidéo",
@ -266,9 +267,9 @@
},
"episodes": {
"button": "Épisodes",
"emptyState": "Il n'y a pas d'épisodes dans cette saison, revenez plus tard !",
"emptyState": "Cette saison ne contient aucun épisode, revenez plus tard !",
"episodeBadge": "E{{episode}}",
"loadingError": "Erreur de chargement de la saison",
"loadingError": "Erreur lors du chargement de la saison",
"loadingList": "Chargement...",
"loadingTitle": "Chargement...",
"unairedEpisodes": "Un ou plusieurs épisodes de cette saison ont été désactivés car ils n'ont pas encore été diffusés."
@ -279,7 +280,7 @@
},
"quality": {
"automaticLabel": "Qualité automatique",
"hint": "Vous pouvez essayer de <0>changer de fournisseur</0> pour obtenir différentes options de qualité.",
"hint": "Vous pouvez essayer de <0>changer de source</0> pour obtenir différentes options de qualité.",
"iosNoQuality": "En raison des limitations définies par Apple, la sélection de la qualité n'est pas disponible sur iOS pour cette source. Vous pouvez essayer <0>de passer à une autre source</0> pour obtenir des options de qualité différentes.",
"title": "Qualité"
},
@ -303,7 +304,7 @@
"title": "Pas d'embeds trouvés"
},
"noStream": {
"text": "Cette source n'a pas de flux pour ce film ou cette émission.",
"text": "Cette source n'a pas de flux pour ce film ou cette série.",
"title": "Pas de flux"
},
"title": "Sources",
@ -346,7 +347,7 @@
},
"notFound": {
"badge": "Introuvable",
"homeButton": "Retour à l'accueil",
"homeButton": "Revenir à l'accueil",
"text": "Nous n'avons pas trouvé le média que vous avez demandé. Soit il a été supprimé, soit vous avez modifié l'URL.",
"title": "Impossible de trouver ce média."
}
@ -364,7 +365,7 @@
"errorNetwork": "Une erreur de réseau s'est produite qui a empêché la récupération du média, bien qu'il ait été disponible auparavant.",
"errorNotSupported": "L'objet du media ou de la source du média n'est pas supporté."
},
"homeButton": "Retour à la maison",
"homeButton": "Revenir à l'accueil",
"text": "Une erreur s'est produite lors de la lecture du média. Veuillez réessayer.",
"title": "Oups, c'est coupé !"
},
@ -377,7 +378,7 @@
"notFound": {
"badge": "Non trouvé",
"detailsButton": "Afficher les détails",
"homeButton": "Retour à la maison",
"homeButton": "Revenir à l'accueil",
"text": "Nous avons cherché parmi nos sources et n'avons pas trouvé les médias que vous recherchez ! Nous n'hébergeons pas les médias et n'avons aucun contrôle sur ce qui est disponible. Veuillez cliquer sur \"Afficher les détails\" ci-dessous pour plus d'informations.",
"title": "Nous n'avons pas trouvé cela"
}
@ -409,7 +410,7 @@
"textWithReset": "Echec du chargement de votre profil à partir de votre serveur personnalisé, souhaitez-vous revenir au serveur par défaut ?"
},
"migration": {
"failed": "La migration de vos données a échoué.",
"failed": "La migration de vos données a échouée.",
"inProgress": "Veuillez patienter, nous sommes en train de migrer vos données. Cela ne devrait pas prendre longtemps."
}
},
@ -435,18 +436,18 @@
"devices": {
"deviceNameLabel": "Nom de l'appareil",
"failed": "Échec du chargement des sessions",
"removeDevice": "Enlever",
"removeDevice": "Supprimer",
"title": "Appareils"
},
"profile": {
"finish": "Terminer l'édition",
"firstColor": "Couleur de profil un",
"secondColor": "Couleur de profil deux",
"title": "Éditer la photo de profil",
"firstColor": "Première couleur de profil",
"secondColor": "Seconde couleur de profil",
"title": "Modifier la photo de profil",
"userIcon": "Icône de l'utilisateur"
},
"register": {
"cta": "Commencer",
"cta": "Démarrer",
"text": "Partagez la progression de vos films et séries entre vos appareils et gardez-les synchronisés.",
"title": "Synchroniser au Cloud"
},
@ -470,12 +471,12 @@
"urlLabel": "URL du serveur personnalisé"
},
"setup": {
"doSetup": "Faire la configuration",
"doSetup": "Configurer",
"errorStatus": {
"description": "Il semble qu'un ou plusieurs éléments de cette configuration nécessitent votre attention.",
"title": "Quelque chose nécessite votre attention"
},
"itemError": "Ce paramètre présente un problème. Résolvez le problème en redémarrant la configuration.",
"itemError": "Ce paramètre présente un problème. Résolvez le problème en recommençant la configuration.",
"items": {
"default": "Configuration par défaut",
"extension": "Extension",
@ -488,7 +489,7 @@
},
"unsetStatus": {
"description": "Pour commencer le processus de configuration, veuillez cliquer sur le bouton à droite.",
"title": "Vous n'avez pas fait la configuration"
"title": "Vous n'avez pas encore effectué la configuration"
}
},
"title": "Connexions",
@ -515,9 +516,9 @@
"info": {
"appVersion": "Version de l'application",
"backendUrl": "URL de Backend",
"backendVersion": "Version de la Backend",
"backendVersion": "Version du Backend",
"hostname": "Nom d'hôte",
"insecure": "Insécure",
"insecure": "Non sécurisé",
"notLoggedIn": "Vous n'êtes pas connecté",
"secure": "Sécurisé",
"title": "Informations sur l'application",

View File

@ -1,6 +1,6 @@
{
"about": {
"description": "movie-web è un'applicazione web che cerca per gli stream sull'internet. Il team cerca di usare un approccio per lo più minimalista per usufruire del contenuto.",
"description": "movie-web è un'applicazione web che ricerca dei stream sull'internet. Il team cerca di usare un approccio prevalentemente minimalista per usufruire del contenuto.",
"faqTitle": "Domande comuni",
"q1": {
"body": "movie-web non ospita alcun contento. Quando clicci su qualcosa da guardare, movie-web cerca l'internet per media di vostra scelta (Sull schermata di caricamento e nell tab 'sorgenti video' si può vedere quale sorgente si sta utilizzando). I media non sono mai caricati da movie-web, tutto è attraverso questo meccanismo di ricerca.",
@ -32,12 +32,12 @@
},
"hasAccount": "Hai già un account? <0>Accedi </0>",
"login": {
"description": "Inserisci la tua frase password per accedere al proprio account",
"description": "Inserisci la tua frase password per accedere al vostro account",
"deviceLengthError": "Inserisci un nome per il dispositivo",
"passphraseLabel": "Frase password di 12 parole",
"passphrasePlaceholder": "Frase password",
"submit": "Accedi",
"title": "Accedi al proprio account",
"title": "Accedi al vostro account",
"validationError": "Frase password incompleta o sbagliata"
},
"register": {
@ -61,7 +61,7 @@
"yes": "Mi fido di questo server"
},
"verify": {
"description": "Inserisci il tuo frase password da prima per confermare che è salvato per creare il proprio account",
"description": "Inserisci il tuo frase password da prima per confermare che è salvato per creare un account",
"invalidData": "I dati non sono validi",
"noMatch": "Frase password non corrisponde",
"passphraseLabel": "La propria frase password di 12 parole",
@ -118,7 +118,12 @@
"noResults": "Non abbiamo trovato nulla!",
"placeholder": {
"default": "Cosa vuoi guardare?",
"extra": []
"extra": [
"Cosa vorresti esplorare?",
"Cosa cè nella tua lista di guardare?",
"Cosè il vostro preferito film?",
"Cosè il vostro preferito serie?"
]
},
"sectionTitle": "Risultati della ricerca"
},
@ -131,11 +136,15 @@
},
"morning": {
"default": "Cosa vorresti guardare questa mattina?",
"extra": ["Ho sentito che «Prima Dell'alba» è buono"]
"extra": [
"Ho sentito che «Prima Dell'alba» è buono"
]
},
"night": {
"default": "Cosa vorresti guardare questa sera?",
"extra": ["Stanco? Ho sentito che L'esorciccio è buono."]
"extra": [
"Stanco? Ho sentito che L'esorciccio è buono."
]
}
}
},
@ -241,6 +250,7 @@
},
"menus": {
"downloads": {
"copyHlsPlaylist": "Copia link HLS playlist",
"disclaimer": "I download vengono effettuati direttamente dal provider. movie-web non ha il controllo sulle modalità di fornitura dei download.",
"downloadSubtitle": "Scarica sottotitolo attuale",
"downloadVideo": "Scarica video",
@ -388,9 +398,9 @@
},
"turnstile": {
"description": "Verifica che siate umani completando il Captcha sulla destra. Questo serve a mantenere movie-web sicuro!",
"error": "Impossibile verificare il proprio umanità. Riprova.",
"error": "Impossibile verificare la vostra umanità. Riprova.",
"title": "Dobbiamo verificare che lei sia umano.",
"verifyingHumanity": "verificare il proprio umanità..."
"verifyingHumanity": "Verificare la vostra umanità..."
}
},
"screens": {
@ -399,12 +409,12 @@
"title": "DMCA"
},
"loadingApp": "Caricamento dell'applicazione",
"loadingUser": "Caricamento del proprio profilo",
"loadingUser": "Caricamento del vostro profilo",
"loadingUserError": {
"logout": "Esci",
"reset": "Ripristino del server personalizzato",
"text": "Impossibile caricare il proprio profilo",
"textWithReset": "Impossibile caricare il proprio profile dal server personalizzato, vorresti ripristinare il server predefinito?"
"text": "Impossibile caricare il vostro profilo",
"textWithReset": "Impossibile caricare il vostro profile dal server personalizzato, vorresti ripristinare il server predefinito?"
},
"migration": {
"failed": "Impossible migrare i propri dati.",
@ -423,7 +433,7 @@
"delete": {
"button": "Eliminare l'account",
"confirmButton": "Eliminare l'account",
"confirmDescription": "Sei sicuro che vuoi eliminare il proprio account? Tutti i dati propri andranno persi!",
"confirmDescription": "Sei sicuro che vuoi eliminare il vostro account? Tutti i dati andranno persi!",
"confirmTitle": "Sei sicuro?",
"text": "Questa azione è irreversibile. Tutti i propri dati verranno eliminati e non sarà possibile recuperare nulla.",
"title": "Eliminare l'account"

View File

@ -79,6 +79,7 @@
},
"footer": {
"legal": {
"disclaimer": "अस्वीकरण",
"disclaimerText": "movie-webले कुनै पनि फाइलहरू होस्ट गर्दैन, यसले केवल तेस्रो पक्ष सेवाहरूमा लिङ्क गर्दछ। कानुनी मुद्दाहरू फाइल होस्ट र प्रदायकहरूसँग लिनु पर्छ। चलचित्र-वेब भिडियो प्रदायकहरू द्वारा देखाइएका कुनै पनि मिडिया फाइलहरूको लागि जिम्मेवार छैन।"
},
"links": {
@ -117,7 +118,12 @@
"noResults": "हामीले केहि फेला पार्न सकेनौं!",
"placeholder": {
"default": "तपाईं के हेर्न चाहनुहुन्छ?",
"extra": []
"extra": [
"तपाईं के खोज्न चाहनुहुन्छ?",
"तपाईको वाच लिस्टमा के छ?",
"तपाईलाई मन पर्ने चलचित्र कुन हो?",
"तपाईलाई मनपर्ने श्रृंखला कुन हो?"
]
},
"sectionTitle": "खोज परिणामहरू"
},
@ -130,11 +136,15 @@
},
"morning": {
"default": "तपाई आज बिहान के हेर्न चाहनुहुन्छ?",
"extra": ["Before Sunrise राम्रो छ भन्ने सुन्छु"]
"extra": [
"Before Sunrise राम्रो छ भन्ने सुन्छु"
]
},
"night": {
"default": "तपाईं आज राती के हेर्न चाहनुहुन्छ?",
"extra": ["थकित? मैले सुनेको छु The Exorcist राम्रो छ।"]
"extra": [
"थकित? मैले सुनेको छु The Exorcist राम्रो छ।"
]
}
}
},
@ -174,11 +184,11 @@
"extension": {
"back": "पछाडी जाउ",
"explainer": "ब्राउजर एक्सटेन्सन प्रयोग गरेर, तपाईंले हामीले प्रस्ताव गर्नु पर्ने उत्तम स्ट्रिमहरू प्राप्त गर्न सक्नुहुन्छ। केवल एक साधारण स्थापना संग।",
"explainerIos": "दुर्भाग्यवश, ब्राउजर एक्सटेन्सन IOS मा समर्थित छैन, अर्को विकल्प रोज्न <bold>Go back</bold> थिच्नुहोस्।",
"extensionHelp": "यदि तपाईंले एक्स्टेन्सन स्थापना गर्नुभएको छ तर यो पत्ता लागेको छैन <bold>तपाईंको ब्राउजर विस्तार मेनु मार्फत विस्तार खोल्नुहोस्</bold> र स्क्रिनमा चरणहरू पालना गर्नुहोस्।",
"explainerIos": "दुर्भाग्यवश, ब्राउजर एक्सटेन्सन iOS मा समर्थित छैन, अर्को विकल्प रोज्न <bold>Go back</bold> थिच्नुहोस्।",
"extensionHelp": "यदि तपाईंले एक्स्टेन्सन स्थापना गर्नुभएको छ तर यो पत्ता लागेको छैन, <bold>तपाईंको ब्राउजर विस्तार मेनु मार्फत विस्तार खोल्नुहोस्</bold> र स्क्रिनमा चरणहरू पालना गर्नुहोस्।",
"linkChrome": "क्रोम एक्सटेन्सन स्थापना गर्नुहोस्",
"linkFirefox": "फायरफक्स एक्सटेन्सन स्थापना गर्नुहोस्",
"notDetecting": "chrome मा स्थापित तर देखिदैन? पृष्ठ पुन: लोड गर्ने प्रयास गर्नुहोस्!",
"notDetecting": "Chrome मा स्थापित भयो तर देखिदैन? पृष्ठ पुन: लोड गर्ने प्रयास गर्नुहोस्!",
"notDetectingAction": "पृष्ठ पुन: लोड गर्नुहोस्",
"status": {
"disallowed": "यो पेजको लागि एक्सटेन्सन सक्षम गरिएको छैन",
@ -206,7 +216,7 @@
"title": "एउटा नयाँ प्रोक्सी बनाऔं"
},
"start": {
"explainer": "सम्भावित उत्तम स्ट्रिमहरू प्राप्त गर्न, तपाईंले कुन स्ट्रिमिङ विधि प्रयोग गर्न चाहनुहुन्छ भनेर छनौट गर्न आवश्यक हुनेछ।",
"explainer": "सम्भावित उत्तम स्ट्रिमहरू प्राप्त गर्न, तपाईंले कुन स्ट्रिमिङ विधि प्रयोग गर्न चाहनुहुन्छ भनेर छनौट गर्न आवश्यक हुनेछ।",
"options": {
"default": {
"text": "मलाई राम्रो गुणस्तरका स्ट्रिमहरू चाहिँदैन,<0 /> <1>पूर्वनिर्धारित सेटअप प्रयोग गर्नुहोस्</1>"
@ -240,6 +250,7 @@
},
"menus": {
"downloads": {
"copyHlsPlaylist": "HLS प्लेलिस्ट लिङ्क कपि गर्नुहोस्",
"disclaimer": "डाउनलोडहरू सीधा प्रदायकबाट लिइन्छ। movie-web ले डाउनलोडहरू कसरी प्रदान गरिन्छ भन्नेमा नियन्त्रण गर्दैन।",
"downloadSubtitle": "हालको उपशीर्षक डाउनलोड गर्नुहोस्",
"downloadVideo": "डाउनलोड भिडियो",

View File

@ -241,6 +241,7 @@
},
"menus": {
"downloads": {
"copyHlsPlaylist": "Copiar link da playlist HLS",
"disclaimer": "Os downloads são feitos diretamente do provedor. movie-web não tem controle sobre como os downloads são fornecidos.",
"downloadSubtitle": "Baixar legenda atual",
"downloadVideo": "Baixar vídeo",

View File

@ -243,6 +243,7 @@
},
"menus": {
"downloads": {
"copyHlsPlaylist": "Скопировать ссылку на плейлист HLS",
"disclaimer": "Загрузки осуществляются непосредственно поставщиком. movie-web не контролирует способ предоставления загрузок.",
"downloadSubtitle": "Скачать текущие субтитры",
"downloadVideo": "Скачать видео",

View File

@ -95,6 +95,7 @@
"about": "O projektu",
"dmca": "DMCA",
"login": "Prijava",
"onboarding": "Nastavitev",
"pagetitle": "{{title}} - movie-web",
"register": "Registriraj se",
"settings": "Nastavitve"
@ -117,7 +118,12 @@
"noResults": "Vsebin nismo našli!",
"placeholder": {
"default": "Kaj si želite gledati?",
"extra": []
"extra": [
"Kaj želiš raziskati danes?",
"Kateri fdilm/serijo si boš ogledal/a naslednje?",
"Kateri film ti je najljubši?",
"Katera je tvoja najljubša serija?"
]
},
"sectionTitle": "Rezultati iskanja"
},
@ -130,7 +136,9 @@
},
"morning": {
"default": "Kateri film ali serijo bi si želeli ogledati ob tem jutru?",
"extra": ["Slišala sem, da je film \"Pred sončnim vzhodom\" odličen"]
"extra": [
"Slišala sem, da je film \"Pred sončnim vzhodom\" odličen"
]
},
"night": {
"default": "Kateri film ali serijo bi si želeli ogledati nocoj?",
@ -166,6 +174,69 @@
"message": "Iskali smo povsod: pod preprogo, v omari, za \"proxyjem\", vendar na koncu nismo našli strani, ki jo iščete.",
"title": "Ni bilo mogoče najti te strani"
},
"onboarding": {
"defaultConfirm": {
"cancel": "Prekliči",
"confirm": "Upoeabi privzete nastavitve",
"description": "Privzeta nastavitev nima najboljših pretokov in je lahko neznosno počasna.",
"title": "Si prepričan?"
},
"extension": {
"back": "Nazaj",
"explainer": "Z razširitvijo brskalnika lahko dobite najboljše tokove, ki jih ponujamo. Namestitev je zelo preprosta!",
"explainerIos": "Na žalost razširitev brskalnika ni podprta v sistemu iOS, Pritisnite <bold>Najdi nazaj</bold> in izberite drugo možnost.",
"extensionHelp": "Če ste namestili razširitev, vendar ni zaznana, <bold>odprite razširitev v meniju razširitev brskalnika</bold> in sledite navodilom na zaslonu.",
"linkChrome": "Naloži Chrome razširitev",
"linkFirefox": "Naloži Firefox razširitev",
"notDetecting": "Nameščen v brskalniku Chrome, vendar ga spletno mesto ne zazna? Poskusite znova naložiti stran!",
"notDetectingAction": "Osveži stran",
"status": {
"disallowed": "Razširitev ni omogočena na tej strani",
"disallowedAction": "Omogoči razširitev",
"failed": "Ni uspelo zahtevati statusa",
"loading": "Čakamo, da namestite razširitev",
"outdated": "Verzija razširitve je prestara",
"success": "Razširitev deluje pravilno!"
},
"submit": "Nadaljuj",
"title": "Začnimo z razširitvijo"
},
"proxy": {
"back": "Nazaj",
"explainer": "Z metodo proxy lahko s samopostrežnim proxyjem pridobite zelo kakovostne prenose.",
"input": {
"errorConnection": "Povezava s proxyjem ni uspela",
"errorInvalidUrl": "Ni validen URL",
"errorNotProxy": "Pričakoval proxy, a dobil spletno stran",
"label": "URL proxyja",
"placeholder": "https://"
},
"link": "Kako postavim proxy",
"submit": "Oddaj proxy",
"title": "Naredimo nov proxy"
},
"start": {
"explainer": "Da bi dobili najboljše možne prenose, morate izbrati metodo pretakanja, ki jo želite uporabiti.",
"options": {
"default": {
"text": "Ne želim dobre kakovosti tokov,<0 /> <1>uporabite privzeto nastavitev</1>"
},
"extension": {
"action": "Naloži razširitev",
"description": "Namestite razširitev brskalnika in pridobite dostop do najboljših virov.",
"quality": "Najboljša kvaliteta",
"title": "Razširitev brskalnika"
},
"proxy": {
"action": "Nastavi proxy",
"description": "V samo 5 minutah nastavite proxy in pridobite dostop do odličnih virov.",
"quality": "Dobra kvaliteta",
"title": "Proxy po meri"
}
},
"title": "Pripravimo vas na namestitev s filmskim spletom"
}
},
"overlays": {
"close": "Zapri"
},
@ -179,10 +250,11 @@
},
"menus": {
"downloads": {
"copyHlsPlaylist": "Kopiranje povezave do seznama predvajanja HLS",
"disclaimer": "Prenosi se opravijo neposredno pri ponudniku vsebin. movie-web nima nadzora nad načinom zagotavljanja prenosov.",
"downloadSubtitle": "Prenesi trenutne podnapise",
"downloadVideo": "Prenesi video",
"hlsDisclaimer": "Prenosi se opravijo neposredno pri ponudniku vsebin. movie-web nima nadzora nad načinom zagotavljanja prenosov. Upoštevajte, da prenašate seznam predvajanja tipa \"HLS\"; ta je namenjen uporabnikom, ki poznajo napredno pretakanje večpredstavnostnih vsebin.",
"hlsDisclaimer": "Prenosi se opravijo neposredno pri ponudniku vsebin. movie-web nima nadzora nad načinom zagotavljanja prenosov. Upoštevajte, da prenašate seznam predvajanja tipa \"HLS\" namenjen uporabnikom, ki poznajo napredno pretakanje večpredstavnostnih vsebin.",
"onAndroid": {
"1": "Če želite prenesti v sistemu Android, kliknite gumb za prenos, nato na novi strani <bold>tipnite in držite</bold> videoposnetek ter izberite <bold>shrani</bold>.",
"shortTitle": "Prenesi / Android",
@ -206,7 +278,8 @@
"episodeBadge": "E{{episode}}",
"loadingError": "Napaka pri nalaganju sezone",
"loadingList": "Nalaganje...",
"loadingTitle": "Nalaganje..."
"loadingTitle": "Nalaganje...",
"unairedEpisodes": "Ena ali več epizod v tej sezoni so onemogočene, ker še niso bile predvajane."
},
"playback": {
"speedLabel": "Hitrost predvajanja",
@ -258,6 +331,21 @@
}
},
"metadata": {
"api": {
"text": "Metapodatkov API ni bilo mogoče naložiti, preverite internetno povezavo.",
"title": "Ni uspelo naložiti metapodatkov API"
},
"dmca": {
"badge": "Odstranjeno",
"text": "Ta medij ni več na voljo zaradi obvestila o odstranitvi ali zahtevka za avtorske pravice.",
"title": "Medij je bil odstranjen"
},
"extensionPermission": {
"badge": "Neveljavne pravice dostopa",
"button": "Uporabi razširitev",
"text": "Imate razširitev brskalnika, vendar potrebujemo vaše dovoljenje, da lahko začnemo uporabljati razširitev.",
"title": "Nastavi razširitev brskalnika"
},
"failed": {
"badge": "Neuspešno",
"homeButton": "Domov",
@ -307,6 +395,12 @@
"remaining": "{{timeLeft}} do konca • Konča ob {{timeFinished, datetime}}",
"shortRegular": "{{timeWatched}}",
"shortRemaining": "-{{timeLeft}}"
},
"turnstile": {
"description": "Preverite, ali ste človek, tako da izpolnite Captcha na desni strani. S tem zagotavljamo varnost filmskega spleta!",
"error": "Ni uspelo preveriti vaše človeškosti. Poskusite znova.",
"title": "Preveriti moramo, ali ste človek.",
"verifyingHumanity": "Preverjanje vaše človeškosti..."
}
},
"screens": {
@ -379,20 +473,50 @@
},
"connections": {
"server": {
"description": "Če se želite povezati z zaledjem po meri za hrambo podatkov, to omogočite in navedite URL naslov.",
"description": "Če se želite povezati z zaledjem po meri za hrambo podatkov, to omogočite in navedite URL naslov. <0>Navodila.</0>",
"label": "Strežnik po meri",
"urlLabel": "Naslov strežnika po meri (URL)"
},
"setup": {
"doSetup": "Naredi nastavitev",
"errorStatus": {
"description": "Zdi se, da je treba posvetiti pozornost enemu ali več elementom v tej nastavitvi.",
"title": "Nekaj potrebuje vašo pozornost"
},
"itemError": "S to nastavitvijo je nekaj narobe. Ponovno opravite nastavitev in jo popravite.",
"items": {
"default": "Privzet način",
"extension": "Razširitev",
"proxy": "Proxy po meri"
},
"redoSetup": "Ponovnio izvedi nastavljanje",
"successStatus": {
"description": "Vse stvari so pripravljene, da lahko začnete gledati svoje najljubše medije.",
"title": "Vse je nastavljeno!"
},
"unsetStatus": {
"description": "Kliknite gumb na desni strani, da začnete postopek namestitve.",
"title": "Niste opravili nastavitev"
}
},
"title": "Povezave",
"workers": {
"addButton": "Dodaj novega \"workerja\"",
"description": "Za delovanje aplikacije je ves promet usmerjen prek posredniških strežnikov. To nastavitev omogočite, če želite pripeljati lastne delavce.",
"description": "Za delovanje aplikacije je ves promet usmerjen prek posredniških strežnikov. To nastavitev omogočite, če želite pripeljati lastne delavce. <0>Navodila</0>",
"emptyState": "Niste dodali \"workerja\", dodajte ga spodaj",
"label": "Uporaba posrednikov po meri",
"urlLabel": "Naslov Workerja (URL)",
"urlPlaceholder": "https://"
}
},
"preferences": {
"language": "Jezik",
"languageDescription": "Jezik, ki se uporablja za celotno aplikacijo.",
"thumbnail": "Naloži predoglede",
"thumbnailDescription": "Videoposnetki večinoma nimajo predogledov. To nastavitev lahko omogočite in jih ustvarite sproti, vendar lahko zaradi tega videoposnetek postane počasnejši.",
"thumbnailLabel": "Naloži predoglede",
"title": "Nastavitve"
},
"reset": "Ponastavi",
"save": "Shrani",
"sidebar": {

View File

@ -1,6 +1,19 @@
{
"about": {
"description": "movie-web என்பது இணையத்தில் ஸ்ட்ரீம்களைத் தேடும் ஒரு வலைப் பயன்பாடு ஆகும். உள்ளடக்கத்தை உட்கொள்வதற்கான ஒரு சிறிய அணுகுமுறையை குழு நோக்கமாகக் கொண்டுள்ளது.",
"faqTitle": "பொதுவான கேள்விகள்",
"q1": {
"body": "மூவி வெப் எந்தவொரு பதிவுகளையும் வழங்குவதில்லை. நீங்கள் ஒரு காட்சியை தேர்ந்தெடுத்து காண விரும்பும் போது அதற்கான பதிவை இணையத்தில் உள்ள பல்வேறு தளங்களில் இருந்து தேடி உங்களுக்கு வழங்குகிறது. பதிவுகள் ஒரு போதும் மூவி வெப் மூலம் பதிவேற்றப்படுவது இல்லை. நீங்கள் காணும் அனைத்து காட்சிகளும் தேடு பொறி முறையின் சிறப்பம்சத்தின் மூலமாகவே உங்களுக்கு வழங்கப்படுகிறது.",
"title": "பதிவு எங்கிருந்து வருகிறது?"
},
"q2": {
"body": "ஒரு திரைப்படம் அல்லது தொடரை உங்களால் நேரடியாக கோர முடியாது. மூவி வெப் எந்த ஒரு பதிவுகளையும் நிர்வகிப்பதில்லை. அணைத்து பதிவுகளும் இணையத்தில் உள்ள தளங்களின் வழியாகவே உங்களுக்கு அளிக்கப்படுகின்றது.",
"title": "ஒரு தொடர் அல்லது திரைப்படத்தை நான் எங்கே கோருவது?"
},
"q3": {
"body": "எங்கள் தேடல் முடிவுகள் The Movie Database (TMDB) தரவு தளம் மூலம் வழங்கப்படுகிறது. தேடல் முடிவுகள் தேடலுக்கான பதிவுகளை கட்டாயம் உள்ளடக்கி இருக்கும் என்பதை உறுதியாக கூற இயலாது.",
"title": "தேடல் முடிவுகள் திரைப்படம் அல்லது தொடரை காட்டுகிறது. ஆனால், ஏன் என்னால் அதை பார்க்க முடியவில்லை?"
},
"title": "movie-web பற்றி"
},
"actions": {
@ -8,8 +21,8 @@
"copy": "நகல்"
},
"auth": {
"createAccount": "கணக்கு இல்லையா? <0>கணக்கை உருவாக்குங்கள்</0>",
"deviceNameLabel": "கருவியின் பெயர்",
"createAccount": "கணக்கு இல்லையா? <0>புதிய கணக்கை உருவாக்குங்கள்</0>",
"deviceNameLabel": "சாதனத்தின் பெயர்",
"deviceNamePlaceholder": "எனது கைபேசி",
"generate": {
"description": "தங்கள் கடவுச்சொற்றொடரே தங்களது பயனர் பெயர் மற்றும் கடவுச்சொல். கணக்கினுள் நுழைய அதனை பாதுகாப்பாக வைத்திருங்கள்",
@ -17,51 +30,507 @@
"passphraseFrameLabel": "கடவுச்சொற்றொடர்",
"title": "உங்கள் கடவுச்சொற்றொடர்"
},
"hasAccount": "கணக்கு வைத்துள்ளீரா? <0>புகுபதிகை செய்க </0>",
"hasAccount": "ஏற்கனவே ஒரு கணக்கு உள்ளதா? <0>இங்கே உள்நுழைக. </0>",
"login": {
"description": "உங்கள் கணக்கினுள் புகுபதிய கடவுச்சொற்றொடரை உள்ளிடுக",
"deviceLengthError": "கருவியின் பெயரை உள்ளிடுக",
"description": "உங்கள் கணக்கினுள் உள்நுழைய உங்கள் கடவுச்சொற்றொடரை உள்ளிடுக",
"deviceLengthError": "சாதனத்தின் பெயரை உள்ளிடவும்",
"passphraseLabel": "12-சொல் கடவுச்சொற்றொடர்",
"passphrasePlaceholder": "கடவுச்சொற்றொடர்",
"submit": "புகுபதிகை",
"title": "உங்கள் கணக்கினுள் புகுபதிய",
"title": "உங்கள் கணக்கில் உள்நுழைக",
"validationError": "தவறான அல்லது முழுமையற்ற கடவுச்சொற்றொடர்"
},
"register": {
"information": {
"icon": "பயனர் குறிப்படம்",
"color1": "Profile நிறம் ஒன்று",
"color2": "Profile நிறம் இரண்டு",
"header": "உங்கள் சாதனத்தின் பெயரை உள்ளிட்டு அதற்கான வண்ணம் மற்றும் ஐகானையும் தேர்ந்தெடுக்கவும்",
"icon": "பயனர் icon",
"next": "அடுத்து",
"title": "கணக்கு விவரம்"
}
},
"trust": {
"no": "பின்செல்"
"failed": {
"text": "நீங்கள் அதை சரியாக உள்ளமைத்தீர்களா?",
"title": "சர்வரை தொடர்பு கொள்ள முடியவில்லை"
},
"host": "நீங்கள் <0>{{hostname}}</0> உடன் இணைக்கப்படுகிறீர்கள். கணக்கை உருவாக்கும் முன் சரியான தகவல் தானா எனபதை உறுதி செய்து கொள்ளவும்",
"no": "பின்செல்",
"title": "நீங்கள் இந்த சர்வரை நம்புகிறீர்களா?",
"yes": "நான் இந்த சர்வரை நம்புகிறேன்"
},
"verify": {
"description": "உங்கள் கடவுச்சொற்றொடரைச் சேமித்துள்ளீர்கள் என்பதை உறுதிப்படுத்த உங்கள் கடவுச்சொற்றொடர்களை மீண்டும் இங்கே உள்ளீடு செய்து உங்கள் கணக்கை உருவாக்கிக் கொள்ளுங்கள்",
"invalidData": "தரவு செல்லுபடியாகாது",
"noMatch": "கடவுச்சொற்றொடர்கள் பொருந்தவில்லை",
"passphraseLabel": "உங்களின் 12-சொல் கடவுச்சொற்றொடர்",
"recaptchaFailed": "ReCaptcha சரிபார்ப்பு தோல்வியடைந்தது",
"register": "கணக்கை உருவாக்கு",
"title": "கடவுச்சொற்றொடரை உறுதி செய்க"
}
},
"errors": {
"badge": "சரியாக வேலை செய்யவில்லை",
"details": "பிழை விவரங்கள்",
"reloadPage": "இணையப் பக்கத்தை Reload செய்யவும்",
"showError": "பிழை விவரங்களைக் காட்டு",
"title": "நங்கள் ஒரு பிழையை எதிர் கொண்டு இருக்கிறோம்!"
},
"footer": {
"legal": {
"disclaimer": "பொறுப்பு துறப்பு",
"disclaimerText": "மூவி-வெப் எந்த பதிவுகளையும் தன்னகம் வைத்திருக்கவில்லை, இது மூன்றாம் தரப்பு பதிவுகளை வழங்குபவர்களை இணைக்கிறது. சட்ட சிக்கல்கள் ஏதேனும் இருப்பின் அது பதிவுகளை வழங்குபவரையே சாறும். வீடியோ வழங்குநர்கள் காண்பிக்கும் எந்த மீடியா பதிவுகளுக்கும் மூவி வெப் பொறுப்பாகாது."
},
"links": {
"discord": "Discord",
"dmca": "DMCA",
"github": "GitHub"
},
"tagline": "இந்த ஓப்பன் சோர்ஸ் (Open Source) இணைய தளம் மூலம் உங்களுக்குப் பிடித்த தொடர்களையும் திரைப்படங்களையும் பார்க்கலாம்."
},
"global": {
"name": "மூவி-வெப்",
"pages": {
"about": "தெரிந்து கொள்ள",
"dmca": "DMCA",
"login": "புகுபதிகை",
"onboarding": "அமை",
"pagetitle": "{{title}} - மூவி- வெப்",
"register": "பதிவு",
"settings": "அமைப்புகள்"
}
},
"home": {
"bookmarks": {
"sectionTitle": "குறிப்புகள்"
},
"continueWatching": {
"sectionTitle": "தொடர்ந்து பார்க்க"
},
"mediaList": {
"stopEditing": "திருத்துவதை நிறுத்து"
},
"search": {
"allResults": "மேலும் எங்களிடம் இல்லை!",
"failed": "மீடியாவைக் கண்டறிய முடியவில்லை, மீண்டும் முயலவும்!",
"loading": "Loading...",
"noResults": "எங்களால் எதையும் கண்டுபிடிக்க இயலவில்லை!",
"sectionTitle": "தேடல் முடிவுகள்"
},
"titles": {
"day": {
"default": "மதிய வணக்கம். தற்போது என்ன காண விரும்புகிறீர்கள்?",
"extra": [
"சாகசமாக உணர்கிறீர்களா? ஜுராசிக் பார்க் (Jurassic Park) சரியான தேர்வாக இருக்கலாம்."
]
},
"morning": {
"default": "காலை வணக்கம். தற்போது என்ன காண விரும்புகிறீர்கள்?",
"extra": [
"சூரிய உதயத்திற்கு முன் நல்லது என்று கேள்விப்படுகிறேன்"
]
},
"night": {
"default": "இன்றைய இரவு என்ன காண விரும்புகிறீர்கள்?",
"extra": [
"சோர்வாக உள்ளீர்களா? Exorcist திரைப்படம் காணுங்கள்."
]
}
}
},
"media": {
"episodeDisplay": "S{{season}} E{{episode}}",
"types": {
"movie": "திரைப்படம்",
"show": "காட்சி"
}
},
"navigation": {
"banner": {
"offline": "உங்கள் இணைய இணைப்பைச் சரிபார்க்கவும்"
},
"menu": {
"settings": "அமைப்புகள்"
"about": "எங்களை பற்றி",
"donation": "நன்கொடை",
"logout": "வெளியேறு",
"register": "இணைய கணக்கோடு ஒத்திசை (Sync to cloud)",
"settings": "அமைப்புகள்",
"support": "உதவி மையம்"
}
},
"notFound": {
"badge": "கிடைக்கவில்லை",
"goHome": "முகப்பிற்குச் செல்",
"message": "எங்களால் இயன்றவரை தேடினோம். ஆனால் உங்களுக்கான பக்கத்தை கண்டுபிடிக்க இயலவில்லை.",
"title": "உங்களுக்கான பக்கத்தை கண்டுபிடிக்க இயலவில்லை"
},
"onboarding": {
"defaultConfirm": {
"cancel": "ரத்து செய்",
"confirm": "இயல்புநிலை அமைப்பைப் பயன்படுத்தவும்",
"description": "இயல்புநிலை அமைப்பில் உள்ள தரவுகள் சிறந்த அனுபவத்தை வழங்க உகந்தவை அல்ல. மேலும், இவை மிகவும் மெதுவான இணைய வேகத்தையே கொண்டிருக்கும்.",
"title": "உறுதி செய்யலாமா?"
},
"extension": {
"back": "பின் செல்",
"explainer": "உலாவி நீட்டிப்பு (Browser Extension) வழி உங்களுக்கு சிறந்த காட்சிகளை எங்களால் வழங்க இயலும். மேலும், இந்த நிறுவல் மிகவும் எளிதான வழி முறையாகும்.",
"explainerIos": "துரதிர்ஷ்டவசமாக, உலாவி நீட்டிப்பு iOS இல் ஆதரிக்கப்படவில்லை, மற்றொரு விருப்பத்தைத் தேர்வுசெய்ய <bold>பின் செல்</bold> என்பதை அழுத்தவும்.",
"extensionHelp": "நீங்கள் நீட்டிப்பை நிறுவியிருந்தும் அது கண்டறியப்படவில்லை எனில், <bold>உங்கள் உலாவி நீட்டிப்பு மெனு மூலம் நீட்டிப்பைத் திறந்து</bold> திரையில் உள்ள படிகளைப் பின்பற்றவும்.",
"linkChrome": "Chrome நீட்டிப்பை நிறுவவும்",
"linkFirefox": "Firefox நீட்டிப்பை நிறுவவும்",
"notDetecting": "Chrome இல் நிறுவப்பட்டு விட்டது, ஆனால் தளம் அதைக் கண்டறியவில்லையா? பக்கத்தை மீண்டும் இயக்கி (Reload) முயற்சிக்கவும்!",
"notDetectingAction": "பக்கத்தை மீண்டும் இயக்கு",
"status": {
"disallowed": "இந்தப் பக்கத்திற்கு நீட்டிப்பு இயக்கப்படவில்லை",
"disallowedAction": "நீட்டிப்பை இயக்கு",
"failed": "தற்போதைய நிலையை அறிய இயலவில்லை",
"loading": "நீங்கள் நீட்டிப்பை நிறுவும் வரை காத்திருக்கிறது",
"outdated": "நீட்டிப்பு பதிப்பு மிகவும் பழையது",
"success": "நீட்டிப்பு எதிர்பார்த்தபடி செயல்படுகிறது!"
},
"submit": "தொடரவும்",
"title": "நீட்டிப்பு நிறுவலுடன் ஆரம்பிக்கலாம்"
},
"proxy": {
"back": "பின் செல்",
"explainer": "Proxy முறையில், உங்களின் தனிப்பட்ட Proxy யை உருவாக்குவதன் மூலம் சிறந்த தரமான ஸ்ட்ரீம்களைப் பெறலாம்.",
"input": {
"errorConnection": "Proxy உடன் இணைக்க முடியவில்லை",
"errorInvalidUrl": "சரியான URL அல்ல",
"errorNotProxy": "Proxy க்கு பதில் இணைய தளம் கிடைத்துள்ளது",
"label": "Proxy URL",
"placeholder": "https://"
},
"link": "Proxy எவ்வாறு உருவாக்குவது என்பதை அறிக",
"submit": "Proxy யை சமர்ப்பிக்க",
"title": "ஒரு புதிய Proxy யை உருவாக்குவோம்"
},
"start": {
"explainer": "சிறந்த ஸ்ட்ரீம்களைப் பெற, நீங்கள் எந்த ஸ்ட்ரீமிங் முறையைப் பயன்படுத்த விரும்புகிறீர்கள் என்பதை நீங்கள் தேர்வு செய்ய வேண்டும்.",
"options": {
"default": {
"text": "எனக்கு நல்ல தரமான ஸ்ட்ரீம்கள் வேண்டாம்,<0 /> <1>இயல்புநிலை அமைப்பைப் பயன்படுத்தவும்</1>"
},
"extension": {
"action": "நீட்டிப்பை நிறுவவும்",
"description": "உலாவி நீட்டிப்பை நிறுவி, சிறந்த தரவுகளை பெறுங்கள்.",
"quality": "சிறந்த தரம்",
"title": "உலாவி நீட்டிப்பு"
},
"proxy": {
"action": "Proxy யை அமைக்கவும்",
"description": "வெறும் 5 நிமிடங்களில் Proxy யை அமைத்து, சிறந்த தரவுகளை பெறுங்கள்.",
"quality": "நல்ல தரம்",
"title": "தனிப்பட்ட Proxy"
}
},
"title": "உங்களின் மூவி-வெப் அமைப்பை நிறுவலாம் வாருங்கள்"
}
},
"overlays": {
"close": "மூடு"
},
"player": {
"back": {
"default": "முகப்பிற்கு செல்",
"short": "பின் செல்"
},
"casting": {
"enabled": "சாதனத்தின் வழி திரையிடப்படுகிறது..."
},
"menus": {
"downloads": {
"copyHlsPlaylist": "HLS Playlist link யை காப்பி செய்யவும்",
"disclaimer": "பதிவிறக்கங்கள் வழங்குநரிடமிருந்து நேரடியாக வழங்கப்படுகின்றன. பதிவிறக்கங்கள் எவ்வாறு வழங்கப்படுகின்றன என்பதை மூவி-வெப் கட்டுப்படுத்தாது.",
"downloadSubtitle": "தற்போதைய வசனத்தைப் பதிவிறக்கவும்",
"downloadVideo": "Video வை பதிவிறக்கம் செய்",
"hlsDisclaimer": "பதிவிறக்கங்கள் வழங்குநரிடமிருந்து நேரடியாக எடுக்கப்படுகின்றன. பதிவிறக்கங்கள் எவ்வாறு வழங்கப்படுகின்றன என்பதை மூவி-வெப் கட்டுப்படுத்தவில்லை.<br /><br />நீங்கள் HLS Playlist யை பதிவிறக்குகிறீர்கள் என்பதை நினைவில் கொள்ளவும், <bold> Advanced streaming formats பற்றி நீங்கள் அறிந்து இருக்கவில்லையென்றால் பதிவிறக்கம் செய்ய உங்களை நாங்கள் பரிந்துரைக்கவில்லை. </bold>. வெவ்வேறு வடிவங்கள் அல்லது வெவ்வேறு ஆதாரங்களை முயற்சிக்கவும்.",
"onAndroid": {
"1": "Android இல் பதிவிறக்க, பதிவிறக்க பொத்தானைக் கிளிக் செய்து, புதிய பக்கத்தில், வீடியோ வின் மீது <bold>tap and hold</bold>கிளிக் செய்யவும், பின்னர் <bold>save</bold> என்பதைத் தேர்ந்தெடுக்கவும்.",
"shortTitle": "பதிவிறக்கம் / ஆண்ட்ராய்டு",
"title": "ஆண்ட்ராய்டு இல் பதிவிறங்குகிறது"
},
"onIos": {
"1": "iOS இல் பதிவிறக்க, பதிவிறக்க பொத்தானைக் கிளிக் செய்து, புதிய பக்கத்தில், <bold><ios_share /></bold> என்பதைக் கிளிக் செய்து பிறகு, <bold>Save to Files <ios_files /></bold> கிளிக் செய்யவும்.",
"shortTitle": "பதிவிறக்கு /iOS",
"title": "iOS இல் பதிவிறங்குகிறது"
},
"onPc": {
"1": "கணினியில், Download பொத்தானைக் கிளிக் செய்து வரும் புதிய பக்கத்தில், வீடியோவின் மீது சுட்டியின் வலது பக்கம் கிளிக் (Right Click) செய்து <bold>Save video as</bold> என்பதைத் தேர்ந்தெடுக்கவும்",
"shortTitle": "பதிவிறக்கு / PC",
"title": "கணினியில் பதிவிறங்குகிறது"
},
"title": "பதிவிறக்கு"
},
"episodes": {
"button": "அத்தியாயங்கள்",
"emptyState": "இந்த தொடரில் எந்தவொரு அத்தியாயங்களும் இல்லை. பிறகு பார்க்கவும்!",
"episodeBadge": "E{{episode}}",
"loadingError": "தொடரை திரையிட முடியவில்லை",
"loadingList": "திரையிடப்படுகிறது...",
"loadingTitle": "திரையிடப்படுகிறது...",
"unairedEpisodes": "இந்த Season இல் ஒன்று அல்லது அதற்கு மேற்பட்ட Episode கள் இன்னும் ஒளிபரப்பப்படாததால் அவை முடக்கப்பட்டுள்ளன."
},
"playback": {
"speedLabel": "காட்சி பின்னணி வேகம்",
"title": "காட்சி பின்னணி அமைப்புகள்"
},
"quality": {
"automaticLabel": "இயல்பான தரம்",
"hint": "வெவ்வேறு தர விருப்பங்களைப் பெற <0>switching source</0> தெரிவு செய்யலாம்.",
"iosNoQuality": "Apple நிறுவனத்தின் வரையறுக்கப்பட்ட வரம்புகள் காரணமாக, இந்த Source இன் தரமான தேர்வு iOS இயங்கு தளத்தில் வழங்க இயலவில்லை. வெவ்வேறு தர விருப்பங்களைப் பெற, <0>switching to another source</0> தெரிவு செய்யவும்.",
"title": "தரம்"
},
"settings": {
"downloadItem": "பதிவிறக்கம்",
"enableSubtitles": "வசனங்களை இயக்கு",
"experienceSection": "பார்க்கும் அனுபவம்",
"playbackItem": "காட்சி பின்னணி அமைப்புகள்",
"qualityItem": "தரம்",
"sourceItem": "வீடியோ ஆதாரங்கள்",
"subtitleItem": "வசன அமைப்புகள்",
"videoSection": "வீடியோ அமைப்புகள்"
},
"sources": {
"failed": {
"text": "வீடியோக்களை கண்டுபிடிக்க முயற்சிக்கும் போது பிழை ஏற்பட்டுள்ளது , வேறு ஆதாரங்களை முயற்சிக்கவும்.",
"title": "Scrape செய்ய முடியவில்லை"
},
"noEmbeds": {
"text": "எந்த உட்பொதிவுகளையும் (Embeds) எங்களால் கண்டுபிடிக்க இயலவில்லை, வேறு ஆதாரங்களை முயற்சிக்கவும்.",
"title": "உட்பொதிப்புகள் (Embeds) எதுவும் இல்லை"
},
"noStream": {
"text": "இந்த Source இல் திரைப்படம் அல்லது தொடருக்கான தரவுகள் இல்லை.",
"title": "தரவு கிடைக்கப்பெறவில்லை"
},
"title": "தரவு தளங்கள்",
"unknownOption": "தெரியவில்லை"
},
"subtitles": {
"customChoice": "File இல் இருந்து வசனத்தைத் தேர்ந்தெடுக்கவும்",
"customizeLabel": "தனிப்பயன்முறை",
"offChoice": "அனை",
"settings": {
"backlink": "தனிப்பட்ட வசன வரிகள்",
"delay": "வசன வரி தாமதம்",
"fixCapitals": "Capitals யை சரி செய்யவும்"
},
"title": "வசன வரிகள்",
"unknownLanguage": "தெரியவில்லை"
}
},
"metadata": {
"api": {
"text": "API தரவுகளை காண்பிக்க இயலவில்லை, உங்கள் இணைய இணைப்பைச் சரிபார்க்கவும்.",
"title": "API தரவுகளை காண்பிக்க இயலவில்லை"
},
"dmca": {
"badge": "அகற்றப்பட்டது",
"text": "Copyright Claim காரணமாக இந்த தரவு நீக்கப்பட்டது அல்லது காணக் கிடைக்காது.",
"title": "மீடியா நீக்கப்பட்டது"
},
"extensionPermission": {
"badge": "அனுமதி இல்லை",
"button": "நீட்டிப்பைப் பயன்படுத்தவும்",
"text": "உங்களிடம் உலாவி நீட்டிப்பு உள்ளது, ஆனால் நீட்டிப்பைப் பயன்படுத்தத் தொடங்க உங்கள் அனுமதி தேவை.",
"title": "நீட்டிப்பை உள்ளமைக்கவும்"
},
"failed": {
"badge": "தோல்வியடைந்தது",
"homeButton": "முகப்பிற்கு செல்",
"text": "TMDB இலிருந்து மீடியாவின் தரவுகளை ஏற்ற முடியவில்லை. உங்கள் இணைய இணைப்பில் TMDB செயலிழந்துள்ளதா அல்லது தடுக்கப்பட்டுள்ளதா என்பதைச் சரிபார்க்கவும்.",
"title": "மெட்டா டேட்டாவை ஏற்றுவதில் தோல்வி"
},
"notFound": {
"badge": "கிடைக்கவில்லை",
"homeButton": "முகப்பிற்கு செல்",
"text": "நீங்கள் கோரிய மீடியாவை எங்களால் கண்டுபிடிக்க இயலவில்லை. அது அகற்றப்பட்டிருக்கலாம் அல்லது நீங்கள் URL ஐ சேதப்படுத்தியிருக்கலாம்.",
"title": "மீடியாவைக் கண்டுபிடிக்க முடியவில்லை."
}
},
"nextEpisode": {
"cancel": "ரத்து செய்",
"next": "அடுத்த Episode"
},
"playbackError": {
"badge": "பின்னணி பிழை",
"errors": {
"errorAborted": "பயனரின் கோரிக்கையால் மீடியாவைப் பெறுவது நிறுத்தப்பட்டது.",
"errorDecode": "பயன்படுத்தக்கூடியது என்று முன்பே தீர்மானிக்கப்பட்டிருந்தாலும், மீடியாவை டிகோட் செய்ய முயற்சிக்கும்போது ஏற்பட்ட பிழை காரணமாக இந்த பிழை ஏற்பட்டுள்ளது.",
"errorGenericMedia": "அறியப்படாத மீடியா பிழை ஏற்பட்டுள்ளது.",
"errorNetwork": "மீடியா கிடைத்த போதிலும், சில நெட்ஒர்க் பிழையின் காரணமாக இந்த மீடியா இப்போது கிடைக்கப்பெறவில்லை.",
"errorNotSupported": "மீடியா அல்லது மீடியா வழங்குநர் பொருள் ஆதரிக்கப்படவில்லை."
},
"homeButton": "முகப்பிற்கு செல்",
"text": "மீடியாவை இயக்கும் முயற்சியில் பிழை ஏற்பட்டுள்ளது. தயவு செய்து மீண்டும் முயற்சிக்கவும்.",
"title": "வீடியோவை இயக்க முடியவில்லை!"
},
"scraping": {
"items": {
"failure": "பிழை ஏற்பட்டுள்ளது",
"notFound": "வீடியோ இல்லை",
"pending": "வீடியோக்களை எடுத்து கொண்டிருக்கிறது..."
},
"notFound": {
"badge": "கிடைக்கவில்லை",
"detailsButton": "விவரங்களை காட்டு",
"homeButton": "முகப்பிற்கு செல்",
"text": "எங்கள் வழங்குநர்கள் மூலம் நாங்கள் தேடினோம், நீங்கள் தேடும் மீடியாவைக் கண்டுபிடிக்க இயலவில்லை! நாங்கள் மீடியாவை host செய்யவில்லை, என்ன கிடைக்கும் என்பதில் எங்களுக்கு எந்த கட்டுப்பாடும் இல்லை. மேலும் விவரங்களுக்கு கீழே உள்ள 'விவரங்களைக் காட்டு' என்பதைக் கிளிக் செய்யவும்.",
"title": "அதை எங்களால் கண்டுபிடிக்க முடியவில்லை"
}
},
"time": {
"regular": "{{timeWatched}} / {{duration}}",
"remaining": "{{timeLeft}} மீதமுள்ள நேரம்• {{timeFinished, datetime}} அன்று முடிந்தது",
"shortRegular": "{{timeWatched}}",
"shortRemaining": "-{{timeLeft}}"
},
"turnstile": {
"description": "நீங்கள் மனிதர் தானா என்பதை உறுதி செய்யவும். இது எங்களை பாதுகாப்பாக வைத்திருக்க உதவும்!",
"error": "நீங்கள் மனிதர் என்பதை தான் சரிபார்க்க முடியவில்லை. தயவு செய்து மீண்டும் முயற்சிக்கவும்.",
"title": "நீங்கள் ஒரு மனிதர் என்பதை நாங்கள் உறுதி செய்ய வேண்டும்.",
"verifyingHumanity": "நீங்கள் மனிதர் தானா என்பதை உறுதி செய்கிறோம். காத்திருக்கவும்..."
}
},
"screens": {
"dmca": {
"text": "மூவி-வெப் DMCA தொடர்பு பக்கத்திற்கு வரவேற்கிறோம்! அறிவுசார் சொத்துரிமைகளை நாங்கள் மதிக்கிறோம் மற்றும் எந்தவொரு பதிப்புரிமைக் கவலைகளையும் விரைவாகத் தீர்க்க விரும்புகிறோம். உங்கள் பதிப்புரிமை பெற்ற வேலை எங்கள் தளத்தில் தவறாகப் பயன்படுத்தப்பட்டதாக நீங்கள் நம்பினால், கீழே உள்ள மின்னஞ்சலுக்கு விரிவான DMCA அறிவிப்பை அனுப்பவும். பதிப்புரிமை பெற்ற உள்ளடக்கத்தின் விளக்கம், உங்கள் தொடர்பு விவரங்கள் மற்றும் நல்ல நம்பிக்கையின் அறிக்கையைச் சேர்க்கவும். இந்த விஷயங்களை உடனடியாகத் தீர்ப்பதற்கு நாங்கள் கடமைப்பட்டுள்ளோம், மேலும் மூவி-வெப் படைப்பாற்றல் மற்றும் பதிப்புரிமைகளை மதிக்கும் இடமாக வைத்திருப்பதில் உங்கள் ஒத்துழைப்பைப் பாராட்டுகிறோம்.",
"title": "DMCA"
},
"loadingApp": "பயன்பாட்டை நிறுவுகிறது",
"loadingUser": "Profile லோட் செய்யப்படுகிறது",
"loadingUserError": {
"logout": "வெளியேறு",
"reset": "Custom server யை மீட்டமைக்கவும்",
"text": "Profile லோட் செய்ய முடியவில்லை",
"textWithReset": "உங்கள் Profile Custom Server இல் இருந்து லோட் செய்ய இயலவில்லை. மீண்டும் Default Server க்கு மாற்றியமைக்க விரும்புகிறீர்களா?"
},
"migration": {
"failed": "உங்கள் தரவுகளை புதுப்பிக்க இயலவில்லை.",
"inProgress": "தயவு செய்து காத்திருக்கவும், நாங்கள் உங்கள் தரவுகளை சேமித்து கொண்டு இருக்கிறோம். இதற்கு அதிக நேரம் தேவைப்படாது."
}
},
"settings": {
"account": {
"accountDetails": {
"deviceNameLabel": "சாதனத்தின் பெயர்",
"deviceNamePlaceholder": "தனிப்பட்ட போன்",
"editProfile": "எடிட்",
"logoutButton": "வெளியேறு"
},
"actions": {
"delete": {
"button": "கணக்கை நீக்குக",
"confirmButton": "கணக்கை நீக்குக",
"confirmDescription": "உங்கள் கணக்கை நிச்சயமாக நீக்க விரும்புகிறீர்களா? உங்கள் தரவுகள் அனைத்தும் நீக்கப்படும்!",
"confirmTitle": "நீங்கள் உறுதியா?",
"text": "இந்த நடவடிக்கை திரும்ப பெற முடியாதது. அனைத்து தரவுகளும் நீக்கப்படும் மற்றும் எதையும் மீட்டெடுக்க இயலாது.",
"title": "கணக்கை நீக்குக"
},
"title": "செயல்கள்"
},
"devices": {
"deviceNameLabel": "சாதனத்தின் பெயர்",
"failed": "சாதனத்தின் தரவுகளை காண்பிக்க இயலவில்லை",
"removeDevice": "நீக்கு",
"title": "சாதனங்கள்"
},
"profile": {
"finish": "எடிட்டிங் முடிக்கவும்",
"firstColor": "Profile நிறம் ஒன்று",
"secondColor": "Profile நிறம் இரண்டு",
"title": "Profile படத்தைத் திருத்தவும்",
"userIcon": "பயனர் icon"
},
"register": {
"cta": "தொடங்குங்கள்",
"text": "ஒன்றுக்கு மேற்பட்ட சாதனங்களுக்கு இடையே உங்களின் காட்சி நேரத்தை பகிர்ந்து அவற்றை ஒத்திசைத்து வைக்கவும்.",
"title": "Cloud இல் Sync செய்யவும்"
},
"title": "கணக்கு"
},
"appearance": {
"activeTheme": "செயலில் உள்ளது",
"themes": {
"blue": "நீலம்",
"default": "இயல்பு அமைப்பு",
"gray": "சாம்பல்",
"red": "சிவப்பு",
"teal": "அடர் பச்சை"
},
"title": "தோற்றம்"
},
"connections": {
"server": {
"description": "நீங்கள் உங்கள் தரவுகளை உங்களின் தனிப்பட்ட பின்தளம் (Backend) இல் சேமிக்க விரும்பினால் இதை தெரிவு செய்து URL யை உள்ளீடு செய்யவும்",
"label": "தனிப்பயன் சர்வர்",
"urlLabel": "தனிப்பட்ட சர்வரின் URL"
},
"setup": {
"doSetup": "அமைக்கவும்",
"errorStatus": {
"description": "இந்த அமைப்பில் உள்ள ஒன்று அல்லது அதற்கு மேற்பட்ட உருப்படிகளுக்கு உங்கள் கவனம் தேவை என்று தெரிகிறது.",
"title": "உங்களின் கவனம் இங்கு தேவைப்படுகிறது"
},
"itemError": "இந்த அமைப்பில் ஏதோ தவறு உள்ளது. அதை சரிசெய்ய மீண்டும் அமைவு வழியாக செல்லவும்.",
"items": {
"default": "இயல்புநிலை அமைப்பு",
"extension": "நீட்டிப்பு",
"proxy": "தனிப்பயன் Proxy"
},
"redoSetup": "அமைப்பை மீண்டும் செய்",
"successStatus": {
"description": "உங்களுக்குப் பிடித்த மீடியாவைப் பார்க்கத் தொடங்குவதற்கு அனைத்து விஷயங்களும் இங்கு உள்ளன.",
"title": "அணைத்தும் சரியாக உள்ளது!"
},
"unsetStatus": {
"description": "Setup Process யை தொடங்க வலதுபுறத்தில் உள்ள பொத்தானைக் கிளிக் செய்யவும்.",
"title": "நீங்கள் அமைப்பிற்குச் செல்லவில்லை"
}
},
"title": "இணைப்புகள்",
"workers": {
"addButton": "புதிய worker யை சேர்க்கவும்",
"description": "இந்த பயன்பாடு செயல்பட அனைத்து இணைய போக்குவரத்தும் இந்த proxies வழியாக அனுப்பப்பட உள்ளது. உங்களின் தனிப்பட்ட workers யை உபயோகிக்க இதை தெரிவு செய்யவும். <0>வழிமுறைகள்.</0>",
"emptyState": "எந்தவொரு workers ம் இல்லை. கீழே புதியதாக சேர்க்கவும்",
"label": "Custom proxy workers யை உபயோகப்படுத்த",
"urlLabel": "Worker URL கள்",
"urlPlaceholder": "https://"
}
},
"preferences": {
"language": "பயன்பாட்டின் மொழி",
"languageDescription": "பயன்பாடு முழுமைக்கும் மொழி பயன்படுத்தப்பட்டது.",
"thumbnail": "சிறுபடங்களை உருவாக்கவும்",
"thumbnailDescription": "பெரும்பாலான நேரங்களில், வீடியோக்களில் சிறுபடங்கள் இருக்காது. அவற்றை உருவாக்க இந்த அமைப்பை நீங்கள் இயக்கலாம். ஆனால் அவை உங்கள் வீடியோவை மெதுவாக்கும்.",
"thumbnailLabel": "சிறுபடங்களை உருவாக்கவும்",
"title": "விருப்பங்கள்"
},
"reset": "மீட்டமை",
"save": "சேமி",
"sidebar": {
"info": {
"appVersion": "பயன்பாட்டின் பதிப்பு",
"backendUrl": "பின்தள URL",
"backendVersion": "பின்தள பதிப்பு",
"hostname": "Hostname",
"insecure": "பாதுகாப்பற்றது",
"notLoggedIn": "நீங்கள் உள்நுழையவில்லை",
"secure": "பாதுகாப்பானது",
"title": "பயன்பாட்டின் தகவல்கள்",
"unknownVersion": "தெரியவில்லை",
"userId": "பயனர் ID"
}
},
"subtitles": {
"backgroundLabel": "பின்னணி ஒளிபுகாநிலை (Background opacity)",
"colorLabel": "நிறம்",
"previewQuote": "நான் பயப்படக்கூடாது. பயம் மனதைக் கொல்லும்.",
"textSizeLabel": "எழுத்து அளவு",
"title": "வசன வரிகள்"
},
"unsaved": "உங்களிடம் சேமிக்கப்படாத மாற்றங்கள் உள்ளன"
}
}

View File

@ -123,8 +123,23 @@
"sectionTitle": "Kết quả tìm kiếm"
},
"titles": {
"day": {
"default": "Chiều nay bạn muốn coi gì?",
"extra": [
"Cảm thấy muốn phiêu lưu? Phim Công viên kỷ Jura có thể là sự lựa chọn hoàn hảo cho bạn."
]
},
"morning": {
"default": "Sáng nay bạn muốn coi gì?",
"extra": [
"Tôi nghe nói rằng bộ phim Before Sunrise hay đấy"
]
},
"night": {
"default": "Đêm nay bạn muốn coi gì?"
"default": "Đêm nay bạn muốn coi gì?",
"extra": [
"Cảm thấy mệt? Tôi nghe nói phim The Exorcist hay đấy."
]
}
}
},
@ -143,6 +158,7 @@
"about": "Về chúng tôi",
"donation": "Ủng hộ",
"logout": "Đăng xuất",
"register": "Đồng bộ hóa với đám mây",
"settings": "Cài đặt",
"support": "Hỗ trợ"
}
@ -161,7 +177,8 @@
"title": "Bạn có chắc không?"
},
"extension": {
"back": "Trở lại"
"back": "Trở lại",
"explainer": "Bạn có thể sử dụng các nguồn tốt nhất mà chúng tôi cung cấp bằng cách sử dụng tiện ích mở rộng trình duyệt. Đơn giản chỉ cần cài đặt."
}
},
"player": {

View File

@ -71,11 +71,11 @@
}
},
"errors": {
"badge": "它已损坏",
"badge": "",
"details": "错误细节",
"reloadPage": "刷新页面",
"showError": "显示错误细节",
"title": "我们遇到错误!"
"title": "我们遇到错误!"
},
"footer": {
"legal": {
@ -118,22 +118,33 @@
"noResults": "我们找不到任何结果!",
"placeholder": {
"default": "您想看些什么?",
"extra": []
"extra": [
"您想探索些什么?",
"您的片单上都有啥?",
"您最喜欢的影片是什么?",
"您最喜欢的剧目是什么?"
]
},
"sectionTitle": "搜索结果"
},
"titles": {
"day": {
"default": "您今天下午想看什么?",
"extra": ["想要来场冒险?《侏罗纪公园》可能是最佳选项。"]
"extra": [
"想要来场冒险?《侏罗纪公园》可能是最佳选项。"
]
},
"morning": {
"default": "您今早想看什么?",
"extra": ["我听说《爱在黎明破晓前》不错"]
"extra": [
"我听说《爱在黎明破晓前》不错"
]
},
"night": {
"default": "您今晚想看什么?",
"extra": ["累了?我听说《驱魔人》不错。"]
"extra": [
"累了?我听说《驱魔人》不错。"
]
}
}
},
@ -239,6 +250,7 @@
},
"menus": {
"downloads": {
"copyHlsPlaylist": "复制 HLS 播放列表链接",
"disclaimer": "下载内容是直接从内容提供者获取的。movie-web 无法控制下载内容如何被提供。",
"downloadSubtitle": "下载当前字幕",
"downloadVideo": "下载视频",

View File

@ -6,6 +6,11 @@ import {
import { isAllowedExtensionVersion } from "@/backend/extension/compatibility";
import { ExtensionMakeRequestResponse } from "@/backend/extension/plasmo";
export const RULE_IDS = {
PREPARE_STREAM: 1,
SET_DOMAINS_HLS: 2,
};
// for some reason, about 500 ms is needed after
// page load before the extension starts responding properly
const isExtensionReady = new Promise<void>((resolve) => {

View File

@ -1,6 +1,6 @@
import { Stream } from "@movie-web/providers";
import { setDomainRule } from "@/backend/extension/messaging";
import { RULE_IDS, setDomainRule } from "@/backend/extension/messaging";
function extractDomain(url: string): string | null {
try {
@ -36,7 +36,7 @@ function buildHeadersFromStream(stream: Stream): Record<string, string> {
export async function prepareStream(stream: Stream) {
await setDomainRule({
ruleId: 1,
ruleId: RULE_IDS.PREPARE_STREAM,
targetDomains: extractDomainsFromStream(stream),
requestHeaders: buildHeadersFromStream(stream),
});

View File

@ -1,6 +1,11 @@
import fscreen from "fscreen";
import Hls, { Level } from "hls.js";
import {
RULE_IDS,
isExtensionActiveCached,
setDomainRule,
} from "@/backend/extension/messaging";
import {
DisplayInterface,
DisplayInterfaceEvents,
@ -31,8 +36,8 @@ const levelConversionMap: Record<number, SourceQuality> = {
480: "480",
};
function hlsLevelToQuality(level: Level): SourceQuality | null {
return levelConversionMap[level.height] ?? null;
function hlsLevelToQuality(level?: Level): SourceQuality | null {
return levelConversionMap[level?.height ?? 0] ?? null;
}
function qualityToHlsLevel(quality: SourceQuality): number | null {
@ -144,6 +149,24 @@ export function makeVideoElementDisplayInterface(): DisplayInterface {
if (!hls) return;
reportLevels();
setupQualityForHls();
if (isExtensionActiveCached()) {
hls.on(Hls.Events.LEVEL_LOADED, async (_, data) => {
const chunkUrlsDomains = data.details.fragments.map(
(v) => new URL(v.url).hostname,
);
const chunkUrls = [...new Set(chunkUrlsDomains)];
await setDomainRule({
ruleId: RULE_IDS.SET_DOMAINS_HLS,
targetDomains: chunkUrls,
requestHeaders: {
...src.preferredHeaders,
...src.headers,
},
});
});
}
});
hls.on(Hls.Events.LEVEL_SWITCHED, () => {
if (!hls) return;

View File

@ -28,6 +28,7 @@ export function convertRunoutputToSource(out: {
return {
type: "hls",
url: out.stream.playlist,
headers: out.stream.headers,
preferredHeaders: out.stream.preferredHeaders,
};
}
@ -50,6 +51,7 @@ export function convertRunoutputToSource(out: {
return {
type: "file",
qualities,
headers: out.stream.headers,
preferredHeaders: out.stream.preferredHeaders,
};
}

View File

@ -1,5 +1,5 @@
import classNames from "classnames";
import { useCallback, useEffect, useMemo, useRef } from "react";
import { useCallback, useEffect, useMemo } from "react";
import { useTranslation } from "react-i18next";
import { useAsyncFn } from "react-use";
@ -208,7 +208,13 @@ export function SettingsPage() {
// when backend url gets changed, log the user out first
if (state.backendUrl.changed) {
await logout();
setBackendUrl(state.backendUrl.state);
let url = state.backendUrl.state;
if (url && !url.startsWith("http://") && !url.startsWith("https://")) {
url = `https://${url}`;
}
setBackendUrl(url);
}
}, [
state,

View File

@ -10,6 +10,7 @@ export function Banner(props: {
id: string;
}) {
const [ref] = useRegisterBanner<HTMLDivElement>(props.id);
const hideBanner = useBannerStore((s) => s.hideBanner);
const styles = {
error: "bg-[#C93957] text-white",
};
@ -29,6 +30,12 @@ export function Banner(props: {
<Icon icon={icons[props.type]} />
<div>{props.children}</div>
</div>
<span
className="absolute right-4 hover:cursor-pointer"
onClick={() => hideBanner(props.id, true)}
>
<Icon icon={Icons.X} />
</span>
</div>
</div>
);
@ -38,6 +45,7 @@ export function BannerLocation(props: { location?: string }) {
const { t } = useTranslation();
const isOnline = useBannerStore((s) => s.isOnline);
const setLocation = useBannerStore((s) => s.setLocation);
const ignoredBannerIds = useBannerStore((s) => s.ignoredBannerIds);
const currentLocation = useBannerStore((s) => s.location);
const loc = props.location ?? null;
@ -53,7 +61,7 @@ export function BannerLocation(props: { location?: string }) {
return (
<div>
{!isOnline ? (
{!isOnline && !ignoredBannerIds.includes("offline") ? (
<Banner id="offline" type="error">
{t("navigation.banner.offline")}
</Banner>

View File

@ -13,9 +13,10 @@ interface BannerStore {
isOnline: boolean;
isTurnstile: boolean;
location: string | null;
ignoredBannerIds: string[];
updateHeight(id: string, height: number): void;
showBanner(id: string): void;
hideBanner(id: string): void;
hideBanner(id: string, force?: boolean): void;
setLocation(loc: string | null): void;
updateOnline(isOnline: boolean): void;
updateTurnstile(isTurnstile: boolean): void;
@ -27,6 +28,7 @@ export const useBannerStore = create(
isOnline: true,
isTurnstile: false,
location: null,
ignoredBannerIds: [],
updateOnline(isOnline) {
set((s) => {
s.isOnline = isOnline;
@ -45,14 +47,16 @@ export const useBannerStore = create(
showBanner(id) {
set((s) => {
if (s.banners.find((v) => v.id === id)) return;
if (s.ignoredBannerIds.includes(id)) return;
s.banners.push({
id,
height: 0,
});
});
},
hideBanner(id) {
hideBanner(id, force = false) {
set((s) => {
if (force) s.ignoredBannerIds.push(id);
s.banners = s.banners.filter((v) => v.id !== id);
});
},

View File

@ -14,6 +14,7 @@ export type SourceFileStream = {
export type LoadableSource = {
type: StreamType;
url: string;
headers?: Stream["headers"];
preferredHeaders?: Stream["preferredHeaders"];
};
@ -21,11 +22,13 @@ export type SourceSliceSource =
| {
type: "file";
qualities: Partial<Record<SourceQuality, SourceFileStream>>;
headers?: Stream["headers"];
preferredHeaders?: Stream["preferredHeaders"];
}
| {
type: "hls";
url: string;
headers?: Stream["headers"];
preferredHeaders?: Stream["preferredHeaders"];
};