Merge branch 'dev' into mediasession

This commit is contained in:
William Oldham 2024-03-04 21:42:40 +00:00 committed by GitHub
commit 18e9bdbfc5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
98 changed files with 4075 additions and 728 deletions

View File

@ -60,7 +60,7 @@ representative at an online or offline event.
Instances of abusive, harassing, or otherwise unacceptable behavior may be Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at reported to the community leaders responsible for enforcement at
codeofconduct@movie-web.app. our [Discord](https://movie-web.github.io/links/discord).
All complaints will be reviewed and investigated promptly and fairly. All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the All community leaders are obligated to respect the privacy and security of the

View File

@ -1,6 +1,6 @@
# Contributing Guidelines for movie-web # Contributing Guidelines for movie-web
Thank you for investing your time in contributing to our project! Your contribution will be reflected on [movie-web.app](https://movie-web.app). Thank you for investing your time in contributing to our project! Your contribution will be reflected on all of the community hosted instances that are on the latest version.
Please read our [Code of Conduct](./CODE_OF_CONDUCT.md) to keep our community approachable and respectable. Please read our [Code of Conduct](./CODE_OF_CONDUCT.md) to keep our community approachable and respectable.
@ -33,7 +33,7 @@ There are two places where to request features or report bugs:
### Discord Server ### Discord Server
If you do not have a GitHub account or want to discuss a feature or bug with us before making an issue, you can join our Discord server. If you do not have a GitHub account or want to discuss a feature or bug with us before making an issue, you can join our Discord server.
<a href="https://discord.movie-web.app"><img src="https://discord.com/api/guilds/871713465100816424/widget.png?style=banner2" alt="Discord Server"></a> <a href="https://movie-web.github.io/links/discord"><img src="https://discord.com/api/guilds/871713465100816424/widget.png?style=banner2" alt="Discord Server"></a>
### GitHub Issues ### GitHub Issues
To make a GitHub issue for movie-web, please visit the [new issue page](https://github.com/movie-web/movie-web/issues/new/choose) where you can pick either the "Bug Report" or "Feature Request" template. To make a GitHub issue for movie-web, please visit the [new issue page](https://github.com/movie-web/movie-web/issues/new/choose) where you can pick either the "Bug Report" or "Feature Request" template.
@ -85,7 +85,8 @@ Here are some tips to make sure that your pull requests are :pinched_fingers: fi
### Language Contributions ### Language Contributions
Language contributions help movie-web massively, allowing people worldwide to use our app! Language contributions help movie-web massively, allowing people worldwide to use our app!
We use weblate for crowdsourcing our translations. [Click here to go to our translation tool.](https://weblate.movie-web.app/projects/movie-web/website/) We use Weblate for crowdsourcing our translations. [Click here to go to our translation tool.](https://movie-web.github.io/links/weblate)
1. First make sure you make an account. (click the link above) 1. First make sure you make an account. (click the link above)
2. Click the language you want to help translate, if it's not listed you can click the plus top left to add a new language. 2. Click the language you want to help translate, if it's not listed you can click the plus top left to add a new language.

View File

@ -21,6 +21,6 @@ body:
- type: textarea - type: textarea
id: other-details id: other-details
attributes: attributes:
label: Anything other details to share? label: Any other details to share?
validations: validations:
required: false required: false

9
.github/SECURITY.md vendored
View File

@ -2,12 +2,9 @@
## Supported Versions ## Supported Versions
The movie-web maintainers only support the latest version of movie-web published at https://movie-web.app. The latest version of movie-web is the only version that is supported, as it is the only version that is being actively developed.
Support is not provided for any forks or mirrors of movie-web.
## Reporting a Vulnerability ## Reporting a Vulnerability
There are two ways you can contact the movie-web maintainers to report a vulnerability: You can contact the movie-web maintainers to report a vulnerability:
- Email [security@movie-web.app](mailto:security@movie-web.app) - Report the vulnerability in the [movie-web Discord server](https://movie-web.github.io/links/discord)
- Report the vulnerability in the [movie-web Discord server](https://discord.movie-web.app)

View File

@ -8,6 +8,38 @@ COPY package.json ./
COPY pnpm-lock.yaml ./ COPY pnpm-lock.yaml ./
RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile 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 . ./ COPY . ./
RUN pnpm run build RUN pnpm run build

View File

@ -4,13 +4,13 @@
<p align="center"> <p align="center">
<img src="https://skillicons.dev/icons?i=react,vite,ts" /> <img src="https://skillicons.dev/icons?i=react,vite,ts" />
<br/> <br/>
<a href="https://discord.movie-web.app"><kbd>🔵 discord</kbd></a> <a href="https://movie-web.app"><kbd>🟢 website</kbd></a> <a href="https://movie-web.github.io/links/discord"><kbd>🔵 discord</kbd></a> <a href="https://movie-web.github.io/docs"><kbd>🟢 docs</kbd></a>
</p> </p>
<br/><br/> <br/><br/>
# ⚡What is movie-web? # ⚡What is movie-web?
movie-web is a web app for watching movies easily. Check it out at <a href="https://movie-web.app"><kbd>movie-web.app</kbd></a>. movie-web is a web app for watching movies easily.
This service works by displaying video files from third-party providers inside an intuitive and aesthetic user interface. This service works by displaying video files from third-party providers inside an intuitive and aesthetic user interface.
@ -57,7 +57,7 @@ pnpm build
A simple guide has been written to assist in hosting your own instance of movie-web. Check it out below A simple guide has been written to assist in hosting your own instance of movie-web. Check it out below
|[Selfhosting guide](https://docs.movie-web.app)| |[Selfhosting guide](https://movie-web.github.io/docs)|
|---| |---|
## 🤝 Thanks to all Contributors ## 🤝 Thanks to all Contributors

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,8 +1,8 @@
{ {
"name": "movie-web", "name": "movie-web",
"version": "4.3.3", "version": "4.5.1",
"private": true, "private": true,
"homepage": "https://movie-web.app", "homepage": "https://github.com/movie-web/movie-web",
"scripts": { "scripts": {
"dev": "vite", "dev": "vite",
"build": "vite build", "build": "vite build",
@ -29,7 +29,7 @@
"@formkit/auto-animate": "^0.8.1", "@formkit/auto-animate": "^0.8.1",
"@headlessui/react": "^1.7.17", "@headlessui/react": "^1.7.17",
"@ladjs/country-language": "^1.0.3", "@ladjs/country-language": "^1.0.3",
"@movie-web/providers": "^2.1.1", "@movie-web/providers": "^2.2.2",
"@noble/hashes": "^1.3.3", "@noble/hashes": "^1.3.3",
"@plasmohq/messaging": "^0.6.1", "@plasmohq/messaging": "^0.6.1",
"@react-spring/web": "^9.7.3", "@react-spring/web": "^9.7.3",
@ -123,7 +123,8 @@
"vite-plugin-package-version": "^1.1.0", "vite-plugin-package-version": "^1.1.0",
"vite-plugin-pwa": "^0.17.4", "vite-plugin-pwa": "^0.17.4",
"vite-plugin-static-copy": "^1.0.0", "vite-plugin-static-copy": "^1.0.0",
"vitest": "^1.1.0" "vitest": "^1.1.0",
"workbox-window": "^7.0.0"
}, },
"pnpm": { "pnpm": {
"overrides": { "overrides": {

View File

@ -22,8 +22,8 @@ dependencies:
specifier: ^1.0.3 specifier: ^1.0.3
version: 1.0.3 version: 1.0.3
'@movie-web/providers': '@movie-web/providers':
specifier: ^2.1.1 specifier: ^2.2.2
version: 2.1.1 version: 2.2.2
'@noble/hashes': '@noble/hashes':
specifier: ^1.3.3 specifier: ^1.3.3
version: 1.3.3 version: 1.3.3
@ -268,7 +268,7 @@ devDependencies:
version: 0.5.9(prettier@3.1.1) version: 0.5.9(prettier@3.1.1)
rollup-plugin-visualizer: rollup-plugin-visualizer:
specifier: ^5.11.0 specifier: ^5.11.0
version: 5.11.0(@rollup/wasm-node@4.9.6) version: 5.11.0(@rollup/wasm-node@4.12.0)
tailwind-scrollbar: tailwind-scrollbar:
specifier: ^3.0.5 specifier: ^3.0.5
version: 3.0.5(tailwindcss@3.4.0) version: 3.0.5(tailwindcss@3.4.0)
@ -302,6 +302,9 @@ devDependencies:
vitest: vitest:
specifier: ^1.1.0 specifier: ^1.1.0
version: 1.1.0(@types/node@20.10.5)(jsdom@23.0.1) version: 1.1.0(@types/node@20.10.5)(jsdom@23.0.1)
workbox-window:
specifier: ^7.0.0
version: 7.0.0
packages: packages:
@ -1933,15 +1936,17 @@ packages:
engines: {node: '>= 14'} engines: {node: '>= 14'}
dev: false dev: false
/@movie-web/providers@2.1.1: /@movie-web/providers@2.2.2:
resolution: {integrity: sha512-g2CA/w3YlGw3b3v6yDSgUIUdym4rFs4CzZOo/OlyL4HtsFH9mk182ukt7HYSxgddCEJRjl81LZZc3/pLRIGcMA==} resolution: {integrity: sha512-pTlErE5bdu+b68mUW2YAKOJKz2hwSx63auGAfTkGQ+0SHDMlCV9QQ8S8O9IoSsvdXps7/YlWJWOMX8pmKuYbPQ==}
dependencies: dependencies:
cheerio: 1.0.0-rc.12 cheerio: 1.0.0-rc.12
cookie: 0.6.0
crypto-js: 4.2.0 crypto-js: 4.2.0
form-data: 4.0.0 form-data: 4.0.0
iso-639-1: 3.1.0 iso-639-1: 3.1.0
nanoid: 3.3.7 nanoid: 3.3.7
node-fetch: 2.7.0 node-fetch: 2.7.0
set-cookie-parser: 2.6.0
unpacker: 1.0.1 unpacker: 1.0.1
transitivePeerDependencies: transitivePeerDependencies:
- encoding - encoding
@ -2057,7 +2062,7 @@ packages:
engines: {node: '>=14.0.0'} engines: {node: '>=14.0.0'}
dev: false dev: false
/@rollup/plugin-babel@5.3.1(@babel/core@7.23.6)(@rollup/wasm-node@4.9.6): /@rollup/plugin-babel@5.3.1(@babel/core@7.23.6)(@rollup/wasm-node@4.12.0):
resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==}
engines: {node: '>= 10.0.0'} engines: {node: '>= 10.0.0'}
peerDependencies: peerDependencies:
@ -2070,36 +2075,36 @@ packages:
dependencies: dependencies:
'@babel/core': 7.23.6 '@babel/core': 7.23.6
'@babel/helper-module-imports': 7.22.15 '@babel/helper-module-imports': 7.22.15
'@rollup/pluginutils': 3.1.0(@rollup/wasm-node@4.9.6) '@rollup/pluginutils': 3.1.0(@rollup/wasm-node@4.12.0)
rollup: /@rollup/wasm-node@4.9.6 rollup: /@rollup/wasm-node@4.12.0
dev: true dev: true
/@rollup/plugin-node-resolve@11.2.1(@rollup/wasm-node@4.9.6): /@rollup/plugin-node-resolve@11.2.1(@rollup/wasm-node@4.12.0):
resolution: {integrity: sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==} resolution: {integrity: sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==}
engines: {node: '>= 10.0.0'} engines: {node: '>= 10.0.0'}
peerDependencies: peerDependencies:
rollup: npm:@rollup/wasm-node rollup: npm:@rollup/wasm-node
dependencies: dependencies:
'@rollup/pluginutils': 3.1.0(@rollup/wasm-node@4.9.6) '@rollup/pluginutils': 3.1.0(@rollup/wasm-node@4.12.0)
'@types/resolve': 1.17.1 '@types/resolve': 1.17.1
builtin-modules: 3.3.0 builtin-modules: 3.3.0
deepmerge: 4.3.1 deepmerge: 4.3.1
is-module: 1.0.0 is-module: 1.0.0
resolve: 1.22.4 resolve: 1.22.4
rollup: /@rollup/wasm-node@4.9.6 rollup: /@rollup/wasm-node@4.12.0
dev: true dev: true
/@rollup/plugin-replace@2.4.2(@rollup/wasm-node@4.9.6): /@rollup/plugin-replace@2.4.2(@rollup/wasm-node@4.12.0):
resolution: {integrity: sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==} resolution: {integrity: sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==}
peerDependencies: peerDependencies:
rollup: npm:@rollup/wasm-node rollup: npm:@rollup/wasm-node
dependencies: dependencies:
'@rollup/pluginutils': 3.1.0(@rollup/wasm-node@4.9.6) '@rollup/pluginutils': 3.1.0(@rollup/wasm-node@4.12.0)
magic-string: 0.25.9 magic-string: 0.25.9
rollup: /@rollup/wasm-node@4.9.6 rollup: /@rollup/wasm-node@4.12.0
dev: true dev: true
/@rollup/pluginutils@3.1.0(@rollup/wasm-node@4.9.6): /@rollup/pluginutils@3.1.0(@rollup/wasm-node@4.12.0):
resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==}
engines: {node: '>= 8.0.0'} engines: {node: '>= 8.0.0'}
peerDependencies: peerDependencies:
@ -2108,9 +2113,18 @@ packages:
'@types/estree': 0.0.39 '@types/estree': 0.0.39
estree-walker: 1.0.1 estree-walker: 1.0.1
picomatch: 2.3.1 picomatch: 2.3.1
rollup: /@rollup/wasm-node@4.9.6 rollup: /@rollup/wasm-node@4.12.0
dev: true dev: true
/@rollup/wasm-node@4.12.0:
resolution: {integrity: sha512-sqy3+YvV/uWX6bPZOR5PlEdH6xyMPXoelllRQ/uZ13tzy9f4pXZTbajnoWN8IHHXwTNKPiLzsePLiDEVmkxMNw==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
dependencies:
'@types/estree': 1.0.5
optionalDependencies:
fsevents: 2.3.3
/@rollup/wasm-node@4.9.4: /@rollup/wasm-node@4.9.4:
resolution: {integrity: sha512-K9ZPYMCxP7sBElj5du0En/zpbhXTQxpWI7RlF+8bNpLUozhzg2Pcx2h3cBCzV7xtiUt0dc+pF2Ib3/Sg8R0JMA==} resolution: {integrity: sha512-K9ZPYMCxP7sBElj5du0En/zpbhXTQxpWI7RlF+8bNpLUozhzg2Pcx2h3cBCzV7xtiUt0dc+pF2Ib3/Sg8R0JMA==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'} engines: {node: '>=18.0.0', npm: '>=8.0.0'}
@ -2121,15 +2135,6 @@ packages:
fsevents: 2.3.3 fsevents: 2.3.3
dev: true dev: true
/@rollup/wasm-node@4.9.6:
resolution: {integrity: sha512-B3FpAkroTE6q+MRHzv8XLBgPbxdjJiy5UnduZNQ/4lxeF1JT2O/OAr0JPpXeRG/7zpKm/kdqU/4m6AULhmnSqw==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
dependencies:
'@types/estree': 1.0.5
optionalDependencies:
fsevents: 2.3.3
/@scure/base@1.1.5: /@scure/base@1.1.5:
resolution: {integrity: sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ==} resolution: {integrity: sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ==}
dev: false dev: false
@ -3126,6 +3131,11 @@ packages:
/convert-source-map@2.0.0: /convert-source-map@2.0.0:
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
/cookie@0.6.0:
resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==}
engines: {node: '>= 0.6'}
dev: false
/copy-to-clipboard@3.3.3: /copy-to-clipboard@3.3.3:
resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==}
dependencies: dependencies:
@ -5091,7 +5101,7 @@ packages:
'@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.6) '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.6)
'@babel/types': 7.23.6 '@babel/types': 7.23.6
kleur: 4.1.5 kleur: 4.1.5
rollup: /@rollup/wasm-node@4.9.6 rollup: /@rollup/wasm-node@4.12.0
unplugin: 1.5.1 unplugin: 1.5.1
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@ -6019,7 +6029,7 @@ packages:
glob: 7.2.3 glob: 7.2.3
dev: true dev: true
/rollup-plugin-terser@7.0.2(@rollup/wasm-node@4.9.6): /rollup-plugin-terser@7.0.2(@rollup/wasm-node@4.12.0):
resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==}
deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser
peerDependencies: peerDependencies:
@ -6027,12 +6037,12 @@ packages:
dependencies: dependencies:
'@babel/code-frame': 7.23.5 '@babel/code-frame': 7.23.5
jest-worker: 26.6.2 jest-worker: 26.6.2
rollup: /@rollup/wasm-node@4.9.6 rollup: /@rollup/wasm-node@4.12.0
serialize-javascript: 4.0.0 serialize-javascript: 4.0.0
terser: 5.19.3 terser: 5.19.3
dev: true dev: true
/rollup-plugin-visualizer@5.11.0(@rollup/wasm-node@4.9.6): /rollup-plugin-visualizer@5.11.0(@rollup/wasm-node@4.12.0):
resolution: {integrity: sha512-exM0Ms2SN3AgTzMeW7y46neZQcyLY7eKwWAop1ZoRTCZwyrIRdMMJ6JjToAJbML77X/9N8ZEpmXG4Z/Clb9k8g==} resolution: {integrity: sha512-exM0Ms2SN3AgTzMeW7y46neZQcyLY7eKwWAop1ZoRTCZwyrIRdMMJ6JjToAJbML77X/9N8ZEpmXG4Z/Clb9k8g==}
engines: {node: '>=14'} engines: {node: '>=14'}
hasBin: true hasBin: true
@ -6044,7 +6054,7 @@ packages:
dependencies: dependencies:
open: 8.4.2 open: 8.4.2
picomatch: 2.3.1 picomatch: 2.3.1
rollup: /@rollup/wasm-node@4.9.6 rollup: /@rollup/wasm-node@4.12.0
source-map: 0.7.4 source-map: 0.7.4
yargs: 17.7.2 yargs: 17.7.2
dev: true dev: true
@ -6165,6 +6175,10 @@ packages:
randombytes: 2.1.0 randombytes: 2.1.0
dev: true dev: true
/set-cookie-parser@2.6.0:
resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==}
dev: false
/set-function-name@2.0.1: /set-function-name@2.0.1:
resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
@ -7026,7 +7040,7 @@ packages:
'@types/node': 20.10.5 '@types/node': 20.10.5
esbuild: 0.19.10 esbuild: 0.19.10
postcss: 8.4.32 postcss: 8.4.32
rollup: /@rollup/wasm-node@4.9.6 rollup: /@rollup/wasm-node@4.12.0
optionalDependencies: optionalDependencies:
fsevents: 2.3.3 fsevents: 2.3.3
dev: true dev: true
@ -7288,9 +7302,9 @@ packages:
'@babel/core': 7.23.6 '@babel/core': 7.23.6
'@babel/preset-env': 7.23.6(@babel/core@7.23.6) '@babel/preset-env': 7.23.6(@babel/core@7.23.6)
'@babel/runtime': 7.23.6 '@babel/runtime': 7.23.6
'@rollup/plugin-babel': 5.3.1(@babel/core@7.23.6)(@rollup/wasm-node@4.9.6) '@rollup/plugin-babel': 5.3.1(@babel/core@7.23.6)(@rollup/wasm-node@4.12.0)
'@rollup/plugin-node-resolve': 11.2.1(@rollup/wasm-node@4.9.6) '@rollup/plugin-node-resolve': 11.2.1(@rollup/wasm-node@4.12.0)
'@rollup/plugin-replace': 2.4.2(@rollup/wasm-node@4.9.6) '@rollup/plugin-replace': 2.4.2(@rollup/wasm-node@4.12.0)
'@surma/rollup-plugin-off-main-thread': 2.2.3 '@surma/rollup-plugin-off-main-thread': 2.2.3
ajv: 8.12.0 ajv: 8.12.0
common-tags: 1.8.2 common-tags: 1.8.2
@ -7299,8 +7313,8 @@ packages:
glob: 7.2.3 glob: 7.2.3
lodash: 4.17.21 lodash: 4.17.21
pretty-bytes: 5.6.0 pretty-bytes: 5.6.0
rollup: /@rollup/wasm-node@4.9.6 rollup: /@rollup/wasm-node@4.12.0
rollup-plugin-terser: 7.0.2(@rollup/wasm-node@4.9.6) rollup-plugin-terser: 7.0.2(@rollup/wasm-node@4.12.0)
source-map: 0.8.0-beta.0 source-map: 0.8.0-beta.0
stringify-object: 3.3.0 stringify-object: 3.3.0
strip-comments: 2.0.1 strip-comments: 2.0.1

View File

@ -1,9 +1,10 @@
window.__CONFIG__ = { window.__CONFIG__ = {
// The URL for the CORS proxy, the URL must NOT end with a slash! // The URL for the CORS proxy, the URL must NOT end with a slash!
VITE_CORS_PROXY_URL: "CHANGEME", // If not specified, the onboarding will not allow a "default setup". The user will have to use the extension or set up a proxy themselves
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,
@ -11,9 +12,9 @@ window.__CONFIG__ = {
// Whether to disable hash-based routing, leave this as false if you don't know what this is // Whether to disable hash-based routing, leave this as false if you don't know what this is
VITE_NORMAL_ROUTER: false, VITE_NORMAL_ROUTER: false,
// The backend URL to communicate with, defaults to the movie-web hosted one at backend.movie-web.app // The backend URL to communicate with
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: "",
}; };

View File

@ -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,

View File

@ -95,6 +95,7 @@
"about": "حَول", "about": "حَول",
"dmca": "DMCA", "dmca": "DMCA",
"login": "تسجيل الدخول", "login": "تسجيل الدخول",
"onboarding": "إعداد",
"pagetitle": "\"{{title}} - movie-web\"", "pagetitle": "\"{{title}} - movie-web\"",
"register": "إنشاء حساب", "register": "إنشاء حساب",
"settings": "الإعدادات" "settings": "الإعدادات"
@ -115,27 +116,24 @@
"failed": "تعذر العثور على الوسائط، حاول مجددا!", "failed": "تعذر العثور على الوسائط، حاول مجددا!",
"loading": "جار التحميل...", "loading": "جار التحميل...",
"noResults": "لم نتمكن من العثور على أي شيء!", "noResults": "لم نتمكن من العثور على أي شيء!",
"placeholder": "ماذا تريد أن تشاهد؟", "placeholder": {
"default": "ماذا تريد أن تشاهد؟",
"extra": []
},
"sectionTitle": "نتائج البحث" "sectionTitle": "نتائج البحث"
}, },
"titles": { "titles": {
"day": { "day": {
"default": "ماذا تريد أن تشاهد في هذه الظهيرة؟", "default": "ماذا تريد أن تشاهد في هذه الظهيرة؟",
"extra": [ "extra": ["متشوق للمغامرة؟ قد يكون Jurassic Park خيارًا مثاليًا لك."]
"متشوق للمغامرة؟ قد يكون Jurassic Park خيارًا مثاليًا لك."
]
}, },
"morning": { "morning": {
"default": "ماذا تريد أن تشاهد في هذا الصباح؟", "default": "ماذا تريد أن تشاهد في هذا الصباح؟",
"extra": [ "extra": ["سمعت أن فلم \"Before Sunrise\" جيد"]
"سمعت أن فلم \"Before Sunrise\" جيد"
]
}, },
"night": { "night": {
"default": "ماذا تريد أن تشاهد في هذه الليلة؟", "default": "ماذا تريد أن تشاهد في هذه الليلة؟",
"extra": [ "extra": ["مُرهَق؟ سمعت أن فيلم \"The Exorcist\" جيد."]
"مُرهَق؟ سمعت أن فيلم \"The Exorcist\" جيد."
]
} }
} }
}, },
@ -143,7 +141,7 @@
"episodeDisplay": "\"S{{season}} E{{episode}}\"", "episodeDisplay": "\"S{{season}} E{{episode}}\"",
"types": { "types": {
"movie": "فِلم", "movie": "فِلم",
"show": "سِلسلة" "show": "مُسلسل"
} }
}, },
"navigation": { "navigation": {
@ -165,6 +163,69 @@
"message": "بحثنا في كل مكان: في الخزانة وحتى تحت الصناديق، ومع ذلك لم نعثر عن الصفحة التي طلبتَها.", "message": "بحثنا في كل مكان: في الخزانة وحتى تحت الصناديق، ومع ذلك لم نعثر عن الصفحة التي طلبتَها.",
"title": "تعذر العثور على هذه الصفحة" "title": "تعذر العثور على هذه الصفحة"
}, },
"onboarding": {
"defaultConfirm": {
"cancel": "إلغاء",
"confirm": "استخدم الإعداد الإفتراضي",
"description": "لا يحتوي الإعداد الافتراضي على أفضل التدفقات ويمكن أن يكون بطيئًا بشكل لا يحتمل.",
"title": "هل انت متأكد؟"
},
"extension": {
"back": "ارجع",
"explainer": "باستخدام إضافةالمتصفح، يمكنك الحصول على أفضل البثوث التي نقدمها. فقط ثبت الإضافة.",
"explainerIos": "لسوء الحظ، لا يتم دعم الإضافة على iOS، اضغط<bold>ارجع </bold> لاختيار خيار آخر.",
"extensionHelp": "إذا قمت بتثبيت الإضافة ولكن لم يتم اكتشافه، <bold> افتح الإضافةمن خلال قائمة إضافات المتصفح </bold> واتبع الخطوات على الشاشة.",
"linkChrome": "تثبيت إضافة Chrome",
"linkFirefox": "تثبيت إضافة Firefox",
"notDetecting": "تم تثبيته على Chrome، لكن الموقع لا يكتشفه ؟ حاول إعادة تحميل الصفحة!",
"notDetectingAction": "إعادة تحميل الصفحة",
"status": {
"disallowed": "الإضافة غير مفعلة لهذه الصفحة",
"disallowedAction": "فعل الإضافة",
"failed": "فشل ارسل الحالة",
"loading": "في انتظارك لتثبيت الإضافة",
"outdated": "إصدار الإضافة قديم",
"success": "الإضافة تعمل كما هو متوقع!"
},
"submit": "أكمال",
"title": "لنبدا بإضافة"
},
"proxy": {
"back": "ارجع",
"explainer": "باستخدام طريقة الوكيل، يمكنك الحصول على بثوث عالية الجودة من خلال عمل وكيل خدمة ذاتية.",
"input": {
"errorConnection": "لايمكن الاتصال بالوكيل",
"errorInvalidUrl": "رابط غير صالح",
"errorNotProxy": "توقعنا وكيل ولكن حصلنا على موقع",
"label": "رابط الوكيل",
"placeholder": "https://"
},
"link": "تعلم كيف تصنع وكيل",
"submit": "تأكيد الوكيل",
"title": "دعنا نصنع وكيل جديد"
},
"start": {
"explainer": "للحصول على أفضل بثوث ممكنة، ستحتاج إلى اختيار طريقة البث التي تريد استخدامها.",
"options": {
"default": {
"text": "لا أريد بثوث ذات جودة جيدة، < 0/> < 1 > استخدم الإعداد الافتراضي </1 >"
},
"extension": {
"action": "ثبت الإضافة",
"description": "قم بتثبيت إضافة المتصفح والوصول إلى أفضل المصادر.",
"quality": "افضل جودة",
"title": "إضافة المتصفح"
},
"proxy": {
"action": "إعداد وكيل",
"description": "قم بإعداد وكيل في 5 دقائق فقط والوصول إلى مصادر رائعة.",
"quality": "جودة جيدة",
"title": "وكيل مخصص"
}
},
"title": "دعونا نحصل على إعداد مع movie-web"
}
},
"overlays": { "overlays": {
"close": "إغلاق" "close": "إغلاق"
}, },
@ -179,10 +240,9 @@
"menus": { "menus": {
"downloads": { "downloads": {
"disclaimer": "يتم أخذ التنزيلات مباشرةً من قبل مقدم الخدمة. movie-web لاسيطرة له على كيفية توفير تلك التنزيلات.", "disclaimer": "يتم أخذ التنزيلات مباشرةً من قبل مقدم الخدمة. movie-web لاسيطرة له على كيفية توفير تلك التنزيلات.",
"downloadPlaylist": "تنزيل قائمة التشغيل",
"downloadSubtitle": "تنزيل مقاطع الترجمة الحالية", "downloadSubtitle": "تنزيل مقاطع الترجمة الحالية",
"downloadVideo": "تنزيل الفيديو", "downloadVideo": "تنزيل الفيديو",
"hlsDisclaimer": "يتم أخذ التنزيلات مباشرة من مزود الخدمة. movie-web ليس المتحكم في كيفية توفير التنزيلات. يرجى ملاحظة أنك تقوم بتنزيل قائمة تشغيل HLS، وهذا أمر يتطلب ان تكون على دراية بتقنيات متقدمة لبث الوسائط.", "hlsDisclaimer": "يتم أخذ التنزيلات مباشرة من المزود. لا تتحكم movie-web في كيفية توفير التنزيلات.<br /><br />يرجى ملاحظة أنك تقوم بتنزيل قائمة تشغيل HLS،<bold> لا ينصح بالتنزيل إذا لم تكن على دراية بتنسيقات البث المتقدمة</bold>. جرب مصادر مختلفة لتنسيقات مختلفة.",
"onAndroid": { "onAndroid": {
"1": "للتنزيل على أندرويد، أنقر زر التنزيل وفي الصفحة الموالية <bold>إضغط باستمرار</bold> على الفيديو، وبعدها اختر <bold>حفظ</bold>.", "1": "للتنزيل على أندرويد، أنقر زر التنزيل وفي الصفحة الموالية <bold>إضغط باستمرار</bold> على الفيديو، وبعدها اختر <bold>حفظ</bold>.",
"shortTitle": "تنزيل / Android", "shortTitle": "تنزيل / Android",
@ -259,6 +319,21 @@
} }
}, },
"metadata": { "metadata": {
"api": {
"text": "لا يمكن تحميل البيانات الوصفية لواجهة برمجة التطبيقات، يرجى التحقق من اتصال الإنترنت الخاص بك.",
"title": "فشل في تحميل البيانات الوصفية لواجهة برمجة التطبيقات"
},
"dmca": {
"badge": "حذف",
"text": "لم تعد هذه الوسائط متاحة بسبب إشعار الإزالة أو مطالبة حقوق النشر.",
"title": "الوسائط محذوفه"
},
"extensionPermission": {
"badge": "التصريح مفقود",
"button": "استخدم الإضافة",
"text": "الإضافة مثبتة, ولكن تحتاج الى تصريح للبدء إستخدام الإضافة.",
"title": "تعديل الإضافة"
},
"failed": { "failed": {
"badge": "فشل", "badge": "فشل",
"homeButton": "عُدْ للصفحة الرئيسية", "homeButton": "عُدْ للصفحة الرئيسية",
@ -308,6 +383,12 @@
"remaining": "باقٍ {{timeLeft}} • سينتهي مع {{timeFinished, datetime}}", "remaining": "باقٍ {{timeLeft}} • سينتهي مع {{timeFinished, datetime}}",
"shortRegular": "{{timeWatched}}", "shortRegular": "{{timeWatched}}",
"shortRemaining": "-{{timeLeft}}" "shortRemaining": "-{{timeLeft}}"
},
"turnstile": {
"description": "الرجاء التحقق اذا كنت إنسان بإكمال الكابتشا على يمين. هذا لاستمرارية movie-web آمن!",
"error": "فشل التحقق. الرجاء إعادة المحاولة.",
"title": "نريد التحقق انك لست روبوت.",
"verifyingHumanity": "التحقق انك لست روبوت.."
} }
}, },
"screens": { "screens": {
@ -380,20 +461,50 @@
}, },
"connections": { "connections": {
"server": { "server": {
"description": "إذا كنت ترغب في الاتصال بخادم خلفي مخصص لتخزين بياناتك، قم بتفعيل هذا ووفر الرابط.", "description": "إذا كنت ترغب في الاتصال بخادم خلفي مخصص لتخزين بياناتك، قم بتفعيل هذا ووفر الرابط.<0>Instructions.</0>",
"label": "خادم مُخصص", "label": "خادم مُخصص",
"urlLabel": "رابط الخادم المخصص" "urlLabel": "رابط الخادم المخصص"
}, },
"setup": {
"doSetup": "إعداد",
"errorStatus": {
"description": "يبدو أن عنصرًا أو أكثر في هذا الإعداد يحتاج إلى انتباهك.",
"title": "شيء ما يحتاج إلى انتباهك"
},
"itemError": "هناك شيء خاطئ في هذا الإعداد. اذهب من خلال إعداد مرة أخرى لإصلاحه.",
"items": {
"default": "الإعداد الافتراضي",
"extension": "اضافة",
"proxy": "وكيل مخصص"
},
"redoSetup": "إرجاع الإعداد",
"successStatus": {
"description": "كل شيء موجود لبدء مشاهدة أفلامك ومسلسلاتك المفضلة.",
"title": "تم إعداد كل شيء!"
},
"unsetStatus": {
"description": "يرجى النقر على الزر إلى اليمين لبدء عملية الإعداد.",
"title": "أنت لم تمر من خلال الإعداد"
}
},
"title": "الاتصالات", "title": "الاتصالات",
"workers": { "workers": {
"addButton": "إضافة وكيل جديد", "addButton": "إضافة وكيل جديد",
"description": "لتشغيل التطبيق، يتم توجيه كل الاتصالات عبر وكلاء البروكسي. قم بتمكين هذا إذا كنت ترغب في استخدام خوادم العمل الخاصة بك.", "description": "لتشغيل التطبيق، يتم توجيه كل الاتصالات عبر وكلاء البروكسي. قم بتمكين هذا إذا كنت ترغب في استخدام خوادم العمل الخاصة بك.<0>Instructions.</0>",
"emptyState": "لا يوجد وكلاء حتى الآن، أضف واحدًا أدناه", "emptyState": "لا يوجد وكلاء حتى الآن، أضف واحدًا أدناه",
"label": "استخدام وكلاء مُخصصين", "label": "استخدام وكلاء مُخصصين",
"urlLabel": "روابط الوكلاء", "urlLabel": "روابط الوكلاء",
"urlPlaceholder": "https://" "urlPlaceholder": "https://"
} }
}, },
"preferences": {
"language": "لغة الموقع",
"languageDescription": "تم تطبيق اللغة على الموقع.",
"thumbnail": "إنشاء صور مصغرة",
"thumbnailDescription": "في معظم الأوقات، لا تحتوي مقاطع الفيديو على صور مصغرة. يمكنك تمكين هذا الإعداد من توليدها بسرعة ولكن يمكنها جعل الفيديو الخاص بك أبطأ.",
"thumbnailLabel": "إنشاء صور مصغرة",
"title": "تفضيلات"
},
"reset": "إعادة تعيين", "reset": "إعادة تعيين",
"save": "حفظ", "save": "حفظ",
"sidebar": { "sidebar": {

View File

@ -26,25 +26,25 @@
"deviceNamePlaceholder": "Личен телефон", "deviceNamePlaceholder": "Личен телефон",
"generate": { "generate": {
"description": "Вашата паролна фраза служи като потребителско име и парола. Уверете се, че я пазите в безопасност, тъй като ще трябва да я въведете, за да влезете в своя акаунт.", "description": "Вашата паролна фраза служи като потребителско име и парола. Уверете се, че я пазите в безопасност, тъй като ще трябва да я въведете, за да влезете в своя акаунт.",
"next": "Запазих паролната си фраза.", "next": "Запазих паролната си фраза",
"passphraseFrameLabel": "Паролна фраза", "passphraseFrameLabel": "Паролна фраза",
"title": "Вашата паролна фраза" "title": "Вашата паролна фраза"
}, },
"hasAccount": "Вече имате акаунт? <0>Влезте тук.</0>", "hasAccount": "Вече имате акаунт? <0>Влезте тук.</0>",
"login": { "login": {
"description": "Моля, въведете своята паролна фраза, за да влезете в своя акаунт.", "description": "Моля, въведете своята паролна фраза, за да влезете в своя акаунт",
"deviceLengthError": "Моля, въведете името на устройството.", "deviceLengthError": "Моля, въведете името на устройството",
"passphraseLabel": "12-думена паролна фраза", "passphraseLabel": "12-думена паролна фраза",
"passphrasePlaceholder": "Паролна фраза", "passphrasePlaceholder": "Паролна фраза",
"submit": "Вход", "submit": "Вход",
"title": "Влезте в своя акаунт.", "title": "Влезте в своя акаунт",
"validationError": "Некоректна или непълна паролна фраза." "validationError": "Некоректна или непълна паролна фраза"
}, },
"register": { "register": {
"information": { "information": {
"color1": "Профилен цвят едно", "color1": "Профилен цвят едно",
"color2": "Профилен цвят две", "color2": "Профилен цвят две",
"header": "Въведете име за устройството си и изберете цветове и потребителска икона по ваш избор.", "header": "Въведете име за устройството си и изберете цветове и потребителска икона по ваш избор",
"icon": "Потребителска икона", "icon": "Потребителска икона",
"next": "Напред", "next": "Напред",
"title": "Информация за акаунта" "title": "Информация за акаунта"
@ -55,25 +55,25 @@
"text": "Конфигурирахте ли го правилно?", "text": "Конфигурирахте ли го правилно?",
"title": "Неуспешно свързване със сървъра" "title": "Неуспешно свързване със сървъра"
}, },
"host": "Вие се свързвате към <0>{{hostname}}</0> - моля, потвърдете, че му вярвате, преди да създадете акаунт.", "host": "Вие се свързвате към <0>{{hostname}}</0> - моля, потвърдете, че му вярвате, преди да създадете акаунт",
"no": "Върнете се назад", "no": "Върнете се назад",
"title": "Вярвате ли на този сървър?", "title": "Вярвате ли на този сървър?",
"yes": "Вярвам на този сървър." "yes": "Вярвам на този сървър"
}, },
"verify": { "verify": {
"description": "Моля, въведете паролната фраза от по-рано, за да потвърдите, че сте я запазили, и за да създадете своя акаунт.", "description": "Моля, въведете паролната фраза от по-рано, за да потвърдите, че сте я запазили, и за да създадете своя акаунт",
"invalidData": "Данните не са валидни.", "invalidData": "Данните не са валидни",
"noMatch": "Паролната фраза не съвпада.", "noMatch": "Паролната фраза не съвпада",
"passphraseLabel": "Вашата 12-думена паролна фраза", "passphraseLabel": "Вашата 12-думена паролна фраза",
"recaptchaFailed": "Валидацията на ReCaptcha не беше успешна.", "recaptchaFailed": "Валидацията на ReCaptcha не беше успешна",
"register": "Създаване на акаунт", "register": "Създаване на акаунт",
"title": "Потвърдете вашата паролна фраза." "title": "Потвърдете вашата паролна фраза"
} }
}, },
"errors": { "errors": {
"badge": "Счупи се", "badge": "Счупи се",
"details": "Детайли за грешката", "details": "Детайли за грешката",
"reloadPage": "Презаредете страницата.", "reloadPage": "Презаредете страницата",
"showError": "Покажи детайлите за грешката", "showError": "Покажи детайлите за грешката",
"title": "Сблъскахме се с грешка!" "title": "Сблъскахме се с грешка!"
}, },
@ -115,7 +115,10 @@
"failed": "Неуспешно намиране на медия, опитайте отново!", "failed": "Неуспешно намиране на медия, опитайте отново!",
"loading": "Зареждане...", "loading": "Зареждане...",
"noResults": "Не успяхме да намерим нищо!", "noResults": "Не успяхме да намерим нищо!",
"placeholder": "Какво искате да гледате?", "placeholder": {
"default": "Какво искате да гледате?",
"extra": []
},
"sectionTitle": "Резултати от търсенето" "sectionTitle": "Резултати от търсенето"
}, },
"titles": { "titles": {
@ -127,15 +130,11 @@
}, },
"morning": { "morning": {
"default": "Какво бихте искали да гледате тази сутрин?", "default": "Какво бихте искали да гледате тази сутрин?",
"extra": [ "extra": ["Чух, че Before Sunrise е добър"]
"Чух, че Before Sunrise е добър"
]
}, },
"night": { "night": {
"default": "Какво бихте искали да гледате тази вечер?", "default": "Какво бихте искали да гледате тази вечер?",
"extra": [ "extra": ["Изморен? Чух, че Екзорсистът е добър."]
"Изморен? Чух, че Екзорсистът е добър."
]
} }
} }
}, },
@ -179,7 +178,6 @@
"menus": { "menus": {
"downloads": { "downloads": {
"disclaimer": "Изтеглянията се вземат директно от доставчика. movie-web няма контрол върху това как се предоставят изтеглянията.", "disclaimer": "Изтеглянията се вземат директно от доставчика. movie-web няма контрол върху това как се предоставят изтеглянията.",
"downloadPlaylist": "Изтегляне на плейлист",
"downloadSubtitle": "Изтеглете текущите субтитри", "downloadSubtitle": "Изтеглете текущите субтитри",
"downloadVideo": "Изтегляне на видео", "downloadVideo": "Изтегляне на видео",
"hlsDisclaimer": "Изтеглянията се вземат директно от доставчика. movie-web няма контрол върху това как се предоставят изтеглянията. Моля, имайте предвид, че изтегляте HLS плейлист, това е предназначено за потребители, запознати с усъвършенствано мултимедийно поточно предаване.", "hlsDisclaimer": "Изтеглянията се вземат директно от доставчика. movie-web няма контрол върху това как се предоставят изтеглянията. Моля, имайте предвид, че изтегляте HLS плейлист, това е предназначено за потребители, запознати с усъвършенствано мултимедийно поточно предаване.",

View File

@ -115,27 +115,24 @@
"failed": "মিডিয়া খুঁজে পেতে ব্যর্থ, আবার চেষ্টা করুন!", "failed": "মিডিয়া খুঁজে পেতে ব্যর্থ, আবার চেষ্টা করুন!",
"loading": "লোড হচ্ছে..।", "loading": "লোড হচ্ছে..।",
"noResults": "আমরা কিছুই খুঁজে পাইনি!", "noResults": "আমরা কিছুই খুঁজে পাইনি!",
"placeholder": "আপনি কি দেখতে চান?", "placeholder": {
"default": "আপনি কি দেখতে চান?",
"extra": []
},
"sectionTitle": "অনুসন্ধান ফলাফল" "sectionTitle": "অনুসন্ধান ফলাফল"
}, },
"titles": { "titles": {
"day": { "day": {
"default": "আপনি এই বিকেলে কি দেখতে চান?", "default": "আপনি এই বিকেলে কি দেখতে চান?",
"extra": [ "extra": ["দুঃসাহসিক বোধ করছেন? জুরাসিক পার্ক নিখুঁত পছন্দ হতে পারে।"]
"দুঃসাহসিক বোধ করছেন? জুরাসিক পার্ক নিখুঁত পছন্দ হতে পারে।"
]
}, },
"morning": { "morning": {
"default": "আপনি এই সকালে কি দেখতে চান?", "default": "আপনি এই সকালে কি দেখতে চান?",
"extra": [ "extra": ["শুনি সূর্যোদয়ের আগে ভালো"]
"শুনি সূর্যোদয়ের আগে ভালো"
]
}, },
"night": { "night": {
"default": "আপনি আজ রাতে কি দেখতে চান?", "default": "আপনি আজ রাতে কি দেখতে চান?",
"extra": [ "extra": ["ক্লান্ত? আমি শুনেছি দ্য এক্সরসিস্ট ভাল।"]
"ক্লান্ত? আমি শুনেছি দ্য এক্সরসিস্ট ভাল।"
]
} }
} }
}, },
@ -179,7 +176,6 @@
"menus": { "menus": {
"downloads": { "downloads": {
"disclaimer": "ডাউনলোড সরাসরি প্রদানকারী থেকে নেওয়া হয়. কিভাবে ডাউনলোড দেওয়া হয় তার উপর মুভি-ওয়েবের নিয়ন্ত্রণ নেই।", "disclaimer": "ডাউনলোড সরাসরি প্রদানকারী থেকে নেওয়া হয়. কিভাবে ডাউনলোড দেওয়া হয় তার উপর মুভি-ওয়েবের নিয়ন্ত্রণ নেই।",
"downloadPlaylist": "প্লেলিস্ট ডাউনলোড করুন",
"downloadSubtitle": "বর্তমান সাবটাইটেল ডাউনলোড করুন", "downloadSubtitle": "বর্তমান সাবটাইটেল ডাউনলোড করুন",
"downloadVideo": "ভিডিও ডাউনলোড", "downloadVideo": "ভিডিও ডাউনলোড",
"hlsDisclaimer": "ডাউনলোড সরাসরি প্রদানকারী থেকে নেওয়া হয়. কিভাবে ডাউনলোড দেওয়া হয় তার উপর মুভি-ওয়েবের নিয়ন্ত্রণ নেই। অনুগ্রহ করে মনে রাখবেন যে আপনি একটি HLS প্লেলিস্ট ডাউনলোড করছেন, এটি উন্নত মাল্টিমিডিয়া স্ট্রিমিংয়ের সাথে পরিচিত ব্যবহারকারীদের জন্য।", "hlsDisclaimer": "ডাউনলোড সরাসরি প্রদানকারী থেকে নেওয়া হয়. কিভাবে ডাউনলোড দেওয়া হয় তার উপর মুভি-ওয়েবের নিয়ন্ত্রণ নেই। অনুগ্রহ করে মনে রাখবেন যে আপনি একটি HLS প্লেলিস্ট ডাউনলোড করছেন, এটি উন্নত মাল্টিমিডিয়া স্ট্রিমিংয়ের সাথে পরিচিত ব্যবহারকারীদের জন্য।",

View File

@ -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ó"
@ -115,7 +118,15 @@
"failed": "No s'ha pogut trobar cap contingut, torneu-ho a provar!", "failed": "No s'ha pogut trobar cap contingut, torneu-ho a provar!",
"loading": "S'està carregant…", "loading": "S'està carregant…",
"noResults": "No hem pogut trobar res!", "noResults": "No hem pogut trobar res!",
"placeholder": "Què voleu mirar?", "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" "sectionTitle": "Resultats de la cerca"
}, },
"titles": { "titles": {
@ -165,6 +176,69 @@
"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.", "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" "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 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",
"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 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",
"title": "Comencem amb una extensió"
},
"proxy": {
"back": "Torna",
"explainer": "Amb el mètode del servidor intermediari, podeu obtenir 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 obtenir 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": { "overlays": {
"close": "Tanca" "close": "Tanca"
}, },
@ -178,11 +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.",
"downloadPlaylist": "Baixa la llista de reproducció",
"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",
@ -263,6 +337,17 @@
"text": "No s'han pogut carregar les metadades de l'API, comproveu la connexió a Internet.", "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" "title": "No s'han pogut carregar les metadades de l'API"
}, },
"dmca": {
"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"
},
"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",
@ -394,16 +479,46 @@
"label": "Servidor personalitzat", "label": "Servidor personalitzat",
"urlLabel": "URL del 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", "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",
"urlLabel": "URL dels «workers»", "urlLabel": "URL dels «workers»",
"urlPlaceholder": "https://" "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 aquesta opció per a generar-les sobre la marxa, però poden alentir el vídeo.",
"thumbnailLabel": "Genera miniatures",
"title": "Configuració"
},
"reset": "Restableix", "reset": "Restableix",
"save": "Desa", "save": "Desa",
"sidebar": { "sidebar": {

View 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"
}
}

View File

@ -116,27 +116,24 @@
"failed": "Nepodařilo se najít média, zkuste to znovu!", "failed": "Nepodařilo se najít média, zkuste to znovu!",
"loading": "Načítání...", "loading": "Načítání...",
"noResults": "Nemohli jsme nic najít!", "noResults": "Nemohli jsme nic najít!",
"placeholder": "Co si přejete sledovat?", "placeholder": {
"default": "Co si přejete sledovat?",
"extra": []
},
"sectionTitle": "Výsledky vyhledávání" "sectionTitle": "Výsledky vyhledávání"
}, },
"titles": { "titles": {
"day": { "day": {
"default": "Na co byste se chtěli dnes odpoledne dívat?", "default": "Na co byste se chtěli dnes odpoledne dívat?",
"extra": [ "extra": ["Chceš zažít dobrodružství? Jurský Park je pro tebe."]
"Chceš zažít dobrodružství? Jurský Park je pro tebe."
]
}, },
"morning": { "morning": {
"default": "Na co byste se chtěli dnes ráno dívat?", "default": "Na co byste se chtěli dnes ráno dívat?",
"extra": [ "extra": ["Slyšel jsem, že Před úsvitem je super."]
"Slyšel jsem, že Před úsvitem je super."
]
}, },
"night": { "night": {
"default": "Na co byste se chtěli dnes večer dívat?", "default": "Na co byste se chtěli dnes večer dívat?",
"extra": [ "extra": ["Unaven? Slyšel jsem, že Vymítač ďábla je super."]
"Unaven? Slyšel jsem, že Vymítač ďábla je super."
]
} }
} }
}, },
@ -177,6 +174,8 @@
"back": "Zpět", "back": "Zpět",
"explainer": "Pomocí rozšíření prohlížeče můžete získat nejlepší streamy, které nabízíme. S pouhou instalací.", "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.", "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": { "status": {
"disallowed": "Rozšíření není pro tuto stránku povoleno", "disallowed": "Rozšíření není pro tuto stránku povoleno",
"disallowedAction": "Povolit rozšíření", "disallowedAction": "Povolit rozšíření",
@ -238,7 +237,6 @@
"menus": { "menus": {
"downloads": { "downloads": {
"disclaimer": "Stahování probíhá přímo u poskytovatele. movie-web nemá kontrolu nad tím, jak jsou stahování poskytovány.", "disclaimer": "Stahování probíhá přímo u poskytovatele. movie-web nemá kontrolu nad tím, jak jsou stahování poskytovány.",
"downloadPlaylist": "Stáhnout playlist",
"downloadSubtitle": "Stáhnout aktuální titulky", "downloadSubtitle": "Stáhnout aktuální titulky",
"downloadVideo": "Stáhnout video", "downloadVideo": "Stáhnout video",
"hlsDisclaimer": "Stahování probíhá přímo u poskytovatele. movie-web nemá kontrolu nad tím, jak jsou stahování poskytovány.<br /><br />Vezměte prosím na vědomí, že stahujete HLS playlist,<bold> který není doporučen stahovat pokud nejste obeznámeni s pokročilým streamováním médií</bold>. Raději skuste jiný zdroj pro jiný formát.", "hlsDisclaimer": "Stahování probíhá přímo u poskytovatele. movie-web nemá kontrolu nad tím, jak jsou stahování poskytovány.<br /><br />Vezměte prosím na vědomí, že stahujete HLS playlist,<bold> který není doporučen stahovat pokud nejste obeznámeni s pokročilým streamováním médií</bold>. Raději skuste jiný zdroj pro jiný formát.",

View File

@ -116,7 +116,10 @@
"failed": "Das Medium wurde nicht gefunden, bitte versuchen Sie es erneut!", "failed": "Das Medium wurde nicht gefunden, bitte versuchen Sie es erneut!",
"loading": "Wird geladen...", "loading": "Wird geladen...",
"noResults": "Wir haben nichts gefunden!", "noResults": "Wir haben nichts gefunden!",
"placeholder": "Was möchtest du schauen?", "placeholder": {
"default": "Was möchtest du schauen?",
"extra": []
},
"sectionTitle": "Suchergebnisse" "sectionTitle": "Suchergebnisse"
}, },
"titles": { "titles": {
@ -128,15 +131,11 @@
}, },
"morning": { "morning": {
"default": "Was würdest du diesen Morgen gerne schauen?", "default": "Was würdest du diesen Morgen gerne schauen?",
"extra": [ "extra": ["Before Sunrise soll gut sein"]
"Before Sunrise soll gut sein"
]
}, },
"night": { "night": {
"default": "Was möchtest du diesen Abend gerne schauen?", "default": "Was möchtest du diesen Abend gerne schauen?",
"extra": [ "extra": ["Müde? Ich hab gehört The Exorcist soll gut sein."]
"Müde? Ich hab gehört The Exorcist soll gut sein."
]
} }
} }
}, },
@ -190,7 +189,8 @@
"outdated": "Erweiterungsversion zu alt", "outdated": "Erweiterungsversion zu alt",
"success": "Die Browser-Erweiterung funktioniert wie erwartet!" "success": "Die Browser-Erweiterung funktioniert wie erwartet!"
}, },
"submit": "Weiter" "submit": "Weiter",
"title": "Lass uns mit einer Erweiterung starten"
}, },
"proxy": { "proxy": {
"back": "Zurück gehen", "back": "Zurück gehen",
@ -203,7 +203,8 @@
"placeholder": "https://" "placeholder": "https://"
}, },
"link": "Erfahre, wie man einen Proxy einstellt", "link": "Erfahre, wie man einen Proxy einstellt",
"submit": "Proxy einreichen" "submit": "Proxy einreichen",
"title": "Lass uns eine neue Proxy erstellen"
}, },
"start": { "start": {
"explainer": "Um die bestmöglichen Streams zu erhalten, müssen Sie auswählen, welche Streaming-Methode Sie verwenden möchten.", "explainer": "Um die bestmöglichen Streams zu erhalten, müssen Sie auswählen, welche Streaming-Methode Sie verwenden möchten.",
@ -223,7 +224,8 @@
"quality": "Gute Qualität", "quality": "Gute Qualität",
"title": "Eigene Proxy" "title": "Eigene Proxy"
} }
} },
"title": "Lass uns mit der Einrichtung von movie-web starten"
} }
}, },
"overlays": { "overlays": {
@ -240,7 +242,6 @@
"menus": { "menus": {
"downloads": { "downloads": {
"disclaimer": "Videos werden direkt vom Provider heruntergeladen. movie-web hat keinen Einfluss darauf, wie Downloads bereitgestellt werden.", "disclaimer": "Videos werden direkt vom Provider heruntergeladen. movie-web hat keinen Einfluss darauf, wie Downloads bereitgestellt werden.",
"downloadPlaylist": "Playlist herunterladen",
"downloadSubtitle": "Aktuelle Untertitel herunterladen", "downloadSubtitle": "Aktuelle Untertitel herunterladen",
"downloadVideo": "Video herunterladen", "downloadVideo": "Video herunterladen",
"hlsDisclaimer": "movie-web hat keinen Einfluss darauf, wie Downloads bereitgestellt werden. Downloads werden direkt vom Anbieter bezogen. <br /><br />Bitte beachte, dass du eine HLS-Wiedergabeliste herunterlädst, <bold>dies ist nicht empfohlen für Nutzer die nicht mit Erweiterten Streaming Formaten vertraut sind</bold>. Probiere andere Anbieter für andere Formate.", "hlsDisclaimer": "movie-web hat keinen Einfluss darauf, wie Downloads bereitgestellt werden. Downloads werden direkt vom Anbieter bezogen. <br /><br />Bitte beachte, dass du eine HLS-Wiedergabeliste herunterlädst, <bold>dies ist nicht empfohlen für Nutzer die nicht mit Erweiterten Streaming Formaten vertraut sind</bold>. Probiere andere Anbieter für andere Formate.",

View File

@ -115,7 +115,10 @@
"failed": "Απέτυχε η εύρεση πολυμέσων, δοκιμάστε ξανά!", "failed": "Απέτυχε η εύρεση πολυμέσων, δοκιμάστε ξανά!",
"loading": "Φόρτωση...", "loading": "Φόρτωση...",
"noResults": "Δεν μπορέσαμε να βρούμε τίποτα!", "noResults": "Δεν μπορέσαμε να βρούμε τίποτα!",
"placeholder": "Τι θέλετε να παρακολουθήσετε;", "placeholder": {
"default": "Τι θέλετε να παρακολουθήσετε;",
"extra": []
},
"sectionTitle": "Αποτελέσματα αναζήτησης" "sectionTitle": "Αποτελέσματα αναζήτησης"
}, },
"titles": { "titles": {
@ -127,15 +130,11 @@
}, },
"morning": { "morning": {
"default": "Τι θα θέλατε να παρακολουθήσετε σήμερα το πρωί;", "default": "Τι θα θέλατε να παρακολουθήσετε σήμερα το πρωί;",
"extra": [ "extra": ["Έχω ακούσει ότι το Before Sunrise είναι καλό"]
"Έχω ακούσει ότι το Before Sunrise είναι καλό"
]
}, },
"night": { "night": {
"default": "Τι θα θέλατε να παρακολουθήσετε απόψε;", "default": "Τι θα θέλατε να παρακολουθήσετε απόψε;",
"extra": [ "extra": ["Κούραση; Έχω ακούσει ότι ο Εξορκιστής είναι καλός."]
"Κούραση; Έχω ακούσει ότι ο Εξορκιστής είναι καλός."
]
} }
} }
}, },
@ -179,7 +178,6 @@
"menus": { "menus": {
"downloads": { "downloads": {
"disclaimer": "Οι λήψεις προέρχονται απευθείας από τον πάροχο. Το movie-web δεν ελέγχει τον τρόπο με τον οποίο παρέχονται οι λήψεις.", "disclaimer": "Οι λήψεις προέρχονται απευθείας από τον πάροχο. Το movie-web δεν ελέγχει τον τρόπο με τον οποίο παρέχονται οι λήψεις.",
"downloadPlaylist": "Λήψη λίστας αναπαραγωγής",
"downloadSubtitle": "Κατέβασμα τρέχοντος υπότιτλου", "downloadSubtitle": "Κατέβασμα τρέχοντος υπότιτλου",
"downloadVideo": "Λήψη βίντεο", "downloadVideo": "Λήψη βίντεο",
"hlsDisclaimer": "Οι λήψεις προέρχονται απευθείας από τον πάροχο. Το movie-web δεν ελέγχει τον τρόπο με τον οποίο παρέχονται οι λήψεις. Παρακαλώ λάβετε υπόψη ότι κατεβάζετε μια λίστα αναπαραγωγής HLS, η οποία προορίζεται για χρήστες που είναι εξοικειωμένοι με την προηγμένη ροή πολυμέσων.", "hlsDisclaimer": "Οι λήψεις προέρχονται απευθείας από τον πάροχο. Το movie-web δεν ελέγχει τον τρόπο με τον οποίο παρέχονται οι λήψεις. Παρακαλώ λάβετε υπόψη ότι κατεβάζετε μια λίστα αναπαραγωγής HLS, η οποία προορίζεται για χρήστες που είναι εξοικειωμένοι με την προηγμένη ροή πολυμέσων.",

View File

@ -55,6 +55,8 @@
"text": "Did you configure it correctly?", "text": "Did you configure it correctly?",
"title": "Failed to reach server" "title": "Failed to reach server"
}, },
"noHostTitle": "Server not configured!",
"noHost": "The server has not been configured, therefore you cannot create an account",
"host": "You are connecting to <0>{{hostname}}</0> - please confirm you trust it before making an account", "host": "You are connecting to <0>{{hostname}}</0> - please confirm you trust it before making an account",
"no": "Go back", "no": "Go back",
"title": "Do you trust this server?", "title": "Do you trust this server?",
@ -116,7 +118,15 @@
"failed": "Failed to find media, try again!", "failed": "Failed to find media, try again!",
"loading": "Loading...", "loading": "Loading...",
"noResults": "We couldn't find anything!", "noResults": "We couldn't find anything!",
"placeholder": "What do you want to watch?", "placeholder": {
"default": "What do you want to watch?",
"extra": [
"What do you want to explore?",
"What's on your watchlist?",
"What's your favorite movie?",
"What's your favorite series?"
]
},
"sectionTitle": "Search results" "sectionTitle": "Search results"
}, },
"titles": { "titles": {

View File

@ -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"
}, },
@ -116,7 +118,15 @@
"failed": "¡Error al encontrar contenido, inténtalo de nuevo!", "failed": "¡Error al encontrar contenido, inténtalo de nuevo!",
"loading": "Cargando...", "loading": "Cargando...",
"noResults": "¡No pudimos encontrar nada!", "noResults": "¡No pudimos encontrar nada!",
"placeholder": "¿Qué te gustaría ver?", "placeholder": {
"default": "¿Qué te gustaría ver?",
"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"
}, },
"titles": { "titles": {
@ -242,8 +252,8 @@
}, },
"menus": { "menus": {
"downloads": { "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.", "disclaimer": "Las descargas se realizan directamente desde el proveedor. movie-web no tiene control sobre cómo se proporcionan las descargas.",
"downloadPlaylist": "Descargar lista de reproducción",
"downloadSubtitle": "Descargar subtítulo actual", "downloadSubtitle": "Descargar subtítulo actual",
"downloadVideo": "Descargar vídeo", "downloadVideo": "Descargar vídeo",
"hlsDisclaimer": "Las descargas se realizan directamente del proveedor. movie-web no tiene control sobre cómo se proporcionan las descargas. <br /><br />Tenga en cuenta que está descargando una lista de reproducción HLS, <bold>dirigida a usuarios familiarizados con la transmisión multimedia avanzada.</bold> Prueba con diferentes fuentes para diferentes formatos.", "hlsDisclaimer": "Las descargas se realizan directamente del proveedor. movie-web no tiene control sobre cómo se proporcionan las descargas. <br /><br />Tenga en cuenta que está descargando una lista de reproducción HLS, <bold>dirigida a usuarios familiarizados con la transmisión multimedia avanzada.</bold> Prueba con diferentes fuentes para diferentes formatos.",

View File

@ -1,6 +1,6 @@
{ {
"about": { "about": {
"description": "movie-web on veebirakendus, mis otsib internetti voogude jaoks. Meeskonna eesmärk on enamasti minimalistlik lähenemine sisu tarbimisele.", "description": "movie-web on veebirakendus, mis otsib internetti striimide jaoks. Meie eesmärk on enamasti minimalistlik lähenemine sisu tarbimisele.",
"faqTitle": "Tihti küsitud küsimused", "faqTitle": "Tihti küsitud küsimused",
"q1": { "q1": {
"body": "movie-web ei hoiusta enda sisu. Kui klõpsate, et midagi vaadata, otsitakse valitud meediat internetist (laadimisekraanil ja vahekaardil \"videoallikad\" näete, millist allikat te kasutate). Meediat ei lae movie-web kunagi üles, kõik toimub selle otsingumehhanismi kaudu.", "body": "movie-web ei hoiusta enda sisu. Kui klõpsate, et midagi vaadata, otsitakse valitud meediat internetist (laadimisekraanil ja vahekaardil \"videoallikad\" näete, millist allikat te kasutate). Meediat ei lae movie-web kunagi üles, kõik toimub selle otsingumehhanismi kaudu.",
@ -87,7 +87,7 @@
"dmca": "DMCA", "dmca": "DMCA",
"github": "GitHub" "github": "GitHub"
}, },
"tagline": "Vaadake selle avatud lähtekoodiga voogesituse rakendusega oma lemmiksaateid ja -filme." "tagline": "Vaadake selle avatud lähtekoodiga striimimis rakendusega oma lemmiksaateid ja -filme."
}, },
"global": { "global": {
"name": "movie-web", "name": "movie-web",
@ -95,6 +95,7 @@
"about": "Meist", "about": "Meist",
"dmca": "DMCA", "dmca": "DMCA",
"login": "Logi sisse", "login": "Logi sisse",
"onboarding": "Seadistamine",
"pagetitle": "{{title}} - movie-web", "pagetitle": "{{title}} - movie-web",
"register": "Registreeri", "register": "Registreeri",
"settings": "Sätted" "settings": "Sätted"
@ -115,7 +116,10 @@
"failed": "Meedia leidmine ebaõnnestus, proovige uuesti!", "failed": "Meedia leidmine ebaõnnestus, proovige uuesti!",
"loading": "Laadimine....", "loading": "Laadimine....",
"noResults": "Me ei leidnud midagi!", "noResults": "Me ei leidnud midagi!",
"placeholder": "Mida tahate vaadata?", "placeholder": {
"default": "Mida tahate vaadata?",
"extra": []
},
"sectionTitle": "Otsingutulemused" "sectionTitle": "Otsingutulemused"
}, },
"titles": { "titles": {
@ -127,15 +131,11 @@
}, },
"morning": { "morning": {
"default": "Mida te soovite täna hommikul vaadata?", "default": "Mida te soovite täna hommikul vaadata?",
"extra": [ "extra": ["Ma kuulsin, et Before Sunrise on hea"]
"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": [ "extra": ["Väsinud? Olen kuulnud, et The Exorcist on hea."]
"Väsinud? Olen kuulnud, et The Exorcist on hea."
]
} }
} }
}, },
@ -165,6 +165,69 @@
"message": "Otsisime kõikjalt: prügikastide alt, kapist, proksi tagant, kuid lõpuks ei leidnud otsitud lehte.", "message": "Otsisime kõikjalt: prügikastide alt, kapist, proksi tagant, kuid lõpuks ei leidnud otsitud lehte.",
"title": "Ei leidnud seda lehekülge" "title": "Ei leidnud seda lehekülge"
}, },
"onboarding": {
"defaultConfirm": {
"cancel": "Tühista",
"confirm": "Kasuta tavalist seadistust",
"description": "Tavalises seadistuses ei ole parimad striimid ja see võib olla talumatult aeglane.",
"title": "Oled kindel?"
},
"extension": {
"back": "Mine tagasi",
"explainer": "Kasutades brauserilaiendust, saate parimaid striime, mida meil on pakkuda. Seda saab paigaldada vaid paari hetkega.",
"explainerIos": "Kahjuks ei toeta iOS meie brauserilaiendust, Vajutage <bold>Minge tagasi</bold>, et valida teine valik.",
"extensionHelp": "Kui olete laienduse paigaldanud, kuid seda ei tuvastata, <bold> avage laiendus oma brauseri laienduste menüüst</bold> ja järgige ekraanil olevaid juhendeid.",
"linkChrome": "Paigalda Chrome laiendus",
"linkFirefox": "Paigalda Firefox'i laiendus",
"notDetecting": "Paigaldasite laienduse Chrome'ile, kuid sait ei tuvasta seda? Proovige lehte värskendada!",
"notDetectingAction": "Värskenda leht",
"status": {
"disallowed": "Laiendus ei ole lubatud sellel lehel",
"disallowedAction": "Laienduse lubamine",
"failed": "Päring staatuse saamiseks ei õnnestunud",
"loading": "Ootame, et paigaldaksite laienduse",
"outdated": "Laienduse versioon liiga vana",
"success": "Laiendus töötab ootuspäraselt!"
},
"submit": "Jätka",
"title": "Alustame laiendusega"
},
"proxy": {
"back": "Mine tagasi",
"explainer": "Proksi abiga saate suurepärase kvaliteediga striime.",
"input": {
"errorConnection": "Ei saanud proksiga ühendatud",
"errorInvalidUrl": "Ei ole kehtiv URL",
"errorNotProxy": "Oodati proksit, kuid saadi veebileht",
"label": "Proksi URL",
"placeholder": "https://"
},
"link": "Õpi kuidas teha proksi",
"submit": "Esita proksi",
"title": "Teeme uue proksi"
},
"start": {
"explainer": "Parimate võimalike striimide saamiseks peate valima, millist striimimismeetodit soovite kasutada.",
"options": {
"default": {
"text": "Ma ei taha hea kvaliteediga striimi, <0 /> <1>kasuta tavalist seadistust</1>"
},
"extension": {
"action": "Paigalda laiendus",
"description": "Paigaldage brauseri laiendus ja saage ligi parimatele allikatele.",
"quality": "Parim kvaliteet",
"title": "Brauseri laiendus"
},
"proxy": {
"action": "Proxy seadistamine",
"description": "Seadistage proksi kõigest 5 minutiga ja pääsete ligi suurepärastele allikatele.",
"quality": "Hea kvaliteet",
"title": "Kohandatud proxy"
}
},
"title": "Teeme algust movie-webi kasutamisega"
}
},
"overlays": { "overlays": {
"close": "Sulge" "close": "Sulge"
}, },
@ -179,10 +242,9 @@
"menus": { "menus": {
"downloads": { "downloads": {
"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.",
"downloadPlaylist": "Laadige esitusloend alla",
"downloadSubtitle": "Laadige alla praegune subtiiter", "downloadSubtitle": "Laadige alla praegune subtiiter",
"downloadVideo": "Lae alla video", "downloadVideo": "Lae alla video",
"hlsDisclaimer": "Allalaadimised võetakse otse teenusepakkujalt. movie-web ei kontrolli, kuidas allalaadimisi pakutakse. Pange tähele, et laadite alla HLS-i esitusloendit, see on mõeldud kasutajatele, kes on tuttavad multimeediumi voogesitusega.", "hlsDisclaimer": "Allalaadimised võetakse otse teenusepakkujalt. movie-web ei kontrolli, kuidas allalaadimisi pakutakse. <br /><br /><bold>Pange tähele, et laadite alla HLS-i esitusloendit, see on mõeldud kasutajatele, kes on tuttavad multimeediumi striimimisega</bold>.",
"onAndroid": { "onAndroid": {
"1": "Et allalaadida Androidi telefonil, vajuta allalaadimise nupule, siis uuel leheküljel <bold>vajuta ja hoia</bold> video peal, siis vali <bold>salvesta</bold>.", "1": "Et allalaadida Androidi telefonil, vajuta allalaadimise nupule, siis uuel leheküljel <bold>vajuta ja hoia</bold> video peal, siis vali <bold>salvesta</bold>.",
"shortTitle": "Allalaadimine / Android", "shortTitle": "Allalaadimine / Android",
@ -239,8 +301,8 @@
"title": "Ei leitud manuseid" "title": "Ei leitud manuseid"
}, },
"noStream": { "noStream": {
"text": "Sellel allikal ei ole selle filmi või seriaali jaoks ühtegi voogedastust.", "text": "Sellel allikal ei ole selle filmi või seriaali jaoks ühtegi striimi.",
"title": "Puudub voog" "title": "Puudub striim"
}, },
"title": "Allikad", "title": "Allikad",
"unknownOption": "Teadmata" "unknownOption": "Teadmata"
@ -263,6 +325,17 @@
"text": "API metaandmete laadimine ebaõnnestus, palun kontrollige oma internetiühendust.", "text": "API metaandmete laadimine ebaõnnestus, palun kontrollige oma internetiühendust.",
"title": "API metaandmete laadimine ebaõnnestus" "title": "API metaandmete laadimine ebaõnnestus"
}, },
"dmca": {
"badge": "Eemaldatud",
"text": "See meedia pole enam saadaval kas eemaldamisteate või autoriõiguse nõue tõttu.",
"title": "Meedia on eemaldatud"
},
"extensionPermission": {
"badge": "Luba puudub",
"button": "Kasuta laiendust",
"text": "Sul on meie laiendus aga meil on vaja sinu luba, et saaksid alustada laienduse kasutamist.",
"title": "Seadistage laiendus"
},
"failed": { "failed": {
"badge": "Ebaōnnestus", "badge": "Ebaōnnestus",
"homeButton": "Mine koju", "homeButton": "Mine koju",
@ -390,20 +463,50 @@
}, },
"connections": { "connections": {
"server": { "server": {
"description": "Kui soovite kohandatud backend'i kasutada oma andmete hoidmiseks, siis lubage see ja varustage URL.", "description": "Kui soovite kohandatud backend'i kasutada oma andmete hoidmiseks, siis lubage see ja varustage URL. <o>Juhised.</0>",
"label": "Kohandatud server", "label": "Kohandatud server",
"urlLabel": "Kohandatud serveri URL" "urlLabel": "Kohandatud serveri URL"
}, },
"setup": {
"doSetup": "Seadista",
"errorStatus": {
"description": "Üks või mitu selle seadistuse üksust vajavad teie tähelepanu.",
"title": "Midagi vajab teie tähelepanu"
},
"itemError": "Midagi on valesti selle sättega. Selle parandamiseks läbige seadistus uuesti.",
"items": {
"default": "Tavaline seadistamine",
"extension": "Laiendus",
"proxy": "Kohandatud proksi"
},
"redoSetup": "Seadista uuesti",
"successStatus": {
"description": "Kõik on paigas, et saaksite enda lemmikmeediat nautima hakata.",
"title": "Kõik on seadistatud!"
},
"unsetStatus": {
"description": "Seadistusprotsessi alustamiseks klõpsake paremal asuvat nuppu.",
"title": "Te pole seadistamist läbinud"
}
},
"title": "Ühendused", "title": "Ühendused",
"workers": { "workers": {
"addButton": "Lisa uus töötaja", "addButton": "Lisa uus töötaja",
"description": "Rakenduse toimimiseks suunatakse kogu liiklus puhverserverite kaudu. Lubage see, kui soovite oma puhverserverit kasutada.", "description": "Rakenduse toimimiseks suunatakse kogu liiklus puhverserverite kaudu. Lubage see, kui soovite oma puhverserverit kasutada. <0>Juhised.</0>",
"emptyState": "Töötajaid pole veel, lisage üks", "emptyState": "Töötajaid pole veel, lisage üks",
"label": "Kasutage kohandatud puhverserveri töötajaid", "label": "Kasutage kohandatud puhverserveri töötajaid",
"urlLabel": "Töötajate URL-id", "urlLabel": "Töötajate URL-id",
"urlPlaceholder": "https://" "urlPlaceholder": "https://"
} }
}, },
"preferences": {
"language": "Rakenduse keel",
"languageDescription": "Keel, mis on rakendatud tervele rakendusele.",
"thumbnail": "Genereeri pisipilte",
"thumbnailDescription": "Enamasti pole videodel pisipilte. Selle sätte lubamisega genereeritakse pispildid vaatamise ajal, kuid need võivad teie video aeglasemaks muuta.",
"thumbnailLabel": "Genereeri pisipilte",
"title": "Eelistused"
},
"reset": "Lähtesta", "reset": "Lähtesta",
"save": "Salvesta", "save": "Salvesta",
"sidebar": { "sidebar": {

View File

@ -3,16 +3,16 @@
"description": "مووی-وب یک برنامه تحت وب است که در اینترنت به دنبال استریم ها می‌گردد. هدف تیم تجربه‌ای ساده برای استفاده از محتوا است.", "description": "مووی-وب یک برنامه تحت وب است که در اینترنت به دنبال استریم ها می‌گردد. هدف تیم تجربه‌ای ساده برای استفاده از محتوا است.",
"faqTitle": "سوالات متداول", "faqTitle": "سوالات متداول",
"q1": { "q1": {
"body": "مووی-وب هیچ محتوایی را میزبانی نمی‌کند. وقتی برای تماشا روی یک چیز کلیک می‌کنید، ما در اینترنت به دنبال محتوای مورد نظر شما می‌گردیم (در صفحه دانلود و در تب 'منابع ویدیو' می‌توانید ببینید که از کدام منبع استفاده می‌کنید). محتوا هرگز در مووی-وب آپلود نمی‌شود، همه چیز از طریق این مکانیزم جستجو اتفاق می‌افتد.", "body": "مووی-وب هیچ محتوایی را میزبانی نمی‌کند. وقتی برای تماشا روی چیزی کلیک می‌کنید، ما در اینترنت به دنبال محتوای مورد نظر شما می‌گردیم (در صفحه دانلود و در برگه 'منابع ویدیو' می‌توانید ببینید که از کدام منبع استفاده می‌کنید). محتوا هرگز در مووی-وب آپلود نمی‌شود، همه چیز از طریق این مکانیزم جستجو اتفاق می‌افتد.",
"title": "فیلم ها از کجا می‌آیند؟" "title": "فیلم ها از کجا می‌آیند؟"
}, },
"q2": { "q2": {
"body": "از آنجایی که محتوا ها توسط مووی-وب مدیریت نمی‌شوند، امکان درخواست فیلم وجود ندارد. تمام محتوا از طریق منابع در اینترنت به شما نشان داده می‌شوند.", "body": "از آنجایی که محتوا ها توسط مووی-وب مدیریت نمی‌شوند، امکان درخواست فیلم وجود ندارد. تمام محتوا از طریق منابع در اینترنت به شما نشان داده می‌شوند.",
"title": "از کجا میتوانم درخواست فیلم کنم؟" "title": "از کجا میتونم درخواست فیلم کنم؟"
}, },
"q3": { "q3": {
"body": "نتایج جستجوی ما توسط پایگاه داده فیلم (TMDB) تامین می‌شوند و نمایش داده می‌شوند، بدون اینکه مهم باشد که منابع ما واقعاً محتوا را داشته باشند یا خیر.", "body": "نتایج جستجوی ما توسط پایگاه داده فیلم (TMDB) تامین می‌شوند و نمایش داده می‌شوند، بدون اینکه مهم باشد که منابع ما واقعاً محتوا را داشته باشند یا خیر.",
"title": "نتایج جستجو وجود دارد، اما چرا فیلم پخش نمی‌شود؟" "title": "جستجو همراه با نتیجه است، اما چرا فیلم پخش نمی‌شود؟"
}, },
"title": "درباره مووی-وب" "title": "درباره مووی-وب"
}, },
@ -21,11 +21,11 @@
"copy": "کپی" "copy": "کپی"
}, },
"auth": { "auth": {
"createAccount": "هنوز حساب کاربری ندارید؟ <0>ثبت نام کنید.</0>", "createAccount": "آیا هنوز حساب کاربری ندارید؟ <0>حساب ایجاد کنید.</0>",
"deviceNameLabel": "نام دستگاه", "deviceNameLabel": "نام دستگاه",
"deviceNamePlaceholder": "تلفن شخصی", "deviceNamePlaceholder": "تلفن شخصی",
"generate": { "generate": {
"description": "جمله امنیتی شما به عنوان نام کاربری و رمز عبور عمل می‌کند. آن را در جایی ذخیره کنید چون برای ورود به آن نیاز دارید", "description": "عبارت عبور شما به عنوان نام کاربری و رمز عبور عمل می‌کند. آن را در جایی ذخیره کنید چون برای ورود به آن نیاز دارید",
"next": "عبارت عبور امنیتی خود را ذخیره کرده‌ام", "next": "عبارت عبور امنیتی خود را ذخیره کرده‌ام",
"passphraseFrameLabel": "عبارت عبور امنیتی", "passphraseFrameLabel": "عبارت عبور امنیتی",
"title": "عبارت عبور امنیتی شما" "title": "عبارت عبور امنیتی شما"
@ -34,7 +34,7 @@
"login": { "login": {
"description": "لطفاً عبارت عبور امنیتی خود را وارد کنید تا وارد حساب کاربری شوید", "description": "لطفاً عبارت عبور امنیتی خود را وارد کنید تا وارد حساب کاربری شوید",
"deviceLengthError": "لطفا نامی برای دستگاه انتخاب کنید", "deviceLengthError": "لطفا نامی برای دستگاه انتخاب کنید",
"passphraseLabel": "جمله امنیتی 12 کلمه‌ای", "passphraseLabel": "عبارت عبور 12 کلمه‌ای",
"passphrasePlaceholder": "عبارت عبور امنیتی", "passphrasePlaceholder": "عبارت عبور امنیتی",
"submit": "ورود", "submit": "ورود",
"title": "ورود به حساب کاربری", "title": "ورود به حساب کاربری",
@ -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": "نمایش جزئیات خطا",
@ -80,7 +82,7 @@
"footer": { "footer": {
"legal": { "legal": {
"disclaimer": "سلب مسئولیت", "disclaimer": "سلب مسئولیت",
"disclaimerText": "مووی-وب هیچ فایلی را میزبانی نمی‌کند، صرفاً به سرویس‌های ثالث لینک می‌دهد. مسائل قانونی باید با میزبان‌ها و ارائه‌دهندگان فایل مطرح شود. مووی-وب مسئولیتی در قبال هیچ فایل رسانه‌ای که توسط ارائه‌دهندگان ویدیو نشان داده می‌شود ندارد." "disclaimerText": "مووی-وب هیچ فایلی را میزبانی نمی‌کند، صرفاً به سرویس‌های ثالث لینک می‌دهد. مسائل قانونی باید با میزبان‌ها و ارائه‌دهندگان فایل مطرح شود. مووی-وب مسئولیتی در قبال هیچ فایل محتوایی که توسط ارائه‌دهندگان ویدیو نشان داده می‌شود ندارد."
}, },
"links": { "links": {
"discord": "دیسکورد", "discord": "دیسکورد",
@ -115,8 +117,16 @@
"allResults": "همه چیزی بود که داشتیم!", "allResults": "همه چیزی بود که داشتیم!",
"failed": "چیزی پیدا نشد، دوباره تلاش کنید!", "failed": "چیزی پیدا نشد، دوباره تلاش کنید!",
"loading": "در حال بارگذاری...", "loading": "در حال بارگذاری...",
"noResults": "چیزی پیدا نکردیم!", "noResults": "نتونستیم چیزی پیدا کنیم!",
"placeholder": "چه می‌خواهید تماشا کنید؟", "placeholder": {
"default": "چه می‌خواهید تماشا کنید؟",
"extra": [
"دنبال چی میگردی؟",
"چی تو لیست تماشات داری؟",
"فیلم مورد علاقت چیه؟",
"سریال مورد علاقت چیه؟"
]
},
"sectionTitle": "نتایج جستجو" "sectionTitle": "نتایج جستجو"
}, },
"titles": { "titles": {
@ -226,7 +236,7 @@
"title": "پروکسی سفارشی" "title": "پروکسی سفارشی"
} }
}, },
"title": "بیایید با فیلم وب راه اندازی کنیم" "title": "بیایید با مووی-وب راه اندازی کنیم"
} }
}, },
"overlays": { "overlays": {
@ -242,8 +252,8 @@
}, },
"menus": { "menus": {
"downloads": { "downloads": {
"disclaimer": "دانلود ها به طور مستقیم از ارائه دهنده گرفته شده است. مووی-وب کنترلی بر نحوه ارائه دانلود ها ندارد.", "copyHlsPlaylist": "لینک HLS لیست پخش را کپی کنید",
"downloadPlaylist": "دانلود لیست پخش", "disclaimer": "دانلود ها به طور مستقیم از ارائه دهنده گرفته می شوند. مووی-وب کنترلی بر نحوه ارائه دانلود ها ندارد.",
"downloadSubtitle": "دانلود زیرنویس فعلی", "downloadSubtitle": "دانلود زیرنویس فعلی",
"downloadVideo": "دانلود ویدیو", "downloadVideo": "دانلود ویدیو",
"hlsDisclaimer": "دانلودها مستقیماً از ارائه دهنده گرفته می شوند. movie-web کنترلی بر نحوه ارائه دانلودها ندارد.<br /><br />لطفاً توجه داشته باشید که در حال دانلود یک لیست پخش HLS هستید، <bold>اگر با فرمت های پخش جریانی پیشرفته آشنایی ندارید، دانلود آن توصیه نمی شود. </bold>. منابع مختلف را برای فرمت های مختلف امتحان کنید.", "hlsDisclaimer": "دانلودها مستقیماً از ارائه دهنده گرفته می شوند. movie-web کنترلی بر نحوه ارائه دانلودها ندارد.<br /><br />لطفاً توجه داشته باشید که در حال دانلود یک لیست پخش HLS هستید، <bold>اگر با فرمت های پخش جریانی پیشرفته آشنایی ندارید، دانلود آن توصیه نمی شود. </bold>. منابع مختلف را برای فرمت های مختلف امتحان کنید.",
@ -258,7 +268,7 @@
"title": "دانلود در iOS" "title": "دانلود در iOS"
}, },
"onPc": { "onPc": {
"1": "در کامپیوتر، روی دکمه دانلود کلیک کنید و سپس در صفحه جدید، روی ویدیو کلیک راست کنید و <bold>Save video as</bold> را انتخاب کنید", "1": "در کامپیوتر، روی دکمه دانلود کلیک کنید و سپس در صفحه جدید، روی ویدیو کلیک راست کنید و <bold>ذخیره ویدیو به عنوان</bold>را انتخاب کنید",
"shortTitle": "دانلود / کامپیوتر", "shortTitle": "دانلود / کامپیوتر",
"title": "دانلود در کامپیوتر" "title": "دانلود در کامپیوتر"
}, },
@ -268,7 +278,7 @@
"button": "قسمت ها", "button": "قسمت ها",
"emptyState": "هنوز هیچ قسمتی در این فصل وجود ندارد، بعدا سر بزنید!", "emptyState": "هنوز هیچ قسمتی در این فصل وجود ندارد، بعدا سر بزنید!",
"episodeBadge": "قسمت {{episode}}", "episodeBadge": "قسمت {{episode}}",
"loadingError": "خطایی در دریافت قسمت ها رخ داده", "loadingError": "خطایی در بارگیری فصل رخ داد",
"loadingList": "در حال بارگذاری...", "loadingList": "در حال بارگذاری...",
"loadingTitle": "در حال بارگذاری...", "loadingTitle": "در حال بارگذاری...",
"unairedEpisodes": "یک یا چند قسمت در این فصل غیرفعال شده است به دلیل اینکه هنوز پخش نشده است." "unairedEpisodes": "یک یا چند قسمت در این فصل غیرفعال شده است به دلیل اینکه هنوز پخش نشده است."
@ -329,8 +339,8 @@
}, },
"dmca": { "dmca": {
"badge": "حذف شد", "badge": "حذف شد",
"text": "این رسانه به دلیل اعلامیه حذف یا ادعای حق نسخه‌برداری دیگر در دسترس نیست.", "text": "این محتوا به دلیل اطلاع حذف یا ادعای حق نسخه‌برداری دیگر در دسترس نیست.",
"title": "رسانه حذف شده است" "title": "محتوا حذف شده است"
}, },
"extensionPermission": { "extensionPermission": {
"badge": "مجوز وجود ندارد", "badge": "مجوز وجود ندارد",
@ -341,13 +351,13 @@
"failed": { "failed": {
"badge": "ناموفق", "badge": "ناموفق",
"homeButton": "بازگشت به خانه", "homeButton": "بازگشت به خانه",
"text": "نتوانستیم اطلاعات را از TMDB دریافت کنیم. ممکن است TMDB موقتا غیرفعال باشد یا توسط ارائه دهنده شما فیلتر باشد.", "text": "دریافت اطلاعات از TMDB ناموفق بود، ممکن است TMDB موقتا غیرفعال باشد یا توسط ارائه دهنده شما فیلتر باشد.",
"title": "اطلاعات دریافت نشد" "title": "اطلاعات بارگیری نشد"
}, },
"notFound": { "notFound": {
"badge": "پیدا نشد", "badge": "پیدا نشد",
"homeButton": "بازگشت به خانه", "homeButton": "بازگشت به خانه",
"text": "فیلم یا سریالی که شما به دنبالش هستید رو پیدا نکردیم. ممکن است حذف شده باشد یا لینک این صفحه دستکاری شده باشد.", "text": "محتوایی که شما به دنبالش هستید رو پیدا نکردیم. ممکن است حذف شده باشد یا شما لینک این صفحه دستکاری شده باشید.",
"title": "محتوا ای پیدا نشد." "title": "محتوا ای پیدا نشد."
} }
}, },
@ -358,14 +368,14 @@
"playbackError": { "playbackError": {
"badge": "مشکلی در پخش به وجود آمده", "badge": "مشکلی در پخش به وجود آمده",
"errors": { "errors": {
"errorAborted": "دریافت رسانه توسط کاربر لغو شد.", "errorAborted": "دریافت محتوا با درخواست کاربر لغو شد.",
"errorDecode": "با وجود اینکه قبلا مشخص شده بود که قابل استفاده است، یک خطا در هنگام تلاش برای رمزگشایی رسانه رخ داد که باعث مشکل شد.", "errorDecode": "با وجود اینکه قبلا مشخص شده بود که قابل استفاده است، یک خطا در هنگام تلاش برای رمزگشایی رسانه رخ داد که باعث مشکل شد.",
"errorGenericMedia": "رسانه ناشناخته است.", "errorGenericMedia": "خطای محتوای ناشناخته رخ داد.",
"errorNetwork": "با وجود اینکه قبلا در دسترس بود، نوعی خطای شبکه رخ داد که مانع از دریافت رسانه ها شد.", "errorNetwork": "با وجود اینکه قبلا در دسترس بود، نوعی خطای شبکه رخ داد که مانع از دریافت محتوا شد.",
"errorNotSupported": "رسانه یا ارائه دهنده رسانه پشتیبانی نمی‌شود." "errorNotSupported": "محتوا یا ارائه دهنده رسانه پشتیبانی نمی‌شود."
}, },
"homeButton": "بازگشت به خانه", "homeButton": "بازگشت به خانه",
"text": "مشکلی در پخش رسانه ها وجود داشت. لطفا دوباره تلاش کنید.", "text": "مشکلی در پخش محتوا وجود داشت. لطفا دوباره تلاش کنید.",
"title": "پخش ویدئو موفقیت آمیز نبود!" "title": "پخش ویدئو موفقیت آمیز نبود!"
}, },
"scraping": { "scraping": {
@ -378,8 +388,8 @@
"badge": "پیدا نشد", "badge": "پیدا نشد",
"detailsButton": "نمایش جزئیات", "detailsButton": "نمایش جزئیات",
"homeButton": "بازگشت به خانه", "homeButton": "بازگشت به خانه",
"text": "ما در ارائه دهندگان جستجو کرده ایم ولی نمی توانیم رسانه ای را که به دنبال آن را هستید پیدا کنیم! ما رسانه ها را میزبانی نمی کنیم و هیچ کنترلی بر آنچه در دسترس است نداریم. لطفا برای جزئیات بیشتر روی \"نمایش جزئیات\" در زیر کلیک کنید.", "text": "ما در ارائه دهندگان جستجو کرده ایم ولی نمی توانیم محتوایی را که به دنبال آن را هستید پیدا کنیم! ما رسانه ها را میزبانی نمی کنیم و هیچ کنترلی بر آنچه در دسترس است نداریم. لطفا برای جزئیات بیشتر روی \"نمایش جزئیات\" در زیر کلیک کنید.",
"title": "پیدا نشد" "title": "نتونستیم پیداش کنیم"
} }
}, },
"time": { "time": {
@ -400,17 +410,17 @@
"text": "به صفحه تماس DMCA مووی-وب خوش آمدید! ما به حقوق مالکیت معنوی احترام می گذاریم و می خواهیم به سرعت به هر گونه نگرانی کپی رایت رسیدگی کنیم. اگر فکر می کنید کار کپی رایت شما به طور نادرست در پلت فرم ما استفاده شده است، لطفا یک اطلاعیه DMCA دقیق را به ایمیل زیر ارسال کنید. لطفا شرح مواد کپی رایت، جزئیات تماس خود و بیانیه ای از اعتقاد حسن نیت را شامل شوید. ما متعهد به حل و فصل سریع این مسائل هستیم و از همکاری شما در حفظ وب فیلم به عنوان مکانی که به خلاقیت و کپی رایت احترام می گذارند، قدردانی می کنیم.", "text": "به صفحه تماس DMCA مووی-وب خوش آمدید! ما به حقوق مالکیت معنوی احترام می گذاریم و می خواهیم به سرعت به هر گونه نگرانی کپی رایت رسیدگی کنیم. اگر فکر می کنید کار کپی رایت شما به طور نادرست در پلت فرم ما استفاده شده است، لطفا یک اطلاعیه DMCA دقیق را به ایمیل زیر ارسال کنید. لطفا شرح مواد کپی رایت، جزئیات تماس خود و بیانیه ای از اعتقاد حسن نیت را شامل شوید. ما متعهد به حل و فصل سریع این مسائل هستیم و از همکاری شما در حفظ وب فیلم به عنوان مکانی که به خلاقیت و کپی رایت احترام می گذارند، قدردانی می کنیم.",
"title": "DMCA" "title": "DMCA"
}, },
"loadingApp": "در حال اجرای برنامه", "loadingApp": "در حال بارگیری برنامه",
"loadingUser": "در حال دریافت اطلاعات حساب کاربری", "loadingUser": "درحال بارگیری حساب کاربری شما",
"loadingUserError": { "loadingUserError": {
"logout": "خروج", "logout": "خروج",
"reset": "تغییر سرور", "reset": "بازنشانی سرور سفارشی",
"text": "حساب کاربری دریافت نشد", "text": "حساب کاربری شما بارگیری نشد",
"textWithReset": "دریافت حساب کاربری شما از سرور سفارشی شکست خورد، آیا می خواهید به سرور پیش فرض بازگردید؟" "textWithReset": "بارگیری حساب کاربری شما از سرور سفارشی شکست خورد، آیا می خواهید به سرور پیش فرض بازگردید؟"
}, },
"migration": { "migration": {
"failed": "دریافت اطلاعات شکست خورد.", "failed": "انتقال داده های شما انجام نشد.",
"inProgress": "درحال دریافت اطلاعات شما هستیم. خیلی طول نخواهد کشید." "inProgress": "لطفا صبر کنید، ما در حال انتقال داده های شما هستیم. زیاد طول نمیکشد."
} }
}, },
"settings": { "settings": {
@ -426,8 +436,8 @@
"button": "حذف حساب کاربری", "button": "حذف حساب کاربری",
"confirmButton": "حذف حساب کاربری", "confirmButton": "حذف حساب کاربری",
"confirmDescription": "آیا مطمئن هستید که می خواهید حساب خود را حذف کنید؟ تمام اطلاعات شما از دست خواهد رفت!", "confirmDescription": "آیا مطمئن هستید که می خواهید حساب خود را حذف کنید؟ تمام اطلاعات شما از دست خواهد رفت!",
"confirmTitle": "آیا مطمئن هستید؟", "confirmTitle": "مطمئنی؟",
"text": "این اقدام غیر قابل برگشت است. تمام اطلاعات حذف خواهد شد و هیچ چیز بازگردانی نمی‌شود.", "text": "این اقدام غیر قابل برگشت است. تمام اطلاعات حذف خواهد شد و هیچ چیز دیگر بازگردانی نمی‌شود.",
"title": "حذف حساب کاربری" "title": "حذف حساب کاربری"
}, },
"title": "اقدامات" "title": "اقدامات"
@ -439,7 +449,7 @@
"title": "دستگاه ها" "title": "دستگاه ها"
}, },
"profile": { "profile": {
"finish": "پایان ویرایش", "finish": "تمام کردن ویرایش",
"firstColor": "رنگ پروفایل اول", "firstColor": "رنگ پروفایل اول",
"secondColor": "رنگ پروفایل دوم", "secondColor": "رنگ پروفایل دوم",
"title": "ویرایش عکس نمایه", "title": "ویرایش عکس نمایه",
@ -447,7 +457,7 @@
}, },
"register": { "register": {
"cta": "شروع کنید", "cta": "شروع کنید",
"text": "پیشرفت تماشای خود را بین دستگاه‌ها به اشتراک بگذارید و آنها را با یکدیگر همگام کنید.", "text": "پیشرفت تماشای خود را بین دستگاه‌ها به اشتراک بگذارید و آنها را با یکدیگر همگام سازی کنید.",
"title": "همگام سازی" "title": "همگام سازی"
}, },
"title": "حساب کاربری" "title": "حساب کاربری"
@ -465,17 +475,17 @@
}, },
"connections": { "connections": {
"server": { "server": {
"description": "اگر میخواهید به یک بک-اند سفارشی برای ذخیره داده متصل شوید، با فعال و ارائه کردن این لینک ادامه دهید. <0>دستورالعمل ها.</0>", "description": "اگر میخواید به یک بک-اند سفارشی برای ذخیره داده متصل شوید، با فعال و ارائه استفاده این لینک ادامه دهید. <0>دستورالعمل ها.</0>",
"label": "سرور سفارشی", "label": "سرور سفارشی",
"urlLabel": "لینک سرور سفارشی" "urlLabel": "لینک سرور سفارشی"
}, },
"setup": { "setup": {
"doSetup": "راه اندازی را انجام دهید", "doSetup": "راه اندازی کنید",
"errorStatus": { "errorStatus": {
"description": "به نظر می رسد که یک یا چند مورد در این تنظیم نیاز به توجه شما دارد.", "description": "به نظر می رسد که یک یا چند مورد در این تنظیم نیاز به توجه شما دارد.",
"title": "چیزی به توجه شما نیاز دارد" "title": "چیزی به توجه شما نیاز دارد"
}, },
"itemError": "مشکلی در این تنظیم وجود دارد. برای رفع آن دوباره تنظیمات را انجام دهید.", "itemError": "مشکلی در این تنظیمات وجود دارد. برای رفع آن دوباره تنظیمات را انجام دهید.",
"items": { "items": {
"default": "تنظیم پیش فرض", "default": "تنظیم پیش فرض",
"extension": "افزونه", "extension": "افزونه",
@ -483,18 +493,18 @@
}, },
"redoSetup": "تنظیم مجدد", "redoSetup": "تنظیم مجدد",
"successStatus": { "successStatus": {
"description": "همه چیز برای شروع تماشای رسانه مورد علاقه‌تان آماده است.", "description": "همه چیز برای شروع تماشای محتوای مورد علاقه‌تان آماده است.",
"title": "همه چیز تنظیم شده است!" "title": "همه چیز تنظیم شده است!"
}, },
"unsetStatus": { "unsetStatus": {
"description": "لطفاً روی دکمه سمت راست کلیک کنید تا فرآیند نصب شروع شود.", "description": "لطفاً روی دکمه سمت راست کلیک کنید تا فرآیند نصب شروع شود.",
"title": "شما راه‌اندازی را طی نکرده‌اید" "title": "شما هنوز راه‌اندازی را طی نکرده‌اید"
} }
}, },
"title": "اتصالات", "title": "اتصالات",
"workers": { "workers": {
"addButton": "اضافه کردن worker جدید", "addButton": "اضافه کردن worker جدید",
"description": "برای ایجاد عملکرد برنامه، تمام ترافیک از طریق پروکسی ها هدایت می شود. اگر میخواهید این کار انجام دهید حتما از worker های خودتان استفاده کنید. <0>دستورالعمل ها.</0>", "description": "برای ایجاد عملکرد برنامه، تمام ترافیک از طریق پروکسی ها هدایت می شود. اگر میخواید این کار انجام دهید حتما از worker های خودتان استفاده کنید. <0>دستورالعمل ها.</0>",
"emptyState": "هنوز هیچ worker ای وجود ندارد، یکی اضافه کنید", "emptyState": "هنوز هیچ worker ای وجود ندارد، یکی اضافه کنید",
"label": "استفاده از worker های پروکسی سفارشی", "label": "استفاده از worker های پروکسی سفارشی",
"urlLabel": "لینک worker ها", "urlLabel": "لینک worker ها",
@ -503,10 +513,10 @@
}, },
"preferences": { "preferences": {
"language": "زبان برنامه", "language": "زبان برنامه",
"languageDescription": "زبان برای کل برنامه کاربردی است.", "languageDescription": "زبان برای کل برنامه اعمال شد.",
"thumbnail": "ایجاد تصاویر کوچک", "thumbnail": "ایجاد تامبنیل",
"thumbnailDescription": "بیشتر اوقات، ویدیوها تصاویر کوچک ندارند. شما می توانید این تنظیم را فعال کنید تا آنها را در لحظه تولید کنید، اما آنها می توانند ویدیوی شما را کندتر کنند.", "thumbnailDescription": "بیشتر اوقات، ویدیوها تامبنیل ندارند. شما می توانید این تنظیم را فعال کنید تا آنها را در لحظه تولید کنید، اما آنها می توانند ویدیوی شما را کندتر کنند.",
"thumbnailLabel": "ایجاد تصاویر کوچک", "thumbnailLabel": "ایجاد تامبنیل",
"title": "اولویت ها" "title": "اولویت ها"
}, },
"reset": "بازنشانی", "reset": "بازنشانی",
@ -516,7 +526,7 @@
"appVersion": "نسخه برنامه", "appVersion": "نسخه برنامه",
"backendUrl": "لینک بک-اند", "backendUrl": "لینک بک-اند",
"backendVersion": "نسخه بک-اند", "backendVersion": "نسخه بک-اند",
"hostname": "لینک برنامه", "hostname": "نام میزبان",
"insecure": "نا امن", "insecure": "نا امن",
"notLoggedIn": "شما وارد نشده اید", "notLoggedIn": "شما وارد نشده اید",
"secure": "امن", "secure": "امن",
@ -528,10 +538,10 @@
"subtitles": { "subtitles": {
"backgroundLabel": "شفافیت پس‌زمینه", "backgroundLabel": "شفافیت پس‌زمینه",
"colorLabel": "رنگ", "colorLabel": "رنگ",
"previewQuote": "نباید بترسم. ترس قاتل ذهن است.", "previewQuote": "نباید بترسم، ترس قاتل ذهن است.",
"textSizeLabel": "اندازه متن", "textSizeLabel": "اندازه متن",
"title": "زیرنویس" "title": "زیرنویس"
}, },
"unsaved": "تغییرات ذخیره نشده دارید" "unsaved": "شما تغییرات ذخیره نشده دارید"
} }
} }

View File

@ -95,6 +95,7 @@
"about": "Meistä", "about": "Meistä",
"dmca": "DMCA", "dmca": "DMCA",
"login": "Kirjaudu sisään", "login": "Kirjaudu sisään",
"onboarding": "asetus",
"pagetitle": "{{title}} - movie-web", "pagetitle": "{{title}} - movie-web",
"register": "Rekisteröidy", "register": "Rekisteröidy",
"settings": "Asetukset" "settings": "Asetukset"
@ -115,7 +116,10 @@
"failed": "Mediaa ei löytynyt, yritä uudelleen!", "failed": "Mediaa ei löytynyt, yritä uudelleen!",
"loading": "Ladataan...", "loading": "Ladataan...",
"noResults": "Emme löytäneet mitään!", "noResults": "Emme löytäneet mitään!",
"placeholder": "Mitä haluat katsoa?", "placeholder": {
"default": "Mitä haluat katsoa?",
"extra": []
},
"sectionTitle": "Hakutulokset" "sectionTitle": "Hakutulokset"
}, },
"titles": { "titles": {
@ -127,15 +131,11 @@
}, },
"morning": { "morning": {
"default": "Mitä haluaisit katsoa tänä aamuna?", "default": "Mitä haluaisit katsoa tänä aamuna?",
"extra": [ "extra": ["Kuulen, että Rakkautta ennen aamua (Before Sunrise) on hyvä"]
"Kuulen, että Rakkautta ennen aamua (Before Sunrise) on hyvä"
]
}, },
"night": { "night": {
"default": "Mitä haluaisit katsoa tänä iltana?", "default": "Mitä haluaisit katsoa tänä iltana?",
"extra": [ "extra": ["Väsynyt? Kuulin, että Manaaja (The Exorcist) on hyvä."]
"Väsynyt? Kuulin, että Manaaja (The Exorcist) on hyvä."
]
} }
} }
}, },
@ -175,7 +175,115 @@
"extension": { "extension": {
"back": "Mene takaisin", "back": "Mene takaisin",
"explainer": "Käyttämällä selainlaajennusta voit saada parhaat tarjoamamme suoratoistot. Yksinkertaisella asennuksella.", "explainer": "Käyttämällä selainlaajennusta voit saada parhaat tarjoamamme suoratoistot. Yksinkertaisella asennuksella.",
"explainerIos": "Valitettavasti selainlaajennusta ei tueta iOS:ssä. Valitse toinen vaihtoehto painamalla <bold>Palaa</bold>." "explainerIos": "Valitettavasti selainlaajennusta ei tueta iOS:ssä. Valitse toinen vaihtoehto painamalla <bold>Palaa</bold>.",
"extensionHelp": "Jos olet asentanut laajennuksen, mutta se ei havaitse sitä, <bold>avaa laajennus selaimen laajennusvalikosta</bold> ja noudata näytön ohjeita.",
"linkChrome": "Asenna Chromen laajennus",
"linkFirefox": "Asenna Firefoxin laajennus",
"notDetecting": "Asensitko sen Chromelle, mutta sivusto ei havaitse sitä? Kokeile ladata sivu uudelleen!",
"notDetectingAction": "Lataa sivu uudelleen",
"status": {
"disallowed": "Laajennus ei ole otettu käyttöön tälle sivulle",
"disallowedAction": "Ota laajennus käyttöön",
"failed": "Pyynnön tilan hakeminen epäonnistui",
"loading": "Odottaa, että asennat laajennuksen",
"outdated": "Laajennuksen versio on liian vanha",
"success": "Laajennus toimii odotetusti!"
},
"submit": "Jatketaan",
"title": "Aloitetaan laajennuksella"
},
"proxy": {
"back": "Mene takaisin",
"explainer": "Proxy-menetelmällä voit saada erinomaisen laadukkaita suoratoistoja luomalla itsepalveluvaltuutetun proxyn.",
"input": {
"errorConnection": "Yhteys proxyn kanssa ei onnistunut",
"errorInvalidUrl": "Ei kelvollinen URL-osoite",
"errorNotProxy": "Odotettiin proxya, mutta saatiinkin verkkosivu",
"label": "Proxyn URL-osoite",
"placeholder": "https://"
},
"link": "Opi luomaan proxy",
"submit": "Toimita proxy",
"title": "Luodaan uusi proxy"
},
"start": {
"explainer": "Parhaiden suoratoistojen saamiseksi sinun täytyy valita, mitä suoratoistomenetelmää haluat käyttää.",
"options": {
"default": {
"text": "En halua hyvälaatuisia suoratoistoja,<0 /> <1>käytä oletusasetusta</1>"
},
"extension": {
"action": "Asenna laajennus",
"description": "Asenna selaimen laajennus ja saa pääsy parhaisiin lähteisiin."
}
},
"title": "Aloitetaan asennus elokuva-webin kanssa"
}
},
"player": {
"menus": {
"episodes": {
"emptyState": "Tässä kaudessa ei ole jaksoja, tarkista myöhemmin!"
},
"quality": {
"hint": "Voit kokeilla <0>vaihtaa lähdettä</0> saadaksesi eri laatuasetuksia."
},
"sources": {
"noEmbeds": {
"text": "Emme löytäneet upotuksia, kokeile toista lähdettä."
},
"noStream": {
"text": "Tässä lähteessä ei ole suoratoistoja tälle elokuvalle tai ohjelmalle."
}
}
},
"metadata": {
"api": {
"text": "API-metatietoja ei voitu ladata, tarkista internet-yhteys.",
"title": "Ei voitu ladata API:n metatietoja."
}
},
"playbackError": {
"errors": {
"errorAborted": "Mediatiedon haku keskeytettiin käyttäjän pyynnöstä.",
"errorNotSupported": "Mediaa tai mediantarjoajaa ei tueta."
},
"text": "Tapahtui virhe yritettäessä toistaa mediaa. Yritä uudelleen."
},
"time": {
"remaining": "{{timeLeft}} jäljellä • Päättyy {{timeFinished, datetime}}"
},
"turnstile": {
"error": "Ei voitu varmistaa inhimillisyyttäsi. Yritä uudelleen.",
"title": "Meidän täytyy varmistaa, että olet ihminen."
}
},
"screens": {
"migration": {
"inProgress": "Pysy hetkisen odotuksessa, siirrämme tietojasi. Tämä ei kestä kauan."
}
},
"settings": {
"account": {
"register": {
"text": "Jaa katseluetenemisesi laitteiden välillä ja pidä ne synkronoituina."
}
},
"connections": {
"setup": {
"unsetStatus": {
"description": "Käynnistä asennusprosessi napsauttamalla oikealla olevaa painiketta."
}
},
"workers": {
"emptyState": "Ei vielä työntekijöitä, lisää yksi alle"
}
},
"preferences": {
"languageDescription": "Kieli sovellettu koko sovellukseen."
},
"subtitles": {
"previewQuote": "Minun ei pidä pelätä. Pelko on mielen tappaja."
} }
} }
} }

View File

@ -7,12 +7,12 @@
"title": "D'où vient le contenu ?" "title": "D'où vient le contenu ?"
}, },
"q2": { "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 ?" "title": "Où puis-je demander une série ou un film ?"
}, },
"q3": { "q3": {
"body": "Que nos sources soient propriétaires du contenu ou non, The Movie Database (TMDB) fournit et affiche nos résultats de recherche.", "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 l'émission ou le film, pourquoi ne puis-je pas le lire ?" "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" "title": "À propos de movie-web"
}, },
@ -27,27 +27,27 @@
"generate": { "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", "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", "next": "J'ai sauvegardé ma passphrase",
"passphraseFrameLabel": "Pass phrase", "passphraseFrameLabel": "Passphrase",
"title": "Votre passphrase" "title": "Votre passphrase"
}, },
"hasAccount": "Avez-vous déjà un compte? <0>Connectez-vous ici.</0>", "hasAccount": "Avez-vous déjà un compte? <0>Connectez-vous ici.</0>",
"login": { "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", "deviceLengthError": "Veuillez saisir un nom d'appareil",
"passphraseLabel": "Passphrase de 12 mots", "passphraseLabel": "Passphrase de 12 mots",
"passphrasePlaceholder": "Phrase secrète", "passphrasePlaceholder": "Passphrase",
"submit": "Se connecter", "submit": "Se connecter",
"title": "Se connecter à votre compte", "title": "Connectez-vous à votre compte",
"validationError": "Passphrase incorrecte ou incomplete" "validationError": "Passphrase incorrecte ou incomplète"
}, },
"register": { "register": {
"information": { "information": {
"color1": "Couleur de profile un", "color1": "Première couleur de profil",
"color2": "Couleur de profile deux", "color2": "Seconde couleur de profil",
"header": "Entrez un nom pour votre appareil et choisissez une couleur de profile ainsi qu'une icône d'utilisateur de votre choix", "header": "Veuillez entrer un nom pour votre appareil, choisir une couleur et une icône utilisateur de votre choix",
"icon": "Icône d'utilisateur", "icon": "Icône d'utilisateur",
"next": "Prochain", "next": "Suivant",
"title": "Informations sur le compte" "title": "Informations du compte"
} }
}, },
"trust": { "trust": {
@ -55,7 +55,7 @@
"text": "L'avez-vous configuré correctement ?", "text": "L'avez-vous configuré correctement ?",
"title": "Échec de la connexion au serveur" "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", "no": "Retour",
"title": "Avez-vous confiance en ce serveur ?", "title": "Avez-vous confiance en ce serveur ?",
"yes": "Je fais confiance à ce serveur" "yes": "Je fais confiance à ce serveur"
@ -65,13 +65,13 @@
"invalidData": "Les données ne sont pas valides", "invalidData": "Les données ne sont pas valides",
"noMatch": "La passphrase ne correspond pas", "noMatch": "La passphrase ne correspond pas",
"passphraseLabel": "Votre passphrase de 12 mots", "passphraseLabel": "Votre passphrase de 12 mots",
"recaptchaFailed": "La validation ReCaptcha a échoué", "recaptchaFailed": "La validation ReCaptcha a échouée",
"register": "Créer un compte", "register": "Créer un compte",
"title": "Confirmez votre passphrase" "title": "Resaisissez votre passphrase"
} }
}, },
"errors": { "errors": {
"badge": "Il s'est cassé", "badge": "Tout est cassé",
"details": "Détails de l'erreur", "details": "Détails de l'erreur",
"reloadPage": "Actualiser la page", "reloadPage": "Actualiser la page",
"showError": "Afficher les détails de l'erreur", "showError": "Afficher les détails de l'erreur",
@ -87,7 +87,7 @@
"dmca": "DMCA", "dmca": "DMCA",
"github": "GitHub" "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": { "global": {
"name": "movie-web", "name": "movie-web",
@ -95,7 +95,7 @@
"about": "À propos", "about": "À propos",
"dmca": "DMCA", "dmca": "DMCA",
"login": "Se connecter", "login": "Se connecter",
"onboarding": "Setup", "onboarding": "Mise en place",
"pagetitle": "{{title}} - movie-web", "pagetitle": "{{title}} - movie-web",
"register": "Créer un compte", "register": "Créer un compte",
"settings": "Paramètres" "settings": "Paramètres"
@ -106,7 +106,7 @@
"sectionTitle": "Favoris" "sectionTitle": "Favoris"
}, },
"continueWatching": { "continueWatching": {
"sectionTitle": "Continuer le visionnage" "sectionTitle": "Reprendre la lecture"
}, },
"mediaList": { "mediaList": {
"stopEditing": "Arrêter l'édition" "stopEditing": "Arrêter l'édition"
@ -116,7 +116,9 @@
"failed": "Le média n'a pas été trouvé, veuillez réessayez!", "failed": "Le média n'a pas été trouvé, veuillez réessayez!",
"loading": "Chargement...", "loading": "Chargement...",
"noResults": "Nous n'avons rien trouvé!", "noResults": "Nous n'avons rien trouvé!",
"placeholder": "Que voulez-vous voir?", "placeholder": {
"default": "Que voulez-vous voir?"
},
"sectionTitle": "Résultats de la recherche" "sectionTitle": "Résultats de la recherche"
}, },
"titles": { "titles": {
@ -162,21 +164,21 @@
}, },
"notFound": { "notFound": {
"badge": "Introuvable", "badge": "Introuvable",
"goHome": "Retour à 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"
}, },
"onboarding": { "onboarding": {
"defaultConfirm": { "defaultConfirm": {
"cancel": "Annuler", "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.", "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": { "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.", "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.", "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", "linkChrome": "Installer l'extension Chrome",
"linkFirefox": "Installer l'extension Firefox", "linkFirefox": "Installer l'extension Firefox",
@ -186,7 +188,7 @@
"disallowed": "L'extension n'est pas activée pour cette page", "disallowed": "L'extension n'est pas activée pour cette page",
"disallowedAction": "Activer l'extension", "disallowedAction": "Activer l'extension",
"failed": "Échec de la demande de statut", "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", "outdated": "Version d'extension trop ancienne",
"success": "L'extension fonctionne comme prévu!" "success": "L'extension fonctionne comme prévu!"
}, },
@ -194,7 +196,7 @@
"title": "Commençons par une extension" "title": "Commençons par une extension"
}, },
"proxy": { "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.", "explainer": "Avec la méthode du proxy, vous pouvez obtenir des flux de bonne qualité en créant un proxy en libre-service.",
"input": { "input": {
"errorConnection": "Impossible de se connecter au proxy", "errorConnection": "Impossible de se connecter au proxy",
@ -204,18 +206,18 @@
"placeholder": "https://" "placeholder": "https://"
}, },
"link": "Apprenez à créer un proxy", "link": "Apprenez à créer un proxy",
"submit": "Soumettre le proxy", "submit": "Valider le proxy",
"title": "Créons un nouveau proxy" "title": "Créons un nouveau proxy"
}, },
"start": { "start": {
"explainer": "Pour obtenir les meilleurs flux possibles, vous devrez choisir la méthode de streaming que vous souhaitez utiliser.", "explainer": "Pour obtenir les meilleurs flux possibles, vous devrez choisir la méthode de streaming que vous souhaitez utiliser.",
"options": { "options": {
"default": { "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": { "extension": {
"action": "Installer l'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é", "quality": "Meilleur qualité",
"title": "Extension du navigateur" "title": "Extension du navigateur"
}, },
@ -226,7 +228,7 @@
"title": "Proxy personnalisé" "title": "Proxy personnalisé"
} }
}, },
"title": "Commençons par vous configurer movie-web" "title": "Commençons par configurer movie-web"
} }
}, },
"overlays": { "overlays": {
@ -234,16 +236,16 @@
}, },
"player": { "player": {
"back": { "back": {
"default": "Retour à la page d'accueil", "default": "Revenir à la page d'accueil",
"short": "Retour" "short": "Retour"
}, },
"casting": { "casting": {
"enabled": "Casting à l'appareil..." "enabled": "Casting vers l'appareil..."
}, },
"menus": { "menus": {
"downloads": { "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.", "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.",
"downloadPlaylist": "Télécharger la liste de lecture",
"downloadSubtitle": "Télécharger les sous-titres", "downloadSubtitle": "Télécharger les sous-titres",
"downloadVideo": "Télécharger la vidéo", "downloadVideo": "Télécharger la vidéo",
"hlsDisclaimer": "Les téléchargements sont effectués directement auprès du fournisseur. movie-web n'a aucun contrôle sur la façon dont les téléchargements sont fournis.<br /><br />Veuillez noter que vous téléchargez une liste de lecture HLS, <bold>il n'est pas recommandé de la télécharger si vous n'êtes pas familier avec les formats de streaming avancés. </bold>. Essayez différentes sources pour différents formats.", "hlsDisclaimer": "Les téléchargements sont effectués directement auprès du fournisseur. movie-web n'a aucun contrôle sur la façon dont les téléchargements sont fournis.<br /><br />Veuillez noter que vous téléchargez une liste de lecture HLS, <bold>il n'est pas recommandé de la télécharger si vous n'êtes pas familier avec les formats de streaming avancés. </bold>. Essayez différentes sources pour différents formats.",
@ -266,9 +268,9 @@
}, },
"episodes": { "episodes": {
"button": "Épisodes", "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}}", "episodeBadge": "E{{episode}}",
"loadingError": "Erreur de chargement de la saison", "loadingError": "Erreur lors du chargement de la saison",
"loadingList": "Chargement...", "loadingList": "Chargement...",
"loadingTitle": "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." "unairedEpisodes": "Un ou plusieurs épisodes de cette saison ont été désactivés car ils n'ont pas encore été diffusés."
@ -279,7 +281,7 @@
}, },
"quality": { "quality": {
"automaticLabel": "Qualité automatique", "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.", "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é" "title": "Qualité"
}, },
@ -303,7 +305,7 @@
"title": "Pas d'embeds trouvés" "title": "Pas d'embeds trouvés"
}, },
"noStream": { "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": "Pas de flux"
}, },
"title": "Sources", "title": "Sources",
@ -346,7 +348,7 @@
}, },
"notFound": { "notFound": {
"badge": "Introuvable", "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.", "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." "title": "Impossible de trouver ce média."
} }
@ -364,7 +366,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.", "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é." "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.", "text": "Une erreur s'est produite lors de la lecture du média. Veuillez réessayer.",
"title": "Oups, c'est coupé !" "title": "Oups, c'est coupé !"
}, },
@ -377,7 +379,7 @@
"notFound": { "notFound": {
"badge": "Non trouvé", "badge": "Non trouvé",
"detailsButton": "Afficher les détails", "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.", "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" "title": "Nous n'avons pas trouvé cela"
} }
@ -409,7 +411,7 @@
"textWithReset": "Echec du chargement de votre profil à partir de votre serveur personnalisé, souhaitez-vous revenir au serveur par défaut ?" "textWithReset": "Echec du chargement de votre profil à partir de votre serveur personnalisé, souhaitez-vous revenir au serveur par défaut ?"
}, },
"migration": { "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." "inProgress": "Veuillez patienter, nous sommes en train de migrer vos données. Cela ne devrait pas prendre longtemps."
} }
}, },
@ -435,18 +437,18 @@
"devices": { "devices": {
"deviceNameLabel": "Nom de l'appareil", "deviceNameLabel": "Nom de l'appareil",
"failed": "Échec du chargement des sessions", "failed": "Échec du chargement des sessions",
"removeDevice": "Enlever", "removeDevice": "Supprimer",
"title": "Appareils" "title": "Appareils"
}, },
"profile": { "profile": {
"finish": "Terminer l'édition", "finish": "Terminer l'édition",
"firstColor": "Couleur de profil un", "firstColor": "Première couleur de profil",
"secondColor": "Couleur de profil deux", "secondColor": "Seconde couleur de profil",
"title": "Éditer la photo de profil", "title": "Modifier la photo de profil",
"userIcon": "Icône de l'utilisateur" "userIcon": "Icône de l'utilisateur"
}, },
"register": { "register": {
"cta": "Commencer", "cta": "Démarrer",
"text": "Partagez la progression de vos films et séries entre vos appareils et gardez-les synchronisés.", "text": "Partagez la progression de vos films et séries entre vos appareils et gardez-les synchronisés.",
"title": "Synchroniser au Cloud" "title": "Synchroniser au Cloud"
}, },
@ -470,12 +472,12 @@
"urlLabel": "URL du serveur personnalisé" "urlLabel": "URL du serveur personnalisé"
}, },
"setup": { "setup": {
"doSetup": "Faire la configuration", "doSetup": "Configurer",
"errorStatus": { "errorStatus": {
"description": "Il semble qu'un ou plusieurs éléments de cette configuration nécessitent votre attention.", "description": "Il semble qu'un ou plusieurs éléments de cette configuration nécessitent votre attention.",
"title": "Quelque chose nécessite 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": { "items": {
"default": "Configuration par défaut", "default": "Configuration par défaut",
"extension": "Extension", "extension": "Extension",
@ -488,7 +490,7 @@
}, },
"unsetStatus": { "unsetStatus": {
"description": "Pour commencer le processus de configuration, veuillez cliquer sur le bouton à droite.", "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", "title": "Connexions",
@ -515,9 +517,9 @@
"info": { "info": {
"appVersion": "Version de l'application", "appVersion": "Version de l'application",
"backendUrl": "URL de Backend", "backendUrl": "URL de Backend",
"backendVersion": "Version de la Backend", "backendVersion": "Version du Backend",
"hostname": "Nom d'hôte", "hostname": "Nom d'hôte",
"insecure": "Insécure", "insecure": "Non sécurisé",
"notLoggedIn": "Vous n'êtes pas connecté", "notLoggedIn": "Vous n'êtes pas connecté",
"secure": "Sécurisé", "secure": "Sécurisé",
"title": "Informations sur l'application", "title": "Informations sur l'application",

View File

@ -116,7 +116,10 @@
"failed": "Error ao encontrar contido... intentao de novo!", "failed": "Error ao encontrar contido... intentao de novo!",
"loading": "Cargando...", "loading": "Cargando...",
"noResults": "Non atopamos nada!", "noResults": "Non atopamos nada!",
"placeholder": "Que che gustaría ver?", "placeholder": {
"default": "Que che gustaría ver?",
"extra": []
},
"sectionTitle": "Resultados da busca" "sectionTitle": "Resultados da busca"
}, },
"titles": { "titles": {
@ -128,15 +131,11 @@
}, },
"morning": { "morning": {
"default": "Que che gustaría ver esta mañá?", "default": "Que che gustaría ver esta mañá?",
"extra": [ "extra": ["Escoitei que “Antes del amanecer” é boa"]
"Escoitei que “Antes del amanecer” é boa"
]
}, },
"night": { "night": {
"default": "Que che gustaría ver esta noite?", "default": "Que che gustaría ver esta noite?",
"extra": [ "extra": ["Canso? Escoitei que “El Exorcista” é boa."]
"Canso? Escoitei que “El Exorcista” é boa."
]
} }
} }
}, },
@ -243,10 +242,9 @@
"menus": { "menus": {
"downloads": { "downloads": {
"disclaimer": "As descargas proveñen do provedor. movie-web non ten control sobre as descargas e a súa procedencia.", "disclaimer": "As descargas proveñen do provedor. movie-web non ten control sobre as descargas e a súa procedencia.",
"downloadPlaylist": "Descargar lista",
"downloadSubtitle": "Descargar subtítulos actuais", "downloadSubtitle": "Descargar subtítulos actuais",
"downloadVideo": "Descargar video", "downloadVideo": "Descargar video",
"hlsDisclaimer": "As descargas realizanse directamente dende o proovedor. movie-web non ten control sobre como se xestionan as descargas. Ten en conta que estás a descargar unha lista de reproducción HLS, dirixidos a usuarios familiarizados coa transmisión multimedia avanzada.", "hlsDisclaimer": "As descargas realizanse directamente dende o proovedor. movie-web non ten control sobre como se xestionan as descargas. <br /><br />Ten en conta que estás a descargar unha lista de reproducción HLS, <bold>non está recomendado instalalos se non estás familiarizado con estos sistemas de contidos avanzados</bold> Proba fontes diferentes ou formatos diferentes.",
"onAndroid": { "onAndroid": {
"1": "Para descargar en Android, fai click no botón de descarga e despois, na nova páxina, <bold>mantén presionado</bold>o vídeo e selecciona <bold>gardar</bold>.", "1": "Para descargar en Android, fai click no botón de descarga e despois, na nova páxina, <bold>mantén presionado</bold>o vídeo e selecciona <bold>gardar</bold>.",
"shortTitle": "Descargar / Android", "shortTitle": "Descargar / Android",

View File

@ -116,21 +116,20 @@
"failed": "મીડિયા શોધવામાં નિષ્ફળ, ફરી પ્રયાસ કરો!", "failed": "મીડિયા શોધવામાં નિષ્ફળ, ફરી પ્રયાસ કરો!",
"loading": "લોડ થાય છે...", "loading": "લોડ થાય છે...",
"noResults": "અમે કંઈપણ શોધી શક્યા નથી!", "noResults": "અમે કંઈપણ શોધી શક્યા નથી!",
"placeholder": "તમે શું જોવા માંગો છો?", "placeholder": {
"default": "તમે શું જોવા માંગો છો?",
"extra": []
},
"sectionTitle": "શોધ પરિણામો" "sectionTitle": "શોધ પરિણામો"
}, },
"titles": { "titles": {
"day": { "day": {
"default": "તમે આ બપોરે શું જોવા માંગો છો?", "default": "તમે આ બપોરે શું જોવા માંગો છો?",
"extra": [ "extra": ["સાહસિક લાગે છે? જુરાસિક પાર્ક યોગ્ય પસંદગી હોઈ શકે છે."]
"સાહસિક લાગે છે? જુરાસિક પાર્ક યોગ્ય પસંદગી હોઈ શકે છે."
]
}, },
"morning": { "morning": {
"default": "તમે આ સવારે શું જોવા માંગો છો?", "default": "તમે આ સવારે શું જોવા માંગો છો?",
"extra": [ "extra": ["હું સાંભળું છું કે Before Sunrise સારું છે"]
"હું સાંભળું છું કે Before Sunrise સારું છે"
]
}, },
"night": { "night": {
"default": "તમે આજે રાત્રે શું જોવા માંગો છો?", "default": "તમે આજે રાત્રે શું જોવા માંગો છો?",
@ -243,7 +242,6 @@
"menus": { "menus": {
"downloads": { "downloads": {
"disclaimer": "ડાઉનલોડ સીધા પ્રદાતા પાસેથી લેવામાં આવે છે. મૂવી-વેબ ડાઉનલોડ્સ કેવી રીતે પ્રદાન કરવામાં આવે છે તેના પર નિયંત્રણ નથી.", "disclaimer": "ડાઉનલોડ સીધા પ્રદાતા પાસેથી લેવામાં આવે છે. મૂવી-વેબ ડાઉનલોડ્સ કેવી રીતે પ્રદાન કરવામાં આવે છે તેના પર નિયંત્રણ નથી.",
"downloadPlaylist": "પ્લેલિસ્ટ ડાઉનલોડ કરો",
"downloadSubtitle": "વર્તમાન ઉપશીર્ષક ડાઉનલોડ કરો", "downloadSubtitle": "વર્તમાન ઉપશીર્ષક ડાઉનલોડ કરો",
"downloadVideo": "વિડિઓ ડાઉનલોડ કરો", "downloadVideo": "વિડિઓ ડાઉનલોડ કરો",
"hlsDisclaimer": "ડાઉનલોડ સીધા પ્રદાતા પાસેથી લેવામાં આવે છે. કેવી રીતે ડાઉનલોડ્સ પ્રદાન કરવામાં આવે છે તેના પર મૂવી-વેબનું નિયંત્રણ નથી.<br /><br />કૃપા કરીને નોંધ કરો કે તમે HLS પ્લેલિસ્ટ ડાઉનલોડ કરી રહ્યાં છો, <bold>જો તમે અદ્યતન સ્ટ્રીમિંગ ફોર્મેટથી પરિચિત ન હોવ તો તેને ડાઉનલોડ કરવાની ભલામણ કરવામાં આવતી નથી</bold>. વિવિધ ફોર્મેટ માટે વિવિધ સ્ત્રોતો અજમાવો.", "hlsDisclaimer": "ડાઉનલોડ સીધા પ્રદાતા પાસેથી લેવામાં આવે છે. કેવી રીતે ડાઉનલોડ્સ પ્રદાન કરવામાં આવે છે તેના પર મૂવી-વેબનું નિયંત્રણ નથી.<br /><br />કૃપા કરીને નોંધ કરો કે તમે HLS પ્લેલિસ્ટ ડાઉનલોડ કરી રહ્યાં છો, <bold>જો તમે અદ્યતન સ્ટ્રીમિંગ ફોર્મેટથી પરિચિત ન હોવ તો તેને ડાઉનલોડ કરવાની ભલામણ કરવામાં આવતી નથી</bold>. વિવિધ ફોર્મેટ માટે વિવિધ સ્ત્રોતો અજમાવો.",

View File

@ -116,27 +116,24 @@
"failed": "לא הצלחנו למצוא מדיה, נסה שוב!", "failed": "לא הצלחנו למצוא מדיה, נסה שוב!",
"loading": "טוען...", "loading": "טוען...",
"noResults": "לא יכולנו למצוא כלום!", "noResults": "לא יכולנו למצוא כלום!",
"placeholder": "במה תרצה לצפות?", "placeholder": {
"default": "במה תרצה לצפות?",
"extra": []
},
"sectionTitle": "תוצאות חיפוש" "sectionTitle": "תוצאות חיפוש"
}, },
"titles": { "titles": {
"day": { "day": {
"default": "במה תרצה לצפות באחר צהריים זה?", "default": "במה תרצה לצפות באחר צהריים זה?",
"extra": [ "extra": ["מרגיש הרפתקני? פארק היורה עשוי להיות הבחירה המושלמת."]
"מרגיש הרפתקני? פארק היורה עשוי להיות הבחירה המושלמת."
]
}, },
"morning": { "morning": {
"default": "במה תרצה לצפות הבוקר?", "default": "במה תרצה לצפות הבוקר?",
"extra": [ "extra": ["שמעתי שלפני הזריחה זה סרט טוב"]
"שמעתי שלפני הזריחה זה סרט טוב"
]
}, },
"night": { "night": {
"default": "במה תרצה לצפות הלילה?", "default": "במה תרצה לצפות הלילה?",
"extra": [ "extra": ["רוצה לישון? הפיג'מות היא בחירה מצויינת."]
"רוצה לישון? הפיג'מות היא בחירה מצויינת."
]
} }
} }
}, },
@ -243,7 +240,6 @@
"menus": { "menus": {
"downloads": { "downloads": {
"disclaimer": "ההורדות נלקחות ישירות מהספק. ל-movie-web אין שליטה על האופן שבו מסופקות ההורדות.", "disclaimer": "ההורדות נלקחות ישירות מהספק. ל-movie-web אין שליטה על האופן שבו מסופקות ההורדות.",
"downloadPlaylist": "הורד פלייליסט",
"downloadSubtitle": "הורד את הכתוביות הנוכחיות", "downloadSubtitle": "הורד את הכתוביות הנוכחיות",
"downloadVideo": "הורד וידאו", "downloadVideo": "הורד וידאו",
"hlsDisclaimer": "ההורדות נלקחות ישירות מהספק. ל-movie-web אין שליטה על האופן שבו מסופקות ההורדות.<br /><br />שים לב שאתה מוריד רשימת השמעה של HLS, <bold>לא מומלץ להוריד אם אינך מכיר פורמטים מתקדמים של סטרימינג </bold>. נסה מקורות שונים עבור פורמטים שונים.", "hlsDisclaimer": "ההורדות נלקחות ישירות מהספק. ל-movie-web אין שליטה על האופן שבו מסופקות ההורדות.<br /><br />שים לב שאתה מוריד רשימת השמעה של HLS, <bold>לא מומלץ להוריד אם אינך מכיר פורמטים מתקדמים של סטרימינג </bold>. נסה מקורות שונים עבור פורמטים שונים.",

View File

@ -57,6 +57,8 @@
}, },
"host": "आप <0>{{hostname}}</0> से कनेक्ट हो रहे हैं - खाता बनाने से पहले कृपया पुष्टि करें कि आप इस पर भरोसा करते हैं", "host": "आप <0>{{hostname}}</0> से कनेक्ट हो रहे हैं - खाता बनाने से पहले कृपया पुष्टि करें कि आप इस पर भरोसा करते हैं",
"no": "पीछे जाये", "no": "पीछे जाये",
"noHost": "सर्वर कॉन्फ़िगर नहीं किया गया है, इसलिए आप खाता नहीं बना सकते",
"noHostTitle": "सर्वर कॉन्फ़िगर नहीं है!",
"title": "क्या आपको इस सर्वर पर भरोसा है?", "title": "क्या आपको इस सर्वर पर भरोसा है?",
"yes": "मुझे इस सर्वर पर भरोसा है" "yes": "मुझे इस सर्वर पर भरोसा है"
}, },
@ -116,7 +118,15 @@
"failed": "मीडिया ढूंढने में विफल, पुनः प्रयास करें!", "failed": "मीडिया ढूंढने में विफल, पुनः प्रयास करें!",
"loading": "लोड हो रहा है..।", "loading": "लोड हो रहा है..।",
"noResults": "हमें कुछ नहीं मिला!", "noResults": "हमें कुछ नहीं मिला!",
"placeholder": "क्या देखना चाहते हो?", "placeholder": {
"default": "क्या देखना चाहते हो?",
"extra": [
"आप क्या अन्वेषण करना चाहते हैं?",
"आपकी वॉचलिस्ट में क्या है?",
"आपकी पसंदीदा फिल्म कौनसी है?",
"आपकी पसंदीदा सीरीज़ कौन सी है?"
]
},
"sectionTitle": "खोज के परिणाम" "sectionTitle": "खोज के परिणाम"
}, },
"titles": { "titles": {
@ -242,8 +252,8 @@
}, },
"menus": { "menus": {
"downloads": { "downloads": {
"copyHlsPlaylist": "HLS प्लेलिस्ट लिंक कॉपी करें",
"disclaimer": "डाउनलोड सीधे प्रदाता से लिए जाते हैं। मूवी-वेब का इस पर नियंत्रण नहीं है कि डाउनलोड कैसे प्रदान किए जाते हैं।", "disclaimer": "डाउनलोड सीधे प्रदाता से लिए जाते हैं। मूवी-वेब का इस पर नियंत्रण नहीं है कि डाउनलोड कैसे प्रदान किए जाते हैं।",
"downloadPlaylist": "प्लेलिस्ट डाउनलोड करें",
"downloadSubtitle": "वर्तमान उपशीर्षक डाउनलोड करें", "downloadSubtitle": "वर्तमान उपशीर्षक डाउनलोड करें",
"downloadVideo": "वीडियो डाउनलोड करें", "downloadVideo": "वीडियो डाउनलोड करें",
"hlsDisclaimer": "डाउनलोड सीधे प्रदाता से लिए जाते हैं। मूवी-वेब का इस पर नियंत्रण नहीं है कि डाउनलोड कैसे प्रदान किए जाते हैं।<br /><br />कृपया ध्यान दें कि आप एक HLS प्लेलिस्ट डाउनलोड कर रहे हैं, <bold>यदि आप उन्नत स्ट्रीमिंग प्रारूपों से परिचित नहीं हैं तो इसे डाउनलोड करने की अनुशंसा नहीं की जाती है</bold>। विभिन्न प्रारूपों के लिए अलग-अलग स्रोत आज़माएँ।", "hlsDisclaimer": "डाउनलोड सीधे प्रदाता से लिए जाते हैं। मूवी-वेब का इस पर नियंत्रण नहीं है कि डाउनलोड कैसे प्रदान किए जाते हैं।<br /><br />कृपया ध्यान दें कि आप एक HLS प्लेलिस्ट डाउनलोड कर रहे हैं, <bold>यदि आप उन्नत स्ट्रीमिंग प्रारूपों से परिचित नहीं हैं तो इसे डाउनलोड करने की अनुशंसा नहीं की जाती है</bold>। विभिन्न प्रारूपों के लिए अलग-अलग स्रोत आज़माएँ।",

View File

@ -115,7 +115,10 @@
"failed": "Gagal menemukan media, coba lagi!", "failed": "Gagal menemukan media, coba lagi!",
"loading": "Memuat...", "loading": "Memuat...",
"noResults": "Kami tidak dapat menemukan apapun!", "noResults": "Kami tidak dapat menemukan apapun!",
"placeholder": "Apa yang ingin anda tonton?", "placeholder": {
"default": "Apa yang ingin anda tonton?",
"extra": []
},
"sectionTitle": "Hasil pencarian" "sectionTitle": "Hasil pencarian"
}, },
"titles": { "titles": {
@ -127,15 +130,11 @@
}, },
"morning": { "morning": {
"default": "Apa yang ingin anda tonton pagi ini?", "default": "Apa yang ingin anda tonton pagi ini?",
"extra": [ "extra": ["Kayaknya film Before Sunrise bagus deh"]
"Kayaknya film Before Sunrise bagus deh"
]
}, },
"night": { "night": {
"default": "Apa yang ingin anda tonton malam ini?", "default": "Apa yang ingin anda tonton malam ini?",
"extra": [ "extra": ["Capek? Katanya The Exocist rekomended."]
"Capek? Katanya The Exocist rekomended."
]
} }
} }
}, },
@ -179,7 +178,6 @@
"menus": { "menus": {
"downloads": { "downloads": {
"disclaimer": "Tautan unduhan diambil langsung dari penyedia pihak ketiga. Aplikasi ini tidak memiliki kendali bagaimana unduhan disediakan.", "disclaimer": "Tautan unduhan diambil langsung dari penyedia pihak ketiga. Aplikasi ini tidak memiliki kendali bagaimana unduhan disediakan.",
"downloadPlaylist": "Unduh playlist",
"downloadSubtitle": "Unduh subtitle", "downloadSubtitle": "Unduh subtitle",
"downloadVideo": "Unduh media", "downloadVideo": "Unduh media",
"hlsDisclaimer": "Tautan unduhan diambil langsung dari penyedia pihak ketiga. Aplikasi ini tidak memiliki kendali bagaimana unduhan disediakan. Harap diperhatikan, anda akan mengunduh HLS playlist, media ini hanya ditunjukan bagi pengguna tingkat lanjut.", "hlsDisclaimer": "Tautan unduhan diambil langsung dari penyedia pihak ketiga. Aplikasi ini tidak memiliki kendali bagaimana unduhan disediakan. Harap diperhatikan, anda akan mengunduh HLS playlist, media ini hanya ditunjukan bagi pengguna tingkat lanjut.",

View File

@ -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"
} }
@ -108,7 +118,15 @@
"failed": "Mostókst að finna miðil, reyndu aftur!", "failed": "Mostókst að finna miðil, reyndu aftur!",
"loading": "Hlaðið...", "loading": "Hlaðið...",
"noResults": "Við gátum ekki fundið neitt!", "noResults": "Við gátum ekki fundið neitt!",
"placeholder": "Hvað viltu horfa á?", "placeholder": {
"default": "Hvað viltu horfa á?",
"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"
}, },
"titles": { "titles": {
@ -192,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ð",
@ -233,8 +252,8 @@
}, },
"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.",
"downloadPlaylist": "Hlaða niður spilarlista",
"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",
"hlsDisclaimer": "Niðurhalningar eru teknar beint frá heimildini. movie-web hefur engan kraft yfir hvernig niðurhalningarnar eru gefnar.<br /><br />Vinsamlegast fattaðu að þú ert að niðurhala HLS spilunarlista, <bold>það er ekki mælt með að niðurhala ef þú kannt ekki mikið á háþróað streymis sniði.</bold>. Reyndu aðrar heimildir fyrir önnur sniði.", "hlsDisclaimer": "Niðurhalningar eru teknar beint frá heimildini. movie-web hefur engan kraft yfir hvernig niðurhalningarnar eru gefnar.<br /><br />Vinsamlegast fattaðu að þú ert að niðurhala HLS spilunarlista, <bold>það er ekki mælt með að niðurhala ef þú kannt ekki mikið á háþróað streymis sniði.</bold>. Reyndu aðrar heimildir fyrir önnur sniði.",
@ -374,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!",
@ -385,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",
@ -484,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": {

View File

@ -1,6 +1,6 @@
{ {
"about": { "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", "faqTitle": "Domande comuni",
"q1": { "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.", "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.",
@ -30,14 +30,14 @@
"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 proprio 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",
"passphraseLabel": "Frase password di 12 parole", "passphraseLabel": "Frase password di 12 parole",
"passphrasePlaceholder": "Frase password", "passphrasePlaceholder": "Frase password",
"submit": "Accedi", "submit": "Accedi",
"title": "Accedi al proprio account", "title": "Accedi al vostro account",
"validationError": "Frase password incompleta o sbagliata" "validationError": "Frase password incompleta o sbagliata"
}, },
"register": { "register": {
@ -57,11 +57,13 @@
}, },
"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"
}, },
"verify": { "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", "invalidData": "I dati non sono validi",
"noMatch": "Frase password non corrisponde", "noMatch": "Frase password non corrisponde",
"passphraseLabel": "La propria frase password di 12 parole", "passphraseLabel": "La propria frase password di 12 parole",
@ -116,7 +118,15 @@
"failed": "Impossibile trovare i media, riprova!", "failed": "Impossibile trovare i media, riprova!",
"loading": "Caricamento...", "loading": "Caricamento...",
"noResults": "Non abbiamo trovato nulla!", "noResults": "Non abbiamo trovato nulla!",
"placeholder": "Cosa vuoi guardare?", "placeholder": {
"default": "Cosa vuoi guardare?",
"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" "sectionTitle": "Risultati della ricerca"
}, },
"titles": { "titles": {
@ -176,11 +186,11 @@
"extension": { "extension": {
"back": "Torna indietro", "back": "Torna indietro",
"explainer": "Utilizzando l'estensione del browser, è possibile ottenere i stream ottimi che abbiamo da offrire. Basta una semplice installazione.", "explainer": "Utilizzando l'estensione del browser, è possibile ottenere i stream ottimi che abbiamo da offrire. Basta una semplice installazione.",
"explainerIos": "Purtroppo, l'estensione del browser non è supportato su IOS, premere <bold>Torna indietro</bold> per scegliere un'altra opzione.", "explainerIos": "Purtroppo, l'estensione del browser non è supportato su iOS, premere <bold>Torna indietro</bold> per scegliere un'altra opzione.",
"extensionHelp": "Se avete installato l'estensione ma non viene rilevata. <bold>Aprire l'estensione attraverso il menu delle estensioni del browser</bold> e seguire i passaggi sullo schermo.", "extensionHelp": "Se avete installato l'estensione ma non viene rilevata. <bold>Apri l'estensione attraverso il menu delle estensioni del browser</bold> e seguire i passaggi sullo schermo.",
"linkChrome": "Installa l'estensione su Chrome", "linkChrome": "Installa l'estensione su Chrome",
"linkFirefox": "Installa l'estensione su Firefox", "linkFirefox": "Installa l'estensione su Firefox",
"notDetecting": "Installato su Chrome ma non viene visualizzato? Prova a ricaricare la pagina!", "notDetecting": "Installato su Chrome ma il sito non lo rileva? Prova a ricaricare la pagina!",
"notDetectingAction": "Ricarica pagina", "notDetectingAction": "Ricarica pagina",
"status": { "status": {
"disallowed": "L'estensione non è attivato per questa pagina", "disallowed": "L'estensione non è attivato per questa pagina",
@ -208,7 +218,7 @@
"title": "Creiamo un nuovo proxy" "title": "Creiamo un nuovo proxy"
}, },
"start": { "start": {
"explainer": "Per ottenere i migliori streaming possibili. È necessario scegliere il metodo di streaming da utilizzare.", "explainer": "Per ottenere i migliori streaming possibili, è necessario scegliere il metodo di streaming da utilizzare.",
"options": { "options": {
"default": { "default": {
"text": "Non voglio stream di buona qualità, <0 /> <1>usa setup predefinita</1>" "text": "Non voglio stream di buona qualità, <0 /> <1>usa setup predefinita</1>"
@ -242,8 +252,8 @@
}, },
"menus": { "menus": {
"downloads": { "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.", "disclaimer": "I download vengono effettuati direttamente dal provider. movie-web non ha il controllo sulle modalità di fornitura dei download.",
"downloadPlaylist": "Scarica playlist",
"downloadSubtitle": "Scarica sottotitolo attuale", "downloadSubtitle": "Scarica sottotitolo attuale",
"downloadVideo": "Scarica video", "downloadVideo": "Scarica video",
"hlsDisclaimer": "I download vengono effettuati direttamente dal provider. movie-web non ha il controllo sul modo in cui i download vengono forniti.<br /><br />Nota che se state scaricando un playlist HLS, <bold>non è raccomandato di scaricare se non si ha familiarità con i formati di streaming avanzati</bold>. Prova altri sorgenti per diversi formati.", "hlsDisclaimer": "I download vengono effettuati direttamente dal provider. movie-web non ha il controllo sul modo in cui i download vengono forniti.<br /><br />Nota che se state scaricando un playlist HLS, <bold>non è raccomandato di scaricare se non si ha familiarità con i formati di streaming avanzati</bold>. Prova altri sorgenti per diversi formati.",
@ -390,9 +400,9 @@
}, },
"turnstile": { "turnstile": {
"description": "Verifica che siate umani completando il Captcha sulla destra. Questo serve a mantenere movie-web sicuro!", "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.", "title": "Dobbiamo verificare che lei sia umano.",
"verifyingHumanity": "verificare il proprio umanità..." "verifyingHumanity": "Verificare la vostra umanità..."
} }
}, },
"screens": { "screens": {
@ -401,12 +411,12 @@
"title": "DMCA" "title": "DMCA"
}, },
"loadingApp": "Caricamento dell'applicazione", "loadingApp": "Caricamento dell'applicazione",
"loadingUser": "Caricamento del proprio profilo", "loadingUser": "Caricamento del vostro profilo",
"loadingUserError": { "loadingUserError": {
"logout": "Esci", "logout": "Esci",
"reset": "Ripristino del server personalizzato", "reset": "Ripristino del server personalizzato",
"text": "Impossibile caricare il proprio profilo", "text": "Impossibile caricare il vostro profilo",
"textWithReset": "Impossibile caricare il proprio profile dal server personalizzato, vorresti ripristinare il server predefinito?" "textWithReset": "Impossibile caricare il vostro profile dal server personalizzato, vorresti ripristinare il server predefinito?"
}, },
"migration": { "migration": {
"failed": "Impossible migrare i propri dati.", "failed": "Impossible migrare i propri dati.",
@ -425,7 +435,7 @@
"delete": { "delete": {
"button": "Eliminare l'account", "button": "Eliminare l'account",
"confirmButton": "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?", "confirmTitle": "Sei sicuro?",
"text": "Questa azione è irreversibile. Tutti i propri dati verranno eliminati e non sarà possibile recuperare nulla.", "text": "Questa azione è irreversibile. Tutti i propri dati verranno eliminati e non sarà possibile recuperare nulla.",
"title": "Eliminare l'account" "title": "Eliminare l'account"

View File

@ -1,7 +1,7 @@
{ {
"about": { "about": {
"description": "movie-webは、ウェブアプリケーションで、インターネットを検索してストリームを見つけます。チームは、コンテンツの消費において主にミニマリストなアプローチを目指しています。", "description": "movie-webは、ウェブアプリケーションで、インターネットを検索してストリームを見つけます。チームは、コンテンツの消費において主にミニマリストなアプローチを目指しています。",
"faqTitle": "一般的な質問", "faqTitle": "よくある質問",
"q1": { "q1": {
"body": "movie-webはいかなるコンテンツもホストしていません。視聴するために何かをクリックすると、選択したメディアがインターネットで検索されますローディング画面と「ビデオソース」タブでは、使用しているソースが表示されます。メディアは決してmovie-webにアップロードされず、すべてがこの検索メカニズムを通じて行われます。", "body": "movie-webはいかなるコンテンツもホストしていません。視聴するために何かをクリックすると、選択したメディアがインターネットで検索されますローディング画面と「ビデオソース」タブでは、使用しているソースが表示されます。メディアは決してmovie-webにアップロードされず、すべてがこの検索メカニズムを通じて行われます。",
"title": "コンテンツはどこから来ていますか?" "title": "コンテンツはどこから来ていますか?"
@ -25,11 +25,36 @@
"deviceNameLabel": "デバイス名", "deviceNameLabel": "デバイス名",
"deviceNamePlaceholder": "個人用の電話", "deviceNamePlaceholder": "個人用の電話",
"generate": { "generate": {
"description": "パスフレーズはユーザー名とパスワードとして機能します。アカウントにログインする際には必ず入力する必要があるため、安全に保管してください。" "description": "パスフレーズはユーザー名とパスワードとして機能します。アカウントにログインする際には必ず入力する必要があるため、安全に保管してください。",
"next": "パスフレーズを保存しました",
"passphraseFrameLabel": "パスフレーズ",
"title": "あなたのパスフレーズ"
}, },
"hasAccount": "既にアカウントをお持ちですか? <0>ログインはこちら</0>",
"login": { "login": {
"description": "ログインするにはパスフレーズを入力してください",
"deviceLengthError": "デバイス名を入力してください",
"passphraseLabel": "12単語のパスフレーズ",
"passphrasePlaceholder": "パスフレーズ",
"submit": "ログイン", "submit": "ログイン",
"title": "自分の口座にログインする" "title": "自分の口座にログインする",
"validationError": "パスワードが間違っています"
},
"register": {
"information": {
"color1": "プロフィールカラー1",
"color2": "プロフィールカラー2",
"header": "デバイス名を入力し、色とユーザーアイコンを選んでください",
"icon": "ユーザーアイコン",
"next": "次へ",
"title": "アカウント情報"
}
},
"trust": {
"failed": {
"text": "正しく設定しましたか?",
"title": "サーバーへの接続に失敗しました"
}
} }
}, },
"footer": { "footer": {
@ -51,7 +76,10 @@
"allResults": "それがすべてです!", "allResults": "それがすべてです!",
"loading": "読み込み中...", "loading": "読み込み中...",
"noResults": "見つかりませんでした!", "noResults": "見つかりませんでした!",
"placeholder": "どんな映画を見たい?", "placeholder": {
"default": "どんな映画を見たい?",
"extra": []
},
"sectionTitle": "検索結果" "sectionTitle": "検索結果"
}, },
"titles": { "titles": {

View File

@ -82,12 +82,21 @@
"disclaimer": "면책 조항", "disclaimer": "면책 조항",
"disclaimerText": "movie-web은 어떠한 파일도 호스팅하지 않으며, 제3자 서비스에 대한 링크만 제공합니다. 법적 문제는 파일 호스트 및 제공업체와 해결해야 합니다. 동영상 제공업체가 표시하는 미디어 파일에 대해 movie-web은 책임을 지지 않습니다." "disclaimerText": "movie-web은 어떠한 파일도 호스팅하지 않으며, 제3자 서비스에 대한 링크만 제공합니다. 법적 문제는 파일 호스트 및 제공업체와 해결해야 합니다. 동영상 제공업체가 표시하는 미디어 파일에 대해 movie-web은 책임을 지지 않습니다."
}, },
"links": {
"discord": "디스코드",
"dmca": "DMCA",
"github": "깃허브"
},
"tagline": "이 오픈 소스 스트리밍 앱으로 좋아하는 프로그램과 영화를 시청하세요." "tagline": "이 오픈 소스 스트리밍 앱으로 좋아하는 프로그램과 영화를 시청하세요."
}, },
"global": { "global": {
"name": "무비-웹",
"pages": { "pages": {
"about": "소개", "about": "소개",
"dmca": "DMCA",
"login": "로그인", "login": "로그인",
"onboarding": "기본 구성",
"pagetitle": "{{title}} - movie-web",
"register": "회원가입", "register": "회원가입",
"settings": "설정" "settings": "설정"
} }
@ -107,7 +116,10 @@
"failed": "미디어 검색에 실패하였습니다, 다시 시도해주세요!", "failed": "미디어 검색에 실패하였습니다, 다시 시도해주세요!",
"loading": "로딩...", "loading": "로딩...",
"noResults": "검색결과가 없습니다!", "noResults": "검색결과가 없습니다!",
"placeholder": "무엇을 보고 싶으신가요?", "placeholder": {
"default": "무엇을 보고 싶으신가요?",
"extra": []
},
"sectionTitle": "검색 결과" "sectionTitle": "검색 결과"
}, },
"titles": { "titles": {
@ -119,19 +131,16 @@
}, },
"morning": { "morning": {
"default": "오늘 아침에 무엇을 보고 싶으신가요?", "default": "오늘 아침에 무엇을 보고 싶으신가요?",
"extra": [ "extra": ["Before Sunrise가 좋다고 들었어요"]
"Before Sunrise가 좋다고 들었어요"
]
}, },
"night": { "night": {
"default": "오늘 밤에 무엇을 보고 싶으신가요?", "default": "오늘 밤에 무엇을 보고 싶으신가요?",
"extra": [ "extra": ["피곤하신가요? The Exorcist가 좋다고 들었어요."]
"피곤하신가요? The Exorcist가 좋다고 들었어요."
]
} }
} }
}, },
"media": { "media": {
"episodeDisplay": "시즌{{season}} {{episode}}화",
"types": { "types": {
"movie": "영화", "movie": "영화",
"show": "쇼" "show": "쇼"
@ -156,6 +165,69 @@
"message": "쓰레기통 아래, 옷장, 프록시 뒤 등 모든 곳을 찾아보았지만 결국 원하는 페이지를 찾을 수 없었습니다.", "message": "쓰레기통 아래, 옷장, 프록시 뒤 등 모든 곳을 찾아보았지만 결국 원하는 페이지를 찾을 수 없었습니다.",
"title": "해당 페이지를 찾을 수 없습니다" "title": "해당 페이지를 찾을 수 없습니다"
}, },
"onboarding": {
"defaultConfirm": {
"cancel": "취소",
"confirm": "기본 설정 사용",
"description": "기본 설정은 쾌적한 스트리밍 환경을 제공하지 않으므로 다소 시청이 불편할 수 있습니다.",
"title": "정말 진행할까요?"
},
"extension": {
"back": "돌아가기",
"explainer": "확장 프로그램을 이용하므로서, 저희가 제공해야 할 최고 화질의 영상을 시청할 수 있습니다. 간단한 설치 한 번으로요.",
"explainerIos": "죄송하지만, 해당 확장 프로그램은 애플 모바일 환경에서 지원하지 않습니다, <bold> 돌아가기</bold>을 눌러 다른 옵션을 선택해 주세요.",
"extensionHelp": "확장 프로그램을 설치했지만 인식되지 않는다면, <bold>브라우저의 확장 프로그램 메뉴를 열어 해당 확장 프로그램을 클릭한 후</bold> 화면의 안내를 따라주세요.",
"linkChrome": "크롬 확장 프로그램 설치",
"linkFirefox": "파이어폭스 확장 프로그램 설치",
"notDetecting": "크롬 환경에서 설치했지만 사이트가 인식하지 못하나요? 새로고침을 시도해 보세요!",
"notDetectingAction": "새로고침",
"status": {
"disallowed": "이 페이지는 확장 프로그램 사용이 불가능합니다",
"disallowedAction": "확장 프로그램 사용",
"failed": "상태 요청 실패",
"loading": "확장 프로그램 설치를 기다리는 중입니다",
"outdated": "확장 프로그램의 버전이 오래됨",
"success": "확장 프로그램 정상 작동 중!"
},
"submit": "계속",
"title": "확장 프로그램으로 시작해 봅시다"
},
"proxy": {
"back": "돌아가기",
"explainer": "프록시 방식을 통하여, 직접 운영하는 프록시를 만들어 훌륭한 화질의 영상을 시청할 수 있습니다.",
"input": {
"errorConnection": "프록시에 연결할 수 없음",
"errorInvalidUrl": "유효하지 않은 URL",
"errorNotProxy": "프록시가 아닌 웹사이트가 입력되었습니다",
"label": "프록시 URL",
"placeholder": "https://"
},
"link": "프록시 만드는 방법 배우기",
"submit": "프록시 제출",
"title": "새로운 프록시를 만들어 봅시다"
},
"start": {
"explainer": "가장 쾌적한 송출을 위하여 사용하고 싶은 송출 방식을 선택해야 합니다.",
"options": {
"default": {
"text": "화질 좋은 영상을 원하지는 않아요, <0 /><1>기본 설정 사용</1>"
},
"extension": {
"action": "확장 프로그램 설치",
"description": "고화질의 영상을 시청하기 위하여 브라우저 확장 프로그램을 설치해주세요.",
"quality": "최고의 화질",
"title": "브라우저 확장 프로그램"
},
"proxy": {
"action": "프록시 설정",
"description": "단 5분 만에 프록시를 설정하고 쾌적한 송출 환경을 이용하세요.",
"quality": "좋은 화질",
"title": "커스텀 프록시"
}
},
"title": "movie-web의 설정을 진행해 봅시다"
}
},
"overlays": { "overlays": {
"close": "닫기" "close": "닫기"
}, },
@ -170,10 +242,9 @@
"menus": { "menus": {
"downloads": { "downloads": {
"disclaimer": "다운로드는 제공업체에서 직접 가져옵니다. movie-web은 다운로드 제공 방식을 통제할 수 없습니다.", "disclaimer": "다운로드는 제공업체에서 직접 가져옵니다. movie-web은 다운로드 제공 방식을 통제할 수 없습니다.",
"downloadPlaylist": "플레이리스트 다운로드",
"downloadSubtitle": "현재 자막 다운로드", "downloadSubtitle": "현재 자막 다운로드",
"downloadVideo": "영상 다운로드", "downloadVideo": "영상 다운로드",
"hlsDisclaimer": "다운로드는 제공업체에서 직접 가져옵니다. movie-web은 다운로드 제공 방식을 통제할 수 없습니다. 고급 멀티미디어 스트리밍에 익숙한 사용자를 위한 HLS 재생 목록을 다운로드하고 있다는 점에 유의하세요.", "hlsDisclaimer": "다운로드는 제공업체에서 직접 가져옵니다. movie-web은 다운로드 제공 방식을 통제할 수 없습니다.<br /><br />사용자께서는 HLS 플레이리스트를 다운로드 하고 있으며, <bold>이는 고급 스트리밍 포맷의 사용에 익숙하지 않은 사용자에게는 추천하지 않는다는 것을 유의해주세요<bold>. 혹은 다른 소스와 포맷을 이용하여 보세요.",
"onAndroid": { "onAndroid": {
"1": "Android에서 다운로드하려면 다운로드 버튼을 클릭한 다음 새 페이지에서 동영상을 <bold>길게 눌러</bold>저장을 선택합니다.", "1": "Android에서 다운로드하려면 다운로드 버튼을 클릭한 다음 새 페이지에서 동영상을 <bold>길게 눌러</bold>저장을 선택합니다.",
"shortTitle": "다운로드 / Android", "shortTitle": "다운로드 / Android",
@ -194,9 +265,11 @@
"episodes": { "episodes": {
"button": "회차", "button": "회차",
"emptyState": "이번 시즌에는 에피소드가 없으니 나중에 다시 확인하세요!", "emptyState": "이번 시즌에는 에피소드가 없으니 나중에 다시 확인하세요!",
"episodeBadge": "{{episode}}화",
"loadingError": "시즌 로딩중 에러 발생", "loadingError": "시즌 로딩중 에러 발생",
"loadingList": "로딩...", "loadingList": "로딩...",
"loadingTitle": "로딩..." "loadingTitle": "로딩...",
"unairedEpisodes": "해당 시즌의 다수의 에피소드들이 아직 방송되지 않은 이유로 비공개 처리되었습니다."
}, },
"playback": { "playback": {
"speedLabel": "재생 속도", "speedLabel": "재생 속도",
@ -248,6 +321,21 @@
} }
}, },
"metadata": { "metadata": {
"api": {
"text": "API 메타데이터를 불러올 수 없었습니다. 인터넷 연결 상태를 확인해 주세요.",
"title": "API 메타데이터을 읽어오지 못했습니다"
},
"dmca": {
"badge": "삭제됨",
"text": "이 미디어는 저작권 침해 및 신고로 인하여 더 이상 이용이 불가합니다.",
"title": "미디어가 삭제됨"
},
"extensionPermission": {
"badge": "권한 없음",
"button": "확장 프로그램 사용",
"text": "브라우저의 확장 프로그램을 사용하기 위해서는 사용자의 권한이 필요합니다.",
"title": "확장 프로그램 설정"
},
"failed": { "failed": {
"badge": "실패함", "badge": "실패함",
"homeButton": "메인으로 돌아가기", "homeButton": "메인으로 돌아가기",
@ -293,12 +381,22 @@
} }
}, },
"time": { "time": {
"remaining": "{{timeLeft}} 남음 • {{timeFinished, datetime}}에 종료" "regular": "{{timeWatched}} / {{duration}}",
"remaining": "{{timeLeft}} 남음 • {{timeFinished, datetime}}에 종료",
"shortRegular": "{{timeWatched}}",
"shortRemaining": "-{{timeLeft}}"
},
"turnstile": {
"description": "우측에 있는 캡챠를 통해 인간임을 인증해주새요. 이것은 무비-웹의 안전을 위한 것입니다!",
"error": "인류애를 인증하는 데에 실패했습니다. 다시 시도해주새요.",
"title": "당신이 로봇이 아닌지 확인해야 합니다.",
"verifyingHumanity": "인류애 인증 중..."
} }
}, },
"screens": { "screens": {
"dmca": { "dmca": {
"text": "movie-web의 DMCA 문의 페이지에 오신 것을 환영합니다! 당사는 지적 재산권을 존중하며 저작권 관련 문제를 신속하게 해결하고자 합니다. 귀하의 저작권이 있는 저작물이 당사 플랫폼에서 부적절하게 사용되었다고 생각되는 경우, 아래 이메일로 자세한 DMCA 통지를 보내주시기 바랍니다. 저작권이 있는 자료에 대한 설명, 연락처 정보, 선의의 신념을 담은 진술서를 포함하시기 바랍니다. 당사는 이러한 문제를 신속하게 해결하기 위해 최선을 다하고 있으며, movie-web을 창의성과 저작권을 존중하는 공간으로 유지하는 데 협조해 주셔서 감사합니다." "text": "movie-web의 DMCA 문의 페이지에 오신 것을 환영합니다! 당사는 지적 재산권을 존중하며 저작권 관련 문제를 신속하게 해결하고자 합니다. 귀하의 저작권이 있는 저작물이 당사 플랫폼에서 부적절하게 사용되었다고 생각되는 경우, 아래 이메일로 자세한 DMCA 통지를 보내주시기 바랍니다. 저작권이 있는 자료에 대한 설명, 연락처 정보, 선의의 신념을 담은 진술서를 포함하시기 바랍니다. 당사는 이러한 문제를 신속하게 해결하기 위해 최선을 다하고 있으며, movie-web을 창의성과 저작권을 존중하는 공간으로 유지하는 데 협조해 주셔서 감사합니다.",
"title": "DMCA"
}, },
"loadingApp": "애플리케이션 로딩 중", "loadingApp": "애플리케이션 로딩 중",
"loadingUser": "프로필 로 중", "loadingUser": "프로필 로 중",
@ -365,19 +463,50 @@
}, },
"connections": { "connections": {
"server": { "server": {
"description": "사용자 지정 백엔드에 연결하여 데이터를 저장하려면 이 기능을 활성화하고 URL을 입력합니다.", "description": "사용자 지정 백엔드에 연결하여 데이터를 저장하려면 이 기능을 활성화하고 URL을 입력합니다. <0>Instructions.</0>",
"label": "사용자 지정 서버", "label": "사용자 지정 서버",
"urlLabel": "사용자 지정 서버 URL" "urlLabel": "사용자 지정 서버 URL"
}, },
"setup": {
"doSetup": "설정 진행하기",
"errorStatus": {
"description": "아직 완료되지 않은 설정이 있는 것 같습니다.",
"title": "완료되지 않은 설정이 있습니다"
},
"itemError": "설정에 문제가 발생하였습니다. 설정을 다시 진행하여 주세요.",
"items": {
"default": "기본 설정",
"extension": "확장 프로그램",
"proxy": "커스텀 프록시"
},
"redoSetup": "설정을 다시하기",
"successStatus": {
"description": "찜한 리스트의 영상을 시청할 모든 준비가 끝났습니다.",
"title": "모든 설정이 완료되었습니다!"
},
"unsetStatus": {
"description": "기본 구성을 진행하기 위하여 오른쪽 버튼을 눌러주세요.",
"title": "기본 구성이 완료되지 않았습니다"
}
},
"title": "연결", "title": "연결",
"workers": { "workers": {
"addButton": "새 워커 추가하기", "addButton": "새 워커 추가하기",
"description": "애플리케이션이 작동하도록 하기 위해 모든 트래픽은 프록시를 통해 라우팅됩니다. 직접 워커를 사용하려면 이 옵션을 사용 설정하세요.", "description": "애플리케이션이 작동하도록 하기 위해 모든 트래픽은 프록시를 통해 라우팅됩니다. 직접 워커를 사용하려면 이 옵션을 사용 설정하세요. <0>Instructions.</0>",
"emptyState": "아직 워커가 없는 경우 아래에서 워커를 추가하세요", "emptyState": "아직 워커가 없는 경우 아래에서 워커를 추가하세요",
"label": "사용자 지정 프록시 워커 사용", "label": "사용자 지정 프록시 워커 사용",
"urlLabel": "워커 URL" "urlLabel": "워커 URL",
"urlPlaceholder": "https://"
} }
}, },
"preferences": {
"language": "애플리케이션 언어",
"languageDescription": "애플리케이션 전체에 적용될 언어.",
"thumbnail": "썸네일 생성",
"thumbnailDescription": "대부분의 영상들은 섬네일을 가지고 있지 않습니다. 사용자가 직접 영상의 섬네일을 생성할 수 있지만, 잦은 버퍼링을 일으킬 수 있습니다.",
"thumbnailLabel": "섬네일 생성",
"title": "환경 설정"
},
"reset": "초기화", "reset": "초기화",
"save": "저장", "save": "저장",
"sidebar": { "sidebar": {

View File

@ -114,7 +114,10 @@
"failed": "Neizdevās atrast multividi. Mēģiniet vēlreiz!", "failed": "Neizdevās atrast multividi. Mēģiniet vēlreiz!",
"loading": "Lādejas...", "loading": "Lādejas...",
"noResults": "Mēs nevarējām neko atrast!", "noResults": "Mēs nevarējām neko atrast!",
"placeholder": "Ko tu gribi skatīties?", "placeholder": {
"default": "Ko tu gribi skatīties?",
"extra": []
},
"sectionTitle": "Meklējuma rezultāti" "sectionTitle": "Meklējuma rezultāti"
}, },
"titles": { "titles": {
@ -123,15 +126,11 @@
}, },
"morning": { "morning": {
"default": "Ko tu gribētu šorīt noskatīties?", "default": "Ko tu gribētu šorīt noskatīties?",
"extra": [ "extra": ["Es dzirdu, ka Pirms saullēkta ir labs"]
"Es dzirdu, ka Pirms saullēkta ir labs"
]
}, },
"night": { "night": {
"default": "Ko tu gribētu šovakar skatīties?", "default": "Ko tu gribētu šovakar skatīties?",
"extra": [ "extra": ["Noguris? Es dzirdu, ka Exorcist ir labs."]
"Noguris? Es dzirdu, ka Exorcist ir labs."
]
} }
} }
}, },

View File

@ -115,7 +115,10 @@
"failed": "Failed to banana banana, try again!", "failed": "Failed to banana banana, try again!",
"loading": "Loading...", "loading": "Loading...",
"noResults": "We couldn't banana anything!", "noResults": "We couldn't banana anything!",
"placeholder": "Banana do you want to banana?", "placeholder": {
"default": "Banana do you want to banana?",
"extra": []
},
"sectionTitle": "Banana results" "sectionTitle": "Banana results"
}, },
"titles": { "titles": {
@ -127,15 +130,11 @@
}, },
"morning": { "morning": {
"default": "What would you like to banana this banana?", "default": "What would you like to banana this banana?",
"extra": [ "extra": ["Banana! I hear Banana Sunrise is banana"]
"Banana! I hear Banana Sunrise is banana"
]
}, },
"night": { "night": {
"default": "What would you like to banana banana?", "default": "What would you like to banana banana?",
"extra": [ "extra": ["Banana? I hear The Banana is banana."]
"Banana? I hear The Banana is banana."
]
} }
} }
}, },
@ -179,7 +178,6 @@
"menus": { "menus": {
"downloads": { "downloads": {
"disclaimer": "Downloads are taken directly from the banana. banana-web does not have banana over how the banana are banana.", "disclaimer": "Downloads are taken directly from the banana. banana-web does not have banana over how the banana are banana.",
"downloadPlaylist": "Download banana",
"downloadSubtitle": "Download current banana", "downloadSubtitle": "Download current banana",
"downloadVideo": "Banana", "downloadVideo": "Banana",
"hlsDisclaimer": "Downloads are taken directly from the banana. Banana-web does not have control over how the downloads are banana. please note that you are downloading Banana playlist, this is intended for minions familiar with advanced multimedia banana.", "hlsDisclaimer": "Downloads are taken directly from the banana. Banana-web does not have control over how the downloads are banana. please note that you are downloading Banana playlist, this is intended for minions familiar with advanced multimedia banana.",

View File

@ -57,6 +57,8 @@
}, },
"host": "तपाइँ <0>{{hostname}}</0> मा कनेक्ट हुनुहुन्छ - कृपया खाता बनाउनु अघि तपाइँ यसलाई विश्वास गर्नुहुन्छ भनेर पुष्टि गर्नुहोस्", "host": "तपाइँ <0>{{hostname}}</0> मा कनेक्ट हुनुहुन्छ - कृपया खाता बनाउनु अघि तपाइँ यसलाई विश्वास गर्नुहुन्छ भनेर पुष्टि गर्नुहोस्",
"no": "पछाडी जाउ", "no": "पछाडी जाउ",
"noHost": "सर्भर कन्फिगर गरिएको छैन, त्यसैले तपाईंले खाता सिर्जना गर्न सक्नुहुन्न",
"noHostTitle": "सर्भर कन्फिगर गरिएको छैन!",
"title": "के तपाइँ यो सर्भरमा भरोसा गर्नुहुन्छ?", "title": "के तपाइँ यो सर्भरमा भरोसा गर्नुहुन्छ?",
"yes": "म यो सर्भरलाई भरोसा गर्छु" "yes": "म यो सर्भरलाई भरोसा गर्छु"
}, },
@ -79,7 +81,7 @@
}, },
"footer": { "footer": {
"legal": { "legal": {
"disclaimer": "Disclaimer", "disclaimer": "अस्वीकरण",
"disclaimerText": "movie-webले कुनै पनि फाइलहरू होस्ट गर्दैन, यसले केवल तेस्रो पक्ष सेवाहरूमा लिङ्क गर्दछ। कानुनी मुद्दाहरू फाइल होस्ट र प्रदायकहरूसँग लिनु पर्छ। चलचित्र-वेब भिडियो प्रदायकहरू द्वारा देखाइएका कुनै पनि मिडिया फाइलहरूको लागि जिम्मेवार छैन।" "disclaimerText": "movie-webले कुनै पनि फाइलहरू होस्ट गर्दैन, यसले केवल तेस्रो पक्ष सेवाहरूमा लिङ्क गर्दछ। कानुनी मुद्दाहरू फाइल होस्ट र प्रदायकहरूसँग लिनु पर्छ। चलचित्र-वेब भिडियो प्रदायकहरू द्वारा देखाइएका कुनै पनि मिडिया फाइलहरूको लागि जिम्मेवार छैन।"
}, },
"links": { "links": {
@ -116,7 +118,15 @@
"failed": "मिडिया फेला पार्न असफल भयो, फेरि प्रयास गर्नुहोस्!", "failed": "मिडिया फेला पार्न असफल भयो, फेरि प्रयास गर्नुहोस्!",
"loading": "लोड गर्दै...", "loading": "लोड गर्दै...",
"noResults": "हामीले केहि फेला पार्न सकेनौं!", "noResults": "हामीले केहि फेला पार्न सकेनौं!",
"placeholder": "तपाईं के हेर्न चाहनुहुन्छ?", "placeholder": {
"default": "तपाईं के हेर्न चाहनुहुन्छ?",
"extra": [
"तपाईं के खोज्न चाहनुहुन्छ?",
"तपाईको वाच लिस्टमा के छ?",
"तपाईलाई मन पर्ने चलचित्र कुन हो?",
"तपाईलाई मनपर्ने श्रृंखला कुन हो?"
]
},
"sectionTitle": "खोज परिणामहरू" "sectionTitle": "खोज परिणामहरू"
}, },
"titles": { "titles": {
@ -176,11 +186,11 @@
"extension": { "extension": {
"back": "पछाडी जाउ", "back": "पछाडी जाउ",
"explainer": "ब्राउजर एक्सटेन्सन प्रयोग गरेर, तपाईंले हामीले प्रस्ताव गर्नु पर्ने उत्तम स्ट्रिमहरू प्राप्त गर्न सक्नुहुन्छ। केवल एक साधारण स्थापना संग।", "explainer": "ब्राउजर एक्सटेन्सन प्रयोग गरेर, तपाईंले हामीले प्रस्ताव गर्नु पर्ने उत्तम स्ट्रिमहरू प्राप्त गर्न सक्नुहुन्छ। केवल एक साधारण स्थापना संग।",
"explainerIos": "दुर्भाग्यवश, ब्राउजर एक्सटेन्सन IOS मा समर्थित छैन, अर्को विकल्प रोज्न <bold>Go back</bold> थिच्नुहोस्।", "explainerIos": "दुर्भाग्यवश, ब्राउजर एक्सटेन्सन iOS मा समर्थित छैन, अर्को विकल्प रोज्न <bold>Go back</bold> थिच्नुहोस्।",
"extensionHelp": "यदि तपाईंले एक्स्टेन्सन स्थापना गर्नुभएको छ तर यो पत्ता लागेको छैन <bold>तपाईंको ब्राउजर विस्तार मेनु मार्फत विस्तार खोल्नुहोस्</bold> र स्क्रिनमा चरणहरू पालना गर्नुहोस्।", "extensionHelp": "यदि तपाईंले एक्स्टेन्सन स्थापना गर्नुभएको छ तर यो पत्ता लागेको छैन, <bold>तपाईंको ब्राउजर विस्तार मेनु मार्फत विस्तार खोल्नुहोस्</bold> र स्क्रिनमा चरणहरू पालना गर्नुहोस्।",
"linkChrome": "क्रोम एक्सटेन्सन स्थापना गर्नुहोस्", "linkChrome": "क्रोम एक्सटेन्सन स्थापना गर्नुहोस्",
"linkFirefox": "फायरफक्स एक्सटेन्सन स्थापना गर्नुहोस्", "linkFirefox": "फायरफक्स एक्सटेन्सन स्थापना गर्नुहोस्",
"notDetecting": "chrome मा स्थापित तर देखिदैन? पृष्ठ पुन: लोड गर्ने प्रयास गर्नुहोस्!", "notDetecting": "Chrome मा स्थापित भयो तर देखिदैन? पृष्ठ पुन: लोड गर्ने प्रयास गर्नुहोस्!",
"notDetectingAction": "पृष्ठ पुन: लोड गर्नुहोस्", "notDetectingAction": "पृष्ठ पुन: लोड गर्नुहोस्",
"status": { "status": {
"disallowed": "यो पेजको लागि एक्सटेन्सन सक्षम गरिएको छैन", "disallowed": "यो पेजको लागि एक्सटेन्सन सक्षम गरिएको छैन",
@ -208,7 +218,7 @@
"title": "एउटा नयाँ प्रोक्सी बनाऔं" "title": "एउटा नयाँ प्रोक्सी बनाऔं"
}, },
"start": { "start": {
"explainer": "सम्भावित उत्तम स्ट्रिमहरू प्राप्त गर्न, तपाईंले कुन स्ट्रिमिङ विधि प्रयोग गर्न चाहनुहुन्छ भनेर छनौट गर्न आवश्यक हुनेछ।", "explainer": "सम्भावित उत्तम स्ट्रिमहरू प्राप्त गर्न, तपाईंले कुन स्ट्रिमिङ विधि प्रयोग गर्न चाहनुहुन्छ भनेर छनौट गर्न आवश्यक हुनेछ।",
"options": { "options": {
"default": { "default": {
"text": "मलाई राम्रो गुणस्तरका स्ट्रिमहरू चाहिँदैन,<0 /> <1>पूर्वनिर्धारित सेटअप प्रयोग गर्नुहोस्</1>" "text": "मलाई राम्रो गुणस्तरका स्ट्रिमहरू चाहिँदैन,<0 /> <1>पूर्वनिर्धारित सेटअप प्रयोग गर्नुहोस्</1>"
@ -242,11 +252,11 @@
}, },
"menus": { "menus": {
"downloads": { "downloads": {
"copyHlsPlaylist": "HLS प्लेलिस्ट लिङ्क कपि गर्नुहोस्",
"disclaimer": "डाउनलोडहरू सीधा प्रदायकबाट लिइन्छ। movie-web ले डाउनलोडहरू कसरी प्रदान गरिन्छ भन्नेमा नियन्त्रण गर्दैन।", "disclaimer": "डाउनलोडहरू सीधा प्रदायकबाट लिइन्छ। movie-web ले डाउनलोडहरू कसरी प्रदान गरिन्छ भन्नेमा नियन्त्रण गर्दैन।",
"downloadPlaylist": "डाउनलोड प्लेलिस्ट",
"downloadSubtitle": "हालको उपशीर्षक डाउनलोड गर्नुहोस्", "downloadSubtitle": "हालको उपशीर्षक डाउनलोड गर्नुहोस्",
"downloadVideo": "डाउनलोड भिडियो", "downloadVideo": "डाउनलोड भिडियो",
"hlsDisclaimer": "डाउनलोडहरू सीधा प्रदायकबाट लिइन्छ। चलचित्र-वेबको डाउनलोडहरू कसरी प्रदान गरिन्छ भन्नेमा नियन्त्रण छैन।<br /><br />कृपया ध्यान दिनुहोस् कि तपाइँ HLS प्लेलिस्ट डाउनलोड गर्दै हुनुहुन्छ, <bold>यदि तपाइँ उन्नत स्ट्रिमिङ ढाँचाहरूसँग परिचित हुनुहुन्न भने यसलाई डाउनलोड गर्न सिफारिस गरिँदैन। </ bold>। विभिन्न ढाँचाहरूको लागि विभिन्न स्रोतहरू प्रयास गर्नुहोस्।", "hlsDisclaimer": "डाउनलोडहरू सीधा प्रदायकबाट लिइन्छ। चलचित्र-वेबको डाउनलोडहरू कसरी प्रदान गरिन्छ भन्नेमा नियन्त्रण छैन।<br /><br />कृपया ध्यान दिनुहोस् कि तपाइँ HLS प्लेलिस्ट डाउनलोड गर्दै हुनुहुन्छ, <bold>यदि तपाइँ उन्नत स्ट्रिमिङ ढाँचाहरूसँग परिचित हुनुहुन्न भने यसलाई डाउनलोड गर्न सिफारिस गरिँदैन। </bold>। विभिन्न ढाँचाहरूको लागि विभिन्न स्रोतहरू प्रयास गर्नुहोस्।",
"onAndroid": { "onAndroid": {
"1": "एन्ड्रोइड मा, डाउनलोड बटन क्लिक गर्नुहोस् त्यसपछि, नयाँ पृष्ठमा, भिडियोमा <bold>ट्याप गर्नुहोस् र होल्ड गर्नुहोस्</bold>, त्यसपछि <bold>बचत</bold> चयन गर्नुहोस्।", "1": "एन्ड्रोइड मा, डाउनलोड बटन क्लिक गर्नुहोस् त्यसपछि, नयाँ पृष्ठमा, भिडियोमा <bold>ट्याप गर्नुहोस् र होल्ड गर्नुहोस्</bold>, त्यसपछि <bold>बचत</bold> चयन गर्नुहोस्।",
"shortTitle": "डाउनलोड / एन्ड्रोइड", "shortTitle": "डाउनलोड / एन्ड्रोइड",

View File

@ -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"
}, },
@ -116,7 +118,15 @@
"failed": "Het is niet gelukt de media te laden, probeer het nog eens!", "failed": "Het is niet gelukt de media te laden, probeer het nog eens!",
"loading": "Aan het zoeken...", "loading": "Aan het zoeken...",
"noResults": "We konden helaas niets vinden!", "noResults": "We konden helaas niets vinden!",
"placeholder": "Wat wil je graag kijken?", "placeholder": {
"default": "Wat wil je graag kijken?",
"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"
}, },
"titles": { "titles": {
@ -177,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",
@ -208,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>"
@ -242,8 +252,8 @@
}, },
"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.",
"downloadPlaylist": "Afspeellijst downloaden",
"downloadSubtitle": "Download huidige ondertiteling", "downloadSubtitle": "Download huidige ondertiteling",
"downloadVideo": "Download filmpje", "downloadVideo": "Download filmpje",
"hlsDisclaimer": "Downloads worden rechtstreeks van de aanbieder gehaald. movie-web heeft geen controle over de manier waarop de downloads worden aangeboden.<br /><br />Houd er rekening mee dat u nu een HLS-afspeellijst downloadt, het wordt <bold>afgeraden deze te downloaden als u niet bekend bent met geavanceerde streamingbestandstypen</bold>. Probeer verschillende bronnen voor verschillende streamingbestandstypen.", "hlsDisclaimer": "Downloads worden rechtstreeks van de aanbieder gehaald. movie-web heeft geen controle over de manier waarop de downloads worden aangeboden.<br /><br />Houd er rekening mee dat u nu een HLS-afspeellijst downloadt, het wordt <bold>afgeraden deze te downloaden als u niet bekend bent met geavanceerde streamingbestandstypen</bold>. Probeer verschillende bronnen voor verschillende streamingbestandstypen.",

View File

@ -11,6 +11,7 @@
"title": "ਮੈਂ ਇੱਕ ਸ਼ੋਅ ਜਾਂ ਫ਼ਿਲਮ ਲਈ ਕਿੱਥੇ ਬੇਨਤੀ ਕਰ ਸਕਦਾ/ਸਕਦੀ ਹਾਂ?" "title": "ਮੈਂ ਇੱਕ ਸ਼ੋਅ ਜਾਂ ਫ਼ਿਲਮ ਲਈ ਕਿੱਥੇ ਬੇਨਤੀ ਕਰ ਸਕਦਾ/ਸਕਦੀ ਹਾਂ?"
}, },
"q3": { "q3": {
"body": "ਸਾਡੇ ਖੋਜ ਨਤੀਜੇ ਮੂਵੀ ਡੇਟਾਬੇਸ (TMDB) ਦੁਆਰਾ ਸੰਚਾਲਿਤ ਹੁੰਦੇ ਹਨ ਅਤੇ ਇਸ ਗੱਲ ਦੀ ਪਰਵਾਹ ਕੀਤੇ ਬਿਨਾਂ ਪ੍ਰਦਰਸ਼ਿਤ ਹੁੰਦੇ ਹਨ ਕਿ ਸਾਡੇ ਸਰੋਤਾਂ ਵਿੱਚ ਅਸਲ ਵਿੱਚ ਕੰਟੈਂਟ ਹੈ ਜਾਂ ਨਹੀਂ.",
"title": "ਖੋਜ ਨਤੀਜੇ ਸ਼ੋਅ ਜਾਂ ਫ਼ਿਲਮ ਦਿਖਾਉਂਦੇ ਹਨ, ਮੈਂ ਇਸਨੂੰ ਕਿਉਂ ਨਹੀਂ ਚਲਾ ਸਕਦਾ?" "title": "ਖੋਜ ਨਤੀਜੇ ਸ਼ੋਅ ਜਾਂ ਫ਼ਿਲਮ ਦਿਖਾਉਂਦੇ ਹਨ, ਮੈਂ ਇਸਨੂੰ ਕਿਉਂ ਨਹੀਂ ਚਲਾ ਸਕਦਾ?"
}, },
"title": "ਮੂਵੀ-ਵੈੱਬ ਡੀ ਬਾਰੇ" "title": "ਮੂਵੀ-ਵੈੱਬ ਡੀ ਬਾਰੇ"
@ -20,37 +21,83 @@
"copy": "ਕਾਪੀ" "copy": "ਕਾਪੀ"
}, },
"auth": { "auth": {
"createAccount": "ਕੀ ਤੁਹਾਡੇ ਕੋਲ ਅਜੇ ਖਾਤਾ ਨਹੀਂ ਹੈ? <0>ਇੱਕ ਖਾਤਾ ਬਣਾਓ.</0>",
"deviceNameLabel": "ਡਿਵਾਈਸ ਦਾ ਨਾਮ", "deviceNameLabel": "ਡਿਵਾਈਸ ਦਾ ਨਾਮ",
"deviceNamePlaceholder": "ਨਿੱਜੀ ਫ਼ੋਨ",
"generate": { "generate": {
"passphraseFrameLabel": "ਪੈਰਾਫਰਾਜ਼" "description": "ਤੁਹਾਡਾ ਗੁਪਤਕੋਡ ਤੁਹਾਡੇ ਉਪਭੋਗਤਾ ਨਾਮ ਅਤੇ ਪਾਸਵਰਡ ਵਜੋਂ ਕੰਮ ਕਰਦਾ ਹੈ. ਇਸਨੂੰ ਸੁਰੱਖਿਅਤ ਰੱਖਣਾ ਯਕੀਨੀ ਬਣਾਓ ਕਿਉਂਕਿ ਤੁਹਾਨੂੰ ਆਪਣੇ ਖਾਤੇ ਵਿੱਚ ਲੌਗਇਨ ਕਰਨ ਲਈ ਇਸਨੂੰ ਦਾਖਲ ਕਰਨ ਦੀ ਲੋੜ ਹੋਵੇਗੀ",
"next": "ਮੈਂ ਆਪਣਾ ਪਾਸਫਰੇਜ ਸੁਰੱਖਿਅਤ ਕਰ ਲਿਆ ਹੈ",
"passphraseFrameLabel": "ਪੈਰਾਫਰਾਜ਼",
"title": "ਤੁਹਾਡਾ ਪਾਸਫਰੇਜ"
}, },
"hasAccount": "ਕੀ ਪਹਿਲਾਂ ਤੋਂ ਹੀ ਖਾਤਾ ਹੈ? <0>ਇੱਥੇ ਲੌਗਇਨ ਕਰੋ.</0>",
"login": { "login": {
"description": "ਕਿਰਪਾ ਕਰਕੇ ਆਪਣੇ ਖਾਤੇ ਵਿੱਚ ਲੌਗਇਨ ਕਰਨ ਲਈ ਆਪਣਾ ਗੁਪਤਕੋਡ ਦਾਖਲ ਕਰੋ",
"deviceLengthError": "ਕਿਰਪਾ ਕਰਕੇ ਇੱਕ ਡਿਵਾਈਸ ਦਾ ਨਾਮ ਦਾਖਲ ਕਰੋ",
"passphraseLabel": "12-ਅਖਰੰਦਾ ਪਾਸਫਰੇਜ਼",
"passphrasePlaceholder": "ਪੈਰਾਫਰਾਜ਼", "passphrasePlaceholder": "ਪੈਰਾਫਰਾਜ਼",
"submit": "ਲੌਗ-ਇਨ" "submit": "ਲੌਗ-ਇਨ",
"title": "ਆਪਣੇ ਖਾਤੇ ਵਿੱਚ ਲੌਗਇਨ ਕਰੋ",
"validationError": "ਗਲਤ ਜਾਂ ਅਧੂਰਾ ਗੁਪਤਕੋਡ"
}, },
"register": { "register": {
"information": { "information": {
"next": "ਅਗਲਾ" "color1": "ਪਰੋਫਾਇਲ ਦਾ ਪੇਹਲਾ ਰੰਗ",
"color2": "ਪ੍ਰੋਫਾਇਲ ਦਾ ਦੂਜਾ ਰੰਗ",
"header": "ਆਪਣੀ ਡਿਵਾਈਸ ਲਈ ਇੱਕ ਨਾਮ ਦਰਜ ਕਰੋ ਅਤੇ ਆਪਣੀ ਪਸੰਦ ਦਾ ਰੰਗ ਅਤੇ ਇੱਕ ਉਪਭੋਗਤਾ ਆਈਕਨ ਚੁਣੋ",
"icon": "ਉਪਭੋਗਤਾ ਪ੍ਰਤੀਕ",
"next": "ਅਗਲਾ",
"title": "ਖਾਤਾ ਜਾਣਕਾਰੀ"
} }
}, },
"trust": { "trust": {
"failed": {
"text": "ਕੀ ਤੁਸੀਂ ਇਸਨੂੰ ਸਹੀ ਢੰਗ ਨਾਲ ਕੌਂਫਿਗਰ ਕੀਤਾ ਹੈ?",
"title": "ਸਰਵਰ ਤੱਕ ਪਹੁੰਚਣ ਵਿੱਚ ਅਸਫਲ"
},
"host": "ਤੁਸੀਂ <0>{{hostname}}</0> ਨਾਲ ਜੁੜ ਰਹੇ ਹੋ - ਕਿਰਪਾ ਕਰਕੇ ਖਾਤਾ ਬਣਾਉਣ ਤੋਂ ਪਹਿਲਾਂ ਪੁਸ਼ਟੀ ਕਰੋ ਕਿ ਤੁਸੀਂ ਇਸ 'ਤੇ ਭਰੋਸਾ ਕਰਦੇ ਹੋ",
"no": "ਵਾਪਸ ਜਾਓ", "no": "ਵਾਪਸ ਜਾਓ",
"noHost": "ਸਰਵਰ ਕੌਂਫਿਗਰ ਨਹੀਂ ਕੀਤਾ ਗਿਆ ਹੈ, ਇਸਲਈ ਤੁਸੀਂ ਖਾਤਾ ਨਹੀਂ ਬਣਾ ਸਕਦੇ ਹੋ",
"noHostTitle": "ਸਰਵਰ ਕੌਂਫਿਗਰ ਨਹੀਂ ਕੀਤਾ ਗਿਆ!",
"title": "ਕੀ ਤੁਸੀਂ ਇਸ ਸਰਵਰ 'ਤੇ ਭਰੋਸਾ ਕਰਦੇ ਹੋ?",
"yes": "ਮੈਨੂੰ ਇਸ ਸਰਵਰ 'ਤੇ ਭਰੋਸਾ ਹੈ" "yes": "ਮੈਨੂੰ ਇਸ ਸਰਵਰ 'ਤੇ ਭਰੋਸਾ ਹੈ"
},
"verify": {
"description": "ਕਿਰਪਾ ਕਰਕੇ ਇਹ ਪੁਸ਼ਟੀ ਕਰਨ ਲਈ ਕਿ ਤੁਸੀਂ ਇਸਨੂੰ ਸੁਰੱਖਿਅਤ ਕੀਤਾ ਹੈ ਅਤੇ ਆਪਣਾ ਖਾਤਾ ਬਣਾਉਣ ਲਈ ਪਹਿਲਾਂ ਤੋਂ ਆਪਣਾ ਗੁਪਤਕੋਡ ਦਰਜ ਕਰੋ",
"invalidData": "ਡਾਟਾ ਵੈਧ ਨਹੀਂ ਹੈ",
"noMatch": "ਪਾਸਫਰੇਜ ਮੇਲ ਨਹੀਂ ਖਾਂਦਾ",
"passphraseLabel": "ਤੁਹਾਡਾ 12-ਸ਼ਬਦਾਂ ਦਾ ਪਾਸਫਰੇਜ",
"recaptchaFailed": "ਰੀਕੈਪਟਚਾ ਪ੍ਰਮਾਣਿਕਤਾ ਅਸਫਲ ਰਹੀ",
"register": "ਖਾਤਾ ਬਣਾਉ",
"title": "ਆਪਣੇ ਗੁਪਤਕੋਡ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ"
} }
}, },
"errors": {
"badge": "ਇਹ ਟੁੱਟ ਗਿਆ",
"details": "ਗਲਤੀ ਵੇਰਵੇ",
"reloadPage": "ਪੈਗ ਨੂੰ ਰੀਲੋਡ ਕਰੋ",
"showError": "ਗਲਤੀ ਦੇ ਵੇਰਵੇ ਦਿਖਾਓ",
"title": "ਸਾਨੂੰ ਇੱਕ ਤਰੁੱਟੀ ਦਾ ਸਾਹਮਣਾ ਕਰਨਾ ਪਿਆ!"
},
"footer": { "footer": {
"legal": {
"disclaimer": "ਬੇਦਾਅਵਾ",
"disclaimerText": "ਮੂਵੀ-ਵੈੱਬ ਕਿਸੇ ਵੀ ਫਾਈਲ ਦੀ ਮੇਜ਼ਬਾਨੀ ਨਹੀਂ ਕਰਦਾ ਹੈ, ਇਹ ਸਿਰਫ਼ ਤੀਜੀ ਧਿਰ ਦੀਆਂ ਸੇਵਾਵਾਂ ਨਾਲ ਲਿੰਕ ਕਰਦਾ ਹੈ. ਕਾਨੂੰਨੀ ਮੁੱਦਿਆਂ ਨੂੰ ਫਾਈਲ ਹੋਸਟਾਂ ਅਤੇ ਪ੍ਰਦਾਤਾਵਾਂ ਨਾਲ ਉਠਾਇਆ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ। ਮੂਵੀ-ਵੈਬ ਵੀਡੀਓ ਪ੍ਰਦਾਤਾਵਾਂ ਦੁਆਰਾ ਦਿਖਾਈਆਂ ਗਈਆਂ ਕਿਸੇ ਵੀ ਮੀਡੀਆ ਫਾਈਲਾਂ ਲਈ ਜ਼ਿੰਮੇਵਾਰ ਨਹੀਂ ਹੈ."
},
"links": { "links": {
"discord": "ਡਿਸਕੋਰਡ", "discord": "ਡਿਸਕੋਰਡ",
"dmca": "ਡੀ.ਐਮ.ਸੀ.ਏ", "dmca": "DMCA",
"github": "ਗਿਥਬ" "github": "Github"
} },
"tagline": "ਇਸ ਓਪਨ ਸੋਰਸ ਸਟ੍ਰੀਮਿੰਗ ਐਪ ਨਾਲ ਆਪਣੇ ਮਨਪਸੰਦ ਸ਼ੋਅ ਅਤੇ ਫ਼ਿਲਮਾਂ ਦੇਖੋ।"
}, },
"global": { "global": {
"name": "ਮੂਵੀ-ਵੈੱਬ", "name": "ਮੂਵੀ-ਵੈੱਬ",
"pages": { "pages": {
"about": "ਬਾਰੇ", "about": "ਬਾਰੇ",
"dmca": "ਡੀ.ਐਮ.ਸੀ.ਏ", "dmca": "DMCA",
"login": "ਲਾਗਿਨ", "login": "ਲਾਗਿਨ",
"onboarding": "ਸਥਾਪਨਾ ਕਰਨਾ",
"pagetitle": "{{title}} - ਮੂਵੀ-ਵੈੱਬ", "pagetitle": "{{title}} - ਮੂਵੀ-ਵੈੱਬ",
"register": "ਰਜਿਸਟਰ", "register": "ਰਜਿਸਟਰ",
"settings": "ਸੈਟਿੰਗਾਂ" "settings": "ਸੈਟਿੰਗਾਂ"
@ -59,6 +106,442 @@
"home": { "home": {
"bookmarks": { "bookmarks": {
"sectionTitle": "ਬੁੱਕਮਾਰਕ" "sectionTitle": "ਬੁੱਕਮਾਰਕ"
},
"continueWatching": {
"sectionTitle": "ਦੇਖਣਾ ਜਾਰੀ ਰੱਖੋ"
},
"mediaList": {
"stopEditing": "ਸੰਪਾਦਨ ਬੰਦ ਕਰੋ"
},
"search": {
"allResults": "ਸਾਡੇ ਕੋਲ ਇਹੋ ਕੁਝ ਹੈ!",
"failed": "ਮੀਡੀਆ ਲੱਭਣ ਵਿੱਚ ਅਸਫਲ, ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ!",
"loading": "ਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ...",
"noResults": "ਅਸੀਂ ਕੁਝ ਵੀ ਨਹੀਂ ਲੱਭ ਸਕੇ!",
"placeholder": {
"default": "ਤੁਸੀਂ ਕੀ ਦੇਖਣਾ ਚਾਹੁੰਦੇ ਹੋ?",
"extra": [
"ਤੁਸੀਂ ਕੀ ਪੜਚੋਲ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?",
"ਤੁਹਾਡੀ ਨਿਗਰਾਨੀ ਸੂਚੀ ਵਿੱਚ ਕੀ ਹੈ?",
"ਤੁਹਾਡੀ ਮਨਪਸੰਦ ਫਿਲਮ ਕਿਹੜੀ ਹੈ?",
"ਤੁਹਾਡੀ ਮਨਪਸੰਦ ਲੜੀ ਕਿਹੜੀ ਹੈ?"
]
},
"sectionTitle": "ਖੋਜ ਨਤੀਜੇ"
},
"titles": {
"day": {
"default": "ਤੁਸੀਂ ਅੱਜ ਦੁਪਹਿਰ ਨੂੰ ਕੀ ਦੇਖਣਾ ਚਾਹੋਗੇ?",
"extra": [
"ਸਾਹਸੀ ਮਹਿਸੂਸ ਕਰ ਰਹੇ ਹੋ? ਜੁਰਾਸਿਕ ਪਾਰਕ ਸੰਪੂਰਣ ਵਿਕਲਪ ਹੋ ਸਕਦਾ ਹੈ."
]
},
"morning": {
"default": "ਤੁਸੀਂ ਅੱਜ ਸਵੇਰੇ ਕੀ ਦੇਖਣਾ ਚਾਹੋਗੇ?",
"extra": [
"ਮੈਂ ਸੁਣਦਾ ਹਾਂ ਕਿ ਸੂਰਜ ਚੜ੍ਹਨ ਤੋਂ ਪਹਿਲਾਂ ਚੰਗਾ ਹੁੰਦਾ ਹੈ"
]
},
"night": {
"default": "ਤੁਸੀਂ ਅੱਜ ਰਾਤ ਕੀ ਦੇਖਣਾ ਚਾਹੋਗੇ?",
"extra": [
"ਥੱਕ ਗਏ? ਮੈਂ ਸੁਣਿਆ ਹੈ ਕਿ Exorcist ਚੰਗਾ ਹੈ."
]
}
} }
},
"media": {
"episodeDisplay": "S{{season}} E{{episode}}",
"types": {
"movie": "ਮੂਵੀ",
"show": "ਨਾਟਕ"
}
},
"navigation": {
"banner": {
"offline": "ਆਪਣੇ ਇੰਟਰਨੈਟ ਕਨੈਕਸ਼ਨ ਦੀ ਜਾਂਚ ਕਰੋ"
},
"menu": {
"about": "ਸਾਡੇ ਬਾਰੇ",
"donation": "ਦਾਨ",
"logout": "ਲਾੱਗ ਆਊਟ",
"register": "ਕਲਾਉਡ ਨਾਲ ਸਿੰਕ ਕਰੋ",
"settings": "ਸੈਟਿੰਗਾਂ",
"support": "ਸਮਰਥਨ"
}
},
"notFound": {
"badge": "ਨਹੀਂ ਲਭਿਆ",
"goHome": "ਘਰ ਵਾਪਸ",
"message": "ਅਸੀਂ ਹਰ ਜਗ੍ਹਾ ਦੇਖਿਆ: ਡੱਬਿਆਂ ਦੇ ਹੇਠਾਂ, ਅਲਮਾਰੀ ਵਿੱਚ, ਪ੍ਰੌਕਸੀ ਦੇ ਪਿੱਛੇ ਪਰ ਆਖਰਕਾਰ ਉਹ ਪੰਨਾ ਨਹੀਂ ਲੱਭ ਸਕਿਆ ਜਿਸਦੀ ਤੁਸੀਂ ਭਾਲ ਕਰ ਰਹੇ ਹੋ.",
"title": "ਉਹ ਪੰਨਾ ਨਹੀਂ ਲੱਭ ਸਕਿਆ"
},
"onboarding": {
"defaultConfirm": {
"cancel": "ਰੱਦ ਕਰੋ",
"confirm": "ਡਿਫੌਲਟ ਸੈੱਟਅੱਪ ਵਰਤੋ",
"description": "ਪੂਰਵ-ਨਿਰਧਾਰਤ ਸੈੱਟਅੱਪ ਵਿੱਚ ਵਧੀਆ ਸਟ੍ਰੀਮ ਨਹੀਂ ਹਨ ਅਤੇ ਇਹ ਅਸਹਿਣਸ਼ੀਲ ਤੌਰ 'ਤੇ ਹੌਲੀ ਹੋ ਸਕਦੀ ਹੈ.",
"title": "ਤੁਹਾਨੂੰ ਪੂਰਾ ਵਿਸ਼ਵਾਸ ਹੈ?"
},
"extension": {
"back": "ਵਾਪਸ ਜਾਓ",
"explainer": "ਬ੍ਰਾਊਜ਼ਰ ਐਕਸਟੈਂਸ਼ਨ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ, ਤੁਸੀਂ ਸਾਡੇ ਦੁਆਰਾ ਪੇਸ਼ ਕੀਤੀਆਂ ਗਈਆਂ ਸਭ ਤੋਂ ਵਧੀਆ ਸਟ੍ਰੀਮਾਂ ਪ੍ਰਾਪਤ ਕਰ ਸਕਦੇ ਹੋ. ਸਿਰਫ਼ ਇੱਕ ਸਧਾਰਨ ਸਥਾਪਨਾ ਨਾਲ.",
"explainerIos": "ਬਦਕਿਸਮਤੀ ਨਾਲ, ਬ੍ਰਾਊਜ਼ਰ ਐਕਸਟੈਂਸ਼ਨ iOS 'ਤੇ ਸਮਰਥਿਤ ਨਹੀਂ ਹੈ, ਕੋਈ ਹੋਰ ਵਿਕਲਪ ਚੁਣਨ ਲਈ <bold>Go back</bold> ਦਬਾਓ.",
"extensionHelp": "ਜੇਕਰ ਤੁਸੀਂ ਐਕਸਟੈਂਸ਼ਨ ਨੂੰ ਸਥਾਪਿਤ ਕੀਤਾ ਹੈ ਪਰ ਇਸਦਾ ਪਤਾ ਨਹੀਂ ਲੱਗਿਆ ਹੈ, ਤਾਂ <bold>ਆਪਣੇ ਬ੍ਰਾਊਜ਼ਰ ਐਕਸਟੈਂਸ਼ਨ ਮੀਨੂ ਰਾਹੀਂ ਐਕਸਟੈਂਸ਼ਨ ਖੋਲ੍ਹੋ</bold> ਅਤੇ ਸਕ੍ਰੀਨ 'ਤੇ ਦਿੱਤੇ ਕਦਮਾਂ ਦੀ ਪਾਲਣਾ ਕਰੋ.",
"linkChrome": "ਕਰੋਮ ਐਕਸਟੈਂਸ਼ਨ ਸਥਾਪਤ ਕਰੋ",
"linkFirefox": "Firiefox ਐਕਸਟੈਂਸ਼ਨ ਇੰਸਟਾਲ ਕਰੋ",
"notDetecting": "ਕ੍ਰੋਮ 'ਤੇ ਸਥਾਪਿਤ ਕੀਤਾ ਗਿਆ ਹੈ, ਪਰ ਸਾਈਟ ਇਸਦਾ ਪਤਾ ਨਹੀਂ ਲਗਾ ਰਹੀ ਹੈ? ਪੰਨੇ ਨੂੰ ਮੁੜ ਲੋਡ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰੋ.",
"notDetectingAction": "ਪੰਨਾ ਰੀਲੋਡ ਕਰੋ",
"status": {
"disallowed": "ਇਸ ਪੰਨੇ ਲਈ ਐਕਸਟੈਂਸ਼ਨ ਸਮਰਥਿਤ ਨਹੀਂ ਹੈ",
"disallowedAction": "ਐਕਸਟੈਂਸ਼ਨ ਨੂੰ ਸਮਰੱਥ ਬਣਾਓ",
"failed": "ਸਥਿਤੀ ਦੀ ਬੇਨਤੀ ਕਰਨ ਵਿੱਚ ਅਸਫਲ",
"loading": "ਤੁਹਾਡੇ ਐਕਸਟੈਂਸ਼ਨ ਨੂੰ ਸਥਾਪਿਤ ਕਰਨ ਦੀ ਉਡੀਕ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ",
"outdated": "ਐਕਸਟੈਂਸ਼ਨ ਸੰਸਕਰਣ ਬਹੁਤ ਪੁਰਾਣਾ ਹੈ",
"success": "ਐਕਸਟੈਂਸ਼ਨ ਉਮੀਦ ਅਨੁਸਾਰ ਕੰਮ ਕਰ ਰਿਹਾ ਹੈ!"
},
"submit": "ਜਾਰੀ ਰੱਖੋ",
"title": "ਆਉ ਇੱਕ ਐਕਸਟੈਂਸ਼ਨ ਨਾਲ ਸ਼ੁਰੂ ਕਰੀਏ"
},
"proxy": {
"back": "ਵਾਪਸ ਜਾਓ",
"explainer": "ਪ੍ਰੌਕਸੀ ਵਿਧੀ ਨਾਲ, ਤੁਸੀਂ ਸਵੈ-ਸੇਵਾ ਪ੍ਰੌਕਸੀ ਬਣਾ ਕੇ ਵਧੀਆ ਗੁਣਵੱਤਾ ਵਾਲੀਆਂ ਸਟ੍ਰੀਮਾਂ ਪ੍ਰਾਪਤ ਕਰ ਸਕਦੇ ਹੋ.",
"input": {
"errorConnection": "ਪ੍ਰੌਕਸੀ ਨਾਲ ਕਨੈਕਟ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ",
"errorInvalidUrl": "ਵੈਧ URL ਨਹੀਂ ਹੈ",
"errorNotProxy": "ਇੱਕ ਪ੍ਰੌਕਸੀ ਦੀ ਉਮੀਦ ਕੀਤੀ ਪਰ ਇੱਕ ਵੈਬਸਾਈਟ ਮਿਲੀ",
"label": "ਪ੍ਰੌਕਸੀ URL",
"placeholder": "https://"
},
"link": "ਇੱਕ ਪ੍ਰੌਕਸੀ ਬਣਾਉਣਾ ਸਿੱਖੋ",
"submit": "ਪ੍ਰੌਕਸੀ ਸਪੁਰਦ ਕਰੋ",
"title": "ਆਓ ਇੱਕ ਨਵੀਂ ਪ੍ਰੌਕਸੀ ਬਣਾਈਏ"
},
"start": {
"explainer": "ਸਭ ਤੋਂ ਵਧੀਆ ਸਟ੍ਰੀਮਾਂ ਨੂੰ ਸੰਭਵ ਬਣਾਉਣ ਲਈ, ਤੁਹਾਨੂੰ ਇਹ ਚੁਣਨ ਦੀ ਲੋੜ ਹੋਵੇਗੀ ਕਿ ਤੁਸੀਂ ਕਿਹੜਾ ਸਟ੍ਰੀਮਿੰਗ ਤਰੀਕਾ ਵਰਤਣਾ ਚਾਹੁੰਦੇ ਹੋ.",
"options": {
"default": {
"text": "ਮੈਨੂੰ ਚੰਗੀ ਕੁਆਲਿਟੀ ਦੀਆਂ ਸਟ੍ਰੀਮਾਂ ਨਹੀਂ ਚਾਹੀਦੀਆਂ,<0 /> <1>ਡਿਫੌਲਟ ਸੈੱਟਅੱਪ ਦੀ ਵਰਤੋਂ ਕਰੋ</1>"
},
"extension": {
"action": "ਇਕਸਟੈਨਸ਼ਨ ਇੰਸਟਾਲ ਕਰੋ",
"description": "ਬ੍ਰਾਊਜ਼ਰ ਐਕਸਟੈਂਸ਼ਨ ਨੂੰ ਸਥਾਪਿਤ ਕਰੋ ਅਤੇ ਵਧੀਆ ਸਰੋਤਾਂ ਤੱਕ ਪਹੁੰਚ ਪ੍ਰਾਪਤ ਕਰੋ.",
"quality": "ਵਧੀਆ ਗੁਣਵੱਤਾ",
"title": "ਬ੍ਰਾਊਜ਼ਰ ਐਕਸਟੈਂਸ਼ਨ"
},
"proxy": {
"action": "ਪ੍ਰੌਕਸੀ ਸੈੱਟਅੱਪ ਕਰੋ",
"description": "ਸਿਰਫ਼ 5 ਮਿੰਟਾਂ ਵਿੱਚ ਇੱਕ ਪ੍ਰੌਕਸੀ ਸੈੱਟਅੱਪ ਕਰੋ ਅਤੇ ਵਧੀਆ ਸਰੋਤਾਂ ਤੱਕ ਪਹੁੰਚ ਪ੍ਰਾਪਤ ਕਰੋ.",
"quality": "ਚੰਗੀ ਗੁਣਵੱਤਾ",
"title": "ਕਸਟਮ ਪ੍ਰੌਕਸੀ"
}
},
"title": "ਚਲੋ ਤੁਹਾਨੂੰ movie-web ਨਾਲ ਸੈੱਟਅੱਪ ਕਰਵਾਉਂਦੇ ਹਾਂ"
}
},
"overlays": {
"close": "ਬੰਦ ਕਰੋ"
},
"player": {
"back": {
"default": "ਘਰ ਵਾਪਸ",
"short": "ਵਾਪਸ"
},
"casting": {
"enabled": "ਡਿਵਾਈਸ 'ਤੇ ਕਾਸਟ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ..."
},
"menus": {
"downloads": {
"copyHlsPlaylist": "HLS ਪਲੇਲਿਸਟ ਲਿੰਕ ਕਾਪੀ ਕਰੋ",
"disclaimer": "ਡਾਊਨਲੋਡ ਸਿੱਧੇ ਪ੍ਰਦਾਤਾ ਤੋਂ ਲਏ ਜਾਂਦੇ ਹਨ. ਮੂਵੀ-ਵੈੱਬ ਦਾ ਇਸ 'ਤੇ ਕੰਟਰੋਲ ਨਹੀਂ ਹੈ ਕਿ ਡਾਊਨਲੋਡ ਕਿਵੇਂ ਪ੍ਰਦਾਨ ਕੀਤੇ ਜਾਂਦੇ ਹਨ.",
"downloadSubtitle": "ਮੌਜੂਦਾ ਉਪਸਿਰਲੇਖ ਡਾਊਨਲੋਡ ਕਰੋ",
"downloadVideo": "ਵੀਡੀਓ ਡਾਊਨਲੋਡ ਕਰੋ",
"hlsDisclaimer": "ਡਾਊਨਲੋਡ ਸਿੱਧੇ ਪ੍ਰਦਾਤਾ ਤੋਂ ਲਏ ਜਾਂਦੇ ਹਨ। ਮੂਵੀ-ਵੈਬ ਦਾ ਇਸ 'ਤੇ ਕੰਟਰੋਲ ਨਹੀਂ ਹੈ ਕਿ ਡਾਊਨਲੋਡ ਕਿਵੇਂ ਪ੍ਰਦਾਨ ਕੀਤੇ ਜਾਂਦੇ ਹਨ।<br /><br />ਕਿਰਪਾ ਕਰਕੇ ਧਿਆਨ ਦਿਓ ਕਿ ਤੁਸੀਂ ਇੱਕ HLS ਪਲੇਲਿਸਟ ਡਾਊਨਲੋਡ ਕਰ ਰਹੇ ਹੋ, <bold>ਜੇ ਤੁਸੀਂ ਉੱਨਤ ਸਟ੍ਰੀਮਿੰਗ ਫਾਰਮੈਟਾਂ ਤੋਂ ਜਾਣੂ ਨਹੀਂ ਹੋ ਤਾਂ ਇਸਨੂੰ ਡਾਊਨਲੋਡ ਕਰਨ ਦੀ ਸਿਫ਼ਾਰਸ਼ ਨਹੀਂ ਕੀਤੀ ਜਾਂਦੀ। </bold>.ਵੱਖ-ਵੱਖ ਫਾਰਮੈਟਾਂ ਲਈ ਵੱਖ-ਵੱਖ ਸਰੋਤਾਂ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰੋ.",
"onAndroid": {
"1": "Android 'ਤੇ ਡਾਊਨਲੋਡ ਕਰਨ ਲਈ, ਡਾਊਨਲੋਡ ਬਟਨ 'ਤੇ ਕਲਿੱਕ ਕਰੋ ਫਿਰ, ਨਵੇਂ ਪੰਨੇ 'ਤੇ, ਵੀਡੀਓ 'ਤੇ <bold>ਟੈਪ ਕਰੋ ਅਤੇ ਹੋਲਡ ਕਰੋ</bold>, ਫਿਰ <bold>ਸੇਵ</bold> ਨੂੰ ਚੁਣੋ.",
"shortTitle": "ਡਾਊਨਲੋਡ / Android",
"title": "Android 'ਤੇ ਡਾਊਨਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"
},
"onIos": {
"1": "iOS 'ਤੇ ਡਾਊਨਲੋਡ ਕਰਨ ਲਈ, ਡਾਊਨਲੋਡ ਬਟਨ 'ਤੇ ਕਲਿੱਕ ਕਰੋ ਫਿਰ, ਨਵੇਂ ਪੰਨੇ 'ਤੇ, <bold><ios_share /></bold> 'ਤੇ ਕਲਿੱਕ ਕਰੋ, ਫਿਰ <bold>Save to Files <ios_files /></bold> 'ਤੇ ਕਲਿੱਕ ਕਰੋ.",
"shortTitle": "ਡਾਊਨਲੋਡ / iOS",
"title": "iOS 'ਤੇ ਡਾਊਨਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"
},
"onPc": {
"1": "PC 'ਤੇ, ਡਾਊਨਲੋਡ ਬਟਨ 'ਤੇ ਕਲਿੱਕ ਕਰੋ, ਫਿਰ, ਨਵੇਂ ਪੰਨੇ 'ਤੇ, ਵੀਡੀਓ 'ਤੇ ਸੱਜਾ ਕਲਿੱਕ ਕਰੋ ਅਤੇ <bold>ਵੀਡੀਓ ਨੂੰ ਇਸ ਤਰ੍ਹਾਂ ਸੁਰੱਖਿਅਤ ਕਰੋ</bold> ਚੁਣੋ.",
"shortTitle": "ਡਾਊਨਲੋਡ / PC",
"title": "PC 'ਤੇ ਡਾਊਨਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"
},
"title": "ਡਾਊਨਲੋਡ"
},
"episodes": {
"button": "ਐਪੀਸੋਡ",
"emptyState": "ਇਸ ਸੀਜ਼ਨ ਵਿੱਚ ਕੋਈ ਐਪੀਸੋਡ ਨਹੀਂ ਹਨ, ਬਾਅਦ ਵਿੱਚ ਦੁਬਾਰਾ ਜਾਂਚ ਕਰੋ!",
"episodeBadge": "E{{episode}}",
"loadingError": "ਸੀਜ਼ਨ ਲੋਡ ਕਰਨ ਵਿੱਚ ਤਰੁੱਟੀ",
"loadingList": "ਲੋਡ ਹੋ ਰਿਹਾ ਹੈ...",
"loadingTitle": "ਲੋਡ ਹੋ ਰਿਹਾ ਹੈ...",
"unairedEpisodes": "ਇਸ ਸੀਜ਼ਨ ਵਿੱਚ ਇੱਕ ਜਾਂ ਇੱਕ ਤੋਂ ਵੱਧ ਐਪੀਸੋਡਾਂ ਨੂੰ ਅਯੋਗ ਕਰ ਦਿੱਤਾ ਗਿਆ ਹੈ ਕਿਉਂਕਿ ਉਹਨਾਂ ਨੂੰ ਅਜੇ ਤੱਕ ਪ੍ਰਸਾਰਿਤ ਨਹੀਂ ਕੀਤਾ ਗਿਆ ਹੈ."
},
"playback": {
"speedLabel": "ਪਲੇਬੈਕ ਗਤੀ",
"title": "ਪਲੇਬੈਕ ਸੈਟਿੰਗਾਂ"
},
"quality": {
"automaticLabel": "ਆਟੋਮੈਟਿਕ ਗੁਣਵੱਤਾ",
"hint": "ਤੁਸੀਂ ਵੱਖ-ਵੱਖ ਗੁਣਵੱਤਾ ਵਿਕਲਪਾਂ ਨੂੰ ਪ੍ਰਾਪਤ ਕਰਨ ਲਈ <0>switching source</0> ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰ ਸਕਦੇ ਹੋ।",
"iosNoQuality": "ਐਪਲ-ਪ੍ਰਭਾਸ਼ਿਤ ਸੀਮਾਵਾਂ ਦੇ ਕਾਰਨ, ਇਸ ਸਰੋਤ ਲਈ ਗੁਣਵੱਤਾ ਦੀ ਚੋਣ iOS 'ਤੇ ਉਪਲਬਧ ਨਹੀਂ ਹੈ. ਤੁਸੀਂ ਵੱਖ-ਵੱਖ ਗੁਣਵੱਤਾ ਵਿਕਲਪਾਂ ਨੂੰ ਪ੍ਰਾਪਤ ਕਰਨ ਲਈ <0>ਕਿਸੇ ਹੋਰ ਸਰੋਤ 'ਤੇ ਜਾਣ</0> ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰ ਸਕਦੇ ਹੋ.",
"title": "ਗੁਣਵੱਤਾ"
},
"settings": {
"downloadItem": "ਡਾਊਨਲੋਡ",
"enableSubtitles": "ਉਪਸਿਰਲੇਖਾਂ ਨੂੰ ਸਮਰੱਥ ਬਣਾਓ",
"experienceSection": "ਦੇਖਣ ਦਾ ਤਜਰਬਾ",
"playbackItem": "ਪਲੇਬੈਕ ਸੈਟਿੰਗਾਂ",
"qualityItem": "ਗੁਣਵੱਤਾ",
"sourceItem": "ਵੀਡੀਓ ਸਰੋਤ",
"subtitleItem": "ਉਪਸਿਰਲੇਖ ਸੈਟਿੰਗਾਂ",
"videoSection": "ਵੀਡੀਓ ਸੈਟਿੰਗਾਂ"
},
"sources": {
"failed": {
"text": "ਕਿਸੇ ਵੀ ਵੀਡੀਓ ਨੂੰ ਲੱਭਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰਦੇ ਸਮੇਂ ਇੱਕ ਤਰੁੱਟੀ ਆਈ ਸੀ, ਕਿਰਪਾ ਕਰਕੇ ਇੱਕ ਵੱਖਰੇ ਸਰੋਤ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰੋ.",
"title": "ਸਕ੍ਰੈਪ ਕਰਨ ਵਿੱਚ ਅਸਫਲ"
},
"noEmbeds": {
"text": "ਅਸੀਂ ਕੋਈ ਏਮਬੇਡ ਲੱਭਣ ਵਿੱਚ ਅਸਮਰੱਥ ਸੀ, ਕਿਰਪਾ ਕਰਕੇ ਇੱਕ ਵੱਖਰੇ ਸਰੋਤ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰੋ.",
"title": "ਕੋਈ ਏਮਬੇਡ ਨਹੀਂ ਮਿਲੇ"
},
"noStream": {
"text": "ਇਸ ਸਰੋਤ ਵਿੱਚ ਇਸ ਫ਼ਿਲਮ ਜਾਂ ਸ਼ੋਅ ਲਈ ਕੋਈ ਸਟ੍ਰੀਮ ਨਹੀਂ ਹ.",
"title": "ਕੋਈ ਧਾਰਾ ਨਹੀਂ"
},
"title": "ਸਰੋਤ",
"unknownOption": "ਅਗਿਆਤ"
},
"subtitles": {
"customChoice": "ਫਾਈਲ ਤੋਂ ਉਪਸਿਰਲੇਖ ਚੁਣੋ",
"customizeLabel": "ਅਨੁਕੂਲਿਤ ਕਰੋ",
"offChoice": "ਬੰਦ",
"settings": {
"backlink": "ਕਸਟਮ ਉਪਸਿਰਲੇਖ",
"delay": "ਉਪਸਿਰਲੇਖ ਦੇਰੀ",
"fixCapitals": "ਪੂੰਜੀਕਰਣ ਨੂੰ ਠੀਕ ਕਰੋ"
},
"title": "ਉਪਸਿਰਲੇਖ",
"unknownLanguage": "ਅਗਿਆਤ"
}
},
"metadata": {
"api": {
"text": "API ਮੈਟਾਡੇਟਾ ਲੋਡ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ, ਕਿਰਪਾ ਕਰਕੇ ਆਪਣੇ ਇੰਟਰਨੈਟ ਕਨੈਕਸ਼ਨ ਦੀ ਜਾਂਚ ਕਰੋ।",
"title": "API ਮੈਟਾਡੇਟਾ ਲੋਡ ਕਰਨ ਵਿੱਚ ਅਸਫਲ"
},
"dmca": {
"badge": "ਹਟਾਇਆ ਗਿਆ",
"text": "ਬਰਖਾਸਤਗੀ ਨੋਟਿਸ ਜਾਂ ਕਾਪੀਰਾਈਟ ਦਾਅਵੇ ਕਾਰਨ ਇਹ ਮੀਡੀਆ ਹੁਣ ਉਪਲਬਧ ਨਹੀਂ ਹੈ.",
"title": "ਮੀਡੀਆ ਨੂੰ ਹਟਾ ਦਿੱਤਾ ਗਿਆ ਹੈ"
},
"extensionPermission": {
"badge": "ਇਜਾਜ਼ਤ ਗੁੰਮ ਹੈ",
"button": "ਐਕਸਟੈਂਸ਼ਨ ਦੀ ਵਰਤੋਂ ਕਰੋ",
"text": "ਤੁਹਾਡੇ ਕੋਲ ਬ੍ਰਾਊਜ਼ਰ ਐਕਸਟੈਂਸ਼ਨ ਹੈ, ਪਰ ਸਾਨੂੰ ਐਕਸਟੈਂਸ਼ਨ ਦੀ ਵਰਤੋਂ ਸ਼ੁਰੂ ਕਰਨ ਲਈ ਤੁਹਾਡੀ ਇਜਾਜ਼ਤ ਦੀ ਲੋੜ ਹੈ.",
"title": "ਐਕਸਟੈਂਸ਼ਨ ਨੂੰ ਕੌਂਫਿਗਰ ਕਰੋ"
},
"failed": {
"badge": "ਅਸਫਲ ਰਿਹਾ",
"homeButton": "ਘਰ ਜਾਓ",
"text": "TMDB ਤੋਂ ਮੀਡੀਆ ਦਾ ਮੈਟਾਡੇਟਾ ਲੋਡ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ. ਕਿਰਪਾ ਕਰਕੇ ਜਾਂਚ ਕਰੋ ਕਿ ਕੀ ਤੁਹਾਡੇ ਇੰਟਰਨੈਟ ਕਨੈਕਸ਼ਨ 'ਤੇ TMDB ਬੰਦ ਹੈ ਜਾਂ ਬਲੌਕ ਹੈ.",
"title": "ਮੈਟਾਡੇਟਾ ਲੋਡ ਕਰਨ ਵਿੱਚ ਅਸਫਲ"
},
"notFound": {
"badge": "ਨਹੀਂ ਲਭਿਆ",
"homeButton": "ਘਰ ਵਾਪਸ",
"text": "ਅਸੀਂ ਤੁਹਾਡੇ ਦੁਆਰਾ ਬੇਨਤੀ ਕੀਤੀ ਮੀਡੀਆ ਨੂੰ ਨਹੀਂ ਲੱਭ ਸਕੇ. ਜਾਂ ਤਾਂ ਇਸਨੂੰ ਹਟਾ ਦਿੱਤਾ ਗਿਆ ਹੈ ਜਾਂ ਤੁਸੀਂ URL ਨਾਲ ਛੇੜਛਾੜ ਕੀਤੀ ਹੈ.",
"title": "ਉਹ ਮੀਡੀਆ ਨਹੀਂ ਲੱਭ ਸਕਿਆ।"
}
},
"nextEpisode": {
"cancel": "ਰੱਦ ਕਰੋ",
"next": "ਅਗਲਾ ਐਪੀਸੋਡ"
},
"playbackError": {
"badge": "ਪਲੇਬੈਕ ਗੜਬੜ",
"errors": {
"errorAborted": "ਉਪਭੋਗਤਾ ਦੀ ਬੇਨਤੀ 'ਤੇ ਮੀਡੀਆ ਦੀ ਪ੍ਰਾਪਤੀ ਨੂੰ ਰੋਕ ਦਿੱਤਾ ਗਿਆ ਸੀ.",
"errorDecode": "ਪਹਿਲਾਂ ਵਰਤੋਂਯੋਗ ਹੋਣ ਦਾ ਨਿਸ਼ਚਤ ਹੋਣ ਦੇ ਬਾਵਜੂਦ, ਮੀਡੀਆ ਸਰੋਤ ਨੂੰ ਡੀਕੋਡ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰਦੇ ਸਮੇਂ ਇੱਕ ਤਰੁੱਟੀ ਆਈ, ਨਤੀਜੇ ਵਜੋਂ ਇੱਕ ਤਰੁੱਟੀ ਹੋਈ.",
"errorGenericMedia": "ਅਗਿਆਤ ਮੀਡੀਆ ਗਲਤੀ ਆਈ ਹੈ।",
"errorNetwork": "ਕੁਝ ਕਿਸਮ ਦੀ ਨੈੱਟਵਰਕ ਤਰੁੱਟੀ ਆਈ ਹੈ ਜੋ ਪਹਿਲਾਂ ਉਪਲਬਧ ਹੋਣ ਦੇ ਬਾਵਜੂਦ ਮੀਡੀਆ ਨੂੰ ਸਫਲਤਾਪੂਰਵਕ ਪ੍ਰਾਪਤ ਹੋਣ ਤੋਂ ਰੋਕਦੀ ਹੈ.",
"errorNotSupported": "ਮੀਡੀਆ ਜਾਂ ਮੀਡੀਆ ਪ੍ਰਦਾਤਾ ਵਸਤੂ ਸਮਰਥਿਤ ਨਹੀਂ ਹੈ."
},
"homeButton": "ਘਰ ਜਾਓ",
"text": "ਮੀਡੀਆ ਨੂੰ ਚਲਾਉਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰਦੇ ਹੋਏ ਇੱਕ ਤਰੁੱਟੀ ਉਤਪੰਨ ਹੋਈ। ਮੁੜ ਕੋਸ਼ਿਸ ਕਰੋ ਜੀ.",
"title": "ਵੀਡੀਓ ਚਲਾਉਣਾ ਅਸਫਲ ਰਿਹਾ!"
},
"scraping": {
"items": {
"failure": "ਗੜਬੜ ਹੋ ਗਈ",
"notFound": "ਕੋਲ ਵੀਡੀਓ ਨਹੀਂ ਹੈ",
"pending": "ਵੀਡੀਓਜ਼ ਲਈ ਜਾਂਚ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ..."
},
"notFound": {
"badge": "ਨਹੀਂ ਲਭਿਆ",
"detailsButton": "ਵੇਰਵਾ ਦਿਖਾਓ",
"homeButton": "ਘਰ ਜਾਓ",
"text": "ਅਸੀਂ ਆਪਣੇ ਪ੍ਰਦਾਤਾਵਾਂ ਦੁਆਰਾ ਖੋਜ ਕੀਤੀ ਹੈ ਅਤੇ ਉਹ ਮੀਡੀਆ ਨਹੀਂ ਲੱਭ ਸਕਦੇ ਜੋ ਤੁਸੀਂ ਲੱਭ ਰਹੇ ਹੋ! ਅਸੀਂ ਮੀਡੀਆ ਦੀ ਮੇਜ਼ਬਾਨੀ ਨਹੀਂ ਕਰਦੇ ਹਾਂ ਅਤੇ ਜੋ ਉਪਲਬਧ ਹੈ ਉਸ 'ਤੇ ਸਾਡਾ ਕੋਈ ਕੰਟਰੋਲ ਨਹੀਂ ਹੈ. ਕਿਰਪਾ ਕਰਕੇ ਹੋਰ ਵੇਰਵਿਆਂ ਲਈ ਹੇਠਾਂ 'ਵੇਰਵੇ ਦਿਖਾਓ' 'ਤੇ ਕਲਿੱਕ ਕਰੋ.",
"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": "ਤੁਹਾਡਾ ਪ੍ਰੋਫਾਈਲ ਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ",
"loadingUserError": {
"logout": "ਲਾੱਗ ਆਊਟ",
"reset": "ਕਸਟਮ ਸਰਵਰ ਰੀਸੈਟ ਕਰੋ",
"text": "ਤੁਹਾਡੀ ਪ੍ਰੋਫਾਈਲ ਲੋਡ ਕਰਨ ਵਿੱਚ ਅਸਫਲ",
"textWithReset": "ਤੁਹਾਡੇ ਕਸਟਮ ਸਰਵਰ ਤੋਂ ਤੁਹਾਡੀ ਪ੍ਰੋਫਾਈਲ ਲੋਡ ਕਰਨ ਵਿੱਚ ਅਸਫਲ, ਡਿਫੌਲਟ ਸਰਵਰ ਤੇ ਵਾਪਸ ਰੀਸੈਟ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?"
},
"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": "ਪ੍ਰੋਫਾਈਲ ਰੰਗ ਇੱਕ",
"secondColor": "ਪ੍ਰੋਫਾਈਲ ਰੰਗ ਦੋ",
"title": "ਪ੍ਰੋਫਾਈਲ ਤਸਵੀਰ ਦਾ ਸੰਪਾਦਨ ਕਰੋ",
"userIcon": "ਉਪਭੋਗਤਾ ਪ੍ਰਤੀਕ"
},
"register": {
"cta": "ਸ਼ੁਰੂ ਕਰੋ",
"text": "ਡਿਵਾਈਸਾਂ ਵਿਚਕਾਰ ਆਪਣੀ ਘੜੀ ਦੀ ਪ੍ਰਗਤੀ ਨੂੰ ਸਾਂਝਾ ਕਰੋ ਅਤੇ ਉਹਨਾਂ ਨੂੰ ਸਿੰਕ ਰੱਖੋ.",
"title": "ਕਲਾਉਡ ਨਾਲ ਸਿੰਕ ਕਰੋ"
},
"title": "ਖਾਤਾ"
},
"appearance": {
"activeTheme": "ਕਿਰਿਆਸ਼ੀਲ",
"themes": {
"blue": "ਨੀਲਾ",
"default": "ਡਿਫਾਲਟ",
"gray": "ਸਲੇਟੀ",
"red": "ਲਾਲ",
"teal": "ਟੀਲ"
},
"title": "ਰੂਪ"
},
"connections": {
"server": {
"description": "ਜੇਕਰ ਤੁਸੀਂ ਆਪਣਾ ਡੇਟਾ ਸਟੋਰ ਕਰਨ ਲਈ ਇੱਕ ਕਸਟਮ ਬੈਕਐਂਡ ਨਾਲ ਜੁੜਨਾ ਚਾਹੁੰਦੇ ਹੋ, ਤਾਂ ਇਸਨੂੰ ਸਮਰੱਥ ਕਰੋ ਅਤੇ URL ਪ੍ਰਦਾਨ ਕਰੋ। <0>ਹਿਦਾਇਤਾਂ.</0>",
"label": "ਕਸਟਮ ਸਰਵਰ",
"urlLabel": "ਕਸਟਮ ਸਰਵਰ URL"
},
"setup": {
"doSetup": "ਸੈੱਟਅੱਪ ਕਰੋ",
"errorStatus": {
"description": "ਅਜਿਹਾ ਲਗਦਾ ਹੈ ਕਿ ਇਸ ਸੈੱਟਅੱਪ ਵਿੱਚ ਇੱਕ ਜਾਂ ਵੱਧ ਆਈਟਮਾਂ ਤੁਹਾਡੇ ਧਿਆਨ ਦੀ ਲੋੜ ਹੈ.",
"title": "ਕੁਝ ਤੁਹਾਡੇ ਧਿਆਨ ਦੀ ਲੋੜ ਹੈ"
},
"itemError": "ਇਸ ਸੈਟਿੰਗ ਵਿੱਚ ਕੁਝ ਗੜਬੜ ਹੈ. ਇਸਨੂੰ ਠੀਕ ਕਰਨ ਲਈ ਦੁਬਾਰਾ ਸੈੱਟਅੱਪ 'ਤੇ ਜਾਓ.",
"items": {
"default": "ਪੂਰਵ-ਨਿਰਧਾਰਤ ਸੈੱਟਅੱਪ",
"extension": "ਐਕਸਟੈਂਸ਼ਨ",
"proxy": "ਕਸਟਮ ਪ੍ਰੌਕਸੀ"
},
"redoSetup": "ਸੈੱਟਅੱਪ ਮੁੜ ਕਰੋ",
"successStatus": {
"description": "ਤੁਹਾਡੇ ਮਨਪਸੰਦ ਮੀਡੀਆ ਨੂੰ ਦੇਖਣਾ ਸ਼ੁਰੂ ਕਰਨ ਲਈ ਤੁਹਾਡੇ ਲਈ ਸਾਰੀਆਂ ਚੀਜ਼ਾਂ ਮੌਜੂਦ ਹਨ.",
"title": "ਸਭ ਕੁਝ ਸਥਾਪਤ ਹੈ!"
},
"unsetStatus": {
"description": "ਕਿਰਪਾ ਕਰਕੇ ਸੈਟਅਪ ਪ੍ਰਕਿਰਿਆ ਸ਼ੁਰੂ ਕਰਨ ਲਈ ਸੱਜੇ ਪਾਸੇ ਦੇ ਬਟਨ 'ਤੇ ਕਲਿੱਕ ਕਰੋ.",
"title": "ਤੁਸੀਂ ਸੈੱਟਅੱਪ ਵਿੱਚੋਂ ਨਹੀਂ ਲੰਘੇ"
}
},
"title": "ਕਨੈਕਸ਼ਨ",
"workers": {
"addButton": "ਨਵਾਂ ਵਰਕਰ ਸ਼ਾਮਲ ਕਰੋ",
"description": "ਐਪਲੀਕੇਸ਼ਨ ਫੰਕਸ਼ਨ ਬਣਾਉਣ ਲਈ, ਸਾਰੇ ਟ੍ਰੈਫਿਕ ਨੂੰ ਪ੍ਰੌਕਸੀਆਂ ਦੁਆਰਾ ਰੂਟ ਕੀਤਾ ਜਾਂਦਾ ਹੈ. ਜੇਕਰ ਤੁਸੀਂ ਆਪਣੇ ਖੁਦ ਦੇ ਵਰਕਰਾਂ ਨੂੰ ਲਿਆਉਣਾ ਚਾਹੁੰਦੇ ਹੋ ਤਾਂ ਇਸਨੂੰ ਚਾਲੂ ਕਰੋ. <0>ਹਿਦਾਇਤਾਂ।</0>",
"emptyState": "ਅਜੇ ਕੋਈ ਕਰਮਚਾਰੀ ਨਹੀਂ, ਹੇਠਾਂ ਇੱਕ ਸ਼ਾਮਲ ਕਰੋ",
"label": "ਕਸਟਮ ਪ੍ਰੌਕਸੀ ਵਰਕਰਾਂ ਦੀ ਵਰਤੋਂ ਕਰੋ",
"urlLabel": "ਵਰਕਰ URLs",
"urlPlaceholder": "https://"
}
},
"preferences": {
"language": "ਐਪਲੀਕੇਸ਼ਨ ਭਾਸ਼ਾ",
"languageDescription": "ਪੂਰੀ ਐਪਲੀਕੇਸ਼ਨ 'ਤੇ ਭਾਸ਼ਾ ਲਾਗੂ ਕੀਤੀ ਗਈ।",
"thumbnail": "ਥੰਬਨੇਲ ਬਣਾਓ",
"thumbnailDescription": "ਬਹੁਤੀ ਵਾਰ, ਵੀਡੀਓਜ਼ ਵਿੱਚ ਥੰਬਨੇਲ ਨਹੀਂ ਹੁੰਦੇ ਹਨ. ਤੁਸੀਂ ਇਸ ਸੈਟਿੰਗ ਨੂੰ ਫਲਾਈ 'ਤੇ ਤਿਆਰ ਕਰਨ ਲਈ ਸਮਰੱਥ ਕਰ ਸਕਦੇ ਹੋ ਪਰ ਉਹ ਤੁਹਾਡੇ ਵੀਡੀਓ ਨੂੰ ਹੌਲੀ ਕਰ ਸਕਦੇ ਹਨ.",
"thumbnailLabel": "ਥੰਬਨੇਲ ਬਣਾਓ",
"title": "ਤਰਜੀਹਾਂ"
},
"reset": "ਆਰਾਮ",
"save": "ਸੇਵ",
"sidebar": {
"info": {
"appVersion": "ਐਪ ਸੰਸਕਰਣ",
"backendUrl": "ਬੈਕਐਂਡ URL",
"backendVersion": "ਬੈਕਐਂਡ ਸੰਸਕਰਣ",
"hostname": "ਹੋਸਟਨਾਮ",
"insecure": "ਅਸੁਰੱਖਿਅਤ",
"notLoggedIn": "ਤੁਸੀਂ ਲੌਗਇਨ ਨਹੀਂ ਹੋ",
"secure": "ਸੁਰੱਖਿਅਤ",
"title": "ਐਪ ਜਾਣਕਾਰੀ",
"unknownVersion": "ਅਗਿਆਤ",
"userId": "ਯੂਜਰ ਆਈਡੀ"
}
},
"subtitles": {
"backgroundLabel": "ਬੈਕਗ੍ਰਾਊਂਡ ਧੁੰਦਲਾਪਨ",
"colorLabel": "ਰੰਗ",
"previewQuote": "ਮੈਨੂੰ ਡਰਨਾ ਨਹੀਂ ਚਾਹੀਦਾ. ਡਰ ਮਨ ਨੂੰ ਮਾਰਨ ਵਾਲਾ ਹੈ.",
"textSizeLabel": "ਟੈਕਸਟ ਦਾ ਆਕਾਰ",
"title": "ਉਪਸਿਰਲੇਖ"
},
"unsaved": "ਤੁਹਾਡੇ ਕੋਲ ਅਣਰੱਖਿਅਤ ਤਬਦੀਲੀਆਂ ਹਨ"
} }
} }

View File

@ -116,7 +116,10 @@
"failed": "Arrrr failed to find media, try again!", "failed": "Arrrr failed to find media, try again!",
"loading": "Hold yer horses, me heartie!", "loading": "Hold yer horses, me heartie!",
"noResults": "We couldn't find anythin', arrr!", "noResults": "We couldn't find anythin', arrr!",
"placeholder": "What do ye want to watch?", "placeholder": {
"default": "What do ye want to watch?",
"extra": []
},
"sectionTitle": "Searchin' results" "sectionTitle": "Searchin' results"
}, },
"titles": { "titles": {
@ -243,7 +246,6 @@
"menus": { "menus": {
"downloads": { "downloads": {
"disclaimer": "Downloads be taken directly from the provider. movie-web does not have control over how the downloads be provided.", "disclaimer": "Downloads be taken directly from the provider. movie-web does not have control over how the downloads be provided.",
"downloadPlaylist": "Download playlist",
"downloadSubtitle": "Download current subtitle", "downloadSubtitle": "Download current subtitle",
"downloadVideo": "Download film", "downloadVideo": "Download film",
"hlsDisclaimer": "Loot are taken directly from the provider. movie-web does nah 'ave control o'er how the loot are provided. <br /><br />Please note that ye be downloadin' an HLS playlist, <bold>'tisn't recommended t' download if ye be nah familiar wit' advanced streamin' formats</bold>. Try different sources fer different formats.", "hlsDisclaimer": "Loot are taken directly from the provider. movie-web does nah 'ave control o'er how the loot are provided. <br /><br />Please note that ye be downloadin' an HLS playlist, <bold>'tisn't recommended t' download if ye be nah familiar wit' advanced streamin' formats</bold>. Try different sources fer different formats.",

View File

@ -116,7 +116,10 @@
"failed": "Nie udało się znaleźć mediów, Spróbuj ponownie!", "failed": "Nie udało się znaleźć mediów, Spróbuj ponownie!",
"loading": "Wczytywanie...", "loading": "Wczytywanie...",
"noResults": "Nie mogliśmy niczego znaleźć!", "noResults": "Nie mogliśmy niczego znaleźć!",
"placeholder": "Co chciałbyś obejrzeć?", "placeholder": {
"default": "Co chciałbyś obejrzeć?",
"extra": []
},
"sectionTitle": "Wyniki wyszukiwania" "sectionTitle": "Wyniki wyszukiwania"
}, },
"titles": { "titles": {
@ -128,15 +131,11 @@
}, },
"morning": { "morning": {
"default": "Co chciałbyś obejrzeć dziś rano?", "default": "Co chciałbyś obejrzeć dziś rano?",
"extra": [ "extra": ["Słyszałem że „Przed wschodem słońca” jest dobre"]
"Słyszałem że „Przed wschodem słońca” jest dobre"
]
}, },
"night": { "night": {
"default": "Co chciałbyś obejrzeć dziś wieczorem?", "default": "Co chciałbyś obejrzeć dziś wieczorem?",
"extra": [ "extra": ["Zmęczony? Słyszałem że „Egzorcysta” jest dobry."]
"Zmęczony? Słyszałem że „Egzorcysta” jest dobry."
]
} }
} }
}, },
@ -243,7 +242,6 @@
"menus": { "menus": {
"downloads": { "downloads": {
"disclaimer": "Pliki do pobrania są pobierane bezpośrednio od dostawcy. movie-web nie ma kontroli nad sposobem dostarczania plików do pobrania.", "disclaimer": "Pliki do pobrania są pobierane bezpośrednio od dostawcy. movie-web nie ma kontroli nad sposobem dostarczania plików do pobrania.",
"downloadPlaylist": "Pobierz playlistę",
"downloadSubtitle": "Pobierz aktualne napisy", "downloadSubtitle": "Pobierz aktualne napisy",
"downloadVideo": "Pobierz wideo", "downloadVideo": "Pobierz wideo",
"hlsDisclaimer": "Pliki do pobrania są pobierane bezpośrednio od dostawcy. movie-web nie ma kontroli nad sposobem dostarczania plików do pobrania.<br /><br />Należy pamiętać, że pobierasz playlistę HLS, <bold>nie zaleca się pobierania, jeśli nie jesteś zaznajomiony z zaawansowanymi formatami przesyłania strumieniowego</bold>. Wypróbuj różne źródła dla innych formatów.", "hlsDisclaimer": "Pliki do pobrania są pobierane bezpośrednio od dostawcy. movie-web nie ma kontroli nad sposobem dostarczania plików do pobrania.<br /><br />Należy pamiętać, że pobierasz playlistę HLS, <bold>nie zaleca się pobierania, jeśli nie jesteś zaznajomiony z zaawansowanymi formatami przesyłania strumieniowego</bold>. Wypróbuj różne źródła dla innych formatów.",

View File

@ -116,7 +116,10 @@
"failed": "Falha ao encontrar mídia, tente novamente!", "failed": "Falha ao encontrar mídia, tente novamente!",
"loading": "Carregando...", "loading": "Carregando...",
"noResults": "Não conseguimos encontrar nada!", "noResults": "Não conseguimos encontrar nada!",
"placeholder": "O que você quer assistir?", "placeholder": {
"default": "O que você quer assistir?",
"extra": []
},
"sectionTitle": "Resultados da pesquisa" "sectionTitle": "Resultados da pesquisa"
}, },
"titles": { "titles": {
@ -128,15 +131,11 @@
}, },
"morning": { "morning": {
"default": "O que você gostaria de assistir esta manhã?", "default": "O que você gostaria de assistir esta manhã?",
"extra": [ "extra": ["Ouvi dizer que Antes do Amanhecer é bom"]
"Ouvi dizer que Antes do Amanhecer é bom"
]
}, },
"night": { "night": {
"default": "O que você gostaria de assistir esta noite?", "default": "O que você gostaria de assistir esta noite?",
"extra": [ "extra": ["Cansado? Ouvi dizer que O Exorcista é bom."]
"Cansado? Ouvi dizer que O Exorcista é bom."
]
} }
} }
}, },
@ -242,8 +241,8 @@
}, },
"menus": { "menus": {
"downloads": { "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.", "disclaimer": "Os downloads são feitos diretamente do provedor. movie-web não tem controle sobre como os downloads são fornecidos.",
"downloadPlaylist": "Baixar playlist",
"downloadSubtitle": "Baixar legenda atual", "downloadSubtitle": "Baixar legenda atual",
"downloadVideo": "Baixar vídeo", "downloadVideo": "Baixar vídeo",
"hlsDisclaimer": "Os downloads são feitos diretamente do provedor. movie-web não tem controle sobre como os downloads são fornecidos.<br /><br />Por favor, note que você está baixando uma playlist HLS, <bold>isso é destinado para usuários familiarizados com streaming multimídia avançado.</bold>. Experimente outras fontes para formatos diferentes.", "hlsDisclaimer": "Os downloads são feitos diretamente do provedor. movie-web não tem controle sobre como os downloads são fornecidos.<br /><br />Por favor, note que você está baixando uma playlist HLS, <bold>isso é destinado para usuários familiarizados com streaming multimídia avançado.</bold>. Experimente outras fontes para formatos diferentes.",

View File

@ -115,7 +115,10 @@
"failed": "Falha ao encontrar mídia, tente novamente!", "failed": "Falha ao encontrar mídia, tente novamente!",
"loading": "A carregar...", "loading": "A carregar...",
"noResults": "Não conseguimos encontrar nada!", "noResults": "Não conseguimos encontrar nada!",
"placeholder": "O que deseja assistir?", "placeholder": {
"default": "O que deseja assistir?",
"extra": []
},
"sectionTitle": "Resultados da pesquisa" "sectionTitle": "Resultados da pesquisa"
}, },
"titles": { "titles": {
@ -127,15 +130,11 @@
}, },
"morning": { "morning": {
"default": "O que gostaria de assistir esta manhã?", "default": "O que gostaria de assistir esta manhã?",
"extra": [ "extra": ["Dizem que Antes do Amanhecer é bom"]
"Dizem que Antes do Amanhecer é bom"
]
}, },
"night": { "night": {
"default": "O que gostaria de assistir esta noite?", "default": "O que gostaria de assistir esta noite?",
"extra": [ "extra": ["Cansado? Dizem que O Exorcista é bom."]
"Cansado? Dizem que O Exorcista é bom."
]
} }
} }
}, },
@ -179,7 +178,6 @@
"menus": { "menus": {
"downloads": { "downloads": {
"disclaimer": "Os downloads são feitos diretamente pelo fornecedor. O movie-web não tem controle sobre como os downloads são fornecidos.", "disclaimer": "Os downloads são feitos diretamente pelo fornecedor. O movie-web não tem controle sobre como os downloads são fornecidos.",
"downloadPlaylist": "Baixar lista de reprodução",
"downloadSubtitle": "Baixar legenda atual", "downloadSubtitle": "Baixar legenda atual",
"downloadVideo": "Baixar vídeo", "downloadVideo": "Baixar vídeo",
"hlsDisclaimer": "Os downloads são feitos diretamente pelo fornecedor. O movie-web não tem controle sobre como os downloads são fornecidos. Por favor, note que está a baixar uma lista de reprodução HLS, isso é destinado a utilizadores familiarizados com streaming multimídia avançado.", "hlsDisclaimer": "Os downloads são feitos diretamente pelo fornecedor. O movie-web não tem controle sobre como os downloads são fornecidos. Por favor, note que está a baixar uma lista de reprodução HLS, isso é destinado a utilizadores familiarizados com streaming multimídia avançado.",

View File

@ -79,7 +79,6 @@
}, },
"footer": { "footer": {
"legal": { "legal": {
"disclaimer": "Disclaimer",
"disclaimerText": "movie-web nu găzduiește niciun fișier, ci doar trimite la servicii terțe. Problemele juridice ar trebui abordate cu gazdele și furnizorii de fișiere. movie-web nu este responsabil pentru niciun fișier media afișat de furnizorii de video." "disclaimerText": "movie-web nu găzduiește niciun fișier, ci doar trimite la servicii terțe. Problemele juridice ar trebui abordate cu gazdele și furnizorii de fișiere. movie-web nu este responsabil pentru niciun fișier media afișat de furnizorii de video."
}, },
"links": { "links": {
@ -115,7 +114,10 @@
"failed": "Găsire media eșuată, încearcă din nou!", "failed": "Găsire media eșuată, încearcă din nou!",
"loading": "Se încarcă...", "loading": "Se încarcă...",
"noResults": "Nu am putut găsi nimic!", "noResults": "Nu am putut găsi nimic!",
"placeholder": "La ce dorești să te uiți?", "placeholder": {
"default": "La ce dorești să te uiți?",
"extra": []
},
"sectionTitle": "Rezultate de căutare" "sectionTitle": "Rezultate de căutare"
}, },
"titles": { "titles": {
@ -127,15 +129,11 @@
}, },
"morning": { "morning": {
"default": "La ce dorești să te in uiți dimineață aceasta?", "default": "La ce dorești să te in uiți dimineață aceasta?",
"extra": [ "extra": ["Aud că Before Sunrise este bun"]
"Aud că Before Sunrise este bun"
]
}, },
"night": { "night": {
"default": "La ce dorești să te uiți în astă seară?", "default": "La ce dorești să te uiți în astă seară?",
"extra": [ "extra": ["Obosit? Aud că The Exorcist is good."]
"Obosit? Aud că The Exorcist is good."
]
} }
} }
}, },
@ -179,7 +177,6 @@
"menus": { "menus": {
"downloads": { "downloads": {
"disclaimer": "Descărcările sunt luate direct de la furnizor. Movie-web nu are control cum descărcările sunt furnizate.", "disclaimer": "Descărcările sunt luate direct de la furnizor. Movie-web nu are control cum descărcările sunt furnizate.",
"downloadPlaylist": "Descarcă lista de redare",
"downloadSubtitle": "Descărcați subtitlul curente", "downloadSubtitle": "Descărcați subtitlul curente",
"downloadVideo": "Descarcă video", "downloadVideo": "Descarcă video",
"hlsDisclaimer": "Descărcările sunt preluate direct de la furnizor. movie-web nu are control asupra modului în care sunt furnizate descărcările. Vă rugăm să rețineți că descărcați o listă de redare HLS, aceasta este destinată utilizatorilor familiar cu streamingul avansat.", "hlsDisclaimer": "Descărcările sunt preluate direct de la furnizor. movie-web nu are control asupra modului în care sunt furnizate descărcările. Vă rugăm să rețineți că descărcați o listă de redare HLS, aceasta este destinată utilizatorilor familiar cu streamingul avansat.",

View File

@ -1,100 +1,103 @@
{ {
"about": { "about": {
"description": "movie-web - это веб-приложение, которое ищет в интернете потоки. Команда стремится к минималистичному подходу к потреблению контента.", "description": "movie-web — это веб-приложение, которое ищет в интернете видеопотоки. Наша команда стремится к минималистичному подходу к просмотру контента.",
"faqTitle": "Общие вопросы", "faqTitle": "Частые вопросы",
"q1": { "q1": {
"body": "movie-web не размещает у себя никакого контента. Когда вы нажимаете на что-то для просмотра, в интернете происходит поиск выбранного медиа файла (на экране загрузки и во вкладке \"Видео источники\" вы можете увидеть, какой источник вы используете). Медиа файлы никогда не загружается на movie-web, все происходит через этот механизм поиска.", "body": "movie-web не размещает у себя никакой контент. Когда вы выбираете что-то посмотреть, в интернете происходит поиск выбранного медиафайла (на экране загрузки и во вкладке \"Источники для видео\" вы можете увидеть, какой источник вы используете). Медиафайлы никогда не загружаются на movie-web, все происходит через этот механизм поиска.",
"title": "Откуда берётся контент?" "title": "Откуда же берётся контент?"
}, },
"q2": { "q2": {
"body": "Невозможно запросить сериал или фильм, movie-web не управляет никаким контентом. Весь контент просматривается через источники в интернете.", "body": "Невозможно запросить сериал или фильм, movie-web не распоряжается никаким контентом. Весь контент доступен через источники в интернете.",
"title": "Где я могу запросить показ сериала или фильма?" "title": "Где я могу запросить телепередачу или фильм?"
}, },
"q3": { "q3": {
"body": "Наши результаты поиска основаны на базе данных The Movie Database (TMDB) и отображаются вне зависимости от того, есть ли в наших источниках соответствующий контент.", "body": "Наши результаты поиска основаны на базе данных The Movie Database (TMDB) и отображаются вне зависимости от того, есть ли в наших источниках соответствующий контент.",
"title": "В результатах поиска отображается сериал или фильм, но почему я не могу воспроизвести его?" "title": "В результатах поиска отображается телепередача или фильм, но почему я не могу воспроизвести их?"
}, },
"title": "О movie-web" "title": "О сайте movie-web"
}, },
"actions": { "actions": {
"copied": "Скопировано", "copied": "Скопировано",
"copy": "Копировать" "copy": "Копировать"
}, },
"auth": { "auth": {
"createAccount": "У вас ещё нет аккаунта? <0>Создайте учётную запись.</0>", "createAccount": "У вас еще нет учётной записи? <0>Создайте её. </0>",
"deviceNameLabel": "Имя устройства", "deviceNameLabel": "Имя устройства",
"deviceNamePlaceholder": "Личный телефон", "deviceNamePlaceholder": "Личный телефон",
"generate": { "generate": {
"description": "Твоя фраза работает как твой пароль и имя. Сделай чтобы она была в защите чтобы ты смог зайти снова в аккаунт", "description": "Ваша кодовая фраза служит вашим именем пользователя и паролем. Храните ее в надежном месте, поскольку она понадобится вам для входа в аккаунт",
"next": "Я сохранил мою фразу", "next": "Я сохранил свою кодовую фразу",
"passphraseFrameLabel": "Фраза", "passphraseFrameLabel": "Кодовая фраза",
"title": "Твоя фраза" "title": "Ваша кодовая фраза"
}, },
"hasAccount": "У вас уже есть аккаунт? <0>Войдите здесь.</0>", "hasAccount": "Уже есть учётная запись? <0> Войдите в неё здесь.</0>",
"login": { "login": {
"description": "Пожалуйста напишите вашу фразу чтобы зайти в аккаунт", "description": "Введите кодовую фразу для входа в учётную запись",
"deviceLengthError": "Введите имя устройства", "deviceLengthError": "Введите имя устройства",
"passphraseLabel": "12-словная парольная фраза", "passphraseLabel": "Кодовая фраза из 12 слов",
"passphrasePlaceholder": "Фраза", "passphrasePlaceholder": "Кодовая фраза",
"submit": "Авторизоваться", "submit": "Войти",
"title": "Войдите в свой аккаунт", "title": "Войдите в свою учётную запись",
"validationError": "Неверная или неполная парольная фраза" "validationError": "Неверная или неполная кодовая фраза"
}, },
"register": { "register": {
"information": { "information": {
"color1": "Цвет профиля один", "color1": "Первый цвет профиля",
"color2": "Цвет профиля два", "color2": "Второй цвет профиля",
"header": "Введите название устройства, выберите цвета и значок пользователя по своему усмотрению", "header": "Введите название устройства, выберите цвета и значок профиля по своему усмотрению",
"icon": "Значок пользователя", "icon": "Значок аватара профиля",
"next": "Далее", "next": "Далее",
"title": "Информация об аккаунте" "title": "Информация об аккаунте"
} }
}, },
"trust": { "trust": {
"failed": { "failed": {
"text": "Ты её конфигурировал правильно?", "text": "Правильно ли вы настроили его?",
"title": "Не удалось связаться с сервером" "title": "Не удалось установить связь с сервером"
}, },
"host": "Вы подключаетесь к <0>{{hostname}}</0> - пожалуйста, подтвердите, что вы доверяете ему, прежде чем создавать учётную запись", "host": "Вы подключаетесь к <0>{{hostname}}</0> - пожалуйста, подтвердите, что вы доверяете ему, прежде чем создавать учётную запись",
"no": "Вернуться назад", "no": "Вернуться назад",
"title": "Доверяете ли вы этому серверу?", "title": "Вы доверяете этому серверу?",
"yes": "Я доверяю этому серверу" "yes": "Я доверяю этому серверу"
}, },
"verify": { "verify": {
"description": "Пожалуйста, введите фразу, полученную ранее, чтобы подтвердить, что вы ее сохранили, и создать свой аккаунт", "description": "Введите ранее полученную кодовую фразу, чтобы подтвердить, что вы её сохранили, и создать учётную запись",
"invalidData": "Дата инвалидная", "invalidData": "Данные недействительны",
"noMatch": "Парольная фраза не совпадает", "noMatch": "Кодовая фраза неверна",
"passphraseLabel": "Ваша 12-словная парольная фраза", "passphraseLabel": "Ваша кодовая фраза из 12 слов",
"recaptchaFailed": "Проверка ReCaptcha не удалась", "recaptchaFailed": "Проверка ReCaptcha не удалась",
"register": "Создать учётную запись", "register": "Создать учётную запись",
"title": "Подтвердите парольную фразу" "title": "Подтвердите кодовую фразу"
} }
}, },
"errors": { "errors": {
"badge": "Оно сломалось", "badge": "Сломано",
"details": "Подробности ошибки", "details": "Сведения об ошибке",
"reloadPage": "Перезагрузить страницу", "reloadPage": "Перезагрузить страницу",
"showError": "Показать сведения об ошибке", "showError": "Показать сведения об ошибке",
"title": "Мы столкнулись с ошибкой!" "title": "У нас возникла ошибка!"
}, },
"footer": { "footer": {
"legal": { "legal": {
"disclaimer": "Отказ от ответственности", "disclaimer": "Отказ от ответственности",
"disclaimerText": "movie-web не размещает никаких файлов, а лишь предоставляет ссылки на сторонние сервисы. Юридические вопросы следует решать с владельцами файлов и поставщиками услуг. movie-web не несёт ответственности за любые медиа файлы, показанные поставщиками видео." "disclaimerText": "movie-web не размещает никакие файлы, а только ссылки на сторонние источники. Юридические вопросы следует решать с хостерами и поставщиками файлов. movie-web не несет ответственности за любые медиафайлы, предоставленные поставщиками медиафайлов."
}, },
"links": { "links": {
"discord": "Discord", "discord": "Discord",
"dmca": "DMCA", "dmca": "DMCA",
"github": "GitHub" "github": "GitHub"
}, },
"tagline": "Смотрите любимые сериалы и фильмы с помощью этого приложения для потокового вещания с открытым исходным кодом." "tagline": "Смотрите свои любимые сериалы и фильмы с помощью этого приложения для воспроизведения контента с открытым исходным кодом."
}, },
"global": { "global": {
"name": "movie-web", "name": "movie-web",
"pages": { "pages": {
"about": "О", "about": "О",
"dmca": "DMCA", "dmca": "DMCA",
"login": "Войти",
"onboarding": "Настройки",
"pagetitle": "{{title}} - movie-web", "pagetitle": "{{title}} - movie-web",
"register": "Регистрация",
"settings": "Настройки" "settings": "Настройки"
} }
}, },
@ -109,15 +112,37 @@
"stopEditing": "Завершить редактирование" "stopEditing": "Завершить редактирование"
}, },
"search": { "search": {
"allResults": "Это все, что у нас есть!", "allResults": "Это всё, что у нас есть!",
"failed": "Не удалось найти медиафайл, попробуйте снова!",
"loading": "Загрузка...", "loading": "Загрузка...",
"noResults": "Мы не смогли ничего найти!", "noResults": "Мы ничего не нашли!",
"placeholder": "Что вы хотите посмотреть?", "placeholder": {
"default": "Что вы хотите посмотреть?",
"extra": []
},
"sectionTitle": "Результаты поиска" "sectionTitle": "Результаты поиска"
},
"titles": {
"day": {
"default": "Что бы вы хотели посмотреть в этот полдень?",
"extra": [
"Любите приключения? «Парк Юрского периода» прекрасно подойдет вам."
]
},
"morning": {
"default": "Что бы вы хотели посмотреть этим утром?",
"extra": ["Слышали, что «Перед рассветом» отличный фильм"]
},
"night": {
"default": "Что бы вы хотели посмотреть этим вечером?",
"extra": [
"Тяжелый день? Можем посоветовать вам фильм \"Изгоняющий дьявола\"."
]
}
} }
}, },
"media": { "media": {
"episodeDisplay": "С{{season}} Э{{episode}}", "episodeDisplay": "Сезон {{season}}, Эпизод {{episode}}",
"types": { "types": {
"movie": "Фильм", "movie": "Фильм",
"show": "Сериал" "show": "Сериал"
@ -131,43 +156,138 @@
"about": "О нас", "about": "О нас",
"donation": "Пожертвовать", "donation": "Пожертвовать",
"logout": "Выйти", "logout": "Выйти",
"register": "Авторизация",
"settings": "Настройки", "settings": "Настройки",
"support": "Поддержка" "support": "Поддержка"
} }
}, },
"notFound": { "notFound": {
"badge": "Не найдено",
"goHome": "Вернуться на главную",
"message": "Мы искали везде: в мусорных баках, в шкафу, но так и не нашли нужную вам страницу.",
"title": "Не удалось найти эту страницу" "title": "Не удалось найти эту страницу"
}, },
"onboarding": {
"defaultConfirm": {
"cancel": "Отмена",
"confirm": "Использовать настройки по умолчанию",
"description": "Стандартная настройка имеет не самые лучшие показатели передачи видео и может быть невыносимо медленной.",
"title": "Вы уверены?"
},
"extension": {
"back": "Вернуться назад",
"explainer": "Используя расширение для браузера, вы сможете получать лучшие источники, которые мы можем предложить. Просто установите расширение.",
"explainerIos": "К сожалению, расширение для браузера не поддерживается на iOS, нажмите <bold>Назад</bold>, чтобы выбрать другой вариант.",
"extensionHelp": "Если вы установили расширение, но оно не обнаруживается, <bold>откройте его через меню расширений браузера</bold> и следуйте инструкциям на экране.",
"linkChrome": "Установить расширение Chrome",
"linkFirefox": "Установите расширение Firefox",
"notDetecting": "Установили расширение, но сайт не обнаруживает его? Попробуйте перезагрузить страницу!",
"notDetectingAction": "Перезагрузить страницу",
"status": {
"disallowed": "Расширение не включено для этой страницы",
"disallowedAction": "Включить расширение",
"failed": "Не удалось запросить статус",
"loading": "Ждём, пока вы установите расширение",
"outdated": "Расширение устарело",
"success": "Расширение работает, как и ожидалось!"
},
"submit": "Продолжить",
"title": "Давайте начнём с расширения"
},
"proxy": {
"back": "Назад",
"explainer": "С помощью метода прокси вы можете получать потоки отличного качества, создавая прокси-сервер самостоятельно.",
"input": {
"errorConnection": "Не удалось подключиться к прокси-серверу",
"errorInvalidUrl": "Недействительный URL",
"errorNotProxy": "Ожидался прокси, а был получен веб-сайт",
"label": "URL-адрес прокси-сервера",
"placeholder": "https://"
},
"link": "Узнайте, как сделать прокси",
"submit": "Отправить прокси",
"title": "Давайте создадим новый прокси-сервер"
},
"start": {
"explainer": "Чтобы получить наилучшие потоки, вам нужно выбрать, какой метод потоковой передачи вы хотите использовать.",
"options": {
"default": {
"text": "Мне не нужны трансляции хорошего качества,<0 /> <1>использовать настройки по умолчанию</1>"
},
"extension": {
"action": "Установить расширение",
"description": "Установите расширение для браузера и получите доступ к лучшим источникам.",
"quality": "Лучшее качество",
"title": "Расширение для браузера"
},
"proxy": {
"action": "Настроить прокси",
"description": "Настройте прокси всего за 5 минут и получите доступ к отличным источникам.",
"quality": "Хорошее качество",
"title": "Пользовательский прокси-сервер"
}
},
"title": "Давайте настроим movie-web"
}
},
"overlays": { "overlays": {
"close": "Закрыть" "close": "Закрыть"
}, },
"player": { "player": {
"back": { "back": {
"default": "Вернуться на главную" "default": "Вернуться на главную",
"short": "Назад"
},
"casting": {
"enabled": "Транслируем на устройство…"
}, },
"menus": { "menus": {
"downloads": { "downloads": {
"copyHlsPlaylist": "Скопировать ссылку на плейлист HLS",
"disclaimer": "Загрузки осуществляются непосредственно поставщиком. movie-web не контролирует способ предоставления загрузок.",
"downloadSubtitle": "Скачать текущие субтитры", "downloadSubtitle": "Скачать текущие субтитры",
"downloadVideo": "Скачать видео",
"hlsDisclaimer": "Загрузки осуществляются непосредственно поставщиком. movie-web не контролирует способ предоставления загрузок.<br /><br />Обратите внимание на то, что вы скачиваете плейлист HLS, <bold>его не рекомендуется скачивать, если вы не знакомы с продвинутыми форматами потокового воспроизведения</bold>. Попробуйте разные источники для разных форматов.",
"onAndroid": {
"1": "Чтобы скачать на Android, нажмите на кнопку загрузки, затем на новой странице <bold>нажмите и удерживайте</bold> на видео, а затем выберите <bold>сохранить</bold>.",
"shortTitle": "Скачать / Android",
"title": "Загрузка на Android"
},
"onIos": {
"1": "Чтобы загрузить на iOS, нажмите кнопку загрузки, затем на новой странице нажмите <bold><ios_share /></bold>, затем <bold>Сохранить в Файлы <ios_files /></bold>.",
"shortTitle": "Скачать / iOS",
"title": "Загрузка на iOS"
},
"onPc": {
"1": "На компьютере нажмите кнопку загрузки, затем на новой странице щелкните по видео правой кнопкой мыши и выберите <bold>Сохранить видео как</bold>",
"shortTitle": "Скачать / ПК",
"title": "Загрузка на ПК"
},
"title": "Скачать" "title": "Скачать"
}, },
"episodes": { "episodes": {
"button": "Эпизоды", "button": "Эпизоды",
"emptyState": "В этом сезоне нет ни одной серии, загляните позже!", "emptyState": "В этом сезоне нет эпизодов, загляните позже!",
"episodeBadge": "Э{{episode}}", "episodeBadge": П{{episode}}",
"loadingError": "Ошибка при загрузке сезона", "loadingError": "Ошибка при загрузке сезона",
"loadingList": "Загрузка...", "loadingList": "Загрузка...",
"loadingTitle": "Загрузка..." "loadingTitle": "Загрузка...",
"unairedEpisodes": "Один или несколько эпизодов этого сезона были отключены, потому что еще не вышли в эфир."
}, },
"playback": { "playback": {
"speedLabel": "Скорость воспроизведения", "speedLabel": "Скорость воспроизведения",
"title": "Настройки воспроизведения" "title": "Настройки воспроизведения"
}, },
"quality": { "quality": {
"automaticLabel": "Автоматическое качество" "automaticLabel": "Автоопределение качества",
"hint": "Вы можете попробовать <0>переключиться на другой источник</0>, чтобы получить различные варианты качества.",
"iosNoQuality": "Из-за ограничений, установленных Apple, выбор качества для этого источника недоступен на iOS. Вы можете попробовать <0>переключиться на другой источник</0>, чтобы получить различные варианты качества.",
"title": "Качество"
}, },
"settings": { "settings": {
"downloadItem": "Скачать", "downloadItem": "Скачать",
"enableSubtitles": "Включить субтитры", "enableSubtitles": "Включить субтитры",
"experienceSection": "Впечатления от просмотра",
"playbackItem": "Настройки воспроизведения", "playbackItem": "Настройки воспроизведения",
"qualityItem": "Качество", "qualityItem": "Качество",
"sourceItem": "Видео источники", "sourceItem": "Видео источники",
@ -176,59 +296,129 @@
}, },
"sources": { "sources": {
"failed": { "failed": {
"text": "При попытке найти видео произошла ошибка, пожалуйста, попробуйте использовать другой источник." "text": "При попытке найти видео произошла ошибка, пожалуйста, попробуйте использовать другой источник.",
"title": "Не удалось получить данные"
}, },
"noEmbeds": { "noEmbeds": {
"text": "Мы не смогли найти ни одной вставки, пожалуйста, попробуйте использовать другой источник.", "text": "Мы не смогли найти ни одного вложения, пожалуйста, попробуйте использовать другой источник.",
"title": "Не найдено ни одной вставки" "title": "Не найдено ни одного вложения"
}, },
"noStream": { "noStream": {
"text": "В этом источнике нет потоков для этого фильма или сериала.", "text": "В этом источнике нет видеопотоков для этого фильма или сериала.",
"title": "Нет потока" "title": "Нет видеопотока"
}, },
"title": "Источники", "title": "Источники",
"unknownOption": "Неизвестный" "unknownOption": "Неизвестный"
}, },
"subtitles": { "subtitles": {
"customChoice": "Выбрать субтитры из файла", "customChoice": "Выбрать субтитры из файла",
"customizeLabel": "Настроить",
"offChoice": "Выключить", "offChoice": "Выключить",
"settings": { "settings": {
"backlink": "Пользовательские субтитры" "backlink": "Пользовательские субтитры",
"delay": "Задержка субтитров",
"fixCapitals": "Исправить капитализацию букв"
}, },
"title": "Субтитры" "title": "Субтитры",
"unknownLanguage": "Неизвестный"
}
},
"metadata": {
"api": {
"text": "Не удалось загрузить метаданные API, проверьте подключение к Интернету.",
"title": "Не удалось загрузить метаданные API"
},
"dmca": {
"badge": "Удалено",
"text": "Этот контент больше не доступен из-за уведомления об удалении или претензий по авторскому праву.",
"title": "Контент был удалён"
},
"extensionPermission": {
"badge": "Разрешение отсутствует",
"button": "Используйте расширение",
"text": "У вас есть расширение для браузера, но нам нужно ваше разрешение, чтобы начать его использовать.",
"title": "Настройте расширение"
},
"failed": {
"badge": "Не удалось",
"homeButton": "Вернуться на главную",
"text": "Не удалось загрузить метаданные медиафайла из TMDB. Проверьте, не отключен ли или не заблокирован TMDB на вашем интернет-соединении.",
"title": "Не удалось загрузить метаданные"
},
"notFound": {
"badge": "Не найдено",
"homeButton": "Вернуться на главную",
"text": "Нам не удалось найти запрошенный вами медиафайл. Либо он был удален, либо вы ввели неверный URL-адрес.",
"title": "Не удалось найти контент."
} }
}, },
"nextEpisode": { "nextEpisode": {
"cancel": "Отмена", "cancel": "Отмена",
"next": "След. эпизод" "next": "Следующий эпизод"
}, },
"playbackError": { "playbackError": {
"badge": "Ошибка воспроизведения", "badge": "Ошибка воспроизведения",
"errors": { "errors": {
"errorDecode": "Несмотря на то, что ранее этот медиаресурс был пригодным для использования, при попытке его декодирования произошла ошибка." "errorAborted": "Получение медиафайла было прервано по запросу пользователя.",
"errorDecode": "Несмотря на то, что ранее этот медиаресурс был пригодным для использования, при попытке его декодирования произошла ошибка.",
"errorGenericMedia": "Возникла неизвестная ошибка медиафайла.",
"errorNetwork": "Произошла какая-то сетевая ошибка, которая не позволила успешно извлечь медиафайл, хотя ранее он был доступен.",
"errorNotSupported": "Медиафайл или его источник не поддерживается."
}, },
"homeButton": "Вернуться на главную",
"text": "При попытке воспроизвести медиа файл произошла ошибка. Пожалуйста, попробуйте ещё раз.", "text": "При попытке воспроизвести медиа файл произошла ошибка. Пожалуйста, попробуйте ещё раз.",
"title": "Не удалось воспроизвести видео!" "title": "Не удалось воспроизвести видео!"
}, },
"scraping": { "scraping": {
"items": {
"failure": "Возникла ошибка",
"notFound": "Такого видео нет",
"pending": "Ищем видео..."
},
"notFound": { "notFound": {
"detailsButton": "Показать детали", "badge": "Не найдено",
"title": "Мы не смогли найти" "detailsButton": "Показать сведения",
"homeButton": "Вернуться на главную",
"text": "Мы проверили наших поставщиков и не смогли найти нужные вам медиа! Мы не размещаем медиа и не контролируем их наличие. Пожалуйста, нажмите кнопку \"Показать сведения\" ниже, чтобы получить более подробную информацию.",
"title": "Мы не смогли ничего найти"
} }
}, },
"time": { "time": {
"regular": "{{timeWatched}} / {{duration}}" "regular": "{{timeWatched}} / {{duration}}",
"remaining": "{{timeLeft}} осталось - Завершится в {{timeFinished, datetime}}",
"shortRegular": "{{timeWatched}}",
"shortRemaining": "-{{timeLeft}}"
},
"turnstile": {
"description": "Пожалуйста, подтвердите, что вы человек, заполнив форму Captcha справа. Это необходимо для обеспечения безопасности movie-web!",
"error": "Не удалось убедиться в том, что вы человек. Пожалуйста, попробуйте еще раз.",
"title": "Мы должны убедиться, что вы человек.",
"verifyingHumanity": "Убеждаемся в том, что вы человек..."
} }
}, },
"screens": { "screens": {
"dmca": { "dmca": {
"text": "Добро пожаловать на контактную страницу movie-web по защите от DMCA! Мы уважаем права на интеллектуальную собственность и хотим оперативно решать любые проблемы, связанные с авторским правом. Если вы считаете, что ваш материал, защищенный авторским правом, был неправомерно использован на нашей платформе, отправьте подробное уведомление DMCA на указанный ниже адрес электронной почты. Пожалуйста, включите в него описание материала, защищенного авторским правом, ваши контактные данные и заявление о добросовестности ваших намерений. Мы стремимся оперативно решать подобные вопросы и ценим ваше сотрудничество, что позволяет movie-web оставаться местом, где уважается творчество и авторское право.",
"title": "DMCA" "title": "DMCA"
},
"loadingApp": "Загрузка приложения",
"loadingUser": "Загрузка вашего профиля",
"loadingUserError": {
"logout": "Выйти",
"reset": "Сбросить пользовательский сервер",
"text": "Не удалось загрузить ваш профиль",
"textWithReset": "Не удалось загрузить профиль с пользовательского сервера, хотите вернуться на сервер по умолчанию?"
},
"migration": {
"failed": "Не удалось перенести данные.",
"inProgress": "Пожалуйста, подождите, мы переносим ваши данные. Это не займет много времени."
} }
}, },
"settings": { "settings": {
"account": { "account": {
"accountDetails": { "accountDetails": {
"deviceNameLabel": "Имя устройства", "deviceNameLabel": "Имя устройства",
"deviceNamePlaceholder": "Личный телефон",
"editProfile": "Редактировать", "editProfile": "Редактировать",
"logoutButton": "Выйти" "logoutButton": "Выйти"
}, },
@ -236,7 +426,7 @@
"delete": { "delete": {
"button": "Удалить аккаунт", "button": "Удалить аккаунт",
"confirmButton": "Удалить аккаунт", "confirmButton": "Удалить аккаунт",
"confirmDescription": "Вы уверены, что хотите удалить свой аккаунт? Все ваши данные будут потеряны!", "confirmDescription": "Вы уверены, что хотите удалить свою учётную запись? Все ваши данные будут потеряны!",
"confirmTitle": "Вы уверены?", "confirmTitle": "Вы уверены?",
"text": "Это действие необратимо. Все данные будут удалены, и восстановить их будет невозможно.", "text": "Это действие необратимо. Все данные будут удалены, и восстановить их будет невозможно.",
"title": "Удалить аккаунт" "title": "Удалить аккаунт"
@ -251,10 +441,10 @@
}, },
"profile": { "profile": {
"finish": "Завершить редактирование", "finish": "Завершить редактирование",
"firstColor": "Цвет профиля один", "firstColor": "Первый цвет профиля",
"secondColor": "Цвет профиля два", "secondColor": "Второй цвет профиля",
"title": "Редактирование изображения профиля", "title": "Редактирование изображения профиля",
"userIcon": "Значок пользователя" "userIcon": "Значок аватара профиля"
}, },
"register": { "register": {
"cta": "Начать", "cta": "Начать",
@ -266,36 +456,66 @@
"appearance": { "appearance": {
"activeTheme": "Активная", "activeTheme": "Активная",
"themes": { "themes": {
"blue": "Cиний", "blue": "Cиняя",
"default": "Стандартный", "default": "По умолчанию",
"gray": "Серый", "gray": "Серая",
"red": "Красный", "red": "Красная",
"teal": "Бирюзовый" "teal": "Бирюзовая"
}, },
"title": "Внешний вид" "title": "Внешний вид"
}, },
"connections": { "connections": {
"server": { "server": {
"description": "Если вы хотите подключиться к пользовательскому серверу для хранения ваших данных, включите эту опцию и укажите URL. <0>Инструкции.</0>", "description": "Если вы хотите подключиться к пользовательскому серверу для хранения данных, включите эту опцию и укажите URL. <0>Инструкции.</0>",
"label": "Пользовательский сервер", "label": "Пользовательский сервер",
"urlLabel": "URL-адрес пользовательского сервера" "urlLabel": "URL-адрес пользовательского сервера"
}, },
"setup": {
"doSetup": "Настроить",
"errorStatus": {
"description": "Похоже, что один или несколько элементов в этой настройке требуют вашего внимания.",
"title": "Кое-что требует вашего внимания"
},
"itemError": "Что-то не так с этой опцией. Выполните настройку ещё раз, чтобы исправить проблему.",
"items": {
"default": "Настройка по умолчанию",
"extension": "Расширение",
"proxy": "Пользовательский прокси-сервер"
},
"redoSetup": "Повторная настройка",
"successStatus": {
"description": "Всё готово для того, чтобы вы могли начать смотреть свои любимые фильмы и сериалы.",
"title": "Всё готово!"
},
"unsetStatus": {
"description": "Нажмите кнопку справа, чтобы начать процесс настройки.",
"title": "Вы ещё не прошли процедуру настройки"
}
},
"title": "Соединения", "title": "Соединения",
"workers": { "workers": {
"addButton": "Добавить новый прокси-сервер", "addButton": "Добавить новый прокси-сервер",
"description": "Для работы приложения весь трафик маршрутизируется через прокси. Включите это, если вы хотите использовать свои собственных прокси-серверы.", "description": "Для работы приложения весь трафик маршрутизируется через прокси. Включите это, если вы хотите использовать свои собственных прокси-серверы.<0>Instructions.</0>",
"emptyState": "Прокси отсутствуют, добавьте их ниже", "emptyState": "Прокси отсутствуют, добавьте их ниже",
"label": "Использовать прокси-сервера", "label": "Использовать прокси-сервера",
"urlLabel": "URL-адреса", "urlLabel": "URL-адреса",
"urlPlaceholder": "https://" "urlPlaceholder": "https://"
} }
}, },
"preferences": {
"language": "Язык приложения",
"languageDescription": "Язык применяется ко всему приложению.",
"thumbnail": "Генерировать миниатюры",
"thumbnailDescription": "В большинстве случаев видео не имеют миниатюр. Вы можете включить этот параметр, чтобы генерировать их на лету, но они могут замедлить ваше видео.",
"thumbnailLabel": "Генерировать миниатюры",
"title": "Настройки"
},
"reset": "Сброс", "reset": "Сброс",
"save": "Сохранить", "save": "Сохранить",
"sidebar": { "sidebar": {
"info": { "info": {
"appVersion": "Версия приложения", "appVersion": "Версия приложения",
"backendUrl": "Внутренний URL-адрес", "backendUrl": "Внутренний URL",
"backendVersion": "Серверная версия", "backendVersion": "Серверная версия",
"hostname": "Имя хоста", "hostname": "Имя хоста",
"insecure": "Небезопасно", "insecure": "Небезопасно",
@ -309,7 +529,7 @@
"subtitles": { "subtitles": {
"backgroundLabel": "Прозрачность фона", "backgroundLabel": "Прозрачность фона",
"colorLabel": "Цвет", "colorLabel": "Цвет",
"previewQuote": "Я не должен бояться. Страх — убийца разума.", "previewQuote": "Я не должен бояться. Страх убивает разум.",
"textSizeLabel": "Размер текста", "textSizeLabel": "Размер текста",
"title": "Субтитры" "title": "Субтитры"
}, },

View File

@ -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"
}, },
@ -95,6 +97,7 @@
"about": "O projektu", "about": "O projektu",
"dmca": "DMCA", "dmca": "DMCA",
"login": "Prijava", "login": "Prijava",
"onboarding": "Nastavitev",
"pagetitle": "{{title}} - movie-web", "pagetitle": "{{title}} - movie-web",
"register": "Registriraj se", "register": "Registriraj se",
"settings": "Nastavitve" "settings": "Nastavitve"
@ -115,7 +118,15 @@
"failed": "Ni uspelo najti medija, prosim poskusite znova!", "failed": "Ni uspelo najti medija, prosim poskusite znova!",
"loading": "Nalaganje...", "loading": "Nalaganje...",
"noResults": "Vsebin nismo našli!", "noResults": "Vsebin nismo našli!",
"placeholder": "Kaj si želite gledati?", "placeholder": {
"default": "Kaj si želite gledati?",
"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" "sectionTitle": "Rezultati iskanja"
}, },
"titles": { "titles": {
@ -165,6 +176,69 @@
"message": "Iskali smo povsod: pod preprogo, v omari, za \"proxyjem\", vendar na koncu nismo našli strani, ki jo iščete.", "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" "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": { "overlays": {
"close": "Zapri" "close": "Zapri"
}, },
@ -178,11 +252,11 @@
}, },
"menus": { "menus": {
"downloads": { "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.", "disclaimer": "Prenosi se opravijo neposredno pri ponudniku vsebin. movie-web nima nadzora nad načinom zagotavljanja prenosov.",
"downloadPlaylist": "Prenesi playlisto",
"downloadSubtitle": "Prenesi trenutne podnapise", "downloadSubtitle": "Prenesi trenutne podnapise",
"downloadVideo": "Prenesi video", "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": { "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>.", "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", "shortTitle": "Prenesi / Android",
@ -206,7 +280,8 @@
"episodeBadge": "E{{episode}}", "episodeBadge": "E{{episode}}",
"loadingError": "Napaka pri nalaganju sezone", "loadingError": "Napaka pri nalaganju sezone",
"loadingList": "Nalaganje...", "loadingList": "Nalaganje...",
"loadingTitle": "Nalaganje..." "loadingTitle": "Nalaganje...",
"unairedEpisodes": "Ena ali več epizod v tej sezoni so onemogočene, ker še niso bile predvajane."
}, },
"playback": { "playback": {
"speedLabel": "Hitrost predvajanja", "speedLabel": "Hitrost predvajanja",
@ -258,6 +333,21 @@
} }
}, },
"metadata": { "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": { "failed": {
"badge": "Neuspešno", "badge": "Neuspešno",
"homeButton": "Domov", "homeButton": "Domov",
@ -307,6 +397,12 @@
"remaining": "{{timeLeft}} do konca • Konča ob {{timeFinished, datetime}}", "remaining": "{{timeLeft}} do konca • Konča ob {{timeFinished, datetime}}",
"shortRegular": "{{timeWatched}}", "shortRegular": "{{timeWatched}}",
"shortRemaining": "-{{timeLeft}}" "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": { "screens": {
@ -379,20 +475,50 @@
}, },
"connections": { "connections": {
"server": { "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", "label": "Strežnik po meri",
"urlLabel": "Naslov strežnika po meri (URL)" "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", "title": "Povezave",
"workers": { "workers": {
"addButton": "Dodaj novega \"workerja\"", "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", "emptyState": "Niste dodali \"workerja\", dodajte ga spodaj",
"label": "Uporaba posrednikov po meri", "label": "Uporaba posrednikov po meri",
"urlLabel": "Naslov Workerja (URL)", "urlLabel": "Naslov Workerja (URL)",
"urlPlaceholder": "https://" "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", "reset": "Ponastavi",
"save": "Shrani", "save": "Shrani",
"sidebar": { "sidebar": {

View File

@ -114,7 +114,10 @@
"failed": "Misslyckades med att hitta media, försök igen!", "failed": "Misslyckades med att hitta media, försök igen!",
"loading": "Laddar...", "loading": "Laddar...",
"noResults": "Vi kunde inte hitta någonting!", "noResults": "Vi kunde inte hitta någonting!",
"placeholder": "Vad vill du titta på?", "placeholder": {
"default": "Vad vill du titta på?",
"extra": []
},
"sectionTitle": "Sökresultat" "sectionTitle": "Sökresultat"
}, },
"titles": { "titles": {
@ -123,15 +126,11 @@
}, },
"morning": { "morning": {
"default": "Vad vill du titta på den här morgonen?", "default": "Vad vill du titta på den här morgonen?",
"extra": [ "extra": ["Jag hör att Before Sunrise är bra"]
"Jag hör att Before Sunrise är bra"
]
}, },
"night": { "night": {
"default": "Vad vill du titta på ikväll?", "default": "Vad vill du titta på ikväll?",
"extra": [ "extra": ["Trött? Jag hör att The Exorcist är bra."]
"Trött? Jag hör att The Exorcist är bra."
]
} }
} }
}, },

View File

@ -1,6 +1,19 @@
{ {
"about": { "about": {
"description": "movie-web என்பது இணையத்தில் ஸ்ட்ரீம்களைத் தேடும் ஒரு வலைப் பயன்பாடு ஆகும். உள்ளடக்கத்தை உட்கொள்வதற்கான ஒரு சிறிய அணுகுமுறையை குழு நோக்கமாகக் கொண்டுள்ளது.",
"faqTitle": "பொதுவான கேள்விகள்", "faqTitle": "பொதுவான கேள்விகள்",
"q1": {
"body": "மூவி வெப் எந்தவொரு பதிவுகளையும் வழங்குவதில்லை. நீங்கள் ஒரு காட்சியை தேர்ந்தெடுத்து காண விரும்பும் போது அதற்கான பதிவை இணையத்தில் உள்ள பல்வேறு தளங்களில் இருந்து தேடி உங்களுக்கு வழங்குகிறது. பதிவுகள் ஒரு போதும் மூவி வெப் மூலம் பதிவேற்றப்படுவது இல்லை. நீங்கள் காணும் அனைத்து காட்சிகளும் தேடு பொறி முறையின் சிறப்பம்சத்தின் மூலமாகவே உங்களுக்கு வழங்கப்படுகிறது.",
"title": "பதிவு எங்கிருந்து வருகிறது?"
},
"q2": {
"body": "ஒரு திரைப்படம் அல்லது தொடரை உங்களால் நேரடியாக கோர முடியாது. மூவி வெப் எந்த ஒரு பதிவுகளையும் நிர்வகிப்பதில்லை. அணைத்து பதிவுகளும் இணையத்தில் உள்ள தளங்களின் வழியாகவே உங்களுக்கு அளிக்கப்படுகின்றது.",
"title": "ஒரு தொடர் அல்லது திரைப்படத்தை நான் எங்கே கோருவது?"
},
"q3": {
"body": "எங்கள் தேடல் முடிவுகள் The Movie Database (TMDB) தரவு தளம் மூலம் வழங்கப்படுகிறது. தேடல் முடிவுகள் தேடலுக்கான பதிவுகளை கட்டாயம் உள்ளடக்கி இருக்கும் என்பதை உறுதியாக கூற இயலாது.",
"title": "தேடல் முடிவுகள் திரைப்படம் அல்லது தொடரை காட்டுகிறது. ஆனால், ஏன் என்னால் அதை பார்க்க முடியவில்லை?"
},
"title": "movie-web பற்றி" "title": "movie-web பற்றி"
}, },
"actions": { "actions": {
@ -8,8 +21,8 @@
"copy": "நகல்" "copy": "நகல்"
}, },
"auth": { "auth": {
"createAccount": "கணக்கு இல்லையா? <0>கணக்கை உருவாக்குங்கள்</0>", "createAccount": "கணக்கு இல்லையா? <0>புதிய கணக்கை உருவாக்குங்கள்</0>",
"deviceNameLabel": "கருவியின் பெயர்", "deviceNameLabel": "சாதனத்தின் பெயர்",
"deviceNamePlaceholder": "எனது கைபேசி", "deviceNamePlaceholder": "எனது கைபேசி",
"generate": { "generate": {
"description": "தங்கள் கடவுச்சொற்றொடரே தங்களது பயனர் பெயர் மற்றும் கடவுச்சொல். கணக்கினுள் நுழைய அதனை பாதுகாப்பாக வைத்திருங்கள்", "description": "தங்கள் கடவுச்சொற்றொடரே தங்களது பயனர் பெயர் மற்றும் கடவுச்சொல். கணக்கினுள் நுழைய அதனை பாதுகாப்பாக வைத்திருங்கள்",
@ -17,51 +30,507 @@
"passphraseFrameLabel": "கடவுச்சொற்றொடர்", "passphraseFrameLabel": "கடவுச்சொற்றொடர்",
"title": "உங்கள் கடவுச்சொற்றொடர்" "title": "உங்கள் கடவுச்சொற்றொடர்"
}, },
"hasAccount": "கணக்கு வைத்துள்ளீரா? <0>புகுபதிகை செய்க </0>", "hasAccount": "ஏற்கனவே ஒரு கணக்கு உள்ளதா? <0>இங்கே உள்நுழைக. </0>",
"login": { "login": {
"description": "உங்கள் கணக்கினுள் புகுபதிய கடவுச்சொற்றொடரை உள்ளிடுக", "description": "உங்கள் கணக்கினுள் உள்நுழைய உங்கள் கடவுச்சொற்றொடரை உள்ளிடுக",
"deviceLengthError": "கருவியின் பெயரை உள்ளிடுக", "deviceLengthError": "சாதனத்தின் பெயரை உள்ளிடவும்",
"passphraseLabel": "12-சொல் கடவுச்சொற்றொடர்", "passphraseLabel": "12-சொல் கடவுச்சொற்றொடர்",
"passphrasePlaceholder": "கடவுச்சொற்றொடர்", "passphrasePlaceholder": "கடவுச்சொற்றொடர்",
"submit": "புகுபதிகை", "submit": "புகுபதிகை",
"title": "உங்கள் கணக்கினுள் புகுபதிய", "title": "உங்கள் கணக்கில் உள்நுழைக",
"validationError": "தவறான அல்லது முழுமையற்ற கடவுச்சொற்றொடர்" "validationError": "தவறான அல்லது முழுமையற்ற கடவுச்சொற்றொடர்"
}, },
"register": { "register": {
"information": { "information": {
"icon": "பயனர் குறிப்படம்", "color1": "Profile நிறம் ஒன்று",
"color2": "Profile நிறம் இரண்டு",
"header": "உங்கள் சாதனத்தின் பெயரை உள்ளிட்டு அதற்கான வண்ணம் மற்றும் ஐகானையும் தேர்ந்தெடுக்கவும்",
"icon": "பயனர் icon",
"next": "அடுத்து", "next": "அடுத்து",
"title": "கணக்கு விவரம்" "title": "கணக்கு விவரம்"
} }
}, },
"trust": { "trust": {
"no": "பின்செல்" "failed": {
"text": "நீங்கள் அதை சரியாக உள்ளமைத்தீர்களா?",
"title": "சர்வரை தொடர்பு கொள்ள முடியவில்லை"
},
"host": "நீங்கள் <0>{{hostname}}</0> உடன் இணைக்கப்படுகிறீர்கள். கணக்கை உருவாக்கும் முன் சரியான தகவல் தானா எனபதை உறுதி செய்து கொள்ளவும்",
"no": "பின்செல்",
"title": "நீங்கள் இந்த சர்வரை நம்புகிறீர்களா?",
"yes": "நான் இந்த சர்வரை நம்புகிறேன்"
}, },
"verify": { "verify": {
"description": "உங்கள் கடவுச்சொற்றொடரைச் சேமித்துள்ளீர்கள் என்பதை உறுதிப்படுத்த உங்கள் கடவுச்சொற்றொடர்களை மீண்டும் இங்கே உள்ளீடு செய்து உங்கள் கணக்கை உருவாக்கிக் கொள்ளுங்கள்",
"invalidData": "தரவு செல்லுபடியாகாது",
"noMatch": "கடவுச்சொற்றொடர்கள் பொருந்தவில்லை",
"passphraseLabel": "உங்களின் 12-சொல் கடவுச்சொற்றொடர்",
"recaptchaFailed": "ReCaptcha சரிபார்ப்பு தோல்வியடைந்தது",
"register": "கணக்கை உருவாக்கு", "register": "கணக்கை உருவாக்கு",
"title": "கடவுச்சொற்றொடரை உறுதி செய்க" "title": "கடவுச்சொற்றொடரை உறுதி செய்க"
} }
}, },
"errors": {
"badge": "சரியாக வேலை செய்யவில்லை",
"details": "பிழை விவரங்கள்",
"reloadPage": "இணையப் பக்கத்தை Reload செய்யவும்",
"showError": "பிழை விவரங்களைக் காட்டு",
"title": "நங்கள் ஒரு பிழையை எதிர் கொண்டு இருக்கிறோம்!"
},
"footer": {
"legal": {
"disclaimer": "பொறுப்பு துறப்பு",
"disclaimerText": "மூவி-வெப் எந்த பதிவுகளையும் தன்னகம் வைத்திருக்கவில்லை, இது மூன்றாம் தரப்பு பதிவுகளை வழங்குபவர்களை இணைக்கிறது. சட்ட சிக்கல்கள் ஏதேனும் இருப்பின் அது பதிவுகளை வழங்குபவரையே சாறும். வீடியோ வழங்குநர்கள் காண்பிக்கும் எந்த மீடியா பதிவுகளுக்கும் மூவி வெப் பொறுப்பாகாது."
},
"links": {
"discord": "Discord",
"dmca": "DMCA",
"github": "GitHub"
},
"tagline": "இந்த ஓப்பன் சோர்ஸ் (Open Source) இணைய தளம் மூலம் உங்களுக்குப் பிடித்த தொடர்களையும் திரைப்படங்களையும் பார்க்கலாம்."
},
"global": { "global": {
"name": "மூவி-வெப்",
"pages": { "pages": {
"about": "தெரிந்து கொள்ள",
"dmca": "DMCA",
"login": "புகுபதிகை", "login": "புகுபதிகை",
"onboarding": "அமை",
"pagetitle": "{{title}} - மூவி- வெப்",
"register": "பதிவு",
"settings": "அமைப்புகள்" "settings": "அமைப்புகள்"
} }
}, },
"home": { "home": {
"bookmarks": {
"sectionTitle": "குறிப்புகள்"
},
"continueWatching": {
"sectionTitle": "தொடர்ந்து பார்க்க"
},
"mediaList": {
"stopEditing": "திருத்துவதை நிறுத்து"
},
"search": { "search": {
"allResults": "மேலும் எங்களிடம் இல்லை!",
"failed": "மீடியாவைக் கண்டறிய முடியவில்லை, மீண்டும் முயலவும்!",
"loading": "Loading...",
"noResults": "எங்களால் எதையும் கண்டுபிடிக்க இயலவில்லை!",
"sectionTitle": "தேடல் முடிவுகள்" "sectionTitle": "தேடல் முடிவுகள்"
},
"titles": {
"day": {
"default": "மதிய வணக்கம். தற்போது என்ன காண விரும்புகிறீர்கள்?",
"extra": [
"சாகசமாக உணர்கிறீர்களா? ஜுராசிக் பார்க் (Jurassic Park) சரியான தேர்வாக இருக்கலாம்."
]
},
"morning": {
"default": "காலை வணக்கம். தற்போது என்ன காண விரும்புகிறீர்கள்?",
"extra": [
"சூரிய உதயத்திற்கு முன் நல்லது என்று கேள்விப்படுகிறேன்"
]
},
"night": {
"default": "இன்றைய இரவு என்ன காண விரும்புகிறீர்கள்?",
"extra": [
"சோர்வாக உள்ளீர்களா? Exorcist திரைப்படம் காணுங்கள்."
]
}
} }
}, },
"media": { "media": {
"episodeDisplay": "S{{season}} E{{episode}}",
"types": { "types": {
"movie": "திரைப்படம்", "movie": "திரைப்படம்",
"show": "காட்சி" "show": "காட்சி"
} }
}, },
"navigation": { "navigation": {
"banner": {
"offline": "உங்கள் இணைய இணைப்பைச் சரிபார்க்கவும்"
},
"menu": { "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

@ -115,7 +115,10 @@
"failed": "ไม่พบสื่อนี้ ลองอีกครั้ง!", "failed": "ไม่พบสื่อนี้ ลองอีกครั้ง!",
"loading": "กำลังโหลด..", "loading": "กำลังโหลด..",
"noResults": "เราไม่พบอะไรเลย!", "noResults": "เราไม่พบอะไรเลย!",
"placeholder": "คุณอยากดูอะไรคะ?", "placeholder": {
"default": "คุณอยากดูอะไรคะ?",
"extra": []
},
"sectionTitle": "ผลการค้นหา" "sectionTitle": "ผลการค้นหา"
}, },
"titles": { "titles": {
@ -124,15 +127,11 @@
}, },
"morning": { "morning": {
"default": "คุณอยากดูอะไรเช้านี้?", "default": "คุณอยากดูอะไรเช้านี้?",
"extra": [ "extra": ["ฉันได้ยินมาว่าเรื่อง Before Sunrise สนุก"]
"ฉันได้ยินมาว่าเรื่อง Before Sunrise สนุก"
]
}, },
"night": { "night": {
"default": "คุณอยากดูเรื่องอะไรในช่วงค่ำ?", "default": "คุณอยากดูเรื่องอะไรในช่วงค่ำ?",
"extra": [ "extra": ["เหนื่อยมั้ย? ฉันได้ยินมาว่า The Exorcist นั้นดี"]
"เหนื่อยมั้ย? ฉันได้ยินมาว่า The Exorcist นั้นดี"
]
} }
} }
}, },
@ -176,7 +175,6 @@
"menus": { "menus": {
"downloads": { "downloads": {
"disclaimer": "การดาวน์โหลดจะถูกนํามาจากผู้ให้บริการโดยตรง movie-web ไม่สามารถควบคุมวิธีการดาวน์โหลดได้", "disclaimer": "การดาวน์โหลดจะถูกนํามาจากผู้ให้บริการโดยตรง movie-web ไม่สามารถควบคุมวิธีการดาวน์โหลดได้",
"downloadPlaylist": "ดาวน์โหลดเพลย์ลิสต์",
"downloadSubtitle": "ดาวน์โหลดคำบรรยายนี้", "downloadSubtitle": "ดาวน์โหลดคำบรรยายนี้",
"downloadVideo": "ดาวน์โหลดวิดีโอ", "downloadVideo": "ดาวน์โหลดวิดีโอ",
"hlsDisclaimer": "การดาวน์โหลดจะเป็นการดาวน์โหลดโดยตรงจากผู้ให้บริการ โดยเว็บไซต์ movie-web ไม่สามารถควบคุมวิธีการที่ไฟล์จะถูกดาวน์โหลด โปรดทราบว่าหากคุณกำลังดาวน์โหลดเพลย์ลิสต์ HLS ซึ่งมีจุดประสงค์สำหรับผู้ใช้ที่มีความเข้าใจใน สตรีมมิ่ง และมัลติมีเดียขั้นสูง.", "hlsDisclaimer": "การดาวน์โหลดจะเป็นการดาวน์โหลดโดยตรงจากผู้ให้บริการ โดยเว็บไซต์ movie-web ไม่สามารถควบคุมวิธีการที่ไฟล์จะถูกดาวน์โหลด โปรดทราบว่าหากคุณกำลังดาวน์โหลดเพลย์ลิสต์ HLS ซึ่งมีจุดประสงค์สำหรับผู้ใช้ที่มีความเข้าใจใน สตรีมมิ่ง และมัลติมีเดียขั้นสูง.",

View File

@ -94,6 +94,7 @@
"about": "o sona", "about": "o sona",
"dmca": "DMCA", "dmca": "DMCA",
"login": "o open", "login": "o open",
"onboarding": "o pali",
"pagetitle": "{{title}} - ilo Muwi-We", "pagetitle": "{{title}} - ilo Muwi-We",
"register": "o pali open", "register": "o pali open",
"settings": "o ante" "settings": "o ante"
@ -114,27 +115,24 @@
"failed": "lukin li pakala a! o alasa sin", "failed": "lukin li pakala a! o alasa sin",
"loading": "alasa...", "loading": "alasa...",
"noResults": "ijo li lon ala a!", "noResults": "ijo li lon ala a!",
"placeholder": "sina wile lukin e seme?", "placeholder": {
"default": "sina wile lukin e seme?",
"extra": []
},
"sectionTitle": "mi lukin e ni:" "sectionTitle": "mi lukin e ni:"
}, },
"titles": { "titles": {
"day": { "day": {
"default": "tenpo suno ni la sina wile lukin e seme?", "default": "tenpo suno ni la sina wile lukin e seme?",
"extra": [ "extra": ["sina pilin alasa la o lukin e sitelen Jurassic Park"]
"sina pilin alasa la o lukin e sitelen Jurassic Park"
]
}, },
"morning": { "morning": {
"default": "tenpo sin ni la sina wile lukin e seme?", "default": "tenpo sin ni la sina wile lukin e seme?",
"extra": [ "extra": ["ken la sitelen Before Sunrise li pona"]
"ken la sitelen Before Sunrise li pona"
]
}, },
"night": { "night": {
"default": "tenpo pimeja ni la sina wile lukin e seme?", "default": "tenpo pimeja ni la sina wile lukin e seme?",
"extra": [ "extra": ["sina pilin lape anu seme? o alasa lukin e sitelen Exorcist"]
"sina pilin lape anu seme? o alasa lukin e sitelen Exorcist"
]
} }
} }
}, },
@ -164,6 +162,11 @@
"message": "mi lukin lon anpa poki, lon insa tomo, lon monsi ilo. taso mi lukin ala e lipu pi wile sina", "message": "mi lukin lon anpa poki, lon insa tomo, lon monsi ilo. taso mi lukin ala e lipu pi wile sina",
"title": "mi ken ala lukin e lipu ona" "title": "mi ken ala lukin e lipu ona"
}, },
"onboarding": {
"start": {
"title": "o open e ilo Muwi-We"
}
},
"overlays": { "overlays": {
"close": "o pini" "close": "o pini"
}, },
@ -178,7 +181,6 @@
"menus": { "menus": {
"downloads": { "downloads": {
"disclaimer": "sina kama jo e sitelen tawa ilo sina tan lipu mama. ilo Muwi-We li lawa ala e nasin jo", "disclaimer": "sina kama jo e sitelen tawa ilo sina tan lipu mama. ilo Muwi-We li lawa ala e nasin jo",
"downloadPlaylist": "o jo e lipu sitelen",
"downloadSubtitle": "o jo e nimi toki", "downloadSubtitle": "o jo e nimi toki",
"downloadVideo": "o jo e sitelen", "downloadVideo": "o jo e sitelen",
"hlsDisclaimer": "jo li tan mama. ilo Muwi-We li lawa ala e nasin jo. o sona e ni: sina jo e lipu sitelen HLS. ni li tawa jan pi sona sitelen", "hlsDisclaimer": "jo li tan mama. ilo Muwi-We li lawa ala e nasin jo. o sona e ni: sina jo e lipu sitelen HLS. ni li tawa jan pi sona sitelen",
@ -205,7 +207,8 @@
"episodeBadge": "E{{episode}}", "episodeBadge": "E{{episode}}",
"loadingError": "alasa li pakala", "loadingError": "alasa li pakala",
"loadingList": "alasa...", "loadingList": "alasa...",
"loadingTitle": "alasa..." "loadingTitle": "alasa...",
"unairedEpisodes": "sitelen li lon ala lukin la ken la sina lukin ala e ona"
}, },
"playback": { "playback": {
"speedLabel": "tenpo lukin", "speedLabel": "tenpo lukin",
@ -257,6 +260,14 @@
} }
}, },
"metadata": { "metadata": {
"dmca": {
"badge": "weka",
"text": "wile weka li kama tan mama sitelen la sitelen ni li ken ala",
"title": "sitelen li weka"
},
"extensionPermission": {
"button": "o kepeken namako"
},
"failed": { "failed": {
"badge": "pakala", "badge": "pakala",
"homeButton": "o tawa weka", "homeButton": "o tawa weka",
@ -306,6 +317,12 @@
"remaining": "tenpo {{timeLeft}} la o awen • tenpo {{timeFinished, datetime}} la ona li pini", "remaining": "tenpo {{timeLeft}} la o awen • tenpo {{timeFinished, datetime}} la ona li pini",
"shortRegular": "{{timeWatched}}", "shortRegular": "{{timeWatched}}",
"shortRemaining": "-{{timeLeft}}" "shortRemaining": "-{{timeLeft}}"
},
"turnstile": {
"description": "sina jan la o pali e ilo Captcha lon poka ni. mi wile awen e ilo Muwi-We a!",
"error": "mi lukin e ni: ken la sina jan ala. o alasa sin",
"title": "sina o jan",
"verifyingHumanity": "sina jan ala jan?"
} }
}, },
"screens": { "screens": {
@ -321,6 +338,7 @@
"textWithReset": "alasa tan lawa ilo sina li pakala. sina wile e lawa ilo mi anu seme?" "textWithReset": "alasa tan lawa ilo sina li pakala. sina wile e lawa ilo mi anu seme?"
}, },
"migration": { "migration": {
"failed": "tawa pi sona sina li pakala",
"inProgress": "o awen lili. mi alasa tawa e sona sina" "inProgress": "o awen lili. mi alasa tawa e sona sina"
} }
}, },
@ -376,14 +394,58 @@
}, },
"connections": { "connections": {
"server": { "server": {
"description": "sina wile e poki sona ante la o pana e nimi ona lon ni", "description": "sina wile e poki sona ante la o pana e nimi ona lon ni: <0>nasin</0>",
"label": "lawa ante", "label": "lawa ante",
"urlLabel": "nimi pi lawa ante" "urlLabel": "nimi pi lawa ante"
}, },
"title": "kulupu" "setup": {
"doSetup": "o pali",
"errorStatus": {
"description": "ni li wile e lukin sina",
"title": "o lukin"
},
"itemError": "ni li pakala. o pali sin",
"items": {
"default": "pali sama",
"extension": "namako"
},
"redoSetup": "o pali sin",
"successStatus": {
"description": "ijo ale li pona. sina ken lukin e sitelen ale pi wile sina",
"title": "pali li pini a!"
},
"unsetStatus": {
"description": "o luka e nena lon poka ni tawa open pali",
"title": "sina pali ala"
}
},
"title": "kulupu",
"workers": {
"urlPlaceholder": "https://"
}
},
"preferences": {
"language": "toki ilo",
"languageDescription": "ilo li toki kepeken toki ni",
"thumbnail": "o pali e sitelen awen",
"thumbnailDescription": "tenpo mute la, sitelen tawa li jo ala e sitelen awen. sina wile e sitelen lili pi lukin wan la o lon e ni. taso, ni li ken suli ike e tenpo sitelen sina",
"thumbnailLabel": "o pali e sitelen awen",
"title": "wile"
}, },
"reset": "o weka e ante", "reset": "o weka e ante",
"save": "o ante", "save": "o ante",
"sidebar": {
"info": {
"appVersion": "nanpa ilo",
"hostname": "nimi mama",
"insecure": "ike",
"notLoggedIn": "mi sona ala e sina",
"secure": "pona",
"title": "sona ilo",
"unknownVersion": "mi sona ala",
"userId": "nanpa sina"
}
},
"subtitles": { "subtitles": {
"backgroundLabel": "kon", "backgroundLabel": "kon",
"colorLabel": "kule", "colorLabel": "kule",

View File

@ -95,6 +95,7 @@
"about": "Hakkında", "about": "Hakkında",
"dmca": "DMCA", "dmca": "DMCA",
"login": "Giriş yap", "login": "Giriş yap",
"onboarding": "Kur",
"pagetitle": "{{title}} - movie-web", "pagetitle": "{{title}} - movie-web",
"register": "Kayıt ol", "register": "Kayıt ol",
"settings": "Ayarlar" "settings": "Ayarlar"
@ -115,7 +116,10 @@
"failed": "Medya bulunamadı, tekrar deneyin!", "failed": "Medya bulunamadı, tekrar deneyin!",
"loading": "Yükleniyor...", "loading": "Yükleniyor...",
"noResults": "Hiçbir şey bulamadık!", "noResults": "Hiçbir şey bulamadık!",
"placeholder": "Ne izlemek istersiniz?", "placeholder": {
"default": "Ne izlemek istersiniz?",
"extra": []
},
"sectionTitle": "Arama sonuçları" "sectionTitle": "Arama sonuçları"
}, },
"titles": { "titles": {
@ -127,15 +131,11 @@
}, },
"morning": { "morning": {
"default": "Bu sabah ne izlemek istersiniz?", "default": "Bu sabah ne izlemek istersiniz?",
"extra": [ "extra": ["Before Sunrise'a iyi diyorlar"]
"Before Sunrise'a iyi diyorlar"
]
}, },
"night": { "night": {
"default": "Bu akşam ne izlemek istersiniz?", "default": "Bu akşam ne izlemek istersiniz?",
"extra": [ "extra": ["Yoruldun mu? The Exorcist'e iyi diyorlar."]
"Yoruldun mu? The Exorcist'e iyi diyorlar."
]
} }
} }
}, },
@ -179,7 +179,6 @@
"menus": { "menus": {
"downloads": { "downloads": {
"disclaimer": "İndirme bağlantıları doğrudan sağlayıcının kendisinden alınır. movie-web'in sağlanan indirme bağlantıları üzerinde hiçbir konrolü yoktur.", "disclaimer": "İndirme bağlantıları doğrudan sağlayıcının kendisinden alınır. movie-web'in sağlanan indirme bağlantıları üzerinde hiçbir konrolü yoktur.",
"downloadPlaylist": "Oynatma listesini indir",
"downloadSubtitle": "Geçerli altyazıyı indir", "downloadSubtitle": "Geçerli altyazıyı indir",
"downloadVideo": "Videoyu indir", "downloadVideo": "Videoyu indir",
"hlsDisclaimer": "İndirme bağlantıları doğrudan sağlayıcının kendisinden alınır. movie-web'in sağlanan indirme bağlantıları üzerinde hiçbir konrolü yoktur. Lütfen bir HLS oynatma listesi indirdiğinizi unutmayın; bu, gelişmiş multimedya akışına aşina olan kullanıcılara yöneliktir.", "hlsDisclaimer": "İndirme bağlantıları doğrudan sağlayıcının kendisinden alınır. movie-web'in sağlanan indirme bağlantıları üzerinde hiçbir konrolü yoktur. Lütfen bir HLS oynatma listesi indirdiğinizi unutmayın; bu, gelişmiş multimedya akışına aşina olan kullanıcılara yöneliktir.",

View File

@ -116,7 +116,10 @@
"failed": "Не вдалося знайти медіафайли, повторіть спробу!", "failed": "Не вдалося знайти медіафайли, повторіть спробу!",
"loading": "Завантаження...", "loading": "Завантаження...",
"noResults": "Ми не змогли знайти нічого!", "noResults": "Ми не змогли знайти нічого!",
"placeholder": "Що ви хочете подивитися?", "placeholder": {
"default": "Що ви хочете подивитися?",
"extra": []
},
"sectionTitle": "Результати пошуку" "sectionTitle": "Результати пошуку"
}, },
"titles": { "titles": {
@ -128,15 +131,11 @@
}, },
"morning": { "morning": {
"default": "Що б ви хотіли подивитися сьогодні вранці?", "default": "Що б ви хотіли подивитися сьогодні вранці?",
"extra": [ "extra": ["Я чув, що \"Перед сходом сонця\" гарний"]
"Я чув, що \"Перед сходом сонця\" гарний"
]
}, },
"night": { "night": {
"default": "Що б ви хотіли подивитися сьогодні ввечері?", "default": "Що б ви хотіли подивитися сьогодні ввечері?",
"extra": [ "extra": ["Втомився? Я чув, що \"Екзорцист\" хороший."]
"Втомився? Я чув, що \"Екзорцист\" хороший."
]
} }
} }
}, },
@ -177,7 +176,7 @@
"back": "Повернутись назад", "back": "Повернутись назад",
"explainer": "Використовуючи розширення для браузера, ви можете отримати найякісніші трансляції, які ми можемо запропонувати. Просто встановивши його.", "explainer": "Використовуючи розширення для браузера, ви можете отримати найякісніші трансляції, які ми можемо запропонувати. Просто встановивши його.",
"explainerIos": "На жаль, розширення браузера не підтримується на iOS, натисніть <bold>Повернутися</bold>, щоб вибрати інший варіант.", "explainerIos": "На жаль, розширення браузера не підтримується на iOS, натисніть <bold>Повернутися</bold>, щоб вибрати інший варіант.",
"extensionHelp": "Якщо ви встановили розширення, але воно не виявлено. <bold>Відкрийте розширення в меню розширень вашого браузеру</bold> і дотримуйтеся вказівок на екрані.", "extensionHelp": "Якщо ви встановили розширення, але воно не виявлено, <bold>відкрийте розширення в меню розширень вашого браузеру</bold> і дотримуйтеся вказівок на екрані.",
"linkChrome": "Встанови Chrome розширення", "linkChrome": "Встанови Chrome розширення",
"linkFirefox": "Встанови Firefox розширення", "linkFirefox": "Встанови Firefox розширення",
"notDetecting": "Встановили в Chrome, але сайт його не виявляє? Спробуйте перезавантажити сторінку!", "notDetecting": "Встановили в Chrome, але сайт його не виявляє? Спробуйте перезавантажити сторінку!",
@ -243,7 +242,6 @@
"menus": { "menus": {
"downloads": { "downloads": {
"disclaimer": "Завантаження беруться безпосередньо від провайдера. У movie-web немає контролю над тим, як надаються завантаження.", "disclaimer": "Завантаження беруться безпосередньо від провайдера. У movie-web немає контролю над тим, як надаються завантаження.",
"downloadPlaylist": "Завантажити плейлист",
"downloadSubtitle": "Завантажити поточні субтитри", "downloadSubtitle": "Завантажити поточні субтитри",
"downloadVideo": "Завантажити відео", "downloadVideo": "Завантажити відео",
"hlsDisclaimer": "Завантаження виконуються безпосередньо від постачальника. У movie-web немає контролю над тим, як надаються завантаження.<br /><br />Зверніть увагу, що ви завантажуєте список відтворення HLS, <bold>його не рекомендується завантажувати, якщо ви не знайомі з розширеними форматами потокового передавання</bold>. Спробуйте різні джерела для інших форматів.", "hlsDisclaimer": "Завантаження виконуються безпосередньо від постачальника. У movie-web немає контролю над тим, як надаються завантаження.<br /><br />Зверніть увагу, що ви завантажуєте список відтворення HLS, <bold>його не рекомендується завантажувати, якщо ви не знайомі з розширеними форматами потокового передавання</bold>. Спробуйте різні джерела для інших форматів.",

View File

@ -92,8 +92,13 @@
"global": { "global": {
"name": "movie-web", "name": "movie-web",
"pages": { "pages": {
"about": "Thông tin",
"dmca": "DMCA",
"login": "Đăng nhập",
"onboarding": "Cài đặt",
"pagetitle": "{{title}} - movie-web", "pagetitle": "{{title}} - movie-web",
"register": "Đăng ký" "register": "Đăng ký",
"settings": "Cài đặt"
} }
}, },
"home": { "home": {
@ -103,13 +108,39 @@
"continueWatching": { "continueWatching": {
"sectionTitle": "Tiếp tục xem" "sectionTitle": "Tiếp tục xem"
}, },
"mediaList": {
"stopEditing": "Hoàn thành"
},
"search": { "search": {
"allResults": "Đó là tất cả chúng tôi có!", "allResults": "Đó là tất cả chúng tôi có!",
"failed": "Không thể tìm thấy nội dung, hãy thử lại!", "failed": "Không thể tìm thấy nội dung, hãy thử lại!",
"loading": "Đang tải...", "loading": "Đang tải...",
"noResults": "Chúng tôi không thể tìm thấy gì!", "noResults": "Chúng tôi không thể tìm thấy gì!",
"placeholder": "Bạn muốn xem gì?", "placeholder": {
"default": "Bạn muốn xem gì?",
"extra": []
},
"sectionTitle": "Kết quả tìm kiếm" "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ì?",
"extra": [
"Cảm thấy mệt? Tôi nghe nói phim The Exorcist hay đấy."
]
}
} }
}, },
"media": { "media": {
@ -122,6 +153,14 @@
"navigation": { "navigation": {
"banner": { "banner": {
"offline": "Hãy kiểm tra kết nối Internet của bạn" "offline": "Hãy kiểm tra kết nối Internet của bạn"
},
"menu": {
"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ợ"
} }
}, },
"notFound": { "notFound": {
@ -130,6 +169,18 @@
"message": "Chúng tôi đã tìm kiếm khắp nơi: dưới thùng rác, trong tủ quần áo, đằng sau máy chủ proxy nhưng vẫn không thể tìm thấy trang bạn đang tìm kiếm.", "message": "Chúng tôi đã tìm kiếm khắp nơi: dưới thùng rác, trong tủ quần áo, đằng sau máy chủ proxy nhưng vẫn không thể tìm thấy trang bạn đang tìm kiếm.",
"title": "Không thể tìm thấy trang" "title": "Không thể tìm thấy trang"
}, },
"onboarding": {
"defaultConfirm": {
"cancel": "Huỷ",
"confirm": "Chọn cài đặt mặc định",
"description": "Cài đặt mặc định có thể dẫn đến việc phát video chậm.",
"title": "Bạn có chắc không?"
},
"extension": {
"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": { "player": {
"back": { "back": {
"default": "Quay lại trang chính", "default": "Quay lại trang chính",

View File

@ -5,17 +5,99 @@
"q1": { "q1": {
"body": "movie-web 不託管任何內容。您點選觀看內容時,系統均從互聯網搜尋(在加載提示頁和“視頻源”選項卡中,您可以看到正在使用的源)。媒體從未在 movie-web 中上傳,所有內容均通過搜索機制而得。", "body": "movie-web 不託管任何內容。您點選觀看內容時,系統均從互聯網搜尋(在加載提示頁和“視頻源”選項卡中,您可以看到正在使用的源)。媒體從未在 movie-web 中上傳,所有內容均通過搜索機制而得。",
"title": "內容來自哪裡?" "title": "內容來自哪裡?"
} },
"q2": {
"body": "無法主動要求影視劇或其他節目movie-web 不管理任何內容。所有內容均從網路影片來源取得並供您觀看。",
"title": "我可以從哪裡請求觀看影視劇或其他節目?"
},
"q3": {
"body": "我們的搜尋結果由電影資料庫TMDB驅動無論視訊來源是否有對應內容都會顯示結果。",
"title": "搜尋結果中已顯示了影視劇或其他節目,為何我無法播放?"
},
"title": "關於 movie-web"
},
"actions": {
"copied": "已複製",
"copy": "複製"
}, },
"auth": { "auth": {
"createAccount": "還沒有帳戶? <0>建立一個</0>",
"deviceNameLabel": "設備名稱",
"deviceNamePlaceholder": "我的手機",
"generate": {
"description": "您的密碼短語相當於使用者名稱與密碼。由於您需要輸入它來登入帳戶,請確保將其存放到安全位置",
"next": "我已儲存密碼短語",
"passphraseFrameLabel": "密碼短語",
"title": "您的密碼短語"
},
"hasAccount": "已經擁有帳戶? <0>點此登入。 </0>",
"login": { "login": {
"submit": "登入" "description": "請輸入密碼短語以登入您的帳戶",
"deviceLengthError": "請輸入設備名稱",
"passphraseLabel": "12 字密碼短語",
"passphrasePlaceholder": "密碼短語",
"submit": "登入",
"title": "登入您的帳戶",
"validationError": "密碼短語不正確或不完整"
},
"register": {
"information": {
"color1": "頭像配色一",
"color2": "輪廓顏色二",
"header": "為您的裝置輸入名稱,並選取一組代表色和一個使用者圖示",
"icon": "使用者圖示",
"next": "下一步",
"title": "帳號資訊"
}
},
"trust": {
"failed": {
"text": "您的配置是否正確?",
"title": "無法連接伺服器"
},
"host": "您正在連線到 <0>{{hostname}}</0> - 在建立帳戶之前,請確保您信任它",
"no": "返回",
"title": "您是否信任這個伺服器?",
"yes": "我信任這個伺服器"
},
"verify": {
"description": "請輸入早前的密碼短語,以確認您已經保存它,並建立您的帳戶",
"invalidData": "資料無效",
"noMatch": "密碼短語不匹配",
"passphraseLabel": "您的 12 字密碼短語",
"recaptchaFailed": "ReCaptcha 驗證失敗",
"register": "創建帳戶",
"title": "確認您的密碼短語"
} }
}, },
"errors": {
"badge": "它已損壞",
"details": "錯誤詳情",
"reloadPage": "重新加載頁面",
"showError": "顯示錯誤詳情",
"title": "我們遇到了一個錯誤!"
},
"footer": {
"legal": {
"disclaimer": "免責聲明",
"disclaimerText": "movie-web 不託管任何文件,僅連結至第三方服務。法律問題應由文件託管者和內容提供者解決。 movie-web 對影片提供者顯示的任何媒體檔案不承擔任何責任。"
},
"links": {
"discord": "Discord",
"dmca": "DMCA",
"github": "GitHub"
},
"tagline": "使用這個開源流媒體應用程序觀看您最喜歡的節目和電影。"
},
"global": { "global": {
"name": "movie-web",
"pages": { "pages": {
"about": "關於", "about": "關於",
"dmca": "DMCA",
"login": "登入", "login": "登入",
"onboarding": "設定",
"pagetitle": "{{title}} - movie-web",
"register": "註冊",
"settings": "設定" "settings": "設定"
} }
}, },
@ -23,80 +105,429 @@
"bookmarks": { "bookmarks": {
"sectionTitle": "書籤" "sectionTitle": "書籤"
}, },
"continueWatching": {
"sectionTitle": "繼續觀看"
},
"mediaList": {
"stopEditing": "停止編輯"
},
"search": { "search": {
"loading": "載入中..." "allResults": "以上是我們能找到的所有結果!",
"failed": "未能找到媒體,請重試!",
"loading": "載入中...",
"noResults": "我们找不到任何结果!",
"placeholder": {
"default": "您想看什麼?",
"extra": []
},
"sectionTitle": "搜索結果"
},
"titles": {
"day": {
"default": "您今天下午想看什麼?",
"extra": ["想要來場冒險嗎?《侏羅紀公園》可能是完美選擇。"]
},
"morning": {
"default": "您今天早上想看什麼?",
"extra": ["我聽說《情留半天》不錯"]
},
"night": {
"default": "您今晚想看什麼?",
"extra": ["疲倦了嗎?我聽說《驅魔人》不錯。"]
}
} }
}, },
"media": { "media": {
"episodeDisplay": "S{{season}} E{{episode}}",
"types": { "types": {
"movie": "電影", "movie": "電影",
"show": "節目" "show": "節目"
} }
}, },
"navigation": { "navigation": {
"banner": {
"offline": "請檢查您的網絡連接"
},
"menu": { "menu": {
"about": "關於我們",
"donation": "捐", "donation": "捐",
"logout": "登出",
"register": "同步到雲端",
"settings": "設定", "settings": "設定",
"support": "支援" "support": "支援"
} }
}, },
"notFound": {
"badge": "未找到",
"goHome": "返回首頁",
"message": "我們到處尋找:在垃圾桶下面,在壁櫥裡,在代理伺服器後面,但最終找不到您要找的頁面。",
"title": "找不到該頁面"
},
"onboarding": {
"defaultConfirm": {
"cancel": "取消",
"confirm": "使用預設設置",
"description": "默認設置沒有最好的直播,並且可能慢得令人難以忍受。",
"title": "您確定嗎?"
},
"extension": {
"back": "返回",
"explainer": "使用瀏覽器擴展程式,您可以獲得我們提供的最佳直播。只需簡單的安裝。",
"explainerIos": "不幸的是iOS 不支援瀏覽器擴展程式,按 <bold>返回 </bold>選擇其他選項。",
"extensionHelp": "如果您已安裝該擴展程式,但未檢測到該擴展程式, <bold>請通過瀏覽器的擴展程式功能表打開該擴展 程式 </bold>,然後按照螢幕上的步驟操作。",
"linkChrome": "安裝 Chrome 擴展程式",
"linkFirefox": "安裝 Firefox 擴展程式",
"notDetecting": "安裝在 Chrome 上,但網站沒有檢測到它?嘗試重新載入頁面!",
"notDetectingAction": "重新加載頁面",
"status": {
"disallowed": "未為此頁面啟用擴展程式",
"disallowedAction": "啟用擴展程式",
"failed": "無法請求狀態",
"loading": "等待您安裝擴展程式",
"outdated": "擴展程式版本太舊",
"success": "擴展程式正在按預期工作!"
},
"submit": "繼續",
"title": "讓我們從擴展程式開始"
},
"proxy": {
"back": "返回",
"explainer": "使用代理伺服器,您可以通過製作自定代理伺服器來獲得高品質的直播。",
"input": {
"errorConnection": "無法連接到代理伺服器",
"errorInvalidUrl": "URL 無效",
"errorNotProxy": "期待一個代理伺服器,但得到了一個網站",
"label": "代理伺服器 URL",
"placeholder": "https://"
},
"link": "瞭解如何製作代理伺服器",
"submit": "提交代理伺服器",
"title": "讓我們創建一個新的代理伺服器"
},
"start": {
"explainer": "為了獲得最好的流媒體,您需要選擇您想使用的流媒體方法。",
"options": {
"default": {
"text": "我不想要高品質的流,<0 /> <1> 使用預設設置</1>"
},
"extension": {
"action": "安裝擴展程式",
"description": "安裝瀏覽器擴展程式並訪問最佳資源。",
"quality": "最好的品質",
"title": "瀏覽器擴展程式"
},
"proxy": {
"action": "設置代理伺服器",
"description": "只需 5 分鐘即可設置代理伺服器並訪問優質資源。",
"quality": "好品質",
"title": "自訂代理伺服器"
}
},
"title": "讓我們為您設定 movie-web"
}
},
"overlays": { "overlays": {
"close": "關閉" "close": "關閉"
}, },
"player": { "player": {
"back": { "back": {
"default": "返回首頁",
"short": "後退" "short": "後退"
}, },
"casting": {
"enabled": "正在投放到設備…"
},
"menus": { "menus": {
"downloads": { "downloads": {
"disclaimer": "下載直接從供應商處獲取。movie-web 無法控制下載的提供方式。",
"downloadSubtitle": "下載當前字幕",
"downloadVideo": "下載視頻",
"hlsDisclaimer": "下載直接從供應商處獲取。movie-web 無法控制下載的提供方式。<br /><br /> 請注意,您正在下載 HLS 播放清單, <bold>如果您不熟悉高級流媒體格式,則不建議下載 </bold> 。嘗試使用不同格式的不同來源。",
"onAndroid": {
"1": "要在 Android 上下載,請按下下載按鈕,然後在新頁面上<bold>點擊並按住 </bold>視頻,然後選擇 <bold>保存</bold>。",
"shortTitle": "下載 / Android",
"title": "在Android上下載"
},
"onIos": {
"1": "要在 iOS 上下載,請按下下載按鈕,然後在新頁面上,按下 <bold><ios_share /> </bold>然後<bold>保存到檔案 <ios_files /></bold> 。",
"shortTitle": "下載 / iOS",
"title": "正在 iOS 上下载"
},
"onPc": {
"1": "在PC上按下下載按鈕然後在新頁面上右鍵按下視頻並選擇 <bold>將視頻另存為</bold>",
"shortTitle": "下載 / PC",
"title": "正在PC 上下载"
},
"title": "下載" "title": "下載"
}, },
"episodes": { "episodes": {
"button": "分集",
"emptyState": "該季暫無分集,請稍後再來!",
"episodeBadge": "E{{episode}}",
"loadingError": "加載分集時出錯",
"loadingList": "載入中...", "loadingList": "載入中...",
"loadingTitle": "載入中..." "loadingTitle": "載入中...",
"unairedEpisodes": "本季中的一集或多集已因尚未播出而被禁用。"
},
"playback": {
"speedLabel": "播放速度",
"title": "播放設置"
},
"quality": {
"automaticLabel": "自動品質",
"hint": "您可以嘗試<0>切換源</0>以獲得不同的質量選項。",
"iosNoQuality": "由於 Apple 定義的限制,此來源的品質選擇在 iOS 上不可用。您可以嘗試<0>切換到另一個來源</0>以獲得不同的質量選項。",
"title": "品質"
}, },
"settings": { "settings": {
"downloadItem": "下載" "downloadItem": "下載",
"enableSubtitles": "啟用字幕",
"experienceSection": "觀看體驗",
"playbackItem": "播放設定",
"qualityItem": "品質",
"sourceItem": "影片來源",
"subtitleItem": "字幕設定",
"videoSection": "影片設定"
},
"sources": {
"failed": {
"text": "嘗試查找任何視頻時出錯,請嘗試其他來源。",
"title": "無法刮取"
},
"noEmbeds": {
"text": "我們無法找到任何嵌入内容,請嘗試其他來源。",
"title": "未找到嵌入内容"
},
"noStream": {
"text": "此來源沒有此電影或節目的串流。",
"title": "無視頻源"
},
"title": "來源",
"unknownOption": "未知"
}, },
"subtitles": { "subtitles": {
"title": "字幕" "customChoice": "從檔案中選擇字幕",
"customizeLabel": "自訂",
"offChoice": "關閉",
"settings": {
"backlink": "自訂字幕",
"delay": "字幕延遲",
"fixCapitals": "修復大小寫"
},
"title": "字幕",
"unknownLanguage": "未知"
} }
}, },
"metadata": { "metadata": {
"api": {
"text": "無法載入 API 元數據,請檢查您的互聯網連接。",
"title": "載入 API 元數據失敗"
},
"dmca": {
"badge": "已移除",
"text": "由於收到刪除通知或版權聲明,此媒體不再可用。",
"title": "媒體已被移除"
},
"extensionPermission": {
"badge": "缺少權限",
"button": "使用擴展程式",
"text": "您已安裝瀏覽器擴展,但我們需要您的許可才能啟用它。",
"title": "配置擴展程式"
},
"failed": { "failed": {
"badge": "失敗" "badge": "失敗",
"homeButton": "返回首頁",
"text": "無法從 TMDB 載入媒體的元資料。請檢查 TMDB 是否斷線或在您的網路連線中被封鎖。",
"title": "載入元資料失敗"
},
"notFound": {
"badge": "未找到",
"homeButton": "返回首頁",
"text": "我們無法找到您請求的媒體。它可能已被刪除,或者您修改了 URL。",
"title": "無法找到媒體。"
} }
}, },
"nextEpisode": { "nextEpisode": {
"cancel": "取消" "cancel": "取消",
"next": "下一集"
},
"playbackError": {
"badge": "播放錯誤",
"errors": {
"errorAborted": "媒體的提取因使用者的請求而中止。",
"errorDecode": "儘管之前已確定可用,但在嘗試解碼媒體資源時發生錯誤,從而導致錯誤。",
"errorGenericMedia": "發生未知的媒體錯誤。",
"errorNetwork": "發生了某種網路錯誤,導致無法成功提取媒體,儘管以前可用。",
"errorNotSupported": "不支援媒體或媒體提供者物件。"
},
"homeButton": "返回首頁",
"text": "嘗試播放媒體時出錯。請再試一次。",
"title": "無法播放視頻!"
},
"scraping": {
"items": {
"failure": "發生錯誤",
"notFound": "沒有視頻",
"pending": "檢查影片..."
},
"notFound": {
"badge": "未找到",
"detailsButton": "顯示詳情",
"homeButton": "返回首頁",
"text": "我們已經搜索了我們的供應商,但找不到您正在尋找的媒體!我們不託管媒體,也無法控制可用的內容。請點擊下面的「顯示詳情」瞭解更多詳情。",
"title": "我們找不到"
}
},
"time": {
"regular": "{{timeWatched}} / {{duration}}",
"remaining": "剩餘{{timeLeft}} • 在{{timeFinished, datetime}}完結",
"shortRegular": "{{timeWatched}}",
"shortRemaining": "-{{timeLeft}}"
},
"turnstile": {
"description": "請通過右側的驗證碼來確認您是人類。這是為了保護 movie-web 的安全!",
"error": "無法驗證您的人類身份。請再試一次。",
"title": "我們需要驗證您是否為人類。",
"verifyingHumanity": "正在驗證您的人類身份..."
} }
}, },
"screens": { "screens": {
"dmca": {
"text": "歡迎來到movie-web的DMCA聯繫頁面我們尊重智慧財產權並希望迅速解決任何版權問題。如果您認為您的版權作品在我們的平臺上被不當使用請向以下電子郵件發送詳細的DMCA通知。請附上受版權保護材料的描述、您的聯繫方式以及善意信念的聲明。我們致力於迅速解決這些問題並感謝您的合作使電影網成為一個尊重創意和版權的地方。",
"title": "DMCA"
},
"loadingApp": "正在載入應用程式",
"loadingUser": "正在載入您的個人資料",
"loadingUserError": { "loadingUserError": {
"logout": "登出" "logout": "登出",
"reset": "重置您的自定義伺服器",
"text": "無法載入您的個人資料",
"textWithReset": "無法從您的自定義伺服器載入設定檔,您想要重置回預設伺服器?"
},
"migration": {
"failed": "資料遷移失敗。",
"inProgress": "請稍等,我們正在遷移您的數據。這不應該需要太久。"
} }
}, },
"settings": { "settings": {
"account": { "account": {
"accountDetails": {
"deviceNameLabel": "設備名稱",
"deviceNamePlaceholder": "個人電話",
"editProfile": "編輯",
"logoutButton": "登出"
},
"actions": {
"delete": {
"button": "刪除帳戶",
"confirmButton": "刪除帳戶",
"confirmDescription": "您確定要刪除您的帳戶嗎?所有數據都將丟失!",
"confirmTitle": "您確定嗎?",
"text": "此操作不可逆轉。所有數據將被刪除,且無法恢復。",
"title": "刪除帳戶"
},
"title": "操作"
},
"devices": {
"deviceNameLabel": "設備名稱",
"failed": "無法載入階段",
"removeDevice": "刪除",
"title": "設備"
},
"profile": {
"finish": "完成編輯",
"firstColor": "頭像配色一",
"secondColor": "頭像配色二",
"title": "編輯個人資料圖片",
"userIcon": "用戶圖示"
},
"register": {
"cta": "開始使用",
"text": "在設備之間共用並持續同步您的觀看進度。",
"title": "同步到雲端"
},
"title": "帳戶" "title": "帳戶"
}, },
"appearance": { "appearance": {
"activeTheme": "使用中",
"themes": { "themes": {
"blue": "藍色", "blue": "藍色",
"default": "預設",
"gray": "灰色", "gray": "灰色",
"red": "紅色", "red": "紅色",
"teal": "青色" "teal": "青色"
},
"title": "外觀"
},
"connections": {
"server": {
"description": "若您想連接到自定義後端保存數據,請啟用此選項並提供 URL。<0>查看指引</0>",
"label": "自訂伺服器",
"urlLabel": "自訂伺服器 URL"
},
"setup": {
"doSetup": "進行設置",
"errorStatus": {
"description": "此設置中的一項或多項似乎需要您注意。",
"title": "有些事情需要你注意"
},
"itemError": "此設置有問題。重新設置以修復它。",
"items": {
"default": "預設設置",
"extension": "擴展程式",
"proxy": "自訂代理伺服器"
},
"redoSetup": "重做設置",
"successStatus": {
"description": "一切都已準備就緒,您可以開始觀看自己喜歡的媒體。",
"title": "一切都設置好了!"
},
"unsetStatus": {
"description": "請按下右側的按鈕開始設置過程。",
"title": "您尚未完成設置"
}
},
"title": "連接",
"workers": {
"addButton": "添加新的 Worker",
"description": "為了使應用程式正常運行,所有流量都通過代理伺服器。如果要自帶 Worker請啟用此功能。 <0>說明</0>",
"emptyState": "還沒有Worker在下面添加一個",
"label": "使用自訂代理伺服器 Workers",
"urlLabel": "Worker URLs",
"urlPlaceholder": "https://"
} }
}, },
"preferences": {
"language": "應用程式語言",
"languageDescription": "語言已應用於整個應用程式。",
"thumbnail": "生成縮圖",
"thumbnailDescription": "大多數時候,視頻沒有縮圖。您可以啟用此設置以即時生成它們,但它們會使您的視頻變慢。",
"thumbnailLabel": "生成縮圖",
"title": "偏好"
},
"reset": "重置",
"save": "保存",
"sidebar": { "sidebar": {
"info": { "info": {
"appVersion": "應用版本",
"backendUrl": "後端URL",
"backendVersion": "後端版本",
"hostname": "主機名",
"insecure": "不安全", "insecure": "不安全",
"secure": "安全" "notLoggedIn": "您尚未登錄",
"secure": "安全",
"title": "應用資訊",
"unknownVersion": "未知",
"userId": "使用者ID"
} }
}, },
"subtitles": { "subtitles": {
"backgroundLabel": "背景不透明度",
"colorLabel": "顏色", "colorLabel": "顏色",
"previewQuote": "我絕不能害怕。 恐懼會扼殺思維能力。",
"textSizeLabel": "字體大小",
"title": "字幕" "title": "字幕"
} },
"unsaved": "您有未儲存的變更"
} }
} }

View File

@ -42,8 +42,8 @@
}, },
"register": { "register": {
"information": { "information": {
"color1": "头像配色 1", "color1": "头像配色",
"color2": "头像配色 2", "color2": "头像配色",
"header": "为您的设备输入名称,并选取一组代表色和一个用户图标", "header": "为您的设备输入名称,并选取一组代表色和一个用户图标",
"icon": "用户图标", "icon": "用户图标",
"next": "下一步", "next": "下一步",
@ -57,6 +57,8 @@
}, },
"host": "您正在连接到 <0>{{hostname}}</0> - 在创建账户前,确保您信任它", "host": "您正在连接到 <0>{{hostname}}</0> - 在创建账户前,确保您信任它",
"no": "返回", "no": "返回",
"noHost": "服务器尚未进行配置,因此您无法创建账户",
"noHostTitle": "未配置服务器!",
"title": "您是否信任这个服务器?", "title": "您是否信任这个服务器?",
"yes": "我信任这个服务器" "yes": "我信任这个服务器"
}, },
@ -71,11 +73,11 @@
} }
}, },
"errors": { "errors": {
"badge": "它已损坏", "badge": "",
"details": "错误细节", "details": "错误细节",
"reloadPage": "刷新页面", "reloadPage": "刷新页面",
"showError": "显示错误细节", "showError": "显示错误细节",
"title": "我们遇到错误!" "title": "我们遇到错误!"
}, },
"footer": { "footer": {
"legal": { "legal": {
@ -116,7 +118,15 @@
"failed": "查找媒体失败,请重试!", "failed": "查找媒体失败,请重试!",
"loading": "载入中……", "loading": "载入中……",
"noResults": "我们找不到任何结果!", "noResults": "我们找不到任何结果!",
"placeholder": "您想看些什么?", "placeholder": {
"default": "您想看些什么?",
"extra": [
"您想探索些什么?",
"您的片单上都有啥?",
"您最喜欢的影片是什么?",
"您最喜欢的剧目是什么?"
]
},
"sectionTitle": "搜索结果" "sectionTitle": "搜索结果"
}, },
"titles": { "titles": {
@ -242,8 +252,8 @@
}, },
"menus": { "menus": {
"downloads": { "downloads": {
"copyHlsPlaylist": "复制 HLS 播放列表链接",
"disclaimer": "下载内容是直接从内容提供者获取的。movie-web 无法控制下载内容如何被提供。", "disclaimer": "下载内容是直接从内容提供者获取的。movie-web 无法控制下载内容如何被提供。",
"downloadPlaylist": "下载播放列表",
"downloadSubtitle": "下载当前字幕", "downloadSubtitle": "下载当前字幕",
"downloadVideo": "下载视频", "downloadVideo": "下载视频",
"hlsDisclaimer": "下载内容是直接从内容提供者获取的。movie-web 无法控制下载内容如何被提供。<br /><br />请注意,您正在下载 HLS 播放列表,<bold>如您不熟悉高级流媒体格式,我们不推荐此操作</bold>。如需下载其他格式,请尝试切换视频源。", "hlsDisclaimer": "下载内容是直接从内容提供者获取的。movie-web 无法控制下载内容如何被提供。<br /><br />请注意,您正在下载 HLS 播放列表,<bold>如您不熟悉高级流媒体格式,我们不推荐此操作</bold>。如需下载其他格式,请尝试切换视频源。",

View File

@ -1,6 +1,6 @@
import { satisfies } from "semver"; import { satisfies } from "semver";
const allowedExtensionRange = "~1.0.2"; const allowedExtensionRange = "^1.0.2";
export function isAllowedExtensionVersion(version: string): boolean { export function isAllowedExtensionVersion(version: string): boolean {
return satisfies(version, allowedExtensionRange); return satisfies(version, allowedExtensionRange);

View File

@ -6,6 +6,11 @@ import {
import { isAllowedExtensionVersion } from "@/backend/extension/compatibility"; import { isAllowedExtensionVersion } from "@/backend/extension/compatibility";
import { ExtensionMakeRequestResponse } from "@/backend/extension/plasmo"; 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 // for some reason, about 500 ms is needed after
// page load before the extension starts responding properly // page load before the extension starts responding properly
const isExtensionReady = new Promise<void>((resolve) => { const isExtensionReady = new Promise<void>((resolve) => {

View File

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

View File

@ -5,13 +5,14 @@ import { useCallback } from "react";
import { isExtensionActiveCached } from "@/backend/extension/messaging"; import { isExtensionActiveCached } from "@/backend/extension/messaging";
import { ScrapingItems, ScrapingSegment } from "@/hooks/useProviderScrape"; import { ScrapingItems, ScrapingSegment } from "@/hooks/useProviderScrape";
import { BACKEND_URL } from "@/setup/constants";
import { useAuthStore } from "@/stores/auth"; import { useAuthStore } from "@/stores/auth";
import { PlayerMeta } from "@/stores/player/slices/source"; import { PlayerMeta } from "@/stores/player/slices/source";
// for anybody who cares - these are anonymous metrics. // for anybody who cares - these are anonymous metrics.
// They are just used for figuring out if providers are broken or not // They are just used for figuring out if providers are broken or not
const metricsEndpoint = "https://backend.movie-web.app/metrics/providers"; const metricsEndpoint = `${BACKEND_URL}/metrics/providers`;
const captchaMetricsEndpoint = "https://backend.movie-web.app/metrics/captcha"; const captchaMetricsEndpoint = `${BACKEND_URL}/metrics/captcha`;
const batchId = () => nanoid(32); const batchId = () => nanoid(32);
export type ProviderMetric = { export type ProviderMetric = {
@ -44,6 +45,7 @@ function getStackTrace(error: Error, lines: number) {
} }
export async function reportProviders(items: ProviderMetric[]): Promise<void> { export async function reportProviders(items: ProviderMetric[]): Promise<void> {
if (!BACKEND_URL) return;
return ofetch(metricsEndpoint, { return ofetch(metricsEndpoint, {
method: "POST", method: "POST",
body: { body: {
@ -156,6 +158,7 @@ export function useReportProviders() {
} }
export function reportCaptchaSolve(success: boolean) { export function reportCaptchaSolve(success: boolean) {
if (!BACKEND_URL) return;
ofetch(captchaMetricsEndpoint, { ofetch(captchaMetricsEndpoint, {
method: "POST", method: "POST",
body: { body: {

View File

@ -5,6 +5,11 @@ import { convertSubtitlesToSrt } from "@/components/player/utils/captions";
import { CaptionListItem } from "@/stores/player/slices/source"; import { CaptionListItem } from "@/stores/player/slices/source";
import { SimpleCache } from "@/utils/cache"; import { SimpleCache } from "@/utils/cache";
import {
isExtensionActiveCached,
sendExtensionRequest,
} from "../extension/messaging";
export const subtitleTypeList = list().map((type) => `.${type}`); export const subtitleTypeList = list().map((type) => `.${type}`);
const downloadCache = new SimpleCache<string, string>(); const downloadCache = new SimpleCache<string, string>();
downloadCache.setCompare((a, b) => a === b); downloadCache.setCompare((a, b) => a === b);
@ -21,7 +26,22 @@ export async function downloadCaption(
let data: string | undefined; let data: string | undefined;
if (caption.needsProxy) { if (caption.needsProxy) {
data = await proxiedFetch<string>(caption.url, { responseType: "text" }); if (isExtensionActiveCached()) {
const extensionResponse = await sendExtensionRequest({
url: caption.url,
method: "GET",
});
if (
!extensionResponse?.success ||
typeof extensionResponse.response.body !== "string"
) {
throw new Error("failed to get caption data from extension");
}
data = extensionResponse.response.body;
} else {
data = await proxiedFetch<string>(caption.url, { responseType: "text" });
}
} else { } else {
data = await fetch(caption.url).then((v) => v.text()); data = await fetch(caption.url).then((v) => v.text());
} }

View File

@ -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,

View File

@ -31,10 +31,16 @@ export function Button(props: Props) {
>, >,
) => { ) => {
if (loading) return; if (loading) return;
if (href && !onClick) navigate(href); if (href && !onClick) {
else onClick?.(event); event.preventDefault();
if (!href.includes("http")) {
navigate(href);
} else {
window.open(href, "_blank", "noreferrer");
}
} else onClick?.(event);
}, },
[onClick, href, navigate, 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";

View File

@ -47,8 +47,22 @@ export function Volume(props: Props) {
if (dragging) percentage = makePercentage(dragPercentage); if (dragging) percentage = makePercentage(dragPercentage);
const percentageString = makePercentageString(percentage); const percentageString = makePercentageString(percentage);
const handleWheel = useCallback(
(event: React.WheelEvent<HTMLDivElement>) => {
event.preventDefault();
let newVolume = volume - event.deltaY / 1000;
newVolume = Math.max(0, Math.min(newVolume, 1));
setVolume(newVolume);
},
[volume, setVolume],
);
return ( return (
<div className={props.className} onMouseEnter={handleMouseEnter}> <div
className={props.className}
onMouseEnter={handleMouseEnter}
onWheel={handleWheel}
>
<div className="pointer-events-auto flex cursor-pointer items-center py-0"> <div className="pointer-events-auto flex cursor-pointer items-center py-0">
<div className="px-4 text-2xl text-white" onClick={handleClick}> <div className="px-4 text-2xl text-white" onClick={handleClick}>
<Icon icon={percentage > 0 ? Icons.VOLUME : Icons.VOLUME_X} /> <Icon icon={percentage > 0 ? Icons.VOLUME : Icons.VOLUME_X} />

View File

@ -82,7 +82,7 @@ export function DownloadView({ id }: { id: string }) {
copyToClipboard(downloadUrl); copyToClipboard(downloadUrl);
}} }}
> >
{t("player.menus.downloads.downloadPlaylist")} {t("player.menus.downloads.copyHlsPlaylist")}
</Button> </Button>
<Button <Button
className="w-full mt-2" className="w-full mt-2"

View File

@ -1,6 +1,11 @@
import fscreen from "fscreen"; import fscreen from "fscreen";
import Hls, { Level } from "hls.js"; import Hls, { Level } from "hls.js";
import {
RULE_IDS,
isExtensionActiveCached,
setDomainRule,
} from "@/backend/extension/messaging";
import { import {
DisplayInterface, DisplayInterface,
DisplayInterfaceEvents, DisplayInterfaceEvents,
@ -31,8 +36,8 @@ const levelConversionMap: Record<number, SourceQuality> = {
480: "480", 480: "480",
}; };
function hlsLevelToQuality(level: Level): SourceQuality | null { function hlsLevelToQuality(level?: Level): SourceQuality | null {
return levelConversionMap[level.height] ?? null; return levelConversionMap[level?.height ?? 0] ?? null;
} }
function qualityToHlsLevel(quality: SourceQuality): number | null { function qualityToHlsLevel(quality: SourceQuality): number | null {
@ -131,7 +136,7 @@ export function makeVideoElementDisplayInterface(): DisplayInterface {
}); });
hls.on(Hls.Events.ERROR, (event, data) => { hls.on(Hls.Events.ERROR, (event, data) => {
console.error("HLS error", data); console.error("HLS error", data);
if (data.fatal) { if (data.fatal && src?.url === data.frag?.baseurl) {
emit("error", { emit("error", {
message: data.error.message, message: data.error.message,
stackTrace: data.error.stack, stackTrace: data.error.stack,
@ -144,6 +149,24 @@ export function makeVideoElementDisplayInterface(): DisplayInterface {
if (!hls) return; if (!hls) return;
reportLevels(); reportLevels();
setupQualityForHls(); 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, () => { hls.on(Hls.Events.LEVEL_SWITCHED, () => {
if (!hls) return; if (!hls) return;

View File

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

View File

@ -63,6 +63,7 @@ export function useAuth() {
const login = useCallback( const login = useCallback(
async (loginData: LoginData) => { async (loginData: LoginData) => {
if (!backendUrl) return;
const keys = await keysFromMnemonic(loginData.mnemonic); const keys = await keysFromMnemonic(loginData.mnemonic);
const publicKeyBase64Url = bytesToBase64Url(keys.publicKey); const publicKeyBase64Url = bytesToBase64Url(keys.publicKey);
const { challenge } = await getLoginChallengeToken( const { challenge } = await getLoginChallengeToken(
@ -87,7 +88,7 @@ export function useAuth() {
); );
const logout = useCallback(async () => { const logout = useCallback(async () => {
if (!currentAccount) return; if (!currentAccount || !backendUrl) return;
try { try {
await removeSession( await removeSession(
backendUrl, backendUrl,
@ -102,6 +103,7 @@ export function useAuth() {
const register = useCallback( const register = useCallback(
async (registerData: RegistrationData) => { async (registerData: RegistrationData) => {
if (!backendUrl) return;
const { challenge } = await getRegisterChallengeToken( const { challenge } = await getRegisterChallengeToken(
backendUrl, backendUrl,
registerData.recaptchaToken, registerData.recaptchaToken,
@ -134,6 +136,7 @@ export function useAuth() {
progressItems: Record<string, ProgressMediaItem>, progressItems: Record<string, ProgressMediaItem>,
bookmarks: Record<string, BookmarkMediaItem>, bookmarks: Record<string, BookmarkMediaItem>,
) => { ) => {
if (!backendUrl) return;
if ( if (
Object.keys(progressItems).length === 0 && Object.keys(progressItems).length === 0 &&
Object.keys(bookmarks).length === 0 Object.keys(bookmarks).length === 0
@ -159,6 +162,7 @@ export function useAuth() {
const restore = useCallback( const restore = useCallback(
async (account: AccountWithToken) => { async (account: AccountWithToken) => {
if (!backendUrl) return;
let user: { user: UserResponse; session: SessionResponse }; let user: { user: UserResponse; session: SessionResponse };
try { try {
user = await getUser(backendUrl, account.token); user = await getUser(backendUrl, account.token);

View File

@ -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() { 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;
} }

View File

@ -9,6 +9,7 @@ import {
} from "react"; } from "react";
import { SubtitleStyling } from "@/stores/subtitles"; import { SubtitleStyling } from "@/stores/subtitles";
import { usePreviewThemeStore } from "@/stores/theme";
export function useDerived<T>( export function useDerived<T>(
initial: T, initial: T,
@ -56,6 +57,11 @@ export function useSettingsState(
const [backendUrlState, setBackendUrl, resetBackendUrl, backendUrlChanged] = const [backendUrlState, setBackendUrl, resetBackendUrl, backendUrlChanged] =
useDerived(backendUrl); useDerived(backendUrl);
const [themeState, setTheme, resetTheme, themeChanged] = useDerived(theme); const [themeState, setTheme, resetTheme, themeChanged] = useDerived(theme);
const setPreviewTheme = usePreviewThemeStore((s) => s.setPreviewTheme);
const resetPreviewTheme = useCallback(
() => setPreviewTheme(theme),
[setPreviewTheme, theme],
);
const [ const [
appLanguageState, appLanguageState,
setAppLanguage, setAppLanguage,
@ -81,6 +87,7 @@ export function useSettingsState(
function reset() { function reset() {
resetTheme(); resetTheme();
resetPreviewTheme();
resetAppLanguage(); resetAppLanguage();
resetSubStyling(); resetSubStyling();
resetProxyUrls(); resetProxyUrls();

View File

@ -33,7 +33,7 @@ import { AccountWithToken, useAuthStore } from "@/stores/auth";
import { useLanguageStore } from "@/stores/language"; import { useLanguageStore } from "@/stores/language";
import { usePreferencesStore } from "@/stores/preferences"; import { usePreferencesStore } from "@/stores/preferences";
import { useSubtitleStore } from "@/stores/subtitles"; import { useSubtitleStore } from "@/stores/subtitles";
import { useThemeStore } from "@/stores/theme"; import { usePreviewThemeStore, useThemeStore } from "@/stores/theme";
import { SubPageLayout } from "./layouts/SubPageLayout"; import { SubPageLayout } from "./layouts/SubPageLayout";
import { PreferencesPart } from "./parts/settings/PreferencesPart"; import { PreferencesPart } from "./parts/settings/PreferencesPart";
@ -70,6 +70,7 @@ export function AccountSettings(props: {
const url = useBackendUrl(); const url = useBackendUrl();
const { account } = props; const { account } = props;
const [sessionsResult, execSessions] = useAsyncFn(() => { const [sessionsResult, execSessions] = useAsyncFn(() => {
if (!url) return Promise.resolve([]);
return getSessions(url, account); return getSessions(url, account);
}, [account, url]); }, [account, url]);
useEffect(() => { useEffect(() => {
@ -103,6 +104,8 @@ export function SettingsPage() {
const { t } = useTranslation(); const { t } = useTranslation();
const activeTheme = useThemeStore((s) => s.theme); const activeTheme = useThemeStore((s) => s.theme);
const setTheme = useThemeStore((s) => s.setTheme); const setTheme = useThemeStore((s) => s.setTheme);
const previewTheme = usePreviewThemeStore((s) => s.previewTheme);
const setPreviewTheme = usePreviewThemeStore((s) => s.setPreviewTheme);
const appLanguage = useLanguageStore((s) => s.language); const appLanguage = useLanguageStore((s) => s.language);
const setAppLanguage = useLanguageStore((s) => s.setLanguage); const setAppLanguage = useLanguageStore((s) => s.setLanguage);
@ -143,8 +146,27 @@ export function SettingsPage() {
enableThumbnails, enableThumbnails,
); );
useEffect(() => {
setPreviewTheme(activeTheme ?? "default");
}, [setPreviewTheme, activeTheme]);
useEffect(() => {
// Clear preview theme on unmount
return () => {
setPreviewTheme(null);
};
}, [setPreviewTheme]);
const setThemeWithPreview = useCallback(
(theme: string) => {
state.theme.set(theme === "default" ? null : theme);
setPreviewTheme(theme);
},
[state.theme, setPreviewTheme],
);
const saveChanges = useCallback(async () => { const saveChanges = useCallback(async () => {
if (account) { if (account && backendUrl) {
if ( if (
state.appLanguage.changed || state.appLanguage.changed ||
state.theme.changed || state.theme.changed ||
@ -186,7 +208,13 @@ export function SettingsPage() {
// when backend url gets changed, log the user out first // when backend url gets changed, log the user out first
if (state.backendUrl.changed) { if (state.backendUrl.changed) {
await logout(); 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, state,
@ -241,7 +269,11 @@ export function SettingsPage() {
/> />
</div> </div>
<div id="settings-appearance" className="mt-48"> <div id="settings-appearance" className="mt-48">
<ThemePart active={state.theme.state} setTheme={state.theme.set} /> <ThemePart
active={previewTheme ?? "default"}
inUse={activeTheme ?? "default"}
setTheme={setThemeWithPreview}
/>
</div> </div>
<div id="settings-captions" className="mt-48"> <div id="settings-captions" className="mt-48">
<CaptionsPart <CaptionsPart

View File

@ -10,13 +10,13 @@ export function BlurEllipsis(props: { positionClass?: string }) {
<div <div
className={classNames( className={classNames(
props.positionClass ?? "fixed", props.positionClass ?? "fixed",
"top-0 -right-48 rotate-[32deg] w-[50rem] h-[15rem] rounded-[70rem] bg-background-accentA blur-[100px] pointer-events-none opacity-25", "top-0 -right-48 rotate-[32deg] w-[50rem] h-[15rem] rounded-[70rem] bg-background-accentA blur-[100px] pointer-events-none opacity-25 transition-colors duration-75",
)} )}
/> />
<div <div
className={classNames( className={classNames(
props.positionClass ?? "fixed", props.positionClass ?? "fixed",
"top-0 right-48 rotate-[32deg] w-[50rem] h-[15rem] rounded-[70rem] bg-background-accentB blur-[100px] pointer-events-none opacity-25", "top-0 right-48 rotate-[32deg] w-[50rem] h-[15rem] rounded-[70rem] bg-background-accentB blur-[100px] pointer-events-none opacity-25 transition-colors duration-75",
)} )}
/> />
</> </>

View File

@ -13,6 +13,7 @@ import {
} from "@/pages/onboarding/onboardingHooks"; } from "@/pages/onboarding/onboardingHooks";
import { Card, CardContent, Link } from "@/pages/onboarding/utils"; import { Card, CardContent, Link } from "@/pages/onboarding/utils";
import { PageTitle } from "@/pages/parts/util/PageTitle"; import { PageTitle } from "@/pages/parts/util/PageTitle";
import { getProxyUrls } from "@/utils/proxyUrls";
function VerticalLine(props: { className?: string }) { function VerticalLine(props: { className?: string }) {
return ( return (
@ -27,6 +28,7 @@ export function OnboardingPage() {
const skipModal = useModal("skip"); const skipModal = useModal("skip");
const { completeAndRedirect } = useRedirectBack(); const { completeAndRedirect } = useRedirectBack();
const { t } = useTranslation(); const { t } = useTranslation();
const noProxies = getProxyUrls().length === 0;
return ( return (
<MinimalPageLayout> <MinimalPageLayout>
@ -85,32 +87,34 @@ export function OnboardingPage() {
</CardContent> </CardContent>
</Card> </Card>
</div> </div>
{noProxies ? null : (
<p className="text-center hidden md:block mt-12"> <>
<Trans i18nKey="onboarding.start.options.default.text"> <p className="text-center hidden md:block mt-12">
<br />
<a
onClick={skipModal.show}
type="button"
className="text-onboarding-link hover:opacity-75 cursor-pointer"
/>
</Trans>
</p>
<div className=" max-w-[300px] mx-auto md:hidden mt-12 ">
<Button
className="!text-type-text !bg-opacity-50"
theme="secondary"
onClick={skipModal.show}
>
<span>
<Trans i18nKey="onboarding.start.options.default.text"> <Trans i18nKey="onboarding.start.options.default.text">
<span /> <br />
<span /> <a
onClick={skipModal.show}
type="button"
className="text-onboarding-link hover:opacity-75 cursor-pointer"
/>
</Trans> </Trans>
</span> </p>
</Button> <div className=" max-w-[300px] mx-auto md:hidden mt-12 ">
</div> <Button
className="!text-type-text !bg-opacity-50"
theme="secondary"
onClick={skipModal.show}
>
<span>
<Trans i18nKey="onboarding.start.options.default.text">
<span />
<span />
</Trans>
</span>
</Button>
</div>
</>
)}
</CenterContainer> </CenterContainer>
</MinimalPageLayout> </MinimalPageLayout>
); );

View File

@ -115,7 +115,7 @@ export function ExtensionStatus(props: {
</div> </div>
</Card> </Card>
{lastKnownStatus === "unknown" ? <RefreshBar /> : null} {lastKnownStatus === "unknown" ? <RefreshBar /> : null}
{props.showHelp ? ( {props.showHelp && props.status !== "success" ? (
<Card className="mt-4"> <Card className="mt-4">
<div className="flex items-center space-x-7"> <div className="flex items-center space-x-7">
<Icon icon={Icons.WARNING} className="text-type-danger text-2xl" /> <Icon icon={Icons.WARNING} className="text-type-danger text-2xl" />

View File

@ -43,7 +43,7 @@ export function OnboardingProxyPage() {
throw new Error("onboarding.proxy.input.errorNotProxy"); throw new Error("onboarding.proxy.input.errorNotProxy");
setProxySet([url]); setProxySet([url]);
if (account) { if (account && backendUrl) {
await updateSettings(backendUrl, account, { await updateSettings(backendUrl, account, {
proxyUrls: [url], proxyUrls: [url],
}); });

View File

@ -32,13 +32,21 @@ export function BackendTestPart() {
value: null, value: null,
}); });
if (!backendUrl) {
return setStatus({
hasTested: true,
success: false,
errorText: "Backend URL is not set",
value: null,
});
}
try { try {
const backendData = await getBackendMeta(backendUrl); const backendData = await getBackendMeta(backendUrl);
return setStatus({ return setStatus({
hasTested: true, hasTested: true,
success: true, success: true,
errorText: errorText: "",
"Failed to call backend, double check the URL key and your internet connection",
value: backendData, value: backendData,
}); });
} catch (err) { } catch (err) {
@ -46,7 +54,7 @@ export function BackendTestPart() {
hasTested: true, hasTested: true,
success: false, success: false,
errorText: errorText:
"Failed to call backend, double check the URL key and your internet connection", "Failed to call backend, double check the URL, your internet connection, and ensure CORS is properly configured on your backend.",
value: null, value: null,
}); });
} }

View File

@ -25,11 +25,11 @@ 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,
errorText: "TMDB api key is not set", errorText: "TMDB API key is not set",
}); });
} }
const isJWT = tmdbApiKey.split(".").length > 2; const isJWT = tmdbApiKey.split(".").length > 2;
@ -37,7 +37,7 @@ export function TMDBTestPart() {
return setStatus({ return setStatus({
hasTested: true, hasTested: true,
success: false, success: false,
errorText: "TMDB api key is not a read only key", errorText: "TMDB API key is not a read only key",
}); });
} }
@ -48,7 +48,7 @@ export function TMDBTestPart() {
hasTested: true, hasTested: true,
success: false, success: false,
errorText: errorText:
"Failed to call tmdb, double check api key and your internet connection", "Failed to call TMDB, double check API key and your internet connection",
}); });
} }
@ -61,7 +61,7 @@ export function TMDBTestPart() {
return ( return (
<> <>
<Heading2 className="mb-8 mt-12">TMDB tests</Heading2> <Heading2 className="mb-8 mt-12">TMDB test</Heading2>
<Box> <Box>
<div className="flex items-center"> <div className="flex items-center">
<div className="flex-1"> <div className="flex-1">

View File

@ -52,14 +52,18 @@ export function WorkerTestPart() {
{ id: string; status: "error" | "success"; error?: Error }[] { id: string; status: "error" | "success"; error?: Error }[]
>([]); >([]);
const [buttonDisabled, setButtonDisabled] = useState(false);
const [testState, runTests] = useAsyncFn(async () => { const [testState, runTests] = useAsyncFn(async () => {
setButtonDisabled(true);
function updateWorker(id: string, data: (typeof workerState)[number]) { function updateWorker(id: string, data: (typeof workerState)[number]) {
setWorkerState((s) => { setWorkerState((s) => {
return [...s.filter((v) => v.id !== id), data]; return [...s.filter((v) => v.id !== id), data];
}); });
} }
setWorkerState([]); setWorkerState([]);
for (const worker of workerList) {
const workerPromises = workerList.map(async (worker) => {
try { try {
if (worker.url.endsWith("/")) { if (worker.url.endsWith("/")) {
updateWorker(worker.id, { updateWorker(worker.id, {
@ -67,7 +71,7 @@ export function WorkerTestPart() {
status: "error", status: "error",
error: new Error("URL ends with slash"), error: new Error("URL ends with slash"),
}); });
continue; return;
} }
await singularProxiedFetch( await singularProxiedFetch(
worker.url, worker.url,
@ -85,7 +89,10 @@ export function WorkerTestPart() {
error: err as Error, error: err as Error,
}); });
} }
} });
await Promise.all(workerPromises);
setTimeout(() => setButtonDisabled(false), 5000);
}, [workerList, setWorkerState]); }, [workerList, setWorkerState]);
return ( return (
@ -112,7 +119,12 @@ export function WorkerTestPart() {
})} })}
<Divider /> <Divider />
<div className="flex justify-end"> <div className="flex justify-end">
<Button theme="purple" loading={testState.loading} onClick={runTests}> <Button
theme="purple"
loading={testState.loading}
onClick={buttonDisabled ? undefined : runTests}
disabled={buttonDisabled}
>
Test workers Test workers
</Button> </Button>
</div> </div>

View File

@ -52,6 +52,9 @@ export function LoginFormPart(props: LoginFormPartProps) {
throw err; throw err;
} }
if (!account)
throw new Error(t("auth.login.validationError") ?? undefined);
await importData(account, progressItems, bookmarkItems); await importData(account, progressItems, bookmarkItems);
await restore(account); await restore(account);

View File

@ -22,8 +22,12 @@ interface TrustBackendPartProps {
export function TrustBackendPart(props: TrustBackendPartProps) { export function TrustBackendPart(props: TrustBackendPartProps) {
const navigate = useNavigate(); const navigate = useNavigate();
const backendUrl = useBackendUrl(); const backendUrl = useBackendUrl();
const hostname = useMemo(() => new URL(backendUrl).hostname, [backendUrl]); const hostname = useMemo(
() => (backendUrl ? new URL(backendUrl).hostname : undefined),
[backendUrl],
);
const result = useAsync(() => { const result = useAsync(() => {
if (!backendUrl) return Promise.resolve(null);
return getBackendMeta(backendUrl); return getBackendMeta(backendUrl);
}, [backendUrl]); }, [backendUrl]);
const { t } = useTranslation(); const { t } = useTranslation();
@ -50,38 +54,52 @@ export function TrustBackendPart(props: TrustBackendPartProps) {
return ( return (
<LargeCard> <LargeCard>
<LargeCardText <LargeCardText
title={t("auth.trust.title")} title={hostname ? t("auth.trust.title") : t("auth.trust.noHostTitle")}
icon={<Icon icon={Icons.CIRCLE_EXCLAMATION} />} icon={<Icon icon={Icons.CIRCLE_EXCLAMATION} />}
> >
<Trans {hostname ? (
i18nKey="auth.trust.host" <Trans
values={{ i18nKey="auth.trust.host"
hostname, values={{
}} hostname,
> }}
<span className="text-white" /> >
</Trans> <span className="text-white" />
</Trans>
) : (
<p>{t("auth.trust.noHost")}</p>
)}
</LargeCardText> </LargeCardText>
<div className="border border-authentication-border rounded-xl px-4 py-8 flex flex-col items-center space-y-2 my-8"> {hostname ? (
{cardContent} <>
</div> <div className="border border-authentication-border rounded-xl px-4 py-8 flex flex-col items-center space-y-2 my-8">
<LargeCardButtons> {cardContent}
<Button theme="secondary" onClick={() => navigate("/")}> </div>
{t("auth.trust.no")} <LargeCardButtons>
</Button> <Button theme="secondary" onClick={() => navigate("/")}>
<Button {t("auth.trust.no")}
theme="purple" </Button>
onClick={() => result.value && props.onNext?.(result.value)} <Button
> theme="purple"
{t("auth.trust.yes")} onClick={() => result.value && props.onNext?.(result.value)}
</Button> >
</LargeCardButtons> {t("auth.trust.yes")}
<p className="text-center mt-6"> </Button>
<Trans i18nKey="auth.hasAccount"> </LargeCardButtons>
<MwLink to="/login">.</MwLink> <p className="text-center mt-6">
</Trans> <Trans i18nKey="auth.hasAccount">
</p> <MwLink to="/login">.</MwLink>
</Trans>
</p>
</>
) : (
<LargeCardButtons>
<Button theme="purple" onClick={() => navigate("/")}>
{t("auth.trust.no")}
</Button>
</LargeCardButtons>
)}
</LargeCard> </LargeCard>
); );
} }

View File

@ -47,6 +47,8 @@ export function VerifyPassphrase(props: VerifyPassphraseProps) {
const [result, execute] = useAsyncFn( const [result, execute] = useAsyncFn(
async (inputMnemonic: string) => { async (inputMnemonic: string) => {
if (!backendUrl)
throw new Error(t("auth.verify.noBackendUrl") ?? undefined);
if (!props.mnemonic || !props.userData) if (!props.mnemonic || !props.userData)
throw new Error(t("auth.verify.invalidData") ?? undefined); throw new Error(t("auth.verify.invalidData") ?? undefined);
@ -68,6 +70,9 @@ export function VerifyPassphrase(props: VerifyPassphraseProps) {
recaptchaToken, recaptchaToken,
}); });
if (!account)
throw new Error(t("auth.verify.registrationFailed") ?? undefined);
await importData(account, progressItems, bookmarkItems); await importData(account, progressItems, bookmarkItems);
await updateSettings(backendUrl, account, { await updateSettings(backendUrl, account, {

View File

@ -1,5 +1,4 @@
import { useCallback, useEffect, useRef, useState } from "react"; import { useCallback, useEffect, useRef, useState } from "react";
import { useTranslation } from "react-i18next";
import Sticky from "react-sticky-el"; import Sticky from "react-sticky-el";
import { useWindowSize } from "react-use"; import { useWindowSize } from "react-use";
@ -26,7 +25,6 @@ function getTimeOfDay(date: Date): "night" | "morning" | "day" {
export function HeroPart({ setIsSticky, searchParams }: HeroPartProps) { export function HeroPart({ setIsSticky, searchParams }: HeroPartProps) {
const { t: randomT } = useRandomTranslation(); const { t: randomT } = useRandomTranslation();
const { t } = useTranslation();
const [search, setSearch, setSearchUnFocus] = searchParams; const [search, setSearch, setSearchUnFocus] = searchParams;
const [, setShowBg] = useState(false); const [, setShowBg] = useState(false);
const bannerSize = useBannerSize(); const bannerSize = useBannerSize();
@ -54,7 +52,7 @@ export function HeroPart({ setIsSticky, searchParams }: HeroPartProps) {
const time = getTimeOfDay(new Date()); const time = getTimeOfDay(new Date());
const title = randomT(`home.titles.${time}`); const title = randomT(`home.titles.${time}`);
const placeholder = randomT(`home.search.placeholder`);
const inputRef = useRef<HTMLInputElement>(null); const inputRef = useRef<HTMLInputElement>(null);
useSlashFocus(inputRef); useSlashFocus(inputRef);
@ -77,7 +75,7 @@ export function HeroPart({ setIsSticky, searchParams }: HeroPartProps) {
onChange={setSearch} onChange={setSearch}
value={search} value={search}
onUnFocus={setSearchUnFocus} onUnFocus={setSearchUnFocus}
placeholder={t("home.search.placeholder") ?? ""} placeholder={placeholder ?? ""}
/> />
</Sticky> </Sticky>
</div> </div>

View File

@ -18,7 +18,7 @@ export function AccountActionsPart() {
const deleteModal = useModal("account-delete"); const deleteModal = useModal("account-delete");
const [deleteResult, deleteExec] = useAsyncFn(async () => { const [deleteResult, deleteExec] = useAsyncFn(async () => {
if (!account) return; if (!account || !url) return;
await deleteUser(url, account); await deleteUser(url, account);
await logout(); await logout();
deleteModal.hide(); deleteModal.hide();

View File

@ -55,7 +55,7 @@ function ProxyEdit({ proxyUrls, setProxyUrls }: ProxyEditProps) {
</p> </p>
<p className="max-w-[20rem] font-medium"> <p className="max-w-[20rem] font-medium">
<Trans i18nKey="settings.connections.workers.description"> <Trans i18nKey="settings.connections.workers.description">
<MwLink to="https://docs.movie-web.app/proxy/deploy"> <MwLink to="https://movie-web.github.io/docs/proxy/deploy">
Proxy documentation Proxy documentation
</MwLink> </MwLink>
</Trans> </Trans>
@ -125,7 +125,7 @@ function BackendEdit({ backendUrl, setBackendUrl }: BackendEditProps) {
</p> </p>
<p className="max-w-[20rem] font-medium"> <p className="max-w-[20rem] font-medium">
<Trans i18nKey="settings.connections.server.description"> <Trans i18nKey="settings.connections.server.description">
<MwLink to="https://docs.movie-web.app/backend/deploy"> <MwLink to="https://movie-web.github.io/docs/backend/deploy">
Backend documentation Backend documentation
</MwLink> </MwLink>
</Trans> </Trans>

View File

@ -24,6 +24,7 @@ export function Device(props: {
const token = useAuthStore((s) => s.account?.token); const token = useAuthStore((s) => s.account?.token);
const [result, exec] = useAsyncFn(async () => { const [result, exec] = useAsyncFn(async () => {
if (!token) throw new Error("No token present"); if (!token) throw new Error("No token present");
if (!url) throw new Error("No backend set");
await removeSession(url, token, props.id); await removeSession(url, token, props.id);
props.onRemove?.(); props.onRemove?.();
}, [url, token, props.id]); }, [url, token, props.id]);

View File

@ -14,9 +14,9 @@ import { useAuthStore } from "@/stores/auth";
const rem = 16; const rem = 16;
function SecureBadge(props: { url: string }) { function SecureBadge(props: { url: string | null }) {
const { t } = useTranslation(); const { t } = useTranslation();
const secure = props.url.startsWith("https://"); const secure = props.url ? props.url.startsWith("https://") : false;
return ( return (
<div className="flex items-center gap-1 -mx-1 ml-3 px-1 rounded bg-largeCard-background font-bold"> <div className="flex items-center gap-1 -mx-1 ml-3 px-1 rounded bg-largeCard-background font-bold">
<Icon icon={secure ? Icons.LOCK : Icons.UNLOCK} /> <Icon icon={secure ? Icons.LOCK : Icons.UNLOCK} />
@ -68,6 +68,7 @@ export function SidebarPart() {
const backendUrl = useBackendUrl(); const backendUrl = useBackendUrl();
const backendMeta = useAsync(async () => { const backendMeta = useAsync(async () => {
if (!backendUrl) return;
return getBackendMeta(backendUrl); return getBackendMeta(backendUrl);
}, [backendUrl]); }, [backendUrl]);
@ -159,7 +160,7 @@ export function SidebarPart() {
<SecureBadge url={backendUrl} /> <SecureBadge url={backendUrl} />
</div> </div>
<p className="text-white"> <p className="text-white">
{backendUrl.replace(/https?:\/\//, "")} {backendUrl?.replace(/https?:\/\//, "") ?? "—"}
</p> </p>
</div> </div>

View File

@ -5,20 +5,29 @@ import { Icon, Icons } from "@/components/Icon";
import { Heading1 } from "@/components/utils/Text"; import { Heading1 } from "@/components/utils/Text";
const availableThemes = [ const availableThemes = [
{
id: "default",
selector: "theme-default",
key: "settings.appearance.themes.default",
},
{ {
id: "blue", id: "blue",
selector: "theme-blue",
key: "settings.appearance.themes.blue", key: "settings.appearance.themes.blue",
}, },
{ {
id: "teal", id: "teal",
selector: "theme-teal",
key: "settings.appearance.themes.teal", key: "settings.appearance.themes.teal",
}, },
{ {
id: "red", id: "red",
selector: "theme-red",
key: "settings.appearance.themes.red", key: "settings.appearance.themes.red",
}, },
{ {
id: "gray", id: "gray",
selector: "theme-gray",
key: "settings.appearance.themes.gray", key: "settings.appearance.themes.gray",
}, },
]; ];
@ -26,6 +35,7 @@ const availableThemes = [
function ThemePreview(props: { function ThemePreview(props: {
selector?: string; selector?: string;
active?: boolean; active?: boolean;
inUse?: boolean;
name: string; name: string;
onClick?: () => void; onClick?: () => void;
}) { }) {
@ -105,7 +115,7 @@ function ThemePreview(props: {
<span <span
className={classNames( className={classNames(
"inline-block px-3 py-1 leading-tight text-sm transition-opacity duration-150 rounded-full bg-pill-activeBackground text-white/85", "inline-block px-3 py-1 leading-tight text-sm transition-opacity duration-150 rounded-full bg-pill-activeBackground text-white/85",
props.active ? "opacity-100" : "opacity-0 pointer-events-none", props.inUse ? "opacity-100" : "opacity-0 pointer-events-none",
)} )}
> >
{t("settings.appearance.activeTheme")} {t("settings.appearance.activeTheme")}
@ -116,8 +126,9 @@ function ThemePreview(props: {
} }
export function ThemePart(props: { export function ThemePart(props: {
active: string | null; active: string;
setTheme: (theme: string | null) => void; inUse: string;
setTheme: (theme: string) => void;
}) { }) {
const { t } = useTranslation(); const { t } = useTranslation();
@ -125,17 +136,11 @@ export function ThemePart(props: {
<div> <div>
<Heading1 border>{t("settings.appearance.title")}</Heading1> <Heading1 border>{t("settings.appearance.title")}</Heading1>
<div className="grid grid-cols-[repeat(auto-fill,minmax(160px,1fr))] gap-6 max-w-[700px]"> <div className="grid grid-cols-[repeat(auto-fill,minmax(160px,1fr))] gap-6 max-w-[700px]">
{/* default theme */}
<ThemePreview
name={t("settings.appearance.themes.default")}
selector="theme-default"
active={props.active === null}
onClick={() => props.setTheme(null)}
/>
{availableThemes.map((v) => ( {availableThemes.map((v) => (
<ThemePreview <ThemePreview
selector={`theme-${v.id}`} selector={v.selector}
active={props.active === v.id} active={props.active === v.id}
inUse={props.inUse === v.id}
name={t(v.key)} name={t(v.key)}
key={v.id} key={v.id}
onClick={() => props.setTheme(v.id)} onClick={() => props.setTheme(v.id)}

View File

@ -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())

View File

@ -1,6 +1,6 @@
export const APP_VERSION = import.meta.env.PACKAGE_VERSION; export const APP_VERSION = import.meta.env.PACKAGE_VERSION;
export const DISCORD_LINK = "https://discord.movie-web.app"; export const DISCORD_LINK = "https://movie-web.github.io/links/discord";
export const GITHUB_LINK = "https://github.com/movie-web/movie-web"; export const GITHUB_LINK = "https://github.com/movie-web/movie-web";
export const DONATION_LINK = "https://ko-fi.com/movieweb"; export const DONATION_LINK = "https://ko-fi.com/movieweb";
export const GA_ID = "G-44YVXRL61C"; export const GA_ID = import.meta.env.VITE_GA_ID;
export const BACKEND_URL = "https://backend.movie-web.app"; export const BACKEND_URL = import.meta.env.VITE_BACKEND_URL;

View File

@ -2,8 +2,10 @@ import ReactGA from "react-ga4";
import { GA_ID } from "@/setup/constants"; import { GA_ID } from "@/setup/constants";
ReactGA.initialize([ if (GA_ID) {
{ ReactGA.initialize([
trackingId: GA_ID, {
}, trackingId: GA_ID,
]); },
]);
}

View File

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

View File

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

View File

@ -60,6 +60,7 @@ export function BookmarkSyncer() {
useEffect(() => { useEffect(() => {
const interval = setInterval(() => { const interval = setInterval(() => {
(async () => { (async () => {
if (!url) return;
const state = useBookmarkStore.getState(); const state = useBookmarkStore.getState();
const user = useAuthStore.getState(); const user = useAuthStore.getState();
await syncBookmarks( await syncBookmarks(

View File

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

View File

@ -62,6 +62,7 @@ export function ProgressSyncer() {
useEffect(() => { useEffect(() => {
const interval = setInterval(() => { const interval = setInterval(() => {
(async () => { (async () => {
if (!url) return;
const state = useProgressStore.getState(); const state = useProgressStore.getState();
const user = useAuthStore.getState(); const user = useAuthStore.getState();
await syncProgress( await syncProgress(

View File

@ -16,6 +16,7 @@ export function SettingsSyncer() {
useEffect(() => { useEffect(() => {
const interval = setInterval(() => { const interval = setInterval(() => {
(async () => { (async () => {
if (!url) return;
const state = useSubtitleStore.getState(); const state = useSubtitleStore.getState();
const user = useAuthStore.getState(); const user = useAuthStore.getState();
if (state.lastSync.lastSelectedLanguage === state.lastSelectedLanguage) if (state.lastSync.lastSelectedLanguage === state.lastSelectedLanguage)

View File

@ -25,12 +25,31 @@ export const useThemeStore = create(
), ),
); );
export interface PreviewThemeStore {
previewTheme: string | null;
setPreviewTheme(v: string | null): void;
}
export const usePreviewThemeStore = create(
immer<PreviewThemeStore>((set) => ({
previewTheme: null,
setPreviewTheme(v) {
set((s) => {
s.previewTheme = v;
});
},
})),
);
export function ThemeProvider(props: { export function ThemeProvider(props: {
children?: ReactNode; children?: ReactNode;
applyGlobal?: boolean; applyGlobal?: boolean;
}) { }) {
const previewTheme = usePreviewThemeStore((s) => s.previewTheme);
const theme = useThemeStore((s) => s.theme); const theme = useThemeStore((s) => s.theme);
const themeSelector = theme ? `theme-${theme}` : undefined;
const themeToDisplay = previewTheme ?? theme;
const themeSelector = themeToDisplay ? `theme-${themeToDisplay}` : undefined;
return ( return (
<div className={themeSelector}> <div className={themeSelector}>

3
vercel.json Normal file
View File

@ -0,0 +1,3 @@
{
"routes": [{ "src": "/[^.]+", "dest": "/", "status": 200 }]
}

View File

@ -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({